]> git.donarmstrong.com Git - lilypond.git/commitdiff
Imported Upstream version 2.18.0 upstream/2.18.0
authorDon Armstrong <don@donarmstrong.com>
Tue, 31 Dec 2013 20:56:31 +0000 (12:56 -0800)
committerDon Armstrong <don@donarmstrong.com>
Tue, 31 Dec 2013 20:56:31 +0000 (12:56 -0800)
2769 files changed:
.dir-locals.el [new file with mode: 0644]
.gitfilelist [new file with mode: 0644]
.gitignore
AUTHORS.txt
Documentation/GNUmakefile
Documentation/changes.tely
Documentation/common-macros.itexi
Documentation/contributor.texi
Documentation/contributor/GNUmakefile [deleted file]
Documentation/contributor/administration.itexi
Documentation/contributor/build-notes.itexi
Documentation/contributor/doc-translation-list.itexi
Documentation/contributor/doc-work.itexi
Documentation/contributor/feta-font.itexi
Documentation/contributor/introduction.itexi
Documentation/contributor/issues.itexi
Documentation/contributor/programming-work.itexi
Documentation/contributor/quick-start.itexi
Documentation/contributor/regressions.itexi
Documentation/contributor/release-work.itexi
Documentation/contributor/source-code.itexi
Documentation/cs/GNUmakefile
Documentation/cs/essay/GNUmakefile [deleted file]
Documentation/cs/included/.gitignore [new file with mode: 0644]
Documentation/cs/included/GNUmakefile [deleted file]
Documentation/cs/learning.tely [changed mode: 0755->0644]
Documentation/cs/learning/GNUmakefile [deleted file]
Documentation/cs/learning/common-notation.itely
Documentation/cs/learning/fundamental.itely
Documentation/cs/learning/tweaks.itely
Documentation/cs/macros.itexi [changed mode: 0755->0644]
Documentation/cs/texidocs/GNUmakefile [deleted file]
Documentation/cs/translations.itexi
Documentation/cs/usage/GNUmakefile [deleted file]
Documentation/cs/usage/external.itely
Documentation/cs/usage/lilypond-book.itely
Documentation/cs/usage/running.itely
Documentation/cs/usage/updating.itely
Documentation/cs/web/GNUmakefile [deleted file]
Documentation/cs/web/community.itexi
Documentation/cs/web/download.itexi [changed mode: 0755->0644]
Documentation/cs/web/manuals.itexi [changed mode: 0755->0644]
Documentation/cs/web/news-front.itexi [deleted file]
Documentation/css/GNUmakefile
Documentation/css/lilypond-website.css
Documentation/cyrillic.itexi [new file with mode: 0644]
Documentation/de/GNUmakefile
Documentation/de/essay.tely
Documentation/de/essay/GNUmakefile [deleted file]
Documentation/de/essay/engraving.itely
Documentation/de/extending/GNUmakefile [deleted file]
Documentation/de/extending/programming-interface.itely
Documentation/de/extending/scheme-tutorial.itely
Documentation/de/included/GNUmakefile [deleted file]
Documentation/de/included/generating-output.itexi
Documentation/de/learning/GNUmakefile [deleted file]
Documentation/de/learning/common-notation.itely
Documentation/de/learning/fundamental.itely
Documentation/de/learning/tweaks.itely
Documentation/de/notation.tely
Documentation/de/notation/GNUmakefile [deleted file]
Documentation/de/notation/ancient.itely
Documentation/de/notation/changing-defaults.itely
Documentation/de/notation/cheatsheet.itely
Documentation/de/notation/chords.itely
Documentation/de/notation/contemporary.itely
Documentation/de/notation/editorial.itely
Documentation/de/notation/expressive.itely
Documentation/de/notation/fretted-strings.itely
Documentation/de/notation/input.itely
Documentation/de/notation/keyboards.itely
Documentation/de/notation/notation-appendices.itely
Documentation/de/notation/percussion.itely
Documentation/de/notation/pitches.itely
Documentation/de/notation/repeats.itely
Documentation/de/notation/rhythms.itely
Documentation/de/notation/simultaneous.itely
Documentation/de/notation/spacing.itely
Documentation/de/notation/staff.itely
Documentation/de/notation/text.itely
Documentation/de/notation/vocal.itely
Documentation/de/search-box.ihtml
Documentation/de/texidocs/GNUmakefile [deleted file]
Documentation/de/texidocs/tweaking-clef-properties.texidoc
Documentation/de/translations.itexi
Documentation/de/usage/GNUmakefile [deleted file]
Documentation/de/usage/external.itely
Documentation/de/usage/lilypond-book.itely
Documentation/de/usage/running.itely
Documentation/de/usage/updating.itely
Documentation/de/web/GNUmakefile [deleted file]
Documentation/de/web/community.itexi
Documentation/de/web/download.itexi
Documentation/de/web/manuals.itexi
Documentation/es/GNUmakefile
Documentation/es/changes.tely
Documentation/es/essay/GNUmakefile [deleted file]
Documentation/es/essay/engraving.itely
Documentation/es/extending/GNUmakefile [deleted file]
Documentation/es/extending/programming-interface.itely
Documentation/es/extending/scheme-tutorial.itely
Documentation/es/included/GNUmakefile [deleted file]
Documentation/es/included/generating-output.itexi
Documentation/es/included/helpus.itexi
Documentation/es/learning/GNUmakefile [deleted file]
Documentation/es/learning/common-notation.itely
Documentation/es/learning/fundamental.itely
Documentation/es/learning/templates.itely
Documentation/es/learning/tutorial.itely
Documentation/es/learning/tweaks.itely
Documentation/es/notation.tely
Documentation/es/notation/GNUmakefile [deleted file]
Documentation/es/notation/ancient.itely
Documentation/es/notation/changing-defaults.itely
Documentation/es/notation/cheatsheet.itely
Documentation/es/notation/chords.itely
Documentation/es/notation/editorial.itely
Documentation/es/notation/expressive.itely
Documentation/es/notation/fretted-strings.itely
Documentation/es/notation/input.itely
Documentation/es/notation/keyboards.itely
Documentation/es/notation/notation-appendices.itely
Documentation/es/notation/percussion.itely
Documentation/es/notation/pitches.itely
Documentation/es/notation/repeats.itely
Documentation/es/notation/rhythms.itely
Documentation/es/notation/simultaneous.itely
Documentation/es/notation/spacing.itely
Documentation/es/notation/staff.itely
Documentation/es/notation/text.itely
Documentation/es/notation/unfretted-strings.itely
Documentation/es/notation/vocal.itely
Documentation/es/notation/wind.itely
Documentation/es/search-box.ihtml
Documentation/es/texidocs/GNUmakefile [deleted file]
Documentation/es/texidocs/accordion-discant-symbols.texidoc
Documentation/es/texidocs/accordion-registers.texidoc [new file with mode: 0644]
Documentation/es/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc
Documentation/es/texidocs/adding-ambitus-per-voice.texidoc
Documentation/es/texidocs/adding-an-extra-staff-at-a-line-break.texidoc
Documentation/es/texidocs/adding-an-extra-staff.texidoc
Documentation/es/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc [new file with mode: 0644]
Documentation/es/texidocs/adding-bar-lines-to-chordnames-context.texidoc
Documentation/es/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc
Documentation/es/texidocs/adding-drum-parts.texidoc
Documentation/es/texidocs/adding-extra-fingering-with-scheme.texidoc [new file with mode: 0644]
Documentation/es/texidocs/adding-fingerings-to-a-score.texidoc [new file with mode: 0644]
Documentation/es/texidocs/adding-fingerings-to-tablatures.texidoc
Documentation/es/texidocs/adding-indicators-to-staves-which-get-split-after-a-break.texidoc [new file with mode: 0644]
Documentation/es/texidocs/adding-links-to-objects.texidoc [new file with mode: 0644]
Documentation/es/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc
Documentation/es/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc
Documentation/es/texidocs/adding-the-current-date-to-a-score.texidoc
Documentation/es/texidocs/adding-timing-marks-to-long-glissandi.texidoc [new file with mode: 0644]
Documentation/es/texidocs/adding-volta-brackets-to-additional-staves.texidoc
Documentation/es/texidocs/additional-voices-to-avoid-collisions.texidoc
Documentation/es/texidocs/adjusting-grace-note-spacing.texidoc
Documentation/es/texidocs/adjusting-lyrics-vertical-spacing.texidoc
Documentation/es/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc
Documentation/es/texidocs/aligning-and-centering-instrument-names.texidoc
Documentation/es/texidocs/aligning-bar-numbers.texidoc
Documentation/es/texidocs/aligning-marks-with-various-notation-objects.texidoc [deleted file]
Documentation/es/texidocs/aligning-objects-created-with-the--mark-command.texidoc [new file with mode: 0644]
Documentation/es/texidocs/aligning-syllables-with-melisma.texidoc [new file with mode: 0644]
Documentation/es/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc
Documentation/es/texidocs/altering-the-length-of-beamed-stems.texidoc
Documentation/es/texidocs/alternative-bar-numbering.texidoc
Documentation/es/texidocs/alternative-breve-note.texidoc [deleted file]
Documentation/es/texidocs/alternative-breve-notes.texidoc [new file with mode: 0644]
Documentation/es/texidocs/ambitus-with-multiple-voices.texidoc
Documentation/es/texidocs/ambitus.texidoc [new file with mode: 0644]
Documentation/es/texidocs/analysis-brackets-above-the-staff.texidoc
Documentation/es/texidocs/ancient-fonts.texidoc
Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc
Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc
Documentation/es/texidocs/ancient-time-signatures.texidoc
Documentation/es/texidocs/anglican-psalm-template.texidoc
Documentation/es/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc
Documentation/es/texidocs/arabic-improvisation.texidoc
Documentation/es/texidocs/asymmetric-slurs.texidoc
Documentation/es/texidocs/automatic-beam-subdivisions.texidoc
Documentation/es/texidocs/automatically-change-durations.texidoc [new file with mode: 0644]
Documentation/es/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc [new file with mode: 0644]
Documentation/es/texidocs/avoiding-collisions-with-chord-fingerings.texidoc
Documentation/es/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc
Documentation/es/texidocs/beam-endings-in-score-context.texidoc
Documentation/es/texidocs/beam-grouping-in-7-8-time.texidoc
Documentation/es/texidocs/beams-across-line-breaks.texidoc
Documentation/es/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc
Documentation/es/texidocs/book-parts.texidoc [new file with mode: 0644]
Documentation/es/texidocs/breathing-signs.texidoc [new file with mode: 0644]
Documentation/es/texidocs/broken-crescendo-hairpin.texidoc
Documentation/es/texidocs/caesura-railtracks-with-fermata.texidoc
Documentation/es/texidocs/center-text-below-hairpin-dynamics.texidoc
Documentation/es/texidocs/centered-measure-numbers.texidoc [new file with mode: 0644]
Documentation/es/texidocs/centering-markup-on-note-heads-automatically.texidoc [new file with mode: 0644]
Documentation/es/texidocs/changing--flageolet-mark-size.texidoc
Documentation/es/texidocs/changing-a-single-notes-size-in-a-chord.texidoc
Documentation/es/texidocs/changing-beam-knee-gap.texidoc
Documentation/es/texidocs/changing-chord-separator.texidoc
Documentation/es/texidocs/changing-form-of-multi-measure-rests.texidoc
Documentation/es/texidocs/changing-fret-orientations.texidoc
Documentation/es/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc
Documentation/es/texidocs/changing-partcombine-texts.texidoc
Documentation/es/texidocs/changing-properties-for-individual-grobs.texidoc [new file with mode: 0644]
Documentation/es/texidocs/changing-stanza-fonts.texidoc [new file with mode: 0644]
Documentation/es/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc
Documentation/es/texidocs/changing-the-ambitus-gap.texidoc
Documentation/es/texidocs/changing-the-breath-mark-symbol.texidoc
Documentation/es/texidocs/changing-the-default-text-font-family.texidoc [new file with mode: 0644]
Documentation/es/texidocs/changing-the-interval-of-lines-on-the-stave.texidoc [new file with mode: 0644]
Documentation/es/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc
Documentation/es/texidocs/changing-the-number-of-lines-in-a-staff.texidoc [new file with mode: 0644]
Documentation/es/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc
Documentation/es/texidocs/changing-the-size-of-woodwind-diagrams.texidoc
Documentation/es/texidocs/changing-the-staff-size.texidoc [new file with mode: 0644]
Documentation/es/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc
Documentation/es/texidocs/changing-the-text-for-sustain-markings.texidoc
Documentation/es/texidocs/changing-the-tuplet-number.texidoc
Documentation/es/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc
Documentation/es/texidocs/chant-or-psalms-notation.texidoc
Documentation/es/texidocs/chord-glissando-in-tablature.texidoc
Documentation/es/texidocs/chord-name-exceptions.texidoc
Documentation/es/texidocs/chord-name-major7.texidoc
Documentation/es/texidocs/chordchanges-for-fretboards.texidoc
Documentation/es/texidocs/clefs-can-be-transposed-by-arbitrary-amounts.texidoc [new file with mode: 0644]
Documentation/es/texidocs/coloring-notes-depending-on-their-pitch.texidoc [new file with mode: 0644]
Documentation/es/texidocs/combining-two-parts-on-the-same-staff.texidoc
Documentation/es/texidocs/compound-time-signatures.texidoc
Documentation/es/texidocs/conducting-signs,-measure-grouping-signs.texidoc
Documentation/es/texidocs/consistently-left-aligned-bar-numbers.texidoc [new file with mode: 0644]
Documentation/es/texidocs/contemporary-glissando.texidoc
Documentation/es/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc
Documentation/es/texidocs/controlling-the-placement-of-chord-fingerings.texidoc
Documentation/es/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc
Documentation/es/texidocs/controlling-tuplet-bracket-visibility.texidoc
Documentation/es/texidocs/creating-a-delayed-turn.texidoc
Documentation/es/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc
Documentation/es/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc
Documentation/es/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc
Documentation/es/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc
Documentation/es/texidocs/creating-double-digit-fingerings.texidoc [new file with mode: 0644]
Documentation/es/texidocs/creating-metronome-marks-in-markup-mode.texidoc
Documentation/es/texidocs/creating-real-parenthesized-dynamics.texidoc
Documentation/es/texidocs/creating-simultaneous-rehearsal-marks.texidoc
Documentation/es/texidocs/creating-text-spanners.texidoc
Documentation/es/texidocs/cross-staff-stems.texidoc [new file with mode: 0644]
Documentation/es/texidocs/cross-staff-tremolos.texidoc
Documentation/es/texidocs/custodes.texidoc
Documentation/es/texidocs/customizing-fretboard-fret-diagrams.texidoc
Documentation/es/texidocs/customizing-markup-fret-diagrams.texidoc
Documentation/es/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc
Documentation/es/texidocs/defining-an-engraver-in-scheme--ambitus-engraver.texidoc [new file with mode: 0644]
Documentation/es/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc
Documentation/es/texidocs/demo-midiinstruments.texidoc [new file with mode: 0644]
Documentation/es/texidocs/demonstrating-all-headers.texidoc [new file with mode: 0644]
Documentation/es/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc
Documentation/es/texidocs/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.texidoc [new file with mode: 0644]
Documentation/es/texidocs/displaying-complex-chords.texidoc
Documentation/es/texidocs/displaying-grob-ancestry.texidoc
Documentation/es/texidocs/dotted-harmonics.texidoc [new file with mode: 0644]
Documentation/es/texidocs/double-glissando.texidoc [new file with mode: 0644]
Documentation/es/texidocs/drawing-boxes-around-grobs.texidoc [new file with mode: 0644]
Documentation/es/texidocs/drawing-circles-around-note-heads.texidoc [new file with mode: 0644]
Documentation/es/texidocs/drawing-circles-around-various-objects.texidoc [new file with mode: 0644]
Documentation/es/texidocs/dynamics-custom-text-spanner-postfix.texidoc
Documentation/es/texidocs/dynamics-text-spanner-postfix.texidoc
Documentation/es/texidocs/engravers-one-by-one.texidoc
Documentation/es/texidocs/engraving-ties-manually.texidoc
Documentation/es/texidocs/engraving-tremolos-with-floating-beams.texidoc [new file with mode: 0644]
Documentation/es/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc
Documentation/es/texidocs/extending-glissandi-across-repeats.texidoc [new file with mode: 0644]
Documentation/es/texidocs/faking-a-hammer-in-tablatures.texidoc
Documentation/es/texidocs/fine-tuning-pedal-brackets.texidoc [new file with mode: 0644]
Documentation/es/texidocs/fingering-symbols-for-wind-instruments.texidoc
Documentation/es/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc
Documentation/es/texidocs/flamenco-notation.texidoc
Documentation/es/texidocs/flat-flags-and-beam-nibs.texidoc
Documentation/es/texidocs/flute-slap-notation.texidoc [new file with mode: 0644]
Documentation/es/texidocs/forcing-a-clef-symbol-to-be-displayed.texidoc [new file with mode: 0644]
Documentation/es/texidocs/forcing-horizontal-shift-of-notes.texidoc
Documentation/es/texidocs/forcing-hyphens-to-be-shown.texidoc
Documentation/es/texidocs/forcing-measure-width-to-adapt-to-metronomemarks-width.texidoc [new file with mode: 0644]
Documentation/es/texidocs/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.texidoc [new file with mode: 0644]
Documentation/es/texidocs/fret-diagrams-explained-and-developed.texidoc [new file with mode: 0644]
Documentation/es/texidocs/fretboards-alternate-tables.texidoc
Documentation/es/texidocs/fretted-string-harmonics-in-tablature.texidoc
Documentation/es/texidocs/generating-custom-flags.texidoc [new file with mode: 0644]
Documentation/es/texidocs/generating-random-notes.texidoc
Documentation/es/texidocs/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.texidoc [new file with mode: 0644]
Documentation/es/texidocs/glissandi-can-skip-grobs.texidoc
Documentation/es/texidocs/graphical-and-text-woodwind-diagrams.texidoc
Documentation/es/texidocs/grid-lines--changing-their-appearance.texidoc
Documentation/es/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc
Documentation/es/texidocs/guitar-slides.texidoc
Documentation/es/texidocs/guitar-strum-rhythms.texidoc
Documentation/es/texidocs/hairpins-with-different-line-styles.texidoc
Documentation/es/texidocs/heavily-customized-polymetric-time-signatures.texidoc [new file with mode: 0644]
Documentation/es/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc
Documentation/es/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc
Documentation/es/texidocs/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.texidoc [new file with mode: 0644]
Documentation/es/texidocs/how-to-change-fret-diagram-position.texidoc [new file with mode: 0644]
Documentation/es/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.texidoc [new file with mode: 0644]
Documentation/es/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.texidoc [new file with mode: 0644]
Documentation/es/texidocs/how-to-put-ties-between-syllables-in-lyrics.texidoc [new file with mode: 0644]
Documentation/es/texidocs/hymn-template.texidoc
Documentation/es/texidocs/incipit.texidoc
Documentation/es/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc
Documentation/es/texidocs/inserting-a-caesura.texidoc
Documentation/es/texidocs/inserting-score-fragments-above-a-staff,-as-markups.texidoc [new file with mode: 0644]
Documentation/es/texidocs/isolated-percent-repeats.texidoc
Documentation/es/texidocs/jazz-combo-template.texidoc
Documentation/es/texidocs/keep-change-clefs-full-sized.texidoc
Documentation/es/texidocs/laissez-vibrer-ties.texidoc [new file with mode: 0644]
Documentation/es/texidocs/letter-tablature-formatting.texidoc
Documentation/es/texidocs/line-arrows.texidoc
Documentation/es/texidocs/lyrics-alignment.texidoc
Documentation/es/texidocs/makam-example.texidoc
Documentation/es/texidocs/making-an-object-invisible-with-the-transparent-property.texidoc [new file with mode: 0644]
Documentation/es/texidocs/making-glissandi-breakable.texidoc [new file with mode: 0644]
Documentation/es/texidocs/making-slurs-with-complex-dash-structure.texidoc
Documentation/es/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc
Documentation/es/texidocs/manually-break-figured-bass-extenders-for-only-some-numbers.texidoc [new file with mode: 0644]
Documentation/es/texidocs/manually-controlling-beam-positions.texidoc [new file with mode: 0644]
Documentation/es/texidocs/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.texidoc [new file with mode: 0644]
Documentation/es/texidocs/markup-lines.texidoc [new file with mode: 0644]
Documentation/es/texidocs/measure-counter.texidoc
Documentation/es/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc
Documentation/es/texidocs/merging-multi-measure-rests-in-a-polyphonic-part.texidoc [new file with mode: 0644]
Documentation/es/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc
Documentation/es/texidocs/modifying-tuplet-bracket-length.texidoc [new file with mode: 0644]
Documentation/es/texidocs/moving-dotted-notes-in-polyphony.texidoc
Documentation/es/texidocs/moving-slur-positions-vertically.texidoc
Documentation/es/texidocs/multi-measure-rest-markup.texidoc
Documentation/es/texidocs/nesting-staves.texidoc
Documentation/es/texidocs/non-default-tuplet-numbers.texidoc
Documentation/es/texidocs/non-traditional-key-signatures.texidoc
Documentation/es/texidocs/numbering-groups-of-measures.texidoc [new file with mode: 0644]
Documentation/es/texidocs/numbers-as-easy-note-heads.texidoc
Documentation/es/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc
Documentation/es/texidocs/ottava-text.texidoc
Documentation/es/texidocs/outputting-the-version-number.texidoc [new file with mode: 0644]
Documentation/es/texidocs/overriding-articulations-of-destinct-type.texidoc [new file with mode: 0644]
Documentation/es/texidocs/page-label.texidoc [new file with mode: 0644]
Documentation/es/texidocs/partcombine-and-autobeamoff.texidoc
Documentation/es/texidocs/percent-repeat-count-visibility.texidoc
Documentation/es/texidocs/percent-repeat-counter.texidoc
Documentation/es/texidocs/percussion-beaters.texidoc [new file with mode: 0644]
Documentation/es/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc
Documentation/es/texidocs/piano-template-simple.texidoc
Documentation/es/texidocs/piano-template-with-centered-lyrics.texidoc
Documentation/es/texidocs/piano-template-with-melody-and-lyrics.texidoc
Documentation/es/texidocs/placement-of-right-hand-fingerings.texidoc
Documentation/es/texidocs/polyphony-in-tablature.texidoc
Documentation/es/texidocs/positioning-arpeggios.texidoc
Documentation/es/texidocs/positioning-fingering-indications-precisely.texidoc [new file with mode: 0644]
Documentation/es/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc
Documentation/es/texidocs/positioning-grace-notes-with-floating-space.texidoc
Documentation/es/texidocs/positioning-multi-measure-rests.texidoc
Documentation/es/texidocs/positioning-segno-and-coda-with-line-break.texidoc [new file with mode: 0644]
Documentation/es/texidocs/positioning-text-markups-inside-slurs.texidoc
Documentation/es/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc
Documentation/es/texidocs/preventing-final-mark-from-removing-final-tuplet.texidoc [new file with mode: 0644]
Documentation/es/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc
Documentation/es/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc
Documentation/es/texidocs/printing-bar-numbers-at-regular-intervals.texidoc
Documentation/es/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc
Documentation/es/texidocs/printing-hairpins-in-various-styles.texidoc [new file with mode: 0644]
Documentation/es/texidocs/printing-hairpins-using-al-niente-notation.texidoc
Documentation/es/texidocs/printing-marks-at-the-end-of-a-line.texidoc
Documentation/es/texidocs/printing-marks-on-every-staff.texidoc
Documentation/es/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc
Documentation/es/texidocs/printing-music-with-different-time-signatures.texidoc [new file with mode: 0644]
Documentation/es/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc
Documentation/es/texidocs/printing-text-from-right-to-left.texidoc [new file with mode: 0644]
Documentation/es/texidocs/printing-the-bar-number-for-the-first-measure.texidoc
Documentation/es/texidocs/proportional-strict-notespacing.texidoc [new file with mode: 0644]
Documentation/es/texidocs/putting-lyrics-inside-the-staff.texidoc [new file with mode: 0644]
Documentation/es/texidocs/quoting-another-voice-with-transposition.texidoc
Documentation/es/texidocs/quoting-another-voice.texidoc
Documentation/es/texidocs/recorder-fingering-chart.texidoc
Documentation/es/texidocs/redefining-grace-note-global-defaults.texidoc
Documentation/es/texidocs/removing-bar-numbers-from-a-score.texidoc
Documentation/es/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc
Documentation/es/texidocs/removing-the-first-empty-line.texidoc
Documentation/es/texidocs/rest-styles.texidoc
Documentation/es/texidocs/reverting-default-beam-endings.texidoc
Documentation/es/texidocs/rhythmic-slashes.texidoc [new file with mode: 0644]
Documentation/es/texidocs/satb-choir-template---four-staves.texidoc
Documentation/es/texidocs/score-for-diatonic-accordion.texidoc [new file with mode: 0644]
Documentation/es/texidocs/script-chart.texidoc
Documentation/es/texidocs/separating-key-cancellations-from-key-signature-changes.texidoc [new file with mode: 0644]
Documentation/es/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc
Documentation/es/texidocs/setting-system-separators.texidoc
Documentation/es/texidocs/setting-the-double-repeat-default-for-volte.texidoc
Documentation/es/texidocs/setting-the-minimum-length-of-hairpins.texidoc
Documentation/es/texidocs/shortening-volta-brackets.texidoc
Documentation/es/texidocs/showing-chords-at-changes.texidoc
Documentation/es/texidocs/showing-the-same-articulation-above-and-below-a-note-or-chord.texidoc [new file with mode: 0644]
Documentation/es/texidocs/simple-lead-sheet.texidoc
Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc
Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc
Documentation/es/texidocs/single-staff-template-with-notes-and-chords.texidoc
Documentation/es/texidocs/single-staff-template-with-notes-and-lyrics.texidoc
Documentation/es/texidocs/single-staff-template-with-only-notes.texidoc
Documentation/es/texidocs/skips-in-lyric-mode-2.texidoc [new file with mode: 0644]
Documentation/es/texidocs/skips-in-lyric-mode.texidoc [new file with mode: 0644]
Documentation/es/texidocs/slides-in-tablature.texidoc
Documentation/es/texidocs/snap-pizzicato-or-bartok-pizzicato.texidoc [new file with mode: 0644]
Documentation/es/texidocs/stand-alone-two-column-markup.texidoc
Documentation/es/texidocs/stem-and-beam-behavior-in-tablature.texidoc
Documentation/es/texidocs/stemlets.texidoc [new file with mode: 0644]
Documentation/es/texidocs/strict-beat-beaming.texidoc
Documentation/es/texidocs/string-number-extender-lines.texidoc [new file with mode: 0644]
Documentation/es/texidocs/string-quartet-template-simple.texidoc
Documentation/es/texidocs/string-quartet-template-with-separate-parts.texidoc
Documentation/es/texidocs/subdividing-beams.texidoc
Documentation/es/texidocs/suppressing-warnings-for-clashing-note-columns.texidoc [new file with mode: 0644]
Documentation/es/texidocs/table-of-contents.texidoc [new file with mode: 0644]
Documentation/es/texidocs/three-sided-box.texidoc [new file with mode: 0644]
Documentation/es/texidocs/tick-bar-lines.texidoc [new file with mode: 0644]
Documentation/es/texidocs/time-signature-in-parentheses---method-3.texidoc [new file with mode: 0644]
Documentation/es/texidocs/time-signature-in-parentheses.texidoc [new file with mode: 0644]
Documentation/es/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc
Documentation/es/texidocs/transcription-of-ancient-music-with-incipit.texidoc
Documentation/es/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc
Documentation/es/texidocs/tweaking-clef-properties.texidoc
Documentation/es/texidocs/tweaking-grace-layout-within-music.texidoc
Documentation/es/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc
Documentation/es/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc [new file with mode: 0644]
Documentation/es/texidocs/using-alternative-flag-styles.texidoc
Documentation/es/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc
Documentation/es/texidocs/using-autochange-with-more-than-one-voice.texidoc [new file with mode: 0644]
Documentation/es/texidocs/using-double-slurs-for-legato-chords.texidoc
Documentation/es/texidocs/using-grace-note-slashes-with-normal-heads.texidoc
Documentation/es/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc
Documentation/es/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc [new file with mode: 0644]
Documentation/es/texidocs/using-the--tweak-command-to-tweak-individual-grobs.texidoc [new file with mode: 0644]
Documentation/es/texidocs/using-the-whiteout-property.texidoc
Documentation/es/texidocs/using-ties-with-arpeggios.texidoc
Documentation/es/texidocs/utf-8.texidoc [new file with mode: 0644]
Documentation/es/texidocs/vertical-aligned-staffgroups-without-connecting-systemstartbar.texidoc [new file with mode: 0644]
Documentation/es/texidocs/vertical-line-as-a-baroque-articulation-mark.texidoc [new file with mode: 0644]
Documentation/es/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc
Documentation/es/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc
Documentation/es/texidocs/vertically-aligning-ossias-and-lyrics.texidoc
Documentation/es/texidocs/vertically-centered-common-lyrics.texidoc [new file with mode: 0644]
Documentation/es/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc
Documentation/es/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc
Documentation/es/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc
Documentation/es/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc
Documentation/es/texidocs/vocal-ensemble-template.texidoc
Documentation/es/texidocs/volta-below-chords.texidoc
Documentation/es/texidocs/volta-multi-staff.texidoc [new file with mode: 0644]
Documentation/es/texidocs/volta-text-markup-using-repeatcommands.texidoc [new file with mode: 0644]
Documentation/es/texidocs/woodwind-diagrams-key-lists.texidoc
Documentation/es/texidocs/woodwind-diagrams-listing.texidoc
Documentation/es/translations.itexi
Documentation/es/usage/GNUmakefile [deleted file]
Documentation/es/usage/external.itely
Documentation/es/usage/lilypond-book.itely
Documentation/es/usage/running.itely
Documentation/es/usage/suggestions.itely
Documentation/es/usage/updating.itely
Documentation/es/web/GNUmakefile [deleted file]
Documentation/es/web/community.itexi
Documentation/es/web/download.itexi
Documentation/es/web/introduction.itexi
Documentation/es/web/manuals.itexi
Documentation/es/web/news-front.itexi
Documentation/es/web/news.itexi
Documentation/essay/GNUmakefile [deleted file]
Documentation/essay/computer-notation.bib
Documentation/essay/engraving.itely
Documentation/essay/engravingbib.bib
Documentation/extending/GNUmakefile [deleted file]
Documentation/extending/programming-interface.itely
Documentation/extending/scheme-tutorial.itely
Documentation/fr/GNUmakefile
Documentation/fr/essay/GNUmakefile [deleted file]
Documentation/fr/essay/engraving.itely
Documentation/fr/extending.tely
Documentation/fr/extending/GNUmakefile [deleted file]
Documentation/fr/extending/programming-interface.itely
Documentation/fr/extending/scheme-tutorial.itely
Documentation/fr/included/GNUmakefile [deleted file]
Documentation/fr/included/generating-output.itexi
Documentation/fr/included/helpus.itexi
Documentation/fr/learning/GNUmakefile [deleted file]
Documentation/fr/learning/common-notation.itely
Documentation/fr/learning/fundamental.itely
Documentation/fr/learning/templates.itely
Documentation/fr/learning/tutorial.itely
Documentation/fr/learning/tweaks.itely
Documentation/fr/notation.tely
Documentation/fr/notation/GNUmakefile [deleted file]
Documentation/fr/notation/ancient.itely
Documentation/fr/notation/changing-defaults.itely
Documentation/fr/notation/cheatsheet.itely
Documentation/fr/notation/chords.itely
Documentation/fr/notation/editorial.itely
Documentation/fr/notation/expressive.itely
Documentation/fr/notation/fretted-strings.itely
Documentation/fr/notation/input.itely
Documentation/fr/notation/keyboards.itely
Documentation/fr/notation/notation-appendices.itely
Documentation/fr/notation/percussion.itely
Documentation/fr/notation/pitches.itely
Documentation/fr/notation/repeats.itely
Documentation/fr/notation/rhythms.itely
Documentation/fr/notation/simultaneous.itely
Documentation/fr/notation/spacing.itely
Documentation/fr/notation/staff.itely
Documentation/fr/notation/text.itely
Documentation/fr/notation/unfretted-strings.itely
Documentation/fr/notation/vocal.itely
Documentation/fr/notation/wind.itely
Documentation/fr/search-box.ihtml
Documentation/fr/texidocs/GNUmakefile [deleted file]
Documentation/fr/texidocs/accordion-discant-symbols.texidoc
Documentation/fr/texidocs/accordion-registers.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc
Documentation/fr/texidocs/adding-ambitus-per-voice.texidoc
Documentation/fr/texidocs/adding-an-extra-staff-at-a-line-break.texidoc
Documentation/fr/texidocs/adding-an-extra-staff.texidoc
Documentation/fr/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/adding-bar-lines-to-chordnames-context.texidoc
Documentation/fr/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc
Documentation/fr/texidocs/adding-drum-parts.texidoc
Documentation/fr/texidocs/adding-extra-fingering-with-scheme.texidoc
Documentation/fr/texidocs/adding-fingerings-to-a-score.texidoc
Documentation/fr/texidocs/adding-fingerings-to-tablatures.texidoc
Documentation/fr/texidocs/adding-indicators-to-staves-which-get-split-after-a-break.texidoc
Documentation/fr/texidocs/adding-links-to-objects.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc
Documentation/fr/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc
Documentation/fr/texidocs/adding-the-current-date-to-a-score.texidoc
Documentation/fr/texidocs/adding-timing-marks-to-long-glissandi.texidoc
Documentation/fr/texidocs/adding-volta-brackets-to-additional-staves.texidoc
Documentation/fr/texidocs/additional-voices-to-avoid-collisions.texidoc
Documentation/fr/texidocs/adjusting-grace-note-spacing.texidoc
Documentation/fr/texidocs/adjusting-lyrics-vertical-spacing.texidoc
Documentation/fr/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc
Documentation/fr/texidocs/aligning-and-centering-instrument-names.texidoc
Documentation/fr/texidocs/aligning-bar-numbers.texidoc
Documentation/fr/texidocs/aligning-marks-with-various-notation-objects.texidoc [deleted file]
Documentation/fr/texidocs/aligning-objects-created-with-the--mark-command.texidoc
Documentation/fr/texidocs/aligning-syllables-with-melisma.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc
Documentation/fr/texidocs/altering-the-length-of-beamed-stems.texidoc
Documentation/fr/texidocs/alternative-bar-numbering.texidoc
Documentation/fr/texidocs/alternative-breve-note.texidoc [deleted file]
Documentation/fr/texidocs/alternative-breve-notes.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/ambitus-with-multiple-voices.texidoc
Documentation/fr/texidocs/ambitus.texidoc
Documentation/fr/texidocs/analysis-brackets-above-the-staff.texidoc
Documentation/fr/texidocs/ancient-fonts.texidoc
Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc
Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc
Documentation/fr/texidocs/ancient-time-signatures.texidoc
Documentation/fr/texidocs/anglican-psalm-template.texidoc
Documentation/fr/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc
Documentation/fr/texidocs/arabic-improvisation.texidoc
Documentation/fr/texidocs/asymmetric-slurs.texidoc
Documentation/fr/texidocs/automatic-beam-subdivisions.texidoc
Documentation/fr/texidocs/automatically-change-durations.texidoc
Documentation/fr/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/avoiding-collisions-with-chord-fingerings.texidoc
Documentation/fr/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc
Documentation/fr/texidocs/beam-endings-in-score-context.texidoc
Documentation/fr/texidocs/beam-grouping-in-7-8-time.texidoc
Documentation/fr/texidocs/beams-across-line-breaks.texidoc
Documentation/fr/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc
Documentation/fr/texidocs/book-parts.texidoc
Documentation/fr/texidocs/breathing-signs.texidoc
Documentation/fr/texidocs/broken-crescendo-hairpin.texidoc
Documentation/fr/texidocs/caesura-railtracks-with-fermata.texidoc
Documentation/fr/texidocs/center-text-below-hairpin-dynamics.texidoc
Documentation/fr/texidocs/centering-markup-on-note-heads-automatically.texidoc
Documentation/fr/texidocs/changing--flageolet-mark-size.texidoc
Documentation/fr/texidocs/changing-a-single-notes-size-in-a-chord.texidoc
Documentation/fr/texidocs/changing-beam-knee-gap.texidoc
Documentation/fr/texidocs/changing-chord-separator.texidoc
Documentation/fr/texidocs/changing-form-of-multi-measure-rests.texidoc
Documentation/fr/texidocs/changing-fret-orientations.texidoc
Documentation/fr/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc
Documentation/fr/texidocs/changing-partcombine-texts.texidoc
Documentation/fr/texidocs/changing-properties-for-individual-grobs.texidoc
Documentation/fr/texidocs/changing-stanza-fonts.texidoc
Documentation/fr/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc
Documentation/fr/texidocs/changing-the-ambitus-gap.texidoc
Documentation/fr/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc
Documentation/fr/texidocs/changing-the-breath-mark-symbol.texidoc
Documentation/fr/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc
Documentation/fr/texidocs/changing-the-default-text-font-family.texidoc
Documentation/fr/texidocs/changing-the-interval-of-lines-on-the-stave.texidoc
Documentation/fr/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc
Documentation/fr/texidocs/changing-the-number-of-lines-in-a-staff.texidoc
Documentation/fr/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc
Documentation/fr/texidocs/changing-the-size-of-woodwind-diagrams.texidoc
Documentation/fr/texidocs/changing-the-staff-size.texidoc
Documentation/fr/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc
Documentation/fr/texidocs/changing-the-text-for-sustain-markings.texidoc
Documentation/fr/texidocs/changing-the-tuplet-number.texidoc
Documentation/fr/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc
Documentation/fr/texidocs/chant-or-psalms-notation.texidoc
Documentation/fr/texidocs/chord-glissando-in-tablature.texidoc
Documentation/fr/texidocs/chord-name-exceptions.texidoc
Documentation/fr/texidocs/chord-name-major7.texidoc
Documentation/fr/texidocs/chordchanges-for-fretboards.texidoc
Documentation/fr/texidocs/clefs-can-be-transposed-by-arbitrary-amounts.texidoc
Documentation/fr/texidocs/clip-systems.texidoc
Documentation/fr/texidocs/clusters.texidoc
Documentation/fr/texidocs/coloring-notes-depending-on-their-pitch.texidoc
Documentation/fr/texidocs/combining-dynamics-with-markup-texts.texidoc
Documentation/fr/texidocs/combining-two-parts-on-the-same-staff.texidoc
Documentation/fr/texidocs/compound-time-signatures.texidoc
Documentation/fr/texidocs/conducting-signs,-measure-grouping-signs.texidoc
Documentation/fr/texidocs/consistently-left-aligned-bar-numbers.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/contemporary-glissando.texidoc
Documentation/fr/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc
Documentation/fr/texidocs/controlling-the-placement-of-chord-fingerings.texidoc
Documentation/fr/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc
Documentation/fr/texidocs/controlling-tuplet-bracket-visibility.texidoc
Documentation/fr/texidocs/creating-a-delayed-turn.texidoc
Documentation/fr/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc
Documentation/fr/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc
Documentation/fr/texidocs/creating-blank-staves.texidoc
Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc
Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc
Documentation/fr/texidocs/creating-double-digit-fingerings.texidoc
Documentation/fr/texidocs/creating-metronome-marks-in-markup-mode.texidoc
Documentation/fr/texidocs/creating-real-parenthesized-dynamics.texidoc
Documentation/fr/texidocs/creating-simultaneous-rehearsal-marks.texidoc
Documentation/fr/texidocs/creating-slurs-across-voices.texidoc
Documentation/fr/texidocs/creating-text-spanners.texidoc
Documentation/fr/texidocs/cross-staff-chords---beaming-problems-workaround.texidoc
Documentation/fr/texidocs/cross-staff-stems.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/cross-staff-tremolos.texidoc
Documentation/fr/texidocs/custodes.texidoc
Documentation/fr/texidocs/customizing-fretboard-fret-diagrams.texidoc
Documentation/fr/texidocs/customizing-markup-fret-diagrams.texidoc
Documentation/fr/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc
Documentation/fr/texidocs/defining-an-engraver-in-scheme--ambitus-engraver.texidoc
Documentation/fr/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc
Documentation/fr/texidocs/demo-midiinstruments.texidoc
Documentation/fr/texidocs/demonstrating-all-headers.texidoc
Documentation/fr/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc
Documentation/fr/texidocs/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/displaying-complex-chords.texidoc
Documentation/fr/texidocs/displaying-grob-ancestry.texidoc
Documentation/fr/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc [deleted file]
Documentation/fr/texidocs/dotted-harmonics.texidoc
Documentation/fr/texidocs/double-glissando.texidoc
Documentation/fr/texidocs/drawing-boxes-around-grobs.texidoc
Documentation/fr/texidocs/drawing-circles-around-note-heads.texidoc
Documentation/fr/texidocs/drawing-circles-around-various-objects.texidoc
Documentation/fr/texidocs/dynamics-custom-text-spanner-postfix.texidoc
Documentation/fr/texidocs/dynamics-text-spanner-postfix.texidoc
Documentation/fr/texidocs/embedding-native-postscript-in-a--markup-block.texidoc
Documentation/fr/texidocs/engravers-one-by-one.texidoc
Documentation/fr/texidocs/engraving-ties-manually.texidoc
Documentation/fr/texidocs/engraving-tremolos-with-floating-beams.texidoc
Documentation/fr/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc
Documentation/fr/texidocs/extending-glissandi-across-repeats.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/faking-a-hammer-in-tablatures.texidoc
Documentation/fr/texidocs/fine-tuning-pedal-brackets.texidoc
Documentation/fr/texidocs/fingering-symbols-for-wind-instruments.texidoc
Documentation/fr/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc
Documentation/fr/texidocs/flamenco-notation.texidoc
Documentation/fr/texidocs/flat-flags-and-beam-nibs.texidoc
Documentation/fr/texidocs/flute-slap-notation.texidoc
Documentation/fr/texidocs/forcing-a-clef-symbol-to-be-displayed.texidoc
Documentation/fr/texidocs/forcing-horizontal-shift-of-notes.texidoc
Documentation/fr/texidocs/forcing-hyphens-to-be-shown.texidoc
Documentation/fr/texidocs/forcing-measure-width-to-adapt-to-metronomemarks-width.texidoc
Documentation/fr/texidocs/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.texidoc
Documentation/fr/texidocs/formatting-lyrics-syllables.texidoc
Documentation/fr/texidocs/fret-diagrams-explained-and-developed.texidoc
Documentation/fr/texidocs/fretboards-alternate-tables.texidoc
Documentation/fr/texidocs/fretted-string-harmonics-in-tablature.texidoc
Documentation/fr/texidocs/generating-custom-flags.texidoc
Documentation/fr/texidocs/generating-random-notes.texidoc
Documentation/fr/texidocs/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.texidoc
Documentation/fr/texidocs/glissandi-can-skip-grobs.texidoc
Documentation/fr/texidocs/graphical-and-text-woodwind-diagrams.texidoc
Documentation/fr/texidocs/grid-lines--changing-their-appearance.texidoc
Documentation/fr/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc
Documentation/fr/texidocs/guitar-strum-rhythms.texidoc
Documentation/fr/texidocs/hairpins-with-different-line-styles.texidoc
Documentation/fr/texidocs/heavily-customized-polymetric-time-signatures.texidoc
Documentation/fr/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc
Documentation/fr/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc
Documentation/fr/texidocs/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.texidoc
Documentation/fr/texidocs/how-to-change-fret-diagram-position.texidoc
Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.texidoc
Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.texidoc
Documentation/fr/texidocs/how-to-put-ties-between-syllables-in-lyrics.texidoc
Documentation/fr/texidocs/hymn-template.texidoc
Documentation/fr/texidocs/incipit.texidoc
Documentation/fr/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc
Documentation/fr/texidocs/inserting-a-caesura.texidoc
Documentation/fr/texidocs/inserting-score-fragments-above-a-staff,-as-markups.texidoc
Documentation/fr/texidocs/isolated-percent-repeats.texidoc
Documentation/fr/texidocs/jazz-combo-template.texidoc
Documentation/fr/texidocs/keep-change-clefs-full-sized.texidoc
Documentation/fr/texidocs/laissez-vibrer-ties.texidoc
Documentation/fr/texidocs/letter-tablature-formatting.texidoc
Documentation/fr/texidocs/line-arrows.texidoc
Documentation/fr/texidocs/lyrics-alignment.texidoc
Documentation/fr/texidocs/makam-example.texidoc
Documentation/fr/texidocs/making-an-object-invisible-with-the-transparent-property.texidoc
Documentation/fr/texidocs/making-glissandi-breakable.texidoc
Documentation/fr/texidocs/making-slurs-with-complex-dash-structure.texidoc
Documentation/fr/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc
Documentation/fr/texidocs/manually-break-figured-bass-extenders-for-only-some-numbers.texidoc
Documentation/fr/texidocs/manually-controlling-beam-positions.texidoc
Documentation/fr/texidocs/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.texidoc
Documentation/fr/texidocs/markup-lines.texidoc
Documentation/fr/texidocs/measure-counter.texidoc
Documentation/fr/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc
Documentation/fr/texidocs/merging-multi-measure-rests-in-a-polyphonic-part.texidoc
Documentation/fr/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc
Documentation/fr/texidocs/modifying-tuplet-bracket-length.texidoc
Documentation/fr/texidocs/moving-dotted-notes-in-polyphony.texidoc
Documentation/fr/texidocs/moving-slur-positions-vertically.texidoc
Documentation/fr/texidocs/multi-measure-rest-markup.texidoc
Documentation/fr/texidocs/nesting-staves.texidoc
Documentation/fr/texidocs/non-default-tuplet-numbers.texidoc
Documentation/fr/texidocs/non-traditional-key-signatures.texidoc
Documentation/fr/texidocs/numbers-as-easy-note-heads.texidoc
Documentation/fr/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc
Documentation/fr/texidocs/open-string-harmonics-in-tablature.texidoc
Documentation/fr/texidocs/orchestra,-choir-and-piano-template.texidoc
Documentation/fr/texidocs/ottava-text.texidoc
Documentation/fr/texidocs/outputting-the-version-number.texidoc
Documentation/fr/texidocs/page-label.texidoc
Documentation/fr/texidocs/partcombine-and-autobeamoff.texidoc
Documentation/fr/texidocs/percent-repeat-count-visibility.texidoc
Documentation/fr/texidocs/percent-repeat-counter.texidoc
Documentation/fr/texidocs/percussion-beaters.texidoc
Documentation/fr/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc
Documentation/fr/texidocs/piano-template-simple.texidoc
Documentation/fr/texidocs/piano-template-with-centered-lyrics.texidoc
Documentation/fr/texidocs/piano-template-with-melody-and-lyrics.texidoc
Documentation/fr/texidocs/placement-of-right-hand-fingerings.texidoc
Documentation/fr/texidocs/polyphony-in-tablature.texidoc
Documentation/fr/texidocs/positioning-arpeggios.texidoc
Documentation/fr/texidocs/positioning-fingering-indications-precisely.texidoc
Documentation/fr/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc
Documentation/fr/texidocs/positioning-grace-notes-with-floating-space.texidoc
Documentation/fr/texidocs/positioning-multi-measure-rests.texidoc
Documentation/fr/texidocs/positioning-segno-and-coda-with-line-break.texidoc
Documentation/fr/texidocs/positioning-text-markups-inside-slurs.texidoc
Documentation/fr/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc
Documentation/fr/texidocs/preventing-final-mark-from-removing-final-tuplet.texidoc
Documentation/fr/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc
Documentation/fr/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc
Documentation/fr/texidocs/printing-bar-numbers-at-regular-intervals.texidoc
Documentation/fr/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc
Documentation/fr/texidocs/printing-hairpins-in-various-styles.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/printing-hairpins-using-al-niente-notation.texidoc
Documentation/fr/texidocs/printing-marks-at-the-end-of-a-line.texidoc
Documentation/fr/texidocs/printing-marks-on-every-staff.texidoc
Documentation/fr/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc
Documentation/fr/texidocs/printing-music-with-different-time-signatures.texidoc
Documentation/fr/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc
Documentation/fr/texidocs/printing-text-from-right-to-left.texidoc
Documentation/fr/texidocs/printing-the-bar-number-for-the-first-measure.texidoc
Documentation/fr/texidocs/proportional-strict-notespacing.texidoc
Documentation/fr/texidocs/putting-lyrics-inside-the-staff.texidoc
Documentation/fr/texidocs/quoting-another-voice-with-transposition.texidoc
Documentation/fr/texidocs/quoting-another-voice.texidoc
Documentation/fr/texidocs/recorder-fingering-chart.texidoc
Documentation/fr/texidocs/redefining-grace-note-global-defaults.texidoc
Documentation/fr/texidocs/removing-bar-numbers-from-a-score.texidoc
Documentation/fr/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc
Documentation/fr/texidocs/removing-the-first-empty-line.texidoc
Documentation/fr/texidocs/rest-styles.texidoc
Documentation/fr/texidocs/reverting-default-beam-endings.texidoc
Documentation/fr/texidocs/rhythmic-slashes.texidoc
Documentation/fr/texidocs/satb-choir-template---four-staves.texidoc
Documentation/fr/texidocs/screech-and-boink.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/separating-key-cancellations-from-key-signature-changes.texidoc
Documentation/fr/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc
Documentation/fr/texidocs/setting-system-separators.texidoc
Documentation/fr/texidocs/setting-the-double-repeat-default-for-volte.texidoc
Documentation/fr/texidocs/setting-the-minimum-length-of-hairpins.texidoc
Documentation/fr/texidocs/shortening-volta-brackets.texidoc
Documentation/fr/texidocs/showing-chords-at-changes.texidoc
Documentation/fr/texidocs/showing-the-same-articulation-above-and-below-a-note-or-chord.texidoc
Documentation/fr/texidocs/simple-lead-sheet.texidoc
Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc
Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc
Documentation/fr/texidocs/single-staff-template-with-notes-and-chords.texidoc
Documentation/fr/texidocs/single-staff-template-with-notes-and-lyrics.texidoc
Documentation/fr/texidocs/single-staff-template-with-only-notes.texidoc
Documentation/fr/texidocs/skips-in-lyric-mode-2.texidoc
Documentation/fr/texidocs/skips-in-lyric-mode.texidoc
Documentation/fr/texidocs/slides-in-tablature.texidoc
Documentation/fr/texidocs/snap-pizzicato-or-bartok-pizzicato.texidoc
Documentation/fr/texidocs/specifying-context-with-beatgrouping.texidoc
Documentation/fr/texidocs/stand-alone-two-column-markup.texidoc
Documentation/fr/texidocs/stem-and-beam-behavior-in-tablature.texidoc
Documentation/fr/texidocs/stem-cross-staff-engraver.texidoc
Documentation/fr/texidocs/stemlets.texidoc
Documentation/fr/texidocs/strict-beat-beaming.texidoc
Documentation/fr/texidocs/string-number-extender-lines.texidoc
Documentation/fr/texidocs/string-quartet-template-simple.texidoc
Documentation/fr/texidocs/string-quartet-template-with-separate-parts.texidoc
Documentation/fr/texidocs/subdividing-beams.texidoc
Documentation/fr/texidocs/suppressing-warnings-for-clashing-note-columns.texidoc
Documentation/fr/texidocs/table-of-contents.texidoc
Documentation/fr/texidocs/three-sided-box.texidoc
Documentation/fr/texidocs/tick-bar-lines.texidoc
Documentation/fr/texidocs/time-signature-in-parentheses---method-3.texidoc
Documentation/fr/texidocs/time-signature-in-parentheses.texidoc
Documentation/fr/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc
Documentation/fr/texidocs/transcription-of-ancient-music-with-incipit.texidoc
Documentation/fr/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc
Documentation/fr/texidocs/tweaking-clef-properties.texidoc
Documentation/fr/texidocs/tweaking-grace-layout-within-music.texidoc
Documentation/fr/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc
Documentation/fr/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/using-alternative-flag-styles.texidoc
Documentation/fr/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc
Documentation/fr/texidocs/using-autochange-with-more-than-one-voice.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/using-beatlength-and-beatgrouping.texidoc [deleted file]
Documentation/fr/texidocs/using-double-slurs-for-legato-chords.texidoc
Documentation/fr/texidocs/using-grace-note-slashes-with-normal-heads.texidoc
Documentation/fr/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc
Documentation/fr/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc
Documentation/fr/texidocs/using-the--tweak-command-to-tweak-individual-grobs.texidoc
Documentation/fr/texidocs/using-the-whiteout-property.texidoc
Documentation/fr/texidocs/using-ties-with-arpeggios.texidoc
Documentation/fr/texidocs/utf-8.texidoc [new file with mode: 0644]
Documentation/fr/texidocs/vertical-line-as-a-baroque-articulation-mark.texidoc
Documentation/fr/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc
Documentation/fr/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc
Documentation/fr/texidocs/vertically-aligning-ossias-and-lyrics.texidoc
Documentation/fr/texidocs/vertically-centered-common-lyrics.texidoc
Documentation/fr/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc
Documentation/fr/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc
Documentation/fr/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc
Documentation/fr/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc
Documentation/fr/texidocs/vocal-ensemble-template.texidoc
Documentation/fr/texidocs/volta-below-chords.texidoc
Documentation/fr/texidocs/volta-multi-staff.texidoc
Documentation/fr/texidocs/volta-text-markup-using-repeatcommands.texidoc
Documentation/fr/texidocs/woodwind-diagrams-key-lists.texidoc
Documentation/fr/texidocs/woodwind-diagrams-listing.texidoc
Documentation/fr/translations.itexi
Documentation/fr/usage/GNUmakefile [deleted file]
Documentation/fr/usage/external.itely
Documentation/fr/usage/lilypond-book.itely
Documentation/fr/usage/running.itely
Documentation/fr/usage/suggestions.itely
Documentation/fr/usage/updating.itely
Documentation/fr/web/GNUmakefile [deleted file]
Documentation/fr/web/community.itexi
Documentation/fr/web/download.itexi
Documentation/fr/web/introduction.itexi
Documentation/fr/web/manuals.itexi
Documentation/hu/GNUmakefile
Documentation/hu/included/.gitignore [new file with mode: 0644]
Documentation/hu/included/GNUmakefile [deleted file]
Documentation/hu/learning/GNUmakefile [deleted file]
Documentation/hu/learning/common-notation.itely
Documentation/hu/learning/fundamental.itely
Documentation/hu/learning/preface.itely [new file with mode: 0644]
Documentation/hu/learning/tweaks.itely
Documentation/hu/search-box.ihtml
Documentation/hu/texidocs/GNUmakefile [deleted file]
Documentation/hu/translations.itexi
Documentation/hu/usage/GNUmakefile [deleted file]
Documentation/hu/usage/lilypond-book.itely
Documentation/hu/usage/running.itely
Documentation/hu/usage/updating.itely
Documentation/hu/web/GNUmakefile [deleted file]
Documentation/hu/web/basic-authors.itexi [deleted file]
Documentation/hu/web/community.itexi
Documentation/hu/web/manuals.itexi
Documentation/included/GNUmakefile [deleted file]
Documentation/included/acknowledge.itexi [new file with mode: 0644]
Documentation/included/authors.itexi
Documentation/included/compile.itexi
Documentation/included/display-predefined-fretboards.ly
Documentation/included/display-predefined-mandolin-fretboards.ly
Documentation/included/display-predefined-string-tunings.ly
Documentation/included/display-predefined-ukulele-fretboards.ly
Documentation/included/engraver-example.ily
Documentation/included/generating-output.itexi
Documentation/included/gonville.ly
Documentation/included/helpus.itexi
Documentation/included/note-head-style.ly
Documentation/included/script-chart.ly
Documentation/it/GNUmakefile
Documentation/it/changes.tely [new file with mode: 0644]
Documentation/it/included/GNUmakefile [deleted file]
Documentation/it/included/generating-output.itexi
Documentation/it/included/helpus.itexi
Documentation/it/learning.tely
Documentation/it/learning/GNUmakefile [deleted file]
Documentation/it/learning/common-notation.itely
Documentation/it/learning/fundamental.itely
Documentation/it/learning/templates.itely
Documentation/it/learning/tutorial.itely
Documentation/it/learning/tweaks.itely
Documentation/it/notation.tely
Documentation/it/notation/GNUmakefile [deleted file]
Documentation/it/notation/editorial.itely [new file with mode: 0644]
Documentation/it/notation/expressive.itely [new file with mode: 0644]
Documentation/it/notation/notation.itely
Documentation/it/notation/pitches.itely
Documentation/it/notation/repeats.itely [new file with mode: 0644]
Documentation/it/notation/rhythms.itely [new file with mode: 0644]
Documentation/it/notation/simultaneous.itely [new file with mode: 0644]
Documentation/it/notation/staff.itely [new file with mode: 0644]
Documentation/it/notation/text.itely [new file with mode: 0644]
Documentation/it/search-box.ihtml
Documentation/it/texidocs/GNUmakefile [deleted file]
Documentation/it/texidocs/adding-ambitus-per-voice.texidoc
Documentation/it/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc [new file with mode: 0644]
Documentation/it/texidocs/adding-timing-marks-to-long-glissandi.texidoc [new file with mode: 0644]
Documentation/it/texidocs/adding-volta-brackets-to-additional-staves.texidoc [new file with mode: 0644]
Documentation/it/texidocs/additional-voices-to-avoid-collisions.texidoc [new file with mode: 0644]
Documentation/it/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc [new file with mode: 0644]
Documentation/it/texidocs/aligning-bar-numbers.texidoc [new file with mode: 0644]
Documentation/it/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc [new file with mode: 0644]
Documentation/it/texidocs/alternative-bar-numbering.texidoc [new file with mode: 0644]
Documentation/it/texidocs/alternative-breve-notes.texidoc [new file with mode: 0644]
Documentation/it/texidocs/ambitus-with-multiple-voices.texidoc
Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc
Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc
Documentation/it/texidocs/anglican-psalm-template.texidoc
Documentation/it/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc
Documentation/it/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc [new file with mode: 0644]
Documentation/it/texidocs/avoiding-collisions-with-chord-fingerings.texidoc [new file with mode: 0644]
Documentation/it/texidocs/beam-endings-in-score-context.texidoc [new file with mode: 0644]
Documentation/it/texidocs/beams-across-line-breaks.texidoc [new file with mode: 0644]
Documentation/it/texidocs/changing-beam-knee-gap.texidoc [new file with mode: 0644]
Documentation/it/texidocs/changing-form-of-multi-measure-rests.texidoc [new file with mode: 0644]
Documentation/it/texidocs/changing-partcombine-texts.texidoc [new file with mode: 0644]
Documentation/it/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc [new file with mode: 0644]
Documentation/it/texidocs/changing-the-ambitus-gap.texidoc
Documentation/it/texidocs/changing-the-breath-mark-symbol.texidoc [new file with mode: 0644]
Documentation/it/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc [new file with mode: 0644]
Documentation/it/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc [new file with mode: 0644]
Documentation/it/texidocs/changing-the-tuplet-number.texidoc [new file with mode: 0644]
Documentation/it/texidocs/combining-two-parts-on-the-same-staff.texidoc [new file with mode: 0644]
Documentation/it/texidocs/conducting-signs,-measure-grouping-signs.texidoc [new file with mode: 0644]
Documentation/it/texidocs/contemporary-glissando.texidoc [new file with mode: 0644]
Documentation/it/texidocs/controlling-the-placement-of-chord-fingerings.texidoc [new file with mode: 0644]
Documentation/it/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc [new file with mode: 0644]
Documentation/it/texidocs/controlling-tuplet-bracket-visibility.texidoc [new file with mode: 0644]
Documentation/it/texidocs/creating-a-delayed-turn.texidoc [new file with mode: 0644]
Documentation/it/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc [new file with mode: 0644]
Documentation/it/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc [new file with mode: 0644]
Documentation/it/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc [new file with mode: 0644]
Documentation/it/texidocs/creating-metronome-marks-in-markup-mode.texidoc [new file with mode: 0644]
Documentation/it/texidocs/cross-staff-tremolos.texidoc [new file with mode: 0644]
Documentation/it/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc [new file with mode: 0644]
Documentation/it/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc [new file with mode: 0644]
Documentation/it/texidocs/dynamics-custom-text-spanner-postfix.texidoc [new file with mode: 0644]
Documentation/it/texidocs/dynamics-text-spanner-postfix.texidoc [new file with mode: 0644]
Documentation/it/texidocs/engraving-ties-manually.texidoc [new file with mode: 0644]
Documentation/it/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc [new file with mode: 0644]
Documentation/it/texidocs/extending-glissandi-across-repeats.texidoc [new file with mode: 0644]
Documentation/it/texidocs/flat-flags-and-beam-nibs.texidoc [new file with mode: 0644]
Documentation/it/texidocs/forcing-horizontal-shift-of-notes.texidoc [new file with mode: 0644]
Documentation/it/texidocs/grid-lines--changing-their-appearance.texidoc [new file with mode: 0644]
Documentation/it/texidocs/guitar-strum-rhythms.texidoc [new file with mode: 0644]
Documentation/it/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc
Documentation/it/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc [new file with mode: 0644]
Documentation/it/texidocs/hymn-template.texidoc
Documentation/it/texidocs/inserting-a-caesura.texidoc [new file with mode: 0644]
Documentation/it/texidocs/isolated-percent-repeats.texidoc [new file with mode: 0644]
Documentation/it/texidocs/jazz-combo-template.texidoc
Documentation/it/texidocs/making-glissandi-breakable.texidoc [new file with mode: 0644]
Documentation/it/texidocs/making-slurs-with-complex-dash-structure.texidoc [new file with mode: 0644]
Documentation/it/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc [new file with mode: 0644]
Documentation/it/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc [new file with mode: 0644]
Documentation/it/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc [new file with mode: 0644]
Documentation/it/texidocs/multi-measure-rest-markup.texidoc [new file with mode: 0644]
Documentation/it/texidocs/nesting-staves.texidoc [new file with mode: 0644]
Documentation/it/texidocs/non-default-tuplet-numbers.texidoc [new file with mode: 0644]
Documentation/it/texidocs/non-traditional-key-signatures.texidoc
Documentation/it/texidocs/numbers-as-easy-note-heads.texidoc
Documentation/it/texidocs/orchestra,-choir-and-piano-template.texidoc
Documentation/it/texidocs/ottava-text.texidoc
Documentation/it/texidocs/partcombine-and-autobeamoff.texidoc [new file with mode: 0644]
Documentation/it/texidocs/percent-repeat-count-visibility.texidoc [new file with mode: 0644]
Documentation/it/texidocs/percent-repeat-counter.texidoc [new file with mode: 0644]
Documentation/it/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc [new file with mode: 0644]
Documentation/it/texidocs/piano-template-simple.texidoc
Documentation/it/texidocs/piano-template-with-centered-lyrics.texidoc
Documentation/it/texidocs/piano-template-with-melody-and-lyrics.texidoc
Documentation/it/texidocs/positioning-grace-notes-with-floating-space.texidoc [new file with mode: 0644]
Documentation/it/texidocs/positioning-multi-measure-rests.texidoc [new file with mode: 0644]
Documentation/it/texidocs/positioning-text-markups-inside-slurs.texidoc [new file with mode: 0644]
Documentation/it/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc
Documentation/it/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc
Documentation/it/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc [new file with mode: 0644]
Documentation/it/texidocs/printing-bar-numbers-at-regular-intervals.texidoc [new file with mode: 0644]
Documentation/it/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc [new file with mode: 0644]
Documentation/it/texidocs/printing-hairpins-in-various-styles.texidoc [new file with mode: 0644]
Documentation/it/texidocs/printing-hairpins-using-al-niente-notation.texidoc [new file with mode: 0644]
Documentation/it/texidocs/printing-marks-at-the-end-of-a-line.texidoc [new file with mode: 0644]
Documentation/it/texidocs/printing-marks-on-every-staff.texidoc [new file with mode: 0644]
Documentation/it/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc [new file with mode: 0644]
Documentation/it/texidocs/printing-the-bar-number-for-the-first-measure.texidoc [new file with mode: 0644]
Documentation/it/texidocs/redefining-grace-note-global-defaults.texidoc [new file with mode: 0644]
Documentation/it/texidocs/removing-bar-numbers-from-a-score.texidoc [new file with mode: 0644]
Documentation/it/texidocs/removing-the-first-empty-line.texidoc [new file with mode: 0644]
Documentation/it/texidocs/rest-styles.texidoc [new file with mode: 0644]
Documentation/it/texidocs/satb-choir-template---four-staves.texidoc
Documentation/it/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc [new file with mode: 0644]
Documentation/it/texidocs/setting-the-double-repeat-default-for-volte.texidoc [new file with mode: 0644]
Documentation/it/texidocs/setting-the-minimum-length-of-hairpins.texidoc [new file with mode: 0644]
Documentation/it/texidocs/shortening-volta-brackets.texidoc [new file with mode: 0644]
Documentation/it/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc
Documentation/it/texidocs/single-staff-template-with-notes-and-chords.texidoc
Documentation/it/texidocs/single-staff-template-with-notes-and-lyrics.texidoc
Documentation/it/texidocs/single-staff-template-with-only-notes.texidoc
Documentation/it/texidocs/stand-alone-two-column-markup.texidoc [new file with mode: 0644]
Documentation/it/texidocs/strict-beat-beaming.texidoc [new file with mode: 0644]
Documentation/it/texidocs/string-quartet-template-simple.texidoc
Documentation/it/texidocs/string-quartet-template-with-separate-parts.texidoc
Documentation/it/texidocs/subdividing-beams.texidoc [new file with mode: 0644]
Documentation/it/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc [new file with mode: 0644]
Documentation/it/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc
Documentation/it/texidocs/tweaking-clef-properties.texidoc
Documentation/it/texidocs/tweaking-grace-layout-within-music.texidoc [new file with mode: 0644]
Documentation/it/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc [new file with mode: 0644]
Documentation/it/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc [new file with mode: 0644]
Documentation/it/texidocs/using-double-slurs-for-legato-chords.texidoc [new file with mode: 0644]
Documentation/it/texidocs/using-grace-note-slashes-with-normal-heads.texidoc [new file with mode: 0644]
Documentation/it/texidocs/using-ties-with-arpeggios.texidoc [new file with mode: 0644]
Documentation/it/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc [new file with mode: 0644]
Documentation/it/texidocs/vertically-aligning-ossias-and-lyrics.texidoc [new file with mode: 0644]
Documentation/it/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc
Documentation/it/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc
Documentation/it/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc
Documentation/it/texidocs/vocal-ensemble-template.texidoc
Documentation/it/translations.itexi
Documentation/it/usage/GNUmakefile [deleted file]
Documentation/it/usage/external.itely
Documentation/it/usage/lilypond-book.itely
Documentation/it/usage/running.itely
Documentation/it/usage/suggestions.itely
Documentation/it/usage/updating.itely
Documentation/it/web/GNUmakefile [deleted file]
Documentation/it/web/community.itexi
Documentation/it/web/download.itexi
Documentation/it/web/introduction.itexi
Documentation/it/web/manuals.itexi
Documentation/ja/GNUmakefile
Documentation/ja/included/GNUmakefile [deleted file]
Documentation/ja/included/generating-output.itexi
Documentation/ja/learning/GNUmakefile [deleted file]
Documentation/ja/learning/common-notation.itely
Documentation/ja/learning/fundamental.itely
Documentation/ja/learning/preface.itely
Documentation/ja/learning/templates.itely
Documentation/ja/learning/tutorial.itely
Documentation/ja/learning/tweaks.itely
Documentation/ja/notation.tely
Documentation/ja/notation/GNUmakefile [deleted file]
Documentation/ja/notation/changing-defaults.itely
Documentation/ja/notation/cheatsheet.itely
Documentation/ja/notation/chords.itely
Documentation/ja/notation/contemporary.itely
Documentation/ja/notation/editorial.itely
Documentation/ja/notation/expressive.itely
Documentation/ja/notation/fretted-strings.itely
Documentation/ja/notation/input.itely
Documentation/ja/notation/keyboards.itely
Documentation/ja/notation/notation.itely
Documentation/ja/notation/percussion.itely
Documentation/ja/notation/pitches.itely
Documentation/ja/notation/repeats.itely
Documentation/ja/notation/rhythms.itely
Documentation/ja/notation/simultaneous.itely
Documentation/ja/notation/spacing.itely
Documentation/ja/notation/specialist.itely
Documentation/ja/notation/staff.itely
Documentation/ja/notation/text.itely
Documentation/ja/notation/unfretted-strings.itely
Documentation/ja/notation/vocal.itely
Documentation/ja/notation/wind.itely
Documentation/ja/notation/world.itely
Documentation/ja/texidocs/GNUmakefile [deleted file]
Documentation/ja/texidocs/piano-template-simple.texidoc
Documentation/ja/texidocs/piano-template-with-centered-lyrics.texidoc
Documentation/ja/texidocs/piano-template-with-melody-and-lyrics.texidoc
Documentation/ja/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc
Documentation/ja/texidocs/single-staff-template-with-notes-and-chords.texidoc
Documentation/ja/texidocs/single-staff-template-with-notes-and-lyrics.texidoc
Documentation/ja/texidocs/single-staff-template-with-only-notes.texidoc
Documentation/ja/texidocs/string-quartet-template-simple.texidoc
Documentation/ja/texidocs/string-quartet-template-with-separate-parts.texidoc
Documentation/ja/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc
Documentation/ja/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc
Documentation/ja/texidocs/vocal-ensemble-template.texidoc
Documentation/ja/translations.itexi
Documentation/ja/usage/GNUmakefile [deleted file]
Documentation/ja/usage/external.itely
Documentation/ja/usage/lilypond-book.itely
Documentation/ja/usage/running.itely
Documentation/ja/usage/suggestions.itely
Documentation/ja/usage/updating.itely
Documentation/ja/web/GNUmakefile [deleted file]
Documentation/learning/GNUmakefile [deleted file]
Documentation/learning/common-notation.itely
Documentation/learning/fundamental.itely
Documentation/learning/templates.itely
Documentation/learning/tutorial.itely
Documentation/learning/tweaks.itely
Documentation/lilypond-texi2html.init
Documentation/logo/GNUmakefile
Documentation/ly-examples/GNUmakefile
Documentation/ly-examples/aucun-snippet.ly
Documentation/ly-examples/bach-bwv610.ly
Documentation/ly-examples/bach-schenker.ly
Documentation/ly-examples/cary-layout.ily
Documentation/ly-examples/cary.ly
Documentation/ly-examples/chart.ly
Documentation/ly-examples/granados.ly
Documentation/ly-examples/orchestra.ly
Documentation/ly-examples/tab-example.ly
Documentation/ly-examples/theory.ly
Documentation/misc/CHANGES-1.3
Documentation/misc/ChangeLog-2.1
Documentation/misc/GNUmakefile
Documentation/misc/THANKS-1.8 [new file with mode: 0644]
Documentation/misc/THANKS-2.0 [new file with mode: 0644]
Documentation/misc/THANKS-2.10 [new file with mode: 0644]
Documentation/misc/THANKS-2.12 [new file with mode: 0644]
Documentation/misc/THANKS-2.14 [new file with mode: 0644]
Documentation/misc/THANKS-2.16 [new file with mode: 0644]
Documentation/misc/THANKS-2.2 [new file with mode: 0644]
Documentation/misc/THANKS-2.4 [new file with mode: 0644]
Documentation/misc/THANKS-2.6 [new file with mode: 0644]
Documentation/misc/THANKS-2.8 [new file with mode: 0644]
Documentation/misc/browser-language.fr.html
Documentation/misc/browser-language.it.html [new file with mode: 0644]
Documentation/music-glossary.tely
Documentation/nl/GNUmakefile
Documentation/nl/included/GNUmakefile [deleted file]
Documentation/nl/included/generating-output.itexi
Documentation/nl/learning.tely
Documentation/nl/learning/GNUmakefile [deleted file]
Documentation/nl/learning/common-notation.itely
Documentation/nl/learning/fundamental.itely
Documentation/nl/learning/preface.itely [new file with mode: 0644]
Documentation/nl/learning/templates.itely [new file with mode: 0644]
Documentation/nl/learning/tutorial.itely
Documentation/nl/learning/tweaks.itely [new file with mode: 0644]
Documentation/nl/macros.itexi
Documentation/nl/search-box.ihtml
Documentation/nl/texidocs/GNUmakefile [deleted file]
Documentation/nl/translations.itexi
Documentation/nl/web.texi
Documentation/nl/web/GNUmakefile [deleted file]
Documentation/nl/web/download.itexi
Documentation/nl/web/introduction.itexi
Documentation/nl/web/manuals.itexi
Documentation/notation.tely
Documentation/notation/GNUmakefile [deleted file]
Documentation/notation/ancient.itely
Documentation/notation/changing-defaults.itely
Documentation/notation/cheatsheet.itely
Documentation/notation/chords.itely
Documentation/notation/editorial.itely
Documentation/notation/expressive.itely
Documentation/notation/fretted-strings.itely
Documentation/notation/input.itely
Documentation/notation/keyboards.itely
Documentation/notation/notation-appendices.itely
Documentation/notation/percussion.itely
Documentation/notation/pitches.itely
Documentation/notation/repeats.itely
Documentation/notation/rhythms.itely
Documentation/notation/simultaneous.itely
Documentation/notation/spacing.itely
Documentation/notation/staff.itely
Documentation/notation/text.itely
Documentation/notation/unfretted-strings.itely
Documentation/notation/vocal.itely
Documentation/notation/wind.itely
Documentation/pictures/BadLog.png [new file with mode: 0755]
Documentation/pictures/BadLog2.png [new file with mode: 0755]
Documentation/pictures/DragDrop.png [new file with mode: 0755]
Documentation/pictures/EditFile.png [new file with mode: 0755]
Documentation/pictures/FileSave.png [new file with mode: 0755]
Documentation/pictures/GNUmakefile
Documentation/pictures/GenPDF.png [new file with mode: 0755]
Documentation/pictures/Gonville_after.png
Documentation/pictures/Gonville_before.png
Documentation/pictures/Learning_Macos_Compiling_log.png
Documentation/pictures/Learning_Macos_New_menu.png
Documentation/pictures/Learning_Macos_Open_Dialog_box.png
Documentation/pictures/Learning_Macos_Open_menu.png
Documentation/pictures/Learning_Macos_Save_file_with_name.png
Documentation/pictures/Learning_Macos_Save_menu.png
Documentation/pictures/Learning_Macos_Typeset_menu.png
Documentation/pictures/Learning_Macos_pdf_output.png
Documentation/pictures/Learning_Macos_welcome.png
Documentation/pictures/Learning_Win7_All_Files_Created.png [deleted file]
Documentation/pictures/Learning_Win7_Log_File.png [deleted file]
Documentation/pictures/Learning_Win7_New_Menu.png [deleted file]
Documentation/pictures/Learning_Win7_Open_Context_Menu.png [deleted file]
Documentation/pictures/Learning_Win7_Open_Dragndrop.png [deleted file]
Documentation/pictures/Learning_Win7_Open_Menu.png [deleted file]
Documentation/pictures/Learning_Win7_Pdf_Output.png [deleted file]
Documentation/pictures/Learning_Win7_Save_File_With_Name.png [deleted file]
Documentation/pictures/Learning_Win7_Save_Menu.png [deleted file]
Documentation/pictures/Learning_Win7_Welcome_File_Whole.png [deleted file]
Documentation/pictures/LilyPad.png [new file with mode: 0755]
Documentation/pictures/OpusAndFeta.png
Documentation/pictures/PDFRead.png [new file with mode: 0755]
Documentation/pictures/SaveAs.png [new file with mode: 0755]
Documentation/pictures/background-image.png
Documentation/pictures/baer-sarabande-hires.png
Documentation/pictures/baer-sarabande.png
Documentation/pictures/baer-suite1-fullpage-hires.png
Documentation/pictures/baer-suite1-fullpage.png
Documentation/pictures/baer-suite1-line.png
Documentation/pictures/bench-morgenlied.png
Documentation/pictures/bwv861-baer-alt-small.png
Documentation/pictures/bwv861-baer-alt.png
Documentation/pictures/bwv861-baer-small.png
Documentation/pictures/bwv861-baer.png
Documentation/pictures/bwv861-breitkopf-small.png
Documentation/pictures/bwv861-breitkopf.png
Documentation/pictures/bwv861-finale2008a.png
Documentation/pictures/bwv861-gessellschaft-small.png
Documentation/pictures/bwv861-gessellschaft.png
Documentation/pictures/bwv861mm28-29.png
Documentation/pictures/bwv861mm33-34-annotate.png
Documentation/pictures/bwv861mm33-34.png
Documentation/pictures/color1-active.png
Documentation/pictures/color1-bg.png
Documentation/pictures/color2-active.png
Documentation/pictures/color2-bg.png
Documentation/pictures/color2-hover.png
Documentation/pictures/color3-active.png
Documentation/pictures/color3-bg.png
Documentation/pictures/color3-hover.png
Documentation/pictures/color4-active.png
Documentation/pictures/color4-bg.png
Documentation/pictures/double-lily-modified3.png
Documentation/pictures/engraver-noteheads.png
Documentation/pictures/engraver-score.png
Documentation/pictures/finale-sarabande-full.png
Documentation/pictures/flat-design.png
Documentation/pictures/frescobaldi-lilypond-editor-small.png
Documentation/pictures/frescobaldi-lilypond-editor.png
Documentation/pictures/hader-collage.png
Documentation/pictures/hader-slaan.png
Documentation/pictures/henle-ledger.png
Documentation/pictures/henle-suite1-fullpage-hires.png
Documentation/pictures/henle-suite1-fullpage.png
Documentation/pictures/henle-suite1-line.png
Documentation/pictures/lelie.png
Documentation/pictures/lily-home-nav-active.png
Documentation/pictures/lily-home-nav-bg.png
Documentation/pictures/lily-home-nav-hover.png
Documentation/pictures/lily-ledger.png
Documentation/pictures/lily14-sarabande-annotated-hires.png
Documentation/pictures/lily14-sarabande-annotated.png
Documentation/pictures/lily14-sarabande-correct.png
Documentation/pictures/lily14-sarabande-hires.png
Documentation/pictures/lily17-sarabande.png
Documentation/pictures/lilykde-screenshot-small.png
Documentation/pictures/lilykde-screenshot.png
Documentation/pictures/lilypond-book.png
Documentation/pictures/lilypondtool-2.12-screenshot-400wide.png
Documentation/pictures/lilypondtool-2.12-screenshot.png
Documentation/pictures/logo-linux.png
Documentation/pictures/logo-slackware.png
Documentation/pictures/logo-suse.png
Documentation/pictures/logo-ubuntu.png
Documentation/pictures/logo-windows.png
Documentation/pictures/morgenlied-crop-2.png
Documentation/pictures/morgenlied-ly-crop2.png
Documentation/pictures/naive-notation.png
Documentation/pictures/nav-active-2.png
Documentation/pictures/nav-active.png
Documentation/pictures/nav-bg-2.png
Documentation/pictures/nav-bg.png
Documentation/pictures/nav-hover-2.png
Documentation/pictures/nav-hover.png
Documentation/pictures/nereid-shot-small.png
Documentation/pictures/nereid-shot.png
Documentation/pictures/nonnaive-notation.png
Documentation/pictures/pdf/GNUmakefile [deleted file]
Documentation/pictures/pdf/bwv861-finale2008a.pdf [changed mode: 0755->0644]
Documentation/pictures/screenshot-denemo-small.png
Documentation/pictures/screenshot-denemo.png
Documentation/pictures/simple-notation.png
Documentation/pictures/stone-distance.png
Documentation/pictures/text-input-1-annotate-hu.png
Documentation/pictures/text-input-1-annotate-it.png
Documentation/pictures/text-input-1-annotate-nl.png
Documentation/pictures/text-input-2-annotate-hu.png
Documentation/pictures/text-input-2-annotate-it.png
Documentation/pictures/text-input-2-annotate-nl.png
Documentation/pictures/text-input-parts-both-annotate-hu.png
Documentation/pictures/text-input-parts-both-annotate-it.png
Documentation/pictures/text-input-parts-both-annotate-nl.png
Documentation/pictures/text-input-parts-single-annotate-hu.png
Documentation/pictures/text-input-parts-single-annotate-it.png
Documentation/pictures/text-input-parts-single-annotate-nl.png
Documentation/pictures/text-input-pop-annotate-hu.png
Documentation/pictures/text-input-pop-annotate-it.png
Documentation/pictures/text-input-pop-annotate-nl.png
Documentation/pictures/text-input-score-annotate-hu.png
Documentation/pictures/text-input-score-annotate-it.png
Documentation/pictures/text-input-score-annotate-nl.png
Documentation/po/included/.gitignore [new file with mode: 0644]
Documentation/po/it.po
Documentation/search-box.ihtml
Documentation/snippets/GNUmakefile [deleted file]
Documentation/snippets/accordion-discant-symbols.ly
Documentation/snippets/accordion-registers.ly [new file with mode: 0644]
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-an-ottava-marking-to-a-single-voice.ly [new file with mode: 0644]
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-extra-fingering-with-scheme.ly
Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly
Documentation/snippets/adding-links-to-objects.ly [new file with mode: 0644]
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-timing-marks-to-long-glissandi.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 [deleted file]
Documentation/snippets/aligning-objects-created-with-the--mark-command.ly
Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly
Documentation/snippets/altering-the-length-of-beamed-stems.ly
Documentation/snippets/alternative-bar-numbering.ly
Documentation/snippets/alternative-breve-note.ly [deleted file]
Documentation/snippets/alternative-breve-notes.ly [new file with mode: 0644]
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/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly [new file with mode: 0644]
Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly
Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly
Documentation/snippets/beam-endings-in-score-context.ly
Documentation/snippets/beams-across-line-breaks.ly
Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly
Documentation/snippets/breathing-signs.ly
Documentation/snippets/broken-crescendo-hairpin.ly
Documentation/snippets/caesura-railtracks-with-fermata.ly
Documentation/snippets/center-text-below-hairpin-dynamics.ly
Documentation/snippets/centered-measure-numbers.ly [new file with mode: 0644]
Documentation/snippets/centering-markup-on-note-heads-automatically.ly
Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly
Documentation/snippets/changing-beam-knee-gap.ly
Documentation/snippets/changing-form-of-multi-measure-rests.ly
Documentation/snippets/changing-fret-orientations.ly
Documentation/snippets/changing-stanza-fonts.ly
Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly
Documentation/snippets/changing-the-ambitus-gap.ly
Documentation/snippets/changing-the-breath-mark-symbol.ly
Documentation/snippets/changing-the-number-of-augmentation-dots-per-note.ly
Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly
Documentation/snippets/changing-the-staff-size.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/chords-headword.ly
Documentation/snippets/coloring-notes-depending-on-their-pitch.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/consistently-left-aligned-bar-numbers.ly
Documentation/snippets/contemporary-glissando.ly
Documentation/snippets/contexts-and-engravers.snippet-list
Documentation/snippets/controlling-spanner-visibility-after-a-line-break.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-double-digit-fingerings.ly
Documentation/snippets/creating-real-parenthesized-dynamics.ly
Documentation/snippets/creating-simultaneous-rehearsal-marks.ly
Documentation/snippets/creating-text-spanners.ly
Documentation/snippets/cross-staff-chords---beaming-problems-workaround.ly
Documentation/snippets/cross-staff-stems.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-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.ly [new file with mode: 0644]
Documentation/snippets/displaying-complex-chords.ly
Documentation/snippets/displaying-grob-ancestry.ly
Documentation/snippets/drawing-boxes-around-grobs.ly
Documentation/snippets/drawing-circles-around-note-heads.ly
Documentation/snippets/drawing-circles-around-various-objects.ly
Documentation/snippets/editorial-annotations.snippet-list
Documentation/snippets/editorial-headword.ly
Documentation/snippets/engravers-one-by-one.ly
Documentation/snippets/engraving-ties-manually.ly
Documentation/snippets/engraving-tremolos-with-floating-beams.ly
Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly
Documentation/snippets/expressive-headword.ly
Documentation/snippets/expressive-marks.snippet-list
Documentation/snippets/extending-glissandi-across-repeats.ly [new file with mode: 0644]
Documentation/snippets/figured-bass-headword.ly
Documentation/snippets/fine-tuning-pedal-brackets.ly
Documentation/snippets/fingering-symbols-for-wind-instruments.ly
Documentation/snippets/flamenco-notation.ly
Documentation/snippets/flute-slap-notation.ly
Documentation/snippets/forcing-horizontal-shift-of-notes.ly
Documentation/snippets/forcing-hyphens-to-be-shown.ly
Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly
Documentation/snippets/fret-diagrams-explained-and-developed.ly
Documentation/snippets/fretted-headword.ly
Documentation/snippets/fretted-string-harmonics-in-tablature.ly
Documentation/snippets/generating-custom-flags.ly
Documentation/snippets/generating-random-notes.ly
Documentation/snippets/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.ly
Documentation/snippets/glissandi-can-skip-grobs.ly
Documentation/snippets/grid-lines--changing-their-appearance.ly
Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly
Documentation/snippets/guitar-slides.ly
Documentation/snippets/hairpins-with-different-line-styles.ly
Documentation/snippets/heavily-customized-polymetric-time-signatures.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/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly
Documentation/snippets/how-to-change-fret-diagram-position.ly
Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly
Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly
Documentation/snippets/incipit.ly
Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly
Documentation/snippets/inserting-a-caesura.ly
Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly
Documentation/snippets/jazz-combo-template.ly
Documentation/snippets/keep-change-clefs-full-sized.ly
Documentation/snippets/keyboard-headword.ly
Documentation/snippets/keyboards.snippet-list
Documentation/snippets/laissez-vibrer-ties.ly
Documentation/snippets/line-arrows.ly
Documentation/snippets/lyrics-alignment.ly
Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly
Documentation/snippets/making-glissandi-breakable.ly
Documentation/snippets/making-slurs-with-complex-dash-structure.ly
Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly
Documentation/snippets/manually-controlling-beam-positions.ly
Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly
Documentation/snippets/measure-counter.ly
Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly
Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly
Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly
Documentation/snippets/modifying-tuplet-bracket-length.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/new/GNUmakefile [deleted file]
Documentation/snippets/new/accordion-discant-symbols.ly [new file with mode: 0644]
Documentation/snippets/new/accordion-registers.ly [new file with mode: 0644]
Documentation/snippets/new/adding-a-figured-bass-above-or-below-the-notes.ly [new file with mode: 0644]
Documentation/snippets/new/adding-extra-fingering-with-scheme.ly [new file with mode: 0644]
Documentation/snippets/new/adding-orchestral-cues-to-a-vocal-score.ly
Documentation/snippets/new/adding-timing-marks-to-long-glissandi.ly
Documentation/snippets/new/ancient-fonts.ly
Documentation/snippets/new/ancient-notation-template----modern-transcription-of-gregorian-music.ly
Documentation/snippets/new/bar-chords-notation-for-guitar--with-text-spanner.ly
Documentation/snippets/new/broken-crescendo-hairpin.ly [new file with mode: 0644]
Documentation/snippets/new/centered-measure-numbers.ly [new file with mode: 0644]
Documentation/snippets/new/centering-markup-on-note-heads-automatically.ly
Documentation/snippets/new/changing-the-tuplet-number.ly [new file with mode: 0644]
Documentation/snippets/new/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly
Documentation/snippets/new/chant-or-psalms-notation.ly
Documentation/snippets/new/chords-headword.ly
Documentation/snippets/new/compound-time-signatures.ly [new file with mode: 0644]
Documentation/snippets/new/creating-a-sequence-of-notes-on-various-pitches.ly
Documentation/snippets/new/creating-double-digit-fingerings.ly [new file with mode: 0644]
Documentation/snippets/new/creating-real-parenthesized-dynamics.ly [new file with mode: 0644]
Documentation/snippets/new/entering-several-tuplets-using-only-one--times-command.ly [new file with mode: 0644]
Documentation/snippets/new/expressive-headword.ly [new file with mode: 0644]
Documentation/snippets/new/extending-glissandi-across-repeats.ly [new file with mode: 0644]
Documentation/snippets/new/fretted-headword.ly
Documentation/snippets/new/generating-custom-flags.ly
Documentation/snippets/new/glissandi-can-skip-grobs.ly
Documentation/snippets/new/guitar-slides.ly
Documentation/snippets/new/heavily-customized-polymetric-time-signatures.ly [new file with mode: 0644]
Documentation/snippets/new/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly [new file with mode: 0644]
Documentation/snippets/new/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly [new file with mode: 0644]
Documentation/snippets/new/incipit.ly
Documentation/snippets/new/inserting-score-fragments-above-a-staff,-as-markups.ly [new file with mode: 0644]
Documentation/snippets/new/jazz-combo-template.ly
Documentation/snippets/new/keyboard-headword.ly [new file with mode: 0644]
Documentation/snippets/new/making-an-object-invisible-with-the-transparent-property.ly
Documentation/snippets/new/making-glissandi-breakable.ly
Documentation/snippets/new/merging-multi-measure-rests-in-a-polyphonic-part.ly [new file with mode: 0644]
Documentation/snippets/new/numbering-groups-of-measures.ly [new file with mode: 0644]
Documentation/snippets/new/pitches-headword.ly [new file with mode: 0644]
Documentation/snippets/new/positioning-multi-measure-rests.ly
Documentation/snippets/new/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly [new file with mode: 0644]
Documentation/snippets/new/printing-hairpins-in-various-styles.ly [new file with mode: 0644]
Documentation/snippets/new/quoting-another-voice-with-transposition.ly [new file with mode: 0644]
Documentation/snippets/new/redefining-grace-note-global-defaults.ly
Documentation/snippets/new/score-for-diatonic-accordion.ly
Documentation/snippets/new/staff-headword.ly
Documentation/snippets/new/string-number-extender-lines.ly
Documentation/snippets/new/unfretted-headword.ly [new file with mode: 0644]
Documentation/snippets/new/using-a-tick-as-the-breath-mark-symbol.ly [new file with mode: 0644]
Documentation/snippets/new/using-alternative-flag-styles.ly
Documentation/snippets/new/using-grace-note-slashes-with-normal-heads.ly
Documentation/snippets/new/vertically-aligned-dynamics-and-textscripts.ly [new file with mode: 0644]
Documentation/snippets/non-default-tuplet-numbers.ly
Documentation/snippets/numbering-groups-of-measures.ly [new file with mode: 0644]
Documentation/snippets/numbers-as-easy-note-heads.ly
Documentation/snippets/obtaining-2.12-lyrics-spacing-in-newer-versions.ly
Documentation/snippets/outputting-the-version-number.ly
Documentation/snippets/overriding-articulations-of-destinct-type.ly [new file with mode: 0644]
Documentation/snippets/page-label.ly
Documentation/snippets/paper-and-layout.snippet-list
Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly
Documentation/snippets/pitches-headword.ly
Documentation/snippets/pitches.snippet-list
Documentation/snippets/positioning-arpeggios.ly
Documentation/snippets/positioning-fingering-indications-precisely.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-segno-and-coda-with-line-break.ly
Documentation/snippets/positioning-text-markups-inside-slurs.ly
Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly
Documentation/snippets/preventing-final-mark-from-removing-final-tuplet.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-in-various-styles.ly [new file with mode: 0644]
Documentation/snippets/printing-hairpins-using-al-niente-notation.ly
Documentation/snippets/printing-marks-at-the-end-of-a-line.ly
Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly
Documentation/snippets/printing-music-with-different-time-signatures.ly
Documentation/snippets/proportional-strict-notespacing.ly
Documentation/snippets/putting-lyrics-inside-the-staff.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-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly
Documentation/snippets/removing-the-first-empty-line.ly
Documentation/snippets/repeats-headword.ly
Documentation/snippets/repeats.snippet-list
Documentation/snippets/rest-styles.ly
Documentation/snippets/rhythmic-slashes.ly
Documentation/snippets/rhythms-headword.ly
Documentation/snippets/rhythms.snippet-list
Documentation/snippets/scheme-language.snippet-list
Documentation/snippets/score-for-diatonic-accordion.ly
Documentation/snippets/screech-and-boink.ly
Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly
Documentation/snippets/setting-hairpin-behavior-at-bar-lines.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-the-same-articulation-above-and-below-a-note-or-chord.ly
Documentation/snippets/simultaneous-headword.ly
Documentation/snippets/slides-in-tablature.ly
Documentation/snippets/specific-notation.snippet-list
Documentation/snippets/staff-headword.ly
Documentation/snippets/staff-notation.snippet-list
Documentation/snippets/stand-alone-two-column-markup.ly
Documentation/snippets/stem-and-beam-behavior-in-tablature.ly
Documentation/snippets/stemlets.ly
Documentation/snippets/strict-beat-beaming.ly
Documentation/snippets/string-number-extender-lines.ly
Documentation/snippets/subdividing-beams.ly
Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly
Documentation/snippets/symbols-and-glyphs.snippet-list
Documentation/snippets/syntax-and-expressions.snippet-list
Documentation/snippets/text-headword.ly
Documentation/snippets/text.snippet-list
Documentation/snippets/time-signature-in-parentheses---method-3.ly
Documentation/snippets/time-signature-in-parentheses.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/tweaking-clef-properties.ly
Documentation/snippets/tweaking-grace-layout-within-music.ly
Documentation/snippets/tweaks-and-overrides.snippet-list
Documentation/snippets/unfretted-headword.ly
Documentation/snippets/using-a-tick-as-the-breath-mark-symbol.ly [new file with mode: 0644]
Documentation/snippets/using-alternative-flag-styles.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-postscript-to-generate-special-note-head-shapes.ly
Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly
Documentation/snippets/using-the-whiteout-property.ly
Documentation/snippets/vertical-aligned-staffgroups-without-connecting-systemstartbar.ly [new file with mode: 0644]
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-centered-common-lyrics.ly
Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly
Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly
Documentation/snippets/vocal-ensemble-template.ly
Documentation/snippets/vocal-headword.ly
Documentation/snippets/wind-headword.ly
Documentation/snippets/woodwind-diagrams-key-lists.ly
Documentation/snippets/woodwind-diagrams-listing.ly
Documentation/topdocs/GNUmakefile
Documentation/topdocs/INSTALL.texi
Documentation/translations.itexi
Documentation/usage/GNUmakefile [deleted file]
Documentation/usage/external.itely
Documentation/usage/lilypond-book.itely
Documentation/usage/running.itely
Documentation/usage/suggestions.itely
Documentation/usage/updating.itely
Documentation/web.texi
Documentation/web/GNUmakefile [deleted file]
Documentation/web/community.itexi
Documentation/web/download.itexi
Documentation/web/introduction.itexi
Documentation/web/manuals.itexi
Documentation/web/news-front.itexi
Documentation/web/news.itexi
Documentation/web/server/GNUmakefile [deleted file]
Documentation/web/server/lilypond.org.htaccess
Documentation/web/server/robots.txt
Documentation/web/server/tweets.xml
Documentation/web/we-wrote.bib
Documentation/zh/GNUmakefile
Documentation/zh/included/.gitignore [new file with mode: 0644]
Documentation/zh/included/GNUmakefile [deleted file]
Documentation/zh/search-box.ihtml
Documentation/zh/texidocs/GNUmakefile [deleted file]
Documentation/zh/translations.itexi
Documentation/zh/web/GNUmakefile [deleted file]
Documentation/zh/web/community.itexi
GNUmakefile.in
INSTALL.txt
LICENSE
LICENSE.OFL [new file with mode: 0644]
NEWS.txt
ROADMAP
THANKS [deleted file]
VERSION
aclocal.m4
autogen.sh
config.make.in
config/config.guess [new file with mode: 0755]
config/config.sub [new file with mode: 0755]
config/install-sh [new file with mode: 0755]
configure
configure.ac [new file with mode: 0644]
configure.in [deleted file]
elisp/GNUmakefile
elisp/emacsclient.patch [deleted file]
elisp/lilypond-mode.el
elisp/server.el.patch [deleted file]
flower/GNUmakefile
flower/file-name.cc
flower/file-path.cc
flower/include/GNUmakefile [deleted file]
flower/include/file-name.hh
flower/include/file-path.hh
flower/include/guile-compatibility.hh
flower/include/international.hh
flower/include/interval-set.hh
flower/include/std-string.hh
flower/include/std-vector.hh
flower/include/string-convert.hh
flower/include/warn.hh
flower/include/yaffut.hh
flower/international.cc
flower/interval-set.cc
flower/std-string.cc
flower/string-convert.cc
flower/test-interval-set.cc [new file with mode: 0644]
flower/warn.cc
input/regression/AAA-intro-regression.tely [changed mode: 0755->0644]
input/regression/abc2ly/clefs.abc [changed mode: 0755->0644]
input/regression/accidental-ancient.ly
input/regression/accidental-cautionary.ly
input/regression/accidental-clef-change.ly
input/regression/accidental-collision.ly
input/regression/accidental-contemporary.ly
input/regression/accidental-fingering-collision.ly [new file with mode: 0644]
input/regression/accidental-grouping.ly [new file with mode: 0644]
input/regression/accidental-piano.ly
input/regression/accidental-placement-padding.ly
input/regression/accidental-suggestions.ly
input/regression/accidental-tie.ly
input/regression/accidental-voice.ly
input/regression/add-grace-property.ly [new file with mode: 0644]
input/regression/add-stem-support.ly [new file with mode: 0644]
input/regression/alignment-order.ly
input/regression/alignment-vertical-manual-setting.ly
input/regression/allfontstyle.ily
input/regression/alter-broken.ly
input/regression/ambitus-gap.ly
input/regression/ambitus-with-ligature.ly
input/regression/arpeggio-collision.ly
input/regression/arpeggio-no-overshoot.ly
input/regression/arpeggio-span-one-staff-collision.ly [new file with mode: 0644]
input/regression/arpeggio.ly
input/regression/auto-beam-bar.ly
input/regression/auto-beam-beaming-override.ly
input/regression/auto-beam-triplet.ly
input/regression/auto-beam-tuplets.ly
input/regression/autobeam-3-4-rules.ly
input/regression/autobeam-tuplet-recheck.ly
input/regression/backend-excercise.ly
input/regression/baerenreiter-sarabande.ly
input/regression/balloon.ly
input/regression/bar-check-redefine.ly
input/regression/bar-extent.ly
input/regression/bar-line-define-bar-glyph.ly [new file with mode: 0644]
input/regression/bar-line-define-bar-line.ly [new file with mode: 0644]
input/regression/bar-line-segno.ly
input/regression/bar-lines.ly
input/regression/bar-number-volta-repeat.ly
input/regression/bar-number.ly
input/regression/beam-beamlet-break.ly
input/regression/beam-beamlet-grace.ly
input/regression/beam-break-no-bar.ly
input/regression/beam-break.ly
input/regression/beam-broken-classic.ly
input/regression/beam-broken-difficult.ly
input/regression/beam-center-slope.ly
input/regression/beam-collision-basic.ly
input/regression/beam-collision-beamcount.ly
input/regression/beam-collision-classic.ly
input/regression/beam-collision-grace.ly
input/regression/beam-collision-off.ly
input/regression/beam-collision-prefatory-matter.ly
input/regression/beam-collision-scaled-staff.ly
input/regression/beam-collision-voice-only.ly
input/regression/beam-concave-chord.ly
input/regression/beam-concave.ly
input/regression/beam-default-lengths.ly
input/regression/beam-extreme.ly
input/regression/beam-feather-breaking.ly
input/regression/beam-feather-knee-stem-length.ly
input/regression/beam-feather.ly
input/regression/beam-french.ly
input/regression/beam-funky-beamlet.ly
input/regression/beam-funky.ly
input/regression/beam-manual-beaming.ly
input/regression/beam-outside-beamlets.ly
input/regression/beam-position.ly
input/regression/beam-quant-standard.ly
input/regression/beam-slope-stemlet.ly
input/regression/beam-subdivide-tuplets.ly
input/regression/beam-unconnected-beamlets.ly
input/regression/beaming-tuplet-regular.ly
input/regression/beaming.ly
input/regression/beamlet-test.ly
input/regression/bend-after.ly
input/regression/bookpart-variable.ly
input/regression/break-alignment-anchor-alignment.ly
input/regression/break-alignment-anchors.ly
input/regression/breathing-sign-ancient.ly
input/regression/breathing-sign-custom-staff.ly
input/regression/breathing-sign.ly
input/regression/breve-extent.ly
input/regression/cadenza-grace-autobeam.ly [new file with mode: 0644]
input/regression/chord-name-override-text.ly [new file with mode: 0644]
input/regression/chord-repetition-times.ly
input/regression/chord-repetition.ly
input/regression/chord-tremolo-accidental.ly [new file with mode: 0644]
input/regression/chromatic-scales.ly
input/regression/clef-oct-visibility.ly [deleted file]
input/regression/clef-oct.ly [deleted file]
input/regression/clef-octavation.ly [deleted file]
input/regression/clef-transposition-optional.ly [new file with mode: 0644]
input/regression/clef-transposition-placement.ly [new file with mode: 0644]
input/regression/clef-transposition-visibility.ly [new file with mode: 0644]
input/regression/clef-transposition.ly [new file with mode: 0644]
input/regression/clefs.ly
input/regression/clip-systems.ly
input/regression/cluster-style.ly
input/regression/collision-alignment.ly
input/regression/collision-dots-move.ly
input/regression/collision-dots-up-space-dotted.ly
input/regression/collision-head-solfa-fa.ly
input/regression/collision-manual.ly
input/regression/collision-merge-differently-dotted.ly
input/regression/collision-merge-differently-headed.ly
input/regression/collision-whole.ly
input/regression/color.ly
input/regression/completion-heads-tuplets.ly
input/regression/completion-heads-unit.ly
input/regression/complex-once.ly
input/regression/compound-time-signatures.ly
input/regression/context-mod-context.ly
input/regression/context-mod-with.ly
input/regression/cue-clef-after-barline.ly
input/regression/cue-clef-octavation.ly [deleted file]
input/regression/cue-clef-transposition-optional.ly [new file with mode: 0644]
input/regression/cue-clef-transposition.ly [new file with mode: 0644]
input/regression/custos.ly
input/regression/display-lily-tests.ly
input/regression/dot-column-engraver.ly
input/regression/dot-dot-count-override.ly
input/regression/double-repeat.ly
input/regression/drums.ly
input/regression/duration-identifier-compressed.ly
input/regression/dynamics-alignment-no-line-linebreak.ly
input/regression/dynamics-alignment-no-line.ly
input/regression/dynamics-avoid-cross-staff-stem-3.ly [new file with mode: 0644]
input/regression/dynamics-avoid-cross-staff-stem.ly
input/regression/dynamics-context-textspan.ly
input/regression/dynamics-empty.ly [new file with mode: 0644]
input/regression/dynamics-outside-staff-priority.ly [new file with mode: 0644]
input/regression/dynamics-text-right-padding.ly
input/regression/easy-notation.ly
input/regression/episema.ly
input/regression/event-listener-output.ly
input/regression/ferneyhough-hairpins.ly [new file with mode: 0644]
input/regression/figured-bass-continuation-center.ly
input/regression/figured-bass-continuation-modifiers.ly
input/regression/figured-bass-continuation.ly
input/regression/figured-bass-slashed-numbers.ly
input/regression/figured-bass.ly
input/regression/finger-chords.ly
input/regression/fingering-column-snap-radius.ly [new file with mode: 0644]
input/regression/fingering-column.ly [new file with mode: 0644]
input/regression/fingering-cross-staff.ly
input/regression/fingering-directions.ly [new file with mode: 0644]
input/regression/flags-default.ly
input/regression/flags-in-scheme.ly
input/regression/flags-straight-stockhausen-boulez.ly
input/regression/flags-straight.ly
input/regression/font-bogus-ligature.ly
input/regression/font-family-override.ly
input/regression/font-name.ly
input/regression/footnote-auto-numbering-page-reset.ly
input/regression/footnote-auto-numbering-vertical-order.ly
input/regression/footnote-auto-numbering.ly
input/regression/footnote-break-visibility.ly
input/regression/footnote-spanner.ly
input/regression/fret-diagram-origins.ly
input/regression/fret-diagrams-capo.ly
input/regression/fret-diagrams-dots.ly
input/regression/fret-diagrams-fingering.ly
input/regression/fret-diagrams-fret-label.ly
input/regression/fret-diagrams-landscape.ly
input/regression/fret-diagrams-opposing-landscape.ly
input/regression/fret-diagrams-size.ly
input/regression/fret-diagrams-string-thickness.ly
input/regression/fret-diagrams-xo-label.ly
input/regression/fretboard-chordchanges.ly
input/regression/general-scheme-bindings.ly
input/regression/glissando-broken-multiple.ly
input/regression/glissando-broken-unkilled.ly
input/regression/glissando-broken.ly
input/regression/glissando-index.ly
input/regression/glissando-skip.ly
input/regression/glissando.ly
input/regression/grace-auto-beam-engraver.ly [new file with mode: 0644]
input/regression/grace-bar-line.ly
input/regression/grace-beam.ly
input/regression/grace-end.ly
input/regression/grace-slashed-no-slur.ly
input/regression/grace-start.ly
input/regression/grace-stem-length.ly
input/regression/grace-stems.ly
input/regression/grace-sync.ly
input/regression/grace-volta-repeat-2.ly
input/regression/grace-volta-repeat.ly
input/regression/grace.ly
input/regression/grid-lines.ly
input/regression/grob-indirect-tweak.ly
input/regression/grob-tweak.ly
input/regression/hairpin-barline-break.ly
input/regression/hairpin-circled.ly
input/regression/hairpin-clef.ly [new file with mode: 0644]
input/regression/hairpin-dashed.ly
input/regression/hairpin-ending.ly
input/regression/hairpin-key-signature.ly [new file with mode: 0644]
input/regression/hairpin-neighboring-span-dynamics.ly
input/regression/hairpin-to-barline.ly
input/regression/hara-kiri-alive-with.ly
input/regression/hara-kiri-keep-previous-settings.ly
input/regression/harp-pedals-sanity-checks.ly
input/regression/harp-pedals-tweaking.ly
input/regression/horizontal-bracket-tweak.ly
input/regression/id.ly
input/regression/identifier-following-chordmode.ly
input/regression/identifier-quoted.ly [new file with mode: 0644]
input/regression/in-note.ly
input/regression/incipit.ly
input/regression/instrument-name-hara-kiri.ly
input/regression/instrument-name-x-align.ly
input/regression/instrument-switch-invalid-warning.ly
input/regression/instrument-switch.ly
input/regression/key-clefs.ly
input/regression/key-signature-padding.ly
input/regression/key-signature-space.ly
input/regression/keys.ly
input/regression/kievan-notation.ly [new file with mode: 0644]
input/regression/laissez-vibrer-chords.ly
input/regression/laissez-vibrer-tie-head-direction.ly
input/regression/laissez-vibrer-ties.ly
input/regression/layout-from.ly
input/regression/ledger-lines-dynamics.ly [new file with mode: 0644]
input/regression/ledger-lines-varying-staves.ly
input/regression/les-nereides.ly
input/regression/lily-in-scheme.ly
input/regression/lilypond-book/GNUmakefile
input/regression/lilypond-book/include/GNUmakefile [deleted file]
input/regression/lilypond-book/include/def.tex [new file with mode: 0644]
input/regression/lilypond-book/include/myvar.ily
input/regression/lilypond-book/tex-include-preamble.lytex [new file with mode: 0644]
input/regression/line-arrows.ly
input/regression/line-dash-small-period.ly
input/regression/line-dashed-period.ly
input/regression/line-style-zigzag-spacing.ly
input/regression/line-style.ly
input/regression/lyric-combine-switch-voice-2.ly
input/regression/lyric-combine-switch-voice.ly
input/regression/lyric-combine.ly
input/regression/lyric-extender-includegraces.ly
input/regression/lyric-hyphen-retain.ly
input/regression/lyric-hyphen.ly
input/regression/lyric-melisma-melisma.ly
input/regression/lyric-tweak.ly
input/regression/lyrics-bar.ly
input/regression/lyrics-includegraces.ly
input/regression/lyrics-no-notes.ly
input/regression/lyrics-tenor-clef.ly
input/regression/make-relative-copies.ly [new file with mode: 0644]
input/regression/make-relative-music.ly [new file with mode: 0644]
input/regression/make-relative.ly [new file with mode: 0644]
input/regression/markup-center-align-nocollision.ly
input/regression/markup-commands.ly
input/regression/markup-frame-text.ly [new file with mode: 0644]
input/regression/markup-line-styles.ly [new file with mode: 0644]
input/regression/markup-line-thickness.ly
input/regression/markup-note-grob-style.ly
input/regression/markup-note-styles.ly
input/regression/markup-note.ly
input/regression/markup-rest-styles.ly [new file with mode: 0644]
input/regression/markup-rest.ly [new file with mode: 0644]
input/regression/markup-score.ly
input/regression/markup-special-characters.ly
input/regression/markup-syntax.ly
input/regression/markup-user.ly
input/regression/measure-counter-broken.ly [new file with mode: 0644]
input/regression/measure-counter.ly [new file with mode: 0644]
input/regression/mensural-ligatures.ly
input/regression/mensural.ly
input/regression/metronome-mark-broken-bound.ly
input/regression/metronome-mark-loose-column.ly
input/regression/metronome-marking-align-order.ly
input/regression/metronome-marking-break-align.ly
input/regression/metronome-marking.ly
input/regression/metronome-range.ly
input/regression/midi-grace-after-tie.ly [new file with mode: 0644]
input/regression/midi-tuplets.ly
input/regression/minimum-length-end-line.ly [new file with mode: 0644]
input/regression/modern-tab-clef-scaled.ly
input/regression/morgenlied.ly
input/regression/mozart-hrn3-allegro.ily
input/regression/mozart-hrn3-defs.ily
input/regression/mozart-hrn3-romanze.ily
input/regression/multi-measure-rest-center.ly
input/regression/multi-measure-rest-multi-staff-center.ly
input/regression/multi-measure-rest-staff-position.ly
input/regression/multi-measure-rest-text.ly
input/regression/multi-measure-rest-tweaks.ly
input/regression/music-function-end-spanners.ly
input/regression/music-function.ly
input/regression/music-map.ly
input/regression/musicxml/12a-Clefs.xml
input/regression/musicxml/GNUmakefile
input/regression/no-staff.ly
input/regression/non-centered-bar-lines.ly
input/regression/non-empty-text.ly
input/regression/note-head-solfa.ly
input/regression/note-head-style.ly
input/regression/note-line.ly
input/regression/number-staff-lines.ly
input/regression/offsets.ly [new file with mode: 0644]
input/regression/optimal-page-breaking-hstretch.ly
input/regression/optional-args.ly
input/regression/ottava-edge.ly
input/regression/outside-staff-placement-directive.ly [new file with mode: 0644]
input/regression/override-nest-scheme.ly
input/regression/override-nest.ly
input/regression/page-breaking-good-estimation.ly
input/regression/page-breaking-min-distance2.ly
input/regression/page-breaking-min-distance3.ly
input/regression/page-headers-and-footers.ly
input/regression/page-label.ly
input/regression/page-layout-manual-position.ly
input/regression/page-limited-space.ly [deleted file]
input/regression/page-spacing-bass-figures.ly
input/regression/page-spacing-dynamics.ly
input/regression/page-spacing-nonstaff-lines-and-markup.ly
input/regression/page-spacing-nonstaff-lines-between.ly
input/regression/page-spacing-nonstaff-lines-bottom.ly
input/regression/page-spacing-nonstaff-lines-header-padding.ly
input/regression/page-spacing-nonstaff-lines-independent.ly
input/regression/page-spacing-nonstaff-lines-top.ly
input/regression/page-spacing-nonstaff-lines-unrelated.ly
input/regression/page-spacing-staff-group-hara-kiri.ly
input/regression/page-spacing-staff-group-nested.ly
input/regression/page-spacing-stretchability.ly
input/regression/page-spacing.ly
input/regression/page-top-space.ly
input/regression/page-turn-page-breaking.ly
input/regression/parenthesize.ly
input/regression/part-combine-force-mmrest-position.ly
input/regression/part-combine-force.ly
input/regression/part-combine-mmrest-apart.ly [new file with mode: 0644]
input/regression/part-combine-tuplet-end.ly
input/regression/part-combine-tuplet-single.ly
input/regression/pedal-ped.ly
input/regression/phrasing-slur-dash.ly
input/regression/phrasing-slur-tuplet.ly
input/regression/prefatory-spacing-matter.ly
input/regression/property-nested-override.ly
input/regression/property-nested-revert.ly
input/regression/property-once.ly
input/regression/property-unset.ly [new file with mode: 0644]
input/regression/quote-during.ly
input/regression/quote-overrides.ly
input/regression/quote-transposition.ly
input/regression/quote-tuplet-end.ly
input/regression/quote-tuplet.ly
input/regression/quote.ly
input/regression/rehearsal-mark-align-priority.ly
input/regression/rehearsal-mark-align-staff-context.ly
input/regression/rehearsal-mark-align.ly
input/regression/rehearsal-mark-direction.ly
input/regression/relative-repeat.ly
input/regression/remove-empty-staves-auto-knee.ly
input/regression/remove-empty-staves-with-rests.ly
input/regression/repeat-percent-grace.ly
input/regression/repeat-percent-kerning.ly
input/regression/repeat-sign-global-size-10.ly
input/regression/repeat-sign-global-size-30.ly
input/regression/repeat-sign-global-size-5.ly
input/regression/repeat-sign-layout-size.ly
input/regression/repeat-sign.ly
input/regression/repeat-slash-mixed.ly
input/regression/rest-collision-beam-note.ly
input/regression/rest-collision-beam-restdir.ly
input/regression/rest-ledger.ly
input/regression/rest-on-nonstandard-staff.ly
input/regression/rest-positioning.ly [new file with mode: 0644]
input/regression/scheme-book-scores.ly
input/regression/scheme-text-spanner.ly
input/regression/script-shift.ly
input/regression/script-stack-horizontal.ly
input/regression/script-tie-collision.ly [new file with mode: 0644]
input/regression/semi-tie-cross-staff.ly [new file with mode: 0644]
input/regression/set-once.ly
input/regression/shape-other-curves.ly
input/regression/shape-slurs.ly
input/regression/shift-durations-negative-dots.ly
input/regression/shorthands.ly [new file with mode: 0644]
input/regression/skip-of-length.ly
input/regression/skiptypesetting-all-true.ly
input/regression/skiptypesetting-tuplet.ly
input/regression/skyline-horizontal-padding.ly
input/regression/skyline-point-extent.ly [new file with mode: 0644]
input/regression/skyline-vertical-placement.ly
input/regression/slur-broken-trend.ly
input/regression/slur-cross-staff-beam.ly
input/regression/slur-dash.ly
input/regression/slur-dynamics.ly
input/regression/slur-extreme.ly
input/regression/slur-manual.ly
input/regression/slur-scoring.ly
input/regression/slur-script-inside.ly
input/regression/slur-script.ly
input/regression/slur-shift-region.ly
input/regression/slur-tuplet.ly
input/regression/slur-vestigial-outside-staff-callback.ly
input/regression/song-reordering.ly
input/regression/song-reordering2.ly
input/regression/song-slurs.ly
input/regression/spacing-accidental-stretch.ly
input/regression/spacing-bar-accidental.ly
input/regression/spacing-bar-arpeggio.ly
input/regression/spacing-bar-stem.ly
input/regression/spacing-bar-whole-measure.ly
input/regression/spacing-folded-clef2.ly
input/regression/spacing-grace.ly
input/regression/spacing-horizontal-skyline-grace.ly
input/regression/spacing-knee-compressed.ly
input/regression/spacing-knee.ly
input/regression/spacing-loose-grace-error.ly
input/regression/spacing-loose-grace-linebreak.ly
input/regression/spacing-loose-grace.ly
input/regression/spacing-loose-polyphony.ly
input/regression/spacing-mark-width.ly
input/regression/spacing-measure-length.ly
input/regression/spacing-multi-tuplet.ly
input/regression/spacing-non-adjacent-columns3.ly [new file with mode: 0644]
input/regression/spacing-packed.ly
input/regression/spacing-paper-column-padding.ly
input/regression/spacing-proportional.ly
input/regression/spacing-space-to-barline.ly
input/regression/spacing-stem-bar.ly
input/regression/spacing-stem-direction.ly
input/regression/spacing-stem-same-direction.ly
input/regression/spacing-strict-notespacing.ly
input/regression/spacing-strict-spacing-grace.ly
input/regression/spacing-to-empty-barline.ly
input/regression/spacing-uniform-stretching.ly
input/regression/span-bar-allow-span-bar.ly
input/regression/span-bar-break.ly
input/regression/span-bar-partial.ly
input/regression/span-bar.ly
input/regression/spanner-after-line-breaking.ly
input/regression/spanner-break-overshoot.ly
input/regression/staff-ledger-positions.ly
input/regression/staff-line-positions.ly
input/regression/staff-mixed-size.ly
input/regression/staff-tweak.ly
input/regression/stem-direction-context.ly
input/regression/stem-length-estimation.ly
input/regression/stem-length.ly
input/regression/stem-stemlet-whole.ly
input/regression/stem-stemlet.ly
input/regression/stem-tremolo-note-collision.ly [new file with mode: 0644]
input/regression/stem-tremolo-note-column.ly
input/regression/stem-tremolo-staff-space.ly
input/regression/stem-tremolo.ly
input/regression/stencil-color-rotation.ly
input/regression/stencil-hacking.ly
input/regression/stencil-scale.ly
input/regression/system-extents.ly
input/regression/system-start-bar-collapse-staffspace.ly
input/regression/system-start-heavy-bar.ly
input/regression/system-start-nesting.ly
input/regression/tablature-chord-repetition.ly
input/regression/tablature-full-notation.ly
input/regression/tablature-harmonic-functions.ly
input/regression/tablature-letter.ly
input/regression/tablature-repeat.ly
input/regression/tablature-slide.ly
input/regression/tablature-slurs-with-beams.ly [new file with mode: 0644]
input/regression/tablature-tie-behaviour.ly
input/regression/tag-multiple.ly [new file with mode: 0644]
input/regression/test-output-distance.ly
input/regression/text-script-vertical-skylines.ly [new file with mode: 0644]
input/regression/text-spanner-attachment-alignment.ly
input/regression/text-spanner-override-order.ly
input/regression/tie-accidental.ly
input/regression/tie-broken-minimum-length.ly
input/regression/tie-chord-broken-extremal.ly
input/regression/tie-chord.ly
input/regression/tie-dash.ly
input/regression/tie-manual-vertical-tune.ly
input/regression/tie-manual.ly
input/regression/tie-semi-single.ly
input/regression/tie-single-manual.ly
input/regression/tie-whole.ly
input/regression/trill-spanner-chained.ly
input/regression/trill-spanner-grace.ly
input/regression/trill-spanner-scaled.ly
input/regression/tuplet-beam.ly
input/regression/tuplet-bracket-avoid-fingering.ly
input/regression/tuplet-bracket-avoid-scripts.ly
input/regression/tuplet-bracket-avoid-string-number.ly
input/regression/tuplet-bracket-cross-staff.ly
input/regression/tuplet-bracket-direction.ly
input/regression/tuplet-bracket-outside-staff-priority.ly
input/regression/tuplet-bracket-vertical-skylines.ly [new file with mode: 0644]
input/regression/tuplet-bracket-visibility.ly
input/regression/tuplet-broken.ly
input/regression/tuplet-full-length-extent.ly
input/regression/tuplet-full-length-note.ly
input/regression/tuplet-full-length.ly
input/regression/tuplet-gap.ly
input/regression/tuplet-nest-beam.ly
input/regression/tuplet-nest-broken.ly
input/regression/tuplet-nest.ly
input/regression/tuplet-no-stems.ly
input/regression/tuplet-number-outside-staff-positioning.ly [new file with mode: 0644]
input/regression/tuplet-number-outside-staff-priority.ly
input/regression/tuplet-number-slur-script.ly
input/regression/tuplet-properties.ly
input/regression/tuplet-rest.ly
input/regression/tuplet-single-note.ly
input/regression/tuplet-slope.ly
input/regression/tuplet-staffline-collision.ly
input/regression/tuplet-subdivision.ly
input/regression/tuplet-text-different-numbers.ly
input/regression/tuplet-text-fraction-with-notes.ly
input/regression/tuplet-text-note-appended.ly
input/regression/tuplets.ly
input/regression/typography-demo.ly
input/regression/unpure-pure-container.ly
input/regression/volta-bracket-add-volta-hook.ly [new file with mode: 0644]
input/regression/volta-bracket-vertical-skylines.ly [new file with mode: 0644]
input/regression/whiteout-lower-layers.ly
input/regression/whiteout.ly
input/regression/zero-staff-space.ly
lily/GNUmakefile
lily/accidental-engraver.cc
lily/accidental-placement.cc
lily/accidental.cc
lily/align-interface.cc
lily/all-font-metrics.cc
lily/ambitus-engraver.cc
lily/arpeggio-engraver.cc
lily/arpeggio.cc
lily/articulations.cc
lily/audio-item.cc
lily/auto-beam-engraver.cc
lily/auto-change-iterator.cc
lily/axis-group-engraver.cc
lily/axis-group-interface.cc
lily/bar-engraver.cc
lily/beam-collision-engraver.cc
lily/beam-engraver.cc
lily/beam-quanting.cc
lily/beam.cc
lily/beaming-pattern.cc
lily/bezier.cc
lily/box.cc
lily/break-alignment-interface.cc
lily/breathing-sign.cc
lily/change-iterator.cc
lily/chord-name-engraver.cc
lily/clef-engraver.cc
lily/clef.cc
lily/coherent-ligature-engraver.cc
lily/completion-note-heads-engraver.cc
lily/completion-rest-engraver.cc
lily/concurrent-hairpin-engraver.cc
lily/constrained-breaking.cc
lily/context-def.cc
lily/context-property.cc
lily/context-scheme.cc
lily/context.cc
lily/control-track-performer.cc
lily/cue-clef-engraver.cc
lily/default-bar-line-engraver.cc
lily/dimension-cache.cc
lily/dispatcher.cc
lily/dot-column.cc
lily/dot-formatting-problem.cc
lily/dots.cc
lily/drum-note-engraver.cc
lily/dynamic-align-engraver.cc
lily/dynamic-engraver.cc
lily/dynamic-performer.cc
lily/engraver.cc
lily/figured-bass-position-engraver.cc
lily/file-name-map.cc
lily/fingering-column-engraver.cc [new file with mode: 0644]
lily/fingering-column.cc [new file with mode: 0644]
lily/fingering-engraver.cc
lily/flag.cc
lily/font-metric.cc
lily/footnote-engraver.cc
lily/freetype-error.cc
lily/freetype.cc
lily/fretboard-engraver.cc
lily/function-documentation.cc
lily/global-context-scheme.cc
lily/global-context.cc
lily/global-vars.cc [new file with mode: 0644]
lily/gregorian-ligature-engraver.cc
lily/gregorian-ligature.cc
lily/grob-array.cc
lily/grob-closure.cc
lily/grob-property.cc
lily/grob-scheme.cc
lily/grob.cc
lily/hairpin.cc
lily/hara-kiri-engraver.cc [deleted file]
lily/hara-kiri-group-spanner.cc
lily/includable-lexer.cc
lily/include/GNUmakefile [deleted file]
lily/include/accidental-interface.hh
lily/include/accidental-placement.hh
lily/include/all-font-metrics.hh
lily/include/arpeggio.hh
lily/include/audio-item.hh
lily/include/axis-group-engraver.hh [deleted file]
lily/include/axis-group-interface.hh
lily/include/beam-scoring-problem.hh
lily/include/bezier.hh
lily/include/box.hh
lily/include/change-iterator.hh
lily/include/coherent-ligature-engraver.hh
lily/include/constrained-breaking.hh
lily/include/context-def.hh
lily/include/context-mod.hh
lily/include/context.hh
lily/include/dimension-cache.hh
lily/include/event-chord-iterator.hh
lily/include/file-name-map.hh
lily/include/fingering-column.hh [new file with mode: 0644]
lily/include/font-metric.hh
lily/include/freetype.hh
lily/include/global-context.hh
lily/include/gregorian-ligature-engraver.hh
lily/include/grob.hh
lily/include/includable-lexer.hh
lily/include/input.hh
lily/include/interval-minefield.hh
lily/include/kievan-ligature.hh [new file with mode: 0644]
lily/include/ligature-engraver.hh
lily/include/lily-guile-macros.hh
lily/include/lily-guile.hh
lily/include/lily-lexer.hh
lily/include/lily-parser.hh
lily/include/lily-proto.hh
lily/include/lilypond-version.hh
lily/include/main.hh
lily/include/midi-chunk.hh
lily/include/midi-item.hh
lily/include/midi-stream.hh
lily/include/misc.hh
lily/include/modified-font-metric.hh
lily/include/multi-measure-rest.hh
lily/include/music.hh
lily/include/note-collision.hh
lily/include/note-column.hh
lily/include/note-head.hh
lily/include/open-type-font.hh
lily/include/output-def.hh
lily/include/pango-font.hh
lily/include/paper-outputter.hh
lily/include/performer.hh
lily/include/program-option.hh
lily/include/pure-from-neighbor-interface.hh
lily/include/relocate.hh
lily/include/rest.hh
lily/include/rhythmic-music-iterator.hh
lily/include/self-alignment-interface.hh
lily/include/side-position-interface.hh
lily/include/skyline-pair.hh
lily/include/skyline.hh
lily/include/slur-configuration.hh
lily/include/slur-proto-engraver.hh [new file with mode: 0644]
lily/include/slur.hh
lily/include/smobs.hh
lily/include/source-file.hh
lily/include/stem-tremolo.hh
lily/include/stem.hh
lily/include/stencil.hh
lily/include/stream.hh [deleted file]
lily/include/system.hh
lily/include/tie-column-format.hh [deleted file]
lily/include/tie-configuration.hh
lily/include/translator-group.hh
lily/include/translator.hh
lily/input.cc
lily/interval-minefield.cc
lily/item.cc
lily/key-signature-interface.cc
lily/kievan-ligature-engraver.cc [new file with mode: 0644]
lily/kievan-ligature.cc [new file with mode: 0644]
lily/ledger-line-engraver.cc
lily/ledger-line-spanner.cc
lily/lexer.ll
lily/ligature-engraver.cc
lily/lily-guile.cc
lily/lily-lexer.cc
lily/lily-parser-scheme.cc
lily/lily-parser.cc
lily/lilypond-version.cc
lily/line-spanner.cc
lily/lookup.cc
lily/lyric-combine-music-iterator.cc
lily/main.cc
lily/melody-engraver.cc
lily/mensural-ligature-engraver.cc
lily/mensural-ligature.cc
lily/midi-chunk.cc
lily/midi-control-function-performer.cc [new file with mode: 0644]
lily/midi-item.cc
lily/midi-stream.cc
lily/midi-walker.cc
lily/misc.cc
lily/modified-font-metric.cc
lily/module-scheme.cc
lily/multi-measure-rest.cc
lily/music-scheme.cc
lily/music-sequence.cc
lily/music.cc
lily/new-dynamic-engraver.cc [deleted file]
lily/new-fingering-engraver.cc
lily/note-collision.cc
lily/note-column.cc
lily/note-head.cc
lily/note-performer.cc
lily/note-spacing.cc
lily/open-type-font.cc
lily/optimal-page-breaking.cc
lily/out/parser.cc [deleted file]
lily/out/parser.hh [deleted file]
lily/output-def.cc
lily/page-breaking.cc
lily/page-layout-problem.cc
lily/page-spacing.cc
lily/page-turn-page-breaking.cc
lily/pango-font.cc
lily/pango-select.cc
lily/paper-column-engraver.cc
lily/paper-column.cc
lily/paper-def.cc
lily/paper-outputter.cc
lily/parser.yy
lily/part-combine-iterator.cc
lily/partial-iterator.cc
lily/pdf-scheme.cc
lily/performance.cc
lily/phrasing-slur-engraver.cc
lily/pitch-scheme.cc
lily/pitched-trill-engraver.cc
lily/program-option-scheme.cc
lily/property-iterator.cc
lily/pure-from-neighbor-engraver.cc
lily/pure-from-neighbor-interface.cc
lily/quote-iterator.cc
lily/relative-octave-music.cc
lily/relocate.cc
lily/repeat-acknowledge-engraver.cc
lily/repeated-music.cc
lily/rest-collision.cc
lily/rest.cc
lily/rhythmic-column-engraver.cc
lily/rhythmic-music-iterator.cc
lily/score-performer.cc
lily/score-scheme.cc
lily/script-column.cc
lily/script-engraver.cc
lily/script-interface.cc
lily/self-alignment-interface.cc
lily/semi-tie-column.cc
lily/separation-item.cc
lily/side-position-interface.cc
lily/simple-closure.cc
lily/simple-spacer.cc
lily/simultaneous-music-iterator.cc
lily/skyline-pair.cc
lily/skyline.cc
lily/slur-configuration.cc
lily/slur-engraver.cc
lily/slur-proto-engraver.cc [new file with mode: 0644]
lily/slur-scoring.cc
lily/slur.cc
lily/source-file.cc
lily/spacing-spanner.cc
lily/span-arpeggio-engraver.cc
lily/span-bar-stub-engraver.cc
lily/spanner.cc
lily/staff-performer.cc
lily/staff-spacing.cc
lily/stem-tremolo.cc
lily/stem.cc
lily/stencil-integral.cc [new file with mode: 0644]
lily/stencil-interpret.cc
lily/stencil-scheme.cc
lily/stencil.cc
lily/stream-event-scheme.cc
lily/system-start-delimiter.cc
lily/system.cc
lily/text-interface.cc
lily/tie-column.cc
lily/tie-configuration.cc
lily/tie-engraver.cc
lily/tie-formatting-problem.cc
lily/time-signature.cc
lily/timing-translator.cc
lily/translator-dispatch-list.cc
lily/ttf.cc
lily/tuplet-bracket.cc
lily/tuplet-engraver.cc
lily/tuplet-iterator.cc
lily/tweak-engraver.cc
lily/unpure-pure-container.cc
lily/vaticana-ligature-engraver.cc
lily/vertical-align-engraver.cc
lily/volta-bracket.cc
lily/volta-repeat-iterator.cc
ly/arabic.ly
ly/articulate.ly
ly/bagpipe.ly
ly/chord-repetition-init.ly
ly/context-mods-init.ly
ly/declarations-init.ly
ly/engraver-init.ly
ly/event-listener.ly
ly/grace-init.ly
ly/gregorian.ly
ly/init.ly
ly/makam.ly
ly/music-functions-init.ly
ly/paper-defaults-init.ly
ly/performer-init.ly
ly/predefined-fretboards-init.ly
ly/property-init.ly
ly/script-init.ly
ly/spanners-init.ly
ly/titling-init.ly
ly/toc-init.ly
make/GNUmakefile [deleted file]
make/abc-vars.make
make/doc-i18n-root-rules.make
make/doc-i18n-root-targets.make
make/doc-i18n-root-vars.make
make/lilypond-book-rules.make
make/lilypond-vars.make
make/ly-rules.make
make/ly-vars.make
make/midi-vars.make
make/musicxml-vars.make
make/website.make
mf/GNUmakefile
mf/feta-accidentals.mf
mf/feta-accordion.mf
mf/feta-arrowheads.mf
mf/feta-autometric.mf
mf/feta-braces-a.mf
mf/feta-braces-b.mf
mf/feta-braces-c.mf
mf/feta-braces-d.mf
mf/feta-braces-e.mf
mf/feta-braces-f.mf
mf/feta-braces-g.mf
mf/feta-braces-h.mf
mf/feta-braces-i.mf
mf/feta-braces.mf
mf/feta-brackettips.mf
mf/feta-clefs.mf
mf/feta-dots.mf
mf/feta-dynamics.mf
mf/feta-flags-generic.mf
mf/feta-flags.mf
mf/feta-generic.mf
mf/feta-macros.mf
mf/feta-noteheads-generic.mf
mf/feta-noteheads.mf
mf/feta-numbers.mf
mf/feta-params.mf
mf/feta-pedals.mf
mf/feta-rests.mf
mf/feta-scripts.mf
mf/feta-ties.mf
mf/feta-timesignatures.mf
mf/feta-trills.mf
mf/parmesan-accidentals.mf
mf/parmesan-clefs.mf
mf/parmesan-custodes.mf
mf/parmesan-dots.mf
mf/parmesan-flags.mf
mf/parmesan-generic.mf
mf/parmesan-macros.mf
mf/parmesan-noteheads-generic.mf
mf/parmesan-noteheads.mf
mf/parmesan-rests.mf
mf/parmesan-scripts.mf
mf/parmesan-timesignatures.mf
out/ChangeLog
out/RELEASE-COMMIT
po/ca.po [new file with mode: 0644]
po/cs.po
po/da.po
po/de.po
po/el.po
po/eo.po
po/es.po
po/fi.po
po/fr.po
po/it.po
po/lilypond.pot
po/nl.po
po/ru.po
po/sv.po
po/tr.po
po/uk.po
po/vi.po
po/zh_TW.po
python/auxiliar/GNUmakefile
python/auxiliar/postprocess_html.py
python/book_latex.py
python/book_snippets.py
python/convertrules.py
python/lilylib.py
scm/accreg.scm [new file with mode: 0644]
scm/auto-beam.scm
scm/autochange.scm
scm/backend-library.scm
scm/bar-line.scm
scm/bezier-tools.scm
scm/c++.scm
scm/chord-entry.scm
scm/chord-generic-names.scm
scm/chord-ignatzek-names.scm
scm/chord-name.scm
scm/clip-region.scm
scm/coverage.scm
scm/define-context-properties.scm
scm/define-event-classes.scm
scm/define-grob-interfaces.scm
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/define-markup-commands.scm
scm/define-music-callbacks.scm
scm/define-music-display-methods.scm
scm/define-music-properties.scm
scm/define-music-types.scm
scm/define-note-names.scm
scm/define-stencil-commands.scm
scm/define-woodwind-diagrams.scm
scm/display-lily.scm
scm/display-woodwind-diagrams.scm
scm/document-backend.scm
scm/document-context-mods.scm
scm/document-functions.scm
scm/document-identifiers.scm
scm/document-markup.scm
scm/document-music.scm
scm/document-translation.scm
scm/document-type-predicates.scm
scm/documentation-generate.scm
scm/documentation-lib.scm
scm/editor.scm
scm/encoding.scm
scm/file-cache.scm
scm/flag-styles.scm
scm/font.scm
scm/framework-eps.scm
scm/framework-null.scm
scm/framework-ps.scm
scm/framework-scm.scm
scm/framework-socket.scm
scm/framework-svg.scm
scm/fret-diagrams.scm
scm/graphviz.scm
scm/guile-debugger.scm
scm/harp-pedals.scm
scm/layout-beam.scm
scm/layout-slur.scm
scm/lily-library.scm
scm/lily-sort.scm
scm/lily.scm
scm/ly-syntax-constructors.scm
scm/markup-macros.scm
scm/markup.scm
scm/memory-trace.scm
scm/midi.scm
scm/modal-transforms.scm
scm/music-functions.scm
scm/output-lib.scm
scm/output-ps.scm
scm/output-socket.scm
scm/output-svg.scm
scm/page.scm
scm/paper-system.scm
scm/paper.scm
scm/parser-clef.scm
scm/parser-ly-from-scheme.scm
scm/part-combiner.scm
scm/predefined-fretboards.scm
scm/ps-to-png.scm
scm/safe-lily.scm
scm/safe-utility-defs.scm
scm/scheme-engravers.scm [new file with mode: 0644]
scm/script.scm
scm/skyline.scm [new file with mode: 0644]
scm/song-util.scm
scm/song.scm
scm/standalone.scm
scm/stencil.scm
scm/tablature.scm
scm/text.scm
scm/time-signature-settings.scm
scm/titling.scm
scm/to-xml.scm
scm/translation-functions.scm
scm/x11-color.scm
scripts/GNUmakefile
scripts/abc2ly.py
scripts/auxiliar/GNUmakefile [deleted file]
scripts/auxiliar/NoTagline.ly [new file with mode: 0644]
scripts/auxiliar/build-coverage.sh
scripts/auxiliar/build-profile.sh
scripts/auxiliar/cg-section.sh
scripts/auxiliar/fixscm.sh [new file with mode: 0755]
scripts/auxiliar/make-regtest-pngs.sh [new file with mode: 0755]
scripts/auxiliar/ref_check.py
scripts/auxiliar/ref_check.tely
scripts/auxiliar/show_skyline_command.py [new file with mode: 0644]
scripts/auxiliar/skyline_viewer.py [new file with mode: 0755]
scripts/auxiliar/strip-whitespace.py
scripts/build/GNUmakefile
scripts/build/create-weblinks-itexi.py
scripts/build/gen-emmentaler-scripts.py
scripts/build/install.py [new file with mode: 0644]
scripts/build/make-version.py [new file with mode: 0644]
scripts/build/mass-link.py
scripts/build/mf-to-table.py
scripts/build/text2html.py [new file with mode: 0644]
scripts/build/website_post.py
scripts/build/yyout2grammar.py
scripts/convert-ly.py
scripts/etf2ly.py
scripts/lilymidi.py
scripts/lilypond-book.py
scripts/lilypond-invoke-editor.scm
scripts/musicxml2ly.py
smart-autogen.sh
stepmake/GNUmakefile [deleted file]
stepmake/INSTALL.texi [deleted file]
stepmake/README [deleted file]
stepmake/aclocal.m4 [deleted file]
stepmake/autogen.sh [deleted file]
stepmake/bin/GNUmakefile [deleted file]
stepmake/bin/config.guess [deleted file]
stepmake/bin/config.sub [deleted file]
stepmake/bin/fake-msgfmt.sh [deleted file]
stepmake/bin/install-sh [deleted file]
stepmake/bin/install.py [deleted file]
stepmake/bin/make-version.py [deleted file]
stepmake/bin/ntpwd.py [deleted file]
stepmake/bin/stepmakeise.sh [deleted file]
stepmake/bin/text2html.py [deleted file]
stepmake/config.hh.in [deleted file]
stepmake/configure.in [deleted file]
stepmake/stepmake/GNUmakefile [deleted file]
stepmake/stepmake/c++-rules.make
stepmake/stepmake/c-rules.make
stepmake/stepmake/documentation-vars.make
stepmake/stepmake/generic-rules.make
stepmake/stepmake/generic-targets.make
stepmake/stepmake/generic-vars.make
stepmake/stepmake/makedir-vars.make
stepmake/stepmake/metafont-rules.make
stepmake/stepmake/metafont-vars.make
stepmake/stepmake/po-targets.make
stepmake/stepmake/podir-vars.make
stepmake/stepmake/python-module-vars.make
stepmake/stepmake/texinfo-rules.make
stepmake/stepmake/texinfo-vars.make
stepmake/stepmake/topdocs-vars.make
stepmake/stepmake/toplevel-targets.make
stepmake/stepmake/toplevel-vars.make

diff --git a/.dir-locals.el b/.dir-locals.el
new file mode 100644 (file)
index 0000000..72472a6
--- /dev/null
@@ -0,0 +1,11 @@
+;;; Directory Local Variables
+;;; See Info node `(emacs) Directory Variables' for more information.
+
+((c++-mode
+  (c-default-style . "gnu")
+  (indent-tabs-mode))
+ (scheme-mode
+  (indent-tabs-mode))
+ (texinfo-mode
+  (fill-column . 66)
+  (indent-tabs-mode)))
diff --git a/.gitfilelist b/.gitfilelist
new file mode 100644 (file)
index 0000000..00d0145
--- /dev/null
@@ -0,0 +1,4892 @@
+.dir-locals.el
+.gitignore
+.mailmap
+COPYING
+COPYING.FDL
+DEDICATION
+Documentation/GNUmakefile
+Documentation/changes.tely
+Documentation/common-macros.itexi
+Documentation/contributor.texi
+Documentation/contributor/administration.itexi
+Documentation/contributor/build-notes.itexi
+Documentation/contributor/compiling.itexi
+Documentation/contributor/doc-translation-list.itexi
+Documentation/contributor/doc-work.itexi
+Documentation/contributor/feta-font.itexi
+Documentation/contributor/introduction.itexi
+Documentation/contributor/issues.itexi
+Documentation/contributor/lsr-work.itexi
+Documentation/contributor/programming-work.itexi
+Documentation/contributor/quick-start.itexi
+Documentation/contributor/regressions.itexi
+Documentation/contributor/release-work.itexi
+Documentation/contributor/source-code.itexi
+Documentation/contributor/website-work.itexi
+Documentation/cs/GNUmakefile
+Documentation/cs/download.itexi
+Documentation/cs/essay/literature.itely
+Documentation/cs/included/.gitignore
+Documentation/cs/learning.tely
+Documentation/cs/learning/common-notation.itely
+Documentation/cs/learning/fundamental.itely
+Documentation/cs/learning/preface.itely
+Documentation/cs/learning/templates.itely
+Documentation/cs/learning/tutorial.itely
+Documentation/cs/learning/tweaks.itely
+Documentation/cs/macros.itexi
+Documentation/cs/translations.itexi
+Documentation/cs/usage/external.itely
+Documentation/cs/usage/lilypond-book.itely
+Documentation/cs/usage/running.itely
+Documentation/cs/usage/setup.itely
+Documentation/cs/usage/suggestions.itely
+Documentation/cs/usage/updating.itely
+Documentation/cs/web.texi
+Documentation/cs/web/community.itexi
+Documentation/cs/web/download.itexi
+Documentation/cs/web/introduction.itexi
+Documentation/cs/web/manuals.itexi
+Documentation/css/GNUmakefile
+Documentation/css/lilypond-ie-fixes.css
+Documentation/css/lilypond-manuals.css
+Documentation/css/lilypond-website.css
+Documentation/cyrillic.itexi
+Documentation/de/GNUmakefile
+Documentation/de/essay.tely
+Documentation/de/essay/engraving.itely
+Documentation/de/essay/literature.itely
+Documentation/de/extending.tely
+Documentation/de/extending/programming-interface.itely
+Documentation/de/extending/scheme-tutorial.itely
+Documentation/de/included/generating-output.itexi
+Documentation/de/included/helpus.itexi
+Documentation/de/learning.tely
+Documentation/de/learning/common-notation.itely
+Documentation/de/learning/fundamental.itely
+Documentation/de/learning/preface.itely
+Documentation/de/learning/templates.itely
+Documentation/de/learning/tutorial.itely
+Documentation/de/learning/tweaks.itely
+Documentation/de/macros.itexi
+Documentation/de/notation.tely
+Documentation/de/notation/ancient.itely
+Documentation/de/notation/changing-defaults.itely
+Documentation/de/notation/cheatsheet.itely
+Documentation/de/notation/chords.itely
+Documentation/de/notation/contemporary.itely
+Documentation/de/notation/editorial.itely
+Documentation/de/notation/expressive.itely
+Documentation/de/notation/fretted-strings.itely
+Documentation/de/notation/input.itely
+Documentation/de/notation/keyboards.itely
+Documentation/de/notation/notation-appendices.itely
+Documentation/de/notation/notation.itely
+Documentation/de/notation/percussion.itely
+Documentation/de/notation/pitches.itely
+Documentation/de/notation/repeats.itely
+Documentation/de/notation/rhythms.itely
+Documentation/de/notation/simultaneous.itely
+Documentation/de/notation/spacing.itely
+Documentation/de/notation/specialist.itely
+Documentation/de/notation/staff.itely
+Documentation/de/notation/text.itely
+Documentation/de/notation/unfretted-strings.itely
+Documentation/de/notation/vocal.itely
+Documentation/de/notation/wind.itely
+Documentation/de/notation/world.itely
+Documentation/de/search-box.ihtml
+Documentation/de/texidocs/accordion-discant-symbols.texidoc
+Documentation/de/texidocs/adding-ambitus-per-voice.texidoc
+Documentation/de/texidocs/adding-bar-lines-to-chordnames-context.texidoc
+Documentation/de/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc
+Documentation/de/texidocs/adding-volta-brackets-to-additional-staves.texidoc
+Documentation/de/texidocs/additional-voices-to-avoid-collisions.texidoc
+Documentation/de/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc
+Documentation/de/texidocs/aligning-bar-numbers.texidoc
+Documentation/de/texidocs/aligning-marks-with-various-notation-objects.texidoc
+Documentation/de/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc
+Documentation/de/texidocs/alternative-bar-numbering.texidoc
+Documentation/de/texidocs/alternative-breve-note.texidoc
+Documentation/de/texidocs/ambitus-with-multiple-voices.texidoc
+Documentation/de/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc
+Documentation/de/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc
+Documentation/de/texidocs/anglican-psalm-template.texidoc
+Documentation/de/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc
+Documentation/de/texidocs/arabic-improvisation.texidoc
+Documentation/de/texidocs/beam-endings-in-score-context.texidoc
+Documentation/de/texidocs/beam-grouping-in-7-8-time.texidoc
+Documentation/de/texidocs/beams-across-line-breaks.texidoc
+Documentation/de/texidocs/changing--flageolet-mark-size.texidoc
+Documentation/de/texidocs/changing-beam-knee-gap.texidoc
+Documentation/de/texidocs/changing-chord-separator.texidoc
+Documentation/de/texidocs/changing-form-of-multi-measure-rests.texidoc
+Documentation/de/texidocs/changing-partcombine-texts.texidoc
+Documentation/de/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc
+Documentation/de/texidocs/changing-the-breath-mark-symbol.texidoc
+Documentation/de/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc
+Documentation/de/texidocs/changing-the-size-of-woodwind-diagrams.texidoc
+Documentation/de/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc
+Documentation/de/texidocs/changing-the-time-signature-without-affecting-the-beaming.texidoc
+Documentation/de/texidocs/changing-the-tuplet-number.texidoc
+Documentation/de/texidocs/chant-or-psalms-notation.texidoc
+Documentation/de/texidocs/chord-glissando-in-tablature.texidoc
+Documentation/de/texidocs/chord-name-exceptions.texidoc
+Documentation/de/texidocs/chord-name-major7.texidoc
+Documentation/de/texidocs/chordchanges-for-fretboards.texidoc
+Documentation/de/texidocs/combining-two-parts-on-the-same-staff.texidoc
+Documentation/de/texidocs/compound-time-signatures.texidoc
+Documentation/de/texidocs/conducting-signs,-measure-grouping-signs.texidoc
+Documentation/de/texidocs/contemporary-glissando.texidoc
+Documentation/de/texidocs/controlling-the-placement-of-chord-fingerings.texidoc
+Documentation/de/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc
+Documentation/de/texidocs/creating-a-delayed-turn.texidoc
+Documentation/de/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc
+Documentation/de/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc
+Documentation/de/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc
+Documentation/de/texidocs/creating-metronome-marks-in-markup-mode.texidoc
+Documentation/de/texidocs/cross-staff-stems.texidoc
+Documentation/de/texidocs/customizing-fretboard-fret-diagrams.texidoc
+Documentation/de/texidocs/customizing-markup-fret-diagrams.texidoc
+Documentation/de/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc
+Documentation/de/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc
+Documentation/de/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc
+Documentation/de/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc
+Documentation/de/texidocs/dynamics-custom-text-spanner-postfix.texidoc
+Documentation/de/texidocs/dynamics-text-spanner-postfix.texidoc
+Documentation/de/texidocs/engraving-ties-manually.texidoc
+Documentation/de/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc
+Documentation/de/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc
+Documentation/de/texidocs/flat-flags-and-beam-nibs.texidoc
+Documentation/de/texidocs/forcing-horizontal-shift-of-notes.texidoc
+Documentation/de/texidocs/formatting-lyrics-syllables.texidoc
+Documentation/de/texidocs/fretboards-alternate-tables.texidoc
+Documentation/de/texidocs/fretted-string-harmonics-in-tablature.texidoc
+Documentation/de/texidocs/glissandi-can-skip-grobs.texidoc
+Documentation/de/texidocs/graphical-and-text-woodwind-diagrams.texidoc
+Documentation/de/texidocs/grid-lines--changing-their-appearance.texidoc
+Documentation/de/texidocs/grouping-beats.texidoc
+Documentation/de/texidocs/guitar-strum-rhythms.texidoc
+Documentation/de/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc
+Documentation/de/texidocs/hymn-template.texidoc
+Documentation/de/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc
+Documentation/de/texidocs/inserting-a-caesura.texidoc
+Documentation/de/texidocs/isolated-percent-repeats.texidoc
+Documentation/de/texidocs/jazz-combo-template.texidoc
+Documentation/de/texidocs/lyrics-alignment.texidoc
+Documentation/de/texidocs/lyrics-old-spacing-settings.texidoc
+Documentation/de/texidocs/makam-example.texidoc
+Documentation/de/texidocs/making-slurs-with-complex-dash-structure.texidoc
+Documentation/de/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc
+Documentation/de/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc
+Documentation/de/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc
+Documentation/de/texidocs/multi-measure-rest-markup.texidoc
+Documentation/de/texidocs/nesting-staves.texidoc
+Documentation/de/texidocs/non-default-tuplet-numbers.texidoc
+Documentation/de/texidocs/non-traditional-key-signatures.texidoc
+Documentation/de/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc
+Documentation/de/texidocs/open-string-harmonics-in-tablature.texidoc
+Documentation/de/texidocs/orchestra,-choir-and-piano-template.texidoc
+Documentation/de/texidocs/ottava-text.texidoc
+Documentation/de/texidocs/partcombine-and-autobeamoff.texidoc
+Documentation/de/texidocs/percent-repeat-count-visibility.texidoc
+Documentation/de/texidocs/percent-repeat-counter.texidoc
+Documentation/de/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc
+Documentation/de/texidocs/piano-template-simple.texidoc
+Documentation/de/texidocs/piano-template-with-centered-dynamics.texidoc
+Documentation/de/texidocs/piano-template-with-centered-lyrics.texidoc
+Documentation/de/texidocs/piano-template-with-melody-and-lyrics.texidoc
+Documentation/de/texidocs/placement-of-right-hand-fingerings.texidoc
+Documentation/de/texidocs/polyphony-in-tablature.texidoc
+Documentation/de/texidocs/positioning-grace-notes-with-floating-space.texidoc
+Documentation/de/texidocs/positioning-multi-measure-rests.texidoc
+Documentation/de/texidocs/positioning-text-markups-inside-slurs.texidoc
+Documentation/de/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc
+Documentation/de/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc
+Documentation/de/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc
+Documentation/de/texidocs/printing-bar-numbers-at-regular-intervals.texidoc
+Documentation/de/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc
+Documentation/de/texidocs/printing-hairpins-using-al-niente-notation.texidoc
+Documentation/de/texidocs/printing-marks-at-the-end-of-a-line-or-a-score.texidoc
+Documentation/de/texidocs/printing-marks-on-every-staff.texidoc
+Documentation/de/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc
+Documentation/de/texidocs/printing-the-bar-number-for-the-first-measure.texidoc
+Documentation/de/texidocs/quoting-another-voice-with-transposition.texidoc
+Documentation/de/texidocs/quoting-another-voice.texidoc
+Documentation/de/texidocs/redefining-grace-note-global-defaults.texidoc
+Documentation/de/texidocs/removing-bar-numbers-from-a-score.texidoc
+Documentation/de/texidocs/removing-the-first-empty-line.texidoc
+Documentation/de/texidocs/rest-styles.texidoc
+Documentation/de/texidocs/reverting-default-beam-endings.texidoc
+Documentation/de/texidocs/satb-choir-template---four-staves.texidoc
+Documentation/de/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc
+Documentation/de/texidocs/setting-the-minimum-length-of-hairpins.texidoc
+Documentation/de/texidocs/shortening-volta-brackets.texidoc
+Documentation/de/texidocs/showing-chords-at-changes.texidoc
+Documentation/de/texidocs/simple-lead-sheet.texidoc
+Documentation/de/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc
+Documentation/de/texidocs/single-staff-template-with-notes-and-chords.texidoc
+Documentation/de/texidocs/single-staff-template-with-notes-and-lyrics.texidoc
+Documentation/de/texidocs/single-staff-template-with-only-notes.texidoc
+Documentation/de/texidocs/slides-in-tablature.texidoc
+Documentation/de/texidocs/snap-pizzicato-bartok-pizzicato.texidoc
+Documentation/de/texidocs/specifying-context-with-beatgrouping.texidoc
+Documentation/de/texidocs/stand-alone-two-column-markup.texidoc
+Documentation/de/texidocs/stem-and-beam-behavior-in-tablature.texidoc
+Documentation/de/texidocs/strict-beat-beaming.texidoc
+Documentation/de/texidocs/string-quartet-template-simple.texidoc
+Documentation/de/texidocs/string-quartet-template-with-separate-parts.texidoc
+Documentation/de/texidocs/sub-dividing-beams.texidoc
+Documentation/de/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc
+Documentation/de/texidocs/tweaking-clef-properties.texidoc
+Documentation/de/texidocs/tweaking-grace-layout-within-music.texidoc
+Documentation/de/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc
+Documentation/de/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc
+Documentation/de/texidocs/using-beatlength-and-beatgrouping.texidoc
+Documentation/de/texidocs/using-double-slurs-for-legato-chords.texidoc
+Documentation/de/texidocs/using-ties-with-arpeggios.texidoc
+Documentation/de/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc
+Documentation/de/texidocs/vertically-aligning-ossias-and-lyrics.texidoc
+Documentation/de/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc
+Documentation/de/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc
+Documentation/de/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc
+Documentation/de/texidocs/vocal-ensemble-template.texidoc
+Documentation/de/texidocs/volta-below-chords.texidoc
+Documentation/de/texidocs/woodwind-diagrams-key-lists.texidoc
+Documentation/de/texidocs/woodwind-diagrams-listing.texidoc
+Documentation/de/translations.itexi
+Documentation/de/usage.tely
+Documentation/de/usage/external.itely
+Documentation/de/usage/lilypond-book.itely
+Documentation/de/usage/running.itely
+Documentation/de/usage/setup.itely
+Documentation/de/usage/suggestions.itely
+Documentation/de/usage/updating.itely
+Documentation/de/web.texi
+Documentation/de/web/community.itexi
+Documentation/de/web/download.itexi
+Documentation/de/web/introduction.itexi
+Documentation/de/web/manuals.itexi
+Documentation/es/GNUmakefile
+Documentation/es/changes.tely
+Documentation/es/essay.tely
+Documentation/es/essay/engraving.itely
+Documentation/es/essay/literature.itely
+Documentation/es/extending.tely
+Documentation/es/extending/programming-interface.itely
+Documentation/es/extending/scheme-tutorial.itely
+Documentation/es/included/generating-output.itexi
+Documentation/es/included/helpus.itexi
+Documentation/es/learning.tely
+Documentation/es/learning/common-notation.itely
+Documentation/es/learning/fundamental.itely
+Documentation/es/learning/preface.itely
+Documentation/es/learning/templates.itely
+Documentation/es/learning/tutorial.itely
+Documentation/es/learning/tweaks.itely
+Documentation/es/macros.itexi
+Documentation/es/notation.tely
+Documentation/es/notation/ancient.itely
+Documentation/es/notation/changing-defaults.itely
+Documentation/es/notation/cheatsheet.itely
+Documentation/es/notation/chords.itely
+Documentation/es/notation/contemporary.itely
+Documentation/es/notation/editorial.itely
+Documentation/es/notation/expressive.itely
+Documentation/es/notation/fretted-strings.itely
+Documentation/es/notation/input.itely
+Documentation/es/notation/keyboards.itely
+Documentation/es/notation/notation-appendices.itely
+Documentation/es/notation/notation.itely
+Documentation/es/notation/percussion.itely
+Documentation/es/notation/pitches.itely
+Documentation/es/notation/repeats.itely
+Documentation/es/notation/rhythms.itely
+Documentation/es/notation/simultaneous.itely
+Documentation/es/notation/spacing.itely
+Documentation/es/notation/specialist.itely
+Documentation/es/notation/staff.itely
+Documentation/es/notation/text.itely
+Documentation/es/notation/unfretted-strings.itely
+Documentation/es/notation/vocal.itely
+Documentation/es/notation/wind.itely
+Documentation/es/notation/world.itely
+Documentation/es/search-box.ihtml
+Documentation/es/texidocs/accordion-discant-symbols.texidoc
+Documentation/es/texidocs/accordion-registers.texidoc
+Documentation/es/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc
+Documentation/es/texidocs/adding-ambitus-per-voice.texidoc
+Documentation/es/texidocs/adding-an-extra-staff-at-a-line-break.texidoc
+Documentation/es/texidocs/adding-an-extra-staff.texidoc
+Documentation/es/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc
+Documentation/es/texidocs/adding-bar-lines-to-chordnames-context.texidoc
+Documentation/es/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc
+Documentation/es/texidocs/adding-drum-parts.texidoc
+Documentation/es/texidocs/adding-extra-fingering-with-scheme.texidoc
+Documentation/es/texidocs/adding-fingerings-to-a-score.texidoc
+Documentation/es/texidocs/adding-fingerings-to-tablatures.texidoc
+Documentation/es/texidocs/adding-indicators-to-staves-which-get-split-after-a-break.texidoc
+Documentation/es/texidocs/adding-links-to-objects.texidoc
+Documentation/es/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc
+Documentation/es/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc
+Documentation/es/texidocs/adding-the-current-date-to-a-score.texidoc
+Documentation/es/texidocs/adding-timing-marks-to-long-glissandi.texidoc
+Documentation/es/texidocs/adding-volta-brackets-to-additional-staves.texidoc
+Documentation/es/texidocs/additional-voices-to-avoid-collisions.texidoc
+Documentation/es/texidocs/adjusting-grace-note-spacing.texidoc
+Documentation/es/texidocs/adjusting-lyrics-vertical-spacing.texidoc
+Documentation/es/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc
+Documentation/es/texidocs/aligning-and-centering-instrument-names.texidoc
+Documentation/es/texidocs/aligning-bar-numbers.texidoc
+Documentation/es/texidocs/aligning-objects-created-with-the--mark-command.texidoc
+Documentation/es/texidocs/aligning-syllables-with-melisma.texidoc
+Documentation/es/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc
+Documentation/es/texidocs/altering-the-length-of-beamed-stems.texidoc
+Documentation/es/texidocs/alternative-bar-numbering.texidoc
+Documentation/es/texidocs/alternative-breve-notes.texidoc
+Documentation/es/texidocs/ambitus-with-multiple-voices.texidoc
+Documentation/es/texidocs/ambitus.texidoc
+Documentation/es/texidocs/analysis-brackets-above-the-staff.texidoc
+Documentation/es/texidocs/ancient-fonts.texidoc
+Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc
+Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc
+Documentation/es/texidocs/ancient-time-signatures.texidoc
+Documentation/es/texidocs/anglican-psalm-template.texidoc
+Documentation/es/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc
+Documentation/es/texidocs/arabic-improvisation.texidoc
+Documentation/es/texidocs/asymmetric-slurs.texidoc
+Documentation/es/texidocs/automatic-beam-subdivisions.texidoc
+Documentation/es/texidocs/automatically-change-durations.texidoc
+Documentation/es/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc
+Documentation/es/texidocs/avoiding-collisions-with-chord-fingerings.texidoc
+Documentation/es/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc
+Documentation/es/texidocs/beam-endings-in-score-context.texidoc
+Documentation/es/texidocs/beam-grouping-in-7-8-time.texidoc
+Documentation/es/texidocs/beams-across-line-breaks.texidoc
+Documentation/es/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc
+Documentation/es/texidocs/book-parts.texidoc
+Documentation/es/texidocs/breathing-signs.texidoc
+Documentation/es/texidocs/broken-crescendo-hairpin.texidoc
+Documentation/es/texidocs/caesura-railtracks-with-fermata.texidoc
+Documentation/es/texidocs/center-text-below-hairpin-dynamics.texidoc
+Documentation/es/texidocs/centered-measure-numbers.texidoc
+Documentation/es/texidocs/centering-markup-on-note-heads-automatically.texidoc
+Documentation/es/texidocs/changing--flageolet-mark-size.texidoc
+Documentation/es/texidocs/changing-a-single-notes-size-in-a-chord.texidoc
+Documentation/es/texidocs/changing-beam-knee-gap.texidoc
+Documentation/es/texidocs/changing-chord-separator.texidoc
+Documentation/es/texidocs/changing-form-of-multi-measure-rests.texidoc
+Documentation/es/texidocs/changing-fret-orientations.texidoc
+Documentation/es/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc
+Documentation/es/texidocs/changing-partcombine-texts.texidoc
+Documentation/es/texidocs/changing-properties-for-individual-grobs.texidoc
+Documentation/es/texidocs/changing-stanza-fonts.texidoc
+Documentation/es/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc
+Documentation/es/texidocs/changing-the-ambitus-gap.texidoc
+Documentation/es/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc
+Documentation/es/texidocs/changing-the-breath-mark-symbol.texidoc
+Documentation/es/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc
+Documentation/es/texidocs/changing-the-default-text-font-family.texidoc
+Documentation/es/texidocs/changing-the-interval-of-lines-on-the-stave.texidoc
+Documentation/es/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc
+Documentation/es/texidocs/changing-the-number-of-lines-in-a-staff.texidoc
+Documentation/es/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc
+Documentation/es/texidocs/changing-the-size-of-woodwind-diagrams.texidoc
+Documentation/es/texidocs/changing-the-staff-size.texidoc
+Documentation/es/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc
+Documentation/es/texidocs/changing-the-text-for-sustain-markings.texidoc
+Documentation/es/texidocs/changing-the-tuplet-number.texidoc
+Documentation/es/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc
+Documentation/es/texidocs/chant-or-psalms-notation.texidoc
+Documentation/es/texidocs/chord-glissando-in-tablature.texidoc
+Documentation/es/texidocs/chord-name-exceptions.texidoc
+Documentation/es/texidocs/chord-name-major7.texidoc
+Documentation/es/texidocs/chordchanges-for-fretboards.texidoc
+Documentation/es/texidocs/clefs-can-be-transposed-by-arbitrary-amounts.texidoc
+Documentation/es/texidocs/clip-systems.texidoc
+Documentation/es/texidocs/clusters.texidoc
+Documentation/es/texidocs/coloring-notes-depending-on-their-pitch.texidoc
+Documentation/es/texidocs/combining-dynamics-with-markup-texts.texidoc
+Documentation/es/texidocs/combining-two-parts-on-the-same-staff.texidoc
+Documentation/es/texidocs/compound-time-signatures.texidoc
+Documentation/es/texidocs/conducting-signs,-measure-grouping-signs.texidoc
+Documentation/es/texidocs/consistently-left-aligned-bar-numbers.texidoc
+Documentation/es/texidocs/contemporary-glissando.texidoc
+Documentation/es/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc
+Documentation/es/texidocs/controlling-the-placement-of-chord-fingerings.texidoc
+Documentation/es/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc
+Documentation/es/texidocs/controlling-tuplet-bracket-visibility.texidoc
+Documentation/es/texidocs/creating-a-delayed-turn.texidoc
+Documentation/es/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc
+Documentation/es/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc
+Documentation/es/texidocs/creating-blank-staves.texidoc
+Documentation/es/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc
+Documentation/es/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc
+Documentation/es/texidocs/creating-double-digit-fingerings.texidoc
+Documentation/es/texidocs/creating-metronome-marks-in-markup-mode.texidoc
+Documentation/es/texidocs/creating-real-parenthesized-dynamics.texidoc
+Documentation/es/texidocs/creating-simultaneous-rehearsal-marks.texidoc
+Documentation/es/texidocs/creating-slurs-across-voices.texidoc
+Documentation/es/texidocs/creating-text-spanners.texidoc
+Documentation/es/texidocs/cross-staff-stems.texidoc
+Documentation/es/texidocs/cross-staff-tremolos.texidoc
+Documentation/es/texidocs/custodes.texidoc
+Documentation/es/texidocs/customizing-fretboard-fret-diagrams.texidoc
+Documentation/es/texidocs/customizing-markup-fret-diagrams.texidoc
+Documentation/es/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc
+Documentation/es/texidocs/defining-an-engraver-in-scheme--ambitus-engraver.texidoc
+Documentation/es/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc
+Documentation/es/texidocs/demo-midiinstruments.texidoc
+Documentation/es/texidocs/demonstrating-all-headers.texidoc
+Documentation/es/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc
+Documentation/es/texidocs/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.texidoc
+Documentation/es/texidocs/displaying-complex-chords.texidoc
+Documentation/es/texidocs/displaying-grob-ancestry.texidoc
+Documentation/es/texidocs/dotted-harmonics.texidoc
+Documentation/es/texidocs/double-glissando.texidoc
+Documentation/es/texidocs/drawing-boxes-around-grobs.texidoc
+Documentation/es/texidocs/drawing-circles-around-note-heads.texidoc
+Documentation/es/texidocs/drawing-circles-around-various-objects.texidoc
+Documentation/es/texidocs/dynamics-custom-text-spanner-postfix.texidoc
+Documentation/es/texidocs/dynamics-text-spanner-postfix.texidoc
+Documentation/es/texidocs/embedding-native-postscript-in-a--markup-block.texidoc
+Documentation/es/texidocs/engravers-one-by-one.texidoc
+Documentation/es/texidocs/engraving-ties-manually.texidoc
+Documentation/es/texidocs/engraving-tremolos-with-floating-beams.texidoc
+Documentation/es/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc
+Documentation/es/texidocs/extending-glissandi-across-repeats.texidoc
+Documentation/es/texidocs/faking-a-hammer-in-tablatures.texidoc
+Documentation/es/texidocs/fine-tuning-pedal-brackets.texidoc
+Documentation/es/texidocs/fingering-symbols-for-wind-instruments.texidoc
+Documentation/es/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc
+Documentation/es/texidocs/flamenco-notation.texidoc
+Documentation/es/texidocs/flat-flags-and-beam-nibs.texidoc
+Documentation/es/texidocs/flute-slap-notation.texidoc
+Documentation/es/texidocs/forcing-a-clef-symbol-to-be-displayed.texidoc
+Documentation/es/texidocs/forcing-horizontal-shift-of-notes.texidoc
+Documentation/es/texidocs/forcing-hyphens-to-be-shown.texidoc
+Documentation/es/texidocs/forcing-measure-width-to-adapt-to-metronomemarks-width.texidoc
+Documentation/es/texidocs/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.texidoc
+Documentation/es/texidocs/formatting-lyrics-syllables.texidoc
+Documentation/es/texidocs/fret-diagrams-explained-and-developed.texidoc
+Documentation/es/texidocs/fretboards-alternate-tables.texidoc
+Documentation/es/texidocs/fretted-string-harmonics-in-tablature.texidoc
+Documentation/es/texidocs/generating-custom-flags.texidoc
+Documentation/es/texidocs/generating-random-notes.texidoc
+Documentation/es/texidocs/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.texidoc
+Documentation/es/texidocs/glissandi-can-skip-grobs.texidoc
+Documentation/es/texidocs/graphical-and-text-woodwind-diagrams.texidoc
+Documentation/es/texidocs/grid-lines--changing-their-appearance.texidoc
+Documentation/es/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc
+Documentation/es/texidocs/guitar-slides.texidoc
+Documentation/es/texidocs/guitar-strum-rhythms.texidoc
+Documentation/es/texidocs/hairpins-with-different-line-styles.texidoc
+Documentation/es/texidocs/heavily-customized-polymetric-time-signatures.texidoc
+Documentation/es/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc
+Documentation/es/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc
+Documentation/es/texidocs/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.texidoc
+Documentation/es/texidocs/how-to-change-fret-diagram-position.texidoc
+Documentation/es/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.texidoc
+Documentation/es/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.texidoc
+Documentation/es/texidocs/how-to-put-ties-between-syllables-in-lyrics.texidoc
+Documentation/es/texidocs/hymn-template.texidoc
+Documentation/es/texidocs/incipit.texidoc
+Documentation/es/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc
+Documentation/es/texidocs/inserting-a-caesura.texidoc
+Documentation/es/texidocs/inserting-score-fragments-above-a-staff,-as-markups.texidoc
+Documentation/es/texidocs/isolated-percent-repeats.texidoc
+Documentation/es/texidocs/jazz-combo-template.texidoc
+Documentation/es/texidocs/keep-change-clefs-full-sized.texidoc
+Documentation/es/texidocs/laissez-vibrer-ties.texidoc
+Documentation/es/texidocs/letter-tablature-formatting.texidoc
+Documentation/es/texidocs/line-arrows.texidoc
+Documentation/es/texidocs/lyrics-alignment.texidoc
+Documentation/es/texidocs/makam-example.texidoc
+Documentation/es/texidocs/making-an-object-invisible-with-the-transparent-property.texidoc
+Documentation/es/texidocs/making-glissandi-breakable.texidoc
+Documentation/es/texidocs/making-slurs-with-complex-dash-structure.texidoc
+Documentation/es/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc
+Documentation/es/texidocs/manually-break-figured-bass-extenders-for-only-some-numbers.texidoc
+Documentation/es/texidocs/manually-controlling-beam-positions.texidoc
+Documentation/es/texidocs/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.texidoc
+Documentation/es/texidocs/markup-lines.texidoc
+Documentation/es/texidocs/measure-counter.texidoc
+Documentation/es/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc
+Documentation/es/texidocs/merging-multi-measure-rests-in-a-polyphonic-part.texidoc
+Documentation/es/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc
+Documentation/es/texidocs/modifying-tuplet-bracket-length.texidoc
+Documentation/es/texidocs/moving-dotted-notes-in-polyphony.texidoc
+Documentation/es/texidocs/moving-slur-positions-vertically.texidoc
+Documentation/es/texidocs/multi-measure-rest-markup.texidoc
+Documentation/es/texidocs/nesting-staves.texidoc
+Documentation/es/texidocs/non-default-tuplet-numbers.texidoc
+Documentation/es/texidocs/non-traditional-key-signatures.texidoc
+Documentation/es/texidocs/numbering-groups-of-measures.texidoc
+Documentation/es/texidocs/numbers-as-easy-note-heads.texidoc
+Documentation/es/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc
+Documentation/es/texidocs/open-string-harmonics-in-tablature.texidoc
+Documentation/es/texidocs/orchestra,-choir-and-piano-template.texidoc
+Documentation/es/texidocs/ottava-text.texidoc
+Documentation/es/texidocs/outputting-the-version-number.texidoc
+Documentation/es/texidocs/overriding-articulations-of-destinct-type.texidoc
+Documentation/es/texidocs/page-label.texidoc
+Documentation/es/texidocs/partcombine-and-autobeamoff.texidoc
+Documentation/es/texidocs/percent-repeat-count-visibility.texidoc
+Documentation/es/texidocs/percent-repeat-counter.texidoc
+Documentation/es/texidocs/percussion-beaters.texidoc
+Documentation/es/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc
+Documentation/es/texidocs/piano-template-simple.texidoc
+Documentation/es/texidocs/piano-template-with-centered-lyrics.texidoc
+Documentation/es/texidocs/piano-template-with-melody-and-lyrics.texidoc
+Documentation/es/texidocs/placement-of-right-hand-fingerings.texidoc
+Documentation/es/texidocs/polyphony-in-tablature.texidoc
+Documentation/es/texidocs/positioning-arpeggios.texidoc
+Documentation/es/texidocs/positioning-fingering-indications-precisely.texidoc
+Documentation/es/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc
+Documentation/es/texidocs/positioning-grace-notes-with-floating-space.texidoc
+Documentation/es/texidocs/positioning-multi-measure-rests.texidoc
+Documentation/es/texidocs/positioning-segno-and-coda-with-line-break.texidoc
+Documentation/es/texidocs/positioning-text-markups-inside-slurs.texidoc
+Documentation/es/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc
+Documentation/es/texidocs/preventing-final-mark-from-removing-final-tuplet.texidoc
+Documentation/es/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc
+Documentation/es/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc
+Documentation/es/texidocs/printing-bar-numbers-at-regular-intervals.texidoc
+Documentation/es/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc
+Documentation/es/texidocs/printing-hairpins-in-various-styles.texidoc
+Documentation/es/texidocs/printing-hairpins-using-al-niente-notation.texidoc
+Documentation/es/texidocs/printing-marks-at-the-end-of-a-line.texidoc
+Documentation/es/texidocs/printing-marks-on-every-staff.texidoc
+Documentation/es/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc
+Documentation/es/texidocs/printing-music-with-different-time-signatures.texidoc
+Documentation/es/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc
+Documentation/es/texidocs/printing-text-from-right-to-left.texidoc
+Documentation/es/texidocs/printing-the-bar-number-for-the-first-measure.texidoc
+Documentation/es/texidocs/proportional-strict-notespacing.texidoc
+Documentation/es/texidocs/putting-lyrics-inside-the-staff.texidoc
+Documentation/es/texidocs/quoting-another-voice-with-transposition.texidoc
+Documentation/es/texidocs/quoting-another-voice.texidoc
+Documentation/es/texidocs/recorder-fingering-chart.texidoc
+Documentation/es/texidocs/redefining-grace-note-global-defaults.texidoc
+Documentation/es/texidocs/removing-bar-numbers-from-a-score.texidoc
+Documentation/es/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc
+Documentation/es/texidocs/removing-the-first-empty-line.texidoc
+Documentation/es/texidocs/rest-styles.texidoc
+Documentation/es/texidocs/reverting-default-beam-endings.texidoc
+Documentation/es/texidocs/rhythmic-slashes.texidoc
+Documentation/es/texidocs/satb-choir-template---four-staves.texidoc
+Documentation/es/texidocs/score-for-diatonic-accordion.texidoc
+Documentation/es/texidocs/script-chart.texidoc
+Documentation/es/texidocs/separating-key-cancellations-from-key-signature-changes.texidoc
+Documentation/es/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc
+Documentation/es/texidocs/setting-system-separators.texidoc
+Documentation/es/texidocs/setting-the-double-repeat-default-for-volte.texidoc
+Documentation/es/texidocs/setting-the-minimum-length-of-hairpins.texidoc
+Documentation/es/texidocs/shortening-volta-brackets.texidoc
+Documentation/es/texidocs/showing-chords-at-changes.texidoc
+Documentation/es/texidocs/showing-the-same-articulation-above-and-below-a-note-or-chord.texidoc
+Documentation/es/texidocs/simple-lead-sheet.texidoc
+Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc
+Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc
+Documentation/es/texidocs/single-staff-template-with-notes-and-chords.texidoc
+Documentation/es/texidocs/single-staff-template-with-notes-and-lyrics.texidoc
+Documentation/es/texidocs/single-staff-template-with-only-notes.texidoc
+Documentation/es/texidocs/skips-in-lyric-mode-2.texidoc
+Documentation/es/texidocs/skips-in-lyric-mode.texidoc
+Documentation/es/texidocs/slides-in-tablature.texidoc
+Documentation/es/texidocs/snap-pizzicato-or-bartok-pizzicato.texidoc
+Documentation/es/texidocs/stand-alone-two-column-markup.texidoc
+Documentation/es/texidocs/stem-and-beam-behavior-in-tablature.texidoc
+Documentation/es/texidocs/stemlets.texidoc
+Documentation/es/texidocs/strict-beat-beaming.texidoc
+Documentation/es/texidocs/string-number-extender-lines.texidoc
+Documentation/es/texidocs/string-quartet-template-simple.texidoc
+Documentation/es/texidocs/string-quartet-template-with-separate-parts.texidoc
+Documentation/es/texidocs/subdividing-beams.texidoc
+Documentation/es/texidocs/suppressing-warnings-for-clashing-note-columns.texidoc
+Documentation/es/texidocs/table-of-contents.texidoc
+Documentation/es/texidocs/three-sided-box.texidoc
+Documentation/es/texidocs/tick-bar-lines.texidoc
+Documentation/es/texidocs/time-signature-in-parentheses---method-3.texidoc
+Documentation/es/texidocs/time-signature-in-parentheses.texidoc
+Documentation/es/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc
+Documentation/es/texidocs/transcription-of-ancient-music-with-incipit.texidoc
+Documentation/es/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc
+Documentation/es/texidocs/tweaking-clef-properties.texidoc
+Documentation/es/texidocs/tweaking-grace-layout-within-music.texidoc
+Documentation/es/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc
+Documentation/es/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc
+Documentation/es/texidocs/using-alternative-flag-styles.texidoc
+Documentation/es/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc
+Documentation/es/texidocs/using-autochange-with-more-than-one-voice.texidoc
+Documentation/es/texidocs/using-double-slurs-for-legato-chords.texidoc
+Documentation/es/texidocs/using-grace-note-slashes-with-normal-heads.texidoc
+Documentation/es/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc
+Documentation/es/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc
+Documentation/es/texidocs/using-the--tweak-command-to-tweak-individual-grobs.texidoc
+Documentation/es/texidocs/using-the-whiteout-property.texidoc
+Documentation/es/texidocs/using-ties-with-arpeggios.texidoc
+Documentation/es/texidocs/utf-8.texidoc
+Documentation/es/texidocs/vertical-aligned-staffgroups-without-connecting-systemstartbar.texidoc
+Documentation/es/texidocs/vertical-line-as-a-baroque-articulation-mark.texidoc
+Documentation/es/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc
+Documentation/es/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc
+Documentation/es/texidocs/vertically-aligning-ossias-and-lyrics.texidoc
+Documentation/es/texidocs/vertically-centered-common-lyrics.texidoc
+Documentation/es/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc
+Documentation/es/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc
+Documentation/es/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc
+Documentation/es/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc
+Documentation/es/texidocs/vocal-ensemble-template.texidoc
+Documentation/es/texidocs/volta-below-chords.texidoc
+Documentation/es/texidocs/volta-multi-staff.texidoc
+Documentation/es/texidocs/volta-text-markup-using-repeatcommands.texidoc
+Documentation/es/texidocs/woodwind-diagrams-key-lists.texidoc
+Documentation/es/texidocs/woodwind-diagrams-listing.texidoc
+Documentation/es/translations.itexi
+Documentation/es/usage.tely
+Documentation/es/usage/external.itely
+Documentation/es/usage/lilypond-book.itely
+Documentation/es/usage/running.itely
+Documentation/es/usage/suggestions.itely
+Documentation/es/usage/updating.itely
+Documentation/es/web.texi
+Documentation/es/web/community.itexi
+Documentation/es/web/download.itexi
+Documentation/es/web/introduction.itexi
+Documentation/es/web/manuals.itexi
+Documentation/es/web/news-front.itexi
+Documentation/es/web/news.itexi
+Documentation/essay.tely
+Documentation/essay/colorado.bib
+Documentation/essay/computer-notation.bib
+Documentation/essay/engraving.itely
+Documentation/essay/engravingbib.bib
+Documentation/essay/literature.itely
+Documentation/extending.tely
+Documentation/extending/programming-interface.itely
+Documentation/extending/scheme-tutorial.itely
+Documentation/fdl.itexi
+Documentation/fr/GNUmakefile
+Documentation/fr/essay.tely
+Documentation/fr/essay/engraving.itely
+Documentation/fr/essay/literature.itely
+Documentation/fr/extending.tely
+Documentation/fr/extending/programming-interface.itely
+Documentation/fr/extending/scheme-tutorial.itely
+Documentation/fr/included/generating-output.itexi
+Documentation/fr/included/helpus.itexi
+Documentation/fr/learning.tely
+Documentation/fr/learning/common-notation.itely
+Documentation/fr/learning/fundamental.itely
+Documentation/fr/learning/preface.itely
+Documentation/fr/learning/templates.itely
+Documentation/fr/learning/tutorial.itely
+Documentation/fr/learning/tweaks.itely
+Documentation/fr/macros.itexi
+Documentation/fr/notation.tely
+Documentation/fr/notation/ancient.itely
+Documentation/fr/notation/changing-defaults.itely
+Documentation/fr/notation/cheatsheet.itely
+Documentation/fr/notation/chords.itely
+Documentation/fr/notation/contemporary.itely
+Documentation/fr/notation/editorial.itely
+Documentation/fr/notation/expressive.itely
+Documentation/fr/notation/fretted-strings.itely
+Documentation/fr/notation/input.itely
+Documentation/fr/notation/keyboards.itely
+Documentation/fr/notation/notation-appendices.itely
+Documentation/fr/notation/notation.itely
+Documentation/fr/notation/percussion.itely
+Documentation/fr/notation/pitches.itely
+Documentation/fr/notation/repeats.itely
+Documentation/fr/notation/rhythms.itely
+Documentation/fr/notation/simultaneous.itely
+Documentation/fr/notation/spacing.itely
+Documentation/fr/notation/specialist.itely
+Documentation/fr/notation/staff.itely
+Documentation/fr/notation/text.itely
+Documentation/fr/notation/unfretted-strings.itely
+Documentation/fr/notation/vocal.itely
+Documentation/fr/notation/wind.itely
+Documentation/fr/notation/world.itely
+Documentation/fr/search-box.ihtml
+Documentation/fr/texidocs/accordion-discant-symbols.texidoc
+Documentation/fr/texidocs/accordion-registers.texidoc
+Documentation/fr/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc
+Documentation/fr/texidocs/adding-ambitus-per-voice.texidoc
+Documentation/fr/texidocs/adding-an-extra-staff-at-a-line-break.texidoc
+Documentation/fr/texidocs/adding-an-extra-staff.texidoc
+Documentation/fr/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc
+Documentation/fr/texidocs/adding-bar-lines-to-chordnames-context.texidoc
+Documentation/fr/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc
+Documentation/fr/texidocs/adding-drum-parts.texidoc
+Documentation/fr/texidocs/adding-extra-fingering-with-scheme.texidoc
+Documentation/fr/texidocs/adding-fingerings-to-a-score.texidoc
+Documentation/fr/texidocs/adding-fingerings-to-tablatures.texidoc
+Documentation/fr/texidocs/adding-indicators-to-staves-which-get-split-after-a-break.texidoc
+Documentation/fr/texidocs/adding-links-to-objects.texidoc
+Documentation/fr/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc
+Documentation/fr/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc
+Documentation/fr/texidocs/adding-the-current-date-to-a-score.texidoc
+Documentation/fr/texidocs/adding-timing-marks-to-long-glissandi.texidoc
+Documentation/fr/texidocs/adding-volta-brackets-to-additional-staves.texidoc
+Documentation/fr/texidocs/additional-voices-to-avoid-collisions.texidoc
+Documentation/fr/texidocs/adjusting-grace-note-spacing.texidoc
+Documentation/fr/texidocs/adjusting-lyrics-vertical-spacing.texidoc
+Documentation/fr/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc
+Documentation/fr/texidocs/aligning-and-centering-instrument-names.texidoc
+Documentation/fr/texidocs/aligning-bar-numbers.texidoc
+Documentation/fr/texidocs/aligning-objects-created-with-the--mark-command.texidoc
+Documentation/fr/texidocs/aligning-syllables-with-melisma.texidoc
+Documentation/fr/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc
+Documentation/fr/texidocs/altering-the-length-of-beamed-stems.texidoc
+Documentation/fr/texidocs/alternative-bar-numbering.texidoc
+Documentation/fr/texidocs/alternative-breve-notes.texidoc
+Documentation/fr/texidocs/ambitus-with-multiple-voices.texidoc
+Documentation/fr/texidocs/ambitus.texidoc
+Documentation/fr/texidocs/analysis-brackets-above-the-staff.texidoc
+Documentation/fr/texidocs/ancient-fonts.texidoc
+Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc
+Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc
+Documentation/fr/texidocs/ancient-time-signatures.texidoc
+Documentation/fr/texidocs/anglican-psalm-template.texidoc
+Documentation/fr/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc
+Documentation/fr/texidocs/arabic-improvisation.texidoc
+Documentation/fr/texidocs/asymmetric-slurs.texidoc
+Documentation/fr/texidocs/automatic-beam-subdivisions.texidoc
+Documentation/fr/texidocs/automatically-change-durations.texidoc
+Documentation/fr/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc
+Documentation/fr/texidocs/avoiding-collisions-with-chord-fingerings.texidoc
+Documentation/fr/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc
+Documentation/fr/texidocs/beam-endings-in-score-context.texidoc
+Documentation/fr/texidocs/beam-grouping-in-7-8-time.texidoc
+Documentation/fr/texidocs/beams-across-line-breaks.texidoc
+Documentation/fr/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc
+Documentation/fr/texidocs/book-parts.texidoc
+Documentation/fr/texidocs/breathing-signs.texidoc
+Documentation/fr/texidocs/broken-crescendo-hairpin.texidoc
+Documentation/fr/texidocs/caesura-railtracks-with-fermata.texidoc
+Documentation/fr/texidocs/center-text-below-hairpin-dynamics.texidoc
+Documentation/fr/texidocs/centering-markup-on-note-heads-automatically.texidoc
+Documentation/fr/texidocs/changing--flageolet-mark-size.texidoc
+Documentation/fr/texidocs/changing-a-single-notes-size-in-a-chord.texidoc
+Documentation/fr/texidocs/changing-beam-knee-gap.texidoc
+Documentation/fr/texidocs/changing-chord-separator.texidoc
+Documentation/fr/texidocs/changing-form-of-multi-measure-rests.texidoc
+Documentation/fr/texidocs/changing-fret-orientations.texidoc
+Documentation/fr/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc
+Documentation/fr/texidocs/changing-partcombine-texts.texidoc
+Documentation/fr/texidocs/changing-properties-for-individual-grobs.texidoc
+Documentation/fr/texidocs/changing-stanza-fonts.texidoc
+Documentation/fr/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc
+Documentation/fr/texidocs/changing-the-ambitus-gap.texidoc
+Documentation/fr/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc
+Documentation/fr/texidocs/changing-the-breath-mark-symbol.texidoc
+Documentation/fr/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc
+Documentation/fr/texidocs/changing-the-default-text-font-family.texidoc
+Documentation/fr/texidocs/changing-the-interval-of-lines-on-the-stave.texidoc
+Documentation/fr/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc
+Documentation/fr/texidocs/changing-the-number-of-lines-in-a-staff.texidoc
+Documentation/fr/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc
+Documentation/fr/texidocs/changing-the-size-of-woodwind-diagrams.texidoc
+Documentation/fr/texidocs/changing-the-staff-size.texidoc
+Documentation/fr/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc
+Documentation/fr/texidocs/changing-the-text-for-sustain-markings.texidoc
+Documentation/fr/texidocs/changing-the-tuplet-number.texidoc
+Documentation/fr/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc
+Documentation/fr/texidocs/chant-or-psalms-notation.texidoc
+Documentation/fr/texidocs/chord-glissando-in-tablature.texidoc
+Documentation/fr/texidocs/chord-name-exceptions.texidoc
+Documentation/fr/texidocs/chord-name-major7.texidoc
+Documentation/fr/texidocs/chordchanges-for-fretboards.texidoc
+Documentation/fr/texidocs/clefs-can-be-transposed-by-arbitrary-amounts.texidoc
+Documentation/fr/texidocs/clip-systems.texidoc
+Documentation/fr/texidocs/clusters.texidoc
+Documentation/fr/texidocs/coloring-notes-depending-on-their-pitch.texidoc
+Documentation/fr/texidocs/combining-dynamics-with-markup-texts.texidoc
+Documentation/fr/texidocs/combining-two-parts-on-the-same-staff.texidoc
+Documentation/fr/texidocs/compound-time-signatures.texidoc
+Documentation/fr/texidocs/conducting-signs,-measure-grouping-signs.texidoc
+Documentation/fr/texidocs/consistently-left-aligned-bar-numbers.texidoc
+Documentation/fr/texidocs/contemporary-glissando.texidoc
+Documentation/fr/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc
+Documentation/fr/texidocs/controlling-the-placement-of-chord-fingerings.texidoc
+Documentation/fr/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc
+Documentation/fr/texidocs/controlling-tuplet-bracket-visibility.texidoc
+Documentation/fr/texidocs/creating-a-delayed-turn.texidoc
+Documentation/fr/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc
+Documentation/fr/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc
+Documentation/fr/texidocs/creating-blank-staves.texidoc
+Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc
+Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc
+Documentation/fr/texidocs/creating-double-digit-fingerings.texidoc
+Documentation/fr/texidocs/creating-metronome-marks-in-markup-mode.texidoc
+Documentation/fr/texidocs/creating-real-parenthesized-dynamics.texidoc
+Documentation/fr/texidocs/creating-simultaneous-rehearsal-marks.texidoc
+Documentation/fr/texidocs/creating-slurs-across-voices.texidoc
+Documentation/fr/texidocs/creating-text-spanners.texidoc
+Documentation/fr/texidocs/cross-staff-chords---beaming-problems-workaround.texidoc
+Documentation/fr/texidocs/cross-staff-stems.texidoc
+Documentation/fr/texidocs/cross-staff-tremolos.texidoc
+Documentation/fr/texidocs/custodes.texidoc
+Documentation/fr/texidocs/customizing-fretboard-fret-diagrams.texidoc
+Documentation/fr/texidocs/customizing-markup-fret-diagrams.texidoc
+Documentation/fr/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc
+Documentation/fr/texidocs/defining-an-engraver-in-scheme--ambitus-engraver.texidoc
+Documentation/fr/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc
+Documentation/fr/texidocs/demo-midiinstruments.texidoc
+Documentation/fr/texidocs/demonstrating-all-headers.texidoc
+Documentation/fr/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc
+Documentation/fr/texidocs/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.texidoc
+Documentation/fr/texidocs/displaying-complex-chords.texidoc
+Documentation/fr/texidocs/displaying-grob-ancestry.texidoc
+Documentation/fr/texidocs/dotted-harmonics.texidoc
+Documentation/fr/texidocs/double-glissando.texidoc
+Documentation/fr/texidocs/drawing-boxes-around-grobs.texidoc
+Documentation/fr/texidocs/drawing-circles-around-note-heads.texidoc
+Documentation/fr/texidocs/drawing-circles-around-various-objects.texidoc
+Documentation/fr/texidocs/dynamics-custom-text-spanner-postfix.texidoc
+Documentation/fr/texidocs/dynamics-text-spanner-postfix.texidoc
+Documentation/fr/texidocs/embedding-native-postscript-in-a--markup-block.texidoc
+Documentation/fr/texidocs/engravers-one-by-one.texidoc
+Documentation/fr/texidocs/engraving-ties-manually.texidoc
+Documentation/fr/texidocs/engraving-tremolos-with-floating-beams.texidoc
+Documentation/fr/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc
+Documentation/fr/texidocs/extending-glissandi-across-repeats.texidoc
+Documentation/fr/texidocs/faking-a-hammer-in-tablatures.texidoc
+Documentation/fr/texidocs/fine-tuning-pedal-brackets.texidoc
+Documentation/fr/texidocs/fingering-symbols-for-wind-instruments.texidoc
+Documentation/fr/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc
+Documentation/fr/texidocs/flamenco-notation.texidoc
+Documentation/fr/texidocs/flat-flags-and-beam-nibs.texidoc
+Documentation/fr/texidocs/flute-slap-notation.texidoc
+Documentation/fr/texidocs/forcing-a-clef-symbol-to-be-displayed.texidoc
+Documentation/fr/texidocs/forcing-horizontal-shift-of-notes.texidoc
+Documentation/fr/texidocs/forcing-hyphens-to-be-shown.texidoc
+Documentation/fr/texidocs/forcing-measure-width-to-adapt-to-metronomemarks-width.texidoc
+Documentation/fr/texidocs/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.texidoc
+Documentation/fr/texidocs/formatting-lyrics-syllables.texidoc
+Documentation/fr/texidocs/fret-diagrams-explained-and-developed.texidoc
+Documentation/fr/texidocs/fretboards-alternate-tables.texidoc
+Documentation/fr/texidocs/fretted-string-harmonics-in-tablature.texidoc
+Documentation/fr/texidocs/generating-custom-flags.texidoc
+Documentation/fr/texidocs/generating-random-notes.texidoc
+Documentation/fr/texidocs/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.texidoc
+Documentation/fr/texidocs/glissandi-can-skip-grobs.texidoc
+Documentation/fr/texidocs/graphical-and-text-woodwind-diagrams.texidoc
+Documentation/fr/texidocs/grid-lines--changing-their-appearance.texidoc
+Documentation/fr/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc
+Documentation/fr/texidocs/guitar-slides.texidoc
+Documentation/fr/texidocs/guitar-strum-rhythms.texidoc
+Documentation/fr/texidocs/hairpins-with-different-line-styles.texidoc
+Documentation/fr/texidocs/heavily-customized-polymetric-time-signatures.texidoc
+Documentation/fr/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc
+Documentation/fr/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc
+Documentation/fr/texidocs/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.texidoc
+Documentation/fr/texidocs/how-to-change-fret-diagram-position.texidoc
+Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.texidoc
+Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.texidoc
+Documentation/fr/texidocs/how-to-put-ties-between-syllables-in-lyrics.texidoc
+Documentation/fr/texidocs/hymn-template.texidoc
+Documentation/fr/texidocs/incipit.texidoc
+Documentation/fr/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc
+Documentation/fr/texidocs/inserting-a-caesura.texidoc
+Documentation/fr/texidocs/inserting-score-fragments-above-a-staff,-as-markups.texidoc
+Documentation/fr/texidocs/isolated-percent-repeats.texidoc
+Documentation/fr/texidocs/jazz-combo-template.texidoc
+Documentation/fr/texidocs/keep-change-clefs-full-sized.texidoc
+Documentation/fr/texidocs/laissez-vibrer-ties.texidoc
+Documentation/fr/texidocs/letter-tablature-formatting.texidoc
+Documentation/fr/texidocs/line-arrows.texidoc
+Documentation/fr/texidocs/lyrics-alignment.texidoc
+Documentation/fr/texidocs/makam-example.texidoc
+Documentation/fr/texidocs/making-an-object-invisible-with-the-transparent-property.texidoc
+Documentation/fr/texidocs/making-glissandi-breakable.texidoc
+Documentation/fr/texidocs/making-slurs-with-complex-dash-structure.texidoc
+Documentation/fr/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc
+Documentation/fr/texidocs/manually-break-figured-bass-extenders-for-only-some-numbers.texidoc
+Documentation/fr/texidocs/manually-controlling-beam-positions.texidoc
+Documentation/fr/texidocs/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.texidoc
+Documentation/fr/texidocs/markup-lines.texidoc
+Documentation/fr/texidocs/measure-counter.texidoc
+Documentation/fr/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc
+Documentation/fr/texidocs/merging-multi-measure-rests-in-a-polyphonic-part.texidoc
+Documentation/fr/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc
+Documentation/fr/texidocs/modifying-tuplet-bracket-length.texidoc
+Documentation/fr/texidocs/moving-dotted-notes-in-polyphony.texidoc
+Documentation/fr/texidocs/moving-slur-positions-vertically.texidoc
+Documentation/fr/texidocs/multi-measure-rest-markup.texidoc
+Documentation/fr/texidocs/nesting-staves.texidoc
+Documentation/fr/texidocs/non-default-tuplet-numbers.texidoc
+Documentation/fr/texidocs/non-traditional-key-signatures.texidoc
+Documentation/fr/texidocs/numbers-as-easy-note-heads.texidoc
+Documentation/fr/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc
+Documentation/fr/texidocs/open-string-harmonics-in-tablature.texidoc
+Documentation/fr/texidocs/orchestra,-choir-and-piano-template.texidoc
+Documentation/fr/texidocs/ottava-text.texidoc
+Documentation/fr/texidocs/outputting-the-version-number.texidoc
+Documentation/fr/texidocs/page-label.texidoc
+Documentation/fr/texidocs/partcombine-and-autobeamoff.texidoc
+Documentation/fr/texidocs/percent-repeat-count-visibility.texidoc
+Documentation/fr/texidocs/percent-repeat-counter.texidoc
+Documentation/fr/texidocs/percussion-beaters.texidoc
+Documentation/fr/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc
+Documentation/fr/texidocs/piano-template-simple.texidoc
+Documentation/fr/texidocs/piano-template-with-centered-lyrics.texidoc
+Documentation/fr/texidocs/piano-template-with-melody-and-lyrics.texidoc
+Documentation/fr/texidocs/placement-of-right-hand-fingerings.texidoc
+Documentation/fr/texidocs/polyphony-in-tablature.texidoc
+Documentation/fr/texidocs/positioning-arpeggios.texidoc
+Documentation/fr/texidocs/positioning-fingering-indications-precisely.texidoc
+Documentation/fr/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc
+Documentation/fr/texidocs/positioning-grace-notes-with-floating-space.texidoc
+Documentation/fr/texidocs/positioning-multi-measure-rests.texidoc
+Documentation/fr/texidocs/positioning-segno-and-coda-with-line-break.texidoc
+Documentation/fr/texidocs/positioning-text-markups-inside-slurs.texidoc
+Documentation/fr/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc
+Documentation/fr/texidocs/preventing-final-mark-from-removing-final-tuplet.texidoc
+Documentation/fr/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc
+Documentation/fr/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc
+Documentation/fr/texidocs/printing-bar-numbers-at-regular-intervals.texidoc
+Documentation/fr/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc
+Documentation/fr/texidocs/printing-hairpins-in-various-styles.texidoc
+Documentation/fr/texidocs/printing-hairpins-using-al-niente-notation.texidoc
+Documentation/fr/texidocs/printing-marks-at-the-end-of-a-line.texidoc
+Documentation/fr/texidocs/printing-marks-on-every-staff.texidoc
+Documentation/fr/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc
+Documentation/fr/texidocs/printing-music-with-different-time-signatures.texidoc
+Documentation/fr/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc
+Documentation/fr/texidocs/printing-text-from-right-to-left.texidoc
+Documentation/fr/texidocs/printing-the-bar-number-for-the-first-measure.texidoc
+Documentation/fr/texidocs/proportional-strict-notespacing.texidoc
+Documentation/fr/texidocs/putting-lyrics-inside-the-staff.texidoc
+Documentation/fr/texidocs/quoting-another-voice-with-transposition.texidoc
+Documentation/fr/texidocs/quoting-another-voice.texidoc
+Documentation/fr/texidocs/recorder-fingering-chart.texidoc
+Documentation/fr/texidocs/redefining-grace-note-global-defaults.texidoc
+Documentation/fr/texidocs/removing-bar-numbers-from-a-score.texidoc
+Documentation/fr/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc
+Documentation/fr/texidocs/removing-the-first-empty-line.texidoc
+Documentation/fr/texidocs/rest-styles.texidoc
+Documentation/fr/texidocs/reverting-default-beam-endings.texidoc
+Documentation/fr/texidocs/rhythmic-slashes.texidoc
+Documentation/fr/texidocs/satb-choir-template---four-staves.texidoc
+Documentation/fr/texidocs/screech-and-boink.texidoc
+Documentation/fr/texidocs/separating-key-cancellations-from-key-signature-changes.texidoc
+Documentation/fr/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc
+Documentation/fr/texidocs/setting-system-separators.texidoc
+Documentation/fr/texidocs/setting-the-double-repeat-default-for-volte.texidoc
+Documentation/fr/texidocs/setting-the-minimum-length-of-hairpins.texidoc
+Documentation/fr/texidocs/shortening-volta-brackets.texidoc
+Documentation/fr/texidocs/showing-chords-at-changes.texidoc
+Documentation/fr/texidocs/showing-the-same-articulation-above-and-below-a-note-or-chord.texidoc
+Documentation/fr/texidocs/simple-lead-sheet.texidoc
+Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc
+Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc
+Documentation/fr/texidocs/single-staff-template-with-notes-and-chords.texidoc
+Documentation/fr/texidocs/single-staff-template-with-notes-and-lyrics.texidoc
+Documentation/fr/texidocs/single-staff-template-with-only-notes.texidoc
+Documentation/fr/texidocs/skips-in-lyric-mode-2.texidoc
+Documentation/fr/texidocs/skips-in-lyric-mode.texidoc
+Documentation/fr/texidocs/slides-in-tablature.texidoc
+Documentation/fr/texidocs/snap-pizzicato-or-bartok-pizzicato.texidoc
+Documentation/fr/texidocs/specifying-context-with-beatgrouping.texidoc
+Documentation/fr/texidocs/stand-alone-two-column-markup.texidoc
+Documentation/fr/texidocs/stem-and-beam-behavior-in-tablature.texidoc
+Documentation/fr/texidocs/stem-cross-staff-engraver.texidoc
+Documentation/fr/texidocs/stemlets.texidoc
+Documentation/fr/texidocs/strict-beat-beaming.texidoc
+Documentation/fr/texidocs/string-number-extender-lines.texidoc
+Documentation/fr/texidocs/string-quartet-template-simple.texidoc
+Documentation/fr/texidocs/string-quartet-template-with-separate-parts.texidoc
+Documentation/fr/texidocs/subdividing-beams.texidoc
+Documentation/fr/texidocs/suppressing-warnings-for-clashing-note-columns.texidoc
+Documentation/fr/texidocs/table-of-contents.texidoc
+Documentation/fr/texidocs/three-sided-box.texidoc
+Documentation/fr/texidocs/tick-bar-lines.texidoc
+Documentation/fr/texidocs/time-signature-in-parentheses---method-3.texidoc
+Documentation/fr/texidocs/time-signature-in-parentheses.texidoc
+Documentation/fr/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc
+Documentation/fr/texidocs/transcription-of-ancient-music-with-incipit.texidoc
+Documentation/fr/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc
+Documentation/fr/texidocs/tweaking-clef-properties.texidoc
+Documentation/fr/texidocs/tweaking-grace-layout-within-music.texidoc
+Documentation/fr/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc
+Documentation/fr/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc
+Documentation/fr/texidocs/using-alternative-flag-styles.texidoc
+Documentation/fr/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc
+Documentation/fr/texidocs/using-autochange-with-more-than-one-voice.texidoc
+Documentation/fr/texidocs/using-double-slurs-for-legato-chords.texidoc
+Documentation/fr/texidocs/using-grace-note-slashes-with-normal-heads.texidoc
+Documentation/fr/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc
+Documentation/fr/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc
+Documentation/fr/texidocs/using-the--tweak-command-to-tweak-individual-grobs.texidoc
+Documentation/fr/texidocs/using-the-whiteout-property.texidoc
+Documentation/fr/texidocs/using-ties-with-arpeggios.texidoc
+Documentation/fr/texidocs/utf-8.texidoc
+Documentation/fr/texidocs/vertical-line-as-a-baroque-articulation-mark.texidoc
+Documentation/fr/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc
+Documentation/fr/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc
+Documentation/fr/texidocs/vertically-aligning-ossias-and-lyrics.texidoc
+Documentation/fr/texidocs/vertically-centered-common-lyrics.texidoc
+Documentation/fr/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc
+Documentation/fr/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc
+Documentation/fr/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc
+Documentation/fr/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc
+Documentation/fr/texidocs/vocal-ensemble-template.texidoc
+Documentation/fr/texidocs/volta-below-chords.texidoc
+Documentation/fr/texidocs/volta-multi-staff.texidoc
+Documentation/fr/texidocs/volta-text-markup-using-repeatcommands.texidoc
+Documentation/fr/texidocs/woodwind-diagrams-key-lists.texidoc
+Documentation/fr/texidocs/woodwind-diagrams-listing.texidoc
+Documentation/fr/translations.itexi
+Documentation/fr/usage.tely
+Documentation/fr/usage/external.itely
+Documentation/fr/usage/lilypond-book.itely
+Documentation/fr/usage/running.itely
+Documentation/fr/usage/suggestions.itely
+Documentation/fr/usage/updating.itely
+Documentation/fr/web.texi
+Documentation/fr/web/community.itexi
+Documentation/fr/web/download.itexi
+Documentation/fr/web/introduction.itexi
+Documentation/fr/web/manuals.itexi
+Documentation/gpl.itexi
+Documentation/hu/GNUmakefile
+Documentation/hu/included/.gitignore
+Documentation/hu/learning.tely
+Documentation/hu/learning/common-notation.itely
+Documentation/hu/learning/fundamental.itely
+Documentation/hu/learning/preface.itely
+Documentation/hu/learning/templates.itely
+Documentation/hu/learning/tutorial.itely
+Documentation/hu/learning/tweaks.itely
+Documentation/hu/macros.itexi
+Documentation/hu/search-box.ihtml
+Documentation/hu/translations.itexi
+Documentation/hu/usage.tely
+Documentation/hu/usage/lilypond-book.itely
+Documentation/hu/usage/running.itely
+Documentation/hu/usage/updating.itely
+Documentation/hu/web.texi
+Documentation/hu/web/community.itexi
+Documentation/hu/web/download.itexi
+Documentation/hu/web/introduction.itexi
+Documentation/hu/web/manuals.itexi
+Documentation/included/README
+Documentation/included/acknowledge.itexi
+Documentation/included/authors.itexi
+Documentation/included/chord-names-jazz.ly
+Documentation/included/chord-names-languages.ly
+Documentation/included/compile.itexi
+Documentation/included/display-predefined-fretboards.ly
+Documentation/included/display-predefined-mandolin-fretboards.ly
+Documentation/included/display-predefined-string-tunings.ly
+Documentation/included/display-predefined-ukulele-fretboards.ly
+Documentation/included/engraver-example.ily
+Documentation/included/font-table.ly
+Documentation/included/generating-output.itexi
+Documentation/included/gonville.ly
+Documentation/included/helpus.itexi
+Documentation/included/note-head-style.ly
+Documentation/included/percussion-chart.ly
+Documentation/included/script-chart.ly
+Documentation/included/simple.ly
+Documentation/included/special-characters.ly
+Documentation/it/GNUmakefile
+Documentation/it/changes.tely
+Documentation/it/included/generating-output.itexi
+Documentation/it/included/helpus.itexi
+Documentation/it/learning.tely
+Documentation/it/learning/common-notation.itely
+Documentation/it/learning/fundamental.itely
+Documentation/it/learning/preface.itely
+Documentation/it/learning/templates.itely
+Documentation/it/learning/tutorial.itely
+Documentation/it/learning/tweaks.itely
+Documentation/it/macros.itexi
+Documentation/it/notation.tely
+Documentation/it/notation/editorial.itely
+Documentation/it/notation/expressive.itely
+Documentation/it/notation/notation.itely
+Documentation/it/notation/pitches.itely
+Documentation/it/notation/repeats.itely
+Documentation/it/notation/rhythms.itely
+Documentation/it/notation/simultaneous.itely
+Documentation/it/notation/staff.itely
+Documentation/it/notation/text.itely
+Documentation/it/search-box.ihtml
+Documentation/it/texidocs/adding-ambitus-per-voice.texidoc
+Documentation/it/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc
+Documentation/it/texidocs/adding-timing-marks-to-long-glissandi.texidoc
+Documentation/it/texidocs/adding-volta-brackets-to-additional-staves.texidoc
+Documentation/it/texidocs/additional-voices-to-avoid-collisions.texidoc
+Documentation/it/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc
+Documentation/it/texidocs/aligning-bar-numbers.texidoc
+Documentation/it/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc
+Documentation/it/texidocs/alternative-bar-numbering.texidoc
+Documentation/it/texidocs/alternative-breve-notes.texidoc
+Documentation/it/texidocs/ambitus-with-multiple-voices.texidoc
+Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc
+Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc
+Documentation/it/texidocs/anglican-psalm-template.texidoc
+Documentation/it/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc
+Documentation/it/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc
+Documentation/it/texidocs/avoiding-collisions-with-chord-fingerings.texidoc
+Documentation/it/texidocs/beam-endings-in-score-context.texidoc
+Documentation/it/texidocs/beams-across-line-breaks.texidoc
+Documentation/it/texidocs/changing-beam-knee-gap.texidoc
+Documentation/it/texidocs/changing-form-of-multi-measure-rests.texidoc
+Documentation/it/texidocs/changing-partcombine-texts.texidoc
+Documentation/it/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc
+Documentation/it/texidocs/changing-the-ambitus-gap.texidoc
+Documentation/it/texidocs/changing-the-breath-mark-symbol.texidoc
+Documentation/it/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc
+Documentation/it/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc
+Documentation/it/texidocs/changing-the-tuplet-number.texidoc
+Documentation/it/texidocs/combining-two-parts-on-the-same-staff.texidoc
+Documentation/it/texidocs/conducting-signs,-measure-grouping-signs.texidoc
+Documentation/it/texidocs/contemporary-glissando.texidoc
+Documentation/it/texidocs/controlling-the-placement-of-chord-fingerings.texidoc
+Documentation/it/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc
+Documentation/it/texidocs/controlling-tuplet-bracket-visibility.texidoc
+Documentation/it/texidocs/creating-a-delayed-turn.texidoc
+Documentation/it/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc
+Documentation/it/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc
+Documentation/it/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc
+Documentation/it/texidocs/creating-metronome-marks-in-markup-mode.texidoc
+Documentation/it/texidocs/cross-staff-tremolos.texidoc
+Documentation/it/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc
+Documentation/it/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc
+Documentation/it/texidocs/dynamics-custom-text-spanner-postfix.texidoc
+Documentation/it/texidocs/dynamics-text-spanner-postfix.texidoc
+Documentation/it/texidocs/engraving-ties-manually.texidoc
+Documentation/it/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc
+Documentation/it/texidocs/extending-glissandi-across-repeats.texidoc
+Documentation/it/texidocs/flat-flags-and-beam-nibs.texidoc
+Documentation/it/texidocs/forcing-horizontal-shift-of-notes.texidoc
+Documentation/it/texidocs/grid-lines--changing-their-appearance.texidoc
+Documentation/it/texidocs/guitar-strum-rhythms.texidoc
+Documentation/it/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc
+Documentation/it/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc
+Documentation/it/texidocs/hymn-template.texidoc
+Documentation/it/texidocs/inserting-a-caesura.texidoc
+Documentation/it/texidocs/isolated-percent-repeats.texidoc
+Documentation/it/texidocs/jazz-combo-template.texidoc
+Documentation/it/texidocs/making-glissandi-breakable.texidoc
+Documentation/it/texidocs/making-slurs-with-complex-dash-structure.texidoc
+Documentation/it/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc
+Documentation/it/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc
+Documentation/it/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc
+Documentation/it/texidocs/multi-measure-rest-markup.texidoc
+Documentation/it/texidocs/nesting-staves.texidoc
+Documentation/it/texidocs/non-default-tuplet-numbers.texidoc
+Documentation/it/texidocs/non-traditional-key-signatures.texidoc
+Documentation/it/texidocs/numbers-as-easy-note-heads.texidoc
+Documentation/it/texidocs/orchestra,-choir-and-piano-template.texidoc
+Documentation/it/texidocs/ottava-text.texidoc
+Documentation/it/texidocs/partcombine-and-autobeamoff.texidoc
+Documentation/it/texidocs/percent-repeat-count-visibility.texidoc
+Documentation/it/texidocs/percent-repeat-counter.texidoc
+Documentation/it/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc
+Documentation/it/texidocs/piano-template-simple.texidoc
+Documentation/it/texidocs/piano-template-with-centered-lyrics.texidoc
+Documentation/it/texidocs/piano-template-with-melody-and-lyrics.texidoc
+Documentation/it/texidocs/positioning-grace-notes-with-floating-space.texidoc
+Documentation/it/texidocs/positioning-multi-measure-rests.texidoc
+Documentation/it/texidocs/positioning-text-markups-inside-slurs.texidoc
+Documentation/it/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc
+Documentation/it/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc
+Documentation/it/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc
+Documentation/it/texidocs/printing-bar-numbers-at-regular-intervals.texidoc
+Documentation/it/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc
+Documentation/it/texidocs/printing-hairpins-in-various-styles.texidoc
+Documentation/it/texidocs/printing-hairpins-using-al-niente-notation.texidoc
+Documentation/it/texidocs/printing-marks-at-the-end-of-a-line.texidoc
+Documentation/it/texidocs/printing-marks-on-every-staff.texidoc
+Documentation/it/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc
+Documentation/it/texidocs/printing-the-bar-number-for-the-first-measure.texidoc
+Documentation/it/texidocs/redefining-grace-note-global-defaults.texidoc
+Documentation/it/texidocs/removing-bar-numbers-from-a-score.texidoc
+Documentation/it/texidocs/removing-the-first-empty-line.texidoc
+Documentation/it/texidocs/rest-styles.texidoc
+Documentation/it/texidocs/satb-choir-template---four-staves.texidoc
+Documentation/it/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc
+Documentation/it/texidocs/setting-the-double-repeat-default-for-volte.texidoc
+Documentation/it/texidocs/setting-the-minimum-length-of-hairpins.texidoc
+Documentation/it/texidocs/shortening-volta-brackets.texidoc
+Documentation/it/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc
+Documentation/it/texidocs/single-staff-template-with-notes-and-chords.texidoc
+Documentation/it/texidocs/single-staff-template-with-notes-and-lyrics.texidoc
+Documentation/it/texidocs/single-staff-template-with-only-notes.texidoc
+Documentation/it/texidocs/stand-alone-two-column-markup.texidoc
+Documentation/it/texidocs/strict-beat-beaming.texidoc
+Documentation/it/texidocs/string-quartet-template-simple.texidoc
+Documentation/it/texidocs/string-quartet-template-with-separate-parts.texidoc
+Documentation/it/texidocs/subdividing-beams.texidoc
+Documentation/it/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc
+Documentation/it/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc
+Documentation/it/texidocs/tweaking-clef-properties.texidoc
+Documentation/it/texidocs/tweaking-grace-layout-within-music.texidoc
+Documentation/it/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc
+Documentation/it/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc
+Documentation/it/texidocs/using-double-slurs-for-legato-chords.texidoc
+Documentation/it/texidocs/using-grace-note-slashes-with-normal-heads.texidoc
+Documentation/it/texidocs/using-ties-with-arpeggios.texidoc
+Documentation/it/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc
+Documentation/it/texidocs/vertically-aligning-ossias-and-lyrics.texidoc
+Documentation/it/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc
+Documentation/it/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc
+Documentation/it/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc
+Documentation/it/texidocs/vocal-ensemble-template.texidoc
+Documentation/it/translations.itexi
+Documentation/it/usage.tely
+Documentation/it/usage/external.itely
+Documentation/it/usage/lilypond-book.itely
+Documentation/it/usage/running.itely
+Documentation/it/usage/suggestions.itely
+Documentation/it/usage/updating.itely
+Documentation/it/web.texi
+Documentation/it/web/community.itexi
+Documentation/it/web/download.itexi
+Documentation/it/web/introduction.itexi
+Documentation/it/web/manuals.itexi
+Documentation/ja/GNUmakefile
+Documentation/ja/dedication.itely
+Documentation/ja/included/generating-output.itexi
+Documentation/ja/learning.tely
+Documentation/ja/learning/common-notation.itely
+Documentation/ja/learning/fundamental.itely
+Documentation/ja/learning/preface.itely
+Documentation/ja/learning/templates.itely
+Documentation/ja/learning/tutorial.itely
+Documentation/ja/learning/tweaks.itely
+Documentation/ja/macros.itexi
+Documentation/ja/notation.tely
+Documentation/ja/notation/changing-defaults.itely
+Documentation/ja/notation/cheatsheet.itely
+Documentation/ja/notation/chords.itely
+Documentation/ja/notation/contemporary.itely
+Documentation/ja/notation/editorial.itely
+Documentation/ja/notation/expressive.itely
+Documentation/ja/notation/fretted-strings.itely
+Documentation/ja/notation/input.itely
+Documentation/ja/notation/keyboards.itely
+Documentation/ja/notation/notation.itely
+Documentation/ja/notation/percussion.itely
+Documentation/ja/notation/pitches.itely
+Documentation/ja/notation/repeats.itely
+Documentation/ja/notation/rhythms.itely
+Documentation/ja/notation/simultaneous.itely
+Documentation/ja/notation/spacing.itely
+Documentation/ja/notation/specialist.itely
+Documentation/ja/notation/staff.itely
+Documentation/ja/notation/text.itely
+Documentation/ja/notation/unfretted-strings.itely
+Documentation/ja/notation/vocal.itely
+Documentation/ja/notation/wind.itely
+Documentation/ja/notation/world.itely
+Documentation/ja/texidocs/piano-template-simple.texidoc
+Documentation/ja/texidocs/piano-template-with-centered-lyrics.texidoc
+Documentation/ja/texidocs/piano-template-with-melody-and-lyrics.texidoc
+Documentation/ja/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc
+Documentation/ja/texidocs/single-staff-template-with-notes-and-chords.texidoc
+Documentation/ja/texidocs/single-staff-template-with-notes-and-lyrics.texidoc
+Documentation/ja/texidocs/single-staff-template-with-only-notes.texidoc
+Documentation/ja/texidocs/string-quartet-template-simple.texidoc
+Documentation/ja/texidocs/string-quartet-template-with-separate-parts.texidoc
+Documentation/ja/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc
+Documentation/ja/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc
+Documentation/ja/texidocs/vocal-ensemble-template.texidoc
+Documentation/ja/translations.itexi
+Documentation/ja/usage.tely
+Documentation/ja/usage/external.itely
+Documentation/ja/usage/lilypond-book.itely
+Documentation/ja/usage/running.itely
+Documentation/ja/usage/suggestions.itely
+Documentation/ja/usage/updating.itely
+Documentation/ja/web.texi
+Documentation/ja/web/community.itexi
+Documentation/ja/web/download.itexi
+Documentation/ja/web/introduction.itexi
+Documentation/ja/web/manuals.itexi
+Documentation/learning.tely
+Documentation/learning/common-notation.itely
+Documentation/learning/fundamental.itely
+Documentation/learning/preface.itely
+Documentation/learning/templates.itely
+Documentation/learning/tutorial.itely
+Documentation/learning/tweaks.itely
+Documentation/lily-bib.bst
+Documentation/lily_index_search.php
+Documentation/lily_search.js
+Documentation/lilypond-texi2html.init
+Documentation/logo/GNUmakefile
+Documentation/logo/lelie-logo.xpm
+Documentation/logo/lilypond.xpm
+Documentation/logo/ly.xpm
+Documentation/ly-examples/GNUmakefile
+Documentation/ly-examples/ancient-headword.ly
+Documentation/ly-examples/aucun-snippet.ly
+Documentation/ly-examples/bach-bwv610.ly
+Documentation/ly-examples/bach-schenker.ly
+Documentation/ly-examples/cary-layout.ily
+Documentation/ly-examples/cary.ly
+Documentation/ly-examples/chart.ly
+Documentation/ly-examples/example-header.ily
+Documentation/ly-examples/granados.ly
+Documentation/ly-examples/orchestra.ly
+Documentation/ly-examples/sesto-full.ly
+Documentation/ly-examples/sesto-piano.ly
+Documentation/ly-examples/sesto-violin.ly
+Documentation/ly-examples/sesto.ily
+Documentation/ly-examples/tab-example.ly
+Documentation/ly-examples/theory.ly
+Documentation/macros.itexi
+Documentation/misc/ANNOUNCE-0.1
+Documentation/misc/ANNOUNCE-1.0
+Documentation/misc/ANNOUNCE-1.2
+Documentation/misc/CHANGES-0.0
+Documentation/misc/CHANGES-0.1
+Documentation/misc/CHANGES-1.0
+Documentation/misc/CHANGES-1.1
+Documentation/misc/CHANGES-1.2
+Documentation/misc/CHANGES-1.3
+Documentation/misc/CHANGES-1.4
+Documentation/misc/CHANGES-1.5
+Documentation/misc/ChangeLog-1.5
+Documentation/misc/ChangeLog-2.1
+Documentation/misc/ChangeLog-2.10
+Documentation/misc/ChangeLog-2.3
+Documentation/misc/GNUmakefile
+Documentation/misc/NEWS-1.2
+Documentation/misc/NEWS-1.4
+Documentation/misc/THANKS-1.8
+Documentation/misc/THANKS-2.0
+Documentation/misc/THANKS-2.10
+Documentation/misc/THANKS-2.12
+Documentation/misc/THANKS-2.14
+Documentation/misc/THANKS-2.16
+Documentation/misc/THANKS-2.2
+Documentation/misc/THANKS-2.4
+Documentation/misc/THANKS-2.6
+Documentation/misc/THANKS-2.8
+Documentation/misc/announce-v2.0.html
+Documentation/misc/announce-v2.10.html
+Documentation/misc/announce-v2.12.de.html
+Documentation/misc/announce-v2.12.es.html
+Documentation/misc/announce-v2.12.fr.html
+Documentation/misc/announce-v2.12.html
+Documentation/misc/announce-v2.2.html
+Documentation/misc/announce-v2.4.html
+Documentation/misc/announce-v2.6.html
+Documentation/misc/announce-v2.8.html
+Documentation/misc/browser-language.de.html
+Documentation/misc/browser-language.es.html
+Documentation/misc/browser-language.fr.html
+Documentation/misc/browser-language.html
+Documentation/misc/browser-language.hu.html
+Documentation/misc/browser-language.it.html
+Documentation/misc/browser-language.ja.html
+Documentation/misc/browser-language.nl.html
+Documentation/music-glossary.tely
+Documentation/nl/GNUmakefile
+Documentation/nl/included/generating-output.itexi
+Documentation/nl/learning.tely
+Documentation/nl/learning/common-notation.itely
+Documentation/nl/learning/fundamental.itely
+Documentation/nl/learning/preface.itely
+Documentation/nl/learning/templates.itely
+Documentation/nl/learning/tutorial.itely
+Documentation/nl/learning/tweaks.itely
+Documentation/nl/macros.itexi
+Documentation/nl/search-box.ihtml
+Documentation/nl/translations.itexi
+Documentation/nl/web.texi
+Documentation/nl/web/download.itexi
+Documentation/nl/web/introduction.itexi
+Documentation/nl/web/manuals.itexi
+Documentation/notation.tely
+Documentation/notation/ancient.itely
+Documentation/notation/changing-defaults.itely
+Documentation/notation/cheatsheet.itely
+Documentation/notation/chords.itely
+Documentation/notation/contemporary.itely
+Documentation/notation/editorial.itely
+Documentation/notation/expressive.itely
+Documentation/notation/fretted-strings.itely
+Documentation/notation/input.itely
+Documentation/notation/keyboards.itely
+Documentation/notation/notation-appendices.itely
+Documentation/notation/notation.itely
+Documentation/notation/percussion.itely
+Documentation/notation/pitches.itely
+Documentation/notation/repeats.itely
+Documentation/notation/rhythms.itely
+Documentation/notation/simultaneous.itely
+Documentation/notation/spacing.itely
+Documentation/notation/specialist.itely
+Documentation/notation/staff.itely
+Documentation/notation/text.itely
+Documentation/notation/unfretted-strings.itely
+Documentation/notation/vocal.itely
+Documentation/notation/wind.itely
+Documentation/notation/world.itely
+Documentation/pictures/BadLog.png
+Documentation/pictures/BadLog2.png
+Documentation/pictures/DragDrop.png
+Documentation/pictures/EditFile.png
+Documentation/pictures/FileSave.png
+Documentation/pictures/GNUmakefile
+Documentation/pictures/GenPDF.png
+Documentation/pictures/Gonville_after.png
+Documentation/pictures/Gonville_before.png
+Documentation/pictures/Learning_Macos_Compiling_log.png
+Documentation/pictures/Learning_Macos_New_menu.png
+Documentation/pictures/Learning_Macos_Open_Dialog_box.png
+Documentation/pictures/Learning_Macos_Open_menu.png
+Documentation/pictures/Learning_Macos_Save_file_with_name.png
+Documentation/pictures/Learning_Macos_Save_menu.png
+Documentation/pictures/Learning_Macos_Typeset_menu.png
+Documentation/pictures/Learning_Macos_pdf_output.png
+Documentation/pictures/Learning_Macos_welcome.png
+Documentation/pictures/LilyPad.png
+Documentation/pictures/OpusAndFeta.png
+Documentation/pictures/PDFRead.png
+Documentation/pictures/SaveAs.png
+Documentation/pictures/VTlogo_ITF.png
+Documentation/pictures/architecture-diagram.png
+Documentation/pictures/background-image.png
+Documentation/pictures/baer-flat-bw.png
+Documentation/pictures/baer-flat-gray.png
+Documentation/pictures/baer-ledger.png
+Documentation/pictures/baer-sarabande-hires.png
+Documentation/pictures/baer-sarabande-original.jpg
+Documentation/pictures/baer-sarabande.png
+Documentation/pictures/baer-suite1-fullpage-hires.png
+Documentation/pictures/baer-suite1-fullpage.png
+Documentation/pictures/baer-suite1-line.png
+Documentation/pictures/beam-scoring-example.png
+Documentation/pictures/bench-morgenlied.png
+Documentation/pictures/bwv861-baer-alt-small.png
+Documentation/pictures/bwv861-baer-alt.png
+Documentation/pictures/bwv861-baer-small.png
+Documentation/pictures/bwv861-baer.png
+Documentation/pictures/bwv861-breitkopf-small.png
+Documentation/pictures/bwv861-breitkopf.png
+Documentation/pictures/bwv861-finale2008a.png
+Documentation/pictures/bwv861-gessellschaft-small.png
+Documentation/pictures/bwv861-gessellschaft.png
+Documentation/pictures/bwv861mm28-29.png
+Documentation/pictures/bwv861mm33-34-annotate.png
+Documentation/pictures/bwv861mm33-34-annotate.svg
+Documentation/pictures/bwv861mm33-34.png
+Documentation/pictures/carter-brey.jpg
+Documentation/pictures/color1-active.png
+Documentation/pictures/color1-bg.png
+Documentation/pictures/color1-hover.png
+Documentation/pictures/color2-active.png
+Documentation/pictures/color2-bg.png
+Documentation/pictures/color2-hover.png
+Documentation/pictures/color3-active.png
+Documentation/pictures/color3-bg.png
+Documentation/pictures/color3-hover.png
+Documentation/pictures/color4-active.png
+Documentation/pictures/color4-bg.png
+Documentation/pictures/color4-hover.png
+Documentation/pictures/context-example.eps
+Documentation/pictures/darius-blasband.jpg
+Documentation/pictures/directions-updown.png
+Documentation/pictures/double-lily-modified3.png
+Documentation/pictures/engraver-acc.png
+Documentation/pictures/engraver-clef.png
+Documentation/pictures/engraver-final.png
+Documentation/pictures/engraver-noteheads.png
+Documentation/pictures/engraver-score.png
+Documentation/pictures/engraver-slur.png
+Documentation/pictures/engraver-staff.png
+Documentation/pictures/engraver-stem.png
+Documentation/pictures/finale-beam-detail.png
+Documentation/pictures/finale-flat-correct.png
+Documentation/pictures/finale-flat-detail.png
+Documentation/pictures/finale-sarabande-full.png
+Documentation/pictures/flat-design.png
+Documentation/pictures/frescobaldi-lilypond-editor-small.png
+Documentation/pictures/frescobaldi-lilypond-editor.png
+Documentation/pictures/hader-collage.jpg
+Documentation/pictures/hader-collage.png
+Documentation/pictures/hader-slaan.jpg
+Documentation/pictures/hader-slaan.png
+Documentation/pictures/henle-flat-bw.png
+Documentation/pictures/henle-flat-gray.png
+Documentation/pictures/henle-ledger.png
+Documentation/pictures/henle-suite1-fullpage-hires.png
+Documentation/pictures/henle-suite1-fullpage.png
+Documentation/pictures/henle-suite1-line.png
+Documentation/pictures/lao_banner_06_on_white_demo.png
+Documentation/pictures/lelie.png
+Documentation/pictures/lily-flat-bw.png
+Documentation/pictures/lily-home-nav-active.png
+Documentation/pictures/lily-home-nav-bg.png
+Documentation/pictures/lily-home-nav-hover.png
+Documentation/pictures/lily-home.png
+Documentation/pictures/lily-ledger.png
+Documentation/pictures/lily14-sarabande-annotated-hires.png
+Documentation/pictures/lily14-sarabande-annotated.png
+Documentation/pictures/lily14-sarabande-correct.png
+Documentation/pictures/lily14-sarabande-hires.png
+Documentation/pictures/lily14-sarabande.png
+Documentation/pictures/lily17-sarabande.png
+Documentation/pictures/lilykde-screenshot-small.png
+Documentation/pictures/lilykde-screenshot.png
+Documentation/pictures/lilypond-book.png
+Documentation/pictures/lilypondtool-2.12-screenshot-400wide.png
+Documentation/pictures/lilypondtool-2.12-screenshot.png
+Documentation/pictures/logo-debian.png
+Documentation/pictures/logo-fedora.png
+Documentation/pictures/logo-freebsd.png
+Documentation/pictures/logo-lilypond_Snell-Roundhead-Heaven.png
+Documentation/pictures/logo-linux.png
+Documentation/pictures/logo-macosx.png
+Documentation/pictures/logo-slackware.png
+Documentation/pictures/logo-suse.png
+Documentation/pictures/logo-ubuntu.png
+Documentation/pictures/logo-windows.png
+Documentation/pictures/mc-squared.png
+Documentation/pictures/morgenlied-crop-2.jpg
+Documentation/pictures/morgenlied-crop-2.png
+Documentation/pictures/morgenlied-ly-crop2.png
+Documentation/pictures/naive-notation-uml.png
+Documentation/pictures/naive-notation.png
+Documentation/pictures/nav-active-2.png
+Documentation/pictures/nav-active.png
+Documentation/pictures/nav-bg-2.png
+Documentation/pictures/nav-bg.png
+Documentation/pictures/nav-hover-2.png
+Documentation/pictures/nav-hover.png
+Documentation/pictures/nereid-shot-small.png
+Documentation/pictures/nereid-shot.png
+Documentation/pictures/nestedboxes.png
+Documentation/pictures/nestedboxes.svg
+Documentation/pictures/nonnaive-notation.png
+Documentation/pictures/orm-finnendahl.jpg
+Documentation/pictures/page-layout-comparison.png
+Documentation/pictures/page-layout-comparison.svg
+Documentation/pictures/pdf/OpusAndFeta.pdf
+Documentation/pictures/pdf/bwv861-finale2008a.pdf
+Documentation/pictures/pdf/bwv861mm28-29.pdf
+Documentation/pictures/pdf/bwv861mm33-34-annotate.pdf
+Documentation/pictures/pdf/bwv861mm33-34.pdf
+Documentation/pictures/pdf/lily14-sarabande.pdf
+Documentation/pictures/pdf/nestedboxes.pdf
+Documentation/pictures/pdf/page-layout-comparison.pdf
+Documentation/pictures/pdf/size11.pdf
+Documentation/pictures/pdf/size26.pdf
+Documentation/pictures/ross-beam-scan.jpg
+Documentation/pictures/screenshot-denemo-small.png
+Documentation/pictures/screenshot-denemo.png
+Documentation/pictures/simple-notation.png
+Documentation/pictures/simultaneous-0.png
+Documentation/pictures/simultaneous-1.png
+Documentation/pictures/simultaneous-2.png
+Documentation/pictures/simultaneous-3.png
+Documentation/pictures/size11.png
+Documentation/pictures/size26.png
+Documentation/pictures/slur-esthetics-annotate-1.png
+Documentation/pictures/slur-esthetics-annotate-2.png
+Documentation/pictures/slur-esthetics-annotate-3.png
+Documentation/pictures/slur-esthetics.png
+Documentation/pictures/spacing-no-corr.png
+Documentation/pictures/spacing-with-corr.png
+Documentation/pictures/squiggle.jpg
+Documentation/pictures/stone-distance.png
+Documentation/pictures/summary-gradient.png
+Documentation/pictures/text-input-1-annotate-de.png
+Documentation/pictures/text-input-1-annotate-de.svg
+Documentation/pictures/text-input-1-annotate-es.png
+Documentation/pictures/text-input-1-annotate-es.svg
+Documentation/pictures/text-input-1-annotate-fr.png
+Documentation/pictures/text-input-1-annotate-fr.svg
+Documentation/pictures/text-input-1-annotate-hu.png
+Documentation/pictures/text-input-1-annotate-hu.svg
+Documentation/pictures/text-input-1-annotate-it.png
+Documentation/pictures/text-input-1-annotate-it.svg
+Documentation/pictures/text-input-1-annotate-nl.png
+Documentation/pictures/text-input-1-annotate.png
+Documentation/pictures/text-input-1-annotate.svg
+Documentation/pictures/text-input-1-output.png
+Documentation/pictures/text-input-2-annotate-de.png
+Documentation/pictures/text-input-2-annotate-de.svg
+Documentation/pictures/text-input-2-annotate-es.png
+Documentation/pictures/text-input-2-annotate-es.svg
+Documentation/pictures/text-input-2-annotate-fr.png
+Documentation/pictures/text-input-2-annotate-fr.svg
+Documentation/pictures/text-input-2-annotate-hu.png
+Documentation/pictures/text-input-2-annotate-hu.svg
+Documentation/pictures/text-input-2-annotate-it.png
+Documentation/pictures/text-input-2-annotate-it.svg
+Documentation/pictures/text-input-2-annotate-nl.png
+Documentation/pictures/text-input-2-annotate.png
+Documentation/pictures/text-input-2-annotate.svg
+Documentation/pictures/text-input-2-output.png
+Documentation/pictures/text-input-parts-both-annotate-de.png
+Documentation/pictures/text-input-parts-both-annotate-de.svg
+Documentation/pictures/text-input-parts-both-annotate-es.png
+Documentation/pictures/text-input-parts-both-annotate-es.svg
+Documentation/pictures/text-input-parts-both-annotate-fr.png
+Documentation/pictures/text-input-parts-both-annotate-fr.svg
+Documentation/pictures/text-input-parts-both-annotate-hu.png
+Documentation/pictures/text-input-parts-both-annotate-hu.svg
+Documentation/pictures/text-input-parts-both-annotate-it.png
+Documentation/pictures/text-input-parts-both-annotate-it.svg
+Documentation/pictures/text-input-parts-both-annotate-nl.png
+Documentation/pictures/text-input-parts-both-annotate.png
+Documentation/pictures/text-input-parts-both-annotate.svg
+Documentation/pictures/text-input-parts-single-annotate-de.png
+Documentation/pictures/text-input-parts-single-annotate-de.svg
+Documentation/pictures/text-input-parts-single-annotate-es.png
+Documentation/pictures/text-input-parts-single-annotate-es.svg
+Documentation/pictures/text-input-parts-single-annotate-fr.png
+Documentation/pictures/text-input-parts-single-annotate-fr.svg
+Documentation/pictures/text-input-parts-single-annotate-hu.png
+Documentation/pictures/text-input-parts-single-annotate-hu.svg
+Documentation/pictures/text-input-parts-single-annotate-it.png
+Documentation/pictures/text-input-parts-single-annotate-it.svg
+Documentation/pictures/text-input-parts-single-annotate-nl.png
+Documentation/pictures/text-input-parts-single-annotate.png
+Documentation/pictures/text-input-parts-single-annotate.svg
+Documentation/pictures/text-input-parts-single-output.png
+Documentation/pictures/text-input-pop-annotate-de.png
+Documentation/pictures/text-input-pop-annotate-de.svg
+Documentation/pictures/text-input-pop-annotate-es.png
+Documentation/pictures/text-input-pop-annotate-es.svg
+Documentation/pictures/text-input-pop-annotate-fr.png
+Documentation/pictures/text-input-pop-annotate-fr.svg
+Documentation/pictures/text-input-pop-annotate-hu.png
+Documentation/pictures/text-input-pop-annotate-hu.svg
+Documentation/pictures/text-input-pop-annotate-it.png
+Documentation/pictures/text-input-pop-annotate-it.svg
+Documentation/pictures/text-input-pop-annotate-nl.png
+Documentation/pictures/text-input-pop-annotate.png
+Documentation/pictures/text-input-pop-annotate.svg
+Documentation/pictures/text-input-pop-output.png
+Documentation/pictures/text-input-score-annotate-de.png
+Documentation/pictures/text-input-score-annotate-de.svg
+Documentation/pictures/text-input-score-annotate-es.png
+Documentation/pictures/text-input-score-annotate-es.svg
+Documentation/pictures/text-input-score-annotate-fr.png
+Documentation/pictures/text-input-score-annotate-fr.svg
+Documentation/pictures/text-input-score-annotate-hu.png
+Documentation/pictures/text-input-score-annotate-hu.svg
+Documentation/pictures/text-input-score-annotate-it.png
+Documentation/pictures/text-input-score-annotate-it.svg
+Documentation/pictures/text-input-score-annotate-nl.png
+Documentation/pictures/text-input-score-annotate.png
+Documentation/pictures/text-input-score-annotate.svg
+Documentation/pictures/text-input-score-output.png
+Documentation/pictures/thickness-tweaks.png
+Documentation/pictures/ties-scoring-example.png
+Documentation/po/GNUmakefile
+Documentation/po/cs.po
+Documentation/po/de.po
+Documentation/po/es.po
+Documentation/po/fr.po
+Documentation/po/hu.po
+Documentation/po/included/.gitignore
+Documentation/po/it.po
+Documentation/po/ja.po
+Documentation/po/lilypond-doc.pot
+Documentation/po/nl.po
+Documentation/po/zh.po
+Documentation/search-box.ihtml
+Documentation/snippets.tely
+Documentation/snippets/README
+Documentation/snippets/accordion-discant-symbols.ly
+Documentation/snippets/accordion-registers.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-an-ottava-marking-to-a-single-voice.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-extra-fingering-with-scheme.ly
+Documentation/snippets/adding-fingerings-to-a-score.ly
+Documentation/snippets/adding-fingerings-to-tablatures.ly
+Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly
+Documentation/snippets/adding-links-to-objects.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-timing-marks-to-long-glissandi.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-objects-created-with-the--mark-command.ly
+Documentation/snippets/aligning-syllables-with-melisma.ly
+Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly
+Documentation/snippets/altering-the-length-of-beamed-stems.ly
+Documentation/snippets/alternative-bar-numbering.ly
+Documentation/snippets/alternative-breve-notes.ly
+Documentation/snippets/ambitus-with-multiple-voices.ly
+Documentation/snippets/ambitus.ly
+Documentation/snippets/analysis-brackets-above-the-staff.ly
+Documentation/snippets/ancient-fonts.ly
+Documentation/snippets/ancient-headword.ly
+Documentation/snippets/ancient-notation-intro.itely
+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-notation.snippet-list
+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/automatic-notation.snippet-list
+Documentation/snippets/automatically-change-durations.ly
+Documentation/snippets/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly
+Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly
+Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.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/book-parts.ly
+Documentation/snippets/breaks.snippet-list
+Documentation/snippets/breathing-signs.ly
+Documentation/snippets/broken-crescendo-hairpin.ly
+Documentation/snippets/caesura-railtracks-with-fermata.ly
+Documentation/snippets/center-text-below-hairpin-dynamics.ly
+Documentation/snippets/centered-measure-numbers.ly
+Documentation/snippets/centering-markup-on-note-heads-automatically.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-properties-for-individual-grobs.ly
+Documentation/snippets/changing-stanza-fonts.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-default-text-font-family.ly
+Documentation/snippets/changing-the-interval-of-lines-on-the-stave.ly
+Documentation/snippets/changing-the-number-of-augmentation-dots-per-note.ly
+Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly
+Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly
+Documentation/snippets/changing-the-size-of-woodwind-diagrams.ly
+Documentation/snippets/changing-the-staff-size.ly
+Documentation/snippets/changing-the-tempo-without-a-metronome-mark.ly
+Documentation/snippets/changing-the-text-for-sustain-markings.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/chords-headword.ly
+Documentation/snippets/chords-intro.itely
+Documentation/snippets/chords.snippet-list
+Documentation/snippets/clefs-can-be-transposed-by-arbitrary-amounts.ly
+Documentation/snippets/clip-systems.ly
+Documentation/snippets/clusters.ly
+Documentation/snippets/coloring-notes-depending-on-their-pitch.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/connecting-notes.snippet-list
+Documentation/snippets/consistently-left-aligned-bar-numbers.ly
+Documentation/snippets/contemporary-glissando.ly
+Documentation/snippets/contemporary-notation.snippet-list
+Documentation/snippets/contexts-and-engravers-intro.itely
+Documentation/snippets/contexts-and-engravers.snippet-list
+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/correction-wanted.snippet-list
+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-double-digit-fingerings.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-chords---beaming-problems-workaround.ly
+Documentation/snippets/cross-staff-stems.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/demo-midiinstruments.ly
+Documentation/snippets/demonstrating-all-headers.ly
+Documentation/snippets/devel.snippet-list
+Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly
+Documentation/snippets/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.ly
+Documentation/snippets/displaying-complex-chords.ly
+Documentation/snippets/displaying-grob-ancestry.ly
+Documentation/snippets/dotted-harmonics.ly
+Documentation/snippets/double-glissando.ly
+Documentation/snippets/drawing-boxes-around-grobs.ly
+Documentation/snippets/drawing-circles-around-note-heads.ly
+Documentation/snippets/drawing-circles-around-various-objects.ly
+Documentation/snippets/dynamics-custom-text-spanner-postfix.ly
+Documentation/snippets/dynamics-text-spanner-postfix.ly
+Documentation/snippets/editorial-annotations-intro.itely
+Documentation/snippets/editorial-annotations.snippet-list
+Documentation/snippets/editorial-headword.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/engraving-tremolos-with-floating-beams.ly
+Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly
+Documentation/snippets/expressive-headword.ly
+Documentation/snippets/expressive-marks-intro.itely
+Documentation/snippets/expressive-marks.snippet-list
+Documentation/snippets/extending-glissandi-across-repeats.ly
+Documentation/snippets/faking-a-hammer-in-tablatures.ly
+Documentation/snippets/figured-bass-headword.ly
+Documentation/snippets/fine-tuning-pedal-brackets.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/flute-slap-notation.ly
+Documentation/snippets/forcing-a-clef-symbol-to-be-displayed.ly
+Documentation/snippets/forcing-horizontal-shift-of-notes.ly
+Documentation/snippets/forcing-hyphens-to-be-shown.ly
+Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly
+Documentation/snippets/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly
+Documentation/snippets/formatting-lyrics-syllables.ly
+Documentation/snippets/fret-diagrams-explained-and-developed.ly
+Documentation/snippets/fretboards-alternate-tables.ly
+Documentation/snippets/fretted-headword.ly
+Documentation/snippets/fretted-string-harmonics-in-tablature.ly
+Documentation/snippets/fretted-strings-intro.itely
+Documentation/snippets/fretted-strings.snippet-list
+Documentation/snippets/generating-custom-flags.ly
+Documentation/snippets/generating-random-notes.ly
+Documentation/snippets/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.ly
+Documentation/snippets/glissandi-can-skip-grobs.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/guitar-slides.ly
+Documentation/snippets/guitar-strum-rhythms.ly
+Documentation/snippets/hairpins-with-different-line-styles.ly
+Documentation/snippets/headword.snippet-list
+Documentation/snippets/heavily-customized-polymetric-time-signatures.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/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly
+Documentation/snippets/how-to-change-fret-diagram-position.ly
+Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly
+Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly
+Documentation/snippets/how-to-put-ties-between-syllables-in-lyrics.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/inserting-score-fragments-above-a-staff,-as-markups.ly
+Documentation/snippets/isolated-percent-repeats.ly
+Documentation/snippets/jazz-combo-template.ly
+Documentation/snippets/keep-change-clefs-full-sized.ly
+Documentation/snippets/keyboard-headword.ly
+Documentation/snippets/keyboards-intro.itely
+Documentation/snippets/keyboards.snippet-list
+Documentation/snippets/laissez-vibrer-ties.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-an-object-invisible-with-the-transparent-property.ly
+Documentation/snippets/making-glissandi-breakable.ly
+Documentation/snippets/making-slurs-with-complex-dash-structure.ly
+Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly
+Documentation/snippets/manually-break-figured-bass-extenders-for-only-some-numbers.ly
+Documentation/snippets/manually-controlling-beam-positions.ly
+Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly
+Documentation/snippets/markup-lines.ly
+Documentation/snippets/measure-counter.ly
+Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly
+Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly
+Documentation/snippets/midi-intro.itely
+Documentation/snippets/midi.snippet-list
+Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly
+Documentation/snippets/modifying-tuplet-bracket-length.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/new/README
+Documentation/snippets/new/accordion-discant-symbols.ly
+Documentation/snippets/new/accordion-registers.ly
+Documentation/snippets/new/adding-a-figured-bass-above-or-below-the-notes.ly
+Documentation/snippets/new/adding-extra-fingering-with-scheme.ly
+Documentation/snippets/new/adding-orchestral-cues-to-a-vocal-score.ly
+Documentation/snippets/new/adding-timing-marks-to-long-glissandi.ly
+Documentation/snippets/new/alternative-bar-numbering.ly
+Documentation/snippets/new/ancient-fonts.ly
+Documentation/snippets/new/ancient-notation-template----modern-transcription-of-gregorian-music.ly
+Documentation/snippets/new/bar-chords-notation-for-guitar--with-text-spanner.ly
+Documentation/snippets/new/broken-crescendo-hairpin.ly
+Documentation/snippets/new/centered-measure-numbers.ly
+Documentation/snippets/new/centering-markup-on-note-heads-automatically.ly
+Documentation/snippets/new/changing-the-tuplet-number.ly
+Documentation/snippets/new/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly
+Documentation/snippets/new/chant-or-psalms-notation.ly
+Documentation/snippets/new/chords-headword.ly
+Documentation/snippets/new/compound-time-signatures.ly
+Documentation/snippets/new/conducting-signs,-measure-grouping-signs.ly
+Documentation/snippets/new/creating-a-sequence-of-notes-on-various-pitches.ly
+Documentation/snippets/new/creating-double-digit-fingerings.ly
+Documentation/snippets/new/creating-real-parenthesized-dynamics.ly
+Documentation/snippets/new/cross-staff-stems.ly
+Documentation/snippets/new/defining-an-engraver-in-scheme--ambitus-engraver.ly
+Documentation/snippets/new/entering-several-tuplets-using-only-one--times-command.ly
+Documentation/snippets/new/expressive-headword.ly
+Documentation/snippets/new/extending-glissandi-across-repeats.ly
+Documentation/snippets/new/fretted-headword.ly
+Documentation/snippets/new/generating-custom-flags.ly
+Documentation/snippets/new/glissandi-can-skip-grobs.ly
+Documentation/snippets/new/guitar-slides.ly
+Documentation/snippets/new/heavily-customized-polymetric-time-signatures.ly
+Documentation/snippets/new/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly
+Documentation/snippets/new/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly
+Documentation/snippets/new/incipit.ly
+Documentation/snippets/new/inserting-score-fragments-above-a-staff,-as-markups.ly
+Documentation/snippets/new/jazz-combo-template.ly
+Documentation/snippets/new/keyboard-headword.ly
+Documentation/snippets/new/making-an-object-invisible-with-the-transparent-property.ly
+Documentation/snippets/new/making-glissandi-breakable.ly
+Documentation/snippets/new/merging-multi-measure-rests-in-a-polyphonic-part.ly
+Documentation/snippets/new/numbering-groups-of-measures.ly
+Documentation/snippets/new/numbers-as-easy-note-heads.ly
+Documentation/snippets/new/pitches-headword.ly
+Documentation/snippets/new/positioning-multi-measure-rests.ly
+Documentation/snippets/new/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly
+Documentation/snippets/new/printing-hairpins-in-various-styles.ly
+Documentation/snippets/new/quoting-another-voice-with-transposition.ly
+Documentation/snippets/new/redefining-grace-note-global-defaults.ly
+Documentation/snippets/new/score-for-diatonic-accordion.ly
+Documentation/snippets/new/staff-headword.ly
+Documentation/snippets/new/strict-beat-beaming.ly
+Documentation/snippets/new/string-number-extender-lines.ly
+Documentation/snippets/new/unfretted-headword.ly
+Documentation/snippets/new/using-a-tick-as-the-breath-mark-symbol.ly
+Documentation/snippets/new/using-alternative-flag-styles.ly
+Documentation/snippets/new/using-grace-note-slashes-with-normal-heads.ly
+Documentation/snippets/new/vertically-aligned-dynamics-and-textscripts.ly
+Documentation/snippets/new/woodwind-diagrams-key-lists.ly
+Documentation/snippets/non-default-tuplet-numbers.ly
+Documentation/snippets/non-traditional-key-signatures.ly
+Documentation/snippets/numbering-groups-of-measures.ly
+Documentation/snippets/numbers-as-easy-note-heads.ly
+Documentation/snippets/obtaining-2.12-lyrics-spacing-in-newer-versions.ly
+Documentation/snippets/open-string-harmonics-in-tablature.ly
+Documentation/snippets/orchestra,-choir-and-piano-template.ly
+Documentation/snippets/ottava-text.ly
+Documentation/snippets/outputting-the-version-number.ly
+Documentation/snippets/overriding-articulations-of-destinct-type.ly
+Documentation/snippets/page-label.ly
+Documentation/snippets/paper-and-layout-intro.itely
+Documentation/snippets/paper-and-layout.snippet-list
+Documentation/snippets/partcombine-and-autobeamoff.ly
+Documentation/snippets/percent-repeat-count-visibility.ly
+Documentation/snippets/percent-repeat-counter.ly
+Documentation/snippets/percussion-beaters.ly
+Documentation/snippets/percussion-intro.itely
+Documentation/snippets/percussion.snippet-list
+Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly
+Documentation/snippets/piano-template-simple.ly
+Documentation/snippets/piano-template-with-centered-lyrics.ly
+Documentation/snippets/piano-template-with-melody-and-lyrics.ly
+Documentation/snippets/pitches-headword.ly
+Documentation/snippets/pitches-intro.itely
+Documentation/snippets/pitches.snippet-list
+Documentation/snippets/placement-of-right-hand-fingerings.ly
+Documentation/snippets/polyphony-in-tablature.ly
+Documentation/snippets/positioning-arpeggios.ly
+Documentation/snippets/positioning-fingering-indications-precisely.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-segno-and-coda-with-line-break.ly
+Documentation/snippets/positioning-text-markups-inside-slurs.ly
+Documentation/snippets/preparing-parts.snippet-list
+Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly
+Documentation/snippets/preventing-final-mark-from-removing-final-tuplet.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-in-various-styles.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-music-with-different-time-signatures.ly
+Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly
+Documentation/snippets/printing-text-from-right-to-left.ly
+Documentation/snippets/printing-the-bar-number-for-the-first-measure.ly
+Documentation/snippets/proportional-strict-notespacing.ly
+Documentation/snippets/putting-lyrics-inside-the-staff.ly
+Documentation/snippets/quoting-another-voice-with-transposition.ly
+Documentation/snippets/quoting-another-voice.ly
+Documentation/snippets/real-music.snippet-list
+Documentation/snippets/really-cool.snippet-list
+Documentation/snippets/really-simple.snippet-list
+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/repeats-headword.ly
+Documentation/snippets/repeats-intro.itely
+Documentation/snippets/repeats.snippet-list
+Documentation/snippets/rest-styles.ly
+Documentation/snippets/reverting-default-beam-endings.ly
+Documentation/snippets/rhythmic-slashes.ly
+Documentation/snippets/rhythms-headword.ly
+Documentation/snippets/rhythms-intro.itely
+Documentation/snippets/rhythms.snippet-list
+Documentation/snippets/satb-choir-template---four-staves.ly
+Documentation/snippets/scheme-language.snippet-list
+Documentation/snippets/score-for-diatonic-accordion.ly
+Documentation/snippets/screech-and-boink.ly
+Documentation/snippets/separating-key-cancellations-from-key-signature-changes.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/showing-the-same-articulation-above-and-below-a-note-or-chord.ly
+Documentation/snippets/simple-lead-sheet.ly
+Documentation/snippets/simultaneous-headword.ly
+Documentation/snippets/simultaneous-notes-intro.itely
+Documentation/snippets/simultaneous-notes.snippet-list
+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/skips-in-lyric-mode-2.ly
+Documentation/snippets/skips-in-lyric-mode.ly
+Documentation/snippets/slides-in-tablature.ly
+Documentation/snippets/snap-pizzicato-or-bartok-pizzicato.ly
+Documentation/snippets/spacing-intro.itely
+Documentation/snippets/spacing.snippet-list
+Documentation/snippets/specific-notation.snippet-list
+Documentation/snippets/staff-headword.ly
+Documentation/snippets/staff-notation-intro.itely
+Documentation/snippets/staff-notation.snippet-list
+Documentation/snippets/stand-alone-two-column-markup.ly
+Documentation/snippets/stem-and-beam-behavior-in-tablature.ly
+Documentation/snippets/stemlets.ly
+Documentation/snippets/strict-beat-beaming.ly
+Documentation/snippets/string-number-extender-lines.ly
+Documentation/snippets/string-quartet-template-simple.ly
+Documentation/snippets/string-quartet-template-with-separate-parts.ly
+Documentation/snippets/stylesheet.snippet-list
+Documentation/snippets/subdividing-beams.ly
+Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly
+Documentation/snippets/symbols-and-glyphs.snippet-list
+Documentation/snippets/syntax-and-expressions.snippet-list
+Documentation/snippets/table-of-contents.ly
+Documentation/snippets/template-intro.itely
+Documentation/snippets/template.snippet-list
+Documentation/snippets/text-headword.ly
+Documentation/snippets/text-intro.itely
+Documentation/snippets/text.snippet-list
+Documentation/snippets/three-sided-box.ly
+Documentation/snippets/tick-bar-lines.ly
+Documentation/snippets/time-signature-in-parentheses---method-3.ly
+Documentation/snippets/time-signature-in-parentheses.ly
+Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly
+Documentation/snippets/titles-intro.itely
+Documentation/snippets/titles.snippet-list
+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/tweaks-and-overrides-intro.itely
+Documentation/snippets/tweaks-and-overrides.snippet-list
+Documentation/snippets/unfretted-headword.ly
+Documentation/snippets/unfretted-strings-intro.itely
+Documentation/snippets/unfretted-strings.snippet-list
+Documentation/snippets/use-square-bracket-at-the-start-of-a-staff-group.ly
+Documentation/snippets/using-a-tick-as-the-breath-mark-symbol.ly
+Documentation/snippets/using-alternative-flag-styles.ly
+Documentation/snippets/using-arpeggiobracket-to-make-divisi-more-visible.ly
+Documentation/snippets/using-autochange-with-more-than-one-voice.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-postscript-to-generate-special-note-head-shapes.ly
+Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly
+Documentation/snippets/using-the-whiteout-property.ly
+Documentation/snippets/using-ties-with-arpeggios.ly
+Documentation/snippets/utf-8.ly
+Documentation/snippets/version-specific.snippet-list
+Documentation/snippets/vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
+Documentation/snippets/vertical-line-as-a-baroque-articulation-mark.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-centered-common-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/vocal-headword.ly
+Documentation/snippets/vocal-music-intro.itely
+Documentation/snippets/vocal-music.snippet-list
+Documentation/snippets/volta-below-chords.ly
+Documentation/snippets/volta-multi-staff.ly
+Documentation/snippets/volta-text-markup-using-repeatcommands.ly
+Documentation/snippets/wind-headword.ly
+Documentation/snippets/winds-intro.itely
+Documentation/snippets/winds.snippet-list
+Documentation/snippets/woodwind-diagrams-key-lists.ly
+Documentation/snippets/woodwind-diagrams-listing.ly
+Documentation/snippets/workaround.snippet-list
+Documentation/snippets/world-music-intro.itely
+Documentation/snippets/world-music.snippet-list
+Documentation/topdocs/AUTHORS.texi
+Documentation/topdocs/GNUmakefile
+Documentation/topdocs/INSTALL.texi
+Documentation/topdocs/README.texi
+Documentation/translations.itexi
+Documentation/usage.tely
+Documentation/usage/external.itely
+Documentation/usage/latex-example.latex
+Documentation/usage/latex-lilypond-example.latex
+Documentation/usage/lilypond-book.itely
+Documentation/usage/running.itely
+Documentation/usage/suggestions.itely
+Documentation/usage/updating.itely
+Documentation/web.texi
+Documentation/web/community.itexi
+Documentation/web/download.itexi
+Documentation/web/introduction.itexi
+Documentation/web/manuals.itexi
+Documentation/web/news-front.itexi
+Documentation/web/news.itexi
+Documentation/web/others-did.bib
+Documentation/web/server/favicon.ico
+Documentation/web/server/lilypond.org.htaccess
+Documentation/web/server/robots.txt
+Documentation/web/server/tweets.xml
+Documentation/web/server/website-dir.htaccess
+Documentation/web/we-wrote.bib
+Documentation/zh/GNUmakefile
+Documentation/zh/included/.gitignore
+Documentation/zh/macros.itexi
+Documentation/zh/search-box.ihtml
+Documentation/zh/translations.itexi
+Documentation/zh/web.texi
+Documentation/zh/web/community.itexi
+Documentation/zh/web/download.itexi
+Documentation/zh/web/introduction.itexi
+Documentation/zh/web/manuals.itexi
+Documentation/zh/web/news-front.itexi
+GNUmakefile.in
+HACKING
+LICENSE
+LICENSE.DOCUMENTATION
+LICENSE.OFL
+ROADMAP
+VERSION
+aclocal.m4
+autogen.sh
+config.hh.in
+config.make.in
+config/config.guess
+config/config.sub
+config/install-sh
+configure.ac
+elisp/GNUmakefile
+elisp/lilypond-font-lock.el
+elisp/lilypond-indent.el
+elisp/lilypond-init.el
+elisp/lilypond-mode.el
+elisp/lilypond-song.el
+elisp/lilypond-what-beat.el
+flower/GNUmakefile
+flower/NEWS-1.0
+flower/NEWS-1.1.46
+flower/README
+flower/TODO
+flower/VERSION
+flower/cpu-timer.cc
+flower/file-cookie.cc
+flower/file-name.cc
+flower/file-path.cc
+flower/getopt-long.cc
+flower/include/arithmetic-operator.hh
+flower/include/axis.hh
+flower/include/compare.hh
+flower/include/cpu-timer.hh
+flower/include/direction.hh
+flower/include/drul-array.hh
+flower/include/file-cookie.hh
+flower/include/file-name.hh
+flower/include/file-path.hh
+flower/include/flower-proto.hh
+flower/include/getopt-long.hh
+flower/include/guile-compatibility.hh
+flower/include/international.hh
+flower/include/interval-set.hh
+flower/include/interval.hh
+flower/include/interval.tcc
+flower/include/libc-extension.hh
+flower/include/matrix.hh
+flower/include/memory-stream.hh
+flower/include/offset.hh
+flower/include/parray.hh
+flower/include/polynomial.hh
+flower/include/pqueue.hh
+flower/include/rational.hh
+flower/include/real.hh
+flower/include/std-string.hh
+flower/include/std-vector.hh
+flower/include/string-convert.hh
+flower/include/tuple.hh
+flower/include/virtual-methods.hh
+flower/include/warn.hh
+flower/include/yaffut-parameters.hh
+flower/include/yaffut.hh
+flower/international.cc
+flower/interval-set.cc
+flower/interval.cc
+flower/libc-extension.cc
+flower/memory-stream.cc
+flower/offset.cc
+flower/polynomial.cc
+flower/rational.cc
+flower/real.cc
+flower/std-string.cc
+flower/string-convert.cc
+flower/test-file-name.cc
+flower/test-file-path.cc
+flower/test-interval-set.cc
+flower/test-std.cc
+flower/test-string.cc
+flower/warn.cc
+input/GNUmakefile
+input/regression/AAA-intro-regression.tely
+input/regression/GNUmakefile
+input/regression/abc2ly/GNUmakefile
+input/regression/abc2ly/clefs.abc
+input/regression/abc2ly/grace.abc
+input/regression/abc2ly/kirchentonarten.abc
+input/regression/abc2ly/tempo.abc
+input/regression/abc2ly/tuplet-slur.abc
+input/regression/accidental-ancient.ly
+input/regression/accidental-broken-tie-spacing.ly
+input/regression/accidental-cautionary.ly
+input/regression/accidental-clef-change.ly
+input/regression/accidental-collision.ly
+input/regression/accidental-contemporary.ly
+input/regression/accidental-double.ly
+input/regression/accidental-fingering-collision.ly
+input/regression/accidental-forced-tie.ly
+input/regression/accidental-grouping.ly
+input/regression/accidental-ledger.ly
+input/regression/accidental-octave.ly
+input/regression/accidental-piano.ly
+input/regression/accidental-placement-padding.ly
+input/regression/accidental-placement-samepitch.ly
+input/regression/accidental-placement.ly
+input/regression/accidental-quarter.ly
+input/regression/accidental-single-double.ly
+input/regression/accidental-suggestions.ly
+input/regression/accidental-tie.ly
+input/regression/accidental-unbroken-tie-spacing.ly
+input/regression/accidental-voice.ly
+input/regression/accidental.ly
+input/regression/add-grace-property.ly
+input/regression/add-stem-support.ly
+input/regression/alignment-order.ly
+input/regression/alignment-vertical-manual-setting.ly
+input/regression/allfontstyle.ily
+input/regression/alter-broken.ly
+input/regression/ambitus-cue.ly
+input/regression/ambitus-gap.ly
+input/regression/ambitus-percussion-staves.ly
+input/regression/ambitus-pitch-ordering.ly
+input/regression/ambitus-slur.ly
+input/regression/ambitus-with-ligature.ly
+input/regression/ambitus.ly
+input/regression/apply-context.ly
+input/regression/apply-output.ly
+input/regression/arpeggio-bracket.ly
+input/regression/arpeggio-collision.ly
+input/regression/arpeggio-no-overshoot.ly
+input/regression/arpeggio-no-staff-symbol.ly
+input/regression/arpeggio-parenthesis.ly
+input/regression/arpeggio-span-collision.ly
+input/regression/arpeggio-span-one-staff-collision.ly
+input/regression/arpeggio-span-one-staff.ly
+input/regression/arpeggio.ly
+input/regression/articulation-snappizzicato.ly
+input/regression/augmentum.ly
+input/regression/auto-beam-bar.ly
+input/regression/auto-beam-beaming-override.ly
+input/regression/auto-beam-breathe.ly
+input/regression/auto-beam-exceptions.ly
+input/regression/auto-beam-no-beam.ly
+input/regression/auto-beam-partial-grace.ly
+input/regression/auto-beam-partial.ly
+input/regression/auto-beam-recheck.ly
+input/regression/auto-beam-triplet.ly
+input/regression/auto-beam-tuplets.ly
+input/regression/auto-beam.ly
+input/regression/auto-change.ly
+input/regression/autobeam-3-4-rules.ly
+input/regression/autobeam-nobeam.ly
+input/regression/autobeam-show-defaults.ly
+input/regression/autobeam-tuplet-recheck.ly
+input/regression/automatic-polyphony-context-id.ly
+input/regression/automatic-polyphony-drumstaff.ly
+input/regression/automatic-polyphony-tabstaff.ly
+input/regression/backend-excercise.ly
+input/regression/backend-svg.ly
+input/regression/baerenreiter-sarabande.ly
+input/regression/balloon.ly
+input/regression/bar-check-redefine.ly
+input/regression/bar-extent.ly
+input/regression/bar-line-define-bar-glyph.ly
+input/regression/bar-line-define-bar-line.ly
+input/regression/bar-line-segno.ly
+input/regression/bar-lines.ly
+input/regression/bar-number-check-warning.ly
+input/regression/bar-number-visibility.ly
+input/regression/bar-number-volta-repeat.ly
+input/regression/bar-number.ly
+input/regression/bar-scripts.ly
+input/regression/beam-auto-knee.ly
+input/regression/beam-auto.ly
+input/regression/beam-beamlet-break.ly
+input/regression/beam-beamlet-grace.ly
+input/regression/beam-beat-grouping.ly
+input/regression/beam-break-no-bar.ly
+input/regression/beam-break.ly
+input/regression/beam-broken-classic.ly
+input/regression/beam-broken-difficult.ly
+input/regression/beam-center-slope.ly
+input/regression/beam-collision-accidentals.ly
+input/regression/beam-collision-basic.ly
+input/regression/beam-collision-beamcount.ly
+input/regression/beam-collision-classic.ly
+input/regression/beam-collision-cross-staff.ly
+input/regression/beam-collision-cross-staff2.ly
+input/regression/beam-collision-feasible-region.ly
+input/regression/beam-collision-flag.ly
+input/regression/beam-collision-grace.ly
+input/regression/beam-collision-large-object.ly
+input/regression/beam-collision-off.ly
+input/regression/beam-collision-opposite-stem.ly
+input/regression/beam-collision-prefatory-matter.ly
+input/regression/beam-collision-scaled-staff.ly
+input/regression/beam-collision-voice-only.ly
+input/regression/beam-concave-chord.ly
+input/regression/beam-concave-damped.ly
+input/regression/beam-concave.ly
+input/regression/beam-cross-staff-auto-knee.ly
+input/regression/beam-cross-staff-rest.ly
+input/regression/beam-cross-staff-script.ly
+input/regression/beam-cross-staff-slope.ly
+input/regression/beam-cross-staff.ly
+input/regression/beam-damp.ly
+input/regression/beam-default-lengths.ly
+input/regression/beam-extreme.ly
+input/regression/beam-feather-breaking.ly
+input/regression/beam-feather-knee-stem-length.ly
+input/regression/beam-feather.ly
+input/regression/beam-flat-retain-direction.ly
+input/regression/beam-forced-direction.ly
+input/regression/beam-french.ly
+input/regression/beam-funky-beamlet.ly
+input/regression/beam-funky.ly
+input/regression/beam-isknee.ly
+input/regression/beam-knee-symmetry.ly
+input/regression/beam-length.ly
+input/regression/beam-manual-beaming.ly
+input/regression/beam-multiple-cross-staff.ly
+input/regression/beam-multiplicity-over-rests.ly
+input/regression/beam-outside-beamlets.ly
+input/regression/beam-over-barline.ly
+input/regression/beam-position.ly
+input/regression/beam-quant-standard.ly
+input/regression/beam-quanting-32nd.ly
+input/regression/beam-quanting-horizontal.ly
+input/regression/beam-quanting-overhang.ly
+input/regression/beam-quarter.ly
+input/regression/beam-rest-extreme.ly
+input/regression/beam-rest.ly
+input/regression/beam-second.ly
+input/regression/beam-shortened-lengths.ly
+input/regression/beam-single-stem.ly
+input/regression/beam-skip.ly
+input/regression/beam-slope-stemlet.ly
+input/regression/beam-subdivide-tuplets.ly
+input/regression/beam-unconnected-beamlets.ly
+input/regression/beaming-ternary-metrum.ly
+input/regression/beaming-tuplet-regular.ly
+input/regression/beaming.ly
+input/regression/beamlet-point-toward-beat.ly
+input/regression/beamlet-test.ly
+input/regression/beams.ly
+input/regression/bend-after.ly
+input/regression/bend-dot.ly
+input/regression/bom-mark.ly
+input/regression/book-identifier-markup.ly
+input/regression/book-label-no-segfault.ly
+input/regression/bookpart-variable.ly
+input/regression/bookparts.ly
+input/regression/break-alignment-anchor-alignment.ly
+input/regression/break-alignment-anchors.ly
+input/regression/break.ly
+input/regression/breathing-sign-ancient.ly
+input/regression/breathing-sign-custom-staff.ly
+input/regression/breathing-sign.ly
+input/regression/breve-extent.ly
+input/regression/cadenza-grace-autobeam.ly
+input/regression/center-title.ly
+input/regression/chord-additional-pitch-prefix.ly
+input/regression/chord-changes.ly
+input/regression/chord-name-entry-11.ly
+input/regression/chord-name-entry.ly
+input/regression/chord-name-exceptions.ly
+input/regression/chord-name-major7.ly
+input/regression/chord-name-minor.ly
+input/regression/chord-name-override-text.ly
+input/regression/chord-names-bass.ly
+input/regression/chord-names-in-grand-staff.ly
+input/regression/chord-names-languages.ly
+input/regression/chord-names-lower-case-minor.ly
+input/regression/chord-repetition-relative.ly
+input/regression/chord-repetition-script-stack.ly
+input/regression/chord-repetition-times.ly
+input/regression/chord-repetition.ly
+input/regression/chord-scripts.ly
+input/regression/chord-slash-separator.ly
+input/regression/chord-tremolo-accidental.ly
+input/regression/chord-tremolo-articulations.ly
+input/regression/chord-tremolo-other-commands.ly
+input/regression/chord-tremolo-scaled-durations.ly
+input/regression/chord-tremolo-short.ly
+input/regression/chord-tremolo-single.ly
+input/regression/chord-tremolo-stem-direction.ly
+input/regression/chord-tremolo-whole.ly
+input/regression/chord-tremolo.ly
+input/regression/chordnames-nochord.ly
+input/regression/chords-funky-ignatzek.ly
+input/regression/chromatic-scales.ly
+input/regression/clef-ottava.ly
+input/regression/clef-transposition-optional.ly
+input/regression/clef-transposition-placement.ly
+input/regression/clef-transposition-visibility.ly
+input/regression/clef-transposition.ly
+input/regression/clef-warn.ly
+input/regression/clefs.ly
+input/regression/clip-systems.ly
+input/regression/cluster-break.ly
+input/regression/cluster-cross-staff.ly
+input/regression/cluster-single-note.ly
+input/regression/cluster-style.ly
+input/regression/cluster.ly
+input/regression/collision-2.ly
+input/regression/collision-alignment.ly
+input/regression/collision-dots-invert.ly
+input/regression/collision-dots-move.ly
+input/regression/collision-dots-up-space-dotted.ly
+input/regression/collision-dots.ly
+input/regression/collision-harmonic-no-dots.ly
+input/regression/collision-head-chords.ly
+input/regression/collision-head-solfa-fa.ly
+input/regression/collision-heads.ly
+input/regression/collision-manual.ly
+input/regression/collision-merge-differently-dotted.ly
+input/regression/collision-merge-differently-headed.ly
+input/regression/collision-merge-dots.ly
+input/regression/collision-mesh.ly
+input/regression/collision-seconds.ly
+input/regression/collision-whole.ly
+input/regression/collisions.ly
+input/regression/color.ly
+input/regression/completion-heads-factor.ly
+input/regression/completion-heads-lyrics.ly
+input/regression/completion-heads-multiple-ties.ly
+input/regression/completion-heads-polyphony-2.ly
+input/regression/completion-heads-polyphony.ly
+input/regression/completion-heads-tie.ly
+input/regression/completion-heads-tuplets.ly
+input/regression/completion-heads-unit.ly
+input/regression/completion-heads.ly
+input/regression/completion-rest.ly
+input/regression/complex-once.ly
+input/regression/compound-time-signatures.ly
+input/regression/context-die-staff.ly
+input/regression/context-mod-context.ly
+input/regression/context-mod-with.ly
+input/regression/context-nested-staffgroup.ly
+input/regression/context-string-tuning.ly
+input/regression/cross-staff-stems.ly
+input/regression/cue-clef-after-barline.ly
+input/regression/cue-clef-begin-of-score.ly
+input/regression/cue-clef-keysignature.ly
+input/regression/cue-clef-manually.ly
+input/regression/cue-clef-new-line.ly
+input/regression/cue-clef-transposition-optional.ly
+input/regression/cue-clef-transposition.ly
+input/regression/cue-clef.ly
+input/regression/custos.ly
+input/regression/dead-notes.ly
+input/regression/define-event-function.ly
+input/regression/display-lily-tests.ly
+input/regression/dot-column-engraver.ly
+input/regression/dot-column-note-collision.ly
+input/regression/dot-column-rest-collision.ly
+input/regression/dot-column-vertical-positioning.ly
+input/regression/dot-dot-count-override.ly
+input/regression/dot-flag-collision.ly
+input/regression/dot-rest-beam-trigger.ly
+input/regression/dot-rest-horizontal-spacing.ly
+input/regression/dot-up-voice-collision.ly
+input/regression/dots.ly
+input/regression/double-repeat-default-volta.ly
+input/regression/double-repeat.ly
+input/regression/drums.ly
+input/regression/duration-identifier-compressed.ly
+input/regression/dynamics-alignment-autobreak.ly
+input/regression/dynamics-alignment-breaker-linebreak.ly
+input/regression/dynamics-alignment-breaker-order.ly
+input/regression/dynamics-alignment-breaker-subsequent-spanner.ly
+input/regression/dynamics-alignment-breaker.ly
+input/regression/dynamics-alignment-no-line-linebreak.ly
+input/regression/dynamics-alignment-no-line.ly
+input/regression/dynamics-avoid-cross-staff-stem-3.ly
+input/regression/dynamics-avoid-cross-staff-stem.ly
+input/regression/dynamics-broken-hairpin.ly
+input/regression/dynamics-context-textspan.ly
+input/regression/dynamics-custom-text-spanner-postfix.ly
+input/regression/dynamics-empty.ly
+input/regression/dynamics-glyphs.ly
+input/regression/dynamics-hairpin-length.ly
+input/regression/dynamics-line.ly
+input/regression/dynamics-outside-staff-priority.ly
+input/regression/dynamics-rest-positioning.ly
+input/regression/dynamics-text-dynamics-context.ly
+input/regression/dynamics-text-left-text-alignment.ly
+input/regression/dynamics-text-right-padding.ly
+input/regression/dynamics-text-spanner-abs-dynamic.ly
+input/regression/dynamics-text-spanner-padding.ly
+input/regression/dynamics-text-spanner-postfix.ly
+input/regression/dynamics-unbound-hairpin.ly
+input/regression/easy-notation-accidentals.ly
+input/regression/easy-notation.ly
+input/regression/empty-chord.ly
+input/regression/episema.ly
+input/regression/event-listener-output.ly
+input/regression/extratoken.ly
+input/regression/fermata-rest-position.ly
+input/regression/ferneyhough-hairpins.ly
+input/regression/figured-bass-alteration.ly
+input/regression/figured-bass-continuation-center.ly
+input/regression/figured-bass-continuation-end-position.ly
+input/regression/figured-bass-continuation-forbid.ly
+input/regression/figured-bass-continuation-modifiers.ly
+input/regression/figured-bass-continuation.ly
+input/regression/figured-bass-durations.ly
+input/regression/figured-bass-extenders-markup.ly
+input/regression/figured-bass-ignore-rest.ly
+input/regression/figured-bass-implicit.ly
+input/regression/figured-bass-slashed-numbers.ly
+input/regression/figured-bass-staff.ly
+input/regression/figured-bass.ly
+input/regression/fill-line-test.ly
+input/regression/filter-translators.ly
+input/regression/finger-chords-accidental.ly
+input/regression/finger-chords-dot.ly
+input/regression/finger-chords-order.ly
+input/regression/finger-chords.ly
+input/regression/fingering-column-snap-radius.ly
+input/regression/fingering-column.ly
+input/regression/fingering-cross-staff.ly
+input/regression/fingering-directions.ly
+input/regression/fingering.ly
+input/regression/flag-stem-begin-position.ly
+input/regression/flags-default.ly
+input/regression/flags-in-scheme.ly
+input/regression/flags-straight-stockhausen-boulez.ly
+input/regression/flags-straight.ly
+input/regression/follow-voice-break.ly
+input/regression/follow-voice-consecutive.ly
+input/regression/font-bogus-ligature.ly
+input/regression/font-family-override.ly
+input/regression/font-kern.ly
+input/regression/font-name-font-size.ly
+input/regression/font-name.ly
+input/regression/font-postscript.ly
+input/regression/footnote-auto-numbering-page-reset.ly
+input/regression/footnote-auto-numbering-vertical-order.ly
+input/regression/footnote-auto-numbering.ly
+input/regression/footnote-break-visibility.ly
+input/regression/footnote-footer-padding.ly
+input/regression/footnote-spanner.ly
+input/regression/footnote.ly
+input/regression/fret-board-alignment.ly
+input/regression/fret-boards.ly
+input/regression/fret-diagram-origins.ly
+input/regression/fret-diagrams-capo.ly
+input/regression/fret-diagrams-dots.ly
+input/regression/fret-diagrams-fingering.ly
+input/regression/fret-diagrams-fret-label.ly
+input/regression/fret-diagrams-landscape.ly
+input/regression/fret-diagrams-opposing-landscape.ly
+input/regression/fret-diagrams-size.ly
+input/regression/fret-diagrams-string-frets.ly
+input/regression/fret-diagrams-string-thickness.ly
+input/regression/fret-diagrams-xo-label.ly
+input/regression/fretboard-chordchanges.ly
+input/regression/full-measure-rest-fermata.ly
+input/regression/general-scheme-bindings.ly
+input/regression/generic-output-property.ly
+input/regression/glissando-accidental.ly
+input/regression/glissando-broken-multiple.ly
+input/regression/glissando-broken-unkilled.ly
+input/regression/glissando-broken.ly
+input/regression/glissando-chord-linebreak.ly
+input/regression/glissando-chord.ly
+input/regression/glissando-consecutive.ly
+input/regression/glissando-cross-staff.ly
+input/regression/glissando-index.ly
+input/regression/glissando-no-break.ly
+input/regression/glissando-skip.ly
+input/regression/glissando.ly
+input/regression/grace-auto-beam-engraver.ly
+input/regression/grace-auto-beam.ly
+input/regression/grace-bar-line.ly
+input/regression/grace-bar-number.ly
+input/regression/grace-beam.ly
+input/regression/grace-direction-polyphony.ly
+input/regression/grace-end-2.ly
+input/regression/grace-end.ly
+input/regression/grace-nest1.ly
+input/regression/grace-nest2.ly
+input/regression/grace-nest3.ly
+input/regression/grace-nest4.ly
+input/regression/grace-nest5.ly
+input/regression/grace-part-combine.ly
+input/regression/grace-partial.ly
+input/regression/grace-slashed-no-slur.ly
+input/regression/grace-staff-length.ly
+input/regression/grace-start.ly
+input/regression/grace-stem-length.ly
+input/regression/grace-stems.ly
+input/regression/grace-sync.ly
+input/regression/grace-types.ly
+input/regression/grace-unfold-repeat.ly
+input/regression/grace-volta-repeat-2.ly
+input/regression/grace-volta-repeat.ly
+input/regression/grace.ly
+input/regression/graphviz.ly
+input/regression/grid-lines.ly
+input/regression/grob-indirect-tweak.ly
+input/regression/grob-tweak.ly
+input/regression/hairpin-arpeggio.ly
+input/regression/hairpin-barline-break.ly
+input/regression/hairpin-circled.ly
+input/regression/hairpin-clef.ly
+input/regression/hairpin-dashed.ly
+input/regression/hairpin-ending.ly
+input/regression/hairpin-key-signature.ly
+input/regression/hairpin-neighboring-span-dynamics.ly
+input/regression/hairpin-span-bar.ly
+input/regression/hairpin-to-barline-mark.ly
+input/regression/hairpin-to-barline.ly
+input/regression/hairpin-to-rest.ly
+input/regression/hara-kiri-alive-with.ly
+input/regression/hara-kiri-drumstaff.ly
+input/regression/hara-kiri-keep-previous-settings.ly
+input/regression/hara-kiri-percent-repeat.ly
+input/regression/hara-kiri-rhythmicstaff.ly
+input/regression/hara-kiri-staff.ly
+input/regression/hara-kiri-stanza-number.ly
+input/regression/hara-kiri-tabstaff.ly
+input/regression/harp-pedals-sanity-checks.ly
+input/regression/harp-pedals-tweaking.ly
+input/regression/harp-pedals.ly
+input/regression/header-book-multiple.ly
+input/regression/header-book-multiplescores.ly
+input/regression/header-bookpart-multiple.ly
+input/regression/header-cyclic-reference.ly
+input/regression/header-score-multiple.ly
+input/regression/header-toplevel-multiple.ly
+input/regression/horizontal-bracket-break.ly
+input/regression/horizontal-bracket-tweak.ly
+input/regression/horizontal-bracket.ly
+input/regression/id.ly
+input/regression/identifier-following-chordmode.ly
+input/regression/identifier-quoted.ly
+input/regression/identifiers.ly
+input/regression/in-note.ly
+input/regression/incipit.ly
+input/regression/include-string.ly
+input/regression/incompatible-stem-warning.ly
+input/regression/instrument-cue-name.ly
+input/regression/instrument-name-dynamic.ly
+input/regression/instrument-name-groups.ly
+input/regression/instrument-name-hara-kiri.ly
+input/regression/instrument-name-markup.ly
+input/regression/instrument-name-partial.ly
+input/regression/instrument-name-pedal-lyrics.ly
+input/regression/instrument-name-volta.ly
+input/regression/instrument-name-x-align.ly
+input/regression/instrument-name.ly
+input/regression/instrument-switch-invalid-warning.ly
+input/regression/instrument-switch.ly
+input/regression/invalid-engraver.ly
+input/regression/key-clefs.ly
+input/regression/key-signature-cancellation.ly
+input/regression/key-signature-left-edge.ly
+input/regression/key-signature-padding.ly
+input/regression/key-signature-scordatura-persist.ly
+input/regression/key-signature-scordatura.ly
+input/regression/key-signature-space.ly
+input/regression/keys.ly
+input/regression/kievan-notation.ly
+input/regression/laissez-vibrer-arpeggio.ly
+input/regression/laissez-vibrer-chords.ly
+input/regression/laissez-vibrer-tie-beam.ly
+input/regression/laissez-vibrer-tie-head-direction.ly
+input/regression/laissez-vibrer-ties.ly
+input/regression/landscape.ly
+input/regression/layout-from.ly
+input/regression/ledger-line-minimum.ly
+input/regression/ledger-line-shorten.ly
+input/regression/ledger-lines-dynamics.ly
+input/regression/ledger-lines-varying-staves.ly
+input/regression/les-nereides.ly
+input/regression/ligature-bracket.ly
+input/regression/lily-in-scheme.ly
+input/regression/lilypond-book/GNUmakefile
+input/regression/lilypond-book/html-include-space-after-tag.html
+input/regression/lilypond-book/html-inline-newline-during-tag.html
+input/regression/lilypond-book/html-inline-no-options.html
+input/regression/lilypond-book/html-inline-option.html
+input/regression/lilypond-book/html-lilypond-block.html
+input/regression/lilypond-book/html-musicxml-file-compressed.htmly
+input/regression/lilypond-book/html-musicxml-file-options.htmly
+input/regression/lilypond-book/html-musicxml-file.htmly
+input/regression/lilypond-book/html-newline-after-tag.html
+input/regression/lilypond-book/html-space-after-tag.html
+input/regression/lilypond-book/html-version-newline.html
+input/regression/lilypond-book/html-version.html
+input/regression/lilypond-book/include.ly
+input/regression/lilypond-book/include.mxl
+input/regression/lilypond-book/include.xml
+input/regression/lilypond-book/include/def.tex
+input/regression/lilypond-book/include/example.ly
+input/regression/lilypond-book/include/myvar.ily
+input/regression/lilypond-book/include2.ly
+input/regression/lilypond-book/include3.ily
+input/regression/lilypond-book/suffix-html.html
+input/regression/lilypond-book/suffix-htmly.htmly
+input/regression/lilypond-book/suffix-itely.itely
+input/regression/lilypond-book/suffix-latex.latex
+input/regression/lilypond-book/suffix-lytex.lytex
+input/regression/lilypond-book/suffix-lyxml.lyxml
+input/regression/lilypond-book/suffix-tely.tely
+input/regression/lilypond-book/suffix-tex.tex
+input/regression/lilypond-book/suffix-texi.texi
+input/regression/lilypond-book/suffix-texinfo.texinfo
+input/regression/lilypond-book/suffix-xml.xml
+input/regression/lilypond-book/tex-auto-linebreak.lytex
+input/regression/lilypond-book/tex-comment-firstline.lytex
+input/regression/lilypond-book/tex-comments.lytex
+input/regression/lilypond-book/tex-compatibility-mode.lytex
+input/regression/lilypond-book/tex-footnote.lytex
+input/regression/lilypond-book/tex-fragment.lytex
+input/regression/lilypond-book/tex-graphics-package-added.lytex
+input/regression/lilypond-book/tex-include-file.lytex
+input/regression/lilypond-book/tex-include-options.lytex
+input/regression/lilypond-book/tex-include-preamble.lytex
+input/regression/lilypond-book/tex-inline-lilypond.lytex
+input/regression/lilypond-book/tex-lilypond-block.lytex
+input/regression/lilypond-book/tex-lilypond-inside-itemize.lytex
+input/regression/lilypond-book/tex-lilypond-inside-table.lytex
+input/regression/lilypond-book/tex-lilypondversion.lytex
+input/regression/lilypond-book/tex-musicxml-file-options.lytex
+input/regression/lilypond-book/tex-musicxml-file.lytex
+input/regression/lilypond-book/tex-paragraphs.lytex
+input/regression/lilypond-book/tex-snippet-options.lytex
+input/regression/lilypond-book/tex-twocolumn.lytex
+input/regression/lilypond-book/tex-verbatim.lytex
+input/regression/lilypond-book/tex-version.lytex
+input/regression/lilypond-book/texinfo-include-file.tely
+input/regression/lilypond-book/texinfo-include-language-detection-included.itely
+input/regression/lilypond-book/texinfo-include-language-detection.tely
+input/regression/lilypond-book/texinfo-language-detection.tely
+input/regression/lilypond-book/texinfo-musicxml-file-options.tely
+input/regression/lilypond-book/texinfo-musicxml-file.tely
+input/regression/lilypond-book/texinfo-papersize-docs.tely
+input/regression/line-arrows.ly
+input/regression/line-dash-small-period.ly
+input/regression/line-dashed-period.ly
+input/regression/line-style-zigzag-spacing.ly
+input/regression/line-style.ly
+input/regression/loglevels.ly
+input/regression/lyric-combine-derived-voice.ly
+input/regression/lyric-combine-empty-warning.ly
+input/regression/lyric-combine-new.ly
+input/regression/lyric-combine-polyphonic.ly
+input/regression/lyric-combine-switch-voice-2.ly
+input/regression/lyric-combine-switch-voice.ly
+input/regression/lyric-combine.ly
+input/regression/lyric-extender-broken.ly
+input/regression/lyric-extender-completion.ly
+input/regression/lyric-extender-includegraces.ly
+input/regression/lyric-extender-no-heads.ly
+input/regression/lyric-extender-rest.ly
+input/regression/lyric-extender-right-margin.ly
+input/regression/lyric-extender.ly
+input/regression/lyric-hyphen-break.ly
+input/regression/lyric-hyphen-grace.ly
+input/regression/lyric-hyphen-retain.ly
+input/regression/lyric-hyphen.ly
+input/regression/lyric-ignore-melisma-alignment.ly
+input/regression/lyric-melisma-alignment.ly
+input/regression/lyric-melisma-manual.ly
+input/regression/lyric-melisma-melisma.ly
+input/regression/lyric-no-association-rhythm.ly
+input/regression/lyric-octave-eight.ly
+input/regression/lyric-phrasing.ly
+input/regression/lyric-tie.ly
+input/regression/lyric-tweak.ly
+input/regression/lyrics-after-grace.ly
+input/regression/lyrics-aligned-above-stay-close-to-staff.ly
+input/regression/lyrics-bar.ly
+input/regression/lyrics-includegraces.ly
+input/regression/lyrics-melisma-beam.ly
+input/regression/lyrics-no-notes.ly
+input/regression/lyrics-pass-under-bar.ly
+input/regression/lyrics-spanbar.ly
+input/regression/lyrics-tenor-clef.ly
+input/regression/make-relative-copies.ly
+input/regression/make-relative-music.ly
+input/regression/make-relative.ly
+input/regression/markup-arrows.ly
+input/regression/markup-bidi-explicit-embedding.ly
+input/regression/markup-bidi-explicit-overrides.ly
+input/regression/markup-bidi-implicit-marks.ly
+input/regression/markup-bidi-pango.ly
+input/regression/markup-brace-warning.ly
+input/regression/markup-braces.ly
+input/regression/markup-center-align-nocollision.ly
+input/regression/markup-column-align.ly
+input/regression/markup-commands.ly
+input/regression/markup-cyclic-reference.ly
+input/regression/markup-depth-non-terminating.ly
+input/regression/markup-diacritic-marks.ly
+input/regression/markup-eps.ly
+input/regression/markup-eyeglasses.ly
+input/regression/markup-frame-text.ly
+input/regression/markup-line-styles.ly
+input/regression/markup-line-thickness.ly
+input/regression/markup-lines-identifier.ly
+input/regression/markup-lines.ly
+input/regression/markup-music-glyph.ly
+input/regression/markup-note-dot.ly
+input/regression/markup-note-grob-style.ly
+input/regression/markup-note-styles.ly
+input/regression/markup-note.ly
+input/regression/markup-path-fill.ly
+input/regression/markup-path-linecap.ly
+input/regression/markup-path-linejoin.ly
+input/regression/markup-path.ly
+input/regression/markup-rest-styles.ly
+input/regression/markup-rest.ly
+input/regression/markup-scheme.ly
+input/regression/markup-score-multi-system.ly
+input/regression/markup-score.ly
+input/regression/markup-special-characters.ly
+input/regression/markup-stack.ly
+input/regression/markup-syntax.ly
+input/regression/markup-user.ly
+input/regression/markup-word-wrap.ly
+input/regression/measure-counter-broken.ly
+input/regression/measure-counter.ly
+input/regression/measure-grouping.ly
+input/regression/mensural-ligatures.ly
+input/regression/mensural.ly
+input/regression/metronome-mark-broken-bound.ly
+input/regression/metronome-mark-loose-column.ly
+input/regression/metronome-marking-align-order.ly
+input/regression/metronome-marking-break-align.ly
+input/regression/metronome-marking.ly
+input/regression/metronome-multimeasure-rest-no-segfault.ly
+input/regression/metronome-parenthesized.ly
+input/regression/metronome-range.ly
+input/regression/metronome-text.ly
+input/regression/midi-drums.ly
+input/regression/midi-dynamics.ly
+input/regression/midi-grace-after-tie.ly
+input/regression/midi-grace.ly
+input/regression/midi-key-signature.ly
+input/regression/midi-lyric-barcheck.ly
+input/regression/midi-microtone-off.ly
+input/regression/midi-microtone.ly
+input/regression/midi-notes.ly
+input/regression/midi-partial.ly
+input/regression/midi-pedal.ly
+input/regression/midi-scales.ly
+input/regression/midi-transposition.ly
+input/regression/midi-tuplets.ly
+input/regression/midi-unisons.ly
+input/regression/midi-volume-equaliser.ly
+input/regression/midi/GNUmakefile
+input/regression/midi/key-initial.ly
+input/regression/midi/key-option-all-staves.ly
+input/regression/midi/key-option.ly
+input/regression/midi/lyrics-addlyrics.ly
+input/regression/midi/partcombine.ly
+input/regression/midi/quantize-duration-2.ly
+input/regression/midi/quantize-duration.ly
+input/regression/midi/quantize-start.ly
+input/regression/midi/rest-dynamic.ly
+input/regression/midi/rest.ly
+input/regression/midi/staff-map-instrument.ly
+input/regression/midi/staff-map-voice.ly
+input/regression/midi/voice-2.ly
+input/regression/midi/voice-4.ly
+input/regression/midi/voice-5.ly
+input/regression/minimum-length-end-line.ly
+input/regression/mm-rests2.ly
+input/regression/modal-transforms.ly
+input/regression/modern-tab-clef-scaled.ly
+input/regression/modern-tab-clef.ly
+input/regression/morgenlied.ly
+input/regression/mozart-hrn-3.ly
+input/regression/mozart-hrn3-allegro.ily
+input/regression/mozart-hrn3-defs.ily
+input/regression/mozart-hrn3-romanze.ily
+input/regression/mozart-hrn3-rondo.ily
+input/regression/multi-measure-rest-center.ly
+input/regression/multi-measure-rest-center2.ly
+input/regression/multi-measure-rest-grace.ly
+input/regression/multi-measure-rest-instr-name.ly
+input/regression/multi-measure-rest-multi-staff-center.ly
+input/regression/multi-measure-rest-spacing.ly
+input/regression/multi-measure-rest-staff-position.ly
+input/regression/multi-measure-rest-standard.ly
+input/regression/multi-measure-rest-text.ly
+input/regression/multi-measure-rest-tweaks.ly
+input/regression/multi-measure-rest.ly
+input/regression/multiple-time-sig-settings.ly
+input/regression/music-function-end-spanners.ly
+input/regression/music-function-post-event.ly
+input/regression/music-function-string-markup.ly
+input/regression/music-function.ly
+input/regression/music-map.ly
+input/regression/musicxml/00-Introduction.itexi
+input/regression/musicxml/01-Pitches.itexi
+input/regression/musicxml/01a-Pitches-Pitches.xml
+input/regression/musicxml/01b-Pitches-Intervals.xml
+input/regression/musicxml/01c-Pitches-NoVoiceElement.xml
+input/regression/musicxml/01d-Pitches-Microtones.xml
+input/regression/musicxml/01e-Pitches-ParenthesizedAccidentals.xml
+input/regression/musicxml/01f-Pitches-ParenthesizedMicrotoneAccidentals.xml
+input/regression/musicxml/02-Rests.itexi
+input/regression/musicxml/02a-Rests-Durations.xml
+input/regression/musicxml/02b-Rests-PitchedRests.xml
+input/regression/musicxml/02c-Rests-MultiMeasureRests.xml
+input/regression/musicxml/02d-Rests-Multimeasure-TimeSignatures.xml
+input/regression/musicxml/02e-Rests-NoType.xml
+input/regression/musicxml/03-Rhythm.itexi
+input/regression/musicxml/03a-Rhythm-Durations.xml
+input/regression/musicxml/03b-Rhythm-Backup.xml
+input/regression/musicxml/03c-Rhythm-DivisionChange.xml
+input/regression/musicxml/03d-Rhythm-DottedDurations-Factors.xml
+input/regression/musicxml/11-TimeSignatures.itexi
+input/regression/musicxml/11a-TimeSignatures.xml
+input/regression/musicxml/11b-TimeSignatures-NoTime.xml
+input/regression/musicxml/11c-TimeSignatures-CompoundSimple.xml
+input/regression/musicxml/11d-TimeSignatures-CompoundMultiple.xml
+input/regression/musicxml/11e-TimeSignatures-CompoundMixed.xml
+input/regression/musicxml/11f-TimeSignatures-SymbolMeaning.xml
+input/regression/musicxml/11g-TimeSignatures-SingleNumber.xml
+input/regression/musicxml/11h-TimeSignatures-SenzaMisura.xml
+input/regression/musicxml/12-Clefs.itexi
+input/regression/musicxml/12a-Clefs.xml
+input/regression/musicxml/12b-Clefs-NoKeyOrClef.xml
+input/regression/musicxml/13-KeySignatures.itexi
+input/regression/musicxml/13a-KeySignatures.xml
+input/regression/musicxml/13b-KeySignatures-ChurchModes.xml
+input/regression/musicxml/13c-KeySignatures-NonTraditional.xml
+input/regression/musicxml/13d-KeySignatures-Microtones.xml
+input/regression/musicxml/14-Staff-Details.itexi
+input/regression/musicxml/14a-StaffDetails-LineChanges.xml
+input/regression/musicxml/21-Chords.itexi
+input/regression/musicxml/21a-Chord-Basic.xml
+input/regression/musicxml/21b-Chords-TwoNotes.xml
+input/regression/musicxml/21c-Chords-ThreeNotesDuration.xml
+input/regression/musicxml/21d-Chords-SchubertStabatMater.xml
+input/regression/musicxml/21e-Chords-PickupMeasures.xml
+input/regression/musicxml/21f-Chord-ElementInBetween.xml
+input/regression/musicxml/22-NoteSettings.itexi
+input/regression/musicxml/22a-Noteheads.xml
+input/regression/musicxml/22b-Staff-Notestyles.xml
+input/regression/musicxml/22c-Noteheads-Chords.xml
+input/regression/musicxml/22d-Parenthesized-Noteheads.xml
+input/regression/musicxml/23-Tuplets.itexi
+input/regression/musicxml/23a-Tuplets.xml
+input/regression/musicxml/23b-Tuplets-Styles.xml
+input/regression/musicxml/23c-Tuplet-Display-NonStandard.xml
+input/regression/musicxml/23d-Tuplets-Nested.xml
+input/regression/musicxml/23e-Tuplets-Tremolo.xml
+input/regression/musicxml/23f-Tuplets-DurationButNoBracket.xml
+input/regression/musicxml/24-Grace-Notes.itexi
+input/regression/musicxml/24a-GraceNotes.xml
+input/regression/musicxml/24b-ChordAsGraceNote.xml
+input/regression/musicxml/24c-GraceNote-MeasureEnd.xml
+input/regression/musicxml/24d-AfterGrace.xml
+input/regression/musicxml/24e-GraceNote-StaffChange.xml
+input/regression/musicxml/24f-GraceNote-Slur.xml
+input/regression/musicxml/31-Directions.itexi
+input/regression/musicxml/31a-Directions.xml
+input/regression/musicxml/31b-Directions-MultimeasureRests.xml.broken
+input/regression/musicxml/31c-MetronomeMarks.xml
+input/regression/musicxml/32-Notations-Articulations.itexi
+input/regression/musicxml/32a-Notations.xml
+input/regression/musicxml/32b-Articulations-Texts.xml
+input/regression/musicxml/32c-MultipleNotationChildren.xml
+input/regression/musicxml/32d-Arpeggio.xml
+input/regression/musicxml/33-Spanners.itexi
+input/regression/musicxml/33a-Spanners.xml
+input/regression/musicxml/33b-Spanners-Tie.xml
+input/regression/musicxml/33c-Spanners-Slurs.xml
+input/regression/musicxml/33d-Spanners-OctaveShifts.xml
+input/regression/musicxml/33e-Spanners-OctaveShifts-InvalidSize.xml
+input/regression/musicxml/33f-Trill-EndingOnGraceNote.xml
+input/regression/musicxml/33g-Slur-ChordedNotes.xml
+input/regression/musicxml/33h-Spanners-Glissando.xml
+input/regression/musicxml/33i-Ties-NotEnded.xml
+input/regression/musicxml/41-Multiple-Parts.itexi
+input/regression/musicxml/41a-MultiParts-Partorder.xml
+input/regression/musicxml/41b-MultiParts-MoreThan10.xml
+input/regression/musicxml/41c-StaffGroups.xml
+input/regression/musicxml/41d-StaffGroups-Nested.xml
+input/regression/musicxml/41e-StaffGroups-InstrumentNames-Linebroken.xml
+input/regression/musicxml/41f-StaffGroups-Overlapping.xml
+input/regression/musicxml/41g-PartNoId.xml
+input/regression/musicxml/41h-TooManyParts.xml
+input/regression/musicxml/41i-PartNameDisplay-Override.xml
+input/regression/musicxml/42-MultiVoice-Parts.itexi
+input/regression/musicxml/42a-MultiVoice-TwoVoicesOnStaff-Lyrics.xml
+input/regression/musicxml/42b-MultiVoice-MidMeasureClefChange.xml
+input/regression/musicxml/43-MultiStaff-Parts.itexi
+input/regression/musicxml/43a-PianoStaff.xml
+input/regression/musicxml/43b-MultiStaff-DifferentKeys.xml
+input/regression/musicxml/43c-MultiStaff-DifferentKeysAfterBackup.xml
+input/regression/musicxml/43d-MultiStaff-StaffChange.xml
+input/regression/musicxml/43e-Multistaff-ClefDynamics.xml
+input/regression/musicxml/45-Repeats.itexi
+input/regression/musicxml/45a-SimpleRepeat.xml
+input/regression/musicxml/45b-RepeatWithAlternatives.xml
+input/regression/musicxml/45c-RepeatMultipleTimes.xml
+input/regression/musicxml/45d-Repeats-Nested-Alternatives.xml
+input/regression/musicxml/45e-Repeats-Nested-Alternatives.xml
+input/regression/musicxml/45f-Repeats-InvalidEndings.xml
+input/regression/musicxml/45g-Repeats-NotEnded.xml
+input/regression/musicxml/46-Measures.itexi
+input/regression/musicxml/46a-Barlines.xml
+input/regression/musicxml/46b-MidmeasureBarline.xml
+input/regression/musicxml/46c-Midmeasure-Clef.xml
+input/regression/musicxml/46d-PickupMeasure-ImplicitMeasures.xml
+input/regression/musicxml/46e-PickupMeasure-SecondVoiceStartsLater.xml
+input/regression/musicxml/46f-IncompleteMeasures.xml
+input/regression/musicxml/46g-PickupMeasure-Chordnames-FiguredBass.xml
+input/regression/musicxml/51-Header.itexi
+input/regression/musicxml/51b-Header-Quotes.xml
+input/regression/musicxml/51c-MultipleRights.xml
+input/regression/musicxml/51d-EmptyTitle.xml
+input/regression/musicxml/52-PageLayout.itexi
+input/regression/musicxml/52a-PageLayout.xml
+input/regression/musicxml/52b-Breaks.xml
+input/regression/musicxml/61-Lyrics.itexi
+input/regression/musicxml/61a-Lyrics.xml
+input/regression/musicxml/61b-MultipleLyrics.xml
+input/regression/musicxml/61c-Lyrics-Pianostaff.xml
+input/regression/musicxml/61d-Lyrics-Melisma.xml
+input/regression/musicxml/61e-Lyrics-Chords.xml
+input/regression/musicxml/61f-Lyrics-GracedNotes.xml
+input/regression/musicxml/61g-Lyrics-NameNumber.xml
+input/regression/musicxml/61h-Lyrics-BeamsMelismata.xml
+input/regression/musicxml/61i-Lyrics-Chords.xml
+input/regression/musicxml/61j-Lyrics-Elisions.xml
+input/regression/musicxml/61k-Lyrics-SpannersExtenders.xml
+input/regression/musicxml/71-Guitar.itexi
+input/regression/musicxml/71a-Chordnames.xml
+input/regression/musicxml/71c-ChordsFrets.xml
+input/regression/musicxml/71d-ChordsFrets-Multistaff.xml
+input/regression/musicxml/71e-TabStaves.xml
+input/regression/musicxml/71f-AllChordTypes.xml
+input/regression/musicxml/71g-MultipleChordnames.xml
+input/regression/musicxml/72-TransposingInstruments.itexi
+input/regression/musicxml/72a-TransposingInstruments.xml
+input/regression/musicxml/72b-TransposingInstruments-Full.xml
+input/regression/musicxml/72c-TransposingInstruments-Change.xml
+input/regression/musicxml/73-Percussion.itexi
+input/regression/musicxml/73a-Percussion.xml
+input/regression/musicxml/74-Figured-Bass.itexi
+input/regression/musicxml/74a-FiguredBass.xml
+input/regression/musicxml/75-OtherInstruments.itexi
+input/regression/musicxml/75a-AccordionRegistrations.xml
+input/regression/musicxml/90-Compressed-MusicXML.itexi
+input/regression/musicxml/90a-Compressed-MusicXML.mxl
+input/regression/musicxml/99-Compatibility.itexi
+input/regression/musicxml/99a-Sibelius5-IgnoreBeaming.xml
+input/regression/musicxml/99b-Lyrics-BeamsMelismata-IgnoreBeams.xml
+input/regression/musicxml/GNUmakefile
+input/regression/musicxml/LICENSE
+input/regression/musicxml/book-musicxml-testsuite.py
+input/regression/nested-fill-lines.ly
+input/regression/newaddlyrics-music-identifiers.ly
+input/regression/newaddlyrics.ly
+input/regression/no-header.ly
+input/regression/no-staff.ly
+input/regression/non-centered-bar-lines.ly
+input/regression/non-empty-text.ly
+input/regression/note-head-aiken.ly
+input/regression/note-head-chord.ly
+input/regression/note-head-funk.ly
+input/regression/note-head-harmonic-dotted.ly
+input/regression/note-head-harmonic-whole.ly
+input/regression/note-head-harmonic.ly
+input/regression/note-head-sacred-harp.ly
+input/regression/note-head-shape-minor.ly
+input/regression/note-head-solfa.ly
+input/regression/note-head-southern-harmony.ly
+input/regression/note-head-style.ly
+input/regression/note-head-walker.ly
+input/regression/note-line.ly
+input/regression/note-names-context.ly
+input/regression/note-names.ly
+input/regression/number-staff-lines.ly
+input/regression/offsets.ly
+input/regression/one-line-breaking.ly
+input/regression/optimal-page-breaking-hstretch.ly
+input/regression/option-help.ly
+input/regression/optional-args-backup.ly
+input/regression/optional-args-predicate.ly
+input/regression/optional-args.ly
+input/regression/ottava-broken.ly
+input/regression/ottava-edge.ly
+input/regression/ottava.ly
+input/regression/outside-staff-placement-directive.ly
+input/regression/override-nest-scheme.ly
+input/regression/override-nest.ly
+input/regression/page-break-between-scores.ly
+input/regression/page-break-turn-toplevel.ly
+input/regression/page-break-warn-forbidden.ly
+input/regression/page-breaking-end-of-score.ly
+input/regression/page-breaking-good-estimation.ly
+input/regression/page-breaking-markup-padding.ly
+input/regression/page-breaking-markup-padding2.ly
+input/regression/page-breaking-markup-padding3.ly
+input/regression/page-breaking-max-systems-per-page.ly
+input/regression/page-breaking-min-distance.ly
+input/regression/page-breaking-min-distance2.ly
+input/regression/page-breaking-min-distance3.ly
+input/regression/page-breaking-min-systems-per-page1.ly
+input/regression/page-breaking-min-systems-per-page2.ly
+input/regression/page-breaking-outside-staff-estimation.ly
+input/regression/page-breaking-outside-staff-estimation2.ly
+input/regression/page-breaking-page-count1.ly
+input/regression/page-breaking-page-count2.ly
+input/regression/page-breaking-page-count3.ly
+input/regression/page-breaking-rehearsal-mark.ly
+input/regression/page-breaking-system-count-forced-break.ly
+input/regression/page-breaking-systems-per-page.ly
+input/regression/page-breaks.ly
+input/regression/page-headers-and-footers.ly
+input/regression/page-label-loose-column.ly
+input/regression/page-label.ly
+input/regression/page-layout-manual-position.ly
+input/regression/page-layout.ly
+input/regression/page-links-nolabel.ly
+input/regression/page-links.ly
+input/regression/page-minimal-page-breaking-last-page.ly
+input/regression/page-minimal-page-breaking.ly
+input/regression/page-overflow-compression.ly
+input/regression/page-spacing-bass-figures.ly
+input/regression/page-spacing-bottom-spring.ly
+input/regression/page-spacing-dynamics.ly
+input/regression/page-spacing-markups.ly
+input/regression/page-spacing-nonstaff-lines-and-markup.ly
+input/regression/page-spacing-nonstaff-lines-between-systems.ly
+input/regression/page-spacing-nonstaff-lines-between.ly
+input/regression/page-spacing-nonstaff-lines-bottom.ly
+input/regression/page-spacing-nonstaff-lines-header-padding.ly
+input/regression/page-spacing-nonstaff-lines-independent.ly
+input/regression/page-spacing-nonstaff-lines-skylines.ly
+input/regression/page-spacing-nonstaff-lines-top.ly
+input/regression/page-spacing-nonstaff-lines-unrelated.ly
+input/regression/page-spacing-rehearsal-mark.ly
+input/regression/page-spacing-staff-group-hara-kiri.ly
+input/regression/page-spacing-staff-group-nested.ly
+input/regression/page-spacing-staff-group.ly
+input/regression/page-spacing-stretchability.ly
+input/regression/page-spacing-system-count-overfull.ly
+input/regression/page-spacing-system-count.ly
+input/regression/page-spacing-tall-headfoot.ly
+input/regression/page-spacing-top-markup-spacing.ly
+input/regression/page-spacing-top-system-spacing.ly
+input/regression/page-spacing.ly
+input/regression/page-top-space.ly
+input/regression/page-turn-page-breaking-auto-first-page.ly
+input/regression/page-turn-page-breaking-auto-first-page2.ly
+input/regression/page-turn-page-breaking-badturns.ly
+input/regression/page-turn-page-breaking-repeats.ly
+input/regression/page-turn-page-breaking.ly
+input/regression/palm-mute.ly
+input/regression/paper-default-margins-a6.ly
+input/regression/paper-default-margins-def.ly
+input/regression/paper-margins-consistency.ly
+input/regression/paper-margins-left-margin.ly
+input/regression/paper-margins-line-width.ly
+input/regression/paper-margins-no-checks.ly
+input/regression/paper-margins-overrun.ly
+input/regression/paper-margins-right-margin.ly
+input/regression/paper-margins.ly
+input/regression/paper-nested-override.ly
+input/regression/paper-nested-override2.ly
+input/regression/paper-twosided-bcorr.ly
+input/regression/paper-twosided.ly
+input/regression/parenthesize-markup.ly
+input/regression/parenthesize-singlenotes-chords-rests.ly
+input/regression/parenthesize.ly
+input/regression/part-combine-3voices.ly
+input/regression/part-combine-a2.ly
+input/regression/part-combine-cross.ly
+input/regression/part-combine-force-mmrest-position.ly
+input/regression/part-combine-force-once.ly
+input/regression/part-combine-force.ly
+input/regression/part-combine-global.ly
+input/regression/part-combine-markup.ly
+input/regression/part-combine-mmrest-after-solo.ly
+input/regression/part-combine-mmrest-apart.ly
+input/regression/part-combine-solo-end.ly
+input/regression/part-combine-solo-global.ly
+input/regression/part-combine-solo.ly
+input/regression/part-combine-text-wait.ly
+input/regression/part-combine-text.ly
+input/regression/part-combine-tuplet-end.ly
+input/regression/part-combine-tuplet-single.ly
+input/regression/part-combine.ly
+input/regression/partial-polymetric.ly
+input/regression/pdfmark-metadata-unicode.ly
+input/regression/pdfmark-metadata.ly
+input/regression/pedal-bracket.ly
+input/regression/pedal-end.ly
+input/regression/pedal-ped.ly
+input/regression/phrasing-slur-dash.ly
+input/regression/phrasing-slur-multiple.ly
+input/regression/phrasing-slur-slur-avoid.ly
+input/regression/phrasing-slur-tuplet.ly
+input/regression/point-and-click-types.ly
+input/regression/predefined-fretboards-transpose.ly
+input/regression/predefined-fretboards.ly
+input/regression/prefatory-empty-spacing.ly
+input/regression/prefatory-separation.ly
+input/regression/prefatory-spacing-matter.ly
+input/regression/profile-property-access.ly
+input/regression/property-grace-polyphony.ly
+input/regression/property-nested-override.ly
+input/regression/property-nested-revert.ly
+input/regression/property-once.ly
+input/regression/property-unset.ly
+input/regression/push-to-tag.ly
+input/regression/quote-cue-during.ly
+input/regression/quote-cue-event-types.ly
+input/regression/quote-cyclic.ly
+input/regression/quote-during-subvoice.ly
+input/regression/quote-during.ly
+input/regression/quote-grace.ly
+input/regression/quote-kill-cues.ly
+input/regression/quote-overrides.ly
+input/regression/quote-tie.ly
+input/regression/quote-transposition.ly
+input/regression/quote-tuplet-end.ly
+input/regression/quote-tuplet.ly
+input/regression/quote.ly
+input/regression/ragged-bottom-one-page.ly
+input/regression/ragged-right-compressed.ly
+input/regression/ragged-right-disabled.ly
+input/regression/ragged-right-one-line.ly
+input/regression/rehearsal-mark-align-priority.ly
+input/regression/rehearsal-mark-align-staff-context.ly
+input/regression/rehearsal-mark-align.ly
+input/regression/rehearsal-mark-direction.ly
+input/regression/rehearsal-mark-final-score.ly
+input/regression/rehearsal-mark-letter.ly
+input/regression/rehearsal-mark-number.ly
+input/regression/relative-repeat.ly
+input/regression/remove-empty-context-mod.ly
+input/regression/remove-empty-staves-auto-knee.ly
+input/regression/remove-empty-staves-with-rests.ly
+input/regression/repeat-line-break.ly
+input/regression/repeat-percent-count-visibility.ly
+input/regression/repeat-percent-count.ly
+input/regression/repeat-percent-grace.ly
+input/regression/repeat-percent-kerning.ly
+input/regression/repeat-percent-skipbars.ly
+input/regression/repeat-percent.ly
+input/regression/repeat-sign-global-size-10.ly
+input/regression/repeat-sign-global-size-30.ly
+input/regression/repeat-sign-global-size-5.ly
+input/regression/repeat-sign-layout-size.ly
+input/regression/repeat-sign.ly
+input/regression/repeat-slash-mixed.ly
+input/regression/repeat-slash-multi.ly
+input/regression/repeat-slash.ly
+input/regression/repeat-tie.ly
+input/regression/repeat-tremolo-beams.ly
+input/regression/repeat-tremolo-chord-rep.ly
+input/regression/repeat-tremolo-dots.ly
+input/regression/repeat-tremolo-one-note-articulation.ly
+input/regression/repeat-tremolo-three-notes.ly
+input/regression/repeat-unfold-all.ly
+input/regression/repeat-unfold-tremolo.ly
+input/regression/repeat-unfold.ly
+input/regression/repeat-volta-skip-alternatives.ly
+input/regression/repeat-volta.ly
+input/regression/rest-collision-beam-note.ly
+input/regression/rest-collision-beam-quantized.ly
+input/regression/rest-collision-beam-restdir.ly
+input/regression/rest-collision-beam.ly
+input/regression/rest-collision-note-duration.ly
+input/regression/rest-collision.ly
+input/regression/rest-dot-position.ly
+input/regression/rest-ledger.ly
+input/regression/rest-note-collision.ly
+input/regression/rest-on-nonstandard-staff.ly
+input/regression/rest-pitch.ly
+input/regression/rest-pitched-beam.ly
+input/regression/rest-polyphonic-2.ly
+input/regression/rest-polyphonic.ly
+input/regression/rest-positioning.ly
+input/regression/rest.ly
+input/regression/rhythmic-staff.ly
+input/regression/safe.ly
+input/regression/scheme-book-scores.ly
+input/regression/scheme-engraver-instance.ly
+input/regression/scheme-engraver.ly
+input/regression/scheme-text-spanner.ly
+input/regression/score-text.ly
+input/regression/script-accidental-collision.ly
+input/regression/script-center-seconds.ly
+input/regression/script-collision.ly
+input/regression/script-horizontal-slur.ly
+input/regression/script-shift.ly
+input/regression/script-stack-horizontal.ly
+input/regression/script-stack-order.ly
+input/regression/script-stacked.ly
+input/regression/script-stem-tremolo.ly
+input/regression/script-tie-collision.ly
+input/regression/semi-tie-cross-staff.ly
+input/regression/semi-tie-manual-direction.ly
+input/regression/set-once.ly
+input/regression/shape-other-curves.ly
+input/regression/shape-slurs.ly
+input/regression/shift-durations-negative-dots.ly
+input/regression/shorthands.ly
+input/regression/size11.ly
+input/regression/size13.ly
+input/regression/size16.ly
+input/regression/size20.ly
+input/regression/size23.ly
+input/regression/size26.ly
+input/regression/skip-of-length.ly
+input/regression/skiptypesetting-all-true.ly
+input/regression/skiptypesetting-bar-check.ly
+input/regression/skiptypesetting-multimeasurerest.ly
+input/regression/skiptypesetting-show-first-and-last.ly
+input/regression/skiptypesetting-show-first.ly
+input/regression/skiptypesetting-show-last.ly
+input/regression/skiptypesetting-tuplet.ly
+input/regression/skyline-debug.ly
+input/regression/skyline-horizontal-padding.ly
+input/regression/skyline-point-extent.ly
+input/regression/skyline-vertical-placement.ly
+input/regression/skyline-vertical-spacing.ly
+input/regression/slur-avoid.ly
+input/regression/slur-broken-trend.ly
+input/regression/slur-clef.ly
+input/regression/slur-cross-staff-beam.ly
+input/regression/slur-cross-staff.ly
+input/regression/slur-dash.ly
+input/regression/slur-dot-collision.ly
+input/regression/slur-dots.ly
+input/regression/slur-double.ly
+input/regression/slur-dynamics.ly
+input/regression/slur-extreme.ly
+input/regression/slur-flag.ly
+input/regression/slur-grace.ly
+input/regression/slur-height-capping.ly
+input/regression/slur-manual.ly
+input/regression/slur-multiple-linebreak.ly
+input/regression/slur-multiple.ly
+input/regression/slur-nice.ly
+input/regression/slur-rest.ly
+input/regression/slur-scoring.ly
+input/regression/slur-script-inside.ly
+input/regression/slur-script.ly
+input/regression/slur-shift-region.ly
+input/regression/slur-symmetry-1.ly
+input/regression/slur-symmetry.ly
+input/regression/slur-tie-control-points.ly
+input/regression/slur-tilt.ly
+input/regression/slur-tuplet.ly
+input/regression/slur-vertical-skylines.ly
+input/regression/slur-vestigial-outside-staff-callback.ly
+input/regression/song-associated-voice.ly
+input/regression/song-basic-nonenglish.ly
+input/regression/song-basic.ly
+input/regression/song-breathe.ly
+input/regression/song-melisma.ly
+input/regression/song-reordering.ly
+input/regression/song-reordering2.ly
+input/regression/song-repetition.ly
+input/regression/song-skip-noword.ly
+input/regression/song-skip.ly
+input/regression/song-slurs.ly
+input/regression/song-splitpart.ly
+input/regression/song-stanzas.ly
+input/regression/song-tempo.ly
+input/regression/spacing-accidental-rest.ly
+input/regression/spacing-accidental-staffs.ly
+input/regression/spacing-accidental-stretch.ly
+input/regression/spacing-accidental-tie.ly
+input/regression/spacing-accidental.ly
+input/regression/spacing-bar-accidental.ly
+input/regression/spacing-bar-arpeggio.ly
+input/regression/spacing-bar-stem.ly
+input/regression/spacing-bar-whole-measure.ly
+input/regression/spacing-clef-first-note.ly
+input/regression/spacing-correction-accidentals.ly
+input/regression/spacing-empty-bar.ly
+input/regression/spacing-end-of-line.ly
+input/regression/spacing-ended-voice.ly
+input/regression/spacing-folded-clef-cross-staff.ly
+input/regression/spacing-folded-clef.ly
+input/regression/spacing-folded-clef2.ly
+input/regression/spacing-folded-clef3.ly
+input/regression/spacing-grace-duration.ly
+input/regression/spacing-grace.ly
+input/regression/spacing-horizontal-skyline-grace.ly
+input/regression/spacing-horizontal-skyline.ly
+input/regression/spacing-knee-compressed.ly
+input/regression/spacing-knee.ly
+input/regression/spacing-loose-grace-error.ly
+input/regression/spacing-loose-grace-linebreak.ly
+input/regression/spacing-loose-grace.ly
+input/regression/spacing-loose-polyphony.ly
+input/regression/spacing-mark-width.ly
+input/regression/spacing-measure-length.ly
+input/regression/spacing-multi-tuplet.ly
+input/regression/spacing-no-note.ly
+input/regression/spacing-non-adjacent-columns1.ly
+input/regression/spacing-non-adjacent-columns2.ly
+input/regression/spacing-non-adjacent-columns3.ly
+input/regression/spacing-note-flags.ly
+input/regression/spacing-packed.ly
+input/regression/spacing-paper-column-padding.ly
+input/regression/spacing-proportional.ly
+input/regression/spacing-ragged-last.ly
+input/regression/spacing-rest.ly
+input/regression/spacing-section.ly
+input/regression/spacing-short-notes.ly
+input/regression/spacing-space-to-barline.ly
+input/regression/spacing-stem-bar.ly
+input/regression/spacing-stem-direction.ly
+input/regression/spacing-stem-same-direction.ly
+input/regression/spacing-stick-out.ly
+input/regression/spacing-strict-notespacing.ly
+input/regression/spacing-strict-spacing-grace.ly
+input/regression/spacing-to-empty-barline.ly
+input/regression/spacing-to-grace.ly
+input/regression/spacing-uniform-stretching.ly
+input/regression/span-bar-allow-span-bar.ly
+input/regression/span-bar-articulation.ly
+input/regression/span-bar-break.ly
+input/regression/span-bar-partial.ly
+input/regression/span-bar-spacing.ly
+input/regression/span-bar.ly
+input/regression/spanner-after-line-breaking.ly
+input/regression/spanner-alignment.ly
+input/regression/spanner-break-beyond-parent.ly
+input/regression/spanner-break-overshoot.ly
+input/regression/staccato-pos.ly
+input/regression/staff-change-autobeam.ly
+input/regression/staff-halfway.ly
+input/regression/staff-ledger-positions.ly
+input/regression/staff-line-positions.ly
+input/regression/staff-mixed-size.ly
+input/regression/staff-online-symbol-absence.ly
+input/regression/staff-tabstaff-spacing.ly
+input/regression/staff-tweak.ly
+input/regression/stanza-number.ly
+input/regression/stem-cross-staff-articulation.ly
+input/regression/stem-direction-context.ly
+input/regression/stem-direction.ly
+input/regression/stem-length-estimation.ly
+input/regression/stem-length.ly
+input/regression/stem-pure-height-beamed.ly
+input/regression/stem-shorten.ly
+input/regression/stem-stemlet-whole.ly
+input/regression/stem-stemlet.ly
+input/regression/stem-tremolo-forced-dir.ly
+input/regression/stem-tremolo-note-collision.ly
+input/regression/stem-tremolo-note-column.ly
+input/regression/stem-tremolo-position.ly
+input/regression/stem-tremolo-staff-space.ly
+input/regression/stem-tremolo.ly
+input/regression/stencil-color-rotation.ly
+input/regression/stencil-hacking.ly
+input/regression/stencil-scale.ly
+input/regression/string-number-around-slur.ly
+input/regression/string-number.ly
+input/regression/system-extents.ly
+input/regression/system-overstrike.ly
+input/regression/system-separator-spaceable-staves.ly
+input/regression/system-separator.ly
+input/regression/system-start-bar-collapse-staffspace.ly
+input/regression/system-start-bracket.ly
+input/regression/system-start-heavy-bar.ly
+input/regression/system-start-nesting.ly
+input/regression/tablature-banjo.ly
+input/regression/tablature-chord-repetition-finger.ly
+input/regression/tablature-chord-repetition.ly
+input/regression/tablature-default-strings.ly
+input/regression/tablature-dot-placement.ly
+input/regression/tablature-double-stem-tremolo.ly
+input/regression/tablature-fretboard-open-string.ly
+input/regression/tablature-full-notation.ly
+input/regression/tablature-glissando.ly
+input/regression/tablature-grace-notes.ly
+input/regression/tablature-harmonic-functions.ly
+input/regression/tablature-harmonic-tie.ly
+input/regression/tablature-harmonic.ly
+input/regression/tablature-letter.ly
+input/regression/tablature-negative-fret.ly
+input/regression/tablature-open-string-chord.ly
+input/regression/tablature-open-string-handling.ly
+input/regression/tablature-repeat.ly
+input/regression/tablature-slide.ly
+input/regression/tablature-slurs-with-beams.ly
+input/regression/tablature-string-tunings.ly
+input/regression/tablature-tie-behaviour.ly
+input/regression/tablature-tie-spanner.ly
+input/regression/tablature-tremolo.ly
+input/regression/tablature-zero-finger.ly
+input/regression/tablature.ly
+input/regression/tag-filter.ly
+input/regression/tag-multiple.ly
+input/regression/test-output-distance.ly
+input/regression/text-script-vertical-skylines.ly
+input/regression/text-spanner-attachment-alignment.ly
+input/regression/text-spanner-full-rest.ly
+input/regression/text-spanner-override-order.ly
+input/regression/text-spanner.ly
+input/regression/tie-accidental.ly
+input/regression/tie-arpeggio-collision.ly
+input/regression/tie-arpeggio.ly
+input/regression/tie-broken-minimum-length.ly
+input/regression/tie-broken-other-staff.ly
+input/regression/tie-broken.ly
+input/regression/tie-chord-broken-extremal.ly
+input/regression/tie-chord-debug.ly
+input/regression/tie-chord-partial.ly
+input/regression/tie-chord.ly
+input/regression/tie-dash.ly
+input/regression/tie-direction-broken.ly
+input/regression/tie-direction-manual.ly
+input/regression/tie-dot.ly
+input/regression/tie-grace.ly
+input/regression/tie-manual-vertical-tune.ly
+input/regression/tie-manual.ly
+input/regression/tie-pitched-trill.ly
+input/regression/tie-semi-single.ly
+input/regression/tie-single-chord.ly
+input/regression/tie-single-manual.ly
+input/regression/tie-single.ly
+input/regression/tie-unterminated.ly
+input/regression/tie-whole.ly
+input/regression/time-signature-settings-by-staff.ly
+input/regression/to-xml.ly
+input/regression/toc.ly
+input/regression/trill-spanner-auto-stop.ly
+input/regression/trill-spanner-broken.ly
+input/regression/trill-spanner-chained.ly
+input/regression/trill-spanner-grace.ly
+input/regression/trill-spanner-pitched-consecutive.ly
+input/regression/trill-spanner-pitched-forced.ly
+input/regression/trill-spanner-pitched.ly
+input/regression/trill-spanner-scaled.ly
+input/regression/trill-spanner.ly
+input/regression/tuplet-beam.ly
+input/regression/tuplet-bracket-avoid-fingering.ly
+input/regression/tuplet-bracket-avoid-scripts.ly
+input/regression/tuplet-bracket-avoid-string-number.ly
+input/regression/tuplet-bracket-cross-staff.ly
+input/regression/tuplet-bracket-direction.ly
+input/regression/tuplet-bracket-outside-staff-priority.ly
+input/regression/tuplet-bracket-vertical-skylines.ly
+input/regression/tuplet-bracket-visibility.ly
+input/regression/tuplet-broken.ly
+input/regression/tuplet-full-length-extent.ly
+input/regression/tuplet-full-length-note.ly
+input/regression/tuplet-full-length.ly
+input/regression/tuplet-gap.ly
+input/regression/tuplet-nest-beam.ly
+input/regression/tuplet-nest-broken.ly
+input/regression/tuplet-nest.ly
+input/regression/tuplet-no-stems.ly
+input/regression/tuplet-number-outside-staff-positioning.ly
+input/regression/tuplet-number-outside-staff-priority.ly
+input/regression/tuplet-number-slur-script.ly
+input/regression/tuplet-properties.ly
+input/regression/tuplet-rest.ly
+input/regression/tuplet-single-note.ly
+input/regression/tuplet-slope.ly
+input/regression/tuplet-staffline-collision.ly
+input/regression/tuplet-subdivision.ly
+input/regression/tuplet-text-different-numbers.ly
+input/regression/tuplet-text-fraction-with-notes.ly
+input/regression/tuplet-text-note-appended.ly
+input/regression/tuplets.ly
+input/regression/typography-demo.ly
+input/regression/unpure-pure-container.ly
+input/regression/utf-8-mixed-text.ly
+input/regression/utf-8.ly
+input/regression/voice-follower.ly
+input/regression/volta-bracket-add-volta-hook.ly
+input/regression/volta-bracket-vertical-skylines.ly
+input/regression/volta-broken-left-edge.ly
+input/regression/volta-markup-text.ly
+input/regression/volta-multi-staff-inner-staff.ly
+input/regression/volta-multi-staff.ly
+input/regression/warn-conflicting-key-signatures.ly
+input/regression/warn-expected-warning-missing.ly
+input/regression/warn-unterminated-span-dynamic.ly
+input/regression/whiteout-lower-layers.ly
+input/regression/whiteout.ly
+input/regression/woodwind-diagrams-empty.ly
+input/regression/woodwind-diagrams-key-lists.ly
+input/regression/zero-staff-space.ly
+lily/GNUmakefile
+lily/accidental-engraver.cc
+lily/accidental-placement.cc
+lily/accidental.cc
+lily/align-interface.cc
+lily/all-font-metrics-scheme.cc
+lily/all-font-metrics.cc
+lily/ambitus-engraver.cc
+lily/apply-context-iterator.cc
+lily/arpeggio-engraver.cc
+lily/arpeggio.cc
+lily/articulations.cc
+lily/audio-column.cc
+lily/audio-element-info.cc
+lily/audio-element.cc
+lily/audio-item.cc
+lily/audio-staff.cc
+lily/auto-beam-engraver.cc
+lily/auto-change-iterator.cc
+lily/axis-group-engraver.cc
+lily/axis-group-interface-scheme.cc
+lily/axis-group-interface.cc
+lily/balloon-engraver.cc
+lily/balloon.cc
+lily/bar-check-iterator.cc
+lily/bar-engraver.cc
+lily/bar-line.cc
+lily/bar-number-engraver.cc
+lily/beam-collision-engraver.cc
+lily/beam-engraver.cc
+lily/beam-performer.cc
+lily/beam-quanting.cc
+lily/beam.cc
+lily/beaming-pattern.cc
+lily/bend-engraver.cc
+lily/bezier-bow.cc
+lily/bezier.cc
+lily/book-scheme.cc
+lily/book.cc
+lily/box.cc
+lily/break-align-engraver.cc
+lily/break-alignment-interface.cc
+lily/break-substitution.cc
+lily/breathing-sign-engraver.cc
+lily/breathing-sign.cc
+lily/change-iterator.cc
+lily/chord-name-engraver.cc
+lily/chord-name.cc
+lily/chord-tremolo-engraver.cc
+lily/chord-tremolo-iterator.cc
+lily/clef-engraver.cc
+lily/clef.cc
+lily/cluster-engraver.cc
+lily/cluster.cc
+lily/coherent-ligature-engraver.cc
+lily/collision-engraver.cc
+lily/column-x-positions.cc
+lily/completion-note-heads-engraver.cc
+lily/completion-rest-engraver.cc
+lily/concurrent-hairpin-engraver.cc
+lily/constrained-breaking.cc
+lily/context-def.cc
+lily/context-handle.cc
+lily/context-mod-scheme.cc
+lily/context-mod.cc
+lily/context-property.cc
+lily/context-scheme.cc
+lily/context-specced-music-iterator.cc
+lily/context.cc
+lily/control-track-performer.cc
+lily/cue-clef-engraver.cc
+lily/custos-engraver.cc
+lily/custos.cc
+lily/default-bar-line-engraver.cc
+lily/dimension-cache.cc
+lily/dimensions-scheme.cc
+lily/directional-element-interface.cc
+lily/dispatcher-scheme.cc
+lily/dispatcher.cc
+lily/dot-column-engraver.cc
+lily/dot-column.cc
+lily/dot-configuration.cc
+lily/dot-formatting-problem.cc
+lily/dots-engraver.cc
+lily/dots.cc
+lily/double-percent-repeat-engraver.cc
+lily/drum-note-engraver.cc
+lily/drum-note-performer.cc
+lily/duration-scheme.cc
+lily/duration.cc
+lily/dynamic-align-engraver.cc
+lily/dynamic-engraver.cc
+lily/dynamic-performer.cc
+lily/enclosing-bracket.cc
+lily/engraver-group.cc
+lily/engraver-scheme.cc
+lily/engraver.cc
+lily/episema-engraver.cc
+lily/event-chord-iterator.cc
+lily/event-iterator.cc
+lily/extender-engraver.cc
+lily/figured-bass-continuation.cc
+lily/figured-bass-engraver.cc
+lily/figured-bass-position-engraver.cc
+lily/file-name-map.cc
+lily/fingering-column-engraver.cc
+lily/fingering-column.cc
+lily/fingering-engraver.cc
+lily/flag.cc
+lily/font-config-scheme.cc
+lily/font-config.cc
+lily/font-interface.cc
+lily/font-metric-scheme.cc
+lily/font-metric.cc
+lily/font-select.cc
+lily/font-size-engraver.cc
+lily/footnote-engraver.cc
+lily/forbid-break-engraver.cc
+lily/freetype-error.cc
+lily/freetype.cc
+lily/fretboard-engraver.cc
+lily/function-documentation.cc
+lily/gdb.cc
+lily/general-scheme.cc
+lily/glissando-engraver.cc
+lily/global-context-scheme.cc
+lily/global-context.cc
+lily/global-ctor.cc
+lily/global-vars.cc
+lily/grace-engraver.cc
+lily/grace-iterator.cc
+lily/grace-music.cc
+lily/grace-spacing-engraver.cc
+lily/gregorian-ligature-engraver.cc
+lily/gregorian-ligature.cc
+lily/grid-line-interface.cc
+lily/grid-line-span-engraver.cc
+lily/grid-point-engraver.cc
+lily/grob-array-scheme.cc
+lily/grob-array.cc
+lily/grob-closure.cc
+lily/grob-info.cc
+lily/grob-interface-scheme.cc
+lily/grob-interface.cc
+lily/grob-pq-engraver.cc
+lily/grob-property.cc
+lily/grob-scheme.cc
+lily/grob-smob.cc
+lily/grob.cc
+lily/guile-init.cc
+lily/hairpin.cc
+lily/hara-kiri-group-spanner.cc
+lily/horizontal-bracket-engraver.cc
+lily/horizontal-bracket.cc
+lily/hyphen-engraver.cc
+lily/includable-lexer.cc
+lily/include/accidental-interface.hh
+lily/include/accidental-placement.hh
+lily/include/align-interface.hh
+lily/include/all-font-metrics.hh
+lily/include/arpeggio.hh
+lily/include/articulations.hh
+lily/include/audio-column.hh
+lily/include/audio-element-info.hh
+lily/include/audio-element.hh
+lily/include/audio-item.hh
+lily/include/audio-staff.hh
+lily/include/axis-group-interface.hh
+lily/include/bar-line.hh
+lily/include/beam-scoring-problem.hh
+lily/include/beam.hh
+lily/include/beaming-pattern.hh
+lily/include/bezier.hh
+lily/include/book.hh
+lily/include/box.hh
+lily/include/break-align-interface.hh
+lily/include/breathing-sign.hh
+lily/include/change-iterator.hh
+lily/include/chord-name.hh
+lily/include/chord-tremolo-iterator.hh
+lily/include/clef.hh
+lily/include/cluster.hh
+lily/include/coherent-ligature-engraver.hh
+lily/include/column-x-positions.hh
+lily/include/constrained-breaking.hh
+lily/include/context-def.hh
+lily/include/context-handle.hh
+lily/include/context-mod.hh
+lily/include/context.hh
+lily/include/custos.hh
+lily/include/dimension-cache.hh
+lily/include/dimensions.hh
+lily/include/directional-element-interface.hh
+lily/include/dispatcher.hh
+lily/include/dot-column.hh
+lily/include/dot-configuration.hh
+lily/include/dot-formatting-problem.hh
+lily/include/dots.hh
+lily/include/duration.hh
+lily/include/engraver-group.hh
+lily/include/engraver.hh
+lily/include/event-chord-iterator.hh
+lily/include/event-iterator.hh
+lily/include/file-name-map.hh
+lily/include/fingering-column.hh
+lily/include/font-interface.hh
+lily/include/font-metric.hh
+lily/include/freetype.hh
+lily/include/global-context.hh
+lily/include/global-ctor.hh
+lily/include/grace-fixup.hh
+lily/include/grace-iterator.hh
+lily/include/gregorian-ligature-engraver.hh
+lily/include/gregorian-ligature.hh
+lily/include/grid-line-interface.hh
+lily/include/grob-array.hh
+lily/include/grob-info.hh
+lily/include/grob-interface.hh
+lily/include/grob.hh
+lily/include/group-interface.hh
+lily/include/hairpin.hh
+lily/include/hara-kiri-group-spanner.hh
+lily/include/horizontal-bracket.hh
+lily/include/includable-lexer.hh
+lily/include/input.hh
+lily/include/interval-minefield.hh
+lily/include/item.hh
+lily/include/keyword.hh
+lily/include/kievan-ligature.hh
+lily/include/least-squares.hh
+lily/include/ligature-engraver.hh
+lily/include/lily-guile-macros.hh
+lily/include/lily-guile.hh
+lily/include/lily-lexer.hh
+lily/include/lily-parser.hh
+lily/include/lily-proto.hh
+lily/include/lily-version.hh
+lily/include/lilypond-version.hh
+lily/include/line-interface.hh
+lily/include/listener.hh
+lily/include/lookup.hh
+lily/include/ly-module.hh
+lily/include/ly-smobs.icc
+lily/include/lyric-extender.hh
+lily/include/lyric-hyphen.hh
+lily/include/main.hh
+lily/include/measure-grouping-spanner.hh
+lily/include/melody-spanner.hh
+lily/include/mensural-ligature.hh
+lily/include/midi-chunk.hh
+lily/include/midi-item.hh
+lily/include/midi-stream.hh
+lily/include/midi-walker.hh
+lily/include/mingw-compatibility.hh
+lily/include/minimal-page-breaking.hh
+lily/include/misc.hh
+lily/include/modified-font-metric.hh
+lily/include/moment.hh
+lily/include/multi-measure-rest.hh
+lily/include/music-function.hh
+lily/include/music-iterator.hh
+lily/include/music-output.hh
+lily/include/music-sequence.hh
+lily/include/music-wrapper-iterator.hh
+lily/include/music-wrapper.hh
+lily/include/music.hh
+lily/include/note-collision.hh
+lily/include/note-column.hh
+lily/include/note-head.hh
+lily/include/note-spacing.hh
+lily/include/one-line-page-breaking.hh
+lily/include/open-type-font.hh
+lily/include/optimal-page-breaking.hh
+lily/include/output-def.hh
+lily/include/page-breaking.hh
+lily/include/page-layout-problem.hh
+lily/include/page-marker.hh
+lily/include/page-spacing-result.hh
+lily/include/page-spacing.hh
+lily/include/page-turn-page-breaking.hh
+lily/include/pango-font.hh
+lily/include/paper-book.hh
+lily/include/paper-column-engraver.hh
+lily/include/paper-column.hh
+lily/include/paper-outputter.hh
+lily/include/paper-score.hh
+lily/include/paper-system.hh
+lily/include/parse-scm.hh
+lily/include/percent-repeat-item.hh
+lily/include/performance.hh
+lily/include/performer-group.hh
+lily/include/performer.hh
+lily/include/pitch-interval.hh
+lily/include/pitch.hh
+lily/include/pointer-group-interface.hh
+lily/include/prob.hh
+lily/include/profile.hh
+lily/include/program-option.hh
+lily/include/property-iterator.hh
+lily/include/protected-scm.hh
+lily/include/pure-from-neighbor-interface.hh
+lily/include/relocate.hh
+lily/include/repeated-music.hh
+lily/include/rest-collision.hh
+lily/include/rest.hh
+lily/include/rhythmic-head.hh
+lily/include/rhythmic-music-iterator.hh
+lily/include/rod.hh
+lily/include/scale.hh
+lily/include/scheme-engraver.hh
+lily/include/scheme-listener.hh
+lily/include/scm-hash.hh
+lily/include/score-engraver.hh
+lily/include/score-performer.hh
+lily/include/score.hh
+lily/include/script-column.hh
+lily/include/script-interface.hh
+lily/include/self-alignment-interface.hh
+lily/include/semi-tie-column.hh
+lily/include/semi-tie.hh
+lily/include/separation-item.hh
+lily/include/sequential-iterator.hh
+lily/include/side-position-interface.hh
+lily/include/simple-closure.hh
+lily/include/simple-music-iterator.hh
+lily/include/simple-spacer.hh
+lily/include/simultaneous-music-iterator.hh
+lily/include/skyline-pair.hh
+lily/include/skyline.hh
+lily/include/slur-configuration.hh
+lily/include/slur-proto-engraver.hh
+lily/include/slur-score-parameters.hh
+lily/include/slur-scoring.hh
+lily/include/slur.hh
+lily/include/smobs.hh
+lily/include/source-file.hh
+lily/include/sources.hh
+lily/include/spaceable-grob.hh
+lily/include/spacing-interface.hh
+lily/include/spacing-options.hh
+lily/include/spacing-spanner.hh
+lily/include/spanner.hh
+lily/include/spring.hh
+lily/include/staff-grouper-interface.hh
+lily/include/staff-spacing.hh
+lily/include/staff-symbol-referencer.hh
+lily/include/staff-symbol.hh
+lily/include/stem-info.hh
+lily/include/stem-tremolo.hh
+lily/include/stem.hh
+lily/include/stencil.hh
+lily/include/stream-event.hh
+lily/include/system-start-delimiter.hh
+lily/include/system.hh
+lily/include/text-interface.hh
+lily/include/tie-column.hh
+lily/include/tie-configuration.hh
+lily/include/tie-details.hh
+lily/include/tie-formatting-problem.hh
+lily/include/tie-specification.hh
+lily/include/tie.hh
+lily/include/time-scaled-music-iterator.hh
+lily/include/time-signature.hh
+lily/include/timing-translator.hh
+lily/include/translator-dispatch-list.hh
+lily/include/translator-group.hh
+lily/include/translator.hh
+lily/include/translator.icc
+lily/include/tuplet-bracket.hh
+lily/include/unpure-pure-container.hh
+lily/include/vaticana-ligature.hh
+lily/include/volta-bracket.hh
+lily/input-scheme.cc
+lily/input-smob.cc
+lily/input.cc
+lily/instrument-name-engraver.cc
+lily/instrument-switch-engraver.cc
+lily/interval-minefield.cc
+lily/item-scheme.cc
+lily/item.cc
+lily/keep-alive-together-engraver.cc
+lily/key-engraver.cc
+lily/key-performer.cc
+lily/key-signature-interface.cc
+lily/keyword.cc
+lily/kievan-ligature-engraver.cc
+lily/kievan-ligature.cc
+lily/laissez-vibrer-engraver.cc
+lily/least-squares.cc
+lily/ledger-line-engraver.cc
+lily/ledger-line-spanner.cc
+lily/lexer.ll
+lily/ligature-bracket-engraver.cc
+lily/ligature-engraver.cc
+lily/lily-guile.cc
+lily/lily-lexer-scheme.cc
+lily/lily-lexer.cc
+lily/lily-parser-scheme.cc
+lily/lily-parser.cc
+lily/lily-version.cc
+lily/lilypond-version.cc
+lily/lilypond.rc.in
+lily/line-interface.cc
+lily/line-spanner.cc
+lily/listener.cc
+lily/lookup.cc
+lily/ly-module.cc
+lily/lyric-combine-music-iterator.cc
+lily/lyric-combine-music.cc
+lily/lyric-engraver.cc
+lily/lyric-extender.cc
+lily/lyric-hyphen.cc
+lily/lyric-performer.cc
+lily/main.cc
+lily/mark-engraver.cc
+lily/measure-grouping-engraver.cc
+lily/measure-grouping-spanner.cc
+lily/melody-engraver.cc
+lily/melody-spanner.cc
+lily/mensural-ligature-engraver.cc
+lily/mensural-ligature.cc
+lily/metronome-engraver.cc
+lily/midi-chunk.cc
+lily/midi-control-function-performer.cc
+lily/midi-item.cc
+lily/midi-stream.cc
+lily/midi-walker.cc
+lily/minimal-page-breaking.cc
+lily/misc.cc
+lily/modified-font-metric.cc
+lily/module-scheme.cc
+lily/moment-scheme.cc
+lily/moment.cc
+lily/multi-measure-rest-engraver.cc
+lily/multi-measure-rest.cc
+lily/music-function-scheme.cc
+lily/music-function.cc
+lily/music-iterator.cc
+lily/music-output.cc
+lily/music-scheme.cc
+lily/music-sequence.cc
+lily/music-wrapper-iterator.cc
+lily/music-wrapper.cc
+lily/music.cc
+lily/nested-property.cc
+lily/new-fingering-engraver.cc
+lily/note-collision.cc
+lily/note-column-scheme.cc
+lily/note-column.cc
+lily/note-head-line-engraver.cc
+lily/note-head-scheme.cc
+lily/note-head.cc
+lily/note-heads-engraver.cc
+lily/note-name-engraver.cc
+lily/note-performer.cc
+lily/note-spacing-engraver.cc
+lily/note-spacing.cc
+lily/one-line-page-breaking.cc
+lily/open-type-font-scheme.cc
+lily/open-type-font.cc
+lily/optimal-page-breaking.cc
+lily/ottava-bracket.cc
+lily/ottava-engraver.cc
+lily/output-def-scheme.cc
+lily/output-def.cc
+lily/output-property-engraver.cc
+lily/page-breaking-scheme.cc
+lily/page-breaking.cc
+lily/page-layout-problem-scheme.cc
+lily/page-layout-problem.cc
+lily/page-marker-scheme.cc
+lily/page-marker.cc
+lily/page-spacing-result.cc
+lily/page-spacing.cc
+lily/page-turn-engraver.cc
+lily/page-turn-page-breaking.cc
+lily/pango-font-scheme.cc
+lily/pango-font.cc
+lily/pango-select-scheme.cc
+lily/pango-select.cc
+lily/paper-book-scheme.cc
+lily/paper-book.cc
+lily/paper-column-engraver.cc
+lily/paper-column.cc
+lily/paper-def.cc
+lily/paper-outputter-scheme.cc
+lily/paper-outputter.cc
+lily/paper-score-scheme.cc
+lily/paper-score.cc
+lily/paper-system-scheme.cc
+lily/paper-system.cc
+lily/parenthesis-engraver.cc
+lily/parse-scm.cc
+lily/parser.yy
+lily/part-combine-engraver.cc
+lily/part-combine-iterator.cc
+lily/partial-iterator.cc
+lily/pdf-scheme.cc
+lily/percent-repeat-engraver.cc
+lily/percent-repeat-item.cc
+lily/percent-repeat-iterator.cc
+lily/performance-scheme.cc
+lily/performance.cc
+lily/performer-group.cc
+lily/performer.cc
+lily/pfb-scheme.cc
+lily/pfb.cc
+lily/phrasing-slur-engraver.cc
+lily/piano-pedal-align-engraver.cc
+lily/piano-pedal-bracket.cc
+lily/piano-pedal-engraver.cc
+lily/piano-pedal-performer.cc
+lily/pitch-interval.cc
+lily/pitch-scheme.cc
+lily/pitch-squash-engraver.cc
+lily/pitch.cc
+lily/pitched-trill-engraver.cc
+lily/pointer-group-interface-scheme.cc
+lily/pointer-group-interface.cc
+lily/prob-scheme.cc
+lily/prob.cc
+lily/profile.cc
+lily/program-option-scheme.cc
+lily/program-option.cc
+lily/property-iterator.cc
+lily/protected-scm.cc
+lily/pure-from-neighbor-engraver.cc
+lily/pure-from-neighbor-interface.cc
+lily/quote-iterator.cc
+lily/relative-octave-check.cc
+lily/relative-octave-music.cc
+lily/relocate.cc
+lily/repeat-acknowledge-engraver.cc
+lily/repeat-tie-engraver.cc
+lily/repeated-music.cc
+lily/rest-collision-engraver.cc
+lily/rest-collision.cc
+lily/rest-engraver.cc
+lily/rest.cc
+lily/rhythmic-column-engraver.cc
+lily/rhythmic-head.cc
+lily/rhythmic-music-iterator.cc
+lily/rod.cc
+lily/scale.cc
+lily/scheme-engraver.cc
+lily/scheme-listener-scheme.cc
+lily/scheme-listener.cc
+lily/scm-hash.cc
+lily/score-engraver.cc
+lily/score-performer.cc
+lily/score-scheme.cc
+lily/score.cc
+lily/script-column-engraver.cc
+lily/script-column.cc
+lily/script-engraver.cc
+lily/script-interface.cc
+lily/script-row-engraver.cc
+lily/self-alignment-interface.cc
+lily/semi-tie-column.cc
+lily/semi-tie.cc
+lily/separating-line-group-engraver.cc
+lily/separation-item.cc
+lily/sequential-iterator.cc
+lily/side-position-interface.cc
+lily/simple-closure.cc
+lily/simple-music-iterator.cc
+lily/simple-spacer-scheme.cc
+lily/simple-spacer.cc
+lily/simultaneous-music-iterator.cc
+lily/skyline-pair.cc
+lily/skyline.cc
+lily/slash-repeat-engraver.cc
+lily/slur-configuration.cc
+lily/slur-engraver.cc
+lily/slur-performer.cc
+lily/slur-proto-engraver.cc
+lily/slur-score-parameters.cc
+lily/slur-scoring.cc
+lily/slur.cc
+lily/smobs.cc
+lily/source-file.cc
+lily/sources.cc
+lily/spaceable-grob.cc
+lily/spacing-basic.cc
+lily/spacing-determine-loose-columns.cc
+lily/spacing-engraver.cc
+lily/spacing-interface.cc
+lily/spacing-loose-columns.cc
+lily/spacing-options.cc
+lily/spacing-spanner.cc
+lily/span-arpeggio-engraver.cc
+lily/span-bar-engraver.cc
+lily/span-bar-stub-engraver.cc
+lily/spanner-break-forbid-engraver.cc
+lily/spanner-scheme.cc
+lily/spanner.cc
+lily/spring-smob.cc
+lily/spring.cc
+lily/staff-collecting-engraver.cc
+lily/staff-grouper-interface.cc
+lily/staff-performer.cc
+lily/staff-spacing.cc
+lily/staff-symbol-engraver.cc
+lily/staff-symbol-referencer-scheme.cc
+lily/staff-symbol-referencer.cc
+lily/staff-symbol.cc
+lily/stanza-number-align-engraver.cc
+lily/stanza-number-engraver.cc
+lily/stem-engraver.cc
+lily/stem-tremolo.cc
+lily/stem.cc
+lily/stencil-expression.cc
+lily/stencil-integral.cc
+lily/stencil-interpret.cc
+lily/stencil-scheme.cc
+lily/stencil.cc
+lily/stream-event-scheme.cc
+lily/stream-event.cc
+lily/sustain-pedal.cc
+lily/system-start-delimiter-engraver.cc
+lily/system-start-delimiter.cc
+lily/system.cc
+lily/tab-note-heads-engraver.cc
+lily/tab-staff-symbol-engraver.cc
+lily/tab-tie-follow-engraver.cc
+lily/template5.cc
+lily/tempo-performer.cc
+lily/text-engraver.cc
+lily/text-interface.cc
+lily/text-spanner-engraver.cc
+lily/tie-column.cc
+lily/tie-configuration.cc
+lily/tie-details.cc
+lily/tie-engraver.cc
+lily/tie-formatting-problem.cc
+lily/tie-performer.cc
+lily/tie-specification.cc
+lily/tie.cc
+lily/time-signature-engraver.cc
+lily/time-signature-performer.cc
+lily/time-signature.cc
+lily/timing-translator.cc
+lily/translator-ctors.cc
+lily/translator-dispatch-list.cc
+lily/translator-group-ctors.cc
+lily/translator-group.cc
+lily/translator-scheme.cc
+lily/translator.cc
+lily/trill-spanner-engraver.cc
+lily/ttf.cc
+lily/tuplet-bracket.cc
+lily/tuplet-engraver.cc
+lily/tuplet-iterator.cc
+lily/tuplet-number.cc
+lily/tweak-engraver.cc
+lily/undead.cc
+lily/unfolded-repeat-iterator.cc
+lily/unpure-pure-container.cc
+lily/vaticana-ligature-engraver.cc
+lily/vaticana-ligature.cc
+lily/vertical-align-engraver.cc
+lily/volta-bracket.cc
+lily/volta-engraver.cc
+lily/volta-repeat-iterator.cc
+lily/warn-scheme.cc
+ly/GNUmakefile
+ly/Welcome-to-LilyPond-MacOS.ly
+ly/Welcome_to_LilyPond.ly
+ly/arabic.ly
+ly/articulate.ly
+ly/bagpipe.ly
+ly/catalan.ly
+ly/chord-modifiers-init.ly
+ly/chord-repetition-init.ly
+ly/context-mods-init.ly
+ly/declarations-init.ly
+ly/deutsch.ly
+ly/drumpitch-init.ly
+ly/dynamic-scripts-init.ly
+ly/english.ly
+ly/engraver-init.ly
+ly/espanol.ly
+ly/event-listener.ly
+ly/festival.ly
+ly/generate-documentation.ly
+ly/generate-interface-doc-init.ly
+ly/grace-init.ly
+ly/graphviz-init.ly
+ly/gregorian.ly
+ly/guile-debugger.ly
+ly/init.ly
+ly/italiano.ly
+ly/lilypond-book-preamble.ly
+ly/makam.ly
+ly/midi-init.ly
+ly/music-functions-init.ly
+ly/nederlands.ly
+ly/norsk.ly
+ly/paper-defaults-init.ly
+ly/performer-init.ly
+ly/portugues.ly
+ly/predefined-fretboards-init.ly
+ly/predefined-guitar-fretboards.ly
+ly/predefined-guitar-ninth-fretboards.ly
+ly/predefined-mandolin-fretboards.ly
+ly/predefined-ukulele-fretboards.ly
+ly/property-init.ly
+ly/scale-definitions-init.ly
+ly/scheme-sandbox.ly
+ly/script-init.ly
+ly/spanners-init.ly
+ly/string-tunings-init.ly
+ly/suomi.ly
+ly/svenska.ly
+ly/text-replacements.ly
+ly/titling-init.ly
+ly/toc-init.ly
+ly/vlaams.ly
+make/abc-rules.make
+make/abc-targets.make
+make/abc-vars.make
+make/doc-i18n-root-rules.make
+make/doc-i18n-root-targets.make
+make/doc-i18n-root-vars.make
+make/generic-rules.make
+make/generic-targets.make
+make/generic-vars.make
+make/lilypond-book-rules.make
+make/lilypond-book-targets.make
+make/lilypond-book-vars.make
+make/lilypond-rules.make
+make/lilypond-targets.make
+make/lilypond-vars.make
+make/ly-rules.make
+make/ly-targets.make
+make/ly-vars.make
+make/ly.make
+make/lysdoc-rules.make
+make/lysdoc-targets.make
+make/lysdoc-vars.make
+make/midi-rules.make
+make/midi-targets.make
+make/midi-vars.make
+make/musicxml-rules.make
+make/musicxml-targets.make
+make/musicxml-vars.make
+make/mutopia-inclusions.make
+make/mutopia-rules.make
+make/mutopia-targets.make
+make/mutopia-vars.make
+make/stepmake.make
+make/substitute.make
+make/toplevel-version.make
+make/website.make
+mf/GNUmakefile
+mf/README
+mf/emmentaler-brace.pe.in
+mf/feta-accidentals.mf
+mf/feta-accordion.mf
+mf/feta-alphabet.mf
+mf/feta-alphabet11.mf
+mf/feta-alphabet13.mf
+mf/feta-alphabet14.mf
+mf/feta-alphabet16.mf
+mf/feta-alphabet18.mf
+mf/feta-alphabet20.mf
+mf/feta-alphabet23.mf
+mf/feta-alphabet26.mf
+mf/feta-arrowheads.mf
+mf/feta-autometric.mf
+mf/feta-braces-a.mf
+mf/feta-braces-b.mf
+mf/feta-braces-c.mf
+mf/feta-braces-d.mf
+mf/feta-braces-e.mf
+mf/feta-braces-f.mf
+mf/feta-braces-g.mf
+mf/feta-braces-h.mf
+mf/feta-braces-i.mf
+mf/feta-braces.mf
+mf/feta-brackettips.mf
+mf/feta-clefs.mf
+mf/feta-dots.mf
+mf/feta-dynamics.mf
+mf/feta-flags-generic.mf
+mf/feta-flags.mf
+mf/feta-flags11.mf
+mf/feta-flags13.mf
+mf/feta-flags14.mf
+mf/feta-flags16.mf
+mf/feta-flags18.mf
+mf/feta-flags20.mf
+mf/feta-flags23.mf
+mf/feta-flags26.mf
+mf/feta-generic.mf
+mf/feta-macros.mf
+mf/feta-noteheads-generic.mf
+mf/feta-noteheads.mf
+mf/feta-noteheads11.mf
+mf/feta-noteheads13.mf
+mf/feta-noteheads14.mf
+mf/feta-noteheads16.mf
+mf/feta-noteheads18.mf
+mf/feta-noteheads20.mf
+mf/feta-noteheads23.mf
+mf/feta-noteheads26.mf
+mf/feta-numbers.mf
+mf/feta-params.mf
+mf/feta-pedals.mf
+mf/feta-rests.mf
+mf/feta-scripts.mf
+mf/feta-test-generic.mf
+mf/feta-test11.mf
+mf/feta-test13.mf
+mf/feta-test16.mf
+mf/feta-test20.mf
+mf/feta-test23.mf
+mf/feta-test26.mf
+mf/feta-ties.mf
+mf/feta-timesignatures.mf
+mf/feta-trills.mf
+mf/feta11.mf
+mf/feta13.mf
+mf/feta14.mf
+mf/feta16.mf
+mf/feta18.mf
+mf/feta20.mf
+mf/feta23.mf
+mf/feta26.mf
+mf/mf2pt1.mp
+mf/parmesan-accidentals.mf
+mf/parmesan-clefs.mf
+mf/parmesan-custodes.mf
+mf/parmesan-dots.mf
+mf/parmesan-flags.mf
+mf/parmesan-generic.mf
+mf/parmesan-macros.mf
+mf/parmesan-noteheads-generic.mf
+mf/parmesan-noteheads.mf
+mf/parmesan-noteheads11.mf
+mf/parmesan-noteheads13.mf
+mf/parmesan-noteheads14.mf
+mf/parmesan-noteheads16.mf
+mf/parmesan-noteheads18.mf
+mf/parmesan-noteheads20.mf
+mf/parmesan-noteheads23.mf
+mf/parmesan-noteheads26.mf
+mf/parmesan-rests.mf
+mf/parmesan-scripts.mf
+mf/parmesan-timesignatures.mf
+mf/parmesan11.mf
+mf/parmesan13.mf
+mf/parmesan14.mf
+mf/parmesan16.mf
+mf/parmesan18.mf
+mf/parmesan20.mf
+mf/parmesan23.mf
+mf/parmesan26.mf
+po/GNUmakefile
+po/README
+po/TODO
+po/ca.po
+po/cs.po
+po/da.po
+po/de.po
+po/el.po
+po/eo.po
+po/es.po
+po/fi.po
+po/fr.po
+po/it.po
+po/ja.po
+po/lilypond.pot
+po/nl.po
+po/ru.po
+po/sv.po
+po/tr.po
+po/uk.po
+po/vi.po
+po/zh_TW.po
+ps/GNUmakefile
+ps/lilyponddefs.ps
+ps/music-drawing-routines.ps
+python/GNUmakefile
+python/auxiliar/GNUmakefile
+python/auxiliar/buildlib.py
+python/auxiliar/manuals_definitions.py
+python/auxiliar/mirrortree.py
+python/auxiliar/postprocess_html.py
+python/book_base.py
+python/book_docbook.py
+python/book_html.py
+python/book_latex.py
+python/book_snippets.py
+python/book_texinfo.py
+python/convertrules.py
+python/fontextract.py
+python/langdefs.py
+python/lilylib.py
+python/midi.c
+python/musicexp.py
+python/musicxml.py
+python/rational.py
+python/relocate-preamble.py.in
+python/safeeval.py
+scm/GNUmakefile
+scm/accreg.scm
+scm/auto-beam.scm
+scm/autochange.scm
+scm/backend-library.scm
+scm/bar-line.scm
+scm/bezier-tools.scm
+scm/c++.scm
+scm/chord-entry.scm
+scm/chord-generic-names.scm
+scm/chord-ignatzek-names.scm
+scm/chord-name.scm
+scm/clip-region.scm
+scm/coverage.scm
+scm/define-context-properties.scm
+scm/define-event-classes.scm
+scm/define-grob-interfaces.scm
+scm/define-grob-properties.scm
+scm/define-grobs.scm
+scm/define-markup-commands.scm
+scm/define-music-callbacks.scm
+scm/define-music-display-methods.scm
+scm/define-music-properties.scm
+scm/define-music-types.scm
+scm/define-note-names.scm
+scm/define-stencil-commands.scm
+scm/define-woodwind-diagrams.scm
+scm/display-lily.scm
+scm/display-woodwind-diagrams.scm
+scm/document-backend.scm
+scm/document-context-mods.scm
+scm/document-functions.scm
+scm/document-identifiers.scm
+scm/document-markup.scm
+scm/document-music.scm
+scm/document-translation.scm
+scm/document-type-predicates.scm
+scm/documentation-generate.scm
+scm/documentation-lib.scm
+scm/editor.scm
+scm/encoding.scm
+scm/file-cache.scm
+scm/flag-styles.scm
+scm/font.scm
+scm/framework-eps.scm
+scm/framework-null.scm
+scm/framework-ps.scm
+scm/framework-scm.scm
+scm/framework-socket.scm
+scm/framework-svg.scm
+scm/fret-diagrams.scm
+scm/graphviz.scm
+scm/guile-debugger.scm
+scm/harp-pedals.scm
+scm/layout-beam.scm
+scm/layout-slur.scm
+scm/lily-library.scm
+scm/lily-sort.scm
+scm/lily.scm
+scm/ly-syntax-constructors.scm
+scm/markup-macros.scm
+scm/markup.scm
+scm/memory-trace.scm
+scm/midi.scm
+scm/modal-transforms.scm
+scm/music-functions.scm
+scm/output-lib.scm
+scm/output-ps.scm
+scm/output-socket.scm
+scm/output-svg.scm
+scm/page.scm
+scm/paper-system.scm
+scm/paper.scm
+scm/parser-clef.scm
+scm/parser-ly-from-scheme.scm
+scm/part-combiner.scm
+scm/predefined-fretboards.scm
+scm/ps-to-png.scm
+scm/safe-lily.scm
+scm/safe-utility-defs.scm
+scm/scheme-engravers.scm
+scm/script.scm
+scm/skyline.scm
+scm/song-util.scm
+scm/song.scm
+scm/standalone.scm
+scm/stencil.scm
+scm/tablature.scm
+scm/text.scm
+scm/time-signature-settings.scm
+scm/titling.scm
+scm/to-xml.scm
+scm/translation-functions.scm
+scm/x11-color.scm
+scripts/GNUmakefile
+scripts/abc2ly.py
+scripts/auxiliar/NoTagline.ly
+scripts/auxiliar/build-coverage.sh
+scripts/auxiliar/build-profile.sh
+scripts/auxiliar/cg-section.sh
+scripts/auxiliar/check_texi_refs.py
+scripts/auxiliar/check_translation.py
+scripts/auxiliar/coverage.py
+scripts/auxiliar/doc-section.sh
+scripts/auxiliar/find-superfluous-includes.py
+scripts/auxiliar/fixcc.py
+scripts/auxiliar/fixscm.sh
+scripts/auxiliar/lily-git.tcl
+scripts/auxiliar/make-regtest-pngs.sh
+scripts/auxiliar/makelsr.py
+scripts/auxiliar/musicxml_generate_intervals.py
+scripts/auxiliar/musicxml_generate_keys.py
+scripts/auxiliar/musicxml_generate_timesignatures.py
+scripts/auxiliar/node-menuify.py
+scripts/auxiliar/pfx2ttf.fontforge
+scripts/auxiliar/prepare-web-media.py
+scripts/auxiliar/readlink.py
+scripts/auxiliar/ref_check.py
+scripts/auxiliar/ref_check.tely
+scripts/auxiliar/show_skyline_command.py
+scripts/auxiliar/skyline_viewer.py
+scripts/auxiliar/split-texidocs.py
+scripts/auxiliar/strip-whitespace.py
+scripts/auxiliar/tely-gettext.py
+scripts/auxiliar/texi-langutils.py
+scripts/auxiliar/texi-skeleton-update.py
+scripts/auxiliar/translations-status.py
+scripts/auxiliar/update-patch-version.sh
+scripts/auxiliar/update-snippets.py
+scripts/auxiliar/update-with-convert-ly.sh
+scripts/build/GNUmakefile
+scripts/build/bib2texi.py
+scripts/build/catmidi.py
+scripts/build/create-version-itexi.py
+scripts/build/create-weblinks-itexi.py
+scripts/build/extract_texi_filenames.py
+scripts/build/gen-emmentaler-scripts.py
+scripts/build/genicon.py
+scripts/build/grand-replace.py
+scripts/build/help2man.pl
+scripts/build/html-to-texi.py
+scripts/build/install-info-html.sh
+scripts/build/install.py
+scripts/build/lilypond-words.py
+scripts/build/lys-to-tely.py
+scripts/build/make-version.py
+scripts/build/makesnippets.py
+scripts/build/mass-link.py
+scripts/build/mf-to-table.py
+scripts/build/mf2pt1.pl
+scripts/build/output-distance.py
+scripts/build/pytt.py
+scripts/build/relative.py
+scripts/build/run-and-check.sh
+scripts/build/texi2omf.py
+scripts/build/text2html.py
+scripts/build/website-known-missing-files.txt
+scripts/build/website_post.py
+scripts/build/www_post.py
+scripts/build/yyout2grammar.py
+scripts/convert-ly.py
+scripts/etf2ly.py
+scripts/lilymidi.py
+scripts/lilypond-book.py
+scripts/lilypond-invoke-editor.scm
+scripts/lilysong.py
+scripts/midi2ly.py
+scripts/musicxml2ly.py
+smart-autogen.sh
+smart-configure.sh
+stepmake/stepmake/automatically-configured.sub.make
+stepmake/stepmake/automatically-generated.sub.make
+stepmake/stepmake/c++-files.make
+stepmake/stepmake/c++-rules.make
+stepmake/stepmake/c++-targets.make
+stepmake/stepmake/c++-vars.make
+stepmake/stepmake/c-rules.make
+stepmake/stepmake/c-targets.make
+stepmake/stepmake/c-vars.make
+stepmake/stepmake/compile-vars.make
+stepmake/stepmake/documentation-rules.make
+stepmake/stepmake/documentation-targets.make
+stepmake/stepmake/documentation-vars.make
+stepmake/stepmake/elisp-rules.make
+stepmake/stepmake/elisp-targets.make
+stepmake/stepmake/elisp-vars.make
+stepmake/stepmake/executable-rules.make
+stepmake/stepmake/executable-targets.make
+stepmake/stepmake/executable-vars.make
+stepmake/stepmake/generic-rules.make
+stepmake/stepmake/generic-targets.make
+stepmake/stepmake/generic-vars.make
+stepmake/stepmake/help2man-rules.make
+stepmake/stepmake/help2man-targets.make
+stepmake/stepmake/help2man-vars.make
+stepmake/stepmake/install-library-rules.make
+stepmake/stepmake/install-library-targets.make
+stepmake/stepmake/install-library-vars.make
+stepmake/stepmake/install-out-rules.make
+stepmake/stepmake/install-out-targets.make
+stepmake/stepmake/install-out-vars.make
+stepmake/stepmake/install-out.sub.make
+stepmake/stepmake/install-rules.make
+stepmake/stepmake/install-targets.make
+stepmake/stepmake/install-vars.make
+stepmake/stepmake/install.sub.make
+stepmake/stepmake/library-rules.make
+stepmake/stepmake/library-targets.make
+stepmake/stepmake/library-vars.make
+stepmake/stepmake/makedir-rules.make
+stepmake/stepmake/makedir-targets.make
+stepmake/stepmake/makedir-vars.make
+stepmake/stepmake/metafont-rules.make
+stepmake/stepmake/metafont-targets.make
+stepmake/stepmake/metafont-vars.make
+stepmake/stepmake/no-builtin-rules.make
+stepmake/stepmake/omf-rules.make
+stepmake/stepmake/omf-targets.make
+stepmake/stepmake/omf-vars.make
+stepmake/stepmake/po-rules.make
+stepmake/stepmake/po-targets.make
+stepmake/stepmake/po-vars.make
+stepmake/stepmake/podir-rules.make
+stepmake/stepmake/podir-targets.make
+stepmake/stepmake/podir-vars.make
+stepmake/stepmake/python-module-rules.make
+stepmake/stepmake/python-module-targets.make
+stepmake/stepmake/python-module-vars.make
+stepmake/stepmake/scm-rules.make
+stepmake/stepmake/scm-targets.make
+stepmake/stepmake/scm-vars.make
+stepmake/stepmake/script-rules.make
+stepmake/stepmake/script-targets.make
+stepmake/stepmake/script-vars.make
+stepmake/stepmake/shared-library-rules.make
+stepmake/stepmake/shared-library-targets.make
+stepmake/stepmake/shared-library-vars.make
+stepmake/stepmake/substitute-rules.make
+stepmake/stepmake/substitute-vars.make
+stepmake/stepmake/test-rules.make
+stepmake/stepmake/test-targets.make
+stepmake/stepmake/test-vars.make
+stepmake/stepmake/tex-rules.make
+stepmake/stepmake/tex-targets.make
+stepmake/stepmake/tex-vars.make
+stepmake/stepmake/texinfo-rules.make
+stepmake/stepmake/texinfo-targets.make
+stepmake/stepmake/texinfo-vars.make
+stepmake/stepmake/topdocs-rules.make
+stepmake/stepmake/topdocs-targets.make
+stepmake/stepmake/topdocs-vars.make
+stepmake/stepmake/toplevel-rules.make
+stepmake/stepmake/toplevel-targets.make
+stepmake/stepmake/toplevel-vars.make
+tex/GNUmakefile
+tex/lilypond-tex-metrics.tex
+tex/lilypond.map.in
+tex/texinfo.tex
+tex/txi-de.tex
+tex/txi-en.tex
+tex/txi-es.tex
+tex/txi-fr.tex
+tex/txi-hu.tex
+tex/txi-it.tex
+tex/txi-nl.tex
+vim/GNUmakefile
+vim/filetype.vim
+vim/lilypond-compiler.vim
+vim/lilypond-ftdetect.vim
+vim/lilypond-ftplugin.vim
+vim/lilypond-indent.vim
+vim/lilypond-syntax.vim
+vim/vimrc
index e0fae2d1e44836bf6830edab2fa532728d32b1f5..3097acfe263f48f2e926788eef9c521b6c51a789 100644 (file)
@@ -53,7 +53,6 @@ TAGS
 \#*
 \#.*
 a.out
-aclocal.m4
 autom4te.cache
 config-*.hh
 config-*.make
@@ -78,3 +77,4 @@ Documentation/lilypond
 semantic.cache
 .lock-wscript
 build/
+.gitfilelist
index bbb1eec00c4f1189451a8a51ffabfaef698e78e4..f7fcb0c7dbceacaedc187aed3c215e236b737cc7 100644 (file)
@@ -57,7 +57,7 @@ Current Development Team
 
    * Neil Puttock: Core developer
 
-   * Mike Solomon: <mike@apollinemike.com>, Core developer, Frog meister
+   * Mike Solomon: <mike@mikesolomon.org>, Core developer, Frog meister
 
    * Carl Sorensen: <c_sorensen@byu.edu>, Core developer
 
@@ -65,14 +65,14 @@ Current Development Team
 
    * Valentin Villenave: LSR editor and Bug squad member
 
-   * Jan Warchoł: happy nitpicker
+   * Janek Warchoł: happy nitpicker
 
 
 Previous Development Team
 -------------------------
 
    * Mats Bengtsson: <mats.bengtsson@ee.kth.se>,
-     `http://www.s3.kth.se/~mabe/', Support guru
+     `https://www.kth.se/profile/matben/', Support guru
 
    * Pedro Kroeger: Build meister
 
@@ -95,10 +95,10 @@ Current Contributors
 Programming
 ...........
 
-Aleksandr Andreev, Sven Axelsson, Peter Chubb, Karin Hoethker, Marc
-Hohl, David Nalesnik, Justin Ohmie, Benkő Pál, Julien Rioux, Patrick
-Schmidt, Adam Spiers, Heikki Taurainen, Piers Titus van der Torren,
-Jan-Peter Voigt, Janek Warchol
+Aleksandr Andreev, Frédéric Bron, Torsten Hämmerle , Marc Hohl,
+James Lowe, Andrew Main, Thomas Morley, David Nalesnik, Keith OHara,
+Benkő Pál, Anders Pilegaard, Julien Rioux, Johannes Rohrer, Adam
+Spiers, Heikki Tauriainen
 
 Font
 ....
@@ -106,22 +106,25 @@ Font
 Documentation
 .............
 
-James Lowe, Pavel Roskin, Alberto Simoes, Stefan Weil
+Frédéric Bron, Federico Bruni, Colin Campbell, Urs Liska, James Lowe,
+Thomas Morley, Jean-Charles Malahieude, Guy Stalnaker, Martin
+Tarenskeen, Arnold Theresius, Rodolfo Zitellini
 
 Bug squad
 .........
 
-Colin Campbell, Eluze, Phil Holmes, Marek Klein, Ralph Palmer, James
-Lowe
+Colin Campbell, Eluze, Marc Hohl, Phil Holmes, Marek Klein, Ralph Palmer
 
 Support
 .......
 
-Colin Campbell, Christian Hitz, Phil Holmes
+Colin Campbell, Eluze, Marc Hohl, Marek Klein, Kieren MacMillan, Urs
+Liska, Ralph Palmer
 
 Translation
 ...........
 
+Federico Bruni, Luca Rossetto Casel, Felipe Castro, Pavel Fric,
 Jean-Charles Malahieude, Till Paala, Yoshiki Sawada
 
 Past Contributors
@@ -130,22 +133,23 @@ Past Contributors
 Programming
 ...........
 
-Erlend Aasland, Maximilian Albert, Guido Amoruso, Sven Axelsson,
-Kristof Bastiaensen, Pál Benkő, Bertrand Bordage, Frédéric Bron,
+Erlend Aasland, Maximilian Albert, Aleksandr Andreev, Guido Amoruso,
+Sven Axelsson, Kristof Bastiaensen, Pál Benkő, Frédéric Bron,
 Juliusz Chroboczek, Peter Chubb, Angelo Contardi, Vicente Solsona Della,
 Hajo Dezelski, Michael Welsh Duggan, David Feuer, Bertalan Fodor,
 Richard Gay, Mathieu Giraud, Lisa Opus Goldstein, Yuval Harel, Andrew
-Hawryluk, Christian Hitz, Marc Hohl, Ian Hulin, Bernard Hurley,
+Hawryluk, Christian Hitz, Karin Hoethker, Marc Hohl, Bernard Hurley,
 Yoshinobu Ishizaki, Chris Jackson, David Jedlinsky, Heikki Junes,
 Michael Käppler, Marek Klein, Michael Krause, Jean-Baptiste Lamy,
 Jonatan Liljedahl, Peter Lutek, Kieren MacMillan, Hendrik Maryns,
-Thomas Morgan, Joe Neeman, Matthias Neeracher, Keith OHara, Tatsuya Ono,
-Benjamin Peterson, Guy Gascoigne-Piggford, Henning Hraban Ramm, Nathan
-Reed, Julien Rioux, Stan Sanderson, Andreas Scherer, Johannes
-Schindelin, Patrick Schmidt, Boris Shingarov, Kim Shrier, Edward
-Sanford Sutton, David Svoboda, Owen Tuz, Sebastiano Vigna, Jan Warchoł,
-Arno Waschk, John Williams, Andrew Wilson, Milan Zamazal, Rune Zedeler,
-Rodolfo Zitellini
+Thomas Morgan, David Nalesnik, Matthias Neeracher, Keith OHara, Justin
+Ohmie, Tatsuya Ono, Benkő Pál, Benjamin Peterson, Guy
+Gascoigne-Piggford, Henning Hraban Ramm, Nathan Reed, Julien Rioux,
+Stan Sanderson, Andreas Scherer, Johannes Schindelin, Patrick Schmidt,
+Boris Shingarov, Kim Shrier, Edward Sanford Sutton, Adam Spiers, David
+Svoboda, Heikki Taurainen, Piers Titus van der Torren, Owen Tuz,
+Sebastiano Vigna, Jan-Peter Voigt, Arno Waschk, John Williams, Andrew
+Wilson, Milan Zamazal, Rune Zedeler, Rodolfo Zitellini
 
 Font
 ....
@@ -158,16 +162,17 @@ Documentation
 
 Erlend Aasland, Trevor Bača, Alard de Boer, Colin Campbell, Jay
 Hamilton, Joseph Harfouch, Andrew Hawryluk, Cameron Horsburgh, Geoff
-Horton, Ian Hulin, Heikki Junes, Kurtis Kroon, James Lowe, Dave
-Luttinen, Kieren MacMillan, Christian Mondrup, Mike Moral, Eyolf
-Østrem, Ralph Palmer, François Pinard, David Pounder, Michael
-Rasmussen, Till Rettig, Patrick Schmidt, Carl D. Sorensen, Anh Hai
-Trinh, Eduardo Vieira, Rune Zedeler
+Horton, Heikki Junes, Kurtis Kroon, James Lowe, Dave Luttinen, Kieren
+MacMillan, Christian Mondrup, Mike Moral, Eyolf Østrem, Ralph Palmer,
+François Pinard, David Pounder, Michael Rasmussen, Till Rettig, Pavel
+Roskin, Patrick Schmidt, Alberto Simoes, Anh Hai Trinh, Eduardo Vieira,
+Stefan Weil, Rune Zedeler
 
 Support
 .......
 
-Anthony Fok, Christian Hitz, Chris Jackson, Heikki Junes, David Svoboda
+Colin Campbell, Anthony Fok, Christian Hitz, Phil Holmes, Chris Jackson,
+Heikki Junes, David Svoboda
 
 Translation
 ...........
index b1c47c1f7950dbc79663ced0ba74a967b4d30b4e..c1a194b54b09198fd6531eded970b61753936e80 100644 (file)
@@ -9,10 +9,8 @@ depth = ..
 
 NAME = documentation
 LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
-MANUALS_SUBDIRS = usage contributor essay \
-  web learning notation extending
-SUBDIRS = $(MANUALS_SUBDIRS) snippets logo pictures misc po css topdocs \
-  included ly-examples $(LANGS)
+SUBDIRS = logo pictures misc po css topdocs \
+  ly-examples $(LANGS)
 STEPMAKE_TEMPLATES = documentation texinfo tex omf
 LOCALSTEPMAKE_TEMPLATES = lilypond ly
 
@@ -27,14 +25,12 @@ $(outdir)/snippets/index.html: TEXI2HTML_FLAGS += -D short_toc
 
 ### Extra source files
 
-README_TOP_FILES= DEDICATION THANKS
+README_TOP_FILES= DEDICATION
 
 IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
 SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
 OUT_SNIPPET_LY_FILES = $(SNIPPET_LY_FILES:%.ly=out/%.ly)
 
-EXTRA_DIST_FILES = $(call src-wildcard,*.init) $(call src-wildcard,*.bst)
-
 ### Out files
 
 # Dependencies
@@ -90,6 +86,13 @@ endif
 
 include $(depth)/make/stepmake.make
 
+DOCUMENTATION_INCLUDES += -I $(outdir) \
+  -I $(top-build-dir)/Documentation/snippets/out \
+  -I $(top-src-dir)/Documentation/included \
+  -I $(top-src-dir)/Documentation/pictures \
+  -I $(top-src-dir)/Documentation \
+  -I $(top-src-dir)/input/regression
+
 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
 
 
@@ -99,7 +102,6 @@ $(XREF_MAPS_DIR)/web.xref-map: XREF_MAP_FLAGS += --split=node
 ### AJAX scripts
 JS_FILES = $(call src-wildcard,*.js)
 PHP_FILES = $(call src-wildcard,*.php)
-EXTRA_DIST_FILES += $(JS_FILES) $(PHP_FILES)
 
 OUT_JS_FILES = $(JS_FILES:%.js=$(outdir)/%.js)
 OUT_PHP_FILES = $(PHP_FILES:%.php=$(outdir)/%.php)
@@ -116,18 +118,21 @@ $(outdir)/colorado.itexi:
        BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \
                -s $(top-src-dir)/Documentation/lily-bib \
                -o $(outdir)/colorado.itexi \
+               -q \
                $(src-dir)/essay/colorado.bib
 
 $(outdir)/computer-notation.itexi:
        BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \
                -s $(top-src-dir)/Documentation/lily-bib \
                -o $(outdir)/computer-notation.itexi \
+               -q \
                $(src-dir)/essay/computer-notation.bib
 
 $(outdir)/engravingbib.itexi:
        BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \
                -s $(top-src-dir)/Documentation/lily-bib \
                -o $(outdir)/engravingbib.itexi \
+               -q \
                $(src-dir)/essay/engravingbib.bib
 
 $(outdir)/essay.texi: \
@@ -169,8 +174,6 @@ extra-local-help:
        @echo
 
 info: $(INFO_FILES)
-       @echo export LILYPOND_DATADIR=$(LILYPOND_DATADIR)
-       @echo export PYTHONPATH=$(PYTHONPATH)
 
 xml: $(outdir)/notation/notation.xml $(outdir)/internals/internals.xml
 
@@ -204,27 +207,27 @@ $(OUT_TXT_FILES): $(outdir)/%.txt: $(top-src-dir)/%
        cp -f $< $@
 
 $(OUT_TXT_FILES:%.txt=%.html): $(outdir)/%.html: $(outdir)/%.txt
-       $(PYTHON) $(step-bindir)/text2html.py $<
+       $(buildscript-dir)/text2html $<
 
 # Explicitly list the dependencies on generated content
-$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi
+$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi $(outdir)/version.itexi
 
 ifeq ($(out),www)
 ## Extra images dependencies
 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
 
 $(outdir)/pictures:
-       $(MAKE) -C pictures WWW-1
+       $(MAKE) -C pictures out=www WWW-1
        ln -sf ../pictures/$(outdir) $@
 
 $(outdir)/web.texi: $(outdir)/css $(outdir)/ly-examples
 
 $(outdir)/css:
-       $(MAKE) -C css
+       $(MAKE) -C css out=www WWW-1
        ln -sf ../css/$(outdir) $@
 
 $(outdir)/ly-examples:
-       $(MAKE) -C ly-examples
+       $(MAKE) -C ly-examples out=www WWW-1
        ln -sf ../ly-examples/$(outdir) $@
 endif
 
@@ -277,7 +280,7 @@ $(outdir)/%.php: %.php
 $(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
        $(MAKE) -C $(top-src-dir)/mf
 
-$(outdir)/notation.texi: $(outdir)/ly-grammar.txt
+$(outdir)/contributor.texi: $(outdir)/ly-grammar.txt
 
 ## Rules for the automatically generated documentation
 $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
@@ -288,7 +291,7 @@ $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
 # of internals every time.  however, this triggers
 # compilation during install, which is a bad thing (tm).
 
-$(outdir)/internals.texi: $(LILYPOND_BINARY)
+$(outdir)/internals.texi: $(LILYPOND_BINARY) $(INIT_LY_SOURCES) $(SCHEME_SOURCES)
        cd $(outdir) && $(buildscript-dir)/run-and-check "$(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation" "generate-documentation.log"
 
 ###############################################
@@ -307,9 +310,6 @@ endif
 ifneq ($(ISOLANG),)
 new-lang-dir:
        mkdir -p $(ISOLANG)/$(DIR)
-       cp fr/GNUmakefile $(ISOLANG)
-       cp fr/$(DIR)/GNUmakefile $(ISOLANG)/$(DIR)
-       sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/$(DIR)/GNUmakefile
        rm -f $(outdir)/*.*tely $(outdir)/*.*texi
        $(PYTHON) $(auxscript-dir)/texi-langutils.py -d $(outdir) -l $(ISOLANG) -o doc.pot --skeleton --gettext $$(cd $(ISOLANG) && ls -1 ../$(DIR).tely ../$(DIR).texi)
        for i in $$(cd $(outdir) && ls -1 $(DIR).tely $(DIR).texi); do\
@@ -324,7 +324,10 @@ new-lang-dir:
 
 new-lang:
 # Also for updating/adding missing files
-       mkdir -p $(ISOLANG)
+       mkdir -p $(ISOLANG)/included
+       if test -z "`ls $(ISOLANG)/included`"; then touch $(ISOLANG)/included/.gitignore; fi
+       cp fr/GNUmakefile $(ISOLANG)
+       sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile
        $(foreach i,$(TRANSLATION_DIRS),$(MAKE) new-lang-dir DIR=$(i) &&) :
        msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
        test -e po/$(ISOLANG).po || cp po/lilypond-doc.pot po/$(ISOLANG).po
index b59ee7e91f2826bdca770316d255eb0b8d3e8399..0815787d3c127a1c2572f5041721103787b91593 100644 (file)
@@ -35,28 +35,11 @@ See user manual, \NAME\
 
 @finalout
 
-@node Top, Fixes and changes after 2.16.0, (dir), (dir)
-@top New features in 2.16
-
-@menu
-* Fixes and changes after 2.16.0::
-* New features in 2.16 since 2.14::
-@end menu
-
+@node Top
+@top New features in 2.18 since 2.16
 
 @allowcodebreaks false
 
-@node Fixes and changes after 2.16.0, New features in 2.16 since 2.14, Top, Top
-@section Fixes and changes after 2.16.0
-@table @b
-@item 2.16.1
-Please refer to the bug tracker for
-@uref{http://code.google.com/p/lilypond/issues/list?can=1&q=Fixed_2_16_1,
-issues fixed in 2.16.1}.
-@end table
-
-@node New features in 2.16 since 2.14,  , Fixes and changes after 2.16.0, Top
-@section New features in 2.16 since 2.14
 @itemize
 
 @ignore
@@ -77,355 +60,449 @@ which scares away people.
 * only show user-visible changes.
 
 @end ignore
-@item
-Support for cross-staff stems on chords, using @code{crossStaff}
-and the @code{Span_stem_engraver}.  This calculates the length of
-cross-staff stems automatically.
-@lilypondfile[quote]
-{cross-staff-stems.ly}
 
 @item
-The syntax of words (character sequences recognized without enclosing
-quotes) and commands (now always a backslash @samp{\} followed by a
-word) has been unified across all modes: it now consists of alphabetic
-characters, possibly enclosing isolated dashes @samp{-} and underlines
-@samp{_}.
+There is now a new context type called @code{NullVoice} which, while not
+appearing in the printed output, can be used to align lyrics.  This can
+be particularly convenient when used in parallel with a
+@code{\partcombine} construct.
 
-As one consequence, using unquoted text scripts like (literally!)
-@example
-@{ c-script c\f_script @}
-@end example
-will now tend to result in invalid music.  Omitting quote marks
-for arbitrary text rather than keywords has never been good practice or
-even documented, and it is unlikely to have seen significant use.
-
-Staying with established conventions (like not using dashes or
-underlines for command names intended to be used inside of music)
-remains advisable.  The reason for this change is more robust
-recognition of LilyPond's lexical units for LilyPond itself as well as
-external tools interpreting its syntax.
-
-@item
-Support for Kievan square notation:
-@lilypond[quote,relative=1,verbatim]
-\new KievanVoice {
-  \cadenzaOn
-  c d e f g a bes
-  \bar "kievan"
-}
-@end lilypond
+@lilypond[verbatim,quote]
+soprano = \relative c' { c e g c }
+alto = \relative c' { a c e g }
+verse = \lyricmode { This is my song }
 
-@item
-Augmentation dots now avoid the other voice in two-voice polyphony
-so that users can move the @code{Dot_column_engraver} to set dots
-independently for each @code{Voice}.
-@lilypond[quote]
-\layout {
-  \context {
-    \Staff
-    \remove Dot_column_engraver
-  } \context {
-    \Voice
-    \consists Dot_column_engraver
-  }
+\score {
+  \new Staff <<
+    \partcombine \soprano \alto
+    \new NullVoice = "aligner" \soprano
+    \new Lyrics \lyricsto "aligner" \verse
+  >>
+  \layout {}
 }
-\relative c'' <<
-  { \time 6/8
-    <d f g>4. <d f g> <f, g> b
-  } \\ {
-    <f g b>4. <g b d> <b d> <e, g>
-  } >>
 @end lilypond
 
-@item
-A Scheme function to adjust the control points of curves such as slurs
-and ties, developed by several users, is now included in LilyPond.
-@lilypond[quote,verbatim,relative=2]
-g8->( bes,-.) d4
-\shape Slur #'((-0.5 . 1.5) (-3 . 0) (0 . 0) (0 . 0))
-g8->( bes,!-.) d4
-@end lilypond
-
-@item
-Use of @code{\tempo} specifications in @code{\midi} blocks (removed in
-2.9.16 in favor of explicit @code{tempoWholesPerMinute} settings) has
-seen a revival: now any kind of property-setting music is turned into
-context definitions within output specifications, allowing for
-declarations like
-@example
-\layout @{ \accidentalStyle modern @}
-\midi @{ \tempo 4. = 66 @}
-@end example
 
 @item
-The LilyPond G clef has been redesigned - upper loop is now more balanced,
-bottom crook sticks out less and the "spine" (main vertical line) is more
-evenly curved. The old and new versions can be compared by looking at the
-documentation:
-@uref{http://lilypond.org/doc/v2.14/Documentation/notation/the-feta-font.html#clef-glyphs, old version},
-@uref{http://lilypond.org/doc/v2.15/Documentation/notation/the-feta-font.html#clef-glyphs, new version}.
+Several articulations can be put into a single variable or
+returned from an event function:
 
-@item
-Lilypond's stencil commands have been simplified to allow for less code
-duplication and better height approximations of graphical objects.  The
-following stencil commands have been eliminated:
-@itemize
-@item @code{beam}
-@item @code{bezier-sandwich}
-@item @code{bracket}
-@item @code{dashed-slur}
-@item @code{dot}
-@item @code{oval}
-@item @code{repeat-slash}
-@item @code{zigzag-line}
-@end itemize
-
-@item
-Flags are now treated as separate objects rather than as stem parts.
-@lilypond[fragment,quote,relative=2]
-\override Flag #'color = #red
-g8
+@lilypond[verbatim,quote]
+sempreStacc = -. ^\markup \italic sempre
+\relative { c''4\sempreStacc c c c }
 @end lilypond
 
 @item
-Two alternative methods for bar numbering can be set, especially for
-when using repeated music;
-
-@lilypond[fragment,quote,relative=1,noragged-right]
-\relative c'{
-  \set Score.alternativeNumberingStyle = #'numbers
-  \repeat volta 3 { c4 d e f | }
-    \alternative {
-      { c4 d e f | c2 d \break }
-      { f4 g a b | f4 g a b | f2 a | \break }
-      { c4 d e f | c2 d }
-    }
-  c1 \break
-  \set Score.alternativeNumberingStyle = #'numbers-with-letters
-  \repeat volta 3 { c,4 d e f | }
-    \alternative {
-      { c4 d e f | c2 d \break }
-      { f4 g a b | f4 g a b | f2 a | \break }
-      { c4 d e f | c2 d }
-    }
-  c1
+The baseline of score markups is now taken from the reference
+point (usually the middle of the staff) of the first bottom system
+rather than the top of the bounding rectangle.  The following
+@lilypond[verbatim,quote]
+\markup {
+  violin: \score { \new Staff { <g d' a' e''>1 }
+                   \layout { indent=0 } } ,
+  cello: \score { \new Staff { \clef "bass" <c, g, d a> }
+                  \layout { indent=0 } }
 }
 @end lilypond
+previously looked like
+@lilypond[quote]
+\markup {
+  violin: \general-align #Y #UP
+          \score { \new Staff { <g d' a' e''>1 }
+                   \layout { indent=0 } } ,
+  cello:  \general-align #Y #UP
+          \score { \new Staff { \clef "bass" <c, g, d a> }
+                  \layout { indent=0 } }
+}
+@end lilypond
+without a reliable way to get both scores to line up.
+
+@item
+LilyPond no longer automatically infers a @samp{\defaultchild}
+context in a context definition with @samp{\accepts} clauses.  Any
+context definition without an explicit or inherited
+@samp{\defaultchild} definition counts as a @samp{Bottom} context
+and will be eligible for rhythmic events and overrides without
+causing the implicit creation of other contexts.  Be sure to
+specify a @samp{\defaultchild} for non-@samp{Bottom} contexts when
+defining them from scratch.
+
+@item
+There is now extensive support for both discant and bass accordion
+register symbols in the @samp{scm accreg} module, see
+@ruser{Accordion Registers}.
+@lilypond[verbatim,quote]
+#(use-modules (scm accreg))
+\new PianoStaff
+<<
+  \new Staff \relative
+  { \clef "treble"  \discant "10"
+    r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
+    \discant "121"
+    << { r16 <f bes> r <e a> r <d g> } \\
+       { d r a r bes r } >> |
+    <cis e a>1
+  }
+  \new Staff \relative
+  { \clef "treble"  \freeBass "1"
+    r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
+    \clef "bass"  \stdBass "Master"
+    << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
+         <e a cis>1^"a" } \\
+       { d8_"D" c_"C" bes_"B" | a1_"A" }
+    >>
+  }
+>>
+@end lilypond
 
 @item
-The following is a fundamental change in LilyPond's music
-representation: Rhythmic events like @code{LyricEvent} and
-@code{NoteEvent} are no longer wrapped in @code{EventChord} unless they
-have been actually entered as part of a chord in the input.  If you
-manipulate music expressions in Scheme, the new behavior may require
-changes in your code.  Calling the music function @code{\eventChords} or
-the Scheme function @code{event-chord-wrap!}  converts to the old
-representation; using one of those might be easiest for keeping legacy
-code operative.
-
-The following three items are consequences of this change.
-
-@item
-The repetitive chord entry aid @code{q} has been reimplemented.
-Repeated chords are now replaced right before interpreting a music
-expression.  In case the user wants to retain some events of the
-original chord, he can run the repeat chord replacement function
-@code{\chordRepeats} manually.
+New commands @code{markLengthOn} and @code{markLengthOff} control
+the allowance of horizontal space for tempo and rehearsal marks.
+
+@lilypond[quote,relative=2]
+\markLengthOn
+\compressFullBarRests
+\tempo "Molto vivace" c2 c'
+\mark\default
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
+\bar "||"
+\markLengthOff
+\tempo "Molto vivace" c2 c'
+\mark#1
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
+@end lilypond
 
 @item
-String numbers and right hand fingerings on single notes now appear
-without having to be written inside of chord brackets.
+Rehearsal marks at the beginning of a line are now placed to the right
+of the clef and key signature by default.  As in previous versions, the
+@code{break-alignable-interface} controls the behavior.
 
-@item
-Music functions now work the same when used inside or outside of chords,
-including all the possibilities of argument parsing.  Music variables
-can be used inside of chords: a construct like
-@lilypond[verbatim,quote,ragged-right]
-tonic=fis'
-{ <\tonic \transpose c g \tonic> }
+@lilypond[quote,relative=2]
+\set Score.barNumberVisibility = #all-bar-numbers-visible
+\set Timing.currentBarNumber = #72
+\bar"||" \time 3/4 \key e\major \mark#10 \tempo "Adagio" b2.
 @end lilypond
-@noindent
-now works as expected.  One can use @code{#@{@dots{}#@}} for
-constructing chord constituents.  @code{\tweak} now works on single
-notes without needing to wrap them in a chord.  Using it on command
-events and lyrics is now possible, but not likely to give results yet.
 
 @item
-@code{\tweak} now takes an optional layout object specification.  It can
-be used for tweaking layout objects that are only indirectly caused by
-the tweaked event, like accidentals, stems, and flags:
+Decimal numbers can now be written directly in music,
+without a hash sign.  Together with the previous change
+in the way object properties are specified, the code to
+change the length of stems has changed from this:
+@example
+\override Stem #'length = #5.6
+e' f' g' a'
+@end example
+to this:
+@example
+\override Stem.length = 5.6
+e' f' g' a'
+@end example
 
-@lilypond[verbatim,quote,ragged-right,relative=2]
-<\tweak Accidental #'color #red   cis4
- \tweak Accidental #'color #green es
-                                  g>
+One has to write a digit on both sides of the dot -- values like
+@code{4.} or @code{-.3} are not allowed.
+
+Decimal fractions are also not accepted in @code{\chordmode}.
+
+@item
+A number of shorthands like @code{(}, @code{)}, @code{|},
+@code{[}, @code{]}, @code{~}, @code{\(}, @code{\)} and others can
+now freely be redefined like normal commands.  An example would be
+@lilypond[verbatim,quote]
+"\\{" = (
+"\\}" = )
+"(" = \melisma
+")" = \melismaEnd
+
+\new Staff <<
+  \relative c' {
+    c8 \{ d e f \} % slurred
+    g ( a b c ) % no slur, but with melisma
+    c,1 \bar "|."
+   }
+   \addlyrics { Li -- ly -- pond. }
+>>
 @end lilypond
 
 @item
-Scheme expressions inside of embedded Lilypond (@code{#@{@dots{}#@}})
-are now executed in lexical closure of the surrounding Scheme code.
-@code{$} is no longer special in embedded Lilypond.  It can be used
-unconditionally in Lilypond code for immediate evaluation of Scheme
-expressions, similar to how @code{ly:export} could previously be used.
-@code{ly:export} has been removed.  As a consequence, @code{#} is now
-free to delay evaluation of its argument until the parser actually
-reduces the containing expression, greatly reducing the potential for
-premature evaluation.  There are also @q{splicing} operators @code{$@@}
-and @code{#@@} for interpreting the members of a list individually.
+The articulation shorthand for @code{\staccatissimo} has been
+renamed from @code{-|} to@tie{}@code{-!}.
 
 @item
-To reduce the necessity for using @code{$}, Scheme expressions written
-with @code{#} are interpreted as music inside of music lists, and as
-markups or markup lists inside of markups.
+Tempo change ranges are now written as @code{\tempo 4 = 60 - 68}
+rather than @code{\tempo 4 = 60 ~ 68}.
 
 @item
-Support for jazz-like chords has been improved: Lydian and altered
-chords are recognised; separators between chord modifiers are now
-treated independently of separators between ``slash'' chords and their
-bass notes (and by default, slashes are now only used for the latter
-type of separator); additional pitches are no longer prefixed with
-``add'' by default; and the ``m'' in minor chords can be customized.
-@ruser{Customizing chord names} for more information.
+Grob @code{OctavateEight} was renamed to @code{ClefModifier}.
+Related context properties were renamed from @code{xxxOctavationyyy}
+to @code{xxxTranspositionyyy}.
 
 @item
-The @code{\markuplines} command has been renamed to @code{\markuplist}
-for a better match with its semantics and general Lilypond
-nomenclature.
+There is a new @code{\absolute} command explicitly marking music
+as being entered in absolute pitch.  While this has been the
+default previously, an explicit @code{\absolute} also prevents
+reinterpretation when the passage is placed inside of
+@code{\relative}:
+@lilypond[verbatim,quote]
+\relative c { c'4 \absolute { f'' g'' } c }
+@end lilypond
 
 @item
-The interface for specifying string tunings in tablature has been
-simplified considerably and employs the scheme function
-@code{\stringTuning} for most purposes.
+When @code{\relative} is used without an explicit reference pitch,
+the reference pitch now is the middle of the first octave, making
+the first entered pitch indistinguishable from absolute pitch.
+Previously, omitting the reference pitch would have lead to a
+default of @code{c'}.  Since that choice was somewhat arbitrary,
+recommended usage was to always specify the reference pitch.
 
 @item
-Beams can now have their slopes preserved over line breaks.
-@lilypond[fragment,quote,relative=2]
-\override Beam #'breakable = ##t
-a8[ b c d e f g \bar "" \break f e d c b a]
-\once \override Beam #'positions = #beam::align-with-broken-parts
-a8[ b c d e f g \bar "" \break f e d c b a]
-\once \override Beam #'positions = #beam::slope-like-broken-parts
-a8[ b c d e f g \bar "" \break f e d c b a]
+A new command @code{\single} can be used for converting a property
+override into a tweak to be applied on a single music expression:
+
+@lilypond[quote,verbatim,relative=2]
+<a \single\voiceTwoStyle e' a>1
 @end lilypond
-To do this, several callback functions are now deprecated.
-@itemize
-@item @code{ly:beam::calc-least-squares-positions}
-@item @code{ly:beam::slope-damping}
-@item @code{ly:beam::shift-region-to-valid}
-@end itemize
-Furthermore, @code{ly:beam::quanting} now takes an additional argument
-to help calculations over line breaks.  All of these functions are now
-automatically called when setting the @code{positions} parameter.
 
 @item
-In function arguments music, markups and Scheme expressions (as well as
-several other syntactic entities) have become mostly interchangeable and
-are told apart only by evaluating the respective predicate.  In several
-cases, the predicate is consulted by the parser, like when deciding
-whether to interpret @code{-3} as a number or a fingering event.
+Two ways of letting graphical objects not appear in the output are
+overriding its @code{transparent} property with @code{#t}
+(retaining the original spacing) or overriding its @code{stencil}
+property with @code{#f} (not using any space at all).  Those two
+operations now have the shorthands @code{\hide} and @code{\omit},
+respectively.  They can either be given a music expression to
+tweak, or the name of a graphical object for which an override
+should be created (for specifying both, use @code{\single} on the
+override form):
 
-@item
-Music functions (and their close relatives) can now be defined with
-optional arguments.
+@lilypond[quote,verbatim]
+\new Staff \with { \omit Clef }
+\relative c'' <a e' \hide a>1
+@end lilypond
 
 @item
-For defining commands executed only for their side-effects,
-@code{define-void-function} is now available.
+A new command @code{\temporary} can be applied to overrides in
+order to not have them replace previous property settings.  If a
+@code{\revert} is applied to the same property subsequently, the
+previous setting reappears:
 
-@item
-There is a new @code{define-event-function} command in analogy to
-@code{define-music-function} that can be used for defining music
-functions acting as post events without requiring a direction specifier
-(@code{-}, @code{^}, or @code{_}) placed before them.
-@lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
-         (make-dynamic-script arg))
-\relative c' { c\dyn pfsss }
+@lilypond[quote,verbatim,relative=2]
+\override NoteHead.color = #red c4
+\override NoteHead.color = #green d
+\revert NoteHead.color e2
+\override NoteHead.color = #red c4
+\temporary\override NoteHead.color = #green d
+\revert NoteHead.color e
+\revert NoteHead.color c
 @end lilypond
 
-@item
-A list of ASCII aliases for special characters can be included.
-@lilypond[quote,verbatim]
-\paper {
-  #(include-special-characters)
-}
-\markup "&bull; &dagger; &copyright; &OE; &ss; &para;"
-@end lilypond
+This is mainly useful for writing music functions that need to
+have some property changed just for the duration of the function.
 
 @item
-There is a new @code{define-scheme-function} command in analogy to
-@code{define-music-function} that can be used to define functions
-evaluating to Scheme expressions while accepting arguments in Lilypond
-syntax.
+@code{\tag}, @code{\removeWithTag}, and @code{\keepWithTag} can
+now accept a list of symbols rather than just a single symbol for
+marking, removing, and keeping music with any of multiple tags.
+This is particularly important for @code{\keepWithTag} since one
+cannot achieve the same effect by using multiple consecutive
+@code{\keepWithTag} commands.
 
 @item
-The construct @code{#@{ @dots{} #@}} can now be used not just for
-constructing sequential music lists, but also for pitches (distinguished
-from single note events by the absence of a duration or other
-information that can't be part of a pitch), single music events, void
-music expressions, post events, markups (mostly freeing users from
-having to use the @code{markup} macro), markup lists, number
-expressions, context definitions and modifications, and a few other
-things.  If it encloses nothing or only a single music event, it no
-longer returns a sequential music list but rather a void music
-expression or just the music event itself, respectively.
+The @samp{-d old-relative} option has been removed.  Not actually
+accessible from the command line any more, its remaining use was
+for interpretating @code{\relative} in LilyPond files converted
+automatically from version@tie{}1.8 or older.  It is unclear how
+much of this was actually still operative.
 
 @item
-Pitches can be used on the right side of assignments.  They are
-distinguished from single note events by the absence of a duration or
-other information that can't be part of a pitch.
+The meaning of @code{instrumentTransposition} has been reversed.
+After
+@example
+\set instrumentTransposition = #@{ b #@}
+@end example
+a written @code{c'} now sounds like @code{b}.  Previously, this
+would have been the other way round.  This and the following change
+should make dealing with transposing instruments more
+straightforward.
 
 @item
-New command-line option @option{--loglevel=@var{level}} to control how much output
-LilyPond creates. Possible values are ERROR, WARN, BASIC_PROGRESS, PROGRESS, DEBUG.
+The music generated by @code{\set} and @code{\override} commands
+is no longer affected by @code{\transpose}.  The main consequence
+is that @code{\transpose} will transpose audible/@/concert pitch and
+printed pitch by the same amount even when the transposed music
+contains @code{\transposition}.  Previously,
+@example
+\transpose c' f' \transposition bes'
+@end example
+was equivalent to @code{\transposition f'}.  Now it stays
+equivalent to @code{\transposition bes'}.
 
 @item
-@code{\once \set} now correctly resets the property value to the previous value.
-@lilypond[fragment,quote,relative=2]
-  \set fingeringOrientations = #'(left)
-  <e-1>4
-  \once \set fingeringOrientations = #'(right)
-  <e-1>
-  <e-1>-"left"
+When checking for collisions, LilyPond no longer treats objects as
+rectangles.  Instead, the actual shape of objects is approximated
+using an integral-like approach.  This generally results in more
+even and snug positioning of objects and systems:
+
+@lilypond[relative=1]
+#(ly:set-option 'debug-skylines #t)
+\dynamicUp
+c'4\f a4\f d\f( f)
+a,4\< c c c\!
+d4-.\downbow a4^"r'venu..." c \tempo "T1" e
 @end lilypond
 
-@item
-The alignment of dynamic spanners (hairpins, text crescendo, etc.) is now
-automatically broken if a different direction is explicitly given.
-@lilypond[fragment,quote,relative=2]
-c4_\< c c^\> c c1_\p
+Previously, the above snippet looked like this:
+
+@lilypond[relative=1]
+#(ly:set-option 'debug-skylines #t)
+\override Hairpin #'vertical-skylines = #'()
+\override DynamicText #'vertical-skylines = #'()
+\override TextScript #'vertical-skylines = #'()
+\override Score.MetronomeMark #'vertical-skylines = #'()
+\override Staff.Clef #'vertical-skylines = #'()
+\dynamicUp
+c'4\f a4\f d\f( f)
+a,4\< c c c\!
+d4-.\downbow a4^"r'venu..." c \tempo "T1" e
 @end lilypond
 
+Affected objects include @code{Accidentals}, @code{Beams}, @code{Clefs},
+@code{Dynamics}, @code{FiguredBass}, @code{Flags}, @code{Glissandos},
+@code{Lyrics}, @code{MetronomeMarks}, @code{OttavaBrackets},
+@code{Pedals}, @code{RehearsalMarks}, @code{Rests}, @code{Scripts},
+@code{TextScripts}, @code{Ties}, @code{Tuplets} and @code{VoltaBrackets}.
 
 @item
-Appoggiaturas and acciaccaturas now also work inside a slur, not only inside
-a phrasing slur. Also, a function @code{\slashedGrace} was added that does
-not use a slur from the acciaccatura note.
-@lilypond[fragment,quote,relative=2]
-c4( \appoggiatura e8 d4 \acciaccatura e8 d4 \slashedGrace e8 c4)
+Tuplets are now created with the @code{\tuplet} command, which
+takes a fraction @code{@var{t}/@var{n}} to specify that @var{t}
+notes are played in the time usually allowed for @var{n}. One
+@code{\tuplet} command can create several tuplet groups if their
+duration is typed after the fraction.
+@lilypond[quote,verbatim,relative=2]
+\tuplet 3/2 { c8 d e } \tuplet 3/2 { f e d } c2
+\tuplet 3/2 4 { c8 d e f e d } c2
+@end lilypond
+The @code{\times} command with its inverted fraction order
+@code{@var{n}/@var{t}} is still available.
+
+@item
+Introducing two new markup-commands; @code{\draw-dashed-line} and
+@code{\draw-dotted-line}.
+
+@noindent
+The dashed-line extends to the whole length given by @var{dest}, if
+@code{full-length} is set to @code{#t} (this is the default) without any
+space at the beginning or end.  @code{off} will then be altered to fit.
+To insist on the given (or default) values of @code{on}, @code{off} use
+@code{\override #'(full-length . #f)}.  Manual settings for @code{on},
+@code{off} and @code{phase} are possible.
+
+@noindent
+The dotted-line always extends to the whole length given by @var{dest},
+without any space at the beginning or end.  Manual settings for
+@code{off} are possible to get larger or smaller space between the dots.
+The given (or default) value of @code{off} will be altered to fit the
+line-length.
+
+@lilypond[verbatim,quote]
+\markup {
+  \draw-dashed-line #'(5.1 . 2.3)
+  \override #'(on . 0.3)
+  \override #'(off . 0.5)
+  \draw-dashed-line #'(5.1 . 2.3)
+  \draw-dotted-line #'(5.1 . 2.3)
+  \override #'(thickness . 2)
+  \override #'(off . 0.2)
+  \draw-dotted-line #'(5.1 . 2.3)
+}
 @end lilypond
 
+@item
+Starting with version@tie{}2.17.10, error messages or the
+@code{textedit} @acronym{URI} used for point-and-click
+functionality specify column numbers starting with@tie{}1 rather
+than@tie{}0.  The byte offset (also part of @code{textedit}
+@acronym{URI}s) still starts at@tie{}0.
 
 @item
-To suppress the line on a crescendo text spanner (and other similar spanners),
-LilyPond now fully supports the @code{#'style = #'none} property.
-@lilypond[fragment,quote,relative=2]
-\override DynamicTextSpanner #'style = #'none
-c4\cresc c c g, c'\p
+The @code{\clef} command supports optional transposition:
+@lilypond[verbatim,quote,relative=1]
+\clef "treble_(8)"
+c2 c
+\clef "bass^[15]"
+c2 c
 @end lilypond
 
 @item
-LilyPond.app now supports MacOS X 10.7, thanks Christian Hitz!
+The LilyPond syntax of dot-separated words @code{Voice.Accidental}
+has been made interchangeable with @code{#'(Voice Accidental)}, a
+Scheme list of symbols.  As one result, code like
+@example
+\override Voice.TextSpanner #'(bound-details left text) = "rit."
+@end example
+is now equivalent to
+@example
+\override Voice.TextSpanner bound-details.left.text = "rit."
+@end example
+or even
+@example
+\override #'(Voice TextSpanner) bound-details.left.text = "rit."
+@end example
 
 @item
-Glissandi can now span multiple lines.
+Grob and grob property path no longer need to be specified as two
+separate arguments to commands like @samp{\override} and
+@code{\revert}, allowing for the syntax
+@example
+\override Voice.TextSpanner.bound-details.left.text = "rit."
+@end example
+Since complementary music functions like @samp{\overrideProperty}
+cannot support forms with and without separating space at the same
+time, using a single dotted path is now the preferred form.
+Specifying grob path and grob property path separately, currently
+still supported with @samp{\override} and @samp{\revert} for
+compatibility reasons, is deprecated.
+
+@item
+Due to words now being accepted as symbol function arguments, the
+interfaces of @samp{\accidentalStyle}, @samp{\alterBroken},
+@samp{\footnote} and @samp{\tweak} had to be redesigned where
+optional symbol arguments were involved.  Please check the
+respective music function documentation for details.
+
+@item
+Several commands now accept symbol lists (conveniently entered as
+dot-separated words) for various kinds of arguments.  These
+include @samp{\accidentalStyle}, @samp{\alterBroken},
+@samp{\footnote}, @samp{\hide}, @samp{\omit},
+@samp{\overrideProperty}, @samp{\shape}, and @samp{\tweak}.
+
+@item
+The bar line user interface has changed. Bar glyphs now resemble the
+appearance of the bar line, so a left repeat sign has to be coded
+as @code{.|:}. The command @code{\defineBarLine} provides an easy way
+to define additional bar line styles.
+
+@item
+Accidentals in the key signature may be printed in octaves other
+than their traditional positions, or in multiple octaves.
+@lilypond[quote,relative=0]
+\override Staff.KeySignature #'flat-positions = #'((-5 . 5))
+\override Staff.KeyCancellation #'flat-positions = #'((-5 . 5))
+\clef bass \key es \major es g bes d
+\clef treble \bar "||" \key es \major es g bes d
+\override Staff.KeySignature #'sharp-positions = #'(2)
+\bar "||" \key d \major b fis b2
+@end lilypond
 
 @end itemize
 
 @ifhtml
 For older news, go to
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/},
 @uref{http://lilypond.org/doc/v2.14/Documentation/changes/},
-@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS.html},
 or @uref{../,go back} to the Documentation index.
 
 
index 123c1aa31a03bfd4c8cafa29b641f1c5382f292e..f3dac48c9189431e6ee92208a4d88d236177971d 100644 (file)
@@ -18,6 +18,7 @@
 \fi
 @end tex
 
+@include cyrillic.itexi
 
 @c   ***** Displaying text *****
 
index 74d03bd1b7e8fb9a05ba3fbaeee96dcfa49733cd..9541883b74a8cec3fd307c3d70ba3cc59ee6ebc2 100644 (file)
@@ -66,6 +66,7 @@ Copyright @copyright{} 2007--2012 by the authors.
 
 Appendices
 
+* LilyPond grammar::
 * GNU Free Documentation License:: License of this document.
 @end menu
 
@@ -91,7 +92,14 @@ Appendices
 @include contributor/feta-font.itexi
 @include contributor/administration.itexi
 
+@node LilyPond grammar
+@appendix LilyPond grammar
+
+This appendix contains a description of the LilyPond grammar, as
+output from the parser.
+
+@verbatiminclude ly-grammar.txt
+
 @include fdl.itexi
 
 @bye
-
diff --git a/Documentation/contributor/GNUmakefile b/Documentation/contributor/GNUmakefile
deleted file mode 100644 (file)
index c93c9e0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 669537580732a6549c9faf088ce854fdc0fd090c..90fe795a0cffa5b3617765afc330674f90225b64 100644 (file)
@@ -126,7 +126,7 @@ on which part of the job, checks to make sure that everything is
 running smoothly, and has final say on our policy for
 Documentation.  Also includes LSR work.
 
-Currently: Graham
+Currently: None
 
 @item
 Translation Meister: trains new translators, updates the
@@ -135,19 +135,6 @@ directions).
 
 Currently: Francisco
 
-@item
-Frog Meister: is responsible for code patches from (relatively)
-inexperienced contributors.  Keeps track of patches, does initial
-reviewing of those patches, sends them to @w{@code{-devel}} when
-they've had some initial review on the Frog list, pesters the
-@w{@code{-devel}} community into actually reviewing said patches, and
-finally pushes the patches once they're accepted.  This person is
-@emph{not} responsible for training new programmers, because that
-would be far too much work -- his/her job is @qq{only} to guide
-completed patches through our process.
-
-Currently: Mike Solomon
-
 @end itemize
 
 @node Patchy
@@ -1267,8 +1254,7 @@ convert-ly updates.
 @item
 other than that, everything is on the table.  Is it a problem to
 have the tagline inside \header?  What should the default behavior
-of \include be?  When we abolish \times, do we move to \tuplet 3:2
-or \tuplet 2/3 or what (for typical triplets in 4/4 time)?
+of \include be?
 
 @item
 we need to get standards for command names.  This will help users
index e00cfc7e7eedbad98a0e8b1b860d701f46628494..b8dff79c1fae6f26dc8fff54e3da40e19946efe0 100644 (file)
@@ -15,7 +15,6 @@ chapter.}
 * Doc build::
 * Website build::
 * Building an Ubuntu distro::
-* Building GUB::
 @end menu
 
 
@@ -1511,68 +1510,3 @@ Test iso by installing in VM and repeating steps above for
 getting source files and building lp and docs.
 
 @end enumerate
-
-@node Building GUB
-@section Building GUB
-
-GUB - the Grand Unified Builder - is used to build the release
-versions of LilyPond.  For background information, see
-@ref{Grand Unified Builder (GUB)}.  The simplest way to set up a
-GUB build environment is to use a virtual machine with LilyDev
-(@ref{LilyDev}).  Follow the instructions on that page to set this
-up.  Make sure that your virtual machine has enough disk space -
-a GUB installation takes over 30 GBytes of disk space, and if you
-allocate too little, it will fail during the setting up stage and
-you will have to start again.  64 GBytes should be sufficient.
-
-While GUB is being built, any interruptions are likely to make it
-almost impossible to restart.  If at all possible, leave the build
-to continue uniterrupted.
-
-Download GUB and start the set up:
-
-@example
-git clone git://github.com/gperciva/gub/gub.git
-cd gub
-make bootstrap
-@end example
-
-This downloads and installs a number of packages.  You may find
-some fail during download and you will need to download them
-manually.  For example, the perl archive.  If this happens,
-download it from
-@uref{http://www.cpan.org/src/5.0/perl-5.10.0.tar.gz}, saving the
-archive to @file{gub/downloads/perl/}.  Continue the set up with:
-
-@example
-make bootstrap
-@end example
-
-Once this has completed successfully, you can build the LilyPond
-release package.  However, this uses an archived version of the
-regression tests, so it is better to download this first.
-Download the test output from lilypond.org:
-
-@smallexample
-@uref{http://lilypond.org/download/binaries/test-output/lilypond-2.15.33-1.test-output.tar.bz2}
-@end smallexample
-
-Copy the tarball into @file{gub/regtests/}, and tell the build
-system that you have done this:
-
-@example
-touch regtests/ignore
-@end example
-
-Now start the GUB build:
-
-@example
-make lilypond
-@end example
-
-That's it.  This will build LilyPond from current master.  To build
-the current unstable release, run:
-
-@example
-make LILYPOND_BRANCH=release/unstable lilypond
-@end example
index b0e9b97f061aedb3811c103fe734883fe95a661a..5f9a4c7f0854326fecfb2ab50b827a86e7810538 100644 (file)
@@ -26,63 +26,63 @@ procedures}.
 @example
 -1- Web site
 616   web.texi
-4753  web/introduction.itexi
-1211  web/download.itexi
+4937  web/introduction.itexi
+1201  web/download.itexi
 1139  macros.itexi
 7977  po/lilypond-doc.pot (translate to po/@var{MY_LANGUAGE}.po)
 0     search-box.ihtml
 ---   lilypond-texi2html.init (section TRANSLATIONS)
-15696 total
+15870 total
 
 -2- Tutorial
-1214  web/manuals.itexi
+1284  web/manuals.itexi
 124   learning.tely
-2535  learning/tutorial.itely
-4187  learning/common-notation.itely
-8060  total
+2578  learning/tutorial.itely
+4396  learning/common-notation.itely
+8382  total
 
 -3- Fundamental Concepts, starting of Usage and Community
-11130 learning/fundamental.itely -- Fundamental concepts
+11144 learning/fundamental.itely -- Fundamental concepts
 135   usage.tely
-4615  usage/running.itely
-1209  usage/updating.itely
-3006  web/community.itexi
-20095 total
+4537  usage/running.itely
+1484  usage/updating.itely
+3073  web/community.itexi
+20373 total
 
 -4- Rest of Learning manual and Suggestions on writing LilyPond files
-15468 learning/tweaks.itely -- Tweaking output
-219   learning/templates.itely -- Templates
-2694  usage/suggestions.itely -- Suggestions on writing LilyPond files
-18381 total
+16191 learning/tweaks.itely -- Tweaking output
+372   learning/templates.itely -- Templates
+2692  usage/suggestions.itely -- Suggestions on writing LilyPond files
+19255 total
 
 -5- Notation reference
-355   notation.tely
+326   notation.tely
 91    notation/notation.itely -- Musical notation
-4530  notation/pitches.itely
-6352  notation/rhythms.itely
-1712  notation/expressive.itely
-1011  notation/repeats.itely
-2640  notation/simultaneous.itely
-2392  notation/staff.itely
-949   notation/editorial.itely
-2729  notation/text.itely
+4990  notation/pitches.itely
+6890  notation/rhythms.itely
+1793  notation/expressive.itely
+1050  notation/repeats.itely
+2821  notation/simultaneous.itely
+2476  notation/staff.itely
+954   notation/editorial.itely
+2816  notation/text.itely
 81    notation/specialist.itely -- Specialist notation
-4758  notation/vocal.itely
-2022  notation/chords.itely
+5190  notation/vocal.itely
+1972  notation/chords.itely
 702   notation/piano.itely
-812   notation/percussion.itely
+811   notation/percussion.itely
 826   notation/guitar.itely
 66    notation/strings.itely
 242   notation/bagpipes.itely
-4752  notation/ancient.itely
-8701  notation/input.itely -- Input syntax
+5375  notation/ancient.itely
+10392 notation/input.itely -- Input syntax
 2164  notation/non-music.itely -- Non-musical notation
-11234 notation/spacing.itely -- Spacing issues
-12679 notation/changing-defaults.itely -- Changing defaults
+12256 notation/spacing.itely -- Spacing issues
+15289 notation/changing-defaults.itely -- Changing defaults
 5187  notation/programming-interface.itely -- Interfaces for programmers
-2177  notation/notation-appendices.itely -- Notation manual tables
+2176  notation/notation-appendices.itely -- Notation manual tables
 252   notation/cheatsheet.itely -- Cheat sheet
-79416 total
+87188 total
 
 -6- Rest of Application Usage
 4137  usage/lilypond-book.itely -- LilyPond-book
index ff6e0f07216048a90c71e31019fe01f0e79370a4..680522cbc9a79466fd9a404887e326bc21bace0c 100644 (file)
@@ -146,20 +146,42 @@ Please prepare a formal git patch.
 
 @end enumerate
 
+@subheading Contributions that contain examples using overrides
+
+Examples that use overrides, tweaks, customer Scheme functions etc. are
+(with very few exceptions) not included in the main text of the manuals;
+as there would be far too many, equally useful, candidates.
+
+The correct way is to submit your example, with appropriate explanatory
+text and tags, to the LilyPond Snippet Repository (LSR).  Snippets that
+have the @qq{docs} tag can then be easily added as a
+@emph{selected snippet} in the documentation.  It will also appear
+automatically in the Snippets lists.  See @ref{Introduction to LSR}.
+
+Snippets that @emph{don't} have the @qq{docs} tage will still be
+searchable and viewable within the LSR, but will be not be included in
+the Snippets list or be able to be included as part of the main
+documentation.
+
+Generally, any new snippets that have the @qq{docs} tag are more
+carefully checked for syntax and formatting.
+
+@subheading Announcing your snippet
+
 Once you have followed these guidelines, please send a message to
 lilypond-devel with your documentation submissions.  Unfortunately
-there is a strict “no top-posting” check on the mailing list; to avoid
+there is a strict @q{no top-posting} check on the mailing list; to avoid
 this, add:
 
-> I'm not top posting.
+@code{> I'm not top posting}
+
+(you must include the > ) to the top of your documentation addition.
 
-(you must include the > ) to the top of your documentation
-addition.
+We may edit your suggestion for spelling, grammar, or style, and we may
+not place the material exactly where you suggested, but if you give us
+some material to work with, we can improve the manual much faster.
 
-We may edit your suggestion for spelling, grammar, or style, and
-we may not place the material exactly where you suggested, but if
-you give us some material to work with, we can improve the manual
-much faster.  Thanks for your interest!
+Thanks for your interest!
 
 
 @node Texinfo introduction and usage policy
@@ -254,12 +276,17 @@ Level 3 subsections are created with
 @@subsection Foo
 @end example
 
-@itemize
-@item
+Level 4 headings and menus must be preceded by level 3 headings and
+menus, and so on for level 3 and level 2.  If this is not what is
+wanted, please use:
+
+@example
+@@subsubsubheading Foo
+@end example
+
 Please leave two blank lines above a @code{@@node}; this makes it
 easier to find sections in texinfo.
 
-@item
 Do not use any @code{@@} commands for a @code{@@node}.  They may be
 used for any @code{@@sub...} sections or headings however.
 
@@ -273,27 +300,47 @@ but instead:
 @@subsection @@code@{Foo@} Bar
 @end example
 
-@item
-With the exception of @code{@@} commands, the section name must
-match the node name exactly.
+No punctuation may be used in the node names.  If the heading text
+uses punctuation (in particular, colons and commas) simply leave
+this out of the node name and menu.
 
-@item
-No commas may be used in the node names.
+@example
+@@menu
+* Foo Bar::
+@@end menu
 
-@item
-If a heading is desired without creating a @code{@@node}, please use:
+@@node Foo Bar
+@@subsection Foo: Bar
+@end example
+
+Backslashes must not be used in node names or section headings.
+If the heading text should include a backslash simply leave this
+out of the node name and menu and replace it with @code{@@bs@{@}}
+in the heading text.
 
 @example
-@@subsubsubheading Foo
+@@menu
+* The set command
+@@end menu
+
+@@node The set command
+@@subsection The @@code@{@@bs@{@}set@} command
 @end example
 
-@item
+References to such a node may use the third argument of the
+@code{@@ref} command to display the texually correct heading.
+
+@example
+@@ref@{The set command,,The @@code@{@@bs@{@}set command@}
+@end example
+
+With the exception of @code{@@} commands, @code{\} commands and
+punctuation, the section name should match the node name exactly.
+
 Sectioning commands (@code{@@node} and @code{@@section}) must not appear
 inside an @code{@@ignore}.  Separate those commands with a space, ie
 @code{@@n}@tie{}@code{ode}.
 
-@end itemize
-
 Nodes must be included inside a
 
 @example
@@ -304,8 +351,8 @@ Nodes must be included inside a
 @end example
 
 @noindent
-construct.  These are easily constructed with automatic tools; see
-@ref{Scripts to ease doc work}.
+construct.  These can be constructed with scripts:
+see @ref{Stripping whitespace and generating menus}.
 
 
 @node LilyPond formatting
@@ -1427,7 +1474,20 @@ the difficulty.
 @node Scripts to ease doc work
 @section Scripts to ease doc work
 
-@subheading Building only one section of the documentation
+@menu
+* Scripts to test the documentation::
+* Scripts to create documentation::
+@end menu
+
+@node Scripts to test the documentation
+@subsection Scripts to test the documentation
+
+@menu
+* Building only one section of the documentation::
+@end menu
+
+@node Building only one section of the documentation
+@unnumberedsubsubsec Building only one section of the documentation
 
 In order to save build time, a script is available to build only
 one section of the documentation in English with a default html
@@ -1488,10 +1548,21 @@ scripts/auxiliar/cg-section.sh doc-work
 @code{cg-section.sh} uses the same environment variables and
 corresponding default values as @code{doc-section.sh}.
 
-@subheading Stripping whitespace and generating menus
+@node Scripts to create documentation
+@subsection Scripts to create documentation
+
+@menu
+* Stripping whitespace and generating menus::
+* Stripping whitespace only::
+* Updating doc with convert-ly::
+@end menu
+
+@node Stripping whitespace and generating menus
+@unnumberedsubsubsec Stripping whitespace and generating menus
 
 @warning{This script assumes that the file conforms to our doc
-policy; a few files still need work in this regard.}
+policy, in particular with regard to @ref{Sectioning commands};
+a few files still need work in this regard.}
 
 To automatically regenerate @code{@@menu} portions and strip
 whitespace, use:
@@ -1500,19 +1571,28 @@ whitespace, use:
 scripts/auxiliar/node-menuify.py @var{FILENAME}
 @end example
 
+If you are adding documentation that requires new menus,
+you will need to add a blank @code{@@menu} section:
 
-@subheading Stripping whitespace only
+@example
+@@menu
+@@end menu
+@end example
+
+@node Stripping whitespace only
+@unnumberedsubsubsec Stripping whitespace only
 
 @c TODO: should this be documented elsewhere?  It's useful for
 @c more than just docs.
 To remove extra whitespace from the ends of lines, run
 
 @example
-scripts/auxiliar/strip-whitespace.py Documentation/FILENAME
+scripts/auxiliar/strip-whitespace.py @var{FILENAME}
 @end example
 
 
-@subheading Updating doc with @command{convert-ly}
+@node Updating doc with convert-ly
+@unnumberedsubsubsec Updating doc with @command{convert-ly}
 
 Don't.  This should be done by programmers when they add new
 features.  If you notice that it hasn't been done, complain to
@@ -2053,6 +2133,17 @@ git rev-list HEAD |head -1
 @c contains a helper script which could be used to perform massive
 @c committish updates.
 
+Most of the changes in the LSR snippets included in the documentation concern
+the syntax, not the description inside @code{texidoc=""}.  This implies that
+quite often you will have to update only the committish of the matching
+.texidoc file.  This can be a tedious work if there are many snippets to be
+marked as up do date.  You can use the following command to update the
+committishes at once:
+
+@example
+cd Documentation/LANG/texidocs
+sed -i -r 's/[0-9a-z]@{40@}/NEW-COMMITTISH/' *.texidoc
+@end example
 
 @seealso
 @ref{LSR work}.
index 78021ae8d73c858a3be151dc9e3888c90aa7b983..002aa895a43167a4fc9eac319d2925e6de207b9e 100644 (file)
@@ -118,15 +118,23 @@ make
 
 There are special formatting rules for METAFONT files.
 
-Tabs are used for indentation.
+Tabs are used for the indentation of commands.
 
 When a path contains more than two points, put each point on a
-separate line, with the operator at the beginning  of the line:
+separate line, with the operator at the beginning of the line.
+The operators are indented to the same depth as the initial point
+on the path using spaces.  The indentation mechanism is illustrated
+below, with @samp{------->} indicating a tab character and any other
+indentation created using spaces.
 
 @example
-fill z1
-     -- z2
-     -- z3
-     .. cycle;
+def draw_something (test) =
+------->if test:
+------->------->fill z1
+------->------->     -- z2
+------->------->     -- z3
+------->------->     .. cycle;
+------->fi;
+enddef;
 @end example
 
index 56b9cb40bebc174e72596f34b628a7196ca06427..12c62e5bfaaffc554cace48ef0a9a377af64c814 100644 (file)
@@ -47,27 +47,24 @@ since the program was born.
 
 The @q{official} LilyPond Git repository is hosted by the GNU
 Savannah software forge at @uref{http://git.sv.gnu.org}.
-Although, since Git uses a @emph{distributed} model, technically
-there is no central repository.  Instead, each contributor keeps a
-complete copy of the entire repository (about 116MB).
 
 Changes made within one contributor's copy of the repository can
 be shared with other contributors using @emph{patches}.  A patch
-is a simple text file generated by the @command{git} program that
-indicates what changes have been made (using a special format).
+is a text file that indicates what changes have been made.
 If a contributor's patch is approved for inclusion (usually
 through the mailing list), someone on the current development team
 will @emph{push} the patch to the official repository.
 
 The Savannah software forge provides two separate interfaces for
-viewing the LilyPond Git repository online: @emph{cgit} and
-@emph{gitweb}.  The cgit interface should work faster than gitweb
+viewing the LilyPond Git repository online:
+@uref{http://git.sv.gnu.org/cgit/lilypond.git/, cgit} and
+@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git, gitweb}.
+
+@ignore
+The cgit interface should work faster than gitweb
 in most situations, but only gitweb allows you to search through
 the source code using @command{grep}, which you may find useful.
-The cgit interface is at
-@uref{http://git.sv.gnu.org/cgit/lilypond.git/} and the gitweb
-interface is at
-@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git}.
+@end ignore
 
 Git is a complex and powerful tool, but tends to be confusing at
 first, particularly for users not familiar with the command line
@@ -117,7 +114,7 @@ many maintenance scripts, and many instructions in this guide rely on
 predefined @ref{Environment variables}.
 
 @item @strong{mailing lists}:
-given on @rweb{Contacts}.
+given on @rweb{Contact}.
 
 @item @strong{branches}:
 
@@ -283,8 +280,8 @@ switching git branches (not expected, but just in case...)
 @item
 You don't need to be able to completely approve patches.  Make
 sure the patch meets whatever you know of the guidelines (for doc
-style, code indentation, whatever), and then send it on to the
-frog list or -devel for more comments.  If you feel confident
+style, code indentation, whatever), and then send it on to -devel
+for more comments.  If you feel confident
 about the patch, you can push it directly (this is mainly intended
 for docs and translations; code patches should almost always go to
 -devel before being pushed).
index 7bea16493755889276220f35dc2aa15b7eb4586e..01cce81411de184e9b780b2883a34bd27e29bf61 100644 (file)
@@ -186,13 +186,13 @@ the currently-active Bug Squad member(s) can handle the message.
 @subsubheading Daily schedule
 
 @example
-Monday:    Colin H
-Tuesday:   Eluze
+Monday:    Eluze
+Tuesday:   Ralph
 Wednesday: Marek
-Thursday:  Ralph
-Friday:    Marek
-Saturday:  Mark
-Sunday:    Colin H
+Thursday:  Joe Wakeling (soon)
+Friday:    Colin H
+Saturday:  Colin H
+Sunday:    Federico
 @end example
 
 
@@ -830,10 +830,117 @@ separate person handling this task.}
 For contributors/developers: follow the steps in
 @ref{Commits and patches}, and @ref{Pushing to staging}.
 
+@ignore
 For people doing maintenance tasks: git-cl is adding issues, James
 is testing them, Colin is selecting them for countdowns, and
 Patchy is merging from staging to master.  In the coming weeks,
 these tasks will be more and more automated.
+@end ignore
+
+@subheading Patch cycle
+
+@itemize
+
+@item
+Patches get added to the tracker and to Rietveld by the @qq{git-cl} tool, with
+a status of @qq{patch-new}.
+
+@item
+The automated tester, Patchy, verifies that the patch can be applied
+to current master.  By default, it checks that the patch allows @code{make}
+and @code{make test} to complete successfully.  It can also be configured to
+check that @code{make doc} is successful. If it passes, Patchy changes the
+status to @qq{patch-review} and emails the developer list.  If the patch
+fails, Patchy sets it to @qq{patch-needs_work} and notifies the developer list.
+
+@item
+The Patch Meister reviews the tracker periodically, to list patches
+which have been on review for at least 24 hours. The list is found at
+
+@smallexample
+@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:patch%20patch=review&sort=modified+patch&colspec=ID%20Type%20Status%20Priority%20Owner%20Patch%20Summary%20Modified}
+@end smallexample
+
+@item
+For each patch, the Handler reviews any discussion on the tracker
+and on Rietveld, to determine whether the patch can go forward.  If
+there is any indication that a developer thinks the patch is not
+ready, the Handler marks it @qq{patch-needs_work} and makes a comment
+regarding the reason, referring to the Rietveld item if needed.
+
+@item
+Patches with explicit approval, or at least no negative comment, can
+be updated to @qq{patch-countdown}.  When saving the tracker item,
+clear the @qq{send email} box to prevent sending notification for
+each patch.
+
+@item
+The Patch Meister sends an email to the developer list, with a fixed
+subject line, to enable filtering by email clients:
+
+@example
+PATCH: Countdown to 20130113
+@end example
+
+The text of the email sets the deadline for this countdown batch.  At
+present, batches are done on Tuesday, Thursday and Sunday evenings.
+
+The body of the email lists the patches grouped by patch type, and for
+each patch, shows the tracker issue number and title, with a link to
+the Rietveld item.  Copying the information from the website and pasting
+into the email gives a hyperlinked version of the information.
+
+@smallexample
+
+For 20:00 MST Tuesday January 8:
+
+Crash:
+    Issue 2990: \RemoveEmptyStaves in StaffGroup context crashes - R 7069044
+
+Defect:
+    Issue 677: \score markup confuses paper settings - R 7028045
+    Issue 3050: displayLilyMusic produced erroneous code for rightHandFinger arguments - R 7032045
+
+Documentation:
+    Issue 2952: Upgrade documentation of \once - R 7031053
+    Issue 3044: Dual license the files under mf/ using OFL. - R 6970046
+    Issue 3084: [DOC]Add "Known issue" in NR 1.2.1 about Scaling durations with rational numbers - R 7071044
+
+Enhancement:
+    Issue 3061: make \articulate handle colon-type tremolos - R 7033045
+    Issue 3082: Patch: Let ChordNameVoice use the same performers as Voice - R 7054043
+    Issue 3083: Patch: Chord change detection in fretboards should depend on placements, not notes - R 7062043
+    Issue 2983: assertion failed with \glissando - R 6625078
+
+
+Cheers,
+Colin
+
+@end smallexample
+
+@item
+On the scheduled countdown day, the Patch Meister reviews the
+previous list of patches on countdown, with the same procedure and
+criteria as before.  Patches with no controversy can be set to
+@qq{patch-push} with a courtesy message added to the comment block.
+
+@item
+Roughly at six month intervals, the Patch Meister can list the
+patches which have been set to @qq{patch-needs-work} and send the
+results to the developer list for review.  In most cases, these
+patches should be marked @qq{patch-abandoned} but this should come
+from the developer if possible.
+
+@item
+As in most organisations of unpaid volunteers, fixed procedures are
+useful in as much as they get the job done.  In our community, there
+is room for senior developers to bypass normal patch handling flows,
+particularly now that the testing of patches is largely automated.
+Similarly, the minimum age of 24 hours can reasonably be waived if
+the patch is minor and from an experienced developer.
+
+
+@end itemize
 
 @ignore
 There is a single Patch Meister, and a number of Patch Helpers
index d72424ab4c17df1fefb22917797e2fe819e616ac..819534b4ad0b23127f1ff304da1e4a56473fa558 100644 (file)
@@ -979,7 +979,7 @@ for all errors and defines functions for displaying scheme objects
 (ps), grobs (pgrob), and parsed music expressions (pmusic).
 
 @example
-file ~/lilypond-git/build/out/bin/lilypond
+file $LILYPOND_GIT/build/out/bin/lilypond
 b programming_error
 b Grob::programming_error
 
@@ -1418,9 +1418,14 @@ Although it is not required, it is helpful if the developer
 can write relevant material for inclusion in the Notation
 Reference.  If the developer does not feel qualified to write
 the documentation, a documentation editor will be able to
-write it from the regression tests.  The text that is added to
-or removed from the documentation should be changed only in
-the English version.
+write it from the regression tests.  In this case the developer
+should raise a new issue with the Type=Documentation tag containing
+a reference to the original issue number and/or the committish of
+the pushed patch so that the need for new documention is not
+overlooked.
+
+Any text that is added to or removed from the documentation should
+be changed only in the English version.
 
 
 @node Edit changes.tely
index 2172677054daedd1d6866936609af73dfa6b5b90..22ea0591b10c33022aea51adb0d93b9d956f9cd8 100644 (file)
@@ -35,17 +35,11 @@ it is available for all major operating systems and is easy to install
 If you are not familiar with GNU/Linux, it may be beneficial to read a
 couple of @qq{introduction to Ubuntu} web pages.
 
-Some contributors have recommended a free PDF:
-
-@example
-@uref{http://www.ubuntupocketguide.com/}
-@end example
-
 For those interested, the LilyDev remix is currently based on a 32bit
 version of 10.04 LTS Ubuntu (Lucid Lynx).
 
 @warning{Apart from installing and configuring LilyDev in VirtualBox,
-the rest of the chapter on assumes that you are comfortable using the
+the rest of the chapter assumes that you are comfortable using the
 command-line.  While this chapter is intended for users who may have
 never created a patch or compiled software before, experienced
 developers (who prefer to use their own development environment) may
@@ -93,7 +87,7 @@ Download Virtualbox from here:
 @end example
 
 @warning{In virtualization terminology, the operating system where
-Virtualbox is installed, is the known as the @strong{host}.  LilyDev
+Virtualbox is installed is known as the @strong{host}.  LilyDev
 will be installed @q{inside} Virtualbox as a @strong{guest}.}
 
 @item
@@ -282,7 +276,7 @@ the software directly. See @ref{Manually installing lily-git.tcl}.
 
 @item
 Finally, lily-git is always part of the LilyPond source code and is
-located in @file{~/lilypond-git/scripts/auxillar/lily-git.tcl}.
+located in @file{$LILYPOND_GIT/scripts/auxillar/lily-git.tcl}.
 
 @end itemize
 
@@ -311,7 +305,7 @@ lily-git with this information.
 @item
 Click on the @qq{Get source} button.
 
-A directory called @file{lilypond-git/} is now created within
+A directory called @file{$LILYPOND_GIT} is now created within
 your home directory and the complete source code will start to be
 downloaded into it.
 
@@ -328,7 +322,7 @@ minutes -- it could be an intermittant network problem.  If the
 problem persists, please ask for help.}
 
 @item
-Close the lily-git GUI and navigate to the @file{lilypond-git/}
+Close the lily-git GUI and navigate to the @file{$LILYPOND_GIT}
 directory to view and edit the source files.
 
 @end enumerate
@@ -344,7 +338,7 @@ to @ref{Compiling with LilyDev} before reading on.
 @warning{Throughout the rest of this manual, most command-line
 input should be entered from @file{~/lilypond-git/}.  This is
 known as the @emph{top source directory} and is often referred to as
-@var{$LILYPOND_GIT}}.
+@var{$LILYPOND_GIT}.}
 
 @warning{Only work on one set of changes at once.  Do not start
 work on any new changes until your first set has been accepted.}
@@ -421,11 +415,6 @@ Send patch files to the appropriate place:
 @item
 If you have a mentor, send it to them via email.
 
-@item
-New contributors should send the patch attached to an email to
-@email{frogs@@lilynet.net}.  Please add @qq{[PATCH]} to the
-subject line.
-
 @item
 Translators should send patches to
 @email{translations@@lilynet.net}.
@@ -435,6 +424,10 @@ More experienced contributors should upload the patch for
 web-based review.  This requires additional software and use of
 the command-line; see @ref{Uploading a patch for review}.
 
+@item
+If you have trouble uploading the patch for review,
+ask for help on @email{lilypond-devel@@gnu.org}.
+
 @end itemize
 
 
@@ -444,7 +437,7 @@ the command-line; see @ref{Uploading a patch for review}.
 hopelessly confused!}
 
 The button labeled @qq{Abort changes -- Reset to origin} will copy
-all changed files to a subdirectory of @file{lilypond-git/} named
+all changed files to a subdirectory of @file{$LILYPOND_GIT} named
 @file{aborted_edits/}, and will reset the repository to the
 current state of the remote repository (at @code{git.sv.gnu.org}).
 
@@ -465,7 +458,7 @@ text.  This should take less than a minute.
 @c we heavily recommend the out-of-tree build; do not change this!
 
 @example
-cd ~/lilypond-git/
+cd $LILYPOND_GIT
 sh autogen.sh --noconfigure
 mkdir -p build/
 cd build/
@@ -481,14 +474,14 @@ building; this can have a non-negligible effect on compilation
 speed.
 
 @example
-cd ~/lilypond-git/build/
+cd $LILYPOND_GIT/build/
 make
 @end example
 
 You may run the compiled @code{lilypond} with:
 
 @example
-cd ~/lilypond-git/build/
+cd $LILYPOND_GIT/build/
 out/bin/lilypond my-file.ly
 @end example
 
@@ -498,7 +491,7 @@ Compiling the documentation is a much more involved process, and
 will likely take 2 to 10 hours.
 
 @example
-cd ~/lilypond-git/build/
+cd $LILYPOND_GIT/build/
 make
 make doc
 @end example
@@ -508,14 +501,14 @@ view the html files by entering the below text; we recommend that
 you bookmark the resulting page:
 
 @example
-firefox ~/lilypond-git/build/out-www/offline-root/index.html
+firefox $LILYPOND_GIT/build/out-www/offline-root/index.html
 @end example
 
 @subsubheading Installing
 
 Don't.  There is no reason to install lilypond within LilyDev.
 All development work can (and should) stay within the
-@file{$HOME/lilypond-git/} directory, and any personal composition
+@file{$LILYPOND_GIT} directory, and any personal composition
 or typesetting work should be done with an official GUB release.
 
 
index 7bca714f2c412b1aa56a77962c98e5fa7731216b..365582e87f7a8beef00a6e437f67d7b005fba98a 100644 (file)
@@ -7,6 +7,7 @@
 * Precompiled regression tests::
 * Compiling regression tests::
 * Regtest comparison::
+* Pixel-based regtest comparison::
 * Finding the cause of a regression::
 * Memory and coverage tests::
 * MusicXML tests::
@@ -135,6 +136,11 @@ something is suspicious!
 @item
 Profile files: give information about
 TODO?  I don't know what they're for.
+Apparently they give some information about CPU usage.  If you got
+tons of changes in cell counts, this probably means that you compiled
+@code{make test-baseline} with a different amount of CPU threads than
+@code{make check}. Try redoing tests from scratch with the same
+number of threads each time -- see @ref{Saving time with the -j option}.
 
 @end itemize
 
@@ -209,7 +215,7 @@ Run @code{make} with current git master without any of your changes.
 
 @item
 Before making changes to the code, establish a baseline for the comparison by
-going to the @file{lilypond-git/build/} directory and running:
+going to the @file{$LILYPOND_GIT/build/} directory and running:
 
 @example
 make test-baseline
@@ -293,6 +299,58 @@ and want to do regtests comparison for all of them, you can
 @code{make test-clean}, @code{make} and @code{make check} it without doing
 @code{make test-baseline} again.}
 
+@node Pixel-based regtest comparison
+@section Pixel-based regtest comparison
+
+As an alternative to the @code{make test} method for regtest checking (which
+relies upon @code{.signature} files created by a LilyPond run and which describe
+the placing of grobs) there is a script which compares the output of two
+LilyPond versions pixel-by-pixel.  To use this, start by checking out the
+version of LilyPond you want to use as a baseline, and run @code{make}.  Then,
+do the following:
+
+@example
+cd $LILYPOND_GIT/scripts/auxiliar/
+./make-regtest-pngs.sh -j9 -o
+@end example
+
+The @code{-j9} option tells the script to use 9 CPUs to create the
+images - change this to your own CPU count+1.  @code{-o} means this is the "old"
+version.  This will create images of all the regtests in
+
+@example
+$LILYPOND_BUILD_DIR/out-png-check/old-regtest-results/
+@end example
+
+Now checkout the version you want to compare with the baseline.  Run
+@code{make} again to recreate the LilyPond binary.  Then, do the following:
+
+@example
+cd $LILYPOND_GIT/scripts/auxiliar/
+./make-regtest-pngs.sh -j9 -n
+@end example
+
+The @code{-n} option tells the script to make a "new" version of the
+images.  They are created in
+
+@example
+$LILYPOND_BUILD_DIR/out-png-check/new-regtest-results/
+@end example
+
+Once the new images have been created, the script compares the old images with
+the new ones pixel-by-pixel and prints a list of the different images to the
+terminal, together with a count of how many differences were found.  The
+results of the checks are in
+
+@example
+$LILYPOND_BUILD_DIR/out-png-check/regtest-diffs/
+@end example
+
+To check for differences, browse that directory with an image
+viewer.  Differences are shown in red.  Be aware that some images with complex
+fonts or spacing annotations always display a few minor differences.  These can
+safely be ignored.
+
 
 @node Finding the cause of a regression
 @section Finding the cause of a regression
index 26a8223584e20ce0cd0121f7d04999131028b4a6..2bd0b68f8d52ae2fafb2bee3a8a5657b3a6364a8 100644 (file)
@@ -7,6 +7,7 @@
 * Minor release checklist::
 * Major release checklist::
 * Release extra notes::
+* Notes on builds with GUB::
 @end menu
 
 
@@ -74,24 +75,45 @@ A @qq{minor release} means an update of @code{y} in @code{2.x.y}.
 @enumerate
 
 @item
-Switch to the release branch, get changes, prep release
-announcement.  This requires a clean index and work tree.  If the
-checkout displays modified files, you might want to run @code{git reset
---hard} before continuing.
+Using any system with git pull access (not necessarily the GUB
+build machine), use the commands below to switch to the release
+branch, get changes and prepare the release
+announcement.  This requires a system which has the release/unstable
+branch.  If you get a warning saying you are in @code{detached HEAD}
+state, then you should create a release/unstable branch with
+@code{git checkout release/unstable}.
+
+Check the environment variables are set as in
+@ref{Environment variables}.
+
+You need to ensure you have a clean index and work tree.  If the
+checkout displays modified files, you might want to run
+@code{git reset --hard} before continuing.
 
 @example
 git fetch
-git checkout origin/release/unstable
-git merge origin
+git checkout release/unstable
+git merge origin/master
 make -C $LILYPOND_BUILD_DIR po-replace
 mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
-vi Documentation/web/news-front.itexi Documentation/web/news.itexi
+gedit Documentation/web/news-front.itexi Documentation/web/news.itexi
+gedit VERSION
 @end example
 
+@itemize
+@item
+VERSION_DEVEL = the current development version (previous VERSION_DEVEL + 0.01)
+
+@item
+VERSION_STABLE = the current stable version (probably no change here)
+
+@end itemize
+
 @item
 Commit, push, switch back to master (or wherever else):
 
 @example
+git commit -m "Release: bump VERSION_DEVEL." VERSION
 git commit -m "PO: update template." po/lilypond.pot
 git commit -m "Release: update news." Documentation/web/
 git push origin HEAD:release/unstable
@@ -133,14 +155,16 @@ make LILYPOND_BRANCH=release/unstable lilypond
 or something like:
 
 @example
-make LILYPOND_BRANCH=stable/2.12 lilypond
+make LILYPOND_BRANCH=stable/2.16 lilypond
 @end example
 
-@item Check the regtest comparison in @file{uploads/webtest/} for
+@item
+Check the regtest comparison in @file{uploads/webtest/} for
 any unintentional breakage.  More info in
 @ref{Precompiled regression tests}.
 
-@item If any work was done on GUB since the last release, upload
+@item
+If any work was done on GUB since the last release, upload
 binaries to a temporary location, ask for feedback, and wait a day
 or two in case there's any major problems.
 
@@ -161,8 +185,6 @@ test-lily/rsync-lily-doc.py
 test-lily/rsync-test.py
 @end example
 
-@code{graham} owns v2.13; @code{han-wen} owns v2.12.
-
 @item Upload GUB by running:
 
 @example
@@ -187,7 +209,8 @@ make lilypond-upload \
 
 @enumerate
 
-@item Update the current staging branch with the current news:
+@item
+Update the current staging branch with the current news:
 
 @example
 git fetch
@@ -195,26 +218,20 @@ git checkout origin/staging
 git merge origin/release/unstable
 @end example
 
-@item Update @file{VERSION} in lilypond git and upload changes:
+@item
+Update @file{VERSION} in lilypond git and upload changes:
 
 @example
-vi VERSION
+gedit VERSION
 @end example
 
 @itemize
 @item
 VERSION = what you just did +0.0.1
-
-@item
-DEVEL_VERSION = what you just did (i.e. is now online)
-
-@item
-STABLE_VERSION = what's online (probably no change here)
-
 @end itemize
 
 @example
-git commit -m "Release: bump version." VERSION
+git commit -m "Release: bump VERSION." VERSION
 git push origin HEAD:staging
 @end example
 
@@ -229,21 +246,6 @@ it means that somebody else updated the staging branch while you were
 preparing your change.  In that case, you need to restart the Post
 Release process.  Otherwise, proceed:
 
-@item (for now) do a @code{make doc} and manually upload:
-
-@example
-### upload-lily-web-media.sh
-#!/bin/sh
-BUILD_DIR=$HOME/src/build-lilypond
-
-PICS=$BUILD_DIR/Documentation/pictures/out-www/
-EXAMPLES=$BUILD_DIR/Documentation/ly-examples/out-www/
-
-cd $BUILD_DIR
-rsync -a $PICS graham@@lilypond.org:media/pictures
-rsync -a $EXAMPLES graham@@lilypond.org:media/ly-examples
-@end example
-
 @item Wait a few hours for the website to update.
 
 @item Email release notice to @code{info-lilypond}
@@ -259,7 +261,7 @@ A @qq{major release} means an update of @code{x} in @code{2.x.0}.
 
 @subheading Main requirements
 
-This is the current official guidelines.
+These are the current official guidelines.
 
 @itemize
 @item
@@ -289,11 +291,11 @@ grep FIXME --exclude "misc/*" --exclude "*GNUmakefile" \
 @end example
 
 @item
-Check for altered regtests, and document as necessary.  (update
-numbers in the following command as appropriate)
+Check for altered regtests, and document as necessary:
 
 @example
-git diff -u -r release/2.12.0-1 -r release/2.13.13-1 input/regression/
+git diff -u -r release/2.@var{FIRST-CURRENT-STABLE} \
+  -r release/2.@var{LAST-CURRENT-DEVELOPMENT} input/regression/
 @end example
 
 @end itemize
@@ -323,55 +325,53 @@ mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
 Make directories on lilypond.org:
 
 @example
-~/web/download/sources/v2.14
-~/web/download/sources/v2.15
+~/download/sources/v2.@var{NEW-STABLE}
+~/download/sources/v2.@var{NEW-DEVELOPMENT}
 @end example
 
 @item
 Shortly after the release, move all current contributors to
-previous contributors in:
+previous contributors in
+@file{Documentation/included/authors.itexi}.
 
-@example
-Documentation/included/authors.itexi
-@end example
-
-Also, delete old material in:
+@item
+Delete old material in @file{Documentation/changes.tely}, but
+don't forget to check it still compiles!  Also update the version
+numbers:
 
 @example
-Documentation/changes.tely
+@@node Top
+@@top New features in 2.@var{NEW-STABLE} since 2.@var{OLD-STABLE}
 @end example
 
-but don't forget to check it still compiles!  also update the
-version numbers.
-
 @item
 Website:
 
 @itemize
 @item
 make a link from the old unstable to the next stable in
-lilypond.org's /doc/ dir.  Keep all previous unstable->stable doc
-symlinks.
+lilypond.org's @file{/doc/} dir.  Keep all previous unstable->stable
+doc symlinks.
 
 Also, make the old docs self-contained -- if there's a redirect in
-/doc/v2.12/Documentation/index.html , replace it with the
-index.html.old-2.12 files.
+@file{/doc/v2.@var{OLD-STABLE}/Documentation/index.html} , replace it with the
+@file{index.html.old-2.@var{OLD-STABLE}} files.
 
 The post-2.13 docs will need another way of handling the
 self-containment.  It won't be hard to whip up a python script
-that changes the link to ../../../../manuals.html to
-../website/manuals.html , but it's still a 30-minute task that
+that changes the link to @file{../../../../manuals.html} to
+@file{../website/manuals.html}, but it's still a 30-minute task that
 needs to be done before 2.16.
 
 @item
-doc auto redirects  to v2.LATEST-STABLE
+doc auto redirects to @code{v2.@var{NEW-STABLE}}
 
 @item
-add these two lines to http://www.lilypond.org/robots.txt:
+add these two lines to @file{Documentation/web/server/robots.txt}:
 
 @example
-Disallow: /doc/v2.PREVIOUS-STABLE/
-Disallow: /doc/v2.CURRENT-DEVELOPMENT/
+Disallow: /doc/v2.@var{OLD-STABLE}/
+Disallow: /doc/v2.@var{NEW-DEVELOPMENT}/
 @end example
 
 @end itemize
@@ -383,14 +383,15 @@ Disallow: /doc/v2.CURRENT-DEVELOPMENT/
 @itemize
 @item
 submit po template for translation: send url of tarball to
-coordinator@@translationproject.org, mentioning lilypond-VERSION.pot
+@email{coordinator@@translationproject.org}, mentioning
+lilypond-VERSION.pot
 
 @item
 update links to distros providing lilypond packages?  link in:
 @file{Documentation/web/download.itexi}
 
-This has nothing to do with the release, but it's a "periodic
-maintenance" task that might make sense to include with releases.
+This has nothing to do with the release, but it's a @qq{periodic
+maintenance} task that might make sense to include with releases.
 
 @item
 Send announcements to...
@@ -537,5 +538,159 @@ delete stuff you didn't want to upload from the server.
 
 @end enumerate
 
+@node Notes on builds with GUB
+@section Notes on builds with GUB
 
+@subsubheading Building GUB
+
+GUB - the Grand Unified Builder - is used to build the release
+versions of LilyPond.  For background information, see
+@ref{Grand Unified Builder (GUB)}.  The simplest way to set up a
+GUB build environment is to use a virtual machine with LilyDev
+(@ref{LilyDev}).  Follow the instructions on that page to set this
+up.  Make sure that your virtual machine has enough disk space -
+a GUB installation takes over 30 GBytes of disk space, and if you
+allocate too little, it will fail during the setting up stage and
+you will have to start again.  64 GBytes should be sufficient.
+
+While GUB is being built, any interruptions are likely to make it
+almost impossible to restart.  If at all possible, leave the build
+to continue uninterrupted.
+
+Download GUB and start the set up:
+
+@example
+git clone git://github.com/gperciva/gub/gub.git
+cd gub
+make bootstrap
+@end example
+
+This will take a very long time, even on a very fast computer.
+You will need to be patient.  It's also liable to fail - it
+downloads a number of tools, and some will have moved and others
+won't respond to the network.  For example, the perl archive.
+If this happens, download it from
+@uref{http://www.cpan.org/src/5.0/perl-5.10.0.tar.gz}, saving the
+archive to @file{gub/downloads/perl/}.  Continue the set up with:
+
+@example
+make bootstrap
+@end example
+
+Once this has completed successfully, you can build the LilyPond
+release package.  However, this uses an archived version of the
+regression tests, so it is better to download this first.
+Download the test output from lilypond.org (you will need to
+replace @code{2.15.33-1} with the latest build):
+
+@smallexample
+@uref{http://lilypond.org/download/binaries/test-output/lilypond-2.15.33-1.test-output.tar.bz2}
+@end smallexample
+
+Copy the tarball into @file{gub/regtests/}, and tell the build
+system that you have done this:
+
+@example
+touch regtests/ignore
+@end example
+
+Now start the GUB build:
+
+@example
+make lilypond
+@end example
+
+That's it.  This will build LilyPond from current master.  To build
+the current unstable release, run:
+
+@example
+make LILYPOND_BRANCH=release/unstable lilypond
+@end example
+
+The first time you do this, it will take a very long time.
+
+Assuming the build has gone well, it can be uploaded using:
+
+@example
+make lilypond-upload
+  LILYPOND_BRANCH=release/unstable
+  LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git
+@end example
+
+@subsubheading Output files
+
+GUB builds the files it needs into the directory
+@code{gub/target/}.  As a general rule, these don't need to be
+touched unless there is a problem building GUB (see below).
+The files to be uploaded are in @code{gub/uploads/}.  Once the
+build has completed successfully, there should be 8
+installation files and 3 archives, totalling about 600MB.
+There are also 4 directories:
+
+@example
+gub/signatures
+gub/localdoc
+gub/webdoc
+gub/webtest
+@end example
+
+@code{signatures} contains files that are used to track whether
+some of the archives have already been built.  Don't touch
+these.
+
+@code{localdoc} probably contains local copies of the
+documentation.
+
+@code{webdoc} contains the documentation to be uploaded.
+
+@code{webtest} contains the regtest comparison, which should
+be checked before upload, and is also uploaded for subsequent
+checking.
+
+The total upload is about 700 MB in total, and on an ADSL
+connection will take about 4 hours to upload.
+
+@subsubheading Subsequent builds
+
+In principle, building the next release of LilyPond requires
+no action other then following the instructions in
+@ref{Minor release checklist}.  Because much of the
+infrastructure has already been built, it will take much less
+time - about an hour on a fast computer.
+
+Continuing to build LilyPond without any other
+archiving/deletion of previous builds is likely to be successful,
+but will take up a fair amount of disk space (around 2GB per
+build) which may be a problem with a Virtual Machine.  It's
+therefore recommended to move (not copy) @code{gub/uploads} to
+another machine/disk after each build, if space is at a premium.
+
+However, if a significant change has been made to the LilyPond
+source (e.g. added source files) the build may fail if tried on
+top of a previous build.  If this happens, be sure to
+move/delete @code{gub/uploads} and all mentions of LilyPond
+in @code{gub/target}.  The latter can be achieved with this
+command:
+
+@example
+rm -rf target/*/*/*lilypond*
+@end example
 
+Be @emph{very} careful with this command.  Typing it wrongly
+could wipe your disk completely.
+
+@subsubheading Updating the web site
+
+The @code{make lilypond-upload} command updates the documentation
+on the LilyPond web site.  However, it does @emph{not} update
+any part of the site that is not part of the documentation - for
+example, the front page (@code{index.html}).  The website is
+updated by 2 cron jobs running on the web server.  One of these
+pulls git master to the web server, and the other makes the
+website with the standard @code{make website} command.  They run
+hourly, 30 minutes apart.  So - to update the front page of the
+website, it's necessary to update @code{VERSION} and
+@code{news-front.itexi} in master and then wait for the cron
+jobs to run.  (N.B. - this is done by pushing the changes to
+staging and letting patchy do its checks before it pushes to
+master).
index d3f4f3a11b8dc11e7813f658d286606a46d97c27..6a957052daadc2c4696a37abe1815fb84fc35fb1 100644 (file)
@@ -93,7 +93,7 @@ files.
 @end enumerate
 
 @warning{Throughout the rest of this manual, most command-line
-input should be entered from @file{~/lilypond-git/}.  This is
+input should be entered from @file{$LILYPOND_GIT}.  This is
 referred to as the @emph{top source directory}.}
 
 Further instructions are in @ref{How to use lily-git}.
@@ -160,7 +160,7 @@ The above command will put the it in @file{~/lilypond-git}, where
 
 @subsubheading Technical details
 
-This creates (within the @file{~/lilypond-git/} directory) a
+This creates (within the @file{$LILYPOND_GIT} directory) a
 subdirectory called @file{.git/}, which Git uses to keep track of
 changes to the repository, among other things.  Normally you don't
 need to access it, but it's good to know it's there.
@@ -171,7 +171,7 @@ need to access it, but it's good to know it's there.
 
 @warning{Throughout the rest of this manual, all command-line
 input should be entered from the top directory of the Git
-repository being discussed (eg. @file{~/lilypond-git/}).  This is
+repository being discussed (eg. @file{$LILYPOND_GIT}).  This is
 referred to as the @emph{top source directory}.}
 
 Before working with the copy of the main LilyPond repository, you
@@ -555,6 +555,16 @@ GNU/Linux distributions),
 export LILYPOND_WEB_MEDIA_GIT=$HOME/dir/of/lilypond-extra/
 @end example
 
+Be aware that @code{lilypond-extra} is the definitive source for some binary
+files - in particular PDF versions of papers concerning LilyPond.  To add
+further PDFs of this sort, all that is necessary is to add the PDF to
+@code{lilypond-extra} and then add a reference to it in the documentation.  The
+file will then be copied to the website when @code{make website} is run.
+
+However, pictures that are also used in the documentation build are mastered in
+the main git repository.  If any of these is changed, it should be updated in
+git, and then the updates copied to @code{lilypond-extra}.
+
 @node Grand Unified Builder (GUB)
 @unnumberedsubsubsec Grand Unified Builder (GUB)
 
@@ -732,7 +742,7 @@ Already on 'master'
 @end example
 
 By now the source files should be accessible---you should be able
-to edit any files in the @file{lilypond-git/} directory using a
+to edit any files in the @file{$LILYPOND_GIT} directory using a
 text editor of your choice.  But don't start just yet!  Before
 editing any source files, learn how to keep your changes organized
 and prevent problems later---read @ref{Basic Git procedures}.
@@ -1291,20 +1301,28 @@ use any email address for your google account when you sign up.
 
 @item
 Move into the top source directory and then configure @command{git
-cl} with the following commands.  If you do not understand any
-question, just answer with a newline (CR).
+cl} with the following commands:
 
 @example
-cd $HOME/lilypond-git/
+cd $LILYPOND_GIT
 git cl config
 @end example
 
+For the @qq{Rietveld server} question, the default value
+(@qq{codereview.appspot.com}) should be accepted by
+answering with a newline (CR).
+
 The @qq{CC list} question should be answered with:
 
 @example
 lilypond-devel@@gnu.org
 @end example
 
+The @qq{Tree status URL} value should be left blank.  So should
+the @qq{ViewVC URL} value, since it is used by @command{git cl
+dcommit} which is only for repositories which use @command{git
+svn} (LilyPond doesn't).
+
 @end enumerate
 
 @subsubheading Uploading patch set
@@ -1366,6 +1384,11 @@ can be used.
 
 @end itemize
 
+First you will see a terminal editor where you can edit the
+message that will accompany your patch. @command{git-cl} will
+respect the @env{EDITOR} environment variable if defined,
+otherwise it will use @command{vi} as the default editor.
+
 After prompting for your Google email address and password, the
 patch set will be posted to Rietveld, and you will be given a URL
 for your patch.
index 97300b529614aa3bf2cef1ed1608ae19a2a3597a..fc9f99c56aad76a134c21a615d862ee355421c4c 100644 (file)
@@ -1,7 +1,5 @@
 ISOLANG = cs
 depth = ../..
-# SUBDIRS = web learning notation texidocs usage included essay extending
-SUBDIRS = web learning texidocs essay usage included
 STEPMAKE_TEMPLATES = documentation texinfo
 LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
 NO_PDF_FILES = 1
diff --git a/Documentation/cs/essay/GNUmakefile b/Documentation/cs/essay/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
diff --git a/Documentation/cs/included/.gitignore b/Documentation/cs/included/.gitignore
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Documentation/cs/included/GNUmakefile b/Documentation/cs/included/GNUmakefile
deleted file mode 100644 (file)
index afe7a4d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/Documentation/cs/learning/GNUmakefile b/Documentation/cs/learning/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index e60566d22b3d9970dea91990b05f4af5e2f3c584..258e2ce108a780f17bd5dbc0461e3e775d41135e 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @ignore
 Tutorial guidelines:
@@ -316,7 +316,7 @@ Běžná @notation{artikulační znaménka} mohou být zadána pomocí
 doplnění minus (@q{-}) a odpovídajícího znaménka:
 
 @lilypond[verbatim,quote,relative=2]
-c4-^ c-+ c-- c-|
+c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
@@ -525,10 +525,10 @@ V jedné triole trvají noty 2/3 jejich zapsané délky,
 takže triola má 2/3 jako svůj zlomek:
 
 @lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
 @end lilypond
 
 @subheading Ozdoby
@@ -552,7 +552,7 @@ vytvářet uvozením hudebního výrazu příkazem @code{\appoggiatura} (dlouhý
 příraz, prodleva) a @code{\acciaccatura} (příraz, krátká appogiatura).
 
 @lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
 c2 \appoggiatura b16 c2 |
 c2 \acciaccatura b16 c2 |
 @end lilypond
@@ -1343,7 +1343,7 @@ v souboru vytvořily novou proměnnou. Tím se dá písemná práce
 ulehčit, když se skupiny not často opakují.
 
 @lilypond[verbatim,quote]
-tripletA = \times 2/3 { c,8 e g }
+tripletA = \tuplet 3/2 { c,8 e g }
 barA = { \tripletA \tripletA \tripletA \tripletA }
 
 \relative c'' {
index a09c282f083dd3f69d3a1b023556fd2a8645dc56..2f8cc035d2ccae84bd89952432019d1f0c74a9f2 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.29"
 @c Translators: Pavel Fric
 
 @node Základní pojmy
@@ -619,10 +619,10 @@ oblouček, který začíná u trioly (řádky 3 a 4).
 
 @lilypond[quote,verbatim,ragged-right]
 {
-r16[ g \times 2/3 { r16 e'8] }
-g16( a \times 2/3 { b16 d) e' }
-g8[( a \times 2/3 { b8 d') e'~] } |
-\times 4/5 { e'32\( a b d' e' } a'4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g16( a \tuplet 3/2 { b16 d) e' }
+g8[( a \tuplet 3/2 { b8 d') e'~] } |
+\tuplet 5/4 { e'32\( a b d' e' } a'4.\)
 }
 @end lilypond
 
@@ -888,9 +888,9 @@ a hlasy.  Složitější věci budou vysvětleny v pozdějších částech.
   \\  % Voice four
     {
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'force-hshift = #0
+      \once \override NoteColumn.force-hshift = #0
       <ees c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   >> |
@@ -937,9 +937,9 @@ porozumět.
   \\  % Voice four
     { \voiceThreeStyle
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'force-hshift = #0
+      \once \override NoteColumn.force-hshift = #0
       <ees c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   >>
@@ -1735,8 +1735,7 @@ abzuleiten.
   @tab Erstellt Notenschlüssel.
 @item Completion_heads_engraver
   @tab Teilt Noten in kleiner Werte, wenn sie über die Taktlinie reichen.
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
   @tab Erstellt Dynamik-Klammern und Dynamik-Texte.
 @item Forbid_line_break_engraver
   @tab Verbietet Zeilenumbrüche, solange ein musikalisches Element aktiv ist.
@@ -1940,7 +1939,7 @@ während das dazu dient, sie in allen Systemen auszuschalten:
 >>
 @end lilypond
 
-Ein anderes Beispiel ist die Eigenschaft @code{clefOctavation}:
+Ein anderes Beispiel ist die Eigenschaft @code{clefTransposition}:
 wenn sie im @code{Score}-Kontext gesetzt wird, ändert sich sofort
 der Wert der Oktavierung in allen aktuellen Systemen und wird
 auf einen neuen Wert gesetzt, der sich auf alle Systeme auswirkt.
@@ -3101,8 +3100,7 @@ sind.
         @}
       >>  % end ManualOne Staff context
       \new Staff = "ManualTwo" \with @{
-        \override VerticalAxisGroup
-          #'staff-staff-spacing #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       @} <<
         \keyTime
         \clef "bass"
@@ -3167,8 +3165,7 @@ PedalOrganMusic = \relative c {
         }
       >>  % end ManualOne Staff context
       \new Staff = "ManualTwo" \with {
-        \override VerticalAxisGroup
-          #'staff-staff-spacing #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       } <<
         \keyTime
         \clef "bass"
@@ -3236,7 +3233,7 @@ werden:
 @c TODO Avoid padtext - not needed with skylining
 @lilypond[quote,verbatim,ragged-right]
 dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
 fthenp=_\markup {
     \dynamic f \italic \small { 2nd } \hspace #0.1 dynamic p
 }
@@ -3268,7 +3265,7 @@ sehr viel schwerer lesbar, besonders die letzte Zeile.
 violin = \relative c'' @{
   \repeat volta 2 @{
     c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
-    \once \override TextScript #'padding = #5.0
+    \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d
     c,4.\markup @{
       \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
@@ -3295,7 +3292,7 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = $padding
+     \once \override TextScript.padding = $padding
    #})
 
 \relative c''' {
index 8097ccf4fddf9bc8f8ea73356282003f3d7c4696..de1f0e9aa7e679ab6c6eec21b9cf7dfb175e20ca 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.20"
 
 @node Ladění výstupu
 @chapter Ladění výstupu
@@ -259,9 +259,9 @@ zu ändern:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a b c |
 @end lilypond
 
@@ -296,11 +296,11 @@ wieder auf den Standardwert für die letzten zwei Noten gesetzt.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
 b4 c |
 @end lilypond
 
@@ -323,9 +323,9 @@ geändert werden:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\once \override NoteHead #'color = #red
+\once \override NoteHead.color = #red
 e4 f |
-\once \override NoteHead #'color = #green
+\once \override NoteHead.color = #green
 g4 a b c |
 @end lilypond
 
@@ -370,7 +370,7 @@ werden. Schauen wir zuerst, was wir mit
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
 <c e g>4
 <c e g>4
 @end lilypond
@@ -403,7 +403,7 @@ mittlere Note eines Akkordes auf diese Weise ändern:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
 @end lilypond
 
 Beachten Sie, dass die Syntax des @code{\tweak}-Befehls sich
@@ -427,8 +427,8 @@ Beispiel zu sehen ist.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4^"Black"
-  -\tweak #'color #red ^"Red"
-  -\tweak #'color #green _"Green"
+  -\tweak color #red ^"Red"
+  -\tweak color #green _"Green"
 @end lilypond
 
 @noindent
@@ -464,12 +464,12 @@ gesetzt wird.
 @cindex direction-Eigenschaft, Beispiel
 
 @lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
-\times 4/3 {
-  \tweak #'color #red
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+\tweak direction #up
+\tuplet 3/4 {
+  \tweak color #red
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -487,15 +487,14 @@ beginnen, kann ihr Aussehen auf die übliche Art mit dem
 @c NOTE Tuplet brackets collide if notes are high on staff
 @c See issue 509
 @lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
-\once \override TupletNumber
-  #'text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 { c8[ c c] }
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
+\tuplet 3/2 {
   c8[ c]
   c8[ c]
-  \once \override TupletNumber #'transparent = ##t
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+  \once \override TupletNumber.transparent = ##t
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -656,7 +655,7 @@ einmal einen sehr großen Wert für die Dicke um zu sehen, ob der
 Befehl auch funktioniert. Also:
 
 @example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
 @end example
 
 Vergessen Sie nicht das Rautenzeichen und Apostroph
@@ -678,7 +677,7 @@ Legatobogen und nahe bei ihm.} Also etwa so:
   \time 6/8
   {
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     r4 bes8 bes[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -753,7 +752,7 @@ muss also wie folgt positioniert werden:
     \key es \major
     r4 bes8
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes8[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -795,10 +794,10 @@ Note gestellt, an welcher der Bogen beginnt:
   {
     r4 bes8
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes[( g]) g |
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     g8[( es]) es d[( f]) as |
     as8 g
   }
@@ -823,11 +822,11 @@ dessen später den @code{\revert}-Befehl einsetzen, um die
   {
     r4 bes8
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     bes[( g]) g |
     g8[( es]) es
     % Revert thickness of all following slurs to default of 1.2
-    \revert Slur #'thickness
+    \revert Slur.thickness
     d8[( f]) as |
     as8 g
   }
@@ -934,7 +933,7 @@ Gut, der @code{\override}-Befehl, mit dem der Gesangstext
 kursiv gesetzt wird, lautet:
 
 @example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
 @end example
 
 @noindent
@@ -956,7 +955,7 @@ bezieht, etwa so:
     as8 g
   }
   \addlyrics {
-    \override LyricText #'font-shape = #'italic
+    \override LyricText.font-shape = #'italic
     The man who | feels love's sweet e -- | mo -- tion
   }
 }
@@ -988,7 +987,7 @@ ein Begriff interpretiert und von LilyPond nicht verstanden
 werden.  Der Befehl muss also lauten:
 
 @example
-\override Lyrics . LyricText #'font-shape = #'italic
+\override Lyrics.LyricText.font-shape = #'italic
 @end example
 
 @warning{Innerhalb von Gesangstext muss immer ein
@@ -1049,8 +1048,8 @@ wenn sie in einem @code{\override}-Befehl benutzt werden.
 @item Moment
   @tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion
   konstruiert
-  @tab @code{(ly:make-moment 1 4)},
-       @code{(ly:make-moment 3 8)}
+  @tab @code{(ly:make-moment 1/4)},
+       @code{(ly:make-moment 3/8)}
 @item Zahl
   @tab Eine beliebige positive oder negative Dezimalzahl
   @tab @code{3.5}, @code{-2.45}
@@ -1154,7 +1153,7 @@ auslassen:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override BarLine #'stencil = ##f
+  \override BarLine.stencil = ##f
   c4 b8 c d16 c d8
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1184,7 +1183,7 @@ den richtigen Kontext mit anzugeben:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'stencil = ##f
+  \override Staff.BarLine.stencil = ##f
   c4 b8 c d16 c d8
   g,8 a16 b8 c d4 e16
   e8
@@ -1206,7 +1205,7 @@ den Stencil auf ein Objekt mit der Größe Null setzt:
 @lilypond[quote,verbatim,relative=2]
 {
   c4 c
-  \once \override NoteHead #'stencil = #point-stencil
+  \once \override NoteHead.stencil = #point-stencil
   c4 c
 }
 @end lilypond
@@ -1237,7 +1236,7 @@ den Wert in einem @code{\override}-Befehl anzuführen.
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+  \override Staff.BarLine.break-visibility = #'#(#f #f #f)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1273,7 +1272,7 @@ machen, ist also:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'transparent = ##t
+  \override Staff.TimeSignature.transparent = ##t
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1295,7 +1294,7 @@ gesetzt werden:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'stencil = ##f
+  \override Staff.TimeSignature.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1339,7 +1338,7 @@ weiß zu setzen, können Sie schreiben:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #white
+  \override Staff.BarLine.color = #white
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1374,7 +1373,7 @@ in interne Werte konvertiert:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(x11-color 'white)
+  \override Staff.BarLine.color = #(x11-color 'white)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1404,7 +1403,7 @@ würde sein: @code{(rgb-color 1 1 1)}.
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+  \override Staff.BarLine.color = #(rgb-color 1 1 1)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1434,12 +1433,12 @@ verschiede Grauschattierungen erhalten:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.StaffSymbol   #'color = #(x11-color 'grey30)
-  \override Staff.TimeSignature #'color = #(x11-color 'grey60)
-  \override Staff.Clef          #'color = #(x11-color 'grey60)
-  \override Voice.NoteHead      #'color = #(x11-color 'grey85)
-  \override Voice.Stem          #'color = #(x11-color 'grey85)
-  \override Staff.BarLine       #'color = #(x11-color 'grey10)
+  \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+  \override Staff.TimeSignature.color = #(x11-color 'grey60)
+  \override Staff.Clef.color = #(x11-color 'grey60)
+  \override Voice.NoteHead.color = #(x11-color 'grey85)
+  \override Voice.Stem.color = #(x11-color 'grey85)
+  \override Staff.BarLine.color = #(x11-color 'grey10)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1514,8 +1513,8 @@ wir setzen den Stencil von beiden auf @code{#f}:
         alignAboveContext = #"main"
       }
       {
-        \override Staff.Clef #'stencil = ##f
-        \override Staff.TimeSignature #'stencil = ##f
+        \override Staff.Clef.stencil = ##f
+        \override Staff.TimeSignature.stencil = ##f
         { f8 f c }
       }
     >>
@@ -1582,9 +1581,9 @@ Das obige Beispiel könnte also auch so aussehen:
       \new Staff \with {
         alignAboveContext = #"main"
         % Don't print clefs in this staff
-        \override Clef #'stencil = ##f
+        \override Clef.stencil = ##f
         % Don't print time signatures in this staff
-        \override TimeSignature #'stencil = ##f
+        \override TimeSignature.stencil = ##f
       }
       { f8 f c }
     >>
@@ -1617,7 +1616,7 @@ Entweder wir ändern die Schriftgröße für jede Objektart
 mit einem eigenen Befehl, etwa:
 
 @example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
 @end example
 
 @noindent
@@ -1652,8 +1651,8 @@ Setzen wir das also in unserem Ossia-Beispiel ein:
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \override Clef.stencil = ##f
+        \override TimeSignature.stencil = ##f
         % Reduce all font sizes by ~24%
         fontSize = #-2
       }
@@ -1725,11 +1724,11 @@ sie benutzt:
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \override Clef.stencil = ##f
+        \override TimeSignature.stencil = ##f
         fontSize = #-2
         % Reduce stem length and line spacing to match
-        \override StaffSymbol #'staff-space = #(magstep -2)
+        \override StaffSymbol.staff-space = #(magstep -2)
       }
       { f8 f c }
     >>
@@ -1900,11 +1899,11 @@ der Standard eingestellt.
 
 @lilypond[quote,verbatim,relative=2]
 a4 g c a
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
 a4 g c a
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
 a4 g c a
-\revert Stem #'direction
+\revert Stem.direction
 a4 g c a
 @end lilypond
 
@@ -1996,9 +1995,9 @@ die Wirkung von @code{DOWN} (runter) und @code{UP}
 
 @lilypond[quote,verbatim,relative=2]
 c4-5 a-3 f-1 c'-5
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
 c4-5 a-3 f-1 c'-5
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
 c4-5 a-3 f-1 c'-5
 @end lilypond
 
@@ -2104,7 +2103,7 @@ werden.  Der Standardwert kann aus dem
 er ist @code{-5}, versuchen wir es also mit @code{-7}.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
 \set fingeringOrientations = #'(left)
 <f-2>4
 <c-1  e-2 g-3 b-5>4
@@ -2205,7 +2204,7 @@ Objekten zeigt.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Place dynamics above staff
 \dynamicUp
@@ -2283,12 +2282,12 @@ erstellt wird:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Place dynamics above staff
 \dynamicUp
 % Place following Ottava Bracket below Text Spanners
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
 % Start Ottava Bracket
 \ottava #1
 c'4 \startTextSpan
@@ -2325,10 +2324,10 @@ Hier ein Beispiel, das die beiden Möglichkeiten veranschaulicht:
 @lilypond[quote,verbatim,relative=2]
 c4( c^\markup { \tiny \sharp } d4.) c8
 c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
 c4^\markup { \tiny \sharp } d4.) c8
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
 c4( c^\markup { \tiny \sharp } d4.) c8
 @end lilypond
 
@@ -2348,7 +2347,7 @@ Tabelle oben festgestellt werden und dann die Priorität für
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 c2^"Text1"
 c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
 c2^"Text3"
 c2^"Text4" |
 @end lilypond
@@ -2412,12 +2411,12 @@ c,,2^"Text" c'' |
 R1 |
 
 % Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 c,,2^"Long Text   " c'' |
 R1 |
 
 % Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 \textLengthOn        % and turn on textLengthOn
 c,,2^"Long Text   "  % Spaces at end are honored
 c''2 |
@@ -2503,7 +2502,7 @@ Objektes zur Geltung kommt.  Mit diesem Befehl wird das für
 Dynamik-Zeichen erledigt:
 
 @example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
 @end example
 
 @noindent
@@ -2514,7 +2513,7 @@ Schauen wir uns an, wie es mit dem vorigen Beispiel funktioniert:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
 a4\f b\mf c\mp b\p
 @end lilypond
 
@@ -2535,7 +2534,7 @@ Rand eine halbe Einheit zu vergrößern:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
 % Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
 a4\f b\mf c\mp b\p
 @end lilypond
 
@@ -2851,7 +2850,7 @@ zu verkleinern), die über oder unter den Noten gesetzt werden.
 
 @lilypond[quote,fragment,relative=1,verbatim]
 c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
 b2\fermata
 @end lilypond
 
@@ -2861,11 +2860,11 @@ b2\fermata
 
 @lilypond[quote,fragment,relative=1,verbatim]
 % This will not work, see below
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
 \tempo 4 = 120
 c1 |
 % This works
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
 \tempo 4 = 80
 d1 |
 @end lilypond
@@ -2910,15 +2909,13 @@ sesquisharp = \markup { \sesquisharp }
  \relative c'' {
   c4
   % This prints a sesquisharp but the spacing is too small
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 c
   % This improves the spacing
-  \once \override Score.AccidentalPlacement #'right-padding = #0.6
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Score.AccidentalPlacement.right-padding = #0.6
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4
 }
 @end lilypond
@@ -2959,9 +2956,9 @@ aus dem Beispiel des vorigen Abschnitts auszurichten:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
 % Extend width by 1 unit
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
 % Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner #'staff-padding = #2
+\override DynamicLineSpanner.staff-padding = #2
 a4\f b\mf c\mp b\p
 @end lilypond
 
@@ -2980,7 +2977,7 @@ Referenzpunkt der abhängigen Note angeordnet wird:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
 \voiceOne
 < a\2 >
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
 < a\2 >
 @end lilypond
 
@@ -3023,7 +3020,7 @@ d.h. vier halbe Notenlinienabstände weiter nach unten:
 <<
   { c4 c c c }
   \\
-  \override MultiMeasureRest #'staff-position = #-8
+  \override MultiMeasureRest.staff-position = #-8
   { R1 }
 >>
 @end lilypond
@@ -3052,7 +3049,7 @@ links und 1,8 Notenlinienabstände nach unten verschoben:
 @lilypond[quote,fragment,relative=1,verbatim]
 \stemUp
 f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
 f4-5
 @end lilypond
 
@@ -3099,7 +3096,7 @@ verschwindet auch die etwas unschöne Form:
 
 @lilypond[quote,verbatim,fragment,ragged-right,relative=1]
 r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
+\once \override PhrasingSlur.positions = #'(-4 . -3)
 \acciaccatura e8\( d8 c~ c d c d\)
 @end lilypond
 
@@ -3128,7 +3125,7 @@ hochgeschoben werden, etwa auf 3:
 {
   \clef "bass"
   <<
-    \override Beam #'positions = #'(3 . 3)
+    \override Beam.positions = #'(3 . 3)
     { b,8 ais, b, g, }
   \\
     { e, g e, g }
@@ -3198,9 +3195,9 @@ Hier das Endergebnis:
     \\
     {
       \voiceFour
-      \once \override NoteColumn #'force-hshift = #0
+      \once \override NoteColumn.force-hshift = #0
       <ees c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   >> |
@@ -3233,7 +3230,7 @@ zu kompliziert zu machen.
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3246,7 +3243,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % Reposition the c2 to the right of the merged note
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % Move the c2 out of the main note column so the merge will work
         \shiftOnn
         c2
@@ -3257,8 +3254,7 @@ rhMusic = \relative c'' {
         % Stem on the d2 must be down to permit merging
         \stemDown
         % Stem on the d2 should be invisible
-        \once \override Stem #'transparent = ##t
-        \once \override Flag #'transparent = ##t
+        \once \override Stem.transparent = ##t
         d2
       }
       \new Voice {
@@ -3445,7 +3441,7 @@ also, direkt vor die erste übergebundene Note gestellt, verschiebt
 den Bindebogen (@code{tie}) 3,5 halbe Notenlinienabstände
 über die Mittellinie:
 
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
 
 Damit ist auch der zweite Takt vollständig:
 
@@ -3453,7 +3449,7 @@ Damit ist auch der zweite Takt vollständig:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3537,7 +3533,7 @@ um das Verhalten wieder auszuschalten. Das sieht so aus:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3611,7 +3607,7 @@ aus:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3681,7 +3677,7 @@ wir durchsichtig und das C verschieben wir mit der
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3695,7 +3691,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % Reposition the c2 to the right of the merged note
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % Move the c2 out of the main note column so the merge will work
         \shiftOnn
         c2
@@ -3706,8 +3702,7 @@ rhMusic = \relative c'' {
         % Stem on the d2 must be down to permit merging
         \stemDown
         % Stem on the d2 should be invisible
-        \once \override Stem #'transparent = ##t
-        \once \override Flag #'transparent = ##t
+        \once \override Stem.transparent = ##t
         d2
       }
       \new Voice {
@@ -3797,8 +3792,7 @@ den Stimmen stattfindet:
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \once \override Stem #'transparent = ##t
-    \once \override Flag #'transparent = ##t
+    \once \override Stem.transparent = ##t
     b8~ b\noBeam
   }
 \\
@@ -3814,9 +3808,8 @@ gesetzt wird:
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \once \override Stem #'transparent = ##t
-    \once \override Flag #'transparent = ##t
-    \once \override Stem #'length = #8
+    \once \override Stem.transparent = ##t
+    \once \override Stem.length = #8
     b8~ b\noBeam
   }
 \\
@@ -3859,7 +3852,7 @@ einem entfernten Objekt gezeigt:
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'transparent = ##t
+    \once \override Score.MetronomeMark.transparent = ##t
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata
@@ -3878,7 +3871,7 @@ einem entfernten Objekt gezeigt:
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'stencil = ##f
+    \once \override Score.MetronomeMark.stencil = ##f
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata
@@ -3929,11 +3922,11 @@ Alternative versuchen wir, einen Befehl mit
 @code{\override} und @code{\revert} zu konstruieren.
 
 @example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
 
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
 @end example
 
 Das wäre natürlich noch viel mühsamer, wenn viele Wörter eine
@@ -3953,12 +3946,12 @@ um noch weniger schreiben zu müssen:
 
 @lilypond[quote,verbatim]
 emphasize = {
-  \override Lyrics.LyricText #'font-shape = #'italic
-  \override Lyrics.LyricText #'font-series = #'bold
+  \override Lyrics.LyricText.font-shape = #'italic
+  \override Lyrics.LyricText.font-series = #'bold
 }
 normal = {
-  \revert Lyrics.LyricText #'font-shape
-  \revert Lyrics.LyricText #'font-series
+  \revert Lyrics.LyricText.font-shape
+  \revert Lyrics.LyricText.font-series
 }
 
 global = { \key c \major \time 4/4 \partial 4 }
@@ -4022,20 +4015,18 @@ erklärt in @ref{Pokročilá ladění se Scheme,,pokročilých laděních se Sch
 
 @lilypond[quote,verbatim,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  (markup #:hspace 0
-          #:translate '(5 . 0)
-          #:line (#:dynamic "mp"
-                  #:text #:italic "dolce")))
+ #(make-dynamic-script
+  #{ \markup { \hspace #0
+               \translate #'(5 . 0)
+               \line { \dynamic "mp"
+                       \text \italic "dolce" } }
+  #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   (make-music
-    'TextScriptEvent
-    'direction UP
-    'text (markup #:bold (#:box string))))
+    #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -4060,20 +4051,18 @@ wir sie also:
 @example
 %%% in Datei "definitions.ily" speichern
 mpdolce =
-#(make-dynamic-script
-  (markup #:hspace 0
-          #:translate '(5 . 0)
-          #:line (#:dynamic "mp"
-                  #:text #:italic "dolce")))
+ #(make-dynamic-script
+  #@{ \markup @{ \hspace #0
+               \translate #'(5 . 0)
+               \line @{ \dynamic "mp"
+                       \text \italic "dolce" @} @}
+  #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   (make-music
-    'TextScriptEvent
-    'direction UP
-    'text (markup #:bold (#:box string))))
+       #@{ <>^\markup \bold \box #string #@})
 @end example
 
 Diese Datei wir mit dem @code{\include}-Befehl ziemlich weit oben
@@ -4100,20 +4089,18 @@ Noten (in der Datei @file{music.ly}).
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  (markup #:hspace 0
-          #:translate '(5 . 0)
-          #:line (#:dynamic "mp"
-                  #:text #:italic "dolce")))
+ #(make-dynamic-script
+  #{ \markup { \hspace #0
+               \translate #'(5 . 0)
+               \line { \dynamic "mp"
+                       \text \italic "dolce" } }
+  #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   (make-music
-    'TextScriptEvent
-    'direction UP
-    'text (markup #:bold (#:box string))))
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -4139,34 +4126,32 @@ wir also in @qq{4/4}.
 %%%  definitions.ily
 mpdolce =
 #(make-dynamic-script
-  (markup #:hspace 0
-          #:translate '(5 . 0)
-          #:line (#:dynamic "mp"
-                  #:text #:italic "dolce")))
+  #@{ \markup @{ \hspace #0
+               \translate #'(5 . 0)
+               \line @{ \dynamic "mp"
+                       \text \italic "dolce" @} @}
+  #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   (make-music
-    'TextScriptEvent
-    'direction UP
-    'text (markup #:bold (#:box string))))
+   #@{ <>^\markup \bold \box #string #@})
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
@@ -4174,34 +4159,32 @@ inst =
 @lilypond[quote,ragged-right]
 mpdolce =
 #(make-dynamic-script
-  (markup #:hspace 0
-          #:translate '(5 . 0)
-          #:line (#:dynamic "mp"
-                  #:text #:italic "dolce")))
+  #{ \markup { \hspace #0
+               \translate #'(5 . 0)
+               \line { \dynamic "mp"
+                       \text \italic "dolce" } }
+  #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   (make-music
-    'TextScriptEvent
-    'direction UP
-    'text (markup #:bold (#:box string))))
+   #{ <>^\markup \bold \box #string #})
 
 \layout{
   \context {
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context {
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   }
   \context {
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4226,35 +4209,33 @@ global geändert.
 %%%  definitions.ily
 mpdolce =
 #(make-dynamic-script
-  (markup #:hspace 0
-          #:translate '(5 . 0)
-          #:line (#:dynamic "mp"
-                  #:text #:italic "dolce")))
+  #@{ \markup @{ \hspace #0
+               \translate #'(5 . 0)
+               \line @{ \dynamic "mp"
+                       \text \italic "dolce" @} @}
+  #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   (make-music
-    'TextScriptEvent
-    'direction UP
-    'text (markup #:bold (#:box string))))
+   #@{ <>^\markup \bold \box #string #@})
 
 #(set-global-staff-size 23)
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
@@ -4262,30 +4243,28 @@ inst =
 @lilypond[quote,ragged-right]
 mpdolce =
 #(make-dynamic-script
-  (markup #:hspace 0
-          #:translate '(5 . 0)
-          #:line (#:dynamic "mp"
-                  #:text #:italic "dolce")))
+  #{ \markup { \hspace #0
+               \translate #'(5 . 0)
+               \line { \dynamic "mp"
+                       \text \italic "dolce" } }
+  #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   (make-music
-    'TextScriptEvent
-    'direction UP
-    'text (markup #:bold (#:box string))))
+   #{ <>^\markup \bold \box #string #})
 
 #(set-global-staff-size 23)
 
 \layout{
   \context { \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context { \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4407,8 +4386,8 @@ Befehl @code{/tieDotted} etwa wird folgendermaßen definiert:
 
 @example
 tieDotted = @{
-  \override Tie #'dash-period = #0.75
-  \override Tie #'dash-fraction = #0.1
+  \override Tie.dash-period = #0.75
+  \override Tie.dash-fraction = #0.1
 @}
 @end example
 
@@ -4496,8 +4475,8 @@ der Noten:
       \Score
  %  Um sicher zu gehen, dass Texte und Liedtext
  %  innerhalb der Papierränder bleiben
- \override PaperColumn #'keep-inside-line = ##t
- \override NonMusicalPaperColumn #'keep-inside-line = ##t
+ \override PaperColumn.keep-inside-line = ##t
+ \override NonMusicalPaperColumn.keep-inside-line = ##t
     @}
   @}
 @}
@@ -4555,7 +4534,7 @@ zu ihrer Position innerhalb der Tonleiter gesetzt.
 
 \relative c' {
   % Arrange to obtain color from color-notehead procedure
-  \override NoteHead #'color = #color-notehead
+  \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
 }
 @end lilypond
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/Documentation/cs/texidocs/GNUmakefile b/Documentation/cs/texidocs/GNUmakefile
deleted file mode 100644 (file)
index 0ffa758..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
index 9cd7e81b0656fec9c2c0f5db0a075515b570f1bf..fc2e13f51f47af21437bec8b0e18684a6021f7ed 100644 (file)
@@ -16,7 +16,7 @@ td { border: 1px solid black; text-align: center; }
 
 @end html
 @end ifhtml
-@emph{Naposledy obnoveno Thu May 31 09:12:39 UTC 2012
+@emph{Naposledy obnoveno Wed Dec 18 12:23:14 UTC 2013
 }
 @multitable @columnfractions  0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
 
@@ -84,61 +84,61 @@ ano
 @item
 1 Cvičení
 @*
-2535
+2578
 @tab Pavel Fric
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ano</span>
+<span style="background-color: #dfef77">částečně (48 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ano
+částečně (48 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ano</span>
+<span style="background-color: #25fe1f">částečně</span>
 @end html
 @end ifhtml
 @ifnothtml
-ano
+částečně
 @end ifnothtml
 @tab před-GDP
 @item
 2 Běžný notový zápis
 @*
-4187
+4396
 @tab Pavel Fric
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ano</span>
+<span style="background-color: #dfef77">částečně (35 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ano
+částečně (35 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ano</span>
+<span style="background-color: #54ff26">částečně</span>
 @end html
 @end ifhtml
 @ifnothtml
-ano
+částečně
 @end ifnothtml
 @tab před-GDP
 @item
 3 Základní pojmy
 @*
-11130
+11144
 @tab Pavel Fric
 @tab 
 @tab 
@@ -155,7 +155,7 @@ ano
 @ifhtml
 
 @html
-<span style="background-color: #2cff20">částečně</span>
+<span style="background-color: #40fe23">částečně</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -165,24 +165,24 @@ ano
 @item
 4 Ladění výstupu
 @*
-15468
+16191
 @tab Pavel Fric
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">částečně (98 %)</span>
+<span style="background-color: #dfef77">částečně (50 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-částečně (98 %)
+částečně (50 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #47ff24">částečně</span>
+<span style="background-color: #9eff30">částečně</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -192,24 +192,24 @@ ano
 @item
 A Předlohy
 @*
-219
+372
 @tab Pavel Fric
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ano</span>
+<span style="background-color: #dfef77">částečně (38 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ano
+částečně (38 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #b2fe32">částečně</span>
+<span style="background-color: #fffd3d">částečně</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -285,7 +285,7 @@ ano
 @item
 Úvod
 @*
-4753
+4937
 @tab Pavel Fric
 @tab 
 @tab 
@@ -302,7 +302,7 @@ ano
 @ifhtml
 
 @html
-<span style="background-color: #6fff29">částečně</span>
+<span style="background-color: #97ff2f">částečně</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -312,7 +312,7 @@ ano
 @item
 Stažení
 @*
-1211
+1201
 @tab Pavel Fric
 @tab 
 @tab 
@@ -329,7 +329,7 @@ ano
 @ifhtml
 
 @html
-<span style="background-color: #4efe25">částečně</span>
+<span style="background-color: #68ff28">částečně</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -339,7 +339,7 @@ ano
 @item
 Příručky
 @*
-1214
+1284
 @tab Pavel Fric
 @tab 
 @tab 
@@ -356,7 +356,7 @@ ano
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">částečně</span>
+<span style="background-color: #4efe25">částečně</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -366,24 +366,24 @@ ano
 @item
 Společenství
 @*
-3006
+3073
 @tab  Pavel Fric
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">částečně (96 %)</span>
+<span style="background-color: #dfef77">částečně (95 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-částečně (96 %)
+částečně (95 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #e1ff39">částečně</span>
+<span style="background-color: #e8fe39">částečně</span>
 @end html
 @end ifhtml
 @ifnothtml
diff --git a/Documentation/cs/usage/GNUmakefile b/Documentation/cs/usage/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 073ada5667e59eb725e6cdd28bc4b1ac85c3c0f2..90036373b1fa6e83691c3f7ae0b2004a3cc23d8a 100644 (file)
@@ -285,7 +285,7 @@ Quantisiert Tondauern zu Vielfachen von @var{LÄNGE}.
 @item -e, --explicit-durations
 Gibt alle Tondauern explizit an.
 
-@item -h,--help
+@item -h, --help
 Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
 
 @item -k, --key=@var{acc}[:@var{Moll}]
@@ -358,7 +358,7 @@ unterstützt:
 @item -a, --absolute
 Konvertiert in absolute Tonhöhen.
 
-@item -h,--help
+@item -h, --help
 Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
 
 @item -l, --language=SPRACHE
@@ -376,13 +376,13 @@ von Artikulations- und Lautstärkebezeichnungen.
 Konvertiert keine Informationen über die Balkensetzung aus der
 MusicXML-Datei. Stattdessen wird dies LilyPond überlassen.
 
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
 Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. Wird
 als @var{Dateiname} nur @file{-} angegeben, wird das Ergebnis der Konvertierung
 an der Kommandozeile ausgegeben. Wird diese Option nicht angegeben, so
 erfolgt die Ausgabe in die Datei @var{XML-Datei}@file{.ly}.
 
-@item -r,--relative
+@item -r, --relative
 Konvertiert in relative Tonhöhen. (Standardeinstellung)
 
 @item -v, --verbose
@@ -391,7 +391,7 @@ Gibt ausführliche informative Meldungen während der Konvertierung aus.
 @item --version
 Gibt die Versionsnummer aus.
 
-@item  -z,--compressed
+@item -z, --compressed
 Die Eingabedatei wird als komprimierte MusicXML-Datei eingelesen.
 Dies ist die Standardeinstellung für Dateien mit der Erweiterung
 @file{.xml}.
@@ -425,15 +425,15 @@ Die folgenden Kommandozeilenoptionen werden von @command{abc2ly}
 unterstützt:
 
 @table @code
-@item -b,--beams=None
+@item -b, --beams=None
 Die Balkensetzung aus der ABC-Datei erhalten.
-@item -h,--help
+@item -h, --help
 Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
 Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben.
-@item -s,--strict
+@item -s, --strict
 Strenge Auslegung einer erfolgreichen Konvertierung.
-@item -v,--version
+@item -v, --version
 Gibt die Versionsnummer aus.
 @end table
 
@@ -512,9 +512,9 @@ Die folgenden Kommandozeilenoptionen werden von @command{etf2ly}
 unterstützt:
 
 @table @code
-@item -h,--help
+@item -h, --help
 Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
 Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben.
 @item --version
 Gibt die Versionsnummer aus.
index ae2b89ad6f1ba58c0a094bbf80a4e35a938565e0..d041f616207490d5b16db4f53c8bc092125c2927 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Pavel Fric
 
@@ -95,7 +95,7 @@ kombinieren. Zum Beispiel:
 
 \begin{lilypond}
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 \end{lilypond}
 
@@ -155,7 +155,7 @@ kombinieren. Zum Beispiel:
 
 @lilypond
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 @end lilypond
 
index 655889565e6751f9f95ab1458b22673a205625cc..c0ab29321435b374f95396e24822c798447de6cb 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @c Translators: Pavel Fric
 
@@ -152,7 +152,7 @@ Die folgenden Kommandozeilenoptionen werden von @command{lilypond} unterstützt:
 
 @table @code
 
-@item -e,--evaluate=@var{expr}
+@item -e, --evaluate=@var{expr}
 Wertet den Scheme-Ausdruck @var{expr} aus, bevor die @file{.ly} Dateien
 gelesen und interpretiert werden.
 Die @code{-e} Option kann auch mehrfach angegeben werden, die Ausdrücke
@@ -174,7 +174,7 @@ Am Beginn der @file{.ly}-Datei muss dann das @code{guile-user} Modul noch gelade
 @end example
 
 
-@item -f,--format=@var{Format}
+@item -f, --format=@var{Format}
 Bestimmt das Ausgabeformat. Mögliche Werte von @var{Format} sind
 @code{svg}, @code{ps}, @code{pdf} und @code{png}.
 
@@ -182,7 +182,7 @@ Beispiel: @code{lilypond -fpng @var{Dateiname}.ly}
 
 
 
-@item -d,--define-default=@var{Variable}=@var{Wert}
+@item -d, --define-default=@var{Variable}=@var{Wert}
 Damit wird die interne Programmoption @var{Variable} auf den Scheme-Wert
 @var{Wert} gesetzt. Wird kein @var{Wert} angegeben, so wird @var{#t} benutzt.
 Um eine Option auszuschalten, kann der Präfix @code{no-} dem Namen
@@ -338,10 +338,10 @@ ist in Verbindung mit @code{-dpreview} nützlich.
 
 
 
-@item -h,--help
+@item -h, --help
 Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
 
-@item -H,--header=@var{FELD}
+@item -H, --header=@var{FELD}
 Gibt den Inhalt eines Feldes aus dem @code{\header}-Block in die Datei
 @file{Dateiname.@var{FELD}} aus.
 
@@ -355,14 +355,14 @@ Mehrere -I-Optionen können angegeben werden.  Die Suche beginnt mit dem
 ersten definierten Verzeichnis und setzt in den weiteren Verzeichnissen
 fort, wenn die gesuchte Datei nicht in dem Verzeichnis gefunden wird.
 
-@item -i,--init=@var{Initialisierungsdatei}
+@item -i, --init=@var{Initialisierungsdatei}
 Benutzt @var{Initialisierungsdatei} zur gesamten Programminitialisierung. Der
 Standardwert ist @file{init.ly}.
 
 @cindex Verzeichnis, Ausgabe speichern in
 @cindex Ausgabedateiname
 
-@item -o,--output=@var{DATEI}
+@item -o, --output=@var{DATEI}
 Schreibt das Ergebnis der Verarbeitung mit LilyPond in die Ausgabedatei
 @var{DATEI}.  Wenn ein Verzeichnis mit dem Namen existiert, werden die Ausgabedateien
 in dieses Verzeichnis gespeichert, wobei der Dateiname der Eingabedatei
@@ -391,7 +391,7 @@ werden durch
 @item --pdf
 Erzeugt PDF-Dateien. Dies impliziert @code{--ps}.
 
-@item -j,--jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis}
+@item -j, --jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis}
 Führt @command{lilypond} in einem chroot-Jail aus.
 
 Die @code{--jail} Option ist eine flexiblere Alternative zu @code{--safe}, wenn
@@ -453,14 +453,14 @@ dies unterstützt -- auch den zur Verfügung stehenden Hauptspeicher.
 @end table
 
 
-@item -v,--version
+@item -v, --version
 Gibt die Versionsnummer aus.
 
-@item -V,--verbose
+@item -V, --verbose
 Gibt ausführliche informative Meldungen aus: Zeigt die vollen Dateipfade
 aller gelesenen Dateien sowie Informationen über die Laufzeit.
 
-@item -w,--warranty
+@item -w, --warranty
 Zeigt die Garantiebedingungen an, unter denen GNU LilyPond steht. (Es besteht
 @strong{KEINERLEI GARANTIE}!)
 @end table
@@ -766,7 +766,7 @@ rot macht, aber als Resultat hat man zwei Systeme, während die
 Notenköpfe immernoch schwarz im unteren System erscheinen.
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
 \new Staff { a }
 @end lilypond
 
@@ -778,7 +778,7 @@ richtige Schreibweise wäre:
 
 @lilypond[quote,verbatim,relative=2]
 \new Staff {
-  \override Staff.NoteHead #'color = #red
+  \override Staff.NoteHead.color = #red
   a
 }
 @end lilypond
@@ -871,7 +871,7 @@ indem man einen der Kontexte als System erscheinen lässt, indem man ihm
 zu Beginn hinzufügt:
 
 @example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
 @end example
 
 Zu Einzelheiten siehe @qq{Abstand von Nicht-Notensystemzeilen} in
index 37575f8f66990bd92c82218589ea07b5b082719c..5f05a503753a46aad660d90703536f3de785f388 100644 (file)
@@ -132,16 +132,16 @@ convert-ly [@var{volba}]@dots{} @var{souborovýnázev}@dots{}
 Mohou se používat následující volby:
 
 @table @code
-@item -e,--edit
+@item -e, --edit
 Použít převod přímo na vstupní soubor, takže je přímo změněn.
 
-@item -f,--from=@var{od-čísloverze}
+@item -f, --from=@var{od-čísloverze}
 Nastavuje číslo verze, od kterého má převod začít.  Když
 tato volba není použita, odhadne @command{convert-ly} číslo verze
 na základě údaje o @code{\version} v souboru.  Například
 @code{--from=2.10.25}
 
-@item -n,--no-version
+@item -n, --no-version
 Obvykle do výstupu @command{convert-ly} přidá záznam @code{\version}
 k převáděnému souboru.  Zadání této volby povede k potlačení tohoto chování.
 
diff --git a/Documentation/cs/web/GNUmakefile b/Documentation/cs/web/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 1c747012160f91c792c94a0a03a130ee86aabf77..c4e37ed8d74e67f7d629497f8bf22699c68e2d77 100644 (file)
@@ -548,9 +548,9 @@ stálý, napsali jsme příručku pro vývojářské práce
 
 @docLinksBare{Příručka pro vývojářské práce, přispěvatel,
   @rcontribnamed{Top,Příručka pro vývojářské práce},
-  @manualDevelContributorSplit-cs,
-  @manualDevelContributorBig-cs, 500 kB,
-  @manualDevelContributorPdf-cs, 2.8 MB}
+  @manualDevelContributorSplit,
+  @manualDevelContributorBig, 500 kB,
+  @manualDevelContributorPdf, 2.8 MB}
 
 @divEnd
 
@@ -649,41 +649,41 @@ příručky se nacházejí na @url{http://lilypond.org}.}
 @docLinkPdf{Lernen,learning,@manualDevelLearningPdf-cs}
 
 @item
-@docLinkSplit{Glossar,music-glossary,@manualDevelGlossarySplit-cs}
+@docLinkSplit{Glossar,music-glossary,@manualDevelGlossarySplit}
 @tab
-@docLinkBig{Glossar,music-glossary,@manualDevelGlossaryBig-cs}
+@docLinkBig{Glossar,music-glossary,@manualDevelGlossaryBig}
 @tab
-@docLinkPdf{Glossar,music-glossary,@manualDevelGlossaryPdf-cs}
+@docLinkPdf{Glossar,music-glossary,@manualDevelGlossaryPdf}
 
 @item
-@docLinkSplit{Aufsatz,essay,@manualDevelEssaySplit-cs}
+@docLinkSplit{Aufsatz,essay,@manualDevelEssaySplit}
 @tab
-@docLinkBig{Aufsatz,essay,@manualDevelEssayBig-cs}
+@docLinkBig{Aufsatz,essay,@manualDevelEssayBig}
 @tab
-@docLinkPdf{Aufsatz,essay,@manualDevelEssayPdf-cs}
+@docLinkPdf{Aufsatz,essay,@manualDevelEssayPdf}
 
 @headitem Často používané příručky
 
 @item
-@docLinkSplit{Notation,notation,@manualDevelNotationSplit-cs}
+@docLinkSplit{Notation,notation,@manualDevelNotationSplit}
 @tab
-@docLinkBig{Notation,notation,@manualDevelNotationBig-cs}
+@docLinkBig{Notation,notation,@manualDevelNotationBig}
 @tab
-@docLinkPdf{Notation,notation,@manualDevelNotationPdf-cs}
+@docLinkPdf{Notation,notation,@manualDevelNotationPdf}
 
 @item
-@docLinkSplit{Benutzung,usage,@manualDevelUsageSplit-cs}
+@docLinkSplit{Benutzung,usage,@manualDevelUsageSplit}
 @tab
-@docLinkBig{Benutzung,usage,@manualDevelUsageBig-cs}
+@docLinkBig{Benutzung,usage,@manualDevelUsageBig}
 @tab
-@docLinkPdf{Benutzung,usage,@manualDevelUsagePdf-cs}
+@docLinkPdf{Benutzung,usage,@manualDevelUsagePdf}
 
 @item
-@docLinkSplit{Schnipsel,snippets,@manualDevelSnippetsSplit-cs}
+@docLinkSplit{Schnipsel,snippets,@manualDevelSnippetsSplit}
 @tab
-@docLinkBig{Schnipsel,snippets,@manualDevelSnippetsBig-cs}
+@docLinkBig{Schnipsel,snippets,@manualDevelSnippetsBig}
 @tab
-@docLinkPdf{Schnipsel,snippets,@manualDevelSnippetsPdf-cs}
+@docLinkPdf{Schnipsel,snippets,@manualDevelSnippetsPdf}
 
 
 @headitem Zřídka používané příručky
@@ -696,25 +696,25 @@ příručky se nacházejí na @url{http://lilypond.org}.}
 @docLinkPdf{Webseite,web,@manualDevelWebPdf-cs}
 
 @item
-@docLinkSplit{Veränderungen,changes,@manualDevelChangesSplit-cs}
+@docLinkSplit{Veränderungen,changes,@manualDevelChangesSplit}
 @tab
-@docLinkBig{Veränderungen,changes,@manualDevelChangesBig-cs}
+@docLinkBig{Veränderungen,changes,@manualDevelChangesBig}
 @tab
-@docLinkPdf{Veränderungen,changes,@manualDevelChangesPdf-cs}
+@docLinkPdf{Veränderungen,changes,@manualDevelChangesPdf}
 
 @item
-@docLinkSplit{Erweitern,extending,@manualDevelExtendingSplit-cs}
+@docLinkSplit{Erweitern,extending,@manualDevelExtendingSplit}
 @tab
-@docLinkBig{Erweitern,extending,@manualDevelExtendingBig-cs}
+@docLinkBig{Erweitern,extending,@manualDevelExtendingBig}
 @tab
-@docLinkPdf{Erweitern,extending,@manualDevelExtendingPdf-cs}
+@docLinkPdf{Erweitern,extending,@manualDevelExtendingPdf}
 
 @item
-@docLinkSplit{Interna,internals,@manualDevelInternalsSplit-cs}
+@docLinkSplit{Interna,internals,@manualDevelInternalsSplit}
 @tab
-@docLinkBig{Interna,internals,@manualDevelInternalsBig-cs}
+@docLinkBig{Interna,internals,@manualDevelInternalsBig}
 @tab
-@docLinkPdf{Interna,internals,@manualDevelInternalsPdf-cs}
+@docLinkPdf{Interna,internals,@manualDevelInternalsPdf}
 
 @ifset web_version
 @headitem Ke stažení
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 610f2a9..376a699
@@ -223,9 +223,9 @@ vzít si na pomoc tento slovníček.
 
 @docLinks{Slovníček, music-glossary,
   @rglosnamed{Top,Slovníček},
-  @manualStableGlossarySplit-cs,
-  @manualStableGlossaryBig-cs, 1 MB,
-  @manualStableGlossaryPdf-cs, 1.5 MB}
+  @manualStableGlossarySplit,
+  @manualStableGlossaryBig, 1 MB,
+  @manualStableGlossaryPdf, 1.5 MB}
 
 @divEnd
 
@@ -252,9 +252,9 @@ rozlišení.}
 
 @docLinks{Článek, essay,
   @ressaynamed{Top,Článek},
-  @manualStableEssaySplit-cs,
-  @manualStableEssayBig-cs, 2 MB,
-  @manualStableEssayPdf-cs, 2.5 MB}
+  @manualStableEssaySplit,
+  @manualStableEssayBig, 2 MB,
+  @manualStableEssayPdf, 2.5 MB}
 
 @divEnd
 
@@ -279,9 +279,9 @@ pojmosloví (podívejte se do slovníčku).}
 
 @docLinks{Notový zápis, notation,
   @rusernamed{Top,Notový zápis},
-  @manualStableNotationSplit-cs,
-  @manualStableNotationBig-cs, 7 MB,
-  @manualStableNotationPdf-cs, 18 MB}
+  @manualStableNotationSplit,
+  @manualStableNotationBig, 7 MB,
+  @manualStableNotationPdf, 18 MB}
 
 @divEnd
 
@@ -304,9 +304,9 @@ tento dokument přečíst, dříve než si člověk začne myslet na větší pr
 
 @docLinks{Používání, usage,
   @rprogramnamed{Top,Používání},
-  @manualStableUsageSplit-cs,
-  @manualStableUsageBig-cs, 300 KB,
-  @manualStableUsagePdf-cs, 400 KB}
+  @manualStableUsageSplit,
+  @manualStableUsageBig, 300 KB,
+  @manualStableUsagePdf, 400 KB}
 
 @divEnd
 
@@ -442,9 +442,9 @@ vlastností v LilyPondu od předchozí stálé verze.
 
 @docLinks{Změny, changes,
   @rchangesnamed{Top,Změny},
-  @manualStableChangesSplit-cs,
-  @manualStableChangesBig-cs, 6 KB,
-  @manualStableChangesPdf-cs, 200 KB}
+  @manualStableChangesSplit,
+  @manualStableChangesBig, 6 KB,
+  @manualStableChangesPdf, 200 KB}
 
 @divEnd
 
@@ -464,9 +464,9 @@ V této knize se vysvětluje, jak se pro LilyPond píší rozšíření.
 
 @docLinks{Rozšíření, extending,
   @rextendnamed{Top,Rozšíření},
-  @manualStableExtendingSplit-cs,
-  @manualStableExtendingBig-cs, 200 KB,
-  @manualStableExtendingPdf-cs, 400 KB}
+  @manualStableExtendingSplit,
+  @manualStableExtendingBig, 200 KB,
+  @manualStableExtendingPdf, 400 KB}
 
 @divEnd
 
@@ -498,9 +498,9 @@ dokumentu.  Každá část doporučení k notovému zápisu má také část
 
 @docLinks{Vnitřnosti, internals,
   @rinternalsnamed{Top,Vnitřnosti},
-  @manualStableInternalsSplit-cs,
-  @manualStableInternalsBig-cs, 2.5 MB,
-  @manualStableInternalsPdf-cs, 2.8 MB}
+  @manualStableInternalsSplit,
+  @manualStableInternalsBig, 2.5 MB,
+  @manualStableInternalsPdf, 2.8 MB}
 
 @divEnd
 
@@ -521,7 +521,7 @@ dokumentu.  Každá část doporučení k notovému zápisu má také část
 @unnumberedsec Vše
 @translationof All
 
-@divClass{column-center-bottom}
+@divClass{column-left-top}
 @subheading Verze ke stažení
 
 @ifclear web_version
@@ -548,17 +548,17 @@ přes @uref{http://lilypond.org}.
 @divClass{keep-bullets}
 @itemize
 
-@item @uref{http://lilypond.org/doc/v2.12/Documentation/,
-LilyPond 2.12 Dokumentation} (německy)
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals.de.html,
+LilyPond 2.14 Dokumentation} (německy)
 
-@item @uref{http://lilypond.org/doc/v2.11/Documentation/,
-LilyPond 2.11 Dokumentation} (německy)
+@item @uref{http://lilypond.org/doc/v2.12/Documentation/index.de.html,
+LilyPond 2.12 Dokumentation} (německy)
 
 @item @uref{http://lilypond.org/doc/v2.10/Documentation/,
-LilyPond 2.10 Dokumentation} (německy)
+LilyPond 2.10 Dokumentation} (anglicky)
 
 @item @uref{http://lilypond.org/doc/v2.8/Documentation/,
-LilyPond 2.8 Dokumentation} (německy)
+LilyPond 2.8 Dokumentation} (anglicky)
 
 @item @uref{http://lilypond.org/doc/v2.6/Documentation/,
 LilyPond 2.6 Dokumentation} (anglicky)
diff --git a/Documentation/cs/web/news-front.itexi b/Documentation/cs/web/news-front.itexi
deleted file mode 100644 (file)
index 6339bf2..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*-
-@c This file is part of web.texi
-@ignore
-    Translation of GIT committish: 5e2900b22db1d1ea433d4e8445cbcba3ffe399a4
-
-    When revising a translation, copy the HEAD committish of the
-    version that you are working on.  See TRANSLATION for details.
-@end ignore
-
-
-@subsubheading LilyPond 2.13.47 released!  @emph{Jan 28, 2011}
-@subsubheading Release candidate 1 withdrawn  @emph{Jan 13, 2011}
-@subsubheading Release candidate 1 of 2.14 - LilyPond 2.13.46 released!  @emph{Jan 12, 2011}
-@subsubheading LilyPond 2.13.45 released!  @emph{Jan 3, 2011}
-
-@c -- SKELETON FILE --
index 41495994ce44f64473667db3f3e3e865dba6d244..5f822237df993f752ff7c3643cf0bf1b0d3f63f7 100644 (file)
@@ -2,8 +2,6 @@ depth = ../..
 
 CSS_FILES = $(call src-wildcard,*.css)
 
-EXTRA_DIST_FILES = $(CSS_FILES)
-
 OUT_CSS_FILES = $(CSS_FILES:%=$(outdir)/%)
 
 STEPMAKE_TEMPLATES = documentation
index 2ce622912549f6c78fa1944c1798b8f01f0466b1..820cd5c5bfea663ecd82d71b286766452da85df2 100644 (file)
@@ -76,6 +76,8 @@ div#tocframe {
   -moz-border-radius-bottomright: 7px;
   -webkit-border-bottom-left-radius: 7px;
   -webkit-border-bottom-right-radius: 7px;
+  border-bottom-left-radius: 7px;
+  border-bottom-right-radius: 7px;
   margin: 0;
 }
 
@@ -94,10 +96,9 @@ div#tocframe {
   text-indent: -999em;
   background: #6aec7c url(../pictures/lily-home-nav-bg.png) no-repeat 50% 50%;
   width: 9%;
-  /* css3 no go yet? */
-  border-bottom-left-radius: 30px;
   -moz-border-radius-bottomleft: 7px;
   -webkit-border-bottom-left-radius: 7px;
+  border-bottom-left-radius: 7px;
 }
 
 #tocframe > ul:first-child > li:first-child a:hover {
@@ -121,6 +122,7 @@ div#tocframe {
   width: 9%;
   -moz-border-radius-bottomright: 7px;
   -webkit-border-bottom-right-radius: 7px;
+  border-bottom-right-radius: 7px;
 }
 
 #tocframe li {
@@ -151,6 +153,8 @@ div#tocframe {
   -moz-border-radius-bottomright: 20px;
   -webkit-border-top-right-radius: 20px;
   -webkit-border-bottom-right-radius: 20px;
+  border-top-right-radius: 20px;
+  border-bottom-right-radius: 20px;
 }
 
 #tocframe li form input[type="hidden"] {
@@ -205,6 +209,8 @@ div#tocframe {
   -moz-border-radius-bottomleft: 7px;
   -webkit-border-top-left-radius: 7px;
   -webkit-border-bottom-left-radius: 7px;
+  border-top-left-radius: 7px;
+  border-bottom-left-radius: 7px;
 }
 
 #tocframe .toc .toc li:last-child a {
@@ -212,6 +218,8 @@ div#tocframe {
   -moz-border-radius-bottomright: 7px;
   -webkit-border-top-right-radius: 7px;
   -webkit-border-bottom-right-radius: 7px;
+  border-top-right-radius: 7px;
+  border-bottom-right-radius: 7px;
 }
 
 #tocframe .toc .toc li a {
@@ -423,10 +431,10 @@ div#quickSummary {
 }
 
 div.separator {
-  background: transparent url(../pictures/squiggle.jpg) no-repeat 40% 60%;
+  background: transparent url(../pictures/squiggle.jpg) no-repeat 50% 50%;
   height: 36px;
-  clear: both;
   padding: 10px;
+  margin: 0 13em 0 0;
 }
 
 div#news {
@@ -435,6 +443,7 @@ div#news {
 }
 
 div.news-item {
+  padding: 1em 0;
 }
 
 .news-item .subsubheading {
@@ -895,6 +904,7 @@ div.color4 h3 {
   padding : 0em;
   border-left: 2px;
   margin: 0em;
+  width: 67%;
 }
 
 .normal-table table td {
@@ -929,6 +939,7 @@ div.color4 h3 {
   /* Experimental rounded corners */
   -moz-border-radius: 10px;
   -webkit-border-radius: 10px;
+  border-radius: 10px;
   margin: 1em;
 }
 
diff --git a/Documentation/cyrillic.itexi b/Documentation/cyrillic.itexi
new file mode 100644 (file)
index 0000000..4e7569c
--- /dev/null
@@ -0,0 +1,768 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+@c
+@c cyrillic.itexi
+@c
+@c
+@c Cyrillic support for texinfo, using UTF-8 input encoding and LH fonts,
+@c with all the restrictions for non-CM fonts (this is, no kerning and no
+@c hyphenation).
+@c
+@c For outline fonts, we also use the cm-super family; the setup is the same
+@c as with the EC fonts except that the prefix is not `ec' but `la'.
+
+@tex
+\gdef\cyrfont{%
+  % Use the EC size information.
+  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+  \ifmonospace
+    \font\thiscyrfont = latt\ecsize \space at \nominalsize
+  \else
+    \ifx\curfontstyle\bfstylename
+      \font\thiscyrfont = lab\ifusingit{i}{x}\ecsize \space at \nominalsize
+    \else
+      \font\thiscyrfont = la\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+    \fi
+  \fi
+  \thiscyrfont
+}
+
+
+% Glyph names, taken from LaTeX's `t2aenc.def' font encoding definition file
+% for T2A encoding.
+
+\gdef\textnumero{{\cyrfont \char 157}}
+\gdef\CYRpalochka{{\cyrfont \char 13}}
+
+\gdef\CYRA{{\cyrfont \char 192}}
+\gdef\cyra{{\cyrfont \char 224}}
+\gdef\CYRB{{\cyrfont \char 193}}
+\gdef\cyrb{{\cyrfont \char 225}}
+\gdef\CYRV{{\cyrfont \char 194}}
+\gdef\cyrv{{\cyrfont \char 226}}
+\gdef\CYRG{{\cyrfont \char 195}}
+\gdef\cyrg{{\cyrfont \char 227}}
+\gdef\CYRD{{\cyrfont \char 196}}
+\gdef\cyrd{{\cyrfont \char 228}}
+\gdef\CYRE{{\cyrfont \char 197}}
+\gdef\cyre{{\cyrfont \char 229}}
+\gdef\CYRZH{{\cyrfont \char 198}}
+\gdef\cyrzh{{\cyrfont \char 230}}
+\gdef\CYRZ{{\cyrfont \char 199}}
+\gdef\cyrz{{\cyrfont \char 231}}
+\gdef\CYRI{{\cyrfont \char 200}}
+\gdef\cyri{{\cyrfont \char 232}}
+\gdef\CYRISHRT{{\cyrfont \char 201}}
+\gdef\cyrishrt{{\cyrfont \char 233}}
+\gdef\CYRK{{\cyrfont \char 202}}
+\gdef\cyrk{{\cyrfont \char 234}}
+\gdef\CYRL{{\cyrfont \char 203}}
+\gdef\cyrl{{\cyrfont \char 235}}
+\gdef\CYRM{{\cyrfont \char 204}}
+\gdef\cyrm{{\cyrfont \char 236}}
+\gdef\CYRN{{\cyrfont \char 205}}
+\gdef\cyrn{{\cyrfont \char 237}}
+\gdef\CYRO{{\cyrfont \char 206}}
+\gdef\cyro{{\cyrfont \char 238}}
+\gdef\CYRP{{\cyrfont \char 207}}
+\gdef\cyrp{{\cyrfont \char 239}}
+\gdef\CYRR{{\cyrfont \char 208}}
+\gdef\cyrr{{\cyrfont \char 240}}
+\gdef\CYRS{{\cyrfont \char 209}}
+\gdef\cyrs{{\cyrfont \char 241}}
+\gdef\CYRT{{\cyrfont \char 210}}
+\gdef\cyrt{{\cyrfont \char 242}}
+\gdef\CYRU{{\cyrfont \char 211}}
+\gdef\cyru{{\cyrfont \char 243}}
+\gdef\CYRF{{\cyrfont \char 212}}
+\gdef\cyrf{{\cyrfont \char 244}}
+\gdef\CYRH{{\cyrfont \char 213}}
+\gdef\cyrh{{\cyrfont \char 245}}
+\gdef\CYRC{{\cyrfont \char 214}}
+\gdef\cyrc{{\cyrfont \char 246}}
+\gdef\CYRCH{{\cyrfont \char 215}}
+\gdef\cyrch{{\cyrfont \char 247}}
+\gdef\CYRSH{{\cyrfont \char 216}}
+\gdef\cyrsh{{\cyrfont \char 248}}
+\gdef\CYRSHCH{{\cyrfont \char 217}}
+\gdef\cyrshch{{\cyrfont \char 249}}
+\gdef\CYRHRDSN{{\cyrfont \char 218}}
+\gdef\cyrhrdsn{{\cyrfont \char 250}}
+\gdef\CYRERY{{\cyrfont \char 219}}
+\gdef\cyrery{{\cyrfont \char 251}}
+\gdef\CYRSFTSN{{\cyrfont \char 220}}
+\gdef\cyrsftsn{{\cyrfont \char 252}}
+\gdef\CYREREV{{\cyrfont \char 221}}
+\gdef\cyrerev{{\cyrfont \char 253}}
+\gdef\CYRYU{{\cyrfont \char 222}}
+\gdef\cyryu{{\cyrfont \char 254}}
+\gdef\CYRYA{{\cyrfont \char 223}}
+\gdef\cyrya{{\cyrfont \char 255}}
+\gdef\CYRGUP{{\cyrfont \char 128}}
+\gdef\cyrgup{{\cyrfont \char 160}}
+\gdef\CYRGHCRS{{\cyrfont \char 129}}
+\gdef\cyrghcrs{{\cyrfont \char 161}}
+\gdef\CYRDJE{{\cyrfont \char 130}}
+\gdef\cyrdje{{\cyrfont \char 162}}
+\gdef\CYRTSHE{{\cyrfont \char 131}}
+\gdef\cyrtshe{{\cyrfont \char 163}}
+\gdef\CYRSHHA{{\cyrfont \char 132}}
+\gdef\cyrshha{{\cyrfont \char 164}}
+\gdef\CYRZHDSC{{\cyrfont \char 133}}
+\gdef\cyrzhdsc{{\cyrfont \char 165}}
+\gdef\CYRZDSC{{\cyrfont \char 134}}
+\gdef\cyrzdsc{{\cyrfont \char 166}}
+\gdef\CYRLJE{{\cyrfont \char 135}}
+\gdef\cyrlje{{\cyrfont \char 167}}
+\gdef\CYRYI{{\cyrfont \char 136}}
+\gdef\cyryi{{\cyrfont \char 168}}
+\gdef\CYRKDSC{{\cyrfont \char 137}}
+\gdef\cyrkdsc{{\cyrfont \char 169}}
+\gdef\CYRKBEAK{{\cyrfont \char 138}}
+\gdef\cyrkbeak{{\cyrfont \char 170}}
+\gdef\CYRKVCRS{{\cyrfont \char 139}}
+\gdef\cyrkvcrs{{\cyrfont \char 171}}
+\gdef\CYRAE{{\cyrfont \char 140}}
+\gdef\cyrae{{\cyrfont \char 172}}
+\gdef\CYRNDSC{{\cyrfont \char 141}}
+\gdef\cyrndsc{{\cyrfont \char 173}}
+\gdef\CYRNG{{\cyrfont \char 142}}
+\gdef\cyrng{{\cyrfont \char 174}}
+\gdef\CYRDZE{{\cyrfont \char 143}}
+\gdef\cyrdze{{\cyrfont \char 175}}
+\gdef\CYROTLD{{\cyrfont \char 144}}
+\gdef\cyrotld{{\cyrfont \char 176}}
+\gdef\CYRSDSC{{\cyrfont \char 145}}
+\gdef\cyrsdsc{{\cyrfont \char 177}}
+\gdef\CYRUSHRT{{\cyrfont \char 146}}
+\gdef\cyrushrt{{\cyrfont \char 178}}
+\gdef\CYRY{{\cyrfont \char 147}}
+\gdef\cyry{{\cyrfont \char 179}}
+\gdef\CYRYHCRS{{\cyrfont \char 148}}
+\gdef\cyryhcrs{{\cyrfont \char 180}}
+\gdef\CYRHDSC{{\cyrfont \char 149}}
+\gdef\cyrhdsc{{\cyrfont \char 181}}
+\gdef\CYRDZHE{{\cyrfont \char 150}}
+\gdef\cyrdzhe{{\cyrfont \char 182}}
+\gdef\CYRCHVCRS{{\cyrfont \char 151}}
+\gdef\cyrchvcrs{{\cyrfont \char 183}}
+\gdef\CYRCHRDSC{{\cyrfont \char 152}}
+\gdef\cyrchrdsc{{\cyrfont \char 184}}
+\gdef\CYRIE{{\cyrfont \char 153}}
+\gdef\cyrie{{\cyrfont \char 185}}
+\gdef\CYRSCHWA{{\cyrfont \char 154}}
+\gdef\cyrschwa{{\cyrfont \char 186}}
+\gdef\CYRNJE{{\cyrfont \char 155}}
+\gdef\cyrnje{{\cyrfont \char 187}}
+\gdef\CYRYO{{\cyrfont \char 156}}
+\gdef\cyryo{{\cyrfont \char 188}}
+\gdef\CYRII{{\cyrfont \char 73}}
+\gdef\cyrii{{\cyrfont \char 105}}
+\gdef\CYRJE{{\cyrfont \char 74}}
+\gdef\cyrje{{\cyrfont \char 106}}
+\gdef\CYRQ{{\cyrfont \char 81}}
+\gdef\cyrq{{\cyrfont \char 113}}
+\gdef\CYRW{{\cyrfont \char 87}}
+\gdef\cyrw{{\cyrfont \char 119}}
+
+% Composite glyphs.
+
+\gdef\CYREGRAVE{{\cyrfont \accent 0 \char 197}}
+\gdef\cyregrave{{\cyrfont \accent 0 \char 229}}
+\gdef\CYRGGRAVE{{\cyrfont \accent 0 \char 195}}
+\gdef\cyrggrave{{\cyrfont \accent 0 \char 227}}
+\gdef\CYRKGRAVE{{\cyrfont \accent 0 \char 202}}
+\gdef\cyrkgrave{{\cyrfont \accent 0 \char 234}}
+\gdef\CYRIGRAVE{{\cyrfont \accent 0 \char 200}}
+\gdef\cyrigrave{{\cyrfont \accent 0 \char 232}}
+
+\gdef\CYRZHBREVE{{\cyrfont \accent 20 \char 198}}
+\gdef\cyrzhbreve{{\cyrfont \accent 20 \char 230}}
+\gdef\CYRABREVE{{\cyrfont \accent 20 \char 192}}
+\gdef\cyrabreve{{\cyrfont \accent 20 \char 224}}
+\gdef\CYREBREVE{{\cyrfont \accent 20 \char 197}}
+\gdef\cyrebreve{{\cyrfont \accent 20 \char 229}}
+
+\gdef\CYRADIAERESIS{{\cyrfont \accent 4 \char 192}}
+\gdef\cyradiaeresis{{\cyrfont \accent 4 \char 224}}
+\gdef\CYRSCHWADIAERESIS{{\cyrfont \accent 4 \char 154}}
+\gdef\cyrschwadiaeresis{{\cyrfont \accent 4 \char 186}}
+\gdef\CYRZHDIAERESIS{{\cyrfont \accent 4 \char 198}}
+\gdef\cyrzhdiaeresis{{\cyrfont \accent 4 \char 230}}
+\gdef\CYRZDIAERESIS{{\cyrfont \accent 4 \char 199}}
+\gdef\cyrzdiaeresis{{\cyrfont \accent 4 \char 231}}
+\gdef\CYRIDIAERESIS{{\cyrfont \accent 4 \char 200}}
+\gdef\cyridiaeresis{{\cyrfont \accent 4 \char 232}}
+\gdef\CYRODIAERESIS{{\cyrfont \accent 4 \char 206}}
+\gdef\cyrodiaeresis{{\cyrfont \accent 4 \char 238}}
+\gdef\CYREREVDIAERESIS{{\cyrfont \accent 4 \char 221}}
+\gdef\cyrerevdiaeresis{{\cyrfont \accent 4 \char 253}}
+\gdef\CYRUDIAERESIS{{\cyrfont \accent 4 \char 211}}
+\gdef\cyrudiaeresis{{\cyrfont \accent 4 \char 243}}
+\gdef\CYRCHDIAERESIS{{\cyrfont \accent 4 \char 215}}
+\gdef\cyrchdiaeresis{{\cyrfont \accent 4 \char 247}}
+\gdef\CYRERYDIAERESIS{{\cyrfont \accent 4 \char 219}}
+\gdef\cyrerydiaeresis{{\cyrfont \accent 4 \char 251}}
+
+\gdef\CYRIMACRON{{\cyrfont \accent 9 \char 200}}
+\gdef\cyrimacron{{\cyrfont \accent 9 \char 232}}
+\gdef\CYRUMACRON{{\cyrfont \accent 9 \char 211}}
+\gdef\cyrumacron{{\cyrfont \accent 9 \char 243}}
+
+\gdef\CYRUDOUBLEACUTE{{\cyrfont \accent 5 \char 211}}
+\gdef\cyrudoubleacute{{\cyrfont \accent 5 \char 243}}
+
+
+% UTF-8 mappings, taken from LaTeX's t2aenc.dfu input encoding definition
+% file for T2A encoding (adapted to use the above composite glyph names).
+
+\DeclareUnicodeCharacter{0400}{\CYREGRAVE}
+\DeclareUnicodeCharacter{0401}{\CYRYO}
+\DeclareUnicodeCharacter{0402}{\CYRDJE}
+\DeclareUnicodeCharacter{0403}{\CYRGGRAVE}
+\DeclareUnicodeCharacter{0404}{\CYRIE}
+\DeclareUnicodeCharacter{0405}{\CYRDZE}
+\DeclareUnicodeCharacter{0406}{\CYRII}
+\DeclareUnicodeCharacter{0407}{\CYRYI}
+\DeclareUnicodeCharacter{0408}{\CYRJE}
+\DeclareUnicodeCharacter{0409}{\CYRLJE}
+\DeclareUnicodeCharacter{040A}{\CYRNJE}
+\DeclareUnicodeCharacter{040B}{\CYRTSHE}
+\DeclareUnicodeCharacter{040C}{\CYRKGRAVE}
+\DeclareUnicodeCharacter{040D}{\CYRIGRAVE}
+\DeclareUnicodeCharacter{040E}{\CYRUSHRT}
+\DeclareUnicodeCharacter{040F}{\CYRDZHE}
+\DeclareUnicodeCharacter{0410}{\CYRA}
+\DeclareUnicodeCharacter{0411}{\CYRB}
+\DeclareUnicodeCharacter{0412}{\CYRV}
+\DeclareUnicodeCharacter{0413}{\CYRG}
+\DeclareUnicodeCharacter{0414}{\CYRD}
+\DeclareUnicodeCharacter{0415}{\CYRE}
+\DeclareUnicodeCharacter{0416}{\CYRZH}
+\DeclareUnicodeCharacter{0417}{\CYRZ}
+\DeclareUnicodeCharacter{0418}{\CYRI}
+\DeclareUnicodeCharacter{0419}{\CYRISHRT}
+\DeclareUnicodeCharacter{041A}{\CYRK}
+\DeclareUnicodeCharacter{041B}{\CYRL}
+\DeclareUnicodeCharacter{041C}{\CYRM}
+\DeclareUnicodeCharacter{041D}{\CYRN}
+\DeclareUnicodeCharacter{041E}{\CYRO}
+\DeclareUnicodeCharacter{041F}{\CYRP}
+\DeclareUnicodeCharacter{0420}{\CYRR}
+\DeclareUnicodeCharacter{0421}{\CYRS}
+\DeclareUnicodeCharacter{0422}{\CYRT}
+\DeclareUnicodeCharacter{0423}{\CYRU}
+\DeclareUnicodeCharacter{0424}{\CYRF}
+\DeclareUnicodeCharacter{0425}{\CYRH}
+\DeclareUnicodeCharacter{0426}{\CYRC}
+\DeclareUnicodeCharacter{0427}{\CYRCH}
+\DeclareUnicodeCharacter{0428}{\CYRSH}
+\DeclareUnicodeCharacter{0429}{\CYRSHCH}
+\DeclareUnicodeCharacter{042A}{\CYRHRDSN}
+\DeclareUnicodeCharacter{042B}{\CYRERY}
+\DeclareUnicodeCharacter{042C}{\CYRSFTSN}
+\DeclareUnicodeCharacter{042D}{\CYREREV}
+\DeclareUnicodeCharacter{042E}{\CYRYU}
+\DeclareUnicodeCharacter{042F}{\CYRYA}
+\DeclareUnicodeCharacter{0430}{\cyra}
+\DeclareUnicodeCharacter{0431}{\cyrb}
+\DeclareUnicodeCharacter{0432}{\cyrv}
+\DeclareUnicodeCharacter{0433}{\cyrg}
+\DeclareUnicodeCharacter{0434}{\cyrd}
+\DeclareUnicodeCharacter{0435}{\cyre}
+\DeclareUnicodeCharacter{0436}{\cyrzh}
+\DeclareUnicodeCharacter{0437}{\cyrz}
+\DeclareUnicodeCharacter{0438}{\cyri}
+\DeclareUnicodeCharacter{0439}{\cyrishrt}
+\DeclareUnicodeCharacter{043A}{\cyrk}
+\DeclareUnicodeCharacter{043B}{\cyrl}
+\DeclareUnicodeCharacter{043C}{\cyrm}
+\DeclareUnicodeCharacter{043D}{\cyrn}
+\DeclareUnicodeCharacter{043E}{\cyro}
+\DeclareUnicodeCharacter{043F}{\cyrp}
+\DeclareUnicodeCharacter{0440}{\cyrr}
+\DeclareUnicodeCharacter{0441}{\cyrs}
+\DeclareUnicodeCharacter{0442}{\cyrt}
+\DeclareUnicodeCharacter{0443}{\cyru}
+\DeclareUnicodeCharacter{0444}{\cyrf}
+\DeclareUnicodeCharacter{0445}{\cyrh}
+\DeclareUnicodeCharacter{0446}{\cyrc}
+\DeclareUnicodeCharacter{0447}{\cyrch}
+\DeclareUnicodeCharacter{0448}{\cyrsh}
+\DeclareUnicodeCharacter{0449}{\cyrshch}
+\DeclareUnicodeCharacter{044A}{\cyrhrdsn}
+\DeclareUnicodeCharacter{044B}{\cyrery}
+\DeclareUnicodeCharacter{044C}{\cyrsftsn}
+\DeclareUnicodeCharacter{044D}{\cyrerev}
+\DeclareUnicodeCharacter{044E}{\cyryu}
+\DeclareUnicodeCharacter{044F}{\cyrya}
+\DeclareUnicodeCharacter{0450}{\cyregrave}
+\DeclareUnicodeCharacter{0451}{\cyryo}
+\DeclareUnicodeCharacter{0452}{\cyrdje}
+\DeclareUnicodeCharacter{0453}{\cyrggrave}
+\DeclareUnicodeCharacter{0454}{\cyrie}
+\DeclareUnicodeCharacter{0455}{\cyrdze}
+\DeclareUnicodeCharacter{0456}{\cyrii}
+\DeclareUnicodeCharacter{0457}{\cyryi}
+\DeclareUnicodeCharacter{0458}{\cyrje}
+\DeclareUnicodeCharacter{0459}{\cyrlje}
+\DeclareUnicodeCharacter{045A}{\cyrnje}
+\DeclareUnicodeCharacter{045B}{\cyrtshe}
+\DeclareUnicodeCharacter{045C}{\cyrkgrave}
+\DeclareUnicodeCharacter{045D}{\cyrigrave}
+\DeclareUnicodeCharacter{045E}{\cyrushrt}
+\DeclareUnicodeCharacter{045F}{\cyrdzhe}
+\DeclareUnicodeCharacter{0490}{\CYRGUP}
+\DeclareUnicodeCharacter{0491}{\cyrgup}
+\DeclareUnicodeCharacter{0492}{\CYRGHCRS}
+\DeclareUnicodeCharacter{0493}{\cyrghcrs}
+\DeclareUnicodeCharacter{0496}{\CYRZHDSC}
+\DeclareUnicodeCharacter{0497}{\cyrzhdsc}
+\DeclareUnicodeCharacter{0498}{\CYRZDSC}
+\DeclareUnicodeCharacter{0499}{\cyrzdsc}
+\DeclareUnicodeCharacter{049A}{\CYRKDSC}
+\DeclareUnicodeCharacter{049B}{\cyrkdsc}
+\DeclareUnicodeCharacter{049C}{\CYRKVCRS}
+\DeclareUnicodeCharacter{049D}{\cyrkvcrs}
+\DeclareUnicodeCharacter{04A0}{\CYRKBEAK}
+\DeclareUnicodeCharacter{04A1}{\cyrkbeak}
+\DeclareUnicodeCharacter{04A2}{\CYRNDSC}
+\DeclareUnicodeCharacter{04A3}{\cyrndsc}
+\DeclareUnicodeCharacter{04A4}{\CYRNG}
+\DeclareUnicodeCharacter{04A5}{\cyrng}
+\DeclareUnicodeCharacter{04AA}{\CYRSDSC}
+\DeclareUnicodeCharacter{04AB}{\cyrsdsc}
+\DeclareUnicodeCharacter{04AE}{\CYRY}
+\DeclareUnicodeCharacter{04AF}{\cyry}
+\DeclareUnicodeCharacter{04B0}{\CYRYHCRS}
+\DeclareUnicodeCharacter{04B1}{\cyryhcrs}
+\DeclareUnicodeCharacter{04B2}{\CYRHDSC}
+\DeclareUnicodeCharacter{04B3}{\cyrhdsc}
+\DeclareUnicodeCharacter{04B6}{\CYRCHRDSC}
+\DeclareUnicodeCharacter{04B7}{\cyrchrdsc}
+\DeclareUnicodeCharacter{04B8}{\CYRCHVCRS}
+\DeclareUnicodeCharacter{04B9}{\cyrchvcrs}
+\DeclareUnicodeCharacter{04BA}{\CYRSHHA}
+\DeclareUnicodeCharacter{04BB}{\cyrshha}
+\DeclareUnicodeCharacter{04C0}{\CYRpalochka}
+\DeclareUnicodeCharacter{04C1}{\CYRZHBREVE}
+\DeclareUnicodeCharacter{04C2}{\cyrzhbreve}
+\DeclareUnicodeCharacter{04D0}{\CYRABREVE}
+\DeclareUnicodeCharacter{04D1}{\cyrabreve}
+\DeclareUnicodeCharacter{04D2}{\CYRADIAERESIS}
+\DeclareUnicodeCharacter{04D3}{\cyradiaeresis}
+\DeclareUnicodeCharacter{04D4}{\CYRAE}
+\DeclareUnicodeCharacter{04D5}{\cyrae}
+\DeclareUnicodeCharacter{04D6}{\CYREBREVE}
+\DeclareUnicodeCharacter{04D7}{\cyrebreve}
+\DeclareUnicodeCharacter{04D8}{\CYRSCHWA}
+\DeclareUnicodeCharacter{04D9}{\cyrschwa}
+\DeclareUnicodeCharacter{04DA}{\CYRSCHWADIAERESIS}
+\DeclareUnicodeCharacter{04DB}{\cyrschwadiaeresis}
+\DeclareUnicodeCharacter{04DC}{\CYRZHDIAERESIS}
+\DeclareUnicodeCharacter{04DD}{\cyrzhdiaeresis}
+\DeclareUnicodeCharacter{04DE}{\CYRZDIAERESIS}
+\DeclareUnicodeCharacter{04DF}{\cyrzdiaeresis}
+\DeclareUnicodeCharacter{04E2}{\CYRIMACRON}
+\DeclareUnicodeCharacter{04E3}{\cyrimacron}
+\DeclareUnicodeCharacter{04E4}{\CYRIDIAERESIS}
+\DeclareUnicodeCharacter{04E5}{\cyridiaeresis}
+\DeclareUnicodeCharacter{04E6}{\CYRODIAERESIS}
+\DeclareUnicodeCharacter{04E7}{\cyrodiaeresis}
+\DeclareUnicodeCharacter{04E8}{\CYROTLD}
+\DeclareUnicodeCharacter{04E9}{\cyrotld}
+\DeclareUnicodeCharacter{04EC}{\CYREREVDIAERESIS}
+\DeclareUnicodeCharacter{04ED}{\cyrerevdiaeresis}
+\DeclareUnicodeCharacter{04EE}{\CYRUMACRON}
+\DeclareUnicodeCharacter{04EF}{\cyrumacron}
+\DeclareUnicodeCharacter{04F0}{\CYRUDIAERESIS}
+\DeclareUnicodeCharacter{04F1}{\cyrudiaeresis}
+\DeclareUnicodeCharacter{04F2}{\CYRUDOUBLEACUTE}
+\DeclareUnicodeCharacter{04F3}{\cyrudoubleacute}
+\DeclareUnicodeCharacter{04F4}{\CYRCHDIAERESIS}
+\DeclareUnicodeCharacter{04F5}{\cyrchdiaeresis}
+\DeclareUnicodeCharacter{04F8}{\CYRERYDIAERESIS}
+\DeclareUnicodeCharacter{04F9}{\cyrerydiaeresis}
+
+\DeclareUnicodeCharacter{2116}{\textnumero}
+
+
+% Add all Cyrillic character names to \commondummies.
+
+\gdef\cyrdummies{%
+  \definedummyword\textnumero
+  \definedummyword\CYRpalochka
+%
+  \definedummyword\CYRA
+  \definedummyword\cyra
+  \definedummyword\CYRB
+  \definedummyword\cyrb
+  \definedummyword\CYRV
+  \definedummyword\cyrv
+  \definedummyword\CYRG
+  \definedummyword\cyrg
+  \definedummyword\CYRD
+  \definedummyword\cyrd
+  \definedummyword\CYRE
+  \definedummyword\cyre
+  \definedummyword\CYRZH
+  \definedummyword\cyrzh
+  \definedummyword\CYRZ
+  \definedummyword\cyrz
+  \definedummyword\CYRI
+  \definedummyword\cyri
+  \definedummyword\CYRISHRT
+  \definedummyword\cyrishrt
+  \definedummyword\CYRK
+  \definedummyword\cyrk
+  \definedummyword\CYRL
+  \definedummyword\cyrl
+  \definedummyword\CYRM
+  \definedummyword\cyrm
+  \definedummyword\CYRN
+  \definedummyword\cyrn
+  \definedummyword\CYRO
+  \definedummyword\cyro
+  \definedummyword\CYRP
+  \definedummyword\cyrp
+  \definedummyword\CYRR
+  \definedummyword\cyrr
+  \definedummyword\CYRS
+  \definedummyword\cyrs
+  \definedummyword\CYRT
+  \definedummyword\cyrt
+  \definedummyword\CYRU
+  \definedummyword\cyru
+  \definedummyword\CYRF
+  \definedummyword\cyrf
+  \definedummyword\CYRH
+  \definedummyword\cyrh
+  \definedummyword\CYRC
+  \definedummyword\cyrc
+  \definedummyword\CYRCH
+  \definedummyword\cyrch
+  \definedummyword\CYRSH
+  \definedummyword\cyrsh
+  \definedummyword\CYRSHCH
+  \definedummyword\cyrshch
+  \definedummyword\CYRHRDSN
+  \definedummyword\cyrhrdsn
+  \definedummyword\CYRERY
+  \definedummyword\cyrery
+  \definedummyword\CYRSFTSN
+  \definedummyword\cyrsftsn
+  \definedummyword\CYREREV
+  \definedummyword\cyrerev
+  \definedummyword\CYRYU
+  \definedummyword\cyryu
+  \definedummyword\CYRYA
+  \definedummyword\cyrya
+  \definedummyword\CYRGUP
+  \definedummyword\cyrgup
+  \definedummyword\CYRGHCRS
+  \definedummyword\cyrghcrs
+  \definedummyword\CYRDJE
+  \definedummyword\cyrdje
+  \definedummyword\CYRTSHE
+  \definedummyword\cyrtshe
+  \definedummyword\CYRSHHA
+  \definedummyword\cyrshha
+  \definedummyword\CYRZHDSC
+  \definedummyword\cyrzhdsc
+  \definedummyword\CYRZDSC
+  \definedummyword\cyrzdsc
+  \definedummyword\CYRLJE
+  \definedummyword\cyrlje
+  \definedummyword\CYRYI
+  \definedummyword\cyryi
+  \definedummyword\CYRKDSC
+  \definedummyword\cyrkdsc
+  \definedummyword\CYRKBEAK
+  \definedummyword\cyrkbeak
+  \definedummyword\CYRKVCRS
+  \definedummyword\cyrkvcrs
+  \definedummyword\CYRAE
+  \definedummyword\cyrae
+  \definedummyword\CYRNDSC
+  \definedummyword\cyrndsc
+  \definedummyword\CYRNG
+  \definedummyword\cyrng
+  \definedummyword\CYRDZE
+  \definedummyword\cyrdze
+  \definedummyword\CYROTLD
+  \definedummyword\cyrotld
+  \definedummyword\CYRSDSC
+  \definedummyword\cyrsdsc
+  \definedummyword\CYRUSHRT
+  \definedummyword\cyrushrt
+  \definedummyword\CYRY
+  \definedummyword\cyry
+  \definedummyword\CYRYHCRS
+  \definedummyword\cyryhcrs
+  \definedummyword\CYRHDSC
+  \definedummyword\cyrhdsc
+  \definedummyword\CYRDZHE
+  \definedummyword\cyrdzhe
+  \definedummyword\CYRCHVCRS
+  \definedummyword\cyrchvcrs
+  \definedummyword\CYRCHRDSC
+  \definedummyword\cyrchrdsc
+  \definedummyword\CYRIE
+  \definedummyword\cyrie
+  \definedummyword\CYRSCHWA
+  \definedummyword\cyrschwa
+  \definedummyword\CYRNJE
+  \definedummyword\cyrnje
+  \definedummyword\CYRYO
+  \definedummyword\cyryo
+  \definedummyword\CYRII
+  \definedummyword\cyrii
+  \definedummyword\CYRJE
+  \definedummyword\cyrje
+  \definedummyword\CYRQ
+  \definedummyword\cyrq
+  \definedummyword\CYRW
+  \definedummyword\cyrw
+%
+  \definedummyword\CYREGRAVE
+  \definedummyword\cyregrave
+  \definedummyword\CYRGGRAVE
+  \definedummyword\cyrggrave
+  \definedummyword\CYRKGRAVE
+  \definedummyword\cyrkgrave
+  \definedummyword\CYRIGRAVE
+  \definedummyword\cyrigrave
+%
+  \definedummyword\CYRZHBREVE
+  \definedummyword\cyrzhbreve
+  \definedummyword\CYRABREVE
+  \definedummyword\cyrabreve
+  \definedummyword\CYREBREVE
+  \definedummyword\cyrebreve
+%
+  \definedummyword\CYRADIAERESIS
+  \definedummyword\cyradiaeresis
+  \definedummyword\CYRSCHWADIAERESIS
+  \definedummyword\cyrschwadiaeresis
+  \definedummyword\CYRZHDIAERESIS
+  \definedummyword\cyrzhdiaeresis
+  \definedummyword\CYRZDIAERESIS
+  \definedummyword\cyrzdiaeresis
+  \definedummyword\CYRIDIAERESIS
+  \definedummyword\cyridiaeresis
+  \definedummyword\CYRODIAERESIS
+  \definedummyword\cyrodiaeresis
+  \definedummyword\CYREREVDIAERESIS
+  \definedummyword\cyrerevdiaeresis
+  \definedummyword\CYRUDIAERESIS
+  \definedummyword\cyrudiaeresis
+  \definedummyword\CYRCHDIAERESIS
+  \definedummyword\cyrchdiaeresis
+  \definedummyword\CYRERYDIAERESIS
+  \definedummyword\cyrerydiaeresis
+%
+  \definedummyword\CYRIMACRON
+  \definedummyword\cyrimacron
+  \definedummyword\CYRUMACRON
+  \definedummyword\cyrumacron
+%
+  \definedummyword\CYRUDOUBLEACUTE
+  \definedummyword\cyrudoubleacute
+}
+
+\toks0 = \expandafter{\commondummies\cyrdummies}
+\xdef\commondummies{\the\toks0}
+
+
+% Add all Cyrillic character names to \indexnofonts.
+%
+% TODO: Fix the index entries.  Right now, entries \CYRAAA and \cyrbbb get
+%       simply mapped to ZZZZAAA and zzzzbbb, respectively.
+
+\gdef\cyrindexnofonts{%
+  \def\textnumero{ZZZZNo}%
+  \def\CYRpalochka{ZZZZpalochka}%
+%
+  \def\CYRA{ZZZZA}%
+  \def\cyra{zzzza}%
+  \def\CYRB{ZZZZB}%
+  \def\cyrb{zzzzb}%
+  \def\CYRV{ZZZZV}%
+  \def\cyrv{zzzzv}%
+  \def\CYRG{ZZZZG}%
+  \def\cyrg{zzzzg}%
+  \def\CYRD{ZZZZD}%
+  \def\cyrd{zzzzd}%
+  \def\CYRE{ZZZZE}%
+  \def\cyre{zzzze}%
+  \def\CYRZH{ZZZZZH}%
+  \def\cyrzh{zzzzzh}%
+  \def\CYRZ{ZZZZZ}%
+  \def\cyrz{zzzzz}%
+  \def\CYRI{ZZZZI}%
+  \def\cyri{zzzzi}%
+  \def\CYRISHRT{ZZZZI}%
+  \def\cyrishrt{zzzzi}%
+  \def\CYRK{ZZZZK}%
+  \def\cyrk{zzzzk}%
+  \def\CYRL{ZZZZL}%
+  \def\cyrl{zzzzl}%
+  \def\CYRM{ZZZZM}%
+  \def\cyrm{zzzzm}%
+  \def\CYRN{ZZZZN}%
+  \def\cyrn{zzzzn}%
+  \def\CYRO{ZZZZO}%
+  \def\cyro{zzzzo}%
+  \def\CYRP{ZZZZP}%
+  \def\cyrp{zzzzp}%
+  \def\CYRR{ZZZZR}%
+  \def\cyrr{zzzzr}%
+  \def\CYRS{ZZZZS}%
+  \def\cyrs{zzzzs}%
+  \def\CYRT{ZZZZT}%
+  \def\cyrt{zzzzt}%
+  \def\CYRU{ZZZZU}%
+  \def\cyru{zzzzu}%
+  \def\CYRF{ZZZZF}%
+  \def\cyrf{zzzzf}%
+  \def\CYRH{ZZZZH}%
+  \def\cyrh{zzzzh}%
+  \def\CYRC{ZZZZC}%
+  \def\cyrc{zzzzc}%
+  \def\CYRCH{ZZZZCH}%
+  \def\cyrch{zzzzch}%
+  \def\CYRSH{ZZZZSH}%
+  \def\cyrsh{zzzzsh}%
+  \def\CYRSHCH{ZZZZSHCH}%
+  \def\cyrshch{zzzzshch}%
+  \def\CYRHRDSN{ZZZZHRDSN}%
+  \def\cyrhrdsn{zzzzhrdsn}%
+  \def\CYRERY{ZZZZERY}%
+  \def\cyrery{zzzzery}%
+  \def\CYRSFTSN{ZZZZSFTSN}%
+  \def\cyrsftsn{zzzzsftsn}%
+  \def\CYREREV{ZZZZEREV}%
+  \def\cyrerev{zzzzerev}%
+  \def\CYRYU{ZZZZYU}%
+  \def\cyryu{zzzzyu}%
+  \def\CYRYA{ZZZZYA}%
+  \def\cyrya{zzzzya}%
+  \def\CYRGUP{ZZZZGUP}%
+  \def\cyrgup{zzzzgup}%
+  \def\CYRGHCRS{ZZZZGHCRS}%
+  \def\cyrghcrs{zzzzghcrs}%
+  \def\CYRDJE{ZZZZDJE}%
+  \def\cyrdje{zzzzdje}%
+  \def\CYRTSHE{ZZZZTSHE}%
+  \def\cyrtshe{zzzztshe}%
+  \def\CYRSHHA{ZZZZSHHA}%
+  \def\cyrshha{zzzzshha}%
+  \def\CYRZHDSC{ZZZZZHDSC}%
+  \def\cyrzhdsc{zzzzzhdsc}%
+  \def\CYRZDSC{ZZZZZDSC}%
+  \def\cyrzdsc{zzzzzdsc}%
+  \def\CYRLJE{ZZZZLJE}%
+  \def\cyrlje{zzzzlje}%
+  \def\CYRYI{ZZZZYI}%
+  \def\cyryi{zzzzyi}%
+  \def\CYRKDSC{ZZZZKDSC}%
+  \def\cyrkdsc{zzzzkdsc}%
+  \def\CYRKBEAK{ZZZZKBEAK}%
+  \def\cyrkbeak{zzzzkbeak}%
+  \def\CYRKVCRS{ZZZZKVCRS}%
+  \def\cyrkvcrs{zzzzkvcrs}%
+  \def\CYRAE{ZZZZAE}%
+  \def\cyrae{zzzzae}%
+  \def\CYRNDSC{ZZZZNDSC}%
+  \def\cyrndsc{zzzzndsc}%
+  \def\CYRNG{ZZZZNG}%
+  \def\cyrng{zzzzng}%
+  \def\CYRDZE{ZZZZDZE}%
+  \def\cyrdze{zzzzdze}%
+  \def\CYROTLD{ZZZZOTLD}%
+  \def\cyrotld{zzzzotld}%
+  \def\CYRSDSC{ZZZZSDSC}%
+  \def\cyrsdsc{zzzzsdsc}%
+  \def\CYRUSHRT{ZZZZUSHRT}%
+  \def\cyrushrt{zzzzushrt}%
+  \def\CYRY{ZZZZY}%
+  \def\cyry{zzzzy}%
+  \def\CYRYHCRS{ZZZZYHCRS}%
+  \def\cyryhcrs{zzzzyhcrs}%
+  \def\CYRHDSC{ZZZZHDSC}%
+  \def\cyrhdsc{zzzzhdsc}%
+  \def\CYRDZHE{ZZZZDZHE}%
+  \def\cyrdzhe{zzzzdzhe}%
+  \def\CYRCHVCRS{ZZZZCHVCRS}%
+  \def\cyrchvcrs{zzzzchvcrs}%
+  \def\CYRCHRDSC{ZZZZCHRDSC}%
+  \def\cyrchrdsc{zzzzchrdsc}%
+  \def\CYRIE{ZZZZIE}%
+  \def\cyrie{zzzzie}%
+  \def\CYRSCHWA{ZZZZSCHWA}%
+  \def\cyrschwa{zzzzschwa}%
+  \def\CYRNJE{ZZZZNJE}%
+  \def\cyrnje{zzzznje}%
+  \def\CYRYO{ZZZZYO}%
+  \def\cyryo{zzzzyo}%
+  \def\CYRII{ZZZZII}%
+  \def\cyrii{zzzzii}%
+  \def\CYRJE{ZZZZJE}%
+  \def\cyrje{zzzzje}%
+  \def\CYRQ{ZZZZQ}%
+  \def\cyrq{zzzzq}%
+  \def\CYRW{ZZZZW}%
+  \def\cyrw{zzzzw}%
+%
+  \def\CYREGRAVE{ZZZZE}%
+  \def\cyregrave{zzzze}%
+  \def\CYRGGRAVE{ZZZZG}%
+  \def\cyrggrave{zzzzg}%
+  \def\CYRKGRAVE{ZZZZK}%
+  \def\cyrkgrave{zzzzk}%
+  \def\CYRIGRAVE{ZZZZI}%
+  \def\cyrigrave{zzzzi}%
+%
+  \def\CYRZHBREVE{ZZZZZH}%
+  \def\cyrzhbreve{zzzzzh}%
+  \def\CYRABREVE{ZZZZA}%
+  \def\cyrabreve{zzzza}%
+  \def\CYREBREVE{ZZZZE}%
+  \def\cyrebreve{zzzze}%
+%
+  \def\CYRADIAERESIS{ZZZZA}%
+  \def\cyradiaeresis{zzzza}%
+  \def\CYRSCHWADIAERESIS{ZZZZSCHWA}%
+  \def\cyrschwadiaeresis{zzzzschwa}%
+  \def\CYRZHDIAERESIS{ZZZZZH}%
+  \def\cyrzhdiaeresis{zzzzzh}%
+  \def\CYRZDIAERESIS{ZZZZZ}%
+  \def\cyrzdiaeresis{zzzzz}%
+  \def\CYRIDIAERESIS{ZZZZI}%
+  \def\cyridiaeresis{zzzzi}%
+  \def\CYRODIAERESIS{ZZZZO}%
+  \def\cyrodiaeresis{zzzzo}%
+  \def\CYREREVDIAERESIS{ZZZZEREV}%
+  \def\cyrerevdiaeresis{zzzzerev}%
+  \def\CYRUDIAERESIS{ZZZZU}%
+  \def\cyrudiaeresis{zzzzu}%
+  \def\CYRCHDIAERESIS{ZZZZCH}%
+  \def\cyrchdiaeresis{zzzzch}%
+  \def\CYRERYDIAERESIS{ZZZZERY}%
+  \def\cyrerydiaeresis{zzzzery}%
+%
+  \def\CYRIMACRON{ZZZZI}%
+  \def\cyrimacron{zzzzi}%
+  \def\CYRUMACRON{ZZZZU}%
+  \def\cyrumacron{zzzzu}%
+%
+  \def\CYRUDOUBLEACUTE{ZZZZU}%
+  \def\cyrudoubleacute{zzzzu}%
+}
+
+\toks0 = \expandafter{\indexnofonts\cyrindexnofonts}
+\xdef\indexnofonts{\the\toks0}
+
+@end tex
+
+@c end of cyrillic.itexi
index c31fd2fa6a5e7d92048cba234550226ef54c6070..427949d7518ea861bad5c6d1fe011e4ca26b495c 100644 (file)
@@ -1,6 +1,5 @@
 ISOLANG = de
 depth = ../..
-SUBDIRS = web learning notation texidocs essay usage extending included
 STEPMAKE_TEMPLATES = documentation texinfo
 LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
 
index e5bb7f6b7bb0cc8a3f5cccd0290bf30451dd2438..adf0ff03e6020e7cf74b08747e9b9faa532066b3 100644 (file)
@@ -10,7 +10,7 @@
 @settitle Aufsatz über den automatischen Musiksatz
 @documentencoding UTF-8
 @documentlanguage de
-
+@afourpaper
 
 @c Translators: Till Paala
 
diff --git a/Documentation/de/essay/GNUmakefile b/Documentation/de/essay/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 502906318fc213ebc911cb29a7f17b3d7a0d9fad..0affa3b9e5edcb7774f0a686f8e71375fb76bfdb 100644 (file)
@@ -9,7 +9,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Till Paala
 
@@ -334,9 +334,9 @@ music = {
   \layout {
     \context {
       \Staff
-      \override NoteSpacing #'stem-spacing-correction = #0.0
-      \override NoteSpacing #'same-direction-correction = #0.0
-      \override StaffSpacing #'stem-spacing-correction = #0.0
+      \override NoteSpacing.stem-spacing-correction = #0.0
+      \override NoteSpacing.same-direction-correction = #0.0
+      \override StaffSpacing.stem-spacing-correction = #0.0
     }
   }
 }
@@ -362,7 +362,7 @@ music = {
   \layout {
     \context {
       \Staff
-      \override NoteSpacing #'stem-spacing-correction = #0.6
+      \override NoteSpacing.stem-spacing-correction = #0.6
     }
   }
 }
@@ -491,8 +491,8 @@ global = {
   <<
     \new Staff \with {
       fontSize = #-4
-      \override StaffSymbol #'staff-space = #(magstep -4)
-      \override StaffSymbol #'thickness = #(magstep -3)
+      \override StaffSymbol.staff-space = #(magstep -4)
+      \override StaffSymbol.thickness = #(magstep -3)
     }
     \relative c' {
       \global
@@ -514,7 +514,7 @@ global = {
         \clef "bass"
         <<
         {
-        \once \override DynamicText #'X-offset = #-3
+        \once \override DynamicText.X-offset = #-3
         <ees g c>2.~->^\f
         <ees g c>4.~ <ees g c>8
       } \\ {
@@ -603,9 +603,9 @@ den folgenden Bogen ausgewählt werden?
 @lilypond
 \relative c {
   \clef bass
-  \once \override Slur #'positions = #'(1.5 . 1)
+  \once \override Slur.positions = #'(1.5 . 1)
   e8[( f] g[ a b d,)] r4
-  \once \override Slur #'positions = #'(2 . 3)
+  \once \override Slur.positions = #'(2 . 3)
   e8[( f] g[ a b d,)] r4
   e8[( f] g[ a b d,)] r4
 }
@@ -646,7 +646,7 @@ Notenköpfe angeschnitten wird:
 @lilypond
 \relative c {
   \clef bass
-  \once \override Slur #'positions = #'(1.5 . 1)
+  \once \override Slur.positions = #'(1.5 . 1)
   e8[(_"15.39" f] g[ a b d,)] r4
 }
 @end lilypond
@@ -660,7 +660,7 @@ Insgesamt also 13.08 Punkte:
 @lilypond
 \relative c {
   \clef bass
-  \once \override Slur #'positions = #'(2 . 3)
+  \once \override Slur.positions = #'(2 . 3)
   e8[(_"13.08" f] g[ a b d,)] r4
 }
 @end lilypond
@@ -885,7 +885,7 @@ partIV = \relative c {
     }
     \context {
       \PianoStaff
-      \override StaffGrouper #'staff-staff-spacing #'padding = #1
+      \override StaffGrouper.staff-staff-spacing.padding = #1
     }
   }
 }
@@ -908,7 +908,7 @@ nicht an, sodass die Noten sehr schwer lesbar werden, wenn
 die untere und obere Stimme zeitweise ausgetauscht werden:
 
 @lilypond
-collide = \once \override NoteColumn #'force-hshift = #0
+collide = \once \override NoteColumn.force-hshift = #0
 
 \score {
   <<
@@ -1154,20 +1154,20 @@ Beispiel heranzieht:
     \new Voice = "I" \relative c''' {
       \time 3/4
       \voiceOne
-      \times 6/7 { g8 g g g g g g }
+      \tuplet 7/6 { g8 g g g g g g }
       \oneVoice
       r4 <b,, fis' g bes> r4\fermata
     }
     \new Voice = "II" \relative c' {
       \voiceTwo
       c4
-      \times 4/5 {
+      \tuplet 5/4 {
         <c ees>8 f g
         \change Staff = "LH" \oneVoice
         \stemUp g,( c}
       r4
-      \override Stem #'cross-staff = ##t
-      \override Stem #'length = #12
+      \override Stem.cross-staff = ##t
+      \override Stem.length = #12
       <fis, b>) r\fermata
     }
   >>
@@ -1457,14 +1457,14 @@ ausgerichtet, beim zweiten nach oben (rechts).
 \score {
   \relative c' {
     \stemDown <e g b>4_>-\arpeggio
-    \override Arpeggio #'direction = #RIGHT
+    \override Arpeggio.direction = #RIGHT
     \stemUp <e g b>4^>-\arpeggio
   }
   \layout {
     \context {
       \Score
-      \override SpacingSpanner #'spacing-increment = #3
-      \override TimeSignature #'transparent = ##t
+      \override SpacingSpanner.spacing-increment = #3
+      \hide TimeSignature
     }
   }
 }
@@ -1490,12 +1490,12 @@ fragment = {
 <<
    \new Staff \fragment
    \new Staff \with {
-      \override Beam #'beam-thickness = #0.3
-      \override Stem #'thickness = #0.5
-      \override Bar #'thickness = #3.6
-      \override Tie #'thickness = #2.2
-      \override StaffSymbol #'thickness = #3.0
-      \override Tie #'extra-offset = #'(0 .  0.3)
+      \override Beam.beam-thickness = #0.3
+      \override Stem.thickness = #0.5
+      \override Bar.thickness = #3.6
+      \override Tie.thickness = #2.2
+      \override StaffSymbol.thickness = #3.0
+      \override Tie.extra-offset = #'(0 .  0.3)
       }
       \fragment
 >>
@@ -1529,12 +1529,12 @@ die Notenköpfe gezeichnet werden, während des Ausschnitts verändert.
   \set autoBeaming = ##f
   \time 2/4
   <d f g>4
-  \once \override NoteHead #'stencil = #note-head::brew-ez-stencil
-  \once \override NoteHead #'font-size = #-7
-  \once \override NoteHead #'font-family = #'sans
-  \once \override NoteHead #'font-series = #'bold
+  \once \override NoteHead.stencil = #note-head::brew-ez-stencil
+  \once \override NoteHead.font-size = #-7
+  \once \override NoteHead.font-family = #'sans
+  \once \override NoteHead.font-series = #'bold
   <d f g>4
-  \once \override NoteHead #'style = #'cross
+  \once \override NoteHead.style = #'cross
   <d f g>4
   \applyOutput #'Voice #mc-squared
   <d f g>4
@@ -1598,7 +1598,7 @@ nächste Beispiel zeigt einige etwas exotischere Konstruktionen:
       \time 4/8
       \key c \minor
       << {
-        \revert Stem #'direction
+        \revert Stem.direction
         \change Staff = down
         \set subdivideBeams = ##t
         g16.[
@@ -1615,7 +1615,7 @@ nächste Beispiel zeigt einige etwas exotischere Konstruktionen:
         \set followVoice = ##t
         c'''32([ b''16 a''16 gis''16 g''32)]
       } \\ {
-        s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d'']
+        s4 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
       } \\ {
         s4 \autoBeamOff d''8.. f''32
       } \\ {
@@ -1627,16 +1627,16 @@ nächste Beispiel zeigt einige etwas exotischere Konstruktionen:
       \clef bass
       \key c \minor
       \set subdivideBeams = ##f
-      \override Stem  #'french-beaming = ##t
-      \override Beam  #'beam-thickness = #0.3
-      \override Stem  #'thickness = #4.0
+      \override Stem.french-beaming = ##t
+      \override Beam.beam-thickness = #0.3
+      \override Stem.thickness = #4.0
       g'16[ b16 fis16 g16]
       << \makeClusters {
         as16 <as b>
         <g b>
         <g cis>
       } \\ {
-        \override Staff.Arpeggio  #'arpeggio-direction =#down
+        \override Staff.Arpeggio.arpeggio-direction =#down
         <cis, e, gis, b, cis>4\arpeggio
       }
     >> }
@@ -1820,7 +1820,7 @@ partIV = \relative c {
     }
     \context {
       \PianoStaff
-      \override StaffGrouper #'staff-staff-spacing #'padding = #1
+      \override StaffGrouper.staff-staff-spacing.padding = #1
     }
   }
 }
diff --git a/Documentation/de/extending/GNUmakefile b/Documentation/de/extending/GNUmakefile
deleted file mode 100644 (file)
index 000480f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-depth = ../../..
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 35ad908c5d374d82d1c2b8e143700b790d603207..4b1b43a00646d3cebdcfdb3248d87cd0fcaaadc1 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @c Translators: Till Paala
 
@@ -406,7 +406,7 @@ manualBeam =
      (parser location beg-end)
      (pair?)
    #@{
-     \once \override Beam #'positions = #beg-end
+     \once \override Beam.positions = #beg-end
    #@})
 
 \relative c' @{
@@ -425,7 +425,7 @@ manualBeam =
      (parser location beg end)
      (number? number?)
    #{
-     \once \override Beam #'positions = #(cons beg end)
+     \once \override Beam.positions = #(cons beg end)
    #})
 
 \relative c' {
@@ -447,14 +447,14 @@ AltOn =
      (parser location mag)
      (number?)
    #{
-     \override Stem #'length = #(* 7.0 mag)
-     \override NoteHead #'font-size =
+     \override Stem.length = #(* 7.0 mag)
+     \override NoteHead.font-size =
        #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
    #})
 
 AltOff = {
-  \revert Stem #'length
-  \revert NoteHead #'font-size
+  \revert Stem.length
+  \revert NoteHead.font-size
 }
 
 \relative c' {
@@ -473,12 +473,12 @@ withAlt =
      (parser location mag music)
      (number? ly:music?)
    #{
-     \override Stem #'length = #(* 7.0 mag)
-     \override NoteHead #'font-size =
+     \override Stem.length = #(* 7.0 mag)
+     \override NoteHead.font-size =
        #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
      #music
-     \revert Stem #'length
-     \revert NoteHead #'font-size
+     \revert Stem.length
+     \revert NoteHead.font-size
    #})
 
 \relative c' {
@@ -508,7 +508,7 @@ displayBarNum =
      (parser location)
      ()
    (if (eq? #t (ly:get-option 'display-bar-numbers))
-       #@{ \once \override Score.BarNumber #'break-visibility = ##f #@}
+       #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
        #@{#@}))
 @end example
 
@@ -1201,13 +1201,13 @@ Eigenschaften (wie Dicke (@code{thickness}), Richtung (@code{direction})
 usw.) können mit @code{\override} auf feste Werte gesetzt werden, etwa:
 
 @example
-\override Stem #'thickness = #2.0
+\override Stem.thickness = #2.0
 @end example
 
 Eigenschaften können auch auf eine Scheme-Prozedur gesetzt werden:
 
 @lilypond[fragment,verbatim,quote,relative=2]
-\override Stem #'thickness = #(lambda (grob)
+\override Stem.thickness = #(lambda (grob)
     (if (= UP (ly:grob-property grob 'direction))
         2.0
         7.0))
@@ -1286,7 +1286,7 @@ mein-callback = #(lambda (grob)
 TODO: das Beispiel für diesen Abschnitt ist nicht gut gewähtl:
 
 @example
-F = -\tweak #'font-size #-3 -\flageolet
+F = -\tweak font-size #-3 -\flageolet
 @end example
 (beachte @samp{-}, was ein Nachereignis anzeigt) funktioniert
 für den geschilderten Zweck sehr gut.  Aber bis der Abschnitt
@@ -1298,7 +1298,7 @@ syntaktische Inflexibilität.  Folgender Code beispielsweise
 ergibt einen Syntaxfehler:
 
 @example
-F = \tweak #'font-size #-3 -\flageolet
+F = \tweak font-size #-3 -\flageolet
 
 \relative c'' @{
   c4^\F c4_\F
@@ -1397,7 +1397,7 @@ neu ausgerichtet wird.
      (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
 
 \relative c'' {
-  \override Tie #'after-line-breaking =
+  \override Tie.after-line-breaking =
   #my-callback
   c1 ~ \break c2 ~ c
 }
@@ -1420,7 +1420,7 @@ und @code{PaperColumn}.  Sie können mit der
 
 @example
 \overrideProperty
-#"Score.NonMusicalPaperColumn"  % Grob-Bezeichnung
+Score.NonMusicalPaperColumn  % Grob-Bezeichnung
 #'line-break-system-details     % Eigenschaftsbezeichnung
 #'((next-padding . 20))         % Wert
 @end example
index 06e84edb9f69f48bfacb7ff2d3201fb354c67a5b..954f1dce5cc164cd26e7c3bc90ef11cf553e572b 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @node Scheme-Übung
 @chapter Scheme-Übung
@@ -660,7 +660,8 @@ Scheme-Ausdruck zu benutzen.
 Die Eingabe von LilyPond ist in Zeichen und Ausdrücke gegliedert, so etwa
 wie die menschliche Sprache sich in Wörter und Sätze gliedert.  LilyPond
 hat einen Lexer, der Zeichen erkennt (Zahlen, Zeichenketten, Scheme-Elemente,
-Tonhöhen usw.) und einen Parser, der die Syntax versteht, @ruser{LilyPond grammar}.
+Tonhöhen usw.) und einen Parser, der die Syntax versteht,
+@rcontribnamed{LilyPond grammar, LilyPond-Grammatik}.
 Wenn dann eine bestimmte Syntaxregel als zuständig erkannt wurde, werden die
 damit verknüpften Aktionen ausgeführt.
 
@@ -936,7 +937,7 @@ der Alist einen Wert mit Schlüssel und dem Wert zuweist.  Die
 LilyPond-Syntax hierfür ist:
 
 @example
-\override Stem #'thickness = #2.6
+\override Stem.thickness = #2.6
 @end example
 
 Diese Anweisung verändert die Erscheinung der Notenhälse. Der Alist-Eintrag
@@ -968,7 +969,7 @@ Abstands ist die X-Koordinate und der @code{cdr}-Wert die
 Y-Koordinate.
 
 @example
-\override TextScript #'extra-offset = #'(1 . 2)
+\override TextScript.extra-offset = #'(1 . 2)
 @end example
 
 Hierdurch wird das Paar @code{(1 . 2)} mit der Eigenschaft @code{extra-offset}
@@ -1134,7 +1135,7 @@ zeigt:
                   'text
                   "f"))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 0 0))))
 @end example
@@ -1169,7 +1170,7 @@ einfacher zu lesen:
                               (make-music 'AbsoluteDynamicEvent
                                 'text
                                 "f"))
-              'duration (ly:make-duration 2 0 1 1)
+              'duration (ly:make-duration 2 0 1/1)
               'pitch    (ly:make-pitch 0 0 0))))
 @end example
 
@@ -1205,7 +1206,7 @@ someNote = c'
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 0 0))
 @end example
@@ -1223,7 +1224,7 @@ someNote = <c'>
   (list (make-music
           'NoteEvent
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 0 0))))
 @end example
@@ -1241,7 +1242,7 @@ eines musikalischen Ausdrucks anzuzeigen.
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 0 0))
 @end example
@@ -1297,7 +1298,7 @@ das Endergebnis darstellt:
                   'span-direction
                   -1))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 5 0))
         (make-music
@@ -1308,7 +1309,7 @@ das Endergebnis darstellt:
                   'span-direction
                   1))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 5 0))))
 @end example
@@ -1325,7 +1326,7 @@ Jetzt folgt eine Betrachtung der Eingabe:
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 5 0))))
 @end example
@@ -1400,7 +1401,7 @@ Ausgabe examiniert:
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch -1 0 0))))
 =====
@@ -1415,7 +1416,7 @@ Ausgabe examiniert:
           'articulation-type
           "accent"))
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch -1 0 0))
 \displayMusic c4
@@ -1426,7 +1427,7 @@ Ausgabe examiniert:
   (list (make-music
           'NoteEvent
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch -1 0 0))))
 @end example
@@ -1573,7 +1574,7 @@ folgendermaßen:
 
 Wir haben gesehen wie LilyPond-Eingabe massiv beeinflusst
 werden kann, indem Befehle wie etwa
-@code{\override TextScript #'extra-offset = ( 1 . -1)}
+@code{\override TextScript.extra-offset = ( 1 . -1)}
 benutzt werden.  Aber es wurde gezeigt, dass Scheme noch
 mächtiger ist.  Eine bessere Erklärung findet sich in der@ref{Scheme-Übung} und in
 @ruser{Schnittstellen für Programmierer}.
@@ -1589,7 +1590,7 @@ TODO Find a simple example
 @lilypond[quote,verbatim,ragged-right]
 padText = #(define-music-function (parser location padding) (number?)
 #{
-  \once \override TextScript #'padding = #padding
+  \once \override TextScript.padding = #padding
 #})
 
 \relative c''' {
@@ -1611,7 +1612,7 @@ Es kann auch benutzt werden, um Befehle zu erstellen:
 tempoPadded = #(define-music-function (parser location padding tempotext)
   (number? markup?)
 #{
-  \once \override Score.MetronomeMark #'padding = #padding
+  \once \override Score.MetronomeMark.padding = #padding
   \tempo \markup { \bold #tempotext }
 #})
 
diff --git a/Documentation/de/included/GNUmakefile b/Documentation/de/included/GNUmakefile
deleted file mode 100644 (file)
index dfb8d67..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
index 34e33733d5358340a74d29e5b54401558aacc2d2..c3b51cc8afe71276667cd322e11f75f7725b2d70 100644 (file)
@@ -100,18 +100,18 @@ eine Datei zu kompilieren.}
 Wenn sie auf das LilyPond-Symbol auf dem Desktop doppelklicken,
 öffnet sich ein einfacher Texteditor mit einer Beispieldatei.
 
-@sourceimage{Learning_Win7_Welcome_File_Whole,,,}
+@sourceimage{LilyPad,,,}
 
 Aus dem Menü über der Beispieldatei wählen Sie @w{@code{File > Save as}}.
 Benutzen Sie nicht @w{@code{File > Save}} für die Beispieldatei,
 weil die Datei nicht funktioniert, bis Sie sie mit einem eigenen
 Namen gespeichert haben.
 
-@sourceimage{Learning_Win7_Save_Menu,,,}
+@sourceimage{FileSave,,,}
 
 Wählen Sie einen Namen für Ihre Datei, etwa @file{test.ly}.
 
-@sourceimage{Learning_Win7_Save_File_With_Name,,,}
+@sourceimage{SaveAs,,,}
 
 
 @subsubheading Schritt 2a: Kompilieren (mit drag-and-drop)
@@ -121,12 +121,12 @@ entweder:
 
 Die Datei auf das LilyPond-Symbol ziehen.
 
-@sourceimage{Learning_Win7_Open_Dragndrop,,,}
+@sourceimage{DragDrop,,,}
 
 Oder Sie klicken mit der rechten Maustaste auf die Datei und wählen
 Sie aus dem Menü @w{@code{Open with > LilyPond}}.
 
-@sourceimage{Learning_Win7_Open_Context_Menu,,,}
+@sourceimage{GenPDF,,,}
 
 
 @subsubheading Schritt 2b: Kompilieren (mit Doppelklick)
@@ -140,31 +140,25 @@ Während der Kompilation von @file{test.ly} öffnet sich ein
 Kommandofenster sehr schnell und schließt sich wieder.  Drei
 zusätzliche Dateien werden in diesem Schritt erstellt.
 
-@sourceimage{Learning_Win7_All_Files_Created,,,}
-
 Das PDF enthält den Notensatz aus der Datei @file{test.ly}.
 
-@sourceimage{Learning_Win7_Pdf_Output,,,}
+@sourceimage{PDFRead,,,}
 
 
 @subsubheading Andere Befehle
 
 Um eine neue Datei zu erstellen, wählen Sie @w{@code{File > New}}
-aus irgendeiner schon erstellten Datei.
-
-@sourceimage{Learning_Win7_New_Menu,,,}
-
-@noindent
-oder @w{@code{File > Open}}, um eine Datei zu öffnen und zu
-bearbeiten, die Sie schon vorher gespeichert hatten.
+aus irgendeiner schon erstellten Datei oder @w{@code{File > Open}},
+um eine Datei zu öffnen und zu bearbeiten, die Sie schon vorher
+gespeichert hatten.
 
-@sourceimage{Learning_Win7_Open_Menu,,,}
+@sourceimage{EditFile,,,}
 
 Sie müssen jede neue Änderung erst speichern, bevor Sie die Datei
 kompilieren.  Wenn kein PDF erstellt wird, öffnen Sie die Log-Datei
 und schauen Sie nach Fehlern.
 
-@sourceimage{Learning_Win7_Log_File,,,}
+@sourceimage{BadLog,,,}
 
 Die Log-Datei wird jedes Mal überschrieben, wenn Sie Ihre
 LilyPond-Datei kompilieren.
@@ -201,7 +195,7 @@ geben Sie folgenden Text ein:
 @example
 \\version "@w{@versionStable{}}"
 @{
-  c' e' g' e'
+@ @ c' e' g' e'
 @}
 @end example
 
diff --git a/Documentation/de/learning/GNUmakefile b/Documentation/de/learning/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 2f9e10c1eae679b1d1fd4ea045482d6edfeb0c4c..e108d0b0c08902561a21f56c943d41a49263b719 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @ignore
 Tutorial guidelines:
@@ -324,7 +324,7 @@ Glossar:
 (@q{-}) und einem entsprechenden Zeichen eingegeben werden:
 
 @lilypond[verbatim,quote,relative=2]
-c4-^ c-+ c-- c-|
+c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
@@ -534,10 +534,10 @@ In einer Triole dauern die Noten 2/3 ihrer normalen Länge,
 also hat eine Triole 2/3 als Bruch:
 
 @lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
 @end lilypond
 
 @subheading Verzierungen
@@ -561,7 +561,7 @@ eingegeben, Vorhalte durch den Befehl @code{\appoggiatura}
 und Vorschläge mit @code{\acciaccatura}.
 
 @lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
 c2 \appoggiatura b16 c2 |
 c2 \acciaccatura b16 c2 |
 @end lilypond
@@ -1340,7 +1340,7 @@ werden, wenn Notengruppen sich oft wiederholen.
 
 @c KEEP LY
 @lilypond[verbatim,quote]
-trioleA = \times 2/3 { c,8 e g }
+trioleA = \tuplet 3/2 { c,8 e g }
 TaktA = { \trioleA \trioleA \trioleA \trioleA }
 
 \relative c'' {
index 1b72a415f41349a388aad955dd8812cadf9b78f0..77e3112483a18b7dadcabcd43184808172909c11 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.29"
 @c Translators: Till Paala, Reinhold Kainhofer
 
 @node Grundbegriffe
@@ -626,10 +626,10 @@ Phrasierungsbogen, der in einer Triole beginnt (Zeilen 3 und 4).
 
 @lilypond[quote,verbatim,ragged-right]
 {
-r16[ g \times 2/3 { r16 e'8] }
-g16( a \times 2/3 { b16 d) e' }
-g8[( a \times 2/3 { b8 d') e'~] } |
-\times 4/5 { e'32\( a b d' e' } a'4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g16( a \tuplet 3/2 { b16 d) e' }
+g8[( a \tuplet 3/2 { b8 d') e'~] } |
+\tuplet 5/4 { e'32\( a b d' e' } a'4.\)
 }
 @end lilypond
 
@@ -897,15 +897,15 @@ in späteren Abschnitten erklärt werden.
   \\  % Voice two
     {
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No voice three
   \\  % Voice four
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -947,15 +947,15 @@ verstehen können.
   \\  % Voice two
     { \voiceTwoStyle
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No Voice three (we want stems down)
   \\  % Voice four
     { \voiceThreeStyle
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -1770,8 +1770,7 @@ abzuleiten.
   @tab Erstellt Notenschlüssel.
 @item Completion_heads_engraver
   @tab Teilt Noten in kleiner Werte, wenn sie über die Taktlinie reichen.
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
   @tab Erstellt Dynamik-Klammern und Dynamik-Texte.
 @item Forbid_line_break_engraver
   @tab Verbietet Zeilenumbrüche, solange ein musikalisches Element aktiv ist.
@@ -1975,7 +1974,7 @@ während das dazu dient, sie in allen Systemen auszuschalten:
 >>
 @end lilypond
 
-Ein anderes Beispiel ist die Eigenschaft @code{clefOctavation}:
+Ein anderes Beispiel ist die Eigenschaft @code{clefTransposition}:
 wenn sie im @code{Score}-Kontext gesetzt wird, ändert sich sofort
 der Wert der Oktavierung in allen aktuellen Systemen und wird
 auf einen neuen Wert gesetzt, der sich auf alle Systeme auswirkt.
@@ -3136,8 +3135,7 @@ sind.
         @}
       >>  % end ManualOne Staff context
       \new Staff = "ManualTwo" \with @{
-        \override VerticalAxisGroup
-          #'staff-staff-spacing #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       @} <<
         \keyTime
         \clef "bass"
@@ -3202,8 +3200,7 @@ PedalOrganMusic = \relative c {
         }
       >>  % end ManualOne Staff context
       \new Staff = "ManualTwo" \with {
-        \override VerticalAxisGroup
-          #'staff-staff-spacing #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       } <<
         \keyTime
         \clef "bass"
@@ -3271,7 +3268,7 @@ werden:
 @c TODO Avoid padtext - not needed with skylining
 @lilypond[quote,verbatim,ragged-right]
 dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
 fthenp=_\markup {
     \dynamic f \italic \small { 2nd } \hspace #0.1 dynamic p
 }
@@ -3303,7 +3300,7 @@ sehr viel schwerer lesbar, besonders die letzte Zeile.
 violin = \relative c'' @{
   \repeat volta 2 @{
     c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
-    \once \override TextScript #'padding = #5.0
+    \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d
     c,4.\markup @{
       \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
@@ -3330,7 +3327,7 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = #padding
+     \once \override TextScript.padding = #padding
    #})
 
 \relative c''' {
index 338985f9e6af719c21dd0cb059f7ce4b71ef41d8..0c64ba246970f8c0315c480b0c3ffb215daa1cc2 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.20"
 
 @node Die Ausgabe verändern
 @chapter Die Ausgabe verändern
@@ -260,9 +260,9 @@ zu ändern:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a b c |
 @end lilypond
 
@@ -297,11 +297,11 @@ wieder auf den Standardwert für die letzten zwei Noten gesetzt.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
 b4 c |
 @end lilypond
 
@@ -326,11 +326,11 @@ geändert werden:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\once \override NoteHead #'color = #green
+\once \override NoteHead.color = #green
 g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
 b c |
 @end lilypond
 
@@ -376,7 +376,7 @@ werden.  Schauen wir zuerst, was wir mit
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
 <c e g>4
 <c e g>4
 @end lilypond
@@ -403,7 +403,7 @@ mittlere Note eines Akkordes auf diese Weise ändern:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
 @end lilypond
 
 Beachten Sie, dass die Syntax des @code{\tweak}-Befehls sich
@@ -427,8 +427,8 @@ Beispiel zu sehen ist.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4^"Black"
-  -\tweak #'color #red ^"Red"
-  -\tweak #'color #green _"Green"
+  -\tweak color #red ^"Red"
+  -\tweak color #green _"Green"
 @end lilypond
 
 @noindent
@@ -448,8 +448,8 @@ Layout-Objekte direkt benennt, vorausgesetzt dass LilyPond ihre Herkunft
 bis zu dem ursprünglichen Ereignis zurück verfolgen kann:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red   cis4
- \tweak Accidental #'color #green es
+<\tweak Accidental.color #red   cis4
+ \tweak Accidental.color #green es
                                   g>
 @end lilypond
 
@@ -487,12 +487,12 @@ gesetzt wird.
 @cindex direction-Eigenschaft, Beispiel
 
 @lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
-\times 4/3 {
-  \tweak #'color #red
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+\tweak direction #up
+\tuplet 3/4 {
+  \tweak color #red
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -510,15 +510,14 @@ beginnen, kann ihr Aussehen auf die übliche Art mit dem
 @c NOTE Tuplet brackets collide if notes are high on staff
 @c See issue 509
 @lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
-\once \override TupletNumber
-  #'text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 { c8[ c c] }
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
+\tuplet 3/2 {
   c8[ c]
   c8[ c]
-  \once \override TupletNumber #'transparent = ##t
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+  \once \override TupletNumber.transparent = ##t
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -678,7 +677,7 @@ einmal einen sehr großen Wert für die Dicke um zu sehen, ob der
 Befehl auch funktioniert.  Also:
 
 @example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
 @end example
 
 Vergessen Sie nicht das Rautenzeichen und Apostroph
@@ -700,7 +699,7 @@ Legatobogen und nahe bei ihm.} Also etwa so:
   \time 6/8
   {
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     r4 bes8 bes[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -775,7 +774,7 @@ muss also wie folgt positioniert werden:
     \key es \major
     r4 bes8
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes8[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -817,10 +816,10 @@ Note gestellt, an welcher der Bogen beginnt:
   {
     r4 bes8
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes[( g]) g |
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     g8[( es]) es d[( f]) as |
     as8 g
   }
@@ -845,11 +844,11 @@ dessen später den @code{\revert}-Befehl einsetzen, um die
   {
     r4 bes8
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     bes[( g]) g |
     g8[( es]) es
     % Revert thickness of all following slurs to default of 1.2
-    \revert Slur #'thickness
+    \revert Slur.thickness
     d8[( f]) as |
     as8 g
   }
@@ -956,7 +955,7 @@ Gut, der @code{\override}-Befehl, mit dem der Gesangstext
 kursiv gesetzt wird, lautet:
 
 @example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
 @end example
 
 @noindent
@@ -978,7 +977,7 @@ bezieht, etwa so:
     as8 g
   }
   \addlyrics {
-    \override LyricText #'font-shape = #'italic
+    \override LyricText.font-shape = #'italic
     The man who | feels love's sweet e -- | mo -- tion
   }
 }
@@ -1010,7 +1009,7 @@ ein Begriff interpretiert und von LilyPond nicht verstanden
 werden.  Der Befehl muss also lauten:
 
 @example
-\override Lyrics . LyricText #'font-shape = #'italic
+\override Lyrics.LyricText.font-shape = #'italic
 @end example
 
 @warning{Innerhalb von Gesangstext muss immer ein
@@ -1071,8 +1070,8 @@ wenn sie in einem @code{\override}-Befehl benutzt werden.
 @item Moment
   @tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion
   konstruiert
-  @tab @code{(ly:make-moment 1 4)},
-       @code{(ly:make-moment 3 8)}
+  @tab @code{(ly:make-moment 1/4)},
+       @code{(ly:make-moment 3/8)}
 @item Zahl
   @tab Eine beliebige positive oder negative Dezimalzahl
   @tab @code{3.5}, @w{@code{-2.45}}
@@ -1176,7 +1175,7 @@ auslassen:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override BarLine #'stencil = ##f
+  \override BarLine.stencil = ##f
   c4 b8 c d16 c d8
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1206,7 +1205,7 @@ den richtigen Kontext mit anzugeben:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'stencil = ##f
+  \override Staff.BarLine.stencil = ##f
   c4 b8 c d16 c d8
   g,8 a16 b8 c d4 e16
   e8
@@ -1228,7 +1227,7 @@ den Stencil auf ein Objekt mit der Größe Null setzt:
 @lilypond[quote,verbatim,relative=2]
 {
   c4 c
-  \once \override NoteHead #'stencil = #point-stencil
+  \once \override NoteHead.stencil = #point-stencil
   c4 c
 }
 @end lilypond
@@ -1259,7 +1258,7 @@ den Wert in einem @code{\override}-Befehl anzuführen.
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+  \override Staff.BarLine.break-visibility = #'#(#f #f #f)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1295,7 +1294,7 @@ machen, ist also:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'transparent = ##t
+  \override Staff.TimeSignature.transparent = ##t
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1317,7 +1316,7 @@ gesetzt werden:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'stencil = ##f
+  \override Staff.TimeSignature.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1361,7 +1360,7 @@ weiß zu setzen, können Sie schreiben:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #white
+  \override Staff.BarLine.color = #white
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1396,7 +1395,7 @@ in interne Werte konvertiert:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(x11-color 'white)
+  \override Staff.BarLine.color = #(x11-color 'white)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1426,7 +1425,7 @@ würde sein: @code{(rgb-color 1 1 1)}.
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+  \override Staff.BarLine.color = #(rgb-color 1 1 1)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1456,12 +1455,12 @@ verschiede Grauschattierungen erhalten:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.StaffSymbol   #'color = #(x11-color 'grey30)
-  \override Staff.TimeSignature #'color = #(x11-color 'grey60)
-  \override Staff.Clef          #'color = #(x11-color 'grey60)
-  \override Voice.NoteHead      #'color = #(x11-color 'grey85)
-  \override Voice.Stem          #'color = #(x11-color 'grey85)
-  \override Staff.BarLine       #'color = #(x11-color 'grey10)
+  \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+  \override Staff.TimeSignature.color = #(x11-color 'grey60)
+  \override Staff.Clef.color = #(x11-color 'grey60)
+  \override Voice.NoteHead.color = #(x11-color 'grey85)
+  \override Voice.Stem.color = #(x11-color 'grey85)
+  \override Staff.BarLine.color = #(x11-color 'grey10)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1536,8 +1535,8 @@ wir setzen den Stencil von beiden auf @code{#f}:
         alignAboveContext = #"main"
       }
       {
-        \override Staff.Clef #'stencil = ##f
-        \override Staff.TimeSignature #'stencil = ##f
+        \override Staff.Clef.stencil = ##f
+        \override Staff.TimeSignature.stencil = ##f
         { f8 f c }
       }
     >>
@@ -1604,9 +1603,9 @@ Das obige Beispiel könnte also auch so aussehen:
       \new Staff \with {
         alignAboveContext = #"main"
         % Don't print clefs in this staff
-        \override Clef #'stencil = ##f
+        \override Clef.stencil = ##f
         % Don't print time signatures in this staff
-        \override TimeSignature #'stencil = ##f
+        \override TimeSignature.stencil = ##f
       }
       { f8 f c }
     >>
@@ -1639,7 +1638,7 @@ Entweder wir ändern die Schriftgröße für jede Objektart
 mit einem eigenen Befehl, etwa:
 
 @example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
 @end example
 
 @noindent
@@ -1674,8 +1673,8 @@ Setzen wir das also in unserem Ossia-Beispiel ein:
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \override Clef.stencil = ##f
+        \override TimeSignature.stencil = ##f
         % Reduce all font sizes by ~24%
         fontSize = #-2
       }
@@ -1747,11 +1746,11 @@ sie benutzt:
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \override Clef.stencil = ##f
+        \override TimeSignature.stencil = ##f
         fontSize = #-2
         % Reduce stem length and line spacing to match
-        \override StaffSymbol #'staff-space = #(magstep -2)
+        \override StaffSymbol.staff-space = #(magstep -2)
       }
       { f8 f c }
     >>
@@ -1922,11 +1921,11 @@ der Standard eingestellt.
 
 @lilypond[quote,verbatim,relative=2]
 a4 g c a
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
 a4 g c a
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
 a4 g c a
-\revert Stem #'direction
+\revert Stem.direction
 a4 g c a
 @end lilypond
 
@@ -2018,9 +2017,9 @@ die Wirkung von @code{DOWN} (runter) und @code{UP}
 
 @lilypond[quote,verbatim,relative=2]
 c4-5 a-3 f-1 c'-5
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
 c4-5 a-3 f-1 c'-5
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
 c4-5 a-3 f-1 c'-5
 @end lilypond
 
@@ -2126,7 +2125,7 @@ werden.  Der Standardwert kann aus dem
 er ist @w{@code{-5}}, versuchen wir es also mit @w{@code{-7}}.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
 \set fingeringOrientations = #'(left)
 <f-2>4
 <c-1  e-2 g-3 b-5>4
@@ -2234,7 +2233,7 @@ Objekten zeigt.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Place dynamics above staff
 \dynamicUp
@@ -2290,12 +2289,12 @@ erstellt wird:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Place dynamics above staff
 \dynamicUp
 % Place following Ottava Bracket below Text Spanners
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
 % Start Ottava Bracket
 \ottava #1
 c'4 \startTextSpan
@@ -2337,10 +2336,10 @@ Hier ein Beispiel, das die beiden Möglichkeiten veranschaulicht:
 @lilypond[quote,verbatim,relative=2]
 c4( c^\markup { \tiny \sharp } d4.) c8
 c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
 c4^\markup { \tiny \sharp } d4.) c8
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
 c4( c^\markup { \tiny \sharp } d4.) c8
 @end lilypond
 
@@ -2360,7 +2359,7 @@ Tabelle oben festgestellt werden und dann die Priorität für
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 c2^"Text1"
 c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
 c2^"Text3"
 c2^"Text4" |
 @end lilypond
@@ -2424,12 +2423,12 @@ c,,2^"Text" c'' |
 R1 |
 
 % Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 c,,2^"Long Text   " c'' |
 R1 |
 
 % Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 \textLengthOn        % and turn on textLengthOn
 c,,2^"Long Text   "  % Spaces at end are honored
 c''2 |
@@ -2515,7 +2514,7 @@ Objektes zur Geltung kommt.  Mit diesem Befehl wird das für
 Dynamik-Zeichen erledigt:
 
 @example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
 @end example
 
 @noindent
@@ -2526,7 +2525,7 @@ Schauen wir uns an, wie es mit dem vorigen Beispiel funktioniert:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
 a4\f b\mf c\mp b\p
 @end lilypond
 
@@ -2547,7 +2546,7 @@ Rand eine halbe Einheit zu vergrößern:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
 % Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
 a4\f b\mf c\mp b\p
 @end lilypond
 
@@ -2863,7 +2862,7 @@ zu verkleinern), die über oder unter den Noten gesetzt werden.
 
 @lilypond[quote,fragment,relative=1,verbatim]
 c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
 b2\fermata
 @end lilypond
 
@@ -2873,11 +2872,11 @@ b2\fermata
 
 @lilypond[quote,fragment,relative=1,verbatim]
 % This will not work, see below
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
 \tempo 4 = 120
 c1 |
 % This works
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
 \tempo 4 = 80
 d1 |
 @end lilypond
@@ -2922,15 +2921,13 @@ sesquisharp = \markup { \sesquisharp }
  \relative c'' {
   c4
   % This prints a sesquisharp but the spacing is too small
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 c
   % This improves the spacing
-  \once \override Score.AccidentalPlacement #'right-padding = #0.6
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Score.AccidentalPlacement.right-padding = #0.6
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4
 }
 @end lilypond
@@ -2971,9 +2968,9 @@ aus dem Beispiel des vorigen Abschnitts auszurichten:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
 % Extend width by 1 unit
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
 % Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner #'staff-padding = #2
+\override DynamicLineSpanner.staff-padding = #2
 a4\f b\mf c\mp b\p
 @end lilypond
 
@@ -2992,7 +2989,7 @@ Referenzpunkt der abhängigen Note angeordnet wird:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
 \voiceOne
 < a\2 >
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
 < a\2 >
 @end lilypond
 
@@ -3035,7 +3032,7 @@ d.h. vier halbe Notenlinienabstände weiter nach unten:
 <<
   { c4 c c c }
   \\
-  \override MultiMeasureRest #'staff-position = #-8
+  \override MultiMeasureRest.staff-position = #-8
   { R1 }
 >>
 @end lilypond
@@ -3064,7 +3061,7 @@ links und 1,8 Notenlinienabstände nach unten verschoben:
 @lilypond[quote,fragment,relative=1,verbatim]
 \stemUp
 f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
 f4-5
 @end lilypond
 
@@ -3111,7 +3108,7 @@ verschwindet auch die etwas unschöne Form:
 
 @lilypond[quote,verbatim,fragment,ragged-right,relative=1]
 r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
+\once \override PhrasingSlur.positions = #'(-4 . -3)
 \acciaccatura e8\( d8 c~ c d c d\)
 @end lilypond
 
@@ -3150,7 +3147,7 @@ hochgeschoben werden, etwa auf 1:
     { c'1 ~ c'2. e'8 f' }
     \\
     {
-      \override Beam #'positions = #'(-1 . -1)
+      \override Beam.positions = #'(-1 . -1)
       e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g''
     }
   >>
@@ -3218,13 +3215,13 @@ Hier das Endergebnis:
     \\
     {
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
     \\
     \\
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -3257,7 +3254,7 @@ zu kompliziert zu machen.
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3270,7 +3267,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % Reposition the c2 to the right of the merged note
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % Move the c2 out of the main note column
         % so the merge will work
         \shiftOnn
@@ -3282,8 +3279,7 @@ rhMusic = \relative c'' {
         % Stem on the d2 must be down to permit merging
         \stemDown
         % Stem on the d2 should be invisible
-        \tweak Stem #'transparent ##t
-        \tweak Flag #'transparent ##t
+        \tweak Stem.transparent ##t
         d2
       }
       \new Voice {
@@ -3470,7 +3466,7 @@ also, direkt vor die erste übergebundene Note gestellt, verschiebt
 den Bindebogen (@code{tie}) 3,5 halbe Notenlinienabstände
 über die Mittellinie:
 
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
 
 Damit ist auch der zweite Takt vollständig:
 
@@ -3478,7 +3474,7 @@ Damit ist auch der zweite Takt vollständig:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3562,7 +3558,7 @@ um das Verhalten wieder auszuschalten. Das sieht so aus:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3636,7 +3632,7 @@ aus:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3706,7 +3702,7 @@ wir durchsichtig und das C verschieben wir mit der
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3720,7 +3716,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % Reposition the c2 to the right of the merged note
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % Move the c2 out of the main note column
         % so the merge will work
         \shiftOnn
@@ -3732,7 +3728,7 @@ rhMusic = \relative c'' {
         % Stem on the d2 must be down to permit merging
         \stemDown
         % Stem on the d2 should be invisible
-        \tweak Stem #'transparent ##t
+        \tweak Stem.transparent ##t
         d2
       }
       \new Voice {
@@ -3821,8 +3817,7 @@ den Stimmen stattfindet:
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
+    \tweak Stem.transparent ##t
     b8~ b\noBeam
   }
 \\
@@ -3838,9 +3833,8 @@ gesetzt wird:
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
-    \tweak Stem #'length #8
+    \tweak Stem.transparent ##t
+    \tweak Stem.length #8
     b8~ b\noBeam
   }
 \\
@@ -3883,7 +3877,7 @@ einem entfernten Objekt gezeigt:
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'transparent = ##t
+    \once \override Score.MetronomeMark.transparent = ##t
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata
@@ -3902,7 +3896,7 @@ einem entfernten Objekt gezeigt:
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'stencil = ##f
+    \once \override Score.MetronomeMark.stencil = ##f
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata
@@ -3953,11 +3947,11 @@ Alternative versuchen wir, einen Befehl mit
 @code{\override} und @code{\revert} zu konstruieren.
 
 @example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
 
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
 @end example
 
 Das wäre natürlich noch viel mühsamer, wenn viele Wörter eine
@@ -3977,12 +3971,12 @@ um noch weniger schreiben zu müssen:
 
 @lilypond[quote,verbatim]
 emphasize = {
-  \override Lyrics.LyricText #'font-shape = #'italic
-  \override Lyrics.LyricText #'font-series = #'bold
+  \override Lyrics.LyricText.font-shape = #'italic
+  \override Lyrics.LyricText.font-series = #'bold
 }
 normal = {
-  \revert Lyrics.LyricText #'font-shape
-  \revert Lyrics.LyricText #'font-series
+  \revert Lyrics.LyricText.font-shape
+  \revert Lyrics.LyricText.font-series
 }
 
 global = { \key c \major \time 4/4 \partial 4 }
@@ -4057,7 +4051,7 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-    #{ ^\markup \bold \box #string #})
+    #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -4092,7 +4086,7 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-       #@{ ^\markup \bold \box #string #@})
+       #@{ <>^\markup \bold \box #string #@})
 @end example
 
 Diese Datei wir mit dem @code{\include}-Befehl ziemlich weit oben
@@ -4130,7 +4124,7 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -4166,22 +4160,22 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
@@ -4199,22 +4193,22 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \layout{
   \context {
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context {
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   }
   \context {
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4249,23 +4243,23 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 #(set-global-staff-size 23)
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
@@ -4283,18 +4277,18 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 #(set-global-staff-size 23)
 
 \layout{
   \context { \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context { \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4423,8 +4417,8 @@ Befehl @code{/tieDotted} etwa wird folgendermaßen definiert:
 
 @example
 tieDotted = @{
-  \override Tie #'dash-period = #0.75
-  \override Tie #'dash-fraction = #0.1
+  \override Tie.dash-period = #0.75
+  \override Tie.dash-fraction = #0.1
 @}
 @end example
 
@@ -4529,7 +4523,7 @@ zu ihrer Position innerhalb der Tonleiter gesetzt.
 
 \relative c' {
   % Arrange to obtain color from color-notehead procedure
-  \override NoteHead #'color = #color-notehead
+  \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
 }
 @end lilypond
index 729c265302a2f5fb7c280314631a470489340255..966c0b6c6b26e949804003578495baa1e3ed0510 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
 @ignore
-    Translation of GIT committish: ebe492ca408fb0d9abf80b94c56197eef8dc2f09
+    Translation of GIT committish: 00cd4ff0b8dc4978344ba966bec06ddbc445f7e9
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -61,7 +61,6 @@ Anhänge
 @c * Literatur::                Wichtige Literatur über die Notation.
 * Notationsübersicht::         Tabellen und Grafiken.
 * Befehlsübersicht::                    Überblick über die LilyPond-Syntax.
-* LilyPond-Grammatik::               Syntaxdiagramm für LilyPond
 * GNU Free Documentation License:: Die Lizenz dieses Handbuchs.
 * Index der LilyPond-Befehle::
 * LilyPond-Index::
@@ -88,16 +87,6 @@ Anhänge
 @include notation/notation-appendices.itely
 @include notation/cheatsheet.itely
 
-@node LilyPond-Grammatik
-@appendix LilyPond-Grammatik
-@translationof LilyPond grammar
-
-Dieser Anhang enthält eine Beschreibung der LilyPond-Grammatik,
-wie sie der Parser ausgibt.
-
-@verbatiminclude ly-grammar.txt
-
-
 @include fdl.itexi
 
 
diff --git a/Documentation/de/notation/GNUmakefile b/Documentation/de/notation/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index b2fb9ddc677c28f76f7a66e391843950ae1128ed..813dcf4d5cbb421521efb7275a771dfd96feaa11 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Till Paala
 
@@ -259,7 +259,7 @@ erklärt in @ref{Weiße Mensuralligaturen} und
 @seealso
 Glossar:
 @rglos{ligature}.
+
 Notationsreferenz:
 @ref{Weiße Mensuralligaturen},
 @ref{Ligaturen der gregorianischen Quadratnotation}.
@@ -315,7 +315,7 @@ folgenden Beispiel gezeigt:
     \context {
       \Staff
       \consists "Custos_engraver"
-      \override Custos #'style = #'mensural
+      \override Custos.style = #'mensural
     }
   }
 }
@@ -415,7 +415,7 @@ werden kann. Siehe das folgende Beispiel:
 \score {
   <<
     \new MensuralVoice = "discantus" \transpose c c' {
-      \override Score.BarNumber #'transparent = ##t {
+      \hide Score.BarNumber {
         c'1\melisma bes a g\melismaEnd
         f\breve
         \[ f1\melisma a c'\breve d'\melismaEnd \]
@@ -473,7 +473,7 @@ Mensuraler C-Schlüssel im historischen Stil
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-c2"
-  \override NoteHead #'style = #'mensural
+  \override NoteHead.style = #'mensural
   c
 @end lilypond
 
@@ -484,7 +484,7 @@ Mensuraler F-Schlüssel im historischen Stil
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-f"
-  \override NoteHead #'style = #'mensural
+  \override NoteHead.style = #'mensural
   c
 @end lilypond
 
@@ -495,7 +495,7 @@ Mensuraler G-Schlüssel im historischen Stil
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-g"
-  \override NoteHead #'style = #'mensural
+  \override NoteHead.style = #'mensural
   c
 @end lilypond
 
@@ -520,7 +520,7 @@ Beispiel den Schlüssel auf der zweiten Linie)
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-c2"
-  \override NoteHead #'style = #'mensural
+  \override NoteHead.style = #'mensural
   c
 @end lilypond
 
@@ -534,7 +534,7 @@ Notenlinien benutzt werden (im Beispiel auf der dritten Linie)
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-c2"
-  \override NoteHead #'style = #'mensural
+  \override NoteHead.style = #'mensural
   c
 @end lilypond
 
@@ -545,7 +545,7 @@ Mensuraler G-Schlüssel im Petrucci-Stil
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-g"
-  \override NoteHead #'style = #'mensural
+  \override NoteHead.style = #'mensural
   c
 @end lilypond
 
@@ -635,18 +635,18 @@ unterschiedlichen Stile dargestellt.
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter default }
 
-  \override Staff.TimeSignature #'style = #'numbered
+  \override Staff.TimeSignature.style = #'numbered
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter numbered }
 
-  \override Staff.TimeSignature #'style = #'mensural
+  \override Staff.TimeSignature.style = #'mensural
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter mensural }
 
-  \override Staff.TimeSignature #'style = #'neomensural
+  \override Staff.TimeSignature.style = #'neomensural
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter neomensural }
-  \override Staff.TimeSignature #'style = #'single-digit
+  \override Staff.TimeSignature.style = #'single-digit
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter single-digit }
 }
@@ -666,7 +666,7 @@ werden, weil sie nicht konstant sind.  Zum Beispiel kann das Verhältnis 1@tie{}
 wird:
 
 @example
-breveTP = #(ly:make-duration -1 0 3 2)
+breveTP = #(ly:make-duration -1 0 3/2)
 @dots{}
 @{ c\breveTP f1 @}
 @end example
@@ -732,13 +732,13 @@ Das folgende Beispiel zeigt den Petrucci-Stil:
 @lilypond[quote,fragment,ragged-right,verbatim]
 \set Score.skipBars = ##t
 \autoBeamOff
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
 a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a'
-\override NoteHead #'style = #'semipetrucci
+\override NoteHead.style = #'semipetrucci
 a'\breve*5/6
-\override NoteHead #'style = #'blackpetrucci
+\override NoteHead.style = #'blackpetrucci
 a'8*4/3 a'
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
 a'\longa
 @end lilypond
 
@@ -764,9 +764,9 @@ werden.  Neben dem Standardstil (@code{default}) ist
 nur (@code{mensural}) unterstützt.
 
 @lilypond[quote,fragment,ragged-right,verbatim]
-\override Flag #'style = #'mensural
-\override Stem #'thickness = #1.0
-\override NoteHead #'style = #'mensural
+\override Flag.style = #'mensural
+\override Stem.thickness = #1.0
+\override NoteHead.style = #'mensural
 \autoBeamOff
 c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8
 c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32
@@ -816,11 +816,11 @@ Stil:
 
 @lilypond[quote,fragment,ragged-right,verbatim]
 \set Score.skipBars = ##t
-\override Rest #'style = #'classical
+\override Rest.style = #'classical
 r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'mensural
+\override Rest.style = #'mensural
 r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'neomensural
+\override Rest.style = #'neomensural
 r\longa^"neomensural" r\breve r1 r2 r4 r8 r16
 @end lilypond
 
@@ -874,7 +874,7 @@ Der Stil für Versetzungszeichen und Vorzeichen wird durch die
 also etwa folgendermaßen:
 
 @example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
   #alteration-mensural-glyph-name-alist
 @end example
 
@@ -992,9 +992,9 @@ Eine Datei kann zum Beispiel so aussehen:
 
 @c @example
 @c \set Score.timing = ##f
-@c \set Score.defaultBarType = "empty"
-@c \override NoteHead #'style = #'neomensural
-@c \override Staff.TimeSignature #'style = #'neomensural
+@c \set Score.defaultBarType = "-"
+@c \override NoteHead.style = #'neomensural
+@c \override Staff.TimeSignature.style = #'neomensural
 @c \clef "petrucci-g"
 @c \[ c'\maxima g \]
 @c \[ d\longa c\breve f e d \]
@@ -1005,14 +1005,14 @@ Eine Datei kann zum Beispiel so aussehen:
 \score {
   \transpose c c' {
     \set Score.timing = ##f
-    \set Score.defaultBarType = "empty"
-    \override NoteHead #'style = #'petrucci
-    \override Staff.TimeSignature #'style = #'mensural
+    \set Score.defaultBarType = "-"
+    \override NoteHead.style = #'petrucci
+    \override Staff.TimeSignature.style = #'mensural
     \clef "petrucci-g"
     \[ c'\maxima g \]
     \[ d\longa
-       \override NoteHead #'ligature-flexa = ##t
-       \once \override NoteHead #'flexa-width = #3.2
+       \override NoteHead.ligature-flexa = ##t
+       \once \override NoteHead.flexa-width = #3.2
        c\breve f e d \]
     \[ c'\maxima d'\longa \]
     \[ e'1 a g\breve \]
@@ -1034,9 +1034,9 @@ wie folgt ausgegeben:
 @lilypond[quote,ragged-right]
 \transpose c c' {
   \set Score.timing = ##f
-  \set Score.defaultBarType = "empty"
-  \override NoteHead #'style = #'neomensural
-  \override Staff.TimeSignature #'style = #'neomensural
+  \set Score.defaultBarType = "-"
+  \override NoteHead.style = #'neomensural
+  \override Staff.TimeSignature.style = #'neomensural
   \clef "petrucci-g"
   \[ c'\maxima g \]
   \[ d\longa c\breve f e d \]
@@ -1165,12 +1165,11 @@ Do-Schlüssel der Editio Vaticana
 @code{vaticana-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'vaticana.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'vaticana.punctum
   \clef "vaticana-do2"
   c
 @end lilypond
@@ -1181,12 +1180,11 @@ Fa-Schlüssel der Editio Vaticana
 @code{vaticana-fa1}, @code{vaticana-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'vaticana.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'vaticana.punctum
   \clef "vaticana-fa2"
   c
 @end lilypond
@@ -1198,12 +1196,11 @@ Do-Schlüssel der Editio Medicaea
 @code{medicaea-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'medicaea.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'medicaea.punctum
   \clef "medicaea-do2"
   c
 @end lilypond
@@ -1214,12 +1211,11 @@ Fa-Schlüssel der Editio Medicaea
 @code{medicaea-fa1}, @code{medicaea-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'medicaea.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'medicaea.punctum
   \clef "medicaea-fa2"
   c
 @end lilypond
@@ -1231,12 +1227,11 @@ Hufnagel Do-Schlüssel für den historischen Stil
 @code{hufnagel-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-do2"
   c
 @end lilypond
@@ -1247,12 +1242,11 @@ Hufnagel Fa-Schlüssel für den historischen Stil
 @code{hufnagel-fa1}, @code{hufnagel-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-fa2"
   c
 @end lilypond
@@ -1263,11 +1257,10 @@ Kombinierter Do/Fa-Hufnagelschlüssel für den historischen Stil
 @code{hufnagel-do-fa}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-do-fa"
   c
 @end lilypond
@@ -1326,7 +1319,7 @@ Der Stil für Versetzungs- und Vorzeichen wird von der
 kontrolliert, beispielsweise:
 
 @example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
   #alteration-mensural-glyph-name-alist
 @end example
 
@@ -1380,7 +1373,7 @@ sich in der Datei @file{gregorian.ly} auch eine Definition für
 \score {
   <<
     \context VaticanaVoice {
-      \override TextScript  #'padding = #3
+      \override TextScript.padding = #3
       g a g
       s^\markup { "divisio minima" }
       \divisioMinima
@@ -1460,9 +1453,9 @@ Vaticana-Stils zur Verfügung gestellt.
 \include "gregorian.ly"
 \score {
   \new VaticanaVoice {
-    \override TextScript #'font-family = #'typewriter
-    \override TextScript #'font-shape = #'upright
-    \override Script #'padding = #-0.1
+    \override TextScript.font-family = #'typewriter
+    \override TextScript.font-shape = #'upright
+    \override Script.padding = #-0.1
     a\ictus_"ictus " \bar "" \break
     a\circulus_"circulus " \bar "" \break
     a\semicirculus_"semicirculus " \bar "" \break
@@ -2500,7 +2493,7 @@ augmentum-Punkte hinzuzufügen.
 @seealso
 Glossar:
 @rglos{ligature}.
+
 Notationreferenz:
 @ref{ Ligaturen der gregorianischen Quadratnotation},
 @ref{Weiße Mensuralligaturen},
@@ -2581,7 +2574,7 @@ Er bezeichnet die Position von @code{c}:
 
 @lilypond[quote,relative=1,notime,verbatim]
   \clef "kievan-do"
-  \override NoteHead #'style = #'kievan
+  \override NoteHead.style = #'kievan
   c
 @end lilypond
 
@@ -2613,7 +2606,7 @@ Notenköpfe:
 @lilypond[quote,fragment,ragged-right,verbatim]
 \autoBeamOff
 \cadenzaOn
-\override NoteHead #'style = #'kievan
+\override NoteHead.style = #'kievan
 b'1 b'2 b'4 b'8 b'\breve b'\longa
 @end lilypond
 
@@ -2648,8 +2641,8 @@ vor allem der Vollständigkeit halber eingesetzt.
 
 @lilypond[quote,relative=1,notime,verbatim]
 \clef "kievan-do"
-\override NoteHead #'style = #'kievan
-\override Accidental #'glyph-name-alist =
+\override NoteHead.style = #'kievan
+\override Accidental.glyph-name-alist =
  #alteration-kievan-glyph-name-alist
 bes' dis,
 @end lilypond
@@ -2674,7 +2667,7 @@ Schlussstrich bezeichnen kann.  Es wird gesetzt mit @code{\bar "kievan"}.
 
 @lilypond[quote,relative=1,notime,verbatim]
   \clef "kievan-do"
-  \override NoteHead #'style = #'kievan
+  \override NoteHead.style = #'kievan
   c \bar "kievan"
 @end lilypond
 
@@ -2778,14 +2771,14 @@ entfernt:
 In einigen Transkriptionsstilen werden jedoch teilweise
 Hälse eingesetzt, um etwa den Übergang von einem Einton-Rezitativ
 zu einer melodischen Geste anzuzeigen.  In diesem Fall können
-Hälse entweder mit @code{\override Stem #'transparent = ##t}
+Hälse entweder mit @code{\hide Stem}
 unsichtbar gemacht werden oder mit
-@code{\override Stem #'length = #0} auf die Länge von 0 reduziert
+@code{\override Stem.length = #0} auf die Länge von 0 reduziert
 werden.  Die Hälse müssen dann wieder an den entsprechenden
-Stellen mit @code{\once \override Stem #'transparent = ##f}
+Stellen mit @code{\once \override Stem.transparent = ##f}
 sichtbar gemacht werden (siehe auch Beispiel unten).  Wenn Hälse
 eingesetzt werden, die Fähnchen haben, muss zusätzlich auch noch
-@code{\override Flag #'transparent = ##t} eingestellt werden.
+@code{\hide Flag} eingestellt werden.
 
 @b{Takt.} Für Gesang ohne Metrum gibt es einige Alternativen.
 
@@ -2796,13 +2789,13 @@ aber ein leerer Platz zu Beginn der Noten an der Stelle, wo
 normalerweise die Taktangabe stehen würde.
 
 In vielen Fällen ergibt @code{\set Score.timing = ##f} gute
-Ergebnisse.  Eine andere Möglichkeit ist es, @code{\CadenzaOn}
-und @code{\CadenzaOff} zu benutzen.
+Ergebnisse.  Eine andere Möglichkeit ist es, @code{\cadenzaOn}
+und @code{\cadenzaOff} zu benutzen.
 
 Um Taktstriche zu entfernen, kann man radikal den @code{Bar_engraver}
 aus dem @code{Staff}-Kontext entfernen.  Wenn man ab und zu
 einen Taktstrich braucht, sollten die Striche nur mit
-@code{\override BarLine #'transparent = ##t} unsichtbar
+@code{\hide BarLine} unsichtbar
 gemacht werden.
 
 Oft werden Rezitativtöne mit einer Brevis angezeigt.  Der
@@ -2818,9 +2811,9 @@ chant = \relative c' {
 }
 
 verba = \lyricmode {
-  \once \override LyricText #'self-alignment-X = #-1
+  \once \override LyricText.self-alignment-X = #-1
   "Noctem quietam et" fi -- nem per -- fec -- tum
-  \once \override LyricText #'self-alignment-X = #-1
+  \once \override LyricText.self-alignment-X = #-1
   "concedat nobis Dominus" om -- ni -- po -- tens.
 }
 \score {
@@ -2833,8 +2826,7 @@ verba = \lyricmode {
       \Staff
       \remove "Time_signature_engraver"
       \remove "Bar_engraver"
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
+      \hide Stem
     }
   }
 }
@@ -2850,13 +2842,12 @@ gemacht):
 chant = \relative c' {
   \clef "G_8"
   \set Score.timing = ##f
-  c\breve \override NoteHead #'transparent = ##t  c c c c c
-  \revert NoteHead #'transparent
-  \override Stem #'transparent = ##f \stemUp c4 b4 a
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t c2 c4  \divisioMaior
-  c\breve \override NoteHead #'transparent = ##t c c c c c c c
-  \revert NoteHead #'transparent c4 c f, f \finalis
+  c\breve \hide NoteHead  c c c c c
+  \undo \hide NoteHead
+  \override Stem.transparent = ##f \stemUp c4 b4 a
+  \hide Stem c2 c4  \divisioMaior
+  c\breve \hide NoteHead c c c c c c c
+  \undo \hide NoteHead c4 c f, f \finalis
 }
 
 verba = \lyricmode {
@@ -2873,9 +2864,8 @@ verba = \lyricmode {
     \context {
       \Staff
       \remove "Time_signature_engraver"
-      \override BarLine #'transparent = ##t
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
+      \hide BarLine
+      \hide Stem
     }
   }
 }
@@ -2907,10 +2897,10 @@ werden.
 @lilypond[verbatim,quote]
 spiritus = \relative c' {
   \time 1/4
-  \override Lyrics.LyricText #'X-extent  = #'(0 . 3)
-  d4 \times 2/3 { f8 a g } g a a4 g f8 e
+  \override Lyrics.LyricText.X-extent  = #'(0 . 3)
+  d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
   d4 f8 g g8 d f g a g f4 g8 a a4  s
-  \times 2/3 { g8 f d } e f g a g4
+  \tuplet 3/2 { g8 f d } e f g a g4
 }
 
 spirLyr = \lyricmode {
@@ -2927,12 +2917,11 @@ spirLyr = \lyricmode {
     \context {
       \Staff
       \remove "Time_signature_engraver"
-      \override BarLine #'X-extent = #'(-1 . 1)
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
-      \override Beam #'transparent = ##t
-      \override BarLine #'transparent = ##t
-      \override TupletNumber #'transparent = ##t
+      \override BarLine.X-extent = #'(-1 . 1)
+      \hide Stem
+      \hide Beam
+      \hide BarLine
+      \hide TupletNumber
     }
   }
 }
@@ -2967,7 +2956,7 @@ In Arbeit.
 @c try Till Rettig
 @c Add example of white noteheads:
 @c In the french baroque some composers used white noteheads in slow pieces,
-@c mainly in 3/2-time.  A quarter looks there like a eighth with a white
+@c mainly in 3/2-time.  A quarter looks there like an eighth with a white
 @c notehead.  (Franz-Rudolf Kuhnen)
 
 @c TODO Add example of this:
index 90251a383521cdb52c1504af310275a0b4cb2cb6..e528f8ae6a4ecd4197603087d1236cb934bfefd7 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Till Paala
 
@@ -778,7 +778,7 @@ Ein @code{\override}-Befehl, aber ohne die Kontextbezeichnung:
   \layout {
     \context {
       \Staff
-      \override Stem #'thickness = #4.0
+      \override Stem.thickness = #4.0
     }
   }
 }
@@ -804,7 +804,7 @@ Eine Kontexteigenschaft kann direkt gesetzt werden:
 
 @item
 Ein vordefinierter Befehl wie etwa @code{\dynamicUp} oder ein
-musikalischer Ausdruck wie @code{\accidentalStyle "dodecaphonic"}:
+musikalischer Ausdruck wie @code{\accidentalStyle dodecaphonic}:
 
 @lilypond[quote,verbatim]
 \score {
@@ -819,7 +819,7 @@ musikalischer Ausdruck wie @code{\accidentalStyle "dodecaphonic"}:
     }
     \context {
       \Staff
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
     }
   }
 }
@@ -871,9 +871,9 @@ ist die gleiche wie für den Befehl direkt zwischen den Noten geschrieben.
     }
   }
   \layout {
-    \accidentalStyle "dodecaphonic"
+    \accidentalStyle dodecaphonic
     \set fontSize = #-4
-    \override Voice.Stem #'thickness = #4.0
+    \override Voice.Stem.thickness = #4.0
   }
 }
 @end lilypond
@@ -913,7 +913,7 @@ Ein @code{\override}-Befehl, dessen Kontextbezeichnung ausgelassen wird:
   \new Staff {
     \new Voice
     \with {
-      \override Stem #'thickness = #4.0
+      \override Stem.thickness = #4.0
     }
     {
       \relative c'' {
@@ -965,7 +965,7 @@ Ein vordefinierter Befehl wie etwa @code{\dynamicUp}
       }
     }
     \new Staff
-    \with { \accidentalStyle "dodecaphonic" }
+    \with { \accidentalStyle dodecaphonic }
     {
       \new Voice
       \with { \dynamicUp }
@@ -1060,9 +1060,8 @@ in Jazzmusik anzuzeigen.
   \consists "Text_engraver"
   \consists "Pitch_squash_engraver"
   squashedPosition = #0
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Stem
   \alias Voice
 }
 \context { \Staff
@@ -1130,9 +1129,8 @@ das die Mittellinie.
 Die Noten sehen wie ein Querstrich aus und haben keine Hälse:
 
 @example
-\override NoteHead #'style = #'slash
-\override Stem #'transparent = ##t
-\override Flag #'transparent = ##t
+\override NoteHead.style = #'slash
+\hide Stem
 @end example
 
 Alle diese Engraver müssen zusammenarbeiten, und das wird erreicht mit
@@ -1153,9 +1151,8 @@ Alles zusammen haben wir folgende Einstellungen:
   \consists "Text_engraver"
   \consists "Pitch_squash_engraver"
   squashedPosition = #0
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Stem
   \alias Voice
 @}
 @end example
@@ -1582,14 +1579,14 @@ weiter weg von der Note gesetzt werden.  Dieser Befehl beispielsweise
 fügt drei Notenlinienzwischenräume zwischen die Zahl und den Notenkopf:
 
 @example
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
 @end example
 
 Wenn dieser Befehl in den Quelltext eingefügt wird, bevor der
 Fingersatz notiert ist, erhält man folgendes:
 
 @lilypond[quote,relative=2,verbatim]
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
 c-2
 \stemUp
 f
@@ -1696,7 +1693,7 @@ Befehls betrachtet.
 Der Befehl
 
 @verbatim
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
 @end verbatim
 
 @noindent
@@ -1708,7 +1705,7 @@ ihr normales Aussehen.  Hier ein Beispiel mit diesem Befehl:
 
 @lilypond[quote,verbatim,relative=2]
 c4
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
 c4
 c4
 c4
@@ -1726,7 +1723,7 @@ Kontext ausgelassen werden, wobei dann immer implizit der
 
 @lilypond[quote,verbatim,relative=2]
 c4
-\once \override Stem #'thickness = #4.0
+\once \override Stem.thickness = #4.0
 c4
 c4
 @end lilypond
@@ -1738,9 +1735,9 @@ schon geschrieben werden, bevor das Objekt begonnen wird.  In dem
 folgenden Beispiel
 
 @lilypond[quote,verbatim,relative=2]
-\override Slur #'thickness = #3.0
+\override Slur.thickness = #3.0
 c8[( c
-\override Beam #'beam-thickness = #0.6
+\override Beam.beam-thickness = #0.6
 c8 c])
 @end lilypond
 
@@ -1756,8 +1753,8 @@ nur Einstellungen betroffen, die sich im gleichen Kontext befinden.  Der
 weil er für den falschen Kontext gefordert wird.
 
 @example
-\override Voice.Stem #'thickness = #4.0
-\revert Staff.Stem #'thickness
+\override Voice.Stem.thickness = #4.0
+\revert Staff.Stem.thickness
 @end example
 
 Einige veränderbare Optionen werden als Untereigenschaften (engl.
@@ -1774,7 +1771,7 @@ Befehl folgende Form an:
 wie beispielsweise
 
 @example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
 @end example
 @end ignore
 
@@ -1990,7 +1987,7 @@ man die @code{thickness}-Eigenschaft des @code{Stem}-Objekts verändert:
 
 @lilypond[quote, verbatim, relative=2]
 c4 c
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 c4 c
 @end lilypond
 
@@ -1998,11 +1995,11 @@ Wenn kein Kontext angegeben wird, wird der tiefste aktuelle Kontext
 benutzt:
 
 @lilypond[quote, verbatim, relative=2]
-{ \override Staff.Stem #'thickness = #3.0
+{ \override Staff.Stem.thickness = #3.0
   <<
     {
       e4 e
-      \override Stem #'thickness = #0.5
+      \override Stem.thickness = #0.5
       e4 e
     } \\ {
       c4 c c c
@@ -2024,9 +2021,9 @@ rückgängig gemacht werden:
 
 @lilypond[quote, verbatim, relative=2]
 c4
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 c4 c
-\revert Voice.Stem #'thickness
+\revert Voice.Stem.thickness
 c4
 @end lilypond
 
@@ -2038,11 +2035,11 @@ Grobs im entsprechenden Kontext aber der Stelle aus, an der sie gesetzt werden:
   <<
     {
       e4
-      \override Staff.Stem #'thickness = #3.0
+      \override Staff.Stem.thickness = #3.0
       e4 e e
     } \\ {
       c4 c c
-      \revert Staff.Stem #'thickness
+      \revert Staff.Stem.thickness
       c4
     }
   >>
@@ -2064,11 +2061,11 @@ um nur den aktuellen Zeitwert zu verändern:
 {
   <<
     {
-      \override Stem #'thickness = #3.0
+      \override Stem.thickness = #3.0
       e4 e e e
     } \\ {
       c4
-      \once \override Stem #'thickness = #3.0
+      \once \override Stem.thickness = #3.0
       c4 c c
     }
   >>
@@ -2134,13 +2131,13 @@ eingesetzt werden:
 
 @lilypond[relative=2,verbatim]
 < c
-  \tweak #'color #red
+  \tweak color #red
   d
   g
-  \tweak #'duration-log #1
+  \tweak duration-log #1
   a
 > 4
--\tweak #'padding #8
+-\tweak padding #8
 -^
 @end lilypond
 
@@ -2174,14 +2171,14 @@ An einem Beispiel demonstriert:  Das funktioniert:
 
 
 @lilypond[relative=2,verbatim,quote]
-<\tweak #'color #red c>4
+<\tweak color #red c>4
 @end lilypond
 
 @noindent
 und das nicht:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
+\tweak color #red c4
 @end lilypond
 
 @end ignore
@@ -2211,10 +2208,10 @@ anderen Notenkopfes innerhalb eines Akkordes verändert:
 
 @lilypond[relative=2,verbatim,quote]
 < c
-  \tweak #'color #red
+  \tweak color #red
   d
   g
-  \tweak #'duration-log #1
+  \tweak duration-log #1
   a
 > 4
 @end lilypond
@@ -2222,7 +2219,7 @@ anderen Notenkopfes innerhalb eines Akkordes verändert:
 @code{\tweak} kann auch benutzt werden, um Bögen zu verändern:
 
 @lilypond[verbatim,quote,relative=1]
-c-\tweak #'thickness #5 ( d e f)
+c-\tweak thickness #5 ( d e f)
 @end lilypond
 
 Damit der @code{\tweak}-Befehl funktioniert, muss er direkt vor dem
@@ -2232,8 +2229,8 @@ ist, in dem alle Layoutelemente aus Ereignissen innerhalb von
 @code{EventChord} erstellt werden:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak #'color #red <c e>4
-<\tweak #'color #red c e>4
+\tweak color #red <c e>4
+<\tweak color #red c e>4
 @end lilypond
 
 Der einfache @code{\tweak}-Befehl kann @emph{nicht} eingesetzt werden, um
@@ -2247,9 +2244,9 @@ Derartige indirekt erstellt Layoutobjekte können mit @code{\tweak} verändert
 werden, indem man die ausführliche Form des Befehls einsetzt:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak Stem #'color #red
-\tweak Beam #'color #green c8 e
-<c e \tweak Accidental #'font-size #-3 ges>4
+\tweak Stem.color #red
+\tweak Beam.color #green c8 e
+<c e \tweak Accidental.font-size #-3 ges>4
 @end lilypond
 
 @code{\tweak} kann auch nicht verwendet werden,
@@ -2262,10 +2259,10 @@ gesetzt werden und alle werden interpretiert:
 
 @lilypond[verbatim,quote,relative=1]
 c
--\tweak #'style #'dashed-line
--\tweak #'dash-fraction #0.2
--\tweak #'thickness #3
--\tweak #'color #red
+-\tweak style #'dashed-line
+-\tweak dash-fraction #0.2
+-\tweak thickness #3
+-\tweak color #red
  \glissando
 f'
 @end lilypond
@@ -2408,7 +2405,7 @@ Schlüssel zu verändern, wird ein geschachtelter Aufruf benutzt:
 % reduced space between staves
 \new PianoStaff \with {
   % this is the nested declaration
-  \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
+  \override StaffGrouper.staff-staff-spacing.basic-distance = #7
 } <<
   \new Staff { \clef treble c''1 }
   \new Staff { \clef bass   c1   }
@@ -2427,7 +2424,7 @@ kann mit einem Aufruf als Aliste vollständig verändert werden:
 
 @lilypond[quote,verbatim]
 \new PianoStaff \with {
-  \override StaffGrouper #'staff-staff-spacing =
+  \override StaffGrouper.staff-staff-spacing =
     #'((basic-distance . 0)
        (minimum-distance . 0)
        (padding . 0)
@@ -2447,10 +2444,10 @@ den Wert von @code{space} hat, wenn sie nicht definiert ist).  Somit sind
 folgende Aufrufe äquivalent:
 
 @example
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
   #'((basic-distance . 7))
 
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
   #'((basic-distance . 7)
      (minimum-distance . 0)
      (padding . 0)
@@ -2796,7 +2793,7 @@ die Anzahl der Elemente in der Liste der Werte von
 
 @lilypond[verbatim,quote,relative=1]
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
+  \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
 }
 { a4 e' f b | d1 }
 @end lilypond
@@ -2808,7 +2805,7 @@ beeinflusst.
 
 @lilypond[verbatim,quote,relative=1]
 \new Staff \with {
-  \override StaffSymbol #'width = #23
+  \override StaffSymbol.width = #23
 }
 { a4 e' f b | d1 }
 @end lilypond
@@ -2856,7 +2853,7 @@ unten dargestellt.
 a~a
 a
 % increase the length of the tie
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
 ~a
 @end lilypond
 
@@ -2865,7 +2862,7 @@ a1
 \compressFullBarRests
 R1*23
 % increase the length of the rest bar
-\once \override MultiMeasureRest #'minimum-length = #20
+\once \override MultiMeasureRest.minimum-length = #20
 R1*23
 a1
 @end lilypond
@@ -2873,7 +2870,7 @@ a1
 @lilypond[verbatim,quote,relative=2]
 a \< a a a \!
 % increase the length of the hairpin
-\override Hairpin #'minimum-length = #20
+\override Hairpin.minimum-length = #20
 a \< a a a \!
 @end lilypond
 
@@ -2883,12 +2880,12 @@ von Legato- und Phrasierungsbögen zu verändern:
 @lilypond[verbatim,quote,relative=2]
 a( a)
 a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
 ( a)
 
 a\( a\)
 a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
 \( a\)
 @end lilypond
 
@@ -2905,12 +2902,12 @@ die @code{springs-and-rods}-Eigenschaft gesetzt ist:
 e \glissando c'
 
 % not effective alone
-\once \override Glissando #'minimum-length = #20
+\once \override Glissando.minimum-length = #20
 e, \glissando c'
 
 % effective only when both overrides are present
-\once \override Glissando #'minimum-length = #20
-\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Glissando.minimum-length = #20
+\once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
 e, \glissando c'
 @end lilypond
 
@@ -2918,12 +2915,12 @@ Das gilt auch für das @code{Beam}-(Balken-)Objekt:
 
 @lilypond[verbatim,quote,relative=1]
 % not effective alone
-\once \override Beam #'minimum-length = #20
+\once \override Beam.minimum-length = #20
 e8 e e e
 
 % effective only when both overrides are present
-\once \override Beam #'minimum-length = #20
-\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Beam.minimum-length = #20
+\once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
 e8 e e e
 @end lilypond
 
@@ -2940,7 +2937,7 @@ hinüber und enden erst an der entsprechenden Note:
 
 @lilypond[verbatim,quote,relative=2]
 a \< a a a a \! a a a \break
-\override Hairpin #'to-barline = ##f
+\override Hairpin.to-barline = ##f
 a \< a a a a \! a a a
 @end lilypond
 
@@ -2976,8 +2973,8 @@ ist ziemlich einfach:
 
 @lilypond[relative=2,quote,verbatim]
 e2 \glissando b
-\once \override Glissando #'(bound-details left Y) = #3
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.left.Y = #3
+\once \override Glissando.bound-details.right.Y = #-2
 e2 \glissando b
 @end lilypond
 
@@ -2997,8 +2994,8 @@ in den Unterlisten @code{left-broken} bzw. @code{right-broken}
 von @code{bound-details} abgelegt.  Zum Beispiel:
 
 @lilypond[relative=2,ragged-right,verbatim,quote]
-\override Glissando #'breakable = ##t
-\override Glissando #'(bound-details right-broken Y) = #-3
+\override Glissando.breakable = ##t
+\override Glissando.bound-details.right-broken.Y = #-3
 c1 \glissando \break
 f1
 @end lilypond
@@ -3042,7 +3039,7 @@ um @i{cresc.}, @i{tr} oder andere Texte an horizontale
 Strecker zu setzen.
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
    = \markup { \small \bold Slower }
 c2\startTextSpan b c a\stopTextSpan
 @end lilypond
@@ -3058,15 +3055,11 @@ gesetzt werden, wird das Symbol am Rand vertikal entsprechend
 des Endpunktes der Linie verschoben:
 
 @lilypond[relative=1,quote,verbatim]
-\override TextSpanner
-  #'(bound-details left stencil-align-dir-y) = #-2
-\override TextSpanner
-  #'(bound-details right stencil-align-dir-y) = #UP
-
-\override TextSpanner
-  #'(bound-details left text) = #"ggg"
-\override TextSpanner
-  #'(bound-details right text) = #"hhh"
+\override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
+\override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
+
+\override TextSpanner.bound-details.left.text = #"ggg"
+\override TextSpanner.bound-details.right.text = #"hhh"
 c4^\startTextSpan c c c \stopTextSpan
 @end lilypond
 
@@ -3169,9 +3162,9 @@ wieder hergestellt werden.
 
 @lilypond[quote,verbatim,relative=1]
 a1 a
-\override Score.BarLine #'stencil = ##f
+\omit Score.BarLine
 a a
-\revert Score.BarLine #'stencil
+\undo \omit Score.BarLine
 a a a
 @end lilypond
 
@@ -3192,7 +3185,7 @@ den entsprechenden Platz ein, ist aber unsichtbar.
 
 @lilypond[quote,verbatim,relative=2]
 a4 a
-\once \override NoteHead #'transparent = ##t
+\once \hide NoteHead
 a a
 @end lilypond
 
@@ -3222,7 +3215,7 @@ dass man die Umrisse des weißen Objektes erahnen kann, wie
 in diesem Beispiel:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
+\override Staff.Clef.color = #white
 a1
 @end lilypond
 
@@ -3246,8 +3239,8 @@ Im oberen Beispiel wird der weiße Schlüssel, der einen Wert von
 werden, sodass es früher gesetzt wird:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
-\override Staff.Clef #'layer = #-1
+\override Staff.Clef.color = #white
+\override Staff.Clef.layer = #-1
 a1
 @end lilypond
 
@@ -3332,7 +3325,7 @@ jeweiligen Standardeinstellungen der Eigenschaft:
 @item @code{KeySignature} (Tonart)       @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @c omit LeftEdge until it can be explained -td
 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
-@item @code{OctavateEight} (Oktavierungs-Acht)      @tab @code{Staff}          @tab @code{begin-of-line-visible}
+@item @code{ClefModifier} (Oktavierungs-Acht)      @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @item @code{RehearsalMark} (Übungszeichen)      @tab @code{Score}          @tab @code{end-of-line-invisible}
 @item @code{TimeSignature} (Taktart)      @tab @code{Staff}          @tab @code{all-visible}
 
@@ -3345,7 +3338,7 @@ Sichtbarkeit von Taktlinien zu bestimmten:
 f4 g a b
 f4 g a b
 % Remove bar line at the end of the current line
-\once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
+\once \override Score.BarLine.break-visibility = #'#(#f #t #t)
 \break
 f4 g a b
 f4 g a b
@@ -3407,7 +3400,7 @@ nach dem expliziten Wechsel zu B-Dur immer noch sichtbar, obwohl
 \key g \major
 f4 g a b
 % Try to remove all key signatures
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b
 \break
@@ -3434,7 +3427,7 @@ Schlüssel zu Beginn einer Zeile -- um diese zu beeinflussen, muss
 \key g \major
 f4 g a b
 \set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b \break
 f4 g a b
@@ -3452,7 +3445,7 @@ expliziten Tonartänderung auftreten, muss die @code{Staff}-Eigenschaft
 f4 g a b
 \set Staff.explicitKeySignatureVisibility = #all-invisible
 \set Staff.printKeyCancellation = ##f
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b \break
 f4 g a b
@@ -3489,10 +3482,10 @@ auftreten.
 @cindex Schlüssel, Sichtbarkeit der Oktavierung
 
 Das kleine Oktavierungssymbol von oktavierten Notenschlüsseln
-wird durch das @code{OctavateEight}-Layout-Objekt erstellt.
+wird durch das @code{ClefModifier}-Layout-Objekt erstellt.
 Seine Sichtbarkeit wird automatisch vom @code{Clef}-Objekt
 geerbt, sodass Veränderungen von @code{break-visibility}
-des @code{OctavateEight}-Layout-Objekts nicht auch noch
+des @code{ClefModifier}-Layout-Objekts nicht auch noch
 für unsichtbare Schlüssel zusätzlich vorgenommen werden müssen.
 
 Bei expliziten Schlüsseländerungn kontrolliert die
@@ -3527,13 +3520,13 @@ und wie sie verändert werden können:
 
 @lilypond[relative=2,ragged-right,verbatim,quote]
 d2 \glissando d'2
-\once \override Glissando #'style = #'dashed-line
+\once \override Glissando.style = #'dashed-line
 d,2 \glissando d'2
-\override Glissando #'style = #'dotted-line
+\override Glissando.style = #'dotted-line
 d,2 \glissando d'2
-\override Glissando #'style = #'zigzag
+\override Glissando.style = #'zigzag
 d,2 \glissando d'2
-\override Glissando #'style = #'trill
+\override Glissando.style = #'trill
 d,2 \glissando d'2
 @end lilypond
 
@@ -3544,7 +3537,7 @@ es ist möglich, sie manuell vorzugeben:
 @c TODO Complete
 @lilypond[relative=2,ragged-right,verbatim,quote]
 e2 \glissando f
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.right.Y = #-2
 e2 \glissando f
 @end lilypond
 
@@ -3604,7 +3597,7 @@ eine sinnvolle Anwendung:
 
 @lilypond[quote,verbatim,relative=1]
 g4\< e' d' f\!
-\override Hairpin #'rotation = #'(20 -1 0)
+\override Hairpin.rotation = #'(20 -1 0)
 g,,4\< e' d' f\!
 @end lilypond
 
@@ -3625,7 +3618,7 @@ werden, wodurch andernfalls einige der Texte zu hoch geschoben werden
 würden.
 
 @lilypond[quote,verbatim,relative=1]
-\override TextScript #'outside-staff-priority = ##f
+\override TextScript.outside-staff-priority = ##f
 g4^\markup { \rotate #30 "a G" }
 b^\markup { \rotate #30 "a B" }
 des^\markup { \rotate #30 "a D-Flat" }
@@ -3745,12 +3738,12 @@ verändert werden.
 @lilypond[verbatim,quote,relative=2]
 a-3
 a
--\tweak #'X-offset #0
--\tweak #'Y-offset #0
+-\tweak X-offset #0
+-\tweak Y-offset #0
 -3
 a
--\tweak #'X-offset #-1
--\tweak #'Y-offset #1
+-\tweak X-offset #-1
+-\tweak Y-offset #1
 -3
 @end lilypond
 
@@ -3832,13 +3825,13 @@ an einer einzigen Note auszurichten:
 
 @lilypond[quote,verbatim,relative=1]
 a'
--\tweak #'self-alignment-X #-1
+-\tweak self-alignment-X #-1
 ^"left-aligned"
--\tweak #'self-alignment-X #0
+-\tweak self-alignment-X #0
 ^"center-aligned"
--\tweak #'self-alignment-X #RIGHT
+-\tweak self-alignment-X #RIGHT
 ^"right-aligned"
--\tweak #'self-alignment-X #-2.5
+-\tweak self-alignment-X #-2.5
 ^"aligned further to the right"
 @end lilypond
 
@@ -3875,9 +3868,9 @@ ausrichtet, dass sie nah am Notenkopf bleibt.
 
 @lilypond[quote,verbatim,relative=2]
 a
--\tweak #'self-alignment-X #0.5  % move horizontally left
--\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
--\tweak #'self-alignment-Y #-1  % move vertically up
+-\tweak self-alignment-X #0.5  % move horizontally left
+-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
+-\tweak self-alignment-Y #-1  % move vertically up
 -3  % third finger
 @end lilypond
 
@@ -3903,20 +3896,20 @@ Standardmäßig werden Übungszeichen und Taktzahlen horizontal
 
 @lilypond[verbatim,quote,relative=1]
 % The RehearsalMark will be centered above the Clef
-\override Score.RehearsalMark #'break-align-symbols = #'(clef)
+\override Score.RehearsalMark.break-align-symbols = #'(clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
 % The RehearsalMark will be centered above the TimeSignature
-\override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
 \key a \major
 \clef treble
 \time 3/4
 \mark "↓"
 e2.
 % The rehearsal mark will be centered above the Breath Mark
-\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
+\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
 \key a \major
 \clef treble
 \time 4/4
@@ -3937,14 +3930,14 @@ ausgerichtet, an der sich der Taktstrich befinden würde.
 
 @lilypond[verbatim,quote,relative=1]
 % The RehearsalMark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
 % The RehearsalMark will be centered above the Clef
 \set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef bass
 \mark "↓"
@@ -3952,7 +3945,7 @@ gis,,1
 % The rehearsal mark will be centered above the Bar Line
 \set Staff.explicitKeySignatureVisibility = #all-invisible
 \set Staff.explicitClefVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef treble
 \mark "↓"
@@ -3967,19 +3960,19 @@ vornehmen.
 
 @lilypond[verbatim,quote,relative=1]
 % The RehearsalMark will be centered above the KeySignature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
 \key a \major
 \clef treble
 \time 4/4
 \mark "↓"
 e1
 % The RehearsalMark will be aligned with the left edge of the KeySignature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
+\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
 \mark "↓"
 \key a \major
 e1
 % The RehearsalMark will be aligned with the right edge of the KeySignature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
+\once \override Score.KeySignature.break-align-anchor-alignment = #RIGHT
 \key a \major
 \mark "↓"
 e1
@@ -3991,14 +3984,14 @@ verschoben werden.  Die Einheiten sind in Notenlinienzwischenräumen:
 @lilypond[verbatim,quote,relative=1]
 % The RehearsalMark will be aligned with the left edge of the KeySignature
 % and then shifted right by 3.5 staff-spaces
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
-\once \override Score.KeySignature #'break-align-anchor = #3.5
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
+\once \override Score.KeySignature.break-align-anchor = #3.5
 \key a \major
 \mark "↓"
 e1
 % The RehearsalMark will be aligned with the left edge of the KeySignature
 % and then shifted left by 2 staff-spaces
-\once \override Score.KeySignature #'break-align-anchor = #-2
+\once \override Score.KeySignature.break-align-anchor = #-2
 \key a \major
 \mark "↓"
 e1
@@ -4055,8 +4048,8 @@ wird.
 
 @lilypond[verbatim,quote]
 XinO = {
-  \once \override NoteHead  #'stencil = #ly:text-interface::print
-  \once \override NoteHead #'text = \markup {
+  \once \override NoteHead.stencil = #ly:text-interface::print
+  \once \override NoteHead.text = \markup {
     \combine
       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
       \musicglyph #"noteheads.s2cross"
@@ -4157,8 +4150,7 @@ wird.
 @lilypond[verbatim,quote,relative=1]
 <<
   {
-  \once \override Tie
-    #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
+  \once \override Tie.control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
   e1~ e1
   }
 \\
@@ -4257,12 +4249,12 @@ Layoutprozess die Platzierung justiert werden soll.
                               '(-0.5 . 0.5)))))
 
 squareLineCircleSpace = {
-  \override NoteHead #'stencil = #square-line-circle-space
+  \override NoteHead.stencil = #square-line-circle-space
 }
 
 smartSquareLineCircleSpace = {
   \squareLineCircleSpace
-  \override NoteHead #'Y-extent =
+  \override NoteHead.Y-extent =
    #(ly:make-unpure-pure-container
       ly:grob::stencil-height
       (lambda (grob start end) (ly:grob::stencil-height grob)))
@@ -4271,9 +4263,9 @@ smartSquareLineCircleSpace = {
 \new Voice \with { \remove "Stem_engraver" }
 \relative c'' {
   \squareLineCircleSpace
-  cis4 ces cisis c
+  cis4 ces disis d
   \smartSquareLineCircleSpace
-  cis4 ces cisis c
+  cis4 ces disis d
 }
 @end lilypond
 
@@ -4409,7 +4401,7 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = #padding
+     \once \override TextScript.padding = #padding
    #})
 
 \relative c''' {
@@ -4430,10 +4422,10 @@ custosNote =
      (parser location note)
      (ly:music?)
    #{
-     \tweak NoteHead #'stencil #ly:text-interface::print
-     \tweak NoteHead #'text
+     \tweak NoteHead.stencil #ly:text-interface::print
+     \tweak NoteHead.text
         \markup \musicglyph #"custodes.mensural.u0"
-     \tweak Stem #'stencil ##f
+     \tweak Stem.stencil ##f
      #note
    #})
 
@@ -4449,7 +4441,7 @@ tempoPadded =
      (parser location padding tempotext)
      (number? markup?)
    #{
-     \once \override Score.MetronomeMark #'padding = #padding
+     \once \override Score.MetronomeMark.padding = #padding
      \tempo \markup { \bold #tempotext }
    #})
 
index 13737c907fffd7b3b44e192ab08bd83e1e876aca..ebedb6c21852335f9e09487cf36f92c4d3d87584 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Till Paala
 
@@ -31,7 +31,7 @@
 @tab
 @lilypond[relative=2,notime]
 \set Staff.autoBeaming = ##f
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 c1 c2 c8 c16
 @end lilypond
 
@@ -39,7 +39,7 @@ c1 c2 c8 c16
 @tab Punktierung
 @tab
 @lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 c4. c4..
 @end lilypond
 
@@ -71,7 +71,7 @@ s4_" "
 @tab Taktangaben
 @tab
 @lilypond[relative=1]
-\override Staff.Clef #'stencil = #empty-stencil
+\override Staff.Clef.stencil = #empty-stencil
 \time 3/4
 s4_" "
 \time 4/4
@@ -83,7 +83,7 @@ s16_" "
 @tab Pause
 @tab
 @lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 r4 r8
 @end lilypond
 
@@ -230,12 +230,12 @@ f8 c2 d e
 @end lilypond
 
 
-@item @code{\times 2/3 @{f g a@}}
+@item @code{\tuplet 3/2 @{f g a@}}
 @tab Triolen
 @tab
 @lilypond[relative=1]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
-\times 2/3 { f8 g a }
+\tuplet 3/2 { f8 g a }
 @end lilypond
 
 
index dca13cea3210d2a757d95869c09fa0c1c605635a..fb3336f998e0feee55e75c0486e49a8e8e1e69d3 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Till Paala
 
@@ -186,7 +186,7 @@ Standard: erzeugt einen Durdreiklang.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1
 }
 @end lilypond
@@ -198,7 +198,7 @@ Mollakkord: Dieser Modifikator erniedrigt die dritte Stufe.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:m c:m7
 }
 @end lilypond
@@ -212,7 +212,7 @@ und (wenn vorhanden) die siebte Stufe.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:dim c:dim7
 }
 @end lilypond
@@ -224,7 +224,7 @@ aug
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:aug
 }
 @end lilypond
@@ -238,7 +238,7 @@ benutzen, um einen Durdreiklang zu notieren.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:maj c:maj7
 }
 @end lilypond
index 4292a3364e738d52e067ad7c3c6b3666993019f3..d57c3e50b26de046e4915130c4034c595d447ba1 100644 (file)
@@ -17,7 +17,7 @@
 @translationof Contemporary music
 
 Seit Anfang des 20. Jahrhunderts wurden die kompositorischen Stile
-und Kompositionstechniken sehr start erweitert.  Neue harmonische
+und Kompositionstechniken sehr stark erweitert.  Neue harmonische
 und rhythmische Entwicklungen, eine Erweiterung der verwendeten
 Tonhöhen und die Entwicklung eines großen Spektrums neuer
 instrumentaler Techniken wurden von einer parallelen Evolution
index 1d3080c4a5ca28424019c2e8c00d5bf3067153b6..f01a51d2704ed0ac3c2d34ca3e14dcff442006f9 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Till Paala
 
@@ -103,11 +103,11 @@ sie sich nur auf bestimmte Layoutobjekte bezieht.
 @lilypond[verbatim,quote,relative=2]
 \set fontSize = #3
 c4.-> d8---3
-\override NoteHead #'font-size = #-4
+\override NoteHead.font-size = #-4
 c4.-> d8---3
-\override Script #'font-size = #2
+\override Script.font-size = #2
 c4.-> d8---3
-\override Stem #'font-size = #-5
+\override Stem.font-size = #-5
 c4.-> d8---3
 @end lilypond
 
@@ -309,11 +309,11 @@ Einzelnen Objekten können einfach eigene Farben zugewiesen werden.
 Gültige Farben-Bezeichnungen sind aufgelistet in @ref{Liste der Farben}.
 
 @lilypond[verbatim,quote,relative=2]
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 c4 c
-\override NoteHead #'color = #(x11-color 'LimeGreen)
+\override NoteHead.color = #(x11-color 'LimeGreen)
 d
-\override Stem #'color = #blue
+\override Stem.color = #blue
 e
 @end lilypond
 
@@ -329,20 +329,20 @@ Wenn @code{x11-color} die angegebene Farbbezeichnung nicht kennt, wird
 Schwarz eingesetzt.
 
 @lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
 \set Staff.instrumentName = \markup {
   \with-color #(x11-color 'navy) "Clarinet"
 }
 
 gis8 a
-\override Beam #'color = #(x11-color "medium turquoise")
+\override Beam.color = #(x11-color "medium turquoise")
 gis a
-\override Accidental #'color = #(x11-color 'DarkRed)
+\override Accidental.color = #(x11-color 'DarkRed)
 gis a
-\override NoteHead #'color = #(x11-color "LimeGreen")
+\override NoteHead.color = #(x11-color "LimeGreen")
 gis a
 % this is deliberate nonsense; note that the stems remain black
-\override Stem #'color = #(x11-color 'Boggle)
+\override Stem.color = #(x11-color 'Boggle)
 b2 cis
 @end lilypond
 
@@ -354,16 +354,16 @@ Exakte RGB-Farben können mit Hilfe der Scheme-Funktion @code{rgb-color}
 definiert werden.
 
 @lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
 \set Staff.instrumentName = \markup {
   \with-color #(x11-color 'navy) "Clarinet"
 }
 
-\override Stem #'color = #(rgb-color 0 0 0)
+\override Stem.color = #(rgb-color 0 0 0)
 gis8 a
-\override Stem #'color = #(rgb-color 1 1 1)
+\override Stem.color = #(rgb-color 1 1 1)
 gis8 a
-\override Stem #'color = #(rgb-color 0 0 0.5)
+\override Stem.color = #(rgb-color 0 0 0.5)
 gis4 a
 @end lilypond
 
@@ -617,7 +617,7 @@ den Linien festgesetzt.
   \context {
     \Staff
     \consists "Grid_point_engraver"
-    gridInterval = #(ly:make-moment 1 4)
+    gridInterval = #(ly:make-moment 1/4)
   }
   \context {
     \Score
index 35b8fde46ac9f42675c04baba802ce9a6c9e663d..46429221957295fd662e92c3ac835260a2b51fd0 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.25"
 
 @c Translators: Till Paala
 
@@ -152,7 +152,7 @@ und @notation{portato}.  Die ihnen entsprechenden Symbole
 werden also folgendermaßen notiert:
 
 @lilypond[verbatim,quote,relative=2]
-c4-^ c-+ c-- c-|
+c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
@@ -172,8 +172,8 @@ an eine Mehrtaktpause anfügen kann (und nur hieran).  Damit wird ein
 @code{MultiMeasureRestText}-Objekt erstellt.
 
 @lilypond[verbatim,quote,relative=2]
-\override Script #'color = #red
-\override MultiMeasureRestText #'color = #blue
+\override Script.color = #red
+\override MultiMeasureRestText.color = #blue
 a2\fermata r\fermata
 R1\fermataMarkup
 @end lilypond
index b5b0bc6419f41b5048a9f0e92866b6bbd7bf50d4..58e9539e728562f67c8e0425573c51c40c73f65e 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Till Paala
 
@@ -249,7 +249,7 @@ benützt, wenn es möglich ist.  Dieses Verhalten kann verändert werden,
 indem @code{restrainOpenStrings} auf @code{#t} gesetzt wird.
 
 @lilypond[quote,ragged-right,verbatim]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \omit Voice.StringNumber }
 \new StaffGroup <<
    \new Staff \relative c {
      \clef "treble_8"
@@ -396,7 +396,7 @@ Flageolett (engl. @emph{harmonic}) kann zur Tabulaturnotation als klingende Tonh
 werden:
 
 @lilypond[verbatim,quote]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \omit Voice.StringNumber }
 firstHarmonic = {
   d'4\4\harmonic
   g'4\3\harmonic
@@ -557,7 +557,7 @@ geschrieben ist:
 @lilypond[quote,ragged-right,verbatim]
 <<
   \new Voice \with {
-    \override StringNumber #'stencil = ##f
+    \omit StringNumber
   } {
     \clef "bass_8"
     \relative c, {
@@ -673,7 +673,7 @@ benutzen, kann man benutzen:
 \layout @{
   \context @{
     \TabStaff
-    stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+    stringTunings = \stringTuning <c' g' d'' a''>
   @}
 @}
 @end example
@@ -945,8 +945,7 @@ Fingersatz kann im knappen Modus hinzugefügt werden:
     }
   }
   \context Staff {
-    \override Voice.TextScript
-      #'(fret-diagram-details finger-code) = #'below-string
+    \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;"
@@ -1023,8 +1022,7 @@ unterste Bund im Diagramm.
     }
   \context Staff {
     \clef "treble_8"
-    \override Voice.TextScript
-      #'(fret-diagram-details finger-code) = #'below-string
+    \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
     <f, c f a c' f'>1^\markup {
       \fret-diagram-verbose #'(
         (place-fret 6 1)
@@ -1716,7 +1714,7 @@ notieren kann.
 \clef "treble_8"
 b16 d g b e
 \textSpannerDown
-\override TextSpanner #'(bound-details left text) = #"XII "
+\override TextSpanner.bound-details.left.text = #"XII "
 g16\startTextSpan
 b16 e g e b g\stopTextSpan
 e16 b g d
@@ -1754,7 +1752,7 @@ mit einem Text erklärt.
 @lilypond[quote,ragged-right,verbatim]
 \relative c' {
   \clef "treble_8"
-  \override Staff.NoteHead #'style = #'harmonic-mixed
+  \override Staff.NoteHead.style = #'harmonic-mixed
   d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
 }
 @end lilypond
@@ -1768,7 +1766,7 @@ music = \relative c' {
   < b\3 \deadNote d\2 b'\1 >
   < c\3 \deadNote e\2 c'\1 >
   \deadNotesOn
-  \times 2/3 { g8 b e }
+  \tuplet 3/2 { g8 b e }
   \deadNotesOff
   < a,\3 c\2 e\1 >1
 }
index 94b1c63374b4fe04de8b0a77d8c7d530bbcd5b8d..5b159b1a059ec71b79f54fec030254d15032ff5d 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @c Translators: Till Paala
 
@@ -545,7 +545,7 @@ werden,
 in Gesangstextabschnitten (@code{lyricmode}) müssen Leerzeichen
 zwischen alle Ausdrücke in @code{\override}- und @code{\set}-Befehlen
 gesetzt werden.  Insbesondere müssen um Punkte und Gleichzeitszeichen
-in Befehlen wie @code{\override Score . LyricTex #'font-size = #5)}
+in Befehlen wie @code{\override Score.LyricTex.font-size = #5)}
 und vor dem gesamten Befehl geschrieben werden.
 
 @end itemize
@@ -1289,10 +1289,10 @@ werden, auf den sich die Fußnote bezieht.
   \header { tagline = ##f }
   \relative c' {
     \footnote #'(0.5 . -2)
-      \markup { Die erste Note } \default
+      \markup { Die erste Note }
     a'4 b8
-    \footnote #'(0.5 . 1) #'Flag
-      \markup { Die dritte Note } \default
+    \footnote #'(0.5 . 1)
+      \markup { Die dritte Note } Flag
     e\noBeam c4 d4
   }
 }
@@ -1329,11 +1329,11 @@ Tagline und Copyright gezeigt wird.
     a'4-\footnote #'(-3 . 0) \markup { \bold Forte } \f
     -\footnote #'(0 . 1.5) \markup { Ein Bogen } (
     b8)-\footnote #'(0 . -2) \markup { Balken } [ e]
-    \footnote #'(1 . -1) #'Stem
-      \markup  { \teeny { Das ist ein Hals } }
+    \single\footnote #'(1 . -1)
+      \markup  { \teeny { Das ist ein Hals } } Stem
     c4
-    \footnote #'(0 . 0.5) #'AccidentalCautionary
-      \markup \italic { Ein warnendes Versetzungszeichen }
+    \single\footnote #'(0 . 0.5)
+      \markup \italic { Ein warnendes Versetzungszeichen } AccidentalCautionary
     \footnote #'(1 . 1) "Die Note selber"
     dis?4-\footnote #'(0.5 . -0.5) \markup \italic { langsamer werden }
          _"rit."
@@ -1428,14 +1428,14 @@ Position der Fußnotentexte zu Tagline und Copyright anzeigen:
       \markup { \teeny 3 } #'(0 . -2)
       \markup { 3. Balken } [
     e]
-    \footnote
-      \markup { 4 } #'(1 . -1) #'Stem
-      \markup  { \bold 4. { Das ist ein Hals } }
+    \single\footnote
+      \markup { 4 } #'(1 . -1)
+      \markup  { \bold 4. { Das ist ein Hals } } Stem
     c4
-    \footnote
+    \single\footnote
       \markup \concat \teeny { "sharp (v)" }
-          #'(0 . 0.5) #'AccidentalCautionary
-      \markup \italic { v. Ein warndendes Versetzungszeichen }
+          #'(0 . 0.5)
+      \markup \italic { v. Ein warndendes Versetzungszeichen } AccidentalCautionary
     dis?4-\footnote
       \markup \concat \teeny { "a" } #'(0.5 . -0.5)
       \markup \italic { a. Langsamer werden } _"rit."
index e94a624087f4162cf43d0f7f9708e3409f87d830..eb262ad22122ef581fc6dd58cf64be22a66169e1 100644 (file)
@@ -10,7 +10,7 @@
 
 @c Translators: Till Paala
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @node Tasteninstrumente und andere Instrumente mit mehreren Systemen
 @section Tasteninstrumente und andere Instrumente mit mehreren Systemen
@@ -229,7 +229,7 @@ Notation kommen:
   \new Staff = "up" {
     \voiceOne
     % Make space for fingering in the cross-staff voice
-    \once\override DynamicLineSpanner #'staff-padding = #3.4
+    \once\override DynamicLineSpanner.staff-padding = #3.4
     e''2\p\< d''\>
     c''1\!
   }
index 11b10ac1e51f93302b43acdb373fff6b4a9457ec..1a14675ecb40bd5fd13486ffe057b9bd8677ab2f 100644 (file)
@@ -1603,7 +1603,8 @@ Wenn dies nicht erreicht werden kann, ist die Datei nicht korrekt und
 ensprechende Fehlermeldungen werden ausgegeben.  Die syntaktischen Gruppierungen
 und die Regeln, nach welchen die Gruppen aus ihren Einzelteilen nach der
 LilyPond-Syntax erstellt werden, finden sich in der Datei @file{lily/parser.yy}
-und werden in der Backus Normal Form (BNF) in @ref{LilyPond-Grammatik}
+und werden in der Backus Normal Form (BNF) in
+@rcontribnamed{LilyPond grammar, LilyPond-Grammatik}
 gezeigt.  Diese Datei wird benutzt, um den Parser während der Programmkompilation
 zu erstellen.  Hierzu wird der Parser-Ersteller Bison verwendet.  Er ist
 Teil des Quellcodes und nicht in die binäre Installation von LilyPond
@@ -1636,7 +1637,6 @@ LilyPond benutzt folgende Parser-Variablen:
 @item mode
 @item output-count
 @item output-suffix
-@item parseStringResult
 @item partCombineListener
 @item pitchnames
 @item toplevel-bookparts
index b1896d2ce2d08a58da0ceb560e89873c650edf71..786ba54c4f90618eabf378ff6428d2e63d987f2f 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Till Paala
 
@@ -261,17 +261,16 @@ mus = \drummode {
   << \new DrumStaff \with {
        \remove "Bar_engraver"
        \remove "Time_signature_engraver"
-       \override Stem #'transparent = ##t
-       \override Flag #'transparent = ##t
-       \override Stem #'Y-extent = ##f
+       \hide Stem
+       \override Stem.Y-extent = ##f
      } \mus
      \new Lyrics \nam
   >>
   \layout {
     \context {
       \Score
-      \override LyricText #'font-family = #'typewriter
-      \override BarNumber #'transparent =##T
+      \override LyricText.font-family = #'typewriter
+      \override BarNumber.transparent =##T
     }
   }
 }
@@ -294,16 +293,15 @@ mus = \drummode { timh ssh timl ssl cb s16 }
   \new DrumStaff \with {
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
-    \override StaffSymbol #'line-count = #2
-    \override StaffSymbol #'staff-space = #2
-    \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0)
+    \hide Stem
+    \override Stem.Y-extent = ##f
+    \override StaffSymbol.line-count = #2
+    \override StaffSymbol.staff-space = #2
+    \override VerticalAxisGroup.minimum-Y-extent = #'(-3.0 . 4.0)
     drumStyleTable = #timbales-style
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -321,16 +319,15 @@ mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 }
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
     drumStyleTable = #congas-style
-    \override StaffSymbol #'line-count = #2
+    \override StaffSymbol.line-count = #2
 
     %% this sucks; it will lengthen stems.
-    \override StaffSymbol #'staff-space = #2
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \override StaffSymbol.staff-space = #2
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -347,17 +344,16 @@ mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 }
   \new DrumStaff \with {
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
-    \override StaffSymbol #'line-count = #2
+    \override StaffSymbol.line-count = #2
     drumStyleTable = #bongos-style
 
     %% this sucks; it will lengthen stems.
-    \override StaffSymbol #'staff-space = #2
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \override StaffSymbol.staff-space = #2
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -374,14 +370,13 @@ mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 }
   \new DrumStaff \with{
     \remove "Bar_engraver"
     drumStyleTable = #percussion-style
-    \override StaffSymbol #'line-count = #1
+    \override StaffSymbol.line-count = #1
     \remove "Time_signature_engraver"
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -431,10 +426,10 @@ Zwei Holzblöcke, notiert mit wbh (hoch) und wbl (tief)
 woodstaff = {
   % This defines a staff with only two lines.
   % It also defines the positions of the two lines.
-  \override Staff.StaffSymbol #'line-positions = #'(-2 3)
+  \override Staff.StaffSymbol.line-positions = #'(-2 3)
 
   % This is necessary; if not entered, the barline would be too short!
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
 }
 
 \new DrumStaff {
@@ -452,7 +447,7 @@ woodstaff = {
 @end lilypond
 
 In diesem Spezialfalls muss die Länge der Taktlinie mit
-@code{\override Staff.BarLine #'bar-extent #'(von . bis)} angepasst werden.
+@code{\override Staff.BarLine.bar-extent #'(von . bis)} angepasst werden.
 Andernfalls wäre sie zu kurz.  Die Position der beiden Linien muss
 auch definiert werden.
 
@@ -462,8 +457,8 @@ Tamburin, notiert mit @code{tamb}:
 #(define mydrums '((tambourine default #t 0)))
 
 tambustaff = {
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Tambourine"
 }
 
@@ -488,8 +483,8 @@ Noten für Tam-Tam (notiert mit @code{tt}):
 #(define mydrums '((tamtam default #t 0)))
 
 tamtamstaff = {
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Tamtam"
 }
 
@@ -511,9 +506,9 @@ Zwei Glocken, notiert mit @code{cb} (Kuhglocke) und @code{rb}
                    (cowbell  default #t -2)))
 
 bellstaff = {
-  \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3)
+  \override DrumStaff.StaffSymbol.line-positions = #'(-2 3)
   \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Different Bells"
 }
 
index b7bfe58e740bb1a04ce1e61d07a044ccb860f1e2..70129c81c7a99470407b8a187a39180503e351fa 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.18"
 
 @c Translators: Till Paala
 
@@ -1230,7 +1230,7 @@ Schnipsel:
 Referenz der Interna:
 @rinternals{Clef_engraver},
 @rinternals{Clef},
-@rinternals{OctavateEight},
+@rinternals{ClefModifier},
 @rinternals{clef-interface}.
 
 
@@ -1517,7 +1517,7 @@ soll.  Diese Funktion kann man wie folgt benutzen:
 
 @example
 \new Staff <<
-  \accidentalStyle "voice"
+  \accidentalStyle voice
   @{ @dots{} @}
 >>
 @end example
@@ -1532,7 +1532,7 @@ Um etwa den neuen Stil in allen Systemen einer
 Stimmgruppe (@code{StaffGroup}) zu benutzen, müsste der Befehl so aussehen:
 
 @example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
 @end example
 
 Folgende Versetzungszeichenstile sind unterstützt.
@@ -1575,11 +1575,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1595,7 +1595,7 @@ in beiden Systemen benutzt werden soll:
   <<
     \context Staff = "up" @{
       %%% nächste Zeile wie gewünscht ändern:
-      \accidentalStyle #'Score "default"
+      \accidentalStyle Score.default
       \musicA
     @}
     \context Staff = "down" @{
@@ -1657,11 +1657,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1734,11 +1734,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicB
     }
   >>
@@ -1801,11 +1801,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicB
     }
   >>
@@ -1863,11 +1863,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicB
     }
   >>
@@ -1930,11 +1930,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicB
     }
   >>
@@ -1991,11 +1991,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicB
     }
   >>
@@ -2055,7 +2055,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano"
+      \accidentalStyle piano
       \musicA
     }
     \context Staff = "down" {
@@ -2113,7 +2113,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano-cautionary"
+      \accidentalStyle piano-cautionary
       \musicA
     }
     \context Staff = "down" {
@@ -2172,11 +2172,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicB
     }
   >>
@@ -2230,11 +2230,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicB
     }
   >>
@@ -2292,11 +2292,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicB
     }
   >>
@@ -2350,11 +2350,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicB
     }
   >>
@@ -2410,11 +2410,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicB
     }
   >>
@@ -2472,12 +2472,12 @@ musicB = {
   <<
     \context Staff = "up" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicA
     }
     \context Staff = "down" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicB
     }
   >>
@@ -2532,11 +2532,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicB
     }
   >>
@@ -2592,11 +2592,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicB
     }
   >>
@@ -2642,7 +2642,7 @@ Klammer kein Auflösungszeichen:
 
 @lilypond[quote]
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2659,12 +2659,12 @@ die den Versetzungszeichenstil kurzzeitig auf @code{forget} umschaltet:
 
 @lilypond[verbatim,quote]
 forget = #(define-music-function (parser location music) (ly:music?) #{
-  \accidentalStyle "forget"
+  \accidentalStyle forget
   #music
-  \accidentalStyle "modern"
+  \accidentalStyle modern
 #})
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2783,13 +2783,13 @@ Notenköpfe können verändert werden:
 
 @lilypond[verbatim,quote,relative=2]
 c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
 c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
 a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
 a b
-\revert NoteHead #'style
+\revert NoteHead.style
 c4 d e f
 @end lilypond
 
index 5195578fb9b07b5b417cec0701fda65d49d9bad8..2e2d5198cfeae725d2937b7cf8d891881163b715 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Till Paala
 
@@ -228,11 +228,11 @@ zu Beginn jeder Alternative außer der ersten.
 \alternative {
   {
     f2 d |
-    \set Timing.measureLength = #(ly:make-moment 3 4)
+    \set Timing.measureLength = #(ly:make-moment 3/4)
     g4 g g  % optional bar check is allowed here
   }
   {
-    \set Timing.measureLength = #(ly:make-moment 4 4)
+    \set Timing.measureLength = #(ly:make-moment 4/4)
     a2 a |
   }
 }
@@ -671,7 +671,7 @@ benützten ein doppeltes Prozent-Symbol.
 
 @lilypond[verbatim,quote,relative=2]
 \repeat percent 4 { c8. <d f>16 }
-\repeat percent 2 { \times 2/3 { r8 c d } e4 }
+\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 }
 @end lilypond
 
 @snippets
index 4177e354fa32bb4e00b3d3e5d46719854d129554..5a8bb1adc8e70833aff2676b4b32d8ec55838248 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Till Paala
 
@@ -154,7 +154,7 @@ siehe @ref{Richtung und Platzierung}.
 @snippets
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
-{alternative-breve-note.ly}
+{alternative-breve-notes.ly}
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {changing-the-number-of-augmentation-dots-per-note.ly}
@@ -221,8 +221,8 @@ Triole, in welcher drei Noten die Länge von zwei haben, der Wert jeder
 einzelnen Note ist also 2/3 der notierten Länge.
 
 @lilypond[quote,verbatim,relative=2]
-a2 \times 2/3 { b4 b b }
-c4 c \times 2/3 { b4 a g }
+a2 \tuplet 3/2 { b4 b b }
+c4 c \tuplet 3/2 { b4 a g }
 @end lilypond
 
 @cindex Triolenklammer, Platzierung
@@ -242,7 +242,7 @@ N-tolen können ineinander geschachtelt werden:
 
 @lilypond[quote,verbatim,relative=2]
 \autoBeamOff
-c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4
+c4 \tuplet 5/4 { f8 e f \tuplet 3/2 { e[ f g] } } f4
 @end lilypond
 
 Wenn man die Eigenschaften von N-tolen verändern will, die zum
@@ -569,11 +569,11 @@ Durch Veränderung der Eigenschaften @var{whiteout} (weiß malen) und
 Objekten im Notensystem zusammenstoßen.
 
 @lilypond[verbatim,quote,ragged-right,relative=2]
-\override Tie #'layer = #-2
-\override Staff.TimeSignature #'layer = #-1
-\override Staff.KeySignature #'layer = #-1
-\override Staff.TimeSignature #'whiteout = ##t
-\override Staff.KeySignature #'whiteout = ##t
+\override Tie.layer = #-2
+\override Staff.TimeSignature.layer = #-1
+\override Staff.KeySignature.layer = #-1
+\override Staff.TimeSignature.whiteout = ##t
+\override Staff.KeySignature.whiteout = ##t
 b2 b~
 \time 3/4
 \key a \major
@@ -671,7 +671,7 @@ vordefinierten Befehle:
 \new Staff {
   % These two lines are just to prettify this example
   \time 16/1
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   % Print a maxima rest, equal to four breves
   r\maxima
   % Print a longa rest, equal to two breves
@@ -941,10 +941,10 @@ nicht ignoriert werden.  Siehe auch das folgende Beispiel.
 
 @lilypond[quote,verbatim,relative=2]
 % This fails, as the wrong object name is specified
-\override TextScript #'padding = #5
+\override TextScript.padding = #5
 R1^"wrong"
 % This is the correct object name to be specified
-\override MultiMeasureRestText #'padding = #5
+\override MultiMeasureRestText.padding = #5
 R1^"right"
 @end lilypond
 
@@ -1310,7 +1310,7 @@ e4. d8 c2
 Metronombezeichnungen können auch für einen Zahlenbereich notiert werden:
 
 @lilypond[verbatim,quote,relative=1]
-\tempo 4 = 40 ~ 46
+\tempo 4 = 40 - 46
 c4. e8 a4 g
 b,2 d4 r
 @end lilypond
@@ -1431,7 +1431,7 @@ So wird etwa aus @code{\partial 8}:
 
 @lilypond[quote,verbatim,relative=1]
 \time 3/4
-\set Timing.measurePosition = #(ly:make-moment -1 8)
+\set Timing.measurePosition = #(ly:make-moment -1/8)
 e8 | a4 c8 b c4 |
 @end lilypond
 
@@ -1476,7 +1476,7 @@ benutzen.
 \time 6/8
 \partial 8
 e8 | a4 c8 b[ c b] |
-\set Timing.measurePosition = #(ly:make-moment -1 4)
+\set Timing.measurePosition = #(ly:make-moment -1/4)
 r8 e,8 | a4 c8 b[ c b] |
 @end lilypond
 
@@ -1519,7 +1519,7 @@ Taktnummerierung wird am Ende der Kadenz wieder aufgenommen:
 
 @lilypond[verbatim,relative=2,fragment]
 % Show all bar numbers
-\override Score.BarNumber #'break-visibility = #all-visible
+\override Score.BarNumber.break-visibility = #all-visible
 c4 d e d
 \cadenzaOn
 c4 c d8[ d d] f4 g4.
@@ -1676,7 +1676,7 @@ auswirkt.
     \scaleDurations 3/5 {
       \repeat unfold 2 { c8[ c c] }
       \repeat unfold 2 { c8[ c] } |
-      c4. c4. \times 2/3 { c8[ c c] } c4
+      c4. c4. \tuplet 3/2 { c8[ c c] } c4
     }
   }
 >>
@@ -2144,12 +2144,12 @@ werden, wenn die Bebalkung von @code{beatStructure} bestimmt werden soll.
 \time 4/4
 a8^"default" a a a a a a a
 
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
 \set Timing.beatStructure = #'(1 1 1 1)
 a8^"no change" a a a a a a a
 
 \set Timing.beamExceptions = #'()
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
 \set Timing.beatStructure = #'(1 1 1 1)
 a8^"changed" a a a a a a a
 @end lilypond
@@ -2203,7 +2203,7 @@ er kompatibel mit dem neuen Wert von @code{baseMoment} ist.
 
 @lilypond[quote,verbatim,relative=2]
 \time 5/8
-\set Timing.baseMoment = #(ly:make-moment 1 16)
+\set Timing.baseMoment = #(ly:make-moment 1/16)
 \set Timing.beatStructure = #'(7 3)
 \repeat unfold 10 { a16 }
 @end lilypond
@@ -2296,7 +2296,7 @@ Die @code{beamExceptions}-Regel kann die @code{beatStructure}-Einstellung
 
 @lilypond[quote,verbatim,relative=2]
 \time 4/4
-\set Timing.baseMoment = #(ly:make-moment 1 8)
+\set Timing.baseMoment = #(ly:make-moment 1/8)
 \set Timing.beatStructure = #'(3 3 2)
 % This won't beam (3 3 2) because of beamExceptions
 \repeat unfold 8 {c8} |
@@ -2434,7 +2434,7 @@ vermeiden, ist es, die Taktart nur in einem System zu setzen.
 <<
   \new Staff {
     \time 3/4
-    \set Timing.baseMoment = #(ly:make-moment 1 8)
+    \set Timing.baseMoment = #(ly:make-moment 1/8)
     \set Timing.beatStructure = #'(1 5)
     \repeat unfold 6 { a8 }
   }
@@ -2516,7 +2516,7 @@ normalen Balken gesetzt.
 
 @lilypond[quote,verbatim,relative=2]
 c4 d8[
-\grace { e32[ d c d] }
+\grace { e32 d c d }
 e8] e[ e
 \grace { f16 }
 e8 e]
@@ -2605,14 +2605,14 @@ das Tempo, während die darauffolgenden vier 32-Noten ein
 gleichmäßiges Tempo haben.
 
 @lilypond[relative=1,verbatim,quote]
-\override Beam #'grow-direction = #LEFT
-\featherDurations #(ly:make-moment 2 1)
+\override Beam.grow-direction = #LEFT
+\featherDurations #(ly:make-moment 2/1)
 { c16[ c c c c c c c] }
-\override Beam #'grow-direction = #RIGHT
-\featherDurations #(ly:make-moment 2 3)
+\override Beam.grow-direction = #RIGHT
+\featherDurations #(ly:make-moment 2/3)
 { c32[ d e f] }
 % revert to non-feathered beams
-\override Beam #'grow-direction = #'()
+\override Beam.grow-direction = #'()
 { g32[ a b c] }
 @end lilypond
 
@@ -2737,7 +2737,7 @@ f1 \bar "|"
 f1 \bar "."
 g1 \bar "||"
 a1 \bar ".|"
-b1 \bar ".|."
+b1 \bar ".."
 c1 \bar "|.|"
 d1 \bar "|."
 e1
@@ -2746,8 +2746,8 @@ e1
 Zusätzlich gibt es noch punktierte und gestrichelte Taktstriche:
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar ":"
-g1 \bar "dashed"
+f1 \bar ";"
+g1 \bar "!"
 a1
 @end lilypond
 
@@ -2755,17 +2755,17 @@ a1
 und fünf unterschiedliche Wiederholungstaktstriche:
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar "|:" g \bar ":|:" a \bar ":|.|:" b \bar ":|.:" c \bar ":|" d
+f1 \bar ".|:" g \bar ":..:" a \bar ":|.|:" b \bar ":|.:" c \bar ":|." d
 @end lilypond
 
 Zusätzlich kann eine Taktlinie mit einem einfachen Apostroph gesetzt werden:
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar "|:"
-g1 \bar ":|:"
+f1 \bar ".|:"
+g1 \bar ":..:"
 a1 \bar ":|.|:"
 b1 \bar ":|.:"
-c1 \bar ":|"
+c1 \bar ":|."
 e1
 @end lilypond
 
@@ -2793,13 +2793,13 @@ c4 c c c
 c4 c c c \break
 \bar "S"
 c4 c c c
-\bar "|S"
+\bar "S-|"
 c4 c c c \break
-\bar "|S"
+\bar "S-|"
 c4 c c c
-\bar "S|"
+\bar "S-S"
 c4 c c c \break
-\bar "S|"
+\bar "S-S"
 c1
 @end lilypond
 
@@ -2818,9 +2818,9 @@ doppelter Taktstrich am Ende der Zeile ausgegeben wird und ein
 
 @lilypond[quote,relative=2,verbatim]
 c4 c c c
-\bar "||:"
+\bar ".|:-||"
 c4 c c c \break
-\bar "||:"
+\bar ".|:-||"
 c4 c c c
 @end lilypond
 
@@ -2829,29 +2829,29 @@ es sechs verschiedene Variationen:
 
 @lilypond[quote,relative=2,verbatim]
 c4 c c c
-\bar ":|S"
+\bar ":|.S"
 c4 c c c \break
-\bar ":|S"
+\bar ":|.S"
 c4 c c c
-\bar ":|S."
+\bar ":|.S-S"
 c4 c c c \break
-\bar ":|S."
+\bar ":|.S-S"
 c4 c c c
-\bar "S|:"
+\bar "S.|:-S"
 c4 c c c \break
-\bar "S|:"
+\bar "S.|:-S"
 c4 c c c
-\bar ".S|:"
+\bar "S.|:"
 c4 c c c \break
-\bar ".S|:"
+\bar "S.|:"
 c4 c c c
-\bar ":|S|:"
+\bar ":|.S.|:"
 c4 c c c \break
-\bar ":|S|:"
+\bar ":|.S.|:"
 c4 c c c
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
 c4 c c c \break
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
 c1
 @end lilypond
 
@@ -2959,7 +2959,7 @@ der Zeile} und @var{Beginn der Zeile}.  Im folgenden
 Beispiel werden die Taktlinien überall ausgegeben:
 
 @lilypond[verbatim,quote,relative=1]
-\override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+\override Score.BarNumber.break-visibility = #'#(#t #t #t)
 \set Score.currentBarNumber = #11
 % Permit first bar number to be printed
 \bar ""
@@ -3057,19 +3057,19 @@ ausgegeben.  Damit wird die Warnung auf den Ursprung de Fehlers
 fokussiert.
 
 @funindex |
-@funindex pipeSymbol
+@funindex "|"
 
 Es ist auch möglich, die Bedeutung des Symbols @code{|} (Pipe)
 umzudefinieren, so dass hiermit eine andere Aktion als eine
 Taktüberprüfung erreicht wird.
-Das geschieht, indem man der Pipe (@code{pipeSymbol} einen musikalischen
+Das geschieht, indem man der Pipe (@code{"|"} einen musikalischen
 Ausdruck zuweist.  Im nächsten Beispiel wird @code{|} dazu
 verwendet, eine doppelte Taktlinie auszugeben, woimmer man
 das Zeichen auch setzt.  Gleichzeitig hört das Zeichen auf,
 als Taktüberprüfung zu funktionieren.
 
 @lilypond[quote,verbatim]
-pipeSymbol = \bar "||"
+"|" = \bar "||"
 {
   c'2 c' |
   c'2 c'
@@ -3298,7 +3298,7 @@ keine logische Zeit im Takt ein.
 
 @lilypond[quote,relative=2,verbatim]
 c4 \grace b16 a4(
-\grace { b16[ c16] } a2)
+\grace { b16 c16 } a2)
 @end lilypond
 
 Es gibt drei Arten von Verzierungen:
@@ -3313,7 +3313,7 @@ zwischen Noten notiert, die selber einen Legatobogen haben.
 @lilypond[quote,relative=2,verbatim]
 \acciaccatura d8 c4
 \appoggiatura e8 d4
-\acciaccatura { g16[ f] } e2
+\acciaccatura { g16 f } e2
 \slashedGrace a,8 g4
 \slashedGrace b16 a4(
 \slashedGrace b8 a2)
@@ -3324,8 +3324,8 @@ synchronisiert.  Im nächsten Beispiel stehen im einen
 System zwei 16-Noten für jede 8-Note des zweiten Systems:
 
 @lilypond[quote,relative=2,verbatim]
-<< \new Staff { e2 \grace { c16[ d e f] } e2 }
-   \new Staff { c2 \grace { g8[ b] } c2 } >>
+<< \new Staff { e2 \grace { c16 d e f } e2 }
+   \new Staff { c2 \grace { g8 b } c2 } >>
 @end lilypond
 
 @funindex \afterGrace
@@ -3374,7 +3374,7 @@ gesetzt.
 @lilypond[quote,verbatim,relative=2]
 \new Voice {
   << { d1^\trill_( }
-     { s2 s4. \grace { c16[ d] } } >>
+     { s2 s4. \grace { c16 d } } >>
   c1)
 }
 @end lilypond
@@ -3461,8 +3461,8 @@ Verzierungen vorkommen:
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e4 \bar "|:" \grace c16 d2. }
-  \new Staff { c4 \bar "|:" d2. }
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" d2. }
 >>
 @end lilypond
 
@@ -3473,8 +3473,8 @@ also
 
 @lilypond[quote,ragged-right,relative=2,verbatim,fragment]
 <<
-  \new Staff { e4 \bar "|:" \grace c16 d2. }
-  \new Staff { c4 \bar "|:" \grace s16 d2. }
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" \grace s16 d2. }
 >>
 @end lilypond
 
@@ -3649,11 +3649,11 @@ dass der Takt im Ergebnis 1/8 kürzer ist.  Die nächste Taktlinie
 wird dann auch bei 9/8 gezogen und nicht bei 5/4.
 
 @lilypond[quote,verbatim,relative=1]
-\set Score.measureLength = #(ly:make-moment 5 4)
+\set Score.measureLength = #(ly:make-moment 5/4)
 c1 c4
 c1 c4
 c4 c4
-\set Score.measurePosition = #(ly:make-moment 5 8)
+\set Score.measurePosition = #(ly:make-moment 5/8)
 b4 b4 b8
 c4 c1
 @end lilypond
index 6f4c080b73c725118f375d14c1144edc6b6972d7..1eb7afce45af6402bbdb8da7e623846f1ef8b846 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @c Translators: Till Paala
 
@@ -67,7 +67,7 @@ Akkorde können auch von Artikulationen gefolgt werden, genau wie
 auch einfache Noten.
 
 @lilypond[verbatim,quote,relative=2]
-<a c e>1\fermata <a c e>2-> <f a c e>4\prall <a c>8.^| <g c e>16-.
+<a c e>1\fermata <a c e>2-> <f a c e>4\prall <a c>8.^! <g c e>16-.
 @end lilypond
 
 Die Noten innerhalb der Akkorde konnen auch von Artikulationen oder
@@ -96,7 +96,7 @@ komplexere Möglichkeiten, derartige Elemente zu kombinieren, siehe
 @ref{Gleichzeitige Ausdrücke}.
 
 @lilypond[verbatim,quote,relative=2]
-\grace { g8[( a b] }
+\grace { g8( a b }
 <> ) \p \< -. -\markup \italic "sempre staccato"
 \repeat unfold 4 { c4 e }  c1\f
 @end lilypond
@@ -173,7 +173,7 @@ Balken usw. benutzt werden, weil nur die Tonhöhen des vorangehenden
 Akkordes wiederholgt werden.
 
 @lilypond[verbatim,quote,relative=2]
-<a c e>1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall
+<a c e>1\p^"text" q2\<( q8)[-! q8.]\! q16-1-2-3 q8\prall
 @end lilypond
 
 Das Akkordwiederholungssymbol erinnert sich an das letzte Vorkommen
@@ -316,7 +316,7 @@ Warnung: zu viele kollidierende Notenspalten werden ignoriert
 während der Kompilation.  Diese Nachricht kann unterdrückt werden durch
 
 @example
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
 @end example
 
 Das unterdrückt jedoch nicht nur die Warnungen, sondern schaltet auch
@@ -888,14 +888,14 @@ Referenz der Interna:
 @rinternals{RestCollision}.
 
 @knownissues
-Die Benutzung von @code{\override NoteColumn #'ignore-collision = ##t}
+Die Benutzung von @code{\override NoteColumn.ignore-collision = ##t}
 führt dazu, dass Noten mit unterschiedlichen Köpfen in unterschiedlichen
 Stimmen falsch verschmolzen werden.
 
 @lilypond[quote,relative=1,verbatim]
 \mergeDifferentlyHeadedOn
 << { c16 a' b a } \\ { c,2 } >>
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
 << { c16 a' b a } \\ { c,2 } >>
 @end lilypond
 
index 4702401af020dbe88ec9d9695ef8c185ed734d5f..1b4d0ce67366b86b42da4380c505056d1b7fcfca 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Till Paala
 
@@ -59,16 +59,16 @@ Systemgruppen usw.  Siehe @ref{Partiturlayout}.
 Dieser Abschnitt behandelt Seitenlayout-Optionen innerhalb der @code{\paper}-Umgebung.
 
 @menu
-* Die \paper-Umgebung::
+* Die paper-Umgebung::
 * Papierformat und automatische Skalierung::
-* Vertikale \paper-Variablen mit festen Abständen::
-* Vertikale \paper-Variablen mit flexiblen Abständen::
-* \paper-Variablen für horizontale Abstände::
-* Andere \paper-Variablen::
+* Vertikale paper-Variablen mit festen Abständen::
+* Vertikale paper-Variablen mit flexiblen Abständen::
+* paper-Variablen für horizontale Abstände::
+* Andere paper-Variablen::
 @end menu
 
 
-@node Die \paper-Umgebung
+@node Die paper-Umgebung
 @subsection Die @code{\paper}-Umgebung
 @translationof The \paper block
 
@@ -274,11 +274,11 @@ in @ref{Das Papierformat einstellen}.
 
 Die vertikalen Dimensionen, die durch die automatische Skalierung verändert
 werden sind: @code{top-margin} und @code{bottom-margin} (siehe
-@ref{Vertikale \paper-Variablen mit festen Abständen}).  Die horizontalen
+@ref{Vertikale paper-Variablen mit festen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit festen Abständen}).  Die horizontalen
 Dimensionen, die durch die automatische Skalierung verändert werden, sind
 @code{left-margin}, @code{right-margin}, @code{inner-margin}, @code{outer-margin},
 @code{binding-offset}, @code{indent} und @code{short-indent} (siehe
-@ref{\paper-Variablen für horizontale Abstände}).
+@ref{paper-Variablen für horizontale Abstände,,@code{@bs{}paper}-Variablen für horizontale Abstände}).
 
 Die Standardwerte für diese Dimensionen sind in
 @file{ly/paper-defaults-init.ly} definiert, wobei interne Variablen mit den
@@ -289,8 +289,8 @@ benutzt werden.  Das sind die Werte für die Standardpapiergröße
 
 @seealso
 Notationsreferenz:
-@ref{Vertikale \paper-Variablen mit festen Abständen},
-@ref{\paper-Variablen für horizontale Abstände}.
+@ref{Vertikale paper-Variablen mit festen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit festen Abständen},
+@ref{paper-Variablen für horizontale Abstände,,@code{@bs{}paper}-Variablen für horizontale Abstände}.
 
 Installierte Dateien:
 @file{ly/paper-defaults-init.ly},
@@ -298,7 +298,7 @@ Installierte Dateien:
 
 
 
-@node Vertikale \paper-Variablen mit festen Abständen
+@node Vertikale paper-Variablen mit festen Abständen
 @unnumberedsubsubsec Vertikale @code{\paper}-Variablen mit festen Abständen
 @translationof Fixed vertical spacing \paper variables
 
@@ -368,7 +368,7 @@ Explizit definierte Papierformate überschreiben alle vom Benutzer erstellte
 Randeinstellung für die Ränder oben und unten.
 
 
-@node Vertikale \paper-Variablen mit flexiblen Abständen
+@node Vertikale paper-Variablen mit flexiblen Abständen
 @unnumberedsubsubsec Vertikale @code{\paper}-Variablen mit flexiblen Abständen
 @translationof Flexible vertical spacing \paper variables
 
@@ -571,7 +571,7 @@ Schnipsel:
 
 
 
-@node \paper-Variablen für horizontale Abstände
+@node paper-Variablen für horizontale Abstände
 @unnumberedsubsubsec \paper-Variablen für horizontale Abstände
 @translationof Horizontal spacing \paper variables
 
@@ -580,13 +580,13 @@ entsprechend dem Papierformat skaliert und können deshalb ungewollte
 Resultate haben.  Siehe @ref{Automatische Skalierung auf ein Papierformat}.}
 
 @menu
-* \paper-Variablen für Breite und Ränder::
-* \paper-Variablen für zweiseitigen Satz::
-* \paper-Variablen für Verschiebungen und Einrückungen::
+* paper-Variablen für Breite und Ränder::
+* paper-Variablen für zweiseitigen Satz::
+* paper-Variablen für Verschiebungen und Einrückungen::
 @end menu
 
 
-@node \paper-Variablen für Breite und Ränder
+@node paper-Variablen für Breite und Ränder
 @unnumberedsubsubsec \paper-Variablen für Breite und Ränder
 @translationof \paper variables for widths and margins
 
@@ -692,7 +692,7 @@ Explizit definierte Papierformate überschreiben alle vom Benutzer erstellte
 Randeinstellung für die Ränder oben und unten.
 
 
-@node \paper-Variablen für zweiseitigen Satz
+@node paper-Variablen für zweiseitigen Satz
 @unnumberedsubsubsec @code{\paper}-Variablen für zweiseitigen Satz
 @translationof \paper variables for two-sided mode
 
@@ -747,7 +747,7 @@ Installierte Dateien:
 @file{ly/paper-defaults-init.ly}.
 
 
-@node \paper-Variablen für Verschiebungen und Einrückungen
+@node paper-Variablen für Verschiebungen und Einrückungen
 @unnumberedsubsubsec @code{\paper}-Variablen für Verschiebungen und Einrückungen 
 @translationof \paper variables for shifts and indents
 
@@ -793,19 +793,19 @@ Schnipsel:
 @rlsr{Spacing}.
 
 
-@node Andere \paper-Variablen
+@node Andere paper-Variablen
 @subsection Andere @code{\paper}-Variablen
 @translationof Other \paper variables
 
 @menu
-* \paper-Variablen für den Zeilenumbruch::
-* \paper-Variablen für den Seitenumbruch::
-* \paper-Variablen für Seitenzahlen::
-* Verschiedene \paper-Variablen::
+* paper-Variablen für den Zeilenumbruch::
+* paper-Variablen für den Seitenumbruch::
+* paper-Variablen für Seitenzahlen::
+* Verschiedene paper-Variablen::
 @end menu
 
 
-@node \paper-Variablen für den Zeilenumbruch
+@node paper-Variablen für den Zeilenumbruch
 @unnumberedsubsubsec @code{\paper}-Variablen für den Zeilenumbruch
 @translationof \paper variables for line breaking
 @c TODO: Mention that ly:optimal-breaking is on by default? -mp
@@ -848,7 +848,7 @@ Notationsreferenz:
 @ref{Zeilenumbrüche}.
 
 
-@node \paper-Variablen für den Seitenumbruch
+@node paper-Variablen für den Seitenumbruch
 @unnumberedsubsubsec @code{\paper}-Variablen für den Seitenumbruch
 @translationof \paper variables for page breaking
 
@@ -857,22 +857,22 @@ Standardwerte, die hier nicht aufgelistet sind, finden sich in
 
 @table @code
 
-@item blank-after-score-page-force
-@funindex blank-after-score-page-force
+@item blank-after-score-page-penalty
+@funindex blank-after-score-page-penalty
 
 Die Strafpunke, die erteilt werden, wenn eine leere Seite nach einer
 Partitur und vor der nächsten vorkommt.  Der Standardwert hiervon ist
-kleiner als @code{blank-page-force}, sodass leere Seiten nach einer Partitur
+kleiner als @code{blank-page-penalty}, sodass leere Seiten nach einer Partitur
 leeren Seiten innerhalb einer Partitur vorgezogen werden.
 
-@item blank-last-page-force
-@funindex blank-last-page-force
+@item blank-last-page-penalty
+@funindex blank-last-page-penalty
 
 Die Strafpunkte, wenn eine Partitur auf einer ungeraden Seite
 beendet wird. Standard: @code{0}.
 
-@item blank-page-force
-@funindex blank-page-force
+@item blank-page-penalty
+@funindex blank-page-penalty
 
 Die Strafpunkte, wenn eine leere Seite mitten in einer Partitur
 auftritt.  Das wird nicht benutzt von @code{ly:optimal-breaking},
@@ -918,7 +918,7 @@ Installierte Dateien:
 @file{ly/paper-defaults-init.ly}.
 
 
-@node \paper-Variablen für Seitenzahlen
+@node paper-Variablen für Seitenzahlen
 @unnumberedsubsubsec @code{\paper}-Variablen für Seitenzahlen
 @translationof \paper variables for page numbering
 
@@ -969,7 +969,7 @@ eine leere Seite nach dem Deckblatt einfügen, damit die Noten
 auf der rechten Seite mit Seite 1 beginnen.
 
 
-@node Verschiedene \paper-Variablen
+@node Verschiedene paper-Variablen
 @unnumberedsubsubsec Verschiedene @code{\paper}-Variablen
 @translationof Miscellaneous \paper variables
 @table @code
@@ -1077,15 +1077,15 @@ die innerhalb der @code{\layout}-Umgebungen erlaubt sind, sind:
 
 @item
 @code{line-width}, @code{ragged-right} und @code{ragged-last}
-(siehe @ref{\paper-Variablen für Breite und Ränder})
+(siehe @ref{paper-Variablen für Breite und Ränder,,@code{@bs{}paper}-Variablen für Breite und Ränder})
 
 @item
 @code{indent} und @code{short-indent}
-(siehe @ref{\paper-Variablen für Verschiebungen und Einrückungen})
+(siehe @ref{paper-Variablen für Verschiebungen und Einrückungen,,@code{@bs{}paper}-Variablen für Verschiebungen und Einrückungen})
 
 @item
 @code{system-count}
-(siehe @ref{\paper-Variablen für den Zeilenumbruch})
+(siehe @ref{paper-Variablen für den Zeilenumbruch,,@code{@bs{}paper}-Variablen für den Zeilenumbruch})
 
 @end itemize
 
@@ -1096,12 +1096,12 @@ Hier ist ein Beispiel für eine @code{\layout}-Umgebung:
   indent = 2\cm
   \context @{
     \StaffGroup
-    \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8
+    \override StaffGrouper.staff-staff-spacing.basic-distance = #8
   @}
   \context @{
     \Voice
-    \override TextScript #'padding = #1
-    \override Glissando #'thickness = #3
+    \override TextScript.padding = #1
+    \override Glissando.thickness = #3
   @}
 @}
 @end example
@@ -1124,8 +1124,8 @@ Wenn also diese Umgebung:
 \layout @{
   \context @{
     \Voice
-    \override TextScript #'color = #magenta
-    \override Glissando #'thickness = #1.5
+    \override TextScript.color = #magenta
+    \override Glissando.thickness = #1.5
   @}
 @}
 @end example
@@ -1145,7 +1145,7 @@ Wenn eine Variable etwa so definiert wird:
 layoutVariable = \layout @{
   \context @{
     \Voice
-    \override NoteHead #'font-size = #4
+    \override NoteHead.font-size = #4
   @}
 @}
 @end example
@@ -1167,7 +1167,7 @@ eingesetzt werden, etwa:
   \layoutVariable
   \context @{
     \Voice
-    \override NoteHead #'color = #red
+    \override NoteHead.color = #red
   @}
 @}
 @end example
@@ -1401,7 +1401,7 @@ müssen.
   \remove "Forbid_line_break_engraver"
 } \relative c'' {
   <<
-    { c2. \times 2/3 { c4 c c } c2. | }
+    { c2. \tuplet 3/2 { c4 c c } c2. | }
     { s1 | \break s1 | }
   >>
 }
@@ -1409,10 +1409,10 @@ müssen.
 
 Genauso werden normalerweise Zeilenumbrüche auch verhindert, wenn Balken
 über die Taktenden hinausragen.  Dieses Verhalten kann verändert werden,
-indem man @code{\override Beam #'breakable = ##t} einstellt:
+indem man @code{\override Beam.breakable = ##t} einstellt:
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override Beam #'breakable = ##t
+\override Beam.breakable = ##t
 c2. c8[ c | \break
 c8 c] c2. |
 @end lilypond
@@ -1481,7 +1481,7 @@ kompliziert.  Mehr Einzelheiten finden sich in
 
 @seealso
 Notationsreferenz:
-@ref{\paper-Variablen für den Zeilenumbruch}.
+@ref{paper-Variablen für den Zeilenumbruch,,@code{@bs{}paper}-Variablen für den Zeilenumbruch}.
 
 Schnipsel:
 @rlsr{Spacing}.
@@ -1516,7 +1516,7 @@ Variablen auf @code{#t} (wahr) gesetzt werden, werden im ersten
 Fall die Notensysteme auf allen Seiten eng nach oben orientiert
 gesetzt werden.  Im zweiten Fall bezieht sich dies nur auf die
 letzte Seite.
-Zu Einzelheiten siehe @ref{Vertikale \paper-Variablen mit festen Abständen}.
+Zu Einzelheiten siehe @ref{Vertikale paper-Variablen mit festen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit festen Abständen}.
 
 Seitenumbrüche werden von der @code{page-breaking}-Funktion errechnet.
 LilyPond kennt drei Algorithmen um Seitenumbrüche zu errechnen:
@@ -1576,7 +1576,7 @@ Buchteilen benutzt werden.
 
 @seealso
 Notationsreferenz:
-@ref{\paper-Variablen für den Seitenumbruch}.
+@ref{paper-Variablen für den Seitenumbruch,,@code{@bs{}paper}-Variablen für den Seitenumbruch}.
 
 Schnipsel:
 @rlsr{Spacing}.
@@ -1639,7 +1639,7 @@ Doppelstrich), wird der Befehl nach diesem Taktstrich gesetzt.
 Der @code{Page_turn_engraver} liest die Kontexteigenschaft
 @code{minimumPageTurnLength} um zu erkennen, wie lang eine Stelle
 frei von Noten sein muss, damit ein Seitenumbruch in Frage kommt.  Der
-Standardwert hierfür ist @code{(ly:make-moment 1 1)}.  Wenn Sie
+Standardwert hierfür ist @code{(ly:make-moment 1/1)}.  Wenn Sie
 Seitenumbrüche zum Umblättern ausschalten wollen, können Sie
 einen sehr großen Wert angeben.
 
@@ -1649,7 +1649,7 @@ einen sehr großen Wert angeben.
   a4 b c d |
   R1 | % Ein Seitenumbruch zum Umblättern erlaubt
   a4 b c d |
-  \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
+  \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
   R1 | % Seitenumbruch nicht erlaubt
   a4 b r2 |
   R1*2 | % Seitenumbruch erlaubt
@@ -1745,8 +1745,8 @@ Es kann vorkommen, dass LilyPond direkte @code{\break} oder
 Einstellungen kann dieses Verhalten ausgeschaltet werden:
 
 @example
-\override NonMusicalPaperColumn #'line-break-permission = ##f
-\override NonMusicalPaperColumn #'page-break-permission = ##f
+\override NonMusicalPaperColumn.line-break-permission = ##f
+\override NonMusicalPaperColumn.page-break-permission = ##f
 @end example
 
 Wenn @code{line-break-permission} die Einstellung falsch
@@ -1779,8 +1779,8 @@ music = \relative c'' { c8 c c c }
   \layout {
     \context {
       \Score
-      \override NonMusicalPaperColumn #'line-break-permission = ##f
-      \override NonMusicalPaperColumn #'page-break-permission = ##f
+      \override NonMusicalPaperColumn.line-break-permission = ##f
+      \override NonMusicalPaperColumn.page-break-permission = ##f
     }
   }
 }
@@ -1852,20 +1852,16 @@ music = \relative c'' { c4 c c c }
 \score {
   \new Staff <<
     \new Voice {
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 0))
+      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
       s1 * 2 \break
 
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 35))
+      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 35))
       s1 * 3 \break
 
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 70))
+      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 70))
       s1 * 6 \break
 
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 105))
+      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 105))
       s1 * 5 \break
     }
     \new Voice {
@@ -1947,7 +1943,7 @@ Abschnitt behandelt wird, nur die vertikale Platzierung von Systemen und
 nicht-Systemzeilen in einzelnen Systemgruppen behandelt.  Die vertikale
 Platzierung zwischen einzelnen Systemgruppen, Partituren, Beschriftungen
 usw. und den Rändern wird durch @code{\paper}-Variablen kontrolliert, die
-@ref{Vertikale \paper-Variablen mit flexiblen Abständen}.
+@ref{Vertikale paper-Variablen mit flexiblen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit flexiblen Abständen}.
 
 @menu
 * Eigenschaften für Abstände innerhalb von Systemgruppen::
@@ -2017,14 +2013,14 @@ Referenzpunkte an:
 #(define zero-space '((padding . -inf.0) (basic-distance . 0)))
 
 alignToZero = \with {
-  \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space
-  \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space
+  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
+  \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
 }
 lowerCaseChords = \with {
   chordNameLowercaseMinor = ##t
 }
 staffAffinityDown = \with {
-  \override VerticalAxisGroup #'staff-affinity = #DOWN
+  \override VerticalAxisGroup.staff-affinity = #DOWN
 }
 labelContext =
 #(define-music-function
@@ -2042,13 +2038,13 @@ labelContext =
                          \lowerCaseChords }
   \context { \FretBoards  \alignToZero \staffAffinityDown }
   \context { \Score
-    \override BarLine #'stencil = ##f
-    \override DynamicText #'self-alignment-X = #-1
-    \override FretBoard #'X-offset = #1.75
-    \override InstrumentName #'minimum-Y-extent = #'(-2 . 2)
-    \override InstrumentName #'extra-offset = #'(0 . -0.5)
-    \override TextScript #'minimum-Y-extent = #'(-2 . 3)
-    \override TimeSignature #'stencil = ##f
+    \omit BarLine
+    \override DynamicText.self-alignment-X = #-1
+    \override FretBoard.X-offset = #1.75
+    \override InstrumentName.minimum-Y-extent = #'(-2 . 2)
+    \override InstrumentName.extra-offset = #'(0 . -0.5)
+    \override TextScript.minimum-Y-extent = #'(-2 . 3)
+    \omit TimeSignature
   }
 }
 
@@ -2099,7 +2095,7 @@ labelContext =
 Jeder der vertikalen Platzierungs-Grobeigenschaften (außer
 @code{staff-affinity}) benutzt die gleiche Alistenstruktur
 wie die @code{\paper}-Variablen, behandelt in
-@ref{Vertikale \paper-Variablen mit flexiblen Abständen}.  Besondere
+@ref{Vertikale paper-Variablen mit flexiblen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit flexiblen Abständen}.  Besondere
 Methoden um Alisten zu verändern finden sich in
 @ref{Alisten verändern}.  Grob-Eigenschaften sollten mit
 dem @code{\override}-Befehle innerhalb einer @code{\score}-
@@ -2112,12 +2108,11 @@ der zweite die Eigenschaft komplett neu definiert:
 
 @example
 \new Staff \with @{
-  \override VerticalAxisGroup #'default-staff-staff-spacing
-       #'basic-distance = #10
+  \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
 @} @{ @dots{} @}
 
 \new Staff \with @{
-  \override VerticalAxisGroup #'default-staff-staff-spacing =
+  \override VerticalAxisGroup.default-staff-staff-spacing =
     #'((basic-distance . 10)
        (minimum-distance . 9)
        (padding . 1)
@@ -2132,8 +2127,7 @@ Um Platzierungseinstellungen global vorzunehmen, müssen sie in der
 \layout @{
   \context @{
     \Staff
-    \override VerticalAxisGroup #'default-staff-staff-spacing
-         #'basic-distance = #10
+    \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
   @}
 @}
 @end example
@@ -2266,7 +2260,7 @@ für dieses Notensystem geändert werden.
 
 @seealso
 Notationsreferenz:
-@ref{Vertikale \paper-Variablen mit flexiblen Abständen},
+@ref{Vertikale paper-Variablen mit flexiblen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit flexiblen Abständen},
 @ref{Alisten verändern}.
 
 Installierte Dateien:
@@ -2315,7 +2309,7 @@ in denen die Systeme gruppiert sind.
 \layout {
   \context {
     \Staff
-    \override VerticalAxisGroup #'default-staff-staff-spacing =
+    \override VerticalAxisGroup.default-staff-staff-spacing =
       #'((basic-distance . 8)
          (minimum-distance . 7)
          (padding . 1))
@@ -2337,7 +2331,7 @@ in denen die Systeme gruppiert sind.
   % By setting 'padding to a negative value, staves can be made to
   % collide.  The lowest acceptable value for 'basic-distance is 0.
   \new Staff \with {
-    \override VerticalAxisGroup #'default-staff-staff-spacing =
+    \override VerticalAxisGroup.default-staff-staff-spacing =
       #'((basic-distance . 3.5)
          (padding . -10))
   } { \clef bass g2 r | }
@@ -2395,14 +2389,14 @@ beeinflussen kann:
 \layout {
   \context {
     \Score
-    \override StaffGrouper #'staff-staff-spacing #'padding = #0
-    \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1
+    \override StaffGrouper.staff-staff-spacing.padding = #0
+    \override StaffGrouper.staff-staff-spacing.basic-distance = #1
   }
 }
 
 <<
   \new PianoStaff \with {
-    \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+    \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
   } <<
     \new Staff { c'1 }
     \new Staff { c'1 }
@@ -2462,24 +2456,23 @@ werden:
 \layout {
   \context {
     \Lyrics
-    \override VerticalAxisGroup
-      #'nonstaff-nonstaff-spacing #'stretchability = #1000
+    \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
   }
 }
 
 \new StaffGroup
 <<
   \new Staff \with {
-    \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30))
+    \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
   } { c'1 }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #UP
+    \override VerticalAxisGroup.staff-affinity = #UP
   } \lyricmode { up }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #CENTER
+    \override VerticalAxisGroup.staff-affinity = #CENTER
   } \lyricmode { center }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #DOWN
+    \override VerticalAxisGroup.staff-affinity = #DOWN
   } \lyricmode { down }
   \new Staff { c'1 }
 >>
@@ -2549,21 +2542,16 @@ Veränderungen von @code{NonMusicalPaperColumn} mit dem
 @code{\overrideProperty}-Befehl sind hier aufgelistet:
 
 @example
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
                                  (Y-offset . 40))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (15)))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
                                  (Y-offset . 40)
                                  (alignment-distances . (15)))
 @end example
@@ -2619,14 +2607,11 @@ ersichtlich benutzt werden:
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 0))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 40))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 80))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 80))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -2658,16 +2643,13 @@ von @code{line-break-system-details}.
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 20)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 20)
                                            (alignment-distances . (15)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 60)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
                                            (alignment-distances . (15)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 100)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
                                            (alignment-distances . (15)))
           s1*5 \break
         }
@@ -2700,16 +2682,13 @@ die vertikale Position von einzelnen Notensystemen.
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 0)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0)
                                            (alignment-distances . (30 10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 60)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
                                            (alignment-distances . (10 10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 100)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
                                            (alignment-distances . (10 30)))
           s1*5 \break
         }
@@ -2791,13 +2770,13 @@ entsprechende Notensystem gesetzt.
 @lilypond[quote,ragged-right,relative=2,verbatim]
 c4_"Text"\pp
 r2.
-\once \override TextScript #'outside-staff-priority = #1
+\once \override TextScript.outside-staff-priority = #1
 c4_"Text"\pp % this time the text will be closer to the staff
 r2.
 % by setting outside-staff-priority to a non-number,
 % we disable the automatic collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
-\once \override DynamicLineSpanner #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
+\once \override DynamicLineSpanner.outside-staff-priority = ##f
 c4_"Text"\pp % now they will collide
 @end lilypond
 
@@ -2807,9 +2786,9 @@ padding bezeichnet), kann durch @code{outside-staff-padding}
 kontrolliert werden.
 
 @lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18]
-\once \override TextScript #'outside-staff-padding = #0
+\once \override TextScript.outside-staff-padding = #0
 a'^"This text is placed very close to the note"
-\once \override TextScript #'outside-staff-padding = #3
+\once \override TextScript.outside-staff-padding = #3
 c^"This text is padded away from the previous text"
 c^"This text is placed close to the previous text"
 @end lilypond
@@ -2832,7 +2811,7 @@ c4
 c''2
 % setting outside-staff-horizontal-padding fixes this
 R1
-\once \override TextScript #'outside-staff-horizontal-padding = #1
+\once \override TextScript.outside-staff-horizontal-padding = #1
 c,,4^"Text"
 c4
 c''2
@@ -2945,8 +2924,8 @@ besser sieht:
 {
   c'4 e''4 e'4 b'4 |
   b'4 e''4 b'4 e''4 |
-  \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
-  \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
+  \override Staff.NoteSpacing.stem-spacing-correction = #1.5
+  \override Staff.StaffSpacing.stem-spacing-correction = #1.5
   c'4 e''4 e'4 b'4 |
   b'4 e''4 b'4 e''4 |
 }
@@ -2975,7 +2954,7 @@ dehnbare Abstände (padding) eingesetzt werden, kann benutzt
 werden, um zusätzlichen Platz in eine Partitur einzufügen.
 
 @example
- \override Score.NonMusicalPaperColumn #'padding = #10
+ \override Score.NonMusicalPaperColumn.padding = #10
 @end example
 
 Es gibt derzeit keine Möglichkeit, den Platz zu verringern.
@@ -3062,8 +3041,7 @@ eine größere Dauer ist als @code{1 16}.
   \layout {
     \context {
       \Score
-      \override SpacingSpanner
-        #'base-shortest-duration = #(ly:make-moment 1 16)
+      \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
     }
   }
 }
@@ -3086,14 +3064,14 @@ werden:
 \score {
   <<
     \new Staff {
-      \times 4/5 {
+      \tuplet 5/4 {
         c8 c8 c8 c8 c8
       }
       c8 c8 c8 c8
     }
     \new Staff {
       c8 c8 c8 c8
-      \times 4/5 {
+      \tuplet 5/4 {
         c8 c8 c8 c8 c8
       }
     }
@@ -3101,7 +3079,7 @@ werden:
   \layout {
     \context {
       \Score
-      \override SpacingSpanner #'uniform-stretching = ##t
+      \override SpacingSpanner.uniform-stretching = ##t
     }
   }
 }
@@ -3112,8 +3090,8 @@ gesetzt, ohne dass Schlüssel, Taktlinie oder Verzierungsnoten
 zusätzlichen Platz erhalten.
 
 @lilypond[quote,ragged-right,relative=2,fragment,verbatim]
-\override Score.SpacingSpanner #'strict-note-spacing = ##t
-\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c]  c32[ c32] }
+\override Score.SpacingSpanner.strict-note-spacing = ##t
+\new Staff { c8[ c \clef alto c \grace { c16 c } c8 c c]  c32[ c32] }
 @end lilypond
 
 
@@ -3202,7 +3180,7 @@ benutzt werden können:
 @item @code{uniform-stretching} (gleichmäßige Dehnung)
 @item @code{strict-note-spacing} (strenge Notenverteilung)
 @item @code{\remove "Separating_line_group_engraver"} (entferne Liniengruppentrennungsengraver)
-@item @code{\override PaperColumn #'used = ##t} (PapierSpalte benutzt = wahr)
+@item @code{\override PaperColumn.used = ##t} (PapierSpalte benutzt = wahr)
 @end itemize
 
 In den Beispielen unten werden diese fünf unterschiedlichen Einstellungen
@@ -3218,7 +3196,7 @@ die klassischen Abstände und Flattersatz (ragged-right) eingesetzt werden:
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
@@ -3249,7 +3227,7 @@ eingeschaltet:
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
@@ -3257,7 +3235,7 @@ eingeschaltet:
  \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
+      proportionalNotationDuration = #(ly:make-moment 1/20)
     }
   }
 }
@@ -3278,10 +3256,10 @@ Die Eigenschaft @code{proportionalNotationDuration} braucht ein Argument,
 welches die Referenzdauer ist, anhand welcher alle Noten platziert werden.
 Hier wird die LilyPond Scheme-Funktion @code{make-moment} eingesetzt.  Sie
 braucht zwei Argumente: einen Zähler und einen Nenner, die einen Bruch einer
-Ganzen darstellen.  Die Funktion @code{(ly:make-moment 1 20)} ergibt also
+Ganzen darstellen.  Die Funktion @code{(ly:make-moment 1/20)} ergibt also
 eine Referenzdauer von einer Zwanzigstel.  Genauso gut können etwa die Dauern
-@code{(ly:make-moment 1 16)}, @code{(ly:make-moment 1 8)} oder
-@code{(ly:make-moment 3 97)} eingesetzt werden.
+@code{(ly:make-moment 1/16)}, @code{(ly:make-moment 1/8)} oder
+@code{(ly:make-moment 3/97)} eingesetzt werden.
 
 Die richtige Referenzdauer, mit der eine vernünftige Verteilung der Noten
 proportional möglich ist, muss durch Ausprobieren herausgefunden werden.
@@ -3295,7 +3273,7 @@ erscheinen, größere Referenzdauern zwingen sie dichter zusammen.
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
@@ -3303,7 +3281,7 @@ erscheinen, größere Referenzdauern zwingen sie dichter zusammen.
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 8)
+      proportionalNotationDuration = #(ly:make-moment 1/8)
     }
   }
 }
@@ -3313,7 +3291,7 @@ erscheinen, größere Referenzdauern zwingen sie dichter zusammen.
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
@@ -3321,7 +3299,7 @@ erscheinen, größere Referenzdauern zwingen sie dichter zusammen.
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 16)
+      proportionalNotationDuration = #(ly:make-moment 1/16)
     }
   }
 }
@@ -3331,7 +3309,7 @@ erscheinen, größere Referenzdauern zwingen sie dichter zusammen.
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
@@ -3339,7 +3317,7 @@ erscheinen, größere Referenzdauern zwingen sie dichter zusammen.
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 32)
+      proportionalNotationDuration = #(ly:make-moment 1/32)
     }
   }
 }
@@ -3364,12 +3342,12 @@ System mit anderen rhythmischen Werten hinzugefügt wird:
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
     \new RhythmicStaff {
-      \times 8/9 {
+      \tuplet 9/8 {
         c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
       }
     }
@@ -3390,12 +3368,12 @@ dieser Situation deutlich:
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
     \new RhythmicStaff {
-      \times 8/9 {
+      \tuplet 9/8 {
         c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
       }
     }
@@ -3403,7 +3381,7 @@ dieser Situation deutlich:
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
+      proportionalNotationDuration = #(ly:make-moment 1/20)
     }
   }
 }
@@ -3420,12 +3398,12 @@ sollte auch noch die gleichmäßige Dehnung (@code{uniform-stretching}) angescha
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
     \new RhythmicStaff {
-      \times 8/9 {
+      \tuplet 9/8 {
         c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
       }
     }
@@ -3433,8 +3411,8 @@ sollte auch noch die gleichmäßige Dehnung (@code{uniform-stretching}) angescha
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
-      \override SpacingSpanner #'uniform-stretching = ##t
+      proportionalNotationDuration = #(ly:make-moment 1/20)
+      \override SpacingSpanner.uniform-stretching = ##t
     }
   }
 }
@@ -3523,7 +3501,7 @@ die beiden Partituren unten:
 
 @lilypond[quote,verbatim,ragged-right]
 \new Staff {
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
   c''8
   c''8
   c''8
@@ -3533,8 +3511,8 @@ die beiden Partituren unten:
 }
 
 \new Staff {
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
-  \override Score.SpacingSpanner #'strict-note-spacing = ##t
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
+  \override Score.SpacingSpanner.strict-note-spacing = ##t
   c''8
   c''8
   c''8
@@ -3557,11 +3535,11 @@ noch eine Reihe von Möglichkeiten, die oft in proportionaler
 Notation benutzt werden.  Dazu gehören:
 
 @itemize
-@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
+@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
 @item @code{tupletFullLength = ##t}
-@item @code{\override Beam #'breakable = ##t}
-@item @code{\override Glissando #'breakable = ##t}
-@item @code{\override TextSpanner #'breakable = ##t}
+@item @code{\override Beam.breakable = ##t}
+@item @code{\override Glissando.breakable = ##t}
+@item @code{\override TextSpanner.breakable = ##t}
 @item @code{\remove "Forbid_line_break_engraver" in the Voice context}
 @end itemize
 
@@ -3724,7 +3702,7 @@ weit @qq{hervorstehen}, zu verschieben.
 
 @lilypond[verbatim,quote,relative=1]
 e4 c g\f c
-e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
+e4 c g-\tweak X-offset #-2.7 -\tweak Y-offset #2.5 \f c
 @end lilypond
 
 @item
@@ -3764,8 +3742,7 @@ angegeben wird:
   \layout {
     \context {
       \Score
-      \override SpacingSpanner
-        #'common-shortest-duration = #(ly:make-moment 1 2)
+      \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/2)
     }
   }
 }
index f577ce0ee397640c0cd811fb485aa029d44f1c42..1c694be3a401ce6368cf2189c29c48044a21cd39 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Till Paala
 
@@ -489,11 +489,11 @@ Die Anzahl der Notenlinien kann verändert werden:
 
 @lilypond[verbatim,quote,relative=2]
 f4 d \stopStaff
-\override Staff.StaffSymbol #'line-count = #2
+\override Staff.StaffSymbol.line-count = #2
 \startStaff g, e |
 
 f'4 d \stopStaff
-\revert Staff.StaffSymbol #'line-count
+\revert Staff.StaffSymbol.line-count
 \startStaff g, e |
 @end lilypond
 
@@ -507,10 +507,10 @@ einem Befehl geändert werden können.
 
 @lilypond[verbatim,quote,relative=2]
 f4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(1 3 5 -1 -3)
+\override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
 \startStaff g, e |
 f'4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(8 6.5 -6 -8 -0.5)
+\override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
 \startStaff g, e
 @end lilypond
 
@@ -524,7 +524,7 @@ von der Notenliniendicke abhängen.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'thickness = #3
+  \override StaffSymbol.thickness = #3
 }
 { f4 d g, e }
 @end lilypond
@@ -537,8 +537,8 @@ Werte ergibt die Dicke der Hilfslinien.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'thickness = #2
-  \override StaffSymbol #'ledger-line-thickness = #'(0.5 . 0.4)
+  \override StaffSymbol.thickness = #2
+  \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
 }
 { f'4 a, a,, f }
 @end lilypond
@@ -547,7 +547,7 @@ Die vertikale Position der Hilfslinien kann verändert werden:
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'ledger-positions = #'(-3 -2 -1 2 5 6)
+  \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
 }
 { f'4 a, a,, f }
 @end lilypond
@@ -560,11 +560,11 @@ definiert ist.  Der Befehl @code{stopStaff} wird benötigt, damit
 der Befehl sich auf das gesamte System (@code{StaffSymbol}) auswirkt.
 
 @lilypond[fragment,quote,relative=1]
-\override Staff.StaffSymbol #'line-positions =   #'(-8 0 2 4)
+\override Staff.StaffSymbol.line-positions =   #'(-8 0 2 4)
 d4 e f g
 \stopStaff
 \startStaff
-\override Staff.StaffSymbol #'ledger-positions = #'(-8 -6 (-4 -2) 0)
+\override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
 d4 e f g
 @end lilypond
 
@@ -573,7 +573,7 @@ Einstellung wirkt sich auch auf den Abstand der Hilfslinien aus.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'staff-space = #1.5
+  \override StaffSymbol.staff-space = #1.5
 }
 { f'4 d, g, e, }
 @end lilypond
@@ -654,8 +654,8 @@ bietet sich an, wenn nur einige Ossia-Systeme benötigt werden.
       \remove "Time_signature_engraver"
       alignAboveContext = #"main"
       fontSize = #-3
-      \override StaffSymbol #'staff-space = #(magstep -3)
-      \override StaffSymbol #'thickness = #(magstep -3)
+      \override StaffSymbol.staff-space = #(magstep -3)
+      \override StaffSymbol.thickness = #(magstep -3)
       firstClef = ##f
     }
     { e4 d f e }
@@ -677,10 +677,10 @@ Stücke setzt.
 <<
   \new Staff = ossia \with {
     \remove "Time_signature_engraver"
-    \override Clef #'transparent = ##t
+    \hide Clef
     fontSize = #-3
-    \override StaffSymbol #'staff-space = #(magstep -3)
-    \override StaffSymbol #'thickness = #(magstep -3)
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
   }
   { \stopStaff s1*6 }
 
@@ -715,10 +715,10 @@ Mehr Information zu @code{\Staff \RemoveEmptyStaves} findet sich in
 <<
   \new Staff = ossia \with {
     \remove "Time_signature_engraver"
-    \override Clef #'transparent = ##t
+    \hide Clef
     fontSize = #-3
-    \override StaffSymbol #'staff-space = #(magstep -3)
-    \override StaffSymbol #'thickness = #(magstep -3)
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
   } \relative c'' {
     R1*3
     c4 e8 d c2
@@ -736,7 +736,7 @@ Mehr Information zu @code{\Staff \RemoveEmptyStaves} findet sich in
 \layout {
   \context {
     \Staff \RemoveEmptyStaves
-    \override VerticalAxisGroup #'remove-first = ##t
+    \override VerticalAxisGroup.remove-first = ##t
   }
 }
 @end lilypond
@@ -892,8 +892,8 @@ diesem Fall sollten folgende Befehle eingesetzt werden, anstatt
 den Engraver zu entfernen:
 
 @example
-\override StaffSymbol #'stencil = ##f
-\override NoteHead #'no-ledgers = ##t
+\omit StaffSymbol
+\override NoteHead.no-ledgers = ##t
 @end example
 
 Zu den bekannten Fehlern und Warnungen, die mit @code{\Staff \RemoveEmptyStaves}
@@ -986,7 +986,7 @@ Wenn die Instrumentenbezeichnung zu lang ist, kann es vorkommen,
 dass die Bezeichnungen in einer Gruppe nicht zentriert werden.
 Um dennoch eine Zentrierung zu erhalten, müssen die Werte des
 Einzugs (@code{indent} und @code{short-indent}) vergrößert werden.
-Zu Einzelheiten siehe @ref{\paper-Variablen für Verschiebungen und Einrückungen}.
+Zu Einzelheiten siehe @ref{paper-Variablen für Verschiebungen und Einrückungen,,@code{@bs{}paper}-Variablen für Verschiebungen und Einrückungen}.
 
 @lilypond[verbatim,quote,ragged-right]
 \relative c'' {
@@ -1094,7 +1094,7 @@ wird dann benutzt, um den Wechsel vorzunehmen:
 
 @seealso
 Notationsreferenz:
-@ref{\paper-Variablen für Verschiebungen und Einrückungen},
+@ref{paper-Variablen für Verschiebungen und Einrückungen,,@code{@bs{}paper}-Variablen für Verschiebungen und Einrückungen},
 @ref{Umgebungs-Plugins verändern}.
 
 Schnipsel:
index 41f77ca38cdf78b5081ecbaa437888ee042931a8..fb2a9fce5c22718b6b16e9bae2ac6dae9fda79da 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @c Translators: Till Paala
 
@@ -143,7 +143,7 @@ viel Rechenaufwand.  Sollten Sie aber etwas bessere Leistung bevorzugen,
 schreiben Sie in Ihre Datei:
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
 @end example
 
 
@@ -163,7 +163,7 @@ können von einer Note bis zu einer anderen mit folgender
 Anweisung erstellt werden:
 
 @lilypond[verbatim,quote,relative=2]
-\override TextSpanner #'(bound-details left text) = "rit."
+\override TextSpanner.bound-details.left.text = "rit."
 b1\startTextSpan
 e,\stopTextSpan
 @end lilypond
@@ -179,7 +179,7 @@ Formatierung kann erreicht werden, indem man @code{\markup}-Blöcke
 einsetzt, wie beschrieben in @ref{Text formatieren}.
 
 @lilypond[quote,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text) =
+\override TextSpanner.bound-details.left.text =
   \markup { \upright "rit." }
 b1\startTextSpan c
 e,\stopTextSpan
@@ -304,9 +304,6 @@ c  c
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-marks-at-the-end-of-a-line.ly}
 
-@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
-{aligning-marks-with-various-notation-objects.ly}
-
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-marks-on-every-staff.ly}
 
@@ -1488,12 +1485,12 @@ Der Wert, der @code{font-size} übergeben wird, entspricht der geforderten
 Änderung in Bezug auf die Standardschriftgröße.
 
 @lilypond[quote,verbatim,relative=2]
-\override Score.RehearsalMark #'font-family = #'typewriter
+\override Score.RehearsalMark.font-family = #'typewriter
 \mark \markup "Ouverture"
-\override Voice.TextScript #'font-shape = #'italic
-\override Voice.TextScript #'font-series = #'bold
+\override Voice.TextScript.font-shape = #'italic
+\override Voice.TextScript.font-series = #'bold
 d2.^\markup "Allegro"
-\override Voice.TextScript #'font-size = #-3
+\override Voice.TextScript.font-size = #-3
 c4^smaller
 @end lilypond
 
@@ -1548,8 +1545,8 @@ FontConfig erkannt wird, kann in einer Partitur eingefügt werden.  Dazu
 verwendet man folgende Syntax:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.TimeSignature #'font-name = #"Bitstream Charter"
-\override Staff.TimeSignature #'font-size = #2
+\override Staff.TimeSignature.font-name = #"Bitstream Charter"
+\override Staff.TimeSignature.font-size = #2
 \time 3/4
 
 a1_\markup {
index 150141342872a95aa25c6dfae7590f06e760db1f..5e81851fe6cd53adbf5b980683a3766e66357ed0 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Till Paala
 
@@ -166,14 +166,14 @@ Infolgedessen müssen auch um Eigenschaftsbezeichnungen Leerzeichen gesetzt
 werden.  Ein Befehl heißt also @emph{nicht}:
 
 @example
-\override Score.LyricText #'font-shape = #'italic
+\override Score.LyricText.font-shape = #'italic
 @end example
 
 @noindent
 sondern
 
 @example
-\override Score . LyricText #'font-shape = #'italic
+\override Score.LyricText.font-shape = #'italic
 @end example
 
 Punkte, Gesangstext mit Akzenten, verschiedene lateinische und nicht-lateinische
@@ -1050,7 +1050,7 @@ verweist, mit @code{\context} angegeben:
   <<
     \new Lyrics = "lyrics" \with {
       % lyrics above a staff should have this override
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff {
       \new Voice = "melody" {
@@ -1081,7 +1081,7 @@ einesetzt werden können.  Hier ein Beispiel für die zweite Methode:
     \new Lyrics = "sopranos"
     \new Lyrics = "contraltos" \with {
       % lyrics above a staff should have this override
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff {
       \new Voice = "contraltos" {
@@ -1135,7 +1135,7 @@ Um den Abstand zwischen Silben zu vergrößern, kann die
 @lilypond[relative=1,verbatim,quote,ragged-right]
 {
   c c c c
-  \override Lyrics.LyricSpace #'minimum-distance = #1.0
+  \override Lyrics.LyricSpace.minimum-distance = #1.0
   c c c c
 }
 \addlyrics {
@@ -1161,7 +1161,7 @@ wirkt, muss sie im @code{layout}-Block vorgenommen werden.
   \layout {
     \context {
       \Lyrics
-      \override LyricSpace #'minimum-distance = #1.0
+      \override LyricSpace.minimum-distance = #1.0
     }
   }
 }
@@ -1179,7 +1179,7 @@ Seitenränder ragt, verlangt zusätzliche Computerzeit.  Um den
 Notensatz etwas zu beschleunigen, kann die Überprüfung abgestellt werden:
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
 @end example
 
 Damit Gesangstext auch nicht mit Taktlinien
@@ -1191,7 +1191,7 @@ zusammenstößt, kann folgende Einstellung gesetzt werden:
     \Lyrics
       \consists "Bar_engraver"
       \consists "Separating_line_group_engraver"
-      \override BarLine #'transparent = ##t
+      \hide BarLine
   @}
 @}
 @end example
@@ -1872,7 +1872,7 @@ geändert werden, wie das folgende Beispiel zeigt.
 <<
   \new Voice = melody \relative c' {
     f4 \appoggiatura a32 b4
-    \grace { f16[ a16] } b2
+    \grace { f16 a16 } b2
     \afterGrace b2 { f16[ a16] }
     \appoggiatura a32 b4
     \acciaccatura a8 b4
@@ -1901,7 +1901,7 @@ die erste des Musikstückes ist, kann ein @code{\with}- oder
 @lilypond[verbatim,ragged-right,quote]
 <<
   \new Voice = melody \relative c' {
-    \grace { c16[( d e f] }
+    \grace { c16( d e f }
     g1) f
   }
   \new Lyrics \with { includeGraceNotes = ##t }
@@ -1925,9 +1925,9 @@ unterschiedlichen Melodien auszurichten.  Das wird mit der
     <<
       \new Voice = "alternative" {
         \voiceOne
-        \times 2/3 {
+        \tuplet 3/2 {
           % show associations clearly.
-          \override NoteColumn #'force-hshift = #-3
+          \override NoteColumn.force-hshift = #-3
           f8 f g
         }
       }
@@ -2064,7 +2064,7 @@ text = \lyricmode {
           "It has two lines."
         }
       }
-      \vspace #0.1 % adds vertical spacing between verses
+      \combine \null \vspace #0.1 % adds vertical spacing between verses
       \line { \bold "3."
         \column {
           "This is verse three."
@@ -2080,7 +2080,7 @@ text = \lyricmode {
           "It has two lines."
         }
       }
-      \vspace #0.1 % adds vertical spacing between verses
+      \combine \null \vspace #0.1 % adds vertical spacing between verses
       \line { \bold "5."
         \column {
           "This is verse five."
@@ -2341,8 +2341,8 @@ Form genutzt werden, wie das Beispiel zeigt:
   \layout {
     \context {
       \Score
-      \override DynamicText #'direction = #UP
-      \override DynamicLineSpanner #'direction = #UP
+      \override DynamicText.direction = #UP
+      \override DynamicLineSpanner.direction = #UP
     }
   }
 }
@@ -2559,7 +2559,7 @@ der Figur angezeigt werden kann.
   #`((instrumentTransposition . ,(ly:make-pitch -1 0 0))
      (shortInstrumentName . "Kas.")
      (clefGlyph . "clefs.G")
-     (clefOctavation . -7)
+     (clefTransposition . -7)
      (middleCPosition . 1)
      (clefPosition . -2)
      (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Kaspar"))
@@ -2569,7 +2569,7 @@ der Figur angezeigt werden kann.
   #`((instrumentTransposition . ,(ly:make-pitch 0 0 0))
      (shortInstrumentName . "Mel.")
      (clefGlyph . "clefs.F")
-     (clefOctavation . 0)
+     (clefTransposition . 0)
      (middleCPosition . 6)
      (clefPosition . 2)
      (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Melchior"))
@@ -2627,7 +2627,7 @@ pianoRH = \relative c'' {
   % position name of cue-ing instrument just before the cue notes,
   % and above the staff
   \new CueVoice {
-    \override InstrumentSwitch #'self-alignment-X = #RIGHT
+    \override InstrumentSwitch.self-alignment-X = #RIGHT
     \set instrumentCueName = "Flute"
   }
   \cueDuring "flute" #UP { g4 bes4 }
@@ -2671,8 +2671,8 @@ pianoRH = \relative c'' {
   \transposition c'
   % position name of cue-ing instrument below the staff
   \new CueVoice {
-    \override InstrumentSwitch #'self-alignment-X = #RIGHT
-    \override InstrumentSwitch #'direction = #DOWN
+    \override InstrumentSwitch.self-alignment-X = #RIGHT
+    \override InstrumentSwitch.direction = #DOWN
     \set instrumentCueName = "Clar."
   }
   \cueDuring "clarinet" #DOWN { c4. g8 }
@@ -2813,8 +2813,8 @@ dialogue = \lyricmode {
 \score {
   <<
     \new Lyrics \with {
-      \override LyricText #'font-shape = #'italic
-      \override LyricText #'self-alignment-X = #LEFT
+      \override LyricText.font-shape = #'italic
+      \override LyricText.self-alignment-X = #LEFT
     }
     { \dialogue }
     \new Staff {
@@ -2883,7 +2883,7 @@ die Tonhöhen darzustellen, während der Rhythmus sich am Rhythmus
 der gesprochenen Worte orientiert.
 
 @lilypond[verbatim,quote]
-stemOff = { \override Staff.Stem #'transparent = ##t }
+stemOff = { \hide Staff.Stem }
 
 \relative c' {
   \stemOff
@@ -2975,9 +2975,9 @@ a4 b c2
 \bar "'"
 a4 b c2
 a4 b c2
-\bar ":"
+\bar ";"
 a4 b c2
-\bar "dashed"
+\bar "!"
 a4 b c2
 \bar "||"
 @end lilypond
@@ -2988,23 +2988,23 @@ Veränderung des @code{\breathe}-Zeichens:
 
 @lilypond[verbatim,quote]
 divisioMinima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-minima
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 divisioMaior = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maior
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 divisioMaxima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maxima
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 finalis = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::finalis
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 
@@ -3120,8 +3120,7 @@ global = {
       \layout {
         \context {
           \Score
-          \override SpacingSpanner
-          #'base-shortest-duration = #(ly:make-moment 1 2)
+          \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
         }
         \context {
           \Staff
index 31bb22c7c517d1034e7cab63e820b5c1d11a117f..452f275938a829b2fc40a61dd604410c00f5e628 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-    Translation of GIT committish: e5a609e373eae846857f9a6d70a402a3d42b7d94
+    Translation of GIT committish: ebe492ca408fb0d9abf80b94c56197eef8dc2f09
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
@@ -7,20 +7,20 @@
 
 <!--
 we depend on an external entity here, which we cannot control.  Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
 For some time, Google won't have the new location in its index, so the
-search would get nothing.  It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing.  It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
 -->
 
 <form action="http://google.com/search"
       method="get"
       name="search"
-      onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+      onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
                + search.brute_query.value"
-      onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+      onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
                   + search.brute_query.value"
-      onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+      onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
               + search.brute_query.value">
   <input type="hidden" name="btnG" value="Mit Google suchen">
   <input type="text" name="brute_query" onfocus="this.value=''" value="Suche">
diff --git a/Documentation/de/texidocs/GNUmakefile b/Documentation/de/texidocs/GNUmakefile
deleted file mode 100644 (file)
index 0ffa758..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
index 70ec26012b652440cb047fb464cf4d4c650ff1fd..c2ea8011be1d01877f09c5bdeba44ee0b1458124 100644 (file)
@@ -4,7 +4,7 @@
 Der Befehl @code{\\clef \"treble_8\"} ist gleichbedeutend mit einem
 expliziten Setzen der Eigenschaften von @code{clefGlyph},
 @code{clefPosition} (welche die vertikale Position des Schlüssels bestimmt),
-@code{middleCPosition} und @code{clefOctavation}.  Ein Schlüssel wird
+@code{middleCPosition} und @code{clefTransposition}.  Ein Schlüssel wird
 ausgegeben, wenn eine der Eigenschaften außer @code{middleCPosition} sich
 ändert.
 
@@ -14,7 +14,7 @@ auf dem System: das geschieht nur, wenn auch die Position des
 eingestrichenen@tie{}C (middleCPosition) angegeben wird.  Die
 Positionsparameter sind relativ zur Mittellinie des Systems, dabei versetzen
 positive Zahlen die Position nach oben, jeweils eine Zahl für jede Linie
-plus Zwischenraum.  Der @code{clefOctavation}-Wert ist normalerweise auf 7,
+plus Zwischenraum.  Der @code{clefTransposition}-Wert ist normalerweise auf 7,
 -7, 15 oder -15 gesetzt, aber auch andere Werte sind gültig.
 
 Wenn ein Schlüsselwechsel an einem Zeilenwechsel geschieht, wird das neue
index 0d3478ed923325e244281ea79e6536a88a242240..21a85322b10c27444456daf391bcf77bffedceed 100644 (file)
@@ -16,7 +16,7 @@ td { border: 1px solid black; text-align: center; }
 
 @end html
 @end ifhtml
-@emph{Zuletzt aktualisiert am Thu May 31 09:12:39 UTC 2012
+@emph{Zuletzt aktualisiert am Wed Dec 18 12:23:14 UTC 2013
 }
 @multitable @columnfractions  0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
 
@@ -101,11 +101,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #33ff21">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
@@ -204,34 +204,34 @@ ja
 @item
 1 Scheme-Übung
 @*
-6041
+6271
 @tab Till Paala
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #dfef77">teilweise (53 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise (53 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #39ff22">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 2 Schnittstellen für Programmierer
 @*
-5250
+5925
 @tab Till Paala
 @tab 
 @tab 
@@ -248,11 +248,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #8aff2d">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @end multitable
@@ -324,7 +324,7 @@ ja
 @item
 1 Übung
 @*
-2535
+2578
 @tab Till Paala
 @*
 Reinhold Kainhofer
@@ -333,54 +333,54 @@ Reinhold Kainhofer
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #dfef77">teilweise (48 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise (48 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #25fe1f">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 2 Übliche Notation
 @*
-4187
+4396
 @tab Till Paala
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #dfef77">teilweise (35 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise (35 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #4efe25">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 3 Grundbegriffe
 @*
-11130
+11144
 @tab Till Paala
 @*
 Reinhold Kainhofer
@@ -409,24 +409,24 @@ teilweise
 @item
 4 Die Ausgabe verändern
 @*
-15468
+16191
 @tab Till Paala
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #dfef77">teilweise (52 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise (52 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #2cff20">teilweise</span>
+<span style="background-color: #83fe2c">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -436,24 +436,24 @@ teilweise
 @item
 A Vorlagen
 @*
-219
+372
 @tab Till Paala
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #dfef77">teilweise (38 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise (38 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">teilweise</span>
+<span style="background-color: #76fe2a">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -475,7 +475,7 @@ LilyPond Benutzerhandbuch
 @item
 Überschriften
 @*
-355
+326
 @tab Till Paala
 @tab 
 @tab 
@@ -556,7 +556,7 @@ ja
 @item
 1.1 Tonhöhen
 @*
-4530
+4990
 @tab Till Paala
 @tab 
 @tab 
@@ -573,17 +573,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #47ff24">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 1.2 Rhythmus
 @*
-6352
+6890
 @tab Till Paala
 @tab 
 @tab 
@@ -600,17 +600,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #62ff28">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 1.3 Ausdrucksbezeichnungen
 @*
-1712
+1793
 @tab Till Paala
 @tab 
 @tab 
@@ -627,17 +627,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #39ff22">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 1.4 Wiederholungszeichen
 @*
-1011
+1050
 @tab Till Paala
 @tab 
 @tab 
@@ -654,17 +654,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #40fe23">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 1.5 Gleichzeitig erscheinende Noten
 @*
-2640
+2821
 @tab Till Paala
 @tab 
 @tab 
@@ -681,17 +681,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #39ff22">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 1.6 Notation auf Systemen
 @*
-2392
+2476
 @tab Till Paala
 @tab 
 @tab 
@@ -708,17 +708,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #4efe25">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 1.7 Anmerkungen
 @*
-949
+954
 @tab Till Paala
 @tab 
 @tab 
@@ -735,17 +735,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #47ff24">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 1.8 Text
 @*
-2729
+2816
 @tab Till Paala
 @tab 
 @tab 
@@ -762,11 +762,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #33ff21">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
@@ -799,7 +799,7 @@ ja
 @item
 2.1 Notation von Gesang
 @*
-4758
+5190
 @tab Till Paala
 @tab 
 @tab 
@@ -816,17 +816,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #47ff24">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 2.2 Tasteninstrumente und andere Instrumente mit mehreren Systemen
 @*
-862
+888
 @tab  Till Paala
 @tab 
 @tab 
@@ -843,11 +843,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #25fe1f">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
@@ -870,17 +870,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #2cff20">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 2.4 Saiteninstrumente mit Bünden
 @*
-2675
+2662
 @tab Till Paala
 @tab 
 @tab 
@@ -897,7 +897,7 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #33ff21">teilweise</span>
+<span style="background-color: #39ff22">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -907,7 +907,7 @@ teilweise
 @item
 2.5 Schlagzeug
 @*
-812
+811
 @tab Till Paala
 @tab 
 @tab 
@@ -924,17 +924,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #6fff29">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 2.6 Blasinstrumente
 @*
-321
+324
 @tab Till Paala
 @tab 
 @tab 
@@ -961,7 +961,7 @@ ja
 @item
 2.7 Notation von Akkorden
 @*
-2022
+1972
 @tab Till Paala
 @tab 
 @tab 
@@ -978,11 +978,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #33ff21">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
@@ -1015,7 +1015,7 @@ ja
 @item
 2.9 Notation von alter Musik
 @*
-4752
+5375
 @tab Till Paala
 @tab 
 @tab 
@@ -1032,11 +1032,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #6fff29">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
@@ -1069,7 +1069,7 @@ ja
 @item
 3 Allgemeine Eingabe und Ausgabe
 @*
-8701
+10392
 @tab Till Paala
 @tab 
 @tab 
@@ -1086,7 +1086,7 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #39ff22">teilweise</span>
+<span style="background-color: #9eff30">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -1096,7 +1096,7 @@ teilweise
 @item
 4 Abstände
 @*
-11234
+12256
 @tab Till Paala
 @tab 
 @tab 
@@ -1113,34 +1113,34 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #83fe2c">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 5 Standardeinstellungen verändern
 @*
-12679
+15289
 @tab Till Paala
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #dfef77">teilweise (85 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise (85 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">teilweise</span>
+<span style="background-color: #91ff2e">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -1150,7 +1150,7 @@ teilweise
 @item
 A Notationsübersicht
 @*
-2177
+2176
 @tab Till Paala
 @tab 
 @tab 
@@ -1194,11 +1194,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #47ff24">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @end multitable
@@ -1270,7 +1270,7 @@ ja
 @item
 1 @command{lilypond} starten
 @*
-4615
+4537
 @tab Reinhold Kainhofer
 @*
 Till Paala
@@ -1279,17 +1279,17 @@ Till Paala
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">teilweise (98 %)</span>
+<span style="background-color: #1fff1f">ja</span>
 @end html
 @end ifhtml
 @ifnothtml
-teilweise (98 %)
+ja
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #dbff38">teilweise</span>
+<span style="background-color: #47ff24">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -1299,7 +1299,7 @@ teilweise
 @item
 2 Dateien mit @command{convert-ly} aktualisieren
 @*
-1209
+1484
 @tab Till Paala
 @tab 
 @tab 
@@ -1316,11 +1316,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #91ff2e">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
@@ -1343,17 +1343,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #39ff22">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 4 Externe Programme
 @*
-2390
+2817
 @tab Till Paala
 @*
 Reinhold Kainhofer
@@ -1362,27 +1362,27 @@ Reinhold Kainhofer
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #dfef77">teilweise (87 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise (87 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #6fff29">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 5 Vorschläge zum Schreiben von LilyPond-Eingabe-Dateien
 @*
-2694
+2692
 @tab Till Paala
 @tab 
 @tab 
@@ -1399,11 +1399,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #2cff20">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @end multitable
@@ -1475,7 +1475,7 @@ ja
 @item
 Einleitung
 @*
-4753
+4937
 @tab Till Paala
 @tab 
 @tab 
@@ -1492,17 +1492,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #54ff26">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 Download
 @*
-1211
+1201
 @tab Till Paala
 @tab 
 @tab 
@@ -1519,17 +1519,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #39ff22">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 Handbücher
 @*
-1214
+1284
 @tab Till Paala
 @tab 
 @tab 
@@ -1546,34 +1546,34 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #47ff24">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise
 @end ifnothtml
 @tab vor-GDP
 @item
 Gemeinschaft
 @*
-3006
+3073
 @tab  Till Paala
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #dfef77">teilweise (97 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+teilweise (97 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">teilweise</span>
+<span style="background-color: #25fe1f">teilweise</span>
 @end html
 @end ifhtml
 @ifnothtml
diff --git a/Documentation/de/usage/GNUmakefile b/Documentation/de/usage/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index d13b06c5258d4fa3eee13f59dfad293f4f0f2654..fc31bf40038478cc1883e0732dd4405ba5ef8604 100644 (file)
@@ -373,7 +373,7 @@ Quantisiert Tondauern zu Vielfachen von @var{LÄNGE}.
 @item -e, --explicit-durations
 Gibt alle Tondauern explizit an.
 
-@item -h,--help
+@item -h, --help
 Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
 
 @item -k, --key=@var{acc}[:@var{Moll}]
@@ -446,7 +446,7 @@ unterstützt:
 @item -a, --absolute
 Konvertiert in absolute Tonhöhen.
 
-@item -h,--help
+@item -h, --help
 Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
 
 @item -l, --language=SPRACHE
@@ -472,13 +472,13 @@ von Artikulations- und Lautstärkebezeichnungen.
 Konvertiert keine Informationen über die Balkensetzung aus der
 MusicXML-Datei. Stattdessen wird dies LilyPond überlassen.
 
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
 Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. Wird
 als @var{Dateiname} nur @file{-} angegeben, wird das Ergebnis der Konvertierung
 an der Kommandozeile ausgegeben. Wird diese Option nicht angegeben, so
 erfolgt die Ausgabe in die Datei @var{XML-Datei}@file{.ly}.
 
-@item -r,--relative
+@item -r, --relative
 Konvertiert in relative Tonhöhen. (Standardeinstellung)
 
 @item -v, --verbose
@@ -487,7 +487,7 @@ Gibt ausführliche informative Meldungen während der Konvertierung aus.
 @item --version
 Gibt die Versionsnummer aus.
 
-@item  -z,--compressed
+@item -z, --compressed
 Die Eingabedatei wird als komprimierte MusicXML-Datei eingelesen.
 Dies ist die Standardeinstellung für Dateien mit der Erweiterung
 @file{.xml}.
@@ -521,15 +521,15 @@ Die folgenden Kommandozeilenoptionen werden von @command{abc2ly}
 unterstützt:
 
 @table @code
-@item -b,--beams=None
+@item -b, --beams=None
 Die Balkensetzung aus der ABC-Datei erhalten.
-@item -h,--help
+@item -h, --help
 Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
 Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben.
-@item -s,--strict
+@item -s, --strict
 Strenge Auslegung einer erfolgreichen Konvertierung.
-@item -v,--version
+@item -v, --version
 Gibt die Versionsnummer aus.
 @end table
 
@@ -608,9 +608,9 @@ Die folgenden Kommandozeilenoptionen werden von @command{etf2ly}
 unterstützt:
 
 @table @code
-@item -h,--help
+@item -h, --help
 Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
 Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben.
 @item --version
 Gibt die Versionsnummer aus.
index 829379030d341a848d70e4ad827053c55edfe3f0..02ad688826283cf21ec95b0441a806f44c73b2ef 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Reinhold Kainhofer
 @c Translation checkers: Till Paala
@@ -96,7 +96,7 @@ kombinieren. Zum Beispiel:
 
 \begin{lilypond}
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 \end{lilypond}
 
@@ -157,7 +157,7 @@ kombinieren. Zum Beispiel:
 
 @lilypond
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 @end lilypond
 
index 37d86c525bccd9da5c97aff3a1430d300001ca02..a4a46406a21f7060637815548542d3d46810da0c 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @c Translators: Reinhold Kainhofer, Till Paala
 @c Translation checkers: Till Paala
@@ -154,13 +154,13 @@ Die folgenden Kommandozeilenoptionen werden von @command{lilypond} unterstützt:
 
 @table @code
 
-@item -d,--define-default=@var{Variable}=@var{Wert}
+@item -d, --define-default=@var{Variable}=@var{Wert}
 Siehe @ref{Fortgeschrittene Optionen auf der Kommandozeile für LilyPond}.
 
 @cindex Scheme, Auswertung von Ausdrücken
 @cindex Auswertung von Ausdrücken, Scheme
 
-@item -e,--evaluate=@var{expr}
+@item -e, --evaluate=@var{expr}
 Wertet den Scheme-Ausdruck @var{expr} aus, bevor die @file{.ly} Dateien
 gelesen und interpretiert werden.
 Die @code{-e} Option kann auch mehrfach angegeben werden, die Ausdrücke
@@ -186,20 +186,20 @@ Anführungsstriche einsetzen.}
 
 @cindex Ausgabeformat
 
-@item -f,--format=@var{Format}
+@item -f, --format=@var{Format}
 Bestimmt das Ausgabeformat. Mögliche Werte von @var{Format} sind
 @code{svg}, @code{ps}, @code{pdf} und @code{png}.
 
 Beispiel: @code{lilypond -fpng @var{Dateiname}.ly}
 
-@item -h,--help
+@item -h, --help
 Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
 
-@item -H,--header=@var{FELD}
+@item -H, --header=@var{FELD}
 Gibt den Inhalt eines Feldes aus dem @code{\header}-Block in die Datei
 @file{Dateiname.@var{FELD}} aus.
 
-@item -i,--init=@var{Initialisierungsdatei}
+@item -i, --init=@var{Initialisierungsdatei}
 Benutzt @var{Initialisierungsdatei} zur gesamten Programminitialisierung. Der
 Standardwert ist @file{init.ly}.
 
@@ -216,7 +216,7 @@ fort, wenn die gesuchte Datei nicht in dem Verzeichnis gefunden wird.
 @cindex Kerker, Programm ausführen
 @cindex Jail, Programm ausführen
 
-@item -j,--jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis}
+@item -j, --jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis}
 Führt @command{lilypond} in einem chroot-Jail aus.
 
 Die @option{--jail} Option ist eine flexiblere Alternative zu @option{-dsafe}, wenn
@@ -283,7 +283,7 @@ auch @ref{LilyPond in chroot-Kerker}
 @cindex Logstufe
 @cindex Ausgabe, Ausführlichkeit
 
-@item -l,--loglevel=@var{Logstufe}
+@item -l, --loglevel=@var{Logstufe}
 Passt die Ausführlichkeit der Ausgabe auf der Kommandozeile entsprechend
 @var{Logstufe} an.  Mögliche Werte sind:
 
@@ -319,7 +319,7 @@ haben können.
 @cindex Ausgabedateiname
 @cindex Dateiname der Ausgabe bestimmen
 
-@item -o,--output=@var{DATEI} oder @var{ORDNER}
+@item -o, --output=@var{DATEI} oder @var{ORDNER}
 Schreibt das Ergebnis der Verarbeitung mit LilyPond in die Ausgabedatei
 @var{DATEI}.  Wenn ein Verzeichnis mit dem Namen existiert, werden die Ausgabedateien
 in dieses Verzeichnis gespeichert, wobei der Dateiname der Eingabedatei
@@ -348,14 +348,14 @@ werden durch
 @item --pdf
 Erzeugt PDF-Dateien. Dies impliziert @code{--ps}.
 
-@item -v,--version
+@item -v, --version
 Gibt die Versionsnummer aus.
 
-@item -V,--verbose
+@item -V, --verbose
 Gibt ausführliche informative Meldungen aus: Zeigt die vollen Dateipfade
 aller gelesenen Dateien sowie Informationen über die Laufzeit.
 
-@item -w,--warranty
+@item -w, --warranty
 Zeigt die Garantiebedingungen an, unter denen GNU LilyPond steht. (Es besteht
 @strong{KEINERLEI GARANTIE}!)
 
@@ -1031,7 +1031,7 @@ rot macht, aber als Resultat hat man zwei Systeme, während die
 Notenköpfe immernoch schwarz im unteren System erscheinen.
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
 \new Staff { a }
 @end lilypond
 
@@ -1043,7 +1043,7 @@ richtige Schreibweise wäre:
 
 @lilypond[quote,verbatim,relative=2]
 \new Staff {
-  \override Staff.NoteHead #'color = #red
+  \override Staff.NoteHead.color = #red
   a
 }
 @end lilypond
@@ -1136,7 +1136,7 @@ indem man einen der Kontexte als System erscheinen lässt, indem man ihm
 zu Beginn hinzufügt:
 
 @example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
 @end example
 
 Zu Einzelheiten siehe @qq{Abstand von Nicht-Notensystemzeilen} in
index 392844c26a9a9f69dbdb9e9849efd18bc2cf1e1d..bd84a1427ec67b9e9cd987fb212d124200f03b2e 100644 (file)
@@ -131,16 +131,16 @@ convert-ly [@var{Option}]@dots{} @var{Dateiname}@dots{}
 Folgende Optionen können benutzt werden:
 
 @table @code
-@item -e,--edit
+@item -e, --edit
 Die Konvertierung direkt am Original vornehmen, sodass es direkt verändert wird.
 
-@item -f,--from=@var{von-Versionsnummer}
+@item -f, --from=@var{von-Versionsnummer}
 Stellt die Versionsnummer ein, ab welcher die Konvertierung begonnen werden
 soll.  Wenn die Option nicht benutzt wird, rät @command{convert-ly} die Versionsnummer
 anhand des @code{\version}-Eintrags in der Datei.  Beispielsweise
 @option{--from=2.10.25}
 
-@item -n,--no-version
+@item -n, --no-version
 Normalerweise fügt @command{convert-ly} einen @code{\version}-Eintrag
 zu der konvertierten Datei hinzu.  Mit dieser Option wird das unterdrückt.
 
diff --git a/Documentation/de/web/GNUmakefile b/Documentation/de/web/GNUmakefile
deleted file mode 100644 (file)
index 000480f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-depth = ../../..
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index f3fe6338812ad6c7653c64a913ddd1c9c7f4cbc1..8b68907ace7b0e1a08486c5c790307dc8ea9d459 100644 (file)
@@ -301,33 +301,37 @@ Betroffen einbezieht.
 @divClass{column-center-top}
 @subheading Was sind @qq{Minimalbeispiele}?
 
-Ein Minimalbeispiel ist ein Beispiel, von dem @strong{nichts} mehr entfernt
-werden kann.
+Ein Minimalbeispiel ist eine vollständige Quelldatei, die
+@strong{nicht} mehr weiter reduziert werden kann, ohne dass das
+illustrierte Problem verschwindet.  Es sollten keine Warnungen und
+Fehlermeldungen produziert werden, die nicht mit dem Problem im
+Zusammenhang stehen.
+
 @divEnd
 
 @divClass{column-left-bottom}
-@subheading Warum sollte ich so etwas tun?
+@subheading Warum sollte ich Minimalbeispiele erstellen?
 
 @divClass{keep-bullets}
 @itemize
 
 @item
 Je einfacher ein Beispiel ist, um so schneller können mögliche
-Hilfeleistende es verstehen und Ihnen helfen.
+Hilfeleistende das Beispiel untersuchen, das auftretende Problem
+einkreisen und Ihnen helfen.
 
 @item
-Ein kleines Beispiel zeigt, dass Sie sich zuerst Mühe gegeben
-haben, das Problem selber zu lösen.  Wenn Leute große Abschnitte
-an Code einschicken, sieht es so aus, dass sie sich auch nicht
-interessieren, ob ihnen geholfen wird oder nicht.
+Die effiziente Analyse eines Problems erfordert ohnehin eine
+Reduktion auf das wesentliche.  Kippen Sie umfangreiches Material
+in der Liste ab, so scheint Ihnen die Lösung Ihres Problems keine
+eigene Mühe wert.
 
 @item
-Ein Minimalbeispiel zu erstellen hilft Ihnen zu verstehen,
-was vorgeht.  Viele falsche Problemberichte können vermieden werden,
-wenn man versucht, erst einmal ein Minimalbeispiel zu erstellen.
-Wenn Sie einen @qq{Bug} in Ihrem Minimalbeispiel nicht reproduzieren
-können, was das Problem wohl eher zu geringes Verständnis von
-LilyPond, nicht jedoch ein Fehler.
+Ein Minimalbeispiel zu erstellen hilft Ihnen zu verstehen, was
+vorgeht.  Viele Problemberichte erübrigen sich schon während der
+Erstellung eines Minimalbeispiels.  Ist ein @qq{Bug} mit einem
+bestimmten Minimalbeispiel nicht reproduzierbar, ist es
+wahrscheinlich, daß er andere Ursachen als vermutet hat.
 
 @end itemize
 @divEnd
index 0cca1d5fba7da0a94975708ba5a6a8f90a808a25..f88f69d1da686924c5dce64cda3ebf7ec67aaf17 100644 (file)
@@ -302,8 +302,6 @@ Alle Logos und Produktabbildungen erkennen Copyright und Trademark an.
 @downloadStableDarwinNormal
 Für MacOS X 10.4 und höher auf Intel-Prozessoren (wenn Sie Zweifel haben, benutzen Sie diese Version).
 
-MacOS X 10.7 Lion wird noch nicht unterstützt.
-
 @item
 @sourceimage{logo-macosx,,,}
 @downloadStableDarwinPPC
index 61768740b8187cf43b635e6b22f72397b22740a7..d236a6f28955938cbfdc204c1961042a73ee97ac 100644 (file)
@@ -229,9 +229,9 @@ es sich sehr, dieses Glossar zu Hilfe zu ziehen.
 
 @docLinks{Glossar, music-glossary,
   @rglosnamed{Top,Glossar},
-  @manualStableGlossarySplit-de,
-  @manualStableGlossaryBig-de, 1 MB,
-  @manualStableGlossaryPdf-de, 1.5 MB}
+  @manualStableGlossarySplit,
+  @manualStableGlossaryBig, 1 MB,
+  @manualStableGlossaryPdf, 1.5 MB}
 
 @divEnd
 
@@ -506,9 +506,9 @@ erklärt.  Jeder Abschnitt der Notationsreferenz hat einen
 
 @docLinks{Interna, internals,
   @rinternalsnamed{Top,Interna},
-  @manualStableInternalsSplit-de,
-  @manualStableInternalsBig-de, 2.5 MB,
-  @manualStableInternalsPdf-de, 2.8 MB}
+  @manualStableInternalsSplit,
+  @manualStableInternalsBig, 2.5 MB,
+  @manualStableInternalsPdf, 2.8 MB}
 
 @divEnd
 
@@ -529,7 +529,7 @@ erklärt.  Jeder Abschnitt der Notationsreferenz hat einen
 @unnumberedsec Alles
 @translationof All
 
-@divClass{column-center-bottom}
+@divClass{column-left-top}
 @subheading Versionen zum Herunterladen
 
 @ifclear web_version
@@ -556,11 +556,11 @@ erhältlich.
 @divClass{keep-bullets}
 @itemize
 
-@item @uref{http://lilypond.org/doc/v2.12/Documentation/,
-LilyPond 2.12 Dokumentation} (auf deutsch)
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals.de.html,
+LilyPond 2.14 Dokumentation} (auf deutsch)
 
-@item @uref{http://lilypond.org/doc/v2.11/Documentation/,
-LilyPond 2.11 Dokumentation} (auf deutsch)
+@item @uref{http://lilypond.org/doc/v2.12/Documentation/index.de.html,
+LilyPond 2.12 Dokumentation} (auf deutsch)
 
 @item @uref{http://lilypond.org/doc/v2.10/Documentation/,
 LilyPond 2.10 Dokumentation} (auf englisch)
index dc127f98c204ab1e632cb7cf0dc6eb303d973da5..dc200b17b013892f2179fc58e933d1afacb66e74 100644 (file)
@@ -1,6 +1,5 @@
 ISOLANG = es
 depth = ../..
-SUBDIRS = essay learning notation texidocs usage web extending included
 STEPMAKE_TEMPLATES = documentation texinfo
 LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
 
index 94e7a00a90c9adb5928e8250c3a1615e03f005ce..863605837f0bae7c782a08235cefd4f614f01070 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 2e3c5412eacdbfd976d2cd6c5cc90f272ddfc263
+    Translation of GIT committish: 714ec3008267aa3abd4f3bfb05da7eede2eb4e27
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -44,7 +44,7 @@ Véase el manual del usuario, \NAME\
 @finalout
 
 @node Top
-@top Funcionalidades nuevas de la versión 2.16 desde la 2.14
+@top Funcionalidades nuevas de la versión 2.18 desde la 2.16
 
 @allowcodebreaks false
 
@@ -68,408 +68,468 @@ which scares away people.
 * only show user-visible changes.
 
 @end ignore
-@item
-Se contemplan las plicas de pentagrama cruzado en acordes, utilizando
-@code{crossStaff} y el grabador @code{Span_stem_engraver}.  Éste
-efectúa el cálculo de la longitud de las plicas de pentagrama cruzado
-de forma automática.
-@lilypondfile[quote]
-{cross-staff-stems.ly}
 
 @item
-La sintaxis de las palabras (secuencias de caracteres que se reconocen
-sin encerrarlas entre comillas) y las instrucciones (que ahora son
-siempre una barra invertida @samp{\} seguida de una palabra) se ha
-unificado para todos los modos: ahora consiste en caracteres
-alfabéticos, posiblemente comprendiendo guiones aislados @samp{-} y
-guiones bajos @samp{_}.
-
-Una consecuencia es que la utilización de guiones de texto sin
-entrecomillar como (literalmente)
-@example
-@{ c-script c\f_script @}
-@end example
-ahora tienden a producir una música no válida.  La omisión de las
-comillas para texto arbitrario en lugar de palabras clave nunca ha
-sido una buena práctica o se ha documentado, y es poco probable que se
-haya utilizado mucho.
-
-Quedarse con las convenciones establecidas (como no utilizar guiones o
-guiones bajos para los nombres de instrucción orientados a ser
-utilizados dentro de la música) sigue siendo recomendable.  El motivo
-de este cambio es el reconocimiento más robusto de las unidades
-léxicas de LilyPond para sí mismo así como para las herramientas
-externas que interpretan su sintaxis.
+Pueden colocarse dentro de una sola variable, o ser devueltas por
+una función de evento, varias articulaciones:
 
-@item
-Se contempla el canto kievano en notación cuadrada:
-@lilypond[quote,relative=1,verbatim]
-\new KievanVoice {
-  \cadenzaOn
-  c d e f g a bes
-  \bar "kievan"
-}
+@lilypond[verbatim,quote]
+sempreStacc = -. ^\markup \italic sempre
+\relative { c''4\sempreStacc c c c }
 @end lilypond
 
 @item
-Los puntillos ahora evitan a las otras voces en la polifonía a dos
-partes, de manera que los usuarios pueden trasladar el grabador
-@code{Dot_column_engraver} para ajustar los puntillos de forma
-independiente para cada voz.
-
-@lilypond[quote]
-\layout {
-  \context {
-    \Staff
-    \remove "Dot_column_engraver"
-  } \context {
-    \Voice
-    \consists "Dot_column_engraver"
-  }
+La línea de base de los elementos de marcado que constituyen
+partituras se toma actualmente del punto de referencia
+(normalmente la línea central del pentagrama) del primer sistema
+de la parte inferior, en lugar de la parte superior del rectángulo
+circundante. Lo siguente
+@lilypond[verbatim,quote]
+\markup {
+  violin: \score { \new Staff { <g d' a' e''>1 }
+                   \layout { indent=0 } } ,
+  cello: \score { \new Staff { \clef "bass" <c, g, d a> }
+                  \layout { indent=0 } }
 }
-\relative c'' <<
-  { \time 6/8
-    <d f g>4. <d f g> <f, g> b
-  } \\ {
-    <f g b>4. <g b d> <b d> <e, g>
-  } >>
 @end lilypond
-
-@item
-Ahora se incluye en LilyPond una función de Scheme, desarrollada por
-varios usuarios, para ajustar los puntos de control de las curvas como
-ligaduras de unión y de expresión.
-
-@lilypond[quote,verbatim,relative=2]
-g8->( bes,-.) d4
-\shape Slur #'((-0.5 . 1.5) (-3 . 0) (0 . 0) (0 . 0))
-g8->( bes,!-.) d4
+tenía anteriormente el siguiente aspecto:
+@lilypond[quote]
+\markup {
+  violin: \general-align #Y #UP
+          \score { \new Staff { <g d' a' e''>1 }
+                   \layout { indent=0 } } ,
+  cello:  \general-align #Y #UP
+          \score { \new Staff { \clef "bass" <c, g, d a> }
+                  \layout { indent=0 } }
+}
 @end lilypond
-
-@item
-El uso de las especificaciones de @code{\tempo} en los bloques
-@code{\midi} (eliminados en la versión 2.9.16 en favor del ajuste
-explícito de @code{tempoWholesPerMinute}) ha resurgido: ahora
-cualquier clase de música que efectúe ajustes de propiedades se
-convierte en definiciones de contexto dentro de las especificaciones
-de salida, permitiendo declaraciones como
-@example
-\layout @{ \accidentalStyle modern @}
-\midi @{ \tempo 4. = 66 @}
-@end example
-
-@item
-Se ha rediseñado la clave de Sol de LilyPond: el bucle superior está
-más equilibrado, el gancho inferior sobresale menos y la línea
-vertical principal ("spine") está curvada de forma más regular.
-Pueden compararse las versiones vieja y nueva consultando la
-documentación:
-@uref{http://lilypond.org/doc/v2.14/Documentation/notation/the-feta-font.html#clef-glyphs,
-versión antigua},
-@uref{http://lilypond.org/doc/v2.15/Documentation/notation/the-feta-font.html#clef-glyphs,
-versión nueva}.
-
-@item
-Se han simplificado las instrucciones de los sellos de elementos
-gráficos para permitir una menor duplicación de código y mejores
-aproximaciones de altura de los objetos gráficos.  Se han eliminado
-las siguientes instrucciones de sello:
-@itemize
-@item @code{beam}
-@item @code{bezier-sandwich}
-@item @code{bracket}
-@item @code{dashed-slur}
-@item @code{dot}
-@item @code{oval}
-@item @code{repeat-slash}
-@item @code{zigzag-line}
-@end itemize
-
-@item
-Ahora se tratan los corchetes como objetos diferenciados y no como
-parte de la plica.
-@lilypond[fragment,quote,relative=2]
-\override Flag #'color = #red
-g8
+sin que hubiera una manera adecuada de hacer que las dos
+partituras estuviesen alineadas.
+
+@item
+LilyPond ya no deduce automáticamente un contexto
+@samp{\defaultchild} dentro de una definición de contexto con
+cláusulas @samp{\accepts}.  Cualquier definición de contexto que
+no tenga una definición @samp{\defaultchild} explícita o heredada,
+cuenta como un contexto @samp{Bottom} y es candidato para eventos
+de duraciones y sobreescrituras sin causar la creación implícita
+de otros contextos.  Asegúrese de especificar un
+@samp{\defaultchild} para contextos no-@samp{Bottom} al definirlos
+partiendo de cero.
+
+@item
+Ahora están ampliamente contemplados los símbolos de registros de
+acordeón tanto para discanto como bajo en el módulo @samp{scm accreg},
+véase @ruser{Accordion Registers}.
+@lilypond[verbatim,quote]
+#(use-modules (scm accreg))
+\new PianoStaff
+<<
+  \new Staff \relative
+  { \clef "treble"  \discant "10"
+    r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
+    \discant "121"
+    << { r16 <f bes> r <e a> r <d g> } \\
+       { d r a r bes r } >> |
+    <cis e a>1
+  }
+  \new Staff \relative
+  { \clef "treble"  \freeBass "1"
+    r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
+    \clef "bass"  \stdBass "Master"
+    << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
+         <e a cis>1^"a" } \\
+       { d8_"D" c_"C" bes_"B" | a1_"A" }
+    >>
+  }
+>>
 @end lilypond
 
 @item
-Se puede elegir entre dos métodos de numeración de compases, en
-especial para cuando se emplean repeticiones:
-
-@lilypond[fragment,quote,relative=1,noragged-right]
-\relative c'{
-  \set Score.alternativeNumberingStyle = #'numbers
-  \repeat volta 3 { c4 d e f | }
-    \alternative {
-      { c4 d e f | c2 d \break }
-      { f4 g a b | f4 g a b | f2 a | \break }
-      { c4 d e f | c2 d }
-    }
-  c1 \break
-  \set Score.alternativeNumberingStyle = #'numbers-with-letters
-  \repeat volta 3 { c,4 d e f | }
-    \alternative {
-      { c4 d e f | c2 d \break }
-      { f4 g a b | f4 g a b | f2 a | \break }
-      { c4 d e f | c2 d }
-    }
-  c1
-}
+Las nuevas instrucciones @code{markLengthOn} y
+@code{markLengthOff} controlan si se permite la existencia de un
+espacio horizontal para las letras de ensayo e indicaciones de
+tempo.
+
+@lilypond[quote,relative=2]
+\markLengthOn
+\compressFullBarRests
+\tempo "Molto vivace" c2 c'
+\mark\default
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
+\bar "||"
+\markLengthOff
+\tempo "Molto vivace" c2 c'
+\mark#1
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
 @end lilypond
 
 @item
-Lo que sigue es un cambio fundamental en la representación que
-LilyPond hace de la música: los eventos de duración como
-@code{LyricEvent} y @code{NoteEvent} ya no se encuentran envueltos
-dentro de elementos @code{EventChord} a no ser que se hayan escrito
-realmente como parte de un acorde.  Si manipulamos expresiones
-musicales en Scheme, el nuevo comportamiento puede necesitar cambios
-en nuestro código.  Las llamadas a la función musical
-@code{\eventChords} o a la función de Scheme @code{event-chord-wrap!}
-convierten a la representación anterior; la utilización de una
-cualquiera de ellas puede ser la vía más sencilla para mantener
-operativo el código tradicional.
-
-Los tres siguientes elementos de la lista son consecuencia de este
-cambio.
+Ahora las letras de ensayo al principio de una línea se sitúan de
+forma predeterminada a la derecha de la clave y la armadura. Como
+en versiones anteriores, la interfaz
+@code{break-alignable-interface} controla el comportamiento.
 
-@item
-Se ha reimplementado la abreviatura de ayuda para intruducción
-repetitiva de acordes, @code{q}.  Ahora los acordes repetidos se
-sustituyen justo antes de la interpretación de la expresión musical.
-En caso de que el usuario quiera retener ciertos eventos del acorde
-original, puede ejecutar manualmente la función @code{\chordRepeats}
-de sustitución de acordes de repetición.
-
-@item
-Los números de cuerdas y digitaciones de la mano derecha sobre notas
-individuales aparecen ahora sin tener que escribirlas dentro de
-corchetes de acorde.
-
-@item
-Ahora las funciones musicales funcionan igual cuando se usan dentro o
-fuera de los acordes, incluidas todas las posibilidades de la
-exploración de argumentos.  Las variables musicales se pueden usar
-dentro de acordes: una construcción como
-@lilypond[verbatim,quote,ragged-right]
-tonic=fis'
-{ <\tonic \transpose c g \tonic> }
+@lilypond[quote,relative=2]
+\set Score.barNumberVisibility = #all-bar-numbers-visible
+\set Timing.currentBarNumber = #72
+\bar"||" \time 3/4 \key e\major \mark#10 \tempo "Adagio" b2.
 @end lilypond
-@noindent
-ahora funciona como se espera.  Puede utilizarse @code{#@{@dots{}#@}}
-para la construcción de componentes de acordes.  Ahora @code{\tweak}
-funciona sobre notas individuales sin necesidad de incluirlas dentro
-de un acorde.  Ahora es posible usarla dentro de eventos de
-instrucciones y letra de canciones, pero aún no es probable que
-ofrezca resultados.
 
 @item
-@code{\tweak} toma ahora opcionalmente la especificación de un objeto
-de presentación.  Se puede usar para trucar objetos de presentación
-que están causados sólo indirectamente por el evento trucado, como
-alteraciones accidentales, plicas y corchetes:
-
-@lilypond[verbatim,quote,ragged-right,relative=2]
-<\tweak Accidental #'color #red   cis4
- \tweak Accidental #'color #green es
-                                  g>
-@end lilypond
-
-@item
-Las expresiones de Scheme dentro de fragmentos de código de LilyPond
-incrustados (@code{#@{@dots{}#@}}) se ejecutan ahora dentro de la
-cerradura léxica del código de Scheme circundante.  El símbolo
-@code{$} ya no es especial dentro del código de LilyPond incrustado.
-Se puede utilizar de forma incondicional dentro de código de LilyPond
-para la evaluación inmediata de expresiones de Scheme, de forma
-parecida a la forma en que se utilizaba anteriormente
-@code{ly:export}.  Se ha suprimido @code{ly:export}.  Como
-consecuencia, ahora @code{#} está libre para diferir la evaluación de
-su argumento hasta que el analizador sintáctico reduzca efectivamente
-la expresión contenida, reduciendo significativamente el potencial de
-la evaluación prematura.  También están los operadores de @q{división
-de cadenas} @code{$@@} y @code{#@@} para la interpretación de los
-miembros de una lista de forma individual.
+Ahora se pueden escribir directamente números decimales dentro de
+la música, sin el prefijo del símbolo de almohadilla.  Junto al
+cambio anterior en la forma de especificar las propiedades de los
+objetos, el código para modificar la longitud de las plicas ha
+cambiado de esto:
+@example
+\override Stem #'length = #5.6
+e' f' g' a'
+@end example
+a esto:
+@example
+\override Stem.length = 5.6
+e' f' g' a'
+@end example
 
-@item
-Para reducir la necesidad de utilizar @code{$}, las expresiones de
-Scheme escritas con @code{#} se interpretan como música dentro de las
-listas de música, y como elementos de marcado o de listas de marcado
-dentro de los elementos de marcado.
+Se debe escribir un dígito a ambos lados del punto; no se permiten
+valores como @code{4.} ó @code{-.3}.
+
+Asimismo, no se admiten fracciones decimales dentro de
+@code{\chordmode}.
+
+@item
+Se pueden redefinir libremente ciertas abreviaturas como @code{(},
+@code{)}, @code{|}, @code{[}, @code{]}, @code{~}, @code{\(},
+@code{\)} y otras, como instrucciones normales. Un ejemplo sería
+@lilypond[verbatim,quote]
+"\\{" = (
+"\\}" = )
+"(" = \melisma
+")" = \melismaEnd
+
+\new Staff <<
+  \relative c' {
+    c8 \{ d e f \} % slurred
+    g ( a b c ) % no slur, but with melisma
+    c,1 \bar "|."
+   }
+   \addlyrics { Li -- ly -- pond. }
+>>
+@end lilypond
 
 @item
-Se ha mejorado el soporte de acordes de tipo jazz: se reconocen los
-acordes lidios y alterados; ahora se tratan los separadores entre
-modificadores de acorde de forma independiente de los separadores
-entre acordes invertidos y sus notas de bajo (y por omisión, la barra
-inclinada se usa ahora solamente para el último tipo de separador);
-las notas adicionales ya no van prefijadas por "add" de forma
-predeterminada; y la "m" en los acordes menores se puede personalizar.
-Consulte @ruser{Nombres de acorde personalizados} para más
-información.
+El nombre de la abreviatura de articulación para
+@code{\staccatissimo} ha cambiado de @code{-|} a@tie{}@code{-!}.
 
 @item
-Se ha cambiado el nombre de la instrucción @code{\markuplines} por
-@code{\markuplist} para conseguir una mejor correspondencia con su
-semántica y con la nomenclatura general de LilyPond.
+Ahora se escriben los rangos de cambios de tempo como @code{\tempo
+4 = 60 - 68} en lugar de @code{\tempo 4 = 60 ~ 68}.
 
 @item
-Se ha simplificado considerablemente la interfaz para especificar
-afinaciones en las tablaturas y se emplea la función de Scheme
-@code{\stringTuning} para la mayor parte de los propósitos.
+Se ha cambiado el nombre de @code{OctavateEight} por el de
+@code{ClefModifier}.  Las propiedades de contexto relacionadas han
+cambiado su nombre @code{xxxOctavationyyy} por el de
+@code{xxxTranspositionyyy}.
 
 @item
-Las barras ahora pueden preservar la inclinación por encima de los
-saltos de línea.
-@lilypond[fragment,quote,relative=2]
-\override Beam #'breakable = ##t
-a8[ b c d e f g \bar "" \break f e d c b a]
-\once \override Beam #'positions = #beam::align-with-broken-parts
-a8[ b c d e f g \bar "" \break f e d c b a]
-\once \override Beam #'positions = #beam::slope-like-broken-parts
-a8[ b c d e f g \bar "" \break f e d c b a]
+Existe una nueva instrucción @code{\absolute} que marca
+explícitamente la música introducida en alturas absolutas.  Aunque
+esto era antes el comportamiento predeterminado, una instrucción
+@code{\absolute} explícita evita también la reinterpretación
+cuando el pasaje está dentro de un bloque marcado como
+@code{\relative}:
+@lilypond[verbatim,quote]
+\relative c { c'4 \absolute { f'' g'' } c }
 @end lilypond
-Para hacerlo, se han hecho obsoletas varias funciones de "callback".
-@itemize
-@item @code{ly:beam::calc-least-squares-positions}
-@item @code{ly:beam::slope-damping}
-@item @code{ly:beam::shift-region-to-valid}
-@end itemize
-Además, @code{ly:beam::quanting} ahora acepta un argumento adicional
-para ayudar a los cálculos sobre los cambios de línea.  Todas estas
-funciones se llaman automáticamente cuando se ajusta el parámetro
-@code{positions}.
 
 @item
-En los argumentos de función, la música, los elementos de marcado y
-las expresiones de Scheme (así como algunas otras entidades
-sintácticas) se han hecho mayormente intercambiables y se diferencian
-solamente mediante la evaluación del predicado respectivo.  En ciertos
-casos, el analizador sintáctico consulta este predicado, como cuando
-se decide si interpretar @code{-3} como un número o como un evento de
-digitación.
+Cuando se utiliza @code{\relative} sin emplear como referencia una
+altura explícita, se toma como referencia el centro de la primera
+octava, haciendo que no se pueda distinguir si la primera nota que
+se introduce es relativa o absoluta.  Anteriormente, la omisión de
+una altura de referencia habría llevado a una altura
+predeterminada de @code{c'} (el Do central).  Dado que la
+mencionada elección es, hasta cierto punto, arbitraria, la forma
+de uso recomendada es que se especifique siempre una altura de
+referencia.
 
 @item
-Ahora se pueden definir las funciones musicales (y sus parientes
-cercanos) con argumentos opcionales.
+Se puede usar la nueva instrucción @code{\single} para convertir
+la sobreescritura de una propiedad en un truco que se aplica a una
+expresión musical única:
 
-@item
-Para definir instrucciones que se ejecutan solamente por sus efectos
-secundarios, ahora está disponible @code{define-void-function}.
-
-@item
-Hay una instrucción nueva @code{define-event-function} en analogía con
-@code{define-music-function} que se puede usar para definir funciones
-musicales que actúan como post-eventos sin que se requiera un especificador
-de dirección como (@code{-}, @code{^} o @code{_}) antes de ellos.
-
-@lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
-         (make-dynamic-script arg))
-\relative c' { c\dyn pfsss }
+@lilypond[quote,verbatim,relative=2]
+<a \single\voiceTwoStyle e' a>1
 @end lilypond
 
 @item
-Se puede incluir una lista de alias en ASCII para caracteres
-especiales.
+Dos maneras de hacer que los objetos gráficos no aparezcan en la
+salida son: sobreescribir su propiedad @code{transparent} con un
+valor verdadero @code{#t} (reteniendo el espaciado original), o
+sobreescribiendo su propiedad @code{stencil} o sello con un valor
+falso @code{#f} (que no ocupa ningún espacio).  Estas dos
+operaciones tienen ahora las formas cortas @code{\hide} (ocultar)
+y @code{\omit} (omitir), respectivamente.  A estas instrucciones
+puede dárseles una expresión musical sobre la que efectuar el
+trucaje, o bien el nombre de un objeto gráfico para el que se debe
+crear la sobreescritura (para especificar los dos, utilice
+@code{\single} sobre la instrucción en forma de sobreescritura):
 
 @lilypond[quote,verbatim]
-\paper {
-  #(include-special-characters)
-}
-\markup "&bull; &dagger; &copyright; &OE; &ss; &para;"
+\new Staff \with { \omit Clef }
+\relative c'' <a e' \hide a>1
 @end lilypond
 
 @item
-Hay una instrucción nueva @code{define-scheme-function} en analogía
-con @code{define-music-function} que puede usarse para definir
-funciones que se evalúan a expresiones de Scheme pero aceptan
-argumentos en la sintaxis de LilyPond.
+Se puede aplicar la nueva instrucción @code{\temporary} a las
+sobreescrituras para hacer que no sustituyan a los ajustes de
+propiedad previos.  Si se aplica una instrucción de reversión
+@code{\revert} a la misma propiedad varias veces seguidas, el
+ajuste anterior reaparece:
 
-@item
-Ahora se puede utilizar la construcción @code{#@{ @dots{} #@}} no solo
-para crear listas secuenciales de música, sino también para alturas
-(que se distinguen de los eventos de nota sencillos por la ausencia de
-duración u otra información que no puede formar parte de una altura),
-eventos musicales únicos, expresiones musicales vacías, post-eventos,
-elementos de marcado (sobre todo para liberar a los usuarios de la
-necesidad de usar la macro @code{markup}), listas de marcado,
-expresiones numéricas, definiciones y modificaciones de contextos y
-algunas otras cosas.  Si no contiene nada o contiene un único evento
-musical, ya no devuelve una lista secuencial de música, sino una
-expresión musical vacía o simplemente el propio evento musical,
-respectivamente.
+@lilypond[quote,verbatim,relative=2]
+\override NoteHead.color = #red c4
+\override NoteHead.color = #green d
+\revert NoteHead.color e2
+\override NoteHead.color = #red c4
+\temporary\override NoteHead.color = #green d
+\revert NoteHead.color e
+\revert NoteHead.color c
+@end lilypond
 
-@item
-Se pueden usar alturas en la parte derecha de las asignaciones.  Las
-alturas se diferencian de los eventos de una sola nota en que no
-tienen duración ni otras informaciones que no pueden formar parte de
-una altura.
+Esto tiene utilidad principalmente para la escritura de funciones
+musicales que se desea que tengan alguna propiedad modificada
+solamente por un tiempo igual a la duración de la función.
 
 @item
-Nueva opción de la línea de órdenes @option{--loglevel=@var{level}}
-para controlar el volumen de datos que LilyPond produce en la salida.
-Los valores posibles son ERROR (errores), WARN (advertencias),
-BASIC_PROGRESS (progreso básico), PROGRESS (progreso) y DEBUG
-(depuración).
+Las instrucciones @code{\tag}, @code{\removeWithTag} y
+@code{\keepWithTag} ahora admiten una lista de símbolos en lugar
+de un solo símbolo para marcar, eliminar y seleccionar música que
+esté etiquetada con una cualquiera de la lista de etiquetas.  Esto
+es de especial importancia para @code{\keepWithTag} porque no es
+posible conseguir el mismo efecto usando varias instrucciones
+@code{\keepWithTag} consecutivas.
 
 @item
-@code{\once \set} ahora reinicia correctamente el valor de la
-propiedad al valor previo.
-
-@lilypond[fragment,quote,relative=2]
-  \set fingeringOrientations = #'(left)
-  <e-1>4
-  \once \set fingeringOrientations = #'(right)
-  <e-1>
-  <e-1>-"left"
-@end lilypond
+La opción @samp{-d old-relative} se ha eliminado.  Ya no está
+accesible a través de la línea de órdenes; la utilidad que aún
+conservaba era la interpretación de @code{\relative} en archivos
+de LilyPond convertidos automáticamente de las versiones@tie{}1.8
+o anteriores.  No está claro cuántas de tales versiones estaban
+aún en funcionamiento.
 
 @item
-La alineación de los elementos de matiz dinámico extensos
-(reguladores, crescendi textuales, etc.) se divide automáticamente si
-se da explícitamente una dirección distinta.
+Se ha invertido el significado de @code{instrumentTransposition}.
+Después de
+@example
+\set instrumentTransposition = #@{ b #@}
+@end example
+una nota escrita @code{c'} ahora suena como @code{b}.
+Anteriormente era a la inversa.  Esperamos que este cambio y el
+siguiente hagan más sencillo el tratamiento de los instrumentos
+transpositores.
+
+@item
+La música generada por las instrucciones @code{\set} y
+@code{\override} ya no resulta afectada por la instrucción
+@code{\transpose}.  La consecuencia más importante es que
+@code{\transpose} transporta la altura tonal sonora o de concierto
+y la que se imprime en la misma medida incluso aunque la música
+que se transporta contenga @code{\transposition}.  Anteriormente,
+@example
+\transpose c' f' \transposition bes'
+@end example
+era equivalente a @code{\transposition f'}.  Ahora se mantiene
+como equivalente a @code{\transposition bes'}.
+
+@item
+Cuando se comprueba la existencia de colisiones, LilyPond ya no
+trata los objetos como rectángulos.  En lugar de ello se aproxima
+la forma verdadera de los objetos utilizando un enfoque parecido
+al uso de integrales, lo que por lo común dará como resultado un
+posicionamiento más ceñido y regular de los objetos y los sistemas
+de pentagramas:
+
+@lilypond[relative=1]
+#(ly:set-option 'debug-skylines #t)
+\dynamicUp
+c'4\f a4\f d\f( f)
+a,4\< c c c\!
+d4-.\downbow a4^"r'venu..." c \tempo "T1" e
+@end lilypond
 
-@lilypond[fragment,quote,relative=2]
-c4_\< c c^\> c c1_\p
+El fragmento anterior tenía anteriormente este aspecto:
+
+@lilypond[relative=1]
+#(ly:set-option 'debug-skylines #t)
+\override Hairpin #'vertical-skylines = #'()
+\override DynamicText #'vertical-skylines = #'()
+\override TextScript #'vertical-skylines = #'()
+\override Score.MetronomeMark #'vertical-skylines = #'()
+\override Staff.Clef #'vertical-skylines = #'()
+\dynamicUp
+c'4\f a4\f d\f( f)
+a,4\< c c c\!
+d4-.\downbow a4^"r'venu..." c \tempo "T1" e
 @end lilypond
 
+Entre los objetos afectados se encuentran @code{Accidentals},
+@code{Beams}, @code{Clefs}, @code{Dynamics}, @code{FiguredBass},
+@code{Flags}, @code{Glissandos}, @code{Lyrics},
+@code{MetronomeMarks}, @code{OttavaBrackets}, @code{Pedals},
+@code{RehearsalMarks}, @code{Rests}, @code{Scripts},
+@code{TextScripts}, @code{Ties}, @code{Tuplets} y
+@code{VoltaBrackets}.
+
+@item
+Ahora los grupos de valoración especial se crean mediante la
+instrucción @code{\tuplet}, que toma una fracción
+@code{@var{t}/@var{n}} para especificar que se tocan @var{t} notas
+en el tiempo en que habitualmente se permite un número de
+@var{n}. Una sola instrucción @code{\tuplet} puede crear varios
+grupos especiales si su duración se inserta después de la
+fracción.
+@lilypond[quote,verbatim,relative=2]
+\tuplet 3/2 { c8 d e } \tuplet 3/2 { f e d } c2
+\tuplet 3/2 4 { c8 d e f e d } c2
+@end lilypond
+La instrucción @code{\times} con el orden de la fracción invertido
+@code{@var{n}/@var{t}} aún está disponible.
 
 @item
-Ahora las apoyaturas y mordentes funcionan también dentro de una
-ligadura de expresión, y no solo dentro de una ligadura de fraseo.
-Asimismo, se ha añadido la función @code{\slashedGrace} que no imprime
-ninguna ligadura partiendo de la nota del mordente.
+Se introducen dos instrucciones nuevas de marcado:
+@code{\draw-dashed-line} (trazar línea discontinua) y
+@code{\draw-dotted-line} (trazar línea de puntos).
 
-@lilypond[fragment,quote,relative=2]
-c4( \appoggiatura e8 d4 \acciaccatura e8 d4 \slashedGrace e8 c4)
-@end lilypond
+@noindent
+La línea discontinua se extiende sobre toda la longitud dada por
+@var{destino}, si @code{full-length} está establecido al valor
+@code{#t} (que es lo predeterminado) sin ningún espacio al
+principio ni al final.  Entonces, @code{final} se altera de forma
+que quepa.  Para insistir en los valores dados (o predeterminados)
+para @code{inicio} y @code{final} utilice @code{\override
+#'(full-length . #f)}.  Son posibles ajustes manuales para
+@code{inicio}, @code{final} y @code{fase}.
 
+@noindent
+La línea d puntos siempre se extiende a la longitud completa dada
+por @var{destino}, sin ningún espacio al principio ni al final.
+Es posible ajustar manualmente @code{final} para obtener espacios
+mayores o menores entre los puntos.  El valor dado (o
+predeterminado) de @code{final} se altera de forma que corresponda
+a la longitud de la línea, @code{line-length}.
+
+@lilypond[verbatim,quote]
+\markup {
+  \draw-dashed-line #'(5.1 . 2.3)
+  \override #'(on . 0.3)
+  \override #'(off . 0.5)
+  \draw-dashed-line #'(5.1 . 2.3)
+  \draw-dotted-line #'(5.1 . 2.3)
+  \override #'(thickness . 2)
+  \override #'(off . 0.2)
+  \draw-dotted-line #'(5.1 . 2.3)
+}
+@end lilypond
 
 @item
-Para suprimir a línea en un elemento de crescendo extenso (y otros
-elementos extensos similares), LilyPond contempla ahora de forma plena
-la propiedad @code{#'style = #'none}.
+A partir de la versión@tie{}2.17.10, los mensajes de error o la
+@acronym{URI} de @code{textedit} que se usa para la funcionalidad
+«apuntar y pulsar» especifican los números de columna empezando
+en@tie{}1 en vez de en@tie{}0.  El desplazamiento de bytes (que
+también forma parte de las @acronym{URI}s de @code{textedit}) aún
+comienza en@tie{}0.
 
-@lilypond[fragment,quote,relative=2]
-\override DynamicTextSpanner #'style = #'none
-c4\cresc c c g, c'\p
+@item
+La instrucción @code{\clef} contempla una transposición opcional:
+@lilypond[verbatim,quote,relative=1]
+\clef "treble_(8)"
+c2 c
+\clef "bass^[15]"
+c2 c
 @end lilypond
 
 @item
-LilyPond.app está disponible ahora para MacOS X 10.7. ¡Gracias,
-Christian Hitz!
+Se ha hecho que la sintaxis de LilyPond de palabras separadas por
+puntos @code{Voice.Accidental} sea intercambiable con
+@code{#'(Voice Accidental)}, una lista de Scheme de símbolos.
+Como resultado, código del estilo de
+@example
+\override Voice.TextSpanner #'(bound-details left text) = "rit."
+@end example
+ahora es equivalente a
+@example
+\override Voice.TextSpanner bound-details.left.text = "rit."
+@end example
+o incluso a
+@example
+\override #'(Voice TextSpanner) bound-details.left.text = "rit."
+@end example
 
 @item
-Los glissandos pueden abarcar varias líneas.
+La ruta a un grob y a una propiedad de un grob ya no requieren que
+se especifiquen como dos argumentos distintos a instrucciones como
+@samp{\override} y @code{\revert}, permitiendo la sintaxis
+siguiente:
+@example
+\override Voice.TextSpanner.bound-details.left.text = "rit."
+@end example
+Dado que las funciones musicales complementarias como
+@samp{\overrideProperty} no contemplan formas con y sin espacios
+de separación al mismo tiempo, la utillización de una sola ruta
+con puntos es ahora la forma de preferencia.  La especificación
+separada de la ruta de un grob y de la propiedad del grob,
+contemplada aún por parte de @samp{\override} y de @samp{\revert}
+por motivos de compatibilidad, se considera ahora obsoleta.
+
+@item
+Debido a que dos palabras se aceptan ahora como símbolos que son
+argumentos de función, las interfaces de @samp{\accidentalStyle},
+@samp{\alterBroken}, @samp{\footnote} y @samp{\tweak} han tenido
+que ser rediseñadas allí donde estaban implicados símbolos que
+eran argumentos opcionales.  Compruebe la documentación de la
+función respectiva para ver los detalles.
+
+@item
+Varias instrucciones aceptan ahora listas de símbolos
+(introducidas convenientemente como palabras separadas por puntos)
+para diversos tipos de argumentos.  Entre ellos se encuentran
+@samp{\accidentalStyle}, @samp{\alterBroken}, @samp{\footnote},
+@samp{\hide}, @samp{\omit}, @samp{\overrideProperty},
+@samp{\shape} y @samp{\tweak}.
+
+@item
+Se ha modificado la interfaz de usuario de las líneas divisorias.
+Los glifos de barra de compás ahora se asemejan al aspecto de los
+caracteres utilizados para expresar el tipo de barra, de manera
+que un signo de repetición por la izquierda se debe codificar como
+@code{.|:}.  La instrucción @code{\defineBarLine} provee una
+manera sencilla de definir estilos adicionales de línea divisoria.
+
+@item
+Las alteraciones accidentales en la armadura de la tonalidad se
+pueden imprimir en distinta octava de las posiciones
+tradicionales, o en más de una octava.
+@lilypond[quote,relative=0]
+\override Staff.KeySignature #'flat-positions = #'((-5 . 5))
+\override Staff.KeyCancellation #'flat-positions = #'((-5 . 5))
+\clef bass \key es \major es g bes d
+\clef treble \bar "||" \key es \major es g bes d
+\override Staff.KeySignature #'sharp-positions = #'(2)
+\bar "||" \key d \major b fis b2
+@end lilypond
 
 @end itemize
 
 @ifhtml
 Para ver noticias anteriores, diríjase a
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/},
 @uref{http://lilypond.org/doc/v2.14/Documentation/changes/},
-@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS.html},
 o @uref{../,vuelva} al índice de la documentación.
 
 
diff --git a/Documentation/es/essay/GNUmakefile b/Documentation/es/essay/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 86337f89b2da063e2e5aa79fb2219a52e225a69a..4dd535f1e837d1a7a105e4dc23f0ebb666df72e5 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 44011e382e91f43fb6752b3fbbf8d8984131a565
+    Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Grabado musical
 @chapter Grabado musical
@@ -343,9 +343,9 @@ music = {
   \layout {
     \context {
       \Staff
-      \override NoteSpacing #'stem-spacing-correction = #0.0
-      \override NoteSpacing #'same-direction-correction = #0.0
-      \override StaffSpacing #'stem-spacing-correction = #0.0
+      \override NoteSpacing.stem-spacing-correction = #0.0
+      \override NoteSpacing.same-direction-correction = #0.0
+      \override StaffSpacing.stem-spacing-correction = #0.0
     }
   }
 }
@@ -371,7 +371,7 @@ music = {
   \layout {
     \context {
       \Staff
-      \override NoteSpacing #'stem-spacing-correction = #0.6
+      \override NoteSpacing.stem-spacing-correction = #0.6
     }
   }
 }
@@ -501,8 +501,8 @@ global = {
   <<
     \new Staff \with {
       fontSize = #-4
-      \override StaffSymbol #'staff-space = #(magstep -4)
-      \override StaffSymbol #'thickness = #(magstep -3)
+      \override StaffSymbol.staff-space = #(magstep -4)
+      \override StaffSymbol.thickness = #(magstep -3)
     }
     \relative c' {
       \global
@@ -524,7 +524,7 @@ global = {
         \clef "bass"
         <<
         {
-          \once \override DynamicText #'X-offset = #-3
+          \once \override DynamicText.X-offset = #-3
           <ees g c>2.~->^\f
           <ees g c>4.~ <ees g c>8
         } \\ {
@@ -609,9 +609,9 @@ de las tres configuraciones elegiríamos para la siguiente ligadura?
 @lilypond
 \relative c {
   \clef bass
-  \once \override Slur #'positions = #'(1.5 . 1)
+  \once \override Slur.positions = #'(1.5 . 1)
   e8[( f] g[ a b d,)] r4
-  \once \override Slur #'positions = #'(2 . 3)
+  \once \override Slur.positions = #'(2 . 3)
   e8[( f] g[ a b d,)] r4
   e8[( f] g[ a b d,)] r4
 }
@@ -653,7 +653,7 @@ rozar la cabeza de una de las figuras:
 @lilypond
 \relative c {
   \clef bass
-  \once \override Slur #'positions = #'(1.5 . 1)
+  \once \override Slur.positions = #'(1.5 . 1)
   e8[(_"15.39" f] g[ a b d,)] r4
 }
 @end lilypond
@@ -667,7 +667,7 @@ de fealdad:
 @lilypond
 \relative c {
   \clef bass
-  \once \override Slur #'positions = #'(2 . 3)
+  \once \override Slur.positions = #'(2 . 3)
   e8[(_"13.08" f] g[ a b d,)] r4
 }
 @end lilypond
@@ -889,7 +889,7 @@ partIV = \relative c {
     }
     \context {
       \PianoStaff
-      \override StaffGrouper #'staff-staff-spacing #'padding = #1
+      \override StaffGrouper.staff-staff-spacing.padding = #1
     }
   }
 }
@@ -911,7 +911,7 @@ voces superior e inferior intercambian temporalmente sus posiciones:
 
 @c KEEP LY
 @lilypond
-collide = \once \override NoteColumn #'force-hshift = #0
+collide = \once \override NoteColumn.force-hshift = #0
 
 \score {
   <<
@@ -1162,20 +1162,20 @@ aparente si tenemos en cuenta un ejemplo musical más complejo:
     \new Voice = "I" \relative c''' {
       \time 3/4
       \voiceOne
-      \times 6/7 { g8 g g g g g g }
+      \tuplet 7/6 { g8 g g g g g g }
       \oneVoice
       r4 <b,, fis' g bes> r4\fermata
     }
     \new Voice = "II" \relative c' {
       \voiceTwo
       c4
-      \times 4/5 {
+      \tuplet 5/4 {
         <c ees>8 f g
         \change Staff = "LH" \oneVoice
         \stemUp g,( c}
       r4
-      \override Stem #'cross-staff = ##t
-      \override Stem #'length = #12
+      \override Stem.cross-staff = ##t
+      \override Stem.length = #12
       <fis, b>) r\fermata
     }
   >>
@@ -1248,6 +1248,7 @@ las notas, el grabador @code{Note_heads_engraver}.
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1281,6 +1282,7 @@ A continuación, un grabador del pentagrama, el
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1313,6 +1315,7 @@ referencia para el pentagrama:
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1341,6 +1344,7 @@ y el grabador de las plicas @code{Stem_engraver} añade las plicas.
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1463,14 +1467,14 @@ tiene todas las direcciones hacia arriba (o hacia la derecha).
 \score {
   \relative c' {
     \stemDown <e g b>4_>-\arpeggio
-    \override Arpeggio #'direction = #RIGHT
+    \override Arpeggio.direction = #RIGHT
     \stemUp <e g b>4^>-\arpeggio
   }
   \layout {
     \context {
       \Score
-      \override SpacingSpanner #'spacing-increment = #3
-      \override TimeSignature #'transparent = ##t
+      \override SpacingSpanner.spacing-increment = #3
+      \hide TimeSignature
     }
   }
 }
@@ -1496,12 +1500,12 @@ fragment = {
 <<
    \new Staff \fragment
    \new Staff \with {
-      \override Beam #'beam-thickness = #0.3
-      \override Stem #'thickness = #0.5
-      \override Bar #'thickness = #3.6
-      \override Tie #'thickness = #2.2
-      \override StaffSymbol #'thickness = #3.0
-      \override Tie #'extra-offset = #'(0 .  0.3)
+      \override Beam.beam-thickness = #0.3
+      \override Stem.thickness = #0.5
+      \override Bar.thickness = #3.6
+      \override Tie.thickness = #2.2
+      \override StaffSymbol.thickness = #3.0
+      \override Tie.extra-offset = #'(0 .  0.3)
       }
       \fragment
 >>
@@ -1537,12 +1541,12 @@ a lo largo del fragmento musical.
   \set autoBeaming = ##f
   \time 2/4
   <d f g>4
-  \once \override NoteHead #'stencil = #note-head::brew-ez-stencil
-  \once \override NoteHead #'font-size = #-7
-  \once \override NoteHead #'font-family = #'sans
-  \once \override NoteHead #'font-series = #'bold
+  \once \override NoteHead.stencil = #note-head::brew-ez-stencil
+  \once \override NoteHead.font-size = #-7
+  \once \override NoteHead.font-family = #'sans
+  \once \override NoteHead.font-series = #'bold
   <d f g>4
-  \once \override NoteHead #'style = #'cross
+  \once \override NoteHead.style = #'cross
   <d f g>4
   \applyOutput #'Voice #mc-squared
   <d f g>4
@@ -1608,7 +1612,7 @@ ejemplo siguiente combina unas pocas construcciones algo más exóticas.
       \time 4/8
       \key c \minor
       << {
-        \revert Stem #'direction
+        \revert Stem.direction
         \change Staff = down
         \set subdivideBeams = ##t
         g16.[
@@ -1625,7 +1629,7 @@ ejemplo siguiente combina unas pocas construcciones algo más exóticas.
         \set followVoice = ##t
         c'''32([ b''16 a''16 gis''16 g''32)]
       } \\ {
-        s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d'']
+        s4 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
       } \\ {
         s4 \autoBeamOff d''8.. f''32
       } \\ {
@@ -1637,16 +1641,16 @@ ejemplo siguiente combina unas pocas construcciones algo más exóticas.
       \clef bass
       \key c \minor
       \set subdivideBeams = ##f
-      \override Stem  #'french-beaming = ##t
-      \override Beam  #'beam-thickness = #0.3
-      \override Stem  #'thickness = #4.0
+      \override Stem.french-beaming = ##t
+      \override Beam.beam-thickness = #0.3
+      \override Stem.thickness = #4.0
       g'16[ b16 fis16 g16]
       << \makeClusters {
         as16 <as b>
         <g b>
         <g cis>
       } \\ {
-        \override Staff.Arpeggio  #'arpeggio-direction =#down
+        \override Staff.Arpeggio.arpeggio-direction =#down
         <cis, e, gis, b, cis>4\arpeggio
       }
     >> }
@@ -1830,7 +1834,7 @@ partIV = \relative c {
     }
     \context {
       \PianoStaff
-      \override StaffGrouper #'staff-staff-spacing #'padding = #1
+      \override StaffGrouper.staff-staff-spacing.padding = #1
     }
   }
 }
diff --git a/Documentation/es/extending/GNUmakefile b/Documentation/es/extending/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index cdbb9365b8ae853df2a8b81a295a19e2bf658de5..9ccb31560b34bbab2e608fc5ce4436f97b1abb70 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @c This file is part of extending.tely
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 6bbc01872dd4e9cced2524c378628d9219ac08ae
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @node Interfaces para programadores
 @chapter Interfaces para programadores
@@ -32,24 +32,64 @@ Scheme, @ref{Tutorial de Scheme}.
 
 @node Bloques de código de LilyPond
 @section Bloques de código de LilyPond
-@translationof Lilypond code blocks
+@translationof LilyPond code blocks
+
+@cindex Bloques de código de LilyPond
+@cindex LilyPond, bloques de código de
+@funindex #@{ @dots{} #@}
+@funindex $
+@funindex #
+
+La creación de expresiones musicales en Scheme puede ser una tarea
+tediosa porque a veces presentan muchos niveles de profundidad de
+anidamiento y el código resultante es grande.  Para algunas tareas
+sencillas, esto puede evitarse utilizando bloques de código de
+LilyPond, que permiten usar la sintaxis ordinaria de LilyPond
+dentro de Scheme.
 
 Los bloques de código de LilyPond tienen el siguiente aspecto:
 @example
   #@{ @var{código de LilyPond} #@}
 @end example
-Se pueden usar en cualquier lugar en el que se pueda escribir código
-de Scheme: el lector de Scheme en efecto se modifica para que pueda
-incorporar bloques de código de LilyPond y pueda ocuparse de las
-expresiones de Scheme incrustadas que comienzan por @code{$} y@w{ }@code{#}.
-
-Extrae el bloque de código de LilyPond y genera una llamada al
-@code{parser} o analizador sintáctico de LilyPond, que corre en tiempo
-de ejecución para interpretar el bloque de código de LilyPond.
-Cualquier expresión de Scheme que se halle incrustada se ejecuta en el
-entorno léxico del bloque de código de LilyPond, de manera que tenemos
-acceso a las variables locales y a los parámetros de función en el
-punto en que se encuentra escrito el bloque de código de LilyPond.
+
+He aquí un ejemplo trivial:
+
+@lilypond[verbatim,quote]
+ritpp = #(define-event-function (parser location) ()
+  #{ ^"rit." \pp #}
+)
+
+{ c'4 e'4\ritpp g'2 }
+@end lilypond
+
+Los bloques de código de LilyPond se pueden usar en cualquier
+lugar en el que se pueda escribir código de Scheme.  El lector de
+Scheme en efecto se modifica para que pueda incorporar bloques de
+código de LilyPond y pueda ocuparse de las expresiones de Scheme
+incrustadas que comienzan por @code{$} y@w{ }@code{#}.
+
+@cindex parser (function argument)
+@cindex location
+
+El lector extrae el bloque de código de LilyPond y genera una
+llamada en tiempo de ejecución al analizador sintáctico para que
+interprete el código de LilyPond.  Las expresiones de Scheme
+incrustadas en el código de LilyPond se evalúan dentro del entorno
+lóexico del bloque de código de LilyPond, de manera que puede
+accederse a todas las variables locales y los parámetros de
+función que están disponibles en el punto en que se escribe el
+bloque de código de LilyPond.  Las variables definidas en otros
+módulos de Scheme, como los módulos que contienen bloques
+@code{\header} y @code{\layout}, no están accesibles como
+variables de Scheme, es decir, precedidas de@tie{}@code{#}, pero
+se puede acceder a ellas como variables de LilyPond, es decir,
+precedidas de@tie{}@code{\}.
+
+Si @code{location} (véase @ref{Funciones de Scheme}) se refiere a una
+posición de entrada válida (como lo hace normalmente dentro de las
+funciones musicales o de Scheme), toda la música generada dentro
+del bloque de código tiene su @samp{origin} establecido a
+@code{location}.
 
 Un bloque de código de LilyPond puede contener cualquier cosa que
 podríamos utilizar en la parte derecha de una asignación.  Además, un
@@ -101,28 +141,33 @@ donde
 de LilyPond (@code{#@{}@dots{}@code{#@}}) acceso al analizador
 sintáctico.
 
+@item @code{location}
+@tab tiene que ser literalmente @code{location} para ofrecer acceso al
+objeto de situación de la entrada, que se usa para ofrecer
+menssajes de error con nombres de archivo y números de línea.
+
 @item @code{@var{argN}}
 @tab @var{n}-ésimo argumento
 
 @item @code{@var{typeN?}}
 @tab un @emph{predicado de tipo} de Scheme para el que @code{@var{argN}}
-debe devolver @code{#t}.  Algunos de estos predicados se reconocen de
-forma especial por parte del analizador, véase más abajo.  También
-existe una forma especial @code{(@emph{predicate?} @emph{default})}
-para especificar argumentos opcionales.  Si el argumento actual no
-está presente cuando se ll  ama a la función, el valor predeterminado se
-emplea en sustitución.  Los valores predeterminados se evalúan en
-tiempo de definición (¡incluyendo los bloques de código de LilyPond!),
-de manera que se necesitamos un valor por omisión calculado en tiempo
-de ejecución, debemos escribir en su lugar un valor especial que
-podamos reconocer fácilmente.  Si escribimos el predicado entre
-paréntesis pero no lo seguimos por el valor predeterminado, se usa
-@code{#f} como valor por omisión.  Los valores por omisión no se
-verifican con @emph{predicate?} en tiempo de definición ni en tiempo
-de ejecución: es nuestra responsabilidad tratar con los valores que
-especifiquemos.  Los valores por omisión que son expresiones musicales
-se copian mientras se establece @code{origin} al parámetro
-@code{location}.
+debe devolver @code{#t}.
+
+También existe una forma especial @code{(@emph{predicate?}
+@emph{default})} para especificar argumentos opcionales.  Si el
+argumento actual no está presente cuando se ll ama a la función, el
+valor predeterminado se emplea en sustitución.  Los valores
+predeterminados se evalúan en tiempo de definición (¡incluyendo los
+bloques de código de LilyPond!), de manera que se necesitamos un valor
+por omisión calculado en tiempo de ejecución, debemos escribir en su
+lugar un valor especial que podamos reconocer fácilmente.  Si
+escribimos el predicado entre paréntesis pero no lo seguimos por el
+valor predeterminado, se usa @code{#f} como valor por omisión.  Los
+valores por omisión no se verifican con @emph{predicate?} en tiempo de
+definición ni en tiempo de ejecución: es nuestra responsabilidad
+tratar con los valores que especifiquemos.  Los valores por omisión
+que son expresiones musicales se copian mientras se establece
+@code{origin} al parámetro @code{location}.
 
 @item @code{@var{cuerpo}}
 @tab una secuencia de formas de Scheme que se evalúan ordenadamente; la
@@ -144,24 +189,18 @@ Si nuestra función devuelve una expresión musical, recibe un valor
 @end multitable
 
 @noindent
-Ciertos predicados de tipo se manejan de forma especial por parte del
-analizador sintáctico ya que de otro modo éste no es capaz de
-reconocer los argumentos eficientemente.  Actualmente son
-@code{ly:pitch?} y @code{ly:duration?}.
-
-La idoneidad de lpos argumentos para el resto de los predicados viene
-determinada mediante llamadas reales al predicado después de que
-LilyPond ya las ha convertido en una expresión de Scheme.  Como
-consecuencia, el argumento se puede especificar en la sintaxis de
-Scheme si se desea (precedido de @code{#} o como resultado de haber
-llamado a una función de Scheme), pero LilyPond también convierte
-algunas construcciones de LilyPond en Scheme antes de hacer
-efectivamente la comprobación del predicado sobre ellas.  Actualmente
-se encuentran entre ellas la música, los post-eventos, las cadenas
-simples (entrecomilladas o no), los números, los elementos de marcado
-y de listas de marcado, score (partitura), book (libro), bookpart
-(parte de libro), las definiciones de contexto y los bloques de
-definición de salida.
+La idoneidad de los argumentos para los predicados viene determinada
+mediante llamadas reales al predicado después de que LilyPond ya las
+ha convertido en una expresión de Scheme.  Como consecuencia, el
+argumento se puede especificar en la sintaxis de Scheme si se desea
+(precedido de @code{#} o como resultado de haber llamado a una función
+de Scheme), pero LilyPond también convierte algunas construcciones de
+LilyPond en Scheme antes de hacer efectivamente la comprobación del
+predicado sobre ellas.  Actualmente se encuentran entre ellas la
+música, los post-eventos, las cadenas simples (entrecomilladas o no),
+los números, los elementos de marcado y de listas de marcado, score
+(partitura), book (libro), bookpart (parte de libro), las definiciones
+de contexto y los bloques de definición de salida.
 
 Para ciertos tipos de expresión (como la mayor parte de la música que
 no está encerrada entre llaves) LilyPond necesita más allá de la
@@ -169,15 +208,23 @@ expresión misma para poder determinar su final.  Si tal expresión se
 considerase un argumento opcional mediante la evaluación de su
 predicado, LilyPond no podría recuperarse después de decidir que la
 expresión no se corresponde con el parámetro.  Así, ciertas formas de
-música necesitan ir encerradas entre llaves para que LilyPond pueda
-aceptarlas.  Existen también otras ambigüedades que LilyPond resuelve
-mediante la comprobación con funciones de predicado: ¿es @samp{-3} un
-post-evento de digitación o un nnúmero negativo?  ¿Es @code{"a" 4} en
-el modo de letra una cadena seguida por un número, o un evento de
-letra con la duración @code{4}?  LilyPond lo decide preguntándole a
-los predicados.  Ello significa que un debemos evitar los
-predicados permisivos como @code{scheme?} si tenemos en mente
-un uso particular en vez de una función de uso general.
+música necesitan ir encerradas entre llaves para poder considerarlas
+como aceptables bajo algunas circunstancias.  LilyPond resuelve
+algunas otras ambigüedades mediante la comprobación con funciones de
+predicado: ¿es @samp{-3} un post-evento de digitación o un número
+negativo?  ¿Es @code{"a" 4} en el modo de letra una cadena seguida por
+un número, o un evento de letra con la duración @code{4}?  LilyPond
+prueba el predicado del argumento sobre diversas interpretaciones
+sucesivas hasta que lo consigue, con un orden diseñado para minimizar
+las interpretaciones poco consistentes y la lectura por adelantado.
+
+Por ejemplo, un predicado que acepta tanto expresiones musicales como
+alturas consideraría que @code{c''} es una altura en lugar de una
+expresión musical.  Las duraciones o post-eventos que siguieran
+inmediatamente podrían no funcionar con dicha interpretación.  Así
+pues, es mejor evitar los predicados excesivamente permisivos como
+@code{scheme?} cuando la aplicación requeriría tipos de argumento más
+específicos.
 
 Para ver una lista de los predicados de tipo disponibles, consulte
 @ruser{Predicados de tipo predefinidos}.
@@ -263,7 +310,7 @@ noApuntarYPulsar =
      (parser location)
      ()
    (ly:set-option 'point-and-click #f))
-...
+@dots{}
 \noApuntarYPulsar   % desactivar la función de apuntar y pulsar
 @end example
 
@@ -354,13 +401,6 @@ no se aplica ninguna restricción.
 @item
 Como un post-evento, que comienza explícitamente con un indicador de
 dirección (a elegir entre @code{-}, @code{^} @w{y @code{_}}).
-Observe que se puede aceptar la devolución de un
-post-evento por parte de las funciones musicales que se llaman como
-música normal, lo que lleva a un resultado aproximadamente equivalente
-a
-@example
-s 1*0-\fun
-@end example
 
 En este caso, no podemos usar una expresión musical @emph{abierta}
 como último argumento, que terminaría en una expresión musical
@@ -407,7 +447,7 @@ barraManual =
      (parser location principio-final)
      (pair?)
    #@{
-     \once \override Beam #'positions = #principio-final
+     \once \override Beam.positions = #principio-final
    #@})
 
 \relative c' @{
@@ -425,7 +465,7 @@ manualBeam =
      (parser location beg end)
      (number? number?)
    #{
-     \once \override Beam #'positions = #(cons beg end)
+     \once \override Beam.positions = #(cons beg end)
    #})
 
 \relative c' {
@@ -433,6 +473,61 @@ manualBeam =
 }
 @end lilypond
 
+@funindex \temporary
+@cindex sobreescrituras temporales
+@cindex temporales, sobreescrituras
+@cindex propiedades, recuperar valor anterior
+
+Las propiedades se mantienen conceptualmente utilizando una pila
+por cada propiedad, por cada grob y por cada contexto.  Las
+funciones musicales pueden requerir la sobreescritura de una o
+varias propiedades durante el tiempo de duración de la función,
+restaurándolas a sus valores previos antes de salir.  Sin embargo,
+las sobreescrituras normales extraen y descartan la cima de la
+pila de propiedades actual antes de introducir un valor en ella,
+de manera que el valor anterior de la propiedad se pierde cuando
+se sobreescribe.  Si se quiere preservar el valor anterior, hay
+que preceder la instrucción @code{\override} con la palabra clave
+@code{\temporary}, así:
+
+@example
+\temporary \override @dots{}
+@end example
+
+El uso de @code{\temporary} hace que se borre la propiedad
+(normalmente fijada a un cierto valor) @code{pop-first} de la
+sobreescritura, de forma que el valor anterior no se extrae de la
+pila de propiedades antes de poner en ella el valor nuevo.  Cuando
+una instrucción @code{\revert} posterior extrae el avlor
+sobreescrito temporalmente, volverá a emerger el valor anterior.
+
+En otras palabras, una llamada a @code{\temporary \override} y a
+continuación otra a @code{\revert} sobre la misma propiedad, tiene
+un valor neto que es nulo.  De forma similar, la combinación en
+secuencia de @code{\temporary} y @code{\undo} sobre la misma
+música que contiene las sobreescrituras, tiene un efecto neto
+nulo.
+
+He aquí un ejemplo de una función musical que utiliza lo expuesto
+anteriormente.  El uso de @code{\temporary} asegura que los
+valores de las propiedades @code{cross-staff} y @code{style} se
+restauran a la salida a los valores que tenían cuando se llamó a
+la función @code{crossStaff}.  Sin @code{\temporary}, a la salida
+se habrían fijado los valores predeterminados.
+
+@example
+crossStaff =
+#(define-music-function (parser location notes) (ly:music?)
+  (_i "Create cross-staff stems")
+  #@{
+  \temporary \override Stem.cross-staff = #cross-staff-connect
+  \temporary \override Flag.style = #'no-flag
+  #notes
+  \revert Stem.cross-staff
+  \revert Flag.style
+#@})
+@end example
+
 
 @node Matemáticas dentro de las funciones
 @subsection Matemáticas dentro de las funciones
@@ -447,14 +542,14 @@ AltOn =
      (parser location mag)
      (number?)
    #{
-     \override Stem #'length = #(* 7.0 mag)
-     \override NoteHead #'font-size =
+     \override Stem.length = #(* 7.0 mag)
+     \override NoteHead.font-size =
        #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
    #})
 
 AltOff = {
-  \revert Stem #'length
-  \revert NoteHead #'font-size
+  \revert Stem.length
+  \revert NoteHead.font-size
 }
 
 \relative c' {
@@ -473,12 +568,12 @@ withAlt =
      (parser location mag music)
      (number? ly:music?)
    #{
-     \override Stem #'length = #(* 7.0 mag)
-     \override NoteHead #'font-size =
+     \override Stem.length = #(* 7.0 mag)
+     \override NoteHead.font-size =
        #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
      #music
-     \revert Stem #'length
-     \revert NoteHead #'font-size
+     \revert Stem.length
+     \revert NoteHead.font-size
    #})
 
 \relative c' {
@@ -508,7 +603,7 @@ mostrarNumeroDeCompas =
      (parser location)
      ()
    (if (eq? #t (ly:get-option 'display-bar-numbers))
-       #@{ \once \override Score.BarNumber #'break-visibility = ##f #@}
+       #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
        #@{#@}))
 @end example
 
@@ -579,22 +674,49 @@ argumentos.
 @translationof Markup construction in Scheme
 
 @cindex marcado, definir instrucciones de
+@funindex \displayScheme
 
-El macro @code{markup} construye expresiones de marcado en Scheme,
-proporcionando una sintaxis similar a la de LilyPond.  Por ejemplo:
+Las expresiones de marcado se representan internamente en Scheme
+usando el macro @code{markup}:
 
 @example
-(markup #:column (#:line (#:bold #:italic "hola" #:raise 0.4 "mundo")
-                  #:larger #:line ("fulano" "fulanito" "menganito")))
+(markup @var{expr})
+@end example
+
+Para ver una expresión de marcado en su forma de Scheme, utilice
+la instrucción @code{\displayScheme}:
+
+@example
+\displayScheme
+\markup @{
+  \column @{
+    \line @{ \bold \italic "hola" \raise #0.4 "mundo" @}
+    \larger \line @{ fulano fulanito menganito @}
+  @}
+@}
 @end example
 
 @noindent
-equivale a:
+La compilación del código anterior envía a la consola lo
+siguiente:
+
 @example
-#@{ \markup \column @{ \line @{ \bold \italic "hola" \raise #0.4 "mundo" @}
-                  \larger \line @{ fulano fulanito menganito @} @} #@}
+(markup
+  #:line
+  (#:column
+   (#:line
+    (#:bold (#:italic "hola") #:raise 0.4 "mundo")
+    #:larger
+    (#:line
+     (#:simple "fulano" #:simple "fulanito" #:simple "menganito")))))
 @end example
 
+Para evitar que el marcado se imprima en la página, use
+@w{@samp{\void \displayScheme @var{marcado}}}.  Asimismo, como
+ocurre con la instrucción @code{\displayMusic}, la salida de
+@code{\displayScheme} se puede guardar en un archivo externo.
+Véase @ref{Presentación de las expresiones musicales}.
+
 @noindent
 Este ejemplo muestra las principales reglas de traducción entre la
 sintaxis del marcado normal de LilyPond y la sintaxis del marcado de
@@ -607,11 +729,12 @@ sólo con Scheme.
 @multitable @columnfractions .3 .3
 @item @b{LilyPond} @tab @b{Scheme}
 @item @code{\markup marcado1} @tab @code{(markup marcado1)}
-@item @code{\markup @{ marcado1 marcado2 ... @}} @tab
-        @code{(markup marcado1 marcado2 ... )}
+@item @code{\markup @{ marcado1 marcado2 @dots{} @}} @tab
+        @code{(markup marcado1 marcado2 @dots{} )}
 @item @code{\instruccion} @tab @code{#:instruccion}
 @item @code{\variable} @tab @code{variable}
-@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )}
+@item @code{\center-column @{ @dots{} @}} @tab
+        @code{#:center-column ( @dots{} )}
 @item @code{cadena} @tab @code{"cadena"}
 @item @code{#argumento-de-scheme} @tab @code{argumento-de-scheme}
 @end multitable
@@ -702,11 +825,11 @@ Se pueden definir instrucciones de marcado nuevas usando el macro de
 Scheme @code{define-markup-command}, en el nivel sintáctico superior.
 
 @lisp
-(define-markup-command (@var{nombre-de-la-instruccion} @var{layout} @var{props} @var{arg1} @var{arg2} ...)
-    (@var{tipo-de-arg1?} @var{tipo-de-arg2?} ...)
+(define-markup-command (@var{nombre-de-la-instruccion} @var{layout} @var{props} @var{arg1} @var{arg2} @dots{})
+    (@var{tipo-de-arg1?} @var{tipo-de-arg2?} @dots{})
     [ #:properties ((@var{propiedad1} @var{valor-predeterminado1})
-                    ...) ]
-  ..command body..)
+                    @dots{}) ]
+  @dots{}command body@dots{})
 @end lisp
 
 Los argumentos son
@@ -753,6 +876,29 @@ rendimiento simplemente mediante la utilización de argumentos de
 Scheme para los argumentos antecedentes de las funciones de marcado
 que toman un marcado como su último argumento.
 
+@funindex \markup
+@cindex markup macro
+@funindex interpret-markup
+Las instrucciones de marcado tienen un ciclo de vida más bien
+complejo.  El cuerpo de la definición de una instrucción de marcado es
+responsable de la conversión de los argumentos de la instrucción de
+marcado en una expresión de sello que se devuelve.  Muy a menudo esto
+se lleva a cabo llamando a la función @code{interpret-markup} sobre
+una expresión de marcado, pasándole los argumentos @var{layout} y
+@var{props}.  Por lo general, estos argumentos se conocen solamente en
+una fase muy tardía de la composición tipográfica.  Las expresiones de
+marcado ya tienen sus componentes ensamblados dentro de expresiones de
+marcado cuando se expanden las instrucciones @code{\markup} (dentro de
+una expresión de LilyPond) o la macro @code{markup} (dentro de
+Scheme).  La evaluación y la comprobación de tipos de los argumentos
+de la instrucción de marcado tiene lugar en el momento en que se
+interpretan @code{\markup} o @code{markup}.
+
+Pero la conversión real de expresiones de marcado en expresiones de
+sello mediante la ejecución de los cuerpos de función de marcado solo
+tienen lugar cuando se llama a @code{interpret-markup} sobre una
+expresión de marcado.
+
 @node Acerca de las propiedades
 @unnumberedsubsubsec Acerca de las propiedades
 @translationof On properties
@@ -945,7 +1091,7 @@ documentación):
   (number-pair?)
   #:category graphic
   #:properties ((thickness 1))
-  "...documentación..."
+  "@dots{}documentación@dots{}"
   (let ((th (* (ly:output-def-lookup layout 'line-thickness)
                thickness))
         (x (car dest))
@@ -963,7 +1109,7 @@ instrucciones de marcado definidas por el usuario.
 (define-markup-command (draw-double-line layout props dest)
   (number-pair?)
   #:properties ((thickness 1))
-  "...documentación..."
+  "@dots{}documentación@dots{}"
   (let ((th (* (ly:output-def-lookup layout 'line-thickness)
                thickness))
         (x (car dest))
@@ -980,8 +1126,8 @@ predeterminado de p.ej. 0.6:
   (number-pair?)
   #:properties ((thickness 1)
                 (line-gap 0.6))
-  "...documentación..."
-  ...
+  "@dots{}documentación@dots{}"
+  @dots{}
 @end lisp
 
 Finalmente, se añade el código para trazar las dos líneas.  Se usan
@@ -1018,6 +1164,9 @@ sellos resultantes se combinan usando @code{ly:stencil-add}:
 @subsection Definición de nuevas instrucciones de lista de marcado
 @translationof New markup list command definition
 
+@funindex define-markup-list-command
+@funindex interpret-markup-list
+
 Las instrucciones de listas de marcado se definen con el macro de
 Scheme @code{define-markup-list-command}, que es similar al macro
 @code{define-markup-command} descrito en @ref{Definición de una
@@ -1132,14 +1281,14 @@ funciona insertando un evento dentro del contexto especificado
 (@rinternals{ApplyOutputEvent}).  Su sintaxis es
 
 @example
-\applyOutput @var{contexto} @var{proc}
+\applyOutput @var{Contexto} @var{proc}
 @end example
 
 @noindent
 donde @code{@var{proc}} es una función de Scheme que toma tres argumentos.
 
 Al interpretarse, la función @code{@var{proc}} se llama para cada objeto de
-presentación que se encuentra en el contexto @code{@var{contexto}}
+presentación que se encuentra en el contexto @code{@var{Contexto}}
 en el tiempo actual, con los siguientes argumentos:
 
 @itemize
@@ -1169,6 +1318,14 @@ cabezas de las notas que están sobre la línea central y junto a ella:
 }
 @end lilypond
 
+Para que @var{función} se interprete en los niveles de @code{Score} o de @code{Staff}
+utilice estas formas:
+
+@example
+\applyOutput #'Score #@var{función}
+\applyOutput #'Staff #@var{función}
+@end example
+
 
 @node Funciones de callback
 @section Funciones de callback
@@ -1179,13 +1336,13 @@ Las propiedades (como @code{thickness} (grosor), @code{direction}
 p. ej.:
 
 @example
-\override Stem #'thickness = #2.0
+\override Stem.thickness = #2.0
 @end example
 
 Las propiedades pueden fijarse también a un procedimiento de Scheme,
 
 @lilypond[fragment,verbatim,quote,relative=2]
-\override Stem #'thickness = #(lambda (grob)
+\override Stem.thickness = #(lambda (grob)
     (if (= UP (ly:grob-property grob 'direction))
         2.0
         7.0))
@@ -1261,10 +1418,11 @@ mi-callback = #(lambda (grob)
 @translationof Inline Scheme code
 
 La principal desventaja de @code{\tweak} es su inflexibilidad
-sintáctica.  Por ejemplo, lo siguiente produce un error de sintaxis.
+sintáctica.  Por ejemplo, lo siguiente produce un error de sintaxis (o
+más bien: así lo hacía en algún momento del pasado):
 
 @example
-F = \tweak #'font-size #-3 -\flageolet
+F = \tweak font-size #-3 -\flageolet
 
 \relative c'' @{
   c4^\F c4_\F
@@ -1362,7 +1520,7 @@ arriba.
          (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
 
 \relative c'' {
-  \override Tie #'after-line-breaking =
+  \override Tie.after-line-breaking =
   #my-callback
   c1 ~ \break
   c2 ~ c
@@ -1385,9 +1543,10 @@ razones técnicas.  Son ejemplos @code{NonMusicalPaperColumn} y
 
 @example
 \overrideProperty
-#"Score.NonMusicalPaperColumn"  % Nombre del grob
-#'line-break-system-details     % Nombre de la propiedad
-#'((next-padding . 20))         % Valor
+Score.NonMusicalPaperColumn      % Nombre del grob
+  . line-break-system-details    % Nombre de la propiedad
+  . next-padding                 % Nombre de la subpropiedad, opcional
+  #20                            % Valor
 @end example
 
 Observe, sin embargo, que @code{\override}, aplicado a
index fdc27da0cc948669a1b0d5add5262fd8afcdf01a..ad55dbc2559c7361eb5f1031b50080852c349f32 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 743dc7b27888c776186336cf4b330d3ebfc821de
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @node Tutorial de Scheme
 @appendix Tutorial de Scheme
@@ -225,7 +225,16 @@ También existen tipos de datos compuestos en Scheme.  Entre los tipos
 más usados en la programación de LilyPond se encuentran las parejas,
 las listas, las listas-A y las tablas de hash.
 
-@subheading Parejas
+@menu
+* Parejas::
+* Listas::
+* Listas asociativas (listas-A)::
+* Tablas de hash::
+@end menu
+
+@node Parejas
+@unnumberedsubsubsec Parejas
+@translationof Pairs
 
 El tipo fundacional de datos compuestos de Scheme es la @code{pareja}.
 Como se espera por su nombre, una pareja son dos valores unidos en uno
@@ -268,7 +277,7 @@ los procedimientos de Scheme @code{car} y @code{cdr}, respectivamente.
 
 @lisp
 guile> (define mipareja (cons 123 "Hola")
-... )
+@dots{} )
 guile> (car mipareja)
 123
 guile> (cdr mipareja)
@@ -282,8 +291,9 @@ Nota: @code{cdr} se pronuncia "could-er", según Sussman y Abelson,
 véase
 @uref{http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html#footnote_Temp_133}
 
-
-@subheading Listas
+@node Listas
+@unnumberedsubsubsec Listas
+@translationof Lists
 
 Una estructura de datos muy común en Scheme es la @emph{lista}.
 Formalmente, una lista se define como la lista vacía (representada
@@ -314,7 +324,10 @@ considera un dialecto de Lisp, donde @q{lisp} es una abreviatura de
 @q{List Processing} (proceso de listas).  Todas las expresiones de
 Scheme son listas.
 
-@subheading Listas asociativas (listas-A)
+
+@node Listas asociativas (listas-A)
+@unnumberedsubsubsec Listas asociativas (listas-A)
+@translationof Association lists (alists)
 
 Un tipo especial de listas son las @emph{listas asociativas} o
 @emph{listas-A}.  Se puede usar una lista-A para almacenar datos para
@@ -340,7 +353,10 @@ guile>
 Las listas-A se usan mucho en LilyPond para almacenar propiedades y
 otros datos.
 
-@subheading Tablas de hash
+
+@node Tablas de hash
+@unnumberedsubsubsec Tablas de hash
+@translationof Hash tables
 
 Estructuras de datos que se utilizan en LilyPond de forma ocasional.
 Una tabla de hash es similar a una matriz, pero los índices de la
@@ -517,7 +533,15 @@ Los procedimientos de Scheme son expresiones de Scheme ejecutables que
 devuelven un valor resultante de su ejecución.  También pueden
 manipular variables definidas fuera del procedimiento.
 
-@subheading Definir procedimientos
+@menu
+* Definir procedimientos::
+* Predicados::
+* Valores de retorno::
+@end menu
+
+@node Definir procedimientos
+@unnumberedsubsubsec Definir procedimientos
+@translationof Defining procedures
 
 Los procedimientos se definen en Scheme con @code{define}:
 
@@ -543,7 +567,10 @@ guile> (media 3 12)
 15/2
 @end lisp
 
-@subheading Predicados
+
+@node Predicados
+@unnumberedsubsubsec Predicados
+@translationof Predicates
 
 Los procedimientos de Scheme que devuelven valores booleanos se suelen
 llamar @emph{predicados}.  Por convenio (pero no por necesidad),
@@ -557,7 +584,10 @@ guile> (menor-que-diez? 15)
 #f
 @end lisp
 
-@subheading Valores de retorno
+
+@node Valores de retorno
+@unnumberedsubsubsec Valores de retorno
+@translationof Return values
 
 Los procedimientos de Scheme siempre devuelven un valor de retorno,
 que es el valor de la última expresión ejecutada en el procedimiento.
@@ -584,15 +614,23 @@ let:
 
 @lisp
 guile> (let ((x 2) (y 3) (z 4)) (display (+ x y)) (display (- z 4))
-... (+ (* x y) (/ z x)))
+@dots{} (+ (* x y) (/ z x)))
 508
 @end lisp
 
+
 @node Condicionales de Scheme
 @subsection Condicionales de Scheme
 @translationof Scheme conditionals
 
-@subheading if
+@menu
+* if::
+* cond::
+@end menu
+
+@node if
+@unnumberedsubsubsec if
+@translationof if
 
 Scheme tiene un procedimiento @code{if}:
 
@@ -613,14 +651,17 @@ guile> (if (> a b) "a es mayor que b" "a no es mayor que b")
 "a no es mayor que b"
 @end lisp
 
-@subheading cond
 
-Otro procedimiento condicional en scheme es @code{cond}:
+@node cond
+@unnumberedsubsubsec cond
+@translationof cond
+
+Otro procedimiento condicional en Scheme es @code{cond}:
 
 @example
 (cond (expresión-de-prueba-1 secuencia-de-expresiones-resultante-1)
       (expresión-de-prueba-2 secuencia-de-expresiones-resultante-2)
-      ...
+      @dots{}
       (expresión-de-prueba-n secuencia-de-expresiones-resultante-n))
 @end example
 
@@ -667,7 +708,7 @@ elementos y expresiones, de forma parecida a cómo el lenguaje humano
 se estructura en palabras y frases.  LilyPond tiene un analizador
 léxico que reconoce elementos indivisibles (números literales, cadenas
 de texto, elementos de Scheme, nombres de nota, etc.), y un analizador
-sintáctico que entiende la sintaxis, la @ruser{Gramática de LilyPond}.
+que entiende la sintaxis, la Gramática de LilyPond (@rcontrib{LilyPond grammar}).
 Una vez que sabe que se aplica una regla sintáctica concreta, ejecuta
 las acciones asociadas con ella.
 
@@ -843,7 +884,7 @@ traLaLa = @{ c'4 d'4 @}
 se convierte internamente en una definición de Scheme:
 
 @example
-(define traLaLa @var{Valor Scheme de `@code{... }'})
+(define traLaLa @var{Valor Scheme de `@code{@dots{}}'})
 @end example
 
 Esto significa que las variables de LilyPond y las variables de Scheme
@@ -887,7 +928,7 @@ LilyPond.  En lugar de definir @code{\twice}, el ejemplo anterior
 podría también haberse escrito como
 
 @example
-...
+@dots{}
 $(make-sequential-music newLa)
 @end example
 
@@ -913,7 +954,7 @@ Utilizándolos, la última parte del ejemplo se podría haber escrito
 como
 
 @example
-...
+@dots{}
 @{ #@@newLa @}
 @end example
 
@@ -935,7 +976,7 @@ procedimiento:
 #(define (nopc)
   (ly:set-option 'point-and-click #f))
 
-...
+@dots{}
 #(nopc)
 @{ c'4 @}
 @end example
@@ -960,7 +1001,7 @@ asignación de un valor a la lista-A con una clave y un valor.  La
 sintaxis de LilyPond para hacer esto es la siguiente:
 
 @example
-\override Stem #'thickness = #2.6
+\override Stem.thickness = #2.6
 @end example
 
 Esta instrucción ajusta el aspecto de las plicas.  Se añade una
@@ -987,14 +1028,25 @@ tiene una propiedad @code{thickness} (grosor), mientras que
 @subsection Variables de LilyPond compuestas
 @translationof LilyPond compound variables
 
-@subheading Desplazamientos
+@menu
+* Desplazamientos::
+* Fracciones::
+* Dimensiones::
+* Listas-A de propiedades::
+* Cadenas de listas-A::
+@end menu
+
+
+@node Desplazamientos
+@unnumberedsubsubsec Desplazamientos
+@translationof Offsets
 
 Los desplazamientos bidimensionales (coordenadas X e Y) se almacenan
 como @emph{parejas}.  El @code{car} del desplazamiento es la
 coordenada X, y el @code{cdr} es la coordenada Y.
 
 @example
-\override TextScript #'extra-offset = #'(1 . 2)
+\override TextScript.extra-offset = #'(1 . 2)
 @end example
 
 Esto asigna la pareja @code{(1 . 2)} a la propiedad
@@ -1005,17 +1057,23 @@ espacio de pentagrama a la derecha, y dos espacios hacia arriba.
 Los procedimientos para trabajar con desplazamientos están en
 @file{scm/lily-library.scm}.
 
+@node Fracciones
+@unnumberedsubsubsec Fracciones
 @subheading Fractions
 
-Fractions as used by LilyPond are again stored as @emph{pairs}, this
-time of unsigned integers.  While Scheme can represent rational numbers
-as a native type, musically @samp{2/4} and @samp{1/2} are not the same,
-and we need to be able to distinguish between them.  Similarly there are
-no negative @q{fractions} in LilyPond's mind.  So @code{2/4} in LilyPond
-means @code{(2 . 4)} in Scheme, and @code{#2/4} in LilyPond means
-@code{1/2} in Scheme.
+Las fracciones tal y como se utilizan por parte de LilyPond
+se almacenan, de nuevo, como @emph{parejas}, esta
+vez de enteros sin signo.  Mientras que Scheme es capaz de representar números racionaes
+como un tipo nativo, musicalmente @samp{2/4} y @samp{1/2} no son lo mismo,
+y necesitamos poder distinguir entre ellos.  De igual forma, no existe el concepto
+de @q{fracciones} negativas en LilyPond.  Así pues, @code{2/4} en LilyPond
+significa @code{(2 . 4)} en Scheme, y @code{#2/4} en LilyPond significa
+@code{1/2} en Scheme.
+
 
-@subheading Dimensiones
+@node Dimensiones
+@unnumberedsubsubsec Dimensiones
+@translationof Extents
 
 Las parejas se usan también para almacenar intervalos, que representan
 un rango de números desde el mínimo (el @code{car}) hasta el máximo
@@ -1030,7 +1088,10 @@ Los procedimientos para trabajar con intervalos están en
 @file{scm/lily-library.scm}.  Se deben usar estos procedimientos
 siempre que sea posible, para asegurar la consistencia del código.
 
-@subheading Listas-A de propiedades
+
+@node Listas-A de propiedades
+@unnumberedsubsubsec Listas-A de propiedades
+@translationof Property alists
 
 Una lista-A de propiedades es una estructura de datos de LilyPond que
 es una lista-A cuyas claves son propiedades y cuyos valores son
@@ -1039,7 +1100,10 @@ expresiones de Scheme que dan el valor deseado de la propiedad.
 Las propiedades de LilyPond son símbolos de Scheme, como por ejemplo
 @code{'thickness}.
 
-@subheading Cadenas de listas-A
+
+@node Cadenas de listas-A
+@unnumberedsubsubsec Cadenas de listas-A
+@translationof Alist chains
 
 Una cadena de listas-A es una lista que contiene listas-A de
 propiedades.
@@ -1162,7 +1226,7 @@ imprime lo siguiente:
                   'text
                   "f"))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 0 0))))
 @end example
@@ -1198,11 +1262,11 @@ leer:
                               (make-music 'AbsoluteDynamicEvent
                                 'text
                                 "f"))
-              'duration (ly:make-duration 2 0 1 1)
+              'duration (ly:make-duration 2 0 1/1)
               'pitch    (ly:make-pitch 0 0 0))))
 @end example
 
-Una secuencia musical @code{@{ ... @}} tiene el nombre
+Una secuencia musical @code{@{ @dots{} @}} tiene el nombre
 @code{SequentialMusic}, y sus expresiones internas se almacenan coma
 una lista dentro de su propiedad @code{'elements}.  Una nota se
 representa como un objeto @code{NoteEvent} (que almacena las
@@ -1233,7 +1297,7 @@ someNote = c'
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 0 0))
 @end example
@@ -1251,7 +1315,7 @@ someNote = <c'>
   (list (make-music
           'NoteEvent
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 0 0))))
 @end example
@@ -1269,7 +1333,7 @@ Scheme de una expresión musical.
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 0 0))
 @end example
@@ -1322,7 +1386,7 @@ representación interna de la música con la que queremos terminar.
                   'span-direction
                   -1))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 5 0))
         (make-music
@@ -1333,7 +1397,7 @@ representación interna de la música con la que queremos terminar.
                   'span-direction
                   1))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 5 0))))
 @end example
@@ -1350,7 +1414,7 @@ Ahora examinamos la entrada,
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 5 0))))
 @end example
@@ -1359,7 +1423,7 @@ Así pues, en nuestra función, tenemos que clonar esta expresión (de
 forma que tengamos dos notas para construir la secuencia), añadir
 @code{SlurEvent} a la propiedad @code{'articulations} de cada una de
 ellas, y por último hacer una secuencia @code{SequentialMusic} con los
-dos @code{EventChords}.  Para añadir a una propiedad, es útil saber
+dos elementos @code{NoteEvent}.  Para añadir a una propiedad, es útil saber
 que una propiedad no establecida se lee como @code{'()}, la lista
 vacía, así que no se requiere ninguna comprobación especial antes de
 que pongamos otro elemento delante de la propiedad
@@ -1386,15 +1450,15 @@ doubleSlur = #(define-music-function (parser location note) (ly:music?)
 @translationof Adding articulation to notes (example)
 
 La manera fácil de añadir articulación a las notas es mezclar dos
-expresiones musicales en un solo contexto, como se explica en
-@ruser{Crear contextos}.  Sin embargo, supongamos que queremos
+expresiones musicales en un solo contexto.
+Sin embargo, supongamos que queremos
 escribir una función musical que lo haga.  Esto tiene la ventaja
 adicional de que podemos usar esa función musical para añadir una
 articulación (como una instrucción de digitación) a una nota única
 dentro de un acorde, lo cual no es posible si nos limitamos a mezclar
 fragmentos de música independientes.
 
-Una @code{$variable} dentro de la notación @code{#@{...#@}} es como
+Una @code{$variable} dentro de la notación @code{#@{@dots{}#@}} es como
 una @code{\variable} normal en la notación clásica de LilyPond.
 Sabemos que
 
@@ -1421,7 +1485,7 @@ Scheme.  Empezamos examinando nuestra entrada y la salida deseada,
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch -1 0 0))))
 =====
@@ -1436,7 +1500,7 @@ Scheme.  Empezamos examinando nuestra entrada y la salida deseada,
           'articulation-type
           "accent"))
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch -1 0 0))
 @end example
@@ -1466,7 +1530,7 @@ quedar claro a partir de su nombre (¡esto también es una buena
 práctica en otros lenguajes de programación!)
 
 @example
-"Add an accent..."
+"Add an accent@dots{}"
 @end example
 
 @noindent
@@ -1580,8 +1644,9 @@ Podemos verificar que esta función musical funciona correctamente:
 @c @transl ationof Tweaking with Scheme
 
 Hemos visto cómo la salida de LilyPond se puede modificar
-profundamente usando instrucciones como @code{\override TextScript
-#'extra-offset = ( 1 . -1)}.  Pero tenemos incluso mucho más poder si
+profundamente usando instrucciones como
+@code{\override TextScript.extra-offset = ( 1 . -1)}.
+Pero tenemos incluso mucho más poder si
 utilizamos Scheme.  Para ver una explicación completa de esto,
 consulte el @ref{Tutorial de Scheme}, y @ruser{Interfaces para programadores}.
 
@@ -1597,7 +1662,7 @@ TODO Find a simple example
 @lilypond[quote,verbatim,ragged-right]
 padText = #(define-music-function (parser location padding) (number?)
 #{
-  \once \override TextScript #'padding = #padding
+  \once \override TextScript.padding = #padding
 #})
 
 \relative c''' {
@@ -1621,7 +1686,7 @@ Lo podemos usar para crear instrucciones nuevas:
 tempoPadded = #(define-music-function (parser location padding tempotext)
   (number? markup?)
 #{
-  \once \override Score.MetronomeMark #'padding = #padding
+  \once \override Score.MetronomeMark.padding = #padding
   \tempo \markup { \bold #tempotext }
 #})
 
diff --git a/Documentation/es/included/GNUmakefile b/Documentation/es/included/GNUmakefile
deleted file mode 100644 (file)
index afe7a4d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
index 61e0e8b5e39a37ef1aff55ca01f600a75983e369..d8bb8e3b4ac2adb355cc1c8a67acea0e31bfea19 100644 (file)
@@ -3,7 +3,7 @@
 @c learning/tutorial.itely
 
 @ignore
-    Translation of GIT committish: 66194168b6d61bee8aac10552f029817eb41d835
+    Translation of GIT committish: 63f65db72ca60bb87a6515a4f20a172c4a2897dc
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -100,87 +100,82 @@ durante la compilación de un archivo.}
 Haga doble clic sobre el icono de LilyPond del escritorio
 y se abrirá un archivo de ejemplo.
 
-@sourceimage{Learning_Win7_Welcome_File_Whole,,,}
+@sourceimage{LilyPad,,,}
 
 Del menú de la ventana que contiene el archivo de ejemplo, elija
 @w{@code{Archivo > Guardar como}}. No use @w{@code{Archivo > Guardar}}
 para este archivo de ejemplo porque no funcionará hasta que le aplique
 un nombre de LilyPond válido.
 
-@sourceimage{Learning_Win7_Save_Menu,,,}
+@sourceimage{FileSave,,,}
 
 Escoja un nombre para el archivo, por ejemplo @file{prueba.ly}.
 
-@sourceimage{Learning_Win7_Save_File_With_Name,,,}
+@sourceimage{SaveAs,,,}
 
 
-@subsubheading Paso 2-A. Compílelo (arrastrando y soltando)
+@subsubheading Step 2. Compilación
 
-Según su preferencia, para compilar el documento puede hacer una de
-estas dos cosas:
+Para convertir nuestro archivo de LilyPond en una partitura
+musical, tenemos que compilarlo.  Esto puede hacerse de varias
+formas: usando la técnica de arrastrar y soltar, clic con el botón
+derecho del ratón, dobe clic, o usando la línea de órdenes (la
+consola de MS-DOS).  Comenzaremos examinando las tres primeras.
 
-Arrastre el archivo y suéltelo directamente encima del icono de
-LilyPond.
+1. Arrastre el archivo y suéltelo directamente encima del icono de
+LilyPond del escritorio.
 
-@sourceimage{Learning_Win7_Open_Dragndrop,,,}
+@sourceimage{DragDrop,,,}
 
-Pulse con el botón derecho sobre el archivo y elija @w{@code{Abrir con
-> LilyPond}} del menú contextual emergente.
+No parece que haya ocurrido gran cosa, pero después de unos
+instantes, debe observar que hay dos archivos nuevos en el
+escritorio: @file{prueba.log} y @file{prueba.pdf}.
 
-@sourceimage{Learning_Win7_Open_Context_Menu,,,}
+2. Pulse sobre el archivo con el botón derecho del ratón y elija
+del menú contextual la opción @w{@code{Generar PDF}}.
 
+@sourceimage{GenPDF,,,}
 
-@subsubheading Paso 2-B. Compílelo (con doble clic)
+3. O bien, sencillamente haga doble clic sobre el archivo
+@file{prueba.ly}.
 
-O simplemente haga doble clic sobre el archivo @file{prueba.ly}.
 
+@subsubheading Step 3. Ver el resultado
 
-@subsubheading Paso 3. Examinar el resultado
-
-Durante la compilación del archivo @file{prueba.ly}, se abrirá muy
-brevemente una ventana de la consola y luego se cerrará.  Durante este
-proceso se habrán creado tres archivos adicionales:
-
-@sourceimage{Learning_Win7_All_Files_Created,,,}
-
-El archivo PDF contiene el documento @file{prueba.ly} convertido en
-una partitura musical.
+El archivo @file{prueba.pdf} contiene, compuesta tipográficamente,
+la partitura del archivo @file{prueba.ly}.  Haga doble clic sobre
+ella y se debería abrir en el visor de documentos PDF:
 
-@sourceimage{Learning_Win7_Pdf_Output,,,}
+@sourceimage{PDFRead,,,}
 
 
 @subsubheading Otras instrucciones
 
-Para crear un archivo nuevo, comience eligiendo @w{@code{Archivo > Nuevo}}
-desde dentro de algún archivo creado previamente.
+Para crear un archivo nuevo, comience eligiendo @w{@code{Archivo >
+Nuevo}} desde dentro de algún archivo creado previamente, o bien
+elija @w{@code{Archivo > Abrir}} para abrir y editar cualquier
+archivo que haya guardado antes.  También puede editar un archivo
+pulsando con el botón derecho y eligiendo la opción
+@w{@code{Editar la fuente}}.
 
-@sourceimage{Learning_Win7_New_Menu,,,}
-
-@noindent
-o bien, elija @w{@code{Archivo > Abrir}} para abrir y editar cualquier
-archivo que haya guardado antes.
-
-@sourceimage{Learning_Win7_Open_Menu,,,}
+@sourceimage{EditFile,,,}
 
 Debe guardar cualquier edición que haya realizado sobre el archivo
 antes de compilarlo, y si no se ha creado un PDF, deberá comprobar el
 archivo @command{log} de registro que se ha creado durante el intento
 de compilación, en busca de algún error.
 
-@sourceimage{Learning_Win7_Log_File,,,}
+@sourceimage{BadLog,,,}
 
 Este archivo de registro se sobreescribe cada vez que compilamos un
 archivo de LilyPond.
 
-El archivo PS se utiliza internamente por parte de LilyPond para crear
-el archivo PDF, y se puede ignorar.  También se sobreescribe cada vez
-que compilamos nuestro documento.
-
 Si estamos viendo el archivo en un visor de documentos PDF, tiene que
-cerrar el PDF cuando quiera realizar una compilación nueva, porque
+cerrar el PDF cuando quiera intentar una compilación nueva, porque
 podría fallar la creación del PDF nuevo mientras se está viendo con
 algún programa.
 
+@sourceimage{BadLog2,,,}
 
 @end macro
 
@@ -203,7 +198,7 @@ Haga un archivo de texto con el nombre
 @example
 \\version "@w{@versionStable{}}"
 @{
-  c' e' g' e'
+@ @ c' e' g' e'
 @}
 @end example
 
index 27cd758bf93d670ce3ca13e3f6ff6bcd7260e965..480fd64977d22bfa6b47531045ca6666f46a381a 100644 (file)
@@ -3,7 +3,7 @@
 @c contributor/introduction.itely
 
 @ignore
-    Translation of GIT committish: 4c7bdf42ee240fdbb3c3dab2b1c201eae04253fa
+    Translation of GIT committish: f6443f01a56112f080b8d2e7e646007397bdf6ec
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -135,7 +135,7 @@ implican en el desarrollo de su programa favorito.  Arreglar fallos,
 implementar funcionalidades nuevas, documentar el código fuente: es
 mucho lo que hay que hacer, pero lo principal es: hay una oportunidad
 para todos de aprender más sobre LilyPond, sobre el Software Libre,
-sobre programación... y pasarlo bien.  Si siente curiosidad sobre
+sobre programación@dots{} y pasarlo bien.  Si siente curiosidad sobre
 cualquiera de ellos, el lema es: @emph{Join the Frogs!}
 
 
diff --git a/Documentation/es/learning/GNUmakefile b/Documentation/es/learning/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 5c5197b9411218b202168cfdb382bf339495d565..487ce0e3daa77f03aeb04725283a6b5b7ede192f 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 45dd19546e9b75b3e1e977732f0962f35dd3290e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @ignore
 Tutorial guidelines:  (different from policy.txt!)
@@ -52,7 +52,7 @@ Esta sección presenta la notación común que se utiliza para música a
 una voz sobre un pentagrama único.
 
 @menu
-* Comprobaciones de compás::
+* Líneas divisorias y comprobaciones de compás::
 * Alteraciones accidentales y armaduras::
 * Ligaduras de unión y de expresión::
 * Articulaciones y matices dinámicos::
@@ -62,19 +62,43 @@ una voz sobre un pentagrama único.
 @end menu
 
 
+@node Líneas divisorias y comprobaciones de compás
+@subsection Líneas divisorias y comprobaciones de compás
+@translationof Bar lines and bar checks
+
+@menu
+* Líneas divisorias::
+* Comprobaciones de compás::
+@end menu
+
+@node Líneas divisorias
+@unnumberedsubsubsec Líneas divisorias
+@translationof Bar lines
+
+Las líneas de compás sencillas se dibujan automáticamente en la
+música, por lo que no hay que añadirlas de forma manual.  Otros
+tipos de barras de compás se añaden usando @code{\bar}, por
+ejemplo @code{\bar "||"} para una doble barra, o @code{\bar "|."}
+para la doble barra final.  Para ver una lista completa de las
+líneas divisorias, consulte @ruser{Barras de compás}.
+
+@lilypond[verbatim,quote,relative=2]
+g1 e1 \bar "||" c2. c'4 \bar "|."
+@end lilypond
+
 @node Comprobaciones de compás
-@subsection Comprobaciones de compás
+@unnumberedsubsubsec Comprobaciones de compás
 @translationof Bar checks
 
 Aunque no es estrictamente necesario, es coneniente utilizar
 @emph{comprobaciones de compás} dentro del código de entrada para
-indicar dónde se supone que van las líneas divisorias.  Se introducen
-mediante el caráter de barra vertical, @code{|} (AltGr - 1 en el
-teclado español).  Con las comprobaciones de compás, el programa puede
-verificar que hemos introducido las duraciones que completan los
-compases correctamente.  Las comprobaciones de compás también hacen
-que el código de entrada sea más fácil de leer, porque ayudan a
-organizar el material.
+indicar dónde se supone que van las líneas divisorias.  Se
+introducen mediante el caráter de barra vertical, @code{|} (AltGr
+- 1 en el teclado español).  Con las comprobaciones de compás, el
+programa puede verificar que hemos introducido las duraciones que
+completan los compases correctamente.  Las comprobaciones de
+compás también hacen que el código de entrada sea más fácil de
+leer, porque ayudan a organizar el material.
 
 @lilypond[verbatim,quote,relative=2]
 g1 | e1 | c2. c'4 | g4 c g e | c4 r r2 |
@@ -89,13 +113,20 @@ Referencia de la notación:
 @subsection Alteraciones accidentales y armaduras
 @translationof Accidentals and key signatures
 
+@menu
+* Alteraciones accidentales::
+* Armaduras::
+* Advertencia armaduras y alturas::
+@end menu
 
 @warning{Con frecuencia, los nuevos usuarios se encuentran confundidos
 por las alteraciones accidentales: le rogamos que lea la advertencia
 que aparece al final de esta sección, ¡especialmente si no está
 familiarizado con la teoría musical!}
 
-@subheading Alteraciones accidentales
+@node Alteraciones accidentales
+@unnumberedsubsubsec Alteraciones accidentales
+@translationof Accidentals
 
 @cindex accidentales, alteraciones
 @cindex alteraciones
@@ -133,7 +164,10 @@ cis4 ees fisis, aeses
 @end lilypond
 
 @cindex tonalidad, armadura de la, establecer
-@subheading Armaduras
+
+@node Armaduras
+@unnumberedsubsubsec Armaduras
+@translationof Key signatures
 
 @cindex tonalidad, armadura de
 @cindex armadura
@@ -168,7 +202,9 @@ a1 |
 
 @smallspace
 
-@subheading Advertencia: armaduras y alturas
+@node Advertencia armaduras y alturas
+@unnumberedsubsubsec Advertencia: armaduras y alturas
+@translationof Warning key signatures and pitches
 
 Glosario musical:
 @rglos{accidental},
@@ -255,7 +291,16 @@ Referencia de la notación:
 @funindex ( ... )
 @funindex \( ... \)
 
-@subheading Ligaduras de unión
+@menu
+* Ligaduras de unión::
+* Ligaduras de expresión::
+* Ligaduras de fraseo::
+* Advertencias ligaduras de expresión frente a ligaduras de unión::
+@end menu
+
+@node Ligaduras de unión
+@unnumberedsubsubsec Ligaduras de unión
+@translationof Ties
 
 Glosario musical:
 @rglos{tie}.
@@ -267,7 +312,9 @@ tilde curva @code{~} a la primera nota ligada:
 g4~ g c2~ | c4~ c8 a~ a2 |
 @end lilypond
 
-@subheading Ligaduras de expresión
+@node Ligaduras de expresión
+@unnumberedsubsubsec Ligaduras de expresión
+@translationof Slurs
 
 Glosario musical:
 @rglos{slur}.
@@ -280,7 +327,9 @@ abarcando varias notas.  Las notas inicial y final se marcan mediante
 d4( c16) cis( d e c cis d) e( d4)
 @end lilypond
 
-@subheading Ligaduras de fraseo
+@node Ligaduras de fraseo
+@unnumberedsubsubsec Ligaduras de fraseo
+@translationof Phrasing slurs
 
 Glosario musical:
 @rglos{slur},
@@ -299,7 +348,10 @@ g4\( g8( a) b( c) b4\)
 @smallspace
 
 @cindex ligaduras de expresión frente a ligaduras de unión
-@subheading Advertencias: ligaduras de expresión frente a ligaduras de unión
+
+@node Advertencias ligaduras de expresión frente a ligaduras de unión
+@unnumberedsubsubsec Advertencias: ligaduras de expresión frente a ligaduras de unión
+@translationof Warnings slurs vs. ties
 
 Glosario musical:
 @rglos{articulation},
@@ -330,7 +382,15 @@ Referencia de la notación:
 @subsection Articulaciones y matices dinámicos
 @translationof Articulation and dynamics
 
-@subheading Articulaciones
+@menu
+* Articulaciones::
+* Indicaciones de digitación::
+* Matices dinámicos::
+@end menu
+
+@node Articulaciones
+@unnumberedsubsubsec Articulaciones
+@translationof Articulations
 
 @cindex articulación
 @cindex acento
@@ -343,11 +403,13 @@ Las @notation{articulaciones} más corrientes se pueden añadir a las
 notas utilizando un guión @code{-} seguido de un carácter único:
 
 @lilypond[verbatim,quote,relative=2]
-c4-^ c-+ c-- c-|
+c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
-@subheading Digitaciones
+@node Indicaciones de digitación
+@unnumberedsubsubsec Indicaciones de digitación
+@translationof Fingerings
 
 @cindex digitaciones
 
@@ -374,7 +436,9 @@ mejor dejar que LilyPond determine la dirección de las articulaciones.
 c4_-^1 d^. f^4_2-> e^-_+
 @end lilypond
 
-@subheading Matices dinámicos
+@node Matices dinámicos
+@unnumberedsubsubsec Matices dinámicos
+@translationof Dynamics
 
 @cindex dinámica, indicaciones de
 @cindex matices
@@ -514,7 +578,15 @@ Referencia de la notación:
 @subsection Instrucciones rítmicas avanzadas
 @translationof Advanced rhythmic commands
 
-@subheading Compás parcial
+@menu
+* Compás parcial::
+* Grupos especiales::
+* Notas de adorno::
+@end menu
+
+@node Compás parcial
+@unnumberedsubsubsec Compás parcial
+@translationof Partial measure
 
 @cindex anacrusa
 @cindex compás parcial
@@ -526,40 +598,45 @@ Glosario musical:
 @rglos{anacrusis}.
 
 Una @notation{anacrusa} se introduce con la palabra clave
-@code{\partial}.  Va seguida de una duración: @code{\partial 4} es una
-anacrusa de negra y @code{\partial 8} de corchea.
+@code{\partial}.  Va seguida de una duración: @code{\partial 4} es
+una anacrusa de negra y @code{\partial 8} de corchea.
 
 @lilypond[verbatim,quote,relative=2]
 \partial 8 f8 |
 c2 d |
 @end lilypond
 
-@subheading Grupos especiales
+@node Grupos especiales
+@unnumberedsubsubsec Grupos especiales
+@translationof Tuplets
 
 @cindex grupos especiales
 @cindex tresillos
 
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
 
 Glosario musical:
 @rglos{note value},
 @rglos{triplet}.
 
-Los grupos especiales como los tresillos se hacen con la palabra clave
-@code{\times}.  Requiere dos argumentos: una fracción y un fragmento
-de música.  La duración del fragmento de música se multiplica por la
-fracción.  Los tresillos hacen que las notas ocupen 2/3 de su duración
-expresa, por tanto un @notation{tresillo} lleva una fracción de 2/3:
+Los grupos especiales como los tresillos se hacen con la palabra
+clave @code{\tuplet}.  Requiere dos argumentos: una fracción y un
+fragmento de música.  La fracción es el número de notas del grupo
+partido por el número de notas que normalmente ocupan la misma
+duración.  Para los tresillos hay tres notas en el espacio de dos,
+de manera que los @notation{tresillos} tienen una fracción de 3/2.
 
 @lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
 @end lilypond
 
-@subheading Notas de adorno
+@node Notas de adorno
+@unnumberedsubsubsec Notas de adorno
+@translationof Grace notes
 
 @cindex notas de adorno
 @cindex acciaccatura
@@ -583,7 +660,7 @@ expresión musical por la palabra clave @code{\appoggiatura} o
 @code{\acciaccatura}
 
 @lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
 c2 \appoggiatura b16 c2 |
 c2 \acciaccatura b16 c2 |
 @end lilypond
@@ -627,6 +704,12 @@ de una voz en el mismo pentagrama.
 @cindex compuesta, expresión musical
 @cindex musical, expresión, compuesta
 
+@menu
+* Analogía expresiones matemáticas::
+* Expresiones musicales simultáneas varios pentagramas::
+* Expresiones musicales simultáneas un solo pentagrama::
+@end menu
+
 En los archivos de entrada de LilyPond, la música se representa
 mediante @emph{expresiones musicales}.  Una sola nota es una expresión
 musical:
@@ -652,7 +735,9 @@ musical:
 { { a4 g } f4 g }
 @end lilypond
 
-@subheading Analogía: expresiones matemáticas
+@node Analogía expresiones matemáticas
+@unnumberedsubsubsec Analogía: expresiones matemáticas
+@translationof Analogy mathematical expressions
 
 Este mecanismo es semejante a las fórmulas matemáticas: una fórmula
 grande se construye combinando fórmulas pequeñas.  Dichas fórmulas se
@@ -679,7 +764,9 @@ musicales se pueden anidar a una profundidad arbitraria, lo que se
 hace necesario para músicas complejas como las partituras polifónicas.
 
 
-@subheading Expresiones musicales simultáneas: varios pentagramas
+@node Expresiones musicales simultáneas varios pentagramas
+@unnumberedsubsubsec Expresiones musicales simultáneas: varios pentagramas
+@translationof Simultaneous music expressions multiple staves
 
 @cindex varios pentagramas
 @cindex pentagramas, varios
@@ -726,11 +813,13 @@ márgenes distintos dentro del código de LilyPond, de esta forma, lo
 hace mucho más fácil de leer por nosotros los seres humanos.
 
 @warning{Cada nota se entiende relativa a la nota anterior de la
-entrada, no relativa a la @code{c''} dentro de la instrucción inicial
-@code{@bs{}\relative}.}
+entrada, solamente la primera es relativa a la @code{c''} dentro de
+la instrucción inicial @code{@bs{}\relative}.}
 
 
-@subheading Expresiones musicales simultáneas: un solo pentagrama
+@node Expresiones musicales simultáneas un solo pentagrama
+@unnumberedsubsubsec Expresiones musicales simultáneas: un solo pentagrama
+@translationof Simultaneous music expressions single staff
 
 Para determinar el número de pentagramas en una pieza, LilyPond
 examina el comienzo de la primera expresión.  Si hay una sola nota,
@@ -1008,14 +1097,8 @@ cada sílaba mediante un espacio.
 >>
 @end lilypond
 
-@warning{Es
-esencial que la última sílaba esté separada de la llave de cierre por
-un silencio o línea en blanco, pues en caso contrario se tomará como
-parte de la sílaba, dando lugar a un extraño error, véase
-@rprogram{Apparent error in ../ly/init.ly}.}
-
 Observe los
-ángulos dobles @w{@code{<< ... >>}} alrededor del fragmento entero
+ángulos dobles @w{@code{<<@dots{}>>}} alrededor del fragmento entero
 para expresar que la música y la letra han de suceder al mismo tiempo.
 
 @node Alineación de la letra a una melodía
@@ -1338,7 +1421,7 @@ para acortar el código si una sección musical se repite muchas veces.
 
 @c KEEP LY
 @lilypond[verbatim,quote,ragged-right]
-tresilloA = \times 2/3 { c,8 e g }
+tresilloA = \tuplet 3/2 { c,8 e g }
 compasA = { \tresilloA \tresilloA \tresilloA \tresilloA }
 
 \relative c'' {
@@ -1417,11 +1500,10 @@ en @ruser{Crear títulos encabezamientos y pies de página}.
 @cindex absolutos, nombres de nota
 
 Hasta el momento siempre hemos utilizado @code{\relative} para definir
-las alturas.  Ésta es la forma más sencilla de escribir la mayor parte
-de la música, pero existe otra forma de definir las alturas: el modo
-absoluto.
+las alturas.  Ésta es normalmente la forma más rápida de escribir la mayor parte
+de la música.  Sin @code{\relative}, las alturas se interpretan en modo absoluto.
 
-Si omite el @code{\relative}, LilyPond tratará todas las alturas como
+En este modo, LilyPond tratará todas las alturas como
 valores absolutos.  Una @code{c'} significará siembre un Do central,
 una @code{b} significará siempre la nota inmediatamente por debajo del
 Do central, y una @code{g,} significará siempre la nota que se coloca
@@ -1486,9 +1568,27 @@ de localizar.
 
 Sin embargo, el modo absoluto es útil para escribir música que
 contenga intervalos grandes, y será extremadamente útil para hacer
-archivos de LilyPond generados por ordenador.
+archivos de LilyPond generados por ordenador.  Cuando se copian y
+pegan fragmentos melódicos, el modo absoluto preserva la octava
+del material original.
+
+A veces la música se dispone de formas más complejas.  Si está
+usando @code{\relative} dentro de @code{\relative}, las secciones
+relativas externa e interna son independientes:
+
+@lilypond[verbatim,quote]
+\relative c { c'4 \relative c'' { f g } c }
+@end lilypond
 
+@funindex \absolute
+Si está usando música absoluta dentro de un bloque de música
+relativa, tendrá que marcar la música absoluta explícitamente con
+la instrucción @code{\absolute} para evitar que se incorpore a la
+música relativa:
 
+@lilypond[verbatim,quote]
+\relative c { c'4 \absolute { f'' g'' } c }
+@end lilypond
 
 @node Más allá del tutorial
 @subsection Más allá del tutorial
index be1aafaa8e3f5c1059c7857aa5f1f53f7739ede0..72290b6fa682fd3192f02c759d4513667f9e42e1 100644 (file)
@@ -1,15 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 6da27f9b294c385ff8fc75876e152d67f0b4794e
+    Translation of GIT committish: 11cf358d3e89f42616c4361fc3203add5662cf4e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
-
+@c \version "2.17.29"
 
 @node Conceptos fundamentales
 @chapter Conceptos fundamentales
@@ -64,7 +63,7 @@ Un ejemplo básico de archivo de entrada de LilyPond es el siguiente:
 \header @{ @}
 
 \score @{
-  @var{...expresión musical compuesta...}  % toda la música viene aquí
+  @var{ @dots{} expresión musical compuesta @dots{} }  % toda la música va aquí
   \layout @{ @}
   \midi @{ @}
 @}
@@ -147,13 +146,13 @@ cosa entre una sola nota hasta una enorme expresión compuesta como
 @example
 @{
   \new StaffGroup <<
-    @var{...inserte aquí la partitura completa de una ópera de Wagner...}
+    @var{ @dots{} inserte aquí la partitura completa de una ópera de Wagner @dots{} }
   >>
 @}
 @end example
 
 @noindent
-Puesto que todo se encuentra dentro de @code{@{ ... @}}, cuenta como
+Puesto que todo se encuentra dentro de @code{@{ @dots{} @}}, cuenta como
 una expresión musical.
 
 Como vimos anteriormente, el bloque @code{\score} puede contener otras
@@ -327,13 +326,13 @@ Aquí hemos asignado nombres a los pentagramas: @qq{cantante} y
 que resulta útil cultivar de manera que podamos saber de un vistazo
 para qué es cada pentagrama.
 
-Recuerde que utilizamos @code{<< ... >>} en lugar de @code{@{ ... @}}
+Recuerde que utilizamos @code{<< @dots{} >>} en lugar de @code{@{ @dots{} @}}
 para presentar la música simultánea.  Esto hace que las partes vocal y
 del piano aparezcan una sobre la otra en la partitura.  La
-construcción @code{<< ... >>} no sería necesaria para el pentagrama
+construcción @code{<< @dots{} >>} no sería necesaria para el pentagrama
 del cantante en el ejemplo de arriba si contiene solamente una
 expresión musical secuencial, pero se necesitarían los @code{<<
-... >>} en lugar de las llaves si la música de ese pentagrama fuese a
+@dots{} >>} en lugar de las llaves si la música de ese pentagrama fuese a
 contener dos o más expresiones simultáneas, p.ej. dos voces
 simultáneas, o una voz con letra.  Vamos a tener una voz con letra,
 por lo que se requieren los ángulos dobles.  Después añadiremos algo
@@ -521,29 +520,29 @@ distintas clases de corchetes, llaves y paréntesis.
 @multitable @columnfractions .3 .7
 @headitem Tipo de paréntesis
   @tab Función
-@item @code{@{ .. @}}
+@item @code{@{ @dots{} @}}
   @tab Encierra un fragmento secuencial de música
-@item @code{< .. >}
+@item @code{< @dots{} >}
   @tab Encierra las notas de un acorde
-@item @code{<< .. >>}
+@item @code{<< @dots{} >>}
   @tab Encierra expresiones musicales simultáneas
-@item @code{( .. )}
+@item @code{( @dots{} )}
   @tab Marca el comienzo y el final de una ligadura de expresión
-@item @code{\( .. \)}
+@item @code{\( @dots{} \)}
   @tab Marca el comienzo y el final de una ligadura de fraseo
-@item @code{[ .. ]}
+@item @code{[ @dots{} ]}
   @tab Marca el comienzo y el final de un barrado manual
 @end multitable
 
 A las anteriores, debemos añadir otras construcciones que generan
 líneas entre o a través de las notas: las ligaduras de unión (marcadas
 con una tilde curva, @code{~}), los grupos especiales que se escriben
-como @code{\times x/y @{..@}}, y las notas de adorno, que se escriben
-como @code{\grace@{..@}}.
+como @code{\tuplet x/y @{ @dots{} @}}, y las notas de adorno, que se escriben
+como @code{\grace @{ @dots{} @}}.
 
 Fuera de LilyPond, el uso convencional de los paréntesis y otros
 corchetes requiere que los distintos tipos se encuentren anidados
-correctamente, como en: @code{<< [ @{ ( .. ) @} ] >>}, de manera que
+correctamente, como en: @code{<< [ @{ ( @dots{} ) @} ] >>}, de manera que
 los paréntesis que se cierran deben encontrarse en el orden
 exactamente opuesto al de los paréntesis que se abren.  Esto
 @strong{es} un requisito para los tres tipos de paréntesis que se
@@ -574,10 +573,10 @@ unión que atraviesa dos grupos especiales, y una ligadura de fraseo
 que sale del interior de un grupo especial (líneas 3 y 4).
 
 @lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
 @end lilypond
 
 
@@ -637,7 +636,7 @@ En primer lugar observe este ejemplo de cuatro acordes:
 @end lilypond
 
 Esto se puede expresar utilizando sólo símbolos de acorde con ángulos
-simples, @code{< ... >}, y para este propósito tan sólo se necesita
+simples, @code{< @dots{} >}, y para este propósito tan sólo se necesita
 una voz.  Pero suponga que el Fa sostenido fuese realmente una corchea
 seguida de un Sol corchea, una nota de paso que conduce al La.  Ahora
 tenemos dos notas que empiezan en el mismo momento pero tienen
@@ -654,8 +653,8 @@ Veamos cómo se hace esto dentro de la sintaxis de entrada de LilyPond.
 
 La forma más fácil de introducir fragmentos con más de una voz en un
 solo pentagrama es escribir cada voz como una secuencia (con
-@code{@{...@}}), y combinarlas simultáneamente con ángulos dobles,
-@code{<<...>>}.  Los fragmentos también se deben separar mediante una
+@code{@{ @dots{} @}}), y combinarlas simultáneamente con ángulos dobles,
+@code{<< @dots{} >>}.  Los fragmentos también se deben separar mediante una
 doble barra invertida, @code{\\}, para situarlos en voces separadas.
 Sin esto, las notas irían a una sola voz, lo que normalmente produce
 errores.  Esta técnica se adapta especialmente bien a piezas de música
@@ -732,7 +731,7 @@ correcta.
 @end lilypond
 
 Todas estas voces están separadas de la voz principal que contiene las
-notas justo por fuera de la construcción @code{<< .. >>}.  Le
+notas justo por fuera de la construcción @code{<< @dots{} >>}.  Le
 llamaremos a esto la @emph{construcción simultánea}.  Las ligaduras
 (de prolongación y de expresión) solamente pueden conectar notas que
 estén dentro de la misma voz, luego las ligaduras no pueden entrar o
@@ -791,7 +790,8 @@ voz tres a círculos verdes con aspas, y la voz cuatro (que no se
 utiliza aquí) a aspas color magenta.  @code{\voiceNeutralStyle} (que
 tampoco se usa aquí) devuelve todo al estilo predeterminado.  Veremos
 más adelante cómo el usuario puede crear instrucciones como éstas.
-Véase @ref{Visibilidad y color de los objetos} y @ref{Uso de variables para los trucos}.
+Véase @ref{Visibilidad y color de los objetos} y
+@ref{Uso de variables para los ajustes de disposición}.
 
 @cindex polifonía y modo relativo
 @cindex relativo, modo, polifonía y
@@ -817,13 +817,13 @@ voces están muy separadas, es colocar una instrucción @code{\relative}
 al principio de cada voz:
 
 @example
-\relative c' @{ notaA ... @}
+\relative c' @{ notaA @dots{} @}
 <<
-  \relative c'' @{ < notaB notaC > ... @}
+  \relative c'' @{ < notaB notaC > @dots{} @}
 \\
-  \relative g' @{ notaD ... @}
+  \relative g' @{ notaD @dots{} @}
 >>
-\relative c' @{ notaE ... @}
+\relative c' @{ notaE @dots{} @}
 @end example
 
 Finalmente, analicemos las voces en una pieza de música más compleja.
@@ -844,15 +844,15 @@ las complicaciones se explicarán en secciones posteriores).
   \\  % Voice two
     {
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No voice three
   \\  % Voice four
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -893,15 +893,15 @@ entienda.
   \\  % Voice two
     { \voiceTwoStyle
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No Voice three (we want stems down)
   \\  % Voice four
     { \voiceThreeStyle
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -1620,7 +1620,7 @@ Hemos visto esto en la sección acerca de la letra, en @ref{Voces y música voca
 
 @seealso
 Referencia de la notación:
-@ruser{Crear contextos}.
+@ruser{Crear y referenciar contextos}.
 
 
 @node Explicación de los grabadores
@@ -1682,8 +1682,7 @@ a partir del nombre (en inglés), y viceversa.
   @tab Graba las claves
 @item Completion_heads_engraver
   @tab Divide las notas que atraviesan una línea divisoria
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
   @tab Crea reguladores e indicaciones dinámicas textuales
 @item Forbid_line_break_engraver
   @tab Evita los saltos de línea si queda algún elemento musical activo
@@ -1879,9 +1878,9 @@ y esto los desactivará en todos los pentagramas:
 >>
 @end lilypond
 
-Como un ejemplo más, si se establece @code{clefOctavation} dentro del
+Como un ejemplo más, si se establece @code{clefTransposition} dentro del
 contexto de @code{Score}, éste cambia inmediatamente el valor de la
-octavación en todos los pentagramas en curso y establece un nuevo
+transposición en todos los pentagramas en curso y establece un nuevo
 valor predeterminado que se aplicará a todos los pentagramas.
 
 La instrucción opuesta, @code{\unset}, tiene el efecto de suprimir la
@@ -1932,7 +1931,7 @@ en que se crea el contexto.  A veces esta forma de establecer el valor
 de una propiedad es mucho más clara, si ha de quedar fijo durante todo
 el tiempo que dure el contexto.  Cuando se crea un contexto con una
 instrucción @code{\new} puede ir inmediatamente seguido de un bloque
-@code{\with @{ .. @}} en el que se establecen los valores predeterminados de las
+@code{\with @{ @dots{} @}} en el que se establecen los valores predeterminados de las
 propiedades.  Por ejemplo, si queremos suprimir la impresión de
 becuadros adicionales para toda la duración de un pentagrama, podemos
 escribir:
@@ -2435,7 +2434,7 @@ celloMusic = \relative c {
 
 @seealso
 Las plantillas de inicio se pueden encontrar en el apéndice
-@q{Templates}, véase @ref{Pentagrama único}.
+@q{Plantillas}, véase @ref{Plantillas de pentagrama único}.
 
 
 @node Partitura vocal a cuatro voces SATB
@@ -2545,8 +2544,8 @@ lower = \relative c, {
 @end lilypond
 
 Ninguna de las plantillas proporciona esta disposición con exactitud.
-La más parecida es @q{partitura vocal SATB y reducción de piano
-automática} (véase @ref{Conjuntos vocales}), pero necesitamos cambiar la
+La más parecida es @ref{Partitura vocal SATB y reducción para piano automática},
+pero necesitamos cambiar la
 disposición y añadir un acompañamiento de piano que no esté derivado
 automáticamente de las partes vocales.  Las variables que contienen la
 música y la letra de las partes vocales es adecuada, pero tendremos
@@ -2884,12 +2883,12 @@ ejemplo final que aparece al final de la sección, borre los dobles
 >>
 @end example
 
-No es necesario utilizar la construcción simultánea @code{<< >>} para
+No es necesario utilizar la construcción simultánea @code{<< @dots{} >>} para
 el pentagrama del manual dos y el pentagrama del órgano de pedal, ya
 que contienen una única expresión, pero no hace daño, y es una buena
 costumbre utilizar siempre dobles ángulos después de @code{\new Staff}
 cuando hay varias voces.  Lo opuesto es cierto para las voces:
-normalmente deben ir seguidas de llaves @code{@{ .. @}} en caso de que
+normalmente deben ir seguidas de llaves @code{@{ @dots{} @}} en caso de que
 tengamos música codificada como distintas variables que se deben
 situar consecutivamente.
 
@@ -2991,8 +2990,7 @@ forma que los valores sean idénticos.
         @}
       >>  % % fin del contexto de Staff ManualUno
       \new Staff = "ManualDos" \with @{
-        \override VerticalAxisGroup
-          #'staff-staff-spacing  #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       @} <<
         \keyTime
         \clef "bass"
@@ -3056,8 +3054,7 @@ PedalOrganMusic = \relative c {
         }
       >>  % end ManualOne Staff context
       \new Staff = "ManualTwo" \with {
-        \override VerticalAxisGroup
-          #'staff-staff-spacing #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       } <<
         \keyTime
         \clef "bass"
@@ -3127,7 +3124,7 @@ usuario) para hacer trucos:
 @lilypond[quote,verbatim,ragged-right]
 dolce = \markup { \italic \bold dolce }
 
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
 fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
@@ -3159,7 +3156,7 @@ leer, sobre todo la última línea.
 violin = \relative c'' @{
   \repeat volta 2 @{
     c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
-    \once \override TextScript #'padding = #5.0
+    \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d |
     c,4.\markup @{
       \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
@@ -3186,7 +3183,7 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = #padding
+     \once \override TextScript.padding = #padding
    #})
 
 \relative c''' {
index bdb5286ac04e8bcbd57f01a380c5f8d7ef7c7b0b..ce9b26d388a5ed9ae9f4e4f4f0d1c0e253c96d16 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 67a345f965d169bc1acd23ff4160914fb2142f38
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -18,39 +18,53 @@ Esta sección del manual contiene plantillas con la partitura de LilyPond
 ya preparada.  Sólo tiene que escribir las notas, lanzar LilyPond y ¡disfrutar de
 unas hermosas partituras impresas!
 
-@c bad node name for ancient notation to avoid conflict
+
 @menu
-* Pentagrama único::
+* Plantillas de pentagrama único::
 * Plantillas de piano::
-* Cuarteto de cuerda::
-* Conjuntos vocales::
+* Plantillas de cuarteto de cuerda::
+* Plantillas de conjuntos vocales::
 * Plantillas orquestales::
 * Plantillas para notación antigua::
 * Otras plantillas::
 @end menu
 
 
-@node Pentagrama único
-@appendixsec Pentagrama único
-@translationof Single staff
+@node Plantillas de pentagrama único
+@appendixsec Plantillas de pentagrama único
+@translationof Single staff templates
+
+@menu
+* Sólo notas::
+* Notas y letra::
+* Notas y acordes::
+* Notas letra y acordes::
+@end menu
 
+@node Sólo notas
 @appendixsubsec Sólo notas
+@translationof Notes only
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
 {single-staff-template-with-only-notes.ly}
 
-
+@node Notas y letra
 @appendixsubsec Notas y letra
+@translationof Notes and lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
 {single-staff-template-with-notes-and-lyrics.ly}
 
+@node Notas y acordes
 @appendixsubsec Notas y acordes
+@translationof Notes and chords
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {single-staff-template-with-notes-and-chords.ly}
 
-@appendixsubsec Notas, letra y acordes.
+@node Notas letra y acordes
+@appendixsubsec Notas, letra y acordes
+@translationof Notes lyrics and chords
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {single-staff-template-with-notes,-lyrics,-and-chords.ly}
@@ -60,72 +74,117 @@ unas hermosas partituras impresas!
 @appendixsec Plantillas de piano
 @translationof Piano templates
 
+@menu
+* Piano solo::
+* Piano y melodía con letra::
+* Piano con letra centrada::
+@end menu
+
+@node Piano solo
 @appendixsubsec Piano solo
+@translationof Solo piano
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-simple.ly}
 
+@node Piano y melodía con letra
 @appendixsubsec Piano y melodía con letra
+@translationof Piano and melody with lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-with-melody-and-lyrics.ly}
 
+@node Piano con letra centrada
 @appendixsubsec Piano con letra centrada
+@translationof Piano and melody with lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-with-centered-lyrics.ly}
 
 
-@node Cuarteto de cuerda
-@appendixsec Cuarteto de cuerda
-@translationof String quartet
+@node Plantillas de cuarteto de cuerda
+@appendixsec Plantillas de cuarteto de cuerda
+@translationof String quartet templates
+
+@menu
+* Cuarteto de cuerda simple::
+* Particellas de cuarteto de cuerda::
+@end menu
 
+@node Cuarteto de cuerda simple
 @appendixsubsec Cuarteto de cuerda simple
+@translationof String quartet
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {string-quartet-template-simple.ly}
 
+@node Particellas de cuarteto de cuerda
 @appendixsubsec Particellas de cuarteto de cuerda
+@translationof String quartet parts
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {string-quartet-template-with-separate-parts.ly}
 
 
-@node Conjuntos vocales
-@appendixsec Conjuntos vocales
-@translationof Vocal ensembles
+@node Plantillas de conjuntos vocales
+@appendixsec Plantillas de conjuntos vocales
+@translationof Vocal ensembles templates
 
+@menu
+* Partitura vocal SATB::
+* Partitura vocal SATB y reducción para piano automática::
+* SATB con contextos alineados::
+* SATB sobre cuatro pentagramas::
+* Estrofas a solo y estribillo a dos voces::
+* Melodías de himnos::
+* Salmos::
+@end menu
+
+@node Partitura vocal SATB
 @appendixsubsec Partitura vocal SATB
+@translationof SATB vocal score
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template.ly}
 
+@node Partitura vocal SATB y reducción para piano automática
 @appendixsubsec Partitura vocal SATB y reducción para piano automática
+@translationof SATB vocal score and automatic piano reduction
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-automatic-piano-reduction.ly}
 
+@node SATB con contextos alineados
 @appendixsubsec SATB con contextos alineados
+@translationof SATB with aligned contexts
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly}
 
+@node SATB sobre cuatro pentagramas
 @appendixsubsec SATB sobre cuatro pentagramas
+@translationof SATB on four staves
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {satb-choir-template---four-staves.ly}
 
+@node Estrofas a solo y estribillo a dos voces
 @appendixsubsec Estrofas a solo y estribillo a dos voces
+@translationof Solo verse and two-part refrain
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-verse-and-refrain.ly}
 
+@node Melodías de himnos
 @appendixsubsec Melodías de himnos
+@translationof Hymn tunes
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {hymn-template.ly}
 
+@node Salmos
 @appendixsubsec Salmos
+@translationof Psalms
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {anglican-psalm-template.ly}
@@ -135,23 +194,38 @@ unas hermosas partituras impresas!
 @appendixsec Plantillas orquestales
 @translationof Orchestral templates
 
+@menu
+* Orquesta coro y piano::
+@end menu
+
+@node Orquesta coro y piano
 @appendixsubsec Orquesta, coro y piano
+@translationof Orchestra choir and piano
+
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {orchestra,-choir-and-piano-template.ly}
 
 
-@c bad node name to avoid node name conflict
 @node Plantillas para notación antigua
 @appendixsec Plantillas para notación antigua
 @translationof Ancient notation templates
 
+@menu
+* Transcripción de música mensural::
+* Plantilla para transcripción de canto gregoriano::
+@end menu
+
+@node Transcripción de música mensural
 @appendixsubsec Transcripción de música mensural
+@translationof Transcription of mensural music
 
 @c Line-width below is because of Issue 766.  If that's fixed, it can be removed.
 @lilypondfile[verbatim,quote,ragged-right,texidoc,line-width=140]
 {ancient-notation-template----modern-transcription-of-mensural-music.ly}
 
+@node Plantilla para transcripción de canto gregoriano
 @appendixsubsec Plantilla para transcripción de canto gregoriano
+@translationof Gregorian transcription template
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {ancient-notation-template----modern-transcription-of-gregorian-music.ly}
@@ -161,6 +235,11 @@ unas hermosas partituras impresas!
 @appendixsec Otras plantillas
 @translationof Other templates
 
+@menu
+* Combo de jazz::
+@end menu
+
+@node Combo de jazz
 @appendixsubsec Combo de jazz
 @translationof Jazz combo
 
index 35399faf2bcf262eec2ac0ad172a02c993d14b52..7f206ea4c8de8abf620f21fa1f331cc3391664f6 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: d378daa101069ce6497292b0f4a7f6ce2e9b51f0
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -49,6 +49,10 @@ uno mismo) para producir archivos de salida.
 @cindex inicial, ejemplo
 @cindex mayúsculas, sensible a
 
+@menu
+* Generar el resultado::
+@end menu
+
 @qq{Compilación} es una palabra que significa procesar un texto de
 entrada en formato de LilyPond para producir un archivo que se puede
 imprimir y (de manera opcional) un archivo MIDI que se puede
@@ -88,7 +92,9 @@ un mensaje de error.
 
 @smallspace
 
-@subheading Generar el resultado
+@node Generar el resultado
+@unnumberedsubsubsec Generar el resultado
+@translationof Producing output
 
 @cindex PDF, archivo
 @cindex ver la música
@@ -174,6 +180,16 @@ ayuda para que se inicie en la escritura de archivos de entrada.
 @cindex sencilla, notación
 @cindex notación sencilla
 
+@menu
+* Alturas::
+* Duraciones (valores rítmicos)::
+* Silencios::
+* Indicación de compás::
+* Indicaciones de tempo::
+* Clave::
+* Todo junto::
+@end menu
+
 LilyPond añadirá ciertos elementos de notación de manera automática.
 En el siguiente ejemplo hemos especificado solamente cuatro alturas,
 pero LilyPond ha añadido la clave, el compás y las duraciones.
@@ -189,7 +205,9 @@ Este comportamiento se puede modificar, pero en general estos valores
 automáticos son adecuados.
 
 
-@subheading Alturas
+@node Alturas
+@unnumberedsubsubsec Alturas
+@translationof Pitches
 
 @cindex alturas
 @cindex notas
@@ -310,7 +328,9 @@ varias @code{''} ó @code{,,} (pero tenga cuidado de utilizar dos
 comillas simples @code{''} ¡y no una comilla doble @code{"}@tie{}!)
 @c " - keeps quotes in order for context-sensitive editor -td
 
-@subheading Duraciones (valores rítmicos)
+@node Duraciones (valores rítmicos)
+@unnumberedsubsubsec Duraciones (valores rítmicos)
+@translationof Durations (rhythms)
 
 @cindex duraciones de las notas
 @cindex notas, duraciones de
@@ -359,8 +379,9 @@ especificar de forma explícita (es decir: mediante un número).
 }
 @end lilypond
 
-
-@subheading Silencios
+@node Silencios
+@unnumberedsubsubsec Silencios
+@translationof Rests
 
 @cindex silencio
 @cindex notación de los silencios
@@ -379,7 +400,9 @@ nombre @code{r}@tie{}:
 @end lilypond
 
 
-@subheading Indicación de compás
+@node Indicación de compás
+@unnumberedsubsubsec Indicación de compás
+@translationof Time signature
 
 @cindex compás, indicación de
 
@@ -403,7 +426,9 @@ La @notation{indicación de compás} se puede establecer con la orden
 }
 @end lilypond
 
-@subheading Indicaciones de tempo
+@node Indicaciones de tempo
+@unnumberedsubsubsec Indicaciones de tempo
+@translationof Tempo marks
 
 @cindex tempo, indicaciones de
 @cindex metronómicas, indicaciones
@@ -433,7 +458,9 @@ metronómica} pueden establecerse con la instrucción @code{\tempo}:
 @end lilypond
 
 
-@subheading Clave
+@node Clave
+@unnumberedsubsubsec Clave
+@translationof Clef
 
 @cindex clave
 @cindex sol, clave de
@@ -468,7 +495,9 @@ La @notation{clave} se puede establecer utilizando la orden
 @end lilypond
 
 
-@subheading Todo junto
+@node Todo junto
+@unnumberedsubsubsec Todo junto
+@translationof All together
 
 He aquí un pequeño ejemplo que muestra todos los elementos anteriores
 juntos:
index 11ee26a348ac6a57ca95cb3c57fbddcd0c509b2b..0d4e0104181626cb6308db0966bd2bc2f59144af 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 6da27f9b294c385ff8fc75876e152d67f0b4794e
+    Translation of GIT committish: ff7d82711b47d3d31f26e1e6fc012c4055a20059
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.20"
 
 @node Trucar la salida
 @chapter Trucar la salida
@@ -23,6 +23,7 @@ configurable; prácticamente todos los fragmentos de la salida se pueden cambiar
 * Manual de referencia de funcionamiento interno::
 * Apariencia de los objetos::
 * Colocación de los objetos::
+* Espaciado vertical::
 * Colisiones de objetos::
 * Trucajes adicionales::
 @end menu
@@ -184,6 +185,18 @@ a partir de sus nombres.
 
 @strong{La instrucción \override}
 
+@menu
+* La instrucción override::
+* La instrucción revert::
+* El prefijo once::
+* La instrucción overrideProperty::
+* La instrucción tweak::
+@end menu
+
+@node La instrucción override
+@unnumberedsubsubsec La instrucción @code{@bs{}override}
+@translationof The override command
+
 @cindex override, instrucción
 @cindex override (sobreescritura), sintaxis de
 
@@ -207,7 +220,7 @@ modificar, y cuál debe ser su nuevo valor.  Veamos cómo se hace.
 La sintaxis genérica de esta instrucción es:
 
 @example
-\override @var{Contexto}.@var{ObjetoDePresentación}  #'@var{propiedad-de-presentación} =
+\override @var{Contexto}.@var{ObjetoDePresentación}.@var{propiedad-de-presentación} =
 #@var{valor}
 @end example
 
@@ -229,9 +242,17 @@ usaremos sólo unas cuantas propiedades y valores
 sencillos que sean fáciles de entender, para ilustrar el formato
 y la utilización de estas instrucciones.
 
-Por ahora no se preocupe por el @code{#'}, que debe anteponerse a la
-propiedad de presentación, y el@tie{}@code{#}, que debe preceder al valor.
-Deben estar presentes siempre y de esa forma exacta.  Es la
+Las expresiones principales de LilyPond son elementos musicales
+como notas, duraciones y elementos de marcado.  Las expresiones
+más básicas como números, cadenas de caracteres y listas se
+procesan en el @q{modo de Scheme}, que se invoca por medio del
+prefijo @samp{#} escrito antes del valor.  Aunque los valores
+pueden tener a veces una representación válida en el modo de
+música de LilyPond, este manual utiliza siempre @samp{#} para la
+escritura, por coherencia.  Para ver más información acerca del
+modo de Scheme, consulte @rextend{Sintaxis del Scheme de LilyPond}.
+
+@code{\override} es la
 instrucción de uso más común dentro del trucaje, y durante la mayor
 parte del resto de este capítulo presentaremos ejemplos de cómo se
 usa.  A continuación hay un ejemplo sencillo para cambiar el color de
@@ -242,13 +263,16 @@ una cabeza:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a b c |
 @end lilypond
 
-@strong{La instrucción \revert}
+
+@node La instrucción revert
+@unnumberedsubsubsec La instrucción @code{@bs{}revert}
+@translationof The revert command
 
 @cindex revert, instrucción
 
@@ -263,7 +287,7 @@ valor predeterminado original; observe que no es a su valor previo si
 se han utilizado varias instrucciones @code{\override}.
 
 @example
-\revert @var{Contexto}.@var{ObjetoDePresentación} #'@var{propiedad-de-presentación}
+\revert @var{Contexto}.@var{ObjetoDePresentación}.@var{propiedad-de-presentación}
 @end example
 
 Una vez más, igual que @var{Contexto} dentro de la instrucción
@@ -277,15 +301,18 @@ dos últimas notas:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
 b4 c |
 @end lilypond
 
-@strong{El prefijo \once}
+
+@node El prefijo once
+@unnumberedsubsubsec El prefijo @code{@bs{}once}
+@translationof The once prefix
 
 @funindex \once
 @funindex once
@@ -302,17 +329,39 @@ podemos cambiar el color de una sola nota de la siguiente manera:
 @cindex color, propiedad, ejemplo
 @cindex NoteHead, ejemplo de sobreescritura
 
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+@lilypond[quote,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\once \override NoteHead #'color = #green
+\once \override NoteHead.color = #green
 g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
 b c |
 @end lilypond
 
-@strong{La instrucción \overrideProperty}
+El prefijo @code{\once} también se puede usar delante de muchas
+instrucciones predefinidas para limitar su efecto a un solo momento
+musical:
+
+@lilypond[quote,verbatim,relative=1]
+c4 d
+\once \stemDown
+e4 f |
+g4 a
+\once \hideNotes
+b c |
+@end lilypond
+
+Sin embargo, las instrucciones predefinidas de la forma
+@code{\@dots{}Neutral},
+@code{\@dots{}Off} y @code{\un@dots{}} utilizan
+internamente @code{\revert} en vez de @code{\override}, por lo que
+añadir @code{\once} como prefijo aquí no tiene ningún efecto.
+
+
+@node La instrucción overrideProperty
+@unnumberedsubsubsec La instrucción @code{@bs{}overrideProperty}
+@translationof The overrideProperty command
 
 @cindex overrideProperty, instrucción
 
@@ -325,7 +374,10 @@ mencionamos aquí con un propósito de exhaustividad, pero para ver más
 detalles consulte @rextend{Trucos difíciles}.
 @c Maybe explain in a later iteration  -td
 
-@strong{La instrucción \tweak}
+
+@node La instrucción tweak
+@unnumberedsubsubsec La instrucción @code{@bs{}tweak}
+@translationof The tweak command
 
 @cindex tweak, instrucción
 
@@ -350,7 +402,7 @@ primer lugar, veamos lo que haría @code{\once \override}:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
 <c e g>4
 <c e g>4
 @end lilypond
@@ -377,7 +429,7 @@ se cambiaría de la siguiente forma:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
 @end lilypond
 
 Observe que la sintaxis de @code{\tweak} no es igual que la de
@@ -389,7 +441,7 @@ Observe también que no debe haber un signo igual. Así que la sintaxis
 de la instrucción @code{\tweak} en su forma sencilla es:
 
 @example
-\tweak #'@var{propiedad-de-presentación} #@var{valor}
+\tweak @var{propiedad-de-presentación} #@var{valor}
 @end example
 
 Una instrucción @code{\tweak} también se puede usar para modificar
@@ -400,8 +452,8 @@ sólo una de una serie de articulaciones, como se muestra aquí:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4^"Black"
-  -\tweak #'color #red ^"Red"
-  -\tweak #'color #green _"Green"
+  -\tweak color #red ^"Red"
+  -\tweak color #green _"Green"
 @end lilypond
 
 @noindent
@@ -422,15 +474,15 @@ presentación, siempre y cuando LilyPond pueda rastrear su origen hasta
 el evento original:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red   cis4
- \tweak Accidental #'color #green es
                                 g>
+<\tweak Accidental.color #red   cis4
+ \tweak Accidental.color #green es
+ g>
 @end lilypond
 
 Esta forma extensa de la instrucción @code{\tweak} se puede describir
 como
 @example
-\tweak @var{layout-object} #'@var{layout-property} @var{value}
+\tweak @var{objeto-de-presentación}.@var{propiedad-de-presentación} @var{valor}
 @end example
 
 @cindex grupos especiales anidados
@@ -459,12 +511,12 @@ tresillo corto.
 @cindex color, propiedad, ejemplo
 
 @lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
-\times 4/3 {
-  \tweak #'color #red
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+\tweak direction #up
+\tuplet 3/4 {
+  \tweak color #red
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -477,18 +529,15 @@ se puede modificar de la forma usual mediante instrucciones
 @cindex transparent, propiedad, ejemplo
 @cindex TupletNumber, ejemplo de sobreescritura
 
-@c NOTE Tuplet brackets collide if notes are high on staff
-@c See issue 509
 @lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
-\once \override TupletNumber
-  #'text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 { c8[ c c] }
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
+\tuplet 3/2 {
   c8[ c]
   c8[ c]
-  \once \override TupletNumber #'transparent = ##t
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+  \once \override TupletNumber.transparent = ##t
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -544,7 +593,6 @@ con tan sólo algo de práctica.
 @cindex Referencia de Funcionamiento Interno, ejemplo de utilización
 @cindex @code{\addlyrics}, ejemplo
 
-
 Utilicemos un ejemplo concreto con un sencillo fragmento de música
 real:
 
@@ -632,7 +680,7 @@ seguros de que la instrucción está funcionando.  Obtenemos lo
 siguiente:
 
 @example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
 @end example
 
 ¡No olvide el @code{#'} antes del nombre de la propiedad y@tie{}@code{#}
@@ -652,7 +700,7 @@ cerca de ella.}  Hagámoslo así:
   \time 6/8
   {
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     r4 bes8 bes[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -674,7 +722,7 @@ necesita para hacerlo por sí mismo (aunque aún necesita algo de
 práctica).  La cual vendrá proporcionada por los ejemplos que vienen a
 continuación.
 
-@subheading Búsqueda del contexto
+@subsubsubheading Búsqueda del contexto
 
 @cindex contexto, encontrar
 @cindex contexto, buscar el, correcto
@@ -697,7 +745,7 @@ contextos de más bajo nivel que se encuentra implícito sin ambigüedad
 por el hecho de que estamos escribiendo notas, podemos omitirlo en
 este lugar concreto.
 
-@subheading Sobreescritura por una sola vez
+@subsubsubheading Sobreescritura por una sola vez
 
 @cindex sobreescritura por una sola vez
 @cindex once override
@@ -727,7 +775,7 @@ siguiente:
   {
     r4 bes8
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes8[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -744,7 +792,7 @@ Hemos hecho que ahora solamente la primera ligadura sea más gruesa.
 La instrucción o prefijo @code{\once} también se puede usar antes de
 la instrucción @code{\set}.
 
-@subheading Recuperación del ajuste
+@subsubsubheading Recuperación del ajuste
 
 @cindex revertir
 @cindex predeterminadas, recuperar las propiedades
@@ -768,10 +816,10 @@ ligaduras:
   {
     r4 bes8
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes[( g]) g |
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     g8[( es]) es d[( f]) as |
     as8 g
   }
@@ -797,11 +845,11 @@ segunda ligadura:
   {
     r4 bes8
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     bes[( g]) g |
     g8[( es]) es
     % Revert thickness of all following slurs to default of 1.2
-    \revert Slur #'thickness
+    \revert Slur.thickness
     d8[( f]) as |
     as8 g
   }
@@ -883,25 +931,20 @@ cambiar la letra a cursiva.  El objeto es @code{LyricText}, la
 propiedad es @code{font-shape} y el valor es @code{italic}.  Igual que
 antes, omitiremos el contexto.
 
-Como nota aparte, aunque una nota importante, observe que a causa de
-que los valores de @code{font-shape} son símbolos, deben ir precedidos
-de un apóstrofo, @code{'}.  Esa es la razón por la que se necesitan
-apóstrofos antes de @code{thickness} en el ejemplo anterior y en
-@code{font-shape}.  Los dos son también símbolos.  Los símbolos son
-nombres especiales que son conocidos por LilyPond internamente.
-Algunos de ellos son nombres de propiedades, como @code{thickness} o
-@code{font-shape}, otros se utilizan como valores que se les puede dar
-a las propiedades, como @code{italic}.  Observe la distinción entre
-esto y las cadenas de texto arbitrarias, que aparecerían
-entrecomilladas como @code{"a text string"}.  Para ver más detalles
-relacionados con los símbolos y las cadenas, consulte
+Como nota aparte, aunque es importante, observe que ciertas
+propiedades toman valores que son símbolos, como @code{italic}, y
+deben ir precedidos de un apóstrofo, @code{'}.  Los símbolos se
+leen a continuación internamente por parte de LilyPond.  Tenga en
+cuenta la diferencia con las cadenas de texto arbitrarias, que
+aparecerían como @code{"una cadena de texto"}; para ver más
+detalles sobre los símbolos y las cadenas, consulte
 @rextend{Tutorial de Scheme}.
 
 Así pues, la instrucción @code{\override} necesaria para imprimir la
 letra en cursiva, es:
 
 @example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
 @end example
 
 @noindent
@@ -923,7 +966,7 @@ de esta forma:
     as8 g
   }
   \addlyrics {
-    \override LyricText #'font-shape = #'italic
+    \override LyricText.font-shape = #'italic
     The man who | feels love's sweet e -- | mo -- tion
   }
 }
@@ -932,34 +975,9 @@ de esta forma:
 @noindent
 y toda la letra se imprime en cursiva.
 
-@subheading Especificación del contexto en modo letra
-
-@cindex contexto, especificación en modo letra
-@cindex letra, modo, especificar el contexto en
-
-En el caso de la letra, si intenta especificar el contexto en el
-formato que acabamos de dar, la instrucción no funcionará.  Una
-sílaba escrita en el modo letra, «lyricmode» termina en un espacio, un
-salto de línea o un dígito.  Cualquier otro carácter se incluye como
-parte de la sílaba.  Por esta razón, un espacio o salto de línea debe
-aparecer antes del último símbolo @code{@}} para evitar que se incluya
-como parte de la sílaba final.  De forma similar, se deben insertar
-espacios antes y después del punto, @q{.}, separando el nombre del
-contexto del nombre del objeto, pues en caso contrario los dos nombres
-se juntarán y el intérprete no podrá reconocerlos.  Así pues, la
-instrucción será:
-
-@example
-\override Lyrics . LyricText #'font-shape = #'italic
-@end example
-
 @warning{Dentro de la letra, deje siempre espacios entre la sílaba
 final y la llave de cierre.}
 
-@warning{En las sobreescrituras con override dentro de la letra,
-escriba siempre espacios antes y después del punto que separa el
-nombre del contexto y el nombre del objeto.}
-
 
 @seealso
 Manual de Extensión:
@@ -980,7 +998,10 @@ después del nombre de la propiedad en el RFI.  He aquí una lista de
 los tipos que podrá necesitar, junto con las reglas de dicho tipo, y
 algunos ejemplos.  Debe escribir siempre un símbolo de almohadilla,
 @code{#}, por supuesto, delante de estos valores cuando se introducen
-en la instrucción @code{\override}.
+en la instrucción @code{\override}, incluso si el propio valor ya
+comienza por@tie{}@code{#}.  Solamente ofrecemos aquí ejemplos para
+constantes; si quiere calcular un valor usando Scheme, consulte
+@rextend{Cálculos en Scheme}.
 
 @multitable @columnfractions .2 .45 .35
 @headitem Tipo de propiedad
@@ -990,29 +1011,32 @@ en la instrucción @code{\override}.
   @tab Verdadero o Falso, representado por #t o #f
   @tab @code{#t}, @code{#f}
 @item Dimensión (en espacios de pentagrama)
-  @tab Un número decimal positivo (en unidades de espacios de pentagrama)
+  @tab Un número decimal (en unidades de espacios de pentagrama)
   @tab @code{2.5}, @code{0.34}
 @item Dirección
-  @tab Una constante válida de dirección o su equivalente numérico (se permiten valores decimales entre -1 y 1)
+  @tab Una constante válida de dirección o su equivalente numérico
+  (@code{0} o @code{CENTER} indican una dirección neutra)
   @tab @code{LEFT}, @code{CENTER}, @code{UP},
        @code{1}, @w{@code{-1}}
 @item Entero
   @tab Un número entero positivo
-  @tab @code{3}, @code{1}
+  @tab @code{3}, @code{-1}
 @item Lista
-  @tab Un conjunto de valores separados por espacios, encerrado entre paréntesis y precedido de un apóstrofo
-  @tab @code{'(left-edge staff-bar)}, @code{'(1)},
+  @tab Una secuencia de constantes o símbolos separados por espacios,
+  encerrado entre paréntesis
+  y precedido de un apóstrofo o comilla simple
+  @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
        @code{'(1.0 0.25 0.5)}
 @item Marcado
   @tab Cualquier elemento válido de marcado de texto
-  @tab @code{\markup @{ \italic "cresc." @}}
+  @tab @code{\markup @{ \italic "cresc." @}}, @code{"gaita"}
 @item Momento
   @tab Una fracción de redonda construida con la función make-moment
-  @tab @code{(ly:make-moment 1 4)},
-       @code{(ly:make-moment 3 8)}
+  @tab @code{(ly:make-moment 1/4)},
+       @code{(ly:make-moment 3/8)}
 @item Número
-  @tab Cualquier valor decimal positivo o negativo
-  @tab @code{3.5}, @w{@code{-2.45}}
+  @tab Cualquier valor positivo o negativo, posiblemente decimal
+  @tab @code{3}, @w{@code{-2.45}}
 @item Pareja (de números)
   @tab Dos números separados por un @q{espacio . espacio}, encerrado entre paréntesis y precedido de un apóstrofo
   @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
@@ -1024,8 +1048,9 @@ en la instrucción @code{\override}.
   @tab @code{bend::print}, @code{ly:text-interface::print},
        @code{#f}
 @item Vector
-  @tab Una lista de tres elementos encerrados entre paréntesis y precedida de apóstrofo-almohadilla, @code{'#}.
-  @tab @code{'#(#t #t #f)}
+  @tab Constantes
+  encerradas entre @code{#(}@dots{}@code{)}.
+  @tab @code{#(#t #t #f)}
 @end multitable
 
 
@@ -1086,7 +1111,16 @@ ellas pueden afectar la visibilidad de las barras de compás (y, por
 supuesto, por extensión, también la de muchos otros objetos de
 presentación).  Vamos a considerar cada uno de ellos por orden.
 
-@subheading stencil (sello)
+@menu
+* La propiedad stencil (sello)::
+* La propiedad break-visibility (visibilidad en el salto)::
+* La propiedad transparent (transparente)::
+* La propiedad color::
+@end menu
+
+@node La propiedad stencil (sello)
+@unnumberedsubsubsec La propiedad @code{stencil} (sello)
+@translationof The stencil property
 
 @cindex stencil (sello), propiedad
 
@@ -1102,7 +1136,7 @@ antes, omitiendo el Contexto implícito, @code{Voice}:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override BarLine #'stencil = ##f
+  \override BarLine.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1130,14 +1164,28 @@ intentar corregirlo escribiendo el contexto correcto:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'stencil = ##f
+  \override Staff.BarLine.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
 }
 @end lilypond
 
-Ahora las barras de compás han desaparecido.
+Ahora las barras de compás han desaparecido.  La operación de
+fijar la propiedad @code{stencil} al valor @code{#f} es tan
+frecuente que existe una abreviatura para ella, llamada
+@code{\omit} (omitir):
+@funindex \omit
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \omit Staff.BarLine
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
 
 Sin embargo, observe que el establecimiento de la propiedad
 @code{stencil} al valor @code{#f} produce errores cuando las se
@@ -1150,27 +1198,31 @@ que establece el sello a un objeto con tamaño nulo:
 @lilypond[quote,verbatim,relative=2]
 {
   c4 c
-  \once \override NoteHead #'stencil = #point-stencil
+  \once \override NoteHead.stencil = #point-stencil
   c4 c
 }
 @end lilypond
 
-@subheading break-visibility (visibilidad en el salto)
+@node La propiedad break-visibility (visibilidad en el salto)
+@unnumberedsubsubsec The @code{break-visibility} (visibilidad en el salto)
+@translationof The break-visibility property
 
 @cindex break-visibility, propiedad
 
-Vemos en las propiedades de @code{BarLine} que aparecen en el RFI que
-la propiedad @code{break-visibility} requiere un vector de tres
-valores booleanos.  Controlan respectivamente si las barras de compás
-se imprimen al final de una línea, en mitad de una línea, y al
-principio de las líneas.  Para nuestro ejemplo, queremos que todas las
-barras de compás se supriman, por lo que el valor que necesitamos es
-@code{'#(#f #f #f)}.  Vamos a probarlo, recordando incluir el contexto
-de @code{Staff}.  Observe también que al escribir este valor tenemos
-@code{#'#} antes del paréntesis de apertura.  Se necesita @code{'#}
-como parte del valor para introducir un vector, y el primer símbolo de
-almohadilla@tie{}@code{#} se necesita, como siempre, para preceder el valor
-en sí dentro de la instrucción @code{\override}.
+Vemos en las propiedades de @code{BarLine} que aparecen en el RFI
+que la propiedad @code{break-visibility} requiere un vector de
+tres valores booleanos.  Controlan respectivamente si las barras
+de compás se imprimen al final de una línea, en mitad de una
+línea, y al principio de las líneas.  Para nuestro ejemplo,
+queremos que todas las barras de compás se supriman, por lo que el
+valor que necesitamos es @code{#(#f #f #f)} (disponible también
+bajo el nombre @code{all-invisible}, todas invisibles).  Vamos a
+probarlo, recordando incluir el contexto de @code{Staff}.  Observe
+también que al escribir este valor tenemos @code{##} antes del
+paréntesis de apertura.  Se necesita un @code{#} como parte de la
+sintaxis de las contantes vectoriales, y el primer símbolo de
+almohadilla@tie{}@code{#} se necesita, como siempre, para preceder
+el valor en sí dentro de la instrucción @code{\override}.
 
 @cindex BarLine, ejemplo de sobreescritura
 @cindex break-visibility, propiedad, ejemplo
@@ -1178,7 +1230,7 @@ en sí dentro de la instrucción @code{\override}.
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+  \override Staff.BarLine.break-visibility = ##(#f #f #f)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1187,7 +1239,9 @@ en sí dentro de la instrucción @code{\override}.
 
 Y podemos ver que esto también quita todas las líneas divisorias.
 
-@subheading transparent (transparente)
+@node La propiedad transparent (transparente)
+@unnumberedsubsubsec La propiedad @code{transparent} (transparente)
+@translationof The transparent property
 
 @cindex transparent, propiedad
 @cindex transparencia
@@ -1212,7 +1266,23 @@ a la indicación de compás es:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'transparent = ##t
+  \override Staff.TimeSignature.transparent = ##t
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+@noindent
+Una vez más, el establecimiento de la propiedad @code{transparent}
+es una operación bastante frecuente, de modo que tenemos una
+abreviatura llamada @code{\hide} (ocultar):
+@funindex \hide
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \hide Staff.TimeSignature
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1220,11 +1290,12 @@ a la indicación de compás es:
 @end lilypond
 
 @noindent
-El compás ya no está, pero esta instrucción deja una separación en el
-lugar donde antes estaba la indicación de compás.  Quizá esto es lo
-que queremos para un ejercicio en que el alumno deba escribirlo, pero
-en otras circunstancias esta separación podría no ser deseable.  En
-vez de eso, para quitarla, el stencil o «sello» de la indicación de
+En ninguno de los dos casos aparece ya la indicación de compás,
+pero esta instrucción deja una separación en el lugar donde antes
+estaba la indicación de compás.  Quizá esto es lo que queremos
+para un ejercicio en que el alumno deba escribirlo, pero en otras
+circunstancias esta separación podría no ser deseable.  En vez de
+eso, para quitarla, el stencil o «sello» de la indicación de
 compás se debe establecer al valor @code{#f}:
 
 @cindex TimeSignature, ejemplo de sobreescritura
@@ -1233,7 +1304,7 @@ compás se debe establecer al valor @code{#f}:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1241,11 +1312,15 @@ compás se debe establecer al valor @code{#f}:
 @end lilypond
 
 @noindent
-y la diferencia es obvia: al establecer el sello al valor @code{#f}
-quitamos el objeto por completo; al hacer el objeto @code{transparent}
-lo dejamos donde está, pero lo hacemos invisible.
+y la diferencia es obvia: al establecer el sello al valor
+@code{#f} (posiblemente por medio de @code{\omit}) quitamos el
+objeto por completo; al hacer el objeto @code{transparent} (lo que
+puede hacerse utilizando @code{\hide}) lo dejamos donde está, pero
+lo hacemos invisible.
 
-@subheading color
+@node La propiedad color
+@unnumberedsubsubsec La propiedad @code{color}
+@translationof The color property
 
 @cindex color, propiedad
 
@@ -1274,7 +1349,7 @@ poner las líneas divisorias de color blanco, escribimos:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #white
+  \override Staff.BarLine.color = #white
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1284,22 +1359,23 @@ poner las líneas divisorias de color blanco, escribimos:
 @noindent
 y de nuevo podemos comprobar que las barras de compás no son visibles.
 Observe que @emph{white} no viene precedido de un apóstrofo: no es un
-símbolo, sino una @emph{función}.  Cuando se invoca, proporciona la
+símbolo, sino una @emph{variable}.  Cuando se evalúa, proporciona la
 lista de valores internos que se requieren para establecer el color a
-blanco.  Los otros colores de la lista normal también son funciones.
+blanco.  Los otros colores de la lista normal también son variables.
 Para convencerse de que esto funciona, quizá quiera cambiar el color a
-una de las otras funciones de la lista.
+una de las otras variables de la lista.
 
 @cindex colores de X11
 @cindex X11, colores de
 
 @funindex x11-color
 
-La segunda forma de cambiar el color es utilizar la lista de nombres
-de colores de X11 que aparecen en la segunda lista de @ruser{Lista de
-colores}.  Sin embargo, éstos deben ir precedidos de otra función, que
-convierte los nombres de colores de X11 en la lista de valores
-internos, @code{x11-color}, de la siguiente manera:
+La segunda forma de cambiar el color es utilizar la lista de
+nombres de colores de X11 que aparecen en la segunda lista de
+@ruser{Lista de colores}.  De todas formas, se hacen corresponder
+a los valores reales por medio de la función @code{x11-color} que
+convierte los símbolos de color de X11 en la lista de valores
+internos como éstos:
 
 @cindex BarLine, ejemplo de sobreescritura
 @cindex color, propiedad, ejemplo
@@ -1307,7 +1383,7 @@ internos, @code{x11-color}, de la siguiente manera:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(x11-color 'white)
+  \override Staff.BarLine.color = #(x11-color 'white)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1315,16 +1391,18 @@ internos, @code{x11-color}, de la siguiente manera:
 @end lilypond
 
 @noindent
-Observe que en este caso la función @code{x11-color} toma un símbolo
-como argumento, así que el símbolo debe ir precedido de un apóstrofo y
-los dos deben ir entre paréntesis.
+Observe que en este caso la función @code{x11-color} toma un
+símbolo como argumento, así que el símbolo debe ir precedido de un
+apóstrofo para evitar que resulte evaluado como si fuera una
+variable, y toda la llamada a la función se debe encerrar entre
+paréntesis.
 
 @cindex rgb, colores
 @cindex color, rgb
 
 @funindex rgb-color
 
-Aún hay una tercera función, que convierte valores RGB en colores
+Aún existe otra función, que convierte valores RGB en colores
 internos: la función @code{rgb-color}.  Toma tres argumentos que dan
 las intensidades de rojo, verde y azul.  Cada uno de ellos puede tomar
 valores entre 0 y 1.  Por lo tanto, para establecer el color a rojo el
@@ -1337,7 +1415,7 @@ valor debe ser @code{(rgb-color 1 0 0)} y para blanco debe ser
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+  \override Staff.BarLine.color = #(rgb-color 1 1 1)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1362,12 +1440,12 @@ varias gradaciones de gris:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.StaffSymbol   #'color = #(x11-color 'grey30)
-  \override Staff.TimeSignature #'color = #(x11-color 'grey60)
-  \override Staff.Clef          #'color = #(x11-color 'grey60)
-  \override Voice.NoteHead      #'color = #(x11-color 'grey85)
-  \override Voice.Stem          #'color = #(x11-color 'grey85)
-  \override Staff.BarLine       #'color = #(x11-color 'grey10)
+  \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+  \override Staff.TimeSignature.color = #(x11-color 'grey60)
+  \override Staff.Clef.color = #(x11-color 'grey60)
+  \override Voice.NoteHead.color = #(x11-color 'grey85)
+  \override Voice.Stem.color = #(x11-color 'grey85)
+  \override Staff.BarLine.color = #(x11-color 'grey10)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1424,7 +1502,7 @@ el sello de cada uno de ellos a @code{#f}, como sigue:
 
 @cindex alignAboveContext, propiedad, ejemplo
 @cindex @code{\with}, ejemplo
-@cindex stencil, propiedad, ejemplo
+@funindex \omit
 @cindex Clef, ejemplo de sobreescritura
 @cindex TimeSignature, ejemplo de sobreescritura
 
@@ -1439,8 +1517,8 @@ el sello de cada uno de ellos a @code{#f}, como sigue:
         alignAboveContext = #"main"
       }
       {
-        \override Staff.Clef #'stencil = ##f
-        \override Staff.TimeSignature #'stencil = ##f
+        \omit Staff.Clef
+        \omit Staff.TimeSignature
         { f8 f c }
       }
     >>
@@ -1456,7 +1534,8 @@ se aplican al pentagrama de ossia.
 
 Pero ¿cuál es la diferencia entre modificar el contexto de pentagrama
 usando @code{\with} y modificar los sellos de clave y de compás con
-\override?  La diferencia principal es que los cambios que se realizan
+\override, o en este caso
+@code{\omit}?  La diferencia principal es que los cambios que se realizan
 en una cláusula @code{\with} se hacen en el momento en que se crea el
 contexto, y permanecen activos como valores @strong{predeterminados}
 durante toda la duración de dicho contexto, mientras que las
@@ -1501,9 +1580,35 @@ Así pues, podemos reemplazar el ejemplo anterior con
       \new Staff \with {
         alignAboveContext = #"main"
         % Don't print clefs in this staff
-        \override Clef #'stencil = ##f
+        \override Clef.stencil = ##f
         % Don't print time signatures in this staff
-        \override TimeSignature #'stencil = ##f
+        \override TimeSignature.stencil = ##f
+      }
+      { f8 f c }
+    >>
+    r4 |
+  }
+}
+@end lilypond
+
+Resulta que también podemos emplear aquí las abreviaturas
+@code{\hide} y @code{\omit} para fijar la propiedad
+@code{transparent} y borrar el @code{stencil}, lo que conduce al
+resultado siguiente:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+  \relative g' {
+    r4 g8 g c4 c8 d |
+    e4 r8
+    <<
+      { f8 c c }
+      \new Staff \with {
+        alignAboveContext = #"main"
+        % Don't print clefs in this staff
+        \omit Clef
+        % Don't print time signatures in this staff
+        \omit TimeSignature
       }
       { f8 f c }
     >>
@@ -1537,7 +1642,7 @@ cambiar el tamaño de las tipografías de cada uno de los tipos de
 objeto como las cabezas (@code{NoteHead}s) con instrucciones como
 
 @example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
 @end example
 
 o podemos cambiar el tamaño de todas las tipografías estableciendo una
@@ -1570,8 +1675,8 @@ Vamos a probarlo en nuestro ejemplo del ossia:
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \omit Clef
+        \omit TimeSignature
         % Reduce all font sizes by ~24%
         fontSize = #-2
       }
@@ -1639,11 +1744,11 @@ siguiente forma:
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \omit Clef
+        \omit TimeSignature
         fontSize = #-2
         % Reduce stem length and line spacing to match
-        \override StaffSymbol #'staff-space = #(magstep -2)
+        \override StaffSymbol.staff-space = #(magstep -2)
       }
       { f8 f c }
     >>
@@ -1796,6 +1901,15 @@ mueven a la derecha o a la izquierda cuando apuntan hacia arriba o
 hacia abajo.  Esto se controla automáticamente cuando está establecida
 la propiedad @code{direction}.
 
+@menu
+* La propiedad direction (dirección)::
+* Digitaciones::
+@end menu
+
+@node La propiedad direction (dirección)
+@unnumberedsubsubsec La propiedad @code{direction} (dirección)
+@translationof The direction property
+
 @cindex abajo
 @cindex arriba
 @cindex centro
@@ -1817,11 +1931,11 @@ comportamiento predeterminado.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4 g c a |
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
 a4 g c a |
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
 a4 g c a |
-\revert Stem #'direction
+\revert Stem.direction
 a4 g c a |
 @end lilypond
 
@@ -1882,13 +1996,17 @@ menciona el significado de cada una allí donde no es obvio.
   @tab Los grupos especiales están debajo o encima de las notas
 @end multitable
 
-Observe que estas instrucciones predefinidas @strong{no} pueden ir
-precedidas de @code{\once}.  Si quiere limitar el efecto a una sola
-nota, deberá elegir entre usar la instrucción @code{\once \override}
-equivalente, o usar la instrucción predefinida, seguida después de la
-nota afectada por la instrucción @code{\xxxNeutral} correspondiente.
+Las variantes neutras o normales de estas instrucciones están
+implementadas usando @code{\revert} y @strong{no} pueden ir
+precedidas de @code{\once}.  Si quiere limitar el efecto de las
+otras instrucciones (que están implementadas usando
+@code{\override}) a un solo paso de tiempo, puede precederla de
+@code{\once} de la misma forma en que lo haría con las
+sobreescrituras explícitas.
 
+@node Digitaciones
 @unnumberedsubsubsec Digitaciones
+@translationof Fingering
 
 @cindex digitación, colocación
 @cindex digitación de acordes
@@ -1910,9 +2028,9 @@ siguiente el efecto de especificar @code{DOWN} y @code{UP}:
 
 @lilypond[quote,verbatim,relative=2]
 c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
 c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
 c4-5 a-3 f-1 c'-5 |
 @end lilypond
 
@@ -2018,7 +2136,7 @@ objeto @code{Fingering} del RFI que es @w{@code{-5}}, así que probaremos
 @w{@code{-7}}:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
 \set fingeringOrientations = #'(left)
 <f-2>4
 <c-1 e-2 g-3 b-5>4
@@ -2041,6 +2159,22 @@ objeto @code{Fingering} del RFI que es @w{@code{-5}}, así que probaremos
 @subsection Objetos fuera del pentagrama
 @translationof Outside-staff objects
 
+Los objetos fuera-del-pentagrama se sitúan automáticamente para evitar
+las colisiones.  Existen varias formas de sobreescribir la colocación
+automática si el posicionado no resulta óptimo.
+
+@menu
+* La propiedad outside-staff-priority (prioridad fuera del pentagrama)::
+* La instrucción textLengthOn::
+* Posicionamiento de los matices dinámicos::
+* Escalado de un «Grob»::
+@end menu
+
+
+@node La propiedad outside-staff-priority (prioridad fuera del pentagrama)
+@unnumberedsubsubsec La propiedad @code{outside-staff-priority} (prioridad fuera del pentagrama)
+@translationof The outside-staff-priority property
+
 Los objetos fuera-del-pentagrama se colocan automáticamente para
 evitar las colisiones.  Los objetos que tienen el valor más bajo de la
 propiedad @code{outside-staff-priority} se sitúan más cerca del
@@ -2057,14 +2191,14 @@ objetos fuera-del-pentagrama más comunes.
 @cindex objetos de extensión
 
 Observe los nombres algo inusuales de algunos de los objetos: los
-objetos de extensión se cearn automáticamente para controlar el
+objetos de extensión se crean automáticamente para controlar el
 posicionamiento vertical de los grobs que (quizá) comienzan y terminan
 en distintos momentos musicales, de manera que cualquier modificación
 a la prioridad @code{outside-staff-priority} del grob subyacente no
 tiene ningún efecto.  Por ejemplo, cambiar la
 @code{outside-staff-priority} del objeto de regulador @code{Hairpin}
 no tiene efecto sobre la posición vertical de los reguladores: en
-lugar de eso, tenemos que cambar la @code{outside-staff-priority} del
+lugar de eso, tenemos que cambiar la @code{outside-staff-priority} del
 objeto asociado @code{DynamicLineSpanner}.  Esta sobreescritura se
 debe escribir al comienzo del objeto de extensión, que podría incluir
 varios reguladores o matices dinámicos encadenados.
@@ -2121,7 +2255,7 @@ de ellos.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Place dynamics above staff
 \dynamicUp
@@ -2172,12 +2306,12 @@ recordando que @code{OttavaBracket} se crea dentro del contexto de
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Place dynamics above staff
 \dynamicUp
 % Place following Ottava Bracket below Text Spanners
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
 % Start Ottava Bracket
 \ottava #1
 c'4 \startTextSpan
@@ -2223,10 +2357,10 @@ que muestra el efecto de los dos métodos:
 @lilypond[quote,verbatim,relative=2]
 c4( c^\markup { \tiny \sharp } d4.) c8 |
 c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
 c4^\markup { \tiny \sharp } d4.) c8 |
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
 c4( c^\markup { \tiny \sharp } d4.) c8 |
 @end lilypond
 
@@ -2245,7 +2379,7 @@ aumentar la prioridad de @qq{Text3} hasta un valor superior:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 c2^"Text1"
 c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
 c2^"Text3"
 c2^"Text4" |
 @end lilypond
@@ -2259,7 +2393,9 @@ necesitar claramente espaciar las notas en sentido horizontal para
 hacer sitio para el texto.  Esto se hace empleando la instrucción
 @code{textLengthOn}.
 
-@subheading \textLengthOn
+@node La instrucción textLengthOn
+@unnumberedsubsubsec La instrucción @code{@bs{}textLengthOn}
+@translationof The textLengthOn command
 
 @cindex notas, espaciar junto al texto
 
@@ -2283,9 +2419,12 @@ c2^"Text4" |
 @end lilypond
 
 La instrucción para volver al comportamiento predeterminado es
-@code{\textLengthOff}.  Recuerde que @code{\once} funciona solamente
-con @code{\override}, @code{\set}, @code{\revert} o @code{\unset}, así
-que no se puede usar con @code{\textLengthOn}.
+@code{\textLengthOff}.  De forma alternativa, se puede usar
+@code{\once} con @code{\textLengthOn} si el efecto se ha de limitar a
+un solo momento musical.
+The corresponding spacing behavior for rehearsal marks and tempo
+indications is independently controlled with the commands
+@code{\markLengthOn} and @code{\markLengthOff}.
 
 @cindex marcado, texto de, permitir las colisiones en
 
@@ -2308,19 +2447,20 @@ c,,2^"Text" c'' |
 R1 |
 
 % Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 c,,2^"Long Text   " c'' |
 R1 |
 
 % Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 \textLengthOn        % and turn on textLengthOn
 c,,2^"Long Text   "  % Spaces at end are honored
 c''2 |
 @end lilypond
 
-
-@subheading Matices dinámicos
+@node Posicionamiento de los matices dinámicos
+@unnumberedsubsubsec Posicionamiento de los matices dinámicos
+@translationof Dynamics placement
 
 @cindex trucar la colocación de los matices
 @cindex dinámica, trucar la colocación de las indicaciones de
@@ -2351,7 +2491,7 @@ artificial:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
-a4\f b\mf c\mp b\p
+a4\f b\mf a\mp b\p
 @end lilypond
 
 @noindent
@@ -2364,7 +2504,9 @@ una instrucción equivalente para las indicaciones de matiz dinámico.
 Por tanto, tendremos que averiguar cómo hacerlo utilizando
 instrucciones @code{\override}.
 
-@subheading Escalado de un «Grob»
+@node Escalado de un «Grob»
+@unnumberedsubsubsec Escalado de un «Grob»
+@translationof Grob sizing
 
 @cindex grob, cambio de tamaño de un
 @cindex escala de los grobs
@@ -2383,19 +2525,22 @@ contemplan el @code{grob-interface}.
 
 @cindex @code{extra-spacing-width}
 
-De forma predeterminada, los objetos fuera-del-pentagrama reciben una
-anchura cero, de manera que pueden solaparse en la dirección
-horizontal.  Esto se hace mediante el truco de añadir una cantidad
-infinita a la dimensión más a la izquierda y menos infinito a la
-dimensión más a la derecha estableciendo el valor de
-@code{extra-spacing-width} a @code{'(+inf.0 . -inf.0)}.  Así, para
-asegurar que no se superponen en la dirección horizontal tendremos que
-sobreescribir este valor de @code{extra-spacing-width} a @code{'(0
-. 0)} de forma que el verdadero ancho se presente.  Esta es la
-instrucción que lo hace para las indicaciones dinámicas:
+De forma predeterminada, los objetos fuera-del-pentagrama reciben
+una anchura cero, de manera que pueden solaparse en la dirección
+horizontal.  Esto se hace mediante el truco de hacer que la
+dimensión más a la izquierda sea igual a infinito y que la
+dimensión más a la derecha sea igual a menos infinito,
+estableciendo el valor de @code{extra-spacing-width} a
+@code{'(+inf.0 . -inf.0)}.  Así, para asegurar que no se
+superponen en la dirección horizontal tendremos que sobreescribir
+este valor de @code{extra-spacing-width} para darles un poco de
+espacio adicional.  Las unidades son el espacio entre dos líneas
+del pentagrama, de forma que debería bastar mover el límite
+izquierdo media unidad a la izquierda y el límite derecho media
+unidad a la derecha:
 
 @example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
 @end example
 
 @noindent
@@ -2406,37 +2551,224 @@ Veamos si funciona en nuestro ejemplo anterior:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
-a4\f b\mf c\mp b\p |
+% Extend width by 1 staff space
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
+a4\f b\mf a\mp b\p
 @end lilypond
 
 @noindent
-Bueno, ciertamente ha hecho que las marcas dinámicas ya no estén
-desplazadas, pero aún quedan dos problemas.  Las marcas tendrían que
-separarse un poco más entre sí, y sería mejor si todas estuvieran a la
-misma distancia del pentagrama.  Podemos resolver el primer problema
-fácilmente.  En vez de hacer cero la anchura
-@code{extra-spacing-width}, podemos añadirle algo más.  Las unidades
-son el espacio entre dos líneas de pentagrama, así que al mover el
-límite izquierdo media unidad a la izquierda y el límite derecho media
-unidad hacia la derecha, deberíamos conseguirlo:
+Esto tiene un mejor aspecto, pero quizá habríamos preferido que
+las indicaciones de dinámica estuvieran alineadas sobre la misma
+línea de base en lugar de ir hacia arriba y hacia abajo con las
+notas.  La propiedad que lo hace es @code{staff-padding} (relleno
+de pentagrama) que se estudia en la sección dedicada a las
+colisiones (véase @ref{Colisiones de objetos}).
+
+@node Espaciado vertical
+@section Espaciado vertical
+@translationof Vertical spacing
+
+Por lo general, el espaciado vertical de los objetos musicales que
+LilyPond hace es bastante bueno.  Veamos cómo se comporta con una
+canción sencilla, con dos voces y acompañamiento de piano:
+
+@lilypond[quote,fragment,ragged-right]
+<<
+  \new ChoirStaff
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
 
-@cindex DynamicText, ejemplo de sobreescritura
-@cindex extra-spacing-width, propiedad, ejemplo
+No hay ningún problema con el espaciado vertical predeterminado.
+Sin embargo, supongamos que estamos trabajando con un editor que
+tiene ciertos requisitos específicos para el espaciado vertical de
+los pentagramas y la letra: quiere que la letra está más separada
+de las notas, que el acompañamiento de piano esté más separado de
+la línea vocal y que los dos pentagramas de piano estén más juntos
+entre sí.  Comenzaremos con la letra.
+
+La letra se encuentra en el interior de un sistem, y por tanto las
+instrucciones para aplicarle el espaciado estarán en
+@ruser{Espaciado vertical flexible dentro de los sistemas}.  Allí
+se dice que el texo son líneas del tipo @qq{no-pauta} y por tanto
+la instrucción para cambiar su espaciado hará referencia a la
+propiedad @code{nonstaff}.  Para separarlas del pentagrama al que
+pertenecen (la pauta superior) usaremos la propiedad
+@code{relatedstaff}.  Para separarlas de la línea inferior
+usaremos la propiedad @code{unrelatedstaff}.  Las partes vocales
+pertenecen a un grupo vertical @code{VerticalAxisGroup}, por lo
+que tenemos que ajustar sus propiedades.  Probémoslo y veamos si
+funciona.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #5
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #5
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
 
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-% Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
-a4\f b\mf c\mp b\p
+Bien: sí, funciona, pero quizá demasiado bien.  Cuando
+establecemos el @code{padding} (relleno) a 5, LilyPond añade 5
+espacios de pentagrama a la distancia entre los objetos, lo que es
+excesivo para nosotros en este caso.  Usaremos un valor de 2.
+
+A continuación, desplazaremos la música de piano para separarla de
+las partes vocales.  La música vocal es una @code{ChoirStaff} (un
+contexto de sistema coral), y por tanto tenemos que aumentar el
+espaciado entre ese grupo de pentagramas y el sistema de piano que
+se encuentra debajo.  Lo haremos cambiando la
+@code{basic-distance} (distancia básica) del @code{StaffGrouper}
+del @code{staffgroup-staff-spacing}.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff \with {
+    \override StaffGrouper.
+      staffgroup-staff-spacing.basic-distance = #15
+  }
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #2
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #2
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
 @end lilypond
 
-@noindent
-Esto tiene un mejor aspecto, pero quizá habríamos preferido que las
-indicaciones de dinámica estuvieran alineadas sobre la misma línea de
-base en lugar de ir hacia arriba y hacia abajo con las notas.  La
-propiedad que lo hace es @code{staff-padding} (relleno de pentagrama)
-que se estudia en la sección siguiente.
+Muy bien.  Ahora, sólo nos queda el último requisito de hacer que
+los pentagramas de piano estén más juntos.  Para conseguirlo, de
+nuevo alteramos las propiedades del @code{StaffGrouper}, pero esta
+vez vamos a reducir tanto la @code{basic-distance} (distancia
+básica) como el @code{padding} (relleno).  Podemos hacerlo como se
+muestra a continuación.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff \with {
+    \override StaffGrouper.
+      staffgroup-staff-spacing.basic-distance = #15
+  }
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #2
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #2
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff \with {
+    \override StaffGrouper.staff-staff-spacing = #'(
+                            (basic-distance . 0)
+                            (padding . 0))
+  }
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+
+Con esto los hemos colocado muy juntos entre sí (pero es lo que el
+editor quería).  Se podrían haber separado más alterando el
+relleno, @code{padding}, o la distancia básica,
+@code{basic-distance}, si quisiéramos.
+
+Hay muchas formas de alterar el espaciado vertical.  Un punto
+clave que debemos recordar es que el espaciado entre objetos
+dentro de un @code{StaffGroup} (como los grupos @code{GrandStaff}
+o @code{PianoStaff}) se controla con las variables de espaciado
+del @code{StaffGrouper}. El espaciado de los pentagramas no
+agrupados (como @code{Lyrics} y @code{Staff}) se controla con las
+variables del @code{VerticalAxisGroup}.  Para ver más detalles,
+consulte
+@ruser{Variables de espaciado de paper verticales flexibles} y
+@ruser{Espaciado vertical flexible dentro de los sistemas}.
 
 
 @node Colisiones de objetos
@@ -2709,7 +3041,20 @@ Veamos ahora cómo pueden ser de ayuda las propiedades que hemos visto
 en la sección anterior, para resolver problemas de notación que se
 superpone.
 
-@subheading la propiedad padding (relleno)
+@menu
+* La propiedad padding (relleno)::
+* La propiedad right-padding (relleno por la derecha)::
+* La propiedad staff-padding (relleno de pentagrama)::
+* La propiedad self-alignment-X (auto-alineación en X)::
+* La propiedad staff-position (posición en el pentagrama)::
+* La propiedad extra-offset (desplazamiento adicional)::
+* La propiedad positions (posiciones)::
+* La propiedad force-hshift (forzar desplazamiento horizontal)::
+@end menu
+
+@node La propiedad padding (relleno)
+@unnumberedsubsubsec La propiedad @code{padding} (relleno)
+@translationof The padding property
 
 @cindex relleno
 @cindex arreglar notación que se superpone
@@ -2724,7 +3069,7 @@ notas.
 
 @lilypond[quote,fragment,relative=1,verbatim]
 c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
 b2\fermata
 @end lilypond
 
@@ -2733,11 +3078,11 @@ b2\fermata
 
 @lilypond[quote,fragment,relative=1,verbatim]
 % This will not work, see below
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
 \tempo 4 = 120
 c1 |
 % This works
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
 \tempo 4 = 80
 d1 |
 @end lilypond
@@ -2755,7 +3100,9 @@ entonces ese objeto se moverá, y también todos los que están por fuera
 de él.
 
 
-@subheading right-padding (relleno por la derecha)
+@node La propiedad right-padding (relleno por la derecha)
+@unnumberedsubsubsec La propiedad @code{right-padding} (relleno por la derecha)
+@translationof The right-padding property
 
 @cindex right-padding, propiedad
 
@@ -2779,15 +3126,13 @@ sesquisharp = \markup { \sesquisharp }
 \relative c'' {
   c4
   % This prints a sesquisharp but the spacing is too small
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 c
   % This improves the spacing
-  \once \override Score.AccidentalPlacement #'right-padding = #0.6
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Score.AccidentalPlacement.right-padding = #0.6
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 |
 }
 @end lilypond
@@ -2803,15 +3148,17 @@ sobreescribiendo @code{right-padding}.
 
 @noindent
 
-@subheading la propiedad staff-padding (relleno de pentagrama)
+@node La propiedad staff-padding (relleno de pentagrama)
+@unnumberedsubsubsec La propiedad @code{staff-padding} (relleno de pentagrama)
+@translationof The staff-padding property
 
 @cindex alineación de objetos sobre la línea base
 @cindex objetos, alineación sobre la línea base
 
 @code{staff-padding} se puede usar para alinear objetos como matices
-dinámicos a lo largo de una línea de base a una altura fija sobre el
-pentagrama, en lugar de hacerlo a una altura que dependa de la
-posición de la nota a la que están adosados.  No es una propiedad de
+dinámicos a lo largo de una línea de base a una distancia fija del
+pentagrama, siempre que no exista ningún otro elemento de notación
+que fuerce una distancia mayor al pentagrama.  No es una propiedad de
 @code{DynamicText} sino de @code{DynamicLineSpanner}.  Esto es así
 porque la línea de base debe aplicarse por igual a @strong{todas} las
 dinámicas, entre ellas las que se han creado como objetos de
@@ -2824,19 +3171,17 @@ matiz en el ejemplo de la sección anterior:
 @cindex staff-padding, propiedad, ejemplo
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-% Extend width by 1 unit
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
-% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner #'staff-padding = #2
-a4\f b\mf c\mp b\p
+\override DynamicLineSpanner.staff-padding = #3
+a4\f b\mf a\p b\mp
 @end lilypond
 
 
-@subheading la propiedad self-alignment-X (auto-alineación en X)
+@node La propiedad self-alignment-X (auto-alineación en X)
+@unnumberedsubsubsec La propiedad @code{self-alignment-X} (auto-alineación en X)
+@translationof The self-alignment-X property
 
-El ejemplo siguiente muestra cómo esto puede resolver la colisión
-entre un objeto de digitación de cuerda y la plica de una nota
+El ejemplo siguiente muestra cómo ajustar la posición
+de un objeto de digitación de cuerda en relación a la plica de una nota
 mediante el alineamiento del límite derecho con el punto de referencia
 de la nota «padre»:
 
@@ -2846,11 +3191,13 @@ de la nota «padre»:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
 \voiceOne
 <a\2>
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
 <a\2>
 @end lilypond
 
-@subheading la propiedad staff-position (posición en el pentagrama)
+@node La propiedad staff-position (posición en el pentagrama)
+@unnumberedsubsubsec La propiedad @code{staff-position} (posición en el pentagrama)
+@translationof The staff-position property
 
 @cindex objeto, colisión dentro del pentagrama
 
@@ -2869,7 +3216,7 @@ aquí un ejemplo de colisión de este tipo:
 La mejor solución aquí es mover el silencio multi-compás hacia abajo,
 pues el silencio está en la voz dos.  El ajuste predeterminado para
 @code{\voiceTwo} (es decir, en la segunda voz de una construcción
-@code{<<@{...@} \\ @{...@}>>}) es que @code{staff-position} tenga el
+@code{<<@{@dots{}@} \\ @{@dots{}@}>>}) es que @code{staff-position} tenga el
 valor -4 para MultiMeasureRest, así que tenemos que bajarlo, digamos,
 cuatro semi-espacios de pentagrama, al valor @w{@code{-8}}.
 
@@ -2880,7 +3227,7 @@ cuatro semi-espacios de pentagrama, al valor @w{@code{-8}}.
 <<
   { c4 c c c }
   \\
-  \override MultiMeasureRest #'staff-position = #-8
+  \override MultiMeasureRest.staff-position = #-8
   { R1 }
 >>
 @end lilypond
@@ -2888,7 +3235,9 @@ cuatro semi-espacios de pentagrama, al valor @w{@code{-8}}.
 Esto es mejor que utilizar, por ejemplo, @code{extra-offset}, porque
 la línea adicional por encima del silencio se inserta automáticamente.
 
-@subheading la propiedad extra-offset (desplazamiento adicional)
+@node La propiedad extra-offset (desplazamiento adicional)
+@unnumberedsubsubsec La propiedad @code{extra-offset} (desplazamiento adicional)
+@translationof The extra-offset property
 
 @cindex posicionar objetos
 @cindex posicionar grobs
@@ -2901,18 +3250,20 @@ posicionamiento de un objeto tanto vertical como horizontalmente.
 En el ejemplo siguiente, la segunda digitación se desplaza ligeramente
 a la izquierda, y 1.8 espacios de pentagrama hacia abajo:
 
-@cindex Fingering, ejemplo de sobreescritura
+@cindex fingering (digitación), ejemplo de sobreescritura
 @cindex extra-offset, propiedad, ejemplo
 
 @lilypond[quote,fragment,relative=1,verbatim]
 \stemUp
 f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
 f4-5
 @end lilypond
 
 
-@subheading la propiedad positions (posiciones)
+@node La propiedad positions (posiciones)
+@unnumberedsubsubsec La propiedad @code{positions} (posiciones)
+@translationof The positions property
 
 @cindex controlar manualmente grupos especiales, ligaduras y barras
 @cindex manual, control, de grupos especiales, ligaduras y barras
@@ -2922,40 +3273,42 @@ f4-5
 @cindex barras de corchea, control manual
 
 La propiedad @code{positions} permite controlar manualmente la
-posición e inclinación de los tresillos, ligaduras de expresión y de
-fraseo, y barras de corchea.  He aquí un ejemplo que tiene una fea
-ligadura de fraseo debido a que intenta evitar la ligadura de
-expresión que está sobre la acciaccatura.
+posición vertical y de ahí también la inclinación de los tresillos,
+ligaduras de expresión y de fraseo, y barras de corchea.
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4 \acciaccatura e8\( d8 c~ c d c d\)
-@end lilypond
+He aquí un ejemplo en el que las ligaduras de fraseo y de expresión
+chocan entre sí:
 
-@noindent
-Simplemente podemos mover la ligadura de fraseo por encima de las
-notas, y de hecho ésta será la solución preferida:
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+a8 \( ( a'16 ) a \)
+@end lilypond
 
 @cindex PhrasingSlur, ejemplo de sobreescritura
 @cindex positions, propiedad, ejemplo
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\phrasingSlurUp
-\acciaccatura e8\( d8 c~ c d c d\)
-@end lilypond
-
 @noindent
-Pero si por algún motivo no pudiéramos hacerlo, la otra alternativa
-sería mover el extremo izquierdo de la ligadura de fraseo un poco
-hacia abajo usando la propiedad @code{positions}.  Esto también
-resuelve la forma algo indecente de la ligadura.
-
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
-\acciaccatura e8\( d8 c~ c d c d\)
+Una posibilidad sería mover los dos extremos de la ligadura de fraseo
+hacia arriba.  Podemos tratar de establecer el extremo izquierdo a 2.5
+espacios de pentagrama por encima de la tercera línea y el extremo
+derecho a 4.5 también hacia arriba, y LilyPond seleccionaría la
+ligadura de fraseo de entre las candidatas que ha encontrado con sus
+extremos más cercanos a éstos:
+
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+\once \override PhrasingSlur.positions = #'(2.5 . 4.5)
+a8 \( ( a'16 ) a \)
 @end lilypond
 
+Esto supone una mejora, pero ¿por qué no bajar un poco el extremo
+derecho de la ligadura de expresión?  Si lo probamos, veremos que no
+se puede hacer así.  Ello es a causa de que no existen ligaduras de
+expresión candidatas que estén más bajas que la que ya se ha
+seleccionado, y en este caso la propiedad @code{positions} no tiene
+ningún efecto.  Sin embargo, las ligaduras de unión, expresión y
+fraseo @emph{se pueden} colocar y conformar de manera muy exacta
+cuando se necesita.  Para aprender la manera de hacerlo, consulte
+@ruser{Modificación de ligaduras de unión y de expresión}.
+
 Presentamos otro ejemplo.  Vemos que la barra
 choca con las ligaduras:
 
@@ -2990,7 +3343,7 @@ central hasta, digamos, 1 espacio:
     { c'1 ~ c'2. e'8 f' }
     \\
     {
-      \override Beam #'positions = #'(-1 . -1)
+      \override Beam.positions = #'(-1 . -1)
       e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g''
     }
   >>
@@ -3007,7 +3360,9 @@ Observe que la sobreescritura sigue aplicándose en la primera voz del
 segundo compás de corcheas, pero no a ninguna de las barras de la
 segunda voz.
 
-@subheading la propiedad force-hshift (forzar desplazamiento horizontal)
+@node La propiedad force-hshift (forzar desplazamiento horizontal)
+@unnumberedsubsubsec La propiedad @code{force-hshift} (forzar desplazamiento horizontal)
+@translationof The force-hshift property
 
 Ahora podremos ver cómo aplicar las correcciones finales al ejemplo de
 Chopin que presentamos al final de @ref{Oigo voces}, que
@@ -3053,13 +3408,13 @@ Presentamos a continuación el resultado final:
     \\
     {
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
     \\
     \\
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -3094,7 +3449,7 @@ quitado las indicaciones dinámicas, las digitaciones y el pedal.
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3107,7 +3462,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % Reposition the c2 to the right of the merged note
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % Move the c2 out of the main note column
         % so the merge will work
         \shiftOnn
@@ -3119,8 +3474,7 @@ rhMusic = \relative c'' {
         % Stem on the d2 must be down to permit merging
         \stemDown
         % Stem on the d2 should be invisible
-        \tweak Stem #'transparent ##t
-        \tweak Flag #'transparent ##t
+        \tweak Stem.transparent ##t
         d2
       }
       \new Voice {
@@ -3301,7 +3655,7 @@ siguiente colocada justo antes de la primera nota ligada subirá la
 ligadura 3.5 medios espacios de pentagrama por encima de la línea
 central:
 
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
 
 Con esto se completa el compás dos, dando como resultado:
 
@@ -3310,7 +3664,7 @@ Con esto se completa el compás dos, dando como resultado:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3391,7 +3745,7 @@ al final, dando como resultado:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3466,7 +3820,7 @@ aplicar estos cambios obtenemos:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3537,7 +3891,7 @@ final:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3551,7 +3905,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % Reposition the c2 to the right of the merged note
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % Move the c2 out of the main note column
         % so the merge will work
         \shiftOnn
@@ -3563,8 +3917,7 @@ rhMusic = \relative c'' {
         % Stem on the d2 must be down to permit merging
         \stemDown
         % Stem on the d2 should be invisible
-        \tweak Stem #'transparent ##t
-        \tweak Flag #'transparent ##t
+        \tweak Stem.transparent ##t
         d2
       }
       \new Voice {
@@ -3607,7 +3960,7 @@ lhMusic = \relative c' {
 
 @menu
 * Otras aplicaciones de los trucos::
-* Uso de variables para los trucos::
+* Uso de variables para los ajustes de disposición::
 * Hojas de estilo::
 * Otras fuentes de información::
 * Trucos avanzados con Scheme::
@@ -3617,6 +3970,11 @@ lhMusic = \relative c' {
 @subsection Otras aplicaciones de los trucos
 @translationof Other uses for tweaks
 
+@menu
+* Unir notas entre voces distintas::
+* Simulación de un calderón en el MIDI::
+@end menu
+
 @cindex transparent, uso de la propiedad
 @cindex objetos, hace invisibles
 @cindex eliminar objetos
@@ -3625,9 +3983,12 @@ lhMusic = \relative c' {
 @cindex ocultar objetos
 @cindex invisibles, objetos
 @cindex objetos invisibles
-@cindex ligar notas entre voces distintas
 
-@subheading Ligar notas entre voces distintas
+@node Unir notas entre voces distintas
+@unnumberedsubsubsec Unir notas entre voces distintas
+@translationof Tying notes across voices
+
+@cindex ligar notas entre voces distintas
 
 El ejemplo siguiente muestra cómo conectar notas que están en
 distintas voces utilizando ligaduras de unión.  Normalmente sólo se
@@ -3648,8 +4009,7 @@ de que la ligadura se cruza entre las voces:
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
+    \tweak Stem.transparent ##t
     b8~ b\noBeam
   }
 \\
@@ -3664,9 +4024,32 @@ valor de longitud @code{length} a @code{8},
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
-    \tweak Stem #'length #8
+    \tweak Stem.transparent ##t
+    \tweak Stem.length #8
+    b8~ b\noBeam
+  }
+\\
+  { b8[ g] }
+>>
+@end lilypond
+
+@funindex \single
+@cindex tweak, generado a partir de una sobreescritura
+Ahora bien, para la @emph{sobreescritura} de la transparencia de
+un objeto gráfico, podríamos haber usado la abreviatura
+@code{\hide} como se explicó anteriormente.  El trucaje mediante
+@qq{tweak} es una operación diferente que afecta solamente a las
+propiedades generadas a partir de una sola expresión musical.
+Resulta que podemos convertir los overrides o sobreescrituras en
+tweaks o trucajes utilizando @code{\single}, haciendo posible
+volver a escribir el ejemplo anterior como
+
+@lilypond[quote,fragment,relative=2,verbatim]
+<<
+  {
+    \single \hide Stem
+    \single \hide Flag
+    \tweak Stem.length #8
     b8~ b\noBeam
   }
 \\
@@ -3674,7 +4057,16 @@ valor de longitud @code{length} a @code{8},
 >>
 @end lilypond
 
-@subheading Simulación de un calderón en el MIDI
+En este caso particular, la diferencia con @code{\once \hide} no
+es muy apreciable.  Es importante cuando existen varios objetos en
+el mismo punto del tiempo musical (como las notas de un acorde).
+En tal caso, @code{\once} afecta a todos los objetos, mientras que
+@code{\single} solo afecta a uno, aquél que se genera por parte de
+la expresión musical que le sigue inmediatamente.
+
+@node Simulación de un calderón en el MIDI
+@unnumberedsubsubsec Simulación de un calderón en el MIDI
+@translationof Simulating a fermata in MIDI
 
 @cindex sello, uso de la propiedad
 @cindex fermata, realización en MIDI
@@ -3705,7 +4097,7 @@ los dos métodos:
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'transparent = ##t
+    \once \hide Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata |
@@ -3727,7 +4119,7 @@ los dos métodos:
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'stencil = ##f
+    \once \override Score.MetronomeMark.stencil = ##f
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata |
@@ -3751,14 +4143,14 @@ sigue, mientras que la segunda (con el sello suprimido) no lo hace.
 Glosario musical:
 @rglos{system}.
 
+@node Uso de variables para los ajustes de disposición
+@subsection Uso de variables para los ajustes de disposición
+@translationof Using variables for layout adjustments
 
-@node Uso de variables para los trucos
-@subsection Uso de variables para los trucos
-@translationof Using variables for tweaks
-
-@cindex variables, uso de, para trucos
-@cindex usar variables para hacer trucos
-@cindex trucos, usar variables para hacer
+@cindex variables, usar para sobreescrituras
+@cindex sobreescrituras, usar variablas para
+@cindex ajustes, usar variables para
+@cindex ajustes de disposición, usar variables para hacer
 
 Las instrucciones de sobreescritura son con frecuencia largas y
 tediosas de escribir, y se tienen que escribir de forma absolutamente
@@ -3776,11 +4168,11 @@ alternativa, utilizar las instrucciones @code{\override} y
 @code{\revert}?
 
 @example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
 
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
 @end example
 
 Estas instrucciones también serían extremadamente tediosas de escribir
@@ -3799,13 +4191,13 @@ más cortos para que fueran más rápidos de teclear:
 
 @lilypond[quote,verbatim]
 emphasize = {
-  \override Lyrics.LyricText #'font-shape = #'italic
-  \override Lyrics.LyricText #'font-series = #'bold
+  \override Lyrics.LyricText.font-shape = #'italic
+  \override Lyrics.LyricText.font-series = #'bold
 }
 
 normal = {
-  \revert Lyrics.LyricText #'font-shape
-  \revert Lyrics.LyricText #'font-series
+  \revert Lyrics.LyricText.font-shape
+  \revert Lyrics.LyricText.font-series
 }
 
 global = { \key c \major \time 4/4 \partial 4 }
@@ -3869,18 +4261,15 @@ las partes que tienen todos los @code{#()}.  Esto se explicará en
 
 @lilypond[quote,verbatim,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -3902,20 +4291,17 @@ nuestros archivos de música, y yo personalmente encuentro todos los
 otro archivo:
 
 @example
-%%% guardar esto en un archivo de nombre "definiciones.ily"
+%%% guardar esto en un archivo con el nombre "definiciones.ily"
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 @end example
 
 Haremos referencia a este archivo utilizando la instrucción
@@ -3943,18 +4329,15 @@ archivo como @file{musica.ly}).
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -3979,66 +4362,60 @@ Sustituyamos nuestro archivo @file{definiciones.ily} con éste:
 @example
 %%%  definiciones.ily
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \layout{
   \context {
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context {
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   }
   \context {
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4063,63 +4440,57 @@ también vamos a aumentar el tamaño general de la salida.
 @example
 %%%  publicar-web.ily
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 #(set-global-staff-size 23)
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 #(set-global-staff-size 23)
 
 \layout{
   \context { \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context { \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4185,8 +4556,7 @@ un gestor de paquetes (es decir, distribuido con GNU/Linux, o instalado
 bajo fink o cygwin) o fue compilado a partir de la fuente, y (b) de
 qué sistema operativo está utilizando:
 
-
-@strong{Descargado de lilypond.org}
+@subsubsubheading Descargado de lilypond.org
 
 @itemize @bullet
 @item GNU/Linux
@@ -4217,7 +4587,7 @@ Mediante el Explorador de Windows, diríjase a
 
 @end itemize
 
-@strong{Instalado mediante un gestor de paquetes o compilado a partir de la fuente}
+@subsubsubheading Instalado mediante un gestor de paquetes o compilado a partir de la fuente
 
 Diríjase a
 @file{@var{PREFIJO}/share/lilypond/@var{X.Y.Z}/}, donde @var{PREFIJO}
@@ -4246,8 +4616,8 @@ es:
 
 @example
 tieDotted = @{
-  \override Tie #'dash-period = #0.75
-  \override Tie #'dash-fraction = #0.1
+  \override Tie.dash-period = #0.75
+  \override Tie.dash-fraction = #0.1
 @}
 @end example
 
@@ -4350,7 +4720,7 @@ notas un color que depende de su posición dentro del pentagrama.
 
 \relative c' {
   % Arrange to obtain color from color-notehead procedure
-  \override NoteHead #'color = #color-notehead
+  \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
 }
 @end lilypond
index 4272e84849b581e2e908be9cd382664c7a584c03..502355754a6dec2011b97e8d3631d34caf2e46ee 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 08560a1b8076630c4fc6cb9b902614d8b74fd6fc
+    Translation of GIT committish: 00cd4ff0b8dc4978344ba966bec06ddbc445f7e9
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -56,7 +56,6 @@ Apéndices
 
 * Tablas del manual sobre notación:: Tablas y cuadros.
 * Hoja de referencia rápida::        Resumen de la sintaxis de LilyPond.
-* Gramática de LilyPond::            Diagrama de sintaxis para el analizador sintáctico de LilyPond.
 * GNU Free Documentation License:: Licencia de este documento.
 * Índice de instrucciones de LilyPond::
 * Índice de LilyPond::
@@ -81,19 +80,10 @@ Apéndices
 @include notation/notation-appendices.itely
 @include notation/cheatsheet.itely
 
-@node Gramática de LilyPond
-@appendix Gramática de LilyPond
-@translationof LilyPond grammar
-
-Este apéndice contiene una descripción de la gramática del lenguaje de
-LilyPond, tal y como el analizador sintáctico la proporciona como
-salida.
-
-@verbatiminclude ly-grammar.txt
-
 
 @include fdl.itexi
 
+
 @node Índice de instrucciones de LilyPond
 @appendix Índice de instrucciones de LilyPond
 @translationof LilyPond command index
diff --git a/Documentation/es/notation/GNUmakefile b/Documentation/es/notation/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 627df0ccf55e44ce198589384d4415bbfbe8a63a..b31587117876c97844700230058a1fc78bef14db 100644 (file)
@@ -1,14 +1,15 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @c vim: foldmethod=marker
 @ignore
-    Translation of GIT committish: 44011e382e91f43fb6752b3fbbf8d8984131a565
+    Translation of GIT committish: 7d3ea6751584868fda754e8b275e06605aad857d
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
+
 
 @node Notación antigua
 @section Notación antigua
@@ -22,6 +23,7 @@
 @cindex Petrucci
 @cindex mensural
 
+
 @menu
 * Panorámica de los estilos contemplados::
 * Notación antigua - funcionalidades comunes::
@@ -176,7 +178,6 @@ Glosario musical:
 * Contextos predefinidos::
 * Ligaduras::
 * Custos::
-* Soporte para bajo cifrado::
 @end menu
 
 
@@ -231,8 +232,8 @@ ligadura en particular.  De forma predeterminada, el grabador
 sobre la ligadura:
 
 @lilypond[quote,ragged-right,verbatim]
-\transpose c c' {
-  \[ g c a f d' \]
+\relative c'' {
+  \[ g c, a' f d' \]
   a g f
   \[ e f a g \]
 }
@@ -269,7 +270,7 @@ ellas.
 
 La sintaxis todavía utiliza el obsoleto estilo infijo
 @code{\[ expresión_musical \]}.  Por motivos de consistencia, esto
-cambiará algún día al estilo postfijo @code{nota\[ ... nota\]}.
+cambiará algún día al estilo postfijo @code{nota\[ @dots{} nota\]}.
 
 
 @node Custos
@@ -309,7 +310,7 @@ muestra en el ejemplo siguiente:
     \context {
       \Staff
       \consists "Custos_engraver"
-      \override Custos #'style = #'mensural
+      \override Custos.style = #'mensural
     }
   }
 }
@@ -351,22 +352,6 @@ Fragmentos de código:
 Referencia de funcionamiento interno:
 @rinternals{Custos}.
 
-
-@node Soporte para bajo cifrado
-@unnumberedsubsubsec Soporte para bajo cifrado
-@translationof Figured bass support
-
-Está contemplada de forma limitada la notación de bajo cifrado
-barroco: véase @ref{Bajo cifrado}.
-
-@seealso
-Glosario musical:
-@rglos{figured bass}.
-
-Referencia de la notación:
-@ref{Bajo cifrado}.
-
-
 @node Tipografiar música mensural
 @subsection Tipografiar música mensural
 @translationof Typesetting mensural music
@@ -401,13 +386,13 @@ escribir el canto, como lo demuestra el siguiente fragmento:
 @lilypond[quote,ragged-right,verbatim]
 \score {
   <<
-    \new MensuralVoice = "discantus" \transpose c c' {
-      \override Score.BarNumber #'transparent = ##t {
-        c'1\melisma bes a g\melismaEnd
+    \new MensuralVoice = "discantus" \relative c'' {
+      \hide Score.BarNumber {
+        c1\melisma bes a g\melismaEnd
         f\breve
-        \[ f1\melisma a c'\breve d'\melismaEnd \]
-        c'\longa
-        c'\breve\melisma a1 g1\melismaEnd
+        \[ f1\melisma a c\breve d\melismaEnd \]
+        c\longa
+        c\breve\melisma a1 g1\melismaEnd
         fis\longa^\signumcongruentiae
       }
     }
@@ -434,7 +419,7 @@ contempladas a través de la instrucción @code{\clef}.  Algunas de las
 claves usan el mismo glifo, pero se diferencian sólo en la línea en
 que se imprimen.  En tales casos, se usa un número añadido al nombre
 para enumerar dichas claves, numerado desde la línea inferior hasta la
-superior.  Aún así, puede forzar manualmente que se escriba un glifo
+superior.  Puede forzar manualmente que se escriba un glifo
 de clave sobre una línea arbitraria, como se encuentra descrito en
 @ref{Clave}.  La nota impresa a la derecha de cada clave en la columna
 de los ejemplos denota la situación del Do central (@code{c'}) con
@@ -456,11 +441,12 @@ pauta en que se imprimían.
 clave de Do, mensural
 @tab
 @code{mensural-c1}, @code{mensural-c2},@*
-@code{mensural-c3}, @code{mensural-c4}
+@code{mensural-c3}, @code{mensural-c4},@*
+@code{mensural-c5}
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-c2"
-  \override NoteHead #'style = #'mensural
+  \override NoteHead.style = #'mensural
   c
 @end lilypond
 
@@ -471,8 +457,8 @@ clave de Fa, mensural
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-f"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -482,8 +468,21 @@ clave de Sol, mensural
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-g"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
+@end lilypond
+
+@item
+clave de Do, mensural negra
+@tab
+@code{blackmensural-c1}, @code{blackmensural-c2},@*
+@code{blackmensural-c3}, @code{blackmensural-c4},@*
+@code{blackmensural-c5}
+@tab
+@lilypond[relative=1,notime]
+  \clef "blackmensural-c2"
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -493,7 +492,7 @@ clave de Do, neomensural
 @code{neomensural-c3}, @code{neomensural-c4}
 @tab
 @lilypond[relative=1,notime]
-  \clef "neomensural-c2" c
+  \clef "neomensural-c2" c1
 @end lilypond
 
 @item
@@ -506,8 +505,8 @@ de la pauta (el ejemplo muestra la clave de Do en segunda)
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-c2"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -520,8 +519,8 @@ distintas líneas de la pauta
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-f3"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -531,8 +530,8 @@ clave de Sol en el estilo de Petrucci
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-g"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 @end multitable
 
@@ -576,34 +575,35 @@ siguiente tabla
 {
   \set Score.timing = ##f
   \set Score.barAlways = ##t
-  s_\markup { "\\time 4/4" }^\markup { "       " \musicglyph
+  \textLengthOn
+  s^\markup { "\\time 4/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural44" }
   s
-  s_\markup { "\\time 2/2" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 2/2" }_\markup { "       " \musicglyph
 #"timesig.neomensural22" }
   s
-  s_\markup { "\\time 6/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 6/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural64" }
   s
-  s_\markup { "\\time 6/8" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 6/8" }_\markup { "       " \musicglyph
 #"timesig.neomensural68" }
   \break
-  s_\markup { "\\time 3/2" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 3/2" }_\markup { "       " \musicglyph
 #"timesig.neomensural32" }
   s
-  s_\markup { "\\time 3/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 3/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural34" }
   s
-  s_\markup { "\\time 9/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 9/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural94" }
   s
-  s_\markup { "\\time 9/8" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 9/8" }_\markup { "       " \musicglyph
 #"timesig.neomensural98" }
   \break
-  s_\markup { "\\time 4/8" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 4/8" }_\markup { "       " \musicglyph
 #"timesig.neomensural48" }
   s
-  s_\markup { "\\time 2/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 2/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural24" }
 }
 @end lilypond
@@ -622,18 +622,18 @@ que existen entre los estilos:
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter default }
 
-  \override Staff.TimeSignature #'style = #'numbered
+  \override Staff.TimeSignature.style = #'numbered
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter numbered }
 
-  \override Staff.TimeSignature #'style = #'mensural
+  \override Staff.TimeSignature.style = #'mensural
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter mensural }
 
-  \override Staff.TimeSignature #'style = #'neomensural
+  \override Staff.TimeSignature.style = #'neomensural
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter neomensural }
-  \override Staff.TimeSignature #'style = #'single-digit
+  \override Staff.TimeSignature.style = #'single-digit
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter single-digit }
 }
@@ -657,7 +657,7 @@ la razón de 1@tie{}breve = 3@tie{}semibreves
 establecimiento de
 
 @example
-breveTP = #(ly:make-duration -1 0 3 2)
+breveTP = #(ly:make-duration -1 0 3/2)
 @dots{}
 @{ c\breveTP f1 @}
 @end example
@@ -721,13 +721,13 @@ El ejemplo siguiente muestra el estilo @code{petrucci}:
 @lilypond[quote,fragment,ragged-right,verbatim]
 \set Score.skipBars = ##t
 \autoBeamOff
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
 a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a'
-\override NoteHead #'style = #'semipetrucci
+\override NoteHead.style = #'semipetrucci
 a'\breve*5/6
-\override NoteHead #'style = #'blackpetrucci
+\override NoteHead.style = #'blackpetrucci
 a'8*4/3 a'
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
 a'\longa
 @end lilypond
 
@@ -755,22 +755,19 @@ Utilice la propiedad @code{flag-style} del elemento gráfico
 Aparte del estilo de corchete por defecto @code{default}, sólo está
 contemplado el estilo @code{mensural}
 
-@lilypond[quote,fragment,ragged-right,verbatim]
-\override Flag #'style = #'mensural
-\override Stem #'thickness = #1.0
-\override NoteHead #'style = #'mensural
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\override Flag.style = #'mensural
+\override Stem.thickness = #1.0
+\override NoteHead.style = #'mensural
 \autoBeamOff
-c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8
-c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32
+c8 d e f c16 d e f c32 d e f s8
+c'8 d e f c16 d e f c32 d e f
 @end lilypond
 
 Observe que la bandera más interna de cada uno de los corchetes
-mensurales siempre se alinea verticalmente con una línea de la pauta.
+mensurales se alinea verticalmente con una línea de la pauta.
 
 No existe un estilo particular de corchete para la notación neo-mensural ni Petrucci.
-@c Hence,
-@c when typesetting the incipit of a transcribed piece of mensural
-@c music, the default flag style should be used.
 No existen corchetes en la notación del canto gregoriano.
 
 @seealso
@@ -779,10 +776,6 @@ Glosario musical:
 @rglos{flag}.
 
 @knownissues
-La unión de los corchetes antiguos a las plicas está ligeramente
-desviada.
-@c due to a change in early 2.3.x.
-
 La alineación vertical de cada uno de los corchetes con una línea de
 la pauta da por supuesto que las plicas siempre terminan exactamente
 encima o bien exactamente en el medio de dos líneas de la pauta.  Esto
@@ -811,11 +804,11 @@ El ejemplo siguiente muestra los estilos @code{mensural} y
 
 @lilypond[quote,fragment,ragged-right,verbatim]
 \set Score.skipBars = ##t
-\override Rest #'style = #'classical
+\override Rest.style = #'classical
 r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'mensural
+\override Rest.style = #'mensural
 r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'neomensural
+\override Rest.style = #'neomensural
 r\longa^"neomensural" r\breve r1 r2 r4 r8 r16
 @end lilypond
 
@@ -868,7 +861,7 @@ elementos gráficos @code{Accidental} y
 @code{KeySignature}, respectivamente; p.ej.:
 
 @example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
   #alteration-mensural-glyph-name-alist
 @end example
 
@@ -984,9 +977,9 @@ Por ejemplo:
 
 @c @example
 @c \set Score.timing = ##f
-@c \set Score.defaultBarType = "empty"
-@c \override NoteHead #'style = #'neomensural
-@c \override Staff.TimeSignature #'style = #'neomensural
+@c \set Score.defaultBarType = "-"
+@c \override NoteHead.style = #'neomensural
+@c \override Staff.TimeSignature.style = #'neomensural
 @c \clef "petrucci-g"
 @c \[ c'\maxima g \]
 @c \[ d\longa c\breve f e d \]
@@ -995,19 +988,19 @@ Por ejemplo:
 @c @end example
 @lilypond[quote,ragged-right,verbatim]
 \score {
-  \transpose c c' {
+  \relative c' {
     \set Score.timing = ##f
-    \set Score.defaultBarType = "empty"
-    \override NoteHead #'style = #'petrucci
-    \override Staff.TimeSignature #'style = #'mensural
+    \set Score.defaultBarType = "-"
+    \override NoteHead.style = #'petrucci
+    \override Staff.TimeSignature.style = #'mensural
     \clef "petrucci-g"
     \[ c'\maxima g \]
     \[ d\longa
-       \override NoteHead #'ligature-flexa = ##t
-       \once \override NoteHead #'flexa-width = #3.2
+       \override NoteHead.ligature-flexa = ##t
+       \once \override NoteHead.flexa-width = #3.2
        c\breve f e d \]
-    \[ c'\maxima d'\longa \]
-    \[ e'1 a g\breve \]
+    \[ c'\maxima d\longa \]
+    \[ e1 a, g\breve \]
   }
   \layout {
     \context {
@@ -1024,19 +1017,19 @@ por el @code{Mensural_ligature_engraver}, la misma música se
 transcribe de la siguiente manera:
 
 @lilypond[quote,ragged-right]
-\transpose c c' {
+\relative c' {
   \set Score.timing = ##f
-  \set Score.defaultBarType = "empty"
-  \override NoteHead #'style = #'petrucci
-  \override Staff.TimeSignature #'style = #'mensural
+  \set Score.defaultBarType = "-"
+  \override NoteHead.style = #'petrucci
+  \override Staff.TimeSignature.style = #'mensural
   \clef "petrucci-g"
   \[ c'\maxima g \]
   \[ d\longa
-     \override NoteHead #'ligature-flexa = ##t
-     \once \override NoteHead #'flexa-width = #3.2
+     \override NoteHead.ligature-flexa = ##t
+     \once \override NoteHead.flexa-width = #3.2
      c\breve f e d \]
-  \[ c'\maxima d'\longa \]
-  \[ e'1 a g\breve \]
+  \[ c'\maxima d\longa \]
+  \[ e1 a, g\breve \]
 }
 @end lilypond
 
@@ -1158,12 +1151,11 @@ Clave de Do, estilo Editio Vaticana
 @code{vaticana-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'vaticana.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'vaticana.punctum
   \clef "vaticana-do2"
   c
 @end lilypond
@@ -1174,12 +1166,11 @@ Clave de Fa, estilo Editio Vaticana
 @code{vaticana-fa1}, @code{vaticana-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'vaticana.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'vaticana.punctum
   \clef "vaticana-fa2"
   c
 @end lilypond
@@ -1191,12 +1182,11 @@ Clave de Do, estilo Editio Medicaea
 @code{medicaea-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'medicaea.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'medicaea.punctum
   \clef "medicaea-do2"
   c
 @end lilypond
@@ -1207,12 +1197,11 @@ Clave de Fa, estilo Editio Medicaea
 @code{medicaea-fa1}, @code{medicaea-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'medicaea.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'medicaea.punctum
   \clef "medicaea-fa2"
   c
 @end lilypond
@@ -1224,12 +1213,11 @@ Clave de Do, estilo hufnagel
 @code{hufnagel-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-do2"
   c
 @end lilypond
@@ -1240,12 +1228,11 @@ Clave de Fa, estilo hufnagel
 @code{hufnagel-fa1}, @code{hufnagel-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-fa2"
   c
 @end lilypond
@@ -1256,11 +1243,10 @@ Clave combinada de Do y Fa, estilo hufnagel
 @code{hufnagel-do-fa}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-do-fa"
   c
 @end lilypond
@@ -1314,7 +1300,7 @@ gráficos) @rinternals{Accidental} y @rinternals{KeySignature},
 respectivamente; p.ej.:
 
 @example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
   #alteration-mensural-glyph-name-alist
 @end example
 
@@ -1368,7 +1354,7 @@ instrucciones @code{\virgula} y @code{\caesura}.
 \score {
   <<
     \context VaticanaVoice {
-      \override TextScript  #'padding = #3
+      \override TextScript.padding = #3
       g a g
       s^\markup { "divisio minima" }
       \divisioMinima
@@ -1437,9 +1423,9 @@ notación en el estilo de la @emph{Editio Vaticana}.
 \include "gregorian.ly"
 \score {
   \new VaticanaVoice {
-    \override TextScript #'font-family = #'typewriter
-    \override TextScript #'font-shape = #'upright
-    \override Script #'padding = #-0.1
+    \override TextScript.font-family = #'typewriter
+    \override TextScript.font-shape = #'upright
+    \override Script.padding = #-0.1
     a\ictus_"ictus " \bar "" \break
     a\circulus_"circulus " \bar "" \break
     a\semicirculus_"semicirculus " \bar "" \break
@@ -1564,7 +1550,7 @@ las notas que se han de unir.
 Una nota sin modificaciones produce un @emph{punctum}.  Todos los
 demás neumas, incluso los neumas de una nota con forma distinta como
 la @emph{virga}, se consideran en principio como ligaduras y por ello
-se deben escribir dentro de @code{\[...\]}.
+se deben escribir dentro de @code{\[@dots{}\]}.
 
 @noindent
 Neumas de una nota:
@@ -1685,7 +1671,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum
     \[ b \]
   }
@@ -1699,7 +1685,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum
     \[ \cavum b \]
   }
@@ -1713,7 +1699,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum
     \[ \linea b \]
   }
@@ -1728,7 +1714,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Auctum Ascendens
     \[ \auctum \ascendens b \]
   }
@@ -1743,7 +1729,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Auctum Descendens
     \[ \auctum \descendens b \]
   }
@@ -1758,7 +1744,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Inclinatum
     \[ \inclinatum b \]
   }
@@ -1773,7 +1759,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Inclinatum Auctum
     \[ \inclinatum \auctum b \]
   }
@@ -1788,7 +1774,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Inclinatum Parvum
     \[ \inclinatum \deminutum b \]
   }
@@ -1803,7 +1789,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Virga
     \[ \virga b \]
   }
@@ -1824,7 +1810,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Clivis vel Flexa
     \[ b \flexa g \]
   }
@@ -1840,7 +1826,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Clivis Aucta Descendens
     \[ b \flexa \auctum \descendens g \]
   }
@@ -1855,7 +1841,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Clivis Aucta Ascendens
     \[ b \flexa \auctum \ascendens g \]
   }
@@ -1870,7 +1856,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Cephalicus
     \[ b \flexa \deminutum g \]
   }
@@ -1885,7 +1871,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Podatus vel Pes
     \[ g \pes b \]
   }
@@ -1900,8 +1886,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Pes Auctus Descendens
+  \relative c'' {
+    % Pes Auctus Descendens
     \[ g \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
@@ -1915,7 +1901,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Auctus Ascendens
     \[ g \pes \auctum \ascendens b \]
   }
@@ -1930,8 +1916,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Epiphonus
+  \relative c'' {
+    % Epiphonus
     \[ g \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
@@ -1945,7 +1931,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Initio Debilis
     \[ \deminutum g \pes b \]
   }
@@ -1960,7 +1946,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Auctus Descendens Initio Debilis
     \[ \deminutum g \pes \auctum \descendens b \]
   }
@@ -1982,7 +1968,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Torculus
     \[ a \pes b \flexa g \]
   }
@@ -1997,8 +1983,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Auctus Descendens
+  \relative c'' {
+    % Torculus Auctus Descendens
     \[ a \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2012,8 +1998,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Deminutus
+  \relative c'' {
+    % Torculus Deminutus
     \[ a \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2027,8 +2013,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Initio Debilis
+  \relative c'' {
+    % Torculus Initio Debilis
     \[ \deminutum a \pes b \flexa g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2042,8 +2028,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Auctus Descendens Initio Debilis
+  \relative c'' {
+    % Torculus Auctus Descendens Initio Debilis
     \[ \deminutum a \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2057,8 +2043,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Deminutus Initio Debilis
+  \relative c'' {
+    % Torculus Deminutus Initio Debilis
     \[ \deminutum a \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2072,7 +2058,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Porrectus
     \[ a \flexa g \pes b \]
   }
@@ -2087,8 +2073,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Porrectus Auctus Descendens
+  \relative c'' {
+    % Porrectus Auctus Descendens
     \[ a \flexa g \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2102,8 +2088,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Porrectus Deminutus
+  \relative c'' {
+    % Porrectus Deminutus
     \[ a \flexa g \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2117,7 +2103,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Climacus
     \[ \virga b \inclinatum a \inclinatum g \]
   }
@@ -2132,8 +2118,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Climacus Auctus
+  \relative c'' {
+    % Climacus Auctus
     \[ \virga b \inclinatum a \inclinatum \auctum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2147,8 +2133,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Climacus Deminutus
+  \relative c'' {
+    % Climacus Deminutus
     \[ \virga b \inclinatum a \inclinatum \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2162,7 +2148,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Scandicus
     \[ g \pes a \virga b \]
   }
@@ -2177,8 +2163,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Scandicus Auctus Descendens
+  \relative c'' {
+    % Scandicus Auctus Descendens
     \[ g \pes a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2192,8 +2178,8 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Scandicus Deminutus
+  \relative c'' {
+    % Scandicus Deminutus
     \[ g \pes a \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2214,7 +2200,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Quilisma
     \[ g \pes \quilisma a \pes b \]
   }
@@ -2229,7 +2215,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Quilisma Pes Auctus Descendens
     \[ g \quilisma a \pes \auctum \descendens b \]
   }
@@ -2244,7 +2230,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Oriscus
     \[ \oriscus b \]
   }
@@ -2259,7 +2245,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Quassus
     \[ \oriscus g \pes \virga b \]
   }
@@ -2274,7 +2260,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Quassus Auctus Descendens
     \[ \oriscus g \pes \auctum \descendens b \]
   }
@@ -2289,7 +2275,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Salicus
     \[ g \oriscus a \pes \virga b \]
   }
@@ -2304,7 +2290,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Salicus Auctus Descendens
     \[ g \oriscus a \pes \auctum \descendens b \]
   }
@@ -2319,7 +2305,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Stropha
     \[ \stropha b \]
   }
@@ -2334,7 +2320,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Stropha Aucta
     \[ \stropha \auctum b \]
   }
@@ -2349,7 +2335,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Bistropha
     \[ \stropha b \stropha b \]
   }
@@ -2364,7 +2350,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Tristropha
     \[ \stropha b \stropha b \stropha b \]
   }
@@ -2379,7 +2365,7 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Trigonus
     \[ \stropha b \stropha b \stropha a \]
   }
@@ -2461,9 +2447,10 @@ arbitrario.
 @menu
 * Contextos del canto kievano::
 * Claves del canto kievano::
-* Cabeza de las notas kievanas::
+* Notas del canto kievano::
 * Alteraciones accidentales del canto kievano::
 * Líneas divisorias del canto kievano::
+* Melismas del canto kievano::
 @end menu
 
 @node Contextos del canto kievano
@@ -2483,10 +2470,10 @@ inmediatamente con la introducción del propio canto:
 @lilypond[quote,ragged-right,verbatim]
 \score {
   <<
-    \new KievanVoice = "melody" \transpose c c' {
+    \new KievanVoice = "melody" \relative c' {
       \cadenzaOn
-       c4 c c c c2 b,\longa
-       \bar "kievan"
+        c4 c c c c2 b\longa
+        \bar "k"
     }
     \new Lyrics \lyricsto "melody" {
       Го -- спо -- ди по -- ми -- луй.
@@ -2517,7 +2504,7 @@ Tse-fa-ut).  Se utiliza para indicar la posición del Do:
 
 @lilypond[quote,relative=1,notime,verbatim]
   \clef "kievan-do"
-  \override NoteHead #'style = #'kievan
+  \kievanOn
   c
 @end lilypond
 
@@ -2529,16 +2516,19 @@ Glosario musical:
 Referencia de la notación:
 @ref{Clave}.
 
-@node Cabeza de las notas kievanas
-@unnumberedsubsubsec Cabeza de las notas kievanas
-@translationof Kievan note heads
+@node Notas del canto kievano
+@unnumberedsubsubsec Notas del canto kievano
+@translationof Kievan notes
 
 @cindex cabezas de nota antiguas
 
 Para la notación cuadrada del canto kievano, debe escogerse el estilo
-apropiado para la forma de la cabeza de las notas.  Se consigue
-mediante el establecimiento de la propiedad @code{style} del objeto
-@code{NoteHead} al valor @code{kievan}.
+apropiado para la forma de la cabeza de las notas y se deben suprimir
+los corchetes y las plicas.  Esto se consigue mediante una llamada a
+la función @code{\kievanOn}, que establece las propiedades adecuadas
+para la cabeza, plica y corchete de las notas.  Una vez que las notas
+de estilo kievano ya no se necesiten, pueden revertirse estas
+propiedades llamando a la función @code{\kievanOff}.
 
 La nota final del canto kievano, que suele ir al final de una pieza
 musical, puede seleccionarse estableciendo la duración al valor
@@ -2551,8 +2541,10 @@ notas del canto kievano:
 @lilypond[quote,fragment,ragged-right,verbatim]
 \autoBeamOff
 \cadenzaOn
-\override NoteHead #'style = #'kievan
+\kievanOn
 b'1 b'2 b'4 b'8 b'\breve b'\longa
+\kievanOff
+b'2
 @end lilypond
 
 @seealso
@@ -2587,8 +2579,7 @@ antiguos.  Se ha incluido principalmente a efectos de compatibilidad.
 
 @lilypond[quote,relative=1,notime,verbatim]
 \clef "kievan-do"
-\override NoteHead #'style = #'kievan
-\override Accidental #'glyph-name-alist =
+\override Accidental.glyph-name-alist =
  #alteration-kievan-glyph-name-alist
 bes' dis,
 @end lilypond
@@ -2609,18 +2600,82 @@ Referencia de la notación:
 
 Normalmente se coloca una figura decorativa al final de una pieza de
 notación kievana, que puede denominarse como «doble barra final del
-canto kievano».  Se puede invocar como @code{\bar "kievan"}.
+canto kievano».  Se puede invocar como @code{\bar "k"}.
 
 @lilypond[quote,relative=1,notime,verbatim]
+  \kievanOn
   \clef "kievan-do"
-  \override NoteHead #'style = #'kievan
-  c \bar "kievan"
+  c \bar "k"
 @end lilypond
 
 @seealso
 @ref{Barras de compás},
 @ref{La tipografía Feta}.
 
+@node Melismas del canto kievano
+@unnumberedsubsubsec Melismas del canto kievano
+@translationof Kievan melismata
+
+@cindex ligaduras
+
+Las notas que están dentro de un melisma del canto kievano se
+suelen colocar a poca distancia entre sí y cada melisma está
+separado de los demás por un espacio vacío.  Esto se hace para
+permitir al cantor la identificación rápida de las estructuras
+melódicas del canto Znamenny.  En LilyPond, los melismas se tratan
+como ligaduras y el especiado está implementado por el grabador
+@code{Kievan_ligature_engraver}.
+
+Cuando se usan los contextos @code{KievanVoice} y
+@code{KievanStaff}, se habilita el grabador
+@code{Kievan_ligature_engraver} de forma predeterminada.  En otros
+contextos, se puede invocar sustituyendo el grabador
+@code{Ligature_bracket_engraver} por
+@code{Kievan_ligature_engraver} en el bloque layout:
+
+@example
+\layout @{
+  \context @{
+    \Voice
+    \remove "Ligature_bracket_engraver"
+    \consists "Kievan_ligature_engraver"
+  @}
+@}
+@end example
+
+El espaciado entre las notas que están dentro de una misma
+ligadura kievana puede controlatse estableciendo la propiedad
+@code{padding} de @code{KievanLigature}.
+
+El ejemplo siguiente muestra el uso de las ligaduras del canto
+kievano:
+
+@lilypond[quote,ragged-right,verbatim]
+\score {
+  <<
+    \new KievanVoice = "melody" \relative c' {
+      \cadenzaOn
+        e2 \[ e4( d4 ) \] \[ c4( d e  d ) \] e1 \bar "k"
+    }
+    \new Lyrics \lyricsto "melody" {
+      Га -- врі -- и -- лу
+    }
+  >>
+}
+@end lilypond
+
+@seealso
+Glosario musical:
+@rglos{ligature}.
+
+Referencia de la notación:
+@ref{Ligaduras mensurales blancas},
+@ref{Ligaduras de neumas cuadrados gregorianos},
+@ref{Ligaduras}.
+
+@knownissues
+El espaciado horizontal de las ligaduras es mediocre.
+
 @node Trabajar con música antigua - escenarios y soluciones
 @subsection Trabajar con música antigua - escenarios y soluciones
 @translationof Working with ancient music---scenarios and solutions
@@ -2694,7 +2749,7 @@ el grabador @code{Stem_engraver} del contexto de voz:
 
 @example
 \layout @{
-  ...
+  @dots{}
   \context @{
     \Voice
       \remove "Stem_engraver"
@@ -2705,12 +2760,9 @@ el grabador @code{Stem_engraver} del contexto de voz:
 Sin embargo, en ciertos estilos de transcripción, se usan plicas de
 forma ocasional, por ejemplo para indicar la transición a partir de un
 recitativo monotónico a un gesto melódico fijo.  En estos casos
-podemos usar bien @code{\override Stem #'transparent = ##t} o bien
-@code{\override Stem #'length = #0}, y restaurar la plica cuando se
-necesite con el correspondiente @code{\once \override Stem
-#'transparent = ##f} (véase el ejemplo de abajo).  Al utilizar
-plicas que lleven corchetes, asegúrese de establecer también
-@code{\override Flag #'transparent = ##t}.
+podemos usar bien @code{\hide Stem} o bien
+@code{\override Stem.length = #0}, y restaurar la plica cuando se
+necesite con el correspondiente @code{\once \override Stem.transparent = ##f} (véase el ejemplo de abajo).
 
 @b{Compás}.  Para el canto no medido, existen diversas alternativas.
 
@@ -2721,12 +2773,12 @@ en la partitura, pues la indicación invisible sigue ocupando un
 espacio.
 
 En muchos casos da un buen resultado @code{\set Score.timing = ##f}.
-Otra alternativa es utilizar @code{\CadenzaOn} y @code{\CadenzaOff}.
+Otra alternativa es utilizar @code{\cadenzaOn} y @code{\cadenzaOff}.
 
 Para quitar las barras de compás, el enfoque radical consiste en
 retirar (mediante la instrucción @code{\remove}) el grabador
 Bar_engraver del contexto de pentagrama Staff.  Una vez más, en vez de
-ello podemos usar @code{\override BarLine #'transparent = ##t} si se
+ello podemos usar @code{\hide BarLine} si se
 necesita ocasionalmente una barra de compás.
 
 Un tipo de transcripción muy común es el canto de recitativo, en el
@@ -2743,9 +2795,9 @@ chant = \relative c' {
 }
 
 verba = \lyricmode {
-  \once \override LyricText #'self-alignment-X = #-1
+  \once \override LyricText.self-alignment-X = #-1
   "Noctem quietam et" fi -- nem per -- fec -- tum
-  \once \override LyricText #'self-alignment-X = #-1
+  \once \override LyricText.self-alignment-X = #-1
   "concedat nobis Dominus" om -- ni -- po -- tens.
 }
 \score {
@@ -2758,8 +2810,7 @@ verba = \lyricmode {
       \Staff
       \remove "Time_signature_engraver"
       \remove "Bar_engraver"
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
+      \hide Stem
     }
   }
 }
@@ -2776,13 +2827,12 @@ plicas:
 chant = \relative c' {
   \clef "G_8"
   \set Score.timing = ##f
-  c\breve \override NoteHead #'transparent = ##t  c c c c c
-  \revert NoteHead #'transparent
-  \override Stem #'transparent = ##f \stemUp c4 b4 a
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t c2 c4  \divisioMaior
-  c\breve \override NoteHead #'transparent = ##t c c c c c c c
-  \revert NoteHead #'transparent c4 c f, f \finalis
+  c\breve \hide NoteHead  c c c c c
+  \undo \hide NoteHead
+  \override Stem.transparent = ##f \stemUp c4 b4 a
+  \hide Stem c2 c4  \divisioMaior
+  c\breve \hide NoteHead c c c c c c c
+  \undo \hide NoteHead c4 c f, f \finalis
 }
 
 verba = \lyricmode {
@@ -2799,9 +2849,8 @@ verba = \lyricmode {
     \context {
       \Staff
       \remove "Time_signature_engraver"
-      \override BarLine #'transparent = ##t
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
+      \hide BarLine
+      \hide Stem
     }
   }
 }
@@ -2830,10 +2879,10 @@ más ajustes posteriormente, esto se puede hacer fácilmente con
 @lilypond[verbatim,quote]
 spiritus = \relative c' {
   \time 1/4
-  \override Lyrics.LyricText #'X-extent  = #'(0 . 3)
-  d4 \times 2/3 { f8 a g } g a a4 g f8 e
+  \override Lyrics.LyricText.X-extent  = #'(0 . 3)
+  d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
   d4 f8 g g8 d f g a g f4 g8 a a4  s
-  \times 2/3 { g8 f d } e f g a g4
+  \tuplet 3/2 { g8 f d } e f g a g4
 }
 
 spirLyr = \lyricmode {
@@ -2850,12 +2899,11 @@ spirLyr = \lyricmode {
     \context {
       \Staff
       \remove "Time_signature_engraver"
-      \override BarLine #'X-extent = #'(-1 . 1)
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
-      \override Beam #'transparent = ##t
-      \override BarLine #'transparent = ##t
-      \override TupletNumber #'transparent = ##t
+      \override BarLine.X-extent = #'(-1 . 1)
+      \hide Stem
+      \hide Beam
+      \hide BarLine
+      \hide TupletNumber
     }
   }
 }
index 7993db1a5702f3ff38250dbfb499233557c40cea..6e53296f7b820518d7892981dcfb2c8349c873c9 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-Translation of GIT committish: 44011e382e91f43fb6752b3fbbf8d8984131a565
+Translation of GIT committish: ba8e0139b12ce248a00d8621104117f92bac34a6
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Cambiar los valores por omisión
 @chapter Cambiar los valores por omisión
@@ -64,7 +64,7 @@ Esta sección explica qué son los contextos y cómo modificarlos.
 
 @menu
 * Explicación de los contextos::
-* Crear contextos::
+* Crear y referenciar contextos::
 * Mantener vivos los contextos::
 * Modificar los complementos (plug-ins) de contexto::
 * Cambiar los valores por omisión de los contextos::
@@ -95,12 +95,64 @@ Referencia de funcionamiento interno:
 Los contextos se disponen de forma jerárquica:
 
 @menu
+* Definiciones de salida - estructura de los contextos::
 * Score. El contexto maestro::
 * Contextos del nivel superior. Contenedores de pentagramas::
 * Contextos de nivel intermedio. Pentagramas::
 * Contextos del nivel más bajo. Voces::
 @end menu
 
+@node Definiciones de salida - estructura de los contextos
+@unnumberedsubsubsec Definiciones de salida - estructura de los contextos
+@translationof Output definitions - blueprints for contexts
+
+Esta sección explica la relevancia de las definiciones de salida
+cuando se trabaja con los contextos. Más adelante ofrecemos
+ejemplos de definiciones de salida reales (véase
+@ref{Cambiar todos los contextos del mismo tipo}).
+
+@cindex salida, definiciones de
+@funindex \layout
+Aunque la música escrita en un archivo haga referencia a tipos y
+nombres de contexto, los contextos se crean solamente cuando la
+música se está realmente interpretando.  LilyPond interpreta la
+música bajo el control de una @q{definición de salida} y puede
+hacerlo así para varias definiciones de salida distintas, dando
+como resultado distintas salidas también.  La definicion de salida
+que corresponde a la impresión de la música se especifica mediante
+@code{\layout}.
+
+@funindex \midi
+Una definición de salida mucho más sencilla que se usa para la
+producción de MIDI se especifica mediante @code{\midi}.
+Internamente, LilyPond utiliza varias otras definiciones de
+salida, como cuando se usa el combinador de particellas
+(@ref{Combinación automática de las partes}) o se crean fragmentos
+de notas guía citadas (@ref{Citar otras voces}).
+
+Las definiciones de salida establecen la relación entre los
+contextos así como sus respectivos valores predeterminados.
+Aunque la mayor parte de los cambios se suelen hacer dentro de un
+bloque @code{\layout}, los ajustes de valores relacionados con el
+MIDI solamente tienen efecto cuando se hacen dentro de un bloque
+@code{\midi} block.
+
+@funindex autoBeaming
+Algunos ajustes afectan a varias salidas: por ejemplo, si se
+desactiva el barrado automático, @code{autoBeaming}, dentro de
+algún contexto, las barras cuentan como melismas en lo que
+respecta a la correspondencia entre la música y la letra, como se
+describe en @ref{Duración automática de las sílabas}.  Esta
+correspondencia se hace tanto para la salida impresa como para el
+MIDI.  Si los cambios hechos sobre el @code{autoBeaming} dentro de
+la definición de contexto de un bloque @code{\layout} no se
+repiten dentro del correspondiente bloque @code{\midi}, la letra y
+la música dejarán de estar sincronizadas dentro del MIDI.
+
+@seealso
+Archivos instalados:
+@file{ly/engraver-init.ly}.
+@file{ly/performer-init.ly}.
 
 @node Score. El contexto maestro
 @unnumberedsubsubsec Score. El contexto maestro
@@ -113,8 +165,7 @@ compás y se asegura de que ciertos elementos como claves, compases y
 armaduras están siempre alineados entre los distintos pentagramas.
 
 Se crea implícitamente una instancia del contexto Score cuando se
-procesa un bloque @code{\score @{@dots{}@}} o @code{\layout
-@{@dots{}@}}.
+procesa un bloque @code{\score @{@dots{}@}}.
 
 
 @node Contextos del nivel superior. Contenedores de pentagramas
@@ -186,9 +237,12 @@ piezas en estilo mensural.
 @unnumberedsubsubsec Contextos del nivel más bajo. Voces
 @translationof Bottom-level contexts - voices
 
-Los contextos del mismo nivel que Voice dan un valor inicial a ciertas
-propiedades e inician los grabadores correspondientes.  Siendo
-contextos del nivel más bajo, no pueden contener a otros contextos.
+Los contextos del mismo nivel que Voice dan un valor inicial a
+ciertas propiedades e inician los grabadores correspondientes.  Un
+contexto del nivel más bajo es aquel que no tiene un contexto
+descendiente predeterminado @code{defaultchild}.  Aunque es
+posible hacer que pueda aceptar o contener subcontextos, éstos
+solo se pueden crear e introducir de forma explícita.
 
 @strong{@emph{Voice}}
 
@@ -239,150 +293,221 @@ Normalmente se deja que se cree implícitamente.
 Tipografía nombres de acordes.
 
 
-@node Crear contextos
-@subsection Crear contextos
-@translationof Creating contexts
-
-@c TODO more complete descriptions rather than learning style
-
-Para partituras que sólo tienen una voz y un pentagrama, los contextos
-se crean automáticamente.  Para partituras más complejas, es necesario
-crearlos a mano.  Existen tres instrucciones que hacen esto.
-
-@itemize
-
-@item
-La instrucción más fácil es @code{\new}, y es también la más rápida de
-escribir.  Se antepone a una expresión musical, por ejemplo
+@node Crear y referenciar contextos
+@subsection Crear y referenciar contextos
+@translationof Creating and referencing contexts
 
 @funindex \new
-@cindex nuevos, contextos
-@cindex Contexto, creación de
+@funindex \context
+@cindex nuevos contextos
+@cindex contextos, creación y referenciación de
+@cindex referenciar contextos
+
+LilyPond crea automáticamente contextos de nifel inferior si se
+encuentra una expresión musical antes de que exista un contexto
+adecuado, pero normalmente esto sólo funciona bien para partituras
+sencillas o fragmentos musicales como los que aparecen en la
+documentación.  Para partituras más complejas, se recomienda
+especificar explícitamente todos los contextos con las
+instrucciones @code{\new} o @code{\context}.  La sintaxis de estas
+dos instrucciones es muy similar:
 
 @example
-\new @var{tipo} @var{expresión_musical}
+[\new | \context] @var{Contexto} [ = @var{nombre}] [@var{expresión_musical}]
 @end example
 
 @noindent
-donde @var{tipo} es el nombre de un contexto (como @code{Staff} o
-@code{Voice}).  Esta instrucción crea un contexto nuevo, y empieza a
-interpretar la @var{expresión_musical} con él.
+donde se puede especificar @code{\new} o @code{\context}.
+@var{Contexto} es el tipo de contexto que se desea crear,
+@var{nombre} es un nombre opcional que se da al contexto concreto
+que se está creando, y @var{expresión_musical} es una sola
+expresión musical que será interpretada por los complementos
+grabadores y reproductores dentro de este contexto.
 
-Una aplicación práctica de @code{\new} es una partitura con muchos
-pentagramas.  Cada parte que debe ir en su propio pentagrama, va
-precedida de @code{\new Staff}.
+El prefijo @code{\new} sin ningún nombre se usa con frecuencia
+para crear partituras con muchos pentagramas:
 
-@lilypond[quote,verbatim,relative=2,ragged-right]
+@lilypond[quote,verbatim,relative=2]
 <<
-  \new Staff { c4 c }
-  \new Staff { d4 d }
+  \new Staff {
+    % leave the Voice context to be created implicitly
+    c4 c
+  }
+  \new Staff {
+    d4 d
+  }
 >>
 @end lilypond
 
-La instrucción @code{\new} puede también dar nombre al contexto,
+@noindent
+y para introducir varias voces dentro de un solo pentagrama:
 
-@example
-\new @var{tipo} = @var{identificador} @var{música}
-@end example
-Sin embargo, este nombre especificado por el usuario sólo se utiliza
-si no hay ya otro contexto anterior con el mismo nombre.
+@lilypond[quote,verbatim,relative=2]
+<<
+  \new Staff <<
+    \new Voice {
+      \voiceOne
+      c8 c c4 c c
+    }
+    \new Voice {
+      \voiceTwo
+      g4 g g g
+    }
+  >>
+>>
+@end lilypond
 
+@noindent
+@code{\new} debería usarse siempre para especificar contextos sin
+nombre.
 
-@funindex \context
+La diferencia entre @code{\new} y @code{\context} se encuentra en
+la acción que se realiza:
 
+@itemize
 @item
-Como @code{\new}, la instrucción @code{\context} también dirige una
-expresión musical a un objeto de contexto, pero da al contexto un
-nombre explícito.  La sintaxis es
+@code{\new} con un nombre o sin él, siempre crea un contexto nuevo
+y distinto, incluso si ya existe un contexto con el mismo nombre:
 
-@example
-\context @var{tipo} = @var{identificador} @var{música}
-@end example
+@lilypond[quote,verbatim,relative=2]
+<<
+  \new Staff <<
+    \new Voice = "A" {
+      \voiceOne
+      c8 c c4 c c
+    }
+    \new Voice = "A" {
+      \voiceTwo
+      g4 g g g
+    }
+  >>
+>>
+@end lilypond
 
-En esta forma, la instrucción buscará un contexto existente del
-@var{tipo} especificado que tenga el nombre @var{identificador}.  Si
-ese contexto aún no existe, se crea un contexto nuevo con el nombre
-especificado.  Esto es útil si nos vamos a referir más tarde al
-contexto.  Por ejemplo, cuando se escribe la letra, la melodía está
-dentro de un contexto con nombre
+@item
+@code{\context} con un nombre especificado, crea un contexto nuevo
+solamente si no existe ya un contexto del mismo tipo y con el
+mismo nombre, dentro de la misma jerarquía de contextos.  En caso
+contrario, se toma como referencia a dicho contexto creado
+previamente, y su expresión musical se pasa a este contexto para
+su interpretación.
 
-@example
-\context Voice = "@b{tenor}" @var{música}
-@end example
+Una aplicación de los contextos con nombre es la separación entre
+la disposición de la partitura y el contenido musical.  Son
+válidas culaquiera de las dos formas siguientes:
 
-@noindent
-de forma que los textos se puedan alinear correctamente con sus notas,
+@lilypond[quote,verbatim]
+\score {
+  <<
+    % score layout
+    \new Staff <<
+      \new Voice = "one" {
+        \voiceOne
+      }
+      \new Voice = "two" {
+        \voiceTwo
+      }
+    >>
 
-@example
-\new Lyrics \lyricsto "@b{tenor}" @var{letra}
-@end example
+    % musical content
+    \context Voice = "one" {
+      \relative c'' {
+        c4 c c c
+      }
+    }
+    \context Voice = "two" {
+      \relative c'' {
+        g8 g g4 g g
+      }
+    }
+  >>
+}
+@end lilypond
 
-@noindent
+@lilypond[quote,verbatim]
+\score {
+  <<
+    % score layout
+    \new Staff <<
+      \context Voice = "one" {
+        \voiceOne
+      }
+      \context Voice = "two" {
+        \voiceTwo
+      }
+    >>
 
-Otro uso posible de los contextos con nombre es la fusión de dos
-expresiones musicales distintas en un solo contexto.  En el siguiente
-ejemplo, se introducen por separado las articulaciones y las notas:
+    % musical content
+    \context Voice = "one" {
+      \relative c'' {
+        c4 c c c
+      }
+    }
+    \context Voice = "two" {
+      \relative c'' {
+        g8 g g4 g g
+      }
+    }
+  >>
+}
+@end lilypond
 
-@example
-musica = @{ c4 c4 @}
-decoracion = @{ s4-. s4-> @}
-@end example
+@noindent
+De manera alternativa, se pueden utilizar variables con un efecto
+similar. Véase @rlearning{Organizar las piezas mediante variables}.
 
-se combinan enviando los dos al mismo contexto @code{Voice},
+@item
+@code{\context} sin ningún nombre corresponderá con el primer
+contexto que se encuentre entre los creados previamente que sean
+del mismo tipo dentro de la misma jerarquía de contextos, incluso
+si tiene nombre, y su expresión musical se pasará a dicho contexto
+para su interpretación.  Esta forma rara vez es útil.  Sin
+embargo, @code{\context} sin nombre y sin expresión musical se usa
+para establecer el contexto en que se ejecuta un procedimiento de
+Scheme especificado con @code{\applyContext}:
 
 @example
-<<
-  \new Staff \context Voice = "A" \musica
-  \context Voice = "A" \decoracion
->>
+\new Staff \relative c' @{
+  c1
+  \context Timing
+  \applyContext #(lambda (ctx)
+                   (newline)
+                   (display (ly:context-current-moment ctx)))
+  c1
+@}
 @end example
-@lilypond[quote,ragged-right]
-music = { c4 c4 }
-arts = { s4-. s4-> }
-\relative c'' <<
-  \new Staff \context Voice = "A" \music
-  \context Voice = "A" \arts
->>
-@end lilypond
 
-Con este mecanismo, es posible definir un @qq{urtext} (una edición
-original), con la posibilidad de poner articulaciones distintas sobre
-las mismas notas.
+@end itemize
 
-@cindex crear contextos
+Un contexto debe tener un nombre si se va a hacer referencia a él
+más tarde, por ejemplo cuando se asocia la letra con la música:
 
-@item
-La tercera instrucción para crear contextos es
 @example
-\context @var{tipo} @var{música}
+\new Voice = "tenor" @var{música}
+@dots{}
+\new Lyrics \lyricsto "tenor" @var{letra}
 @end example
 
-
 @noindent
-Esto es similar a @code{\context} con @code{= @var{identificador}},
-pero se corresponde con cualquier contexto del tipo @var{tipo}, sin
-importar qué nombre se le ha dado.
+Para ver más detalles sobre la asociación de letra y música,
+consulte @ref{Duración automática de las sílabas}.
 
-Esta variante se usa con expresiones musicales que se pueden
-interpretar en varios niveles.  Por ejemplo, la instrucción
-@code{\applyOutput} (véase
-@rextend{Ejecutar una función sobre todos los objetos de la presentación}).
-Sin una instrucción @code{\context}
-explícita, normalmente se aplicaría a @code{Voice}
+Las propiedades de todos los contextos de un tipo en particular se
+pueden modificar dentro de un bloque @code{\layout} (con una
+sintaxis diferente), véase @ref{Cambiar todos los contextos del mismo tipo}.
 
-@example
-\applyOutput #'@var{contexto} #@var{función}   % aplicar al contexto Voice
-@end example
+Esta construcción también ofrece una forma de mantener las
+instrucciones de disposición separadas del contenido musical.  Si
+se va a modificar un solo contexto, debe usarse un bloque
+@code{\with}, véase @ref{Cambiar solamente un contexto determinado}.
 
-Para que se interprete dentro de los niveles de @code{Score} o
-@code{Staff}, utilice las siguientes formas:
-
-@example
-\applyOutput #'Score #@var{función}
-\applyOutput #'Staff #@var{función}
-@end example
+@seealso
+Manual de aprendizaje:
+@rlearning{Organizar las piezas mediante variables}.
 
-@end itemize
+Referencia de la notación:
+@ref{Cambiar solamente un contexto determinado},
+@ref{Duración automática de las sílabas}.
 
 
 @node Mantener vivos los contextos
@@ -405,13 +530,13 @@ eventos musicales adicionales a un contexto anterior.
 
 Existe una excepción a esta regla general: precisamente uno de los
 contextos de @code{Voice} que están dentro de un contexto de
-@code{Staff} o de una construcción @code{<<...>>} persiste siempre
+@code{Staff} o de una construcción @code{<<@dots{}>>} persiste siempre
 hasta el final de, contexto de @code{Staff} circundante o la
-construcción @code{<<...>>}, incluso aunque puede haber períodos en
+construcción @code{<<@dots{}>>}, incluso aunque puede haber períodos en
 que no tiene nada que hacer.  El contexto que persiste de esta forma
 será el primero que se encuentre en la primera construcción encerrada
-entre llaves @code{@{...@}}, ignorando cualquiera que se encuentre
-dentro de construcciones encerradas por ángulos dobles @code{<<...>>}.
+entre llaves @code{@{@dots{}@}}, ignorando cualquiera que se encuentre
+dentro de construcciones encerradas por ángulos dobles @code{<<@dots{}>>}.
 
 Cualquier contexto se puede mantener vivo si nos aseguramos de que
 tiene algo que hacer en cualquier momento musical dado.  Los
@@ -589,7 +714,7 @@ modificándolo:
   @emph{etc.}
 @}
 @{
-  @emph{..música..}
+  @emph{@dots{}música@dots{}}
 @}
 @end example
 
@@ -639,14 +764,16 @@ compás independiente.
     \new Staff \with {
       \consists "Timing_translator"
       \consists "Default_bar_line_engraver"
-    } {
+    }
+    \relative c'' {
         \time 3/4
         c4 c c c c c
     }
   \new Staff \with {
     \consists "Timing_translator"
     \consists "Default_bar_line_engraver"
-  } {
+  }
+  \relative c'' {
       \time 2/4
       c4 c c c c c
   }
@@ -727,10 +854,17 @@ una instancia concreta de un contexto.
 @funindex \context
 @funindex \layout
 
-Los ajustes de contexto que se han de usar de forma predeterminada
-dentro de @code{Score}, @code{Staff}, @code{Voice} y otros contextos
+Los ajustes de contexto predeterminados que se han de usar para la composición
+tipográfica dentro de @code{Score}, @code{Staff}, @code{Voice} y otros contextos
 se pueden especificar en un bloque @code{\context} dentro de cualquier
-bloque @code{\layout}.  El bloque @code{\layout} se debe colocar
+bloque @code{\layout}.
+
+Los ajustes para la salida MIDI, al contrario que para la
+composición tipográfica, se tendrán que especificar aparte en
+bloques @code{\midi} (véase
+@ref{Definiciones de salida - estructura de los contextos}).
+
+El bloque @code{\layout} se debe colocar
 dentro del bloque @code{\score} al que se aplica, después de la
 música.
 
@@ -762,7 +896,7 @@ Una instrucción @code{\override}, pero omitiendo el nombre del contexto
   \layout {
     \context {
       \Staff
-      \override Stem #'thickness = #4.0
+      \override Stem.thickness = #4.0
     }
   }
 }
@@ -788,7 +922,7 @@ Estableciendo una propiedad de contexto directamente
 
 @item
 Una instrucción predefinida tal como @code{\dynamicUp} o una expresión
-musical como @code{\accidentalStyle "dodecaphonic"}
+musical como @code{\accidentalStyle dodecaphonic}
 
 @lilypond[quote,verbatim]
 \score {
@@ -803,7 +937,7 @@ musical como @code{\accidentalStyle "dodecaphonic"}
     }
     \context {
       \Staff
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
     }
   }
 }
@@ -857,9 +991,9 @@ estuviera escrita en el propio flujo musical.
     }
   }
   \layout {
-    \accidentalStyle "dodecaphonic"
+    \accidentalStyle dodecaphonic
     \set fontSize = #-4
-    \override Voice.Stem #'thickness = #4.0
+    \override Voice.Stem.thickness = #4.0
   }
 }
 @end lilypond
@@ -881,14 +1015,17 @@ parte de cualquier bloque @code{\layout} que se encuentre dentro del
 de las instrucciones @code{\new} @var{context-type}:
 
 @example
-\new Staff
-\with @{
-  [ajustes de contexto para esta única instancia de contexto]
-@} @{
-...
+\new Staff \with @{ [ajustes de contexto para esta instancia de contexto solamente] @}
+@{
+  @dots{}
 @}
 @end example
 
+Dado que dicha @q{modificación de contexto} está especificada
+dentro de la música, afectará a @emph{todas} las salidas
+(tipografía @emph{y también} el MIDI), a diferencia de los cambios
+que se hacen dentro de una definición de salida.
+
 Se pueden especificar los siguientes tipos de ajustes:
 
 @itemize
@@ -899,10 +1036,7 @@ contexto
 @lilypond[quote,verbatim]
 \score {
   \new Staff {
-    \new Voice
-    \with {
-      \override Stem #'thickness = #4.0
-    }
+    \new Voice \with { \override Stem.thickness = #4.0 }
     {
       \relative c'' {
         a4^"Thick stems" a a a
@@ -925,10 +1059,8 @@ Estableciendo una propiedad de contexto directamente
         a4 a a a
       }
     }
-    \new Staff
-    \with {
-      fontSize = #-4
-    } {
+    \new Staff \with { fontSize = #-4 }
+    {
       \relative c'' {
         a4^"Smaller font" a a a
         a4 a a a
@@ -952,11 +1084,9 @@ Una instrucción predefinida tal como @code{\dynamicUp}
         }
       }
     }
-    \new Staff
-    \with { \accidentalStyle "dodecaphonic" }
+    \new Staff \with { \accidentalStyle dodecaphonic }
     {
-      \new Voice
-      \with { \dynamicUp }
+      \new Voice \with { \dynamicUp }
       {
         \relative c'' {
           a4^"Dynamics above" a a a
@@ -988,7 +1118,7 @@ de lo contrario, se usa el valor predeterminado tomado de un enunciado
 
 @item
 de lo contrario, se usa el valor tomado del bloque @code{\context} más
-reciente que corresponda dentro de los bloques @code{\layout},
+reciente que corresponda dentro de los bloques @code{\layout} o @code{\midi},
 
 @item
 de lo contrario se usa el valor predeterminado que LilyPond lleva
@@ -1004,7 +1134,7 @@ Referencia de la notación:
 @ref{Contextos del nivel más bajo. Voces},
 @ref{La instrucción set},
 @ref{La instrucción override},
-@ref{El bloque \layout}.
+@ref{El bloque layout,,El bloque @code{@bs{}layout}}.
 
 
 @node Definir contextos nuevos
@@ -1028,7 +1158,7 @@ Referencia de la notación:
 @funindex denies
 
 Los contextos específicos, como @code{Staff} y @code{Voice}, están
-construidos a base de bloques sencillos.  Es posible crear nuevos
+construidos a partir de bloques sencillos.  Es posible crear nuevos
 tipos de contextos con combinaciones distintas de añadidos grabadores.
 
 El siguiente ejemplo muestra cómo construir un tipo diferente de
@@ -1037,7 +1167,6 @@ contexto de @code{Voice} partiendo de cero.  Será parecido a
 barra inclinada.  Se puede usar para indicar improvisación en piezas
 de jazz,
 
-@c KEEP LY
 @lilypond[quote,ragged-right]
 \layout { \context {
   \name ImproVoice
@@ -1047,9 +1176,8 @@ de jazz,
   \consists "Text_engraver"
   \consists "Pitch_squash_engraver"
   squashedPosition = #0
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Stem
   \alias Voice
 }
 \context { \Staff
@@ -1058,7 +1186,7 @@ de jazz,
 
 \relative c'' {
   a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
-   c4 c^"desvístete" c_"mientras tocas :)" c }
+   c4 c^"undress" c_"while playing :)" c }
   a1
 }
 @end lilypond
@@ -1084,46 +1212,57 @@ En primer lugar es necesario definir un nombre para el nuevo contexto:
 \name ImproVoice
 @end example
 
-Debido a que es parecido al contexto @code{Voice}, queremos órdenes
-que funcionen sobre contextos de @code{Voice} (existentes) para que
-siga funcionando.  Esto se consigue dando al contexto nuevo un alias
-@code{Voice},
+Debido a que es parecido al contexto @code{Voice}, queremos
+órdenes que funcionen dentro de los contextos @code{Voice}
+(existentes) para que siga funcionando.  Esto se consigue dando al
+contexto nuevo un alias de @code{Voice},
 
 @example
 \alias Voice
 @end example
 
-El contexto imprimirá notas y textos explicativos, por ello tenemos
-que añadir los grabadores que aportan esta funcionalidad:
+El contexto imprimirá notas y textos explicativos, por ello
+tenemos que añadir los grabadores que aportan esta funcionalidad,
+y además el grabador que agrupa las notas, plicas y silencios que
+están en el mismo momento musical en forma de columnas,
 
 @example
 \consists "Note_heads_engraver"
 \consists "Text_engraver"
+\consists "Rhythmic_column_engraver"
 @end example
 
-pero sólo necesitamos esto en la línea central:
+Las cabezas de todas las notas se deben situar sobre la línea
+central,
 
 @example
 \consists "Pitch_squash_engraver"
 squashedPosition = #0
 @end example
 
-El grabador @rinternals{Pitch_squash_engraver} modifica las cabezas de
-nota (creadas por el grabador @rinternals{Note_heads_engraver}) y
+El grabador @code{Pitch_squash_engraver} modifica las cabezas de
+nota (creadas por el grabador @code{Note_heads_engraver}) y
 establece sus posiciones verticales al valor de
-@code{squashedPosition}, en este caso@tie{}@code{0}, la línea central.
+@code{squashedPosition}, en este caso@tie{}@code{0}, la línea
+central.
 
 Las notas parecen barras inclinadas y no tienen plica:
 
 @example
-\override NoteHead #'style = #'slash
-\override Stem #'transparent = ##t
-\override Flag #'transparent = ##t
+\override NoteHead.style = #'slash
+\hide Stem
 @end example
 
-Todos estos añadidos tienen que cooperar, y esto se consigue con un
-añadido especial, que se debe marcar con la palabra clave
-@code{\type}.  Este será siempre @code{Engraver_group},
+Todos estos complementos o plug-ins tienen que comunicarse bajo el
+control del contexto.  Los mecanismos con el que se comunican los
+contextos se establecen mediante la declaración del @code{\type}
+(tipo) del contexto.  Dentro de un bloque @code{\layout}, casi
+todos los contextos serán del tipo @code{Engraver_group}.  Algunos
+contextos especiales y los contextos de los bloques @code{\midi}
+usan otros tipos.  La copia y la modificación de una definición de
+contexto existente también cumplimentan el tipo.  Como este
+ejemplo crea una definición partiendo de cero, tiene que ser
+especificada explícitamente.
 
 @example
 \type "Engraver_group"
@@ -1137,19 +1276,19 @@ Al juntarlo todo, obtenemos
   \type "Engraver_group"
   \consists "Note_heads_engraver"
   \consists "Text_engraver"
+  \consists "Rhythmic_column_engraver"
   \consists "Pitch_squash_engraver"
   squashedPosition = #0
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Stem
   \alias Voice
 @}
 @end example
 
 @funindex \accepts
-Los contextos dan lugar a jerarquías.  Queremos colgar el contexto
-@code{ImproVoice} bajo el contexto @code{Staff}, como simples
-@code{Voice}s normales.  Por tanto, modificamos la definición de
+Los contextos dan lugar a jerarquías.  Queremos poner el contexto
+@code{ImproVoice} dentro del contexto @code{Staff}, igual que los contextos
+de voz normales.  Por tanto, modificamos la definición de
 @code{Staff} con la instrucción @code{\accepts} (acepta),
 
 @example
@@ -1194,6 +1333,20 @@ puede escribir como
 @}
 @end example
 
+Para completar el ejemplo, los cambios que afectan a la jerarquía
+de contextos se deben repetir dentro de un bloque @code{\midi} de
+manera que la salida MIDI dependa de las mismas relaciones de
+contexto.
+
+@seealso
+
+Referencia de funcionamiento interno:
+@rinternals{Engraver_group},
+@rinternals{Note_heads_engraver},
+@rinternals{Text_engraver},
+@rinternals{Rhythmic_column_engraver},
+@rinternals{Pitch_squash_engraver}.
+
 
 @node Orden de disposición de los contextos
 @subsection Orden de disposición de los contextos
@@ -1253,10 +1406,26 @@ ejemplo, el contexto @code{VaticanaStaff} está basado en el contexto
 @code{Staff}, pero con el contexto @code{VaticanaVoice} sustituido por
 el contexto @code{Voice} en la lista @qq{accepts}.
 
-Observe que discretamente se crea un contexto de forma implícita si se
-encuentra una instrucción donde no hay un contexto apropiado para
-contenerlo.  Esto puede dar lugar a pentagramas o partituras nuevos no
-esperados.
+
+@cindex contextos implícitos
+@cindex implícitos, contextos
+@funindex \defaultchild
+
+Observe que discretamente se crea un contexto de forma implícita
+si se encuentra una instrucción donde no hay un contexto apropiado
+para contenerlo.
+
+Dentro de una definición de contexto, el tipo de un subcontexto
+que se va a crear implícitamente se especifica usando
+@code{\defaultchild} (hijo predeterminado).  Algunos eventos
+musicales requieren un contexto @samp{Bottom} (inferior): cuando
+se encuentra este evento, se crean subcontextos de forma recursiva
+hasta que se alcanza un contexto que no tiene establecido el
+@samp{defaultchild}.
+
+La creación implícita de contextos puede dar lugar a pentagramas o
+partituras nuevos no esperados.  La utilización de @code{\new}
+para crear contextos explícitamente evita esos problemas.
 
 @cindex alignAboveContext
 @cindex alignBelowContext
@@ -1264,13 +1433,14 @@ esperados.
 @funindex alignBelowContext
 
 En ocasiones se necesita que un contexto exista durante un breve
-intervalo de tiempo, siendo un buen ejemplo el contexto de pentagrama
-de un ossia.  Esto se consigue normalmente mediante la introducción de
-la definición del contexto en el lugar apropiado en paralelo con la
-sección correspondiente de la música principal.  De forma
-predeterminada, el contexto tempral se coloca debajo de todos los
-contextos existentes.  Para reposicionallo por encima del contexto que
-tenga el nombre @qq{principal}, debería definirse de esta forma:
+intervalo de tiempo, siendo un buen ejemplo el contexto de
+pentagrama de un ossia.  Esto se consigue normalmente mediante la
+introducción de la definición del contexto en el lugar apropiado
+en paralelo con la sección correspondiente de la música principal.
+De forma predeterminada, el contexto tempral se coloca debajo de
+todos los contextos existentes.  Para reposicionarlo por encima
+del contexto que tenga el nombre @qq{principal}, debería definirse
+de esta forma:
 
 @example
 @code{\new Staff \with @{ alignAboveContext = #"principal" @} }
@@ -1555,7 +1725,7 @@ digitación de la cabeza de la nota.  La siguiente orden inserta un
 espacio en blanco de 3 espacios de pentagrama entre la nota y la
 digitación:
 @example
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
 @end example
 
 Al insertar esta instrucción antes de que se haya creado el objeto
@@ -1563,7 +1733,7 @@ Fingering, es decir, antes del @code{c2}, llegamos al siguiente
 resultado:
 
 @lilypond[quote,relative=2,verbatim]
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
 c-2
 \stemUp
 f
@@ -1660,7 +1830,7 @@ funcionalidad des esta instrucción.
 La instrucción
 
 @verbatim
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
 @end verbatim
 
 @noindent
@@ -1672,7 +1842,7 @@ Aquí vemos la instrucción en pleno funcionamiento:
 
 @lilypond[quote,verbatim,relative=2]
 c4
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
 c4
 c4
 c4
@@ -1689,7 +1859,7 @@ solo paso de tiempo.
 
 @lilypond[quote,verbatim,relative=2]
 c4
-\once \override Stem #'thickness = #4.0
+\once \override Stem.thickness = #4.0
 c4
 c4
 @end lilypond
@@ -1700,9 +1870,9 @@ ligaduras o barras, la instrucción @code{\override} se debe ejecutar
 en el momento en que se crea el objeto.  En este ejemplo:
 
 @lilypond[quote,verbatim,relative=2]
-\override Slur #'thickness = #3.0
+\override Slur.thickness = #3.0
 c8[( c
-\override Beam #'beam-thickness = #0.6
+\override Beam.beam-thickness = #0.6
 c8 c])
 @end lilypond
 
@@ -1718,8 +1888,8 @@ del mismo contexto.  En otras palabras, el @code{\revert} del
 siguiente ejemplo no hace nada.
 
 @example
-\override Voice.Stem #'thickness = #4.0
-\revert Staff.Stem #'thickness
+\override Voice.Stem.thickness = #4.0
+\revert Staff.Stem.thickness
 @end example
 
 Algunas opciones «trucables» se llaman @q{subpropiedades} y residen
@@ -1735,7 +1905,7 @@ instrucciones de la forma
 tales como
 
 @example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
 @end example
 
 @end ignore
@@ -1898,15 +2068,14 @@ usuario.
 Referencia de funcionamiento interno:
 @rinternals{Tunable context properties}.
 
-@cindex grob, propiedades de
-@cindex propiedades de grob
-@funindex \override
-
-
 @node La instrucción override
 @subsection La instrucción @code{\override}
 @translationof The override command
 
+@cindex grob, propiedades de
+@cindex propiedades de grob
+@funindex \override
+
 Existe un tipo especial de propiedad de contexto: la descripción de
 los grobs.  Las decscripciones de los grobs reciben un nombre en
 @code{MayúsculasDeCamello} (empezando en mayúscula).  Contienen los
@@ -1915,37 +2084,19 @@ de lista asociativa.  Consulte @file{scm/define-grobs.scm} para
 ver los ajustes de cada descripción de grob.  Las descripciones de
 grob se modifican con @code{\override}.
 
-@code{\override} es en realidad una forma abreviada;
-
-@example
-\override @var{contexto}.@var{NombreDelGrob} #'@var{propiedad} = #@var{valor}
-@end example
-
-@noindent
-equivale más o menos a
+La sintaxis de la instrucción @code{\override} es
 
-@c  leave this long line -gp
 @example
-\set @var{contexto}.@var{NombreDelGrob}  =
-  #(cons (cons '@var{propiedad} @var{valor})
-         <valor anterior de @var{contexto}.@var{NombreDelGrob}>)
+\override [@var{contexto}.]@var{NombreDelGrob}.@var{propiedad} = #@var{valor}
 @end example
 
-El valor de @code{contexto}.@code{NombreDelGrob} (la lista-A) se
-utiliza para inicializar las propiedades de los grobs individuales.
-Los grobs tienen propiedades, denominadas en el estilo de Scheme, con
-@code{palabras-con-guiones}.  Los valores de las propiedades de grob
-cambian durante el proceso de formateo: éste se realiza básicamente
-calculando las propiedades utilizando funciones de @q{callback}
-(pasadas como parámetro).
-
 Por ejemplo, podemos aumentar el grosor de la plica de una figura
 sobreescribiendo la propiedad @code{thickness} (grosor) del objeto
 @code{Stem} (plica):
 
 @lilypond[quote,verbatim,relative=2]
 c4 c
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 c4 c
 @end lilypond
 
@@ -1953,11 +2104,11 @@ Si no se ha especificado ningún contexto en la instrucción
 @code{\override}, se utiliza el contexto del nivel inferior:
 
 @lilypond[quote,verbatim,relative=2]
-{ \override Staff.Stem #'thickness = #3.0
+{ \override Staff.Stem.thickness = #3.0
   <<
     {
       e4 e
-      \override Stem #'thickness = #0.5
+      \override Stem.thickness = #0.5
       e4 e
     } \\ {
       c4 c c c
@@ -1966,18 +2117,42 @@ Si no se ha especificado ningún contexto en la instrucción
 }
 @end lilypond
 
+Algunas opciones susceptibles de trucaje, se llaman
+@q{subpropiedades} y residen dentro de las propiedades.  Para
+efectura trujajes sobre ellas, utilice instrucciones de la forma
+
+@example
+\override Stem.details.beamed-lengths = #'(4 4 3)
+@end example
+
+o para modificar los extremos de los objetos extensos, utilice una
+forma como las siguientes:
+
+@example
+\override TextSpanner.bound-details.left.text = #"left text"
+\override TextSpanner.bound-details.right.text = #"right text"
+@end example
+
 @funindex \revert
 @cindex reversión de sobreescrituras
 @cindex sobreescrituras, reversión de
 
 El efecto de una instrucción de sobreescritura @code{\override} se
-puede deshacer con @code{\revert}:
+puede deshacer con @code{\revert}.
+
+La sintaxis de la instrucción @code{\revert} es
+
+@example
+\revert [@var{Contexto}.]@var{NombreDelGrob}.@var{propiedad}
+@end example
+
+Por ejemplo,
 
 @lilypond[quote,verbatim,relative=2]
 c4
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 c4 c
-\revert Voice.Stem #'thickness
+\revert Voice.Stem.thickness
 c4
 @end lilypond
 
@@ -1990,11 +2165,11 @@ adelante:
   <<
     {
       e4
-      \override Staff.Stem #'thickness = #3.0
+      \override Staff.Stem.thickness = #3.0
       e4 e e
     } \\ {
       c4 c c
-      \revert Staff.Stem #'thickness
+      \revert Staff.Stem.thickness
       c4
     }
   >>
@@ -2011,11 +2186,11 @@ al instante de tiempo actual:
 {
   <<
     {
-      \override Stem #'thickness = #3.0
+      \override Stem.thickness = #3.0
       e4 e e e
     } \\ {
       c4
-      \once \override Stem #'thickness = #3.0
+      \once \override Stem.thickness = #3.0
       c4 c c
     }
   >>
@@ -2028,7 +2203,7 @@ Las instrucciones que modifican la salida tienen por lo general un
 aspecto como
 
 @example
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 @end example
 
 @noindent
@@ -2041,14 +2216,6 @@ Para construir este truco debemos determinar los siguientes datos:
 @item un valor adecuado: aquí @code{3.0}.
 @end itemize
 
-Ciertas opciones ajustables se denominan @q{subpropiedades} y residen
-en el interior de las propiedades normales.  Para modificarlas utilice
-instrucciones de la forma
-
-@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
-@end example
-
 @cindex documentación interna
 @cindex buscar objetos gráficos
 @cindex gráficos, descripción de los objetos
@@ -2087,7 +2254,7 @@ a todos los grobs del contexto afectado.  Esto se consigue con la
 instrucción @code{\tweak}, que tiene la sintaxis siguiente:
 
 @example
-\tweak @var{objeto-de-presentación} #'@var{propiedad-del-grob} @var{valor}
+\tweak [@var{objeto-de-presentación}.]@var{propiedad-del-grob} @var{valor}
 @end example
 
 Es opcional especificar el @var{objeto-de-presentación}.  La
@@ -2102,19 +2269,19 @@ por ejemplo
 
 @lilypond[relative=2,verbatim,quote]
 < c
-  \tweak #'color #red
+  \tweak color #red
   d
   g
-  \tweak #'duration-log #1
+  \tweak duration-log #1
   a
 > 4
--\tweak #'padding #8
+-\tweak padding #8
 -^
 @end lilypond
 
 
 
-Pero el uso principal de la instrucción @code{\tweak} es modificar
+El uso principal de la instrucción @code{\tweak} es modificar
 solamente uno de varios elementos de notación que dan comienzo en el
 mismo momento musical, como las notas de un acorde, o corchetes de
 tresillo que empiezan al mismo tiempo.
@@ -2137,14 +2304,14 @@ posibilidad de modificarla.
 Así, esto funciona:
 
 @lilypond[relative=2,verbatim,quote]
-<\tweak #'color #red c>4
+<\tweak color #red c>4
 @end lilypond
 
 @noindent
 pero esto no funciona:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
+\tweak color #red c4
 @end lilypond
 
 @end ignore
@@ -2175,10 +2342,10 @@ dentro del mismo acorde:
 
 @lilypond[relative=2,verbatim,quote]
 < c
-  \tweak #'color #red
+  \tweak color #red
   d
   g
-  \tweak #'duration-log #1
+  \tweak duration-log #1
   a
 > 4
 @end lilypond
@@ -2186,7 +2353,7 @@ dentro del mismo acorde:
 @code{\tweak} se puede usar para modificar ligaduras de expresión:
 
 @lilypond[verbatim,quote,relative=1]
-c-\tweak #'thickness #5 ( d e f)
+c-\tweak thickness #5 ( d e f)
 @end lilypond
 
 
@@ -2198,9 +2365,9 @@ como un contenedor, y todos los objetos de presentación se crean a
 partir de eventos dentro del @code{EventChord}:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
-\tweak #'color #red <c e>4
-<\tweak #'color #red c e>4
+\tweak color #red c4
+\tweak color #red <c e>4
+<\tweak color #red c e>4
 @end lilypond
 
 La instrucción @code{\tweak} sencilla no se puede usar para modificar
@@ -2211,13 +2378,14 @@ parte de objetos de presentación @code{NoteHead}
 más que por elementos musicales del
 flujo de entrada.
 
-Tales objetos de presencaión creados indirectamente se pueden trucar
-usando la forma explícita de la instrucción @code{\tweak}:
+Tales objetos de presentación creados indirectamente se pueden trucar
+usando la forma de la instrucción @code{\tweak} en que el nombre
+del grob se especifica de forma explícita:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak Stem #'color #red
-\tweak Beam #'color #green c8 e
-<c e \tweak Accidental #'font-size #-3 ges>4
+\tweak Stem.color #red
+\tweak Beam.color #green c8 e
+<c e \tweak Accidental.font-size #-3 ges>4
 @end lilypond
 
 No se puede usar @code{\tweak} para modificar las claves o las
@@ -2231,10 +2399,10 @@ elemento de notación; todos le afectan:
 
 @lilypond[verbatim,quote,relative=1]
 c
--\tweak #'style #'dashed-line
--\tweak #'dash-fraction #0.2
--\tweak #'thickness #3
--\tweak #'color #red
+-\tweak style #'dashed-line
+-\tweak dash-fraction #0.2
+-\tweak thickness #3
+-\tweak color #red
  \glissando
 f'
 @end lilypond
@@ -2267,20 +2435,66 @@ entrada.
 @subsection @code{\set} frente a @code{\override}
 @translationof set versus override
 
-@c HACER: probablemente esta sección es innecesaria.
-
-@ignore
-We have seen two methods of changing properties: @code{\set} and
-@code{\override}.  There are actually two different kinds of
-properties.
-
-@code{fontSize} is a special property: it is equivalent to
-entering @code{\override ... #'font-size} for all pertinent
-objects.  Since this is a common change, the special
-property (modified with @code{\set}) was created.
-
-@end ignore
+@c TODO Should't a bunch of that be explained earlier?
 
+@funindex \set
+@funindex \override
+Tanto @code{\set} como @code{\override} manipulan propiedades
+asociadas a contextos.  En ambos casos las propiedades tienen en
+cuenta la jerarquía de contextos: las propiedades no establecidas en
+el propio contexto presentan los valores del contexto padre
+respectivo.
+
+El valor y la duración en el tiempo de las propiedades de contexto son
+dinámicos y están disponibles solamente cuando la música se está
+interpretando o @q{iterando}.  En el momento de la creación del
+contexto, se inicializan las propiedades a partir de la definición de
+contexto correspondiente y las posibles modificaciones de contexto.
+Después de esto, cualquier cambio se obtiene a través de instrucciones
+de establecimiento de propiedades dentro de la propia música.
+
+Ahora bien, las definiciones de grob (objetos gráficos) son una clase
+especial de propiedades de contexto.  Dado que su estructura,
+mantenimiento y utilización es distinta de las propiedades de contexto
+ordinarias, se accede a ellas con un conjunto de instrucciones
+diferente, y se estudian por separado dentro de la documentación.
+
+A diferencia de las propiedades de contexto normales, las definiciones
+de grob están subdivididas en propiedades de grob.  Un @qq{grob}
+(objeto gráfico) se crea normalmente por parte de un grabador en el
+momento de la interpretación de una expresión musical y recibe sus
+propiedades iniciales de la definición de grob en curso del contexto
+del grabador.  El grabador (u otras partes del @q{backend} de
+LilyPond) pueden después añadir o modificar propiedades del grob, pero
+ello no afecta a la definición de grob del contexto.
+
+Lo que conocemos como @q{propiedades de grob} en el contexto del
+trucaje a nivel de usuario son en realidad las propiedades de la
+definición de grob de un contexto.  A diferencia de las propiedades de
+contexto normales, las definiciones de grob mantienen la contabilidad
+necesaria para seguir la pista de sus partes, las propiedades de grob
+individuales (e incluso subpropiedades de éstos), de forma separada,
+de forma que es posible definir dichas partes dentro de contextos
+diferentes y hacer que la definición de grob en su conjunto, en el
+momento de la creación del grob, se monte a partir de las piezas
+proporcionadas en diferentes contextos entre el contexto actual y sus
+contextos padre.
+
+Las definiciones de grob se manipulan usando @code{\override} y
+@code{\revert} y tienen un nombre que empieza con una letra mayúscula
+(como @samp{NoteHead}) mientras que las propiedades de contexto
+ordinarias se manipulan utilizando @code{\set} y @code{\unset} y se
+nombran empezando en letra minúscula.
+
+@cindex tweak, relación con @code{\override}
+@funindex \tweak
+@funindex \overrideProperty
+Las instrucciones especiales @code{\tweak} y @code{\overrideProperty}
+cambian las propiedades de grob pasando por encima de las propiedades
+de contexto completamente.  En su lugar, atrapan a los grobs tan
+pronto se crean, y después establecen propiedades sobre ellos
+directamente cuando se originan a partir de un evento musical trucado
+o son de un tipo en particular, respectivamente.
 
 @node Modificación de las listas-A
 @subsection Modificación de las listas-A
@@ -2336,7 +2550,7 @@ anidada}:
 % reduced space between staves
 \new PianoStaff \with {
   % this is the nested declaration
-  \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
+  \override StaffGrouper.staff-staff-spacing.basic-distance = #7
 } <<
   \new Staff { \clef treble c''1 }
   \new Staff { \clef bass   c1   }
@@ -2358,7 +2572,7 @@ propiedad con una sola declaración, como una lista-A:
 
 @lilypond[quote,verbatim]
 \new PianoStaff \with {
-  \override StaffGrouper #'staff-staff-spacing =
+  \override StaffGrouper.staff-staff-spacing =
     #'((basic-distance . 0)
        (minimum-distance . 0)
        (padding . 0)
@@ -2378,10 +2592,10 @@ de @code{basic-distance} si no se fija).  Así, las dos declaraciones
 siguientes son equivalentes:
 
 @example
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
   #'((basic-distance . 7))
 
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
   #'((basic-distance . 7)
      (minimum-distance . 0)
      (padding . 0)
@@ -2463,11 +2677,12 @@ Se activa con la instrucción @code{\figuremode} y hace que el código
 de entrada se interprete con la sintaxis del bajo cifrado, véase
 @ref{Introducir el bajo cifrado}.
 
-El modo de cifrase también se activa con la instrucción
-@code{\figures}.  También crea un contexto de @code{FiguredBass} nuevo
-y hace que el código que viene a continuación se interprete con la
-sintaxis del bajo cifrado y se imprima como símbolos de bajo cifrado
-dentro del contexto @code{FiguredBass}, véase @ref{Introducción al bajo cifrado}.
+El modo de cifras también se activa con la instrucción
+@code{\figures}.  También crea un contexto de @code{FiguredBass}
+nuevo y hace que el código que viene a continuación se interprete
+con la sintaxis del bajo cifrado y se imprima como símbolos de
+bajo cifrado dentro del contexto @code{FiguredBass}, véase
+@ref{Introducción al bajo cifrado}.
 
 @strong{Modos de traste y tablatura}
 
@@ -2542,7 +2757,14 @@ o centrado; etc.  La mayoría de estas elecciones pueden dejarse que
 LilyPond las determine automáticamente, pero en ciertos casos puede
 ser deseable forzar una dirección o colocación concreta.
 
-@strong{Acciones predeterminadas}
+@menu
+* Indicadores de dirección de las articulaciones::
+* La propiedad de dirección::
+@end menu
+
+@node Indicadores de dirección de las articulaciones
+@unnumberedsubsubsec Indicadores de dirección de las articulaciones
+@translationof Articulation direction indicators
 
 De forma predeterminada algunas direcciones siempre son hacia arriba o
 siempre hacia abajo (p. ej. los matices o el calderón), mientras que
@@ -2578,7 +2800,9 @@ c2( c)
 c2^( c)
 @end lilypond
 
-@strong{La propiedad de dirección}
+@node La propiedad de dirección
+@unnumberedsubsubsec La propiedad de dirección
+@translationof The direction property
 
 La posición o dirección de muchos objetos de presentación está
 controlada por la propiedad @code{direction}.
@@ -2718,7 +2942,7 @@ valores de @code{'line-positions}.}
 
 @lilypond[verbatim,quote,relative=1]
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
+  \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
 }
 { a4 e' f b | d1 }
 @end lilypond
@@ -2729,7 +2953,7 @@ resulta afectado por este ajuste.
 
 @lilypond[verbatim,quote,relative=1]
 \new Staff \with {
-  \override StaffSymbol #'width = #23
+  \override StaffSymbol.width = #23
 }
 { a4 e' f b | d1 }
 @end lilypond
@@ -2752,20 +2976,27 @@ Todos los objetos de extensión contemplan el interface
 una línea recta entre los dos objetos, contemplan también el interface
 @code{line-spanner-interface}.
 
+@menu
+* Uso del spanner-interface::
+* Uso del line-spanner-interface::
+@end menu
+
+@node Uso del spanner-interface
 @unnumberedsubsubsec Uso del @code{spanner-interface}
+@translationof Using the spanner-interface
 
 Este interface proporciona dos propiedades que se aplican a varios
 extensores.
 
-@strong{@i{La propiedad @code{minimum-length}}}
+@subsubsubheading La propiedad @code{minimum-length} (longitud mínima)
 
-La longitud mínima del objeto de extensión se especifica a través de
-la propiedad @code{minimum-length}.  Su aumento suele producir el
-efecto necesario de aumentar el espaciado de las notas entre los dos
-puntos extremos.  Sin embargo, esta sobreescritura no tiene ningún
-efecto sobre muchos extensores, pues su longitud está determinada por
-otras consideraciones.  Más abajo se muestran algunos ejemplos de
-dónde es efectiva.
+La longitud mínima del objeto de extensión se especifica a través
+de la propiedad @code{minimum-length}.  Su aumento suele producir
+el efecto necesario de aumentar el espaciado de las notas entre
+los dos puntos extremos.  Sin embargo, esta sobreescritura no
+tiene ningún efecto sobre muchos extensores, pues su longitud está
+determinada por otras consideraciones.  Más abajo se muestran
+algunos ejemplos de dónde es efectiva.
 
 @ignore
 Works for:
@@ -2789,11 +3020,11 @@ Works not at all for:
 @end ignore
 
 @lilypond[verbatim,quote,relative=2]
-a~a
+a~ a
 a
 % increase the length of the tie
--\tweak #'minimum-length #5
-~a
+-\tweak minimum-length #5
+~ a
 @end lilypond
 
 @lilypond[verbatim,quote,relative=2]
@@ -2801,7 +3032,7 @@ a1
 \compressFullBarRests
 R1*23
 % increase the length of the rest bar
-\once \override MultiMeasureRest #'minimum-length = #20
+\once \override MultiMeasureRest.minimum-length = #20
 R1*23
 a1
 @end lilypond
@@ -2809,7 +3040,7 @@ a1
 @lilypond[verbatim,quote,relative=2]
 a \< a a a \!
 % increase the length of the hairpin
-\override Hairpin #'minimum-length = #20
+\override Hairpin.minimum-length = #20
 a \< a a a \!
 @end lilypond
 
@@ -2817,15 +3048,15 @@ Esta sobreescritura se puede usar también para aumentar la longitud de
 las ligaduras de expresión y de fraseo:
 
 @lilypond[verbatim,quote,relative=2]
-a( a)
+a( g)
 a
--\tweak #'minimum-length #5
-( a)
+-\tweak minimum-length #5
+( g)
 
-a\( a\)
+a\( g\)
 a
--\tweak #'minimum-length #5
-\( a\)
+-\tweak minimum-length #5
+\( g\)
 @end lilypond
 
 Para algunos objetos de presentación, la propiedad
@@ -2841,12 +3072,12 @@ propiedad @code{springs-and-rods}:
 e \glissando c'
 
 % not effective alone
-\once \override Glissando #'minimum-length = #20
+\once \override Glissando.minimum-length = #20
 e, \glissando c'
 
 % effective only when both overrides are present
-\once \override Glissando #'minimum-length = #20
-\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Glissando.minimum-length = #20
+\once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
 e, \glissando c'
 @end lilypond
 
@@ -2854,16 +3085,16 @@ Lo mismo se puede decir del objeto @code{Beam}:
 
 @lilypond[verbatim,quote,relative=1]
 % not effective alone
-\once \override Beam #'minimum-length = #20
+\once \override Beam.minimum-length = #20
 e8 e e e
 
 % effective only when both overrides are present
-\once \override Beam #'minimum-length = #20
-\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Beam.minimum-length = #20
+\once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
 e8 e e e
 @end lilypond
 
-@strong{@i{The @code{to-barline} property}}
+@subsubsubheading La propiedad @code{to-barline}
 
 La segunda propiedad útil del @code{spanner-interface} es
 @code{to-barline}.  De forma predeterminada tiene el valor cierto,
@@ -2875,7 +3106,7 @@ exactamente sobre la nota:
 
 @lilypond[verbatim,quote,relative=2]
 a \< a a a a \! a a a \break
-\override Hairpin #'to-barline = ##f
+\override Hairpin.to-barline = ##f
 a \< a a a a \! a a a
 @end lilypond
 
@@ -2884,7 +3115,9 @@ su establecimiento a @code{#t} no tienen ningún efecto sobre las
 ligaduras de expresión o de fraseo, o sobre otros extensores para los
 que terminar en la barra de compás no tendría ningún significado.
 
+@node Uso del line-spanner-interface
 @unnumberedsubsubsec Uso del @code{line-spanner-interface}
+@translationof Using the line-spanner-interface
 
 Entre los objetos que contemplan el interface
 @code{line-spanner-interface} se encuentran
@@ -2909,8 +3142,8 @@ jerarquía de propiedades, pero la sintaxis de la instrucción
 
 @lilypond[relative=2,quote,verbatim]
 e2 \glissando b
-\once \override Glissando #'(bound-details left Y) = #3
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.left.Y = #3
+\once \override Glissando.bound-details.right.Y = #-2
 e2 \glissando b
 @end lilypond
 
@@ -2928,8 +3161,8 @@ especifican por las sub-listas @code{left-broken} y
 @code{right-broken} de @code{bound-details}.  Por ejemplo:
 
 @lilypond[relative=2,ragged-right,verbatim,quote]
-\override Glissando #'breakable = ##t
-\override Glissando #'(bound-details right-broken Y) = #-3
+\override Glissando.breakable = ##t
+\override Glissando.bound-details.right-broken.Y = #-3
 c1 \glissando \break
 f1
 @end lilypond
@@ -2969,7 +3202,7 @@ usa para escribir @i{cresc.}, @i{tr} y otros textos sobre los objetos
 de extensión horizontales.
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
    = \markup { \small \bold Slower }
 c2\startTextSpan b c a\stopTextSpan
 @end lilypond
@@ -2983,15 +3216,11 @@ subpropiedades @code{X} e @code{Y}.  Si se fijan
 símbolo del borde verticalmente con relación al extremo de la línea:
 
 @lilypond[relative=1,quote,verbatim]
-\override TextSpanner
-  #'(bound-details left stencil-align-dir-y) = #-2
-\override TextSpanner
-  #'(bound-details right stencil-align-dir-y) = #UP
-
-\override TextSpanner
-  #'(bound-details left text) = #"ggg"
-\override TextSpanner
-  #'(bound-details right text) = #"hhh"
+\override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
+\override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
+
+\override TextSpanner.bound-details.left.text = #"ggg"
+\override TextSpanner.bound-details.right.text = #"hhh"
 c4^\startTextSpan c c c \stopTextSpan
 @end lilypond
 
@@ -3071,6 +3300,7 @@ objetos de presentación.  Se estudian bajo Consideraciones especiales.
 @translationof Removing the stencil
 
 @cindex sello, eliminar
+@funindex \omit
 
 Todo objeto de presentación tiene una propiedad stencil (sello).  De
 forma predeterminada está establecida a la función específica que
@@ -3080,9 +3310,20 @@ predeterminada se puede recuperar con @code{\revert}.
 
 @lilypond[quote,verbatim,relative=1]
 a1 a
-\override Score.BarLine #'stencil = ##f
+\override Score.BarLine.stencil = ##f
+a a
+\revert Score.BarLine.stencil
+a a a
+@end lilypond
+
+Esta operación, bastante común, tiene la forma abreviada @code{\omit}
+como atajo:
+
+@lilypond[quote,verbatim,relative=1]
+a1 a
+\omit Score.BarLine
 a a
-\revert Score.BarLine #'stencil
+\undo \omit Score.BarLine
 a a a
 @end lilypond
 
@@ -3092,6 +3333,7 @@ a a a
 @translationof Making objects transparent
 
 @cindex transparentes, hacer los objetos
+@funindex \hide
 
 Todo objeto de presentación tiene una propiedad transparent
 (transparente) que de forma predeterminada está establecida a
@@ -3100,7 +3342,16 @@ invisible.
 
 @lilypond[quote,verbatim,relative=2]
 a4 a
-\once \override NoteHead #'transparent = ##t
+\once \override NoteHead.transparent = ##t
+a a
+@end lilypond
+
+Esta operación, bastante común, tiene la forma abreviada @code{\hide}
+como atajo:
+
+@lilypond[quote,verbatim,relative=2]
+a4 a
+\once \hide NoteHead
 a a
 @end lilypond
 
@@ -3126,7 +3377,7 @@ dibujan estos objetos, lo que puede dejar una imagen fantasma del
 objeto blanco, como puede verse aquí:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
+\override Staff.Clef.color = #white
 a1
 @end lilypond
 
@@ -3151,8 +3402,8 @@ sobreimpresionándolas.  Para cambiarlo, se debe dar al objeto
 para que se dibuje antes:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
-\override Staff.Clef #'layer = #-1
+\override Staff.Clef.color = #white
+\override Staff.Clef.layer = #-1
 a1
 @end lilypond
 
@@ -3232,12 +3483,11 @@ de presentación de interés que resultan afectados por
 @item @code{Clef}                @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @item @code{Custos}              @tab @code{Staff}          @tab @code{end-of-line-visible}
 @item @code{DoublePercentRepeat} @tab @code{Voice}          @tab @code{begin-of-line-invisible}
-@c omit KeyCancellation until it can be explained -td
-@c @item @code{KeyCancellation}  @tab ??             @tab @code{begin-of-line-invisible}
+@item @code{KeyCancellation}     @tab @code{Staff}          @tab @code{begin-of-line-invisible}
 @item @code{KeySignature}        @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @c omit LeftEdge until it can be explained -td
 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
-@item @code{OctavateEight}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
+@item @code{ClefModifier}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @item @code{RehearsalMark}       @tab @code{Score}          @tab @code{end-of-line-invisible}
 @item @code{TimeSignature}       @tab @code{Staff}          @tab @code{all-visible}
 
@@ -3250,7 +3500,7 @@ controlar la visibilidad de las líneas divisorias:
 f4 g a b
 f4 g a b
 % Remove bar line at the end of the current line
-\once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
+\once \override Score.BarLine.break-visibility = ##(#f #t #t)
 \break
 f4 g a b
 f4 g a b
@@ -3270,7 +3520,7 @@ línea a no ser que su valor establecido sea distinto de 1.
 se suprimen por completo.  Utilice begin-of line-invisible para
 imprimirlas y all-invisible para suprimirlas.
 @item Armadura: véase más abajo
-@item OctavateEight: véase más abajo
+@item ClefModifier: véase más abajo
 @end itemize
 
 
@@ -3278,7 +3528,7 @@ imprimirlas y all-invisible para suprimirlas.
 @unnumberedsubsubsec Consideraciones especiales
 @translationof Special considerations
 
-@strong{@emph{Visibilidad después de un cambio explícito}}
+@subsubsubheading Visibilidad después de un cambio explícito
 
 @cindex armadura, visibilidad después de un cambio explícito
 @cindex explicitKeySignatureVisibility
@@ -3297,7 +3547,7 @@ bemol mayor es visible incluso con @code{all-invisible} establecido.
 \key g \major
 f4 g a b
 % Try to remove all key signatures
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b
 \break
@@ -3325,16 +3575,16 @@ objeto correspondiente.
 \key g \major
 f4 g a b
 \set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b \break
 f4 g a b
 f4 g a b
 @end lilypond
 
-@strong{@emph{Visibilidad de las alteraciones de precaución}}
+@subsubsubheading Visibilidad de las alteraciones de precaución
 
-Para eliminar las alteraciones de precaución que se imprimen en un
+Para eliminar las alteraciones de cancelación que se imprimen en un
 cambio de tonalidad explícito, establezca la propiedad
 @code{printKeyCancellation} del contexto Staff a @code{#f}:
 
@@ -3343,7 +3593,7 @@ cambio de tonalidad explícito, establezca la propiedad
 f4 g a b
 \set Staff.explicitKeySignatureVisibility = #all-invisible
 \set Staff.printKeyCancellation = ##f
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b \break
 f4 g a b
@@ -3353,9 +3603,41 @@ f4 g a b
 Con estas sobreescrituras solamente permanecen las alteraciones
 accidentales delante de las notas para indicar el cambio de tonalidad.
 
+Observe que al modificar la tonalidad a Do@tie{}mayor o
+La@tie{}menor, las alteraciones de cancelación serían @emph{la
+única} indicación del cambio de armadura.  En este caso, el
+establecimiento de @code{printKeyCancellation} al valor @code{#f}
+no tiene ningún efecto:
+
+@lilypond[quote,verbatim,relative=1,ragged-right]
+\key g \major
+f4 g a b
+\set Staff.explicitKeySignatureVisibility = #all-invisible
+\set Staff.printKeyCancellation = ##f
+\key c \major
+f4 g a b \break
+f4 g a b
+f4 g a b
+@end lilypond
+
+En lugar de ello, para suprimir las alteraciones de cancelación
+aún cuando la armadura cambia a Do@tie{}mayor o a La@tie{}menor,
+sobreescriba la visibilidad del grob @code{KeyCancellation}:
+
+@lilypond[quote,verbatim,relative=1,ragged-right]
+\key g \major
+f4 g a b
+\set Staff.explicitKeySignatureVisibility = #all-invisible
+\override Staff.KeyCancellation.break-visibility = #all-invisible
+\key c \major
+f4 g a b \break
+f4 g a b
+f4 g a b
+@end lilypond
+
 @c TODO Add visibility of cautionary accidentals before notes
 
-@strong{@emph{Automatic bars}}
+@subsubsubheading Líneas divisorias automáticas
 
 @cindex automaticBars
 @cindex líneas divisorias, eliminación
@@ -3373,23 +3655,23 @@ explícitas.
 
 @c TODO Add example
 
-@strong{@emph{Octavated clefs}}
+@subsubsubheading Claves transportadas
 
-@cindex octavadas, visibilidad de las claves
-@cindex visibilidad de las claves octavadas
-@cindex claves, visibilidad de la octavación
+@cindex transportadas, visibilidad de las claves
+@cindex visibilidad de las claves transportadas
+@cindex claves, visibilidad de la transposición
 
-El pequeño símbolo de octava sobre las claves en octava alta o baja se
-produce por parte del objeto @code{OctavateEight}.  Su visibilidad se
-hereda automáticamente de la del objeto @code{Clef}, así que no es
+El pequeño símbolo de transposición sobre una clave se produce por
+parte del objeto @code{ClefModifier}.  Su visibilidad se hereda
+automáticamente de la del objeto @code{Clef}, así que no es
 necesario aplicar las sobreescrituras correspondientes
-@code{break-visibility} a los objetos
-@code{OctavateEight} para suprimir los símbolos de octavación
-para las claves invisibles.
+@code{break-visibility} a los objetos @code{ClefModifier} para
+suprimir los símbolos de transposición u octavación para las
+claves invisibles.
 
 Para los cambios de clave explícitos, la propiedad
-@code{explicitClefVisibility} controla tanto el símbolo de clave como
-el símbolo de octava asociado.
+@code{explicitClefVisibility} controla tanto el símbolo de clave
+como el símbolo de transposición o de octava asociado.
 
 @seealso
 Manual de aprendizaje:
@@ -3417,13 +3699,13 @@ cómo aplicarles ajustes finos.
 
 @lilypond[relative=2,ragged-right,verbatim,quote]
 d2 \glissando d'2
-\once \override Glissando #'style = #'dashed-line
+\once \override Glissando.style = #'dashed-line
 d,2 \glissando d'2
-\override Glissando #'style = #'dotted-line
+\override Glissando.style = #'dotted-line
 d,2 \glissando d'2
-\override Glissando #'style = #'zigzag
+\override Glissando.style = #'zigzag
 d,2 \glissando d'2
-\override Glissando #'style = #'trill
+\override Glissando.style = #'trill
 d,2 \glissando d'2
 @end lilypond
 
@@ -3434,7 +3716,7 @@ posible sobreescribirlos:
 @c TODO Complete
 @lilypond[relative=2,ragged-right,verbatim,quote]
 e2 \glissando f
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.right.Y = #-2
 e2 \glissando f
 @end lilypond
 
@@ -3490,7 +3772,7 @@ serlo:
 
 @lilypond[quote,verbatim,relative=1]
 g4\< e' d' f\!
-\override Hairpin #'rotation = #'(20 -1 0)
+\override Hairpin.rotation = #'(20 -1 0)
 g,,4\< e' d' f\!
 @end lilypond
 
@@ -3510,7 +3792,7 @@ propiedad @code{outside-staff-priority} del texto se establece a
 que empuja al texto a una posición muy alta.
 
 @lilypond[quote,verbatim,relative=1]
-\override TextScript #'outside-staff-priority = ##f
+\override TextScript.outside-staff-priority = ##f
 g4^\markup { \rotate #30 "a G" }
 b^\markup { \rotate #30 "a B" }
 des^\markup { \rotate #30 "a D-Flat" }
@@ -3530,6 +3812,7 @@ ajustes finos a la apariencia de la partitura impresa.
 * Agrupación vertical de objetos gráficos::
 * Modificación de los sellos::
 * Modificación de las formas::
+* Modificación de objetos de extensión divididos::
 * Contenedores unpure-pure::
 @end menu
 
@@ -3630,12 +3913,12 @@ valores @code{X-offset} y @code{Y-offset} modificados.
 @lilypond[verbatim,quote,relative=2]
 a-3
 a
--\tweak #'X-offset #0
--\tweak #'Y-offset #0
+-\tweak X-offset #0
+-\tweak Y-offset #0
 -3
 a
--\tweak #'X-offset #-1
--\tweak #'Y-offset #1
+-\tweak X-offset #-1
+-\tweak Y-offset #1
 -3
 @end lilypond
 
@@ -3689,7 +3972,7 @@ situar el objeto encima o debajo del padre de acuerdo con el valor de
 @unnumberedsubsubsec Uso del @code{self-alignment-interface}
 @translationof Using the self-alignment-interface
 
-@emph{Auto-alineación horizontal de los objetos}
+@subsubsubheading Auto-alineación horizontal de los objetos
 
 La alineación horizontal de un objeto que contempla el interface
 @code{self-alignment-interface} está controlada por el valor de la
@@ -3714,17 +3997,17 @@ sola nota:
 
 @lilypond[quote,verbatim,relative=1]
 a'
--\tweak #'self-alignment-X #-1
+-\tweak self-alignment-X #-1
 ^"left-aligned"
--\tweak #'self-alignment-X #0
+-\tweak self-alignment-X #0
 ^"center-aligned"
--\tweak #'self-alignment-X #RIGHT
+-\tweak self-alignment-X #RIGHT
 ^"right-aligned"
--\tweak #'self-alignment-X #-2.5
+-\tweak self-alignment-X #-2.5
 ^"aligned further to the right"
 @end lilypond
 
-@emph{Auto-alineación vertical de los objetos}
+@subsubsubheading Auto-alineación vertical de los objetos
 
 Los objetos se pueden alinear verticalmente en una forma análoga a la
 alineación horizontal si la propiedad @code{Y-offset} está establecida
@@ -3753,9 +4036,9 @@ se acerque a la cabeza de la nota.
 
 @lilypond[quote,verbatim,relative=2]
 a
--\tweak #'self-alignment-X #0.5  % move horizontally left
--\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
--\tweak #'self-alignment-Y #-1  % move vertically up
+-\tweak self-alignment-X #0.5  % move horizontally left
+-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
+-\tweak self-alignment-Y #-1  % move vertically up
 -3  % third finger
 @end lilypond
 
@@ -3802,25 +4085,25 @@ distintos a las barras de compás.  Estos objetos son @code{ambitus},
 @code{left-edge}, @code{key-cancellation}, @code{key-signature} y
 @code{time-signature}.
 
-De forma predeterminada, las letras de ensayo y los números de compás
-se centran horizontalmente sobre el objeto:
+Cada tipo de objeto tiene su propio punto de referencia
+predeterminado, con el que se alinean las marcas de ensayo:
 
 @lilypond[verbatim,quote,relative=1]
-% The rehearsal mark will be centered above the Clef
-\override Score.RehearsalMark #'break-align-symbols = #'(clef)
+% The rehearsal mark will be aligned to the right edge of the Clef
+\override Score.RehearsalMark.break-align-symbols = #'(clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
-% The rehearsal mark will be centered above the Time Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
+% The rehearsal mark will be aligned to the left edge of the Time Signature
+\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
 \key a \major
 \clef treble
 \time 3/4
 \mark "↓"
 e2.
 % The rehearsal mark will be centered above the Breath Mark
-\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
+\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
 \key a \major
 \clef treble
 \time 4/4
@@ -3839,15 +4122,15 @@ divisoria.  Si la línea divisoria es invisible, el objeto se alinea
 con el punto en el que se encontraría la línea divisoria.
 
 @lilypond[verbatim,quote,relative=1]
-% The rehearsal mark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+% The rehearsal mark will be aligned to the right edge of the Key Signature
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
-% The rehearsal mark will be centered above the Clef
+% The rehearsal mark will be aligned to the right edge of the Clef
 \set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef bass
 \mark "↓"
@@ -3855,7 +4138,7 @@ gis,,1
 % The rehearsal mark will be centered above the Bar Line
 \set Staff.explicitKeySignatureVisibility = #all-invisible
 \set Staff.explicitClefVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef treble
 \mark "↓"
@@ -3868,20 +4151,20 @@ partitura con varios pentagramas, este ajuste se debe hacer para todos
 los pentagramas.
 
 @lilypond[verbatim,quote,relative=1]
-% The RehearsalMark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+% The RehearsalMark will be aligned with the right edge of the Key Signature
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
 \key a \major
 \clef treble
 \time 4/4
 \mark "↓"
 e1
-% The RehearsalMark will be aligned with the left edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
+% The RehearsalMark will be centered above the Key Signature
+\once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
 \mark "↓"
 \key a \major
 e1
-% The RehearsalMark will be aligned with the right edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
+% The RehearsalMark will be aligned with the left edge of the Key Signature
+\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
 \key a \major
 \mark "↓"
 e1
@@ -3894,14 +4177,14 @@ pentagrama:
 @lilypond[verbatim,quote,relative=1]
 % The RehearsalMark will be aligned with the left edge of the Key Signature
 % and then shifted right by 3.5 staff-spaces
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
-\once \override Score.KeySignature #'break-align-anchor = #3.5
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
+\once \override Score.KeySignature.break-align-anchor = #3.5
 \key a \major
 \mark "↓"
 e1
 % The RehearsalMark will be aligned with the left edge of the Key Signature
 % and then shifted left by 2 staff-spaces
-\once \override Score.KeySignature #'break-align-anchor = #-2
+\once \override Score.KeySignature.break-align-anchor = #-2
 \key a \major
 \mark "↓"
 e1
@@ -3954,8 +4237,8 @@ la nota a unas aspas dentro de una circunferencia.
 
 @lilypond[verbatim,quote]
 XinO = {
-  \once \override NoteHead  #'stencil = #ly:text-interface::print
-  \once \override NoteHead #'text = \markup {
+  \once \override NoteHead.stencil = #ly:text-interface::print
+  \once \override NoteHead.text = \markup {
     \combine
       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
       \musicglyph #"noteheads.s2cross"
@@ -3999,27 +4282,55 @@ Referencia de la notación:
 @cindex Bézier, curvas de, puntos de control
 @cindex puntos de control en curvas de Bézier
 
-Las ligaduras de unión, de expresión y de fraseo se trazan como curvas
-de Bézier de tercer orden.  Si la forma de la ligadura calculada
-automáticamente no resulta óptima, se puede modificar su forma
-manualmente mediante la especificación explícita de los cuatro puntos
-de control necesarios para definir una curva de Bézier de tercer
-orden.
-
-Las curvas Bézier de tercer orden o cúbicas están definidas por cuatro
-puntos de control.  El primer y cuarto puntos de control son
-exactamente los puntos extremos de comienzo y de final de la curva.
-Los dos puntos de control intermedios definen la forma.  Se pueden
-encontrar en la web animaciones que muestran cómo se traza la curva,
-pero la descripción siguiente puede ser de ayuda.  La curva comienza a
-partir del primer punto de control dirigiéndose directamente hacia el
-segundo, curvándose progresivamente para dirigirse hacia el tercero y
-continuando la curva hacia el cuarto, llegando a éste en viaje directo
-desde el tercer punto de control.  La curva está contenida enteramente
+Las ligaduras de unión (@code{Tie}s), de expresión (@code{Slur}s),
+de fraseo (@code{PhrasingSlur}s), de dejar vibrar
+(@code{LaissezVibrerTie}s) y de repetición (@code{RepeatTie}s) se
+trazan como curvas de Bézier de tercer orden.  Si la forma de la
+ligadura calculada automáticamente no resulta óptima, se puede
+modificar su forma manualmente de dos formas:
+
+@enumerate a
+@item
+mediante la especificación de los desplazamientos que se quieren
+realizar sobre los puntos de control de la curva de Bézier
+calculada automáticamente, o bien
+
+@item
+mediante la especificación explícita de las posiciones de los
+cuatro puntos de control que se requieren para definir la curva
+deseada.
+@end enumerate
+
+A continuación se explican ambos métodos.  El primer método es más
+adecuado cuando solo se requieren ligeros ajustes de la curva; el
+segundo puede ser mejor para crear curvas que tienen relación con
+una única nota.
+
+@subsubsubheading Curvas de Bézier cúbicas
+
+Las curvas Bézier de tercer orden o cúbicas están definidas por
+cuatro puntos de control.  El primer y cuarto puntos de control
+son exactamente los puntos extremos de comienzo y de final de la
+curva.  Los dos puntos de control intermedios definen la forma.
+Se pueden encontrar en la web animaciones que muestran cómo se
+traza la curva, pero la descripción siguiente puede ser de ayuda.
+La curva comienza a partir del primer punto de control
+dirigiéndose directamente hacia el segundo, curvándose
+progresivamente para dirigirse hacia el tercero y continuando la
+curva hacia el cuarto, llegando a éste en viaje directo desde el
+tercer punto de control.  La curva está contenida enteramente
 dentro del cuadrilátero definido por los cuatro puntos de control.
+Todas las traslaciones, rotaciones y escalado de los puntos de
+control producen exactamente las mismas operaciones sobre la
+curva.
 
-He aquí un ejemplo de un caso en que la ligadura no es óptima, y donde
-@code{\tieDown} no sirve de ayuda.
+@subsubsubheading Especificar desplazamientos a partir de los puntos de control actuales
+
+@cindex conformar ligaduras
+@funindex \shape
+
+En este ejemplo, la colocación automática de la ligadura no
+resulta óptima, y @code{\tieDown} no es la solución.
 
 @lilypond[verbatim,quote,relative=1]
 <<
@@ -4029,65 +4340,298 @@ He aquí un ejemplo de un caso en que la ligadura no es óptima, y donde
 >>
 @end lilypond
 
-Una forma de mejorar esta ligadura es modificar manualmente sus puntos
-de control como sigue.
-
-Las coordenadas de los puntos de control de Bézier se especifican en
-unidades de espacios de pentagrama.  La coordenada@tie{}X está en
-relación con el punto de referencia de la nota a la que está unida la
-ligadura, y la coordenada@tie{}Y está en relación con la línea central
-del pentagrama.  Las coordenadas se introducen como una lista de
-cuatro parejas de números decimales (reales).  Un enfoque es estimar
-las coordenadas de los dos puntos extremos, y luego tratar de adivinar
-los dos puntos intermedios.  Los valores óptimos se encuentran por
-ensayo y error.
-
-Es útil recordar que una curva simétrica necesita puntos de control
-simétricos, y que las curvas de Bézier tienen la útil propiedad de que
-las transformaciones de la curva tales como la traslación, rotación y
-escalado se pueden obtener aplicando la misma transformación a los
-puntos de control de la curva.
-
-Para el ejemplo anterior, la sobreescritura siguiente da una ligadura
-satisfactoria.  Observe la colocación: debe ir inmediatamente antes de
-la nota a la que se asigna el comienzo de la ligadura de expresión o
-de unión.
+El ajuste de los puntos de control de la ligadura mediante la
+instrucción @code{\shape} permite evitar las colisiones.
+
+La sintaxis de @code{\shape} es:
+
+@example
+[-]@code{\shape} @var{desplazamientos} @var{elemento}
+@end example
+
+Esta instrucción recoloca los puntos de control de @var{elemento}
+en las cantidades dadas por @var{desplazamientos}.  El argumento
+@var{desplazamientos} es una lista de parejas de números o una
+lista de tales listas.  Cada elemento de una pareja representa el
+desplazamiento de una de las coordenadas de un punto de control.
+Si el @var{elemento} es una cadena de caracteres, el resultado es
+@code{\once\override} para el tipo de grob especificado.  Si
+@var{elemento} es una expresión musical, el resultado es la misma
+expresión musical con la consiguiente modificación aplicada.
+
+En otras palabras, la función @code{\shape} puede actuar como una
+instrucción @code{\once\override} o como una instrucción
+@code{\tweak} dependiendo de si el argumento @var{elemento} es el
+nombre de un grob, como @qq{Slur}, o una expresión musical, como
+@qq{(}.  El argumento @var{desplazamientos} especifica los
+desplazamientos de los cuatro puntos de control como una lista de
+cuatro parejas de valores (dx . dy) en unidades de espacios de
+pentagrama (o una lista de tales listas si la curva tiene más de
+un segmento).
+
+El guión precedente se exige si, y sólo si, se usa la forma
+@code{\tweak}.
+
+Así, usando el mismo ejemplo de arriba y la forma
+@code{\once\override} de la instrucción @code{\shape}, lo
+siguiente tiene el efecto de elevar la ligadura de unión en la
+mitad de un espacio de pentagrama:
+
+@lilypond[verbatim,quote,relative=1]
+<<
+  {
+    \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
+    e1~ e
+  }
+\\
+  { r4 <g c,> <g c,> <g c,> }
+>>
+@end lilypond
+
+Este posicionamiento de la ligadura de unión es mejor, pero quizá
+debería elevarse más en la parte central.  El ejemplo siguiente
+hace esto, esta vez usando la forma alternativa @code{\tweak}:
 
 @lilypond[verbatim,quote,relative=1]
 <<
   {
-    \once \override Tie
-      #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
-     e1 ~ e
+    e1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e
   }
 \\
   { r4 <g c,> <g c,> <g c,> }
 >>
 @end lilypond
 
+Los cambios en las posiciones horizontales de los puntos de
+control se pueden hacer de la misma forma, y dos curvas distintas
+que dan comienzo en el mismo momento musical se pueden conformar
+también:
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+c8(\( a) a'4 e c\)
+\shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
+\shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
+c8(\( a) a'4 e c\)
+@end lilypond
+
+La función @code{\shape} también puede desplazar los puntos de
+control de las curvas que se extienden atravesando saltos de
+línea.  Cada pieza de la curva dividida puede recibir su propia
+lista de desplazamientos.  Si no se necesita hacer cambios a uno
+de los segmentos en particular, se puede usar una lista vacía como
+contenedor.  En este ejemplo, el salto de línea hace que la única
+ligadura de expresión aparezca como si fueran dos:
+
+@lilypond[verbatim,quote,ragged-right,relative=1]
+c4( f g c
+\break
+d,4 c' f, c)
+@end lilypond
+
+Los cambios en la forma de las dos mitades de la ligadura de
+expresión deja más claro que la ligadura continúa más allá del
+salto de línea:
+
+@lilypond[verbatim,quote,ragged-right,relative=1]
+% () may be used as a shorthand for ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
+% if any of the segments does not need to be changed
+\shape #'(
+           (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
+           ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
+         ) Slur
+c4( f g c
+\break
+d,4 c' f, c)
+@end lilypond
+
+En una curva en forma de «S» siempre es necesario ajustar
+manualmente los puntos de control: LilyPond nunca escoge tales
+formas automáticamente.
+
+@lilypond[verbatim,quote,relative=2]
+c8( e b-> f d' a e-> g)
+\shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
+c8\( e b-> f d' a e-> g\)
+@end lilypond
+
+@subsubsubheading Especificar los puntos de control explícitamente
+
+Las coordenadas de los puntos de contro de Bézier se especifican
+en unidades de espacios de pentagrama.  La coordenada@tie{}X es
+relativa al punto de referencia al que se adjunta la ligadura, y
+la coordenada@tie{}Y es relativa a la línea central del
+pentagrama.  Las coordenadas se especifican como una lista de
+cuatro parejas de números decimales (reales).  Un enfoque consiste
+en estimar las coordenadas de los dos extremos, y después adivinar
+los dos puntos intermedios.  Los valores óptimos se encuentran
+después por ensayo y error.  Tenga en cuenta que estos valores
+podrían requerir un ajuste manual si se hace posteriormente
+cualquier cambio manual a la música o a la disposición.
+
+Una situación en la que es preferible especificar los puntos de
+control explícitamente a especificar los desplazamientos es cuando
+se necesita especificarlos de forma relativa a una nota única.  A
+continuación presentamos un ejemplo de esto.  Muestra una forma de
+indicar una ligadura que se extiende hacia el interior de las
+casillas de primera y segunda vez de una repetición.
+
+@lilypond[verbatim,quote,relative=2]
+c1
+\repeat volta 3 { c4 d( e f }
+\alternative {
+  { g2) d }
+  {
+    g2
+    % create a slur and move it to a new position
+    % the <> is just an empty chord to carry the slur termination
+    -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
+    f,
+  }
+  {
+    e'2
+    % create a slur and move it to a new position
+    -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
+    f,
+  }
+}
+@end lilypond
+
 @knownissues
 No es posible modificar la forma de las ligaduras de unión o de
-expresión cambiando la propiedad @code{control-points} si hay más de
-una en el mismo momento musical, ni siquiera usando la instrucción
-@code{\tweak}.  Sin embargo, se puede sobreescribir la propiedad
-@code{tie-configuration} de @code{TieColumn} para fijar la línea de
-inicio y la dirección según se requiera.
+expresión cambiando la propiedad @code{control-points} si hay más
+de una en el mismo momento musical, ni siquiera usando la
+instrucción @code{\tweak}.  Sin embargo, se puede sobreescribir la
+propiedad @code{tie-configuration} de @code{TieColumn} para fijar
+la línea de inicio y la dirección según se requiera.
 
 @seealso
 Referencia de funcionamiento interno:
 @rinternals{TieColumn}.
 
-@cindex Scheme, contenedores puros
-@cindex Scheme, contenedores no-puros
-@cindex puros, contenedores de Scheme
-@cindex no-puros: contenedores de Scheme
-@cindex horizontal, sobreescribir el espaciado
+
+@node Modificación de objetos de extensión divididos
+@subsection Modificación de objetos de extensión divididos
+@translationof Modifying broken spanners
+
+@menu
+* Uso de alterBroken::
+@end menu
+
+@node Uso de alterBroken
+@unnumberedsubsubsec Uso de @code{\alterBroken}
+@translationof Using alterBroken
+
+@cindex extensión, modificación de objetos de
+@cindex divididos, modificación de objetos de extensión
+@funindex \alterBroken
+
+Cuando un @qq{spanner} u objeto extenso atraviesa uno o varios saltos
+de línea, cada fragmento hereda los atributos del objeto de extensión
+original.  Así, el trucado ordinario de un objeto dividido aplica las
+mismas modificaciones a todos y cada uno de sus segmentos.  En el
+ejemplo que aparece a continuación, la sobreescritura de
+@code{thickness} (grosor) afecta a la ligadura a ambos lados del salto
+de línea.
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+r2
+\once\override Slur.thickness = 10
+c8( d e f
+\break
+g8 f e d) r2
+@end lilypond
+
+Es posible modificar de forma independiente el aspecto de los
+fragmentos individuales de un objeto de extensión dividido, con la
+instrucción @code{\alterBroken}.  Esta instrucción puede producir un
+@code{\override} o bien un @code{\tweak} de una propiedad del objeto
+de extensión.
+
+La sintaxis de @code{\alterBroken} es
+
+@example
+[-]@code{\alterBroken} @var{propiedad} @var{valores} @var{elemento}
+@end example
+
+El argumento @var{valores} es una lista de valores, uno por cada
+fragmento.  Si @var{elemento} el el nombre de un grob como @code{Slur}
+o @code{Staff.PianoPedalBracket}, el resultado es una instrucción de
+sobreescritura @code{\override} del tipo de grob especificado.  Si
+@var{elemento} es una expresión musical como @qq{(} o @qq{[} el
+resultado es la misma expresión musical con el correspondiente truco
+aplicado.
+
+El guión inicial se debe utilizar con la forma de trucaje,
+@code{\tweak}.  No lo escriba cuando utilice @code{\alterBroken} como
+una operación de sobreescritura, @code{\override}.
+
+En su uso como @code{\override}, @code{\alterBroken} puede ir
+precedido de @code{\once} o @code{\temporary} y ser revertido con
+@code{\revert} con el argumento @var{propiedad}.
+
+EL código siguiente aplica un @code{\override} independiente a cada
+uno de los fragmentos de la ligadura del ejemplo anterior:
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+r2
+\alterBroken thickness #'(10 1) Slur
+c8( d e f
+\break
+g8 f e d) r2
+@end lilypond
+
+La instrucción @code{\alterBroken} se puede usar con cualquier objeto
+de extensión, incluidos @code{Tie}, @code{PhrasingSlur}, @code{Beam} y
+@code{TextSpanner}.  Por ejemplo, un editor que está preparando una
+edición académica podría desear indicar la ausencia de parte de una
+ligadura de fraseo en una fuente haciendo discontinuo solamente el
+segmento que se ha añadido.  El siguiente ejemplo ilustra de qué
+manera se puede hacer esto, en este caso usando la forma @code{\tweak}
+de la instrucción:
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+% The empty list is conveniently used below, because it is the
+% default setting of dash-definition, resulting in a solid curve.
+c2-\alterBroken dash-definition #'(() ((0 1.0 0.4 0.75))) \(e
+\break
+g2 e\)
+@end lilypond
+
+Es importante comprender que @code{\alterBroken} fija cada pieza del
+objeto fragmentado al valor correspondiente dentro del argumento
+@var{valores}.  Cuando hay menos valores que piezas, cualquier
+fragmento adicional recibe la asignación de la lista vacía.  Esto
+puede conllevar resultados no deseados si la propiedad de disposición
+no está establecida a la lista vacía de forma predeterminada.  En
+estos casos, se debe asignar a cada segmento un valor adecuado.
+
+@knownissues
+Los saltos de línea pueden ocurrir en distintos lugares según cambia
+la disposición de la música.  Los ajustes elegidos para
+@code{\alterBroken} podrían no ser adecuados para un objeto de
+extensión que ya no está dividido o que se fragmenta en más piezas que
+antes.  El uso explícito (manual) de saltos de línea mediante
+@code{\break} puede prevenir situaciones como ésta.
+
+La instrucción @code{\alterBroken} no es efectiva para propiedades de
+los objetos extensos accedidas antes del salto de línea, como
+@code{direction}.
+
+@seealso
+Extender LilyPond:
+@rextend{Trucos difíciles}.
 
 
 @node Contenedores unpure-pure
 @subsection Contenedores unpure-pure
 @translationof Unpure-pure containers
 
+@cindex Scheme, contenedores puros
+@cindex Scheme, contenedores no-puros
+@cindex puros, contenedores de Scheme
+@cindex no-puros: contenedores de Scheme
+@cindex horizontal, sobreescribir el espaciado
+
 Los contenedores @q{unpure-pure} (pura y no pura) son útiles para la
 sobreescritura de los cálculos del espaciado en el @emph{eje Y}
 (concretamente @code{Y-offset} e @code{Y-extent}) con una función de
@@ -4153,12 +4697,12 @@ precisión mucho más tardío durante el proceso de espaciado.
                               '(-0.5 . 0.5)))))
 
 squareLineCircleSpace = {
-  \override NoteHead #'stencil = #square-line-circle-space
+  \override NoteHead.stencil = #square-line-circle-space
 }
 
 smartSquareLineCircleSpace = {
   \squareLineCircleSpace
-  \override NoteHead #'Y-extent =
+  \override NoteHead.Y-extent =
    #(ly:make-unpure-pure-container
       ly:grob::stencil-height
       (lambda (grob start end) (ly:grob::stencil-height grob)))
@@ -4167,9 +4711,9 @@ smartSquareLineCircleSpace = {
 \new Voice \with { \remove "Stem_engraver" }
 \relative c'' {
   \squareLineCircleSpace
-  cis4 ces cisis c
+  cis4 ces disis d
   \smartSquareLineCircleSpace
-  cis4 ces cisis c
+  cis4 ces disis d
 }
 @end lilypond
 
@@ -4302,15 +4846,15 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = #padding
+     \once \override TextScript.padding = #padding
    #})
 
-\relative c''' {
+\relative c'' {
   c4^"piu mosso" b a b
   \padText #1.8
-  c4^"piu mosso" d e f
+  c4^"piu mosso" b a b
   \padText #2.6
-  c4^"piu mosso" fis a g
+  c4^"piu mosso" b a b
 }
 @end lilypond
 
@@ -4323,10 +4867,10 @@ custosNote =
      (parser location note)
      (ly:music?)
    #{
-     \tweak NoteHead #'stencil #ly:text-interface::print
-     \tweak NoteHead #'text
+     \tweak NoteHead.stencil #ly:text-interface::print
+     \tweak NoteHead.text
         \markup \musicglyph #"custodes.mensural.u0"
-     \tweak Stem #'stencil ##f
+     \tweak Stem.stencil ##f
      #note
    #})
 
@@ -4341,7 +4885,7 @@ tempoPadded =
      (parser location padding tempotext)
      (number? markup?)
    #{
-     \once \override Score.MetronomeMark #'padding = #padding
+     \once \override Score.MetronomeMark.padding = #padding
      \tempo \markup { \bold #tempotext }
    #})
 
index 0051f33b8c0136815b63df5ac34d008310cdde75..9ba8fcaf2c4ce1fa5c22e98c48bf1dc8e21093e1 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: ecd34079d2df7ba2c28b3c76740cd0b9f157d61b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 
 @c TODO: add tablature.
@@ -29,7 +29,7 @@
 @tab
 @lilypond[relative=2,notime]
 \set Staff.autoBeaming = ##f
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 c1 c2 c8 c16
 @end lilypond
 
@@ -37,7 +37,7 @@ c1 c2 c8 c16
 @tab puntillos
 @tab
 @lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 c4. c4..
 @end lilypond
 
@@ -69,7 +69,7 @@ s4_" "
 @tab compás
 @tab
 @lilypond[relative=1]
-\override Staff.Clef #'stencil = #empty-stencil
+\override Staff.Clef.stencil = #empty-stencil
 \time 3/4
 s4_" "
 \time 4/4
@@ -81,7 +81,7 @@ s16_" "
 @tab silencio
 @tab
 @lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 r4 r8
 @end lilypond
 
@@ -156,7 +156,7 @@ a8-[ b-]
 @end lilypond
 
 
-@item @code{<< \new Staff ... >>}
+@item @code{<< \new Staff @dots{} >>}
 @tab más pentagramas
 @tab
 @lilypond[relative=1]
@@ -228,12 +228,12 @@ f8 c2 d e
 @end lilypond
 
 
-@item @code{\times 2/3 @{f g a@}}
+@item @code{\tuplet 3/2 @{f g a@}}
 @tab tresillos
 @tab
 @lilypond[relative=1]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
-\times 2/3 { f8 g a }
+\tuplet 3/2 { f8 g a }
 @end lilypond
 
 
index 37d3bd545191b0b492cf7db8ea7023df045b4942..9e1d67b53bf0c16231ae11f5d795fb3608814b19 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Notación de acordes
 @section Notación de acordes
@@ -184,7 +184,7 @@ Acción predeterminada; produce una tríada mayor.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1
 }
 @end lilypond
@@ -196,7 +196,7 @@ Acorde menor.  Este modificador baja la tercera.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:m c:m7
 }
 @end lilypond
@@ -210,7 +210,7 @@ existe, la séptima.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:dim c:dim7
 }
 @end lilypond
@@ -222,7 +222,7 @@ Acorde aumentado.  Este modificador eleva la quinta.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:aug
 }
 @end lilypond
@@ -236,7 +236,7 @@ modificador para crear una tríada mayor.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:maj c:maj7
 }
 @end lilypond
@@ -460,21 +460,20 @@ uso del modo de acordes.  El nombre de acorde que se imprime es el
 mismo independientemente del modo de entrada, a no ser que existan
 inversiones o bajos añadidos:
 
-@lilypond[verbatim,quote,relative=1]
+@lilypond[verbatim,quote]
+chordmusic = \relative c' {
+  <c e g>2 <f bes c>
+  <f c' e g>1
+  \chordmode {
+    c2 f:sus4 c1:/f
+  }
+}
 <<
   \new ChordNames {
-    <c e g>2  <f bes c>
-    <f c' e g>1
-    \chordmode {
-      c2 f:sus4 c1:/f
-    }
+    \chordmusic
   }
   {
-    <c e g>2  <f bes c>
-    <f, c' e g>1
-    \chordmode {
-      c2 f:sus4 c1:/f
-    }
+    \chordmusic
   }
 >>
 @end lilypond
@@ -506,8 +505,8 @@ Sin Acorde).
 
 @funindex{\chords}
 
-@code{\chords @{ ... @}} es una forma abreviada de escribir
-@code{\new ChordNames @{ \chordmode @{ ... @} @}}.
+@code{\chords @{ @dots{} @}} es una forma abreviada de escribir
+@code{\new ChordNames @{ \chordmode @{ @dots{} @}}.
 
 @lilypond[verbatim,quote,ragged-right]
 \chords {
@@ -868,8 +867,8 @@ se ocupa de la impresión de los objetos del tipo @code{BassFigure}.
 El bajo cifrado también se puede imprimir dentro de contextos de
 @code{Staff}.
 
-@code{\figures@{ ... @}} es una notación abreviada de
-@code{\new FiguredBass @{ \figuremode @{ ... @} @}}.
+@code{\figures@{ @dots{} @}} es una notación abreviada de
+@code{\new FiguredBass @{ \figuremode @{ @dots{} @} @}}.
 
 Aunque el soporte para bajo cifrado puede parecerse superficialmente
 al de los acordes, realmente es mucho más simple.  El modo
@@ -1122,13 +1121,13 @@ ajusta automáticamente.
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \new Staff = myStaff
+  \new Staff = "myStaff"
   \figuremode {
     <4>4 <10 6>8 s8
     <6 4>4 <6 4>
   }
   %% Put notes on same Staff as figures
-  \context Staff = myStaff
+  \context Staff = "myStaff"
   {
     \clef bass
     c4 c'8 r8 c4 c'
@@ -1141,14 +1140,14 @@ se puede presentar encima o debajo del mismo.
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \new Staff = myStaff
+  \new Staff = "myStaff"
   \figuremode {
     <4>4 <10 6>8 s8
     \bassFigureStaffAlignmentDown
     <6 4>4 <6 4>
   }
   %% Put notes on same Staff as figures
-  \context Staff = myStaff
+  \context Staff = "myStaff"
   {
     \clef bass
     c4 c'8 r8 c4 c'
@@ -1207,32 +1206,3 @@ en la línea del bajo.
   }
 >>
 @end lilypond
-
-Si se usan líneas extensoras, las cifras adyacentes con el mismo
-número en distinta colocación puede hacer que se inviertan las
-posiciones de las cifras.
-
-@lilypond[verbatim,ragged-right,quote,relative=1]
-<<
-  { fis4 g g, e' }
-  \figures {
-    \bassFigureExtendersOn
-    <6 5>4 <5\! 4> < 5 _!> <6>
-  }
->>
-@end lilypond
-
-Para evitar este problema, sencillamente habilite los extensores
-después de la cifra y quítelos al final de la línea extensora.
-
-@lilypond[verbatim,ragged-right,quote,relative=1]
-<<
-  { fis4 g g, e' }
-  \figures {
-    <6 5>4 <5 4>
-    \bassFigureExtendersOn
-    < 5 _!>4 <6>
-    \bassFigureExtendersOff
-  }
->>
-@end lilypond
index 425eb8599a7b5f2fc5cd5f7d20874c7ddcfd19de..2c7865a12286fb5833b45495feb95a7dcc55df7a 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @c This file is included from notation.itely
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: ed1acf4b9b63f6acdb4feb24eb4acf3f83548319
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @node Anotaciones editoriales
 @section Anotaciones editoriales
@@ -103,11 +103,11 @@ que queden afectados solamente determinados objetos gráficos.
 @lilypond[verbatim,quote,relative=2]
 \set fontSize = #3
 c4.-> d8---3
-\override NoteHead #'font-size = #-4
+\override NoteHead.font-size = #-4
 c4.-> d8---3
-\override Script #'font-size = #2
+\override Script.font-size = #2
 c4.-> d8---3
-\override Stem #'font-size = #-5
+\override Stem.font-size = #-5
 c4.-> d8---3
 @end lilypond
 
@@ -161,10 +161,10 @@ Las instrucciones de digitación se pueden introducir usando
 c4-1 d-2 f-4 e-3
 @end lilypond
 
-Para los cambios de dedo se pueden usar elementos de marcado de texto.
+Para los cambios de dedo se pueden usar elementos de marcado de texto o de cadenas de caracteres.
 
 @lilypond[verbatim,quote,relative=2]
-c4-1 d-2 f-4 c^\markup { \finger "2 - 3" }
+c4-1 d-2 f\finger \markup \tied-lyric #"4~3" c\finger "2 - 3"
 @end lilypond
 
 @cindex thumb-script
@@ -218,10 +218,6 @@ Referencia de funcionamiento interno:
 @rinternals{New_fingering_engraver},
 @rinternals{Fingering}.
 
-@knownissues
-Por omisión, los números mayores de 9 no están coontemplados si se
-utiliza @samp{@var{nota}-@var{dígito}}.
-
 
 @node Notas ocultas
 @unnumberedsubsubsec Notas ocultas
@@ -312,11 +308,11 @@ Se pueden asignar colores a los objetos individuales.  Los nombres de
 color válidos se encuentran relacionados en la @ref{Lista de colores}.
 
 @lilypond[verbatim,quote,relative=2]
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 c4 c
-\override NoteHead #'color = #(x11-color 'LimeGreen)
+\override NoteHead.color = #(x11-color 'LimeGreen)
 d
-\override Stem #'color = #blue
+\override Stem.color = #blue
 e
 @end lilypond
 
@@ -332,20 +328,20 @@ Si @code{x11-color} no entiende el parámetro, el color predeterminado
 que se devuelve es el negro.
 
 @lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
 \set Staff.instrumentName = \markup {
   \with-color #(x11-color 'navy) "Clarinet"
 }
 
 gis8 a
-\override Beam #'color = #(x11-color "medium turquoise")
+\override Beam.color = #(x11-color "medium turquoise")
 gis a
-\override Accidental #'color = #(x11-color 'DarkRed)
+\override Accidental.color = #(x11-color 'DarkRed)
 gis a
-\override NoteHead #'color = #(x11-color "LimeGreen")
+\override NoteHead.color = #(x11-color "LimeGreen")
 gis a
 % this is deliberate nonsense; note that the stems remain black
-\override Stem #'color = #(x11-color 'Boggle)
+\override Stem.color = #(x11-color 'Boggle)
 b2 cis
 @end lilypond
 
@@ -359,16 +355,16 @@ Se pueden especificar colores RGB exactos utilizando la función de
 Scheme @code{rgb-color}.
 
 @lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
 \set Staff.instrumentName = \markup {
   \with-color #(x11-color 'navy) "Clarinet"
 }
 
-\override Stem #'color = #(rgb-color 0 0 0)
+\override Stem.color = #(rgb-color 0 0 0)
 gis8 a
-\override Stem #'color = #(rgb-color 1 1 1)
+\override Stem.color = #(rgb-color 1 1 1)
 gis8 a
-\override Stem #'color = #(rgb-color 0 0 0.5)
+\override Stem.color = #(rgb-color 0 0 0.5)
 gis4 a
 @end lilypond
 
@@ -487,6 +483,9 @@ abajo; véase @ref{Dirección y posición}.
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {default-direction-of-stems-on-the-center-line-of-the-staff.ly}
 
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly}
+
 @seealso
 Referencia de la notación:
 @ref{Dirección y posición}.
@@ -554,14 +553,13 @@ adjuntar un texto a cualquier grob, y el último se usa como
 @code{\tweak}, normalmente dentro de acordes, para adjuntar un texto a
 una nota individual.
 
-Los textos de globo normalmente influyen en el espaciado de las notas,
+Los textos de globo no influyen en el espaciado de las notas,
 pero esto puede cambiarse:
 
 @c KEEP LY
 @lilypond[verbatim,quote,relative=2]
 \new Voice \with { \consists "Balloon_engraver" }
 {
-  \balloonLengthOff
   \balloonGrobText #'Stem #'(3 . 4) \markup { "Soy una plica" }
   a8
   \balloonGrobText #'Rest #'(-4 . -4) \markup { "Soy un silencio" }
@@ -616,7 +614,7 @@ especificar la duración entre las líneas de rejilla.
   \context {
     \Staff
     \consists "Grid_point_engraver"
-    gridInterval = #(ly:make-moment 1 4)
+    gridInterval = #(ly:make-moment 1/4)
   }
   \context {
     \Score
index bc3d987adaaecd236fc45eac8758fe9ceef83ec2..7dfba42e5a4c58ee3b23546895bf070d101abf87 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: d47930b56be83c6433a577cb574daee43aa96a84
+    Translation of GIT committish: 48a57a1c8feb426029e059d9fbf8aaf1b14f0ff8
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.25"
 
 @node Expresiones
 @section Expresiones
@@ -157,7 +157,7 @@ salida correspondiente a estas articulaciones aparece de la siguiente
 manera:
 
 @lilypond[verbatim,quote,relative=2]
-c4-^ c-+ c-- c-|
+c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
@@ -177,8 +177,8 @@ multicompás (y sólo a un silencio multicompás).  La instrucción
 crea un objeto @code{MultiMeasureRestText}.
 
 @lilypond[verbatim,quote,relative=2]
-\override Script #'color = #red
-\override MultiMeasureRestText #'color = #blue
+\override Script.color = #red
+\override MultiMeasureRestText.color = #blue
 a2\fermata r\fermata
 R1\fermataMarkup
 @end lilypond
@@ -491,6 +491,16 @@ texto e indicaciones de pedal de piano.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {printing-hairpins-using-al-niente-notation.ly}
 
+@cindex Ferneyhough, reguladores de 
+@cindex reguladores de Ferneyhough
+@cindex reguladores acampanados
+@cindex acampanados, reguladores
+@cindex reguladores de tipo constante
+@cindex constante, reguladores de tipo
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{printing-hairpins-in-various-styles.ly}
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {vertically-aligned-dynamics-and-textscripts.ly}
 
@@ -626,6 +636,20 @@ moltoF = #(make-dynamic-script
 }
 @end lilypond
 
+Para alinear el texto del matiz dinámico a la izquierda en lugar
+de centrarlo sobre una nota, utilice un @code{\tweak}:
+
+@lilypond[verbatim,quote]
+moltoF = \tweak DynamicText.self-alignment-X #LEFT
+         #(make-dynamic-script
+            (markup #:normal-text "molto"
+                    #:dynamic "f"))
+\relative c' {
+  <d e>16 <d e>
+  <d e>2..\moltoF <d e>1
+}
+@end lilypond
+
 Los ajustes para las fuentes tipográficas en el modo de marcado se
 describen en @ref{Seleccionar la tipografía y su tamaño}.
 
@@ -992,7 +1016,13 @@ detalles, consulte @ref{Divisiones}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {changing-the-breath-mark-symbol.ly}
 
+@cindex marca de pulso
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{using-a-tick-as-the-breath-mark-symbol.ly}
+
 @cindex caesura
+@cindex cesura
 
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {inserting-a-caesura.ly}
@@ -1139,6 +1169,9 @@ consulte @ref{Estilos de línea}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {making-glissandi-breakable.ly}
 
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{extending-glissandi-across-repeats.ly}
+
 @seealso
 Glosario musical:
 @rglos{glissando}.
@@ -1279,8 +1312,9 @@ Referencia de funcionamiento interno:
 No es posible mezclar arpegios conectados y no conectados en un
 @code{PianoStaff} en el mismo instante de tiempo.
 
-El corchete de los arpegios de paréntesis no funciona para los
-arpegios de pentagrama cruzado.
+La forma sencilla de especificar el corchete en los arpegios de
+paréntesis no funciona para los arpegios de pentagrama cruzado;
+see @ref{Plicas de pentagrama cruzado}.
 
 
 @node Trinos
index 46188b7421c22400bf11040faac4ec072e05ca71..5fd9c0a235912a64006972568037d2dffc84394f 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: dcddb2c1a9126b5987ab04b62c867c5f4524881d
+    Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Instrumentos de cuerda con trastes
 @section Instrumentos de cuerda con trastes
@@ -253,7 +253,7 @@ aire siempre que sea posible.  Este comportamiento se puede cambiar
 fijando @code{restrainOpenStrings} al valor @code{#t}.
 
 @lilypond[quote,ragged-right,verbatim]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \omit Voice.StringNumber }
 \new StaffGroup <<
    \new Staff \relative c {
      \clef "treble_8"
@@ -327,11 +327,11 @@ ties = \relative c' {
 \score {
   <<
     \new StaffGroup  <<
-      \context Staff {
+      \new Staff {
         \clef "treble_8"
         \ties
       }
-      \context TabStaff {
+      \new TabStaff {
         \ties
       }
     >>
@@ -366,11 +366,11 @@ ties = \relative c' {
 \score {
   <<
     \new StaffGroup  <<
-      \context Staff {
+      \new Staff {
         \clef "treble_8"
         \ties
       }
-      \context TabStaff {
+      \new TabStaff {
       \hideSplitTiedTabNotes
         \ties
       }
@@ -385,9 +385,6 @@ ties = \relative c' {
 
 @cindex armónicos en tablatura
 @cindex tablatura y armónicos
-@cindex deslizamientos en notación de tablatura
-@cindex tablatura y deslizamientos
-@cindex glissandos de acordes
 @funindex \harmonic
 @funindex \harmonicByFret
 @funindex \harmonicByRatio
@@ -396,7 +393,7 @@ Se pueden añadir indicaciones de armónicos a la notación de tablatura
 como sus alturas de sonido:
 
 @lilypond[verbatim,quote]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \omit Voice.StringNumber }
 firstHarmonic = {
   d'4\4\harmonic
   g'4\3\harmonic
@@ -472,9 +469,14 @@ ratioHarmonics = {
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {fretted-string-harmonics-in-tablature.ly}
 
+@cindex deslizamientos en notación de tablatura
+@cindex tablatura y deslizamientos
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {slides-in-tablature.ly}
 
+@cindex glissandos en acordes
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {chord-glissando-in-tablature.ly}
 
@@ -553,7 +555,7 @@ para bajo, que suena una octava por debajo de lo escrito.
 @lilypond[quote,ragged-right,verbatim]
 <<
   \new Voice \with {
-    \override StringNumber #'stencil = ##f
+    \omit StringNumber
   } {
     \clef "bass_8"
     \relative c, {
@@ -673,7 +675,7 @@ personalizada por omisión, podemos usar
 \layout @{
   \context @{
     \TabStaff
-    stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+    stringTunings = \stringTuning <c' g' d'' a''>
   @}
 @}
 @end example
@@ -748,12 +750,12 @@ y cuerdas mudas (que no se tocan).
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;"
@@ -772,12 +774,12 @@ la cadena de marcado del diagrama de trastes.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
      \chordmode {
        f1 g
      }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1^\markup {
       \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;"
@@ -800,12 +802,12 @@ se puede cambiar en la cadena de marcado @code{fret-diagram}.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
      \chordmode {
        f1 g
      }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1^\markup {
       \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;"
@@ -823,12 +825,12 @@ la cadena de marcado del diagrama.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       a1
     }
   }
-  \context Staff {
+  \new Staff {
     % An 'A' chord for ukulele
     a'1^\markup {
       \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;"
@@ -843,12 +845,12 @@ marcado del diagrama.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;"
@@ -865,12 +867,12 @@ de marcado @code{fret-diagram}.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;"
@@ -897,12 +899,12 @@ aire y números de traste.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram-terse #"x;3;2;o;1;o;"
@@ -919,12 +921,12 @@ Se pueden incluir números de cejilla en la cadena de marcado escueta
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       f1 g
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1^\markup {
       \fret-diagram-terse #"1-(;3;3;2;1;1-);"
@@ -942,14 +944,13 @@ escueta @code{fret-diagram-terse}
 @c Need to use override to enable fingerings to show this -- can we do so?
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
-    \override Voice.TextScript
-      #'(fret-diagram-details finger-code) = #'below-string
+  \new Staff {
+    \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;"
@@ -977,12 +978,12 @@ colocación un elemento sobre el diagrama de trastes.
 
 @lilypond[quote, verbatim]
 <<
-    \context ChordNames {
+    \new ChordNames {
       \chordmode {
         c1 d:m
       }
     }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram-verbose #'(
@@ -1018,15 +1019,14 @@ bajo del diagrama de posición.
 @c \override is necessary to make fingering visible
 @lilypond[quote, verbatim]
 <<
-    \context ChordNames {
+    \new ChordNames {
       \chordmode {
         f1 g c
       }
     }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
-    \override Voice.TextScript
-      #'(fret-diagram-details finger-code) = #'below-string
+    \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
     <f, c f a c' f'>1^\markup {
       \fret-diagram-verbose #'(
         (place-fret 6 1)
@@ -1048,7 +1048,7 @@ bajo del diagrama de posición.
         (place-fret 1 3 3)
       )
     }
-    <c e g c' e'>1^\markup {
+    <c g c' e' g'>1^\markup {
       \fret-diagram-verbose #'(
         (capo 3)
         (mute 6)
@@ -1158,7 +1158,7 @@ en una tabla de búsqueda:
 
 @lilypond[verbatim, ragged-right, quote]
 \include "predefined-guitar-fretboards.ly"
-\context FretBoards {
+\new FretBoards {
   \chordmode {
     c1 d
   }
@@ -1218,7 +1218,7 @@ bien usando el modo de acordes (véase
 
 @lilypond[verbatim, ragged-right,quote]
 \include "predefined-guitar-fretboards.ly"
-\context FretBoards {
+\new FretBoards {
   \chordmode { c1 }
   <c' e' g'>1
 }
@@ -1244,10 +1244,10 @@ mychords = \chordmode{
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1272,10 +1272,10 @@ mychordlist = {
   \transpose c e { \mychords }
 }
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychordlist
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychordlist
   }
 >>
@@ -1302,10 +1302,10 @@ mychords = \chordmode{
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1337,10 +1337,10 @@ mychords = \chordmode {
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1365,10 +1365,10 @@ mychords = \chordmode {
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1416,10 +1416,10 @@ mychords = \chordmode{
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1440,7 +1440,7 @@ predefinido, las propiedades de interface pertenecen a
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {defining-predefined-fretboards-for-other-instruments.ly}
 
-@lilypondfile[verbatim,quote,texidoc,doctitle]
+@lilypondfile[verbatim,quote,texidoc,doctitle,ragged-right]
 {chordchanges-for-fretboards.ly}
 
 @lilypondfile[verbatim,quote,texidoc,doctitle]
@@ -1483,16 +1483,16 @@ cuerdas y los trastes que se pueden usar para tocar las notas.
 
 @lilypond[quote,ragged-right,verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       f1 g
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <f, c f a c' f'>1
     <g,\6 b, d g b g'>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1
     <g, b, d g b' g'>1
@@ -1518,19 +1518,19 @@ con instrucciones predefinidas:
                         #guitar-tuning
                         #"x;3-1-(;5-2;5-3;5-4;3-1-1-);"
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 c c
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <c e g c' e'>1
     \predefinedFretboardsOff
     <c e g c' e'>1
     \predefinedFretboardsOn
     <c e g c' e'>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1
     <c e g c' e'>1
@@ -1556,16 +1556,16 @@ FretBoard.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <c-3 e-2 g c'-1 e'>1
     <d a-2 d'-3 f'-1>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1
     <d a d' f'>1
@@ -1580,17 +1580,17 @@ contexto FretBoard se puede fijar con la propiedad @code{minimumFret}.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       d1:m d:m
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <d a d' f'>1
     \set FretBoards.minimumFret = #5
     <d a d' f'>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <d a d' f'>1
     <d a d' f'>1
@@ -1720,7 +1720,7 @@ de guitarra:
 \clef "treble_8"
 b16 d g b e
 \textSpannerDown
-\override TextSpanner #'(bound-details left text) = #"XII "
+\override TextSpanner.bound-details.left.text = #"XII "
 g16\startTextSpan
 b16 e g e b g\stopTextSpan
 e16 b g d
@@ -1751,7 +1751,7 @@ con un marcado de texto.
 @lilypond[quote,ragged-right,verbatim]
 \relative c' {
   \clef "treble_8"
-  \override Staff.NoteHead #'style = #'harmonic-mixed
+  \override Staff.NoteHead.style = #'harmonic-mixed
   d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
 }
 @end lilypond
@@ -1765,7 +1765,7 @@ music = \relative c' {
   < b\3 \deadNote d\2 b'\1 >
   < c\3 \deadNote e\2 c'\1 >
   \deadNotesOn
-  \times 2/3 { g8 b e }
+  \tuplet 3/2 { g8 b e }
   \deadNotesOff
   < a,\3 c\2 e\1 >1
 }
@@ -1925,15 +1925,20 @@ los trastes para la quinta cuerda:
 @c due to crazy intervals of banjo music, absolute pitch is recommended
 
 @lilypond[quote,ragged-right,verbatim]
-\new TabStaff <<
-  \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo
-  \set TabStaff.stringTunings = #banjo-open-g-tuning
-  {
-    \stemDown
-    g8 d' g'\5 a b g e d' |
-    g4 d''8\5 b' a'\2 g'\5 e'\2 d' |
-    g4
+music = {
+  g8 d' g'\5 a b g e d' |
+  g4 d''8\5 b' a'\2 g'\5 e'\2 d' |
+  g4
+}
+
+<<
+  \new Staff \with { \omit StringNumber }
+  { \clef "treble_8"  \music }
+  \new TabStaff \with {
+    tablatureFormat = #fret-number-tablature-format-banjo
+    stringTunings = #banjo-open-g-tuning
   }
+  { \music }
 >>
 @end lilypond
 
index a56b9c3386e4bb7a3e834007decc58e44bd8843c..537c3e2e271fc6bdd04c0b41becbaff8e011315f 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: ba92a1755026936bebe14a6c8ff6d2cfc704eeb1
+    Translation of GIT committish: ff7d82711b47d3d31f26e1e6fc012c4055a20059
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @node Entrada y salida generales
 @chapter Entrada y salida generales
@@ -54,7 +54,7 @@ delimitada por un par de llaves:
 
 @example
 \score @{
-...
+  @dots{}
 @}
 @end example
 
@@ -101,7 +101,7 @@ complejidad.  Todos los siguientes ejemplos son expresiones musicales:
 
 Los comentarios son una excepción a esta regla general (para ver otras
 excepciones, consulte @ref{Estructura del archivo}).  Tanto los comentarios de
-una línea como los que están delimitados por @code{%@{ .. %@}} se
+una línea como los que están delimitados por @code{%@{ @dots{} %@}} se
 pueden escribir en cualquier lugar dentro del archivo de entrada.  Se
 pueden escribir dentro o fuera del bloque @code{\score}, y dentro o
 fuera de la expresión musical única dentro del bloque @code{\score}.
@@ -140,7 +140,7 @@ movimientos.  Cada movimiento se introduce con un bloque
 
 @example
 \score @{
-  @var{..música..}
+  @var{@dots{}música@dots{}}
 @}
 @end example
 
@@ -148,7 +148,7 @@ y los textos se introducen con un bloque @code{\markup}:
 
 @example
 \markup @{
-  @var{..texto..}
+  @var{@dots{}texto@dots{}}
 @}
 @end example
 
@@ -160,13 +160,13 @@ de salida.
 
 @example
 \score @{
-  @var{..}
+  @var{@dots{}}
 @}
 \markup @{
-  @var{..}
+  @var{@dots{}}
 @}
 \score @{
-  @var{..}
+  @var{@dots{}}
 @}
 @end example
 
@@ -192,10 +192,10 @@ principio del archivo.
   \header @{ piece = "Romanze" @}
 @}
 \markup @{
-   ..texto de la segunda estrofa..
+   @dots{}texto de la segunda estrofa@dots{}
 @}
 \markup @{
-   ..texto de la tercera estrofa..
+   @dots{}texto de la tercera estrofa@dots{}
 @}
 \score @{
   @dots{}
@@ -256,15 +256,15 @@ versión para cada nombre que pueda coincidir; así:
 @example
 \book @{
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 @end example
 
@@ -304,17 +304,17 @@ archivos con los nombres @file{eightminiatures-Romanze.pdf},
 \book @{
   \bookOutputSuffix "Romanze"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputSuffix "Menuetto"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputSuffix "Nocturne"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 @end example
 
@@ -326,17 +326,17 @@ para cada bloque @code{book}, mediante la utilización de declaraciones
 \book @{
   \bookOutputName "Romanze"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputName "Menuetto"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputName "Nocturne"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 @end example
 
@@ -377,7 +377,7 @@ una de estas definiciones del mismo tipo en el nivel más alto, las
 definiciones se combinan, pero en situaciones de conflicto las
 definiciones más tardías tienen preferencia.  Para ver los detalles
 sobre cómo afecta al bloque @code{\layout}, consulte
-@ref{El bloque \layout}.
+@ref{El bloque layout,,El bloque @code{@bs{}layout}}.
 
 @item
 Una expresión directa de Scheme, como
@@ -506,7 +506,7 @@ instrucciones léxicas siguientes:
 Un comentario de una línea, determinado por un símbolo @code{%} al principio.
 
 @item
-Un comentario de varias líneas, delimitado por @code{%@{ .. %@}}.
+Un comentario de varias líneas, delimitado por @code{%@{ @dots{} %@}}.
 
 @end itemize
 
@@ -518,17 +518,22 @@ legibilidad.  Sin embargo, los espacios se deben utilizar siempre para
 evitar errores, en las siguientes situaciones:
 
 @itemize
-@item Alrededor de todas y cada una de las llaves curvas de apertura y cierre.
-@item A continuación de las instrucciones y variables, es decir, todos los elementos
-que comienzan con un signo @code{\} de barra invertida.
-@item A continuación de todo elemento que se deba interpretar como expresión
-de Scheme, es decir, todo elemento que comience por un signo@tie{}@code{#}.
+
+@item Alrededor de todas y cada una de las llaves curvas
+de apertura y cierre.
+
+@item A continuación de las instrucciones y variables, es decir,
+todos los elementos que comienzan con un signo @code{\} de barra
+invertida.
+
+@item A continuación de todo elemento que se deba interpretar
+como expresión de Scheme, es decir, todo elemento que comience por
+un signo@tie{}@code{#}.
+
 @item Para separar los elementos de una expresión de Scheme.
-@item Dentro de @code{lyricmode} para separar todos los términos de las instrucciones
-@code{\override} y @code{\set}.  Concretamente, hay que usar espacios
-alrededor del punto y el signo igual en instrucciones como
-@code{\override Score . LyricText #'font-size = #5} y antes y después
-de la instrucción completa.
+
+@item Dentro de @code{lyricmode} antes y después de las instrucciones
+@code{\set} y @code{\override}.
 
 @end itemize
 
@@ -538,7 +543,8 @@ Manual de aprendizaje:
 
 Referencia de la notación:
 @ref{Explicación de los títulos},
-@ref{El bloque \layout}.
+@ref{El bloque layout,,El bloque @code{@bs{}layout}}.
+
 
 @node Títulos y encabezamientos
 @section Títulos y encabezamientos
@@ -573,8 +579,9 @@ compositor; ciertas piezas tienen mucha más información.
 
 Cada bloque @code{\book} de un solo archivo de entrada produce un
 archivo de salida distinto, véase @ref{Estructura del archivo}.
-Dentro de cada archivo de salida están disponibles dos tipos de zonas
-para títulos: @emph{Títulos de parte de libro} al principio de cada
+Dentro de cada archivo de salida están disponibles tres tipos de zonas
+para títulos: @emph{Títulos de libro} al principio de cada libro,
+@emph{Títulos de parte de libro} al principio de cada
 parte de un libro y @emph{Títulos de partitura} al comienzo de una
 partitura.
 
@@ -583,8 +590,9 @@ Los valores de los campos para encabezamientos tales como @code{title}
 bloques @code{\header} (para ver la sintaxis de los bloques
 @code{\header} y una lista completa de los campos disponibles de forma
 predeterminada, consulte @ref{Presentación predeterminada de los
-títulos de partes de libro y partitura}).  Tanto los títulos de parte
-de libro como los títulos de partitura pueden contener los mismos
+títulos de partes de libro y partitura}).  Tanto los títulos de libro como
+los títulos de parte de libro y los títulos de partitura pueden
+contener los mismos
 campos, aunque de forma predeterminada los campos de los títulos de
 partitura se limitan a @code{piece} (pieza) y @code{opus}.
 
@@ -618,6 +626,15 @@ así:
 
 @itemize
 
+@item
+El título de un libro deriva de los campos establecidos al
+principio del archivo de entrada, modificado por campos
+establecidos en el bloque @code{\book}.  Los campos resultantes se
+usan para imprimir el título de libro para dicho libro, siempre y
+cuando haya otro material que genere una página al comienzo del
+libro, antes de la primera parte de libro.  Es suficiente una sola
+instrucción @code{\pageBreak}.
+
 @item
 Un título de parte de libro se deriva de los campos fijados al
 principio del archivo de entrada, modificado por los campos
@@ -756,7 +773,7 @@ Referencia de la notación:
 Este ejemplo muestra todas las variables de @code{\header}:
 
 @c KEEP LY
-@lilypond[papersize=a7,quote,verbatim,noragged-right]
+@lilypond[papersize=a6landscape,quote,verbatim,noragged-right]
 \book {
   \header {
       % Los siguientes campos están centrados
@@ -833,6 +850,12 @@ Para cambiar la disposición predeterminada, véase
 
 @cindex breakbefore
 
+Si un bloque @code{\book} comienza inmediatamente con un bloque
+@code{\bookpart}, no se imprime ningún título de libro, pues no
+existe ninguna página en que imprimirlo.  Si es necesario un
+título de libro, inicie el bloque @code{\book} con algún material
+de marcado o con una instrucción @code{\pageBreak}.
+
 Utilice la variable @code{breakbefore} dentro de un bloque
 @code{\header} que está propiamente dentro de un bloque @code{\score}
 para hacer que los títulos del bloque @code{\header} del nivel
@@ -840,7 +863,7 @@ superior aparezcan ocupando toda la primera página, empezando la
 música (definida en el bloque @code{\score}) en la página siguiente.
 
 @c KEEP LY
-@lilypond[papersize=a8landscape,verbatim,noragged-right]
+@lilypond[papersize=c7landscape,verbatim,noragged-right]
 \book {
   \header {
     title = "Este es mi Title (título)"
@@ -911,16 +934,6 @@ debajo del texto de @code{copyright} si sólo hay una página.
 
 @end itemize
 
-@lilypond[papersize=a8landscape]
-\book {
-  \score {
-    \relative c' {
-      c4 d e f
-    }
-  }
-}
-@end lilypond
-
 La línea de etiqueta tagline predeterminada se puede cambiar añadiendo un campo
 @code{tagline} en el bloque @code{\header} del nivel superior.
 
@@ -968,7 +981,7 @@ el texto de cualquier cabecera, pie o título dentro del bloque
   { s1 }
   \header {
     piece = \markup { \fontsize #4 \bold "PRAELUDIUM I" }
-    subtitle = \markup { \italic "(Excerpt)" }
+    opus = \markup { \italic "BWV 846" }
   }
 }
 @end lilypond
@@ -1008,7 +1021,7 @@ están definidos en el archivo @file{ly/titling-init.ly} son:
 
 @example
 scoreTitleMarkup = \markup @{ \column @{
-  \on-the-fly #print-all-headers @{ \bookTitleMarkup \hspace #1 @}
+  \on-the-fly \print-all-headers @{ \bookTitleMarkup \hspace #1 @}
   \fill-line @{
     \fromproperty #'header:piece
     \fromproperty #'header:opus
@@ -1173,9 +1186,9 @@ siguiente:
 
 @example
 @code{variable} = @code{\markup} @{
-  ...
-  @code{\on-the-fly}  #@var{procedimiento}  @var{marcado}
-  ...
+  @dots{}
+  @code{\on-the-fly}  \@var{procedimiento}  @var{marcado}
+  @dots{}
 @}
 @end example
 
@@ -1194,8 +1207,8 @@ comprobación de diversas condiciones:
 @headitem  Nombre del procedimiento @tab  Condición que se comprueba
 
 @item print-page-number-check-first @tab  ¿debería imprimirse esta página?
-@item create-page-number-stencil    @tab  ¿es 'print-page-numbers verdadero?
-@item print-all-headers             @tab  ¿es 'print-all-headers verdadero?
+@item create-page-number-stencil    @tab  ¿es print-page-numbers verdadero?
+@item print-all-headers             @tab  ¿es print-all-headers verdadero?
 @item first-page                    @tab  ¿es la primera página del libro?
 @item (on-page nmbr)                @tab  ¿es el número de página = nmbr?
 @item last-page                     @tab  ¿es la última página del libro?
@@ -1224,7 +1237,7 @@ definiéndola como @code{\oddFooterMarkup}:
     evenHeaderMarkup = \markup \null
     oddFooterMarkup = \markup {
       \fill-line {
-        \on-the-fly #print-page-number-check-first
+        \on-the-fly \print-page-number-check-first
         \fromproperty #'page:page-number-string
       }
     }
@@ -1240,9 +1253,9 @@ Se pueden combinar varias condiciones de @code{\on-the-fly} con un
 operador @q{and}, por ejemplo:
 
 @example
-  @code{\on-the-fly #first-page}
-  @code{\on-the-fly #last-page}
-  @code{@{ \markup ... \fromproperty #'header: ... @}}
+  @code{\on-the-fly \first-page}
+  @code{\on-the-fly \last-page}
+  @code{@{ \markup @dots{} \fromproperty #'header: @dots{} @}}
 @end example
 
 determina si la salida es una sola página.
@@ -1284,9 +1297,14 @@ categorías:
 @table @emph
 @item Notas al pie basadas en eventos
 Se adjuntan a un evento en particular.  Son ejemplos de tales eventos
-las notas sueltas, notas dentro de un acorde, articulaciones (como
-barras, ligaduras de expresión, indicaciones de digitación, acentos,
-indicaciones dinámicas) y letra de las canciones.
+las notas sueltas, las articulaciones (como indicaciones de digitación,
+acentos, indicaciones dinámicas) y los post-eventos (como las ligaduras de expresión
+y las barras de corchea manuales).  La forma general de las notas
+al pie basadas en eventos es como sigue:
+
+@example
+[@var{dirección}] \footnote [@var{marca}] @var{desplazamiento} @var{texto-de-la-nota} @var{música}
+@end example
 
 @item Notas al pie basadas en tiempo
 Se ligan a un punto temporal determinado, dentro de un contexto
@@ -1298,16 +1316,17 @@ a través de uno de los eventos de nota que contiene).  Una nota al pie
 basada en tiempo permite anotar tales objetos de presentación sin
 referirse a ningún evento.
 
-@end table
-
-La forma completa de una instrucción de nota al pie tanto para las
-notas al pie basadas en eventos como para las basadas en tiempo, es:
+Una nota al pie basada en tiempo permite que tales objetos de
+presentación se puedan anotar sin hacer referencia a un evento.
+La forma general para las notas al pie basadas en tiempo es:
 
 @example
-[@var{dirección}] \footnote [@var{marca}] @var{desplazamiento} [@var{nombre-del-grob}] @var{texto-de-la-nota} @var{música}
+\footnote [@var{marca}] @var{desplazamiento} @var{texto-de-la-nota} [@var{Contexto}].@var{Nombre-del-Grob}
 @end example
 
-Los elementos son como sigue:
+@end table
+
+Los elementos para las dos formas son como sigue:
 
 @table @var
 
@@ -1334,25 +1353,24 @@ valores de desplazamiento positivos se toman a partir del borde
 superior derecho, los valores negativos a partir del borde inferior
 izquierdo y cero implica que la marca se centra sobre el borde.
 
-@item nombre-del-grob
-especifica un tipo de grob que marcar (como @samp{#'Flag} para el
-corchete).  Si se da, se usa como punto de referencia un grob de ese
-tipo asociado con la @var{música} referenciada.  Se puede omitir (o
-sustituirse con @code{\default}) si se desea que la marca de nota al
-pie se adjunte al grob directamente creado dentro de @var{música}.
+@item Contexto
+es el contexto en que se crea el grob que recibe la nota al pie.
+Se puede omitir si el grob está en un contexto del nivel inferior,
+p.ej un contexto @code{Voice}.
+
+@item Nombre-del-Grob
+especifica un tipo de grob que marcar (como @samp{Flag} para el
+corchete).  Si se da, la nota al pie no se adjunta a una expresión
+musical en particular, sino a todos los grobs del tipo
+especificado que ocurren en dicho momento de tiempo musical.
 
 @item texto-de-la-nota
 es el elemento de marccado o cadena de caracteres que especifica el
 texto de la nota al pie que utilizar en la parte baja de la página.
 
 @item música
-es el evento musical o componente de un acorde o post-evento que se
-está anotando.  Aunque no se puede omitir, se puede sustituir por
-@code{\default} en cuyo caso la nota al pie no se adjunta a ninguna
-expresión en particular, sino más bien a un momento de tiempo.  Es
-obligatorio en este caso utilizar el argumento @var{nombre-del-grob}
-para seleccionar un tipo de grob afectado, como por ejemplo
-@samp{#'TimeSignature}.
+es el evento musical, post-evento o articulación que se
+está anotando.
 
 @end table
 
@@ -1360,41 +1378,64 @@ para seleccionar un tipo de grob afectado, como por ejemplo
 
 @cindex Notas al pie, basadas en eventos
 
-La forma más simple de una nota al pie basada en eventos es
-sencillamente
+Una nota al pie se adjunta a un objeto de presentación causado
+directamente por el evento que corresponde a @var{música}, con la
+sintaxis siguiente:
 
 @example
-\footnote @var{desplazamiento} @var{texto-de-la-nota} @var{música}
+\footnote [@var{marca}] @var{desplazamiento} @var{texto-de-la-nota} @var{música}
 @end example
 
-Este tipo de nota al pie se adjunta a un objeto de presentación
-causado directamente por el evento que corresponde a @var{música}.
-
+@c KEEP LY
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
   \header { tagline = ##f }
   \relative c'' {
-    \footnote #'(-1 . 3) "A note" a4
+    \footnote #'(-1 . 3) "Una nota" a4
     a4
-    \footnote #'(2 . 2) "A rest" r4
+    \footnote #'(2 . 2) "Un silencio" r4
     a4
   }
 }
 @end lilypond
 
+No es posible marcar un acrode @emph{completo} con una nota al pie
+basada en evento: un acorde, incluso aquel que contiene una sola
+nota, no produce un verdadero evento por sí mismo.  Sin embargo,
+las notas individuales que están @emph{dentro} del acorde sí se
+pueden marcar:
+
+@c KEEP LY
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+  \header { tagline = ##f }
+  \relative c'' {
+    \footnote #'(2 . 3) "No funciona" <a-3>2
+    <\footnote #'(-2 . -3) "Funciona" a-3>4
+    <a-3 \footnote #'(3 . 1/2) "También funciona" c-5>4
+  }
+}
+@end lilypond
+
 Si se desea que la nota al pie se adjunte a un post-evento o
-articulación, la instrucción @code{\footnote} debe ir precedida por un
-indicador de dirección, @code{-, _, ^}, y seguida por el post-evento o
-articulación que se desea anotar como argumento @var{música}.  En esta
-forma, la @code{\footnote} se puede considerar como una simple copia
-de su último argumento con una marca de nota al pie adjunta.
+articulación, la instrucción @code{\footnote} @emph{debe} ir
+precedida por un indicador de dirección, @code{-, _, ^}, y seguida
+por el post-evento o articulación que se desea anotar como
+argumento @var{música}.  En esta forma, la @code{\footnote} se
+puede considerar como una simple copia de su último argumento con
+una marca de nota al pie adjunta.  La sintaxis es:
 
+@example
+@var{dirección} \footnote [@var{marca}] @var{desplazamiento} @var{texto-de-la-nota} @var{música}
+@end example
+
+@c KEEP LY
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
   \header { tagline = ##f }
   \relative c'' {
-    a4_\footnote #'(0 . -1) "A slur forced down" (
-    b8^\footnote #'(1 . 0.5) "A manual beam forced up" [
+    a4_\footnote #'(0 . -1) "Ligadura forzada hacia abajo" (
+    b8^\footnote #'(1 . 0.5) "Barra manual forzada hacia arriba" [
     b8 ]
     c4 )
     c-\footnote #'(1 . 1) "Tenuto" --
@@ -1402,100 +1443,144 @@ de su último argumento con una marca de nota al pie adjunta.
 }
 @end lilypond
 
-Se pueden usar marcas personalizadas como altenativas a las marcas
-numéricas, y la línea de anotación que une el objeto marcado con la
-marca puede suprimirse:
+@subsubsubheading notas al pie basadas en tiempo
 
+@cindex notas al pie, basadas en tiempo
+
+Si el objeto de presentación que recibe la nota al pie está
+causado @emph{indirectamente} por un evento (como un objeto
+@code{Accidental}, alteración, o @code{Stem}, plica, causados por
+un evento @code{NoteHead}, cabeza de nota), el nombre del grob
+@var{GrobName} del objeto de presentación es necesario después del
+texto de la nota al pie, en lugar de @var{música}:
+
+@c KEEP LY
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
   \header { tagline = ##f }
-  \relative c' {
-    \footnote "*" #'(0.5 . -2) \markup { \italic "* The first note" }
-    a'4 b8
-    \footnote \markup { \super "$" } #'(0.5 . 1)
-      \markup { \super "$" \italic " The second note" }
-    e c4
-    \once \override Score.FootnoteItem #'annotation-line = ##f
-    b-\footnote \markup \tiny "+" #'(0.1 . 0.1)
-      \markup { \super "+" \italic " Editorial" } \p
+  \relative c'' {
+    \footnote #'(-1 . -3) "Un bemol" Accidental
+    aes4 c
+    \footnote #'(-1 . 0.5) "Otro bemol" Accidental
+    ees
+    \footnote #'(1 . -2) "Una plica" Stem
+    aes
   }
 }
 @end lilypond
 
-Se pueden ver más ejemplos de marcas personalizadas en
-@ref{Notas al pie en texto independiente}.
+Sin embargo, observe que cuando se especifica el nombre de un
+grob, se adjunta una nota al pie a todos los grobs de ese tipo
+dentro del instante de tiempo actual:
 
-No es posible hacer un acorde completo de esta forma porque un acorde
-no produce un evento distinto al de las notas que lo componen, pero
-las propias notas que lo componen sí se pueden marcar.
+@c KEEP LY
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+  \header { tagline = ##f }
+  \relative c' {
+    \footnote #'(-1 . 3) "Un bemol" Accidental
+    <ees ges bes>4
+    \footnote #'(2 . 0.5) "Articulación" Script
+    c'->-.
+  }
+}
+@end lilypond
 
-Si el objeto de presentación que se está anotando está causado
-@emph{indirectly} por un evento (como una alteración accidental o una
-plica causados por una cabeza de nota), se requiere un argumento
-adicional de símbolo, el @var{nombre-del-grob}, antes del texto de la
-nota al pie:
+Una nota dentro de un acorde puede recibir una nota al pie
+individual, basada en evento.  El único grob causado directamente
+por una nota de un acorde es @samp{NoteHead}, por lo que la
+instrucción de nota al pie basada en evento @emph{solamente} es
+apta para añadir una nota al pie a la @samp{NoteHead} dentro de un
+acorde.  Todos los demás grobs de notas de acorde están causados
+indirectamente. La propia instrucción @code{\footnote} no ofrece
+ninguna sintaxis para especificar al mismo tiempo un tipo concreto
+de grob @emph{y también} un evento concreto al que adjuntar la
+nota.  Sin embargo, se puede usat una instrucción @code{\footnote}
+basada en tiempo para especificar el tipo de grob, y luego añadir
+la instrucción @code{\single} como prefijo, con el objeto de que
+se aplique solamente al evento siguiente:
 
+@c KEEP LY
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
   \header { tagline = ##f }
   \relative c'' {
-    % footnotes may be added to chord constituents
-    < \footnote #'(-1 . -3) #'Accidental "Another flat" aes
-      c
-      \footnote #'(-1 . 0.5) #'Accidental "A flat" ees
+    < \footnote #'(1 . -2) "An A" a
+      \single \footnote #'(-1 . -1) "Un sostenido" Accidental
+      cis
+      \single \footnote #'(0.5 . 0.5) "Un bemol" Accidental
+      ees fis
     >2
-    \footnote #'(-1 . 2) #'Stem "A stem" ees2
   }
 }
 @end lilypond
 
 @warning {Cuando las notas al pie se adjuntan a varios elementos musicales que
-están dentro del mismo momento musical, las notas al pie se numeran
-desde los elementos más altos a los más bajos tal y como aparecen en
-la salida impresa, no en el orden en que se escriben en el flujo de
-entrada.}
-
-@subsubsubheading Notas al pie basadas en tiempo
-
-@cindex Notas al pie, basadas en tiempo
+están dentro del mismo momento musical, como ocurre en el ejemplo
+anterior, las notas al pie se numeran desde los elementos más
+altos a los más bajos tal y como aparecen en la salida impresa, no
+en el orden en que se escriben en el flujo de entrada.}
 
 Los objetos de presentación como las claves y las armaduras de
-tonalidad están producidas mayormente como consecuencia de propiedades
-cambiadas, más que como verdaderos eventos.  Otros, como las líneas
-divisorias y los números de compás, son una consecuencia directa de la
-cuenta de tiempo.  Por este motivo, las notas al pie basadas en estos
-objetos tienen que estar basadas en su cuenta de tiempo musical.  Las
-notas al pie basadas en tiempo son preferibles también cuando se están
-creando funcionalidades como plicas y barras dentro de @emph{acordes}:
-mientras que tales funcionalidades por cada acorde se asignan
-normalmente a @emph{un} evento dentro del acorde, confiar en una
-elección en particular sería imprudente.
-
-Una nota al pie basada en tiempo se escribe de la misma manera que con
-una nota al pie basada en evento, excepto que se usa @code{\default}
-en lugar de la música que indica un evento.  El objeto de presentación
-en cuestión debería siempre especificarse explícitamente para las
-notas al pie basadas en tiempo para evitar acabar teniendo marcas en
-los objetos más inesperados.
+cambio de tonalidad están, más bien, causadas por propiedades que
+cambian, y no por eventos.  Otros, como las líneas divisorias y
+los números de compás, son una consecuencia directa del paso del
+tiempo.  Por esta razón, las notas al pie sobre tales objetos
+tienen que basarse en su tiempo musical.  Las notas al pie basadas
+en tiempo so preferibles también cuando se marcan cosas como las
+plicas y las barras de corchea en @emph{acordes}: dado que estas
+funcionalidades de cada acorde individual están asignadas
+normalmente a @emph{un solo} evento dentro del acorde, sería
+imprudente descansar en una elección particular.
+
+En las notas al pie basadas en tiempo, siempre se debe especificar
+explícitamente el objeto de presentación en cuestión, y si el grob
+se crea dentro de un contexto distinto al de nivel más bajo, debe
+especificarse el contexto apropiado.
 
+@c KEEP LY
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
   \header { tagline = ##f }
   \relative c'' {
     r1 |
-    \footnote #'(-0.5 . -1) #'TimeSignature "Meter change" \default
+    \footnote #'(-0.5 . -1) "Cambio de compás" Staff.TimeSignature
     \time 3/4
-    \footnote #'(1 . -1) #'Stem "Chord stem" \default
+    \footnote #'(1 . -1) "Plica de acorde" Stem
     <c e g>4 q q
-    \footnote #'(-0.5 . 1) #'BarLine "Bar line" \default
+    \footnote #'(-0.5 . 1) "Línea divisoria" Staff.BarLine
     q q
-    \footnote #'(0.5 . -1) #'KeySignature "Key change" \default
+    \footnote #'(0.5 . -1) "Cambio de tonalidad" Staff.KeySignature
     \key c\minor
     q
   }
 }
 @end lilypond
 
+Se pueden usar marcas personalizadas como alternativas a las
+marcas numéricas, y se puede suprimir la línea de anotación que
+une el objeto marcado con su marca:
+
+@c KEEP LY
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+  \header { tagline = ##f }
+  \relative c' {
+    \footnote "*" #'(0.5 . -2) \markup { \italic "* La primera nota" } a'4
+    b8
+    \footnote \markup { \super "$" } #'(0.5 . 1)
+      \markup { \super "$" \italic " La segunda nota" } e
+    c4
+    \once \override Score.FootnoteItem.annotation-line = ##f
+    b-\footnote \markup \tiny "+" #'(0.1 . 0.1)
+      \markup { \super "+" \italic " Editorial" } \p
+  }
+}
+@end lilypond
+
+Se muestran más ejemplos de marcas personalizadas en
+@ref{Notas al pie en texto independiente}.
+
 
 @node Notas al pie en texto independiente
 @unnumberedsubsubsec Notas al pie en texto independiente
@@ -1519,7 +1604,7 @@ La sintaxis de una nota al pue sobre texto independiente con marcas
 automáticas es
 
 @example
-\markup @{ ... \auto-footnote @var{texto} @var{nota} ... @}
+\markup @{ @dots{} \auto-footnote @var{texto} @var{nota} @dots{} @}
 @end example
 
 Los elementos son:
@@ -1559,7 +1644,7 @@ La sintaxis de una nota al pie sobre texto independiente con marcas
 personalizadas es
 
 @example
-\markup @{ ... \footnote @var{marca} @var{nota} ... @}
+\markup @{ @dots{} \footnote @var{marca} @var{nota} @dots{} @}
 @end example
 
 Los elementos son:
@@ -1649,9 +1734,12 @@ Varias notas al pie en la misma página solo pueden ir apiladas unas
 sobre otras; no se pueden imprimir en la misma línea.
 
 Las notas al pie no se pueden adjuntar a @code{MultiMeasureRests}
-(silencios multicompás) o a barras de corchea automáticas y las notas
-al pie pueden colisionar con las pautas, objetos @code{\markup}, otras
-marcas de notas al pie y líneas de anotación.
+(silencios multicompás), a barras de corchea automáticas ni a la
+letra de las canciones.
+
+Las notas al pie pueden colisionar con las pautas, objetos
+@code{\markup}, otras marcas de notas al pie y líneas de
+anotación.
 
 
 @node Referencia a números de página
@@ -1665,6 +1753,7 @@ dentro de un elemento de marcado, para obtener el número de la página
 en la que se sitúa el punto señalizado, usando la instrucción de
 marcado @code{\page-ref}.
 
+@c KEEP LY
 @lilypond[verbatim,papersize=a8landscape]
 \header { tagline = ##f }
 \book {
@@ -1676,8 +1765,8 @@ marcado @code{\page-ref}.
       c'1
     }
   }
-  \markup { The first score begins on page \page-ref #'firstScore "0" "?" }
-  \markup { Mark A is on page \page-ref #'markA "0" "?" }
+  \markup { La primera partitura comienza en la página \page-ref #'firstScore "0" "?" }
+  \markup { La marca A está en la página \page-ref #'markA "0" "?" }
 }
 @end lilypond
 
@@ -1899,7 +1988,7 @@ directorio actual, use
 @example
 \include "partes/VI.ly"
 \include "partes/VII.ly"
-... etc.
+@dots{} etc.
 @end example
 
 Los archivos de inclusión también pueden contener enunciados
@@ -1935,7 +2024,7 @@ libA/
   libA.ly
   A1.ly
   A2.ly
-  ...
+  @dots{}
 @end example
 
 @noindent
@@ -1945,7 +2034,7 @@ entonces el archivo de entrada, @code{libA.ly}, contiene
 #(ly:set-option 'relative-includes #t)
 \include "A1.ly"
 \include "A2.ly"
-...
+@dots{}
 % vuelta al ajuste predeterminado
 #(ly:set-option 'relative-includes #f)
 @end example
@@ -1977,7 +2066,7 @@ y en @file{principal.ly} escriba
 @example
 \include "VI.ly"
 \include "VII.ly"
-... etc.
+@dots{} etc.
 @end example
 
 Los archivos que se incluyen en muchas partituras se pueden poner en
@@ -2123,16 +2212,18 @@ música etiquetada es como sigue:
   @tab Resultado
 @item
 Música etiquetada precedida de @code{\keepWithTag #'@var{nombre}}
-@tab
-Se incluye la música no etiquetada y la música etiquetada con
-@var{nombre}; se excluye la música etiquetada con cualquier otro
-nombre de etiqueta.
+o de @code{\keepWithTag #'(@var{nombre1} @var{nombre2}@dots{})}
+@tab Se incluye la música no etiquetada y la música etiquetada con
+el nombre o nombres de etiqueta dados; se excluye la música
+etiquetada con cualquier otro nombre de etiqueta.
 @item
-Música etiquetada precedida de @code{\removeWithTag #'@var{nombre}}
+Música etiquetada precedida de 
+@code{\removeWithTag #'@var{nombre}} o 
+@code{\removeWithTag #'(@var{nombre1} @var{nombre2}@dots{})}
 @tab
-Se incluye la música no etiquetada y la música etiquetada con
-cualquier nombre de etiqueta distinto a @var{nombre}; se excluye la
-música etiquetada con @var{nombre}.
+Se incluye la música no etiquetada y la música que no está
+etiquetada con ninguno de los nombres de etiqueta dados; se
+excluye la música etiquetada con los nombres de etiqueta dados.
 @item
 Música etiquetada no precedida de @code{\keepWithTag} ni de
 @code{\removeWithTag}
@@ -2201,12 +2292,12 @@ c1-\tag #'warn ^"¡Ojo!"
 @end example
 
 Se pueden poner varias etiquetas sobre expresiones con varias entradas
-de @code{\tag}:
+de @code{\tag}, o combinando varias etiquetas en una lista de símbolos:
 
 @lilypond[quote,verbatim]
 music = \relative c'' {
   \tag #'a \tag #'both { a4 a a a }
-  \tag #'b \tag #'both { b4 b b b }
+  \tag #'(b both) { b4 b b b }
 }
 <<
 \keepWithTag #'a \music
@@ -2216,35 +2307,43 @@ music = \relative c'' {
 @end lilypond
 
 Se pueden aplicar varios filtros @code{\removeWithTag} a una sola
-expresión musical para quitar varias secciones etiquetadas con nombres
-distintos:
+expresión musical para quitar varias secciones etiquetadas con
+nombres distintos.  De forma alternativa, podemos usar una sola
+instrucción @code{\removeWithTag} con una lista de etiquetas.
 
 @lilypond[verbatim,quote]
 music = \relative c'' {
-\tag #'A { a4 a a a }
-\tag #'B { b4 b b b }
-\tag #'C { c4 c c c }
-\tag #'D { d4 d d d }
+  \tag #'A { a4 a a a }
+  \tag #'B { b4 b b b }
+  \tag #'C { c4 c c c }
+  \tag #'D { d4 d d d }
 }
-{
-\removeWithTag #'B
-\removeWithTag #'C
-\music
+\new Voice {
+  \removeWithTag #'B
+  \removeWithTag #'C
+  \music
+  \removeWithTag #'(B C)
+  \music
 }
 @end lilypond
 
-Dos o más filtros @code{\keepWithTag} aplicados a una sola expresión
-musical producen la eliminación de @emph{todas} las secciones
-etiquetadas, porque el primer filtro quita todas las secciones
-etiquetadas excepto la que se nombra, y el segundo filtro elimina
-incluso esa sección etiquetada.
-
-A vecespodemos desear dividir la música en un determinado lugar dentro
-de una expresión musical existente.  Podemos usar @code{\pushToTag} y
-@code{\appendToTag} para añadir material delante o al final de los
-@code{elements} de una construcción musical existente.  No toda
-construcción musical tiene la parte @code{elements}, pero las músicas
-secuenciaes y simultáneas son dos apuestas seguras:
+Dos o más filtros @code{\keepWithTag} aplicados a una sola
+expresión musical producen la eliminación de @emph{todas} las
+secciones etiquetadas, porque el primer filtro quita todas las
+secciones etiquetadas excepto la que se nombra, y el segundo
+filtro elimina incluso esa sección etiquetada.  Por lo general,
+querrá usar una sola instrucción @code{\keepWithTag} con una lista
+de varias etiquetas: de esta forma solamente se suprimirán las
+secciones etiquetadas que no aparezcan en @emph{ninguna} de las
+etiquetas.
+
+A veces podemos desear dividir la música en un determinado lugar
+dentro de una expresión musical existente.  Podemos usar
+@code{\pushToTag} y @code{\appendToTag} para añadir material
+delante o al final de los @code{elements} de una construcción
+musical existente.  No toda construcción musical tiene la parte
+@code{elements}, pero las músicas secuenciaes y simultáneas son
+dos apuestas seguras:
 
 @lilypond[verbatim,quote]
 test = { \tag #'here { \tag #'here <<c''>> } }
@@ -2272,16 +2371,17 @@ Referencia de la notación:
 @ref{Combinación automática de las partes},
 @ref{Inclusión de archivos de LilyPond}.
 
-@ignore
-@c This warning is more general than this placement implies.
-@c Rests are not merged whether or not they come from tagged sections.
-@c Should be deleted?  -td
-
 @knownissues
-Multiple rests are not merged if you create a score with more
-than one tagged section at the same place.
+Al llamar a @code{\relative} sobre una expresión musical obtenida
+mediante el filtrado de música con las instrucciones
+@code{\keepWithTag} o @code{\removeWithTag}, podría ocurrir que
+cambiaran las relaciones de octava, dado que solo se tendrán en
+cuenta las alturas de las notas que efectivamente permanecen en la
+expresión filtrada.  La aplicación de @code{\relative} en primer
+lugar, antes de @code{\keepWithTag} o de @code{\removeWithTag},
+evita este peligro porque en este caso @code{\relative} actúa
+sobre todas las notas tal y como se introducen.
 
-@end ignore
 
 @node Uso de ajustes globales
 @unnumberedsubsubsec Uso de ajustes globales
@@ -2576,10 +2676,10 @@ notas).  Para acelerar este proceso de corrección, es posible saltar
 la composición tipográfica de todos excepto unos pocos de los últimos
 compases.  Esto se consigue poniendo
 
-@verbatim
+@example
 showLastLength = R1*5
-\score { ... }
-@end verbatim
+\score @{ @dots{} @}
+@end example
 
 @noindent
 en nuestro archivo fuente.  Esto hará que se tracen sólo los últimos
@@ -2645,12 +2745,12 @@ fuente Gonville:
 
 @c NOTE: these images are a bit big, but that's important
 @c       for the font comparison.  -gp
-@sourceimage{Gonville_after,,,}
+@sourceimage{Gonville_after,15cm,,}
 
 Aquí hay unos compases de muestra tipografiados en la fuente Feta de
 LilyPond:
 
-@sourceimage{Gonville_before,,,}
+@sourceimage{Gonville_before,15cm,,}
 
 @subsubheading Instrucciones de instalación para MacOS
 
@@ -2706,6 +2806,7 @@ canales MIDI se reutilizarán.
 
 @menu
 * Crear archivos MIDI::
+* Instrumentos MIDI::
 * El bloque MIDI::
 * ¿Qué sale por el MIDI?::
 * Repeticiones y MIDI::
@@ -2714,7 +2815,6 @@ canales MIDI se reutilizarán.
 * El script Articulate::
 @end menu
 
-
 @node Crear archivos MIDI
 @subsection Crear archivos MIDI
 @translationof Creating MIDI files
@@ -2724,7 +2824,7 @@ Para crear un MIDI a partir de una pieza de música, escriba un bloque
 
 @example
 \score @{
-  @var{...música...}
+  @var{@dots{}música@dots{}}
   \midi @{ @}
 @}
 @end example
@@ -2736,7 +2836,7 @@ necesita una notación impresa, debe haber también un bloque
 
 @example
 \score @{
-  @var{...música...}
+  @var{@dots{}música@dots{}}
   \midi @{ @}
   \layout @{ @}
 @}
@@ -2773,40 +2873,14 @@ superior del archivo de entrada, antes del inicio de cualquier bloque
 La línea anterior establece la extensión predeterminada para los
 archivos MIDI a @code{.midi}.
 
-De forma alternativa, esta opción se puede también proporcionar en la
-línea de órdenes:
+De forma alternativa, esta opción se puede también proporcionar en
+la línea de órdenes:
 
 @example
 lilypond … -dmidi-extension=midi archivoLily.ly
 @end example
 
 
-@unnumberedsubsubsec Nombres de instrumentos
-
-@cindex instrumento, nombres de
-@funindex Staff.midiInstrument
-
-El nombre del instrumento MIDI se establece mediante la propiedad
-@code{Staff.midiInstrument}.  El nombre del instrumento se debe elegir
-de entre los que están en la lista que aparece en @ref{Instrumentos MIDI}.
-
-@example
-\new Staff @{
-  \set Staff.midiInstrument = #"glockenspiel"
-  @var{...notes...}
-@}
-@end example
-
-@example
-\new Staff \with @{midiInstrument = #"cello"@} @{
-  @var{...notes...}
-@}
-@end example
-
-Si el instrumento elegido no coincide exactamente con uno de los
-instrumentos de la lista de instrumentos MIDI, se usará el instrumento
-Piano de Cola (@code{"acoustic grand"}).
-
 @snippets
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
@@ -2839,11 +2913,39 @@ Los cambios del volumen MIDI sólo tienen lugar al principio de la
 nota, por lo que los crescendi y decrescendi no pueden afectar al
 volumen de una sola nota.
 
-No todos los reproductores de MIDI manejar adecuadamente los cambios de
-tempo de la salida MIDI.  Entre los reproductores que se sabe que
-funcionan se encuentran el Reproductor de Medios de MS Windows y
-@uref{http://@/timidity@/.sourceforge@/.net/,timidity}.
+No todos los reproductores de MIDI manejan adecuadamente los
+cambios de tempo de la salida MIDI.  Entre los reproductores que
+se sabe que funcionan se encuentran el Reproductor de Medios de MS
+Windows y @uref{http://@/timidity@/.sourceforge@/.net/,timidity}.
 
+@node Instrumentos MIDI
+@subsection Instrumentos MIDI
+@translationof MIDI Instruments
+
+@cindex instrumento, nombres de
+@funindex Staff.midiInstrument
+
+El instrumento MIDI que se quiere utilizar se establece fijando la
+propiedad @code{Staff.midiInstrument} al nombre del instrumento.
+El nombre se debe elegir de entre los que están en la lista que
+aparece en @ref{instrumentos MIDI}.
+
+@example
+\new Staff @{
+  \set Staff.midiInstrument = #"glockenspiel"
+  @var{@dots{}notas@dots{}}
+@}
+@end example
+
+@example
+\new Staff \with @{midiInstrument = #"cello"@} @{
+  @var{@dots{}notas@dots{}}
+@}
+@end example
+
+Si el instrumento elegido no coincide exactamente con uno de los
+instrumentos de la lista de instrumentos MIDI, se usará el
+instrumento Piano de Cola (@code{"acoustic grand"}).
 
 @node El bloque MIDI
 @subsection El bloque MIDI
@@ -2862,7 +2964,7 @@ indicación de tempo:
 
 @example
 \score @{
-  @var{...música...}
+  @var{@dots{}música@dots{}}
   \midi @{
     \tempo 4 = 72
   @}
@@ -2887,7 +2989,7 @@ siguientes en el bloque @code{\midi@{ @}}.
 
 @example
 \midi @{
-  ...
+  @dots{}
   \context @{
     \Voice
     \remove "Dynamic_performer"
@@ -2911,7 +3013,14 @@ dentro de un bloque de partitura definido con una instrucción
 @subsection ¿Qué sale por el MIDI?
 @translationof What goes into the MIDI output?
 
+@menu
+* Contemplado en el MIDI::
+* No contemplado en el MIDI::
+@end menu
+
+@node Contemplado en el MIDI
 @unnumberedsubsubsec Contemplado en el MIDI
+@translationof Supported in MIDI
 
 @cindex alturas en MIDI
 @cindex MIDI, alturas
@@ -2957,7 +3066,9 @@ una serie de elementos:
 @end itemize
 
 
+@node No contemplado en el MIDI
 @unnumberedsubsubsec No contemplado en el MIDI
+@translationof Unsupported in MIDI
 
 @c TODO index as above
 
@@ -3014,12 +3125,12 @@ y percent --repetición de compases--).  Por ejemplo,
 
 @example
 \score @{
-  @var{..música..}
-  \layout @{ .. @}
+  @var{@dots{}música@dots{}}
+  \layout @{ @dots{} @}
 @}
 \score @{
-  \unfoldRepeats @var{..música..}
-  \midi @{ .. @}
+  \unfoldRepeats @var{@dots{}música@dots{}}
+  \midi @{ @dots{} @}
 @}
 @end example
 
@@ -3034,29 +3145,39 @@ contexto Voice.  Es posible controlar el volumen MIDI general, el
 volumen relativo de los matices dinámicos y el volumen relativo de los
 distintos instrumentos.
 
-@unnumberedsubsubsec Indicaciones dinámicas
+@menu
+* Indicaciones dinámicas::
+* Volumen maestro MIDI::
+* Balance entre instrumentos (i)::
+* Balance entre instrumentos (ii)::
+@end menu
 
-Los matices o indicaciones de dinámica se traducen a una fracción fija
-del rango de volumen MIDI disponible.  Las fracciones predeterminadas
-se extienden desde 0.25 para @notation{ppppp} hasta 0.95 para
-@notation{fffff}.  El conjunto de indicaciones dinámicas y las
-fracciones asociadas pueden verse en @file{../scm/midi.scm}, véase
-@rlearning{Otras fuentes de información}.  Este conjunto de fracciones
-se puede cambiar o extender proporcionando una función que toma como
-argumento una indicación dinámica y devuelve la fracción requerida, y
+@node Indicaciones dinámicas
+@unnumberedsubsubsec Indicaciones dinámicas
+@translationof Dynamic marks
+
+Los matices o indicaciones de dinámica se traducen a una fracción
+fija del rango de volumen MIDI disponible.  Las fracciones
+predeterminadas se extienden desde 0.25 para @notation{ppppp}
+hasta 0.95 para @notation{fffff}.  El conjunto de indicaciones
+dinámicas y las fracciones asociadas pueden verse en
+@file{../scm/midi.scm}, véase @rlearning{Otras fuentes de
+información}.  Este conjunto de fracciones se puede cambiar o
+extender proporcionando una función que toma como argumento una
+indicación dinámica y devuelve la fracción requerida, y
 estableciendo @code{Score.dynamicAbsoluteVolumeFunction} a esta
 función.
 
 Por ejemplo, si se requiere una indicación dinámica
 @notation{rinforzando}, @code{\rfz}, ésta no tiene ningún efecto
 predeterminado sobre el volumen MIDI, pues no está incluida en el
-conjunto predeterminado.  De igual manera, si se define una indicación
-dinámica nueva con @code{make-dynamic-script}, ésta tampoco estará
-incluida en el conjunto predeterminado.  El ejemplo siguiente muestra
-cómo hay que añadir el volumen MIDI para estas indicaciones dinámicas.
-La función Scheme establece la fracción a 0.9 si se encuentra una
-indicación dinámica rfz, y en caso contrario llama a la función
-predeterminada.
+conjunto predeterminado.  De igual manera, si se define una
+indicación dinámica nueva con @code{make-dynamic-script}, ésta
+tampoco estará incluida en el conjunto predeterminado.  El ejemplo
+siguiente muestra cómo hay que añadir el volumen MIDI para estas
+indicaciones dinámicas.  La función Scheme establece la fracción a
+0.9 si se encuentra una indicación dinámica rfz, y en caso
+contrario llama a la función predeterminada.
 
 @lilypond[verbatim,quote]
 #(define (myDynamics dynamic)
@@ -3085,23 +3206,25 @@ fracciones, sería mejor usar el procedimiento
 @file{../scm/midi.scm} y la tabla asociada como modelo.  El último
 ejemplo de esta sección muestra cómo se puede hacer esto.
 
+@node Volumen maestro MIDI
 @unnumberedsubsubsec Volumen maestro MIDI
+@translationof Overall MIDI volume
 
-El volumen general máximo y mínimo de las indicaciones dinámicas de
-MIDI se controla estableciendo valores para las propiedades
+El volumen general máximo y mínimo de las indicaciones dinámicas
+de MIDI se controla estableciendo valores para las propiedades
 @code{midiMinimumVolume} y @code{midiMaximumVolume} en el nivel de
-@code{Score}.  Estas propiedades tienen efecto solamente sobre las
-indicaciones dinámicas, por ello si queremos que tengan validez desde
-el comienzo de la partitura, se debe colocar allí una indicación de
-dinámica.  La fracción que corresponde a cada indicación dinámica se
-modifica con esta fórmula:
+@code{Score}.  Estas propiedades tienen efecto solamente al inicio
+de una voz y sobre las indicaciones dinámicas.  La fracción que
+corresponde a cada indicación dinámica se modifica con esta
+fórmula:
 
 @example
 midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fracción
 @end example
 
-En el ejemplo siguiente, el rango de intensidad dinámica del volumen
-general MIDI está limitado al intervalo desde 0.2 hasta 0.5.
+En el ejemplo siguiente, el rango de intensidad dinámica del
+volumen general MIDI está limitado al intervalo desde 0.2 hasta
+0.5.
 
 @lilypond[verbatim,quote]
 \score {
@@ -3138,17 +3261,18 @@ general MIDI está limitado al intervalo desde 0.2 hasta 0.5.
 }
 @end lilypond
 
+@node Balance entre instrumentos (i)
 @unnumberedsubsubsec Balance entre instrumentos (i)
+@translationof Equalizing different instruments (i)
 
-Si las propiedades de volumen MIDI máximo y mínimo están establecidas
-en el contexto @code{Staff} se pueden controlar los volúmenes
-relativos de los instrumentos MIDI.  Esto proporciona un ecualizador
-de instrumentos básico que puede realzar significativamente la calidad
-de la salida MIDI.
+Si las propiedades de volumen MIDI máximo y mínimo están
+establecidas en el contexto @code{Staff} se pueden controlar los
+volúmenes relativos de los instrumentos MIDI.  Esto proporciona un
+ecualizador de instrumentos básico que puede realzar
+significativamente la calidad de la salida MIDI.
 
-En este ejemplo se reduce el volumen del clarinete con relación al de
-la flauta.  Debe haber una indicación dinámica en la primera nota de
-cada instrumento para que esto funcione correctamente.
+En este ejemplo se reduce el volumen del clarinete con relación al
+de la flauta.
 
 @lilypond[verbatim,quote]
 \score {
@@ -3184,28 +3308,33 @@ cada instrumento para que esto funcione correctamente.
 }
 @end lilypond
 
+
+@node Balance entre instrumentos (ii)
 @unnumberedsubsubsec Balance entre instrumentos (ii)
+@translationof Equalizing different instruments (ii)
 
 Si las propiedades de volumen MIDI máximo y mínimo no están
-establecidas, de forma predeterminada LilyPond aplica un pequeño grado
-de ecualización a algunos instrumentos.  Los instrumentos y la
-ecualización que se aplica se muestra en la tabla
+establecidas, de forma predeterminada LilyPond aplica un pequeño
+grado de ecualización a algunos instrumentos.  Los instrumentos y
+la ecualización que se aplica se muestra en la tabla
 @notation{instrument-equalizer-alist} en @file{../scm/midi.scm}.
 
-El ecualizador básico predeterminado se puede sustituir estableciendo
-@code{instrumentEqualizer} en el contexto @code{Score} a un
-procedimiento Scheme nuevo que acepte el nombre de un instrumento MIDI
-como único argumento y devuelva un par de fracciones que dan los
-volúmenes máximo y mínimo que se aplican a dicho instrumento.  Esta
-sustitución se hace de la misma forma que mostramos para restablecer
-la fracción de volumen absoluto @code{dynamicAbsoluteVolumeFunction}
-al comienzo de esta sección.  El ecualizador predeterminado,
+El ecualizador básico predeterminado se puede sustituir
+estableciendo @code{instrumentEqualizer} en el contexto
+@code{Score} a un procedimiento Scheme nuevo que acepte el nombre
+de un instrumento MIDI como único argumento y devuelva un par de
+fracciones que dan los volúmenes máximo y mínimo que se aplican a
+dicho instrumento.  Esta sustitución se hace de la misma forma que
+mostramos para restablecer la fracción de volumen absoluto
+@code{dynamicAbsoluteVolumeFunction} al comienzo de esta sección.
+El ecualizador predeterminado,
 @notation{default-instrument-equalizer}, en
 @file{../scm/midi.scm}, muestra cómo se puede escribir tal
 procedimiento.
 
-El ejemplo siguiente establece los volúmenes relativos de la flauta y
-del clarinete a los mismos valores que el ejemplo anterior.
+El ejemplo siguiente establece los volúmenes relativos de la
+flauta y del clarinete a los mismos valores que el ejemplo
+anterior.
 
 @lilypond[verbatim,quote]
 #(define my-instrument-equalizer-alist '())
@@ -3287,27 +3416,28 @@ copied out and compiled to test microtones in your MIDI player.
 @subsection Percusión en MIDI
 @translationof Percussion in MIDI
 
-La notación de los instrumentos de percusión se realiza normalmente en
-un contexto @code{DrumStaff} y cuando se hace de esta forma se les da
-salida correctamente por el canal MIDI@tie{}10, pero ciertos
-instrumentos de percusión de altura determinada, como el xilófono,
-marimba, vibráfono, timbales, etc., se tratan como instrumentos
-@qq{normales} y la música para estos instrumentos se debe introducir
-en contextos de @code{Staff} normales, no en un contexto
-@code{DrumStaff}, para obtener la salida MIDI correcta.
+La notación de los instrumentos de percusión se realiza
+normalmente en un contexto @code{DrumStaff} y cuando se hace de
+esta forma se les da salida correctamente por el canal
+MIDI@tie{}10, pero ciertos instrumentos de percusión de altura
+determinada, como el xilófono, marimba, vibráfono, timbales, etc.,
+se tratan como instrumentos @qq{normales} y la música para estos
+instrumentos se debe introducir en contextos de @code{Staff}
+normales, no en un contexto @code{DrumStaff}, para obtener la
+salida MIDI correcta.
 
 Ciertos sonidos de altura indeterminada que están incluidos en el
 estándar General MIDI, como el tom melódico, el tambor taiko, los
 tambores sintéticos, etc., no se pueden acceder a través del canal
-MIDI@tie{}10, por lo que la notación para dichos instrumentos se debe
-introducir también en un contexto normal de @code{Staff}, utilizando
-las alturas normales adecuadas.
+MIDI@tie{}10, por lo que la notación para dichos instrumentos se
+debe introducir también en un contexto normal de @code{Staff},
+utilizando las alturas normales adecuadas.
 
 Muchos instrumentos de percusión no están incluidos dentro del
-estándar General MIDI, p.ej. las castañuelas.  El método más
-fácil (aunque no satisfactorio) de producir una salida MIDI al
-escribir para estos instrumentos es sustituirlos por el sonido más
-parecido del conjunto estándar.
+estándar General MIDI, p.ej. las castañuelas.  El método más fácil
+(aunque no satisfactorio) de producir una salida MIDI al escribir
+para estos instrumentos es sustituirlos por el sonido más parecido
+del conjunto estándar.
 
 @c TODO Expand with examples, and any other issues
 
@@ -3322,16 +3452,16 @@ golpe lateral de baqueta (@emph{sidestick}).
 @subsection El script Articulate
 @translationof The Articulate script
 
-Es posible obtener una salida MIDI más real si se utiliza el script
-Articulate.  Éste trata de tener en cuenta las articulaciones
-(ligaduras de expresión, picados, etc), mediante la sustitución de las
-notas con secuencias musicales de silencios y notas escaladas en el
-tiempo de forma apropiada.  También trata de desplegar los trinos,
-grupetos circulares, etc. y responder a las indicaciones de
-rallentando y accelerando.
+Es posible obtener una salida MIDI más real si se utiliza el
+script Articulate.  Éste trata de tener en cuenta las
+articulaciones (ligaduras de expresión, picados, etc), mediante la
+sustitución de las notas con secuencias musicales de silencios y
+notas escaladas en el tiempo de forma apropiada.  También trata de
+desplegar los trinos, grupetos circulares, etc. y responder a las
+indicaciones de rallentando y accelerando.
 
-Para utilizar el script Articulate, tenemos que incluirlo al principio
-de nuestro archivo de entrada:
+Para utilizar el script Articulate, tenemos que incluirlo al
+principio de nuestro archivo de entrada:
 
 @example
 \include "articulate.ly"
@@ -3341,18 +3471,18 @@ y en la sección @code{\score}, hacer lo siguiente:
 
 @example
 \unfoldRepeats \articulate <<
-       resto de la partitura...
+       resto de la partitura@dots{}
 >>
 @end example
 
-Después de alterar el código de entrada de esta manera el resultado
-visual se altera profundamente, pero el bloque @code{\midi} estándar
-produce un archivo MIDI mejorado.
+Después de alterar el código de entrada de esta manera el
+resultado visual se altera profundamente, pero el bloque
+@code{\midi} estándar produce un archivo MIDI mejorado.
 
-Si bien no es esencial para que funcione el script Articulate, podemos
-insertar la instrucción @code{\unfoldRepeats} según aparece en el
-ejemplo anterior, dado que habilita la ejecución de abreviaturas tales
-como los @notation{trinos}.
+Si bien no es esencial para que funcione el script Articulate,
+podemos insertar la instrucción @code{\unfoldRepeats} según
+aparece en el ejemplo anterior, dado que habilita la ejecución de
+abreviaturas tales como los @notation{trinos}.
 
 @knownissues
 
@@ -3364,9 +3494,8 @@ Articulate acorta los acordes, y ciertos fragmentos de música
 @section Extraer información musical
 @translationof Extracting musical information
 
-Además de crear un resultado visual y MIDI,
-LilyPond es capaz de presentar información
-musical en forma de texto.
+Además de crear un resultado visual y MIDI, LilyPond es capaz de
+presentar información musical en forma de texto.
 
 @menu
 * Impresión del código de notación de LilyPond::
@@ -3380,10 +3509,10 @@ musical en forma de texto.
 @translationof Displaying LilyPond notation
 
 @funindex \displayLilyMusic
-La impresión textual de una expresión musical en notación de LilyPond
-puede hacerse con la función musical @code{\displayLilyMusic}.
-Para ver el resultado, lo más usual es llamar a LilyPond
-mediante la línea de órdenes.  Por ejemplo,
+La impresión textual de una expresión musical en notación de
+LilyPond puede hacerse con la función musical
+@code{\displayLilyMusic}.  Para ver el resultado, lo más usual es
+llamar a LilyPond mediante la línea de órdenes.  Por ejemplo,
 
 @example
 @{
@@ -3397,11 +3526,11 @@ imprime lo siguiente:
 @{ a,4 cis e fis g @}
 @end example
 
-De forma predeterminada, LilyPond imprime estos mensajes en la consola
-junto al resto de los mensajes de la compilación de LilyPond.
-Para discernir entre estos mensajes y
-guardar el resultado de @code{\display@{MATERIAL@}}, redireccione la
-salida hacia un archivo.
+De forma predeterminada, LilyPond imprime estos mensajes en la
+consola junto al resto de los mensajes de la compilación de
+LilyPond.  Para discernir entre estos mensajes y guardar el
+resultado de @code{\displayLilyMusic}, redireccione la salida
+hacia un archivo.
 
 @example
 lilypond archivo.ly >resultado.txt
@@ -3420,18 +3549,19 @@ Véase @rextend{Presentación de las expresiones musicales}.
 @translationof Saving music events to a file
 
 Los eventos musicales se pueden guardar en un archivo pentagrama a
-pentagrama mediante la inclusión de un archivo en nuestra partitura
-principal.
+pentagrama mediante la inclusión de un archivo en nuestra
+partitura principal.
 
 @example
 \include "event-listener.ly"
 @end example
 
 De esta forma se crean uno o más archivos llamados
-@file{FILENAME-STAFFNAME.notes} ó @file{FILENAME-unnamed-staff.notes}
-para cada pentagrama.  Observe que si tiene más de un pentagrama sin
-nombre, los eventos de todos los pentagramas se mezclarán entre sí
-dentro del mismo archivo.  El resultado tiene el aspecto siguiente:
+@file{FILENAME-STAFFNAME.notes} ó
+@file{FILENAME-unnamed-staff.notes} para cada pentagrama.  Observe
+que si tiene más de un pentagrama sin nombre, los eventos de todos
+los pentagramas se mezclarán entre sí dentro del mismo archivo.
+El resultado tiene el aspecto siguiente:
 
 @example
 0.000   note     57       4   p-c 2 12
@@ -3444,22 +3574,22 @@ dentro del mismo archivo.  El resultado tiene el aspecto siguiente:
 @end example
 
 La sintaxis consiste en una línea delimitada por caracteres de
-tabulación, con dos campos fijos en cada línea seguidos de parámetros
-opcionales.
+tabulación, con dos campos fijos en cada línea seguidos de
+parámetros opcionales.
 
 @example
-@var{tiempo}  @var{tipo}  @var{...parámetros...}
+@var{tiempo}  @var{tipo}  @var{@dots{}parámetros@dots{}}
 @end example
 
-Esta información se puede leer fácilmente por parte de otros programas
-como guiones de Python, y pueden ser muy útiles para aquellos
-investigadores que desean realizar un análisis musical o hacer
-experimientos de reproducción con LilyPond.
+Esta información se puede leer fácilmente por parte de otros
+programas como guiones de Python, y pueden ser muy útiles para
+aquellos investigadores que desean realizar un análisis musical o
+hacer experimientos de reproducción con LilyPond.
 
 @knownissues
 No todos los eventos musicales de lilypond están contemplados por
 @file{event-listener.ly}.  Se pretende que sea una @qq{prueba de
 concepto} bien realizada.  Si algunos eventos que quiere ver no
-aparecen incluidos, copie @file{event-listener.ly} en su carpeta de
-lilypond y modifique el archivo de forma que produzca la información
-que desea.
+aparecen incluidos, copie @file{event-listener.ly} en su carpeta
+de lilypond y modifique el archivo de forma que produzca la
+información que desea.
index e5b03081b611eda31f8e29944cd839a6168239a8..ef4962d579ec86537f4c9b5608bfbde2949aecca 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: a8855343a15503ca5bb4a30d41a3bff9c60e66f2
+    Translation of GIT committish: a2030063498b24f5b08e10b0e429a12a82abbf2d
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @node Teclados y otros instrumentos de varios pentagramas
 @section Teclados y otros instrumentos de varios pentagramas
@@ -216,7 +216,7 @@ cruzan de un pentagrama a otro:
   \new Staff = "up" {
     \voiceOne
     % Make space for fingering in the cross-staff voice
-    \once\override DynamicLineSpanner #'staff-padding = #3.4
+    \once\override DynamicLineSpanner.staff-padding = #4
     e''2\p\< d''\>
     c''1\!
   }
@@ -611,14 +611,14 @@ que pueden estar al unísono, una octava por encima, o una octava por
 debajo de la altura escrita.  Cada fabricante de acordeones utiliza
 distintos nombres para los @notation{cambios} que seleccionan las
 distintas combinaciones de lengüetas, como @notation{oboe},
-@notation{musette} o @notation{bandoneón}, de manera que se ha venido
-en usar un sistema de signos para simplificar las instrucciones de
+@notation{musette} o @notation{bandoneón}, de manera que ha entrado
+en uso un sistema de signos para simplificar las instrucciones de
 ejecución.
 
 @snippets
 
 @lilypondfile[verbatim,quote,texidoc,doctitle]
-{accordion-discant-symbols.ly}
+{accordion-registers.ly}
 
 @seealso
 Fragmentos de código:
index e02fe8fa59d22859aef16ec87ea083872f420c26..a2e44a57c9d149453b809dd4049044ca21775023 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 00cd4ff0b8dc4978344ba966bec06ddbc445f7e9
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -20,7 +20,7 @@
 * Afinaciones de cuerdas predefinidas::
 * Diagramas predefinidos de posiciones::
 * Tamaños de página predefinidos::
-* Instrumentos MIDI::
+* instrumentos MIDI::
 * Lista de colores::
 * La tipografía Feta::
 * Estilos de cabezas de nota::
@@ -704,9 +704,9 @@ Los tamaños de página se definen en el archivo @file{scm/paper.scm}
 (74 x 52 mm)
 @end table
 
-
-@node Instrumentos MIDI
-@appendixsec Instrumentos MIDI
+@c lowercase to avoid duplicate node. FV
+@node instrumentos MIDI
+@appendixsec instrumentos MIDI
 @translationof MIDI instruments
 
 A continuación figura una lista con los nombres que se pueden utilizar
@@ -1637,7 +1637,7 @@ mensaje de error adecuado.  Las agrupaciones sintácticas y las reglas
 para construir estas agrupaciones a partir de sus elementos
 constituyentes para la sintaxis de LilyPond están definidas en
 @file{lily/parser.yy} y se muestran en la forma normal de Backus (BNF)
-dentro de @ref{Gramática de LilyPond}.  Este archivo se usa para
+dentro de @rcontrib{LilyPond grammar}.  Este archivo se usa para
 construir el analizador sintáctico durante la compilación del programa
 por parte del generador de analizadores sintácticos, Bison.  Es parte
 del código fuente y no se incluye dentro de la instalación binaria de
@@ -1656,7 +1656,6 @@ LilyPond.
 @cindex modo
 @cindex output-count
 @cindex output-suffix
-@cindex parseStringResult
 @cindex partCombineListener
 @cindex pitchnames
 @cindex toplevel-bookparts
@@ -1684,7 +1683,6 @@ LilyPond utiliza las siguientes variables del analizador sintáctico:
 @item mode
 @item output-count
 @item output-suffix
-@item parseStringResult
 @item partCombineListener
 @item pitchnames
 @item toplevel-bookparts
index dc5d3ac1f73ecb0a3ac50fc7fa2cac14af74d166..a0ac068525bb50cf250e0e370eca18e74b42dae1 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 44011e382e91f43fb6752b3fbbf8d8984131a565
+    Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Percusión
 @section Percusión
@@ -265,17 +265,16 @@ mus = \drummode {
   << \new DrumStaff \with {
        \remove "Bar_engraver"
        \remove "Time_signature_engraver"
-       \override Stem #'transparent = ##t
-       \override Flag #'transparent = ##t
-       \override Stem #'Y-extent = ##f
+       \hide Stem
+       \override Stem.Y-extent = ##f
      } \mus
      \new Lyrics \nam
   >>
   \layout {
     \context {
       \Score
-      \override LyricText #'font-family = #'typewriter
-      \override BarNumber #'transparent =##T
+      \override LyricText.font-family = #'typewriter
+      \override BarNumber.transparent =##T
     }
   }
 }
@@ -298,16 +297,15 @@ mus = \drummode { timh ssh timl ssl cb s16 }
   \new DrumStaff \with {
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
-    \override StaffSymbol #'line-count = #2
-    \override StaffSymbol #'staff-space = #2
-    \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0)
+    \hide Stem
+    \override Stem.Y-extent = ##f
+    \override StaffSymbol.line-count = #2
+    \override StaffSymbol.staff-space = #2
+    \override VerticalAxisGroup.minimum-Y-extent = #'(-3.0 . 4.0)
     drumStyleTable = #timbales-style
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -325,16 +323,15 @@ mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 }
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
     drumStyleTable = #congas-style
-    \override StaffSymbol #'line-count = #2
+    \override StaffSymbol.line-count = #2
 
     %% this sucks; it will lengthen stems.
-    \override StaffSymbol #'staff-space = #2
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \override StaffSymbol.staff-space = #2
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -351,17 +348,16 @@ mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 }
   \new DrumStaff \with {
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
-    \override StaffSymbol #'line-count = #2
+    \override StaffSymbol.line-count = #2
     drumStyleTable = #bongos-style
 
     %% this sucks; it will lengthen stems.
-    \override StaffSymbol #'staff-space = #2
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \override StaffSymbol.staff-space = #2
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -379,14 +375,13 @@ mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 }
   \new DrumStaff \with{
     \remove "Bar_engraver"
     drumStyleTable = #percussion-style
-    \override StaffSymbol #'line-count = #1
+    \override StaffSymbol.line-count = #1
     \remove "Time_signature_engraver"
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -439,10 +434,10 @@ alto) y wbl (@emph{woodblock-low} bloque bajo)
 woodstaff = {
   % This defines a staff with only two lines.
   % It also defines the positions of the two lines.
-  \override Staff.StaffSymbol #'line-positions = #'(-2 3)
+  \override Staff.StaffSymbol.line-positions = #'(-2 3)
 
   % This is necessary; if not entered, the barline would be too short!
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
 }
 
 \new DrumStaff {
@@ -460,7 +455,7 @@ woodstaff = {
 @end lilypond
 
 Observe que en este caso especial se debe alterar la longitud de la
-línea divisoria con @code{\override Staff.BarLine #'bar-extent #'(de . a)}.
+línea divisoria con @code{\override Staff.BarLine.bar-extent #'(de . a)}.
 En caso contrario resulta demasiado corta.  También debe definir las
 posiciones de las dos líneas del pentagrama.  Para más información
 sobre estos delicados asuntos, consulte @ref{El símbolo del pentagrama}.
@@ -471,8 +466,8 @@ Una pandereta, escrita mediante @q{tamb} (@emph{tambourine}):
 #(define mydrums '((tambourine default #t 0)))
 
 tambustaff = {
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Tambourine"
 }
 
@@ -498,8 +493,8 @@ Música para gong, introducida con @q{tt} (tam-tam):
 #(define mydrums '((tamtam default #t 0)))
 
 tamtamstaff = {
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Tamtam"
 }
 
@@ -521,9 +516,9 @@ Dos campanas, introducidas con @q{cb} (@emph{cowbell}, cencerro) y
                    (cowbell  default #t -2)))
 
 bellstaff = {
-  \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3)
+  \override DrumStaff.StaffSymbol.line-positions = #'(-2 3)
   \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Different Bells"
 }
 
index 1b3233ea83d5a9fde62abd1831bbd45b7a7b3710..da52953fd269f06245c27dab651aa077f50de8f9 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 35d565c89b853ed87b1bb2feb59f6ce8bef6263b
+    Translation of GIT committish: fa12d929326daf49f84838a95b0570b32e4b3400
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.18"
 
 
 @node Alturas
@@ -91,6 +91,18 @@ baja la altura una octava.
 }
 @end lilypond
 
+@funindex absolute
+@funindex \absolute
+Se puede indicar explícitamente que la música está en notación de
+octava absoluta si se precede con @code{\absolute}:
+
+@example
+\absolute @var{musicexpr}
+@end example
+
+se interpreta en el modo de entrada de octava absoluta
+independientemende de en qué contexto aparece.
+
 @seealso
 Glosario musical:
 @rglos{Pitch names}.
@@ -112,13 +124,14 @@ Fragmentos de código:
 @funindex relative
 @funindex \relative
 
-Cuando las octavas se especifican en modo absoluto, es fácil poner por
-accidente una nota en la octava equivocada.  El modo de octavas
-relativas reduce estos errores porque casi todo el tiempo es
-innecesario indicar octava alguna.  Es más, en el modo absoluto puede
-ser difícil encontrar un error aislado, mientras que en el modo
-relativo un solo fallo hace que el resto de la pieza esté una octava
-más alta o más baja de lo que debería.
+La entrada de octava absoluta requere que se especifique la octava
+para todas y cada una de las notas.  En contraste con ello, el
+modo de entrada de octava relativa especifica cada octava en
+relación a la nota anterior: si se cambia la octava de una nota
+ello afectará a todas las notas siguientes.
+
+El modo relativo de notas se debe introducir de forma explícita
+usando la instrucción @code{\relative}:
 
 @example
 \relative @var{altura_inicial} @var{expresión_musical}
@@ -147,9 +160,29 @@ Se pueden usar varias marcas de cambio de octava.  Por ejemplo,
 @item
 La altura de la primera nota es relativa a
 @code{@var{altura_inicial}}.  @code{@var{altura_inicial}} se especifica en
-modo de octava absoluta, y se recomienda que sea un Do (una octava de
-@code{c}).
+modo de octava absoluta.  ¿Qué opciones tienen sentido?
+
+@table @asis
+@item @code{c} (Do), en cualquier octava
+La identificación del Do central con @code{c'} es algo bastante
+básico, por lo que tiende a ser fácil encontrar octavas de
+@code{c}.  Si nuestra música comienza con @code{gis} (un Sol
+sostenido) por encima de @code{c'''}, tendríamos que escribir algo
+como @code{\relative c''' @{ gis' @dots{}  @}}
+
+@item una nota que está una o más octavas de la primera nota de dentro
+Escribir @code{\relative gis''' @{ gis @dots{} @}} hace que sea
+fácil determinar la altura absoluta de la primera nota de dentro.
+
+@item ninguna altura de inicio explícita
+Esta opción (concretamente, escribir @code{\relative @{ gis'''
+@dots{} @}}) se puede ver como una versión más compacta de la
+opción anterior: la primera nota de dentro se escribe ella misma
+en altura absoluta.  Esto resulta ser equivalente a elegir
+@code{f} (Fa) como la altura de referencia.
+@end table
 
+La documentación suele utilizar la primera opción.
 @end itemize
 
 Aquí podemos ver el modo relativo en acción:
@@ -288,12 +321,6 @@ Referencia de funcionamiento interno:
 @funindex \relative
 @funindex relative
 
-@c DEPRECATED
-Si no se especifica ninguna @code{@var{altura_inicial}} para
-@code{\relative}, entonces se supone que es@tie{}@code{c'}.  Sin
-embargo, ésta es una opción en desuso y podría desaparecer en
-versiones posteriores, por lo que su utilización está desaconsejada.
-
 
 @node Alteraciones accidentales
 @unnumberedsubsubsec Alteraciones accidentales
@@ -384,13 +411,15 @@ cis cis cis! cis? c c c! c?
 Las alteraciones sobre notas unidas por ligadura sólo se imprimen al
 comienzo de un sistema:
 
-@lilypond[verbatim,quote,relative=2]
+@lilypond[verbatim,quote,relative=2,ragged-right]
 cis1~ cis~
 \break
 cis
 @end lilypond
 
+
 @snippets
+
 @lilypondfile[verbatim,quote,texidoc,doctitle,ragged-right]
 {hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly}
 
@@ -470,9 +499,9 @@ siguientes:
   @tab c d e f g a b h
 @item @code{english}
   @tab c d e f g a bf b
-@item @code{espanol}
+@item @code{espanol} o @code{español}
   @tab do re mi fa sol la sib si
-@item @code{italiano}
+@item @code{italiano} o @code{français}
   @tab do re mi fa sol la sib si
 @item @code{norsk}
   @tab c d e f g a b h
@@ -503,9 +532,9 @@ pueden también variar dependiendo del idioma:
 @item @code{english}
   @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp
     @tab -ff/-flatflat
-@item @code{espanol}
+@item @code{espanol} o @code{español}
   @tab -s @tab -b @tab -ss/-x @tab -bb
-@item @code{italiano}
+@item @code{italiano} o @code{français}
   @tab -d @tab -b @tab -dd @tab -bb
 @item @code{norsk}
   @tab -iss/-is @tab -ess/-es @tab -ississ/-isis
@@ -1143,9 +1172,11 @@ c2 c
 
 @cindex transpositoras, claves
 @cindex clave transpositora
-@cindex octava, transposición de
+@cindex octava, transposición
+@cindex transposición, de octava, opcional
+@cindex octava, transposición, opcional
 @cindex coral, clave de tenor
-@cindex tenor coral, clave
+@cindex tenor, clave de, coral
 
 Al añadir @code{_8} o @code{^8} al nombre de la clave, la clave se
 transpone una octava hacia abajo o hacia arriba, respectivamente, y
@@ -1169,6 +1200,19 @@ c2 c
 c2 c
 @end lilypond
 
+Se puede obtener una indicación de octavación opcional encerrando
+el argumento numérico entre paréntesis o corchetes rectos:
+
+@lilypond[verbatim,quote,relative=1]
+\clef "treble_(8)"
+c2 c
+\clef "bass^[15]"
+c2 c
+@end lilypond
+
+Las alturas se imprimen como si el argumento numérico no tuviera
+los paréntesis o corchetes.
+
 Ciertas claves para usos especiales se describen en @ref{Claves de la
 música mensural}, @ref{Claves de canto gregoriano}, @ref{Tablaturas
 predeterminadas} y @ref{Tablaturas personalizadas}.  Para mezclar
@@ -1177,6 +1221,7 @@ consulte las funciones @code{\cueClef} y @code{\cueDuringWithClef}
 en la sección @ref{Formateo de las notas guía}.
 
 @snippets
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {tweaking-clef-properties.ly}
 
@@ -1194,9 +1239,25 @@ Fragmentos de código:
 Referencia de funcionamiento interno:
 @rinternals{Clef_engraver},
 @rinternals{Clef},
-@rinternals{OctavateEight},
+@rinternals{ClefModifier},
 @rinternals{clef-interface}.
 
+@knownissues
+Los números de octavación adjuntos a las claves se tratan como
+grobs distintos.  Así pues, cualquier @code{\override}
+(sobreescritura) efectuada al objeto @var{Clef} deberá aplicarse
+también al grob @var{ClefModifier} como un @code{\override}
+diferente.
+
+@lilypond[fragment,quote,relative=1]
+\new Staff \with {
+  \override ClefModifier.color = #red
+  \override Clef.color = #blue
+}
+
+\clef "treble_8" c4
+@end lilypond
+
 
 @node Armadura de la tonalidad
 @unnumberedsubsubsec Armadura de la tonalidad
@@ -1272,7 +1333,41 @@ f
 fis
 @end lilypond
 
+Se pueden definir modos adicionales, escribiendo una lista con la
+alteración que lleva cada nota de la escala cuando el modo
+comienza en Do.
+
+@lilypond[verbatim,quote]
+freygish = #`((0 . ,NATURAL) (1 . ,FLAT) (2 . ,NATURAL)
+    (3 . ,NATURAL) (4 . ,NATURAL) (5 . ,FLAT) (6 . ,FLAT))
+
+\relative c' {
+  \key c \freygish c4 des e f
+  \bar "||" \key d \freygish d es fis g
+}
+@end lilypond
+
+Las alteraciones de la armadura de tonalidad se pueden imprimir en
+distinta octava que en sus posiciones tradicionales, o en más de
+una octava, usando las propiedades @code{flat-positions} y
+@code{sharp-positions} de @code{KeySignature}.  Las entradas en
+estas propiedades especifican el rango de posiciones de pentagrama
+en que se imprimirán las alteraciones.  Si en una entrada se
+especifica una sola posición, las alteraciones se colocan dentro
+de la octava que termina en dicha posición del pentagrama.
+
+@lilypond[verbatim, quote,relative=0]
+\override Staff.KeySignature.flat-positions = #'((-5 . 5))
+\override Staff.KeyCancellation.flat-positions = #'((-5 . 5))
+\clef bass \key es \major es g bes d
+\clef treble \bar "||" \key es \major es g bes d
+
+\override Staff.KeySignature.sharp-positions = #'(2)
+\bar "||" \key b \major b fis b2
+@end lilypond
+
 @snippets
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly}
 
@@ -1296,7 +1391,6 @@ Referencia de funcionamiento interno:
 @rinternals{Key_performer},
 @rinternals{KeyCancellation},
 @rinternals{KeySignature},
-@rinternals{key-cancellation-interface},
 @rinternals{key-signature-interface}.
 
 
@@ -1331,9 +1425,13 @@ a2 b
 @end lilypond
 
 @snippets
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {ottava-text.ly}
 
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{adding-an-ottava-marking-to-a-single-voice.ly}
+
 @seealso
 Glosario musical:
 @rglos{octavation}.
@@ -1416,18 +1514,31 @@ La @code{\transposition} se puede cambiar durante la pieza.  Por
 ejemplo, un clarinetista puede cambiar del clarinete en La al
 clarinete en Si bemol.
 
-@lilypond[verbatim,quote,relative=2]
-\set Staff.instrumentName = #"Cl (A)"
-\key a \major
-\transposition a
-c d e f
-\textLengthOn
-<>^\markup { Switch to B\flat clarinet }
-R1
-
-\key bes \major
-\transposition bes
-c2 g
+@lilypond[verbatim,quote]
+flute = \relative c'' {
+  \key f \major
+  \cueDuring #"clarinet" #DOWN {
+    R1 _\markup\tiny "clarinet"
+    c4 f e d
+    R1 _\markup\tiny "clarinet"
+  }
+}
+clarinet = \relative c'' {
+  \key aes \major
+  \transposition a
+  aes4 bes c des
+  R1^\markup { muta in B\flat }
+  \key g \major
+  \transposition bes
+  d2 g,
+}
+\addQuote "clarinet" \clarinet
+<<
+  \new Staff \with { instrumentName = #"Flute" }
+    \flute
+  \new Staff \with { instrumentName = #"Cl (A)" }
+    \clarinet
+>>
 @end lilypond
 
 @seealso
@@ -1463,7 +1574,7 @@ qué estilo de alteraciones usar.  Esta función se invoca como sigue:
 
 @example
 \new Staff <<
-  \accidentalStyle "voice"
+  \accidentalStyle voice
   @{ @dots{} @}
 >>
 @end example
@@ -1477,7 +1588,7 @@ usar el mismo estilo en todos los pentagramas del @code{StaffGroup} en
 curso, use
 
 @example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
 @end example
 
 Están contemplados los siguientes estilos de alteración.  Para dar una
@@ -1519,11 +1630,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1533,12 +1644,13 @@ musicB = {
 Observe que las últimas líneas de este ejemplo se pueden sustituir por
 las siguientes, siempre y cuando queramos usar el mismo estilo en los
 dos pentagramas.
+
 @example
 \new PianoStaff @{
   <<
     \context Staff = "up" @{
       %%% cambie la línea siguiente como desee:
-      \accidentalStyle #'Score "default"
+      \accidentalStyle Score.default
       \musicA
     @}
     \context Staff = "down" @{
@@ -1599,11 +1711,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1672,11 +1784,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicB
     }
   >>
@@ -1737,11 +1849,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicB
     }
   >>
@@ -1799,11 +1911,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicB
     }
   >>
@@ -1864,11 +1976,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicB
     }
   >>
@@ -1925,11 +2037,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicB
     }
   >>
@@ -1989,7 +2101,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano"
+      \accidentalStyle piano
       \musicA
     }
     \context Staff = "down" {
@@ -2010,7 +2122,7 @@ musicB = {
 
 @funindex piano-cautionary
 
-Igual que @code{\accidentalStyle "piano"} pero con las
+Igual que @code{\accidentalStyle piano} pero con las
 alteraciones añadidas compuestas como de precaución.
 
 @lilypond[quote]
@@ -2049,7 +2161,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano-cautionary"
+      \accidentalStyle piano-cautionary
       \musicA
     }
     \context Staff = "down" {
@@ -2107,11 +2219,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicB
     }
   >>
@@ -2164,11 +2276,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicB
     }
   >>
@@ -2224,11 +2336,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicB
     }
   >>
@@ -2281,11 +2393,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicB
     }
   >>
@@ -2340,11 +2452,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicB
     }
   >>
@@ -2402,12 +2514,12 @@ musicB = {
   <<
     \context Staff = "up" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicA
     }
     \context Staff = "down" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicB
     }
   >>
@@ -2460,11 +2572,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicB
     }
   >>
@@ -2519,11 +2631,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicB
     }
   >>
@@ -2569,7 +2681,7 @@ natural de la casilla de segunda vez no necesita becuadro:
 
 @lilypond[quote]
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2586,12 +2698,12 @@ cambie localmente el estilo de alteraciones a @code{forget}:
 
 @lilypond[verbatim,quote]
 forget = #(define-music-function (parser location music) (ly:music?) #{
-  \accidentalStyle "forget"
+  \accidentalStyle forget
   #music
-  \accidentalStyle "modern"
+  \accidentalStyle modern
 #})
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2708,13 +2820,13 @@ Se puede modificar la apariencia de la cabeza de las notas:
 
 @lilypond[verbatim,quote,relative=2]
 c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
 c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
 a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
 a b
-\revert NoteHead #'style
+\revert NoteHead.style
 c4 d e f
 @end lilypond
 
@@ -2751,11 +2863,10 @@ se pueden usar @code{\deadNote}, @code{\deadNotesOn} y
 @code{\deadNotesOff}.  El término @notation{dead note} (nota muerta)
 se utiliza corrientemente por parte de los guitarristas.
 
-Existe una abreviatura para las formas en rombo que sólo se puede usar
-en acordes:
+También existe una abreviatura similar para las formas en rombo:
 
 @lilypond[verbatim,quote,relative=2]
-<c f\harmonic>2 <d a'\harmonic>4 <c g'\harmonic>
+<c f\harmonic>2 <d a'\harmonic>4 <c g'\harmonic> f\harmonic
 @end lilypond
 
 @predefined
index 434418a3c8d2a5943d288b46e999aa7f87de95d0..e60b00c4377507634fcff0763fece1103812e547 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: bb44469cee5de15e46afbbebd580f898fe5f727b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @node Repeticiones
 @section Repeticiones
@@ -130,9 +130,7 @@ Repetición única con primera y segunda vez:
 c1
 @end lilypond
 
-
-Repetición única con primera y segunda vez,
-con más de un final alternativo:
+Varias repeticiones con primera y segunda vez:
 
 @lilypond[verbatim,quote,relative=2]
 \repeat volta 4 { c4 d e f | }
@@ -237,11 +235,11 @@ primero.
 \alternative {
   {
     f2 d |
-    \set Timing.measureLength = #(ly:make-moment 3 4)
+    \set Timing.measureLength = #(ly:make-moment 3/4)
     g4 g g  % optional bar check is allowed here
   }
   {
-    \set Timing.measureLength = #(ly:make-moment 4 4)
+    \set Timing.measureLength = #(ly:make-moment 4/4)
     a2 a |
   }
 }
@@ -312,6 +310,7 @@ Glosario musical:
 Referencia de la notación:
 @ref{Barras de compás},
 @ref{Modificar los complementos (plug-ins) de contexto},
+@ref{Modificación de ligaduras de unión y de expresión},
 @ref{Gestión del tiempo}.
 
 Fragmentos de código:
@@ -332,14 +331,36 @@ Referencia de funcionamiento interno:
 @cindex números de compás y repeticiones
 @cindex tiempo, repeticiones y contador de
 @cindex compás, repeticiones y números de
-@cindex repetición y ligadura de expresión
+@cindex repeticiones y ligadura de expresión
 @cindex ligaduras de expresión y repeticiones
-
-Las ligaduras de expresión que abarcan desde un bloque @code{\repeat}
-hasta un bloque @code{\alternative} sólo funcionan para la casilla de
-primera vez.  Asimismo, no es posible hacer que las ligaduras de
-expresión se replieguen desde el final de una alternativa hasta el
-comienzo de la repetición.
+@cindex glissandi y repeticiones
+@cindex repeticiones y glissandi
+
+Las ligaduras de expresión que abarcan desde un bloque
+@code{\repeat} hasta un bloque @code{\alternative} sólo funcionan
+para la casilla de primera vez.  La apariencia visual de una
+ligadura de expresión que se continúa introduciéndose en otras
+casillas de repetición puede simularse con @code{\repeatTie} si la
+ligadura se extiende hasta una sola nota dentro de la casilla de
+repetición, aunque este método no funciona en @code{TabStaff}.
+Otros métodos que pueden venir bien para indicar ligaduras que se
+continúan por encima de varias notas en las casillas de
+repetición, y que también funcionan en contextos de tablatura
+@code{TabStaff}, están explicados en
+@ref{Modificación de ligaduras de unión y de expresión}.
+
+Asimismo, no es posible hacer que las ligaduras de expresión se
+replieguen desde el final de una alternativa hasta el comienzo de
+la repetición.
+
+Los glissandos que se extienden desde un bloque @code{\repeat}
+hasta un bloque @code{\alternative} solamente funcionan para la
+casilla de primera vez.  Se puede indicar la apariencia visual de
+un glissando que se continúa hasta el interior de otras casillas
+de repetición mediante la codificación de un glissando que empieza
+en una nota de adorno oculta.  Para ver un ejemplo, consulte
+@qq{Extender los glissandos sobre las repeticiones} bajo el
+epígrafe Fragmentos de código seleccionados, en @ref{Glissando}.
 
 Si una repetición que comienza con un compás incompleto tiene un
 bloque @code{\alternative} que contiene modificaciones a la propiedad
@@ -393,7 +414,7 @@ instrucciones de repetición.
 
 @table @code
 @item start-repeat
-Imprimir una barra de compás @code{|:}
+Imprimir una barra de compás @code{.|:}
 
 @lilypond[verbatim,quote,relative=2]
 c1
@@ -406,7 +427,7 @@ En la práctica habitual del grabado no se imprimen signos de
 repetición al principio de la pieza.
 
 @item @code{end-repeat}
-Imprimir una barra de compás @code{:|}
+Imprimir una barra de compás @code{:|.}
 
 @lilypond[verbatim,quote,relative=2]
 c1
@@ -415,7 +436,7 @@ d4 e f g
 c1
 @end lilypond
 
-@item (volta @var{number}) ... (volta #f)
+@item (volta @var{number}) @dots{} (volta #f)
 Crear una nueva casilla de repetición con el número que se especifica.
 El corchete de vez se debe terminar de forma explícita, pues en caso
 contrario no se imprime.
@@ -680,7 +701,7 @@ duraciones mezcladas utilizan un símbolo de porcentaje doble.
 
 @lilypond[verbatim,quote,relative=2]
 \repeat percent 4 { c8. <d f>16 }
-\repeat percent 2 { \times 2/3 { r8 c d } e4 }
+\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 }
 @end lilypond
 
 @snippets
index dfeb810371abb34ac2ba8013b210c5932ce34fac..7061807060d6e6d0d8547951e8a2cf10f9236cef 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 1141313811fa104882b882085f1a7c80fee69f91
+    Translation of GIT committish: 8d26005d0b783e546de362b96fb1b00540875064
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Duraciones
 @section Duraciones
@@ -149,9 +149,11 @@ pauta; véase @ref{Dirección y posición}.
 @code{\dotsNeutral}.
 @endpredefined
 
+
 @snippets
+
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
-{alternative-breve-note.ly}
+{alternative-breve-notes.ly}
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {changing-the-number-of-augmentation-dots-per-note.ly}
@@ -196,26 +198,38 @@ garrapatea (128) hasta el de máxima (8 redondas).
 @cindex grupos especiales
 @cindex tresillos
 
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
 
-Los grupos especiales se obtienen a partir de una expresión musical
-multiplicando todas las duraciones por una fracción:
+Los grupos especiales se obtienen a partir de una expresión
+musical con la instrucción @code{\tuplet}, multiplicando la
+rapidez de la expresión musical por una fracción:
 
 @example
-\times @var{fracción} @{ @var{música} @}
+\tuplet @var{fracción} @{ @var{música} @}
 @end example
 
 @noindent
-La duración de @code{@var{música}} se multiplica por la fracción.  El
-denominador de la fracción se imprime sobre las notas, opcionalmente
-con un corchete.  El grupo especial más común es el tresillo, en el
-que 3 notas tienen el valor de 2, por tanto las notas duran 2/3 de su
-valor escrito:
+El nomerador de la fracción se imprime encima o debajo de las
+notas, opcionalmente con un corchete.  El grupo especial más común
+es el tresillo, en el que 3@tie{}notas tienen el valor que
+normalmente tienen@tie{}2:
+
+@lilypond[quote,verbatim,relative=2]
+a2 \tuplet 3/2 { b4 b b }
+c4 c \tuplet 3/2 { b4 a g }
+@end lilypond
+
+@cindex agrupación de grupes especiales
+@noindent
+Si se están escribiendo pasajes con muchos grupos de valoración
+especial, resulta fastidioso tener que escribir una instrucción
+@code{\tuplet} distinta para cada grupo.  Es posible especificar
+la duración de un conjunto de grupos directamente antes de la
+música para que así se agrupen automáticamente:
 
 @lilypond[quote,verbatim,relative=2]
-a2 \times 2/3 { b4 b b }
-c4 c \times 2/3 { b4 a g }
+g2 r8 \tuplet 3/2 8 { cis16 d e e f g g f e }
 @end lilypond
 
 @cindex grupos de valoración especial, colocación del corchete
@@ -234,7 +248,7 @@ Los grupos pueden anidarse unos dentro de otros:
 
 @lilypond[quote,verbatim,relative=2]
 \autoBeamOff
-c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4
+c4 \tuplet 5/4 { f8 e f \tuplet 3/2 { e[ f g] } } f4
 @end lilypond
 
 La modificación de los grupos especiales anidados que comienzan en el
@@ -305,7 +319,7 @@ Las notas de adorno se pueden escribir dentro de los corchetes de
 grupo especial, @emph{excepto} cuando un pentagrama comienza por una
 nota de adorno seguida de un grupo de valoración especial.  En este
 caso concreto, se debe poner la nota de adorno antes de la instrucción
-@code{\times} para evitar errores.
+@code{\tuplet} para evitar errores.
 
 @cindex indicaciones de tempo dentro de corchetes de grupo especial
 
@@ -392,6 +406,15 @@ Referencia de la notación:
 Fragmentos de código:
 @rlsr{Rhythms}.
 
+@knownissues
+El cálculo de la posición dentro de un compás sdebe tener en
+cuenta todos los factores de escalado que se han aplicado a las
+notas dentro de ese compás, y cualquier acarreo fraccionado desde
+los compases anteriores.  Este cálculo se efectúa utilizando
+números racionales.  Si un numerador o denominador intermedio en
+dicho proceso de cálculo sobrepasa la cantidad de 2^30, la
+ejecución y el tipografiado se detendrán en ese punto sin indicar
+ningún error.
 
 @node Ligaduras de unión
 @unnumberedsubsubsec Ligaduras de unión
@@ -410,11 +433,13 @@ en efecto extiende la longitud de una nota.
 ligadura de unión es tan sólo una manera de extender la duración de
 una nota, algo parecido a lo que hace el puntillo.}
 
-Se introduce una ligadura de unión usando el símbolo de la tilde curva
-(@code{~}).
+Se introduce una ligadura de unión escribiendo el símbolo de la
+tilde curva (@code{~}) después de la primera de cada pareja de
+notas que se quieren unir.  Esto indica que la nota se une a la
+siguiente, que debe tener la misma altura.
 
 @lilypond[quote,verbatim,relative=2]
-a2 ~ a
+a2~ a4~ a16 r r8
 @end lilypond
 
 Se usan ligaduras de unión bien cuando la nota atraviesa la barra de
@@ -425,8 +450,8 @@ subdivisiones del compás de mayor duración:
 @c KEEP LY
 @lilypond[verbatim,quote]
 \relative c' {
-  r8^"sí" c~ c2 r4 |
-  r8^"no" c2 ~ c8 r4
+  r8^"sí" c~ c2 r4 |
+  r8^"no" c2~ c8 r4
 }
 @end lilypond
 
@@ -442,10 +467,10 @@ compás.
 Cuando se aplica una ligadura de unión a un acorde, se conectan todas
 las cabezas de las notas cuyas alturas coinciden.  Si no coincide
 ningún par de cabezas, no se crea ninguna ligadura.  Los acordes se
-pueden ligar parcialmente colocando la ligadura dentro del acorde.
+pueden ligar parcialmente colocando las ligaduras dentro del acorde.
 
 @lilypond[quote,verbatim,relative=1]
-<c e g> ~ <c e g>
+<c e g>~ <c e g c>
 <c~ e g~ b> <c e g b>
 @end lilypond
 
@@ -461,7 +486,7 @@ Cuando la segunda vez de una repetición comienza con una nota ligada,
 es necesario especificar la ligadura repetida como sigue:
 
 @lilypond[quote,relative=2,verbatim]
-\repeat volta 2 { c g <c e>2 ~ }
+\repeat volta 2 { c g <c e>2~ }
 \alternative {
   % First alternative: following note is tied normally
   { <c e>2. r4 }
@@ -493,8 +518,8 @@ percusión.  Se pueden introducir de la siguiente manera:
 @funindex \tieNeutral
 @funindex tieNeutral
 
-Es posible hacer manualmente que las ligaduras de unión se coloquen
-por encima o por debajo; véase @ref{Dirección y posición}.
+Es posible hacer manualmente que las ligaduras de unión se curven
+hacia arriba o hacia abajo; véase @ref{Dirección y posición}.
 
 @cindex ligaduras, apariencia
 @cindex ligaduras de puntos
@@ -514,26 +539,26 @@ punteadas o una combinación de continuas y discontinuas.
 
 @lilypond[quote, verbatim, relative=1]
 \tieDotted
-c2 ~ c
+c2~ c
 \tieDashed
-c2 ~ c
+c2~ c
 \tieHalfDashed
-c2 ~ c
+c2~ c
 \tieHalfSolid
-c2 ~ c
+c2~ c
 \tieSolid
-c2 ~ c
+c2~ c
 @end lilypond
 
 Se pueden especificar patrones de discontinuidad personalizados:
 
 @lilypond[quote, verbatim, relative=1]
 \tieDashPattern #0.3 #0.75
-c2 ~ c
+c2~ c
 \tieDashPattern #0.7 #1.5
-c2 ~ c
+c2~ c
 \tieSolid
-c2 ~ c
+c2~ c
 @end lilypond
 
 Las definiciones de patrones de discontinuidad para las ligaduras de
@@ -547,11 +572,11 @@ Sobreescriba las propiedades de disposición @var{whiteout} y
 objetos del pentagrama.
 
 @lilypond[verbatim,quote,ragged-right,relative=2]
-\override Tie #'layer = #-2
-\override Staff.TimeSignature #'layer = #-1
-\override Staff.KeySignature #'layer = #-1
-\override Staff.TimeSignature #'whiteout = ##t
-\override Staff.KeySignature #'whiteout = ##t
+\override Tie.layer = #-2
+\override Staff.TimeSignature.layer = #-1
+\override Staff.KeySignature.layer = #-1
+\override Staff.TimeSignature.whiteout = ##t
+\override Staff.KeySignature.whiteout = ##t
 b2 b~
 \time 3/4
 \key a \major
@@ -648,7 +673,7 @@ predefinidas que se muestran aquí:
 \new Staff {
   % These two lines are just to prettify this example
   \time 16/1
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   % Print a maxima rest, equal to four breves
   r\maxima
   % Print a longa rest, equal to two breves
@@ -913,10 +938,10 @@ siguiente:}
 
 @lilypond[quote,verbatim,relative=2]
 % This fails, as the wrong object name is specified
-\override TextScript #'padding = #5
+\override TextScript.padding = #5
 R1^"wrong"
 % This is the correct object name to be specified
-\override MultiMeasureRestText #'padding = #5
+\override MultiMeasureRestText.padding = #5
 R1^"right"
 @end lilypond
 
@@ -1152,36 +1177,7 @@ terminar en cada pulso, como se describe en @ref{Establecer el
 comportamiento de las barras automáticas}.
 @end enumerate
 
-El contexto que contiene @code{\overrideTimeSignatureSettings} se debe
-instanciar antes de que se ejecute la llamada a
-@code{\overrideTimeSignatureSettings}.  Ello significa que debe
-instanciarse explícitamente o debe existir música dentro del contexto
-antes de la llamada a @code{\overrideTimeSignatureSettings}:
 
-@lilypond[quote,verbatim]
-\score {
-  \relative c' {
-    % This call will fail because the context isn't yet instantiated
-    \overrideTimeSignatureSettings
-      4/4        % timeSignatureFraction
-      1/4        % baseMomentFraction
-      #'(3 1)    % beatStructure
-      #'()       % beamExceptions
-    \time 4/4
-    c8^\markup {"Beamed (2 2)"}
-    \repeat unfold 7 { c8 } |
-    % This call will succeed
-    \overrideTimeSignatureSettings
-      4/4        % timeSignatureFraction
-      1/4        % baseMomentFraction
-      #'(3 1)    % beatStructure
-      #'()       % beamExceptions
-    \time 4/4
-    c8^\markup {"Beamed (3 1)"}
-    \repeat unfold 7 { c8 } |
-  }
-}
-@end lilypond
 
 @cindex compás, propiedades, restaurar los valores predeterminados
 @cindex restaurar las propiedades predeterminadas del tipo de compás
@@ -1310,7 +1306,7 @@ También se pueden imprimir indicaciones metronómicas
 como un intervalo entre dos números:
 
 @lilypond[verbatim,quote,relative=1]
-\tempo 4 = 40 ~ 46
+\tempo 4 = 40 - 46
 c4. e8 a4 g
 b,2 d4 r
 @end lilypond
@@ -1348,8 +1344,33 @@ entrada:
 d4 g e c
 @end lilypond
 
+@funindex \markLengthOn
+@funindex markLengthOn
+@funindex \markLengthOff
+@funindex markLengthOff
+
+En una particella de un instrumento con períodos de silencio
+largos, en ocasiones se suceden muy cerca distintas indicaciones
+de tempo.  La instrucción @code{\markLengthOn} aporta un espacio
+horizontal adicional para evitar que las indicaciones de tempo se
+superpongan, y @code{\markLengthOff} restablece el comportamiento
+predeterminado de ignorar las indicaciones de tempo para el
+espaciado horizontal.
+
+@lilypond[verbatim,quote,relative=0]
+\compressFullBarRests
+\markLengthOn
+\tempo "Molto vivace"
+R1*12
+\tempo "Meno mosso"
+R1*16
+\markLengthOff
+\tempo "Tranquillo"
+R1*20
+@end lilypond
 
 @snippets
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {printing-metronome-and-rehearsal-marks-below-the-staff.ly}
 
@@ -1429,20 +1450,22 @@ El @code{\partial @var{duración}} se puede también escribir como:
 \set Timing.measurePosition -@var{duración}
 @end example
 
-Así, @code{\partial 8} se convierte en:
+Así que el primer ejemplo podría haberse escrito así:
 
 @lilypond[quote,verbatim,relative=1]
 \time 3/4
-\set Timing.measurePosition = #(ly:make-moment -1 8)
+\set Timing.measurePosition = #(ly:make-moment -1/8)
 e8 | a4 c8 b c4 |
 @end lilypond
 
-La propiedad @code{measurePosition} contiene un número racional que
-indica qué parte del compás ha transcurrido hasta el momento.  Observe
-que se establece a un número negativo por parte de la instrucción
-@code{\partial}: es decir, @code{\partial 4} se traduce internamente a
-@w{@code{-4}}, con el significado de @qq{queda un valor de negra en este
-compás}.
+La propiedad @code{measurePosition} contiene un número racional,
+que suele ser positivo y que indica qué porción del compás ha
+transcurrido hasta ahora en este punto.  La instrucción
+@code{\partial @var{duración}} lo establece a un número negativo,
+en cuyo caso tiene un significado distinto: en esta ocasión indica
+que el compás actual (el primero) será @emph{precedido} por un
+compás cero (el compás parcial) con una duración dada por el valor
+@var{duración}.
 
 @seealso
 Glosario musical:
@@ -1467,7 +1490,7 @@ advertencias o efectos desagradables, en este caso utilice en su lugar
 \time 6/8
 \partial 8
 e8 | a4 c8 b[ c b] |
-\set Timing.measurePosition = #(ly:make-moment -1 4)
+\set Timing.measurePosition = #(ly:make-moment -1/4)
 r8 e,8 | a4 c8 b[ c b] |
 @end lilypond
 
@@ -1519,7 +1542,7 @@ La numeración de compases se continúa al final de la cadencia.
 
 @lilypond[verbatim,relative=2,quote]
 % Show all bar numbers
-\override Score.BarNumber #'break-visibility = #all-visible
+\override Score.BarNumber.break-visibility = #all-visible
 c4 d e d
 \cadenzaOn
 c4 c d8[ d d] f4 g4.
@@ -1528,16 +1551,21 @@ c4 c d8[ d d] f4 g4.
 d4 e d c
 @end lilypond
 
-Nunca se inicia un compás nuevo dentro de una cadencia,
-incluso aunque se inserten una o más instrucciones @code{\bar}
-dentro de ella. Por tanto, se deben añadir manualmente las alteraciones
-accidentales de cortesía.  Véase @ref{Alteraciones accidentales}.
+Al insertar una instrucción @code{\bar} dentro de una cadencia no
+se inicia un compás nuevo, incluso aunque se imprima una línea
+divisoria.  Así pues, las alteraciones accidentales (cuyo efecto
+se suele suponer que permanece hasta el final del compás) serán
+válidas aún después de la línea divisoria que se imprime por parte
+de @code{\bar}.  Si se quieren imprimir alteraciones accidentales
+posteriores tendrán que insertarse manualmente alteraciones
+forzadas o de cortesía, véase @ref{Alteraciones accidentales}.
 
 @lilypond[verbatim,relative=2,quote]
 c4 d e d
 \cadenzaOn
 cis4 d cis d
 \bar "|"
+% First cis is printed without alteration even if it's after a \bar
 cis4 d cis! d
 \cadenzaOff
 \bar "|"
@@ -1603,20 +1631,6 @@ los saltos:
 \bar ""
 @end example
 
-Se debe crear explícitamente un contexto de voz al empezar una
-pieza con @code{\cadenzaOn}, pues en caso contrario pueden
-ocurrir algunos errores extraños.
-
-@example
-\new Voice @{
-  \relative c' @{
-    \cadenzaOn
-    c16[^"Solo Free Time" d e f] g2.
-    \bar "||"
-    \cadenzaOff
-  @}
-@}
-@end example
 
 @node Notación polimétrica
 @unnumberedsubsubsec Notación polimétrica
@@ -1634,8 +1648,8 @@ ocurrir algunos errores extraños.
 @funindex timeSignatureFraction
 @funindex \scaleDurations
 @funindex scaleDurations
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
 
 Está contemplada la notación polimétrica, ya sea explícitamente o
 mediante la modificación manual de la indicación visible del compás y/o el
@@ -1678,7 +1692,7 @@ de barrado automático.
     \scaleDurations 3/5 {
       \repeat unfold 2 { c8[ c c] }
       \repeat unfold 2 { c8[ c] } |
-      c4. c \times 2/3 { c8[ c c] } c4
+      c4. c \tuplet 3/2 { c8[ c c] } c4
     }
   }
 >>
@@ -2000,7 +2014,7 @@ c16 c8
 
 @warning{Si se usan barras para indicar los melismas de las canciones,
 entonces se debe desactivar el barrado automático con
-@code{\autoBeamOff} e indicar las barras manualmente.
+@code{@bs{}autoBeamOff} e indicar las barras manualmente.
 La utilización de @code{@bs{}partcombine} con
 @code{@bs{}autoBeamOff} puede producir resultados no deseados.  Véanse
 los fragmentos de código para mayor información.}
@@ -2078,67 +2092,67 @@ barra nueva.
 @funindex set
 
 Cuando está habilitado el barrado automático, la colocación de las
-barras automñaticas viene determinada por tres propiedades de
+barras automáticas viene determinada por tres propiedades de
 contexto: @code{baseMoment}, @code{beatStructure} y
-@code{beamExceptions}.  Los valores predeterminados de estas variables
-se pueden sobreescribir como se describe más abajo, o de forma
-alternativa los propios valores predeterminados se pueden cambiar como
-se explica en @ref{Indicación de compás}.
-
-Si hay definida una regla de
-@code{beamExceptions} para el compás en curso, se usa dicha regla para
-determinar la colocación de las barras.  Si no está definida ninguna
-regla de @code{beamExceptions} para el tipo de compás en curso, la
-colocación de las barras está determinada por los ajustes de
+@code{beamExceptions}.  Los valores predeterminados de estas
+variables se pueden sobreescribir como se describe más abajo, o de
+forma alternativa los propios valores predeterminados se pueden
+cambiar como se explica en @ref{Indicación de compás}.
+
+Si hay definida una regla de @code{beamExceptions} para el compás
+en curso, se usa dicha regla para determinar la colocación de las
+barras; se ignoran los valores de @code{baseMoment} y
+@code{beatStructure}.
+
+Si no está definida ninguna regla de
+@code{beamExceptions} para el tipo de compás en curso, la
+colocación de las barras está determinada por los valores de
 @code{baseMoment} y @code{beatStructure}.
 
+@subsubsubheading Barrado basado en @code{baseMoment} y @code{beatStructure}
+
 De forma predeterminada, las reglas de @code{beamExceptions} están
 definidas para los compases más comunes, y así las reglas de
-@code{beamException} se deben desactivar si pretendemos que el barrado
-automático esté basado en @code{baseMoment} y @code{beatStructure}.
-Las reglas de @code{beamExceptions} se desactivan mediante
+@code{beamExceptions} se deben desactivar si pretendemos que el
+barrado automático esté basado en @code{baseMoment} y
+@code{beatStructure}.  Las reglas de @code{beamExceptions} se
+desactivan mediante
 
 @example
 \set Timing.beamExceptions = #'()
 @end example
 
-
-@subsubsubheading Barrado basado en @code{baseMoment} y @code{beatStructure}
-
-En la mayor parte de los casos, las barras automáticas terminan al
-final de un pulso.  Los puntos finales de las barras vienen
-determinados por las propiedades de contexto @code{baseMoment} y
-@code{beatStructure}.  @code{beatStructure} es una lista de Scheme que
-define la longitud de cada pulso dentro del compás en unidades de
-@code{baseMoment}.  De forma predeterminada, @code{baseMoment} es una
-unidad más que el denominador del compás.  De forma predeterminada
-también, cada unidad de longitud @code{baseMoment} es un único pulso.
+Cuando el valor de @code{beamExceptions} se ha fijado a
+@code{#'()}, ya sea debido a un ajuste explícito o a causa de que
+no hay ninguna regla de @code{beamExceptions} definida
+internamente para el compás actual, los puntos finales de las
+barras están en los pulsos según viene determinado por las
+propiedades de contexto @code{baseMoment} y @code{beatStructure}.
+@code{beatStructure} es una lista de Scheme que define la longitud
+de cada pulso dentro del compás en unidades de @code{baseMoment}.
+De forma predeterminada, @code{baseMoment} es una unidad más que
+el denominador del compás.  De forma predeterminada también, cada
+unidad de longitud @code{baseMoment} es un único pulso.
 
 @lilypond[quote,relative=2,verbatim]
 \time 5/16
 c16^"default" c c c c |
+% beamExceptions are unlikely to be defined for 5/16 time,
+% but let's disable them anyway to be sure
+\set Timing.beamExceptions = #'()
 \set Timing.beatStructure = #'(2 3)
 c16^"(2+3)" c c c c |
 \set Timing.beatStructure = #'(3 2)
 c16^"(3+2)" c c c c |
 @end lilypond
 
-Si es está utilizando una indicación de compás común, @emph{se debe}
-desactivar @code{beamExceptions} para habilitar el funcionamiento de
-@code{beatStructure}.  Siempre se puede incluir la instrucción
-@code{\set Timing.beamExceptions = #'()} si el barrado está
-determinado por @code{beatStructure}.
-
 @lilypond[quote,relative=2,verbatim]
 \time 4/4
 a8^"default" a a a a a a a
-
-\set Timing.baseMoment = #(ly:make-moment 1 4)
-\set Timing.beatStructure = #'(1 1 1 1)
-a8^"no change" a a a a a a a
-
+% Disable beamExceptions because they are definitely
+% defined for 4/4 time
 \set Timing.beamExceptions = #'()
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
 \set Timing.beatStructure = #'(1 1 1 1)
 a8^"changed" a a a a a a a
 @end lilypond
@@ -2150,6 +2164,8 @@ más bajo, se aplican los ajustes del contexto circundante.
 @lilypond[quote, verbatim,relative=1]
 \new Staff {
   \time 7/8
+  % No need to disable beamExceptions
+  % as they are not defined for 7/8 time
   \set Staff.beatStructure = #'(2 3 2)
   <<
     \new Voice = one {
@@ -2193,7 +2209,9 @@ el nuevo valor de @code{baseMoment}.
 
 @lilypond[quote,verbatim,relative=2]
 \time 5/8
-\set Timing.baseMoment = #(ly:make-moment 1 16)
+% No need to disable beamExceptions
+% as they are not defined for 5/8 time
+\set Timing.baseMoment = #(ly:make-moment 1/16)
 \set Timing.beatStructure = #'(7 3)
 \repeat unfold 10 { a16 }
 @end lilypond
@@ -2288,7 +2306,7 @@ ajuste @code{beatStructure} si no se reinicia @code{beamExceptions}.
 
 @lilypond[quote,verbatim,relative=2]
 \time 4/4
-\set Timing.baseMoment = #(ly:make-moment 1 8)
+\set Timing.baseMoment = #(ly:make-moment 1/8)
 \set Timing.beatStructure = #'(3 3 2)
 % This won't beam (3 3 2) because of beamExceptions
 \repeat unfold 8 {c8} |
@@ -2306,7 +2324,7 @@ las corcheas en 3/4 mediante una barra en cada parte, reinicie
 \time 3/4
 % by default we beam in (6) due to beamExceptions
 \repeat unfold 6 {a8} |
-% This will beam (1 1 1) due to beatLength
+% This will beam (1 1 1) due to default baseMoment and beatStructure
 \set Timing.beamExceptions = #'()
 \repeat unfold 6 {a8}
 @end lilypond
@@ -2338,7 +2356,7 @@ se determina el aspecto de las barras:
 
 @itemize
 @item
-Si está especificada una barra manual con @code{[..]}, fijar la barra
+Si está especificada una barra manual con @code{[@dots{}]}, fijar la barra
 tal y como se ha especificado; en caso contrario,
 
 @item
@@ -2426,7 +2444,7 @@ la indicación de compás en un pentagrama solamente.
 <<
   \new Staff {
     \time 3/4
-    \set Timing.baseMoment = #(ly:make-moment 1 8)
+    \set Timing.baseMoment = #(ly:make-moment 1/8)
     \set Timing.beatStructure = #'(1 5)
     \repeat unfold 6 { a8 }
   }
@@ -2510,7 +2528,7 @@ barras de notas normales.
 
 @lilypond[quote,verbatim,relative=2]
 c4 d8[
-\grace { e32[ d c d] }
+\grace { e32 d c d }
 e8] e[ e
 \grace { f16 }
 e8 e]
@@ -2600,14 +2618,14 @@ gradualmente.  Las cuatro primeras fusas se aceleran gradualmente,
 mientras que las últimas cuatro fusas están a un tempo constante.
 
 @lilypond[relative=1,verbatim,quote]
-\override Beam #'grow-direction = #LEFT
-\featherDurations #(ly:make-moment 2 1)
+\override Beam.grow-direction = #LEFT
+\featherDurations #(ly:make-moment 2/1)
 { c16[ c c c c c c c] }
-\override Beam #'grow-direction = #RIGHT
-\featherDurations #(ly:make-moment 2 3)
+\override Beam.grow-direction = #RIGHT
+\featherDurations #(ly:make-moment 2/3)
 { c32[ d e f] }
 % revert to non-feathered beams
-\override Beam #'grow-direction = #'()
+\override Beam.grow-direction = #'()
 { g32[ a b c] }
 @end lilypond
 
@@ -2730,7 +2748,7 @@ f1 \bar "|"
 f1 \bar "."
 g1 \bar "||"
 a1 \bar ".|"
-b1 \bar ".|."
+b1 \bar ".."
 c1 \bar "|.|"
 d1 \bar "|."
 e1
@@ -2740,32 +2758,44 @@ e1
 así como la barra de puntos y la discontinua:
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar ":"
-g1 \bar "dashed"
+f1 \bar ";"
+g1 \bar "!"
 a1
 @end lilypond
 
 @noindent
-y cinco tipos de barra de repetición:
+y nueve tipos de barra de repetición:
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar "|:"
-g1 \bar ":|:"
+f1 \bar ".|:"
+g1 \bar ":..:"
 a1 \bar ":|.|:"
 b1 \bar ":|.:"
-c1 \bar ":|"
-e1
+c1 \bar ":.|.:"
+d1 \bar "[|:"
+e1 \bar ":|][|:"
+f1 \bar ":|]"
+g1 \bar ":|."
+a1
 @end lilypond
 
 Además se puede imprimir una línea divisoria como una marca corta:
 @lilypond[quote,relative=1,verbatim]
-f1 \bar "'"
+f1 \bar "'" g1
 @end lilypond
 Sin embargo, dado que las mencionadas marcas se utilizan usualmente en
 el canto gregoriano, es preferible en este caso utilizar
 @code{\divisioMinima}, que se describe en la sección @ref{Divisiones}
 dentro de Canto gregoriano.
 
+LilyPond contempla la notación del canto kievano y ofrece una
+línea divisoria especial kievana:
+@lilypond[quote,relative=1,verbatim]
+f1 \bar "k"
+@end lilypond
+Pueden verse más detalles de esta notación explicados en
+@ref{Tipografiado del canto kievano en notación cuadrada}.
+
 @cindex segno
 
 Para los símbolos de segno en línea, existen tres tipos
@@ -2778,13 +2808,13 @@ c4 c c c
 c4 c c c \break
 \bar "S"
 c4 c c c
-\bar "|S"
+\bar "S-|"
 c4 c c c \break
-\bar "|S"
+\bar "S-|"
 c4 c c c
-\bar "S|"
+\bar "S-S"
 c4 c c c \break
-\bar "S|"
+\bar "S-S"
 c1
 @end lilypond
 
@@ -2796,16 +2826,16 @@ LilyPond.  Las secciones repetidas se introducen mejor utilizando las
 diversas instrucciones de repetición (véase @ref{Repeticiones}), que
 imprimen automáticamente las barras correspondientes.
 
-Además se puede especificar @code{"||:"}, que equivale a @code{"|:"}
+Además se puede especificar @code{".|:-||"}, que equivale a @code{".|:"}
 excepto en los saltos de línea, en que produce una doble barra al
 final de la línea y una repetición izquierda (de comienzo) al
 principio de la línea siguiente.
 
 @lilypond[quote,relative=2,verbatim]
 c4 c c c
-\bar "||:"
+\bar ".|:-||"
 c4 c c c \break
-\bar "||:"
+\bar ".|:-||"
 c4 c c c
 @end lilypond
 
@@ -2814,29 +2844,29 @@ existen seis variantes diferentes:
 
 @lilypond[quote,relative=2,verbatim]
 c4 c c c
-\bar ":|S"
+\bar ":|.S"
 c4 c c c \break
-\bar ":|S"
+\bar ":|.S"
 c4 c c c
-\bar ":|S."
+\bar ":|.S-S"
 c4 c c c \break
-\bar ":|S."
+\bar ":|.S-S"
 c4 c c c
-\bar "S|:"
+\bar "S.|:-S"
 c4 c c c \break
-\bar "S|:"
+\bar "S.|:-S"
 c4 c c c
-\bar ".S|:"
+\bar "S.|:"
 c4 c c c \break
-\bar ".S|:"
+\bar "S.|:"
 c4 c c c
-\bar ":|S|:"
+\bar ":|.S.|:"
 c4 c c c \break
-\bar ":|S|:"
+\bar ":|.S.|:"
 c4 c c c
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
 c4 c c c \break
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
 c1
 @end lilypond
 
@@ -2844,6 +2874,103 @@ Además, existe una instrucción @code{\inStaffSegno} que crea un
 símbolo de segno, situado en colaboración con la instrucción
 @code{\repeat volta}.
 
+@funindex \defineBarLine
+@funindex defineBarLine
+@cindex compás, definir líneas de
+@cindex definir líneas de compás
+
+Se pueden definir tipos nuevos de líneas divisorias con
+@code{\defineBarLine}:
+
+@example
+\defineBarLine @var{tipo_de_barra} #'(@var{final} @var{comienzo} @var{extensión})
+@end example
+
+Las variables de @code{\defineBarline} pueden incluir la cadena de
+caracteres @q{vacía} @code{""}, que equivale a imprimir una línea
+divisoria invisible.  También se puede establecer al valor falso
+@code{#f} que no imprime línea divisoria alguna.
+
+Después de la definición, la nueva línea divisoria se puede
+utilizar mediante @code{\bar} @var{tipo_de_barra}.
+
+Actualmente están disponibles diez elementos de barra de compás:
+
+@lilypond[quote,verbatim]
+\defineBarLine ":" #'("" ":" "")
+\defineBarLine "=" #'("=" "" "")
+\defineBarLine "[" #'("" "[" "")
+\defineBarLine "]" #'("]" "" "")
+
+\new Staff {
+  s1 \bar "|"
+  s1 \bar "."
+  s1 \bar "!"
+  s1 \bar ";"
+  s1 \bar ":"
+  s1 \bar "k"
+  s1 \bar "S"
+  s1 \bar "="
+  s1 \bar "["
+  s1 \bar "]"
+  s1 \bar ""
+}
+@end lilypond
+
+La línea divisoria @code{"="} proporciona la barra de doble
+extensión, usada en combinación con el símbolo de segno.  No lo
+use como una doble línea divisoria fina aislada; para ello es
+preferible @code{\bar} @var{"||"}.
+
+El signo @code{"-"} inicia anotaciones a las barras de compás, que
+son útiles para distinguir entre aquellas que tienen idéntica
+apariencia pero distinto comportamiento en los saltos de línea y/o
+diferentes barras de extensión.  La parque que sigue al signo
+@code{"-"} no se usa para construir la barra de compás.
+
+@lilypond[quote,relative=2,verbatim]
+\defineBarLine "||-dashedSpan" #'("||" "" "!!")
+
+\new StaffGroup <<
+  \new Staff {
+    c1 \bar "||"
+    c1 \bar "||-dashedSpan"
+    c1
+  }
+  \new Staff {
+    c1
+    c1
+    c1
+  }
+>>
+@end lilypond
+
+Además, el carácter del espacio en blanco @code{" "} sirve como
+contenedor para definir barras de extensión correctamente
+alineadas a las barras principales:
+
+@lilypond[quote,relative=2,verbatim]
+\defineBarLine ":|.-wrong" #'(":|." "" "|.")
+\defineBarLine ":|.-right" #'(":|." "" " |.")
+
+\new StaffGroup <<
+  \new Staff {
+    c1 \bar ":|.-wrong"
+    c1 \bar ":|.-right"
+    c1
+  }
+  \new Staff {
+    c1
+    c1
+    c1
+  }
+>>
+@end lilypond
+
+Si se necesitan elementos adicionales, LilyPond provee una forma
+sencilla de definirlos.  Para ver más información sobre cómo
+modificar o añadir barras de compás, consulte el archivo
+@file{scm/bar-line.scm}.
 
 En las partituras con muchos pentagramas, una instrucción @code{\bar}
 en uno de ellos se aplica automáticamente a todos los demás.  Las
@@ -2867,7 +2994,6 @@ líneas resultantes se conectan entre los distintos pentagramas de un
 @cindex predeterminada, línea divisoria, cambiar
 @cindex línea divisoria predeterminada, cambiar
 
-@snippets
 @funindex whichBar
 @funindex defaultBarType
 @funindex \bar
@@ -2890,6 +3016,9 @@ Referencia de la notación:
 @ref{Repeticiones},
 @ref{Agrupar pentagramas}.
 
+Archivos instalados:
+@file{scm/bar-line.scm}.
+
 Fragmentos de código:
 @rlsr{Rhythms}.
 
@@ -2939,7 +3068,7 @@ ejemplo siguiente se imprimen los números de compás en todos los
 sitios posibles:
 
 @lilypond[verbatim,quote,relative=1]
-\override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+\override Score.BarNumber.break-visibility = #'#(#t #t #t)
 \set Score.currentBarNumber = #11
 % Permit first bar number to be printed
 \bar ""
@@ -3041,19 +3170,19 @@ permite que la advertencia se centre en la fuente del error de cuenta
 de tiempo.
 
 @funindex |
-@funindex pipeSymbol
+@funindex "|"
 
 También es posible redefinir la acción que se lleva a cabo cuando se
-encuentra un símbolo de comprobación de compás o «símbolo de tubería»,
+encuentra una barra vertical o símbolo de comprobación de compás,
 @code{|}, en el código de entrada, de forma que haga algo distinto a
 una comprobación de compás.  Se hace asignando una expresión musical a
-@code{pipeSymbol} («símbolo de tubería»).  En el ejemplo siguiente se
+@code{"|"}, el símbolo de barra vertical.  En el ejemplo siguiente se
 establece @code{|} de forma que inserte una doble línea divisoria
 cuando aparece en el código de entrada, en vez de comprobar el final
 de un compás.
 
 @lilypond[quote,verbatim]
-pipeSymbol = \bar "||"
+"|" = \bar "||"
 {
   c'2 c' |
   c'2 c'
@@ -3280,7 +3409,7 @@ tiempo lógico adicional en el compás.
 
 @lilypond[quote,relative=2,verbatim]
 c4 \grace b16 a4(
-\grace { b16[ c16] } a2)
+\grace { b16 c16 } a2)
 @end lilypond
 
 Hay otros tres tipos posibles de notas de adorno; la
@@ -3296,7 +3425,7 @@ colocarla entre notas que están ligadas entre sí, utilizando la función
 @lilypond[quote,relative=2,verbatim]
 \acciaccatura d8 c4
 \appoggiatura e8 d4
-\acciaccatura { g16[ f] } e2
+\acciaccatura { g16 f } e2
 \slashedGrace a,8 g4
 \slashedGrace b16 a4(
 \slashedGrace b8 a2)
@@ -3308,8 +3437,8 @@ por cada corchea de adorno:
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e2 \grace { c16[ d e f] } e2 }
-  \new Staff { c2 \grace { g8[ b] } c2 }
+  \new Staff { e2 \grace { c16 d e f } e2 }
+  \new Staff { c2 \grace { g8 b } c2 }
 >>
 @end lilypond
 
@@ -3357,7 +3486,7 @@ nota principal.
 \new Voice {
   <<
     { d1^\trill_( }
-    { s2 s4. \grace { c16[ d] } }
+    { s2 s4. \grace { c16 d } }
   >>
   c1)
 }
@@ -3420,9 +3549,11 @@ Fragmentos de código:
 Referencia de funcionamiento interno:
 @rinternals{GraceMusic},
 @rinternals{Grace_beam_engraver},
+@rinternals{Grace_auto_beam_engraver},
 @rinternals{Grace_engraver},
 @rinternals{Grace_spacing_engraver}.
 
+
 @knownissues
 @cindex acciaccatura de varias notas
 @cindex adorno, sincronización de notas de
@@ -3440,8 +3571,8 @@ pentagramas con adornos y sin adornos, por ejemplo
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e4 \bar "|:" \grace c16 d2. }
-  \new Staff { c4 \bar "|:" d2. }
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" d2. }
 >>
 @end lilypond
 
@@ -3452,8 +3583,8 @@ anterior
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e4 \bar "|:" \grace c16 d2. }
-  \new Staff { c4 \bar "|:" \grace s16 d2. }
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" \grace s16 d2. }
 >>
 @end lilypond
 
@@ -3498,19 +3629,19 @@ primer lugar, puede hacer más corta la duración de las notas de
 adorno, por ejemplo:
 
 @example
-\acciaccatura @{ c'8[ d' e' f' g'] @}
+c'8 \acciaccatura @{ c'8[ d' e' f' g'] @}
 @end example
 
 se convierte en:
 
 @example
-\acciaccatura @{ c'16[ d' e' f' g'] @}
+c'8 \acciaccatura @{ c'16[ d' e' f' g'] @}
 @end example
 
 Otra opción es cambiar explícitamente la duración musical:
 
 @example
-\acciaccatura @{ \scaleDurations 1/2 @{ c'8[ d' e' f' g'] @} @}
+c'8 \acciaccatura @{ \scaleDurations 1/2 @{ c'8[ d' e' f' g'] @} @}
 @end example
 
 Véase @ref{Escalar las duraciones}.
@@ -3623,11 +3754,11 @@ divisoria cae en 9/8 en vez de hacerlo en 5/4.
 
 @lilypond[quote,verbatim]
 \new Voice \relative c' {
-  \set Timing.measureLength = #(ly:make-moment 5 4)
+  \set Timing.measureLength = #(ly:make-moment 5/4)
   c1 c4 |
   c1 c4 |
   c4 c
-  \set Timing.measurePosition = #(ly:make-moment 5 8)
+  \set Timing.measurePosition = #(ly:make-moment 5/8)
   b4 b b8 |
   c4 c1 |
 }
index 9ae2583d84de171fda5f0b040f9a11d3c9edf3a0..e3ca26276fb1379875ec026dbfd5c954b40181fe 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 35d565c89b853ed87b1bb2feb59f6ce8bef6263b
+    Translation of GIT committish: 45dd19546e9b75b3e1e977732f0962f35dd3290e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @c Translation status: post-GDP
 
@@ -62,7 +62,7 @@ Los acordes también pueden ir seguidos de articulaciones, de nuevo como
 si fueran simples notas.
 
 @lilypond[verbatim,quote,relative=2]
-<a c e>1\fermata <a c e>2-> <f a c e>4\prall <a c>8.^| <g c e>16-.
+<a c e>1\fermata <a c e>2-> <f a c e>4\prall <a c>8.^! <g c e>16-.
 @end lilypond
 
 Las notas dentro del propio acorde también pueden ir seguidas
@@ -96,7 +96,7 @@ combinaciones de estos elementos, consulte
 @ref{Expresiones simultáneas}):
 
 @lilypond[verbatim,quote,relative=2]
-\grace { g8[( a b] }
+\grace { g8( a b }
 <> ) \p \< -. -\markup \italic "sempre staccato"
 \repeat unfold 4 { c4 e }  c1\f
 @end lilypond
@@ -173,7 +173,7 @@ puede usarse con duraciones, articulaciones, elementos de marcado, ligaduras
 de expresión, barras, etc., pues sólo se duplican las notas del acorde precedente.
 
 @lilypond[verbatim,quote,relative=2]
-<a c e>1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall
+<a c e>1\p^"text" q2\<( q8)[-! q8.]\! q16-1-2-3 q8\prall
 @end lilypond
 
 El símbolo de repetición de acordes
@@ -314,7 +314,7 @@ advertencia: demasiadas columnas de notas que chocan entre sí. Se ignoran
 durante la compilación.  Este mensaje se puede suprimir mediante
 
 @example
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
 @end example
 
 Sin embargo, esto no solamente suprime la advertencia sino que
@@ -434,8 +434,8 @@ Se puede crear un pasaje polifónico temporal con la construcción
 siguiente:
 
 @example
-<< @{ \voiceOne ... @}
-  \new Voice @{ \voiceTwo ... @}
+<< @{ \voiceOne @dots{} @}
+  \new Voice @{ \voiceTwo @dots{} @}
 >> \oneVoice
 @end example
 
@@ -477,13 +477,13 @@ necesarias para definir los ajustes de cada voz.
 
 @subsubsubheading La construcción de la doble barra invertida
 
-La construcción @code{<< @{...@} \\ @{...@} >>}, en que las dos
-expresiones (o más) están separadas por doble barra invertida, se
-comporta de forma distinta a la construcción similar sin las dobles
-barras: @emph{todas} las expresiones dentro de esta construcción se
-asignan a contextos @code{Voice} nuevos.  Estos contextos @code{Voice}
-nuevos se crean implícitamente y reciben los nombres fijos @code{"1"},
-@code{"2"}, etc.
+La construcción @code{<< @{@dots{}@} \\ @{@dots{}@} >>}, en que
+las dos expresiones (o más) están separadas por doble barra
+invertida, se comporta de forma distinta a la construcción similar
+sin las dobles barras: @emph{todas} las expresiones dentro de esta
+construcción se asignan a contextos @code{Voice} nuevos.  Estos
+contextos @code{Voice} nuevos se crean implícitamente y reciben
+los nombres fijos @code{"1"}, @code{"2"}, etc.
 
 El primer ejemplo podría haberse tipografiado de la manera siguiente:
 
@@ -705,9 +705,9 @@ distintas, sobre los pulsos 1 y 3 en el primer compás y sobre el pulso
 >>
 @end lilypond
 
-Las cabezas de notas diferentes se pueden combinar, con la excepción
-de blancas con negras, como se muestra más abajo.  Aquí las cabezas
-del pulso 1 del primer compás sí se combinan:
+Las cabezas de notas diferentes se pueden combinar como se muestra
+más abajo.  En este ejemplo las cabezas del pulso 1 del primer
+compás sí se combinan:
 
 @lilypond[quote,verbatim,relative=2]
 <<
@@ -726,6 +726,9 @@ del pulso 1 del primer compás sí se combinan:
 >>
 @end lilypond
 
+Las figuras negras y blancas no se combinan de esta manera, pues
+sería difícil poder distinguirlas.
+
 También se pueden combinar cabezas con puntillos diferentes, como se
 muestra en el tercer pulso del primer compás:
 
@@ -870,14 +873,14 @@ Referencia de funcionamiento interno:
 @cindex colisiones, ignorar
 
 @knownissues
-El uso de @code{\override NoteColumn #'ignore-collision = ##t} hace
+El uso de @code{\override NoteColumn.ignore-collision = ##t} hace
 que las notas con distinta cabeza en voces diferentes se mezclen
 incorrectamente.
 
 @lilypond[quote,relative=1,verbatim]
 \mergeDifferentlyHeadedOn
 << { c16 a' b a } \\ { c,2 } >>
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
 << { c16 a' b a } \\ { c,2 } >>
 @end lilypond
 
@@ -995,7 +998,7 @@ una voz como solo, no son soluciones ideales porque la función
 caso, el resultado de la función @code{\partcombine} se puede
 alterar o corregir con las instrucciones siguientes:
 
-Las instrucciones que finalizan en @code{...Once} se aplican
+Las instrucciones que finalizan en @code{@dots{}Once} se aplican
 exclusivamente a la nota siguiente dentro de la expresión musical.
 
 @itemize
@@ -1053,6 +1056,19 @@ instrumentTwo = \relative c' {
 >>
 @end lilypond
 
+
+@subsubsubheading Uso de \partcombine con letra
+
+@cindex \partcombine y letra
+
+La instrucción @code{\partcombine} no está diseñada para funcionar
+con la letra de las canciones; si una de las voces recibe un
+nombre explícito para poder adjuntar una letra, el combinador de
+partes no funciona.  Sin embargo, se puede conseguir este efecto
+usando un contexto @code{NullVoice}.  Véase
+@ref{Polifonía con letras compartidas}.
+
+
 @snippets
 
 @lilypondfile[verbatim,quote,texidoc,doctitle]
@@ -1077,14 +1093,11 @@ Referencia de funcionamiento interno:
 @rinternals{Voice}.
 
 @knownissues
-Toas las funciones @code{\partcombine} admiten exclusivamente dos voces
-y no están diseñadas para funcionar con la letra de las canciones;
-de manera que cuando una de las voces recibe explícitamente un
-nombre para aplicarle una letra, el combinador de partes
-deja de funcionar.
-
-Las funciones @code{\partcombine...} no se pueden escribir dentro
-de los bloques @code{\times} ni @code{\relative}.
+Todas las funciones @code{\partcombine@dots{}} admiten
+exclusivamente dos voces.
+
+Las funciones @code{\partcombine@dots{}} no se pueden escribir
+dentro de los bloques @code{\tuplet} ni @code{\relative}.
 
 Si @code{printPartCombineTexts} está establecido y las dos voces
 tocan y terminan las mismas notas en el mismo compás,
index 1a705c0419faa700db92a2bb5606495ce0436a76..454a0e7b128fc2e7cd7033ab41cc95821cd31129 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: b2bdfeb83d3dd8460ffe0afef5f99e08dbe7f1ba
+    Translation of GIT committish: e038863ba7228eb3e28b9f1a49e68ec9f4d260b0
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @ignore
 GDP TODO list
@@ -32,7 +32,7 @@ staff lines."
 
 Could we add a sentence:
 "Use instead the pair               fontSize = #@var{N}
-            \override StaffSymbol #'staff-space = #(magstep
+            \override StaffSymbol.staff-space = #(magstep
 @var{N})
 inside the Staff context to change the size of the font and the
 distance between
@@ -77,7 +77,8 @@ estrechos ni estirados.
 Hay dos tipos de bloques que pueden contener ajustes de disposición:
 @code{\paper @{@dots{}@}} y @code{\layout @{@dots{}@}}.  El bloque
 @code{\paper} contiene ajustes de disposición de la página que se
-espera sean los mismos para todas las partituras de un libro, como la
+espera sean los mismos para todas las partituras de un libro o parte de libro,
+como la
 altura de la hoja o si se imprimen los números de página, etc.  Véase
 @ref{Disposición de la página}.  El bloque @code{\layout} contiene
 ajustes de disposición de la partitura, como el número de sistemas que
@@ -102,24 +103,55 @@ Esta sección estudia las opciones de disposición de la página para el
 bloque @code{\paper}.
 
 @menu
-* El bloque \paper::
+* El bloque paper::
 * Tamaño del papel y escalado automático::
-* Variables de espaciado de \paper verticales fijas::
-* Variables de espaciado de \paper verticales flexibles::
-* Variables de espaciado de \paper horizontales::
-* Otras variables de \paper::
+* Variables de espaciado de paper verticales fijas::
+* Variables de espaciado de paper verticales flexibles::
+* Variables de espaciado de paper horizontales::
+* Otras variables de paper::
 @end menu
 
 
-@node El bloque \paper
-@subsection El bloque @code{\paper}
-@translationof The \paper block
+@node El bloque paper
+@subsection El bloque @code{@bs{}paper}
+@translationof The paper block
 
-El bloque @code{\paper} puede aparecer dentro de un bloque
-@code{\book}, pero no dentro de un bloque @code{\score}.  Los ajustes
-de un bloque @code{\paper} se aplican a todo el libro, que puede
-comprender varias partituras.  Entre los ajustes que pueden aparecer
-dentro de un bloque @code{\paper} están los siguientes:
+Los bloques @code{\paper} pueden aparecer en tres lugares
+diferentes para formar una jerarquía descendente de bloques
+@code{\paper}:
+
+@itemize
+
+@item
+Al principio del archivo de entrada, antes de cualquier bloque
+@code{\book}, @code{\bookpart}, o @code{\score}.
+
+@item
+Dentro de un bloque @code{\book} pero fuera de cualquier bloque
+@code{\bookpart} o @code{\score} que estén dentro de ese libro.
+
+@item
+Dentro de un bloque @code{\bookpart} pero fuera de cualquier
+bloque @code{\score} que esté dentro de esa parte de libro.
+
+@end itemize
+
+No se puede poner un bloque @code{\paper} dentro de un bloque
+@code{\score}.
+
+Los valores de los campos filtran esta jerarquía, persistiendo los
+valores establecidos más arriba en la jerarquía a no ser que se
+sobreescriban por algún valor establecido más abajo en la
+jerarquía.
+
+Pueden aparecer varios bloques @code{\paper} en cada uno de los
+niveles, por ejemplo como parte de distintos archivos incluidos
+con @code{\include}.  Si es el caso, los campos en cada nivel se
+combinan, tomando precedencia los campos que aparecen más tarde si
+se producen campos duplicados.
+
+Entre los ajustes que pueden aparecer dentro de un bloque
+@code{\paper} están los siguientes:
 
 @itemize
 
@@ -145,7 +177,8 @@ estudian en @ref{Títulos encabezamientos y pies de página personalizados}.
 
 Casi todas las variables de @code{\paper} funcionan solamente dentro
 de un bloque @code{\paper}.  Las pocas que funcionan también en un
-bloque @code{\layout} están relacionadas en @ref{El bloque \layout}.
+bloque @code{\layout} están relacionadas en
+@ref{El bloque layout,,El bloque @code{@bs{}layout}}.
 
 Excepto cuando se especifica lo contrario, todas las variables de
 @code{\paper} que corresponden a distancias sobre la página se miden
@@ -188,7 +221,7 @@ El equivalente de Scheme del ejemplo anterior es:
 Referencia de la notación:
 @ref{Tamaño del papel y escalado automático},
 @ref{Títulos encabezamientos y pies de página personalizados},
-@ref{El bloque \layout}.
+@ref{El bloque layout,,El bloque @code{@bs{}layout}}.
 
 Archivos instalados:
 @file{ly/paper-defaults-init.ly}.
@@ -215,14 +248,18 @@ Archivos instalados:
 
 @q{A4} es el valor predeterminado si no se establece ningún tamaño de
 página explícitamente.  Sin embargo, existen dos funciones que se
-pueden usar para modificarlo: @code{set-default-paper-size},
+pueden usar para modificarlo:
+
+@table @code
+@item set-default-paper-size
 
 @example
 #(set-default-paper-size "quarto")
 @end example
 
 que siempre se debe colocar en el ámbito superior, y
-@code{set-paper-size},
+
+@item set-paper-size
 
 @example
 \paper @{
@@ -231,6 +268,7 @@ que siempre se debe colocar en el ámbito superior, y
 @end example
 
 que se debe colocar siempre dentro de un bloque @code{\paper}.
+@end table
 
 Si se usa la función @code{set-default-paper-size} en el ámbito
 superior jerárquico, debe ir antes de cualquier bloque @code{\paper}.
@@ -327,13 +365,13 @@ incluso aunque @code{paper-width} puede influir sobre otros valores
 
 Las dimensiones verticales afectadas por el escalado automático son
 @code{top-margin} y @code{bottom-margin}
-(véase @ref{Variables de espaciado de \paper verticales fijas}).
+(véase @ref{Variables de espaciado de paper verticales fijas,,Variables de espaciado de @code{@bs{}paper} verticales fijas}).
 Las dimensiones
 horizontales afectadas por el escalado automático son
 @code{left-margin}, @code{right-margin}, @code{inner-margin},
 @code{outer-margin}, @code{binding-offset}, @code{indent} y
 @code{short-indent} (véase
-@ref{Variables de espaciado de \paper horizontales}).
+@ref{Variables de espaciado de paper horizontales,,Variables de espaciado de @code{@bs{}paper} horizontales}).
 
 Los valores predeterminados para estas dimensiones están fijados en el
 archivo @file{ly/paper-defaults-init.ly}, usando variables internas
@@ -345,17 +383,17 @@ es @code{210\mm}.
 
 @seealso
 Referencia de la notación:
-@ref{Variables de espaciado de \paper verticales fijas},
-@ref{Variables de espaciado de \paper horizontales}.
+@ref{Variables de espaciado de paper verticales fijas,,Variables de espaciado de @code{@bs{}paper} verticales fijas},
+@ref{Variables de espaciado de paper horizontales,,Variables de espaciado de @code{@bs{}paper} horizontales}.
 
 Archivos de inicio:
 @file{ly/paper-defaults-init.ly},
 @file{scm/paper.scm}.
 
 
-@node Variables de espaciado de \paper verticales fijas
-@subsection Variables de espaciado de @code{\paper} verticales fijas
-@translationof Fixed vertical spacing \paper variables
+@node Variables de espaciado de paper verticales fijas
+@subsection Variables de espaciado de @code{@bs{}paper} verticales fijas
+@translationof Fixed vertical spacing paper variables
 
 @warning{Algunas dimensiones de @code{@bs{}paper} se escalan
 automáticamente al tamaño del papel, lo que puede llevar a un
@@ -427,9 +465,9 @@ sobreescriben cualquier ajuste de los márgenes
 superior o inferior definidos por el usuario.
 
 
-@node Variables de espaciado de \paper verticales flexibles
-@subsection Variables de espaciado de @code{\paper} verticales flexibles
-@translationof Flexible vertical spacing \paper variables
+@node Variables de espaciado de paper verticales flexibles
+@subsection Variables de espaciado de @code{@bs{}paper} verticales flexibles
+@translationof Flexible vertical spacing paper variables
 
 En casi todos los casos es preferible que las distancias verticales
 entre ciertos elementos (como márgenes, títulos, sistemas y las
@@ -450,7 +488,7 @@ Véase @ref{Espaciado vertical flexible dentro de los sistemas}.
 
 @menu
 * Estructura de las listas-A de espaciado vertical flexible::
-* Lista de variables de espaciado de \paper verticales flexibles::
+* Lista de variables de espaciado de paper verticales flexibles::
 @end menu
 
 
@@ -553,9 +591,9 @@ segunda redefine la variable completamente:
 @end example
 
 
-@node Lista de variables de espaciado de \paper verticales flexibles
-@unnumberedsubsubsec Lista de variables de espaciado de @code{\paper} verticales flexibles
-@translationof List of flexible vertical spacing \paper variables
+@node Lista de variables de espaciado de paper verticales flexibles
+@unnumberedsubsubsec Lista de variables de espaciado de @code{@bs{}paper} verticales flexibles
+@translationof List of flexible vertical spacing paper variables
 
 Los nombres de estas variables siguen el formato
 @code{@var{superior}-@var{inferior}-spacing}, donde
@@ -640,9 +678,9 @@ Fragmentos de código:
 @rlsr{Spacing}.
 
 
-@node Variables de espaciado de \paper horizontales
-@subsection Variables de espaciado de \paper horizontales
-@translationof Horizontal spacing \paper variables
+@node Variables de espaciado de paper horizontales
+@subsection Variables de espaciado de @code{@bs{}paper} horizontales
+@translationof Horizontal spacing paper variables
 
 @warning{Algunas dimensiones de @code{@bs{}paper} se escalan
 automáticamente al tamaño del papel, lo que puede dar lugar a un
@@ -650,15 +688,15 @@ comportamiento distinto al esperado.  Véase
 @ref{Escalado automático al tamaño del papel}.}
 
 @menu
-* Variables de \paper para la anchura y los márgenes::
-* Variables de \paper para el modo de doble cara::
-* Variables de \paper para desplazamientos y sangrados::
+* Variables de paper para la anchura y los márgenes::
+* Variables de paper para el modo de doble cara::
+* Variables de paper para desplazamientos y sangrados::
 @end menu
 
 
-@node Variables de \paper para la anchura y los márgenes
-@unnumberedsubsubsec Variables de @code{\paper} para la anchura y los márgenes
-@translationof \paper variables for widths and margins
+@node Variables de paper para la anchura y los márgenes
+@unnumberedsubsubsec Variables de @code{@bs{}paper} para la anchura y los márgenes
+@translationof paper variables for widths and margins
 
 Los valores predeterminados (antes del escalado) que no están
 relacionados aquí se encuentran definidos en el archivo
@@ -767,9 +805,9 @@ sobreescriben cualquier ajuste de los márgenes
 izquierdo o derecho definidos por el usuario.
 
 
-@node Variables de \paper para el modo de doble cara
-@unnumberedsubsubsec Variables de @code{\paper} para el modo de doble cara
-@translationof \paper variables for two-sided mode
+@node Variables de paper para el modo de doble cara
+@unnumberedsubsubsec Variables de @code{@bs{}paper} para el modo de doble cara
+@translationof paper variables for two-sided mode
 
 Los valores predeterminados (antes del escalado) se definen en
 @file{ly/paper-defaults-init.ly}.
@@ -822,9 +860,9 @@ Archivos de inicio:
 @file{ly/paper-defaults-init.ly}.
 
 
-@node Variables de \paper para desplazamientos y sangrados
-@unnumberedsubsubsec Variables de @code{\paper} para desplazamientos y sangrados
-@translationof \paper variables for shifts and indents
+@node Variables de paper para desplazamientos y sangrados
+@unnumberedsubsubsec Variables de @code{@bs{}paper} para desplazamientos y sangrados
+@translationof paper variables for shifts and indents
 
 Los valores predeterminados (antes del escalado) que no se relacionan
 aquí están definidos en el archivo @file{ly/paper-defaults-init.ly}.
@@ -869,23 +907,21 @@ Fragmentos de código:
 @rlsr{Spacing}.
 
 
-@node Otras variables de \paper
-@subsection Otras variables de @code{\paper}
-@translationof Other \paper variables
+@node Otras variables de paper
+@subsection Otras variables de @code{@bs{}paper}
+@translationof Other paper variables
 
 @menu
-* Variables de \paper para los saltos de línea::
-* Variables de \paper para los saltos de página::
-* Variables de \paper para la numeración de las páginas::
-* Variables de \paper diversas::
+* Variables de paper para los saltos de línea::
+* Variables de paper para los saltos de página::
+* Variables de paper para la numeración de las páginas::
+* Variables de paper diversas::
 @end menu
 
 
-@node Variables de \paper para los saltos de línea
-@unnumberedsubsubsec Variables de @code{\paper} para los saltos de línea
-@translationof \paper variables for line breaking
-
-@c TODO: Mention that ly:optimal-breaking is on by default? -mp
+@node Variables de paper para los saltos de línea
+@unnumberedsubsubsec Variables de @code{@bs{}paper} para los saltos de línea
+@translationof paper variables for line breaking
 
 @table @code
 
@@ -925,41 +961,22 @@ Referencia de la notación:
 @ref{Saltos de línea}.
 
 
-@node Variables de \paper para los saltos de página
-@unnumberedsubsubsec Variables de @code{\paper} para los saltos de página
-@translationof \paper variables for page breaking
+@node Variables de paper para los saltos de página
+@unnumberedsubsubsec Variables de @code{@bs{}paper} para los saltos de página
+@translationof paper variables for page breaking
 
 Los valores predeterminados que no están relacionados aquí, se definen
 en el archivo @file{ly/paper-defaults-init.ly}
 
 @table @code
 
-@item blank-after-score-page-force
-@funindex blank-after-score-page-force
-
-Penalización por tener una página vacía después del final de una
-partitura y antes de la siguiente.  De forma predeterminada, es menor
-que @code{blank-page-force}, de manera que preferimos páginas vacías
-después de las partituras que páginas vacías dentro de una partitura.
-
-@item blank-last-page-force
-@funindex blank-last-page-force
-
-Penalización por terminar la partitura sobre una página impar.
-
-@item blank-page-force
-@funindex blank-page-force
-
-Penalización por tener una página vacía en medio de una partitura.  No
-se utiliza por parte de @code{ly:optimal-breaking} porque nunca
-considera páginas vacías en mitad de una partitura.
-
 @item page-breaking
 @funindex page-breaking
 
 Algoritmo de saltos de página que utilizar.  Se puede elegir entre
-@code{ly:minimal-breaking}, @code{ly:page-turn-breaking} o
-@code{ly:optimal-breaking}.
+@code{ly:minimal-breaking}, @code{ly:page-turn-breaking},
+@code{ly:one-line-breaking} y @code{ly:optimal-breaking}
+(predeterminado).
 
 @item page-breaking-system-system-spacing
 @funindex page-breaking-system-system-spacing
@@ -980,6 +997,64 @@ predeterminada.
 
 @end table
 
+Las siguientes variables son efectivas solamente cuando
+@code{page-breaking} está sijado a @code{ly:page-turn-breaking}.
+Los saltos de página se seleccionan entonces de forma que se
+minimice el número de pasos de página.  Dado que los pasos de
+página son necesarios cuando se pasa de una página impar a una
+página par, normalmente resultará favorecida aquella disposición
+en que la última página sea impar.  Los lugares en que se
+prefieran pasos de página pueden indicarse manualmente insertando
+@code{\allowPageTurn} o automáticamente incluyendo el grabador
+@code{Page_turn_engraver} (véase @ref{Paso de página óptimo}).
+
+Si no hay un número suficiente de posibilidades para escoger a la
+hora de insertar unos pasos de página adecuados, LilyPond puede
+insertar una página vacía dentro de una partitura, entre
+partituras (si hay dos o más partituras) o finalizando una
+partitura en una página de numeración par.  Los valores de las
+tres siguientes variables pueden incrementarse para que estas
+acciones se vuelvan menos probables.
+
+Los valores son penalizaciones, es decir, cuando más alto es el
+valor menos probables será la acción asociada relativa a otras
+posibilidades.
+
+@table @code
+
+@item blank-page-penalty (penalización por página vacía)
+@funindex blank-page-penalty
+
+Penalización por tener una página vcía en mitad de una partitura.
+Si @code{blank-page-penalty} es grande y está seleccionado
+@code{ly:page-turn-breaking}, entonces será menos probable que
+LilyPond inserte una página en medio de una partitura.  En lugar
+de ello, intercala espacio en la música hasta que se rellene la
+página vacía y la siguiente.  Predeterminado: 5.
+
+@item blank-last-page-penalty (penalización por última página vacía)
+@funindex blank-last-page-penalty
+
+Penalización por terminar la partitura sobre una página par.  Si
+@code{blank-last-page-penalty} es grande y está seleccionado
+@code{ly:page-turn-breaking}, entonces será menos probable que
+LilyPond produzca una partitura en que la última página tenga
+numeración par.  En su lugar, ajustará el espaciado de manera que
+use una página más o una página menos.  Predeterminado: 0.
+
+@item blank-after-score-page-penalty (penalización por página vacía después de una partitura)
+@funindex blank-after-score-page-penalty
+
+Penalización por tener una página vacía después del final de una
+partitura y antes de la siguiente.  De forma predeterminada, esta
+penalización es más pequeña que @code{blank-page-penalty}, de
+forma que se insertan páginas vacías después de las partituras
+como preferencia sobre la inserción de páginas vacías dentro de
+una partitura.  Predeterminado: 2.
+
+@end table
+
+
 @seealso
 Referencia de la notación:
 @ref{Saltos de página},
@@ -992,9 +1067,9 @@ Archivos de inicio:
 @file{ly/paper-defaults-init.ly}.
 
 
-@node Variables de \paper para la numeración de las páginas
-@unnumberedsubsubsec Variables de @code{\paper} para la numeración de las páginas
-@translationof \paper variables for page numbering
+@node Variables de paper para la numeración de las páginas
+@unnumberedsubsubsec Variables de @code{@bs{}paper} para la numeración de las páginas
+@translationof paper variables for page numbering
 
 Los valores predeterminados que no se relacionan aquí están definidos
 en el archivo @file{ly/paper-defaults-init.ly}
@@ -1043,9 +1118,9 @@ una página en blanco en el reverso de la página de cubierta
 de manera que la página 1 esté en el lado derecho.
 
 
-@node Variables de \paper diversas
-@unnumberedsubsubsec Variables de @code{\paper} diversas
-@translationof Miscellaneous \paper variables
+@node Variables de paper diversas
+@unnumberedsubsubsec Variables de @code{@bs{}paper} diversas
+@translationof Miscellaneous paper variables
 
 @table @code
 
@@ -1113,14 +1188,14 @@ Esta sección trata de las opciones de disposición de la partitura para
 el bloque @code{\layout}.
 
 @menu
-* El bloque \layout::
+* El bloque layout::
 * Establecer el tamaño del pentagrama::
 @end menu
 
 
-@node El bloque \layout
-@subsection El bloque @code{\layout}
-@translationof  The \layout block
+@node El bloque layout
+@subsection El bloque @code{@bs{}layout}
+@translationof  The layout block
 
 @funindex \layout
 
@@ -1152,15 +1227,15 @@ son:
 
 @item
 @code{line-width}, @code{ragged-right} y @code{ragged-last}
-(véase @ref{Variables de \paper para la anchura y los márgenes})
+(véase @ref{Variables de paper para la anchura y los márgenes,,Variables de @code{@bs{}paper} para la anchura y los márgenes})
 
 @item
 @code{indent} y @code{short-indent}
-(véase @ref{Variables de \paper para desplazamientos y sangrados})
+(véase @ref{Variables de paper para desplazamientos y sangrados,,Variables de @code{@bs{}paper} para desplazamientos y sangrados})
 
 @item
 @code{system-count}
-(véase @ref{Variables de \paper para los saltos de línea})
+(véase @ref{Variables de paper para los saltos de línea,,Variables de @code{@bs{}paper} para los saltos de línea})
 
 @end itemize
 
@@ -1171,12 +1246,12 @@ He aquí un ejemplo de un bloque @code{\layout}:
   indent = 2\cm
   \context @{
     \StaffGroup
-    \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8
+    \override StaffGrouper.staff-staff-spacing.basic-distance = #8
   @}
   \context @{
     \Voice
-    \override TextScript #'padding = #1
-    \override Glissando #'thickness = #3
+    \override TextScript.padding = #1
+    \override Glissando.thickness = #3
   @}
 @}
 @end example
@@ -1198,8 +1273,8 @@ Por ejemplo: si este bloque:
 \layout @{
   \context @{
     \Voice
-    \override TextScript #'color = #magenta
-    \override Glissando #'thickness = #1.5
+    \override TextScript.color = #magenta
+    \override Glissando.thickness = #1.5
   @}
 @}
 @end example
@@ -1219,13 +1294,13 @@ Si se define una variable de la siguiente manera:
 variable_de_Layout = \layout @{
   \context @{
     \Voice
-    \override NoteHead #'font-size = #4
+    \override NoteHead.font-size = #4
   @}
 @}
 @end example
 
 guardará la configuración actual de @code{\layout} con la
-sobreescritura añadida de @code{NoteHead #'font-size}, pero esta
+sobreescritura añadida de @code{NoteHead.font-size}, pero esta
 combinación @emph{no} se guarda como la nueva configuración actual.
 Tenga en cuenta que la @q{configuración actual} se lee cuando la
 variable se define y no cuando se usa, de manera que el contenido de
@@ -1239,7 +1314,7 @@ La variable se puede entonces usar dentro de otro bloque
   \variable_de_layout
   \context @{
     \Voice
-    \override NoteHead #'color = #red
+    \override NoteHead.color = #red
   @}
 @}
 @end example
@@ -1259,11 +1334,11 @@ muestra el uso de @code{\variable_de_layout} el último bloque
 @code{\layout} consistiría en:
 
 @example
-  TextScript #'padding = #1
-  TextScript #'color = #magenta
-  Glissando #'thickness = #1.5
-  NoteHead #' font-size = #4
-  NoteHead #' color = #red
+  TextScript.padding = #1
+  TextScript.color = #magenta
+  Glissando.thickness = #1.5
+  NoteHead.font-size = #4
+  NoteHead.color = #red
 @end example
 
 más las sobreescrituras de @code{indent} y de @code{StaffGrouper}.
@@ -1272,8 +1347,8 @@ Pero si la variable ya hubiera sido definida antes del primer bloque
 @code{\layout} la configuración actual contendría ahora solamente
 
 @example
-  NoteHead #' font-size= #4 % (escrita en la definición de la variable)
-  NoteHead #' color = #red % (añadida después del uso de la variable)
+  NoteHead.font-size= #4 % (escrita en la definición de la variable)
+  NoteHead.color = #red % (añadida después del uso de la variable)
 @end example
 
 Si se planifica cuidadosamente, las variables de @code{\layout} pueden
@@ -1462,19 +1537,19 @@ paralelo con la música:
   \remove "Forbid_line_break_engraver"
 } \relative c'' {
   <<
-    { c2. \times 2/3 { c4 c c } c2. | }
+    { c2. \tuplet 3/2 { c4 c c } c2. | }
     { s1 | \break s1 | }
   >>
 }
 @end lilypond
 
 De forma similar, los saltos de línea están normalmente prohibidos
-cuando hay barras de corchea que cruzan la línea divisoria.  Se puede
-cambiar este comportamiento fijando @code{\override Beam #'breakable =
-##t}:
+cuando hay barras de corchea que cruzan la línea divisoria.  Se
+puede cambiar este comportamiento fijando
+@code{\override Beam.breakable = ##t}:
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override Beam #'breakable = ##t
+\override Beam.breakable = ##t
 c2. c8[ c | \break
 c8 c] c2. |
 @end lilypond
@@ -1535,7 +1610,7 @@ compases, y sólo en dichos lugares:
 
 @seealso
 Referencia de la notación:
-@ref{Variables de \paper para los saltos de línea}.
+@ref{Variables de paper para los saltos de línea,,Variables de @code{@bs{}paper} para los saltos de línea}.
 
 Fragmentos de código:
 @rlsr{Spacing}.
@@ -1566,7 +1641,7 @@ tienen el mismo efecto sobre el espaciado vertical:
 establecidos a @code{#t} los sistemas de todas las páginas o sólo de
 la última página, respectivamente, no se verán justificados
 verticalmente.  Véase
-@ref{Variables de espaciado de \paper verticales fijas}.
+@ref{Variables de espaciado de paper verticales fijas,,Variables de espaciado de @code{@bs{}paper} verticales fijas}.
 
 Los saltos de página se calculan por medio de la función
 @code{page-breaking}.  LilyPond ofrece tres algoritmos para el cómputo
@@ -1625,7 +1700,7 @@ partes del libro.
 
 @seealso
 Referencia de la notación:
-@ref{Variables de \paper para los saltos de página}.
+@ref{Variables de paper para los saltos de página,,Variables de @code{@bs{}paper} para los saltos de página}.
 
 Fragmentos de código:
 @rlsr{Spacing}.
@@ -1691,7 +1766,7 @@ El grabador @code{Page_turn_engraver} lee la propiedad de contexto
 @code{minimumPageTurnLength} para determinar qué longitud debe tener
 una sección sin notas antes de que se considere la posibilidad de un
 paso de página.  El valor predeterminado para
-@code{minimumPageTurnLength} es @code{(ly:make-moment 1 1)}.  Si
+@code{minimumPageTurnLength} es @code{(ly:make-moment 1/1)}.  Si
 quiere inhabilitar las vueltas de página, puede establecerlo a algún
 valor muy grande.
 
@@ -1701,7 +1776,7 @@ valor muy grande.
   a4 b c d |
   R1 | % aquí se permite un salto de página
   a4 b c d |
-  \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
+  \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
   R1 | % aquí no se permite un salto de página
   a4 b r2 |
   R1*2 | % aquí se permite un salto de página
@@ -1735,6 +1810,9 @@ de marcado del nivel superior.
 @endpredefined
 
 @seealso
+Referencia de la notación:
+@ref{Variables de paper para los saltos de línea,,Variables de @code{@bs{}paper} para los saltos de línea}.
+
 Fragmentos de código:
 @rlsr{Spacing}.
 
@@ -1792,8 +1870,8 @@ Lily a veces rechaza las instrucciones @code{\break} y
 sobreescribir este comportamiento:
 
 @example
-\override NonMusicalPaperColumn #'line-break-permission = ##f
-\override NonMusicalPaperColumn #'page-break-permission = ##f
+\override NonMusicalPaperColumn.line-break-permission = ##f
+\override NonMusicalPaperColumn.page-break-permission = ##f
 @end example
 
 Cuando se sobreescribe el valor de @code{line-break-permission} a
@@ -1825,8 +1903,8 @@ music = \relative c'' { c8 c c c }
   \layout {
     \context {
       \Score
-      \override NonMusicalPaperColumn #'line-break-permission = ##f
-      \override NonMusicalPaperColumn #'page-break-permission = ##f
+      \override NonMusicalPaperColumn.line-break-permission = ##f
+      \override NonMusicalPaperColumn.page-break-permission = ##f
     }
   }
 }
@@ -1868,21 +1946,25 @@ disposición de los saltos.
 @lilypond[quote,verbatim]
 music = \relative c'' { c4 c c c }
 
-\score {
-  \new Staff <<
-    \new Voice {
-      s1 * 2 \break
-      s1 * 3 \break
-      s1 * 6 \break
-      s1 * 5 \break
-    }
-    \new Voice {
-      \repeat unfold 2 { \music }
-      \repeat unfold 3 { \music }
-      \repeat unfold 6 { \music }
-      \repeat unfold 5 { \music }
-    }
-  >>
+\header { tagline = ##f }
+\paper { left-margin = 0\mm }
+\book {
+  \score {
+    \new Staff <<
+      \new Voice {
+        s1 * 2 \break
+        s1 * 3 \break
+        s1 * 6 \break
+        s1 * 5 \break
+      }
+      \new Voice {
+        \repeat unfold 2 { \music }
+        \repeat unfold 3 { \music }
+        \repeat unfold 6 { \music }
+        \repeat unfold 5 { \music }
+      }
+    >>
+  }
 }
 @end lilypond
 
@@ -1894,32 +1976,36 @@ propiedades de @code{NonMusicalPaperColumnGrob}, como se explica en
 @lilypond[quote,verbatim]
 music = \relative c'' { c4 c c c }
 
-\score {
-  \new Staff <<
-    \new Voice {
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 0))
-      s1 * 2 \break
-
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 35))
-      s1 * 3 \break
-
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 70))
-      s1 * 6 \break
-
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 105))
-      s1 * 5 \break
-    }
-    \new Voice {
-      \repeat unfold 2 { \music }
-      \repeat unfold 3 { \music }
-      \repeat unfold 6 { \music }
-      \repeat unfold 5 { \music }
-    }
-  >>
+\header { tagline = ##f }
+\paper { left-margin = 0\mm }
+\book {
+  \score {
+    \new Staff <<
+      \new Voice {
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 0))
+        s1 * 2 \break
+
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 5))
+        s1 * 3 \break
+
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 15))
+        s1 * 6 \break
+
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 30))
+        s1 * 5 \break
+      }
+      \new Voice {
+        \repeat unfold 2 { \music }
+        \repeat unfold 3 { \music }
+        \repeat unfold 6 { \music }
+        \repeat unfold 5 { \music }
+      }
+    >>
+  }
 }
 @end lilypond
 
@@ -1990,7 +2076,7 @@ solamente controlan el espaciado vertical de las pautas y líneas que
 no son pautas dentro de los sistemas individuales.  El espaciado
 vertical entre distintos sistemas, partituras, marcados y márgenes se
 controla mediante variables de @code{\paper} que se estudian en
-@ref{Flexible vertical spacing \paper variables}.
+@ref{Variables de espaciado de paper verticales flexibles,,Variables de espaciado de @code{@bs{}paper} verticales flexibles}.
 
 @menu
 * Propiedades de espaciado dentro de los sistemas::
@@ -2048,7 +2134,7 @@ la tabla siguiente:
 @item @code{ChordNames}  @tab línea de base
 @item @code{NoteNames}   @tab línea de base
 @item @code{Lyrics}      @tab línea de base
-@item @code{Dynamics}    @tab centro vertical
+@item @code{Dynamics}    @tab la mitad de la altura de la @q{m}
 @item @code{FiguredBass} @tab punto más alto
 @item @code{FretBoards}  @tab línea superior
 @end multitable
@@ -2060,14 +2146,14 @@ de estos puntos de referencia:
 #(define zero-space '((padding . -inf.0) (basic-distance . 0)))
 
 alignToZero = \with {
-  \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space
-  \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space
+  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
+  \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
 }
 lowerCaseChords = \with {
   chordNameLowercaseMinor = ##t
 }
 staffAffinityDown = \with {
-  \override VerticalAxisGroup #'staff-affinity = #DOWN
+  \override VerticalAxisGroup.staff-affinity = #DOWN
 }
 labelContext =
 #(define-music-function
@@ -2085,13 +2171,13 @@ labelContext =
                          \lowerCaseChords }
   \context { \FretBoards  \alignToZero \staffAffinityDown }
   \context { \Score
-    \override BarLine #'stencil = ##f
-    \override DynamicText #'self-alignment-X = #-1
-    \override FretBoard #'X-offset = #1.75
-    \override InstrumentName #'minimum-Y-extent = #'(-2 . 2)
-    \override InstrumentName #'extra-offset = #'(0 . -0.5)
-    \override TextScript #'minimum-Y-extent = #'(-2 . 3)
-    \override TimeSignature #'stencil = ##f
+    \omit BarLine
+    \override DynamicText.self-alignment-X = #-1
+    \override FretBoard.X-offset = #1.75
+    \override InstrumentName.minimum-Y-extent = #'(-2 . 2)
+    \override InstrumentName.extra-offset = #'(0 . -0.5)
+    \override TextScript.minimum-Y-extent = #'(-2 . 3)
+    \omit TimeSignature
   }
 }
 
@@ -2110,10 +2196,10 @@ labelContext =
   \new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } }
 >>
 
-%% The reference point for Dynamics is its vertical center
+%% The reference point for Dynamics is the midline of 'm' in the font
 <<
   \new RhythmicStaff {
-    \set RhythmicStaff.instrumentName = #"vertical center "
+    \set RhythmicStaff.instrumentName = #"mid-height "
     \labelContext "Dynamics" s1*3
   }
   \new Dynamics { s1\mp s\fp }
@@ -2143,7 +2229,7 @@ Cada una de las propiedades de grob del espaciado vertical (excepto
 @code{staff-affinity})
 usa la misma estructura de lista-A que las
 variables de espaciado del bloque @code{\paper} que se han estudiado
-en @ref{Flexible vertical spacing \paper variables}.
+en @ref{Variables de espaciado de paper verticales flexibles,,Variables de espaciado de @code{@bs{}paper} verticales flexibles}.
 En @ref{Modificación de las listas-A}
 se estudian métodos específicos para la modificación de
 las listas-A.  Las propiedades de los grobs deben ajustarse con un
@@ -2156,12 +2242,11 @@ forma individual, y la segunda redefine la propiedad completamente:
 
 @example
 \new Staff \with @{
-  \override VerticalAxisGroup #'default-staff-staff-spacing
-       #'basic-distance = #10
+  \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
 @} @{ @dots{} @}
 
 \new Staff \with @{
-  \override VerticalAxisGroup #'default-staff-staff-spacing =
+  \override VerticalAxisGroup.default-staff-staff-spacing =
     #'((basic-distance . 10)
        (minimum-distance . 9)
        (padding . 1)
@@ -2176,8 +2261,7 @@ póngalos dentro del bloque @code{\layout}:
 \layout @{
   \context @{
     \Staff
-    \override VerticalAxisGroup #'default-staff-staff-spacing
-         #'basic-distance = #10
+    \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
   @}
 @}
 @end example
@@ -2297,7 +2381,7 @@ pauta.
 
 @seealso
 Referencia de la notación:
-@ref{Variables de espaciado de \paper verticales flexibles},
+@ref{Variables de espaciado de paper verticales flexibles,,Variables de espaciado de @code{@bs{}paper} verticales flexibles},
 @ref{Modificación de las listas-A}.
 
 Archivos de inicio:
@@ -2348,7 +2432,7 @@ pautas estuvieran combinadas en un grupo o grupos.
 \layout {
   \context {
     \Staff
-    \override VerticalAxisGroup #'default-staff-staff-spacing =
+    \override VerticalAxisGroup.default-staff-staff-spacing =
       #'((basic-distance . 8)
          (minimum-distance . 7)
          (padding . 1))
@@ -2370,7 +2454,7 @@ pautas estuvieran combinadas en un grupo o grupos.
   % By setting 'padding to a negative value, staves can be made to
   % collide.  The lowest acceptable value for 'basic-distance is 0.
   \new Staff \with {
-    \override VerticalAxisGroup #'default-staff-staff-spacing =
+    \override VerticalAxisGroup.default-staff-staff-spacing =
       #'((basic-distance . 3.5)
          (padding . -10))
   } { \clef bass g2 r | }
@@ -2426,14 +2510,14 @@ grob @code{StaffGrouper} al espaciado de las pautas agrupadas:
 \layout {
   \context {
     \Score
-    \override StaffGrouper #'staff-staff-spacing #'padding = #0
-    \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1
+    \override StaffGrouper.staff-staff-spacing.padding = #0
+    \override StaffGrouper.staff-staff-spacing.basic-distance = #1
   }
 }
 
 <<
   \new PianoStaff \with {
-    \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+    \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
   } <<
     \new Staff { c'1 }
     \new Staff { c'1 }
@@ -2495,24 +2579,23 @@ la línea de letra es capaz de ampliarse mucho más de lo que es usual:
 \layout {
   \context {
     \Lyrics
-    \override VerticalAxisGroup
-      #'nonstaff-nonstaff-spacing #'stretchability = #1000
+    \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
   }
 }
 
 \new StaffGroup
 <<
   \new Staff \with {
-    \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30))
+    \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
   } { c'1 }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #UP
+    \override VerticalAxisGroup.staff-affinity = #UP
   } \lyricmode { up }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #CENTER
+    \override VerticalAxisGroup.staff-affinity = #CENTER
   } \lyricmode { center }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #DOWN
+    \override VerticalAxisGroup.staff-affinity = #DOWN
   } \lyricmode { down }
   \new Staff { c'1 }
 >>
@@ -2544,13 +2627,13 @@ colección de ajustes que controlan la cantidad de relleno
 vertical entre los pentagramas y los sistemas.
 
 Es posible enfrentarse al espaciado vertical de una forma distinta
-utilizando @code{NonMusicalPaperColumn #'line-break-system-details}.
+utilizando @code{NonMusicalPaperColumn.line-break-system-details}.
 Mientras que los mecanismos del espaciado vertical flexible
-especifican relleno vertical, @code{NonMusicalPaperColumn
-#'line-break-system-details} puede especificar posiciones verticales
-exactas sobre la página.
+especifican relleno vertical,
+@code{NonMusicalPaperColumn.line-break-system-details} puede
+especificar posiciones verticales exactas sobre la página.
 
-@code{NonMusicalPaperColumn #'line-break-system-details} acepta una
+@code{NonMusicalPaperColumn.line-break-system-details} acepta una
 lista asociativa de tres ajustes diferentes:
 
 @itemize
@@ -2578,23 +2661,23 @@ sobreescrituras de @code{NonMusicalPaperColumn} de ejemplo con la
 instrucción especial @code{\overrideProperty}:
 
 @example
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((X-offset . 20))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((Y-offset . 40))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20)
-                                 (Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((X-offset . 20)
+     (Y-offset . 40))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((alignment-distances . (15)))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20)
-                                 (Y-offset . 40)
-                                 (alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((X-offset . 20)
+     (Y-offset . 40)
+     (alignment-distances . (15)))
 @end example
 
 Para entender cómo funciona cada uno de los distintos ajustes,
@@ -2647,14 +2730,14 @@ grob (objeto gráfico) @code{NonMusicalPaperColumn}:
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 0))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 0))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 40))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 40))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 80))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 60))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -2687,17 +2770,17 @@ usando la subpropiedad @code{alignment-distances} de
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 20)
-                                           (alignment-distances . (15)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 20)
+               (alignment-distances . (10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 60)
-                                           (alignment-distances . (15)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 60)
+               (alignment-distances . (15)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 100)
-                                           (alignment-distances . (15)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 85)
+             (alignment-distances . (20)))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -2729,17 +2812,17 @@ vertical de los pentagramas pero no de los grupos de pentagramas.
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 0)
-                                           (alignment-distances . (30 10)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 0)
+               (alignment-distances . (30 10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 60)
-                                           (alignment-distances . (10 10)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 60)
+               (alignment-distances . (10 10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 100)
-                                           (alignment-distances . (10 30)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 100)
+               (alignment-distances . (10 30)))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -2765,12 +2848,13 @@ múltiplos de la distancia entre líneas de pentagrama adyacentes.  Los
 valores positivos mueven a los pentagramas y a la letra hacia arriba,
 los valores negativos mueven los pentagramas y la letra hacia abajo.
 
-@item A causa de que los ajustes a @code{NonMusicalPaperColumn
-#'line-break-system-details} dados aquí permiten el posicionamiento de
-pentagramas y sistemas en cualquier lugar de la página, es posible
-violar los márgenes o los límites del papel, o incluso imprimir
-pentagramas o sistemas unos encima de otros.  Esto se evitaría pasando
-a los diferentes ajustes unos valores razonables.
+@item A causa de que los ajustes a
+@code{NonMusicalPaperColumn.line-break-system-details} dados aquí
+permiten el posicionamiento de pentagramas y sistemas en cualquier
+lugar de la página, es posible violar los márgenes o los límites
+del papel, o incluso imprimir pentagramas o sistemas unos encima
+de otros.  Esto se evitaría pasando a los diferentes ajustes unos
+valores razonables.
 @end itemize
 
 @seealso
@@ -2815,49 +2899,44 @@ pentagrama.
 @lilypond[quote,ragged-right,relative=2,verbatim]
 c4_"Text"\pp
 r2.
-\once \override TextScript #'outside-staff-priority = #1
+\once \override TextScript.outside-staff-priority = #1
 c4_"Text"\pp % this time the text will be closer to the staff
 r2.
 % by setting outside-staff-priority to a non-number,
 % we disable the automatic collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
-\once \override DynamicLineSpanner #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
+\once \override DynamicLineSpanner.outside-staff-priority = ##f
 c4_"Text"\pp % now they will collide
 @end lilypond
 
-El relleno vertical entre un objeto fuera del pentagrama y los grobs
-posicionados previamente se puede controlar con
-@code{outside-staff-padding}.
+El relleno vertical que rodea a los objetos fuera del pentagrama
+se puede controlar con @code{outside-staff-padding}.
 
 @lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18]
-\once \override TextScript #'outside-staff-padding = #0
-a'^"This text is placed very close to the note"
-\once \override TextScript #'outside-staff-padding = #3
-c^"This text is padded away from the previous text"
-c^"This text is placed close to the previous text"
+\once \override TextScript.outside-staff-padding = #0
+a4-"outside-staff-padding = #0"
+\once \override TextScript.outside-staff-padding = #3
+d-"outside-staff-padding = #3"
+c-"default outside-staff-padding"
+b-"default outside-staff-padding"
+R1
 @end lilypond
 
-De forma predeterminada, los objetos fuera del pentagrama se colocan
-sólo para evitar una colisión horizontal con los grobs posicionados
-previamente.  Esto puede llevar a situaciones en las que los objetos
-se colocan muy próximos entre sí en el sentido horizontal.  El espacio
-vertical entre pentagramas se puede fijar también de manera que los
-objetos fuera del pentagrama se sitúen de forma intercalada.  El
-establecimiento del relleno horizontal
-@code{outside-staff-horizontal-padding} ocasiona que un objeto se
-desplace verticalmente para que tal situación no ocurra.
+De forma predeterminada, los objetos fuera del pentagrama se
+colocan de forma que eviten una colisión horizontal con los grobs
+posicionados previamente.  Esto puede llevar a situaciones en las
+que los objetos se colocan muy próximos entre sí en el sentido
+horizontal.  Como se muestra en el ejemplo que aparece más abajo,
+al establecer @code{outside-staff-horizontal-padding} se
+incrementa el espacio horicontal necesario, y en este caso mueve
+el texto hacia arriba para evitar que quede demasiado cerca de las
+líneas adicionales.
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-% the markup is too close to the following note
-c4^"Text"
-c4
-c''2
-% setting outside-staff-horizontal-padding fixes this
+c4^"Word" c c''2
 R1
-\once \override TextScript #'outside-staff-horizontal-padding = #1
-c,,4^"Text"
-c4
-c''2
+\once \override TextScript.outside-staff-horizontal-padding = #1
+c,,4^"Word" c c''2
 @end lilypond
 
 @seealso
@@ -2900,8 +2979,9 @@ corcheas; la corchea va seguida de un ancho de cabeza de blanca (ACB).
 La negra va seguida de 2 ACB, la blanca por 3 ACB, etc.
 
 @lilypond[quote,verbatim,relative=1]
-c2 c4. c8 c4. c8 c4. c8 c8
-c8 c4 c4 c4
+c2 c4. c8
+c4. c8 c4. c8
+c8 c c4 c c
 @end lilypond
 
 Normalmente, el valor de @code{spacing-increment} está establecido en
@@ -2964,8 +3044,8 @@ con los valores predeterminados y otra con correcciones exageradas:
 {
   c'4 e''4 e'4 b'4 |
   b'4 e''4 b'4 e''4 |
-  \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
-  \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
+  \override Staff.NoteSpacing.stem-spacing-correction = #1.5
+  \override Staff.StaffSpacing.stem-spacing-correction = #1.5
   c'4 e''4 e'4 b'4 |
   b'4 e''4 b'4 e''4 |
 }
@@ -2994,7 +3074,7 @@ adicional en una partitura, ajustando el valor del relleno en la
 medida necesaria.
 
 @example
- \override Score.NonMusicalPaperColumn #'padding = #10
+ \override Score.NonMusicalPaperColumn.padding = #10
 @end example
 
 No existe ningún rodeo para disminuir la magnitud de la separación.
@@ -3004,12 +3084,18 @@ No existe ningún rodeo para disminuir la magnitud de la separación.
 @subsection Área de espaciado nueva
 @translationof New spacing area
 
+@funindex \newSpacingSection
+@cindex área de espaciado nueva
+@cindex espaciado, nueva área de
+@cindex notas, espaciar horizontalmente
+
 Se pueden iniciar secciones nuevas con diferentes parámetros de
 espaciado, con @code{newSpacingSection}.  Esto es útil cuando hay
 secciones que tienen distinta noción de las notas largas y cortas.
 
 En el ejemplo siguiente, el cambio de compás introduce una sección
-nueva, y por ello las semicorcheas se separan de manera más amplia.
+nueva, y por ello las semicorcheas se separan automáticamente
+de manera ligeramente más amplia.
 
 @lilypond[relative=1,verbatim,quote]
 \time 2/4
@@ -3021,8 +3107,26 @@ c16[ c c8]
 @end lilypond
 
 La instrucción @code{\newSpacingSection} crea un nuevo objeto
-@code{SpacingSpanner}, y de ahí que se puedan usar nuevas
-instrucciones de sobreescritura @code{\override} en dicho punto.
+@code{SpacingSpanner} en ese momento musical.  Si los ajustes de
+espaciado automáticos no dan el espaciado deseado, pueden
+aplicarse sobreescrituras manuales a sus propiedades con
+@code{\override}.  Las sobreescrituras se deben aplicar en el
+mismo momento musical que la propia instrucción
+@code{\newSpacingSection}.  Entonces afectarán al espaciado de
+toda la música que venga a continuación hasta que las propiedades
+se cambien en una nueva sección de espaciado, por ejemplo:
+
+@lilypond[relative=1,verbatim,quote]
+\time 4/16
+c16[ c c8]
+\newSpacingSection
+\override Score.SpacingSpanner.spacing-increment = #2
+c16[ c c8]
+\newSpacingSection
+\revert Score.SpacingSpanner.spacing-increment
+c16[ c c8]
+@end lilypond
+
 
 @seealso
 Fragmentos de código:
@@ -3065,41 +3169,35 @@ que @code{ly:make-moment} construye una duración, por lo que @code{1
   \layout {
     \context {
       \Score
-      \override SpacingSpanner
-        #'base-shortest-duration = #(ly:make-moment 1 16)
+      \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
     }
   }
 }
 @end lilypond
 
+
 @snippets
 De forma predeterminada, el espaciado en los grupos de valoración
 especial depende de varios factores ajenos a la duración (como
 alteraciones, cambios de clave, etc.).  Para pasar por alto estos
 símbolos y forzar un espaciado de duraciones iguales uniforme, use
-@code{Score.SpacingSpanner #'uniform-stretching}.  Esta propiedad sólo
+@code{Score.SpacingSpanner.uniform-stretching}.  Esta propiedad sólo
 puede cambiarse al principio de la partitura:
 
 @lilypond[quote,ragged-right,verbatim]
 \score {
   <<
     \new Staff {
-      \times 4/5 {
-        c8 c8 c8 c8 c8
-      }
-      c8 c8 c8 c8
+      \tuplet 5/4 { c8 c c c c } c8 c c c
     }
     \new Staff {
-      c8 c8 c8 c8
-      \times 4/5 {
-        c8 c8 c8 c8 c8
-      }
+      c8 c c c \tuplet 5/4 { c8 c c c c }
     }
   >>
   \layout {
     \context {
       \Score
-      \override SpacingSpanner #'uniform-stretching = ##t
+      \override SpacingSpanner.uniform-stretching = ##t
     }
   }
 }
@@ -3109,8 +3207,8 @@ Cuando se establece @code{strict-note-spacing}, las notas se separan
 sin tener en cuenta las claves, líneas divisorias ni notas de adorno:
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override Score.SpacingSpanner #'strict-note-spacing = ##t
-\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c]  c32[ c32] }
+\override Score.SpacingSpanner.strict-note-spacing = ##t
+\new Staff { c8[ c \clef alto c \grace { c16 c } c8 c c]  c32[ c] }
 @end lilypond
 
 @seealso
@@ -3196,7 +3294,7 @@ proporcional, que se pueden usar solos o combinados:
 @item @code{uniform-stretching}
 @item @code{strict-note-spacing}
 @item @code{\remove "Separating_line_group_engraver"}
-@item @code{\override PaperColumn #'used = ##t}
+@item @code{\override PaperColumn.used = ##t}
 @end itemize
 
 En los ejemplos que siguen, exploramos el uso de estos cinco ajustes
@@ -3209,11 +3307,7 @@ espaciado clásico sin justificación por la derecha.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
 }
@@ -3239,17 +3333,13 @@ ajuste @code{proportionalNotationDuration}.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
  \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
+      proportionalNotationDuration = #(ly:make-moment 1/20)
     }
   }
 }
@@ -3274,11 +3364,11 @@ argumento, que es la duración de referencia contra el que se aplica el
 espaciado de toda la música.  La función Scheme de LilyPond
 @code{make-moment} acepta dos argumentos: un numerador y un
 denominador que, juntos, expresan una cierta fracción de redonda.  La
-llamada @code{(ly:make-moment 1 20)}, por tanto, produce una duración
+llamada @code{(ly:make-moment 1/20)}, por tanto, produce una duración
 de referencia de una nota de un veinteavo de redonda (semicorcheas de
 cinquillo).  Son también posibles valores como
-@code{(ly:make-moment 1 16)},
-@code{(ly:make-moment 1 8)} y @code{(ly:make-moment 3 97)}.
+@code{(ly:make-moment 1/16)},
+@code{(ly:make-moment 1/8)} y @code{(ly:make-moment 3/97)}.
 
 ¿Cómo seleccionamos la duración correcta de referencia para pasarla a
 @code{proportionalNotationDuration}?  Normalmente mediante un proceso
@@ -3291,17 +3381,13 @@ más largas aplican un espaciado más apretado.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 8)
+      proportionalNotationDuration = #(ly:make-moment 1/8)
     }
   }
 }
@@ -3309,17 +3395,13 @@ más largas aplican un espaciado más apretado.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 16)
+      proportionalNotationDuration = #(ly:make-moment 1/16)
     }
   }
 }
@@ -3327,17 +3409,13 @@ más largas aplican un espaciado más apretado.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 32)
+      proportionalNotationDuration = #(ly:make-moment 1/32)
     }
   }
 }
@@ -3362,16 +3440,10 @@ diferente de grupo especial.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
     \new RhythmicStaff {
-      \times 8/9 {
-        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
-      }
+      \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
     }
   >>
 }
@@ -3388,22 +3460,16 @@ soluciona.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
     \new RhythmicStaff {
-      \times 8/9 {
-        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
-      }
+      \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
+      proportionalNotationDuration = #(ly:make-moment 1/20)
     }
   }
 }
@@ -3419,23 +3485,17 @@ propiedad de @code{SpacingSpanner}.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
     \new RhythmicStaff {
-      \times 8/9 {
-        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
-      }
+      \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
-      \override SpacingSpanner #'uniform-stretching = ##t
+      proportionalNotationDuration = #(ly:make-moment 1/20)
+      \override SpacingSpanner.uniform-stretching = ##t
     }
   }
 }
@@ -3529,24 +3589,14 @@ Compare las dos partituras siguientes:
 
 @lilypond[quote,verbatim,ragged-right]
 \new Staff {
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
-  c''8
-  c''8
-  c''8
-  \clef alto
-  d'8
-  d'2
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
+  c''8 c'' c'' \clef alto d' d'2
 }
 
 \new Staff {
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
-  \override Score.SpacingSpanner #'strict-note-spacing = ##t
-  c''8
-  c''8
-  c''8
-  \clef alto
-  d'8
-  d'2
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
+  \override Score.SpacingSpanner.strict-note-spacing = ##t
+  c''8 c'' c'' \clef alto d' d'2
 }
 @end lilypond
 
@@ -3562,11 +3612,11 @@ Además de los ajustes dados aquí, hay otros que aparecen con
 frecuencia en las partituras proporcionales.  Entre ellos están:
 
 @itemize
-@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
-@item @code{tupletFullLength = ##t}
-@item @code{\override Beam #'breakable = ##t}
-@item @code{\override Glissando #'breakable = ##t}
-@item @code{\override TextSpanner #'breakable = ##t}
+@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
+@item @code{\set tupletFullLength = ##t}
+@item @code{\override Beam.breakable = ##t}
+@item @code{\override Glissando.breakable = ##t}
+@item @code{\override TextSpanner.breakable = ##t}
 @item @code{\remove "Forbid_line_break_engraver" in the Voice context}
 @end itemize
 
@@ -3615,9 +3665,7 @@ Para presentar gráficamente las dimensiones de las variables de
 disposición vertical que pueden verse alteradas por el formato de la
 página, establezca @code{annotate-spacing} en el bloque @code{\paper}:
 
-@c need to have \book{} otherwise we get the separate systems. -hwn
-@lilypond[verbatim,quote]
-#(set-default-paper-size "a6" 'landscape)
+@lilypond[verbatim,quote,papersize=a6landscape]
 \book {
   \score { { c4 } }
   \paper { annotate-spacing = ##t }
@@ -3726,7 +3774,7 @@ pentagrama:
 
 @lilypond[verbatim,quote,relative=1]
 e4 c g\f c
-e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
+e4 c g-\tweak X-offset #-2.7 \f c
 @end lilypond
 
 @item
@@ -3764,8 +3812,8 @@ duración se produce un efecto de @q{apretujamiento}:
   \layout {
     \context {
       \Score
-      \override SpacingSpanner
-        #'common-shortest-duration = #(ly:make-moment 1 2)
+      \override SpacingSpanner.common-shortest-duration =
+        #(ly:make-moment 1/2)
     }
   }
 }
index f261c3c2b97f51e1ee37adf6b27bcf8625642aac..8d0a19ed667f9331a9723ec88d2e72e2505f668c 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Notación de los pentagramas
 @section Notación de los pentagramas
@@ -71,7 +71,7 @@ y grupos de ellos.
 
 Las @notation{pautas} y los @notation{pentagramas} o pautas de cinco
 líneas se crean con las instrucciones @code{\new} o @code{\context}.
-Para ver más detalles, consulte @ref{Crear contextos}.
+Para ver más detalles, consulte @ref{Crear y referenciar contextos}.
 
 El contexto básico de pentagrama es @code{Staff}:
 
@@ -127,7 +127,7 @@ Glosario musical:
 @rglos{staves}.
 
 Referencia de la notación:
-@ref{Crear contextos},
+@ref{Crear y referenciar contextos},
 @ref{Pautas de percusión},
 @ref{Mostrar los ritmos de la melodía},
 @ref{Tablaturas predeterminadas},
@@ -450,33 +450,39 @@ Se puede cambiar el número de líneas de la pauta:
 
 @lilypond[verbatim,quote,relative=2]
 f4 d \stopStaff
-\override Staff.StaffSymbol #'line-count = #2
+\override Staff.StaffSymbol.line-count = #2
 \startStaff g, e |
 
 f'4 d \stopStaff
-\revert Staff.StaffSymbol #'line-count
+\revert Staff.StaffSymbol.line-count
 \startStaff g, e |
 @end lilypond
 
 La posición de cada una de las líneas de la pauta también puede
-cambiarse.  Los valores que se utilizan son @emph{medios} espacios de
-pentagrama y la posición nueva es relativa a tercera línea normal del
-pentagrama.  Se imprime una sola línea de pauta por cada valor que se
-introduce, de manera que el número de líneas así como su posición en
-la pauta pueden cambiarse con una sola operación de sobreescritura.
+cambiarse.  Una lista de números fija la posición de cada línea.
+@code{0}@tie{}corresponde a la línea central normal, y las
+posiciones normales de las líneas son
+@code{(-4@tie{}-2@tie{}0@tie{}2@tie{}4)}.  Se imprime una sola
+línea de pauta por cada valor que se introduce, de manera que el
+número de líneas así como su posición en la pauta pueden cambiarse
+con una sola operación de sobreescritura.
 
 @lilypond[verbatim,quote,relative=2]
 f4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(1 3 5 -1 -3)
+\override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
 \startStaff g, e |
 f'4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(8 6.5 -6 -8 -0.5)
+\override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
 \startStaff g, e
 @end lilypond
 
-Puede ser necesario un ajuste de la posición de la clave y del Do
-central para que se correspondan a las líneas nuevas.  Véase
-@ref{Clave}.
+Para preservar las direcciones típicas de las plicas (hacia arriba
+para la mitad inferior del pentagra y hacia abajo para la mitad
+superior), debemos alinear la línea (o espacio) central de la
+pauta personalizada con la posición de la línea central normal
+(0).  Puede ser necesario un ajuste de la posición de la clave y
+del Do@tie{}central para que se correspondan a las líneas nuevas.
+Véase @ref{Clave}.
 
 Puede cambiarse el grosor de las líneas de la pauta.  También resultan
 afectadas, de forma predeterminada, las líneas adicionales y no la
@@ -484,30 +490,34 @@ plica de las figuras.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'thickness = #3
+  \override StaffSymbol.thickness = #3
 }
 { f4 d g, e }
 @end lilypond
 
-Sin embargo, es posible fijar el grosor de las líneas adicionales de
-forma independiente del de las líneas de la pauta.  Los dos valores
-requeridos multiplican el grosor de la línea de la pauta con el
-espaciado de las líneas y después se suman para obtener el grosor de
-las líneas adicionales.
+También es posible fijar el grosor de las líneas adicionales de
+forma independiente del de las líneas de la pauta.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'thickness = #2
-  \override StaffSymbol #'ledger-line-thickness = #'(0.5 . 0.4)
+  \override StaffSymbol.thickness = #2
+  \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
 }
 { f'4 a, a,, f }
 @end lilypond
 
-Pueden alterarse las posiciones verticales de las líneas adicionales:
+@noindent
+El primer valor se multiplica por
+el grosor de las líneas del pentagrama,
+el segundo por el ancho de un espacio del pentagrama, y después
+los dos valores se suman para obtener el grosor de
+las líneas adicionales.
+
+Se pueden alterar las posiciones de las líneas adicionales:
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'ledger-positions = #'(-3 -2 -1 2 5 6)
+  \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
 }
 { f'4 a, a,, f }
 @end lilypond
@@ -519,7 +529,7 @@ propias líneas adicionales.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'ledger-extra = #4
+  \override StaffSymbol.ledger-extra = #4
 }
 { f'4 a, d, f, }
 @end lilypond
@@ -527,18 +537,18 @@ propias líneas adicionales.
 También puede hacerse que las líneas adicionales aparezcan dentro del
 pentagrama allí donde se requieren líneas de pauta personalizadas.  El
 ejemplo muestra la posición predeterminada de las líneas adicionales
-cuando el valor de posición explícito @code{legder-position} se ha
-fijado o no.  La instrucción @code{stopStaff} se necesita en el
+cuando el valor de posición explícito @code{ledger-position} se ha
+fijado o no.  La instrucción @code{\stopStaff} se necesita en el
 ejemplo para revertir la instrucción de sobreescritura
 @code{\override} para todo el @code{StaffSymbol} (el símbolo de
 pauta).
 
-@lilypond[fragment,quote,relative=1]
-\override Staff.StaffSymbol #'line-positions =   #'(-8 0 2 4)
+@lilypond[verbatim,quote,relative=1]
+\override Staff.StaffSymbol.line-positions = #'(-8 0 2 4)
 d4 e f g
 \stopStaff
 \startStaff
-\override Staff.StaffSymbol #'ledger-positions = #'(-8 -6 (-4 -2) 0)
+\override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
 d4 e f g
 @end lilypond
 
@@ -547,7 +557,7 @@ también al espaciado de las líneas adicionales.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'staff-space = #1.5
+  \override StaffSymbol.staff-space = #1.5
 }
 { f'4 d, g, e, }
 @end lilypond
@@ -615,7 +625,7 @@ para alinear el pentagrama de ossia.  Este método es muy conveniente
 cuando se necesitan sólo algunos pentagramas de ossia.
 
 @lilypond[verbatim,quote]
-\new Staff = main \relative c'' {
+\new Staff = "main" \relative c'' {
   c4 b d c
   <<
     { c4 b d c }
@@ -624,8 +634,8 @@ cuando se necesitan sólo algunos pentagramas de ossia.
       \remove "Time_signature_engraver"
       alignAboveContext = #"main"
       fontSize = #-3
-      \override StaffSymbol #'staff-space = #(magstep -3)
-      \override StaffSymbol #'thickness = #(magstep -3)
+      \override StaffSymbol.staff-space = #(magstep -3)
+      \override StaffSymbol.thickness = #(magstep -3)
       firstClef = ##f
     }
     { e4 d f e }
@@ -644,12 +654,12 @@ en ejemplo siguiente.
 
 @lilypond[verbatim,quote,ragged-right]
 <<
-  \new Staff = ossia \with {
+  \new Staff = "ossia" \with {
     \remove "Time_signature_engraver"
-    \override Clef #'transparent = ##t
+    \hide Clef
     fontSize = #-3
-    \override StaffSymbol #'staff-space = #(magstep -3)
-    \override StaffSymbol #'thickness = #(magstep -3)
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
   }
   { \stopStaff s1*6 }
 
@@ -657,7 +667,7 @@ en ejemplo siguiente.
     c4 b c2
     <<
       { e4 f e2 }
-      \context Staff = ossia {
+      \context Staff = "ossia" {
         \startStaff e4 g8 f e2 \stopStaff
       }
     >>
@@ -665,7 +675,7 @@ en ejemplo siguiente.
     c4 b c2
     <<
       { g4 a g2 }
-      \context Staff = ossia {
+      \context Staff = "ossia" {
         \startStaff g4 e8 f g2 \stopStaff
       }
     >>
@@ -682,12 +692,12 @@ sobre @code{\RemoveEmptyStaves}, consulte @ref{Ocultar pentagramas}.
 
 @lilypond[verbatim,quote,ragged-right]
 <<
-  \new Staff = ossia \with {
+  \new Staff = "ossia" \with {
     \remove "Time_signature_engraver"
-    \override Clef #'transparent = ##t
+    \hide Clef
     fontSize = #-3
-    \override StaffSymbol #'staff-space = #(magstep -3)
-    \override StaffSymbol #'thickness = #(magstep -3)
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
   } \relative c'' {
     R1*3
     c4 e8 d c2
@@ -705,13 +715,14 @@ sobre @code{\RemoveEmptyStaves}, consulte @ref{Ocultar pentagramas}.
 \layout {
   \context {
     \Staff \RemoveEmptyStaves
-    \override VerticalAxisGroup #'remove-first = ##t
+    \override VerticalAxisGroup.remove-first = ##t
   }
 }
 @end lilypond
 
 
 @snippets
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {vertically-aligning-ossias-and-lyrics.ly}
 
@@ -862,8 +873,8 @@ utilice las siguientes sobreescrituras de valores en vez de quitar el
 grabador:
 
 @example
-\override StaffSymbol #'stencil = ##f
-\override NoteHead #'no-ledgers = ##t
+\omit StaffSymbol
+\override NoteHead.no-ledgers = ##t
 @end example
 
 Para ver los fallos y problemas conocidos, así como las advertencias
@@ -954,7 +965,7 @@ Sin embargo, si los nombres de instrumento son más largos, éstos no se
 centran para un grupo de pentagramas a no ser que se aumenten los
 valores del sangrado, @code{indent}, y del sangrado corto,
 @code{short-indent}.  Para ver más detalles sobre estos ajustes,
-consulte @ref{Variables de \paper para desplazamientos y sangrados}.
+consulte @ref{Variables de paper para desplazamientos y sangrados,,Variables de @code{@bs{}paper} para desplazamientos y sangrados}.
 
 @lilypond[verbatim,quote,ragged-right]
 \relative c'' {
@@ -1056,7 +1067,7 @@ musical para declarar el cambio de instrumento:
 
 @seealso
 Referencia de la notación:
-@ref{Variables de \paper para desplazamientos y sangrados},
+@ref{Variables de paper para desplazamientos y sangrados,,Variables de @code{@bs{}paper} para desplazamientos y sangrados},
 @ref{Modificar los complementos (plug-ins) de contexto}.
 
 Fragmentos de código:
index 4462a6b6d0d4cff2bcbf7d4d41bd4f146a52bffd..8f970d3fdd44f744d2f76672847f199d6af4eb7e 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 354e5ce3edd1dba03b4ecb68fc766bb46235f5d2
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @node Texto
 @section Texto
@@ -138,7 +138,7 @@ requiere cálculos adicionales.  En caso de que desee un proceso
 ligeramente más rápido, puede utilizar
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
 @end example
 
 
@@ -155,7 +155,7 @@ nombre de @q{spanners} u objetos de extensión, se pueden crear desde
 una nota hasta otra usando la siguiente sintaxis:
 
 @lilypond[verbatim,quote,relative=2]
-\override TextSpanner #'(bound-details left text) = "rit."
+\override TextSpanner.bound-details.left.text = "rit."
 b1\startTextSpan
 e,\stopTextSpan
 @end lilypond
@@ -170,7 +170,7 @@ se pueden conseguir distintos efectos de formato utilizando bloques
 @code{\markup}, como se describe en @ref{Formatear el texto}.
 
 @lilypond[quote,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text) =
+\override TextSpanner.bound-details.left.text =
   \markup { \upright "rit." }
 b1\startTextSpan c
 e,\stopTextSpan
@@ -279,20 +279,27 @@ medio de un compás, se colocarán sobre la línea divisoria o entre las
 notas.  Si se especifican en un salto de línea, las llamadas se
 imprimen al principio de la línea siguiente.
 
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim,relative=2,ragged-right]
 \mark "Allegro"
 c1 c
 \mark "assai" \break
 c  c
 @end lilypond
 
+@funindex \markLengthOn
+@funindex markLengthOn
+@funindex \markLengthOff
+@funindex markLengthOff
+
+@predefined
+@code{\markLengthOn},
+@code{\markLengthOff}.
+@endpredefined
 
 @snippets
-@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
-{printing-marks-at-the-end-of-a-line.ly}
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
-{aligning-marks-with-various-notation-objects.ly}
+{printing-marks-at-the-end-of-a-line.ly}
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-marks-on-every-staff.ly}
@@ -1204,11 +1211,7 @@ marcado:
 
 @lilypond[quote,verbatim,relative=1]
 g1 bes
-ees-\markup {
-  \finger 4
-  \tied-lyric #"~"
-  \finger 1
-}
+ees\finger \markup \tied-lyric #"4~1"
 fis_\markup { \dynamic rf }
 bes^\markup {
   \beam #8 #0.1 #0.5
@@ -1446,18 +1449,28 @@ Schoolbook, la fuente @emph{sans} y la fuente monoespaciada
 @emph{de máquina de escribir}.  Estas dos últimas familias vienen
 determinadas por la instalación de Pango.
 
+@warning{No existen fuentes tipográficas predeterminadas asociadas
+con las familias de fuente @emph{sans} y @emph{typewriter}.  Un
+archivo de entrada que especifica alguna de éstas puede dar lugar
+a salidas diferentes en distintos sistemas.  Para asegurar un
+resultado consistente entre distintas plataformas, se deben
+especificar las tipografías por su nombre, y dichas fuentes deben
+estar disponibles en cualquier sistema que vaya a procesar el
+documento.  Véase @ref{Fuentes de un solo elemento} y
+@ref{Fuentes tipográficas del documento completo}.}
+
 Cada familia puede incluir distintas formas y series.  El ejemplo
 siguiente muestra la posibilidad de seleccionar familias, formas,
 series y tamaños alternativos.  El valor que se da a @code{font-size}
 es el cambio requerido a partir del tamaño predeterminado.
 
 @lilypond[quote,verbatim,relative=2]
-\override Score.RehearsalMark #'font-family = #'typewriter
+\override Score.RehearsalMark.font-family = #'typewriter
 \mark \markup "Ouverture"
-\override Voice.TextScript #'font-shape = #'italic
-\override Voice.TextScript #'font-series = #'bold
+\override Voice.TextScript.font-shape = #'italic
+\override Voice.TextScript.font-series = #'bold
 d2.^\markup "Allegro"
-\override Voice.TextScript #'font-size = #-3
+\override Voice.TextScript.font-size = #-3
 c4^smaller
 @end lilypond
 
@@ -1511,8 +1524,8 @@ instalada en el sistema operativo y reconocida por parte de
 FontConfig, usando la siguiente sintaxis:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.TimeSignature #'font-name = #"Bitstream Charter"
-\override Staff.TimeSignature #'font-size = #2
+\override Staff.TimeSignature.font-name = #"Bitstream Charter"
+\override Staff.TimeSignature.font-size = #2
 \time 3/4
 
 a1_\markup {
@@ -1555,7 +1568,9 @@ Fragmentos de código:
 Se pueden cambiar las fuentes tipográficas que se usan como
 tipografías predeterminadas en las familias @emph{romana},
 @emph{sans-serif} y @emph{monoespaciada}, especificándolas en este
-orden como se ve en el ejemplo de abajo.  Para leer más explicaciones
+orden como se ve en el ejemplo de abajo, que escala las tipografías
+automáticamente con el valor fijado para el tamaño global del pentagrama.
+Para leer más explicaciones
 sobre las fuentes tipográficas, consulte @ref{Explicación de las fuentes tipográficas}.
 
 @cindex fuente, establecer la familia de
@@ -1565,12 +1580,11 @@ sobre las fuentes tipográficas, consulte @ref{Explicación de las fuentes tipog
 
 @lilypond[verbatim,quote]
 \paper  {
-  myStaffSize = #20
   #(define fonts
     (make-pango-font-tree "Times New Roman"
                           "Nimbus Sans"
                           "Luxi Mono"
-                           (/ myStaffSize 20)))
+                          (/ staff-height pt 20)))
 }
 
 \relative c'{
index cd6ba0d4f7925ae58e0a75ea8a064f195411d9fe..4e348328983edeff2058245e24ffb1eeb5eb80da 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 67a345f965d169bc1acd23ff4160914fb2142f38
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -69,13 +69,15 @@ Las dobles cuerdas se indican normalmente escribiendo un acorde, véase
 la interpretación de acordes, véase @ref{Arpegio}.
 
 @item
-Hay una plantilla para cuarteto de cuerda en @rlearning{Cuarteto de cuerda}.  Otras se muestran en la sección de fragmentos de código.
+Hay plantillas para cuarteto de cuerda en
+@rlearning{Plantillas de cuarteto de cuerda}.
+Otras se muestran en la sección de fragmentos de código.
 
 @end itemize
 
 @seealso
 Manual de aprendizaje:
-@rlearning{Cuarteto de cuerda}.
+@rlearning{Platillas de cuarteto de cuerda}.
 
 Referencia de la notación:
 @ref{Guiones de texto},
index f59dd3780f80aa67de17240557efa1a16b8c5ba0..3bfd91884ca24cb5585affb6811b12e9bc1dbe1a 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 44011e382e91f43fb6752b3fbbf8d8984131a565
+    Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Música vocal
 @section Música vocal
@@ -164,26 +164,6 @@ rodeadas por espacios:
 \lyricmode @{ la la la @}
 @end example
 
-@cindex sobreescrituras en el modo de letra
-@funindex \property dentro de \lyricmode
-
-De forma similar, en el modo de letra, un punto ortográfico se
-incluirá dentro de la secuencia alfabética a la que sigue.  Como
-consecuencia, se deben insertar espacios antes y después del punto
-dentro de las instrucciones @code{\override}.  @emph{No} escriba lo
-siguiente:
-
-@example
-\override Score.LyricText #'font-shape = #'italic
-@end example
-
-@noindent
-sino lo siguiente:
-
-@example
-\override Score . LyricText #'font-shape = #'italic
-@end example
-
 Los signos de puntuación, las letras con caracteres acentuados o de
 cualquier idioma distinto del inglés, o los caracteres especiales
 (como el símbolo del corazón o las comillas inclinadas), se pueden
@@ -422,7 +402,7 @@ que contiene la melodía, con @code{\lyricsto}:
 @lilypond[quote,verbatim,relative=2]
 <<
   \new Voice = "melody" {
-    a4 a a a
+    a1 a4. a8 a2
   }
   \new Lyrics \lyricsto "melody" {
     These are the words
@@ -486,8 +466,10 @@ Se pueden añadir más versos poniendo más secciones @code{\addlyrics}:
 }
 @end lilypond
 
-La instrucción @code{\addlyrics} no es capaz de manejar situaciones de
-polifonía.  Para estos casos debería usar @code{\lyricsto}.
+La instrucción @code{\addlyrics} no es capaz de manejar
+situaciones de polifonía.  Asimismo, no puede usarse para asociar
+letra a un contexto de tablatura @code{TabVoice}.  Para estos
+casos debería usar @code{\lyricsto}.
 
 @subheading Uso de @code{associatedVoice}
 
@@ -639,11 +621,16 @@ carácter de guión bajo @code{_}.  De forma alternativa, podemos usar
 el símbolo de tilde curva (@code{~}) para obtener una ligadura de
 texto.
 
-@lilypond[quote,ragged-right,verbatim]
+@lilypond[quote,ragged-right,verbatim,relative=2]
 {
-  \relative c'' { \autoBeamOff
-    r8 b c fis, fis c' b e, }
-  \addlyrics { Che_in ques -- ta_e_in quel -- l'al -- tr'on -- da }
+  { \autoBeamOff
+    r8 b c fis, fis c' b e,
+  }
+  \addlyrics
+  {
+    \override LyricHyphen.minimum-distance = #1.0 % Ensure hyphens are visible
+    Che_in ques -- ta_e_in quel -- l'al -- tr'on -- da
+  }
   \addlyrics { "Che in" ques -- "ta e in" quel -- l'al -- tr'on -- da }
   \addlyrics { Che~in ques -- ta~e~in quel -- l'al -- tr'on -- da }
 }
@@ -664,9 +651,11 @@ Referencia de funcionamiento interno:
 @funindex \melisma
 @funindex \melismaEnd
 
-A veces, y sobre todo en la música medieval, varias notas se cantan
+A veces, y sobre todo en la música medieval y del Barroco,
+varias notas se cantan
 sobre una sílaba única; tales vocalizaciones reciben el nombre de
-melismas, o melismata.  La sílaba de un melisma se suele alinear por
+melismas, o melismata (véase @rglos{melisma}).
+La sílaba de un melisma se suele alinear por
 la izquierda con la primera nota del melisma.
 
 Cuando se produce un melisma sobre una sílaba distinta de la última de
@@ -917,6 +906,7 @@ Referencia de funcionamiento interno:
 * Colocación horizontal de las sílabas::
 * Letra y repeticiones::
 * Letras en divisi::
+* Polifonía con letras compartidas::
 @end menu
 
 
@@ -1066,7 +1056,7 @@ referencia, usando @code{\context}, como se ve a continuación:
   <<
     \new Lyrics = "lyrics" \with {
       % lyrics above a staff should have this override
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff {
       \new Voice = "melody" {
@@ -1097,7 +1087,7 @@ ejemplo del segundo método:
     \new Lyrics = "sopranos"
     \new Lyrics = "contraltos" \with {
       % lyrics above a staff should have this override
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff {
       \new Voice = "contraltos" {
@@ -1119,8 +1109,8 @@ ejemplo del segundo método:
 @end lilypond
 
 Es posible generar otras combinaciones de letra y pautas mediante la
-elaboración de los ejemplos anteriores, o examinando las plantillas de
-@rlearning{Conjuntos vocales} del manual de aprendizaje.
+elaboración de los ejemplos anteriores, o examinando las plantillas del
+Manual de Aprendizaje, véase @rlearning{Plantillas de conjuntos vocales}.
 
 @snippets
 @lilypondfile[verbatim,quote,texidoc,doctitle]
@@ -1128,11 +1118,11 @@ elaboración de los ejemplos anteriores, o examinando las plantillas de
 
 @seealso
 Manual de aprendizaje:
-@rlearning{Conjuntos vocales}.
+@rlearning{Plantillas de conjuntos vocales}.
 
 Referencia de la notación:
 @ref{Orden de disposición de los contextos},
-@ref{Crear contextos}.
+@ref{Crear y referenciar contextos}.
 
 @node Colocación horizontal de las sílabas
 @unnumberedsubsubsec Colocación horizontal de las sílabas
@@ -1147,7 +1137,7 @@ propiedad @code{minimum-distance} de @code{LyricSpace}.
 @lilypond[relative=1,verbatim,quote,ragged-right]
 {
   c c c c
-  \override Lyrics.LyricSpace #'minimum-distance = #1.0
+  \override Lyrics.LyricSpace.minimum-distance = #1.0
   c c c c
 }
 \addlyrics {
@@ -1173,7 +1163,7 @@ la propiedad dentro del bloque @code{\layout}.
   \layout {
     \context {
       \Lyrics
-      \override LyricSpace #'minimum-distance = #1.0
+      \override LyricSpace.minimum-distance = #1.0
     }
   }
 }
@@ -1191,7 +1181,7 @@ acelerar ligeramente el procesado, se puede desactivar esta
 funcionalidad:
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
 @end example
 
 Para hacer que el texto evite también las líneas divisorias, use
@@ -1202,7 +1192,7 @@ Para hacer que el texto evite también las líneas divisorias, use
     \Lyrics
       \consists "Bar_engraver"
       \consists "Separating_line_group_engraver"
-      \override BarLine #'transparent = ##t
+      \hide BarLine
   @}
 @}
 @end example
@@ -1696,6 +1686,125 @@ contextos de voz y adjuntando la letra a estos contextos específicos:
 }
 @end lilypond
 
+En la música coral es frecuente que una parte vocal se divida en
+dos durante varios compases.  La construcción @code{<< @{@dots{}@}
+\\ @{@dots{}@} >>}, en la que dos (o más) expresiones musicales
+están separadas por dos barras invertidas, puede en principio
+parecer la forma más adecuada de realizar las voces divididas.
+Sin embargo, esta construcción asigna @strong{todas} las
+expresiones que están dentro de ella a @strong{contextos de voz
+NUEVOS} lo que hace que no se asigne a ellas @emph{ninguna letra}
+porque la letra se asigna al contexto de voz original, que no es
+lo que pretendemos, en general.  La construcción correcta que
+debemos usar es el pasaje polifónico temporal, véase la sección
+@emph{Pasajes polifónicos temporales} dentro de
+@ref{Polifonía en un solo pentagrama}.
+
+
+@node Polifonía con letras compartidas
+@unnumberedsubsubsec Polifonía con letras compartidas
+@translationof Polyphony with shared lyrics
+
+@cindex NullVoice
+@cindex polifonía, letra compartida
+@cindex letra, compartida entre voces
+@cindex \partcombine y letra
+@funindex \partcombine
+
+Cuando dos voces cuyas notas tienen distintas duraciones comparten
+la misma letra, la alineación de ésta a una de las voces puede dar
+lugar a problemas en la otra voz.  Por ejemplo, la segunda línea
+extensora que se ve debajo es demasiado corta, porque la letra
+está alineada solamente a la voz superior:
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+alto = \relative { g'2 b8( a g a) }
+words = \lyricmode { la __ la __ }
+
+\new Staff <<
+  \new Voice = "sopranoVoice" { \voiceOne \soprano }
+  \new Voice { \voiceTwo \alto }
+  \new Lyrics \lyricsto "sopranoVoice" \words
+>>
+@end lilypond
+
+Para obtener el resultado deseado, alinee la letra con un contexto
+@code{NullVoice} (@q{Voz Nula}) nuevo que contenga una combinación
+adecuada de las dos voces.  Las notas del contexto
+@code{NullVoice} no aparecen en la página impresa, pero pueden
+utilizarse para alinear la letra adecuadamente:
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+alto = \relative { g'2 b8( a g a) }
+aligner = \relative { b'8( c d c) b( a g a) }
+words = \lyricmode { la __ la __ }
+
+\new Staff <<
+  \new Voice { \voiceOne \soprano }
+  \new Voice { \voiceTwo \alto }
+  \new NullVoice = "aligner" \aligner
+  \new Lyrics \lyricsto "aligner" \words
+>>
+@end lilypond
+
+El contexto de voz nula @code{NullVoice} debe estar dentro de un
+contexto @code{Staff}, y solamente debe contener notas que ya se
+están mostrando en dicho pentagrama, y en la misma octava.  En
+caso contrario, la @code{NullVoice} podría interactuar con las
+voces impresas de forma inesperada.  Por ejemplo, notas
+arbitrarias en la @code{NullVoice} pueden hacer que aparezcan (o
+desaparezcan) alteraciones accidentales en el pentragrama.
+
+Este método se puede usar trambién con la función
+@code{\partcombine}, que en sí no permite incluir letra:
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+alto = \relative { g'2 b8( a g a) }
+aligner = \relative { b'8( c d c) b( a g a) }
+words = \lyricmode { la __ la __ }
+
+\new Staff <<
+  \new Voice \partcombine \soprano \alto
+  \new NullVoice = "aligner" \aligner
+  \new Lyrics \lyricsto "aligner" \words
+>>
+@end lilypond
+
+@noindent
+La función @code{\partcombine} se describe en
+@ref{Combinación automática de las partes}.
+
+Por último, este método se puede usar incluso si las voces están
+en distintos pentagramas, y no se limita a dos voces únicamente:
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+altoOne = \relative { g'2 b8( a b4) }
+altoTwo = \relative { d'2 g4( fis8 g) }
+aligner = \relative { b'8( c d c) d( d d d) }
+words = \lyricmode { la __ la __ }
+
+\new ChoirStaff <<
+  \new Staff <<
+    \soprano
+    \new NullVoice = "aligner" \aligner
+  >>
+  \new Lyrics \lyricsto "aligner" \words
+  \new Staff \partcombine \altoOne \altoTwo
+>>
+@end lilypond
+
+Observe, sin embargo, que en la segunda mitad del compás que se ve
+arriba, las notas del contexto @code{NullVoice} reflejan las
+duraciones de las notas del pentagrama inferior, pero no se
+desvian de la altura única que se muestra en el pentagrama al que
+pertenece la @code{NullVoice}.  Aunque no es obligatorio en este
+ejemplo en particular, generalmente es buena idea introducir las
+notas de esta forma.
+
 
 @node Versos
 @subsection Versos
@@ -1878,7 +1987,7 @@ se utiliza @code{\lyricsto}, pero este comportamiento puede cambiarse:
 <<
   \new Voice = melody \relative c' {
     f4 \appoggiatura a32 b4
-    \grace { f16[ a16] } b2
+    \grace { f16 a16 } b2
     \afterGrace b2 { f16[ a16] }
     \appoggiatura a32 b4
     \acciaccatura a8 b4
@@ -1907,7 +2016,7 @@ bloque @code{\with} o @code{\context}:
 @lilypond[verbatim,ragged-right,quote]
 <<
   \new Voice = melody \relative c' {
-    \grace { c16[( d e f] }
+    \grace { c16( d e f }
     g1) f
   }
   \new Lyrics \with { includeGraceNotes = ##t }
@@ -1935,9 +2044,9 @@ propiedad @code{associatedVoice}:
     <<
       \new Voice = "alternative" {
         \voiceOne
-        \times 2/3 {
+        \tuplet 3/2 {
           % show associations clearly.
-          \override NoteColumn #'force-hshift = #-3
+          \override NoteColumn.force-hshift = #-3
           f8 f g
         }
       }
@@ -2076,7 +2185,7 @@ text = \lyricmode {
           "It has two lines."
         }
       }
-      \vspace #0.1 % adds vertical spacing between verses
+      \combine \null \vspace #0.1 % adds vertical spacing between verses
       \line { \bold "3."
         \column {
           "This is verse three."
@@ -2092,7 +2201,7 @@ text = \lyricmode {
           "It has two lines."
         }
       }
-      \vspace #0.1 % adds vertical spacing between verses
+      \combine \null \vspace #0.1 % adds vertical spacing between verses
       \line { \bold "5."
         \column {
           "This is verse five."
@@ -2231,8 +2340,8 @@ canciones por partes, los oratorios, etc.
 La notación de música coral se realiza normalmente sobre dos, tres o
 cuatro pentagramas dentro de un grupo de pautas @code{ChoirStaff}.  Si
 se necesita un acompañamiento, se sitúa debajo dentro de un grupo
-@code{PianoStaff}, que se suele reducir de tamaño en las obras corales
-@emph{a capella}.  Las notas de cada parte vocal se sitúan dentro de
+@code{PianoStaff}, que se suele reducir de tamaño, para ensayar las obras corales
+@emph{a cappella}.  Las notas de cada parte vocal se sitúan dentro de
 un contexto @code{Voice}, y cara pentagrama recibe o una sola parte
 vocal (es decir, una @code{Voice}) o un par de partes vocales (es
 decir, dos @code{Voice}s).
@@ -2253,8 +2362,8 @@ SATB}.
 
 @item
 También en el Manual de aprendizaje hay varias plantillas adecuadas
-para diversos estilos de música coral, véase @rlearning{Conjuntos
-vocales}.
+para diversos estilos de música coral, véase
+@rlearning{Plantillas de conjuntos vocales}.
 
 @item
 Para ver más información acerca de @code{ChoirStaff} y
@@ -2271,6 +2380,11 @@ ligaduras, etc. de la parte aguda se orientan hacia arriba, y los de
 la parte grave hacia abajo.  Para hacerlo, utilice @code{\voiceOne} y
 @code{\voiceTwo}.  Véase @ref{Polifonía en un solo pentagrama}.
 
+@item
+Cuando una parte vocal se divide temporalmente, debemos usar
+@emph{Pasajes polifónicos temporales} (véase
+@ref{Polifonía en un solo pentagrama}).
+
 @end itemize
 
 @predefined
@@ -2281,7 +2395,7 @@ la parte grave hacia abajo.  Para hacerlo, utilice @code{\voiceOne} y
 @seealso
 Manual de aprendizaje:
 @rlearning{Partitura vocal a cuatro voces SATB},
-@rlearning{Conjuntos vocales}.
+@rlearning{Plantillas de conjuntos vocales}.
 
 Referencia de la notación:
 @ref{Orden de disposición de los contextos},
@@ -2365,8 +2479,8 @@ pautas respectivas, como se muestra aquí:
   \layout {
     \context {
       \Score
-      \override DynamicText #'direction = #UP
-      \override DynamicLineSpanner #'direction = #UP
+      \override DynamicText.direction = #UP
+      \override DynamicLineSpanner.direction = #UP
     }
   }
 }
@@ -2586,7 +2700,7 @@ usar @code{\instrumentSwitch} para indicar cada uno de los cambios.
   #`((instrumentTransposition . ,(ly:make-pitch -1 0 0))
      (shortInstrumentName . "Kas.")
      (clefGlyph . "clefs.G")
-     (clefOctavation . -7)
+     (clefTransposition . -7)
      (middleCPosition . 1)
      (clefPosition . -2)
      (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Kaspar"))
@@ -2596,11 +2710,11 @@ usar @code{\instrumentSwitch} para indicar cada uno de los cambios.
   #`((instrumentTransposition . ,(ly:make-pitch 0 0 0))
      (shortInstrumentName . "Mel.")
      (clefGlyph . "clefs.F")
-     (clefOctavation . 0)
+     (clefTransposition . 0)
      (middleCPosition . 6)
      (clefPosition . 2)
      (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Melchior"))
-     (midiInstrument . "voice aahs"))
+     (midiInstrument . "choir aahs"))
 
 \relative c' {
   \instrumentSwitch "kaspar"
@@ -2656,7 +2770,7 @@ pianoRH = \relative c'' {
   % position name of cue-ing instrument just before the cue notes,
   % and above the staff
   \new CueVoice {
-    \override InstrumentSwitch #'self-alignment-X = #RIGHT
+    \override InstrumentSwitch.self-alignment-X = #RIGHT
     \set instrumentCueName = "Flute"
   }
   \cueDuring "flute" #UP { g4 bes4 }
@@ -2700,8 +2814,8 @@ pianoRH = \relative c'' {
   \transposition c'
   % position name of cue-ing instrument below the staff
   \new CueVoice {
-    \override InstrumentSwitch #'self-alignment-X = #RIGHT
-    \override InstrumentSwitch #'direction = #DOWN
+    \override InstrumentSwitch.self-alignment-X = #RIGHT
+    \override InstrumentSwitch.direction = #DOWN
     \set instrumentCueName = "Clar."
   }
   \cueDuring "clarinet" #DOWN { c4. g8 }
@@ -2843,8 +2957,8 @@ dialogue = \lyricmode {
 \score {
   <<
     \new Lyrics \with {
-      \override LyricText #'font-shape = #'italic
-      \override LyricText #'self-alignment-X = #LEFT
+      \override LyricText.font-shape = #'italic
+      \override LyricText.self-alignment-X = #LEFT
     }
     { \dialogue }
     \new Staff {
@@ -2914,7 +3028,7 @@ Los cánticos usan con frecuencia figuras negras sin plica para indicar
 la altura, tomando las duraciones del ritmo hablado del texto.
 
 @lilypond[verbatim,quote]
-stemOff = { \override Staff.Stem #'transparent = ##t }
+stemOff = { \hide Staff.Stem }
 
 \relative c' {
   \stemOff
@@ -3009,9 +3123,9 @@ a4 b c2
 \bar "'"
 a4 b c2
 a4 b c2
-\bar ":"
+\bar ";"
 a4 b c2
-\bar "dashed"
+\bar "!"
 a4 b c2
 \bar "||"
 @end lilypond
@@ -3022,23 +3136,23 @@ Este ejemplo utiliza una marca @code{\breathe} modificada:
 
 @lilypond[verbatim,quote]
 divisioMinima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-minima
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 divisioMaior = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maior
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 divisioMaxima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maxima
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 finalis = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::finalis
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 
@@ -3154,8 +3268,7 @@ global = {
       \layout {
         \context {
           \Score
-          \override SpacingSpanner
-          #'base-shortest-duration = #(ly:make-moment 1 2)
+          \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
         }
         \context {
           \Staff
@@ -3188,7 +3301,7 @@ duraciones de las notas.
 @seealso
 Manual de aprendizaje:
 @rlearning{Visibilidad y color de los objetos},
-@rlearning{Conjuntos vocales}.
+@rlearning{Plantillas de conjuntos vocales}.
 
 Referencia de la notación:
 @ref{Notación antigua},
@@ -3351,11 +3464,12 @@ El uso del marcado para centrar texto y para disponer las líneas en
 columnas se describe en @ref{Formatear el texto}.
 
 Casi todos estos elementos se muestran en uno u otro de los dos versos
-en la plantilla, véase @qq{Salmos} en @rlearning{Conjuntos vocales}.
+en la plantilla, véase @rlearning{Salmos}.
 
 @seealso
 Manual de aprendizaje:
-@rlearning{Conjuntos vocales}.
+@rlearning{Salmos},
+@rlearning{Plantillas de conjuntos vocales}.
 
 Referencia de la notación:
 @ref{Tipografías},
index 292e6d817d855d93d39072532a0f6d482f60f0e3..9aaa571ae1bf3cc4f3c5e44a74bdbea80229d11e 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: f739a44f91a0b7ef5f634b6c4ca5b45c988798c1
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
index 9db212b62347d7df090aab88b2cdaf20e94edf7f..51674e2cf1ee1ab0e71d2566f1805ba50a8c94fa 100644 (file)
@@ -1,24 +1,24 @@
 <!--
-    Translation of GIT committish: 55cabbf80554d813284d7f1dc0e08965e2b3644d
+    Translation of GIT committish: 9d074d78d7c25852afa87005e21c118630f4f83b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
 
 we depend on an external entity here, which we cannot control.  Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
 For some time, Google won't have the new location in its index, so the
-search would get nothing.  It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing.  It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
 -->
 
 <form action="http://google.com/search"
       method="get"
       name="search"
-      onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+      onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
                + search.brute_query.value"
-      onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+      onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
                   + search.brute_query.value"
-      onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+      onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
               + search.brute_query.value">
   <input type="hidden" name="btnG" value="Búsqueda en Google">
   <input type="text" name="brute_query" onfocus="this.value=''" value="Buscar">
diff --git a/Documentation/es/texidocs/GNUmakefile b/Documentation/es/texidocs/GNUmakefile
deleted file mode 100644 (file)
index 0ffa758..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
index 3f8618334bf0e9cc2a8cdf89f569b5e80f227308..45eeb479b8641b58f03ea015e432f66df3ea1c0e 100644 (file)
@@ -1,9 +1,13 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 296d30fe2fb22a66682c7529bbee0612b5863b93
   texidoces = "
-Los símbolos específicos de acordeón discanto se escriben mediante
-@code{\\markup}.  Se puede trucar la colocación vertical de los
-símbolos modificando los argumentos de @code{\\raise}.
+Este fragmento de código ha quedado obsoleto por las instrucciones de
+marcado predefinidas, véase @ruser{Accordion Registers}.  Sin embargo
+aún es útil como demostración sencilla de la forma de combinar
+símbolos: la colocación de los símbolos añadidos con @code{\\markup}
+se puede trucar modificando los argumentos de
+@code{\\translate-scaled}.  Aquí se usa @code{\\translate-scaled} en
+lugar de @code{\\translate} para que el posicionamiento de las partes
+de símbolos se adapte a los cambios en @code{font-size}.
 
 "
   doctitlees = "Símbolos de acordeón discanto"
-
diff --git a/Documentation/es/texidocs/accordion-registers.texidoc b/Documentation/es/texidocs/accordion-registers.texidoc
new file mode 100644 (file)
index 0000000..54b2cd3
--- /dev/null
@@ -0,0 +1,11 @@
+%% Translation of GIT committish: 3496b8d5f19b657c5097e913a98a522d6a0f48d8
+  texidoces = "
+Los símbolos de registración para el acordeón están disponibles como
+elementos @code{\\markup} así como en forma de eventos musicales
+autónomos (pues los cambios de registro suelen producirse entre
+eventos musicales reales).  Los registros de bajo no están muy
+estandarizados.  Pueden verse las instrucciones disponibles en la
+sección @rusernamed{Accordion Registers, Registros de acordeón}.
+
+"
+  doctitlees = "Símbolos de registros de acordeón"
index 484ec29be4934256b614475646c9058a2b4ce73b..5a46663b110f2c21b4efca87c2e307b8252f17b9 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: e797772ef677c797c169b7096a28f6a5959353ef
   texidoces = "
-
 Al escribir un bajo cifrado, podemos situar las cifras encima o debajo
 de las notas del bajo, mediante la definición de la propiedad
 @code{BassFigureAlignmentPositioning #'direction} (exclusivamente
@@ -14,4 +13,3 @@ a toda la partitura.
 
 "
   doctitlees = "Añadir un bajo cifrado encima o debajo de las notas"
-
index 793d7a26f89b8f9180100b440dd74a0d5e78b4e7..e3189690ba9c34502eeafaa98f157258a063e592 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   doctitlees = "Añadir un ámbito por voz"
   texidoces = "
 Se puede añadir un ámbito por cada voz. En este caso, el ámbito se
index a9ec8dfa19b768970843931ffdee2022e1717c5f..45c0aed5a7b943f6879f935c587140e225049d33 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   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 c3ab2a4cd783c3e7cb5590f657c6bc84d6716f76..253f3e6a4de93cd3dd2a7c0d2763a40ebc9a3afd 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidoces = "
 Se puede añadir (posiblemente de forma temporal) un pentagrama
 nuevo una vez que la pieza ha comenzado.
diff --git a/Documentation/es/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc b/Documentation/es/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc
new file mode 100644 (file)
index 0000000..8f6b6d9
--- /dev/null
@@ -0,0 +1,14 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Si tiene más de una voz en el mismo pentagrama, el cambio de
+octavación de una voz transportará la posición de las notas en todas
+las voces mientras dure el corchete de octava.  Si la octavación se
+quiere aplicar a una voz solamente, se deben ajustar explícitamente la
+middleCPosition y el corchete de octava.  En este fragmento de código,
+el valor de middleCPosition para la clave de Fa es normalmente 6, seis
+posiciones por encima de la línea del Do central, de manera que en la
+porción de 8va el valor de middleCPosition es aún 7 posiciones (una
+octava) más alta.
+
+"
+  doctitlees = "Añadir una indicación de octava alta a una sola voz"
index bc91b3bc115e7c012404f37aa5b34a96732f0c57..f01486276f6148240dd7e6a434be378e790482fe 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Para añadir indicaciones de línea divisoria dentro del contexto de
 los nombres de acorde @code{ChordNames}, incluya el grabador
@@ -6,4 +6,3 @@ los nombres de acorde @code{ChordNames}, incluya el grabador
 
 "
   doctitlees = "Añadir barras de compás al contexto de nombres de acorde (ChordNames)"
-
index bb47f41b1cbde394b4066fe40af8c2cd90e649d4..a97f5addca02a7028cd70da0681323ec81c95cd1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 La sintaxis de LilyPond puede implicar muchas colocaciones poco
 comunes para los paréntesis, corchetes, etc, que a veces se tienen
index 42e6bd585666297e0f88441df285b94a143b12a2..8a151b50a9e50e3291afc320f4176a30d85a5cba 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Mediante la utilización de las potentes herramientas preconfiguradas
 como la función @code{\\drummode} y el contexto @code{DrumStaff}, la
@@ -10,4 +10,3 @@ de líneas.
 
 "
   doctitlees = "Escritura de partes de percusión"
-
diff --git a/Documentation/es/texidocs/adding-extra-fingering-with-scheme.texidoc b/Documentation/es/texidocs/adding-extra-fingering-with-scheme.texidoc
new file mode 100644 (file)
index 0000000..8a81c92
--- /dev/null
@@ -0,0 +1,12 @@
+%% Translation of GIT committish: 84d2fa7df561701dc9eb882df69c127f575f2df7
+  texidoces = "
+Se pueden añadir elementos adicionales a las notas usando
+@code{map-some-music}.  En este ejemplo se ajunta una inscripción
+adicional a una nota.
+
+En general se debe efectuar un @code{\\displayMusic} de la música que
+queremos crear, y luego escribir una función que haga el trabajo sobre
+las partes adecuadas de la música por nosotros.
+
+"
+  doctitlees = "Incluir digitaciones adicionales con Scheme"
diff --git a/Documentation/es/texidocs/adding-fingerings-to-a-score.texidoc b/Documentation/es/texidocs/adding-fingerings-to-a-score.texidoc
new file mode 100644 (file)
index 0000000..9928c9e
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Se pueden escribir instrucciones de digitación usando una sintaxis muy
+sencilla.
+
+"
+  doctitlees = "Añadir digitaciones a la partitura"
index ad2aef5ca17abbcf59a12be31db73a0e643fd538..fd8308146db052225f3b1657e9a25b655a514159 100644 (file)
@@ -3,6 +3,4 @@
 Para añadir digitaciones a las tablaturas, utilice una combinación de
 @code{\\markup} y @code{\\finger}.
 "
-
   doctitlees = "Añadir digitaciones a las tablaturas"
-
diff --git a/Documentation/es/texidocs/adding-indicators-to-staves-which-get-split-after-a-break.texidoc b/Documentation/es/texidocs/adding-indicators-to-staves-which-get-split-after-a-break.texidoc
new file mode 100644 (file)
index 0000000..fa41985
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Este fragmento de código define la instrucción
+@code{\\splitStaffBarLine}, que añade flechas en las direcciones
+Noroeste y Sudeste en una línea divisoria, para denotar que cada una
+de las voces que comparten un pentagrama continuán en su propio
+pentagrama en el siguiente sistema.
+
+"
+  doctitlees = "Añadir indicadoes a los pentagramas que se dividen después de un salto de línea"
diff --git a/Documentation/es/texidocs/adding-links-to-objects.texidoc b/Documentation/es/texidocs/adding-links-to-objects.texidoc
new file mode 100644 (file)
index 0000000..f4040bb
--- /dev/null
@@ -0,0 +1,14 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Para añadir un enlace al sello de un objeto gráfico, podemos usar
+@code{add-link} tal y como se define aquí.  FUnciona con
+@code{\\override} y con @code{\\tweak}.  Inconveniente:
+@code{point-and-click} (apuntar y pulsar) quedará obstacuilzado por
+los objetos gráficos enlazados.
+
+Limitación: funciona solamente para PDF.
+
+Los objetos enlazados se colorean con una instrucción aparte.
+
+"
+  doctitlees = "Añadir enlaces a los objetos"
index 0808b73cd68ff5f56b2f3b66dfe62f5c5d95272d..829bd2df07fa2a1aaa8c5049b7c4b0cb29433e39 100644 (file)
@@ -1,5 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
   texidoces = "
    Este ejemplo muestra una forma de simplificar la adición de muchas
 notas guía orquestales a la reducción de piano en una partitura vocal.
@@ -15,8 +14,4 @@ pasajes como guía, pero no se pueden superponer en el tiempo entre
 ellos.
 
 "
-
- doctitlees = "Añadir notas guía orquestales a una partitura vocal"
-
-
-
+  doctitlees = "Añadir notas guía orquestales a una partitura vocal"
index ab773d89d2d6cbc4b75477c90678fb0b07e018d9..3206e89f49ada818ae2efc7dff3fdde0013268fa 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 La función @code{\\parenthesize} es un truco especial que encierra
 objetos entre paréntesis.  El grob asociado es @code{ParenthesesItem}.
index 31de8e659b5581a2321b4b4f8173b9adc81a5086..398b138fa0337997efe65fc3221b53d75e9f66d5 100644 (file)
@@ -4,4 +4,3 @@ Con algo de código de Scheme, se puede añadir fácilmente la fecha
 actual a una partitura.
 "
   doctitlees = "Añadir la fecha actual a una partitura"
-
diff --git a/Documentation/es/texidocs/adding-timing-marks-to-long-glissandi.texidoc b/Documentation/es/texidocs/adding-timing-marks-to-long-glissandi.texidoc
new file mode 100644 (file)
index 0000000..63655dc
--- /dev/null
@@ -0,0 +1,11 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidoces = "
+Los pulsos que se saltan en glissandos muy largos se indican a veces
+mediante marcas de tiempo, que a menudo consisten en figuras sin
+cabeza.  Estas plicas se pueden usar también para albergar
+indicaciones expresivas intermedias.
+
+Si las plicas no quedan bien alineadas con el glissando, podría ser
+necesario recolocarlas ligeramente.
+"
+  doctitlees = "Añadir marcas de tiempo a glissandos largos"
index 9ec9c92aa5810125c90528c52adce7ffb2b28ee5..fb9ce6ddc17f8fe742f29685f081e57e0f579fcf 100644 (file)
@@ -9,4 +9,3 @@ también el fragmento de código @qq{Volta multi staff}.
 
 "
   doctitlees = "Añadir corchetes de primera y segunda vez a más pentagramas"
-
index 27e3f0c890bcc3374d70693604d3f207581c05ed..6ebffcad4160e62dfcac758f3555225f8b8e649c 100644 (file)
@@ -1,10 +1,9 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
- doctitlees = "Voces adicionales para evitar colisiones"
- texidoces = "
+%% Translation of GIT committish: f0a8d907612e79271f97a2936165f57505b12350
 doctitlees = "Voces adicionales para evitar colisiones"
 texidoces = "
 En ciertos casos de polifonía compleja, se necesitan voces adicionales
 para evitar colisiones entre las notas.  Si se necesitan más de cuatro
 voces paralelas, las voces adicionales se añaden definiendo una
 variable que utiliza la función de Scheme @code{context-spec-music}.
 
 "
-
index 035253bb4f6498c26d9a4ccab846914dd8ac6115..150042ab965875bd971ee97b1aee234ec57d75d4 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se puede ajustar la separación entre las notas de adorno utilizando la
 propiedad @code{spacing-increment} de @code{Score.GraceSpacing}.
 
 "
-
   doctitlees = "Ajuste del espaciado de las notas de adorno"
index 6dc9dc9322419e6df222b4a6327f21d8f7139961..38599b19816655d50ad743ab124ca5dad248bcfe 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Este fragmento de código muestra cómo situar la línea de base de la
 letra más cerca del pentagrama.
 
 "
   doctitlees = "Ajuste del especiado vertical de la letra"
-
index 20e3835e0ecfb4d44d2e418baab0a398be36c8f8..257374f0bd2e4539c15cafb333562bfcbb9aabd8 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Puede ser necesario trucar la propiedad
 @code{shortest-duration-space} para poder ajustar el tamaño de las
@@ -6,4 +6,3 @@ caídas y subidas de tono («falls» y «doits»).
 
 "
   doctitlees = "Ajustar la forma de las subidas y caídas de tono"
-
index 02ebc09be7f64314a8fd5d5bc925e6c1124865bc..b9323a802ec33bde119cd9f11329e631a354bc81 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 La alineación horizontal de los nombres de instrumento se puede
 trucar modificando la propiedad @code{Staff.InstrumentName
index f69efa020a56369f45a591eb419abc67d9192817..f5e63b7035b88a7ea78c358635264028b2228df0 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Los números de compás se alinean de forma predeterminada por la
 derecha con su objeto padre. Éste es por lo general el borde
 izquierdo de una línea o, si los números se imprimen dentro de la
@@ -9,6 +8,4 @@ también se pueden situar directamente sobre la barra de compás o
 alineados por la izquierda con ella.
 
 "
-
   doctitlees = "Alineación de los números de compás"
-
diff --git a/Documentation/es/texidocs/aligning-marks-with-various-notation-objects.texidoc b/Documentation/es/texidocs/aligning-marks-with-various-notation-objects.texidoc
deleted file mode 100644 (file)
index 54d062e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-  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
-objetos se encuentran @code{ambitus}, @code{breathing-sign},
-@code{clef}, @code{custos}, @code{staff-bar}, @code{left-edge},
-@code{key-cancellation}, @code{key-signature} y @code{time-signature}.
-
-En estos casos, las marcas de texto se centran horizontalmente sobre
-el objeto, aunque esto se puede cambiar, como se muestra en la segunda
-línea de este ejemplo (en una partitura con varios pentagramas, se
-debe hacer este ajuste para todos los pentagramas).
-
-"
-  doctitlees = "Alinear marcas con varios objetos de notación"
-
diff --git a/Documentation/es/texidocs/aligning-objects-created-with-the--mark-command.texidoc b/Documentation/es/texidocs/aligning-objects-created-with-the--mark-command.texidoc
new file mode 100644 (file)
index 0000000..40350d7
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+De forma predeterminada, la instrucción @code{\\mark} centra los
+objetos sobre la barra de compás.  Este comportamiento se puede
+modificar para que la alineación se haga a la derecha o a la
+izquierda.
+
+"
+  doctitlees = "Alineamiento de objetos creados con la instrucción \\mark "
diff --git a/Documentation/es/texidocs/aligning-syllables-with-melisma.texidoc b/Documentation/es/texidocs/aligning-syllables-with-melisma.texidoc
new file mode 100644 (file)
index 0000000..bacab34
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+De forma predeterminada, las sílabas de la letra que comienzan un
+melisma se alinean a la izquierda sobre su nota correspondiente.  Se
+puede alterar la alineación usando la propiedad
+@code{lyricMelismaAlignment}.
+
+"
+  doctitlees = "Alineación de sílabas con melisma"
index 7584ee598e2b6cc1651219bd05014f60bbed9dd7..dcad48cb7bc995dd1f7b9c420f292e680afd11bb 100644 (file)
@@ -1,12 +1,9 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Las cifras de digitación orientadas verticalmente se colocan de forma
 predeterminada fuera del pentagrama.  Sin embargo, este comportamiento
 se puede cancelar.  Nota: se debe usar una construcción de acorde <>,
 aunque sea una sola nota.
 
-
 "
   doctitlees = "Permitir que las digitaciones se impriman dentro del pentagrama"
-
index 1ebe983ea1ef2b36eaa0b98c50f830a8e2d6da82..09f040f60b9ad7cd528b214a2f977f2e5856c74d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se puede variar la longitud de las plicas de las figuras unidas por
 una barra mediante la sobreescritura de la propiedad
@@ -11,7 +11,4 @@ figuras que son mmás cortas que la longitud de la figura del último
 argumento.  También se pueden usar argumentos no enteros.
 
 "
-
-doctitlees = "Alterar la longitud de las plicas unidas por una barra"
-
-
+  doctitlees = "Alterar la longitud de las plicas unidas por una barra"
index 8cf6f00a4fc0526c7cf5b3040d2cc86ae683db06..7e09048b12bd100001fa516330454746144830c0 100644 (file)
@@ -1,5 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 5c42908f1c8d0a5c1d88851a2d793ca55476612c
   texidoces = "
 Se pueden seleccionar dos métodos alternativos para la numeración de
 compases, especiales para cuando hay repeticiones.
diff --git a/Documentation/es/texidocs/alternative-breve-note.texidoc b/Documentation/es/texidocs/alternative-breve-note.texidoc
deleted file mode 100644 (file)
index 5172593..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-  texidoces = "
-Este código muestra cómo usar la forma alternativa de la breve o
-cuadrada con dos líneas verticales a los lados de la cabeza, en lugar
-de una sola línea.
-
-"
-  doctitlees = "Cabeza de breve (cuadrada) alternativa"
\ No newline at end of file
diff --git a/Documentation/es/texidocs/alternative-breve-notes.texidoc b/Documentation/es/texidocs/alternative-breve-notes.texidoc
new file mode 100644 (file)
index 0000000..dc75fb5
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Las figuras de breve también están disponibles con dos líneas
+verticales a los lados de la cabeza en lugar de una sola línea y la
+forma en estilo barroco.
+
+"
+  doctitlees = "Formas alternativas de la figura breve"
index 4a97b7be998de9dcba680cc4607d173964c14251..2ecb8fd1a98fc6e29cf7d21af457caba2368ee1e 100644 (file)
@@ -6,4 +6,3 @@ La adición del grabador @code{Ambitus_engraver} al contexto de
 pentagramas con varias voces.
 
 "
-
diff --git a/Documentation/es/texidocs/ambitus.texidoc b/Documentation/es/texidocs/ambitus.texidoc
new file mode 100644 (file)
index 0000000..e515f6f
--- /dev/null
@@ -0,0 +1,12 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Las indicaciones de ámbito o tesitura indican rangos de alturas para
+las voces.
+
+
+Las alteraciones accidentales sólo se muestran si no forman parte de
+la armadura de tonalidad. Los objetos gráficos @code{AmbitusNoteHead}
+también tienen líneas adicionales.
+
+"
+  doctitlees = "Indicaciones de tesitura"
index 2e1c0794334d01eb73fef49c1bedfa2c957f2551..821e750ea8e549e440481124fa965dcf9fdfd73c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 De forma predeterminada se añaden corchetes de análisis sencillos
 debajo del pentagrama.  El ejemplo siguiente muestra una manera de
index d934befb997c7bc65598d4a9e94ed4908e62456a..9fddfe0631002a733d58aca1b87d1231aa37639d 100644 (file)
@@ -1,9 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
   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
 antigua.
 "
-
   doctitlees = "Tipografía de música antigua"
-
index 09c175ed0eb10fa41d17eeac80861bc53bb2cd9d..c65d3ce4ed5764c6ecf6c707e4adbe8ee11e787e 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidoces = "
 Este ejemplo muestra cómo hacer una transcripción moderna de canto
 gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza
@@ -6,5 +6,4 @@ solamente cabezas de nota de blanca y de negra, y unas marcas
 especiales que indican silencios de distintas longitudes.
 
 "
-
   doctitlees = "Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)"
index 3c3de401d3e9fa999c0dd9b75a30957e1c0258cf..4e2b549f1f456ab04d659d861797b7cfcd147647 100644 (file)
@@ -1,15 +1,14 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidoces = "
 Al transcribir música mensural, es útil un «incipit» al compienzo
 de la pieza para indicar la tonalidad y el tempo
 originales. Aunque los músicos actuales están acostumbrados a las
 barras de compás para reconocer con más facilidad los patrones
 rítmicos, durante el período de la música mensural aún no se
-habíen inventado las líneas divisorias; de hecho, la medida solía
+habían inventado las líneas divisorias; de hecho, la medida solía
 cambiar a cada pocas notas. Como compromiso, a menudo las líneas
 divisorias se imprimen entre los pentagramas en vez de hacerlo
 encima de ellos.
 
 "
   doctitlees = "Plantilla de notación de música antigua (transcripción moderna de música mensural)"
-
index 03dc0c1efe92f86d46a232546cc189775ba0a53b..3152049dc3a46765d809fbb742b4961f313ef42b 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Las indicaciones de compás también se pueden grabar en estilo antiguo.
 
index 6bbaa0c89ff1901529890cb47e001e316ea142a5..8886785f0dfebc0786e91cdc0794ea2999aa1bc1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   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 759e68c8dacc542e8b840d1f73289574ce189cd3..1a09e2e0a859edf4e87d7f7ca9ae0731e79c1eea 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6f88af063980030706a883f95b20b11cdc7d780b
   doctitlees = "Aplicar estilos de cabeza según la nota de la escala"
   texidoces = "
 La propiedad @code{shapeNoteStyles} se puede usar para definir varios
@@ -21,4 +21,3 @@ correspondencia entre las funciones armónicas y los estilos de cabezas de
 nota.
 
 "
-
index fb70ef1618661ba6aec96525bb5a4b6582fb158b..ceed5316c8968c814310208fd649e616fe0e45cf 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   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
@@ -8,5 +8,4 @@ hará que la alteración aparezca una sola vez.  He aquí un ejemplo de
 cómo podría ser el comienzo de una improvisación @emph{hijaz}:
 
 "
-doctitlees = "Improvisación de música árabe"
-
+  doctitlees = "Improvisación de música árabe"
index d8d3d7b8eb27d296ce9b484002adc8f269175473..d332da45aa030a135c96ac73df53895659549f7c 100644 (file)
@@ -1,9 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se puede hacer que una ligadura de expresión sea asimétrica para
 adaptarse mejor a un patrón asimétrico de notas.
 
 "
   doctitlees = "Ligaduras asimétricas"
-
-
index faa34fb832ed49ba5c4dce476eefdffae9dd06a0..98a8bcde27a6a88fbaee5bfa2b7f832233b775fe 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se pueden subdividir las barras automáticamente.  Estableciendo la
 propiedad @code{subdivideBeams}, las barras se subdividen en
diff --git a/Documentation/es/texidocs/automatically-change-durations.texidoc b/Documentation/es/texidocs/automatically-change-durations.texidoc
new file mode 100644 (file)
index 0000000..1e01d5e
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Se puede usar <code>shiftDurations</code> para cambiar la longitud de
+las notas de una pieza musical.  Toma dos argumentos: el factor de
+escalado como una potencia de dos, y el número de puntillos que añadir
+como un entero positivo.
+
+"
+  doctitlees = "Modificar duraciones automáticamente"
diff --git a/Documentation/es/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc b/Documentation/es/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc
new file mode 100644 (file)
index 0000000..2e889f5
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+LilyPond puede alterar la dirección de la plica de las notas que van
+en la tercera línea de un pentagrama de forma que siga la melodía,
+mediante la adición del grabador @code{Melody_engraver} al contexto
+Voice y sobreescribiendo el valor de @code{neutral-direction} para el
+objeto Stem (plica).
+
+"
+  doctitlees = "Cambiar la dirección de la plica de las notas de la tercera línea automáticamente, basado en la melodía"
index 7c8fe4066c49a903c3cf59484483573fc54271c4..88fa4aa89c68ff524ad16e7c8e7b75c5661718b9 100644 (file)
@@ -1,7 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Las digitaciones y números de cuerda que se aplican a las notas
 individuales evitan automáticamente las barras y las plicas de las
 figuras, pero esto no es cierto de forma predeterminada para las
@@ -11,4 +9,3 @@ sobreescribir este comportamiento predeterminado.
 
 "
   doctitlees = "Evitar colisiones con digitaciones de acordes"
-
index 908ac7ea020edf1363a978f7237355ebcfb8d6e5..011d2d39dcd5dc5d058eda8e0efc5ea0d7764f24 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
   texidoces = "
 He aquí cómo imprimir acordes con cejilla o con media cejilla (quite
 la marca de comentario de la línea adecuada para seleccionar uno de
 ellos).
 
-La sintaxis es @code{\\bbarre #\"@var{número de traste}\" @{ notas @} }.
+La sintaxis es @code{\\bbarre #\"@var{número de traste}\"@{ notas @} }.
 
 "
   doctitlees = "Notación de acordes de cejilla para guitarra (con elemento de extensión de texto)"
index 39bd682ef858cf0bcf442482789328e061411a9f..9879885e96ec70b12979a47653c3d5c31fe03f1e 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Las reglas de final de barra especificadas en el contexto
 @code{Score} se aplican a todos los pentagramas, pero se pueden
@@ -7,4 +7,3 @@ modificar tanto en los niveles de @code{Staff} como de
 
 "
   doctitlees = "Finales de barra en el contexto Score"
-
index c7de59da7a091bb601c601e2753e798ed7e2cba5..9265296a9dbc8eaffcd728d68eef1f84d36c0e95 100644 (file)
@@ -9,4 +9,3 @@ finales de barra en 2/8 y 5/8:
 
 "
   doctitlees = "Agrupamiento de las barras en el compás de 7/8"
-
index 5c0ce5afaa20166831a14193569bd320c281acdc..0f99f2cd09933369acaca58c33bc417aa2565929 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Normalmente están prohibidos los saltos de línea si las barras
 atraviesan las líneas divisorias.  Se puede cambiar este
@@ -6,4 +6,3 @@ comportamiento como se muestra aquí:
 
 "
   doctitlees = "Barras que atraviesan saltos de línea"
-
index f8ab4cf9c2d126808520c59cce405d2a4b3b75ce..759a52c216607b938c51914529df18dbed05157a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 La instrucción @code{\\whiteout} intercala un rectángulo blanco
 debajo de un elemento de marcado.  Este rectángulo blanco no tapa
diff --git a/Documentation/es/texidocs/book-parts.texidoc b/Documentation/es/texidocs/book-parts.texidoc
new file mode 100644 (file)
index 0000000..1593625
--- /dev/null
@@ -0,0 +1,11 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Se puede usar @code{\\bookpart} para dividir un libro en varias
+partes.  La última página de cada parte vùede quedar afectada por el
+valor de @code{ragged-last-bottom}.  Los elementos de marcado de
+encabezamiento y pie de página pueden detectar que están en la última
+página de una parte, y presentar diferencias con la última página del
+libro.
+
+"
+  doctitlees = "Partes de libro"
diff --git a/Documentation/es/texidocs/breathing-signs.texidoc b/Documentation/es/texidocs/breathing-signs.texidoc
new file mode 100644 (file)
index 0000000..2ee7687
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Las marcas de respiración están disponibles para varios gustos: coma
+(la predeterminada), raya corta, uve y @qq{vías del tren} (cesura).
+
+"
+  doctitlees = "Marcas de respiración"
index 7903f5b04820f639bfa7057224bb683ebeda7004..20a2093ac8dfdfae191487e1ea9346e35b94e9c5 100644 (file)
@@ -1,18 +1,14 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: a2030063498b24f5b08e10b0e429a12a82abbf2d
   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
-respectiva del regulador, tapándola.  El rectángulo se define como
-código PostScript dentro de un elemento de marcado de texto.
+Para hacer invisibles partes de un regulador de crescendo, se usa el
+método de dibujar un rectángulo blanco encima de la parte respectiva
+del regulador, tapándola.
 
-Para realizar un ajuste fino de la posición y el tamaño del
-elemento de marcado, se puede establecer el número que precede a
-@code{setgray} en la definición de PostScript a un valor menor que
-la unidad, haciendo que sea de color gris.  Los dos números que
-están antes de @code{scale} en el código PostScript son los
-responsables del ancho y la altura del rectángulo, y los dos
-números que están antes de @code{translate} cambian las
-coordenadas X e Y de origen del rectángulo.
+La instrucción de marcado @code{with-dimensions} indica a LilyPond que
+considere solamente el extremo inferior del rectángulo cuando realice
+el espaciado de éste frente al regulador.  La propiedad
+@code{staff-padding} evita que el rectángulo quepa entre el regulador
+y el pentagrama.
 
 Asegúrse de poner el regulador en una capa más baja que el
 elemento de marcado de texto para trazar el rectángulo encima del
index 1c2f02baf809d9a6cbebc1279ed57fab755cf7e7..a498d08ddb5ebfa42c1c862486a6ac63d8971893 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   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
@@ -6,4 +6,4 @@ de código presenta una combinación visualmente satisfactoria de estas
 dos marcas.
 
 "
-  doctitlees = "Cesura tipo \"vías del tren\" con calderón"
+  doctitlees = "Cesura tipo \"vías del tren\"con calderón"
index 80b94b8e32056953b714ea16d779b37b0c9adc7e..d5b311b804126ffc4c272eead4159d48beae9e14 100644 (file)
@@ -1,9 +1,12 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Este ejemplo proporciona una función para tipografiar un regulador con
-texto por debajo, como @qq{molto} o @qq{poco}. El ejemplo ilustra
-también cómo modificar la manera en que se imprime normalmente un
-objeto, utilizando código de Scheme.
+texto por debajo, como @qq{molto} o @qq{poco}.  El texto añadido
+cambia la dirección de acuerdo con la del regulador.  El objeto
+Hairpin está alineado con DynamicText.
+
+El ejemplo ilustra también cómo modificar la manera en que se imprime
+normalmente un objeto, utilizando código de Scheme.
 
 "
   doctitlees = "Centrar texto debajo de un regulador"
diff --git a/Documentation/es/texidocs/centered-measure-numbers.texidoc b/Documentation/es/texidocs/centered-measure-numbers.texidoc
new file mode 100644 (file)
index 0000000..e46c646
--- /dev/null
@@ -0,0 +1,11 @@
+%% Translation of GIT committish: 4d9770a67176122b9779426cf540ad1694f07f61
+  texidoces = "
+Con frecuencia, las partituras de obras para conjuntos grandes tienen
+los números de compás debajo del sistema y centrados horizontalmente
+sobre el ancho del compás.  Este fragmento de código muestra cómo
+puede usarse el grabador @code{Measure_counter_engraver} para simular
+esta práctica notacional.  Aquí hemos añadido el grabador a un
+contexto @code{Dynamics}.
+
+"
+  doctitlees = "Números de compás centrados"
diff --git a/Documentation/es/texidocs/centering-markup-on-note-heads-automatically.texidoc b/Documentation/es/texidocs/centering-markup-on-note-heads-automatically.texidoc
new file mode 100644 (file)
index 0000000..1fa8e58
--- /dev/null
@@ -0,0 +1,15 @@
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
+  texidoces = "
+Por razones técnicas, las inscripciones textuales que se adjuntan a la
+cabeza de las notas no pueden centrarse fácilmente sobre el ancho de
+la cabeza de la nota, a diferencia de las articulaciones.
+
+En lugar de usar trucos de ensayo y error para el desplazamiento, este
+fragmento de código utiliza un grabador de Scheme para reiniciar el
+elemento padre horizontal de cada elemento de marcado a una
+@code{NoteColumn}.  Esto también permite colocar texto a continuación
+de las notas que hayan sufrido un desplazamiento por medio de
+@code{force-hshift}.
+
+"
+  doctitlees = "Centrado de elementos de marcado sobre la cabeza de las notas de forma automática"
index 59a9e032ed9ff8ea32e39deb740e000d975e2fb0..fd3637706adc6840b8c6eaadec4e29db5a96c499 100644 (file)
@@ -5,4 +5,3 @@ utilice la siguiente función de Scheme.
 
 "
   doctitlees = "Cambiar el tamaño de la marca de \\flageolet"
-
index 0b1ec8d4710f4bcfa5d23cd996d5c7deecbb6c6c..3e267d660c52e568845f032a0085f196031f4f57 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se pueden modificar notas individuales de un acorde con la instrucción
 @code{\\tweak}, alterando la propiedad @code{font-size}.
index b4b639ecf30e4ec30f78b8fef104cfae8a72a020..0bb3c95d745b7c34aacbb9407f81d28d3c3e67f1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se insertan automáticamente barras en ángulo cuando se detecta un
 intervalo muy grande entre las notas.  Se puede hacer un ajuste
@@ -11,4 +11,3 @@ establecido a 5.5 espacios de pentagrama.
 
 "
   doctitlees = "Cambiar el salto de las barras en ángulo"
-
index 4048d80644f6e41b4ad8ed293f86a10d2050cbca..2545fa4bc3dbe90712f68dcd7c734fac664162a6 100644 (file)
@@ -5,4 +5,3 @@ nombre de un acorde para que sea cualquier elemento de marcado.
 
 "
   doctitlees = "Modificación del separador de acordes"
-
index be65ad8c03d2f2e0d30686a938d65b1b33aaf210..3284ecc64d881f1f457c6c988a0f334a532fd5ca 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
- doctitlees = "Cambiar la forma de los silencios multicompás"
- texidoces = "
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
 doctitlees = "Cambiar la forma de los silencios multicompás"
 texidoces = "
 Si hay diez compases de silencio o menos, se imprime en el pentagrama
 una serie de silencios de breve y longa (conocidos en alemán como
 @qq{Kirchenpausen}, «silencios eclesiásticos»); en caso contrario se
@@ -8,4 +8,3 @@ muestra una barra normal.  Este número predeterminado de diez se
 puede cambiar sobreescribiendo la propiedad @code{expand-limit}:
 
 "
-
index a8d72ec60372e5d9a3f492caf2e2f1613f3b7c31..2507b26aa6abf4e5b92f85434f269ef814467866 100644 (file)
@@ -1,12 +1,8 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Los diagramas de posiciones de acordes se pueden orientar de tres
 formas.  De manera predeterminada se alinena la cuerda o traste
 superior en las distintas alineaciones.
 
-
 "
-
   doctitlees = "Modificar la orientación de los trastes"
index 2ec136ea394b28852dfc4d130be16ea51901177a..8437ed92771bbebb7c83f9042c62a2353089f749 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 45dd19546e9b75b3e1e977732f0962f35dd3290e
   texidoces = "
 Al producir una salida MIDI, el comportamiento predeterminado es que
 cada pentagrama representa un canal MIDI, con todas las voces de dicho
index 87485b6e7473ebae86b7b198fd95d9616bc2fc39..5f69a9d1c92f566b5b3a4f9dec2aa3a4873d909d 100644 (file)
@@ -6,4 +6,3 @@ y de unísono:
 
 "
   doctitlees = "Cambiar los textos de partcombine"
-
diff --git a/Documentation/es/texidocs/changing-properties-for-individual-grobs.texidoc b/Documentation/es/texidocs/changing-properties-for-individual-grobs.texidoc
new file mode 100644 (file)
index 0000000..fa249a9
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+La instrucción @code{\\applyOutput} hace posible el ajuste fino de
+cualquier objeto de presentación, en cualquier contexto.  Requiere una
+función de Scheme contres argumentos.
+
+"
+  doctitlees = "Modificación de propiedades para objetos gráficos individuales"
diff --git a/Documentation/es/texidocs/changing-stanza-fonts.texidoc b/Documentation/es/texidocs/changing-stanza-fonts.texidoc
new file mode 100644 (file)
index 0000000..bd5e326
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Se pueden cambiar las fuentes tipográficas de forma independiente para
+cada estrofa, incuida la fuente que se usa para imprimir el número de
+estrofa.
+
+"
+  doctitlees = "Modificar la tipografía para cada estrofa"
index a16b7ba7d0ae1adfc0ffcd4d106774005f1a8cab..eaa6b459fb3edf02910a43a72fa9a5c2593d2fb9 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se puede modificar el texto empleado para los crescendos y
 decrescendos modificando las propiedades de contexto
@@ -12,4 +12,3 @@ otros valores posibles se encuentran @code{'line} (línea),
 
 "
   doctitlees = "Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales"
-
index ec9ac861fcf523a2b56a0acf544451b8cd1a97fb..0b87bcc2daee8fa68f5d75a1b9cbe1f31b90ce2c 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-Es posible ajustar la separación en las indicaciones de tesitura.
+Es posible ajustar la separación predeterminada entre
+las notas de la indicación de tesitura y la línea que las une.
 
 "
-
   doctitlees = "Modificación de la separación en las indicaciones de tesitura"
index 32ece0dd46619a0fd3a12212ab0ffc382b236c2a..348f94a122c87e41dbb3540784bfc5335410c4d3 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 El glifo de la marca de respiración se puede ajustar
 sobreescribiendo la propiedad de texto del objeto de presentación
@@ -6,4 +6,3 @@ sobreescribiendo la propiedad de texto del objeto de presentación
 
 "
   doctitlees = "Cambiar el símbolo de la marca de respiración"
-
diff --git a/Documentation/es/texidocs/changing-the-default-text-font-family.texidoc b/Documentation/es/texidocs/changing-the-default-text-font-family.texidoc
new file mode 100644 (file)
index 0000000..1ae33f4
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Las familias de fuente tipográfica para el texto se pueden
+sobreescribir con @code{make-pango-font-tree}.
+
+"
+  doctitlees = "Cambiar la familia de tipografía predeterminada para el texto"
diff --git a/Documentation/es/texidocs/changing-the-interval-of-lines-on-the-stave.texidoc b/Documentation/es/texidocs/changing-the-interval-of-lines-on-the-stave.texidoc
new file mode 100644 (file)
index 0000000..02d44c4
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Se usa @code{staffLineLayoutFunction} para cambiar la posición de las
+notas.  Este fragmento de código muestra cómo ajustar su valor al de
+@code{ly:pitch-semitones} para producir una escala cromática con la
+distancia entre cada espacio y línea del pentagrama igual a un
+semitono.
+
+"
+  doctitlees = "Cambiar el intervalo de las líneas de la pauta"
index d2f8b5c40e321c0767c429a78b9144476893309c..c95ee05e974504e7b583db523113da880e56205f 100644 (file)
@@ -1,9 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-Este código muestra cómo cambiar la cantidad de puntillos de una nota.
+La cantidad de puntillos de una nota se puede modificar
+independientemente de los puntillos que se escriben después de la nota.
 
 "
-
   doctitlees = "Modificar el número de puntillos de una nota"
-
diff --git a/Documentation/es/texidocs/changing-the-number-of-lines-in-a-staff.texidoc b/Documentation/es/texidocs/changing-the-number-of-lines-in-a-staff.texidoc
new file mode 100644 (file)
index 0000000..b08aa2f
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+El número de líneas de una pauta se puede modificar sobreescribiendo
+la propiedad @code{line-count} del objeto @code{StaffSymbol}.
+
+"
+  doctitlees = "Cambiar el número de líneas de una pauta"
index f35d6b2a028509dce7ffa1c295ee797f8c4a8390..1468ef750962e6dbd27db7c1db9d15863d2a26bf 100644 (file)
@@ -7,4 +7,3 @@ después de los números, según el valor de las propiedades
 
 "
   doctitlees = "Cambiar las posiciones de las alteraciones del bajo cifrado"
-
index 980bc1f340356250f430f4f8ae90a60c1e60e295..238bbf095d4918364fd75c00fa824430a46f641b 100644 (file)
@@ -1,10 +1,7 @@
-%%%    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
   texidoces = "
-
 Se puede cambiar el tamaño y grosor de las líneas de los diagramas de
 posiciones para instrumentos de viento madera.
 
 "
-
   doctitlees = "Modificar el tamaño de los diagramas de viento madera"
diff --git a/Documentation/es/texidocs/changing-the-staff-size.texidoc b/Documentation/es/texidocs/changing-the-staff-size.texidoc
new file mode 100644 (file)
index 0000000..b9e113d
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Aunque la manera más sencilla de redimensionar los pentagramas es usar
+@code{#(set-global-staff-size xx)}, el tamaño de una pauta individual
+se puede cambiar escalando las propiedades de @code{'staff-space} y de
+@code{fontSize}.
+
+"
+  doctitlees = "Modificar el tamaño de la pauta"
index bd5a837c1e5eef709124277f2da9a0d792656855..42b47f69eeee49ee7ae598de06f196435fec213b 100644 (file)
@@ -4,6 +4,4 @@ Para cambiar el tempo en la salida MIDI sin
 imprimir nada, hacemos invisible la indicación metronómica:
 
 "
-
   doctitlees = "Cambiar el tempo sin indicación metronómica"
-
index fd093159ce8aa32581b1e72d9d62158d32d42dfe..e900f61b841fd65c7991c429b8d9704e1626e0ea 100644 (file)
@@ -8,5 +8,3 @@ relación exhaustiva.
 
 "
   doctitlees = "Modificar el texto de las indicaciones de pedal"
-
-
index e3e15bd8f3385c97a2f15ea03e960fa5ad43472a..132224b7488842457fd46791fa49161396848966 100644 (file)
@@ -1,12 +1,9 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
- doctitlees = "Cambiar el número del grupo especial"
- texidoces = "
-
-De forma predeterminada sólo se imprime el numerador del grupo
-especial sobre el corchete de grupo, es decir, el denominador del
-argumento de la instrucción @code{\\times}. De forma alternativa, se
-puede imprimr un quebrado en la forma numerador:denominador del número
-del grupo, o eliminar el número.
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  doctitlees = "Cambiar el número del grupo especial"
+  texidoces = "
+De forma predeterminada sólo se imprime sobre el corchete de grupo el
+numerador del grupo especial. De forma alternativa, se puede imprimr
+un quebrado en la forma numerador:denominador del número del grupo, o
+eliminar el número.
 
 "
-
index 92fc372b7eac972204cb4ac328d330d28f01d3a6..1bf248a3680924a35bc1300d00bbea95b46f2e20 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: e797772ef677c797c169b7096a28f6a5959353ef
   texidoces = "
 La propiedad @code{measureLength}, junto con
 @code{measurePosition}, determina cuándo es necesario dibujar una
index 643cfd636068ea6cc27d73fac66143c3b690bec3..5ce12e5243d566145fab7745885a223c81564f9a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 75988240e6ba28320ce5d835670712cc09cbd966
   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 cc1f4d43205a025c630f6a12cc755fc0ec85a02d..b3c67d89d512dac22fdc248830790e8577e42c49 100644 (file)
@@ -1,5 +1,4 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
   texidoces = "
 Los deslizamientos para acordes se pueden indicar tanto en el contexto
 @code{Staff} como en @code{TabStaff}.  Los números de cuerda son
@@ -7,5 +6,4 @@ necesarios para TabStaff porque los cálculos de cuerda automáticos son
 diferentes para los acordes y para notas sueltas.
 
 "
-
   doctitlees = "Glissando de acordes en tablatura"
index c506098230b7b6d785542f4da60c6c36a0c890b5..491956220ddca755d82582fedb61f23032542395 100644 (file)
@@ -6,4 +6,3 @@ específicos.
 
 "
   doctitlees = "Excepciones para los nombres de acorde"
-
index 34af0c7aee8896c126627c92c6fd11fb50dd8d2b..835b88d79c8625a96ae4c204c840d827835e5e65 100644 (file)
@@ -5,4 +5,3 @@ puede ajustar mediante majorSevenSymbol.
 
 "
   doctitlees = "Nombre de acorde maj7"
-
index bd162b5194f52eeceb2d8748f815a5a74359bc14..95ab357730cbedca9b140187dd77803fe1ce5a8a 100644 (file)
@@ -4,6 +4,4 @@ Se puede hacer que los diagramas de posiciones se muestren sólo
 cuando el acorde cambia o al comienzo de una nueva línea.
 
 "
-
   doctitlees = "Cambios de acorde de posiciones de trastes"
-
diff --git a/Documentation/es/texidocs/clefs-can-be-transposed-by-arbitrary-amounts.texidoc b/Documentation/es/texidocs/clefs-can-be-transposed-by-arbitrary-amounts.texidoc
new file mode 100644 (file)
index 0000000..4940497
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Se pueden transponer las claves en intervalos arbitrarios, no solo
+octavas.
+
+"
+  doctitlees = "Las claves se pueden transponer en intervalos arbitrarios"
diff --git a/Documentation/es/texidocs/coloring-notes-depending-on-their-pitch.texidoc b/Documentation/es/texidocs/coloring-notes-depending-on-their-pitch.texidoc
new file mode 100644 (file)
index 0000000..c17244c
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Es posible colorear la cabeza de las notas dependiendo de su altura
+y/o de su nombre: la función que se usa en este ejemplo hace posible
+incluso distinguir los armónicos.
+
+"
+  doctitlees = "Colorear las notas según su altura"
index 05e9a190b850b1eb93d5b0ba2d4fb72b466b33ea..9b27ded64ad6715d771c975cba4043fc99903f35 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 La herramienta de combinación de partes (instrucción
 @code{\\partcombine}) permite la combinación de varias partes
 diferentes sobre el mismo pentagrama.  Las indicaciones textuales
@@ -19,4 +18,3 @@ textos.
 
 "
   doctitlees = "Combinar dos partes sobre el mismo pentagrama"
-
index 9af5c9f654bcdd6efe1b9f88d75fc8c46512e803..a92fec7ec00ba97d73004b6b0607235af769b611 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
- doctitlees = "Indicaciones de compases compuestos"
- texidoces = "
+%% Translation of GIT committish: d000c543411bb4c2fb459578bd87ef357ac4aa92
 doctitlees = "Indicaciones de compases compuestos"
 texidoces = "
 Las indicaciones de compás poco frecuentes como @qq{5/8} se pueden
 ejecutar como compases compuestos (p.ej. @qq{3/8 + 2/8}), que combinan
 dos o más metros diferentes. LilyPond puede hacer la música de este
@@ -11,4 +11,3 @@ gráficas de la agrupación de compases; véase el fragmento de código
 apropiado en la base de datos).
 
 "
-
index 8768d2e988e1cdb108e89dc11e699ba97cf4ac26..ff25713e13d5150e4f8ab2578da99820449a5eff 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 5c42908f1c8d0a5c1d88851a2d793ca55476612c
   texidoces = "
 La agrupación de pulsos dentro de un compás está controlada por la
 propiedad de contexto @code{beatStructure}.  Hay establecidos valores
@@ -24,5 +24,4 @@ el compás de 5/8 se agrupa de acuerdo con el ajuste predeterminado que
 está en @file{scm/time-signature-settings.scm}:
 
 "
-doctitlees = "Símbolos de dirección y símbolos de agrupación de compás"
-
+  doctitlees = "Símbolos de dirección y símbolos de agrupación de compás"
diff --git a/Documentation/es/texidocs/consistently-left-aligned-bar-numbers.texidoc b/Documentation/es/texidocs/consistently-left-aligned-bar-numbers.texidoc
new file mode 100644 (file)
index 0000000..c942efe
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Cuando se alinean los números de compás, pueden aparecer problemas de
+superposición con los corchetes de sistema.  Este fragmento de código
+lo resuelve dejando alineados a la derecha los números de compás
+después de un salto de línea.
+
+"
+  doctitlees = "Números de compás alineados a la izquierda de forma consistente"
index a51558022b0712ed679e40ba4d39f8ddc0b44bc9..2c403c43328da7d1403bb3906f830a9aef8b9b8e 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se puede tipografiar un gissando contemporáneo sin nota final
 utilizando una nota oculta y temporalización de cadenza.
 
 "
   doctitlees = "Glissando contemporáneo"
-
index 9e8710ac866253752b8d99a3b21deaa0a40456a1..bd7caa0a24bc791a0c662328311b60348c45025d 100644 (file)
@@ -1,5 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 La visibilidad de los objetos de extensión que acaban en la primera
 nota después de un salto de línea está controlada por la función de
@@ -15,7 +14,5 @@ De forma inversa, los objetos de extensión que son visibles
 normalmente, como los objetos de extensión de texto, se pueden
 ocultar habilitando la función de callback.
 "
-
   doctitlees = "Controlar la visibilidad de los objetos de
   extensión después de un salto de línea"
-
index d7d6513950229cba01f0ce7557e6ca16b6bec0a3..cd254f7ccf4a88de298000ef18bcc09dff4e96a6 100644 (file)
@@ -5,8 +5,5 @@ digitación.  Para que se tenga en cuenta la orientación de las
 digitaciones, se debe utilizar una construcción de acorde <> aunque
 sea una sola nota.
 
-
 "
   doctitlees = "Controlar la colocación de las digitaciones de acordes"
-
-
index 2d1f48e469e415aadfec2c091702c9347fb92523..3b8a74bdf5bd33f989b2f63031f8f1af10603d15 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 El orden vertical que ocupan las inscripciones gráficas está
 controlado con la propiedad @code{'script-priority}. Cuanto más
@@ -13,4 +13,3 @@ lugar.
 
 "
   doctitlees = "Controlar la ordenación vertical de las inscripciones"
-
index ec65723313346f0938981db8defbb8f11888e22e..cf72a45a072321421b4c128f78349eebe769b1ab 100644 (file)
@@ -1,5 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 El comportamiento predeterminado de la visibilidad de los corchetes de
 grupo de valoración especial es imprimir el corchete a no ser que haya
@@ -10,5 +9,4 @@ la visibilidad de los corchetes de grupo, establezca la propiedad
 corchete solamente si no hay barra).
 
 "
-
   doctitlees = "Controlar la visibilidad de los corchetes de grupo especial"
index bd5153425772b84cf68f44fe4831b82de686a0ab..fbac8f31fecc029f37d16c1b11bf7a0b11d9df3e 100644 (file)
@@ -1,5 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-texidoces = "
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  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
 varias sobreescriturasw de propiedades.  La propiedad
@@ -9,7 +9,4 @@ property}.  El valor de @code{halign} se utiliza para colocar el
 grupeto horizontalmente.
 
 "
-
-doctitlees = "Crear un grupeto de anticipación"
-
-
+  doctitlees = "Crear un grupeto de anticipación"
index b6972ee81a86f1c0b39a045dbb343931ff9dd341..15ccc7816c1ae20a19064851b2daea7d0213626d 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: e797772ef677c797c169b7096a28f6a5959353ef
   texidoces = "
 En una música que tenga muchas apariciones de la
 misma secuencia de notas a distintas alturas, podría ser de
 utilidad la siguiente función musical.  Admite una nota, de la que
 sólo se utiliza su altura.  Las funciones de apoyo en Scheme se
-han tomado prestadas del documento de \"Consejos y trucos\" de la
+han tomado prestadas del documento de \"Consejos y trucos\"de la
 versión 2.10 del manual.  Este ejemplo crea las duraciones
 rítmicas que se usan a todo lo largo de «Marte», de «Los Planetas»
 de Gustav Holst.
index 347d3de30d31226a66409e9319a789fc6d47a5b9..725e33029ce4c0389e93659f93504e520843caf7 100644 (file)
@@ -7,4 +7,3 @@ voces que están sobre el mismo pentagrama si el grabador
 
 "
   doctitlees = "Crear arpegios entre notas de voces distintas"
-
index 6218c21ea490a5bfaa0b6447dfac0fd9dc740a93..ed9e399bf3525dd128a9ec3dad9ea185ce0d4d0f 100644 (file)
@@ -6,4 +6,3 @@ cruce entre los pentagramas ajustando la propiedad
 
 "
   doctitlees = "Crear arpegios que se cruzan entre pentagramas dentro de un sistema de piano"
-
index c1c5b3058b27e03f7680f821f50cda13a281ed09..3c36bcdca93e12467c539f57d24600e9912a23b1 100644 (file)
@@ -7,4 +7,3 @@ contextos distintos a @code{GrandStaff}, @code{PianoStaff} y
 
 "
   doctitlees = "Creación de arpegios que se cruzan entre pentagramas dentro de otros contextos"
-
diff --git a/Documentation/es/texidocs/creating-double-digit-fingerings.texidoc b/Documentation/es/texidocs/creating-double-digit-fingerings.texidoc
new file mode 100644 (file)
index 0000000..0393886
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 598ef6a6d2ae8068611d6c3d2f184bb3c7969fbd
+  texidoces = "
+Es posible crear digitaciones con un número mayor de 5.
+
+"
+  doctitlees = "Crear digitaciones de dos cifras"
index 9c734f7e5f169bccdadd4e3066b4005ee1233c4c..58d66554cc7be1784a26731c2cf16e01745d59f5 100644 (file)
@@ -5,4 +5,3 @@ marcado, pero no cambian el tempo en la salida MIDI.
 
 "
   doctitlees = "Crear indicaciones metronómicas en modo de marcado"
-
index 3cf0124193fa8816d841f2566db59694a8e6f221..5c77f30807f17a0ea73f906fb23e7927801f68e2 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 2af02df6f579b66ef76db9316af8f0ddd70b23f4
   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
@@ -15,4 +15,4 @@ compatible con instrucciones como @code{\\dynamicUp} o
 @code{\\dynamicDown}.
 
 "
-  doctitlees = "Crear indicaciones dinámicas \"verdaderas\" entre paréntesis"
+  doctitlees = "Crear indicaciones dinámicas \"verdaderas\"entre paréntesis"
index 03d2a0f65e9b06185ca18611df45ba3fc9d8f10b..0306b8a350c557fbf505d10ce88af65053368f3d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   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 d3bc2a40978f552fb855c8888cd60fba2fdf7d67..ad2ba267a4be5d46d7461a31bc48ca0f188e11dc 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Las instrucciones @code{\\startTextSpan} y @code{\\stopTextSpan}
 permiten la creación de elementos de extensión textuales tan
diff --git a/Documentation/es/texidocs/cross-staff-stems.texidoc b/Documentation/es/texidocs/cross-staff-stems.texidoc
new file mode 100644 (file)
index 0000000..6fef99c
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 5c42908f1c8d0a5c1d88851a2d793ca55476612c
+  texidoces = "
+Este fragmento de código muestra el uso del grabador
+@code{Span_stem_engraver} y de @code{\crossStaff} para conectar
+automáticamente plicas de un pentagrama a otro.  No es necesario
+especificar la longitud de la plica porque la distancia variable entre
+las cabezas de las notas y los pentagramas se calcula automáticamente.
+
+"
+  doctitlees = "Plicas de pentagrama cruzado"
index 23ee550e0d45180e9d8ddd0f40ebb0143ecd6345..1d2c41798256a843be32167b323cbf368a983aaa 100644 (file)
@@ -1,12 +1,9 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
   texidoces = "
-
 Dado que @code{\\repeat tremolo} espera exactamente dos argumentos
 musicales para los trémolos de acorde, la nota o acorde que cambia de
 pentagrama en un trémolo que cruza el pentagrama se debe colocar
 dentro de llaves curvas junto a su instrucción @code{\\change Staff}.
 
 "
-
   doctitlees = "Trémolos de pentagrama cruzado"
index 68e2f607ca858f172ded9eb2b5b5a8d05e6a4619..ae8dda98cf1a80716f85cbc4385feca93903fe38 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se pueden tipografiar «custos» en diferentes estilos.
 
index 408adaa9fc3064694b64b5d8df6d2fb2ff2fcc05..0eb14dd7a956e571fde75b53d70675cb81a8eabc 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se pueden establecer las propiedades de los diagramas de
 posiciones de acordes por medio de @code{'fret-diagram-details}.
@@ -10,4 +10,3 @@ sobreescritura de propiedades.
 
 "
   doctitlees = "Personalizar los diagramas de posiciones"
-
index 79bd8a84b6287bf78838b0c6a18769bb0775039c..2c2496544e9005c00f11bde3b318f2086d54baf6 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se pueden establecer las propiedades de los diagramas de
 posiciones a través de @code{'fret-diagram-details}.  Para los
@@ -6,5 +6,4 @@ diagramas de posiciones de marcado, se pueden aplicar overrides
 (sobreescrituras) al objeto @code{Voice.TextScript} o directamente al elemento de marcado.
 
 "
- doctitlees = "Personalizar diagramas de posiciones de marcado"
-
+  doctitlees = "Personalizar diagramas de posiciones de marcado"
index 6b8c18250ad6a33cb170ea5489e1ecc927e44396..bf8069c619c7679db0b3bfbc9b63abac66d92f6f 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 La dirección predeterminada de las plicas sobre la tercera línea
 del pentagrama está determinada por la propiedad
@@ -6,4 +6,3 @@ del pentagrama está determinada por la propiedad
 
 "
   doctitlees = "Dirección predeterminada de las plicas sobre la tercera línea del pentagrama"
-
diff --git a/Documentation/es/texidocs/defining-an-engraver-in-scheme--ambitus-engraver.texidoc b/Documentation/es/texidocs/defining-an-engraver-in-scheme--ambitus-engraver.texidoc
new file mode 100644 (file)
index 0000000..d98f509
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 5c42908f1c8d0a5c1d88851a2d793ca55476612c
+  texidoces = "
+Este ejemplo muestra cómo puede definirse el grabador de ámbito o
+tesitura en el espacio del usuario, con un grabador de Scheme.
+
+Esto es básicamente una reescritura en Scheme del código de
+@file{lily/ambitus-engraver.cc}.
+
+"
+  doctitlees = "Definir un grabador en Scheme: grabador de ámbito o tesitura"
index 39f90f5e27bc4bac116d850c66f0aaa41fd52843..10c9b400e1f658972f94ca0e8f9bded4fbd462c9 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Se pueden añadir diagramas de posiciones predefinidas para
 instrumentos nuevos además de los estándar que se usan para la
 guitarra.  Este archivo muestra cómo se hace, definiendo una afinación
@@ -16,4 +15,3 @@ de las cuerdas.  Hay planes para corregir esto en un futuro.
 
 "
   doctitlees = "Definición de posiciones predefinidas para otros instrumentos"
-
diff --git a/Documentation/es/texidocs/demo-midiinstruments.texidoc b/Documentation/es/texidocs/demo-midiinstruments.texidoc
new file mode 100644 (file)
index 0000000..93f656f
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Problema: ¿cómo saber qué instrumento MIDI @code{midiInstrument} viene
+mejor para nuestra composición?  Solución: un archivo de demostración
+de LilyPond.
+
+"
+  doctitlees = "Demo de MidiInstruments"
diff --git a/Documentation/es/texidocs/demonstrating-all-headers.texidoc b/Documentation/es/texidocs/demonstrating-all-headers.texidoc
new file mode 100644 (file)
index 0000000..508bcc5
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Muestra de todos los tipos de encabezamiento.
+
+"
+  doctitlees = "Muestra de cada uno de los encabezamientos posibles"
index eecad2bd0ae353d3c997997a365e1a75a144c911..2a8e38db1b88a0b382d97ba9074dab22c7766791 100644 (file)
@@ -1,9 +1,11 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Si hay un solo pentagrama en un de los tipos de sistema
 @code{ChoirStaff} o @code{StaffGroup}, el comportamiento
 predeterminado es que no se imprima el corchete en la barra inicial.
-Esto se puede cambiar sobreescribiendo las propiedades adecuadas.
+Esto se puede cambiar sobreescribiendo @code{collapse-height} para
+fijar su valor de manera que sea menor que el número de líneas en la
+pauta.
 
 Observe que en contextos como @code{PianoStaff} y
 @code{GrandStaff} en que los sistemas empiezan con una llave en
@@ -12,5 +14,3 @@ distinta, como se ve en el segundo sistema del ejemplo.
 
 "
   doctitlees = "Mostrar corchete o llave en grupos de un solo pentagrama"
-
-
diff --git a/Documentation/es/texidocs/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.texidoc b/Documentation/es/texidocs/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.texidoc
new file mode 100644 (file)
index 0000000..7ad6066
--- /dev/null
@@ -0,0 +1,20 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+A veces, en las partituras orquestales se dejan en silencio
+instrumentos individuales o grupos de ellos durante un período de
+tiempo, y sus pentagramas correspondientes se pueden suprimir durante
+ese tiempo (con @code{\\removeEmptyStaves}).
+
+
+Cuando vuelven a sonar, con frecuencia se prefiere mostrar todos los
+instrumentos del grupo.  Esto se puede hacer añadiendo el grabador
+@code{Keep_alive_together_engraver} en el contexto agrupador (p.ej.:
+un GrandStaff o un StaffGroup)
+
+
+En este ejemplo, los violines están en silencio durante los sistemas
+segundo y tercero.  Solo el violín primero suena en el último compás,
+pero se muestra también el pentagrama del violín segundo.
+
+"
+  doctitlees = "Mostrar un sistema GrandStaff completo si sigue con vida uno solo de sus pentagramas"
index fcfc64b226261f3d86ef66c3a090028942f82dae..301ee2efc00bdd5c5256233b7a7fecf890ef8ac6 100644 (file)
@@ -1,5 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 He aquí una forma de imprimir un acorde en el que suena la misma nota
 dos veces con distintas alteraciones.
index 988eb33b921d9c3f2b744a2ea52822ba6d43eee7..5872cb921242b82ebec148435d1c3e30aa8293ac 100644 (file)
@@ -1,5 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Al trabajar con los callbacks de un grob, puede ser de mucha ayuda
 entender el @qq{árbol genealógico} de un grob.  La mayor parte de los
@@ -65,5 +64,4 @@ NoteHead X,Y: NoteColumn
 @end example
 
 "
-
   doctitlees = "Imprimir el árbol genealógico de un grob"
diff --git a/Documentation/es/texidocs/dotted-harmonics.texidoc b/Documentation/es/texidocs/dotted-harmonics.texidoc
new file mode 100644 (file)
index 0000000..7177f69
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Los armónicos artificiales que usan la instrucción @code{\\harmonic}
+no tienen puntillo.  Para sobreescribir este comportamiento, fije la
+propiedad de contexto @code{harmonicDots}.
+
+"
+  doctitlees = "Armónicos con puntillo"
diff --git a/Documentation/es/texidocs/double-glissando.texidoc b/Documentation/es/texidocs/double-glissando.texidoc
new file mode 100644 (file)
index 0000000..8f7af4e
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Para conectar acordes con líneas de glissando, ponga un segundo
+glissando sobre una voz oculta.
+
+"
+  doctitlees = "Doble glissando"
diff --git a/Documentation/es/texidocs/drawing-boxes-around-grobs.texidoc b/Documentation/es/texidocs/drawing-boxes-around-grobs.texidoc
new file mode 100644 (file)
index 0000000..56e1511
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Se puede sobreescribir la función @code{print-function} para trazar un
+rectángulo alrededor de un objeto gráfico arbitrario.
+
+"
+  doctitlees = "Rodear los objetos gráficos con rectángulos"
diff --git a/Documentation/es/texidocs/drawing-circles-around-note-heads.texidoc b/Documentation/es/texidocs/drawing-circles-around-note-heads.texidoc
new file mode 100644 (file)
index 0000000..bde9215
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+He aquí cómo rodear una nota con una circunferencia.
+
+"
+  doctitlees = "Trazar circunferencias alrededor de la cabeza de las notas"
diff --git a/Documentation/es/texidocs/drawing-circles-around-various-objects.texidoc b/Documentation/es/texidocs/drawing-circles-around-various-objects.texidoc
new file mode 100644 (file)
index 0000000..962ad72
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+La instrucción de marcado @code{\\circle} traza circunferencias
+alrededor de varios objetos, por ejemplo las indicaciones de
+digitación.  Para otros objetos pueden requerirse trucos específicos:
+este ejemplo muestra dos estrategias para las letras de ensayo y los
+números de compás.
+
+"
+  doctitlees = "Rodear diversos objetos con una circunferencia"
index dc136027b233889e5f5edb2149a8b0686adf62f2..460f92c2c24baa62e7556db8c4e60860661eb80f 100644 (file)
@@ -1,5 +1,4 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
   texidoces = "
 Funciones postfijas para la creación de objetos de extensión de texto
 personalizados.  Los objetos de extensión deben comenzar en la primera
@@ -7,5 +6,4 @@ nota del compás.  Hay que utilizar -\mycresc, en caso contrario el
 comienzo del eobjeto de extensión se asignará a la nota siguiente.
 
 "
-
   doctitlees = "Objeto personalizado de extensión de texto de matices dinámicos, postfijo"
index 03a65cb82d7f9959950967a7391b5c957cf7239d..8f05baed281de7ed4c4c04abf9f630ad3e3d83d1 100644 (file)
@@ -1,5 +1,4 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
   texidoces = "
 Los objetos de extensión \cresc, \dim y \decresc ahora se pueden
 redefinir como operadores postfijos y producir un solo objeto de
@@ -10,5 +9,4 @@ gráficos de forma predeterminada, \cresc etc. producen elementos
 extensores de texto de forma predeterminada.
 
 "
-
   doctitlees = "Objetos extensores de texto postfijos para dinámica"
index e6b463f6b7c3b0ef738309592bcdec5235fea689..12dc3210171f7259b5d463b1f4eeff31f77d037f 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 11cf358d3e89f42616c4361fc3203add5662cf4e
   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 68b1f4795202708532404a8b148a00674dd19e33..6aceee67fbd2035acf705177231948af19f4406b 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
- doctitlees = "Grabado manual de las ligaduras"
- texidoces = "
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
 doctitlees = "Grabado manual de las ligaduras"
 texidoces = "
 Se pueden grabar a mano las ligaduras modificando la propiedad
 @code{tie-configuration} del objeto @code{TieColumn}. El primer número
 indica la distancia a partir de la tercera línea del pentagrama en
@@ -8,4 +8,3 @@ espacios de pentagrama, y el segundo número indica la dirección (1 =
 hacia arriba, -1 = hacia abajo).
 
 "
-
diff --git a/Documentation/es/texidocs/engraving-tremolos-with-floating-beams.texidoc b/Documentation/es/texidocs/engraving-tremolos-with-floating-beams.texidoc
new file mode 100644 (file)
index 0000000..eefa6a2
--- /dev/null
@@ -0,0 +1,13 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Si la duración total de un trémolo es menor de una negra, o
+exactamente de una blanca, normalmente se compone tipográficamente con
+todas las barras de corchea tocando las plicas.  Ciertos estilos de
+notación de partituras componen algunas de estas barras como barras
+flotantes centradas que no tocan las plicas de las figuras.  El número
+de barras flotantes en este tipo de trémolo está controlado por la
+propiedad @code{'gap-count } del objeto @code{Beam} y la separación
+entre las barras y las plicas se fija con la propiedad @code{'gap}.
+
+"
+  doctitlees = "Trémolos con barras flotantes"
index 30bd501c73ea9fde88d84b95d077254d8abb9006..0e27b5fe79db2993a37bc8471e33e6999261627f 100644 (file)
@@ -1,18 +1,16 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times"
- texidoces = "
+%% Translation of GIT committish: e797772ef677c797c169b7096a28f6a5959353ef
 doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\tuplet"
 texidoces = "
 La propiedad @code{tupletSpannerDuration} establece cuánto debe durar
 cada grupo de valoración especial contenido dentro del corchete que
-aparece después de @code{\\times}.  Así, se pueden escribir muchos
-tresillos seguidos dentro de una sola expresión @code{\\times},
+aparece después de @code{\\tuplet}.  Así, se pueden escribir muchos
+tresillos seguidos dentro de una sola expresión @code{\\tuplet},
 ahorrando trabajo de teclado.
 
-En el ejemplo se muestran dos tresillos, aunque se ha escrito
-@code{\\times} una sola vez.
-
-
-Para ver más inforamción sobre @code{make-moment}, véase la sección
-correspondiente del manual de Referencia de la Notación.
+Existen varias maneras de fijar el valor de
+@code{tupletSpannerDuration}.  La instrucción @code{\\tupletSpan} lo
+establece a una duración dada, y lo borra cuando se especifica
+@code{\\default} en lugar de una duración.  Otra forma es utilizar un
+argumento opcional con @code{\\tuplet}.
 
 "
-
diff --git a/Documentation/es/texidocs/extending-glissandi-across-repeats.texidoc b/Documentation/es/texidocs/extending-glissandi-across-repeats.texidoc
new file mode 100644 (file)
index 0000000..afd3db2
--- /dev/null
@@ -0,0 +1,15 @@
+%% Translation of GIT committish: 4edb291a57597d4913cfbb955d565ed5d6d533ff
+  texidoces = "
+Se puede simular un glissando que se extiende hasta el interior de
+varios bloques @code{\alternative} de primera y segunda vez mediante
+la adición de una nota de adorno oculta con un glissando al comienzo
+de cada bloque @code{\alternative}.  La nota de adorno debe estar a la
+misma altura que la nota que da inicio al primer glissando.  Esto se
+implementa aquí con una función musical que toma como argumento la
+altura de la nota de adorno.
+
+Observe que en música polifónica la nota de adorno debe coincidir con
+las notas de adorno correspondientes en todas las otras voces.
+
+"
+  doctitlees = "Extender glissandos sobre repeticiones"
index f1939155b91eb38231d2dcccc4e27b95f75ed70c..78a50caa5c6658da7375678b3a0b08fe3d6f159f 100644 (file)
@@ -1,9 +1,7 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
   texidoces = "
 Se puede simular un @qq{hammer} o ligado ascendente con ligaduras de
 expresión.
 
 "
-
   doctitlees = "Simular un hammer o ligado ascendente en una tablatura"
diff --git a/Documentation/es/texidocs/fine-tuning-pedal-brackets.texidoc b/Documentation/es/texidocs/fine-tuning-pedal-brackets.texidoc
new file mode 100644 (file)
index 0000000..41ede75
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Se puede alterar el aspecto de las líneas de pedal de varias formas.
+
+"
+  doctitlees = "Ajuste fino de las líneas de pedal"
index 935ab3a839eeff44489192f0781463744d158b68..34e0742c946c9bc637fb66f6ef026e2870ca4547 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se pueden conseguir símbolos especiales combinando glifos existentes,
 lo que es de utilidad para la notación de instrumentos de viento.
index 11816a6b834c7c6f895925b9d946919ee3eb41a8..26613107f3d26b39f68ae8fa857ed182b65bf559 100644 (file)
@@ -6,4 +6,3 @@ derecha.
 
 "
   doctitlees = "Digitaciones - indicación del número de cuerda y digitaciones de mano derecha"
-
index d682441154b4b18b81357f54815a350bdb7bdf04..f2cadef237b2c7ad8ab86a1ef9fcfb68a68b367a 100644 (file)
@@ -1,7 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidoces = "
-
 Para la guitarra flamenca se utilizan ciertos elementos de notación
 especiales:
 
index 6f63288d96c6bace27a38909406cf993e94d1b9b..f2a598331e2e242f3ba7651f9733d08627602271 100644 (file)
@@ -31,5 +31,3 @@ tiene nada que ver con el @code{\\set} de dos notas por detrás.)
 
 "
   doctitlees = "Corchetes rectos y extremos de barra sueltos"
-
-
diff --git a/Documentation/es/texidocs/flute-slap-notation.texidoc b/Documentation/es/texidocs/flute-slap-notation.texidoc
new file mode 100644 (file)
index 0000000..17aa4ad
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Es posible indicar técnicas de articulación especiales como el golpe
+de lengua de la flauta (@qq{tongue slap}) sustituyendo la cabeza de la
+figura con el glifo adecuado.
+
+"
+  doctitlees = "Notación de los golpes de lengua de la flauta"
diff --git a/Documentation/es/texidocs/forcing-a-clef-symbol-to-be-displayed.texidoc b/Documentation/es/texidocs/forcing-a-clef-symbol-to-be-displayed.texidoc
new file mode 100644 (file)
index 0000000..33ec730
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Cuando ya se ha impreso la clave y aún no se ha cambiado a una
+distinta, LilyPond ignorará la repetición de la instrucción
+@code{\\clef}, pues no constituye un cambio de clave.  Es posible
+forzar la reimpresión de la clave usando la instrucción @code{\\set
+Staff.forceClef = ##t}.
+
+"
+  doctitlees = "Forzar la impresión de la clave"
index 6604d13e19f4d572adf1b4e6f67e9fb0f6239c9f..0db33518f99b6575d308fa1954bfc2a567ee095f 100644 (file)
@@ -1,11 +1,8 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
- doctitlees = "Forzar el desplazamiento horizontal de las notas"
-
-texidoces = "
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  doctitlees = "Forzar el desplazamiento horizontal de las notas"
+  texidoces = "
  Cuando el motor de tipografiado no es capaz de todo, se puede usar la
  sintaxis siguiente para sobreescribir las decisiones de tipografía.
  Las unidades de medida que se usan aquí son espacios de pentagrama.
 
 "
-
index 1cddaa11037d6c03f8455c7df3d236cdf5330c0f..62cb7a23a05709bb25892c9ac89f0da8b89d5a53 100644 (file)
@@ -1,11 +1,8 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Si LilyPond no cree que haya sitio suficiente para un guión separador
 de sílabas, lo omitirá.  Se puede sobreescribir este comportamiento
 con la propiedad @code{minimum-distance} de @code{LyricHyphen}.
 
 "
   doctitlees = "Forzar la visibilidad de los guiones separadores de sílabas"
-
-
diff --git a/Documentation/es/texidocs/forcing-measure-width-to-adapt-to-metronomemarks-width.texidoc b/Documentation/es/texidocs/forcing-measure-width-to-adapt-to-metronomemarks-width.texidoc
new file mode 100644 (file)
index 0000000..14868df
--- /dev/null
@@ -0,0 +1,12 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+De forma predeterminada, las indicaciones metronómicas no influyen el
+espaciado horizontal. Esto tiene un inconveniente: cuando se usan
+silencios comprimidos, algunas indicaciones metronómicas pueden
+aparecer demasiado seguidas, lo que las haría imprimirse unas sobre
+otras verticalmente, como se muestra en la primera parte de este
+ejemplo.  Eesto se puede resolver por medio de una sencilla
+sobreescritura, como puede verse en la segunda mitad del ejemplo.
+
+"
+  doctitlees = "Forzar la anchura de los compases para que se adapten a la anchura de las indicaciones metronómicas"
diff --git a/Documentation/es/texidocs/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.texidoc b/Documentation/es/texidocs/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.texidoc
new file mode 100644 (file)
index 0000000..c4ab4c1
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Este fragmento de código muestra cómo obtener marcas de ensayo
+ordenadas automáticamente, pero partiendo de la letra o número
+deseados.
+
+"
+  doctitlees = "Forzar que las marcas  de ensayo comiencen en una letra o número dados"
diff --git a/Documentation/es/texidocs/fret-diagrams-explained-and-developed.texidoc b/Documentation/es/texidocs/fret-diagrams-explained-and-developed.texidoc
new file mode 100644 (file)
index 0000000..47fea47
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Eeste fragmento de código presenta muchas posibilidades para obtener
+diagramas de posiciones de acorde y cómo trucarlos.
+
+"
+  doctitlees = "Diagramas de posiciones de acorde, explicados y desarrollados"
index 2638a255b0bf55bb656018afd4b936704a392c56..e12f201ac61ce298d8ac926b83628720156eaaad 100644 (file)
@@ -1,5 +1,4 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
   texidoces = "
 Se pueden crear tablas alternativas de diagramas de posiciones.  Se
 utilizarían para tener diagramas altenativos para un acorde dado.
@@ -14,5 +13,4 @@ La tabla a usar en la impresión de los diagramas predefinidos se
 selecciona por medio de la propiedad @code{\\predefinedDiagramTable}.
 
 "
-
   doctitlees = "Tablas alternativas de diagramas de posiciones"
index 410de6a43f98a6214c42a36969f1b8c1a1cafa87..c52f4555292adef1be6ea7cc07f33b12fa3cb095 100644 (file)
@@ -1,7 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Armónicos sobre cuerdas pisadas (armónicos artificiales):
 "
   doctitlees = "Armónicos sobre cuerdas pisadas en tablatura"
-
-
diff --git a/Documentation/es/texidocs/generating-custom-flags.texidoc b/Documentation/es/texidocs/generating-custom-flags.texidoc
new file mode 100644 (file)
index 0000000..d6caf3d
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
+  texidoces = "
+La propiedad @code{stencil} del grob Flag (el objeto gráfico corchete)
+se puede fijar a una función de Scheme personalizada que genere el
+glifo del corchete.
+
+"
+  doctitlees = "Generar corchetes personalizados"
index baada576cc483ca1c39d885eb90d8f95e3fbbff3..702167dbde751206835db5211e570f817e685344 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Este fragmento de código basado en Scheme genera
 24 notas aleatorias (o tantas como se necesiten), basándose en la
diff --git a/Documentation/es/texidocs/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.texidoc b/Documentation/es/texidocs/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.texidoc
new file mode 100644 (file)
index 0000000..59b57d0
--- /dev/null
@@ -0,0 +1,33 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Internamente, una partitura de lilypond no es más que una expresión de
+Scheme, generada por el analizador sintáctico de lilypond.  Usando
+Scheme, también podemos generar automáticamente una partitura sin
+ningún archivo de entrada.  Si tenemos la expresión musical en Scheme,
+se puede generar la partitura simplemente llamando a (scorify-music
+music parser) sobre la música.  Así se genera un objeto partitura,
+para el que podemos entonces fijar un bloque layout personalizado con
+(let* ((layout (ly:output-def-clone $defaultlayout))) ; modificamos el
+layout aquí, y después lo asignamos: (ly:score-add-output-def! score
+layout) )
+
+
+Finalmente, todo lo que tenemos que hacer es pasar esta partitura a
+lilypond para que realice la composición tipográfica.  Este fragmento
+de código define las funciones @code{(add-score parser score)},
+@code{(add-text parser text)} y @code{(add-music parser music)} para
+pasar una partitura completa, elementos de marcado o algo de música a
+lilypond para su composición tipográfica.
+
+Este fragmento de código también funciona para la tipografía de
+partituras dentro de un bloque @code{\\book @{...@}}, así como
+partituras normales del nivel superior jerárquico.  Para conseguirlo,
+cada una de las partituras destinadas a su tipografiado se añaden al
+final de una lista de partituras del nivel superior jerárquico y se
+modifica el toplevel-book-handler (que es una función de Scheme que se
+llama para procesar un libro una vez que se ha cerrado el bloque
+@code{\\book@{..@}}) para insertar todas las partituras así
+coleccionadas al libro.
+
+"
+  doctitlees = "Generación de partituras completas y partes de libro en Scheme sin usar el analizador sintáctico"
index 5e77af996d59840470a58f32a79c2539cf35f56a..0f71eab4b46f241acd8d5dd7a07da3a84b78b443 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
   texidoces = "
 Los objetos gráficos de columna de nota (los grobs @code{NoteColumn})
 pueden ser sobrepasados por los glissandos.
index a911eabcbee80043715da9581e9105807e4fc192..391aca1a4e919c45350e041b07e20f7fb2cbe7f3 100644 (file)
@@ -1,9 +1,7 @@
-%%%    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
   texidoces = "
 En muchos casos, las llaves que no están en la columna central se
 pueden presentar por el nombre de la llave así como de forma gráfica.
 
 "
-
   doctitlees = "Diagramas para viento madera gráficos y textuales"
index b77c187bffb85f9ab7673141086d0604faf3be49..2ffbb1e1343d81d5d04d931c9ed76d9a292a8b13 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se puede cambiar el aspecto de las líneas de rejilla
 sobreescribiendo algunas de sus propiedades.
 
 "
   doctitlees = "Líneas de rejilla: modificar su aspecto"
-
index a8e5108de6f331e2a27ef5182f15049bb04978a5..2974f56175d86a684e65c948e962e0a74de6922a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   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 e25fe4918cb5d8e8e27049c7ba6a6a001679b2de..3b1ec2051472baf471027d7adf197b0b4523f79e 100644 (file)
@@ -1,6 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
-
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidoces = "
 A diferencia de los glissandos, los @q{slides} o ligaduras pueden
 partir de un punto impreciso del mástil hasta un traste específico.
@@ -8,5 +6,4 @@ Una buena forma de hacerlo es añadir una nota de mordente antes de la
 nota real, como se muestra en el ejemplo siguiente.
 
 "
-
   doctitlees = "Ligaduras de guitarra"
index bfc9e8d1a6bfc0b9daa355401b5083c2fbcaa069..6cc0d36a983afe73833266e9465b8281379ef168 100644 (file)
@@ -5,4 +5,3 @@ además de las notas de la melodía, acordes y diagramas de posiciones.
 
 "
   doctitlees = "Ritmos rasgueados de guitarra"
-
index 140a82e7bd7f206d9dea6166a8658d73a284b2c8..d737f3781a4860703c2450ea219fb4f1c9fdb5ae 100644 (file)
@@ -1,9 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Los reguladores pueden imprimirse en uno cualquiera de los estilos de
 @code{line-interface}: discontinuo, punteado, línea, trino o zig-zag.
 
 "
   doctitlees = "Reguladores con distintos estilos de línea"
-
-
diff --git a/Documentation/es/texidocs/heavily-customized-polymetric-time-signatures.texidoc b/Documentation/es/texidocs/heavily-customized-polymetric-time-signatures.texidoc
new file mode 100644 (file)
index 0000000..8b373d7
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: d000c543411bb4c2fb459578bd87ef357ac4aa92
+  texidoces = "
+Aunque aquí el elemento más esencial no es la indicación de compás
+polimétrica que se muestra, se ha incluido para mostrar el pulso de la
+pieza, que es la plantilla de una canción de los Balcanes real.
+
+"
+  doctitlees = "Indicaciones de compás polimétricas profundamente personalizadas"
index 5631ae8d49000b31f33ed4b9925789aee884be81..319de2f0c7d1d99ee0bf4f1b7aacb5e8939875a1 100644 (file)
@@ -1,10 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Aquí se muestra la manera de ocultar las alteraciones de las notas
 ligadas al comienzo de un sistema nuevo.
 
 "
-
   doctitlees = "Ocultar las alteraciones sobre notas ligadas al principio de un sistema nuevo"
-
index 0323136e36b000db52f659107587ff8d520871b8..880b5eb80a773158e25e85d24323df36f9326dff 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   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.
@@ -6,4 +6,3 @@ Esta línea se puede suprimir de la siguiente manera:
 
 "
   doctitlees = "Ocultar la línea de extensión de las expresiones textuales de dinámica"
-
diff --git a/Documentation/es/texidocs/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.texidoc b/Documentation/es/texidocs/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.texidoc
new file mode 100644 (file)
index 0000000..bb60ce0
--- /dev/null
@@ -0,0 +1,43 @@
+%% Translation of GIT committish: e797772ef677c797c169b7096a28f6a5959353ef
+  texidoces = "
+Algunas expresiones de matiz dinámico llevan texto adicional, como
+@qq{sempre pp}.  Dado que los matices suelen ir centrados bajo la
+nota, el \\pp se imprimiría mucho después de la nota a la que se
+aplica el matiz.
+
+Para alinear correctamente el @qq{sempre pp} en sentido horizontal, de
+manera que se alinee como si estuviese solamente el \\pp, hay varios
+enfoques:
+
+* Sencillamente usar @code{\\once\\override DynamicText.X-offset =
+#-9.2} antes de la nota que lleva el matiz, para desplazarlo
+manualmente a la posicion correcta.  Inconveniente: hay que hacerlo
+manualmente cada vez que usamos esa indicación dinámica.
+
+* Añadir algo de relleno (@code{#:hspace 7.1}) dentro de la definición
+de nuestra indicación dinámica personalizada, de forma que despues de
+que lilypond la ha centrado, ya esté alineada correctamente.
+Inconveniente: el relleno realmente ocupa ese espacio y no permite que
+se imprima ningún otro elemento de marcado o matiz dinámico en esa
+posición.
+
+* Fijar las dimensiones del texto adicional a cero (usando
+@code{#:with-dimensions '(0 . 0) '(0 . 0)}).  Inconveniente: para
+LilyPond @qq{sempre} no tiene dimensiones, por lo que podría imprimir
+otros elementos en su mismo lugar y producir colisiones (que no serían
+advertidas por el mecanismo de detección de colisiones).  Asimismo,
+aparentemente hay algún espacio, y por tanto no es exactamente la
+misma alineación que sin el texto adicional.
+
+* Añadir un desplazamiento explícito directamente dentro de la función
+de Scheme que produce el elemento dynamic-script.
+
+* Fijar una alineación explícita dentro del dynamic-script.  De forma
+predeterminada, esto no tendría ningún efecto, a no ser que fijásemos
+un valor para X-offset.  Inconveniente: tenemos que dar un valor a
+@code{DynamicText #'X-offset} ¡que se aplicaría a todos los textos de
+dinámica!.  Asimismo, se alinea con el extremo derecho del texto
+adicional, no con el centro del pp.
+
+"
+  doctitlees = "Alinear horizontalmente indicaciones dinámicas personalizadas (p.ej. \"sempre pp\"\"piu f\"\"subito p\")"
diff --git a/Documentation/es/texidocs/how-to-change-fret-diagram-position.texidoc b/Documentation/es/texidocs/how-to-change-fret-diagram-position.texidoc
new file mode 100644 (file)
index 0000000..12708f2
--- /dev/null
@@ -0,0 +1,20 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Si queremos mover un diagrama de posiciones de acorde, por ejemplo,
+para evitar la colisión, o situarlo entre dos notas, tenemos varias
+posibilidades:
+
+1) modificar los valores de relleno #'padding o del desplazamiento
+adicional #'extra-offset (como se muestra en el primer ejemplo)
+
+2) podemos añadir una voz invisible y adjuntar los diagramas de
+posiciones a las notas invisibles de esa voz (como se ve en el segundo
+ejemplo).
+
+ Si tenemos que mover el diagrama según una posición rítmica dentro
+del compás (en el ejemplo, la tercera parte del compás) es mejor el
+segundo ejemplo, porque el diagrama se alinea con el tercer pulso por
+sí solo.
+
+"
+  doctitlees = "Cómo cambiar la posicion de un diagrama de posiciones"
diff --git a/Documentation/es/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.texidoc b/Documentation/es/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.texidoc
new file mode 100644 (file)
index 0000000..15d9e6e
--- /dev/null
@@ -0,0 +1,27 @@
+%% Translation of GIT committish: c268818b8a410959476bae38057def9a25fc0e23
+  texidoces = "
+Este método imprime dos letras de ensayo, una encima de la otra,
+desplaza la marca inferior a una posición debajo del pentagrama y
+después añade un relleno sobre ella de forma que la marca superior se
+sitúe encima del pentagrama.
+
+Ajustando los valores de extra-offset y de baseline-skip podemos
+aumentar o disminuir el espacio total entre la marca de ensayo y el
+pentagrama.
+
+Debido a que puede hacrse que prácticamente cualquier tipo de glifo o
+cadena de caracteres se comporte como una marca de ensayo, es posible
+centrarlas encima y debajo de una barra de compás.
+
+Añadiendo la propiedad 'break visibility' (visibilidad en caso de
+salto) adecuada como se muestra en el ejemplo número 1, podemos
+también posicionar las dos marcas al final de una línea.
+
+Nota: el método 1 es menos complejo que el método 2 pero realmente no
+permite un ajuste fino de la colocación de una de las marcas de ensayo
+sin afectar a la otra.  También puede dar algunos problemas con el
+espaciado vertical, porque el uso de @code{extra-offset} no cambia la
+caja circundante de la letra de ensayo desde su valor original.
+
+"
+  doctitlees = "Cómo imprimir dos letras de ensayo encima y debajo de la misma línea divisoria (método 1)"
diff --git a/Documentation/es/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.texidoc b/Documentation/es/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.texidoc
new file mode 100644 (file)
index 0000000..b7f48a0
--- /dev/null
@@ -0,0 +1,14 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Este método imprime dos 'letras de ensayo': una sobre el pentagrama y
+otra debajo, creando dos voces, añadiendo el grabador Rehearsal Mark a
+cada unad e las voces (sin esto no se imprime ninguna marca de ensayo)
+y después poniendo cada marca de ensayo en las posiciones UP y DOWN en
+cada voz respectivamente.
+
+Este método (a diferencia del método 1) es más complejo, pero permite
+más flexibilidad y sería necesario para trucar cada letra de ensayo
+independientemente de las demás.
+
+"
+  doctitlees = "Cömo imprimir dos letras de ensayo encima y debajo de la misma línea divisoria (método 2)"
diff --git a/Documentation/es/texidocs/how-to-put-ties-between-syllables-in-lyrics.texidoc b/Documentation/es/texidocs/how-to-put-ties-between-syllables-in-lyrics.texidoc
new file mode 100644 (file)
index 0000000..6ec6491
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Se puede hacer separando las sílabas mediante símbolos de tilde curva.
+
+"
+  doctitlees = "Cómo poner ligaduras entre sílabas de la letra"
index 31775154cbf7a6b3807ee5ceb4cf4a98eacf9fe2..f62b647599963ad974c8f7e008e16e03036b5f92 100644 (file)
@@ -5,5 +5,4 @@ cada línea comienza con un compás parcial.  También muestra cómo
 añadir los versos como texto independiente debajo de la música.
 
 "
-
   doctitlees = "Plantilla para himnos"
index e2f2803a24d56717ec9eebefe019af0d49dbef44..9d76efa3779ddb1a0f529bd16db1fce3edd72d56 100644 (file)
@@ -1,7 +1,6 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidoces = "
 Los «incipit» se pueden escribir utilizando el grob del nombre del
 instruemento, pero manteniendo independientes las definiciones del
 nombre del instrumento y del incipit."
-
- doctitlees = "Incipit"
+  doctitlees = "Incipit"
index 3f1701f003d0d2f5f3d2cec9f44968b79471af3e..2ae2c8dcf7e77d604607a8e3810b0de4a12e8f03 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   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,
@@ -10,4 +10,3 @@ configurar a la forma de corchete en el contexto de @code{PianoStaff}.
 
 "
   doctitlees = "Indicar acordes de pentagrama cruzado con corchetes de arpegio"
-
index ea09f2f6f2e39191700b3dd184c948e81464261b..e13aae0b6ddf10a4cae7524f7812bea44090c9ef 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Las marcas de cesura se pueden crear sobreescribiendo la propiedad
 @code{'text} del objeto @code{BreathingSign}.  También está disponible
@@ -6,4 +6,3 @@ una marca de cesura curva.
 
 "
   doctitlees = "Insertar una cesura"
-
diff --git a/Documentation/es/texidocs/inserting-score-fragments-above-a-staff,-as-markups.texidoc b/Documentation/es/texidocs/inserting-score-fragments-above-a-staff,-as-markups.texidoc
new file mode 100644 (file)
index 0000000..2226d10
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: a52e63690dc92d4b9205811ac0cf27153c3158fd
+  texidoces = "
+La instrucción @code{\\markup} es muy versátil.  En este fragmento de
+código, contiene un bloque @code{\\score} con una partitura completa
+en lugar de textos u otras marcas.
+
+"
+  doctitlees = "Insertar fragmentos de partituras sobre del pentagrama como elementos de marcado"
index e6b241ff0234f27c06473fc195a6b7dd5389571a..daebc6d56c51e9d203393243702f68c59103d4af 100644 (file)
@@ -4,4 +4,3 @@ También se pueden imprimir símbolos de porcentaje sueltos.
 
 "
   doctitlees = "Símbolos de porcentaje sueltos"
-
index 770e03bd5e6d4b9d1d88161c9d1aced4c0dadc69..1914b396dac34f1cf307f15e851b2ff46bdc4008 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidoces = "
 Ésta es una plantilla bastante avanzada, para un conjunto de
 jazz. Observe que la notación de todos los instrumentos está en
@@ -8,4 +8,3 @@ dentro de una sección @code{\\transpose}.
 
 "
   doctitlees = "Plantilla para combo de jazz"
-
index fd36ab18163ca32d5db1e16b19d8218d6bdfdf61..5bc4f0dd8fb759f097c2f4827a90d19e5ae3e8fb 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   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
@@ -6,5 +6,3 @@ un tamaño menor que la clave inicial.  Esto se puede ajustar con
 
 "
   doctitlees = "Mantener el tamaño del símbolo en los cambios de clave"
-
-
diff --git a/Documentation/es/texidocs/laissez-vibrer-ties.texidoc b/Documentation/es/texidocs/laissez-vibrer-ties.texidoc
new file mode 100644 (file)
index 0000000..163d74a
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Las ligaduras @qq{Laissez vibrer} (dejar vibrar) tienen un tamaño fijo.
+Se puede ajustar su formato usando @code{'tie-configuration}.
+
+"
+  doctitlees = "Ligaduras @qq{Laissez vibrer}"
index a59353182e9b7e6b61f3b0308fb155a2f69db935..391f3dd460a30bf7ac5913df9034daeeb46802a6 100644 (file)
@@ -3,5 +3,4 @@
 La tablatura se puede formatear utilizando letras en lugar de números.
 
 "
-
   doctitlees = "Formateado de tablaturas con letras"
index 9bedb903fc81ec5c7c4a0a6ffd4bc0d5f383d74f..ac0d8e05b5cfff6e911caa07dda50d19512951ed 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se pueden aplicar puntas de flecha a los elementos de extensión de
 texto y de línea (como el Glissando).
index 75000516b3fa2a9988e57d7d23933c0f9e9ff05b..150fad8c2de51c229970915ddce1292a01db9220 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 La alineación horizontal de la letra se puede ajustar sobreescribiendo
 la propiedad @code{self-alignment-X} del objeto @code{LyricText}.
index a75209d9242b766f651da27b32251d47094eccad..8955bb0c18ea2a61dd905465c83e1298ebe00405 100644 (file)
@@ -9,5 +9,3 @@ nombres de las notas y las alteraciones.
 
 "
   doctitlees = "Ejemplo de «Makam»"
-
-
diff --git a/Documentation/es/texidocs/making-an-object-invisible-with-the-transparent-property.texidoc b/Documentation/es/texidocs/making-an-object-invisible-with-the-transparent-property.texidoc
new file mode 100644 (file)
index 0000000..89d85f4
--- /dev/null
@@ -0,0 +1,17 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidoces = "
+Si se ajusta la propiedad @code{transparent} de un objeto, se imprime
+en @qq{tinta invisible}: el objeto no se imprime pero se retienen
+todos sus otros comportamientos.  El objeto aún ocupa espacio,
+participa en las colisiones y se le pueden unir ligaduras de
+expresión, ligaduras de unión y barras de corchea.
+
+Este fragmento de código muestra cómo conectar diferentes voces usando
+ligaduras de unión.  Normalmente las ligaduras de unión solamente
+conectan dos notas que estén en la misma voz.  Mediante la
+introducción de una ligadura en una voz distinta y pintando de color
+blanco la primera plica hacia arriba dentro de esa voz, la ligadura
+parece cruzar de una voz a otra.
+
+"
+  doctitlees = "Hacer invisible un objeto con la propiedad 'transparent"
diff --git a/Documentation/es/texidocs/making-glissandi-breakable.texidoc b/Documentation/es/texidocs/making-glissandi-breakable.texidoc
new file mode 100644 (file)
index 0000000..c72166c
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidoces = "
+Si se ajusta la propiedad @code{breakable} al valor @code{#t} en
+combinación con @code{after-line-breaking}, podemos hacer que un
+glissando se divida en el salto de línea:
+
+"
+  doctitlees = "Hacer que los glissandos se puedan dividir en el salto de línea"
index fc84d45df6d91ffbeb5896bc66cd6fea8d16b5db..cf4333afa2afcc9f2ab8afb35ff2ba663816eade 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Las ligaduras de expresión se pueden construir con patrones de
 discontinuidad complejos mediante la definición de la propiedad
 @code{dash-definition}.  @code{dash-definition} es una lista de
@@ -22,7 +21,4 @@ pentagrama.  @code{fracción-discontinuidad} se establece al valor
 de 1 para una ligadura continua.
 
 "
-
   doctitlees = "Hacer ligaduras de expresión con estructura compleja de discontinuidad"
-
-
index e6848367eedc6d8f59ed08f88df8416fcca9d351..372f08140bc00637374fd7b77ca0e9f601e61b48 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   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
@@ -8,4 +8,3 @@ destacar, utilizando la propiedad @code{line-positions} del objeto
 
 "
   doctitlees = "Hacer unas líneas del pentagrama más gruesas que las otras"
-
diff --git a/Documentation/es/texidocs/manually-break-figured-bass-extenders-for-only-some-numbers.texidoc b/Documentation/es/texidocs/manually-break-figured-bass-extenders-for-only-some-numbers.texidoc
new file mode 100644 (file)
index 0000000..8841200
--- /dev/null
@@ -0,0 +1,12 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+A menudo, el bajo figurado usa líneas de extensión para indicar la
+continuación del elemento correspondiente dentro del acorde.  Sin
+embargo, en este caso lilypond está en el @qq{modo voraz} y usa los
+extensores cuando es posible.  Para dividir los extensores
+individuales, podemos sencillamente usar el modificador \\! para un
+número, lo que quiebra cualquier línea de extensión atribuida a dicho
+número justo antes del número.
+
+"
+  doctitlees = "Dividir manualmente las líneas de extensión del bajo cifrado para ciertos números solamente"
diff --git a/Documentation/es/texidocs/manually-controlling-beam-positions.texidoc b/Documentation/es/texidocs/manually-controlling-beam-positions.texidoc
new file mode 100644 (file)
index 0000000..7c185a4
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Se pueden controlar manualmente las posiciones de las barras de
+corchea, sobreescribiendo el valor del parámetro @code{positions} del
+objeto gráfico @code{Beam}.
+
+"
+  doctitlees = "Controlar manualmente las posiciones de las barras"
diff --git a/Documentation/es/texidocs/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.texidoc b/Documentation/es/texidocs/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.texidoc
new file mode 100644 (file)
index 0000000..9b0b144
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Este ejemplo muestra cómo añadir aspas sobre las plicas.  Marcamos el
+comienzo de una sección hablada con la palabra clave @code{\\speakOn},
+y la finalizamos con la palabra clave @code{\\speakOff}.
+
+"
+  doctitlees = "Marcar notas de las partes habladas con unas aspas en la plica"
diff --git a/Documentation/es/texidocs/markup-lines.texidoc b/Documentation/es/texidocs/markup-lines.texidoc
new file mode 100644 (file)
index 0000000..21da3c4
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 45dd19546e9b75b3e1e977732f0962f35dd3290e
+  texidoces = "
+El texto que ocupa más de una página se puede introducir con la
+instrucción @code{\\markuplist}.
+
+"
+  doctitlees = "Conjuntos de líneas de elementos de marcado"
index 7073b846d7f477a1cba549b8827ddaa29c276a12..94e7d4fe047675058aa609e6e4692f95872868d0 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidoces = "
 Este fragmento de código proporciona una solución alternativa a la
 producción de contadores de compás utilizando repeticiones
index 63740f9d479287891b3aff5b8e3a12a73613aa21..484a6fa4ce757f993f543660c7f7c54fd30bcca9 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidoces = "
 La disposición «mensurstriche» en que las líneas divisorias no
 están dibujadas sobre los pentagramas, sino entre ellos, se puede
@@ -7,6 +7,4 @@ La línea divisoria sobre los pentagramas se borra estableciendo la
 propiedad @code{transparent}.
 
 "
-
   doctitlees = "Disposición Mensurstriche (líneas divisorias entre pentagramas)"
-
diff --git a/Documentation/es/texidocs/merging-multi-measure-rests-in-a-polyphonic-part.texidoc b/Documentation/es/texidocs/merging-multi-measure-rests-in-a-polyphonic-part.texidoc
new file mode 100644 (file)
index 0000000..f68d343
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: fddedd4b9a24eaa5f3c62947ddbe5b7b19bd7767
+  texidoces = "
+Cuando se usan silencios multicompás en un pentagrama polifónico, los
+silencios se sitúan de forma diferente dependiendo de a qué voz
+pertenecen.  Sin embargo, se pueden imprimir sobre la misma línea del
+pentagrama, usando el ajuste que aparece a continuación.
+
+"
+  doctitlees = "Combinar los silencios multicompás en una parte polifónica"
index 9152250dee0441ab88df29a787da1115ab5f2a12..0f0906a080c52b5c07e37ddcbab306b5e6fabcdd 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Las abreviaturas se encuentran definidas dentro del archivo
 @file{ly/script-init.ly}, donde las variables @code{dashHat},
@@ -12,4 +12,3 @@ símbolo predeterminado +, asigne el valor @code{trill} a la variable
 
 "
   doctitlees = "Modificar los valores predeterminados para la notación abreviada de las articulaciones"
-
diff --git a/Documentation/es/texidocs/modifying-tuplet-bracket-length.texidoc b/Documentation/es/texidocs/modifying-tuplet-bracket-length.texidoc
new file mode 100644 (file)
index 0000000..c7ff811
--- /dev/null
@@ -0,0 +1,16 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Se puede hacer que los corchetes de grupo de valoración especial, como
+los tresillos, comprendan música anterior al propio grupo o incluyan
+la nota siguiente.  Los corchetes predeterminados finalizan en el
+extremo derecho de la última nota del grupo; el corchete de un grupo
+de duración completa se exiende más a la derecha, bien para que cubra
+toda la notación no rítmica hasta la nota siguiente, o bien para que
+cubra solamente el espacio vacía que hay antes del elemento siguiente
+de notación, sea éste una clave, una indicación de compás, u otra
+nota.  El ejemplo muestra cómo activar el modo de duración completa de
+los grupos de valoración especial y cómo cambiar la parte de música
+que cubren.
+
+"
+  doctitlees = "Modificar la longitud del corchete de grupo especial"
index 9bdbdd21c31094016aa4500c537c4d26e07202c1..14da49b465a59a3d82dcbefe0c61d16e4764462a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   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
@@ -7,5 +7,3 @@ propiedad @code{prefer-dotted-right} de @code{NoteCollision}.
 
 "
   doctitlees = "Desplazar las notas con puntillo en polifonía"
-
-
index a1fb4ae36e5b30e8dfe786e00e8bcb6fc3331afd..6cb69f056403d22caa5a67116647a0c69bf8b523 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se puede ajustar la posición vertical de una ligadura de
 expresión utilizando la propiedad @code{positions} del objeto
@@ -14,5 +14,3 @@ más hacia abajo.
 
 "
   doctitlees = "Desplazar ligaduras de expresión verticalmente"
-
-
index 902dd24a3510d3838a12c4e5b2bb97f58c17089d..6f85ef4b8bf5a442d090054871fcdb4d2a7de373 100644 (file)
@@ -1,19 +1,16 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-texidoces = "
+%% Translation of GIT committish: 0859431a3b2a6c36b2fee643563c6fd914fe9884
+  texidoces = "
 Los elementos de marcado aplicados a un silencio multicompás se
 centran encima o debajo de éste.  Los elementos de marcado extensos
 que se adjuntan a silencios multicompás no producen la expansión del
 compás.  Para expandir un silencio multicompás de forma que quepa todo
-el marcado, utilice un silencio de separación con un marcado aplicado
-antes del silencio multicompás.
+el marcado, utilice un acorde vacío con un marcado aplicado antes del
+silencio multicompás.
 
-Observe que el silencio separador produce la inserción de un compás.
 El texto aplicado a un siencio sparador de esta forma se alinea por la
 izquierda a la posición en que la nota estaría situada dentro del
 compás, pero si la longitud del compás está determinada por la
 longitud del texto, éste aparecerá centrado.
 
 "
-
-doctitlees = "Marcado de silencios multicompás"
-
+  doctitlees = "Marcado de silencios multicompás"
index 758f200670e31906eb97bd22730c93ead9af88ed..3692353f995efeb26df0bd47f7fe58b37841d9b0 100644 (file)
@@ -15,4 +15,3 @@ todos los pentagramas. Las posibilidades son
 
 "
   doctitlees = "Anidado de grupos de pentagramas"
-
index 2fcdba8a406db603156f57db31feae2cc920194d..e0e114accbcbceeb740ee5b3374ddc8d3ba060e8 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 LilyPond también proporciona funciones de formato para imprimir
 números de grupo especial diferentes a la propia fracción, así
@@ -6,6 +6,4 @@ como para añadir una figura al número o a la fracción de la
 agrupación.
 
 "
-
   doctitlees = "Números de agrupación especial distintos a los predeterminados"
-
index a187fb05ab99c207ac1606c359a61c644e142925..8db72dccc8753eb2b63032084c772b72e3eb0ec4 100644 (file)
@@ -1,7 +1,6 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
   doctitlees = "Armaduras de tonalidad no tradicionales"
   texidoces = "
-
 La muy utilizada instrucción @code{\\key} establece la propiedad
 @code{keySignature} property, dentro del contexto @code{Staff}.
 
@@ -25,4 +24,3 @@ misma alteración debe estar en todas las octavas.
 He aquí un ejemplo de una posible armadura para generar una escala
 exátona:
 "
-
diff --git a/Documentation/es/texidocs/numbering-groups-of-measures.texidoc b/Documentation/es/texidocs/numbering-groups-of-measures.texidoc
new file mode 100644 (file)
index 0000000..e916314
--- /dev/null
@@ -0,0 +1,21 @@
+%% Translation of GIT committish: 4d9770a67176122b9779426cf540ad1694f07f61
+  texidoces = "
+Este fragmento de código muestra el uso del grabador
+@code{Measure_counter_engraver} para numerar grupos de compases
+sucesivos.  Se puede numerar cualquier período de compases tanto si
+tiene repeticiones como si no.
+
+Se debe añadir el grabador al contexto adecuado.  Aquí se usa un
+contexto @code{Staff}; otra posibilidad sería un contexto
+@code{Dynamics}.
+
+El contador se inicia con @code{\\startMeasureCount} y finaliza con
+@code{\\stopMeasureCount}.  La numeración comienza con @code{1}, de
+forma predeterminada, pero se puede modificar este comportamiento
+sobreescribiendo la propiedad @code{count-from}.
+
+Cuando un compás se extiende más allá de un salto de línea, el número
+aparece dos veces, la segunda vez entre paréntesis.
+
+"
+  doctitlees = "Numerar grupos de compases"
index fce039a27b2148422b966121dcef2d69cd734bc2..09c40b594fb3f3113fa4f259c6f8215f94499635 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 5c42908f1c8d0a5c1d88851a2d793ca55476612c
   texidoces = "
-
 Las cabezas de nota de notación fácil utilizan la propiedad
 @code{note-names} del objeto @code{NoteHead} para determinar lo que
 aparece dentro de la cabeza.  Mediante la sobreescritura de esta
@@ -11,5 +10,4 @@ Se puede crear un grabador simple que haga esto para la cabeza de cada
 nota que ve.
 
 "
-
   doctitlees = "Números como notas de notación fácil"
index f0fc48cfe9e5244479e6456d49da62af5685df17..3d0d4cabc3db7e7b59f3a7fd2638f2d91754c30c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 El motor de espaciado vertical cambió en la versión 2.14.  Esto puede
 hacer que se altere el espaciado de la letra de las canciones.  Es
@@ -7,6 +7,5 @@ posible fijar propiedades para los contextos @code{Lyric} y
 hacía en la versión 2.12.
 
 "
-
   doctitlees = "Conseguir el espaciado de la letra de la versión 2.12
   en versiones más recientes"
index c1b52ca70ec10459a0dc2b49a8f6048a733ddc7e..a028cf57c94fb72e5951652c023633f57d73a11e 100644 (file)
@@ -1,6 +1,5 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
   texidoces = "
-
 Internamente, @code{\\ottava} establece las propiedades
 @code{ottavation} (por ejemplo, a @code{8va} o a @code{8vb}) y
 @code{middleCPosition}.  Para sobreescribir el texto del corchete,
@@ -8,6 +7,4 @@ ajuste @code{ottavation} después de invocar la instrucción
 @code{\\ottava}.
 
 "
-
   doctitlees = "Texto de octava alta y baja"
-
diff --git a/Documentation/es/texidocs/outputting-the-version-number.texidoc b/Documentation/es/texidocs/outputting-the-version-number.texidoc
new file mode 100644 (file)
index 0000000..a56afed
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Introduciendo la salida de @code{lilypond-version} en la letra de una
+canción, es posible imprimir el número de versión de LilyPond dentro
+de una partitura, o en un documento generado con @code{lilypond-book}.
+Otra posibillidad es añadir el número de versión al final de la
+doc-string, de esta forma:
+
+"
+  doctitlees = "Imprimir el número de versión"
diff --git a/Documentation/es/texidocs/overriding-articulations-of-destinct-type.texidoc b/Documentation/es/texidocs/overriding-articulations-of-destinct-type.texidoc
new file mode 100644 (file)
index 0000000..52b60b8
--- /dev/null
@@ -0,0 +1,14 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+A veces queremos modificar un solo timpo de articulación.  Aunque
+siempre es posible usar la instrucción @code{\\tweak}, podría hacerse
+tedioso hacerlo para todos y cada uno de los símbolos de una partitura
+completa.  El ejemplo muestra cómo trucar articulaciones con una lista
+de ajustes personalizados.  Un caso sería la creación de una hoja de
+estilos.
+
+Con 2.16.2 it es posible introducir la función propuesta,
+@code{\\customScripts}, en un bloque @code{\\layout}.
+
+"
+  doctitlees = "Modificación de articulaciones de diversos tipos"
diff --git a/Documentation/es/texidocs/page-label.texidoc b/Documentation/es/texidocs/page-label.texidoc
new file mode 100644 (file)
index 0000000..d78b093
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Se pueden situar etiquetas de página dentro de la música o en el nivel
+superior, y ser referenciadas desde otros elementos de marcado.
+
+"
+  doctitlees = "Etiqueta de página"
index 393d19dc2a5d8b071e2b945c10c3783d507f686e..79c01821da863ba9a2cc2b4a7ad51e67e0eee9f2 100644 (file)
@@ -1,7 +1,5 @@
-%%   Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
   texidoces = "
-
 Puede ser difícil comprender la función de @code{\\autoBeamOff} cuando
 se usa con @code{\\partcombine}.
 
@@ -31,8 +29,5 @@ Para pode usar @code{\\autoBeamOff} con el objeto de detener todo el
 barrado automático cuando se usa con @code{\\partcombine}, es
 necesario hacer tres llamadas a @code{\\autoBeamOff}.
 
-
-
-
 "
   doctitlees = "Partcombine y autoBeamOff"
index 18fa55785d300bc3eb545a1ed0bbead499d0684b..94294bb1490da3002a992e33054e30085b0520b0 100644 (file)
@@ -6,4 +6,3 @@ la propiedad de contexto @code{repeatCountVisibility}.
 
 "
   doctitlees = "Visibilidad del contador de repeticiones de tipo porcentaje"
-
index f09a09beeead724629f3fc355eb3afc5ebefd525..fbcdb07f93f3bc2fabca06119a6a482871400204 100644 (file)
@@ -6,4 +6,3 @@ ve en este ejemplo:
 
 "
   doctitlees = "Contador de repeticiones de tipo porcentaje"
-
diff --git a/Documentation/es/texidocs/percussion-beaters.texidoc b/Documentation/es/texidocs/percussion-beaters.texidoc
new file mode 100644 (file)
index 0000000..0b946ec
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+No están contemplados de forma nativa los símbolos gráficos para
+instrumentos de percusión; sin embargo es posible incluir dichos
+símbolos, ya sea como un archivo EPS externo o como código PostScript
+incrustado dentro de un elemento de marcado, como se muestra en este
+ejemplo.
+
+"
+  doctitlees = "Símbolos de golpes de percusión"
index cb09b5ab479155ff9260e709526acf3eb057b40b..3e2a7fd48f9f184cd88ec5153b771d01baa6721f 100644 (file)
@@ -1,10 +1,9 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
- doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra"
- texidoces = "
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
 doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra"
 texidoces = "
 Este ejemplo artificial muestra cómo se pueden permitir tanto los
 saltos de línea manuales como los automáticos dentro de un grupo de
 valoración especial unido por una barra.  Observe que estos grupos
 sincopados se deben barrar manualmente.
 
 "
-
index 9b0812221667a839c0544c8bc4f7dca9c254c3d5..2e0f2479fdf2fcf9c25c0a20514c84237e4d638c 100644 (file)
@@ -5,4 +5,3 @@ notas.
 
 "
   doctitlees = "Plantilla de piano (sencilla)"
-
index 796087a18b17731865ae410e7c5b4dd76cd1d516..efa7ef6cea53dbaa8f2c8211f5ca1321ad13b8b7 100644 (file)
@@ -5,4 +5,3 @@ se puede centrar entre los pentagramas de un sistema de piano.
 
 "
   doctitlees = "Plantilla de piano con letra centrada"
-
index ae272fdd43fe33f8a581e7254b581d721f762e9f..34a0246ee4271c83f78b3338ecf762d48639433d 100644 (file)
@@ -5,4 +5,3 @@ melodía y la letra, y el acompañamiento de piano por debajo.
 
 "
   doctitlees = "Plantilla de piano con melodía y letra"
-
index 206a89813e5da38bb4caf93ce5a81354b4183752..4c535013e2b7a0411cf9881b7c487e2e0e81e288 100644 (file)
@@ -7,4 +7,3 @@ se debe usar una construcción de acorde.
 
 "
   doctitlees = "Posicionamiento de digitaciones de mano derecha"
-
index bba6947e5c7efa9ffffbeccae70a1517b7a29e14..8aaf3f90af5b3082d7704d73e4027e6f5dcb3125 100644 (file)
@@ -5,4 +5,3 @@ en una pauta normal.
 
 "
   doctitlees = "Polifonía en tablaturas"
-
index 85f011b61c883df56972c7bcf6a8962225604beb..e124ef4e18d7618a3c4484afa7d1c86f11e12e59 100644 (file)
@@ -1,9 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Si necesitamos alargar o acortar un símbolo de arpegio, podemos
 modificar independientemente los extremos superior e inferior.
 
 "
   doctitlees = "Posicionar símbolos de arpegio"
-
-
diff --git a/Documentation/es/texidocs/positioning-fingering-indications-precisely.texidoc b/Documentation/es/texidocs/positioning-fingering-indications-precisely.texidoc
new file mode 100644 (file)
index 0000000..6d0bc79
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Generalmente, las opciones disponibles para la digitación de los
+acordes funciona bien de forma predeterminada, pero si una de las
+indicaciones precisa colocarse de forma más exacta puede usarse el
+truco siguiente.  Esto es especialmente útil para corregir el
+posicionado cuando están presentes intervalos de segunda.
+
+"
+  doctitlees = "Posicionamiento preciso de indicaciones de digitación"
index a137c374327097a5b04502ec1c4e91770a362d04..ac46f0a724784aa098e982a8cce388a09eb73477 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Cuando se colocan figuras sobre líneas adicionales, sus barras se
 sitúan generalmente en medio del pentagrama.  La barra de las notas de
 adorno es más corta y las notas de adorno sobre líneas adicionales
@@ -9,5 +8,3 @@ barrado para las notas de adorno.
 
 "
   doctitlees = "Colocar las barras de las notas de adorno a la misma altura que las barras de notas normales"
-
-
index 47f3004fb540807fc2bbbcc585eaf6f4aaf1a263..2452c37b6e0c16275ba3946007188b93df4d0cc3 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 45dd19546e9b75b3e1e977732f0962f35dd3290e
   texidoces = "
-
 Al establecer la propiedad @code{'strict-grace-spacing} hacemos que
 las columnas musicales para las notas de adorno sean @q{flotantes}, es
 decir, desacopladas de las notas que no son de adorno: primero se
@@ -9,7 +8,4 @@ columnas musicales de las notas de adorno a la izquierda de las
 columnas musicales de las notas principales.
 
 "
-
   doctitlees = "Posicionamiento de las notas de adorno con espacio flotante"
-
-
index 7ed2abda901de0e5d920602b04d4eb70d3a25e94..4d2c6b9dbb1d331c044610519db1af028d47df49 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
- doctitlees = "Posicionar los silencios multicompás"
- texidoces = "
+%% Translation of GIT committish: 7ed7602a82aa06a8387237c36ebd11f5a329078e
 doctitlees = "Posicionar los silencios multicompás"
 texidoces = "
 A diferencia de los silencios normales, no existe una instrucción
 predefinida para modificar la posición predeterminada de un
 símbolo de silencio multicompás sobre el pentagrama, adjuntándolo
diff --git a/Documentation/es/texidocs/positioning-segno-and-coda-with-line-break.texidoc b/Documentation/es/texidocs/positioning-segno-and-coda-with-line-break.texidoc
new file mode 100644 (file)
index 0000000..710f7e5
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Si queremos colocar un símbolo de segno de salida y añadir texto como
+@qq{D.S.  al Coda} junto a él donde normalmente están las líneas del
+pentagrama, cpodemos usar este código.  La coda continúa en una línea
+nueva.  Hay una variante documentada en el fragmento de código, donde
+la coda se mantiene en la misma línea.
+
+"
+  doctitlees = "Posicionar los símbolos de repetición segno y coda (con saltos de línea)"
index 690a572c2ae3410a8e33bb444ea77cf0398e0b9e..d8801c94d0e8d7872528764eda433f83810222d9 100644 (file)
@@ -1,10 +1,8 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Los elementos de marcado de texto deben tener la propiedad
 @code{outside-staff-priority} establecida al valor falso para que se
 impriman por dentro de las ligaduras de expresión.
 
 "
   doctitlees = "Situar los elementos de marcado de texto por dentro de las ligaduras"
-
index 6344af9dd489311d26e3b8d426eb565c3fc6402e..f0848fa787ee5a8a5c199048914c87d8ce40d049 100644 (file)
@@ -1,13 +1,11 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-doctitlees = "Evitar que se añadan becuadros adicionales automáticamente"
-
-texidoces = "
-Según las reglas estándar de composición
-tipográfica, se imprime un becuadro antes de un sostenido o un
-bemol cuando se tiene que cancelar una alteración anterior en la
-misma nota.  Para modificar este comportamiento, establezca el
-valor de la propiedad @code{extraNatural} a @code{##f} (falso)
-dentro del contexto de @code{Staff}.
+%% Translation of GIT committish: b319113e61dca137deead44f21280059fba35eca
+  doctitlees = "Evitar que se añadan becuadros adicionales automáticamente"
+  texidoces = "
+Según las reglas tradicionales de composición tipográfica, se imprime
+un becuadro antes de un sostenido o un bemol cuando se tiene que
+cancelar un doble sostenido o un doble bemol anterior en la misma
+nota.  Para modificar este comportamiento a la práctica actual,
+establezca el valor de la propiedad @code{extraNatural} a @code{##f}
+(falso) dentro del contexto de @code{Staff}.
 
 "
-
diff --git a/Documentation/es/texidocs/preventing-final-mark-from-removing-final-tuplet.texidoc b/Documentation/es/texidocs/preventing-final-mark-from-removing-final-tuplet.texidoc
new file mode 100644 (file)
index 0000000..68d0171
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Al añadir una marca de ensayo @code{mark} al final puede ocurrir que
+se pierda una indicación de grupo especial colocado al final.  Se
+puede solventar fijando @code{TupletBracket #'full-length-to-extent}
+al valor @code{false}.
+
+"
+  doctitlees = "Evitar que una marca de ensayo final suprima el corchete de un grupo de valoración especial"
index 9b302d3d622d25dda17e332c4b7cfbfb47f5ff69..21452f2d8206ca6b2b6935b0be717114a688d5d6 100644 (file)
@@ -1,12 +1,9 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura"
-
-texidoces = "
-
+  doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura"
+  texidoces = "
 Cuando cambia la armadura de la tonalidad, se imprimen becuadros
 automáticamente para cancelar las alteraciones de las armaduras
 anteriores.  Esto se puede evitar estableciendo al valor @qq{falso} la
 propiedad @code{printKeyCancellation} del contexto @code{Staff}.
 
 "
-
index ee5f7a33dfa982beb266d89d1cc012a1af6adf05..27a2f7056d1c8e12c76dfe5153699faaed26b602 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
   texidoces = "
-Se puede imprimir una línea divisoria de la forma @code{|:} al
+Se puede imprimir una línea divisoria de la forma @code{.|:} al
 principio de la pieza, sobreescribiendo la propiedad correspondiente:
 
 "
   doctitlees = "Imprimir puntos de repetición al prinicpio de la pieza"
-
index 01f3e33afd89b7a3c5bfcd1ffe0b01cfab269b59..e100d49dcd6cacd19d3fc573ab2fa0f89ac5f73a 100644 (file)
@@ -1,13 +1,9 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Se pueden imprimir los números de compás a intervalos regulares
 mediante el establecimiento de la propiedad
 @code{barNumberVisibility}.  Aquí los números de compás se
 imprimen a cada dos compases excepto al final de la línea.
 
 "
-
   doctitlees = "Imprimir números de compás a intervalos regulares"
-
-
index 90f120ebaac5380b1fde504f593b893263aacbd5..5fc46783f7c39cdb8b10d0d66b3a269e9c5b4c00 100644 (file)
@@ -1,9 +1,6 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias.
 
 "
   doctitlees = "Imprimir números de compás dentro de rectángulos o circunferencias"
-
-
diff --git a/Documentation/es/texidocs/printing-hairpins-in-various-styles.texidoc b/Documentation/es/texidocs/printing-hairpins-in-various-styles.texidoc
new file mode 100644 (file)
index 0000000..a46c60c
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: fddedd4b9a24eaa5f3c62947ddbe5b7b19bd7767
+  texidoces = "
+Los reguladores se pueden crear en una amplia variedad de estilos.
+
+"
+  doctitlees = "Imprimir reguladores en diversos estilos"
index b959e6581706167c1584257a9c56a5a0babcceaa..7686f226440526f1c9737cc6157e8d4f13930835 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Se pueden imprimir reguladores con un círculo en la punta (notación
 «al niente») estableciendo la propiedad @code{circled-tip} del objeto
@@ -6,4 +6,3 @@ Se pueden imprimir reguladores con un círculo en la punta (notación
 
 "
   doctitlees = "Impresión de reguladores utilizando la notación «al niente»"
-
index f5b1dc8b368772b1cba3682bdf13bcc6bc993fbb..53eb67bff36c859f5dc35fab094155cc7d5a6eeb 100644 (file)
@@ -1,7 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Se pueden imprimir marcas al final de la línea actual, en vez de al
 principio de la línea siguiente.  En estos casos, puede ser preferible
 alinear el borde derecho de la marca con la línea divisoria.
index 39a3f2069fa705d9b8d8c4e00088ed7358658508..159fbd3dd82a711ec38645212ba427f23643b0d3 100644 (file)
@@ -6,4 +6,3 @@ pentagrama cualquiera.
 
 "
   doctitlees = "Imprimir marcas de ensayo en cualquier pentagrama"
-
index 2803015f5d2d1cea5525489f3a8cf86e86f8b453..f60c8bcebe77e1969c2875ece1b5186c2aa50b2e 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 De forma predeterminada, las indicaciones metronómicas y las
 letras de ensayo se imprimen encima del pentagrama.  Para
@@ -7,7 +7,4 @@ adecuadamente la propiedad @code{direction} de
 @code{MetronomeMark} o de @code{RehearsalMark}.
 
 "
-
   doctitlees = "Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama"
-
-
diff --git a/Documentation/es/texidocs/printing-music-with-different-time-signatures.texidoc b/Documentation/es/texidocs/printing-music-with-different-time-signatures.texidoc
new file mode 100644 (file)
index 0000000..370b2bd
--- /dev/null
@@ -0,0 +1,19 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+En el siguiente fragmento de código, dos partes distintas tienen un
+compás completamente diferente y sin embargo se mantienen
+sincronizadas.  Las barras de compás ya no se pueden imprimir en el
+nivel de @code{Score}; para permitir barras de compás independientes
+en cada parte se trasladan los grabadores
+@code{Default_barline_engraver} y @code{Timing_translator} desde el
+contexto de partitura @code{Score} hasta el contexto de pentagrama
+@code{Staff}.
+
+Si son necesarios números de compás, el grabador de números de compás
+@code{Bar_number_engraver} también debe trasladarse, ya que descansa
+en propiedades fijadas por el @code{Timing_translator}; se puede usar
+un bloque @code{\\with} para añadir números de compás al pentagrama
+apropiado.
+
+"
+  doctitlees = "Imprimir música que tenga compases distintos en cada pentagrama"
index aeb94d04e5154fb9f636f4c4406e1afb8889cb14..ccddb7982e3e78608c61480597dad9763d2dffcc 100644 (file)
@@ -6,5 +6,3 @@ desactiva la representación de la octava de las notas.
 
 "
   doctitlees = "Impresión de los nombres de las notas con o sin indicación de la octava"
-
-
diff --git a/Documentation/es/texidocs/printing-text-from-right-to-left.texidoc b/Documentation/es/texidocs/printing-text-from-right-to-left.texidoc
new file mode 100644 (file)
index 0000000..6e4c0bc
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Es posible imprimir texto de derecha a izquierda en un elemento de
+marcado, como se muestra aquí.
+
+"
+  doctitlees = "Impresión de texto de derecha a izquierda"
index f2c8f0f59d4c672b5f026cc21967edba55ad10ed..d07e7181949e0673c6615465a431644874fdeae3 100644 (file)
@@ -1,6 +1,5 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
   texidoces = "
-
 De forma predeterminada se suprime el número del primer compás de una
 partitura si es menor o igual a @q{1}.  Al establecer el valor de
 @code{barNumberVisibility} a @code{all-bar-numbers-visible}, se puede
@@ -9,7 +8,4 @@ siguientes.  Observe que, para que esto funcione, se debe insertar una
 líinea divisoria vacía antes de la primera nota.
 
 "
-
   doctitlees = "Imprimir el número de compás en el primer compás"
-
-
diff --git a/Documentation/es/texidocs/proportional-strict-notespacing.texidoc b/Documentation/es/texidocs/proportional-strict-notespacing.texidoc
new file mode 100644 (file)
index 0000000..0d3c062
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 45dd19546e9b75b3e1e977732f0962f35dd3290e
+  texidoces = "
+Si está establecido @code{strict-note-spacing}, el espaciado de las
+notas no queda influido por los compases o claves que pueda haber
+dentro de un sistema.  En lugar de ello, se colocan justo antes de la
+nota que tiene lugar en el mismo momento temporal. Esto puede producir
+colisiones.
+
+"
+  doctitlees = "Espaciado de las notas estrictamente proporcional"
diff --git a/Documentation/es/texidocs/putting-lyrics-inside-the-staff.texidoc b/Documentation/es/texidocs/putting-lyrics-inside-the-staff.texidoc
new file mode 100644 (file)
index 0000000..ec09df6
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Se pueden mover las líneas de letra verticalmente para imprimirlas
+dentro del pentagrama.  Las letras se mueven con @code{\\override
+LyricText.extra-offset = #'(0 . dy)} y hay instrucciones similares
+para mover las líneas extensoras y los guiones.  El desplazamiento
+necesario se establece mediante un proceso de ensayo y error.
+
+"
+  doctitlees = "Putting lyrics inside the staff"
index 6c4280bf883b39937078082110eb691887256b66..07ed74b66e1bb6615f235694695eb037f1e8295e 100644 (file)
@@ -1,13 +1,11 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 0ee650dd90daf9fe17d79fe91dfc816af02a86f1
   texidoces = "
 Los pasajes citados tienen en cuenta la transposición de la fuente
-tanto como la del destino.  En este ejemplo, todos los
-instrumentos interpreta una nota con el sonido del Do central; el
-destino de un instrumento transpositor en Fa.  La parte de destino
-se puede transponer utilizando @code{\\transpose}.  En este caso
-se transportan todas las notas (incluidas las citadas).
+tanto como la del destino.  En este ejemplo, todos los instrumentos
+interpretan una nota con el sonido del Do central; el destino de un
+instrumento transpositor en Fa.  La parte de destino se puede
+transportar utilizando @code{\\transpose}.  En este caso las notas
+citadas permanecen sin cambios.
 
 "
-
-doctitlees = "Citar otra voz con transposición"
-
+  doctitlees = "Citar otra voz con transposición"
index 369840fe3f95b25993855302e5a5425ebc42e5fa..1903429589ed164a72b4c8e4bbdb2c3e55465358 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 La propiedad @code{quotedEventTypes} determina los tipos de eventos
 musicales que resultan citados.  El valor predeterminado es
 @code{(note-event rest-event tie-event beam-event tuplet-span-event)},
@@ -13,7 +12,5 @@ fragmento citado porque @code{rest-event} no está dentro de los
 Para ver una lista de los tipos de evento, consulte la sección
 @qq{Music classes} de la Referencia de funcionamiento interno.
 
-
 "
   doctitlees = "Citar otra voz"
-
index 25bd11b132645e0cfa36a540401d3b14f45298bf..4cc9c95e422943da6183fb13610c774cd14fad8e 100644 (file)
@@ -1,9 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidoces = "
 El ejemplo siguiente muestra cómo se pueden realizar diagramas de
 digitación para instrumentos de viento.
 
 "
-
   doctitlees = "Diagramas de digitación para la flauta dulce"
index 407f3ad4322e022cdaccc0ca6b76766d0893745b..401637de9acbdc02f9430eb543ac114859a827e6 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
   texidoces = "
-
 Los valores predeterminados para las notas de adorno están
 almacenados en los identificadores @code{startGraceMusic},
 @code{stopGraceMusic}, @code{startAcciaccaturaMusic},
@@ -10,7 +9,4 @@ almacenados en los identificadores @code{startGraceMusic},
 efectos.
 
 "
-
   doctitlees = "Redefinición de los valores globales predeterminados para notas de adorno"
-
-
index 2947da68a22c9881f3d707a7b599bb53b004300f..8ae1020d5fa180842ea2743cb80ff06161aa96e1 100644 (file)
@@ -1,11 +1,7 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
   texidoces = "
-
 Se pueden eliminar completamente los números de compás quitando el
 grabador @code{Bar_number_engraver} del contexto de @code{Score}.
 
 "
-
   doctitlees = "Suprimir los números de compás de toda la partitura"
-
-
index 02265cd6d0944e05527b99a19ef1c2f45e60fab6..58e0ca366a10826cf163c2ae63f73f3a953115c4 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 De forma predeterminada, las líneas divisorias en los grupos
 StaffGroup, PianoStaff o GrandStaff se conectan entre los pentagramas.
@@ -6,5 +6,3 @@ Se puede alterar este comportamiento pentagrama a pentagrama.
 
 "
   doctitlees = "Quitar las barras de compás entre los pentagramas de un StaffGroup PianoStaff o GrandStaff"
-
-
index 9c6a1f1bbac18e1b6b1ad596acd9904902e4118c..3d4171acf54b08ce67cdde365a9a3b01489601b7 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 El primer pentagrama vacío también se puede suprimir de la
 partitura estableciendo la propiedad @code{remove-first} de
@@ -14,4 +14,3 @@ escribe.
 
 "
   doctitlees = "Quitar la primera línea vacía"
-
index 7f1c8f9291d0a79e59fe9800f1490ea234320a6e..2df64fce2cd5ea271e4d3c5ff292904000e1a51e 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   doctitlees = "Estilos de silencios"
   texidoces = "
 Los silencios se pueden imprimir en distintos estilos.
index ce830a55160d908519a8a4eadc5844bad2ea3f6f..4d08e187eb082640fafacaf6d546e5a2188568c7 100644 (file)
@@ -5,5 +5,3 @@ es necesario modificar la estructura de pulsos:
 
 "
   doctitlees = "Alteración de los finales de barra predeterminados"
-
-
diff --git a/Documentation/es/texidocs/rhythmic-slashes.texidoc b/Documentation/es/texidocs/rhythmic-slashes.texidoc
new file mode 100644 (file)
index 0000000..88e947e
--- /dev/null
@@ -0,0 +1,18 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+En las hojas guía de acordes o lead-sheets @qq{sencillas}, a veces no
+se imprime realmente ninguna nota, y en su lugar se hace una notación
+que tiene solamente @qq{patrones rítmicos} y acordes encima de los
+compases, dando la estructura de la canción song. Tal funcionalidad es
+útil, por ejemplo, al crear o transcribir la estructura de una canción
+y también si se quieren compartir las hojas guía con guitarristas o
+músicos de jazz.  La forma estándar en que está contemplada esta
+funcionalidad empleando @code{\\repeat percent} no es adecuada aquí
+porque el primer compás tendría que ser una nota o silencio normales.
+Este ejemplo muestra dos soluciones al problema, redefiniendo los
+silencios normales para que se impriman como barras inclinadas (si la
+duración de cada pulso no es una negra, sustituiremos el @code{r4} que
+aparece en las definiciones con un silencio de la duración adecuada).
+
+"
+  doctitlees = "Barras rítmicas"
index e8efbb5f9cd2c43ee6998282e9057301051870a2..663f1d6895c552a1ee42c07e0200eb492c3755a2 100644 (file)
@@ -1,5 +1,4 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
   texidoces = "
 Plantilla de coro SATB (en cuatro pentagramas)
 
diff --git a/Documentation/es/texidocs/score-for-diatonic-accordion.texidoc b/Documentation/es/texidocs/score-for-diatonic-accordion.texidoc
new file mode 100644 (file)
index 0000000..379ce7d
--- /dev/null
@@ -0,0 +1,50 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidoces = "
+Plantilla para escribir una partitura para acordeón diatónico.
+
+- Hay una pauta horizontal que indica si el acordeón se debe cerrar
+(línea gruesa) o abrir (línea delgada).
+
+- Hay una pauta rítmica pequeña con letra que describe los botones que
+hay que pulsar en el bajo. Las barras de compás están hechas a partir
+de líneas de rejilla.
+
+- La pauta del tabulador para acordeones diatónicos muestra la
+posición geográfica de los botones y no (como en otros instrumentos)
+la altura de las notas; las llaves sobre el lado de la melodía del
+acordeón se ponen en tres columnas y unas doce filas.
+
+En la notación de pauta del tabulador, la columna más externa se
+describe con notas entre líneas, la columnas más interna se describe
+con notas entre líneas y unas aspas como alteración accidental, y la
+columna central se describe con notas sobre una línea, mientras que la
+fila del medio se representa sobre la línea central del pentagrama.
+
+A continuación algunas notas sobre la forma de transcribir notas de
+piano a acordeón diatónico:
+
+1. Todo acordeón diatónico está construido para un cierto conjunto de
+tonalidades solamente (por ejemplo, para las tonalidades de Do mayor y
+Fa mayor), por lo que es importante transportar una melodía de piano
+que corresponda exactamente a una de esas tonalidades.  Transporte el
+código fuente, no solamente la salida porque este código se necesita
+después para traducirlo de nuevo a la pauta del tabulador.  Esto se
+puede hacer con la instrucción @code{displayLilyMusic}.
+
+
+2. Tenemos que alternar las direcciones de abrir y de cerrar el fuelle
+de forma regular.  Si el intérprete tiene un período de abrir el
+fuelle excesivamente largo, el acordeón puede romperse.  Por otro
+lado, algunas armonías solamente están disponibles en una dirección.
+Teniendo esto en cuenta, debemos decidir qué partes de la melodía son
+las partes de cerrar y cuáles las de abrir.
+
+
+3. Para cada una de las partes de abrir o cerrar, transcriba las notas
+del piano a la representación de tablatura correspondiente.
+
+Este fragmento de código incluye un útil macro opcional para el editor
+de texto jEdit.
+
+"
+  doctitlees = "Partitura para acordeón diatónico"
index 95a16894139cbb40f9e34a3551abdb787698abed..1444f6a8ec8484fb1604898c8ac940c1b357722a 100644 (file)
@@ -1,5 +1,6 @@
-%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
-texidoces = "
+%% Translation of GIT committish: 16e827736538b0e0c850112e522de52de0d350da
+%% Translation of Documentation/included/script-chart.ly
+  texidoces = "
 He aquí un cuadro que muestra todas las articulaciones disponibles:
 
 "
diff --git a/Documentation/es/texidocs/separating-key-cancellations-from-key-signature-changes.texidoc b/Documentation/es/texidocs/separating-key-cancellations-from-key-signature-changes.texidoc
new file mode 100644 (file)
index 0000000..d118bf7
--- /dev/null
@@ -0,0 +1,19 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+De forma predeterminada, las alteraciones accidentales que se usan
+para las cancelaciones en las armaduras se colocan adyacentes a las
+que se usan para los cambios de tonalidad.  Este comportamiento se
+puede cambiar sobreescribiendo la propiedad @code{'break-align-orders}
+del objeto gráfico @code{BreakAlignment}.
+
+
+El valor de @code{'break-align-orders} es un vector de longitud 3, con
+listas entrecomilladas cuyos elementos con objets que se pueden
+dividir en un salto.  Este ejemplo solo modifica la segunda lista,
+moviendo @code{key-cancellation} antes de @code{staff-bar};
+modificando la segunda lista, el comportamiento de alineación de los
+saltos solo cambia en la mitad de un sistema, no al principio ni al
+final.
+
+"
+  doctitlees = "Separar las cancelaciones de tonalidad de los cambios de armadura"
index b68a197d39033e10a90ce8da4979a651b6c82a32..3f3a40d2b9373f0b83564ac88088df47c6cbd2e6 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   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
@@ -7,4 +7,3 @@ sobreescribiendo la propiedad @code{'to-barline}.
 
 "
   doctitlees = "Establecer el comportamiento de los reguladores en las barras de compás"
-
index 4508d729000bc0baff01b5fc8a22d227ba710abf..e75f8c37f05922d1733ae11d906dec80eddd64d5 100644 (file)
@@ -7,5 +7,3 @@ predeterminada adecuada.
 
 "
   doctitlees = "Fijar un separador entre los sistemas"
-
-
index 9e03d1d8d2dc11f9b58b372d81d50f7c3385d42c..3f024c9db086a7b6c46201d14015b52bc8748f76 100644 (file)
@@ -1,11 +1,8 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Existen tres estilos distintos de repeticiones dobles para la primera
 y segunda vez, que se pueden ajustar utilizando
 @code{doubleRepeatType}.
 
 "
-
   doctitlees = "Establecer el tipo de repetición doble predeterminado para la primera y segunda vez"
index 32e26419c548cbfb347c11e264e1b5995a6ce73e..7d29b10499f2c735d52a224d6cc79ca9a637da63 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Si los reguladores son demasiado cortos, se pueden alargar
 modificando la propiedad @code{minimum-length} del objeto
@@ -6,4 +6,3 @@ modificando la propiedad @code{minimum-length} del objeto
 
 "
   doctitlees = "Ajustar la longitud mínima de los reguladores"
-
index fb226f6900e2a5dbfc7c133af7ced9fce749c89a..db7abc6b7c446f428283bdf02b12630ea18d1f98 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 De forma predeterminada, los corchetes de primera y segunda vez se
 trazan encima de los finales alternativos completos, pero es posible
@@ -8,4 +8,3 @@ sólo dura un compás, que corresponde a una duración de 3/4.
 
 "
   doctitlees = "Acortar los corchetes de primera y segunda vez"
-
index bfbb5899e6c930cda18173b118849fe320ff5bfe..ca4092f76fbdb7fccd4a3521ada37231ed6d1f7c 100644 (file)
@@ -5,4 +5,3 @@ líneas y cuando cambia el acorde.
 
 "
   doctitlees = "Imprimir los acordes cuando se produce un cambio"
-
diff --git a/Documentation/es/texidocs/showing-the-same-articulation-above-and-below-a-note-or-chord.texidoc b/Documentation/es/texidocs/showing-the-same-articulation-above-and-below-a-note-or-chord.texidoc
new file mode 100644 (file)
index 0000000..7d4ec6d
--- /dev/null
@@ -0,0 +1,22 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+De forma predeterminada, LilyPond no permite poner la misma
+articulación (p.ej., un acento, un calderón, un círculo de armónico,
+etc.) encima y debajo de la nota.  Por ejemplo, c4_\\fermata^\\fermata
+imprime solamente el calderón inferior.  El calderón superior
+sencillamente se ignora.  Sin embargo, se pueden adosar inscripciones
+(de igual forma que las digitaciones) dentro de un acorde, lo que
+significa que es posible tener tantas articulaciones como se desee.
+Este enfoque tiene la ventaja de que ignora la plica y posiciona la
+articulación de forma relativa a la cabeza de la nota.  Puede verse
+esto en el caso de los flageolets (indicaciones de armónico) que
+aparecen en el fragmento de código.  Para recrear el comportamiento de
+las inscripciones fuera del acorde, se requiere 'add-stem-support.
+Así, la solución consiste en escribir la nota como un acorde y añadir
+las articulaciones dentro de los paréntesis en ángulo <...>.  La
+dirección siempre será hacia arriba, pero podemos retocar esto por
+medio de una instrucción \\tweak: @code{<c-\\tweak dirección
+#DOWN-\\fermata^\\fermata>}
+
+"
+  doctitlees = "Imprimir la misma articulación encima y debajo de la misma nota o acorde"
index beb510ce64f9d595dbe049f3ac86acf4895d55c9..299530a38e77e073949a85f56ae9bdcef9fce404 100644 (file)
@@ -5,4 +5,3 @@ obtenemos una hoja guía de acordes o «lead sheet»:
 
 "
   doctitlees = "Hoja guía de acordes o «lead sheet» sencilla"
-
index 3412c2465dfd4be7b823c0f972334430cf401b3c..b210b209e68b2b414d02bc0d29fb0244e6a7e26f 100644 (file)
@@ -5,4 +5,3 @@ letra y acordes.
 
 "
   doctitlees = "Plantilla de pentagrama único con música, letra y acordes"
-
index afefc853504380bd31936c28eb0e080d32ac527d..cdc17f5704b2469a19b6c880a1912e89fdbbb548 100644 (file)
@@ -4,5 +4,4 @@ Presentamos a continuación un ejemplo de plantilla para una hoja
 guía de acordes con melodía, letra, acordes y diagramas de
 trastes.
 "
-
   doctitlees = "Plantilla para un pentagrama único con música, letra, acordes y trastes"
index 85ae48e913e1b4523d818d901529dba7acbae8b7..6a837d21e72f3d0cf0d40b2d15712957c9bfd7fc 100644 (file)
@@ -4,6 +4,4 @@
 melodía y acordes?  ¡No busque más!
 
 "
-
-doctitlees = "Plantilla de pentagrama único con música y acordes"
-
+  doctitlees = "Plantilla de pentagrama único con música y acordes"
index ff912e06081ce7514137e2111598c02ab59eace4..ea644a1cc85187c7c50d4a21ee82d0450010021a 100644 (file)
@@ -8,4 +8,3 @@ comentario la línea correspondiente.
 
 "
   doctitlees = "Plantilla de pentagrama único don notas y letra"
-
index b95584826fd4542c6c64563d4eb82ca91c3e0a9f..63c40f4b2e35173c6196d651e427ab8b722fd5b9 100644 (file)
@@ -6,4 +6,3 @@ un archivo, escriba las notas y ¡ya está!
 
 "
   doctitlees = "Plantilla de un solo pentagrama, con notas únicamente"
-
diff --git a/Documentation/es/texidocs/skips-in-lyric-mode-2.texidoc b/Documentation/es/texidocs/skips-in-lyric-mode-2.texidoc
new file mode 100644 (file)
index 0000000..96a63b3
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Aunque no se pueden usar los silencios de separación @code{s} dentro
+de @code{\\lyricmode} (se toman como una @qq{s}, literal, no como un
+espacio), sí están disponibles las comillas dobles (@code{\"\"}) y el
+carácter subrayado (@code{_}).  Así por ejemplo:
+
+"
+  doctitlees = "Silencios de separación en modo de letra (2)"
diff --git a/Documentation/es/texidocs/skips-in-lyric-mode.texidoc b/Documentation/es/texidocs/skips-in-lyric-mode.texidoc
new file mode 100644 (file)
index 0000000..e367e88
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+La sintaxis @code{s} para los silencios de desplazamiento solamente
+está disponible en los modos de nota y de acorde.  En otras
+situaciones, por ejemplo al escribir la letra de las canciones, se
+recomienda usar la instrucción @code{\\skip}.
+
+"
+  doctitlees = "Silencios de separación en modo de letra"
index 95a4fc479694082c5d3afbc1f64ffdfa16b9288e..2972a1afed0d8aaa34087fd9b7571d8b76a6453a 100644 (file)
@@ -1,9 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Los deslizamientos se pueden componer tipográficamente tanto en los
 contextos de @code{Staff} como en los de @code{TabStaff}:
 
 "
-
   doctitlees = "Deslizamientos en tablatura"
diff --git a/Documentation/es/texidocs/snap-pizzicato-or-bartok-pizzicato.texidoc b/Documentation/es/texidocs/snap-pizzicato-or-bartok-pizzicato.texidoc
new file mode 100644 (file)
index 0000000..95ea005
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+El @qq{snap-pizzicato} (pizzicato de pellizco, conocido también como
+@qq{pizzicato de Bartók}) es un @qq{pizzicato fuerte en el que la
+cuerda se pulsa verticalmente pellizcándola y rebota contra el
+diapasón del instrumento} (Wikipedia).  Se denota mediante un círculo
+con una línea vertical que parte del centro del círculo hacia arriba.
+
+"
+  doctitlees = "Pizzicato @qq{snap} o pizzicato de Bartók"
index b189f62c58e3496b19719f450e7172347ed6c664..3ce79bdcb78575e6dae18b8f4b176f8000394bad 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6f88af063980030706a883f95b20b11cdc7d780b
   texidoces = "
 Los textos independientes se pueden disponer en varias columnas
 utilizando instrucciones @code{\\markup}:
 
 "
   doctitlees = "Elemento de marcado de texto independiente en dos columnas"
-
index e0b3f123838347515d827d09f021cff656e69d80..78d47fd0003075cf48ef1cca7707c1822c3e106c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   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
@@ -6,4 +6,3 @@ poner horizontales, como se muestra en este ejemplo.
 
 "
   doctitlees = "Comportamiento de las plicas y las barras de corchea en tablaturas"
-
diff --git a/Documentation/es/texidocs/stemlets.texidoc b/Documentation/es/texidocs/stemlets.texidoc
new file mode 100644 (file)
index 0000000..ff96eb7
--- /dev/null
@@ -0,0 +1,23 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidoces = "
+En ciertas convenciones notacionales se permite que las barras se
+extiendan por encima de los silencios.  Dependiendo de nuestras
+preferencias, estas barras pueden presentar pequeñas plicas para que
+el ojo aprecie más fácilmente el ritmo, y en algunos casos de música
+moderna el propio silencio se omite y permanecen solamente las
+pequeñas plicas sin cabeza.
+
+
+Este fragmento de código muestra una progresión a partir de la
+notación tradicional, pasando por barras sobre silencios y plicas
+sobre los silencios, hasta las plicas solamente.  Las pequeñas plicas
+o Stemlets se generan sobreescribiendo la propiedad
+@code{'stemlet-length} del objeto @code{Stem}, mientras que los
+silencios quedan ocultos estableciendo @code{'transparent = ##t}.
+
+
+Algunos elementos de @code{\\markup} se incluyen en la fuente para
+imprimir títulos sobre cada estilo de notación.
+
+"
+  doctitlees = "Stemlets (plicas de tamaño reducido)"
index 63ef55d013b73c90ca41207bb708a09b5ae49064..54cc82aec8cde7d62adc419731b3489348d643a2 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 5c42908f1c8d0a5c1d88851a2d793ca55476612c
   texidoces = "
 Se puede hacer que las barras secundarias apunten en la dirección del
 pulso o fracción a que pertenecen.  La primera barra evita los
diff --git a/Documentation/es/texidocs/string-number-extender-lines.texidoc b/Documentation/es/texidocs/string-number-extender-lines.texidoc
new file mode 100644 (file)
index 0000000..33e3089
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
+  texidoces = "
+Hacemos una línea extensora para las indicaciones de número de cuerda,
+motrando que una serie de notas se han de tocar sobre la misma cuerda.
+
+"
+  doctitlees = "Líneas de extensión para números de cuerda"
index 7a9f66be59f7db1950ed25bcda11d52f6e9d2f00..e3c1b10166dbcd19e8e296ac0551edbf3567e64a 100644 (file)
@@ -5,4 +5,3 @@ una sección @code{\\global} para el compás y la armadura
 
 "
   doctitlees = "Plantilla de cuarteto de cuerda (sencilla)"
-
index 8d362c387cd9bddb9e60db7836905e139d2e659e..05c39907d2576d79babb77f27370a67469f8be9f 100644 (file)
@@ -18,4 +18,3 @@ los archivos independientes!
 
 "
   doctitlees = "Plantilla de cuarteto de cuerda con particellas independientes"
-
index e25fcbf14abfde6f2d3de0118f1c38158da3794a..e8cafac2c7521be073171e21b5f643ee6f786530 100644 (file)
@@ -1,7 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Las barras de semicorchea, o de figuras más breves, no se subdividen
 de forma predeterminada.  Esto es, las tres (o más) barras se amplían
 sin romperse sobre grupos completos de notas.  Este comportamiento se
diff --git a/Documentation/es/texidocs/suppressing-warnings-for-clashing-note-columns.texidoc b/Documentation/es/texidocs/suppressing-warnings-for-clashing-note-columns.texidoc
new file mode 100644 (file)
index 0000000..40b222f
--- /dev/null
@@ -0,0 +1,16 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Si se colocan sobre la misma posición notas de dos voces distintas con
+las plicas en la misma dirección, y ninguna de las voces tiene un
+desplazamiento o ambas tienen el mismo desplazamiento, aparece el
+mensaje de error @samp{advertencia: demasiadas columnas de notas en
+colisión; se ignora} aparece al compilar el archivo de LilyPond.  Este
+mensaje se puede evitar fijando la propiedad @code{'ignore-collision}
+del objero @code{NoteColumn} al valor @code{#t}.  Observe que esto no
+elimina solamente las advertencias, sino que hace que LilyPond deje de
+intentar resolver las colisiones en absoluto, por lo que pueden
+obtenerse resultados distintos de los esperados si no se usa con
+prudencia.
+
+"
+  doctitlees = "Evitar las advertencias sobre columnas de notas que chocan"
diff --git a/Documentation/es/texidocs/table-of-contents.texidoc b/Documentation/es/texidocs/table-of-contents.texidoc
new file mode 100644 (file)
index 0000000..5d450f2
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 45dd19546e9b75b3e1e977732f0962f35dd3290e
+  texidoces = "
+Se puede incluir un índice general (tabla de contenidos) mediante el
+uso de @code{\\markuplist \\table-of-contents}.  Los elementos de la
+TDC se añaden con la instrucción @code{\\tocItem}.
+
+"
+  doctitlees = "Índice general (tabla de contenidos)"
diff --git a/Documentation/es/texidocs/three-sided-box.texidoc b/Documentation/es/texidocs/three-sided-box.texidoc
new file mode 100644 (file)
index 0000000..81f1c6d
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Este ejemplo muestra cómo añadir ina instrucción de marcado para
+obtener un rectángulo de tres segmentos visibles rodeando un elemento
+de texto (u otro elemento de marcado).
+
+"
+  doctitlees = "Rectángulo de tres segmentos visibles"
diff --git a/Documentation/es/texidocs/tick-bar-lines.texidoc b/Documentation/es/texidocs/tick-bar-lines.texidoc
new file mode 100644 (file)
index 0000000..ebf3490
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Con frecuencia se usan barras de compás en forma de 'tick' o raya
+corta donde la línea divisoria se emplea solamente a efectos de
+coordinación y no se quiere implicar con ella ningún énfasis rítmico.
+
+"
+  doctitlees = "Barras de compás en forma de raya corta"
diff --git a/Documentation/es/texidocs/time-signature-in-parentheses---method-3.texidoc b/Documentation/es/texidocs/time-signature-in-parentheses---method-3.texidoc
new file mode 100644 (file)
index 0000000..2f54341
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Otra forma de poner la indicación de compás entre paréntesis.
+
+"
+  doctitlees = "Indicación de compás entre paréntesis: método número 3"
diff --git a/Documentation/es/texidocs/time-signature-in-parentheses.texidoc b/Documentation/es/texidocs/time-signature-in-parentheses.texidoc
new file mode 100644 (file)
index 0000000..69f7ec0
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+La indicación de compás puede encerrarse entre paréntesis.
+
+"
+  doctitlees = "Compás entre paréntesis"
index b125d6cbf96e580702af3648405bd87dc67eab4a..aca3ef0b061b1c8895159945aac7a01aaec92764 100644 (file)
@@ -1,14 +1,13 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 A veces, la indicación de compás no debe imprimir la fracción completa
 (p.ej.  7/4), sino sólo el numerador (7 en este caso).  Esto se puede
-hacer fácilmente utilizando @code{\\override Staff.TimeSignature
-#'style = #'single-digit} para cambiar el estilo
-permanentemente. Usando @code{\\revert Staff.TimeSignature #'style},
-se puede revertir el cambio.  Para aplicar el estilo de un dígito
-único a una sola indicación de compás, utilice la instrucción
-@code{\\override} y anteponga la instrucción @code{\\once}.
+hacer fácilmente utilizando @code{\\override Staff.TimeSignature.style
+= #'single-digit} para cambiar el estilo permanentemente. Usando
+@code{\\revert Staff.TimeSignature.style}, se puede revertir el
+cambio.  Para aplicar el estilo de un dígito único a una sola
+indicación de compás, utilice la instrucción @code{\\override} y
+anteponga la instrucción @code{\\once}.
 
 "
   doctitlees = "Indicación de compás imprimiendo sólo el numerador (en lugar de la fracción)"
index dce77420bf59889727fd8411986773fb27c9d47f..7d4c9cac909874dd0d0ac09b5dae0b9d785e8a5e 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidoces = "
 A modo de alternativa para obtener auténticos «incipit»
 independientes de la partitura principal, se incluyen como
index 337397896b0e4a790c24ba927d0bf56b3f677e5c..a26a8975fed5bb98b240f1633ffd7430e1d577e9 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-doctitlees = "Transportar música con el menor número de alteraciones"
-texidoces = "
+%% Translation of GIT committish: 6f88af063980030706a883f95b20b11cdc7d780b
+  doctitlees = "Transportar música con el menor número de alteraciones"
+  texidoces = "
 Este ejemplo utiliza código de Scheme para forzar las
 modificaciones enarmónicas de las notas, y así tener el menor
 número de alteraciones accidentales. En este caso se aplican las
@@ -28,4 +28,3 @@ De esta forma se selecciona el mayor número de notas enarmónicas
 naturales.
 
 "
-
index db68c5b38193795106404c31bf5ce950999a620a..7ad0ceafbfee54ad99233870e5bff9b7b86285f7 100644 (file)
@@ -1,35 +1,34 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   doctitlees = "Trucaje de las propiedades de clave"
   texidoces = "
 La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de
 @code{clefGlyph}, @code{clefPosition} (que controla la posición
 vertical de la clave), @code{middleCPosition} y
-@code{clefOctavation}.  Se imprime una clave cada vez que se
-modifica cualquiera de las propiedades excepto
-@code{middleCPosition}.
+@code{clefTransposition}.  Se imprime una clave cada vez que se
+modifica cualquiera de las propiedades excepto @code{middleCPosition}.
 
-Observe que la modificación del glifo, la posición de la clave o
-su octavación, no cambian 'per se' la posición de las siguientes
-notas del pentagrama: para hacer esto también se debe especificar
-la posición del Do central.  Los parámetros posicionales están en
-relación con la tercera línea del pentagrama, los números
-positivos desplazan hacia arriba, contando una unidad por cada
-línea y espacio.  El valor de @code{clefOctavation} se
-establecería normalmente a 7, -7, 15 or -15, pero son válidos
-otros valores.
+Observe que la modificación del glifo, la posición de la clave o su
+octavación, no cambian 'per se' la posición de las siguientes notas
+del pentagrama: para hacer esto también se debe especificar la
+posición del Do central.  In order to get key signatures on the
+correct staff lines, @code{middleCClefPosition} must also be set.  Los
+parámetros posicionales están en relación con la tercera línea del
+pentagrama, los números positivos desplazan hacia arriba, contando una
+unidad por cada línea y espacio.  El valor de @code{clefTransposition}
+se establecería normalmente a 7, -7, 15 or -15, pero son válidos otros
+valores.
 
-Cuando se produce un cambio de clave en el salto de línea se
-imprime la clave nueva tanto al final de la línea anterior como al
-principio de la nueva, de forma predeterminada.  Si no se necesita
-la clave de advertencia al final de la línea anterior, se puede
-quitar estableciendo el valor de la propiedad
-@code{explicitClefVisibility} de @code{Staff}, a
-@code{end-of-line-invisible}.  El comportamiento predeterminado se
-puede recuperar con @code{\\unset Staff.explicitClefVisibility}.
+Cuando se produce un cambio de clave en el salto de línea se imprime
+la clave nueva tanto al final de la línea anterior como al principio
+de la nueva, de forma predeterminada.  Si no se necesita la clave de
+advertencia al final de la línea anterior, se puede quitar
+estableciendo el valor de la propiedad @code{explicitClefVisibility}
+de @code{Staff}, a @code{end-of-line-invisible}.  El comportamiento
+predeterminado se puede recuperar con @code{\\unset
+Staff.explicitClefVisibility}.
 
-Los siguientes ejemplos muestran las posibilidades cuando se
-ajustan estas propiedades manualmente.  En la primera línea, los
-cambios manuales preservan el posicionamiento relativo estándar de
-las claves y las notas, pero no lo hacen en la segunda línea.
+Los siguientes ejemplos muestran las posibilidades cuando se ajustan
+estas propiedades manualmente.  En la primera línea, los cambios
+manuales preservan el posicionamiento relativo estándar de las claves
+y las notas, pero no lo hacen en la segunda línea.
 "
-
index d48fada65411a94b64af8dbbb4390dfae5fa4a34..057a59de475d0e25d7fc3311809b5ae65ab388c6 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 45dd19546e9b75b3e1e977732f0962f35dd3290e
   texidoces = "
-
 La disposición de las expresiones de adorno se puede cambiar a lo
 largo de toda la música usando las funciones
 @code{add-grace-property} y @code{remove-grace-property}.  El
@@ -10,7 +9,4 @@ apuntan hacia arriba, y cambia la forma predeterminada de las
 cabezas a aspas.
 
 "
-
   doctitlees = "Trucar la disposición de las notas de adorno dentro de la música"
-
-
index ba269fe11636ebd395069bab469ed10a12421d58..57dababf88d3160653e316ecc2cd987db7fda67b 100644 (file)
@@ -6,4 +6,3 @@ un contexto @code{StaffGroup} o @code{ChoirStaffGroup}.
 
 "
   doctitlees = "Uso del corchete recto al comienzo de un grupo de pentagramas"
-
diff --git a/Documentation/es/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc b/Documentation/es/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc
new file mode 100644 (file)
index 0000000..bd66a5a
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
+  texidoces = "
+La música vocal y de viento usa con frecuencia una raya corta como
+signo de respiración.  Esto indica una repiración que quita un poco de
+tiempo a la nota anterior en lugar de producir una corta pausa, lo que
+se indica con la marca de respiración en forma de coma.  La marca se
+puede mover ligeramente hacia arriba para alejarla del pentagrama.
+
+"
+  doctitlees = "Usar una raya corta como símbolo de respiración"
index 54cf71c4a362ce14c028bc18efc7cf95f41a52de..82dc237268eeeb80292ef91d9c6fe7f900a1daae 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
   texidoces = "
-
 Se pueden imprimir estilos alternativos del corchete o gancho de las
 corcheas y figuras menores, mediante la sobreescritura de la propiedad
 @code{stencil} del objeto @code{Flag}.  Son valores válidos
@@ -8,5 +7,3 @@ corcheas y figuras menores, mediante la sobreescritura de la propiedad
 
 "
   doctitlees = "Uso de estilos alternativos para los corchetes"
-
-
index 9f9d532bfc8bcd8431b669e2b5ddea98261a8eb6..1d2497676597363ba4a29835a968e6acc338d101 100644 (file)
@@ -5,6 +5,4 @@ indicar la división de voces cuando no hay plicas que puedan ofrecer
 esta información. Se suele encontrar en la música coral.
 
 "
-
   doctitlees = "Uso de arpeggioBracket para hacer más visible un divisi"
-
diff --git a/Documentation/es/texidocs/using-autochange-with-more-than-one-voice.texidoc b/Documentation/es/texidocs/using-autochange-with-more-than-one-voice.texidoc
new file mode 100644 (file)
index 0000000..8bea7fd
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Utilización de @code{autochange} con más de una voz.
+
+"
+  doctitlees = "Usar cambio automático de pentagrama con más de una voz"
index 5b60f4f2fc24a3ed1e67ed5825613e7f313bf10d..b9d8565295d786bbb266f11bef8ae1e3b0ef383b 100644 (file)
@@ -5,4 +5,3 @@ legato.  Esto se puede conseguir estableciendo @code{doubleSlurs}.
 
 "
   doctitlees = "Utilizar ligaduras dobles para acordes legato"
-
index 4e9f9907461cad9eadfe0d07eb2595f6d386f6dd..d472fd3e551e222da559c439a1502f768cffc009 100644 (file)
@@ -1,11 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: bc4b56a8dee39a1fa3f40ac329ab0754d46fc56f
   texidoces = "
-
 Es posible aplicar la barrita que cruza la barra de las
 acciaccaturas, en otras situaciones.
 
 "
-
   doctitlees = "Utilizar la barra que tacha las notas de adorno con notas normales"
-
-
index 8df815d97672acc88a8aaed80c056bb6308e1957..2b539c21fea2c2d0894e891e26f7cb19065f4e8f 100644 (file)
@@ -1,7 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Se puede acceder @qq{lateralmente} a algunos grobs desde dentro de la
 función de callback de otro grob.  Éstos se encuentran relacionados
 normalmente como @qq{layout objects} (objetos de presentación) en la
@@ -32,8 +30,5 @@ Salida de ejemplo de la consola:
 #-Grob Stem -
 @end example
 
-
 "
-
   doctitlees = "Utilizar ly:grob-object para acceder a los grobs con \\tweak"
-
diff --git a/Documentation/es/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc b/Documentation/es/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc
new file mode 100644 (file)
index 0000000..28d8928
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Cuando la cabeza de una nota con una forma especial no se puede
+generar fácilmente mediante elementos de marcado gráfico, puede
+emplearse código de PostScript para generar la forma.  Este ejemplo
+muestra cómo se genera una cabeza en forma de paralelogramo.
+
+"
+  doctitlees = "Uso del lenguaje PostScript para generar cabezas de nota de formas especiales"
diff --git a/Documentation/es/texidocs/using-the--tweak-command-to-tweak-individual-grobs.texidoc b/Documentation/es/texidocs/using-the--tweak-command-to-tweak-individual-grobs.texidoc
new file mode 100644 (file)
index 0000000..1aed3ad
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+Con la instrucción de trucar @code{\\tweak} todos los objetos gráficos
+se pueden retocar directamente.  Aquí presentamos ejemplos de los
+tipos de retoque disponibles.
+
+"
+  doctitlees = "Uso de la instrucción \\tweak para retocar objetos gráficos individuales"
index 22fe2c7736c8c6d0e7287e6ca50495f0fa46281a..3ba0811207524988eeabd703464c30181c1f1db4 100644 (file)
@@ -1,7 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Se puede imprimir cualquier objeto gráfico sobre un fondo blanco para
 enmascarar parte de los objetos que están por debajo.  Esto puede ser
 útil para mejorar el aspecto de las colisiones en situaciones
@@ -20,5 +18,4 @@ a una capa por encima de @code{TimeSignature} de manera que no resulte
 enmascarada.
 
 "
-
   doctitlees = "Uso de la propiedad whiteout"
index d42cee3709956523320c5f52a403a502910bac05..c06dc2ae4b1e9349f8ce3b77a2c314fb9d25a701 100644 (file)
@@ -1,6 +1,6 @@
 %% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
- doctitlees = "Uso de ligaduras en los arpegios"
- texidoces = "
 doctitlees = "Uso de ligaduras en los arpegios"
 texidoces = "
 En ocasiones se usan ligaduras de unión para escribir los arpegios.
 En este caso, las dos notas ligadas no tienen que ser consecutivas.
 Esto se puede conseguir estableciendo la propiedad
@@ -9,4 +9,3 @@ es de utilidad, por ejemplo, para ligar un trémolo a un acorde, pero
 en principio también se puede usar para notas normales consecutivas.
 
 "
-
diff --git a/Documentation/es/texidocs/utf-8.texidoc b/Documentation/es/texidocs/utf-8.texidoc
new file mode 100644 (file)
index 0000000..1570f32
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Se pueden usar varios sistemas de escritura para textos (como títulos
+o la letra de las canciones) si se introducen en la codificación
+UTF-8, y utilizando un motor basado en Pango.  Dependiendo de las
+tipografías instaladas, este fragmento compone textos en Búlgaro
+(cirílico), hebreo, japonés y portugués.
+
+"
+  doctitlees = "UTF-8"
diff --git a/Documentation/es/texidocs/vertical-aligned-staffgroups-without-connecting-systemstartbar.texidoc b/Documentation/es/texidocs/vertical-aligned-staffgroups-without-connecting-systemstartbar.texidoc
new file mode 100644 (file)
index 0000000..177ad52
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidoces = "
+Este fragmento de código muestra cómo obtener grupos de pentagramas
+StaffGroups alineados verticalmente con una barra de inicio de sistema
+SystemStartBar por cada StaffGroup, pero sin conectarlos entre sí.
+
+"
+  doctitlees = "Grupos de pentagramas alineados verticalmente sin una barra SystemStartBar que los interconecte"
diff --git a/Documentation/es/texidocs/vertical-line-as-a-baroque-articulation-mark.texidoc b/Documentation/es/texidocs/vertical-line-as-a-baroque-articulation-mark.texidoc
new file mode 100644 (file)
index 0000000..779577a
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Esta línea corta vertical situada encima de la nota es de uso común en
+música barroca.  Su significado varía, pero en general indica notas
+que se deben tocar con más @qq{peso}.  El ejemplo siguiente muestra
+cómo conseguir dicha notación.
+
+"
+  doctitlees = "Línea vertical como una articulación barroca"
index 0e37c9743000d29347f09e9ed26abc0eb7d56418..89914b4c3a93dfb0ebe42a93b3f465be7576833e 100644 (file)
@@ -1,15 +1,14 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: a2030063498b24f5b08e10b0e429a12a82abbf2d
   texidoces = "
-Mediante el establecimiento de la propiedad @code{'Y-extent} a un valor
-adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e
-indicaciones dinámicas textuales) se pueden alinear con un punto de
-referencia común, independientemente de sus dimensiones.  De esta
-manera, todos los elementos estarán alineados verticalmente,
-produciendo así un resultado más satisfactorio.
+Todos los objetos @code{DynamicLineSpanner} (reguladores e
+indicaciones dinámicas de texto) se sitúan con su línea de referencia a
+una distancia de al menos @code{'staff-padding} del pentagrama, a no
+ser que otros elementos de notación los fuerce a colocarse a más
+distancia.  Si se ajusta @code{'staff-padding} a un valor
+suficientemente grande, las indicaciones dinámicas quedarán alineadas.
 
-Se usa una idea similar para alinear las inscripciones de texto a lo
-largo de su línea de base.
+Se usa una idea similar junto a \\textLengthOn para alinear las
+inscripciones de texto a lo largo de su línea de base.
 
 "
   doctitlees = "Indicaciones dinámicas y textuales alineadas verticalmente"
-
index 3eeb4c05262f83d3bad649a4f975a5d646dc21ab..ae2d5b58d212ef30b8f23d1bd44a58b23945cc50 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Las expresiones dinámicas que se comienzan, terminan o se producen
 en la misma nota se alinean verticalmente.  Para asegurar que las
index 3236fa98592e7e49307c5e4c5ff505325b02802e..e4fe6bbc241e386d8a89e69c616351e8fd457147 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Este fragmento de código muestra el uso de las propiedades de
 contexto @code{alignBelowContext} y @code{alignAboveContext} para
@@ -6,4 +6,3 @@ controlar la posición de la letra y los compases de ossia.
 
 "
   doctitlees = "Alineación vertical de la letra y los compases de ossia"
-
diff --git a/Documentation/es/texidocs/vertically-centered-common-lyrics.texidoc b/Documentation/es/texidocs/vertically-centered-common-lyrics.texidoc
new file mode 100644 (file)
index 0000000..d965f8e
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
+  texidoces = "
+En una pieza vocal en la que hay varias líneas de letra (dos, cuatro o
+más), y hay letras comunes a todas las voces en algún punto, estas
+letras comunes se pueden centrar verticalmente como se muestra en el
+siguiente ejemplo:
+
+"
+  doctitlees = "Letra común centrada verticalmente"
index fa569e059304f52717c95106371eb68d290ca6d9..f6e201fb4d3b471e17a9a2d36fa0964b333b2fd4 100644 (file)
@@ -8,5 +8,3 @@ tiene el valor verdadero.
 
 "
   doctitlees = "Centrado vertical de las líneas de bajo cifrado emparejadas"
-
-
index 9b21f1b546f054fd50abaf36b5697e4e4c7aa567..682474ef7b4922258aa622e352b90128d9afec38 100644 (file)
@@ -1,6 +1,5 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
-
 Esta plantilla añade una reducción de piano automática a la partitura
 vocal SATB estándar que se mostró en la @qq{Plantilla de conjunto
 vocal}. Esto presenta uno de los puntos fuertes de LilyPond: podemos
@@ -10,4 +9,3 @@ entonces los cambios se aplicarán también a la reducción de piano.
 
 "
   doctitlees = "Plantilla de conjunto vocal con reducción de piano automática"
-
index cdc12e40b41d8b37d59ef95d9f2ef838715a3995..005ea1e2a864e05b1752f2dcffa3b409c3ada3ac 100644 (file)
@@ -7,4 +7,3 @@ colocan utilizando @code{alignAboveContext} y
 
 "
   doctitlees = "Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas"
-
index 4ae6f540d04ce2747b0c6553f57044618cc268e4..3c2fc6f6efbf8415c7720c9979d18d9d5372d0d2 100644 (file)
@@ -1,5 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   texidoces = "
 Esta plantilla crea una partitura que comienza con una estrofa para
 solista y continúa con un estribillo a dos voces.  también muestra el
@@ -8,5 +7,4 @@ para definir cambios de compás (y otros elementos que son comunes a
 todas las partes) a lo largo de toda la partitura.
 
 "
-
   doctitlees = "Estrofa para solista y estribillo a dos voces"
index 1a913d78316e12c84c3adb0ece47637fc7e0a912..bc28fd418799d8710aba5c1afb0e9e8e07cc8924 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49
   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
@@ -8,4 +8,3 @@ voces se reagrupan en sólo dos pentagramas.
 
 "
   doctitlees = "Plantilla de conjunto vocal"
-
index 821417e14df9c0777426a34cb2b946987a3325a3..e4bfc080248c0ea90635bc3d1dda1a3d7a210ee3 100644 (file)
@@ -6,5 +6,3 @@ segunda vez debajo de los acordes.
 
 "
   doctitlees = "Corchetes de primera y segunda vez debajo de los acordes"
-
-
diff --git a/Documentation/es/texidocs/volta-multi-staff.texidoc b/Documentation/es/texidocs/volta-multi-staff.texidoc
new file mode 100644 (file)
index 0000000..f68d437
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Mediante la adición del grabador @code{Volta_engraver} al pentagrama
+adecuado, las casillas de primera y segunda vez se pueden poner sobre
+algún pentagrama distinto al más alto de la partitura.
+
+"
+  doctitlees = "Casillas de repetición en varios pentagramas"
diff --git a/Documentation/es/texidocs/volta-text-markup-using-repeatcommands.texidoc b/Documentation/es/texidocs/volta-text-markup-using-repeatcommands.texidoc
new file mode 100644 (file)
index 0000000..ff6a11b
--- /dev/null
@@ -0,0 +1,17 @@
+%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+  texidoces = "
+Aunque las casillas de repetición se especifican de forma óptima
+usando @code{\\repeat volta}, debe usarse la propiedad de contexto
+@code{repeatCommands} en caso de que el texto de la casilla requiera
+un formato más avanzado con @code{\\markup}.
+
+
+Puesto que @code{repeatCommands} admite una lista, el método más
+sencillo de incluir elementos de marcado es usar un identificador para
+el texto e insertarlo en la lista de instrucciones usando la sintaxis
+de Scheme @code{#(list (list 'volta textIdentifier))}.  Las
+instrucciones de principio y fin de repetición se pueden añadir como
+elementos de lista independientes:
+
+"
+  doctitlees = "Elementos de marcado para el texto de las casillas de repetición usando repeatCommands"
index a32b4fcf2b40901d1ed60a5ba93cb0b0ff451967..84a57bb334d336e5fc567b964dfe9fcef1be2567 100644 (file)
@@ -1,7 +1,5 @@
-%%%    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
-
+%% Translation of GIT committish: 5c42908f1c8d0a5c1d88851a2d793ca55476612c
   texidoces = "
-
 El fragmento de código que aparece a continuación produce una lista de
 todas las llaves y disposiciones de llave posibles para los diagramas
 de posiciones de instrumentos de viento madera, tal y como están
@@ -11,5 +9,4 @@ salida por la consola, omita el @code{(current-error-port)} de las
 instrucciones.
 
 "
-
   doctitlees = "Listas de llaves para los diagramas de viento madera"
index 93321a06e1b3527fbbf497bb0b989cc6e81d051e..9f2c15c3a806fcd1b8ef5551323dd701979c5f5b 100644 (file)
@@ -1,4 +1,4 @@
-%%%    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6f88af063980030706a883f95b20b11cdc7d780b
   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 7bea66747f6a88e27057ad9ca8172b8a0581f5fa..b95f74d1b897cb10d11487cf940516d4b78113a0 100644 (file)
@@ -16,7 +16,7 @@ td { border: 1px solid black; text-align: center; }
 
 @end html
 @end ifhtml
-@emph{Actualizado en Thu May 31 10:51:45 UTC 2012
+@emph{Actualizado en Wed Dec 18 12:23:14 UTC 2013
 }
 @multitable @columnfractions  0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
 
@@ -30,7 +30,7 @@ Registro de cambios de LilyPond
 @item
 Títulos de sección
 @*
-1192
+1453
 @tab Francisco Vila
 @tab 
 @tab 
@@ -270,7 +270,7 @@ sí
 @item
 A Tutorial de Scheme
 @*
-6041
+6271
 @tab Francisco Vila
 @tab 
 @tab 
@@ -297,7 +297,7 @@ sí
 @item
 1 Interfaces para programadores
 @*
-5250
+5925
 @tab Francisco Vila
 @tab 
 @tab 
@@ -390,7 +390,7 @@ sí
 @item
 1 Tutorial
 @*
-2535
+2578
 @tab Francisco Vila
 @tab 
 @tab 
@@ -417,7 +417,7 @@ sí
 @item
 2 Notación corriente
 @*
-4187
+4396
 @tab Francisco Vila
 @tab 
 @tab 
@@ -444,7 +444,7 @@ sí
 @item
 3 Conceptos fundamentales
 @*
-11130
+11144
 @tab Francisco Vila
 @tab 
 @tab 
@@ -471,7 +471,7 @@ sí
 @item
 4 Trucar la salida
 @*
-15468
+16191
 @tab Francisco Vila
 @tab 
 @tab 
@@ -498,7 +498,7 @@ sí
 @item
 A Plantillas
 @*
-219
+372
 @tab Francisco Vila
 @tab 
 @tab 
@@ -537,7 +537,7 @@ Referencia de la notación de GNU LilyPond
 @item
 Títulos de sección
 @*
-355
+326
 @tab Francisco Vila
 @tab 
 @tab 
@@ -618,7 +618,7 @@ sí
 @item
 1.1 Alturas
 @*
-4530
+4990
 @tab Francisco Vila
 @tab 
 @tab 
@@ -645,7 +645,7 @@ sí
 @item
 1.2 Duraciones
 @*
-6352
+6890
 @tab Francisco Vila
 @tab 
 @tab 
@@ -672,7 +672,7 @@ sí
 @item
 1.3 Expresiones
 @*
-1712
+1793
 @tab Francisco Vila
 @tab 
 @tab 
@@ -699,7 +699,7 @@ sí
 @item
 1.4 Repeticiones
 @*
-1011
+1050
 @tab Francisco Vila
 @tab 
 @tab 
@@ -726,7 +726,7 @@ sí
 @item
 1.5 Notas simultáneas
 @*
-2640
+2821
 @tab Francisco Vila
 @tab 
 @tab 
@@ -753,7 +753,7 @@ sí
 @item
 1.6 Notación de los pentagramas
 @*
-2392
+2476
 @tab Francisco Vila
 @tab 
 @tab 
@@ -780,7 +780,7 @@ sí
 @item
 1.7 Anotaciones editoriales
 @*
-949
+954
 @tab Francisco Vila
 @tab 
 @tab 
@@ -807,7 +807,7 @@ sí
 @item
 1.8 Texto
 @*
-2729
+2816
 @tab Francisco Vila
 @tab 
 @tab 
@@ -861,7 +861,7 @@ sí
 @item
 2.1 Música vocal
 @*
-4758
+5190
 @tab Francisco Vila
 @tab 
 @tab 
@@ -888,7 +888,7 @@ sí
 @item
 2.2 Teclados y otros instrumentos de varios pentagramas
 @*
-862
+888
 @tab Francisco Vila
 @tab 
 @tab 
@@ -942,7 +942,7 @@ sí
 @item
 2.4 Instrumentos de cuerda con trastes
 @*
-2675
+2662
 @tab Francisco Vila
 @tab 
 @tab 
@@ -969,7 +969,7 @@ sí
 @item
 2.5 Percusión
 @*
-812
+811
 @tab Francisco Vila
 @tab 
 @tab 
@@ -996,7 +996,7 @@ sí
 @item
 2.6 Instrumentos de viento
 @*
-321
+324
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1023,7 +1023,7 @@ sí
 @item
 2.7 Notación de acordes
 @*
-2022
+1972
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1077,7 +1077,7 @@ sí
 @item
 2.9 Notación antigua
 @*
-4752
+5375
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1131,7 +1131,7 @@ sí
 @item
 3 Entrada y salida generales
 @*
-8701
+10392
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1158,7 +1158,7 @@ sí
 @item
 4 Problemas de espaciado
 @*
-11234
+12256
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1185,7 +1185,7 @@ sí
 @item
 5 Cambiar los valores por omisión
 @*
-12679
+15289
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1212,7 +1212,7 @@ sí
 @item
 A Tablas del manual sobre notación
 @*
-2177
+2176
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1332,7 +1332,7 @@ sí
 @item
 1 Ejecutar LilyPond
 @*
-4615
+4537
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1359,7 +1359,7 @@ sí
 @item
 2 Actualizar ficheros con @command{convert-ly}
 @*
-1209
+1484
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1413,7 +1413,7 @@ sí
 @item
 4 Programas externos
 @*
-2390
+2817
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1440,7 +1440,7 @@ sí
 @item
 5 Sugerencias para escribir archivos de entrada
 @*
-2694
+2692
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1533,7 +1533,7 @@ sí
 @item
 Introducción
 @*
-4753
+4937
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1560,7 +1560,7 @@ sí
 @item
 Descarga
 @*
-1211
+1201
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1587,7 +1587,7 @@ sí
 @item
 Manuales
 @*
-1214
+1284
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1614,7 +1614,7 @@ sí
 @item
 Comunidad
 @*
-3006
+3073
 @tab Francisco Vila
 @tab 
 @tab 
@@ -1631,11 +1631,11 @@ sí
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">parcialmente</span>
+<span style="background-color: #1fff1f">sí</span>
 @end html
 @end ifhtml
 @ifnothtml
-parcialmente
+sí
 @end ifnothtml
 @tab pre-GDP
 @end multitable
diff --git a/Documentation/es/usage/GNUmakefile b/Documentation/es/usage/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 918b124cf30cad4d600d5d0b8a226f023a4f449e..90e07c34f6ceb7151dc842d3f7ebcf0e6ff2c328 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 22b4097bcee9f2909b8c43fa69ea313aad0b71c3
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -29,43 +29,33 @@ maneras.
 @node Apuntar y pulsar
 @section Apuntar y pulsar
 @translationof Point and click
+@cindex point and click (apuntar y pulsar)
+@cindex apuntar y pulsar
 
-Point and click adds links to pdf documents for certain music
-elements.
+«Point and click» (apuntar y pulsar con el ratón) le da la posibilidad
+de localizar notas del código de entrada pulsando sobre ellas dentro
+del visor de PDF.  Ello facilita encontrar los fragmentos de la
+entrada que producen algún tipo de error en la partitura.
 
 @menu
+* Configurar el sistema para Apuntar y pulsar::
 * Habilitar la opción de apuntar y pulsar::
 * Apuntar y pulsar selectivo::
 @end menu
 
-@node Habilitar la opción de apuntar y pulsar
-@unnumberedsubsec Habilitar la opción de apuntar y pulsar
-@translationof Enabling point and click
-
-@cindex apuntar y pulsar
+@node Configurar el sistema para Apuntar y pulsar
+@subsection Configuración del sistema
+@translationof Configuring the system for point and click
 
-«Point and click» (apuntar y pulsar con el ratón) le da la posibilidad
-de localizar notas del código de entrada pulsando sobre ellas dentro
-del visor de PDF.  Ello facilita encontrar los fragmentos de la
-entrada que producen algún tipo de error en la partitura.
-
-Cuando esta funcionalidad está activada, LilyPond añade hiper-enlaces
-al archivo PDF. Estos hiper-enlaces se envían al navegador de web, que
-a su vez abre un editor de texto con el cursor situado en el lugar
+Cuando esta funcionalidad está activada, LilyPond añade enlaces al
+archivo PDF.  Estos enlaces se envían al navegador de web, que a su
+vez abre un editor de texto con el cursor situado en el lugar
 correcto.
 
 Para conseguir que esta cadena funcione, tiene que configurar el visor
 de PDF de forma que siga los enlaces usando el guión
 @file{lilypond-invoke-editor} proporcionado con LilyPond.
 
-Para Xpdf sobre Unix, lo siguiente debe estar presente en
-@file{xpdfrc}.  En Unix, este archivo se encuentra o bien en
-@file{/etc/xpdfrc} o como @file{$HOME/.xpdfrc}.
-
-@example
-urlCommand     "lilypond-invoke-editor %s"
-@end example
-
 El programa @file{lilypond-invoke-editor} es un pequeño programa de
 apoyo. Invoca un editor para las URIs especiales de @code{textedit}, y
 lanza un navegador de web para el resto.  Comprueba la variable de
@@ -104,8 +94,137 @@ emacsclient --no-wait +%(línea)s:%(columna)s %(archivo)s
 para @code{LYEDITOR} equivale a la invocación estándar de emacsclient.
 
 
+@menu
+* Uso de Xpdf para Apuntar y pulsar::
+* Uso de GNOME 2 para Apuntar y pulsar::
+* Uso de GNOME 3 para Apuntar y pulsar::
+* Configuración adicional para Evince::
+@end menu
+
+@node Uso de Xpdf para Apuntar y pulsar
+@unnumberedsubsubsec Uso de Xpdf
+@translationof Using Xpdf for point and click
+@cindex Xpdf
+
+Para Xpdf sobre Unix, lo siguiente debe estar presente en
+@file{xpdfrc}.  En Unix, este archivo se encuentra o bien en
+@file{/etc/xpdfrc} o como @file{$HOME/.xpdfrc}.
+
+@example
+urlCommand     "lilypond-invoke-editor %s"
+@end example
+
+Si está usando Ubuntu, probablemente la versión de Xpdf instalada
+en su sistema efectúe paradas abruptas en cada documento PDF: este
+estado se viene prolongando desde hace varios años y se debe a la
+falta de correspondencia entre bibliotecas.  Lo mejor que puede
+hacer en vez de ello es instalar un paquete @samp{xpdf}
+actualizado y el paquete @samp{libpoppler} correspondiente
+procedente de Debian.  Una vez haya comprobado que funciona, puede
+usar
+@example
+sudo apt-mark hold xpdf
+@end example
+@noindent
+con el objeto de evitar que Ubuntu lo sobreescriba con la
+siguiente @q{actualización} de su paquete defectuoso.
+
+@node Uso de GNOME 2 para Apuntar y pulsar
+@unnumberedsubsubsec Uso de GNOME 2
+@translationof Using GNOME 2 for point and click
+
+Para usar GNOME 2 (y los visores de documentos PDF integrados en
+él), el conjuro para informar al sistema acerca de la URI
+@samp{textedit:} es
+@example
+gconftool-2 -t string -s /desktop/gnome/url-handlers/textedit/command "lilypond-invoke-editor %s"
+gconftool-2 -s /desktop/gnome/url-handlers/textedit/needs_terminal false -t bool
+gconftool-2 -t bool -s /desktop/gnome/url-handlers/textedit/enabled true
+@end example
+
+Después de esta invocación,
+@example
+gnome-open textedit:///etc/issue:1:0:0
+@end example
+@noindent
+debería llamar a @file{lilypond-invoke-editor} para abrir
+archivos.
+
+@node Uso de GNOME 3 para Apuntar y pulsar
+@unnumberedsubsubsec Uso de GNOME 3
+@translationof Using GNOME 3 for point and click
+
+En GNOME 3, las URIs se manejan por parte de la capa @q{gvfs} en
+vez de por @q{gconf}.  Debe crear un archivo en un directorio
+local como @file{/tmp} con el nombre
+@file{lilypond-invoke-editor.desktop} y que tenga el siguiente
+contenido:
+@example
+[Desktop Entry]
+Version=1.0
+Name=lilypond-invoke-editor
+GenericName=Textedit URI handler
+Comment=URI handler for textedit:
+Exec=lilypond-invoke-editor %u
+Terminal=false
+Type=Application
+MimeType=x-scheme-handler/textedit;
+Categories=Editor
+NoDisplay=true
+@end example
+y luego ejecute las instrucciones
+@example
+xdg-desktop-menu install ./lilypond-invoke-editor.desktop
+xdg-mime default lilypond-invoke-editor.desktop x-scheme-handler/textedit
+@end example
+
+Tras esta invocación,
+@example
+gnome-open textedit:///etc/issue:1:0:0
+@end example
+@noindent
+debería llamar a @file{lilypond-invoke-editor} para abrir
+archivos.
+
+@node Configuración adicional para Evince
+@unnumberedsubsubsec Configuración adicional para Evince
+@translationof Extra configuration for Evince
+@cindex Evince
+
+Si @code{gnome-open} funciona, pero Evince aún rehúsa abrir
+enlaces de Apuntar y pulsar a causa de permisos denegados, quizá
+tenga que cambiar el perfil de Apparmor de Evince, que controla el
+tipo de acciones que se le permite realizar a Evince.
+
+Para Ubuntu, el proceso es editar el archivo
+@file{/etc/apparmor.d/local/usr.bin.evince} y añadir al final las
+siguientes líneas:
+@example
+# Para enlaces de Textedit
+/usr/local/bin/lilypond-invoke-editor Cx -> sanitized_helper,
+@end example
+@noindent
+
+Después de añadir estas líneas, ejecute
+
+@example
+sudo apparmor_parser -r -T -W /etc/apparmor.d/usr.bin.evince
+@end example
+
+@noindent
+Ahora Evince debería poder abrir enlaces de Apuntar y pulsar.
+Para otros visores, es probable que funcionen configuraciones
+similares.
+
+@node Habilitar la opción de apuntar y pulsar
+@unnumberedsubsec Habilitar la opción de apuntar y pulsar
+@translationof Enabling point and click
 @cindex archivo de salida, tamaño del
 
+En LilyPond, la funcionalidad de Apuntar y pulsar está habilitada
+de forma predeterminada cuando se crean archivos de salida en
+formato PDF.
+
 Los enlaces de apuntar y pulsar aumentan significativamente el tamaño
 de los archivos de salida.  Para reducir el tamaño de los archivos PDF
 y PS, la posibilidad de apuntar y pulsar se puede desactivar
@@ -210,8 +329,10 @@ lilypond \
   example.ly
 @end smallexample
 
+
 @end itemize
 
+
 @node Apoyo respecto de los editores de texto
 @section Apoyo respecto de los editores de texto
 @translationof Text editor support
@@ -281,7 +402,6 @@ Este asunto se trata en
 @rlearning{Otras fuentes de información}.
 
 
-
 @node Otros editores
 @unnumberedsubsec Otros editores
 @translationof Other editors
@@ -328,7 +448,6 @@ informes de fallo casi con certeza no se resolverán a medio plazo.
 
 
 
-
 @node Invocar midi2ly
 @subsection Invocar @command{midi2ly}
 @translationof Invoking midi2ly
@@ -382,7 +501,7 @@ Cuantizar las duraciones a @var{DURACIÓN}.
 @item -e, --explicit-durations
 Imprimir valores de figura explícitos.
 
-@item -h,--help
+@item -h, --help
 Mostrar un resumen de las instrucciones de utilización.
 
 @item -k, --key=@var{alteración}[:@var{minor}]
@@ -455,7 +574,7 @@ Si el nombre de archivo proporcionado es @file{-},
 @item -a, --absolute
 convertir las alturas en modo absoluto.
 
-@item -h,--help
+@item -h, --help
 mostrar un resumen de la utilización y las opciones.
 
 @item -l, --language=IDIOMA
@@ -475,7 +594,7 @@ menos memoria y tiempo de CPU.
 @item -m, --midi
 activar el bloque midi.
 
-@item --nd --no-articulation-directions
+@item -nd, --no-articulation-directions
 no convertir las direcciones (@code{^}, @code{_} o @code{-}) para las
 articulaciones, dinámica, etc.
 
@@ -483,21 +602,21 @@ articulaciones, dinámica, etc.
 no convertir la información de las barras, en vez de ello usar el
 barrado automático de LilyPond.
 
-@item -o,--output=@var{archivo}
+@item -o, --output=@var{archivo}
 fijar el nombre del archivo de salida como @var{archivo}. Si
 @var{archivo} es @file{-}, la salida se imprime sobre stdout, la
 salida estándar.  Si no se da, se usa @var{archivo_xml}@file{.ly}.
 
-@item -r,--relative
+@item -r, --relative
 convertir las alturas en modo relativo (predeterminado).
 
-@item -v,--verbose
+@item -v, --verbose
 ser prolijo.
 
-@item -v,--version
+@item -v, --version
 imprimir la información de la versión.
 
-@item -z,--compressed
+@item -z, --compressed
 el archivo de entrada es un archivo MusicXML comprimido en zip.
 @end table
 
@@ -529,13 +648,13 @@ abc2ly [@var{opción}]@dots{} @var{archivo_abc}
 @command{abc2ly} contempla las siguientes opciones:
 
 @table @code
-@item -b,--beams=None
+@item -b, --beams=None
 preservar la noción de ABC de las barras
-@item -h,--help
+@item -h, --help
 esta ayuda
-@item -o,--output=@var{archivo}
+@item -o, --output=@var{archivo}
 fijar el nombre del archivo de salida como @var{archivo}.
-@item -s,--strict
+@item -s, --strict
 ser estricto respecto al éxito
 @item --version
 imprimir la información de la versión.
@@ -602,9 +721,9 @@ formatos}, para obtener más información acerca de esto.
 @command{etf2ly} contempla las siguientes opciones:
 
 @table @code
-@item -h,--help
+@item -h, --help
 esta ayuda
-@item -o,--output=@var{ARCHIVO}
+@item -o, --output=@var{ARCHIVO}
 fijar el nombre del archivo de salida como @var{ARCHIVO}
 @item --version
 información de la versión
index d483d6f0efa50c8bb6e6b6deb7836780968e8b58..b223e0c4be4e00ee74927ce9c895b09a830a4a0e 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 44011e382e91f43fb6752b3fbbf8d8984131a565
+    Translation of GIT committish: eba67a0bc70f38a7847de75c640d7ad19c6fd804
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Note: keep this node named so that `info lilypond-book' brings you here.
 @node lilypond-book
@@ -92,7 +92,7 @@ música y texto. Por ejemplo:
 
 \begin{lilypond}
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 \end{lilypond}
 
@@ -125,11 +125,11 @@ Guarde el código anterior como un archivo llamado
 lilypond-book --output=out --pdf lilybook.lytex
 @emph{lilypond-book (GNU LilyPond) @version{} }
 @emph{Leyendo lilybook.lytex...}
-@emph{..montañas de mensajes suprimidos..}
-@emph{Compilando lilybook.tex...}
+@emph{@dots{}montañas de mensajes suprimidos@dots{}}
+@emph{Compilando lilybook.tex@dots{}}
 cd out
 pdflatex lilybook
-@emph{..montañas de mensajes suprimidos..}
+@emph{@dots{}montañas de mensajes suprimidos@dots{}}
 xpdf lilybook
 @emph{(sustituya @command{xpdf} por su visor de PDF favorito)}
 @end example
@@ -154,7 +154,7 @@ música y texto.  Por ejemplo:
 
 @lilypond
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 @end lilypond
 
@@ -222,17 +222,17 @@ para incluir música dentro de archivos de @LaTeX{}:
 @itemize
 
 @item
-la instrucción @code{\lilypond@{...@}}, donde podemos escribir directamente fragmentos cortos de código de LilyPond
+la instrucción @code{\lilypond@{@dots{}@}}, donde podemos escribir directamente fragmentos cortos de código de LilyPond
 
 @item
-el entorno @code{\begin@{lilypond@}...\end@{lilypond@}}, donde podemos
+el entorno @code{\begin@{lilypond@}@dots{}\end@{lilypond@}}, donde podemos
 introducir directamente bloques más largos de código de LilyPond
 
 @item
-la instrucción @code{\lilypondfile@{...@}} para insertar un archivo de LilyPond
+la instrucción @code{\lilypondfile@{@dots{}@}} para insertar un archivo de LilyPond
 
 @item
-la instrucción @code{\musicxmlfile@{...@}} para insertar un archivo de
+la instrucción @code{\musicxmlfile@{@dots{}@}} para insertar un archivo de
 MusicXML, que se procesa por parte de @code{musicxml2ly} y
 @code{lilypond}.
 
@@ -415,9 +415,9 @@ fragmento:
 
 @example
 \onlyFirstNSystems@{3@}
-\begin@{lilypond@}...\end@{lilypond@}
+\begin@{lilypond@}@dots{}\end@{lilypond@}
 \onlyFirstNSystems@{1@}
-\begin@{lilypond@}...\end@{lilypond@}
+\begin@{lilypond@}@dots{}\end@{lilypond@}
 @end example
 
 
@@ -441,19 +441,19 @@ para incluir música dentro de archivos de Texinfo:
 @itemize
 
 @item
-la instrucción @code{@@lilypond@{...@}}, donde podemos introducir
+la instrucción @code{@@lilypond@{@dots{}@}}, donde podemos introducir
 directamente fragmentos cortos de código de LilyPond
 
 @item
-el entorno @code{@@lilypond...@@end lilypond}, donde podemos escribir
+el entorno @code{@@lilypond@dots{}@@end lilypond}, donde podemos escribir
 directamente bloques más extensos de código de LilyPond
 
 @item
-la instrucción @code{@@lilypondfile@{...@}} para insertar un archivo
+la instrucción @code{@@lilypondfile@{@dots{}@}} para insertar un archivo
 de LilyPond
 
 @item
-la instrucción @code{@@musicxmlfile@{...@}} para insertar un archivo
+la instrucción @code{@@musicxmlfile@{@dots{}@}} para insertar un archivo
 de MusicXML, que se procesa después por parte de @code{musicxml2ly} y
 de @code{lilypond}.
 
@@ -510,7 +510,7 @@ produce
 
 @lilypond[fragment,staffsize=11]{<c' e' g'>}
 
-A diferencia de @LaTeX{}, @code{@@lilypond@{...@}} no genera una imagen en
+A diferencia de @LaTeX{}, @code{@@lilypond@{@dots{}@}} no genera una imagen en
 línea.  Siempre consiste en un párrafo para ella sola.
 
 
@@ -524,19 +524,19 @@ para incluir música dentro de archivos HTML:
 @itemize
 
 @item
-la instrucción @code{<lilypond ... />}, donde podemos introducir
+la instrucción @code{<lilypond @dots{} />}, donde podemos introducir
 directamente fragmentos cortos de código de LilyPond
 
 @item
-el entorno @code{<lilyond>...</lilypond>}, donde podemos escribir
+el entorno @code{<lilyond>@dots{}</lilypond>}, donde podemos escribir
 directamente bloques más extensos de código de LilyPond
 
 @item
-la instrucción @code{<lilypondfile>...</lilypondfile>} para insertar
+la instrucción @code{<lilypondfile>@dots{}</lilypondfile>} para insertar
 un archivo de LilyPond
 
 @item
-la instrucción @code{<musicxmlfile>...</musicxmlfile>} para insertar
+la instrucción @code{<musicxmlfile>@dots{}</musicxmlfile>} para insertar
 un archivo de MusicXML, que se procesa después por parte de
 @code{musicxml2ly} y de @code{lilypond}.
 
@@ -572,7 +572,7 @@ etiquetas de imagen adecuadas para los fragmentos de música:
 \key c \minor c4 es g2
 @end lilypond
 
-Para imágenes en línea, utilice @code{<lilypond ... />}, donde las
+Para imágenes en línea, utilice @code{<lilypond @dots{} />}, donde las
 opciones están separadas de la música por el símbolo de dos puntos,
 por ejemplo
 
@@ -583,7 +583,7 @@ Algo de música dentro de <lilypond relative=2: a b c/> una línea de texto.
 Para incluir archivos externos, escriba
 
 @example
-<lilypondfile @var{opción1} @var{opción2} ...>@var{archivo}</lilypondfile>
+<lilypondfile @var{opción1} @var{opción2} @dots{}>@var{archivo}</lilypondfile>
 @end example
 
 @code{<musicxmlfile>} usa la misma sintaxis que @code{<lilypondfile>},
@@ -1061,25 +1061,25 @@ cambie a este directorio antes de ejecutar @command{latex} o
 @example
 lilypond-book --output=out miarchivo.lytex
 cd out
-...
+@dots{}
 @end example
 
-@itemx --skip-lily-check
+@item --skip-lily-check
 Evitar el fracaso si no se encuentra ninguna salida de lilypond.  Se
 usa para la documentación de LilyPond en formato Info sin imágenes.
 
-@itemx --skip-png-check
+@item --skip-png-check
 Evitar el fracaso si no se encuentran las imágenes PNG de los archivos
 EPS.  Se usa para la documentación de LilyPond en formato Info sin
 imágenes.
 
-@itemx --lily-output-dir=@var{directorio}
+@item --lily-output-dir=@var{directorio}
 Escribir archivos lily-XXX en el directorio @var{directorio}, enlazar
 en el directorio de @option{--output}.  Use esta opción para ahorrar
 tiempo de construcción para documentos de distintos directorios que
 comparten muchos fragmentos idénticos de código.
 
-@itemx --lily-loglevel=@var{nivel_de_registro}
+@item --lily-loglevel=@var{nivel_de_registro}
 Fijar el nivel en que la salida es prolija para las llamadas de la
 instrucción invocada @command{lilypond}, al valor
 @var{nivel_de_registro}.  Los valores posibles son @code{NONE} (nada),
@@ -1091,16 +1091,16 @@ instrucción invocada @command{lilypond}, al valor
 de registro.
 
 
-@itemx --info-images-dir=@var{directorio}
+@item --info-images-dir=@var{directorio}
 Dar formato a la salida de Texinfo de manera que Info busque las
 imágenes de música en @var{directorio}.
 
-@itemx --latex-program=@var{prog}
+@item --latex-program=@var{prog}
 Ejecutar el programa @command{prog} en vez de @command{latex}.  Esto
 es útil si nuestro documento se procesa con @command{xelatex}, por
 ejemplo.
 
-@itemx --left-padding=@var{cantidad}
+@item --left-padding=@var{cantidad}
 Rellenar las cajas EPS en esta medida, alrededor. @var{cantidad} se
 mide en milímetros, y es 3.0 como valor predeterminado.  Esta opción
 se debe usar si las líneas de música están muy pegadas al margen
@@ -1126,7 +1126,7 @@ De forma predeterminada, la salida se imprime por la consola.  Esta
 opción redirecciona toda la salida hacia archivos de registro situados
 en el mismo directorio que los archivos fuente.
 
-@itemx --use-source-file-names
+@item --use-source-file-names
 Escribir los archivos de salida de los fragmentos de música con el
 mismo nombre de base que su archivo fuente.  Esta opción sólo funciona
 para fragmentos incluidos con @code{lilypondfile} y sólo si los
index 12dc06e7392bf077d8f3abc1669c06851b3f4ba4..e6cb4cfce3fad15664e4fd61a8778992b08eb6e7 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: ff7d82711b47d3d31f26e1e6fc012c4055a20059
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 
 @node Ejecutar LilyPond
@@ -142,13 +142,13 @@ Están contempladas las siguientes opciones:
 
 @table @code
 
-@item -d,--define-default=@var{variable}=@var{valor}
+@item -d, --define-default=@var{variable}=@var{valor}
 Véase @ref{Opciones avanzadas de línea de órdenes para LilyPond}.
 
 @cindex Scheme, evaluación de expresiones
 @cindex expresiones de Scheme, evaluación
 
-@item -e,--evaluate=@var{expresión}
+@item -e, --evaluate=@var{expresión}
 Evaluar la @var{expresión} de Scheme antes de analizar los archivos
 @file{.ly}.  Se pueden pasar varias opciones @option{-e}, que se
 evaluarán en secuencia.
@@ -175,19 +175,19 @@ al principio del archivo @file{.ly}.
 @cindex output, format
 @cindex format, output
 
-@item -f,--format=@var{format}
+@item -f, --format=@var{format}
 which formats should be written.  Choices for @code{format} are
 @code{ps}, @code{pdf}, and @code{png}.
 
 Example: @code{lilypond -fpng @var{filename}.ly}
 
-@item -h,--help
+@item -h, --help
 Mostrar un resumen de las formas de utilización.
 
-@item -H,--header=@var{CAMPO}
+@item -H, --header=@var{CAMPO}
 Volcar un campo de cabecera al archivo @file{NOMBREBASE.@var{CAMPO}}
 
-@item -i,--init=@var{archivo}
+@item -i, --init=@var{archivo}
 Establecer el archivo de inicio a @var{archivo} (predeterminado:
 @file{init.ly}).
 
@@ -204,7 +204,7 @@ encuentra, la búsqueda continúa en los directorios siguientes.
 
 @cindex chroot, ejecutar dentro de una jaula
 
-@item -j,--jail=@var{usuario},@var{grupo},@var{jaula},@var{directorio}
+@item -j, --jail=@var{usuario},@var{grupo},@var{jaula},@var{directorio}
 Ejecutar @command{lilypond} en una jaula de chroot.
 
 La opción @option{--jail} (jaula) proporciona una alternativa más
@@ -277,7 +277,7 @@ tamaño de la memoria que se puede reservar.  Véase también
 @cindex registro, nivel de
 @cindex salida prolija, fijar el nivel
 
-@item -l,--loglevel=@var{LEVEL}
+@item -l, --loglevel=@var{LEVEL}
 Fijar el grado en que la salida de consola es prolija al nivel
 @var{LEVEL}. Los valores posibles son:
 
@@ -310,7 +310,7 @@ prolija.
 @cindex carpeta, dirigir la salida hacia
 @cindex salida, establecer el nombre del archivo de
 
-@item -o,--output=@var{ARCHIVO} o @var{CARPETA}
+@item -o, --output=@var{ARCHIVO} o @var{CARPETA}
 Establecer el nombre del archivo de salida predeterminado a
 @var{ARCHIVO} o, si existe una carpeta con ese nombre, dirigir la
 salida hacia @var{CARPETA}, tomando el nombre de archivo del documento
@@ -341,14 +341,14 @@ con
 @item --pdf
 Generar PDF.  Implica @option{--ps}.
 
-@item -v,--version
+@item -v, --version
 Mostrar la información de la versión.
 
-@item -V,--verbose
+@item -V, --verbose
 Ser prolijo: mostrar las rutas completas de todos los archivos que se
 leen, y dar información cronométrica.
 
-@item -w,--warranty
+@item -w, --warranty
 Mostrar la garantía con que viene GNU LilyPond (¡no viene con
 @strong{NINGUNA GARANTÍA}!).
 
@@ -361,9 +361,14 @@ Mostrar la garantía con que viene GNU LilyPond (¡no viene con
 
 @table @code
 
-@item -d@var{[option-name]}=@var{[value]},--define-default=@var{[option-name]}=@var{[value]}
-Establece la función de Scheme interna equivalente a @var{valor}.  Si
-no se proporciona ningún @var{valor}, se usa el valor predeterminado.
+@item -d@var{[option-name]}=@var{[value]}, --define-default=@var{[option-name]}=@var{[value]}
+Establece la función de Scheme interna equivalente a @var{valor}.
+
+@example
+-dbackend=svg
+@end example
+
+Si no se proporciona ningún @var{valor}, se usa el valor predeterminado.
 Para desactivar una opción se puede anteponer @code{no-} a la
 @var{variable}, p.ej.:
 
@@ -400,7 +405,7 @@ escala del resultado para así evitar @q{escaleras} en las imágenes
 @q{back-end} @code{EPS}.
 
 @item @code{backend}
-@tab @code{'ps}
+@tab @code{ps}
 @tab Seleccionar un @q{back-end}.  Los archivos (la opción predeterminada)
 incluyen las fuentes tipográficas @code{TTF}, @code{Type1} y
 @code{OTF}.  No se hace ningún subconjunto de estas fuentes.  El uso
@@ -408,7 +413,7 @@ de conjuntos de caracteres @q{orientales} puede dar lugar a archivos
 muy grandes.
 
 @item
-@tab @code{'eps}
+@tab @code{eps}
 @tab PostScript encapsulado.  Vuelca cada página o sistema como un archivo
 @file{EPS} distinto, sin fuentes tipográficas, y como un archivo
 @file{EPS} encuadernado con todas las páginas o sistemas que incluye
@@ -416,12 +421,12 @@ las fuentes.  Utilizado como opción predeterminada por parte de
 @command{lilypond-book}.
 
 @item
-@tab @code{'null}
+@tab @code{null}
 @tab No producir ninguna partitura impresa a la salida; tiene el mismo
 efecto que @code{-dno-print-pages}.
 
 @item
-@tab @code{'svg}
+@tab @code{svg}
 @tab Grácifos vectoriales escalables.  Crea un solo archivo @code{SVG}, sin
 fuentes tipográficas incrustadas, por cada página de salida.  Se
 recomienda instalar las fuentes Century Schoolbook, incluidas con la
@@ -434,7 +439,7 @@ opción @code{svg-woff} (véase más abajo) para usar los archivos de
 fuente woff en el @q{back-end} SVG.
 
 @item
-@tab @code{'scm}
+@tab @code{scm}
 @tab Volcado de las instrucciones de dibujo internas basadas en Scheme, en
 bruto.
 
@@ -571,11 +576,6 @@ MIDI a la cadena dada.
 @tab Convertir las cadenas de texto a rutas cuando los glifos pertenecen a
 una fuente de tipografía musical.
 
-@item @code{old-relative}
-@tab @code{#f}
-@tab Hacer que el modo @code{\relative} para la música simultánea funcione
-de manera similar a la sintaxis de los acordes.
-
 @item @code{paper-size}
 @tab @code{\"a4\"}
 @tab Establecer el tamaño predeterminado del papel.  Observe que la cadena
@@ -692,7 +692,7 @@ requiere más trabajo para su configuración.  Véase
 @tab @code{#f}
 @tab Para los archivos de entrada @code{ARCHIVO1.ly}, @code{ARCHIVO2.ly},
 etc. sacar los datos de registro hacia los archivos @code{ARCHIVO1.log},
-@code{ARCHIVO2.log}, ...
+@code{ARCHIVO2.log}@dots{}
 
 @item @code{show-available-fonts}
 @tab @code{#f}
@@ -983,10 +983,10 @@ se han visto y comprendido, se manejan sin problema.
 @menu
 * La música se sale de la página::
 * Aparece un pentagrama de más::
-* Error aparente en ../ly/init.ly::
 * Mensaje de error Unbound variable %::
 * Mensaje de error FT_Get_Glyph_Name::
 * Advertencia sobre que las afinidades del pentagrama sólo deben decrecer::
+* Mensaje de error Unexpected new::
 @end menu
 
 @node La música se sale de la página
@@ -1038,7 +1038,7 @@ permaneciendo el de abajo con las notas en el color negro
 predeterminado.
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
 \new Staff { a }
 @end lilypond
 
@@ -1051,7 +1051,7 @@ las notas de rojo es
 
 @lilypond[quote,verbatim,relative=2]
 \new Staff {
-  \override Staff.NoteHead #'color = #red
+  \override Staff.NoteHead.color = #red
   a
 }
 @end lilypond
@@ -1081,38 +1081,6 @@ explícitamente:
 @end lilypond
 
 
-@node Error aparente en ../ly/init.ly
-@unnumberedsubsec Error aparente en @code{../ly/init.ly}
-@translationof Apparent error in ../ly/init.ly
-
-Pueden aparecer varios mensajes de error extraños acerca de errores de
-sintaxis en @file{../ly/init.ly} si el archivo de entrada no está
-correctamente formado, por ejemplo si no contiene llaves o comillas
-correctamente emparejados.
-
-El error más común es la falta de una llave de cierre, (@code{@}}), al
-final de un bloque @code{score}.  Aquí la solución es obvia: compruebe
-que el bloque @code{score} está correctamente cerrado.  La estructura
-correcta de un archivo de entrada está descrita en @rlearning{Cómo
-funcionan los archivos de entrada de LilyPond}.  Usando un editor que
-resalte automáticamente las llaves correspondientes es de mucha ayuda
-para evitar estos errores.
-
-Una segunda causa frecuente es la falta de un espacio entre la última
-sílaba de un bloque lyrics (de letra) y la llave de cierre,
-(@code{@}}).  Sin esta separación, se considera que la llave forma
-parte de la sílaba.  Siempre se aconseja asegurarse de que hay
-espacios antes y después de @emph{todas} las llaves.  Para conocer la
-importancia de este asunto al utilizar letras de canciones, consulte
-@ruser{Introducir la letra}.
-
-Este mensaje de error también puede aparecer si se omiten las comillas
-de terminación (@code{"}).  En este caso, un mensaje de error
-adicional debería indicar un número de línea cercano al de aquella
-donde está el error.  Las comillas desbalanceadas estarán por lo
-general una o dos líneas por encima.
-
-
 @node Mensaje de error Unbound variable %
 @unnumberedsubsec Mensaje de error Unbound variable %
 @translationof Error message Unbound variable %
@@ -1149,10 +1117,62 @@ mensajes de advertencia se pueden evitar haciendo que uno de los
 contextos se comporte como un pentagrama, insertando
 
 @example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
 @end example
 
 @noindent
 al comienzo.  Para ver más detalles, consulte @qq{Espaciado de las
 líneas que no son pautas} en @ruser{Espaciado vertical flexible dentro
 de los sistemas}.
+
+
+@node Mensaje de error Unexpected new
+@unnumberedsubsec Mensaje de error Unexpected @code{@bs{}new}
+@translationof Error message unexpected new
+
+Un bloque @code{\score} debe contener una @emph{única} expresión
+musical.  Si en vez de ello contiene varias instrucciones
+@code{\new Staff}, @code{\new StaffGroup} o contextos similares
+introducidos con @code{\new} sin que se hayan encerrado entre
+llaves curvas, @code{@{ @dots{} @}}, o dobles paréntesis en
+ángulo, @code{<< @dots{}  >>}, así:
+
+@example
+\score @{
+  % Invalid! Generates error: syntax error, unexpected \new
+  \new Staff @{ @dots{} @}
+  \new Staff @{ @dots{} @}
+@}
+@end example
+
+@noindent
+entonces se producirá el mensaje de error.
+
+Para evitar el error, encierre todas las instrucciones @code{\new}
+dentro de llaves curvas o dobles paréntesis en ángulo.
+
+El uso de llaves curvas introduce las instrucciones @code{\new} de
+forma secuencial:
+
+@lilypond[quote,verbatim]
+\score {
+  {
+    \new Staff { a' a' a' a' }
+    \new Staff { g' g' g' g' }
+  }
+}
+@end lilypond
+
+@noindent
+pero es más probable que se encuentre utilizando dobles ángulos de
+manera que los pentagramas nuevos se inserten en paralelo, es
+decir, simultáneamente:
+
+@lilypond[quote,verbatim]
+\score {
+  <<
+    \new Staff { a' a' a' a' }
+    \new Staff { g' g' g' g' }
+  >>
+}
+@end lilypond
index f062a2a462a1e184eeaccd3dbc8629ba1e658279..b974c54af66e36768e0047a5d3ba90d4fa306700 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 45d0e015edc53abebada17a0fdb1d665f7edf900
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -136,7 +136,7 @@ saltos de línea.  Así permitirá a LilyPond colocar los saltos donde
 variable, se recomienda que las notas estén envueltas dentro de
 
 @example
-\transpose c altura-natural @{...@}
+\transpose c altura-natural @{@dots{}@}
 @end example
 
 @noindent
@@ -178,7 +178,7 @@ versiones nuevas de LilyPond.
 violin = \relative c'' @{
 g4 c'8. e16
 @}
-...
+@dots{}
 \score @{
   \new GrandStaff @{
     \new Staff @{
@@ -216,7 +216,7 @@ investigación para determinar el origen del problema.
 
 Las herramientas más poderosas para este cometido son el comentario de
 una sola línea (indicado por @code{%}) y el comentario de bloque
-(indicado por @code{%@{ ... %@}}).  Si no sabe dónde está el problema,
+(indicado por @code{%@{@dots{}%@}}).  Si no sabe dónde está el problema,
 comience convirtiendo grandes secciones del archivo de entrada en un
 comentario.  Después de eliminar una sección convirtiéndola en un
 comentario, pruebe a compilar el archivo otra vez.  Si funciona,
index f253583646a31848bb15a8c66c7a1f651c11be26..acb7b92fc517444f31bf54f1f13b940b0332fe58 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: b381556a3132e765159edc75107b31259dbf5988
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
 @cindex actualización de un archivo de LilyPond
 @cindex convert-ly
 
-La sintaxis del lenguaje de entrada de LilyPond se modifica de forma
-habitual para simplificarla o mejorarla de distintas maneras.  Como
-efecto secundario, el intérprete de LilyPond a menudo ya no es
-compatible con los archivos de entrada antiguos.  Para poner remedio a
-esto se puede utilizar el programa @command{convert-ly} para manejar
-casi todos los cambios de sintaxis entre versiones de LilyPond.
+La sintaxis del lenguaje de entrada de LilyPond se modifica de
+forma habitual para simplificarla o mejorarla de distintas
+maneras.  Como efecto secundario, el intérprete de LilyPond a
+menudo ya no es compatible con los archivos de entrada antiguos.
+Para poner remedio a esto se puede utilizar el programa
+@command{convert-ly} para actualizar archivos a nuevas versiones
+de LilyPond.
 
 @menu
 * ¿Por qué cambia la sintaxis?::
@@ -60,17 +61,46 @@ cambiar el nombre a @code{print-all-headers}.  Afortunadamente, este
 cambio se puede automatizar con nuestra herramienta
 @command{convert-ly}.
 
-Sin embargo, lamentablemente @code{convert-ly} no puede tratar todos
-los cambios en la entrada.  Por ejemplo, en la versión 2.4 y
+Sin embargo, lamentablemente @command{convert-ly} no puede tratar
+todos los cambios en la entrada.  Por ejemplo, en la versión 2.4 y
 anteriores de LilyPond, los acentos y las letras no inglesas se
 introducían utilizando LaTeX: por ejemplo, @code{No\"el} (que
-significa @q{Navidad} en francés).  En LilyPond 2.6 y siguientes, el
-carácter especial @code{ë} debe introducirse directamente en el
-archivo de LilyPond como un carácter UTF-8.  @code{convert-ly} no
-puede cambiar todos los caracteres especiales de LaTeX a caracteres de
-UTF-8; tendrá que actualizar manualmente sus archivos de LilyPond
-antiguos.
-
+significa @q{Navidad} en francés).  En LilyPond 2.6 y siguientes,
+el carácter especial @code{ë} debe introducirse directamente en el
+archivo de LilyPond como un carácter UTF-8.  @command{convert-ly}
+no puede cambiar todos los caracteres especiales de LaTeX a
+caracteres de UTF-8; tendrá que actualizar manualmente sus
+archivos de LilyPond antiguos.
+
+Las reglas de conversión de @command{convert-ly} funcionan usando
+correspondencia y sustitución de patrones de texto en lugar de una
+comprensión profunda de la sintaxis de LilyPond.  Esto tiene
+varias consecuencias:
+@itemize @bullet
+@item
+El buen funcionamiento de la conversión depende de la calidad de
+cada conjunto de reglas que se aplican y de la complejidad del
+cambio correspondiente.  A veces las conversiones pueden necesitar
+correcciones manuales, por lo que la versión antigua debiera
+conservarse a efectos de comparación.
+@item
+Solamente son posibles las conversiones a formatos más nuevos: no
+existe ningún conjunto de reglas para la desactualización.  Así
+pues, la copia principal de trabajo de un archivo de LilyPond
+solamente se debe actualizar cuando ya no hay necesidad de seguir
+manteniendo versiones antiguas de LilyPond.  Los sistemas de
+control de versiones como el Git pueden ser de gran ayuda para
+realizar el mantenimiento de varias versiones de los mismos
+archivos.
+@item
+Los propios programas LilyPond y Scheme son bastante robustos
+frente a los espacios añadidos y suprimidos de manera
+@qq{creativa}, pero las reglas utilizadas por @command{convert-ly}
+tienden a hacer ciertas suposiciones de estilo.  Lo mejor que
+puede hacerse es seguir el estilo que se usa en los manuales para
+hacer actualizaciones indoloras, especialmente porque los propios
+manuales se actualizan usando @command{convert-ly}.
+@end itemize
 
 @node Invocar convert-ly
 @section Invocar @command{convert-ly}
@@ -137,28 +167,32 @@ convert-ly [@var{opción}]@dots{} @var{archivo}@dots{}
 Se pueden dar las siguientes opciones:
 
 @table @code
-@item -e,--edit
+@item -d, --diff-version-update
+incrementar la cadena @code{\version} solamente si el archivo
+efectivamente ha cambiado.  En tal caso, la cabecera de versión
+corresponderá a la versión siguiente al último cambio efectivo.
+Sin esa opción, la versión refleja la última conversión que se
+@emph{intentó} hacer.
+
+@item -e, --edit
 Aplicar las conversiones directamente al archivo de entrada,
-modificándolo in situ.
+modificándolo in situ.  El archivo original se cambia de nombre a
+@file{miarchivo.ly~}.  Este archivo de copia de seguridad podría
+ser un archivo oculto en algunos sistemas operativos.
+
+@item -b, --backup-numbered
+Cuando se usa con la opción @samp{-e}, numerar los archivos de
+copia de seguridad de forma que no se sobreescriba ninguna versión
+anterior.  Los archivos de copia de seguridad podrían ser archivos
+ocultos en algunos sistemas operativos.
 
-@item -f,--from=@var{versión_de_origen}
+@item -f, --from=@var{versión_de_origen}
 Establece la versión desde la que convertir.  Si no aparece esta
 opción, @command{convert-ly} tratará de adivinarla, basándose en el
 enunciado @code{\version} del archivo.  Ejemplo: @option{--from=2.10.25}
 
-@item -n,--no-version
-Normalmente @command{convert-ly} añade un indicador @code{\version} a
-la salida.  La especificación de esta opción lo suprime.
-
-@item -s, --show-rules
-Mostrar todas las conversiones conocidas y salir.
-
-@item --to=@var{versión_final}
-Fijar la versión de destino de la conversión.  De forma predeterminada
-se convierte a la última versión disponible.  Ejemplo: @option{--to=2.12.2}
-
 @item -h, --help
-Imprimir la ayuda de la utilización.
+Imprimir la ayuda de utilización.
 
 @item -l @var{loglevel}, --loglevel=@var{loglevel}
 Fijar el grado en que la salida es prolija a @var{loglevel}. Los
@@ -166,19 +200,35 @@ valores posibles son @code{NONE} (ninguno), @code{ERROR} (errores),
 @code{WARNING} (advertencias), @code{PROGRESS} (avance;
 predeterminado) y @code{DEBUG} (depuración).
 
+@item -n, --no-version
+Normalmente @command{convert-ly} añade un indicador @code{\version} a
+la salida.  La especificación de esta opción lo suprime.
+
+@item -s, --show-rules
+Mostrar todas las conversiones conocidas y salir.
+
+@item -t, --to=@var{versión_final}
+Fijar explícitamente a qué @code{\version} convertir, en caso
+contrario el valor predeterminado es la versión más actual.  Debe
+ser más alta que la versión de partida.
+
+@example
+convert-ly --to=2.14.1 miarchivo.ly
+@end example
+
 @end table
 
 Para actualizar fragmentos de LilyPond en archivos de texinfo, use
 
 @example
-convert-ly --from=... --to=... --no-version *.itely
+convert-ly --from=@dots{} --to=@dots{} --no-version *.itely
 @end example
 
 Para ver los cambios en la sintaxis de LilyPond entre dos versiones
 dadas, use
 
 @example
-convert-ly --from=... --to=... -s
+convert-ly --from=@dots{} --to=@dots{} -s
 @end example
 
 
diff --git a/Documentation/es/web/GNUmakefile b/Documentation/es/web/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 119ec37c51abda6fffd40070f5a7b98de376b2fa..d9ed101f19779de38f0451120f7dd7af7f01af29 100644 (file)
@@ -1,12 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 7f8a93a6c044fcbb3c7aeb3aa5cba0c921dc7691
+    Translation of GIT committish: b4a06339566ce7e7f17ba60745261fc26b32abb0
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
+@include included/acknowledge.itexi
 @include included/authors.itexi
 @include included/helpus.itexi
 
@@ -55,6 +56,9 @@ Summer of Code» (Verano del Código de Google).
 @item
 @ref{Autores}: las personas que han hecho a LilyPond lo que hoy es.
 
+@item
+@ref{Acknowledgements}: proyectos e instituciones que apoyan a LilyPond
+
 @end itemize
 @divEnd
 
@@ -87,6 +91,7 @@ Summer of Code» (Verano del Código de Google).
 * Desarrollo::
 * GSoC 2012::
 * Autores::
+* Reconocimientos::
 * Publicaciones::
 * Noticias antiguas::
 * Desván::
@@ -794,6 +799,7 @@ están en @url{http://lilypond.org}}
 @divClass{normal-table}
 @multitable @columnfractions .3 .3 .3
 @headitem Introducción
+
 @item
 @docLinkSplit{Aprendizaje,learning,@manualDevelLearningSplit-es}
 @tab
@@ -814,7 +820,9 @@ están en @url{http://lilypond.org}}
 @docLinkBig{Ensayo,essay,@manualDevelEssayBig-es}
 @tab
 @docLinkPdf{Ensayo,essay,@manualDevelEssayPdf-es}
+@end multitable
 
+@multitable @columnfractions .3 .3 .3
 @headitem Estándar
 
 @item
@@ -837,7 +845,9 @@ están en @url{http://lilypond.org}}
 @docLinkBig{Fragmentos,snippets,@manualDevelSnippetsBig}
 @tab
 @docLinkPdf{Fragmentos,snippets,@manualDevelSnippetsPdf}
+@end multitable
 
+@multitable @columnfractions .3 .3 .3
 @headitem Poco frecuentes
 
 @item
@@ -867,15 +877,17 @@ están en @url{http://lilypond.org}}
 @docLinkBig{Funcionamiento interno,internals,@manualDevelInternalsBig}
 @tab
 @docLinkPdf{Funcionamiento interno,internals,@manualDevelInternalsPdf}
+@end multitable
 
 @ifset web_version
+@multitable @columnfractions .3
 @headitem Para descargar
 
 @item
 @doctarballDevel-es
+@end multitable
 @end ifset
 
-@end multitable
 
 @divEnd
 @divEnd
@@ -1141,7 +1153,17 @@ actualmente.
 @divEnd
 @divEnd
 
+@node Reconocimientos
+@unnumberedsec Reconocimientos
+@translationof Acknowledgements
 
+@divClass{column-center-top}
+@subheading Reconocimientos
+
+@divClass{keep-bullets}
+@acknowledgementsCurrent
+@divEnd
+@divEnd
 
 @node Publicaciones
 @unnumberedsec Publicaciones
@@ -1192,6 +1214,7 @@ actualmente.
 @subheading Anuncios
 
 Anuncios y noticias por versión:
+@uref{http://lilypond.org/doc/v2.16/Documentation/web/index#Lilypond-2_002e16_002e0-released_0021-August-24_002c-2012-1,v2.16},
 @uref{http://lilypond.org/doc/v2.14/Documentation/web/index#LilyPond-2_002e14_002e0-released_0021-June-6_002c-2011,v2.14},
 @miscLink{announce-v2.12,v2.12},
 @miscLink{announce-v2.10,v2.10},
@@ -1205,6 +1228,7 @@ Anuncios y noticias por versión:
 @miscLink{ANNOUNCE-0.1,v0.1}
 
 Lista descriptiva de los cambios por versión:
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/index.html,v2.16},
 @uref{http://lilypond.org/doc/v2.14/Documentation/changes/index.html,v2.14},
 @uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS,v2.12},
 @uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS,v2.10},
@@ -1220,6 +1244,24 @@ Lista descriptiva de los cambios por versión:
 
 @divEnd
 
+@divClass{column-center-bottom}
+@subheading Thanks
+
+Gracias a los desarrolladores, colaboradores, cazadores de fallos
+y aportadores de sugerencias por
+@miscLink{THANKS-2.16,v2.16},
+@miscLink{THANKS-2.14,v2.14},
+@miscLink{THANKS-2.12,v2.12},
+@miscLink{THANKS-2.10,v2.10},
+@miscLink{THANKS-2.8,v2.8},
+@miscLink{THANKS-2.6,v2.6},
+@miscLink{THANKS-2.4,v2.4},
+@miscLink{THANKS-2.2,v2.2},
+@miscLink{THANKS-2.0,v2.0},
+@miscLink{THANKS-1.8,v1.8}
+
+@divEnd
+
 @divClass{column-center-bottom}
 @subheading Registros de cambios
 
index 1a95931868555b28a50c3b64a0e33f4dbe643c01..23334e26565054067d8ba0093b408691e53fd155 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 4239aa2369f74d8e8622c2235154e9f064c394f7
+    Translation of GIT committish: 2970311021cf68958850e43911e0cecf51f68fbc
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -222,14 +222,6 @@ sh lilypond-@versionStable{}-SIST-OPERATIVO.sh --help
 
 
 @divClass{column-right-top}
-@subheading Compilación de un archivo
-
-@lilypadCommandLine
-
-@divEnd
-
-
-@divClass{column-left-top}
 @subheading Paquetes específicos de cada distribución
 
 Utilice el gestor de paquetes de su distribución para instalar o
@@ -267,10 +259,19 @@ openSUSE: LilyPond 2.12.3}
 @divEnd
 
 
+@divClass{column-center-top}
+@subheading Compilación de un archivo
+
+@lilypadCommandLine
+
+@divEnd
+
+
 @divClass{column-center-bottom}
 @subheading Legalismos
 
-@divClass{legal} Se reconoce el copyright y las marcas registradas de
+@divClass{legal}
+Se reconoce el copyright y las marcas registradas de
 todos los logotipos e imágenes de producto.
 
 @logoLegalLinux
@@ -323,18 +324,12 @@ Borre la carpeta LilyPond.app.
 
 @divEnd
 
-@divClass{column-right-top}
-@subheading Compilar un archivo
-
-@lilypadOSX
-
-@divEnd
-
 
-@divClass{column-left-top}
+@divClass{column-right-top}
 @subheading Ejecución desde la línea de órdenes
 
-@warning{Si está satisfecho con el GUI, ignore estas instrucciones.}
+@warning{Si está satisfecho con las instrucciones sobre
+el interfaz gráfico, ignore estas instrucciones.}
 
 @subsubheading MacOS X sobre la línea de órdenes
 
@@ -358,11 +353,11 @@ Cree un archivo llamado @command{lilypond} que contenga
 @divClass{h-scroll-auto}
 @example
 #!/bin/bash
-exec @var{DIR}/LilyPond.app/Contents/Resources/bin/lilypond "$@@"
+exec @var{DIRECTORIO}/LilyPond.app/Contents/Resources/bin/lilypond "$@@"
 @end example
 @divEnd
 
-@warning{en general, @var{DIR} será @code{/Applications/}}
+@warning{en general, @var{DIRECTORIO} será @code{/Applications/}}
 
 
 @item
@@ -415,6 +410,14 @@ Lo mismo vale para el resto de los guiones de ese directorio, como
 @divEnd
 
 
+@divClass{column-center-top}
+@subheading Compilación de un archivo
+
+@lilypadOSX
+
+@divEnd
+
+
 @divClass{column-center-bottom}
 @subheading Legalismos
 
@@ -447,7 +450,7 @@ e imágenes de productos.
 @item
 @sourceimage{logo-windows,,,}
 @downloadStableWindows
-Para Windows 2000, XP, Vista y Windows 7.
+Para Windows 2000, XP, Vista, Windows 7 y 8.
 
 @end itemize
 
@@ -487,18 +490,10 @@ Pulse el botón @q{Finish} cuando termine el programa de desinstalación.
 
 
 @divClass{column-right-top}
-@subheading Compilar un archivo
-
-@lilypadWindows
-
-@divEnd
-
-
-@divClass{column-left-top}
 @subheading Ejecución desde la línea de órdenes
 
-@warning{Si le satisface el interfaz gráfico, ignore estas
-instrucciones.}
+@warning{Si le satisfacen las instrucciones sobre
+el interfaz gráfico, ignore estas instrucciones.}
 
 @subsubheading Windows sobre la línea de órdenes
 
@@ -543,6 +538,14 @@ lilypond prueba.ly
 @divEnd
 
 
+@divClass{column-center-top}
+@subheading Compilación de un archivo
+
+@lilypadWindows
+
+@divEnd
+
+
 @divClass{column-center-bottom}
 @subheading Legalismos
 
index 0f0cf9fef8c7042d0f923264673b01c4e2ed7e3f..c1f39605b7fffe2cebd1e9a931285cd5ac8ec8a2 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 2936a7a6c5bca895dfd5725ab2422ad1c6b3ff11
+    Translation of GIT committish: f6443f01a56112f080b8d2e7e646007397bdf6ec
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -525,6 +525,18 @@ actuaciones por todo el mundo.  Algunos titulares:
 @divClass{keep-bullets}
 @itemize
 
+@item
+Una edición crítuca de la serie de óperas @emph{Enea nel Lazio (1760)},
+de Tommaso Traetta, con libreto de
+Vittorio Amedeo Cigna-Santi, en cuatro partes:
+@uref{http://www.academia.edu/1987651/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_1_4_, Primera parte}
+@uref{http://www.academia.edu/1994533/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_2_4_, Segunda parte}
+@uref{http://www.academia.edu/1994558/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_3_4_, Tercera parte}
+@uref{http://www.academia.edu/1996242/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_4_4_, Cuarta parte}
+Creada por
+@uref{http://unito.academia.edu/LucaRossettoCasel, Luca Rossetto Casel}
+para su tesis de doctorado.
+
 @item
 Los @emph{Cuadros de una exposición} de Mussorgsky, reorquestados y
 dirigidos por @uref{http://www.aurelienbello.com/,Aurélien Bello} con
@@ -548,7 +560,7 @@ Pittsburgh New Music Ensemble}.
 @emph{Anonymous Student Compliment or Complaint}, de
 @uref{http://www.mikesolomon.org, Mike Solomon}, ganador de entre 172
 participantes procedentes de 22 países del
-@uref{http://leftcoastensemble.org/contest, concurso de composición
+@uref{http://leftcoastensemble.org, concurso de composición
 Left Coast de 2011}.  Entre otras obras están: Norman (age 1) para
 clarinete solo, interpretada en el festival de música electroacústica
 (FEMF) de la @uref{http://emu.music.ufl.edu/fems_concerts.html, Universidad
@@ -564,7 +576,7 @@ años del nacimiento del compositor.
 
 @item
 La interpretación de
-@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque} de
+@uref{http://www.mercurybaroque.org, Mercury Baroque} de
 @emph{Armide} de Lully, 15 y 16 de mayo de 2009, en Houston, Texas
 (tipografía de @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}).
 
@@ -572,7 +584,8 @@ La interpretación de
 Extractos instrumentales de @emph{Hippolyte et Aricie} de Rameau en la
 iglesia de St. James en Manhattan, el 8 de mayo de 2009, por Frederick
 Renz y su conjunto @uref{http://www.earlymusicny.org/, Early Music New
-York} (realización tipográfica de Nicolas Sceaux).
+York} (realización tipográfica de
+@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}).
 
 @item
 @emph{Affaire Étrangère}, ópera de
@@ -745,8 +758,8 @@ Octubre de 2004
 Los editores de Computer!Totaal, una revista holandesa de informática,
 @uref{http://lilypond.org/website/pdf/computer-totaal.jpeg, describen a
 LilyPond} en la edición de octubre de 2004 como: @qq{Maravilloso
-software libre (de código abierto) (...) Las partituras producidas por
-LilyPond son excepcionalmente bonitas (...) un sistema muy potente que
+software libre (de código abierto) (@dots{}) Las partituras producidas por
+LilyPond son excepcionalmente bonitas (@dots{}) un sistema muy potente que
 puede hacer casi cualquier cosa.}
 
 @item
@@ -772,7 +785,7 @@ Febrero de 2004
 El cantante de jazz Gail Selkirk escribe sobre
 @uref{http://www.songbirdofswing.com/editorial_page/lilypond/,
 Sumergirse en el estanque de los nenúfares (Lily Pond)}.
-@qq{... puede hacer hojas guía de acordes o partes orquestales
+@qq{@dots{} puede hacer hojas guía de acordes o partes orquestales
 completas, y el resultado puede ser increíble.}
 @uref{http://www.computermusic.co.uk/, Computer Music Special}, número
 CMS06.
@@ -828,11 +841,11 @@ es básicamente la impresión en bruto, sin retocar.}
 trabajo.  Nunca he visto nada que se acerque al resultado que obtengo
 con LilyPond; confío plenamente en que mis necesidades de publicación
 musical serán satisfechas más allá de toda expectativa usando esta
-genial aplicación. (...) básicamente, la impresión de LilyPond sin
-retocar (...) se ve mejor que la mayoría de las publicaciones
+genial aplicación. (@dots{}) básicamente, la impresión de LilyPond sin
+retocar (@dots{}) se ve mejor que la mayoría de las publicaciones
 "profesionales" más recientes con que las he comparado (p.ej.,
 prácticamente cualquier partitura de Warner Bros, e incluso muchas de
-las más recientes de @q{las editoras antiguas}). (...)}
+las más recientes de @q{las editoras antiguas}). (@dots{})}
 
 @qq{¡¡¡Toma eso, Finale/Sibelius/Igor/lo que sea!!!}
 @divEnd
@@ -872,7 +885,7 @@ convencido de que ningún producto comercial se le acerca ni de lejos.}
 @divClass{testimonial-item}
 @subsubheading David Bobroff, trombón bajo, Orquesta Sinfónica de Islandia
 
-@qq{Creo que LilyPond es genial (...) cuanto más aprendo de LilyPond,
+@qq{Creo que LilyPond es genial (@dots{}) cuanto más aprendo de LilyPond,
 ¡más me gusta!}
 @divEnd
 
@@ -880,7 +893,7 @@ convencido de que ningún producto comercial se le acerca ni de lejos.}
 @divClass{testimonial-item}
 @subsubheading Vaylor Trucks, intérprete de guitarra eléctrica (sí, @uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12, pariente de...})
 
-@qq{Estoy súper-impresionado con LilyPond (...)}
+@qq{Estoy súper-impresionado con LilyPond (@dots{})}
 
 @qq{¡¡¡EL MEJOR PROGRAMA DE LA HISTORIA!!!}
 
@@ -895,7 +908,7 @@ dedicación!}
 @qq{Tenía una especie de relación pasión-odio con LilyPond. Pasión
 porque la primera partitura que vi ¡era tan increíble!  La descripción
 de LilyPond se fundamenta en la belleza. ¡Esto es demasiada modestia!
-(...) conforme LilyPond mejora continuamente y observo cómo se hacen
+(@dots{}) conforme LilyPond mejora continuamente y observo cómo se hacen
 las cosas con Scheme, tengo cada vez menos frustraciones.  De
 cualquier forma, lo que quiero decir es: gracias por darnos LilyPond,
 es realmente bueno.}
@@ -1097,6 +1110,22 @@ In particular, don't link to:
 
 @end ignore
 
+@divClass{column-center-top}
+@subheading Tunefl
+
+@sourceimage{logo-linux,,,}
+@sourceimage{logo-freebsd,,,}
+@sourceimage{logo-macosx,,,}
+@sourceimage{logo-windows,,,}
+
+@uref{http://www.tunefl.com}
+
+Con tunefl se pueden componer tipográficamente las partituras de
+forma directa en línea sin necesidad de instalar lilypond
+localmente.  Permite probar todas las capacidades del programa
+usando una interfaz web cómoda.
+
+@divEnd
 
 @divClass{column-center-top}
 @subheading LilyPondTool
@@ -1174,16 +1203,24 @@ el programa.
 @sourceimage{logo-macosx,,,}
 @sourceimage{logo-windows,,,}
 
+@uref{http://elysium.thsoft.hu}
+
+Elysium es un entorno integrado de desarrollo para Ecplipse, con
+una vista integrada frente a frente para la fuente y la partitura.
+Include realimentación visual rápida e intuitiva sin tener que
+alternar entre contextos, y trae muchas plantillas conducidas por
+asistentes.
+
 @uref{http://www.gnu.org/software/emacs/}
 
-Emacs es un editor de texto con funcionalidades avanzadas para muchos
-lenguajes de programación.  Emacs es un editor ampliamente expansible y
-se puede usar como un entorno integrado de desarrollo.  Existe un
-@q{modo de lilypond} que ofrece las definiciones del lenguaje para
-trabajar sobre archivos fuente de LilyPond.
-Asimismo, uno de nuestros desarrolladores ha escrito
-@uref{http://nicolas.sceaux.free.fr/ lilypond/lyqi.html,lyqi}, un modo
-principal de Emacs.
+Emacs es un editor de texto con funcionalidades avanzadas para
+muchos lenguajes de programación.  Emacs es un editor ampliamente
+expansible y se puede usar como un entorno integrado de
+desarrollo.  Existe un @q{modo de lilypond} que ofrece las
+definiciones del lenguaje para trabajar sobre archivos fuente de
+LilyPond.  Un desarrollador ha escrito
+@uref{https://github.com/nsceaux/lyqi,lyqi}, un modo principal de
+Emacs.
 
 @uref{http://www.vim.org}
 
@@ -1218,17 +1255,30 @@ del editor, utilizando las extensiones que están disponibles en:
 
 @itemize
 
+@item
+@uref{http://www.jezra.net/projects/bwwtolily,bwwtolily} trata de
+convertir un archivo @code{.bww} o @code{.bmw} a LilyPond.  Aunque
+no todos los ornamentos se convierten adecuadamente (lo que es
+cierto especialmente con piobaireachd), el programa imprime una
+lista de ellos.
+
 @item
 @uref{http://www.canorus.org,Canorus}, un editor de partituras,
-también puede exportar a LilyPond,
-pero aún es un programa en fase beta, se agradecen las pruebas por
-parte de los usuarios.
+también puede exportar a LilyPond, pero aún es un programa en fase
+beta, se agradecen las pruebas por parte de los usuarios.
 
 @item
-@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd},
-un editor de partitura basado en la biblioteca
-@uref{http://www.cairographics.org,Cairo},
-contempla de forma experimental la exportación a LilyPond.
+@uref{http://enc2ly.sourceforge.net/en/,Enc2ly} es un programa
+para GNU/Linux que convierte una partitura musical de
+@uref{http://www.gvox.com/,Encore} en una de LilyPond.
+
+@item
+@uref{https://github.com/hanwen/go-enc2ly,go-enc2ly} es una
+herramienta de Go que convierte archivos de
+@uref{http://www.gvox.com/,Encore} a LilyPond. Se creó utilizando
+la investigación y la ingeniería inversa por medio de la
+modificación puntual de archivos .enc y cargándolos con la versión
+de demostración 4.55.
 
 @item
 @uref{http://www.musescore.org,MuseScore}, un editor de partituras,
@@ -1236,16 +1286,21 @@ tiene exportación incompleta de LilyPond
 pero se está desarrollando de forma activa.
 
 @item
-@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,
-NW2LY} es un programa en C# que convierte una canción de
-@c @uref{http://www.noteworthysoftware.com/, NoteWorthy}
-NoteWorthy composer en LilyPond.
+@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd},
+un editor de partitura basado en la biblioteca
+@uref{http://www.cairographics.org,Cairo},
+contempla de forma experimental la exportación a LilyPond.
+
+@item
+@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,NW2LY}
+es un programa en C# que convierte una canción de NoteWorthy
+Composer en LilyPond.
 
 @item
-@uref{https://github.com/ciconia/ripple/blob/master/README.markdown,
-Ripple} is a program that helps create scores and parts, including a
-mode for mixing different musical works together in a single score or
-part.
+@uref{https://github.com/ciconia/ripple/blob/master/README.markdown,Ripple}
+es un programa que ayuda en la creación de partituras y
+particellas, y que incluye un modo para entremezclar distintas
+obras musicales en una sola partitura o particella.
 
 @item
 @uref{http://www.rosegardenmusic.com,Rosegarden}, un secuenciador MIDI
@@ -1275,13 +1330,15 @@ a construir fragmentos complejos de notación de LilyPond
 de una forma iterativa e incremental.
 
 @item
-@uref{http://common-lisp.net/project/fomus/,FOMUS}, una
-biblioteca de LISP para generar notación musical a partir
-de entornos de software musical.
+@uref{http://common-lisp.net/project/fomus/,FOMUS}, (FOrmat MUSic)
+es una herramienta de notación musical para compositores de música
+por ordenador.  Está escrito en el lenguaje Lisp, y se ha probado
+con varios intérpretes.  También está disponible una versión
+trasladada al lenguaje C++.
 
 @item
-@uref{http://strasheela.sourceforge.net,Strasheela}, un entorno
-construido sobre el lenguaje de restricciones
+@uref{http://strasheela.sourceforge.net/strasheela/doc/index.html,Strasheela},
+un entorno construido sobre el lenguaje de restricciones
 @uref{http://www.mozart-oz.org/, Mozart/Oz}.
 
 
@@ -1301,7 +1358,7 @@ para KDE 3.5 y como lilypond-KDE4 para KDE 4.1 solamente.
 
 @item
 @uref{http://noteedit.berlios.de,NoteEdit}, que importaba
-@uref{http://www.musicxml.com/xml.html,MusicXML}, se ha escindido en
+@uref{http://www.makemusic.com/musicxml,MusicXML}, se ha escindido en
 @uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}
 y @uref{http://canorus.org,Canorus}.
 
index e19fd0c687cb553011dffecf38ba976224cba2f6..b53ae2fe14a632975d332b1fe2787881e286afc5 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: c7175b7e8387655964d9c9a975e9789fe581043c
+    Translation of GIT committish: 673a3c376246f030f524d3eb3680b6d902c51ad1
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -148,6 +148,20 @@ Libre de GNU.
 
 @divEnd
 
+@divClass{column-center-bottom}
+@subheading Manual formats
+
+En general, los manuales de LilyPond manuals están en tres
+formatos: HTML seccionado, HTML monolítico y PDF.  El HTML
+seccionado es adecuado para la lectua en línea.  El HTML
+monolítico (algunos pueden ser muy grandes) contiene todo el
+manual en una sola página.  El PDF está disponible para su
+descarga y para usarlo fuera de línea.  Para obtener cada uno de
+los tres formatos, siga los enlaces con el texto @code{detalles
+de} y a continuación el nombre del manual.
+
+@divEnd
+
 @divEnd
 
 
@@ -200,8 +214,8 @@ información.
 @docLinks{Aprendizaje, learning,
   @rlearningnamed{Top,Aprendizaje},
   @manualStableLearningSplit-es,
-  @manualStableLearningBig-es, 1.5 MB,
-  @manualStableLearningPdf-es, 3 MB}
+  @manualStableLearningBig-es, 3 MB,
+  @manualStableLearningPdf-es, 5 MB}
 
 @divEnd
 
@@ -252,8 +266,8 @@ versión en formato PDF a causa de su mayor resolución.}
 @docLinks{Ensayo, essay,
   @ressaynamed{Top,Ensayo},
   @manualStableEssaySplit-es,
-  @manualStableEssayBig-es, 2 MB,
-  @manualStableEssayPdf-es, 2.5 MB}
+  @manualStableEssayBig-es, 1 MB,
+  @manualStableEssayPdf-es, 2 MB}
 
 @divEnd
 
@@ -280,8 +294,8 @@ presentan en el Glosario Musical.}
 @docLinks{Notación, notation,
   @rusernamed{Top,Notación},
   @manualStableNotationSplit-es,
-  @manualStableNotationBig-es, 7 MB,
-  @manualStableNotationPdf-es, 18 MB}
+  @manualStableNotationBig-es, 9 MB,
+  @manualStableNotationPdf-es, 35 MB}
 
 @divEnd
 
@@ -306,7 +320,7 @@ su lectura antes de afrontar proyectos grandes.
   @rprogramnamed{Top,Utilización},
   @manualStableUsageSplit-es,
   @manualStableUsageBig-es, 400 KB,
-  @manualStableUsagePdf-es, 600 KB}
+  @manualStableUsagePdf-es, 650 KB}
 
 @divEnd
 
@@ -341,8 +355,8 @@ también}.
 @docLinks{Fragmentos, snippets,
   @rlsrnamed{Top,Fragmentos},
   @manualStableSnippetsSplit,
-  @manualStableSnippetsBig, 2.5 MB,
-  @manualStableSnippetsPdf, 8 MB}
+  @manualStableSnippetsBig, 1.5 MB,
+  @manualStableSnippetsPdf, 12.5 MB}
 
 @divEnd
 
@@ -418,8 +432,8 @@ informar de los fallos, y desarrollo.
 @docLinksBare{Web, web,
   @ref{Arriba,Web},
   @manualDevelWebSplit-es,
-  @manualDevelWebBig-es, 1 MB,
-  @manualDevelWebPdf, 2 MB}
+  @manualDevelWebBig-es, 2.5 MB,
+  @manualDevelWebPdf, 3.5 MB}
 
 @divEnd
 
@@ -441,8 +455,8 @@ producidas en LilyPond a partir de la version estable anterior.
 @docLinks{Cambios, changes,
   @rchangesnamed{Top,Cambios},
   @manualStableChangesSplit-es,
-  @manualStableChangesBig-es, 6 KB,
-  @manualStableChangesPdf-es, 200 KB}
+  @manualStableChangesBig-es, 90 KB,
+  @manualStableChangesPdf-es, 80 KB}
 
 @divEnd
 
@@ -463,8 +477,8 @@ Este manual explica cómo escribir extensiones de LilyPond.
 @docLinks{Extender, extending,
   @rextendnamed{Top,Extender},
   @manualStableExtendingSplit-es,
-  @manualStableExtendingBig-es, 200 KB,
-  @manualStableExtendingPdf-es, 400 KB}
+  @manualStableExtendingBig-es, 300 KB,
+  @manualStableExtendingPdf-es, 500 KB}
 
 @divEnd
 
@@ -496,8 +510,8 @@ se refiere a la documentación generada.
 @docLinks{Funcionamiento interno, internals,
   @rinternalsnamed{Top,Funcionamiento interno},
   @manualStableInternalsSplit,
-  @manualStableInternalsBig, 2.5 MB,
-  @manualStableInternalsPdf, 2.8 MB}
+  @manualStableInternalsBig, 3 MB,
+  @manualStableInternalsPdf, 4 MB}
 
 @divEnd
 
@@ -545,11 +559,11 @@ sólo están disponibles en @uref{http://lilypond.org}
 @divClass{keep-bullets}
 @itemize
 
-@item @uref{http://lilypond.org/doc/v2.12/Documentation/,
-Documentación de LilyPond 2.12}
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals.es.html,
+Documentación de LilyPond 2.14}
 
-@item @uref{http://lilypond.org/doc/v2.11/Documentation/,
-Documentación de LilyPond 2.11}
+@item @uref{http://lilypond.org/doc/v2.12/Documentation/index.es.html,
+Documentación de LilyPond 2.12}
 
 @item @uref{http://lilypond.org/doc/v2.10/Documentation/,
 Documentación de LilyPond 2.10}
index 0828e77e3677bf22a42bf92c3f19580b14f3bf6e..4128758545a7647bb8dafa6bd4d636ebf66f3f76 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 2b55f813985dd14f8e61011d1c76ecf00e45691e
+    Translation of GIT committish: 7e3df6b879dcd850a4e7645b1afc151111c77436
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
 
 @c used for news about the upcoming release; see CG 10.2
 
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.95!  @emph{3 de noviembre de 2013}
+
+Nos llena de emoción anunciar el lanzamiento de LilyPond@tie{}2.17.95
+como lanzamiento beta de la próxima edicion estable@tie{}2.18.
+Los desarrolladores están aún atareados buscando
+soluciones para algunos problemas de última hora, pero se supone que esta
+edición tendrá las funcionalidades completas, la documentación precisa,
+y que no se habrán pasado por alto problemas de importancia.
+Para actualizar la sintaxis de los archivos de entrada
+a la última versión, consulte @rprogram{Actualizar ficheros con convert-ly}.
+Pruebe esta versión e infórmenos de cualquier porblema, véase
+@rweb{Informes de fallos}.
+
+@newsEnd
+
+@newsItem
+@subsubheading El blog de LilyPond.  @emph{2 de junio de 2013}
+
+Janek Warchoł ha creado un blog de LilyPond.  ¡Se encuentra alojado
+en @uref{http://lilypondblog.org/, lilypondblog.org}!
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.16.2!  @emph{4 de enero 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.16.2.  Este
+lanzamiento se realiza principalmente para corregir un problema
+con lilypond-book en Windows.  Recomendamos que actualicen a esta
+versión solamente aquellos que necesiten esta funcionalidad.
+
+@newsEnd
+
+@newsItem
+@subsubheading El Informe LilyPond, número 28. @emph{12 de noviembre de 2012}
+
+La @uref{http://news.lilynet.net/?The-LilyPond-Report-28, edición
+de octubre del @emph{Informe LilyPond}} se centra en el
+@uref{http://news.lilynet.net/?LilyPond-meeting-in-Waltrop,
+encuentro de usuarios y desarrolladores de LilyPond} en Waltrop
+(Alemania), el mes de agosto pasado.  Por supuesto que también hay
+noticias de LilyPond producidas a raíz del lanzamiento de las
+versiones 2.16.0 y 2.17.0 que se produjeron en dicho lugar.
+
+También incluyen dos informes financieros mensuales por parte de
+David Kastrup cuyo trabajo en LilyPond está
+@uref{http://news.lilynet.net/?The-LilyPond-Report-24#an_urgent_request_for_funding,
+exclusivamente pagado} por las donaciones de otros desarrolladores
+y usuarios (¡gracias!), y un informe acerca de las experiencias
+con @uref{http://scorio.com, un servicio web de tipografía
+musical} que utiliza LilyPond internamente.
+
+Acérquese y @uref{http://news.lilynet.net/?The-LilyPond-Report-28,
+lea ya el Informe LilyPond número 28}; ¡todos los comentarios y
+aportaciones serán calurosamente bien recibidos!
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.16.1!  @emph{9 de noviembre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.16.1. Contiene
+cierto número de actualizaciones sobre la anterior versión
+estable, y no debería causar problemas. Recomendamos a todos que
+actualicen a esta versión.
+@newsEnd
+
 @newsItem
 @subsubheading ¡Lanzado Lilypond 2.16.0!  @emph{24 de agosto de 2012}
 
@@ -81,54 +148,3 @@ Colaboradores de traducciones:
 Jean-Charles Malahieude, Till Paala, Yoshiki Sawada
 
 @newsEnd
-
-
-@newsItem
-@subsubheading ¡Lanzado LilyPond 2.15.95!  @emph{11 de agosto de 2012}
-
-Estamos encantados de anunciar el lanzamiento de LilyPond 2.15.95.
-Con esta edición, se congela el desarrollo sobre la versión 2.15 para
-la inminente versión estable 2.16 y queda abierta solamente a
-correcciones de fallos.
-
-Urgimos a todos los usuarios a que prueben esta versión para asegurar
-la máxima calidad de la próxima versión estable.  Si descubre
-cualquier problema, le rogamos nos envíe @ref{Informes de fallos}.
-
-Las funcionaliades nuevas desde la versión 2.14.2 están relacionadas
-en el manual de @qq{Cambios} en la sección de la página web sobre
-@ref{Desarrollo}.
-
-@newsEnd
-
-
-@newsItem
-@subsubheading ¡Lanzado LilyPond 2.15.42!  @emph{2 de agosto de 2012}
-
-Nos complace anunciar el lanzamiento de LilyPond 2.15.42.  Esta versión
-contiene el conjunto habitual de correcciones de fallos.
-
-Se recomienda enérgicamente a los usuarios normales que @strong{no}
-utilicen esta versión, sino la 2.14 estable en su lugar.  Tenga en
-cuenta que a causa de algunos bugs críticos, esta versión no es
-candidata al lanzamiento de la próxima versión estable.
-
-@newsEnd
-
-
-@newsItem
-@subsubheading El Informe LilyPond, número 27. @emph{2 de agosto 2012}
-
-Vuelve @emph{El informe LilyPond}, con una interesante incursión en
-las funcionalidades relacionadas con Scheme añadidas recientemente por
-el único desarrollador remunerado de nuestra comunidad, David Kastrup
-(gracias a sus @uref{http://lilypond.org/sponsoring.html, donaciones
-continuas}).  En esta edición también se encuentra una panorámica
-sobre ciertos proyectos poco conocidos colaterales a LilyPond, y
-algunas otras noticias más ligeras.
-
-Acérquese y @uref{http://news.lilynet.net/?The-LilyPond-Report-27,
-lea ya el Informe LilyPond número 27}; ¡todos los comentarios y
-aportaciones serán calurosamente bien recibidos!
-
-@newsEnd
index 6f20190e3a51bf064c007851629264d84379f6e1..4883a59c92b0ddcd98db934b80f8922effa20bee 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 @ignore
-    Translation of GIT committish: 488508ff926c03b14d030ffc255ae19fc3ce1f50
+    Translation of GIT committish: 7e3df6b879dcd850a4e7645b1afc151111c77436
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -33,6 +33,517 @@ NOTE:
   * don't duplicate entries from news-front.itexi
 @end ignore
 
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.29!  @emph{20 de octubre de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.29.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.28!  @emph{6 de octubre de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.28.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.27!  @emph{26 de septiembre de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.27.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.26!  @emph{8 de septiembre de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.26.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.25!  @emph{25 de agosto de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.25.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.24!  @emph{11 de agosto de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.24.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.23!  @emph{28 de julio de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.23.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.22!  @emph{14 de julio de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.22.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+Esta actualización soluciona el problema con la version de Windows
+que finalizaba de forma abrupta con un problema en el posicionamiento del texto.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.21!  @emph{30 de junio de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.21.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.20!  @emph{9 de junio de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.20.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.19!  @emph{26 de mayo de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.19.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.18!  @emph{11 de mayo de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.18.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.17!  @emph{27 de abril de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.17.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.16!  @emph{13 de abril de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.16.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.15!  @emph{30 de marzo de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.15.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.14!  @emph{10 de marzo de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.14.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.13!  @emph{23 de febrero de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.13.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.12!  @emph{8 de febrero de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.12.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.11!  @emph{26 de enero de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.11.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.10!  @emph{12 de enero de 2013}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.10.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.9!  @emph{15 de diciembre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.9.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de las funcionalidades, y contiene trabajos en
+desarrollo.  Tendrá acceso a las últimas posibilidades, pero
+algunas podrían estar incompletas, y podría encontrar fallos y
+finalizaciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.8!  @emph{1 de diciembre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.8.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de funcionalidades, y puede contener trabajos en curso.
+Podrá acceder a las funcionalidades más recientes, pero algunas
+podrían estar incompletas, y podrían aparecer fallos e
+interrupciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.7!  @emph{17 de noviembre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.7.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de funcionalidades, y puede contener trabajos en curso.
+Podrá acceder a las funcionalidades más recientes, pero algunas
+podrían estar incompletas, y podrían aparecer fallos e
+interrupciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.16.1!  @emph{9 de noviembre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.16.1. Esta
+versión contiene cierto número de actualizaciones sobre la
+anterior versión estable, y no debería causar ningún
+problema. Recomendamos a todos que actualicen a esta versión.
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.6!  @emph{3 de noviembre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.6.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de funcionalidades, y puede contener trabajos en curso.
+Podrá acceder a las funcionalidades más recientes, pero algunas
+podrían estar incompletas, y podrían aparecer fallos e
+interrupciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.5!  @emph{20 de octubre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.5.  Esta
+versión contiene el conjunto habitual de correcciones de fallos y
+ampliación de funcionalidades, y puede contener trabajos en curso.
+Podrá acceder a las funcionalidades más recientes, pero algunas
+podrían estar incompletas, y podrían aparecer fallos e
+interrupciones abruptas.  Si necesita una versión estable de
+LilyPond, nuestro consejo es que utilice la versión 2.16.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.4!  @emph{6 de octubre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.4.  Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+Se recomienda enérgicamente a los usuarios normales que @strong{no}
+utilicen esta versión, sino la 2.16 estable en su lugar.
+
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.3!  @emph{23 de septiembre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.3.  Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+Se recomienda enérgicamente a los usuarios normales que
+@strong{no} utilicen esta versión, sino la 2.16 estable en su
+lugar.
+
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.2!  @emph{10 de septiembre de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.2.  Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+Se recomienda enérgicamente a los usuarios normales que
+@strong{no} utilicen esta versión, sino la 2.16 estable en su
+lugar.
+
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.1!  @emph{28 de agosto de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.1.  Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+Se recomienda enérgicamente a los usuarios normales que
+@strong{no} utilicen esta versión, sino la 2.16 estable en su
+lugar.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.17.0!  @emph{26 de agosto de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.17.0.  Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+Se recomienda enérgicamente a los usuarios normales que
+@strong{no} utilicen esta versión, sino la 2.16 estable en su
+lugar.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado Lilypond 2.16.0!  @emph{24 de agosto de 2012}
+
+Nos llena de orgullo anunciar el lanzamiento de GNU LilyPond 2.16.0.
+LilyPond es un programa de tipografía musical para editar partituras,
+consagrado a la producción de música impresa de la mayor calidad
+posible.  Lleva al ordenador la estética de la música grabada de la
+forma tradicional.
+
+Durante el último año y a partir de la principal versión estable
+anterior, se han realizado multitud de mejoras.  Algunas de las
+mejoras fundamentales son:
+
+@itemize
+@item
+Soporte para la notación cuadrada del canto kievano
+@item
+Se han mejorado espectacularmente las interfaces de programación y del usuario
+@item
+Las funciones musicales son ahora mucho más versátiles
+@end itemize
+
+Hay una lista completa de todas las funcionalidades nuevas en
+
+@example
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/}
+@end example
+
+¡Que tenga una feliz tipografía musical!  LilyPond 2.16 ha sido hecho para usted por...
+
+El equipo principal de desarrollo:
+
+Bertrand Bordage, Trevor Daniels, Colin Hall, Phil Holmes, Ian Hulin,
+Reinhold Kainhofer, David Kastrup, Jonathan Kulp, Werner Lemberg,
+John Mandereau, Patrick McCarty, Joe Neeman, Han-Wen Nienhuys,
+Jan Nieuwenhuizen, Graham Percival, Mark Polesky, Neil Puttock,
+Mike Solomon, Carl Sorensen, Francisco Vila, Valentin Villenave,
+Jan Warchoł
+
+Colaboradores de programación:
+
+Aleksandr Andreev, Sven Axelsson, Peter Chubb, Karin Hoethker,
+Marc Hohl, David Nalesnik, Justin Ohmie, Benkő Pál, Julien Rioux, Patrick Schmidt,
+Adam Spiers, Heikki Taurainen, Piers Titus van der Torren,
+Jan-Peter Voigt, Janek Warchol
+
+Colaboradores de documentación:
+
+James Lowe, Pavel Roskin, Alberto Simoes, Stefan Weil
+
+Escuadrón de caza de fallos:
+
+Colin Campbell, Eluze, Phil Holmes, Marek Klein, Ralph Palmer,
+James Lowe
+
+Apoyo:
+
+Colin Campbell, Christian Hitz, Phil Holmes
+
+Colaboradores de traducciones:
+
+Jean-Charles Malahieude, Till Paala, Yoshiki Sawada
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.15.95!  @emph{11 de agosto de 2012}
+
+Estamos encantados de anunciar el lanzamiento de LilyPond 2.15.95.
+Con esta edición, se congela el desarrollo sobre la versión 2.15 para
+la inminente versión estable 2.16 y queda abierta solamente a
+correcciones de fallos.
+
+Urgimos a todos los usuarios a que prueben esta versión para asegurar
+la máxima calidad de la próxima versión estable.  Si descubre
+cualquier problema, le rogamos nos envíe @ref{Informes de fallos}.
+
+Las funcionaliades nuevas desde la versión 2.14.2 están relacionadas
+en el manual de @qq{Cambios} en la sección de la página web sobre
+@ref{Desarrollo}.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.15.42!  @emph{2 de agosto de 2012}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.15.42.  Esta versión
+contiene el conjunto habitual de correcciones de fallos.
+
+Se recomienda enérgicamente a los usuarios normales que @strong{no}
+utilicen esta versión, sino la 2.14 estable en su lugar.  Tenga en
+cuenta que a causa de algunos bugs críticos, esta versión no es
+candidata al lanzamiento de la próxima versión estable.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading El Informe LilyPond, número 27. @emph{2 de agosto 2012}
+
+Vuelve @emph{El informe LilyPond}, con una interesante incursión en
+las funcionalidades relacionadas con Scheme añadidas recientemente por
+el único desarrollador remunerado de nuestra comunidad, David Kastrup
+(gracias a sus @uref{http://lilypond.org/sponsoring.html, donaciones
+continuas}).  En esta edición también se encuentra una panorámica
+sobre ciertos proyectos poco conocidos colaterales a LilyPond, y
+algunas otras noticias más ligeras.
+
+Acérquese y @uref{http://news.lilynet.net/?The-LilyPond-Report-27,
+lea ya el Informe LilyPond número 27}; ¡todos los comentarios y
+aportaciones serán calurosamente bien recibidos!
+
+@newsEnd
+
 
 @newsItem
 @subsubheading Retirada de la versión candidata al lanzamiento @emph{11 de julio de 2012}
@@ -133,8 +644,8 @@ usuarios a que hagan experimentos con esta versión.  Las
 funcionalidades nuevas desde 2.14.2 están relacionadas en el manual de
 @qq{Cambios} dentro de la sección @ref{Desarrollo} de estas páginas.
 
-@strong{Update:} Due to a few Critical bugs, another release
-candidate will be required.
+@strong{Actualización:} A causa de algunos fallos críticos, será
+necesaria otra versión candidata al lanzamiento.
 
 @newsEnd
 
@@ -1721,7 +2232,7 @@ colaborador.
 @newsEnd
 
 @newsItem
-@subsubheading Lanzado LilyPond 2.13.11!  @emph{16 de enero de 2010}
+@subsubheading ¡Lanzado LilyPond 2.13.11!  @emph{16 de enero de 2010}
 
 Nos complace anunciar el lanzamiento de LilyPond 2.13.11.  Esta
 edición está orientada solamente a los dearrolladores, y trae algunas
@@ -1730,7 +2241,7 @@ arregla cuatro regresiones críticas contra versiones anteriores.
 @newsEnd
 
 @newsItem
-@subsubheading LilyPond 2.13.10 released!  @emph{December 31, 2009}
+@subsubheading ¡Lanzado LilyPond 2.13.10!  @emph{31 de diciembre de 2009}
 
 We are happy to announce the release of LilyPond 2.13.10.  This
 release is intended for developers only, and brings a number of
@@ -1741,7 +2252,7 @@ and English names for feta filenames.
 
 
 @newsItem
-@subsubheading LilyPond 2.12.3 released!  @emph{December 20, 2009}
+@subsubheading ¡Lanzado LilyPond 2.12.3!  @emph{20 de diciembre de 2009}
 
 We are happy to announce the release of LilyPond 2.12.3.  This
 version contains the long-awaited fix for our GUI on MacOS X 10.5
diff --git a/Documentation/essay/GNUmakefile b/Documentation/essay/GNUmakefile
deleted file mode 100644 (file)
index 068109c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-depth = ../..
-
-STEPMAKE_TEMPLATES=tex documentation
-LOCALSTEPMAKE_TEMPLATES = lilypond ly
-
-OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES))
-EXTRA_DIST_FILES= $(BIB_FILES) $(call src-wildcard,*.bst) 
-BIB_FILES= $(call src-wildcard,*.bib)
-
-include $(depth)/make/stepmake.make
-
-# we no longer create bibliography files in this subdir,
-# since it needs to be done in the main Documentation/ dir.
-# all the below can _probably_ be removed, but I haven't
-# examined it in detail.
-# I think this is just going to wait until we switch to waf.  -gp
-dvi: $(DVI_FILES) $(OUT_BIB_FILES)
-
-ps: $(PS_FILES)
-
-default:
-
-GENHTMLS = engraving colorado computer-notation
-OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html))
-
-ifeq ($(out),www)
-#   temporary build fix; we don't know yet what's happening
-#   to the literature index.  -gp
-# local-WWW-2: $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html) lit-index.html)
-endif
-
-$(outdir)/%.bib: %.bib
-       ln -f $< $@
-
-$(outdir)/%.html: %.bib
-       BSTINPUTS=$(src-dir) $(buildscript-dir)/bib2html -o $@ $<
-
-local-clean:
-       rm -f fonts.aux fonts.log feta*.tfm feta*.*pk
-
index 23b0658066621c0501e64c704a23ae816924c5f4..b4d7e1984e14e2fc340a8a0423c2207135c8a7b1 100644 (file)
@@ -229,7 +229,7 @@ for Adequately Representing Score-level Music},
 }
 
 @Article{blostein91,
-  note = {This paper provides a overview of the algorithm used in LIME
+  note = {This paper provides an overview of the algorithm used in LIME
   for spacing individual lines. HWN},
   year = {1991},
   title = {Justification of Printed Music},
index 9dd71564d9388a55548d7b0f8ab6737469118c87..0192b98623c53580097eba8f2856c698185c16c4 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Music engraving
 @chapter Music engraving
@@ -317,9 +317,9 @@ music = {
   \layout {
     \context {
       \Staff
-      \override NoteSpacing #'stem-spacing-correction = #0.0
-      \override NoteSpacing #'same-direction-correction = #0.0
-      \override StaffSpacing #'stem-spacing-correction = #0.0
+      \override NoteSpacing.stem-spacing-correction = #0.0
+      \override NoteSpacing.same-direction-correction = #0.0
+      \override StaffSpacing.stem-spacing-correction = #0.0
     }
   }
 }
@@ -345,7 +345,7 @@ music = {
   \layout {
     \context {
       \Staff
-      \override NoteSpacing #'stem-spacing-correction = #0.6
+      \override NoteSpacing.stem-spacing-correction = #0.6
     }
   }
 }
@@ -465,8 +465,8 @@ global = {
   <<
     \new Staff \with {
       fontSize = #-4
-      \override StaffSymbol #'staff-space = #(magstep -4)
-      \override StaffSymbol #'thickness = #(magstep -3)
+      \override StaffSymbol.staff-space = #(magstep -4)
+      \override StaffSymbol.thickness = #(magstep -3)
     }
     \relative c' {
       \global
@@ -488,7 +488,7 @@ global = {
         \clef "bass"
         <<
         {
-          \once \override DynamicText #'X-offset = #-3
+          \once \override DynamicText.X-offset = #-3
           <ees g c>2.~->^\f
           <ees g c>4.~ <ees g c>8
         } \\ {
@@ -563,9 +563,9 @@ of the three configurations should we choose for the following slur?
 @lilypond
 \relative c {
   \clef bass
-  \once \override Slur #'positions = #'(1.5 . 1)
+  \once \override Slur.positions = #'(1.5 . 1)
   e8[( f] g[ a b d,)] r4
-  \once \override Slur #'positions = #'(2 . 3)
+  \once \override Slur.positions = #'(2 . 3)
   e8[( f] g[ a b d,)] r4
   e8[( f] g[ a b d,)] r4
 }
@@ -603,7 +603,7 @@ has given each one a score in @q{ugly points}.  The first example gets
 @lilypond
 \relative c {
   \clef bass
-  \once \override Slur #'positions = #'(1.5 . 1)
+  \once \override Slur.positions = #'(1.5 . 1)
   e8[(_"15.39" f] g[ a b d,)] r4
 }
 @end lilypond
@@ -617,7 +617,7 @@ descends for a total of 13.08 ugly points:
 @lilypond
 \relative c {
   \clef bass
-  \once \override Slur #'positions = #'(2 . 3)
+  \once \override Slur.positions = #'(2 . 3)
   e8[(_"13.08" f] g[ a b d,)] r4
 }
 @end lilypond
@@ -830,7 +830,7 @@ partIV = \relative c {
     }
     \context {
       \PianoStaff
-      \override StaffGrouper #'staff-staff-spacing #'padding = #1
+      \override StaffGrouper.staff-staff-spacing.padding = #1
     }
   }
 }
@@ -849,7 +849,7 @@ which makes the music extremely difficult to read when the upper and
 lower voices exchange positions temporarily:
 
 @lilypond
-collide = \once \override NoteColumn #'force-hshift = #0
+collide = \once \override NoteColumn.force-hshift = #0
 
 \score {
   <<
@@ -1087,20 +1087,20 @@ consider a more complicated musical example:
     \new Voice = "I" \relative c''' {
       \time 3/4
       \voiceOne
-      \times 6/7 { g8 g g g g g g }
+      \tuplet 7/6 { g8 g g g g g g }
       \oneVoice
       r4 <b,, fis' g bes> r4\fermata
     }
     \new Voice = "II" \relative c' {
       \voiceTwo
       c4
-      \times 4/5 {
+      \tuplet 5/4 {
         <c ees>8 f g
         \change Staff = "LH" \oneVoice
         \stemUp g,( c}
       r4
-      \override Stem #'cross-staff = ##t
-      \override Stem #'length = #12
+      \override Stem.cross-staff = ##t
+      \override Stem.length = #12
       <fis, b>) r\fermata
     }
   >>
@@ -1168,6 +1168,7 @@ heads, the @code{Note_heads_engraver}.
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1200,6 +1201,7 @@ Then a @code{Staff_symbol_engraver} adds the staff,
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1231,6 +1233,7 @@ the @code{Clef_engraver} defines a reference point for the staff,
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1259,6 +1262,7 @@ and the @code{Stem_engraver} adds stems.
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1368,14 +1372,14 @@ chord has all directions up (right).
 \score {
   \relative c' {
     \stemDown <e g b>4_>-\arpeggio
-    \override Arpeggio #'direction = #RIGHT
+    \override Arpeggio.direction = #RIGHT
     \stemUp <e g b>4^>-\arpeggio
   }
   \layout {
     \context {
       \Score
-      \override SpacingSpanner #'spacing-increment = #3
-      \override TimeSignature #'transparent = ##t
+      \override SpacingSpanner.spacing-increment = #3
+      \hide TimeSignature
     }
   }
 }
@@ -1401,12 +1405,12 @@ fragment = {
 <<
    \new Staff \fragment
    \new Staff \with {
-      \override Beam #'beam-thickness = #0.3
-      \override Stem #'thickness = #0.5
-      \override Bar #'thickness = #3.6
-      \override Tie #'thickness = #2.2
-      \override StaffSymbol #'thickness = #3.0
-      \override Tie #'extra-offset = #'(0 .  0.3)
+      \override Beam.beam-thickness = #0.3
+      \override Stem.thickness = #0.5
+      \override Bar.thickness = #3.6
+      \override Tie.thickness = #2.2
+      \override StaffSymbol.thickness = #3.0
+      \override Tie.extra-offset = #'(0 .  0.3)
       }
       \fragment
 >>
@@ -1441,12 +1445,12 @@ note head symbol is changed during the music fragment.
   \set autoBeaming = ##f
   \time 2/4
   <d f g>4
-  \once \override NoteHead #'stencil = #note-head::brew-ez-stencil
-  \once \override NoteHead #'font-size = #-7
-  \once \override NoteHead #'font-family = #'sans
-  \once \override NoteHead #'font-series = #'bold
+  \once \override NoteHead.stencil = #note-head::brew-ez-stencil
+  \once \override NoteHead.font-size = #-7
+  \once \override NoteHead.font-family = #'sans
+  \once \override NoteHead.font-series = #'bold
   <d f g>4
-  \once \override NoteHead #'style = #'cross
+  \once \override NoteHead.style = #'cross
   <d f g>4
   \applyOutput #'Voice #mc-squared
   <d f g>4
@@ -1508,7 +1512,7 @@ following example combines some more exotic constructs.
       \time 4/8
       \key c \minor
       << {
-        \revert Stem #'direction
+        \revert Stem.direction
         \change Staff = down
         \set subdivideBeams = ##t
         g16.[
@@ -1525,7 +1529,7 @@ following example combines some more exotic constructs.
         \set followVoice = ##t
         c'''32([ b''16 a''16 gis''16 g''32)]
       } \\ {
-        s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d'']
+        s4 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
       } \\ {
         s4 \autoBeamOff d''8.. f''32
       } \\ {
@@ -1537,16 +1541,16 @@ following example combines some more exotic constructs.
       \clef bass
       \key c \minor
       \set subdivideBeams = ##f
-      \override Stem  #'french-beaming = ##t
-      \override Beam  #'beam-thickness = #0.3
-      \override Stem  #'thickness = #4.0
+      \override Stem.french-beaming = ##t
+      \override Beam.beam-thickness = #0.3
+      \override Stem.thickness = #4.0
       g'16[ b16 fis16 g16]
       << \makeClusters {
         as16 <as b>
         <g b>
         <g cis>
       } \\ {
-        \override Staff.Arpeggio  #'arpeggio-direction =#down
+        \override Staff.Arpeggio.arpeggio-direction =#down
         <cis, e, gis, b, cis>4\arpeggio
       }
     >> }
@@ -1724,7 +1728,7 @@ partIV = \relative c {
     }
     \context {
       \PianoStaff
-      \override StaffGrouper #'staff-staff-spacing #'padding = #1
+      \override StaffGrouper.staff-staff-spacing.padding = #1
     }
   }
 }
index f419af4e658594a75b9bea75dda27f7f16aabbb9..ecbddcbe35b7565c04d25d10450b92367b0ba803 100644 (file)
@@ -91,7 +91,7 @@ reference work for music notation issues as one is likely to get.},
 @Book{wanske88,
   annote = {I. A very thorough overview of engraving practices of various
 craftsmen. It includes detailed specs of characters, dimensions
-etc. II. a thorough overview of a anonymous (by now antiquated)
+etc. II. a thorough overview of an anonymous (by now antiquated)
 automated system. EDV Means e(lektronischen) D(aten)v(erarbeitung),
 electronic data processing HWN.},
   year = {1988},
diff --git a/Documentation/extending/GNUmakefile b/Documentation/extending/GNUmakefile
deleted file mode 100644 (file)
index cab24d6..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
-
-
index a6109a57740cc52b08dc6839926d66e7fb8499f3..82ef216ad844ee74fb85555703c527c9424992d9 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @node Interfaces for programmers
 @chapter Interfaces for programmers
@@ -18,7 +18,7 @@ not familiar with Scheme, you may wish to read our
 @ref{Scheme tutorial}.
 
 @menu
-* Lilypond code blocks::
+* LilyPond code blocks::
 * Scheme functions::
 * Music functions::
 * Event functions::
@@ -29,29 +29,65 @@ not familiar with Scheme, you may wish to read our
 * Difficult tweaks::
 @end menu
 
-@node Lilypond code blocks
-@section Lilypond code blocks
+@node LilyPond code blocks
+@section LilyPond code blocks
+
+@cindex LilyPond code blocks
+@cindex code blocks, LilyPond
+@funindex #@{ @dots{} #@}
+@funindex $
+@funindex #
+
+Creating music expressions in Scheme can be tedious, as they are
+heavily nested and the resulting Scheme code is large. For some
+simple tasks this can be avoided by using LilyPond code blocks,
+which enable common LilyPond syntax to be used within Scheme.
+
+LilyPond code blocks look like
 
-Lilypond code blocks look like
 @example
-  #@{ @var{Lilypond code} #@}
+  #@{ @var{LilyPond code} #@}
 @end example
-They can be used anywhere where you can write Scheme code: the Scheme
-reader actually is changed for accommodating LilyPond code blocks and
-can deal with embedded Scheme expressions starting with @code{$}
-and@w{ }@code{#}.
-
-It extracts the Lilypond code block and generates a call to the
-LilyPond @code{parser} which is executed at runtime to interpret the
-LilyPond code block.  Any embedded Scheme expression is executed in
-the lexical environment of the Lilypond code block, so you have access
-to local variables and function parameters at the point the Lilypond
-code block is written.
-
-A LilyPond code block may contain anything that you can use on the right
-side of an assignment.  In addition, an empty LilyPond block corresponds
-to a void music expression, and a LilyPond block containing multiple
-music events gets turned into a sequential music expression.
+
+Here is a trivial example:
+
+@lilypond[verbatim,quote]
+ritpp = #(define-event-function (parser location) ()
+  #{ ^"rit." \pp #}
+)
+
+{ c'4 e'4\ritpp g'2 }
+@end lilypond
+
+LilyPond code blocks can be used anywhere where you can write Scheme
+code.  The Scheme reader actually is changed for accommodating
+LilyPond code blocks and can deal with embedded Scheme expressions
+starting with @code{$} and@w{ }@code{#}.
+
+@cindex parser (function argument)
+@cindex location
+
+The reader extracts the LilyPond code block and generates a runtime
+call to the LilyPond @code{parser} to interpret the LilyPond code.
+Scheme expressions embedded in the LilyPond code are evaluated in the
+lexical environment of the LilyPond code block, so all local variables
+and function parameters available at the point the LilyPond code block
+is written may be accessed.  Variables defined in other Scheme modules,
+like the modules containing @code{\header} and @code{\layout} blocks,
+are not accessible as Scheme variables, i.e. prefixed
+with@tie{}@code{#}, but they are accessible as LilyPond variables, i.e.
+prefixed with@tie{}@code{\}.
+
+If @code{location} (see @ref{Scheme functions}) refers to a valid
+input location (which it usually does inside of music/@/Scheme
+functions), all music generated inside the code block has its
+@samp{origin} set to @code{location}.
+
+A LilyPond code block may contain anything that you can use on the
+right side of an assignment.  In addition, an empty LilyPond block
+corresponds to a void music expression, and a LilyPond block
+containing multiple music events gets turned into a sequential music
+expression.
 
 @node Scheme functions
 @section Scheme functions
@@ -92,13 +128,17 @@ where
 @tab needs to be literally @code{parser} in order to give LilyPond code
 blocks (@code{#@{}@dots{}@code{#@}}) access to the parser.
 
+@item @code{location}
+@tab needs to be literally @code{location} in order to provide access
+to the input location object, which is used to provide error messages
+with file names and line numbers.
+
 @item @code{@var{argN}}
 @tab @var{n}th argument
 
 @item @code{@var{typeN?}}
 @tab a Scheme @emph{type predicate} for which @code{@var{argN}}
-must return @code{#t}.  Some of these predicates are specially
-recognized by the parser, see below.  There is also a special form
+must return @code{#t}.  There is also a special form
 @code{(@emph{predicate?} @emph{default})} for specifying optional
 arguments.  If the actual argument is missing when the function is being
 called, the default value is substituted instead.  Default values are
@@ -115,48 +155,51 @@ are copied while setting @code{origin} to the @code{location} parameter.
 @tab A sequence of Scheme forms evaluated in order, the last one being
 used as the return value of the scheme function.  It may contain
 LilyPond code blocks enclosed in hashed braces
-(@tie{}@w{@code{#@{@dots{}#@}}}@tie{}), like described in @ref{Lilypond
-code blocks}.  Within LilyPond code blocks, use @code{#} to reference
-function arguments (eg., @samp{#arg1}) or to start an inline Scheme
-expression containing function arguments (eg., @w{@samp{#(cons arg1
-arg2)}}).  Where normal Scheme expressions using @code{#} don't do the
-trick, you might need to revert to immediate Scheme expressions using
-@code{$}, for example as @samp{$music}.
+(@tie{}@w{@code{#@{@dots{}#@}}}@tie{}), like described in
+@ref{LilyPond code blocks}.  Within LilyPond code blocks, use @code{#}
+to reference function arguments (eg., @samp{#arg1}) or to start an
+inline Scheme expression containing function arguments (eg.,
+@w{@samp{#(cons arg1 arg2)}}).  Where normal Scheme expressions using
+@code{#} don't do the trick, you might need to revert to immediate
+Scheme expressions using @code{$}, for example as @samp{$music}.
 
 If your function returns a music expression, it is given a useful value
 of @code{origin}.
 @end multitable
 
 @noindent
-Some type predicates are specially handled by the parser since it
-can't recognize the arguments reliably otherwise.  Currently these are
-@code{ly:pitch?} and @code{ly:duration?}.
-
-Suitability of arguments for all other predicates is determined by
-actually calling the predicate after Lilypond has already converted them
+Suitability of arguments for the predicates is determined by
+actually calling the predicate after LilyPond has already converted them
 into a Scheme expression.  As a consequence, the argument can be
 specified in Scheme syntax if desired (introduced with @code{#} or as
-the result of calling a scheme function), but Lilypond will also convert
-a number of Lilypond constructs into Scheme before actually checking the
+the result of calling a scheme function), but LilyPond will also convert
+a number of LilyPond constructs into Scheme before actually checking the
 predicate on them.  Currently, those include music, postevents, simple
 strings (with or without quotes), numbers, full markups and markup
 lists, score, book, bookpart, context definition and output definition
 blocks.
 
 For some kinds of expression (like most music not enclosed in braces)
-Lilypond needs to look further than the expression itself in order to
+LilyPond needs to look further than the expression itself in order to
 determine its end.  If such an expression were considered for an
-optional argument by evaluating its predicate, Lilypond would not be
-able to ``backup'' when it decides the expression does not fit the
+optional argument by evaluating its predicate, LilyPond would not be
+able to @q{backup} when it decides the expression does not fit the
 parameter.  So some forms of music might need to be enclosed in braces
-to make them acceptable to Lilypond.  There are also some other
-ambiguities that Lilypond sorts out by checking with predicate
+to make them acceptable in some circumstances.  Some other
+ambiguities LilyPond sorts out by checking with predicate
 functions: is @samp{-3} a fingering postevent or a negative number?  Is
 @code{"a" 4} in lyric mode a string followed by a number, or a lyric
-event of duration @code{4}?  Lilypond decides by asking the predicates.
-That means that you should avoid permissive predicates like
-@code{scheme?} if you have a particular use in mind instead of a general
-purpose function.
+event of duration @code{4}?  LilyPond tries the argument
+predicate on successive interpretations until success, with an
+order designed to minimize inconsistent interpretations and
+lookahead.
+
+For example, a predicate accepting both music expressions and
+pitches will consider @code{c''} to be a pitch rather than a music
+expression.  Immediately following durations or postevents might
+not work with that interpretation.  So it's best to avoid overly
+permissive predicates like @code{scheme?} when the application
+rather calls for more specific argument types.
 
 For a list of available predefined type predicates, see
 @ruser{Predefined type predicates}.
@@ -178,7 +221,7 @@ Scheme functions can be called pretty much anywhere where a Scheme
 expression starting with @code{#} can be written.  You call a scheme
 function by writing its name preceded by @code{\}, followed by its
 arguments.  Once an optional argument predicate does not match an
-argument, Lilypond skips this and all following optional arguments,
+argument, LilyPond skips this and all following optional arguments,
 replacing them with their specified default, and @q{backs up} the
 argument that did not match to the place of the next mandatory argument.
 Since the backed up argument needs to go somewhere, optional arguments
@@ -214,12 +257,12 @@ functions for either concept and just discard the returned value
 result).  This is clever but error-prone: most C compilers nowadays
 offer warnings for various non-``void'' expressions being discarded.
 For many functions executing an action, the Scheme standards declare the
-return value to be unspecified.  Lilypond's Scheme interpreter Guile has
+return value to be unspecified.  LilyPond's Scheme interpreter Guile has
 a unique value @code{*unspecified*} that it usually (such when using
 @code{set!} directly on a variable) but unfortunately not consistently
 returns in such cases.
 
-Defining a Lilypond function with @code{define-void-function} makes
+Defining a LilyPond function with @code{define-void-function} makes
 sure that this special value (the only value satisfying the predicate
 @code{void?}) will be returned.
 
@@ -229,7 +272,7 @@ noPointAndClick =
      (parser location)
      ()
    (ly:set-option 'point-and-click #f))
-...
+@dots{}
 \noPointAndClick   % disable point and click
 @end example
 
@@ -241,7 +284,7 @@ prefixing it with @code{\void}:
 \void #(hashq-set! some-table some-key some-value)
 @end example
 
-That way, you can be sure that Lilypond will not assign meaning to the
+That way, you can be sure that LilyPond will not assign meaning to the
 returned value regardless of where it encounters it.  This will also
 work for music functions such as @code{\displayMusic}.
 
@@ -282,7 +325,7 @@ function =
 
 @noindent
 quite in analogy to @ref{Scheme function definitions}.  More often than
-not, @var{body} will be a @ref{Lilypond code blocks, Lilypond code block}.
+not, @var{body} will be a @ref{LilyPond code blocks, LilyPond code block}.
 
 For a list of available type predicates, see
 @ruser{Predefined type predicates}.
@@ -311,12 +354,7 @@ At top level in a music expression.  No restriction apply here.
 
 @item
 As a post-event, explicitly started with a direction indicator (one of
-@code{-}, @code{^}, @w{and @code{_}}).  Note that returning a post-event
-will be acceptable for music functions called as normal music, leading
-to a result roughly equivalent to
-@example
-s 1*0-\fun
-@end example
+@code{-}, @code{^}, @w{and @code{_}}).
 
 In this case, you can't use an @emph{open} music expression as the last
 argument, one that would end with a music expression able to accept
@@ -359,7 +397,7 @@ manualBeam =
      (parser location beg-end)
      (pair?)
    #@{
-     \once \override Beam #'positions = #beg-end
+     \once \override Beam.positions = #beg-end
    #@})
 
 \relative c' @{
@@ -378,7 +416,7 @@ manualBeam =
      (parser location beg end)
      (number? number?)
    #{
-     \once \override Beam #'positions = #(cons beg end)
+     \once \override Beam.positions = #(cons beg end)
    #})
 
 \relative c' {
@@ -386,6 +424,55 @@ manualBeam =
 }
 @end lilypond
 
+@funindex \temporary
+@cindex temporary overrides
+@cindex overrides, temporary
+@cindex properties, popping previous value
+
+Properties are maintained conceptually using one stack per property
+per grob per context.  Music functions may need to override one or
+several properties for the duration of the function, restoring them
+to their previous value before exiting.  However, normal overrides
+pop and discard the top of the current property stack before
+pushing to it, so the previous value of the property is lost when it
+is overridden.  When the previous value must be preserved, prefix the
+@code{\override} command with @code{\temporary}, like this:
+
+@example
+\temporary \override @dots{}
+@end example
+
+The use of @code{\temporary} causes the (usually set) @code{pop-first}
+property in the override to be cleared, so the previous value is not
+popped off the property stack before pushing the new value onto it.
+When a subsequent @code{\revert} pops off the temporarily overriden
+value, the previous value will re-emerge.
+
+In other words, calling @code{\temporary \override} and @code{\revert}
+in succession on the same property will have a net effect of zero.
+Similarly, pairing @code{\temporary} and @code{\undo} on the same
+music containing overrides will have a net effect of zero.
+
+Here is an example of a music function which makes use of this.
+The use of @code{\temporary} ensures the values of the
+@code{cross-staff} and @code{style} properties are restored on exit
+to whatever values they had when the @code{crossStaff} function was
+called.  Without @code{\temporary} the default values would have been
+set on exit.
+
+@example
+crossStaff =
+#(define-music-function (parser location notes) (ly:music?)
+  (_i "Create cross-staff stems")
+  #@{
+  \temporary \override Stem.cross-staff = #cross-staff-connect
+  \temporary \override Flag.style = #'no-flag
+  #notes
+  \revert Stem.cross-staff
+  \revert Flag.style
+#@})
+@end example
+
 
 @node Mathematics in functions
 @subsection Mathematics in functions
@@ -399,14 +486,14 @@ AltOn =
      (parser location mag)
      (number?)
    #{
-     \override Stem #'length = #(* 7.0 mag)
-     \override NoteHead #'font-size =
+     \override Stem.length = #(* 7.0 mag)
+     \override NoteHead.font-size =
        #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
    #})
 
 AltOff = {
-  \revert Stem #'length
-  \revert NoteHead #'font-size
+  \revert Stem.length
+  \revert NoteHead.font-size
 }
 
 \relative c' {
@@ -424,12 +511,12 @@ withAlt =
      (parser location mag music)
      (number? ly:music?)
    #{
-     \override Stem #'length = #(* 7.0 mag)
-     \override NoteHead #'font-size =
+     \override Stem.length = #(* 7.0 mag)
+     \override NoteHead.font-size =
        #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
      #music
-     \revert Stem #'length
-     \revert NoteHead #'font-size
+     \revert Stem.length
+     \revert NoteHead.font-size
    #})
 
 \relative c' {
@@ -458,7 +545,7 @@ displayBarNum =
      (parser location)
      ()
    (if (eq? #t (ly:get-option 'display-bar-numbers))
-       #@{ \once \override Score.BarNumber #'break-visibility = ##f #@}
+       #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
        #@{#@}))
 @end example
 
@@ -519,21 +606,49 @@ Markups are implemented as special Scheme functions which produce a
 @subsection Markup construction in Scheme
 
 @cindex defining markup commands
+@funindex \displayScheme
+
+Markup expressions are internally represented in Scheme using the
+@code{markup} macro:
 
-The @code{markup} macro builds markup expressions in Scheme while
-providing a LilyPond-like syntax.  For example,
 @example
-(markup #:column (#:line (#:bold #:italic "hello" #:raise 0.4 "world")
-                  #:larger #:line ("foo" "bar" "baz")))
+(markup @var{expr})
+@end example
+
+To see a markup expression in its Scheme form, use the
+@code{\displayScheme} command:
+
+@example
+\displayScheme
+\markup @{
+  \column @{
+    \line @{ \bold \italic "hello" \raise #0.4 "world" @}
+    \larger \line @{ foo bar baz @}
+  @}
+@}
 @end example
 
 @noindent
-is equivalent to:
+Compiling the code above will send the following to the display
+console:
+
 @example
-#@{ \markup \column @{ \line @{ \bold \italic "hello" \raise #0.4 "world" @}
-                  \larger \line @{ foo bar baz @} @} #@}
+(markup
+  #:line
+  (#:column
+   (#:line
+    (#:bold (#:italic "hello") #:raise 0.4 "world")
+    #:larger
+    (#:line
+     (#:simple "foo" #:simple "bar" #:simple "baz")))))
 @end example
 
+To prevent the markup from printing on the page, use
+@w{@samp{\void \displayScheme @var{markup}}}.  Also, as with the
+@code{\displayMusic} command, the output of @code{\displayScheme}
+can be saved to an external file.  See
+@ref{Displaying music expressions}.
+
 @noindent
 This example demonstrates the main translation rules between regular
 LilyPond markup syntax and Scheme markup syntax.  Using @code{#@{
@@ -545,11 +660,12 @@ Scheme-only solution.
 @multitable @columnfractions .3 .3
 @item @b{LilyPond} @tab @b{Scheme}
 @item @code{\markup markup1} @tab @code{(markup markup1)}
-@item @code{\markup @{ markup1 markup2 ... @}} @tab
-        @code{(markup markup1 markup2 ... )}
+@item @code{\markup @{ markup1 markup2 @dots{} @}} @tab
+        @code{(markup markup1 markup2 @dots{} )}
 @item @code{\markup-command} @tab @code{#:markup-command}
 @item @code{\variable} @tab @code{variable}
-@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )}
+@item @code{\center-column @{ @dots{} @}} @tab
+        @code{#:center-column ( @dots{} )}
 @item @code{string} @tab @code{"string"}
 @item @code{#scheme-arg} @tab @code{scheme-arg}
 @end multitable
@@ -636,11 +752,11 @@ New markup commands can be defined using the
 @code{define-markup-command} Scheme macro, at top-level.
 
 @lisp
-(define-markup-command (@var{command-name} @var{layout} @var{props} @var{arg1} @var{arg2} ...)
-    (@var{arg1-type?} @var{arg2-type?} ...)
+(define-markup-command (@var{command-name} @var{layout} @var{props} @var{arg1} @var{arg2} @dots{})
+    (@var{arg1-type?} @var{arg2-type?} @dots{})
     [ #:properties ((@var{property1} @var{default-value1})
-                    ...) ]
-  ..command body..)
+                    @dots{}) ]
+  @dots{}command body@dots{})
 @end lisp
 
 The arguments are
@@ -685,6 +801,26 @@ you avoid performance pitfalls by just using Scheme arguments for
 the leading arguments of markup functions that take a markup as
 their last argument.
 
+@funindex \markup
+@cindex markup macro
+@funindex interpret-markup
+Markup commands have a rather complex life cycle.  The body of a
+markup command definition is responsible for converting the
+arguments of the markup command into a stencil expression which is
+returned.  Quite often this is accomplished by calling the
+@code{interpret-markup} function on a markup expression, passing
+the @var{layout} and @var{props} arguments on to it.  Those
+arguments are usually only known at a very late stage in
+typesetting.  Markup expressions have their components assembled
+into markup expressions already when @code{\markup} in a LilyPond
+expression or the @code{markup} macro in Scheme is expanded.  The
+evaluation and typechecking of markup command arguments happens at
+the time @code{\markup}/@code{markup} are interpreted.
+
+But the actual conversion of markup expressions into stencil
+expressions by executing the markup function bodies only happens
+when @code{interpret-markup} is called on a markup expression.
+
 @node On properties
 @unnumberedsubsubsec On properties
 
@@ -759,7 +895,7 @@ padding.
             \override #'(box-padding . 0.6) \box @{ #text @}#@}))
 @end lisp
 
-or, equivalently 
+or, equivalently
 
 @lisp
 #(define-markup-command (double-box layout props text) (markup?)
@@ -859,7 +995,7 @@ follow (documentation stripped):
   (number-pair?)
   #:category graphic
   #:properties ((thickness 1))
-  "..documentation.."
+  "@dots{}documentation@dots{}"
   (let ((th (* (ly:output-def-lookup layout 'line-thickness)
                thickness))
         (x (car dest))
@@ -876,7 +1012,7 @@ documentation, and is of no use for user-defined markup commands.
 (define-markup-command (draw-double-line layout props dest)
   (number-pair?)
   #:properties ((thickness 1))
-  "..documentation.."
+  "@dots{}documentation@dots{}"
   (let ((th (* (ly:output-def-lookup layout 'line-thickness)
                thickness))
         (x (car dest))
@@ -892,8 +1028,8 @@ Then, a property for setting the gap between two lines is added, called
   (number-pair?)
   #:properties ((thickness 1)
                 (line-gap 0.6))
-  "..documentation.."
-  ...
+  "@dots{}documentation@dots{}"
+  @dots{}
 @end lisp
 
 Finally, the code for drawing two lines is added.  Two calls to
@@ -928,12 +1064,18 @@ stencils are combined using @code{ly:stencil-add}:
 
 @node New markup list command definition
 @subsection New markup list command definition
+@funindex define-markup-list-command
+@funindex interpret-markup-list
 Markup list commands are defined with the
 @code{define-markup-list-command} Scheme macro, which is similar to the
 @code{define-markup-command} macro described in
 @ref{New markup command definition}, except that where the latter returns
 a single stencil, the former returns a list of stencils.
 
+In a similar vein, @code{interpret-markup-list} is used instead of
+@code{interpret-markup} for converting a markup list into a list
+of stencils.
+
 In the following example, a @code{\paragraph} markup list command is
 defined, which returns a list of justified lines, the first one being
 indented.  The indent width is taken from the @code{props} argument.
@@ -1028,19 +1170,18 @@ current bar number on the standard output during the compile:
 @cindex calling code on layout objects
 @funindex \applyOutput
 
-
 The most versatile way of tuning an object is @code{\applyOutput} which
 works by inserting an event into the specified context
 (@rinternals{ApplyOutputEvent}).  Its syntax is
 @example
-\applyOutput @var{context} @var{proc}
+\applyOutput @var{Context} @var{proc}
 @end example
 
 @noindent
 where @code{@var{proc}} is a Scheme function, taking three arguments.
 
 When interpreted, the function @code{@var{proc}} is called for
-every layout object found in the context @code{@var{context}} at
+every layout object found in the context @code{@var{Context}} at
 the current time step, with the following arguments:
 @itemize
 @item the layout object itself,
@@ -1069,6 +1210,14 @@ note-heads on the center-line and next to it:
 }
 @end lilypond
 
+To have @var{function} interpreted at the @code{Score} or @code{Staff}
+level use these forms
+
+@example
+\applyOutput #'Score #@var{function}
+\applyOutput #'Staff #@var{function}
+@end example
+
 
 @node Callback functions
 @section Callback functions
@@ -1077,13 +1226,13 @@ Properties (like @code{thickness}, @code{direction}, etc.) can be
 set at fixed values with @code{\override}, e.g.
 
 @example
-\override Stem #'thickness = #2.0
+\override Stem.thickness = #2.0
 @end example
 
 Properties can also be set to a Scheme procedure,
 
 @lilypond[fragment,verbatim,quote,relative=2]
-\override Stem #'thickness = #(lambda (grob)
+\override Stem.thickness = #(lambda (grob)
     (if (= UP (ly:grob-property grob 'direction))
         2.0
         7.0))
@@ -1151,19 +1300,18 @@ my-callback = #(lambda (grob)
 @node Inline Scheme code
 @section Inline Scheme code
 
-TODO: the example for this section is ill-chosen since
-@example
-F = -\tweak #'font-size #-3 -\flageolet
-@end example
-(note the @samp{-} marking it as a post event) will actually work fine
-for the stated purpose.  Until this section gets a rewrite, let's
-pretend we don't know.
+TODO: after this section had been written, LilyPond has improved
+to the point that finding a @emph{simple} example where one would
+@emph{have} to revert to Scheme has become rather hard.
+
+Until this section gets a rewrite, let's pretend we don't know.
 
 The main disadvantage of @code{\tweak} is its syntactical
-inflexibility.  For example, the following produces a syntax error.
+inflexibility.  For example, the following produces a syntax error
+(or rather, it did so at some point in the past).
 
 @example
-F = \tweak #'font-size #-3 -\flageolet
+F = \tweak font-size #-3 -\flageolet
 
 \relative c'' @{
   c4^\F c4_\F
@@ -1258,7 +1406,7 @@ of the broken tie is repositioned.
          (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
 
 \relative c'' {
-  \override Tie #'after-line-breaking =
+  \override Tie.after-line-breaking =
   #my-callback
   c1 ~ \break
   c2 ~ c
@@ -1281,9 +1429,10 @@ and @code{PaperColumn}.  They can be changed with the
 
 @example
 \overrideProperty
-#"Score.NonMusicalPaperColumn"  % Grob name
-#'line-break-system-details     % Property name
-#'((next-padding . 20))         % Value
+Score.NonMusicalPaperColumn       % Grob name
+  . line-break-system-details     % Property name
+  . next-padding                  % Optional subproperty name
+  #20                             % Value
 @end example
 
 Note, however, that @code{\override}, applied to
index c75f54630001bc8db7b30ec410e067daf0ac9950..bad8d261b214cd4e6fc1aff56dafbed1af3b6938 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @node Scheme tutorial
 @chapter Scheme tutorial
@@ -209,7 +209,15 @@ For a complete listing see the Guile reference guide,
 There are also compound data types in Scheme.  The  types commonly used in
 LilyPond programming include pairs, lists, alists, and hash tables.
 
-@subheading Pairs
+@menu
+* Pairs::
+* Lists::
+* Association lists (alists)::
+* Hash tables::
+@end menu
+
+@node Pairs
+@unnumberedsubsubsec Pairs
 
 The foundational compound data type of Scheme is the @code{pair}.  As
 might be expected from its name, a pair is two values glued together.
@@ -250,7 +258,7 @@ Scheme procedures @code{car} and @code{cdr}, respectively.
 
 @lisp
 guile> (define mypair (cons 123 "hello there")
-... )
+@dots{} )
 guile> (car mypair)
 123
 guile> (cdr mypair)
@@ -264,7 +272,8 @@ Note:  @code{cdr} is pronounced "could-er", according Sussman and
 Abelson, see
 @uref{http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html#footnote_Temp_133}
 
-@subheading Lists
+@node Lists
+@unnumberedsubsubsec Lists
 
 A very common Scheme data structure is the @emph{list}.  Formally, a
 list is defined as either the empty list (represented as @code{'()},
@@ -294,7 +303,8 @@ Lists are a central part of Scheme.  In, fact, Scheme is considered
 a dialect of lisp, where @q{lisp} is an abbreviation for
 @q{List Processing}.  Scheme expressions are all lists.
 
-@subheading Association lists (alists)
+@node Association lists (alists)
+@unnumberedsubsubsec Association lists (alists)
 
 A special type of list is an @emph{association list} or @emph{alist}.
 An alist is used to store data for easy retrieval.
@@ -318,7 +328,8 @@ guile>
 
 Alists are widely used in LilyPond to store properties and other data.
 
-@subheading Hash tables
+@node Hash tables
+@unnumberedsubsubsec Hash tables
 
 A data structure that is used occasionally in LilyPond.  A hash table
 is similar to an array, but the indexes to the array can be any type
@@ -488,7 +499,14 @@ Scheme procedures are executable scheme expressions that return a
 value resulting from their execution.  They can also manipulate
 variables defined outside of the procedure.
 
-@subheading Defining procedures
+@menu
+* Defining procedures::
+* Predicates::
+* Return values::
+@end menu
+
+@node Defining procedures
+@unnumberedsubsubsec Defining procedures
 
 Procedures are defined in Scheme with define
 
@@ -514,7 +532,8 @@ guile> (average 3 12)
 15/2
 @end lisp
 
-@subheading Predicates
+@node Predicates
+@unnumberedsubsubsec Predicates
 
 Scheme procedures that return boolean values are often called
 @emph{predicates}.  By convention (but not necessity), predicate names
@@ -528,7 +547,8 @@ guile> (less-than-ten? 15)
 #f
 @end lisp
 
-@subheading Return values
+@node Return values
+@unnumberedsubsubsec Return values
 
 Scheme procedures always return a return value, which is the value
 of the last expression executed in the procedure.  The return
@@ -554,14 +574,20 @@ statement in the let block:
 
 @lisp
 guile> (let ((x 2) (y 3) (z 4)) (display (+ x y)) (display (- z 4))
-... (+ (* x y) (/ z x)))
+@dots{} (+ (* x y) (/ z x)))
 508
 @end lisp
 
 @node Scheme conditionals
 @subsection Scheme conditionals
 
-@subheading if
+@menu
+* if::
+* cond::
+@end menu
+
+@node if
+@unnumberedsubsubsec if
 
 Scheme has an @code{if} procedure:
 
@@ -581,14 +607,15 @@ guile> (if (> a b) "a is greater than b" "a is not greater than b")
 "a is not greater than b"
 @end lisp
 
-@subheading cond
+@node cond
+@unnumberedsubsubsec cond
 
 Another conditional procedure in scheme is @code{cond}:
 
 @example
 (cond (test-expression-1 result-expression-sequence-1)
       (test-expression-2 result-expression-sequence-2)
-      ...
+      @dots{}
       (test-expression-n result-expression-sequence-n))
 @end example
 
@@ -633,7 +660,7 @@ Now LilyPond's input is structured into tokens and expressions, much
 like human language is structured into words and sentences.  LilyPond
 has a lexer that recognizes tokens (literal numbers, strings, Scheme
 elements, pitches and so on), and a parser that understands the syntax,
-@ruser{LilyPond grammar}.  Once it knows that a particular syntax rule
+@rcontrib{LilyPond grammar}.  Once it knows that a particular syntax rule
 applies, it executes actions associated with it.
 
 The hash mark@tie{}@code{#} method of embedding Scheme is a natural fit
@@ -793,7 +820,7 @@ traLaLa = @{ c'4 d'4 @}
 is internally converted to a Scheme definition:
 
 @example
-(define traLaLa @var{Scheme value of `@code{... }'})
+(define traLaLa @var{Scheme value of `@code{@dots{}}'})
 @end example
 
 This means that LilyPond variables and Scheme variables may be freely
@@ -835,7 +862,7 @@ Instead of defining @code{\twice}, the example above could also have
 been written as
 
 @example
-...
+@dots{}
 $(make-sequential-music newLa)
 @end example
 
@@ -858,7 +885,7 @@ context.  Using those, the last part of the example could have been
 written as
 
 @example
-...
+@dots{}
 @{ #@@newLa @}
 @end example
 
@@ -878,7 +905,7 @@ If you need it to be executed at a later point of time, check out
 #(define (nopc)
   (ly:set-option 'point-and-click #f))
 
-...
+@dots{}
 #(nopc)
 @{ c'4 @}
 @end example
@@ -902,7 +929,7 @@ the alist with both a key and a value.  The LilyPond syntax for doing
 this is:
 
 @example
-\override Stem #'thickness = #2.6
+\override Stem.thickness = #2.6
 @end example
 
 This instruction adjusts the appearance of stems.  An alist entry
@@ -927,14 +954,23 @@ while @code{twentyFour} is a variable.
 @node LilyPond compound variables
 @subsection LilyPond compound variables
 
-@subheading Offsets
+@menu
+* Offsets::
+* Fractions::
+* Extents::
+* Property alists::
+* Alist chains::
+@end menu
+
+@node Offsets
+@unnumberedsubsubsec Offsets
 
 Two-dimensional offsets (X and Y coordinates) are stored as @emph{pairs}.
 The @code{car} of the offset is the X coordinate, and the @code{cdr} is
 the Y coordinate.
 
 @example
-\override TextScript #'extra-offset = #'(1 . 2)
+\override TextScript.extra-offset = #'(1 . 2)
 @end example
 
 This assigns the pair @code{(1 . 2)} to the @code{extra-offset}
@@ -944,7 +980,8 @@ this command moves the object 1 staff space to the right, and 2 spaces up.
 
 Procedures for working with offsets are found in @file{scm/lily-library.scm}.
 
-@subheading Fractions
+@node Fractions
+@unnumberedsubsubsec Fractions
 
 Fractions as used by LilyPond are again stored as @emph{pairs}, this
 time of unsigned integers.  While Scheme can represent rational numbers
@@ -954,7 +991,8 @@ no negative @q{fractions} in LilyPond's mind.  So @code{2/4} in LilyPond
 means @code{(2 . 4)} in Scheme, and @code{#2/4} in LilyPond means
 @code{1/2} in Scheme.
 
-@subheading Extents
+@node Extents
+@unnumberedsubsubsec Extents
 
 Pairs are also used to store intervals, which represent a range of numbers
 from the minimum (the @code{car}) to the maximum (the @code{cdr}).
@@ -967,7 +1005,8 @@ Procedures for working with intervals are found in
 @file{scm/lily-library.scm}.  These procedures should be used when possible
 to ensure consistency of code.
 
-@subheading Property alists
+@node Property alists
+@unnumberedsubsubsec Property alists
 
 A property alist is a LilyPond data structure that is an alist whose
 keys are properties and whose values are Scheme expressions that give
@@ -975,7 +1014,8 @@ the desired value for the property.
 
 LilyPond properties are Scheme symbols, such as @code{'thickness}.
 
-@subheading Alist chains
+@node Alist chains
+@unnumberedsubsubsec Alist chains
 
 An alist chain is a list containing property alists.
 
@@ -1087,7 +1127,7 @@ will display
                   'text
                   "f"))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 0 0))))
 @end example
@@ -1122,16 +1162,16 @@ A bit of reformatting makes the above information easier to read:
                               (make-music 'AbsoluteDynamicEvent
                                 'text
                                 "f"))
-              'duration (ly:make-duration 2 0 1 1)
+              'duration (ly:make-duration 2 0 1/1)
               'pitch    (ly:make-pitch 0 0 0))))
 @end example
 
-A @code{@{ ... @}} music sequence has the name @code{SequentialMusic},
-and its inner expressions are stored as a list in its @code{'elements}
-property.  A note is represented as a @code{NoteEvent} object (storing
-the duration and pitch properties) with attached information (in this
-case, an @code{AbsoluteDynamicEvent} with a @code{"f"} text property)
-stored in its @code{articulations} property.
+A @code{@{ @dots{} @}} music sequence has the name
+@code{SequentialMusic}, and its inner expressions are stored as a list
+in its @code{'elements} property.  A note is represented as a
+@code{NoteEvent} object (storing the duration and pitch properties) with
+attached information (in this case, an @code{AbsoluteDynamicEvent} with
+a @code{"f"} text property) stored in its @code{articulations} property.
 
 @funindex{\void}
 @code{\displayMusic} returns the music it displays, so it will get
@@ -1154,7 +1194,7 @@ someNote = c'
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 0 0))
 @end example
@@ -1172,7 +1212,7 @@ someNote = <c'>
   (list (make-music
           'NoteEvent
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 0 0))))
 @end example
@@ -1190,7 +1230,7 @@ expression.
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 0 0))
 @end example
@@ -1241,7 +1281,7 @@ representation of the desired result.
                   'span-direction
                   -1))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 5 0))
         (make-music
@@ -1252,7 +1292,7 @@ representation of the desired result.
                   'span-direction
                   1))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 5 0))))
 @end example
@@ -1269,7 +1309,7 @@ Now we examine the input,
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 5 0))))
 @end example
@@ -1277,7 +1317,7 @@ Now we examine the input,
 So in our function, we need to clone this expression (so that we have
 two notes to build the sequence), add a @code{SlurEvent} to the
 @code{'articulations} property of each one, and finally make a
-@code{SequentialMusic} with the two @code{EventChords}.  For adding to a
+@code{SequentialMusic} with the two @code{NoteEvent} elements.  For adding to a
 property, it is useful to know that an unset property is read out as
 @code{'()}, the empty list, so no special checks are required before we
 put another element at the front of the @code{articulations} property.
@@ -1301,14 +1341,14 @@ doubleSlur = #(define-music-function (parser location note) (ly:music?)
 @subsection Adding articulation to notes (example)
 
 The easy way to add articulation to notes is to merge two music
-expressions into one context, as explained in @ruser{Creating contexts}.
+expressions into one context.
 However, suppose that we want to write a music function that does this.
 This will have the additional advantage that we can use that music
 function to add an articulation (like a fingering instruction) to a
 single note inside of a chord which is not possible if we just merge
 independent music.
 
-A @code{$variable} inside the @code{#@{...#@}} notation is like
+A @code{$variable} inside the @code{#@{@dots{}#@}} notation is like
 a regular @code{\variable} in classical LilyPond notation.  We
 know that
 
@@ -1335,7 +1375,7 @@ Scheme.  We begin by examining our input and desired output,
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch -1 0 0))))
 =====
@@ -1350,7 +1390,7 @@ Scheme.  We begin by examining our input and desired output,
           'articulation-type
           "accent"))
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch -1 0 0))
 @end example
@@ -1380,7 +1420,7 @@ from its name.  (this is good practice in other programming languages,
 too!)
 
 @example
-"Add an accent..."
+"Add an accent@dots{}"
 @end example
 
 @noindent
@@ -1490,7 +1530,7 @@ We may verify that this music function works correctly,
 
 We have seen how LilyPond output can be heavily modified using
 commands like
-@code{\override TextScript #'extra-offset = ( 1 . -1)}.  But
+@code{\override TextScript.extra-offset = ( 1 . -1)}.  But
 we have even more power if we use Scheme.  For a full explanation
 of this, see the @ref{Scheme tutorial}, and
 @ref{Interfaces for programmers}.
@@ -1506,7 +1546,7 @@ TODO Find a simple example
 @lilypond[quote,verbatim,ragged-right]
 padText = #(define-music-function (parser location padding) (number?)
 #{
-  \once \override TextScript #'padding = #padding
+  \once \override TextScript.padding = #padding
 #})
 
 \relative c''' {
@@ -1530,7 +1570,7 @@ We can use it to create new commands:
 tempoPadded = #(define-music-function (parser location padding tempotext)
   (number? markup?)
 #{
-  \once \override Score.MetronomeMark #'padding = #padding
+  \once \override Score.MetronomeMark.padding = #padding
   \tempo \markup { \bold #tempotext }
 #})
 
index d9695cbb766f214c3c5417fe890ae3639b01d118..420c8db9d68c593e99c0c4eeb9ea351ab23238d8 100644 (file)
@@ -1,6 +1,5 @@
 ISOLANG = fr
 depth = ../..
-SUBDIRS = web learning notation texidocs usage included essay extending
 STEPMAKE_TEMPLATES = documentation texinfo
 LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
 
diff --git a/Documentation/fr/essay/GNUmakefile b/Documentation/fr/essay/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 6e4920878f69ea3ef7f28f4a209c9324e589840b..1a71ee2876ac1671548523438918a5c786ee6cbe 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: 0f062fdb1c08e46bce7aa3047ee3c7f68e686079
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Jean-Charles Malahieude, John Mandereau, Gauvain Pocentek
 
@@ -344,9 +344,9 @@ music = {
   \layout {
     \context {
       \Staff
-      \override NoteSpacing #'stem-spacing-correction = #0.0
-      \override NoteSpacing #'same-direction-correction = #0.0
-      \override StaffSpacing #'stem-spacing-correction = #0.0
+      \override NoteSpacing.stem-spacing-correction = #0.0
+      \override NoteSpacing.same-direction-correction = #0.0
+      \override StaffSpacing.stem-spacing-correction = #0.0
     }
   }
 }
@@ -372,7 +372,7 @@ music = {
   \layout {
     \context {
       \Staff
-      \override NoteSpacing #'stem-spacing-correction = #0.6
+      \override NoteSpacing.stem-spacing-correction = #0.6
     }
   }
 }
@@ -500,8 +500,8 @@ global = {
   <<
     \new Staff \with {
       fontSize = #-4
-      \override StaffSymbol #'staff-space = #(magstep -4)
-      \override StaffSymbol #'thickness = #(magstep -3)
+      \override StaffSymbol.staff-space = #(magstep -4)
+      \override StaffSymbol.thickness = #(magstep -3)
     }
     \relative c' {
       \global
@@ -523,7 +523,7 @@ global = {
         \clef "bass"
         <<
         {
-          \once \override DynamicText #'X-offset = #-3
+          \once \override DynamicText.X-offset = #-3
           <ees g c>2.~->^\f
           <ees g c>4.~ <ees g c>8
         } \\ {
@@ -615,9 +615,9 @@ choisir pour formater la liaison ?
 @lilypond
 \relative c {
     \clef bass
-    \once \override Slur #'positions = #'(1.5 . 1)
+    \once \override Slur.positions = #'(1.5 . 1)
     e8[( f] g[ a b d,)] r4
-    \once \override Slur #'positions = #'(2 . 3)
+    \once \override Slur.positions = #'(2 . 3)
     e8[( f] g[ a b d,)] r4
     e8[( f] g[ a b d,)] r4
 }
@@ -660,7 +660,7 @@ notamment pour l'effleurement de la tête de note.
 @lilypond
 \relative c {
     \clef bass
-    \once \override Slur #'positions = #'(1.5 . 1)
+    \once \override Slur.positions = #'(1.5 . 1)
     e8[(_"15.39" f] g[ a b d,)] r4
 }
 @end lilypond
@@ -676,7 +676,7 @@ fait un total de 13,08 points de laideur.
 @lilypond
 \relative c {
     \clef bass
-    \once \override Slur #'positions = #'(2 . 3)
+    \once \override Slur.positions = #'(2 . 3)
     e8[(_"13.08" f] g[ a b d,)] r4
 }
 @end lilypond
@@ -900,7 +900,7 @@ partIV = \relative c {
     }
     \context {
       \PianoStaff
-      \override StaffGrouper #'staff-staff-spacing #'padding = #1
+      \override StaffGrouper.staff-staff-spacing.padding = #1
     }
   }
 }
@@ -923,7 +923,7 @@ inférieure de croisent temporairement :
 
 @c KEEP LY
 @lilypond
-collide = \once \override NoteColumn #'force-hshift = #0
+collide = \once \override NoteColumn.force-hshift = #0
 
 \score {
   <<
@@ -959,7 +959,7 @@ sa plus simple expression, alors que les autres programmes font tout
 pour avoir une interface attractive pour effectuer toutes les retouches.
 
 Par ailleurs, Finale commet une erreur particulièrement flagrante :
-il manque un bémol à la mesure 33
+il manque un bémol à la mesure 33
 
 @quotation
 @iftex
@@ -1171,20 +1171,20 @@ musique se complique :
     \new Voice = "I" \relative c''' {
       \time 3/4
       \voiceOne
-      \times 6/7 {g8 g g g g g g}
+      \tuplet 7/6 {g8 g g g g g g}
       \oneVoice
       r4 <b,, fis' g bes> r4\fermata
     }
     \new Voice = "II" \relative c' {
       \voiceTwo
       c4
-      \times 4/5 {
+      \tuplet 5/4 {
         <c ees>8 f g
         \change Staff = "LH" \oneVoice
         \stemUp g,( c}
       r4
-      \override Stem #'cross-staff = ##t
-      \override Stem #'length = #12
+      \override Stem.cross-staff = ##t
+      \override Stem.length = #12
       <fis, b>) r\fermata
     }
   >>
@@ -1258,6 +1258,7 @@ crée les têtes de notes :
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1291,6 +1292,7 @@ représentant les lignes de portée :
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1323,6 +1325,7 @@ la hauteur à laquelle doit être placée chaque tête de note :
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1352,6 +1355,7 @@ et, enfin, les hampes et leurs crochets sont gérés par le
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1470,14 +1474,14 @@ vers le haut (ou la droite) pour le second.
 \score {
   \relative c' {
     \stemDown <e g b>4_>-\arpeggio
-    \override Arpeggio #'direction = #RIGHT
+    \override Arpeggio.direction = #RIGHT
     \stemUp <e g b>4^>-\arpeggio
   }
   \layout {
     \context {
       \Score
-      \override SpacingSpanner #'spacing-increment = #3
-      \override TimeSignature #'transparent = ##t
+      \override SpacingSpanner.spacing-increment = #3
+      \hide TimeSignature
     }
   }
 }
@@ -1502,12 +1506,12 @@ fragment = {
 <<
    \new Staff \fragment
    \new Staff \with {
-      \override Beam #'beam-thickness = #0.3
-      \override Stem #'thickness = #0.5
-      \override Bar #'thickness = #3.6
-      \override Tie #'thickness = #2.2
-      \override StaffSymbol #'thickness = #3.0
-      \override Tie #'extra-offset = #'(0 .  0.3)
+      \override Beam.beam-thickness = #0.3
+      \override Stem.thickness = #0.5
+      \override Bar.thickness = #3.6
+      \override Tie.thickness = #2.2
+      \override StaffSymbol.thickness = #3.0
+      \override Tie.extra-offset = #'(0 .  0.3)
       }
       \fragment
 >>
@@ -1543,12 +1547,12 @@ musical :
   \set autoBeaming = ##f
   \time 2/4
   <d f g>4
-  \once \override NoteHead #'stencil = #note-head::brew-ez-stencil
-  \once \override NoteHead #'font-size = #-7
-  \once \override NoteHead #'font-family = #'sans
-  \once \override NoteHead #'font-series = #'bold
+  \once \override NoteHead.stencil = #note-head::brew-ez-stencil
+  \once \override NoteHead.font-size = #-7
+  \once \override NoteHead.font-family = #'sans
+  \once \override NoteHead.font-series = #'bold
   <d f g>4
-  \once \override NoteHead #'style = #'cross
+  \once \override NoteHead.style = #'cross
   <d f g>4
   \applyOutput #'Voice #mc-squared
   <d f g>4
@@ -1614,7 +1618,7 @@ constructions@dots{}
       \time 4/8
       \key c \minor
       << {
-        \revert Stem #'direction
+        \revert Stem.direction
         \change Staff = down
         \set subdivideBeams = ##t
         g16.[
@@ -1631,7 +1635,7 @@ constructions@dots{}
         \set followVoice = ##t
         c'''32([ b''16 a''16 gis''16 g''32)]
       } \\ {
-        s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d'']
+        s4 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
       } \\ {
         s4 \autoBeamOff d''8.. f''32
       } \\ {
@@ -1643,16 +1647,16 @@ constructions@dots{}
       \clef bass
       \key c \minor
       \set subdivideBeams = ##f
-      \override Stem  #'french-beaming = ##t
-      \override Beam  #'beam-thickness = #0.3
-      \override Stem  #'thickness = #4.0
+      \override Stem.french-beaming = ##t
+      \override Beam.beam-thickness = #0.3
+      \override Stem.thickness = #4.0
       g'16[ b16 fis16 g16]
       << \makeClusters {
         as16 <as b>
         <g b>
         <g cis>
       } \\ {
-        \override Staff.Arpeggio  #'arpeggio-direction =#down
+        \override Staff.Arpeggio.arpeggio-direction =#down
         <cis, e, gis, b, cis>4\arpeggio
       }
     >> }
@@ -1835,7 +1839,7 @@ partIV = \relative c {
     }
     \context {
       \PianoStaff
-      \override StaffGrouper #'staff-staff-spacing #'padding = #1
+      \override StaffGrouper.staff-staff-spacing.padding = #1
     }
   }
 }
index 346c0e6e2d89b074ffe5e4f6a6f7f0a89b1f87a4..221ce450bda26bc44ba9eabdbe78a1d22f8c9c31 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 @ignore
-    Translation of GIT committish: 3c62ac104645533873bba800f7b0f371089f535a
+    Translation of GIT committish: 612eac7df053e25c785d378e54a9f6f948547835
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -16,7 +16,7 @@
 @c Translators: Jean-Charles Malahieude
 
 @macro manualIntro
-Ce document constitue fournit les informations de base pour étendre les
+Ce document fournit les informations de base pour étendre les
 fonctionnalités de LilyPond@tie{}version @version{}.
 @end macro
 
diff --git a/Documentation/fr/extending/GNUmakefile b/Documentation/fr/extending/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 6869d2dc04830dd2fada011fe4df379b8b8f73d0..7d9737154a3e06147c2b046062d9240c7979d128 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: ea78e54687b8beb80958e55bcd3ddfbe90ab5967
+    Translation of GIT committish: 815ddc522bcdec0c1266caad5cc9e723fbbb2e41
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: Gilles Thibault
@@ -36,16 +36,45 @@ connaissez rien de Scheme, vous en aurez un aperçu au travers de notre
 
 @node Blocs de code LilyPond
 @section Blocs de code LilyPond
-@translationof Lilypond code blocks
+@translationof LilyPond code blocks
+
+@cindex code, blocs LilyPond
+@cindex LilyPond, bloc de code
+
+@funindex #@{ ... #@}
+@funindex $
+@funindex #
+
+L'utilisation de Scheme pour créer des expressions musicales peut
+s'avérer ardue, principalement à cause des imbrications et de la
+longueur du code Scheme qui en résulte.  Dans le cas de tâches
+simples, on peut toutefois contourner une partie du problème en
+utilisant des blocs de code LilyPond, ce qui autorise la syntaxe
+habituelle de LilyPond au sein même de Scheme.
 
 Les blocs de code LilyPond ressemblent à
+
 @example
   #@{ @var{du code LilyPond} #@}
 @end example
-Ils peuvent s'utiliser partout où vous pouvez écrire du code Scheme.
-Le lecteur Scheme est en fait quelque peu adapté pour accepter des blocs
-de code LilyPond ; il est capable de traiter des expressions Scheme
-intégrées débutant par @code{$} ou @code{#}.
+
+En voici un exemple basique :
+
+@lilypond[verbatim,quote]
+ritpp = #(define-event-function (parser location) ()
+  #{ ^"rit." \pp #}
+)
+
+{ c'4 e'4\ritpp g'2 }
+@end lilypond
+
+Les blocs de code LilyPond peuvent s'utiliser partout où vous pouvez
+écrire du code Scheme.  Le lecteur Scheme est en fait quelque peu adapté
+pour accepter des blocs de code LilyPond ; il est capable de traiter des
+expressions Scheme intégrées débutant par @code{$} ou @code{#}.
+
+@cindex parser (fonction argument)
+@cindex location
 
 Le lecteur Scheme extrait le bloc de code LilyPond et déclenche un appel
 à l'analyseur grammatical de LilyPond (le @code{parser}) qui réalise en
@@ -53,7 +82,17 @@ temps réel l'interprétation de ce bloc de code LilyPond.  Toute
 expression Scheme imbriquée est exécutée dans l'environnement lexical du
 bloc de code LilyPond, de telle sorte que vous avez accès aux variables
 locales et aux paramètres de la fonction au moment même où le bloc de
-code LilyPond est écrit.
+code LilyPond est écrit.  Les variables définies dans d'autres modules
+Scheme, tels ceux contenant les blocs @code{\header} ou @code{\layout},
+ne sont pas accessibles en tant que variables Scheme (préfixées par
+un @code{#}) mais en tant que variables LilyPond (préfixées par
+un @code{\}).
+
+Lorsque l'emplacement (@code{location} -- voir @ref{Fonctions Scheme})
+fait référence à un endroit valide dans la source -- ce qui est en
+général le cas au sein de fonctions musicales ou Scheme --, toute la
+musique générée au sein de ce bloc de code voit son @code{origine}
+établie à cet @emph{emplacement}.
 
 Un bloc de code LilyPond peut contenir tout ce que vous pourriez mettre
 à droite de l'assignation.  Par ailleurs, un bloc LilyPond vide
@@ -94,8 +133,8 @@ D'une manière générale, une fonction Scheme se définit ainsi :
 @example
 fonction =
 #(define-scheme-function
-     (parser location @var{arg1} @var{arg2} @dots{})
-     (@var{type1?} @var{type2?} @dots{})
+     (parser location @var{arg1} @var{arg2}@dots{})
+     (@var{type1?} @var{type2?}@dots{})
    @var{corps})
 @end example
 
@@ -108,17 +147,20 @@ où
 l'analyseur grammatical puisse accéder aux blocs de code LilyPond
 (@code{#@{}@dots{}@code{#@}}).
 
+@item @code{location}
+@tab doit être littéralement @code{location}, de telle sorte que soit
+accessible l'emplacement de l'objet dans la source, aux fins de
+transmettre aux messages d'erreur les fichier et numéro de ligne.
+
 @item @code{@var{argN}}
 @tab @var{n}ième argument
 
 @item @code{@var{typeN?}}
 @tab un @emph{type de prédicat} Scheme pour lequel @code{@var{argN}}
-devra retourner @code{#t}.  Certains de ces prédicats, comme nous le
-verrons plus loin, bénéficient d'un traitement particulier de la part du
-@emph{parser}.  De même existe une forme spécifique --
-@code{(@emph{prédicat?} @emph{default})} -- qui permet de fournir des
+devra retourner @code{#t}.  Il existe aussi une forme spécifique --
+@code{(@emph{prédicat?} @emph{default})} -- qui permet de fournir des
 argument optionnels.  En l'absence d'argument réel au moment de l'appel
-de la fonction, c'est la valeur par défaut qui lui sera substituée.  Les
+à la fonction, c'est la valeur par défaut qui lui sera substituée.  Les
 valeurs par défaut sont évaluées dès l'apparition de la définition, y
 compris dans le cas de blocs de code LilyPond ; vous devrez donc,
 si ces valeurs par défaut ne peuvent être déterminées que plus tard,
@@ -135,14 +177,14 @@ définition de @code{origin} vers le paramètre @code{location}.
 @tab une séquence de formules Scheme évaluées dans l'ordre, la dernière
 servant de valeur de retour de la fonction. Il peut contenir des blocs
 de code LilyPond, enchâssés dans des accolades et @emph{hashes} --
-@w{@code{#@{@dots{}#@}}}  -- comme indiqué à la rubrique
+@w{@code{#@{@dots{}#@}}} -- comme indiqué à la rubrique
 @ref{Blocs de code LilyPond}.  Au sein d'un bloc de code LilyPond, un
 @code{#} permet de référencer des arguments de la fonction -- tel
 @samp{#arg1} -- ou d'ouvrir une expression Scheme contenant les
 arguments de la fonction -- par exemple @w{@samp{#(cons arg1 arg2)}}.
 Dans le cas où une expression Scheme introduite par @code{#} ne vous
 permet pas de parvenir à vos fins, vous pourriez devoir revenir à une
-expression Scheme @qq{immédiate} à l'aide d'un @code{$}, comme
+expression Scheme « immédiate » à l'aide d'un @code{$}, comme
 @samp{$music}.
 
 Lorsque votre fonction retourne une expression musicale, lui est
@@ -150,23 +192,17 @@ attribuée la valeur @code{origin}.
 @end multitable
 
 @noindent
-Certains types de prédicat font l'objet d'un traitement spécial de la
-part de l'analyseur grammatical, dans la mesure où il n'a aucun autre
-moyen de reconnaître efficacement les arguments.  Il s'agit, à l'heure
-actuelle, de @code{ly:pitch?} et @code{ly:duration?}.
-
-Pour tous les autres prédicats, la recevabilité des arguments est
-déterminée par un appel effectif au prédicat après que LilyPond les a
-déjà converti en expression Scheme.  Par voie de conséquence, l'argument
-peut tout à fait se libeller en syntaxe Scheme -- introduite par un
-@code{#} ou en tant que résultat d'un appel à une fonction Scheme.  Par
-ailleurs, LilyPond convertira en Scheme un certain nombre de
-constructions purement LilyPond avant même d'en avoir vérifié le
-prédicat.  C'est notamment le cas de la musique, des
-@emph{postévénements}, des chaînes simples (avec ou sans guillemets),
-des nombres, des @emph{markups} et listes de @emph{markups}, ainsi que
-des blocs @emph{score}, @emph{book}, @emph{bookpart}, ou qui définissent
-un contexte ou un format de sortie.
+La recevabilité des arguments est déterminée par un appel effectif au
+prédicat après que LilyPond les a déjà converti en expression Scheme.
+Par voie de conséquence, l'argument peut tout à fait se libeller en
+syntaxe Scheme -- introduite par un @code{#} ou en tant que résultat
+d'un appel à une fonction Scheme.  Par ailleurs, LilyPond convertira en
+Scheme un certain nombre de constructions purement LilyPond avant même
+d'en avoir vérifié le prédicat.  C'est notamment le cas de la musique,
+des @emph{postévénements}, des chaînes simples (avec ou sans
+guillemets), des nombres, des @emph{markups} et listes de
+@emph{markups}, ainsi que des blocs @emph{score}, @emph{book},
+@emph{bookpart}, ou qui définissent un contexte ou un format de sortie.
 
 Il existe certaines formes d'expression, comme la plupart du temps où la
 musique n'est pas bornée par des accolades, où LilyPond doit lire
@@ -174,7 +210,7 @@ au-delà de cette même expression afin d'en déterminer la fin.  Si une
 telle expression devait, après évaluation du prédicat, faire l'objet
 d'un argument optionnel, LilyPond n'aurait aucun moyen, à partir du
 moment où il aura décidé que l'expression ne correspond pas au
-paramètre, de @qq{revenir en arrière}.  C'est la raison pour laquelle
+paramètre, de « revenir en arrière ».  C'est la raison pour laquelle
 certaines formes musicales devraient être bornées par des accolades pour
 que LilyPond puisse les reconnaître efficacement.  Il existe d'autres
 situations pour lesquelles LilyPond lèvera toute ambiguïté grâce aux
@@ -182,10 +218,17 @@ fonctions de prédicat : un @samp{-3} est-il un @emph{postévénement}
 de type doigté ou un nombre négatif@tie{}?  Un @code{"a" 4} en mode
 paroles est-il une chaîne suivie d'un nombre ou bien un événement
 syllabe de durée @code{4} ?  LilyPond répondra à ces questions
-après consultation du prédicat.  Pour toutes ces raisons, nous vous
-enjoignons à éviter d'utiliser des prédicats permissifs tel que
-@code{scheme?}, dès que vous voulez les utiliser dans un but particulier
-plutôt que dans une fonction de portée générale.
+par des interprétations successives du prédicat de l'argument, dans un
+ordre défini de sorte à minimiser les interprétations erronées et le
+besoin de lecture en avance.
+
+Un prédicat qui accepte par exemple aussi bien une expression musicale
+qu'une hauteur considèrera @code{c''} comme étant une hauteur plutôt
+qu'une expression musicale.  Les durées ou @emph{postévénements} qui
+viennent juste après pourraient ne pas être cohérents avec cette
+interprétation.  C'est la raison pour laquelle il vaut mieux éviter des
+prédicats par trop permissifs tel que @code{Scheme?} lorsque
+l'application fait plutôt appel à des type d'argument plus spécifiques.
 
 Les différents types des prédicat propres à LilyPond sont recensés à
 l'annexe @ruser{Types de prédicats prédéfinis}.
@@ -274,7 +317,7 @@ noPointAndClick =
      (parser location)
      ()
    (ly:set-option 'point-and-click #f))
-...
+@dots{}
 \noPointAndClick   % desactive le "pointer-cliquer"
 @end example
 
@@ -326,8 +369,8 @@ Une fonction musicale se définit ainsi :
 @example
 fonction =
 #(define-music-function
-     (parser location @var{arg1} @var{arg2} @dots{})
-     (@var{type1?} @var{type2?} @dots{})
+     (parser location @var{arg1} @var{arg2}@dots{})
+     (@var{type1?} @var{type2?}@dots{})
    @var{corps})
 @end example
 
@@ -365,18 +408,12 @@ Dans une expression musicale de haut niveau@tie{}: aucune restriction.
 
 @item
 En tant que post-événement, explicitement introduit par un indicateur de
-positionnement -- à savoir @code{-}, @code{^}, ou@tie{}@code{_}.  Notez
-bien que le renvoi d'un post-événement est valide lorsque la fonction
-musicale est appelée comme de la musique normale ; ceci amène à un
-résultat ressemblant à
-@example
-s 1*0-\fonction
-@end example
+positionnement -- à savoir @code{-}, @code{^}, ou@tie{}@code{_}.
 
 Dans ce cas particulier, vous ne pouvez utiliser une expression musicale
 @emph{ouverte} en tant que dernier argument -- argument qui se
 composerait d'une expression musicale susceptible d'accepter des
-post-événements additionnels.
+postévénements additionnels.
 
 @item
 En tant que partie d'un accord.  L'expression musicale renvoyée doit
@@ -422,7 +459,7 @@ manualBeam =
      (parser location beg-end)
      (pair?)
    #@{
-     \once \override Beam #'positions = #beg-end
+     \once \override Beam.positions = #beg-end
    #@})
 
 \relative c' @{
@@ -440,7 +477,7 @@ manualBeam =
      (parser location beg end)
      (number? number?)
    #{
-     \once \override Beam #'positions = #(cons beg end)
+     \once \override Beam.positions = #(cons beg end)
    #})
 
 \relative c' {
@@ -448,6 +485,58 @@ manualBeam =
 }
 @end lilypond
 
+@funindex \temporary
+@cindex temporaire, dérogation (override)
+@cindex dérogation temporaire (override)
+@cindex propriétés, retour à la valeur précédente
+
+L'entretien des propriétés peut se voir comme un empilement par
+propriété par objet par contexte.  Les fonctions musicales peuvent
+nécessiter des dérogatoins pour une ou plusieurs propriétés pour la
+durée de la fonction, puis de revenir aux valeurs précédentes avant de
+quitter.  Néanmoins, une dérogation normale va retirer de la pile -- ou
+dépiler -- et supprimer le sommet de la pile de la propriété avant
+d'y ajouter quoi que ce soit -- ou empiler -- ; la valeur précédente de
+la propriété est de fait perdue.  Lorsque la valeur antérieure doit être
+préservée, l'instruction @code{\override} devra être préfixée d'un
+@code{\temporary}, comme ceci :
+
+@example
+\temporary \override @dots{}
+@end example
+
+L'utilisation d'un @code{\temporary} a pour effet d'effacer la propriété
+@code{pop-first} (@emph{commence par dépiler} normalement activée) de la
+dérogation ; la valeur antérieure ne sera alors pas supprimée de la pile
+de la propriété avant d'y empiler la nouvelle valeur.  Lorsqu'un
+@code{\revert} viendra par la suite supprimer la valeur dérogatoire
+temporaire, réapparaitra la valeur antérieure.
+
+En d'autres termes, un @code{\revert} qui suit un @code{\temporary
+\override} pour la même propriété n'apporte rien.  Ce principe est aussi
+valable pour une couple @code{\temporary} et @code{\undo} sur la même
+musique contenant des dérogations.
+
+Voici un exemple de fonction musicale utilisant cette fonctionnalité.
+La présence du @code{\temporary} permet de s'assurer qu'en sortant de la
+fonction, les propriétés @code{cross-staff} et @code{style} retrouveront
+les valeurs qu'elles avaient que ne soit appelée la fonction
+@code{crossStaff}.  En l'absence de @code{\temporary}, ces propriétés
+auraient retrouvé leurs valeurs par défaut à la sortie de la fonction.
+
+@example
+crossStaff =
+#(define-music-function (parser location notes) (ly:music?)
+  (_i "Create cross-staff stems")
+  #@{
+  \temporary \override Stem.cross-staff = #cross-staff-connect
+  \temporary \override Flag.style = #'no-flag
+  #notes
+  \revert Stem.cross-staff
+  \revert Flag.style
+#@})
+@end example
+
 
 @node De l'usage des mathématiques dans les fonctions
 @subsection De l'usage des mathématiques dans les fonctions
@@ -462,14 +551,14 @@ AltOn =
      (parser location mag)
      (number?)
    #{
-     \override Stem #'length = #(* 7.0 mag)
-     \override NoteHead #'font-size =
+     \override Stem.length = #(* 7.0 mag)
+     \override NoteHead.font-size =
        #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
    #})
 
 AltOff = {
-  \revert Stem #'length
-  \revert NoteHead #'font-size
+  \revert Stem.length
+  \revert NoteHead.font-size
 }
 
 \relative c' {
@@ -488,12 +577,12 @@ withAlt =
      (parser location mag music)
      (number? ly:music?)
    #{
-     \override Stem #'length = #(* 7.0 mag)
-     \override NoteHead #'font-size =
+     \override Stem.length = #(* 7.0 mag)
+     \override NoteHead.font-size =
        #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
      #music
-     \revert Stem #'length
-     \revert NoteHead #'font-size
+     \revert Stem.length
+     \revert NoteHead.font-size
    #})
 
 \relative c' {
@@ -523,7 +612,7 @@ displayBarNum =
      (parser location)
      ()
    (if (eq? #t (ly:get-option 'display-bar-numbers))
-       #@{ \once \override Score.BarNumber #'break-visibility = ##f #@}
+       #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
        #@{#@}))
 @end example
 
@@ -599,36 +688,65 @@ certain nombre d'arguments.
 
 @cindex définition d'une commande markup
 
-La macro @code{markup} construit en Scheme des expressions @emph{markup}
-tout en disposant d'une syntaxe proche de celle de LilyPond.  Par exemple,
+@funindex \displayScheme
+
+Les expressions @emph{markup} sont représentées en Scheme de manière
+interne par la macro @code{markup} :
+
 @example
-(markup #:column (#:line (#:bold #:italic "hello" #:raise 0.4 "world")
-                  #:larger #:line ("foo" "bar" "baz")))
+(markup @var{expression})
+@end example
+
+La commande @code{\displayScheme} permet d'obtenir la représentation en
+Scheme d'une expression @emph{markup} :
+
+@example
+\displayScheme
+\markup @{
+  \column @{
+    \line @{ \bold \italic "hello" \raise #0.4 "world" @}
+    \larger \line @{ foo bar baz @}
+  @}
+@}
 @end example
 
 @noindent
-est équivalent à
+Compiler ce code renverra en console les lignes suivantes :
+
 @example
-#@{ \markup \column @{ \line @{ \bold \italic "hello" \raise #0.4 "world" @}
-                  \larger \line @{ foo bar baz @} @} #@}
+(markup
+  #:line
+  (#:column
+   (#:line
+    (#:bold (#:italic "hello") #:raise 0.4 "world")
+    #:larger
+    (#:line
+     (#:simple "foo" #:simple "bar" #:simple "baz")))))
 @end example
 
+L'impression du @emph{markup} sera suspendue dès lors qu'apparaîtra un
+@w{@samp{\void \displayScheme @var{markup}}}.  Tout comme pour la
+commande @code{\displayMusic}, le résultat de @code{\displayScheme} peut
+être sauvegardé dans un fichier séparé.  Voir à ce sujet
+@ref{Affichage d'expressions musicales}.
+
 @noindent
 Vous pouvez constater les principales règles de traduction entre les
 syntaxes respectives de LilyPond et de Scheme en matière de
 @emph{markup}.  Bien que le passage en syntaxe LilyPond grâce à
-@code{#@{ @dots{} #@}} apporte de la souplesse, nous allons voir comment
+@code{#@{ @dots{} #@}} apporte de la souplesse, nous allons voir comment
 utiliser la macro @code{markup} en Scheme exclusivement.
 
 @quotation
 @multitable @columnfractions .3 .3
 @item @b{LilyPond} @tab @b{Scheme}
 @item @code{\markup markup1} @tab @code{(markup markup1)}
-@item @code{\markup @{ markup1 markup2 ... @}} @tab
-        @code{(markup markup1 markup2 ... )}
+@item @code{\markup @{ markup1 markup2@dots{} @}} @tab
+        @code{(markup markup1 markup2@dots{} )}
 @item @code{\commande-markup} @tab @code{#:commande-markup}
 @item @code{\variable} @tab @code{variable}
-@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )}
+@item @code{\center-column @{ @dots{} @}} @tab
+        @code{#:center-column ( @dots{} )}
 @item @code{chaîne} @tab @code{"chaîne"}
 @item @code{#argument-scheme} @tab @code{argument-scheme}
 @end multitable
@@ -720,11 +838,11 @@ Une commande de @emph{markup} personnalisée se définit à l'aide de la
 macro Scheme @code{define-markup-command}, placée en tête de fichier.
 
 @lisp
-(define-markup-command (@var{nom-commande} @var{layout} @var{props} @var{arg1} @var{arg2} ...)
-    (@var{arg1-type?} @var{arg2-type?} ...)
+(define-markup-command (@var{nom-commande} @var{layout} @var{props} @var{arg1} @var{arg2}@dots{})
+    (@var{arg1-type?} @var{arg2-type?}@dots{})
     [ #:properties ((@var{propriété1} @var{valeur-par-défaut1})
-                    ...) ]
-  ..corps de la commande..)
+                    @dots{}) ]
+  @dots{}corps de la commande@dots{})
 @end lisp
 
 Quelques commentaires sur les arguments :
@@ -771,6 +889,30 @@ ainsi d'éventuelles pertes de performance en utilisant des arguments
 Scheme en tant qu'arguments principaux d'une fonction @emph{markup} dont
 le dernier argument est un @emph{markup}.
 
+@cindex markup macro
+@cindex macro de markup
+@funindex \markup
+@funindex interpret-markup
+
+Les commandes de @emph{markup} ont un cycle de vie relativement
+complexe.  Le corps de la définition d'une commande de @emph{markup} est
+chargé de convertir les arguments de la commande en expression stencil
+qui sera alors renvoyée.  Bien souvent, ceci s'accomplit par un appel à
+la fonction @code{interpret-markup}, en lui passant les arguments
+@var{layout} et @var{props}.  Ces arguments ne seront en principe connus
+que bien plus tardivement dans le processus typographique.  Lors de
+l'expansion d'une expression LilyPond @code{\markup} ou d'une macro
+Scheme @code{macro}, les expressions @emph{markup} auront déjà vu leurs
+composants assemblés en expressions @emph{markup}.  L'évaluation et le
+contrôle du type des arguments à une commande de @emph{markup}
+n'interviennent qu'au moment de l'interprétation de @code{\markup} ou
+@code{markup}.
+Seule l'application de @code{interpret-markup} sur une expression
+@emph{markup} réalisera effectivement la conversion des expressions
+@emph{markup} en stencil, au travers de l'exécution du corps des
+fonctions @emph{markup}.
+
 
 @node Attribution de propriétés
 @unnumberedsubsubsec Attribution de propriétés
@@ -965,7 +1107,7 @@ documentation :
   (number-pair?)
   #:category graphic
   #:properties ((thickness 1))
-  "..documentation.."
+  "@dots{}documentation@dots{}"
   (let ((th (* (ly:output-def-lookup layout 'line-thickness)
                thickness))
         (x (car dest))
@@ -983,7 +1125,7 @@ documentation et n'est d'aucune utilité pour une commande personnalisée.
 (define-markup-command (draw-double-line layout props dest)
   (number-pair?)
   #:properties ((thickness 1))
-  "..documentation.."
+  "@dots{}documentation@dots{}"
   (let ((th (* (ly:output-def-lookup layout 'line-thickness)
                thickness))
         (x (car dest))
@@ -1000,8 +1142,8 @@ par défaut de 6 dixièmes :
   (number-pair?)
   #:properties ((thickness 1)
                 (line-gap 0.6))
-  "..documentation.."
-  ...
+  "@dots{}documentation@dots{}"
+  @dots{}
 @end lisp
 
 Nous ajoutons enfin le code qui dessinera nos deux lignes.  Deux appels
@@ -1038,12 +1180,19 @@ regrouperons les stencils à l'aide de @code{ly:stencil-add} :
 @subsection Définition d'une nouvelle commande de liste de @emph{markups}
 @translationof New markup list command definition
 
+@funindex define-markup-list-command
+@funindex interpret-markup-list
+
 Une commande traitant une liste de @emph{markups} se définit à l'aide de
 la macro Scheme @code{define-markup-list-command}, de manière analogue à
 la macro @code{define-markup-command} abordée à la rubrique
 @ref{Définition d'une nouvelle commande de markup} à ceci près que cette
 dernière renvoie un seul stencil, non une liste de stencils.
 
+La fonction @code{interpret-markup-list}, à l'instar de la fonction
+@code{interpret-markup}, permet de convertir une liste de @emph{markups}
+en liste de stencils.
+
 Dans l'exemple suivant, nous définissons @code{\paragraph}, une commande
 de liste de @emph{markups}, qui renverra une liste de lignes justifiées
 dont la première sera indentée.  La largeur de l'alinéa sera récupérée
@@ -1149,7 +1298,7 @@ commande @code{\applyOutput}.  Celle-ci va insérer un événement
 (@rinternals{ApplyOutputEvent}) dans le contexte spécifié.  Elle répond
 à la syntaxe
 @example
-\applyOutput @var{contexte} @var{procédure}
+\applyOutput @var{Contexte} @var{procédure}
 @end example
 
 @noindent
@@ -1157,7 +1306,7 @@ où @code{@var{procédure}} est une fonction Scheme à trois arguments.
 
 Lors de l'interprétation de cette commande, la fonction
 @code{@var{procédure}} est appelée pout tout objet de rendu appartenant
-au contexte @code{@var{contexte}} à cet instant précis, avec les
+au contexte @code{@var{Contexte}} à cet instant précis, avec les
 arguments suivants :
 @itemize
 @item l'objet de rendu en lui-même,
@@ -1185,6 +1334,15 @@ trouvant sur la ligne médiane ou bien directement à son contact.
 }
 @end lilypond
 
+La @var{procédure} sera interprétée au niveau @code{Score}
+(partition) ou @code{Staff} dès lors que vous utiliserez l'une des
+syntaxes
+
+@example
+\applyOutput #'Score #@var{procédure}
+\applyOutput #'Staff #@var{procédure}
+@end example
+
 
 @node Fonctions de rappel
 @section Fonctions de rappel
@@ -1195,14 +1353,14 @@ peuvent voir leur valeur figée à l'aide d'un @code{\override} comme
 ici@tie{}:
 
 @example
-\override Stem #'thickness = #2.0
+\override Stem.thickness = #2.0
 @end example
 
 Une procédure Scheme peut aussi se charger de modifier des
 propriétés@tie{}:
 
 @lilypond[fragment,verbatim,quote,relative=2]
-\override Stem #'thickness = #(lambda (grob)
+\override Stem.thickness = #(lambda (grob)
     (if (= UP (ly:grob-property grob 'direction))
         2.0
         7.0))
@@ -1278,19 +1436,20 @@ my-callback = #(lambda (grob)
 @section Code Scheme intégré
 @translationof Inline Scheme code
 
-À REVOIR : l'exemple de cette rubrique n'est pas des plus judicieux puisque
-@example
-F = -\tweak #'font-size #-3 -\flageolet
-@end example
-(notez le @samp{-} qui qualifie d'événement postérieur) fonctionne
-correctement dans ce cas d'espèce.  En attendant un remaniement de cette
- section, faisons comme si nous l'ignorions.
+À REVOIR : depuis la rédaction de cette section, LilyPond en est
+arrivé à un point tel que trouver un exemple @emph{simple} où l'on se
+retrouve obligé d'en venir à utiliser du code Scheme devient chose
+ardue.
+
+En attendant un remaniement de cette section, faisons comme si nous
+l'ignorions.
 
 L'inconvénient principal de la commande @code{\tweak} est la rigidité de
-sa syntaxe.  Par exemple, le code suivant produit une erreur.
+sa syntaxe.  Par exemple, le code suivant produit une erreur de syntaxe
+(du moins, c'était le cas auparavant).
 
 @example
-F = \tweak #'font-size #-3 -\flageolet
+F = \tweak font-size #-3 -\flageolet
 
 \relative c'' @{
   c4^\F c4_\F
@@ -1298,10 +1457,6 @@ F = \tweak #'font-size #-3 -\flageolet
 @end example
 
 @noindent
-En d'autres termes, @code{\tweak} ne se comporte pas comme une
-articulation : il ne peut notamment pas être accolé avec les
-symboles @samp{^} ou @samp{_}.
-
 C'est en se servant du langage Scheme que l'on peut résoudre ce
 problème.  Dans cet exemple, on a recours aux méthodes décrites dans
 @ref{Ajout d'articulation à des notes (exemple)}, en
@@ -1393,7 +1548,7 @@ rehaussé.
          (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
 
 \relative c'' {
-  \override Tie #'after-line-breaking =
+  \override Tie.after-line-breaking =
   #my-callback
   c1 ~ \break
   c2 ~ c
@@ -1417,9 +1572,10 @@ modifiés par @code{\override}.  Parmi ceux-là, les objets
 
 @example
 \overrideProperty
-#"Score.NonMusicalPaperColumn"  % Nom de l'objet
-#'line-break-system-details     % Nom de la propriété
-#'((next-padding . 20))         % Valeur
+Score.NonMusicalPaperColumn      % Nom de l'objet
+  . line-break-system-details    % Nom de la propriété
+  . next-padding                 % Nom de la sous-propriété (optionnel)
+  . #20                          % Valeur
 @end example
 
 Notez toutefois que la commande @code{\override} peut tout de même être
index c63427f72e0a3333457fc054a9ef571aabbd4de5..8a9b86a145f03b79f9f1acb4d3be011f3cb1fdb7 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: ea78e54687b8beb80958e55bcd3ddfbe90ab5967
+    Translation of GIT committish: e6e64de1da49ff8c6005daa5fd81adc8387b2668
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Jean-Charles Malahieude
 
@@ -233,7 +233,17 @@ Scheme prend aussi en charge des types de données composites.  LilyPond
 utilise beaucoup les paires, listes, listes associatives et tables de
 hachage.
 
-@subheading Paires
+@menu
+* Paires::
+* Listes::
+* Listes associatives (alists)::
+* Tables de hachage::
+@end menu
+
+
+@node Paires
+@unnumberedsubsubsec Paires
+@translationof Pairs
 
 Le type de donnée composite fondamental est la paire (@code{pair}).
 Comme son nom l'indique, il s'agit de lier deux valeurs, à l'aide de
@@ -275,7 +285,7 @@ procédures Scheme @code{car} et @code{cdr}.
 
 @lisp
 guile> (define mypair (cons 123 "hello there")
-... )
+@dots{} )
 guile> (car mypair)
 123
 guile> (cdr mypair)
@@ -285,12 +295,14 @@ guile>
 
 @noindent
 
-Note :  @code{cdr} se prononce @qq{couldeur}, comme l'indiquent Sussman et
+Note : @code{cdr} se prononce @qq{couldeur}, comme l'indiquent Sussman et
 Abelson -- voir
 @uref{http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html#footnote_Temp_133}.
 
 
-@subheading Listes
+@node Listes
+@unnumberedsubsubsec Listes
+@translationof Lists
 
 Autre structure de donnée commune en Scheme : la liste (@emph{list}).
 Une liste se définit comme étant vide (représentée par @code{'()}) ou
@@ -322,7 +334,9 @@ d'ailleurs jusqu'à considérer Scheme comme un dialecte du lisp, où
 que toute expression Scheme est une liste.
 
 
-@subheading Listes associatives (alists)
+@node Listes associatives (alists)
+@unnumberedsubsubsec Listes associatives (alists)
+@translationof Association lists (alists)
 
 Il existe un type particulier de liste : la @emph{liste associative} --
 ou @emph{alist}.  Une @emph{alist} permet de stocker des données dans le
@@ -349,7 +363,9 @@ LilyPond recourt abondamment aux @emph{alists} pour stocker des
 propriétés ou autres données.
 
 
-@subheading Tables de hachage
+@node Tables de hachage
+@unnumberedsubsubsec Tables de hachage
+@translationof Hash tables
 
 Il s'agit d'une structure de données à laquelle LilyPond fait parfois
 appel.  Une table de hachage (@emph{hash table}) peut se comparer à une
@@ -530,14 +546,22 @@ Une procédure Scheme est une expression Scheme qui renverra une valeur
 issue de son exécution.  Les procédures Scheme sont capables de
 manipuler des variables qui ne sont pas définies en leur sein.
 
+@menu
+* Définition de procédures::
+* Prédicats::
+* Valeurs de retour::
+@end menu
 
-@subheading Définition de procédures
+
+@node Définition de procédures
+@unnumberedsubsubsec Définition de procédures
+@translationof Defining procedures
 
 En Scheme, on définit une procédure à l'aide de l'instruction
 @code{define} :
 
 @example
-(define (nom-fonction argument1 argument2 ... argumentn)
+(define (nom-fonction argument1 argument2@dots{} argumentn)
  expression-scheme-qui-donnera-une-valeur-en-retour)
 @end example
 
@@ -560,7 +584,9 @@ guile> (moyenne 3 12)
 @end lisp
 
 
-@subheading Prédicats
+@node Prédicats
+@unnumberedsubsubsec Prédicats
+@translationof Predicates
 
 Une procédure Scheme chargée de retourner une valeur booléenne s'appelle
 un @qq{prédicat} (@emph{predicate}).  Par convention, plutôt que par
@@ -576,7 +602,9 @@ guile> (moins-de-dix? 15)
 @end lisp
 
 
-@subheading Valeurs de retour
+@node Valeurs de retour
+@unnumberedsubsubsec Valeurs de retour
+@translationof Return values
 
 Une procédure Scheme doit toujours renvoyer une valeur de retour, en
 l'occurrence la valeur de la dernière expression exécutée par cette
@@ -602,7 +630,7 @@ retour de la dernière clause de ce bloc :
 
 @lisp
 guile> (let ((x 2) (y 3) (z 4)) (display (+ x y)) (display (- z 4))
-... (+ (* x y) (/ z x)))
+@dots{} (+ (* x y) (/ z x)))
 508
 @end lisp
 
@@ -611,7 +639,15 @@ guile> (let ((x 2) (y 3) (z 4)) (display (+ x y)) (display (- z 4))
 @subsection Scheme et les conditions
 @translationof Scheme conditionals
 
-@subheading if
+@menu
+* if::
+* cond::
+@end menu
+
+
+@node if
+@unnumberedsubsubsec if
+@translationof if
 
 Scheme dispose d'une procédure @code{if} :
 
@@ -632,7 +668,9 @@ guile> (if (> a b) "a est plus grand que b" "a n'est pas plus grand que b")
 @end lisp
 
 
-@subheading cond
+@node cond
+@unnumberedsubsubsec cond
+@translationof cond
 
 Une autre manière d'introduire une condition en Scheme est d'utiliser
 l'instruction @code{cond} :
@@ -640,7 +678,7 @@ l'instruction @code{cond} :
 @example
 (cond (expression-test-1 expression-résultat-séquence-1)
       (expression-test-2 expression-résultat-séquence-2)
-      ...
+      @dots{}
       (expression-test-n expression-résultat-séquence-n))
 @end example
 
@@ -650,8 +688,8 @@ Comme par exemple ici :
 guile> (define a 6)
 guile> (define b 8)
 guile> (cond ((< a b) "a est plus petit que b")
-...          ((= a b) "a égale b")
-...          ((> a b) "a est plus grand que b"))
+@dots{}          ((= a b) "a égale b")
+@dots{}          ((> a b) "a est plus grand que b"))
 "a est plus petit que b"
 @end lisp
 
@@ -689,7 +727,8 @@ expressions, tout comme le langage humain est structuré en mots et
 phrases.  LilyPond dispose d'un analyseur lexical (appelé @emph{lexer})
 qui sait identifier les jetons -- nombres, chaînes, éléments Scheme,
 hauteurs etc. -- ainsi que d'un analyseur syntaxique (appelé
-@emph{parser}) -- voir l'annexe @ruser{Grammaire de LilyPond}.  Dès lors
+@emph{parser}) -- voir 
+@rcontribnamed{LilyPond grammar, Grammaire de LilyPond}.  Dès lors
 que le programme sait quelle règle grammaticale particulière doit
 s'appliquer, il exécute les consignes qui lui sont associées.
 
@@ -865,7 +904,7 @@ traLaLa = @{ c'4 d'4 @}
 est convertie, en interne, en une définition Scheme :
 
 @example
-(define traLaLa @var{valeur Scheme de `@code{... }'})
+(define traLaLa @var{valeur Scheme de `@code{@dots{}}'})
 @end example
 
 Cela signifie que variables LilyPond et variables Scheme peuvent tout à
@@ -911,7 +950,7 @@ syntaxe LilyPond.  Au lieu de définir @code{\twice}, nous aurions tout
 aussi bien pu écrire
 
 @example
-...
+@dots{}
 $(make-sequential-music (list newLa))
 @end example
 
@@ -937,7 +976,7 @@ d'une liste dans le contexte environnant.  Grâce à ces opérateurs, la
 dernière partie de notre fonction pourrait s'écrire ainsi :
 
 @example
-...
+@dots{}
 @{ #@@newLa @}
 @end example
 
@@ -959,7 +998,7 @@ ici :
 #(define (nopc)
   (ly:set-option 'point-and-click #f))
 
-...
+@dots{}
 #(nopc)
 @{ c'4 @}
 @end example
@@ -986,7 +1025,7 @@ la valeur associée.  Voici comment procéder selon la syntaxe de
 LilyPond :
 
 @example
-\override Stem #'thickness = #2.6
+\override Stem.thickness = #2.6
 @end example
 
 Cette instruction ajuste l'apparence des hampes.  Une entrée
@@ -1013,7 +1052,18 @@ pour les autres.  Ainsi, l'objet hampe possède une propriété
 @subsection Variables LilyPond composites
 @translationof LilyPond compound variables
 
-@subheading Décalages (@emph{offsets})
+@menu
+* Décalages (offsets)::
+* Fractions::
+* Étendues (extents)::
+* Propriété en alists::
+* Chaînes d'alist::
+@end menu
+
+
+@node Décalages (offsets)
+@unnumberedsubsubsec Décalages (@emph{offsets})
+@translationof Offsets
 
 Les décalages (@emph{offset}) sur deux axes (coordonnées X et Y) sont
 stockés sous forme de @emph{paires}. Le @code{car} de l'offset
@@ -1021,7 +1071,7 @@ correspond à l'abscisse (coordonnée X) et le @code{cdr} à l'ordonnée
 (coordonnée Y).
 
 @example
-\override TextScript #'extra-offset = #'(1 . 2)
+\override TextScript.extra-offset = #'(1 . 2)
 @end example
 
 Cette clause affecte la paire @code{(1 . 2)} à la propriété
@@ -1034,7 +1084,9 @@ Les procédures permettant de manipuler les offsets sont regroupées dans
 le fichier @file{scm/lily-library.scm}.
 
 
-@subheading Fractions
+@node Fractions
+@unnumberedsubsubsec Fractions
+@translationof Fractions
 
 Les fractions, tel que LilyPond les utilise, sont aussi stockées sous
 forme de @emph{paire}.  Alors que Scheme est tout à fait capable de
@@ -1046,7 +1098,9 @@ en LilyPond correspond à @code{(2 . 4)} en Scheme, et @code{#2/4} en
 LilyPond correspond à @code{1/2} en Scheme.
 
 
-@subheading Étendues (@emph{extents})
+@node Étendues (extents)
+@unnumberedsubsubsec Étendues (@emph{extents})
+@translationof Extents
 
 Les paires permettent aussi de stocker des intervalles qui représentent
 un ensemble de nombres compris entre un minimum (le @code{car}) et un
@@ -1064,7 +1118,9 @@ l'utilisation de ces procédures dans toute la mesure du possible afin
 d'assurer la cohérence du code.
 
 
-@subheading Propriété en @emph{alists}
+@node Propriété en alists
+@unnumberedsubsubsec Propriété en @emph{alists}
+@translationof Property alists
 
 Les propriétés en @emph{alists} sont des structures de données
 particulières à LilyPond.  Il s'agit de listes associatives dont les
@@ -1075,7 +1131,9 @@ Les propriétés LilyPond sont des symboles Scheme, à l'instar de
 @code{'thickness}.
 
 
-@subheading Chaînes d'@emph{alist}
+@node Chaînes d'alist
+@unnumberedsubsubsec Chaînes d'@emph{alist}
+@translationof Alist chains
 
 Une chaîne d'@emph{alist} est une liste contenant les listes
 associatives d'une propriété.
@@ -1200,7 +1258,7 @@ affichera
                   'text
                   "f"))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 0 0))))
 @end example
@@ -1235,11 +1293,11 @@ L'information sera encore plus lisible après un peu de mise en forme :
                               (make-music 'AbsoluteDynamicEvent
                                 'text
                                 "f"))
-              'duration (ly:make-duration 2 0 1 1)
+              'duration (ly:make-duration 2 0 1/1)
               'pitch    (ly:make-pitch 0 0 0))))
 @end example
 
-Une séquence musicale @code{@{ ... @}} se voit attribuer le nom de
+Une séquence musicale @code{@{ @dots{} @}} se voit attribuer le nom de
 @code{SequentialMusic}, et les expressions qu'elle contient sont
 enregistrées en tant que liste dans sa propriété @code{'elements}.  Une
 note est représentée par un objet @code{NoteEvent} -- contenant les
@@ -1271,7 +1329,7 @@ someNote = c'
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 0 0))
 @end example
@@ -1290,7 +1348,7 @@ someNote = <c'>
   (list (make-music
           'NoteEvent
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 0 0))))
 @end example
@@ -1307,7 +1365,7 @@ pour afficher la représentation en Scheme d'une expression musicale :
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 0 0))
 @end example
@@ -1360,7 +1418,7 @@ comment le résultat est représenté en interne.
                   'span-direction
                   -1))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 5 0))
         (make-music
@@ -1371,7 +1429,7 @@ comment le résultat est représenté en interne.
                   'span-direction
                   1))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 5 0))))
 @end example
@@ -1388,7 +1446,7 @@ Examinons à présent la saisie :
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 5 0))))
 @end example
@@ -1397,10 +1455,10 @@ Nous aurons donc besoin, dans notre fonction, de cloner cette expression
 -- de telle sorte que les deux notes constituent la séquence -- puis
 d'ajouter un @code{SlurEvent} à la propriété @code{'articulations} de
 chacune d'elles, et enfin réaliser un @code{SequentialMusic} de ces deux
-@code{EventChords}.  En tenant compte du fait que, dans le cadre d'un
-ajout, une propriété non définie est lue @code{'()} (une liste vide),
-aucune vérification n'est requise avant d'introduire un nouvel élément
-en tête de la propriété @code{articulations}.
+éléments @code{NoteEvent}.  En tenant compte du fait que, dans le cadre
+d'un ajout, une propriété non définie est lue @code{'()} (une liste
+vide), aucune vérification n'est requise avant d'introduire un nouvel
+élément en tête de la propriété @code{articulations}.
 
 @example
 doubleSlur = #(define-music-function (parser location note) (ly:music?)
@@ -1422,14 +1480,13 @@ doubleSlur = #(define-music-function (parser location note) (ly:music?)
 @translationof Adding articulation to notes (example)
 
 Le moyen d'ajouter une articulation à des notes consiste à fusionner
-deux expressions musicales en un même contexte, comme nous l'avons vu à
-la rubrique @ruser{Création d'un contexte}.  L'option de réaliser
+deux expressions musicales en un même contexte.  L'option de réaliser
 nous-mêmes une fonction musicale à cette fin nous offre l'avantage de
 pouvoir alors ajouter une articulation, telle qu'une instruction de
 doigté, individuellement à l'une des notes d'un accord, ce qui est
 impossible dans le cadre d'une simple fusion de musique indépendante.
 
-Un @code{$variable} au milieu de la notation @code{#@{...#@}} se
+Un @code{$variable} au milieu de la notation @code{#@{ @dots{} #@}} se
 comporte exactement comme un banal @code{\variable} en notation LilyPond
 traditionnelle.  Nous savons déjà que
 
@@ -1457,7 +1514,7 @@ le résultat auquel nous désirons aboutir :
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch -1 0 0))))
 =====
@@ -1472,7 +1529,7 @@ le résultat auquel nous désirons aboutir :
           'articulation-type
           "accent"))
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch -1 0 0))
 @end example
@@ -1503,7 +1560,7 @@ se déduit la plupart de temps de par son nom -- c'est d'ailleurs une
 excellente pratique que l'on retrouve dans de nombreux autres langages.
 
 @example
-"Ajoute un accent..."
+"Ajoute un accent@dots{}"
 @end example
 
 @noindent
@@ -1618,7 +1675,7 @@ Par acquis de conscience, vérifions que tout ceci fonctione :
 
 We have seen how LilyPond output can be heavily modified using
 commands like
-@code{\override TextScript #'extra-offset = ( 1 . -1)}.  But
+@code{\override TextScript.extra-offset = ( 1 . -1)}.  But
 we have even more power if we use Scheme.  For a full explanation
 of this, see the @ref{Scheme tutorial}, and
 @ref{Interfaces for programmers}.
@@ -1634,7 +1691,7 @@ TODO Find a simple example
 @lilypond[quote,verbatim,ragged-right]
 padText = #(define-music-function (parser location padding) (number?)
 #{
-  \once \override TextScript #'padding = #padding
+  \once \override TextScript.padding = #padding
 #})
 
 \relative c''' {
@@ -1658,7 +1715,7 @@ We can use it to create new commands:
 tempoPadded = #(define-music-function (parser location padding tempotext)
   (number? markup?)
 #{
-  \once \override Score.MetronomeMark #'padding = #padding
+  \once \override Score.MetronomeMark.padding = #padding
   \tempo \markup { \bold #tempotext }
 #})
 
diff --git a/Documentation/fr/included/GNUmakefile b/Documentation/fr/included/GNUmakefile
deleted file mode 100644 (file)
index afe7a4d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
index 794154170d11b1d4c20723a0391d1d2c86e97c0d..0a50d619d0dce7a22260904fdfb6c2a143a9b7ec 100644 (file)
@@ -2,7 +2,7 @@
 @c This file is part of web/download.itexi and
 @c learning/tutorial.itely
 @ignore
-    Translation of GIT committish: 72012c900e38247806dcc32c01e162f02c63287b
+    Translation of GIT committish: 29d5e0a64d0eee69e4ebee1e76e4df26ae58190b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -53,7 +53,7 @@ compilation du fichier que vous venez de sauvegarder.
 @subsubheading Étape 3. Visualisation du résultat
 
 La compilation s'achève par la création d'un fichier PDF portant le même
-nom que le fichier source@tie{}; ce nouveau fichier sera automatiquement
+nom que le fichier source ; ce nouveau fichier sera automatiquement
 ouvert par votre lecteur PDF par défaut et affiché à l'écran.
 
 @sourceimage{Learning_Macos_pdf_output,,,}
@@ -75,7 +75,7 @@ Pensez à toujours enregistrer votre travail avant de lancer l'option
 @w{@code{Compile > Tyepset}} du menu.  Si le PDF n'apparaît pas,
 vérifiez que la fenêtre @qq{log} ne comporte pas d'erreur.
 
-Si vous n'utilisez pas le lecteur de PDF par défaut de Mac@tie{}OS et
+Si vous n'utilisez pas le lecteur de PDF par défaut de Mac OS et
 qu'un fichier résultant d'une précédente compilation est encore ouvert
 dans votre lecteur, la régénération de ce PDF peut bloquer tant que vous
 ne fermez pas le fichier ouvert.
@@ -96,77 +96,76 @@ en cas de compilation infructueuse.}
 Double-cliquez sur l'icone LilyPond qui se trouve sur le bureau.
 S'ouvre alors un fichier d'exemple.
 
-@sourceimage{Learning_Win7_Welcome_File_Whole,,,}
+@sourceimage{LilyPad,,,}
 
-Dans le menu, sélectionnez @w{@code{Fichier > Enregistrer sous}}.  Ne
-prenez pas l'option @w{@code{Fichier > Enregistrer}} pour ce fichier
-exemple@tie{}: LilyPond attend un nom de fichier valide.
+Dans le menu, sélectionnez @w{@code{Fichier > Enregistrer sous}}
+(@emph{Save as@dots{}}).  Ne prenez pas l'option @w{@code{Fichier >
+Enregistrer}} (@emph{Save}) pour ce fichier exemple : LilyPond attend un
+nom de fichier valide.
 
 
-@sourceimage{Learning_Win7_Save_Menu,,,}
+@sourceimage{FileSave,,,}
 
 Affectez un nom à votre fichier, comme par exemple @file{test.ly}.
 
-@sourceimage{Learning_Win7_Save_File_With_Name,,,}
+@sourceimage{SaveAs,,,}
 
 
-@subsubheading Étape 2a. Compilation par glisser-déposer
+@subsubheading Étape 2. Compilation
 
-Selon votre préférence, vous pouvez compiler votre fichier
-en le faisant glisser puis en le déposant sur l'icone LilyPond
+La transformation d'un fichier LilyPond en partition s'obtient par
+compilation.  Celle-ci peut se lancer de différentes manières :
+par glisser-déposer, par un clic de droite, par un double clic ou
+encore en ligne de commande (dans une fenêtre d'interpréteur DOS).
+Nous examinerons ici les trois premières options.
 
-@sourceimage{Learning_Win7_Open_Dragndrop,,,}
+1. Faire glisser puis déposer le fichier sur l'icone LilyPond
 
-ou en ouvrant le menu contextuel par un clic-droit, puis en prenant
-l'option @w{@code{Ouvrir avec > LilyPond}}.
+@sourceimage{DragDrop,,,}
 
-@sourceimage{Learning_Win7_Open_Context_Menu,,,}
 
+Bien qu'il ne semble pas se passer grand chose, deux fichiers --
+@file{test.log} et @file{test.pdf} -- devraient apparaître après
+quelques instants sur votre bureau.
 
-@subsubheading Étape 2b. Compilation par double-clic
+2. Ouvrir le menu contextuel par un clic-droit, puis en prendre
+l'option @w{@code{Generate PDF @dots{} }} (@emph{Générer le PDF}).
 
-Vous pouvez aussi faire un double-clic sur le fichier @file{test.ly}.
+@sourceimage{GenPDF,,,}
 
+3. Faire un double-clic sur le fichier @file{test.ly}.
 
-@subsubheading Étape 3. Visualisation du résultat
-
-Au cours de la compilation du fichier @file{test.ly}, une fenêtre
-d'interpréteur de commande s'ouvre et se referme.  Trois fichiers
-complémentaires seront générés pendant ce temps là.
 
-@sourceimage{Learning_Win7_All_Files_Created,,,}
+@subsubheading Étape 3. Visualisation du résultat
 
-Le fichier PDF contient la gravure de votre fichier @file{test.ly}.
+@file{test.pdf} contient la gravure de votre fichier @file{test.ly}.  Un
+double-clic sur son icône devrait l'ouvrir dans votre lecteur PDF :
 
-@sourceimage{Learning_Win7_Pdf_Output,,,}
+@sourceimage{PDFRead,,,}
 
 
 @subsubheading Autres commandes
 
 Pour créer un nouveau fichier, sélectionnez @w{@code{Fichier > Nouveau}}
-à parti de n'importe quel fichier déjà existant
+à partir de n'importe quel fichier déjà existant ou bien
+@w{@code{Fichier > Ouvrir}} pour reprendre un fichier sauvegardé.  La
+modification d'un fichier existant est aussi accessible à partir de
+l'option @w{@code{Edit source}} (@emph{Éditer la source}) du menu
+contextuel.
 
-@sourceimage{Learning_Win7_New_Menu,,,}
-
-@noindent
-ou bien @w{@code{Fichier > Ouvrir}} pour reprendre un fichier sauvegardé.
-
-@sourceimage{Learning_Win7_Open_Menu,,,}
+@sourceimage{EditFile,,,}
 
 Pensez à toujours enregistrer votre travail avant de compiler votre
-fichier.  Si LilyPond ne crée pas de PDF, consultez le fichier de
-journalisation -- généré au fil du processus de compilation -- et
-vérifiez qu'il ne comporte pas d'erreur.
+fichier.  Si LilyPond ne crée pas de PDF ou que le résultat ne
+correspond pas à vos attentes, consultez le fichier de journalisation --
+généré au fil du processus de compilation -- et vérifiez qu'il ne
+comporte pas d'erreur.
 
-@sourceimage{Learning_Win7_Log_File,,,}
+@sourceimage{BadLog,,,}
 
 Ce fichier journal est remplacé à chaque compilation de votre fichier
 LilyPond.
 
-Le fichier PS est utilisé en interne par LilyPond pour créer le PDF.  Il
-sera écrasé à chaque fois que vous relancerez la compilation de votre
-fichier. 
-
 Pensez à fermer le fichier dans votre lecteur de PDF à chaque fois que
 vous relancez la compilation, afin d'être sûr que celle-ci arrive à son
 terme.
@@ -185,13 +184,13 @@ en cas de compilation infructueuse.}
 
 @subsubheading Étape 1. Création d'un fichier @file{.ly}
 
-Créez un fichier texte du nom de @file{test.ly} et saisissez@tie{}:
+Créez un fichier texte du nom de @file{test.ly} et saisissez :
 
 @c double \\ required because this is inside a macro!
 @example
 \\version "@w{@versionStable{}}"
 @{
-  c' e' g' e'
+@ @ c' e' g' e'
 @}
 @end example
 
@@ -199,14 +198,14 @@ Créez un fichier texte du nom de @file{test.ly} et saisissez@tie{}:
 @subsubheading Étape 2. Compilation en ligne de commande
 
 Pour traiter le fichier @file{test.ly}, tapez ce qui suit à l'invite de
-commande@tie{}:
+commande :
 
 @example
 lilypond test.ly
 @end example
 
 @noindent
-Vous verrez alors quelque chose qui ressemblera à@tie{}:
+Vous verrez alors quelque chose qui ressemblera à :
 
 @example
 GNU LilyPond @w{@versionStable{}}
index 7ab3b5d3776be719036e302b9185d327ad23a2ff..751bc6b00e3cb3c797012b877c54f4cdfa3d575d 100644 (file)
@@ -1,9 +1,9 @@
-@c -*- coding: utf-8; mode: texinfo; documentlangage: fr -*-
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 @c This file is part of web/community.itexi and
 @c contributor/introduction.itely
 
 @ignore
-    Translation of GIT committish: 446dc1f3ac9bfff6bfee31de929698b0425da6fe
+    Translation of GIT committish: 0a8b4e0f1b0d68659a584be48c7b96da358d501d
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -179,5 +179,3 @@ de grands travaux à l'avenir.
 @end macro
 
 @end ignore
-
-@c  LocalWords:  itemize rcontribnamed subheading rcontrib
diff --git a/Documentation/fr/learning/GNUmakefile b/Documentation/fr/learning/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index f546f05134a03a92c76c926ad3e2c1fe2a68c3f8..7ce9e53cc1fa00a1bd9c50be01a44c074d800d1d 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-   Translation of GIT committish: 8df40d45e4366f4e9baa2cec3b7eb38b6482150f
+   Translation of GIT committish: 45f95ed2dabb3aef3c9a6995701dc255ba88d68a
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -26,7 +26,7 @@ Tutorial guidelines:  (different from policy.txt!)
 
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @c Translators: Nicolas Grandclaude, Ludovic Sardain, Gauvain Pocentek
 @c Translation checkers: Jean-Charles Malahieude, Valentin Villenave, John Mandereau
@@ -55,7 +55,7 @@ Cette section présente la notation courante dont on a besoin pour
 écrire une voix sur une portée.
 
 @menu
-* Contrôle de mesure::
+* Barre et contrôle de mesure::
 * Altérations et armure::
 * Liaisons::
 * Articulations et nuances::
@@ -65,8 +65,34 @@ Cette section présente la notation courante dont on a besoin pour
 @end menu
 
 
+@node Barre et contrôle de mesure
+@subsection Barre et contrôle de mesure
+@translationof Bar lines and bar checks
+
+@menu
+* Barre de mesure::
+* Contrôle de mesure::
+@end menu
+
+
+@node Barre de mesure
+@unnumberedsubsubsec Barre de mesure
+@translationof Bar lines
+
+Les simples barres de mesure se placent automatiquement ; nul n'est
+besoin de les saisir. D'autres types de barre de mesure sont accessibles
+par la commande @code{\bar}, tels que @code{\bar "||"} pour une double
+barre ou @code{\bar "|."} pour la barre finale.  Pour une liste des
+différents styles de barre de mesure, voir
+@ruser{Barres de mesure}.
+
+@lilypond[verbatim,quote,relative=2]
+g1 e1 \bar "||" c2. c'4 \bar "|."
+@end lilypond
+
+
 @node Contrôle de mesure
-@subsection  Contrôle de mesure
+@unnumberedsubsubsec Contrôle de mesure
 @translationof Bar checks
 
 Les contrôles de barre de mesure -- @emph{bar checks} en anglais -- ne
@@ -84,6 +110,7 @@ g1 | e1 | c2. c'4 | g4 c g e | c4 r r2 |
 
 @seealso
 Manuel de notation :
+@ruser{Barres de mesure},
 @ruser{Vérification des limites et numéros de mesure}.
 
 
@@ -91,11 +118,19 @@ Manuel de notation :
 @subsection Altérations et armure
 @translationof Accidentals and key signatures
 
+@menu
+* Altérations::
+* Armures::
+* Attention aux armures et aux hauteurs::
+@end menu
+
 @warning{Si, comme nombre de nouveaux utilisateurs, ce qui suit vous
 paraît déroutant, lisez cette partie jusqu'au bout, à plus forte raison
 si vous n'avez jamais fait de solfège !}
 
-@subheading Altérations
+@node Altérations
+@unnumberedsubsubsec Altérations
+@translationof Accidentals
 
 @cindex altérations
 @cindex dièse
@@ -138,7 +173,9 @@ cis1 ees fisis, aeses
 @end lilypond
 
 
-@subheading Armures
+@node Armures
+@unnumberedsubsubsec Armures
+@translationof Key signatures
 
 @cindex armure, définition de l'
 @cindex armure, altérations à l'
@@ -170,7 +207,9 @@ a
 @smallspace
 
 
-@subheading Attention aux armures et aux hauteurs
+@node Attention aux armures et aux hauteurs
+@unnumberedsubsubsec Attention aux armures et aux hauteurs
+@translationof Warning key signatures and pitches
 
 Glossaire musicologique :
 @rglosnamed{accidental,altération}, @rglosnamed{key signature,armure},
@@ -244,6 +283,13 @@ Manuel de notation :
 @subsection Liaisons
 @translationof Ties and slurs
 
+@menu
+* Liaisons de prolongation::
+* Liaisons d'articulation::
+* Liaisons de phrasé::
+* Attention aux types de liaison::
+@end menu
+
 @cindex liaisons de prolongation
 @cindex liaisons de tenue
 @cindex prolongation, liaisons de
@@ -255,7 +301,9 @@ Manuel de notation :
 @funindex \( ... \)
 
 
-@subheading Liaisons de prolongation
+@node Liaisons de prolongation
+@unnumberedsubsubsec Liaisons de prolongation
+@translationof Ties
 
 Glossaire musicologique :
 @rglosnamed{tie,liaison de tenue}.
@@ -269,9 +317,13 @@ g4~ g c2~ | c4 ~ c8 a8 ~ a2 |
 @end lilypond
 
 
+@node Liaisons d'articulation
+@unnumberedsubsubsec Liaisons d'articulation
+@translationof Slurs
+
 @cindex liaisons d'articulation
 @cindex articulation, liaisons d'
-@subheading Liaisons d'articulation
+@cindex legato
 
 @c Le terme de "slur" a deux sens en français : articulation et phrasé.
 @c Je garde ici le terme "legato", tel qu'il apparaît dans le texte original,
@@ -291,10 +343,12 @@ d4( c16) cis( d e c cis d) e( d4)
 @end lilypond
 
 
+@node Liaisons de phrasé
+@unnumberedsubsubsec Liaisons de phrasé
+@translationof Phrasing slurs
+
 @cindex liaisons de phrasé
 @cindex phrasé, liaisons de
-@cindex legato
-@subheading Liaisons de phrasé
 
 De plus longues liaisons, dites de phrasé, sont délimitées par @code{\(}
 et @code{\)}.  Il est possible d'avoir en même temps des legatos et des
@@ -305,11 +359,15 @@ fois.
 g4\( g8( a) b( c) b4\)
 @end lilypond
 
-@smallspace
+@c @ smallspace
+
+
+@node Attention aux types de liaison
+@unnumberedsubsubsec Attention aux types de liaison
+@translationof Warnings slurs vs. ties
 
 
 @cindex liaisons d'articulation et de prolongation, différences
-@subheading Attention aux types de liaison
 
 Glossaire musicologique :
 @rglos{articulation}, @rglosnamed{slur,liaison},
@@ -337,7 +395,16 @@ Manuel de notation :
 @subsection Articulations et nuances
 @translationof Articulation and dynamics
 
-@subheading Articulations
+@menu
+* Articulation::
+* Doigté::
+* Nuance::
+@end menu
+
+
+@node Articulation
+@unnumberedsubsubsec Articulation
+@translationof Articulations
 
 @cindex articulation
 @cindex accents
@@ -350,12 +417,15 @@ Des @notation{articulations} peuvent être ajoutées à une note, au moyen
 d'un tiret @code{-} suivi d'un caractère :
 
 @lilypond[verbatim,quote,relative=2]
-c4-^ c-+ c-- c-|
+c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
 
-@subheading Doigtés
+@node Doigté
+@unnumberedsubsubsec Doigté
+@translationof Fingerings
+
 @cindex doigtés
 
 @funindex ^
@@ -383,7 +453,9 @@ c4_-^1 d^. f^4_2-> e^-_+
 @end lilypond
 
 
-@subheading Nuances
+@node Nuance
+@unnumberedsubsubsec Nuance
+@translationof Dynamics
 
 @cindex nuances
 @cindex decrescendo
@@ -526,7 +598,16 @@ Manuel de notation :
 @subsection Commandes rythmiques avancées
 @translationof Advanced rhythmic commands
 
-@subheading Mesure incomplète
+@menu
+* Mesure incomplète::
+* Nolet::
+* Note d'ornement::
+@end menu
+
+
+@node Mesure incomplète
+@unnumberedsubsubsec Mesure incomplète
+@translationof Partial measure
 
 @cindex levée
 @cindex anacrouse
@@ -547,33 +628,37 @@ c2 d |
 @end lilypond
 
 
-@subheading Nolets
+@node Nolet
+@unnumberedsubsubsec Nolet
+@translationof Tuplets
 
 @cindex nolets
 @cindex triolets
 
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
 
 Glossaire musicologique : @rglosnamed{note value,valeur d'une note},
 @rglosnamed{triplet,triolet}.
 
-Les @notation{nolets} sont créés avec la commande @code{\times}, qui
-prend deux arguments : une fraction et une expression musicale.  La
-durée des notes de l'expression musicale est multipliée par la
-fraction.  Par exemple les notes d'un @notation{triolet} durent les
-deux tiers de la durée de leur notation réelle, cette fraction est
-donc de 2/3 pour les triolets :
+Les @notation{nolets} sont créés avec la commande @code{\tuplet}, qui
+prend deux arguments : une fraction et une expression musicale. La
+fraction représente le nombre de notes du nolet à inscrire dans la durée
+normalement attribuée à un certain nombre de notes de même valeur. Dans
+le cas de triolets, par exemple, trois notes recouvrent la même durée
+que deux ; un @notation{triolet} portera donc une fraction de 3/2.
 
 @lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
 @end lilypond
 
 
-@subheading Notes d'ornement
+@node Note d'ornement
+@unnumberedsubsubsec Note d'ornement
+@translationof Grace notes
 
 @cindex notes d'ornement
 @cindex ornementation
@@ -597,7 +682,7 @@ Des @notation{notes d'ornement} s'obtiennent en appliquant la commande
 expression musicale :
 
 @lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
 c2 \appoggiatura b16 c2 |
 c2 \acciaccatura b16 c2 |
 @end lilypond
@@ -636,6 +721,12 @@ il y a plus d'une voix sur une même portée.
 
 @cindex expression musicale
 
+@menu
+* Analogie avec les expressions mathématiques::
+* Expressions musicales simultanées -- plusieurs portées::
+* Expressions musicales simultanées -- une seule portée::
+@end menu
+
 Dans les fichiers source LilyPond, la musique est représentée par ce
 qu'on appelle des @emph{expressions musicales}.  En soi, une seule note
 peut constituer une expression musicale :
@@ -664,7 +755,9 @@ combinée à deux notes :
 @end lilypond
 
 
-@subheading Analogie avec les expressions mathématiques
+@node Analogie avec les expressions mathématiques
+@unnumberedsubsubsec Analogie avec les expressions mathématiques
+@translationof Analogy mathematical expressions
 
 @cindex expression
 
@@ -694,7 +787,9 @@ arbitraire, ce qui est nécessaire pour des partitions complexes comme
 de la musique polyphonique.
 
 
-@subheading Expressions musicales simultanées -- plusieurs portées
+@node Expressions musicales simultanées -- plusieurs portées
+@unnumberedsubsubsec Expressions musicales simultanées -- plusieurs portées
+@translationof Simultaneous music expressions multiple staves
 
 @cindex portées multiples
 @cindex polyphonie
@@ -736,18 +831,21 @@ avec un nombre d'espaces différent.  LilyPond se moque -- ou presque
 -- de l'espace qu'il peut y avoir ou non au début d'une ligne, mais
 un code bien indenté est bien plus lisible par des humains.
 
-@warning{La hauteur de chaque note saisie est relative à la précédente,
-mais pas au @code{c''} de la commande @code{@bs{}relative} de départ.}
+@warning{La hauteur de chaque note saisie est relative à la précédente ;
+seule la première première note verra sa hauteur déterminée relativement
+au au @code{c''} de la commande @code{@bs{}relative} de départ.}
 
 
-@subheading Expressions musicales simultanées -- une seule portée
+@node Expressions musicales simultanées -- une seule portée
+@unnumberedsubsubsec Expressions musicales simultanées -- une seule portée
+@translationof Simultaneous music expressions single staff
 
-Pour déterminer le nombre de portées, LilyPond regarde le début
-de la première expression.  Si c'est une seule note, une seule portée
-est produite ; si c'est une expression simultanée, plusieurs
-portées sont produites.  Nous avons dans l'exemple ci-dessous une
-expression complexe ; dans la mesure où elle débute par une note
-seule, elle sera produite sur une unique portée.
+Pour déterminer le nombre de portées, LilyPond regarde le début de la
+première expression.  Si c'est une seule note, une seule portée est
+produite ; si c'est une expression simultanée, plusieurs portées sont
+produites.  Nous avons dans l'exemple ci-dessous une expression
+complexe ; dans la mesure où elle débute par une note seule, elle sera
+produite sur une unique portée.
 
 @lilypond[verbatim,quote]
 \relative c'' {
@@ -1017,14 +1115,9 @@ séparant chaque syllable par une espace :
 >>
 @end lilypond
 
-@warning{Il est primordial de séparer l'accolade fermant les
-paroles de la dernière syllabe -- par une espace ou un saut de ligne --
-au risque de voir apparaître une
-@rprogram{Erreur renvoyant à ../ly/init.ly}.}
-
-Notez les doubles chevrons @w{@code{<< ... >>}} encadrant
-toute la pièce ; ils indiquent simplement que la musique et les
-paroles se produisent en même temps.
+Notez les doubles chevrons @code{<< @dots{} >>} encadrant toute la
+pièce ; ils indiquent simplement que la musique et les paroles se
+produisent en même temps.
 
 
 @node Alignement des paroles sur une mélodie
@@ -1337,7 +1430,7 @@ exemple, cela peut servir à saisir un motif qu'une seule fois, même
 s'il se répète un grand nombre de fois dans la pièce.
 
 @lilypond[verbatim,quote]
-tripletA = \times 2/3 { c,8 e g }
+tripletA = \tuplet 3/2 { c,8 e g }
 barA = { \tripletA \tripletA \tripletA \tripletA }
 
 \relative c'' {
@@ -1487,7 +1580,26 @@ difficile à dénicher.
 
 Cependant, le mode de hauteurs absolues reste utile pour les musiques
 où les intervalles sont étendus, et plus encore pour les fichiers
-LilyPond créés par des programmes.
+LilyPond créés par des programmes.  Recopier des fragments en hauteurs
+absolues permet d'en préserver les octaves.
+
+La musiqeu peut être agencée de manière plutôt complexe.  Dans le cas
+d'une imbrication de commandes @code{\relative}, chacune des sections
+est indépendante de l'autre :
+@lilypond[verbatim,quote]
+\relative c { c'4 \relative c'' { f g } c }
+@end lilypond
+
+@funindex \absolute
+
+Des hauteurs absolues peuvent tout à fait se trouver au sein d'un bloc
+en mode relatif, dès lors qu'une commande @code{\absolute} exclut
+explicitement de la musique relative le fragment en question :
+
+@lilypond[verbatim,quote]
+\relative c { c'4 \absolute { f'' g'' } c }
+@end lilypond
 
 
 @node Après le tutoriel
index de1d02fcbc33f32d7dc0ad2c4f31654ddb5d7af4..d90720d1739892f972f43c76b4c735298538866a 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: 45f95ed2dabb3aef3c9a6995701dc255ba88d68a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.29"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: John Mandereau
@@ -35,14 +35,14 @@ partitions complexes de même qualité.
 @section Organisation des fichiers LilyPond
 @translationof How LilyPond input files work
 
-La mise en forme des fichiers d'entrée de LilyPond est vraiment
-peu astreignante, afin d'offrir assez de souplesse aux utilisateurs
-expérimentés pour qu'ils puissent organiser leurs fichiers comme
-ils l'entendent.  Cependant, les nouveaux utilisateurs peuvent parfois
-se perdre en raison de cette souplesse.  Cette section présente
-sommairement l'organisation du code LilyPond, en privilégiant
-la simplicité au détriment de certains détails.  Vous trouverez une
-description plus complète dans @ruser{Structure de fichier}.
+La mise en forme des fichiers d'entrée de LilyPond est vraiment peu
+astreignante, afin d'offrir assez de souplesse aux utilisateurs
+expérimentés pour qu'ils puissent organiser leurs fichiers comme ils
+l'entendent.  Cependant, les nouveaux utilisateurs peuvent parfois se
+perdre en raison de cette souplesse. Cette section présente sommairement
+l'organisation du code LilyPond, en privilégiant la simplicité au
+détriment de certains détails. Vous trouverez une description plus
+complète dans @ruser{Structure de fichier}.
 
 @menu
 * Introduction à la structure de fichier LilyPond::
@@ -65,7 +65,7 @@ Un fichier d'entrée LilyPond ressemble à :
 \version @w{"@version{}"}
 \header @{ @}
 \score @{
-  @var{...expression musicale composite...}  % c'est là qu'est la musique !
+  @var{ @dots{} expression musicale composite @dots{} }  % c'est là qu'est la musique !
   \layout @{ @}
   \midi @{ @}
 @}
@@ -145,7 +145,7 @@ quoi, d'une note isolée à un gigantesque
 @example
 @{
   \new StaffGroup <<
-    @var{...collez ici la partition complète d'un opéra de Wagner...}
+    @var{ @dots{} collez ici la partition complète d'un opéra de Wagner@dots{} }
   >>
 @}
 @end example
@@ -509,33 +509,33 @@ une liste des différents types de crochet :
 @multitable @columnfractions .3 .7
 @headitem Type de crochet
   @tab Fonction
-@item @code{@{ .. @}}
+@item @code{@{ @dots{} @}}
   @tab Délimite un segment de musique séquentielle
-@item @code{< .. >}
+@item @code{< @dots{} >}
   @tab Délimite les notes d'un accord
-@item @code{<< .. >>}
+@item @code{<< @dots{} >>}
   @tab Délimite des sections simultanées
-@item @code{( .. )}
+@item @code{( @dots{} )}
   @tab Marque le début et la fin d'une liaison
-@item @code{\( .. \)}
+@item @code{\( @dots{} \)}
   @tab Marque le début et la fin d'une liaison de phrasé
-@item @code{[ .. ]}
+@item @code{[ @dots{} ]}
   @tab Marque le début et la fin d'une ligature manuelle
 @end multitable
 
 D'autres constructions permettent d'obtenir des lignes regroupant ou en
 travers des notes :  les liaisons de prolongation indiquées par un tilde
-(@code{~}), les marques de nolet avec @code{\times x/y @{..@}}, ou
-encore les notes d'ornement avec @code{\grace@{..@}}.
+(@code{~}), les marques de nolet avec @code{\times x/y @{ @dots{} @}},
+ou encore les notes d'ornement avec @code{\grace@{ @dots{} @}}.
 
 En dehors de LilyPond, l'imbrication correcte de différents types de
 crochets exige un strict respect des conventions, telles que
-@code{<< [ @{ ( .. ) @} ] >>}, où les marques de fermeture interviennent
-obligatoirement dans l'ordre exactement inverse à celles d'ouverture.
-Ceci @strong{doit} être rigoureusement respecté pour les trois types de
-crochets utilisés pour @strong{délimiter} comme l'indique le tableau
-ci-dessus.  Une telle rigueur dans l'imbrication n'est @strong{pas}
-requise pour les types de crochets dont la fonction est de
+@code{<< [ @{ ( @dots{} ) @} ] >>}, où les marques de fermeture
+interviennent obligatoirement dans l'ordre exactement inverse à celles
+d'ouverture.  Ceci @strong{doit} être rigoureusement respecté pour les
+trois types de crochets utilisés pour @strong{délimiter} comme l'indique
+le tableau ci-dessus.  Une telle rigueur dans l'imbrication n'est
+@strong{pas} requise pour les types de crochets dont la fonction est de
 @strong{marquer}, selon le tableau ci-dessus, lorsqu'il sont utilisés en
 combinaison avec des liaisons de prolongation ou des nolets.  En effet,
 il ne s'agit pas de crochets ayant pour fonction de borner quelque
@@ -559,10 +559,10 @@ qui s'étendent sur un triolet, lui-même lié à un quintolet agrémenté
 d'une liaison de phrasé se poursuivant (lignes 3 et 4).
 
 @lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
 @end lilypond
 
 
@@ -638,8 +638,8 @@ Voyons comment cela se pratique selon la grammaire de LilyPond.
 
 Le plus sûr moyen de saisir un fragment où plusieurs voix cohabitent
 sur la même portée, consiste à saisir chacune des voix séquentiellement
-(avec @code{@{...@}}), puis à les combiner en simultané à l'aide de
-doubles chevrons gauche/droite, @code{<<...>>}.  Les fragments
+(avec @code{@{ @dots{} @}}), puis à les combiner en simultané à l'aide
+de doubles chevrons gauche/droite, @code{<< @dots{} >>}.  Les fragments
 devront être séparés par une double oblique inversée, @code{\\}, pour
 les affecter à des voix séparées.  Dans le cas contraire, les notes
 seraient toutes affectées à une même voix, ce qui pourrait générer des
@@ -715,7 +715,7 @@ automatiquement.
 @end lilypond
 
 Ces voix sont séparées de la voix principale, laquelle contient les
-notes en dehors de la construction @code{<<...>>} -- que nous
+notes en dehors de la construction @code{<< @dots{} >>} -- que nous
 appellerons @emph{construction simultanée}.  Les liaisons, de
 prolongation ou non, ne peuvent relier des notes que si elles
 appartiennent à la même voix ; elles ne peuvent ni pénétrer une
@@ -800,13 +800,13 @@ des différentes voix sont espacées, consiste à placer une commande
 @code{\relative} au début de chacune des voix :
 
 @example
-\relative c' @{ noteA ... @}
+\relative c' @{ noteA @dots{} @}
 <<
-  \relative c'' @{ < noteB noteC > ... @}
+  \relative c'' @{ < noteB noteC > @dots{} @}
 \\
-  \relative g' @{ noteD ... @}
+  \relative g' @{ noteD @dots{} @}
 >>
-\relative c' @{ noteE ... @}
+\relative c' @{ noteE @dots{} @}
 @end example
 
 Pour finir, analysons le principe d'utilisation des voix dans une pièce
@@ -827,15 +827,15 @@ les voix -- ce qui est plus compliqué sera décortiqué plus tard.
   \\  % Voice two
     {
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No voice three
   \\  % Voice four
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -875,15 +875,15 @@ que vous ne comprendriez pas.
   \\  % Voice two
     { \voiceTwoStyle
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No Voice three (we want stems down)
   \\  % Voice four
     { \voiceThreeStyle
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -1596,7 +1596,7 @@ référer à ce contexte particulier.
 
 @seealso
 Manuel de notation :
-@ruser{Création d'un contexte}.
+@ruser{Création et référencement d'un contexte}.
 
 
 @node Tout savoir sur les graveurs
@@ -1655,7 +1655,7 @@ partir du nom, et vice versa.
   @tab Grave les clefs
 @item Completion_heads_engraver
   @tab Divise les notes qui dépassent de la mesure
-@item New_dynamic_engraver
+@item Dynamic_engraver
   @tab Crée les soufflets et textes de nuance
 @item Forbid_line_break_engraver
   @tab Empêche un saut de ligne si un élément musical est toujours actif
@@ -1851,11 +1851,11 @@ et pour toutes les portées :
 >>
 @end lilypond
 
-Autre exemple, si la propriété @code{clefOctavation} est déterminée au
-niveau du contexte @code{Score}, elle modifiera la valeur de l'octave en
-cours pour toutes les portées actives ; cette valeur sera considérée
-comme étant la nouvelle valeur par défaut pour toutes les portées à
-venir.
+Autre exemple, si la propriété @code{clefTransposition} est déterminée
+au niveau du contexte @code{Score}, elle modifiera la valeur de la
+transposition en cours pour toutes les portées actives ; cette valeur
+sera considérée comme étant la nouvelle valeur par défaut pour toutes
+les portées à venir.
 
 La commande opposée, @code{\unset}, efface la propriété du contexte ; la
 plupart des propriétés reviennent de ce fait à leur valeur par défaut.
@@ -1907,7 +1907,7 @@ création de ce contexte.  Ceci constitue parfois une façon plus claire
 de spécifier les valeurs d'une propriété pour la durée de vie du
 contexte.  Lorsque vous créez un contexte à l'aide de la commande
 @code{\new}, vous pouvez la faire suivre immédiatement d'un bloc
-@code{\with @{ .. @}} qui contiendra les réglages des différentes
+@code{\with @{ @dots{} @}} qui contiendra les réglages des différentes
 propriétés.  Ainsi, si nous voulions par exemple annuler l'impression
 des bécarres supplémentaires sur la durée d'une portée, nous
 écririons :
@@ -2400,8 +2400,8 @@ celloMusic = \relative c {
 @end lilypond
 
 @seealso
-Les patrons originaux sont disponibles à l'annexe @qq{Modèles}, voir
-@ref{Portée unique}.
+Les patrons originaux sont disponibles à l'annexe
+@ref{Modèles pour portée unique}.
 
 
 @node Partition pour chœur à quatre voix mixtes
@@ -2514,13 +2514,14 @@ lower = \relative c, {
 @end lilypond
 
 Aucun des modèles ne permet d'arriver exactement à cette mise en forme.
-Celui qui s'en rapprocherait le plus est @qq{SATB vocal score and
-automatic piano reduction} -- voir @ref{Ensemble vocal} -- mais encore
-faudrait-il en modifier la mise en forme et refaire la partie de piano
-qui n'est plus une simple reprise des parties vocales.  Les variables
-qui gèrent la musique et les paroles du chœur ne nécessitent pas de
-modification, mais il nous faut d'autres variables pour la réduction de
-piano.
+Celui qui s'en rapprocherait le plus est 
+@ref{Partition pour chœur SATB avec réduction pour piano} -- voir
+@ref{Modèles pour ensemble vocal} -- mais encore faudrait-il en
+modifier la mise en forme et refaire la partie de piano qui n'est
+plus une simple reprise des parties vocales.  Les variables qui
+gèrent la musique et les paroles du chœur ne nécessitent pas de
+modification, mais il nous faut d'autres variables pour la
+réduction de piano.
 
 L'ordre dans lequel apparaissent les contextes dans le @code{ChoirStaff}
 du modèle ne correspond pas à ce que nous voyons ci-dessus.  Il nous
@@ -2852,15 +2853,15 @@ de le compiler, pour voir de quoi il retourne.
 >>
 @end example
 
-La construction en simultané -- @code{<<...>>} -- n'est pas strictement
-obligatoire pour les portées manuel deux et pédalier, qui ne contiennent
-chacune qu'une seule expression musicale ; mais cela ne mange pas de
-pain, et c'est une bonne habitude que de toujours encadrer par des
-doubles chevrons gauche/droite ce qui suit une commande
+La construction en simultané -- @code{<< @dots{} >>} -- n'est pas
+strictement obligatoire pour les portées manuel deux et pédalier, qui ne
+contiennent chacune qu'une seule expression musicale ; mais cela ne
+mange pas de pain, et c'est une bonne habitude que de toujours encadrer
+par des doubles chevrons gauche/droite ce qui suit une commande
 @code{\new Staff} au cas où il y aurait plusieurs voix.  Il en va
 autrement pour les contextes @code{Voice} : ils doivent être toujours
-suivis d'accolades --  @code{@{...@}} --  au cas où vous auriez employé
-plusieurs variables qui doivent intervenir consécutivement.
+suivis d'accolades --  @code{@{ @dots{} @}} --  au cas où vous auriez
+employé plusieurs variables qui doivent intervenir consécutivement.
 
 Ajoutons donc cette structure au bloc @code{\score}, tout en fignolant
 l'indentation.  Nous en profitons pour ajouter les clefs appropriées,
@@ -2954,8 +2955,7 @@ fichier @file{scm/define-grobs.scm}, en examinant la définition du
         @}
       >>  % fin du contexte de la portée ManuelUn
       \new Staff = "ManuelDeux" \with @{
-        \override VerticalAxisGroup
-          #'staff-staff-spacing  #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       @} <<
         \ArmureMetrique
         \clef "bass"
@@ -3019,8 +3019,7 @@ PedalOrganMusic = \relative c {
         }
       >>  % end ManualOne Staff context
       \new Staff = "ManualTwo" \with {
-        \override VerticalAxisGroup
-          #'staff-staff-spacing #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       } <<
         \keyTime
         \clef "bass"
@@ -3087,7 +3086,7 @@ l'utilisateur) -- pour des retouches :
 @lilypond[quote,verbatim,ragged-right]
 dolce = \markup { \italic \bold dolce }
 
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
 fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
@@ -3119,7 +3118,7 @@ lire, et particulièrement la dernière ligne.
 violin = \relative c'' @{
   \repeat volta 2 @{
     c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
-    \once \override TextScript #'padding = #5.0
+    \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d |
     c,4.\markup @{
       \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
@@ -3145,7 +3144,7 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = #padding
+     \once \override TextScript.padding = #padding
    #})
 
 \relative c''' {
index bd1dbb9d0eff09a9b2896a4ac08adb7dd92e4850..3995bff9a0eaca61d17654869298872cbc3354ca 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: 8df40d45e4366f4e9baa2cec3b7eb38b6482150f
+    Translation of GIT committish: 3bad1130cea3a64b2592e1bfd44fbd5f0a9a98ee
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -21,39 +21,55 @@ Lilypond, prets à l'emploi.  Il vous suffira d'y ajouter quelques notes,
 de lancer LilyPond, et d'aprécier le résultat.
 
 @menu
-* Portée unique::
+* Modèles pour portée unique::
 * Modèles pour piano::
-* Quatuor à cordes::
-* Ensemble vocal::
+* Modèles pour quatuor à cordes::
+* Modèles pour ensemble vocal::
 * Orchestre::
 * Exemples de notation ancienne::
 * Autres modèles::
 @end menu
 
 
-@node Portée unique
-@appendixsec Portée unique
-@translationof Single staff
+@node Modèles pour portée unique
+@appendixsec Modèles pour portée unique
+@translationof Single staff templates
 
+@menu
+* Notes seules::
+* Notes et paroles::
+* Notes et accords::
+* Notes paroles et accords::
+@end menu
+
+@node Notes seules
 @appendixsubsec Notes seules
+@translationof Notes only
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
 {single-staff-template-with-only-notes.ly}
 
 
+@node Notes et paroles
 @appendixsubsec Notes et paroles
+@translationof Notes and lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
 {single-staff-template-with-notes-and-lyrics.ly}
 
 
+@node Notes et accords
 @appendixsubsec Notes et accords
+@translationof Notes and chords
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {single-staff-template-with-notes-and-chords.ly}
 
 
+@node Notes paroles et accords
 @appendixsubsec Notes, paroles et accords
+@translationof Notes lyrics, and chords
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {single-staff-template-with-notes,-lyrics,-and-chords.ly}
@@ -63,81 +79,129 @@ de lancer LilyPond, et d'aprécier le résultat.
 @appendixsec Modèles pour piano
 @translationof Piano templates
 
++@menu
+* Piano seul::
+* Chant et accompagnement::
+* Piano et paroles entre les portées::
+@end menu
+
+
+@node Piano seul
 @appendixsubsec Piano seul
+@translationof Solo piano
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-simple.ly}
 
 
+@node Chant et accompagnement
 @appendixsubsec Chant et accompagnement
+@translationof Piano and melody with lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-with-melody-and-lyrics.ly}
 
 
+@node Piano et paroles entre les portées
 @appendixsubsec Piano et paroles entre les portées
+@translationof Piano centered lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-with-centered-lyrics.ly}
 
 
-@node Quatuor à cordes
-@appendixsec Quatuor à cordes
-@translationof String quartet
+@node Modèles pour quatuor à cordes
+@appendixsec Modèles pour quatuor à cordes
+@translationof String quartet templates
 
+
+@menu
+* Quatuor à cordes simple::
+* Parties pour quatuor à cordes::
+@end menu
+
+@node Quatuor à cordes simple
 @appendixsubsec Quatuor à cordes simple
+@translationof String quartet
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {string-quartet-template-simple.ly}
 
 
+@node Parties pour quatuor à cordes
 @appendixsubsec Parties pour quatuor à cordes
+@translationof String quartet parts
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {string-quartet-template-with-separate-parts.ly}
 
 
-@node Ensemble vocal
-@appendixsec Ensemble vocal
-@translationof Vocal ensembles
+@node Modèles pour ensemble vocal
+@appendixsec Modèles pour ensemble vocal
+@translationof Vocal ensembles templates
+
+@menu
+* Partition pour chœur SATB::
+* Partition pour chœur SATB avec réduction pour piano::
+* Partition pour chœur SATB avec alignement des contextes::
+* Chœur à quatre voix mixtes sur quatre portées::
+* Couplet pour solo et refrain à deux voix::
+* Hymnes et cantiques::
+* Psalmodie::
+@end menu
+
 
-@appendixsubsec Partition pour chœur à quatre voix mixtes
+@node Partition pour chœur SATB
+@appendixsubsec Partition pour chœur SATB
+@translationof SATB vocal score
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template.ly}
 
 
+@node Partition pour chœur SATB avec réduction pour piano
 @appendixsubsec Partition pour chœur SATB avec réduction pour piano
+@translationof SATB vocal score and automatic piano reduction
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-automatic-piano-reduction.ly}
 
 
+@node Partition pour chœur SATB avec alignement des contextes
 @appendixsubsec Partition pour chœur SATB avec alignement des contextes
+@translationof SATB with aligned contexts
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly}
 
 
+@node Chœur à quatre voix mixtes sur quatre portées
 @appendixsubsec Chœur à quatre voix mixtes sur quatre portées
+@translationof SATB on four staves
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {satb-choir-template---four-staves.ly}
 
 
+@node Couplet pour solo et refrain à deux voix
 @appendixsubsec Couplet pour solo et refrain à deux voix
+@translationof Solo verse and two-part refrain
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-verse-and-refrain.ly}
 
 
+@node Hymnes et cantiques
 @appendixsubsec Hymnes et cantiques
+@translationof Hymn tunes
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {hymn-template.ly}
 
 
+@node Psalmodie
 @appendixsubsec Psalmodie
+@translationof Psalms
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {anglican-psalm-template.ly}
@@ -147,25 +211,41 @@ de lancer LilyPond, et d'aprécier le résultat.
 @appendixsec Orchestre
 @translationof Orchestral templates
 
+@menu
+* Orchestre chœur et piano::
+@end menu
+
+
+@node Orchestre chœur et piano
 @appendixsubsec Orchestre, chœur et piano
+@translationof Orchestra choir and piano
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {orchestra,-choir-and-piano-template.ly}
 
 
-@c bad node name to avoid node name conflict
 @node Exemples de notation ancienne
 @appendixsec Exemples de notation ancienne
 @translationof Ancient notation templates
 
+@menu
+* Transcription de musique mensurale::
+* Transcription du grégorien::
+@end menu
+
+
+@node Transcription de musique mensurale
 @appendixsubsec Transcription de musique mensurale
+@translationof Transcription of mensural music
 
 @c Line-width below is because of Issue 766.  If that's fixed, it can be removed.
 @lilypondfile[verbatim,quote,ragged-right,texidoc,line-width=140]
 {ancient-notation-template----modern-transcription-of-mensural-music.ly}
 
 
+@node Transcription du grégorien
 @appendixsubsec Transcription du grégorien
+@translationof Gregorian transcription template
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {ancient-notation-template----modern-transcription-of-gregorian-music.ly}
@@ -175,6 +255,12 @@ de lancer LilyPond, et d'aprécier le résultat.
 @appendixsec Autres modèles
 @translationof Other templates
 
+@menu
+* Symboles de jazz::
+@end menu
+
+
+@node Symboles de jazz
 @appendixsubsec Symboles de jazz
 @translationof Jazz combo
 
index 1015ea06ee9645577b9cb93c229e7ce304031811..f51723a35413280f845d4bd1c2f9f0970caa11f0 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-   Translation of GIT committish: 8df40d45e4366f4e9baa2cec3b7eb38b6482150f
+   Translation of GIT committish: 2625ff37cc7ea4f851b9261dcbc31ef93f35459f
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -55,6 +55,12 @@ chose d'imprimable.
 @cindex compilation
 @cindex exemple, premier
 @cindex premier exemple
+@cindex casse, sensibilité à la
+@cindex sensibilité à la casse
+
+@menu
+* Production de la partition::
+@end menu
 
 Pour créer une partition avec LilyPond, on écrit un fichier texte,
 appelé fichier source, qui décrit la notation musicale. La
@@ -106,7 +112,9 @@ produira un message d'erreur.
 
 @smallspace
 
-@subheading Production de la partition
+@node Production de la partition
+@unnumberedsubsubsec Production de la partition
+@translationof Producing output
 
 @cindex fichier PDF
 @cindex PDF
@@ -193,6 +201,16 @@ started writing input files.
 @cindex simple, notation
 @cindex notation simple
 
+@menu
+* Hauteurs::
+* Durées et rythme::
+* Silences::
+* Métrique::
+* Indication de tempo::
+* Clefs::
+* Tout ensemble::
+@end menu
+
 Il y a certains éléments graphiques de notation que LilyPond ajoute
 automatiquement.  Dans l'exemple suivant, nous n'avons fourni que
 quatre hauteurs, mais LilyPond a ajouté une clef, un chiffre de mesure
@@ -210,7 +228,9 @@ bien des cas ; nous verrons plus loin comment les indiquer
 explicitement.
 
 
-@subheading Hauteurs
+@node Hauteurs
+@unnumberedsubsubsec Hauteurs
+@translationof Pitches
 
 @cindex hauteurs
 @cindex mode relatif
@@ -325,7 +345,9 @@ peut modifier la valeur de départ de @w{@code{\relative c'}}.
 @c " - keeps quotes in order for context-sensitive editor -td
 
 
-@subheading Durées et rythme
+@node Durées et rythme
+@unnumberedsubsubsec Durées et rythme
+@translationof Durations (rhythms)
 
 @cindex note, durée
 @cindex durées
@@ -374,7 +396,9 @@ la durée de base.
 @end lilypond
 
 
-@subheading Silences
+@node Silences
+@unnumberedsubsubsec Silences
+@translationof Rests
 
 @cindex silences
 @cindex notation des silences
@@ -393,7 +417,9 @@ lettre @code{r} (pour @emph{rest}).
 @end lilypond
 
 
-@subheading Métrique
+@node Métrique
+@unnumberedsubsubsec Métrique
+@translationof Time signature
 
 @cindex métrique
 @cindex chiffre de mesure
@@ -418,7 +444,9 @@ peut être définie à l'aide de la commande @code{\time} :
 @end lilypond
 
 
-@subheading Indication de tempo
+@node Indication de tempo
+@unnumberedsubsubsec Indication de tempo
+@translationof Tempo marks
 
 @cindex tempo, indication
 @cindex indication du tempo
@@ -450,7 +478,9 @@ que le métronome :
 @end lilypond
 
 
-@subheading Clefs
+@node Clefs
+@unnumberedsubsubsec Clefs
+@translationof Clef
 
 @cindex clef
 @cindex clé
@@ -480,7 +510,9 @@ La @notation{clef} peut être définie à l'aide de la commande
 @end lilypond
 
 
-@subheading Tout ensemble
+@node Tout ensemble
+@unnumberedsubsubsec Tout ensemble
+@translationof All together
 
 Voici un bref exemple qui rassemble tous les éléments que nous déjà
 vus :
index 36e5232f733f26aa5e2e23878a76e0aaa186fac1..f2c3288126b5f920ad48c51feac1497153d69b4a 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: 45f95ed2dabb3aef3c9a6995701dc255ba88d68a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.20"
 
 @c Translators: Valentin Villenave, Nicolas Klutchnikoff, Damien Heurtebise
 @c Translation checkers: Jean-Charles Malahieude, John Mandereau
@@ -27,6 +27,7 @@ théoriquement de modifier chaque élément de votre partition.
 * Le manuel de référence des propriétés internes::
 * Apparence des objets::
 * Positionnement des objets::
+* Espacement vertical::
 * Collisions d'objets::
 * Autres retouches::
 @end menu
@@ -193,8 +194,18 @@ propriété en fonction de son nom.
 @cindex retouches, méthodologie
 @cindex méthodes de retouche
 
+@menu
+* La commande override::
+* La commande revert::
+* Le préfixe once::
+* La commande overrideProperty::
+* La commande tweak::
+@end menu
+
 
-@strong{La commande \override}
+@node La commande override
+@unnumberedsubsubsec La commande @code{@bs{}override}
+@translationof The override command
 
 @cindex override, commande
 @cindex override, syntaxe
@@ -220,7 +231,7 @@ il retourne.
 La syntaxe générale de cette commande est :
 
 @example
-\override @var{Contexte}.@var{ObjetDeRendu} #'@var{propriété-rendu} = #@var{valeur}
+\override @var{Contexte}.@var{ObjetDeRendu}.@var{propriété-rendu} = #@var{valeur}
 @end example
 
 @noindent
@@ -241,12 +252,20 @@ mise en forme et l'utilisation de ces commandes, nous nous limiterons à
 n'employer que quelques propriétés et valeurs simples, facilement
 compréhensibles.
 
-Nous ne parlerons dans l'immédiat ni du @code{#'}, qui précède
-toujours la propriété, ni du @code{#}, qui précède toujours la
-valeur.  Ces deux éléments doivent obligatoirement être
-présents sous cette forme.  Voici la commande la plus fréquente
-pour faire des retouches, et pratiquement tout le reste de ce
-chapitre aura pour but montrer, à travers des exemples, comment
+Lilypond reconnaît comme expression primaire les éléments musicaux
+tels que les notes, durées et annotations (les @emph{markups}).
+D'autres expressions de base comme les nombres, chaînes de
+caractères et listes sont gérées en « mode Scheme », mode appelé
+en faisant précéder une valeur par un @samp{#}.  Bien que
+certaines valeurs puissent disposer d'une représentation tout à
+fait valide dans le mode musical de LilyPond, les exemples de ce
+manuel mentionnent un@samp{#} pour plus de clarté.  Pour de plus
+amples informations quant au mode Scheme, consultez
+@rextend{Syntaxe Scheme dans LilyPond}.
+
+La commande @code{\override} est la plus fréquemment utilisée pour
+faire des retouches, et pratiquement tout le reste de ce chapitre
+aura pour but de montrer, à travers des exemples, comment
 l'utiliser.  L'exemple ci-dessous change la couleur des têtes de
 notes :
 
@@ -255,14 +274,16 @@ notes :
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a b c |
 @end lilypond
 
 
-@strong{La commande \revert}
+@node La commande revert
+@unnumberedsubsubsec La commande @code{@bs{}revert}
+@translationof The revert command
 
 @cindex revert, commande
 
@@ -278,7 +299,7 @@ ont été employés, il ne s'agit pas de la valeur précédente mais bien de
 la valeur par défaut.
 
 @example
-\revert @var{Contexte}.@var{ObjetDeRendu} #'@var{propriété-de-rendu}
+\revert @var{Contexte}.@var{ObjetDeRendu}.@var{propriété-de-rendu}
 @end example
 
 Tout comme pour la commande @code{\override}, la mention du
@@ -289,18 +310,20 @@ couleur des deux dernières notes à leur valeur par défaut :
 @cindex couleur,exemple d'utilisation de la propriété
 @cindex NoteHead, exemple de dérogation
 
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+@lilypond[quote,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
 b4 c |
 @end lilypond
 
 
-@strong{Le préfixe \once}
+@node Le préfixe once
+@unnumberedsubsubsec Le préfixe @code{@bs{}once}
+@translationof The once prefix
 
 @funindex \once
 @funindex once
@@ -319,15 +342,36 @@ d'une seule note :
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
+e4 f |
+\once \override NoteHead.color = #green
+g4 a
+\revert NoteHead.color
+b c |
+@end lilypond
+
+Le préfixe @code{\once} peut s'utiliser avec de nombreuses
+commandes prédéfinies pour en limiter les effets à un seul instant
+musical :
+
+@lilypond[quote,verbatim,relative=1]
+c4 d
+\once \stemDown
 e4 f |
-\once \override NoteHead #'color = #green
 g4 a
-\revert NoteHead #'color
+\once \hideNotes
 b c |
 @end lilypond
 
-@strong{La commande \overrideProperty}
+Les commandes prédéfinies de la forme @code{\@dots{}Neutral},
+@code{\@dots{}Off} et @code{\un@dots{}} font appel, en interne, à
+une instruction @code{\revert} plutôt que @code{\override} ; les
+préfixer d'un @code{\once} est donc sans effet.
+
+
+@node La commande overrideProperty
+@unnumberedsubsubsec La commande @code{@bs{}overrideProperty}
+@translationof The overrideProperty command
 
 @cindex overrideProperty, commande
 
@@ -342,7 +386,9 @@ ici par souci d'exhaustivité ; pour le détail, voir
 @c Maybe explain in a later iteration  -td
 
 
-@strong{La commande \tweak}
+@node La commande tweak
+@unnumberedsubsubsec La commande @code{@bs{}tweak}
+@translationof The tweak command
 
 @cindex tweak, commande
 
@@ -365,7 +411,7 @@ d'abord ce que donnerait @code{\once \override} :
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
 <c e g>4
 <c e g>4
 @end lilypond
@@ -391,7 +437,7 @@ accord peut être modifiée de cette manière :
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
 @end lilypond
 
 Vous noterez que la syntaxe de @code{\tweak} est différente de
@@ -403,7 +449,7 @@ pas nécessaire d'insérer un signe égal.  La syntaxe générale
 de la commande @code{\tweak} est donc, tout simplement :
 
 @example
-\tweak #'@var{propriété-de-rendu} #@var{valeur}
+\tweak @var{propriété-de-rendu} #@var{valeur}
 @end example
 
 La commande @code{\tweak} est aussi utilisée quand on veut, dans
@@ -414,8 +460,8 @@ une série d'articulations, n'en modifier qu'une seule.  Ainsi :
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4^"Black"
-  -\tweak #'color #red ^"Red"
-  -\tweak #'color #green _"Green"
+  -\tweak color #red ^"Red"
+  -\tweak color #green _"Green"
 @end lilypond
 
 @noindent
@@ -434,14 +480,14 @@ explicitement l'objet de rendu, si tant est que LilyPond puisse remonter
 jusqu'à l'événement originel :
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red   cis4
- \tweak Accidental #'color #green es
+<\tweak Accidental.color #red   cis4
+ \tweak Accidental.color #green es
                                   g>
 @end lilypond
 
 Cette forme développée de la commande @code{\tweak} correspond à :
 @example
-\tweak @var{objet-de-rendu} #'@var{propriété-de-rendu} @var{valeur}
+\tweak @var{objet-de-rendu}.@var{propriété-de-rendu} @var{valeur}
 @end example
 
 @cindex nolets imbriqués
@@ -468,12 +514,12 @@ crochet de triolet court.
 @cindex couleur, exemple d'utilisation de la propriété
 
 @lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
-\times 4/3 {
-  \tweak #'color #red
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+\tweak direction #up
+\tuplet 3/4 {
+  \tweak color #red
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -486,18 +532,15 @@ avec la commande @code{\override} :
 @cindex transparence, exemple d'utilisation de la propriété
 @cindex TupletNumber, exemple de dérogation
 
-@c NOTE Tuplet brackets collide if notes are high on staff
-@c See issue 509
 @lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
-\once \override TupletNumber
-  #'text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 { c8[ c c] }
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
+\tuplet 3/2 {
   c8[ c]
   c8[ c]
-  \once \override TupletNumber #'transparent = ##t
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+  \once \override TupletNumber.transparent = ##t
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -606,7 +649,7 @@ plus simple est de consulter la RPI.
 La page de la RPI sur les liaisons commence par préciser que les objets
 « Liaison » sont créés par le graveur Slur_engraver.  Vient ensuite la
 liste des réglages standard ; vous y trouverez la propriété susceptible
-+de contrôler l'épaisseur des traits de liaison.
+de contrôler l'épaisseur des traits de liaison.
 
 @example
 @code{thickness} (nombre)
@@ -634,11 +677,10 @@ dans un premier temps, pour nous assurer que la commande fonctionne.
 Nous obtenons :
 
 @example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
 @end example
 
-N'oublions pas le @code{#'} qui doit précéder le nom de la propriété et
-le @code{#} qui doit précéder la nouvelle valeur.
+N'oublions pas le @code{#} qui doit précéder la nouvelle valeur.
 
 La dernière question est : @qq{Où placer cette commande ?}
 Tant qu'on n'est pas sûr de soi, la meilleure réponse est @qq{À
@@ -654,7 +696,7 @@ proche d'elle.}  Essayons :
   \time 6/8
   {
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     r4 bes8 bes[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -676,7 +718,7 @@ commandes -- mais il faut encore s'exercer.  Les exemples
 suivants sont là dans cette intention.
 
 
-@subheading Détermination du contexte adéquat
+@subsubsubheading Détermination du contexte adéquat
 @c VO Finding the context
 
 @cindex contexte, détermination du
@@ -698,7 +740,7 @@ niveau, qu'il est activé sans ambiguïté par le fait que l'on est
 en train de saisir des notes, on peut ici ne pas le mentionner.
 
 
-@subheading Redéfinition pour une seule occurrence
+@subsubsubheading Redéfinition pour une seule occurrence
 @c VO Overriding once only
 
 @cindex dérogation pour une seule fois
@@ -729,7 +771,7 @@ simplement ignorée.  Il faut donc que la commande introduite par
   {
     r4 bes8
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes8[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -747,7 +789,7 @@ La commande @code{\once} peut aussi être utilisée devant la commande
 @code{\set}.
 
 
-@subheading Rétablissement
+@subsubsubheading Rétablissement
 @c VO Reverting
 
 @cindex revert
@@ -774,10 +816,10 @@ débute la liaison :
   {
     r4 bes8
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes[( g]) g |
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     g8[( es]) es d[( f]) as |
     as8 g
   }
@@ -804,11 +846,11 @@ la seconde liaison la commande @code{\revert}, qui ramène la propriété
   {
     r4 bes8
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     bes[( g]) g |
     g8[( es]) es
     % Revert thickness of all following slurs to default of 1.2
-    \revert Slur #'thickness
+    \revert Slur.thickness
     d8[( f]) as |
     as8 g
   }
@@ -868,7 +910,7 @@ s'y rapportent, parmi lesquels LyricText.
 Nous avons alors sous les yeux tous les réglages des propriétés qui
 contrôlent les polices de caractères, et notamment
 @code{font-shape(symbole)}, où @code{symbole} peut prendre la valeur
-@code{upright}, @code{italics} ou @code{caps}.
+@code{upright}, @code{italic} ou @code{caps}.
 
 Vous remarquerez que @code{font-series} et @code{font-size} figurent
 aussi dans la liste.  La question qui ne manque pas de se poser
@@ -889,25 +931,20 @@ Voyons maintenant si nous sommes en mesure de formuler la commande
 @code{LyricText}, la propriété est @code{font-shape} et la valeur est
 @code{italic}.  Comme auparavant, nous laissons de côté le contexte.
 
-Signalons rapidement -- même si cette remarque est importante -- que,
-puisque les valeurs de @code{font-shape} se présentent sous forme de
-symboles, elles doivent être précédées d'une simple apostrophe,
-@code{'}.  C'est pour cette raison qu'il fallait une apostrophe devant
-@code{thickness} dans l'exemple précédent, et qu'il en faut une devant
-@code{font-shape}.  Ce sont à chaque fois des symboles, qui sont
-interprétés comme tels par LilyPond.  Certains symboles peuvent être des
-noms de propriété, comme @code{thickness} ou @code{font-shape},
-d'autres sont des valeurs à attribuer aux propriétés, comme
-@code{italic}.  À ne pas confondre avec les chaînes de caractères
-libres, qui se présentent comme @code{"un texte libre"} ; pour plus
-de détails sur les symboles et les chaînes de caractères, voir le
-@rextend{Tutoriel Scheme}.
+Signalons rapidement -- même si cette remarque est importante -- que
+certaines valeurs de propriétés se présentent sous forme de
+symboles, comme @code{italic}, et doivent donc être précédées
+d'une simple apostrophe, Ces symboles seront alors interprétés
+comme tels par LilyPond.  À ne pas confondre avec les chaînes de
+caractères libres qui se présentent comme @code{"un texte
+libre"} ; pour plus de détails sur les symboles et les chaînes de
+caractères, voir le @rextend{Tutoriel Scheme}.
 
 Ainsi, la commande @code{\override} pour mettre les paroles en italique
 est :
 
 @example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
 @end example
 
 @noindent
@@ -929,7 +966,7 @@ comme ceci :
     as8 g
   }
   \addlyrics {
-    \override LyricText #'font-shape = #'italic
+    \override LyricText.font-shape = #'italic
     The man who | feels love's sweet e -- | mo -- tion
   }
 }
@@ -938,35 +975,9 @@ comme ceci :
 @noindent
 et voilà les paroles en italiques.
 
-
-@subheading Spécification du contexte en mode lyrique
-@c VO Specifying the context in lyric mode
-
-@cindex contexte, spécification en mode lyrique
-@cindex mode lyrique, spécification de contexte en
-
-Lorsqu'il s'agit de paroles et qu'on cherche à préciser le contexte
-sur le modèle de ce qui a été fait précédemment, la commande échoue.
-Car une syllabe saisie en mode Paroles (@code{lyricmode}) se termine
-obligatoirement par une espace, un saut de ligne ou un nombre.  Tout
-autre caractère compte comme un élément de la syllabe.  C'est pourquoi
-il faut une espace ou un saut de ligne avant le @code{@}} final, pour
-éviter qu'il ne soit assimilé à la dernière syllabe.  De même, il faut
-insérer des espaces de part et d'autre du point, @qq{.}, qui sépare le
-nom de contexte du nom de l'objet, faute de quoi les deux noms seront
-joints et l'interpréteur ne pourra pas les reconnaître.  La formulation
-correcte est donc :
-
-@example
-\override Lyrics . LyricText #'font-shape = #'italic
-@end example
-
 @warning{Dans la saisie des paroles, pensez à toujours laisser une
 espace entre la dernière syllabe et l'accolade fermante.}
 
-@warning{Lorsqu'on retouche des paroles, toujours placer des espaces
-autour du point qui sépare le nom de contexte du nom d'objet.}
-
 @seealso
 Manuel d'extension :
 @rextend{Tutoriel Scheme}.
@@ -985,8 +996,12 @@ règles liées à ce type.  Le type de propriété est toujours donné entre
 parenthèses après le nom de propriété dans la RPI.  Voici une liste des
 différents types de propriétés, avec les règles qui les régissent et
 quelques exemples d'utilisation.  Il faut, bien sûr, toujours ajouter un
-symbole @emph{hash}, @code{#}, devant ces valeurs lors de la saisie de
-la commande @code{\override}.
+symbole @emph{hash} (@code{#}) devant ces valeurs lors de la saisie de
+la commande @code{\override}, ce même si cette valeur comporte
+déjà un @code{#} en premier caractère.  Les exemples ici présentés
+ne sont que de simples illustrations ; l'utilisation de Scheme
+pour obtenir des valeurs fait l'objet de la rubrique
+@rextend{Scheme et les calculs}.
 
 @multitable @columnfractions .2 .45 .35
 @headitem Type de propriété
@@ -997,29 +1012,29 @@ la commande @code{\override}.
        sous la forme @code{#t} ou @code{#f}
   @tab @code{#t}, @code{#f}
 @item Dimension (en espaces de portée)
-  @tab Un nombre positif décimal (en unités de lignes de portée)
+  @tab Un nombre décimal (en unités de lignes de portée)
   @tab @code{2.5}, @code{0.34}
 @item Direction
-  @tab Une direction valide ou son équivalent numérique (valeur décimale
-  comprise entre -1 et 1 seulement)
-  @tab @code{LEFT}, @code{CENTER}, @code{UP}, @code{1}, @code{-1}
+  @tab Une direction valide ou son équivalent numérique (@code{0}
+  ou @code{CENTER} indiquent une position neutre)
+  @tab @code{LEFT}, @code{CENTER}, @code{UP}, @code{1}, @w{@code{-1}}
 @item Entier (@emph{Integer} en anglais)
-  @tab Un nombre entier positif
-  @tab @code{3}, @code{1}
+  @tab Un nombre entier
+  @tab @code{3}, @code{-1}
 @item Liste
-  @tab Plusieurs valeurs séparées par une espace, encadrées par des
-  parenthèses et précédées par une apostrophe
-  @tab @code{'(left-edge staff-bar)}, @code{'(1)},
+  @tab Une séquence de constantes ou symboles séparés par une
+  espace, encadrées par des parenthèses et précédées par une apostrophe
+  @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
        @code{'(1.0 0.25 0.5)}
 @item Markup (ou étiquette)
   @tab Toute commande @code{\markup} valide
-  @tab @code{\markup @{ \italic "cresc." @}}
+  @tab @code{\markup @{ \italic "cresc." @}}, @code{"bagpipe"}
 @item Durée (@emph{Moment} en anglais)
   @tab Une durée de note construite avec la fonction make-moment
-  @tab @code{(ly:make-moment 1 4)}, @code{(ly:make-moment 3 8)}
+  @tab @code{(ly:make-moment 1/4)}, @code{(ly:make-moment 3/8)}
 @item Nombre
-  @tab Une valeur décimale positive ou négative
-  @tab @code{3.5}, @code{-2.45}
+  @tab Une valeur positive ou négative, qui peut être décimale
+  @tab @code{3}, @w{@code{-2.45}}
 @item Paire (de nombres)
   @tab Deux nombres séparées par @qq{espace point espace}, encadrés
 par des parenthèses et précédés par une apostrophe
@@ -1032,8 +1047,7 @@ par des parenthèses et précédés par une apostrophe
   @tab Un processus, ou @code{#f} pour empêcher toute action
   @tab @code{bend::print}, @code{ly:text-interface::print}, @code{#f}
 @item Vecteur
-  @tab Une liste de trois éléments encadrés par des parenthèses et
-  précédés par apostrophe-hash, @code{'#}
+  @tab Des constantes encadrés par @code{#(}@dots{}@code{)}
   @tab @code{'#(#t #t #f)}
 @end multitable
 
@@ -1093,9 +1107,17 @@ L'objet @code{BarLine} est également lié à plusieurs interfaces, dont la
 mesure -- et de beaucoup d'autres objets, bien sûr.  Examinons chacune
 d'elles tour à tour.
 
+@menu
+* La propriété stencil::
+* La propriété break-visibility::
+* La propriété transparent::
+* La propriété color::
+@end menu
 
-@subheading stencil
-@c VO stencil
+
+@node La propriété stencil
+@unnumberedsubsubsec La propriété @code{stencil}
+@translationof The stencil property
 
 @cindex stencil, propriété
 
@@ -1111,7 +1133,7 @@ encore, le contexte concerné (@code{Voice} en l'occurrence) :
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override BarLine #'stencil = ##f
+  \override BarLine.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1137,14 +1159,29 @@ mentionnant le bon contexte :
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'stencil = ##f
+  \override Staff.BarLine.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
 }
 @end lilypond
 
-Cette fois, les barres de mesure ont disparu.
+Cette fois, les barres de mesure ont disparu.  Désactiver la
+propriété @code{stencil} est une opération tellement fréquente que
+LilyPond dispose d'un raccourci -- @code{\omit} (pour « oublier »)
+-- à cet effet :
+
+@funindex \omit
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \omit Staff.BarLine
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
 
 Vous remarquerez que l'affectation de la valeur @code{#f} à la propriété
 @code{stencil} déclenchera une erreur dès lors que l'objet en question se
@@ -1157,14 +1194,15 @@ zéro :
 @lilypond[quote,verbatim,relative=2]
 {
   c4 c
-  \once \override NoteHead #'stencil = #point-stencil
+  \once \override NoteHead.stencil = #point-stencil
   c4 c
 }
 @end lilypond
 
 
-@subheading visibilité des barres (break-visibility)
-@c VO break-visibility
+@node La propriété break-visibility
+@unnumberedsubsubsec La propriété @code{break-visibility}
+@translationof The break-visibility property
 
 @cindex break-visibility, propriété
 
@@ -1174,12 +1212,13 @@ booléens.  Ceux-ci indiquent respectivement si les barres de mesure
 doivent être imprimées ou non à la fin de la ligne, à l'intérieur de la
 ligne et au début de la ligne.  Dans notre cas, nous voulons que toutes
 les barres soient supprimées, si bien que la valeur dont nous avons
-besoin est @code{'#(#f #f #f)}.  Essayons, sans oublier d'ajouter le
+besoin est @code{#(#f #f #f)}.  Essayons, sans oublier d'ajouter le
 contexte @code{Staff}.  Vous remarquerez que, en plus de cette valeur,
-nous ajoutons @code{#'#} devant la parenthèse ouvrante.  Le @code{'#}
-est nécessaire car il fait partie intégrante de la valeur contenant un
-vecteur, et le premier @code{#} est là, comme toujours avec la commande
-@code{\override}, pour introduire la valeur elle-même.
+nous ajoutons @code{##} devant la parenthèse ouvrante.  Un second
+@code{#} est nécessaire car il fait partie intégrante de la valeur
+contenant un vecteur, et le premier @code{#} est là, comme
+toujours avec la commande @code{\override}, pour introduire la
+valeur elle-même.
 
 @cindex BarLine, exemple de dérogation
 @cindex break-visibility exemple d'utilisation de la propriété
@@ -1187,7 +1226,7 @@ vecteur, et le premier @code{#} est là, comme toujours avec la commande
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+  \override Staff.BarLine.break-visibility = #'#(#f #f #f)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1198,8 +1237,9 @@ Comme on peut le constater, cette solution-là aussi supprime les barres
 de mesure.
 
 
-@subheading transparence
-@c VO transparent
+@node La propriété transparent
+@unnumberedsubsubsec La propriété @code{transparent}
+@translationof The transparent property
 
 @cindex transparent, propriété
 @cindex transparence
@@ -1223,7 +1263,24 @@ pour rendre la métrique transparente est :
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'transparent = ##t
+  \override Staff.TimeSignature.transparent = ##t
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+@noindent
+L'utilisation de la propriété @code{transparent} étant
+relativement fréquent, LilyPond dispose d'un raccourci à cet
+effet : @code{\hide} (pour « masquer ».
+
+@funindex \hide
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \hide Staff.TimeSignature
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1231,11 +1288,12 @@ pour rendre la métrique transparente est :
 @end lilypond
 
 @noindent
-La métrique a bien disparu mais la commande a laissé un blanc en lieu et
-place du chiffrage.  Ce peut être souhaitable dans le cadre d'un
-exercice, afin que les élèves aient la place pour compléter, mais dans
-d'autres circonstances, ce peut être gênant.  Pour y remédier,
-attribuons plutôt au stencil des métriques la valeur @code{#f} :
+La métrique a bien disparu dans les deux cas, mais la commande a
+laissé un blanc en lieu et place du chiffrage.  Ce peut être
+souhaitable dans le cadre d'un exercice, afin que les élèves aient
+la place pour compléter, mais dans d'autres circonstances, ce peut
+être gênant.  Pour y remédier, attribuons plutôt au stencil des
+métriques la valeur @code{#f} :
 
 @cindex TimeSignature, exemple de dérogation
 @cindex stencil, exemple d'utilisation de la propriété
@@ -1243,7 +1301,7 @@ attribuons plutôt au stencil des métriques la valeur @code{#f} :
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'stencil = ##f
+  \override Staff.TimeSignature.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1252,12 +1310,15 @@ attribuons plutôt au stencil des métriques la valeur @code{#f} :
 
 @noindent
 La différence est flagrante : le fait d'attribuer au stencil la
-valeur @code{#f} supprime totalement l'objet, tandis que le fait de le
-rendre @code{transparent} le laisse en place, mais de façon invisible.
+valeur @code{#f} ou grâce à @code{\omit} supprime totalement
+l'objet, tandis que le fait de le rendre @code{transparent} -- ce
+qui s'obtient aussi par la commande @code{\hide} -- le laisse en
+place, mais de façon invisible.
 
 
-@subheading couleur
-@c VO color
+@node La propriété color
+@unnumberedsubsubsec La propriété @code{color}
+@translationof The color property
 
 @cindex color, propriété
 
@@ -1285,7 +1346,7 @@ Pour mettre les barres de mesure en blanc, on écrit :
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #white
+  \override Staff.BarLine.color = #white
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1295,12 +1356,12 @@ Pour mettre les barres de mesure en blanc, on écrit :
 @noindent
 et nous constatons que les barres de mesure sont une fois de plus
 invisibles.  Attention : aucune apostrophe ne précède @code{white}
--- il ne s'agit pas d'un symbole mais d'une @strong{fonction}.  Quand on
-l'invoque, elle fournit une liste de valeurs internes requises pour
-changer la couleur en blanc.  Les autres couleurs aussi, dans la
-@qq{liste normale}, sont des fonctions.  Pour en être certain, vous
-pouvez faire l'essai en choisissant une autre fonction de la liste en
-guise de couleur.
+-- il ne s'agit pas d'un symbole mais d'une @strong{variable}.
+Quand on l'invoque, elle fournit une liste de valeurs internes
+requises pour changer la couleur en blanc.  Les autres couleurs
+aussi, dans la @qq{liste normale}, sont des variables.  Pour en
+être certain, vous pouvez faire l'essai en choisissant une autre
+variable de la liste en guise de couleur.
 
 @cindex couleur X11
 @cindex X11, couleurs
@@ -1309,9 +1370,9 @@ guise de couleur.
 
 Le deuxième moyen de changer la couleur consiste à utiliser la deuxième
 @ruser{Liste des couleurs}, dite noms de couleurs X11.  Ceux-ci doivent
-obligatoirement être précédés d'une autre fonction, qui convertit les
-noms de couleurs X11 en une liste de valeurs internes, @code{x11-color},
-comme ceci :
+obligatoirement être précédés d'une fonction, @code{x11-color},
+qui convertit les noms symboliques de couleur X11 en une liste de
+valeurs internes comme ceci :
 
 @cindex BarLine, exemple de dérogation
 @cindex color, exemple d'utilisation de la propriété
@@ -1319,7 +1380,7 @@ comme ceci :
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(x11-color 'white)
+  \override Staff.BarLine.color = #(x11-color 'white)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1329,19 +1390,21 @@ comme ceci :
 @noindent
 Vous noterez que, dans ce cas, la fonction @code{x11-color} admet un
 symbole comme argument ; il faut donc placer une apostrophe devant
-le symbole et insérer les deux à l'intérieur de parenthèses.
+le symbole de telle sorte qu'il ne soit pas interprété comme une
+variable, et insérer l'appel à la fonction à l'intérieur de
+parenthèses.
 
 @cindex rgb, couleur
 @cindex couleurs rgb
 
 @funindex rgb-color
 
-Il existe une troisième fonction, écrite pour convertir les valeurs RVB
-en couleurs internes -- la fonction @code{rgb-color}.  Elle comporte
-trois arguments, donnant respectivement l'intensité du rouge, du vert et
-du bleu.  Ces arguments prennent des valeurs comprises entre 0 et 1.
-Ainsi, pour choisir la couleur rouge, la valeur serait
-@code{(rgb-color 1 0 0)} ; pour le blanc, ce serait
+Il existe une autre fonction, chargée elle de convertir les
+valeurs RVB en couleurs internes -- la fonction @code{rgb-color}.
+Elle comporte trois arguments, donnant respectivement l'intensité
+du rouge, du vert et du bleu.  Ces arguments prennent des valeurs
+comprises entre 0 et 1.  Ainsi, pour choisir la couleur rouge, la
+valeur serait @code{(rgb-color 1 0 0)} ; pour le blanc, ce serait
 @code{(rgb-color 1 1 1)} :
 
 @cindex BarLine, exemple de dérogation
@@ -1350,7 +1413,7 @@ Ainsi, pour choisir la couleur rouge, la valeur serait
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+  \override Staff.BarLine.color = #(rgb-color 1 1 1)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1374,12 +1437,12 @@ notre exemple différentes nuances de gris :
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.StaffSymbol   #'color = #(x11-color 'grey30)
-  \override Staff.TimeSignature #'color = #(x11-color 'grey60)
-  \override Staff.Clef          #'color = #(x11-color 'grey60)
-  \override Voice.NoteHead      #'color = #(x11-color 'grey85)
-  \override Voice.Stem          #'color = #(x11-color 'grey85)
-  \override Staff.BarLine       #'color = #(x11-color 'grey10)
+  \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+  \override Staff.TimeSignature.color = #(x11-color 'grey60)
+  \override Staff.Clef.color = #(x11-color 'grey60)
+  \override Voice.NoteHead.color = #(x11-color 'grey85)
+  \override Voice.Stem.color = #(x11-color 'grey85)
+  \override Staff.BarLine.color = #(x11-color 'grey10)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1435,9 +1498,9 @@ régler le stencil de chacun sur @code{#f}, comme ceci :
 
 @cindex alignAboveContext, exemple d'utilisation de la propriété
 @cindex @code{\with}, exemple
-@cindex stencil, exemple d'utilisation de la propriété
 @cindex Clef, exemple de dérogation
 @cindex TimeSignature, exemple de dérogation
+@funindex \omit
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \new Staff ="main" {
@@ -1450,8 +1513,8 @@ régler le stencil de chacun sur @code{#f}, comme ceci :
         alignAboveContext = #"main"
       }
       {
-        \override Staff.Clef #'stencil = ##f
-        \override Staff.TimeSignature #'stencil = ##f
+        \omit Staff.Clef
+        \omit Staff.TimeSignature
         { f8 f c }
       }
     >>
@@ -1468,14 +1531,15 @@ d'ossia.
 
 Mais alors, quelle différence y a-t-il à modifier le contexte de portée
 au moyen de @code{\with} ou à modifier les stencils de la clef et de la
-métrique  avec @code{\override} ?  La principale différence est que
-les changements opérés dans une clause @code{\with} sont réalisés au
-moment où le contexte est créé et restent par la suite les valeurs
-@strong{par défaut} aussi longtemps que ce contexte existe, tandis que
-les commandes @code{\set} ou @code{\override} insérées dans la musique
-sont dynamiques -- elles provoquent des changements synchronisés avec un
-point particulier de la musique.  Si les changements sont annulés ou
-désactivés par @code{\unset} ou @code{\revert}, les réglages reprennent
+métrique  avec @code{\override} ou @code{\omit} comme ici ?  La
+principale différence est que les changements opérés dans une
+clause @code{\with} sont réalisés au moment où le contexte est
+créé et restent par la suite les valeurs @strong{par défaut} aussi
+longtemps que ce contexte existe, tandis que les commandes
+@code{\set} ou @code{\override} insérées dans la musique sont
+dynamiques -- elles provoquent des changements synchronisés avec
+un point particulier de la musique.  Si les changements sont annulés ou
+dés activés par @code{\unset} ou @code{\revert}, les réglages reprennent
 leurs valeurs par défaut, c'est-à-dire celles qui ont été fixées dans la
 clause @code{\with}, ou, en l'absence de celle-ci, les valeurs par
 défaut normales.
@@ -1511,9 +1575,35 @@ Remplaçons donc l'exemple ci-dessus par celui-ci :
       \new Staff \with {
         alignAboveContext = #"main"
         % Don't print clefs in this staff
-        \override Clef #'stencil = ##f
+        \override Clef.stencil = ##f
+        % Don't print time signatures in this staff
+        \override TimeSignature.stencil = ##f
+      }
+      { f8 f c }
+    >>
+    r4 |
+  }
+}
+@end lilypond
+
+Nous pourrions tout aussi bien utiliser les raccourcis
+@code{\hide} et @code{\omit} pour activer la propriété
+@code{transparent} et désactiver le @code{stencil}, ce qui
+donnerait :
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+  \relative g' {
+    r4 g8 g c4 c8 d |
+    e4 r8
+    <<
+      { f8 c c }
+      \new Staff \with {
+        alignAboveContext = #"main"
+        % Don't print clefs in this staff
+        \omit Clef
         % Don't print time signatures in this staff
-        \override TimeSignature #'stencil = ##f
+        \omit TimeSignature
       }
       { f8 f c }
     >>
@@ -1544,7 +1634,7 @@ taille de police de chaque type d'objet avec des commandes comme
 celle-ci pour les têtes de notes (@code{NoteHead}) :
 
 @example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
 @end example
 
 soit nous changeons la taille de toutes les polices à la fois grâce à la
@@ -1576,8 +1666,8 @@ Essayons sur l'exemple d'ossia :
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \omit Clef
+        \omit TimeSignature
         % Reduce all font sizes by ~24%
         fontSize = #-2
       }
@@ -1647,11 +1737,11 @@ augmente, les objets en question.  Voici comment elle s'utilise :
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \omit Clef
+        \omit TimeSignature
         fontSize = #-2
         % Reduce stem length and line spacing to match
-        \override StaffSymbol #'staff-space = #(magstep -2)
+        \override StaffSymbol.staff-space = #(magstep -2)
       }
       { f8 f c }
     >>
@@ -1797,6 +1887,17 @@ les crochets, peuvent se décaler vers la gauche ou vers la droite selon
 qu'ils pointent vers le haut ou vers le bas.  Ce comportement est géré
 automatiquement dès lors que @code{direction} est activé.
 
+
+@menu
+* La propriété direction::
+* Doigtés::
+@end menu
+
+
+@node La propriété direction
+@unnumberedsubsubsec La propriété @code{direction}
+@translationof The direction property
+
 @cindex down
 @cindex up
 @cindex center
@@ -1814,11 +1915,11 @@ notes de nouveau avec le comportement par défaut.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4 g c a |
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
 a4 g c a |
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
 a4 g c a |
-\revert Stem #'direction
+\revert Stem.direction
 a4 g c a |
 @end lilypond
 
@@ -1879,15 +1980,17 @@ signification est précisée.
   @tab Les nolets sont au-dessous/au-dessus des notes
 @end multitable
 
-Attention : ces commandes prédéfinies @strong{ne doivent pas} être
-précédées de @code{\once}.  Pour limiter l'effet à une seule note, il
-faut soit utiliser la commande équivalente @code{\once \override}, soit
-utiliser la commande prédéfinie, suivie, après la note à modifier, de la
-commande @code{\xxxNeutral} correspondante.
+Les variantes @code{\xxxNeutral} et @code{\xxxNormal} de ces
+commandes sont implémentées à l'aide de @code{\revert} ; elles
+@strong{ne doivent pas} être précédées de @code{\once}.  Pour
+limiter les effets des autres commandes prédéfinies (fonctionnant
+à base de @code{\override}) à une seule note, il faut les faire
+précéder d'un @code{\once}, comme pour toute dérogation.
 
 
+@node Doigtés
 @unnumberedsubsubsec Doigtés
-@c VO Fingering
+@translationof Fingering
 
 @cindex doigtés, positionnement
 @cindex doigtés, accords
@@ -1909,9 +2012,9 @@ les deux suivantes montrent l'effet lorsqu'on indique @code{DOWN} et
 
 @lilypond[quote,verbatim,relative=2]
 c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
 c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
 c4-5 a-3 f-1 c'-5 |
 @end lilypond
 
@@ -2010,10 +2113,10 @@ Voici quelques exemples :
 Si les indications de doigtés paraissent un peu serrées, on peut
 toujours réduire la taille de police (@code{font-size}).  La valeur
 par défaut donnée dans la RPI à la page de l'objet
-@code{Fingering} étant @code{-5}, essayons @code{-7} :
+@code{Fingering} étant @code{-5}, essayons @w{@code{-7}} :
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
 \set fingeringOrientations = #'(left)
 <f-2>4
 <c-1 e-2 g-3 b-5>4
@@ -2037,16 +2140,33 @@ par défaut donnée dans la RPI à la page de l'objet
 @translationof Outside-staff objects
 
 Les objets extérieurs à la portée sont placés automatiquement de façon à
-éviter les collisions.  Les objets avec la plus petite valeur de la
-propriété @code{outside-staff-priority} sont placés au plus près de la
-portée, tandis que les autres sont écartés autant qu'il faut pour éviter
-les collisions.  La @code{outside-staff-priority} est définie dans la
-@code{grob-interface} ; elle est donc une propriété commune à tous
-les objets de rendu.  Par défaut, elle est réglée sur @code{#f} pour
-tous les objets de la portée, et porte une valeur numérique appropriée à
-chacun des objets extérieurs à la portée, à mesure qu'ils sont créés.
-Le tableau suivant montre la valeur numérique par défaut pour
-quelques-uns des objets extérieurs à la portée les plus courant.
+éviter les collisions.  Il est toutefois possible, grâce à
+différentes méthodes, de rectifier un positionnement automatique
+qui se révèlerait ne pas être optimal.
+
+@menu
+* La propriété outside-staff-priority::
+* La commande textLengthOn::
+* Positionnement des nuances::
+* Dimensionnement des objets graphiques::
+@end menu
+
+
+@node La propriété outside-staff-priority
+@unnumberedsubsubsec La propriété @code{outside-staff-priority}
+@translationof The outside-staff-priority property
+
+Les objets avec la plus petite valeur de la propriété
+@code{outside-staff-priority} sont placés au plus près de la
+portée, tandis que les autres sont écartés autant qu'il faut pour
+éviter les collisions.  La @code{outside-staff-priority} est
+définie dans la @code{grob-interface} ; elle est donc une
+propriété commune à tous les objets de rendu.  Par défaut, elle
+est réglée sur @code{#f} pour tous les objets de la portée, et
+porte une valeur numérique appropriée à chacun des objets
+extérieurs à la portée, à mesure qu'ils sont créés.  Le tableau
+suivant montre la valeur numérique par défaut pour quelques-uns
+des objets extérieurs à la portée les plus courant.
 
 @cindex spanners
 @cindex bandeaux
@@ -2118,7 +2238,7 @@ d'entre eux.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Place dynamics above staff
 \dynamicUp
@@ -2170,12 +2290,12 @@ créé dans le contexte @code{Staff} :
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Place dynamics above staff
 \dynamicUp
 % Place following Ottava Bracket below Text Spanners
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
 % Start Ottava Bracket
 \ottava #1
 c'4 \startTextSpan
@@ -2219,10 +2339,10 @@ L'exemple suivant illustre ces deux différentes méthodes.
 @lilypond[quote,verbatim,relative=2]
 c4( c^\markup { \tiny \sharp } d4.) c8 |
 c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
 c4^\markup { \tiny \sharp } d4.) c8 |
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
 c4( c^\markup { \tiny \sharp } d4.) c8 |
 @end lilypond
 
@@ -2241,7 +2361,7 @@ de @qq{Text3} jusqu'à une valeur très haute :
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 c2^"Text1"
 c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
 c2^"Text3"
 c2^"Text4" |
 @end lilypond
@@ -2255,7 +2375,9 @@ notes pour laisser plus de place au texte.  C'est possible grâce à la
 commande @code{textLengthOn}.
 
 
-@subheading \textLengthOn
+@node La commande textLengthOn
+@unnumberedsubsubsec La commande @code{@bs{}textLengthOn}
+@translationof The textLengthOn command
 
 @cindex notes, répartition selon le texte
 
@@ -2279,10 +2401,12 @@ c2^"Text4" |
 @end lilypond
 
 La commande qui permet de revenir au comportement par défaut est
-@code{\textLengthOff}.  Rappelez-vous que @code{\once} ne
-fonctionne qu'avec @code{\override}, @code{\set}, @code{\revert} ou
-@code{\unset}, et donc ne peut pas être utilisé avec
-@code{\textLengthOn}.
+@code{\textLengthOff}.  Alternativement, lorsque l'instruction
+@code{\textLengthOn} se limite à un seul instant musical, vous
+pouvez la préfixer d'un @code{\once}.@*
+LilyPond dispose de commandes équivalentes et dévolues au
+traitement des repères et indications de tempo :
+@code{\markLengthOn} et @code{\markLengthOff}.
 
 @cindex étiquette de texte et collision
 
@@ -2306,20 +2430,21 @@ c,,2^"Text" c'' |
 R1 |
 
 % Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 c,,2^"Long Text   " c'' |
 R1 |
 
 % Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 \textLengthOn        % and turn on textLengthOn
 c,,2^"Long Text   "  % Spaces at end are honored
 c''2 |
 @end lilypond
 
 
-@subheading Nuances
-@c VO Dynamics
+@node Positionnement des nuances
+@unnumberedsubsubsec Positionnement des nuances
+@translationof Dynamics placement
 
 @cindex modification du positionnement des nuances
 @cindex nuances, modification du positionnement
@@ -2347,7 +2472,7 @@ pas être très satisfaisant, comme le montre cet exemple artificiel :
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
-a4\f b\mf c\mp b\p
+a4\f b\mf a\mp b\p
 @end lilypond
 
 @noindent
@@ -2360,8 +2485,9 @@ pas d'équivalent pour les indications de nuance.  Il nous faut donc
 chercher à faire cela avec la commande @code{\override}.
 
 
-@subheading Dimensionnement des objets graphiques
-@c VO Grob sizing
+@node Dimensionnement des objets graphiques
+@unnumberedsubsubsec Dimensionnement des objets graphiques
+@translationof Grob sizing
 
 @cindex grob, dimensionnement
 @cindex dimensionnement des grobs
@@ -2387,12 +2513,14 @@ l'extension gauche et moins l'infini à l'extension droite, en
 attribuant à @code{extra-spacing-width} la valeur
 @code{'(+inf.0 . -inf.0)}.  Pour être sûr que les objets ne se
 chevaucheront pas horizontalement, nous devons donc corriger cette
-valeur de @code{extra-spacing-width} en @code{'(0 . 0)}, afin que
-leur vraie largeur se manifeste.  La commande pour y parvenir avec des
-indications de nuances est :
+valeur de @code{extra-spacing-width} pour leur attribuer un peu
+d'espace supplémentaire.  L'unité de base est ici la largeur
+séparant deux lignes de portée ; décaler le bord gauche d'une
+demie unité vers la gauche et le bord droit d'une demie unité vers
+la droite devrait suffire :
 
 @example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
 @end example
 
 @noindent
@@ -2401,38 +2529,219 @@ Voyons si ça marche sur notre exemple précédent :
 @cindex DynamicText, exemple de dérogation
 @cindex extra-spacing-width, exemple d'utilisation de la propriété
 
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
-a4\f b\mf c\mp b\p |
-@end lilypond
-
-@noindent
-Bon, cela a mis un terme aux déplacements verticaux des
-nuances mais il reste deux problèmes.  Il faudrait que les
-nuances soient un peu plus écartées et ce serait mieux si
-elles étaient toutes à la même distance de la portée.  Le
-premier problème est simple à résoudre.  Au lieu d'attribuer
-à @code{extra-spacing-width} la valeur zéro, nous pourrions
-mettre un peu plus.  L'unité est la distance entre deux lignes
-de portée, donc en écartant le bord gauche d'une demie unité
-et le bord droit d'une demie unité, on obtient :
-
-@cindex DynamicText, exemple de dérogation
-@cindex extra-spacing-width, exemple d'utilisation de la propriété
-
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
 % Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
-a4\f b\mf c\mp b\p
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
+a4\f b\mf a\mp b\p
 @end lilypond
 
 @noindent
 C'est mieux mais nous voulons peut-être aligner les indications de
 nuance sur une même ligne plutôt que de les voir monter et
 descendre avec les notes.  La propriété qui gère cela est
-@code{staff-padding} ; la section suivante lui est consacrée.
+@code{staff-padding} -- voir @ref{Collisions d'objets}.
+
+
+@node Espacement vertical
+@section  Espacement vertical
+@translationof Vertical spacing
+
+En règle générale, LilyPond est plutôt performant en matière
+d'espacement vertical des objets musicaux.  Examinons ce qui se passe
+avec un chant simple à deux voix accompagnées au piano :
+
+@lilypond[quote,fragment,ragged-right]
+<<
+  \new ChoirStaff
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+
+Il n'y a rien à redire quant à l'espacement vertical.  Toutefois,
+partons du principe que nous travaillons avec un éditeur dont les
+exigences en matière d'espacement vertical sont les suivantes : les
+paroles doivent être clairement détachées des notes, l'accompagnement de
+piano séparé du chant et les portées de piano rapprochées l'une de
+l'autre.  Commençons par les paroles.
+
+Les paroles résident dans un système ; les commandes dévolues à leur
+espacement sont donc mentionnées à la section
+@ruser{Espacement vertical au sein d'un système}. Nous y constatons que
+les paroles sont des lignes de non-portée (@code{non-staff lines}) ; les
+commandes qui gèrent leur espacement font donc référence à la propriété
+@code{nonstaff}.  Les décaler de la portée à laquelle elles sont
+attachées (celle du haut) jouera sur la propriété @code{relatedstaff},
+les décaler de la ligne inférieure sur la propriété
+@code{unrelatedstaff}.  Les parties vocales sont membre d'un
+@code{VerticalAxisGroup} ; ce sont donc les propriétés de ce groupe qui
+doivent être ajustées.  Faisons un premier essai pour voir :
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #5
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #5
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+
+L'espacement est maintenant quelque peu exagéré.  Lorsque nous
+affectons 5 à la variable @code{padding}, LilyPond ajoute cinq espaces
+de portée à la distance séparant deux objets, ce qui est plus que
+généreux.  Nous nous limiterons à 2.
+
+Occupons-nous à présent de séparer l'accompagnement du chant.  La
+musique vocale fait l'objet d'un @code{ChoirStaff} ; il nous faut donc
+augmenter l'espace entre ce groupe et la portée de piano qui le suit.
+Nous y parviendrons en modifiant la variable @code{basic-distance} de
+l'élément @code{staffgroup-staff-spacing} du @code{StaffGrouper}.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff \with {
+    \override StaffGrouper.
+      staffgroup-staff-spacing.basic-distance = #15
+  }
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #2
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #2
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+
+Excellent.  Ne reste plus qu'à répondre à la dernière exigence :
+resserrer les portées du piano.  Pour y parvenir, nous ajusterons à
+nouveau les propriétés du @code{StaffGrouper}, ici en jouant à la fois
+sur la distance de base (@code{basic-distance}) et le décalage
+(@code{padding}) comme ci-dessous :
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff \with {
+    \override StaffGrouper.
+      staffgroup-staff-spacing.basic-distance = #15
+  }
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #2
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #2
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff \with {
+    \override StaffGrouper.staff-staff-spacing = #'(
+                            (basic-distance . 0)
+                            (padding . 0))
+  }
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+Les portées sont vraiment rapprochées, mais c'est ce que veut l'éditeur.
+On pourra toujours les écarter au besoin en jouant sur les éléments
+@code{padding} ou @code{basic-distance}.
+
+Il existe bien des manières de modifier l'espacement vertical.  Le point
+crucial à ne pas oublier est que l'espacement des objets au sein d'un
+regroupement -- un @code{StaffGroup}, tels @code{GrandStaff} ou
+@code{PianoStaff} -- dépend des variables d'espacement d'un
+@code{StaffGrouper} ; l'espacement de portées non regroupées (comme
+@code{Lyrics} et @code{Staff}) dépend des variables d'un
+@code{VerticalAxisGroup}.  Voir
+@ruser{Variables d'espacement vertical fluctuant} et
+@ruser{Espacement vertical au sein d'un système} pour de plus amples
+détails.
 
 
 @node Collisions d'objets
@@ -2528,17 +2837,18 @@ objet qui accepte la @code{side-position-interface} et l'objet le plus
 proche (généralement une note ou une ligne de portée) ;
 @code{staff-padding} ne s'applique qu'aux objets qui sont toujours
 placés au-dehors de la portée -- il contrôle l'espace minimum à insérer
-entre l'objet et la portée.  Attention : par défaut,
-@code{staff-padding} concerne les objets positionnés par rapport
-à la portée et n'a aucun effet sur les objets qui sont positionnés par
-rapport à une note ; il est toutefois possible de le régler pour
-fonctionner avec ces derniers.
+entre la portée et l'objet extérieur.  Attention : @code{staff-padding}
+concerne les objets positionnés par rapport à la portée et n'a aucun
+effet sur les objets qui sont positionnés par rapport à une note ; tout
+aménagement qui lui serait apporté ne provoquera pas d'eereur, mais sera
+ignoré.
 
 Pour trouver quelle propriété @code{padding} employer pour l'objet que
 vous cherchez à repositionner, il vous faut consulter les propriétés de
-l'objet dans la RPI.  Prenez garde que les propriétés @code{padding} ne
-sont pas forcément traitées dans l'objet en question ; il faut
-alors regarder les objets qui semblent s'en rapprocher.
+l'objet dans la Référence des propriétés internes.  Prenez garde que les
+propriétés @code{padding} ne sont pas forcément traitées dans l'objet en
+question ; il faut alors regarder les objets qui semblent s'en
+rapprocher.
 
 Toutes les valeurs @code{padding} sont exprimées en espace de portée.
 Pour la plupart des objets, la valeur par défaut est aux alentours de
@@ -2705,9 +3015,21 @@ trouver les propriétés à retoucher pour obtenir un déplacement.
 Voyons maintenant comment les propriétés décrites dans la section
 précédente peuvent nous aider à résoudre les collisions.
 
+@menu
+* La propriété padding::
+* La propriété right-padding::
+* La propriété staff-padding::
+* La propriété self-alignment-X::
+* La propriété staff-position::
+* La propriété extra-offset::
+* La propriété positions::
+* La propriété force-hshift::
+@end menu
+
 
-@subheading la propriété padding
-@c VO padding property
+@node La propriété padding
+@unnumberedsubsubsec La propriété @code{padding}
+@translationof The padding property
 
 @cindex décalage (padding)
 @cindex résolution des chevauchements de notation
@@ -2722,7 +3044,7 @@ des symboles qui sont imprimés au-dessus ou en dessous des notes.
 
 @lilypond[quote,fragment,relative=1,verbatim]
 c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
 b2\fermata
 @end lilypond
 
@@ -2731,11 +3053,11 @@ b2\fermata
 
 @lilypond[quote,fragment,relative=1,verbatim]
 % This will not work, see below:
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
 \tempo 4=120
 c1 |
 % This works:
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
 \tempo 4=80
 d1 |
 @end lilypond
@@ -2752,8 +3074,9 @@ fait partie d'un ensemble d'objets positionnés en fonction de leur
 les autres objets du groupe.
 
 
-@subheading la propriété right-padding
-@c VO right-padding
+@node La propriété right-padding
+@unnumberedsubsubsec La propriété @code{right-padding}
+@translationof The right-padding property
 
 @cindex right-padding, propriété
 
@@ -2776,15 +3099,13 @@ sesquisharp = \markup { \sesquisharp }
 \relative c'' {
   c4
   % This prints a sesquisharp but the spacing is too small
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 c
   % This improves the spacing
-  \once \override Score.AccidentalPlacement #'right-padding = #0.6
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Score.AccidentalPlacement.right-padding = #0.6
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 |
 }
 @end lilypond
@@ -2797,25 +3118,23 @@ la propriété @code{text} de @code{Accidental}, déclaré comme étant un
 signe sesqui-dièse.  Celui-ci est ensuite repoussé devant la tête de
 note par la retouche de @code{right-padding}.
 
-@noindent
-
 
-@subheading la propriété staff-padding
-@c VO staff-padding property
+@node La propriété staff-padding
+@unnumberedsubsubsec La propriété @code{staff-padding}
+@translationof The staff-padding property
 
 @cindex alignement d'objets sur une ligne de base
 @cindex objets, alignement sur une ligne de base
 
 @code{staff-padding} sert à aligner des objets tels que des nuances
-sur une ligne fictive à une hauteur donnée par rapport à la portée
-plutôt qu'à une hauteur qui varie en fonction de la position de la note
-sur laquelle porte l'objet.  Ce n'est pas une propriété de
-@code{DynamicText} mais de @code{DynamicLineSpanner}, car la ligne
-fictive est destinée à s'appliquer autant à @strong{toutes} les nuances,
-notamment celles qui sont créées comme des bandeaux en longueur (en
-anglais @emph{Spanners}).  Tel est donc le moyen d'aligner les
-indications de nuance, comme dans cet exemple repris de la section
-précédente :
+sur une ligne fictive à une distance donnée par rapport à la portée en
+l'absence d'autre élément de notation qui les repousserait.  Ce n'est
+pas une propriété de @code{DynamicText} mais de
+@code{DynamicLineSpanner}, car la ligne fictive est destinée à
+s'appliquer autant à @strong{toutes} les nuances, notamment celles qui
+sont créées comme des bandeaux en longueur (en anglais @emph{Spanners}).
+Tel est donc le moyen d'aligner les indications de nuance, comme dans
+cet exemple repris de la section précédente :
 
 @cindex DynamicText, exemple de dérogation
 @cindex extra-spacing-width, exemple d'utilisation de la propriété
@@ -2823,21 +3142,18 @@ précédente :
 @cindex staff-padding, exemple d'utilisation de la propriété
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-% Extend width by 1 unit
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
-% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner #'staff-padding = #2
-a4\f b\mf c\mp b\p
+\override DynamicLineSpanner.staff-padding = #3
+a4\f b\mf a\p b\mp
 @end lilypond
 
 
-@subheading la propriété self-alignment-X
-@c VO self-alignment-X property
+@node La propriété self-alignment-X
+@unnumberedsubsubsec La propriété @code{self-alignment-X}
+@translationof The self-alignment-X property
 
-L'exemple suivant montre comment résoudre une collision entre une
-indication de corde et une hampe, en alignant le coin droit sur le point
-de référence de la note parente :
+L'exemple suivant montre comment ajuster le positionnement d'une
+indication de corde relativement à une hampe, en alignant le coin
+droit sur le point de référence de la note parente :
 
 @cindex StringNumber, exemple de dérogation
 @cindex self-alignment-X, exemple d'utilisation de la propriété
@@ -2845,13 +3161,14 @@ de référence de la note parente :
 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
 \voiceOne
 <a\2>
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
 <a\2>
 @end lilypond
 
 
-@subheading la propriété staff-position
-@c VO staff-position property
+@node La propriété staff-position
+@unnumberedsubsubsec La propriété @code{staff-position}
+@translationof The staff-position property
 
 @cindex collision d'objets à l'intérieur d'une portée
 
@@ -2870,7 +3187,7 @@ type :
 Ici, la meilleure solution consiste à déplacer le symbole de pause vers
 le bas -- puisque cette pause appartient à la voix deux.  Par défaut,
 dans la @code{\voiceTwo} (c'est-à-dire dans la seconde voix d'une
-construction @code{<<@{@dots{}@} \\ @{@dots{}@}>>}), la propriété
+construction @code{<<@{ @dots{} @} \\ @{ @dots{} @}>>}), la propriété
 @code{staff-position} est réglée sur @code{-4} pour les
 @code{MultiMeasureRest} ; nous avons donc besoin de la déplacer, disons,
 de quatre demi-intervalles vers le bas, ce qui donne @code{-8}.
@@ -2882,7 +3199,7 @@ de quatre demi-intervalles vers le bas, ce qui donne @code{-8}.
 <<
   { c4 c c c }
   \\
-  \override MultiMeasureRest #'staff-position = #-8
+  \override MultiMeasureRest.staff-position = #-8
   { R1 }
 >>
 @end lilypond
@@ -2892,8 +3209,9 @@ car la ligne supplémentaire au-dessus du silence est insérée
 automatiquement.
 
 
-@subheading la propriété extra-offset
-@c VO extra-offset property
+@node La propriété extra-offset
+@unnumberedsubsubsec La propriété @code{extra-offset}
+@translationof The extra-offset property
 
 @cindex positionnement des objets
 @cindex positionnement des grobs
@@ -2913,13 +3231,14 @@ légèrement vers la gauche et de 1,8 intervalle de lignes vers le bas :
 @lilypond[quote,fragment,relative=1,verbatim]
 \stemUp
 f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
 f4-5
 @end lilypond
 
 
-@subheading la propriété positions
-@c VO positions property
+@node La propriété positions
+@unnumberedsubsubsec La propriété @code{positions}
+@translationof The positions property
 
 @cindex contrôle des nolets, liaisons, phrasés et ligatures
 @cindex gestion manuelle des nolets, liaisons, phrasés et ligatures
@@ -2930,40 +3249,39 @@ f4-5
 
 La propriété @code{positions} permet de contrôler manuellement la
 position et l'inclinaison des nolets, coulés, liaisons de phrasé et
-barres de ligature.  Voici un exemple avec une horrible liaison de
-phrasé -- horrible pour avoir tenté de contourner la liaison de
-l'acciaccature.
+barres de ligature.
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4 \acciaccatura e8\( d8 c~ c d c d\)
-@end lilypond
+Voici un exemple où la liaison de phrasé recouvre la liaison
+d'articulation :
 
-@noindent
-Nous pourrions tout simplement déplacer la liaison de phrasé au-dessus
-des notes, et ce serait la meilleure solution :
-
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\phrasingSlurUp
-\acciaccatura e8\( d8 c~ c d c d\)
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+a8 \( ( a'16 ) a \)
 @end lilypond
 
-@noindent
-Mais si, pour une quelconque raison, cette solution n'était pas
-envisageable, l'autre solution consiste à déplacer légèrement vers le
-bas l'extrémité gauche de la liaison de phrasé, grâce à la propriété
-@code{positions}.  Cela corrige en même temps la forme plutôt
-disgracieuse de la liaison.
-
 @cindex PhrasingSlur, exemple de dérogation
 @cindex positions, exemple d'utilisation de la propriété
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
-\acciaccatura e8\( d8 c~ c d c d\)
+@noindent
+Nous pourrions envisager de remonter quelque peu les extrémités
+de la liaison de phrasé.  Commençons par repositionner l'extrémité
+gauche à 2,5 espaces de portée au-dessus de la ligne médiane, et
+la droite à 4,5 ; LilyPond choisira la courbe dont les extrémités
+seront les plus approchantes de celle déterminées :
+
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+\once \override PhrasingSlur.positions = #'(2.5 . 4.5)
+a8 \( ( a'16 ) a \)
 @end lilypond
 
+C'est déjà mieux, mais ne pourrait-on pas maintenant abaisser un
+peu l'extrémité droite de la liaison d'articulation ?  Vous
+constaterez qu'il n'est pas possible d'y arriver, tout simplement
+parce qu'il n'y a pas de meilleur candidat ; la propriété
+@code{positions} n'est alors d'aucune utilité.  Les liaisons,
+aussi bien de tenue que d'articulation ou de phrasé, peuvent se
+positionner et se dessiner tout en finesse lorsque nécessaire --
+voir à ce sujet @ruser{Modification des liaisons}.
+
 Voici un autre exemple. Comme nous pouvons le constater, les barres de
 ligature chevauchent les liaisons de tenue :
 
@@ -2998,7 +3316,7 @@ au-dessous de la ligne médiane mais, disons, à 1 :
     { c'1 ~ c'2. e'8 f' }
     \\
     {
-      \override Beam #'positions = #'(-1 . -1)
+      \override Beam.positions = #'(-1 . -1)
       e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g''
     }
   >>
@@ -3016,8 +3334,9 @@ second bloc de croches de la première voix mais qu'il ne s'applique
 à aucune mesure de la deuxième voix.
 
 
-@subheading la propriété force-hshift
-@c VO force-hshift property
+@node La propriété force-hshift
+@unnumberedsubsubsec La propriété @code{force-hshift}
+@translationof The force-hshift property
 
 Maintenant, nous sommes prêts à appliquer les dernières corrections à
 l'exemple de Chopin présenté à la fin de @ref{J'entends des Voix}, que
@@ -3064,13 +3383,13 @@ Et voici le résultat final :
     \\
     {
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
     \\
     \\
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -3106,7 +3425,7 @@ pas fait apparaître les indications de nuance, de doigté ni de pédale.
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3119,7 +3438,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % Reposition the c2 to the right of the merged note
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % Move the c2 out of the main note column
         % so the merge will work
         \shiftOnn
@@ -3131,8 +3450,7 @@ rhMusic = \relative c'' {
         % Stem on the d2 must be down to permit merging
         \stemDown
         % Stem on the d2 should be invisible
-        \tweak Stem #'transparent ##t
-        \tweak Flag #'transparent ##t
+        \tweak Flag.transparent ##t
         d2
       }
       \new Voice {
@@ -3312,7 +3630,7 @@ insérer juste devant la première note liée ; elle est censée déplacer la
 liaison vers le haut de 3,5 demi-intervalles de lignes au-dessus de la
 ligne médiane :
 
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
 
 Cela s'adjoint à la deuxième mesure, pour donner :
 
@@ -3321,7 +3639,7 @@ Cela s'adjoint à la deuxième mesure, pour donner :
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3402,7 +3720,7 @@ au début de cette section et
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3477,7 +3795,7 @@ Voici ce que donnent ces modifications :
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3548,7 +3866,7 @@ hampe transparente et déplacer le do avec la propriété
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3562,7 +3880,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % Reposition the c2 to the right of the merged note
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % Move the c2 out of the main note column
         % so the merge will work
         \shiftOnn
@@ -3574,8 +3892,7 @@ rhMusic = \relative c'' {
         % Stem on the d2 must be down to permit merging
         \stemDown
         % Stem on the d2 should be invisible
-        \tweak Stem #'transparent ##t
-        \tweak Flag #'transparent ##t
+        \tweak Flag.transparent ##t
         d2
       }
       \new Voice {
@@ -3629,6 +3946,11 @@ lhMusic = \relative c' {
 @subsection Autres utilisations des retouches
 @translationof Other uses for tweaks
 
+@menu
+* Liaison entre plusieurs voix::
+* Rendu MIDI d'un point d'orgue::
+@end menu
+
 @cindex transparent, utilisation de la propriété
 @cindex création d'objet invisible
 @cindex suppression d'objets
@@ -3640,8 +3962,9 @@ lhMusic = \relative c' {
 @cindex liaison de tenue avec changement de voix
 
 
-@subheading Liaison entre plusieurs voix
-@c VO Tying notes across voices
+@node Liaison entre plusieurs voix
+@unnumberedsubsubsec Liaison entre plusieurs voix
+@translationof Tying notes across voices
 
 Voici un exemple qui montre comment créer une liaison de
 prolongation entre des notes appartenant à des voix différentes.  En
@@ -3663,8 +3986,7 @@ on a alors l'impression que la liaison couvre les deux voix.
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
+    \tweak Flag.transparent ##t
     b8~ b\noBeam
   }
 \\
@@ -3679,9 +4001,8 @@ réglant la longueur (@code{length}) sur @code{8},
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
-    \tweak Stem #'length #8
+    \tweak Flag.transparent ##t
+    \tweak Stem.length #8
     b8~ b8\noBeam
   }
 \\
@@ -3690,8 +4011,42 @@ réglant la longueur (@code{length}) sur @code{8},
 @end lilypond
 
 
-@subheading Rendu MIDI d'un point d'orgue
-@c VO Simulating a fermata in MIDI
+@funindex \single
+@cindex affinage généré par une dérogation
+
+Nous aurions pu, pour déroger à la transparence d'un objet
+graphique, utiliser le raccourci @code{\omit} que nous avons vu
+plus haut.  L'affinage constitue une opération différente en ceci
+qu'il n'affecte que les propriétés générées par une expression
+musicale unique.  Nous pourrions tout à fait convertir des
+dérogations en affinages à l'aide d'un @code{\single} et ré-écrire
+l'exemple précédent de cette manière :
+
+@lilypond[quote,fragment,relative=2,verbatim]
+<<
+  {
+    \single \hide Stem
+    \single \hide Flag
+    \tweak Stem.length #8
+    b8~ b\noBeam
+  }
+\\
+  { b8[ g] }
+>>
+@end lilypond
+
+Dans ce cas particulier, la différence avec un @code{\once \hide}
+n'est pas flagrante.  Elle prend cependant toute son importance
+lorsque plusieurs objets de retrouvent au même instant musical --
+comme les têtes des notes d'un accord.  En effet, la présence d'un
+@code{\once} sera répercutée à tous les objets, alors qu'un
+@code{\single} n'affectera, lui, qu'un seul objet, celui généré
+par l'expression musicale qui le suit directement.
+
+
+@node Rendu MIDI d'un point d'orgue
+@unnumberedsubsubsec Rendu MIDI d'un point d'orgue
+@translationof Simulating a fermata in MIDI
 
 @cindex stencil, utilisation de la propriété
 @cindex point d'orgue, rendu en MIDI
@@ -3721,7 +4076,7 @@ Nous montrons ci-dessous le résultat des deux méthodes :
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'transparent = ##t
+    \once \hide Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata |
@@ -3743,7 +4098,7 @@ Nous montrons ci-dessous le résultat des deux méthodes :
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'stencil = ##f
+    \once \omit Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata |
@@ -3771,7 +4126,7 @@ Glossaire musicologique :
 
 @node Utilisation de variables dans les retouches
 @subsection Utilisation de variables dans les retouches
-@translationof Using variables for tweaks
+@translationof Using variables for layout adjustments
 
 @cindex variables, utilisation dans les retouches
 @cindex utilisation de variables dans les retouches
@@ -3790,11 +4145,11 @@ enchâssées dans un @code{\markup} -- ce qui les rend pénibles à saisir
 @code{\revert} ?
 
 @example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
 
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
 @end example
 
 Là encore, ce serait extrêmement pénible à saisir, surtout s'il y avait
@@ -3812,13 +4167,13 @@ milieu d'un bloc @code{\lyricmode} !
 
 @lilypond[quote,verbatim]
 emphasize = {
-  \override Lyrics.LyricText #'font-shape = #'italic
-  \override Lyrics.LyricText #'font-series = #'bold
+  \override Lyrics.LyricText.font-shape = #'italic
+  \override Lyrics.LyricText.font-series = #'bold
 }
 
 normal = {
-  \revert Lyrics.LyricText #'font-shape
-  \revert Lyrics.LyricText #'font-series
+  \revert Lyrics.LyricText.font-shape
+  \revert Lyrics.LyricText.font-series
 }
 
 global = { \key c \major \time 4/4 \partial 4 }
@@ -3881,20 +4236,15 @@ les parties avec tous les @code{#()}.  Celles-ci sont expliquées dans
 
 @lilypond[quote,verbatim,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  (markup #:hspace 0
-          #:translate '(5 . 0)
-          #:line (#:dynamic "mp"
-                  #:text #:italic "dolce")))
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   (make-music
-    'TextScriptEvent
-    'direction UP
-    'text (markup #:bold (#:box string))))
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -3917,18 +4267,15 @@ dans nos fichiers de musique, et je trouve personnellement tous ces
 @example
 %%% enregistrez ceci dans un fichier nommé "definitions.ily"
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 @end example
 
 Nous rappellerons ce fichier par une simple commande @code{\include} au
@@ -3957,18 +4304,15 @@ sous @file{musique.ly}).
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -3994,66 +4338,60 @@ fichier @file{definitions.ily} par ceci :
 @example
 %%%  definitions.ily
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \layout{
   \context {
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context {
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   }
   \context {
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4078,63 +4416,57 @@ aussi augmenter la taille globale de police.
 @example
 %%%  web-publish.ily
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 #(set-global-staff-size 23)
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 #(set-global-staff-size 23)
 
 \layout{
   \context { \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context { \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4155,8 +4487,8 @@ musique.
 
 Il est possible, bien sûr, de rendre cela encore plus pratique.  Nous
 pourrions créer un fichier @file{definitions.ily} qui ne contiendrait
-que les définitions de @code{mpdolce} et de @code{inst}, un
-fichier @file{publication-web.ily} qui ne contiendrait que la section
+que les définitions de @code{mpdolce} et de @code{inst}, un fichier
+@file{publication-web.ily} qui ne contiendrait que la section
 @code{layout} décrite ci-dessus et un fichier @file{universite.ily} qui
 ne contiendrait que les retouches pour produire le résultat que mon
 professeur préfère.  Le début du fichier @file{musique.ly} ressemblerait
@@ -4205,7 +4537,7 @@ encore vous l'avez compilé directement à partir des sources ; et
 (b) du système d'exploitation sur lequel il tourne.
 
 
-@strong{Téléchargé depuis lilypond.org}
+@subsubsubheading Téléchargé depuis lilypond.org
 
 @itemize @bullet
 @item GNU/Linux
@@ -4235,8 +4567,7 @@ Dans l'Explorateur Windows, voir
 @end itemize
 
 
-@strong{Installé par un gestionnaire de paquetages ou compilé d'après
-les sources}
+@subsubsubheading Installé par un gestionnaire de paquetages ou compilé d'après les sources
 
 @code{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, où
 @var{PREFIX} est déterminé par votre gestionnaire de paquetages ou par
@@ -4265,8 +4596,8 @@ est défini comme :
 
 @example
 tieDotted = @{
-  \override Tie #'dash-period = #0.75
-  \override Tie #'dash-fraction = #0.1
+  \override Tie.dash-period = #0.75
+  \override Tie.dash-fraction = #0.1
 @}
 @end example
 
@@ -4370,7 +4701,7 @@ fonction de leur position sur la portée.
 
 \relative c' {
   % Arrange to obtain color from color-notehead procedure
-  \override NoteHead #'color = #color-notehead
+  \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
 }
 @end lilypond
index 105b1fde2d47027818fda3de5abdfd8a81a17762..f76b7c3bfd811ec903f9340104fa2738bcc0da4c 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 @ignore
-    Translation of GIT committish: 957ee70b1613ce33157486a1372827e7c1c9274f
+    Translation of GIT committish: 11ed968a1245413a224674d833c32b9765a5b28f
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -65,8 +65,6 @@ Annexes
 
 * Tables du manuel de notation::              tables et diagrammes.
 * Aide-mémoire::                              résumé de la syntaxe de LilyPond.
-* Grammaire de LilyPond::                     diagramme syntaxique pour
-  l'analyseur de LilyPond.
 * GNU Free Documentation License::            licence de ce document.
 * Index des commandes LilyPond::
 * Index de LilyPond::
@@ -91,15 +89,6 @@ Annexes
 @include notation/notation-appendices.itely
 @include notation/cheatsheet.itely
 
-@node Grammaire de LilyPond
-@appendix Grammaire de LilyPond
-@translationof LilyPond grammar
-
-Cette annexe présente la grammaire du langage de LilyPond, telle qu'elle
-ressort de l'analyseur syntaxique.
-
-@verbatiminclude ly-grammar.txt
-
 @include fdl.itexi
 
 @node Index des commandes LilyPond
diff --git a/Documentation/fr/notation/GNUmakefile b/Documentation/fr/notation/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index ba56e9560374a1f5bfc3089a40cc60e56348698a..2dff5b14ebb2ff2db8163e820d2058ef75f2becb 100644 (file)
@@ -1,14 +1,15 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: 5c35684285613e8960e2dd4324559e1ee3774b9b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+
+@c \version "2.17.30"
 
 @c Translators: Jean-Charles Malahieude
 
@@ -178,7 +179,6 @@ Glossaire musicologique :
 * Contextes prédéfinis::
 * Ligatures::
 * Guidons::
-* Prise en charge de la basse figurée::
 @end menu
 
 
@@ -231,8 +231,8 @@ spécifique.  Par défaut, le graveur @code{LigatureBracket} place un
 simple crochet au dessus de la ligature :
 
 @lilypond[quote,ragged-right,verbatim]
-\transpose c c' {
-  \[ g c a f d' \]
+\relative c'' {
+  \[ g c, a' f d' \]
   a g f
   \[ e f a g \]
 }
@@ -245,7 +245,7 @@ style de ligature désiré, il faut remplacer, dans le contexte
 @code{Voice} approprié, le graveur @code{Ligature_bracket_engraver} par
 le graveur de ligature qui convient -- voir les rubriques
 @ref{Ligatures mensurales} et @ref{Neumes et ligatures grégoriennes} à
-ce sujet. 
+ce sujet.
 
 @seealso
 Glossaire musicologique :
@@ -314,7 +314,7 @@ L'impression de guidons s'obtient en affectant, dans un bloc
     \context {
       \Staff
       \consists "Custos_engraver"
-      \override Custos #'style = #'mensural
+      \override Custos.style = #'mensural
     }
   }
 }
@@ -356,22 +356,6 @@ Morceaux choisis :
 @rlsrnamed{Ancient notation, Musiques anciennes}.
 
 
-@node Prise en charge de la basse figurée
-@unnumberedsubsubsec Prise en charge de la basse figurée
-@translationof Figured bass support
-
-LilyPond gère partiellement la représentation de basses chiffrées,
-typiques de l'époque baroque, mais également employées de nos jours en
-harmonie et en analyse -- voir la rubrique @ref{Basse chiffrée}.
-
-@seealso
-Glossaire musicologique :
-@rglosnamed{figured bass,Basse figurée}.
-
-Manuel de notation :
-@ref{Basse chiffrée}.
-
-
 @node Typographie de musique ancienne
 @subsection Typographie de musique ancienne
 @translationof Typesetting mensural music
@@ -405,13 +389,13 @@ lancer dans la saisie de votre chant comme ci-après :
 @lilypond[quote,ragged-right,verbatim]
 \score {
   <<
-    \new MensuralVoice = "discantus" \transpose c c' {
-      \override Score.BarNumber #'transparent = ##t {
-        c'1\melisma bes a g\melismaEnd
+    \new MensuralVoice = "discantus" \relative c'' {
+      \hide Score.BarNumber {
+        c1\melisma bes a g\melismaEnd
         f\breve
-        \[ f1\melisma a c'\breve d'\melismaEnd \]
-        c'\longa
-        c'\breve\melisma a1 g1\melismaEnd
+        \[ f1\melisma a c\breve d\melismaEnd \]
+        c\longa
+        c\breve\melisma a1 g1\melismaEnd
         fis\longa^\signumcongruentiae
       }
     }
@@ -442,9 +426,9 @@ Le tableau suivant présente les différentes clés anciennes que vous
 pouvez sélectionner avec la commande @code{\clef}.  Certaines de ces
 clés utilisent le même glyphe, attaché à l'une ou l'autre des lignes
 de la portée.  Le chiffre porté en suffixe permet alors de les
-différencier.  Vous pouvez néanmoins forcer le positionnement du
-glyphe sur une ligne, comme expliqué à la section @ref{Clefs}.  Dans la
-colonne exemple, la note suivant la clé est un do médium.
+différencier.  Vous pouvez forcer le positionnement du glyphe sur une
+ligne, comme expliqué à la section @ref{Clefs}.  Dans la colonne
+exemple, la note suivant la clé est un do médium.
 
 Les clés d'ut de Petrucci avaient une hampe gauche différente selon
 leur ligne de rattachement.
@@ -461,12 +445,13 @@ leur ligne de rattachement.
 Clef d'ut, style mensural historique
 @tab
 @code{mensural-c1}, @code{mensural-c2},@*
-@code{mensural-c3}, @code{mensural-c4}
+@code{mensural-c3}, @code{mensural-c4},@*
+@code{mensural-c5}
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-c2"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -476,8 +461,8 @@ Clef de fa, style mensural historique
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-f"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -487,8 +472,21 @@ Clef de sol, style mensural historique
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-g"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
+@end lilypond
+
+@item
+Clef d'ut, style mensural noirci
+@tab
+@code{blackmensural-c1}, @code{blackmensural-c2},@*
+@code{blackmensural-c3}, @code{blackmensural-c4},@*
+@code{blackmensural-c5}
+@tab
+@lilypond[relative=1,notime]
+  \clef "blackmensural-c2"
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -498,7 +496,7 @@ Clef d'ut, style mensural moderne
 @code{neomensural-c3}, @code{neomensural-c4}
 @tab
 @lilypond[relative=1,notime]
-  \clef "neomensural-c2" c
+  \clef "neomensural-c2" c1
 @end lilypond
 
 @item
@@ -511,8 +509,8 @@ lignes (clef d'ut seconde pour l'exemple)
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-c2"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -524,8 +522,8 @@ lignes (clef de fa troisième pour l'exemple)
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-f3"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -535,8 +533,8 @@ Clef de sol, style mensural Petrucci
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-g"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 @end multitable
 
@@ -587,34 +585,35 @@ suivantes :
 {
   \set Score.timing = ##f
   \set Score.barAlways = ##t
-  s_\markup { "\\time 4/4" }^\markup { "       " \musicglyph
+  \textLengthOn
+  s^\markup { "\\time 4/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural44" }
   s
-  s_\markup { "\\time 2/2" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 2/2" }_\markup { "       " \musicglyph
 #"timesig.neomensural22" }
   s
-  s_\markup { "\\time 6/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 6/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural64" }
   s
-  s_\markup { "\\time 6/8" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 6/8" }_\markup { "       " \musicglyph
 #"timesig.neomensural68" }
   \break
-  s_\markup { "\\time 3/2" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 3/2" }_\markup { "       " \musicglyph
 #"timesig.neomensural32" }
   s
-  s_\markup { "\\time 3/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 3/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural34" }
   s
-  s_\markup { "\\time 9/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 9/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural94" }
   s
-  s_\markup { "\\time 9/8" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 9/8" }_\markup { "       " \musicglyph
 #"timesig.neomensural98" }
   \break
-  s_\markup { "\\time 4/8" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 4/8" }_\markup { "       " \musicglyph
 #"timesig.neomensural48" }
   s
-  s_\markup { "\\time 2/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 2/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural24" }
 }
 @end lilypond
@@ -635,25 +634,25 @@ Voici les différences entre les styles :
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter default }
 
-  \override Staff.TimeSignature #'style = #'numbered
+  \override Staff.TimeSignature.style = #'numbered
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter numbered }
 
-  \override Staff.TimeSignature #'style = #'mensural
+  \override Staff.TimeSignature.style = #'mensural
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter mensural }
 
-  \override Staff.TimeSignature #'style = #'neomensural
+  \override Staff.TimeSignature.style = #'neomensural
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter neomensural }
-  \override Staff.TimeSignature #'style = #'single-digit
+  \override Staff.TimeSignature.style = #'single-digit
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter single-digit }
 }
 @end lilypond
 
 La rubrique @ref{Métrique} expose les principes généraux sur
-l'utilisation des indications de métrique. 
+l'utilisation des indications de métrique.
 
 @seealso
 Glossaire musicologique :
@@ -669,7 +668,7 @@ semi-brèves (@emph{tempus perfectum}) doit s'effectuer à la main en
 entrant :
 
 @example
-breveTP = #(ly:make-duration -1 0 3 2)
+breveTP = #(ly:make-duration -1 0 3/2)
 @dots{}
 @{ c\breveTP f1 @}
 @end example
@@ -693,7 +692,7 @@ commande @code{\time}.  Utilisez alors un
 Pour de la musique ancienne, vous disposez de plusieurs styles de tête
 de note, en plus du style par défaut @code{default}.  Vous pouvez
 affecter à la propriété @code{style} de l'objet @code{NoteHead}
-les valeurs @code{baroque}, @code{neomensural}, @code{mensural}, 
+les valeurs @code{baroque}, @code{neomensural}, @code{mensural},
 @code{petrucci}, @code{blackpetrucci} ou @code{semipetrucci}.
 
 Le style @code{baroque} diffère du style @code{default} par
@@ -731,13 +730,13 @@ L'exemple suivant illustre le style @code{petrucci}.
 @lilypond[quote,fragment,ragged-right,verbatim]
 \set Score.skipBars = ##t
 \autoBeamOff
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
 a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a'
-\override NoteHead #'style = #'semipetrucci
+\override NoteHead.style = #'semipetrucci
 a'\breve*5/6
-\override NoteHead #'style = #'blackpetrucci
+\override NoteHead.style = #'blackpetrucci
 a'8*4/3 a'
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
 a'\longa
 @end lilypond
 
@@ -765,21 +764,19 @@ Le réglage de la propriété @code{flag-style} de l'objet hampe
 styles actuellement pris en charge sont @code{default} et
 @code{mensural}.
 
-@lilypond[quote,fragment,ragged-right,verbatim]
-\override Flag #'style = #'mensural
-\override Stem #'thickness = #1.0
-\override NoteHead #'style = #'mensural
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\override Flag.style = #'mensural
+\override Stem.thickness = #1.0
+\override NoteHead.style = #'mensural
 \autoBeamOff
-c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8
-c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32
+c8 d e f c16 d e f c32 d e f s8
+c'8 d e f c16 d e f c32 d e f
 @end lilypond
 
 Notez que, pour chaque crochet mensural, l'extrémité la plus proche de
-la tête de note sera toujours attachée à une ligne de la portée.
+la tête de note sera attachée à une ligne de la portée.
 
 Il n'existe pas de crochet spécifique au style néomensural.
-@c  Nous vous conseillons donc, lorsque vous réalisez l'incipit d'une
-@c  transcription, d'utiliser le style par défaut.
 
 Les crochets n'existent pas en notation grégorienne.
 
@@ -789,9 +786,6 @@ Glossaire musicologique :
 @rglos{flag}.
 
 @knownissues
-Les crochets anciens s'attachent aux hampes avec un léger décalage.
-@c suite à des modifications intervenues au début de la série 2.3.
-
 L'alignement vertical des crochets par rapport aux lignes de la portée
 sous-entend que les hampes se terminent toujours soit sur une ligne,
 soit à l'exact milieu d'un interligne.  Ceci n'est pas toujours
@@ -820,11 +814,11 @@ L'exemple suivant illustre les styles @code{mensural} et
 
 @lilypond[quote,fragment,ragged-right,verbatim]
 \set Score.skipBars = ##t
-\override Rest #'style = #'classical
+\override Rest.style = #'classical
 r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'mensural
+\override Rest.style = #'mensural
 r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'neomensural
+\override Rest.style = #'neomensural
 r\longa^"neomensural" r\breve r1 r2 r4 r8 r16
 @end lilypond
 
@@ -877,7 +871,7 @@ Pour disposer des formes anciennes d'altération, utilisez la propriété
 et @code{KeySignature}, comme ceci :
 
 @example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
   #alteration-mensural-glyph-name-alist
 @end example
 
@@ -936,8 +930,8 @@ peut tout à fait faire l'objet d'un raccourci :
 ficta = { \once \set suggestAccidentals = ##t }
 \score { \relative c''
   \new MensuralVoice  {
-       \once \set suggestAccidentals = ##t
-  bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
+    \once \set suggestAccidentals = ##t
+    bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
   }
 }
 @end lilypond
@@ -993,9 +987,9 @@ Par exemple,
 
 @c @example
 @c \set Score.timing = ##f
-@c \set Score.defaultBarType = "empty"
-@c \override NoteHead #'style = #'neomensural
-@c \override Staff.TimeSignature #'style = #'neomensural
+@c \set Score.defaultBarType = "-"
+@c \override NoteHead.style = #'neomensural
+@c \override Staff.TimeSignature.style = #'neomensural
 @c \clef "petrucci-g"
 @c \[ c'\maxima g \]
 @c \[ d\longa c\breve f e d \]
@@ -1004,19 +998,19 @@ Par exemple,
 @c @end example
 @lilypond[quote,ragged-right,verbatim]
 \score {
-  \transpose c c' {
+  \relative c' {
     \set Score.timing = ##f
-    \set Score.defaultBarType = "empty"
-    \override NoteHead #'style = #'petrucci
-    \override Staff.TimeSignature #'style = #'mensural
+    \set Score.defaultBarType = "-"
+    \override NoteHead.style = #'petrucci
+    \override Staff.TimeSignature.style = #'mensural
     \clef "petrucci-g"
     \[ c'\maxima g \]
     \[ d\longa
-       \override NoteHead #'ligature-flexa = ##t
-       \once \override NoteHead #'flexa-width = #3.2
+       \override NoteHead.ligature-flexa = ##t
+       \once \override NoteHead.flexa-width = #3.2
        c\breve f e d \]
-    \[ c'\maxima d'\longa \]
-    \[ e'1 a g\breve \]
+    \[ c'\maxima d\longa \]
+    \[ e1 a, g\breve \]
   }
   \layout {
     \context {
@@ -1032,19 +1026,19 @@ Si on ne remplace pas le @code{Ligature_bracket_engraver}
 par le @code{Mensural_ligature_engraver}, on obtient
 
 @lilypond[quote,ragged-right]
-\transpose c c' {
+\relative c' {
   \set Score.timing = ##f
-  \set Score.defaultBarType = "empty"
-  \override NoteHead #'style = #'petrucci
-  \override Staff.TimeSignature #'style = #'mensural
+  \set Score.defaultBarType = "-"
+  \override NoteHead.style = #'petrucci
+  \override Staff.TimeSignature.style = #'mensural
   \clef "petrucci-g"
   \[ c'\maxima g \]
   \[ d\longa
-     \override NoteHead #'ligature-flexa = ##t
-     \once \override NoteHead #'flexa-width = #3.2
+     \override NoteHead.ligature-flexa = ##t
+     \once \override NoteHead.flexa-width = #3.2
      c\breve f e d \]
-  \[ c'\maxima d'\longa \]
-  \[ e'1 a g\breve \]
+  \[ c'\maxima d\longa \]
+  \[ e1 a, g\breve \]
 }
 @end lilypond
 
@@ -1160,12 +1154,11 @@ Clef d'ut, style des éditions vaticanes
 @code{vaticana-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'vaticana.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'vaticana.punctum
   \clef "vaticana-do2"
   c
 @end lilypond
@@ -1176,12 +1169,11 @@ Clef de fa, style des éditions vaticanes
 @code{vaticana-fa1}, @code{vaticana-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'vaticana.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'vaticana.punctum
   \clef "vaticana-fa2"
   c
 @end lilypond
@@ -1193,12 +1185,11 @@ Clef d'ut, style Editio Medicaea
 @code{medicaea-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'medicaea.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'medicaea.punctum
   \clef "medicaea-do2"
   c
 @end lilypond
@@ -1209,12 +1200,11 @@ Clef de fa, style Editio Medicaea
 @code{medicaea-fa1}, @code{medicaea-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'medicaea.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'medicaea.punctum
   \clef "medicaea-fa2"
   c
 @end lilypond
@@ -1226,12 +1216,11 @@ Clef d'ut, style historique Hufnagel
 @code{hufnagel-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-do2"
   c
 @end lilypond
@@ -1242,12 +1231,11 @@ Clef de fa, style historique Hufnagel
 @code{hufnagel-fa1}, @code{hufnagel-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-fa2"
   c
 @end lilypond
@@ -1258,11 +1246,10 @@ Clef combinée ut/fa, style historique Hufnagel
 @code{hufnagel-do-fa}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-do-fa"
   c
 @end lilypond
@@ -1315,7 +1302,7 @@ Pour disposer des formes anciennes d'altération, utilisez la propriété
 et @code{KeySignature}, comme ceci :
 
 @example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
   #alteration-mensural-glyph-name-alist
 @end example
 
@@ -1369,7 +1356,7 @@ pourquoi @file{gregorian-init.ly} définit aussi @code{\virgula} et
 \score {
   <<
     \context VaticanaVoice {
-      \override TextScript  #'padding = #3
+      \override TextScript.padding = #3
       g a g
       s^\markup { "divisio minima" }
       \divisioMinima
@@ -1436,9 +1423,9 @@ spécifiquement destinées au style des éditions vaticanes.
 \include "gregorian.ly"
 \score {
   \new VaticanaVoice {
-    \override TextScript #'font-family = #'typewriter
-    \override TextScript #'font-shape = #'upright
-    \override Script #'padding = #-0.1
+    \override TextScript.font-family = #'typewriter
+    \override TextScript.font-shape = #'upright
+    \override Script.padding = #-0.1
     a\ictus_"ictus " \bar "" \break
     a\circulus_"circulus " \bar "" \break
     a\semicirculus_"semicirculus " \bar "" \break
@@ -1560,7 +1547,7 @@ ou descendante, entre les notes qui la composent.
 Une hauteur sans qualificatif sera considérée comme un @emph{punctum}.
 Tout autre neume, y compris ceux d'une seule note d'aspect particulier
 comme la @emph{virga}, sera considéré en tant que ligature et devra
-répondre à la syntaxe @code{\[...\]}.
+répondre à la syntaxe @code{\[@dots{}\]}.
 @c Regarding the @emph{punctum}, @code{b} and @code{\[ b \]} are
 @c equivalent.
 
@@ -1687,7 +1674,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum
     \[ b \]
   }
@@ -1701,7 +1688,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum
     \[ \cavum b \]
   }
@@ -1715,7 +1702,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum
     \[ \linea b \]
   }
@@ -1730,7 +1717,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Auctum Ascendens
     \[ \auctum \ascendens b \]
   }
@@ -1745,7 +1732,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Auctum Descendens
     \[ \auctum \descendens b \]
   }
@@ -1760,7 +1747,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Inclinatum
     \[ \inclinatum b \]
   }
@@ -1775,7 +1762,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Inclinatum Auctum
     \[ \inclinatum \auctum b \]
   }
@@ -1790,7 +1777,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Inclinatum Parvum
     \[ \inclinatum \deminutum b \]
   }
@@ -1805,7 +1792,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Virga
     \[ \virga b \]
   }
@@ -1826,7 +1813,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Clivis vel Flexa
     \[ b \flexa g \]
   }
@@ -1841,7 +1828,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Clivis Aucta Descendens
     \[ b \flexa \auctum \descendens g \]
   }
@@ -1855,7 +1842,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Clivis Aucta Ascendens
     \[ b \flexa \auctum \ascendens g \]
   }
@@ -1870,7 +1857,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Cephalicus
     \[ b \flexa \deminutum g \]
   }
@@ -1885,7 +1872,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Podatus vel Pes
     \[ g \pes b \]
   }
@@ -1900,8 +1887,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Pes Auctus Descendens
+  \relative c'' {
+    % Pes Auctus Descendens
     \[ g \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
@@ -1915,7 +1902,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Auctus Ascendens
     \[ g \pes \auctum \ascendens b \]
   }
@@ -1930,8 +1917,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Epiphonus
+  \relative c'' {
+    % Epiphonus
     \[ g \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
@@ -1945,7 +1932,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Initio Debilis
     \[ \deminutum g \pes b \]
   }
@@ -1960,7 +1947,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Auctus Descendens Initio Debilis
     \[ \deminutum g \pes \auctum \descendens b \]
   }
@@ -1982,7 +1969,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Torculus
     \[ a \pes b \flexa g \]
   }
@@ -1997,8 +1984,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Auctus Descendens
+  \relative c'' {
+    % Torculus Auctus Descendens
     \[ a \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2012,8 +1999,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Deminutus
+  \relative c'' {
+    % Torculus Deminutus
     \[ a \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2027,8 +2014,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Initio Debilis
+  \relative c'' {
+    % Torculus Initio Debilis
     \[ \deminutum a \pes b \flexa g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2042,8 +2029,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Auctus Descendens Initio Debilis
+  \relative c'' {
+    % Torculus Auctus Descendens Initio Debilis
     \[ \deminutum a \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2057,8 +2044,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Deminutus Initio Debilis
+  \relative c'' {
+    % Torculus Deminutus Initio Debilis
     \[ \deminutum a \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2072,7 +2059,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Porrectus
     \[ a \flexa g \pes b \]
   }
@@ -2087,8 +2074,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Porrectus Auctus Descendens
+  \relative c'' {
+    % Porrectus Auctus Descendens
     \[ a \flexa g \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2102,8 +2089,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Porrectus Deminutus
+  \relative c'' {
+    % Porrectus Deminutus
     \[ a \flexa g \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2117,7 +2104,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Climacus
     \[ \virga b \inclinatum a \inclinatum g \]
   }
@@ -2132,8 +2119,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Climacus Auctus
+  \relative c'' {
+    % Climacus Auctus
     \[ \virga b \inclinatum a \inclinatum \auctum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2147,8 +2134,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Climacus Deminutus
+  \relative c'' {
+    % Climacus Deminutus
     \[ \virga b \inclinatum a \inclinatum \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2162,7 +2149,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Scandicus
     \[ g \pes a \virga b \]
   }
@@ -2177,8 +2164,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Scandicus Auctus Descendens
+  \relative c'' {
+    % Scandicus Auctus Descendens
     \[ g \pes a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2192,8 +2179,8 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Scandicus Deminutus
+  \relative c'' {
+    % Scandicus Deminutus
     \[ g \pes a \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2214,7 +2201,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Quilisma
     \[ g \pes \quilisma a \pes b \]
   }
@@ -2229,7 +2216,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Quilisma Pes Auctus Descendens
     \[ g \quilisma a \pes \auctum \descendens b \]
   }
@@ -2244,7 +2231,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Oriscus
     \[ \oriscus b \]
   }
@@ -2259,7 +2246,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Quassus
     \[ \oriscus g \pes \virga b \]
   }
@@ -2274,7 +2261,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Quassus Auctus Descendens
     \[ \oriscus g \pes \auctum \descendens b \]
   }
@@ -2289,7 +2276,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Salicus
     \[ g \oriscus a \pes \virga b \]
   }
@@ -2304,7 +2291,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Salicus Auctus Descendens
     \[ g \oriscus a \pes \auctum \descendens b \]
   }
@@ -2319,7 +2306,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Stropha
     \[ \stropha b \]
   }
@@ -2334,7 +2321,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Stropha Aucta
     \[ \stropha \auctum b \]
   }
@@ -2349,7 +2336,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Bistropha
     \[ \stropha b \stropha b \]
   }
@@ -2364,7 +2351,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Tristropha
     \[ \stropha b \stropha b \stropha b \]
   }
@@ -2379,7 +2366,7 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Trigonus
     \[ \stropha b \stropha b \stropha a \]
   }
@@ -2463,9 +2450,10 @@ s'intégrer avec d'autres préfixes dans n'importe quel ordre.
 @menu
 * Contextes de notation kiévienne::
 * Clefs kiéviennes::
-* Têtes de note kiéviennes::
+* Notes kiéviennes::
 * Altérations kiéviennes::
 * Barre de mesure kiévienne::
+* Mélismes kiéviens::
 @end menu
 
 
@@ -2486,10 +2474,10 @@ lancer dans la saisie de votre chant, comme ci-dessous :
 @lilypond[quote,ragged-right,verbatim]
 \score {
   <<
-    \new KievanVoice = "melody" \transpose c c' {
+    \new KievanVoice = "melody" \relative c' {
       \cadenzaOn
        c4 c c c c2 b,\longa
-       \bar "kievan"
+       \bar "k"
     }
     \new Lyrics \lyricsto "melody" {
       Го -- спо -- ди по -- ми -- луй.
@@ -2521,7 +2509,7 @@ La notation kiévienne n'utilise qu'une seule clef -- la clef
 
 @lilypond[quote,relative=1,notime,verbatim]
   \clef "kievan-do"
-  \override NoteHead #'style = #'kievan
+  \kievanOn
   c
 @end lilypond
 
@@ -2531,18 +2519,21 @@ Glossaire musicologique :
 @rglos{clef}.
 
 Manuel de notation :
-@ref{Clef}.
+@ref{Clefs}.
 
 
-@node Têtes de note kiéviennes
-@unnumberedsubsubsec Têtes de note kiéviennes
-@translationof Kievan note heads
+@node Notes kiéviennes
+@unnumberedsubsubsec Notes kiéviennes
+@translationof Kievan notes
 
 @cindex kiéviennnes, têtes de note
 
-La notation kiévienne requiert l'utilisation du style de tête de note
-approprié.  Vous devrez affecter @code{kievan} à la propriété
-@code{style} de l'objet @code{NoteHead}.
+La notation kiévienne requiert l'utilisation d'un style de tête de
+note particulier et la désactivation des hampes et crochets
+classiques.  La fonction @code{\kievanOn} se charge d'affecter à
+les propriétés adéquates aux têtes de note, hampes et crochets.
+Un simple @code{\kievanOff} permet de retrouver le comportement
+par défaut de LilyPond.
 
 En notation kiévienne, la note finale d'une pièce apparaît souvent sous
 la forme d'une @code{\longa}.  L'indication d'un récitatif -- plusieurs
@@ -2553,8 +2544,10 @@ kiéviennes :
 @lilypond[quote,fragment,ragged-right,verbatim]
 \autoBeamOff
 \cadenzaOn
-\override NoteHead #'style = #'kievan
+\kievanOn
 b'1 b'2 b'4 b'8 b'\breve b'\longa
+\kievanOff
+b'2
 @end lilypond
 
 @seealso
@@ -2589,8 +2582,7 @@ anciens.
 
 @lilypond[quote,relative=1,notime,verbatim]
 \clef "kievan-do"
-\override NoteHead #'style = #'kievan
-\override Accidental #'glyph-name-alist =
+\override Accidental.glyph-name-alist =
  #alteration-kievan-glyph-name-alist
 bes' dis,
 @end lilypond
@@ -2612,18 +2604,77 @@ Manuel de notation :
 
 Les pièces en notation kiévienne sont habituellement terminées par une
 décoration qui fait office de barre finale.  Elle s'obtient à l'aide
-d'un @code{\bar "kievan"}.
+d'un @code{\bar "k"}.
 
 @lilypond[quote,relative=1,notime,verbatim]
+  \kievanOn
   \clef "kievan-do"
-  \override NoteHead #'style = #'kievan
-  c \bar "kievan"
+  c \bar "k"
 @end lilypond
 
 @seealso
 @ref{Barres de mesure},
 @ref{La fonte Feta}
 
+@node Mélismes kiéviens
+@unnumberedsubsubsec Mélismes kiéviens
+@translationof Kievan melismata
+
+@cindex ligatures
+
+Les notes formant un mélisme kiévien sont habituellement rapprochées les
+unes des autres, les mélismes étant espacés les uns des autres.  Ceci
+permet au chantre d'identifier aisément les structures mélodiques d'un
+chant @emph{Znamenny}.  Les mélismes sont traites par LilyPond comme des
+ligatures dont l'espacement est géré par le
+@code{Kievan_ligature_engraver}.
+
+Le @code{Kievan_ligature_engraver} est activé par défaut pour les
+contextes @code{KievanVoice} et @code{KievanStaff}.  Pour les autres
+contextes, il s'active au sein d'un bloc @code{layout} dans lequel est
+désactivé le @code{Ligature_bracket_engraver}.
+
+@example
+\layout @{
+  \context @{
+    \Voice
+    \remove "Ligature_bracket_engraver"
+    \consists "Kievan_ligature_engraver"
+  @}
+@}
+@end example
+
+L'espacement des notes d'une ligature kiévienne se gère à l'aide de la
+propriété @code{padding} de @code{KievanLigature}.
+
+Voici comment générer des ligatures en notation kiévienne :
+
+@lilypond[quote,ragged-right,verbatim]
+\score {
+  <<
+    \new KievanVoice = "melody" \relative c' {
+      \cadenzaOn
+       e2 \[ e4( d4 ) \] \[ c4( d e  d ) \] e1 \bar "k"
+    }
+    \new Lyrics \lyricsto "melody" {
+      Га -- врі -- и -- лу
+    }
+  >>
+}
+@end lilypond
+
+@seealso
+Glossaire musicologique :
+@rglos{ligature}.
+
+Manuel de notation :
+@ref{Ligatures},
+@ref{Ligatures mensurales},
+@ref{Neumes et ligatures grégoriennes}.
+
+@knownissues
+L'espacement des ligatures n'est pas des meilleurs.
+
 
 @node Réédition de musique ancienne
 @subsection Réédition de musique ancienne
@@ -2708,7 +2759,7 @@ grâce à quelques simples artifices.
 
 @example
 \layout @{
-  ...
+  @dots{}
   \context @{
     \Voice
       \remove "Stem_engraver"
@@ -2719,11 +2770,10 @@ grâce à quelques simples artifices.
 Certaines transcriptions laissent néanmoins apparaître
 occasionnellement des hampes, notamment pour indiquer la transition
 entre un récitatif monodique et une phrase mélodique.  Il suffit en
-pareil cas d'utiliser plutôt @code{\override Stem #'transparent = ##t}
-ou @code{\override Stem #'length = #0} puis, en cas de besoin, recourir
-à une clause @code{\once \override Stem #'transparent = ##f} comme dans
-l'exemple ci-dessous.  N'oubliez pas que les crochets aussi doivent
-disparaître, grâce à un @code{\override Flag #'transparent = ##t}.
+pareil cas d'utiliser plutôt @code{\hide Stem}
+ou @code{\override Stem.length = #0} puis, en cas de besoin, recourir
+à une clause @code{\once \override Stem.transparent = ##f} comme dans
+l'exemple ci-dessous.
 
 @b{Temps}.  En matière de chant non mesuré, plusieurs alternatives
 s'offrent à vous.
@@ -2734,13 +2784,12 @@ rendre la métrique transparente, ce qui par contre préservera l'espace
 qu'elle occupe.
 
 Dans de nombreux cas, une clause @code{\set Score.timing = ##f} donne de
-bons résultats.  On pourrait aussi utiliser @code{\CadenzaOn} et
-@code{\CadenzaOff}.
+bons résultats.  On pourrait aussi utiliser @code{\cadenzaOn} et
+@code{\cadenzaOff}.
 
 Rien de plus radical que de supprimer du contexte @code{Staff} le
 @code{Bar_engraver} pour ne pas voir de barre de mesure.  Là aussi, une
-clause @code{\override BarLine #'transparent = ##t} vous permettra d'en
-afficher une au besoin.
+clause @code{\hide BarLine} vous permettra d'en afficher une au besoin.
 
 Dans de nombreuses transcriptions, le récitatif fait apparaître une
 brève au lieu de la répétition d'une même note.  Le texte psalmodié se
@@ -2756,9 +2805,9 @@ chant = \relative c' {
 }
 
 verba = \lyricmode {
-  \once \override LyricText #'self-alignment-X = #-1
+  \once \override LyricText.self-alignment-X = #-1
   "Noctem quietam et" fi -- nem per -- fec -- tum
-  \once \override LyricText #'self-alignment-X = #-1
+  \once \override LyricText.self-alignment-X = #-1
   "concedat nobis Dominus" om -- ni -- po -- tens.
 }
 \score {
@@ -2771,8 +2820,7 @@ verba = \lyricmode {
       \Staff
       \remove "Time_signature_engraver"
       \remove "Bar_engraver"
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
+      \hide Stem
     }
   }
 }
@@ -2787,13 +2835,12 @@ masquées, ici en jouant aussi sur la visibilité des hampes :
 chant = \relative c' {
   \clef "G_8"
   \set Score.timing = ##f
-  c\breve \override NoteHead #'transparent = ##t  c c c c c
-  \revert NoteHead #'transparent
-  \override Stem #'transparent = ##f \stemUp c4 b4 a
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t c2 c4  \divisioMaior
-  c\breve \override NoteHead #'transparent = ##t c c c c c c c
-  \revert NoteHead #'transparent c4 c f, f \finalis
+  c\breve \hide NoteHead  c c c c c
+  \undo \hide NoteHead
+  \override Stem.transparent = ##f \stemUp c4 b4 a
+  \hide Stem c2 c4  \divisioMaior
+  c\breve \hide NoteHead c c c c c c c
+  \undo \hide NoteHead c4 c f, f \finalis
 }
 
 verba = \lyricmode {
@@ -2810,9 +2857,8 @@ verba = \lyricmode {
     \context {
       \Staff
       \remove "Time_signature_engraver"
-      \override BarLine #'transparent = ##t
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
+      \hide BarLine
+      \hide Stem
     }
   }
 }
@@ -2840,10 +2886,10 @@ peuvent se réaliser avec des @qq{notes silencieuses} (@code{s}).
 @lilypond[verbatim,quote]
 spiritus = \relative c' {
   \time 1/4
-  \override Lyrics.LyricText #'X-extent  = #'(0 . 3)
-  d4 \times 2/3 { f8 a g } g a a4 g f8 e
+  \override Lyrics.LyricText.X-extent  = #'(0 . 3)
+  d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
   d4 f8 g g8 d f g a g f4 g8 a a4  s
-  \times 2/3 { g8 f d } e f g a g4
+  \tuplet 3/2 { g8 f d } e f g a g4
 }
 
 spirLyr = \lyricmode {
@@ -2860,12 +2906,11 @@ spirLyr = \lyricmode {
     \context {
       \Staff
       \remove "Time_signature_engraver"
-      \override BarLine #'X-extent = #'(-1 . 1)
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
-      \override Beam #'transparent = ##t
-      \override BarLine #'transparent = ##t
-      \override TupletNumber #'transparent = ##t
+      \override BarLine.X-extent = #'(-1 . 1)
+      \hide Stem
+      \hide Beam
+      \hide BarLine
+      \hide TupletNumber
     }
   }
 }
@@ -2903,7 +2948,7 @@ spirLyr = \lyricmode {
 @c try Till Rettig
 @c Add example of white note heads:
 @c In the french baroque some composers used white note heads in slow pieces,
-@c mainly in 3/2-time.  A quarter looks there like a eighth with a white
+@c mainly in 3/2-time.  A quarter looks there like an eighth with a white
 @c note head.  (Franz-Rudolf Kuhnen)
 
 @c TODO Add example of this:
index 8f71f56ec34cfcb10c6847f22aca03b0a5f024ed..4ca567912e34a3c59fdf3552eb31ee7df4a827cb 100644 (file)
@@ -1,13 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: ba8e0139b12ce248a00d8621104117f92bac34a6
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: Gilles Thibault
@@ -63,11 +64,11 @@ symboles, en Scheme.}
 @section Contextes d'interprétation
 @translationof Interpretation contexts
 
-Cette section traite des contextes.
+Nous allons voir ici ce que sont les contextes et comment les modifier.
 
 @menu
 * Tout savoir sur les contextes::
-* Création d'un contexte::
+* Création et référencement d'un contexte::
 * Conservation d'un contexte::
 * Modification des greffons de contexte::
 * Modification des réglages par défaut d'un contexte::
@@ -104,14 +105,10 @@ Référence des propriétés internes :
 I knew it would... And leaving out some of them is perfectly fine
 with me.
 I do think that a list like this, with the main contexts and a
-brief
-description of  what they do (perhaps also with a note about what
-default
-behavior is associated with each of them, but this may be
-unmanageable),
-should be there, and then we could simply list the remaining ones
-without
-further explanation and with links to the IR.
+brief description of  what they do (perhaps also with a note about what
+default behavior is associated with each of them, but this may be
+unmanageable), should be there, and then we could simply list the
+remaining ones without further explanation and with links to the IR.
 @end ignore
 
 @c TODO Improve layout, order and consistency of wording -td
@@ -123,6 +120,7 @@ further explanation and with links to the IR.
 Les contextes sont hiérarchisés :
 
 @menu
+* Définitions de la sortie -- hiérarchie des contextes::
 * Score -- le père de tous les contextes::
 * Contextes de haut niveau -- les systèmes::
 * Contextes de niveau intermédiaire -- les portées::
@@ -130,6 +128,62 @@ Les contextes sont hiérarchisés :
 @end menu
 
 
+@node Définitions de la sortie -- hiérarchie des contextes
+@unnumberedsubsubsec Définitions de la sortie -- hiérarchie des contextes
+@translationof Output definitions - blueprints for contexts
+
+Les lignes qui suivent traitent de l'intérêt des définitions de sorties
+lorsque l'on travaille avec les contextes.  Des exemples de définitions
+seront présentés plus avant -- voir
+@ref{Modification de tous les contextes d'un même type}.
+
+@cindex définition de sortie
+@cindex sortie, définitions
+@funindex \layout
+
+Alors que la musique écrite dans un fichier fait référence à des types
+ou noms de contexte, les contextes ne sont effectivement créés que
+lorsque la musique est interprétée.  LilyPond interprète la musique sous
+le contrôle d'une « définition de sortie », voire différemment selon
+le cas et génère ainsi différents résultats.  La définition de sortie
+appropriée pour une sortie imprimable est spécifiée à l'aide d'un
+@code{\layout}.
+
+@funindex \midi
+
+Une définition de sortie beaucoup plus simple sera utilisée pour
+produire une sortie Midi, spécifiée à l'aide d'un @code{\midi}.
+LilyPond utilise en interne plusieurs autres définitions de sortie,
+notamment dans le cadre du combinateur automatique de parties (voir
+@ref{Regroupement automatique de parties}) ou la reproduction d'extraits
+(voir @ref{Citation d'autres voix}).
+
+Les définitions de sortie ont pour objet non seulement de définir la
+relation entre les contextes, mais aussi leurs réglages par défaut.  Si
+la plupart des adaptations prennent habituellement place au seind d'un
+bloc @code{\layout}, les réglages affectant le Midi ne seront effectifs
+que s'ils interviennent au sein d'un bloc @code{\midi}.
+
+
+@funindex autoBeaming
+
+Certains réglages affectent plusieurs sorties : par exemple, lorsque
+@code{autoBeaming} est désactivé dans un contexte, les ligatures sont
+considérées comme marquant un mélisme dans le but de faire correspondre
+la musique aux paroles comme indiqué dans
+@ref{Durée automatique des syllabes}.  Cette correspondance est
+respectée autant à l'écrit qu'à l'oral.  Des modifications apportées à
+@code{autoBeaming} par une définition de contexte au sein d'un bloc
+@code{\layout} ne seront pas reportées dans le bloc @code{\midi}
+correspondant ; paroles et musique ne seront alors plus synchrones dans
+le fichier Midi.
+
+@seealso
+Fichiers d'initialisation :
+@file{ly/engraver-init.ly},
+@file{ly/performer-init.ly}.
+
+
 @node Score -- le père de tous les contextes
 @unnumberedsubsubsec Score -- le père de tous les contextes
 @translationof Score - the master of all contexts
@@ -142,8 +196,7 @@ tonalité ; c'est donc là qu'il faut s'assurer que les différents
 toutes les portées.
 
 Dès lors que LilyPond rencontre un bloc @code{\score @{@dots{}@}}
-ou @code{\layout @{@dots{}@}}, se crée implicitement un contexte
-@code{Score}.
+se crée implicitement un contexte @code{Score}.
 
 
 @node Contextes de haut niveau -- les systèmes
@@ -216,9 +269,11 @@ particulièrement adapté au style mensural de musique ancienne.
 @unnumberedsubsubsec Contextes de bas niveau -- les voix
 @translationof Bottom-level contexts - voices
 
-Les contextes de niveau @qq{voix} initialisent un certain nombre de
-propriétés et activent les graveurs appropriés.  S'agissant de contextes
-du plus bas niveau, ils ne sauraient contenir d'autre contexte.
+Les contextes de niveau « voix » initialisent un certain nombre de
+propriétés et activent les graveurs appropriés.  Un contexte de bas
+niveau est un contexte n'ayant aucun contexte enfant -- ou
+@code{defaultchild}.  Bien qu'ils puissent accepter ou contenir des
+sous-contextes, ceux-ci devront être libellés et créés explicitement.
 
 @strong{@emph{Voice}}
 
@@ -294,152 +349,216 @@ context.
 @end ignore
 
 
-@node Création d'un contexte
-@subsection Création d'un contexte
-@translationof Creating contexts
-
-@c TODO more complete descriptions rather than learning style
-
-Lorsqu'une partition ne comporte qu'une portée avec une seule voix, les
-contextes sont créés automatiquement.  Dès que la structure s'étoffe, il
-devient nécessaire de les créer explicitement, en suivant l'une des
-trois méthodes suivantes :
+@node Création et référencement d'un contexte
+@subsection Création et référencement d'un contexte
+@translationof Creating and referencing contexts
 
-@itemize
-
-@item
-La commande la plus simple à utiliser est @code{\new} ; c'est aussi
-la plus courte.  Elle se place juste avant une expression musicale et se
-libelle ainsi :
+@cindex contexte, création
+@cindex contexte, référencement
 
 @funindex \new
-@cindex nouveau contexte
-@cindex contexte, création
+@funindex \context
+
+LilyPond crée automatiquement des contextes de bas niveau lorsque
+l'expression musicale intervient avant qu'un contexte adéquat n'existe,
+ce qui peut être pratique dans le cadre d'une partition simple ou de
+courts fragments tels ceux inclus dans cette documentation. Dès que la
+structure s'étoffe, il devient nécessaire de créer explicitement tous
+les contextes, à l'aide des commandes @code{\new} ou @code{\context}.
+Leur syntaxe est très similaire :
 
 @example
-\new @var{type} @var{expression_musicale}
+[\new | \context] @var{Contexte} [ = @var{nom}] [@var{musique}]
 @end example
 
 @noindent
-où @var{type} est le nom d'un contexte (par ex. @code{Staff} ou
-@code{Voice}).  Cette commande crée un nouveau contexte et y interprète
-le contenu de l'@var{expression_musicale}.
+où peuvent intervenir aussi bien @code{\new} que @code{\context}.
+Le @var{Contexte} est le nom du contexte à créer, qui éventuellement
+s'appellera plus particulièrement @var{nom} ; il contient l'expression
+musicale unique @var{musique} qui devra être interprétée dans ce
+contexte par les graveurs ou exécutants.
 
-C'est ce qui se passe lorsqu'une partition comporte plusieurs portées :
-chaque partie qui doit apparaître sur une portée spécifique est précédée
-d'un @code{\new Staff}.
+Le préfixe @code{\new} non suivi d'un nom s'utilise principalement pour
+créer une partition avec plusieurs portées :
 
-@lilypond[quote,verbatim,relative=2,ragged-right]
+@lilypond[quote,verbatim,relative=2]
 <<
-  \new Staff { c4 c }
-  \new Staff { d4 d }
+  \new Staff {
+    % leave the Voice context to be created implicitly
+    c4 c
+  }
+  \new Staff {
+    d4 d
+  }
 >>
 @end lilypond
 
-La commande @code{\new} vous permet aussi d'attribuer un nom au
-contexte que vous créez.
-
-@example
-\new @var{type} = @var{nom} @var{musique}
-@end example
-Le nom que vous spécifiez ne pourra être utilisé que s'il n'a pas déjà
-été attribué à un autre contexte.
+@noindent
+et pour regrouper des voix sur une même portée :
 
-@funindex \context
-@item
-Tout comme @code{\new}, la commande @code{\context} affectera une
-expression musicale à un objet contextuel ; elle lui attribuera de
-surcroît un nom.  La commande @code{\context} s'emploie de la façon
-suivante :
+@lilypond[quote,verbatim,relative=2]
+<<
+  \new Staff <<
+    \new Voice {
+      \voiceOne
+      c8 c c4 c c
+    }
+    \new Voice {
+      \voiceTwo
+      g4 g g g
+    }
+  >>
+>>
+@end lilypond
 
-@example
-\context @var{type} = @var{nom} @var{musique}
-@end example
+@noindent
+@code{\new} est à priviliégier lorsque les contextes ne sont pas nommés.
 
-LilyPond va dans un premier temps vérifier l'existence d'un contexte du
-type @var{type} appelé @var{nom}.  En l'absence d'un tel contexte,
-LilyPond crée un nouveau contexte du nom que vous avez spécifié.  Cette
-procédure est tout à fait pertinente lorsque vous faites appel à ce
-contexte particulier par la suite.  Prenons le cas d'un chant :
-nous commençons par nommer la ligne mélodique,
+La différence entre les commandes @code{\new} et @code{\context} se
+situe au niveau de leurs effets :
 
-@example
-\context Voice = "@b{tenor}" @var{musique}
-@end example
+@itemize
+@item
+La commande @code{\new}, suivie ou non d'un nom, crée un tout
+nouveau contexte même s'il en existe déjà un portant le même nom :
 
-@noindent
-de telle sorte que le texte s'aligne correctement sur les notes :
+@lilypond[quote,verbatim,relative=2]
+<<
+  \new Staff <<
+    \new Voice = "A" {
+      \voiceOne
+      c8 c c4 c c
+    }
+    \new Voice = "A" {
+      \voiceTwo
+      g4 g g g
+    }
+  >>
+>>
+@end lilypond
 
-@example
-\new Lyrics \lyricsto "@b{tenor}" @var{paroles}
-@end example
+@item
+La commande @code{\context} avec nommage créera un contexte distinct
+uniquement dans le cas où ne préexiste aucun contexte du même nom dans
+la même hiérarchie de contextes.  Dans le cas contraire, il servira de
+référence au contexte précédemment créé, et son expression musicale sera
+transmise dans ce contexte pour interprétation.
 
-@noindent
+Cette procédure est tout à fait pertinente lorsque l'on sépare mise en
+forme de la partition et contenu musical.  Les deux formulations
+ci-après sont tout à fait valides :
 
-L'une des autres utilisations de contextes explicitement nommés consiste
-à fusionner deux expressions musicales dans un même contexte.  Dans
-l'exemple qui suit, notes et articulations sont saisies indépendamment.
+@lilypond[quote,verbatim]
+\score {
+  <<
+    % score layout
+    \new Staff <<
+      \new Voice = "one" {
+        \voiceOne
+      }
+      \new Voice = "two" {
+        \voiceTwo
+      }
+    >>
 
-@example
-music = @{ c4 c4 @}
-arts = @{ s4-. s4-> @}
-@end example
+    % musical content
+    \context Voice = "one" {
+      \relative c'' {
+        c4 c c c
+      }
+    }
+    \context Voice = "two" {
+      \relative c'' {
+        g8 g g4 g g
+      }
+    }
+  >>
+}
+@end lilypond
 
-Elles sont ensuite fusionnées par affectation au même contexte
-@code{Voice} :
+@lilypond[quote,verbatim]
+\score {
+  <<
+    % score layout
+    \new Staff <<
+      \context Voice = "one" {
+        \voiceOne
+      }
+      \context Voice = "two" {
+        \voiceTwo
+      }
+    >>
 
-@example
-<<
-  \new Staff \context Voice = "A" \music
-  \context Voice = "A" \arts
->>
-@end example
-@lilypond[quote,ragged-right]
-music = { c4 c4 }
-arts = { s4-. s4-> }
-\relative c'' <<
-  \new Staff \context Voice = "A" \music
-  \context Voice = "A" \arts
->>
+    % musical content
+    \context Voice = "one" {
+      \relative c'' {
+        c4 c c c
+      }
+    }
+    \context Voice = "two" {
+      \relative c'' {
+        g8 g g4 g g
+      }
+    }
+  >>
+}
 @end lilypond
 
-Grâce à ce mécanisme, vous pouvez tout à fait générer une version
-@qq{Urtext} (édition originale) et optionnellement ajouter distinctement
-des articulations à ces mêmes notes.
-
-@cindex création de contextes
+@noindent
+Par ailleurs, le recours à des variables produira les mêmes effets --
+voir @rlearning{Organisation du code source avec des variables}.
 
 @item
-Voici une troisième manière de créer un contexte :
+La commande @code{\context} utilisée sans nommage recherchera le premier
+de tous les contextes du même type précédemment créés dans la même
+hiérarchie de contextes ; l'expression musicale lui sera alors transmise
+pour interprétation.  Bien que rarement utilisée, cette formulation de
+@code{\context} sans nommage ni expression musicale permet de définir le
+contexte dans lequel une procédure Scheme comportant une clause
+@code{\applyContext} devra s'exécuter.
 
 @example
-\context @var{type} @var{musique}
+\new Staff \relative c' @{
+  c1
+  \context Timing
+  \applyContext #(lambda (ctx)
+                   (newline)
+                   (display (ly:context-current-moment ctx)))
+  c1
+@}
 @end example
 
-@noindent
-Très comparable à une déclaration @code{\context = @var{nom}},
-cette méthode permet de s'affranchir du type de contexte.
+@end itemize
 
-Cette variante s'utilise lorsque les expression musicales peuvent être
-interprétées à différents niveaux, comme par exemple lorsque intervient
-la commande @code{\applyOutput} -- pour de plus amples détails, voir
-@rextend{Application d'une fonction à tous les objets de mise en forme}.
-En l'absence de @code{\context} explicite, LilyPond considère qu'il
-s'agit de @code{Voice}.
+Un contexte auquel il est ultérieurement fait référence doit
+impérativement être nommé.  C'est le cas par exemple lorsque des paroles
+sont associées à de la musique :
 
 @example
-\applyOutput #'@var{contexte} #@var{fonction}   % s'applique à Voice
+\new Voice = "tenor" @var{musique}
+@dots{}
+\new Lyrics \lyricsto "tenor" @var{paroles}
 @end example
 
-Vous devrez respecter ces formulations si la fonction doit
-s'interpréter au niveau @code{Score} ou @code{Staff} :
+@noindent
+L'association de paroles à de la musique est abordée en détails à la
+rubrique @ref{Durée automatique des syllabes}.
+
+Les propriétés de tous les contextes d'un même type se modifient au sein
+d'un bloc @code{\layout}, selon une syntaxe différente -- voir
+@ref{Modification de tous les contextes d'un même type}.  Une telle
+construction permet de séparer mise en forme et contenu musical.
+Lorsque un seul contexte requiert une adaptation, mieux vaut recourir à
+un bloc @code{\with} -- voir
+@ref{Modification d'un contexte particulier}.
 
-@example
-\applyOutput #'Score #@var{fonction}
-\applyOutput #'Staff #@var{fonction}
-@end example
+@seealso
+Manuel d'initiation :
+@rlearning{Organisation du code source avec des variables}.
 
-@end itemize
+Manuel de notation :
+@ref{Modification d'un contexte particulier},
+@ref{Durée automatique des syllabes}.
 
 
 @node Conservation d'un contexte
@@ -460,12 +579,12 @@ l'aide de la commande @code{\lyricsto} ou si des événements surviennent
 à nouveau pour ce contexte précédemment actif.
 
 Une exception cependant à cette règle : en présence d'un contexte
-@code{Staff} ou dans une construction @code{<<...>>}, un seul des
+@code{Staff} ou dans une construction @code{<< @dots{} >>}, un seul des
 contextes @code{Voice} inclus restera actif jusqu'à la fin du contexte
-@code{Staff} ou de la construction @code{<<...>>}, y compris s'il y
+@code{Staff} ou de la construction @code{<< @dots{} >>}, y compris s'il y
 a des @qq{trous}.  Le contexte alors persistant sera le premier
-rencontré dans la construction @code{@{...@}} sans tenir compte des
-éventuels @code{<<...>>} qu'elle pourrait contenir.
+rencontré dans la construction @code{@{ @dots{} @}} sans tenir compte
+des éventuels @code{<< @dots{} >>} qu'elle pourrait contenir.
 
 Un contexte restera actif dès lors qu'il s'y passera toujours quelque
 chose.  Un contexte @code{Staff} restera actif si l'une des voix qu'il
@@ -644,7 +763,7 @@ graveurs :
   @emph{etc.}
 @}
 @{
-  @emph{..musique..}
+  @emph{@dots{}musique@dots{}}
 @}
 @end example
 
@@ -692,14 +811,16 @@ peut désormais avoir sa propre métrique.
     \new Staff \with {
       \consists "Timing_translator"
       \consists "Default_bar_line_engraver"
-    } {
+    }
+    \relative c'' {
         \time 3/4
         c4 c c c c c
     }
   \new Staff \with {
     \consists "Timing_translator"
     \consists "Default_bar_line_engraver"
-  } {
+  }
+  \relative c'' {
       \time 2/4
       c4 c c c c c
   }
@@ -788,6 +909,10 @@ indépendamment de la musique dans un bloc @code{\layout} -- placé dans
 le bloc @code{\score} auquel ces modifications doivent s'appliquer -- au
 moyen d'un bloc @code{\context}.
 
+Les réglages dévolus à la sortie MIDI viendront quant à eux se placer
+dans un bloc @code{\midi} -- voir
+@ref{Définitions de la sortie -- hiérarchie des contextes}.
+
 @example
 \layout @{
   \context @{
@@ -818,7 +943,7 @@ contexte :
   \layout {
     \context {
       \Staff
-      \override Stem #'thickness = #4.0
+      \override Stem.thickness = #4.0
     }
   }
 }
@@ -846,7 +971,7 @@ en définissant directement une propriété de contexte :
 
 @item
 à l'aide d'une commande prédéfinie comme @code{\dynamicUp}, ou bien une
-expression musicale telle que @code{\accidentalStyle "dodecaphonic"} :
+expression musicale telle que @code{\accidentalStyle dodecaphonic} :
 
 @c KEEP LY
 @lilypond[quote,verbatim]
@@ -862,7 +987,7 @@ expression musicale telle que @code{\accidentalStyle "dodecaphonic"} :
     }
     \context {
       \Staff
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
     }
   }
 }
@@ -870,7 +995,7 @@ expression musicale telle que @code{\accidentalStyle "dodecaphonic"} :
 
 @item
 à l'aide d'une variable personnalisée contenant un bloc @code{\with} :
-pour de plus amples iformations sur le bloc @code{\with}, voir
+pour de plus amples informations sur le bloc @code{\with}, voir
 @ref{Modification d'un contexte particulier}.
 
 @c KEEP LY
@@ -917,9 +1042,9 @@ musical.
     }
   }
   \layout {
-    \accidentalStyle "dodecaphonic"
+    \accidentalStyle dodecaphonic
     \set fontSize = #-4
-    \override Voice.Stem #'thickness = #4.0
+    \override Voice.Stem.thickness = #4.0
   }
 }
 @end lilypond
@@ -934,20 +1059,23 @@ musical.
 
 Dans le cas d'un contexte pris individuellement, ses propriétés se
 modifient à l'aide d'un bloc @code{\with}.  Toutes les autres instances
-de contexte appartenant au même type seront affectés des réglages
+de contexte appartenant au même type seront affectées des réglages
 prédéfinis par LilyPond, modifiés le cas échéant par un bloc
 @code{\layout}.  Le bloc @code{\with} se place directement à la suite de
 la commande @code{\new} @var{type-de-contexte}.
 
 @example
-\new Staff
-\with @{
-  [réglages pour ce contexte pris individuellement]
-@} @{
-...
+\new Staff \with @{ [réglages pour ce contexte pris individuellement] @}
+@{
+  @dots{}
 @}
 @end example
 
+Dans la mesure où une telle « modification de contexte » est spécifiée
+au sein même de la musique, ses effets toucheront @b{toutes} les sorties
+(imprimable @b{et} Midi), contrairement à ce qui se passe lorsque les
+adaptations sont réalisées dans la définition d'une sortie.
+
 La spécification des adaptations peut se faire de différentes manières :
 
 @itemize
@@ -959,10 +1087,7 @@ contexte :
 @lilypond[quote,verbatim]
 \score {
   \new Staff {
-    \new Voice
-    \with {
-      \override Stem #'thickness = #4.0
-    }
+    \new Voice \with { \override Stem.thickness = #4.0 }
     {
       \relative c'' {
         a4^"Hampes épaisses" a a a
@@ -985,10 +1110,8 @@ en définissant directement une propriété de contexte :
         a4 a a a
       }
     }
-    \new Staff
-    \with {
-      fontSize = #-4
-    } {
+    \new Staff \with { fontSize = #-4 }
+    {
       \relative c'' {
         a4^"Smaller font" a a a
         a4 a a a
@@ -1013,11 +1136,9 @@ en définissant directement une propriété de contexte :
         }
       }
     }
-    \new Staff
-    \with { \accidentalStyle "dodecaphonic" }
+    \new Staff \with { \accidentalStyle dodecaphonic }
     {
-      \new Voice
-      \with { \dynamicUp }
+      \new Voice \with { \dynamicUp }
       {
         \relative c'' {
           a4^"Nuances en surplomb" a a a
@@ -1051,7 +1172,8 @@ contexte,
 
 @item
 en l'absence de quoi sera retenue la valeur par défaut issue du bloc
-@code{\context} approprié le plus récent dans le bloc @code{\layout},
+@code{\context} approprié le plus récent dans les blocs @code{\layout}
+ou @code{\midi},
 
 @item
 en l'absence de quoi s'appliqueront les réglages prédéfinis de LilyPond.
@@ -1066,7 +1188,7 @@ Manuel de notation :
 @ref{Contextes de bas niveau -- les voix},
 @ref{La commande de fixation (set)},
 @ref{La commande de dérogation (override)},
-@ref{Le bloc \layout}.
+@ref{Le bloc layout}.
 
 
 @node Définition de nouveaux contextes
@@ -1109,9 +1231,8 @@ jazz.
   \consists "Text_engraver"
   \consists "Pitch_squash_engraver"
   squashedPosition = #0
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Flag
   \alias Voice
 }
 \context { \Staff
@@ -1144,49 +1265,56 @@ Tout d'abord, il convient de donner un nom à notre nouveau contexte :
 \name ImproVoice
 @end example
 
-Comme il est très semblable à @code{Voice}, nous souhaitons que
-toutes les commandes associées au @code{Voice} déjà existant restent
-valables.  D'où nécessité de la commande @code{\alias}, qui va
-l'associer au contexte @code{Voice} :
+Comme il est très semblable à un contexte @code{Voice}, nous
+souhaitons que toutes les commandes associées au @code{Voice} déjà
+existant restent valables.  D'où nécessité de la commande
+@code{\alias}, qui va l'associer au contexte @code{Voice} :
 
 @example
 \alias Voice
 @end example
 
 Ce contexte doit pouvoir imprimer des notes et des indications
-textuelles ; on ajoute donc les graveurs appropriés :
+textuelles ; on ajoute donc les graveurs appropriés ainsi que celui
+dévolu au regroupement sous forme de colonne des notes, hampes et
+silences qui interviennent au même moment musical :
 
 @example
 \consists "Note_heads_engraver"
 \consists "Text_engraver"
+\consists "Rhythmic_column_engraver"
 @end example
 
-Cependant, on veut que les notes s'affichent toutes au centre de
-la portée :
+Toutes les notes devraient s'afficher au centre de la portée :
 
 @example
 \consists "Pitch_squash_engraver"
 squashedPosition = #0
 @end example
 
-Le graveur @rinternals{Pitch_squash_engraver} intercepte les notes
-créées par le @rinternals{Note_heads_engraver}, et les @qq{écrase} pour
-qu'elles aient toutes la même position verticale, définie par
-@code{squashedPosition} : ici il s'agit de la valeur @code{0},
-c'est-à-dire la ligne du milieu.
+Le graveur @code{Pitch_squash_engraver} intercepte les notes créées par
+le @code{Note_heads_engraver}, et les « écrase » pour qu'elles aient
+toutes la même position verticale, définie par @code{squashedPosition} :
+ici il s'agit de la valeur @code{0}, c'est-à-dire la ligne du milieu.
 
 On veut que les notes aient la forme d'une barre oblique, sans
 aucune hampe :
 
 @example
-\override NoteHead #'style = #'slash
-\override Stem #'transparent = ##t
-\override Flag #'transparent = ##t
+\override NoteHead.style = #'slash
+\hide Stem
 @end example
 
-Afin que tous ces graveurs puissent travailler de concert, on leur
-adjoint un sous-programme spécial, introduit par la commande
-@code{\type} : il s'agit de @code{Engraver_group},
+Tous ces modules doivent communiquer sous le contrôle du contexte.  Les
+mécanismes permettant aux contextes de communiquer sont établis dès lors
+que le mot-clé @code{\type} précède le contexte.  La plupart des
+contextes mentionnés au sein d'un bloc @code{\layout} seront de type
+@code{Engraver_group}.  Certains contextes spécifiques, ainsi que ceux
+mentionnés dans les blocs @code{\midi}, reposent sur d'autres types de
+contexte.  Recopier un contexte préexistant pour en modifier la
+définition lui affecte le type adéquat.  Dans la mesure où notre exemple
+consiste à créer une définition de toute pièce, son type doit être
+explicitement spécifié.
 
 @example
 \type "Engraver_group"
@@ -1200,11 +1328,11 @@ Récapitulons ; on se retrouve avec le bloc suivant :
   \type "Engraver_group"
   \consists "Note_heads_engraver"
   \consists "Text_engraver"
+  \consists "Rhythmic_column_engraver"
   \consists "Pitch_squash_engraver"
   squashedPosition = #0
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Flag
   \alias Voice
 @}
 @end example
@@ -1214,7 +1342,7 @@ Récapitulons ; on se retrouve avec le bloc suivant :
 Ce n'est pas tout.  En effet, on veut intégrer le nouveau contexte
 @code{ImproVoice} dans la hiérarchie des contextes.  Tout comme le
 contexte @code{Voice}, sa place est au sein du contexte @code{Staff}.
-Nous allons donc modifier le contexte @code{Staff},
+Nous allons donc modifier la définition du contexte @code{Staff},
 au moyen de la commande @code{\accepts} :
 
 @example
@@ -1259,6 +1387,19 @@ On peut alors saisir la musique, comme dans l'exemple plus haut :
 @}
 @end example
 
+Pour être tout à fait complet, les modifications apportée à la
+hiérarchie des contextes devraient être répétés au niveau du bloc
+@code{\midi} de telle sorte que la sortie Midi dépende des mêmes
+relations.
+
+@seealso
+Référence des propriétés internes :
+@rinternals{Engraver_group},
+@rinternals{Note_heads_engraver},
+@rinternals{Text_engraver},
+@rinternals{Rhythmic_column_engraver},
+@rinternals{Pitch_squash_engraver}.
+
 
 @node Ordonnancement des contextes
 @subsection Ordonnancement des contextes
@@ -1273,18 +1414,18 @@ Les contextes viennent en principe se positionner selon leur ordre
 d'apparition dans le fichier source.  Lorsque plusieurs contextes sont
 imbriqués, le contexte englobant supportera les différents contextes
 mentionnés dans le fichier source, à la stricte condition qu'ils soient
-dûment @qq{agréés}.  Les contextes imbriqués qui ne font pas partie de
-la @qq{liste d'agréments} du contexte englobant se retrouveront en
+dûment « agréés ».  Les contextes imbriqués qui ne font pas partie de
+la « liste d'agréments » du contexte englobant se retrouveront en
 dessous de celui-ci au lieu d'y être imbriqués.
 
-La liste des @qq{agréments} d'un contexte se gère à l'aide des
+La liste des « agréments » d'un contexte se gère à l'aide des
 instructions @code{\accepts} et @code{\denies} -- @code{\accepts} pour
 ajouter un contexte à la liste, et @code{\denies} pour retirer
 l'agrément.  Il est par exemple peu conventionnel que les accords nommés
-apparaissent dans un contexte @code{Staff} ; autrement dit, le
-contexte @code{ChordNames} ne fait pas partie de la @qq{liste
-d'agréments} du contexte @code{Staff} par défaut.  Néanmoins, et s'il
-devait en être ainsi, vous pourriez le spécifier.
+apparaissent dans un contexte @code{Staff} ; autrement dit, le contexte
+@code{ChordNames} ne fait pas partie de la « liste d'agréments » du
+contexte @code{Staff} par défaut.  Néanmoins, et s'il devait en être
+ainsi, vous pourriez le spécifier.
 
 @lilypond[verbatim,quote]
 \score {
@@ -1314,12 +1455,27 @@ L'instruction @code{\denies} permet, lorsqu'un nouveau contexte reprend
 les définitions d'un contexte existant, d'en ajuster les composantes.
 C'est par exemple le cas du contexte @code{VaticanaStaff}, réplique du
 contexte @code{Staff} au sein duquel le contexte @code{VaticanaVoice} se
-substitue au contexte @code{Voice} dans la @qq{liste d'agrément}.
+substitue au contexte @code{Voice} dans la « liste d'agrément ».
+
+@cindex contextes implicites
+@cindex implicites, contextes
+@funindex \defaultchild
 
 Gardez à l'esprit que, face à une instruction qui ne s'appliquerait à
 aucun contexte déjà existant, LilyPond créera un nouveau contexte
-implicite.  Ceci peut engendrer une nouvelle portée ou une autre
-partition.
+implicite.
+
+Lors de la définition d'un contexte, les types de contextes
+sous-jascents susceptibles d'être créés implicitement sont spécifiés à
+l'aide d'une commande @code{\defaultchild}. Un certain nombre
+d'événements musicaux requièrent un contexte de plus bas niveau ; face à
+un tel événement, LilyPond crée autant de « sous-contextes » que
+nécessaire, jusqu'au contexte ne comportant aucun @emph{defaultchild}.
+
+La création implicite de contexte peut donc finir par engendrer de
+manière intempestive une nouvelle portée ou une autre partition.
+L'utilisation d'une instruction @code{\new} pour créer explicitement des
+contextes permet d'éviter ces problèmes.
 
 @cindex alignAboveContext
 @cindex alignBelowContext
@@ -1340,11 +1496,11 @@ autres contextes existants.  Le repositionner au-dessus du contexte
 
 Il en va de même pour les contextes temporaires de paroles au sein d'un
 système à plusieurs portées comme un @code{ChoirStaff} lorsque, par
-exemple, un couplet supplémentaire apparaît à l'occasion d'une
-reprise.  Ce contexte de paroles temporaire se place par défaut sous les
-portées inférieures.  Lui adjoindre une instruction
-@code{alignBelowContext} dès son initialisation permet de l'accoler au
-contexte de paroles (nommé) qui contient le premier couplet.
+exemple, un couplet supplémentaire apparaît à l'occasion d'une reprise.
+Ce contexte de paroles temporaire se place par défaut sous les portées
+inférieures.  Lui adjoindre une instruction @code{alignBelowContext} dès
+son initialisation permet de l'accoler au contexte de paroles (nommé)
+qui contient le premier couplet.
 
 Des exemples de repositionnement de contexte temporaire sont disponibles
 aux rubriques @rlearning{Expressions musicales imbriquées},
@@ -1509,11 +1665,12 @@ francophones.
 @cindex interfaces de rendu
 @cindex rendu, interfaces de
 @cindex objets graphiques
+@cindex grob
 
 Tous les éléments de notation sont considérés comme des objets
 graphiques (en anglais @emph{Graphical Object}, d'où le diminutif
 @emph{Grob}).  Chaque objet est doté d'un certain nombre de propriétés
-(l'épaisseur du trait, l'orientation,  etc.), et lié à d'autres objets.
+(l'épaisseur du trait, l'orientation, etc.), et lié à d'autres objets.
 Le fonctionnement de ces objets est décrit en détail dans
 @rinternals{grob-interface}.
 
@@ -1690,7 +1847,7 @@ doigté de la note.  La commande suivante insère trois unités d'espace
 vide entre la note et le doigté :
 
 @example
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
 @end example
 
 En ajoutant cette commande avant la création du doigté (de l'objet
@@ -1698,7 +1855,7 @@ En ajoutant cette commande avant la création du doigté (de l'objet
 suivant :
 
 @lilypond[quote,relative=2,verbatim]
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
 c-2
 \stemUp
 f
@@ -1801,7 +1958,7 @@ objets graphiques.
 La syntaxe employée pour ce faire est
 
 @example
-\override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
+\override @var{contexte}.@var{objet}.@var{propriété} = #@var{valeur}
 @end example
 
 Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes)
@@ -1815,7 +1972,7 @@ n'est ici que d'examiner l'emploi de cette commande.
 La commande suivante :
 
 @verbatim
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
 @end verbatim
 
 @noindent
@@ -1827,7 +1984,7 @@ autres portées demeureront intactes.
 
 @lilypond[quote,verbatim,relative=2,fragment]
 c4
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
 c4
 c4
 c4
@@ -1844,7 +2001,7 @@ qu'une seule fois.
 
 @lilypond[quote,fragment,verbatim,relative=2]
 c4
-\once \override Stem #'thickness = #4.0
+\once \override Stem.thickness = #4.0
 c4
 c4
 @end lilypond
@@ -1856,9 +2013,9 @@ la commande @code{\override} doit être saisie avant que l'objet soit
 créé.
 
 @lilypond[quote,fragment,verbatim,relative=2]
-\override Slur #'thickness = #3.0
+\override Slur.thickness = #3.0
 c8[( c
-\override Beam #'beam-thickness = #0.6
+\override Beam.beam-thickness = #0.6
 c8 c])
 @end lilypond
 
@@ -1874,8 +2031,8 @@ même contexte.  Ainsi dans l'exemple suivant, la commande @code{\revert}
 est sans effet.
 
 @example
-\override Voice.Stem #'thickness = #4.0
-\revert Staff.Stem #'thickness
+\override Voice.Stem.thickness = #4.0
+\revert Staff.Stem.thickness
 @end example
 
 Il existe, à l'intérieur même de certaines propriétés, des options que
@@ -1890,7 +2047,7 @@ l'on nomme @qq{sous-propriétés}.  La syntaxe est alors
 Ainsi, par exemple :
 
 @example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
 @end example
 
 @end ignore
@@ -2081,33 +2238,15 @@ liste Scheme ; on peut les consulter dans le fichier
 @code{\override} est en fait un raccourci :
 
 @example
-\override @var{contexte}.@var{NomObjet} #'@var{propriété} = #@var{valeur}
+\override [@var{contexte}.]@var{NomObjet}.@var{propriété} = #@var{valeur}
 @end example
 
-@noindent
-plus ou moins équivalent à
-
-@c  leave this long line -gp
-@example
-\set @var{contexte}.@var{NomObjet}  =
-  #(cons (cons '@var{propriété} @var{valeur})
-         <valeur antérieure de @var{contexte}.@var{NomObjet}>)
-@end example
-
-La valeur de @var{contexte}.@var{NomObjet} (une liste associative, ou
-@emph{alist}) permet d'initialiser les propriétés des objets un par un.
-Les objets eux-mêmes ont leurs propriétés, dont les noms, dans la
-tradition du langage Scheme, comprennent un trait d'union
-(@code{toto-titi}).  Ces propriétés internes changent constamment au
-cours de la mise en page : en fait, la gravure d'une page n'est autre
-que le calcul de toutes ces propriétés au moyen de fonctions de rappel.
-
 Nous pouvons donc par exemple accroître l'épaisseur des hampes en jouant
 sur la propriété @code{thickness} de l'objet @code{stem} :
 
 @lilypond[quote,verbatim,relative=2]
 c4 c
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 c4 c
 @end lilypond
 
@@ -2115,11 +2254,11 @@ Lorsqu'aucun contexte n'est spécifié dans une clause @code{\override},
 celle-ci s'appliquera au contexte le plus bas :
 
 @lilypond[quote,verbatim,relative=2]
-{ \override Staff.Stem #'thickness = #3.0
+{ \override Staff.Stem.thickness = #3.0
   <<
     {
       e4 e
-      \override Stem #'thickness = #0.5
+      \override Stem.thickness = #0.5
       e4 e
     } \\ {
       c4 c c c
@@ -2128,18 +2267,40 @@ celle-ci s'appliquera au contexte le plus bas :
 }
 @end lilypond
 
+Certaines @qq{sous-propriétés} sont parfois contenues dans une
+propriété.  La commande devient alors :
+
+@example
+\override Stem.details.beamed-lengths = #'(4 4 3)
+@end example
+
+ou, pour modifier les extrémités d'un objet à extension :
+
+@example
+\override TextSpanner.bound-details.left.text = #"texte de gauche"
+\override TextSpanner.bound-details.right.text = #"texte de droite"
+@end example
+
 @cindex annulation d'un override
 @cindex override, annulation des effets
 @funindex \revert
 
 Les effets d'un @code{\override} prennent fin à l'aide de l'instruction
-@code{\revert} :
+@code{\revert}.
+
+La syntaxe de la commande @code{\revert} command est :
+
+@example
+\revert [@var{contexte}.]@var{NomObjet}.@var{propriété}
+@end example
+
+Par exemple :
 
 @lilypond[quote,verbatim,relative=2]
 c4
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 c4 c
-\revert Voice.Stem #'thickness
+\revert Voice.Stem.thickness
 c4
 @end lilypond
 
@@ -2152,11 +2313,11 @@ mentionné :
   <<
     {
       e4
-      \override Staff.Stem #'thickness = #3.0
+      \override Staff.Stem.thickness = #3.0
       e4 e e
     } \\ {
       c4 c c
-      \revert Staff.Stem #'thickness
+      \revert Staff.Stem.thickness
       c4
     }
   >>
@@ -2174,11 +2335,11 @@ la suit directement :
 {
   <<
     {
-      \override Stem #'thickness = #3.0
+      \override Stem.thickness = #3.0
       e4 e e e
     } \\ {
       c4
-      \once \override Stem #'thickness = #3.0
+      \once \override Stem.thickness = #3.0
       c4 c c
     }
   >>
@@ -2190,7 +2351,7 @@ Les commandes permettant de modifier l'apparence de la partition
 ressemblent en général à
 
 @example
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 @end example
 
 @noindent
@@ -2205,13 +2366,6 @@ du trait).
 @item la valeur désirée : ici @code{3.0} (par défaut, elle est de 1.3).
 @end itemize
 
-Certaines @qq{sous-propriétés} sont parfois contenues dans une
-propriété.  La commande devient alors :
-
-@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
-@end example
-
 @cindex documentation exhaustive
 @cindex trouver des objets graphiques
 @cindex objets graphiques, description
@@ -2245,11 +2399,11 @@ L'utilisation d'un @code{\override} pour modifier les propriétés d'un
 objet graphique affectera toutes les instances de l'objet en question au
 sein du contexte, et ce dès son apparition.  Il peut parfois être
 préférable de n'affecter qu'un seul objet en particulier plutôt que tous
-les objets du contexte.  C'est là rôle de l'instruction @code{\tweak},
+les objets du contexte.  C'est là le rôle de l'instruction @code{\tweak},
 dont la syntaxe est :
 
 @example
-\tweak @var{objet-de-rendu} #'@code{objet-propriété} @code{valeur}
+\tweak [@var{objet-de-rendu}.]@code{objet-propriété} @code{valeur}
 @end example
 
 Mention de l'@var{objet-de-rendu} est optionnel.
@@ -2267,13 +2421,13 @@ Dans l'accord suivant, les notes sont modifiées une par une :
 @lilypond[relative=2,verbatim,ragged-right]
 <
   c
-  \tweak #'color #red
+  \tweak color #red
   d
   g
-  \tweak #'duration-log #1 
+  \tweak duration-log #1 
    a
 >4
--\tweak #'padding #8
+-\tweak padding #8
 -^
 @end lilypond
 
@@ -2303,7 +2457,7 @@ d'un traitement et n'est donc pas directement rendue ; c'est
 pourquoi le code suivant ne sera d'aucun effet :
 
 @example
-\tweak #'color #red c4
+\tweak color #red c4
 @end example
 
 @noindent
@@ -2335,10 +2489,10 @@ colorisée, et l'aspect d'une autre est changé.
 
 @lilypond[relative=2,verbatim,quote]
 < c
-  \tweak #'color #red
+  \tweak color #red
   d
   g
-  \tweak #'duration-log #1
+  \tweak duration-log #1
   a
 > 4
 @end lilypond
@@ -2347,7 +2501,7 @@ L'instruction @code{\tweak} permet aussi de modifier l'aspect d'une
 liaison :
 
 @lilypond[verbatim,quote,relative=1]
-c-\tweak #'thickness #5 ( d e f)
+c-\tweak thickness #5 ( d e f)
 @end lilypond
 
 La commande @code{\tweak} ne sera pleinement fonctionnelle que si elle
@@ -2359,9 +2513,9 @@ objets seront créés à partir d'événements appartenant à un
 @code{EventChord} (un événement d'accord) :
 
 @lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
-\tweak #'color #red <c e>4
-<\tweak #'color #red c>4
+\tweak color #red c4
+\tweak color #red <c e>4
+<\tweak color #red c>4
 @end lilypond
 
 La commande @code{\tweak} simple ne saurait servir à modifier un élément
@@ -2371,13 +2525,14 @@ la mesure où elles seront ultérieurement générées et après les têtes de
 note (objets @code{NoteHead}, plutôt qu'au fil des éléments musicaux
 saisis.
 
-De tels objets créés indirectement peuvent être ajustés que par une
-forme dévelppée de la commande @code{\tweak} :
+De tels objets créés indirectement ne peuvent être ajustés que par une
+forme développée de la commande @code{\tweak}, autrement dit
+lorsque l'objet est explicitement mentionné :
 
 @lilypond[relative=2,verbatim,quote]
-\tweak Stem #'color #red
-\tweak Beam #'color #green c8 e
-<c e \tweak Accidental #'font-size #-3 ges>4
+\tweak Stem.color #red
+\tweak Beam.color #green c8 e
+<c e \tweak Accidental.font-size #-3 ges>4
 @end lilypond
 
 La commande @code{\tweak} ne peut non plus servir à modifier clefs ou
@@ -2390,10 +2545,10 @@ même élément de notation :
 
 @lilypond[verbatim,quote,relative=1]
 c
--\tweak #'style #'dashed-line
--\tweak #'dash-fraction #0.2
--\tweak #'thickness #3
--\tweak #'color #red
+-\tweak style #'dashed-line
+-\tweak dash-fraction #0.2
+-\tweak thickness #3
+-\tweak color #red
  \glissando
 f'
 @end lilypond
@@ -2427,20 +2582,69 @@ pour la première rencontrée dans le fichier source.
 @subsection @code{\set} ou @code{\override}
 @translationof set versus override
 
-@c TODO -- This section is probably unnecessary now.
+@c TODO -- Should't a bunch of that be explained earlier?
 
-@ignore
-Si les propriétés peuvent être modifiées de deux façons, par les
-commandes @code{\set} et @code{\override}, c'est qu'il y a deux types de
-propriétés.
+@funindex \set
+@funindex \override
 
-La propriété @code{fontSize} est une exception : c'est un raccourci, qui
-équivaudrait à saisir @w{@code{\override @dots{} #'font-size}} pour tous
-les objets textuels.  Dans la mesure où il s'agit d'une manipulation
-très courante, une propriété spéciale a été créée.  Elle doit être
-modifiée avec la commande @code{\set}.
+Les instructions @code{\set} et @code{\override} manipulent toutes deux
+des propriétés associées à des contextes.  Dans tous les cas, ces
+propriétés tiennent compte de la hiérarchie des contextes : les
+propriétés qui n'ont pas été définies dans le contexte lui-même
+héritent des valeurs de leur contexte parent respectif.
+
+Les valeurs et durée de vie des propriétés d'un contexte sont dynamiques
+et ne sont accessibles qu'au moment où la musique est interprétée.  Lors
+de la création d'un contexte, ses propriétés sont initialisées à partir
+de la définition du contexte correspondant et de ses éventuelles
+adaptations.  Toute modification ultérieure ne sera obtenue que par des
+commandes d'adaptation des propriétés, libellées au sein même de la
+musique.
+
+Les définitions d'un objet graphique (@emph{graphical object} abrégé en
+@emph{grob}) constituent une catégorie spécifique de propriétés de
+contexte.  Dans la mesure où leur structure, enregistrement et
+utilisation diffèrent des propriétés de contextes habituelles, on ne
+peut y accéder qu'à l'aide d'un jeu de commandes différent et font
+l'objet d'un traitement à part au sein de la documentation.
+
+Contrairement aux propriétés de contextes habituelles, les définitions
+de @emph{grob} sont subdivisées en propriétés de @emph{grob}.  Un
+@emph{grob} est créé par un graveur lors de l'interprétation d'une
+expression musicale et reçoit ses propriétés initiales à partir de la
+définition de @emph{grob} en cours dans le contexte du graveur.  Le
+graveur (ou tout autre « agent » de LilyPond) peut alors ajouter ou
+modifier des propriétés à cet objet, sans pour autant affecter la
+définition du @emph{grob} dans ce contexte.
+
+Ce que nous appelons « propriétés de @emph{grob} » dans le cadre
+de l'affinage par l'utilisateur sont en fait les propriétés de la
+définition d'un objet dans un contexte.  Contrairement aux propriétés
+de contexte habituelles, les définitions d'un @emph{grob} doivent être
+enregistrées pour pouvoir garder trace de ses composants, les propriétés
+individuelles du @emph{grob} (ainsi que leurs sous-propriétés),
+séparément.  Il sera dès lors possible de définir ces composants dans
+différents contextes et ainsi disposer d'une définition globale du
+@emph{grob} à l'instant où la création de cet objet assemblera les
+éléments relatifs aux différents contextes attachés au contexte en cours
+et à ses parents.
+
+Les définitions de @emph{grob} se manipulent à l'aide des commandes
+@code{\override} et @code{\revert}, et leur nom commence par une
+capitale (comme @samp{NoteHead}) alors que les propriétés de contexte
+ordinaires -- elles commencent par une minuscule -- se manipulent avec
+@code{\set} et @code{\unset}.
+
+@cindex tweak, relation avec @code{\override}
+@funindex \tweak
+@funindex \overrideProperty
 
-@end ignore
+Les instructions spéciales @code{\tweak} et @code{\overrideProperty}
+modifient les propriétés de @emph{grob} en court-circuitant totalement
+les propriétés de contexte.  En fait, elles capturent les @emph{grobs}
+au moment de leur création pour y injecter directement des propriétés soit
+émanant d'un événement musical retouché, soit lorsqu'ils sont d'une
+qualité particulière.
 
 
 @node Modification de listes associatives
@@ -2495,7 +2699,7 @@ imbriquée} :
 % reduced space between staves
 \new PianoStaff \with {
   % this is the nested declaration
-  \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
+  \override StaffGrouper.staff-staff-spacing.basic-distance = #7
 } <<
   \new Staff { \clef treble c''1 }
   \new Staff { \clef bass   c1   }
@@ -2515,7 +2719,7 @@ forme d'une liste associative :
 
 @lilypond[quote,verbatim]
 \new PianoStaff \with {
-  \override StaffGrouper #'staff-staff-spacing =
+  \override StaffGrouper.staff-staff-spacing =
     #'((basic-distance . 0)
        (minimum-distance . 0)
        (padding . 0)
@@ -2535,10 +2739,10 @@ non mentionnées seront ramenées à zéro -- à l'exception de
 équivalentes.
 
 @example
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
   #'((basic-distance . 7))
 
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
   #'((basic-distance . 7)
      (minimum-distance . 0)
      (padding . 0)
@@ -2652,7 +2856,7 @@ précédemment saisie.
 
 Ce mode, activé par la commande @code{\markup}, permet d'interpréter les
 saisies comme étant des @emph{markups} (annotations ou étiquettes) --
-voir @rusernamed{Text markup commands,Commandes pour le mode markup}.
+voir @ref{Commandes pour markup}.
 
 
 @c silly work-around for texinfo broken-ness
@@ -2700,7 +2904,15 @@ tantôt par la droite, ou être centrées.  La plupart de ces choix peuvent
 dans certains cas, d'imposer l'orientation ou le positionnement des
 éléments.
 
-@strong{Indicateurs de position d'une articulation}
+@menu
+* Indicateurs de position d'une articulation::
+* La propriété direction::
+@end menu
+
+
+@node Indicateurs de position d'une articulation
+@unnumberedsubsubsec Indicateurs de position d'une articulation
+@translationof Articulation direction indicators
 
 Certains positionnements sont opérés par défaut -- toujours au-dessus ou
 toujours en dessous (nuances ou points d'orgue) -- alors que d'autres
@@ -2737,7 +2949,10 @@ c2( c)
 c2^( c)
 @end lilypond
 
-@strong{La propriété @code{direction}}
+
+@node La propriété direction
+@unnumberedsubsubsec La propriété @code{direction}
+@translationof The direction property
 
 Le positionnement ou l'orientation de nombreux objets de rendu sont
 gérés par la propriété @code{direction}.
@@ -2888,7 +3103,7 @@ défini par le nombre d'éléments dans la liste des valeurs de
 
 @lilypond[verbatim,quote,relative=1]
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
+  \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
 }
 { a4 e' f b | d1 }
 @end lilypond
@@ -2899,7 +3114,7 @@ par ce réglage.
 
 @lilypond[verbatim,quote,relative=1]
 \new Staff \with {
-  \override StaffSymbol #'width = #23
+  \override StaffSymbol.width = #23
 }
 { a4 e' f b | d1 }
 @end lilypond
@@ -2922,9 +3137,15 @@ Tout extenseur dispose de la @code{spanner-interface}.  Quelques uns,
 tout particulièrement ceux chargés de dessiner une ligne droite entre
 deux objets, disposent aussi de la @code{line-spanner-interface}.
 
++@menu
+* Utilisation de spanner-interface::
+* Utilisation de line-spanner-interface::
+@end menu
+
 
+@node Utilisation de spanner-interface
 @unnumberedsubsubsec Utilisation de @code{spanner-interface}
-@translationof Using the @code{spanner-interface}
+@translationof Using the spanner-interface
 
 Cette interface fournit deux propriétés qui s'appliquent à certains
 extenseurs.
@@ -2960,11 +3181,11 @@ Cette propriété est sans effet sur :
 @end ignore
 
 @lilypond[verbatim,quote,relative=2]
-a~a
+a~ a
 a
 % increase the length of the tie
--\tweak #'minimum-length #5
-~a
+-\tweak minimum-length #5
+~ a
 @end lilypond
 
 @lilypond[verbatim,quote,relative=2]
@@ -2972,7 +3193,7 @@ a1
 \compressFullBarRests
 R1*23
 % increase the length of the rest bar
-\once \override MultiMeasureRest #'minimum-length = #20
+\once \override MultiMeasureRest.minimum-length = #20
 R1*23
 a1
 @end lilypond
@@ -2980,7 +3201,7 @@ a1
 @lilypond[verbatim,quote,relative=2]
 a \< a a a \!
 % increase the length of the hairpin
-\override Hairpin #'minimum-length = #20
+\override Hairpin.minimum-length = #20
 a \< a a a \!
 @end lilypond
 
@@ -2988,15 +3209,15 @@ Cette propriété permet aussi de jouer sur l'envergure d'une liaison
 d'articulation ou de phrasé.
 
 @lilypond[verbatim,quote,relative=2]
-a( a)
+a( g)
 a
--\tweak #'minimum-length #5
-( a)
+-\tweak minimum-length #5
+( g)
 
-a\( a\)
+a\( g\)
 a
--\tweak #'minimum-length #5
-\( a\)
+-\tweak minimum-length #5
+\( g\)
 @end lilypond
 
 Certains objets requièrent un appel explicite à la procédure
@@ -3011,12 +3232,12 @@ propriété @code{springs-and-rods} n'est pas définie :
 e \glissando c'
 
 % not effective alone
-\once \override Glissando #'minimum-length = #20
+\once \override Glissando.minimum-length = #20
 e, \glissando c'
 
 % effective only when both overrides are present
-\once \override Glissando #'minimum-length = #20
-\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Glissando.minimum-length = #20
+\once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
 e, \glissando c'
 @end lilypond
 
@@ -3024,12 +3245,12 @@ Il en va de même pour l'objet @code{Beam} (ligature) :
 
 @lilypond[verbatim,quote,relative=1]
 % not effective alone
-\once \override Beam #'minimum-length = #20
+\once \override Beam.minimum-length = #20
 e8 e e e
 
 % effective only when both overrides are present
-\once \override Beam #'minimum-length = #20
-\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Beam.minimum-length = #20
+\once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
 e8 e e e
 @end lilypond
 
@@ -3045,7 +3266,7 @@ la note qui le borne :
 
 @lilypond[verbatim,quote,relative=2]
 a \< a a a a \! a a a \break
-\override Hairpin #'to-barline = ##f
+\override Hairpin.to-barline = ##f
 a \< a a a a \! a a a
 @end lilypond
 
@@ -3055,8 +3276,9 @@ affecter @code{#t}) dans le cas d'une liaison d'articulation ou de
 phrasé !
 
 
+@node Utilisation de line-spanner-interface
 @unnumberedsubsubsec Utilisation de @code{line-spanner-interface}
-@translationof Using the @code{line-spanner-interface}
+@translationof Using the line-spanner-interface
 
 Un certain nombre d'objets disposent de la propriété
 @code{line-spanner-interface}, entre autres :
@@ -3080,8 +3302,8 @@ demeure relativement simple :
 
 @lilypond[relative=2,quote,verbatim]
 e2 \glissando b
-\once \override Glissando #'(bound-details left Y) = #3
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.left.Y = #3
+\once \override Glissando.bound-details.right.Y = #-2
 e2 \glissando b
 @end lilypond
 
@@ -3100,8 +3322,8 @@ terminaisons à cet endroit se gèrent grâce aux sous-clés
 ci-dessous :
 
 @lilypond[relative=2,ragged-right,verbatim,quote]
-\override Glissando #'breakable = ##t
-\override Glissando #'(bound-details right-broken Y) = #-3
+\override Glissando.breakable = ##t
+\override Glissando.bound-details.right-broken.Y = #-3
 c1 \glissando \break
 f1
 @end lilypond
@@ -3140,7 +3362,7 @@ sous-propriété utilisée pour ajouter @i{cresc.}, @i{tr} ou autre texte à
 un extenseur horizontal.
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
    = \markup { \small \bold Slower }
 c2\startTextSpan b c a\stopTextSpan
 @end lilypond
@@ -3154,15 +3376,11 @@ définie par les sous-propriétés @code{X} et @code{Y}.  L'utilisation de
 le symbole verticalement par rapport au coin de la ligne :
 
 @lilypond[relative=1,quote,verbatim]
-\override TextSpanner
-  #'(bound-details left stencil-align-dir-y) = #-2
-\override TextSpanner
-  #'(bound-details right stencil-align-dir-y) = #UP
-
-\override TextSpanner
-  #'(bound-details left text) = #"ggg"
-\override TextSpanner
-  #'(bound-details right text) = #"hhh"
+\override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
+\override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
+
+\override TextSpanner.bound-details.left.text = #"ggg"
+\override TextSpanner.bound-details.right.text = #"hhh"
 c4^\startTextSpan c c c \stopTextSpan
 @end lilypond
 
@@ -3245,6 +3463,8 @@ certains objets ; elles sont couvertes par une rubrique spécifique.
 
 @cindex stencil, suppression
 
+@funindex \omit
+
 Tout objet de rendu se voit attribuer une propriété @code{stencil}.
 Elle est par défaut définie par la fonction chargée de dessiner cet
 objet.  Lorsque cette propriété est désactivée de force -- en lui
@@ -3254,9 +3474,20 @@ s'opère à l'aide d'un @code{\revert}.
 
 @lilypond[quote,verbatim,relative=1]
 a1 a
-\override Score.BarLine #'stencil = ##f
+\override Score.BarLine.stencil = ##f
+a a
+\revert Score.BarLine.stencil
+a a a
+@end lilypond
+
+Cette opération relativement courante fait l'objet du racourci
+@code{\omit} :
+
+@lilypond[quote,verbatim,relative=1]
+a1 a
+\omit Score.BarLine
 a a
-\revert Score.BarLine #'stencil
+\undo \omit Score.BarLine
 a a a
 @end lilypond
 
@@ -3267,13 +3498,24 @@ a a a
 
 @cindex transparent, objet
 
+@funindex \hide
+
 Tout objet de rendu dispose d'une propriété de transparence, qui est par
 défaut définie à @code{#f}.  Le fait de l'activer rendra l'objet
 transparent tout en préservant la place qu'il occupe.
 
 @lilypond[quote,verbatim,relative=2]
 a4 a
-\once \override NoteHead #'transparent = ##t
+\once \override NoteHead.transparent = ##t
+a a
+@end lilypond
+
+Cette opération relativement courante fait l'objet du racourci
+@code{\hide} :
+
+@lilypond[quote,verbatim,relative=2]
+a4 a
+\once \hide NoteHead
 a a
 @end lilypond
 
@@ -3299,7 +3541,7 @@ l'ordre dans lequel ils sont dessinés, ce qui peut laisser apparaître
 un fantôme de l'objet blanchi comme ci-dessous :
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
+\override Staff.Clef.color = #white
 a1
 @end lilypond
 
@@ -3321,8 +3563,8 @@ avoir un @code{layer} de valeur inférieure, disons @w{@code{-1}}, pour
 pouvoir être dessiné avant.
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
-\override Staff.Clef #'layer = #-1
+\override Staff.Clef.color = #white
+\override Staff.Clef.layer = #-1
 a1
 @end lilypond
 
@@ -3403,7 +3645,7 @@ ces réglages par défaut.
 @item @code{KeySignature}        @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @c omit LeftEdge until it can be explained -td
 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
-@item @code{OctavateEight}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
+@item @code{ClefModifier}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @item @code{RehearsalMark}       @tab @code{Score}          @tab @code{end-of-line-invisible}
 @item @code{TimeSignature}       @tab @code{Staff}          @tab @code{all-visible}
 
@@ -3416,7 +3658,7 @@ visibilité des barres de mesure :
 f4 g a b
 f4 g a b
 % Remove bar line at the end of the current line
-\once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
+\once \override Score.BarLine.break-visibility = #'#(#f #t #t)
 \break
 f4 g a b
 f4 g a b
@@ -3437,7 +3679,7 @@ ligne, à moins d'être différent de 1.
 aucune.  Vous devrez utiliser @code{begin-of-line-invisible} pour les
 voir et @code{all-invisible} pour les masquer.
 @item Armure -- voir ci-après.
-@item Indication d'octaviation -- voir ci-après.
+@item Modificateur de clef -- voir ci-après.
 @end itemize
 
 
@@ -3445,7 +3687,7 @@ voir et @code{all-invisible} pour les masquer.
 @unnumberedsubsubsec Considérations spécifiques
 @translationof Special considerations
 
-@strong{@emph{Visibilité après changement explicite}}
+@subsubsubheading Visibilité après changement explicite
 
 @cindex armure, visibilité après changement explicite
 @cindex explicitKeySignatureVisibility
@@ -3464,7 +3706,7 @@ le passage en si bémol majeur malgré l'activation de
 \key g \major
 f4 g a b
 % Try to remove all key signatures
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b
 \break
@@ -3490,14 +3732,14 @@ cas forcer la @code{break-visibility} de ces objets pour les supprimer.
 \key g \major
 f4 g a b
 \set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b \break
 f4 g a b
 f4 g a b
 @end lilypond
 
-@strong{@emph{Visibilité des altérations de précaution}}
+@subsubsubheading Visibilité des altérations de précaution
 
 L'impression d'altérations de précaution au moment d'un changement
 explicite de tonalité sera annulée dès lors que vous aurez désactivé la
@@ -3508,7 +3750,7 @@ propriété @code{printKeyCancellation} du contexte @code{Staff} :
 f4 g a b
 \set Staff.explicitKeySignatureVisibility = #all-invisible
 \set Staff.printKeyCancellation = ##f
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b \break
 f4 g a b
@@ -3520,7 +3762,7 @@ permettront d'indiquer le changement de tonalité.
 
 @c TODO Add visibility of cautionary accidentals before notes
 
-@strong{@emph{Barres de mesure automatiques}}
+@subsubsubheading Barres de mesure automatiques
 
 @cindex automaticBars
 @cindex barres de mesure, suppression
@@ -3538,21 +3780,23 @@ intervenir qu'à l'occasion d'un @code{\bar} explicite.
 
 @c TODO Add example
 
-@strong{@emph{Clefs octaviées}}
+@subsubsubheading Clefs transposées
 
-@cindex octaviation, visibilité de la clef
-@cindex visibilité d'un clef octaviée
-@cindex clef, visibilité de l'octaviation
+@cindex octaviation
+@cindex clef transposée, visibilité
+@cindex visibilité d'une clef transposée
+@cindex clef, visibilité de la transposition
 
-L'indication d'octaviation d'une clef est produite par l'objet de rendu
-@code{OctavateEight}.  Sa visibilité étant gérée par héritage direct de
-l'objet @code{Clef}, nul n'est besoin de forcer un quelconque
-@code{break-visibility} au niveau des objets @code{OctavateEight} pour
-éliminer une indication d'octaviation lorsque la clef est invisible.
+L'indication de transposition d'une clef est produite par l'objet
+de rendu @code{ClefModifier}.  Sa visibilité étant gérée par
+héritage direct de l'objet @code{Clef}, nul n'est besoin de forcer
+un quelconque @code{break-visibility} au niveau des objets
+@code{ClefModifier} pour éliminer une indication de transposition
+lorsque la clef est invisible.
 
 Lors d'un changement explicite de clef, la propriété
 @code{explicitClefVisibility} gère à la fois le symbole de la clef et
-l'indication d'octaviation qui lui est attachée.
+l'indication de transposition qui lui est attachée.
 
 @seealso
 Manuel d'initiation :
@@ -3581,13 +3825,13 @@ ainsi que la manière de les spécifier.
 
 @lilypond[relative=2,ragged-right,verbatim,quote]
 d2 \glissando d'2
-\once \override Glissando #'style = #'dashed-line
+\once \override Glissando.style = #'dashed-line
 d,2 \glissando d'2
-\override Glissando #'style = #'dotted-line
+\override Glissando.style = #'dotted-line
 d,2 \glissando d'2
-\override Glissando #'style = #'zigzag
+\override Glissando.style = #'zigzag
 d,2 \glissando d'2
-\override Glissando #'style = #'trill
+\override Glissando.style = #'trill
 d,2 \glissando d'2
 @end lilypond
 
@@ -3597,7 +3841,7 @@ objet graphique, mais rien ne vous empêche de les forcer :
 @c TODO Complete
 @lilypond[relative=2,ragged-right,verbatim,quote]
 e2 \glissando f
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.right.Y = #-2
 e2 \glissando f
 @end lilypond
 
@@ -3649,7 +3893,7 @@ forme soit réellement opportun ; en voici une :
 
 @lilypond[quote,verbatim,relative=1]
 g4\< e' d' f\!
-\override Hairpin #'rotation = #'(20 -1 0)
+\override Hairpin.rotation = #'(20 -1 0)
 g,,4\< e' d' f\!
 @end lilypond
 
@@ -3671,7 +3915,7 @@ textes trop haut.
 
 @c KEEP LY
 @lilypond[quote,verbatim,relative=1]
-\override TextScript #'outside-staff-priority = ##f
+\override TextScript.outside-staff-priority = ##f
 g4^\markup { \rotate #30 "un sol" }
 b^\markup { \rotate #30 "un si" }
 des^\markup { \rotate #30 "un ré bémol" }
@@ -3691,6 +3935,7 @@ approches permettant de fignoler l'apparence d'une partition.
 * Regroupement vertical d'objets graphiques::
 * Modification des stencils::
 * Modification de l'allure des éléments::
+* Modification de bandeaux avec rupture::
 * Conteneurs requalifiants::
 @end menu
 
@@ -3790,12 +4035,12 @@ défaut, puis repositionnement par modification successive du
 @lilypond[verbatim,quote,relative=2]
 a-3
 a
--\tweak #'X-offset #0
--\tweak #'Y-offset #0
+-\tweak X-offset #0
+-\tweak Y-offset #0
 -3
 a
--\tweak #'X-offset #-1
--\tweak #'Y-offset #1
+-\tweak X-offset #-1
+-\tweak Y-offset #1
 -3
 @end lilypond
 
@@ -3850,7 +4095,7 @@ valeur de @code{direction}.
 @unnumberedsubsubsec Utilisation de @code{self-alignment-interface}
 @translationof Using the self-alignment-interface
 
-@emph{Réalignement d'objets horizontalement}
+@subsubsubheading Réalignement d'objets horizontalement
 
 L'alignement horizontal d'un objet disposant de la
 @code{self-alignment-interface} dépend de la valeur de sa propriété
@@ -3875,18 +4120,18 @@ affectées à une même note :
 
 @lilypond[quote,verbatim,relative=1]
 a'
--\tweak #'self-alignment-X #-1
+-\tweak self-alignment-X #-1
 ^"left-aligned"
--\tweak #'self-alignment-X #0
+-\tweak self-alignment-X #0
 ^"center-aligned"
--\tweak #'self-alignment-X #RIGHT
+-\tweak self-alignment-X #RIGHT
 ^"right-aligned"
--\tweak #'self-alignment-X #-2.5
+-\tweak self-alignment-X #-2.5
 ^"aligned further to the right"
 @end lilypond
 
 
-@emph{Réalignement d'objets verticalement}
+@subsubsubheading Réalignement d'objets verticalement
 
 L'alignement vertical suit le même principe : la propriété
 @code{Y-offset} doit alors engager la procédure
@@ -3907,7 +4152,7 @@ de son parent.  Les valeurs symboliques @code{DOWN}, @code{CENTER} et
 et @code{1}.
 
 
-@emph{Réalignement d'objets sur les deux axes}
+@subsubsubheading Réalignement d'objets sur les deux axes
 
 Définir à la fois @code{X-offset} et @code{Y-offset} permet de réaligner
 un objet sur les deux axes.
@@ -3917,9 +4162,9 @@ sorte qu'elle se place au plus près de la tête de note.
 
 @lilypond[quote,verbatim,relative=2]
 a
--\tweak #'self-alignment-X #0.5  % move horizontally left
--\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
--\tweak #'self-alignment-Y #-1  % move vertically up
+-\tweak self-alignment-X #0.5  % move horizontally left
+-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
+-\tweak self-alignment-Y #-1  % move vertically up
 -3  % third finger
 @end lilypond
 
@@ -3945,7 +4190,7 @@ example shows the difference:
 
 
 @ignore
-@unnumberedsubsubsec Utilisation de @code{centered-on-parent}
+@unnumberedsubsubsec Utilisation de @code{centered-on-parent}
 
 @c Cannot document as they do not seem to operate consistently on all objects -td
 @c TODO investigate further
@@ -3968,25 +4213,25 @@ nous citerons @code{ambitus}, @code{breathing-sign}, @code{clef},
 @code{custos}, @code{staff-bar}, @code{left-edge},
 @code{key-cancellation}, @code{key-signature}, et @code{time-signature}.
 
-Ces indications et numéros de mesure sont par défaut centrés
-horizontalement au-dessus de l'objet :
+Chaque objet possède son propre point de référence par défaut, sur
+lequel viendra s'aligner les indications de repère :
 
 @lilypond[verbatim,quote,relative=1]
-% The rehearsal mark will be centered above the Clef
-\override Score.RehearsalMark #'break-align-symbols = #'(clef)
+% The rehearsal mark will be aligned to the right edge of the Clef
+\override Score.RehearsalMark.break-align-symbols = #'(clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
-% The rehearsal mark will be centered above the Time Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
+% The rehearsal mark will be aligned to the left edge of the Time Signature
+\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
 \key a \major
 \clef treble
 \time 3/4
 \mark "↓"
 e2.
 % The rehearsal mark will be centered above the Breath Mark
-\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
+\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
 \key a \major
 \clef treble
 \time 4/4
@@ -4005,15 +4250,15 @@ l'alignement se fera sur la barre de mesure ou, dans le cas où la barre
 de mesure est invisible, à l'endroit même où la barre prendrait place.
 
 @lilypond[verbatim,quote,relative=1]
-% The rehearsal mark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+% The rehearsal mark will be aligned to the right edge of the Key Signature
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
-% The rehearsal mark will be centered above the Clef
+% The rehearsal mark will be aligned to the right edge of the Clef
 \set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef bass
 \mark "↓"
@@ -4021,7 +4266,7 @@ gis,,1
 % The rehearsal mark will be centered above the Bar Line
 \set Staff.explicitKeySignatureVisibility = #all-invisible
 \set Staff.explicitClefVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef treble
 \mark "↓"
@@ -4033,20 +4278,20 @@ comme l'illustre l'exemple suivant.  Toutefois, si la partition comporte
 plusieurs portées, ce réglage devra apparaître dans chacune des portées.
 
 @lilypond[verbatim,quote,relative=1]
-% The RehearsalMark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+% The RehearsalMark will be aligned with the right edge of the Key Signature
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
 \key a \major
 \clef treble
 \time 4/4
 \mark "↓"
 e1
-% The RehearsalMark will be aligned with the left edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
+% The RehearsalMark will be centered above the Key Signature
+\once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
 \mark "↓"
 \key a \major
 e1
-% The RehearsalMark will be aligned with the right edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
+% The RehearsalMark will be aligned with the left edge of the Key Signature
+\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
 \key a \major
 \mark "↓"
 e1
@@ -4058,14 +4303,14 @@ ou la droite.  La valeur est exprimée en espaces de portée.
 @lilypond[verbatim,quote,relative=1]
 % The RehearsalMark will be aligned with the left edge of the Key Signature
 % and then shifted right by 3.5 staff-spaces
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
-\once \override Score.KeySignature #'break-align-anchor = #3.5
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
+\once \override Score.KeySignature.break-align-anchor = #3.5
 \key a \major
 \mark "↓"
 e1
 % The RehearsalMark will be aligned with the left edge of the Key Signature
 % and then shifted left by 2 staff-spaces
-\once \override Score.KeySignature #'break-align-anchor = #-2
+\once \override Score.KeySignature.break-align-anchor = #-2
 \key a \major
 \mark "↓"
 e1
@@ -4118,8 +4363,8 @@ remplacée par une croix inscrite dans un cercle :
 
 @lilypond[verbatim,quote]
 XinO = {
-  \once \override NoteHead  #'stencil = #ly:text-interface::print
-  \once \override NoteHead #'text = \markup {
+  \once \override NoteHead.stencil = #ly:text-interface::print
+  \once \override NoteHead.text = \markup {
     \combine
       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
       \musicglyph #"noteheads.s2cross"
@@ -4140,7 +4385,7 @@ commande de @emph{markup} @code{\musicglyph} -- voir
 
 @seealso
 Manuel de notation :
-@ref{Text markup commands},
+@ref{Commandes pour markup},
 @ref{Éléments graphiques dans du texte formaté},
 @ref{La fonte Feta},
 @ref{Mise en forme du texte}.
@@ -4163,12 +4408,30 @@ Manuel de notation :
 @cindex Bézier, points de contrôle d'une courbe
 @cindex points de contrôle, courbe de Bézier
 
-Les liaisons, qu'elles soient de prolongation, d'articulation ou de
-phrasé, sont dessinées sous la forme de courbes de Bézier de degré
-trois.  Lorsque l'aspect de la liaison automatiquement calculé n'est pas
-satisfaisant,  il peut être modifié manuellement, en fournissant
-explicitement les quatre points de contrôle qui permettront de définir
-cette courbe.
+Les liaisons, qu'elles soient de prolongation (@code{Tie}),
+d'articulation (@code{Slur}), de phrasé (@code{PhrasingSlur}), de
+laisser-vibrer (@code{LaissezVibrerTie} ou de reprise
+(@code{RepeatTie}), sont dessinées sous la forme de courbes de
+Bézier de degré trois.  Lorsque l'aspect de la liaison
+automatiquement calculé n'est pas satisfaisant, il peut être
+modifié manuellement de deux manières différentes :
+
+@enumerate a
+@item
+en spécifiant l'ajustement qui doit être apporté aux points de
+contrôle de la courbe calculée automatiquement, ou
+@item
+en fournissant explicitement les quatre points de contrôle qui
+permettront de définir cette courbe.
+@end enumerate
+
+Ces deux méthodes sont expliquées ci-dessous.  La première
+convient mieux dans le cas d'une légère adaptation de la courbe ;
+la seconde sera plus efficace lorsqu'il s'agira de créer une courbe
+sur une seule et unique note.
+
+@subsubsubheading Courbes de Bézier cubiques
+@c VO  Cubic Bézier curves
 
 Quatre points définissent une courbe de Bézier cubique. Les premier et
 quatrième points sont les points de départ et d'arrivée de la
@@ -4176,11 +4439,20 @@ courbe ; les deux autres points de contrôle -- P1 et P2 -- en
 détermineront l'allure.  La courbe se trace en partant du point P0, en
 se dirigeant vers P1 et en arrivant au point P3 selon la direction
 @w{P2-P3}.  La courbe est à l'intérieur de l'enveloppe convexe des
-points de contrôle.
+points de contrôle.  Tout déplacement (translation, rotation,
+échelonnement) des points de contrôle sera répercuté sur le dessin
+de la courbe.
+
+
+@subsubsubheading Spécification de l'ajustement des points de contrôle
+@c VO Specifying displacements from current control points
 
 Voici par exemple une liaison de prolongation dont l'allure n'est pas
 des plus heureuses, même en optant pour un @code{\tieDown}.
 
+@cindex galbe des liaisons
+@funindex \shape
+
 @lilypond[verbatim,quote,relative=1]
 <<
   { e1~ e }
@@ -4189,8 +4461,122 @@ des plus heureuses, même en optant pour un @code{\tieDown}.
 >>
 @end lilypond
 
-L'un des moyens d'améliorer cette liaison consiste à modifier
-manuellement ses quatre points de contrôle.
+L'ajustement des points de contrôle de cette liaison de tenue à
+l'aide de @code{\shape} permet d'éviter les collisions.
+
+L'instruction @code{\shape} obéit à la syntaxe
+
+@example
+[-]@code{\shape} @var{déplacements} @var{élément}
+@end example
+
+Ceci aura pour effet de repositionner les points de contrôle de
+@var{élément} des différents montants fournis par
+@var{déplacements}.  L'argument @var{déplacements} est constitué
+d'une liste de paires de nombres ou bien d'une liste de telles
+listes.  Chacun des membres de l'une des paires indique
+l'ajustement de la coordonnée d'un point de contrôle.  Lorsque
+@var{élément} est textuel, il en résulte une dérogation
+particulière appliquée au type d'objet considéré, alors que dans
+le cas d'une expression musicale sera appliqué un affinage
+approprié.
+
+En d'autres termes, la fonction @code{\shape} se comporte soit
+comme un @code{\once \override}, soit comme un @code{\tweak} selon
+que l'argument @var{élément} est un nom d'objet -- tel « Slur »
+-- ou une expression musicale tel un « ( ».  L'argument
+@var{déplacements} spécifie les ajustements à apporter aux quatre
+points de contrôle, sous la forme d'une liste de paires
+@w{@code{(dx . dy)}} dont les valeurs sont exprimées en espace de
+portée ; on utilisera une liste de listes de paires dans le cas où
+la courbe comporte plusieurs segments.
+
+La fonction sera précédée d'un tiret si et seulement si elle doit
+s'appliquer sous forme de @code{\tweak}.
+
+Pour l'exemple qui nous occupe, l'adaptation sous forme
+dérogatoire -- recours à @code{\once\override} -- de la fonction
+@code{\shape}, nous pouvons remonter la liaison d'un demi espace
+de portée :
+
+@lilypond[verbatim,quote,relative=1]
+<<
+  {
+    \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
+    e1~ e
+  }
+\\
+  { r4 <g c,> <g c,> <g c,> }
+>>
+@end lilypond
+
+La liaison est maintenant mieux positionnée ; mais sa partie
+centrale pourrait être un peu plus relevée, en procédant comme
+ci-dessous, cette fois en utilisant la formulation d'affinage
+-- la forme @code{\tweak} :
+
+@lilypond[verbatim,quote,relative=1]
+<<
+  {
+    e1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e
+  }
+\\
+  { r4 <g c,> <g c,> <g c,> }
+>>
+@end lilypond
+
+L'adaptation du positionnement horizontal des points de contrôle
+se réalise de la même manière, ce qui permet de gérer le galbe de
+deux courbes débutant au même instant musical :
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+c8(\( a) a'4 e c\)
+\shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
+\shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
+c8(\( a) a'4 e c\)
+@end lilypond
+
+La fonction @code{\shape} permet aussi d'adapter les points de
+contrôle d'une courbe qui se prolonge après un saut de ligne.
+Chaque portion de la courbe peut se voir appliquer sa propre liste
+d'ajustements.  Lorsque l'un des segments ne nécessite pas de
+retouche, il suffit de lui fournir une liste vide.  Dans l'exemple
+suivant, le saut de ligne laisse à croire qu'il y a non pas une
+seule mais deux liaisons :
+
+@lilypond[verbatim,quote,ragged-right,relative=1]
+c4( f g c
+\break
+d,4 c' f, c)
+@end lilypond
+
+Regalber les deux moitiés de la liaison rend plus évident le fait
+qu'elle d'étend par delà le saut de ligne :
+
+@lilypond[verbatim,quote,ragged-right,relative=1]
+% () may be used as a shorthand for ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
+% if any of the segments does not need to be changed
+\shape #'(
+           (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
+           ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
+         ) Slur
+c4( f g c
+\break
+d,4 c' f, c)
+@end lilypond
+
+La présence d'une courbe en S requiert obligatoirement d'ajuster
+manuellement les points de contrôle -- LilyPond n'optera jamais
+automatiquement pour un tel galbe.
+
+@lilypond[verbatim,quote,relative=2]
+c8( e b-> f d' a e-> g)
+\shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
+c8\( e b-> f d' a e-> g\)
+@end lilypond
+
+@subsubsubheading Déclaration explicite des points de contrôle
+@c VO Specifying control points explicitly
 
 Les coordonnées des points de contrôle sont données en unités d'espace
 de portée.  L'abscisse est relative au point de référence de la note de
@@ -4199,30 +4585,35 @@ de la portée.  Les différentes coordonnées sont entrées sous la forme
 d'une liste de quatre paires de nombres décimaux (ou nombres réels).
 L'une des manières de procéder consiste à tout d'abord estimer les
 coordonnées des deux extrémités puis, par tâtonnement, déterminer les
-deux points intermédiaires.
+deux points intermédiaires.  Gardez à l'esprit que ces valeurs
+pourront devoir être revues si la musique ou sa mise en forme sont
+modifées.
 
-Remarque intéressante au sujet des courbes : une courbe sera
-symétrique si ses points de contrôle sont symétriques.  L'une des
-propriétés avantageuses des courbes de Bézier est que leur
-transformation -- déplacement, rotation ou échelonnement -- est
-réalisable en simplement corrigeant de manière identique ses points de
-contrôle.
+L'une des situation où spécifier explicitement les points de
+contrôle se révèle être tout à fait appropriée est lorsqu'ils se
+réfèrent à une seul et unique note.  L'exemple suivant illustre
+l'un des moyens d'indiquer une liaison qui se prolonge sur les
+alternatives d'une répétition.
 
-Pour l'exemple qui nous occupe, l'adaptation suivante nous permet
-d'obtenir un résultat plutôt satisfaisant.  Notez bien l'endroit où
-cette adaptation est stipulée : juste avant la note de départ de la
-liaison.
-
-@lilypond[verbatim,quote,relative=1]
-<<
+@lilypond[verbatim,quote,relative=2]
+c1
+\repeat volta 3 { c4 d( e f }
+\alternative {
+  { g2) d }
   {
-    \once \override Tie
-      #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
-     e1 ~ e
+    g2
+    % create a slur and move it to a new position
+    % the <> is just an empty chord to carry the slur termination
+    -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
+    f,
   }
-\\
-  { r4 <g c,> <g c,> <g c,> }
->>
+  {
+    e'2
+    % create a slur and move it to a new position
+    -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
+    f,
+  }
+}
 @end lilypond
 
 @knownissues
@@ -4237,6 +4628,117 @@ Référence des propriétés internes :
 @rinternals{TieColumn}.
 
 
+@node Modification de bandeaux avec rupture
+@subsection Modification de bandeaux avec rupture
+@translationof Modifying broken spanners
+
+@menu
+* Utilisation de alterBroken::
+@end menu
+
+@node Utilisation de alterBroken
+@unnumberedsubsubsec Utilisation de @code{@bs{}alterBroken}
+@translationof Using alterBroken
+
+@cindex extenseur, modification
+@cindex bandeau, modification
+@cindex bandeau avec rupture, modification
+@cindex extension avec rupture, modification
+@funindex \alterBroken
+
+Lorsqu'un bandeau ou l'extension d'un objet rencontre un saut de ligne
+ou une rupture, chacun de ses tronçons hérite des attributs de l'objet
+originel.  Par voie de conséquence, la modification d'une extension avec
+rupture produira les mêmes effets sur chacun des segments.  Dans
+l'exemple ci-dessous, la modification apportée à @code{thickness}
+s'applique aussi bien avant qu'après le saut de ligne.
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+r2
+\once\override Slur.thickness = 10
+c8( d e f
+\break
+g8 f e d) r2
+@end lilypond
+
+La commande @code{\alterBroken} permet de modifier indépendamment
+l'apparence de chacune des parties d'un bandeau.  Selon le cas, cette
+commande génèrera soit un @code{\override}, soit un @code{\tweak} qui
+s'appliquera à la propriété du bandeau.
+
+La commande @code{\alterBroken} répond à la syntaxe :
+
+@example
+[-]@code{\alterBroken} @var{propriété} @var{valeurs} @var{élément}
+@end example
+
+L'argument @var{valeurs} est constitué d'une liste de valeurs, une pour
+chaque tronçon.  Lorsque @var{élément} est un nom d'objet graphique,
+tels @code{Slur} ou @code{Staff.PianoPedalBracket}, il en résulte un
+@code{\override} du type de @emph{grob} spécifié.  Lorsque @var{élément}
+est une expression musicale comme « ( » ou « [ », en résulte cette même
+expression musicale à laquelle s'applique un @code{\tweak}.
+@c closing ) and ]
+
+Le tiret introduisant la commande @code{\alterBroken} est impératif dans
+le cadre d'un @code{\tweak} ; il est superflu pour un @code{\override}.
+
+Dans sa variante @code{\override}, la commande @code{\alterBroken} peut
+se préfixer d'un @code{\once} ou d'un @code{\temporary} qui seront
+annulés par un @code{\revert} suivi de la @var{propriété}.
+
+Le code ci-dessous applique un @code{\override} indépendant à chacun
+des segments du phrasé de l'exemple précédent :
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+r2
+\alterBroken thickness #'(10 1) Slur
+c8( d e f
+\break
+g8 f e d) r2
+@end lilypond
+
+La commande @code{\alterBroken} peut s'utiliser avec tout objet étendu,
+y compris @code{Tie}, @code{PhrasingSlur}, @code{Beam} et
+@code{TextSpanner}.  Par exemple, un éditeur préparant une édition
+critique pourrait faire ressortir l'absence d'une partie de liaison de
+phrasé dans l'une des sources, en optant pour un tracé pointillé du
+seul segment ajouté.  L'exemple ci-dessous illustre la manière de
+procéder, ici avec la variante @code{\tweak} de la commande :
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+% The empty list is conveniently used below, because it is the
+% default setting of dash-definition, resulting in a solid curve.
+c2-\alterBroken dash-definition #'(() ((0 1.0 0.4 0.75))) \(e
+\break
+g2 e\)
+@end lilypond
+
+Il est important de considérer que @code{\alterBroken} affectera à
+chaque portion d'un bandeau interrompu la valeur correspondante de
+@var{valeurs}.  Si d'aventure il y a moins de valeurs que de tronçons,
+toute portion additionnelle se verra assigner une liste vide.  Ceci peut
+conduire à des résultats inattendus dans le cas où la propriété de rendu
+ne bascule pas sur une liste vide par défaut.  En pareil cas, chaque
+segment devrait se voir assigner une valeur appropriée.
+
+
+@knownissues
+Les sauts de ligne peuvent intervenir à différents endroits pour
+répondre à des modifications de mise en forme.  Les réglages adoptés par
+@code{\alterBroken} peuvent devenir inadaptés si le bandeau n'est plus
+rompu ou est découpé en plus de segments que prévu.  L'introduction
+explicite d'un @code{\break} peut alors pallier ces situations.
+
+La commande @code{\alterBroken} est inopérante sur les propriétés d'un
+bandeau qui sont traitées avant la procédure de saut de ligne, comme
+@code{direction}.
+
+@seealso
+Manuel d'extension :
+@rextend{Retouches complexes}.
+
+
 @node Conteneurs requalifiants
 @subsection Conteneurs requalifiants
 @translationof Unpure-pure containers
@@ -4312,12 +4814,12 @@ initiale aux fins d'ajustement lors des phases ultérieures d'espacement.
                               '(-0.5 . 0.5)))))
 
 squareLineCircleSpace = {
-  \override NoteHead #'stencil = #square-line-circle-space
+  \override NoteHead.stencil = #square-line-circle-space
 }
 
 smartSquareLineCircleSpace = {
   \squareLineCircleSpace
-  \override NoteHead #'Y-extent =
+  \override NoteHead.Y-extent =
    #(ly:make-unpure-pure-container
       ly:grob::stencil-height
       (lambda (grob start end) (ly:grob::stencil-height grob)))
@@ -4326,9 +4828,9 @@ smartSquareLineCircleSpace = {
 \new Voice \with { \remove "Stem_engraver" }
 \relative c'' {
   \squareLineCircleSpace
-  cis4 ces cisis c
+  cis4 ces disis d
   \smartSquareLineCircleSpace
-  cis4 ces cisis c
+  cis4 ces disis d
 }
 @end lilypond
 
@@ -4378,8 +4880,8 @@ forme
 @example
 fonction =
 #(define-music-function
-     (parser location @var{arg1} @var{arg2} @dots{})
-     (@var{type1?} @var{type2?} @dots{})
+     (parser location @var{arg1} @var{arg2}@dots{})
+     (@var{type1?} @var{type2?}@dots{})
    #@{
      @var{@dots{}musique@dots{}}
    #@})
@@ -4463,15 +4965,15 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = #padding
+     \once \override TextScript.padding = #padding
    #})
 
-\relative c''' {
+\relative c'' {
   c4^"piu mosso" b a b
   \padText #1.8
-  c4^"piu mosso" d e f
+  c4^"piu mosso" b a b
   \padText #2.6
-  c4^"piu mosso" fis a g
+  c4^"piu mosso" b a b
 }
 @end lilypond
 
@@ -4484,10 +4986,10 @@ custosNote =
      (parser location note)
      (ly:music?)
    #{
-     \tweak NoteHead #'stencil #ly:text-interface::print
-     \tweak NoteHead #'text
+     \tweak NoteHead.stencil #ly:text-interface::print
+     \tweak NoteHead.text
         \markup \musicglyph #"custodes.mensural.u0"
-     \tweak Stem #'stencil ##f
+     \tweak Stem.stencil ##f
      #note
    #})
 
@@ -4502,7 +5004,7 @@ tempoPadded =
      (parser location padding tempotext)
      (number? markup?)
    #{
-     \once \override Score.MetronomeMark #'padding = #padding
+     \once \override Score.MetronomeMark.padding = #padding
      \tempo \markup { \bold #tempotext }
    #})
 
index 802ce793449cf57f6a5295e1415edf269dce2edc..6ae89aac3dca1ce5385723a69934294020eac583 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: 049bdd90b5ae67fe463bf85e926c2eabf51acf74
+    Translation of GIT committish: bd751630011a6fbfcf069ec1fc41a8eaed8a6b87
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Valentin Villenave
 @c Translation checkers: Jean-Charles Malahieude
@@ -31,7 +31,7 @@
 @tab
 @lilypond[relative=2,notime]
 \set Staff.autoBeaming = ##f
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 c1 c2 c8 c16
 @end lilypond
 
@@ -39,7 +39,7 @@ c1 c2 c8 c16
 @tab notes pointées
 @tab
 @lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 c4. c4..
 @end lilypond
 
@@ -71,7 +71,7 @@ s4_" "
 @tab chiffre de mesure, métrique
 @tab
 @lilypond[relative=1]
-\override Staff.Clef #'stencil = #empty-stencil
+\override Staff.Clef.stencil = #empty-stencil
 \time 3/4
 s4_" "
 \time 4/4
@@ -83,7 +83,7 @@ s16_" "
 @tab silences
 @tab
 @lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 r4 r8
 @end lilypond
 
@@ -158,7 +158,7 @@ a8-[ b-]
 @end lilypond
 
 
-@item @code{<< \new Staff ... >>}
+@item @code{<< \new Staff @dots{} >>}
 @tab ajouter des portées
 @tab
 @lilypond[relative=1]
@@ -230,12 +230,12 @@ f8 c2 d e
 @end lilypond
 
 
-@item @code{\times 2/3 @{f g a@}}
+@item @code{\tuplet 3/2 @{f g a@}}
 @tab triolets
 @tab
 @lilypond[relative=1]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
-\times 2/3 { f8 g a }
+\tuplet 3/2 { f8 g a }
 @end lilypond
 
 
index 31539509077eaffebda43cfeafbac2de8d413f0f..f35fa56f70e545a148e18596386d92572e37c5f1 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: 049bdd90b5ae67fe463bf85e926c2eabf51acf74
+    Translation of GIT committish: 5c35684285613e8960e2dd4324559e1ee3774b9b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Valentin Villenave,Jean-Charles Malahieude
 @c Translation checkers: Jean-Charles Malahieude, John Mandereau
@@ -183,7 +183,7 @@ Action par défaut ; produit une triade majeure.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1
 }
 @end lilypond
@@ -196,7 +196,7 @@ en a une.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:m c:m7
 }
 @end lilypond
@@ -209,7 +209,7 @@ la septième s'il y en a.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:dim c:dim7
 }
 @end lilypond
@@ -221,7 +221,7 @@ Accord augmenté.  Ce modificateur augmente la quinte.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:aug
 }
 @end lilypond
@@ -235,7 +235,7 @@ sert pas à créer une triade majeure.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:maj c:maj7
 }
 @end lilypond
@@ -455,21 +455,20 @@ soit au moyen du mode accords.  Le chiffrage affiché sera identique quel
 que soit le mode de saisie, à moins qu'il n'y ait inversion ou ajout de
 la basse.
 
-@lilypond[verbatim,quote,relative=1]
+@lilypond[verbatim,quote]
+chordmusic = \relative c' {
+  <c e g>2 <f bes c>
+  <f c' e g>1
+  \chordmode {
+    c2 f:sus4 c1:/f
+  }
+}
 <<
   \new ChordNames {
-    <c e g>2  <f bes c>
-    <f c' e g>1
-    \chordmode {
-      c2 f:sus4 c1:/f
-    }
+    \chordmusic
   }
   {
-    <c e g>2  <f bes c>
-    <f, c' e g>1
-    \chordmode {
-      c2 f:sus4 c1:/f
-    }
+    \chordmusic
   }
 >>
 @end lilypond
@@ -500,8 +499,8 @@ l'impression d'un @emph{markup} @code{noChordSymbol}.
 
 @funindex \chords
 
-@code{\chords @{ ... @}} est un raccourci de
-@code{\new ChordNames @{ \chordmode @{ ... @} @}}.
+@code{\chords @{ @dots{} @}} est un raccourci de
+@code{\new ChordNames @{ \chordmode @{ @dots{} @} @}}.
 
 @lilypond[verbatim,quote,ragged-right]
 \chords {
@@ -857,8 +856,8 @@ sous forme chiffrée.  Le contexte @code{FiguredBass} s'occupera ensuite
 de gérer les objets @code{BassFigure}.  La basse chiffrée pourra être
 attachée à un contexte @code{Staff}.
 
-L'expression @code{\figures@{ ... @}} constitue une raccourci à
-@code{\new FiguredBass @{ \figuremode @{ ... @} @}}.
+L'expression @code{\figures@{ @dots{} @}} constitue une raccourci à
+@code{\new FiguredBass @{ \figuremode @{ @dots{} @} @}}.
 
 Bien que la gestion de la basse chiffrée ressemble beaucoup à celle
 des accords, elle est beaucoup plus simpliste.  Le mode
@@ -936,7 +935,7 @@ Vous pouvez insérer un espace ou ajouter des crochets :
 @end lilypond
 
 Vous pouvez aussi ajouter des chaînes de caractères ou des étiquettes --
-cf. @ref{Text markup commands}.
+cf. @ref{Commandes pour markup}.
 
 @lilypond[verbatim,quote,ragged-right]
 \figures {
@@ -1108,13 +1107,13 @@ On peut ajouter une basse chiffrée directement à un contexte
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \new Staff = myStaff
+  \new Staff = "myStaff"
   \figuremode {
     <4>4 <10 6>8 s8
     <6 4>4 <6 4>
   }
   %% Put notes on same Staff as figures
-  \context Staff = myStaff
+  \context Staff = "myStaff"
   {
     \clef bass
     c4 c'8 r8 c4 c'
@@ -1127,14 +1126,14 @@ positionner au-dessus ou en dessous de la portée.
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \new Staff = myStaff
+  \new Staff = "myStaff"
   \figuremode {
     <4>4 <10 6>8 s8
     \bassFigureStaffAlignmentDown
     <6 4>4 <6 4>
   }
   %% Put notes on same Staff as figures
-  \context Staff = myStaff
+  \context Staff = "myStaff"
   {
     \clef bass
     c4 c'8 r8 c4 c'
@@ -1191,31 +1190,3 @@ chiffrages adoptent des durées identiques.
   }
 >>
 @end lilypond
-
-Préserver l'ordre des prolongateurs peut s'avérer impossible lorsque
-plusieurs chiffrages qui se chevauchent en possèdent.
-
-@lilypond[verbatim,ragged-right,quote,relative=1]
-<<
-  { fis4 g g, e' }
-  \figures {
-    \bassFigureExtendersOn
-    <6 5>4 <5\! 4> < 5 _!> <6>
-  }
->>
-@end lilypond
-
-Ce problème peut être contourné en activant les prolongateurs derrière
-le chiffrage qui l'entame, puis en les désactivant derrière leur fin.
-
-@lilypond[verbatim,ragged-right,quote,relative=1]
-<<
-  { fis4 g g, e' }
-  \figures {
-    <6 5>4 <5 4>
-    \bassFigureExtendersOn
-    < 5 _!>4 <6>
-    \bassFigureExtendersOff
-  }
->>
-@end lilypond
index bfb51401292423175f7f2af69d47dfa7b793b968..a46c9f80c43d92204a37fffba20025bfb1437e0c 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: 049bdd90b5ae67fe463bf85e926c2eabf51acf74
+    Translation of GIT committish: 5c35684285613e8960e2dd4324559e1ee3774b9b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Jean-Charles Malahieude
 
@@ -106,11 +106,11 @@ manière à n'affecter seulement que certains objets de rendu.
 @lilypond[verbatim,quote,relative=2]
 \set fontSize = #3
 c4.-> d8---3
-\override NoteHead #'font-size = #-4
+\override NoteHead.font-size = #-4
 c4.-> d8---3
-\override Script #'font-size = #2
+\override Script.font-size = #2
 c4.-> d8---3
-\override Stem #'font-size = #-5
+\override Stem.font-size = #-5
 c4.-> d8---3
 @end lilypond
 
@@ -169,7 +169,7 @@ textuelle (commande @code{\markup}) de doigté
 (commande @code{\finger}).
 
 @lilypond[verbatim,quote,relative=2]
-c4-1 d-2 f-4 c^\markup { \finger "2 - 3" }
+c4-1 d-2 f\finger \markup \tied-lyric #"4~3" c\finger "2 - 3"
 @end lilypond
 
 @cindex pouce, doigté
@@ -223,10 +223,6 @@ Référence des propriétés internes :
 @rinternals{New_fingering_engraver},
 @rinternals{Fingering}.
 
-@knownissues
-La syntaxe @samp{@var{note}-@var{digit}} ne prend pas en charge, par
-défaut, les chiffres supérieurs à 9.
-
 
 @node Dictée à trous
 @unnumberedsubsubsec Dictée à trous
@@ -315,11 +311,11 @@ noms des couleurs disponibles se trouvent à l'annexe
 @ref{Liste des couleurs}.
 
 @lilypond[verbatim,quote,relative=2]
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 c4 c
-\override NoteHead #'color = #(x11-color 'LimeGreen)
+\override NoteHead.color = #(x11-color 'LimeGreen)
 d
-\override Stem #'color = #blue
+\override Stem.color = #blue
 e
 @end lilypond
 
@@ -336,20 +332,20 @@ elle revient à la couleur par défaut, le noir.  Le problème ressort de
 façon évidente au vu de la partition finale.
 
 @lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
 \set Staff.instrumentName = \markup {
   \with-color #(x11-color 'navy) "Clarinet"
 }
 
 gis8 a
-\override Beam #'color = #(x11-color "medium turquoise")
+\override Beam.color = #(x11-color "medium turquoise")
 gis a
-\override Accidental #'color = #(x11-color 'DarkRed)
+\override Accidental.color = #(x11-color 'DarkRed)
 gis a
-\override NoteHead #'color = #(x11-color "LimeGreen")
+\override NoteHead.color = #(x11-color "LimeGreen")
 gis a
 % this is deliberate nonsense; note that the stems remain black
-\override Stem #'color = #(x11-color 'Boggle)
+\override Stem.color = #(x11-color 'Boggle)
 b2 cis
 @end lilypond
 
@@ -367,16 +363,16 @@ les composantes de la couleur exacte au format rouge-vert-bleu
 l'exemple suivant correspond à 128).
 
 @lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
 \set Staff.instrumentName = \markup {
   \with-color #(x11-color 'navy) "Clarinet"
 }
 
-\override Stem #'color = #(rgb-color 0 0 0)
+\override Stem.color = #(rgb-color 0 0 0)
 gis8 a
-\override Stem #'color = #(rgb-color 1 1 1)
+\override Stem.color = #(rgb-color 1 1 1)
 gis8 a
-\override Stem #'color = #(rgb-color 0 0 0.5)
+\override Stem.color = #(rgb-color 0 0 0.5)
 gis4 a
 @end lilypond
 
@@ -495,6 +491,8 @@ L'orientation des hampes peut être définie manuellement -- voir
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {default-direction-of-stems-on-the-center-line-of-the-staff.ly}
 
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly}
 
 @seealso
 Manuel de notation :
@@ -566,14 +564,13 @@ comme une simple articulation et fonctionne comme @code{\tweak} pour
 attacher du texte à l'une des notes d'un accord.  Les autres arguments
 sont le décalage et le texte de la bulle.
 
-Les info-bulles ont une influence sur les espacements, que l'on peut
-gérer ainsi :
+Les info-bulles n'ont aucune influence sur l'espacement des notes ; on
+peut toutefois le gérer ainsi :
 
 @c KEEP LY
 @lilypond[verbatim,quote,relative=2]
 \new Voice \with { \consists "Balloon_engraver" }
 {
-  \balloonLengthOff
   \balloonGrobText #'Stem #'(3 . 4) \markup { "Je suis une hampe" }
   a8
   \balloonGrobText #'Rest #'(-4 . -4) \markup { "Je suis un silence" }
@@ -626,7 +623,7 @@ spécifie quant à elle l'espace de temps entre chaque ligne.
   \context {
     \Staff
     \consists "Grid_point_engraver" %% active les guides
-    gridInterval = #(ly:make-moment 1 4)
+    gridInterval = #(ly:make-moment 1/4)
   }
   \context {
     \Score
index 7316a7cee5263e3f5239ca5eb31fa61d95314279..d1998c84fff9b0ab0fc079647683498eb278e9c5 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: d0b51cc48c2d66efbd1cbdc682dd622e7a2a93f9
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.25"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: Jean-Charles Malahieude, John Mandereau
@@ -151,7 +151,7 @@ l'articulation désirée.  C'est entre autres le cas pour
 @notation{portato}, comme l'illustre l'exemple ci-dessous.
 
 @lilypond[verbatim,quote,relative=2]
-c4-^  c-+  c--  c-|
+c4-^  c-+  c--  c-!
 c4->  c-.  c2-_
 @end lilypond
 
@@ -173,8 +173,8 @@ objet @code{MultiMeasureRestText} rattaché à ce @qq{silence
 multimesures}.
 
 @lilypond[verbatim,quote,relative=2]
-\override Script #'color = #red
-\override MultiMeasureRestText #'color = #blue
+\override Script.color = #red
+\override MultiMeasureRestText.color = #blue
 a2\fermata r\fermata
 R1\fermataMarkup
 @end lilypond
@@ -476,6 +476,16 @@ avec ou sans extenseur, ainsi que les indications de pédale.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {printing-hairpins-using-al-niente-notation.ly}
 
+@cindex Ferneyhough, soufflets
+@cindex soufflets Ferneyhough
+@cindex ouvert, soufflet
+@cindex soufflet ouvert
+@cindex plat, soufflet
+@cindex soufflet plat
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{printing-hairpins-in-various-styles.ly}
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {vertically-aligned-dynamics-and-textscripts.ly}
 
@@ -616,6 +626,20 @@ moltoF = #(make-dynamic-script
 }
 @end lilypond
 
+L'utilisation d'un @code{\tweak} permettra d'aligner par la gauche
+cette nuance textuelle sur la tête de note, plutôt qu'un centrage :
+
+@lilypond[verbatim,quote]
+moltoF = \tweak DynamicText.self-alignment-X #LEFT
+         #(make-dynamic-script
+            (markup #:normal-text "molto"
+                    #:dynamic "f"))
+\relative c' {
+  <d e>16 <d e>
+  <d e>2..\moltoF <d e>1
+}
+@end lilypond
+
 L'utilisation des fontes en mode @emph{markup} est abordée au chapitre
 @ref{Sélection de la fonte et de la taille}.
 
@@ -978,6 +1002,11 @@ voir @ref{Divisions}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {changing-the-breath-mark-symbol.ly}
 
+@cindex coche
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{using-a-tick-as-the-breath-mark-symbol.ly}
+
 @cindex césure
 
 @lilypondfile[verbatim,quote,texidoc,doctitle]
@@ -1126,6 +1155,9 @@ vaguelettes -- voir @ref{Styles de ligne}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {making-glissandi-breakable.ly}
  
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{extending-glissandi-across-repeats.ly}
+
 @seealso
 Glossaire musicologique :
 @rglos{glissando}.
@@ -1263,8 +1295,9 @@ Il est impossible de mêler au même instant, dans un contexte
 @code{PianoStaff}, des lignes d'arpèges connectées et d'autres
 non connectées.
 
-Il n'est pas possible d'imprimer des lignes d'arpège connectées sous
-forme de parenthèse.
+La manière simple de créer des lignes d'arpège sous forme de parenthèse
+n'est pas opérationnelle pour des arpèges inter-portées ; voir
+@ref{Hampes et changements de portée}.
 
 
 @node Trilles
index 314d67033e8ec0c9a18722cfc61e7514bffaef29..98de5e28740f0b6acc103d4450116a73e7504c65 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: 5c35684285613e8960e2dd4324559e1ee3774b9b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Matthieu Jacquot
 @c Translation checkers: Jean-Charles Malahieude
@@ -252,7 +252,7 @@ corde à vide aura toujours préséance.  Ce comportement se modifie par
 l'activation de @code{restrainOpenStrings}.
 
 @lilypond[quote,ragged-right,verbatim]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \omit Voice.StringNumber }
 \new StaffGroup <<
    \new Staff \relative c {
      \clef "treble_8"
@@ -327,11 +327,11 @@ ties = \relative c' {
 \score {
   <<
     \new StaffGroup  <<
-      \context Staff {
+      \new Staff {
         \clef "treble_8"
         \ties
       }
-      \context TabStaff {
+      \new TabStaff {
         \ties
       }
     >>
@@ -366,11 +366,11 @@ ties = \relative c' {
 \score {
   <<
     \new StaffGroup  <<
-      \context Staff {
+      \new Staff {
         \clef "treble_8"
         \ties
       }
-      \context TabStaff {
+      \new TabStaff {
       \hideSplitTiedTabNotes
         \ties
       }
@@ -385,8 +385,6 @@ ties = \relative c' {
 
 @cindex harmoniques, indication en tablature
 @cindex tablature et indication d'harmoniques
-@cindex glissando, indication en tablature
-@cindex tablature et glissando
 
 @funindex \harmonic
 @funindex \harmonicByFret
@@ -396,7 +394,7 @@ Les indications de sons harmoniques ainsi que les glissandos
 peuvent être ajoutés aux tablatures.
 
 @lilypond[verbatim,quote]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \omit Voice.StringNumber }
 firstHarmonic = {
   d'4\4\harmonic
   g'4\3\harmonic
@@ -471,9 +469,14 @@ ratioHarmonics = {
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {fretted-string-harmonics-in-tablature.ly}
 
+@cindex glissando, indication en tablature
+@cindex tablature et glissando
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {slides-in-tablature.ly}
 
+@cindex accord et glissando
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {chord-glissando-in-tablature.ly}
 
@@ -548,7 +551,7 @@ basse, il sonnera donc une octave en dessous de ce qui est écrit.
 @lilypond[quote,ragged-right,verbatim]
 <<
   \new Voice \with {
-    \override StringNumber #'stencil = ##f
+    \omit StringNumber
   } {
     \clef "bass_8"
     \relative c, {
@@ -662,7 +665,7 @@ accordage personnalisé dès lors que votre fichier comportera une clause
 \layout @{
   \context @{
     \TabStaff
-    stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+    stringTunings = \stringTuning <c' g' d'' a''>
   @}
 @}
 @end example
@@ -735,12 +738,12 @@ Les cordes à vide et étouffées peuvent aussi être indiquées.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;"
@@ -760,12 +763,12 @@ d'accord dans l'interface standard :
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
      \chordmode {
        f1 g
      }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1^\markup {
       \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;"
@@ -789,12 +792,12 @@ représentées peuvent aussi être modifiés dans l'interface standard.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
      \chordmode {
        f1 g
      }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1^\markup {
       \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;"
@@ -812,12 +815,12 @@ banjo et le ukulele.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       a1
     }
   }
-  \context Staff {
+  \new Staff {
     % An 'A' chord for ukulele
     a'1^\markup {
       \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;"
@@ -831,12 +834,12 @@ de ces doigtés peut être modifié dans l'interface standard.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;"
@@ -853,12 +856,12 @@ l'interface standard.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;"
@@ -884,12 +887,12 @@ cordes à vide ainsi que les numéros de case peuvent y être indiqués.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram-terse #"x;3;2;o;1;o;"
@@ -906,12 +909,12 @@ Les indications de barré peuvent être incluses dans l'interface
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       f1 g
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1^\markup {
       \fret-diagram-terse #"1-(;3;3;2;1;1-);"
@@ -929,14 +932,13 @@ Les indications de doigtés peuvent être inclus dans l'interface
 @c Need to use override to enable fingerings to show this -- can we do so?
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
-    \override Voice.TextScript
-      #'(fret-diagram-details finger-code) = #'below-string
+  \new Staff {
+    \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;"
@@ -964,12 +966,12 @@ dans le diagramme d'accord.
 
 @lilypond[quote, verbatim]
 <<
-    \context ChordNames {
+    \new ChordNames {
       \chordmode {
         c1 d:m
       }
     }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram-verbose #'(
@@ -1005,15 +1007,14 @@ la plus basse du diagramme d'accord.
 @c \override is necessary to make fingering visible
 @lilypond[quote, verbatim]
 <<
-    \context ChordNames {
+    \new ChordNames {
       \chordmode {
         f1 g c
       }
     }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
-    \override Voice.TextScript
-      #'(fret-diagram-details finger-code) = #'below-string
+    \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
     <f, c f a c' f'>1^\markup {
       \fret-diagram-verbose #'(
         (place-fret 6 1)
@@ -1135,7 +1136,7 @@ des diagrammes d'accord stockés dans une table de correspondance :
 
 @lilypond[verbatim, ragged-right, quote]
 \include "predefined-guitar-fretboards.ly"
-\context FretBoards {
+\new FretBoards {
   \chordmode {
     c1 d
   }
@@ -1194,7 +1195,7 @@ simultanée qu'en utilisant le mode accord (voir
 
 @lilypond[verbatim, ragged-right,quote]
 \include "predefined-guitar-fretboards.ly"
-\context FretBoards {
+\new FretBoards {
   \chordmode {c1}
   <c' e' g'>1
 }
@@ -1219,10 +1220,10 @@ mychords = \chordmode{
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1247,10 +1248,10 @@ mychordlist = {
   \transpose c e { \mychords }
 }
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychordlist
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychordlist
   }
 >>
@@ -1272,10 +1273,10 @@ mychords = \chordmode{
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1303,10 +1304,10 @@ mychords = \chordmode {
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1329,10 +1330,10 @@ mychords = \chordmode {
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1381,10 +1382,10 @@ mychords = \chordmode{
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1404,7 +1405,7 @@ d'accord donné, les propriétés de l'interface dépendent de
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {defining-predefined-fretboards-for-other-instruments.ly}
 
-@lilypondfile[verbatim,quote,texidoc,doctitle]
+@lilypondfile[verbatim,quote,texidoc,doctitle,ragged-right]
 {chordchanges-for-fretboards.ly}
 
 @lilypondfile[verbatim,quote,texidoc,doctitle]
@@ -1447,16 +1448,16 @@ correspondant aux notes seront automatiquement calculées.
 
 @lilypond[quote,ragged-right,verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       f1 g
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <f, c f a c' f'>1
     <g,\6 b, d g b g'>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1
     <g, b, d g b' g'>1
@@ -1482,19 +1483,19 @@ prédéfinies :
                         #guitar-tuning
                         #"x;3-1-(;5-2;5-3;5-4;3-1-1-);"
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 c c
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <c e g c' e'>1
     \predefinedFretboardsOff
     <c e g c' e'>1
     \predefinedFretboardsOn
     <c e g c' e'>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1
     <c e g c' e'>1
@@ -1517,16 +1518,16 @@ fret.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <c-3 e-2 g c'-1 e'>1
     <d a-2 d'-3 f'-1>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1
     <d a d' f'>1
@@ -1539,17 +1540,17 @@ servira à calculer les cordes et les cases du contexte @code{FretBoard}.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       d1:m d:m
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <d a d' f'>1
     \set FretBoards.minimumFret = #5
     <d a d' f'>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <d a d' f'>1
     <d a d' f'>1
@@ -1677,7 +1678,7 @@ Cet exemple montre comment indiquer les positions et les barrés :
 \clef "treble_8"
 b16 d g b e
 \textSpannerDown
-\override TextSpanner #'(bound-details left text) = #"XII "
+\override TextSpanner.bound-details.left.text = #"XII "
 g16\startTextSpan
 b16 e g e b g\stopTextSpan
 e16 b g d
@@ -1708,7 +1709,7 @@ détaillés grâce à des indications textuelles.
 @lilypond[quote,ragged-right,verbatim]
 \relative c' {
   \clef "treble_8"
-  \override Staff.NoteHead #'style = #'harmonic-mixed
+  \override Staff.NoteHead.style = #'harmonic-mixed
   d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
 }
 @end lilypond
@@ -1722,7 +1723,7 @@ music = \relative c' {
   < b\3 \deadNote d\2 b'\1 >
   < c\3 \deadNote e\2 c'\1 >
   \deadNotesOn
-  \times 2/3 { g8 b e }
+  \tuplet 3/2 { g8 b e }
   \deadNotesOff
   < a,\3 c\2 e\1 >1
 }
@@ -1877,15 +1878,20 @@ banjo, afin d'avoir le bon nombre de cordes et le bon accordage :
 @c due to crazy intervals of banjo music, absolute pitch is recommended
 
 @lilypond[quote,ragged-right,verbatim]
-\new TabStaff <<
-  \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo
-  \set TabStaff.stringTunings = #banjo-open-g-tuning
-  {
-    \stemDown
-    g8 d' g'\5 a b g e d' |
-    g4 d''8\5 b' a'\2 g'\5 e'\2 d' |
-    g4
+music = {
+  g8 d' g'\5 a b g e d' |
+  g4 d''8\5 b' a'\2 g'\5 e'\2 d' |
+  g4
+}
+
+<<
+  \new Staff \with { \omit StringNumber }
+  { \clef "treble_8"  \music }
+  \new TabStaff \with {
+    tablatureFormat = #fret-number-tablature-format-banjo
+    stringTunings = #banjo-open-g-tuning
   }
+  { \music }
 >>
 @end lilypond
 
index f2cf87f7596ac32bd0a27f458d7988d23a88b957..ae073dcfde22b1cdc63f669a1b36e41c558584db 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: 95b372c451ea1586db8db66d3d00334382e8e103
+    Translation of GIT committish: 5c35684285613e8960e2dd4324559e1ee3774b9b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Jean-Charles Malahieude, Valentin Villenave
 
@@ -57,7 +57,7 @@ musicale délimitée par des accolades :
 
 @example
 \score @{
-...
+@dots{}
 @}
 @end example
 
@@ -104,11 +104,11 @@ Voici quelques exemples d'expression musicale :
 
 Les commentaires constituent l'une des rares exceptions à cette règle
 immuable -- voir @ref{Structure de fichier} pour les autres.  Qu'il
-s'agisse d'une seule ligne ou de tout un bloc -- délimité par @code{%@{
-.. %@}} -- un commentaire peut se placer n'importe où dans le fichier
-source, aussi bien à l'intérieur qu'à l'extérieur du bloc @code{\score},
-ou encore à l'intérieur ou à l'extérieur de l'expression musicale
-contenue dans un bloc @code{\score}.
+s'agisse d'une seule ligne ou de tout un bloc -- délimité par
+@code{%@{ @dots{} %@}} -- un commentaire peut se placer n'importe où
+dans le fichier source, aussi bien à l'intérieur qu'à l'extérieur du
+bloc @code{\score}, ou encore à l'intérieur ou à l'extérieur de
+l'expression musicale contenue dans un bloc @code{\score}.
 
 Lorsqu'un fichier ne comprend qu'un bloc @code{\score}, celui-ci est
 implicitement inclus dans un bloc @code{\book}.  Le bloc @code{\book}
@@ -145,7 +145,7 @@ différents mouvements.  Chaque mouvement fait l'objet d'un bloc
 
 @example
 \score @{
-  @var{..musique..}
+  @var{@dots{}musique@dots{}}
 @}
 @end example
 
@@ -153,7 +153,7 @@ et le texte est contenu dans un bloc @code{\markup},
 
 @example
 \markup @{
-  @var{..texte..}
+  @var{@dots{}texte@dots{}}
 @}
 @end example
 
@@ -165,13 +165,13 @@ résultant.
 
 @example
 \score @{
-  @var{..}
+  @var{@dots{}}
 @}
 \markup @{
-  @var{..}
+  @var{@dots{}}
 @}
 \score @{
-  @var{..}
+  @var{@dots{}}
 @}
 @end example
 
@@ -196,10 +196,10 @@ bloc @code{\book}.  Dans le cas contraire, le contenu du bloc
   \header @{ piece = "Romance" @}
 @}
 \markup @{
-   ..texte du second couplet..
+   @dots{}texte du second couplet@dots{}
 @}
 \markup @{
-   ..texte du troisième couplet..
+   @dots{}texte du troisième couplet@dots{}
 @}
 \score @{
   @dots{}
@@ -256,15 +256,15 @@ Ainsi, le fichier @file{huitminiatures.ly} qui contiendrait
 @example
 \book @{
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 @end example
 
@@ -304,17 +304,17 @@ de chaque bloc @code{\book}.
 \book @{
   \bookOutputSuffix "Romance"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputSuffix "Menuet"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputSuffix "Nocturne"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 @end example
 
@@ -325,17 +325,17 @@ le nom du fichier généré pour un bloc @code{\book} :
 \book @{
   \bookOutputName "Romance"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputName "Menuet"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputName "Nocturne"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 @end example
 
@@ -375,7 +375,7 @@ expression apparaît à plusieurs reprises à un niveau supérieur, les
 différents contenus seront combinés, à ceci près qu'en cas de
 déclarations conflictuelles, la dernière aura préséance.  Des
 informations complémentaires sont disponibles à la rubrique
-@ref{Le bloc \layout}.
+@ref{Le bloc layout}.
 
 @item
 Une expression Scheme pure, telle que
@@ -504,7 +504,7 @@ suivantes :
 Une ligne de commentaire, introduite par le signe @code{%}.
 
 @item
-Un bloc de commentaire, délimité par @code{%@{ .. %@}}.
+Un bloc de commentaire, délimité par @code{%@{ @dots{} %@}}.
 
 @end itemize
 
@@ -518,7 +518,7 @@ requis pour éviter tout risque d'erreur :
 
 @itemize
 @item
-Autour d'une accolade, qu'elle soit ouvrant ou fermante ;
+Autour d'une accolade, qu'elle soit ouvrante ou fermante ;
 
 @item
 Après chaque commande ou variable, autrement dit tout élément qui
@@ -532,12 +532,8 @@ autrement dit tout élément qui commence par un @code{#} ;
 Pour séparer les éléments d'une expression Scheme ;
 
 @item
-En mode parole -- @code{lyricmode} -- pour séparer les termes des
-commandes @code{\override} et @code{\set}.  Précisons à ce sujet qu'en
-plus d'ajouter une espace avant et après l'intégralité de la commande,
-vous devrez encadrer d'espaces le point et le signe égal qu'elle peut
-contenir, comme dans
-@w{@code{\override Score . LyricText #'font-size = #5}}.
+En mode parole -- @code{lyricmode} -- avant et après les commandes
+@code{\override} et @code{\set}.
 
 @end itemize
 
@@ -547,7 +543,7 @@ Manuel d'initiation :
 
 Manuel de notation :
 @ref{Généralités en matière de titrages},
-@ref{Le bloc \layout}.
+@ref{Le bloc layout}.
 
 
 @node Titres et entêtes
@@ -584,11 +580,19 @@ d'informations.
 
 Chaque bloc @code{\book} apparaissant dans un même fichier source
 résultera en un fichier indépendant, comme indiqué à la rubrique
-@ref{Structure de fichier}.  Chacun de ces fichiers résultants
-comporte deux endroits où placer des titrages : les @strong{titrages
-de partie} au début de chaque partie (@emph{bookpart}) et les
-@strong{titrages de morceau} avant chaque pièce (@emph{score}).  Tous
-deux peuvent comporter les mêmes champs bien que, par défaut, le titrage
+@ref{Structure de fichier}. Chacun de ces fichiers résultants comporte
+trois endroits où placer des titrages : le @strong{titrage de l'ouvrage}
+au début de chaque recueil (@emph{book}), les @strong{titrages de
+partie} au début de chaque partie (@emph{bookpart}) et les
+@strong{titrages de morceau} avant chaque pièce (@emph{score}).
+
+La valeur des champs de titrage @code{title} (le titre) et
+@code{composer} (le compositeur) se définissent dans des blocs
+@code{\header} -- la syntaxe appropriée et la liste des différents
+champs disponibles par défaut sont à la section
+@ref{Mise en forme par défaut des titrages subalternes}.
+Les titrages d'un ouvrage, de ses parties ou des morceaux qu'il contient
+peuvent tous comporter les même champs bien que, par défaut, le titrage
 d'un morceau se limite à @code{piece} et @code{opus}.
 
 Les blocs @code{\header} peuvent se placer à quatre endroits différents
@@ -618,6 +622,14 @@ hiérarchie ; les valeurs persisteront à moins d'être écrasées par une
 autre valeur à un niveau inférieur.  Ainsi :
 
 @itemize
+@item
+Le titre d'un ouvrage découle des champs définis en tête de fichier
+source, modifiés par les champs définis au sein du bloc @code{\book}.
+Les champs résultants serviront à affecter un titre de recueil à
+l'ouvrage, si tant est que quoi que ce soit génère une page au début de
+cet ouvrage, avant la première partie -- un simple saut de page forcé
+(@code{\pageBreak}) suffit.
+
 @item
 Le titre d'une partie découle des champs définis en tête du fichier
 source, modifiés par les champs définis au sein du bloc @code{\book}
@@ -752,7 +764,7 @@ Manuel de notation :
 Voici les différentes variables attachées au bloc @code{\header} :
 
 @c KEEP LY
-@lilypond[papersize=a7,quote,verbatim,noragged-right]
+@lilypond[papersize=a6landscape,quote,verbatim,noragged-right]
 \book {
   \header {
       % Les champs suivants sont centrés
@@ -828,12 +840,18 @@ la rubrique @ref{Mise en forme personnalisée des titrages}.
 
 @cindex breakbefore
 
+Un bloc @code{\book} qui commencerait directement par un bloc
+@code{\bookpart} ne verra pas ses titrages apparaître puisqu'il n'y a
+aucune page où imprimer le titre.  Si toutefois le titre de l'ouvrage
+est requis, le bloc @code{\book} devra commencer par un @emph{markup} ou
+une commande @code{\pageBreak}.
+
 La variable @code{breakbefore} activée dans un bloc @code{\header} situé
 dans un bloc @code{\score} force le saut de page avant le morceau
 contenu dans ce @code{\score}.  Vous pourrez ainsi séparer le titre
 principal de la musique.
 
-@lilypond[papersize=a8landscape,verbatim,noragged-right]
+@lilypond[papersize=c7landscape,verbatim,noragged-right]
 \book {
   \header {
     title = "This is my Title"
@@ -902,16 +920,6 @@ page, ou bien sous le @code{copyright} s'il n'y a qu'une seule page.
 
 @end itemize
 
-@lilypond[papersize=a8landscape]
-\book {
-  \score {
-    \relative c' {
-      c4 d e f
-    }
-  }
-}
-@end lilypond
-
 La mention spéciale se modifie en alimentant le champ @code{tagline} au
 niveau du bloc @code{\header} principal.
 
@@ -959,7 +967,7 @@ contenus dans un bloc @code{\header}.
   { s1 }
   \header {
     piece = \markup { \fontsize #4 \bold "PRAELUDIUM I" }
-    opus = \markup { \italic "(Excerpt)" }
+    opus = \markup { \italic "BWV 846" }
   }
 }
 @end lilypond
@@ -998,7 +1006,7 @@ définis dans le fichier @file{ly/titling-init.ly} :
 
 @example
 scoreTitleMarkup = \markup @{ \column @{
-  \on-the-fly #print-all-headers @{ \bookTitleMarkup \hspace #1 @}
+  \on-the-fly \print-all-headers @{ \bookTitleMarkup \hspace #1 @}
   \fill-line @{
     \fromproperty #'header:piece
     \fromproperty #'header:opus
@@ -1163,9 +1171,9 @@ En voici la syntaxe :
 
 @example
 @code{variable} = @code{\markup} @{
-  ...
-  @code{\on-the-fly} #@var{procédure} @var{markup}
-  ...
+  @dots{}
+  @code{\on-the-fly} \@var{procédure} @var{markup}
+  @dots{}
 @}
 @end example
 
@@ -1183,8 +1191,8 @@ LilyPond dispose d'ores et déjà d'un certain nombre de procédures :
 @headitem  Nom de la procédure      @tab  Condition testée
 
 @item print-page-number-check-first @tab  il faut imprimer ce numéro de page.
-@item create-page-number-stencil    @tab  'print-page-numbers est vrai.
-@item print-all-headers             @tab  'print-all-headers est vrai.
+@item create-page-number-stencil    @tab  print-page-numbers est vrai.
+@item print-all-headers             @tab  print-all-headers est vrai.
 @item first-page                    @tab  c'est la première page du @emph{book}.
 @item (on-page nombre)              @tab  numéro de page = nombre
 @item last-page                     @tab  c'est la dernière page du @emph{book}.
@@ -1212,7 +1220,7 @@ Enfin, nous appliquons le même paramétrage au @code{\oddFooterMarkup}.
     evenHeaderMarkup = \markup \null
     oddFooterMarkup = \markup {
       \fill-line {
-        \on-the-fly #print-page-number-check-first
+        \on-the-fly \print-page-number-check-first
         \fromproperty #'page:page-number-string
       }
     }
@@ -1228,9 +1236,9 @@ Plusieurs conditions @code{\on-the-fly} mentionnées l'une à la suite de
 l'autre se cumulent.  Ainsi, par exemple,
 
 @example
-  @code{\on-the-fly #first-page}
-  @code{\on-the-fly #last-page}
-  @code{@{ \markup ... \fromproperty #'header: ... @}}
+  @code{\on-the-fly \first-page}
+  @code{\on-the-fly \last-page}
+  @code{@{ \markup @dots{} \fromproperty #'header: @dots{} @}}
 @end example
 
 teste si la sortie tient sur une page unique.
@@ -1281,9 +1289,14 @@ musicale :
 
 @table @emph
 @item Les annotations événementielles
-se rattachent à des événements particuliers, comme une note individuelle
-ou au sein d'un accord, un élément d'interprétation (ligature, liaison,
-doigté, accent ou nuance) et des paroles.
+se rattachent à des événements particuliers, comme une note individuelle,
+un élément d'interprétation (doigté, accent ou nuance) ou des événements
+postérieurs (liaison, ligature manuelle).  Une note de bas de page
+événementielle se libelle généralement sous la forme :
+
+@example
+[@var{position}] \footnote [@var{marque}] @var{décalage} @var{annotation} @var{musique}
+@end example
 
 @item Les annotations temporelles
 se rapportent à un point particulier du déroulement d'un contexte
@@ -1291,27 +1304,32 @@ musical.  Certaines commandes, telles @code{\time} et @code{\clef}, ne
 reposent pas sur un événement pour la création de l'objet métrique ou
 clef.  Il en va de même pour un accord : sa hampe ou ses crochets ne
 sont créés qu'à la fin d'un moment (plus exactement au travers de l'un
-des événements note qui le composent).  Une annotation temporelle permet
-d'annoter ces objets de rendus sans se référer à un événement.
-
-@end table
+des événements note qui le composent).  Il n'est pas possible de
+connaître assurément lequel des événements note d'un accord est
+plus particulièrement à l'origine de la hampe ou du crochet.  Il
+est donc plus aisé, pour de tels éléments, d'utiliser des
+annotations temporelles.
 
-Examinons la forme développée d'une commande de note de bas de page,
-qu'elle soit événementielle ou temporelle :
+Une annotation temporelle permet d'annoter des objets de rendus
+sans se référer à un événement.  Elle se libelle généralement sous
+la forme :
 
 @example
-[@var{position}] \footnote [@var{marque}] @var{décalage} [@var{nom-grob}] @var{annotation} @var{musique}
+\footnote [@var{marque}] @var{décalage} @var{annotation} [@var{Contexte}.]@var{nom-grob}
 @end example
 
-Ses arguments peuvent se définir ainsi :
+@end table
+
+Les arguments, quelle que soit la catégorie d'annotation, peuvent se
+définir ainsi :
 
 @table @var
 @item position
 Lorsque la commande @code{\footnote} s'applique à un élément
 d'interprétation ou un événement rattaché, et uniquement dans ces cas,
-elle doit être précédée d'un indicateur de positionnement (@code{-, _
-ou ^}) de façon à rattacher @var{musique} (avec sa marque) à la note ou
-au silence qui précède.
+elle doit être précédée d'un indicateur de positionnement (@code{-, _}
+ou @code{^}) de façon à rattacher @var{musique} (avec sa marque) à
+la note ou au silence qui précède.
 
 @item marque
 Un @emph{markup} ou une chaîne de caractères identifiant l'annotation
@@ -1328,13 +1346,17 @@ haut, des valeurs négatives vers la gauche ou le bas ; des valeurs à
 zéro centrent la marque sur le point de référence.  Le décalage
 s'exprime en espace de portée.
 
+@item Contexte
+Le contexte auquel appartient l'objet à annoter.  Cet argument
+peut être omis dès lors qu'il s'agit d'un contexte de bas niveau
+tel que @code{Voice}.
 @item nom-grob
-Le type d'objet à annoter -- @samp{#'Flag} par exemple.  Lorsque cet
+Le type d'objet à annoter -- @samp{Flag} par exemple.  Lorsque cet
 élément est spécifié, c'est l'objet en question qui servira de point de
 référence, même s'il trouve son origine non pas directement dans
-l'élément @var{musique} mais dans un objet en résultant.  Son absence ou
-une valeur de @code{\default} ne permet d'annoter que des objets
-directement créés.
+une expression musicale mais dans tout objet du type spécifié
+intervenant à cet instant précis de la partition.
 
 @item annotation
 un @emph{markup} ou une chaîne de caractères qui sera reporté au bas de
@@ -1343,28 +1365,66 @@ la page.
 @item musique
 l'élément qui fait l'objet du commentaire, qu'il s'agisse d'un
 événement musical, de l'un des constituants d'un accord ou d'un
-événement rattaché.  Bien qu'il ne puisse être omis, il peut être
-remplacé par @code{\default}, auquel cas l'annotation ne sera pas
-rattachée à une expression musicale particulière, mais plutôt à un
-instant précis.  L'argument @var{nom-grob} est alors obligatoire pour
-sélectionner le type d'objet affecté -- @samp{#'TimeSignature} par
-exemple.
+événement rattaché.
 
 @end table
 
+
 @subsubsubheading Notes de bas de page événementielles
 @c VO Event-based footnotes
 
 @cindex événementielle, note de bas de page
 
-Le moyen le plus simple d'annoter un événement est :
+Ce type de note de bas de page s'attache à un objet de rendu
+généré directement par l'événement correspondant à @var{musique}.
+Il répond à la syntaxe :
 
 @example
-\footnote @var{décalage} @var{annotation} @var{musique}
+\footnote [@var{décalage}] @var{décalage} @var{annotation} @var{musique}
 @end example
 
-Ce type de note de bas de page s'attache à un objet de rendu généré par
-l'événement correspondant à @var{musique}.
+@c KEEP LY
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+  \header { tagline = ##f }
+  \relative c'' {
+    \footnote #'(-1 . 3) "Une note" a4
+    a4
+    \footnote #'(2 . 2) "Un silence" r4
+    a4
+  }
+}
+@end lilypond
+
+Un accord @emph{dans son intégralité} ne peut pas faire l'objet
+d'une note de bas de page événementielle : un accord, même s'il ne
+contient qu'une seule et unique note, ne génère aucun événement en
+propre.  Une des notes @emph{au sein} de l'accord peut toutefois
+se voir attribuer une annotation :
+
+@c KEEP LY
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+  \header { tagline = ##f }
+  \relative c'' {
+    \footnote #'(2 . 3) "Résultat non probant" <a-3>2
+    <\footnote #'(-2 . -3) "Résultat probant" a-3>4
+    <a-3 \footnote #'(3 . 1/2) "Tout aussi probant" c-5>4
+  }
+}
+@end lilypond
+
+Lorsque l'annotation concerne un événement postérieur ou une
+articulation, la commande @code{\footnote} @strong{doit} être
+précédée d'un indicateur de position (@code{-, _} ou @code{^}) et
+suivie de l'événement postérieur ou l'articulation comme argument
+@var{musique}.  Dans ce cas, la commande @code{\footnote} peut se
+considérer comme une copie de son dernier argument auquel on
+attache une annotation.  La syntaxe consacrée est :
+
+@example
+@var{position} \footnote [@var{marque}] @var{décalage} @var{annotation} @var{musique}
+@end example
 
 @c KEEP LY
 @lilypond[quote,verbatim,papersize=a8landscape]
@@ -1383,61 +1443,81 @@ l'événement correspondant à @var{musique}.
 Les appels de note peuvent être personnalisés, et le trait reliant
 l'objet à l'appel supprimé :
 
+
+@subsubsubheading Notes de bas de page temporelles
+@c VO Time-based footnotes
+
+@cindex temporelle, note de bas de page
+
+Lorsque la note de bas de page se réfère à un objet de rendu résultant
+d'un événement -- @code{Accidental} ou @code{Stem} découlent d'un
+@code{NoteHead} --, l'argument @var{nom-grob} de l'objet en question est
+requis après le texte de l'annotation, en lieu et place de
+@var{musique} :
+
 @c KEEP LY
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
   \header { tagline = ##f }
-  \relative c' {
-    \footnote "*" #'(0.5 . -2) \markup { \italic "* La première note" }
-    a'4 b8
-    \footnote \markup { \super "$" } #'(0.5 . 1)
-      \markup { \super "$" \italic " La deuxième note" }
-    e c4
-    \once \override Score.FootnoteItem #'annotation-line = ##f
-    b-\footnote \markup \tiny "+" #'(0.1 . 0.1)
-      \markup { \super "+" \italic " Éditorial" } \p
+  \relative c'' {
+    \footnote #'(-1 . -3) "Un bémol" Accidental
+    aes4 c
+    \footnote #'(-1 . 0.5) "Un autre bémol" Accidental
+    ees
+    \footnote #'(1 . -2) "Une hampe" Stem
+    aes
   }
 }
 @end lilypond
 
-D'autres exemples de personnalisation des appels de note sont donnés à
-la rubrique @ref{Notes de bas de page dans du texte indépendant}.
+Notez bien que, lorsque @var{nom-grob} est spécifié, tous les objets de
+ce type qui se trouvent à ce même instant se verront attacher une
+annotation :
 
-L'annotation d'un accord dans sa globalité n'est pas réalisable de cette
-manière dans la mesure où un accord ne génère pas d'événement en dehors
-de ses constituants.  Les notes qui le composent peuvent cependant faire
-l'objet d'une annotation.
+@c KEEP LY
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+  \header { tagline = ##f }
+  \relative c' {
+    \footnote #'(-1 . 3) "Un bémol" Accidental
+    <ees ges bes>4
+    \footnote #'(2 . 0.5) "Une articulation" Script
+    c'->-.
+  }
+}
+@end lilypond
 
-Lorsque la note de bas de page se réfère à un objet de rendu résultant
-d'un événement -- @code{Accidental} ou @code{Stem} découlent d'un
-@code{NoteHead} --, l'argument additionnel @var{nom-grob} est requis
-avant le texte de l'annotation :
+Une note incluse dans un accord peut individuellement se voir attribuer
+une annotation événementielle.  Une tête de note (@code{NoteHead}) est
+le @emph{seul} objet directement généré par un constituant d'accord ;
+elle peut donc être affectée d'une annotation événementielle.  Tous les
+autres objets constituant un accord sont générés indirectement.  La
+commande @code{\footnote} ne dispose pas d'une syntaxe permettant de
+spécifier @emph{à la fois} un type d'objet @emph{et} un événement
+particulier auquel s'attacher.  De tels objets pourront toutefois faire
+l'objet d'une annotation temporelle, préfixée d'un @code{\single} afin
+d'annoter l'événement directement consécutif :
 
 @c KEEP LY
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
   \header { tagline = ##f }
   \relative c'' {
-    % footnotes may be added to chord constituents
-    < \footnote #'(-1 . -3) #'Accidental "Un autre bémol" aes
-      c
-      \footnote #'(-1 . 0.5) #'Accidental "Un bémol" ees
+    < \footnote #'(1 . -2) "Un la" a
+      \single \footnote #'(-1 . -1) "Un dièse" Accidental
+      cis
+      \single \footnote #'(0.5 . 0.5) "Un bémol" Accidental
+      ees fis
     >2
-    \footnote #'(-1 . 2) #'Stem "Une hampe" ees2
   }
 }
 @end lilypond
 
 @warning{Lorsque plusieurs notes de bas de page se rapportent à un même
-empilement vertical, elles sont numérotées et apparaîtront selon
-l'ordre vertical des éléments présentés, autrement dit celui positionné
-le plus haut en premier, non dans leur ordre d'apparition dans le
-fichier source.}
-
-@subsubsubheading Notes de bas de page temporelles
-@c VO Time-based footnotes
-
-@cindex temporelle, note de bas de page
+empilement vertical comme ci-dessus, elles sont numérotées et
+apparaîtront selon l'ordre vertical des éléments présentés, autrement dit
+celui positionné le plus haut en premier, non dans leur ordre
+d'apparition dans le fichier source.}
 
 Les objets de rendu tels que changement de clef ou d'armure tirent leur
 origine dans la modification d'une propriété plutôt que d'un véritable
@@ -1445,17 +1525,14 @@ origine dans la modification d'une propriété plutôt que d'un véritable
 directement de la temporisation.  C'est la raison pour laquelle de tels
 objets doivent s'annoter en fonction de leur survenance au fil de la
 musique.  Les notes de bas de page temporelles sont la solution à
-privilégier lorsqu'il s'agit d'annoter les hampes ou ligature affectant
+privilégier lorsqu'il s'agit d'annoter les hampes ou ligatures affectant
 des accords : bien qu'une telle fonctionnalité puisse s'appliquer à l'un
 des événements constituant l'accord, rien ne laisse présager lequel
-serait le plus adéquat.
+serait le plus approprié.
 
-Une note de bas de page temporelle s'introduit de la même manière qu'une
-note événementielle, à ceci près que la mention @code{\default}
-remplacera l'argument @var{musique} qui indique l'événement à annoter.
 En matière de note de bas de page temporelle, l'objet de rendu considéré
-devrait toujours être mentionné explicitement, de telle sorte qu'il n'y
-ait pas d'erreur quant au positionnement de l'appel de note.
+doit toujours être mentionné explicitement, ainsi que le contexte si
+l'objet est créé dans un autre contexte que celui du plus bas niveau.
 
 @c KEEP LY
 @lilypond[quote,verbatim,papersize=a8landscape]
@@ -1463,19 +1540,42 @@ ait pas d'erreur quant au positionnement de l'appel de note.
   \header { tagline = ##f }
   \relative c'' {
     r1 |
-    \footnote #'(-0.5 . -1) #'TimeSignature "Changement de métrique" \default
+    \footnote #'(-0.5 . -1) "Changement de métrique" Staff.TimeSignature
     \time 3/4
-    \footnote #'(1 . -1) #'Stem "Hampe de l'accord" \default
+    \footnote #'(1 . -1) "Hampe de l'accord" Stem
     <c e g>4 q q
-    \footnote #'(-0.5 . 1) #'BarLine "Barre de mesure" \default
+    \footnote #'(-0.5 . 1) "Barre de mesure" Staff.BarLine
     q q
-    \footnote #'(0.5 . -1) #'KeySignature "Changement d'armure" \default
-    \key c\minor
+    \footnote #'(0.5 . -1) "Changement d'armure" Staff.KeySignature
+    \key c \minor
     q
   }
 }
 @end lilypond
 
+Les appels de note peuvent être personnalisés, et le trait reliant
+l'objet à l'appel supprimé :
+
+@c KEEP LY
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+  \header { tagline = ##f }
+  \relative c' {
+    \footnote "*" #'(0.5 . -2) \markup { \italic "* La première note" }
+    a'4 b8
+    \footnote \markup { \super "$" } #'(0.5 . 1)
+      \markup { \super "$" \italic " La deuxième note" }
+    e c4
+    \once \override Score.FootnoteItem #'annotation-line = ##f
+    b-\footnote \markup \tiny "+" #'(0.1 . 0.1)
+      \markup { \super "+" \italic " Éditorial" } \p
+  }
+}
+@end lilypond
+
+D'autres exemples de personnalisation des appels de note sont donnés à
+la rubrique @ref{Notes de bas de page dans du texte indépendant}.
+
 
 @node Notes de bas de page dans du texte indépendant
 @unnumberedsubsubsec Notes de bas de page dans du texte indépendant
@@ -1502,10 +1602,10 @@ La syntaxe consacrée dans le cas d'une gestion automatique des appels
 de note est :
 
 @example
-\markup @{ ... \auto-footnote @var{texte} @var{annotation} ... @}
+\markup @{ @dots{} \auto-footnote @var{texte} @var{annotation} @dots{} @}
 @end example
 
-Dont les éléments sont :
+Ses les éléments sont :
 
 @table @var
 
@@ -1545,10 +1645,10 @@ La syntaxe consacrée dans le cas d'une gestion personnalisée des appels
 de note est :
 
 @example
-\markup @{ ... \footnote @var{appel} @var{annotation} ... @}
+\markup @{ @dots{} \footnote @var{appel} @var{annotation} @dots{} @}
 @end example
 
-Dont les éléments sont :
+Ses les éléments sont :
 
 @table @var
 
@@ -1634,8 +1734,8 @@ Référence des propriétés internes :
 Les notes de bas de page ne peuvent que s'empiler l'une au-dessus de
 l'autre ; elles ne seront jamais présentées à la queue leu leu.
 
-Silence multimesures et ligatures automatiques ne peuvent se voir
-affecter de note de bas de page.
+Silences multimesures, ligatures automatiques et paroles ne peuvent se
+voir affecter de note de bas de page.
 
 Les notes de bas de page peuvent générer des chevauchements quand elles
 sont trop nombreuses sur une même page.
@@ -1714,16 +1814,16 @@ d'une expression musicale.
 \tocItem \markup "Premier mouvement"
 \score {
   {
-    c'4  % ...
+    c'4  % @dots{}
     \tocItem \markup "Passage spécifique du premier mouvement"
-    d'4  % ...
+    d'4  % @dots{}
   }
 }
 
 \tocItem \markup "Second mouvement"
 \score {
   {
-    e'4 % ...
+    e'4 % @dots{}
   }
 }
 @end verbatim
@@ -1736,12 +1836,12 @@ numéro de page.  Vous pouvez bien entendu personnaliser ces variables :
 
 @verbatim
 \paper {
-  %% Translate the toc title into French:
+  %% Traduit le titre de la table des matières en français :
   tocTitleMarkup = \markup \huge \column {
     \fill-line { \null "Table des matières" \null }
     \hspace #1
   }
-  %% use larger font size
+  %% des fontes un peu plus grandes
   tocItemMarkup = \markup \large \fill-line {
     \fromproperty #'toc:text \fromproperty #'toc:page
   }
@@ -1893,7 +1993,7 @@ répertoire courant, vous devrez mentionner
 @example
 \include "parties/VI.ly"
 \include "parties/VII.ly"
-... etc.
+etc.
 @end example
 
 Les fichiers à inclure peuvent eux-mêmes contenir des instructions
@@ -1916,19 +2016,19 @@ Selon l'endroit où @code{relative-includes} est valorisé à @code{#t} ou
 @code{#f}, la commande @code{\include} permettra d'incorporer des
 fichiers contenus dans l'arborescence du répertoire principal et des
 fichiers situés ailleurs.  Si, par exemple, une biblothèque générale
-libA a été créée pour utiliser des sous-fichiers à l'aide de
+libA a été créée pour utiliser des sous-fichiers à l'aide
 d'inclusions dans un fichier catalogue, les clauses @code{\include}
-devront être précédées d'un@code{#(ly:set-option #relative-includes #t)}
-de telle sorte qu'elles soient interprétées correctement lorsque
-rapatriées dans le fichier @file{.ly} principal.  Examinons cela dans
-les faits :
+devront être précédées d'un
+@code{#(ly:set-option #relative-includes #t)}  de telle sorte
+qu'elles soient interprétées correctement lorsque rapatriées dans
+le fichier @file{.ly} principal.  Examinons cela dans les faits :
 
 @example
 libA/
   libA.ly
   A1.ly
   A2.ly
-  ...
+  @dots{}
 @end example
 
 @noindent
@@ -1938,7 +2038,7 @@ puis le fichier catalogue, @code{libA.ly}, qui contient
 #(ly:set-option 'relative-includes #t)
 \include "A1.ly"
 \include "A2.ly"
-...
+@dots{}
 % retour au réglage par défaut
 #(ly:set-option 'relative-includes #f)
 @end example
@@ -1969,7 +2069,7 @@ tout en ayant bien dans @file{principal.ly}
 @example
 \include "VI.ly"
 \include "VII.ly"
-... etc
+ etc.
 @end example
 
 Lorsqu'un fichier est voué à être inclus dans nombre de partitions, vous
@@ -1982,7 +2082,7 @@ fichier de définition particulier @file{gregorian.ly}.
 
 Au moment où vous lancez LilyPond, un certain nombre de fichiers se
 retrouvent inclus par défaut ; il suffit d'activer le mode verbeux
-en faisant @w{@code{lilypond --verbose}} pour s'en rendre compte.  Vous
+en faisant @w{@code{lilypond --verbose}} pour s'en rendre compte.  Vous
 verrez ainsi défiler, en plus de nombreuses informations, le nom d'un
 certain nombre de fichiers et de chemins d'accès.  Les fichiers les plus
 important sont mentionnés au chapitre
@@ -2115,14 +2215,18 @@ manière suivante :
   @tab Résultat
 
 @item
-Musique balisée précédée de @code{\keepWithTag #'@var{nom}}
- @tab Musique non balisée et musique balisée par @var{nom} seront
- incluses ; la musique balisée autrement est exclue.
+Musique balisée précédée de @code{\keepWithTag #'@var{nom}} ou
+       @code{\keepWithTag #'(@var{nom1} @var{nom2}@dots{})}
+@tab Musique non balisée et musique balisée par l'un des noms de
+       balise fournis seront incluses ; la musique balisée
+       autrement est exclue.
 
 @item
-Musique balisée précédée de @code{\removeWithTag #'@var{nom}}
- @tab Musique non balisée et fragments appelés autrement que @var{nom}
- seront inclus ; la musique balisée par @var{nom} est exclue.
+Musique balisée précédée de @code{\removeWithTag #'@var{nom}} ou
+       @code{\removeWithTag #'(@var{nom1} @var{nom2}@dots{})}
+@tab Musique non balisée et fragments appelés autrement que par
+       l'un des noms fournis seront inclus ; la musique balisée
+       par autre chose que les noms mentionnés est exclue. 
 
 @item
 Musique balisée non précédée de @code{\keepWithTag} ou
@@ -2177,7 +2281,7 @@ music = \relative g' {
 }
 @end lilypond
 
-Ce principe de filtrage peut s'appliquer aux articulations, textes etc.
+Ce principe de filtrage peut s'appliquer aux articulations, textesetc.
 Il suffit de positionner
 
 @example
@@ -2197,12 +2301,13 @@ Ceci définira une note avec une indication conditionnelle de doigté ou
 un texte.
 
 Vous pouvez baliser différemment la même expression musicale en
-saisissant plusieurs @code{\tag} :
+saisissant plusieurs @code{\tag} ou bien en combinant plusieurs
+balises dans une liste :
 
 @lilypond[quote,verbatim]
 music = \relative c'' {
   \tag #'a \tag #'both { a4 a a a }
-  \tag #'b \tag #'both { b4 b b b }
+  \tag #'(b both) { b4 b b b }
 }
 <<
 \keepWithTag #'a \music
@@ -2212,19 +2317,23 @@ music = \relative c'' {
 @end lilypond
 
 L'application concomitante de plusieurs filtres @code{\removeWithTag} à
-la même expression musicale permet d'exclure plusieurs balisages :
+la même expression musicale permet d'exclure plusieurs balisages.
+Une liste fournie en argument à un unique @code{\removeWithTag}
+produira le même effet :
 
 @lilypond[verbatim,quote]
 music = \relative c'' {
-\tag #'A { a4 a a a }
-\tag #'B { b4 b b b }
-\tag #'C { c4 c c c }
-\tag #'D { d4 d d d }
+  \tag #'A { a4 a a a }
+  \tag #'B { b4 b b b }
+  \tag #'C { c4 c c c }
+  \tag #'D { d4 d d d }
 }
-{
-\removeWithTag #'B
-\removeWithTag #'C
-\music
+\new Voice {
+  \removeWithTag #'B
+  \removeWithTag #'C
+  \music
+  \removeWithTag #'(B C)
+  \music
 }
 @end lilypond
 
@@ -2232,6 +2341,10 @@ L'application de plus d'un filtre @code{\keepWithTag} à la même
 expression musicale aboutit à l'exclusion de @b{tous} les balisages.
 En effet, si le premier filtre exclut tous les autres balisages,
 l'application du second exclura les effets du premier.
+L'utilisation d'une unique commande @code{\keepWithTag} avec une
+liste de balises est en pareil cas des plus pertinente : seront
+exclus tous les fragments non concernés par l'une quelconque des
+balises mentionnées.
 
 Il peut arriver que vous ayez besoin de raccorder quelque chose en un
 point particulier d'une expression musicale.  Les commandes
@@ -2267,17 +2380,15 @@ Manuel de notation :
 @ref{Regroupement automatique de parties},
 @ref{Insertion de fichiers LilyPond}.
 
-
-@ignore
-@c This warning is more general than this placement implies.
-@c Rests are not merged whether or not they come from tagged sections.
-@c Should be deleted?  -td
-
 @knownissues
-Lorsqu'elles comportent des silences, ceux-ci ne seront pas fusionnés
-si vous imprimez une partition avec les deux sections balisées.
-
-@end ignore
+L'application d'un @code{\relative} à une expression musicale
+obtenue par filtrage à l'aide de @code{\keepWithTag} ou
+@code{\removeWithTag} peut générer des changements d'octave,
+puisque seules les hauteurs récupérées dans ce filtre seront
+prises en considération.  Une instruction @code{\relative} qui
+précède les commandes @code{\keepWithTag} ou
+@code{\removeWithTag} permet d'éviter ce risque, dans la mesure où
+elle viendra « recaler » ces hauteurs récupérées.
 
 
 @node Globalisation des réglages
@@ -2569,10 +2680,10 @@ en êtes dans la notation.  Dans le but de gagner du temps dans le
 processus de correction, vous pouvez @qq{escamoter} le reste et ne
 générer que les dernières mesures en insérant
 
-@verbatim
+@example
 showLastLength = R1*5
-\score { ... }
-@end verbatim
+\score @{ @dots{} @}
+@end example
 
 @noindent
 dans votre fichier source.  Ceci aura pour effet de ne générer que les
@@ -2636,11 +2747,11 @@ Voici quelques mesures utilisant la police Gonville :
 
 @c NOTE: these images are a bit big, but that's important
 @c       for the font comparison.  -gp
-@sourceimage{Gonville_after,,,}
+@sourceimage{Gonville_after,15cm,,}
 
 Et ces même mesures avec la police de LilyPond, Feta :
 
-@sourceimage{Gonville_before,,,}
+@sourceimage{Gonville_before,15cm,,}
 
 
 @subsubheading Instructions d'installation pour MacOS
@@ -2692,6 +2803,7 @@ comportera plus de quinze portées verra le même canal réutilisé.
 
 @menu
 * Création de fichiers MIDI::
+* Instrument MIDI::
 * Le bloc MIDI::
 * Contenu de la sortie MIDI::
 * Répétitions et MIDI::
@@ -2710,7 +2822,7 @@ LilyPond générera un fichier MIDI dès que vous ajouterez un bloc
 
 @example
 \score @{
-  @var{...musique...}
+  @var{@dots{}musique@dots{}}
   \midi @{ @}
 @}
 @end example
@@ -2722,7 +2834,7 @@ un bloc @code{\layout}.
 
 @example
 \score @{
-  @var{...musique...}
+  @var{@dots{}musique@dots{}}
   \midi @{ @}
   \layout @{ @}
 @}
@@ -2765,34 +2877,6 @@ Vous pouvez aussi le faire en ligne de commande :
 lilypond … -dmidi-extension=midi fichierLily.ly
 @end example
 
-
-@unnumberedsubsubsec Noms d'instrument
-@translationof Instrument names
-
-@cindex instrument, nom d'
-@funindex Staff.midiInstrument
-
-L'instrument MIDI affecté à un canal particulier est déterminé par la
-propriété @code{Staff.midiInstrument}.  Vous pouvez choisir l'un des
-instruments répertoriés à l'annexe @ref{Instruments MIDI}.
-
-@example
-\new Staff @{
-  \set Staff.midiInstrument = #"glockenspiel"
-  @var{...notes...}
-@}
-@end example
-
-@example
-\new Staff \with @{midiInstrument = #"cello"@} @{
-  @var{...notes...}
-@}
-@end example
-
-Lorsque l'instrument choisi ne correspond pas exactement à l'une des
-dénominations consacrées, LilyPond le replacera par un piano de concert
-(@code{"acoustic grand"}).
-
 @snippets
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {changing-midi-output-to-one-channel-per-voice.ly}
@@ -2825,6 +2909,35 @@ tempo.  MS Windows Media Player et
 @uref{http://@/timidity@/.sourceforge@/.net/,timidity} le font sans
 problème.
 
+@node Instrument MIDI
+@subsection Instrument MIDI
+@translationof MIDI Instruments
+
+@cindex instrument, nom d'
+@cindex MIDI, instruments
+@funindex Staff.midiInstrument
+
+L'instrument MIDI affecté à un canal particulier est déterminé par la
+propriété @code{Staff.midiInstrument}.  Vous pouvez choisir l'un des
+instruments répertoriés à l'annexe @ref{Instruments MIDI}.
+
+@example
+\new Staff @{
+  \set Staff.midiInstrument = #"glockenspiel"
+  @var{@dots{}notes@dots{}}
+@}
+@end example
+
+@example
+\new Staff \with @{midiInstrument = #"cello"@} @{
+  @var{@dots{}notes@dots{}}
+@}
+@end example
+
+Lorsque l'instrument choisi ne correspond pas exactement à l'une des
+dénominations consacrées, LilyPond le replacera par un piano de concert
+(@code{"acoustic grand"}).
+
 
 @node Le bloc MIDI
 @subsection Le bloc MIDI
@@ -2842,7 +2955,7 @@ imprimée.
 
 @example
 \score @{
-  @var{...musique...}
+  @var{@dots{}musique@dots{}}
   \midi @{
     \tempo 4 = 72
   @}
@@ -2856,7 +2969,7 @@ Par exemple, indiquer 90 à la noire pointée est équivalent à spécifier
 270 croches à la minute :
 
 @example
-tempoWholesPerMinute = #(ly:make-moment 270 8)
+tempoWholesPerMinute = #(ly:make-moment 270/8)
 @end example
 
 @cindex MIDI et définition de contexte
@@ -2875,7 +2988,7 @@ suffit d'insérer les lignes suivantes dans votre bloc
 
 @example
 \midi @{
-  ...
+  @dots{}
   \context @{
     \Voice
     \remove "Dynamic_performer"
@@ -2901,7 +3014,13 @@ commande @code{\score}.
 
 @c TODO Check grace notes - timing is suspect?
 
+@menu
+* Éléments pris en compte dans le MIDI::
+* Éléments non pris en compte dans le MIDI::
+@end menu
+
 
+@node Éléments pris en compte dans le MIDI
 @unnumberedsubsubsec Éléments pris en compte dans le MIDI
 @translationof Supported in MIDI
 
@@ -2968,6 +3087,7 @@ alors inclus :
 @end itemize
 
 
+@node Éléments non pris en compte dans le MIDI
 @unnumberedsubsubsec Éléments non pris en compte dans le MIDI
 @translationof Unsupported in MIDI
 
@@ -3044,12 +3164,12 @@ symboles de pourcentage.  Par exemple
 
 @example
 \score @{
-  @var{..musique..}
-  \layout @{ ..  @}
+  @var{@dots{}musique@dots{}}
+  \layout @{ @dots{}  @}
 @}
 \score @{
-  \unfoldRepeats @var{..musique..}
-  \midi @{ .. @}
+  \unfoldRepeats @var{@dots{}musique@dots{}}
+  \midi @{ @dots{} @}
 @}
 @end example
 
@@ -3063,7 +3183,15 @@ par défaut au contexte @code{Voice}.  Vous pouvez contrôler à la fois le
 volume général, celui des indications de nuance ainsi que celui des
 différents instruments.
 
+@menu
+* Indications de nuance::
+* Amplitude du volume en MIDI::
+* Égalisation de plusieurs instruments (i)::
+* Égalisation de plusieurs instruments (ii)::
+@end menu
 
+
+@node Indications de nuance
 @unnumberedsubsubsec Indications de nuance
 @translationof Dynamic marks
 
@@ -3115,13 +3243,14 @@ correspondances, nous vous conseillons d'utiliser la procédure
 Le dernier exemple de cette partie illustre la manière de procéder.
 
 
+@node Amplitude du volume en MIDI
 @unnumberedsubsubsec Amplitude du volume en MIDI
 @translationof Overall MIDI volume
 
 Les valeurs extrêmes du volume MIDI des nuances se contrôlent à l'aide
 des propriétés @code{midiMinimumVolume} et @code{midiMaximumVolume} qui
 agissent au niveau @code{Score}.  Ces propriétés sont effectives dès
-lors qu'une nuance est indiquée ; une nuance de départ est donc
+lors qu'une nuance est indiquée ; une nuance de départ explicite est donc
 requise pour que le volume soit ajusté dès le début de la partition.
 Vous pouvez alors modifier la fraction correspondant à chaque nuance à
 l'aide de la formule
@@ -3131,7 +3260,7 @@ midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fraction
 @end example
 
 Voici comment ajuster les nuances tout en limitant l'amplitude du volume
-entre 0,2 et 0,5 :
+entre 0,2 et 0,5 :
 
 @lilypond[verbatim,quote]
 \score {
@@ -3158,9 +3287,9 @@ entre 0,2 et 0,5 :
   >>
   \layout {}
   \midi {
+    \tempo 2 = 72
     \context {
       \Score
-      tempoWholesPerMinute = #(ly:make-moment 72 2)
       midiMinimumVolume = #0.2
       midiMaximumVolume = #0.5
     }
@@ -3169,6 +3298,7 @@ entre 0,2 et 0,5 :
 @end lilypond
 
 
+@node Égalisation de plusieurs instruments (i)
 @unnumberedsubsubsec Égalisation de plusieurs instruments (i)
 @translationof Equalizing different instruments (i)
 
@@ -3217,6 +3347,7 @@ indication de nuance.
 @end lilypond
 
 
+@node Égalisation de plusieurs instruments (ii)
 @unnumberedsubsubsec Égalisation de plusieurs instruments (ii)
 @translationof Equalizing different instruments (ii)
 
@@ -3373,7 +3504,7 @@ seront développées et appliquer la commande à votre musique :
 
 @example
 \unfoldRepeats \articulate <<
-       tout le reste du bloc contenant la partition...
+       tout le reste du bloc contenant la partition@dots{}
 >>
 @end example
 
@@ -3432,8 +3563,7 @@ affichera
 LilyPond affichera le résultat sous forme de message en console, au
 milieu de toutes les informations de compilation.  Afin d'isoler ces
 messages et enregistrer le résultat de la fonction
-@code{\display@{MATÉRIAU@}}, pensez à rediriger la sortie vers un
-fichier.
+@code{\displayLilyMusic}, pensez à rediriger la sortie vers un fichier.
 
 @example
 lilypond fichier.ly > affichage.txt
@@ -3498,7 +3628,7 @@ tabulation.  Chaque ligne comporte deux champs fixes suivis d'un certain
 nombre de paramètres optionnels.
 
 @example
-@var{temps}  @var{type}  @var{...paramètres...}
+@var{temps} @var{type} @var{@dots{}paramètres@dots{}}
 @end example
 
 Ces informations peuvent faire l'objet d'un retraitement par d'autres
index 67cfcac0de67d8f2dbc50dfe791b4302b9cae1d5..5f0075d66a5a1ba794e96b4433d36cce480947bd 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: 5c35684285613e8960e2dd4324559e1ee3774b9b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: Jean-Charles Malahieude, John Mandereau
@@ -228,7 +228,7 @@ Une voix qui change de portée peut entraîner des collisions :
   \new Staff = "up" {
     \voiceOne
     % Make space for fingering in the cross-staff voice
-    \once\override DynamicLineSpanner #'staff-padding = #3.4
+    \once\override DynamicLineSpanner.staff-padding = #4
     e''2\p\< d''\>
     c1\!
   }
@@ -607,7 +607,7 @@ pour exécuter un morceau.
 
 @snippets
 @lilypondfile[verbatim,quote,texidoc,doctitle]
-{accordion-discant-symbols.ly}
+{accordion-registers.ly}
 
 @seealso
 Morceaux choisis :
index c8400fc9aef7606b93d14686cc66876cdb945b7e..8ceef02be4584341d6708b0ae7c632d855cf4ca9 100644 (file)
@@ -1,8 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: 049bdd90b5ae67fe463bf85e926c2eabf51acf74
-
+    Translation of GIT committish: 44c3a53cb34d08a57838ae56c407216277e4c3f0
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -1202,7 +1201,7 @@ Voici les différents styles de tête de note disponibles.
 
 
 @node Commandes pour markup
-@appendixsec Commandes pour markup
+@appendixsec Commandes pour @emph{markup}
 @translationof Text markup commands
 
 Les commandes suivantes peuvent être utilisées dans un bloc
@@ -1212,7 +1211,7 @@ Les commandes suivantes peuvent être utilisées dans un bloc
 
 
 @node Commandes pour liste de markups
-@appendixsec Commandes pour liste de markups
+@appendixsec Commandes pour liste de @emph{markups}
 @translationof Text markup list commands
 
 Les commandes suivantes peuvent être utilisées dans un
@@ -1629,11 +1628,11 @@ concluante, le fichier est déclaré invalide ; un message approprié est
 alors émis.  Les différents regroupements syntaxiques ainsi que les
 règles de construction des regroupements relatifs à la grammaire de
 LilyPond sont définis dans le fichier @file{lily/parser.yy} et présentés
-selon la forme de Backus-Naur (BNF) à l'annexe
-@ref{Grammaire de LilyPond}.  Ce fichier est utilisé par le 
-générateur de @emph{parser} Bison lors de la construction du programme.
-Partie intégrante des sources, il n'est pas distribué avec les
-programmes binaires de LilyPond.
+selon la forme de Backus-Naur (BNF) à la rubrique
+@rcontribnamed{LilyPond grammar, Grammaire de LilyPond}.  Ce
+fichier est utilisé par le générateur de @emph{parser} Bison lors
+de la construction du programme. Partie intégrante des sources, il
+n'est pas distribué avec les programmes binaires de LilyPond.
 
 
 @node variable de l'analyseur grammatical
@@ -1648,7 +1647,6 @@ programmes binaires de LilyPond.
 @cindex mode
 @cindex output-count
 @cindex output-suffix
-@cindex parseStringResult
 @cindex partCombineListener
 @cindex pitchnames
 @cindex toplevel-bookparts
@@ -1676,7 +1674,6 @@ LilyPond utilise les variables suivantes :
 @item mode
 @item output-count
 @item output-suffix
-@item parseStringResult
 @item partCombineListener
 @item pitchnames
 @item toplevel-bookparts
index eb84aa3c52b6158cbfdfc611ca99c81de77d8a31..3a0dfcdddf1539179ee00e7215eecba0d04ec368 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: 0
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: John Mandereau
@@ -272,17 +272,16 @@ mus = \drummode {
   << \new DrumStaff \with {
        \remove "Bar_engraver"
        \remove "Time_signature_engraver"
-       \override Stem #'transparent = ##t
-       \override Flag #'transparent = ##t
-       \override Stem #'Y-extent = ##f
+       \hide Stem
+       \override Stem.Y-extent = ##f
      } \mus
      \new Lyrics \nam
   >>
   \layout {
     \context {
       \Score
-      \override LyricText #'font-family = #'typewriter
-      \override BarNumber #'transparent =##T
+      \override LyricText.font-family = #'typewriter
+      \override BarNumber.transparent =##T
     }
   }
 }
@@ -305,16 +304,15 @@ mus = \drummode { timh ssh timl ssl cb s16 }
   \new DrumStaff \with {
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
-    \override StaffSymbol #'line-count = #2
-    \override StaffSymbol #'staff-space = #2
-    \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0)
+    \hide Stem
+    \override Stem.Y-extent = ##f
+    \override StaffSymbol.line-count = #2
+    \override StaffSymbol.staff-space = #2
+    \override VerticalAxisGroup.minimum-Y-extent = #'(-3.0 . 4.0)
     drumStyleTable = #timbales-style
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -332,16 +330,15 @@ mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 }
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
     drumStyleTable = #congas-style
-    \override StaffSymbol #'line-count = #2
+    \override StaffSymbol.line-count = #2
 
     %% this sucks; it will lengthen stems.
-    \override StaffSymbol #'staff-space = #2
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \override StaffSymbol.staff-space = #2
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -358,17 +355,16 @@ mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 }
   \new DrumStaff \with {
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
-    \override StaffSymbol #'line-count = #2
+    \override StaffSymbol.line-count = #2
     drumStyleTable = #bongos-style
 
     %% this sucks; it will lengthen stems.
-    \override StaffSymbol #'staff-space = #2
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \override StaffSymbol.staff-space = #2
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -386,14 +382,13 @@ mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 }
   \new DrumStaff \with{
     \remove "Bar_engraver"
     drumStyleTable = #percussion-style
-    \override StaffSymbol #'line-count = #1
+    \override StaffSymbol.line-count = #1
     \remove "Time_signature_engraver"
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -445,10 +440,10 @@ Deux @emph{woodblocks} saisis comme @code{wbh} (woodblock aigu) et
 woodstaff = {
   % This defines a staff with only two lines.
   % It also defines the positions of the two lines.
-  \override Staff.StaffSymbol #'line-positions = #'(-2 3)
+  \override Staff.StaffSymbol.line-positions = #'(-2 3)
 
   % This is necessary; if not entered, the barline would be too short!
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
 }
 
 \new DrumStaff {
@@ -467,7 +462,7 @@ woodstaff = {
 
 Vous aurez remarqué ici l'allongement des barres de mesures par
 l'instruction
-@w{@code{\override Staff.BarLine #'bar-extent #'(de . à)}}.  Il faut
+@w{@code{\override Staff.BarLine.bar-extent #'(de . à)}}.  Il faut
 aussi définir la position des deux lignes de la portée -- voir à ce
 sujet la rubrique @ref{Symbole de la portée}.
 
@@ -477,8 +472,8 @@ Un tambourin, saisi avec un @qq{tamb} :
 #(define mydrums '((tambourine default #t 0)))
 
 tambustaff = {
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Tambourine"
 }
 
@@ -503,8 +498,8 @@ Un peu de tam tam, abrégé @qq{tt} :
 #(define mydrums '((tamtam default #t 0)))
 
 tamtamstaff = {
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Tamtam"
 }
 
@@ -526,9 +521,9 @@ cloche de quart -- @qq{rb} pour @emph{ridebell} :
                    (cowbell  default #t -2)))
 
 bellstaff = {
-  \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3)
+  \override DrumStaff.StaffSymbol.line-positions = #'(-2 3)
   \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Different Bells"
 }
 
index 3b192aff41ea9f1981c068b59ab8239bfa52c0e8..f468db5728b65ac7f4e06d6bb07f394e743f4855 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: 0a8b4e0f1b0d68659a584be48c7b96da358d501d
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
-    Guide, node Updating translation committishes..
+    Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.18"
 
 @c Translators: Frédéric Chiasson
 @c Translation checkers: Valentin Villenave, Jean-Charles Malahieude
@@ -94,6 +94,19 @@ chaque @code{,} baisse la note d'une octave.
 }
 @end lilypond
 
+@funindex absolute
+@funindex \absolute
+
+Une musique peut être déclarée explicitement comme étant en notation
+absolue à l'aide de la commande @code{\absolute} :
+
+@example
+\absolute @var{expression_musicale}
+@end example
+
+sera interprété en mode d'octaves absolues quel que soit le contexte où
+elle apparait.
+
 @seealso
 Glossaire musicologique :
 @rglosnamed{Pitch names,Noms des notes}.
@@ -113,12 +126,14 @@ Morceaux choisis :
 @funindex \relative
 @funindex relative
 
-On spécifie les octaves en ajoutant @code{'} ou @code{,} aux
-noms de hauteur.  En recopiant de la musique, on a vite fait de mettre
-une note à la mauvaise octave ; ce genre d'erreur est difficile à
-retrouver.  Le mode d'écriture en octave relative prévient ces erreurs
-dans la mesure où elles deviennent beaucoup plus évidentes : une
-seule erreur décale le reste de la pièce à une mauvaise octave.
+Le mode d'écriture en octave absolue requiert d'indiquer l'octave de
+chaque note.  Pour le mode d'écriture en octave relative, par contre,
+l'octave d'une note est déterminée par rapport à la note précédente :
+modifier l'octave d'une note aura des répercussions sur toutes les notes
+à venir.
+
+Une musique peut être déclarée explicitement comme étant en notation
+relative à l'aide de la commande @code{\relative} :
 
 @example
 \relative @var{hauteur_de_référence} @var{expression_musicale}
@@ -144,11 +159,33 @@ Ces signes de changement d'octave peuvent être multipliés.  Par exemple,
 @code{''} ou @code{,,} ajouteront une octave supplémentaire.
 
 @item
-Lorsque l'on entre en mode @code{\relative}, une hauteur absolue de
-départ peut être spécifiée, et agira dès lors comme si elle précédait la
-première note de @var{expression_musicale}.  Nous vous recommandons de
-faire référence à un do (@code{c}).
+La première hauteur de @code{@var{expression_musicale}} est
+déterminée relativement à @code{@var{hauteur_de_référence}}.
+Cette @code{@var{hauteur_de_référence}} s'exprime en octave
+absolue ; plusieurs options s'offrent à vous :
+
+@table @asis
+@item une octave de do (@code{c})
+Un @code{c'} identifiant le do placé entre les portées d'un piano,
+il est de fait aisé de déterminer d'autres octaves de @code{c}.
+Pour une musique qui commencerait par un sol dièse (@code{gis}) au
+dessus du do suraigu (@code{c'''}), vous écririez quelque chose
+comme @code{\relative c''' @{ gis' @dots{} @}}
+
+@item une octave de la première note de l'expression
+Écrire @code{\relative gis''' @{ gis @dots{} @}} permet de
+déterminer facilement la hauteur absolue de la première note de
+l'expression.
+
+@item pas de hauteur de référence explicite
+Ceci (écrire @code{\relative @{ gis''' @dots{} @}}) peut se voir
+comme une version abrégée de l'option précédente : la première
+note de l'expression est écrite en octave absolue.  Cette option
+est équivalente à prendre un @code{f} comme hauteur de référence.
+@end table
 
+La documentation de LilyPond utilise en règle générale la première
+option.
 @end itemize
 
 Voici le mode @code{\relative} en action.
@@ -365,7 +402,7 @@ cis cis cis! cis? c c c! c?
 Lorsqu'une note est prolongée par une liaison de tenue, l'altération ne
 sera réimprimée que s'il y a un saut de ligne.
 
-@lilypond[verbatim,quote,relative=2]
+@lilypond[verbatim,quote,relative=2,ragged-right]
 cis1 ~ cis ~
 \break
 cis
@@ -449,9 +486,9 @@ sont les suivants :
   @tab c d e f g a b h
 @item @code{english}
   @tab c d e f g a bf b
-@item @code{espanol}
+@item @code{espanol} ou @code{español}
   @tab do re mi fa sol la sib si
-@item @code{italiano}
+@item @code{italiano} ou @code{français}
   @tab do re mi fa sol la sib si
 @item @code{norsk}
   @tab c d e f g a b h
@@ -482,9 +519,9 @@ et les suffixes d'altération correspondants :
 @item @code{english}
   @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp
     @tab -ff/-flatflat
-@item @code{espanol}
+@item @code{espanol} ou @code{español}
   @tab -s @tab -b @tab -ss/-x @tab -bb
-@item @code{italiano}
+@item @code{italiano} ou @code{français}
   @tab -d @tab -b @tab -dd @tab -bb
 @item @code{norsk}
   @tab -iss/-is @tab -ess/-es @tab -ississ/-isis
@@ -1089,6 +1126,8 @@ c2 c
 @cindex transposition et clef
 @cindex clef et transposition
 @cindex octave et clef
+@cindex octaviation optionnelle
+@cindex opotionnelle, octaviation
 @cindex chorale, clef de ténor
 @cindex ténor, clef
 
@@ -1114,6 +1153,19 @@ c2 c
 c2 c
 @end lilypond
 
+Une indication d'octaviation optionnelle s'obtient en entourant
+l'argument numérique par des parenthèses ou des crochets :
+
+@lilypond[verbatim,quote,relative=1]
+\clef "treble_(8)"
+c2 c
+\clef "bass^[15]"
+c2 c
+@end lilypond
+
+Les hauteurs seront affichées comme si l'argument numérique
+n'avait pas été encadré de parenthèses ou crochets.
+
 Il existe d'autres clefs, destinées à un usage particulier.  Voir à ce
 sujet @ref{Notations anciennes}, @ref{Clefs anciennes},
 @ref{Clefs grégoriennes}, @ref{Tablatures par défaut} et
@@ -1141,9 +1193,24 @@ Morceaux choisis:
 Référence des propriétés internes :
 @rinternals{Clef_engraver},
 @rinternals{Clef},
-@rinternals{OctavateEight},
+@rinternals{ClefModifier},
 @rinternals{clef-interface}.
 
+@knownissues
+L'indicateur d'octaviation attaché à la clef est un objet graphique en
+lui même.  Par voie de conséquence, tout @code{\override} affectant
+l'objet @code{Clef} devra être manuellement répercuté sur l'objet
+@code{ClefModifier}.
+
+@lilypond[fragment,quote,relative=1]
+\new Staff \with {
+  \override ClefModifier.color = #red
+  \override Clef.color = #blue
+}
+
+\clef "treble_8" c4
+@end lilypond
+
 
 @node Armure
 @unnumberedsubsubsec Armure
@@ -1219,6 +1286,39 @@ f
 fis
 @end lilypond
 
+Rien n'empèche de définir d'autres modes, en listant l'altération
+de chacun des degrés de la gamme en partant du do.
+
+@lilypond[verbatim,quote]
+freygish = #`((0 . ,NATURAL) (1 . ,FLAT) (2 . ,NATURAL)
+    (3 . ,NATURAL) (4 . ,NATURAL) (5 . ,FLAT) (6 . ,FLAT))
+
+\relative c' {
+  \key c \freygish c4 des e f
+  \bar "||" \key d \freygish d es fis g
+}
+@end lilypond
+
+Les altérations à la clef peuvent s'imprimer à des octaves
+différents de leur position traditionnelle ou à plusieurs octaves,
+à l'aide des propriétés @code{flat-positions} et
+@code{sharp-positions} de l'objet @code{KeySignature}.  Les
+entrées fourniees à ces propriétés définissent l'amplitude des
+positions sur la portée où les altérations seront imprimées.  Dans
+le cas où l'entrée est constituée d'une position unique, les
+altérations seront placées à l'intérieur de l'octave finissant à
+cette position sur la portée.
+
+@lilypond[verbatim, quote,relative=0]
+\override Staff.KeySignature.flat-positions = #'((-5 . 5))
+\override Staff.KeyCancellation.flat-positions = #'((-5 . 5))
+\clef bass \key es \major es g bes d
+\clef treble \bar "||" \key es \major es g bes d
+
+\override Staff.KeySignature.sharp-positions = #'(2)
+\bar "||" \key b \major b fis b2
+@end lilypond
 @snippets
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly}
@@ -1243,7 +1343,6 @@ Référence des propriétés internes :
 @rinternals{Key_performer},
 @rinternals{KeyCancellation},
 @rinternals{KeySignature},
-@rinternals{key-cancellation-interface},
 @rinternals{key-signature-interface}.
 
 
@@ -1283,6 +1382,9 @@ a2 b
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {ottava-text.ly}
 
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{adding-an-ottava-marking-to-a-single-voice.ly}
+
 @seealso
 Glossaire musicologique :
 @rglosnamed{octavation,octaviation}.
@@ -1363,18 +1465,31 @@ La @code{\transposition} peut évoluer au cours d'un morceau.  Un
 clarinettiste peut être amené à jongler avec une clarinette en la et
 une autre en si bémol.
 
-@lilypond[verbatim,quote,relative=2]
-\set Staff.instrumentName = #"Cl (A)"
-\key a \major
-\transposition a
-c d e f
-\textLengthOn
-<>^\markup { Switch to B\flat clarinet }
-R1
-
-\key bes \major
-\transposition bes
-c2 g
+@lilypond[verbatim,quote,]
+flute = \relative c'' {
+  \key f \major
+  \cueDuring #"clarinet" #DOWN {
+    R1 _\markup\tiny "clarinet"
+    c4 f e d
+    R1 _\markup\tiny "clarinet"
+  }
+}
+clarinet = \relative c'' {
+  \key aes \major
+  \transposition a
+  aes4 bes c des
+  R1^\markup { muta in B\flat }
+  \key g \major
+  \transposition bes
+  d2 g,
+}
+\addQuote "clarinet" \clarinet
+<<
+  \new Staff \with { instrumentName = #"Flute" }
+    \flute
+  \new Staff \with { instrumentName = #"Cl (A)" }
+    \clarinet
+>>
 @end lilypond
 
 @seealso
@@ -1411,7 +1526,7 @@ suivante :
 
 @example
 \new Staff <<
-  \accidentalStyle "voice"
+  \accidentalStyle voice
   @{ @dots{} @}
 >>
 @end example
@@ -1425,7 +1540,7 @@ utiliser, pour que toutes les portées d'un même système -- contexte
 @code{StaffGroup} -- soient soumises à la même règle :
 
 @example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
 @end example
 
 Nous vous présentons ci-après les différentes règles d'altération prises
@@ -1468,11 +1583,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1487,7 +1602,7 @@ dernières lignes de cet exemple nous intéressent.
   <<
     \context Staff = "haut" @{
       %%% voici la ligne à modifier en conséquence :
-      \accidentalStyle #'Score "default"
+      \accidentalStyle Score.default
       \musicA
     @}
     \context Staff = "bas" @{
@@ -1549,11 +1664,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1621,11 +1736,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicB
     }
   >>
@@ -1685,11 +1800,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicB
     }
   >>
@@ -1747,11 +1862,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicB
     }
   >>
@@ -1814,11 +1929,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicB
     }
   >>
@@ -1874,11 +1989,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicB
     }
   >>
@@ -1937,7 +2052,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano"
+      \accidentalStyle piano
       \musicA
     }
     \context Staff = "down" {
@@ -1994,7 +2109,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano-cautionary"
+      \accidentalStyle piano-cautionary
       \musicA
     }
     \context Staff = "down" {
@@ -2052,11 +2167,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicB
     }
   >>
@@ -2109,11 +2224,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicB
     }
   >>
@@ -2172,11 +2287,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicB
     }
   >>
@@ -2227,11 +2342,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicB
     }
   >>
@@ -2286,11 +2401,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicB
     }
   >>
@@ -2348,12 +2463,12 @@ musicB = {
   <<
     \context Staff = "up" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicA
     }
     \context Staff = "down" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicB
     }
   >>
@@ -2406,11 +2521,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicB
     }
   >>
@@ -2465,11 +2580,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicB
     }
   >>
@@ -2516,7 +2631,7 @@ la seconde alternative ne nécessite pas son bécarre.
 
 @lilypond[quote]
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2533,12 +2648,12 @@ L'astuce suivante, qui définit temporairement le recours au style
 
 @lilypond[verbatim,quote]
 forget = #(define-music-function (parser location music) (ly:music?) #{
-  \accidentalStyle "forget"
+  \accidentalStyle forget
   #music
-  \accidentalStyle "modern"
+  \accidentalStyle modern
 #})
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2648,13 +2763,13 @@ L'apparence des têtes de note peut évoluer au cours de la partition :
 
 @lilypond[verbatim,quote,relative=2]
 c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
 c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
 a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
 a b
-\revert NoteHead #'style
+\revert NoteHead.style
 c4 d e f
 @end lilypond
 
@@ -2687,11 +2802,10 @@ Vous pouvez utiliser, en lieu et place de @code{\xNote},
 @code{\xNotesOn} et @code{\xNotesOff}, les commandes
 @code{\deadNote}, @code{\deadNotesOn} et @code{\deadNotesOff}.
 
-Il existe un raccourci pour les notes en losange qui indiquent les
-harmoniques des cordes :
+Il existe un raccourci pour les notes en losange :
 
 @lilypond[verbatim,quote,relative=2]
-<c f\harmonic>2 <d a'\harmonic>4 <c g'\harmonic>
+<c f\harmonic>2 <d a'\harmonic>4 <c g'\harmonic> f\harmonic
 @end lilypond
 
 @predefined
@@ -2933,11 +3047,3 @@ Référence des propriétés internes :
 @rinternals{Pitch_squash_engraver},
 @rinternals{Voice},
 @rinternals{RhythmicStaff}.
-
-
-@c  LocalWords:  lilypondfile subsection translationof seealso funindex
-@c  LocalWords:  unnumberedsubsubsec rglosnamed rlsrnamed itemize quote
-@c  LocalWords:  rinternals rlearning snippets texidoc doctitle
-@c  LocalWords:  ragged-right knownissues quotation multitable headitem
-@c  LocalWords:  noindent Staff.instrumentName Staff.midiInstrument
-@c  LocalWords:  accidentalStyle PianoStaff GrandStaff predefined
index 684a05d4bbac57ad0b3c41c7fd1c4db14a5d5bea..4952a258e77e02ea6755738f3852f05b41c1ab50 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: 049bdd90b5ae67fe463bf85e926c2eabf51acf74
+    Translation of GIT committish: b7cb11ea159572f2dc55b405db01a06c4dccea7d
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: Jean-Charles Malahieude, John Mandereau
@@ -223,11 +223,11 @@ au début de chaque alternative à l'exception de la première.
 \alternative {
   {
     f2 d |
-    \set Timing.measureLength = #(ly:make-moment 3 4)
+    \set Timing.measureLength = #(ly:make-moment 3/4)
     g4 g g  % optional bar check is allowed here
   }
   {
-    \set Timing.measureLength = #(ly:make-moment 4 4)
+    \set Timing.measureLength = #(ly:make-moment 4/4)
     a2 a |
   }
 }
@@ -298,6 +298,7 @@ Glossaire musicologique :
 Manuel de notation :
 @ref{Barres de mesure},
 @ref{Modification des greffons de contexte},
+@ref{Modification des liaisons},
 @ref{Gestion du temps}.
 
 Morceaux choisis :
@@ -314,14 +315,32 @@ Référence des propriétés internes :
 @cindex reprises imbriquées
 @cindex imbrication de reprises
 @cindex numéro de mesure et reprises
-@cindex reprise et liaison
-@cindex liaison et reprise
+@cindex reprises et liaison
+@cindex liaison et reprises
+@cindex glissando et reprises
+@cindex reprises et glissando
 
 L'extension d'une liaison à partir d'un bloc @code{\repeat} sur un bloc
 @code{\alternative} n'est possible que pour la première alternative.
+L'aspect visuel d'une liaison se continuant dans les autres
+alternatives, peut être simulée à l'aide de la commande
+@code{\repeatTie} lorsqu'elle s'arrête sur sa première note --
+méthode qui cependant ne fonctionne pas pour un @code{TabStaff}.
+D'autres moyens existent pour indiquer la prolongation d'une
+liaison sur des alternatives, y compris dans un @code{TabStaff},
+en suivant les préceptes donnés à la rubrique
+@ref{Modification des liaisons}.
+
 Selon le même principe, une liaison ne saurait partir de la fin d'une
 alternative pour se terminer au début de la reprise.
 
+L'extension d'un glissando à partir d'un bloc @code{\repeat} sur
+un bloc @code{\alternative} n'est possible que pour la première
+alternative.  L'aspect visuel d'un glissando se continuant dans
+les autres alternatives peut être simulé à l'aide d'un glissando
+partant d'une note d'ornement supplémentaire et masquée.  Un
+exemple se trouve à la rubrique @ref{Glissando}.
+
 Le développement, à l'aide de la commande @code{\unfoldRepeats}, d'une
 répétition qui commence sur une mesure incomplète et contient un bloc
 @code{alternative} avec modification de la propriété
@@ -366,7 +385,7 @@ reprises.  On la définit par une suite de commandes de reprise Scheme.
 
 @table @code
 @item start-repeat
-Pour imprimer une barre de reprise @code{|:}
+Pour imprimer une barre de reprise @code{.|:}
 
 @lilypond[verbatim,quote,relative=2]
 c1
@@ -379,7 +398,7 @@ Traditionnellement, on n'imprime pas de signe de reprise en début de
 morceau.
 
 @item end-repeat
-Pour imprimer une barre de reprise @code{:|}
+Pour imprimer une barre de reprise @code{:|.}
 
 @lilypond[verbatim,quote,relative=2]
 c1
@@ -640,7 +659,7 @@ différentes sont remplacées par un double symbole de pourcentage.
 
 @lilypond[verbatim,quote,relative=2]
 \repeat percent 4 { c8. <d f>16 }
-\repeat percent 2 { \times 2/3 { r8 c d } e4 }
+\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 }
 @end lilypond
 
 @snippets
index 4af7fb85cc77d9270c06786109cc6f3d8a4611af..d007c5194be2e5b5ac929d7165f94d097a652121 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: 95b372c451ea1586db8db66d3d00334382e8e103
+    Translation of GIT committish: e038863ba7228eb3e28b9f1a49e68ec9f4d260b0
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Frédéric Chiasson, Jean-Charles Malahieude
 @c Translation checkers: Valentin Villenave, François Martin, Xavier Scheuer
@@ -77,7 +77,6 @@ c\longa c\breve c1 c2
 c4 c8 c16 c32 c64 c128 c128
 @end lilypond
 
-@noindent
 Voici ces mêmes durées sans la fonction de ligature automatique.
 
 @c not strictly "writing rhythms"; more of a "displaying" thing,
@@ -155,7 +154,7 @@ chapitre @ref{Direction et positionnement}.
 
 @snippets
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
-{alternative-breve-note.ly}
+{alternative-breve-notes.ly}
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {changing-the-number-of-augmentation-dots-per-note.ly}
@@ -213,17 +212,29 @@ fraction.
 
 @noindent
 La durée de l'@code{@var{expression_musicale}} sera multipliée par la
-fraction.  Le dénominateur de cette fraction sera imprimé au-dessus ou
+fraction.  Le numérateur de cette fraction sera imprimé au-dessus ou
 au-dessous des notes, parfois avec un crochet.  Le nolet le plus courant
-est le triolet, dans lequel trois notes ont la durée de deux, et où les
-notes durent donc deux tiers de leur valeur écrite.
+est le triolet, dans lequel trois notes occupent la durée de deux.
 
 @lilypond[quote,verbatim,relative=2]
-a2 \times 2/3 { b4 b b }
-c4 c \times 2/3 { b4 a g }
+a2 \tuplet 3/2 { b4 b b }
+c4 c \tuplet 3/2 { b4 a g }
+@end lilypond
+
+@cindex regroupement de nolets
+@noindent
+Dans le cas d'une succession de nolets, saisir la commande
+@code{\tuplet} popur chacun des nolets devient vite fastidieux.
+LilyPond vous permet de stipuler la durée de base d'un nolet juste
+avant l'expression musicale, de telle sorte que les nolets seront
+formés automatiquement :
+
+@lilypond[quote,verbatim,relative=2]
+g2 r8 \tuplet 3/2 8 { cis16 d e e f g g f e }
 @end lilypond
 
 @cindex crochet de nolet, positionnement
+@cindex nolet, positionnement du crochet
 
 @funindex \tupletUp
 @funindex tupletUp
@@ -240,7 +251,7 @@ Les nolets peuvent être imbriqués ; par exemple,
 
 @lilypond[quote,verbatim,relative=2]
 \autoBeamOff
-c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 |
+c4 \tuplet 5/4 { f8 e f \tuplet 3/2 { e[ f g] } } f4 |
 @end lilypond
 
 Lorsque, dans une imbrication, les nolets débutent au même instant, il
@@ -309,7 +320,7 @@ Références des propriétés internes :
 
 @knownissues
 Lorsqu'un nolet en début de portée est précédé d'une note d'ornement,
-celle-ci doit se placer avant la commande @code{\times} pour éviter
+celle-ci doit se placer avant la commande @code{\tuplet} pour éviter
 toute erreur.  Ailleurs dans la partition, les notes d'ornement peuvent
 se placer au sein de l'expression constituant le nolet.
 
@@ -399,6 +410,15 @@ Manuel de notation :
 Morceaux choisis :
 @rlsrnamed{Rhythms,Rythme}.
 
+@knownissues
+Le calcul de la position au sein d'une mesure doit prendre en
+considération tous les facteurs d'échelonnement appliqués aux
+notes de cette mesure ainsi que tous les reliquats des mesures
+précédentes.  Ce calcul utilise des nombres rationnels.  Dès lors
+qu'un calcul recontrera un numérateur ou dénominateur
+intermédiaire d'une valeur supérieure à 2^30, LilyPond s'arrêtera
+à ce point précis sans pour autant signaler d'erreur.
+
 
 @node Liaisons de prolongation
 @unnumberedsubsubsec Liaisons de prolongation
@@ -416,10 +436,14 @@ liaison d'@strong{articulation} ou de @strong{phrasé}.  Une liaison de
 tenue est un moyen parmi d'autres pour prolonger la durée d'une note,
 tout comme les points.}
 
-Une liaison de tenue s'indique au moyen d'un tilde @code{~}.
+
+Une liaison de tenue s'indique au moyen d'un tilde (@code{~}) qui
+vient s'adjoindre à la première note de chacune des paires de
+notes à lier.  Ceci indique que la note en question sera liée à la
+suivante, qui doit être de la même hauteur.
 
 @lilypond[quote,verbatim,relative=2]
-a2 ~ a
+a2~ a4~ a16 r r8
 @end lilypond
 
 Les liaisons de tenue sont utilisées soit lorsque la note dépasse de la
@@ -429,9 +453,9 @@ longues doivent s'aligner sur les subdivisions de la mesure, comme ici :
 
 @c KEEP LY
 @lilypond[verbatim,quote]
-\relative {
-  r8^"oui" c8 ~ c2 r4 |
-  r8^"non" c2 ~ c8 r4
+\relative c' {
+  r8^"oui" c8~ c2 r4 |
+  r8^"non" c2~ c8 r4
 }
 @end lilypond
 
@@ -451,7 +475,7 @@ partiellement deux accords, en mettant les liaisons à l'intérieur des
 accords.
 
 @lilypond[quote,verbatim,relative=1]
-<c e g> ~ <c e g>
+<c e g>~ <c e g>
 <c~ e g~ b> <c e g b>
 @end lilypond
 
@@ -467,7 +491,7 @@ Lorsqu'une mesure @qq{de seconde fois} après une reprise commence sur
 une note liée, la liaison doit être répétée, comme ici :
 
 @lilypond[quote,relative=2,verbatim]
-\repeat volta 2 { c g <c e>2 ~ }
+\repeat volta 2 { c g <c e>2~ }
 \alternative {
   % First alternative: following note is tied normally
   { <c e>2. r4 }
@@ -481,7 +505,7 @@ une note liée, la liaison doit être répétée, comme ici :
 @funindex \laissezVibrer
 @funindex laissezVibrer
 
-Les liaisons @qq{Laissez vibrer} (@notation{L.v.}) sont utilisées pour
+Les liaisons « Laissez vibrer » (@notation{L.v.}) sont utilisées pour
 le piano, la harpe et certains instruments de percussion.  Elles
 indiquent à l'instrumentiste de laisser sonner la note ou l'accord au
 lieu de l'étouffer.  Elles s'indiquent de la manière suivante :
@@ -500,7 +524,7 @@ lieu de l'étouffer.  Elles s'indiquent de la manière suivante :
 @funindex tieNeutral
 
 Le positionnement vertical des liaisons de prolongation peut être affiné
--- voir à ce sujet les @qq{commandes prédéfinies} et, pour de plus
+-- voir à ce sujet les « commandes prédéfinies » et, pour de plus
 amples détails, @ref{Direction et positionnement}.
 
 @cindex liaison de prolongation, apparence
@@ -519,26 +543,26 @@ continue, discontinue ou pointillée.
 
 @lilypond[quote, verbatim, relative=1]
 \tieDotted
-c2 ~ c
+c2~ c
 \tieDashed
-c2 ~ c
+c2~ c
 \tieHalfDashed
-c2 ~ c
+c2~ c
 \tieHalfSolid
-c2 ~ c
+c2~ c
 \tieSolid
-c2 ~ c
+c2~ c
 @end lilypond
 
 Il est même possible d'en personnaliser l'allure :
 
 @lilypond[quote, verbatim, relative=1]
 \tieDashPattern #0.3 #0.75
-c2 ~ c
+c2~ c
 \tieDashPattern #0.7 #1.5
-c2 ~ c
+c2~ c
 \tieSolid
-c2 ~ c
+c2~ c
 @end lilypond
 
 Que ce soit pour une tenue ou un phrasé, le motif d'une ligne
@@ -551,11 +575,11 @@ portée, une adaptation des propriétés @var{whiteout} et @var{layer}
 permet d'obtenir une meilleure lisibilité.
 
 @lilypond[verbatim,quote,ragged-right,relative=2]
-\override Tie #'layer = #-2
-\override Staff.TimeSignature #'layer = #-1
-\override Staff.KeySignature #'layer = #-1
-\override Staff.TimeSignature #'whiteout = ##t
-\override Staff.KeySignature #'whiteout = ##t
+\override Tie.layer = #-2
+\override Staff.TimeSignature.layer = #-1
+\override Staff.KeySignature.layer = #-1
+\override Staff.TimeSignature.whiteout = ##t
+\override Staff.KeySignature.whiteout = ##t
 b2 b~
 \time 3/4
 \key a \major
@@ -604,9 +628,9 @@ Référence des propriétés internes :
 Un changement de portée, lorsqu'une liaison de tenue est active, ne
 peut produire une liaison oblique.
 
-Un changement de clé ou d'octave pendant une liaison de tenue produit un
-résultat indéfini.  Dans ces cas là, il est préférable d'utiliser un
-@emph{legato}.
+Un changement de clef ou d'octave pendant une liaison de tenue
+produit un résultat indéfini.  Dans ces cas là, il est préférable
+d'utiliser un @emph{legato}.
 
 
 @node Écriture des silences
@@ -651,7 +675,7 @@ s'indiquent à l'aide de commandes prédéfinies :
 \new Staff {
   % These two lines are just to prettify this example
   \time 16/1
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   % Print a maxima rest, equal to four breves
   r\maxima
   % Print a longa rest, equal to two breves
@@ -865,7 +889,7 @@ R1*2 |
 @funindex \compressFullBarRests
 @funindex compressFullBarRests
 
-Par défaut, un silence multimesures sera répété sur autant de mesures
+Par défaut, un silence multimesure sera répété sur autant de mesures
 que nécessaire.  Il peut aussi n'être imprimé qu'une seule fois,
 surplombé du nombre de mesures vides -- ou @qq{à compter} :
 
@@ -896,7 +920,7 @@ R2.*2 |
 @funindex fermataMarkup
 @funindex MultiMeasureRestText
 
-Vous pouvez aussi ajouter du texte à un silence multimesures en
+Vous pouvez aussi ajouter du texte à un silence multimesure en
 utilisant la syntaxe @w{@var{note}-@code{markup}} (cf.
 @ref{Mise en forme du texte}).  La variable @code{\fermataMarkup} quant
 à elle permet d'ajouter un point d'orgue :
@@ -916,14 +940,14 @@ dans l'exemple suivant.}
 @c KEEP LY
 @lilypond[quote,verbatim,relative=2]
 % Ceci échouera : il y a erreur quant à l'objet spécifié
-\override TextScript #'padding = #5
+\override TextScript.padding = #5
 R1^"pas bon !"
 % Formulation correcte, qui fonctionnera
-\override MultiMeasureRestText #'padding = #5
+\override MultiMeasureRestText.padding = #5
 R1^"ça marche !"
 @end lilypond
 
-Un silence multimesures placé directement après une commande
+Un silence multimesure placé directement après une commande
 @code{\partial} risque fort de perturber le vérificateur de limites et
 numéros de mesure.
 
@@ -985,7 +1009,7 @@ Référence des propriétés internes :
 @cindex silences multimesure et doigtés
 
 @knownissues
-Vous ne pouvez pas utiliser de doigtés (par  ex. @code{R1*10-4}) pour
+Vous ne pouvez pas utiliser de doigtés (par ex. @code{R1*10-4}) pour
 positionner des nombres au dessus d'un silence multimesure, le numéro
 de doigt (4) risquant de chevaucher le nombre de mesures à compter (10).
 
@@ -1155,38 +1179,6 @@ comme indiqué à la rubrique
 @ref{Définition des règles de ligature automatique}.
 @end enumerate
 
-Le contexte auquel doivent s'appliquer les dérogations introduites par
-un @code{\overrideTimeSignatureSettings} doit exister avant l'appel de
-ces réglages.  Autrement dit, vous devrez explicitement mentionner le
-contexte avant que ne survienne l'appel à
-@code{\overrideTimeSignatureSettings} s'il n'y a pas déjà d'élément
-musical.
-
-@lilypond[quote,verbatim]
-\score {
-  \relative c' {
-    % This call will fail because the context isn't yet instantiated
-    \overrideTimeSignatureSettings
-      4/4        % timeSignatureFraction
-      1/4        % baseMomentFraction
-      #'(3 1)    % beatStructure
-      #'()       % beamExceptions
-    \time 4/4
-    c8^\markup {"Beamed (2 2)"}
-    \repeat unfold 7 { c8 } |
-    % This call will succeed
-    \overrideTimeSignatureSettings
-      4/4        % timeSignatureFraction
-      1/4        % baseMomentFraction
-      #'(3 1)    % beatStructure
-      #'()       % beamExceptions
-    \time 4/4
-    c8^\markup {"Beamed (3 1)"}
-    \repeat unfold 7 { c8 } |
-  }
-}
-@end lilypond
-
 @cindex métrique, retour au propriétés par défaut
 @cindex retour au propriétés par défaut de la métrique
 @funindex \revertTimeSignatureSettings
@@ -1310,7 +1302,7 @@ Lorsque le réglage précis du métronome est laissé à l'appréciation de
 l'exécutant, vous pouvez cependant lui fournir une plage :
 
 @lilypond[verbatim,quote,relative=1]
-\tempo 4 = 40 ~ 46
+\tempo 4 = 40 - 46
 c4. e8 a4 g
 b,2 d4 r
 @end lilypond
@@ -1348,6 +1340,32 @@ parenthèses l'indication numérique :
 d4 g e c
 @end lilypond
 
+@funindex \markLengthOn
+@funindex markLengthOn
+@funindex \markLengthOff
+@funindex markLengthOff
+
+Dans le cas d'une partie où l'instrumentiste a de longs moments de
+silence, les indications de tempo peuvent être fort rapprochées
+l'une de l'autre.  L'instruction @code{\markLengthOn} permet de
+préserver suffisamment d'espace horizontal de telle sorte que ces
+indications ne se chevauchent ; l'instruction
+@code{\markLengthOff} restaure le comportement par défaut qui
+ignore les indications de tempo dans les calculs d'espacement
+horizontal.
+
+@lilypond[verbatim,quote,relative=0]
+\compressFullBarRests
+\markLengthOn
+\tempo "Molto vivace"
+R1*12
+\tempo "Meno mosso"
+R1*16
+\markLengthOff
+\tempo "Tranquillo"
+R1*20
+@end lilypond
+
 @snippets
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {printing-metronome-and-rehearsal-marks-below-the-staff.ly}
@@ -1424,22 +1442,23 @@ r4 e8 | a4 c8 b c4 |
 Cette commande @code{\partial @var{durée}} peut aussi s'écrire :
 
 @example
-\set Timing.measurePosition -@var{durée}
+\set Timing.measurePosition -@var{durée}
 @end example
 
-De fait, @code{\partial 8*3} équivaut à :
+De fait, le premier exemple pourrait s'écrire :
 
 @lilypond[quote,verbatim,relative=1]
 \time 3/4
-\set Timing.measurePosition = #(ly:make-moment -1 8)
+\set Timing.measurePosition = #(ly:make-moment -1/8)
 e8 | a4 c8 b c4 |
 @end lilypond
 
-La propriété @code{measurePosition} contient un nombre rationnel qui
-indique, à ce point précis, où l'on en est de la mesure.  Notez qu'il
-s'agit du résultat d'une soustraction ; @code{\partial 4}
-signifie, pour le programme : @qq{Dans cette mesure, il reste juste
-une noire}.
+La propriété @code{measurePosition} contient un nombre rationnel
+généralement positif et qui indique, à ce point précis, où l'on en
+est de la mesure.  La commande @code{\partial @var{durée}} le
+transforme en nombre négatif pour lui attribuer un autre sens : la
+mesure courante (la première) est précédée d'une mesure 0
+(l'anacrouse) dont la longueur est donnée par @var{durée}.
 
 @seealso
 Glossaire musicologique :
@@ -1465,7 +1484,7 @@ s'afficher, voire des problèmes inopinés surgir.  Utilisez plutôt
 \time 6/8
 \partial 8
 e8 | a4 c8 b[ c b] |
-\set Timing.measurePosition = #(ly:make-moment -1 4)
+\set Timing.measurePosition = #(ly:make-moment -1/4)
 r8 e,8 | a4 c8 b[ c b] |
 @end lilypond
 
@@ -1510,7 +1529,7 @@ La numérotation reprend dès la fin d'une cadence.
 
 @lilypond[verbatim,relative=2,quote]
 % Show all bar numbers
-\override Score.BarNumber #'break-visibility = #all-visible
+\override Score.BarNumber.break-visibility = #all-visible
 c4 d e d
 \cadenzaOn
 c4 c d8[ d d] f4 g4.
@@ -1521,14 +1540,20 @@ d4 e d c
 
 Une cadence représente un fragment détaché de la notion de mesure, en
 dépit des différentes commandes @code{\bar} qu'il pourra comporter.
-Ceci a pour conséquence que toute altération supplémentaire par rapport
-à l'armure devra être rappelée manuellement -- voir @ref{Altérations}.
+L'insertion d'une commande @code{\bar} dans une cadence n'entame
+pas de nouvelle mesure, même si une barre est imprimée.  Ceci a
+pour conséquence que toute altération supplémentaire par rapport à
+l'armure -- normalement en vigueur jusqu'à la fin de la mesure --
+sera valide même après une barre insérée grâce à une instruction
+@code{\bar}.  Toute altération ultérieure devra donc être rappelée
+manuellement -- voir @ref{Altérations}.
 
 @lilypond[verbatim,relative=2,quote]
 c4 d e d
 \cadenzaOn
 cis4 d cis d
 \bar "|"
+% First cis is printed without alteration even if it's after a \bar
 cis4 d cis! d
 \cadenzaOff
 \bar "|"
@@ -1592,21 +1617,6 @@ où des sauts de ligne peuvent prendre place :
 \bar ""
 @end example
 
-Au risque d'obtenir des messages d'erreur inhabituels, il est fortement
-recommandé de créer explicitement un contexte @code{Voice} lorsqu'un
-morceau débute par un @code{\cadenzaOn}.
-
-@example
-\new Voice @{
-  \relative c' @{
-    \cadenzaOn
-    c16[^"Solo Free Time" d e f] g2.
-    \bar "||"
-    \cadenzaOff
-  @}
-@}
-@end example
-
 
 @node Notation polymétrique
 @unnumberedsubsubsec Notation polymétrique
@@ -1624,8 +1634,8 @@ morceau débute par un @code{\cadenzaOn}.
 @funindex timeSignatureFraction
 @funindex \scaleDurations
 @funindex scaleDurations
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
 
 LilyPond gère les métriques composites, aussi bien de manière explicite
 que de manière détournée -- modification de l'indicateur de métrique
@@ -1671,7 +1681,7 @@ les règles de ligature automatique.
     \scaleDurations 3/5 {
       \repeat unfold 2 { c8[ c c] }
       \repeat unfold 2 { c8[ c] } |
-      c4. c \times 2/3 { c8[ c c] } c4
+      c4. c \tuplet 3/2 { c8[ c c] } c4
     }
   }
 >>
@@ -1808,8 +1818,8 @@ fausser l'espacement régulier entre les différentes portées.
 
 On peut convertir automatiquement les notes longues en notes liées.  Il
 suffit pour cela de remplacer le graveur @code{Note_heads_engraver}
-par le graveur @code{Completion_heads_engraver}.  Il en va de la même
-manière pour des silences ; le @code{Completion_rest_engraver} devra
+par le graveur @code{Completion_heads_engraver}.  Il en va de même
+pour des silences ; le @code{Completion_rest_engraver} devra
 alors remplacer le @code{Rest_engraver}.  Dans l'exemple suivant, les
 notes ou silences qui dépassent de la mesure sont divisés et au besoin
 liés.
@@ -2060,7 +2070,7 @@ terminaison ne sera prise en compte qu'à l'occasion de la
 @unnumberedsubsubsec Définition des règles de ligature automatique
 @translationof Setting automatic beam behavior
 
-@cindex ligatures te paroles
+@cindex ligatures et paroles
 @cindex paroles et ligatures
 
 @funindex autoBeaming
@@ -2081,14 +2091,20 @@ ci-après, ou bien carrément être modifiées -- voir @ref{Métrique}.
 
 Dès lors qu'une règle affectant @code{beamExceptions} est définie pour
 la métrique en vigueur, c'est cette règle qui servira à déterminer le
-placement des ligatures.  En l'absence de règle affectant
-@code{beamExceptions} pour la métrique en vigueur, les ligatures seront
-déterminées par les réglages conjoints de @code{baseMoment} et
+placement des ligatures, ignorant les valeurs de @code{baseMoment} et
 @code{beatStructure}.
 
-@code{beamExceptions} dispose par défaut de règles pour les métriques le
-plus courantes ; il est donc impératif de les invalider pour gérer les
-ligatures automatiques à l'aide de @code{baseMoment} et
+En l'absence de règle affectant @code{beamExceptions} pour la métrique
+en vigueur, les ligatures seront déterminées par les réglages conjoints
+de @code{baseMoment} et @code{beatStructure}.
+
+
+@subsubsubheading Ligature basée sur @code{baseMoment} et @code{beatStructure}
+@c VO Beaming based on @code{baseMoment} and @code{beatStructure}
+
+@code{beamExceptions} dispose par défaut de règles pour les métriques
+les plus courantes ; il est donc impératif de les invalider pour gérer
+les ligatures automatiques à l'aide de @code{baseMoment} et
 @code{beatStructure}.  Les règles de @code{beamExceptions} se
 désactivent par un
 
@@ -2096,44 +2112,36 @@ désactivent par un
 \set Timing.beamExceptions = #'()
 @end example
 
-
-@subsubsubheading @i{Ligature basée sur @code{baseMoment} et @code{beatStructure}}
-@c VO Beaming based on baseMoment and beatStructure
-
-Dans la plupart des cas, une ligature automatique se termine à la fin
-d'une pulsation.  Ce sont les propriétés de contexte @code{baseMoment}
-et @code{beatStructure} qui détermineront là où prend fin la pulsation.
-La propriété @code{beatStructure} est constituée d'une liste d'éléments
-Scheme qui définit la longueur de chaque pulsation, prenant
-@code{baseMoment} comme unité.  L'unité de base (le @code{baseMoment})
-correspond par défaut à l'inverse du dénominateur de la métrique.
-D'autre part, chaque unité de @code{baseMoment} constitue une seule
-pulsation.
+Lorsque @code{beamExceptions} est défini à @code{#'()}, que ce soit
+explicitement ou en raison de l'absence de règles par défaut de
+@code{beamExceptions} pour la métrique en vigueur, la terminaison des
+ligatures est directement liée à la pulsation telle que spécifiée par
+les propriétés @code{baseMoment} et @code{beatStructure}.  La propriété
+@code{beatStructure} est constituée d'une liste d'éléments Scheme qui
+définit la longueur de chaque pulsation, prenant @code{baseMoment} comme
+unité.  L'unité de base (le @code{baseMoment}) correspond par défaut à
+l'inverse du dénominateur de la métrique.  D'autre part, chaque unité de
+@code{baseMoment} constitue par défaut une seule pulsation.
 
 @lilypond[quote,relative=2,verbatim]
 \time 5/16
 c16^"default" c c c c |
+% beamExceptions are unlikely to be defined for 5/16 time,
+% but let's disable them anyway to be sure
+\set Timing.beamExceptions = #'()
 \set Timing.beatStructure = #'(2 3)
 c16^"(2+3)" c c c c |
 \set Timing.beatStructure = #'(3 2)
 c16^"(3+2)" c c c c |
 @end lilypond
 
-Dans le cas d'une mesure à 4/4, @code{beamExceptions} @strong{doit} être
-invalidé pour permettre à @code{beatStructure} de produire ses effets.
-La commande @code{\set Timing.beamExceptions = #'()} peut intervenir à
-tout moment, avant de déterminer les ligatures par @code{beatStructure}.
-
 @lilypond[quote,relative=2,verbatim]
 \time 4/4
 a8^"default" a a a a a a a
-
-\set Timing.baseMoment = #(ly:make-moment 1 4)
-\set Timing.beatStructure = #'(1 1 1 1)
-a8^"no change" a a a a a a a
-
+% Disable beamExceptions because they are definitely
+% defined for 4/4 time
 \set Timing.beamExceptions = #'()
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
 \set Timing.beatStructure = #'(1 1 1 1)
 a8^"changed" a a a a a a a
 @end lilypond
@@ -2146,6 +2154,8 @@ supérieur s'appliqueront.
 @lilypond[quote, verbatim,relative=1]
 \new Staff {
   \time 7/8
+  % No need to disable beamExceptions
+  % as they are not defined for 7/8 time
   \set Staff.beatStructure = #'(2 3 2)
   <<
     \new Voice = one {
@@ -2171,7 +2181,7 @@ ces règles affectent le contexte @code{Staff} :
 @lilypond[quote,verbatim,relative=2]
 \time 7/8
 % rhythm 3-1-1-2
-% Context Voice specified --  does not work correctly
+% Change applied to Voice by default --  does not work correctly
 % Because of autogenerated voices, all beating will
 % be at baseMoment (1 . 8)
 \set beatStructure = #'(3 1 1 2)
@@ -2189,7 +2199,9 @@ valeur de @code{baseMoment}.
 
 @lilypond[quote,verbatim,relative=2]
 \time 5/8
-\set Timing.baseMoment = #(ly:make-moment 1 16)
+% No need to disable beamExceptions
+% as they are not defined for 5/8 time
+\set Timing.baseMoment = #(ly:make-moment 1/16)
 \set Timing.beatStructure = #'(7 3)
 \repeat unfold 10 { a16 }
 @end lilypond
@@ -2213,7 +2225,7 @@ rangées par métrique et type de règle, sont répertoriées dans le
 fichier @file{scm/time-signature-settings.scm}.
 
 
-@subsubsubheading @i{Ligature basée sur @code{beamExceptions}}
+@subsubsubheading Ligature basée sur @code{beamExceptions}
 @c VO Beaming based on beamExceptions
 
 Les règles spécifiques autres que celles concernant la terminaison des
@@ -2224,11 +2236,11 @@ ligatures sont gérées par la propriété  @code{beamExceptions}.
 \time 3/16
 \set Timing.beatStructure = #'(2 1)
 \set Timing.beamExceptions =
-  #'(                         ;ouvre de la liste associative
-     (end .                   ;ceci concerne la terminaison des ligatures
-      (                       ;ouvre la liste des points de terminaison
-       ((1 . 32) . (2 2 2))   ;règle pour les triples -- groupées à la double
-      )))                     %referme la liste
+  #'(                       ;ouvre de la liste associative
+     (end .                 ;ceci concerne la terminaison des ligatures
+      (                     ;ouvre la liste des points de terminaison
+       ((1 . 32) . (2 2 2)) ;règle pour les triples -- groupées à la double
+      )))                   %referme la liste
 c16 c c |
 \repeat unfold 6 { c32 } |
 @end lilypond
@@ -2255,7 +2267,7 @@ par exemple @code{(1 . 16)} pour une double croche.
 @var{groupement} est constitué d'une liste Scheme qui indique le
 regroupement à effectuer, en unité de type de ligature.
 
-@warning{La propriété @code{beamExceptions} doit contenir absolument
+@warning{La propriété @code{beamExceptions} doit répertorier absolument
 @strong{toutes} les exceptions.  Il n'est en effet pas possible d'en
 ajouter, modifier ou supprimer @emph{a posteriori}.  Cela peut paraître
 fastidieux, mais toutes les règles de ligature devraient être appréciées
@@ -2292,7 +2304,7 @@ de cette dérogation.
 
 @lilypond[quote,verbatim,relative=2]
 \time 4/4
-\set Timing.baseMoment = #(ly:make-moment 1 8)
+\set Timing.baseMoment = #(ly:make-moment 1/8)
 \set Timing.beatStructure = #'(3 3 2)
 % This won't beam (3 3 2) because of beamExceptions
 \repeat unfold 8 {c8} |
@@ -2309,7 +2321,7 @@ la mesure par défaut.  Ligaturer sur le temps requiert un appel à
 \time 3/4
 % by default we beam in (6) due to beamExceptions
 \repeat unfold 6 {a8} |
-% This will beam (1 1 1) due to beatLength
+% This will beam (1 1 1) due to default baseMoment and beatStructure
 \set Timing.beamExceptions = #'()
 \repeat unfold 6 {a8}
 @end lilypond
@@ -2331,7 +2343,7 @@ r4. a8 a a |
 @end lilypond
 
 
-@subsubsubheading @i{@strong{Principes de la ligature automatique}}
+@subsubsubheading Principes de la ligature automatique
 @c VO How automatic beaming works
 
 Lorsqu'elle est activée, la gestion automatisée des ligatures est
@@ -2343,7 +2355,7 @@ s'appliquent dans l'ordre suivant de priorité :
 
 @itemize
 @item
-Une ligature explicite -- indiquée par @code{[@dots{}]} -- sera toujours
+une ligature explicite -- indiquée par @code{[@dots{}]} -- sera toujours
 respectée ; sinon
 
 @item
@@ -2421,8 +2433,8 @@ pareil cas, est de spécifier manuellement les dernières ligatures.
 
 Le traducteur @code{Timing} est par défaut affecté au contexte
 @code{Score}.  Définir la métrique dans une portée aura donc des effets
-sur les ligatures de toutes les autres.  Par voie de conséquence,
-la définition de la métrique apparaissant dans une autre portée annulera
+sur les ligatures de toutes les autres.  Par voie de conséquence, la
+définition de la métrique apparaissant dans une autre portée annulera
 les aménagements précédemment apportés aux règles de ligature.  Il est
 donc préférable, pour éviter tout désagrément, de ne spécifier la
 métrique que dans une seule portée.
@@ -2431,7 +2443,7 @@ métrique que dans une seule portée.
 <<
   \new Staff {
     \time 3/4
-    \set Timing.baseMoment = #(ly:make-moment 1 8)
+    \set Timing.baseMoment = #(ly:make-moment 1/8)
     \set Timing.beatStructure = #'(1 5)
     \set Timing.beamExceptions = #'()
     \repeat unfold 6 { a8 }
@@ -2477,7 +2489,7 @@ ligature automatiques est abordée au chapitre @ref{Métrique}.
 @funindex [
 
 Dans certaines situations, il peut s'avérer nécessaire de
-supplanter l'algorithme de groupement automatique des notes, par
+supplanter l'algorithme de regroupement automatique des notes, par
 exemple pour prolonger une ligature par-dessus un silence ou une barre
 de mesure, ou bien pour suivre le rythme des paroles plutôt que celui
 des notes.  Le début et la fin de la ligature sont alors indiqués
@@ -2514,7 +2526,7 @@ qui est en place au niveau de la notation normale.
 
 @lilypond[quote,verbatim,relative=2]
 c4 d8[
-\grace { e32[ d c d] }
+\grace { e32 d c d }
 e8] e[ e
 \grace { f16 }
 e8 e]
@@ -2523,9 +2535,9 @@ e8 e]
 @funindex stemLeftBeamCount
 @funindex stemRightBeamCount
 
-LilyPond peut déterminer automatiquement les sous-groupes à
-l'intérieur d'un groupement de notes, bien que le résultat ne soit pas
-toujours optimal.  Les propriétés @code{stemLeftBeamCount} et
+LilyPond peut déterminer automatiquement les sous-groupes à l'intérieur
+d'un groupement de notes, bien que le résultat ne soit pas toujours
+optimal.  Les propriétés @code{stemLeftBeamCount} et
 @code{stemRightBeamCount} permettent alors d'ajuster ce comportement.
 Lorsque l'une ou l'autre de ces propriétés est définie, elle ne
 s'applique qu'une seule fois, après quoi sa définition est effacée.
@@ -2581,7 +2593,7 @@ Référence des propriétés internes :
 Les ligatures en soufflet permettent d'indiquer qu'un petit groupe de
 notes se joue en accélérant ou en ralentissant sans pour autant
 modifier le tempo du morceau.  L'étendue du soufflet s'indique par
-@code{[} et @code{]}, et son orientation est déterminée par la propriété
+@code{[} et @code{]} ; son orientation est déterminée par la propriété
 @code{grow-direction} de l'objet @code{Beam}.
 
 Lorsque la sortie MIDI doit refléter les @emph{ritardando} ou
@@ -2603,21 +2615,21 @@ quatre triples croches qui suivent vont s'accélérant, alors que les
 quatre dernières gardent un tempo régulier.
 
 @lilypond[relative=1,verbatim,quote]
-\override Beam #'grow-direction = #LEFT
-\featherDurations #(ly:make-moment 2 1)
+\override Beam.grow-direction = #LEFT
+\featherDurations #(ly:make-moment 2/1)
 { c16[ c c c c c c c] }
-\override Beam #'grow-direction = #RIGHT
-\featherDurations #(ly:make-moment 2 3)
+\override Beam.grow-direction = #RIGHT
+\featherDurations #(ly:make-moment 2/3)
 { c32[ d e f] }
 % revert to non-feathered beams
-\override Beam #'grow-direction = #'()
+\override Beam.grow-direction = #'()
 { g32[ a b c] }
 @end lilypond
 
 @noindent
 Si le résultat imprimable ne reflète les durées que de manière
 approximative, la sortie MIDI sera quant à elle parfaitement
-@qq{ponctuelle}.
+« ponctuelle ».
 
 @predefined
 @code{\featherDurations}.
@@ -2657,7 +2669,7 @@ courts extraits, avec une faible amplitude.
 @funindex bar
 
 Les barres de mesures délimitent les mesures, mais peuvent aussi
-indiquer une reprise. En principe, elles sont insérées automatiquement
+indiquer une reprise.  En principe, elles sont insérées automatiquement
 en respectant la métrique en vigueur.
 
 Il est possible de forcer l'impression d'une barre de mesure spéciale,
@@ -2719,7 +2731,7 @@ f1 \bar "|"
 f1 \bar "."
 g1 \bar "||"
 a1 \bar ".|"
-b1 \bar ".|."
+b1 \bar ".."
 c1 \bar "|.|"
 d1 \bar "|."
 e1
@@ -2729,27 +2741,31 @@ e1
 ainsi que d'une barre en pointillé et d'une discontinue :
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar ":"
-g1 \bar "dashed"
+f1 \bar ";"
+g1 \bar "!"
 a1
 @end lilypond
 
 @noindent
-et de cinq types de barre de reprise :
+et de neuf types de barre de reprise :
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar "|:"
-g1 \bar ":|:"
+f1 \bar ".|:"
+g1 \bar ":..:"
 a1 \bar ":|.|:"
 b1 \bar ":|.:"
-c1 \bar ":|"
-e1
+c1 \bar ":.|.:"
+d1 \bar "[|:"
+e1 \bar ":|][|:"
+f1 \bar ":|]"
+g1 \bar ":|."
+a1
 @end lilypond
 
 De plus, une barre de mesure peut s'imprimer sous la forme d'une coche :
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar "'"
+f1 \bar "'" g1
 @end lilypond
 
 On rencontre habituellement ces signes dans le chant grégorien ; nous
@@ -2757,6 +2773,16 @@ vous invitons dans ce cadre particulier à plutôt utiliser
 @code{\divisioMinima}, comme indiqué au paragraphe @ref{Divisions} du
 chapitre consacré au grégorien.
 
+Lilypond prend en charge la notation kiévienne, qui dispose d'une
+barre de mesure spécifique :
+
+@lilypond[quote,relative=1,verbatim]
+f1 \bar "k"
+@end lilypond
+
+De plus amples détails quant à cette forme de notation sont
+fournis à la rubrique @ref{Typographie de notation kiévienne}.
+
 @cindex segno
 
 L'insertion d'un @emph{segno} directement sur la portée s'obtient à
@@ -2768,13 +2794,13 @@ c4 c c c
 c4 c c c \break
 \bar "S"
 c4 c c c
-\bar "|S"
+\bar "S-|"
 c4 c c c \break
-\bar "|S"
+\bar "S-|"
 c4 c c c
-\bar "S|"
+\bar "S-S"
 c4 c c c \break
-\bar "S|"
+\bar "S-S"
 c1
 @end lilypond
 
@@ -2787,53 +2813,152 @@ répéter.  Il est préférable d'indiquer les passages répétés à l'aide des
 différentes commandes de reprise (voir @ref{Répétitions et reprises})
 qui se chargeront d'imprimer le type de barre approprié.
 
-Dans les faits, un @code{"||:"} équivaut à un @code{"|:"} sauf s'il
+Dans les faits, un @code{".|:-||"} équivaut à un @code{".|:"} sauf s'il
 intervient à un saut de ligne : une double barre sera alors
 imprimée en fin de portée, et la barre de reprise au début de la
 nouvelle.
 
 @lilypond[quote,relative=2,verbatim]
 c4 c c c
-\bar "||:"
+\bar ".|:-||"
 c4 c c c \break
-\bar "||:"
+\bar ".|:-||"
 c4 c c c
 @end lilypond
 
 LilyPond dispose de six différents moyens de combiner une barre de
-reprise avec un signe @emph{segno} :
+reprise avec un @emph{segno} :
 
 @lilypond[quote,relative=2,verbatim]
 c4 c c c
-\bar ":|S"
+\bar ":|.S"
 c4 c c c \break
-\bar ":|S"
+\bar ":|.S"
 c4 c c c
-\bar ":|S."
+\bar ":|.S-S"
 c4 c c c \break
-\bar ":|S."
+\bar ":|.S-S"
 c4 c c c
-\bar "S|:"
+\bar "S.|:-S"
 c4 c c c \break
-\bar "S|:"
+\bar "S.|:-S"
 c4 c c c
-\bar ".S|:"
+\bar "S.|:"
 c4 c c c \break
-\bar ".S|:"
+\bar "S.|:"
 c4 c c c
-\bar ":|S|:"
+\bar ":|.S.|:"
 c4 c c c \break
-\bar ":|S|:"
+\bar ":|.S.|:"
 c4 c c c
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
 c4 c c c \break
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
 c1
 @end lilypond
 
 Par ailleurs, la commande @code{\inStaffSegno} crée une barre de mesure
 surmontée d'un @emph{segno}, et sait coopérer avec l'instruction
-@code{\repeat volta}.
+@code{\repeat volta}.
+
+@cindex bar de mesure, personnalisation
+@cindex définition d'une barre de mesure
+
+@funindex \defineBarLine
+@funindex defineBarLine
+
+L'instruction @code{\defineBarLine} permet de définir ses propres
+types de barre de mesure, en respectant la syntaxe :
+
+@example
+\defineBarLine @var{type_de_barre} #'(@var{fin} @var{début} @var{extension})
+@end example
+
+Les variables fournies à @code{\defineBarline} peuvent inclure la
+chîne vide @code{""} qui correspond à une barre invisible, ou bien
+être valorisées à @code{#f} -- ce qui aura pour effet ne
+n'imprimer aucune barre.
+
+Une fois la définition explicitée, la nouvelle barre s'utilise à
+l'aide de @code{\bar} @var{type_de_barre}.
+
+Sont à ce jour disponibles dix éléments différents :
+
+@lilypond[quote,verbatim]
+\defineBarLine ":" #'("" ":" "")
+\defineBarLine "=" #'("=" "" "")
+\defineBarLine "[" #'("" "[" "")
+\defineBarLine "]" #'("]" "" "")
+
+\new Staff {
+  s1 \bar "|"
+  s1 \bar "."
+  s1 \bar "!"
+  s1 \bar ";"
+  s1 \bar ":"
+  s1 \bar "k"
+  s1 \bar "S"
+  s1 \bar "="
+  s1 \bar "["
+  s1 \bar "]"
+  s1 \bar ""
+}
+@end lilypond
+
+Le type @code{"="} fournit un double trait destiné à être utilisé
+en combinaison avec un @emph{segno}.  Nous vous recommandons de
+lui préférer @code{\bar} @var{"||"} pour imprimer une simple
+double barre fine.
+
+Le signe @code{"-"} permet d'annoter un type de barre de mesure
+pour le distinguer lorsqu'il en existe plusieurs ayant la même
+apparence mais au comportement différent en fin de ligne ou en
+matière d'extension.  Ce qui suit le @code{"-"} n'est d'aucune
+utilité dans la construction de la barre.
+
+@lilypond[quote,relative=2,verbatim]
+\defineBarLine "||-dashedSpan" #'("||" "" "!!")
+
+\new StaffGroup <<
+  \new Staff {
+    c1 \bar "||"
+    c1 \bar "||-dashedSpan"
+    c1
+  }
+  \new Staff {
+    c1
+    c1
+    c1
+  }
+>>
+@end lilypond
+
+Par ailleurs, le caractère espace @code{" "} permer de préserver
+de l'espace et ainsi aligner correctement les différents tronçons
+d'une barre d'un seul tenant entre les portées d'un système :
+
+@lilypond[quote,relative=2,verbatim]
+\defineBarLine ":|.-wrong" #'(":|." "" "|.")
+\defineBarLine ":|.-right" #'(":|." "" " |.")
+
+\new StaffGroup <<
+  \new Staff {
+    c1 \bar ":|.-wrong"
+    c1 \bar ":|.-right"
+    c1
+  }
+  \new Staff {
+    c1
+    c1
+    c1
+  }
+>>
+@end lilypond
+
+Si d'autres éléments étaient nécessaires, LilyPond dispose de
+moyens aisés pour les définir.  Pour de plus amples informations
+quant à la manière de modifier ou ajouter des barres de mesure,
+consultez le fichier @file{scm/bar-line.scm}.
 
 Dans une partition comprenant plusieurs portées, la commande @code{\bar}
 placée sur une portée s'applique automatiquement à toutes les portées.
@@ -2880,6 +3005,9 @@ Manuel de notation :
 @ref{Répétitions et reprises},
 @ref{Regroupement de portées}.
 
+Fichiers d'initialisation :
+@file{scm/bar-line.scm}.
+
 Morceaux choisis :
 @rlsrnamed{Rhythms,Rythme}.
 
@@ -2893,7 +3021,7 @@ Référence des propriétés internes :
 @unnumberedsubsubsec Numéros de mesure
 @translationof Bar numbers
 
-@cindex mesure, numéro de
+@cindex mesure, numérotation
 @cindex numéros de mesure
 
 @funindex currentBarNumber
@@ -2928,7 +3056,7 @@ visible ou non.  Les valeurs sont rangées dans l'ordre suivant :
 numéros de mesure :
 
 @lilypond[verbatim,quote,relative=1]
-\override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+\override Score.BarNumber.break-visibility = ##(#t #t #t)
 \set Score.currentBarNumber = #11
 % Permit first bar number to be printed
 \bar ""
@@ -3026,16 +3154,17 @@ message d'avertissement concernant la première occurrence est affiché.
 L'origine du problème est de fait plus évidente.
 
 @funindex |
-@funindex pipeSymbol
+@funindex "|"
+@funindex pipe, symbole
 
-Il est aussi possible d'attribuer une autre valeur au symbole
-@code{|}, en assignant une expression musicale à @code{pipeSymbol}.
-Dans l'exemple suivant, le @code{|} servira à insérer une double barre
-là où il apparaît, au lieu de simplement vérifier que la fin de la
-mesure est atteinte.
+Il est aussi possible d'attribuer une autre valeur au symbole @code{|},
+en assignant une expression musicale à @code{"|"}.  Dans l'exemple
+suivant, le @code{|} servira à insérer une double barre là où il
+apparaît, au lieu de simplement vérifier que la fin de la mesure est
+atteinte.
 
 @lilypond[quote,verbatim]
-pipeSymbol = \bar "||"
+"|" = \bar "||"
 {
   c'2 c' |
   c'2 c'
@@ -3057,7 +3186,7 @@ l'on recopie.  Cela se fait avec @code{\barNumberCheck}.  Par exemple,
 
 @noindent
 affiche un avertissement lors du traitement si le numéro de mesure à ce
-point (variable @code{currentBarNumber}) n'est pas 123.
+point (variable @code{currentBarNumber}) n'est pas égal à 123.
 
 @seealso
 Morceaux choisis :
@@ -3252,7 +3381,7 @@ pas de temps dans la mesure.
 
 @lilypond[quote,relative=2,verbatim]
 c4 \grace b16 a4(
-\grace { b16[ c16] } a2)
+\grace { b16 c16 } a2)
 @end lilypond
 
 Les plus courantes sont les acciaccatures, qui doivent se jouer très
@@ -3266,7 +3395,7 @@ déjà liées.
 @lilypond[quote,relative=2,verbatim]
 \acciaccatura d8 c4
 \appoggiatura e8 d4
-\acciaccatura { g16[ f] } e2
+\acciaccatura { g16 f } e2
 \slashedGrace a,8 g4
 \slashedGrace b16 a4(
 \slashedGrace b8 a2)
@@ -3278,8 +3407,8 @@ pour chaque petite croche.
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e2 \grace { c16[ d e f] } e2 }
-  \new Staff { c2 \grace { g8[ b] } c2 }
+  \new Staff { e2 \grace { c16 d e f } e2 }
+  \new Staff { c2 \grace { g8 b } c2 }
 >>
 @end lilypond
 
@@ -3327,7 +3456,7 @@ sept huitièmes de la durée de la note de base :
 \new Voice {
   <<
     { d1^\trill_( }
-    { s2 s4. \grace { c16[ d] } }
+    { s2 s4. \grace { c16 d } }
   >>
   c1)
 }
@@ -3376,6 +3505,10 @@ Glossaire musicologique :
 @rglosnamed{acciaccatura,acciacature},
 @rglosnamed{appoggiatura,appogiature}.
 
+Manuel de notation :
+@ref{Changement d'échelle des durées},
+@ref{Barres de ligature manuelles}.
+
 Fichiers d'initialisation :
 @file{ly/grace-init.ly}.
 
@@ -3384,13 +3517,14 @@ Morceaux choisis :
 
 Référence des propriétés internes :
 @rinternals{GraceMusic},
+@rinternals{Grace_auto_beam_engraver},
 @rinternals{Grace_beam_engraver},
 @rinternals{Grace_engraver},
 @rinternals{Grace_spacing_engraver}.
 
 @knownissues
 
-@cindex acciaccature, multi-note
+@cindex acciaccature, multinotes
 @cindex note d'ornement, synchronisation
 @cindex synchronisation des notes d'ornement
 
@@ -3406,8 +3540,8 @@ mêlez des portées comprenant des petites notes et d'autres sans :
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e4 \bar "|:" \grace c16 d2. }
-  \new Staff { c4 \bar "|:" d2. }
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" d2. }
 >>
 @end lilypond
 
@@ -3418,8 +3552,8 @@ correspondant à la durée des petites notes :
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e4 \bar "|:" \grace c16 d2. }
-  \new Staff { c4 \bar "|:" \grace s16 d2. }
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" \grace s16 d2. }
 >>
 @end lilypond
 
@@ -3464,19 +3598,19 @@ durée de la note qui précède, vous déclencheriez une erreur du type
 petites notes.  Par exemple,
 
 @example
-\acciaccatura @{ c'8[ d' e' f' g'] @}
+c'8 \acciaccatura @{ c'8[ d' e' f' g'] @}
 @end example
 
 deviendrait :
 
 @example
-\acciaccatura @{ c'16[ d' e' f' g'] @}
+c'8 \acciaccatura @{ c'16[ d' e' f' g'] @}
 @end example
 
 ou bien modifier explicitement l'échelle des durées :
 
 @example
-\acciaccatura @{ \scaleDurations 1/2 @{ c'8[ d' e' f' g'] @} @}
+c'8 \acciaccatura @{ \scaleDurations 1/2 @{ c'8[ d' e' f' g'] @} @}
 @end example
 
 Voir @ref{Changement d'échelle des durées}.
@@ -3498,9 +3632,9 @@ qu'en comporte la cadence, faute de quoi ils démarreraient trop tôt ou
 trop tard.
 
 Les fonctions @code{mmrest-of-length} ou @code{skip-of-length}
-permettent de résoudre ce problème.  Ces fonctions Scheme prennent en
+permettent de pallier ce problème.  Ces fonctions Scheme prennent en
 argument un fragment de musique, et génèrent un @code{\skip} ou un
-silence multimesures d'une durée correspondant à ce fragment.
+silence multimesure d'une durée correspondant à ce fragment.
 
 @lilypond[verbatim,quote]
 MyCadenza = \relative c' {
@@ -3586,11 +3720,11 @@ La barre de mesure suivante tombera donc à 9/8 et non à 5/8.
 
 @lilypond[quote,verbatim]
 \new Voice \relative c' {
-  \set Timing.measureLength = #(ly:make-moment 5 4)
+  \set Timing.measureLength = #(ly:make-moment 5/4)
   c1 c4 |
   c1 c4 |
   c4 c
-  \set Timing.measurePosition = #(ly:make-moment 5 8)
+  \set Timing.measurePosition = #(ly:make-moment 5/8)
   b4 b b8 |
   c4 c1 |
 }
index 1e6693e693819edd72a3e67f8e2e74118f6efcd6..4d6b1769058a77ad022b87e84b7b7189bf2d451d 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @c Translators: Frédéric Chiasson, Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: Jean-Charles Malahieude, John Mandereau
@@ -67,7 +67,7 @@ Un accord peut être suivi d'une indication d'articulation comme une
 simple note.
 
 @lilypond[verbatim,quote,relative=2]
-<a c e>1\fermata <a c e>2-> <f a c e>4\prall <a c>8.^| <g c e>16-.
+<a c e>1\fermata <a c e>2-> <f a c e>4\prall <a c>8.^! <g c e>16-.
 @end lilypond
 
 Certaines notes, au sein même d'un accord, peuvent être affectées d'une
@@ -98,7 +98,7 @@ sera donc combiné -- pour des combinaisons plus complexes, voir
 @ref{Expressions simultanées}.
 
 @lilypond[verbatim,quote,relative=2]
-\grace { g8[( a b] }
+\grace { g8( a b }
 <> ) \p \< -. -\markup \italic "sempre staccato"
 \repeat unfold 4 { c4 e }  c1\f
 @end lilypond
@@ -179,7 +179,7 @@ ligatures@dots{}  En fait, c'est la structure du dernier accord qui est
 dupliquée.
 
 @lilypond[verbatim,quote,relative=2]
-<a c e>1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall
+<a c e>1\p^"text" q2\<( q8)[-! q8.]\! q16-1-2-3 q8\prall
 @end lilypond
 
 Dans la mesure où le symbole de répétition d'accord enregistre la
@@ -323,7 +323,7 @@ lors de la compilation.  Le déclenchement de cet avertissement peut être
 désactivé par une clause
 
 @example
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
 @end example
 
 Ceci n'aura pas pour seule conséquence que ce message ne sera plus
@@ -884,14 +884,14 @@ Référence des propriétés internes :
 @cindex collisions, ignorer
 
 @knownissues
-Une clause @code{\override NoteColumn #'ignore-collision = ##t} aura
+Une clause @code{\override NoteColumn.ignore-collision = ##t} aura
 pour effet une fusion incorrecte des têtes de note différentes à partir
 de voix différentes.
 
 @lilypond[quote,relative=1,verbatim]
 \mergeDifferentlyHeadedOn
 << { c16 a' b a } \\ { c,2 } >>
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
 << { c16 a' b a } \\ { c,2 } >>
 @end lilypond
 
index a9389f591bd5d56ed1fdb15a41b6c98fcfdf1496..936e52c4f7244a9e328f41e6878fad255a18326d 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: 95b372c451ea1586db8db66d3d00334382e8e103
+    Translation of GIT committish: e038863ba7228eb3e28b9f1a49e68ec9f4d260b0
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Frédéric Chiasson, Jean-Charles Malahieude
 
@@ -31,7 +31,7 @@ the staff lines."
 
 Could we add a sentence:
 "Use instead the pair fontSize = #@var{N}
-        \override StaffSymbol #'staff-space = #(magstep @var{N})
+        \override StaffSymbol.staff-space = #(magstep @var{N})
 inside the Staff context to change the size of the font and the
 distance between staff lines accordingly."
 
@@ -70,7 +70,7 @@ occupation de l'espace, tant horizontalement que verticalement.
 Les réglages qui influencent la mise en forme se placent dans deux blocs
 différents.  Le bloc @w{@code{\paper @{@dots{}@}}} étudié à la rubrique
 @ref{Mise en forme de la page} contient les réglages applicables à
-l'intégralité du document -- à toutes les partitions d'un ouvrage --
+toutes les partitions d'une partie ou de l'intégralité d'un ouvrage --
 tels que format du papier, impression ou non des numéros de page, etc.
 Quant au bloc @w{@code{\layout @{@dots{}@}}}, qui fait l'objet de la
 rubrique @ref{Mise en forme de la partition}, il détermine la mise en
@@ -107,24 +107,51 @@ Nous allons examiner ici les options qui contrôlent la mise en forme des
 pages attachées au bloc @code{\paper}.
 
 @menu
-* Le bloc \paper::
+* Le bloc paper::
 * Format du papier et adaptation automatique::
 * Variables d'espacement vertical fixe::
 * Variables d'espacement vertical fluctuant::
 * Variables d'espacement horizontal::
-* Autres variables du bloc \paper::
+* Autres variables du bloc paper::
 @end menu
 
 
-@node Le bloc \paper
-@subsection Le bloc @code{\paper}
-@translationof The @code{\paper} block
+@node Le bloc paper
+@subsection Le bloc @code{@bs{}paper}
+@translationof The paper block
 
-Un bloc @code{\paper} peut apparaître au sein d'un bloc @code{\book}.
-Les réglages effectués à l'aide du bloc @code{\paper} s'appliqueront à
-l'intégralité d'un ouvrage, qui peut comporter plusieurs partitions (des
-blocs @emph{score}) ; il ne doit donc en aucun cas se trouver dans un
-bloc @code{\score}.  Peuvent apparaître dans un bloc @code{\paper} :
+Des blocs @code{\paper} peuvent apparaître à trois différents endroits
+et former ainsi une hiérarchie :
+
+@itemize
+
+@item
+En début de fichier source, avant même tout bloc @code{\book},
+@code{\bookpart} ou @code{\score}.
+
+@item
+Au sein d'un bloc @code{\book} et indépendamment de tout bloc
+@code{\bookpart} ou @code{\score} qu'il pourrait contenir.
+
+@item
+Au sein d'un bloc @code{\bookpart}, mais en dehors de tout bloc
+@code{\score}.
+
+@end itemize
+
+Un bloc @code{\paper} ne doit donc en aucun cas prendre place au sein
+d'un bloc @code{\score}.
+
+Les valeurs des différents champs seront filtrées en respectant cette
+hiérarchie ; les valeuers définies le plus haut persisteront à moins
+d'être remplacées à un niveau hiérarchique inférieur.
+
+Plusieurs blocs @code{\paper} peuvent cohabiter à un même niveau,
+notamment en raison de la présence d'inclusion de fichiers.  Dans une
+telle éventualité, les champs sont regroupés par niveau, la dernière
+valeur rencontrée ayant préséance en cas de doublon.
+
+Peuvent apparaître dans un bloc @code{\paper} :
 
 @itemize
 
@@ -151,7 +178,7 @@ des entête, pied de page et titrage, elles sont étudiées à la rubrique
 La plupart des variables gérant le papier ne sont fonctionnelles que
 lorsque mentionnées dans un bloc @code{\paper}.  Certaines, qui peuvent
 toutefois apparaître dans un bloc @code{\layout}, sont référencées à la
-rubrique @ref{Le bloc \layout}.
+rubrique @ref{Le bloc layout}.
 
 Sauf mention contraire, toutes les variables du bloc @code{\paper} qui
 correspondent à des dimensions sont exprimées en millimètre -- vous
@@ -194,7 +221,7 @@ fonctions Scheme.  Voici l'équivalent de l'exemple précédent :
 Manuel de notation :
 @ref{Format du papier et adaptation automatique},
 @ref{Titrages personnalisés}.
-@ref{Le bloc \layout}.
+@ref{Le bloc layout}.
 
 Fichiers d'initialisation :
 @file{ly/paper-defaults-init.ly}.
@@ -220,16 +247,20 @@ Fichiers d'initialisation :
 @translationof Setting the paper size
 
 LilyPond génère par défaut, et en l'absence de mention explicite d'un
-format de papier, un fichier imprimable au format A4.  Vous pouvez
-cependant utiliser un autre format à l'aide des deux fonctions
-@code{set-default-paper-size} et @code{set-paper-size} qui, elle, se
-place à l'intérieur d'un bloc @code{\paper} :
+format de papier particulier, un fichier imprimable au format A4.
+Vous pouvez cependant utiliser un autre format à l'aide des deux
+fonctions :
+
+@table @code
+@item set-default-paper-size
 
 @example
 #(set-default-paper-size "quarto")
 @end example
 
-qui se place en début de fichier, ou @code{set-paper-size},
+qui se place en début de fichier, et
+
+@item set-paper-size
 
 @example
 \paper @{
@@ -238,8 +269,8 @@ qui se place en début de fichier, ou @code{set-paper-size},
 @end example
 
 qui s'inscrit au sein d'un bloc @code{\paper}.
+@end table
 
-@noindent
 La seule restriction à l'utilisation isolée de la fonction
 @code{set-default-paper-size} est qu'elle doit intervenir avant le
 premier bloc @code{\paper}.  @code{set-default-paper-size} fixe le
@@ -257,7 +288,8 @@ abordées à la rubrique @ref{Adaptation automatique au format}.
 Différents formats de papier sont définis dans le fichier
 @file{scm/paper.scm}.  Bien que vous puissiez y ajouter votre propre
 format, sachez cependant que celui-ci est écrasé à chaque mise à jour de
-LilyPond.
+LilyPond.  Les différents formats disponibles sont répertoriés à
+l'annexe @ref{Formats de papier prédéfinis}.
 
 @c An appendix entry exists for paper sizes but is not auto-generated
 
@@ -359,7 +391,7 @@ Fichiers d'initialisation :
 
 @node Variables d'espacement vertical fixe
 @subsection Variables d'espacement vertical fixe
-@translationof Fixed vertical spacing @code{\paper} variables
+@translationof Fixed vertical spacing paper variables
 
 @warning{Certains dimensionnements attachés au bloc @code{@bs{}paper}
 sont automatiquement ajustés selon le format du papier, ce qui peut
@@ -436,7 +468,7 @@ marges haute et basse.
 
 @node Variables d'espacement vertical fluctuant
 @subsection Variables d'espacement vertical fluctuant
-@translationof Flexible vertical spacing @code{\paper} variables
+@translationof Flexible vertical spacing paper variables
 
 Il est souvent judicieux d'apporter un peu de flexibilité à l'espacement
 entre différents éléments (marges, titres, systèmes ou mouvements), en
@@ -555,7 +587,7 @@ deuxième redéfinit complètement la variable.
 
 @node Liste des variables d'espacement vertical fluctuant
 @unnumberedsubsubsec Liste des variables d'espacement fluctuant
-@translationof List of flexible vertical spacing @code{\paper} variables
+@translationof List of flexible vertical spacing paper variables
 
 Le nom des dimensionnements à hauteur variable sont de la forme
 @code{@var{avant}-@var{après}-spacing}, où @code{@var{avant}} et
@@ -642,7 +674,7 @@ Morceaux choisis :
 
 @node Variables d'espacement horizontal
 @subsection Variables d'espacement horizontal
-@translationof Horizontal spacing \paper variables
+@translationof Horizontal spacing paper variables
 
 @warning{Certains dimensionnements attachés au bloc @code{@bs{}paper}
 sont automatiquement ajustés selon le format du papier, ce qui peut
@@ -651,14 +683,14 @@ voir @ref{Adaptation automatique au format}.}
 
 @menu
 * Variables de marge et de largeur::
-* Variables spécifiques pour l'impression recto-verso::
+* Variables spécifiques à l'impression recto-verso::
 * Variables d'indentation et de décalage::
 @end menu
 
 
 @node Variables de marge et de largeur
 @unnumberedsubsubsec Variables de marge et de largeur
-@translationof @code{\paper} variables for widths and margins
+@translationof paper variables for widths and margins
 
 Les valeurs par défaut (avant étalonnage) sont définies dans le fichier
 @file{ly/paper-defaults-init.ly}.
@@ -743,8 +775,8 @@ se gérer au sein d'un bloc @code{\layout}.
 
 Lorsqu'elle est activée, cette variable permet de ne pas étendre le
 dernier système de façon à occuper toute la longueur de la ligne.  La
-valeur par défaut est @code{#f}.  Cette variable peut aussi
-se gérer au sein d'un bloc @code{\layout}.
+valeur par défaut est @code{#f}.  Cette variable peut aussi se
+gérer au sein d'un bloc @code{\layout}.
 
 @end table
 
@@ -760,9 +792,9 @@ La définition explicite d'un format de papier annulera tout réglage des
 marges gauche et droite.
 
 
-@node Variables spécifiques pour l'impression recto-verso
-@unnumberedsubsubsec Variables spécifiques pour l'impression recto-verso
-@translationof @code{\paper} variables for two-sided mode
+@node Variables spécifiques à l'impression recto-verso
+@unnumberedsubsubsec Variables spécifiques à l'impression recto-verso
+@translationof paper variables for two-sided mode
 
 Les valeurs par défaut (avant étalonnage) sont définies dans le fichier
 @file{ly/paper-defaults-init.ly}.
@@ -823,7 +855,7 @@ Fichiers d'initialisation :
 
 @node Variables d'indentation et de décalage
 @unnumberedsubsubsec Variables d'indentation et de décalage
-@translationof @code{\paper} variables for shifts and indents
+@translationof paper variables for shifts and indents
 
 Les valeurs par défaut (avant étalonnage) sont définies dans le fichier
 @file{ly/paper-defaults-init.ly}.
@@ -837,7 +869,7 @@ Les valeurs par défaut (avant étalonnage) sont définies dans le fichier
 
 Tous les systèmes, ainsi que les titres et séparateurs de systèmes,
 seront poussés d'autant vers la droite.  La valeur par défaut est
-de @code{0.0}.
+de @code{0.0\mm}.
 
 @item indent
 @funindex indent
@@ -852,8 +884,8 @@ papier.  Cette variable peut aussi se gérer au sein d'un bloc
 
 Le niveau d'indentation de tous les systèmes hormis le premier.  La
 valeur par défaut est de @code{0}, et s'ajustera selon le format du
-papier dès lors que vous lui affecterez une valeur.  Cette variable peut
-aussi se gérer au sein d'un bloc @code{\layout}.
+papier dès lors que vous lui aurez affecté une valeur.  Cette
+variable peut aussi se gérer au sein d'un bloc @code{\layout}.
 
 @end table
 
@@ -868,9 +900,9 @@ Morceaux choisis :
 @rlsrnamed{Spacing, Espacements}.
 
 
-@node Autres variables du bloc \paper
-@subsection Autres variables du bloc @code{\paper}
-@translationof Other @code{\paper} variables
+@node Autres variables du bloc paper
+@subsection Autres variables du bloc @code{@bs{}paper}
+@translationof Other paper variables
 
 @menu
 * Variables de gestion des sauts de ligne::
@@ -882,9 +914,7 @@ Morceaux choisis :
 
 @node Variables de gestion des sauts de ligne
 @unnumberedsubsubsec Variables de gestion des sauts de ligne
-@translationof @code{\paper} variables for line breaking
-
-@c TODO: Mention that ly:optimal-breaking is on by default? -mp
+@translationof paper variables for line breaking
 
 @table @code
 
@@ -926,41 +956,20 @@ Manuel de notation :
 
 @node Variables de gestion des sauts de page
 @unnumberedsubsubsec Variables de gestion des sauts de page
-@translationof @code{\paper} variables for page breaking
+@translationof paper variables for page breaking
 
 Les valeurs par défaut sont définies dans le fichier
 @file{ly/paper-defaults-init.ly}.
 
 @table @code
 
-@item blank-after-score-page-force
-@funindex blank-after-score-page-force
-
-Pénalité pour apparition d'une page blanche entre deux partitions.  Sa
-valeur est par défaut inférieure à celle de
-@code{blank-page-force} ; nous préférons qu'une page blanche
-s'insère après la fin de la partition plutôt qu'au milieu.
-
-@item blank-last-page-force
-@funindex blank-last-page-force
-
-Pénalité pour fin de partition intervenant sur une page impaire.  La
-valeur par défaut est de @code{0}.
-
-@item blank-page-force
-@funindex blank-page-force
-
-Pénalité pour apparition d'une page blanche en cours de partition.
-L'algorithme @code{ly:optimal-breaking} n'en tiendra pas compte
-puisqu'il ne conçoit pas la présence d'une page blanche au milieu d'une
-partition.  La valeur par défaut est de @code{5}.
-
 @item page-breaking
 @funindex page-breaking
 
 L'algorithme de calcul des sauts de page à utiliser.  Vous avez le choix
-entre @code{ly:minimal-breaking}, @code{ly:page-turn-breaking} et
-@code{ly:optimal-breaking}.
+entre @code{ly:minimal-breaking}, @code{ly:page-turn-breaking},
+@code{ly:one-line-breaking} et @code{ly:optimal-breaking} (activé
+par défaut).
 
 @item page-breaking-system-system-spacing
 @funindex page-breaking-system-system-spacing
@@ -980,6 +989,62 @@ par défaut non définie.
 
 @end table
 
+Les variables qui suivent ne sont effectives que lorsque
+l'algorithme @code{page-breaking} adopte la fonction
+@code{ly:page-turn-breaking}.  Les sauts de page sont alors
+positionnés de sorte à minimiser le nombre de tournes.  Dans la
+mesure où il faut tourner la feuille pour passer d'une page
+impaire à une page paire, sera privilégiée une répartition qui
+présente une dernière page impaire.  Les endroits où une tourne
+serait appropriée peuvent s'indiquer à l'aide d'un
+@code{\allowPageTurn} ou laissés à l'appréciation du
+@code{Page_turn_engraver} -- voir @ref{Optimisation des tournes}.
+
+Lorsqu'aucune option n'est satisfaisante pour placer
+judicieusement les tournes, LilyPond peut décider d'insérer une
+page blanche au milieu d'une partition ou entre deux partitions
+successives, voire même finir par une page paire.  La valeur des
+trois variables qui suivent peut se voir augmentée de façon à
+diminuer ces risques.
+
+Il s'agit ici de pénalité ; autrement dit, au plus la valeur est
+élevée, au moins l'action associée sera favorisée en regard des
+autres choix.
+
+@table @code
+
+@item blank-page-penalty
+@funindex blank-page-penalty
+
+Pénalité pour apparition d'une page blanche en cours de partition.
+L'attribution d'une valeur élevée à @code{blank-page-penalty}
+alors qu'a été activé @code{ly:page-turn-breaking} forcera
+LilyPond à éviter de placer une page blanche au mileu de la 
+partition, quitte à espacer d'autant plus la musique pour remplir
+cette page blanche et la suivante. La valeur par défaut est
+de @code{5}.
+
+@item blank-last-page-penalty
+@funindex blank-last-page-penalty
+
+Pénalité pour fin de partition intervenant sur une page paire.
+L'attribution d'une valeur élevée à @code{blank-last-page-penalty}
+alors qu'a été activé @code{ly:page-turn-breaking} forcera
+LilyPond à éviter de terminer la partition sur une page paire,
+quitte à ajuster les espacements jusqu'à obtenir une page de plus
+ou une de moins.  La valeur par défaut est de @code{0}.
+
+@item blank-after-score-page-penalty
+@funindex blank-after-score-page-penalty
+
+Pénalité pour apparition d'une page blanche entre deux partitions.  Sa
+valeur est par défaut inférieure à celle de
+@code{blank-page-penalty} ; nous préférons qu'une page blanche
+s'insère après la fin de la partition plutôt qu'au milieu.  La
+valeur par défaut est de @code{2}.
+
+@end table
+
 @seealso
 Manuel de notation :
 @ref{Sauts de page},
@@ -994,13 +1059,14 @@ Fichiers d'initialisation :
 
 @node Variables de gestion des numéros de page
 @unnumberedsubsubsec Variables de gestion des numéros de page
-@translationof @code{\paper} variables for page numbering
+@translationof paper variables for page numbering
 
-Les valeurs par défaut sont définies dans le fichier
-@file{ly/paper-defaults-init.ly}.
+Les valeurs par défaut sont définies dans le
+fichier @file{ly/paper-defaults-init.ly}.
 
 @table @code
 
+@cindex pages, numérotation automatique
 @item auto-first-page-number
 @funindex auto-first-page-number
 
@@ -1011,6 +1077,7 @@ lui-même si le premier numéro sera pair ou impair, ce qui se traduira
 par un éventuel incrément de un.  La valeur par défaut
 est @code{#f}.
 
+@cindex pages, numéro de la première
 @item first-page-number
 @funindex first-page-number
 
@@ -1043,7 +1110,7 @@ sorte que la page une se retrouve à droite.
 
 @node Variables supplémentaires
 @unnumberedsubsubsec Variables supplémentaires
-@translationof Miscellaneous @code{\paper} variables
+@translationof Miscellaneous paper variables
 
 @table @code
 
@@ -1112,19 +1179,19 @@ plus particulièrement destinées à gérer la mise en forme de la
 partition.
 
 @menu
-* Le bloc \layout::
+* Le bloc layout::
 * Définition de la taille de portée::
 @end menu
 
 
-@node Le bloc \layout
-@subsection Le bloc @code{\layout}
-@translationof The @code{\layout} block
+@node Le bloc layout
+@subsection Le bloc @code{@bs{}layout}
+@translationof The layout block
 
 @funindex \layout
 
 Alors que le bloc @code{\paper} définit le formatage des pages pour
-l'intégralité du document, le bloc @code{\layout} s'occupe de la mise en
+l'intégralité du document, le bloc @code{\layout} gère la mise en
 forme spécifique à la partition.  La mise en forme de la musique peut
 concerner toutes les partitions d'un même ouvrage, auquel cas un bloc
 @code{\layout} indépendant se placera en tête de fichier.  Dans le cas
@@ -1177,12 +1244,12 @@ Voici un exemple de bloc @code{\layout} :
   indent = 2\cm
   \context @{
     \StaffGroup
-    \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8
+    \override StaffGrouper.staff-staff-spacing.basic-distance = #8
   @}
   \context @{
     \Voice
-    \override TextScript #'padding = #1
-    \override Glissando #'thickness = #3
+    \override TextScript.padding = #1
+    \override Glissando.thickness = #3
   @}
 @}
 @end example
@@ -1204,8 +1271,8 @@ Par exemple, placer le bloc suivant
 \layout @{
   \context @{
     \Voice
-    \override TextScript #'color = #magenta
-    \override Glissando #'thickness = #1.5
+    \override TextScript.color = #magenta
+    \override Glissando.thickness = #1.5
   @}
 @}
 @end example
@@ -1227,13 +1294,13 @@ Lorsque nous définissons la variable suivante,
 layoutVariable = \layout @{
   \context @{
     \Voice
-    \override NoteHead #'font-size = #4
+    \override NoteHead.font-size = #4
   @}
 @}
 @end example
 
 qui contient une configuration de @code{\layout} avec
-l'adaptation @code{NoteHead #'font-size}, cette combinaison n'est pas
+l'adaptation @code{NoteHead.font-size}, cette combinaison n'est pas
 enregistrée en tant que configuration courante.  Notez bien que la
 « configuration courante » est lue lorsque la variable est définie, non
 lorsqu'elle est utilisée ; par voie de conséquence, le contenu de la
@@ -1247,12 +1314,12 @@ Notre variable peut alors être utilisée au sein d'un autre bloc
   \layoutVariable
   \context @{
     \Voice
-    \override NoteHead #'color = #red
+    \override NoteHead.color = #red
   @}
 @}
 @end example
 
-Un bloc @code{\layout} qui contient une variable comme ci-dessus, ne
+Un bloc @code{\layout} qui contient une variable comme ci-dessus ne
 recopie pas la configuration actuelle ; il utilise en fait le contenu de
 @code{layoutVariable} en tant que configuration de base pour les
 adaptations ultérieures, en conséquence de quoi toute modification
@@ -1266,11 +1333,11 @@ contient.  Considérant l'exemple d'utilisation de @code{layoutVariable}
 ci-dessus, le bloc @code{\layout} final contiendra donc :
 
 @example
-  TextScript #'padding = #1
-  TextScript #'color = #magenta
-  Glissando #'thickness = #1.5
-  NoteHead #'font-size = #4
-  NoteHead #'color = #red
+  TextScript.padding = #1
+  TextScript.color = #magenta
+  Glissando.thickness = #1.5
+  NoteHead.font-size = #4
+  NoteHead.color = #red
 @end example
 
 ainsi que les adaptations de @code{indent} et @code{StaffGrouper}.
@@ -1279,8 +1346,8 @@ Cependant, si la variable avait été définie bien avant le premier bloc
 @code{\layout}, la configuration actuelle ne contiendrait que
 
 @example
-  NoteHead #' font-size= #4 % (écrit dans la définition de la variable)
-  NoteHead #' color = #red % (ajouté après l'utilisation de la variable)
+  NoteHead.font-size= #4 % (écrit dans la définition de la variable)
+  NoteHead.color = #red % (ajouté après l'utilisation de la variable)
 @end example
 
 Une gestion attentive des variables de @code{\layout} se révèle être un
@@ -1469,7 +1536,7 @@ forcés doivent être saisis au sein d'une expression polyphonique :
   \remove "Forbid_line_break_engraver"
 } \relative c'' {
   <<
-    { c2. \times 2/3 { c4 c c } c2. | }
+    { c2. \tuplet 3/2 { c4 c c } c2. | }
     { s1 | \break s1 | }
   >>
 }
@@ -1477,10 +1544,10 @@ forcés doivent être saisis au sein d'une expression polyphonique :
 
 Selon le même principe, un saut de ligne ne peut intervenir alors qu'une
 ligature s'étend sur deux mesures consécutives.  Il faut en ce cas là
-introduire la dérogation @w{@code{\override Beam #'breakable = ##t}}.
+introduire la dérogation @w{@code{\override Beam.breakable = ##t}}.
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override Beam #'breakable = ##t
+\override Beam.breakable = ##t
 c2. c8[ c | \break
 c8 c] c2. |
 @end lilypond
@@ -1704,7 +1771,7 @@ la manière suivante :
   a4 b c d |
   R1 | % une tourne peut se placer ici
   a4 b c d |
-  \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
+  \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
   R1 | % il ne peut pas y avoir de tourne ici
   a4 b r2 |
   R1*2 | % une tourne peut se placer ici
@@ -1736,6 +1803,9 @@ entre des blocs @code{\score} ou des @emph{markups} de haut niveau.
 @endpredefined
 
 @seealso
+Manuel de notation :
+@ref{Variables de gestion des sauts de ligne}.
+
 Morceaux choisis :
 @rlsrnamed{Spacing,Espacements}.
 
@@ -1799,8 +1869,8 @@ Il arrive parfois que LilyPond rejette des @code{\break} ou des
 avec ces deux instructions dérogatoires :
 
 @example
-\override NonMusicalPaperColumn #'line-break-permission = ##f
-\override NonMusicalPaperColumn #'page-break-permission = ##f
+\override NonMusicalPaperColumn.line-break-permission = ##f
+\override NonMusicalPaperColumn.page-break-permission = ##f
 @end example
 
 Lorsque vous désactivez @code{line-break-permission}, LilyPond
@@ -1817,24 +1887,24 @@ nulle part ailleurs.
   ragged-bottom = ##t
 }
 
-musique = \relative c'' { c8 c c c }
+music = \relative c'' { c8 c c c }
 
 \score {
   \new Staff {
-    \repeat unfold 2 { \musique } \break
-    \repeat unfold 4 { \musique } \break
-    \repeat unfold 6 { \musique } \break
-    \repeat unfold 8 { \musique } \pageBreak
-    \repeat unfold 8 { \musique } \break
-    \repeat unfold 6 { \musique } \break
-    \repeat unfold 4 { \musique } \break
-    \repeat unfold 2 { \musique }
+    \repeat unfold 2 { \music } \break
+    \repeat unfold 4 { \music } \break
+    \repeat unfold 6 { \music } \break
+    \repeat unfold 8 { \music } \pageBreak
+    \repeat unfold 8 { \music } \break
+    \repeat unfold 6 { \music } \break
+    \repeat unfold 4 { \music } \break
+    \repeat unfold 2 { \music }
   }
   \layout {
     \context {
       \Score
-      \override NonMusicalPaperColumn #'line-break-permission = ##f
-      \override NonMusicalPaperColumn #'page-break-permission = ##f
+      \override NonMusicalPaperColumn.line-break-permission = ##f
+      \override NonMusicalPaperColumn.page-break-permission = ##f
     }
   }
 }
@@ -1876,21 +1946,25 @@ concernant les ruptures.
 @lilypond[quote,verbatim]
 music = \relative c'' { c4 c c c }
 
-\score {
-  \new Staff <<
-    \new Voice {
-      s1 * 2 \break
-      s1 * 3 \break
-      s1 * 6 \break
-      s1 * 5 \break
-    }
-    \new Voice {
-      \repeat unfold 2 { \music }
-      \repeat unfold 3 { \music }
-      \repeat unfold 6 { \music }
-      \repeat unfold 5 { \music }
-    }
-  >>
+\header { tagline = ##f }
+\paper { left-margin = 0\mm }
+\book {
+  \score {
+    \new Staff <<
+      \new Voice {
+        s1 * 2 \break
+        s1 * 3 \break
+        s1 * 6 \break
+        s1 * 5 \break
+      }
+      \new Voice {
+        \repeat unfold 2 { \music }
+        \repeat unfold 3 { \music }
+        \repeat unfold 6 { \music }
+        \repeat unfold 5 { \music }
+      }
+    >>
+  }
 }
 @end lilypond
 
@@ -1902,32 +1976,36 @@ le voir au chapitre @ref{Espacement vertical}.
 @lilypond[quote,verbatim]
 music = \relative c'' { c4 c c c }
 
-\score {
-  \new Staff <<
-    \new Voice {
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 0))
-      s1 * 2 \break
-
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 35))
-      s1 * 3 \break
-
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 70))
-      s1 * 6 \break
-
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 105))
-      s1 * 5 \break
-    }
-    \new Voice {
-      \repeat unfold 2 { \music }
-      \repeat unfold 3 { \music }
-      \repeat unfold 6 { \music }
-      \repeat unfold 5 { \music }
-    }
-  >>
+\header { tagline = ##f }
+\paper { left-margin = 0\mm }
+\book {
+  \score {
+    \new Staff <<
+      \new Voice {
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 0))
+        s1 * 2 \break
+
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 5))
+        s1 * 3 \break
+
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 15))
+        s1 * 6 \break
+
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 30))
+        s1 * 5 \break
+      }
+      \new Voice {
+        \repeat unfold 2 { \music }
+        \repeat unfold 3 { \music }
+        \repeat unfold 6 { \music }
+        \repeat unfold 5 { \music }
+      }
+    >>
+  }
 }
 @end lilypond
 
@@ -1947,8 +2025,8 @@ Morceaux choisis :
 @cindex espacement vertical
 
 L'espacement vertical dépend de trois éléments : la surface
-disponible -- par exemple format de papier et marges --, l'espace qui
-doit séparer les systèmes, et l'espace qui sépare les portées d'un même
+disponible -- format de papier et marges --, l'espace qui doit
+séparer les systèmes, et l'espace qui sépare les portées d'un même
 système.
 
 @menu
@@ -2011,6 +2089,19 @@ attachées au bloc @code{\paper} et font l'objet du chapitre
 @unnumberedsubsubsec Propriétés d'espacement au sein d'un système
 @translationof Within-system spacing properties
 
+@funindex staff-affinity
+@funindex staffgroup-staff-spacing
+@funindex staff-staff-spacing
+@funindex nonstaff-unrelatedstaff-spacing
+@funindex nonstaff-relatedstaff-spacing
+@funindex nonstaff-nonstaff-spacing
+@funindex default-staff-staff-spacing
+@funindex minimum-Y-extent
+@funindex extra-offset
+@funindex self-alignment-X
+@funindex X-offset
+@funindex VerticalAxisGroup
+
 L'espacement entre les portées est géré par deux jeux de propriétés
 d'objet graphique (@emph{grob}).  Le premier, associé à l'objet
 graphique @code{VerticalAxisGroup}, est créé pour toute ligne de portée
@@ -2041,7 +2132,7 @@ d'elles :
 @item @code{ChordNames}  @tab ligne de base
 @item @code{NoteNames}   @tab ligne de base
 @item @code{Lyrics}      @tab ligne de base
-@item @code{Dynamics}    @tab centre vertical
+@item @code{Dynamics}    @tab mi-hauteur du « m »
 @item @code{FiguredBass} @tab point le plus haut
 @item @code{FretBoards}  @tab ligne supérieure
 @end multitable
@@ -2053,14 +2144,14 @@ En voici une représentation graphique :
 #(define zero-space '((padding . -inf.0) (basic-distance . 0)))
 
 alignToZero = \with {
-  \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space
-  \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space
+  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
+  \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
 }
 lowerCaseChords = \with {
   chordNameLowercaseMinor = ##t
 }
 staffAffinityDown = \with {
-  \override VerticalAxisGroup #'staff-affinity = #DOWN
+  \override VerticalAxisGroup.staff-affinity = #DOWN
 }
 labelContext =
 #(define-music-function
@@ -2078,18 +2169,18 @@ labelContext =
                           \lowerCaseChords }
   \context { \FretBoards  \alignToZero \staffAffinityDown }
   \context { \Score
-    \override BarLine #'stencil = ##f
-    \override DynamicText #'self-alignment-X = #-1
-    \override FretBoard #'X-offset = #1.75
-    \override InstrumentName #'minimum-Y-extent = #'(-2 . 2)
-    \override InstrumentName #'extra-offset = #'(0 . -0.5)
-    \override TextScript #'minimum-Y-extent = #'(-2 . 3)
-    \override TimeSignature #'stencil = ##f
+    \omit BarLine
+    \override DynamicText.self-alignment-X = #-1
+    \override FretBoard.X-offset = #1.75
+    \override InstrumentName.minimum-Y-extent = #'(-2 . 2)
+    \override InstrumentName.extra-offset = #'(0 . -0.5)
+    \override TextScript.minimum-Y-extent = #'(-2 . 3)
+    \omit TimeSignature
   }
 }
 
 %% Contextes dont le point de référence est la ligne de base :
-%%   ChordNames, NoteNames, et Lyrics
+%%   ChordNames, NoteNames et Lyrics
 <<
   \new ChordNames { \chords { g1:m } }
   \new NoteNames { s1 | g1 | }
@@ -2103,10 +2194,10 @@ labelContext =
   \new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } }
 >>
 
-%% Le point de référence de Dynamics est le milieu de la ligne
+%% Le point de référence de Dynamics est le milieu du « m » dans la fonte
 <<
   \new RhythmicStaff {
-    \set RhythmicStaff.instrumentName = #"centre vertical "
+    \set RhythmicStaff.instrumentName = #"mi-hauteur "
     \labelContext "Dynamics" s1*3
   }
   \new Dynamics { s1\mp s\fp }
@@ -2150,11 +2241,11 @@ alors que la seconde redéfinit la propriété dans son intégralité.
 
 @example
 \new Staff \with @{
-  \override VerticalAxisGroup #'staff-staff-spacing #'basic-distance = #10
+  \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
 @} @{ @dots{} @}
 
 \new Staff \with @{
-  \override VerticalAxisGroup #'staff-staff-spacing =
+  \override VerticalAxisGroup.default-staff-staff-spacing =
     #'(('basic-distance  . 10)
        (minimum-distance . 9)
        (padding . 1)
@@ -2169,7 +2260,7 @@ bloc @code{\layout} :
 \layout @{
   \context @{
     \Staff
-    \override VerticalAxisGroup #'staff-staff-spacing #'basic-distance = #10
+    \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
   @}
 @}
 @end example
@@ -2192,7 +2283,7 @@ d'un @code{\override} au niveau d'un contexte @code{Staff} (ou son
 @table @code
 @item staff-staff-spacing
 Il s'agit de la distance entre la portée en cours et la portée qui suit
-au sein du même regroupement, qu'il y ait ou non une ligne de non-portée
+au sein du même regroupement, qu'il y ait ou des lignes de non-portée
 (@code{Lyrics} ou autre) entre les deux.  Cette propriété ne s'applique
 pas à la dernière portée d'un système.
 
@@ -2217,7 +2308,7 @@ que prendra une ligne de non-portée pour aller s'accoler aux portées
 adjacentes .  Si vous lui attribuez @code{CENTER}, cette ligne de
 non-portée ira se placer à équidistance entre les portées qui
 l'encadrent, tout en tenant compte des éventuels risques de collision et
-des autres contraintes d'espacement.  Des lignes de non-portée
+autres contraintes d'espacement.  Des lignes de non-portée
 adjacentes devraient avoir une @code{staff-affinity} allant de haut en
 bas -- autrement dit, pas de @code{UP} après un @code{DOWN}.
 Une ligne de non-portée en dessous d'un système devrait avoir sa
@@ -2229,8 +2320,6 @@ une ligne de non-portée, cette ligne sera considérée comme étant une
 portée ; à l'inverse, utiliser la propriété @code{staff-affinity}
 pour une portée lui fera perdre cette qualité.
 
-@c TODO: verify last clause below ("even if other...")
-
 @item nonstaff-relatedstaff-spacing
 Il s'agit de la distance entre la ligne de non-portée en cours et la
 portée la plus proche selon la @code{staff-affinity}, à la double
@@ -2239,7 +2328,24 @@ valeur de @code{staff-affinity} soit @code{UP} ou @code{DOWN}.  Lorsque
 la valeur de @code{staff-affinity} est égale à @code{CENTER}, la valeur
 de @code{nonstaff-relatedstaff-spacing} servira à centrer la ligne de
 non-portée entre les deux portées adjacentes même si une autre
-non-portée est présente (quelque soit le côté).
+non-portée est présente (quelque soit le côté).  Le positionnement
+d'une ligne de non-portée dépend donc à la fois des portées tout
+comme des autres lignes de non-portée adjacentes.  L'affectation
+d'une faible valeur à la propriété @code{stretchability} de l'un
+de ces types d'espacement les avantagera ; leur affecter une
+grande valeur aura pour conséquence de diminuer leur influence.
+
+@c FIXME
+@c traduction approximative des dernières phrases, qui manquent de
+@c précision : QUI EST AVANTAGÉ OU NON ?
+@ignore
+  This means that the placement of a non-staff line depends
+on both the surrounding staves and the surrounding non-staff lines.
+Setting the @code{stretchability} of one of these types of spacing to
+a small value will make that spacing dominate.  Setting the
+@code{stretchability} to a large value will make that spacing have
+little effect.
+@end ignore
 
 @item nonstaff-nonstaff-spacing
 Il s'agit de la distance entre deux lignes de non-portée selon
@@ -2282,6 +2388,10 @@ regroupement a été ajustée au niveau de son propre
 @end table
 
 @seealso
+Manuel de notation :
+@ref{Variables d'espacement vertical fluctuant},
+@ref{Modification de listes associatives}.
+
 Fichiers d'initialisation :
 @file{ly/engraver-init.ly},
 @file{scm/define-grobs.scm}.
@@ -2328,7 +2438,7 @@ sein de regroupements.
 \layout {
   \context {
     \Staff
-    \override VerticalAxisGroup #'default-staff-staff-spacing =
+    \override VerticalAxisGroup.default-staff-staff-spacing =
       #'((basic-distance . 8)
          (minimum-distance . 7)
          (padding . 1))
@@ -2350,7 +2460,7 @@ sein de regroupements.
   % By setting 'padding to a negative value, staves can be made to
   % collide.  The lowest acceptable value for 'basic-distance is 0.
   \new Staff \with {
-    \override VerticalAxisGroup #'default-staff-staff-spacing =
+    \override VerticalAxisGroup.default-staff-staff-spacing =
       #'((basic-distance . 3.5)
          (padding . -10))
   } { \clef bass g2 r | }
@@ -2408,14 +2518,14 @@ regroupées, à l'aide des propriétés de l'objet graphique
 \layout {
   \context {
     \Score
-    \override StaffGrouper #'staff-staff-spacing #'padding = #0
-    \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1
+    \override StaffGrouper.staff-staff-spacing.padding = #0
+    \override StaffGrouper.staff-staff-spacing.basic-distance = #1
   }
 }
 
 <<
   \new PianoStaff \with {
-    \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+    \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
   } <<
     \new Staff { c'1 }
     \new Staff { c'1 }
@@ -2476,24 +2586,23 @@ Vous noterez que la valeur élevée attribuée à la clé
 \layout {
   \context {
     \Lyrics
-    \override VerticalAxisGroup
-      #'nonstaff-nonstaff-spacing #'stretchability = #1000
+    \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
   }
 }
 
 \new StaffGroup
 <<
   \new Staff \with {
-    \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30))
+    \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
   } { c'1 }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #UP
+    \override VerticalAxisGroup.staff-affinity = #UP
   } \lyricmode { up }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #CENTER
+    \override VerticalAxisGroup.staff-affinity = #CENTER
   } \lyricmode { center }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #DOWN
+    \override VerticalAxisGroup.staff-affinity = #DOWN
   } \lyricmode { down }
   \new Staff { c'1 }
 >>
@@ -2526,12 +2635,12 @@ les différentes mises au point du décalage vertical appliqué aux portées
 et systèmes distribués sur une page.
 
 Une autre approche de l'espacement vertical est le recours à
-@code{NonMusicalPaperColumn #'line-break-system-details}.  Alors que
+@code{NonMusicalPaperColumn.line-break-system-details}.  Alors que
 @code{VerticalAxisGroup} et @code{\paper} gèrent un décalage vertical,
-@code{NonMusicalPaperColumn #'line-break-system-details} spécifiera le
+@code{NonMusicalPaperColumn.line-break-system-details} spécifiera le
 positionnement vertical absolu sur la page.
 
-@code{NonMusicalPaperColumn #'line-break-system-details} prend en charge
+@code{NonMusicalPaperColumn.line-break-system-details} prend en charge
 une liste associative de trois mises au point :
 
 @itemize
@@ -2552,29 +2661,29 @@ concernant les @code{NonMusicalPaperColumn} ci-dessus, peuvent se placer
 
 Le réglage de @code{NonMusicalPaperColumn} s'effectue à l'aide d'une
 simple commande @code{\override} au sein d'un bloc @code{\context} ou
-@code{\with}.  Dans le cas ou il est stipulé au fil des notes, c'est la
+@code{\with}.  Dans le cas où il est stipulé au fil des notes, c'est la
 commande spécifique @code{\overrideProperty} qui doit intervenir.  Voici
 quelques exemples de réglages de @code{NonMusicalPaperColumn} à l'aide
 de la commande @code{\overrideProperty} :
 
 @example
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((X-offset . 20))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((Y-offset . 40))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20)
-                                 (Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((X-offset . 20)
+     (Y-offset . 40))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((alignment-distances . (15)))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20)
-                                 (Y-offset . 40)
-                                 (alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((X-offset . 20)
+     (Y-offset . 40)
+     (alignment-distances . (15)))
 @end example
 
 Nous allons maintenant voir ces différents réglages en action.
@@ -2611,7 +2720,7 @@ musicaux ; ceci nous permettra d'y voir plus clair au fur et à
 mesure que nous avancerons.  Pour plus de précisions, relisez
 @ref{Recours à une voix supplémentaire pour gérer les sauts}.
 
-Les @code{\break} explicites répartissent la musique en lignes de cinq
+Les @code{\break} explicites répartissent la musique en lignes de six
 mesures chacune.  L'espacement vertical est celui que LilyPond attribue
 par défaut.  Nous pouvons, afin de fixer explicitement le point
 d'attache vertical de chacun des systèmes, définir un doublet
@@ -2626,14 +2735,14 @@ de l'objet @code{NonMusicalPaperColumn} :
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 0))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 0))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 40))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 40))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 80))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 60))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -2665,17 +2774,17 @@ jouer sur la distance séparant les portées de chacun des systèmes, grâce
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 20)
-                                           (alignment-distances . (15)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 20)
+               (alignment-distances . (10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 60)
-                                           (alignment-distances . (15)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 60)
+               (alignment-distances . (15)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 100)
-                                           (alignment-distances . (15)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 85)
+             (alignment-distances . (20)))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -2706,17 +2815,17 @@ d'un regroupement de portées.
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 0)
-                                           (alignment-distances . (30 10)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 0)
+               (alignment-distances . (30 10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 60)
-                                           (alignment-distances . (10 10)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 60)
+               (alignment-distances . (10 10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 100)
-                                           (alignment-distances . (10 30)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 100)
+               (alignment-distances . (10 30)))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -2744,7 +2853,7 @@ distance entre des portées adjacentes.  Des valeurs positives remontent
 les portées et paroles, des valeurs négatives les descendent.
 
 @item
-Dans la mesure où @code{NonMusicalPaperColumn #'line-break-system-details}
+Dans la mesure où @code{NonMusicalPaperColumn.line-break-system-details}
 permet de positionner systèmes et portées n'importe où sur une page,
 vous pourriez être en contradiction avec les dimensionnements de la
 feuille ou bien aboutir à des surimpressions.  Soyez donc raisonnable
@@ -2793,48 +2902,44 @@ près de la portée.
 @lilypond[quote,ragged-right,relative=2,verbatim]
 c4_"Text"\pp
 r2.
-\once \override TextScript #'outside-staff-priority = #1
+\once \override TextScript.outside-staff-priority = #1
 c4_"Text"\pp % this time the text will be closer to the staff
 r2.
 % by setting outside-staff-priority to a non-number,
 % we disable the automatic collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
-\once \override DynamicLineSpanner #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
+\once \override DynamicLineSpanner.outside-staff-priority = ##f
 c4_"Text"\pp % now they will collide
 @end lilypond
 
-Le décalage vertical entre un objet extérieur à la portée et celui qui
-le précède se contrôle par la propriété @code{outside-staff-padding}.
+Le décalage vertical entre des objets extérieurs à la portée se contrôle
+par la propriété @code{outside-staff-padding}.
 
 @c KEEP LY
 @lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18]
-\once \override TextScript #'outside-staff-padding = #0
-a'^"Ce texte est placé au plus près de la note"
-\once \override TextScript #'outside-staff-padding = #3
-c^"Ce texte est décalé par rapport au texte précédent"
-c^"Ce texte est accolé au texte précédent"
+\once \override TextScript.outside-staff-padding = #0
+a'4-"outside-staff-padding = #0"
+\once \override TextScript.outside-staff-padding = #3
+d-"outside-staff-padding = #3"
+c-"outside-staff-padding par défaut"
+b-"outside-staff-padding par défaut"
+R1
 @end lilypond
 
 Par défaut, les objets extérieurs à la portée sont positionnés en
 évitant les collisions horizontales avec des objets précédemment
 positionnés.  Ceci peut cependant générer des situations où des objets
-se trouvent horizontalement trop proches.  L'espacement vertical entre
-les portées peut dans une certaine mesure permettre de mieux intercaler
-les objets extérieurs à la portée.  La propriété
-@code{outside-staff-horizontal-padding} repoussera verticalement un
-objet pour éviter ce genre de situation.
+se trouvent horizontalement trop proches.  Comme l'illustre l'exemple
+suivant, la propriété @code{outside-staff-horizontal-padding} permet
+d'accroître l'espace horizontal requis et repoussera verticalement un
+objet pour éviter qu'il ne soit trop proche d'ventuelles lignes
+supplémentaires.
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-% the markup is too close to the following note
-c4^"Text"
-c4
-c''2
-% setting outside-staff-horizontal-padding fixes this
+c4^"Word" c c''2
 R1
-\once \override TextScript #'outside-staff-horizontal-padding = #1
-c,,4^"Text"
-c4
-c''2
+\once \override TextScript.outside-staff-horizontal-padding = #1
+c,,4^"Word" c c''2
 @end lilypond
 
 @seealso
@@ -2877,8 +2982,9 @@ de note ; pour la noire , cet espace est de deux têtes ; il
 est de trois pour la blanche.
 
 @lilypond[quote,verbatim,relative=1]
-c2 c4. c8 c4. c8 c4. c8 c8
-c8 c4 c4 c4
+c2 c4. c8
+c4. c8 c4. c8
+c8 c c4 c c
 @end lilypond
 
 @code{spacing-increment} est normalement défini à 1,2 espace de
@@ -2923,7 +3029,7 @@ doubles croches à l'exemple précédent, elles seraient suivies d'une
 demie largeur de tête :
 
 @lilypond[quote,verbatim,relative=2]
-c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4
+c2 c4. c8 | c4. c16[ c] c4. c8 | c8 c c4 c c
 @end lilypond
 
 Dans notre @emph{Essai sur la gravure musicale automatisée}, nous avons
@@ -2931,7 +3037,7 @@ vu comment la direction des hampes peut influencer l'espacement -- voir
 @ressay{Espacement}.  Ceci est contrôlé par la propriété
 @code{stem-spacing-correction} de l'objet @rinternals{NoteSpacing}, créé
 pour chaque contexte @rinternals{Voice}.  L'objet
-@rinternals{StaffSpacing}, généré au niveau d'un contexte @code{Staff},
+@code{StaffSpacing}, généré au niveau d'un contexte @rinternals{Staff},
 possède une même propriété qui contrôlera l'espacement hampe-barre de
 mesure.  L'exemple suivant montre ces adaptations, tout d'abord selon
 les réglages par défaut, puis avec des corrections forcées.
@@ -2940,8 +3046,8 @@ les réglages par défaut, puis avec des corrections forcées.
 {
   c'4 e''4 e'4 b'4 |
   b'4 e''4 b'4 e''4 |
-  \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
-  \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
+  \override Staff.NoteSpacing.stem-spacing-correction = #1.5
+  \override Staff.StaffSpacing.stem-spacing-correction = #1.5
   c'4 e''4 e'4 b'4 |
   b'4 e''4 b'4 e''4 |
 }
@@ -2951,12 +3057,12 @@ L'espacement spécifique à la notation proportionnelle fait l'objet d'une
 @rusernamed{Notation proportionnelle,rubrique dédiée}.
 
 @seealso
-Morceaux choisis :
-@rlsrnamed{Spacing,Espacements}.
-
 Essai sur la gravure musicale automatisée :
 @ressay{Espacement}.
 
+Morceaux choisis :
+@rlsrnamed{Spacing,Espacements}.
+
 Référence des propriétés internes :
 @rinternals{SpacingSpanner},
 @rinternals{NoteSpacing},
@@ -2969,8 +3075,9 @@ forcer manuellement l'espacement.  La solution ci-dessous permet
 cependant @qq{d'aérer} artificiellement une partition ; il vous
 suffit d'ajuster la valeur du décalage @emph{(padding)} autant que de
 besoin.
+
 @example
- \override Score.NonMusicalPaperColumn #'padding = #10
+ \override Score.NonMusicalPaperColumn.padding = #10
 @end example
 
 Il n'y a aucun moyen de diminuer l'espacement.
@@ -2980,6 +3087,10 @@ Il n'y a aucun moyen de diminuer l'espacement.
 @subsection Changement d'espacement en cours de partition
 @translationof New spacing area
 
+@cindex espacement, modification en cours de partition
+@cindex notes, espacement horizontal
+@funindex \newSpacingSection
+
 Il arrive, au cours d'un même mouvement, qu'une nouvelle partie modifie
 substantiellement la notion de valeur brève et valeur longue. La
 commande @code{newSpacingSection} permet alors de réinitialiser les
@@ -2987,7 +3098,7 @@ paramètres d'espacement.
 
 Dans l'exemple qui suit, le changement de métrique marque le début
 d'une nouvelle partie ; remarquez comme les doubles-croches sont
-alors plus espacées :
+alors automatiquent un peu plus espacées :
 
 @lilypond[relative,verbatim,quote]
 \time 2/4
@@ -2999,8 +3110,23 @@ c16[ c c8]
 @end lilypond
 
 La commande @code{\newSpacingSection} crée un nouvel objet
-@code{SpacingSpanner}, ce qui permet d'appliquer de nouveaux
-@code{\override}s à partir de ce point.
+@code{SpacingSpanner} à cet instant musical.  Si toutefois les
+ajustements apportés à l'espacement automatique ne se révélent pas
+satisfaisants, ils peuvent s'adapter à l'aide d'@code{\override}s.  Ces
+amendements doivent intervenir au même moment que la commande
+@code{\newSpacingSection} ; ils produiront leurs effets jusqu'à ce
+qu'ils soient à nouveau modifiés par une nouvelle section, comme ici :
+
+@lilypond[relative=1,verbatim,quote]
+\time 4/16
+c16[ c c8]
+\newSpacingSection
+\override Score.SpacingSpanner.spacing-increment = #2
+c16[ c c8]
+\newSpacingSection
+\revert Score.SpacingSpanner.spacing-increment
+c16[ c c8]
+@end lilypond
 
 @seealso
 Morceaux choisis :
@@ -3045,8 +3171,7 @@ resserrée.  En effet, @code{ly:make-moment} construit une durée :
   \layout {
     \context {
       \Score
-      \override SpacingSpanner
-        #'base-shortest-duration = #(ly:make-moment 1 16)
+      \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
     }
   }
 }
@@ -3055,8 +3180,8 @@ resserrée.  En effet, @code{ly:make-moment} construit une durée :
 @snippets
 L'espacement au sein d'un nolet dépend par défaut d'un certain nombre de
 facteurs qui ne sont pas liés à la durée (altération, changement de
-clef, etc.).  @w{@code{Score.SpacingSpanner #'uniform-stretching}}
-permet d'ignorer ces symboles et, par voie de conséquence, forcer
+clef, etc.).  @code{Score.SpacingSpanner.uniform-stretching}
+permet d'ignorer ces symboles et, par voie de conséquence, de forcer
 l'espacement sur la simple durée.  Notez bien que cette propriété
 s'appliquera à toute la partition, puisque mentionnée au sein d'un bloc
 @code{\layout}.
@@ -3065,22 +3190,16 @@ s'appliquera à toute la partition, puisque mentionnée au sein d'un bloc
 \score {
   <<
     \new Staff {
-      \times 4/5 {
-        c8 c8 c8 c8 c8
-      }
-      c8 c8 c8 c8
+      \tuplet 5/4 { c8 c8 c8 c8 c8 } c8 c8 c8 c8
     }
     \new Staff {
-      c8 c8 c8 c8
-      \times 4/5 {
-        c8 c8 c8 c8 c8
-      }
+      c8 c8 c8 c8 \tuplet 5/4 { c8 c8 c8 c8 c8 }
     }
   >>
   \layout {
     \context {
       \Score
-      \override SpacingSpanner #'uniform-stretching = ##t
+      \override SpacingSpanner.uniform-stretching = ##t
     }
   }
 }
@@ -3091,8 +3210,8 @@ les notes sans tenir compte des clefs, barres de mesure ou notes
 d'ornement qui pourraient apparaître :
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override Score.SpacingSpanner #'strict-note-spacing = ##t
-\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c]  c32[ c32] }
+\override Score.SpacingSpanner.strict-note-spacing = ##t
+\new Staff { c8[ c \clef alto c \grace { c16 c } c8 c c]  c32[ c] }
 @end lilypond
 
 @seealso
@@ -3118,7 +3237,7 @@ Morceaux choisis :
 @c Setting indent in \paper block makes not much sense, but it works.
 
 @c Bit verbose and vague, use examples?
-Deux réglages de bases ont une influence considérable sur
+Deux réglages de base ont une influence considérable sur
 l'espacement : @code{line-width} et @code{indent}.  Tous deux se
 placent dans le bloc @code{\layout}.  Ils contrôleront la longueur des
 lignes et l'indentation de la première.
@@ -3184,7 +3303,7 @@ point cette notation proportionnelle.
 
 @item @code{\remove "Separating_line_group_engraver"}
 
-@item @code{\override PaperColumn #'used = ##t}
+@item @code{\override PaperColumn.used = ##t}
 
 @end itemize
 
@@ -3198,11 +3317,7 @@ classique et justifiée à gauche.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
 }
@@ -3214,7 +3329,7 @@ doubles (donc des vingtièmes de ronde) qui terminent cette mesure
 n'en occupent pas la moitié de l'espace horizontal.
 
 En matière de gravure traditionnelle, cet espacement correspond tout à
-fait à nos attentes, puisque nous pouvons rogner l'espace sur la
+fait à nos attentes, puisque nous pouvons rogner de l'espace sur la
 blanche et ainsi gagner en largeur sur toute la mesure qui fait une
 ronde.
 
@@ -3227,17 +3342,13 @@ définissant la propriété @code{proportionalNotationDuration}.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c' c' c' c' c' }
     }
   >>
  \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
+      proportionalNotationDuration = #(ly:make-moment 1/20)
     }
   }
 }
@@ -3264,8 +3375,8 @@ prend deux arguments : un numérateur et un dénominateur qui
 représentent une fraction de ronde.  L'appel de
 @w{@code{(ly:make-moment 1 20)}} produit donc une durée de référence
 égale à un vingtième de ronde.  Vous pourriez tout aussi bien  utiliser
-@code{(ly:make-moment 1 16)}, @code{(ly:make-moment 1 8)} ou
-@code{(ly:make-moment 3 97)}.
+@code{(ly:make-moment 1/16)}, @code{(ly:make-moment 1/8)} ou
+@code{(ly:make-moment 3/97)}.
 
 Se pose alors le problème de fournir la juste durée de référence à
 @code{proportionalNotationDuration}.  Il faut en l'occurrence procéder par
@@ -3278,17 +3389,13 @@ une durée de référence élevée produira une musique resserrée.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 8)
+      proportionalNotationDuration = #(ly:make-moment 1/8)
     }
   }
 }
@@ -3296,17 +3403,13 @@ une durée de référence élevée produira une musique resserrée.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 16)
+      proportionalNotationDuration = #(ly:make-moment 1/16)
     }
   }
 }
@@ -3314,17 +3417,13 @@ une durée de référence élevée produira une musique resserrée.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 32)
+      proportionalNotationDuration = #(ly:make-moment 1/32)
     }
   }
 }
@@ -3348,16 +3447,10 @@ ajoutons lui une portée incluant un autre type de nolet.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
     \new RhythmicStaff {
-      \times 8/9 {
-        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
-      }
+      \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
     }
   >>
 }
@@ -3374,22 +3467,16 @@ les règles qu'elle applique peuvent amener à ce résultat.  Le recours à
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
     \new RhythmicStaff {
-      \times 8/9 {
-        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
-      }
+      \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
+      proportionalNotationDuration = #(ly:make-moment 1/20)
     }
   }
 }
@@ -3405,23 +3492,17 @@ allons activer le @code{uniform-stretching}, propriété attachée au
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
     \new RhythmicStaff {
-      \times 8/9 {
-        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
-      }
+      \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
-      \override SpacingSpanner #'uniform-stretching = ##t
+      proportionalNotationDuration = #(ly:make-moment 1/20)
+      \override SpacingSpanner.uniform-stretching = ##t
     }
   }
 }
@@ -3491,11 +3572,11 @@ réduire cet espace à zéro.
 }
 @end lilypond
 
-Les éléments non musicaux tels que métrique, armure et clef, posent
-problème lorsqu'on travaille en notation proportionnelle.  Bien
-qu'aucune notion de durée ne leur soit attachée, ces éléments
-@qq{consomment} de l'espace.  Différentes approches permettent
-cependant de gérer ce problème.
+Les éléments non musicaux tels que métrique, armure, clef et
+altérations, posent problème lorsqu'on travaille en notation
+proportionnelle.  Bien qu'aucune notion de durée ne leur soit
+attachée, ces éléments @qq{consomment} de l'espace.  Différentes
+approches permettent cependant de gérer ce problème.
 
 Éviter les problèmes d'espacement avec l'armure est chose aisée :
 il suffit qu'il n'y en ait pas ! C'est bien souvent le cas en
@@ -3514,24 +3595,14 @@ les deux portées suivantes :
 
 @lilypond[quote,verbatim,ragged-right]
 \new Staff {
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
-  c''8
-  c''8
-  c''8
-  \clef alto
-  d'8
-  d'2
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
+  c''8 c'' c'' \clef alto d' d'2
 }
 
 \new Staff {
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
-  \override Score.SpacingSpanner #'strict-note-spacing = ##t
-  c''8
-  c''8
-  c''8
-  \clef alto
-  d'8
-  d'2
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
+  \override Score.SpacingSpanner.strict-note-spacing = ##t
+  c''8 c'' c'' \clef alto d' d'2
 }
 @end lilypond
 
@@ -3548,12 +3619,12 @@ En plus de ceux que nous venons de voir, vous trouverez d'autres
 réglages en usage dans la notation proportionnelle comme, entre autres,
 
 @itemize
-@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
-@item @code{tupletFullLength = ##t}
-@item @code{\override Beam #'breakable = ##t}
-@item @code{\override Glissando #'breakable = ##t}
-@item @code{\override TextSpanner #'breakable = ##t}
-@item @code{\remove "Forbid_line_break_engraver" dans le contexte de voix}
+@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
+@item @code{\set tupletFullLength = ##t}
+@item @code{\override Beam.breakable = ##t}
+@item @code{\override Glissando.breakable = ##t}
+@item @code{\override TextSpanner.breakable = ##t}
+@item @code{\remove "Forbid_line_break_engraver"} (dans un contexte de voix)
 @end itemize
 
 Ces différents réglages permettent un espacement strict des notes
@@ -3575,8 +3646,8 @@ Morceaux choisis :
 @translationof Fitting music onto fewer pages
 
 Vous pourriez un jour être confronté au problème suivant : l'une
-des pages de votre partition ne comporte que deux portées alors que --
-ce qui est d'autant plus frustrant -- l'espace libre sur les autres
+des pages de votre partition ne comporte que deux portées alors que,
+ce qui est d'autant plus frustrant, l'espace libre sur les autres
 pages aurait permis une distribution différente.
 
 L'instruction @code{annotate-spacing} se révèle être un outil
@@ -3595,17 +3666,15 @@ rubrique @ref{Mise en évidence de l'espacement}.
 @subsection Mise en évidence de l'espacement
 @translationof Displaying spacing
 
-@funindex annotate-spacing
 @cindex espacement, affichage des valeurs
+@funindex annotate-spacing
 
 Le meilleur moyen d'appréhender les différentes variables de
 dimensionnement vertical sur lesquelles vous pouvez jouer au niveau de
 la mise en page consiste à activer, au sein du bloc @code{\paper}, la
 fonction @code{annotate-spacing} :
 
-@c need to have \book{} otherwise we get the separate systems. -hwn
-@lilypond[verbatim,quote]
-#(set-default-paper-size "a6" 'landscape)
+@lilypond[verbatim,quote,papersize=a6landscape]
 \book {
   \score { { c4 } }
   \paper { annotate-spacing = ##t }
@@ -3620,7 +3689,7 @@ feuille (@code{paper-height}) est de 59,75 espaces de portée
 (@code{staff-spaces}) et la taille de portée (@code{staff-size}) de
 20 points -- sa valeur par défaut.  Notez que :
 
-@multitable {1 staff-space} {staff-size)/4 * (25,4/72,27) mm}
+@multitable {1 staff-space} {(staff-size)/4 * (25,4/72,27) mm}
 
 @item 1 point
 @tab = (25,4/72,27) mm
@@ -3706,11 +3775,11 @@ Par exemple, un crochet de reprise ou d'alternative consomme de
 l'espace.  Le fait de les reporter sur plusieurs systèmes regroupés
 diminue d'autant l'espace disponible que si seul le premier ne
 comportait l'indication.  Autre exemple, les indications de nuance qui
-se @qq{détachent} d'un système peuvent être rapprochés de la portée :
+se @qq{détachent} d'un système peuvent être rapprochées de la portée :
 
 @lilypond[verbatim,quote,relative=1]
 e4 c g\f c
-e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
+e4 c g-\tweak X-offset #-2.7 \f c
 @end lilypond
 
 @item
@@ -3749,8 +3818,8 @@ valeur plus longue -- donnera un effet @qq{resserré} à la musique :
   \layout {
     \context {
       \Score
-      \override SpacingSpanner
-        #'common-shortest-duration = #(ly:make-moment 1 2)
+      \override SpacingSpanner.common-shortest-duration =
+        #(ly:make-moment 1/2)
     }
   }
 }
index 7f1d0208c14e030fad9b197006d48eb7d278388a..9e50bb07b2efb2f4d821a600aad2d74b2d6283fc 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: bdff8baf5bce0c4c456ebbf292ba8fc771e4bd31
+    Translation of GIT committish: 5c35684285613e8960e2dd4324559e1ee3774b9b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: John Mandereau
@@ -78,7 +78,7 @@ Nous allons voir ici comment créer des portées et comment les regrouper.
 Les @notation{portées} -- en anglais @emph{staff} (@emph{staves}
 au pluriel) -- sont créées à l'aide des commandes @code{\new} ou
 @code{\context}.  Pour de plus amples détails, consultez
-@ref{Création d'un contexte}.
+@ref{Création et référencement d'un contexte}.
 
 Le contexte de portée standard s'appelle @code{Staff} :
 
@@ -138,7 +138,7 @@ Glossaire musicologique :
 @rglosnamed{staves,portées}.
 
 Manuel de notation :
-@ref{Création d'un contexte},
+@ref{Création et référencement d'un contexte},
 @ref{Portées de percussion},
 @ref{Gravure de lignes rythmiques},
 @ref{Tablatures par défaut},
@@ -180,7 +180,7 @@ Référence des propriétés internes :
 @cindex système
 
 LilyPond dispose de différents contextes permettant de regrouper des
-portées individuelles et d'obtenir ainsi des @qq{systèmes}.  Chacun de
+portées individuelles et d'obtenir ainsi des « systèmes ».  Chacun de
 ces contextes définira le style de regroupement, avec son signe
 particulier en début de portée et ses règles de gestion des barres de
 mesure.
@@ -354,7 +354,7 @@ Référence des propriétés internes :
 
 Le nombre de systèmes peut varier d'une page à l'autre ; vous
 pouvez, en pareil cas, rendre plus évidente la séparation entre les
-systèmes en l'indiquant visuellement.  Ce @qq{séparateur} est absent par
+systèmes en l'indiquant visuellement.  Ce « séparateur » est absent par
 défaut, mais vous pouvez l'activer par une option au sein du bloc
 @code{\paper}.
 
@@ -456,67 +456,75 @@ moyen d'un objet graphique (@emph{grob}) à part entière, nommé
 @code{StaffSymbol} changera l'apparence de la portée, dès lors qu'elles
 auront été définies avant de créer la portée en question.
 
-Vous pouvez modifier le nombre de lignes d'une portée.
+Vous pouvez modifier le nombre de lignes d'une portée :
 
 @lilypond[verbatim,quote,relative=2]
 f4 d \stopStaff
-\override Staff.StaffSymbol #'line-count = #2
+\override Staff.StaffSymbol.line-count = #2
 \startStaff g, e |
 
 f'4 d \stopStaff
-\revert Staff.StaffSymbol #'line-count
+\revert Staff.StaffSymbol.line-count
 \startStaff g, e |
 @end lilypond
 
 Le positionnement de chacune des lignes de la portée est modifiable.
-Les valeurs s'expriment en @emph{demi} espace de portée, et la nouvelle
-position est déterminée par rapport à la ligne médiane.  Une ligne sera
-donc imprimée pour chaque valeur exprimée ; le nombre de lignes,
-ainsi que leur position dans la portée, peut donc se modifier à l'aide
-d'une seule commande.
+Une liste de nombres détermine le positionnement de chaque ligne.
+Le @code{0} correspond à la ligne médiane d'une portée habituelle, pour
+laquelle la liste est donc @code{(-4@tie{}-2@tie{}0@tie{}2@tie{}4)}.
+Une ligne sera donc imprimée pour chaque valeur exprimée ; le nombre de
+lignes, ainsi que leur position dans la portée, peut donc se modifier à
+l'aide d'une seule commande.
 
 @lilypond[verbatim,quote,relative=2]
 f4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(1 3 5 -1 -3)
+\override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
 \startStaff g, e |
 f'4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(8 6.5 -6 -8 -0.5)
+\override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
 \startStaff g, e
 @end lilypond
 
-La position de la clef et celle du do médium demanderont parfois un
-ajustement afin d'être en phase avec cette nouvelle portée.  Pour plus
-d'explications, reportez-vous aux exemples du chapitre @ref{Clefs}.
+Afin de préserver l'orientation habituelle des hampes -- ascendantes
+dans la partie inférieure de la portée, descendantes dans la partie
+supérieure -- la ligne (ou l'interligne) centrale de la portée
+personnalisée devra être en phase avec avec la ligne médiane d'une
+portée classique (0).  La position de la clef et celle du do médium
+demanderont parfois un ajustement afin d'être en phase avec cette
+nouvelle portée.  Pour plus d'explications, reportez-vous aux exemples
+du chapitre @ref{Clefs}.
 
 Lorsque vous modifierez l'épaisseur des lignes, gardez à l'esprit que
 les lignes supplémentaires et les hampes seront aussi modifiées.
 
 @lilypond[verbatim,quote,relative=1]
 \new Staff \with {
-  \override StaffSymbol #'thickness = #3
+  \override StaffSymbol.thickness = #3
 }
 { e4 d c b }
 @end lilypond
 
 L'épaisseur des lignes supplémentaires (@emph{ledger lines}) peut être
-déterminée indépendamment des lignes de la portée.  Dans l'exemple
-suivant, les deux nombres constituent des coefficients multiplicateurs
-de l'épaisseur de la ligne.  Ils sont fournis en argument pour
-déterminer l'épaisseur des lignes supplémentaires.
+déterminée indépendamment des lignes de la portée.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'thickness = #2
-  \override StaffSymbol #'ledger-line-thickness = #'(0.5 . 0.4)
+  \override StaffSymbol.thickness = #2
+  \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
 }
 { f'4 a, a,, f }
 @end lilypond
 
+@noindent
+La première valeur est multipliée par l'épaisseur de ligne de portée, la
+seconde par l'espace d'interligne ; ces deux valeurs sont alors
+combinées pour donner la nouvelle épaisseur des lignes supplémentaires.
+
 L'emplacement des lignes supplémentaires est réglable :
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'ledger-positions = #'(-3 -2 -1 2 5 6)
+  \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
 }
 { f'4 a, a,, f }
 @end lilypond
@@ -528,7 +536,7 @@ supplémentaires.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'ledger-extra = #4
+  \override StaffSymbol.ledger-extra = #4
 }
 { f'4 a, d, f, }
 @end lilypond
@@ -537,16 +545,16 @@ Des lignes supplémentaires peuvent apparaître y compris au sein d'une
 portée, notamment lorsque vous l'avez personnalisée.  L'exemple suivant
 illustre deux cas de figure quant au positionnement des lignes
 supplémentaires selon que la propriété @code{legder-position} est
-définie explicitement ou non.  La présence du @code{stopStaff} est ici
+définie explicitement ou non.  La présence du @code{\stopStaff} est ici
 rendue nécessaire pour annuler les effets de la commande
 @code{\override} qui s'applique à l'intégralité du @code{StaffSymbol}.
 
-@lilypond[fragment,quote,relative=1]
-\override Staff.StaffSymbol #'line-positions =   #'(-8 0 2 4)
+@lilypond[verbatim,quote,relative=1]
+\override Staff.StaffSymbol.line-positions =   #'(-8 0 2 4)
 d4 e f g
 \stopStaff
 \startStaff
-\override Staff.StaffSymbol #'ledger-positions = #'(-8 -6 (-4 -2) 0)
+\override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
 d4 e f g
 @end lilypond
 
@@ -555,7 +563,7 @@ lignes supplémentaires.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'staff-space = #1.5
+  \override StaffSymbol.staff-space = #1.5
 }
 { f'4 d, g, e, }
 @end lilypond
@@ -624,7 +632,7 @@ L'exemple qui suit utilise, pour aligner la portée d'ossia, la propriété
 lorsqu'il y a un nombre restreint d'ossias.
 
 @lilypond[verbatim,quote]
-\new Staff = main \relative c'' {
+\new Staff = "main" \relative c'' {
   c4 b d c
   <<
     { c4 b d c }
@@ -633,8 +641,8 @@ lorsqu'il y a un nombre restreint d'ossias.
       \remove "Time_signature_engraver"
       alignAboveContext = #"main"
       fontSize = #-3
-      \override StaffSymbol #'staff-space = #(magstep -3)
-      \override StaffSymbol #'thickness = #(magstep -3)
+      \override StaffSymbol.staff-space = #(magstep -3)
+      \override StaffSymbol.thickness = #(magstep -3)
       firstClef = ##f
     }
     { e4 d f e }
@@ -646,19 +654,19 @@ lorsqu'il y a un nombre restreint d'ossias.
 Dans le cas où de nombreux et courts fragments d'ossia affecteraient
 une même portée, il est judicieux de créer un contexte @code{Staff} vide
 auquel sera attribué un @emph{identifiant}. Il suffira alors, pour
-entamer un fragment d'ossia, de @qq{faire appel} à ce contexte grâce
+entamer un fragment d'ossia, de « faire appel » à ce contexte grâce
 aux commandes @code{\startStaff} et @code{\stopStaff}.  Vous vous
 rendrez compte à l'utilisation des avantages que procure cette façon de
 procéder, bien plus que dans l'exemple suivant.
 
 @lilypond[verbatim,quote,ragged-right]
 <<
-  \new Staff = ossia \with {
+  \new Staff = "ossia" \with {
     \remove "Time_signature_engraver"
-    \override Clef #'transparent = ##t
+    \hide Clef
     fontSize = #-3
-    \override StaffSymbol #'staff-space = #(magstep -3)
-    \override StaffSymbol #'thickness = #(magstep -3)
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
   }
   { \stopStaff s1*6 }
 
@@ -666,7 +674,7 @@ procéder, bien plus que dans l'exemple suivant.
     c4 b c2
     <<
       { e4 f e2 }
-      \context Staff = ossia {
+      \context Staff = "ossia" {
         \startStaff e4 g8 f e2 \stopStaff
       }
     >>
@@ -674,7 +682,7 @@ procéder, bien plus que dans l'exemple suivant.
     c4 b c2
     <<
       { g4 a g2 }
-      \context Staff = ossia {
+      \context Staff = "ossia" {
         \startStaff g4 e8 f g2 \stopStaff
       }
     >>
@@ -692,12 +700,12 @@ début de ligne.  Pour plus d'information au sujet de la commande
 
 @lilypond[verbatim,quote,ragged-right]
 <<
-  \new Staff = ossia \with {
+  \new Staff = "ossia" \with {
     \remove "Time_signature_engraver"
-    \override Clef #'transparent = ##t
+    \hide Clef
     fontSize = #-3
-    \override StaffSymbol #'staff-space = #(magstep -3)
-    \override StaffSymbol #'thickness = #(magstep -3)
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
   } \relative c'' {
     R1*3
     c4 e8 d c2
@@ -715,7 +723,7 @@ début de ligne.  Pour plus d'information au sujet de la commande
 \layout {
   \context {
     \Staff \RemoveEmptyStaves
-    \override VerticalAxisGroup #'remove-first = ##t
+    \override VerticalAxisGroup.remove-first = ##t
   }
 }
 @end lilypond
@@ -773,7 +781,7 @@ L'instruction @code{\Staff \RemoveEmptyStaves} placée dans un bloc
 @code{\layout} aura pour effet de masquer toute portée qui ne contient
 rien.  Dans les partitions d'orchestre, les portées qui n'ont que des
 silences sont habituellement masquées afin de gagner de la place.  Ce
-style d'édition s'appelle en anglais @qq{French Score}.
+style d'édition s'appelle en anglais « French Score ».
 Cette fonctionnalité masque et supprime toutes les portées vides d'une
 partition, hormis celles du premier système.
 
@@ -838,6 +846,7 @@ Manuel d'initiation:
 @rlearning{Visibilité et couleur des objets}.
 
 Manuel de notation :
+@ref{Modification des réglages par défaut d'un contexte},
 @ref{Symbole de la portée},
 @ref{Portées d'ossia},
 @ref{Dictée à trous},
@@ -862,8 +871,8 @@ de formatage.  En pareil cas il vaut mieux, au lieu de supprimer le
 graveur, recourir aux dérogations suivantes :
 
 @example
-\override StaffSymbol #'stencil = ##f
-\override NoteHead #'no-ledgers = ##t
+\omit StaffSymbol
+\override NoteHead.no-ledgers = ##t
 @end example
 
 En ce qui concerne les désagréments et messages liés à l'utilisation de
@@ -939,8 +948,9 @@ lignes, il faudra recourir à l'instruction @code{\center-column} :
   { f2 g4 f }
   \new Staff \with {
     instrumentName = \markup {
-      \center-column { "Clarinet" }
+      \center-column { "Clarinet"
       \line { "in B" \smaller \flat }
+      }
     }
   }
   { c4 b c2 }
@@ -1207,7 +1217,7 @@ oboeNotes = \relative c'' {
  }
 @end lilypond
 
-Les citations peuvent être @qq{balisées} par un nom particulier afin de
+Les citations peuvent être « balisées » par un nom particulier afin de
 les utiliser de différentes manières.  Pour de plus amples détails à ce
 propos, consultez le chapitre @ref{Utilisation de balises}.
 
index ceb31c381ee9fa14bdd5de1afe243be77c9f0471..04afd78674e18eac20a3b9c26ae9ea7896cfe06a 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: bdff8baf5bce0c4c456ebbf292ba8fc771e4bd31
+    Translation of GIT committish: 34f7824737173f1b485c8989dd0de6b45c8b7c2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @c Translators: Jean-Charles Malahieude
 @c Translation checkers: Valentin Villenave, John Mandereau
@@ -137,7 +137,7 @@ les marges du document requiert des calculs relativement lourds ;
 vous pouvez toutefois vous en affranchir en ajoutant
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
 @end example
 
 
@@ -156,7 +156,7 @@ ou ondulée.  Ces objets, que l'on appelle @qq{extenseurs}, se dessinent
 entre deux notes à l'aide de la syntaxe suivante :
 
 @lilypond[verbatim,quote,relative=2]
-\override TextSpanner #'(bound-details left text) = "rit."
+\override TextSpanner.bound-details.left.text = "rit."
 b1\startTextSpan
 e,\stopTextSpan
 @end lilypond
@@ -173,7 +173,7 @@ faites appel à un bloc @code{\markup} --
 voir @ref{Mise en forme du texte}.
 
 @lilypond[quote,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text) =
+\override TextSpanner.bound-details.left.text =
   \markup { \upright "rit." }
 b1\startTextSpan c
 e,\stopTextSpan
@@ -282,20 +282,27 @@ elle sera placée juste avant la première note de cette portée.  Enfin,
 une marque qui tomberait sur un saut de ligne sera imprimée au début
 de la ligne suivante.
 
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim,relative=2,ragged-right]
 \mark "Allegro"
 c1 c
 \mark "assai" \break
 c  c
 @end lilypond
 
+@funindex \markLengthOn
+@funindex markLengthOn
+@funindex \markLengthOff
+@funindex markLengthOff
+
+@predefined
+@code{\markLengthOn},
+@code{\markLengthOff}.
+@endpredefined
+
 @snippets
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-marks-at-the-end-of-a-line.ly}
 
-@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
-{aligning-marks-with-various-notation-objects.ly}
-
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-marks-on-every-staff.ly}
 
@@ -504,12 +511,12 @@ allegro = \markup { \bold \large Allegro }
 
 @noindent
 Pour une liste des différentes commandes spécifiques au mode
-@code{\markup}, consultez l'annexe @ref{Text markup commands} (en
+@code{\markup}, consultez l'annexe @ref{Commandes  pour markup} (en
 anglais).
 
 @seealso
 Manuel de notation :
-@ref{Text markup commands}.
+@ref{Commandes  pour markup}.
 
 Fichiers d'initialisation :
 @file{scm/markup.scm}.
@@ -1216,11 +1223,7 @@ notation :
 
 @lilypond[quote,verbatim,relative=1]
 g1 bes
-ees-\markup {
-  \finger 4
-  \tied-lyric #"~"
-  \finger 1
-}
+ees\finger \markup \tied-lyric #"4~1"
 fis_\markup { \dynamic rf }
 bes^\markup {
   \beam #8 #0.1 #0.5
@@ -1362,7 +1365,8 @@ d'une liste d'étiquettes.
 @end itemize
 
 Les différentes commandes permettant de générer des listes de lignes
-se trouve dans l'annexe @ref{Text markup list commands}.
+se trouve dans l'annexe @ref{Commandes pour liste de markups} (en
+anglais).
 
 @predefined
 @code{\markuplist}.
@@ -1370,7 +1374,7 @@ se trouve dans l'annexe @ref{Text markup list commands}.
 
 @seealso
 Manuel de notation :
-@ref{Text markup list commands},
+@ref{Commandes pour liste de markups}.
 
 Manuel d'extension :
 @rextend{Définition d'une nouvelle commande de liste de markups}.
@@ -1452,12 +1456,21 @@ comporte que des accolades ouvrantes.  Pour obtenir une accolade
 fermante, il suffit d'appliquer une rotation au glyphe sélectionné,
 comme indiqué à la rubrique @ref{Rotation des objets}.
 
-Vous disposez de trois familles de fontes textuelles : @emph{roman}
-pour la police sérif ou avec empattement -- fixée par défaut à New
-Century Schoolbook --, une police sans empattement (@emph{sans} sérif)
-et une à chasse fixe (ou monospace) -- les deux dernières étant
+Vous disposez de trois familles de fontes textuelles : @emph{roman} pour
+la police sérif ou avec empattement -- fixée par défaut à New Century
+Schoolbook --, une police sans empattement (@emph{sans} sérif) et une à
+chasse fixe (monospace ou @emph{typewriter}) -- les deux dernières étant
 déterminées par l'installation de Pango.
 
+@warning{Aucune police par défaut n'est associée aux familles
+@emph{sans} et @emph{typewriter}.  Lorsque l'une d'elles apparaît dans
+un fichier source, le résultat peut varier d'un ordinateur à l'autre.
+Le résultat sera homogène quelque soit la plateforme dès lors que ces
+polices auront été spécifiées par leur nom et qu'elles sont disponibles
+pour tout système amené à traiter le fichier.  Voir 
+@ref{Attribution d'une fonte en particulier} et
+@ref{Choix des fontes par défaut}.}
+
 Chaque famille dispose en principe de différents styles et niveaux de
 gras.  L'exemple qui suit illustre la manière de changer la famille, le
 style, la graisse ou la taille.  Notez bien que l'argument fourni à
@@ -1465,12 +1478,12 @@ style, la graisse ou la taille.  Notez bien que l'argument fourni à
 défaut.
 
 @lilypond[quote,verbatim,relative=2]
-\override Score.RehearsalMark #'font-family = #'typewriter
+\override Score.RehearsalMark.font-family = #'typewriter
 \mark \markup "Ouverture"
-\override Voice.TextScript #'font-shape = #'italic
-\override Voice.TextScript #'font-series = #'bold
+\override Voice.TextScript.font-shape = #'italic
+\override Voice.TextScript.font-series = #'bold
 d2.^\markup "Allegro"
-\override Voice.TextScript #'font-size = #-3
+\override Voice.TextScript.font-size = #-3
 c4^smaller
 @end lilypond
 
@@ -1525,8 +1538,8 @@ système, dès lors qu'elle est accessible par Fontconfig et que vous
 respectez la syntaxe suivante :
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.TimeSignature #'font-name = #"Bitstream Charter"
-\override Staff.TimeSignature #'font-size = #2
+\override Staff.TimeSignature.font-name = #"Bitstream Charter"
+\override Staff.TimeSignature.font-size = #2
 \time 3/4
 
 a1_\markup {
@@ -1569,8 +1582,10 @@ Morceaux choisis :
 Vous pouvez tout à fait préférer un autre jeu de polices par défaut que
 celui de LilyPond.  Il vous faudra alors spécifier les différentes
 familles, en respectant l'ordre @emph{roman}, @emph{sans empattement} et
-@emph{monospace}, comme dans l'exemple suivant.  Pour plus
-d'explications sur les fontes, relisez @ref{Tout savoir sur les fontes}.
+@emph{monospace}, comme dans l'exemple suivant ; ces fontes seront
+automatiquement mises à l'échelle de la taille globale des
+portées.  Pour plus d'explications sur les fontes, relisez
+@ref{Tout savoir sur les fontes}.
 
 @cindex polices, choix par défaut
 @cindex fontes, choix par défaut
@@ -1579,12 +1594,11 @@ d'explications sur les fontes, relisez @ref{Tout savoir sur les fontes}.
 
 @lilypond[verbatim,quote]
 \paper  {
-  myStaffSize = #20
   #(define fonts
     (make-pango-font-tree "Times New Roman"
                           "Nimbus Sans"
                           "Luxi Mono"
-                           (/ myStaffSize 20)))
+                           (/ staff-height pt 20)))
 }
 
 \relative c'{
index 78a6a67579a73cc0cdc76f56097aa3dbd0790c9f..35b84030ac3a218918b0667e2121f5eaf2dfd808 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: bdff8baf5bce0c4c456ebbf292ba8fc771e4bd31
+    Translation of GIT committish: d4c6b132223ef4312a637160503a132c2373f525
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -72,15 +72,15 @@ sont décrites dans @ref{Doigtés}.
 accord, voir @ref{Notes en accords}.  Les précisions pour jouer des accords
 peuvent être ajoutées, comme l'indique @ref{Arpèges}.
 
-@item Un modèle pour quatuor à cordes est disponible à la rubrique
-@rlearning{Quatuor à cordes}.  D'autres informations se trouvent dans les
-exemples de code.
+@item Un squelette de partition est disponible à l'annexe
+@rlearning{Modèles pour quatuor à cordes}.  D'autres informations
+se trouvent dans les exemples de code.
 
 @end itemize
 
 @seealso
 Manuel d'initiation :
-@rlearning{Quatuor à cordes}.
+@rlearning{Modèles pour quatuor à cordes}.
 
 Manuel de notation :
 @ref{Commentaires textuels},
index 73a0f8631011533dd79d11eec9fc0bf2ec2dd6f3..1e3a6f93dd5c9a279889a84df8ca2a48672c2ad1 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: 5c35684285613e8960e2dd4324559e1ee3774b9b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: Jean-Jacques Gerbaud
@@ -159,25 +159,6 @@ d'espaces une accolade :
 \lyricmode @{ lah lah lah @}
 @end example
 
-@cindex dérogations en mode paroles
-@funindex \override en mode \lyricmode
-
-De la même manière, un point concluant une suite de lettres sera
-partie intégrante de la chaîne résultante.  Par conséquent, il est
-impératif d'insérer des espaces lorsque vous modifiez les propriétés
-d'une commande.  En d'autres termes, @strong{ne saisissez pas}
-
-@example
-\override Score.LyricText #'font-shape = #'italic
-@end example
-
-@noindent
-mais plutôt
-
-@example
-\override Score . LyricText #'font-shape = #'italic
-@end example
-
 Pour utiliser des lettres accentuées ou des caractères spéciaux
 -- cœurs ou guillemets inversés par exemple -- il suffit de les insérer
 dans le fichier et de veiller à le sauvegarder avec le codage UTF-8.
@@ -409,7 +390,7 @@ qui contient cette mélodie :
 @lilypond[quote,verbatim,relative=2]
 <<
   \new Voice = "melodie" {
-    a4 a a a
+    a1 a4. a8 a2
   }
   \new Lyrics \lyricsto "melodie" {
     Ce sont les mots
@@ -475,8 +456,9 @@ sections @code{\addlyrics}.
 @end lilypond
 
 Cependant, la commande @code{\addlyrics} ne peut pas gérer les
-constructions polyphoniques.  Dans ce cas, mieux vaut employer
-@code{\lyricsto}.
+constructions polyphoniques et ne permet pas d'associer des
+paroles à un contexte @code{TabVoice}.  Dans ces cas là, mieux vaut
+employer @code{\lyricsto}.
 
 
 @subheading Utilisation de associatedVoice
@@ -624,11 +606,16 @@ mettre entre guillemets, soit utiliser le caractère souligné
 (@code{_}) pour obtenir une espace, ou bien encore utiliser un tilde
 (@code{~}) pour obtenir une liaison entre les syllabes.
 
-@lilypond[quote,ragged-right,verbatim]
+@lilypond[quote,ragged-right,verbatim,relative=2]
 {
-  \relative c'' { \autoBeamOff
-    r8 b c fis, fis c' b e, }
-  \addlyrics { Che_in ques -- ta_e_in quel -- l'al -- tr'on -- da }
+  { \autoBeamOff
+    r8 b c fis, fis c' b e,
+  }
+  \addlyrics
+  {
+    \override LyricHyphen.minimum-distance = #1.0 % Ensure hyphens are visible
+    Che_in ques -- ta_e_in quel -- l'al -- tr'on -- da
+  }
   \addlyrics { "Che in" ques -- "ta e in" quel -- l'al -- tr'on -- da }
   \addlyrics { Che~in ques -- ta~e~in quel -- l'al -- tr'on -- da }
 }
@@ -650,17 +637,17 @@ Référence des propriétés internes :
 @funindex \melisma
 @funindex \melismaEnd
 
-Parfois, tout particulièrement dans la musique médiévale, plusieurs
-notes correspondent à une même syllabe.  Ces vocalises sont appelées
-@rglosnamed{melisma,mélismes}.  La syllabe à vocaliser est
-traditionnellement alignée sur la gauche de la première note du mélisme.
+Parfois, tout particulièrement en musique médiévale ou baroque,
+plusieurs notes correspondent à une même syllabe.  Ces vocalises sont
+appelées @rglosnamed{melisma,mélismes}.  La syllabe à vocaliser est
+traditionnellement alignée par la gauche sur la première note du mélisme.
 
 Lorsqu'un mélisme tombe sur une syllabe autre que la dernière d'un mot,
 un trait d'union étiré, indiqué par un double tiret @w{@code{--}} dans
-le fichier source, reliera cette syllabe  à la suivante. 
+le fichier source, reliera cette syllabe à la suivante. 
 
 Lorsqu'un mélisme tombe sur la dernière syllabe d'un mot ou que ce mot
-n'en comporte qu'une, l'usage est d'indiquer la @qq{tenue} jusqu'à la
+n'en comporte qu'une, l'usage est d'indiquer la « tenue » jusqu'à la
 dernière note de la vocalise.  Ceci s'obtient en ajoutant un double
 caractère souligné @code{__} après cette syllabe.
 
@@ -900,6 +887,7 @@ Référence des propriétés internes :
 * Positionnement horizontal des syllabes::
 * Paroles et reprises::
 * Paroles alternatives::
+* Polyphonie et paroles communes::
 @end menu
 
 
@@ -1053,7 +1041,7 @@ question.  Voici comment cela se présente :
   <<
     \new Lyrics = "lyrics" \with {
       % lyrics above a staff should have this override
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff {
       \new Voice = "melody" {
@@ -1085,7 +1073,7 @@ deuxième méthode :
     \new Lyrics = "sopranos"
     \new Lyrics = "contraltos" \with {
       % lyrics above a staff should have this override
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff {
       \new Voice = "contraltos" {
@@ -1107,9 +1095,8 @@ deuxième méthode :
 @end lilypond
 
 Vous pouvez générer d'autres combinaisons de paroles et portées à partir
-de ces exemples, ou en examinant les 
-@rlearningnamed{Ensemble vocal,modèles} inclus dans le manuel
-d'initiation.
+de ces exemples, ou en examinant ce qui figure à la rubrique
+@rlearning{Modèles pour ensemble vocal} du manuel d'initiation.
 
 @snippets
 @lilypondfile[verbatim,quote,texidoc,doctitle]
@@ -1117,11 +1104,11 @@ d'initiation.
 
 @seealso
 Manuel d'initiation :
-@rlearning{Ensemble vocal}.
+@rlearning{Modèles pour ensemble vocal}.
 
 Manuel de notation :
 @ref{Ordonnancement des contextes},
-@ref{Création d'un contexte}.
+@ref{Création et référencement d'un contexte}.
 
 
 @node Positionnement horizontal des syllabes
@@ -1131,13 +1118,13 @@ Manuel de notation :
 @cindex espacement des paroles
 @cindex paroles, gestion de l'espacement
 
-La propriété @code{#'minimum-distance} de l'objet @code{LyricSpace}
+La propriété @code{minimum-distance} de l'objet @code{LyricSpace}
 permet d'accroître l'espacement des paroles.
 
 @lilypond[relative=1,verbatim,quote,ragged-right]
 {
   c c c c
-  \override Lyrics.LyricSpace #'minimum-distance = #1.0
+  \override Lyrics.LyricSpace.minimum-distance = #1.0
   c c c c
 }
 \addlyrics {
@@ -1163,7 +1150,7 @@ dans le bloc @code{\layout}.
   \layout {
     \context {
       \Lyrics
-      \override LyricSpace #'minimum-distance = #1.0
+      \override LyricSpace.minimum-distance = #1.0
     }
   }
 }
@@ -1181,7 +1168,7 @@ Afin de réduire le temps de traitement, vous pouvez désactiver cette
 fonctionnalité en ajoutant
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
 @end example
 
 Pour s'assurer que les paroles ne seront pas traversées par des barres
@@ -1193,7 +1180,7 @@ de mesure, il faut ajouter
     \Lyrics
       \consists "Bar_engraver"
       \consists "Separating_line_group_engraver"
-      \override BarLine #'transparent = ##t
+      \hide BarLine
   @}
 @}
 @end example
@@ -1672,6 +1659,123 @@ d'une fois sur l'autre :
 }
 @end lilypond
 
+Il n'est pas rare, en musique chorale, qu'une voix se divise
+pendant plusieurs mesures.  Bien qu'une construction du type
+@code{<< @{@dots{}@} \\ @{@dots{}@} >>}, où deux expressions
+musicales (ou plus) séparées par des doubles obliques inversées
+peuvent sembler être le moyen adéquat de définir cette division,
+@strong{toutes} les expressions qu'elle contient seront assignées à
+de @strong{nouveaux contextes de voix}, ce qui aura pour effet
+qu'aucune parole ne leur sera affectée -- les paroles sont
+attachées au contexte de voix initial.  Il vaut mieux construire
+ce passage comme une polyphonie temporaire -- voir
+@ref{Polyphonie sur une portée}.
+
+
+@node Polyphonie et paroles communes
+@unnumberedsubsubsec Polyphonie et paroles communes
+@translationof Polyphony with shared lyrics
+
+@cindex NullVoice
+@cindex polyphonie, mêmes paroles
+@cindex paroles communes à plusieurs voix
+@cindex \partcombine et paroles
+@funindex \partcombine
+
+Lorsque deux voix au rythme différent partagent les mêmes paroles,
+l'alignement des syllabes sur l'une des voix peut gêner la lecture de
+l'autre voix.  Par exemple, la deuxième extension de syllabe ci-dessous
+est trop courte puisque les paroles ne sont alignées que sur la voix du
+haut :
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+alto = \relative { g'2 b8( a g a) }
+words = \lyricmode { la __ la __ }
+
+\new Staff <<
+  \new Voice = "sopranoVoice" { \voiceOne \soprano }
+  \new Voice { \voiceTwo \alto }
+  \new Lyrics \lyricsto "sopranoVoice" \words
+>>
+@end lilypond
+
+Le résultat attendu sera obtenu grâce à l'alignement des paroles sur un
+contexte @code{NullVoice} supplémentaire, celui-ci contenant une
+combinaison judicieuse des deux voix.  Les notes du contexte
+@code{NullVoice}, bien que n'apparaissant pas sur la version imprimable,
+peuvent servir à aligner correctement les syllabes :
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+alto = \relative { g'2 b8( a g a) }
+aligner = \relative { b'8( c d c) b( a g a) }
+words = \lyricmode { la __ la __ }
+
+\new Staff <<
+  \new Voice { \voiceOne \soprano }
+  \new Voice { \voiceTwo \alto }
+  \new NullVoice = "aligner" \aligner
+  \new Lyrics \lyricsto "aligner" \words
+>>
+@end lilypond
+
+Le contexte @code{NullVoice} doit prendre place dans un contexte
+@code{Staff} et ne saurait contenir que des notes déjà présentes sur la
+portée en question, au même octave.  Dans le cas contraire, ce
+@code{NullVoice} pourrait interagir avec les autres voix imprimées de
+façon inopinée.  Par exemple, des notes arbitraires dans un
+@code{NullVoice} pourraient entraîner l'apparition ou la disparition
+d'altérations sur la portée considérée.
+
+Cette faàon de procéder permet par ailleurs d'utiliser la fonction
+@code{\partcombine} qui normalement ne peut s'utiliser avec des
+paroles :
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+alto = \relative { g'2 b8( a g a) }
+aligner = \relative { b'8( c d c) b( a g a) }
+words = \lyricmode { la __ la __ }
+
+\new Staff <<
+  \new Voice \partcombine \soprano \alto
+  \new NullVoice = "aligner" \aligner
+  \new Lyrics \lyricsto "aligner" \words
+>>
+@end lilypond
+
+@noindent
+La fonction @code{\partcombine} est abordée en détails dans
+@ref{Regroupement automatique de parties}.
+
+Pour finir, cette méthode est aussi utilkisable lorsque les voix sont
+sur des portées différentes, et ne se limite pas à deux voix :
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+altoOne = \relative { g'2 b8( a b4) }
+altoTwo = \relative { d'2 g4( fis8 g) }
+aligner = \relative { b'8( c d c) d( d d d) }
+words = \lyricmode { la __ la __ }
+
+\new ChoirStaff <<
+  \new Staff <<
+    \soprano
+    \new NullVoice = "aligner" \aligner
+  >>
+  \new Lyrics \lyricsto "aligner" \words
+  \new Staff \partcombine \altoOne \altoTwo
+>>
+@end lilypond
+
+Vous aurez remarqué que, dans la deuxième partie de la mesure ci-dessus,
+les notes du contexte @code{NullVoice} reprennent le rythme de la portée
+inférieure sans pour autant dévier une seule fois des hauteurs affichées
+dans la voix à laquelle ce @code{NullVoice} est attaché.  Bien que ce ne
+soit pas nécessaire dans le cadre de cet exemple particulier, nous vous
+conseillons de saisir les notes d'un @code{NullVoice} de cette manière.
+
 
 @node Couplets
 @subsection Couplets
@@ -1866,7 +1970,7 @@ propriété @code{includeGraceNotes} :
 <<
   \new Voice = melody \relative c' {
     f4 \appoggiatura a32 b4
-    \grace { f16[ a16] } b2
+    \grace { f16 a16 } b2
     \afterGrace b2 { f16[ a16] }
     \appoggiatura a32 b4
     \acciaccatura a8 b4
@@ -1895,7 +1999,7 @@ clause @code{\with} ou @code{\context} :
 @lilypond[verbatim,ragged-right,quote]
 <<
   \new Voice = melody \relative c' {
-    \grace { c16[( d e f] }
+    \grace { c16( d e f }
     g1) f
   }
   \new Lyrics \with { includeGraceNotes = ##t }
@@ -1926,9 +2030,9 @@ modifie la propriété @code{associatedVoice}.  Dans cet exemple,
     <<
       \new Voice = "alternative" {
         \voiceOne
-        \times 2/3 {
+        \tuplet 3/2 {
           % show associations clearly.
-          \override NoteColumn #'force-hshift = #-3
+          \override NoteColumn.force-hshift = #-3
           f8 f g
         }
       }
@@ -2073,7 +2177,8 @@ text = \lyricmode {
           "Je me suis fait sécher..."
         }
       }
-      \vspace #0.1 % ajout d'espace vertical entre les couplets
+      % ajout d'espace vertical entre les couplets
+      \combine \null \vspace #0.1
       \line { \bold "3."
         \column {
           "Chante, rossignol, chante,"
@@ -2089,7 +2194,8 @@ text = \lyricmode {
           "Sans l'avoir mérité..."
         }
       }
-      \vspace #0.1 % ajout d'espace vertical entre les couplets
+      % ajout d'espace vertical entre les couplets
+      \combine \null \vspace #0.1
       \line { \bold "5."
         \column {
           "Je voudrais que la rose"
@@ -2251,7 +2357,7 @@ manuel d'initiation, à la rubrique
 
 @item
 Plusieurs exemples et canevas sont regroupés dans le manuel
-d'initiation, à la rubrique @rlearning{Ensemble vocal}.
+d'initiation, à la rubrique @rlearning{Modèles pour ensemble vocal}.
 
 @item
 Des informations détaillées sur les contextes @code{ChoirStaff} et
@@ -2265,11 +2371,16 @@ Les formes de notation particulière, telle que celle utilisée en
 
 @item
 Lorsque plusieurs pupitres sont regroupés sur la même portée, les
-hampes, liaisons,  etc. de la voix supérieure sont orientées vers le
+hampes, liaisons, etc. de la voix supérieure sont orientées vers le
 haut, et inversement pour la voix inférieure.  L'utilisation de
 @code{\voiceOne} et @code{\voiceTwo} est expliquée au chapitre
 @ref{Polyphonie sur une portée}.
 
+@item
+La division temporaire d'un pupitre, ce qui correspond à un
+passage polyphonique temporaire, est expliquée à la section
+@ref{Polyphonie sur une portée}.
+
 @end itemize
 
 @predefined
@@ -2280,7 +2391,7 @@ haut, et inversement pour la voix inférieure.  L'utilisation de
 @seealso
 Manuel d'initiation :
 @rlearning{Partition pour chœur à quatre voix mixtes},
-@rlearning{Ensemble vocal}.
+@rlearning{Modèles pour ensemble vocal}.
 
 Manuel de notation :
 @ref{Ordonnancement des contextes},
@@ -2364,8 +2475,8 @@ du chœur.
   \layout {
     \context {
       \Score
-      \override DynamicText #'direction = #UP
-      \override DynamicLineSpanner #'direction = #UP
+      \override DynamicText.direction = #UP
+      \override DynamicLineSpanner.direction = #UP
     }
   }
 }
@@ -2590,7 +2701,7 @@ définition d'un @qq{instrument} pour chacun des rôles en question :
   #`((instrumentTransposition . ,(ly:make-pitch -1 0 0))
      (shortInstrumentName . "Kas.")
      (clefGlyph . "clefs.G")
-     (clefOctavation . -7)
+     (clefTransposition . -7)
      (middleCPosition . 1)
      (clefPosition . -2)
      (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Kaspar"))
@@ -2600,11 +2711,11 @@ définition d'un @qq{instrument} pour chacun des rôles en question :
   #`((instrumentTransposition . ,(ly:make-pitch 0 0 0))
      (shortInstrumentName . "Mel.")
      (clefGlyph . "clefs.F")
-     (clefOctavation . 0)
+     (clefTransposition . 0)
      (middleCPosition . 6)
      (clefPosition . 2)
      (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Melchior"))
-     (midiInstrument . "voice aahs"))
+     (midiInstrument . "choir aahs"))
 
 \relative c' {
   \instrumentSwitch "kaspar"
@@ -2621,7 +2732,7 @@ Manuel de notation :
 @ref{Noms d'instrument},
 @ref{Fonctions Scheme},
 @ref{Texte},
-@ref{Text markup commands}.
+@ref{Commandes pour markup}.
 
 Manuel d'extension des fonctionnalités :
 @rextend{Construction d'un markup en Scheme}.
@@ -2660,7 +2771,7 @@ pianoRH = \relative c'' {
   % position name of cue-ing instrument just before the cue notes,
   % and above the staff
   \new CueVoice {
-    \override InstrumentSwitch #'self-alignment-X = #RIGHT
+    \override InstrumentSwitch.self-alignment-X = #RIGHT
     \set instrumentCueName = "Flute"
   }
   \cueDuring "flute" #UP { g4 bes4 }
@@ -2704,8 +2815,8 @@ pianoRH = \relative c'' {
   \transposition c'
   % position name of cue-ing instrument below the staff
   \new CueVoice {
-    \override InstrumentSwitch #'self-alignment-X = #RIGHT
-    \override InstrumentSwitch #'direction = #DOWN
+    \override InstrumentSwitch.self-alignment-X = #RIGHT
+    \override InstrumentSwitch.direction = #DOWN
     \set instrumentCueName = "Clar."
   }
   \cueDuring "clarinet" #DOWN { c4. g8 }
@@ -2847,8 +2958,8 @@ dialogue = \lyricmode {
 \score {
   <<
     \new Lyrics \with {
-      \override LyricText #'font-shape = #'italic
-      \override LyricText #'self-alignment-X = #LEFT
+      \override LyricText.font-shape = #'italic
+      \override LyricText.self-alignment-X = #LEFT
     }
     { \dialogue }
     \new Staff {
@@ -2922,7 +3033,7 @@ indiquer les hauteurs ; le rythme de la mélodie est donné par le
 rythme et l'accentuation des paroles elles-mêmes.
 
 @lilypond[verbatim,quote]
-stemOff = { \override Staff.Stem #'transparent = ##t }
+stemOff = { \hide Staff.Stem }
 
 \relative c' {
   \stemOff
@@ -3016,9 +3127,9 @@ a4 b c2
 \bar "'"
 a4 b c2
 a4 b c2
-\bar ":"
+\bar ";"
 a4 b c2
-\bar "dashed"
+\bar "!"
 a4 b c2
 \bar "||"
 @end lilypond
@@ -3030,23 +3141,23 @@ besoins :
 
 @lilypond[verbatim,quote]
 divisioMinima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-minima
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 divisioMaior = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maior
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 divisioMaxima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maxima
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 finalis = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::finalis
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 
@@ -3162,8 +3273,7 @@ global = {
       \layout {
         \context {
           \Score
-          \override SpacingSpanner
-          #'base-shortest-duration = #(ly:make-moment 1 2)
+          \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
         }
         \context {
           \Staff
@@ -3194,7 +3304,7 @@ syllabes et non leur durée.
 @seealso
 Manuel d'initiation :
 @rlearning{Visibilité et couleur des objets},
-@rlearning{Ensemble vocal}.
+@rlearning{Modèles pour ensemble vocal}.
 
 Manuel de notation :
 @ref{Notations anciennes},
@@ -3357,11 +3467,12 @@ L'utilisation du mode @emph{markup} pour centrer le texte et agencer les
 lignes est abordée en détails au chapitre @ref{Mise en forme du texte}.
 
 La plupart de ces éléments sont regroupés dans l'un des versets du modèle
-@qq{Psalmodie}, à la rubrique @rlearning{Ensemble vocal}.
+présenté à la rubrique @rlearning{Psalmodie}.
 
 @seealso
 Manuel d'initiation :
-@rlearning{Ensemble vocal}.
+@rlearning{Psalmodie},
+@rlearning{Modèles pour ensemble vocal}.
 
 Manuel de notation :
 @ref{Fontes},
index 0a4f1eece23834f3959735565cb10ab363c438b4..6ecc9773253b5f98669fef2ad22e42f2c49cd5ba 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: bdff8baf5bce0c4c456ebbf292ba8fc771e4bd31
+    Translation of GIT committish: e6e64de1da49ff8c6005daa5fd81adc8387b2668
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
index f22e11f2d053fe528084ef24963f9af719659394..4ea2fffbf035436db1c578d9e14c24a0f7fdcdcd 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-    Translation of GIT committish: 5198521ee5e91631a2cbf236d79489b12624797b
+    Translation of GIT committish: 0bf3925c1f16b96867470eb1ba7286b7d6726a7b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
@@ -7,20 +7,20 @@
 
 <!--
 we depend on an external entity here, which we cannot control.  Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
 For some time, Google won't have the new location in its index, so the
-search would get nothing.  It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing.  It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
 -->
 
 <form action="http://google.com/search"
       method="get"
       name="search"
-      onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+      onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
                + search.brute_query.value"
-      onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+      onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
                   + search.brute_query.value"
-      onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+      onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
               + search.brute_query.value">
   <input type="hidden" name="btnG" value="Recherche sur Google">
   <input type="text" name="brute_query" onfocus="this.value=''" value="Rechercher">
diff --git a/Documentation/fr/texidocs/GNUmakefile b/Documentation/fr/texidocs/GNUmakefile
deleted file mode 100644 (file)
index 0ffa758..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
index a142b469938e5098b972a731a32a4fe64ecd2ffb..3af4bfd7f3a496463fe153e2d883c9f6d63ff74f 100644 (file)
@@ -1,8 +1,13 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Les symboles spécifiques au clavier main droite d'un accordéon
-s'indiquent à l'aide de @code{\\markup}.  Le positionnement de tels
-symboles s'ajuste grâce à des arguments @code{\\raise}.
+Cet extrait de code est rendu obsolète par l'apparition de commandes de
+@emph{markup} prédéfinies.  Il reste néanmoins utile à titre d'exemple
+sur la manière de combiner des symboles : le positionnement de tels
+symboles, ajoutés sous forme de @emph{markups}, s'ajuste à l'aide des
+arguments de @code{\\translate-scaled}.  La fonction
+@code{\\translate-scaled} est ici préférée à @code{\\translate} parce
+qu'elle permet au positionnement des parties symboliques de s'adapter
+aux changements de @code{font-size}.
 
 "
   doctitlefr = "Symboles de chant pour accordéon"
diff --git a/Documentation/fr/texidocs/accordion-registers.texidoc b/Documentation/fr/texidocs/accordion-registers.texidoc
new file mode 100644 (file)
index 0000000..92462e9
--- /dev/null
@@ -0,0 +1,11 @@
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
+  texidocfr = "
+Les symboles spécifiques aux registres d'accordéon sont disponible tant
+sous forme de @code{\\markup} que d'événements musicaux indépendants --
+un changement de registre a tendance à intervenir entre des événements
+musicaux réels.  Les registres de basse ne sont pas très standardisés.
+Les différentes commandes disponibles sont regroupées à l'annexe
+@rusernamed{Accordion Registers, Registres d'accordéon}.
+
+"
+  doctitlefr = "Symboles de registre pour accordéon"
index ee14f8a79a78c117605dc788be25a5cc1bb0f444..99ba5969c67f6300d3621836cc336e7357acee43 100644 (file)
@@ -1,16 +1,15 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Une ligne de basse chiffrée peut se positionner au-dessus ou en dessous
 d'une partie de basse, grâce à la propriété 
-@code{BassFigureAlignmentPositioning #'direction} attachée à un contexte
-@code{Staff}.  Les possibilités sont  @code{#UP} (ou @code{#1}) pour
+@code{BassFigureAlignmentPositioning.direction} attachée à un contexte
+@code{Staff}.  Les possibilités sont @code{#UP} (ou @code{#1}) pour
 au-dessus, @code{#CENTER} (ou @code{#0}) pour centrée, et @code{#DOWN}
 (ou @code{#-1}) pour en dessous.
 
 Cette propriété peut être sujette à modification au cours de la
-partition.  Il vous faudra insérer un @code{\\once \\override} si ce
+partition.  Il vous faudra insérer un @code{\\once \\override} si ce
 changement devait être temporaire.
 
 "
   doctitlefr = "Ajout d'une basse chiffrée au-dessus ou au-dessous des notes"
-
index 0368bd8c28afa27b3fa0de22e1c21a580e3e5e9e..f449ab62f28c7402ed7809ddce5d1042eeb4d721 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'@code{ambitus} peut être individualisé par voix.  Il faut en pareil
 cas éviter qu'ils se chevauchent.
 
 "
   doctitlefr = "Un ambitus par voix"
-
index 494073afa489b00bfb21aadf9a1f06534c78c68f..3dc7b4c35c6e99542e1b65cedc76510cca3a8879 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Lorsqu'une nouvelle portée vient s'ajouter après un saut de ligne,
 LilyPond préserve un espace juste avant le saut de ligne -- pour un
index e8b3d263573ca193230c104556dc195d1ee5d25d..31eae91382e649794688e08e8355d67b09b1adb0 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Vous pouvez ajouter une nouvelle portée, éventuellement de manière
 temporaire, après le début d'un morceau.
 
 "
   doctitlefr = "Ajout d'une portée supplémentaire"
-
diff --git a/Documentation/fr/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc b/Documentation/fr/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc
new file mode 100644 (file)
index 0000000..fd5c6b1
--- /dev/null
@@ -0,0 +1,14 @@
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
+  texidocfr = "
+Lorsque plusieurs voix cohabitent sur une même portée, déterminer
+l'octaviation d'une voix affectera la position des notes de toutes les
+voix, jusqu'à la fin du crochet d'octaviation. Si l'octaviation ne doit
+s'appliquer qu'à une seule voix, les positionnements du do central
+(propriété @code{middleCPosition}) et du crochet d'octaviation peuvent
+s'indiquer explicitement. Dans l'exemple suivant, le
+@code{middleCPosition} qui a normalement une valeur de 6 en clef de fa
+-- soit six crans au-dessus de la ligne médiane -- est déterminé à
+7 crans au-dessus (une octave) pour la durée de l'@emph{ottava}.
+
+"
+  doctitlefr = "Ajout d'une indication d'octave pour une seule voix"
index 82a757f75d2014aa42f3e2d10beaf4418eb01327..59050838a99896aacc148a08aeaca89d36613601 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'ajout du graveur @code{Bar_engraver} à un contexte @code{ChordNames}
 permet d'imprimer les barres de mesure entre les chiffrages.
index ce841e05816ecb8eeba4d3dc97ec4697f1dd9e6b..38255f83c73ce4175162ac7df19744e05f9e2d10 100644 (file)
@@ -1,13 +1,13 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La syntaxe de LilyPond demande parfois un positionnement inhabituel des
-parenthèses, crochets etc. qui peuvent s'entrelacer.  Par exemple, le
+parenthèses, crochetsetc. qui peuvent s'entrelacer.  Par exemple, le
 crochet ouvrant une ligature manuelle se place à la suite de la note
 de départ et sa durée, non pas avant.  De même, le crochet fermant se
 place à la fin de la ligature, y compris lorsque la dernière note se
 trouve incluse dans un nolet.  Cet extrait illustre la manière de
 combiner ligatures manuelles, liaisons d'articulation, de prolongation
-ou de phrasé, avec des nolets bornés par des parenthèses.
+ou de phrasé, avec des nolets bornés par des accolades.
 
 "
   doctitlefr = "Coexistence de ligatures et liaisons avec des rythmes comprenant des nolets"
index b08517df01e20d3e82989008cdfdd32648357996..7820febbe5883556042e3c0d30c952f9da4dc99b 100644 (file)
@@ -1,13 +1,12 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Grâce à la puissance des outils préconfigurés tels que la fonction
-@code{\\drummode} et le contexte @code{DrumStaff}, la saisie de
-parties pour percussions est extrêmement simplifiée@tie{}: chaque
-composant d'une batterie trouve sa place sur une portée dédiée (avec une
-clef spécifique) et les têtes de note sont spécifiques à chaque élément.
+@code{\\drummode} et le contexte @code{DrumStaff}, la saisie de parties
+pour percussions est extrêmement simplifiée : chaque composant d'une
+batterie trouve sa place sur une portée dédiée (avec une clef
+particulière) et les têtes de note sont spécifiques à chaque élément.
 Il est également possible d'affecter un symbole particulier à chaque
 élément, tout comme de restreindre le nombre de lignes de la portée.
 
 "
   doctitlefr = "Ajout de parties de batterie"
-
index f6f9d45054af46da00712cb0949bfaf7d5037340..4a419f7975b581964fc708fee25b033ca95aec3b 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Il est possible, à l'aide de la fonction @code{make-music}, d'ajouter
-divers éléments à des notes.  Voici comment attacher un doigté
+Il est possible, à l'aide de la fonction @code{map-some-music},
+d'ajouter divers éléments à des notes. Voici comment attacher un script
 supplémentaire à une note.
 
-En règle générale, réaliser préalablement un @code{display} (affichage)
+En règle générale, réaliser préalablement un @code{\\displayMusic}
 de la musique que vous souhaitez créer vous aidera à écrire la fonction
 chargée de structurer votre musique.
 
index 7ff98b2069e88a662d6b9ed28bf0cf3a62c8449e..6d10ed9eca7f6b42feada0f281307920a75392e8 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Les instructions de doigtés se saisissent selon une syntaxe très simple.
 
index c56b88ee8074f1f769e7fdb690002a7aab411243..0a10b50fa7601e8a4382158891cb013a1b8d3a6a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 L'ajout de doigtés à des tablatures s'obtient en conjuguant des
 @code{\\markup} et des @code{\\finger}.
index de24124d9314fb38697ae0fe2968919af2df59ba..671e77c64fb2f5c02a617779f28194a21e41c44c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Dans cet extrait est définie la commande @code{\\splitStaffBarLine} qui
 ajoute une double flèche après la dernière barre de mesure d'une portée,
diff --git a/Documentation/fr/texidocs/adding-links-to-objects.texidoc b/Documentation/fr/texidocs/adding-links-to-objects.texidoc
new file mode 100644 (file)
index 0000000..b6c69e3
--- /dev/null
@@ -0,0 +1,14 @@
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
+  texidocfr = "
+La fonction @code{add-link}, telle que définie ci-dessous, permet
+d'ajouter un lien au stencil d'un objet graphique.  Elle s'emploie
+au sein d'un @code{\\override} ou d'un @code{\\tweak}.  À noter
+que le fonctionnemment du @code{point-and-click} est perturbé sur
+les objets ainsi liés.
+
+Cette fonction n'est opérationnelle que pour une sortie PDF.
+
+La coloration des objets liés s'obtient par une commande séparée.
+
+"
+  doctitlefr = "Ajout de liens à des objets"
index d6b4922e7a37d28c231ddd232acd54254572d383..817c0fab8f2b6e57dde4ca5c62701501c6dd8da3 100644 (file)
@@ -1,9 +1,9 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Lorsque le nombre d'instruments cités dans la réduction pour piano se
 multiplie, vous pourriez avoir intérêt à créer votre propre fonction
 pour gérer ces repères.  La fonction musicale @code{\\cueWhile} prend
-quatre arguments@tie{}: la musique d'où provient la citation, telle que
+quatre arguments : la musique d'où provient la citation, telle que
 définie par @code{\\addQuote}, le nom qui sera mentionné en regard de
 cette citation, son positionnement -- @code{UP} ou @code{DOWN} selon
 qu'il sera attribué à @code{\\voiceOne} et placé au-dessus ou
index c8613b02f0cc71ae875ad96a40335834924eccd6..dcabd311337e19e8eb65427ceb2d696607b2225b 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La fonction @code{\\parenthesize}, qui permet de mettre un objet entre
 parenthèses, a ceci de particulier qu'elle est associée à un objet
index 4145ab2344e9eb742a005161ef48898ea090febc..fd9701b70aef62333c8d3640ee5a3c5044bc375a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Avec un peu de code Scheme, voici comment ajouter facilement
 la date du jour à votre partition.
index df8c56fae2e396bcfb3000a967f9edcc48a1612d..8177e24012c76e66ef617ae8f072cab221ea9c19 100644 (file)
@@ -1,5 +1,4 @@
-%% Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
-
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Lorsqu'un glissando s'étend dans la durée, on trouve parfois des
 indications temporelles, matérialisées par des hampes sans tête de note.
@@ -8,6 +7,6 @@ intermédiaires.
 
 L'alignement des hampes avec la ligne de glissando peut requérir
 quelques aménagements.
-"
 
+"
   doctitlefr = "Ajout de marques temporelles à un long glissando"
index 4f78034bbadd1964dbdd8d0f19112f4c64fd9e8e..120da08ec42ec07bc6e87ca9fa28a21d9ad69d60 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 D'ordinaire, le graveur @code{Volta_engraver} réside dans le contexte
 @code{Score}@tie{}; les crochets précédant une reprise s'impriment donc
index 9bcc2eb8ffd191f7fff4468009a816b47456e3f4..d896151262e84c23810eae99208bf908951dbb1b 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Dans certains cas de musique polyphonique complexe, une voix
 supplémentaire peut permettre d'éviter les risques de collision.
index c370fcd2d339a35b795f68251ee0c07acb4aa05b..1cf049d6c7269060bab0f9ec6c668fb398cfd258 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La propriété @code{spacing-increment} de @code{Score.GraceSpacing}
 permet d'ajuster l'espacement d'un groupe de notes d'ornement.
index 441f19341bceafbd4d3e62bb6681b4378f4642a6..c63245757aeaba57ca43f8d5a11ed66eb498d95e 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Cet extrait illustre la manière de réduire l'espace entre la ligne de
 paroles et la portée.
 
 "
   doctitlefr = "Ajustement de l'espacement vertical des paroles"
-
index 9625909cd2c81613b9967521745c1675d5636b8c..4c309a58fa8936ffbbaad93d1a169c64f9221c5b 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La propriété @code{shortest-duration-space} peut devoir être retouchée
 pour ajuster l'apparence des chutes ou sauts.
 
 "
   doctitlefr = "Ajustement du galbe des chutes ou sauts"
-
index 176ad95d774340e6ac2941e3c2cb9b8994cc57fa..8b2bd415902ffe66376522cf633ead1824ea45c9 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'alignement horizontal des noms d'instrument se gère à l'aide de la
-propriété @code{Staff.InstrumentName #'self-alignment-X}.  Les variables
+propriété @code{Staff.InstrumentName.self-alignment-X}.  Les variables
 @code{indent} et @code{short-indent}, attachées au bloc @code{\\layout},
 déterminent l'espace alloué à l'alignement des noms d'instrument,
 respectivement dans leurs formes développée et abrégée.
index 6443c04521fda1197924324fb95c498a4c0cea36..020df305572f2c5b52011e5b76ead6d0a967d2e5 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les numéros de mesure s'alignent en principe sur la droite de l'objet
 dont ils dépendent.  C'est normalement le coin gauche de la portée ou,
diff --git a/Documentation/fr/texidocs/aligning-marks-with-various-notation-objects.texidoc b/Documentation/fr/texidocs/aligning-marks-with-various-notation-objects.texidoc
deleted file mode 100644 (file)
index 065fef3..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
-  texidocfr = "
-Les indications textuelles peuvent s'aligner par rapport à d'autres
-objets que des barres de mesure, tels que @code{ambitus},
-@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar},
-@code{left-edge}, @code{key-cancellation}, @code{key-signature} ou
-@code{time-signature}.
-
-Par défaut, les indications textuelles sont alignées sur le milieu
-des objets de notation.  Bien entendu, vous pouvez modifier les
-propriétés des objets en question pour obtenir un autre résultat comme
-l'illustre la deuxième ligne de l'exemple.  Dans le cas de portées
-multiples, ces réglages doivent être faits pour chacune d'entre elles.
-
-"
-  doctitlefr = "Alignement des indications par rapport à divers objets de notation"
-
index 9cde9b90f6043edde93ae9579d1e5457b1ac957e..126494023e2b78c4ff03350df7cb7b78146e22d5 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Par défaut, la commande @code{\\mark} centre les objets sur la barre de
 mesure.  Ce comportement peut se modifier pour un alignement par la
diff --git a/Documentation/fr/texidocs/aligning-syllables-with-melisma.texidoc b/Documentation/fr/texidocs/aligning-syllables-with-melisma.texidoc
new file mode 100644 (file)
index 0000000..280d446
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
+  texidocfr = "
+Par défaut, une syllabe qui entame un mélisme est aligne sur la note par
+la gauche. Cet alignement peut se modifier à l'aide de la propriété
+@code{lyricMelismaAlignment}.
+
+"
+  doctitlefr = "Alignement de la première syllabe d'un mélisme"
index 33d70b26e65d69f1ed10b5eebfc1d89303b5f23e..5f7a0c348bb2829c3304621e4b21f58a8d8516d3 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'empilement des indications de doigté se fait par défaut à l'extérieur
 de la portée.  Néanmoins, il est possible d'annuler ce comportement.
 
 "
   doctitlefr = "Impression des doigtés à l'intérieur de la portée"
-
index efe38aff203dacd8a4f36bd47f7f8f511ddc8799..a49b8b72684cc3f34da918641d3f1b1fec5c09de 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La hauteur de hampe des notes ligaturées est gérée par la sous-propriété
 @code{beamed-lengths} des @code{details} de l'objet @code{Stem}.
 Lorsqu'elle ne comporte qu'une seule valeur, cette hauteur s'appliquera
 à toutes les hampes.  En présence de plusieurs arguments, le premier
-affectera les crochet, le second les doubles croches, et ainsi de suite.
+affectera les croches, le second les doubles croches, et ainsi de suite.
 Le dernier argument s'appliquera aussi aux notes de plus courte durée.
 Les arguments peuvent être des valeurs décimales.
 
index b70e35703f5f49d5ddd697f234638a363fa97658..33c43babc8719f2ee61aa8191e61cfb4079cac1f 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Deux méthodes alternatives vous permettent de gérer la numérotation des
 mesures en cas de reprises.
diff --git a/Documentation/fr/texidocs/alternative-breve-note.texidoc b/Documentation/fr/texidocs/alternative-breve-note.texidoc
deleted file mode 100644 (file)
index 9b902b5..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
-  texidocfr = "
-Voici comment obtenir une brève -- aussi appelée note carée --
-flanquée de deux barres verticales, au lieu d'une comme habituellement.
-
-"
-  doctitlefr = "Brève alternative, avec deux barres verticales"
diff --git a/Documentation/fr/texidocs/alternative-breve-notes.texidoc b/Documentation/fr/texidocs/alternative-breve-notes.texidoc
new file mode 100644 (file)
index 0000000..2fd998f
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
+  texidocfr = "
+Voici comment obtenir une brève -- aussi appelée note carée --
+flanquée de deux barres verticales, au lieu d'une comme habituellement.
+
+"
+  doctitlefr = "Brève alternative, avec deux barres verticales"
index a926888938aa5aec21f12748f04e4fb9342b2f0c..b1171eb8d838408c641c28d622f932380ac0cb8a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Si plusieurs voix se trouvent sur une même portée, on peut attribuer le
 graveur @code{Ambitus_engraver} au contexte @code{Staff} afin d'obtenir
index 4f5dfe5f63e94d36c5983bacfa1e9bad532b0033..8a067ed9fea70446490aed808ad4e9558c9b1ea1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Un @emph{ambitus} indique la tessiture, autrement dit les hauteurs
 extrêmes d'une voix.
index 2783d174d462d70d923aac3dab77fb2303df3f3e..05c9180a0d4afd70872a65aa24c46175a567c39c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les crochets d'analyse viennent par défaut se positionner au-dessous de
 la portée.  L'exemple suivant vous indique comment les faire apparaître
index 74d264401237e0dc4cb5bca4d0ff0cea271cfeb6..37007ce9a49c0b905975581d77c3d6653c65d5e8 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr ="
 Voici comment graver la plupart, sinon tous les symboles que
 LilyPond prend en charge en matière de musique ancienne.
index d2318de8f4722e9f5a9ff6e6d5bf57c8b9f0eead..fe5de2a53fd13fb830eb440ab27ffae7b4b6ccd9 100644 (file)
@@ -1,9 +1,9 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Voici comment vous pourriez transcrire du grégorien.  Pour mémoire, il
-n'y a en grégorien ni de découpage en mesure, ni de hampe@tie{}; seules
-sont utilisées des têtes de note blanches ou noires, ainsi que des
-signes spécifiques permettant d'indiquer des silences de différentes durées.
+n'y a en grégorien ni découpage en mesure, ni hampe ; seules sont
+utilisées des têtes de note blanches ou noires, ainsi que des signes
+spécifiques permettant d'indiquer des silences de différentes durées.
 
 "
   doctitlefr = "Exemples de notation ancienne -- transcription moderne de musique grégorienne"
index 5f204d38aff81f0d03ad425f5e03223c2cafeeee..aeb4bfe28701ae96292b42a2de14ccfbc2306bb5 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Lorsque l'on transcrit de la musique mensurale, un @emph{incipit} permet
 d'indiquer la tonalité et le tempo d'origine.  Si les musiciens sont de
 nos jours habitués aux barres de mesure qui présentent la structure
 rythmique d'une œuvre, elles n'étaient pas en vigueur à l'époque où ces
-pièces ont été composées, d'autant plus que la @qq{métrique} pouvait
+pièces ont été composées, d'autant plus que la « métrique » pouvait
 changer au fil des notes.  Un compromis consiste à imprimer des barres
 entre les portées plutôt que sur chacune d'elles.
 
index 782012c9ff7678dac7c9c1bbc65edd104484e2fc..241a915c5a8ad7f95ad04177df362856a285520d 100644 (file)
@@ -1,7 +1,6 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La métrique peut s'imprimer dans un style ancien.
 
 "
   doctitlefr = "Métrique ancienne"
-
index 1d14e751d7a1e3aa1d4fd723241e7ff23a694ddd..7833923690976d490112cabaaee25b99da3e85b3 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Cet exemple illustre la manière de présenter un cantique tel qu'on le
 trouve dans l'église anglicane.  Vous noterez comment sont ajoutés les
index c67a1e3b443d91b3a36ff3f1377a319313bf2472..f75a256c82fcfca830b02f400a22aa6d4d591f3a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La propriété @code{shapeNoteStyles} permet d'affecter un profil
 particulier à chaque degré de la gamme -- à partir de l'armure ou
index b597d848adc6c91c449a9da0330fe620daa962e8..7440e2ea518f79f0336704fa874eafe29ee71055 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Lorsque les improvisations ou @emph{taqasim} sont temporairement libres,
 la métrique peut ne pas apparaître, auquel cas on utilisera un
@@ -8,4 +8,3 @@ pourrait débuter une improvisation de @emph{hijaz}.
 
 "
   doctitlefr = "Improvisation en musique arabe"
-
index 16e7c75a9e0b4c0a28a51a1d1e0c2b58ba489aa9..94d68f4398455ce581b1694a5282af82f91800d9 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Une liaison peut adopter une courbe asymétrique afin de s'adapter au
 mieux à la ligne mélodique.
index 32247eb029450d93eda16118b802cb2f360f2544..e1da5c4d1052a2891a38f1293e94c2aa5af7976c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Dès lors que la propriété @code{subdivideBeams} aura été activée, une
 ligature sera subdivisée selon les préceptes de @code{beatLength}.
index ad235907f62bf1f84b866ec7fb28b5fc3f966e06..42053f0a472d6345de577cc3c8ee231b1c317b7a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 @code{shiftDurations} permet de modifier la longueur des notes d'un
 morceau.  Cette instruction prend deux arguments@tie{}: un coefficient
diff --git a/Documentation/fr/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc b/Documentation/fr/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc
new file mode 100644 (file)
index 0000000..7dcb6bb
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
+  texidocfr = "
+Afin de suivre la ligne mélodique, LilyPond peut inverser l'orientation
+de hampe de la note médiane, dès lors qu'aura été ajouté au contexte de
+voix le graveur @code{Melody_engraver} et adaptée la propriété
+@code{neutral-direction} de l'objet @code{Stem}.
+
+"
+
+  doctitlefr = "Changement automatique de l'orientation de hampe de la note médiane selon la mélodie"
index 01cf95b3629d9bfd133adea8e931fe6c87e9e184..374803bc9757f86a03ee8ae91b5a5b269150714b 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Doigtés et numéros de corde, lorsque affectés à des notes individuelles,
 évitent les hampes et ligatures.  Cette fonctionnalité n'est pas activée
-par défaut en ce qui concernes les notes appartenant à un accord.  Voici
+par défaut en ce qui concerne les notes appartenant à un accord.  Voici
 comment mettre en place la dérogation appropriée en pareil cas.
 
 "
index 3223e6a0f7c70917deb3f8d442b417865e2d87b8..427dfb935767be67b31946ac8e755f6af567e327 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Voici comment imprimer un accord développé sur une mesure ou une demie
 mesure (décommenter la ligne appropriée).
index 748194e77faf618370dabda51afe11215325ecf8..84bf32f8ea1b10223527a4f39f568d78905a8304 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les règles de ligature définies au niveau du contexte @code{Score}
 s'appliqueront à toutes les portées.  Il est toutefois possible de
-moduler au niveau @code{Staff} ou @code{Voice}@tie{}:
+moduler au niveau @code{Staff} ou @code{Voice} :
 
 "
   doctitlefr = "Définition de règles de ligature pour la partition"
index 2c9dd358ec96a96da9da5ac446320c1173116185..d3bce2d0a7daccdfde0a3194663a2ee3374b9dc0 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Aucune règle de ligature automatique n'est disponible pour une mesure à
 7/8.  Il faudra donc, en pareil cas, définir vous-même les règles de
index 6df040a61be6bb8c0e370f161b727be83e32f5f1..e9e461bf5e7bc72c09f6e63b1398b83a32791b88 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Il est normalement impensable qu'un saut de ligne tombe au milieu d'une
 ligature.  LilyPond permet néanmoins de l'obtenir.
index fe0fa8ef283204613b873b4c5a3181c213c82a15..c8eb1bc7fc80b274f665aa0dc7a9fbd05279584d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'instruction @code{\\whiteout} intercale un rectangle blanc contenant
 un @emph{markup}.  Dans la mesure où les lignes de la portée sont à un
index ceaa316631e98f9ab6424ee6ae2aaac8677c665a..7123409ee94ec2d77ec9a2305fc841e737cb2bee 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 @code{\\bookpart} permet de découper un ouvrage en plusieurs parties.
 La dernière page de chaque partie peut être affectée d'un
index 2ebf896adecd531d816ec1930f5514d2869c36bc..db20bca4cfac47d9b5a1b378639ea97b4bf61fd5 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les indications de respiration sont disponibles sous différentes
-formes : virgule (par défaut), trait, en V et @qq{voie de chemin de fer}
-(césure).
+formes : virgule (par défaut), trait, en V ou en « voie de chemin
+de fer » (césure).
 
 "
   doctitlefr = "Signes de respiration"
index a15d6d8ff3ce7fcc3ee58fd4f2c1e33105a422af..b5d6441115d4225220375b50ed2a031bfc4a4304 100644 (file)
@@ -1,16 +1,14 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Une portion d'un soufflet de crescendo peut être rendue invisible.
 Il suffit pour cela de dessiner un rectangle par dessus cette partie, ce
-qui aura pour effet de la rendre invisible.  Le rectangle est défini par
-un @emph{markup} contenant du code PostScript.
+qui aura pour effet de la rendre invisible.
 
-La taille et le positionnement de ce @emph{markup} sont ajustables grâce
-à certaiins composants du code PostScript@tie{}: le nombre précédant
-@code{setgray} donnera du gris s'il est inérieur à@tie{}1@tie{}; les
-deux nombres précédant @code{scale} définissent la largeur et la hauteur
-du rectangle@tie{}; les deux nombres précédant @code{translate}
-modifient le point d'ancrage (en abscisse et en ordonnée) du rectangle.
+La commande de @emph{markup} @code{with-dimensions} indique à LilyPond
+de ne prendre en considération que l'extrémité inférieure du rectangle
+lors de son positionnement par rapport au soufflet.  L'ajustement de la
+propriété @code{staff-padding} permet d'éviter au rectangle de venir
+s'intercaler entre le soufflet et la portée.
 
 Le soufflet doit se trouver à un niveau inférieur à celui du @emph{markup}
 afin que le dessin du rectangle puisse effectivement le recouvrir.
index c967dc112874bb1d7a7b4cc7dcd92c54e2c96379..2f91e1dae04e754dd5e975413b9fdaade0fd59e8 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Une césure peut parfois s'indiquer par une double respiration surmontée
 d'un point d'orgue.  Le code ci-dessous permet d'obtenir la combinaison
 répondant à cette esthétique.
 
 "
-  doctitlefr = "Césure en forme de \"voie de chemin de fer\" avec point d'orgue"
+  doctitlefr = "Césure en forme de « voie de chemin de fer » avec point d'orgue"
index 113303e27216cbbd41354082117ad4b3bcc7cf2c..27ada29e45f2ea3df0b59642b1d764116851334a 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La fonction comprise dans l'extrait suivant permet d'ajouter du texte
--- comme @qq{molto} o @qq{poco} -- en dessous d'un soufflet de
+-- comme « molto » ou « poco » -- en dessous d'un soufflet de
 (de)crescendo.  Cet exemple présente aussi comment, à l'aide de code
 Scheme, influencer la manière dont un objet est normalement imprimé.
 
index b4a52231a99c23435883927d0d0a3d9038a59991..399852b689a50da59f8210907612426ab636cd9f 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Des raisons techniques sont à l'origine de la difficulté de centrer des
 scripts textuels attachés à des têtes de note, ce qui n'est pas le cas
index 90812761453d49cf545393743c7295ca67f3beea..5a7db54732de602b2724f85a66124b1f7deb1c6c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Il est possible de rapetisser le cercle d'un @code{\\flageolet} grâce
 à une fonction Scheme.
index 6f99cc55d2e19e2c1884b33a450fd10c671d36b7..f8b85f8355252c1d4a57d2d50382d50e3e148ff9 100644 (file)
@@ -1,12 +1,13 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
+
 La commande @code{\\tweak} permet de modifier la propriété
 @code{font-size} d'une note particulière d'un accord.
 
 Il s'agit de placer, à l'intérieur même de l'accord (dans la
-construction @code{<@tie{}>}) et avant la note considérée,
-l'instruction @code{\\tweak} suivie de @code{#'font-size} et de définir
-la taille voulue -- comme @code{#-2} pour une petite tête.
+construction @code{< >}) et avant la note considérée, l'instruction
+@code{\\tweak} suivie de @code{font-size} et de définir la taille voulue
+-- comme @code{#-2} pour une petite tête.
 
 "
   doctitlefr = "Modification de la taille d'une note particulière d'un accord"
index 9ed6ceaecf9b2671c959678134e85693877054c0..6f2df7799c3000a2bfec90c2a435750cb49d52c8 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 LilyPond insère automatiquement des ligatures coudées -- certaines
 hampes vers le haut, d'autres vers le bas -- lorsqu'il détecte un
 intervalle important entre des têtes de notes.  Ce comportement peut
 être changé par l'intermédiaire de l'objet @code{auto-knee-gap} --
-défini par défaut à @samp{5,5} espace, plus la largeur et la pente de la
+défini par défaut à 5,5 espaces, plus la largeur et la pente de la
 ligature en question.
 
 "
index 8cc023a6aed9fa4162b7da35a2347837273c37e9..18c29ac2a520c7724812e1082a8c06d3b9e0b186 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le séparateur de termes d'un chiffrage peut adopter n'importe quelle
 forme à l'aide d'un @emph{markup}.
index ee68872faa0546b92787ca4bc60ce3e4c0eb8c0e..f81e1890f59726c687996af46b7b341a3074da54 100644 (file)
@@ -1,9 +1,9 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Dans le cas où ce silence dure moins de dix mesures, LilyPond imprime sur
-la portée des @qq{silences d'église} -- @emph{Kirchenpause} en
+la portée des « silences d'église » -- @emph{Kirchenpause} en
 allemand -- et qui sont une simple suite de rectangles.  La propriété
-@code{expand-limit} permet d'obtenir un silence unique@tie{}:
+@code{expand-limit} permet d'obtenir un silence unique :
 
 "
-  doctitlefr = "Modifier l'apparence d'un silence multi-mesures"
+  doctitlefr = "Modifier l'apparence d'un silence multimesure"
index 70e1300c0b681d44b5e702543ef73887d17ba356..2f9a73b6667cc49b2f1c3de5b2e906d34c2368cb 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les diagrammes de fret peuvent s'orienter de trois manières différentes.
 Ils s'aligneront par défaut sur la corde du haut ou le sommet du fret.
 
 "
   doctitlefr = "Orientation des diagrammes de fret"
-
index 7c756b111aab9d59396682bc236b34154d8e5ef1..5627253e70bd7d18b6077d7803ce66d2589dec64 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Lorsque LilyPond génère un fichier MIDI, chaque portée sera par défaut
 affectée à un canal, quel que soit le nombre de voix qu'elle contient.
index 7549a192c8d1e0c73a3d27a07ef6c1bb0a379957..8fc4c873a9341d35ae787c02546385e0ae2e086f 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Lorsque vous regroupez automatiquement des parties, vous pouvez
 modifier le texte qui sera affiché pour les solos et pour les parties à
index c31eaa34babc066ed0b41da2c46a4a620506be8b..35126bfdd7e78d74e48cd66d93d7501948c22264 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La commande @code{\\applyOutput} permet de personnaliser n'importe quel
 objet de rendu.  Elle requiert une fonction Scheme à trois arguments.
index 65ad34c1bee74a3e34147e9452c8e04e254d7c01..bc37bd247dfffded32b71a9af6c0cb7f3206a8ec 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Chaque couplet peut disposer de sa propre fonte, y compris son numéro.
 
index 486ee6b5c9f91d945b8f4707c717bbfd2fad34bb..6afa6cf328b3ac505104bf2794037f56ac0b9c8a 100644 (file)
@@ -1,12 +1,11 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Le texte par défaut des crescendos et decrescendos se change en
 modifiant les propriétés de contexte @code{crescendoText} et
 @code{decrescendoText}.  L'aspect de la ligne d'extension est fonction
-de la propriété @code{'style} du @code{DynamicTextSpanner}.  Sa valeur
+de la propriété @code{style} du @code{DynamicTextSpanner}.  Sa valeur
 par défaut est @code{'hairpin}, mais d'autres valeurs sont disponibles,
 comme @code{'line}, @code{'dashed-line} et @code{'dotted-line}.
 
 "
   doctitlefr = "Modifidation du texte et de l'extension de nuances textuelles"
-
index 5da442eda093f4bd86f6bd39ecd3c079a7548095..e4a866208e14432d8637016b55c967041309d07c 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'affichage d'un @emph{ambitus} peut s'affiner pour répondre à vos
 préférences en matière d'esthétique.
+
 "
   doctitlefr = "Réglage de l'affichage d'un ambitus"
-
index ba2e5ad5ddc035f2bc64092370298fc654fef57b..fd795ddec915f83f151e3e1b1485a3ae3f68be1f 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Une liaison d'articulation peut se présenter sous la forme d'un trait
 continu ou discontinu, voire en pointillé.
index 16749bbadee29901b04bed415ddf98456872c673..697267a87230461c7cb88a1e677239e3d255dfaa 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 On peut choisir le glyphe imprimé par cette commande, en modifiant la
 propriété @code{text} de l'objet @code{BreathingSign}, pour lui affecter
@@ -6,4 +6,3 @@ n'importe quelle indication textuelle.
 
 "
   doctitlefr = "Modification de l'indicateur de respiration"
-
index db5084fc5c6dae3a1ad62ac031d43eb4da168f81..1e7cdfb70e7fe2693be68042885b08012825498e 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 LilyPond adpote par défaut la dénomination anglaise pour le nom et
 chiffrage des accords.  L'instruction @code{\\germanChords} permet
index 50769e6092ec5a7cc92141c8daa206e0e1ee087a..61bd5dbb17d16461a66a72aff36fb09f1c00bb85 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Les familles de fontes par défaut pour le texte peuvent être changées à
 l'aide de la fonction @code{make-pango-font-tree}.
index 235261e3810a04c9de449abfc3c594aace324cce..fb070fbb96029fb0a3fd4db7a1e7a07fc43648b3 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 @code{staffLineLayoutFunction} permet de changer le positionnement des
 notes.  Dans cet exemple, la valeur qui lui est attribuée --
index 37e7b8eda8d06d6a3b352e16b54084dda73f584f..a4ccda5989719488e9a3fbfd190a7e45d8a83546 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Voici comment modifier le nombre de points d'augmentation
-affectés à une note en particulier.
+Le nombre de points d'augmentation affectés à une note en particulier
+peut se modifier indépendamment des points placés après la note.
 
 "
   doctitlefr = "Spécification du nombre de points d'augmentation d'une note"
-
index 76c21ffd7884ad7faaf8de35a7586a206959eb0d..cf9fcc7205ca3e59f2e6d3b868914353ed4aabe1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Le nombre de lignes d'un portée se modifie par adaptation de la
 propriété @code{line-count} du @code{StaffSymbol}.
index 946faed66548b4c9a323d6faee1caad99192cdc4..09a6feb837e22b781fdfda694a45582ac49346d5 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 On peut choisir d'imprimer les altérations et signes plus aussi bien
 avant qu'après les chiffres, en réglant les propriétés
index a34d3aebf21ff5bc08321b771f1037887dc51969..e1ce3a8a3432425ed29a2439ed7a56f6db16b495 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La taille et l'épaisseur des diagrammes de doigté pour bois est modifiable
 à souhait.
index 817b139dae505b89de3bceadbf56fb97f4bd8178..11c96b6acdaf7928a4c6833217fbb68f0a954902 100644 (file)
@@ -1,9 +1,9 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Bien que le meilleur moyen de définir la taille des portées consiste à
 utiliser @code{#(set-global-staff-size xx)}, une portée en particulier
 peut se redimensionner en affectant d'un coefficient ses propriétés
-@code{'staff-space} et @code{fontSize}.
+@code{staff-space} et @code{fontSize}.
 
 "
   doctitlefr = "Modification de la taille d'une portée"
index b2846c20134ebc68b7ea04a0b535eb58b259bb98..2925f8b04d4d6d9349af9d1e11d4e03dd9f60eb4 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Vous pouvez indiquer un changement de tempo pour le fichier MIDI sans
 pour autant l'imprimer.  Il suffit alors de le rendre invisible aux
index e168f2993844a03537f92c4b89a21cf13236030a..7a1f566fbdd34da32b7e311147444e28ffa9a765 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 @code{Staff.pedalSustainStrings} permet de définir le texte affiché pour
 les instructions de pédale.  Les seuls caractères autorisés sont les
index cfde5eef2412e08d5f2714e1f022d9d57dfa2a89..99c61aefee0c593aa82477bad9e52a9e5e1387a5 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'apparence du chiffre est déterminée par la propriété @code{text} dans
 @code{TupletNumber}.  La valeur par défaut imprime seulement le
-dénominateur, mais si elle est définie par la fonction
+numérateur, mais si elle est définie par la fonction
 @code{tuplet-number::calc-fraction-text}, la fraction entière
 @var{num}:@var{den} sera imprimée à la place.
 
index bf2a781d0eeb01cab12a0a67ddca4a3ef362f5f8..25f5774dd67a6313cb53affcc0453660e13044c1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La propriété @code{measureLength}, conjointement avec
 @code{measurePosition}, détermine l'endroit où une barre de mesure est
index 17826c441795fbc345e175dd64ad5497017bc24b..d3714edbd302d48f899f56b91dc87ab0f4dedb11 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Ce style de notation permet d'indiquer la mélodie d'une psalmodie
 lorsque les strophes sont de longueur inégale.
 
 "
   doctitlefr = "Notation pour psalmodie"
-
index f00091be5465714ac5ed94da2b31566b3d134b21..781363af2fe9265b52b8f2ded6e297e1d1ad9216 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Un glissando sur des accords s'indique dans un @code{TabStaff} de la
 même manière que dans un @code{Staff}, à ceci près que nous aurons
index 6669ab6756cf9e72c547478b25fc85b9a2c0885e..c627f16df96660ea5523605a4a02d6b285029896 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Il est possible de créer votre propre modèle de chiffrages en
 réglant la propriété @code{chordNameExceptions}.
index f9efeac46f0c36a3102e3ed17b0271129cce5c5f..e596a69c993f73211010a6ecc25d45d55aeb4f51 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La représentation d'un accord de septième majeure se gère par le
 @code{majorSevenSymbol}.
index 277334d990517c9dab7d6763ea07af27e9512a82..6e296187f34f81c1f9a4f6b294d8e47a4d44568d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Vous pouvez opter pour n'imprimer les diagrammes de fret qu'à l'occasion
 d'un changement d'accord ou de saut de ligne.
index 91126ad658ee512ff04a4e84807fd6f1427a49af..05423211f93d7524a3858701f66bf5a54fe1f114 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Les clefs peuvent être transposées d'un intervalle différent de l'octave.
 
index bf48f1a7cd4a590678e4b548e459c0fd175b0265..1da917e27b126c38e8eb883a0bc66e54085931bc 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le code ci-dessous permet de réaliser des découpes à l'emporte pièce,
 autrement dit d'extraire des fragments, au sein d'une partition.
index d0c8ab2ac848a5cf3fa96e34f2036108be5788ed..23224739f3cc8b2a435da99b1fd4a761f8d059fb 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Un cluster indique à l'instrumentiste qu'il doit jouer tout une suite de
 sons.
index 64021040bceb2d967ae4159f85d303149b115bfe..629a4f6fa4693209145b38d543c183e6c673c115 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Les têtes de note peuvent adopter une couleur différenete selon leur
+Les têtes de note peuvent adopter une couleur différente selon leur
 hauteur ou leur nom : la fonction utilisée ici fait même la distinction
 entre enharmoniques.
 
index 1425d189c54acf6f0ed9c3b098695395711bec8c..7f94090c728e55195b40ff626f0220b49497fc71 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Certaines indications de nuance peuvent requérir un complément textuel,
 comme @qq{più forte} ou @qq{piano subito}.  Elles se réalisent aisément
index 88f04b609a03423c6b75fcce278327d734967dcb..9393274461b30e93e7b93d52e4ad03619f9727cb 100644 (file)
@@ -1,20 +1,19 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'outil de combinaison de parties (la commande @code{\\partcombine})
 permet d'avoir deux parties différentes sur une même portée.  LilyPond
-ajoute automatiquement des indications textuelles, telles que @qq{solo}
-ou @qq{a2}.  Si votre intention n'est que de fusionner les parties, sans
+ajoute automatiquement des indications textuelles, telles que « solo »
+ou « a2 ».  Si votre intention n'est que de fusionner les parties, sans
 ajouter de texte, assignez faux à la propriété
 @code{printPartCombineTexts}.  Dans le cas de partitions vocales, et
-plus particulièrement d'hymnes, ces @qq{solo/a2} ne sont d'aucune
+plus particulièrement d'hymnes, ces « solo/a2 » ne sont d'aucune
 utilité, aussi vaut-il mieux les désactiver.  Dans le cas où il y aurait
 alternance entre @emph{solo} et @emph{tutti}, il vaut mieux faire appel
 à de la musique polyphonique standard.
 
-Voici trois moyens d'imprimer deux parties sur une même portée@tie{}: en
+Voici trois moyens d'imprimer deux parties sur une même portée : en
 polyphonie normale, avec @code{\\partcombine} sans indication
 supplémentaire, et avec @code{\\partcombine} commentée.
 
 "
   doctitlefr = "Combinaison de deux parties sur une même portée"
-
index 5720d1387c9ed2d7480e58877c0b90fc19893269..8b0b0cd9bbb58dfe0e2c3332f80fe6d46b6a8983 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
-Des métriques telles que @qq{5/8} peuvent s'interpréter sous une forme
-décomposée --- @qq{3/8 + 2/8} par exemple --- qui combine plusieurs
+Des métriques telles que « 5/8 » peuvent s'interpréter sous une forme
+décomposée -- « 3/8 + 2/8 » par exemple -- qui combine plusieurs
 métriques.  LilyPond est capable de rendre ce type de notation, plus
 facile à lire et à interpréter, en imprimant cette métrique composite
 et en adaptant les règles de ligature automatique en conséquence.
index 3eff0f0dd01cea70fa5999ddaefc654e9d5c2d79..50d212319793770f6a7790bf3f1ccead917447e0 100644 (file)
@@ -1,15 +1,16 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Les règles de ligature par mesure sont gérées par la propriété
 @code{beatStructure}.  Ses valeurs par défaut sont répertoriées, par
 métrique, dans le fichier @code{scm/time-signature-settings.scm}.  Elles
 sont modifiables grâce à la commande @code{\\set}.
+
 La fonction Scheme @code{set-time-signature} permet quant à elle de
 définir à la fois la métrique et la pulsation.  Celle-ci prend trois
-arguments@tie{}: le nombre de pulsations, la durée de la pulsation et le
+arguments : le nombre de pulsations, la durée de la pulsation et le
 regroupement des pulsations dans la mesure.   @code{\\time} et
 @code{set-time-signature} s'appliquent tous deux au contexte
-@code{Timing}@tie{}; ils ne redéfiniront donc pas les valeurs de
+@code{Timing} ; ils ne redéfiniront donc pas les valeurs de
 @code{beatStructure} ou @code{baseMoment} lorsqu'elles sont
 modifiées dans un contexte de niveau inférieur comme @code{Voice} par
 exemple.
diff --git a/Documentation/fr/texidocs/consistently-left-aligned-bar-numbers.texidoc b/Documentation/fr/texidocs/consistently-left-aligned-bar-numbers.texidoc
new file mode 100644 (file)
index 0000000..b8b8886
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
+  texidocfr = "
+L'alignement des numéros de mesure par la gauche peut générer des
+problèmes de chevauchement, notamment avec les crochets de regroupement
+de portées.  L'exemple ci-dessous offre une solution en alignant par la
+droite le numéro de la mesure suivant un saut de ligne.
+
+"
+  doctitlefr = "Adaptation de l'alignement des numéros de mesure"
index 259c6cc767404b41294547d1aeb790f7ca143a34..d01012050d9ec47132723d3ee3545f1dfe3256d4 100644 (file)
@@ -1,9 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 De nos jours, il peut arriver que la note d'arrivée d'un glissando soit
 absente de la partition.  Pour ce faire, il vous faudra utiliser une
-cadence et @qq{masquer} la note d'arrivée.
+cadence et « masquer » la note d'arrivée.
 
 "
   doctitlefr = "Glissando contemporain"
-
index f48e3c8cfbdc26f6e286ba21a389716c9cf046f5..5532b5b302364c79720f27b832db2a9def4c1df2 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La visibilité des extensions qui se terminent sur la première note après
-un saut de ligne est contrôlé par un appel de @code{after-line-breaking}
+un saut de ligne est contrôlée par un appel de @code{after-line-breaking}
 à la fonction @code{ly:spanner::kill-zero-spanned-time}.
 
 Pour des objets tels qu'un glissando ou un soufflet, le comportement
@@ -9,7 +9,7 @@ par défaut est de ne pas être reportés après un saut de ligne.
 L'extension sera donc reprise dès lors que l'appel aura été désactivé.
 
 Il en va inversement pour les extensions qui, par défaut pour les textes
-notamment, sont reportées après un saut de ligne@tie{}; il faudra alors
+notamment, sont reportées après un saut de ligne ; il faudra alors
 activer l'appel pour empêcher leur report.
 
 "
index 60f874c2e771dc5a90ca70f97cab1ec0ad839912..7bb08d0c068bf538e84114bcd94fbb46a495b455 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le positionnement des doigtés peut être contrôlé de manière très précise.
 Afin que l'orientation soit prise en compte, il est nécessaire d'utiliser
index d10addf02716010af7761a9c926aa6892ec0238a..55a59626cb80007e05cb6904a37a3e1ea4da6f83 100644 (file)
@@ -1,15 +1,14 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les symboles s'ordonnent verticalement suivant la propriété
 @code{script-priority}.  Plus sa valeur numérique est faible, plus le
-symbole sera proche de la note. Dans l'exemple suivant, l'objet
-@code{TextScript} -- le dièse -- a d'abord la propriété la
-plus basse, et il est donc placé plus près de la note@tie{}; ensuite
-c'est l'objet @code{Script} -- le mordant -- qui a la propriété la plus
-basse, et il se place alors sous le dièse.  Lorsque deux objets ont la
-même priorité, c'est l'ordre dans lequel ils sont indiqués qui
-détermine lequel sera placé en premier.
+symbole sera proche de la note.  Dans l'exemple suivant, l'objet
+@code{TextScript} -- le dièse -- a d'abord la propriété la plus basse et
+se voit donc placé au plus près de la note ; ensuite, c'est l'objet
+@code{Script} -- le mordant -- qui a la propriété la plus basse, et se
+place alors sous le dièse.  Lorsque deux objets ont la même priorité,
+c'est l'ordre dans lequel ils sont indiqués qui détermine lequel sera
+placé en premier.
 
 "
   doctitlefr = "Contrôle de l'ordre vertical des articulations et ornements"
-
index bdb5ba13a0bca1f0579a9217cb978f04789148e2..0c68f39ddc3546e7b2967600e9a34af8df884237 100644 (file)
@@ -1,13 +1,12 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Selon la tradition, les crochets indicateurs de nolet sont toujours
 imprimés, sauf dans le cas où ils seraient de la même longueur qu'une
 ligature.  LilyPond permet, au travers de la propriété
-@code{'bracket-visibility}, de contôler précisément leur
-affichage@tie{}: déterminée à @code{#t}, ils seront toujours
-imprimés@tie{}; @code{#f} permet de ne jamais les imprimer, et
+@code{bracket-visibility}, de contôler précisément leur
+affichage : déterminée à @code{#t}, ils seront toujours imprimés ;
+@code{#f} permet de ne jamais les imprimer, et 
 @code{#'if-no-beam} les imprimera en l'absence de ligature.
 
 "
   doctitlefr = "Contrôle de l'impression des crochets de nolet"
-
index 67a25b5edb9bf2fc2eb1e8ae118ae0a497b5fd93..fe12df22b4fba5f74bd0c0a28010339876c4ae21 100644 (file)
@@ -1,12 +1,11 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Obtenir un @emph{grupetto} retardé et dans lequel la note la plus basse
 est altérée requiert quelques surcharges.  La propriété
 @w{@code{outside-staff-priority}} doit être désactivée (@code{#f}) pour
 éviter qu'elle prenne le pas sur la propriété @w{@code{avoid-slur}}.  La
 valeur assignée à @code{halign} permet de gérer horizontalement le
-@qq{retard}.
+« retard ».
 
 "
-
   doctitlefr = "Création d'un grupetto retardé"
index fda98792d0b8f3fa96cca2804ccd14754f3fa2f8..21a41614e547a6e45a193c2cabc14cf9b0ed8847 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Lorsque la musique comporte à de nombreuses reprises une même séquence
 sur des hauteurs différentes, la fonction musicale ci-dessous peut
 s'avérer fort utile.  Elle considère une note dont seule la hauteur est
 utilisée.  Cet exemple reproduit le rythme utilisé tout au long de
-@qq{Mars}, l'une des pièces de l'œuvre de Gustav Holst @qq{Les planètes}.
+« Mars », l'une des pièces de l'œuvre de Gustav Holst « Les planètes ».
 
 "
   doctitlefr = "Création d'une séquence de notes de même hauteur"
index 8d646b196e7a1013845d6e6a05d8160d8502de9a..47533e86d76210bb48fc56985e2cd7e19c60b317 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Affecter le graveur @code{Span_arpeggio_engraver} au contexte de la
 portée (@code{Staff}) permet de distribuer un arpège sur plusieurs
index 09681f864d538d8b55e0ee48a1be747b83ab9644..8119574ba56839d482293a38e9a98f26c307c664 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Rien n'est plus simple, pour obtenir une feuille blanche avec des
 portées, que de générer des mesures vides, de supprimer le
index ea4c1e9e4d49ba8c1a52dfda465029656b3e180a..0f06263b1407494ba4fc2e8e30c1921334461bbb 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Dans une double portée pour piano (@code{PianoStaff}), un arpège peut
 s'étendre sur les deux portées grâce à la propriété
index 77d1a1fda8b7d0a2fe5f5c036770263e95aa97b9..e7eaac18223ecb03e0e01c7ca575057456c60667 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Il est possible de distribuer un arpège sur plusieurs portées d'un
 système autre que le @code{PianoStaff} dès lors que vous incluez le
index 7b73eade03a934bb60f7bc88a8dd1b45b06c37a5..b073cd0837bbc87e76a4a7eea97f42ae4db2f5a3 100644 (file)
@@ -1,9 +1,6 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
-Il est impossible, par défaut, de noter un doigté sur deux caractères --
-autrement dit supérieur à 9.  C'est gravé dans le marbre.
-
-Voici cependant deux méthodes pour créer des doigtés plus grands que 9.
+Il est tout à fait possible de noter un doigté supérieur à 5.
 
 "
   doctitlefr = "Création de doigtés sur deux caractères"
index c3fd0ac93d2094670b4813b62fba80d5a114fc3e..e9abec6a58f54905a828eabf22c454f2291fecf3 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Vous pouvez créer des indications de tempo sous la forme d'étiquettes
 textuelles -- des objets @emph{markup} -- notamment des équivalences.
index d6137bda3cae824fd83b809f8737f0a7c0d0ee2b..6c3d5b727bd501ff61481446bcbbd436e546ac7c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Bien que le moyen le plus simple pour ajouter des parenthèses à une
 indication de nuance consiste à utiliser un bloc @code{\\markup}, cette
index 5d4d2fcfecc8bd51b19dec48b32e31b4cbc7c22f..eca2f7584b5d30db23d9fbde4e02e98b6564e7b8 100644 (file)
@@ -1,11 +1,11 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les indications de repère, à la différence des scripts textuels, ne
-peuvent s'empiler en un même endroit de la partition@tie{}: il n'est
+peuvent s'empiler en un même endroit de la partition : il n'est
 possible de créer qu'un seul objet @code{RehearsalMark} à la fois.  Le
 recours à une mesure invisible et à une barre de mesure permet cependant
 d'ajouter une autre indication de repère, donnant ainsi l'impression
-d'un double repère sur la même colonne.  cette méthode permet aussi
+d'un double repère sur la même colonne.  Cette méthode permet aussi
 de positionner un repère en fin de ligne et un autre au début de la
 ligne suivante.  
 
index 1b18a7517c8899a287598c7eaf1315c13961a0eb..fe6379147d4a921689373322ecc71f52e9af58f3 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Dans certaines situations, il peut être nécessaire de lier des notes
 appartenant à des voix différentes.
index deabdcb8f4e66675f17555f7ecb7c9400b74b7cc..452480ea387263cac84b56192c819327752a0a75 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les commandes @code{\\startTextSpan} et @code{\\stopTextSpan} permettent
 d'ajouter une ligne de prolongation aux indications textuelles, à
index 255d038b4853fb53c65a7be77348ee987ac644d1..0736c6078089326f79fed8704cb3dbb2a0e3b3e8 100644 (file)
@@ -1,11 +1,11 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Il est parfois préférable d'utiliser les hampes de la portée supérieure
 pour créer des accords distribués, afin d'éviter tout risque de
 collision au niveau des ligatures automatiques.  Dans l'exemple suivant,
 le fait de partir des hampes de la portée inférieure aurait rendu
 nécessaire l'adaptation du détecteur de collision des ligatures, par une
-clause @code{\\override Staff.Beam #'collision-voice-only = ##t}, afin
+clause @code{\\override Staff.Beam.collision-voice-only = ##t}, afin
 qu'il ne tienne pas compte des collisions entre portées.
 
 "
diff --git a/Documentation/fr/texidocs/cross-staff-stems.texidoc b/Documentation/fr/texidocs/cross-staff-stems.texidoc
new file mode 100644 (file)
index 0000000..a38908e
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
+  texidocfr = "
+L'exemple ci-dessous illustre l'utilisation du @code{Span_stem_engraver}
+et de la commande @code{\\crossStaff} afin de connecter des hampes entre
+les portées.  Nul n'est besoin de spécifier la taille des hampes ; le
+graveur calcule automatiquement la distance relative des têtes de note
+avec les portées.
+
+"
+  doctitlefr = "Cross staff stems"
index 27afc7fad3b4458438c4e34e7686c9f0aff0984e..7db135bed200277cf19f7b807ea6b350fd60a744 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Dans la mesure où @code{\\repeat tremolo} requiert deux arguments
 musicaux pour un trémolo d'accords, la note ou l'accord de la
index 49d501082144d7970b28290b176f1d7e7fb329f6..21a44f5b62de5cb1bc799f4f964ed9c981234956 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les guidons peuvent adopter différents styles.
 
index c1e603e2124d41e85ef7ea15ed04b49e3afd5e07..740bea170beaf48aef0ce2822c1306691fb9ff33 100644 (file)
@@ -1,12 +1,11 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les propriétés d'un diagramme de fret sont définies par les
-@code{'fret-diagram-details}.  En matière de diagramme de fret, les
+@code{fret-diagram-details}.  En matière de diagramme de fret, les
 adaptations s'appliquent à l'objet @code{FretBoards.FretBoard}.  Un
-@code{FretBoards} est comparable à un @code{Voice}@tie{}: il s'agit
+@code{FretBoards} est comparable à un @code{Voice} : il s'agit
 d'un contexte du plus bas niveau, et il n'est donc pas primordial de
 l'instancier de manière explicite pour adapter ses propriétés.
 
 "
   doctitlefr = "Personnalisation de diagrammes de fret"
-
index dc3f93d61c87f19290ec5c75efade73d10b65962..661a4cbfb18712f5c14c5faea1296a5a9a9950d1 100644 (file)
@@ -1,11 +1,10 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les propriétés d'un diagramme de fret sont modifiables grâce au
-@code{'fret-diagram-details}.  Lorsqu'ils sont générés sous forme
+@code{fret-diagram-details}.  Lorsqu'ils sont générés sous forme
 de @code{\markup}, rien n'empêche de modifier les diagrammes en jouant
 sur les réglages de l'objet @code{Voice.TextScript} ou bien directement
 sur le @emph{markup}.
 
 "
   doctitlefr = "Personnalisation des diagrammes de fret"
-
index b97dd79ebd33c398786306c56c3303d6ec6f8b19..e49df2ecd0bb0feb0923dee16e2f01e1c7cfa6f1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La direction des hampes des notes placées sur la ligne médiane de la
 portée est gérée par la propriété @code{neutral-direction} de l'objet
index 8f13898f1375872b4080d6d98d5e260d43588bcc..0b850b856dc68eff6f9b3b3d25e386c361a010b0 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Cet exemple démontre comment définir son propre graveur de tessiture à
 base de code Scheme.
index d10043a98a31dc44a2e0229e31b1cf47448fd1d2..939703678c8c8380594109e6cb89d50d07e43f9f 100644 (file)
@@ -1,12 +1,12 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La liste des diagrammes standards prédéfinis pour la guitare peut être
 augmentée d'autres définitions spécifiques à d'autres instruments.
 Voici comment définir un nouvel accordage ainsi que quelques diagrammes
-prédéfinis pour le @qq{cuatro vénézuélien}.
+prédéfinis pour le « cuatro vénézuélien ».
 
 Cet exemple illustre aussi la manière d'ajouter des doigtés aux
-accords@tie{}; ils serviront de référence pour la boucle d'accord et
+accords ; ils serviront de référence pour la boucle d'accord et
 seront indiqués dans les diagrammes et le @code{TabStaff}, mais pas dans
 la musique.
 
@@ -15,4 +15,3 @@ contiennent des informations sur les cordes.  Ceci est amené à évoluer.
 
 "
   doctitlefr = "Création de diagrammes de fret prédéfinis pour d'autres instruments"
-
index 33a7c0a43c739b8a4eed00c7e998c19bd8b4fc1e..da7ab3f5f1721b359d317cac6fe036876e0eb5d1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Partant du problème que l'on ignore quel @code{midiInstrument} serait le
 plus adapté à sa composition, voici un fichier LilyPond de démonstration.
index c4715402411a835c3dbaa87f9ce708ee0381fbab..ba3c19783e604ed132b87de4af16357ca4f016dd 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Voici la liste de tous les champs d'entête :
 
index dbd0e6c2ac9b8d9c1791fd102737373611bd0d1c..ed3835e951784a6cc248dec89a71f132aef48888 100644 (file)
@@ -1,9 +1,10 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Lorsque, dans des regroupements de type @code{ChoirStaff} ou
 @code{StaffGroup}, une seule portée est active, aucune indication n'est
-donnée en début de ligne.  Surcharger la propriété adéquate permet de
-modifier ce comportement par défaut.
+donnée en début de ligne.  Affecter à la propriété
+@code{collapse-height} un nombre de lignes inférieur à celui de la
+portée permet de modifier ce comportement par défaut.
 
 Notez bien que dans le cas des @code{PianoStaff} et @code{GrandStaff},
 pour lesquels le délimiteur de système est une accolade et non un
@@ -12,4 +13,3 @@ système de l'exemple.
 
 "
   doctitlefr = "Indicateur de regroupement et portée unique"
-
diff --git a/Documentation/fr/texidocs/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.texidoc b/Documentation/fr/texidocs/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.texidoc
new file mode 100644 (file)
index 0000000..3a12e55
--- /dev/null
@@ -0,0 +1,17 @@
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
+  texidocfr = "
+Il arrive, dans les partitions d'orchestre, qu'un instrument ou un
+groupe d'instruments ne joue pas pendant un moment et que leurs portées
+disparaisse pendant ce temps -- à l'aide de @code{\\removeEmptStaves}.
+
+Il est préférable, lorsque l'un d'entre eux reprend, d'imprimer toutes
+les portées du groupe en question grâce au
+@code{Keep_alive_together_engraver} placé au niveau du regroupement,
+qu'il s'agisse d'un @code{GrandStaff} ou d'un @code{StaffGroup}.
+
+Dans l'exemple suivant, les violons ne jouent pas lors des deuxième et
+troisième systèmes.  Bien que seul le premier violon redémarre à la
+dernière mesure, la portée de second violon apparaît elle aussi.
+
+"
+  doctitlefr = "Affichage d'un système complet lorsqu'une seule portée est active"
index 643a609f0ef24402434e2186d90b581e532f33e2..561b7656216ab59d2fff71a084745284a0d639e1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Voici comment obtenir l'impression d'un accord au sein duquel une même
 note est jouée deux fois avec des altérations différentes.
index 2de00edbd4a42327495114d293f6a580d35902cf..6419a9c893d256969b57bd3d0beb78d7116d41b9 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Lorsque l'on manipule des rappels d'objet (@emph{grob callbacks}), il
 peut être intéressant d'en maîtriser les « ascendants ».  La plupart des
@@ -21,7 +21,7 @@ confusion :
 -- Le concept de « génération » est trompeur.
 
 Par exemple, l'objet @code{System} peut, vis à vis d'un objet
-@code{VerticalAlignment},  être à la fois parent (par son
+@code{VerticalAlignment}, être à la fois parent (par son
 côté Y) et grand parent (par deux fois du côté X).
 
 La macro ci-dessous affiche à l'écran une représentation textuelle de
diff --git a/Documentation/fr/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc b/Documentation/fr/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc
deleted file mode 100644 (file)
index 35773c3..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
-  texidocfr = "
-Au début du XXe siècle, Schoenberg, Berg et Webern -- la « Seconde »
-école de Vienne -- imaginèrent de donner une importance comparable aux
-douze notes de la gamme chromatique, et éviter ainsi toute tonalité.
-Pour ce faire, ces compositions font apparaître une altération à chaque
-note, y compris un bécarre, pour mettre en exergue cette nouvelle
-approche de la théorie et du langage musicaux.
-
-Voici comment obtenir une telle notation.
-
-"
-  doctitlefr = "Le dodécaphonisme : toute note est altérée"
-
index c208bb24a9e1caf6f32c9215765c19a89c3f317a..b0cb409ec5bd05367bdcca0ef0e7fd6bad5bd96f 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Les notes harmoniques artificielles, obtenues grâce à @code{\\harmonic},
 ne sont pas pointées.  Ce comportement peut être modifié en activant la
index 3781b86e917194fc27c317b1bed3a338ac4cb3ff..b8e1b0144bbe832a8f0b864e688b0647ce99ee88 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La connection d'accords par des glissandos s'obtient par l'ajout d'un
 deuxième glissando dans une voix masquée.
index 82c57c1b96c013f15618d59257440846e84f8849..d7a5bb00bacb67bcac324459faea6ef1261e28e8 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La fonction @code{print} peut se modifier pour obtenir l'encadrement de
 n'importe quel objet.
index 3563ecf58dd9aa47199727e0e591605970cefd23..40e12fae7e20b48b4372591a176a7ba1201f3f31 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Voici comment entourer d'un cercle une note :
+Voici comment entourer d'un cercle une note :
 
 "
   doctitlefr = "Encerclement de notes"
index 3c8cbc8802bf7128eef2a998d3911fbf111aa826..b396c6d41b7003582444d687537e46dc9d225abe 100644 (file)
@@ -1,9 +1,9 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La commande de @emph{markup} @code{\\circle} permet de dessiner un
 cercle autour de différents objets comme des indications de doigté.
 D'autres objets nécessitent de faire appel à des techniques spécifiques.
-Cet exemple illustre deux manières de procéder, pour les repères, et
+Cet exemple illustre deux manières de procéder : pour les repères, et
 pour les numéros de mesure.
 
 "
index 1883b090c07c5bdd04f93cc06fa97ce6dcb70ec0..9b62b4ec8b4d4c5d4ca50ddc063a604c248a22da 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Il s'agit de fonctions postfix pour personnaliser l'extension des
 crescendos textuels.  L'extension devrait débuter sur la première note
index 0defcf92d9c63d4ef10aa39d548854bab66ac894..650b8b4e8445eb60204111e215056eb969300dc4 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Les lignes d'extension des commandes @code{\\cresc}, @code{\\dim} et
 @code{\\decresc} peuvent désormais être personnalisées facilement sous
index c765783edf30c7694084d3885c489fae47314789..5e5493dc2279efc9da0cf731726cc818e70dcc69 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Du code PostScript peut directement être intégré dans un bloc
 @code{\\markup}.
index cf7104d49858ad34c217b05bacb56518ffb78ff2..cb121ef86b09d454efac5006195cc5131130867d 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Pour appréhender la notation, nous l'avons disséquée en éléments
 simples : chaque type de symbole est géré par un module différent.
-Chaque module est appelé @qq{graveur}.  Dans cet exemple, chaque graveur
+Chaque module est appelé « graveur ».  Dans cet exemple, chaque graveur
 est appelé à son tour, dans l'ordre suivant :
 
 -- têtes de note,
@@ -18,9 +18,9 @@ est appelé à son tour, dans l'ordre suivant :
 -- altérations, barres de mesure, métrique et armure.
 
 Les graveurs se regroupent.  Par exemple, têtes de note, liaisons,
-ligature etc. forment un contexte de voix (@code{Voice}).  Les graveurs
-chargés de la métrique, des altérations, des barres de mesure etc.
-forment un contexte de portée (@code{Staff}).
+ligature, etc. forment un contexte de voix (@code{Voice}).  Les
+graveurs chargés de la métrique, des altérations, des barres de
+mesure, etc. forment un contexte de portée (@code{Staff}).
 
 "
   doctitlefr = "Les graveurs un par un"
index 0cf3c19f8c30bb88f08bff2cffb6fa505bee70d2..203df619ae87ca8ec5cf561972b408fd474fb117 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Il est possible de graver manuellement les liaisons de tenue, en
 modifiant la propriété @code{tie-configuration}.  Pour chaque paire, le
index 4fa7171d9f33eb5fcfb20413ea5295563e46424a..42cb7af756bf5b42a13be6359c307f7b9f123986 100644 (file)
@@ -1,13 +1,13 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Lorsque la durée totale d'un trémolo est inférieur à la noire, égale une
-blanche, ou bien entre une blanche et une ronde, il est d'usage que
-toutes les ligatures soient en contact avec les hampes.  Certains styles
-de gravure font cependant apparaître des ligatures détachées, centrées
-entre les hampes.  Pour ce type de trémolo, le nombre de hampes
-flottantes se gère au travers de la propriété @code{'gap-count} de
-l'objet @code{Beam}, et l'écart entre ligature et hampe se définit par
-la propriété @code{'gap}.
+Lorsque la durée totale d'un trémolo est inférieure à la noire,
+égale une blanche, ou bien entre une blanche et une ronde, il est
+d'usage que toutes les ligatures soient en contact avec les
+hampes.  Certains styles de gravure font cependant apparaître des
+ligatures détachées, centrées entre les hampes.  Pour ce type de
+trémolo, le nombre de hampes flottantes se gère au travers de la
+propriété @code{gap-count} de l'objet @code{Beam}, et l'écart
+entre ligature et hampe se définit par la propriété @code{gap}.
 
 "
   doctitlefr = "Impression de trémolo avec ligature flottante"
index bbe8356fadc3697256b46e3afdd5c86a466ac0c0..bfd2bee49dd4b9cb28526eaec01e29addc022eb8 100644 (file)
@@ -1,14 +1,14 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La propriété @code{tupletSpannerDuration} spécifie la longueur voulue de
 chaque crochet.  Avec elle, vous pouvez faire plusieurs nolets en ne
-tapant @code{\\times} qu'une fois, ce qui évite une longue saisie.
+tapant @code{\\tuplet} qu'une fois, ce qui évite une longue saisie.
 
-Dans l'exemple suivant, deux triolets sont imprimés avec une seule fonction
-@code{\\times}.
-
-Pour plus d'information sur @code{make-moment}, voir la section
-appropriée du manuel de notation.
+Il existe différents moyens de définir @code{tupletSpannerDuration}.
+La commande @code{\\tupletSpan} lui affecte une durée arbitraire qui
+sera réinitialisée dès l'intervention d'un durée à @code{\\default}.
+Vous pouvez aussi opter pour fournir un argument supplémentaire à la
+commande @code{\\tuplet}.
 
 "
-  doctitlefr = "Plusieurs triolets avec une seule commande \\times"
+  doctitlefr = "Plusieurs triolets avec une seule commande \\tuplet"
diff --git a/Documentation/fr/texidocs/extending-glissandi-across-repeats.texidoc b/Documentation/fr/texidocs/extending-glissandi-across-repeats.texidoc
new file mode 100644 (file)
index 0000000..50603b9
--- /dev/null
@@ -0,0 +1,17 @@
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
+
+  texidocfr = "
+Un glissando qui se prolonge sur plusieurs sections @code{\\alternative}
+peut se rappeler à l'aide d'une note d'ornement supplémentaire et
+masquée, à laquelle sera attaché le départ du glissando, ce dans chaque
+bloc @code{\\alternative}.  Cette note d'ornement devrait avoir la même
+hauteur que la note où commençait le glissando originel.  Ceci est géré
+par une fonction musicale qui prendra en argument la hauteur de la note
+d'ornement.
+
+Dans le cadre d'un musicque polyphonique, il ne faudra pas oublier
+d'ajouter une note d'ornement dans toutes les autres voix afin de
+préserver la synchronisation.
+
+"
+  doctitlefr = "Rappel du glissando à l'occasion d'une alternative"
index 680f11502fc778b2e94224d2003f71e0f8209632..ceb2ec3eb3b441751f7dec984bb2911ee30611ee 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 En mode tablature, un @emph{hammer}, ou lié ascendant, peut se simuler à
 l'aide d'une liaison.
index 2a802d2fffc6e7240518a772273e76749f8b88dd..184041f9e129693037b95775bb04581d42c3c5d3 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les crochets d'indication de pédale peuvent se modifier de différentes
 manières.
index 2ce44e9628a0ea1c860df6b740e5ce1f8e4ec55c..851620d003b0803cdf7e8c82d1580f18138863d2 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Des symboles spécifiques peuvent être obtenus en combinant les glyphes
-disponibles, ce qui est tout à fait indiqué en matière d'instrument à vent.
+disponibles, ce qui est tout à fait indiqué en matière d'instrument à
+vent.
 
 "
   doctitlefr = "Symboles de doigtés pour instruments à vent"
-
index 079ecc101c6a831324845f0e5f84ca12f0106d9b..681265a7b7b7822b6601ca96a84681c4dadc6de3 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 L'exemple suivant illustre comment combiner des doigtés pour la main
 gauche, des indications de corde et des doigtés pour la main droite.
index ac1dba05828d051edca7eac4f86faba61a8dbb82..5c3cdf7967aec798af6ab2054f2673795873227c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La guitare flamenco fait appel à des éléments de notation particuliers :
 
@@ -7,8 +7,8 @@ La guitare flamenco fait appel à des éléments de notation particuliers :
 
 -- une flèche pour indiquer le sens des butés (@emph{strokes}),
 
--- les doigtés : @qq{p} pouce, @qq{i} index, @qq{m}  majeur, @qq{a}
-   annulaire et @qq{x} auriculaire,
+-- les doigtés : « p » pouce, « i » index, « m » majeur, « a »
+   annulaire et « x » auriculaire,
 
 -- les @emph{rasgueados} sur trois ou quatre doigts : grattage des
    cordes en étendant les doigts rapidement les uns après les autres
index 07bd63422ecdaee57a3844d91e2ec12e2ab678a7..71def11622324279326a74649e5773ad8d23c067 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 En combinant @code{stemLeftBeamCount}, @code{stemRightBeamCount} et des
 paires de @code{[]}, vous pourrez obtenir des crochets rectilignes et
index 54c4d4413e0d8e6747195b0a939fbd3eacc23ef0..42d1f7b306d1daf09b6524b05e3c98c96e521d56 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'indication d'une technique particulière d'articulation, telle le
-@qq{coup de langue} des flûtistes, en remplaçant la tête de note par un
-glyphe approprié.
+« coup de langue » des flûtistes, s'obtient en remplaçant la tête
+de note par un glyphe approprié.
 
 "
   doctitlefr = "Coup de langue à la flûte"
index ef50eb7ae27bd3f5fb0d7b3b20292d067f1ad821..8efedf1cc5de2e7ce921cd59dcc7b5ea9d5afed3 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Lorsqu'une clef a déjà été imprimée et qu'aucune autre clef n'a depuis
 été imprimée, LilyPond ignorera toute réitération de la commande
index 45ea8cf3a7421b7b6f6906f4cce6f7731f55ad88..2742fdaa296d245fe4e77dba38dab8692f7c78ce 100644 (file)
@@ -1,10 +1,9 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Quand LilyPond est dépassé, la propriété @code{force-hshift} de l'objet
-@code{NoteColumn}, et des silences à hauteur déterminée, peuvent
+@code{NoteColumn} et des silences à hauteur déterminée peuvent
 s'avérer utiles pour dicter au programme les choix de placement.  On
 travaille ici en espace de portée.
 
 "
   doctitlefr = "Décalage horizontal forcé"
-
index ec39532d5e2cf6d07b590fdfbca4589c52ca1979..0ea8b1e193c25dcfd171203437ef1ccb82b17f5a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 LilyPond n'imprimera de tiret entre deux syllabes que s'il juge qu'il y
 a suffisamment d'espace.  Ce comportement peut être modifié grâce à la
index 014bdbba0baaf305d3859fe53fd1633e82350c73..19d07227fed1d848619fa42effeec3610403d4c2 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Par défaut, les indications métronomiques n'influencent en rien
 l'espacement horizontal.  Dans le cas où elles se suivent sur des silences
index 3ccfd852bfa926637c507c011261c708af5eb587..86c2859ad415a9a720baf343d6b6905d8a851f63 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Voici comment initialiser arbitrairement une indication automatique de
 repère, qu'elle soit alphabétique ou numérique :
index 5e2ff175e40ccf37bd49573e5519575c9146dc73..46d74e54f075b56b3dbb70b26e2914c86bcca29f 100644 (file)
@@ -1,4 +1,4 @@
-%%  Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%%  Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le mode @emph{markup} permet d'individualiser la mise en forme de
 certaines syllabes.
index efb0f3107d6fc7815573cc1d2e79efa997c76e91..4def801e5449de0747bb1d0a8897611828738cf3 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Voici différentes manières d'obtenir et de personnaliser des diagrammes
 de fret :
index fd924811a5fd9cfacd56d740673d59a479604d53..5ff5075a19ba5d8fc53f0f3c243dffa05f073ece 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Vous pouvez tout à fait créer des tables de diagrammes de fret
 supplémentaires, notamment dans l'optique d'un fret alternatif pour un
index b561737bcd017ed25d9139af0f86eba1c7829e8d..3d5707cbfac720068a55b66416a31513594229de 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Harmoniques et tablature (harmoniques artificielles).
 
index c99c87b3f71f8e57024341d674682c2c59dfb3c5..8a09c7e232518ab3d6926982a3d9cb358fb37c43 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Une fonction Scheme personnalisée permet de redéfinir la propriété
 @code{stencil} de l'objet @code{Flag}, de sorte à modifier le glyphe
index 49e59176a397406005bcf55806a31c78b8f00a74..ca297c356b973bc7f2d271e23439dd4a954517fb 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Le fragment de code Scheme ci-dessous génère aléatoirement 24 notes
 (ou autant que nécessaire), à partir de l'heure courante (ou un nombre
index 3c76c9f1199e1fca9dd0dd3fcca546103901c0e5..42a8e260522e667384cb2f08bdcfaf16dcbf31ca 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Une partition LilyPond, de manière interne, n'est rien d'autre qu'une
-expression Scheme générée par l'analyseur syntaxique de lilypond.  Il
+expression Scheme générée par l'analyseur syntaxique de LilyPond.  Il
 est donc possible, à l'aide de Scheme, de générer automatiquement une
 partition sans fichier source.  Une expression musicale en Scheme sera
 transformée en partition par un appel à
@@ -29,7 +29,7 @@ Chaque partition destinée à être gravée est alors ajoutée à la liste des
 partitions de niveau supérieur ; le @code{toplevel-book-handler} --
 fonction Scheme appelée pour traiter un @emph{book} dès que le bloc
 @code{\\book@{@dots{}@}} est clôturé -- s'adapte pour prendre en charge
-tous les @code{score} jusque là collectés dans l'ouvrage.
+tous les éléments @code{score} jusque là collectés dans l'ouvrage.
 
 "
   doctitlefr = "Génération en Scheme de partitions complètes (y compris des parties d'ouvrage) sans utiliser l'analyseur"
index 89baedd1433f5443fb79bbac1a91d94b4d18d945..74424f85865461c7bc844496926e346f19c04b1f 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Un glissando peut sauter un objet @code{NoteColumn}.
 
index 998061291f9039becd1ff36b488e7600051745dc..59b68717f8b0029e347ff7e2d1b4271bbe03bf38 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Dans certains cas, vous pouvez opter pour l'affichage textuel d'une clé
 située à côté d'un trou plutôt que sa représentation graphique.
index 7becd605c2add0523f48235527a4be6ffc89c0ad..7829b4efb92030d58acbeab27d682994749af332 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Modifier certaines des propriétés du quadrillage temporel aura pour effet
 d'en changer l'apparence.
 
 "
   doctitlefr = "Apparence du quadrillage temporel"
-
index 549a5c300b65c9f96ee5652651a61b2c7a54fa39..b4c1c8430e6b9f7a484031ad59a2794fce46a025 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Des lignes verticales entre les portées peuvent s'ajouter dans le but
 d'indiquer la synchronisation entre des notes.  Dans le cas de musique
index 4bf2173795cce17f004163f23f792c65d418f8b5..dd17417182e7a74c5e7111a4b420027631de0732 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 En matière de notation pour guitare, il arrive que soient indiqués les
 @qq{coups de gratte} en plus de la mélodie, grilles d'accords et
index 15791850373cce3b277a97b5b9eac7516fca514a..db4e5ad4901829b4fc474f82eac6f17277e7946c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les lignes d'un soufflet peuvent adopter tous les styles permis par la
 @code{line-interface} : discontinu, pointillé, continu, ondulé ou en
index db39b4db168cd4accf28d27eaa52592293ba912e..30d71db625aa559eb7f52d046c83a64945be5161 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Bien que la métrique complexe ne soit pas l'élément primordial de cet
 exemple, elle permet d'indiquer la pulsation de cette pièce qui, par
index aee327f94e9621a7a15baea0c0281086a2a1f3c5..f448722689276257874dafc9697eb088ad65c91a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Cet exemple illustre comment, lorsqu'une note affublée d'une altération
 accidentelle est prolongée, ne pas répéter cette altération après un
@@ -6,4 +6,3 @@ saut de ligne.
 
 "
   doctitlefr = "Non répétition de l'altération après saut de ligne sur liaison de prolongation"
-
index 3064626159df4a72e69e1da3c84b2f5584f6f834..cc30902b1bdc1b5754243833f280846a101387ef 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les crescendos et decrescendos indiqués textuellement -- tels que
 @emph{cresc.} ou @emph{dim.} -- sont suivis de pointillés qui montrent
@@ -6,4 +6,3 @@ leur étendue.  On peut empêcher l'impression de ces pointillés.
 
 "
   doctitlefr = "Masquage de l'extension des nuances textuelles"
-
index 8afe4e823958bb10f9b018e5710f3c50daef017d..1341d99432e9175b118f54c3eb7affb4a063f964 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Certaines indication de nuance requièrent un complément textuel, comme
 « sempre pp ».  Dans la mesure où les nuances sont habituellement
@@ -8,7 +8,7 @@ note à laquelle il s'applique.
 Différentes approches permettent de correctement aligner horizontalement
 ce « sempre pp » :
 
--- Un simple @code{\\once \\override DynamicText #'X-offset = #-9.2}
+-- Un simple @code{\\once \\override DynamicText.X-offset = #-9.2}
    avant la note considérée de telle sorte que la nuance soit décalée
    manuellement à la bonne place.  Inconvénient : il faut le faire
    manuellement à chaque fois qu'intervient ce @emph{markup}.
@@ -20,7 +20,7 @@ ce « sempre pp » :
    @emph{markup} ou nuance d'apparaître à cet endroit.
 
 -- L'application d'un décalage au script de nuance
-   @code{\\once \\override @dots{} #'X-offset = @dots{}}.
+   @code{\\once \\override @dots{} X-offset = @dots{}}.
    Inconvénient : là aussi il faut le faire à chaque fois.
 
 -- L'attribution arbitraire d'une dimension à 0 du texte additionnel à
@@ -38,7 +38,7 @@ ce « sempre pp » :
 -- La définition d'un alignement explicite au sein du script de nuance.
    Ceci ne sera suivi d'effet, par défaut, qu'en jouant sur
    @code{X-offset}.  Inconvénient : il faut définir
-   @code{DynamicText #'X-offset}, ce qui s'appliquera à toutes les
+   @code{DynamicText.X-offset}, ce qui s'appliquera à toutes les
    nuances textuelles.  Par ailleurs, l'alignement sera réalisé sur le
    bord droit du texte additionnel, non sur le milieu de @emph{pp}.
 
index ccc2195bf4ca2f6fa1cbd263487589b0aa82651b..d34c12fcfc57013f3de0f04a8b8d545bbedf9878 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Différents moyens permettent de repositionner un diagramme de fret pour
 éviter des collisions ou le placer entre deux notes :
 
--- La modification des valeurs de @code{#'padding} ou de
-   @code{#'extra-offset}comme pour le second diagramme;
+-- La modification des valeurs de @code{padding} ou de
+   @code{extra-offset} comme pour le second diagramme ;
 
 -- L'adjonction d'une voix invisible dans laquelle les diagrammes sont
    attachés à des notes invisibles comme pour le troisième diagramme.
index 4c6ae87a2331a7280935636c5248570236370c04..3cadbf782fd626a7ebaa10f7d52b93deb76789d0 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
-Cette méthode permet d'imprimer deux marques-repères l'un au dessus de
+Cette méthode permet d'imprimer deux marques-repères l'une au-dessus de
 l'autre.  Le repère inférieur est décalé sous la portée, puis s'insère
 au-dessus de lui un espace pour positionner le repère supérieur
 au-dessus de la portée.
@@ -9,9 +9,9 @@ L'ajustement des valeurs de @code{extra-offset} et @code{baseline-skip}
 permet d'accroître ou réduire globalement l'espace entre le repère et la
 portée.
 
-La capacité de pratiquement tout type de glyphe ou chaîne de caractère à
-faire l'objet d'un repère les rend capable de venir se centrer au-dessus
-ou en dessous d'une barre de mesure.
+La capacité de pratiquement tout type de glyphe ou chaîne de caractères
+à faire l'objet d'un repère les rend capable de venir se centrer
+au-dessus ou en dessous d'une barre de mesure.
 
 L'adjonction de la propriété @code{break-visibility}, comme dans le
 troisième cas, permet de placer un double repère en fin de ligne.
index e20a5d96bcdc7b845490735fb5882401ed1d1c1f..09a2db29edacca367e6793b4c7692c8b5aa15a07 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Cette méthode permet d'imprimer deux marques-repères -- l'un au-dessus de
-la portée et l'autre en dessous -- à l'aide de deux voix séparées.  Le
-graveur de repères est ensuite déplacé dans chacune des voix, sans quoi
-aucun repère ne sera imprimé.  Enfin, chaque voix se voit attribuer un
-positionnement pour les repères.
+Cette méthode permet d'imprimer deux marques-repères -- l'une
+au-dessus de la portée et l'autre en dessous -- à l'aide de deux
+voix séparées.  Le graveur de repères est ensuite déplacé dans
+chacune des voix, sans quoi aucun repère ne sera imprimé.  Enfin,
+chaque voix se voit attribuer un positionnement pour les repères.
 
 Cette méthode, bien que plus complexe que la première, apporte plus de
 flexibilité dans l'ajustement individuel des deux composants du repère.
index 9dffeb097a78dccd2eb24461e280a6ef9c771805..d91983f9b6a923ffc9896173698b38fb5cab043c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Des mots monosyllabiques peuvent s'attacher par une liaison à l'aide
 d'un tilde.
index c004c398e8af4a94af42c05e763629efd9a5e7d6..8b84828ec9a96f32e67ce7405facd159ec4c44f9 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le code ci-dessous illustre la manière d'agencer un cantique liturgique
 dans lequel chaque ligne débute et se termine par une mesure incomplète.
index 0e76b30cf125a89c8d8a67e48fc70342c63033e5..102e850f8b4b9fa342983390123e12455e4741b1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les « incipits » peuvent faire partie de l'objet @code{InstrumentName},
 tout en définissant de manière indépendante le nom de l'instrument et
index 96c90257945f35f239156858ae1e63d6dd838249..2b9f67e4c0851c022ddb73591cf329da71381dbe 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Un crochet d'arpège peut indiquer que des notes réparties sur deux
 portées différentes doivent être jouées par la même main.  Le contexte
-@code{PianoStaff} doit accepter des arpèges « distribués », et les
+@code{PianoStaff} doit accepter ces arpèges « distribués », et les
 indications d'arpège du contexte @code{PianoStaff} adopter une allure de
 crochet.
 
index 224f9a099a17ab9efa8b0091bd53345b2c73a30d..f56f0db8e256780423bacfc77811a276b417d6e8 100644 (file)
@@ -1,9 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Une surcharge de la propriété @code{'text} de l'objet
+Une surcharge de la propriété @code{text} de l'objet
 @code{BreathingSign} permet de créer une marque de césure.  LilyPond
 dispose également d'une variante courbée.
 
 "
   doctitlefr = "Insertion d'une césure"
-
index 3c803e246d69eb86e75121b18a53c5486356ef3f..216e0dc2629be09f311a344734686c21d235dd4a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La commande @code{\\markup} est polyvalente.  Dans cet exemple, elle
 contient un bloc @code{\\score} plutôt que du texte ou une marque.
index cf63b3804c7ee7c39ff0a70204a757384527da80..45dc17c25babfee634443f896334b5f4f4dfa372 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Des symboles de pourcentage isolés peuvent aussi être obtenus, au
 moyen d'un silence multimesure dont on modifie l'aspect :
index 8989b4f5a92b3c610ae507b787ebb4c8da27e067..263e4e8acc09c5ebb93acfa8c7a38974d442c625 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Bien que compliqué de prime abord, voici un canevas tout à fait indiqué
 pour les ensembles de jazz.  Vous noterez que tous les instruments sont
index f81a49a5a2eb806b858c445ebaadc943600d3e9a..b6208734c8eabea9b868317175d2457289a1e971 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Le symbole imprimé lors d'un changement de clef est plus petit que la
 clef initiale.  La taille s'ajuste à l'aide de la propriété
index 36b5fb80b4525fecef10082594d8b0118774bec4..d6ea5cbe01ed7ff709a071b2c5a6aba7cf6a749e 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Les indication de « laisser vibrer » ont une taille fixe.  Leur
+Les indications de « laisser vibrer » ont une taille fixe.  Leur
 formatage est accessible au travers de la propriété
-@code{'tie-configuration}.
+@code{tie-configuration}.
 
 "
   doctitlefr = "Liaison « Laissez vibrer »"
index ca430f36615a1cd0b1169f9cec7b06fdafcbfe0d..c54cf8298e17022638d89d587327dea39cca1957 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Une tablature peut comporter des lettres en lieu et place des chiffres.
 
index 8ff17b7b3c526069d96f635c05cc2194f89148dd..6f45fa450c761a5ded3853786d7017b1e768420c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les extensions de texte, tout comme les indications sous forme de ligne
 tel un glissando, peuvent se voir pourvues d'une extrémité en flèche.
index fbf31b976ae0940f527ef38e08993f5b1d7aa5d3..930ab00f052733ef419794df6d2265de8aed8e0e 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'alignement horizontal des paroles peut se gérer à l'aide de la
 propriété @code{self-alignment-X} de l'objet @code{LyricText}.
index dd19581eadbda0905858aa64c90f08d3cc1d6a74..9b2f381198c75f3080db79c89e902e962fc5e76b 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le « makam » est une forme de mélodie turque qui utilise des altérations
 d'un neuvième de ton.  Consultez le fichier d'initialisation
index 4d0ff95cc02da5146ef18a09489d180b72d52f2e..0b96ae85226cf87dc9998d1f9679fa5e58781217 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Une modification de la propriété @code{transparent} permet d'imprimer un
-objet à « l'encre sympathique » : l'objet n'est pas affiché bien que tous
+objet « à l'encre sympathique » : l'objet n'est pas affiché bien que tous
 ses attributs soient préservés.  L'objet en question occupe donc sa
 place, est pris en compte lors de collisions, et peut se voir attaché
 liaisons ou ligatures.
@@ -9,7 +9,7 @@ liaisons ou ligatures.
 Cet exemple illustre la manière de connecter deux voix par une liaison
 de prolongation.  Les liaisons de prolongation ne peuvent normalement
 intervenir que dans la même voix.  Dès lors que la liaison est entamée
-dans une autre voix et que la première  hampe ascendante est rendue
+dans une autre voix et que la première hampe ascendante est rendue
 transparente dans cette même voix, la liaison semble passer d'une voix à
 l'autre.
 
index ef245c0d97175bd39b0eb880e73fc5a531ebaedb..b31e9185a5f75e27f650a155f9429c71814d0260 100644 (file)
@@ -1,10 +1,8 @@
-%% Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
-
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'affectation de la valeur @code{#t} à la propriété @code{breakable},
 combinée à @code{after-line-breaking}, permet la rupture d'une
 indication de glissando lors d'un saut de ligne.
 
 "
-
   doctitlefr = "Saut de ligne et glissando"
index 3b8d8bcb636acc8d0547e93907d966b4ca703be4..add9c3743379b84f8498d699d285a2c6ea21ffc8 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Grâce à la propriété @code{dash-definition}, une liaison d'articulation
 peut être formée de traits discontinus variables.
@@ -18,4 +18,3 @@ trait @code{segment-style} de longueur @code{segment-taille}.
 
 "
   doctitlefr = "Dessin d'une liaison d'articulation au trait discontinu"
-
index 976b25ce6bd89415798968b1d5a870b8d2ef5f0e..ca5a9f8e0433cce45b43f5cf9000dd6f726e9ea1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Vous pourriez avoir envie, dans un but pédagogique, de rendre certaines
 lignes d'une portée plus épaisses que les autres, comme la ligne médiane,
@@ -9,4 +9,3 @@ l'objet @code{StaffSymbol}.
 
 "
   doctitlefr = "Empâtement de certaines lignes d'une portée"
-
index 4c039803414b78b7d1dc7c6fab1382927049634e..653ea367f34bfb8341854b6c01901ee7266c1180 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La basse chiffrée utilise fréquemment des lignes pour indiquer la
 prolongation jusqu'à un certain point.  LilyPond est alors dispendieux
index 1226142194e4a2bff9306080c2dc4c47bbc13358..1c80e815d3961ead01e446b829b6fead887797c7 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Le positionnement et la pente des ligatures peuvent être contrôlés
-manuellement à l'aide d'une adaptation de la propriété
-@code{positions} de l'objet @code{Beam}.
+manuellement à l'aide d'une adaptation de la propriété @code{positions}
+de l'objet @code{Beam}.
 
 "
   doctitlefr = "Contrôle manuel du positionnement des ligatures"
index 52a40aa05abc6fcd2090603addab57e8f5e75b5d..94775dfaccfa20baaeff2c19bd8504eb4af7a2e4 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Voici comment ajouter une croix aux hampes.  Le début du fragment parlé
 est stipulé par une commande @code{\\speakOn}, et la fin par une
index e69db835058f71ba84fc0e4c24638a29adf91736..829d4a58729216249e3c140fc515073d0e5a0964 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Un bloc de texte conséquent peut se répartir sur plusieurs pages à
 l'aide de la commande @code{\\markuplist}.
index aafac6932968ef620269e1e0c8dc2f363eeb68ed..1ae4b66b805453cc1ade83d9c259a09fd07ca792 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Le code ci-dessous permet, de façon détournée, d'afficher un compteur de
 mesures à l'aide d'une répétition en pourcent rendue transparente.
index d96747bbca93db3f7d5c562a8b62e8d0454cd2b4..8600eda7d18c728f08ec96263a235bff83c701c3 100644 (file)
@@ -1,10 +1,9 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 En musique mensurale, les barres de mesure ne traversent pas les
 portées.  Pour obtenir ce résultat avec un @code{StaffGroup} plutôt
 qu'en utilisant un @code{ChoirStaff}, il faudra rendre 
-@qq{transparentes} les portions de barre qui recouvrent les portées.
+« transparentes » les portions de barre qui recouvrent les portées.
 
 "
   doctitlefr = "Présentation à l'ancienne (barres de mesure entre les portées)"
-
index 9197ee69b124c01ba3dabfb9c9067d2e425d88d9..40f8d0ae02755d5416d18ff56b077405c5481412 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Dans le cadre d'un portée polyphonique, les silences multimesures sont
 positionnés différemment selon la voix à laquelle ils appartiennent.
index 8478956093e752098c31d3b59ce3e89b5385260f..afea767ca105b28acd954ae24c5f8c5081bddc31 100644 (file)
@@ -1,14 +1,14 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Les raccourcis sont répertoriés dans le fichier
-@file{ly/script-init.ly}, dans lequel on retrouve les variables
-@code{dashHat}, @code{dashPlus}, @code{dashDash}, @code{dashBar},
-@code{dashLarger}, @code{dashDot}, et @code{dashUnderscore} ainsi que
+@samp{ly/script-init.ly}, dans lequel on retrouve les variables
+@code{dashHat}, @code{dashPlus}, @code{dashDash}, @code{dashBang},
+@code{dashLarger}, @code{dashDot} et @code{dashUnderscore} ainsi que
 leur valeur par défaut.  Ces valeurs peuvent être modifiées selon vos
 besoins.  Il suffit par exemple, pour affecter au raccourci @w{@code{-+}}
 (@code{dashPlus}) le symbole du trille en lieu et place du @code{+}
 (caractère plus), d'assigner la valeur @code{trill} à la variable
-@code{dashPlus}@tie{}:
+@code{dashPlus} :
 
 "
   doctitlefr = "Modification de la signification des raccourcis pour les signes d'articulation"
index 3e15bb43d74152ecedc3fb1ba0c2b074ced85de9..05f67b849e72c115d890962231b0b8fe519fb567 100644 (file)
@@ -1,9 +1,9 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les crochets indiquant un nolet peuvent être prolongés jusqu'à un
 élément de rupture ou jusqu'à la note suivante.  LilyPond termine un
 crochet de nolet sur la droite de sa dernière tête de note par défaut ;
-un crochet de pleine longueur s'étendra plus avant, soit jusqu'à le note
+un crochet de pleine longueur s'étendra plus avant, soit jusqu'à la note
 suivante et en traversant tous les éléments non rythmiques, soit sur
 tout l'espace précédant le prochain élément de notation, que ce soit une
 clef, une métrique, une armure ou une autre note.  L'exemple suivant
index 51d2f87bba3aac6bb470ee5c633149fb13db5c3b..5a975007397c7134d8627c8659fbdcaf3a7eaf1f 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Une note pointée appartenant à la voix supérieure d'une portée
-polyphonie sera par défaut décalée vers la droite afin d'éviter les
+polyphonique sera par défaut décalée vers la droite afin d'éviter les
 collisions avec les autres voix.  Ce comportement peut être outrepassé à
 l'aide de la propriété @code{prefer-dotted-right} de
 @code{NoteCollision}.
index 99976c522fdbb2980909a8874890ec2c02a30e1a..1412db149203449798c141a686c0a1c49a54deec 100644 (file)
@@ -1,13 +1,14 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Le positionnement vertical d'une liaison se contrôle par la propriété
 @code{positions} de l'objet @code{Slur}.  Cette propriété dispose de
-deux paramètres : le premier affecte l'extrémité gauche de liaison, le
-second son extrémité droite.  La valeur des paramètres n'aura aucune
-influence sur le galbe de la liaison.  LilyPond ne s'en servira que pour
-adapter le positionnement de la courbe.  Des valeurs positives décalent
-la liaison vers le haut et s'utilisent pour des hampes descendantes.
-Des valeurs négatives entraînent un décalage vers le bas.
+deux paramètres : le premier affecte l'extrémité gauche de la
+liaison, le second son extrémité droite.  La valeur des paramètres
+n'aura aucune influence sur le galbe de la liaison.  LilyPond ne
+s'en servira que pour adapter le positionnement de la courbe.  Des
+valeurs positives décalent la liaison vers le haut et s'utilisent
+pour des hampes descendantes.  Des valeurs négatives entraînent un
+décalage vers le bas.
 
 "
   doctitlefr = "Déplacement vertical des liaisons d'articulation"
index 8553ffebc7059310a03b76dd90a9cf5bb27fb8c6..a2e6d6240ef4bd58ecc37e6d7396123d6577f30a 100644 (file)
@@ -1,15 +1,15 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Lorsque du texte est attaché à un silence multimesure, il sera centré
 dans la mesure, au-dessus ou en dessous de la portée.  Afin d'étirer la
 mesure dans le cas ou ce texte est relativement long, il suffit
-d'insérer un silence invisible auquel on attache le texte en question,
+d'insérer un accord vide auquel on attache le texte en question,
 avant le silence multimesure.
 
-Rappelez-vous qu'un silence invisible génère une barre de mesure.  Le
-texte attaché à ce silence invisible sera alors aligné sur la gauche de
-là où serait positionnée la note.  Cependant, si la taille de la mesure
-est déterminée par la longueur du texte, il apparaîtra comme centré.
+Le texte attaché à silence invisible sera aligné sur la gauche de
+là où serait positionnée la note dans la mesure.  Cependant, si la
+taille de la mesure est déterminée par la longueur du texte, il
+apparaîtra comme centré.
 
 "
   doctitlefr = "Ajout de texte à un silence multimesure"
index 31e66b32995e48ba4742955de74c1ca6788a4c9f..b1f4d5ba3b493c93329d1c7bd62072002909838a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La propriété @code{systemStartDelimiterHierarchy} permet de créer des
 regroupements imbriqués complexes.  La commande
index 7fbb726d8a2f2b12636a0c7cfa25ffb579587ed4..370e21a2ebb107f44e3df8662961894fb793a8b7 100644 (file)
@@ -1,8 +1,9 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 LilyPond sait aussi gérer des nolets dont le chiffrage imprimé ne
 correspond pas exactement à la fraction de mesure à laquelle ils se
-réfèrent, tout comme ceux auxquels une valeur de note vient en complément
-au chiffre.
+réfèrent, tout comme ceux auxquels une valeur de note vient en
+complément du chiffre.
+
 "
   doctitlefr = "Nolets au chiffrage inhabituel"
index 63365eb12e8ab7db7ba75331a8d5294dfa5e2aae..5bfe832a3b21f7dd15b0a701c94394c2cfbf0108 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La commande @code{\\key} détermine la propriété @code{keySignature} d'un
 contexte @code{Staff}.
index 97a9ddc2bdbd9fa7b5321ffa7b995040f6bcd6fc..78a992f29ec10ff6b9774835be00159c1282ae3d 100644 (file)
@@ -1,10 +1,11 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
-En mode @qq{easy play}, les têtes de note utilisent la propriété
+En mode « easy play », les têtes de note utilisent la propriété
 @code{note-names} attachée à l'objet @code{NoteHead} pour déterminer ce
 qui apparaîtra dans la tête.  Intervenir sur cette propriété permet
 d'imprimer un chiffre correspondant au degré dans la gamme.
 
 La création d'un graveur dédié permet de traiter toutes les notes.
+
 "
-  doctitlefr = "Easy play -- chiffre en lieu et place des lettres"
+  doctitlefr = "Easy play -- chiffres en lieu et place des lettres"
index 70850161d2bd8b02cad97279f8a0d76743490e88..176b5dab6ca028a928facfcc04d12e5540b05721 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La version 2.14 a donné naissance à un nouveau moteur pour l'espacement
 vertical des paroles.  Celles-ci peuvent donc se retrouver positionnées
@@ -8,4 +8,3 @@ que vous aurez réglé certaines propriétés des contextes @code{Lyric} et
 
 "
   doctitlefr = "Espacement des paroles selon les pratiques de la version 2.12"
-
index 32e0fa2fea815c721fc618697e9a27e32755e1d0..d47cd3d465409ade92eb7de97cbb8e4af60492cd 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Table des harmoniques sur corde à vide (harmoniques naturelles) :
 
index 510991dd093eae95a63572cf52e55fdeaf320196..0346f46de2577a5e3cdaff23d0f419fb2079f7ca 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Ce canevas illustre l'utilisation de contextes @code{StaffGroup} pour
 regrouper les instruments selon leur famille, imbriqués dans un
index 925122992df71b0a903f3e093c4ca6febd223ba6..ac879a8eda4a640f3d2d74ed299d4500e52a70f1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 En interne, la fonction @code{\\ottava} détermine les
 propriétés @code{ottavation} (par ex. en @code{\"8va\"} ou @code{\"8vb\"})
index 04f675f80af2e79b3444c7618055b94c870abc40..53470be91b35f53f215772dea6f730b545ba0ee4 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'insertion du résultat de @code{lilypond-version} dans des paroles
 permet d'ajouter à la partition ou au document généré par
index 66e74c9994ad8b3a04fcd83443f70b45b7019901..a26d0948f7a7a817192f5da6f9355ee41c6ccd3f 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Des références de page peuvent prendre place aussi bien dans la
-musique qu'en tête de  partition, puis reprises dans un @emph{markup}.
+musique qu'en tête de partition, puis reprises dans un @emph{markup}.
 
 "
   doctitlefr = "Référencement de page"
index daf2dbcf9de41af11b9e4e5836a1035c3662b921..b9b37d9ef067333f0d4741c8f5d9eb155bee6133 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La fonction @code{\\autoBeamOff} dans le cadre d'un
 @code{\\partcombine} agit de façon bien particulière ; c'est pourquoi il
index f55d7a7ddba1cd9cfefdb2ab09f44d74b0a5bf7f..7c8317fddbd01bb8e53a59b945abebbd21483131 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le numéro de mesure répétée sera imprimé à intervalle régulier si vous
 déterminez la propriété de contexte @code{repeatCountVisibility}.
index f6136df45e5b043f1100df1ac22978acf3dd1095..bbe0bbbf80603645e9889b93d92898ee6836500b 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Les répétitions de plus de deux mesures sont surmontées d'un compteur,
 si l'on active la propriété @code{countPercentRepeats} comme le montre
index 899b10da307635cf70cbff3ea74c51b4346135e7..3d2d984e257acbd8fe0ad6c1686a4b3215f949c9 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La représentation graphique des instruments à percussion n'est pas prise
 en charge nativement.  De tels symboles peuvent cependant être inclus,
index 501911339f95250d939eeb674d16a1817befc17d..f20f03d3e8e4482f31d49c9a28065f04ff501e86 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Cet exemple peu académique démontre comment il est possible d'insérer un saut
-de ligne dans un nolet portant une ligature.  Ces ligatures doivent toutefois
-être explicites.
+Cet exemple peu académique démontre comment il est possible d'insérer un
+saut de ligne dans un nolet portant une ligature.  Ces ligatures doivent
+toutefois être explicites.
 
 "
   doctitlefr = "Saut de ligne au milieu d'un nolet avec ligature"
index a70dc22a2f086425c3c0207f2dc18eeef57785da..1b5d779df6c3fd156122990ed9431cf3783ba559 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Voici une simple partition pour piano avec quelques notes.
 
index 66c23025cef93c635e62ec159147e5962d9c7524..5ea61ca0910efa66df154ad479f78693e8397eb5 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Lorsque la mélodie est doublée au piano, cela ne nécessite pas forcément
 une portée spécifique.  Les paroles peuvent s'insérer entre les deux
index c37defbf7f93a5e602ba0aaba57849570859cc1d..589b826f2ae538a22af7949b4adcb111af4e8f9f 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Il s'agit du format classique pour le chant : une portée pour la mélodie
 et les paroles au-dessus de l'accompagnement au piano.
index ffcf5db2186b474eeb4d044737a57a09bc727f76..d547d8580e29e1ce26642539f9ee4d2c8006b74a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le positionnement des doigtés main droite, grâce à une propriété
 spécifique, peut se contrôler finement, comme l'indique
index 0025bdf8b75b23c225a1c851755a2cab2065d530..bf69a1fb7fcc343262857f7a243f1148d7d677bd 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Une section polyphonique s'obtient dans un @code{TabStaff} de la même
  manière que dans une portée normale.
index f755e90d539bc2d0a26a6894dac3ef43bfea17fa..4069f363d5a23383a638ee0689fd5ce98dd60110 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'ajustement de la taille d'une indication d'arpeggio s'effectue au
 travers du positionnement de ses extrémités haute ou basse.
index 0c067b93d0852e178cea591fd883b649d1c67f0a..05c4ac48c51ed7daba4b813fa62aa9a73c076c63 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les options par défaut en matière de positionnement des doigtés d'un
 accord donnent généralement de bons résultats.  Il se peut néanmoins
index abc2d95f486b48e6606471db76610710ab059801..7507ec3ef4d9d3cd9278d197868ac47b5e7d2153 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La ligature de notes se trouvant sur des lignes supplémentaires est
 généralement centrée sur la portée.  Les notes d'ornement ayant une
index 04331d0896591948c26527ac568d8a3a321d684a..7ecd86d599314b9687e6856f13649446567e613e 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Lorsqu'est activée la propriété @code{'strict-grace-spacing},
+Lorsqu'est activée la propriété @code{strict-grace-spacing},
 l'espacement des notes d'ornement se fera de manière « élastique ».
 Autrement dit, elles seront décollées de leur note de rattachement :
 LilyPond commence par espacer les notes normales, puis les ornements
index 63c8f50a6a97a77fbeae3cd711a37aa8eaeb1a07..a7ff0c624959e72f3904327b5f1dd8c7a0cb30cd 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Si l'on peut positionner verticalement un silence simple en le
 rattachant à une note, il n'en va pas de même pour un silence
index 701526b39d1b83554f3b4a6a1734515618aa97c1..02ef1fa93aaffc98670eb36ceb2c891421b229d7 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Le code ci-dessous permet d'adjoindre à un signe @emph{segno} un texte
 @emph{D.S. al Coda}, là où se trouverait normalement un bout de portée.
index 81639f38b0d23fea20b3d3a4c6fc2bfe4c6cd523..6fa930ee31fc96e3f93f6796fb55356f3e08eeec 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Lorsqu'une annotation doit s'incrire à l'intérieur d'une liaison, la
 propriété @code{outside-staff-priority} doit être désactivée.
index 1106cf322bb9e3b92cd80b0c5da36bbbbf64aace..d496086508ddf40f043b977c58f5a725b386af02 100644 (file)
@@ -1,10 +1,12 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
-En accord avec les règles standards de l'écriture musicale, on grave
-un bécarre avant un dièse ou un bémol si on a besoin d'annuler une
-altération précédente.  Pour modifier ce comportement, la propriété
-@code{extraNatural} du contexte @code{Staff} doit se voir attribuer la
-valeur @code{##f} (faux).
+
+En accord avec les règles traditionnelles de l'écriture musicale, on
+grave un bécarre avant un dièse ou un bémol si la note était auparavant
+affublée d'un double-dièse ou double-bémol.  Pour adopter un
+comportement plus contemporain, la propriété @code{extraNatural} du
+contexte @code{Staff} doit se voir attribuer la valeur @code{##f}
+(faux).
 
 "
   doctitlefr = "Suppression des bécarres superflus"
index ff945f69b8b5f0f1704163322701f4e1e6d482df..c3674b5e9ca7e5d5bdcd2d2ce2de145c1583ea37 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'ajout d'une marque-repère en fin de pièce peut entraîner la perte de
-la dernière indication de nolet.  La désactivation de @code{TupletBracket
-#'full-length-to-extent} pallie ce problème.
+la dernière indication de nolet.  La désactivation de
+@code{TupletBracket.full-length-to-extent} pallie ce problème.
 
 "
   doctitlefr = "Préservation de l'indication de nolet lors d'un repère final"
index a921dbd587d50edb24bf7e43e811df1dcf206eb3..1bb81b5b9739fd05bef2358180cdbcdfd4e1780c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Après un changement de tonalité, un bécarre est imprimé pour annuler
 toute altération précédente.  Ce comportement s'annule en désactivant la
index a246ceb0aeb02769df9d17c7bdbbd75cc36f9bae..9c179627ce01c4d40d0c519daf4cd749fc8cc9e7 100644 (file)
@@ -1,9 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Bien qu'allant à l'encontre des usages en matière de gravure, une barre
-de reprise (@code{|:}) s'imprimera en début de partition après surcharge
-de la propriété adéquate :
+de reprise (@code{.|:}) s'imprimera en début de partition après
+surcharge de la propriété adéquate :
 
 "
   doctitlefr = "Impression d'une barre de reprise en début de morceau"
-
index 54ede3e046f4a99e4c2265328fe80fee9deb71bf..62fc8a1ce794cf5fd30fb8c06ce8ef2f0dbca14d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Vous pouvez imprimer un numéro de mesure à intervalle régulier plutôt
 qu'en tête de chaque ligne seulement, en recourant à la propriété
index 8b5cf4bf78a4036937d60ba1552ed8d4dedb933f..5c521cb56e58ca2c673004d87d19571a7bd91a84 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les numéros de mesure peuvent être encadrés ou entourés d'un cercle.
 
diff --git a/Documentation/fr/texidocs/printing-hairpins-in-various-styles.texidoc b/Documentation/fr/texidocs/printing-hairpins-in-various-styles.texidoc
new file mode 100644 (file)
index 0000000..a5fbdf2
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
+  texidocfr = "
+Les soufflets de nuance peuvent adopter des styles différents.
+
+"
+  doctitlefr = "Différents styles de soufflet"
index dc95d2b661be9f54442c622623f17b32c74e5853..994522f1debf88824710bb5ac7955739dd07b71d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Des crescendos ou decrescendos @emph{al niente} peuvent être indiqués de
 manière graphique, en assignant @emph{vrai} (@code{#t}) à la
index c015dac9e0463009d2e18e83e0508b50af9dd704..e38bdbc739364f6cd85c14357012dd475adffd18 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Les indications textuelles peuvent être imprimées à la fin d'une ligne
+Les indications de repère peuvent être imprimées à la fin d'une ligne
 plutôt qu'en tête de la suivante.  L'alignement sur la barre de mesure
 devra alors s'effectuer par l'extrémité droite de l'indication.
 
 "
-  doctitlefr = "Indication textuelle en fin de ligne"
+  doctitlefr = "Indication d'un repère en fin de ligne"
index e27a063b71846d0b049035365070643d293149b5..25f46fab277f46e15ca811ee7ebdde3dccae2a59 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Bien que ces indications textuelles ne soient habituellement imprimées
 qu'au niveau de la portée supérieure d'un système, leur affectation peut
index 12d1ae1ee2a56f0448ff526ce792b3b5ca00a37c..d243fa6207535de94eb381b26188604d0c8058dd 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les indications de tempo et les marques de repère s'impriment par défaut
 au-dessus de la portée.  Le fait de régler en conséquence la propriété
index 6d3e63b8bc0ab47a673ade554c15654b91ebd537..9240b0409945b1f974a1891de938d359981780e0 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Bien qu'ayant des métriques bien différentes, les deux parties
 ci-dessous présentées restent synchrones.  Les barres de mesure ne
index 962b5cf1186a92758b624705ca00b79a3f786961..637004c8795a672d40960a1a2deaae31a77e93c5 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le contexte @code{NoteNames} permet d'imprimer le nom des notes.  La
 propriété @code{printOctaveNames}, une fois activée, leur adjoindra une
index 94e0dccdb2f9de7060d020a8258d5eb7d2068676..baa3a3c5c93ab347420f5c92f5cba8c50202f078 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Du texte, inclus dans un objet @emph{markup}, peut s'imprimer de droite à
 gauche, comme illustré ci-dessous.
index 20ad164ae9c75b6c30a350bf7ccaceb969243db5..4fe531f2467b792e25ec11f8b46ba72dadccd951 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Par défaut, LilyPond n'affiche pas le premier numéro de mesure s'il est
 inférieur à@tie{}2. Le fait de définir @code{barNumberVisibility} à
index 2f217cb813b7e4d13c45006c87e698d7acb11d39..4aae94493e1ede66cfe5dc09f71ce7f4de86a2c0 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Lorsque la propriété @code{strict-note-spacing} est activée,
 l'espacement des notes dans un système ne tient compte ni des barres de
index 005ca429f55fc2b6fe8d2cac2dde62dad110a3db..5cbd481dc88fe73b65c34af788c5fe9361d846f7 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Des paroles peuvent venir s'inscrire dans la portée même.  Ces paroles
-sont décalées par la dérogation @code{\\override LyricText
-#'extra-offset = #'(0 . dimension)} ; des commandes similaires
-s'occuperont des extenseurs et des tirets.  Le décalage optimal ne peut
-s'obtenir qu'en procédant à tâtons.
+sont décalées par la dérogation
+@code{\\override LyricText.extra-offset = #'(0 . dimension)} ; des
+commandes similaires s'occuperont des extenseurs et des tirets.
+Le décalage optimal ne peut s'obtenir qu'en procédant à tâtons.
 
 "
   doctitlefr = "Impression des paroles dans la portée"
index 551fb7833deeafb85884d442bf9339684236c075..0c783e5fe662704ffef6df3bf318be2a917f90f5 100644 (file)
@@ -1,12 +1,11 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Les citations tiennent compte de la transposition, aussi bien celle de
 l'instrument d'origine que celle de la partie où elles interviennent.
 Dans l'exemple suivant, tous les instruments sont en tonalité de concert
 et seront repris par un instrument en fa.  Le destinataire de la citation
 peut à son tour transposer à l'aide de la commande @code{\\transpose}.
-En pareil cas, toutes les hauteurs, y compris celles de la citation,
-seront transposées.
+En pareil cas, les hauteurs citées resteront telles quelles.
 
 "
   doctitlefr = "Citation d'une autre voix et transposition"
index c8f5d2f2c76aaa14d76957c9d924aeb09d128396..8df70e4585450b17318820fe56d626c4783d8814 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les types d'événement pris en charge pour la citation sont déterminés par
 la propriété @code{quotedEventTypes}.  Par défaut, sa valeur est fixée à
index 37b0b31830beca4493780c8d193aeeaf75de8a31..abb7d18f86fbe5d37663b3217a38826a32bcfc85 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Cet exemple illustre la manière de créer et afficher des indications de
 doigté pour instrument à vent.
index 05c9cd253bb6c1713408b2183f90f00183cc7c6f..0d29da25d0100b285a2cca176c04a3a9c5e602cc 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Vous pouvez modifier les valeurs des variables @code{startGraceMusic},
 @code{stopGraceMusic}, @code{startAcciaccaturaMusic},
index b6963c81fcf3313a1f079294d0afbf3d6966ec44..5f51cfbe1d7986466ca595f672cc21cccf193956 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Désactiver le graveur concerné -- @code{Bar_number_engraver} --
 donnera une partition -- contexte @code{Score} -- sans numéros de
index 3f59060d97ba8375ac9dd6811cbfbe9d0f59be27..cda724b76312b5ebb19006f36420840d30e920ec 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les barres de mesure des regroupements @code{StaffGroup},
 @code{PianoStaff} et @code{GrandStaff} sont par défaut d'un seul tenant.
index 59971041dd7e5a9e03c997476bebbf8233ac8919..0b9e0f20e7921fbc840f5a8e6ddd030f3e89e41a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Par défaut, le premier système comportera absolument toutes les portées.
 Si vous préférez masquer les portées vides y compris pour le premier
index 6378a6d4feb71a67c1e63c95d6b331c241925a18..a13426a6bfe2bc90529e0184cc2ccdc4cb2e40d5 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les silences peuvent être gravés selon différents styles.
 
index 0016bc0770762895670d7efb4300a45395cc509e..026b57a79583c93ef0b67c2cc303bb90677353c0 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Pour obtenir des ligatures en groupes de @code{3-4-3-2} croches, dans
 une mesure à 12/8, il faudra préalablement annuler les réglages par
index d96d7bee4affe5d4a6233cb211117d937bbaa550..5ee1820fcbc16bdba7146fcc5fbdbffc82d9c5dd 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Il arrive, dans une feuille de chant « simple », que les notes soient
 remplacées par une « pulsation » et que la structure de la chanson soit
-indiquées par les accords au-dessus des mesures.  Ceci peut être utile
+indiquée par les accords au-dessus des mesures.  Ceci peut être utile
 lorsque l'on crée ou retranscrit la structure d'une chanson, ainsi que
 pour donner au guitariste et musiciens de jazz une pseudo partition.  Le
 fonctionnement standard d'un @code{\\repeat percent} n'est pas ici
index 72c0d8306eaf45b57df403610ecb8e7f9456ecfe..04fc8194f13cb7d8978993057b316e8d89f8f4bb 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Modèle pour chœur à quatre voix mixtes, chaque pupitre ayant sa propre
 portée.
diff --git a/Documentation/fr/texidocs/screech-and-boink.texidoc b/Documentation/fr/texidocs/screech-and-boink.texidoc
new file mode 100644 (file)
index 0000000..3c7ae2f
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
+  texidocfr = "
+Notation complexe et aléatoire.
+
+"
+  doctitlefr = "Screech and boink"
index 6ecd1c7d985b1d2363e702cc0e515a76ee6abfdf..1385fc86143538f9e98a9891461b37ae76b76d75 100644 (file)
@@ -1,11 +1,11 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les altérations supprimées lors d'un changement de tonalité sont par
-défaut accolés à la nouvelle armure.  Ce comportement peut s'adapter
-grâce à la propriété @code{'break-align-orders} de l'objet
+défaut accolées à la nouvelle armure.  Ce comportement peut s'adapter
+grâce à la propriété @code{break-align-orders} de l'objet
 @code{BreakAlignment}.
 
-La valeur de @code{'break-align-orders} est constituée d'un vecteur à
+La valeur de @code{break-align-orders} est constituée d'un vecteur à
 trois composantes listant l'ordre des éléments à l'occasion d'une
 rupture.  Seule la deuxième liste est ici modifiée,
 @code{key-cancellation} étant déplacé avant @code{staff-bar}.  En ne
index 2b30a8fe2b2cbc419fffccf1b7da1ad8df30df15..0d3af7aa74315e7728f1a0727e9f318fd04ff54f 100644 (file)
@@ -1,11 +1,11 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 En principe, un soufflet -- (de)crescendo imprimé sous forme graphique --
 commence au bord gauche de la note de départ, et se termine au
 bord droit de la note d'arrivée.  Cependant, si la note d'arrivée
 est sur un premier temps, le soufflet s'arrêtera au niveau de la
 barre de mesure qui la précède.  Ce comportement peut être annulé
-en assignant @emph{faux} (@code{#f}) à la propriété @code{'to-barline}.
+en assignant @emph{faux} (@code{#f}) à la propriété @code{to-barline}.
 
 "
   doctitlefr = "Soufflets et barres de mesure"
index f2ebae0a4b9ebb14f930925efd3753acf47eb955..a23c98d07168e9796b51a32bc09ec51f2dc675c2 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La séparation entre deux systèmes consécutifs peut être mise en
 évidence par n'importe quel @emph{markup}.  LilyPond dispose à cet effet
index d1cb53f0a4b018d553b17821ec9e1a2907483f42..22f8e0edcda1415a69259d198e578163cb4375fd 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 LilyPond dispose de trois différents styles de barre pour indiquer une
 succession de reprises.  Vous devez opter pour un style par défaut, à
 l'aide de la propriété @code{doubleRepeatType}.
 
 "
-  doctitlefr = "Succession de reprise et style de barre par défaut"
+  doctitlefr = "Succession de reprises et style de barre par défaut"
index 088e82134c2e0fb4703453e7732a1e190bc88e27..5fb4f84c18e9906a17483b59fd4f7e0f5b4c549b 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Si un soufflet est trop court, il suffit d'ajuster la propriété
 @code{minimum-length} de l'objet @code{Hairpin} pour l'allonger.
index fe5b0681b0701f15c246417af370caf7b9768c4c..9d5856337d505a08c844338c34fe0e5502760136 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les crochets indiquant les fins alternatives s'étalent tout au long de
 celles-ci.  On peut les raccourcir en jouant sur la propriété
index 0bc7fd6278e04b3408d468503f8b9caaaca389ba..eed5afdb3379b907268290a947874f1df42abb48 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Vous pouvez faire ressortir les chiffrages d'accords s'ils ne sont
 imprimés qu'aux changements d'accord ou en début de ligne.
index f7d3958a4e5183afc662b4227921617204f1115c..d36b995cf210a347d9dd6da9bc9508021709537b 100644 (file)
@@ -1,20 +1,20 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 LilyPond ne permet pas, par défaut, qu'une même articulation (accent,
-flageolet, point d'orgue etc.) se retrouve à la fois au-dessus et
+flageolet, point d'orgueetc.) se retrouve à la fois au-dessus et
 au-dessous d'une note.  Par exemple, @code{c4_\\fermata^\\fermata} ne
 donnera qu'un seul point d'orgue en dessous du do ; celui du dessus sera
 tout bonnement ignoré.  On peut néanmoins accoler des scripts, tels des
 doigtés, à l'intérieur d'un accord ; il peut donc y avoir autant
 d'articulations que de besoin, ce qui, par voie de conséquence, permet
-de s'affranchir de la présence de hampes et de positionner l'articulation
-relativement à la tête de note comme dans le cas du flageolet
-ci-dessous.  L'imitation du traitement d'un script externe à un accord
-requérant un @code{'add-stem-support}, la solution consiste à libeller
-la note comme étant un accord et ajouter les articulations au sein de la
-construction @code{<...>}.  Un simple amendement permettra de rectifier
-le positionnement habituel en surplomb :
-@code{<c-\\tweak #'direction #DOWN-\\fermata^\\fermata>}
+de s'affranchir de la présence des hampes et de positionner
+l'articulation relativement à la tête de note comme dans le cas du
+flageolet ci-dessous.  L'imitation du traitement d'un script
+externe à un accord requérant un @code{add-stem-support} demande
+de libeller la note comme étant un accord et d'ajouter les
+articulations au sein de la construction @code{<@dots{}>}.  Un simple
+amendement permettra de rectifier le positionnement habituel en
+surplomb : @code{<c-\\tweak direction #DOWN-\\fermata^\\fermata>}
 
 "
   doctitlefr = "Impression d'une même articulation des deux côtés d'une note ou d'un accord"
index d8f978bc62e0009430f641a543b336411170809e..13e78669d5586f3c4c3e00ebe1f552cb7a7380ad 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Assembler des noms d'accords, une mélodie et des paroles permet
 d'obtenir la  partition d'un chanson@tie{}:
index d49fba14d8b017eba2e187b66be6c7bea970f6dc..2ac2aa1eef78bb57a6885cb83036f9119baed175 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Ce canevas comporte tous les éléments d'une chanson : la mélodie,
 les paroles, les accords.
index a196fa22949f4d90130fd07c8ae9c587205df51b..d7788361a90269d782805f974e5745b0a72d3140 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Ce canevas comporte, en plus de la mélodie, des paroles et des accords,
 les diagrammes de fret.
index f59d31bbf60bd6a3ddb154a529d8846609942ac2..16ce9c0e2878e4c7fb44a33efb3bc042f2a068f6 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Vous avez besoin de la partition d'une mélodie avec les accords@tie{}?
 N'allez pas plus loin@tie{}!
index 4ca0f3fc21478ff9c7c6d2735d7c1fb16d85d8c9..a8c1640670ee21c05b4ba573bc76e52b680fa4d8 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Ce canevas comporte une simple ligne mélodique agrémentée de paroles.
 Recopiez-le, ajoutez-y d'autres notes et paroles.  Les ligatures
index b1ff49282817326ed7082de9a3883d3c3b74880d..43fb58e7741beb1108070ff379bc33acde13a471 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Cet exemple simpliste se compose d'une portée agrémentée de quelques
 notes.  Il convient tout à fait pour un instrument seul ou un
index 33ed528f1bebc8156caf1e06497644f321344cec..a66e3b75cd3668a5e2178a3b300104c6ac0a60e2 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Sachant qu'un @code{s} au sein d'un bloc @code{\\lyricmode} est
 interprété non comme de l'espace mais comme un mot, l'utilisation de
index b20c127c14a0564786fecab389a877507cb9190e..eb14259f7a54ecba817400b41bde0c83321755f3 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La syntaxe @code{s} qui permet de « faire un saut dans le temps » n'est
 disponible qu'en mode notes et en mode accords.  Dans les autres
index ab6dba06b243c3203844278715dc016ebf917e1f..50dc1805a9fecaf6dda928aeb4b6cc986ae9db9c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Un glissando s'indique dans un @code{TabStaff} tout comme dans un
 @code{Staff}. 
index 60a407e74c00c938d64ca5ec93a16aeb91ce7ce2..50ecf926a77b89587f64fbbc5d5fb8683c11fca9 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Un @emph{slap}, aussi appelé @emph{pizzicato à la Bartók}, est un
 pizzicato où, au lieu de tirer la corde de côté comme à l'accoutumée,
index 09fde4fb11634c365fbd8e5da3b581d74ed15169..763d400196a4d264f51bfc4fedfdada76cfe22e1 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le fait de spécifier un contexte à @code{beatGrouping} permet d'en
 limiter les effets.  Par voie de conséquence, il sera possible
index c0c8c05017fe3f8287afa89da592ce36127ec019..2a49cc2840696cb6471f37387dbd25c41234cb1d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 L'utilisation de la commande @code{\\markup} permet de distribuer un bloc
 de texte indépendant sur plusieurs colonnes.
index f7766f8499df7af314baa781e133baf4b1f0e8cd..70f9b94f857a86a46042eb76b0cd28120746df9e 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La direction des hampes se gère dans les tablatures tout comme en
-notation traditionnelle.  Les ligatures peuvent être mises à l'horizontale
-comme le montre cet exemple.
+notation traditionnelle.  Les ligatures peuvent être mises à
+l'horizontale comme le montre cet exemple.
 
 "
   doctitlefr = "Hampes et ligatures en mode tablature"
index 49cd08e6676396f6a2813d31058be96cd882eb24..2cba8f659f50677cda9cc9d365578871c489796d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le code ci-dessous illustre la manière de concevoir un graveur en
 Scheme, ici chargé de connecter des hampes entre les portées.  Nul n'est
index b4001afadd1e307dec2f23468f0c4f130899e66b..7aeda11c2e751ab28c29434d98d54d19e9ab0bba 100644 (file)
@@ -1,14 +1,14 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Certaines conventions en matière de notation autorisent les ligatures à
 enjamber des silences.  Dans certains cas, des moignons de hampe
-accrochés à la ligature offrent une meilleure visibilité du rythme, et
+accrochés à la ligature offrent une meilleure visibilité du rythme ;
 certaines éditions modernes vont même alors jusqu'à omettre le silence.
 
 Cet exemple illustre la progression : notation traditionnelle, ligature
 enjambant le silence, silence surplombé d'un moignon et enfin seule une
 hampe tronquée.  Les moignons s'obtiennent par amendement de la
-propriété @code{'stemlet-length} de l'objet @code{Stem}, alors que les
+propriété @code{stemlet-length} de l'objet @code{Stem}, alors que les
 silences sont masqués par activation de la propriété de transparence.
 
 Les @emph{markups} ajoutés au code ci-dessous mettent en exergue les
index bf6442cb5696b00d96dedfe0e5c23120fcdb8672..b823c06132a8ec0d5b00b01ebd63840ba334790a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Une sous-ligature tronquée peut pointer en direction de la pulsation à
 laquelle elle se rattache.  Dans l'exemple suivant, la première ligature
index ef1ed188a87b6e3e1919211831aecacf897ed8ca..454711229a93306c2ea77172295110dda96957b5 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Voici comment ajouter une ligne de prolongation à une indication de
 numéro de corde, afin de stipuler que les notes qui suivent doivent être
index 373674f2bd4fc636476fb94ea14782efaf6a0781..4739d2903188d3eb1dae114ab27244960e1c454d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Voici un canevas pour quatuor à cordes.  Notez l'utilisation de la
 variable @code{\\global} pour traiter la métrique et la tonalité.
index 920a7cd7e03bd2260fd7c911f0aeab5e4ccf507e..c1f4353eb470808408e8bac89cd5dbf1c9098e11 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Grâce à ce canevas, vous pouvez obtenir une partition d'excellente
 facture pour quatuor à cordes mais aussi, si le besoin s'en faisait
index e1183efb6d92ab855b99ec1222856f3f027eaa94..c6adef1ee933ebede51a6396fcaa352f54d91e21 100644 (file)
@@ -1,11 +1,11 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Les ligatures d'une succession de notes de durée inférieure à la croche
 ne sont pas subdivisées par défaut.  Autrement dit, tous les traits de
 ligature (deux ou plus) seront continus.  Ce comportement peut être
 modifié afin de diviser la ligature en sous-groupes grâce à la propriété
 @code{subdivideBeams}.  Lorsqu'elle est activée, les ligatures seront
-subdivisées selon un intervalle défini par @code{baseMoment}@tie{}; il n'y
+subdivisées selon un intervalle défini par @code{baseMoment} ; il n'y
 aura alors plus qu'un seul trait de ligature entre chaque sous-groupe.
 Par défaut, @code{baseMoment} fixe la valeur de référence par rapport à
 la métrique en vigueur.  Il faudra donc lui fournir, à l'aide de la
index 9df1745787c18cbbd14d3ac66facfcdb3a689eeb..ab87da9fd88768fc4a9fce676de5991fe63e5948 100644 (file)
@@ -1,14 +1,14 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidoc = "
 Lorsque des notes simultanées appartenant à des voix différentes ont la
 même orientation de hampe et qu'aucun décalage n'a été appliqué ou qu'il
 est identique, LilyPond émettra l'avertissement « @emph{ignoring too
 many clashing note columns} » (trop d'empilements de notes se
 chevauchent. On fera au mieux).  On peut s'exonérer de cet avertissement
-en activant la propriété @code{'ignore-collision} de l'objet
+en activant la propriété @code{ignore-collision} de l'objet
 @code{NoteColumn}.  Notez bien que ceci n'aura pas pour seul effet de
-supprimer les avertissement ; les routines de résolution de collisions
-sont par la même occasion déactivées, ce qui peut engendrer certains
+supprimer les avertissements ; les routines de résolution de collision
+sont par la même occasion désactivées, ce qui peut engendrer certains
 désagréments si vous en abusez.
 
 "
index 7f1b217407dcffeb39ec12266e5d9276e8a98afd..d3ec45cbfa00ae61cf2ac219c1da74bebcbbf6c7 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 L'instruction @code{\\markuplist \\table-of-contents} permet d'inclure
 une table des matières.  Ses éléments sont ajoutés à l'aide de la
index 14b3e740bc2251d2e16b61738986cf512ff50b94..436b5f26c927779c667fa8cc2f51fcea87800f35 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Voici comment construire une commande de @emph{markup} chargée
 d'agrémenter du texte ou autre annotation, d'une bordure sur trois
index 4066e4cc43b61741263a4030d7251f9294cd468e..49afed1df1fcca66a7479262174bd02f54a936ec 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Lorsque les barres de mesure ne sont là que dans un but de coordination
 et non pour accentuer le rythme, il arrive souvent qu'elles se
index 80b766035a8f7e0a2106e4194de12372d09f7e5f..32f034e695c4c9e0b6a48644689c8f47022bda77 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Autre manière de mettre la métrique entre parenthèses.
 
index a4683ea3520d5464480f6c7e3be6511ad904d953..7cbea3cc27d9267b8c06f6ce44d84a6db75f8bda 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Une métrique peut être mise entre parenthèses.
 
index ec4a6fc79a3826737bc8520a6ae6518443f7be12..4decc14b9b4b492363ae2cc54a2ed46ba8d2d2fb 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La métrique est parfois indiquée non pas par une fraction (par ex. 7/4)
 mais simplement par son numérateur (7 dans ce cas).  L'instruction
-@code{\\override Staff.TimeSignature #'style = #'single-digit} permet de
+@code{\\override Staff.TimeSignature.style = #'single-digit} permet de
 déroger au style par défaut de manière permanente -- un @code{\\revert
-Staff.TimeSignature #'style} annulera ces modifications.  Lorsque cette
+Staff.TimeSignature.style} annulera ces modifications.  Lorsque cette
 métrique sous la forme d'un seul chiffre ne se présente qu'une seule
 fois, il suffit de faire précéder l'instruction @code{\\override} d'un
 simple @code{\\once}.
index b3a10749a2107aeb354fa622655a0cb814864e50..7e1aa02cbcca42335710d9fdebddb3c59a127a7d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Voici une méthode alternative pour ajouter un @emph{incipit}
 indépendamment de la partition principale.  Pour ce faire, il est inclus
index 90df08cedca8521843e22a8b75dda5f7c894ebfe..cb1458f4b743bfdc914d5159e3fc2117018b39ea 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Cet exemple, grâce à un peu de code Scheme, donne la priorité aux
 enharmoniques afin de limiter le nombre d'altérations supplémentaires.
index f77d013490bd954e4dc3d43dcf6cb0653cc13944..5ba1b8e0e6ddd82df22d64c2e533d2e02ba639c8 100644 (file)
@@ -1,19 +1,21 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-La commande @code{\\clef \"treble_8\"} équivaut à définir @code{clefGlyph},
-@code{clefPosition} -- qui contrôle la position verticale de la clef --
-@code{middleCPosition} et @code{clefOctavation}.  Une clef est imprimée
-lorsque l'une de ces propriétés, hormis @code{middleCPosition}, est
-modifiée.  Les exemples suivant font apparaître des possibilités de
-réglage manuel de ces propriétés.
+La commande @code{\\clef \"treble_8\"} équivaut à définir
+@code{clefGlyph}, @code{clefPosition} -- qui contrôle la position
+verticale de la clef -- @code{middleCPosition} et
+@code{clefTransposition}.  Une clef est imprimée lorsque l'une de ces
+propriétés, hormis @code{middleCPosition}, est modifiée.  Les exemples
+suivant font apparaître des possibilités de réglage manuel de ces
+propriétés.
 
 Modifier le glyphe, la position de la clef ou son octaviation ne
-changera pas la position des notes ; il faut pour y parvenir
-modifier aussi la position du do médium.  Le positionnement est relatif
-à la ligne médiane, un nombre positif faisant monter, chaque ligne ou
-interligne comptant pour 1.  La valeur de @code{clefOctavation}
-devrait être de 7, -7, 15 ou -15, bien que rien n'empêche de lui
-affecter une autre valeur.
+changeront pas la position des notes ; il faut pour y parvenir modifier
+aussi la position du do médium.  La redéfinition préalable de
+@code{middleCClefPosition} permet de placer l'armure sur les bonnes
+lignes.  Le positionnement est relatif à la ligne médiane, un nombre
+positif faisant monter, chaque ligne ou interligne comptant pour 1.  La
+valeur de @code{clefTransposition} devrait être de 7, -7, 15 ou -15,
+bien que rien n'empêche de lui affecter une autre valeur.
 
 Lorsqu'un changement de clef intervient en même temps qu'un saut de
 ligne, la nouvelle clef est imprimée à la fois en fin de ligne et au
index b8631b1702cbb57ea529523e7447cb35fe981b5a..f6b3326085dc4aaf6a13d8cea0b192a452e9cd81 100644 (file)
@@ -1,11 +1,12 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Il est possible de changer globalement la mise en forme des notes d'ornement
-dans un morceau, au moyen des fonctions @code{add-grace-property} et
-@code{remove-grace-property}.  Ici, par exemple, on ôte la définition de
-l'orientation des objets @code{Stem} pour toutes les petites notes, afin
-que les hampes ne soient pas toujours orientées vers le haut, et on leur
-préfère des têtes en forme de croix.
+Il est possible de changer globalement la mise en forme des notes
+d'ornement dans un morceau, au moyen des fonctions
+@code{add-grace-property} et @code{remove-grace-property}.  Ici,
+par exemple, on ôte la définition de l'orientation des objets
+@code{Stem} pour toutes les petites notes, afin que les hampes ne
+soient pas toujours orientées vers le haut, et on leur préfère des
+têtes en forme de croix.
 
 "
   doctitlefr = "Mise en forme des notes d'ornement"
index e209c1e7360eeeb58662d08bdb9149a354d53568..ffedeadf9adcce2aaa9f2b18805b75b649f55110 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Un regroupement de portées sera indiqué par un simple rectangle
 -- @code{SystemStartSquare} -- en début de ligne dès lors que vous le
diff --git a/Documentation/fr/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc b/Documentation/fr/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc
new file mode 100644 (file)
index 0000000..23c994b
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
+  texidocfr = "
+Les musiques vocales ou pour vents utilisent souvent une coche en
+tant que signe de respiration.  Ceci indique une respiration qui
+enlève une fraction à la note précédente plutôt qu'une véritable
+pause comme le fait un signe sous forme de virgule.  La coche peut
+être remontée un peu afin de l'isoler de la portée.
+
+"
+  doctitlefr = "Remplacement du signe de respiration par une coche"
index 083e54e0c97256f4a884db199bdbbdd46033cc67..b4318630a5c003e2a9cceca528b8843235610569 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
-Une dérogation à la propriété  @code{stencil} de l'objet @code{Flag}
+Une dérogation à la propriété @code{stencil} de l'objet @code{Flag}
 permet aux croches et notes de durée inférieure d'adopter une autre
 forme de crochet.  Sont disponibles les variantes
 @code{modern-straight-flag} et @code{old-straight-flag}.
index 6882ec096949fd485b88df906c25fc1241cc17d2..6afde8daec8504b38ba392c0605b7563494a4ae8 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Un crochet d'arpège (@code{arpeggioBracket}) permet de mettre en
 évidence les divisions d'un pupitre en l'absence de hampe, comme on le
diff --git a/Documentation/fr/texidocs/using-autochange-with-more-than-one-voice.texidoc b/Documentation/fr/texidocs/using-autochange-with-more-than-one-voice.texidoc
new file mode 100644 (file)
index 0000000..fd63482
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
+  texidocfr = "
+L'instruction @code{\\autochange} est opérationnelle y compris en
+présence de voix multiples.
+
+"
+  doctitlefr = "Utilisation d'autochange avec plus d'une voix"
diff --git a/Documentation/fr/texidocs/using-beatlength-and-beatgrouping.texidoc b/Documentation/fr/texidocs/using-beatlength-and-beatgrouping.texidoc
deleted file mode 100644 (file)
index 95d90ee..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
-  texidocfr = "
-La propriété @code{measureLength} détermine la pulsation et, combinée à
-@code{beatLength} et @code{beatGrouping}, comment générer les ligatures
-automatiques selon les durées et la métrique lorsqu'aucune règle n'a été
-définie.  L'exemple commenté qui suit indique différentes façons de
-contrôler les ligatures à l'aide de ces propriétés.
-
-"
-  doctitlefr = "Utilisation conjointe de beatLength et beatGrouping"
index 40414c052087fb4d0ee6d2ab86f2d5c53c2e2a5f..1bd648566d0c8eb168be50403b4de255a763df62 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Certains auteurs utilisent deux liaisons lorsqu'ils veulent lier des
 accords.  Dans LilyPond, il faut pour cela activer la propriété
index 29268c5b7cc85b70a23390b7923767d3b344954f..35260e098526f1be5e0c6c3f4c6c341f91a897a7 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le trait que l'on trouve sur les hampes des acciaccatures peut
 être appliqué dans d'autres situations.
index b390ea49e66ca57bab9af12a6acf42024eb765de..f6cd633e072dd86a2eae6cef9bbd2e2da68ded68 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Certains objets graphiques ne sont accessibles que par le biais d'un
 @emph{callback} à partir d'un autre @code{grob}.  Ils sont normalement
@@ -7,7 +7,7 @@ listés dans les « @emph{layout objects} » au sein de la section
 @code{ly:grob-object} permet d'accéder à ces objets.
 
 Voici plusieurs moyens d'accéder aux objets par un @emph{callback} sur
-@code{NoteHead}.  D'autres biais sont naturellement possible ;
+@code{NoteHead}.  D'autres biais sont naturellement possibles ;
 @code{NoteHead} a cependant l'avantage incontestable d'être utilisé
 implicitement par la commande @code{\\tweak}.
 
index 3bc43f28715169f2ecf05e67f01161c2f1976376..32590b6b1e7018859576e680a73a27c6383fecda 100644 (file)
@@ -1,9 +1,9 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Lorsqu'il est impossible d'obtenir facilement une allure particulière
-pour les têtes de note en recourant à la technique du @code{\\markup}, un
-code PostScript peut vous tirer d'embarras.  Voici comment générer des
-têtes ressemblant à des parallélogrammes.
+pour les têtes de note en recourant à la technique du
+@code{\\markup}, un code PostScript peut vous tirer d'embarras.
+Voici comment générer des têtes ressemblant à des parallélogrammes.
 
 "
   doctitlefr = "Utilisation de PostScript pour générer des têtes de note à l'allure particulière"
index d9bc44c75b7b85a541cdf5d88c27fa8581a4b6b9..cb4677b2e543b893c8c665297ec64491ac5eacff 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 La commande @code{\\tweak} permet de retoucher directement n'importe
 quel objet graphique.  En voici quelques exemples :
index 10eeed234a65b9141a00052bc728fd810e834167..224b67bfadaf05b7d8da1836241b9c1e3285fded 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Tout objet graphique peut s'imprimer sur un fond blanc afin de masquer
 une partie des objets qu'il recouvre.  Ceci trouve toute son utilité
index 0a31e5ae289f147b5173741e23762ad496533240..57f3f0853a5816c43b95da155366fe1aff02e6b2 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Les liaisons de tenue servent parfois à rendre un accord arpégé.  Dans
 ce cas, les notes liées ne sont pas toutes consécutives. Il faut alors
diff --git a/Documentation/fr/texidocs/utf-8.texidoc b/Documentation/fr/texidocs/utf-8.texidoc
new file mode 100644 (file)
index 0000000..1ef67fd
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
+  texidocfr = "
+Différents éléments textuels peuvent s'ajouter à la notation, comme des
+titres ou des paroles, dès lors qu'ils sont encodés en UTF-8, grâce à un
+moteur de rendu reposant sur Pango. Selon les fontes disponibles
+devraient apparaître quatre lignes de texte : en bulgare (en
+cyrillique), en hébreux, en japonais et en portugais.
+
+"
+  doctitlefr = "UTF-8"
index 8e1f61f290fa4f555ecfbaa22e040c2d239f1173..d85d09a9105b7e3252cc09e38b3c9d41df0bad8e 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 On trouve régulièrement, en musique baroque, cette courte ligne
 verticale. Sa signification peut varier, mais elle indique le plus
index 9dcd6a0bfd49e67e347857a690d4d673b6e91539..c965eaa3beb704fe7721d69c8c8d2e442d8c93b2 100644 (file)
@@ -1,13 +1,15 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
-Vous pourrez, en jouant sur la propriété @code{'Y-extent}, aligner les
-différents objets @code{DynamicLineSpanner} (soufflets ou textuels)
-quelle que soit leur étendue, par rapport à un même point de référence.
-Tous les éléments seront alors centrés sur une même ligne, ce qui sera
-visuellement plus agréable.
+Tous les objets @code{DynamicLineSpanner} (soufflets ou nuances
+textuelles) viennent s'aligner sur une ligne de référence placée, par
+rapport à la portée, à au moins la valeur de @code{'staff-padding} sauf
+lorsque d'autres éléments de notation les en éloigne plus.  Les nuances
+seront centrés sur une même ligne dès lors que @code{'staff-padding}
+aura été défini à une valeur suffisante.
 
-C'est le même principe qui sert à aligner les indications textuelles sur
-une ligne de référence.
+C'est le même principe -- en combinaison avec @code{\\textLengthOn} --
+qui sert à aligner les indications textuelles sur une ligne de
+référence.
 
 "
   doctitlefr = "Alignement vertical des nuances indications textuelles"
index fc70648088f864797f276ec7db9ac89d60107e85..f0e8b1f336e9e91b9cd741f7736cb256695b591b 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Des nuances qui commencent, finissent ou se produisent sur une même note
 auront le même alignement vertical.  L'augmentation de la propriété
index 5571f43c69f4705ff4deb93a0bd35f5bbfe2efb2..ebd27ef5d27cb8e2e389f9f74718f288025edadd 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Cet exemple illustre la manière de positionner une portée d'ossia et
 des paroles à l'aide des propriétés de contexte @code{alignBelowContext}
index 514c2c70ce73b756f31480708f2ed9cff3d7fcd4..8363400b1048ed1fc85bda969889ac6458e22156 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Il arrive, dans certaines partitions vocales, que quelques paroles
 soient communes à tous les couplets.  Cette partie commune peut peut se
index 88ade75bc1fab56d1a3f2afeb22d6b62e60daa0f..c0e73b6a7a7101caaf0bea37d90d0a67a604365b 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 L'activation de la propriété @code{useBassFigureExtenders} permet
 d'afficher des lignes de prolongation pour les chiffres qui se répètent.
index 94c349003fdef4a986f96b5f6e2896d4b43c5aaf..6aa063e7fa668203b51e77d9fa766c8f477023c5 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Ce canevas ajoute une réduction pour piano à une partition standard pour
 chœur à quatre voix mixtes.  Ceci illustre l'un des avantages de
index ec7d0a2831a9739bc56ee82f82206d5e971ca179..bd0430e82ec385a4a21628dd996b41bcd8384df8 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Ce canevas ressemble beaucoup à celui pour chœur à quatre voix mixtes.
 La différence réside dans le fait que les paroles sont positionnées en
index b6b15e811597abc63b190e32750f648684da0e5c..22d0da239be924c29f96becb0bd2c015151852fd 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Ce canevas illustre la manière d'agencer une œuvre vocale où le couplet
 est chanté en solo et le refrain à deux voix.  Vous noterez le recours
index d1c8799fe3b9f9e43de6566dad93d52405ba6ba6..a1108ad68eae868905b457f290c69fb96db0536a 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee
   texidocfr = "
 Ce fichier constitue un canevas standard de partition pour chœur à
 quatre voix mixtes.  Lorsque les ensembles s'étoffent, il est judicieux
index ea256bc6044dd8760ce1d160ec546eb327203b90..d94d8394dd8873020bb15802323d0329e86cdb91 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 L'ajout du @code{Volta_engraver} à la bonne portée permet d'imprimer les
 crochets de reprise entre les chiffrages et la portée.
index 3d3c8f87ba85141e221efba302e18a32b541710d..a0a03ddd96cb8ce331a1530defcca7ee09c2929d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 L'ajout du @code{Volta_engraver} à la portée appropriée permet de
 répéter les indications de reprise qui normalement n'apparaissent que
index 23347fa68030e55c5107025b1c2aac6cff3d6d70..6291ae2a8899a856eb62f1a8b07edfe3ff39eb76 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 La commande @code{\\repeat volta} permet d'indiquer facilement des
 reprises.  Il est certains cas où l'adjonction d'un texte sous forme de
index bfa3f22c0c418ca17e12f4dc78331d7c45881572..fe5ed40912949589644edf3b580d71aa58f4ef13 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Le code suivant permet d'obtenir une liste de toutes les possibilités en
 matière de doigtés pour bois, tels qu'ils sont définis dans le fichier
index 34ccc9803071d1bdaae21a62bd8dbf8e10522c07..434572b0bcba0f45f76bab75e03e97eb57968985 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de
+%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89
   texidocfr = "
 Voici les différents instruments à vent de la section des bois pour
 lesquels LilyPond peut, à ce jour, afficher des doigtés.
index 82836d355b542065dfe4552d4a27d2d3302d6985..b8576ff1808b181b508c8bfa03c1793f9508aca9 100644 (file)
@@ -16,7 +16,7 @@ td { border: 1px solid black; text-align: center; }
 
 @end html
 @end ifhtml
-@emph{Dernière mise à jour Thu May 31 09:12:39 UTC 2012
+@emph{Dernière mise à jour Wed Dec 18 12:23:14 UTC 2013
 }
 @multitable @columnfractions  0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
 
@@ -210,7 +210,7 @@ oui
 @item
 1 Tutoriel Scheme
 @*
-6041
+6271
 @tab Jean-Charles Malahieude
 @tab 
 @tab 
@@ -237,7 +237,7 @@ oui
 @item
 2 Interfaces pour programmeurs
 @*
-5250
+5925
 @tab Valentin Villenave
 @*
 Jean-Charles Malahieude
@@ -336,7 +336,7 @@ oui
 @item
 1 Tutoriel
 @*
-2535
+2578
 @tab Nicolas Grandclaude
 @*
 Ludovic Sardain
@@ -371,7 +371,7 @@ oui
 @item
 2 Bases de notation musicale
 @*
-4187
+4396
 @tab Nicolas Grandclaude
 @*
 Ludovic Sardain
@@ -406,7 +406,7 @@ oui
 @item
 3 Concepts fondamentaux
 @*
-11130
+11144
 @tab Valentin Villenave
 @*
 Jean-Charles Malahieude
@@ -435,7 +435,7 @@ oui
 @item
 4 Retouche de partition
 @*
-15468
+16191
 @tab Valentin Villenave
 @*
 Nicolas Klutchnikoff
@@ -458,17 +458,17 @@ oui
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partiellement</span>
+<span style="background-color: #1fff1f">oui</span>
 @end html
 @end ifhtml
 @ifnothtml
-partiellement
+oui
 @end ifnothtml
 @tab post-GDP
 @item
 A Modèles
 @*
-219
+372
 @tab Jean-Charles Malahieude
 @tab 
 @tab 
@@ -507,7 +507,7 @@ GNU LilyPond -- Manuel de notation
 @item
 Titre des chapitres
 @*
-355
+326
 @tab John Mandereau
 @*
 Jean-Charles Malahieude
@@ -594,7 +594,7 @@ oui
 @item
 1.1 Hauteurs
 @*
-4530
+4990
 @tab Frédéric Chiasson
 @tab Valentin Villenave
 @*
@@ -623,7 +623,7 @@ oui
 @item
 1.2 Rythme
 @*
-6352
+6890
 @tab Frédéric Chiasson
 @*
 Jean-Charles Malahieude
@@ -656,7 +656,7 @@ oui
 @item
 1.3 Signes d'interprétation
 @*
-1712
+1793
 @tab Valentin Villenave
 @*
 Jean-Charles Malahieude
@@ -687,7 +687,7 @@ oui
 @item
 1.4 Répétitions et reprises
 @*
-1011
+1050
 @tab Valentin Villenave
 @*
 Jean-Charles Malahieude
@@ -718,7 +718,7 @@ oui
 @item
 1.5 Notes simultanées
 @*
-2640
+2821
 @tab Frédéric Chiasson
 @*
 Valentin Villenave
@@ -751,7 +751,7 @@ oui
 @item
 1.6 Notation sur la portée
 @*
-2392
+2476
 @tab Valentin Villenave
 @*
 Jean-Charles Malahieude
@@ -780,7 +780,7 @@ oui
 @item
 1.7 Annotations éditoriales
 @*
-949
+954
 @tab Jean-Charles Malahieude
 @tab 
 @tab 
@@ -807,7 +807,7 @@ oui
 @item
 1.8 Texte
 @*
-2729
+2816
 @tab Jean-Charles Malahieude
 @tab Valentin Villenave
 @*
@@ -865,7 +865,7 @@ oui
 @item
 2.1 Musique vocale
 @*
-4758
+5190
 @tab Valentin Villenave
 @*
 Jean-Charles Malahieude
@@ -894,7 +894,7 @@ oui
 @item
 2.2 Instruments utilisant des portées multiples
 @*
-862
+888
 @tab Valentin Villenave
 @*
 Jean-Charles Malahieude
@@ -956,7 +956,7 @@ oui
 @item
 2.4 Instruments à cordes frettées
 @*
-2675
+2662
 @tab Matthieu Jacquot
 @tab Jean-Charles Malahieude
 @tab 
@@ -983,7 +983,7 @@ oui
 @item
 2.5 Percussions
 @*
-812
+811
 @tab Valentin Villenave
 @*
 Jean-Charles Malahieude
@@ -1012,7 +1012,7 @@ oui
 @item
 2.6 Instruments à vent
 @*
-321
+324
 @tab Valentin Villenave
 @*
 Jean-Charles Malahieude
@@ -1043,7 +1043,7 @@ oui
 @item
 2.7 Notation des accords
 @*
-2022
+1972
 @tab Valentin Villenave
 @*
 Jean-Charles Malahieude
@@ -1101,7 +1101,7 @@ oui
 @item
 2.9 Notations anciennes
 @*
-4752
+5375
 @tab Jean-Charles Malahieude
 @tab 
 @tab 
@@ -1157,7 +1157,7 @@ oui
 @item
 3 Généralités en matière d'entrée et sortie
 @*
-8701
+10392
 @tab Jean-Charles Malahieude
 @*
 Valentin Villenave
@@ -1176,17 +1176,17 @@ oui
 @ifhtml
 
 @html
-<span style="background-color: #39ff22">partiellement</span>
+<span style="background-color: #1fff1f">oui</span>
 @end html
 @end ifhtml
 @ifnothtml
-partiellement
+oui
 @end ifnothtml
 @tab pré-GDP
 @item
 4 Gestion de l'espace
 @*
-11234
+12256
 @tab Frédéric Chiasson
 @*
 Jean-Charles Malahieude
@@ -1215,7 +1215,7 @@ oui
 @item
 5 Modification des réglages prédéfinis
 @*
-12679
+15289
 @tab Valentin Villenave
 @*
 Jean-Charles Malahieude
@@ -1234,17 +1234,17 @@ oui
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partiellement</span>
+<span style="background-color: #1fff1f">oui</span>
 @end html
 @end ifhtml
 @ifnothtml
-partiellement
+oui
 @end ifnothtml
 @tab pré-GDP
 @item
 A Tables du manuel de notation
 @*
-2177
+2176
 @tab Frédéric Chiasson
 @*
 Jean-Charles Malahieude
@@ -1253,11 +1253,11 @@ Jean-Charles Malahieude
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partiellement (95 %)</span>
+<span style="background-color: #1fff1f">oui</span>
 @end html
 @end ifhtml
 @ifnothtml
-partiellement (95 %)
+oui
 @end ifnothtml
 @tab 
 @ifhtml
@@ -1370,7 +1370,7 @@ oui
 @item
 1 Exécution de @command{lilypond}
 @*
-4615
+4537
 @tab Jean-Charles Malahieude
 @tab 
 @tab 
@@ -1397,7 +1397,7 @@ oui
 @item
 2 Mise à jour avec @command{convert-ly}
 @*
-1209
+1484
 @tab Jean-Charles Malahieude
 @tab 
 @tab 
@@ -1451,7 +1451,7 @@ oui
 @item
 4 Programmes externes
 @*
-2390
+2817
 @tab Jean-Charles Malahieude
 @tab 
 @tab 
@@ -1478,7 +1478,7 @@ oui
 @item
 5 Suggestions pour la saisie de fichiers LilyPond
 @*
-2694
+2692
 @tab Ludovic Sardain
 @*
 Jean-Charles Malahieude
@@ -1487,8 +1487,6 @@ Jean-Charles Malahieude
 Valentin Villenave
 @*
 John Mandereau
-@*
-Jean-Charles Malahieude
 @tab 
 @ifhtml
 
@@ -1579,7 +1577,7 @@ oui
 @item
 Introduction
 @*
-4753
+4937
 @tab Gauvain Pocentek
 @*
 Jean-Charles Malahieude
@@ -1610,7 +1608,7 @@ oui
 @item
 Téléchargement
 @*
-1211
+1201
 @tab Jean-Charles Malahieude
 @*
 John Mandereau
@@ -1639,7 +1637,7 @@ oui
 @item
 Manuels
 @*
-1214
+1284
 @tab John Mandereau
 @tab Jean-Charles Malahieude
 @tab 
@@ -1666,11 +1664,11 @@ oui
 @item
 Communauté
 @*
-3006
+3073
 @tab Jean-Charles Malahieude
 @*
 John Mandereau
-@tab Jean-Charles Malahieude
+@tab 
 @tab 
 @ifhtml
 
@@ -1685,11 +1683,11 @@ oui
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">partiellement</span>
+<span style="background-color: #1fff1f">oui</span>
 @end html
 @end ifhtml
 @ifnothtml
-partiellement
+oui
 @end ifnothtml
 @tab pré-GDP
 @end multitable
diff --git a/Documentation/fr/usage/GNUmakefile b/Documentation/fr/usage/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 64b705b1bccf33c7282bffd2e2aa7aa77bfbd571..0e6e2d14dceab846d694d5eaf1b6cce75afe6240 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: eea3764cd6bbc78506261f78ed4e7745ac69df41
+    Translation of GIT committish: 0a8b4e0f1b0d68659a584be48c7b96da358d501d
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -32,19 +32,6 @@ manières.
 @section Pointer-cliquer
 @translationof Point and click
 
-Le pointer-cliquer ajoute des liens au sein des documents PDF, pour
-certains événements musicaux.
-
-@menu
-* Activation du pointer-cliquer::
-* Pointer-cliquer sélectif::
-@end menu
-
-
-@node Activation du pointer-cliquer
-@unnumberedsubsec Activation du pointer-cliquer
-@translationof Enabling point and click
-
 @cindex pointer-cliquer
 @cindex point and click
 
@@ -53,24 +40,28 @@ directement dans le fichier source, à la note que l'on pointe dans le
 visionneur de PDF.  Ceci facilite grandement le repérage des erreurs à
 partir du fichier imprimable.
 
+
+@menu
+* Configuration du système pour le pointer-cliquer::
+* Activation du pointer-cliquer::
+* Pointer-cliquer sélectif::
+@end menu
+
+
+@node Configuration du système pour le pointer-cliquer
+@subsection Configuration du système
+@translationof Configuring the system for point and click
+
 Lorsque cette fonctionnalité est active, LilyPond ajoute des hyperliens
-au fichier PDF.  Ces liens sont transmis au navigateur internet qui se
-charge d'ouvrir un éditeur de texte à l'endroit même où le curseur
-pointe.
+au fichier PDF.  Ces liens sont transmis à un « URI helper » ou au
+navigateur internet, qui se charge d'ouvrir un éditeur de texte à
+l'endroit même où le curseur pointe.
 
 Afin que cette chaîne de traitement soit pleinement opérationnelle, il
 faut configurer votre visionneur de PDF de façon à ce qu'il suive les
 liens grâce au script @file{lilypond-invoke-editor} fourni avec
 LilyPond.
 
-Pour Xpdf, sous UNIX, vous devrez insérer la ligne suivante dans
-le fichier @file{xpdfrc} -- soit @file{/etc/xpdfrc}, soit dans votre
-répertoire personnel @file{.xpdfrc}.
-
-@example
-urlCommand     "lilypond-invoke-editor %s"
-@end example
-
 @file{lilypond-invoke-editor} est un petit programme assistant.  Il
 se charge d'appeler un éditeur pour les identifiants de ressource
 (@emph{URI}) de type @code{textedit}, et un navigateur pour les autres.
@@ -110,10 +101,150 @@ emacsclient --no-wait +%(line)s:%(column)s %(file)s
 en variable d'environnement @code{LYEDITOR} revient au lancement d'un
 client emacs standard.
 
+@menu
+* Utilisation du pointer-cliquer avec Xpdf::
+* Utilisation du pointer-cliquer avec GNOME 2::
+* Utilisation du pointer-cliquer avec GNOME 3::
+* Configuration spécifique à Evince::
+@end menu
+
+
+@node Utilisation du pointer-cliquer avec Xpdf
+@unnumberedsubsubsec Utilisation avec Xpdf
+@translationof Using Xpdf for point and click
+
+@cindex Xpdf
+
+Pour Xpdf, sous UNIX, vous devrez insérer la ligne suivante dans
+le fichier @file{xpdfrc} -- soit @file{/etc/xpdfrc}, soit dans votre
+répertoire personnel @file{$HOME/.xpdfrc}.
+
+@example
+urlCommand     "lilypond-invoke-editor %s"
+@end example
+
+Dans un environnement Ubuntu, il est fort probable que la version de
+Xpdf installée avec le système plante à l'ouverture de tout fichier PDF
+-- c'est un problème connu et persistant depuis plusieurs années et dû à
+des incohérences de bibliothèques.  La solution consiste alors à
+installer une version à jour des paquetages @samp{xpdf} et
+@samp{libpoppler} directement à partir de Debian.  Une fois assuré que
+tout fonctionne correctement, la commande
+
+@example
+sudo apt-mark hold xpdf
+@end example
+
+@noindent
+permet d'empêcher Ubuntu de le remplacer par un paquetage défectueux à
+la prochaine « mise à jour ».
+
+
+@node Utilisation du pointer-cliquer avec GNOME 2
+@unnumberedsubsubsec Utilisation avec GNOME 2
+@translationof Using GNOME 2 for point and click
+
+En ce qui concerne l'environnement GNOME 2 et les lecteur de PDF
+associés, la succession de commandes suivante permet de régler le
+système pour la gestion des URI par @samp{textedit:}
+
+@example
+gconftool-2 -t string -s /desktop/gnome/url-handlers/textedit/command "lilypond-invoke-editor %s"
+gconftool-2 -s /desktop/gnome/url-handlers/textedit/needs_terminal false -t bool
+gconftool-2 -t bool -s /desktop/gnome/url-handlers/textedit/enabled true
+@end example
+
+Après ces invocations,
+@example
+gnome-open textedit:///etc/issue:1:0:0
+@end example
+@noindent
+devrait appeler @file{lilypond-invoke-editor} pour ouvrir les fichiers.
+
+
+@node Utilisation du pointer-cliquer avec GNOME 3
+@unnumberedsubsubsec Utilisation avec GNOME 3
+@translationof Using GNOME 3 for point and click
+
+En ce qui concerne l'environnement GNOME 3, les URI sont gérés par la
+surcouche « gvfs » au lieu de « gconf ».  Il faut donc créer un fichier
+dans un répertoire local tel que @file{/tmp}, que l'on appelera
+@file{lilypond-invoke-editor.desktop}. Il devra avoir le contenu
+suivant :
+
+@example
+[Desktop Entry]
+Version=1.0
+Name=lilypond-invoke-editor
+GenericName=Textedit URI handler
+Comment=URI handler for textedit:
+Exec=lilypond-invoke-editor %u
+Terminal=false
+Type=Application
+MimeType=x-scheme-handler/textedit;
+Categories=Editor
+NoDisplay=true
+@end example
+
+puis exécuter les commandes
+@example
+xdg-desktop-menu install ./lilypond-invoke-editor.desktop
+xdg-mime default lilypond-invoke-editor.desktop x-scheme-handler/textedit
+@end example
+
+Après cette invocation,
+@example
+gnome-open textedit:///etc/issue:1:0:0
+@end example
+
+@noindent
+devrait appeler @file{lilypond-invoke-editor} pour ouvrir les fichiers.
+
+
+@node Configuration spécifique à Evince
+@unnumberedsubsubsec Configuration spécifique à Evince
+@translationof Extra configuration for Evince
+
+@cindex Evince
+
+Il se peut que, bien que @code{gnome-open} soit fonctionnel, Evince
+refuse d'ouvir les liens pointer-cliquer pour des raisons
+d'autorisation.  S'impose alors une modification du profil
+@code{Apparmor} d'Evince ; c'est lui qui contrôle le type d'action
+qu'Evince est autorisé à réaliser.
+
+Sur une distribution Ubuntu, cela consiste à éditer le fichier
+@file{/etc/apparmor.d/local/usr.bin.evince} et lui ajouter les lignes
+suivantes :
+
+@example
+# Pour les liens Textedit
+/usr/local/bin/lilypond-invoke-editor Cx -> sanitized_helper,
+@end example
+@noindent
+
+puis lancer la commande
+
+@example
+sudo apparmor_parser -r -T -W /etc/apparmor.d/usr.bin.evince
+@end example
+
+@noindent
+Evince devrait alors être en mesure d'ouvrir les liens pointer-cliquer.
+Une telle configuration devrait être fonctionnelle pour d'autres
+visionneurs.
+
+
+@node Activation du pointer-cliquer
+@unnumberedsubsec Activation du pointer-cliquer
+@translationof Enabling point and click
 
 @cindex ficher de sortie, taille
 @cindex taille du ficher de sortie
 
+La fonctionnalité de « pointer-cliquer » est activée par défaut pour ce
+qui est des fichiers PDF.
+
 L'option pointer-cliquer accroît la taille des fichiers de manière
 significative.  Afin de réduire la taille des fichiers PDF et PS, il est
 toujours possible de désactiver le pointer-cliquer en ajoutant
@@ -389,7 +520,7 @@ Quantiser les durées à partir de @var{DUR}.
 @item -e, --explicit-durations
 Rendu explicite des durées.
 
-@item -h,--help
+@item -h, --help
 Afficher un résumé des utilisations.
 
 @item -k, --key=@var{acc}[:@var{minor}]
@@ -457,7 +588,7 @@ directement à partir de la ligne de commande.
 @item -a, --absolute
 Rendu en hauteurs absolues.
 
-@item -h,--help
+@item -h, --help
 Afficher un résumé des utilisations.
 
 @item -l, --language=LANG
@@ -476,7 +607,7 @@ mémoire et temps de calcul, pour effectuer l'analyse XML.
 @item -m, --midi
 Ajouter un bloc @code{\midi}.
 
-@item --nd --no-articulation-directions
+@item --nd, --no-articulation-directions
 Ne pas convertir la direction (@code{^}, @code{_} ou @code{-}) des
 articulations, nuances, etc.
 
@@ -484,21 +615,21 @@ articulations, nuances, etc.
 Ne pas convertir les informations de ligature ; laisser LilyPond
 gérer les ligatures automatiquement.
 
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
 Générer le résultat dans le fichier @var{fichier}.  S'il n'est pas
 déterminé, ce sera @var{fichier-xml}@file{.ly} ; @file{-}
 produira le résultat sur la sortie standard (@var{stdout}).
 
-@item -r,--relative
+@item -r, --relative
 Rendu en hauteurs relatives (mode par défaut).
 
-@item -v,--verbose
+@item -v, --verbose
 Mode verbeux.
 
 @item --version
 Afficher le numéro de version.
 
-@item -z,--compressed
+@item -z, --compressed
 Le fichier d'entrée est un fichier MusicXML zippé.
 @end table
 
@@ -528,16 +659,16 @@ abc2ly [@var{option}]@dots{} @var{fichier-abc}
 @command{abc2ly} accepte les options suivantes :
 
 @table @code
-@item -b,--beams=None
+@item -b, --beams=None
 Préserver la notion de lien de croches propre à ABC.
 
-@item -h,--help
+@item -h, --help
 Afficher un résumé des utilisations.
 
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
 Générer le résultat dans le fichier @var{file}.
 
-@item -s,--strict
+@item -s, --strict
 Être strict sur la réussite.
 
 @item --version
@@ -607,7 +738,7 @@ commande du système.  Pour plus de précisions, reportez-vous à
 @command{etf2ly} accepte les options suivantes :
 
 @table @code
-@item -h,--help
+@item -h, --help
 Afficher cette aide.
 
 @item -o, --output=@var{file}
@@ -618,7 +749,6 @@ Afficher le numéro de version.
 @end table
 
 @knownissues
-
 La liste des scripts d'articulation est incomplète.  Les mesures vides
 perturbent @command{etf2ly}.  Les séquences de notes d'ornement ne se
 terminent pas de manière satisfaisante.
@@ -758,5 +888,3 @@ mordants.
 Ce projet ne peut traiter que ce qu'il connaît : tout ce qui peut
 ressembler à un @emph{markup} -- et donc pas à la propriété d'une note
 -- sera ignoré.
-
-@c  LocalWords:  noindent unnumberedsubsec knownissues
index 27ccb9b9225a8090ec08dd92ccff88a4d799e4ed..2c1d263585d3eaefacbf163f7c74016b8541ffb5 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: e0f3be42e16458e44183c142561ccdd05aa1bfb9
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -9,7 +9,7 @@
 @end ignore
 
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Jean-Charles Malahieude
 @c Translation checkers:
@@ -100,7 +100,7 @@ Par exemple,
 
 \begin{lilypond}
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 \end{lilypond}
 
@@ -134,11 +134,11 @@ dans un terminal, lancez
 lilypond-book --output=out --pdf lilybook.lytex
 @emph{lilypond-book (GNU LilyPond) @version{} }
 @emph{Lecture de lilybook.lytex...}
-@emph{..nous vous épargnons le verbiage de la console..}
+@emph{@dots{}nous vous épargnons le verbiage de la console@dots{}}
 @emph{Compilation de lilybook.tex...}
 cd out
 pdflatex lilybook
-@emph{..nous vous épargnons le verbiage de la console..}
+@emph{@dots{}nous vous épargnons le verbiage de la console@dots{}}
 xpdf lilybook
 @emph{(remplacez @command{xpdf} par votre lecteur de PDF habituel)}
 @end example
@@ -165,7 +165,7 @@ Par exemple,
 
 @lilypond
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 @end lilypond
 
@@ -233,20 +233,20 @@ suivantes :
 @itemize
 
 @item
-la commande @code{\lilypond@{...@}} qui permet de directement saisir du
-code LilyPond simple ;
+la commande @code{\lilypond@{@dots{}@}} qui permet de directement saisir
+du code LilyPond simple ;
 
 @item
-l'environnement @code{\begin@{lilypond@}...\end@{lilypond@}} qui permet
-de saisir directement du code LilyPond plus élaboré ;
+l'environnement @code{\begin@{lilypond@}@dots{}\end@{lilypond@}} qui
+permet de saisir directement du code LilyPond plus élaboré ;
 
 @item
-la commande @code{\lilypondfile@{...@}} qui permet d'insérer un fichier
-LilyPond ;
+la commande @code{\lilypondfile@{@dots{}@}} qui permet d'insérer un
+fichier LilyPond ;
 
 @item
-la commande @code{\musicxmlfile@{...@}} qui permet d'insérer un fichier
-MusicXML qui sera alors traité par @code{musicxml2ly} puis
+la commande @code{\musicxmlfile@{@dots{}@}} qui permet d'insérer un
+fichier MusicXML qui sera alors traité par @code{musicxml2ly} puis
 @code{lilypond}.
 
 @end itemize
@@ -428,9 +428,9 @@ nombre de systèmes requis :
 
 @example
 \onlyFirstNSystems@{3@}
-\begin@{lilypond@}...\end@{lilypond@}
+\begin@{lilypond@}@dots{}\end@{lilypond@}
 \onlyFirstNSystems@{1@}
-\begin@{lilypond@}...\end@{lilypond@}
+\begin@{lilypond@}@dots{}\end@{lilypond@}
 @end example
 
 
@@ -457,20 +457,21 @@ suivantes :
 @itemize
 
 @item
-la commande @code{@@lilypond@{...@}} qui permet de directement saisir du
-code LilyPond simple ;
+la commande @code{@@lilypond@{@dots{}@}} qui permet de directement
+saisir du code LilyPond simple ;
 
 @item
-l'environnement @code{@@lilypond...@@end lilypond} qui permet
+l'environnement @code{@@lilypond@dots{}@@end lilypond} qui permet
 de saisir directement du code LilyPond plus élaboré ;
 
 @item
-la commande @code{@@lilypondfile@{...@}} qui permet d'insérer un fichier
-LilyPond ;
+la commande @code{@@lilypondfile@{@dots{}@}} qui permet d'insérer un
+fichier LilyPond ;
 
 @item
-la commande @code{@@musicxmlfile@{...@}} qui permet d'insérer un fichier
-MusicXML qui sera alors traité par @code{musicxml2ly} puis @code{lilypond}.
+la commande @code{@@musicxmlfile@{@dots{}@}} qui permet d'insérer un
+fichier MusicXML qui sera alors traité par @code{musicxml2ly} puis
+@code{lilypond}.
 
 @end itemize
 
@@ -541,21 +542,21 @@ suivantes :
 @itemize
 
 @item
-la commande @code{<lilypond ... />} qui permet de directement saisir du
-code LilyPond simple ;
+la commande @code{<lilypond @dots{} />} qui permet de directement saisir
+du code LilyPond simple ;
 
 @item
-l'environnement @code{<lilyond>...</lilypond>} qui permet de saisir
+l'environnement @code{<lilyond>@dots{}</lilypond>} qui permet de saisir
 directement du code LilyPond plus élaboré ;
 
 @item
-la commande @code{<lilypondfile>...</lilypondfile>} qui permet d'insérer
-un fichier LilyPond ;
+la commande @code{<lilypondfile>@dots{}</lilypondfile>} qui permet
+d'insérer un fichier LilyPond ;
 
 @item
-la commande @code{<musicxmlfile>...</musicxmlfile>} qui permet d'insérer
-un fichier MusicXML qui sera alors traité par @code{musicxml2ly} puis
-@code{lilypond}.
+la commande @code{<musicxmlfile>@dots{}</musicxmlfile>} qui permet
+d'insérer un fichier MusicXML qui sera alors traité par
+@code{musicxml2ly} puis @code{lilypond}.
 
 @end itemize
 
@@ -602,7 +603,7 @@ De la musique <lilypond relative=2: a b c/> au milieu d'une ligne de texte.
 Lorsque l'inclusion concerne des fichiers indépendants, utilisez
 
 @example
-<lilypondfile @var{option1} @var{option2} ...>@var{fichier}</lilypondfile>
+<lilypondfile @var{option1} @var{option2}@dots{}>@var{fichier}</lilypondfile>
 @end example
 
 La syntaxe pour @code{<musicXmlfile>} est identique à celle de
@@ -993,7 +994,7 @@ d'ajouter @option{-t landscape} aux options de @command{dvips}.
 
 @knownissues
 La commande @code{\pageBreak} est inopérante dans un environnement
-@code{\begin@{lilypond@} @dots{} \end@{lilypond@}}.
+@code{\begin@{lilypond@}@dots{}\end@{lilypond@}}.
 
 Il en va de même pour un certain nombre de variables appartenant au bloc
 @code{\paper}.  Utilisez, entre autres, un @code{\newcommand} avec la
@@ -1085,23 +1086,23 @@ cd out
 @dots{}
 @end example
 
-@itemx --skip-lily-check
+@item --skip-lily-check
 Désactive la mise en échec en l'absence de sortie de lilypond.@*
 Option utilisée pour la documentation au format Info sans images.
 
-@itemx --skip-png-check
+@item --skip-png-check
 Désactive la mise en échec en l'absence d'images PNG correspondant aux
 fichiers EPS.@*
 Option utilisée pour la documentation au format Info sans images.
 
-@itemx --lily-output-dir=@var{rép}
+@item --lily-output-dir=@var{rép}
 Écrit les fichiers lily-XXX dans @var{rép} et crée un lien vers le
 répertoire spécifié par @code{--output}.  Cette option permet
 d'économiser du temps lors de la génération de documents qui se trouvent
 dans différents répertoires et partagent un certain nombre d'extraits
 identiques.
 
-@itemx --lily-loglevel=@var{loglevel}
+@item --lily-loglevel=@var{loglevel}
 Détermine le degré de verbosité lors des appels à @command{lilypond}.
 Les valeurs autorisée de @var{loglevel} sont : @code{NONE},
 @code{ERROR}, @code{WARNING}, @code{BASIC_PROGRESS}, @code{PROGRESS},
@@ -1109,16 +1110,16 @@ Les valeurs autorisée de @var{loglevel} sont : @code{NONE},
 pas activée, c'est le niveau déterminé par la variable d'environnement
 @code{LILYPOND_LOGLEVEL} qui sera utilisé.
 
-@itemx --info-images-dir=@var{répertoire}
+@item --info-images-dir=@var{répertoire}
 Formate la sortie Texinfo de telle sorte que Info cherche les images
 de musique dans @var{répertoire}.
 
-@itemx --latex-program=@var{programme}
+@item --latex-program=@var{programme}
 Utilise l'exécutable @command{programme} en lieu et place de
 @command{latex}.  C'est l'option que vous utiliserez si vous préférez
 @command{xelatex} par exemple.
 
-@itemx --left-padding=@var{distance}
+@item --left-padding=@var{distance}
 Décale les figures EPS de @var{distance} -- exprimée en millimètres
 (3 par défaut).  Cette option est utile lorsque les lignes de musique
 débordent sur la marge droite.
@@ -1143,7 +1144,7 @@ Le résultat des commandes est habituellement affiché dans le terminal.
 Cette option permet de rediriger tout le verbiage dans un journal situé
 dans le même répertoire que le fichier source.
 
-@itemx --use-source-file-names
+@item --use-source-file-names
 Cette option permet d'affecter aux fichiers correspondant aux extraits
 de musique le même nom que leur source.  Elle n'est fonctionnelle que
 dans le cas où la partition est incluse à l'aide de @code{lilypondfile},
index fed75db4b2741e862ca8a8893742223d83e51239..ed19eac212b1fb37f800cb82fd682ebfef76a620 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: eea3764cd6bbc78506261f78ed4e7745ac69df41
+    Translation of GIT committish: a9d95f320e4b9fe65e0655911ea7b55bf0d10b2b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @c Translators: Jean-Charles Malahieude
 @c Translation checkers:
@@ -150,12 +150,12 @@ Différentes options sont disponibles en ligne de commande :
 
 @table @code
 
-@item -d,--define-default=@var{variable}=@var{valeur}
+@item -d, --define-default=@var{variable}=@var{valeur}
 Voir @ref{Options avancées de lilypond}.
 
 @cindex Scheme, évaluation d'expression
 @cindex expression Scheme, évaluation
-@item -e,--evaluate=@var{expr}
+@item -e, --evaluate=@var{expr}
 Évalue l'expression Scheme @var{expr} avant d'analyser tout fichier
 @file{.ly}.  Lorsque vous spécifiez l'option @option{-e} à plusieurs
 reprises, l'évaluation sera faite en séquence.
@@ -184,25 +184,25 @@ doubles @code{"} en lieu et place des guillemets simples @code{'}.}
 
 @cindex sortie, format
 @cindex format de sortie
-@item -f,--format=@var{format}
+@item -f, --format=@var{format}
 Détermine le format à produire.  Il peut s'agir de @code{ps}, @code{pdf}
 ou @code{png}.
 
 Exemple : @code{lilypond -fpng @var{monfichier}.ly}
 
-@item -h,--help
+@item -h, --help
 Affiche un résumé des commandes.
 
-@item -H,--header=@var{CHAMP}
+@item -H, --header=@var{CHAMP}
 Recopie le champ d'entête dans le fichier @file{RACINE.@var{CHAMP}}.
 
-@item -i,--init=@var{fichier}
+@item -i, --init=@var{fichier}
 Définit @var{fichier} (par défaut @file{init.ly}) en tant que fichier
 d'initialisation.
 
 @cindex recherche de fichier
 @cindex chemin de recherche
-@item -I,--include=@var{répertoire}
+@item -I, --include=@var{répertoire}
 Ajoute @var{répertoire} au chemin de recherche pour les inclusions.
 
 Vous pouvez mentionner plusieurs fois l'option @option{-I}, auquel cas
@@ -211,7 +211,7 @@ fichier en question ne s'y trouve pas, les répertoires suivants seront
 examinés l'un après l'autre.
 
 @cindex chroot jail, fonctionnement
-@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir}
+@item -j, --jail=@var{user},@var{group},@var{jail},@var{dir}
 Lance @command{lilypond} dans un environnement protégé.
 
 L'option @option{--jail} est une alternative qui offre plus de
@@ -279,7 +279,7 @@ mémoire.  Voir aussi @ref{Exécution de LilyPond en mode protégé}.
 
 @cindex loglevel
 @cindex verbosité, définir le degré de
-@item -l,--loglevel=@var{DEGRÉ}
+@item -l, --loglevel=@var{DEGRÉ}
 Règle le niveau de verbosité des messages console à @var{DEGRÉ}.  Les
 différentes valeurs sont :
 
@@ -314,7 +314,7 @@ Tout ce qui peut être affiché, y compris le verbiage utile au débogage.
 @cindex redirection
 @cindex répertoire de destination
 @cindex fichier de destination
-@item -o,--output=@var{FICHIER} ou @var{RÉPERTOIRE}
+@item -o, --output=@var{FICHIER} ou @var{RÉPERTOIRE}
 Détermine le nom par défaut du fichier résultant à @var{FICHIER} ;
 lorsque l'argument @var{RÉPERTOIRE} correspond à un répertoire déjà
 existant, c'est là que les fichiers résultants seront déposés.  Le
@@ -341,14 +341,14 @@ se régler en ajoutant par exemple
 @item --pdf
 Génère du PDF.  Ceci sous-entend l'utilisation de @option{--ps}.
 
-@item -v,--version
+@item -v, --version
 Affiche le numéro de version.
 
-@item -V,--verbose
+@item -V, --verbose
 Active le mode verbeux : affichage de l'intégralité du chemin
 d'accès de chaque fichier, et information des temps de traitement.
 
-@item -w,--warranty
+@item -w, --warranty
 Affiche les informations de garantie applicables à GNU LilyPond -- il
 est livré @strong{SANS GARANTIE} !
 
@@ -361,11 +361,17 @@ est livré @strong{SANS GARANTIE} !
 
 @table @code
 
-@item -d@var{[nom-option]}=@var{[valeur]},--define-default=@var{[nom-option]}=@var{[valeur]}
+@item -d@var{[nom-option]}=@var{[valeur]}, --define-default=@var{[nom-option]}=@var{[valeur]}
 Affecte la valeur Scheme @var{valeur} à l'option interne
-@var{nom-option} du programme.  En l'absence de @var{valeur}, le
-programme utilisera @var{#t}. Préfixer @var{nom-option} d'un @code{no-}
-vous permet de désactiver une option.  Ainsi,
+@var{nom-option} du programme.
+
+@example
+-dbackend=svg
+@end example
+
+En l'absence de @var{valeur}, le programme utilisera @var{#t}.
+Préfixer @var{nom-option} d'un @code{no-} vous permet de
+désactiver une option.  Ainsi,
 
 @cindex point and click, ligne de commande
 @cindex pointer-cliquer, ligne de commande
@@ -402,7 +408,7 @@ images @code{PNG}.
 pour le moteur de rendu @code{EPS}.
 
 @item @code{backend}
-@tab @code{'ps}
+@tab @code{ps}
 @tab Détermine le format de sortie à utiliser par le moteur de
 traitement.  Les fichiers PostScript (format par défaut) incluent les
 fontes @code{TTF}, @code{Type1} et @code{OTF}, et aucune substitution ne
@@ -410,7 +416,7 @@ sera opérée pour ces fontes.  Si vous utilisez des jeux de caractères
 orientaux, le fichier aura vite fait d'atteindre une taille conséquente.
 
 @item
-@tab @code{'eps}
+@tab @code{eps}
 @tab Génère du PostScript encapsulé.  Chaque page (système) fera l'objet
 d'un fichier @file{EPS} particulier, sans fontes, auquel sera associé un
 fichier @file{EPS} qui, lui, contiendra toutes les pages (systèmes) et
@@ -418,12 +424,12 @@ les fontes.  Notez qu'il s'agit du mode que @command{lilypond-book}
 utilise par défaut.
 
 @item
-@tab @code{'null}
+@tab @code{null}
 @tab Ne génère aucun fichier imprimable.  Cette option est équivalente à
 @code{-dno-print-pages}.
 
 @item
-@tab @code{'svg}
+@tab @code{svg}
 @tab Génère du@emph{Scalable Vector Graphics}.  Cette option permet de
 créer un fichier @code{SVG} par page, sans incorporation des fontes.
 Nous vous recommandons d'installer les fontes Century Schoolbook
@@ -435,7 +441,7 @@ Les fichiers @code{SVG} alors générés devraient être lisibles par votre
 permet d'utiliser les fontes @code{woff} avec le moteur @code{SVG}.
 
 @item
-@tab @code{'scm}
+@tab @code{scm}
 @tab Recopie littéralement les commandes Scheme internes de formatage.
 
 @item @code{check-internal-types}
@@ -572,11 +578,6 @@ donnée en argument.
 @tab Convertit les chaînes textuelles en chemins lorsque les glyphes
 font partie d'une fonte musicale.
 
-@item @code{old-relative}
-@tab @code{#f}
-@tab Affecte au mode @code{\relative} le même comportement pour de la
-musique simultanée que celui d'une syntaxe d'accords.
-
 @cindex paper-size, ligne de commande
 @item @code{paper-size}
 @tab @code{\"a4\"}
@@ -999,10 +1000,10 @@ facilement.
 @menu
 * La musique déborde de la page::
 * Apparition d'une portée supplémentaire::
-* Erreur renvoyant à ../ly/init.ly::
 * Message d'erreur Unbound variable %::
 * Message d'erreur FT_Get_Glyph_Name::
 * staff-affinities devraient aller en ordre décroissant::
+* Message d'erreur unexpected new::
 @end menu
 
 
@@ -1051,7 +1052,7 @@ soient en rouge, alors que le résultat nous présente deux portées et que
 les notes, placées sur la portée inférieure, restent en noir.
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
 \new Staff { a }
 @end lilypond
 
@@ -1064,7 +1065,7 @@ ces notes en rouge :
 
 @lilypond[quote,verbatim,relative=2]
 \new Staff {
-  \override Staff.NoteHead #'color = #red
+  \override Staff.NoteHead.color = #red
   a
 }
 @end lilypond
@@ -1093,41 +1094,8 @@ La manière adéquate de procéder consiste à inverser les commandes
 @end lilypond
 
 
-@node Erreur renvoyant à ../ly/init.ly
-@unnumberedsubsec Erreur renvoyant à @code{../ly/init.ly}
-@translationof Apparent error in ../ly/init.ly
-
-Certains messages d'erreur relatifs à une erreur de syntaxe dans le
-fichier @file{../ly/init.ly} peuvent survenir lorsque le fichier est mal
-formaté.  Cela se produit notamment lors d'un défaut de parité de
-bornages ou de guillemets.
-
-L'erreur la plus courante est la simple omission d'une accolade
-fermante (@code{@}}) à la fin du bloc @code{Score}.  La solution est
-évidente en pareil cas : il suffit de vérifier que le bloc
-@code{Score} est bien clôturé.  La structure des fichiers LilyPond est
-abordée plus en détails au chapitre
-@rlearning{Organisation des fichiers LilyPond}.  C'est la raison pour
-laquelle nous vous invitons à utiliser un éditeur de texte qui prenne en
-charge le contrôle de parité des parenthèses, crochets et accolades afin
-de vous éviter de telles erreurs.
-
-Autre erreur courante, l'absence d'espace entre la dernière syllabe et
-l'accolade (@code{@}}) clôturant un bloc de paroles.  Lorsqu'il n'y a
-pas séparation, l'accolade est considérée comme faisant partie
-intégrante de la syllabe.  C'est la raison pour laquelle nous vous
-invitons à insérer une espace avant et après @strong{chaque} accolade.
-D'autres informations à ce sujets sont mentionnées au chapitre
-@ruser{Saisie des paroles}.
-
-Lorsqu'il s'agit d'un guillemet fermant (@code{"}) omis, le message
-d'erreur devrait vous indiquer un numéro de ligne avoisinant.  L'erreur
-se situe la plupart du temps une ou deux lignes au-dessus de celle
-indiquée.
-@c Match quote character "
-
 @node Message d'erreur Unbound variable %
-@unnumberedsubsec Message d'erreur Unbound variable %
+@unnumberedsubsec Message d'erreur @code{Unbound variable %}
 @translationof Error message Unbound variable %
 
 Ce message d'erreur, qu'il apparaisse sur le terminal ou en fin de
@@ -1141,7 +1109,7 @@ les commentaires s'introduisent par un point-virgule (@code{;}).
 
 
 @node Message d'erreur FT_Get_Glyph_Name
-@unnumberedsubsec Message d'erreur FT_Get_Glyph_Name
+@unnumberedsubsec Message d'erreur @code{FT_Get_Glyph_Name}
 @translationof Error message FT_Get_Glyph_Name
 
 Ce message d'erreur, qu'il apparaisse sur le terminal ou en fin de
@@ -1152,7 +1120,7 @@ UTF-8.  Pour plus de détails, reportez-vous au chapitre
 
 
 @node staff-affinities devraient aller en ordre décroissant
-@unnumberedsubsec staff-affinities devraient aller en ordre décroissant
+@unnumberedsubsec @emph{staff-affinities} devraient aller en ordre décroissant
 @translationof Warning staff affinities should only decrease
 
 Cet avertissement est émis lorsque la partition ne comporte pas de
@@ -1162,10 +1130,61 @@ dès lors que vous autoriserez l'un de ces contextes à se comporter comme
 une portée, à l'aide de l'instruction
 
 @example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
 @end example
 
 @noindent
 que vous insérerez dès sa création.  Pour plus d'information,
 reportez-vous à la rubrique
 @ruser{Espacement des lignes rattachées à des portées}.
+
+
+@node Message d'erreur unexpected new
+@unnumberedsubsec Message d'erreur unexpected @code{@bs{}new}
+@translationof Error message unexpected new
+
+Un bloc @code{\score} ne peut contenir qu'@strong{une seule} expression
+musicale. Si, par contre, il comporte plusieurs @code{\new Staff},
+@code{\new StaffGroup} ou autres contextes introduits par une commande
+@code{\new} qui ne seraient pas bornés par des accolades
+@code{@{ @dots{} @}} ou des doubles chevrons @code{<< @dots{} >>} comme
+ici :
+
+@example
+\score @{
+  % Invalide ! Génère l'erreur : syntax error, unexpected \new
+  % en français : erreur de syntaxe : \new inattendu
+  \new Staff @{ @dots{} @}
+  \new Staff @{ @dots{} @}
+@}
+@end example
+
+@noindent
+vous obtiendrez ce message d'erreur.
+
+Cette erreur sera évitée dès lors que toutes les instances de
+@code{\new} sont bornées par des accolades ou des doubles chevrons.
+
+Des accolades placeront ces clauses @code{\new} en séquence :
+
+@lilypond[quote,verbatim]
+\score {
+  {
+    \new Staff { a' a' a' a' }
+    \new Staff { g' g' g' g' }
+  }
+}
+@end lilypond
+
+@noindent
+alors que des doubles chevrons les placeront en parallèle ; autrement
+dit, LilyPond les traitera simultanément :
+
+@lilypond[quote,verbatim]
+\score {
+  <<
+    \new Staff { a' a' a' a' }
+    \new Staff { g' g' g' g' }
+  >>
+}
+@end lilypond
index 3ae1dc90cad08abd1007c56b9ff027f8c14f7d5a..864b06a4d736a89a84afaa576455c46d319395a6 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-   Translation of GIT committish: eea3764cd6bbc78506261f78ed4e7745ac69df41
+   Translation of GIT committish: bd751630011a6fbfcf069ec1fc41a8eaed8a6b87
 
    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
@@ -146,7 +146,7 @@ sauts de ligne selon son propre algorithme ;
 encadrez les notes d'une partie pour instrument transpositeur dans un
 
 @example
-\transpose c @var{tonalité-naturelle} @{...@}
+\transpose c @var{tonalité-naturelle} @{@dots{}@}
 @end example
 (où @var{tonalité-naturelle} correspond à celle de l'instrument en
 question) de telle sorte que la musique comprise dans cette variable se
@@ -182,7 +182,7 @@ dans une nouvelle version de LilyPond, alors que la définition du
 violon = \relative c'' @{
 g4 c'8. e16
 @}
-...
+@dots{}
 \score @{
  \new GrandStaff @{
    \new Staff @{
@@ -222,7 +222,7 @@ quelques recherches pour déterminer la source du problème.
 
 Pour ce faire, les outils les plus puissants sont le commentaire de
 fin de ligne, indiqué par @code{%}, et le commentaire multilignes (ou
-bloc de commentaire), indiqué par @code{%@{ ... %@}}.  Si vous ne
+bloc de commentaire), indiqué par @code{%@{ @dots{} %@}}.  Si vous ne
 pouvez localiser le problème, commencez par mettre en commentaire de
 grandes parties de votre fichier source.  Après avoir mis en
 commentaire une section, essayez de compiler à nouveau.  Si cela
index 7d890c2b5af07fd2d3c0b2757ff78fa251b55e13..502a2587c9f73a33f52ffca76628a2d511814c19 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 
 @ignore
-    Translation of GIT committish: eea3764cd6bbc78506261f78ed4e7745ac69df41
+    Translation of GIT committish: a9d95f320e4b9fe65e0655911ea7b55bf0d10b2b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -66,10 +66,39 @@ modifications.  Par exemple, dans les versions 2.4 et antérieures de
 LilyPond, les accents et les lettres non anglaises étaient entrées en
 utilisant @LaTeX{} -- par exemple, @code{No\"el}.  À partir de la
 version 2.6, le caractère @code{ë} doit être entré directement dans
-le fichier LilyPond comme caractère UTF-8.  @code{convert-ly} ne peut
-pas changer tous les caractères @LaTeX{} en caractères UTF-8 ; vous
+le fichier LilyPond comme caractère UTF-8.   @command{convert-ly} ne
+peut pas changer tous les caractères @LaTeX{} en caractères UTF-8 ; vous
 devez mettre à jour vos vieux fichiers LilyPond manuellement.
 
+Les règles de conversion de @command{convert-ly} reposent sur la
+recherche et le remplacement de motifs textuels plutôt que sur les
+capacités intellectuelles de LilyPond, en conséquence de quoi :
+
+@itemize @bullet
+@item
+La fiabilité de la conversion dépend de la qualité même de chaque jeu de
+règles ainsi que sur la complexité des modifications respectives à
+apporter.  Certaines conversions peuvent donc requérir une intervention
+manuelle ; la version de « départ » devrait toujours rester disponible
+pour comparaison.
+
+@item
+Seules des conversions à un format plus récent sont possibles ; aucune
+règle ne permet de revenir en arrière.  La copie de travail d'un fichier
+LilyPond ne devrait donc être mise à jour que lorsque la version sur
+laquelle il repose n'est plus disponible.  Des système de gestion de
+version tels que Git permettent de se tenir à jour sur plusieurs
+versions.
+
+@item
+LilyPond, ainsi que Scheme, gèrent plutôt bien l'emplacement ou
+l'absence d'espaces ; les règles utilisées par @command{convert-ly}
+tendent cependant à effectuer certains postulats en matière de style.
+Suivre le style adopté dans les différent manuels est un gage de mise à
+jour sans problème si l'on considère que ces manuels sont eux-même mis à
+jour avec @command{convert-ly}.
+@end itemize
+
 
 @node Exécution de convert-ly
 @section Exécution de @command{convert-ly}
@@ -132,17 +161,38 @@ convert-ly [@var{option}]@dots{} @var{fichier}@dots{}
 Vous pouvez utiliser les options :
 
 @table @code
-@item -e,--edit
-pour éditer directement le fichier d'origine.
-
-@item -f,--from=@var{from-patchlevel}
+@item -d, --diff-version-update
+actualise la valeur de @code{\version}, uniquement si le fichier a été
+effectivement modifié.  En l'absence de cette option, ou bien si une
+conversion quelle qu'elle soit a modifié le fichier, la mention de
+version est porté à la valeur de la règle appliquée la plus récente.
+
+@item -e, --edit
+pour éditer directement le fichier d'origine.  Le fichier originel est
+renommé en que @file{monfichier.ly~}.  Ce fichier de sauvegarde, selon
+le système d'exploitation, peut être « caché ».
+
+@item -b, --backup-numbered
+combine à l'option @samp{-e}, pour numéroter les sauvegardes de telle
+sorte qu'aucune version antérieure ne soit écrasée.  Les fichiers de
+sauvegarde, selon le système d'exploitation, peuvent être « cachés ».
+
+@item -f, --from=@var{from-patchlevel}
 pour définir le numéro de version à partir duquel vous voulez effectuer
 les conversions.  Lorsque cette option n'est pas activée,
 @command{convert-ly} tentera de le déterminer sur la foi de la mention
 de @code{\version} contenue dans le fichier.  Cette option s'utilise
 sous la forme : @code{--from=2.10.25}
 
-@item -n,--no-version
+@item -h, --help
+visualiser l'aide et quitter.
+
+@item -l @var{loglevel}, --loglevel=@var{loglevel}
+pour régler le degré de verbosité à @var{loglevel}.  Les différentes
+valeurs sont @code{NONE}, @code{ERROR}, @code{WARNING}, @code{PROGRESS}
+(par défaut) et @code{DEBUG}.
+
+@item -n, --no-version
 Normalement, @command{convert-ly} ajoutera une indication de
 @code{\version} à votre fichier s'il n'en comporte pas.  Cette option
 permet de passer outre.
@@ -150,27 +200,22 @@ permet de passer outre.
 @item -s, --show-rules
 pour afficher les conversions applicables.
 
-@item --to=@var{to-patchlevel}
+@item -t, --to=@var{to-patchlevel}
 pour n'appliquer les conversions que jusqu'à une version déterminée.  Il
-s'agit par défaut de la dernière version disponible.  Cette option
-s'utilise sous la forme : @code{--to=2.12.2}
-
-
-@item -h, --help
-visualiser l'aide et quitter.
-
-@item -l @var{loglevel}, --loglevel=@var{loglevel}
-pour régler le degré de verbosité à @var{loglevel}.  Les différentes
-valeurs sont @code{NONE}, @code{ERROR}, @code{WARNING}, @code{PROGRESS}
-(par défaut) et @code{DEBUG}.
+s'agit par défaut de la dernière version disponible.  Le niveau demandé
+doit être supérieur à la version de départ.
 
+@example
+convert-ly --to=2.14.1 monfichier.ly
+@end example
 @end table
 
 Lorsqu'il s'agit de fragments inclus dans un fichier texinfo, il
 vous faudra lancer
 
 @example
-convert-ly --from=... --to=... --no-version *.itely
+convert-ly --from=@dots{} --to=@dots{} --no-version *.itely
 @end example
 
 Lorsque vous désirez savoir quels changements de syntaxe sont intervenus
diff --git a/Documentation/fr/web/GNUmakefile b/Documentation/fr/web/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index b7bb8006f6349f3ec346c2f701d31ce1403d6468..4d7ae628d9f98daa04f29d5bddb75b9d7c8b65bd 100644 (file)
@@ -1,6 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage : fr -*-
+@c This file is part of web.texi
 @ignore
-    Translation of GIT committish: 254e2df1ab4e0fb8d1b517e7e11ffb545363ee48
+    Translation of GIT committish: b7cb11ea159572f2dc55b405db01a06c4dccea7d
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -8,9 +9,10 @@
 @end ignore
 
 @c Translators: Jean-Charles Malahieude, John Mandereau
-@c Translation checkers: Jean-Charles Malahieude
+@c Translation checkers: 
 
 
+@include included/acknowledge.itexi
 @include included/authors.itexi
 @include included/helpus.itexi
 
@@ -60,6 +62,9 @@ concernées.
 @ref{Auteurs} : ceux qui ont permis à LilyPond d'être ce qu'il est
 aujourd'hui.
 
+@item
+@ref{Remerciements} : projets et institutions soutenant LilyPond
+
 @end itemize
 @divEnd
 
@@ -94,6 +99,7 @@ aux cours des versions précédentes.
 * Développement::
 * GSoC 2012::
 * Auteurs::
+* Remerciements::
 * Publications::
 * Archives::
 * Grenier::
@@ -825,6 +831,7 @@ dernière mouture est consultable sur @url{http://lilypond.org}}
 @divClass{normal-table}
 @multitable @columnfractions .3 .3 .3
 @headitem Introduction
+
 @item
 @docLinkSplit{Initiation,learning,@manualDevelLearningSplit-fr}
 @tab
@@ -845,7 +852,9 @@ dernière mouture est consultable sur @url{http://lilypond.org}}
 @docLinkBig{Essai,essay,@manualDevelEssayBig-fr}
 @tab
 @docLinkPdf{Essai,essay,@manualDevelEssayPdf-fr}
-
+@end multitable
+@multitable @columnfractions .3 .3 .3
 @headitem Utilisation courante
 
 @item
@@ -868,7 +877,9 @@ dernière mouture est consultable sur @url{http://lilypond.org}}
 @docLinkBig{Morceaux choisis,snippets,@manualDevelSnippetsBig}
 @tab
 @docLinkPdf{Morceaux choisis,snippets,@manualDevelSnippetsPdf}
-
+@end multitable
+@multitable @columnfractions .3 .3 .3
 @headitem Utilisation ponctuelle
 
 @item
@@ -898,15 +909,17 @@ dernière mouture est consultable sur @url{http://lilypond.org}}
 @docLinkBig{Références internes,internals,@manualDevelInternalsBig}
 @tab
 @docLinkPdf{Références internes,internals,@manualDevelInternalsPdf}
+@end multitable
 
 @ifset web_version
+@multitable @columnfractions .3
 @headitem En téléchargement
 
 @item
 @doctarballDevel
+@end multitable
 @end ifset
 
-@end multitable
 
 @divEnd
 @divEnd
@@ -921,7 +934,7 @@ dernière mouture est consultable sur @url{http://lilypond.org}}
 @subheading Le Google Summer of Code
 
 Le Google Summer of Code est un programme global qui rémunère des
-étudiants durant la période estivale, pour teavailler au profit de
+étudiants durant la période estivale, pour travailler au profit de
 projets @emph{open source}.
 
 L'équipe LilyPond considère qu'il s'agit là d'une excellente opportunité
@@ -1181,6 +1194,18 @@ superflus.
 
 
 
+@node Remerciements
+@unnumberedsec Remerciements
+
+@divClass{column-center-top}
+@subheading Remerciements
+
+@divClass{keep-bullets}
+@acknowledgementsCurrent
+@divEnd
+@divEnd
+
+
 @node Publications
 @unnumberedsec Publications
 @translationof Publications
@@ -1214,7 +1239,7 @@ superflus.
 @translationof Old news
 
 @divClass{heading-center}
-@warning{Le vieilles annonces et informations de version sont rangées au
+@warning{Les vieilles annonces et informations de version sont rangées au
 @rwebnamed{Grenier,grenier}.}
 @divEnd
 
@@ -1231,6 +1256,7 @@ superflus.
 @subheading Annonces
 
 Annonces et nouvelles, par version :
+@uref{http://lilypond.org/doc/v2.16/Documentation/web/index#Lilypond-2_002e16_002e0-released_0021-August-24_002c-2012-1,v2.16},
 @uref{http://lilypond.org/doc/v2.14/Documentation/web/index#LilyPond-2_002e14_002e0-released_0021-June-6_002c-2011,v2.14},
 @miscLink{announce-v2.12,v2.12},
 @miscLink{announce-v2.10,v2.10},
@@ -1244,6 +1270,7 @@ Annonces et nouvelles, par version :
 @miscLink{ANNOUNCE-0.1,v0.1}
 
 Liste descriptive des évolutions, par version :
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/index.html,v2.16},
 @uref{http://lilypond.org/doc/v2.14/Documentation/changes/index.html,v2.14},
 @uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS,v2.12},
 @uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS,v2.10},
@@ -1259,6 +1286,24 @@ Liste descriptive des évolutions, par version :
 
 @divEnd
 
+@divClass{column-center-bottom}
+@subheading Remerciements
+
+Tous nos remerciements aux développeurs, contributeurs, chasseurs
+de bogue et à ceux qui nous ont fait part de leurs suggestions pour
+@miscLink{THANKS-2.16,v2.16},
+@miscLink{THANKS-2.14,v2.14},
+@miscLink{THANKS-2.12,v2.12},
+@miscLink{THANKS-2.10,v2.10},
+@miscLink{THANKS-2.8,v2.8},
+@miscLink{THANKS-2.6,v2.6},
+@miscLink{THANKS-2.4,v2.4},
+@miscLink{THANKS-2.2,v2.2},
+@miscLink{THANKS-2.0,v2.0},
+@miscLink{THANKS-1.8,v1.8}
+
+@divEnd
+
 @divClass{column-center-bottom}
 @subheading Journal des modifications
 
index 861331d3465b6af8edc8a1f54950474e169848c0..f8e6b83e1874e535af9e55b9a2efb36e788b4c27 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 @c This file is part of web.texi
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: 0f062fdb1c08e46bce7aa3047ee3c7f68e686079
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -80,7 +80,7 @@ pour les empaqueteurs
 versions antérieures
 
 @item
-@ref{Development} :
+@ref{Développement} :
 version instable la plus récente
 
 @end itemize
@@ -226,14 +226,6 @@ sh lilypond-@versionStable{}-OS-TYPE.sh --help
 
 
 @divClass{column-right-top}
-@subheading Compilation d'un fichier
-
-@lilypadCommandLine
-
-@divEnd
-
-
-@divClass{column-left-top}
 @subheading Paquetage des distributions
 
 Veuillez utiliser votre gestionnaire de paquet favori pour installer et
@@ -271,6 +263,14 @@ openSUSE: LilyPond 2.12.3}
 @divEnd
 
 
+@divClass{column-center-top}
+@subheading Compilation d'un fichier
+
+@lilypadCommandLine
+
+@divEnd
+
+
 @divClass{column-center-bottom}
 @subheading Mention légale
 
@@ -331,18 +331,10 @@ Supprimez le répertoire @code{LilyPond.app}.
 
 
 @divClass{column-right-top}
-@subheading Compilation d'un fichier
-
-@lilypadOSX
-
-@divEnd
-
-
-@divClass{column-left-top}
 @subheading Utilisation en ligne de commande
 
-@warning{Si vous préférez l'interface graphique, ne tenez pas compte de
-ce qui suit.}
+@warning{Si vous préférez l'interface graphique mentionnée plus avant,
+ne tenez pas compte de ce qui suit.}
 
 @subsubheading MacOS X et la ligne de commande
 
@@ -422,6 +414,14 @@ Il en va de même pour les autres scripts de ce répertoire, tels que
 @divEnd
 
 
+@divClass{column-center-top}
+@subheading Compilation d'un fichier
+
+@lilypadOSX
+
+@divEnd
+
+
 @divClass{column-center-bottom}
 @subheading Mention légale
 
@@ -453,7 +453,7 @@ protégés par le droit d’auteur.
 @item
 @sourceimage{logo-windows,,,}
 @downloadStableWindows
-Pour Windows ME, NT, 2000, XP, Vista, et Windows 7.
+Pour Windows ME, NT, 2000, XP, Vista, Windows 7 et 8.
 
 @end itemize
 
@@ -492,18 +492,10 @@ effectuée.
 
 
 @divClass{column-right-top}
-@subheading Compilation d'un fichier
-
-@lilypadWindows
-
-@divEnd
-
-
-@divClass{column-left-top}
 @subheading Lancement en ligne de commande
 
-@warning{Si vous préférez l'interface graphique, ne tenez pas compte de
-ce qui suit.}
+@warning{Si vous préférez l'interface graphique mentionnée plus avant,
+ne tenez pas compte de ce qui suit.}
 
 @subsubheading Windows et la ligne de commande
 
@@ -553,6 +545,15 @@ lilypond test.ly
 @divEnd
 
 
+@divClass{column-center-top}
+@subheading Compilation d'un fichier
+
+@lilypadWindows
+
+@divEnd
+
+
+@divClass{column-left-top}
 @divClass{column-center-bottom}
 @subheading Mention légale
 
index c9b811dad5254a27ee0898983d581c7c2ffb3801..cc1cbb53873135aeab6d35d63ac806fda74b530d 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 @c This file is part of web.texi
 @ignore
-    Translation of GIT committish: f199e875f7a7beb0afd17eae2038819baab767ff
+    Translation of GIT committish: 0a8b4e0f1b0d68659a584be48c7b96da358d501d
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -17,6 +17,7 @@
 
 @divClass{column-center-top}
 @subheading Notre objectif
+@c VO Our Goal
 
 @imageFloat{flat-design,png,right}
 
@@ -38,6 +39,7 @@ amis et collègues avec des partitions soignées !
 
 @divClass{column-left-top}
 @subheading Ce que LilyPond sait faire
+@c VO What LilyPond does
 
 @itemize
 
@@ -58,6 +60,7 @@ amis et collègues avec des partitions soignées !
 
 @divClass{column-right-top}
 @subheading Ceux qui utilisent LilyPond
+@c VO LilyPond in use
 
 @itemize
 
@@ -72,6 +75,7 @@ amis et collègues avec des partitions soignées !
 
 @divClass{column-center-bottom}
 @subheading LilyPond en action
+@c VO How LilyPond works
 
 @itemize
 
@@ -103,15 +107,15 @@ amis et collègues avec des partitions soignées !
 @divEnd
 
 
-
 @node Fonctionnalités
 @unnumberedsec Fonctionnalités
 @translationof Features
-
+@divClass{column-center-top}
 
 @subheading Élégance
 
 @subsubheading Excellente gravure de la musique classique
+@c VO Excellent classical engraving
 
 @imageFloat{flat-design,png,right}
 
@@ -127,6 +131,7 @@ plus de détails, consultez notre @ref{Essai}.
 
 
 @subsubheading Moins de bricolage
+@c VO Effective layout choices
 
 Perdez moins de temps à retoucher la mise en page.  En effet, LilyPond
 tend à déterminer la meilleure mise en page dès le départ, en
@@ -144,6 +149,7 @@ courbure des liaisons, tout cela automatiquement !
 @imageFloat{lilypond-book,png,right}
 
 @subsubheading Entrée sous forme de texte
+@c VO Text-based input
 
 LilyPond prend en entrée du texte brut, que vous pouvez écrire dans
 votre éditeur de texte préféré, rapidement et confortablement.  Vous
@@ -155,6 +161,7 @@ ce que l'on a déjà réussi à faire.
 
 
 @subsubheading Association de musique et texte
+@c VO Mix music and text
 
 Introduisez des fragments de partition musicale sans avoir besoin de
 copier-coller manuellement des images. Intégrez de façon transparente
@@ -163,6 +170,7 @@ partitions dans un document OpenOffice.org.
 
 
 @subsubheading Accessibilité
+@c VO Accessibility
 
 Le format de fichier de LilyPond, qui décrit la musique sous forme de
 texte, permet également son utilisation par des utilisateurs ayant
@@ -175,6 +183,7 @@ musicale fonctionnant avec une interface graphique.
 
 
 @subsubheading Conception extensible
+@c VO Extensible design
 
 Tous les paramètres peuvent être changés pour adapter le résultat à vos
 goûts typographiques.  Si cela ne suffit pas, le langage de script
@@ -192,6 +201,7 @@ documentés dans les manuels de référence.
 @imageFloat{frescobaldi-lilypond-editor-small,png,right}
 
 @subsubheading Un logiciel libre
+@c VO Free software
 
 LilyPond peut être téléchargé gratuitement !  Si si, c'est vrai.  Vous
 pouvez le récupérer depuis la page de téléchargement.
@@ -204,6 +214,7 @@ ou payez quelqu'un d'autre pour le faire.
 
 
 @subsubheading Excellent support
+@c VO Excellent support
 
 LilyPond fonctionne sur les plateformes les plus courantes : GNU/Linux,
 MacOS X et Windows.  Le logiciel est accompagné d'une large
@@ -214,6 +225,7 @@ assure une prompte résolution des problèmes.
 
 
 @subsubheading Éditeurs avancés
+@c VO Enhanced editors
 
 Plusieurs développeurs, eux-mêmes utilisateurs de LilyPond, ont créé des
 outils spécifiques dans le but de travailler plus rapidement et avec
@@ -326,7 +338,7 @@ couleurs ont été ajoutés pour plus de visibilité.
 @newsItem
 @subsubheading Musique vocale
 
-LilyPond excelle dans la gravure de toutes sortes de musique vocale, du
+LilyPond excelle dans la gravure de toute sorte de musique vocale, du
 chant sacré à l'opéra.  Voici un motet médiéval qui présente quelques
 particularités.  La voix de ténor est écrite dans une métrique
 différente de celle des autres voix, mais doit tout de même se
@@ -393,7 +405,7 @@ communauté de passionnés.  Ce logiciel est distribué selon la
 @ref{FDL, Licence Libre de Documentation GNU FDL}, accordant à tous la
 liberté de le corriger, le modifier et étendre ses fonctionnalités.  La
 gravure musicale de qualité ne devrait pas vous coûter des centaines
-d'euros dépensés pour acheter une licence de logiciel !
+d'euros dépensés pour acheter une licence d'utilisation d'un logiciel !
 @divEnd
 
 
@@ -538,6 +550,18 @@ mentionnons que quelques-uns.
 @divClass{keep-bullets}
 @itemize
 
+@item
+Pour sa thèse de doctorat,
+@uref{http://unito.academia.edu/LucaRossettoCasel, Luca Rossetto
+Casel} a réalisé une édition critique du @emph{Enea nel Lazio
+(1760)} de Tommaso Traetta, opéra sur un libret de Vittorio Amedeo
+Cigna-Santi, en quatre parties :
+@uref{http://www.academia.edu/1987651/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_1_4_,
+première},
+@uref{http://www.academia.edu/1994533/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_2_4_, deuxième},
+@uref{http://www.academia.edu/1994558/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_3_4_, troisième},
+@uref{http://www.academia.edu/1996242/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_4_4_, quatrième partie}.
+
 @item
 Après les avoir réorchestrés, @uref{http://www.aurelienbello.com/,
 Aurélien Bello} a donné plusieurs représentations, entre octobre 2011 et
@@ -546,11 +570,11 @@ de @uref{http://www.junge-philharmonie-brandenburg.de/, l'orchestre
 philharmonique des jeunes de Brandenbourg}.
 
 @item
-@uref{http://www.kierenmacmillan.info/, Kieren MacMillan}, compositeur et
-directeur musical.  Ses travaux les plus récents incluent @emph{Go Thy Way},
-donné par les @uref{http://www.saltlakechoralartists.org/,
-Salt Lake Choral Artists} en mars 2012, la @emph{Just Out of Reach
-Suite}, donnée par le
+@uref{http://www.kierenmacmillan.info/, Kieren MacMillan}, compositeur
+et directeur musical. Ses travaux les plus récents incluent @emph{Go Thy
+Way}, donné par les @uref{http://www.saltlakechoralartists.org/, Salt
+Lake Choral Artists} en mars 2012, la @emph{Just Out of Reach Suite},
+donnée par le
 @uref{http://www.herald-dispatch.com/news/marshall/x1883873762/Music-duo-Chrysalis-to-perform-at-Marshall-University-on-Jan-19,
 Duo Chrysalis} ainsi que @emph{thrafsmata} en juillet 2011 par le
 @uref{http://www.pnme.org/CurrentSeason/PreviousSeasons.html, Pittsburgh
@@ -559,11 +583,11 @@ New Music Ensemble}.
 @item
 @emph{Anonymous Student Compliment or Complaint} a permis à
 @uref{http://www.mikesolomon.org, Mike Solomon} de gagner le 
-@uref{http://leftcoastensemble.org/contest, Concours de composition de
-la côte Est 2011}, regroupant 172 participants de 22 nationalités.
-Parmi ses autres œuvres, nous citerons Norman (un an) pour clarinette
-solo, donnée en octobre 2010 à l'occasion du Festival de musique
-électro-acoustique (FEMF) de
+@uref{http://leftcoastensemble.org, Concours de composition de la côte Est 2011},
+regroupant 172 participants de 22 nationalités.  Parmi ses autres
+œuvres, nous citerons @emph{Norman (un an)} pour clarinette solo, donnée
+en octobre 2010 à l'occasion du Festival de musique électro-acoustique
+(FEMF) de
 @uref{http://emu.music.ufl.edu/fems_concerts.html, l'Université de Floride}.
 
 @item
@@ -576,8 +600,8 @@ Stigliano à Naples lors des célébrations organisées pour le
 
 @item
 L'exécution d'@emph{Armide} de Lully, les 15 et 16 mai 2009, à Houston,
-Texas, par @uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury
-Baroque}, avec un matériel gravé par 
+Texas, par @uref{http://www.mercurybaroque.org/, Mercury Baroque},
+avec un matériel gravé par
 @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}.
 
 @item
@@ -585,7 +609,8 @@ Des passages instrumentaux @emph{d'Hippolyte et Aricie} de Rameau ont
 été joués le 8 mai 2009 en l'église Saint-James de Manhattan, par
 Frederick Renz et son ensemble
 @uref{http://www.earlymusicny.org/, Early Music New York}, avec des
-partitions gravées par Nicolas Sceaux.
+partitions gravées par
+@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}.
 
 @item
 @emph{Affaire Étrangère}, un opéra de
@@ -637,6 +662,8 @@ musiciens et amoureux de la musique.
 
 @divEnd
 
+@contactUsAbout{concerts ou partitions}
+
 
 @divClass{column-center-bottom}
 @subheading Et ensuite ?
@@ -845,9 +872,9 @@ j'obtiens avec Lilypond — je suis absolument convaincu que mes besoins
 en terme d'édition musicale seront largement satisfaits par cette
 superbe application.  [@dots{}] une partition de base générée par
 Lilypond [@dots{}] a meilleure mine que la plupart des publications
-« professionnelles » auxquelles je l'ai comparée, aussi bien de chez
-Warner Bros., que même les plus récentes productions des « bonnes
-vieilles maisons. » [@dots{}]}
+❝professionnelles❞ auxquelles je l'ai comparée, aussi bien de chez
+Warner Bros., que même les plus récentes productions des bonnes
+vieilles maisons [@dots{}]}
 
 @qq{Faites donc mieux que Finale/Sibelius/Igor et consorts !}
 @divEnd
@@ -856,8 +883,8 @@ vieilles maisons. » [@dots{}]}
 @divClass{testimonial-item}
 @subsubheading Chris Cannam, programmeur en chef du projet @uref{http://www.rosegardenmusic.com/, RoseGarden}
 
-@qq{Lilypond est clairement le ténor brillantissime [de la gravure musicale
-de qualité].}
+@qq{Lilypond est clairement le ténor brillantissime [de la gravure
+musicale de qualité].}
 @divEnd
 
 
@@ -872,22 +899,22 @@ compositeur, celle-ci serait difficile à lire.  LilyPond facilite ainsi
 mon double travail de gravure et d'édition.}
 
 @qq{J'ai utilisé LilyPond exclusivement pour mes affaires débutantes
-d'édition.  Tous les compositeurs sans aucune exception ont été
+d'édition. Tous les compositeurs sans aucune exception ont été
 stupéfaits par la qualité de la gravure en apercevant les épreuves de
-prépublication de leur musique.  Bien que cela me revienne en partie -- je
-passe beaucoup de temps à retoucher la gravure, notamment les liaisons et
-en particulier dans les accords -- LilyPond me fournit un excellent point
-de départ, une interface très intuitive, et la possibilité de modifier
-absolument n'importe quoi si je prend le temps.  Je suis convaincu
-qu'aucun produit commercial ne peut approcher cela.}
+prépublication de leur musique. Bien que cela me revienne en partie --
+je passe beaucoup de temps à retoucher la gravure, notamment les
+liaisons et en particulier dans les accords -- LilyPond me fournit un
+excellent point de départ, une interface très intuitive, et la
+possibilité de modifier absolument n'importe quoi si je prend le temps.
+Je suis convaincu qu'aucun produit commercial ne peut approcher cela.}
 @divEnd
 
 
 @divClass{testimonial-item}
 @subsubheading David Bobroff, trombone basse, Orchestre symphonique d'Islande
 
-@qq{LilyPond est tout simplement génial [@dots{}] Plus j'en
-  apprends sur LilyPond, plus je l'apprécie !}
+@qq{LilyPond est tout simplement génial [@dots{}] Plus j'en apprends sur
+LilyPond, plus je l'apprécie !}
 @divEnd
 
 
@@ -954,6 +981,8 @@ tout spécialement quand cela sort des standards.}
 
 @divEnd
 
+@contactUsAbout{articles ou témoignages}
+
 @divClass{column-center-bottom}
 @subheading Et ensuite ?
 
@@ -961,7 +990,6 @@ Lisez @ref{Entrée sous forme de texte}.
 @divEnd
 
 
-
 @node Entrée sous forme de texte
 @unnumberedsec Entrée sous forme de texte
 @translationof Text input
@@ -969,6 +997,7 @@ Lisez @ref{Entrée sous forme de texte}.
 @c TRANSLATORS, so far it's mostly from
 @c http://lilypond.org/web/switch/howto
 
+
 @subheading « Compilation » de la musique
 
 @imageClickable{nereid-shot-small,png, (cliquez pour agrandir), nereid-shot,png, right}
@@ -989,7 +1018,7 @@ Cette façon de faire peut demander aux habitués des interfaces
 graphiques l'apprentissage d'une nouvelle façon de travailler, mais les
 résultats en valent vraiment la peine !
 
-@warning{nous ne présentons ici qu'un rapide aperçu du langage de
+@warning{Nous ne présentons ici qu'un rapide aperçu du langage de
 LilyPond -- ce n'est pas si compliqué que ça en a l'air !  Ce n'est
 pas la peine de comprendre ces exemples en détail, notre manuel
 d'initiation aborde d'une façon progressive tout ceci et bien d'autres
@@ -1015,7 +1044,7 @@ signes d'altération.
 
 @subsubheading Musique pop
 
-Ajoutez des accords et des paroles pour obtenir une chanson :
+Ajoutez des accords et des paroles pour obtenir une chanson :
 
 @imageFloat{text-input-pop-annotate-fr,png,center}
 @imageFloat{text-input-pop-output,png,center}
@@ -1113,7 +1142,7 @@ C'est le cas, en particulier, pour :
 
 tunefl vous permet de saisir en ligne vos partitions sans avoir
 préalablement installé LilyPond sur votre oridnateur.  Vous pouvez ainsi
-tester touts les fonctionnalités du programme dans une interface web.
+tester toutes les fonctionnalités du programme dans une interface web.
 
 @divEnd
 
@@ -1206,8 +1235,7 @@ un grand nombre de langages de programmation et de documents.  C'est un
 développement intégré (IDE).  Il existe un @emph{mode LilyPond} qui
 offre quelques fonctionnalités spécifiques pour travailler avec des
 fichiers source LilyPond.  L'un des développeurs a même écrit un mode
-majeur pour Emacs,
-@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}.
+majeur pour Emacs, @uref{https://github.com/nsceaux/lyqi,lyqi}.
 
 
 @uref{http://www.vim.org}
@@ -1226,25 +1254,13 @@ chapitre @rprogram{LilyPond et les éditeurs de texte}.
 @sourceimage{logo-macosx,,,}
 @uref{http://www.uoregon.edu/~koch/texshop}
 
-L'éditeur TexShop pour MacOS@tie{}X peut être muni d'une extension pour
+L'éditeur TexShop pour MacOS X peut être muni d'une extension pour
 lancer LilyPond, @command{lilypond-book} et @command{convert-ly},
 disponible à
 @example
 @uref{http://www.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts}
 @end example
 
-
-@sourceimage{logo-macosx,,,}
-@uref{http://www.uoregon.edu/~koch/texshop}
-
-TexShop, éditeur pour MacOS X,  dispose de scripts complémentaires
-permettant de lancer directement @command{lilypond-book} et
-@command{convert-ly}.  Ils sont disponibles ici :
-
-@example
-@uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts}
-@end example
-
 @divEnd
 
 
@@ -1255,31 +1271,38 @@ permettant de lancer directement @command{lilypond-book} et
 @subsubheading Éditeurs de partition, tablature et MIDI
 
 @itemize
+@item
+@uref{http://www.jezra.net/projects/bwwtolily,bwwtolily} a pour but de
+convertir les fichiers @code{.bww} ou @code{.bmw} -- format particulier
+pour la cornemuse -- en fichier source LilyPond.  Les ornements qui ne
+seraient pas correctement convertis -- en particulier le
+@emph{piobaireachd} -- sont listés par le programme.
+
 @item
 @uref{http://canorus.org,Canorus}, éditeur de partitions, peut également
 exporter vers LilyPond, mais est encore au stade de développement beta.
 Les testeurs sont les bienvenus.
 
 @item
-@uref{http://enc2ly.sourceforge.net/en/,Enc2ly} est un programme GNU/Linux
-qui convertit des partitions du format @uref{http://www.gvox.com/,Encore} au
-format LilyPond.
+@uref{http://enc2ly.sourceforge.net/en/,Enc2ly} est un programme
+GNU/Linux qui convertit des partitions du format
+@uref{http://www.gvox.com/,Encore} au format LilyPond.
 
 @item
-@uref{https://github.com/hanwen/go-enc2ly,go-enc2ly} est un programme Go qui
-convertit des fichiers @uref{http://www.gvox.com/,Encore} au format LilyPond.
-Il a été conçu à partir du travail d'ingénierie inverse de Felipe Castro en
-modifiant des fichiers @code{.enc} existant et en les chargeant avec la
-version de démonstration 4.55.
+@uref{https://github.com/hanwen/go-enc2ly,go-enc2ly} est un programme Go
+qui convertit des fichiers @uref{http://www.gvox.com/,Encore} au format
+LilyPond.  Il a été conçu à partir du travail d'ingénierie inverse de
+Felipe Castro en modifiant des fichiers @code{.enc} existant et en les
+chargeant avec la version de démonstration 4.55.
 
 @item
-@uref{http://musescore.org,MuseScore} est un éditeur de partition. Il exporte
-dans une certaine mesure au format LilyPond.
+@uref{http://musescore.org,MuseScore} est un éditeur de partition. Il
+exporte dans une certaine mesure au format LilyPond.
 
 @item
 @uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd},
-basé sur la bibliothèque @uref{http://cairographics.org, Cairo}, dispose d'une
-fonction expérimentale d'export pour LilyPond.
+basé sur la bibliothèque @uref{http://cairographics.org, Cairo}, dispose
+d'une fonction expérimentale d'export pour LilyPond.
 
 @item
 @uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,NW2LY},
@@ -1288,22 +1311,22 @@ programme en C#, permet de convertir une chanson écrite avec
 NoteWorthy au format LilyPond.
 
 @item
-@uref{https://github.com/ciconia/ripple/blob/master/README.markdown,Ripple} est
-un assistant à la création de conducteur et parties. Il permet de mixer
-plusieurs parties en un conducteur.
+@uref{https://github.com/ciconia/ripple/blob/master/README.markdown,Ripple}
+est un assistant à la création de conducteur et parties.  Il permet de
+mixer plusieurs parties en un conducteur.
 
 @item
-@uref{http://www.rosegardenmusic.com,Rosegarden}, séquenceur audio et MIDI,
-comporte aussi un éditeur pour portée unique.
+@uref{http://www.rosegardenmusic.com,Rosegarden}, séquenceur audio et
+MIDI, comporte aussi un éditeur pour portée unique.
 
 @item
 @uref{http://launchpad.net/rumor/,Rumor}, un convertisseur monophonique
 temps-réel MIDI vers LilyPond.
 
 @item
-@uref{http://www.tuxguitar.com.ar/,TuxGuitar} est un éditeur de tablatures
-multi-pistes. Il permet d'afficher tablatures et partitions, et il peut
-exporter du code LilyPond.
+@uref{http://www.tuxguitar.com.ar/,TuxGuitar} est un éditeur de
+tablatures multi-pistes.  Il permet d'afficher tablatures et partitions,
+et il peut exporter du code LilyPond.
 
 @end itemize
 
@@ -1318,19 +1341,21 @@ formaliste de partition pour @uref{http://www.python.org/, Python},
 permet aux compositeurs de gérer du code LilyPond complexe.
 
 @item
-@uref{http://common-lisp.net/project/fomus/,FOMUS}, bibliothèque LISP
-qui permet de générer de la notation à partir de logiciels de musique.
+@uref{http://common-lisp.net/project/fomus/,FOMUS} -- pour @emph{FOrmat
+MUSic} -- est une bibliothèque LISP qui permet aux compositeurs de
+générer de la notation.  Elle a été testée avec un certain nombre
+d'interpréteurs, et dispose d'un portage en C++.
 
 @item
-@uref{http://strasheela.sourceforge.net,Strasheela} est un système de
-composition musicale basé sur le projet 
-@uref{http://www.mozart-oz.org/,Mozart/Oz}.
+@uref{http://strasheela.sourceforge.net/strasheela/doc/index.html,Strasheela}
+est un système de composition musicale basé sur le projet 
+@uref{http://www.mozart-oz.org/, Mozart/Oz}.
 
 @end itemize
 @divEnd
 
-@divClass{column-center-top}
 
+@divClass{column-center-top}
 
 @subheading Autres programmes dont le développement est peu actif
 
@@ -1344,7 +1369,7 @@ KDE 4.1.
 
 @item
 @uref{http://noteedit.berlios.de,NoteEdit}, qui importait
-@uref{http://www.musicxml.com/xml.html, MusicXML}, s'est scindé en
+@uref{http://www.makemusic.com/musicxml, MusicXML}, s'est scindé en
 @uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}
 et @uref{http://canorus.org,Canorus}.
 
@@ -1363,7 +1388,7 @@ permettant de produire de la notation LilyPond.
 
 Vous êtes prêt(e) à @ref{Téléchargement,télécharger LilyPond}.
 
-Vous êtes toujours incrédule ?  Beaucoup de compositeurs, musiciens et
+Vous êtes toujours incrédule ?  Beaucoup de compositeurs, musiciens et
 chefs ont appris à écrire de la musique dans notre format texte.  Des
 utilisateurs expérimentés nous font savoir qu'ils parviennent à entrer
 une partition LilyPond complète plus rapidement qu'avec un clavier MIDI
@@ -1392,5 +1417,3 @@ sont protégés par le droit d'auteur.
 @divEnd
 
 @divEnd
-
-@c  LocalWords:  subsubheading itemize
index fd8fe010b6aa27e5801816f7199c8116efc0b48c..c365ebc69e7fd9089017018dff1c7a0893e86049 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 @c This file is part of web.texi
 @ignore
-    Translation of GIT committish: 24f9636ac779b4c0de197f60bf4f922c16be5ec4
+   Translation of GIT committish: c66c7bc1b97947e74978c20ffbf55f2c6e2c4d97
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -40,7 +40,7 @@
 @itemize
 
 @item
-@ref{Entrée sous forme de texte}@tie{}:
+@ref{Entrée sous forme de texte} :
 LilyPond est un système de gravure musicale @strong{en mode texte}.  Si
 vous ne savez pas du tout ce que ça veut dire, lisez tout d'abord
 ceci@tie{}!
@@ -101,11 +101,11 @@ courts extraits, trucs, modèles et autres exemples.
 @itemize
 
 @item
-@ref{FAQ}@tie{}:
+@ref{FAQ} :
 la Foire Aux Questions.
 
 @item
-@ref{Web}@tie{}:
+@ref{Web} :
 ce document.
 @details{Web}
 
@@ -136,30 +136,44 @@ particulier pour élaborer des retouches.
 @itemize
 
 @item
-@ref{Tous}@tie{}:
+@ref{Tous} :
 liens rapides, manuels téléchargeables, et documentation des anciennes
 versions.
 
 @item
-@ref{Traductions}@tie{}:
+@ref{Traductions} :
 état des traductions pour les lecteurs non anglophones.
 
 @item
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}@tie{}:
-user-created examples, hints and tips.
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} :
+collection d'exemples, trucs et astuces élaborés par des utilisateurs.
 
 @item
-@ref{Développement}@tie{}:
+@ref{Développement} :
 manuels pour la version de développement.
 
 @item
-@ref{FDL}@tie{}:
+@ref{FDL} :
 ces manuels sont publiés sous la licence GNU de documentation libre FDL.
 
 @end itemize
 
 @divEnd
 
+@divClass{column-center-bottom}
+@subheading Format des manuels
+
+Les manuels de LilyPond sont disponibles sous différents formats : HTML
+multifichiers, fichier monolithique HTML ou PDF.@*
+Le HTML découpé en plusieurs fichiers est tout à fait adapté à une
+consultation en ligne. Les formats HTML en fichier unique -- certains
+ont une taille conséquente -- contiennent l'intégralité d'un manuel sur
+une seule page. Les exemplaires PDF sont plutôt destinés au
+téléchargement pour consultation hors ligne. Ces trois formats sont
+accessibles en suivant le lien « détail de@dots{} » de chacun des manuels.
+
+@divEnd
+
 @divEnd
 
 
@@ -200,8 +214,8 @@ simple quelques concepts clés.  Il est conseillé de lire ces chapitres
 de manière linéaire.
 
 Dans ce manuel se trouve à chaque section un paragraphe @strong{Voir
-aussi} contenant des références vers d'autres sections@tie{}: il est
-conseillé de ne pas les suivre en première lecture@tie{}; lorsque vous
+aussi} contenant des références vers d'autres sections : il est
+conseillé de ne pas les suivre en première lecture ; lorsque vous
 aurez lu l'ensemble du manuel d'initiation, vous pourrez en relisant
 certaines sections suivre ces références pour approfondir certains
 aspects.
@@ -212,8 +226,8 @@ aspects.
 @docLinks{Initiation, learning,
   @rlearningnamed{Top,Initiation},
   @manualStableLearningSplit-fr,
-  @manualStableLearningBig-fr, 1.5 MB,
-  @manualStableLearningPdf-fr, 3 MB}
+  @manualStableLearningBig-fr, @w{3 MB},
+  @manualStableLearningPdf-fr, @w{5 MB}}
 
 @divEnd
 
@@ -238,8 +252,8 @@ documentation.
 @docLinks{Glossaire musical, music-glossary,
   @rglosnamed{Top,Glossaire musical},
   @manualStableGlossarySplit,
-  @manualStableGlossaryBig, 1 MB,
-  @manualStableGlossaryPdf, 1.5 MB}
+  @manualStableGlossaryBig, @w{1 MB},
+  @manualStableGlossaryPdf, @w{1,5 MB}}
 
 @divEnd
 
@@ -267,8 +281,8 @@ haute résolution.}
 @docLinks{Essai, essay,
   @ressaynamed{Top,Essai},
   @manualStableEssaySplit-fr,
-  @manualStableEssayBig-fr, 2 MB,
-  @manualStableEssayPdf-fr, 2.5 MB}
+  @manualStableEssayBig-fr, @w{1 MB},
+  @manualStableEssayPdf-fr, @w{2 MB}}
 
 @divEnd
 
@@ -286,7 +300,7 @@ concepts exposés dans le manuel d'initiation.
 
 @warning{L'utilisation optimale du manuel de notation requiert une
 familiarité avec les concepts et fonctions de base exposés dans le
-manuel de notation, ainsi que les concepts musicaux exposés dans le
+manuel d'initiation, ainsi que les concepts musicaux exposés dans le
 glossaire.}
 
 @divEnd
@@ -296,8 +310,8 @@ glossaire.}
 @docLinks{Notation, notation,
   @rusernamed{Top,Notation},
   @manualStableNotationSplit-fr,
-  @manualStableNotationBig-fr, 7 MB,
-  @manualStableNotationPdf-fr, 18 MB}
+  @manualStableNotationBig-fr, @w{9 MB},
+  @manualStableNotationPdf-fr, @w{35 MB}}
 
 @divEnd
 
@@ -310,8 +324,8 @@ glossaire.}
 @subheading Manuel d'utilisation des programmes
 
 Ce manuel explique l'exécution des programmes et l'intégration de
-partitions LilyPond dans d'autres programmes, et suggère des @qq{bonnes
-pratiques} pour une utilisation plus efficace.  Sa lecture est
+partitions LilyPond dans d'autres programmes, et suggère des « bonnes
+pratiques » pour une utilisation plus efficace.  Sa lecture est
 recommandée avant d'aborder de grands projets.
 
 @divEnd
@@ -321,8 +335,8 @@ recommandée avant d'aborder de grands projets.
 @docLinks{Utilisation des programmes, usage,
   @rprogramnamed{Top,Utilisation des programmes},
   @manualStableUsageSplit-fr,
-  @manualStableUsageBig-fr, 400 KB,
-  @manualStableUsagePdf-fr, 600 KB}
+  @manualStableUsageBig-fr, @w{400 KB},
+  @manualStableUsagePdf-fr, @w{650 KB}}
 
 @divEnd
 
@@ -343,7 +357,7 @@ Notez bien que cette annexe n'est en aucune manière un miroir ou même
 une partie du LSR.  Dans la mesure où le LSR repose sur une version
 stable de LilyPond, les exemples illustrant des fonctionnalités
 introduites dans la dernière version de développement ne peuvent y
-figurer@tie{}; c'est pourquoi vous les trouverez dans le répertoire
+figurer ; c'est pourquoi vous les trouverez dans le répertoire
 @file{Documentation/snippets/new/} des sources de LilyPond.
 
 La liste des exemples correspondant à chacun des sous-chapitres du
@@ -356,8 +370,8 @@ manuel de notation est accessible par des liens dans le paragraphe
 @docLinks{Morceaux choisis, snippets,
   @rlsrnamed{Top, Morceaux choisis},
   @manualStableSnippetsSplit,
-  @manualStableSnippetsBig, 2.5 MB,
-  @manualStableSnippetsPdf, 8 MB}
+  @manualStableSnippetsBig, @w{1,5 MB},
+  @manualStableSnippetsPdf, @w{12,5 MB}}
 
 @divEnd
 
@@ -369,35 +383,35 @@ manuel de notation est accessible par des liens dans le paragraphe
 @divClass{column-center-top}
 @subheading Foire aux questions
 
-@subsubheading Où sont la vue graphique, les menus et barres d'outils ?
+@subsubheading Où sont la vue graphique, les menus et barres d'outils ?
 
 LilyPond demande que la musique soit écrite comme du texte.  Lisez la
-partie à propos de l'@ref{Entrée sous forme de texte}.
+partie intitulée @ref{Entrée sous forme de texte}.
 
 
-@subsubheading La documentation est si longue !  Dois-je vraiment la lire ?
+@subsubheading La documentation est si longue !  Dois-je vraiment la lire ?
 
 Vous devez lire le @ref{Initiation,manuel d'initiation}.  Pour le reste
 de la documentation, vous n'avez besoin de lire que ce qui est en
 rapport avec la notation musicale que vous voulez produire.
 
 
-@subsubheading Ça fait encore beaucoup à lire !  Ai-je besoin de lire tout cela ?
+@subsubheading Ça fait encore beaucoup à lire !  Ai-je besoin de lire tout cela ?
 
-C'est vous qui voyez@tie{}; les raisons pour lesquelles vous souhaitez
-utiliser LilyPond se trouvent peut-être dans l'@ref{Introduction}.
+C'est vous qui voyez ; les raisons pour lesquelles vous souhaitez
+utiliser LilyPond se trouvent peut-être dans notre @ref{Introduction}.
 
 @divEnd
 
 @divClass{column-center-bottom}
 @subheading Questions d'utilisation
 
-@subsubheading Quelque chose ne fonctionne pas !  Comment je le répare ?
+@subsubheading Quelque chose ne fonctionne pas !  Comment je le répare ?
 
 C'est expliqué dans @rprogram{Résolution de problèmes}.
 
 
-@subsubheading Pourquoi changez-vous la syntaxe ?
+@subsubheading Pourquoi changez-vous la syntaxe ?
 
 C'est expliqué dans @rprogram{LilyPond est une langue vivante}.
 
@@ -433,8 +447,8 @@ rapports de bogues et le développement.
 @docLinks{Web, web,
   @ref{Top,Web},
   @manualStableWebSplit-fr,
-  @manualStableWebBig-fr, 1 MB,
-  @manualStableWebPdf-fr, 2 MB}
+  @manualStableWebBig-fr, @w{2,5 MB},
+  @manualStableWebPdf-fr, @w{3,5 MB}}
 
 @divEnd
 
@@ -456,8 +470,8 @@ nouvelles fonctionnalités de LilyPond depuis la dernière version stable.
 @docLinks{Nouveautés, changes,
   @rchcangesnamed{Top,Nouveautés},
   @manualStableChangesSplit,
-  @manualStableChangesBig, 6 KB,
-  @manualStableChangesPdf, 200 KB}
+  @manualStableChangesBig, @w{90 KB},
+  @manualStableChangesPdf, @w{80 KB}}
 
 @divEnd
 
@@ -469,8 +483,8 @@ nouvelles fonctionnalités de LilyPond depuis la dernière version stable.
 @divClass{column-left-top}
 @subheading Extension des fonctionnalités de LilyPond
 
-Ce manuel (non traduit à ce jour) vous donnera des pistes en matière de
-programmation avancée d’ajustements et retouches dans LilyPond.
+Ce manuel vous donnera des pistes en matière de programmation
+avancée d’ajustements et retouches dans LilyPond.
 
 @divEnd
 
@@ -479,8 +493,8 @@ programmation avancée d’ajustements et retouches dans LilyPond.
 @docLinks{Extension, extending,
   @rextendnamed{Top,Extension},
   @manualStableExtendingSplit-fr,
-  @manualStableExtendingBig-fr, 200 KB,
-  @manualStableExtendingPdf-fr, 400 KB}
+  @manualStableExtendingBig-fr, @w{300 KB},
+  @manualStableExtendingPdf-fr, @w{500 KB}}
 
 @divEnd
 
@@ -495,11 +509,12 @@ programmation avancée d’ajustements et retouches dans LilyPond.
 C'est un ensemble de pages étroitement liées entre elles, qui documente
 les moindres petits détails de chaque classe, objet et fonction de
 LilyPond.  Cette documentation est produite directement à partir des
-définitions de formatage du code source.
+définitions de formatage du code source.  Elle n'est à ce jour
+disponible qu'en anglais.
 
 Presque toutes les fonctions de formatage utilisées en interne sont
 directement disponibles pour l'utilisateur.  Par exemple, toutes les
-variables qui contrôlent les épaisseurs, les distances etc., peuvent
+variables qui contrôlent les épaisseurs, les distances, etc. peuvent
 être modifiées dans les fichiers d'entrée.  Il y a un grand nombre
 d'options de formatage, et elles sont toutes décrites dans ce document.
 Chaque section du manuel de notation a un paragraphe @b{Voir aussi}, qui
@@ -512,8 +527,8 @@ renvoie à la documentation générée automatiquement.
 @docLinks{Référence des propriétés internes, internals,
   @rinternalsnamed{Top,Référence des propriétés internes},
   @manualStableInternalsSplit,
-  @manualStableInternalsBig, 2.5 MB,
-  @manualStableInternalsPdf, 2.8 MB}
+  @manualStableInternalsBig, @w{3 MB},
+  @manualStableInternalsPdf, @w{4 MB}}
 
 @divEnd
 
@@ -561,7 +576,10 @@ l'adresse @uref{http://lilypond.org}
 @divClass{keep-bullets}
 @itemize
 
-@item @uref{http://lilypond.org/doc/v2.12/Documentation/,
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals.fr.html,
+LilyPond 2.14 Documentation}
+
+@item @uref{http://lilypond.org/doc/v2.12/Documentation/index.fr.html,
 LilyPond 2.12 Documentation}
 
 @item @uref{http://lilypond.org/doc/v2.10/Documentation/,
index 2205f934ad5d28e727d60c7436797edbaf30c6fb..5c04202d3b863b0d2931209e55c730b480e8bb1f 100644 (file)
@@ -1,6 +1,5 @@
 ISOLANG = hu
 depth = ../..
-SUBDIRS = web learning texidocs usage included
 STEPMAKE_TEMPLATES = documentation texinfo
 LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
 
diff --git a/Documentation/hu/included/.gitignore b/Documentation/hu/included/.gitignore
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Documentation/hu/included/GNUmakefile b/Documentation/hu/included/GNUmakefile
deleted file mode 100644 (file)
index afe7a4d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
diff --git a/Documentation/hu/learning/GNUmakefile b/Documentation/hu/learning/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 70fc1f520abb617f57cd36b81425ca6c03714863..29fb660a1a5c2175fe40d76da5ba890afc171ada 100644 (file)
@@ -9,7 +9,7 @@
 @end ignore
 
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @node Elemi kottaírás
 @chapter Elemi kottaírás
@@ -452,10 +452,10 @@ a @notation{triolák} lejegyzett hosszúságuk 2/3 részéig szólnak, így trio
 2/3 kell, hogy legyen a tört értéke.
 
 @lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
 @end lilypond
 
 @subheading Előkék
@@ -479,7 +479,7 @@ az @code{\appoggiatura}, súlytalanok előtt az @code{\acciaccatura} parancs
 áll:
 
 @lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2
+c2 \grace { a32 b } c2
 c2 \appoggiatura b16 c2
 c2 \acciaccatura b16 c2
 @end lilypond
@@ -1151,7 +1151,7 @@ változóra.
 
 @c KEEP LY
 @lilypond[verbatim,quote]
-triolaA = \times 2/3 { c,8 e g }
+triolaA = \tuplet 3/2 { c,8 e g }
 ütemA = { \triolaA \triolaA \triolaA \triolaA }
 
 \relative c'' {
index f467d1e696f5bf8483fc62a6b97c0de6bf227e97..06ed20b8e0d6d52f787e3aa6952eabe6ea8797fa 100644 (file)
@@ -10,7 +10,7 @@
 
 
 @c -*- coding: utf-8; mode: texinfo; -*-
-@c \version "2.16.0"
+@c \version "2.17.29"
 @node Alapfogalmak
 @chapter Alapfogalmak
 @translationof Fundamental concepts
@@ -482,10 +482,10 @@ frazeálóív, amely túlnyúlik a triolán.
 
 @lilypond[quote,verbatim,fragment,ragged-right]
 {
-  r16[ g16 \times 2/3 {r16 e'8] }
-  g16( a \times 2/3 {b d) e' }
-  g8[( a \times 2/3 {b d') e'~]}
-  \times 4/5 {e'32\( a b d' e'} a'4.\)
+  r16[ g16 \tuplet 3/2 {r16 e'8] }
+  g16( a \tuplet 3/2 {b d) e' }
+  g8[( a \tuplet 3/2 {b d') e'~]}
+  \tuplet 5/4 {e'32\( a b d' e'} a'4.\)
 }
 @end lilypond
 
@@ -757,9 +757,9 @@ later sections.
   \\  % Voice four
     {
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'force-hshift = #0
+      \once \override NoteColumn.force-hshift = #0
       <ees c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   >> |
@@ -806,9 +806,9 @@ not understand.
   \\  % Voice four
     { \voiceThreeStyle
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'force-hshift = #0
+      \once \override NoteColumn.force-hshift = #0
       <ees c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   >>
@@ -1749,8 +1749,7 @@ from the name, or vice versa.
   @tab Engraves clefs
 @item Completion_heads_engraver
   @tab Splits notes which cross bar lines
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
   @tab Creates hairpins and dynamic texts
 @item Forbid_line_break_engraver
   @tab Prevents line breaks if a musical element is still active
@@ -1939,7 +1938,7 @@ and this turns them off in all staves:
 >>
 @end lilypond
 
-As another example, if @code{clefOctavation} is set in
+As another example, if @code{clefTransposition} is set in
 the @code{Score} context this immediately changes the value
 of the octavation in all current staves and sets a new default
 value which will be applied to all staves.
@@ -3069,7 +3068,7 @@ macros, or user-defined commands) for tweaks:
 @c TODO Avoid padtext - not needed with skylining
 @lilypond[quote,verbatim,ragged-right]
 dolce = \markup { \italic \bold dolce }
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
 fthenp=_\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
 violin = \relative c'' {
   \repeat volta 2 {
@@ -3098,7 +3097,7 @@ the last line.
 violin = \relative c'' @{
   \repeat volta 2 @{
     c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
-    \once \override TextScript #'padding = #5.0
+    \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d
     c,4.\markup @{ \dynamic f \italic \small @{ 2nd @}
       \hspace #0.1 \dynamic p @}
@@ -3122,7 +3121,7 @@ can think of these as functions).
 padText =
 #(define-music-function (parser location padding) (number?)
   #{
-    \once \override TextScript #'padding = #padding
+    \once \override TextScript.padding = #padding
   #})
 
 \relative c''' {
diff --git a/Documentation/hu/learning/preface.itely b/Documentation/hu/learning/preface.itely
new file mode 100644 (file)
index 0000000..93c5c03
--- /dev/null
@@ -0,0 +1,60 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.16.0"
+
+@node Preface
+@unnumbered Preface
+
+
+It must have been during a rehearsal of the EJE (Eindhoven Youth
+Orchestra), somewhere in 1995 that Jan, one of the cranked violists,
+told Han-Wen, one of the distorted French horn players, about the
+grand new project he was working on.  It was an automated system for
+printing music (to be precise, it was MPP, a preprocessor for
+MusiXTeX).  As it happened, Han-Wen accidentally wanted to print out
+some parts from a score, so he started looking at the software, and he
+quickly got hooked.  It was decided that MPP was a dead end.  After
+lots of philosophizing and heated email exchanges, Han-Wen started
+LilyPond in 1996.  This time, Jan got sucked into Han-Wen's new
+project.
+
+In some ways, developing a computer program is like learning to play
+an instrument.  In the beginning, discovering how it works is fun, and
+the things you cannot do are challenging.  After the initial excitement,
+you have to practice and practice.  Scales and studies can be dull, and
+if you are not motivated by others -- teachers, conductors or
+audience -- it is very tempting to give up.  You continue, and gradually
+playing becomes a part of your life.  Some days it comes naturally, and
+it is wonderful, and on some days it just does not work, but you keep
+playing, day after day.
+
+Like making music, working on LilyPond can be dull work, and on
+some days it feels like plodding through a morass of bugs.
+Nevertheless, it has become a part of our life, and we keep doing it.
+Probably the most important motivation is that our program actually
+does something useful for people.  When we browse around the net we
+find many people who use LilyPond, and produce impressive pieces of
+sheet music.  Seeing that feels unreal, but in a very pleasant way.
+
+Our users not only give us good vibes by using our program, many of
+them also help us by giving suggestions and sending bug reports, so we
+would like to thank all users that sent us bug reports, gave
+suggestions or contributed in any other way to LilyPond.
+
+Playing and printing music is more than a nice analogy.  Programming
+together is a lot of fun, and helping people is deeply satisfying, but
+ultimately, working on LilyPond is a way to express our deep love for
+music.  May it help you create lots of beautiful music!
+
+Han-Wen and Jan
+
+Utrecht/Eindhoven, The Netherlands, July 2002.
+
index d5b2da7c7d2d42c78026deb62a5ee1bd2e1ad436..8f0dae8fb25f10e63b48ceb59b478b566cb5ca63 100644 (file)
@@ -10,7 +10,7 @@
 
 
 @c -*- coding: utf-8; mode: texinfo; -*-
-@c \version "2.16.0"
+@c \version "2.17.6"
 @node A kimenet finomhangolása
 @chapter A kimenet finomhangolása
 @translationof Tweaking output
 @c line-width ensures no break
 @c line-width ensures no break
 @c ode{staff-position} property, which is specified in half staff
-@c ode{\once \override Tie #'staff-position = #3.5}
+@c ode{\once \override Tie.staff-position = #3.5}
 @c line-width ensures no break
 @c line-width ensures no break
 @c index Tie, example of overriding
 @c index variables, using for tweaks
 @c index using variables for tweaks
 @c index tweaks, using variables for
-@c ode{\override Lyrics . LyricText #'font-shape = #'italic}
-@c ode{\override Lyrics . LyricText #'font-series = #'bold}
-@c ode{\revert Lyrics . LyricText #'font-shape}
-@c ode{\revert Lyrics . LyricText #'font-series}
+@c ode{\override Lyrics.LyricText.font-shape = #'italic}
+@c ode{\override Lyrics.LyricText.font-series = #'bold}
+@c ode{\revert Lyrics.LyricText.font-shape}
+@c ode{\revert Lyrics.LyricText.font-series}
 @c index LyricText, example of overriding
 @c index font-shape property, example
 @c index font-series property, example
index df516c9d82632d0819a2e636c90332a382d58087..6dc413f820c2a06d230636c9fbab2f5fea990b31 100644 (file)
@@ -1,11 +1,11 @@
 <form action="http://google.com/search"
       method="get"
       name="search"
-      onSubmit="search.q.value='site:lilypond.org +v2.16 '
+      onSubmit="search.q.value='site:lilypond.org +v2.17 '
                + search.brute_query.value"
-      onMouseMove="search.q.value='site:lilypond.org +v2.16 '
+      onMouseMove="search.q.value='site:lilypond.org +v2.17 '
                   + search.brute_query.value"
-      onKeyUp="search.q.value='site:lilypond.org +v2.16 '
+      onKeyUp="search.q.value='site:lilypond.org +v2.17 '
               + search.brute_query.value">
   <input type="hidden" name="btnG" value="Google keresés">
   <input type="text" name="brute_query" onfocus="this.value=''" value="Keresés">
diff --git a/Documentation/hu/texidocs/GNUmakefile b/Documentation/hu/texidocs/GNUmakefile
deleted file mode 100644 (file)
index 0ffa758..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
index 764140b377a78792b3aab2485c15ad25a4190d8b..af7c1a411774f92b7baa12629594743a65cad83e 100644 (file)
@@ -16,7 +16,7 @@ td { border: 1px solid black; text-align: center; }
 
 @end html
 @end ifhtml
-@emph{Last updated Thu May 31 09:12:39 UTC 2012
+@emph{Last updated Wed Dec 18 12:23:14 UTC 2013
 }
 @multitable @columnfractions  0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
 
@@ -84,24 +84,24 @@ partially
 @item
 1 Első lecke
 @*
-2535
+2578
 @tab Harmath Dénes
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially (80 %)</span>
+<span style="background-color: #dfef77">partially (44 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially (80 %)
+partially (44 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #fff53e">partially</span>
+<span style="background-color: #fff23f">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -111,24 +111,24 @@ partially
 @item
 2 Elemi kottaírás
 @*
-4187
+4396
 @tab Harmath Dénes
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially (93 %)</span>
+<span style="background-color: #dfef77">partially (35 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially (93 %)
+partially (35 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #7dff2b">partially</span>
+<span style="background-color: #a5ff31">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -138,7 +138,7 @@ partially
 @item
 3 Alapfogalmak
 @*
-11130
+11144
 @tab Harmath Dénes
 @tab 
 @tab 
@@ -155,7 +155,7 @@ yes
 @ifhtml
 
 @html
-<span style="background-color: #97ff2f">partially</span>
+<span style="background-color: #a5ff31">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -165,7 +165,7 @@ partially
 @item
 4 A kimenet finomhangolása
 @*
-15468
+16191
 @tab Harmath Dénes
 @tab 
 @tab 
@@ -182,7 +182,7 @@ no
 @ifhtml
 
 @html
-<span style="background-color: #83fe2c">partially</span>
+<span style="background-color: #dbff38">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -192,7 +192,7 @@ partially
 @item
 A Sablonok
 @*
-219
+372
 @tab Harmath Dénes
 @tab 
 @tab 
@@ -209,7 +209,7 @@ no
 @ifhtml
 
 @html
-<span style="background-color: #c0ff34">partially</span>
+<span style="background-color: #fff73e">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -285,24 +285,24 @@ partially
 @item
 1 A @command{lilypond} használata
 @*
-4615
+4537
 @tab Team-hu
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially (95 %)</span>
+<span style="background-color: #dfef77">partially (94 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially (95 %)
+partially (94 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #ffbf47">partially</span>
+<span style="background-color: #ffb249">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -312,7 +312,7 @@ partially
 @item
 2 A @command{convert-ly} használata
 @*
-1209
+1484
 @tab Team-hu
 @tab 
 @tab 
@@ -329,7 +329,7 @@ yes
 @ifhtml
 
 @html
-<span style="background-color: #33ff21">partially</span>
+<span style="background-color: #97ff2f">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -356,7 +356,7 @@ partially (13 %)
 @ifhtml
 
 @html
-<span style="background-color: #5bff27">partially</span>
+<span style="background-color: #68ff28">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -432,7 +432,7 @@ partially
 @item
 Bevezetés
 @*
-4753
+4937
 @tab Harmath Dénes
 @tab 
 @tab 
@@ -449,7 +449,7 @@ yes
 @ifhtml
 
 @html
-<span style="background-color: #4efe25">partially</span>
+<span style="background-color: #83fe2c">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -459,7 +459,7 @@ partially
 @item
 Letöltés
 @*
-1211
+1201
 @tab Harmath Dénes
 @tab 
 @tab 
@@ -476,7 +476,7 @@ yes
 @ifhtml
 
 @html
-<span style="background-color: #2cff20">partially</span>
+<span style="background-color: #47ff24">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -486,7 +486,7 @@ partially
 @item
 Dokumentáció
 @*
-1214
+1284
 @tab Harmath Dénes
 @tab 
 @tab 
@@ -503,7 +503,7 @@ yes
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially</span>
+<span style="background-color: #4efe25">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -513,24 +513,24 @@ partially
 @item
 Közösség
 @*
-3006
+3073
 @tab Harmath Dénes
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially (96 %)</span>
+<span style="background-color: #dfef77">partially (95 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially (96 %)
+partially (95 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #d4ff37">partially</span>
+<span style="background-color: #e1ff39">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
diff --git a/Documentation/hu/usage/GNUmakefile b/Documentation/hu/usage/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 0246b03e491526feb47e91d304c0552ab80b0507..48617438b53ba227e11a7039f2e614cdab705382 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Note: keep this node named so that `info lilypond-book' brings you here.
 @node lilypond-book
@@ -85,7 +85,7 @@ kottapéldákat tartalmazhatnak. Például:
 
 \begin{lilypond}
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 \end{lilypond}
 
@@ -141,7 +141,7 @@ kottapéldákat tartalmazhatnak. Például:
 
 @lilypond
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 @end lilypond
 
index 26b8a10f0bb32c5c3405bd5ccd384b234d810641..f72f60ea9eb156670cb532655a79cdb231afec90 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 
 @node A lilypond használata
@@ -105,7 +105,7 @@ A következő parancssori opciók támogatottak:
 
 @table @code
 
-@item -e,--evaluate=@var{kifejezés}
+@item -e, --evaluate=@var{kifejezés}
 A Scheme @var{kifejezés} kiértékelése az @file{.ly} fájlok beolvasása előtt.
 Több @code{-e} opció is megadható, ezek a megadott sorrendben lesznek
 végrehajtva.
@@ -125,12 +125,12 @@ a forrásfájl elejére pedig a következőt kell beszúrni:
 #(use-modules (guile-user))
 @end example
 
-@item -f,--format=@var{formátum}
+@item -f, --format=@var{formátum}
 A kimenet formátuma. Lehetőségek: @code{ps}, @code{pdf} vagy @code{png}.
 
 Példa: @code{lilypond -fpng @var{fájlnév}.ly}
 
-@item -d,--define-default=@var{azonosító}=@var{érték}
+@item -d, --define-default=@var{azonosító}=@var{érték}
 Az @var{azonosító} nevű belső változó beállítása az @var{érték} Scheme
 értékre. Ha az @var{érték} nincs megadva, az alapértelmezett @code{#t}
 lesz a változó értéke. Egy opció kikapcsolásához a @code{no-} prefixumot
@@ -273,21 +273,21 @@ opció a @code{-dpreview} opcióval együtt hasznos.
 @end table
 
 
-@item -h,--help
+@item -h, --help
 Összegzés az alkalmazás használatáról.
 
-@item -H,--header=@var{mező}
+@item -H, --header=@var{mező}
 A megadott fejlécmező kiírása a @file{@var{fájlnév}.@var{mező}} nevű fájlba.
 
 @item --include, -I=@var{könyvtár}
 A @var{könyvtár} hozzáadása a bemeneti fájlok keresési útvonalához.
 @cindex keresési útvonal
 
-@item -i,--init=@var{fájl}
+@item -i, --init=@var{fájl}
 Az inicializáló fájl beállítása a megadott @var{fájl}ra. (Alapértelmezett:
 @file{init.ly}.)
 
-@item -o,--output=@var{fájl}
+@item -o, --output=@var{fájl}
 Kimeneti fájl megadása. A megfelelő kiterjesztés automatikusan hozzáfűzésre
 kerül (pl. @code{.pdf} PDF kimenet esetén).
 
@@ -312,7 +312,7 @@ következőképpen állítható be:
 PDF generálása. A @code{--ps} opció hatását vonja maga után.
 
 
-@item -j,--jail=@var{felhasználó},@var{csoport},@var{börtön},@var{könyvtár}
+@item -j, --jail=@var{felhasználó},@var{csoport},@var{börtön},@var{könyvtár}
 A @command{lilypond} futtatása ún. börtönben.
 
 A @code{--jail} opció egy rugalmasabb alternatíva a @code{-dsafe} módnál abban
@@ -367,14 +367,14 @@ illetve a memóriafoglalásáé is.
 @end table
 
 
-@item -v,--version
+@item -v, --version
 Verzióinformáció kijelzése.
 
-@item -V,--verbose
+@item -V, --verbose
 Bőbeszédűség bekapcsolása: az összes beolvasott fájl elérési útjának,
 futásidőknek és egyéb információknak a kijelzése.
 
-@item -w,--warranty
+@item -w, --warranty
 A GNU LilyPond garanciavállalásának kijelzése. (A LilyPond fejlesztői
 @strong{SEMMIFÉLE GARANCIÁT} nem vállalnak!)
 @end table
@@ -526,7 +526,7 @@ valójában az eredmény két kottasor, mely közül az alsóban alapértelmezet
 színű, fekete kottafejek lesznek.
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
 \new Staff { a }
 @end lilypond
 
@@ -537,7 +537,7 @@ létrehozott kottasorra. A példa helyesen:
 
 @lilypond[quote,verbatim,relative=2]
 \new Staff {
-  \override Staff.NoteHead #'color = #red
+  \override Staff.NoteHead.color = #red
   a
 }
 @end lilypond
index ccf924e16151eff77bd07542b1418315a36315f9..5af9712ccd42300ca55e264a029e8c06f123e053 100644 (file)
@@ -121,15 +121,15 @@ convert-ly [@var{opció}]@dots{} @var{fájlnév}@dots{}
 A következő opciók adhatóak meg:
 
 @table @code
-@item -e,--edit
+@item -e, --edit
 A fájl helyben frissítése.
 
-@item -f,--from=@var{forrásverzió}
+@item -f, --from=@var{forrásverzió}
 A forrásfájl verziójának megadása. Ha nincs megadva, a @command{convert-ly}
 a fájlban található @code{\version} parancs alapján kitalálja.
 Példa: @code{--from=2.10.25}
 
-@item -n,--no-version
+@item -n, --no-version
 Alapesetben a @command{convert-ly} ellátja a kimenetét a megfelelő
 @code{\version} paranccsal. Ez az opció ezt tiltja le.
 
diff --git a/Documentation/hu/web/GNUmakefile b/Documentation/hu/web/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
diff --git a/Documentation/hu/web/basic-authors.itexi b/Documentation/hu/web/basic-authors.itexi
deleted file mode 100644 (file)
index 99ba226..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-@c -*- coding: utf-8; mode: texinfo; -*-
-@c This file is part of community.itexi and ../topdocs/AUTHORS.itexi
-
-@ignore
-
-  This file lists authors of LilyPond, and what they wrote.  Each
-  list is sorted alphabetically by surname.  This file lists people
-  that have contributed more than a few hours of work.
-
-  Developers are people who are (or have been) listed under the
-  "Development Team" in the THANKS, and can choose their own
-  titles.  Contributors are everybody else, and simply list their
-  contributions.  All lists are sorted alphabetically.
-
-  Anybody who has finished doing a "main devel team" task should
-  list it under developersPrevious, even if they're still doing
-  other "main devel team" stuff.  See "Graham Percival" for an
-  example.
-
-  Contributors are also split between Current and Previous, and
-  each category contains:
-    core...     (programming)
-    font...     (duh)
-    doc...      (documentation and examples)
-    support...  (building, distributions, editors,
-                 lilypond-book, LSR, but *not* answering emails)
-    translations... (duh)
-  We might add a "general" or "other" if there's something else.
-
-@end ignore
-
-
-@macro developersCurrent
-
-@itemize
-
-@item Mats Bengtsson:
-@email{mats.bengtsson@@ee.kth.se},
-@uref{http://www.s3.kth.se/~mabe/},
-Támogatás
-
-@item Trevor Daniels:
-Dokumentációszerkesztő asszisztens
-
-@item Reinhold Kainhofer:
-@email{reinhold@@kainhofer.com},
-@uref{http://reinhold.kainhofer.com},
-MusicXML guru, hibajavítás
-
-@item Jonathan Kulp:
-Dokumentációszerkesztő asszisztens
-
-@item Werner Lemberg,
-@email{wl@@gnu.org},
-Betűtípus-tervező, hibajavítás
-
-@item John Mandereau:
-@email{john.mandereau@@free.fr},
-Honosításfelelős
-
-@item Patrick McCarty:
-SVG guru, hibajavítás, szövegkezelés
-
-@item Joe Neeman:
-Fejlesztő
-
-@item Han-Wen Nienhuys:
-@email{hanwen@@xs4all.nl},
-@uref{http://www.xs4all.nl/~hanwen/},
-Fő fejlesztő
-
-@item Jan Nieuwenhuizen:
-@email{janneke@@gnu.org},
-@uref{http://www.xs4all.nl/~jantien/},
-Fő fejlesztő
-
-@item Graham Percival:
-@uref{http://percival-music.ca},
-Projekt manager, dokumentációszerkesztő
-
-@item Mark Polesky:
-Dokumentációszerkesztő assisztens, kódtisztítás
-
-@item Neil Puttock:
-Fejlesztő
-
-@item Nicolas Sceaux:
-Fejlesztő, Scheme guru
-
-@item Carl Sorensen:
-@email{c_sorensen@@byu.edu},
-Fejlesztő, a Békák felelőse
-
-@item Francisco Vila:
-Honosítás
-
-@item Valentin Villenave:
-LilyPond Kódrészletek Tárházának szerkesztője, hibafelelős
-
-@end itemize
-@end macro
-
-
-
-@macro developersPrevious
-
-@itemize
-
-@c use colons not commas for @item entries.
-
-@item Pedro Kroeger:
-Fordításfelelős
-
-@item Graham Percival:
-@uref{http://percival-music.ca},
-Hibafelelős, a Nagy Dokumentációs Projekt vezetője
-
-@item Jürgen Reuter:
-@email{reuter_j@@web.de},
-@uref{http://www.juergen-reuter.de},
-Régizene lejegyzése
-
-@item Erik Sandberg:
-Hibafelelős
-
-@end itemize
-@end macro
-
-
-@c  *****************  current contributors
-
-@macro coreCurrent
-
-@c use commas not colons
-
-Frédéric Bron,
-Hajo Dezelski,
-Andrew Hawryluk,
-Ian Hulin,
-Michael Käppler,
-Marek Klein,
-Kieren MacMillan,
-Andrew Wilson
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro fontCurrent
-
-@c use commas not colons
-
-Simon Tatham
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro docCurrent
-
-@c use commas not colons
-
-James Lowe,
-Ralph Palmer,
-Patrick Schmidt
-
-@c no comma for last entry
-
-@end macro
-
-
-@macro supportCurrent
-
-@c use commas not colons
-
-James E. Bailey,
-Christian Hitz
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro translationsCurrent
-
-@c use commas not colons
-
-Benkő Pál,
-Fodor Bertalan,
-Harmath Dénes,
-Rébeli-Szabó Tamás,
-Selyem Zoltán Csaba,
-Szervác Attila,
-Udvari Gábor
-
-@c no comma for last entry
-
-@end macro
-
-
-@c  *****************  previous contributors
-
-@macro corePrevious
-
-@c use commas not colons
-
-Erlend Aasland,
-Maximilian Albert,
-Guido Amoruso,
-Kristof Bastiaensen,
-Pal Benko,
-@c @email{benkop@@freestart.hu},
-Juliusz Chroboczek,
-@c @email{jch@@pps.jussieu.fr},
-Angelo Contardi,
-David Feuer,
-@c @email{david.feuer@@gmail.com},
-Bertalan Fodor,
-Mathieu Giraud,
-Yuval Harel,
-Bernard Hurley,
-@c @email{bernard@@fong-hurley.org.uk},
-Yoshinobu Ishizaki,
-Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
-David Jedlinsky,
-Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
-Michael Krause,
-@c @email{m.krause@@tu-harburg.de},
-Jean-Baptiste Lamy,
-@c @email{jiba@@tuxfamily.org},
-Jonatan Liljedahl,
-Peter Lutek,
-Hendrik Maryns,
-Joe Neeman,
-@c @email{joeneeman@@gmail.com},
-Matthias Neeracher,
-Tatsuya Ono,
-Lisa Opus Goldstein,
-Guy Gascoigne-Piggford,
-Stan Sanderson,
-Edward Sanford Sutton,
-Andreas Scherer,
-Johannes Schindelin,
-Kim Shrier,
-Vicente Solsona Della,
-David Svoboda,
-Sebastiano Vigna,
-Arno Waschk,
-Michael Welsh Duggan,
-John Williams,
-Milan Zamazal,
-Rune Zedeler
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro fontPrevious
-
-@c use commas not colons
-
-Tom Cato Amundsen,
-@c @email{tca@@gnu.org},
-Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
-Arno Waschk,
-@c @email{arno@@arnowaschk.de},
-Rune Zedeler
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro docPrevious
-
-@c use commas not colons
-
-Erlend Aasland,
-Trevor Bača,
-Alard de Boer,
-Jay Hamilton,
-Andrew Hawryluk,
-Joseph Harfouch,
-Cameron Horsburgh,
-Geoff Horton,
-Ian Hulin,
-Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
-Kurtis Kroon,
-Dave Luttinen,
-Kieren MacMillan,
-Christian Mondrup,
-@c @email{scancm@@biobase.dk},
-Eyolf Østrem,
-Ralph Palmer,
-François Pinard,
-@c @email{pinard@@iro.umontreal.ca},
-@c @uref{http://pinard.progiciels-bpi.ca/},
-Eduardo Vieira,
-Michael Rasmussen,
-Till Rettig,
-Carl D. Sorensen,
-Anh Hai Trinh,
-Rune Zedeler
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro supportPrevious
-
-@c use commas not colons
-
-Anthony Fok,
-@c @email{foka@@debian.org},
-Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
-Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
-David Svoboda
-@c @email{svoboda@@cmu.edu}
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro translationsPrevious
-
-@c use commas not colons
-
-Frédéric Chiasson,
-Abel Cheung,
-Alard de Boer,
-Simon Dahlbacka,
-Orm Finnendahl,
-David González,
-Nicolas Grandclaude,
-@c @email{ngclaude@@123mail.org},
-Damien Heurtebise,
-Matthieu Jacquot,
-Bjoern Jacke,
-@c @email{bjoern.jacke@@gmx.de},
-Neil Jerram,
-@c @email{nj104@@cus.cam.ac.uk},
-Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
-Nicolas Klutchnikoff,
-Jean-Charles Malahieude,
-@c @email{lolyfan@@wanadoo.fr},
-Adrian Mariano,
-Christian Mondrup,
-Tineke de Munnik,
-@c @email{tdm@@dds.nl},
-Steven Michael Murphy,
-François Pinard,
-Gauvain Pocentek,
-@c @email{gauvainpocentek@@yahoo.fr},
-Till Rettig,
-Ludovic Sardain,
-@c @email{ludovicsardain@@gmail.com},
-Yoshiki Sawada,
-Thomas Scharkowski,
-Clytie Siddall,
-August S. Sigov,
-@c @email{august@@infran.ru},
-Roland Stigge,
-Risto Vääräniemi,
-Andrea Valle,
-Olcay Yıldırım
-
-@c no comma for last entry
-
-@end macro
-
-
index 17be33814744f4db40bd33ae815c66ea545ddd19..14a93b3b248b7e9b9c203df3f2372ec2a900c53f 100644 (file)
@@ -569,111 +569,6 @@ fejlesztői verziót ajánljuk:
 @end quotation
 
 
-@subheading Dokumentáció
-
-@divClass{keep-bullets}
-@itemize
-
-@item
-Tankönyv:
-
-@manualDevelLearningSplit-hu
-@* @manualDevelLearningBig-hu
-@* @manualDevelLearningPdf-hu
-
-@item
-Fogalomtár:
-
-@manualDevelGlossarySplit-hu
-
-@manualDevelGlossaryBig-hu
-
-@manualDevelGlossaryPdf-hu
-
-@item
-Esszé:
-
-@manualDevelEssaySplit-hu
-
-@manualDevelEssayBig-hu
-
-@manualDevelEssayPdf-hu
-
-
-@c separate introduction, regular, infrequent manuals
-@smallspace
-
-@item
-Kottaírás:
-
-@manualDevelNotationSplit-hu
-
-@manualDevelNotationBig-hu
-
-@manualDevelNotationPdf-hu
-
-@item
-Használat:
-
-@manualDevelUsageSplit-hu
-
-@manualDevelUsageBig-hu
-
-@manualDevelUsagePdf-hu
-
-@item
-Kódrészletek:
-
-@manualDevelSnippetsSplit-hu
-
-@manualDevelSnippetsBig-hu
-
-@manualDevelSnippetsPdf-hu
-
-
-@c separate introduction, regular, infrequent manuals
-@smallspace
-
-@item
-Web:
-
-@manualDevelWebSplit-hu
-
-@manualDevelWebBig-hu
-
-@manualDevelWebPdf-hu
-
-@item
-Változások:
-
-@manualDevelChangesSplit-hu
-
-@manualDevelChangesBig-hu
-
-@manualDevelChangesPdf-hu
-
-@item
-Bővítés:
-
-@manualDevelExtendingSplit-hu
-
-@manualDevelExtendingBig-hu
-
-@manualDevelExtendingPdf-hu
-
-@item
-Belső működés:
-
-@manualDevelInternalsSplit-hu
-
-@manualDevelInternalsBig-hu
-
-@manualDevelInternalsPdf-hu
-
-@end itemize
-@divEnd
-@divEnd
-
 @divClass{column-right-top}
 @subheading Útmutató közreműködőknek
 
@@ -688,9 +583,9 @@ olvashatsz.}
 
 @docLinksBare{Útmutató közreműködőknek, contributor,
   @rcontribnamed{Top,Útmutató közreműködőknek},
-  @manualDevelContributorSplit-hu,
-  @manualDevelContributorBig-hu, 500 kB,
-  @manualDevelContributorPdf-hu, 2.8 MB}
+  @manualDevelContributorSplit,
+  @manualDevelContributorBig, 500 kB,
+  @manualDevelContributorPdf, 2.8 MB}
 @divEnd
 
 
@@ -765,6 +660,97 @@ Archívum}
 @divEnd
 @divEnd
 
+@subheading Dokumentáció
+
+@divClass{normal-table}
+@multitable @columnfractions .3 .3 .3
+@headitem Introduction
+@item
+@docLinkSplit{Tankönyv,learning,@manualDevelLearningSplit-hu}
+@tab
+@docLinkBig{Tankönyv,learning,@manualDevelLearningBig-hu}
+@tab
+@docLinkPdf{Tankönyv,learning,@manualDevelLearningPdf-hu}
+
+@item
+@docLinkSplit{Fogalomtár,music-glossary,@manualDevelGlossarySplit}
+@tab
+@docLinkBig{Fogalomtár,music-glossary,@manualDevelGlossaryBig}
+@tab
+@docLinkPdf{Fogalomtár,music-glossary,@manualDevelGlossaryPdf}
+
+@item
+@docLinkSplit{Esszé,essay,@manualDevelEssaySplit}
+@tab
+@docLinkBig{Esszé,essay,@manualDevelEssayBig}
+@tab
+@docLinkPdf{Esszé,essay,@manualDevelEssayPdf}
+
+@headitem Regular
+
+@item
+@docLinkSplit{Kottaírás,notation,@manualDevelNotationSplit}
+@tab
+@docLinkBig{Kottaírás,notation,@manualDevelNotationBig}
+@tab
+@docLinkPdf{Kottaírás,notation,@manualDevelNotationPdf}
+
+@item
+@docLinkSplit{Használat,usage,@manualDevelUsageSplit-hu}
+@tab
+@docLinkBig{Használat,usage,@manualDevelUsageBig-hu}
+@tab
+@docLinkPdf{Használat,usage,@manualDevelUsagePdf-hu}
+
+@item
+@docLinkSplit{Kódrészletek,snippets,@manualDevelSnippetsSplit}
+@tab
+@docLinkBig{Kódrészletek,snippets,@manualDevelSnippetsBig}
+@tab
+@docLinkPdf{Kódrészletek,snippets,@manualDevelSnippetsPdf}
+
+@headitem Infrequent
+
+@item
+@docLinkSplit{Web,web,@manualDevelWebSplit-hu}
+@tab
+@docLinkBig{Web,web,@manualDevelWebBig-hu}
+@tab
+@docLinkPdf{Web,web,@manualDevelWebPdf-hu}
+
+@item
+@docLinkSplit{Változások,changes,@manualDevelChangesSplit}
+@tab
+@docLinkBig{Változások,changes,@manualDevelChangesBig}
+@tab
+@docLinkPdf{Változások,changes,@manualDevelChangesPdf}
+
+@item
+@docLinkSplit{Bővítés,extending,@manualDevelExtendingSplit}
+@tab
+@docLinkBig{Bővítés,extending,@manualDevelExtendingBig}
+@tab
+@docLinkPdf{Bővítés,extending,@manualDevelExtendingPdf}
+
+@item
+@docLinkSplit{működés,internals,@manualDevelInternalsSplit}
+@tab
+@docLinkBig{működés,internals,@manualDevelInternalsBig}
+@tab
+@docLinkPdf{működés,internals,@manualDevelInternalsPdf}
+
+@ifset web_version
+@headitem Downloadable
+
+@item
+@doctarballDevel
+@end ifset
+
+@end multitable
+
+@divEnd
+@divEnd
+
 @node Készítők
 @unnumberedsec Készítők
 @translationof Authors
index 054f76c9b09e879136f2e164b99a6d2d40b490a1..bf052b46caa227b6eb8ab6679cf40237158cb7a2 100644 (file)
@@ -47,13 +47,13 @@ Bevezetés a LilyPond használatába lépésről lépésre.
 @details{Tankönyv}
 
 @item
-@ifWebLinks{@manualStableGlossarySplitNoName-hu,@rglosnamed{Top,Fogalomtár}}
+@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Fogalomtár}}
 @emph{(opcionális)}
 Zenei fogalmak gyűjteménye több nyelven.
 @details{Fogalomtár}
 
 @item
-@ifWebLinks{@manualStableEssaySplitNoName-hu,@ressaynamed{Top,Esszé}}
+@ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Esszé}}
 @emph{(opcionális)}
 Háttérinformáció a kottaszedés folyamatáról és a 19. századi kottaszedés
 esztétikai elveiről.
@@ -69,7 +69,7 @@ esztétikai elveiről.
 @itemize
 
 @item
-@ifWebLinks{@manualStableNotationSplitNoName-hu,@rusernamed{Top,Kottaírás}}
+@ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Kottaírás}}
 A dokumentáció törzsanyaga; részletesen bemutatja a különböző kottaelemek
 beviteli módját.
 @details{Kottaírás}
@@ -81,7 +81,7 @@ rendszerek közötti különbségekre.
 @details{Használat}
 
 @item
-@ifWebLinks{@manualStableSnippetsSplitNoName-hu,@rlsrnamed{Top,Kódrészletek}}
+@ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Kódrészletek}}
 Hasznos példák, tippek, trükkök.
 @details{Kódrészletek}
 
@@ -104,17 +104,17 @@ Gyakran Ismételt Kérdések.
 A weboldal.
 
 @item
-@ifWebLinks{@manualStableChangesSplitNoName-hu,@rchangesnamed{Top,Változások}}
+@ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Változások}}
 A legutóbbi verzióváltás óta történt változások.
 @details{Változások}
 
 @item
-@ifWebLinks{@manualStableExtendingSplitNoName-hu,@rextendnamed{Top,Bővítés}}
+@ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Bővítés}}
 A LilyPond képességeinek kiterjesztése.
 @details{Bővítés}
 
 @item
-@ifWebLinks{@manualStableInternalsSplitNoName-hu,@rinternalsnamed{Top,Belső működés}}
+@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Belső működés}}
 A LilyPond belső szerkezetének referenciája. A kimenet finomhangolásához
 szükséges.
 @details{Belső működés}
@@ -221,9 +221,9 @@ megfelelőjére vagy kíváncsi, érdemes megnézni a fogalomtárban.
 
 @docLinks{Fogalomtár, music-glossary,
   @rglosnamed{Top,Fogalomtár},
-  @manualStableGlossarySplit-hu,
-  @manualStableGlossaryBig-hu, 1 MB,
-  @manualStableGlossaryPdf-hu, 1.5 MB}
+  @manualStableGlossarySplit,
+  @manualStableGlossaryBig, 1 MB,
+  @manualStableGlossaryPdf, 1.5 MB}
 
 @divEnd
 
@@ -247,9 +247,9 @@ majd felületesen bemutatja a LilyPond szedési technikáit,
 
 @docLinks{Esszé, essay,
   @ressaynamed{Top,Esszé},
-  @manualStableEssaySplit-hu,
-  @manualStableEssayBig-hu, 2 MB,
-  @manualStableEssayPdf-hu, 2.5 MB}
+  @manualStableEssaySplit,
+  @manualStableEssayBig, 2 MB,
+  @manualStableEssayPdf, 2.5 MB}
 
 @divEnd
 
@@ -273,9 +273,9 @@ megfelelőjét, melyek a @ref{Fogalomtár}ban vannak leírva.}
 
 @docLinks{Kottaírás, notation,
   @rusernamed{Top,Kottaírás},
-  @manualStableNotationSplit-hu,
-  @manualStableNotationBig-hu, 7 MB,
-  @manualStableNotationPdf-hu, 18 MB}
+  @manualStableNotationSplit,
+  @manualStableNotationBig, 7 MB,
+  @manualStableNotationPdf, 18 MB}
 
 @divEnd
 
@@ -324,9 +324,9 @@ A kottaírás kézikönyvének megfelelő szakaszaiban is találhatóak ilyenek
 
 @docLinks{Kódrészletek, snippets,
   @rlsrnamed{Top,Kódrészletek},
-  @manualStableSnippetsSplit-hu,
-  @manualStableSnippetsBig-hu, 2.5 MB,
-  @manualStableSnippetsPdf-hu, 8 MB}
+  @manualStableSnippetsSplit,
+  @manualStableSnippetsBig, 2.5 MB,
+  @manualStableSnippetsPdf, 8 MB}
 
 @divEnd
 
@@ -419,9 +419,9 @@ az előző stabil verzió óta.
 
 @docLinks{Változások, changes,
   @rchangesnamed{Top,Változások},
-  @manualStableChangesSplit-hu,
-  @manualStableChangesBig-hu, 6 KB,
-  @manualStableChangesPdf-hu, 200 KB}
+  @manualStableChangesSplit,
+  @manualStableChangesBig, 6 KB,
+  @manualStableChangesPdf, 200 KB}
 
 @divEnd
 
@@ -441,9 +441,9 @@ Scheme nyelven írt bővítményekkel.
 
 @docLinks{Bővítés, extending,
   @rextendnamed{Top,Bővítés},
-  @manualStableExtendingSplit-hu,
-  @manualStableExtendingBig-hu, 200 KB,
-  @manualStableExtendingPdf-hu, 400 KB}
+  @manualStableExtendingSplit,
+  @manualStableExtendingBig, 200 KB,
+  @manualStableExtendingPdf, 400 KB}
 
 @divEnd
 
@@ -465,9 +465,9 @@ formázni, ebben a listában érdemes megkeresni az adott tulajdonság nevét.
 
 @docLinks{Belső működés, internals,
   @rinternalsnamed{Top,Belső működés},
-  @manualStableInternalsSplit-hu,
-  @manualStableInternalsBig-hu, 2.5 MB,
-  @manualStableInternalsPdf-hu, 2.8 MB}
+  @manualStableInternalsSplit,
+  @manualStableInternalsBig, 2.5 MB,
+  @manualStableInternalsPdf, 2.8 MB}
 
 @divEnd
 
@@ -514,6 +514,9 @@ A csomagok letölthetőek a @uref{http://lilypond.org} weboldalról.
 @divClass{keep-bullets}
 @itemize
 
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals,
+2.14}
+
 @item @uref{http://lilypond.org/doc/v2.12/Documentation/,
 2.12}
 
diff --git a/Documentation/included/GNUmakefile b/Documentation/included/GNUmakefile
deleted file mode 100644 (file)
index 79b506e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-depth = ../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES= README
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
diff --git a/Documentation/included/acknowledge.itexi b/Documentation/included/acknowledge.itexi
new file mode 100644 (file)
index 0000000..c7fd2f3
--- /dev/null
@@ -0,0 +1,47 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of community.itexi
+
+@ignore
+
+  This file lists projects and institutions that support LilyPond by
+  providing infrastructure:
+
+@end ignore
+
+
+@macro acknowledgementsCurrent
+
+@itemize
+
+@item
+GNU, GNU Savannah
+@uref{http://savannah.gnu.org/}
+Source code and mailing lists
+
+@item
+Webdev.nl
+@uref{http://www.webdev.nl/}
+lilypond.org hosting
+
+@item
+Linuxaudio/VirgniaTech
+@uref{http://linuxaudio.org/}
+Release downloads
+
+@item
+Google Code
+@uref{http://code.google.com/}
+Issue tracker
+
+@item
+Rietveld
+@uref{https://codereview.appspot.com/}
+Code review
+
+@item
+Maison des Sciences de l'Homme Paris Nord
+@uref{http://www.mshparisnord.fr/}
+Automated build tests
+
+@end itemize
+@end macro
index 0d4ebabc007cb5fcc9b9e5bf7910475b45bf5a90..f0528c2df65028dd73f5c3993db20fd51d9039be 100644 (file)
@@ -7,18 +7,28 @@
   list is sorted alphabetically by surname.  This file lists people
   that have contributed more than a few hours of work.
 
-  Developers are people who are (or have been) listed under the
-  "Development Team" in the THANKS, and can choose their own
-  titles.  Contributors are everybody else, and simply list their
+  Developers are people who have been listed under the "Development
+  Team" in Documentation/misc/THANKS*, or who are added when they
+  reach a significant amount of contributions with respect to the
+  existing Developers list, and can choose their own titles.
+  Contributors are everybody else, and simply list their
   contributions.  All lists are sorted alphabetically.
 
+  Developers should be listed under "main developers" and nowhere
+  else. Main developers may appear in both the current and previous.
   Anybody who has finished doing a "main devel team" task should
   list it under developersPrevious, even if they're still doing
   other "main devel team" stuff.  See "Graham Percival" for an
   example.
 
-  Contributors are also split between Current and Previous, and
-  each category contains:
+  Contributors are also split between Current and Previous.
+  Anybody who worked on anything up to and including the latest
+  stable release should be listed under "previous contributors".
+  Contributors who worked on the unstable release should be listed
+  under "current contributors".  A contributor can thus be listed
+  twice (under previous and current).
+
+  Each category contains:
     core...     (programming)
     font...     (duh)
     doc...      (documentation and examples)
@@ -103,7 +113,7 @@ Assistant documentation editor, Code cleanup
 Core developer
 
 @item Mike Solomon:
-@email{mike@@apollinemike.com},
+@email{mike@@mikesolomon.org},
 Core developer, Frog meister
 
 @item Carl Sorensen:
@@ -116,7 +126,7 @@ Translation Meister
 @item Valentin Villenave:
 LSR editor and Bug squad member
 
-@item Jan Warchoł:
+@item Janek Warchoł:
 happy nitpicker
 
 @end itemize
@@ -132,7 +142,7 @@ happy nitpicker
 
 @item Mats Bengtsson:
 @email{mats.bengtsson@@ee.kth.se},
-@uref{http://www.s3.kth.se/~mabe/},
+@uref{https://www.kth.se/profile/matben/},
 Support guru
 
 @item Pedro Kroeger:
@@ -168,20 +178,20 @@ Core developer, Schemer extraordinaire
 @c use commas not colons
 
 Aleksandr Andreev,
-Sven Axelsson,
-Peter Chubb,
-Karin Hoethker,
+Frédéric Bron,
+Torsten Hämmerle ,
 Marc Hohl,
+James Lowe,
+Andrew Main,
+Thomas Morley,
 David Nalesnik,
-Justin Ohmie,
+Keith OHara,
 Benkő Pál,
+Anders Pilegaard,
 Julien Rioux,
-Patrick Schmidt,
+Johannes Rohrer,
 Adam Spiers,
-Heikki Taurainen,
-Piers Titus van der Torren,
-Jan-Peter Voigt,
-Janek Warchol
+Heikki Tauriainen
 
 @c no comma for last entry
 
@@ -203,10 +213,17 @@ Janek Warchol
 
 @c use commas not colons
 
+Frédéric Bron,
+Federico Bruni,
+Colin Campbell,
+Urs Liska,
 James Lowe,
-Pavel Roskin,
-Alberto Simoes,
-Stefan Weil
+Thomas Morley,
+Jean-Charles Malahieude,
+Guy Stalnaker,
+Martin Tarenskeen,
+Arnold Theresius,
+Rodolfo Zitellini
 
 @c no comma for last entry
 
@@ -215,12 +232,14 @@ Stefan Weil
 
 @macro bugsquadCurrent
 
+@c use commas not colons
+
 Colin Campbell,
 Eluze,
+Marc Hohl,
 Phil Holmes,
 Marek Klein,
-Ralph Palmer,
-James Lowe
+Ralph Palmer
 
 @c no comma for last entry
 
@@ -232,8 +251,12 @@ James Lowe
 @c use commas not colons
 
 Colin Campbell,
-Christian Hitz,
-Phil Holmes
+Eluze,
+Marc Hohl,
+Marek Klein,
+Kieren MacMillan,
+Urs Liska,
+Ralph Palmer
 
 @c no comma for last entry
 
@@ -245,6 +268,10 @@ Phil Holmes
 
 @c use commas not colons
 
+Federico Bruni,
+Luca Rossetto Casel,
+Felipe Castro,
+Pavel Fric,
 Jean-Charles Malahieude,
 Till Paala,
 Yoshiki Sawada
@@ -262,11 +289,11 @@ Yoshiki Sawada
 
 Erlend Aasland,
 Maximilian Albert,
+Aleksandr Andreev,
 Guido Amoruso,
 Sven Axelsson,
 Kristof Bastiaensen,
 Pál Benkő,
-Bertrand Bordage,
 Frédéric Bron,
 Juliusz Chroboczek,
 Peter Chubb,
@@ -282,8 +309,8 @@ Lisa Opus Goldstein,
 Yuval Harel,
 Andrew Hawryluk,
 Christian Hitz,
+Karin Hoethker,
 Marc Hohl,
-Ian Hulin,
 Bernard Hurley,
 Yoshinobu Ishizaki,
 Chris Jackson,
@@ -298,10 +325,12 @@ Peter Lutek,
 Kieren MacMillan,
 Hendrik Maryns,
 Thomas Morgan,
-Joe Neeman,
+David Nalesnik,
 Matthias Neeracher,
 Keith OHara,
+Justin Ohmie,
 Tatsuya Ono,
+Benkő Pál,
 Benjamin Peterson,
 Guy Gascoigne-Piggford,
 Henning Hraban Ramm,
@@ -314,10 +343,13 @@ Patrick Schmidt,
 Boris Shingarov,
 Kim Shrier,
 Edward Sanford Sutton,
+Adam Spiers,
 David Svoboda,
+Heikki Taurainen,
+Piers Titus van der Torren,
 Owen Tuz,
 Sebastiano Vigna,
-Jan Warchoł,
+Jan-Peter Voigt,
 Arno Waschk,
 John Williams,
 Andrew Wilson,
@@ -363,7 +395,6 @@ Joseph Harfouch,
 Andrew Hawryluk,
 Cameron Horsburgh,
 Geoff Horton,
-Ian Hulin,
 Heikki Junes,
 Kurtis Kroon,
 James Lowe,
@@ -377,10 +408,12 @@ François Pinard,
 David Pounder,
 Michael Rasmussen,
 Till Rettig,
+Pavel Roskin,
 Patrick Schmidt,
-Carl D. Sorensen,
+Alberto Simoes,
 Anh Hai Trinh,
 Eduardo Vieira,
+Stefan Weil,
 Rune Zedeler
 
 @c no comma for last entry
@@ -391,9 +424,15 @@ Rune Zedeler
 @macro bugsquadPrevious
 
 @c use commas not colons
+
+Colin Campbell,
 James E. Bailey,
+Eluze,
+Phil Holmes,
 Derek Klinge,
+Marek Klein,
 Urs Liska,
+James Lowe,
 Kieren MacMillan,
 Ralph Palmer,
 Dmytro O. Redchuk
@@ -405,8 +444,10 @@ Dmytro O. Redchuk
 
 @c use commas not colons
 
+Colin Campbell,
 Anthony Fok,
 Christian Hitz,
+Phil Holmes,
 Chris Jackson,
 Heikki Junes,
 David Svoboda
index eb24c591807cdecbf7ab1df8e0d1a72ce6fa0bb3..cc2894019faf699194c5499614f71d772a22fb6b 100644 (file)
@@ -562,7 +562,7 @@ sudo make install
 @end example
 
 @noindent
-or...
+or@dots{}
 
 @example
 su -c 'make install'
@@ -605,7 +605,7 @@ make [-j@var{X} CPU_COUNT=@var{X}] doc-stage-1  @emph{## to build only PDF docum
 Edit/compile cycle:
 
 @example
-@emph{## edit source files, then...}
+@emph{## edit source files, then@dots{}}
 
 make [-j@var{X}]                  @emph{## needed if editing outside}
                             @emph{##   Documentation/, but useful anyway}
@@ -922,7 +922,7 @@ bug reports to @email{bug-lilypond@@gnu.org}.
 
 Bugs that are not fault of LilyPond are documented here.
 
-@unnumberedsubsubsec Bison 1.875
+@unnumberedsubsec Bison 1.875
 
 There is a bug in bison-1.875: compilation fails with "parse error
 before `goto'" in line 4922 due to a bug in bison.  To fix, please
@@ -937,7 +937,7 @@ $ make
 @end example
 
 
-@unnumberedsubsubsec Compiling on MacOS@tie{}X
+@unnumberedsubsec Compiling on MacOS@tie{}X
 
 Here are special instructions for compiling under MacOS@tie{}X.
 These instructions assume that dependencies are installed using
@@ -989,7 +989,7 @@ automatic font detection, add
 @end example
 
 
-@unnumberedsubsubsec Solaris
+@unnumberedsubsec Solaris
 
 Solaris7, ./configure
 
@@ -1008,7 +1008,7 @@ or
 CONFIG_SHELL=/bin/bash bash -c ./configure
 @end example
 
-@unnumberedsubsubsec FreeBSD
+@unnumberedsubsec FreeBSD
 
 To use system fonts, dejaview must be installed.  With the default
 port, the fonts are installed in @file{usr/X11R6/lib/X11/fonts/dejavu}.
@@ -1022,7 +1022,7 @@ for your hierarchy.)
 @end example
 
 
-@unnumberedsubsubsec International fonts
+@unnumberedsubsec International fonts
 
 On Mac OS X, all fonts are installed by default.  However, finding all
 system fonts requires a bit of configuration; see
@@ -1049,12 +1049,12 @@ Debian GNU/Linux
 @end verbatim
 
 
-@unnumberedsubsubsec Using lilypond python libraries
+@unnumberedsubsec Using lilypond python libraries
 
 If you want to use lilypond's python libraries (either running
 certain build scripts manually, or using them in other programs),
 set @code{PYTHONPATH} to @file{python/out} in your build
-directory, or @file{.../usr/lib/lilypond/current/python} in the
+directory, or @file{@dots{}/usr/lib/lilypond/current/python} in the
 installation directory structure.
 
 
@@ -1123,7 +1123,7 @@ We currently use make and stepmake, which is complicated and only
 used by us.  Hopefully this will change in the future.
 
 
-@subsubheading Version-specific texinfo macros
+@subheading Version-specific texinfo macros
 
 @itemize
 
index 0167c24c2122bbb3b83ebe2156ba158ebeebe2be..3e4e7fc3b52d8f8ef14ad4327e78d195fbebd5d4 100644 (file)
@@ -58,13 +58,13 @@ chordsline = {
 
 \score {
   <<
-    \context ChordNames {
+    \new ChordNames {
       \chordsline
     }
-    \context FretBoards {
+    \new FretBoards {
       \chordsline
     }
-    \context Staff {
+    \new Staff {
       \chordsline
     }
   >>
index df7675b52f1709d11626c9af1af8276dda39125a..683c35e26ad38005cc87e7e2b04bc2a2b11e597b 100644 (file)
@@ -61,14 +61,14 @@ chordsline = {
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordsline
   }
-  \context FretBoards {
+  \new FretBoards {
     \set Staff.stringTunings = #mandolin-tuning
     \chordsline
   }
-  \context Staff {
+  \new Staff {
     \chordsline
   }
 >>
index 642993fe8ad26e2b998ec73ceb35d96f1f8205e4..455d95375702f7956faa1a3b51d22f5758246376 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 #(define (filter-instrument instrument-name tuning-alist)
    (filter (lambda (entry)
@@ -16,7 +16,7 @@
                                   'text (symbol->string tuning-symbol))
                       (map (lambda (pitch)
                              (make-music 'NoteEvent
-                                         'duration (ly:make-duration 0 0 1 1)
+                                         'duration (ly:make-duration 0 0 1/1)
                                          'pitch pitch))
                            pitches)))))
 
@@ -31,7 +31,7 @@ displayInstrumentDefaultTunings =
   {
     \new Staff {
       \textLengthOn
-      \override Score.RehearsalMark #'self-alignment-X = #LEFT
+      \override Score.RehearsalMark.self-alignment-X = #LEFT
 
       \mark \markup {\left-align "Guitar tunings"}
       \clef "treble_8"
index fe7c795385b984025c1f9851d22db96ac4d751ba..fab326d8008d67d3a0e9730c435303e2487141ee 100644 (file)
@@ -61,14 +61,14 @@ chordsline = {
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordsline
   }
-  \context FretBoards {
+  \new FretBoards {
     \set Staff.stringTunings = #ukulele-tuning
     \chordsline
   }
-  \context Staff {
+  \new Staff {
     \chordsline
   }
 >>
index e9278d3e52c72fb69f0e383f92d83879d2a30dff..548742e14fc513836159b7c963263b155df1e4e2 100644 (file)
@@ -1,7 +1,7 @@
 %% texidoc = "Include file for engraver example."
 \version "2.16.0"
 topVoice =  \relative c' {
-  \key d\major
+  \key d \major
   es8([ g] a[ fis])
   b4
   b16[-. b-. b-. cis-.]
@@ -9,7 +9,7 @@ topVoice =  \relative c' {
 }
 
 botVoice =  \relative c' {
-  \key d\major
+  \key d \major
   c8[( f] b[ a)]
   es4
   es16[-. es-. es-. fis-.]
index de9fd0c87694ebc2a9c18ee12a21fe53dd7245ca..9fd3c62c7f342c1a54f0547a7ddce57c457f48ba 100644 (file)
@@ -86,83 +86,76 @@ those programs if you have any problems compiling a file.}
 
 @subsubheading Step 1. Create your @file{.ly} file
 
-Double-click the LilyPond icon on your desktop, an example file will open.
+Double-click the LilyPond icon on your desktop and an example file will open.
 
-@sourceimage{Learning_Win7_Welcome_File_Whole,,,}
+@sourceimage{LilyPad,,,}
 
 From the menus that appear along the top of the example file,
 select @w{@code{File > Save as}}.  Do not use the @w{@code{File > Save}}
 for the example file as this will not work until you have given it a
 valid LilyPond file name.
 
-@sourceimage{Learning_Win7_Save_Menu,,,}
+@sourceimage{FileSave,,,}
 
 Choose a name for your file, for example @file{test.ly}.
 
-@sourceimage{Learning_Win7_Save_File_With_Name,,,}
+@sourceimage{SaveAs,,,}
 
 
-@subsubheading Step 2a. Compile (with drag-and-drop)
+@subsubheading Step 2. Compile
 
-Depending on what you prefer, to compile your file either:
+To turn your LilyPond file into a music score, you need to compile it. This
+can be done a number of ways -- using drag and drop, with right-click,
+double-clicking or using the command line (a DOS box).  We'll look at the
+first three to start with.
 
-Drag-and-drop the file directly onto the LilyPond icon.
+1. Drag-and-drop the file directly onto the LilyPond icon on the desktop.
 
-@sourceimage{Learning_Win7_Open_Dragndrop,,,}
+@sourceimage{DragDrop,,,}
 
-Right-click on the file and from the pop-up context menu choose
-@w{@code{Open with > LilyPond}}.
+Not much will seem to happen, but after a short while, you should
+see two new files on your desktop -- @file{test.log} and
+@file{test.pdf}.
 
-@sourceimage{Learning_Win7_Open_Context_Menu,,,}
+2. Right-click on the file and from the pop-up context menu and
+choose @w{@code{Generate PDF}}.
 
+@sourceimage{GenPDF,,,}
 
-@subsubheading Step 2b. Compile (with double-clicking)
-
-Or simply double-click the @file{test.ly}.
+3. Or simply double-click the @file{test.ly}.
 
 
 @subsubheading Step 3. View output
 
-During the compilation of the @file{test.ly} file, a command window
-will, very briefly open and then close.  Three additional files will
-have been created during this process.
-
-@sourceimage{Learning_Win7_All_Files_Created,,,}
+@file{test.pdf} contains the engraved @file{test.ly}
+file. Double-click it and it should open in your PDF viewer:
 
-The PDF file contains the engraved @file{test.ly} file.
-
-@sourceimage{Learning_Win7_Pdf_Output,,,}
+@sourceimage{PDFRead,,,}
 
 
 @subsubheading Other commands
 
 To create a new file, begin by selecting @w{@code{File > New}} from
-within any previously created file.
+within any previously created file or @w{@code{File > Open}} to open and
+edit any files you have saved before.  You can also edit a file by
+right-clicking it and selecting @w{@code{Edit source}}.
 
-@sourceimage{Learning_Win7_New_Menu,,,}
+@sourceimage{EditFile,,,}
 
-@noindent
-or @w{@code{File > Open}} to open and edit any files you have saved
-before.
+You must save any edits you make before you try to compile your
+file.  If the PDF file is not created or the output is not what you
+expected, check the log file that will have been created during the
+compilation attempt for any errors.
 
-@sourceimage{Learning_Win7_Open_Menu,,,}
-
-You must save any new edits you make before you compile it and if the
-PDF file is not created, check the log file that will have been created
-during the compilation attempt, for any errors.
-
-@sourceimage{Learning_Win7_Log_File,,,}
+@sourceimage{BadLog,,,}
 
 This log file is overwritten each time you compile your LilyPond file.
 
-The PS file is used internally by LilyPond to create the PDF file and
-can be ignored.  It also gets overwritten each time you compile your
-file.
-
-If you are viewing your file in a PDF viewer, then you must close the
-PDF if you wish to make a new compilation as it may fail to create
-the new PDF while it is still being viewed.
+If you are viewing your file in a PDF viewer, then you must close the PDF
+if you wish to try a new compilation as it may fail to create the new PDF
+while it is still being viewed.
 
+@sourceimage{BadLog2,,,}
 
 @end macro
 
@@ -184,7 +177,7 @@ Create a text file called @file{test.ly} and enter:
 @example
 \\version "@w{@versionStable{}}"
 @{
-  c' e' g' e'
+@ @ c' e' g' e'
 @}
 @end example
 
index 84bade14f2476259197d39c3f021bc1af2462b65..4ee47ec5ad7cbf76f55151bdda326145875af705 100644 (file)
@@ -7,7 +7,7 @@ path)."
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \paper {
   myStaffSize = 20
@@ -56,7 +56,7 @@ sampleMusic = \relative c'' {
 {
   \set Staff.instrumentName = #"Gonv override"
   c2^\trill c
-  \override NoteHead #'font-family = #'gonville
-  \override Script #'font-family = #'gonville
+  \override NoteHead.font-family = #'gonville
+  \override Script.font-family = #'gonville
   c^\trill c 
 }
index c53c3d1ff70d5192bfe4a175af181f24c977d0f8..96f697be4cb95bbf1767356cf3a62ac2fb4ca39f 100644 (file)
@@ -15,9 +15,9 @@ of spending time on those simple tasks.
 
 For a multi-faceted project like LilyPond, sometimes it's tough to know
 where to begin.  In addition to the avenues proposed below, you can send
-an e-mail to the @email{mike@@mikesolomon.org, Frog meister}
-letting him know your skill set and asking how you can help or proposing a
-project.  He'll be able to give you guidance on how to get started.
+an e-mail to the
+@uref{https://lists.gnu.org/mailman/listinfo/lilypond-devel, lilypond-devel@@gnu.org}
+mailing list, and we'll help you to get started.
 
 @end macro
 
@@ -35,11 +35,6 @@ Mailing list support: answer questions from fellow users.
 Bug reporting: help users create proper @rweb{Bug reports}, and/or
 join the Bug Squad to organize @rcontrib{Issues}.
 
-@item
-@rcontrib{Grand Regression Test Checking}: verify that LilyPond works correctly
-by examining output of test snippets.  Checking one snippet takes less
-than a minute!
-
 @item
 Documentation: small changes can be proposed by following the
 guidelines for @rcontrib{Documentation suggestions}.
@@ -90,8 +85,7 @@ Translations: see @rcontrib{Translating the documentation}, and
 @rcontrib{Translating the website}.
 
 @item
-Bugfixes or new features: the best way to begin is to join the
-Frogs, and read @rcontrib{Programming work}.
+Bugfixes or new features: read @rcontrib{Programming work}.
 
 @end itemize
 
@@ -101,23 +95,6 @@ Frogs, and read @rcontrib{Programming work}.
 @macro helpusProjects
 @subheading Projects
 
-@subsubheading Frogs
-
-Website and mailing list:
-
-@example
-@uref{http://frogs.lilynet.net}
-@end example
-
-The Frogs are ordinary LilyPond users who have chosen to get
-involved in their favorite software's development.  Fixing bugs,
-implementing new features, documenting the source code: there's a
-lot to be done, but most importantly: this is a chance for
-everyone to learn more about LilyPond, about Free Software, about
-programming... and to have fun.  If you're curious about any of
-it, then the word is: @emph{Join the Frogs!}
-
-
 
 @subsubheading Grand LilyPond Input Syntax Standardization
 
index cd3be7399419ba14f726d39a8101f8628f5fbec3..a78697873446f8fa68061e011f436b7b89c13275 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="
@@ -24,11 +24,11 @@ dimensions.
 
 pattern = <<
   \new Voice {
-    \override Stem #'direction = #UP
+    \override Stem.direction = #UP
     e'4 e'2. e'1 e'\breve*1/2 e'\longa*1/4 \bar "||"
   }
   \new Voice {
-    \override Stem #'direction = #DOWN
+    \override Stem.direction = #DOWN
     a4 a2. a1 a\breve*1/2 a\longa*1/4 \bar "||"
   }
 >>
@@ -37,71 +37,71 @@ pattern = <<
 \transpose c c {
   \clef C
 
-  \override Staff.NoteHead  #'style = #'default
+  \override Staff.NoteHead.style = #'default
   s1*0^\markup { "default" }
   \pattern
 
-  \override Staff.NoteHead  #'style = #'altdefault
+  \override Staff.NoteHead.style = #'altdefault
   s1*0^\markup { "altdefault" }
   \pattern
 
   \break
 
-  \override Staff.NoteHead  #'style = #'baroque
+  \override Staff.NoteHead.style = #'baroque
   s1*0^\markup { "baroque" }
   \pattern
 
-  \override Staff.NoteHead  #'style = #'neomensural
+  \override Staff.NoteHead.style = #'neomensural
   s1*0^\markup { "neomensural" }
   \pattern
 
   \break
 
-  \override Staff.NoteHead  #'style = #'mensural
+  \override Staff.NoteHead.style = #'mensural
   s1*0^\markup { "mensural" }
   \pattern
 
-  \override Staff.NoteHead  #'style = #'petrucci
+  \override Staff.NoteHead.style = #'petrucci
   s1*0^\markup { "petrucci" }
   \pattern
 
   \break
 
-  \override Staff.NoteHead  #'style = #'harmonic
+  \override Staff.NoteHead.style = #'harmonic
   s1*0^\markup { "harmonic" }
   \pattern
 
-  \override Staff.NoteHead  #'style = #'harmonic-black
+  \override Staff.NoteHead.style = #'harmonic-black
   s1*0^\markup { "harmonic-black" }
   \pattern
 
   \break
 
-  \override Staff.NoteHead  #'style = #'harmonic-mixed
+  \override Staff.NoteHead.style = #'harmonic-mixed
   s1*0^\markup { "harmonic-mixed" }
   \pattern
 
-  \override Staff.NoteHead  #'style = #'diamond
+  \override Staff.NoteHead.style = #'diamond
   s1*0^\markup { "diamond" }
   \pattern
 
   \break
 
-  \override Staff.NoteHead  #'style = #'cross
+  \override Staff.NoteHead.style = #'cross
   s1*0^\markup { "cross" }
   \pattern
 
-  \override Staff.NoteHead  #'style = #'xcircle
+  \override Staff.NoteHead.style = #'xcircle
   s1*0^\markup { "xcircle" }
   \pattern
 
   \break
 
-  \override Staff.NoteHead  #'style = #'triangle
+  \override Staff.NoteHead.style = #'triangle
   s1*0^\markup { "triangle" }
   \pattern
 
-  \override Staff.NoteHead  #'style = #'slash
+  \override Staff.NoteHead.style = #'slash
   s1*0^\markup { "slash" }
   \pattern
 }
index 5bf05a87ebc9a881d11c131d03c61599272bc4de..7ed10a91c5271595c7ebf9053ad803eff7bc6616 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   texidoc ="@cindex Feta scripts
@@ -50,7 +50,6 @@ This chart shows all articulations, or scripts, that the feta font contains.
     '("upbow"
       "downbow"
       "flageolet"
-      "thumb"
       "snappizzicato"
       "open"
       "halfopen"
@@ -99,7 +98,7 @@ This chart shows all articulations, or scripts, that the feta font contains.
        (list (make-music
                'NoteEvent
                'duration
-               (ly:make-duration 2 0 1 1)
+               (ly:make-duration 2 0 1/1)
                'pitch
                (ly:make-pitch 0 0 0))
              (make-music
@@ -130,7 +129,7 @@ This chart shows all articulations, or scripts, that the feta font contains.
       (list (make-music
               'LyricEvent
               'duration
-              (ly:make-duration 2 0 1 1)
+              (ly:make-duration 2 0 1/1)
               'text
               script))))
 
@@ -164,23 +163,23 @@ This chart shows all articulations, or scripts, that the feta font contains.
     \Score
     timing = ##f
     barAlways = ##t
-    \override NonMusicalPaperColumn #'padding = #2.5
-    \override PaperColumn #'keep-inside-line = ##t
+    \override NonMusicalPaperColumn.padding = #2.5
+    \override PaperColumn.keep-inside-line = ##t
   }
   \context {
     \RhythmicStaff
     \remove "Time_signature_engraver"
-    \override BarLine #'transparent = ##t
-    \override Stem #'direction = #down
+    \hide BarLine
+    \override Stem.direction = #down
   }
   \context {
     \Lyrics
-    \override LyricText #'font-family = #'typewriter
-    \override LyricText #'font-shape = #'upright
+    \override LyricText.font-family = #'typewriter
+    \override LyricText.font-shape = #'upright
   }
   \context {
     \VaticanaVoice
-    \override Script #'padding = #0
+    \override Script.padding = #0
   }
 }
 
index ac7545e3425220b83b06d8881673bf002f1b220a..85dc0bcc446ff7efa139d0356859882b27cdc980 100644 (file)
@@ -1,6 +1,5 @@
 ISOLANG = it
 depth = ../..
-SUBDIRS = learning texidocs web usage included notation
 STEPMAKE_TEMPLATES = documentation texinfo
 LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
 
diff --git a/Documentation/it/changes.tely b/Documentation/it/changes.tely
new file mode 100644 (file)
index 0000000..1e8b5c4
--- /dev/null
@@ -0,0 +1,506 @@
+\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
+@ignore
+    Translation of GIT committish: 714ec3008267aa3abd4f3bfb05da7eede2eb4e27
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+@setfilename lilypond-changes.info
+@settitle Cambiamenti in LilyPond
+
+@include macros.itexi
+
+@ifhtml
+@macro inputfileref{DIR,NAME}
+@uref{../../\DIR\/collated-files.html#\NAME\,@file{\DIR\/\NAME\}}@c
+@end macro
+@macro usermanref{NAME}
+@inforef{\NAME\,,../user/lilypond/lilypond}@c
+@end macro
+@end ifhtml
+
+@ifnothtml
+@macro inputfileref{DIR,NAME}
+@file{\DIR\/\NAME\}@c
+@end macro
+@macro usermanref{NAME}
+Vedi il manuale utente, \NAME\
+@end macro
+@end ifnothtml
+
+@macro textanchor{NAME}
+@html
+<a name="\NAME\"></a>
+@end html
+@end macro
+
+
+@documentencoding utf-8
+@documentlanguage it
+@afourpaper
+
+@c Translators: Federico Bruni
+
+@finalout
+
+@node Top
+@top Nuove funzionalità nella versione 2.18 rispetto alla 2.16
+
+@allowcodebreaks false
+
+@itemize
+
+@ignore
+
+HINTS
+
+* add new items at the top
+
+* only show verbatim input for syntax/input changes
+
+* try to be as brief possible in those cases
+
+* don't try to provide real-world examples, they often get too big,
+which scares away people.
+
+* Write complete sentences.
+
+* only show user-visible changes.
+
+@end ignore
+
+@item
+Varie articolazioni possono essere inserite in una sola variabile o restituite
+da una funzione di tipo evento:
+
+@lilypond[verbatim,quote]
+sempreStacc = -. ^\markup \italic sempre
+\relative { c''4\sempreStacc c c c }
+@end lilypond
+
+@item
+La linea di base delle partiture interne a un blocco \score viene presa ora
+dal punto di riferimento (di solito il centro del rigo) del primo sistema
+invece che dal punto più alto del rettangolo confinante.  L'esempio seguente
+@lilypond[verbatim,quote]
+\markup {
+  violin: \score { \new Staff { <g d' a' e''>1 }
+                   \layout { indent=0 } } ,
+  cello: \score { \new Staff { \clef "bass" <c, g, d a> }
+                  \layout { indent=0 } }
+}
+@end lilypond
+
+precedentemente appariva così
+@lilypond[quote]
+\markup {
+  violin: \general-align #Y #UP
+          \score { \new Staff { <g d' a' e''>1 }
+                   \layout { indent=0 } } ,
+  cello:  \general-align #Y #UP
+          \score { \new Staff { \clef "bass" <c, g, d a> }
+                  \layout { indent=0 } }
+}
+@end lilypond
+
+e non c'era un modo affidabile per allineare le due partiture.
+
+@item
+LilyPond non inferisce più automaticamente un contesto @samp{\defaultchild}
+in una definizione di contesto che ha delle clausole @samp{\accepts}.  Qualsiasi
+definizione di contesto priva di una definizione esplicita o ereditata di
+@samp{\defaultchild} viene considerata un contesto @samp{Bottom} e sarà idonea
+per eventi ritmici e sovrascritture senza causare la creazione implicita di altri
+contesti.  Assicurati di specificare un @samp{\defaultchild} per i contesti diversi
+da @samp{Bottom}, se li definisci da zero.
+
+@item
+Ora sono completamente supportati i simboli di registro basso e discant per
+fisarmonica nel modulo @samp{scm accreg}, vedi @ruser{Accordion Registers}.
+@lilypond[verbatim,quote]
+#(use-modules (scm accreg))
+\new PianoStaff
+<<
+  \new Staff \relative
+  { \clef "treble"  \discant "10"
+    r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
+    \discant "121"
+    << { r16 <f bes> r <e a> r <d g> } \\
+       { d r a r bes r } >> |
+    <cis e a>1
+  }
+  \new Staff \relative
+  { \clef "treble"  \freeBass "1"
+    r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
+    \clef "bass"  \stdBass "Master"
+    << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
+         <e a cis>1^"a" } \\
+       { d8_"D" c_"C" bes_"B" | a1_"A" }
+    >>
+  }
+>>
+@end lilypond
+
+@item
+I nuovi comandi @code{markLengthOn} e @code{markLengthOff} controllano
+la spaziatura orizzontale dei segni di tempo e di chiamata.
+
+@lilypond[quote,relative=2]
+\markLengthOn
+\compressFullBarRests
+\tempo "Molto vivace" c2 c'
+\mark\default
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
+\bar "||"
+\markLengthOff
+\tempo "Molto vivace" c2 c'
+\mark#1
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
+@end lilypond
+
+@item
+I segni di chiamata all'inizio di una linea sono ora posizionati a destra
+della chiave e dell'armatura di chiave.  Come nelle versioni precedenti,
+@code{break-alignable-interface} ne controlla il comportamento.
+
+@lilypond[quote,relative=2]
+\set Score.barNumberVisibility = #all-bar-numbers-visible
+\set Timing.currentBarNumber = #72
+\bar"||" \time 3/4 \key e\major \mark#10 \tempo "Adagio" b2.
+@end lilypond
+
+@item
+I numeri decimali possono ora essere scritti direttamente nella
+musica, senza il segno di cancelletto.  Grazie alla precedente
+modifica del modo in cui le proprietà di un oggetto sono
+specificate, il codice per cambiare la lunghezza dei gambi
+è cambiato da così:
+@example
+\override Stem #'length = #5.6
+e' f' g' a'
+@end example
+
+a così:
+@example
+\override Stem.length = 5.6
+e' f' g' a'
+@end example
+
+Bisogna scrivere un numero a entrambi i lati del punto -- valori come
+@code{4.} o @code{-.3} non sono permessi.
+
+Le frazioni decimali non sono accettate in modalità @code{\chordmode}.
+
+@item
+Varie abbreviazioni come @code{(}, @code{)}, @code{|},
+@code{[}, @code{]}, @code{~}, @code{\(}, @code{\)} e altre possono
+ora essere ridefinite liberamente come normali comandi.  Ad esempio
+@lilypond[verbatim,quote]
+"\\{" = (
+"\\}" = )
+"(" = \melisma
+")" = \melismaEnd
+
+\new Staff <<
+  \relative c' {
+    c8 \{ d e f \} % con legatura di portamento
+    g ( a b c ) % nessuna legatura, c'è il melisma
+    c,1 \bar "|."
+   }
+   \addlyrics { Li -- ly -- pond. }
+>>
+@end lilypond
+
+@item
+La forma abbreviata dell'articolazione @code{\staccatissimo} è stata
+rinominata da @code{-|} a@tie{}@code{-!}.
+
+@item
+L'ampiezza della variazione di tempo ora si scrive @code{\tempo 4 = 60 - 68}
+invece di @code{\tempo 4 = 60 ~ 68}.
+
+@item
+Il grob @code{OctavateEight} è stato rinominato @code{ClefModifier}.
+Le relative proprietà di contesto sono state rinominate da @code{xxxOctavationyyy}
+a @code{xxxTranspositionyyy}.
+
+@item
+C'è un nuovo comando @code{\absolute} che contrassegna in modo esplicito
+il fatto che la musica sia inserita con altezze assolute.  Sebbene quella assoluta
+sia la modalità di inserimento implicita predefinita, un comando esplicito @code{\absolute}
+impedisce la reinterpretazione quando il passaggio è posto dentro un blocco
+@code{\relative}:
+@lilypond[verbatim,quote]
+\relative c { c'4 \absolute { f'' g'' } c }
+@end lilypond
+
+@item
+Se si usa @code{\relative} senza un'esplicita altezza di riferimento,
+ora l'altezza di riferimento è il centro della prima ottava, rendendo
+la prima altezza inserita indistinguibile dall'altezza assoluta.
+Precedentemente, se si ometteva l'altezza di riferimento veniva
+presa come riferimento l'altezza @code{c'}.  Dato che questa scelta
+era in qualche modo arbitraria, si consigliava di specificare
+sempre l'altezza di riferimento.
+
+@item
+Si può usare un nuovo comando @code{\single} per convertire la sovrascrittura
+di una proprietà in una modifica da applicare a una singola espressione
+musicale:
+
+@lilypond[quote,verbatim,relative=2]
+<a \single\voiceTwoStyle e' a>1
+@end lilypond
+
+@item
+I due modi per non far apparire un oggetto grafico nell'output sono
+sovrascrivere la sua proprietà @code{transparent} con @code{#t}
+(mantenendo la spaziatura originaria) o sovrascrivere la sua
+proprietà @code{stencil} con @code{#f} (per non occupare alcun spazio).  Queste
+due operazioni hanno ora delle forme abbreviate chiamate rispettivamente
+@code{\hide} (nascondi) e @code{\omit} (ometti).  Prendono come argomento
+un'espressione musicale da modificare o il nome di un oggetto grafico
+per cui si deve creare una sovrascrittura (per specificare entrambi,
+usare @code{\single} nella forma con override):
+
+@lilypond[quote,verbatim]
+\new Staff \with { \omit Clef }
+\relative c'' <a e' \hide a>1
+@end lilypond
+
+@item
+Un nuovo comando @code{\temporary} può essere applicato alle sovrascritture
+in modo che queste non sostituiscano precedenti impostazioni delle proprietà.  Se
+successivamente viene applicato un @code{\revert} alla stessa proprietà, riappare
+l'impostazione precedente:
+
+@lilypond[quote,verbatim,relative=2]
+\override NoteHead.color = #red c4
+\override NoteHead.color = #green d
+\revert NoteHead.color e2
+\override NoteHead.color = #red c4
+\temporary\override NoteHead.color = #green d
+\revert NoteHead.color e
+\revert NoteHead.color c
+@end lilypond
+
+Questo è utile principalmente per scrivere funzioni musicali che
+hanno bisogno di modificare alcune proprietà solo per la durata
+della funzione.
+
+@item
+@code{\tag}, @code{\removeWithTag} e @code{\keepWithTag} possono
+ora accettare una lista di simboli invece di un solo simbolo
+per contrassegnare, togliere o mantenere la musica usando un
+qualsiasi numero di etichette (tag).  Ciò è importante specialmente
+per @code{\keepWithTag} dato che non si può ottenere lo stesso
+risultato usando consecutivamente molteplici comandi @code{\keepWithTag}.
+
+@item
+L'opzione @samp{-d old-relative} è stata tolta.  Non più veramente
+accessibile dalla linea di comando, veniva usata soltanto per
+interpretare @code{\relative} nei file LilyPond convertiti
+automaticamente dalle versioni@tie{}1.8 o precedenti.  Non è chiaro
+quanto di questo fosse ancora realmente funzionante.
+
+@item
+Il significato di @code{instrumentTransposition} è  stato rovesciato.
+Dopo
+@example
+\set instrumentTransposition = #@{ b #@}
+@end example
+un @code{c'} ora suona come un @code{b}.  Precedentemente, sarebbe
+stato l'esatto contrario.  Questo e il cambiamento seguente dovrebbero
+rendere più facile il lavoro con gli strumenti traspositori.
+
+@item
+La musica generata dai comandi @code{\set} e @code{\override} non è
+più influenzata da @code{\transpose}.  La conseguenza principale
+è che @code{\transpose} trasporrà l'intonazione reale e quella
+a stampa della stessa quantità anche quando la musica trasposta
+contiene @code{\transposition}.  Precedentemente
+@example
+\transpose c' f' \transposition bes'
+@end example
+era equivalente a @code{\transposition f'}.  Ora resta equivalente
+a @code{\transposition bes'}.
+
+@item
+Quando fa dei controlli per le collisioni, LilyPond non considera
+più gli oggetti come rettangoli.  Invece approssima la forma
+reale degli oggetti usando un approccio simile ai numeri interi.
+Questo produce generalmente un posizionamento degli oggetti e dei
+sistemi più uniforme e compresso:
+
+@lilypond[relative=1]
+#(ly:set-option 'debug-skylines #t)
+\dynamicUp
+c'4\f a4\f d\f( f)
+a,4\< c c c\!
+d4-.\downbow a4^"r'venu..." c \tempo "T1" e
+@end lilypond
+
+Precedentemente, il frammento precedente appariva così:
+
+@lilypond[relative=1]
+#(ly:set-option 'debug-skylines #t)
+\override Hairpin #'vertical-skylines = #'()
+\override DynamicText #'vertical-skylines = #'()
+\override TextScript #'vertical-skylines = #'()
+\override Score.MetronomeMark #'vertical-skylines = #'()
+\override Staff.Clef #'vertical-skylines = #'()
+\dynamicUp
+c'4\f a4\f d\f( f)
+a,4\< c c c\!
+d4-.\downbow a4^"r'venu..." c \tempo "T1" e
+@end lilypond
+
+Gli oggetti interessati comprendono @code{Accidentals}, @code{Beams}, @code{Clefs},
+@code{Dynamics}, @code{FiguredBass}, @code{Flags}, @code{Glissandos},
+@code{Lyrics}, @code{MetronomeMarks}, @code{OttavaBrackets},
+@code{Pedals}, @code{RehearsalMarks}, @code{Rests}, @code{Scripts},
+@code{TextScripts}, @code{Ties}, @code{Tuplets} e @code{VoltaBrackets}.
+
+@item
+I gruppi irregolari sono ora creati col comando @code{\tuplet}, che prende
+come argomento una frazione @code{@var{t}/@var{n}} per specificare che @var{t}
+note sono suonate nel tempo solitamente concesso a @var{n} note. Un
+comando @code{\tuplet} può creare vari gruppi irregolari se la loro
+durata è inserita dopo la frazione.
+@lilypond[quote,verbatim,relative=2]
+\tuplet 3/2 { c8 d e } \tuplet 3/2 { f e d } c2
+\tuplet 3/2 4 { c8 d e f e d } c2
+@end lilypond
+Il comando @code{\times} con la sua frazione invertita
+@code{@var{n}/@var{t}} è ancora disponibile.
+
+@item
+Vengono introdotti due nuovi comandi markup: @code{\draw-dashed-line} e
+@code{\draw-dotted-line}.
+
+@noindent
+La linea tratteggiata (dashed-line) si estende per l'intera lunghezza data da @var{dest}, se
+@code{full-length} è impostato su @code{#t} (predefinito) senza alcuno
+spazio all'inizio o alla fine. @code{off} viene poi modificato per entrarci.
+Per insistere sui valori assegnati (o predefiniti) di @code{on}, @code{off} usare
+@code{\override #'(full-length . #f)}.  Sono possibili anche le impostazioni
+manuali per @code{on}, @code{off} e @code{phase}.
+
+@noindent
+La linea puntata (dotted-line) si estende sempre per l'intera lunghezza data da @var{dest},
+senza alcun spazio all'inizio o alla fine.  Sono possibili le impostazioni manuali
+per @code{off} per definire uno spazio più grande o più piccolo tra i punti.
+Il valore assegnato (o predefinito) di @code{off} verrà modificato per riempire
+la lunghezza della linea.
+
+@lilypond[verbatim,quote]
+\markup {
+  \draw-dashed-line #'(5.1 . 2.3)
+  \override #'(on . 0.3)
+  \override #'(off . 0.5)
+  \draw-dashed-line #'(5.1 . 2.3)
+  \draw-dotted-line #'(5.1 . 2.3)
+  \override #'(thickness . 2)
+  \override #'(off . 0.2)
+  \draw-dotted-line #'(5.1 . 2.3)
+}
+@end lilypond
+
+@item
+A partire dalla versione@tie{}2.17.10, i messaggi di errore e gli
+@acronym{URI} @code{textedit} usati per la funzionalità punta-e-clicca
+specificano numeri di colonna che iniziano con@tie{}1 invece che
+con@tie{}0.  L'offset di byte (anch'esso parte degli @acronym{URI}
+@code{textedit}) inizia ancora a@tie{}0.
+
+@item
+Il comando @code{\clef} supporta la trasposizione:
+@lilypond[verbatim,quote,relative=1]
+\clef "treble_(8)"
+c2 c
+\clef "bass^[15]"
+c2 c
+@end lilypond
+
+@item
+La sintassi LilyPond delle parole separate da punto @code{Voice.Accidental}
+è stata resa intercambiabile con @code{#'(Voice Accidental)}, una lista
+Scheme di simboli.  Una delle conseguenze è che codice come
+@example
+\override Voice.TextSpanner #'(bound-details left text) = "rit."
+@end example
+equivale ora a
+@example
+\override Voice.TextSpanner bound-details.left.text = "rit."
+@end example
+o anche a
+@example
+\override #'(Voice TextSpanner) bound-details.left.text = "rit."
+@end example
+
+@item
+Non è più necessario specificare il percorso del grob e della proprietà
+del grob in due argomenti separati per comandi come @samp{\override} e
+@code{\revert}, rendendo possibile la sintassi
+@example
+\override Voice.TextSpanner.bound-details.left.text = "rit."
+@end example
+Dato che funzioni musicali complementari come @samp{\overrideProperty}
+non possono supportare forme con e senza spazio di separazione allo
+stesso tempo, l'uso del percorso unico separato da punti è la forma
+preferita.  Specificare separatamente il percorso del grob e quello
+della sua proprietà, attualmente ancora supportato con @samp{\override} e
+@samp{\revert} per ragioni di compatibilità, è deprecato.
+
+@item
+Dal momento che le parole ora vengono accettate come argomenti
+di funzioni di simbolo,  le interfacce di @samp{\accidentalStyle},
+@samp{\alterBroken}, @samp{\footnote} e @samp{\tweak} sono state
+ridefinite quando erano presenti degli argomenti opzionali di
+simbolo.  Controllare la documentazione di ciascuna funzione
+musicale per conoscere i dettagli.
+
+@item
+Vari comandi ora accettano liste di simboli (inseriti opportunamente
+come parole separate da punti) per vari tipi di argomenti. Questi
+comprendono @samp{\accidentalStyle}, @samp{\alterBroken},
+@samp{\footnote}, @samp{\hide}, @samp{\omit},
+@samp{\overrideProperty}, @samp{\shape} e @samp{\tweak}.
+
+@item
+L'interfaccia utente della stanghetta è cambiata. I glifi della battuta
+ora rispecchiano l'aspetto della stanghetta, quindi un segno di ripetizione
+posto a sinistra deve essere inserito con @code{.|:}. Il comando
+@code{\defineBarLine} offre un modo semplice per definire ulteriori
+stili per le stanghette.
+
+@item
+Le alterazioni nell'armatura di chiave possono essere stampate in
+ottave diverse dalle loro posizioni tradizionali, oppure in ottave
+multiple.
+@lilypond[quote,relative=0]
+\override Staff.KeySignature #'flat-positions = #'((-5 . 5))
+\override Staff.KeyCancellation #'flat-positions = #'((-5 . 5))
+\clef bass \key es \major es g bes d
+\clef treble \bar "||" \key es \major es g bes d
+\override Staff.KeySignature #'sharp-positions = #'(2)
+\bar "||" \key d \major b fis b2
+@end lilypond
+
+@end itemize
+
+@ifhtml
+Per i cambiamenti precedenti, vai su
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/},
+@uref{http://lilypond.org/doc/v2.14/Documentation/changes/},
+o @uref{../,vai indietro} all'indice della documentazione.
+
+
+@end ifhtml
+
+@bye
diff --git a/Documentation/it/included/GNUmakefile b/Documentation/it/included/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 226642f581fe96417cb6720d05e8de5ecb3819c0..999c8f5eab529ee6292afc8424e226124527f74f 100644 (file)
@@ -2,7 +2,7 @@
 @c This file is part of web/download.itexi and
 @c learning/tutorial.itely
 @ignore
-    Translation of GIT committish: 66194168b6d61bee8aac10552f029817eb41d835
+    Translation of GIT committish: 63f65db72ca60bb87a6515a4f20a172c4a2897dc
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -27,7 +27,7 @@ Clicca due volte su @command{LilyPond.app}, si aprirà un file di esempio.
 @sourceimage{Learning_Macos_welcome,,,}
 
 Dai menu in cima a sinistra dello schermo seleziona
-@w{@code{File > Save}}.
+@w{@code{File > Salva}}.
 
 @sourceimage{Learning_Macos_Save_menu,,,}
 
@@ -93,82 +93,77 @@ la documentazione di quei programmi.}
 
 @subsubheading Passo 1. Crea il tuo file @file{.ly}
 
-Clicca due volte sull'icona di LilyPond sulla scrivania, si aprirà un file di esempio.
+Clicca due volte sull'icona di LilyPond sulla scrivania e si aprirà
+un file di esempio.
 
-@sourceimage{Learning_Win7_Welcome_File_Whole,,,}
+@sourceimage{LilyPad,,,}
 
 Dai menu che appaiono in cima al file di esempio seleziona
-@w{@code{File > Save as}}.  Non usare @w{@code{File > Save}}
+@w{@code{File > Salva come}}.  Non usare @w{@code{File > Salva}}
 per il file di esempio perché non funzionerà finché non gli darai
 un nome di file valido per LilyPond.
 
-@sourceimage{Learning_Win7_Save_Menu,,,}
+@sourceimage{FileSave,,,}
 
 Scegli un nome per il tuo file, ad esempio @file{test.ly}.
 
-@sourceimage{Learning_Win7_Save_File_With_Name,,,}
+@sourceimage{SaveAs,,,}
 
 
-@subsubheading Passo 2a. Compila (con drag-and-drop)
+@subsubheading Passo 2. Compila
 
-A seconda di quel che preferisci, per compilare il file puoi:
+Per trasformare il file LilyPond in una partitura devi compilarlo.  Ci sono
+vari modi per farlo: il trascina e rilascia (drag and drop), il clic destro,
+il doppio clic o la linea di comando (nel riquadro del terminale DOS).  Vediamo
+intanto i primi tre.
 
-Trascinare e rilasciare (drag-and-drop) il file direttamente sull'icona di LilyPond.
+1. Trascinare e rilasciare il file sull'icona LilyPond che si trova nel desktop.
 
-@sourceimage{Learning_Win7_Open_Dragndrop,,,}
+@sourceimage{DragDrop,,,}
 
-Cliccare col tasto destro sul file e dal menu contestuale a comparsa scegliere
-@w{@code{Open with > LilyPond}}.
+Sembrerà che non stia accadendo niente, ma dopo pochi secondi dovresti
+vedere due nuovi file sul desktop: @file{test.log} e @file{test.pdf}.
 
-@sourceimage{Learning_Win7_Open_Context_Menu,,,}
+2. Cliccare col tasto destro sul file e dal menu contestuale a comparsa scegliere
+@w{@code{Generate PDF}}.
 
+@sourceimage{GenPDF,,,}
 
-@subsubheading Passo 2b. Compilare (con doppio clic)
 
-O semplicemente clicca due volte su @file{test.ly}.
+3. O semplicemente cliccare due volte su @file{test.ly}.
 
 
 @subsubheading Passo 3. Visualizza l'output
 
-Durante la compilazione del file @file{test.ly}, una finestra dei comandi
-si aprirà per breve tempo e poi si chiuderà.  Nel corso di questo processo
-verranno creati tre ulteriori file.
+@file{test.pdf} contiene il file @file{test.ly} compilato.  Cliccalo due
+volte e si dovrebbe aprire in un visualizzatore PDF:
 
-@sourceimage{Learning_Win7_All_Files_Created,,,}
-
-Il file PDF contiene il file @file{test.ly} compilato.
-
-@sourceimage{Learning_Win7_Pdf_Output,,,}
+@sourceimage{PDFRead,,,}
 
 
 @subsubheading Altri comandi
 
-Per creare un nuovo file, per prima cosa seleziona @w{@code{File > New}} se
-hai aperto un file creato in precedenza.
-
-@sourceimage{Learning_Win7_New_Menu,,,}
+Per creare un nuovo file, per prima cosa seleziona @w{@code{File > Nuovo}} se
+hai aperto un file creato in precedenza oppure @w{@code{File > Apri}}
+per aprire e modificare i file che hai salvato prima.  Puoi modificare
+un file anche facendo un clic destro e selezionando @w{@code{Edit Source}}.
 
-@noindent
-oppure @w{@code{File > Open}} per aprire e modificare i file che hai
-salvato prima.
-
-@sourceimage{Learning_Win7_Open_Menu,,,}
+@sourceimage{EditFile,,,}
 
-Devi salvare qualsiasi nuovo modifica prima di compilare.  Se il file
-PDF non viene creato, controlla se ci sono degli errori nel file di log che
-sarà stato creato durante il tentativo di compilazione.
+Devi salvare qualsiasi nuova modifica prima di compilare.  Se il file
+PDF non viene creato o l'output non è quello che ti aspetti, controlla
+se ci sono degli errori nel file di log che sarà stato creato durante
+il tentativo di compilazione.
 
-@sourceimage{Learning_Win7_Log_File,,,}
+@sourceimage{BadLog,,,}
 
 Questo file di log viene sovrascritto ogni volta che compili il file LilyPond.
 
-Il file PS viene usato da LilyPond per creare il file PDF e può essere
-ignorato.  Anch'esso viene sovrascritto ogni volta che compili il file.
-
 Se visualizzi il file in un lettore PDF, devi chiudere il PDF se desideri
-fare una nuova compilazione, perché potrebbe non riuscire a creare il
+provare una nuova compilazione, perché potrebbe non riuscire a creare il
 nuovo file PDF mentre è ancora aperto per la visualizzazione.
 
+@sourceimage{BadLog2,,,}
 
 @end macro
 
@@ -189,7 +184,7 @@ Crea un file di testo chiamato @file{test.ly} e scrivi:
 @example
 \\version "@w{@versionStable{}}"
 @{
-  c' e' g' e'
+@ @ c' e' g' e'
 @}
 @end example
 
index 5f51c3846b28e5e25b6f71215c4f4ddd63a6ff7d..c23565ce4e62bc553dba4b7d609a3f046e795f09 100644 (file)
@@ -3,7 +3,7 @@
 @c contributor/introduction.itely
 
 @ignore
-    Translation of GIT committish: 4c7bdf42ee240fdbb3c3dab2b1c201eae04253fa
+    Translation of GIT committish: f6443f01a56112f080b8d2e7e646007397bdf6ec
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -109,7 +109,7 @@ ai Frogs e leggere @rcontribnamed{Programming work,Lavori di programmazione}.
 @macro helpusProjects
 @subheading Progetti
 
-@subsubheading Frogs
+@subsubheading Frog
 
 Sito web e mailing list:
 
@@ -117,13 +117,13 @@ Sito web e mailing list:
 @uref{http://frogs.lilynet.net}
 @end example
 
-I Frogs sono comuni utenti LilyPond che hanno scelto di impegnarsi
+I Frog sono comuni utenti LilyPond che hanno scelto di impegnarsi
 nello sviluppo del loro software preferito.  Correggere i bug,
 implementare nuove funzionalità, documentare il codice sorgente: c'è
 molto da fare.  Ma soprattutto si tratta di un'occasione per tutti
 per acquisire maggiori conoscenze su LilyPond, il Software Libero e
-la programmazione... e per divertirsi.  Se uno di questi punti
-ti incuriosisce, allora il monito è: @emph{Join the Frogs!}
+la programmazione@dots{} e per divertirsi.  Se uno di questi punti
+ti incuriosisce, allora il monito è: @emph{Unisciti ai Frog!}
 
 
 
index 6b33072ee4cb80d334ae80c2c5f7baa1c5ad4535..c47302550fd46c51330cd0713fa238c2d4795bd2 100644 (file)
@@ -40,7 +40,7 @@ Copyright @copyright{} 1999--2012 by the authors.
 @c Translators: Federico Bruni
 @c Translation checkers: Luca Rossetto Casel
 
-@lilyTitlePage{Learning Manual}
+@lilyTitlePage{Manuale di apprendimento}
 
 @c TOC -- non-tex
 @ifnottex
diff --git a/Documentation/it/learning/GNUmakefile b/Documentation/it/learning/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 572adcef52b80fd267f139d9f0f87ba936276864..f7b7fa20db3bc40bd0fb46410378602238043221 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 45dd19546e9b75b3e1e977732f0962f35dd3290e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -9,7 +9,7 @@
 @end ignore
 
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @ignore
 Tutorial guidelines:  (different from policy.txt!)
@@ -53,17 +53,40 @@ Questa sezione presenta la notazione comunemente usata per una singola voce su
 un solo pentagramma.
 
 @menu
-* Controlli di battuta::
+* Stanghette e controlli di battuta::
 * Alterazioni e armature di chiave::
 * Legature di valore e di portamento::
-* Articolazione e dinamica::
+* Articolazione e dinamiche::
 * Aggiungere il testo::
 * Code automatiche e manuali::
 * Comandi di tempo avanzati::
 @end menu
 
+@node Stanghette e controlli di battuta
+@subsection Stanghette e controlli di battuta
+@translationof Bar lines and bar checks
+
+@menu
+* Stanghette::
+* Controlli di battuta::
+@end menu
+
+@node Stanghette
+@unnumberedsubsubsec Stanghette
+@translationof Bar lines
+
+Le stanghette singole vengono aggiunte automaticamente, quindi non occorre
+aggiungerle manualmente.  Si possono inserire altri tipi di stanghette
+col comando @code{\bar}, per esempio @code{\bar "||"} per una stanghetta
+doppia, o @code{\bar "|."} per una stanghetta finale.  La lista completa
+delle stanghette si trova in @ruser{Stanghette}.
+
+@lilypond[verbatim,quote,relative=2]
+g1 e1 \bar "||" c2. c'4 \bar "|."
+@end lilypond
+
 @node Controlli di battuta
-@subsection Controlli di battuta
+@unnumberedsubsubsec Controlli di battuta
 @translationof Bar checks
 
 I @emph{controlli di battuta}, pur se non strettamente necessari, dovrebbero
@@ -80,17 +103,25 @@ g1 | e1 | c2. c'4 | g4 c g e | c4 r r2 |
 
 @seealso
 Guida alla notazione:
-@ruser{Bar and bar number checks}.
+@ruser{Controlli di battuta e del numero di battuta}.
 
 @node Alterazioni e armature di chiave
 @subsection Alterazioni e armature di chiave
 @translationof Accidentals and key signatures
 
+@menu
+* Alterazioni::
+* Armature di chiave::
+* Attenzione armature di chiave e altezze::
+@end menu
+
 @warning{I nuovi utenti sono spesso confusi riguardo a questi concetti -- leggi
 il messaggio di avviso in fondo a questa pagina, soprattutto se non hai
 una buona conoscenza della teoria musicale!}
 
-@subheading Alterazioni
+@node Alterazioni
+@unnumberedsubsubsec Alterazioni
+@translationof Accidentals
 
 @cindex alterazioni, accidenti
 @cindex alterazioni e armature di chiave
@@ -116,14 +147,16 @@ immaginare, un @notation{doppio diesis} o un @notation{doppio bemolle}
 si ottengono aggiungendo @code{isis} o @code{eses}.  Questa sintassi
 deriva dalle convenzioni per i nomi delle note presenti nelle lingue
 nordiche e germaniche, come il tedesco e l'olandese.  Per usare altri
-nomi per le @notation{alterazioni}, si veda @ruser{Note names in other languages}.
+nomi per le @notation{alterazioni}, si veda @ruser{Nomi delle note in altre lingue}.
 
 @lilypond[verbatim,quote,relative=2]
 cis4 ees fisis, aeses
 @end lilypond
 
 @cindex armatura di chiave, impostare
-@subheading Armature di chiave
+@node Armature di chiave
+@unnumberedsubsubsec Armature di chiave
+@translationof Key signatures
 
 @cindex armatura di chiave
 @cindex maggiore
@@ -154,7 +187,9 @@ a1 |
 
 @smallspace
 
-@subheading Attenzione: armature di chiave e altezze
+@node Attenzione armature di chiave e altezze
+@unnumberedsubsubsec Attenzione: armature di chiave e altezze
+@translationof Warning key signatures and pitches
 
 Glossario musicale: @rglosnamed{accidental,alterazione},
 @rglosnamed{key signature,armatura di chiave}, @rglosnamed{pitch,altezza},
@@ -209,15 +244,15 @@ di lavoro in fase di scrittura, ma il vantaggio è che la
 @notation{trasposizione} è più semplice, e le alterazioni possono essere
 prodotte usando diverse convenzioni.  Per alcuni esempi che mostrano come
 sia possibile produrre delle alterazioni in base a regole diverse, si veda
-@ruser{Automatic accidentals}.
+@ruser{Alterazioni automatiche}.
 
 
 @seealso
 Guida alla notazione:
-@ruser{Note names in other languages},
-@ruser{Accidentals},
-@ruser{Automatic accidentals},
-@ruser{Key signature}.
+@ruser{Nomi delle note in altre lingue},
+@ruser{Alterazioni},
+@ruser{Alterazioni automatiche},
+@ruser{Armatura di chiave}.
 
 
 
@@ -234,8 +269,16 @@ Guida alla notazione:
 @funindex ( ... )
 @funindex \( ... \)
 
-@subheading Legature di valore
+@menu
+* Legature di valore::
+* Legature di portamento::
+* Legature di frase::
+* Attenzione legature di portamento vs legature di valore::
+@end menu
 
+@node Legature di valore
+@unnumberedsubsubsec Legature di valore
+@translationof Ties
 
 Glossario musicale: @rglosnamed{tie,legatura di valore}.
 
@@ -246,8 +289,9 @@ prima nota della legatura.
 g4~ g c2~ | c4~ c8 a~ a2 |
 @end lilypond
 
-@subheading Legature di portamento
-
+@node Legature di portamento
+@unnumberedsubsubsec Legature di portamento
+@translationof Slurs
 
 Glossario musicale: @rglosnamed{slur,legatura di portamento}.
 
@@ -259,7 +303,9 @@ nota iniziale e quella finale sono indicate rispettivamente con
 d4( c16) cis( d e c cis d) e( d4)
 @end lilypond
 
-@subheading Legature di frase
+@node Legature di frase
+@unnumberedsubsubsec Legature di frase
+@translationof Phrasing slurs
 
 Glossario musicale: @rglosnamed{slur,legatura di portamento},
 @rglosnamed{phrasing,legatura di frase}.
@@ -277,7 +323,9 @@ a8(\( ais b c) cis2 b'2 a4 cis,\)
 @smallspace
 
 @cindex legature di portamento vs. legature di valore
-@subheading Attenzione: legature di portamento vs. legature di valore
+@node Attenzione legature di portamento vs legature di valore
+@unnumberedsubsubsec Attenzione: legature di portamento vs. legature di valore
+@translationof Warnings slurs vs. ties
 
 Glossario musicale: @rglosnamed{articulation,articolazione},
 @rglosnamed{slur,legatura di portamento}, @rglosnamed{tie,legatura di valore}.
@@ -297,16 +345,24 @@ c4~( c8 d~ d4 e)
 
 @seealso
 Guida alla notazione:
-@ruser{Ties},
-@ruser{Slurs},
-@ruser{Phrasing slurs}.
+@ruser{Legature di valore},
+@ruser{Legature di portamento},
+@ruser{Legature di frase}.
 
 
-@node Articolazione e dinamica
-@subsection Articolazione e dinamica
+@node Articolazione e dinamiche
+@subsection Articolazione e dinamiche
 @translationof Articulation and dynamics
 
-@subheading Articolazioni
+@menu
+* Articolazioni::
+* Diteggiature::
+* Dinamiche::
+@end menu
+
+@node Articolazioni
+@unnumberedsubsubsec Articolazioni
+@translationof Articulations
 
 @cindex articolazione
 @cindex accento
@@ -318,11 +374,13 @@ Le @notation{articolazioni} di uso comune possono essere aggiunte a una nota
 con una lineetta @code{-} e un singolo carattere:
 
 @lilypond[verbatim,quote,relative=2]
-c4-^ c-+ c-- c-|
+c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
-@subheading Diteggiature
+@node Diteggiature
+@unnumberedsubsubsec Diteggiature
+@translationof Fingerings
 
 @cindex diteggiatura
 
@@ -349,9 +407,11 @@ meglio lasciare che sia LilyPond a determinare le direzioni delle articolazioni.
 c4_-^1 d^. f^4_2-> e^-_+
 @end lilypond
 
-@subheading Dinamica
+@node Dinamiche
+@unnumberedsubsubsec Dinamiche
+@translationof Dynamics
 
-@cindex dinamica
+@cindex dinamiche
 @cindex decrescendo
 @cindex crescendo
 
@@ -368,7 +428,7 @@ c4_-^1 d^. f^4_2-> e^-_+
 @funindex \!
 @funindex !
 
-Glossario musicale: @rglosnamed{dynamics,dinamica}, @rglos{crescendo},
+Glossario musicale: @rglosnamed{dynamics,dinamiche}, @rglos{crescendo},
 @rglos{decrescendo}.
 
 I segni di @notation{dinamica} si ottengono aggiungendo alla nota
@@ -391,9 +451,9 @@ c4\< c\ff\> c c\!
 
 @seealso
 Guida alla notazione:
-@ruser{Articulations and ornamentations},
+@ruser{Articolazioni e abbellimenti},
 @ruser{Fingering instructions},
-@ruser{Dynamics}.
+@ruser{Dinamiche}.
 
 
 @node Aggiungere il testo
@@ -478,15 +538,23 @@ a8 c b4 d8. c16 b4 |
 
 @seealso
 Guida alla notazione:
-@ruser{Automatic beams},
-@ruser{Manual beams}.
+@ruser{Travature automatiche},
+@ruser{Travature manuali}.
 
 
 @node Comandi di tempo avanzati
 @subsection Comandi di tempo avanzati
 @translationof Advanced rhythmic commands
 
-@subheading Battuta parziale
+@menu
+* Battuta parziale::
+* Gruppi irregolari::
+* Abbellimenti::
+@end menu
+
+@node Battuta parziale
+@unnumberedsubsubsec Battuta parziale
+@translationof Partial measure
 
 @cindex anacrusi
 @cindex battuta parziale
@@ -505,31 +573,36 @@ Un' @notation{anacrusi} può essere inserita con la parola chiave
 c2 d |
 @end lilypond
 
-@subheading Gruppi irregolari
+@node Gruppi irregolari
+@unnumberedsubsubsec Gruppi irregolari
+@translationof Tuplets
 
 @cindex gruppi irregolari
 @cindex terzine
 
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
 
 Glossario musicale: @rglosnamed{note value,durata},
 @rglosnamed{triplet,gruppo irregolare}.
 
 I @notation{gruppi irregolari} vengono preceduti dalla parola chiave
-@code{\times}.  Questa richiede due argomenti: una frazione e un frammento
-di musica.  La durata del frammento viene moltiplicata per la frazione.
-Le terzine fanno sì che le note occupino 2/3 della loro durata, quindi
-una @notation{terzina} ha 2/3 come frazione:
+@code{\tuplet}.  Questa richiede due argomenti: una frazione e un frammento
+di musica.  La frazione ha come numeratore il numero di note del
+gruppo irregolare e come denominatore il numero di note che normalmente
+occupa la stessa durata.  Per le terzine ci sono tre note invece di
+due, quindi una @notation{terzina} ha 3/2 come frazione:
 
 @lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
 @end lilypond
 
-@subheading Abbellimenti
+@node Abbellimenti
+@unnumberedsubsubsec Abbellimenti
+@translationof Grace notes
 
 @cindex abbellimenti
 @cindex acciaccatura
@@ -550,7 +623,7 @@ ma possono essere creati anche ponendo davanti a un'espressione
 musicale le parole chiave @code{\appoggiatura} o @code{\acciaccatura}:
 
 @lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
 c2 \appoggiatura b16 c2 |
 c2 \acciaccatura b16 c2 |
 @end lilypond
@@ -558,9 +631,9 @@ c2 \acciaccatura b16 c2 |
 
 @seealso
 Guida alla notazione:
-@ruser{Grace notes},
-@ruser{Tuplets},
-@ruser{Upbeats}.
+@ruser{Abbellimenti},
+@ruser{Gruppi irregolari},
+@ruser{Anacrusi}.
 
 
 @node Note simultanee
@@ -615,7 +688,15 @@ precedente). Il risultato è un'altra espressione musicale:
 { { a4 g } f4 g }
 @end lilypond
 
-@subheading Analogia: le espressioni matematiche
+@menu
+* Analogia espressioni matematiche::
+* Espressioni musicali simultanee righi multipli::
+* Espressioni musicali simultanee rigo singolo::
+@end menu
+
+@node Analogia espressioni matematiche
+@unnumberedsubsubsec Analogia: le espressioni matematiche
+@translationof Analogy mathematic expressions
 
 Questo meccanismo è analogo a quello delle formule matematiche: una grande formula
 può essere creata creando piccole formule.  Tali formule sono chiamate
@@ -641,7 +722,9 @@ annidate a qualsivoglia grado di profondità, e questo è indispensabile per
 musica complessa come le partiture polifoniche.
 
 
-@subheading Espressioni musicali simultanee: righi multipli
+@node Espressioni musicali simultanee righi multipli
+@unnumberedsubsubsec Espressioni musicali simultanee: righi multipli
+@translationof Simultaneous music expressions multiple staves
 
 @cindex righi multipli
 @cindex multipli, righi
@@ -684,12 +767,13 @@ quantità di spazi.  LilyPond non si preoccupa di quanto spazio c'è
 all'inizio di una linea, tuttavia indentare il codice di LilyPond in
 questo modo lo rende molto più semplice da leggere per l'essere umano.
 
-@warning{ogni nota  è relativa alla nota precedente
-nell'input, e non è relativa al @code{c''} nel comando
-@code{@bs{}relative} iniziale.}
+@warning{ogni nota  è relativa alla nota precedente nell'input, e solo la
+prima è relativa al @code{c''} nel comando @code{@bs{}relative} iniziale.}
 
 
-@subheading Espressioni musicali simultanee: rigo singolo
+@node Espressioni musicali simultanee rigo singolo
+@unnumberedsubsubsec Espressioni musicali simultanee: rigo singolo
+@translationof Simultaneous music expressions single staff
 
 Per determinare il numero di pentagrammi in un brano, LilyPond guarda
 l'inizio della prima espressione.  Se c'è una nota singola, ci sarà
@@ -833,7 +917,7 @@ delle linee della battuta.
 @seealso
 Guida alla notazione:
 @ruser{Keyboard and other multi-staff instruments},
-@ruser{Displaying staves}.
+@ruser{Aspetto del rigo}.
 
 
 @node Combinare le note negli accordi
@@ -876,7 +960,7 @@ r4 <c e g>8.\p <c f a>16( <c e g>4-. <c f a>) |
 
 @seealso
 Guida alla notazione:
-@ruser{Chorded notes}.
+@ruser{Note in un accordo}.
 
 @node Polifonia su un singolo rigo
 @subsection Polifonia su un singolo rigo
@@ -904,7 +988,7 @@ Manuale di Apprendimento:
 @ref{Le voci contengono la musica}.
 
 Guida alla notazione:
-@ruser{Simultaneous notes}.
+@ruser{Note simultanee}.
 
 @node Canzoni
 @section Canzoni
@@ -959,12 +1043,8 @@ separando ogni sillaba con uno spazio.
 >>
 @end lilypond
 
-@warning{È fondamentale che l'ultima sillaba sia separata dalla parentesi
-graffa di chiusura con uno spazio o una nuova linea, altrimenti si presumerà
-che sia parte della sillaba, e questo causerà un errore poco
-chiaro, vedi @rprogram{Apparent error in ../ly/init.ly}.}
 
-Si notino le doppie parentesi ad angolo @w{@code{<< ... >>}} che circondano
+Si notino le doppie parentesi ad angolo @w{@code{<<@dots{}>>}} che circondano
 l'intero brano per indicare che la musica e il testo devono trovarsi
 in simultanea.
 
@@ -1277,7 +1357,7 @@ un'altra variabile successiva, dando la possibilità di accorciare l'input se
 una sezione della musica viene ripetuta molte volte.
 
 @lilypond[verbatim,quote]
-tripletA = \times 2/3 { c,8 e g }
+tripletA = \tuplet 3/2 { c,8 e g }
 barA = { \tripletA \tripletA \tripletA \tripletA }
 
 \relative c'' {
@@ -1354,10 +1434,11 @@ sui titoli in @ruser{Creating titles headers and footers}.
 @cindex nomi assoluti delle note
 
 Finora abbiamo sempre usato @code{\relative} per definire le altezze.
-Questo è il modo più semplice per inserire gran parte della musica, ma esiste
-anche un altro modo per definire le altezze: il modo assoluto.
+Questo è di  solito il modo più veloce per inserire gran parte della musica.
+Se non viene usato @code{\relative}, le altezze vengono interpretate in
+modo assoluto.
 
-Se si omette @code{\relative}, LilyPond tratta tutte le altezze come
+In questa modalità, LilyPond tratta tutte le altezze come
 valori assoluti.  Un @code{c'} si riferirà sempre al Do centrale, un
 @code{b} si riferirà sempre alla nota che si trova un semitono sotto il
 Do centrale, e un @code{g,} indicherà sempre la nota sull'ultima riga
@@ -1421,7 +1502,26 @@ trovare.
 
 Tuttavia, il modo assoluto è utile per la musica che fa uso di ampi
 intervalli, e lo è ancora di più per i file LilyPond generati dal
-computer.
+computer.  Quando si tagliano e si incollano frammenti della melodia,
+il modo assoluto preserva l'ottava originale.
+
+Talvolta la musica è organizzata in modi più complessi.  Se si usa
+@code{\relative} all'interno di un altro @code{\relative}, ciascuna sezione
+@code{\relative} è indipendente:
+
+@lilypond[verbatim,quote]
+\relative c { c'4 \relative c'' { f g } c }
+@end lilypond
+
+@funindex \absolute
+Se si usa la modalità assoluta all'interno di quella relativa, è necessario
+contrassegnare esplicitamente la musica assoluta con @code{\absolute} per
+impedire che diventi parte della musica relativa:
+
+@lilypond[verbatim,quote]
+\relative c { c'4 \absolute { f'' g'' } c }
+@end lilypond
+
 
 
 
@@ -1433,7 +1533,7 @@ Dopo aver finito di leggere la guida, probabilmente dovresti cercare
 di scrivere uno o due brani.  Puoi iniziare aggiungendo delle note a uno
 dei @ref{Templates}.  Se necessiti di una qualche notazione che non è
 stata coperta nel tutorial, dai un'occhiata alla Guida alla notazione,
-a cominciare da @ruser{Musical notation}.  Se vuoi scrivere per un gruppo
+a cominciare da @ruser{Notazione musicale}.  Se vuoi scrivere per un gruppo
 di strumenti che non è incluso nei template, dai un'occhiata a
 @ref{Extending the templates}.
 
@@ -1456,4 +1556,3 @@ Se non lo hai già fatto, @emph{ti consigliamo} di leggere
 ed è quindi utile per i nuovi utenti, che spesso non sanno dove cercare
 aiuto.  Se dedichi cinque  minuti all'attenta lettura di quella sezione,
 potresti risparmiarti ore di frustrazione sprecate a guardare in posti sbagliati!
-
index 60d80692b13109768df9807c84cde4ce9ae3fbfc..8069970814863d33b2aeac040379723070c5baa8 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 
 @ignore
-    Translation of GIT committish: 6da27f9b294c385ff8fc75876e152d67f0b4794e
+    Translation of GIT committish: 11cf358d3e89f42616c4361fc3203add5662cf4e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.29"
 
 @node Concetti fondamentali
 @chapter Concetti fondamentali
@@ -60,7 +60,7 @@ Un esempio basilare di un file di input di LilyPond è
 \header @{ @}
 
 \score @{
-  @var{...espressione musicale composta...}  % tutta la musica va qui!
+  @var{ @dots{} espressione musicale composta @dots{} }  % tutta la musica va qui!
   \layout @{ @}
   \midi @{ @}
 @}
@@ -138,13 +138,13 @@ singola nota a una grande espressione composta come
 @example
 @{
   \new StaffGroup <<
-    @var{...inserisci qui l'intera opera di Wagner...}
+    @var{ @dots{} inserisci qui l'intera opera di Wagner @dots{} }
   >>
 @}
 @end example
 
 @noindent
-Tutto quanto è compreso in @code{@{ ... @}} costituisce un'unica
+Tutto quanto è compreso in @code{@{ @dots{} @}} costituisce un'unica
 espressione musicale.
 
 Come abbiamo detto prima, il blocco @code{\score} può contenere altri
@@ -216,7 +216,7 @@ Ogni blocco @code{\layout} influenza il blocco @code{\score} o
 che si trova dentro un blocco @code{\score} riguarda solo quel blocco
 @code{\score}, mentre un blocco @code{\layout} che si trova fuori da un
 blocco @code{\score} (e quindi in un blocco @code{\book}, esplicitamente
-o implicitamente) riguraderà ogni @code{\score} in quel @code{\book}.
+o implicitamente) riguarderà ogni @code{\score} in quel @code{\book}.
 
 Per maggiori dettagli si veda @ruser{Multiple scores in a book}.
 
@@ -281,7 +281,7 @@ Per capire cosa si intende per espressione musicale e per espressione
 musicale composta, potrebbe esserti utile ripassare il tutorial,
 @ref{Espressioni musicali}.  In quella sezione, abbiamo visto
 come costruire grandi espressioni musicali a partire da piccoli brani -- abbiamo
-iniziato con le note, poi gli accordi, etc.  Adesso inzieremo da una grande
+iniziato con le note, poi gli accordi, etc.  Adesso inizieremo da una grande
 espressione musicale e proseguiremo poi a spiegarne i dettagli. Per semplicità,
 nel nostro esempio useremo soltanto un canto e un pianoforte.  Per questa formazione
 non abbiamo bisogno di @code{StaffGroup}, che non fa altro che raggruppare un insieme
@@ -305,11 +305,11 @@ In questo esempio abbiamo dato dei nomi ai righi -- @qq{canto} e
 da coltivare, perché ti permette di vedere a colpo d'occhio a cosa serve
 ciascun rigo.
 
-Ricorda che si usano @code{<< ... >>} invece di @code{@{ ... @}} per indicare
+Ricorda che si usa @code{<< @dots{} >>} invece di @code{@{ @dots{} @}} per indicare
 la musica simultanea.  In questo modo la parte vocale e quella di pianoforte
-appaiono una sopra l'altra nello spartito.  Il costrutto @code{<< ... >>} non
+appaiono una sopra l'altra nello spartito.  Il costrutto @code{<< @dots{} >>} non
 sarebbe necessario per il rigo del cantante nell'esempio precedente se contenesse
-soltanto un'espressione musicale sequenziale, ma @code{<< ... >>} al posto delle
+soltanto un'espressione musicale sequenziale, ma @code{<< @dots{} >>} al posto delle
 parentesi è necessario se la musica sul rigo deve contenere due o più espressioni
 simultanee, ad esempio due voci simultanee, o una voce con del testo.  Vogliamo
 avere una voce con del testo, dunque ci servono le parentesi ad angolo.  Aggiungeremo
@@ -466,7 +466,7 @@ predefinita, che è in basso.
 Gli ossia vengono spesso scritti senza armatura di chiave e senza
 tempo, e solitamente hanno un font più piccolo.  Richiedono ulteriori
 comandi che non sono stati ancora presentati.  Si veda @ref{Size of objects},
-e @ruser{Ossia staves}.
+e @ruser{Righi ossia}.
 
 
 @node Sul non annidamento di parentesi e legature di valore
@@ -487,27 +487,27 @@ diversi tipi di parentesi e di costrutti in parentesi.
 @multitable @columnfractions .3 .7
 @headitem Tipo di parentesi
   @tab Funzione
-@item @code{@{ .. @}}
+@item @code{@{ @dots{} @}}
   @tab Racchiude un frammento di musica sequenziale
-@item @code{< .. >}
+@item @code{< @dots{} >}
   @tab Racchiude le note di un accordo
-@item @code{<< .. >>}
+@item @code{<< @dots{} >>}
   @tab Racchiude le espressioni musicali simultanee
-@item @code{( .. )}
+@item @code{( @dots{} )}
   @tab Contrassegna l'inizio e la fine di una legatura di portamento
-@item @code{\( .. \)}
+@item @code{\( @dots{} \)}
   @tab Contrassegna l'inizio e la fine di una legatura di frase
-@item @code{[ .. ]}
+@item @code{[ @dots{} ]}
   @tab Contrassegna l'inizio e la fine di una travatura impostata manualmente
 @end multitable
 
 A questi dovremmo aggiungere altri costrutti che generano linee tra
 e lungo le note: legature di valore (contrassegnate dal tilde, @code{~}),
-i gruppi irregolari scritti in questa forma @code{\times x/y @{..@}}, e
-gli abbellimenti, indicati con @code{\grace@{..@}}.
+i gruppi irregolari scritti in questa forma @code{\tuplet x/y @{ @dots{} @}}, e
+gli abbellimenti, indicati con @code{\grace@{ @dots{} @}}.
 
 Fuori da LilyPond, l'uso convenzionale delle parentesi esige che i diversi
-tipi siano annidati adeguatamente, in questo modo, @code{<< [ @{ ( .. )
+tipi siano annidati adeguatamente, in questo modo, @code{<< [ @{ ( @dots{} )
 @} ] >>}, dove le parentesi che chiudono si trovano esattamente
 nell'ordine opposto alle parentesi che aprono.  Questo @strong{è} un
 requisito per i tre tipi di parentesi descritti dal termine @q{Racchiude}
@@ -536,10 +536,10 @@ irregolari, e una legatura di frase che si estende fuori da un gruppo
 irregolare (linee 3 e 4).
 
 @lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
 @end lilypond
 
 
@@ -599,7 +599,7 @@ questo esempio di quattro accordi:
 @end lilypond
 
 Questa musica può essere espressa usando soltanto i simboli dell'accordo,
-ovvero le parentesi angolari, @code{< ... >}, e una singola voce è
+ovvero le parentesi angolari, @code{< @dots{} >}, e una singola voce è
 sufficiente.  Ma cosa accadrebbe se il Fa# fosse in realtà una nota di un
 ottavo seguita da un Sol di un ottavo, una nota di passaggio che porta al La?
 In questo caso abbiamo due note che iniziano nello stesso momento ma hanno
@@ -615,8 +615,8 @@ Vediamo come ottenerle nella sintassi di input di LilyPond.
 @funindex \\
 
 Il modo più semplice per inserire frammenti che utilizzino più di una voce
-su un rigo è scrivere ogni voce come una sequenza (con @code{@{...@}}),
-e poi combinarle in simultanea tramite le doppie parentesi angolari, @code{<<...>>}.
+su un rigo è scrivere ogni voce come una sequenza (con @code{@{ @dots{} @}}),
+e poi combinarle in simultanea tramite le doppie parentesi angolari, @code{<< @dots{} >>}.
 Per collocarli in voci distinte, i frammenti devono essere separati da un doppio
 backslash, @code{\\}.  Senza di esso, le note sarebbero inserite in un'unica
 voce, e questo normalmente causerebbe degli errori.  Questa tecnica è
@@ -690,7 +690,7 @@ legature di valore, dinamica, etc., è impostata correttamente.
 @end lilypond
 
 Tutte queste voci sono separate dalla voce principale che contiene le
-note e che si trova fuori dal costrutto @code{<< .. >>}, che chiameremo
+note e che si trova fuori dal costrutto @code{<< @dots{} >>}, che chiameremo
 il @emph{costrutto simultaneo}.  Legature di portamento e di valore
 possono connettere solo note che fanno parte della stessa voce, quindi
 le legature non possono entrare in un costrutto simultaneo o uscirne.  Viceversa,
@@ -749,7 +749,7 @@ nell'esempio) su croci magenta;  @code{\voiceNeutralStyle} (anch'esso
 non usato qui) riporta lo stile all'impostazione predefinita.
 Vedremo in seguito come l'utente possa creare comandi simili.
 Si veda @ref{Visibility and color of objects} e
-@ref{Using variables for tweaks}.
+@ref{Using variables for layout adjustments}.
 
 @cindex polifonia e modo relativo
 @cindex modo relativo e polifonia
@@ -775,13 +775,13 @@ voci sono ampiamente separate, consiste nel porre un comando @code{\relative}
 all'inizio di ogni voce:
 
 @example
-\relative c' @{ noteA ... @}
+\relative c' @{ noteA @dots{} @}
 <<
-  \relative c'' @{ < noteB noteC > ... @}
+  \relative c'' @{ < noteB noteC > @dots{} @}
 \\
-  \relative g' @{ noteD ... @}
+  \relative g' @{ noteD @dots{} @}
 >>
-\relative c' @{ noteE ... @}
+\relative c' @{ noteE @dots{} @}
 @end example
 
 Analizziamo infine le voci in un brano più complesso. Queste note sono
@@ -801,15 +801,15 @@ più complesse saranno spiegate tutte in sezioni successive.
   \\  % Voice two
     {
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No voice three
   \\  % Voice four
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -849,15 +849,15 @@ ignora quel che non capisci.
   \\  % Voice two
     { \voiceTwoStyle
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No Voice three (we want stems down)
   \\  % Voice four
     { \voiceThreeStyle
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -924,7 +924,7 @@ overlapping notation}.
 forcelle, etc.) non possono essere create @q{attraverso} le voci.}
 
 @seealso
-Guida alla notazione: @ruser{Multiple voices}.
+Guida alla notazione: @ruser{Più voci}.
 
 
 @node Definire esplicitamente le voci
@@ -1120,7 +1120,7 @@ come nel seguente esempio:
 >>
 @end lilypond
 
-@subsubheading Note columns
+@subsubheading Colonne di note
 
 @cindex colonna delle note
 @cindex collisioni di note
@@ -1167,7 +1167,7 @@ produrrà il messaggio di errore @qq{Too many clashing note columns}.
 
 
 @seealso
-Guida alla notazione: @ruser{Multiple voices}.
+Guida alla notazione: @ruser{Più voci}.
 
 
 @node Voci e musica vocale
@@ -1382,7 +1382,7 @@ una stanghetta deve essere sincronizzata lungo l'intera partitura.
 All'interno di LilyPond, queste regole e pezzi di informazione sono raggruppati
 nei @emph{Contesti}.  Abbiamo già presentato il contesto @code{Voice}.
 Altri contesti sono @code{Staff} e @code{Score}.  I contesti sono strutturati
-gerarchicicamente per riflettere la natura gerarchica di una partitura musicale.
+gerarchicamente per riflettere la natura gerarchica di una partitura musicale.
 Ad esempio: un contesto @code{Staff} può contenere molti contesti @code{Voice},
 e un contesto @code{Score} può contenere molti contesti @code{Staff}.
 
@@ -1425,7 +1425,7 @@ maiuscola: ad esempio, @code{GregorianTranscriptionStaff}.
 
 
 @seealso
-Guida alla notazione: @ruser{Contexts explained}.
+Guida alla notazione: @ruser{Contexts  explained}.
 
 
 @node Creare i contesti
@@ -1553,7 +1553,7 @@ nella sezione sul testo, si veda @ref{Voci e musica vocale}.
 
 
 @seealso
-Guida alla notazione: @ruser{Creating contexts}.
+Guida alla notazione: @ruser{Creating and referencing contexts}.
 
 
 @node Gli incisori
@@ -1611,8 +1611,7 @@ partire dal nome, o viceversa.
   @tab Incide le chiavi
 @item Completion_heads_engraver
   @tab Separa le note che attraversano le stanghette
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
   @tab Crea le forcelle e i testi relativi alla dinamica
 @item Forbid_line_break_engraver
   @tab Impedisce l'a capo se un elemento musicale è ancora attivo
@@ -1799,9 +1798,9 @@ e in questo modo si disattiva in tutti i righi:
 >>
 @end lilypond
 
-Un altro esempio: se la proprietà @code{clefOctavation} viene posta
+Un altro esempio: se la proprietà @code{clefTransposition} viene posta
 nel contesto @code{Score}, cambia immediatamente il valore
-dell'ottavazione in tutti i righi presenti e imposta un nuovo
+della trasposizione in tutti i righi presenti e imposta un nuovo
 valore predefinito che sarà applicato a tutti i righi.
 
 Il comando opposto, @code{\unset}, di fatto rimuove la proprietà
@@ -1849,7 +1848,7 @@ Il valore predefinito delle proprietà di contesto possono essere impostate
 anche nel momento in cui il contesto viene creato.  Talvolta questo è un
 modo più chiaro per specificare il valore della proprietà se questa deve
 rimanere fissa per la durata del contesto.  Un contesto creato col comando @code{\new}
-può essere immediatamente seguito da un blocco @code{\with @{ .. @}} dove
+può essere immediatamente seguito da un blocco @code{\with @{ @dots{} @}} dove
 vengono impostati i valori predefiniti della proprietà.  Ad esempio, se vogliamo
 eliminare la stampa del bequadro per l'estensione di un rigo possiamo scrivere:
 
@@ -2294,7 +2293,7 @@ simultanei.  Lo @code{\score} ora appare così:
 
 @noindent
 L'aspetto è un po' confuso; l'indentazione non è pulita.  Ma si
-può correggere facilmente.  Ecco il template completo per soprano
+può correggere facilmente.  Ecco il modello completo per soprano
 e violoncello.
 
 @lilypond[quote,verbatim,ragged-right,addversion]
@@ -2335,7 +2334,7 @@ musicaVioloncello = \relative c {
 
 @seealso
 I modelli da cui partire si trovano nell'appendice @q{Modelli},
-si veda @ref{Single staff}.
+si veda @ref{Single staff templates}.
 
 
 @node Partitura vocale a quattro parti SATB
@@ -2448,8 +2447,8 @@ lower = \relative c, {
 @end lilypond
 
 Nessun modello fornisce esattamente questo assetto.  Quello più simile
-è @q{Partitura vocale SATB e riduzione automatica per pianoforte} -- si veda @ref{Vocal
-ensembles} -- ma abbiamo bisogno di modificare l'assetto e aggiungere
+è @q{Partitura vocale SATB e riduzione automatica per pianoforte}, ma
+abbiamo bisogno di modificare l'assetto e aggiungere
 un accompagnamento per pianoforte che non sia derivato automaticamente dalle
 parti vocali.  Le variabili che si riferiscono alla musica e alle parole per
 le parti vocali vanno bene, ma dovremo aggiungere le variabili per la
@@ -2683,7 +2682,7 @@ lower = \relative c, {
 @subsection Scrivere una partitura da zero
 @translationof Building a score from scratch
 
-@cindex template, scrivere il tuo
+@cindex modello, scrivere il tuo
 @cindex esempio di scrittura di una partitura
 @cindex scrivere una partitura, esempio
 @cindex partitura, esempio di scrittura
@@ -2785,13 +2784,13 @@ quali errori genera.
 >>
 @end example
 
-Non è necessario usare il costrutto simultaneo @code{<< .. >>} per il rigo del
+Non è necessario usare il costrutto simultaneo @code{<< @dots{} >>} per il rigo del
 secondo manuale e per quello della pedaliera, poiché contengono solo una
 espressione musicale, ma non è male usarlo comunque; usare sempre le parentesi
 angolari dopo @code{\new Staff} è una buona abitudine da coltivare nel caso ci
 sia più di una voce.  Per le Voci, è vero l'opposto: queste devono essere
-seguite regolarmente da parentesi graffe @code{@{ .. @}} nel caso in cui la
-musica sia composta da diverse variabili che devono essere eseguite
+seguite regolarmente da parentesi graffe @code{@{ @dots{} @}} nel caso in cui
+la musica sia composta da diverse variabili che devono essere eseguite
 consecutivamente.
 
 Aggiungiamo questa struttura al blocco della partitura, e aggiustiamo
@@ -2884,8 +2883,7 @@ guardando la definizione del grob @code{VerticalAxisGroup}.  Il valore dell'
         @}
       >>  % fine del contesto ManualOne Staff
       \new Staff = "ManualTwo" \with @{
-        \override VerticalAxisGroup
-          #'staff-staff-spacing  #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       @} <<
         \keyTime
         \clef "bass"
@@ -2949,8 +2947,7 @@ PedalOrganMusic = \relative c {
         }
       >>  % end ManualOne Staff context
       \new Staff = "ManualTwo" \with {
-        \override VerticalAxisGroup
-          #'staff-staff-spacing #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       } <<
         \keyTime
         \clef "bass"
@@ -3017,7 +3014,7 @@ macro, o comandi definiti dall'utente) anche per le modifiche manuali:
 @lilypond[quote,verbatim,ragged-right]
 dolce = \markup { \italic \bold dolce }
 
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
 fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
@@ -3049,7 +3046,7 @@ soprattutto l'ultima linea.
 violin = \relative c'' @{
   \repeat volta 2 @{
     c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
-    \once \override TextScript #'padding = #5.0
+    \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d |
     c,4.\markup @{
       \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
@@ -3076,7 +3073,7 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = #padding
+     \once \override TextScript.padding = #padding
    #})
 
 \relative c''' {
index eb927b9e19498b39d5104da542e52a2ada5fdea5..adee443417c94c677c11b9637a38aaa0425c947d 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 67a345f965d169bc1acd23ff4160914fb2142f38
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -20,37 +20,51 @@ LilyPond e goderti dei belli spartiti!
 
 @c bad node name for ancient notation to avoid conflict
 @menu
-* Rigo singolo::
+* Modelli per rigo singolo::
 * Modelli per pianoforte::
-* Quartetto d'archi::
-* Gruppi vocali::
+* Modelli per quartetto d'archi::
+* Modelli per gruppi vocali::
 * Modelli per orchestra::
 * Modelli per notazione antica::
 * Altri modelli::
 @end menu
 
 
-@node Rigo singolo
-@appendixsec Rigo singolo
-@translationof Single staff
+@node Modelli per rigo singolo
+@appendixsec Modelli per rigo singolo
+@translationof Single staff templates
 
+@menu
+* Solo note::
+* Note e testo::
+* Note e accordi::
+* Note testo e accordi::
+@end menu
+
+@node Solo note
 @appendixsubsec Solo note
+@translationof Notes only
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
 {single-staff-template-with-only-notes.ly}
 
-
+@node Note e testo
 @appendixsubsec Note e testo
+@translationof Notes and lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
 {single-staff-template-with-notes-and-lyrics.ly}
 
+@node Note e accordi
 @appendixsubsec Note e accordi
+@translationof Notes and chords
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {single-staff-template-with-notes-and-chords.ly}
 
-@appendixsubsec Note, testo e accordi.
+@node Note testo e accordi
+@appendixsubsec Note, testo e accordi
+@translationof Notes lyrics and chords
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {single-staff-template-with-notes,-lyrics,-and-chords.ly}
@@ -60,72 +74,117 @@ LilyPond e goderti dei belli spartiti!
 @appendixsec Modelli per pianoforte
 @translationof Piano templates
 
+@menu
+* Solo pianoforte::
+* Pianoforte e melodia con testo::
+* Pianoforte con testo al centro::
+@end menu
+
+@node Solo pianoforte
 @appendixsubsec Solo pianoforte
+@translationof Solo piano
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-simple.ly}
 
+@node Pianoforte e melodia con testo
 @appendixsubsec Pianoforte e melodia con testo
+@translationof Piano and melody with lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-with-melody-and-lyrics.ly}
 
+@node Pianoforte con testo al centro
 @appendixsubsec Pianoforte con testo al centro
+@translationof Piano centered lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-with-centered-lyrics.ly}
 
 
-@node Quartetto d'archi
-@appendixsec Quartetto d'archi
-@translationof String quartet
+@node Modelli per quartetto d'archi
+@appendixsec Modelli per quartetto d'archi
+@translationof String quartet templates
+
+@menu
+* Quartetto d'archi semplice::
+* Parti di un quartetto d'archi::
+@end menu
 
+@node Quartetto d'archi semplice
 @appendixsubsec Quartetto d'archi semplice
+@translationof String quartet
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {string-quartet-template-simple.ly}
 
+@node Parti di un quartetto d'archi
 @appendixsubsec Parti di un quartetto d'archi
+@translationof String quartet parts
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {string-quartet-template-with-separate-parts.ly}
 
 
-@node Gruppi vocali
-@appendixsec Gruppi vocali
-@translationof Vocal ensembles
+@node Modelli per gruppi vocali
+@appendixsec Modelli per gruppi vocali
+@translationof Vocal ensembles templates
 
+@menu
+* Partitura vocale SATB::
+* Partitura vocale SATB e automatica riduzione per pianoforte::
+* SATB con contesti allineati::
+* SATB su quattro righi::
+* Strofa sola e ritornello a due parti::
+* Inni::
+* Salmi::
+@end menu
+
+@node Partitura vocale SATB
 @appendixsubsec Partitura vocale SATB
+@translationof SATB vocal score
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template.ly}
 
+@node Partitura vocale SATB e automatica riduzione per pianoforte
 @appendixsubsec Partitura vocale SATB e automatica riduzione per pianoforte
+@translationof SATB vocal score and automatic piano reduction
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-automatic-piano-reduction.ly}
 
+@node SATB con contesti allineati
 @appendixsubsec SATB con contesti allineati
+@translationof SATB with aligned contexts
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly}
 
+@node SATB su quattro righi
 @appendixsubsec SATB su quattro righi
+@translationof SATB on four staves
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {satb-choir-template---four-staves.ly}
 
+@node Strofa sola e ritornello a due parti
 @appendixsubsec Strofa sola e ritornello a due parti
+@translationof Solo verse and two-part refrain
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-verse-and-refrain.ly}
 
+@node Inni
 @appendixsubsec Inni
+@translationof Hymn tunes
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {hymn-template.ly}
 
+@node Salmi
 @appendixsubsec Salmi
+@translationof Psalms
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {anglican-psalm-template.ly}
@@ -135,23 +194,38 @@ LilyPond e goderti dei belli spartiti!
 @appendixsec Modelli per orchestra
 @translationof Orchestral templates
 
+@menu
+* Orchestra coro e pianoforte::
+@end menu
+
+@node Orchestra coro e pianoforte
 @appendixsubsec Orchestra, coro e pianoforte
+@translationof Orchestra choir and piano
+
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {orchestra,-choir-and-piano-template.ly}
 
 
-@c bad node name to avoid node name conflict
 @node Modelli per notazione antica
 @appendixsec Modelli per notazione antica
 @translationof Ancient notation templates
 
-@appendixsubsec Transcrizione di musica mensurale
+@menu
+* Trascrizione di musica mensurale::
+* Trascrizione di musica Gregoriana::
+@end menu
+
+@node Trascrizione di musica mensurale
+@appendixsubsec Trascrizione di musica mensurale
+@translationof Transcription of mensural music
 
 @c Line-width below is because of Issue 766.  If that's fixed, it can be removed.
 @lilypondfile[verbatim,quote,ragged-right,texidoc,line-width=140]
 {ancient-notation-template----modern-transcription-of-mensural-music.ly}
 
+@node Trascrizione di musica Gregoriana
 @appendixsubsec Trascrizione di musica Gregoriana
+@translationof Gregorian transcription template
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {ancient-notation-template----modern-transcription-of-gregorian-music.ly}
@@ -161,7 +235,13 @@ LilyPond e goderti dei belli spartiti!
 @appendixsec Altri modelli
 @translationof Other templates
 
+@menu
+* Combo jazz::
+@end menu
+
+@node Combo jazz
 @appendixsubsec Combo jazz
+@translationof Jazz combo
 
 @c Line-width below is because of Issue 766.  If that's fixed, it can be removed.
 @lilypondfile[verbatim,quote,ragged-right,texidoc,line-width=140]
index b7605c92965291f06faf1d4960d020d4381b1b17..bee60194a11a1daea4f9ec869824295422174c4b 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: d378daa101069ce6497292b0f4a7f6ce2e9b51f0
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -28,8 +28,6 @@ Questo capitolo fornisce un'introduzione di base all'uso di LilyPond.
 @section Compilare un file
 @translationof Compiling a file
 
-
-
 @menu
 * Inserire l'input::
 * MacOS X::
@@ -46,6 +44,10 @@ Questo capitolo fornisce un'introduzione di base all'uso di LilyPond.
 @cindex esempio, iniziale
 @cindex maiuscole, sensibile alle
 
+@menu
+* Generare l'output::
+@end menu
+
 @qq{Compilazione} è il termine usato per indicare l'elaborazione di un
 file di input in formato LilyPond per produrre uno o più file di output.  I
 file di output generalmente sono PDF (per la stampa e la visualizzazione),
@@ -84,7 +86,9 @@ produrrà un messaggio di errore.
 
 @smallspace
 
-@subheading Generare l'output
+@node Generare l'output
+@unnumberedsubsubsec Generare l'output
+@translationof Producing output
 
 @c TODO: move index entries
 @cindex PDF file
@@ -169,6 +173,16 @@ di aiutarti ad iniziare a scrivere i file di input.
 @cindex notazione semplice
 @cindex notazione, semplice
 
+@menu
+* Altezze::
+* Durate (ritmi)::
+* Pause::
+* Indicazione di tempo::
+* Indicazioni di tempo::
+* Chiave::
+* Tutto insieme::
+@end menu
+
 LilyPond aggiungerà automaticamente alcuni elementi della notazione.  Nell'esempio
 seguente, abbiamo specificato soltanto quattro note, ma LilyPond
 ha aggiunto una chiave, il tempo e le durate.
@@ -184,7 +198,9 @@ Questo comportamento può essere modificato, ma nella maggior parte dei
 casi questi valori sono utili.
 
 
-@subheading Altezze
+@node Altezze
+@unnumberedsubsubsec Altezze
+@translationof Pitches
 
 @cindex altezze
 @cindex modo relativo
@@ -292,7 +308,9 @@ Per cambiare una nota di due (o più!) ottave, si usano multipli di
 apici semplici @code{''} e non quelle a doppi apici @code{"}@tie{}!
 @c " - keeps quotes in order for context-sensitive editor -td
 
-@subheading Durate (ritmi)
+@node Durate (ritmi)
+@unnumberedsubsubsec Durate (ritmi)
+@translationof Duration (rhythms)
 
 @cindex durate della nota
 @cindex durate
@@ -336,7 +354,9 @@ esplicitamente (cioè con un numero).
 @end lilypond
 
 
-@subheading Pause
+@node Pause
+@unnumberedsubsubsec Pause
+@translationof Rests
 
 @cindex pausa
 @cindex notazione delle pause
@@ -354,7 +374,9 @@ Una @notation{pausa} viene inserita proprio come una nota ma col nome
 @end lilypond
 
 
-@subheading Indicazione di tempo
+@node Indicazione di tempo
+@unnumberedsubsubsec Indicazione di tempo
+@translationof Time signature
 
 @cindex tempo, indicazione di
 
@@ -376,7 +398,9 @@ Il @notation{tempo} si imposta con il comando @code{\time}:
 }
 @end lilypond
 
-@subheading Indicazioni di tempo
+@node Indicazioni di tempo
+@unnumberedsubsubsec Indicazioni di tempo
+@translationof Tempo marks
 
 @cindex indicazioni di tempo
 @cindex indicazioni metronomiche
@@ -405,7 +429,9 @@ impostano col comando @code{\tempo}:
 @end lilypond
 
 
-@subheading Chiave
+@node Chiave
+@unnumberedsubsubsec Chiave
+@translationof Clef
 
 @cindex chiave
 @cindex chiave di violino
@@ -434,7 +460,9 @@ La @notation{chiave} si imposta con il comando @code{\clef}:
 @end lilypond
 
 
-@subheading Tutto insieme
+@node Tutto insieme
+@unnumberedsubsubsec Tutto insieme
+@translationof All together
 
 Ecco un piccolo esempio che mostra tutti questi elementi insieme:
 
@@ -452,9 +480,9 @@ Ecco un piccolo esempio che mostra tutti questi elementi insieme:
 
 
 @seealso
-Guida alla notazione: @ruser{Writing pitches},
-@ruser{Writing rhythms}, @ruser{Writing rests},
-@ruser{Time signature}, @ruser{Clef}.
+Guida alla notazione: @ruser{Inserimento delle altezze},
+@ruser{Inserimento delle durate}, @ruser{Inserimento delle pause},
+@ruser{Indicazione di tempo}, @ruser{Chiave}.
 
 
 @node Lavorare sui file di input
@@ -754,10 +782,10 @@ ti imbatti in termini musicali che non conosci, cercali nel @rglosnamed{Top, Glo
 @item
 @strong{Prima di tentare di scrivere un pezzo musicale completo}: leggi
 i @ref{Concetti fondamentali} del Manuale di apprendimento.  Dopo puoi dare
-un'occhiata alle sezioni rilevanti della @rusernamed{Top, Notation reference}.
+un'occhiata alle sezioni rilevanti della @rusernamed{Top, Guida alla notazione}.
 
 @item
-@strong{Prima di cercare di cambiare l'output predefinito}: leggi il
+@strong{Prima di cercare di cambiare l'output predefinito}: leggi
 @ref{Tweaking output} del Manuale di apprendimento.
 
 @item
index 4e3c52ec117a941877beeeb8a44d62b080cd0948..da114bf58ee09e548424e08d01498da19b89679c 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 
 @ignore
-    Translation of GIT committish: 6da27f9b294c385ff8fc75876e152d67f0b4794e
+    Translation of GIT committish: ff7d82711b47d3d31f26e1e6fc012c4055a20059
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.20"
 
 @node Modifica dell'output
 @chapter Modifica dell'output
@@ -23,6 +23,7 @@ configurabile; praticamente si può modificare qualsiasi elemento dell'output.
 * Manuale del Funzionamento interno::
 * Aspetto degli oggetti::
 * Posizionamento degli oggetti::
+* Spaziatura verticale::
 * Collisioni tra oggetti::
 * Altre modifiche::
 @end menu
@@ -89,7 +90,7 @@ del contesto di quel rigo.  Analogalmente, ci sono oggetti che hanno
 le proprietà di tutti gli altri contesti, come  gli oggetti @code{Voice},
 gli oggetti @code{Score}, gli oggetti @code{Lyrics} e gli oggetti che
 rappresentano tutti gli elementi della notazione, come le stanghette,
-le teste di nota, le legature di valore, i segni di dinamica, etc.  A ogni
+le teste di nota, le legature di valore, le dinamiche, etc.  A ogni
 oggetto corrisponde un relativo insieme di valori di proprietà.
 
 Alcuni tipi di oggetto hanno dei nomi speciali.  Gli oggetti che rappresentano
@@ -176,7 +177,17 @@ di oggetti e proprietà dai loro nomi.
 @cindex metodi di modifica
 @cindex modifica, metodi
 
-@strong{Il comando \override}
+@menu
+* Il comando override::
+* Il comando revert::
+* Il prefisso once::
+* Il comando overrideProperty::
+* Il comando tweak::
+@end menu
+
+@node Il comando override
+@unnumberedsubsubsec Il comando @code{@bs{}override}
+@translationof The override command
 
 @cindex override, comando
 @cindex override, sintassi
@@ -201,8 +212,7 @@ funziona.
 La sintassi generale di questo comando è:
 
 @example
-\override @var{Contesto}.@var{OggettoDiFormattazione} #'@var{proprietà-formattazione} =
-#@var{valore}
+\override @var{Contesto}.@var{OggettoDiFormattazione}.@var{proprietà-formattazione} = #@var{valore}
 @end example
 
 @noindent
@@ -210,7 +220,7 @@ Questo comando assegnerà alla proprietà chiamata @var{proprietà-formattazione
 dell'oggetto di formattazione chiamato @var{OggettoDiFormattazione}, che fa
 parte del contesto @var{Contesto}, il valore @var{valore}.
 
-Il @var{Contesto} può essere ommesso (e di solito lo è) quando il
+Il @var{Contesto} può essere omesso (e di solito lo è) quando il
 contesto richiesto è implicito e si trova a uno dei livelli più
 bassi dei contesti, come ad esempio @code{Voice}, @code{ChordNames} o
 @code{Lyrics}.  Lo ometteremo in molti degli esempi seguenti; vedremo
@@ -221,10 +231,15 @@ i loro valori, si veda @ref{Types of properties}; in questa sezione, invece,
 useremo soltanto alcune proprietà e valori di facile comprensione,
 in modo da spiegare il formato e l'uso di questo comando.
 
-Per ora non ti preoccupare del @code{#'}, che deve precedere la
-proprietà di formattazione e del@tie{}@code{#}, che deve precedere
-il valore.  Tali segni vanno presentati esattamente in questa
-forma.  Questo è il comando più usato nelle modifiche e quasi tutto
+Le espressioni fondamentali di LilyPond sono gli elementi musicali come le note,
+le durate e le annotazioni.  Le espressioni basilari come numeri,
+stringhe di testo e liste sono elaborate nella @q{modalità Scheme}, che viene
+invocata inserendo @samp{#} prima del valore.  Sebbene i valori possano
+avere talvolta una valida rappresentazione nella modalità musicale di LilyPond,
+per coerenza questo manuale li farà sempre precedere da @samp{#}.  Per maggiori
+informazioni sulla modalità Scheme, si veda @rextend{LilyPond Scheme syntax}.
+
+@code{\override} è il comando più usato nelle modifiche e quasi tutto
 il resto del capitolo ha lo scopo di mostrare alcuni esempi
 di utilizzo.  Ecco un semplice esempio che mostra come cambiare
 il colore della testa di nota:
@@ -235,15 +250,18 @@ il colore della testa di nota:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a b c |
 @end lilypond
 
-@strong{Il comando \revert}
+@node Il comando revert
+@unnumberedsubsubsec Il comando @code{@bs{}revert}
+@translationof The revert command
 
-@cindex ripristino (revert), comando
+@cindex revert, comando
+@cindex ripristino, comando \revert
 
 @funindex \revert
 @funindex revert
@@ -255,7 +273,7 @@ al suo valore predefinito.  Attenzione: non al suo valore precedente (nel caso
 siano stati inseriti vari comandi @code{\override}).  Impiega la seguente sintassi:
 
 @example
-\revert @var{Contesto}.@var{OggettoDiFormmattazione} #'@var{proprietà-formattazione}
+\revert @var{Contesto}.@var{OggettoDiFormmattazione}.@var{proprietà-formattazione}
 @end example
 
 Anche in questo caso, come per il comando @code{\override}, @var{Contesto} di
@@ -269,15 +287,17 @@ note al valore predefinito:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
 b4 c |
 @end lilypond
 
-@strong{Il prefisso \once}
+@node Il prefisso once
+@unnumberedsubsubsec Il prefisso @code{@bs{}once}
+@translationof The once prefix
 
 @funindex \once
 @funindex once
@@ -293,17 +313,37 @@ una singola nota in questo modo:
 @cindex colore, proprietà del
 @cindex NoteHead, esempio di sovrascrittura
 
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+@lilypond[quote,verbatim,relative=1]
+c4 d
+\override NoteHead.color = #red
+e4 f |
+\once \override NoteHead.color = #green
+g4 a
+\revert NoteHead.color
+b c |
+@end lilypond
+
+Il prefisso @code{\once} può essere usato anche di fronte a molti
+comandi predefiniti per limitare il loro effetto a un momento musicale:
+
+@lilypond[quote,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\once \stemDown
 e4 f |
-\once \override NoteHead #'color = #green
 g4 a
-\revert NoteHead #'color
+\once \hideNotes
 b c |
 @end lilypond
 
-@strong{Il comando \overrideProperty}
+Tuttavia, i comandi predefiniti che hanno la forma @code{\@dots{}Neutral},
+@code{\@dots{}Off} e @code{\un@dots{}} usano internamente @code{\revert} invece
+di @code{\override} dunque inserire @code{\once} prima di questi comandi
+non produce alcun effetto.
+
+
+@node Il comando overrideProperty
+@unnumberedsubsubsec Il comando @code{@bs{}overrideProperty}
+@translationof The overrideProperty command
 
 @cindex overrideProperty, comando
 
@@ -316,7 +356,9 @@ Lo menzioniamo qui per completezza, ma per approfondire l'argomento
 si veda @rextend{Difficult tweaks}.
 @c Maybe explain in a later iteration  -td
 
-@strong{Il comando \tweak}
+@node Il comando tweak
+@unnumberedsubsubsec Il comando @code{@bs{}tweak}
+@translationof The tweak command
 
 @cindex tweak, comando
 
@@ -340,7 +382,7 @@ cosa succede se si usa @code{\once \override}:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
 <c e g>4
 <c e g>4
 @end lilypond
@@ -366,7 +408,7 @@ di un accordo si cambia in questo modo:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
 @end lilypond
 
 Si noti che la sintassi di @code{\tweak} è diversa da quella di
@@ -377,7 +419,7 @@ input.  Nota anche che non ci devono essere segni di uguale (@code{=}).  Dunque
 forma semplice del comando @code{\tweak} è
 
 @example
-\tweak #'@var{proprietà-formattazione} #@var{valore}
+\tweak @var{proprietà-formattazione} #@var{valore}
 @end example
 
 Il comando @code{\tweak} serve anche a modificare soltanto una di una serie
@@ -389,8 +431,8 @@ di articolazioni:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4^"Black"
-  -\tweak #'color #red ^"Red"
-  -\tweak #'color #green _"Green"
+  -\tweak color #red ^"Red"
+  -\tweak color #green _"Green"
 @end lilypond
 
 @noindent
@@ -409,14 +451,14 @@ esplicitamente l'oggetto di formattazione, purché LilyPond riesca a
 seguire la sua origine fino all'evento originale:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red   cis4
- \tweak Accidental #'color #green es
+<\tweak Accidental.color #red   cis4
+ \tweak Accidental.color #green es
                                   g>
 @end lilypond
 
 Questa forma estesa del comando @code{\tweak} può essere descritta così
 @example
-\tweak @var{oggetto-formattazione} #'@var{proprietà-formattazione} @var{valore}
+\tweak @var{oggetto-formattazione}.@var{proprietà-formattazione} @var{valore}
 @end example
 
 @cindex gruppi irregolari, annidati
@@ -446,12 +488,12 @@ deve essere in rosso.
 @cindex colore, esempio
 
 @lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
-\times 4/3 {
-  \tweak #'color #red
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+\tweak direction #up
+\tuplet 3/4 {
+  \tweak color #red
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -468,15 +510,14 @@ aspetto può essere modificato come di consueto con i comandi @code{\override}:
 @c NOTE Tuplet brackets collide if notes are high on staff
 @c See issue 509
 @lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
-\once \override TupletNumber
-  #'text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 { c8[ c c] }
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
+\tuplet 3/2 {
   c8[ c]
   c8[ c]
-  \once \override TupletNumber #'transparent = ##t
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+  \once \override TupletNumber.transparent = ##t
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -609,11 +650,10 @@ contesto.  Inizialmente usiamo un valore molto grande per lo
 spessore, per essere sicuri che il comando funzioni:
 
 @example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
 @end example
 
-Non dimenticare il @code{#'} che precede il nome della
-proprietà e il@tie{}@code{#} che precede il nuovo valore!
+Non dimenticare il@tie{}@code{#} che precede il nuovo valore!
 
 L'ultima domanda è: @q{dove va messo questo comando?}  Finché non sei sicuro
 e stai ancora imparando, la risposta migliore è: @q{dentro la musica, prima della
@@ -629,7 +669,7 @@ prima legatura di portamento e accanto ad essa.}  Facciamolo:
   \time 6/8
   {
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     r4 bes8 bes[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -648,7 +688,7 @@ delle situazioni più complesse nelle sezioni successive, ma ora possiedi già
 tutte le conoscenze di base che ti permetteranno di costruire i tuoi comandi.
 Ti manca solo un po' di pratica, che potrai fare grazie ai prossimi esempi.
 
-@subheading Trovare il contesto
+@subsubheading Trovare il contesto
 
 @cindex contesto, trovare il
 @cindex contesto, identificare il corretto
@@ -667,7 +707,7 @@ Dunque la nostra supposizione era corretta.  E dato che @code{Voice} è uno dei
 contesti che si trovano al livello più basso, come è sottinteso senza ambiguità
 dal fatto che stiamo inserendo delle note, in questo caso possiamo ometterlo.
 
-@subheading Sovrascrivere una volta sola
+@subsubheading Sovrascrivere una volta sola
 
 @cindex sovrascrivere una volta sola
 @cindex \once \override
@@ -696,7 +736,7 @@ nel modo seguente:
   {
     r4 bes8
     % Aumenta lo spessore solo della legatura che segue
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes8[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -712,7 +752,7 @@ Ora solo la prima legatura è più spessa.
 
 Il comando @code{\once} può essere usato anche prima del comando @code{\set}.
 
-@subheading Ripristinare
+@subsubheading Ripristinare
 
 @cindex revert
 @cindex ripristinare le proprietà predefinite
@@ -737,10 +777,10 @@ iniziano le legature:
   {
     r4 bes8
     % Aumenta lo spessore solo della legatura che segue
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes[( g]) g |
     % Aumenta lo spessore solo della legatura che segue
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     g8[( es]) es d[( f]) as |
     as8 g
   }
@@ -766,11 +806,11 @@ dopo la seconda legatura:
   {
     r4 bes8
     % Aumenta lo spessore di tutte le legature di portamento che seguono da 1.2 a 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     bes[( g]) g |
     g8[( es]) es
     % Ripristina lo spessore di tutte le legature di portamento che seguono al valore predefinito 1.2
-    \revert Slur #'thickness
+    \revert Slur.thickness
     d8[( f]) as |
     as8 g
   }
@@ -844,23 +884,17 @@ per rendere il testo corsivo.  L'oggetto è @code{LyricText},
 la proprietà è @code{font-shape} e il valore è
 @code{italic}.  Come in precedenza, ometteremo il contesto.
 
-Per inciso, è importante notare che i valori di @code{font-shape},
-essendo dei simboli, devono essere preceduti da un apostrofo
-singolo, @code{'}.  Questo è il motivo per cui gli apostrofi sono
-necessari prima di @code{thickness} nell'esempio precedente e prima di
-@code{font-shape} in questo esempio.
-Entrambi sono simboli.  I simboli vengono letti internamente da
-LilyPond.  Alcuni sono nomi di proprietà, come @code{thickness} o
-@code{font-shape}, altri sono usati come valori da assegnare alle
-proprietà, come @code{italic}.  Nota che sono diversi dalle
-stringhe di testo arbitrarie, che appaiono nella forma @code{"una stringa
-di testo"}; maggiori informazioni sui simboli e le stringhe si trovano in
-@rextend{Scheme tutorial}.
+Per inciso, è importante notare che alcune proprietà prendono come valori
+dei simboli, ad esempio @code{italic}; in questo caso i valori devono essere
+preceduti da un apostrofo, @code{'}.  I simboli vengono letti internamente da
+LilyPond.  Nota che sono diversi dalle stringhe di testo arbitrarie, che
+appaiono nella forma @code{"una stringa di testo"}; maggiori informazioni sui
+simboli e le stringhe si trovano in @rextend{Scheme tutorial}.
 
 Quindi il comando @code{\override} che rende il testo corsivo è:
 
 @example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
 @end example
 
 @noindent
@@ -884,7 +918,7 @@ in questo modo:
     as8 g
   }
   \addlyrics {
-    \override LyricText #'font-shape = #'italic
+    \override LyricText.font-shape = #'italic
     The man who | feels love's sweet e -- | mo -- tion
   }
 }
@@ -893,32 +927,9 @@ in questo modo:
 @noindent
 e tutto il testo è in corsivo.
 
-@subheading Specificare il contesto nella modalità testo (\lyricmode)
-
-@cindex contesto, specifarlo nella modalità testo (\lyricmode)
-@cindex modalità testo (\lyricmode), specificare il contesto
-
-Nel caso del testo, se cerchi di specificare il contesto nel
-formato usato prima, il comando non funzionerà.  Una sillaba
-inserita in modalità testo (lyricmode) può essere terminata da uno
-spazio, una nuova linea o un numero.  Tutti gli altri caratteri vengono
-considerati come parte della sillaba.  Per questo motivo uno spazio o una
-nuova linea devono apparire prima del @code{@}} finale per impedire che esso
-sia incluso nella sillaba finale.  Analogalmente, bisogna inserire degli spazi
-prima e dopo la virgola o il punto, @q{.}, separando il nome del contesto dal
-nome dell'oggetto: altrimenti, i due nomi verranno considerati insieme e
-l'interprete non sarà in grado di distinguerli.  Dunque il comando sarà:
-
-@example
-\override Lyrics . LyricText #'font-shape = #'italic
-@end example
-
 @warning{Nel testo bisogna lasciare sempre uno spazio bianco tra l'ultima
 sillaba e la parentesi graffa che chiude il blocco.}
 
-@warning{Nelle sovrascritture (@emph{override}) del testo ci devono essere sempre
-degli spazi intorno al punto tra il nome del contesto e quello dell'oggetto.}
-
 
 @seealso
 Estendere: @rextend{Scheme tutorial}.
@@ -938,7 +949,10 @@ Nella guida al Funzionamento interno il tipo di proprietà è indicato
 tra parentesi dopo il nome della proprietà.  Ecco una lista dei tipi
 che ti possono servire, corredata dalle regole per ciascun tipo e da alcuni
 esempi.  Ovviamente, se inseriti in un comando @code{\override}, devono
-essere sempre preceduti dal simbolo di cancelletto, @code{#}.
+essere sempre preceduti dal simbolo di cancelletto,@tie{}@code{#}, anche se
+il valore stesso già inizia con@tie{}@code{#}.  In questa sede diamo solo
+esempi di costanti: se si desidera elaborare un valore con Scheme, si veda
+@rextend{Calculations in Scheme}.
 
 @multitable @columnfractions .2 .45 .35
 @headitem Tipo di proprietà
@@ -948,32 +962,32 @@ essere sempre preceduti dal simbolo di cancelletto, @code{#}.
   @tab O Vero (True) o Falso (False), rappresentato da #t o #f
   @tab @code{#t}, @code{#f}
 @item Dimension (in staff space)
-  @tab Un numero positivo decimale (nell'unità di misura dello spazio del rigo)
+  @tab Un numero decimale (nell'unità di misura dello spazio del rigo)
   @tab @code{2.5}, @code{0.34}
 @item Direction
-  @tab Una valida direzione costante o il suo equivalente numerico (sono
-ammessi valori decimali compresi tra -1 e 1)
+  @tab Una valida direzione costante o il suo equivalente numerico
+  (@code{0} o @code{CENTER} indicano una direzione neutrale)
   @tab @code{LEFT}, @code{CENTER}, @code{UP},
        @code{1}, @w{@code{-1}}
 @item Integer
-  @tab Un numero positivo intero
-  @tab @code{3}, @code{1}
+  @tab Un numero intero
+  @tab @code{3}, @code{-1}
 @item List
-  @tab Un insieme di valori separato da spazi, racchiuso tra parentesi e
-preceduto da un apostrofo
-  @tab @code{'(left-edge staff-bar)}, @code{'(1)},
+  @tab Una sequenza di costanti o simboli separata da spazi, racchiusa
+  tra parentesi e preceduta da un apostrofo
+  @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
        @code{'(1.0 0.25 0.5)}
 @item Markup
   @tab Qualsiasi valido blocco markup
-  @tab @code{\markup @{ \italic "cresc." @}}
+  @tab @code{\markup @{ \italic "cresc." @}}, @code{"bagpipe"}
 @item Moment
   @tab Una frazione di una nota intera costruita con la
 funzione make-moment
-  @tab @code{(ly:make-moment 1 4)},
-       @code{(ly:make-moment 3 8)}
+  @tab @code{(ly:make-moment 1/4)},
+       @code{(ly:make-moment 3/8)}
 @item Number
-  @tab Qualsiasi valore decimale positivo o negativo
-  @tab @code{3.5}, @w{@code{-2.45}}
+  @tab Qualsiasi valore positivo o negativo, possibilmente decimale
+  @tab @code{3}, @w{@code{-2.45}}
 @item Pair (of numbers)
   @tab Due numeri separati da un @q{spazio . spazio} e racchiusi tra
 parentesi precedute da un apostrofo
@@ -987,9 +1001,9 @@ preceduto da un apostrofo
   @tab @code{bend::print}, @code{ly:text-interface::print},
        @code{#f}
 @item Vector
-  @tab Una lista di tre elementi racchiusi tra parentesi e preceduti
-da apostrofo-cancelletto, @code{'#}.
-  @tab @code{'#(#t #t #f)}
+  @tab Costanti
+  racchiuse tra @code{#(}@dots{}@code{)}.
+  @tab @code{#(#t #t #f)}
 @end multitable
 
 
@@ -1045,7 +1059,16 @@ Tutte queste proprietà hanno degli effetti sulla visibilità delle stanghette (
 ovviamente, anche di molti altri oggetti grafici).  Vediamole una per
 volta.
 
-@subheading stencil
+@menu
+* La proprietà stencil::
+* La proprietà break-visibility::
+* La proprietà transparent::
+* La proprietà color::
+@end menu
+
+@node La proprietà stencil
+@unnumberedsubsubsec La proprietà @code{stencil}
+@translationof The stencil property
 
 @cindex proprietà stencil
 @cindex stencil, proprietà
@@ -1063,7 +1086,7 @@ implicito, @code{Voice}:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override BarLine #'stencil = ##f
+  \override BarLine.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1089,14 +1112,27 @@ correggerlo specificando il contesto giusto:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'stencil = ##f
+  \override Staff.BarLine.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
 }
 @end lilypond
 
-Ora le stanghette sono sparite.
+Ora le stanghette sono sparite.  Impostare la proprietà @code{stencil}
+su @code{#f} è un'operazione talmente frequente che è stata creata una
+scorciatoia, @code{\omit}:
+@funindex \omit
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \omit Staff.BarLine
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
 
 Si noti però che impostare la proprietà @code{stencil} su @code{#f}
 causerà degli errori nel caso in cui le dimensioni dell'oggetto
@@ -1109,12 +1145,14 @@ zero:
 @lilypond[quote,verbatim,relative=2]
 {
   c4 c
-  \once \override NoteHead #'stencil = #point-stencil
+  \once \override NoteHead.stencil = #point-stencil
   c4 c
 }
 @end lilypond
 
-@subheading break-visibility
+@node La proprietà break-visibility
+@unnumberedsubsubsec La proprietà @code{break-visibility}
+@translationof The break-visibility property
 
 @cindex proprietà break-visibility
 @cindex break-visibility, proprietà
@@ -1125,11 +1163,11 @@ tre valori booleani.
 Questi valori controllano rispettivamente se le stanghette debbano
 comparire alla fine, in mezzo o all'inizio dei righi.  Dato
 che nel nostro esempio vogliamo sopprimere tutte le stanghette, il valore
-che ci serve è @code{'#(#f #f #f)}.  Proviamo, ricordando di includere
-il contesto @code{Staff}.  Si noti che prima della parentesi di apertura
-abbiamo @code{#'#}.  Il @code{'#} deve far parte del valore perché introduce
-un vettore, mentre il primo@tie{}@code{#} deve precedere, come sempre, il
-valore del comando @code{\override}.
+che ci serve è @code{#(#f #f #f)} (equivalente al nome @code{all-invisible}).
+Proviamo, ricordando di includere il contesto @code{Staff}.  Si noti che prima
+della parentesi di apertura abbiamo @code{##}.  Un @code{#} è necessario
+perché introduce un vettore, mentre il primo@tie{}@code{#} deve precedere, come
+sempre, il valore del comando @code{\override}.
 
 @cindex BarLine, esempio di sovrascrittura
 @cindex proprietà break-visibility, esempio
@@ -1138,7 +1176,7 @@ valore del comando @code{\override}.
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+  \override Staff.BarLine.break-visibility = ##(#f #f #f)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1147,7 +1185,9 @@ valore del comando @code{\override}.
 
 E vediamo che anche questo comando elimina tutte le stanghette.
 
-@subheading transparent
+@node La proprietà transparent
+@unnumberedsubsubsec La proprietà @code{transparent}
+@translationof The transparent property
 
 @cindex proprietà transparent
 @cindex transparent, proprietà
@@ -1172,7 +1212,22 @@ Quindi il comando che rende trasparente l'indicazione di tempo è:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'transparent = ##t
+  \override Staff.TimeSignature.transparent = ##t
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+@noindent
+Impostare la proprietà @code{transparent} è un'operazione piuttosto
+frequente, perciò è stata creata la scorciatoia @code{\hide}:
+@funindex \hide
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \hide Staff.TimeSignature
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1180,11 +1235,11 @@ Quindi il comando che rende trasparente l'indicazione di tempo è:
 @end lilypond
 
 @noindent
-L'indicazione di tempo è scomparsa; è rimasto però uno spazio al suo posto.  Magari questo è quello che si
-desidera, ad esempio per creare un esercizio in cui uno studente deve
-riempire degli spazi vuoti.  Ma in altre circostanze ciò può
-non essere gradito.  Per eliminare lo spazio vuoto bisogna usare la proprietà stencil
-e impostarla su @code{#f}:
+L'indicazione di tempo è scomparsa; è rimasto però uno spazio al suo posto.  Magari
+questo è quello che si desidera, ad esempio per creare un esercizio in cui uno
+studente deve riempire degli spazi vuoti.  Ma in altre circostanze ciò può
+non essere gradito.  Per eliminare lo spazio vuoto bisogna impostare la
+proprietà stencil su @code{#f}:
 
 @cindex TimeSignature, esempio di sovrascrittura
 @cindex proprietà stencil, esempio
@@ -1193,7 +1248,7 @@ e impostarla su @code{#f}:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1201,11 +1256,13 @@ e impostarla su @code{#f}:
 @end lilypond
 
 @noindent
-la differenza è ovvia: se si imposta lo stencil su @code{#f}
-l'oggetto scompare del tutto; se si rende l'oggetto @code{trasparente}
-questo resta dove è, anche se invisibile.
+la differenza è ovvia: se si imposta lo stencil su @code{#f} (possibilmente
+con @code{\omit}) l'oggetto scompare del tutto; se si rende l'oggetto
+@code{trasparente} questo resta dove è, anche se invisibile.
 
-@subheading color
+@node La proprietà color
+@unnumberedsubsubsec La proprietà @code{color}
+@translationof The color property
 
 @cindex proprietà color
 @cindex color, proprietà
@@ -1234,7 +1291,7 @@ stanghette scriviamo:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #white
+  \override Staff.BarLine.color = #white
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1244,11 +1301,11 @@ stanghette scriviamo:
 @noindent
 e di nuovo vediamo che le stanghette non sono visibili.  Si noti
 che @emph{white} non è preceduto da un apostrofo, perché non
-è un simbolo, ma una @emph{funzione}.  Quando viene chiamata, fornisce
+è un simbolo, ma una @emph{variabile}.  Quando viene esaminata, fornisce
 la lista di valori interni necessari per impostare il colore su
 bianco.  Gli altri colori nella lista normale sono anch'essi
-funzioni.  Per convincerti che funziona potresti provare a
-cambiare il colore e usare una delle altre funzioni presenti
+delle variabili.  Per convincerti che funziona potresti provare a
+cambiare il colore e usare una delle altre variabili presenti
 nella lista.
 
 @cindex color, X11
@@ -1259,9 +1316,9 @@ nella lista.
 
 Il secondo modo per cambiare il colore è attraverso la lista
 di nomi di colori X11 che si trova in @ruser{List of colors}.
-Tuttavia questi colori devono essere preceduti da un'altra
-funzione che converte i nomi di colori X11 nella lista di
-valori interni, @code{x11-color}:
+Questi colori vengono trasformati in valori reali dalla funzione
+@code{x11-color}, che converte i simboli di colore X11 nella lista
+di valori interni:
 
 @cindex BarLine, esempio di sovrascrittura
 @cindex proprietà color, esempio
@@ -1270,7 +1327,7 @@ valori interni, @code{x11-color}:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(x11-color 'white)
+  \override Staff.BarLine.color = #(x11-color 'white)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1280,7 +1337,8 @@ valori interni, @code{x11-color}:
 @noindent
 Si noti che in questo caso la funzione @code{x11-color} prende
 un simbolo come argomento, dunque il simbolo deve essere preceduto
-da un apostrofo e i due elementi devono essere racchiusi tra parentesi.
+da un apostrofo per impedire che sia considerato una variabile e
+l'intera funzione deve essere racchiusa tra parentesi.
 
 @cindex colori rgb
 @cindex rgb, colori
@@ -1288,7 +1346,7 @@ da un apostrofo e i due elementi devono essere racchiusi tra parentesi.
 
 @funindex rgb-color
 
-Esiste una terza funzione, che converte i valori RGB in colori
+Esiste un'altra funzione, che converte i valori RGB in colori
 interni, la funzione @code{rgb-color}.  Prende tre argomenti
 che specificano l'intensità dei colori rosso, verde e blu.
 I valori vanno da 0 a 1.  Quindi per avere il colore rosso
@@ -1302,7 +1360,7 @@ e per avere il bianco sarà @code{(rgb-color 1 1 1)}:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+  \override Staff.BarLine.color = #(rgb-color 1 1 1)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1328,12 +1386,12 @@ impostati su diverse tonalità di grigio:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.StaffSymbol   #'color = #(x11-color 'grey30)
-  \override Staff.TimeSignature #'color = #(x11-color 'grey60)
-  \override Staff.Clef          #'color = #(x11-color 'grey60)
-  \override Voice.NoteHead      #'color = #(x11-color 'grey85)
-  \override Voice.Stem          #'color = #(x11-color 'grey85)
-  \override Staff.BarLine       #'color = #(x11-color 'grey10)
+  \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+  \override Staff.TimeSignature.color = #(x11-color 'grey60)
+  \override Staff.Clef.color = #(x11-color 'grey60)
+  \override Voice.NoteHead.color = #(x11-color 'grey85)
+  \override Voice.Stem.color = #(x11-color 'grey85)
+  \override Staff.BarLine.color = #(x11-color 'grey10)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1385,13 +1443,13 @@ inserire un nuovo rigo temporaneo, come in un @rglos{ossia}.
 
 Gli ossia di norma vengono scritti senza chiave e senza indicazione di
 tempo e hanno solitamente una dimensione leggermente inferiore a
-quella del rigo pricipale.  Sappiamo già come togliere la chiave e
+quella del rigo principale.  Sappiamo già come togliere la chiave e
 il segno di tempo, cioè impostando semplicemente la proprietà stencil di
 ciascun oggetto su @code{#f}, così:
 
 @cindex proprietà alignAboveContext, esempio
 @cindex @code{\with}, esempio
-@cindex proprietà stencil, esempio
+@funindex \omit
 @cindex Clef, esempio di sovrascrittura
 @cindex TimeSignature, esempio di sovrascrittura
 
@@ -1406,8 +1464,8 @@ ciascun oggetto su @code{#f}, così:
         alignAboveContext = #"main"
       }
       {
-        \override Staff.Clef #'stencil = ##f
-        \override Staff.TimeSignature #'stencil = ##f
+        \omit Staff.Clef
+        \omit Staff.TimeSignature
         { f8 f c }
       }
     >>
@@ -1423,10 +1481,10 @@ siano applicati al rigo dell'ossia.
 
 Ma qual è la differenza tra modificare il contesto del rigo con
 @code{\with} e modificare la proprietà stencil della chiave e
-del segno di tempo con \override?  La principale differenza è
-che le modifiche inserite in un blocco @code{\with} vengono applicate
-nel momento in cui viene creato il contesto e permangono come valori
-@strong{predefiniti} per la durata di quel contesto, mentre i
+del segno di tempo con @code{\override} o in questo caso @code{\omit}?  La
+principale differenza è che le modifiche inserite in un blocco @code{\with}
+vengono applicate nel momento in cui viene creato il contesto e permangono
+come valori @strong{predefiniti} per la durata di quel contesto, mentre i
 comandi @code{\set} o @code{\override} incorporati nel blocco
 della musica sono dinamici -- le loro modifiche sono sincronizzate
 con un punto preciso della musica.  Se le modifiche sono disattivate o
@@ -1465,9 +1523,33 @@ Dunque possiamo sostituire l'esempio precedente con
       \new Staff \with {
         alignAboveContext = #"main"
         % Nasconde le chiavi di questo rigo
-        \override Clef #'stencil = ##f
+        \override Clef.stencil = ##f
+        % Nasconde le indicazioni di tempo di questo rigo
+        \override TimeSignature.stencil = ##f
+      }
+      { f8 f c }
+    >>
+    r4 |
+  }
+}
+@end lilypond
+
+Si possono usare anche le scorciatoie @code{\hide} e @code{\omit} per
+impostare la proprietà @code{transparent} e togliere lo @code{stencil}
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+  \relative g' {
+    r4 g8 g c4 c8 d |
+    e4 r8
+    <<
+      { f8 c c }
+      \new Staff \with {
+        alignAboveContext = #"main"
+        % Nasconde le chiavi di questo rigo
+        \omit Clef
         % Nasconde le indicazioni di tempo di questo rigo
-        \override TimeSignature #'stencil = ##f
+        \omit TimeSignature
       }
       { f8 f c }
     >>
@@ -1480,7 +1562,7 @@ Infine arriviamo a modificare la dimensione degli oggetti di formattazione.
 
 Alcuni oggetti di formattazione sono dei glifi scelti da un tipo di
 carattere.  Ad esempio le teste di nota, le alterazioni, le annotazioni,
-le chiavi, le indicazioni di tempo, la dinamica, il testo vocale.  La loro dimensione
+le chiavi, le indicazioni di tempo, le dinamiche, il testo vocale.  La loro dimensione
 varia se si modifica la proprietà @code{font-size}, come vedremo a
 breve.  Altri oggetti di formattazione come le legature di portamento e
 di valore -- in generale, tutti gli oggetti estensori (@emph{spanner}) -- vengono
@@ -1497,7 +1579,7 @@ tipi di carattere di ogni tipo di oggetto, come le teste di nota
 (@code{NoteHead}) con un comando di questo tipo
 
 @example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
 @end example
 
 oppure possiamo modificare la dimensione di tutti i tipi di carattere usando
@@ -1530,8 +1612,8 @@ Proviamolo nel nostro esempio dell'ossia:
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \omit Clef
+        \omit TimeSignature
         % Riduce la dimensione di tutti i tipi di carattere di circa il 24%
         fontSize = #-2
       }
@@ -1605,11 +1687,11 @@ questo modo:
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \omit Clef
+        \omit TimeSignature
         fontSize = #-2
         % Riduce proporzionalmente la lunghezza dei gambi e la spaziatura tra le linee
-        \override StaffSymbol #'staff-space = #(magstep -2)
+        \override StaffSymbol.staff-space = #(magstep -2)
       }
       { f8 f c }
     >>
@@ -1669,7 +1751,7 @@ devono esserne posizionati al di fuori.  In LilyPond si chiamano rispettivamente
 (dentro il rigo) e oggetti outside-staff (fuori dal rigo).
 
 Gli oggetti within-staff sono quelli che si trovano nel rigo, come
-le teste e i gambi delle note, le alterazioni, etc..  La loro posizione
+le teste e i gambi delle note, le alterazioni, etc@dots{}  La loro posizione
 è determinata perlopiù dalla musica stessa: in verticale sono collocati
 su determinate posizioni del rigo o sono collegati
 ad altri oggetti disposti in questo modo. Di norma LilyPond evita
@@ -1754,10 +1836,23 @@ come i gambi e le code, a seconda dell'orientamento si dispongono anche sulla
 destra o sulla sinistra.  Tutto questo viene controllato automaticamente
 quando si imposta la proprietà @code{direction}.
 
+@menu
+* La proprietà direction::
+* Diteggiatura::
+@end menu
+
+@node La proprietà direction
+@unnumberedsubsubsec La proprietà @code{direction}
+@translationof The direction property
+
 @cindex down
+@cindex direzione, giù
 @cindex up
+@cindex direzione, su
 @cindex center
+@cindex direzione, centrale
 @cindex neutral
+@cindex direzione, neutrale
 
 L'esempio seguente mostra nella prima battuta il comportamento predefinito
 dei gambi, per cui i gambi delle note superiori puntano in basso e quelli delle
@@ -1771,11 +1866,11 @@ con i gambi nuovamente disposti secondo il comportamento predefinito.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4 g c a |
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
 a4 g c a |
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
 a4 g c a |
-\revert Stem #'direction
+\revert Stem.direction
 a4 g c a |
 @end lilypond
 
@@ -1834,13 +1929,17 @@ non è ovvio.
   @tab I gruppi irregolare sono sotto/sopra le note
 @end multitable
 
-Si noti che questi comandi predefiniti @strong{non} possono essere
-preceduti da @code{\once}.  Se desideri limitare l'effetto a una
-singola nota, devi usare il comando @code{\once \override} equivalente
-oppure il comando predefinito seguito, dopo la nota in questione, dal
-corrispondente comando @code{\xxxNeutral}.
 
+Le varianti neutral/normal di questi comandi usano @code{\revert} e quindi
+@strong{non} possono essere precedute da @code{\once}.  Se desideri limitare
+l'effetto degli altri comandi (che usano @code{\override}) a un singolo
+momento temporale, devi farli precedere da @code{\once} come faresti con
+delle sovrascritture esplicite.
+
+
+@node Diteggiatura
 @unnumberedsubsubsec Diteggiatura
+@translationof Fingering
 
 @cindex diteggiatura, posizionamento
 @cindex diteggiatura, accordi
@@ -1863,9 +1962,9 @@ predefinito e le due battute successive mostrano gli effetti dei valori
 
 @lilypond[quote,verbatim,relative=2]
 c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
 c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
 c4-5 a-3 f-1 c'-5 |
 @end lilypond
 
@@ -1967,7 +2066,7 @@ valore predefinito di tale proprietà è @w{@code{-5}}, dunque proviamo
 con @w{@code{-7}}:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
 \set fingeringOrientations = #'(left)
 <f-2>4
 <c-1 e-2 g-3 b-5>4
@@ -1990,7 +2089,22 @@ con @w{@code{-7}}:
 @translationof Outside-staff objects
 
 Gli oggetti esterni al rigo sono disposti automaticamente in modo da evitare
-collisioni.  Gli oggetti dai valori più bassi per la proprietà
+collisioni.  Ci sono vari modi per modificare la disposizione automatica
+se questa non è ottimale.
+
+@menu
+* La proprietà outside-staff-priority::
+* Il comando textLengthOn::
+* Posizionamento delle dinamiche::
+* Dimensione dei grob::
+@end menu
+
+
+@node La proprietà outside-staff-priority
+@unnumberedsubsubsec La proprietà @code{outside-staff-priority}
+@translationof The outside-staff-priority property
+
+Gli oggetti dai valori più bassi per la proprietà
 @code{outside-staff-priority} vengono posizionati più vicino al rigo,
 mentre gli altri oggetti esterni al rigo vengono distanziati quanto
 basta per evitare collisioni.  La proprietà @code{outside-staff-priority} è
@@ -2069,7 +2183,7 @@ questi oggetti.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Place dynamics above staff
 \dynamicUp
@@ -2119,12 +2233,12 @@ nel contesto @code{Staff}:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Imposta i dettagli per l'estensione del testo vocale seguente
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Posiziona le indicazione dinamiche sopra il rigo
 \dynamicUp
 % Posiziona l'estensione del segno d'ottava sotto il testo vocale
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
 % Inizia l'estensione del segno d'ottava
 \ottava #1
 c'4 \startTextSpan
@@ -2153,7 +2267,7 @@ giusto per sovrascriverli.
 
 Le legature di portamento sono classificate come oggetti interni al rigo, anche
 se spesso sono poste sopra il rigo, se le note alle quali sono collegate si
-trovano nella aprte superiore del pentagramma.  Questo può far sì che gli oggetti esterni al rigo,
+trovano nella parte superiore del pentagramma.  Questo può far sì che gli oggetti esterni al rigo,
 come le articolazioni, siano spinti troppo in alto, dato che la legatura viene
 posizionata prima.  La proprietà @code{avoid-slur} dell'articolazione
 può essere impostata su @code{'inside} per portare l'articolazione
@@ -2167,10 +2281,10 @@ esempio che mostra l'effetto dei due metodi:
 @lilypond[quote,verbatim,relative=2]
 c4( c^\markup { \tiny \sharp } d4.) c8 |
 c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
 c4^\markup { \tiny \sharp } d4.) c8 |
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
 c4( c^\markup { \tiny \sharp } d4.) c8 |
 @end lilypond
 
@@ -2190,7 +2304,7 @@ aumentare la priorità di @qq{Testo3} assegnando un valore più alto:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 c2^"Testo1"
 c2^"Testo2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
 c2^"Testo3"
 c2^"Testo4" |
 @end lilypond
@@ -2203,7 +2317,9 @@ naturalmente, dobbiamo creare più spazio orizzontale tra le note per
 far posto al testo.  Lo si può ottenere con il comando
 @code{textLengthOn}.
 
-@subheading \textLengthOn
+@node Il comando textLengthOn
+@unnumberedsubsubsec Il comando @code{@bs{}textLengthOn}
+@translationof The textLengthOn command
 
 @cindex note, distanziarle insieme al testo
 
@@ -2213,7 +2329,7 @@ far posto al testo.  Lo si può ottenere con il comando
 @funindex textLengthOff
 
 Per impostazione predefinita, finché si tratta di formattare la musica il
-testo prodotto dal comando \markup non occupa uno spazio orizzontale.
+testo prodotto dal comando @code{\markup} non occupa uno spazio orizzontale.
 Il comando @code{\textLengthOn} inverte questo comportamento e fa sì che
 le note si distanzino quanto basti per introdurre il testo:
 
@@ -2226,9 +2342,12 @@ c2^"Text4" |
 @end lilypond
 
 Il comando che ripristina il comportamento predefinito è
-@code{\textLengthOff}.  Ricorda che @code{\once} funziona solo insieme
-a @code{\override}, @code{\set}, @code{\revert} o @code{\unset},
-dunque non si può usare con @code{\textLengthOn}.
+@code{\textLengthOff}.  Altrimenti si può usare @code{\once}
+con @code{\textLengthOn} se l'effetto deve essere limitato
+a un singolo momento musicale.
+Analogalmente, la spaziatura per i segni di chiamata e le indicazioni
+di tempo è regolata in modo indipendente con i comandi @code{\markLengthOn}
+e @code{\markLengthOff}.
 
 @cindex testo a margine, permettere le collisioni
 
@@ -2251,22 +2370,24 @@ c,,2^"Testo" c'' |
 R1 |
 
 % Disattiva l'elusione delle collisioni
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 c,,2^"Testo Lungo   " c'' |
 R1 |
 
 % Disattiva l'elusione delle collisioni
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 \textLengthOn        % e attiva textLengthOn
 c,,2^"Testo Lungo   "  % Gli spazi finali vengono rispettati
 c''2 |
 @end lilypond
 
 
-@subheading Dinamica
+@node Posizionamento delle dinamiche
+@unnumberedsubsubsec Posizionamento delle dinamiche
+@translationof Dynamics placement
 
-@cindex modificare il posizionamento della dinamica
-@cindex dinamica, modificare il posizionamento
+@cindex modificare il posizionamento delle dinamiche
+@cindex dinamiche, modificare il posizionamento
 
 Le indicazioni dinamiche sono di norma poste sotto il
 rigo, ma possono essere collocati al di sopra del pentagramma col comando @code{\dynamicUp}.
@@ -2293,7 +2414,7 @@ questo esempio piuttosto improbabile:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
-a4\f b\mf c\mp b\p
+a4\f b\mf a\mp b\p
 @end lilypond
 
 @noindent
@@ -2304,6 +2425,10 @@ potuto farlo per il testo a margine usando il comando @code{\textLengthOn},
 ma non esiste un comando equivalente per i segni di dinamica.  Dunque
 dovremo scoprire come farlo usando i comandi @code{\override}.
 
+@node Dimensione dei grob
+@unnumberedsubsubsec Dimensione dei grob
+@translationof Grob sizing
+
 @subheading Estensione dei grob
 
 @cindex estensione dei grob
@@ -2325,16 +2450,17 @@ Queste proprietà appartengono a tutti i grob che supportano l'interfaccia
 
 Per impostazione predefinita, gli oggetti esterni al rigo presentano estensione
 pari a zero, in modo da potersi sovrapporre nella direzione orizzontale.
-Ciò si ottiene con un trucco, ovvero aggiungendo infinito all'estensione
-sinistra e infinito negativo a quella destra, impostando il valore di
-@code{extra-spacing-width} su @code{'(+inf.0 . -inf.0)}.  Dunque, per
+Ciò si ottiene con un trucco, ovvero dando un valore infinito all'estensione
+sinistra e infinito negativo a quella destra, impostando la proprietà
+@code{extra-spacing-width} su @code{'(+inf.0 . -inf.0)}.  Per
 assicurarci che non si sovrappongano nella direzione orizzontale, dobbiamo
-sovrascrivere il valore di @code{extra-spacing-width} e impostarlo su
-@code{'(0 . 0)} in modo da inserire una larghezza vera e propria.  Ecco il
-comando che lo fa sul testo della dinamica:
+sovrascrivere il valore di @code{extra-spacing-width} per dar loro un po' più
+di spazio.  Le unità sono lo spazio tra due linee del rigo, dunque spostare
+il margine sinistro di mezza unità a sinistra e quello destro di mezza unità
+a destra dovrebbe dare il risultato desiderato:
 
 @example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
 @end example
 
 @noindent
@@ -2346,38 +2472,210 @@ Vediamo se funziona nell'esempio precedente:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
-a4\f b\mf c\mp b\p |
+% Aumenta la larghezza di 1 spazio rigo
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
+a4\f b\mf a\mp b\p
 @end lilypond
 
 @noindent
-Sicuramente ha impedito un'errata disposizione delle indicazioni
-dinamiche, ma restano due problemi.  Le dinamiche dovrebbero
-essere un po' più distanziate; sarebbe inoltre opportuno collocarle
-tutte alla stessa distanza dal rigo.
-Il primo problema è facilmente risolvibile.  Invece di
-impostare @code{extra-spacing-width} su zero, possiamo
-aggiungere un po' di spazio.  L'unità è lo spazio tra due linee
-del rigo, quindi se spostiamo il margine sinistro mezza unità
-a sinistra e il margine destro mezza unità a destra dovrebbe
-funzionare:
+L'aspetto è migliore, ma sarebbe preferibile avere i segni di dinamica
+allineati alla stessa linea di base invece di spostarsi su e giù seguendo
+la posizione delle note.  La proprietà che permette di ottenere tale
+risultato è @code{staff-padding} ed è trattata nella sezione relativa
+alle collisioni (vedi @ref{Collisions of objects}).
 
-@cindex DynamicText, esempio di sovrascrittura
-@cindex proprietà extra-spacing-width, esempio
-@cindex extra-spacing-width, esempio
 
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-% Aumenta la larghezza di 1 spazio rigo
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
-a4\f b\mf c\mp b\p
+@node Spaziatura verticale
+@section Spaziatura verticale
+@translationof Vertical spacing
+
+Di norma, la spaziatura verticale degli oggetti musicali decisa da
+LilyPond è molto buona.  Vediamo come si comporta con una semplice
+canzone, composta da due voci e un accompagnamento per pianoforte:
+
+@lilypond[quote,fragment,ragged-right]
+<<
+  \new ChoirStaff
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
 @end lilypond
 
-@noindent
-L'aspetto è migliore, ma sarebbe preferibile avere i segni di dinamica
-allineati alla stessa linea di base invece di spostarsi su e giù seguendo la posizione delle note.
-La proprietà che permette di ottenere tale risultato è @code{staff-padding} ed è trattata
-nella sezione seguente.
+Non c'è niente di sbagliato con la spaziatura verticale predefinita.  Tuttavia,
+supponiamo che si stia lavorando con un editore che abbia requisiti specifici
+per la spaziatura verticale dei righi e del testo vocale, ovvero maggior spazio
+tra testo e note, e tra l'accompagnamento del pianoforte e la linea vocale, e
+minor spazio tra i righi del pianoforte.  Iniziamo dal testo.
+
+Il testo vocale si trova all'interno di un sistema, dunque i comandi per
+modificarne la spaziatura sono descritti in @ruser{Flexible vertical spacing within systems}.
+Quel paragrafo ci dice che il testo è costituito da linee che non appartengono
+al rigo (@code{non-staff lines}), quindi il comando per cambiarne la spaziatura
+sarà riferito alla proprietà @code{nonstaff}.  Per allontanarlo dal rigo a cui
+si riferiscono (la linea superiore) si usa la proprietà @code{relatedstaff}.
+Per allontanarli dalla linea più bassa si usa la proprietà @code{unrelatedstaff}.
+Le parti vocali fanno parte del @code{VerticalAxisGroup}, dunque dobbiamo
+aggiustare le sue proprietà.  Proviamo a vedere se funziona.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #5
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #5
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+
+Funziona, ma forse non molto bene.  Quando impostiamo il
+@code{padding} su 5, LilyPond aggiunge 5 spazi rigo alla distanza
+tra gli oggetti, che è troppo in questo caso.  Useremo 2.
+
+Ora allontaniamo la musica per pianoforte dalle parti vocali.  La musica
+vocale si trova nel rigo @code{ChoirStaff}, quindi dobbiamo aumentare lo
+spazio tra quel gruppo di righi e il rigo per pianoforte che si trova sotto.
+Lo faremo modificando la proprietà @code{basic-distance} del
+@code{staffgroup-staff-spacing} di @code{StaffGrouper}.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff \with {
+    \override StaffGrouper.
+      staffgroup-staff-spacing.basic-distance = #15
+  }
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #2
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #2
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+
+Ottimo.  Non ci resta che avvicinare i righi del pianoforte.  Per farlo,
+modifichiamo di nuovo le proprietà di @code{StaffGrouper}, ma questa volta
+riduciamo sia @code{basic-distance} che @code{padding}.  Ecco come fare:
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff \with {
+    \override StaffGrouper.
+      staffgroup-staff-spacing.basic-distance = #15
+  }
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #2
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #2
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff \with {
+    \override StaffGrouper.staff-staff-spacing = #'(
+                            (basic-distance . 0)
+                            (padding . 0))
+  }
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+
+In questo modo sono molto vicini, ma è quello che vuole l'editore.
+Se necessario, possono essere allontanati modificando @code{padding} o
+@code{basic-distance}.
+
+Ci sono molti modi per modificare la spaziatura verticale.  Il punto fondamentale
+da ricordare è che la spaziatura degli oggetti in un contesto @code{StaffGroup}
+(come i gruppi @code{GrandStaff} o @code{PianoStaff}) è controllata dalle
+variabili spaziali di @code{StaffGrouper}.  La spaziatura relativa ai righi
+non raggruppati (come @code{Lyrics} e @code{Staff}) è regolata dalle variabili
+del @code{VerticalAxisGroup}.  Ulteriori dettagli in
+@ruser{Flexible vertical spacing paper variables} e
+@ruser{Flexible vertical spacing within systems}.
 
 
 @node Collisioni tra oggetti
@@ -2472,7 +2770,7 @@ La proprietà @code{staff-padding} è strettamente connessa alla proprietà
 qualsiasi oggetto che supporti l'interfaccia @code{side-position-interface} e
 quello più vicino (solitamente, la nota o le linee del rigo); @code{staff-padding}
 si applica solo a quegli oggetti che stanno sempre fuori dal rigo e regola
-la quantità minima di spazio da inserire tra l'oggetto e il rigo.  Nota che
+la distanza minima tra l'oggetto e il rigo.  Nota che
 @code{staff-padding} non ha alcun effetto sugli oggetti disposti relativamente
 alla nota invece che al rigo, anche se può essere sovrascritto senza generare
 degli errori per tali oggetti; quindi viene semplicemente ignorata.
@@ -2643,7 +2941,20 @@ poter sapere quali proprietà si possono usare per spostarlo.
 Vediamo ora come le proprietà presentate nella sezione precedente possano
 aiutare a risolvere la sovrapposizione degli elementi della notazione.
 
-@subheading proprietà padding
+@menu
+* La proprietà padding::
+* La proprietà right-padding::
+* La proprietà staff-padding::
+* La proprietà self-alignment-X::
+* La proprietà staff-position::
+* La proprietà extra-offset::
+* La proprietà positions::
+* La proprietà force-hshift::
+@end menu
+
+@node La proprietà padding
+@unnumberedsubsubsec La proprietà @code{padding}
+@translationof The padding property
 
 @cindex padding
 @cindex spaziatura
@@ -2660,7 +2971,7 @@ note.
 
 @lilypond[quote,fragment,relative=1,verbatim]
 c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
 b2\fermata
 @end lilypond
 
@@ -2670,11 +2981,11 @@ b2\fermata
 
 @lilypond[quote,fragment,relative=1,verbatim]
 % Questo non funziona, vedi sotto
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
 \tempo 4 = 120
 c1 |
 % Questo funziona
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
 \tempo 4 = 80
 d1 |
 @end lilypond
@@ -2691,7 +3002,9 @@ loro proprietà @code{outside-staff-priority}, allora si sposteranno
 quell'oggetto e tutti gli oggetti esterni a esso.
 
 
-@subheading right-padding
+@node La proprietà right-padding
+@unnumberedsubsubsec La proprietà @code{right-padding}
+@translationof The right-padding property
 
 @cindex proprietà right-padding
 @cindex right-padding, proprietà
@@ -2717,15 +3030,13 @@ sesquisharp = \markup { \sesquisharp }
 \relative c'' {
   c4
   % Mostra un triesis (alterazione ascendente di tre quarti di tono) ma lo spazio è troppo stretto
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 c
   % Ecco come migliorare lo spazio
-  \once \override Score.AccidentalPlacement #'right-padding = #0.6
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Score.AccidentalPlacement.right-padding = #0.6
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 |
 }
 @end lilypond
@@ -2741,15 +3052,17 @@ di @code{right-padding}.
 
 @noindent
 
-@subheading proprietà staff-padding
+@node La proprietà staff-padding
+@unnumberedsubsubsec La proprietà @code{staff-padding}
+@translationof The staff-padding property
 
 @cindex allineare gli oggetti a una base
 @cindex oggetti, allinearli a una base
 
 @code{staff-padding} serve ad allineare gli oggetti come i segni di
-dinamica lungo una linea di base a una certa altezza fissa sopra il
-rigo, invece che a un'altezza dipendente dalla posizione della nota al
-quale sono collegati.  Non è una proprietà di @code{DynamicText} bensì
+dinamica lungo una linea di base a una certa distanza dal rigo, quando
+nessun altro elemento della notazione li allontana dal rigo.
+Non è una proprietà di @code{DynamicText} bensì
 di @code{DynamicLineSpanner}, perché la base deve essere applicata
 ugualmente a @strong{tutti} i segni dinamica, compresi quelli creati
 come estensori.  Ecco come allineare i segni di dinamica nell'esempio
@@ -2763,20 +3076,18 @@ preso dalla sezione precedente:
 @cindex staff-padding, esempio
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-% Aumenta la larghezza di 1 unità
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
-% Allinea le dinamiche alla base posta 2 unità sopra il rigo
-\override DynamicLineSpanner #'staff-padding = #2
-a4\f b\mf c\mp b\p
+\override DynamicLineSpanner.staff-padding = #3
+a4\f b\mf a\p b\mp
 @end lilypond
 
 
-@subheading proprietà self-alignment-X
+@node La proprietà self-alignment-X
+@unnumberedsubsubsec La proprietà @code{self-alignment-X}
+@translationof The self-alignment-X property
 
-L'esempio successivo mostra come questa proprietà possa risolvere la
-collisione di un numero di corda con un gambo allineando il bordo
-destro del numero al punto di riferimento della nota a cui si riferisce:
+L'esempio successivo mostra come aggiustare la posizione di un numero
+di corda rispetto a un gambo allineando il bordo destro del numero
+al punto di riferimento della nota a cui si riferisce:
 
 @cindex StringNumber, esempio di sovrascrittura
 @cindex proprietà self-alignment-X, esempio
@@ -2785,11 +3096,14 @@ destro del numero al punto di riferimento della nota a cui si riferisce:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
 \voiceOne
 <a\2>
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
 <a\2>
 @end lilypond
 
-@subheading proprietà staff-position
+
+@node La proprietà staff-position
+@unnumberedsubsubsec La proprietà @code{staff-position}
+@translationof The staff-position property
 
 @cindex collisione tra oggetti all'interno del rigo
 
@@ -2807,7 +3121,7 @@ di collisione di questo tipo:
 
 In questo caso la soluzione migliore è spostare in basso la pausa d'intero, poiché
 si trova nella seconda voce.  In @code{\voiceTwo} (ovvero nella seconda
-voce di un costrutto @code{<<@{...@} \\ @{...@}>>}) il valore predefinito
+voce di un costrutto @code{<<@{@dots{}@} \\ @{@dots{}@}>>}) il valore predefinito
 di @code{staff-position} è -4 per la pausa multipla (MultiMeasureRest), quindi
 dobbiamo spostarla più in basso, ad esempio di altri quattro semispazi del
 rigo; il nuovo valore sarà @w{@code{-8}}.
@@ -2820,7 +3134,7 @@ rigo; il nuovo valore sarà @w{@code{-8}}.
 <<
   { c4 c c c }
   \\
-  \override MultiMeasureRest #'staff-position = #-8
+  \override MultiMeasureRest.staff-position = #-8
   { R1 }
 >>
 @end lilypond
@@ -2828,7 +3142,9 @@ rigo; il nuovo valore sarà @w{@code{-8}}.
 Questa soluzione è preferibile all'uso di @code{extra-offset}, perché
 il taglio addizionale sopra la pausa è inserito automaticamente.
 
-@subheading proprietà extra-offset
+@node La proprietà extra-offset
+@unnumberedsubsubsec La proprietà @code{extra-offset}
+@translationof The extra-offset property
 
 @cindex posizionare gli oggetti
 @cindex posizionare i grob
@@ -2848,12 +3164,14 @@ sinistra e in basso di 1.8 spazi rigo:
 @lilypond[quote,fragment,relative=1,verbatim]
 \stemUp
 f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
 f4-5
 @end lilypond
 
 
-@subheading proprietà positions
+@node La proprietà positions
+@unnumberedsubsubsec La proprietà @code{positions}
+@translationof The positions property
 
 @cindex controllo manuale di graffette dei gruppi irregolari, travature, legature di portamento e di frase
 @cindex travature dei gruppi irregolari, controllo manuale
@@ -2861,41 +3179,41 @@ f4-5
 @cindex legature di frase, controllo manuale
 @cindex travature, controllo manuale
 
-La proprietà @code{positions} permette di controllare manualmente la posizione e
-l'inclinazione delle graffette dei gruppi irregolari, delle legature di portamento e di
-frase e delle travature.  Ecco un esempio di una legatura di frase
-dall'aspetto orribile, dovuto al suo tentativo di evitare la legatura
-di portamento sull'acciaccatura.
-
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4 \acciaccatura e8\( d8 c~ c d c d\)
-@end lilypond
-
-@noindent
-Potremmo semplicemente spostare la legatura di frase sopra le note:
+La proprietà @code{positions} permette di controllare manualmente la
+posizione verticale e quindi l'inclinazione delle graffette dei
+gruppi irregolari, delle legature di portamento e di frase e
+delle travature.  Ecco un esempio in cui una legatura di frase
+e una legatura di portamento collidono:
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\phrasingSlurUp
-\acciaccatura e8\( d8 c~ c d c d\)
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+a8 \( ( a'16 ) a \)
 @end lilypond
 
-@noindent
-Questa sarebbe la soluzione migliore.  Se, invece, per qualche motivo non
-fosse possibile, l'alternativa sarebbe spostare un po' più in basso l'estremità
-sinistra della legatura di frase tramite la proprietà @code{positions}.  Questo
-risolve anche il problema della forma sgraziata.
-
 @cindex PhrasingSlur, esempio di sovrascrittura
 @cindex proprietà positions, esempio
 @cindex positions, esempio
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
-\acciaccatura e8\( d8 c~ c d c d\)
+@noindent
+Si potrebbero spostare più in alto le due estremità della legatura
+di frase.  Possiamo provare a impostare quella sinistra su 2.5 spazi
+sopra la linea centrale e quella destra a 4.5 spazi; LilyPond
+sceglierà la legatura di frase tra quelle candidate che hanno le
+estremità più vicine a queste:
+
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+\once \override PhrasingSlur.positions = #'(2.5 . 4.5)
+a8 \( ( a'16 ) a \)
 @end lilypond
 
+È migliorato, ma perché non abbassare un po' l'estremità destra
+della legatura di portamento?  Se provi vedrai che non può essere
+fatto in questo modo.  Il motivo è che non ci sono legature di
+portamento candidate più basse di quella già selezionata, quindi
+in questo caso la proprietà @code{positions} non può produrre
+effetti.  Tuttavia, legature di valore, di portamento e di frase
+@emph{possono} essere posizionate e disegnate in modo molto preciso
+se necessario.  Per sapere come fare si veda @ruser{Modifying ties and slurs}.
+
 Ecco un altro esempio.  Vediamo che le travature collidono
 con le legature di valore:
 
@@ -2931,7 +3249,7 @@ centrale a, per esempio, 1:
     { c'1 ~ c'2. e'8 f' }
     \\
     {
-      \override Beam #'positions = #'(-1 . -1)
+      \override Beam.positions = #'(-1 . -1)
       e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g''
     }
   >>
@@ -2947,7 +3265,9 @@ centrale a, per esempio, 1:
 Come vedi, la sovrascrittura si applica anche alla prima voce della seconda
 misura di otto note, ma a nessuna delle travature nella seconda voce.
 
-@subheading proprietà force-hshift
+@node La proprietà force-hshift
+@unnumberedsubsubsec La proprietà @code{force-hshift}
+@translationof The force-hshift property
 
 Possiamo vedere ora come applicare le correzioni finali all'esempio di Chopin
 introdotto alla fine del paragrafo @ref{I'm hearing Voices}, che avevamo
@@ -2994,13 +3314,13 @@ Ecco il risultato finale:
     \\
     {
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
     \\
     \\
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -3034,7 +3354,7 @@ e le pedalizzazioni.
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3046,21 +3366,20 @@ rhMusic = \relative c'' {
       \new Voice {
         \voiceTwo
         c,8~
-        % Reposition the c2 to the right of the merged note
-        \once \override NoteColumn #'force-hshift = #1.0
-        % Move the c2 out of the main note column
-        % so the merge will work
+        % Riposiziona il c2 a destra della nota unita
+        \once \override NoteColumn.force-hshift = #1.0
+        % Sposta il c2 fuori dalla colonna della nota principale
+        % in modo che l'unione di note (merge) funzioni
         \shiftOnn
         c2
       }
       \new Voice {
         \voiceThree
         s8
-        % Stem on the d2 must be down to permit merging
+        % Il gambo di d2 deve essere in giù per permettere l'unione delle note
         \stemDown
-        % Stem on the d2 should be invisible
-        \tweak Stem #'transparent ##t
-        \tweak Flag #'transparent ##t
+        % Il gambo di d2 deve essere invisibile
+        \tweak Stem.transparent ##t
         d2
       }
       \new Voice {
@@ -3237,7 +3556,7 @@ rispetto alla linea centrale del rigo.  Dunque la seguente sovrascrittura
 posizionata proprio prima della prima nota della legatura sposta la legatura
 3.5 mezzi spazi di rigo sopra la linea centrale:
 
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
 
 Questo completa la seconda battuta:
 
@@ -3246,7 +3565,7 @@ Questo completa la seconda battuta:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3326,7 +3645,7 @@ alla fine, ottenendo:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3401,7 +3720,7 @@ interferisca con i due Re.  Applicando queste modifiche abbiamo:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3473,7 +3792,7 @@ rendiamo il gambo trasparente e spostiamo il Do con la proprietà
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3487,7 +3806,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % Riposiziona il c2 a destra della nota unita
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % Sposta il c2 fuori dalla colonna della nota principale
         % in modo che l'unione di note funzioni
         \shiftOnn
@@ -3498,9 +3817,8 @@ rhMusic = \relative c'' {
         s8
         % Il gambo di d2 deve essere in giù per permettere l'unione delle note
         \stemDown
-        % Stem on the d2 should be invisible
-        \tweak Stem #'transparent ##t
-        \tweak Flag #'transparent ##t
+        % Il gambo di d2 deve essere invisibile
+        \tweak Stem.transparent ##t
         d2
       }
       \new Voice {
@@ -3542,17 +3860,23 @@ lhMusic = \relative c' {
 @translationof Further tweaking
 
 @menu
-* Altri usi delle modifiche::
-* Uso delle variabili per le modifiche::
+* Altri usi delle modifiche con \tweak::
+* Uso delle variabili per modificare la formattazione::
 * Fogli di stile::
 * Altre fonti di informazione::
 * Modifiche avanzate con Scheme::
 @end menu
 
-@node Altri usi delle modifiche
-@subsection Altri usi delle modifiche
+@node Altri usi delle modifiche con \tweak
+@subsection Altri usi delle modifiche con @code{\tweak}
 @translationof Other uses for tweaks
 
+@menu
+* Legature di valore tra note di voci diverse::
+* Simulare una corona nel MIDI::
+@end menu
+
+
 @cindex proprietà transparent, uso della
 @cindex oggetti, renderli invisibili
 @cindex togliere gli oggetti
@@ -3562,7 +3886,9 @@ lhMusic = \relative c' {
 @cindex oggetti invisibili
 @cindex legature di valore tra note di voci diverse
 
-@subheading Legature di valore tra note di voci diverse
+@node Legature di valore tra note di voci diverse
+@unnumberedsubsubsec Legature di valore tra note di voci diverse
+@translationof Tying notes across voices
 
 L'esempio seguente mostra come unire con legature di valore
 note appartenenti a voci diverse.  Di norma, solo le note nella
@@ -3584,8 +3910,7 @@ attraversare le voci:
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
+    \tweak Stem.transparent ##t
     b8~ b\noBeam
   }
 \\
@@ -3600,9 +3925,8 @@ possiamo allungarlo impostando la proprietà
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
-    \tweak Stem #'length #8
+    \tweak Stem.transparent ##t
+    \tweak Stem.length #8
     b8~ b\noBeam
   }
 \\
@@ -3610,7 +3934,41 @@ possiamo allungarlo impostando la proprietà
 >>
 @end lilypond
 
-@subheading Simulare una corona nel MIDI
+@funindex \single
+@cindex tweak, generato da un override
+
+Per @emph{sovrascrivere} (con @code{\override}) la trasparenza di un oggetto
+grafico, avremmo potuto usare la scorciatoia @code{\hide}, come spiegato
+in precedenza.  Ma la modifica manuale con @emph{\tweak} è un'operazione
+diversa, che riguarda solo le proprietà generate da una singola espressione
+musicale.  Tuttavia è possibile convertire le sovrascritture in @emph{tweak}
+usando @code{\single}. Questo ci permette di riscrivere l'esempio precedente
+in questo modo
+
+@lilypond[quote,fragment,relative=2,verbatim]
+<<
+  {
+    \single \hide Stem
+    \single \hide Flag
+    \tweak Stem.length #8
+    b8~ b\noBeam
+  }
+\\
+  { b8[ g] }
+>>
+@end lilypond
+
+In questo caso particolare, la differenza rispetto a @code{\once \hide} non
+è evidente.  La differenza è evidente quando ci sono vari oggetti che
+si trovano nello stesso punto del tempo musicale (come le teste delle note
+in un accordo).  In quel caso, @code{\once} avrà effetto su tutti quegli
+oggetti mentre @code{\single} solo su uno, ovvero quello generato
+dall'espressione musicale immediatamente seguente.
+
+
+@node Simulare una corona nel MIDI
+@unnumberedsubsubsec Simulare una corona nel MIDI
+@translationof Simulating a fermata in MIDI
 
 @cindex proprietà stencil, uso della
 @cindex corona, usarla nel MIDI
@@ -3619,7 +3977,7 @@ Per gli oggetti esterni al rigo è di solito preferibile sovrascrivere
 la proprietà @code{stencil} piuttosto che la proprietà @code{transparent}
 dell'oggetto se si desidera toglierlo dall'output.  Se si imposta la
 proprietà @code{stencil} su @code{#f} l'oggetto verrà completamente
-rimosso dall'output e quindi non potrà influenzare la disposizone
+rimosso dall'output e quindi non potrà influenzare la disposizione
 di altri oggetti posizionati rispetto a esso.
 
 Ad esempio, se volessimo modificare il segno di metronomo solo per
@@ -3639,7 +3997,7 @@ il modo migliore è impostare la proprietà @code{stencil} su
     % Indicazione di tempo visibile
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'transparent = ##t
+    \once \hide Score.MetronomeMark
     % Indicazione di tempo invisibile per allungare la fermata nel MIDI
     \tempo 4=80
     a4\fermata |
@@ -3662,7 +4020,7 @@ il modo migliore è impostare la proprietà @code{stencil} su
     % Indicazione di tempo visibile
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'stencil = ##f
+    \once \omit Score.MetronomeMark
     % Indicazione di tempo invisibile per allungare la fermata nel MIDI
     \tempo 4=80
     a4\fermata |
@@ -3686,13 +4044,13 @@ viene tolto lo stampo (@emph{stencil}), ciò non accade.
 Glossario musicale:
 @rglosnamed{system,sistema}.
 
-@node Uso delle variabili per le modifiche
-@subsection Uso delle variabili per le modifiche
-@translationof Using variables for tweaks
+@node Uso delle variabili per modificare la formattazione
+@subsection Uso delle variabili per modificare la formattazione
+@translationof Using variables for layout adjustments
 
-@cindex variabili, usarle per le modifiche
-@cindex usare le variabili per le modifiche
-@cindex modifiche, usare le variabili per le
+@cindex variabili, usarle per le sovrascritture
+@cindex sovrascritture, usare le variabili per
+@cindex formattazione, usare le variabili per modificare la
 
 I comandi di sovrascrittura sono spesso lunghi e tediosi da
 scrivere, e devono essere assolutamente corretti.  Se si usa
@@ -3708,11 +4066,11 @@ le parole stesse non si possono usare variabili semplici.  Come
 alternativa possiamo usare i comandi @code{\override} e @code{\revert}?
 
 @example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
 
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
 @end example
 
 Anche questi sarebbero molto noiosi da inserire se ci fossero
@@ -3733,13 +4091,13 @@ rapidamente:
 
 @lilypond[quote,verbatim]
 emphasize = {
-  \override Lyrics.LyricText #'font-shape = #'italic
-  \override Lyrics.LyricText #'font-series = #'bold
+  \override Lyrics.LyricText.font-shape = #'italic
+  \override Lyrics.LyricText.font-series = #'bold
 }
 
 normal = {
-  \revert Lyrics.LyricText #'font-shape
-  \revert Lyrics.LyricText #'font-series
+  \revert Lyrics.LyricText.font-shape
+  \revert Lyrics.LyricText.font-series
 }
 
 global = { \key c \major \time 4/4 \partial 4 }
@@ -3802,18 +4160,15 @@ parti che hanno @code{#()}; verranno spiegate nel capitolo
 
 @lilypond[quote,verbatim,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -3835,18 +4190,16 @@ piuttosto brutti, dunque nascondiamoli in un altro file:
 @example
 %%% salva queste righe in un file chiamato "definitions.ily"
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
+
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 @end example
 
 Ci riferiremo a questo file tramite il comando @code{\include} in cima
@@ -3872,18 +4225,15 @@ Ora modifichiamo la musica (e salviamo questo file come @file{music.ly}).
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -3907,66 +4257,60 @@ questo modo:
 @example
 %%%  definitions.ily
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \layout{
   \context {
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context {
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   }
   \context {
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -3990,63 +4334,57 @@ la dimensione complessiva dell'output.
 @example
 %%%  web-publish.ily
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 #(set-global-staff-size 23)
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 #(set-global-staff-size 23)
 
 \layout{
   \context { \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context { \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4110,7 +4448,7 @@ da lilypond.org oppure installandolo da un gestore di pacchetti
 (come nelle distribuzioni GNU/Linux o nelle istallazioni tramite
 fink o cygwin) o compilandolo dai sorgenti:
 
-@strong{Scaricato da lilypond.org}
+@subsubheading Scaricato da lilypond.org
 
 @itemize @bullet
 @item GNU/Linux
@@ -4140,7 +4478,7 @@ Con Windows Explorer vai in
 
 @end itemize
 
-@strong{Istallato da un gestore di pacchetti o compilato da sorgenti}
+@subsubheading Istallato da un gestore di pacchetti o compilato da sorgenti
 
 Vai in
 @file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, dove
@@ -4168,8 +4506,8 @@ contengono uno o più comandi @code{\override}.  Ad esempio,
 
 @example
 tieDotted = @{
-  \override Tie #'dash-period = #0.75
-  \override Tie #'dash-fraction = #0.1
+  \override Tie.dash-period = #0.75
+  \override Tie.dash-fraction = #0.1
 @}
 @end example
 
@@ -4271,11 +4609,10 @@ note in base alla loro posizione sul rigo.
 
 \relative c' {
   % Fa sì che il colore sia preso dalla procedura color-notehead
-  \override NoteHead #'color = #color-notehead
+  \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
 }
 @end lilypond
 
 Altri esempi che mostrano l'uso di queste interfacce programmabili
 si trovano in @rextend{Callback functions}.
-
index cab85b411bfd5366f98c5c4af44259859a39e21d..4b681a834485d65c13f10dcb27d0e31aef0f0e30 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 @ignore
-    Translation of GIT committish: 08560a1b8076630c4fc6cb9b902614d8b74fd6fc
+    Translation of GIT committish: 00cd4ff0b8dc4978344ba966bec06ddbc445f7e9
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -39,7 +39,6 @@ Copyright @copyright{} 1999--2012 degli autori.
 @end ignore
 
 @c Translators: Federico Bruni
-@c Translation checkers: Luca Rossetto Casel
 
 @lilyTitlePage{Guida alla Notazione}
 
@@ -58,7 +57,6 @@ Appendici
 
 * Notation manual tables::    Tabelle e diagrammi. @c Tabelle del manuale di notazione
 * Cheat sheet::                    Sommario della sintassi di LilyPond.
-* Grammatica di LilyPond::         Diagramma della sintassi per l'analizzatore sintattico di LilyPond.
 * GNU Free Documentation License:: Licenza di questo documento.
 * Indice dei comandi di LilyPond::
 * Indice di LilyPond::
@@ -85,16 +83,6 @@ Appendici
 
 
 
-@node Grammatica di LilyPond
-@appendix Grammatica di LilyPond
-@translationof LilyPond grammar
-
-Questa appendice contiene una descrizione della grammatica di LilyPond, come
-generata dall'analizzatore sintattico.
-
-@verbatiminclude ly-grammar.txt
-
-
 @include fdl.itexi
 
 
diff --git a/Documentation/it/notation/GNUmakefile b/Documentation/it/notation/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
diff --git a/Documentation/it/notation/editorial.itely b/Documentation/it/notation/editorial.itely
new file mode 100644 (file)
index 0000000..03d2e38
--- /dev/null
@@ -0,0 +1,711 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+@ignore
+    Translation of GIT committish: ed1acf4b9b63f6acdb4feb24eb4acf3f83548319
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.17.11"
+
+@c Translators: Federico Bruni
+@c Translation checkers:
+
+@node Note editoriali
+@section Note editoriali
+@translationof Editorial annotations
+
+@lilypondfile[quote]{editorial-headword.ly}
+
+Questa sezione tratta dei vari modi con cui cambiare l'aspetto delle note e
+aggiungere un'analisi o un accento didattico.
+
+@menu
+* Interne al rigo::
+* Esterne al rigo::
+@end menu
+
+
+@node Interne al rigo
+@subsection Interne al rigo
+@translationof Inside the staff
+
+Questa sezione spiega come aggiungere enfasi agli elementi interni al rigo.
+
+@menu
+* Scelta della dimensione del tipo di carattere::
+* Indicazioni di diteggiatura::
+* Note nascoste::
+* Colorare gli oggetti::
+* Parentesi::
+* Gambi::
+@end menu
+
+@node Scelta della dimensione del tipo di carattere
+@unnumberedsubsubsec Scelta della dimensione del tipo di carattere
+@translationof Selecting notation font size
+
+@cindex tipo di carattere, ridimensionamento
+@cindex dimensione del tipo di carattere (elementi della notazione)
+@cindex scelta della dimensione del tipo di carattere (per gli elementi della notazione)
+@cindex notazione, dimensione del tipo di carattere
+@cindex teste di nota
+
+@funindex fontSize
+@funindex font-size
+@funindex magstep
+@funindex \huge
+@funindex \large
+@funindex \normalsize
+@funindex \small
+@funindex \tiny
+@funindex \teeny
+@funindex huge
+@funindex large
+@funindex normalsize
+@funindex small
+@funindex tiny
+@funindex teeny
+
+È possibile modificare la dimensione del tipo di carattere degli elementi
+della notazione.  Tale modifica non altera la dimensione di altri simboli
+variabili, come le travature o le legature di portamento.
+
+@warning{Per informazioni sulla dimensione del tipo di carattere per il
+testo, si veda @ref{Selecting font and font size}.}
+
+@lilypond[verbatim,quote,relative=2]
+\huge
+c4.-> d8---3
+\large
+c4.-> d8---3
+\normalsize
+c4.-> d8---3
+\small
+c4.-> d8---3
+\tiny
+c4.-> d8---3
+\teeny
+c4.-> d8---3
+@end lilypond
+
+Internamente, questi comandi impostano la proprietà @code{fontSize}.  In questo
+modo la proprietà @code{font-size} viene impostata per tutti gli oggetti della
+formattazione.  Il valore di @code{font-size} è un numero che indica la
+dimensione relativa alla dimensione standard per l'altezza del rigo corrente.
+Ogni grado in su corrisponde a un aumento di circa il 12% della dimensione
+del tipo di carattere.  Sei gradi corrispondono esattamente a un fattore
+di due.  La funzione Scheme @code{magstep} converte un numero di @code{font-size}
+in un fattore di ridimensionamento.  Si può impostare la proprietà
+@code{font-size} anche direttamente, in modo da agire solo su certi
+oggetti di formattazione.
+
+@lilypond[verbatim,quote,relative=2]
+\set fontSize = #3
+c4.-> d8---3
+\override NoteHead.font-size = #-4
+c4.-> d8---3
+\override Script.font-size = #2
+c4.-> d8---3
+\override Stem.font-size = #-5
+c4.-> d8---3
+@end lilypond
+
+@cindex dimensione del tipo di carattere standard (per gli elementi della notazione)
+@cindex tipo di carattere standard (per gli elementi della notazione)
+
+@funindex font-interface
+@funindex font-size
+
+La modifica della dimensione del tipo di carattere si ottiene ridimensionando
+la dimensione, tra quelle predefinite, più vicina a quella desiderata.  La
+dimensione standard (per @w{@code{font-size = #0}}) dipende dall'altezza
+standard del rigo: per un rigo di 20pt, viene scelto un tipo di carattere
+di 10pt.
+
+La proprietà @code{font-size} si può impostare soltanto sugli oggetti di
+formattazione che usano i tipi di carattere, ovvero quegli oggetti che
+supportano l'interfaccia di formattazione @code{font-interface}.
+
+
+@predefined
+@code{\teeny},
+@code{\tiny},
+@code{\small},
+@code{\normalsize},
+@code{\large},
+@code{\huge}.
+@endpredefined
+
+@seealso
+Frammenti:
+@rlsr{Editorial annotations}.
+
+Guida al funzionamento interno:
+@rinternals{font-interface}.
+
+
+@node Indicazioni di diteggiatura
+@unnumberedsubsubsec Indicazioni di diteggiatura
+@translationof Fingering instructions
+
+@cindex diteggiatura
+@cindex dita, cambio
+
+@funindex \finger
+@funindex finger
+
+Le indicazioni di diteggiatura si inseriscono con
+@samp{@var{nota}-@var{numero}}:
+
+@lilypond[verbatim,quote,relative=2]
+c4-1 d-2 f-4 e-3
+@end lilypond
+
+Si può usare il testo incluso dentro @code{\markup} o tra virgolette per
+indicare un cambio di dito.
+
+@lilypond[verbatim,quote,relative=2]
+c4-1 d-2 f\finger \markup \tied-lyric #"4~3" c\finger "2 - 3"
+@end lilypond
+
+@cindex pollice, indicazione
+
+@funindex \thumb
+@funindex thumb
+
+Si può aggiungere il simbolo del pollice  per indicare che una nota deve essere
+suonata col pollice (ad esempio, nella musica per violoncello).
+
+@lilypond[verbatim,quote,relative=2]
+<a_\thumb a'-3>2 <b_\thumb b'-3>
+@end lilypond
+
+@cindex diteggiatura per accordi
+@cindex indicazioni di diteggiatura per accordi
+@cindex accordi, diteggiatura
+
+È possibile indicare la diteggiatura di ogni singola nota di un
+accordo specificandola dopo ciascuna altezza.
+
+@lilypond[verbatim,quote,relative=2]
+<c-1 e-2 g-3 b-5>2 <d-1 f-2 a-3 c-5>
+@end lilypond
+
+Le indicazioni di diteggiatura possono essere poste sopra o sotto il
+rigo, come è spiegato in @ref{Direction and placement}.
+
+@snippets
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{controlling-the-placement-of-chord-fingerings.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{allowing-fingerings-to-be-printed-inside-the-staff.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{avoiding-collisions-with-chord-fingerings.ly}
+
+@seealso
+Guida alla notazione:
+@ref{Direction and placement}.
+
+Frammenti:
+@rlsr{Editorial annotations}.
+
+Guida al funzionamento interno:
+@rinternals{FingeringEvent},
+@rinternals{fingering-event},
+@rinternals{Fingering_engraver},
+@rinternals{New_fingering_engraver},
+@rinternals{Fingering}.
+
+
+@node Note nascoste
+@unnumberedsubsubsec Note nascoste
+@translationof Hidden notes
+
+@cindex note nascoste
+@cindex note invisibili
+@cindex note trasparenti
+@cindex nascoste, note
+@cindex invisibili, note
+@cindex trasparenti, note
+
+@funindex \hideNotes
+@funindex hideNotes
+@funindex \unHideNotes
+@funindex unHideNotes
+
+Le note nascoste (o invisibili o trasparenti) possono essere utili nella
+preparazione di esercizi di teoria e composizione.
+
+@lilypond[verbatim,quote,relative=2]
+c4 d
+\hideNotes
+e4 f
+\unHideNotes
+g a
+\hideNotes
+b
+\unHideNotes
+c
+@end lilypond
+
+Questo comando rende invisibili le teste, i gambi e le code delle note, e
+le pause.  Le travature sono invisibili se iniziano su una nota
+nascosta.  Mentre gli oggetti attaccati a note invisibili sono comunque visibili.
+
+@lilypond[verbatim,quote,relative=2]
+e8(\p f g a)--
+\hideNotes
+e8(\p f g a)--
+@end lilypond
+
+
+@predefined
+@code{\hideNotes},
+@code{\unHideNotes}.
+@endpredefined
+
+@seealso
+Manuale d'apprendimento:
+@rlearning{Visibilità e colore degli oggetti}.
+
+Guida alla notazione:
+@ref{Invisible rests},
+@ref{Visibility of objects},
+@ref{Hiding staves}.
+
+Frammenti:
+@rlsr{Editorial annotations}.
+
+Guida al funzionamento interno:
+@rinternals{Note_spacing_engraver},
+@rinternals{NoteSpacing}.
+
+
+@node Colorare gli oggetti
+@unnumberedsubsubsec Colorare gli oggetti
+@translationof Coloring objects
+
+@cindex oggetti colorati
+@cindex colorati, oggetti
+@cindex colori
+@cindex colorare gli oggetti
+@cindex note colorate
+@cindex colorare le note
+@cindex colorate, note
+@cindex x11, colore
+@cindex x11-color
+@cindex with-color
+
+@funindex color
+@funindex \with-color
+@funindex with-color
+@funindex x11-color
+
+Si possono assegnare dei colori a ciascun oggetto.  I nomi dei colori validi
+sono elencati nella @ref{List of colors}.
+
+@lilypond[verbatim,quote,relative=2]
+\override NoteHead.color = #red
+c4 c
+\override NoteHead.color = #(x11-color 'LimeGreen)
+d
+\override Stem.color = #blue
+e
+@end lilypond
+
+
+Si può accedere all'intera gamma di colori definita per X11 con la
+funzione Scheme @code{x11-color}.  La funzione prende un argomento,
+che può essere un simbolo nella forma @code{'@var{FooBar}} o una
+stringa nella forma @code{"@var{FooBar}"}.  La prima forma è più
+veloce da scrivere e più efficiente.  Tuttavia, la seconda forma
+permette di accedere ai colori X11 attraverso la forma del nome
+che ha più di una parola.
+
+La funzione @code{x11-color}, se non riesce a comprendere il parametro,
+restituisce il colore nero.
+
+@lilypond[verbatim,quote,relative=2]
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
+\set Staff.instrumentName = \markup {
+  \with-color #(x11-color 'navy) "Clarinet"
+}
+
+gis8 a
+\override Beam.color = #(x11-color "medium turquoise")
+gis a
+\override Accidental.color = #(x11-color 'DarkRed)
+gis a
+\override NoteHead.color = #(x11-color "LimeGreen")
+gis a
+% questo parametro è volutamente assurdo; notare che i gambi restano neri
+\override Stem.color = #(x11-color 'Boggle)
+b2 cis
+@end lilypond
+
+@cindex rgb-color
+@cindex colore rgb
+@cindex rgb, colore
+
+@funindex rgb-color
+
+I colori RGB esatti si specificano con la funzione Scheme @code{rgb-color}.
+
+@lilypond[verbatim,quote,relative=2]
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
+\set Staff.instrumentName = \markup {
+  \with-color #(x11-color 'navy) "Clarinet"
+}
+
+\override Stem.color = #(rgb-color 0 0 0)
+gis8 a
+\override Stem.color = #(rgb-color 1 1 1)
+gis8 a
+\override Stem.color = #(rgb-color 0 0 0.5)
+gis4 a
+@end lilypond
+
+@seealso
+Guida alla notazione:
+@ref{List of colors}, @ref{The
+tweak command}.
+
+Frammenti:
+@rlsr{Editorial annotations}.
+
+@cindex colore x11
+@cindex note colorate negli accordi
+@cindex colore negli accordi
+
+@funindex x11-color
+
+@knownissues
+Un colore X11 non ha necessariamente la stessa identica tonalità di un
+normale colore dal nome simile.
+
+Non tutti i colori X11 sono distinguibili in un browser web.  Per esempio,
+un browser potrebbe non mostrare alcuna differenza tra @code{LimeGreen}
+e @code{ForestGreen}.  Per il web si consiglia di usare i colori normali
+(ovvero @code{blue}, @code{green}, @code{red}).
+
+Le note in un accordo non possono essere colorate con un @code{\override}; al
+suo posto si usa @code{\tweak}, vedi @ref{The tweak command}.
+
+
+@node Parentesi
+@unnumberedsubsubsec Parentesi
+@translationof Parentheses
+
+@cindex ghost notes
+@cindex note fantasma
+@cindex note tra parentesi
+@cindex parentesi quadre
+
+@funindex \parenthesize
+@funindex parenthesize
+
+Gli oggetti possono essere messi tra parentesi se si usa il comando @code{\parenthesize}
+prima dell'evento musicale.  Se precede un accordo, viene messa tra parentesi
+ogni nota dell'accordo.  Si possono mettere tra parentesi anche singole note
+di un accordo.
+
+@lilypond[verbatim,quote,relative=2]
+c2 \parenthesize d
+c2 \parenthesize <c e g>
+c2 <c \parenthesize e g>
+@end lilypond
+
+Si possono mettere tra parentesi anche oggetti diversi dalle note.  Per le
+articolazioni è necessario usare un trattino prima del comando @code{\parenthesize}.
+
+@lilypond[verbatim,quote,relative=2]
+c2-\parenthesize -. d
+c2 \parenthesize r
+@end lilypond
+
+@seealso
+Frammenti:
+@rlsr{Editorial annotations}.
+
+Guida al funzionamento interno:
+@rinternals{Parenthesis_engraver},
+@rinternals{ParenthesesItem},
+@rinternals{parentheses-interface}.
+
+@knownissues
+Se si mette tra parentesi un accordo, viene creata una parentesi per ogni
+nota dell'accordo invece di una sola grande parentesi per l'intero accordo.
+
+
+@node Gambi
+@unnumberedsubsubsec Gambi
+@translationof Stems
+
+@cindex gambo
+@cindex gambo invisibile
+@cindex invisibile, gambo
+
+@funindex \stemUp
+@funindex stemUp
+@funindex \stemDown
+@funindex stemDown
+@funindex \stemNeutral
+@funindex stemNeutral
+@cindex gambo, direzione
+@cindex gambo, su
+@cindex gambo, giù
+@cindex gambo, neutrale
+
+Per ogni nota viene creato automaticamente un oggetto @code{Stem} (gambo).
+Vale anche per le semibrevi e le pause, anche se i loro gambi sono resi
+invisibili.
+
+I gambi si possono posizionare sopra o sotto, vedi
+@ref{Direction and placement}.
+
+
+@predefined
+@code{\stemUp},
+@code{\stemDown},
+@code{\stemNeutral}.
+@endpredefined
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{default-direction-of-stems-on-the-center-line-of-the-staff.ly}
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly}
+
+@seealso
+Guida alla notazione:
+@ref{Direction and placement}.
+
+Frammenti:
+@rlsr{Editorial annotations}.
+
+Guida al funzionamento interno:
+@rinternals{Stem_engraver},
+@rinternals{Stem},
+@rinternals{stem-interface}.
+
+
+@node Esterne al rigo
+@subsection Esterne al rigo
+@translationof Outside the staff
+
+Questa sezione spiega come dare risalto agli elementi nel rigo attraverso
+delle note esterne al rigo.
+
+@menu
+* Nuvoletta di aiuto::
+* Linee della griglia::
+* Parentesi analitiche::
+@end menu
+
+@node Nuvoletta di aiuto
+@unnumberedsubsubsec Nuvoletta di aiuto
+@translationof Balloon help
+
+@cindex nuvoletta
+@cindex notazione, spiegare la
+@cindex nuvoletta di aiuto
+@cindex aiuto, nuvoletta
+
+@funindex \balloonGrobText
+@funindex \balloonText
+@funindex Balloon_engraver
+@funindex balloonGrobText
+@funindex balloonText
+@funindex \balloonLengthOn
+@funindex balloonLengthOn
+@funindex \balloonLengthOff
+@funindex balloonLengthOff
+
+Si possono contrassegnare e nominare gli elementi della notazione tramite
+una nuvoletta quadrata.  La sua funzione principale è spiegare la notazione.
+
+@lilypond[verbatim,quote,relative=2]
+\new Voice \with { \consists "Balloon_engraver" }
+{
+  \balloonGrobText #'Stem #'(3 . 4) \markup { "Sono un gambo" }
+  a8
+  \balloonGrobText #'Rest #'(-4 . -4) \markup { "Sono una pausa" }
+  r
+  <c, g'-\balloonText #'(-2 . -2) \markup { "Sono la testa di una nota" } c>2.
+}
+@end lilypond
+
+
+Ci sono due funzioni musicali, @code{balloonGrobText} e
+@code{balloonText};  la prima si usa nella forma
+@w{@code{\once \override}} per attaccare del testo a un qualsiasi
+oggetto grafico (grob), mentre la seconda viene usata come
+@code{\tweak}, solitamente all'interno degli accordi, per
+attaccare del testo a una singola nota.
+
+Il testo nella nuvoletta influenza la spaziatura delle note,
+ma è possibile modificare questo comportamento:
+
+@lilypond[verbatim,quote,relative=2]
+\new Voice \with { \consists "Balloon_engraver" }
+{
+  \balloonGrobText #'Stem #'(3 . 4) \markup { "Sono un gambo" }
+  a8
+  \balloonGrobText #'Rest #'(-4 . -4) \markup { "Sono una pausa" }
+  r
+  \balloonLengthOn
+  <c, g'-\balloonText #'(-2 . -2) \markup { "Sono la testa di una nota" } c>2.
+}
+@end lilypond
+
+@predefined
+@code{\balloonLengthOn},
+@code{\balloonLengthOff}.
+@endpredefined
+
+@seealso
+Frammenti:
+@rlsr{Editorial annotations}.
+
+Guida al funzionamento interno:
+@rinternals{Balloon_engraver},
+@rinternals{BalloonTextItem},
+@rinternals{balloon-interface}.
+
+
+@node Linee della griglia
+@unnumberedsubsubsec Linee della griglia
+@translationof Grid lines
+
+@cindex griglie
+@cindex linee verticali tra i righi
+
+@funindex Grid_point_engraver
+@funindex Grid_line_span_engraver
+@funindex gridInterval
+
+Si possono disegnare delle linee verticali tra i righi sincronizzate con le
+note.
+
+Si deve usare l'incisore @code{Grid_point_engraver} per creare le
+estremità delle linee, mentre l'incisore @code{Grid_line_span_engraver} serve
+a disegnare le linee.  Per impostazione predefinita, le linee della griglia sono
+allineate orizzontalmente sotto e sul lato sinistro delle teste di nota.
+Le linee  si estendono a partire dalle linee centrali di ciascun rigo.
+@code{gridInterval} deve specificare la durata che separa le linee.
+
+@lilypond[verbatim,quote]
+\layout {
+  \context {
+    \Staff
+    \consists "Grid_point_engraver"
+    gridInterval = #(ly:make-moment 1/4)
+  }
+  \context {
+    \Score
+    \consists "Grid_line_span_engraver"
+  }
+}
+
+\score {
+  \new ChoirStaff <<
+    \new Staff \relative c'' {
+      \stemUp
+      c4. d8 e8 f g4
+    }
+    \new Staff \relative c {
+      \clef bass
+      \stemDown
+      c4 g' f e
+    }
+  >>
+}
+@end lilypond
+
+@snippets
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{grid-lines--changing-their-appearance.ly}
+
+@seealso
+Frammenti:
+@rlsr{Editorial annotations}.
+
+Guida al funzionamento interno:
+@rinternals{Grid_line_span_engraver},
+@rinternals{Grid_point_engraver},
+@rinternals{GridLine},
+@rinternals{GridPoint},
+@rinternals{grid-line-interface},
+@rinternals{grid-point-interface}.
+
+
+@node Parentesi analitiche
+@unnumberedsubsubsec Parentesi analitiche
+@translationof Analysis brackets
+
+@cindex parentesi
+@cindex parentesi, fraseggio
+@cindex analisi musicologica
+@cindex musicologia, analisi
+@cindex parentesi di raggruppamento delle note
+@cindex parentesi orizzontale
+
+@funindex Horizontal_bracket_engraver
+@funindex \startGroup
+@funindex startGroup
+@funindex \stopGroup
+@funindex stopGroup
+
+Nell'analisi musicale si usano le parentesi per indicare la struttura
+dei brani musicali.  Sono  supportate delle semplici parentesi orizzontali.
+
+@lilypond[verbatim,quote]
+\layout {
+  \context {
+    \Voice
+    \consists "Horizontal_bracket_engraver"
+  }
+}
+\relative c'' {
+  c2\startGroup
+  d\stopGroup
+}
+@end lilypond
+
+Le parentesi analitiche si possono annidare.
+
+@lilypond[verbatim,quote]
+\layout {
+  \context {
+    \Voice
+    \consists "Horizontal_bracket_engraver"
+  }
+}
+\relative c'' {
+  c4\startGroup\startGroup
+  d4\stopGroup
+  e4\startGroup
+  d4\stopGroup\stopGroup
+}
+@end lilypond
+
+@seealso
+Frammenti:
+@rlsr{Editorial annotations}.
+
+Guida al funzionamento interno:
+@rinternals{Horizontal_bracket_engraver},
+@rinternals{HorizontalBracket},
+@rinternals{horizontal-bracket-interface},
+@rinternals{Staff}.
+
+@c  LocalWords:  gis
diff --git a/Documentation/it/notation/expressive.itely b/Documentation/it/notation/expressive.itely
new file mode 100644 (file)
index 0000000..86e9ad2
--- /dev/null
@@ -0,0 +1,1387 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
+@ignore
+    Translation of GIT committish: 48a57a1c8feb426029e059d9fbf8aaf1b14f0ff8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.17.25"
+
+@c Translators: Federico Bruni
+@c Translation checkers: Luca Rossetto Casel
+
+@node Segni di espressione
+@section Segni di espressione
+@translationof Expressive marks
+
+@lilypondfile[quote]{expressive-headword.ly}
+
+Questa sezione elenca vari segni di espressione che si possono
+usare in una partitura.
+
+@menu
+* Segni di espressione collegati alle note::
+* Indicazioni espressive curvilinee::
+* Indicazioni espressive lineari::
+@end menu
+
+
+@node Segni di espressione collegati alle note
+@subsection Segni di espressione collegati alle note
+@translationof Expressive marks attached to notes
+
+Questa sezione spiega come creare segni di espressione
+collegati alle note: articolazioni, abbellimenti e dinamiche.
+Sono trattati anche i metodi per creare nuove indicazioni dinamiche.
+
+@menu
+* Articolazioni e abbellimenti::
+* Dinamiche::
+* Nuove indicazioni dinamiche::
+@end menu
+
+@node Articolazioni e abbellimenti
+@unnumberedsubsubsec Articolazioni e abbellimenti
+@translationof Articulations and ornamentations
+
+@cindex articolazioni
+@cindex abbellimenti
+@cindex script
+@cindex espressivo
+@cindex corona
+@cindex arcata in su
+@cindex arcata in giù
+@cindex segni del pedale
+@cindex segni del pedale dell'organo
+@cindex organo, segni del pedale
+@cindex pedale, segni
+@cindex gruppetto (\turn)
+@cindex aperto (\open)
+@cindex chiuso (\stopped)
+@cindex armonico (\flageolet)
+@cindex gruppetto rovesciato (\reverseturn)
+@cindex trillo (\trill)
+@cindex mordente superiore (\prall)
+@cindex mordente inferiore (\mordent)
+@cindex doppio mordente (\prallprall)
+@cindex doppio mordente (\prallmordent)
+@cindex mordente superiore, su
+@cindex mordente superiore, giù
+@cindex mordente inferiore, su
+@cindex mordente inferiore, giù
+@cindex segno del pollice (\thumb)
+@cindex pollice, segno del (\thumb)
+@cindex segno
+@cindex coda
+@cindex varcoda
+
+@funindex \accent
+@funindex \marcato
+@funindex \staccatissimo
+@funindex \espressivo
+@funindex \staccato
+@funindex \tenuto
+@funindex \portato
+@funindex \upbow
+@funindex \downbow
+@funindex \flageolet
+@funindex \thumb
+@funindex \lheel
+@funindex \rheel
+@funindex \ltoe
+@funindex \rtoe
+@funindex \open
+@funindex \halfopen
+@funindex \stopped
+@funindex \snappizzicato
+@funindex \turn
+@funindex \reverseturn
+@funindex \trill
+@funindex \prall
+@funindex \mordent
+@funindex \prallprall
+@funindex \prallmordent
+@funindex \upprall
+@funindex \downprall
+@funindex \upmordent
+@funindex \downmordent
+@funindex \pralldown
+@funindex \prallup
+@funindex \lineprall
+@funindex \signumcongruentiae
+@funindex \shortfermata
+@funindex \fermata
+@funindex \longfermata
+@funindex \verylongfermata
+@funindex \fermataMarkup
+@funindex \segno
+@funindex \coda
+@funindex \varcoda
+
+
+@funindex -
+
+I diversi simboli che rappresentano articolazioni, ornamenti e altre
+indicazioni esecutive possono essere collegati a una nota con questa
+sintassi:
+
+@example
+@var{nota}\@var{nome}
+@end example
+
+I valori possibili per @code{@var{nome}} sono elencati in
+@ref{List of articulations}.  Ad esempio:
+
+@lilypond[verbatim,quote,relative=2]
+c4\staccato c\mordent b2\turn
+c1\fermata
+@end lilypond
+
+@cindex marcato
+@cindex tenuto
+@cindex staccatissimo
+@cindex accento
+@cindex staccato
+@cindex portato
+
+Alcune di queste articolazioni hanno delle abbreviazioni che ne semplificano
+l'inserimento.  Le abbreviazioni sono attaccate al nome della nota e la
+loro sintassi è composta da un trattino @code{-} seguito da un simbolo
+che indica l'articolazione.  Esistono abbreviazioni predefinite per
+@notation{marcato}, @notation{chiuso}, @notation{tenuto}, @notation{staccatissimo},
+@notation{accento}, @notation{staccato} e @notation{portato}.
+L'output corrispondente è:
+
+@lilypond[verbatim,quote,relative=2]
+c4-^ c-+ c-- c-!
+c4-> c-. c2-_
+@end lilypond
+
+Le regole per il posizionamento predefinito delle articolazioni sono
+definite in @file{scm/script.scm}.  Articolazioni e ornamenti possono
+essere posizionati manualmente sopra o sotto il rigo; si veda
+@ref{Direction and placement}.
+
+Le articolazioni sono oggetti @code{Script}.  Le loro proprietà sono
+descritte in dettaglio in @rinternals{Script}.
+
+Le articolazioni possono essere attaccate alle pause e alle note ma
+non alle pause multiple.  Esiste un comando speciale predefinito,
+@code{\fermataMarkup}, che permette di attaccare un segno di corona
+a una pausa multipla (e soltanto ad essa).  Questo crea un oggetto
+@code{MultiMeasureRestText}.
+
+@lilypond[verbatim,quote,relative=2]
+\override Script.color = #red
+\override MultiMeasureRestText.color = #blue
+a2\fermata r\fermata
+R1\fermataMarkup
+@end lilypond
+
+Oltre alle articolazioni, si può attaccare alle note anche un testo,
+posto tra virgolette o in un blocco @code{\markup@{@}}.  Si veda @ref{Text scripts}.
+
+Ulteriori informazioni sull'ordine degli oggetti Script e TextScript
+collegati alle note si trovano in @rlearning{Posizionamento degli oggetti}.
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{modifying-default-values-for-articulation-shorthand-notation.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{controlling-the-vertical-ordering-of-scripts.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{creating-a-delayed-turn.ly}
+
+@seealso
+Glossario Musicale:
+@rglos{tenuto},
+@rglosnamed{accent,accento},
+@rglos{staccato},
+@rglos{portato}.
+
+Manuale di apprendimento:
+@rlearning{Posizionamento degli oggetti}.
+
+Guida alla notazione:
+@ref{Text scripts},
+@ref{Direction and placement},
+@ref{List of articulations},
+@ref{Trills}.
+
+File installati:
+@file{scm/script.scm}.
+
+Frammenti:
+@rlsr{Expressive marks}.
+
+Guida al funzionamento interno:
+@rinternals{Script},
+@rinternals{TextScript}.
+
+
+@node Dinamiche
+@unnumberedsubsubsec Dinamiche
+@translationof Dynamics
+
+@cindex dinamiche
+@cindex dinamiche assolute
+
+@funindex \ppppp
+@funindex ppppp
+@funindex \pppp
+@funindex pppp
+@funindex \ppp
+@funindex ppp
+@funindex \pp
+@funindex pp
+@funindex \p
+@funindex p
+@funindex \mp
+@funindex mp
+@funindex \mf
+@funindex mf
+@funindex \f
+@funindex f
+@funindex \ff
+@funindex ff
+@funindex \fff
+@funindex fff
+@funindex \ffff
+@funindex ffff
+@funindex \fffff
+@funindex fffff
+@funindex \fp
+@funindex fp
+@funindex \sf
+@funindex sf
+@funindex \sff
+@funindex sff
+@funindex \sp
+@funindex sp
+@funindex \spp
+@funindex spp
+@funindex \sfz
+@funindex sfz
+@funindex \rfz
+@funindex rfz
+
+Le indicazioni dinamiche assolute si indicano con un comando che segue una
+nota, come ad esempio @code{c4\ff}.  Le indicazioni dinamiche disponibili
+sono @code{\ppppp}, @code{\pppp}, @code{\ppp}, @code{\pp}, @code{\p},
+@code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, @code{\fff},
+@code{\ffff}, @code{\fffff}, @code{\fp}, @code{\sf}, @code{\sff},
+@code{\sp}, @code{\spp}, @code{\sfz} e @code{\rfz}.  Le indicazioni
+dinamiche possono essere posizionate manualmente sopra o sotto il
+rigo, come è spiegato in dettaglio in @ref{Direction and placement}.
+
+@lilypond[verbatim,quote,relative=2]
+c2\ppp c\mp
+c2\rfz c^\mf
+c2_\spp c^\ff
+@end lilypond
+
+@cindex forcella
+@cindex crescendo
+@cindex decrescendo
+@cindex diminuendo
+
+@funindex \<
+@funindex \>
+@funindex \!
+@funindex \cr
+@funindex cr
+@funindex \decr
+@funindex decr
+
+Un'indicazione di @notation{crescendo} inizia con @code{\<} e termina
+con @code{\!}, un'indicazione dinamica assoluta o un'ulteriore indicazione
+di crescendo o decrescendo.  Un'indicazione di @notation{decrescendo} inizia
+con @code{\>} e termina nello stesso modo, ovvero con @code{\!}, un'indicazione
+dinamica assoluta oppure un altro segno di crescendo o decrescendo.
+Si possono usare @code{\cr} e @code{\decr} al posto di @code{\<} e
+@code{\>}.  Le @notation{forcelle} vengono create con questa notazione.
+
+@lilypond[verbatim,quote,relative=2]
+c2\< c\!
+d2\< d\f
+e2\< e\>
+f2\> f\!
+e2\> e\mp
+d2\> d\>
+c1\!
+@end lilypond
+
+Una forcella che termina con @code{\!} si estenderà fino al margine
+destro della nota a cui è assegnato @code{\!}.  Nel caso in cui sia
+terminata con l'inizio di un altro segno di @notation{crescendo} o
+@notation{decrescendo}, si estenderà fino al centro della nota a
+cui è assegnato il successivo @code{\<} o @code{\>}.  La forcella
+successiva partirà dal margine destro della stessa nota invece che
+dal margine sinistro, come accade quando si termina con @code{\!}.
+
+@lilypond[verbatim,quote,relative=2]
+c1\< | c4 a c\< a | c4 a c\! a\< | c4 a c a\!
+@end lilypond
+
+Le forcelle terminate con indicazioni dinamiche assolute invece che da
+@code{\!} avranno un aspetto simile.  Tuttavia, la lunghezza dell'indicazione
+dinamica assoluta stessa può cambiare il punto in cui finisce la
+forcella precedente.
+
+@lilypond[verbatim,quote,relative=2]
+c1\< | c4 a c\mf a | c1\< | c4 a c\ffff a
+@end lilypond
+
+@cindex indicazioni dinamiche multiple su una nota
+@cindex indicazioni dinamiche, più di un segno su una nota
+
+Occorre usare le pause spaziatrici per attaccare più di un'indicazione a
+una nota.  Questo è utile soprattutto quando si aggiunge un
+@notation{crescendo} e un @notation{decrescendo} alla stessa nota:
+
+@lilypond[verbatim,quote,relative=2]
+c4\< c\! d\> e\!
+<< f1 { s4 s4\< s4\> s4\! } >>
+@end lilypond
+
+@cindex espressivo
+@cindex articolazione "espressivo"
+
+@funindex \espressivo
+@funindex espressivo
+
+Il comando @code{\espressivo} permette di indicare un crescendo e
+un decrescendo sulla stessa nota.  Tuttavia, si tenga presente che
+viene implementato come articolazione, non come dinamica.
+
+@lilypond[verbatim,quote,relative=2]
+c2 b4 a
+g1\espressivo
+@end lilypond
+
+@funindex \cresc
+@funindex cresc
+@funindex \decresc
+@funindex decresc
+@funindex \dim
+@funindex dim
+
+Le indicazioni di crescendo testuali iniziano con @code{\cresc}, quelle di
+decrescendo con @code{\decresc} o @code{\dim}.
+Le linee di estensione sono aggiunte automaticamente.
+
+@lilypond[verbatim,quote,relative=2]
+g8\cresc a b c b c d e\mf |
+f8\decresc e d c e\> d c b |
+a1\dim ~ |
+a2. r4\! |
+@end lilypond
+
+@funindex \crescTextCresc
+@funindex crescTextCresc
+@funindex \dimTextDecresc
+@funindex dimTextDecresc
+@funindex \dimTextDecr
+@funindex dimTextDecr
+@funindex \dimTextDim
+@funindex dimTextDim
+@funindex \crescHairpin
+@funindex crescHairpin
+@funindex \dimHairpin
+@funindex dimHairpin
+
+Le indicazioni testuali per i cambi di dinamica possono essere impiegate anche per sostituire le forcelle:
+@lilypond[verbatim,quote,relative=2]
+\crescTextCresc
+c4\< d e f\! |
+\dimTextDecresc
+g4\> e d c\! |
+\dimTextDecr
+e4\> d c b\! |
+\dimTextDim
+d4\> c b a\! |
+\crescHairpin
+\dimHairpin
+c4\< d\! e\> d\! |
+@end lilypond
+
+
+Per creare nuove indicazioni dinamiche assolute o testi da allineare
+alle dinamiche, si veda @ref{New dynamic marks}.
+
+@cindex dinamiche, posizionamento verticale
+@cindex posizionamento verticale delle dinamiche
+
+@funindex DynamicLineSpanner
+
+Il posizionamento verticale della dinamica è gestito da
+@rinternals{DynamicLineSpanner}.
+
+@funindex \dynamicUp
+@funindex dynamicUp
+@funindex \dynamicDown
+@funindex dynamicDown
+@funindex \dynamicNeutral
+@funindex dynamicNeutral
+
+Esiste un contesto @code{Dynamics} che permette di posizionare le indicazioni
+dinamiche su un'apposita linea orizzontale.  Si usano le pause spaziatrici
+per indicarne la collocazione temporale (le note in un contesto @code{Dynamics} occupano
+infatti il rispettivo valore musicale, ma senza comparire sul rigo).
+Il contesto @code{Dynamics} può contenere altri elementi utili come
+indicazioni testuali, estensori del testo e indicazioni di pedalizzazione del pianoforte.
+
+@lilypond[verbatim,quote]
+<<
+  \new Staff \relative c' {
+    c2 d4 e |
+    c4 e e,2 |
+    g'4 a g a |
+    c1 |
+  }
+  \new Dynamics {
+    s1\< |
+    s1\f |
+    s2\dim s2-"rit." |
+    s1\p |
+  }
+>>
+@end lilypond
+
+@predefined
+@code{\dynamicUp},
+@code{\dynamicDown},
+@code{\dynamicNeutral},
+@code{\crescTextCresc},
+@code{\dimTextDim},
+@code{\dimTextDecr},
+@code{\dimTextDecresc},
+@code{\crescHairpin},
+@code{\dimHairpin}.
+@endpredefined
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{setting-hairpin-behavior-at-bar-lines.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{setting-the-minimum-length-of-hairpins.ly}
+
+@cindex al niente
+@cindex niente, al
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{printing-hairpins-using-al-niente-notation.ly}
+
+@cindex forcelle Ferneyhough
+@cindex Ferneyhough, forcelle
+@cindex forcelle allargate (flared-hairpins)
+@cindex flared-hairpin
+@cindex forcelle continue (constante-hairpins)
+@cindex constante-hairpins
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{printing-hairpins-in-various-styles.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{vertically-aligned-dynamics-and-textscripts.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{hiding-the-extender-line-for-text-dynamics.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{changing-text-and-spanner-styles-for-text-dynamics.ly}
+
+@seealso
+Glossario Musicale:
+@rglos{al niente},
+@rglos{crescendo},
+@rglos{decrescendo},
+@rglosnamed{hairpin,forcella}.
+Manuale di apprendimento:
+@rlearning{Articolazione e dinamiche}.
+
+Guida alla notazione:
+@ref{Direction and placement},
+@ref{New dynamic marks},
+@ref{What goes into the MIDI output?},
+@ref{Controlling MIDI dynamics}.
+
+Frammenti:
+@rlsr{Expressive marks}.
+
+Guida al funzionamento interno:
+@rinternals{DynamicText},
+@rinternals{Hairpin},
+@rinternals{DynamicLineSpanner},
+@rinternals{Dynamics}.
+
+
+@node Nuove indicazioni dinamiche
+@unnumberedsubsubsec Nuove indicazioni dinamiche
+@translationof New dynamic marks
+
+@cindex indicazioni dinamiche nuove
+@cindex dinamica, nuovi segni di
+
+Il modo più semplice per creare indicazioni dinamiche è usare
+gli oggetti @code{\markup}.
+
+@lilypond[verbatim,quote]
+moltoF = \markup { molto \dynamic f }
+
+\relative c' {
+  <d e>16_\moltoF <d e>
+  <d e>2..
+}
+@end lilypond
+
+@cindex dinamiche editoriali
+@cindex dinamiche, parentesi
+@cindex editoriali, dinamiche
+@funindex \bracket
+@funindex bracket
+@funindex \dynamic
+@funindex dynamic
+
+In modalità markup, si possono creare dinamiche editoriali (racchiuse tra
+parentesi normali o quadrate).  La sintassi della modalità markup è
+descritta in @ref{Formatting text}.
+
+@lilypond[verbatim,quote]
+roundF = \markup {
+    \center-align \concat { \bold { \italic ( }
+           \dynamic f \bold { \italic ) } } }
+boxF = \markup { \bracket { \dynamic f } }
+\relative c' {
+  c1_\roundF
+  c1_\boxF
+}
+@end lilypond
+
+@cindex make-dynamic-script
+@funindex make-dynamic-script
+
+È possibile creare semplicemente indicazioni dinamiche centrate verticalmente con la
+funzione @code{make-dynamic-script}.
+
+@lilypond[verbatim,quote]
+sfzp = #(make-dynamic-script "sfzp")
+\relative c' {
+  c4 c c\sfzp c
+}
+@end lilypond
+
+In generale, @code{make-dynamic-script} assume come argomento qualsiasi
+oggetto markup.  Il tipo di carattere per la dinamica contiene solo i
+caratteri @code{f,m,p,r,s} e @code{z}; dunque, se si desidera creare un'indicazione
+dinamica che contenga testo semplice e simboli di punteggiatura, occorre
+usare dei comandi markup che ripristinino la famiglia e la codifica del tipo
+di carattere per il testo normale, ad esempio @code{\normal-text}.  Il
+vantaggio nell'uso di @code{make-dynamic-script} al posto di un normale
+markup è l'allineamento verticale degli oggetti markup e delle forcelle
+collegate alla stessa testa di nota.
+
+@lilypond[verbatim,quote]
+roundF = \markup { \center-align \concat {
+           \normal-text { \bold { \italic ( } }
+           \dynamic f
+           \normal-text { \bold { \italic ) } } } }
+boxF = \markup { \bracket { \dynamic f } }
+mfEspress = \markup { \center-align \line {
+              \hspace #3.7 mf \normal-text \italic espress. } }
+roundFdynamic = #(make-dynamic-script roundF)
+boxFdynamic = #(make-dynamic-script boxF)
+mfEspressDynamic = #(make-dynamic-script mfEspress)
+\relative c' {
+  c4_\roundFdynamic\< d e f
+  g,1~_\boxFdynamic\>
+  g1
+  g'1~\mfEspressDynamic
+  g1
+}
+@end lilypond
+
+Si può  usare anche la forma Scheme della modalità markup.  La sintassi
+è spiegata in @rextend{Markup construction in Scheme}.
+
+@lilypond[verbatim,quote]
+moltoF = #(make-dynamic-script
+            (markup #:normal-text "molto"
+                    #:dynamic "f"))
+\relative c' {
+  <d e>16 <d e>
+  <d e>2..\moltoF
+}
+@end lilypond
+
+Per allineare a sinistra il testo di dinamica invece di centrarlo su una
+nota, si usa un @code{\tweak}:
+
+@lilypond[verbatim,quote]
+moltoF = \tweak DynamicText.self-alignment-X #LEFT
+         #(make-dynamic-script
+            (markup #:normal-text "molto"
+                    #:dynamic "f"))
+\relative c' {
+  <d e>16 <d e>
+  <d e>2..\moltoF <d e>1
+}
+@end lilypond
+
+Le impostazioni dei tipi di carattere in modalità markup sono descritti in
+@ref{Selecting font and font size}.
+
+@seealso
+Guida alla notazione:
+@ref{Formatting text},
+@ref{Selecting font and font size},
+@ref{What goes into the MIDI output?},
+@ref{Controlling MIDI dynamics}.
+
+Extending LilyPond:
+@rextend{Markup construction in Scheme}.
+
+Frammenti:
+@rlsr{Expressive marks}.
+
+
+@node Indicazioni espressive curvilinee
+@subsection Indicazioni espressive curvilinee
+@translationof Expressive marks as curves
+
+Questa sezione spiega come creare varie indicazioni espressive con
+forma curvilinea: legature di portamento, legature di frase, respiri, portamenti
+indeterminati discendenti (cadute) o ascendenti.
+
+@menu
+* Legature di portamento::
+* Legature di frase::
+* Respiri::
+* Portamenti indeterminati discendenti (cadute) e ascendenti::
+@end menu
+
+@node Legature di portamento
+@unnumberedsubsubsec Legature di portamento
+@translationof Slurs
+
+@cindex legature di portamento
+
+Le @notation{legature di portamento} si inseriscono con delle parentesi:
+
+@warning{Nella musica polifonica, una legatura di portamento deve
+terminare nella stessa voce in cui è iniziata.}
+
+@lilypond[verbatim,quote,relative=2]
+f4( g a) a8 b(
+a4 g2 f4)
+<c e>2( <b d>2)
+@end lilypond
+
+@cindex legature di portamento, posizionamento manuale
+@cindex legature di portamento, sotto le note
+@cindex legature di portamento, sopra le note
+@funindex \slurDown
+@funindex slurDown
+@funindex \slurNeutral
+@funindex slurNeutral
+
+Le legature di portamento possono essere posizionate manualmente sopra o
+sotto il rigo, come è spiegato in @ref{Direction and placement}.
+
+@cindex legatura di frase
+@cindex legature di portamento multiple
+@cindex legature di portamento simultanee
+
+Non è possibile tracciare due legature di portamento simultanee o sovrapposte, ma si
+può ricorrere a una legatura di frase posta per mostrare più legature.  Questo permette
+di creare contemporaneamente due legature di portamento.  Maggiori dettagli
+si trovano in @ref{Phrasing slurs}.
+
+@cindex legature di portamento, stile
+@cindex legatura di portamento continua
+@cindex legatura di portamento punteggiata
+@cindex legatura di portamento tratteggiata
+@cindex stile, legatura di portamento
+@funindex \slurDashed
+@funindex slurDashed
+@funindex \slurDotted
+@funindex slurDotted
+@funindex \slurSolid
+@funindex slurSolid
+
+Le legature di portamento possono essere continue, punteggiate o tratteggiate.  Lo
+stile predefinito è quello continuo:
+
+@lilypond[verbatim,quote,relative=1]
+c4( e g2)
+\slurDashed
+g4( e c2)
+\slurDotted
+c4( e g2)
+\slurSolid
+g4( e c2)
+@end lilypond
+
+@funindex \slurHalfDashed
+@funindex slurHalfDashed
+@funindex \slurHalfSolid
+@funindex slurHalfSolid
+@cindex legatura di portamento, metà tratteggiata e metà continua
+
+Le legature di portamento possono essere anche semitratteggiate (half-dashed),
+ovvero con la prima metà tratteggiata e la seconda continua; oppure semicontinue
+(half-solid), ovvero con la prima metà continua e la seconda tratteggiata:
+
+@lilypond[verbatim,quote,relative=1]
+c4( e g2)
+\slurHalfDashed
+g4( e c2)
+\slurHalfSolid
+c4( e g2)
+\slurSolid
+g4( e c2)
+@end lilypond
+
+@funindex \slurDashPattern
+@funindex slurDashPattern
+@cindex legatura di portamento, definizione del modello di tratteggio
+
+Si possono definire modelli di tratteggio personalizzati per le legature di
+portamento:
+
+@lilypond[verbatim,quote,relative=1]
+c4( e g2)
+\slurDashPattern #0.7 #0.75
+g4( e c2)
+\slurDashPattern #0.5 #2.0
+c4( e g2)
+\slurSolid
+g4( e c2)
+@end lilypond
+
+
+
+@funindex \slurUp
+@funindex slurUp
+
+
+@predefined
+@code{\slurUp},
+@code{\slurDown},
+@code{\slurNeutral},
+@code{\slurDashed},
+@code{\slurDotted},
+@code{\slurHalfDashed},
+@code{\slurHalfSolid},
+@code{\slurDashPattern},
+@code{\slurSolid}.
+@endpredefined
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{using-double-slurs-for-legato-chords.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{positioning-text-markups-inside-slurs.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{making-slurs-with-complex-dash-structure.ly}
+
+@seealso
+Glossario Musicale:
+@rglosnamed{slur,legatura di portamento}.
+
+Manuale di apprendimento:
+@rlearning{Sul non annidamento di parentesi e legature di valore}.
+
+Guida alla notazione:
+@ref{Direction and placement},
+@ref{Phrasing slurs}.
+
+Frammenti:
+@rlsr{Expressive marks}.
+
+Guida al funzionamento interno:
+@rinternals{Slur}.
+
+
+@node Legature di frase
+@unnumberedsubsubsec Legature di frase
+@translationof Phrasing slurs
+
+@cindex legature di frase
+@cindex frase, legature di
+@funindex \(
+@funindex \)
+
+Le @notation{legature di frase}, che indicano una frase musicale, si
+scrivono con i comandi @code{\(} e @code{\)}:
+
+@lilypond[verbatim,quote,relative=2]
+c4\( d( e) f(
+e2) d\)
+@end lilypond
+
+@funindex \phrasingSlurUp
+@funindex phrasingSlurUp
+@funindex \phrasingSlurDown
+@funindex phrasingSlurDown
+@funindex \phrasingSlurNeutral
+@funindex phrasingSlurNeutral
+
+A livello tipografico, una legatura di frase si comporta in modo pressoché
+identico a una normale legatura di portamento.  Sono però trattate
+come oggetti diversi; ad esempio, @code{\slurUp} non ha effetto su una
+legatura di frase.  Le legature di frase possono essere posizionate
+sopra o sotto il rigo, come è spiegato in @ref{Direction and placement}.
+
+@cindex legature di frase simultanee
+@cindex legature di frase multiple
+@cindex legatura di portamento, fraseggio simultaneo
+@cindex legatura di portamento, fraseggio multiplo
+
+Più legature di frase simultanee o sovrapposte non sono permesse.
+
+@funindex phrasingSlurDashed
+@funindex \phrasingSlurDashed
+@funindex \phrasingSlurDotted
+@funindex phrasingSlurDotted
+@funindex \phrasingSlurSolid
+@funindex phrasingSlurSolid
+@cindex legatura di frase tratteggiata
+@cindex legatura di frase puntata
+@cindex legatura di portamento, frase tratteggiata
+@cindex legatura di portamento, frase puntata
+
+Le legature di frase possono essere continue, puntate o tratteggiate.  Lo stile
+predefinito è quello continuo:
+
+@lilypond[verbatim,quote,relative=1]
+c4\( e g2\)
+\phrasingSlurDashed
+g4\( e c2\)
+\phrasingSlurDotted
+c4\( e g2\)
+\phrasingSlurSolid
+g4\( e c2\)
+@end lilypond
+
+@funindex phrasingSlurHalfDashed
+@funindex \phrasingSlurHalfDashed
+@funindex \phrasingSlurHalfSolid
+@funindex phrasingSlurHalfSolid
+@cindex legatura di frase, metà continua e metà tratteggiata
+@cindex legatura di portamento, tratto metà continuo e metà tratteggiato
+
+Le legature di frase possono essere anche semitratteggiate (la prima metà
+tratteggiata, la seconda continua) o semicontinue (la prima metà
+continua, la seconda tratteggiata):
+
+@lilypond[verbatim,quote,relative=1]
+c4\( e g2\)
+\phrasingSlurHalfDashed
+g4\( e c2\)
+\phrasingSlurHalfSolid
+c4\( e g2\)
+\phrasingSlurSolid
+g4\( e c2\)
+@end lilypond
+
+@funindex \phrasingSlurDashPattern
+@funindex phrasingSlurDashPattern
+@cindex legatura di frase, definizione dei modelli di tratteggio
+@cindex legatura di portamento, fraseggio, definizione dei modelli di tratteggio
+@cindex legatura di portamento, definizione dei modelli di tratteggio  per il fraseggio
+
+Si possono definire modelli di tratteggio personalizzati anche per le legature di frase:
+
+@lilypond[verbatim,quote,relative=1]
+c4\( e g2\)
+\phrasingSlurDashPattern #0.7 #0.75
+g4\( e c2\)
+\phrasingSlurDashPattern #0.5 #2.0
+c4\( e g2\)
+\phrasingSlurSolid
+g4\( e c2\)
+@end lilypond
+
+Le definizioni dei modelli di tratteggio per le legature di frase hanno
+la stessa  struttura di quelle per le legature di portamento.  Per maggiori
+informazioni sui modelli complessi di tratteggio si consultino i frammenti
+in @ref{Slurs}.
+
+@predefined
+@code{\phrasingSlurUp},
+@code{\phrasingSlurDown},
+@code{\phrasingSlurNeutral},
+@code{\phrasingSlurDashed},
+@code{\phrasingSlurDotted},
+@code{\phrasingSlurHalfDashed},
+@code{\phrasingSlurHalfSolid},
+@code{\phrasingSlurDashPattern},
+@code{\phrasingSlurSolid}.
+@endpredefined
+
+@seealso
+Manuale di apprendimento:
+@rlearning{Sul non annidamento di parentesi e legature di valore}.
+
+Guida alla notazione:
+@ref{Direction and placement},
+@ref{Slurs}.
+
+Frammenti:
+@rlsr{Expressive marks}.
+
+Guida al funzionamento interno:
+@rinternals{PhrasingSlur}.
+
+
+@node Respiri
+@unnumberedsubsubsec Respiri
+@translationof Breath marks
+
+@cindex respiri
+@cindex segno di pausa
+@funindex \breathe
+@funindex breathe
+
+I respiri si inseriscono col comando @code{\breathe}:
+
+@lilypond[verbatim,quote,relative=2]
+c2. \breathe d4
+@end lilypond
+
+Un respiro termina una travatura automatica; per evitare questo
+comportamento, si veda @ref{Manual beams}.
+
+@lilypond[verbatim,quote,relative=2]
+c8 \breathe d e f g2
+@end lilypond
+
+È supportata la divisio, indicatore del respiro nella musica
+antica.  Maggiori dettagli in @ref{Divisiones}.
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{changing-the-breath-mark-symbol.ly}
+
+@cindex segno di spunta
+@cindex spunta, segno di
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{using-a-tick-as-the-breath-mark-symbol.ly}
+
+@cindex cesura
+@cindex binari ferroviari
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{inserting-a-caesura.ly}
+
+@seealso
+Glossario Musicale:
+@rglosnamed{caesura,cesura}.
+
+Guida alla notazione:
+@ref{Divisiones}.
+
+Frammenti:
+@rlsr{Expressive marks}.
+
+Guida al funzionamento interno:
+@rinternals{BreathingEvent},
+@rinternals{BreathingSign},
+@rinternals{Breathing_sign_engraver}.
+
+
+@node Portamenti indeterminati discendenti (cadute) e ascendenti
+@unnumberedsubsubsec Portamenti indeterminati discendenti (cadute) e ascendenti
+@translationof Falls and doits
+
+@cindex portamenti indeterminati verso il basso (cadute) e verso l'alto
+@funindex \bendAfter
+@funindex bendAfter
+
+I @notation{portamenti indeterminati verso il basso (cadute) e verso l'alto} possono
+essere aggiunti alle note col comando @code{\bendAfter}.  La direzione del
+portamento è indicata con un più o un meno (su o giù).   Il numero indica
+l'intervallo per cui il portamento si estenderà @emph{oltre} la nota principale.
+
+@lilypond[verbatim,quote,relative=2]
+c2\bendAfter #+4
+c2\bendAfter #-4
+c2\bendAfter #+6.5
+c2\bendAfter #-6.5
+c2\bendAfter #+8
+c2\bendAfter #-8
+@end lilypond
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{adjusting-the-shape-of-falls-and-doits.ly}
+
+@seealso
+Glossario Musicale:
+@rglosnamed{fall,portamento indeterminato verso il basso},
+@rglosnamed{doit,portamento indeterminato verso l'alto}.
+
+Frammenti:
+@rlsr{Expressive marks}.
+
+
+@node Indicazioni espressive lineari
+@subsection Indicazioni espressive lineari
+@translationof Expressive marks as lines
+
+Questa sezione spiega come creare varie indicazioni espressive che seguono
+una traiettoria lineare: glissandi, arpeggi e trilli.
+
+@menu
+* Glissando::
+* Arpeggio::
+* Trilli::
+@end menu
+
+@node Glissando
+@unnumberedsubsubsec Glissando
+
+@cindex glissando
+@funindex \glissando
+@funindex glissando
+
+Un @notation{glissando} si crea attaccando @code{\glissando}
+a una nota:
+
+@lilypond[verbatim,quote,relative=2]
+g2\glissando g'
+c2\glissando c,
+\afterGrace f,1\glissando f'16
+@end lilypond
+
+Un glissando può collegare note appartenenti a righi diversi:
+
+@lilypond[verbatim,quote]
+\new PianoStaff <<
+  \new Staff = "right" {
+    e'''2\glissando
+    \change Staff = "left"
+    a,,4\glissando
+    \change Staff = "right"
+    b''8 r |
+  }
+  \new Staff = "left" {
+    \clef bass
+    s1
+  }
+>>
+@end lilypond
+
+Un glissando può collegare le note negli accordi.  Se è necessario qualcosa
+di diverso dal normale abbinamento uno a uno delle note, si possono definire
+le connessioni tra le note attraverso @code{\glissandoMap}, dove le note
+di un accordo sono numerate a partire da zero nell'ordine in cui appaiono
+nel file di input @file{.ly}.
+
+@lilypond[verbatim,quote,relative=2]
+<c, e>1\glissando g' |
+<c, e>1\glissando |
+<g' b> |
+\break
+\set glissandoMap = #'((0 . 1) (1 . 0))
+<c, g'>1\glissando |
+<d a'> |
+\set glissandoMap = #'((0 . 0) (0 . 1) (0 . 2))
+c1\glissando |
+<d f a> |
+\set glissandoMap = #'((2 . 0) (1 . 0) (0 . 1))
+<f d a'>1\glissando |
+<c c'> |
+@end lilypond
+
+Si possono adottare diversi stili di glissando.  Maggiori dettagli in @ref{Line styles}.
+
+
+@snippets
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{contemporary-glissando.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{adding-timing-marks-to-long-glissandi.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{making-glissandi-breakable.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{extending-glissandi-across-repeats.ly}
+
+@seealso
+Glossario Musicale:
+@rglos{glissando}.
+
+Guida alla notazione:
+@ref{Line styles}.
+
+Frammenti:
+@rlsr{Expressive marks}.
+
+Guida al funzionamento interno:
+@rinternals{Glissando}.
+
+@knownissues
+Non è supportato il testo lungo la linea del glissando (ad esempio @notation{gliss.}).
+
+
+@node Arpeggio
+@unnumberedsubsubsec Arpeggio
+
+@cindex arpeggio
+@cindex arpeggio spezzato
+@cindex spezzato, arpeggio
+
+@funindex \arpeggio
+@funindex arpeggio
+@funindex \arpeggioArrowUp
+@funindex arpeggioArrowUp
+@funindex \arpeggioArrowDown
+@funindex arpeggioArrowDown
+@funindex \arpeggioNormal
+@funindex arpeggioNormal
+
+Un @notation{arpeggio} su un accordo (detto anche accordo spezzato)
+si ottiene aggiungendo @code{\arpeggio} all'accordo:
+
+@lilypond[verbatim,quote,relative=1]
+<c e g c>1\arpeggio
+@end lilypond
+
+Si possono scrivere vari tipi di arpeggio.
+@code{\arpeggioNormal} ripristina l'arpeggio normale:
+
+@lilypond[verbatim,quote,relative=1]
+<c e g c>2\arpeggio
+
+\arpeggioArrowUp
+<c e g c>2\arpeggio
+
+\arpeggioArrowDown
+<c e g c>2\arpeggio
+
+\arpeggioNormal
+<c e g c>2\arpeggio
+@end lilypond
+
+@cindex arpeggio, simboli speciali
+@cindex simboli speciali di arpeggio
+
+@funindex \arpeggioBracket
+@funindex arpeggioBracket
+@funindex \arpeggioParenthesis
+@funindex arpeggioParenthesis
+@funindex \arpeggioParenthesisDashed
+@funindex arpeggioParenthesisDashed
+
+Si possono creare simboli di arpeggio speciali @emph{in forma di parentesi}:
+
+@lilypond[verbatim,quote,relative=1]
+<c e g c>2
+
+\arpeggioBracket
+<c e g c>2\arpeggio
+
+\arpeggioParenthesis
+<c e g c>2\arpeggio
+
+\arpeggioParenthesisDashed
+<c e g c>2\arpeggio
+
+\arpeggioNormal
+<c e g c>2\arpeggio
+@end lilypond
+
+Le proprietà del tratteggio della parentesi dell'arpeggio sono regolate
+dalla proprietà @code{'dash-details}, descritta in @ref{Slurs}.
+
+Gli arpeggi possono essere scritti in modo esplicito con le legature di
+valore.  Per maggiori dettagli si veda @ref{Ties}.
+
+
+@predefined
+@code{\arpeggio},
+@code{\arpeggioArrowUp},
+@code{\arpeggioArrowDown},
+@code{\arpeggioNormal},
+@code{\arpeggioBracket},
+@code{\arpeggioParenthesis}
+@code{\arpeggioParenthesisDashed}.
+@endpredefined
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{creating-cross-staff-arpeggios-in-a-piano-staff.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{creating-cross-staff-arpeggios-in-other-contexts.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{creating-arpeggios-across-notes-in-different-voices.ly}
+
+@seealso
+Glossario Musicale:
+@rglos{arpeggio}.
+
+Guida alla notazione:
+@ref{Slurs},
+@ref{Ties}.
+
+Frammenti:
+@rlsr{Expressive marks}.
+
+Guida al funzionamento interno:
+@rinternals{Arpeggio},
+@rinternals{Slur},
+@rinternals{PianoStaff}.
+
+@knownissues
+@cindex arpeggio attraverso il rigo, stile della parentesi
+@cindex parentesi, stile nell'arpeggio attraverso il rigo
+
+Non è possibile mostrare simultaneamente arpeggi connessi e non connessi in un
+@code{PianoStaff}.
+
+L'arpeggio in forma di parentesi non può essere impostato con facilità negli
+arpeggi che attraversano i righi; occorre ricorrere a metodi più complessi
+descritti in @ref{Cross-staff stems}.
+
+
+@node Trilli
+@unnumberedsubsubsec Trilli
+@translationof Trills
+
+@cindex trilli
+
+@funindex \trill
+@funindex trill
+@funindex \startTrillSpan
+@funindex startTrillSpan
+@funindex \stopTrillSpan
+@funindex stopTrillSpan
+
+I trilli senza linea di estensione si ottengono col comando
+@code{\trill}; si veda @ref{Articulations and ornamentations}.
+
+I trilli con linea di estensione si ottengono con
+@code{\startTrillSpan} e @code{\stopTrillSpan}:
+
+@lilypond[verbatim,quote,relative=2]
+d1\startTrillSpan
+d1
+c2\stopTrillSpan
+r2
+@end lilypond
+
+Un estensore del trillo che va a capo ricomincerà esattamente sopra la
+prima nota della nuova riga.
+
+@lilypond[ragged-right,verbatim,quote,relative=2]
+d1\startTrillSpan
+\break
+d1
+c2\stopTrillSpan
+r2
+@end lilypond
+
+È possibile tracciare trilli consecutivi senza dover esplicitare i comandi
+@code{\stopTrillSpan}, perché il trillo successivo diventerà
+automaticamente il limite destro di quello precedente.
+
+@lilypond[verbatim,quote,relative=2]
+d1\startTrillSpan
+d1
+b1\startTrillSpan
+d2\stopTrillSpan
+r2
+@end lilypond
+
+I trilli possono essere anche combinati con le note di abbellimento.  La sintassi
+di questo costrutto e il metodo per posizionare in modo preciso gli abbellimenti
+sono descritti in @ref{Grace notes}.
+
+@lilypond[verbatim,quote,relative=2]
+d1~\afterGrace
+d1\startTrillSpan { c32[ d]\stopTrillSpan }
+c2 r2
+@end lilypond
+
+@cindex trilli con altezza
+@cindex trilli con notina
+@funindex \pitchedTrill
+@funindex pitchedTrill
+
+I trilli che richiedono una nota ausiliaria dall'altezza esplicita si
+ottengono col comando @code{\pitchedTrill}.  Il primo argomento è la  nota
+principale e il secondo è la nota @emph{trillata}, che appare come una testa
+di nota senza gambo e racchiusa tra parentesi.
+
+@lilypond[verbatim,quote,relative=2]
+\pitchedTrill
+d2\startTrillSpan fis
+d2
+c2\stopTrillSpan
+r2
+@end lilypond
+
+@cindex trilli con notina e alterazione
+@cindex trilli con alterazione
+
+Alterazioni successive della stessa nota nella stessa misura devono essere
+aggiunte manualmente.  Apparirà solo l'alterazione del primo trillo con
+notina in una misura.
+
+@lilypond[verbatim,quote,relative=2]
+\pitchedTrill
+eis4\startTrillSpan fis
+eis4\stopTrillSpan
+\pitchedTrill
+eis4\startTrillSpan cis
+eis4\stopTrillSpan
+\pitchedTrill
+eis4\startTrillSpan fis
+eis4\stopTrillSpan
+\pitchedTrill
+eis4\startTrillSpan fis!
+eis4\stopTrillSpan
+@end lilypond
+
+@predefined
+@code{\startTrillSpan},
+@code{\stopTrillSpan}.
+@endpredefined
+
+@seealso
+Glossario Musicale:
+@rglosnamed{trill,trillo}.
+
+Guida alla notazione:
+@ref{Articulations and ornamentations},
+@ref{Grace notes}.
+
+Frammenti:
+@rlsr{Expressive marks}.
+
+Guida al funzionamento interno:
+@rinternals{TrillSpanner}.
index eb594d29b1255d51d8249aefd6c0c5bdec63a5b2..ed08bc18928e31708cc3d725c54dcc664a00a640 100644 (file)
 Questo capitolo spiega come creare la notazione musicale.
 
 @menu
-* Altezze::            Scrittura e aspetto delle altezze delle note.
-* Rhythms::            Writing and displaying the durations of notes.
-* Expressive marks::   Adding expression to notes.
-* Repeats::            Repeat music.
-* Simultaneous notes:: More than one note at once.
-* Staff notation::     Displaying staves.
-* Editorial annotations:: Special notation to increase legibility.
-* Text::               Adding text to scores.
+* Altezze::                 Scrittura e aspetto delle altezze delle note.
+* Ritmi::                   Scrittura e aspetto delle durate delle note.
+* Segni di espressione::    Aggiungere espressione alle note.
+* Ripetizioni::             Ripetere la musica.
+* Note simultanee::         Più di una nota in contemporanea.
+* Notazione del rigo::      Aspetto del rigo.
+* Note editoriali::         Notazione speciale per aumentare la leggibilità.
+* Testo::                   Aggiungere testo alle partiture.
 @end menu
 
 @include notation/pitches.itely
@@ -34,4 +34,3 @@ Questo capitolo spiega come creare la notazione musicale.
 @include notation/staff.itely
 @include notation/editorial.itely
 @include notation/text.itely
-
index 8e96e128c702bf3848832139b0efd93e72cae5c4..822968c6601e543467a89228918ea1071e5a095e 100644 (file)
@@ -1,14 +1,16 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 @ignore
-   Translation of GIT committish: 35d565c89b853ed87b1bb2feb59f6ce8bef6263b
+   Translation of GIT committish: fa12d929326daf49f84838a95b0570b32e4b3400
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.18"
 
+@c Translators: Federico Bruni
+@c Translation checkers: Luca Rossetto Casel
 
 @node Altezze
 @section Altezze
@@ -88,6 +90,18 @@ un'ottava; ogni@tie{}@code{,} abbassa l'altezza di un'ottava.
 }
 @end lilypond
 
+@funindex absolute
+@funindex \absolute
+Si può indicare in modo esplicito che la musica viene inserita con l'ottava
+assoluta facendola precedere da @code{\absolute}:
+
+@example
+\absolute @var{espressione-musicale}
+@end example
+
+verrà interpretata nella modalità assoluta indipendentemente dal contesto
+in cui si trova.
+
 @seealso
 Glossario musicale:
 @rglosnamed{Pitch names,Nomi delle altezze}.
@@ -107,13 +121,13 @@ Frammenti di codice:
 @funindex relative
 @funindex \relative
 
-Quando si indicano le ottave in modalità assoluta è facile
-collocare un'altezza nell'ottava sbagliata.  Il metodo d'inserimento in ottava
-relativa riduce questi errori, perché il più delle volte non è
-necessario specificare alcuna ottava.  Inoltre, in modalità assoluta
-un singolo errore può essere difficile da individuare, mentre in
-modalità relativa un singolo errore sposta tutto il resto del pezzo
-di un'ottava.
+L'inserimento delle note con l'ottava assoluta costringe a specificare
+l'ottava di ogni singola nota.  Al contrario, se si usa l'ottava relativa,
+ogni ottava è determinata dall'ultima nota: se si cambia l'ottava di una
+nota, cambieranno anche le ottave di tutte le note successive.
+
+La modalità relativa deve essere impostata in modo esplicito col
+comando @code{\relative}:
 
 @example
 \relative @var{altezza_di_riferimento} @var{espressione_musicale}
@@ -127,7 +141,7 @@ calcolata nel modo seguente:
 @itemize
 @item
 In assenza di segni di cambiamento d'ottava, l'ottava
-di un'altezza viene calculata in modo che l'intervallo con la nota
+di un'altezza viene calcolata in modo che l'intervallo con la nota
 precedente sia inferiore a una quinta.  Tale intervallo è
 determinato senza considerare gli accidenti.
 
@@ -144,8 +158,28 @@ ottave.
 @item
 L'altezza della prima nota è relativa a
 @code{@var{altezza_di_riferimento}}.  @code{@var{altezza_di_riferimento}} è
-specificato nel modo di ottava assoluta.  Vi raccomandiamo di fare riferimento
-a un Do (@code{c}).
+specificato nel modo di ottava assoluta.  Quale di queste opzioni è la
+più  conveniente?
+
+@table @asis
+@item un'ottava del @code{c}
+Identificare il Do centrale con @code{c'} è molto semplice, quindi trovare
+le ottave del @code{c} (Do) sarà altrettanto semplice.  Se la musica inizia
+con @code{gis} sopra @code{c'''}, si scriverà qualcosa simile a
+@code{\relative c''' @{ gis' @dots{} @}}
+
+@item un'ottava della prima nota
+Scrivere @code{\relative gis''' @{ gis @dots{} @}} è un modo semplice per
+determinare l'altezza assoluta della prima nota dell'espressione musicale.
+
+@item nessuna altezza di riferimento esplicita
+Questa (ovvero @code{\relative @{ gis''' @dots{} @}}) può essere considerata
+una versione compatta dell'opzione precedente: la prima nota dentro l'espressione
+musicale è scritta come altezza assoluta.  In questo caso equivale a scegliere
+@code{f} come altezza di riferimento.
+@end table
+
+La documentazione di solito usa la prima opzione.
 @end itemize
 
 Ecco il modo relativo in azione:
@@ -284,11 +318,6 @@ Guida al funzionamento interno:
 @funindex \relative
 @funindex relative
 
-@c DEPRECATED
-Se non viene specificata una @code{@var{altezza_di_riferimento}} per @code{\relative},
-allora si assume che corrisponda a @tie{}@code{c'}.  Tuttavia, questa è un'opzione
-deprecata e potrebbe essere tolta nelle future versioni; il
-suo impiego è quindi sconsigliato.
 
 
 @node Alterazioni
@@ -381,7 +410,7 @@ cis cis cis! cis? c c c! c?
 Se una nota è prolungata attraverso una legatura di valore, l'alterazione
 viene ripetuta solo all'inizio di un nuovo sistema:
 
-@lilypond[verbatim,quote,relative=2]
+@lilypond[verbatim,quote,relative=2,ragged-right]
 cis1~ cis~
 \break
 cis
@@ -466,9 +495,9 @@ Le lingue disponibili e i tipi di notazione che definiscono sono:
   @tab c d e f g a b h
 @item @code{english}
   @tab c d e f g a bf b
-@item @code{espanol}
+@item @code{espanol} o @code{español}
   @tab do re mi fa sol la sib si
-@item @code{italiano}
+@item @code{italiano} o @code{français}
   @tab do re mi fa sol la sib si
 @item @code{norsk}
   @tab c d e f g a b h
@@ -499,9 +528,9 @@ possono variare a seconda della lingua adottata:
 @item @code{english}
   @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp
     @tab -ff/-flatflat
-@item @code{espanol}
+@item @code{espanol} o @code{español}
   @tab -s @tab -b @tab -ss/-x @tab -bb
-@item @code{italiano}
+@item @code{italiano} o @code{français}
   @tab -d @tab -b @tab -dd @tab -bb
 @item @code{norsk}
   @tab -iss/-is @tab -ess/-es @tab -ississ/-isis
@@ -553,9 +582,9 @@ non hanno ancora dei nomi per le note speciali.
   @tab -ih @tab -eh @tab -isih @tab -eseh
 @item @code{english}
   @tab -qs @tab -qf @tab -tqs @tab -tqf
-@item @code{espanol}
+@item @code{espanol} o @code{español}
   @tab -cs @tab -cb @tab -tcs @tab -tcb
-@item @code{italiano}
+@item @code{italiano} o @code{français}
   @tab -sd @tab -sb @tab -dsd @tab -bsb
 @item @code{portugues}
   @tab -sqt @tab -bqt @tab -stqt @tab -btqt
@@ -915,7 +944,7 @@ vengono trasformate.}
 
 @cindex trasposizione modale
 @cindex modale, trasposizione
-@cindex operazone, trasposizione
+@cindex operazione, trasposizione
 @funindex \modalTranspose
 @funindex modalTranspose
 
@@ -1139,6 +1168,7 @@ c2 c
 @cindex chiave traspositrice
 @cindex trasposizione, chiave
 @cindex trasposizione dell'ottava
+@cindex trasposizione opzionale dell'ottava
 @cindex chiave di tenore per coro
 
 Aggiungendo@tie{}@code{_8} o@tie{}@code{^8} al nome della chiave, la sua
@@ -1162,6 +1192,19 @@ c2 c
 c2 c
 @end lilypond
 
+L'ottavazione opzionale si può ottenere racchiudendo l'argomento numerico
+tra parentesi tonde o quadre:
+
+@lilypond[verbatim,quote,relative=1]
+\clef "treble_(8)"
+c2 c
+\clef "bass^[15]"
+c2 c
+@end lilypond
+
+Le altezze vengono mostrate come se l'argomento numerico fosse
+inserito senza parentesi.
+
 Alcune chiavi particolari sono descritte in @ref{Mensural clefs},
 @ref{Gregorian clefs}, @ref{Default tablatures} e @ref{Custom
 tablatures}.  Per alternare chiavi diverse nelle citazioni in corpo più piccolo
@@ -1187,9 +1230,23 @@ Frammenti di codice:
 Guida al funzionamento interno:
 @rinternals{Clef_engraver},
 @rinternals{Clef},
-@rinternals{OctavateEight},
+@rinternals{ClefModifier},
 @rinternals{clef-interface}.
 
+@knownissues
+I numeri di ottavazione assegnati alle chiavi sono trattati come oggetti grafici
+separati.  Quindi qualsiasi @code{\override} all'oggetto @var{Clef} dovrà essere
+applicato, con un altro @code{\override}, all'oggetto @var{ClefModifier}.
+
+@lilypond[fragment,quote,relative=1]
+\new Staff \with {
+  \override ClefModifier.color = #red
+  \override Clef.color = #blue
+}
+
+\clef "treble_8" c4
+@end lilypond
+
 
 @node Armatura di chiave
 @unnumberedsubsubsec Armatura di chiave
@@ -1262,6 +1319,39 @@ f
 fis
 @end lilypond
 
+Si possono definire ulteriori modi elencando le alterazioni per ogni
+grado della scala quando il modo inizia col Do.
+
+@lilypond[verbatim,quote]
+freygish = #`((0 . ,NATURAL) (1 . ,FLAT) (2 . ,NATURAL)
+    (3 . ,NATURAL) (4 . ,NATURAL) (5 . ,FLAT) (6 . ,FLAT))
+
+\relative c' {
+  \key c \freygish c4 des e f
+  \bar "||" \key d \freygish d es fis g
+}
+@end lilypond
+
+Le alterazioni dell'armatura di chiave possono essere collocate in
+posizioni diverse da quelle tradizionali o anche in più di un'ottava, usando
+le proprietà @code{flat-positions} e @code{sharp-positions}
+di @code{KeySignature}.  I valori di queste proprietà specificano
+l'estensione delle posizioni del rigo in cui potranno comparire
+le alterazioni.  Se viene specificata una sola posizione, le
+alterazioni vengono collocate entro l'ottava che finisce in quella
+posizione del rigo.
+
+@lilypond[verbatim, quote,relative=0]
+\override Staff.KeySignature.flat-positions = #'((-5 . 5))
+\override Staff.KeyCancellation.flat-positions = #'((-5 . 5))
+\clef bass \key es \major es g bes d
+\clef treble \bar "||" \key es \major es g bes d
+
+\override Staff.KeySignature.sharp-positions = #'(2)
+\bar "||" \key b \major b fis b2
+@end lilypond
+
+
 
 @snippets
 
@@ -1288,7 +1378,6 @@ Guida al funzionamento interno:
 @rinternals{Key_performer},
 @rinternals{KeyCancellation},
 @rinternals{KeySignature},
-@rinternals{key-cancellation-interface},
 @rinternals{key-signature-interface}.
 
 
@@ -1328,6 +1417,9 @@ a2 b
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {ottava-text.ly}
 
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{adding-an-ottava-marking-to-a-single-voice.ly}
+
 @seealso
 Glossario musicale:
 @rglosnamed{octavation,ottavazione}.
@@ -1405,21 +1497,34 @@ all'unisono.
 @end lilypond
 
 @code{\transposition} può essere modificato nel corso di un brano.  Ad
-esempio, un clarinettista potrebbe passare da un clarinetto in La a uno
-in Si bemolle.
-
-@lilypond[verbatim,quote,relative=2]
-\set Staff.instrumentName = #"Cl (A)"
-\key a \major
-\transposition a
-c d e f
-\textLengthOn
-<>^\markup { Switch to B\flat clarinet }
-R1
+esempio, un clarinettista potrebbe essere costretto a passare da un
+clarinetto in La a uno in Si bemolle.
 
-\key bes \major
-\transposition bes
-c2 g
+@lilypond[verbatim,quote]
+flute = \relative c'' {
+  \key f \major
+  \cueDuring #"clarinet" #DOWN {
+    R1 _\markup\tiny "clarinet"
+    c4 f e d
+    R1 _\markup\tiny "clarinet"
+  }
+}
+clarinet = \relative c'' {
+  \key aes \major
+  \transposition a
+  aes4 bes c des
+  R1^\markup { muta in B\flat }
+  \key g \major
+  \transposition bes
+  d2 g,
+}
+\addQuote "clarinet" \clarinet
+<<
+  \new Staff \with { instrumentName = #"Flute" }
+    \flute
+  \new Staff \with { instrumentName = #"Cl (A)" }
+    \clarinet
+>>
 @end lilypond
 
 @seealso
@@ -1455,7 +1560,7 @@ richiamata nel modo seguente:
 
 @example
 \new Staff <<
-  \accidentalStyle "voice"
+  \accidentalStyle voice
   @{ @dots{} @}
 >>
 @end example
@@ -1467,7 +1572,7 @@ determina in quale ambito debba essere cambiato lo stile.  Ad esempio, per
 usare lo stesso stile in tutti i righi dell'attuale @code{StaffGroup}, si usa:
 
 @example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
 @end example
 
 Sono supportati i seguenti modi di gestire le alterazioni.  Il seguente esempio
@@ -1510,11 +1615,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1529,7 +1634,7 @@ seguente frammento, se si vuole usare lo stesso stile in entrambi i righi.
   <<
     \context Staff = "up" @{
       %%% change the next line as desired:
-      \accidentalStyle #'Score "default"
+      \accidentalStyle Score.default
       \musicA
     @}
     \context Staff = "down" @{
@@ -1591,11 +1696,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1663,11 +1768,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicB
     }
   >>
@@ -1728,11 +1833,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicB
     }
   >>
@@ -1790,11 +1895,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicB
     }
   >>
@@ -1855,11 +1960,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicB
     }
   >>
@@ -1916,11 +2021,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicB
     }
   >>
@@ -1979,7 +2084,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano"
+      \accidentalStyle piano
       \musicA
     }
     \context Staff = "down" {
@@ -2036,7 +2141,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano-cautionary"
+      \accidentalStyle piano-cautionary
       \musicA
     }
     \context Staff = "down" {
@@ -2095,11 +2200,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicB
     }
   >>
@@ -2152,11 +2257,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicB
     }
   >>
@@ -2213,11 +2318,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicB
     }
   >>
@@ -2270,11 +2375,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicB
     }
   >>
@@ -2330,11 +2435,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicB
     }
   >>
@@ -2393,12 +2498,12 @@ musicB = {
   <<
     \context Staff = "up" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicA
     }
     \context Staff = "down" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicB
     }
   >>
@@ -2453,11 +2558,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicB
     }
   >>
@@ -2512,11 +2617,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicB
     }
   >>
@@ -2559,7 +2664,7 @@ volta non richiede il segno di bequadro:
 
 @lilypond[quote]
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2576,12 +2681,12 @@ imposti localmente lo stile delle alterazioni su @code{forget}:
 
 @lilypond[verbatim,quote]
 forget = #(define-music-function (parser location music) (ly:music?) #{
-  \accidentalStyle "forget"
+  \accidentalStyle forget
   #music
-  \accidentalStyle "modern"
+  \accidentalStyle modern
 #})
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2680,20 +2785,19 @@ Questa sezione suggerisce i modi in cui modificare la testa di una nota.
 @unnumberedsubsubsec Teste di nota speciali
 @translationof Special note heads
 
-@cindex speciali, teste di nota
-@cindex note heads, cross
-@cindex note heads, diamond
-@cindex note heads, parlato
-@cindex note heads, harmonic
-@cindex note heads, guitar
 @cindex teste di nota speciali
-@cindex cross note heads
-@cindex diamond note heads
-@cindex parlato note heads
-@cindex harmonic note heads
-@cindex guitar note heads
-@cindex note head styles
-@cindex styles, note heads
+@cindex teste di nota barrate
+@cindex teste di nota a rombo
+@cindex teste di nota, parlato
+@cindex teste di nota, armonico
+@cindex teste di nota, chitarra
+@cindex barrata, testa di nota
+@cindex diamante, testa di nota
+@cindex parlato, testa di nota
+@cindex armonico, testa di nota
+@cindex chitarra, teste di nota
+@cindex teste di nota, stili
+@cindex stili delle teste di nota
 
 @funindex cross
 
@@ -2701,13 +2805,13 @@ L'aspetto delle teste delle note può essere modificato:
 
 @lilypond[verbatim,quote,relative=2]
 c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
 c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
 a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
 a b
-\revert NoteHead #'style
+\revert NoteHead.style
 c4 d e f
 @end lilypond
 
@@ -2741,11 +2845,10 @@ Potete utilizzare, al posto di @code{\xNote}, @code{\xNotesOn} e
 @code{\deadNotesOff}.  Il termine @notation{dead note} è di uso comune
 tra i chitarristi.
 
-Esiste anche una scorciatoia per le forme a diamante. Può essere usata
-solo all'interno di un accordo:
+Esiste anche una scorciatoia simile per le forme a diamante:
 
 @lilypond[verbatim,quote,relative=2]
-<c f\harmonic>2 <d a'\harmonic>4 <c g'\harmonic>
+<c f\harmonic>2 <d a'\harmonic>4 <c g'\harmonic> f\harmonic
 @end lilypond
 
 @predefined
@@ -2779,7 +2882,6 @@ Guida al funzionamento interno:
 @translationof Easy notation note heads
 
 @cindex teste di nota, esercizio
-@cindex practice note heads
 @cindex teste di nota, notazione semplificata
 @cindex notazione semplificata
 @cindex musica per principianti
@@ -3000,3 +3102,5 @@ Guida al funzionamento interno:
 @rinternals{Pitch_squash_engraver},
 @rinternals{Voice},
 @rinternals{RhythmicStaff}.
+
+@c  LocalWords:  musicA musicB dis' gis
diff --git a/Documentation/it/notation/repeats.itely b/Documentation/it/notation/repeats.itely
new file mode 100644 (file)
index 0000000..b94e402
--- /dev/null
@@ -0,0 +1,781 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
+@ignore
+    Translation of GIT committish: bb44469cee5de15e46afbbebd580f898fe5f727b
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.17.11"
+
+@c Translators: Federico Bruni
+@c Translation checkers: Luca Rossetto Casel
+
+@node Ripetizioni
+@section Ripetizioni
+@translationof Repeats
+
+@lilypondfile[quote]{repeats-headword.ly}
+
+La ripetizione è un concetto chiave in musica e può essere resa con
+varie forme di notazione.  LilyPond supporta i seguenti tipi di
+ripetizioni:
+
+@table @code
+@item volta
+La musica ripetuta non viene scritta per intero ma racchiusa tra barre
+di ripetizione.  Se la ripetizione si trova all'inizio di un brano, la
+stanghetta di ritornello è posta soltanto alla fine della ripetizione.  I
+finali alternativi (volte) appaiono da sinistra a destra e sono evidenziati
+da delle parentesi.  Questa è la notazione standard per le ripetizioni
+con finali alternativi.
+
+@item unfold
+La musica ripetuta viene scritta per intero, tante volte quante sono
+specificate dal @code{@var{numero-ripetizioni}}.  È utile quando si
+scrive musica ripetitiva.
+
+@item percent
+Si tratta di ripetizioni del singolo tempo (battito) o della battuta.  Hanno l'aspetto di una
+barra obliqua o di segni di percentuale.
+
+@item tremolo
+Si usa per scrivere travature a tremolo.
+
+@end table
+
+
+@menu
+* Ripetizioni lunghe::
+* Ripetizioni brevi::
+@end menu
+
+@node Ripetizioni lunghe
+@subsection Ripetizioni lunghe
+@translationof Long repeats
+
+Questa sezione spiega come inserire ripetizioni lunghe (solitamente
+di più battute).  Tali ripetizioni possono essere in due forme: racchiuse
+tra segni di ritornello oppure ricopiate interamente (adatte
+a scrivere musica ripetitiva).  Si possono anche controllare
+manualmente i segni di ripetizione.
+
+@menu
+* Ripetizioni normali::
+* Indicazioni di ripetizione manuali::
+* Ripetizioni ricopiate::
+@end menu
+
+@cindex volta
+@cindex prima volta
+@cindex seconda volta
+@cindex volta, prima
+@cindex volta, seconda
+@cindex ripetizione normale
+@cindex ripetizione con finali alternativi
+@cindex finali alternativi
+@funindex \repeat
+@funindex \alternative
+@funindex \partial
+
+@node Ripetizioni normali
+@unnumberedsubsubsec Ripetizioni normali
+@translationof Normal repeats
+
+La sintassi per una normale ripetizione è
+
+@example
+\repeat volta @var{numero-di-ripetizioni} @var{espressione-musicale}
+@end example
+
+@noindent
+dove @code{@var{espressione-musicale}} è la musica da ripetere.
+
+Un'unica ripetizione senza finale alternativo:
+
+@lilypond[verbatim,quote,relative=2]
+\repeat volta 2 { c4 d e f }
+c2 d
+\repeat volta 2 { d4 e f g }
+@end lilypond
+
+I finali alternativi si ottengono con @code{\alternative}.  Ogni gruppo
+di alternative deve essere a sua volta racchiuso tra parentesi.
+
+@example
+\repeat volta @var{numero-di-ripetizioni} @var{espressione-musicale}
+\alternative @{
+  @{ @var{espressione-musicale} @}
+@}
+@end example
+
+@noindent
+dove @code{@var{espressione-musicale}} è la musica.
+
+Se il numero di ripetizioni è superiore a quello dei finali alternativi, alle
+prime ripetizioni viene assegnata la prima alternativa.
+
+Una singola ripetizione con un finale alternativo:
+
+@lilypond[verbatim,quote,relative=2]
+\repeat volta 2 { c4 d e f | }
+\alternative {
+  { c2 e | }
+  { f2 g | }
+}
+c1
+@end lilypond
+
+Molteplici ripetizioni con un finale alternativo:
+
+@lilypond[verbatim,quote,relative=2]
+\repeat volta 4 { c4 d e f | }
+\alternative {
+  { c2 e | }
+  { f2 g | }
+}
+c1
+@end lilypond
+
+Molteplici ripetizioni con più di un finale alternativo:
+
+@lilypond[verbatim,quote,relative=2]
+\repeat volta 3 { c4 d e f | }
+\alternative {
+  { c2 e | }
+  { f2 g | }
+  { a2 g | }
+}
+c1
+@end lilypond
+
+@warning{Se ci sono due o più finali alternativi, non ci deve essere
+niente tra la parentesi di chiusura di uno e quella di apertura di
+quello successivo all'interno di un blocco @code{@bs{}alternative},
+altrimenti non si otterrà il numero atteso di finali.}
+
+@warning{Se si usa @code{@bs{}relative} dentro a un blocco
+@code{@bs{}repeat} senza istanziare esplicitamente il
+contesto @code{Voice}, appare un rigo in più (non desiderato).  Vedi
+@rprogram{Appare un rigo in più}.}
+
+@cindex ripetizione con anacrusi
+@cindex anacrusi in una ripetizione
+@funindex \partial
+
+Se una ripetizione inizia in mezzo a una misura e non ha finali
+alternativi, solitamente anche la chiusura della ripetizione cadrà
+nel mezzo di una misura, così che tra le due estremità ci sia una
+misura completa.  In queste situazioni i segni di ripetizione non
+sono delle vere e proprie stanghette.  Non usare il comando @code{\partial}
+o i controlli di battuta nel punto in cui si trovano questi segni:
+
+@lilypond[verbatim,quote,relative=1]
+% nessun \partial qui
+c4 e g  % nessun controllo di battuta qui
+% nessun \partial qui
+\repeat volta 4 {
+  e4 |
+  c2 e |
+  % nessun \partial qui
+  g4 g g  % nessun controllo di battuta qui
+}
+% nessun \partial qui
+g4 |
+a2 a |
+g1 |
+@end lilypond
+
+Analogalmente, se una ripetizione inizia con la misura parziale a inizio
+della partitura e non ha finali alternativi, si applicano le stesse
+condizioni dell'esempio precedente, a parte il fatto che in questo
+caso è richiesto il comando @code{\partial} all'inizio della partitura:
+
+@lilypond[verbatim,quote,relative=1]
+\partial 4  % necessario
+\repeat volta 4 {
+  e4 |
+  c2 e |
+  % nessun \partial qui
+  g4 g g  % nessun controllo di battuta qui
+}
+% nessun \partial qui
+g4 |
+a2 a |
+g1 |
+@end lilypond
+
+Quando vengono aggiunti dei finali alternativi a una ripetizione che inizia
+con una misura incompleta, diventa necessario impostare manualmente la
+proprietà di contesto @code{Timing.measureLength} nei seguenti punti
+specifici:
+
+@itemize
+@item
+all'inizio di tutte le misure incomplete nel blocco @code{\alternative}, che
+di solito si trovano alla fine di ogni alternativa, con l'eccezione dell'ultima
+(nella maggior parte dei casi).
+
+@item
+all'inizio di ogni alternativa, eccetto la prima.
+@end itemize
+
+@lilypond[verbatim,quote,relative=1]
+\partial 4
+\repeat volta 2 { e4 | c2 e | }
+\alternative {
+  {
+    f2 d |
+    \set Timing.measureLength = #(ly:make-moment 3/4)
+    g4 g g  % un controllo di battuta opzionale è permesso qui
+  }
+  {
+    \set Timing.measureLength = #(ly:make-moment 4/4)
+    a2 a |
+  }
+}
+g1 |
+@end lilypond
+
+La proprietà @code{measureLength} è descritta in @ref{Time
+administration}.
+
+@funindex \inStaffSegno
+
+Il comando @code{\inStaffSegno} serve a posizionare il simbolo di segno
+combinandolo col comando @code{\repeat volta}.
+Si possono impostare simboli alternativi delle stanghette modificando nel
+contesto Score le proprietà @code{segnoType}, @code{startRepeatSegnoType},
+@code{endRepeatSegnoType} o @code{doubleRepeatSegnoType}.
+
+@lilypond[verbatim,quote,relative=1]
+e1
+\repeat volta 2 {
+  \inStaffSegno
+  f2 g a b
+}
+c1_"D.S." \bar "|."
+@end lilypond
+
+@cindex ripetizioni con legature di valore
+@cindex finali alternativi con legature di valore
+@cindex legature di valore, nelle ripetizioni
+@cindex legature di valore, finali alternativi
+@funindex \repeatTie
+
+Si possono aggiungere delle legature di valore a un secondo finale:
+
+@lilypond[verbatim,quote,relative=2]
+c1
+\repeat volta 2 { c4 d e f~ }
+\alternative {
+  { f2 d }
+  { f2\repeatTie f, }
+}
+@end lilypond
+
+@snippets
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{shortening-volta-brackets.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{adding-volta-brackets-to-additional-staves.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{setting-the-double-repeat-default-for-volte.ly}
+
+@cindex ripetizioni, numeri di battuta con lettere
+@cindex ripetizioni, numeri di battuta alternativi
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{alternative-bar-numbering.ly}
+
+@seealso
+Glossario Musicale:
+@rglosnamed{repeat,ripetizione},
+@rglos{volta}.
+
+Guida alla notazione:
+@ref{Bar lines},
+@ref{Modifying context plug-ins},
+@ref{Modifying ties and slurs},
+@ref{Time administration}.
+
+Frammenti:
+@rlsr{Repeats}.
+
+Guida al funzionamento interno:
+@rinternals{VoltaBracket},
+@rinternals{RepeatedMusic},
+@rinternals{VoltaRepeatedMusic},
+@rinternals{UnfoldedRepeatedMusic}.
+
+@knownissues
+@cindex ripetizioni, ambiguità
+@cindex ripetizioni annidate
+@cindex annidamento, ripetizioni
+@cindex ripetizioni e informazioni sul tempo
+@cindex ripetizione e numero della misura
+@cindex informazioni sul tempo e ripetizioni
+@cindex numero della misura e ripetizioni
+@cindex ripetizioni e legatura di portamento
+@cindex legatura di portamento e ripetizioni
+@cindex glissandi e ripetizioni
+@cindex ripetizioni e glissandi
+
+Le legature di portamento che si estendono da un blocco @code{\repeat} verso
+un blocco @code{\alternative} funzioneranno solo nel primo finale
+alternativo.  L'aspetto grafico di una legatura di portamento che
+continua negli altri finali alternativi può essere simulato
+con @code{\repeatTie} se la legatura si estende solo su una nota
+del blocco dell'alternativa, sebbene questo metodo non funzioni
+in @code{TabStaff}.  Altri metodi che si possono adattare per indicare
+legature di portamento che continuano su varie note dei blocchi di
+alternativa, e che funzionano anche nei contesti @code{TabStaff},
+sono presentati in @ref{Modifying ties and slurs}.
+
+Inoltre le legature di portamento non possono ricollegarsi dalla fine di
+un'alternativa all'inizio della ripetizione.
+
+I glissandi che si estendono da un blocco @code{\repeat} in un blocco
+@code{\alternative} funzioneranno soltanto per il primo finale
+alternativo.  L'aspetto grafico di un glissando che continua negli
+altri finali alternativi può essere indicato creando un
+glissando che inizia su una nota di abbellimento nascosta.  Vedere ad
+esempio il frammento @qq{Estendere i glissandi attraverso le ripetizioni} nei
+Frammenti Selezionati in @ref{Glissando}.
+
+Se una ripetizione che inizia con una misura incompleta ha un blocco
+@code{\alternative} che contiene modifiche alla proprietà
+@code{measureLength}, l'uso di @code{\unfoldRepeats} causerà
+l'erroneo posizionamento delle stanghette e degli avvisi di controllo
+di battuta.
+
+Una ripetizione annidata come la seguente
+
+@example
+\repeat @dots{}
+\repeat @dots{}
+\alternative
+@end example
+
+@noindent
+è ambigua, perché non è chiaro a quale @code{\repeat} appartenga il
+blocco @code{\alternative}.  Questa ambiguità si risolve facendo in
+modo che @code{\alternative} appartenga sempre al blocco @code{\repeat}
+interno.  Per chiarezza, si consiglia di usare le parentesi in queste
+situazioni.
+
+
+@node Indicazioni di ripetizione manuali
+@unnumberedsubsubsec Indicazioni di ripetizione manuali
+@translationof Manual repeat marks
+
+@cindex indicazione manuale di ripetizione
+@cindex ripetizione, manuale
+@cindex inizio ripetizione
+@cindex ripetizione, inizio
+@cindex fine ripetizione
+@cindex ripetizione, fine
+@cindex numero di ripetizione, modificare
+@cindex volta della ripetizione, modificare
+@cindex parentesi della volta
+@cindex volta, parentesi
+@funindex repeatCommands
+@funindex start-repeat
+
+@warning{Questi metodi vengono usati solo per mostrare tipi di ripetizioni
+inusuali, e potrebbero causare un comportamento inaspettato.  Nella
+maggior parte dei casi, le ripetizioni devono essere create col
+comando standard @code{@bs{}repeat} oppure stampando le stanghette
+opportune.  Maggiori informazioni in @ref{Bar lines}.}
+
+La proprietà @code{repeatCommands} permette di controllare la formattazione
+delle ripetizioni.  Il suo valore è una lista Scheme dei comandi di ripetizione.
+
+@table @code
+@item start-repeat
+Stampa una stanghetta @code{.|:}.
+
+@lilypond[verbatim,quote,relative=2]
+c1
+\set Score.repeatCommands = #'(start-repeat)
+d4 e f g
+c1
+@end lilypond
+
+Come vuole la pratica comune di incisione, i segni di ripetizione non vengono
+stampati all'inizio di un brano.
+
+@item end-repeat
+Stampa una stanghetta @code{:|.}:
+
+@lilypond[verbatim,quote,relative=2]
+c1
+d4 e f g
+\set Score.repeatCommands = #'(end-repeat)
+c1
+@end lilypond
+
+@item (volta @var{numero}) @dots{} (volta #f)
+Crea una nuova volta col numero specificato.  La parentesi della volta deve
+essere terminata esplicitamente, altrimenti non sarà stampata.
+
+@lilypond[verbatim,quote,relative=2]
+f4 g a b
+\set Score.repeatCommands = #'((volta "2"))
+g4 a g a
+\set Score.repeatCommands = #'((volta #f))
+c1
+@end lilypond
+
+@end table
+
+Comandi di ripetizione multipli possono trovarsi nello stesso punto:
+
+@lilypond[verbatim,quote,relative=2]
+f4 g a b
+\set Score.repeatCommands = #'((volta "2, 5") end-repeat)
+g4 a g a
+c1
+\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat)
+b1
+\set Score.repeatCommands = #'((volta #f))
+@end lilypond
+
+@cindex parentesi della volta con testo
+@cindex testo nella parentesi della volta
+
+Si può includere del testo nella parentesi della volta.  Il testo può consistere di
+un numero, di più numeri o di un'indicazione testuale, si veda @ref{Formatting text}.  Il
+modo più  semplice per usare del testo è definirlo prima e poi includerlo
+nella lista Scheme,
+
+@lilypond[verbatim,quote]
+voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } }
+\relative c'' {
+  c1
+  \set Score.repeatCommands =
+    #(list(list 'volta voltaAdLib) 'start-repeat)
+  c4 b d e
+  \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat)
+  f1
+  \set Score.repeatCommands = #'((volta #f))
+}
+@end lilypond
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{printing-a-repeat-sign-at-the-beginning-of-a-piece.ly}
+
+@seealso
+Guida alla notazione:
+@ref{Bar lines},
+@ref{Formatting text}.
+
+Frammenti:
+@rlsr{Repeats}.
+
+Guida al funzionamento interno:
+@rinternals{VoltaBracket},
+@rinternals{RepeatedMusic},
+@rinternals{VoltaRepeatedMusic}.
+
+
+@node Ripetizioni ricopiate
+@unnumberedsubsubsec Ripetizioni ricopiate
+@translationof Written-out repeats
+
+@cindex ripetizioni ricopiate
+@cindex ricopiate, ripetizioni
+@cindex ripetizioni, unfold
+@cindex ripetizioni, alternativa
+@cindex unfold, ripetizione
+@cindex unfold, finali alternativi
+@cindex ripetizioni alternate
+@cindex finali alternati, ripetizioni
+@funindex unfold
+
+Col comando @code{unfold}, le ripetizioni possono servire a semplificare
+la scrittura di musica ripetitiva. La sintassi è
+
+@example
+\repeat unfold @var{numero-di-ripetizioni} @var{espressione-musicale}
+@end example
+
+@noindent
+dove @code{@var{espressione-musicale}} è la musica e
+@code{@var{numero-di-ripetizioni}} è il numero di volte per
+cui è ripetuta @code{@var{espressione-musicale}}.
+
+@lilypond[verbatim,quote,relative=2]
+\repeat unfold 2 { c4 d e f }
+c1
+@end lilypond
+
+In alcuni casi, specialmente in un contesto @code{\relative}, la funzione
+@code{\repeat unfold} non equivale a riscrivere l'espressione
+musicale più volte. Ad esempio
+
+@example
+\repeat unfold 2 @{ a'4 b c @}
+@end example
+
+non equivale a
+
+@example
+a'4 b c | a'4 b c
+@end example
+
+Le ripetizioni dispiegate (unfold) possono avere dei finali alternativi.
+
+@lilypond[verbatim,quote,relative=2]
+\repeat unfold 2 { c4 d e f }
+\alternative {
+  { c2 g' }
+  { c,2 b }
+}
+c1
+@end lilypond
+
+Se il numero di ripetizioni è maggiore del numero di finali alternativi, la
+prima alternativa viene applicata più volte, finché le alternative rimaste
+non esauriscono il numero totale delle ripetizioni.
+
+@lilypond[verbatim,quote,relative=2]
+\repeat unfold 4 { c4 d e f }
+\alternative {
+  { c2 g' }
+  { c,2 b }
+  { e2 d }
+ }
+c1
+@end lilypond
+
+Se il numero di finali alternativi è maggiore del numero di ripetizioni, solo
+le prime alternative vengono applicate. Le alternative rimanenti saranno
+ignorate e non verranno stampate.
+
+@lilypond[verbatim,quote,relative=2]
+\repeat unfold 2 { c4 d e f }
+\alternative {
+  { c2 g' }
+  { c,2 b }
+  { e2 d }
+}
+c1
+@end lilypond
+
+È  anche possibile annidare molteplici funzioni @code{unfold} (con o
+senza finali alternativi).
+
+@lilypond[verbatim,quote,relative=2]
+\repeat unfold 2 {
+  \repeat unfold 2 { c4 d e f }
+  \alternative {
+    { c2 g' }
+    { c,2 b }
+  }
+}
+c1
+@end lilypond
+
+Gli accordi si ripetono col simbolo di ripetizione dell'accordo
+@code{q}.  Vedi @ref{Chord repetition}.
+
+@warning{Se si usa @code{@bs{}relative} dentro a un blocco @code{@bs{}repeat}
+senza istanziare esplicitamente il contesto @code{Voice}, appare un rigo
+in  più (non desiderato).  Vedi @rprogram{Appare un rigo in più}.}
+
+@seealso
+Guida alla notazione:
+@ref{Chord repetition}.
+
+Frammenti:
+@rlsr{Repeats}.
+
+Guida al funzionamento interno:
+@rinternals{RepeatedMusic},
+@rinternals{UnfoldedRepeatedMusic}.
+
+
+@node Ripetizioni brevi
+@subsection Ripetizioni brevi
+@translationof Short repeats
+
+Questa sezione tratta il modo in cui inserire brevi ripetizioni.  Le ripetizioni
+brevi possono avere due forme: segni di tratto obliquo o percentuale per rappresentare le
+ripetizioni di una singola nota, di una singola misura o di due misure; tremolo
+negli altri casi.
+
+@menu
+* Ripetizioni con percentuale::
+* Ripetizioni con tremolo::
+@end menu
+
+@node Ripetizioni con percentuale
+@unnumberedsubsubsec Ripetizioni con percentuale
+@translationof Percent repeats
+
+@cindex ripetizioni con percentuale
+@cindex percentuale, ripetizioni
+@cindex ripetizioni della misura
+@cindex misura, ripetizioni
+@cindex ripetizione, breve
+@funindex \repeat percent
+@funindex percent
+
+Brevi sezioni ripetute vengono stampate la prima volta volta e le ripetizioni vengono
+sostituite da un apposito segno.
+
+La sintassi è
+
+@example
+\repeat percent @var{numero} @var{espressione-musicale}
+@end example
+
+@noindent
+dove @code{@var{espressione-musicale}} è l'espressione musicale da ripetere.
+
+Fraseggi più brevi di una misura vengono sostituiti dal tratto obliquo.
+
+@lilypond[verbatim,quote,relative=2]
+\repeat percent 4 { c128 d e f }
+\repeat percent 4 { c64 d e f }
+\repeat percent 5 { c32 d e f }
+\repeat percent 4 { c16 d e f }
+\repeat percent 4 { c8 d }
+\repeat percent 4 { c4 }
+\repeat percent 2 { c2 }
+@end lilypond
+
+Fraseggi di una o due misure vengono sostituiti da simboli simili alla percentuale.
+
+@lilypond[verbatim,quote,relative=2]
+\repeat percent 2 { c4 d e f }
+\repeat percent 2 { c2 d }
+\repeat percent 2 { c1 }
+@end lilypond
+
+@lilypond[verbatim,quote,relative=2]
+\repeat percent 3 { c4 d e f | c2 g' }
+@end lilypond
+
+Fraseggi più brevi di una misura ma con durate miste adottano un
+simbolo di doppia percentuale.
+
+@lilypond[verbatim,quote,relative=2]
+\repeat percent 4 { c8. <d f>16 }
+\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 }
+@end lilypond
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{percent-repeat-counter.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{percent-repeat-count-visibility.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{isolated-percent-repeats.ly}
+
+@seealso
+Glossario Musicale:
+@rglos{percent repeat},
+@rglos{simile}.
+
+Frammenti:
+@rlsr{Repeats}.
+
+Guida al funzionamento interno:
+@rinternals{RepeatSlash},
+@rinternals{RepeatSlashEvent},
+@rinternals{DoubleRepeatSlash},
+@rinternals{PercentRepeat},
+@rinternals{PercentRepeatCounter},
+@rinternals{PercentRepeatedMusic},
+@rinternals{Percent_repeat_engraver},
+@rinternals{DoublePercentEvent},
+@rinternals{DoublePercentRepeat},
+@rinternals{DoublePercentRepeatCounter},
+@rinternals{Double_percent_repeat_engraver},
+@rinternals{Slash_repeat_engraver}.
+
+
+@node Ripetizioni con tremolo
+@unnumberedsubsubsec Ripetizioni con tremolo
+@translationof Tremolo repeats
+
+@cindex travature del tremolo
+@cindex tremolo
+@cindex ripetizione, tremolo
+@funindex \repeat tremolo
+@funindex tremolo
+
+I tremoli possono avere due forme: alternanza tra  due note, o due
+accordi, e rapida ripetizione di una singola nota o accordo.  I tremoli
+costituiti da un'alternanza si indicano con delle travature che collegano
+le note o gli accordi che si alternano, mentre i tremoli che consistono
+in una rapida ripetizione di una nota singola si indicano aggiungendo delle
+travature o dei tratti di suddivisione obliqui alla singola nota.
+
+Per inserire i segni del tremolo tra le note, si usa @code{\repeat} con
+lo stile tremolo:
+
+@lilypond[quote,verbatim,relative=2]
+\repeat tremolo 8 { c16 d }
+\repeat tremolo 6 { c16 d }
+\repeat tremolo 2 { c16 d }
+@end lilypond
+
+La sintassi di @code{\repeat tremolo} prevede specificamente che
+all'interno delle parentesi siano indicate due note, e che il numero di ripetizioni corrisponda
+a un valore espresso in durate di note normali o puntate.
+Dunque @code{\repeat tremolo 7} è valido e produce una nota doppiamente puntata,
+mentre @code{\repeat tremolo 9} non è valido.
+
+La durata del tremolo equivale alla durata dell'espressione musicale tra
+parentesi moltiplicata per il numero di ripetizioni:
+@code{\repeat tremolo 8 @{ c16 d16 @}} corrisponde a un tremolo di una semibreve,
+rappresentata come due semibrevi unite dalle travature del tremolo.
+
+Ci sono due modi di inserire dei segni di tremolo su una singola nota.  Anche
+in questo caso si usa la sintassi @code{\repeat tremolo}, ma la nota non deve
+essere racchiusa tra parentesi:
+
+@lilypond[quote,verbatim,ragged-right]
+\repeat tremolo 4 c'16
+@end lilypond
+
+@cindex segni di tremolo
+@cindex tremolo, segni
+@funindex tremoloFlags
+@funindex :
+
+Si può ottenere lo stesso output aggiungendo @code{:@var{N}} dopo
+la nota, dove @code{@var{N}} indica la durata della suddivisione
+(deve essere almeno 8).  Se @code{@var{N}} è 8, viene aggiunta una
+travatura al gambo della nota.  Se @code{@var{N}} è omesso, viene
+usato l'ultimo valore (salvato in @code{tremoloFlags}):
+
+@lilypond[quote,verbatim,relative=2]
+c2:8 c:32
+c: c:
+@end lilypond
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{cross-staff-tremolos.ly}
+
+@seealso
+Frammenti:
+@rlsr{Repeats}.
+
+@cindex tremolo tra due righi
+
+@c  LocalWords:  voltaAdLib
diff --git a/Documentation/it/notation/rhythms.itely b/Documentation/it/notation/rhythms.itely
new file mode 100644 (file)
index 0000000..cf64c68
--- /dev/null
@@ -0,0 +1,3686 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+@ignore
+    Translation of GIT committish: 8d26005d0b783e546de362b96fb1b00540875064
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.17.30"
+
+@c Translators: Federico Bruni
+@c Translation checkers: Luca Rossetto Casel
+
+@node Ritmi
+@section Ritmi
+@translationof Rhythms
+
+@lilypondfile[quote]{rhythms-headword.ly}
+
+Questa sezione tratta i ritmi, le pause, le durate, la disposizione delle
+travature e le battute.
+
+@menu
+* Inserimento delle durate::
+* Inserimento delle pause::
+* Aspetto dei ritmi::
+* Travature::
+* Battute::
+* Questioni ritmiche particolari::
+@end menu
+
+
+@node Inserimento delle durate
+@subsection Inserimento delle durate
+@translationof Writing rhythms
+
+@menu
+* Durata::
+* Gruppi irregolari::
+* Scalare le durate::
+* Legature di valore::
+@end menu
+
+@node Durata
+@unnumberedsubsubsec Durata
+@translationof Durations
+
+@cindex durata delle note
+@cindex note, durata delle
+@cindex lunghezza delle note
+@cindex note, lunghezza delle
+
+@funindex \longa
+@funindex longa
+@funindex \breve
+@funindex breve
+@funindex \maxima
+@funindex maxima
+
+Le durate, indicate con numeri e punti, sono indicate con i
+valori corrispondenti.  Per esempio, una nota di un quarto si indica con un
+@code{4} (dato che il suo valore è un 1/4), mentre una minima si indica
+col @code{2} (dato che il suo valore è 1/2).  Per le note più lunghe
+di un intero bisogna usare i comandi @code{\longa} (due volte una
+breve) e @code{\breve}. La minor durata esprimibile per una nota indipendente è di 128; è possibile inserire anche valori inferiori, ma solo all'interno
+di travature.
+
+@c Two 64th notes are needed to obtain beams
+@lilypond[quote,verbatim,relative=2]
+\time 8/1
+c\longa c\breve c1 c2
+c4 c8 c16 c32 c64 c128 c128
+@end lilypond
+
+Ecco gli stessi valori con la disposizione automatica delle travature disabilitata.
+
+@c not strictly "writing rhythms"; more of a "displaying" thing,
+@c but it's ok here.  -gp
+@lilypond[quote,verbatim,relative=2]
+\time 8/1
+\autoBeamOff
+c\longa c\breve c1 c2
+c4 c8 c16 c32 c64 c128 c128
+@end lilypond
+
+Solo nella notazione per musica antica è possibile specificare una nota che
+dura quattro volte una breve, attraverso il comando @code{\maxima}.  Per maggiori
+informazioni si veda @ref{Ancient notation}.
+
+@cindex durata predefinita
+@cindex nota, durata predefinita
+
+Se una durata viene omessa, viene mantenuta quella  precedente.  Il valore
+predefinito della prima nota è di un quarto.
+
+@lilypond[quote,verbatim,relative=2]
+a a a2 a a4 a a1 a
+@end lilypond
+
+@cindex note puntate
+@cindex punto, note
+@cindex note doppiamente puntate
+@cindex doppio punto, note
+
+@funindex .
+
+Per ottenere note puntate, si inserisce un punto (@code{.}) dopo la
+durata.  Le figure con doppio punto si indicano aggiungendo due
+punti, e così via.
+
+@lilypond[quote,verbatim,relative=2]
+a4 b c4. b8 a4. b4.. c8.
+@end lilypond
+
+Alcune durate non possono essere rappresentate soltanto con
+durate e punti; occorre inserire una legatura di valore tra
+due o più note.  I dettagli sono spiegati in @ref{Ties}.
+
+Per sapere come specificare le durate delle sillabe del testo e
+come allineare il testo alle note, si veda @ref{Vocal music}.
+
+Le note possono essere distanziate in modo rigorosamente proporzionale
+alla loro durata.  I dettagli relativi a questo argomento e alle impostazioni
+della notazione proporzionale si trovano in @ref{Proportional notation}.
+
+@funindex \dotsUp
+@funindex dotsUp
+@funindex \dotsDown
+@funindex dotsDown
+@funindex \dotsNeutral
+@funindex dotsNeutral
+
+Di norma i punti sono spostati in su per evitare le linee del rigo, fuorché all'interno
+di passaggi polifonici.  I punti possono essere orientati manualmente verso l'alto
+o verso il basso; si veda @ref{Direction and placement}.
+
+
+@predefined
+@code{\autoBeamOn},
+@code{\autoBeamOff},
+@code{\dotsUp},
+@code{\dotsDown},
+@code{\dotsNeutral}.
+@endpredefined
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{alternative-breve-notes.ly}
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{changing-the-number-of-augmentation-dots-per-note.ly}
+
+@seealso
+Glossario musicale:
+@rglos{breve},
+@rglos{longa},
+@rglos{maxima},
+@rglosnamed{note value,durata},
+@rglosnamed{Duration names notes and rests,Nomi di durata delle note e delle pause}.
+
+Guida alla notazione:
+@ref{Automatic beams},
+@ref{Ties},
+@ref{Stems},
+@ref{Writing rhythms},
+@ref{Writing rests},
+@ref{Vocal music},
+@ref{Ancient notation},
+@ref{Proportional notation}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{Dots},
+@rinternals{DotColumn}.
+
+@knownissues
+@c Deliberately duplicated in Durations and Rests.  -gp
+Non c'è un limite massimo o minimo alla durata di una pausa, ma è
+il numero dei glifi ad essere limitato: si possono indicare pause da un
+centoventottesimo fino alla maxima (otto volte una semibreve).
+
+
+@node Gruppi irregolari
+@unnumberedsubsubsec Gruppi irregolari
+@translationof Tuplets
+
+@cindex gruppi irregolari
+@cindex terzine
+
+@funindex \tuplet
+@funindex tuplet
+
+I gruppi irregolari sono costituiti da un'espressione musicale
+introdotta dal comando @code{\tuplet}, che moltiplica la velocità
+dell'espressione musicale per una frazione:
+
+@example
+\tuplet @var{frazione} @{ @var{musica} @}
+@end example
+
+@noindent
+Il numeratore della frazione apparirà sopra o sotto le note; eventualmente, con
+l'aggiunta opzionale di una parentesi quadra.  Il gruppo irregolare più comune
+è la terzina, in cui 3@tie{}note hanno la durata di @tie{}2:
+
+@lilypond[quote,verbatim,relative=2]
+a2 \tuplet 3/2 { b4 b b }
+c4 c \tuplet 3/2 { b4 a g }
+@end lilypond
+
+@cindex raggruppamento dei gruppi irregolari
+@cindex gruppi irregolari, raggruppamento
+@noindent
+In caso di lunghi passaggi di gruppi irregolari, dover scrivere
+un comando @code{\tuplet} per ogni gruppo è scomodo.  È possibile
+specificare direttamente la durata di un gruppo irregolare prima
+della musica per far sì che i gruppi siano suddivisi automaticamente:
+
+@lilypond[quote,verbatim,relative=2]
+g2 r8 \tuplet 3/2 8 { cis16 d e e f g g f e }
+@end lilypond
+
+@cindex posizionamento della parentesi quadra del gruppo irregolare
+@cindex gruppo irregolare, posizionamento della parentesi quadra
+
+@funindex \tupletUp
+@funindex tupletUp
+@funindex \tupletDown
+@funindex tupletDown
+@funindex \tupletNeutral
+@funindex tupletNeutral
+
+Le parentesi dei gruppi irregolari si possono posizionare manualmente sopra
+o sotto il rigo, come spiegato dettagliatamente in @ref{Direction and placement}.
+
+È possibile annidare i gruppi irregolari:
+
+@lilypond[quote,verbatim,relative=2]
+\autoBeamOff
+c4 \tuplet 5/4 { f8 e f \tuplet 3/2 { e[ f g] } } f4
+@end lilypond
+
+La modifica di gruppi irregolari annidati che iniziano simultaneamente
+richiede l'uso di @code{\tweak}.
+
+Per modificare la durata delle note senza introdurre un gruppo
+irregolare, si veda @ref{Scaling durations}.
+
+
+@predefined
+@code{\tupletUp},
+@code{\tupletDown},
+@code{\tupletNeutral}.
+@endpredefined
+
+
+@snippets
+
+@cindex formattazione del gruppo irregolare
+@cindex gruppo irregolare, formattazione del
+@cindex formattazione della terzina
+@cindex terzina, formattazione della
+
+@funindex tupletNumberFormatFunction
+@funindex tupletSpannerDuration
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{entering-several-tuplets-using-only-one--times-command.ly}
+
+@cindex gruppo irregolare, modifiche del numero del
+@cindex numero del gruppo irregolare, modifiche del
+
+@funindex TupletNumber
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{changing-the-tuplet-number.ly}
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{non-default-tuplet-numbers.ly}
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{controlling-tuplet-bracket-visibility.ly}
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{permitting-line-breaks-within-beamed-tuplets.ly}
+
+@seealso
+Glossario musicale:
+@rglosnamed{triplet,terzina},
+@rglosnamed{tuplet,gruppo irregolare},
+@rglosnamed{polymetric,polimetrico}.
+
+Manuale di apprendimento:
+@rlearning{Tweaking methods}.
+
+Guida alla notazione:
+@ref{Time administration},
+@ref{Scaling durations},
+@ref{The tweak command},
+@ref{Polymetric notation}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{TupletBracket},
+@rinternals{TupletNumber},
+@rinternals{TimeScaledMusic}.
+
+@cindex abbellimenti all'interno della parentesi di un gruppo irregolare
+
+@knownissues
+Gli abbellimenti possono essere inseriti all'interno delle parentesi dei gruppi
+irregolari, @emph{eccetto} quando un rigo inizia con un abbellimento
+seguito da un gruppo irregolare.  In questo caso particolare, l'abbellimento
+deve essere inserito prima del comando @code{\tuplet} per evitare errori.
+
+@cindex segni di tempo all'interno delle parentesi di un gruppo irregolare
+
+Quando si pone un gruppo irregolare all'inizio di un brano che presenta
+un'indicazione di @code{\tempo}, la musica deve essere inserita esplicitamente
+in un blocco @code{\new Voice}, come è spiegato in @rlearning{Voices contain music}.
+
+
+@node Scalare le durate
+@unnumberedsubsubsec Scalare le durate
+@translationof Scaling durations
+
+@cindex scalare le durate
+@cindex durate, scalare
+
+La durata di singole note, pause o accordi può essere moltiplicata
+per una frazione @code{N/M} aggiungendo @code{*N/M} (o @code{*N} se @code{M}
+è 1).  Questo non cambierà l'aspetto delle note o delle pause, ma
+la durata così alterata verrà utilizzata per calcolare la posizione
+all'interno della misura e per impostare la durata nel file MIDI.
+Si possono combinare molteplici fattori, come @code{*L*M/N}.  I fattori
+fanno parte della durata: quindi se non si specifica una durata per
+le note successive, la durata ripresa dalla nota precedente
+includerà il fattore di scalatura.
+
+Nell'esempio seguente le prime tre note occupano esattamente
+due tempi, ma non sono indicate come gruppo irregolare.
+
+@lilypond[quote,relative=2,verbatim]
+\time 2/4
+% Trasforma le durate in terzine
+a4*2/3 gis a
+% Durate normali
+a4 a
+% Raddoppia la durata dell'accordo
+<a d>4*2
+% Durata di un quarto, ma appare come un sedicesimo
+b16*4 c4
+@end lilypond
+
+Anche la durata delle pause spaziatrici può essere modificata
+con un moltiplicatore.  Può essere utile per saltare molte misure; per
+esempio @code{s1*23}.
+
+@cindex comprimere la musica
+@cindex espandere la musica
+
+@funindex \scaleDurations
+@funindex scaleDurations
+
+Frammenti musicali più lunghi possono essere compressi secondo la stessa proporzione, come
+moltiplicando ogni nota, accordo o pausa per una medesima frazione.
+In questo modo, l'aspetto della musica non cambia ma la durata interna delle note
+viene moltiplicata per la frazione @emph{num}/@emph{den}.  Ecco un esempio
+che mostra come la musica possa essere compressa e espansa:
+
+@lilypond[quote,relative=2,verbatim]
+\time 2/4
+% Durate normali
+<c a>4 c8 a
+% Scala la musica di *2/3
+\scaleDurations 2/3 {
+  <c a f>4. c8 a f
+}
+% Scala la musica di *2
+\scaleDurations 2/1 {
+  <c' a>4 c8 b
+}
+@end lilypond
+
+Questo comando torna utile nella notazione polimetrica, si veda
+@ref{Polymetric notation}.
+
+@seealso
+Guida alla notazione:
+@ref{Tuplets},
+@ref{Invisible rests},
+@ref{Polymetric notation}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+@knownissues
+Il calcolo della posizione in una misura deve considerare tutti i
+fattori di dimensionamento applicati alle note di quella misura
+e gli esigui residui delle misure precedenti.  Questo calcolo
+viene fatto con numeri razionali. Se un numeratore o un denominatore
+intermedi in quel calcolo eccedono di 2^30, l'esecuzione e la
+composizione tipografica si arresteranno in quel punto senza
+indicare un errore.
+
+
+@node Legature di valore
+@unnumberedsubsubsec Legature di valore
+@translationof Ties
+
+@cindex legatura di valore
+
+@funindex ~
+
+Una legatura di valore connette le teste di due note della stessa altezza successive.
+Dunque, la legatura di valore prolunga la durata di una nota.
+
+@warning{Le legature di valore non devono essere confuse con le
+@emph{legature di portamento}, che articolano un passaggio, o
+con le @emph{legature di frase}, che delimitano una frase
+musicale.  Una legatura di valore serve semplicemente a prolungare
+la durata di una nota, in modo analogo al punto di valore.}
+
+La legatura di valore si inserisce aggiungendo il simbolo tilde (@code{~})
+alla prima di ogni coppia di note legate.  Esso indica che la nota deve
+essere legata alla nota successiva, che deve essere della stessa altezza.
+
+@lilypond[quote,verbatim,relative=2]
+a2~ a4~ a16 r r8
+@end lilypond
+
+Le legature di valore si usano per unire due note a cavallo di una
+stanghetta di battuta, oppure quando non si possono usare i punti per esprimere
+una particolare durata.  Le legature si dovrebbero usare anche per
+unire note dalle durate superiori all'unità di suddivisione della misura:
+
+@lilypond[verbatim,quote]
+\relative c' {
+  r8 c~ c2 r4 |
+  r8^"non" c2~ c8 r4
+}
+@end lilypond
+
+Per legare una successione di note la cui durata si prolunga per più
+misure intere, è più semplice ricorrere alla suddivisione automatica
+delle note, come è spiegato in @ref{Automatic note splitting}.  Questo metodo
+divide automaticamente le note lunghe e le connette da misura a misura.
+
+@cindex legature di valore e accordi
+@cindex accordi e legature di valore
+
+Quando si applica una legatura di valore a degli accordi, vengono legate
+tutte le teste delle note della stessa altezza.  In assenza di altezze corrispondenti,
+non verrà creata alcuna legatura.  Singoli suoni degli accordi possono essere
+legati inserendo la legatura all'interno dell'accordo stesso.
+
+@lilypond[quote,verbatim,relative=1]
+<c e g>~ <c e g c>
+<c~ e g~ b> <c e g b>
+@end lilypond
+
+@cindex ripetere le legature di valore
+@cindex legature di valore, ripetizione
+@cindex parentesi della volta e legature di valore
+@cindex legature di valore e parentesi della volta
+
+@funindex \repeatTie
+@funindex repeatTie
+
+Quando la battuta della "seconda volta" di un ritornello inizia con una nota
+legata a quella precedente, occorre indicare la legatura nel modo seguente:
+
+@lilypond[quote,relative=2,verbatim]
+\repeat volta 2 { c g <c e>2~ }
+\alternative {
+  % Prima volta: la nota seguente viene legata in modo normale
+  { <c e>2. r4 }
+  % Seconda volta: la nota seguente ha una legatura ripetuta
+  { <c e>2\repeatTie d4 c } }
+@end lilypond
+
+@cindex laissez vibrer
+@cindex legatura di valore, laissez vibrer
+
+@funindex \laissezVibrer
+@funindex laissezVibrer
+
+Le legature @notation{L.v.}@: (@notation{laissez vibrer}) indicano che
+le note non devono essere terminate nettamente.  Si usa nella notazione per
+pianoforte, arpa e altri strumenti a corda e a percussione.  Si inseriscono
+così:
+
+@lilypond[quote,verbatim,relative=1]
+<c f g>1\laissezVibrer
+@end lilypond
+
+@cindex legature di valore, posizionamento
+
+@funindex \tieUp
+@funindex tieUp
+@funindex \tieDown
+@funindex tieDown
+@funindex \tieNeutral
+@funindex tieNeutral
+
+Le legature di valore possono essere impostate manualmente  per avere la
+curva in su o in giù, come è spiegato in @ref{Direction and placement}.
+
+@cindex legature di valore, aspetto
+@cindex legature di valore punteggiate
+@cindex legature di valore tratteggiate
+
+@funindex \tieDotted
+@funindex tieDotted
+@funindex \tieDashed
+@funindex tieDashed
+@funindex \tieSolid
+@funindex tieSolid
+
+Le legature di valore possono essere tratteggiate, punteggiate, oppure tracciate secondo una
+successione di tratti continui e tratti interrotti.
+
+@lilypond[quote, verbatim, relative=1]
+\tieDotted
+c2~ c
+\tieDashed
+c2~ c
+\tieHalfDashed
+c2~ c
+\tieHalfSolid
+c2~ c
+\tieSolid
+c2~ c
+@end lilypond
+
+Si possono specificare modelli di tratteggiatura personalizzati:
+
+@lilypond[quote, verbatim, relative=1]
+\tieDashPattern #0.3 #0.75
+c2~ c
+\tieDashPattern #0.7 #1.5
+c2~ c
+\tieSolid
+c2~ c
+@end lilypond
+
+Le definizioni dei modelli di tratteggiatura delle legature di valore hanno la
+stessa struttura di quelle per le legature di portamento. I dettagli relativi
+ai modelli complessi di tratteggiatura sono trattati in @ref{Slurs}.
+
+Se le legature collidono con altri oggetti del rigo, si possono sovrascrivere
+le proprietà di formattazione @var{whiteout} e @var{layer}.
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+\override Tie.layer = #-2
+\override Staff.TimeSignature.layer = #-1
+\override Staff.KeySignature.layer = #-1
+\override Staff.TimeSignature.whiteout = ##t
+\override Staff.KeySignature.whiteout = ##t
+b2 b~
+\time 3/4
+\key a \major
+b r4
+@end lilypond
+
+@predefined
+@code{\tieUp},
+@code{\tieDown},
+@code{\tieNeutral},
+@code{\tieDotted},
+@code{\tieDashed},
+@code{\tieDashPattern},
+@code{\tieHalfDashed},
+@code{\tieHalfSolid},
+@code{\tieSolid}.
+@endpredefined
+
+@snippets
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{using-ties-with-arpeggios.ly}
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{engraving-ties-manually.ly}
+
+@seealso
+Glossario musicale:
+@rglosnamed{tie,legatura di valore},
+@rglos{laissez vibrer}.
+
+Guida alla notazione:
+@ref{Slurs},
+@ref{Automatic note splitting}.
+
+Frammenti di codice:
+@rlsr{Expressive marks},
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{LaissezVibrerTie},
+@rinternals{LaissezVibrerTieColumn},
+@rinternals{TieColumn},
+@rinternals{Tie}.
+
+@knownissues
+Cambiare rigo mentre una legatura di valore è attiva non produce una legatura
+obliqua.
+
+Il cambio di chiave o di ottava durante una legatura di valore non è una
+situazione ben definita.  In questi casi è preferibile usare una legatura
+di portamento.
+
+
+@node Inserimento delle pause
+@subsection Inserimento delle pause
+@translationof Writing rests
+
+Le pause si inseriscono insieme alla musica contenuta nelle espressioni musicali.
+
+@menu
+* Pause::
+* Pause invisibili::
+* Pause d'intero::
+@end menu
+
+@node Pause
+@unnumberedsubsubsec Pause
+@translationof Rests
+
+@cindex pausa
+@cindex pausa, inserire le durate
+@cindex pausa di maxima
+@cindex pausa di longa
+@cindex pausa di breve
+
+@funindex \rest
+@funindex rest
+@funindex r
+@funindex \maxima
+@funindex maxima
+@funindex \longa
+@funindex longa
+@funindex \breve
+@funindex breve
+
+Le pause si inseriscono allo stesso modo delle note, ma con il carattere @code{r}.
+Le durate più lunghe di un intero usano i seguenti comandi predefiniti:
+
+@c \time 16/1 is used to avoid spurious bar lines
+@c and long tracts of empty measures
+@lilypond[quote,verbatim,relative=2]
+\new Staff {
+  % Queste due linee servono solo ad abbellire questo esempio
+  \time 16/1
+  \omit Staff.TimeSignature
+  % Mostra una pausa di maxima, equivalente a quattro brevi
+  r\maxima
+  % Mostra una pausa di longa, equivalente a due brevi
+  r\longa
+  % Mostra una pausa di breve
+  r\breve
+  r1 r2 r4 r8 r16 r32 r64 r128
+}
+@end lilypond
+
+@cindex pausa multipla
+@cindex pausa d'intero
+
+Le pause d'intero, poste al centro della misura, devono essere inserite
+come pause multiple.  Si possono usare sia per una sola misura sia
+su più misure, come è spiegato in @ref{Full measure rests}.
+
+@cindex pausa, specificare la posizione verticale
+
+Per indicare esplicitamente la posizione verticale di una pausa, si scrive
+la nota corrispondente seguita da @code{\rest}.  Una pausa della durata della
+nota verrà collocata nella posizione della nota sul rigo.  Questo
+permette una precisa formattazione manuale della musica polifonica, dato che
+il formattatore automatico che gestisce le collisioni tra pause non interviene su
+questo tipo di pause.
+
+@lilypond[quote,verbatim,relative=2]
+a4\rest d4\rest
+@end lilypond
+
+@snippets
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{rest-styles.ly}
+
+@seealso
+Glossario musicale:
+@rglos{breve},
+@rglos{longa},
+@rglos{maxima}.
+
+Guida alla notazione:
+@ref{Full measure rests}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{Rest}.
+
+@knownissues
+@c Deliberately duplicated in Durations and Rests.  -gp
+Non c'è un limite massimo o minimo alla durata di una pausa, ma è
+il numero dei glifi ad essere limitato: si possono indicare pause da un
+centoventottesimo fino alla maxima (otto volte una semibreve).
+
+
+@node Pause invisibili
+@unnumberedsubsubsec Pause invisibili
+@translationof Invisible rests
+
+@cindex \skip
+@cindex pausa invisibile
+@cindex nota spaziatrice
+@cindex pausa spaziatrice
+
+@funindex s
+@funindex \skip
+@funindex skip
+
+Una pausa invisibile (chiamata anche @q{pausa spaziatrice}) si inserisce come
+come una nota col nome@tie{}@code{s}:
+
+@lilypond[verbatim,quote,relative=2]
+c4 c s c
+s2 c
+@end lilypond
+
+@cindex testo, \skip
+
+Le pause spaziatrici possono essere usate soltanto nella modalità note e
+nella modalità accordi.  In altre situazioni, ad esempio quando si inserisce
+il testo vocale, si usa il comando @code{\skip} per saltare un valore musicale.
+@code{\skip} richiede una durata esplicita, ma questo requisito viene ignorato
+se il testo desume le proprie durate dalle note presenti in una melodia ad esso
+associata attraverso @code{\addlyrics} o @code{\lyricsto}.
+
+@lilypond[quote,verbatim,relative=2]
+<<
+  {
+    a2 \skip2 a2 a2
+  }
+  \new Lyrics {
+    \lyricmode {
+      foo2 \skip 1 bla2
+    }
+  }
+>>
+@end lilypond
+
+Dato che @code{\skip} è un comando, non modifica la durata predefinita delle
+note che seguono, diversamente da@tie{}@code{s}.
+
+@lilypond[quote,verbatim,relative=2]
+<<
+  {
+    \repeat unfold 8 { a4 }
+  }
+  {
+    a4 \skip 2 a |
+    s2 a
+  }
+>>
+@end lilypond
+
+
+Una pausa spaziatrice crea implicitamente i contesti @code{Staff} e @code{Voice}
+se non esistono già, proprio come accade per le note e le pause:
+
+@lilypond[quote,verbatim,relative=2]
+s1 s s
+@end lilypond
+
+@code{\skip} si limita a saltare un valore musicale, non crea nessun tipo di
+output.
+
+@lilypond[quote,verbatim,relative=2]
+% Questo input è corretto, ma non produce niente
+\skip 1 \skip1 \skip 1
+@end lilypond
+
+@seealso
+Manuale di apprendimento:
+@rlearning{Visibility and color of objects}.
+
+Guida alla notazione:
+@ref{Hidden notes},
+@ref{Visibility of objects}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{SkipMusic}.
+
+
+@node Pause d'intero
+@unnumberedsubsubsec Pause d'intero
+@translationof Full measure rests
+
+@cindex pause multiple
+@cindex pause d'intero
+@cindex pausa intera per una misura intera
+
+@funindex R
+
+Le pause per una o più misure d'intero si inseriscono, come le note, col
+carattere maiuscolo @code{R}:
+
+@lilypond[quote,verbatim,relative=2]
+% L'insieme delle misure di pausa vengono riportate in una sola misura
+\compressFullBarRests
+R1*4
+R1*24
+R1*4
+b2^"Tutti" b4 a4
+@end lilypond
+
+La durata delle pause multiple è identica alla notazione di durata
+usata per le note e deve essere sempre un numero intero di misure/lunghezze,
+quindi occorre spesso usare dei punti di aumentazione o delle frazioni:
+
+@lilypond[quote,verbatim,relative=2]
+\compressFullBarRests
+\time 2/4
+R1 | R2 |
+\time 3/4
+R2. | R2.*2 |
+\time 13/8
+R1*13/8 | R1*13/8*12 |
+\time 10/8
+R4*5*4 |
+@end lilypond
+
+Una pausa d'intero appare al centro della misura con la durata di una semibreve
+o di una breve, in base all'indicazione di tempo.
+
+@lilypond[quote,verbatim,relative=2]
+\time 4/4
+R1 |
+\time 6/4
+R1*3/2 |
+\time 8/4
+R1*2 |
+@end lilypond
+
+@cindex pausa multipla, espansione
+@cindex pausa multipla, contrazione
+
+@funindex \expandFullBarRests
+@funindex expandFullBarRests
+@funindex \compressFullBarRests
+@funindex compressFullBarRests
+
+Di norma una pausa multipla viene scorporata sul pentagramma in modo da
+mostrare esplicitamente tutte le misure per cui si prolunga.
+Altrimenti, è possibile indicarla collocando in una sola
+misura un simbolo di pausa multipla, col numero di misure
+per cui la pausa si prolunga posto al di sopra della misura stessa:
+
+@lilypond[quote,verbatim,relative=2]
+% Default behavior
+\time 3/4 r2. | R2.*2 |
+\time 2/4 R2 |
+\time 4/4
+% Tutte le misure di pausa sono riportate in una singola misura
+\compressFullBarRests
+r1 | R1*17 | R1*4 |
+% Le misure della pausa multipla sono scorporate
+\expandFullBarRests
+\time 3/4
+R2.*2 |
+@end lilypond
+
+
+@cindex testo su pausa multipla
+@cindex pausa multipla, attaccare testo
+@cindex script su pausa multipla
+@cindex pausa multipla, script
+@cindex fermata su pausa multipla
+@cindex pausa multipla, attaccare fermata
+@cindex annotazione su pausa multipla
+@cindex pausa multipla con testo a margine
+
+@funindex \fermataMarkup
+@funindex fermataMarkup
+@funindex MultiMeasureRestText
+
+Si possono aggiungere delle annotazioni alle pause multiple.  Il comando
+predefinito @code{\fermataMarkup} permette di aggiungere il segno di corona.
+
+@lilypond[quote,verbatim,relative=2]
+\compressFullBarRests
+\time 3/4
+R2.*10^\markup { \italic "ad lib." }
+R2.^\fermataMarkup
+@end lilypond
+
+@warning{Il testo connesso a una pausa multipla è un oggetto di tipo
+@code{MultiMeasureRestText}, non @code{TextScript}.  Le sovrascritture
+devono specificare l'oggetto corretto o saranno ignorate.  Si veda
+l'esempio seguente:}
+
+@lilypond[quote,verbatim,relative=2]
+% Questo non funziona, perché è specificato il nome dell'oggetto sbagliato
+\override TextScript.padding = #5
+R1^"sbagliato"
+% Questo è il nome dell'oggetto corretto da specificare
+\override MultiMeasureRestText.padding = #5
+R1^"corretto"
+@end lilypond
+
+Quando una pausa multipla segue immediatamente un comando @code{\partial}, potrebbero
+non apparire i relativi avvertimenti del controllo battuta.
+
+
+@funindex \textLengthOn
+@funindex textLengthOn
+@funindex \textLengthOff
+@funindex textLengthOff
+@funindex \fermataMarkup
+@funindex fermataMarkup
+@funindex \compressFullBarRests
+@funindex compressFullBarRests
+@funindex \expandFullBarRests
+@funindex expandFullBarRests
+
+@predefined
+@code{\textLengthOn},
+@code{\textLengthOff},
+@code{\fermataMarkup},
+@code{\compressFullBarRests},
+@code{\expandFullBarRests}.
+@endpredefined
+
+
+@snippets
+
+@cindex pausa ecclesiastica
+@cindex kirchenpausen
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{changing-form-of-multi-measure-rests.ly}
+
+@cindex pause multiple, posizionamento
+@cindex posizionare pause multiple
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{positioning-multi-measure-rests.ly}
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{multi-measure-rest-markup.ly}
+
+@seealso
+Glossario musicale:
+@rglosnamed{multi-measure rest,pausa multipla}.
+
+Guida alla notazione:
+@ref{Durations},
+@ref{Text},
+@ref{Formatting text},
+@ref{Text scripts}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{MultiMeasureRest},
+@rinternals{MultiMeasureRestNumber},
+@rinternals{MultiMeasureRestText}.
+
+@cindex diteggiature e pause multiple
+@cindex pause multiple e diteggiature
+
+@knownissues
+Se una diteggiatura viene posta su una pausa multipla (ad esempio
+@code{R1*10-4}), il numero della diteggiatura può collidere col numero
+del contatore delle battute.
+
+@cindex condensare le pause normali
+@cindex pause, condensare
+
+Non è possibile condensare automaticamente molteplici pause normali in
+in una singola pausa multipla.
+
+@cindex pausa, collisioni di
+
+Le pause multiple non considerano le collisioni di pausa.
+
+
+@node Aspetto dei ritmi
+@subsection Aspetto dei ritmi
+@translationof Displaying rhythms
+
+@menu
+* Indicazione di tempo::
+* Indicazioni metronomiche::
+* Anacrusi::
+* Musica in tempo libero::
+* Notazione polimetrica::
+* Divisione automatica delle note::
+* Mostrare i ritmi della melodia::
+@end menu
+
+@node Indicazione di tempo
+@unnumberedsubsubsec Indicazione di tempo
+@translationof Time signature
+
+@cindex indicazione di tempo
+@cindex tempo
+@cindex misura
+
+@funindex \time
+@funindex time
+
+L'indicazione di tempo si imposta così:
+
+@lilypond[quote,verbatim,relative=2]
+\time 2/4 c2
+\time 3/4 c2.
+@end lilypond
+
+@cindex indicazione di tempo, visibilità dell'
+
+Le indicazioni di tempo appaiono all'inizio di un brano e ogni volta
+che l'indicazione cambia.  Se il cambio ha luogo alla fine di un rigo,
+appare un'indicazione di tempo di precauzione.  Si può modificare questo
+comportamento predefinito, come è spiegato in @ref{Visibility of objects}.
+
+@lilypond[quote,verbatim,relative=2]
+\time 2/4
+c2 c
+\break
+c c
+\break
+\time 4/4
+c c c c
+@end lilypond
+
+@cindex indicazione di tempo, stile
+@cindex tempo, stile
+
+@funindex \numericTimeSignature
+@funindex numericTimeSignature
+@funindex \defaultTimeSignature
+@funindex defaultTimeSignature
+
+Il simbolo di indicazione di tempo usato nei tempi 2/2 e 4/4 può essere
+sostituito da un numero:
+
+@lilypond[quote,verbatim,relative=2]
+% Stile predefinito
+\time 4/4 c1
+\time 2/2 c1
+% Passaggio allo stile numerico
+\numericTimeSignature
+\time 4/4 c1
+\time 2/2 c1
+% Ritorno allo stile predefinito
+\defaultTimeSignature
+\time 4/4 c1
+\time 2/2 c1
+@end lilypond
+
+
+Le indicazioni di tempo mensurali sono trattate in
+@ref{Mensural time signatures}.
+
+@cindex indicazione di tempo, impostazioni predefinite
+@cindex proprietà di disposizione automatica delle travature per le indicazioni di tempo
+@cindex disposizione delle travature, proprietà predefinite delle indicazioni di tempo
+@funindex \overrideTimeSignatureSettings
+
+Oltre a impostare l'indicazione di tempo che appare nel pentagramma, il comando
+@code{\time} imposta anche i valori delle proprietà basate sull'indicazione di
+tempo, ovvero @code{baseMoment}, @code{beatStructure} e @code{beamExceptions}.
+I valori predefiniti di queste proprietà si trovano in
+@file{scm/time-signature-settings.scm}.
+
+Si può sovrascrivere il valore predefinito di @code{beatStructure} nel comando
+@code{\time} stesso specificandolo come primo argomento opzionale:
+
+@lilypond[quote,verbatim]
+\score {
+  \new Staff {
+    \relative c' {
+      \time #'(2 2 3) 7/8
+      \repeat unfold 7 { c8 } |
+      \time #'(3 2 2) 7/8
+      \repeat unfold 7 { c8 } |
+    }
+  }
+}
+@end lilypond
+
+Oppure si possono impostare tutti i valori predefiniti di queste variabili relative
+all'indicazione di tempo, incluse @code{baseMoment} e @code{beamExceptions}.
+I valori possono essere impostati in modo indipendente per diverse indicazioni
+di tempo.  I nuovi valori hanno effetto appena viene eseguito un nuovo
+comando @code{\time} che abbia lo stesso valore dell'indicazione di tempo
+specificata nelle nuove impostazioni:
+
+@lilypond[quote,verbatim]
+\score {
+  \new Staff {
+    \relative c' {
+      \overrideTimeSignatureSettings
+        4/4        % timeSignatureFraction
+        1/4        % baseMomentFraction
+        #'(3 1)    % beatStructure
+        #'()       % beamExceptions
+      \time 4/4
+      \repeat unfold 8 { c8 } |
+    }
+  }
+}
+@end lilypond
+
+@code{\overrideTimeSignatureSettings} prende quattro argomenti:
+
+@enumerate
+
+@item
+@code{@var{timeSignatureFraction}}, una frazione che indica l'indicazione
+di tempo a cui questi valori si riferiscono.
+
+@item
+@code{@var{baseMomentFraction}}, una frazione che contiene il numeratore e
+il denominatore dell'unità di tempo.
+
+@item
+@code{@var{beatStructure}}, una lista Scheme che indica la struttura dei
+battiti nella misura, nell'unità di @code{@var{baseMomentFraction}}.
+
+@item
+@code{@var{beamExceptions}}, una lista di associazione (@emph{alist}) che contiene
+regole di disposizione delle travature che vanno oltre la fine ad ogni
+battito, come descritto in @ref{Setting automatic beam behavior}.
+@end enumerate
+
+
+@cindex ripristinare le proprietà predefinite delle indicazioni di tempo
+@cindex indicazioni di tempo, ripristinare i valori predefiniti delle proprietà delle
+@funindex \revertTimeSignatureSettings
+
+I valori modificati delle proprietà predefinite dell'indicazione di tempo possono
+essere ripristinati ai valori originali:
+
+@lilypond[quote,verbatim]
+\score{
+  \relative c' {
+    \repeat unfold 8 { c8 } |
+    \overrideTimeSignatureSettings
+      4/4        % timeSignatureFraction
+      1/4        % baseMomentFraction
+      #'(3 1)    % beatStructure
+      #'()       % beamExceptions
+    \time 4/4
+    \repeat unfold 8 { c8 } |
+    \revertTimeSignatureSettings 4/4
+    \time 4/4
+    \repeat unfold 8 { c8 } |
+  }
+}
+@end lilypond
+
+Si possono stabilire valori diversi delle proprietà predefinite dell'indicazione
+di tempo per righi diversi spostando @code{Timing_translator} e
+@code{Default_bar_line_engraver} dal contesto @code{Score} al contesto
+@code{Staff}.
+
+@lilypond[quote, verbatim]
+\score {
+  \new StaffGroup <<
+     \new Staff {
+        \overrideTimeSignatureSettings
+          4/4        % timeSignatureFraction
+          1/4        % baseMomentFraction
+          #'(3 1)    % beatStructure
+          #'()       % beamExceptions
+        \time 4/4
+        \repeat unfold 8 {c''8}
+     }
+     \new Staff {
+        \overrideTimeSignatureSettings
+          4/4        % timeSignatureFraction
+          1/4        % baseMomentFraction
+          #'(1 3)    % beatStructure
+          #'()       % beamExceptions
+        \time 4/4
+        \repeat unfold 8 {c''8}
+     }
+  >>
+  \layout {
+    \context {
+      \Score
+      \remove "Timing_translator"
+      \remove "Default_bar_line_engraver"
+    }
+    \context {
+      \Staff
+      \consists "Timing_translator"
+      \consists "Default_bar_line_engraver"
+    }
+  }
+}
+@end lilypond
+
+Un ulteriore metodo per modificare queste variabili relative all'indicazione di
+tempo, che evita di mostrare di nuovo l'indicazione di tempo al momento del
+cambio, è descritto in @ref{Setting automatic beam behavior}.
+
+@predefined
+@code{\numericTimeSignature},
+@code{\defaultTimeSignature}.
+@endpredefined
+
+
+@snippets
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly}
+
+@seealso
+Glossario musicale:
+@rglosnamed{time signature,indicazione di tempo}
+
+Guida alla notazione:
+@ref{Mensural time signatures},
+@ref{Setting automatic beam behavior},
+@ref{Time administration}.
+
+File installati:
+@file{scm/time-signature-settings.scm}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{TimeSignature},
+@rinternals{Timing_translator}.
+
+
+@node Indicazioni metronomiche
+@unnumberedsubsubsec Indicazioni metronomiche
+@translationof Metronome marks
+
+@cindex tempo
+@cindex battiti per minuto
+@cindex indicazione metronomica
+@cindex indicazione metronomica con testo
+
+@funindex \tempo
+@funindex tempo
+
+Un'indicazione metronomica è semplice da scrivere:
+
+@lilypond[verbatim,quote,relative=1]
+\tempo 4 = 120
+c2 d
+e4. d8 c2
+@end lilypond
+
+Le indicazioni metronomiche si possono rappresentare anche come una gamma
+di due numeri:
+
+@lilypond[verbatim,quote,relative=1]
+\tempo 4 = 40 - 46
+c4. e8 a4 g
+b,2 d4 r
+@end lilypond
+
+Al loro posto si possono usare delle indicazioni di tempo testuali:
+
+@lilypond[verbatim,quote,relative=2]
+\tempo "Allegretto"
+c4 e d c
+b4. a16 b c4 r4
+@end lilypond
+
+Un'indicazione metronomica, se combinata con del testo, viene posta
+automaticamente tra parentesi:
+
+@lilypond[verbatim,quote,relative=2]
+\tempo "Allegro" 4 = 160
+g4 c d e
+d4 b g2
+@end lilypond
+
+In generale, il testo può essere qualsiasi oggetto di tipo testuale:
+
+@lilypond[verbatim,quote,relative=2]
+\tempo \markup { \italic Faster } 4 = 132
+a8-. r8 b-. r gis-. r a-. r
+@end lilypond
+
+È possibile scrivere un'indicazione metronomica tra parentesi e senza testo
+includendo una stringa vuota nell'input:
+
+@lilypond[verbatim,quote,relative=2]
+\tempo "" 8 = 96
+d4 g e c
+@end lilypond
+
+@funindex \markLengthOn
+@funindex markLengthOn
+@funindex \markLengthOff
+@funindex markLengthOff
+
+In una parte per uno strumento che ha lunghi periodi pieni di pause,
+le indicazioni di tempo sono talvolta molto ravvicinate.  Il comando
+@code{\markLengthOn} aggiunge dello spazio orizzontale per impedire
+che le indicazioni di tempo si sovrappongano; @code{\markLengthOff}
+ripristina il comportamento predefinito, per cui le indicazioni di
+tempo non sono tenute in considerazione ai fini della spaziatura
+orizzontale.
+
+@lilypond[verbatim,quote,relative=0]
+\compressFullBarRests
+\markLengthOn
+\tempo "Molto vivace"
+R1*12
+\tempo "Meno mosso"
+R1*16
+\markLengthOff
+\tempo "Tranquillo"
+R1*20
+@end lilypond
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{printing-metronome-and-rehearsal-marks-below-the-staff.ly}
+
+@c perhaps also an example of how to move it horizontally?
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{changing-the-tempo-without-a-metronome-mark.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{creating-metronome-marks-in-markup-mode.ly}
+
+I dettagli si trovano in @ref{Formatting text}.
+
+@seealso
+Glossario musicale:
+@rglosnamed{metronome,metronomo},
+@rglosnamed{tempo indication,indicazione di tempo},
+@rglosnamed{metronome mark,indicazione metronomica}.
+
+Guida alla notazione:
+@ref{Formatting text},
+@ref{MIDI output}.
+
+Frammenti di codice:
+@rlsr{Staff notation}.
+
+Guida al funzionamento interno:
+@rinternals{MetronomeMark}.
+
+
+@node Anacrusi
+@unnumberedsubsubsec Anacrusi
+@translationof Upbeats
+
+@cindex anacrusi
+@cindex misura parziale
+@cindex parziale, misura
+@cindex battuta in levare
+
+@funindex measurePosition
+@funindex \partial
+@funindex partial
+
+Le misure parziali, come un @emph{anacrusi} o una battuta
+in levare, si inseriscono col comando @code{\partial},
+
+@example
+\partial @var{durata}
+@end example
+
+@noindent
+dove @code{@var{durata}} è la lunghezza @emph{rimanente} della misura
+parziale @emph{prima} dell'inizio della nuova misura completa.
+
+@lilypond[quote,verbatim,relative=1]
+\time 3/4
+\partial 8
+e8 | a4 c8 b c4 |
+@end lilypond
+
+La @var{durata} può avere qualsiasi valore inferiore a quello di una misura intera:
+
+@lilypond[quote,verbatim,relative=1]
+\time 3/4
+\partial 4.
+r4 e8 | a4 c8 b c4 |
+@end lilypond
+
+L'espressione @code{\partial @var{durata}} si può scrivere anche così:
+
+@example
+\set Timing.measurePosition -@var{durata}
+@end example
+
+Quindi l'esempio precedente può essere scritto così:
+
+@lilypond[quote,verbatim,relative=1]
+\time 3/4
+\set Timing.measurePosition = #(ly:make-moment -1/8)
+e8 | a4 c8 b c4 |
+@end lilypond
+
+La proprietà @code{measurePosition} contiene un numero razionale, solitamente
+positivo, che indica la durata corrispondente alla parte di misura trascorsa.
+Il comando @code{\partial @var{durata}} lo imposta su un numero negativo
+quando ha un senso diverso: in quel caso significa che la battuta corrente
+(la prima) sarà @emph{preceduta} da una battuta 0 (la battuta parziale)
+della durata indicata da @var{durata}.
+
+@seealso
+Glossario musicale:
+@rglosnamed{anacrusis,anacrusi}.
+
+Guida alla notazione:
+@ref{Grace notes}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{Timing_translator}.
+
+@knownissues
+Il comando @code{\partial} deve essere collocato solo all'inizio di un
+brano.  Se è posto dopo l'inizio, il programma potrebbe produrre degli
+avvisi o si potrebbero verificare problemi, dunque si consiglia di
+usare @code{\set Timing.measurePosition} al suo posto.
+
+@lilypond[quote,verbatim,relative=1]
+\time 6/8
+\partial 8
+e8 | a4 c8 b[ c b] |
+\set Timing.measurePosition = #(ly:make-moment -1/4)
+r8 e,8 | a4 c8 b[ c b] |
+@end lilypond
+
+
+@node Musica in tempo libero
+@unnumberedsubsubsec Musica in tempo libero
+@translationof Unmetered music
+
+@cindex cadenza
+@cindex cadenza, travature
+@cindex cadenza, alterazioni
+@cindex cadenza, stanghette
+@cindex cadenza, numeri di battuta
+@cindex musica in tempo libero
+@cindex musica in tempo libero, travature
+@cindex musica in tempo libero, alterazioni
+@cindex musica in tempo libero, stanghette
+@cindex musica in tempo libero, numeri di battuta
+@cindex alterazioni, cadenze
+@cindex alterazioni, musica in tempo libero
+@cindex stanghette, cadenze
+@cindex stanghette, musica in tempo libero
+@cindex numeri di battuta, cadenze
+@cindex numeri di battuta, musica in tempo libero
+@cindex travature, cadenze
+@cindex travature, musica in tempo libero
+
+@funindex \cadenzaOn
+@funindex cadenzaOn
+@funindex \cadenzaOff
+@funindex cadenzaOff
+
+Nella musica in un tempo determinato l'inserimento delle stanghette e dei numeri di
+battuta è calcolato automaticamente. Nella musica in tempo libero (per esempio,
+la cadenza), un simile comportamento non è desiderabile, e può essere
+@q{disabilitato} col comando @code{\cadenzaOn} e poi @q{riabilitato}
+quando necessario con @code{\cadenzaOff}.
+
+@lilypond[verbatim,relative=2,quote]
+c4 d e d
+\cadenzaOn
+c4 c d8[ d d] f4 g4.
+\cadenzaOff
+\bar "|"
+d4 e d c
+@end lilypond
+
+La numerazione delle battute riprende dopo la cadenza.
+
+@lilypond[verbatim,relative=2,quote]
+% Mostra tutti i numeri di battuta
+\override Score.BarNumber.break-visibility = #all-visible
+c4 d e d
+\cadenzaOn
+c4 c d8[ d d] f4 g4.
+\cadenzaOff
+\bar "|"
+d4 e d c
+@end lilypond
+
+Se si inserisce un comando @code{\bar} dentro una cadenza non viene iniziata
+una nuova misura, anche se appare una stanghetta nell'output.  Quindi qualsiasi
+alterazione, che di solito si considera sempre attiva fino alla fine della
+misura, sarà ancora valida dopo la stanghetta stampata da @code{\bar}.  Se si
+desidera che le alterazioni successive appaiano, si dovranno inserire
+manualmente delle alterazioni forzate o di precauzione, come è spiegato
+in @ref{Accidentals}.
+
+@lilypond[verbatim,relative=2,quote]
+c4 d e d
+\cadenzaOn
+cis4 d cis d
+\bar "|"
+% Il primo cis viene stampato senza alterazione anche se si trova dopo \bar
+cis4 d cis! d
+\cadenzaOff
+\bar "|"
+@end lilypond
+
+La disposizione automatica delle travature viene disabilitata da
+@code{\cadenzaOn}. Quindi tutte le travature nelle cadenze devono
+essere inserite manualmente.  Si veda @ref{Manual beams}.
+
+@lilypond[verbatim,relative=2,quote]
+\repeat unfold 8 { c8 }
+\cadenzaOn
+cis8 c c c c
+\bar"|"
+c8 c c
+\cadenzaOff
+\repeat unfold 8 { c8 }
+@end lilypond
+
+Questi comandi predefiniti hanno effetto su tutti i righi di una partitura, anche
+quando inseriti in un solo contesto @code{Voice}.  Per modificare questo comportamento,
+si sposta @code{Timing_translator} dal contesto @code{Score} al contesto
+@code{Staff}.  Si veda @ref{Polymetric notation}.
+
+@predefined
+@code{\cadenzaOn},
+@code{\cadenzaOff}.
+@endpredefined
+
+@seealso
+Glossario musicale:
+@rglos{cadenza}.
+
+Guida alla notazione:
+@ref{Visibility of objects},
+@ref{Polymetric notation},
+@ref{Manual beams},
+@ref{Accidentals}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+@cindex cadenza, interruzioni di linea
+@cindex cadenza, interruzioni di pagina
+@cindex musica in tempo libero, interruzioni di linea
+@cindex musica in tempo libero, interruzioni di pagina
+@cindex interruzioni nella musica in tempo libero
+@cindex interruzioni di linea, cadenze
+@cindex interruzioni di pagina, cadenze
+@cindex interruzioni di linea, musica in tempo libero
+@cindex interruzioni di pagina, musica in tempo libero
+
+@knownissues
+Le interruzioni automatiche di linea e di pagina possono aver luogo solo dopo
+una stanghetta di battuta; quindi, per consentire delle interruzioni nei lunghi passaggi
+di musica in tempo libero è necessario inserire manualmente delle stanghette
+@q{invisibili}:
+
+@example
+\bar ""
+@end example
+
+
+@node Notazione polimetrica
+@unnumberedsubsubsec Notazione polimetrica
+@translationof Polymetric notation
+
+@c This section necessarily uses \set
+@c This is acceptable  -td
+
+@cindex indicazioni di tempo doppie
+@cindex indicazioni polimetriche
+@cindex indicazioni di tempo polimetrico
+@cindex polimetriche, indicazioni
+@cindex tempo, polimetrico
+
+@funindex timeSignatureFraction
+@funindex \scaleDurations
+@funindex scaleDurations
+@funindex \tuplet
+@funindex tuplet
+
+La notazione polimetrica è supportata esplicitamente o tramite la modifica
+manuale del simbolo d'indicazione di tempo (e la trasformazione della durata
+delle note).
+
+@subsubsubheading Diverse indicazioni di tempo con misure di uguale lunghezza
+
+Si sceglie una normale indicazione di tempo per ogni rigo e si imposta
+@code{timeSignatureFraction} sulla frazione desiderata.  Quindi si usa
+la funzione @code{\scaleDurations} per scalare la durata delle note di
+ogni rigo in modo che rientrino nella comune indicazione di tempo.
+
+@cindex travature, con tempi polimetrici
+@cindex tempi polimetrici, con travature
+
+L'esempio seguente presenta simultaneamente musica con indicazioni di
+tempo di 3/4, 9/8 e 10/8.  Nel secondo rigo le durate appaiono come
+moltiplicate per 2/3 (perché 2/3 * 9/8 = 3/4), mentre nel terzo rigo le durate
+appaiono come moltiplicate per 3/5 (perché 3/5 * 10/8 = 3/4).  È possibile
+che si debbano inserire a mano le travature, perché la scalatura delle
+durate influenzerà le regole della disposizione automatica delle travature.
+
+@lilypond[quote,verbatim]
+\relative c' <<
+  \new Staff {
+    \time 3/4
+    c4 c c |
+    c4 c c |
+  }
+  \new Staff {
+    \time 3/4
+    \set Staff.timeSignatureFraction = 9/8
+    \scaleDurations 2/3
+      \repeat unfold 6 { c8[ c c] }
+  }
+  \new Staff {
+    \time 3/4
+    \set Staff.timeSignatureFraction = 10/8
+    \scaleDurations 3/5 {
+      \repeat unfold 2 { c8[ c c] }
+      \repeat unfold 2 { c8[ c] } |
+      c4. c \tuplet 3/2 { c8[ c c] } c4
+    }
+  }
+>>
+@end lilypond
+
+@subsubsubheading Diverse indicazioni di tempo con misure di lunghezza differenti
+
+Si può dare a ogni rigo la sua indicazione di tempo indipendente spostando
+@code{Timing_translator} e @code{Default_bar_line_engraver} nel contesto
+@code{Staff}.
+
+@lilypond[quote,verbatim]
+\layout {
+  \context {
+    \Score
+    \remove "Timing_translator"
+    \remove "Default_bar_line_engraver"
+  }
+  \context {
+    \Staff
+    \consists "Timing_translator"
+    \consists "Default_bar_line_engraver"
+  }
+}
+
+% Ora ogni rigo ha la sua indicazione di tempo.
+
+\relative c' <<
+  \new Staff {
+    \time 3/4
+    c4 c c |
+    c4 c c |
+  }
+  \new Staff {
+    \time 2/4
+    c4 c |
+    c4 c |
+    c4 c |
+  }
+  \new Staff {
+    \time 3/8
+    c4. |
+    c8 c c |
+    c4. |
+    c8 c c |
+  }
+>>
+@end lilypond
+
+@funindex \compoundMeter
+@cindex indicazioni di tempo composto
+@cindex tempo composto, indicazioni
+
+@subsubsubheading Indicazioni di tempo composto
+
+Si creano con la funzione @code{\compoundMeter}.  La sintassi è:
+
+@example
+\compoundMeter #'@code{(lista di liste)}
+@end example
+
+La struttura più semplice è una singola lista, dove l'@emph{ultimo} numero
+indica il numero inferiore dell'indicazione di tempo e i numeri precedenti
+indicano i numeri superiori del segno di tempo.
+
+@lilypond[quote,verbatim]
+\relative c' {
+  \compoundMeter #'((2 2 2 8))
+  \repeat unfold 6 c8 \repeat unfold 12 c16
+}
+@end lilypond
+
+Si possono costruire tempi più complessi tramite ulteriori liste.  Le modalità
+di disposizione automatica delle travature varieranno a seconda di questi
+valori.
+
+@lilypond[quote,verbatim]
+\relative c' {
+  \compoundMeter #'((1 4) (3 8))
+  \repeat unfold 5 c8 \repeat unfold 10 c16
+}
+
+\relative c' {
+  \compoundMeter #'((1 2 3 8) (3 4))
+  \repeat unfold 12 c8
+}
+@end lilypond
+
+@seealso
+Glossario musicale:
+@rglosnamed{polymetric,polimetrico},
+@rglosnamed{polymetric time signature,indicazione di tempo polimetrico},
+@rglosnamed{meter,tempo}.
+
+Guida alla notazione:
+@ref{Automatic beams},
+@ref{Manual beams},
+@ref{Time signature},
+@ref{Scaling durations}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{TimeSignature},
+@rinternals{Timing_translator},
+@rinternals{Default_bar_line_engraver},
+@rinternals{Staff}.
+
+@knownissues
+Quando si usano simultaneamente indicazioni di tempo diverse, le note che
+procedono parallelamente saranno poste nella stessa posizione
+sull'asse orizzontale.  Tuttavia le stanghette dei vari righi faranno
+sì che la spaziatura delle note sia meno regolare in ciascun rigo di
+quanto accadrebbe normalmente senza le diverse indicazioni di tempo.
+
+
+@node Divisione automatica delle note
+@unnumberedsubsubsec Divisione automatica delle note
+@translationof Automatic note splitting
+
+@cindex note, divisione
+@cindex divisione delle note
+@cindex pause, divisione
+@cindex divisione delle pause
+
+@funindex Note_heads_engraver
+@funindex Completion_heads_engraver
+@funindex Completion_rest_engraver
+
+Le note le cui durate eccedono il valore della battuta possono essere convertite
+automaticamente in note con legature di valore a cavallo delle stanghette sostituendo l'incisore @code{Note_heads_engraver}
+con @code{Completion_heads_engraver}.  Analogalmente, le pause le cui durate
+eccedono il valore della battuta possono essere divise automaticamente
+sostituendo @code{Rest_engraver} con @code{Completion_rest_engraver}.  Nell'esempio
+seguente, le note e le pause che eccedono la durata di battuta vengono divise e
+le note sono anche connesse con legature di valore a cavallo della stanghetta.
+
+@lilypond[quote,verbatim,relative=1]
+\new Voice \with {
+  \remove "Note_heads_engraver"
+  \consists "Completion_heads_engraver"
+  \remove "Rest_engraver"
+  \consists "Completion_rest_engraver"
+}
+
+{ c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 r1*2 }
+@end lilypond
+
+Questi incisori dividono tutte le note e le pause in corrispondenza
+della stanghetta e inseriscono le legature di valore.  Uno dei suoi usi possibili
+è la verifica di partiture complesse: se le misure non sono riempite interamente,
+le legature di valore mostrano esattamente di quanto è ecceduta ogni misura.
+
+@seealso
+Glossario musicale:
+@rglosnamed{tie,legatura di valore}
+
+Manuale di apprendimento:
+@rlearning{Engravers explained},
+@rlearning{Adding and removing engravers}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{Note_heads_engraver},
+@rinternals{Completion_heads_engraver},
+@rinternals{Rest_engraver},
+@rinternals{Completion_rest_engraver},
+@rinternals{Forbid_line_break_engraver}.
+
+@knownissues
+Non tutte le durate (specialmente quelle che contengono gruppi irregolari) possono
+essere rappresentate esattamente con normali note e punti, ma l'incisore
+@code{Completion_heads_engraver} non inserirà gruppi irregolari.
+
+L'incisore @code{Completion_heads_engraver} ha effetto solo sulle note, non
+divide le pause.
+
+
+@node Mostrare i ritmi della melodia
+@unnumberedsubsubsec Mostrare i ritmi della melodia
+@translationof Showing melody rhythms
+
+@cindex melodia, mostrare i ritmi della
+@cindex ritmi, mostrare la melodia
+
+È possibile mostrare soltanto il ritmo di una melodia usando il rigo
+ritmico.  Tutte le altezze delle note su tale rigo sono appiattite e
+il rigo stesso ha una sola linea
+
+@lilypond[quote,relative=1,verbatim]
+<<
+  \new RhythmicStaff {
+    \new Voice = "myRhythm" {
+      \time 4/4
+      c4 e8 f g2
+      r4 g g f
+      g1
+    }
+  }
+  \new Lyrics {
+    \lyricsto "myRhythm" {
+      This is my song
+      I like to sing
+    }
+  }
+>>
+@end lilypond
+
+@cindex diagramma degli accordi per chitarra
+@cindex accordi per chitarra, tabella
+@cindex ritmi di accompagnamento, mostrare
+@cindex ritmi di accompagnamento per chitarra, mostrare
+
+@funindex Pitch_squash_engraver
+@funindex \improvisationOn
+@funindex improvisationOn
+@funindex \improvisationOff
+@funindex improvisationOff
+
+I diagrammi degli accordi per chitarra di solito mostrano i ritmi di
+accompagnamento.  Si possono visualizzare usando l'incisore
+@code{Pitch_squash_engraver} e il comando @code{\improvisationOn}.
+
+
+@lilypond[quote,verbatim]
+<<
+  \new ChordNames {
+    \chordmode {
+      c1 f g c
+    }
+  }
+  \new Voice \with {
+    \consists "Pitch_squash_engraver"
+  } \relative c'' {
+    \improvisationOn
+    c4 c8 c c4 c8 c
+    f4 f8 f f4 f8 f
+    g4 g8 g g4 g8 g
+    c4 c8 c c4 c8 c
+  }
+>>
+@end lilypond
+
+
+@predefined
+@code{\improvisationOn},
+@code{\improvisationOff}.
+@endpredefined
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{guitar-strum-rhythms.ly}
+
+@seealso
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{RhythmicStaff},
+@rinternals{Pitch_squash_engraver}.
+
+
+@node Travature
+@subsection Travature
+@translationof Beams
+
+@menu
+* Travature automatiche::
+* Impostare il comportamento delle travature automatiche::
+* Travature manuali::
+* Travature a raggiera::
+@end menu
+
+@node Travature automatiche
+@unnumberedsubsubsec Travature automatiche
+@translationof Automatic beams
+
+Le travature sono inserite automaticamente:
+
+@cindex travature manuali
+@cindex travature, personalizzazione delle regole
+
+@funindex \autoBeamOn
+@funindex autoBeamOn
+@funindex \autoBeamOff
+@funindex autoBeamOff
+
+@lilypond[quote,verbatim,relative=2]
+\time 2/4 c8 c c c
+\time 6/8 c8 c c c8. c16 c8
+@end lilypond
+
+Se queste impostazioni automatiche non sono soddisfacenti, si può definire
+esplicitamente la disposizione delle travature, come è spiegato in
+@ref{Manual beams}.  Le travature @emph{devono} essere inserite
+manualmente se devono estendersi oltre le pause.
+
+La disposizione automatica delle travature, se non necessaria, può essere
+disabilitata con @code{\autoBeamOff} e riabilitata con @code{\autoBeamOn}:
+
+@lilypond[quote,relative=1,verbatim]
+c4 c8 c8. c16 c8. c16 c8
+\autoBeamOff
+c4 c8 c8. c16 c8.
+\autoBeamOn
+c16 c8
+@end lilypond
+
+@cindex melismi, con travature
+@cindex travature, con melismi
+
+@warning{Se si usano le travature per indicare i melismi nelle parti vocali, occorre
+disabilitare la disposizione automatica delle travature con @code{\@bs{}autoBeamOff}
+e le travature devono essere indicate manualmente.  L'uso di @code{@bs{}partcombine}
+insieme a @code{@bs{}autoBeamOff} può produrre risultati imprevisti.  Si vedano i
+frammenti di codice per avere maggiori informazioni.}
+
+Si possono creare dei modelli di disposizione delle travature diversi da
+quelli automatici predefiniti, come è spiegato in @ref{Setting automatic beam behavior}.
+
+@predefined
+@code{\autoBeamOff},
+@code{\autoBeamOn}.
+@endpredefined
+
+@cindex travature, interruzioni di linea
+@cindex interruzioni di linea, travature
+@cindex travature angolari
+@cindex travature con angolazione
+@funindex breakable
+
+@snippets
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{beams-across-line-breaks.ly}
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{changing-beam-knee-gap.ly}
+
+@cindex travature, \partcombine con \autoBeamOff
+@cindex voci, \partcombine con \autoBeamOff
+
+@lilypondfile [verbatim, quote, ragged-right, texidoc, doctitle]
+{partcombine-and-autobeamoff.ly}
+
+@seealso
+Guida alla notazione:
+@ref{Manual beams},
+@ref{Setting automatic beam behavior}.
+
+File installati:
+@file{scm/auto-beam.scm}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{Auto_beam_engraver},
+@rinternals{Beam_engraver},
+@rinternals{Beam},
+@rinternals{BeamEvent},
+@rinternals{BeamForbidEvent},
+@rinternals{beam-interface},
+@rinternals{unbreakable-spanner-interface}.
+
+@knownissues
+Le proprietà di una travatura sono determinate all'@emph{inizio} della sua
+costruzione e qualsiasi ulteriore modifica alle sue proprietà che venga
+fatta prima che la travatura sia stata completata non avrà effetto finché
+non inizia la @emph{successiva}, nuova travatura.
+
+
+@node Impostare il comportamento delle travature automatiche
+@unnumberedsubsubsec Impostare il comportamento delle travature automatiche
+@translationof Setting automatic beam behavior
+
+@cindex travature, con testo
+@cindex testo, con travature
+
+@funindex autoBeaming
+@funindex baseMoment
+@funindex beamExceptions
+@funindex beatStructure
+@funindex measureLength
+@funindex \time
+@funindex time
+@funindex \set
+@funindex set
+
+Quando la disposizione automatica delle travature è abilitata, la disposizione
+delle travature è determinata da tre proprietà di contesto:
+@code{baseMoment}, @code{beatStructure} e @code{beamExceptions}.
+I valori predefiniti di queste variabili possono essere sovrascritti, come
+vedremo tra breve, oppure si possono anche cambiare i valori predefiniti stessi,
+come è spiegato in @ref{Time signature}.
+
+Se è definita una regola @code{beamExceptions} per l'indicazione di
+tempo corrente, tale regola soltanto determina la
+disposizione delle travature; i valori di @code{baseMoment} e
+@code{beatStructure} vengono ignorati.  Se non è definita
+alcuna regola @code{beamExceptions} per l'indicazione di tempo
+corrente, la disposizione delle travature è determinata dai
+valori di @code{baseMoment} e @code{beatStructure}.
+
+@subsubsubheading Disposizione delle travature basata su @code{baseMoment} e @code{beatStructure}
+
+Dato che le indicazioni di tempo più comuni hanno delle regole @code{beamExceptions}
+già definite, occorre disabilitarle se la disposizione automatica deve basarsi
+su @code{baseMoment} e @code{beatStructure}.  Le regole @code{beamExceptions} si
+disabilitano con questo comando
+
+@example
+\set Timing.beamExceptions = #'()
+@end example
+
+Quando @code{beamExceptions} è impostato su @code{#'()}, o per
+impostazione esplicita o perché non sono state definite internamente
+le @code{beamExceptions} per l'indicazione di tempo corrente, le
+estremità delle travature si trovano sulle suddivisioni come specificato
+dalle proprietà di contesto @code{baseMoment} e
+@code{beatStructure}.  @code{beatStructure} è una lista @emph{scheme}
+che definisce la lunghezza di ogni suddivisione in rapporto alla misura in unità
+di @code{baseMoment}.  Per impostazione predefinita, @code{baseMoment}
+è uno fratto il denominatore dell'indicazione di tempo e ogni unità
+di @code{baseMoment} corrisponde a una singola suddivisione.
+
+@lilypond[quote,relative=2,verbatim]
+\time 5/16
+c16^"predefinito" c c c c |
+% È improbabile che per un tempo di 5/16 sia stata definita beamExceptions,
+% ma disabilitiamola lo stesso per sicurezza
+\set Timing.beamExceptions = #'()
+\set Timing.beatStructure = #'(2 3)
+c16^"(2+3)" c c c c |
+\set Timing.beatStructure = #'(3 2)
+c16^"(3+2)" c c c c |
+@end lilypond
+
+
+@lilypond[quote,relative=2,verbatim]
+\time 4/4
+a8^"predefinito" a a a a a a a
+% Disabilita beamExceptions perché è senz'altro definita
+% per il tempo 4/4
+\set Timing.beamExceptions = #'()
+\set Timing.baseMoment = #(ly:make-moment 1/4)
+\set Timing.beatStructure = #'(1 1 1 1)
+a8^"cambiato" a a a a a a a
+@end lilypond
+
+Le modifiche alle impostazioni delle travature possono essere limitate a
+contesti specifici.  Se non si specifica alcuna impostazione in un contesto
+di livello più basso, verrà applicata l'impostazione del contesto che lo
+contiene.
+
+@lilypond[quote, verbatim,relative=1]
+\new Staff {
+  \time 7/8
+  % Nessun bisogno di disabilitare beamExceptions perché non è definita per il tempo 7/8
+
+  \set Staff.beatStructure = #'(2 3 2)
+  <<
+    \new Voice = one {
+      \relative c'' {
+        a8 a a a a a a
+      }
+    }
+    \new Voice = two {
+      \relative c' {
+        \voiceTwo
+        \set Voice.beatStructure = #'(1 3 3)
+        f8 f f f f f f
+      }
+    }
+  >>
+}
+@end lilypond
+
+Quando si usano più voci, occorre specificare il contesto @code{Staff} se
+si vuole applicare la disposizione delle travature a tutte le voci del
+rigo:
+
+@lilypond[quote,verbatim,relative=2]
+\time 7/8
+% ritmo 3-1-1-2
+% Se non si specifica il contesto, la modifica viene applicata a Voice e quindi non funziona correttamente
+% Dato che le voci sono autogenerate, tutto il ritmo avrà come baseMoment (1 . 8)
+\set beatStructure = #'(3 1 1 2)
+<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
+
+% Funziona correttamente se si specifica il contesto Staff
+\set Staff.beatStructure = #'(3 1 1 2)
+<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
+@end lilypond
+
+Il valore di @code{baseMoment} può essere regolato in modo da
+cambiare il comportamento delle travature, se si vuole. In questo caso
+occorre cambiare anche il valore di @code{beatStructure} così che sia
+compatibile col nuovo valore di @code{baseMoment}.
+
+@lilypond[quote,verbatim,relative=2]
+\time 5/8
+% Nessun bisogno di disabilitare beamExceptions perché non è definita per il tempo 5/8
+\set Timing.baseMoment = #(ly:make-moment 1/16)
+\set Timing.beatStructure = #'(7 3)
+\repeat unfold 10 { a16 }
+@end lilypond
+
+@code{baseMoment} è un @i{momento}, ovvero un'unità della durata musicale.  Una
+quantità di tipo @i{moment} viene creata dalla funzione scheme
+@code{ly:make-moment}.  Per maggiori informazioni su questa funzione, si
+veda @ref{Time administration}.
+
+Per impostazione predefinita, @code{baseMoment} ha un valore di uno fratto il
+denominatore dell'indicazione di tempo.  Le eccezioni a questa regola si
+trovano in @file{scm/time-signature-settings.scm}.
+
+@subsubsubheading Disposizione delle travature con @code{beamExceptions}
+
+Le regole speciali di disposizione automatica delle travature (diverse da quelle
+che determinano la corrispondenza della travatura alla suddivisione) sono definite
+nella proprietà @code{beamExceptions}.
+
+@lilypond[quote,relative=2,verbatim]
+\time 3/16
+\set Timing.beatStructure = #'(2 1)
+\set Timing.beamExceptions =
+  #'(                         ;inizio della lista di associazioni (alist)
+     (end .                   ;estremità delle travature
+      (                       ;inizio della lista che indica gli estremi
+       ((1 . 32) . (2 2 2))   ;regola per le travature da 1/32 -- termina ognuna a 1/16
+      )))                     %chiude tutti gli elementi
+c16 c c |
+\repeat unfold 6 { c32 } |
+@end lilypond
+
+@code{beamExceptions} è una lista di associazioni (@emph{alist}) che ha una
+chiave che indica il tipo di regola e un valore che esprime le regole di
+disposizione delle travature.
+
+Al momento l'unico tipo di regola disponibile è @code{'end}, che specifica
+il termine della travatura.
+
+Le regole di disposizione delle travature sono una lista di associazione scheme
+(o lista di coppie) che indica il tipo di travatura e la modalità di raggruppamento
+da applicare alle travature contenenti note dalla durata più breve del tipo
+di travatura a loro assegnato.
+
+@example
+#'((travatura-1 . raggruppamento-1)
+   (travatura-2 . raggruppamento-2)
+   (travatura-3 . raggruppamento-3))
+@end example
+
+Il tipo di travatura è una coppia scheme che indica la durata della travatura,
+ad esempio @code{(1 . 16)}.
+
+Il raggruppamento è una lista scheme che indica il raggruppamento da usare
+per la travatura; ha come unità la durata specificata nel tipo di travatura.
+
+@warning{ Il valore di @code{beamExceptions} deve essere una lista @emph{completa}
+di eccezioni, ovvero bisogna includere tutte le eccezioni che si vogliono
+applicare.  Non è possibile aggiungere, rimuovere o modificare soltanto
+una eccezione. Anche se questo può sembrare scomodo, significa anche che
+non c'è bisogno di conoscere le attuali impostazioni delle travature per
+poter specificare un nuovo modello di disposizione delle travature.}
+
+Quando cambia l'indicazione di tempo, vengono impostati i valori predefiniti
+di @code{Timing.baseMoment}, @code{Timing.beatStructure} e
+@code{Timing.beamExceptions}.  L'impostazione dell'indicazione di tempo
+ripristina le impostazioni automatiche delle travature del contesto @code{Timing}
+ai valori predefiniti.
+
+@lilypond[quote,verbatim,relative=2]
+\time 6/8
+\repeat unfold 6 { a8 }
+% raggruppamento (4 + 2)
+\set Timing.beatStructure = #'(4 2)
+\repeat unfold 6 { a8 }
+% ritorno al comportamento predefinito
+\time 6/8
+\repeat unfold 6 { a8 }
+@end lilypond
+
+Le impostazioni predefinite della disposizione automatica delle travature per
+ogni tempo sono definite in @file{scm/time-signature-settings.scm}.  La loro
+modifica è descritta in @ref{Time signature}.
+
+Molte impostazioni di travature automatiche per le indicazioni di tempo hanno
+un elemento @code{beamExceptions}.  Ad esempio, il tempo 4/4 cerca di creare
+due travature nella misura se ci sono solo note di un ottavo.  La regola
+@code{beamExceptions} può sovrascrivere l'impostazione di @code{beatStructure}
+se @code{beamExceptions} non viene annullato.
+
+@lilypond[quote,verbatim,relative=2]
+\time 4/4
+\set Timing.baseMoment = #(ly:make-moment 1/8)
+\set Timing.beatStructure = #'(3 3 2)
+% Le travature non saranno raggruppate in (3 3 2) a causa di beamExceptions
+\repeat unfold 8 {c8} |
+% Il raggruppamento delle travature è (3 3 2) perché abbiamo tolto le impostazioni predefinite di beamExceptions
+\set Timing.beamExceptions = #'()
+\repeat unfold 8 {c8}
+@end lilypond
+
+Analogalmente, le note di un ottavo in un tempo 3/4 sono raggruppate in
+un'unica travatura.  Per raggrupparle secondo le suddivisioni, azzera @code{beamExceptions}.
+
+@lilypond[quote,verbatim,relative=2]
+\time 3/4
+% il comportamento predefinito è un gruppo di (6) a causa di beamExceptions
+\repeat unfold 6 {a8} |
+% Le travature saranno raggruppate in (1 1 1) a causa dei valori predefiniti di baseMoment e beatStructure
+\set Timing.beamExceptions = #'()
+\repeat unfold 6 {a8}
+@end lilypond
+
+Spesso, nelle partiture di età classica e romantica, le travature
+iniziano a metà della misura in un tempo 3/4; ma la pratica moderna
+preferisce evitare l'impressione ingannevole di un tempo 6/8 (vedi Gould, p. 153).
+Situazioni simili si incontrano anche per il tempo 3/8.  Questo comportamento è
+controllato dalla proprietà di contesto @code{beamHalfMeasure}, che ha effetto
+soltanto sulle indicazioni di tempo che hanno 3 come numeratore:
+
+@lilypond[quote,verbatim,relative=2]
+\time 3/4
+r4. a8 a a |
+\set Timing.beamHalfMeasure = ##f
+r4. a8 a a |
+@end lilypond
+
+@subsubsubheading Come funziona la disposizione automatica delle travature
+
+Quando la disposizione automatica delle travature è abilitata, la disposizione
+delle travature è determinata dalle proprietà di contesto
+@code{baseMoment}, @code{beatStructure} e @code{beamExceptions}.
+
+Nel determinare l'aspetto delle travature vengono applicate le seguenti regole,
+in ordine di priorità:
+
+@itemize
+@item
+Se si specifica una travatura manuale con @code{[@dots{}]} imposta la travatura
+in quel modo, altrimenti
+
+@item
+se è definita una regola di fine della travatura in @code{beamExceptions}
+per il tipo di travatura in questione, la usa per determinare i punti corretti
+in cui le travature possono terminare, altrimenti
+
+@item
+se è definita una regola di fine della travatura in @code{beamExceptions}
+per un tipo di travatura più lunga, la usa per determinare i punti corretti
+in cui le travature possono terminare, altrimenti
+
+@item
+usa i valori di @code{baseMoment} e @code{beatStructure} per
+determinare l'estensione delle suddivisioni della misura e terminare
+le travature alla fine delle suddivisioni.
+
+@end itemize
+
+Nelle regole precedenti, il @emph{tipo di travatura} è la durata della
+nota più corta nel gruppo della travatura.
+
+Le regole predefinite per le travature si trovano in
+@file{scm/time-signature-settings.scm}.
+
+@snippets
+
+@cindex travature, suddivisione
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{subdividing-beams.ly}
+
+@cindex tratti di suddivisione della travatura, direzione
+@cindex travatura, direzione dei tratti di suddivisione della
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{strict-beat-beaming.ly}
+
+@cindex misura, raggruppamenti
+@cindex suddivisioni, raggruppamenti
+@cindex misura, sottoraggruppamenti
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{conducting-signs,-measure-grouping-signs.ly}
+
+@cindex travatura, estremità in una partitura
+@cindex travatura, estremità in voci multiple
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{beam-endings-in-score-context.ly}
+
+@seealso
+Guida alla notazione:
+@ref{Time signature}.
+
+File installati:
+@file{scm/time-signature-settings.scm}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{Auto_beam_engraver},
+@rinternals{Beam},
+@rinternals{BeamForbidEvent},
+@rinternals{beam-interface}.
+
+@knownissues
+Se una partitura finisce prima del termine di una travatura automatica, cui
+mancano ancora delle note, quest'ultima travatura non apparirà.
+Lo stesso vale per le voci polifoniche, inserite con
+@code{<< @dots{} \\ @dots{} >>}.  Una voce polifonica non apparirà se termina
+quando una travatura automatica è ancora in attesa di note.
+Per aggirare questi problemi occorre impostare manualmente l'ultima travatura
+della voce o della partitura.
+
+@code{Timing} è un alias del contesto @code{Score}.  Questo significa che
+la modifica della disposizione delle travature in un rigo avrà effetto anche
+sugli altri righi.
+Quindi un'impostazione di tempo in un rigo successivo reimposterà la disposizione
+personalizzata delle travature definita in un rigo precedente.
+Per evitare questo problema si può impostare l'indicazione di tempo su
+un solo rigo.
+
+@lilypond[quote,verbatim,relative=2]
+<<
+  \new Staff {
+    \time 3/4
+    \set Timing.baseMoment = #(ly:make-moment 1/8)
+    \set Timing.beatStructure = #'(1 5)
+    \repeat unfold 6 { a8 }
+  }
+  \new Staff {
+    \repeat unfold 6 { a8 }
+  }
+>>
+@end lilypond
+
+Si possono cambiare anche le impostazioni predefinite delle travature, in modo
+che sia usata sempre la disposizione delle travature desiderata.  Le modifiche
+nelle impostazioni della travatura automatica per le indicazioni di tempo sono
+descritte in @ref{Time signature}.
+
+@lilypond[quote,verbatim,relative=2]
+<<
+  \new Staff {
+    \overrideTimeSignatureSettings
+      3/4       % timeSignatureFraction
+      1/8       % baseMomentFraction
+      #'(1 5)   % beatStructure
+      #'()             % beamExceptions
+    \time 3/4
+    \repeat unfold 6 { a8 }
+  }
+  \new Staff {
+    \time 3/4
+    \repeat unfold 6 { a8 }
+  }
+>>
+@end lilypond
+
+
+@node Travature manuali
+@unnumberedsubsubsec Travature manuali
+@translationof Manual beams
+
+@cindex travature manuali
+
+@funindex ]
+@funindex [
+
+In alcuni casi potrebbe essere necessario scavalcare l'algoritmo di
+disposizione automatica delle travature.  Ad esempio, questo algoritmo
+non inserirà delle travature tra le pause o tra le stanghette; e nelle
+partiture corali la disposizione delle travature è spesso determinato dall'articolazione
+del testo piuttosto che da quella musicale.  Tali travature possono essere
+specificate manualmente indicandone l'inizio e la fine con
+@code{[} e @code{]}.
+
+@lilypond[quote,relative=1,verbatim]
+r4 r8[ g' a r] r g[ | a] r
+@end lilypond
+
+@cindex travature manuali, scorciatoia per impostare la direzione
+@cindex travature manuali, abbellimenti
+
+La direzione delle travature può essere impostata manualmente attraverso
+gli indicatori di direzione:
+
+@lilypond[quote,relative=2,verbatim]
+c8^[ d e] c,_[ d e f g]
+@end lilypond
+
+@funindex \noBeam
+@funindex noBeam
+
+Le note individuali possono essere contrassegnate con @code{\noBeam} per impedire
+che vengano inserite in una travatura:
+
+@lilypond[quote,verbatim,relative=2]
+\time 2/4
+c8 c\noBeam c c
+@end lilypond
+
+Le travature degli abbellimenti e quelle delle note normali possono coesistere
+simultaneamente.  Gli abbellimenti privi di travatura non vengono inseriti
+nella travatura delle note normali.
+
+@lilypond[quote,verbatim,relative=2]
+c4 d8[
+\grace { e32 d c d }
+e8] e[ e
+\grace { f16 }
+e8 e]
+@end lilypond
+
+@funindex stemLeftBeamCount
+@funindex stemRightBeamCount
+
+Si può ottenere un controllo manuale delle travature ancora più preciso agendo sulle
+proprietà @code{stemLeftBeamCount} e @code{stemRightBeamCount}, che specificano
+il numero di travature da creare a sinistra e a destra della nota successiva.
+Se una di queste proprietà viene impostata, il suo valore verrà usato una volta
+sola, e la proprietà sarà poi cancellata.  In questo esempio, l'ultima nota @code{f} ha una
+sola travatura a sinistra: la travatura corrispondente alla sottodivisione di un ottavo
+all'interno dell'intero raggruppamento.
+
+@lilypond[quote,relative=2,verbatim]
+a8[ r16 f g a]
+a8[ r16
+\set stemLeftBeamCount = #2
+\set stemRightBeamCount = #1
+f16
+\set stemLeftBeamCount = #1
+g16 a]
+@end lilypond
+
+
+@predefined
+@code{\noBeam}.
+@endpredefined
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{flat-flags-and-beam-nibs.ly}
+
+@seealso
+Guida alla notazione:
+@ref{Direction and placement},
+@ref{Grace notes}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{Beam},
+@rinternals{BeamEvent},
+@rinternals{Beam_engraver},
+@rinternals{beam-interface},
+@rinternals{Stem_engraver}.
+
+
+@node Travature a raggiera
+@unnumberedsubsubsec Travature a raggiera
+@translationof Feathered beams
+
+@cindex travature a raggiera
+@cindex travature convergenti o divergenti
+
+@funindex \featherDurations
+@funindex featherDurations
+@funindex grow-direction
+
+Le travature a raggiera servono a indicare che un gruppo di note determinato
+deve essere eseguito a un tempo progressivamente accelerato (o rallentato), senza
+cambiare l'andamento complessivo del brano.  L'estensione della
+travatura a raggiera deve essere indicato a mano con @code{[} e
+@code{]}, e la convergenza o divergenza delle travature si determina specificando la
+la direzione della proprietà @code{Beam} di @code{grow-direction}.
+
+Perché il @emph{ritardando} o l'@emph{accelerando} indicati dalla
+travatura a raggiera trovino riscontro nella disposizione delle note e
+nell'esecuzione del file MIDI, le note devono essere raggruppate in un'espressione
+musicale delimitata da parentesi graffe e preceduta dal comando
+@code{featherDurations}, che specifica il rapporto tra le durate
+delle prime e delle ultime note del gruppo.
+
+Le parentesi quadre indicano l'estensione della travatura, mentre quelle
+graffe indicano quali note devono avere una durata modificata.  Di norma
+queste parentesi delimitano lo stesso gruppo di note, ma questo non è
+tassativo: i due comandi sono indipendenti.
+
+Nell'esempio seguente le otto note da un sedicesimo occupano esattamente
+lo stesso tempo di una nota di due quarti, ma la prima nota dura la metà
+dell'ultima e le note intermedie si allungano gradualmente.  Le prime
+quattro note da un trentaduesimo sono progressivamente più veloci, mentre
+le ultime quattro presentano lo stesso tempo.
+
+@lilypond[relative=1,verbatim,quote]
+\override Beam.grow-direction = #LEFT
+\featherDurations #(ly:make-moment 2/1)
+{ c16[ c c c c c c c] }
+\override Beam.grow-direction = #RIGHT
+\featherDurations #(ly:make-moment 2/3)
+{ c32[ d e f] }
+% ripristina le travature normali
+\override Beam.grow-direction = #'()
+{ g32[ a b c] }
+@end lilypond
+
+@noindent
+La spaziatura rappresenta la durata effettiva delle note solo in
+modo approssimato, mentre il tempo nel file MIDI è esatto.
+
+@predefined
+@code{\featherDurations}.
+@endpredefined
+
+@seealso
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+@knownissues
+Il comando @code{\featherDurations} funziona solamente con frammenti di
+musica molto brevi e quando i numeri della frazione sono piccoli.
+
+
+@node Battute
+@subsection Battute
+@translationof Bars
+
+@menu
+* Stanghette::
+* Numeri di battuta::
+* Controlli di battuta e del numero di battuta::
+* Segni di chiamata::
+@end menu
+
+@node Stanghette
+@unnumberedsubsubsec Stanghette
+@translationof Bar lines
+
+@cindex stanghette
+@cindex battuta, stanghette
+@cindex misura, stanghette
+@cindex stanghette di chiusura
+@cindex stanghette doppie
+@cindex battute dei ritornelli
+
+@funindex \bar
+@funindex bar
+
+Le stanghette delimitano le misure e sono usate anche per indicare
+i ritornelli.  Di norma, le stanghette semplici sono inserite
+automaticamente in base all'indicazione di tempo.
+
+Si possono inserire altri tipi di stanghette col comando @code{\bar}.  Ad
+esempio, di solito si usa una stanghetta finale al termine di un brano:
+
+@lilypond[quote,relative=1,verbatim]
+e4 d c2 \bar "|."
+@end lilypond
+
+Se l'ultima nota di una misura non termina entro la stanghetta
+inserita automaticamente, non viene segnalato un errore: si presuppone
+che la nota continui nella misura successiva.  Ma se ci sono tante
+misure simili in sequenza, la musica potrebbe apparire compressa
+oppure scorrere fuori dalla pagina.  Questo accade perché le interruzioni
+di linea automatiche si verificano solo al termine di misure complete,
+ovvero quando tutte le note terminano prima dell'inizio di una misura.
+
+@warning{Una durata errata può impedire un'interruzione di linea,
+causando una linea di musica altamente compressa oppure a musica che
+prosegue fuori dalla pagina.}
+
+@cindex interruzioni di linea
+@cindex stanghette invisibili
+
+Le interruzioni di linea sono permesse anche in caso si stanghette inserite
+a mano anche all'interno di misure incomplete.  Per permettere un'interruzione
+di linea senza che appaia una stanghetta si usa:
+
+@example
+\bar ""
+@end example
+
+@noindent
+Questo comando inserirà una stanghetta invisibile e consentirà (senza però
+forzarla) un'interruzione di linea in questo punto.  Il conteggio dei
+numeri di battuta non incrementa.  Per forzare un'interruzione di linea
+si veda @ref{Line breaking}.
+
+@cindex stanghette manuali
+@cindex battuta, stanghette manuali
+@cindex misura, stanghette manuali
+
+Si possono inserire questa e altre stanghette speciali in qualsiasi
+punto.  Quando coincidono con la fine di una misura, sostituiscono
+la stanghetta semplice che sarebbe stata posta automaticamente.
+Quando non coincidono con la fine di una misura, la stanghetta
+specificata viene inserita in quel punto.
+
+Si noti che le stanghette manuali hanno una funzione puramente visiva.  Non hanno
+alcun effetto sulle proprietà di una normale stanghetta, come i numeri della
+misura, le alterazioni, le interruzioni di linea, etc.  Non influiscono nemmeno
+sul conteggio e sulla posizione delle stanghette automatiche successive.
+Quando una stanghetta manuale è posta nel punto in cui si trova già una
+normale stanghetta, le caratteristiche della stanghetta originale non sono
+alterate.
+
+Sono disponibili per l'inserimento manuale due tipi di stanghette semplici e
+cinque tipi di stanghette doppie:
+
+@lilypond[quote,relative=1,verbatim]
+f1 \bar "|"
+f1 \bar "."
+g1 \bar "||"
+a1 \bar ".|"
+b1 \bar ".."
+c1 \bar "|.|"
+d1 \bar "|."
+e1
+@end lilypond
+
+@noindent
+oltre alle stanghette puntate e tratteggiate:
+
+@lilypond[quote,relative=1,verbatim]
+f1 \bar ";"
+g1 \bar "!"
+a1
+@end lilypond
+
+@noindent
+e a nove tipi di stanghette per le ripetizioni:
+
+@lilypond[quote,relative=1,verbatim]
+f1 \bar ".|:"
+g1 \bar ":..:"
+a1 \bar ":|.|:"
+b1 \bar ":|.:"
+c1 \bar ":.|.:"
+d1 \bar "[|:"
+e1 \bar ":|][|:"
+f1 \bar ":|]"
+g1 \bar ":|."
+a1
+@end lilypond
+
+Inoltre, una stanghetta può apparire come un semplice segno di spunta:
+@lilypond[quote,relative=1,verbatim]
+f1 \bar "'" g1
+@end lilypond
+Tuttavia,dato che questi segni di spunta sono tipicamente usati nella notazione
+gregoriana, è preferibile usare @code{\divisioMinima}, come è descritto
+nella sezione @ref{Divisiones} della parte dedicata al canto gregoriano.
+
+Lilypond supporta la notazione gregoriana russa e fornisce una stanghetta speciale per
+questo tipo di notazione:
+@lilypond[quote,relative=1,verbatim]
+f1 \bar "k"
+@end lilypond
+I dettagli di questo tipo di notazione sono spiegati in
+@ref{Typesetting Kievan square notation}.
+
+@cindex segno
+
+Per i segni di tipo segno interni al rigo, ci sono tre tipi di stanghette che
+differiscono nel comportamento quando incontrano un'interruzione di linea:
+
+@lilypond[quote,relative=2,verbatim]
+c4 c c c
+\bar "S"
+c4 c c c \break
+\bar "S"
+c4 c c c
+\bar "S-|"
+c4 c c c \break
+\bar "S-|"
+c4 c c c
+\bar "S-S"
+c4 c c c \break
+\bar "S-S"
+c1
+@end lilypond
+
+@cindex ritornelli
+
+Sebbene LilyPond preveda l'inserimento manuale delle stanghette che indicano i ritornelli, ciò non consente il riconoscimento della musica
+come una sezione da ripetere.  Tali sezioni devono essere inserite
+con i vari comandi di ripetizione (vedi @ref{Repeats}), che creano
+automaticamente le stanghette appropriate.
+
+Inoltre si può specificare @code{".|:-||"}, che è equivalente a
+@code{".|:"} tranne in presenza di un'interruzione di linea, dove
+crea una doppia stanghetta alla fine della linea e una stanghetta
+di inizio ripetizione all'inizio della linea successiva.
+
+@lilypond[quote,relative=2,verbatim]
+c4 c c c
+\bar ".|:-||"
+c4 c c c \break
+\bar ".|:-||"
+c4 c c c
+@end lilypond
+
+Esistono sei diverse combinazioni di ripetizioni e indicazioni di segno:
+
+@lilypond[quote,relative=2,verbatim]
+c4 c c c
+\bar ":|.S"
+c4 c c c \break
+\bar ":|.S"
+c4 c c c
+\bar ":|.S-S"
+c4 c c c \break
+\bar ":|.S-S"
+c4 c c c
+\bar "S.|:-S"
+c4 c c c \break
+\bar "S.|:-S"
+c4 c c c
+\bar "S.|:"
+c4 c c c \break
+\bar "S.|:"
+c4 c c c
+\bar ":|.S.|:"
+c4 c c c \break
+\bar ":|.S.|:"
+c4 c c c
+\bar ":|.S.|:-S"
+c4 c c c \break
+\bar ":|.S.|:-S"
+c1
+@end lilypond
+
+Esiste inoltre un comando @code{\inStaffSegno} che crea una stanghetta
+con segno, combinabile col comando@code{\repeat volta}.
+
+@funindex \defineBarLine
+@funindex defineBarLine
+@cindex stanghette, definire
+@cindex definire le stanghette
+
+Si possono definire nuovi tipi di stanghette con @code{\defineBarLine}:
+
+@example
+\defineBarLine @var{tipo-stanghetta} #'(@var{fine} @var{inizio} @var{span})
+@end example
+
+Le variabili di @code{\defineBarline} possono includere la stringa
+@q{vuota} @code{""},che è equivalente a una stanghetta invisibile.
+Oppure possono essere impostate su @code{#f}, che fa sì che non
+appaia alcuna stanghetta.
+
+Dopo averla definita, si può richiamare la nuova stanghetta col comando
+@code{\bar} @var{tipo-stanghetta}.
+
+Attualmente sono disponibile dieci tipi di stanghetta:
+
+@lilypond[quote,verbatim]
+\defineBarLine ":" #'("" ":" "")
+\defineBarLine "=" #'("=" "" "")
+\defineBarLine "[" #'("" "[" "")
+\defineBarLine "]" #'("]" "" "")
+
+\new Staff {
+  s1 \bar "|"
+  s1 \bar "."
+  s1 \bar "!"
+  s1 \bar ";"
+  s1 \bar ":"
+  s1 \bar "k"
+  s1 \bar "S"
+  s1 \bar "="
+  s1 \bar "["
+  s1 \bar "]"
+  s1 \bar ""
+}
+@end lilypond
+
+La stanghetta @code{"="} crea una stanghetta doppia da combinare con il
+il segno.  Non va usata per creare una stanghetta doppia indipendente; in questo caso è preferibile usare @code{\bar} @var{"||"}.
+
+Il segno @code{"-"} introduce le annotazioni alle stanghette che
+servono a distinguere quelle che hanno aspetto identico ma
+un diverso comportamento in corrispondenza delle interruzioni di linea e/o
+un diverso modo di connettere le stanghette tra i righi.
+La parte che segue il segno @code{"-"} non viene usato per costruire
+la stanghetta.
+
+@lilypond[quote,relative=2,verbatim]
+\defineBarLine "||-dashedSpan" #'("||" "" "!!")
+
+\new StaffGroup <<
+  \new Staff {
+    c1 \bar "||"
+    c1 \bar "||-dashedSpan"
+    c1
+  }
+  \new Staff {
+    c1
+    c1
+    c1
+  }
+>>
+@end lilypond
+
+Inoltre, lo spazio @code{" "} fa da spaziatore e fa sì che le stanghette tra i
+righi siano allineate correttamente alle stanghette principali:
+
+@lilypond[quote,relative=2,verbatim]
+\defineBarLine ":|.-sbagliata" #'(":|." "" "|.")
+\defineBarLine ":|.-giusta" #'(":|." "" " |.")
+
+\new StaffGroup <<
+  \new Staff {
+    c1 \bar ":|.-sbagliata"
+    c1 \bar ":|.-giusta"
+    c1
+  }
+  \new Staff {
+    c1
+    c1
+    c1
+  }
+>>
+@end lilypond
+
+Se servono ulteriori elementi, LilyPond fornisce un modo semplice
+per definirli.  Maggiori informazioni sulla modifica e l'aggiunta
+delle stanghette sono presenti nel file @file{scm/bar-line.scm}.
+
+Nelle partiture con molti righi, un comando @code{\bar} inserito
+in un rigo viene applicato automaticamente a tutti i righi.
+Le stanghette risultanti sono connesse tra i diversi righi
+di un @code{StaffGroup}, @code{PianoStaff} o @code{GrandStaff}.
+
+@lilypond[quote,relative=1,verbatim]
+<<
+  \new StaffGroup <<
+    \new Staff {
+      e4 d
+      \bar "||"
+      f4 e
+    }
+    \new Staff { \clef bass c4 g e g }
+  >>
+  \new Staff { \clef bass c2 c2 }
+>>
+@end lilypond
+
+
+@cindex stanghette predefinite, modifica
+
+@funindex whichBar
+@funindex defaultBarType
+@funindex \bar
+@funindex bar
+@funindex bartype
+
+Il comando @samp{\bar @var{tipo-stanghetta}} è una scorciatoia di
+@samp{\set Timing.whichBar = @var{tipo-stanghetta}}.  Una stanghetta
+viene creata ogni volta che si imposta la proprietà @code{whichBar}.
+
+Il tipo di stanghetta predefinita per le stanghette inserite automaticamente
+è @code{"|"}.  Si può modificare in qualsiasi momento con
+@samp{\set Timing.defaultBarType = @var{tipo-stanghetta}}.
+
+@seealso
+Guida alla notazione:
+@ref{Line breaking},
+@ref{Repeats},
+@ref{Grouping staves}.
+
+File installati:
+@file{scm/bar-line.scm}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{BarLine} (creata al livello @code{Staff}),
+@rinternals{SpanBar} (tra i righi),
+@rinternals{Timing_translator} (per le proprietà di Timing).
+
+
+@node Numeri di battuta
+@unnumberedsubsubsec Numeri di battuta
+@translationof Bar numbers
+
+@cindex numeri di battuta
+@cindex battuta, numeri
+@cindex misura, numeri
+
+@funindex currentBarNumber
+
+I numeri di battuta appaiono all'inizio di ogni linea tranne la prima.
+Il numero viene salvato nella proprietà @code{currentBarNumber}, che
+viene aggiornata automaticamente per ogni misura.  Può anche essere
+impostata a mano:
+
+@lilypond[verbatim,quote,relative=1]
+c1 c c c
+\break
+\set Score.currentBarNumber = #50
+c1 c c c
+@end lilypond
+
+@cindex numeri di battuta, disposizione a distanza regolare
+
+@funindex barNumberVisibility
+@funindex BarNumber
+
+I numeri di battuta possono essere mostrati a intervalli regolari
+anziché solo all'inizio di ogni linea.  Per farlo occorre
+sovrascrivere il comportamento predefinito e permettere ai
+numeri di battuta di apparire anche in punti diversi dall'inizio
+della linea.  Questo comportamento è regolato dalla proprietà
+@code{break-visibility} di @code{BarNumber}, che considera tre
+valori impostabili su @code{#t} o @code{#f}, i quali indicano se
+il numero di battuta corrispondente debba essere visibile
+o no.  L'ordine dei tre valori è @code{end of line visible}, @code{middle of
+line visible}, @code{beginning of line visible}.  Nell'esempio seguente
+i numeri di battuta compaiono in tutti i punti possibili:
+
+@lilypond[verbatim,quote,relative=1]
+\override Score.BarNumber.break-visibility = ##(#t #t #t)
+\set Score.currentBarNumber = #11
+% Permette la visualizzazione del primo numero di battuta
+\bar ""
+c1 | c | c | c
+\break
+c1 | c | c | c
+@end lilypond
+
+@snippets
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{printing-the-bar-number-for-the-first-measure.ly}
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{printing-bar-numbers-at-regular-intervals.ly}
+
+@cindex numero di battuta, formato
+@cindex battuta, numero, formato del
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{printing-bar-numbers-inside-boxes-or-circles.ly}
+
+@cindex numeri di battuta, con lettere
+@cindex numeri di battuta, con ripetizioni
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{alternative-bar-numbering.ly}
+
+@cindex numero di battuta, allineamento
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{aligning-bar-numbers.ly}
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{removing-bar-numbers-from-a-score.ly}
+
+@seealso
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{BarNumber},
+@rinternals{Bar_number_engraver}.
+
+@cindex numeri di battuta, collisione
+@cindex collisione, numeri di battuta
+
+@knownissues
+I numeri di battuta possono collidere con la parte superiore della parentesi quadra di
+@code{StaffGroup}, se presente.  Per evitare la collisione, si può usare la
+proprietà @code{padding} di @code{BarNumber} per posizionare correttamente
+il numero.  Si veda @rinternals{StaffGroup} e @rinternals{BarNumber} per
+maggiori informazioni.
+
+
+@node Controlli di battuta e del numero di battuta
+@unnumberedsubsubsec Controlli di battuta e del numero di battuta
+@translationof Bar and bar number checks
+
+@cindex controlli di battuta
+@cindex controlli del numero di battuta
+@cindex controllo della misura
+@cindex battuta, controlli
+@cindex numeri di battuta, controlli
+
+@funindex barCheckSynchronize
+@funindex |
+
+I controlli di battuta aiutano a rilevare gli errori di durata.  Il controllo
+di battuta si inserisce col simbolo della barra verticale, @code{|}, in un qualsiasi
+punto in cui è previsto l'inserimento di una stanghetta.  Se vengono trovati controlli
+di battuta in punti diversi, viene creata una lista di avvisi nel file di log
+che mostra i numeri di linea e le linee in cui il controllo è fallito.  Nell'esempio
+seguente il secondo controllo di battuta segnalerà un errore.
+
+@example
+\time 3/4 c2 e4 | g2 |
+@end example
+
+I controlli di battuta possono essere usati anche all'interno del testo vocale:
+
+@example
+\lyricmode @{
+  \time 2/4
+  Twin -- kle | Twin -- kle |
+@}
+@end example
+
+Una durata non corretta può generare uno spartito completamente
+alterato, specialmente nel caso di brani polifonici.  Quindi il
+primo passo da compiere per correggere l'input è la verifica
+dei controlli di battuta e delle durate errate.
+
+Se i controlli di battuta successivi sono spostati dello stesso
+intervallo musicale, viene mostrato solo il primo messaggio di
+avviso.  Così l'avvertimento si concentra sulla causa dell'errore
+di tempo.
+
+@funindex |
+@funindex "|"
+
+È anche possibile ridefinire l'azione da prendere quando si incontra
+un controllo di battuta o simbolo di barra verticale, @code{|}, nell'input,
+in modo che avvenga qualcosa di diverso dal controllo di battuta.  Si può
+fare assegnando un'espressione musicale a @code{"|"}.
+Nell'esempio seguente @code{|}, invece di controllare la fine di una
+battuta, viene usato per inserire una stanghetta doppia ovunque appaia
+nell'input.
+
+@lilypond[quote,verbatim]
+"|" = \bar "||"
+{
+  c'2 c' |
+  c'2 c'
+  c'2 | c'
+  c'2 c'
+}
+@end lilypond
+
+@funindex \barNumberCheck
+@funindex barNumberCheck
+
+Quando si copiano brani di una certa ampiezza, può essere d'aiuto verificare che i
+numeri di battuta di LilyPond corrispondano all'originale a partire dal quale
+si sta scrivendo il brano.  Si può abilitare con @code{\barNumberCheck}, ad
+esempio,
+
+@verbatim
+\barNumberCheck #123
+@end verbatim
+
+@noindent
+genererà un avvertimento se @code{currentBarNumber} non è 123
+nel momento in cui viene elaborato.
+
+@seealso
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+
+@node Segni di chiamata
+@unnumberedsubsubsec Segni di chiamata
+@translationof Rehearsal marks
+
+@cindex segni di chiamata
+
+@funindex \mark
+@funindex mark
+
+Per creare un segno di chiamata si usa il comando @code{\mark}.
+
+@lilypond[quote,verbatim,relative=2]
+c1 \mark \default
+c1 \mark \default
+c1 \mark \default
+c1 \mark \default
+@end lilypond
+
+@noindent
+Il segno viene incrementato automaticamente se si usa @code{\mark
+\default}, ma è possibile usare anche un numero intero come argomento in
+modo da impostare il segno manualmente.  Il valore da usare viene salvato
+nella proprietà @code{rehearsalMark}.
+
+@lilypond[quote,verbatim,relative=2]
+c1 \mark \default
+c1 \mark \default
+c1 \mark #8
+c1 \mark \default
+c1 \mark \default
+@end lilypond
+
+@noindent
+La lettera@tie{}@q{I} viene saltata, come vuole la tradizione
+tipografica.  Se si desidera includere la lettera @q{I}, si può
+usare uno dei seguenti comandi, a seconda dello stile che si
+vuole (solo lettere, lettere in un quadrato o lettere in un
+cerchio).
+
+@example
+\set Score.markFormatter = #format-mark-alphabet
+\set Score.markFormatter = #format-mark-box-alphabet
+\set Score.markFormatter = #format-mark-circle-alphabet
+@end example
+
+@lilypond[quote,verbatim,relative=2]
+\set Score.markFormatter = #format-mark-box-alphabet
+c1 \mark \default
+c1 \mark \default
+c1 \mark #8
+c1 \mark \default
+c1 \mark \default
+@end lilypond
+
+@cindex segno di chiamata, formato
+@cindex segno di chiamata, stile
+@cindex stile del segno di chiamata
+@cindex formato del segno di chiamata
+@cindex segno, di chiamata, stile
+@cindex segno, di chiamata, formato
+@cindex segno di chiamata manuale
+@cindex segno di chiamata personalizzato
+
+Lo stile viene definito dalla proprietà @code{markFormatter}.  È una
+funzione che accoglie come argomenti il segno corrente (un numero intero) e
+il contesto corrente.  Dovrebbe restituire un oggetto testuale.  Nell'esempio
+seguente, @code{markFormatter} viene prima impostato su una procedura
+predefinita e dopo alcune misure su una procedura che produce un
+numero racchiuso in un quadrato.
+
+@lilypond[quote,verbatim,relative=2]
+\set Score.markFormatter = #format-mark-numbers
+c1 \mark \default
+c1 \mark \default
+\set Score.markFormatter = #format-mark-box-numbers
+c1 \mark \default
+\set Score.markFormatter = #format-mark-circle-numbers
+c1 \mark \default
+\set Score.markFormatter = #format-mark-circle-letters
+c1
+@end lilypond
+
+Il file @file{scm/translation-functions.scm} contiene le
+definizioni di @code{format-mark-numbers} (il formato predefinito),
+@code{format-mark-box-numbers}, @code{format-mark-letters} e
+@code{format-mark-box-letters}.  Possono essere usate come fonte
+di ispirazione per creare altre funzioni di formattazione.
+
+Si possono usare @code{format-mark-barnumbers},
+@code{format-mark-box-barnumbers} e
+@code{format-mark-circle-barnumbers} per ottenere i numeri di battuta
+invece di numeri o lettere crescenti.
+
+Si possono specificare manualmente altri stili di segni di chiamata:
+
+@example
+\mark "A1"
+@end example
+
+@noindent
+Si noti che @code{Score.markFormatter} non ha effetto sui segni specificati
+in questo modo.  Tuttavia, è possibile applicare un @code{\markup} alla
+stringa.
+
+@example
+\mark \markup@{ \box A1 @}
+@end example
+
+@cindex segno
+@cindex coda
+@cindex D.S. al Fine
+@cindex corona
+@cindex glifi musicali
+
+@funindex \musicglyph
+@funindex musicglyph
+
+I glifi musicali (come il Segno) possono essere posti dentro il
+comando @code{\mark}
+
+@lilypond[quote,verbatim,relative=1]
+c1 \mark \markup { \musicglyph #"scripts.segno" }
+c1 \mark \markup { \musicglyph #"scripts.coda" }
+c1 \mark \markup { \musicglyph #"scripts.ufermata" }
+c1
+@end lilypond
+
+@noindent
+L'elenco dei simboli che possono essere prodotti con @code{\musicglyph} si
+trova in @ref{The Feta font}.
+
+Per le più comuni modifiche relative al posizionamento dei segni di chiamata, si
+veda @ref{Formatting text}.  Per ottenere un controllo più preciso si consiglia
+di studiare il funzionamento della proprietà @code{break-alignable-interface}
+descritta in @ref{Aligning objects}.
+
+Il file @file{scm/translation-functions.scm} contiene le
+definizioni di @code{format-mark-numbers} e
+@code{format-mark-letters}, che possono essere usate come fonte di
+ispirazione per creare altre funzioni di formattazione.
+
+@seealso
+Guida alla notazione:
+@ref{The Feta font},
+@ref{Formatting text},
+@ref{Aligning objects}.
+
+File installati:
+@file{scm/translation-functions.scm}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{MarkEvent},
+@rinternals{Mark_engraver},
+@rinternals{RehearsalMark}.
+
+
+@node Questioni ritmiche particolari
+@subsection Questioni ritmiche particolari
+@translationof Special rhythmic concerns
+
+
+@menu
+* Abbellimenti::
+* Allineamento sulle cadenze::
+* Gestione del tempo::
+@end menu
+
+@node Abbellimenti
+@unnumberedsubsubsec Abbellimenti
+@translationof Grace notes
+
+@cindex ornamenti
+@cindex abbellimenti
+@cindex appoggiatura
+@cindex acciaccatura
+
+@funindex \grace
+@funindex \slashedGrace
+@funindex \acciaccatura
+@funindex \appoggiatura
+
+Gli abbellimenti sono degli ornamenti musicali che hanno un carattere in corpo
+più piccolo e non alterano la durata della misura.
+
+@lilypond[quote,relative=2,verbatim]
+c4 \grace b16 a4(
+\grace { b16 c16 } a2)
+@end lilypond
+
+Esistono altri tre tipi di abbellimenti possibili; l'@emph{acciaccatura} -- un
+abbellimento in tempo libero indicato da una nota con legatura di portamento
+e un gambo barrato -- e l'@emph{appoggiatura}, che sottrae un valore determinato
+della nota principale a cui corrisponde e ha un gambo non barrato.  È anche
+possibile creare un abbellimento con gambo barrato, come l'acciaccatura, ma
+privo di legatura di portamento, in modo da collocarla tra note
+già poste sotto una legatura: si usa il comando @code{\slashedGrace}.
+
+@lilypond[quote,relative=2,verbatim]
+\acciaccatura d8 c4
+\appoggiatura e8 d4
+\acciaccatura { g16 f } e2
+\slashedGrace a,8 g4
+\slashedGrace b16 a4(
+\slashedGrace b8 a2)
+@end lilypond
+
+Il posizionamento degli abbellimenti è sincronizzato sui diversi righi.
+Nell'esempio seguente, ci sono due abbellimenti da un sedicesimo ogni
+abbellimento da un ottavo
+
+@lilypond[quote,relative=2,verbatim]
+<<
+  \new Staff { e2 \grace { c16 d e f } e2 }
+  \new Staff { c2 \grace { g8 b } c2 }
+>>
+@end lilypond
+
+@cindex abbellimenti al termine di una nota
+
+@funindex \afterGrace
+@funindex afterGrace
+
+Se si desidera risolvere una nota su un abbellimento, si usa il
+comando @code{\afterGrace}.  Considera due argomenti: la nota principale e
+gli abbellimenti che la seguono.
+
+@lilypond[quote,verbatim,relative=2]
+c1 \afterGrace d1 { c16[ d] } c1
+@end lilypond
+
+In questo modo, gli abbellimenti sono collocati dopo uno spazio corrispondente a
+3/4 della durata della nota principale.  La frazione predefinita 3/4 può essere
+modificata attraverso @code{afterGraceFraction}.  L'esempio seguente mostra
+le diverse spaziature che si ottengono con la frazione predefinita, con 15/16
+e infine con 1/2 della nota principale.
+
+@lilypond[quote,verbatim,relative=2]
+<<
+  \new Staff {
+    c1 \afterGrace d1 { c16[ d] } c1
+  }
+  \new Staff {
+    #(define afterGraceFraction (cons 15 16))
+    c1 \afterGrace d1 { c16[ d] } c1
+  }
+  \new Staff {
+    #(define afterGraceFraction (cons 1 2))
+    c1 \afterGrace d1 { c16[ d] } c1
+  }
+>>
+@end lilypond
+
+The space between the main note and the grace note may also be
+specified using spacers.  The following example places the grace
+note after a space lasting 7/8 of the main note.
+
+@lilypond[quote,verbatim,relative=2]
+\new Voice {
+  <<
+    { d1^\trill_( }
+    { s2 s4. \grace { c16 d } }
+  >>
+  c1)
+}
+@end lilypond
+
+@cindex modificare gli abbellimenti
+@cindex abbellimenti, modifica manuale
+@cindex abbellimenti, modifica delle impostazioni di formattazione
+
+L'espressione musicale introdotta dal comando @code{\grace} avrà delle
+impostazioni tipografiche speciali; per esempio, per rimpicciolire il
+tipo di carattere e impostare le direzioni.  Dunque le modifiche che
+sovrascrivono tali impostazioni speciali devono essere poste all'interno
+del blocco @code{\grace}.  Lo stesso vale per le modifiche che ripristinano
+i valori predefiniti.  Nell'esempio seguente la direzione predefinita del
+gambo viene prima sovrascritta e poi ripristinata.
+
+@lilypond[quote,verbatim,relative=2]
+\new Voice {
+  \acciaccatura {
+    \stemDown
+    f16->
+    \stemNeutral
+  }
+  g4 e c2
+}
+@end lilypond
+
+
+@cindex gambo barrato
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{using-grace-note-slashes-with-normal-heads.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{tweaking-grace-layout-within-music.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{redefining-grace-note-global-defaults.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{positioning-grace-notes-with-floating-space.ly}
+
+@seealso
+Glossario musicale:
+@rglosnamed{grace notes,acciaccatura},
+@rglos{acciaccatura},
+@rglos{appoggiatura}.
+
+Guida alla notazione:
+@ref{Scaling durations},
+@ref{Manual beams}.
+
+File installati:
+@file{ly/grace-init.ly}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{GraceMusic},
+@rinternals{Grace_beam_engraver},
+@rinternals{Grace_auto_beam_engraver},
+@rinternals{Grace_engraver},
+@rinternals{Grace_spacing_engraver}.
+
+
+@knownissues
+@cindex acciaccatura su più note
+@cindex sincronizzazione degli abbellimenti
+
+Una @i{acciaccatura} con molte note raggruppate sotto una travatura è priva della barra trasversale
+e ha il medesimo aspetto di una @i{appoggiatura} composta da varie note
+raggruppate sotto una travatura.
+
+@c TODO Add link to LSR snippet to add slash when available
+
+La sincronizzazione degli abbellimenti può nascondere delle sorprese, perché
+vengono sincronizzati anche altri elementi della notazione del rigo, come le
+armature di chiave, le stanghette, etc.  Fai attenzione quando metti insieme
+righi che hanno degli abbellimenti con righi che non ne hanno.  Ad esempio
+
+@lilypond[quote,relative=2,verbatim]
+<<
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" d2. }
+>>
+@end lilypond
+
+@noindent
+Si può ovviare a questo problema inserendo degli abbellimenti della durata
+corrispondente negli altri righi.  Riprendendo l'esempio precedente
+
+@lilypond[quote,relative=2,verbatim]
+<<
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" \grace s16 d2. }
+>>
+@end lilypond
+
+L'uso degli abbellimenti all'interno dei contesti della voce confonde il modo
+in cui la voce viene rappresentata. Si può evitare il problema inserendo una
+pausa o una nota tra il comando della voce e l'abbellimento.
+
+@lilypond[quote,verbatim]
+accMusic = {
+  \acciaccatura { f8 } e8 r8 \acciaccatura { f8 } e8 r4
+}
+
+\new Staff {
+  <<
+    \new Voice {
+      \relative c'' {
+        r8 r8 \voiceOne \accMusic \oneVoice r8 |
+        r8 \voiceOne r8 \accMusic \oneVoice r8 |
+      }
+    }
+    \new Voice {
+      \relative c' {
+        s8 s8 \voiceTwo \accMusic \oneVoice s8 |
+        s8 \voiceTwo r8 \accMusic \oneVoice s8 |
+      }
+    }
+  >>
+}
+@end lilypond
+
+Le sezioni con abbellimenti devono essere usate solamente all'interno di
+espressioni musicali sequenziali.  Non è permesso annidare o affiancare gruppi
+di abbellimenti; potrebbero verificarsi blocchi del programma o altri errori
+se non si rispetta questa limitazione.
+
+Ogni abbellimento generato nell'output MIDI ha una durata di 1/4 della sua
+vera durata.  Se la durata complessiva degli abbellimenti è maggiore della
+durata della nota che li precede, verrà generato l'errore
+@qq{@code{Going back in MIDI time}}.  A meno che non si diminuisca la durata degli
+abbellimenti, ad esempio:
+
+@example
+c'8 \acciaccatura @{ c'8[ d' e' f' g'] @}
+@end example
+
+diventa:
+
+@example
+c'8 \acciaccatura @{ c'16[ d' e' f' g'] @}
+@end example
+
+Oppure si cambia esplicitamente la durata musicale:
+
+@example
+c'8 \acciaccatura @{ \scaleDurations 1/2 @{ c'8[ d' e' f' g'] @} @}
+@end example
+
+Vedi @ref{Scaling durations}.
+
+
+@node Allineamento sulle cadenze
+@unnumberedsubsubsec Allineamento sulle cadenze
+@translationof Aligning to cadenzas
+
+@cindex cadenza
+@cindex cadenza, allineamento su
+@cindex allineamento sulla cadenza
+
+Nell'ambito di una partitura per orchestra, le cadenze presentano un
+problema peculiare: quando si scrive una partitura che include una
+cadenza o un altro passaggio solistico, tutti gli altri strumenti
+devono saltare esattamente la durata complessiva delle note del
+passaggio, altrimenti inizieranno troppo presto o troppo tardi.
+
+Una possibile soluzione a questo problema consiste nell'uso delle funzioni
+@code{mmrest-of-length} e @code{skip-of-length}.  Queste funzioni Scheme
+prendono come argomento una sezione di musica salvata in una variabile e generano
+una pausa multipla o @code{\skip} della lunghezza esatta del brano.
+
+@lilypond[verbatim,quote]
+MyCadenza = \relative c' {
+  c4 d8 e f g g4
+  f2 g4 g
+}
+
+\new GrandStaff <<
+  \new Staff {
+    \MyCadenza c'1
+    \MyCadenza c'1
+  }
+  \new Staff {
+    #(mmrest-of-length MyCadenza)
+    c'1
+    #(skip-of-length MyCadenza)
+    c'1
+  }
+>>
+@end lilypond
+
+@seealso
+Glossario musicale:
+@rglos{cadenza}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+
+@node Gestione del tempo
+@unnumberedsubsubsec Gestione del tempo
+@translationof Time administration
+
+@cindex gestione del tempo
+@cindex tempo (all'interno della partitura)
+@cindex musica in tempo libero
+
+@funindex currentBarNumber
+@funindex measurePosition
+@funindex measureLength
+
+Il tempo è gestito da @code{Timing_translator}, che si trova
+nel contesto @code{Score}.  Un suo alias,
+@code{Timing}, viene aggiunto nel contesto nel quale si
+trova @code{Timing_translator}.  Per assicurarsi che l'alias
+@code{Timing} sia disponibile, occorre istanziare esplicitamente
+il contesto che lo contiene (come @code{Voice} o
+@code{Staff}).
+
+Si usano le seguenti proprietà di @code{Timing} per tenere traccia
+del tempo in una partitura.
+
+@cindex numero di battuta
+
+@table @code
+@item currentBarNumber
+Il numero di battuta corrente.  Un esempio che mostra l'uso di
+questa proprietà si trova in @ref{Bar numbers}.
+
+@item measureLength
+La durata delle misure nel tempo corrente.  Per un tempo di
+4/4 è@tie{}1, per un tempo di 6/8 è 3/4.  Il suo valore
+determina quando debbano essere inserite le stanghette e come
+debbano essere generate le travature automatiche.
+
+@item measurePosition
+Il punto della misura in cui ci si trova.  Questa quantità viene
+reimpostata sottraendo @code{measureLength} ogni volta che
+@code{measureLength} viene raggiunto o superato.  Quando questo
+accade, @code{currentBarNumber} viene incrementato.
+
+@item timing
+Se impostato su @code{#t}, le variabili precedenti sono aggiornate ad
+ogni momento temporale.  Se impostato su @code{#f}, l'incisore rimane
+nella misura corrente per un tempo indefinito.
+
+@end table
+
+Si può cambiare il tempo impostando esplicitamente una qualsiasi di
+queste variabili.  Nel prossimo esempio, viene visualizzata l'indicazione
+di tempo predefinita di 4/4, ma @code{measureLength} è impostato su 5/4.
+A 4/8 della terza misura, @code{measurePosition} si sposta in avanti
+di 1/8 fino a 5/8, diminuendo quella misura di 1/8.
+Quindi la stanghetta successiva si troverà a 9/8 invece che a 5/4.
+
+@lilypond[quote,verbatim]
+\new Voice \relative c' {
+  \set Timing.measureLength = #(ly:make-moment 5/4)
+  c1 c4 |
+  c1 c4 |
+  c4 c
+  \set Timing.measurePosition = #(ly:make-moment 5/8)
+  b4 b b8 |
+  c4 c1 |
+}
+@end lilypond
+
+@noindent
+Come mostra l'esempio, @code{ly:make-moment n m} definisce una durata
+di n/m della nota intera.  Ad esempio, @code{ly:make-moment 1 8} corrisponde
+alla durata di un ottavo mentre @code{ly:make-moment 7 16} a quella di sette
+sedicesimi.
+
+@seealso
+Guida alla notazione:
+@ref{Bar numbers},
+@ref{Unmetered music}.
+
+Frammenti di codice:
+@rlsr{Rhythms}.
+
+Guida al funzionamento interno:
+@rinternals{Timing_translator},
+@rinternals{Score}.
+
+@c  LocalWords:  accMusic MyCadenza
diff --git a/Documentation/it/notation/simultaneous.itely b/Documentation/it/notation/simultaneous.itely
new file mode 100644 (file)
index 0000000..46e13fd
--- /dev/null
@@ -0,0 +1,1222 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
+@ignore
+    Translation of GIT committish: 45dd19546e9b75b3e1e977732f0962f35dd3290e
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.17.28"
+
+@c Translators: Federico Bruni
+@c Translation checkers: Luca Rossetto Casel
+
+@node Note simultanee
+@section Note simultanee
+@translationof Simultaneous notes
+
+@lilypondfile[quote,ragged-right,line-width=16\cm]{simultaneous-headword.ly}
+
+La polifonia in musica si riferisce alla coesistenza simultanea di più di una voce in un
+brano musicale. In LilyPond la polifonia si riferisce alla coesistenza di
+più voci sullo stesso rigo.
+
+@menu
+* Una voce::
+* Più voci::
+@end menu
+
+
+@node Una voce
+@subsection Una voce
+@translationof Single voice
+
+In questa sezione vengono spiegate le note simultanee che fanno parte di
+un'unica voce.
+
+@menu
+* Note in un accordo::
+* Ripetizione di un accordo::
+* Espressioni simultanee::
+* Cluster::
+@end menu
+
+
+@node Note in un accordo
+@unnumberedsubsubsec Note in un accordo
+@translationof Chorded notes
+
+@cindex accordi
+@cindex parentesi uncinate (o angolari)
+
+@funindex <
+@funindex >
+@funindex <...>
+
+Un accordo si forma racchiudendo una serie di altezze tra @code{<}
+e @code{>} e può essere seguito da una durata, come accade per le
+semplici note.
+
+@lilypond[verbatim,quote,relative=2]
+<a c e>1 <a c e>2 <f a c e>4 <a c>8. <g c e>16
+@end lilypond
+
+Proprio come per le note, si possono specificare le articolazioni da
+riferire all'accordo.
+
+@lilypond[verbatim,quote,relative=2]
+<a c e>1\fermata <a c e>2-> <f a c e>4\prall <a c>8.^! <g c e>16-.
+@end lilypond
+
+Si possono specificare abbellimenti e articolazioni per ogni nota che fa parte
+dell'accordo.
+
+@lilypond[verbatim,quote,relative=2]
+<a c\prall e>1 <a-> c-^ e>2 <f-. a c-. e-.>4
+<a-+ c-->8. <g\fermata c e\turn>16
+@end lilypond
+
+Tuttavia, alcuni elementi della notazione, come le dinamiche, le forcelle e le
+legature di portamento, devono essere attaccate all'accordo invece che alle
+sue singole note, altrimenti non appariranno.
+
+@lilypond[verbatim,quote,relative=2]
+<a\f c( e>1 <a c) e>\f <a\< c e>( <a\! c e>)
+<a c e>\< <a c e> <a c e>\!
+@end lilypond
+
+@cindex accordi vuoti
+@cindex eventi segnaposto
+
+Un accordo si comporta semplicemente come un contenitore di note, articolazioni
+e altri elementi.  Di conseguenza, un accordo privo di note non ha una
+durata.  Qualsiasi articolazione attaccata a un accordo vuoto si troverà
+nel momento musicale della nota o accordo seguenti e si combinerà con
+questi (possibilità più complesse di combinazione sono spiegate in
+@ref{Simultaneous expressions}):
+
+@lilypond[verbatim,quote,relative=2]
+\grace { g8( a b }
+<> ) \p \< -. -\markup \italic "sempre staccato"
+\repeat unfold 4 { c4 e }  c1\f
+@end lilypond
+
+@cindex altezza relativa, accordi
+@cindex accordi, altezza relativa
+
+Si può usare la modalità relativa per indicare l'altezza degli accordi.  La
+prima nota di ogni accordo è sempre relativa alla prima nota dell'accordo
+che lo precede oppure, se non c'è un accordo precedente, è relativa
+all'altezza dell'ultima nota che precede l'accordo.  Le altezze di tutte le altre note
+dell'accordo sono relative alla nota che le precede @emph{all'interno dell'accordo}.
+
+@lilypond[verbatim,quote,relative=2]
+<a c e>1 <f a c> <a c e> <f' a c> <b, e b,>
+@end lilypond
+
+Maggiori informazioni sugli accordi si trovano in @ref{Chord notation}.
+
+@seealso
+Glossario Musicale:
+@rglosnamed{chord,accordo}.
+
+Manuale d'apprendimento:
+@rlearning{Combinare le note negli accordi}.
+
+Guida alla notazione:
+@ref{Chord notation},
+@ref{Articulations and ornamentations},
+@ref{Relative octave entry},
+@ref{Multiple voices}.
+
+Frammenti:
+@rlsr{Simultaneous notes}.
+
+@knownissues
+Gli accordi che contengono più di due altezze in uno spazio del rigo,
+come ad esempio @samp{<e f! fis!>}, presentano le teste di tali note sovrapposte.
+A seconda della situazione, si può migliorare l'aspetto con
+
+@itemize
+
+@item
+l'uso temporaneo di @ref{Multiple voices},
+@samp{<< f! \\ <e fis!> >>},
+
+@item
+la trascrizione enarmonica di una o più altezze,
+@samp{<e f ges>}, oppure
+
+@item
+i @ref{Clusters}.
+
+@end itemize
+
+
+@node Ripetizione di un accordo
+@unnumberedsubsubsec Ripetizione di un accordo
+@translationof Chord repetition
+
+@cindex accordo, ripetizione
+@cindex ripetizione, uso di @code{q}
+
+Per inserire la musica più rapidamente, si può usare una scorciatoia che ripete
+l'accordo precedente.  Il simbolo di ripetizione dell'accordo è @code{q}:
+
+@lilypond[verbatim,quote,relative=2]
+<a c e>1 q <f a c>2 q
+@end lilypond
+
+Come nel caso dei normali accordi, il simbolo di ripetzione dell'accordo si
+può  usare con le durate, le articolazioni, i testi a margine, le legature
+di portamento, le travature, etc. dato che solo le altezze dell'accordo
+precedente vengono duplicate.
+
+@lilypond[verbatim,quote,relative=2]
+<a c e>1\p^"text" q2\<( q8)[-! q8.]\! q16-1-2-3 q8\prall
+@end lilypond
+
+Il simbolo di ripetizione dell'accordo ricorda sempre l'ultimo accordo
+inserito, quindi è possibile inserire l'accordo più recente anche se
+nel frattempo sono state inserite altre note (senza accordi) o pause.
+
+@lilypond[verbatim,quote,relative=2]
+<a c e>1 c'4 q2 r8 q8 |
+q2 c, |
+@end lilypond
+
+Tuttavia questo simbolo non conserva le dinamiche, le articolazioni o
+gli abbellimenti dell'accordo precedente.
+
+@lilypond[verbatim,quote,relative=2]
+<a-. c\prall e>1\sfz c'4 q2 r8 q8 |
+q2 c, |
+@end lilypond
+
+Per far sì che alcuni elementi siano conservati, si può invocare esplicitamente
+la funzione @code{\chordRepeats} con un'ulteriore argomento che indica una
+lista di @var{tipi di evento} da mantenere, a meno che eventi di quel tipo non
+siano già presenti nell'accordo @code{q} stesso.
+
+@lilypond[verbatim,quote]
+\relative c'' {
+  \chordRepeats #'(articulation-event)
+  { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+  q2 c, |
+}
+@end lilypond
+
+In questo esempio l'uso di @code{\chordRepeats} all'interno di un blocco
+@code{\relative} produce risultati indesiderati: gli eventi di un accordo,
+una volta espansi, non si distinguono più per essere stati inseriti
+come accordi normali, quindi @code{\relative} assegna un'ottava basata
+sul contesto corrente.
+
+Dato che @code{\relative} annidati non si influenzano l'un l'altro, si può
+usare un altro @code{\relative} dentro @code{\chordRepeats} per stabilire
+le relazioni di ottava prima di espandere gli accordi ripetuti.  In questo
+caso l'intero contenuto del @code{\relative} più interno non influenza
+quello esterno; ecco perché in questo esempio la nota finale è stata
+specificata con un'ottava diversa.
+
+@c Without \new Voice, implicit voice creation does the dumbest thing.
+@lilypond[verbatim,quote]
+\new Voice
+\relative c'' {
+  \chordRepeats #'(articulation-event)
+  \relative c''
+  { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+  q2 c |
+}
+@end lilypond
+
+Le interazioni con @code{\relative} si verificano solo con chiamate esplicite
+di @code{\chordRepeats}: l'espansione implicita all'inizio della creazione
+della partitura viene fatta in un momento in cui tutti i @code{\relative} sono
+stati già elaborati.
+
+@seealso
+Guida alla notazione:
+@ref{Chord notation},
+@ref{Articulations and ornamentations}.
+
+File installati:
+@file{ly/chord-repetition-init.ly}.
+
+
+@node Espressioni simultanee
+@unnumberedsubsubsec Espressioni simultanee
+@translationof Simultaneous expressions
+
+Una o più espressioni musicali racchiuse tra due coppie di parentesi uncinate sono
+considerate simultanee.  Se la prima espressione inizia con una nota
+singola o se l'intera espressione simultanea appare esplicitamente
+all'interno di una voce, sarà posta in un solo rigo; altrimenti gli
+elementi dell'espressione simultanea saranno messi in righi separati.
+
+Gli esempi seguenti mostrano espressioni simultanee su un rigo:
+
+@lilypond[quote,verbatim,relative=2]
+\new Voice {  % voce singola esplicita
+  << { a4 b g2 } { d4 g c,2 } >>
+}
+@end lilypond
+
+@lilypond[quote,verbatim,relative=2]
+% prima nota singola
+a << { a4 b g } { d4 g c, } >>
+@end lilypond
+
+Questo può essere utile se le sezioni simultanee hanno durate
+identiche, ma i tentativi di collegare note con durate diverse
+allo stesso gambo causerà degli errori.  Le note, le articolazioni
+e le modifiche delle proprietà in una @emph{singola} voce (@samp{Voice})
+sono raccolte e create secondo l'ordine della musica:
+
+@lilypond[quote,verbatim,relative=2]
+<a c>4-.  <>-. << c a >>  << { c-. <c a> } { a s-. } >>
+@end lilypond
+
+Per poter inserire gambi o travature multiple e variare le durate o
+altre proprietà di note riferibili allo stesso momento musicale,
+occorre usare più voci.
+
+L'esempio seguente mostra  come le espressioni simultanee possano
+generare implicitamente righi multipli:
+
+@lilypond[quote,verbatim,relative=2]
+% nessuna singola nota precede l'espressione simultanea
+<< { a4 b g2 } { d4 g2 c,4 } >>
+@end lilypond
+
+In questo caso le durate diverse non causano problemi perché sono
+interpretate in voci diverse.
+
+@cindex collisioni, troppe colonne di note che si urtano
+@cindex collisioni, ignorare
+
+@knownissues
+Se le note appartenenti a due o più  voci, con gambi nella stessa direzione, si
+trovano nello stesso punto del rigo e non è stato specificato uno spostamento
+orizzontale (oppure è stato specificato lo stesso valore per lo spostamento),
+il messaggio:
+
+@example
+attenzione: troppe collisioni tra colonne di note, ignorate
+@end example
+
+apparirà durante la compilazione del file.  Si può evitare con:
+
+@example
+\override NoteColumn.ignore-collision = ##t
+@end example
+
+Tuttavia, questo comando non si limita a eliminare l'avvertimento, ma impedisce qualsiasi
+risoluzione delle collisioni, e potrebbe comportare altri effetti indesiderati
+(vedi anche i @emph{Problemi noti} in @ref{Collision resolution}).
+
+
+@node Cluster
+@unnumberedsubsubsec Cluster
+@translationof Clusters
+
+@cindex cluster
+@cindex cluster di note
+
+@funindex \makeClusters
+@funindex makeClusters
+
+Un cluster prescrive l'esecuzione simultanea di tutti i suoni compresi in un determinato intervallo.  Può
+essere rappresentato come un involucro che contiene le note che ne fanno parte.  Si
+inserisce applicando la funzione @code{\makeClusters} a una sequenza
+di accordi, ad esempio:
+
+@lilypond[quote,relative=2,verbatim]
+\makeClusters { <g b>2 <c g'> }
+@end lilypond
+
+Si possono inserire insieme sullo stesso rigo le normali note e i cluster,
+anche contemporaneamente.  In tal caso non viene fatto alcun tentativo di
+evitare automaticamente collisioni tra le note normali e i cluster.
+
+@seealso
+Glossario Musicale:
+@rglos{cluster}.
+
+Frammenti:
+@rlsr{Simultaneous notes}.
+
+Guida al funzionamento interno:
+@rinternals{ClusterSpanner},
+@rinternals{ClusterSpannerBeacon},
+@rinternals{Cluster_spanner_engraver}.
+
+@knownissues
+I cluster hanno un buon aspetto solo se durano almeno per due accordi; altrimenti
+appaiono troppo stretti.
+
+I cluster non hanno un gambo e non possono indicare delle durate da soli, ma
+la lunghezza del cluster è determinata dalle durate degli accordi che lo
+definiscono.  Più cluster distinti devono essere separati da una pausa.
+
+I cluster non generano output MIDI.
+
+
+@node Più voci
+@subsection Più voci
+@translationof Multiple voices
+
+Questa sezione presenta le note simultanee in più voci o più righi.
+
+@menu
+* Polifonia su un solo rigo::
+* Stili di voce::
+* Risoluzione delle collisioni::
+* Combinazione automatica delle parti::
+* Scrivere la musica in parallelo::
+@end menu
+
+
+@node Polifonia su un solo rigo
+@unnumberedsubsubsec Polifonia su un solo rigo
+@translationof Single-staff polyphony
+
+@cindex polifonia su un rigo singolo
+@cindex voce
+@cindex testo assegnato a una voce
+
+@funindex \voiceOne
+@funindex voiceOne
+@funindex \voiceOne ... \voiceFour
+@funindex Voice
+@funindex \oneVoice
+@funindex oneVoice
+
+@subsubsubheading Istanziare esplicitamente le voci
+
+La struttura di base necessaria per ottenere più voci indipendenti in un
+solo rigo è illustrata nell'esempio seguente:
+
+@lilypond[quote,relative=3,verbatim]
+\new Staff <<
+  \new Voice = "prima"
+    { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d }
+  \new Voice= "seconda"
+    { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+>>
+@end lilypond
+
+@noindent
+Le voci sono istanziate esplicitamente e vengono contrassegnate da dei nomi. I
+comandi @code{\voiceOne} @dots{} @code{\voiceFour} impostano le voci in
+modo che la prima e terza voce abbiano i gambi in su, la seconda e la quarta
+voce i gambi in giù, le teste di nota della terza e quarta voce siano
+spostate orizzontalmente e le pause in ciascuna voce siano spostate
+automaticamente per evitare collisioni.  Il comando @code{\oneVoice}
+ripristina tutte le impostazioni della voce alle direzioni neutrali
+predefinite.
+
+@subsubsubheading Pasaggi polifonici temporanei
+
+Un passaggio polifonico temporaneo si può creare col seguente costrutto:
+
+@example
+<< @{ \voiceOne @dots{} @}
+  \new Voice @{ \voiceTwo @dots{} @}
+>> \oneVoice
+@end example
+
+@noindent
+In questo esempio la prima espressione all'interno di un passaggio polifonico
+temporaneo è posta nel contesto @code{Voice} che era in uso immediatamente
+prima del passaggio polifonico e quello stesso contesto @code{Voice} continua
+dopo la sezione temporanea.  Le altre espressioni comprese nelle parentesi
+uncinate vengono assegnate a voci temporanee distinte.  Questo permette di
+assegnare il testo a una voce che continua prima, durante e dopo una sezione
+polifonica:
+
+@lilypond[quote, verbatim, relative=2]
+<<
+  \new Voice = "melody" {
+    a4
+    <<
+      {
+        \voiceOne
+        g f
+      }
+      \new Voice {
+        \voiceTwo
+        d2
+      }
+    >>
+    \oneVoice
+    e4
+  }
+  \new Lyrics \lyricsto "melody" {
+  This is my song.
+  }
+>>
+@end lilypond
+
+@noindent
+I comandi @code{\voiceOne} e @code{\voiceTwo} sono necessari per
+definire le impostazioni di ogni voce.
+
+@subsubsubheading Il costrutto con la doppia barra inversa (backslash)
+
+Il costrutto @code{<< @{@dots{}@} \\ @{@dots{}@} >>}, in cui due (o
+più) espressioni sono separate da due barre inverse (backslash), si
+comporta diversamente dal costrutto simile privo delle due barre:
+@emph{tutte} le espressioni in questo costrutto vengono assegnate
+a nuovi contesti @code{Voice}.  Questi nuovi contesti @code{Voice}
+vengono creati implicitamente e ad essi vengono assegnati dei nomi
+prestabiliti @code{"1"}, @code{"2"}, etc.
+
+Il primo esempio potrebbe essere riscritto nel modo seguente:
+
+@lilypond[quote,relative=3,verbatim]
+<<
+  { r8 r16 g e8. f16 g8[ c,] f e16 d }
+  \\
+  { d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. }
+>>
+@end lilypond
+
+Questa sintassi si usa quando non importa che le voci temporanee siano
+create e poi eliminate.  A queste voci create implicitamente vengono
+assegnate le impostazioni equivalenti all'uso dei comandi
+@code{\voiceOne} @dots{} @code{\voiceFour}, nell'ordine in cui
+appaiono nell'input.
+
+Nell'esempio seguente, la voce intermedia ha i gambi in su, dunque viene
+inserita in terza posizione in modo che diventi la terza voce, che ha
+i gambi in su.  Si usano le pause spaziatrici per evitare il raddoppio delle pause ordinarie.
+
+@lilypond[quote,relative=3,verbatim]
+<<
+  { r8 g g  g g f16 ees f8 d }
+  \\
+  { ees,8 r ees r d r d r }
+  \\
+  { d'8 s c s bes s a s }
+>>
+@end lilypond
+
+In tutti i brani, a eccezione di quelli più semplici, è consigliabile creare contesti
+@code{Voice} espliciti come è spiegato in @rlearning{Contesti e incisori} e
+@rlearning{Definire esplicitamente le voci}.
+
+@subsubsubheading Ordine delle voci
+
+Quando si inseriscono più  voci nel file di input, conviene usare il
+seguente ordine:
+
+@example
+Voce 1: la più alta
+Voce 2: la più bassa
+Voce 3: la seconda più alta
+Voce 4: la seconda più bassa
+Voce 5: la  terza più alta
+Voce 6: la terza più bassa
+etc.
+@end example
+
+Sebbene possa sembrare controintuitivo, ciò semplifica il processo
+automatico di formattazione.  Si noti che le voci con numero
+dispari hanno i gambi in su, quelle con numero pari hanno i
+gambi in giù:
+
+@lilypond[quote,verbatim]
+\new Staff <<
+  \time 2/4
+  { f''2 }  % 1: la più alta
+  \\
+  { c'2  }  % 2: la più bassa
+  \\
+  { d''2 }  % 3: seconda più alta
+  \\
+  { e'2  }  % 4: seconda più bassa
+  \\
+  { b'2  }  % 5: terza più alta
+  \\
+  { g'2  }  % 6: terza più bassa
+>>
+@end lilypond
+
+@warning{Il testo e gli estensori (come le legature di portamento e di valore,
+le forcelle, etc.) non possono @q{attraversare} le voci.}
+
+@subsubsubheading Durate identiche
+
+Nel caso speciale in cui si desideri inserire sezioni musicali parallele
+con il medesimo ritmo, si possono combinare in un unico contesto
+@code{Voice}, formando dunque degli accordi. Per farlo, vanno racchiuse
+in un semplice costrutto musicale simultaneo all'interno di una
+voce esplicita:
+
+@lilypond[quote,relative=2,verbatim]
+\new Voice <<
+  { e4 f8 d e16 f g8 d4 }
+  { c4 d8 b c16 d e8 b4 }
+>>
+@end lilypond
+
+Questo metodo produce strane travature e avvertimenti se le sezioni musicali
+non hanno lo stesso ritmo.
+
+
+@predefined
+@code{\voiceOne},
+@code{\voiceTwo},
+@code{\voiceThree},
+@code{\voiceFour},
+@code{\oneVoice}.
+@endpredefined
+
+@seealso
+Manuale d'apprendimento:
+@rlearning{Le voci contengono la musica},
+@rlearning{Definire esplicitamente le voci}.
+
+Guida alla notazione:
+@ref{Percussion staves},
+@ref{Invisible rests},
+@ref{Stems}.
+
+Frammenti:
+@rlsr{Simultaneous notes}.
+
+
+@node Stili di voce
+@unnumberedsubsubsec Stili di voce
+@translationof Voice styles
+
+@cindex stili di voce
+@cindex voci, stili
+@cindex colorare le voci
+@funindex \voiceOneStyle
+@funindex \voiceTwoStyle
+@funindex \voiceThreeStyle
+@funindex \voiceFourStyle
+@funindex \voiceNeutralStyle
+
+Si possono assegnare colori e forme diverse a ciascuna voce per facilitarne
+l'identificazione:
+
+@lilypond[quote,relative=2,verbatim]
+<<
+  { \voiceOneStyle d4 c2 b4 }
+  \\
+  { \voiceTwoStyle e,2 e }
+  \\
+  { \voiceThreeStyle b2. c4 }
+  \\
+  { \voiceFourStyle g'2 g }
+>>
+@end lilypond
+
+Il comando @code{\voiceNeutralStyle} permette di ripristinare l'aspetto
+predefinito.
+
+
+@predefined
+@code{\voiceOneStyle},
+@code{\voiceTwoStyle},
+@code{\voiceThreeStyle},
+@code{\voiceFourStyle},
+@code{\voiceNeutralStyle}.
+@endpredefined
+
+@seealso
+Manuale d'apprendimento:
+@rlearning{Sento le Voci},
+@rlearning{Altre fonti di informazione}.
+
+Frammenti:
+@rlsr{Simultaneous notes}.
+
+
+@node Risoluzione delle collisioni
+@unnumberedsubsubsec Risoluzione delle collisioni
+@translationof Collision resolution
+
+@cindex unire le note
+@cindex collisioni di note
+@cindex collisioni
+@cindex spostare una nota
+@cindex nota, spostamento
+@cindex tante voci
+@cindex voci multiple
+@cindex musica polifonica
+@cindex spostare le voci
+@cindex spostamento automatico della pausa
+@cindex pausa, spostamento automatico
+@funindex \shiftOn
+@funindex shiftOn
+@funindex \shiftOnn
+@funindex shiftOnn
+@funindex \shiftOnnn
+@funindex shiftOnnn
+@funindex \shiftOff
+@funindex shiftOff
+@funindex \mergeDifferentlyDottedOn
+@funindex mergeDifferentlyDottedOn
+@funindex \mergeDifferentlyDottedOff
+@funindex mergeDifferentlyDottedOff
+@funindex \mergeDifferentlyHeadedOn
+@funindex mergeDifferentlyHeadedOn
+@funindex \mergeDifferentlyHeadedOff
+@funindex mergeDifferentlyHeadedOff
+
+Le teste di note che si trovano in voci diverse ma hanno stessa altezza,
+stessa testa e direzione del gambo opposta vengono unite automaticamente;
+invece, le note che hanno la stessa testa o la stessa direzione del gambo
+non vengono unite.  Le pause opposte a un gambo in una voce diversa vengono
+spostate verticalmente. L'esempio seguente mostra tre  diverse circostanze,
+sul primo e terzo movimento della prima battuta e sul primo movimento della seconda
+battuta, in cui l'unione automatica delle teste di nota non funziona.
+
+@lilypond[quote,verbatim,relative=2]
+<<
+  {
+    c8 d e d c d c4
+    g'2 fis
+  } \\ {
+    c2 c8. b16 c4
+    e,2 r
+  } \\ {
+    \oneVoice
+    s1
+    e8 a b c d2
+  }
+>>
+@end lilypond
+
+Note con teste diverse possono essere unite come è mostrato sotto.  In
+questo esempio le teste delle note nel primo battito della prima battuta
+sono unite:
+
+@lilypond[quote,verbatim,relative=2]
+<<
+  {
+    \mergeDifferentlyHeadedOn
+    c8 d e d c d c4
+    g'2 fis
+  } \\ {
+    c2 c8. b16 c4
+    e,2 r
+  } \\ {
+    \oneVoice
+    s1
+    e8 a b c d2
+  }
+>>
+@end lilypond
+
+Le minime e le semiminime, invece, non sono unite, perché sarebbe
+difficile distinguerle.
+
+Anche le teste di note con diversi punti, come nel terzo movimento della prima
+battuta, possono essere unite:
+
+@lilypond[quote,relative=2,verbatim]
+<<
+  {
+    \mergeDifferentlyHeadedOn
+    \mergeDifferentlyDottedOn
+    c8 d e d c d c4
+    g'2 fis
+  } \\ {
+    c2 c8. b16 c4
+    e,2 r
+  } \\ {
+    \oneVoice
+    s1
+    e8 a b c d2
+  }
+>>
+@end lilypond
+
+La minima e la croma all'inizio della seconda misura sono unite
+per errore, perché l'unione automatica non riesce a completare
+correttamente l'unione quando tre o più note sono allineate sulla
+stessa colonna di note: in questo caso la testa di nota unita non
+è corretta.  Per far sì che l'unione selezioni la testa di nota
+corretta, occorre applicare il comando @code{\shift} alla nota
+che non deve essere unita.  In questo esempio si usa @code{\shiftOn} per
+spostare il Sol superiore (@notation{g}) fuori dalla colonna e di
+conseguenza @code{\mergeDifferentlyHeadedOn} funziona correttamente.
+
+@lilypond[quote,relative=2,verbatim]
+<<
+  {
+    \mergeDifferentlyHeadedOn
+    \mergeDifferentlyDottedOn
+    c8 d e d c d c4
+    \shiftOn
+    g'2 fis
+  } \\ {
+    c2 c8. b16 c4
+    e,2 r
+  } \\ {
+    \oneVoice
+    s1
+    e8 a b c d2
+  }
+>>
+@end lilypond
+
+Il comando @code{\shiftOn} permette (senza forzare) lo spostamento delle note
+in una voce.  Quando si applica @code{\shiftOn} a una voce, una nota o
+accordo in quella voce vengono spostati solo se il suo gambo altrimenti entrerebbe
+in collisione col gambo di un'altra voce, e solo se i gambi
+che collidono puntano nella stessa direzione. Il comando @code{\shiftOff}
+impedisce che si verifichi questo tipo di spostamento.
+
+Per impostazione predefinita, le voci più esterne (solitamente la prima e
+la seconda voce) hanno specificato @code{\shiftOff}, mentre le voci più
+interne (terza e successive) hanno specificato @code{\shiftOn}.  Quando si
+applica uno spostamento, le voci con i gambi in su (voci dispari)
+vengono spostate a destra, e le voci con i gambi in giù (voci pari)
+vengono spostate a sinistra.
+
+Ecco un esempio che aiuta a visualizzare come un'espressione simultanea
+abbreviata viene espansa internamente.
+
+@warning{Attenzione: con tre o più voci, l'ordine verticale delle voci
+nel file di input non deve essere lo stesso dell'ordine verticale delle
+voci del rigo!}
+
+@lilypond[quote,verbatim]
+\new Staff \relative c'' {
+  %% inserimento abbreviato
+  <<
+    { f2  }  % 1: più alta
+    \\
+    { g,2 }  % 2: più bassa
+    \\
+    { d'2 }  % 3: più alta centrale
+    \\
+    { b2  }  % 4: più  bassa centrale
+  >>
+  %% espansione interna dell'input precedente
+  <<
+    \new Voice = "1" { \voiceOne   \shiftOff f'2 }
+    \new Voice = "2" { \voiceTwo   \shiftOff g,2 }
+    \new Voice = "3" { \voiceThree \shiftOn  d'2 } % sposta a destra
+    \new Voice = "4" { \voiceFour  \shiftOn  b2  } % sposta a sinistra
+  >>
+}
+@end lilypond
+
+Due ulteriori comandi, @code{\shiftOnn} e @code{\shiftOnnn},
+mettono a disposizione altri livelli di spostamento che possono
+essere specificati in modo temporaneo per risolvere delle collisioni
+in situazioni complesse --  vedi @rlearning{Esempio musicale}.
+
+Le note vengono unite solo se presentano opposta direzione dei gambi (come
+accade, ad esempio, nella prima o seconda voce o quando i gambi sono
+impostati esplicitamente in direzioni opposte).
+
+@predefined
+@code{\mergeDifferentlyDottedOn},
+@code{\mergeDifferentlyDottedOff},
+@code{\mergeDifferentlyHeadedOn},
+@code{\mergeDifferentlyHeadedOff}.
+
+@code{\shiftOn},
+@code{\shiftOnn},
+@code{\shiftOnnn},
+@code{\shiftOff}.
+@endpredefined
+
+@snippets
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{additional-voices-to-avoid-collisions.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{forcing-horizontal-shift-of-notes.ly}
+
+@seealso
+Glossario Musicale:
+@rglosnamed{polyphony,polifonia}.
+
+Manuale d'apprendimento:
+@rlearning{Note simultanee},
+@rlearning{Le voci contengono la musica},
+@rlearning{Esempio musicale}.
+
+Frammenti:
+@rlsr{Simultaneous notes}.
+
+Guida al funzionamento interno:
+@rinternals{NoteColumn},
+@rinternals{NoteCollision},
+@rinternals{RestCollision}.
+
+@cindex collisioni,ignorare
+
+@knownissues
+Se si usa @code{\override NoteColumn.ignore-collision = ##t},
+le note con teste diverse che si trovano in voci
+diverse saranno unite in modo non corretto.
+
+@lilypond[quote,relative=1,verbatim]
+\mergeDifferentlyHeadedOn
+<< { c16 a' b a } \\ { c,2 } >>
+\override NoteColumn.ignore-collision = ##t
+<< { c16 a' b a } \\ { c,2 } >>
+@end lilypond
+
+@ignore
+@knownissues
+@c TODO investigate! Sometimes it works, sometimes not. --FV
+The requirements for successfully merging different note heads that
+are at the same time differently dotted are not clear.
+@end ignore
+
+
+@node Combinazione automatica delle parti
+@unnumberedsubsubsec Combinazione automatica delle parti
+@translationof Automatic part combining
+
+@cindex combinazione automatica delle parti
+@cindex combinatore delle parti
+@cindex unione delle parti
+@cindex parte a due
+@cindex parte solista
+@funindex \partcombine
+@funindex partcombine
+
+La combinazione automatica delle parti si usa per combinare in un unico
+rigo due parti musicali separate.  Ciò è utile soprattutto quando si scrivono
+partiture orchestrali.  Viene stampata una sola voce se le due parti
+musicali sono identiche, ma nei punti in cui sono diverse viene
+aggiunta una seconda voce.  Le direzioni dei gambi sono impostate
+in su e in giù in base alla voce di appartenenza, mentre le sezioni solistiche e @notation{a due}
+sono a loro volta identificate e contrassegnate.
+
+La sintassi per la combinazione automatica delle parti è:
+
+@example
+\partcombine @var{espressione-musicale1} @var{espressione-musicale2}
+@end example
+
+L'esempio seguente illustra il funzionamento di base: le parti
+sono poste su un unico rigo in modo polifonico e le direzioni dei
+gambi sono regolate di conseguenza.  Si usano le stesse variabili
+per le parti indipendenti e il rigo combinato.
+
+@lilypond[quote,verbatim]
+instrumentOne = \relative c' {
+  c4 d e f |
+  R1 |
+  d'4 c b a |
+  b4 g2 f4 |
+  e1 |
+}
+
+instrumentTwo = \relative g' {
+  R1 |
+  g4 a b c |
+  d4 c b a |
+  g4 f( e) d |
+  e1 |
+}
+
+<<
+  \new Staff \instrumentOne
+  \new Staff \instrumentTwo
+  \new Staff \partcombine \instrumentOne \instrumentTwo
+>>
+@end lilypond
+
+Entrambe le parti hanno note identiche nella terza misura, dunque viene
+stampata una sola nota. Le direzioni dei gambi e delle legature di portamento e
+di valore sono impostate automaticamente, a seconda che l'esecuzione delle parti sia
+solistica o all'unisono. Quando si rende necessario, in
+caso di polifonia, la prima parte (nel contesto @code{one}) ha i gambi
+in @qq{su}, mentre la seconda (nel contesto @code{two}) ha sempre i
+gambi in @qq{giù}. In caso di parti solistiche, la prima e seconda
+parte sono contrassegnate rispettivamente con @qq{Solo} e @qq{Solo II}.
+Le parti (@notation{a due}) all'unisono sono contrassegnate con la
+scritta @qq{a2}.
+
+Entrambi gli argomenti di @code{\partcombine} sono interpretati come
+contesti @code{Voice} separati, dunque se la musica viene inserita in
+modo relativo @emph{entrambe} le parti devono contenere una funzione
+@code{\relative}, ovvero:
+
+@example
+\partcombine
+  \relative @dots{} @var{espressione-musicale1}
+  \relative @dots{} @var{espressione-musicale2}
+@end example
+
+@noindent
+Un blocco @code{\relative} che racchiude un @code{\partcombine} non ha
+effetto sulle altezze di @code{@var{espressione-musicale1}} e
+@code{@var{espressione-musicale2}}.
+
+@funindex \partcombineChords
+@funindex partcombineChords
+@funindex \partcombineApart
+@funindex partcombineApart
+@funindex \partcombineUnisono
+@funindex partcombineUnisono
+@funindex \partcombineSoloI
+@funindex partcombineSoloI
+@funindex \partcombineSoloII
+@funindex partcombineSoloII
+@funindex \partcombineAutomatic
+@funindex partcombineAutomatic
+
+Nelle partiture professionali, spesso le voci sono tenute separate per
+lunghi passaggi anche se alcune note sono le stesse in entrambe le voci
+e potrebbero essere stampate come unisono.  Combinare le note in un
+accordo o mostrare una voce come solista, dunque, non è la scelta
+ideale, perché la funzione @code{\partcombine} considera ogni nota
+individualmente. In questo caso si può sovrascrivere la funzione
+@code{\partcombine} con i comandi  elencati sotto.
+
+I comandi che finiscono con @code{@dots{}Once} si applicano soltanto alla
+nota successiva dell'espressione musicale.
+
+@itemize
+@item
+@code{\partcombineApart} e @code{\partcombineApartOnce} mantengono le
+note su due voci distinte, anche se potrebbero essere combinate in un
+accordo o in un unisono.
+
+@item
+@code{\partcombineChords} e @code{\partcombineChordsOnce} uniscono le
+note in un accordo.
+
+@item
+@code{\partcombineUnisono} e @code{\partcombineUnisonoOnce} uniscono
+entrambe le voci come @qq{unisono}.
+
+@item
+@code{\partcombineSoloI} e @code{\partcombineSoloIOnce} stampano soltanto
+la prima voce e la contrassegnano come un @qq{Solo}.
+
+@item
+@code{\partcombineSoloII} o @code{\partcombineSoloIIOnce} stampano soltanto
+la seconda voce e la contrassegnano come un @qq{Solo}.
+
+@item
+@code{\partcombineAutomatic} e @code{\partcombineAutomaticOnce} terminano
+le funzioni dei comandi precedenti e ripristinano il funzionamento
+predefinito di @code{\partcombine}.
+@end itemize
+
+@lilypond[quote,verbatim]
+instrumentOne = \relative c' {
+  \partcombineApart c2^"separato" e |
+  \partcombineAutomatic e2^"automatico" e |
+  \partcombineChords e'2^"accordo" e |
+  \partcombineAutomatic c2^"automatico" c |
+  \partcombineApart c2^"separato" \partcombineChordsOnce e^"accordo una volta sola" |
+  c2 c |
+}
+instrumentTwo = \relative c' {
+  c2 c |
+  e2 e |
+  a,2 c |
+  c2 c' |
+  c2 c |
+  c2 c |
+}
+
+<<
+  \new Staff { \instrumentOne }
+  \new Staff { \instrumentTwo }
+  \new Staff { \partcombine \instrumentOne \instrumentTwo }
+>>
+@end lilypond
+
+@subsubsubheading Uso di \partcombine col testo vocale
+
+@cindex \partcombine e testo vocale
+
+Il comando @code{\partcombine} non è progettato per funzionare col
+testo vocale; al punto che se una delle voci è nominata in modo
+esplicito per poterle assegnare del testo, l'unione delle parti
+smette di funzionare.  Tuttavia, questo risultato si può ottenere
+usando un contesto @code{NullVoice}.  Vedi @ref{Polyphony with shared lyrics}.
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{combining-two-parts-on-the-same-staff.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{changing-partcombine-texts.ly}
+
+@seealso
+Glossario Musicale:
+@rglos{a due},
+@rglosnamed{part,parte}.
+
+Guida alla notazione:
+@ref{Writing parts}.
+
+Frammenti:
+@rlsr{Simultaneous notes}.
+
+Guida al funzionamento interno:
+@rinternals{PartCombineMusic},
+@rinternals{Voice}.
+
+@knownissues
+Tutte le funzioni @code{\partcombine@dots{}} possono accettare soltanto due
+voci.
+
+Le funzioni @code{\partcombine@dots{}} non possono essere inserite all'interno
+di un blocco @code{\tuplet} o @code{\relative}.
+
+Se @code{printPartCombineTexts} è attivo e le due voci eseguono le stesse
+note @qq{in modo discontinuo} nella stessa misura, potrebbe apparire
+il testo @code{a2} più di una volta in quella misura.
+
+@code{\partcombine} sa soltanto quando una nota inizia in una voce
+(@code{Voice}); non può, ad esempio, ricordare se una nota in una
+voce è già iniziata quando combina le note già iniziate nell'altra
+voce.  Questo può portare a vari problemi inattesi, tra cui la stampa
+non corretta dei segni @qq{Solo} e @qq{Unisono}.
+
+@code{\partcombine} tiene tutti gli estensori (legature di portamento e
+di valore, forcelle, etc.) nella stessa voce, quindi se uno di questi
+estensori inizia o termina in una voce diversa potrebbe essere
+stampato incorrettamente o non essere stampato affatto.
+
+Se la funzione @code{\partcombine} non riesce a combinare le due espressioni
+musicali (ovvero quando le due voci hanno durate diverse), assegnerà alle
+voci, internamente, nomi personalizzati: rispettivamente @code{one} e
+@code{two}.  Ciò significa che se c'è un @qq{passaggio} a un contesto
+@code{Voice} nominato diversamente, gli eventi in quel contesto verranno
+ignorati.
+
+Consultare i @emph{Problemi noti e avvertimenti} in @ref{Default tablatures}
+se si usa @code{\partcombine} con l'intavolatura, e la @emph{Nota} in
+@ref{Automatic beams} se si usa la disposizione automatica delle travature.
+
+
+@node Scrivere la musica in parallelo
+@unnumberedsubsubsec Scrivere la musica in parallelo
+@translationof Writing music in parallel
+
+@cindex scrivere la musica in parallelo
+@cindex musica parallela
+@cindex parallela, musica
+@funindex \parallelMusic
+@funindex parallelMusic
+
+La musica che contiene parti diverse può essere messa in parallelo nel codice
+di input.  La funzione @code{\parallelMusic} accetta una lista contenente
+i nomi di un insieme di variabili da creare e un'espressione musicale. Il
+contenuto delle misure alternate nell'espressione diventa il valore delle
+rispettive variabili, in modo che possano essere usate successivamente per
+stampare la musica.
+
+@warning{L'uso dei controlli di battuta @code{|} è obbligatorio e le misure
+devono avere la stessa durata.}
+
+@lilypond[quote,verbatim]
+\parallelMusic #'(voiceA voiceB voiceC) {
+  % Battuta 1
+  r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' |
+  r16 e'8.~   e'4            r16 e'8.~   e'4            |
+  c'2                        c'2                        |
+
+  % Battuta 2
+  r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' |
+  r16 d'8.~   d'4            r16 d'8.~   d'4            |
+  c'2                        c'2                        |
+
+}
+\new StaffGroup <<
+  \new Staff << \voiceA \\ \voiceB >>
+  \new Staff { \clef bass \voiceC }
+>>
+@end lilypond
+
+L'uso del modo relativo è permesso.  Attenzione: il comando @code{\relative}
+non deve essere messo dentro @code{\parallelMusic}.  Le note sono relative
+alla nota precedente della voce, non a quella precedente nell'input.  In altre
+parole, le note relative di @code{voiceA} ignorano le note in @code{voiceB}.
+
+@lilypond[quote,verbatim]
+\parallelMusic #'(voiceA voiceB voiceC) {
+  % Battuta 1
+  r8 g16 c e g, c e r8 g,16 c e g, c e  |
+  r16 e8.~ e4       r16 e8.~  e4        |
+  c2                c                   |
+
+  % Battuta 2
+  r8 a,16 d f a, d f r8 a,16 d f a, d f |
+  r16 d8.~  d4       r16 d8.~  d4       |
+  c2                 c                  |
+
+ }
+\new StaffGroup <<
+  \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >>
+  \new Staff \relative c' { \clef bass \voiceC }
+>>
+@end lilypond
+
+Questo è molto utile nella musica per pianoforte. Questo esempio combina
+sezioni di quattro battute consecutive con quattro variabili:
+
+@lilypond[quote,verbatim]
+global = {
+  \key g \major
+  \time 2/4
+}
+
+\parallelMusic #'(voiceA voiceB voiceC voiceD) {
+  % Battuta 1
+  a8    b     c   d     |
+  d4          e         |
+  c16 d e fis d e fis g |
+  a4          a         |
+
+  % Battuta 2
+  e8      fis  g     a   |
+  fis4         g         |
+  e16 fis g  a fis g a b |
+  a4           a         |
+
+  % Bar 3 ...
+}
+
+\score {
+  \new PianoStaff <<
+     \new Staff {
+       \global
+       <<
+         \relative c'' \voiceA
+         \\
+         \relative c'  \voiceB
+       >>
+     }
+     \new Staff {
+       \global \clef bass
+       <<
+         \relative c \voiceC
+         \\
+         \relative c \voiceD
+       >>
+     }
+  >>
+}
+@end lilypond
+
+@seealso
+Manuale d'apprendimento:
+@rlearning{Organizzare i brani con le variabili}.
+
+Frammenti:
+@rlsr{Simultaneous notes}.
diff --git a/Documentation/it/notation/staff.itely b/Documentation/it/notation/staff.itely
new file mode 100644 (file)
index 0000000..9c0dd65
--- /dev/null
@@ -0,0 +1,1543 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
+@ignore
+    Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.17.30"
+
+@c Translators: Federico Bruni
+@c Translation checkers:
+
+@node Notazione del rigo
+@section Notazione del rigo
+@translationof Staff notation
+
+@c The line width is a bit of a hack to allow space for the
+@c  instrument names.
+@lilypondfile[quote,ragged-right,line-width=14.5\cm,staffsize=16]{staff-headword.ly}
+
+Questa sezione spiega come modificare l'aspetto del rigo, come stampare
+partiture multirigo e come aggiungere indicazioni di tempo e citazioni
+in corpo più piccolo nel rigo.
+
+@menu
+* Aspetto del rigo::
+* Modificare singoli righi::
+* Scrittura delle parti::
+@end menu
+
+
+@node Aspetto del rigo
+@subsection Aspetto del rigo
+@translationof Displaying staves
+
+Questa sezione presenta i diversi metodi per creare e raggruppare i righi.
+
+@menu
+* Istanziare nuovi righi::
+* Raggruppare i righi::
+* Gruppi di righi annidati::
+* Separare i sistemi::
+@end menu
+
+
+@node Istanziare nuovi righi
+@unnumberedsubsubsec Istanziare nuovi righi
+@translationof Instantiating new staves
+
+@cindex nuovo rigo
+@cindex inizializzazione del rigo
+@cindex creazione del rigo
+@cindex rigo, nuovo
+@cindex rigo, singolo
+@cindex rigo, percussioni
+@cindex rigo, batteria
+@cindex rigo per batteria
+@cindex rigo per percussioni
+@cindex rigo Gregoriano per trascrizione
+@cindex rigo ritmico
+@cindex rigo per intavolatura
+@cindex intavolatura
+@cindex tablatura
+
+@funindex \drummode
+@funindex drummode
+@funindex DrumStaff
+@funindex RhythmicStaff
+@funindex TabStaff
+@funindex MensuralStaff
+@funindex VaticanaStaff
+@funindex GregorianTranscriptionStaff
+
+Il @notation{rigo musicale} si crea con i comandi @code{\new} o
+@code{\context}.  Ulteriori dettagli in @ref{Creating and referencing contexts}.
+
+Il contesto di base del rigo è @code{Staff}:
+
+@lilypond[verbatim,quote,relative=2]
+\new Staff { c4 d e f }
+@end lilypond
+
+Il contesto @code{DrumStaff} crea un rigo di cinque linee impostato
+per una tipica batteria.  Ogni strumento viene mostrato con un
+simbolo diverso.  Gli strumenti si inseriscono nella modalità percussioni,
+che si attiva col comando @code{\drummode}: ogni strumento viene indicato
+con un nome.  Ulteriori dettagli in @ref{Percussion staves}.
+
+@lilypond[verbatim,quote]
+\new DrumStaff {
+  \drummode { cymc hh ss tomh }
+}
+@end lilypond
+
+@code{RhythmicStaff} crea un rigo con una sola linea che mostra
+soltanto i valori ritmici dell'input.  Le durate reali vengono
+mantenute.  Ulteriori dettagli in @ref{Showing melody rhythms}.
+
+@lilypond[verbatim,quote,relative=2]
+\new RhythmicStaff { c4 d e f }
+@end lilypond
+
+@code{TabStaff} crea un'intavolatura (o tablatura) con sei corde
+nell'accordatura standard per chitarra.  Ulteriori dettagli
+in @ref{Default tablatures}.
+
+@lilypond[verbatim,quote,relative=2]
+\new TabStaff { c4 d e f }
+@end lilypond
+
+Ci sono due contesti del rigo specifici per la notazione di musica
+antica, @code{MensuralStaff} e @code{VaticanaStaff}, descritti
+in @ref{Pre-defined contexts}.
+
+Il contesto @code{GregorianTranscriptionStaff} crea un rigo per
+il canto gregoriano moderno.  Non mostra le stanghette delle battute.
+
+@lilypond[verbatim,quote,relative=2]
+\new GregorianTranscriptionStaff { c4 d e f e d }
+@end lilypond
+
+Si possono creare nuovi contesti per un singolo rigo, come è spiegato
+dettagliatamente in @ref{Defining new contexts}.
+
+@seealso
+Glossario musicale:
+@rglosnamed{staff,rigo},
+
+Guida alla notazione:
+@ref{Creating and referencing contexts},
+@ref{Percussion staves},
+@ref{Showing melody rhythms},
+@ref{Default tablatures},
+@ref{Pre-defined contexts},
+@ref{Staff symbol},
+@ref{Gregorian chant contexts},
+@ref{Mensural contexts},
+@ref{Defining new contexts}.
+
+Frammenti:
+@rlsr{Staff notation}.
+
+Guida al funzionamento interno:
+@rinternals{Staff},
+@rinternals{DrumStaff},
+@rinternals{GregorianTranscriptionStaff},
+@rinternals{RhythmicStaff},
+@rinternals{TabStaff},
+@rinternals{MensuralStaff},
+@rinternals{VaticanaStaff},
+@rinternals{StaffSymbol}.
+
+
+@node Raggruppare i righi
+@unnumberedsubsubsec Raggruppare i righi
+@translationof Grouping staves
+
+@cindex inizio del sistema
+@cindex rigo multiplo
+@cindex delimitatori di inizio del sistema
+@cindex parentesi quadra verticale
+@cindex graffa verticale
+@cindex rigo per coro
+@cindex accollatura
+@cindex rigo per pianoforte
+@cindex gruppo di righi
+@cindex righi, gruppo di
+@cindex coro, rigo per
+@cindex pianoforte, rigo per
+@cindex sistema
+
+Esistono vari contesti per raggruppare insieme singoli righi in modo
+da formare sistemi multirigo.  Ogni contesto di raggruppamento imposta
+il comportamento delle stanghette e lo stile del segno che delimita
+l'inizio del sistema.
+
+Se non si specifica alcun contesto, vengono usate le proprietà predefinite:
+il gruppo inizia con una linea verticale e le stanghette non sono collegate.
+
+@lilypond[verbatim,quote,relative=2]
+<<
+  \new Staff { c1 c }
+  \new Staff { c1 c }
+>>
+@end lilypond
+
+Nel contesto @code{StaffGroup}, il gruppo inizia con una parentesi quadra e le
+stanghette attraversano tutti i righi.
+
+@lilypond[verbatim,quote,relative=2]
+\new StaffGroup <<
+  \new Staff { c1 c }
+  \new Staff { c1 c }
+>>
+@end lilypond
+
+Nel contesto @code{ChoirStaff}, il gruppo inizia con una parentesi quadra, ma le
+stanghette non sono collegate.
+
+@lilypond[verbatim,quote,relative=2]
+\new ChoirStaff <<
+  \new Staff { c1 c }
+  \new Staff { c1 c }
+>>
+@end lilypond
+
+Nel contesto @code{GrandStaff}, il gruppo inizia con una parentesi graffa  e
+le stanghette sono collegate da rigo a rigo.
+
+@lilypond[verbatim,quote,relative=2]
+\new GrandStaff <<
+  \new Staff { c1 c }
+  \new Staff { c1 c }
+>>
+@end lilypond
+
+Il contesto @code{PianoStaff} è identico a @code{GrandStaff}, con l'unica
+differenza che permette di mostrare il nome dello strumento direttamente.  Ulteriori
+dettagli in @ref{Instrument names}.
+
+@lilypond[verbatim,quote,relative=2]
+\new PianoStaff <<
+  \set PianoStaff.instrumentName = #"Piano"
+  \new Staff { c1 c }
+  \new Staff { c1 c }
+>>
+@end lilypond
+
+Ogni contesto per il gruppo di righi imposta la proprietà
+@code{systemStartDelimiter} su uno dei seguenti valori:
+@code{SystemStartBar}, @code{SystemStartBrace} o
+@code{SystemStartBracket}.  È presente anche un quarto delimitatore,
+@code{SystemStartSquare}, ma deve essere indicato esplicitamente.
+
+Si possono definire nuovi contesti di gruppi di rigo.  I dettagli sono
+spiegati in @ref{Defining new contexts}.
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{use-square-bracket-at-the-start-of-a-staff-group.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{display-bracket-with-only-one-staff-in-a-system.ly}
+
+@cindex formattazione mensurale
+@cindex mensurale, formattazione
+@cindex musica rinascimentale
+@cindex rinascimentale, musica
+@cindex trascrizione di musica mensurale
+@cindex musica mensurale, trascrizione di
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{mensurstriche-layout-bar-lines-between-the-staves.ly}
+
+@seealso
+Glossario musicale:
+@rglosnamed{brace,graffa},
+@rglosnamed{bracket,parentesi quadra},
+@rglosnamed{grand staff,accollatura}.
+
+Guida alla notazione:
+@ref{Instrument names},
+@ref{Defining new contexts}.
+
+Frammenti:
+@rlsr{Staff notation}.
+
+Guida al funzionamento interno:
+@rinternals{Staff},
+@rinternals{StaffGroup},
+@rinternals{ChoirStaff},
+@rinternals{GrandStaff},
+@rinternals{PianoStaff},
+@rinternals{SystemStartBar},
+@rinternals{SystemStartBrace},
+@rinternals{SystemStartBracket},
+@rinternals{SystemStartSquare}.
+
+@knownissues
+@code{PianoStaff} non accetta @code{ChordNames}.
+
+
+@node Gruppi di righi annidati
+@unnumberedsubsubsec Gruppi di righi annidati
+@translationof Nested staff groups
+
+@cindex righi annidati
+@cindex annidamento dei righi
+@cindex delimitatori di inizio del sistema annidati
+@cindex sistema, delimitatori di inizio annidati
+@cindex parentesi quadre, annidamento di
+@cindex parentesi graffe, annidamento di
+
+I contesti dei gruppi di righi possono essere annidati fino a qualsiasi
+livello.  In questo caso, ogni contesto inferiore crea una nuova parentesi
+accanto alla parentesi del gruppo superiore.
+
+@lilypond[verbatim,quote,relative=2]
+\new StaffGroup <<
+  \new Staff { c2 c | c2 c }
+  \new StaffGroup <<
+    \new Staff { g2 g | g2 g }
+    \new StaffGroup \with {
+      systemStartDelimiter = #'SystemStartSquare
+    }
+    <<
+      \new Staff { e2 e | e2 e }
+      \new Staff { c2 c | c2 c }
+    >>
+  >>
+>>
+@end lilypond
+
+Si possono definire nuovi gruppi di righi annidati.  Ulteriori dettagli
+in @ref{Defining new contexts}.
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{nesting-staves.ly}
+
+@seealso
+Guida alla notazione:
+@ref{Grouping staves},
+@ref{Instrument names},
+@ref{Defining new contexts}.
+
+Frammenti:
+@rlsr{Staff notation}.
+
+Guida al funzionamento interno:
+@rinternals{StaffGroup},
+@rinternals{ChoirStaff},
+@rinternals{SystemStartBar},
+@rinternals{SystemStartBrace},
+@rinternals{SystemStartBracket},
+@rinternals{SystemStartSquare}.
+
+
+@node Separare i sistemi
+@unnumberedsubsubsec Separare i sistemi
+@translationof Separating systems
+
+@cindex segno separatore del sistema
+@cindex sistema, segno separatore
+
+Se il numero di sistemi per pagina cambia di pagina in pagina, è consuetudine
+separare i sistemi con un segno separatore.  Per impostazione predefinita
+questo segno è disattivo, ma può essere attivato con un'opzione
+in @code{\paper}.
+
+@c \book is required here to display the system separator
+@c ragged-right is required as there are two systems
+@lilypond[verbatim,quote,ragged-right]
+\book {
+  \score {
+    \new StaffGroup <<
+      \new Staff {
+        \relative c'' {
+          c4 c c c
+          \break
+          c4 c c c
+        }
+      }
+      \new Staff {
+        \relative c'' {
+          c4 c c c
+          \break
+          c4 c c c
+        }
+      }
+    >>
+  }
+  \paper {
+    system-separator-markup = \slashSeparator
+    % i seguenti comandi servono soltanto alla formattazione di questa documentazione
+    paper-width = 100\mm
+    paper-height = 100\mm
+    tagline = ##f
+  }
+}
+@end lilypond
+
+@seealso
+Guida alla notazione:
+@ref{Page layout}.
+
+Frammenti:
+@rlsr{Staff notation}.
+
+
+@node Modificare singoli righi
+@subsection Modificare singoli righi
+@translationof Modifying single staves
+
+Questa sezione spiega come modificare gli attributi specifici di un
+rigo, per esempio il numero di linee o la dimensione del rigo.  Vengono
+descritti anche i metodi per iniziare e finire un rigo e per impostare
+le sezioni ossia.
+
+@menu
+* Simbolo del rigo::
+* Righi ossia::
+* Nascondere i righi::
+@end menu
+
+
+@node Simbolo del rigo
+@unnumberedsubsubsec Simbolo del rigo
+@translationof Staff symbol
+
+@cindex simbolo del rigo
+@cindex rigo, simbolo del
+@cindex StaffSymbol
+@cindex linee del rigo, fermare e avviare
+@cindex linee del rigo, modificare
+@cindex tagli addizionali
+@cindex tagli addizionali, funzionamento interno
+@cindex tagli addizionali, modificare
+
+@funindex \startStaff
+@funindex startStaff
+@funindex \stopStaff
+@funindex stopStaff
+
+I comandi @code{\stopStaff} e @code{\startStaff} servono a fermare o
+(ri)avviare le linee del rigo, per impedire che appaiano in un punto
+della partitura.
+
+@lilypond[verbatim,quote,relative=2]
+\stopStaff f4 d \startStaff g, e
+f'4 d \stopStaff g, e
+f'4 d \startStaff g, e
+@end lilypond
+
+@predefined
+@code{\startStaff},
+@code{\stopStaff}.
+@endpredefined
+
+Le linee di un rigo appartengono all'oggetto @code{StaffSymbol} (che comprende
+i tagli addizionali) e si possono modificare tramite le proprietà  di
+@code{StaffSymbol}; però queste modifiche devono essere fatte prima che
+il rigo sia (ri)avviato.
+
+Si può cambiare il numero di linee del rigo:
+
+@lilypond[verbatim,quote,relative=2]
+f4 d \stopStaff
+\override Staff.StaffSymbol.line-count = #2
+\startStaff g, e |
+
+f'4 d \stopStaff
+\revert Staff.StaffSymbol.line-count
+\startStaff g, e |
+@end lilypond
+
+Si può cambiare anche la posizione di ogni linea del rigo.  Un elenco di
+numeri definisce la posizione di ogni linea.  I valori consueti sono
+@code{0}@tie{}per la linea centrale e @code{(-4@tie{}-2@tie{}0@tie{}2@tie{}4)}
+per le altre.  La linea del rigo appare solo se è presente il suo valore,
+quindi questo comando permette di variare anche il numero delle linee,
+oltre alla loro posizione.
+
+@lilypond[verbatim,quote,relative=2]
+f4 d \stopStaff
+\override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
+\startStaff g, e |
+f'4 d \stopStaff
+\override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
+\startStaff g, e
+@end lilypond
+
+Per conservare le tipiche direzioni dei gambi (nella metà inferiore del
+rigo i gambi puntano in su, mentre in quella superiore sono rivolti in giù),
+occorre allineare la linea centrale (o lo spazio) del rigo personalizzato
+alla posizione della linea centrale normale (0).  Potrà essere necessario
+regolare la posizione della chiave e del Do@tie{}centrale per adattarsi
+alle nuove linee.  Si veda @ref{Clef}.
+
+Si può modificare lo spessore della linea del rigo.  Per impostazione predefinita,
+questa modifica ha effetto anche sui tagli addizionali e sui gambi.
+
+@lilypond[verbatim,quote,relative=2]
+\new Staff \with {
+  \override StaffSymbol.thickness = #3
+}
+{ f4 d g, e }
+@end lilypond
+
+È anche possibile impostare lo spessore dei tagli addizionali in modo
+indipendente dalle linee del rigo.
+
+@lilypond[verbatim,quote,relative=2]
+\new Staff \with {
+  \override StaffSymbol.thickness = #2
+  \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
+}
+{ f'4 a, a,, f }
+@end lilypond
+
+@noindent
+Il primo valore viene moltiplicato per lo spessore della linea del rigo, il
+secondo per la spaziatura del rigo; la somma dei due valori definisce il
+nuovo valore dello spessore del taglio addizionale.
+
+Si possono modificare le posizioni verticali dei tagli addizionali:
+
+@lilypond[verbatim,quote,relative=2]
+\new Staff \with {
+  \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
+}
+{ f'4 a, a,, f }
+@end lilypond
+
+Si possono far apparire ulteriori tagli addizionali sopra o sotto le
+teste delle note, a seconda della posizione corrente relativa alle
+altre teste, anch'esse con i propri tagli addizionali.
+
+@lilypond[verbatim,quote,relative=2]
+\new Staff \with {
+  \override StaffSymbol.ledger-extra = #4
+}
+{ f'4 a, d, f, }
+@end lilypond
+
+Si possono far apparire i tagli addizionali anche dentro il rigo quando servono
+delle linee personalizzate.   L'esempio mostra la posizione predefinita dei
+tagli addizionali quando la proprietà @code{ledger-position} è impostata e
+quando non lo è.  Nell'esempio il comando @code{\stopStaff} serve ad annullare
+il comando @code{\override} per l'oggetto @code{StaffSymbol}.
+
+@lilypond[verbatim,quote,relative=1]
+\override Staff.StaffSymbol.line-positions = #'(-8 0 2 4)
+d4 e f g
+\stopStaff
+\startStaff
+\override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
+d4 e f g
+@end lilypond
+
+Si può cambiare la distanza tra le linee del rigo.  Tale modifica ha
+effetto anche sulla spaziatura della linea.
+
+@lilypond[verbatim,quote,relative=2]
+\new Staff \with {
+  \override StaffSymbol.staff-space = #1.5
+}
+{ f'4 d, g, e, }
+@end lilypond
+
+@snippets
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{making-some-staff-lines-thicker-than-the-others.ly}
+
+@seealso
+Glossario musicale:
+@rglosnamed{line,linea},
+@rglosnamed{ledger line,taglio addizionale},
+@rglosnamed{staff,rigo (o pentagramma)}.
+
+Guida alla notazione:
+@ref{Clef}.
+
+Frammenti:
+@rlsr{Staff notation}.
+
+Guida al funzionamento interno:
+@rinternals{StaffSymbol},
+@rinternals{staff-symbol-interface}.
+
+
+@node Righi ossia
+@unnumberedsubsubsec Righi ossia
+@translationof Ossia staves
+
+@cindex ossia
+@cindex rigo temporaneo
+@cindex rigo, ridimensionamento del
+@cindex ridimensionamento dei righi
+
+@funindex \startStaff
+@funindex startStaff
+@funindex \stopStaff
+@funindex stopStaff
+
+I righi @notation{ossia} si possono creare aggiungendo un nuovo rigo
+simultaneo nel punto giusto:
+
+@lilypond[verbatim,quote]
+\new Staff \relative c'' {
+  c4 b d c
+  <<
+    { c4 b d c }
+    \new Staff { e4 d f e }
+  >>
+  c4 b c2
+}
+@end lilypond
+
+@noindent
+Tuttavia, questo esempio non produce quel che normalmente si desidera.  Per
+creare righi ossia che siano sopra il rigo originale, non abbiano indicazione
+di tempo né chiave e abbiano un tipo di carattere più piccolo, sono necessarie
+delle modifiche manuali.  Il Manuale d'apprendimento descrive una tecnica
+specifica per ottenere questo risultato, a partire da
+@rlearning{Annidare le espressioni musicali}.
+
+L'esempio seguente usa la proprietà @code{alignAboveContext} per allineare
+il rigo ossia.  Questo metodo conviene quando sono necessari solo pochi
+righi ossia.
+
+@lilypond[verbatim,quote]
+\new Staff = "main" \relative c'' {
+  c4 b d c
+  <<
+    { c4 b d c }
+
+    \new Staff \with {
+      \remove "Time_signature_engraver"
+      alignAboveContext = #"main"
+      fontSize = #-3
+      \override StaffSymbol.staff-space = #(magstep -3)
+      \override StaffSymbol.thickness = #(magstep -3)
+      firstClef = ##f
+    }
+    { e4 d f e }
+  >>
+  c4 b c2
+}
+@end lilypond
+
+Se si hanno molti righi ossia isolati, è meglio creare un contesto
+@code{Staff} vuoto con un @emph{identificativo del contesto} specifico; i righi
+ossia possono essere creati @emph{chiamando} questo contesto e usando
+@code{\startStaff} e @code{\stopStaff} nei punti richiesti.  I vantaggi
+di questo metodo sono più evidenti se il brano è più lungo del seguente
+esempio.
+
+@lilypond[verbatim,quote,ragged-right]
+<<
+  \new Staff = "ossia" \with {
+    \remove "Time_signature_engraver"
+    \hide Clef
+    fontSize = #-3
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
+  }
+  { \stopStaff s1*6 }
+
+  \new Staff \relative c' {
+    c4 b c2
+    <<
+      { e4 f e2 }
+      \context Staff = "ossia" {
+        \startStaff e4 g8 f e2 \stopStaff
+      }
+    >>
+    g4 a g2 \break
+    c4 b c2
+    <<
+      { g4 a g2 }
+      \context Staff = "ossia" {
+        \startStaff g4 e8 f g2 \stopStaff
+      }
+    >>
+    e4 d c2
+  }
+>>
+@end lilypond
+
+
+Come alternativa, si può usare il comando @code{\Staff \RemoveEmptyStaves}
+per creare i righi ossia.  Questo metodo conviene quando i righi ossia
+si trovano subito dopo un'interruzione di linea.  Ulteriori informazioni
+su @code{\Staff \RemoveEmptyStaves} si trovano in @ref{Hiding staves}.
+
+@lilypond[verbatim,quote,ragged-right]
+<<
+  \new Staff = "ossia" \with {
+    \remove "Time_signature_engraver"
+    \hide Clef
+    fontSize = #-3
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
+  } \relative c'' {
+    R1*3
+    c4 e8 d c2
+  }
+  \new Staff \relative c' {
+    c4 b c2
+    e4 f e2
+    g4 a g2 \break
+    c4 b c2
+    g4 a g2
+    e4 d c2
+  }
+>>
+
+\layout {
+  \context {
+    \Staff \RemoveEmptyStaves
+    \override VerticalAxisGroup.remove-first = ##t
+  }
+}
+@end lilypond
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{vertically-aligning-ossias-and-lyrics.ly}
+
+@seealso
+Glossario musicale:
+@rglos{ossia},
+@rglosnamed{staff,rigo (pentagramma)},
+@rglosnamed{Frenched staff,rigo temporaneo}.
+
+Manuale d'apprendimento:
+@rlearning{Annidare le espressioni musicali},
+@rlearning{Dimensione degli oggetti},
+@rlearning{Lunghezza e spessore degli oggetti}.
+
+Guida alla notazione:
+@ref{Hiding staves}.
+
+Frammenti:
+@rlsr{Staff notation}.
+
+Guida al funzionamento interno:
+@rinternals{StaffSymbol}.
+
+
+@node Nascondere i righi
+@unnumberedsubsubsec Nascondere i righi
+@translationof Hiding staves
+
+@cindex partitura senza i righi vuoti
+@cindex rigo temporaneo
+@cindex rigo, nascondere
+@cindex rigo vuoto
+@cindex nascondere i righi
+
+@funindex \RemoveEmptyStaves
+@funindex Staff_symbol_engraver
+@funindex \stopStaff
+@funindex stopStaff
+
+
+Le linee del rigo si possono nascondere togliendo l'incisore
+@code{Staff_symbol_engraver} dal contesto @code{Staff}.  Altrimenti
+si può usare @code{\stopStaff}.
+
+@lilypond[verbatim,quote]
+\new Staff \with {
+  \remove "Staff_symbol_engraver"
+}
+\relative c''' { a8 f e16 d c b a2 }
+@end lilypond
+
+
+I righi vuoti si possono nascondere inserendo il comando
+@code{\Staff \RemoveEmptyStaves} nel blocco @code{\layout}.  Nelle
+partiture per orchestra, questo stile è noto come @q{Partitura
+alla francese}.  Questo comando nasconde e toglie tutti i righi
+vuoti di una partitura eccetto quelli nel primo sistema.
+
+@warning{Un rigo viene considerato vuoto quando contiene soltanto  pause
+multiple,  pause, salti, pause spaziatrici o una combinazione di questi
+elementi.}
+
+@lilypond[verbatim,quote,ragged-right]
+\layout {
+  \context {
+    \Staff \RemoveEmptyStaves
+  }
+}
+
+\relative c' <<
+  \new Staff {
+    e4 f g a \break
+    b1 \break
+    a4 b c2
+  }
+  \new Staff {
+    c,4 d e f \break
+    R1 \break
+    f4 g c,2
+  }
+>>
+@end lilypond
+
+@cindex ossia
+
+@noindent
+@code{\Staff \RemoveEmptyStaves} si può usare anche per creare sezioni ossia
+per un rigo.  I dettagli si trovano in @ref{Ossia staves}.
+
+@cindex nascondere i righi antichi
+@cindex nascondere i righi ritmici
+
+@funindex \RemoveEmptyStaves
+
+Per nascondere i righi vuoti nei contesti della musica antica si può usare
+il comando @code{\VaticanaStaff \RemoveEmptyStaves}.  Analogalmente,
+@code{\RhythmicStaff \RemoveEmptyStaves} permette di nascondere i contesti
+@code{RhythmicStaff} vuoti.
+
+
+@predefined
+@code{\Staff \RemoveEmptyStaves},
+@code{\VaticanaStaff \RemoveEmptyStaves},
+@code{\RhythmicStaff \RemoveEmptyStaves}.
+@endpredefined
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{removing-the-first-empty-line.ly}
+
+@seealso
+Glossario musicale:
+@rglosnamed{Frenched staff,rigo temporaneo}.
+
+Manuale d'apprendimento:
+@rlearning{Visibilità e colore degli oggetti}.
+
+Guida alla notazione:
+@ref{Changing context default settings},
+@ref{Staff symbol},
+@ref{Ossia staves},
+@ref{Hidden notes},
+@ref{Invisible rests},
+@ref{Visibility of objects}.
+
+Frammenti:
+@rlsr{Staff notation}.
+
+Guida al funzionamento interno:
+@rinternals{ChordNames},
+@rinternals{FiguredBass},
+@rinternals{Lyrics},
+@rinternals{Staff},
+@rinternals{VerticalAxisGroup},
+@rinternals{Staff_symbol_engraver}.
+
+@knownissues
+Se si toglie l'incisore @code{Staff_symbol_engraver} vengono nascoste
+anche le stanghette.  Se si forza la visibilità delle stanghette,
+potrebbero verificarsi degli errori di formattazione.  In questo caso,
+conviene usare i seguenti comandi invece di togliere l'incisore:
+
+@example
+\omit StaffSymbol
+\override NoteHead.no-ledgers = ##t
+@end example
+
+Per i problemi noti e gli avvertimenti relativi a
+@code{\Staff \RemoveEmptyStaves} si veda
+@ref{Changing context default settings}.
+
+
+@node Scrittura delle parti
+@subsection Scrittura delle parti
+@translationof Writing parts
+
+Questa sezione spiega come inserire in una partitura le indicazioni di
+tempo e i nomi degli strumenti.  Mostra anche come citare altre voci
+e come formattare le citazioni in corpo più piccolo.
+
+@menu
+* Nomi degli strumenti::
+* Citare altre voci::
+* Formattazione delle notine::
+@end menu
+
+@node Nomi degli strumenti
+@unnumberedsubsubsec Nomi degli strumenti
+@translationof Instrument names
+
+@cindex nomi degli strumenti
+@cindex strumenti,  nomi degli
+@cindex nomi degli strumenti abbreviati
+
+I nomi degli strumenti possono essere fatti apparire, alla sinistra dei righi,
+nei contesti @code{Staff}, @code{PianoStaff}, @code{StaffGroup}, @code{GrandStaff}
+e @code{ChoirStaff}.  Il valore di @code{instrumentName} viene usato per il
+primo rigo e quello di @code{shortInstrumentName} per tutti i righi successivi.
+
+@lilypond[verbatim,quote,ragged-right,relative=1]
+\new Staff \with {
+  instrumentName = #"Violin "
+  shortInstrumentName = #"Vln. "
+}
+{ c4.. g'16 c4.. g'16 \break | c1 }
+@end lilypond
+
+@cindex nomi degli strumenti, complessi
+@cindex strumenti, nomi complessi
+
+Si può usare @code{\markup} per creare nomi più complessi:
+
+@lilypond[verbatim,quote,relative=2]
+\new Staff \with {
+  instrumentName = \markup {
+    \column { "Clarinetti"
+      \line { "in B" \smaller \flat }
+    }
+  }
+}
+{ c4 c,16 d e f g2 }
+@end lilypond
+
+@cindex nomi degli strumenti, centrare
+
+Se due o più contesti del rigo sono raggruppati insieme, i nomi degli strumenti,
+sia quello normale che quello abbreviato, vengono centrati automaticamente.
+Per allineare al centro i nomi degli strumenti che vanno a capo, occorre
+usare @code{\center-column}:
+
+@lilypond[verbatim,quote,indent=1.5\cm,relative=2]
+<<
+  \new Staff \with {
+    instrumentName = #"Flute"
+  }
+  { f2 g4 f }
+  \new Staff \with {
+    instrumentName = \markup {
+      \center-column { "Clarinet"
+        \line { "in B" \smaller \flat }
+      }
+    }
+  }
+  { c4 b c2 }
+>>
+@end lilypond
+
+@funindex indent
+@funindex short-indent
+
+Tuttavia, se i nomi degli strumenti sono lunghi, potranno essere centrati
+solo aumentando i valori di @code{indent} e @code{short-indent}.
+Ulteriori dettagli su queste impostazioni si trovano in
+@ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents}.
+
+@lilypond[verbatim,quote,ragged-right]
+\relative c'' {
+  <<
+    \new Staff \with {
+      instrumentName = #"Alto Flute in G"
+      shortInstrumentName = #"Flt."
+    }
+    {
+      f2 g4 f \break
+      g4 f g2
+    }
+    \new Staff \with {
+      instrumentName = #"Clarinet"
+      shortInstrumentName = #"Clar."
+    }
+    {
+      c,4 b c2 \break
+      c2 b4 c
+    }
+  >>
+}
+
+\layout {
+  indent = 3.0\cm
+  short-indent = 1.5\cm
+}
+@end lilypond
+
+@cindex nomi degli strumenti, aggiungerli ad altri contesti
+
+Per impostare i nomi degli strumenti in altri contesti (come @code{ChordNames} o
+@code{FiguredBass}), si deve aggiungere l'incisore @code{Instrument_name_engraver}
+a quel contesto.  Ulteriori dettagli in @ref{Modifying context plug-ins}.
+
+@cindex nomi degli strumenti, modifica
+@cindex modificare i nomi degli strumenti
+
+@code{shortInstrumentName} può essere cambiato all'interno di un brano, mentre
+di @code{instrumentName} apparirà solo la prima definizione e le modifiche
+successive saranno ignorate:
+
+@lilypond[verbatim,quote,ragged-right,relative=1]
+\new Staff \with {
+  instrumentName = #"Flute"
+  shortInstrumentName = #"Flt."
+}
+{
+  c1 c c c \break
+  c1 c c c \break
+  \set Staff.instrumentName = #"Clarinet"
+  \set Staff.shortInstrumentName = #"Clt."
+  c1 c c c \break
+  c1 c c c \break
+}
+@end lilypond
+
+@cindex cambio di strumento
+@cindex strumento, cambio di
+
+@funindex \addInstrumentDefinition
+@funindex addInstrumentDefinition
+@funindex \instrumentSwitch
+@funindex instrumentSwitch
+
+Se serve un @emph{cambio} di strumento, si può usare
+@code{\addInstrumentDefinition} insieme a
+@code{\instrumentSwitch} per creare una lista dettagliata delle
+modifiche necessarie per il cambio.  Il comando
+@code{\addInstrumentDefinition} prende due argomenti: una stringa
+testuale per identificare lo strumento, e una lista di associazione
+delle proprietà di contesto e dei valori da usare.
+Deve trovarsi nell'ambito di più alto livello.  Per dichiarare il cambio di
+strumento, si usa il comando @code{\instrumentSwitch}, all'interno
+dell'espressione musicale, :
+
+@lilypond[verbatim,quote,ragged-right]
+\addInstrumentDefinition #"contrabassoon"
+  #`((instrumentTransposition . ,(ly:make-pitch -1 0 0))
+     (shortInstrumentName . "Cbsn.")
+     (clefGlyph . "clefs.F")
+     (middleCPosition . 6)
+     (clefPosition . 2)
+     (instrumentCueName . ,(make-bold-markup "cbsn."))
+     (midiInstrument . "bassoon"))
+
+\new Staff \with {
+  instrumentName = #"Bassoon"
+}
+\relative c' {
+  \clef tenor
+  \compressFullBarRests
+  c2 g'
+  R1*16
+  \instrumentSwitch "contrabassoon"
+  c,,2 g \break
+  c,1 ~ | c1
+}
+@end lilypond
+
+@seealso
+Guida alla notazione:
+@ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents},
+@ref{Modifying context plug-ins}.
+
+Frammenti:
+@rlsr{Staff notation}.
+
+Guida al funzionamento interno:
+@rinternals{InstrumentName},
+@rinternals{PianoStaff},
+@rinternals{Staff}.
+
+
+@node Citare altre voci
+@unnumberedsubsubsec Citare altre voci
+@translationof Quoting other voices
+
+@cindex citare le voci
+@cindex voci, citare le
+@cindex frammenti, citare i
+@cindex notine
+@cindex note in corpo più piccolo
+
+@funindex \addQuote
+@funindex addQuote
+@funindex \quoteDuring
+@funindex quoteDuring
+@funindex \transposition
+@funindex transposition
+
+È molto comune che una voce usi le stesse note di un'altra voce.  Per esempio,
+il primo e il secondo violino che suonano la stessa frase durante un particolare
+passaggio del brano.  Per evitare di reinserire la musica di nuovo per la
+seconda voce, si può far sì che una voce @emph{citi} l'altra.
+
+Il comando @code{\addQuote}, usato nell'ambito di più alto livello, definisce
+un flusso musicale da cui poter citare i frammenti.
+
+Il comando @code{\quoteDuring} serve a indicare il punto in cui inizia la
+citazione.  È seguito da due argomenti: il nome della voce citata, come è
+definito da @code{\addQuote}, e un'espressione musicale per la durata
+della citazione.
+
+@lilypond[verbatim,quote]
+fluteNotes = \relative c'' {
+  a4 gis g gis | b4^"quoted" r8 ais\p a4( f)
+}
+
+oboeNotes = \relative c'' {
+  c4 cis c b \quoteDuring #"flute" { s1 }
+}
+
+\addQuote "flute" { \fluteNotes }
+
+\score {
+  <<
+    \new Staff \with { instrumentName = "Flute" } \fluteNotes
+    \new Staff \with { instrumentName = "Oboe" } \oboeNotes
+  >>
+}
+@end lilypond
+
+Se l'espressione musicale usata in @code{\quoteDuring} contiene note invece
+di pause spaziatrici o multiple, la citazione apparirà in forma polifonica
+e potrebbe causare risultati indesiderati.
+
+@lilypond[verbatim,quote]
+fluteNotes = \relative c'' {
+  a4 gis g gis | b4^"quoted" r8 ais\p a4( f)
+}
+
+oboeNotes = \relative c'' {
+  c4 cis c b \quoteDuring #"flute" { e4 r8 ais b4 a }
+}
+
+\addQuote "flute" { \fluteNotes }
+
+\score {
+  <<
+    \new Staff \with { instrumentName = "Flute" } \fluteNotes
+    \new Staff \with { instrumentName = "Oboe" } \oboeNotes
+  >>
+}
+@end lilypond
+
+Il comando @code{\quoteDuring} usa le impostazioni @code{\transposition} sia
+della parte citata sia di quella che cita per produrre delle note per la parte
+che cita che abbiano la stessa altezza di quelle nella parte citata.
+
+@lilypond[verbatim,quote]
+clarinetNotes = \relative c'' {
+  \transposition bes
+  \key d \major
+  b4 ais a ais | cis4^"quoted" r8 bis\p b4( f)
+}
+
+oboeNotes = \relative c'' {
+  c4 cis c b \quoteDuring #"clarinet" { s1 }
+}
+
+\addQuote "clarinet" { \clarinetNotes }
+
+
+\score {
+  <<
+    \new Staff \with { instrumentName = "Clarinet" } \clarinetNotes
+    \new Staff \with { instrumentName = "Oboe" } \oboeNotes
+  >>
+}
+@end lilypond
+
+@cindex note-event
+@cindex articulation-event
+@cindex dynamic-event
+@cindex rest-event
+@cindex slur-event
+@cindex crescendo-event
+
+@funindex quotedEventTypes
+@funindex quotedCueEventTypes
+
+La musica citata include tutte le articolazioni, dinamiche, annotazioni, etc.
+presenti nel frammento citato.  È possibile scegliere quali di questi oggetti
+far apparire usando la proprietà di contesto @code{quotedEventTypes}.
+
+@lilypond[verbatim,quote]
+fluteNotes = \relative c'' {
+  a2 g2 |
+  b4\<^"quoted" r8 ais a4\f( c->)
+ }
+
+oboeNotes = \relative c'' {
+  c2. b4 |
+  \quoteDuring #"flute" { s1 }
+}
+
+\addQuote "flute" { \fluteNotes }
+
+\score {
+  <<
+    \set Score.quotedEventTypes = #'(note-event articulation-event
+                                     crescendo-event rest-event
+                                     slur-event dynamic-event)
+    \new Staff \with { instrumentName = "Flute" } \fluteNotes
+    \new Staff \with { instrumentName = "Oboe" } \oboeNotes
+  >>
+ }
+@end lilypond
+
+Le citazioni possono anche essere contrassegnate; si veda @ref{Using tags}.
+
+@seealso
+Guida alla notazione:
+@ref{Instrument transpositions},
+@ref{Using tags}.
+
+File installati:
+@file{scm/define-event-classes.scm}.
+
+Frammenti:
+@rlsr{Staff notation}.
+
+Guida al funzionamento interno:
+@rinternals{Music classes},
+@rinternals{QuoteMusic},
+@rinternals{Voice}.
+
+@knownissues
+Solo il contenuto della prima voce in un comando @code{\addQuote}
+sarà preso in considerazione per la citazione; quindi se l'espressione
+musicale contiene comandi @code{\new} o @code{\context Voice}, il loro
+contenuto non verrà citato.  La citazione degli abbellimenti non è
+supportata e potrebbe causare il crash di LilyPond; la citazione di
+terzine annidate potrebbe produrre una notazione mediocre.
+
+
+@node Formattazione delle notine
+@unnumberedsubsubsec Formattazione delle notine
+@translationof Formatting cue notes
+
+@cindex notine
+@cindex note in corpo più piccolo
+@cindex frammenti
+@cindex notine, formattare le
+@cindex formattare le notine
+@cindex voci, citare le
+
+
+@funindex \cueDuring
+@funindex cueDuring
+@funindex \cueClef
+@funindex cueClef
+@funindex \cueDuringWithClef
+@funindex cueDuringWithClef
+@funindex \quoteDuring
+@funindex quoteDuring
+
+@cindex note più piccole
+@cindex CueVoice
+
+Il modo più semplice per formattare le notine è creare esplicitamente un
+contesto @code{CueVoice} all'interno della parte.
+
+@lilypond[verbatim,relative=1]
+R1
+<<
+  { e2\rest r4. e8 }
+  \new CueVoice {
+    \stemUp d'8^"flute" c d e fis2
+  }
+>>
+d,4 r a r
+@end lilypond
+
+Si può usare il comando @code{\cueClef} all'interno di un contesto
+@code{CueVoice} esplicito se è richiesto un cambiamento di chiave; in
+questo modo la chiave apparirà nella dimensione giusta per le notine.
+Si può poi usare il comando @code{\cueClefUnset} per tornare alla chiave
+originale, di nuovo nella dimensione giusta.
+
+@lilypond[verbatim,noragged-right,relative=1]
+\clef "bass"
+R1
+<<
+  { e2\rest r4. \cueClefUnset e,8 }
+  \new CueVoice {
+    \cueClef "treble" \stemUp d''8^"flute" c d e fis2
+  }
+>>
+d,,4 r a r
+@end lilypond
+
+I comandi @code{\cueClef} e @code{\cueClefUnset} si possono usare anche
+senza un esplicito contesto @code{CueVoice}.
+
+@lilypond[verbatim,noragged-right,relative=1]
+\clef "bass"
+R1
+\cueClef "treble"
+d'8^"flute" c d e fis2
+\cueClefUnset
+d,,4 r a r
+@end lilypond
+
+Per posizionamenti complessi delle notine, per esempio includere la
+trasposizione o inserire delle notine da varie sorgenti musicali, si
+possono usare i comandi @code{\cueDuring} o @code{\cueDuringWithClef}.  Questi
+sono delle varianti più specializzate di @code{\quoteDuring}, introdotto in @ref{Quoting other voices}
+nella sezione precedente.
+
+La sintassi è:
+
+@example
+\cueDuring #@var{nomecitazione} #@var{direzione} #@var{musica}
+@end example
+
+e
+
+@example
+\cueDuringWithClef #@var{nomecitazione} #@var{direzione} #@var{chiave} #@var{musica}
+@end example
+
+La musica delle misure che corrispondono a @code{@var{nomecitazione}}
+viene aggiunta in un contesto @code{CueVoice} e si colloca in simultanea
+con @code{@var{musica}}, creando quindi una situazione polifonica.  La
+@code{@var{direzione}} prende l'argomento @code{UP} o @code{DOWN}, e
+corrisponde alla prima e alla seconda voce rispettivamente, determinando
+come le notine appaiono in relazione all'altra voce.
+
+@lilypond[verbatim,quote]
+fluteNotes = \relative c'' {
+  r2. c4 | d8 c d e fis2 | g2 d |
+}
+
+oboeNotes = \relative c'' {
+  R1
+  \new CueVoice { \set instrumentCueName = "flute" }
+  \cueDuring #"flute" #UP { R1 }
+  g2 c,
+}
+
+\addQuote "flute" { \fluteNotes }
+
+\new Staff {
+  \oboeNotes
+}
+@end lilypond
+
+@noindent
+
+
+È possibile controllare quali aspetti della musica vengono citati con
+@code{\cueDuring} impostando la proprietà @code{quotedCueEventTypes}.  Il
+suo valore predefinito è @code{'(note-event rest-event
+tie-event beam-event tuplet-span-event)}, che significa che vengono citati
+solo note, pause, legature di valore, travature e gruppi irregolari, ma
+non le articolazioni, le indicazioni dinamiche, il testo a margine, etc.
+
+@warning{Quando una voce inizia con @code{\cueDuring}, come
+nell'esempio seguente, il contesto @code{Voice} deve essere dichiarato
+esplicitamente, altrimenti l'intera espressione musicale appartiene al
+contesto @code{CueVoice}.}
+
+@lilypond[verbatim,quote]
+oboeNotes = \relative c'' {
+  r2 r8 d16(\f f e g f a)
+  g8 g16 g g2.
+}
+\addQuote "oboe" { \oboeNotes }
+
+\new Voice \relative c'' {
+  \set Score.quotedCueEventTypes = #'(note-event rest-event tie-event
+                                      beam-event tuplet-span-event
+                                      dynamic-event slur-event)
+  \cueDuring #"oboe" #UP { R1 }
+  g2 c,
+}
+@end lilypond
+
+Il nome dello strumento che suona la citazione si imposta con la proprietà
+@code{instrumentCueName} in un contesto @code{CueVoice} temporaneo.  Il
+posizionamento e lo stile di @code{instrumentCueName} è regolato dall'oggetto
+@code{\instrumentSwitch}, vedi @ref{Instrument names}.  Se le citazioni in corpo
+più piccolo richiedono un cambio di chiave, si può fare manualmente ma anche
+il ripristino della chiave originale dovrà essere fatto manualmente al termine
+delle citazioni.
+
+@lilypond[verbatim,quote]
+fluteNotes = \relative c'' {
+  r2. c4 d8 c d e fis2 g2 d2
+}
+
+bassoonNotes = \relative c {
+  \clef bass
+  R1
+  \clef treble
+  \new CueVoice { \set instrumentCueName = "flute" }
+  \cueDuring #"flute" #UP { R1 }
+  \clef bass
+  g4. b8 d2
+}
+
+\addQuote "flute" { \fluteNotes }
+
+\new Staff {
+  \bassoonNotes
+}
+@end lilypond
+
+Altrimenti si può usare la funzione @code{\cueDuringWithClef}.   Questo comando
+prende un ulteriore argomento per specificare il cambio di chiave da usare
+per le citazioni in corpo più piccolo ma mostrerà automaticamente la chiave originale appena le
+citazioni sono finite.
+
+@lilypond[verbatim,quote]
+fluteNotes = \relative c'' {
+  r2. c4 d8 c d e fis2 g2 d2
+}
+
+bassoonNotes = \relative c {
+  \clef bass
+  R1
+  \new CueVoice { \set instrumentCueName = "flute" }
+  \cueDuringWithClef #"flute" #UP #"treble" { R1 }
+  g4. b8 d2
+}
+
+\addQuote "flute" { \fluteNotes }
+
+\new Staff {
+  \bassoonNotes
+}
+@end lilypond
+
+@funindex \transposedCueDuring
+@funindex transposedCueDuring
+
+Come @code{\quoteDuring}, @code{\cueDuring} prende in considerazione la
+trasposizione degli strumenti.  Le citazioni in corpo più piccolo vengono mostrate nelle altezze
+necessarie allo strumento che riprende la citazione per riprodurre gli
+stessi suoni dello strumento citato.
+
+Per trasporre le citazioni in corpo più piccolo in modo diverso, si usa
+@code{\transposedCueDuring}.  Questo comando prende un ulteriore
+argomento per specificare (in modalità assoluta) l'altezza da usare nella partitura
+per rappresentare il Do centrale in intonazione reale.  È utile nel caso di citazioni
+da uno strumento che ha un registro completamente diverso.
+
+@lilypond[verbatim,quote]
+piccoloNotes = \relative c''' {
+  \clef "treble^8"
+  R1
+  c8 c c e g2
+  c4 g g2
+}
+
+bassClarinetNotes = \relative c' {
+  \key d \major
+  \transposition bes,
+  d4 r a r
+  \transposedCueDuring #"piccolo" #UP d { R1 }
+  d4 r a r
+}
+
+\addQuote "piccolo" { \piccoloNotes }
+
+<<
+  \new Staff \piccoloNotes
+  \new Staff \bassClarinetNotes
+>>
+@end lilypond
+
+@cindex togliere le citazioni in corpo più piccolo
+@cindex citazioni in corpo più piccolo, togliere le
+
+@funindex \killCues
+@funindex killCues
+@funindex \addInstrumentDefinition
+@funindex addInstrumentDefinition
+
+Il comando @code{\killCues} toglie le citazioni in corpo più piccolo da un'espressione
+musicale, in modo che la stessa espressione musicale possa essere
+usata per produrre sia la parte strumentale con le citazioni in corpo più piccolo sia l'intera
+partitura.  Il comando @code{\killCues} toglie soltanto le note e gli
+eventi citati da @code{\cueDuring}.  Altre annotazioni relative alle citazioni in corpo più piccolo,
+come i cambi di chiave e il nome che identifica lo strumento sorgente,
+possono essere contrassegnate per includerle in modo selettivo nella
+partitura; si veda @ref{Using tags}.
+
+@lilypond[verbatim,quote]
+fluteNotes = \relative c'' {
+  r2. c4 d8 c d e fis2 g2 d2
+}
+
+bassoonNotes = \relative c {
+  \clef bass
+  R1
+  \tag #'part {
+    \clef treble
+    \new CueVoice { \set instrumentCueName = "flute" }
+  }
+  \cueDuring #"flute" #UP { R1 }
+  \tag #'part \clef bass
+  g4. b8 d2
+}
+
+\addQuote "flute" { \fluteNotes }
+
+\new Staff {
+  \bassoonNotes
+}
+
+\new StaffGroup <<
+  \new Staff {
+    \fluteNotes
+  }
+  \new Staff {
+    \removeWithTag #'part { \killCues { \bassoonNotes } }
+  }
+>>
+@end lilypond
+
+Altrimenti, i cambi di chiave e i nomi identificativi degli strumenti
+possono essere inseriti in una definizione, in modo da poterli riutilizzare,
+col comando @code{\addInstrumentDefinition} descritto in @ref{Instrument names}.
+
+@seealso
+Guida alla notazione:
+@ref{Quoting other voices},
+@ref{Instrument transpositions},
+@ref{Instrument names},
+@ref{Clef},
+@ref{Musical cues},
+@ref{Using tags}.
+
+Frammenti:
+@rlsr{Staff notation}.
+
+Guida al funzionamento interno:
+@rinternals{CueVoice},
+@rinternals{Voice}.
+
+@knownissues
+Quando si usa @code{\cueDuring}, si possono verificare delle collisioni tra
+le pause nel contesto @code{Voice} e quelle in @code{CueVoice}.  Quando si usa
+@code{\cueDuringWithClef} o @code{\transposedCueDuring}, l'argomento ulteriore
+richiesto da entrambi deve venire dopo la citazione e la direzione.
+
+
+@c  LocalWords:  fluteNotes oboeNotes clarinetNotes bassoonNotes
+@c  LocalWords:  piccoloNotes bassClarinetNotes
diff --git a/Documentation/it/notation/text.itely b/Documentation/it/notation/text.itely
new file mode 100644 (file)
index 0000000..863ff5b
--- /dev/null
@@ -0,0 +1,1567 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+@ignore
+    Translation of GIT committish: 354e5ce3edd1dba03b4ecb68fc766bb46235f5d2
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.17.6"
+
+@c Translators: Federico Bruni
+@c Translation checkers:
+
+@node Testo
+@section Testo
+@translationof Text
+
+@lilypondfile[quote]{text-headword.ly}
+
+Questa sezione spiega come includere del testo (con vari tipi di
+formattazione) nelle partiture musicali.
+
+@noindent
+Alcuni elementi testuali che non sono trattati qui sono discussi in altre
+sezioni specifiche: @ref{Vocal music}, @ref{Titles and headers}.
+
+@menu
+* Inserimento del testo::
+* Formattazione del testo::
+* Tipi di carattere::
+@end menu
+
+@node Inserimento del testo
+@subsection Inserimento del testo
+@translationof Writing text
+
+Questa sezione presenta vari modi di aggiungere del testo a una partitura.
+
+@cindex testo, altre lingue
+@warning{Per scrivere caratteri accentati e speciali (come quelli di
+altre lingue), basta inserire semplicemente i caratteri nel file
+LilyPond, purché il file sia salvato in formato UTF-8.  Ulteriori informazioni
+in @ref{Text encoding}.}
+
+@menu
+* Scritte::
+* Estensori del testo::
+* Indicazioni testuali::
+* Testo separato::
+@end menu
+
+
+@node Scritte
+@unnumberedsubsubsec Scritte
+@translationof Text scripts
+
+@cindex scritta
+@cindex elementi testuali non vuoti
+@cindex testo tra virgolette
+
+Si possono aggiungere a una partitura delle semplici indicazioni con
+del @qq{testo tra virgolette}, come mostrato nell'esempio seguente.
+Tali indicazioni possono essere posizionate sopra o sotto il rigo,
+usando la sintassi descritta in @ref{Direction and placement}.
+
+@lilypond[quote,verbatim,relative=2]
+a8^"pizz." g f e a4-"scherz." f
+@end lilypond
+
+In realtà questa sintassi è una scorciatoia; si può specificare una formattazione
+del testo più complessa usando in modo esplicito un blocco @code{\markup}, come
+è spiegato in @ref{Formatting text}.
+
+@lilypond[quote,verbatim,relative=2]
+a8^\markup { \italic pizz. } g f e
+a4_\markup { \tiny scherz. \bold molto } f
+@end lilypond
+
+Le indicazioni testuali, di norma, non influenzano la spaziatura delle note.
+Ma è possibile far sì che la loro larghezza venga presa in considerazione:
+nell'esempio seguente la prima stringa di testo non influenza la spaziatura,
+mentre la seconda sì.
+
+@lilypond[quote,verbatim,relative=2]
+a8^"pizz." g f e
+\textLengthOn
+a4_"scherzando" f
+@end lilypond
+
+Oltre alle scritte, si possono attaccare alle note anche le
+articolazioni.  Ulteriori informazioni in @ref{Articulations and ornamentations}.
+
+Per maggiori informazioni sull'ordinamento relativo delle scritte e delle
+articolazioni si veda @rlearning{Posizionamento degli oggetti}.
+
+@funindex \textLengthOn
+@funindex textLengthOn
+@funindex \textLengthOff
+@funindex textLengthOff
+
+@predefined
+@code{\textLengthOn},
+@code{\textLengthOff}.
+@endpredefined
+
+@seealso
+Manuale d'apprendimento:
+@rlearning{Posizionamento degli oggetti}.
+
+Guida alla notazione:
+@ref{Formatting text},
+@ref{Direction and placement},
+@ref{Articulations and ornamentations}.
+
+Frammenti:
+@rlsr{Text}.
+
+Guida al funzionamento interno:
+@rinternals{TextScript}.
+
+@cindex testo fuori dal margine
+@cindex margine, testo che va oltre
+@cindex testo, tenerlo dentro il margine
+@cindex testo vocale, tenerlo dentro il margine
+
+@knownissues
+Per verificare che le scritte e il testo vocale siano entro i margini
+occorrono ulteriori calcoli.  Nei casi in cui è richiesta un'esecuzione
+leggermente più veloce, usare
+
+@example
+\override Score.PaperColumn.keep-inside-line = ##f
+@end example
+
+
+@node Estensori del testo
+@unnumberedsubsubsec Estensori del testo
+@translationof Text spanners
+
+@cindex estensori del testo
+
+Alcune indicazioni esecutive, per esempio @notation{rallentando} o
+@notation{accelerando}, appaiono in forma testuale e vengono estese
+lungo molteplici note con delle linee punteggiate.  Tali oggetti,
+chiamati @qq{estensori} (spanner), si creano collegando due note
+con la seguente sintassi:
+
+@lilypond[verbatim,quote,relative=2]
+\override TextSpanner.bound-details.left.text = "rit."
+b1\startTextSpan
+e,\stopTextSpan
+@end lilypond
+
+@cindex estensori del testo, formattazione
+@cindex formattare gli estensori del testo
+
+@noindent
+La stringa testuale da stampare viene impostata attraverso le proprietà
+dell'oggetto.  Per impostazione predefinita, appare in corsivo, ma si
+può ottenere una formattazione diversa tramite i blocchi @code{\markup}, come
+è spiegato in @ref{Formatting text}.
+
+@lilypond[quote,relative=2,verbatim]
+\override TextSpanner.bound-details.left.text =
+  \markup { \upright "rit." }
+b1\startTextSpan c
+e,\stopTextSpan
+@end lilypond
+
+Lo stile della linea, così come la stringa testuale, può essere definito come
+una proprietà dell'oggetto.  Questa sintassi è descritta in @ref{Line styles}.
+
+@funindex \textSpannerUp
+@funindex textSpannerUp
+@funindex \textSpannerDown
+@funindex textSpannerDown
+@funindex \textSpannerNeutral
+@funindex textSpannerNeutral
+
+
+@predefined
+@code{\textSpannerUp},
+@code{\textSpannerDown},
+@code{\textSpannerNeutral}.
+@endpredefined
+
+@knownissues
+LilyPond è capace di gestire un solo estensore del testo per ogni voce.
+
+@snippets
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{dynamics-text-spanner-postfix.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{dynamics-custom-text-spanner-postfix.ly}
+
+@seealso
+Guida alla notazione:
+@ref{Line styles},
+@ref{Dynamics},
+@ref{Formatting text}.
+
+Frammenti:
+@rlsr{Text},
+@rlsr{Expressive marks}.
+
+Guida al funzionamento interno:
+@rinternals{TextSpanner}.
+
+
+@node Indicazioni testuali
+@unnumberedsubsubsec Indicazioni testuali
+@translationof Text marks
+
+
+@cindex indicazioni testuali
+@cindex testo, indicazioni
+@cindex testo sulla stanghetta
+@cindex coda sulla stanghetta
+@cindex segno sulla stanghetta
+@cindex corona sulla stanghetta
+@cindex stanghette, simboli sulle
+
+@funindex \mark
+@funindex mark
+@funindex \markup
+@funindex markup
+
+Si possono aggiungere vari elementi testuali a una partitura tramite la
+sintassi descritta in @ref{Rehearsal marks}:
+
+@c \mark needs to be placed on a separate line (it's not
+@c attached to an object like \markup is). -vv
+
+@lilypond[verbatim,quote,relative=2]
+c4
+\mark "Allegro"
+c c c
+@end lilypond
+
+Questa sintassi permette di porre del testo sopra una stanghetta;
+una formattazione del testo più complessa è possibile grazie al
+blocco @code{\markup}, come è spiegato in @ref{Formatting text}:
+
+@lilypond[quote,verbatim,relative=1]
+<c e>1
+\mark \markup { \italic { colla parte } }
+<d f>2 <e g>
+<c f aes>1
+@end lilypond
+
+@noindent
+Questa sintassi permette anche di stampare segni speciali, come coda, segno
+o corona, se si specifica il nome appropriato del simbolo, come è spiegato
+in @ref{Music notation inside markup}:
+
+@lilypond[quote,verbatim,relative=2]
+<bes f>2 <aes d>
+\mark \markup { \musicglyph #"scripts.ufermata" }
+<e g>1
+@end lilypond
+
+@noindent
+Tali oggetti vengono posizionati soltanto sopra il rigo superiore della
+partitura; a seconda che siano inseriti alla fine o a metà di una battuta,
+possono trovarsi sopra la stanghetta o tra le note.  Se inserito prima di
+un'interruzione di linea, l'indicazione apparirà all'inizio della linea
+successiva.
+
+@lilypond[quote,verbatim,relative=2,ragged-right]
+\mark "Allegro"
+c1 c
+\mark "assai" \break
+c  c
+@end lilypond
+
+@funindex \markLengthOn
+@funindex markLengthOn
+@funindex \markLengthOff
+@funindex markLengthOff
+
+@predefined
+@code{\markLengthOn},
+@code{\markLengthOff}.
+@endpredefined
+
+@snippets
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{printing-marks-at-the-end-of-a-line.ly}
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{printing-marks-on-every-staff.ly}
+
+@seealso
+Guida alla notazione:
+@ref{Rehearsal marks},
+@ref{Formatting text},
+@ref{Music notation inside markup},
+@ref{The Feta font}.
+
+Frammenti:
+@rlsr{Text}.
+
+Guida al funzionamento interno:
+@rinternals{MarkEvent},
+@rinternals{Mark_engraver},
+@rinternals{RehearsalMark}.
+
+
+@node Testo separato
+@unnumberedsubsubsec Testo separato
+@translationof Separate text
+
+@cindex testo separato
+@cindex testo indipendente
+@cindex testo al livello superiore
+
+@funindex \markup
+@funindex markup
+
+Un blocco @code{\markup} può esistere di per sé, fuori da qualsiasi
+blocco @code{\score}, come un'@tie{@qq{espressione di livello superiore}}.  Questa
+sintassi è descritta in @ref{File structure}.
+
+@lilypond[verbatim,quote]
+\markup {
+  Tomorrow, and tomorrow, and tomorrow...
+}
+@end lilypond
+
+@noindent
+Ciò permette di stampare il testo in modo autonomo dalla musica, ed è
+utile soprattutto quando il file di input contiene vari brani musicali,
+come è spiegato in @ref{Multiple scores in a book}.
+
+@lilypond[quote,verbatim]
+\score {
+  c'1
+}
+\markup {
+  Tomorrow, and tomorrow, and tomorrow...
+}
+\score {
+  c'1
+}
+@end lilypond
+
+Blocchi di testo separati possono essere estesi per molte pagine, rendendo
+possibile la realizzazione di documenti o libri interamente con LilyPond.
+Questa funzionalità, e la sintassi specifica che richiede, è descritta
+in @ref{Multi-page markup}.
+
+@funindex \markup
+@funindex markup
+@funindex \markuplist
+@funindex markuplist
+
+@predefined
+@code{\markup},
+@code{\markuplist}.
+@endpredefined
+
+
+@snippets
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{stand-alone-two-column-markup.ly}
+
+@seealso
+Guida alla notazione:
+@ref{Formatting text},
+@ref{File structure},
+@ref{Multiple scores in a book},
+@ref{Multi-page markup}.
+
+Frammenti:
+@rlsr{Text}.
+
+Guida al funzionamento interno:
+@rinternals{TextScript}.
+
+
+@node Formattazione del testo
+@subsection Formattazione del testo
+@translationof Formatting text
+
+Questa sezione presenta la formattazione del testo basilare e quella avanzata,
+usando la sintassi specifica della modalità @code{\markup}.
+
+@menu
+* Introduzione al testo a margine::
+* Scelta del tipo di carattere e della dimensione::
+* Allineamento del testo::
+* Notazione grafica nel blocco markup::
+* Notazione musicale nel blocco markup::
+* Testo formattato su più pagine::
+@end menu
+
+@node Introduzione al testo a margine
+@unnumberedsubsubsec Introduzione al testo a margine
+@translationof Text markup introduction
+
+@cindex markup
+@cindex testo a margine
+@cindex annotazione
+
+@funindex \markup
+@funindex markup
+
+Un blocco @code{\markup} permette di comporre del testo con un'ampia
+sintassi chiamata @qq{modalità markup}.
+
+@cindex markup, espressioni
+@cindex espressioni di markup
+@cindex sintassi di markup
+@cindex markup, sintassi
+
+La sintassi di markup è simile alla solita sintassi di LilyPond: un'espressione
+@code{\markup} viene racchiusa tra parentesi graffe @code{@{@dots{} @}}.  Una
+singola parola viene considerata un'espressione minima, e quindi non è
+necessario racchiuderla tra parentesi.
+
+Diversamente dalle indicazioni testuali @qq{tra virgolette}, i blocchi
+@code{\markup} possono contenere espressioni o comandi di markup annidati,
+inseriti col carattere di barra inversa @code{\}.  Tali comandi hanno
+effetto solo sulla prima espressione che segue.
+
+@lilypond[quote,verbatim,relative=2]
+a1-\markup intenso
+a2^\markup { poco \italic più forte  }
+c e1
+d2_\markup { \italic "string. assai" }
+e
+b1^\markup { \bold { molto \italic  agitato } }
+c
+@end lilypond
+
+@cindex caratteri speciali in modalità markup
+@cindex modalità markup, caratteri speciali
+@cindex caratteri riservati, stampare
+@cindex stampare i caratteri riservati
+@cindex stampare i caratteri speciali
+@cindex testo tra virgolette in modalità markup
+@cindex modalità markup, testo tra virgolette
+
+Un blocco @code{\markup} può contenere anche stringhe di testo tra
+virgolette.  Tali stringhe vengono trattate come espressioni testuali
+minime, e quindi qualsiasi comando di markup o carattere speciale
+(come @code{\} e@tie{}@code{#}) apparirà alla lettera senza influenzare
+la formattazione del testo.  Le stesse doppie virgolette possono essere
+stampate facendole precedere da una barra inversa.
+
+@lilypond[quote,verbatim,relative=2]
+a1^"\italic markup..."
+a_\markup { \italic "... prints \"italic\" letters!" }
+a a
+@end lilypond
+
+Perché sia trattata come un'espressione distinta, una lista di parole deve
+essere racchiusa tra virgolette doppie o preceduta da un comando.  Il modo
+in cui le espressioni musicali sono definite influenza il modo in cui
+saranno sistemate, centrate e allineate; nell'esempio seguente, la seconda
+espressione di @code{\markup} viene trattata nello stesso modo della prima:
+
+@lilypond[quote,verbatim,relative=2]
+c1^\markup { \center-column { a bbb c } }
+c1^\markup { \center-column { a { bbb c } } }
+c1^\markup { \center-column { a \line { bbb c } } }
+c1^\markup { \center-column { a "bbb c" } }
+@end lilypond
+
+I markup possono essere salvati in delle variabili, che possono poi essere
+attaccate direttamente alle note:
+
+@lilypond[quote,verbatim]
+allegro = \markup { \bold \large Allegro }
+
+{
+  d''8.^\allegro
+  d'16 d'4 r2
+}
+@end lilypond
+
+
+@noindent
+Una lista completa dei comandi specifici di @code{\markup} si trova in
+@ref{Text markup commands}.
+
+@seealso
+Guida alla notazione:
+@ref{Text markup commands}.
+
+Frammenti:
+@rlsr{Text}.
+
+File installati:
+@file{scm/markup.scm}.
+
+@knownissues
+Gli errori di sintassi relativi alla modalità markup possono essere poco chiari.
+
+
+@node Scelta del tipo di carattere e della dimensione
+@unnumberedsubsubsec Scelta del tipo di carattere e della dimensione
+@translationof Selecting font and font size
+
+@cindex tipi di carattere, cambiare
+@cindex cambiare i tipi di carattere
+@cindex font, cambiare
+
+@funindex \italic
+@funindex italic
+@funindex \bold
+@funindex bold
+@funindex \underline
+@funindex underline
+
+La modalità markup permette di cambiare il tipo di carattere:
+
+@lilypond[quote,verbatim,relative=2]
+d1^\markup {
+  \bold { Più mosso }
+  \italic { non troppo \underline Vivo }
+}
+r2 r4 r8
+d,_\markup { \italic quasi \smallCaps Tromba }
+f1 d2 r
+@end lilypond
+
+@cindex dimensione del tipo di carattere
+@cindex tipo di carattere, dimensione
+@cindex dimensione del testo
+@cindex testo, dimensione
+
+@funindex \abs-fontsize
+@funindex \fontsize
+@funindex fontsize
+@funindex \smaller
+@funindex smaller
+@funindex \larger
+@funindex larger
+@funindex \magnify
+@funindex magnify
+
+Si può modificare la dimensione del tipo di carattere, rispetto alla
+dimensione globale del rigo, in vari modi.
+
+Si può impostare su una dimensione predefinita,
+
+@lilypond[quote,verbatim,relative=2]
+b1_\markup { \huge Sinfonia }
+b1^\markup { \teeny da }
+b1-\markup { \normalsize camera }
+@end lilypond
+
+oppure in modo proporzionale rispetto al valore precedente,
+
+@lilypond[quote,verbatim,relative=2]
+b1_\markup { \larger Sinfonia }
+b1^\markup { \smaller da }
+b1-\markup { \magnify #0.6  camera }
+@end lilypond
+
+Può essere aumentata o diminuita rispetto al valore impostato per la
+dimensione globale del rigo:
+
+@lilypond[quote,verbatim,relative=2]
+b1_\markup { \fontsize #-2 Sinfonia }
+b1^\markup { \fontsize #1 da }
+b1-\markup { \fontsize #3 camera }
+@end lilypond
+
+Si può impostare anche su una dimensione fissa (in punti), indipendentemente
+dalla dimensione globale del rigo:
+
+@lilypond[quote,verbatim,relative=2]
+b1_\markup { \abs-fontsize #20 Sinfonia }
+b1^\markup { \abs-fontsize #8 da }
+b1-\markup { \abs-fontsize #14 camera }
+@end lilypond
+
+@cindex pedice
+@cindex apice
+
+@funindex \super
+@funindex super
+@funindex \sub
+@funindex sub
+@funindex \normal-size-super
+@funindex normal-size-super
+
+È possibile stampare il testo come pedice o apice.  Per impostazione
+predefinita, questo appaiono in corpo più piccolo, ma si può usare
+anche un corpo normale:
+
+@lilypond[quote,verbatim]
+\markup {
+  \column {
+    \line { 1 \super st movement }
+    \line { 1 \normal-size-super st movement
+      \sub { (part two) }  }
+  }
+}
+@end lilypond
+
+@cindex famiglie di tipi di carattere
+@cindex tipi di carattere, famiglie
+
+La modalità di markup fornisce un modo semplice per scegliere famiglie
+di caratteri diverse.  Se non specificato altrimenti, viene scelto
+automaticamente il carattere tipografico con grazie (il tipo romano);
+nell'ultima linea dell'esempio seguente non c'è differenza tra la
+prima e la seconda parola.
+
+@lilypond[quote,verbatim]
+\markup {
+  \column {
+    \line { Act \number 1 }
+    \line { \sans { Scene I. } }
+    \line { \typewriter { Verona. An open place. } }
+    \line { Enter \roman Valentine and Proteus. }
+  }
+}
+@end lilypond
+
+@noindent
+Alcune di queste famiglie di caratteri, usate per elementi specifici come i
+numeri o le dinamiche, non forniscono tutti i caratteri, come accennato in
+@ref{New dynamic marks} e @ref{Manual repeat marks}.
+
+@c \concat is actually documented in Align (it is not
+@c a font-switching command).  But we need it here. -vv
+
+Se usati all'interno di una parola, alcuni comandi che cambiano il tipo di
+carattere o la formattazione potrebbero produrre uno spazio vuoto
+indesiderato.  Si può facilmente risolvere concatenando insieme gli
+elementi testuali:
+
+@lilypond[quote,verbatim]
+\markup {
+  \column {
+    \line {
+      \concat { 1 \super st }
+      movement
+    }
+    \line {
+      \concat { \dynamic p , }
+      \italic { con dolce espressione }
+    }
+  }
+}
+@end lilypond
+
+Una lista completa dei comandi per cambiare il tipo di carattere o per usare
+tipi di carattere personalizzati si trova in @ref{Font}.
+
+È possibile anche definire i propri gruppi di tipi di carattere, come
+è spiegato in @ref{Fonts}.
+
+@funindex \teeny
+@funindex teeny
+@funindex \tiny
+@funindex tiny
+@funindex \small
+@funindex small
+@funindex \normalsize
+@funindex normalsize
+@funindex \large
+@funindex large
+@funindex \huge
+@funindex huge
+@funindex \smaller
+@funindex smaller
+@funindex \larger
+@funindex larger
+
+
+@predefined
+@code{\teeny},
+@code{\tiny},
+@code{\small},
+@code{\normalsize},
+@code{\large},
+@code{\huge},
+@code{\smaller},
+@code{\larger}.
+@endpredefined
+
+@seealso
+Guida alla notazione:
+@ref{Font},
+@ref{New dynamic marks},
+@ref{Manual repeat marks},
+@ref{Fonts}.
+
+File installati:
+@file{scm/define-markup-commands.scm}.
+
+Frammenti:
+@rlsr{Text}.
+
+Guida al funzionamento interno:
+@rinternals{TextScript}.
+
+@knownissues
+L'uso dei comandi di dimensionamento dei caratteri @code{\teeny}, @code{\tiny},
+@code{\small}, @code{\normalsize}, @code{\large} e @code{\huge} produce
+una spaziatura della linea imprevedibile rispetto all'uso di @code{\fontsize}.
+
+
+@node Allineamento del testo
+@unnumberedsubsubsec Allineamento del testo
+@translationof Text alignment
+
+@cindex testo, allineamento
+@cindex allineare il testo
+@cindex allineare il markup
+@cindex markup, allineare
+
+Questa sottosezione spiega come posizionare il testo nella modalità
+markup.  Gli oggetti markup possono anche essere spostati interamente
+tramite la sintassi descritta in @rlearning{Spostare gli oggetti}.
+
+@c Padding commands should be mentioned on this page, but
+@c most of these require \box to be more clearly illustrated. -vv
+
+@cindex testo, allineamento orizzontale
+@cindex allineamento orizzontale del testo
+
+@funindex \left-align
+@funindex left-align
+@funindex \center-align
+@funindex center-align
+@funindex \right-align
+@funindex right-align
+
+Gli oggetti di markup possono essere allineati in vari modi.  Per impostazione
+predefinita, l'indicazione testuale è allineata rispetto al suo margine
+sinistro: nell'esempio seguente, non c'è differenza tra il primo e il
+secondo markup.
+
+@lilypond[quote,verbatim,relative=2]
+d1-\markup { poco }
+f
+d-\markup { \left-align poco }
+f
+d-\markup { \center-align { poco } }
+f
+d-\markup { \right-align poco }
+@end lilypond
+
+@funindex \halign
+@funindex halign
+
+L'allineamento orizzontale può essere ritoccato usando un valore numerico:
+
+@lilypond[quote,verbatim,relative=2]
+a1-\markup { \halign #-1 poco }
+e'
+a,-\markup { \halign #0 poco }
+e'
+a,-\markup { \halign #0.5 poco }
+e'
+a,-\markup { \halign #2 poco }
+@end lilypond
+
+@noindent
+Alcuni oggetti possono avere proprie procedure di allineamento, e dunque
+non sono influenzate da questi comandi.   È possibile spostare tali
+oggetti di markup tutti insieme, come mostrato ad esempio in
+@ref{Text marks}.
+
+@cindex testo, allineamento verticale
+@cindex allineamento verticale del testo
+
+@funindex \raise
+@funindex raise
+@funindex \lower
+@funindex lower
+@funindex \null
+@funindex null
+
+@c QUERY Should the function of ``\null'' be clarified? rp
+
+L'allineamento verticale è un po' più complesso.  Come si è detto prima, gli
+oggetti di markup possono essere spostati tutti insieme; tuttavia è anche
+possibile spostare elementi specifici all'interno di un blocco markup.   In
+questo caso l'elemento da spostare deve essere preceduto da un @emph{punto  di riferimento}, che
+può essere un altro elemento markup o un oggetto invisibile.   L'esempio seguente
+illustra queste due possibilità; l'ultimo markup in questo esempio non ha un
+punto di riferimento e di conseguenza non si muove.
+
+@lilypond[quote,verbatim,relative=1]
+d2^\markup {
+  Acte I
+  \raise #2 { Scène 1 }
+}
+a'
+g_\markup {
+  \null
+  \lower #4 \bold { Très modéré }
+}
+a
+d,^\markup {
+  \raise #4 \italic { Une forêt. }
+}
+a'4 a g2 a
+@end lilypond
+
+@funindex \general-align
+@funindex general-align
+@funindex \translate
+@funindex translate
+@funindex \translate-scaled
+@funindex translate-scaled
+
+Alcuni comandi possono cambiare l'allineamento sia orizzontale che verticale
+degli oggetti testuali in modalità markup.  Qualsiasi oggetto interessato
+da questi comandi deve essere preceduto da un punto di riferimento:
+
+@lilypond[quote,verbatim,relative=1]
+d2^\markup {
+  Acte I
+  \translate #'(-1 . 2) "Scène 1"
+}
+a'
+g_\markup {
+  \null
+  \general-align #Y #3.2 \bold "Très modéré"
+}
+a
+d,^\markup {
+  \null
+  \translate-scaled #'(-1 . 2) \teeny "Une forêt."
+}
+a'4 a g2 a
+@end lilypond
+
+@cindex markup multilinea
+@cindex multilinea, markup
+@cindex testo multilinea
+@cindex multilinea, testo
+@cindex testo in colonne
+@cindex colonne, testo
+
+@funindex \column
+@funindex column
+@funindex \center-column
+@funindex center-column
+
+Un oggetto markup può includere varie linee di testo.  Nell'esempio
+seguente, ogni elemento o espressione viene posizionato sulla sua
+linea, allineato a sinistra o centrato:
+
+@lilypond[quote,verbatim]
+\markup {
+  \column {
+    a
+    "b c"
+    \line { d e f }
+  }
+  \hspace #10
+  \center-column {
+    a
+    "b c"
+    \line { d e f }
+  }
+}
+@end lilypond
+
+@cindex centrare il testo sulla pagina
+@cindex testo, centrare sulla pagina
+@cindex markup, centrare sulla pagina
+
+@funindex \fill-line
+@funindex fill-line
+
+Analogalmente, una lista di elementi o espressioni può essere distesa
+per riempire l'intera larghezza orizzontale della linea (se c'è un solo
+elemento, verrà centrato sulla pagina).  Queste espressioni possono
+a loro volta includere del testo multilinea o una qualsiasi altra
+espressione di markup:
+
+@lilypond[quote,verbatim]
+\markup {
+  \fill-line {
+    \line { William S. Gilbert }
+    \center-column {
+      \huge \smallCaps "The Mikado"
+      or
+      \smallCaps "The Town of Titipu"
+    }
+    \line { Sir Arthur Sullivan }
+  }
+}
+\markup {
+  \fill-line { 1885 }
+}
+@end lilypond
+
+@cindex testo a capo automaticamente
+@cindex testo giustificato
+@cindex giustificato, testo
+@cindex a capo, testo
+@cindex markup, testo a capo
+@cindex markup, testo giustificato
+
+@funindex \wordwrap
+@funindex wordwrap
+@funindex \justify
+@funindex justify
+
+Indicazioni testuali lunghe possono andare a capo automaticamente in base
+alla larghezza della linea specificata.  Possono essere allineate a
+sinistra o giustificate, come mostra l'esempio seguente.
+
+@lilypond[quote,verbatim]
+\markup {
+  \column {
+    \line  \smallCaps { La vida breve }
+    \line \bold { Acto I }
+    \wordwrap \italic {
+      (La escena representa el corral de una casa de
+      gitanos en el Albaicín de Granada.  Al fondo una
+      puerta por la que se ve el negro interior de
+      una Fragua, iluminado por los rojos resplandores
+      del fuego.)
+    }
+    \hspace #0
+
+    \line \bold { Acto II }
+    \override #'(line-width . 50)
+    \justify \italic {
+      (Calle de Granada.  Fachada de la casa de Carmela
+      y su hermano Manuel con grandes ventanas abiertas
+      a través de las que se ve el patio
+      donde se celebra una alegre fiesta)
+    }
+  }
+}
+@end lilypond
+
+@cindex testo, comandi di allineamento del
+@cindex markup, comandi di allineamento del testo
+@cindex allineamento, testo, comandi
+
+Una lista completa dei comandi di allineamento del testo si trova in
+@ref{Align}.
+
+@seealso
+Manuale d'apprendimento:
+@rlearning{Spostare gli oggetti}.
+
+Guida alla notazione:
+@ref{Align},
+@ref{Text marks}.
+
+File installati:
+@file{scm/define-markup-commands.scm}.
+
+Frammenti:
+@rlsr{Text}.
+
+Guida al funzionamento interno:
+@rinternals{TextScript}.
+
+
+@node Notazione grafica nel blocco markup
+@unnumberedsubsubsec Notazione grafica nel blocco markup
+@translationof Graphic notation inside markup
+
+@cindex grafica, inclusione
+@cindex disegnare oggetti grafici
+@cindex oggetti grafici, disegnare
+@cindex oggetti grafici incorporati
+@cindex oggetti grafici, includere
+
+Si possono aggiungere vari oggetti grafici a una partitura attraverso
+i comandi di markup.
+
+@cindex decorazione del testo
+@cindex incorniciatura del testo
+@cindex testo, incorniciatura
+@cindex testo, decorazione
+@cindex markup, decorazione
+@cindex markup, incorniciatura
+
+@funindex \box
+@funindex box
+@funindex \circle
+@funindex circle
+@funindex \rounded-box
+@funindex rounded-box
+@funindex \bracket
+@funindex bracket
+@funindex \hbracket
+@funindex hbracket
+
+Alcuni comandi di markup consentono di decorare gli elementi testuali con
+degli elementi grafici, come è illustrato nell'esempio seguente.
+
+@lilypond[quote,verbatim]
+\markup \fill-line {
+  \center-column {
+    \circle Jack
+    \box "in the box"
+    \null
+    \line {
+      Erik Satie
+      \hspace #3
+      \bracket "1866 - 1925"
+    }
+    \null
+    \rounded-box \bold Prelude
+  }
+}
+@end lilypond
+
+@cindex padding intorno al testo
+@cindex testo, padding
+@cindex markup, padding
+
+@funindex \pad-markup
+@funindex pad-markup
+@funindex \pad-x
+@funindex pad-x
+@funindex \pad-to-box
+@funindex pad-to-box
+@funindex \pad-around
+@funindex pad-around
+
+Alcuni comandi possono richiedere un aumento del padding intorno al
+testo;  per farlo si usano dei comandi di markup, descritti in modo
+esaustivo in @ref{Align}.
+
+@lilypond[quote,verbatim]
+\markup \fill-line {
+  \center-column {
+    \box "Charles Ives (1874 - 1954)"
+    \null
+    \box \pad-markup #2 "THE UNANSWERED QUESTION"
+    \box \pad-x #8 "A Cosmic Landscape"
+    \null
+  }
+}
+\markup \column {
+  \line {
+    \hspace #10
+    \box \pad-to-box #'(-5 . 20) #'(0 . 5)
+      \bold "Largo to Presto"
+  }
+  \pad-around #3
+      "String quartet keeps very even time,
+Flute quartet keeps very uneven time."
+}
+@end lilypond
+
+@cindex notazione grafica
+@cindex simboli non musicali
+
+@funindex \combine
+@funindex combine
+@funindex \draw-circle
+@funindex draw-circle
+@funindex \filled-box
+@funindex filled-box
+@funindex \triangle
+@funindex triangle
+@funindex \draw-line
+@funindex draw-line
+@funindex \arrow-head
+@funindex arrow-head
+
+Si possono produrre altri elementi grafici o simboli che non richiedono
+alcun testo.  Come con qualsiasi espressione di markup, tali oggetti
+possono essere combinati.
+
+@lilypond[quote,verbatim]
+\markup {
+  \combine
+    \draw-circle #4 #0.4 ##f
+    \filled-box #'(-4 . 4) #'(-0.5 . 0.5) #1
+  \hspace #5
+
+  \center-column {
+    \triangle ##t
+    \combine
+      \draw-line #'(0 . 4)
+      \arrow-head #Y #DOWN ##f
+  }
+}
+@end lilypond
+
+@cindex grafica inclusa
+@cindex immagini incluse
+@cindex postscript
+
+@funindex \epsfile
+@funindex epsfile
+@funindex \postscript
+@funindex postscript
+
+Le funzionalità grafiche avanzate comprendono la possibilità di includere
+file di immagini convertite nel formato Encapsulated PostScript
+(@emph{eps}), oppure di inserire la grafica direttamente nel file di input,
+usando del codice PostScript nativo.  In tal caso, può essere utile specificare
+esplicitamente la dimensione del disegno, come è mostrato sotto:
+
+@lilypond[quote,verbatim,relative=1]
+c1^\markup {
+  \combine
+    \epsfile #X #10 #"./context-example.eps"
+    \with-dimensions #'(0 . 6) #'(0 . 10)
+    \postscript #"
+      -2 3 translate
+      2.7 2 scale
+      newpath
+      2 -1 moveto
+      4 -2 4 1 1 arct
+      4 2 3 3 1 arct
+      0 4 0 3 1 arct
+      0 0 1 -1 1 arct
+      closepath
+      stroke"
+  }
+c
+@end lilypond
+
+Una lista completa dei comandi specifici per la grafica si trova in
+@ref{Graphic}.
+
+@seealso
+Guida alla notazione:
+@ref{Graphic},
+@ref{Editorial annotations},
+@ref{Align}.
+
+File installati:
+@file{scm/define-markup-commands.scm},
+@file{scm/stencil.scm}.
+
+Frammenti:
+@rlsr{Text}.
+
+Guida al funzionamento interno:
+@rinternals{TextScript}.
+
+
+@node Notazione musicale nel blocco markup
+@unnumberedsubsubsec Notazione musicale nel blocco markup
+@translationof Music notation inside markup
+
+@cindex notazione dentro il blocco markup
+@cindex musica dentro il blocco markup
+@cindex markup, notazione musicale dentro
+
+Si possono aggiungere vari elementi della notazione musicale dentro un
+oggetto markup.
+
+Per le note e le alterazioni esistono dei comandi markup appositi:
+
+@lilypond[quote,verbatim,relative=2]
+a2 a^\markup {
+  \note #"4" #1
+  =
+  \note-by-number #1 #1 #1.5
+}
+b1_\markup {
+  \natural \semiflat \flat
+  \sesquiflat \doubleflat
+}
+\glissando
+a1_\markup {
+  \natural \semisharp \sharp
+  \sesquisharp \doublesharp
+}
+\glissando b
+@end lilypond
+
+Anche altri oggetti della notazione possono essere stampati in
+modalità markup:
+
+@lilypond[quote,verbatim,relative=1]
+g1 bes
+ees\finger \markup \tied-lyric #"4~1"
+fis_\markup { \dynamic rf }
+bes^\markup {
+  \beam #8 #0.1 #0.5
+}
+cis
+d-\markup {
+  \markalphabet #8
+  \markletter #8
+}
+@end lilypond
+
+Più in generale, qualsiasi simbolo musicale disponibile può essere incluso
+separatamente in un oggetto markup, come è illustrato sotto.  Una lista
+completa di questi simboli e dei loro nomi si trova in
+@ref{The Feta font}.
+
+@lilypond[quote,verbatim,relative=2]
+c2
+c'^\markup { \musicglyph #"eight" }
+c,4
+c,8._\markup { \musicglyph #"clefs.G_change" }
+c16
+c2^\markup { \musicglyph #"timesig.neomensural94" }
+@end lilypond
+
+Un altro modo per stampare glifi non testuali è descritto in
+@ref{Fonts explained}.  È utile per stampare parentesi di varie
+dimensioni.
+
+La modalità markup supporta anche i diagrammi per strumenti specifici:
+
+@lilypond[quote,verbatim,relative=2]
+c1^\markup {
+  \fret-diagram-terse #"x;x;o;2;3;2;"
+}
+c^\markup {
+  \harp-pedal #"^-v|--ov^"
+}
+c
+c^\markup {
+  \combine
+    \musicglyph #"accordion.discant"
+    \combine
+      \raise #0.5 \musicglyph #"accordion.dot"
+      \raise #1.5 \musicglyph #"accordion.dot"
+}
+@end lilypond
+
+@c The accordion diagram is actually taken from a snippet.
+
+@noindent
+Questi diagrammi sono documentati in @ref{Instrument Specific Markup}.
+
+@cindex partitura dentro il blocco markup
+@cindex markup, partitura dentro
+
+È possibile annidare perfino un'intera partitura in un oggetto markup.  In tal
+caso, il blocco @code{\score} annidato deve contenere un blocco @code{\layout},
+come è illustrato qui:
+
+@lilypond[quote,verbatim,relative=1]
+c4 d^\markup {
+  \score {
+    \relative c' { c4 d e f }
+    \layout { }
+  }
+}
+e f |
+c d e f
+@end lilypond
+
+Una lista completa dei comandi relativi alla notazione musicale si trova
+in @ref{Music}.
+
+@seealso
+Guida alla notazione:
+@ref{Music},
+@ref{The Feta font},
+@ref{Fonts explained}.
+
+File installati:
+@file{scm/define-markup-commands.scm},
+@file{scm/fret-diagrams.scm},
+@file{scm/harp-pedals.scm}.
+
+Frammenti:
+@rlsr{Text}.
+
+Guida al funzionamento interno:
+@rinternals{TextScript}.
+
+
+@node Testo formattato su più pagine
+@unnumberedsubsubsec Testo formattato su più pagine
+@translationof Multi-page markup
+
+@cindex testo formattato su più pagine
+@cindex markup, multipagina
+@cindex multipagina, testo
+@cindex testo esteso su più pagine
+
+@funindex \markuplist
+@funindex markuplist
+@funindex \justified-lines
+@funindex justified-lines
+@funindex \wordwrap-lines
+@funindex wordwrap-lines
+
+Sebbene gli oggetti di markup standard non possano avere interruzioni, una
+specifica sintassi permette di inserire linee di testo che possono estendersi
+per varie pagine:
+
+@lilypond[quote,verbatim]
+\markuplist {
+  \justified-lines {
+    Un testo molto lungo di linee giustificate.
+    ...
+  }
+  \wordwrap-lines {
+    Un altro paragrafo molto lungo.
+    ...
+  }
+  ...
+}
+@end lilypond
+
+Questa sintassi accetta una lista di oggetti di markup, che possono essere
+@itemize
+@item
+il risultato di un comando \markuplist,
+@item
+una lista di markup,
+@item
+una lista di \markuplists.
+@end itemize
+
+Una lista completa dei comandi che si possono usare con \markuplist si
+trova in @ref{Text markup list commands}.
+
+@seealso
+Guida alla notazione:
+@ref{Text markup list commands}.
+
+Estendere LilyPond:
+@rextend{New markup list command definition}.
+
+File installati:
+@file{scm/define-markup-commands.scm}.
+
+Frammenti:
+@rlsr{Text}.
+
+Guida al funzionamento interno:
+@rinternals{TextScript}.
+
+@funindex \markuplist
+@funindex markuplist
+
+@predefined
+@code{\markuplist}.
+@endpredefined
+
+
+@node Tipi di carattere
+@subsection Tipi di carattere
+@translationof Fonts
+
+Questa sezione presenta il modo in cui sono gestiti i tipi di carattere e come
+possono essere modificati nelle partiture.
+
+@menu
+* Tipi di carattere in dettaglio::
+* Tipi di carattere per singolo oggetto::
+* Tipi di carattere per l'intero documento::
+@end menu
+
+@node Tipi di carattere in dettaglio
+@unnumberedsubsubsec Tipi di carattere in dettaglio
+@translationof Fonts explained
+
+@cindex Pango
+@cindex tipi di carattere
+@cindex font
+@cindex graffe, varie dimensioni
+@cindex font non testuali nel markup
+
+@funindex font-interface
+
+I tipi di carattere vengono gestiti attraverso varie librerie.  FontConfig
+rileva i tipi di carattere disponibili nel sistema; i tipi selezionati
+sono riprodotti con Pango.
+
+I tipi di carattere della notazione musicale possono essere descritti
+come un insieme di glifi specifici, ordinati in varie famiglie.  La
+seguente sintassi permette di usare vari caratteri @code{feta} di LilyPond
+(non testuali) direttamente nella modalità markup:
+
+@lilypond[quote,verbatim,relative=2]
+a1^\markup {
+  \vcenter {
+    \override #'(font-encoding . fetaBraces)
+    \lookup #"brace120"
+    \override #'(font-encoding . fetaText)
+    \column { 1 3 sf }
+    \override #'(font-encoding . fetaMusic)
+    \lookup #"noteheads.s0petrucci"
+  }
+}
+@end lilypond
+
+@noindent
+Tuttavia, tutti questi glifi, ad eccezione delle graffe di varie
+dimensioni contenute in @code{fetaBraces}, sono già utilizzabili
+con la sintassi ben più semplice descritta in @ref{Music notation inside markup}.
+
+Quando si usano i glifi contenuti in @code{fetaBraces}, la dimensione
+della graffa viene specificata dalla parte numerica del nome del glifo,
+in unità arbitrarie.  Può essere specificato qualsiasi numero intero da
+@code{0} a @code{575} compresi, dove @code{0} corrisponde alla graffa
+più piccola.  Il valore ottimale deve essere determinato per tentativi.
+Questi glifi sono tutte graffe sinistre; le graffe destre si possono
+ottenere con la rotazione, vedi @ref{Rotating objects}.
+
+Sono disponibili tre famiglie di tipi di carattere: il @emph{roman}
+(con grazie), che usa di default New Century Schoolbook, il
+@emph{sans} (senza grazie) e il tipo monospaziato @emph{typewriter} -- queste
+ultime due famiglie  sono determinate dall'installazione di Pango.
+
+@warning{Non ci sono tipi predefiniti associati con le famiglie @emph{sans}
+e @emph{typewriter}.  Un file di input che usa una di queste famiglie
+può produrre output diversi su computer diversi.  Per garantire un output
+coerente su piattaforme diverse, occorre specificare i tipi di carattere
+per nome e quei tipi devono essere presenti in qualsiasi sistema che
+elabori il file.  Si veda @ref{Single entry fonts} e
+@ref{Entire document fonts}.}
+
+Ogni famiglia può avere forme e serie differenti.  L'esempio seguente
+illustra la possibilità di scegliere  famiglie, forme, serie e
+dimensioni alternative.  Il valore specificato per @code{font-size} è
+la modifica relativa alla dimensione predefinita.
+
+@lilypond[quote,verbatim,relative=2]
+\override Score.RehearsalMark.font-family = #'typewriter
+\mark \markup "Ouverture"
+\override Voice.TextScript.font-shape = #'italic
+\override Voice.TextScript.font-series = #'bold
+d2.^\markup "Allegro"
+\override Voice.TextScript.font-size = #-3
+c4^smaller
+@end lilypond
+
+@noindent
+Una sintassi simile si usa nella modalità markup; tuttavia in questo
+caso è preferibile usare la sintassi più semplice spiegata in
+@ref{Selecting font and font size}:
+
+@lilypond[quote,verbatim]
+\markup {
+  \column {
+    \line {
+      \override #'(font-shape . italic)
+      \override #'(font-size . 4)
+      Idomeneo,
+    }
+    \line {
+      \override #'(font-family . typewriter)
+      {
+        \override #'(font-series . bold)
+        re
+        di
+      }
+      \override #'(font-family . sans)
+      Creta
+    }
+  }
+}
+@end lilypond
+
+Sebbene sia semplice passare a un tipo di carattere preconfigurato, è anche
+possibile usare altri tipi, come viene spiegato nelle sezioni successive:
+@ref{Single entry fonts} e @ref{Entire document fonts}.
+
+@seealso
+Guida alla notazione:
+@ref{The Feta font},
+@ref{Music notation inside markup},
+@ref{Rotating objects},
+@ref{Selecting font and font size},
+@ref{Font}.
+
+
+@node Tipi di carattere per singolo oggetto
+@unnumberedsubsubsec Tipi di carattere per singolo oggetto
+@translationof Single entry fonts
+
+Si può usare nella partitura qualsiasi tipo di carattere che sia installato
+nel sistema operativo e riconosciuto da FontConfig, usando la seguente
+sintassi:
+
+@lilypond[quote,verbatim,relative=2]
+\override Staff.TimeSignature.font-name = #"Bitstream Charter"
+\override Staff.TimeSignature.font-size = #2
+\time 3/4
+
+a1_\markup {
+  \override #'(font-name . "Vera Bold")
+    { Vera Bold }
+}
+@end lilypond
+
+@cindex tipi di carattere, trovare quelli disponibili
+@cindex trovare i tipi di carattere disponibili
+@cindex elencare i tipi di carattere disponibili
+@cindex tipi di carattere disponibili, elenco
+
+@funindex show-available-fonts
+
+Il seguente comando mostra un elenco di tutti i tipi di carattere disponibili
+nel sistema operativo:
+
+@example
+lilypond -dshow-available-fonts x
+@end example
+
+@seealso
+Guida alla notazione:
+@ref{Fonts explained},
+@ref{Entire document fonts}.
+
+Frammenti:
+@rlsr{Text}.
+
+@c A source file gets never installed...
+@c Installed Files:
+@c @file{lily/font-config-scheme.cc}.
+
+
+@node Tipi di carattere per l'intero documento
+@unnumberedsubsubsec Tipi di carattere per l'intero documento
+@translationof Entire document fonts
+
+È possibile modificare i tipi di carattere usati come tipi predefiniti
+nelle famiglie @emph{roman}, @emph{sans} e @emph{typewriter} specificandoli, in
+questo ordine, come è mostrato nell'esempio seguente, che ridimensiona
+automaticamente i caratteri col valore impostato per la dimensione globale
+del rigo.  I tipi di carattere  sono spiegati in @ref{Fonts explained}.
+
+@cindex famiglie di tipi di carattere, impostare
+@cindex tipi di carattere, modificarli per l'intero documento
+
+@funindex make-pango-font-tree
+
+@lilypond[verbatim,quote]
+\paper  {
+  #(define fonts
+    (make-pango-font-tree "Times New Roman"
+                          "Nimbus Sans"
+                          "Luxi Mono"
+                          (/ staff-height pt 20)))
+}
+
+\relative c'{
+  c1-\markup {
+    roman,
+    \sans sans,
+    \typewriter typewriter. }
+}
+@end lilypond
+
+@c we don't do Helvetica / Courier, since GS incorrectly loads
+@c Apple TTF fonts
+
+@seealso
+Guida alla notazione:
+@ref{Fonts explained},
+@ref{Single entry fonts},
+@ref{Selecting font and font size},
+@ref{Font}.
+
index a75cb4d6cb9b1cdae6c3d0ffe7d590f97ef7bc95..1562b0b428c6f3315d76a56e9083eda91624055b 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-    Translation of GIT committish: 55cabbf80554d813284d7f1dc0e08965e2b3644d
+    Translation of GIT committish: 9d074d78d7c25852afa87005e21c118630f4f83b
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
@@ -7,19 +7,19 @@
 
 <!--
 we depend on an external entity here, which we cannot control.  Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
 For some time, Google won't have the new location in its index, so the
-search would get nothing.  It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing.  It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
 -->
 <form action="http://google.com/search"
       method="get"
       name="search"
-      onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+      onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
                + search.brute_query.value"
-      onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+      onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
                   + search.brute_query.value"
-      onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+      onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
               + search.brute_query.value">
   <input type="hidden" name="btnG" value="Cerca con Google">
   <input type="text" name="brute_query" onfocus="this.value=''" value="Cerca">
diff --git a/Documentation/it/texidocs/GNUmakefile b/Documentation/it/texidocs/GNUmakefile
deleted file mode 100644 (file)
index 0ffa758..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
index 6a2022d13258d1a5e97a1edaaf3926dfa882dbd9..fd74c01a6b4f69da7718b3bc52522c030a32cc2b 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 L'ambitus può essere specificato per voce. In tal caso occorre
 spostarlo manualmente per evitare collisioni.
diff --git a/Documentation/it/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc b/Documentation/it/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc
new file mode 100644 (file)
index 0000000..aa72485
--- /dev/null
@@ -0,0 +1,13 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Se il rigo ha più di una voce, l'ottavazione in una voce trasporrà
+la posizione delle note in tutte le voci per la durata della parentesi
+dell'ottava.  Se si intende applicare l'ottavazione a una sola voce,
+si possono impostare esplicitamente middleCPosition e la parentesi
+di ottava.  In questo frammento, la chiave di basso ha di norma il
+MiddleCPosition impostato su 6, ovvero sei posizioni sopra la linea
+centrale, dunque nella porzione con l'ottava il MiddleCPosition è
+più alto di sette posizioni (un'ottava).
+
+"
+  doctitleit = "Aggiungere un segno di ottava a una sola voce"
diff --git a/Documentation/it/texidocs/adding-timing-marks-to-long-glissandi.texidoc b/Documentation/it/texidocs/adding-timing-marks-to-long-glissandi.texidoc
new file mode 100644 (file)
index 0000000..1499f9e
--- /dev/null
@@ -0,0 +1,12 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+I battiti saltati nei glissandi molto lunghi vengono talvolta segnalati
+con delle indicazioni di tempo, che consistono solitamente in dei gambi
+privi di teste di nota.  Questi gambi possono essere usati anche per
+contenere segni di espressione intermedi.
+
+Se i gambi non si allineano bene al glissando, può essere necessario
+riposizionarli leggermente.
+
+"
+  doctitleit = "Aggiungere i segni di tempo per i glissandi lunghi"
diff --git a/Documentation/it/texidocs/adding-volta-brackets-to-additional-staves.texidoc b/Documentation/it/texidocs/adding-volta-brackets-to-additional-staves.texidoc
new file mode 100644 (file)
index 0000000..dcc7c3b
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+L'incisore @code{Volta_engraver} risiede nel contesto @code{Score},  quindi
+le parentesi delle ripetizioni appaiono di norma soltanto sul rigo superiore.
+Questo comportamento può essere modificato aggiungendo l'incisore
+@code{Volta_engraver} al contesto @code{Staff} in cui si desidera
+far apparire le parentesi; si veda anche il frammento @qq{Volta multirigo}.
+
+"
+  doctitleit = "Aggiungere le parentesi delle volte a altri righi"
diff --git a/Documentation/it/texidocs/additional-voices-to-avoid-collisions.texidoc b/Documentation/it/texidocs/additional-voices-to-avoid-collisions.texidoc
new file mode 100644 (file)
index 0000000..166aec3
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+In alcuni casi di musica polifonica complessa sono necessarie delle voci
+ulteriori per evitare le collisioni tra note.  Se servono più di
+quattro voci parallele,  si possono aggiungere altre voci definendo
+una variabile con la funzione Scheme function @code{context-spec-music}.
+
+"
+  doctitleit = "Voci ulteriori per evitare le collisioni"
diff --git a/Documentation/it/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc b/Documentation/it/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc
new file mode 100644 (file)
index 0000000..f943ed3
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+La proprietà @code{shortest-duration-space} può essere modificata per cambiare
+la forma dei portamenti indeterminati verso il basso o verso l'alto.
+
+"
+  doctitleit = "Cambiare la forma dei portamenti indeterminati verso il basso o verso l'alto"
diff --git a/Documentation/it/texidocs/aligning-bar-numbers.texidoc b/Documentation/it/texidocs/aligning-bar-numbers.texidoc
new file mode 100644 (file)
index 0000000..990bf47
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Per impostazione predefinita i numeri di battuta sono allineati a destra rispetto
+al loro oggetto genitore. Di solito si tratta del margine sinistro della linea
+oppure, se i numeri appaiono all'interno della linea, del lato sinistro della
+stanghetta.  I numeri possono essere posizionati anche direttamente sopra la
+stanghetta oppure allineati a sinistra della stanghetta.
+
+"
+  doctitleit = "Allineare i numeri di battuta"
diff --git a/Documentation/it/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc b/Documentation/it/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc
new file mode 100644 (file)
index 0000000..2e6fe27
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Per impostazione predefinita, le diteggiature orientate verticalmente sono
+poste fuori dal rigo.   Tuttavia, questo comportamento può essere annullato.
+Attenzione: bisogna usare il costrutto per gli accordi <>, anche se si
+riferisce a una singola nota.
+
+"
+  doctitleit = "Far sì che la diteggiatura appaia dentro il rigo"
diff --git a/Documentation/it/texidocs/alternative-bar-numbering.texidoc b/Documentation/it/texidocs/alternative-bar-numbering.texidoc
new file mode 100644 (file)
index 0000000..573a546
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Si possono impostare due metodi alternativi di numerazione della battuta, utili
+specialmente per le ripetizioni.
+
+"
+  doctitleit = "Numeri di battuta alternativi"
diff --git a/Documentation/it/texidocs/alternative-breve-notes.texidoc b/Documentation/it/texidocs/alternative-breve-notes.texidoc
new file mode 100644 (file)
index 0000000..fe92518
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le note brevi sono disponibili anche con due linee verticali su ciascun
+lato della testa invece di una sola e in stile barocco.
+
+"
+  doctitleit = "Note brevi alternative"
index c21b53778aa1d167988e5435cdd7633d233655a0..9a22927eb94ce93f66844684a20665032deaed82 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Se si aggiunge l'incisore @code{Ambitus_engraver} al contesto @code{Staff} viene
 creato un solo ambitus per il rigo, anche nel caso di righi che hanno più
index 6653eb67891b948e5965067a8e52138d746a1da9..ecfab98fdb144ddc3fb79ceef9ef7900b2b6a043 100644 (file)
@@ -1,8 +1,8 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Questo esempio mostra come realizzare una trascrizione moderna di musica
-gregoriana. La musica gregoriana non presenta suddivisione in misure né gambi;
-utilizza soltanto le teste della minima e della semiminima, e dei segni
+gregoriana. La musica gregoriana non presenta la suddivisione in misure né gambi;
+impiega soltanto le teste della minima e della semiminima, e dei segni
 appositi che indicano pause di diversa lunghezza.
 
 "
index 75a7d29621bb1b39f54d62c88e097e04e9ae1b95..3aa8adf95ff94dfbadf5a0295fb3b919208a2cfb 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Quando si trascrive musica mensurale, può essere utile inserire all'inizio del
 pezzo un incipit che indichi l'intonazione e il tempo originali. Le stanghette
index c0caba3a55c1820c2b2588f7a094038485d8d12b..95e4936266acf2921ec2ca39f8aa5920ed112221 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
-Questo modello presenta un modo di impostare un salmo anglicano.  Mostra
-anche come le strofe possono essere aggiunte come testo separato al di sotto
+Questo modello presenta un modo per impostare un salmo anglicano.  Mostra
+anche come le strofe possano essere aggiunte come testo separato al di sotto
 della musica.  Le due strofe sono scritte con stili diversi per illustrare
 le varie possibilità.
 
index a5b739def65bf47840c983c397c5e7d52818432d..f2e5bc471413abe9805146e95527e2d60056256d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 La proprietà @code{shapeNoteStyles} può essere usata per definire vari
 stili di teste di nota per ogni grado della scala (definita dall'armatura
diff --git a/Documentation/it/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc b/Documentation/it/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc
new file mode 100644 (file)
index 0000000..12c5ef1
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+LilyPond può modificare la  direzione del gambo della nota centrale di un
+rigo in modo che segua la melodia: occorre aggiungere l'incisore
+@code{Melody_engraver} al contesto Voice e sovrascrivere la
+proprietà @code{neutral-direction} di Stem.
+"
+  doctitleit = "Cambiare automaticamente la direzione del gambo della nota centrale in base alla melodia"
diff --git a/Documentation/it/texidocs/avoiding-collisions-with-chord-fingerings.texidoc b/Documentation/it/texidocs/avoiding-collisions-with-chord-fingerings.texidoc
new file mode 100644 (file)
index 0000000..2ba3009
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Diteggiature e numeri di corda applicati a note individuali evitano
+automaticamente le travature e i gambi, ma questo non vale per diteggiature
+e numeri di corda applicati alle singole note di un accordo.  L'esempio
+seguente mostra come aggirare questo comportamento predefinito.
+
+"
+  doctitleit = "Evitare le collisioni con le diteggiature degli accordi"
diff --git a/Documentation/it/texidocs/beam-endings-in-score-context.texidoc b/Documentation/it/texidocs/beam-endings-in-score-context.texidoc
new file mode 100644 (file)
index 0000000..a54de81
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le regole relative alle estremità delle travature definite nel contesto @code{Score}
+si applicano a tutti i righi, ma possono essere modificate anche ai livelli
+@code{Staff} e @code{Voice}:
+
+"
+  doctitleit = "Estremità delle travature nel contesto Score"
diff --git a/Documentation/it/texidocs/beams-across-line-breaks.texidoc b/Documentation/it/texidocs/beams-across-line-breaks.texidoc
new file mode 100644 (file)
index 0000000..d6fb266
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le interruzioni di linea sono di norma proibite quando le travature attraversano
+la stanghetta di una battuta. Si può cambiare questo comportamento nel modo
+seguente:
+
+"
+  doctitleit = "Travature che attraversano le interruzioni di linea"
diff --git a/Documentation/it/texidocs/changing-beam-knee-gap.texidoc b/Documentation/it/texidocs/changing-beam-knee-gap.texidoc
new file mode 100644 (file)
index 0000000..e23d52a
--- /dev/null
@@ -0,0 +1,12 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le travature angolari vengono inserite automaticamente quando viene
+rilevata un'ampia distanza tra le teste di nota.  Questo comportamento
+può essere regolato attraverso la proprietà @code{auto-knee-gap}.  Viene
+disegnata una travatura angolare se la distanza è più grande del valore
+di @code{auto-knee-gap} più la larghezza della travatura (che dipende dalla
+durata delle note e dall'inclinazione della travatura).  Il valore predefinito
+di @code{auto-knee-gap} è 5.5 spazi rigo.
+
+"
+  doctitleit = "Modificare la distanza delle travature angolari"
diff --git a/Documentation/it/texidocs/changing-form-of-multi-measure-rests.texidoc b/Documentation/it/texidocs/changing-form-of-multi-measure-rests.texidoc
new file mode 100644 (file)
index 0000000..a958182
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Se la pausa multipla dura dieci misure o un numero inferiore a dieci, nel rigo
+apparirà una serie di pause di longa  e di breve (chiamate in tedesco @qq{Kirchenpausen}
+- pause ecclesiastiche); altrimenti apparirà una semplice linea. Il numero
+predefinito di dieci può essere cambiato sovrascrivendo la proprietà
+@code{expand-limit}..
+
+"
+  doctitleit = "Modificare la forma delle pause multiple"
diff --git a/Documentation/it/texidocs/changing-partcombine-texts.texidoc b/Documentation/it/texidocs/changing-partcombine-texts.texidoc
new file mode 100644 (file)
index 0000000..f9249a0
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Quando si usa la funzionalità di combinazione automatica delle parti, si può
+modificare il testo delle sezioni soliste e dell'unisono:
+
+"
+  doctitleit = "Modificare le indicazioni testuali di partcombine"
diff --git a/Documentation/it/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc b/Documentation/it/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc
new file mode 100644 (file)
index 0000000..86c7ebe
--- /dev/null
@@ -0,0 +1,13 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il testo usato per i crescendo e i decrescendo può essere cambiato
+modificando le proprietà di contesto @code{crescendoText} e
+@code{decrescendoText}.
+
+Lo stile della linea dell'estensore può essere cambiato modificando la
+proprietà @code{'style} di @code{DynamicTextSpanner}.  Il valore predefinito
+è @code{'dashed-line}; gli altri valori possibili sono @code{'line},
+@code{'dotted-line} e @code{'none}.
+
+"
+  doctitleit = "Nascondere la linea di estensione per le dinamiche testuali"
index 58008b4340909d94b7833aa1f188d49f5865433f..ad3649c385f9a3cde8c3d6441c3db5867e7e32b0 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
-È possibile cambiare le impostazioni predefinite dell'intervallo
-dell'ambitus.
+È possibile cambiare le impostazioni predefinite dell'intervallo tra le
+teste di nota dell'ambitus e la linea che le collega.
 
 "
   doctitleit = "Modifica dell'intervallo dell'ambitus"
diff --git a/Documentation/it/texidocs/changing-the-breath-mark-symbol.texidoc b/Documentation/it/texidocs/changing-the-breath-mark-symbol.texidoc
new file mode 100644 (file)
index 0000000..7a3975a
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il glifo del respiro può essere modificato sovrascrivendo la proprietà
+@code{text} dell'oggetto di formattazione @code{BreathingSign} con
+qualsiasi testo incluso in un blocco markup.
+
+"
+  doctitleit = "Cambiare il simbolo del segno di respiro"
diff --git a/Documentation/it/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc b/Documentation/it/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc
new file mode 100644 (file)
index 0000000..187fa43
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il numero di punti di aumentazione su una singola nota può essere modificato
+in modo indipendente dai punti posizionati dopo la nota.
+
+"
+  doctitleit = "Modifica del numero di punti di aumentazione per nota"
diff --git a/Documentation/it/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc b/Documentation/it/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc
new file mode 100644 (file)
index 0000000..50ec127
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Per cambiare il tempo del file MIDI senza che appaia l'indicazione metronomica, basta renderla invisibile.
+
+"
+  doctitleit = "Modificare il tempo senza mostrare l'indicazione metronomica"
diff --git a/Documentation/it/texidocs/changing-the-tuplet-number.texidoc b/Documentation/it/texidocs/changing-the-tuplet-number.texidoc
new file mode 100644 (file)
index 0000000..d5206d8
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Di norma compare sulla parentesi del gruppo irregolare solo il
+numeratore del numero del gruppo irregolare. Ma è possibile
+mostrare la frazione num:den del numero del gruppo irregolare
+oppure nascondere del tutto il numero.
+
+"
+  doctitleit = "Modifica del numero del gruppo irregolare"
diff --git a/Documentation/it/texidocs/combining-two-parts-on-the-same-staff.texidoc b/Documentation/it/texidocs/combining-two-parts-on-the-same-staff.texidoc
new file mode 100644 (file)
index 0000000..ceda6a5
--- /dev/null
@@ -0,0 +1,18 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Lo strumento di unione delle parti (il comando @code{\\partcombine}) permette
+di combinare varie parti sullo stesso rigo.  Indicazioni testuali come
+@qq{solo} e @qq{a2} sono aggiunte automaticamente; per toglierele basta
+impostare la proprietà @code{printPartCombineTexts} su @code{f}.
+Per le partiture vocali (inni), non c'è bisogno di aggiungere i testi
+@qq{solo/a2}, quindi dovrebbero essere disattivati.   Tuttavia potrebbe
+convenire non usarlo se c'è una qualche parte solista, perché non
+verrebbe indicata.  In tali casi è preferibile usare la notazione
+polifonica normale.
+
+Questo frammento illustra i tre modi con cui due parti possono essere stampate
+su uno stesso rigo: normale polifonia, @code{\\partcombine} senza testo e
+@code{\\partcombine} con testo.
+
+"
+  doctitleit = "Combinare due parti sullo stesso rigo"
diff --git a/Documentation/it/texidocs/conducting-signs,-measure-grouping-signs.texidoc b/Documentation/it/texidocs/conducting-signs,-measure-grouping-signs.texidoc
new file mode 100644 (file)
index 0000000..2d26f50
--- /dev/null
@@ -0,0 +1,25 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il raggruppamento delle pulsazioni all'interno della misura è regolato dalla
+proprietà di contesto @code{beatStructure}.  I valori di @code{beatStructure} per
+varie indicazioni di tempo vengono stabiliti in @file{scm/time-signature-settings.scm}.  Questi
+valori possono essere impostati o modificati con @code{\\set}.  Altrimenti, si
+può usare @code{\\time} per impostare sia l'indicazione di tempo che la struttura
+delle pulsazioni.  Per farlo si specifica il raggruppamento interno delle pulsazioni in
+una misura in una lista di numeri (nella sintassi di Scheme) prima dell'indicazione
+di tempo.
+
+@code{\\time} agisce nel contesto @code{Timing}, dunque non reimposterà i
+i valori di @code{beatStructure} e @code{baseMoment} che sono impostati in
+altri contesti di più basso livello, come @code{Voice}.
+
+Se si include l'incisore @code{Measure_grouping_engraver} in uno dei
+contesti che regolano l'aspetto, appariranno i segni di raggruppamento
+della misura.  Tali segni facilitano la lettura di musica moderna ritmicamente
+complessa.
+Nell'esempio la misura di 9/8 è raggruppata in due diversi schemi usando
+due metodi differenti, mentre la misura di 5/8 è raggruppata in base alle
+impostazioni predefinite in @file{scm/time-signature-settings.scm}:
+
+"
+  doctitleit = "Segni per la conduzione, segni di raggruppamento della misura"
diff --git a/Documentation/it/texidocs/contemporary-glissando.texidoc b/Documentation/it/texidocs/contemporary-glissando.texidoc
new file mode 100644 (file)
index 0000000..4b18fc1
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Un glissando contemporaneo senza una nota finale può essere creato usando
+una nota nascosta e un tempo di cadenza.
+
+"
+  doctitleit = "Glissando contemporaneo"
diff --git a/Documentation/it/texidocs/controlling-the-placement-of-chord-fingerings.texidoc b/Documentation/it/texidocs/controlling-the-placement-of-chord-fingerings.texidoc
new file mode 100644 (file)
index 0000000..35bff93
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il posizionamento dei numeri della diteggiatura può essere regolato in modo
+preciso.  Perché l'orientamento funzioni, occorre usare il costrutto per
+gli accordi <> anche per una nota singola.
+
+"
+  doctitleit = "Controllare il posizionamento delle diteggiature di un accordo"
diff --git a/Documentation/it/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc b/Documentation/it/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc
new file mode 100644 (file)
index 0000000..5a5e011
--- /dev/null
@@ -0,0 +1,13 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+L'ordine verticale degli script è determinato dalla proprietà
+@code{'script-priority}. Più il numero è piccolo, più sarà posto
+vicino alla nota. In questo esempio, il simbolo di diesis (oggetto
+@code{TextScript}) ha prima la priorità più bassa, dunque è posto più
+in basso nel primo esempio. Nel secondo, il trillo (oggetto @code{Script}) ha
+la priorità più bassa, quindi si trova all'interno. Quando due oggetti hanno
+la stessa  priorità, l'ordine in cui sono inseriti determina quale viene
+prima.
+
+"
+  doctitleit = "Controllo dell'ordine verticale degli script"
diff --git a/Documentation/it/texidocs/controlling-tuplet-bracket-visibility.texidoc b/Documentation/it/texidocs/controlling-tuplet-bracket-visibility.texidoc
new file mode 100644 (file)
index 0000000..f5f9536
--- /dev/null
@@ -0,0 +1,12 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il comportamento predefinito relativo alla visibilità della parentesi quadra
+del gruppo irregolare è di mostrare una parentesi a meno che non ci sia
+una travatura della stessa lunghezza del gruppo.  Per controllare la
+visibilità di tale parentesi, si imposta la proprietà @code{'bracket-visibility}
+su @code{#t} (mostra sempre la parentesi), @code{#f} (non mostrare mai la
+parentesi) o @code{#'if-no-beam} (mostra la parentesi solo se non c'è una
+travatura).
+
+"
+  doctitleit = "Controllare la visibilità della parentesi del gruppo irregolare"
diff --git a/Documentation/it/texidocs/creating-a-delayed-turn.texidoc b/Documentation/it/texidocs/creating-a-delayed-turn.texidoc
new file mode 100644 (file)
index 0000000..d10f1c6
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Creare un gruppetto ritardato, dove la nota più bassa del gruppetto usa
+l'alterazione, richiede vari \override.  La proprietà
+@code{outside-staff-priority} deve essere impostata su @code{#f}, perché
+altrimenti questa avrebbe la precedenza sulla proprietà @code{avoid-slur}.  Il
+valore di @code{halign} serve a posizionare il gruppo orizzontalmente.
+
+"
+  doctitleit = "Creare un gruppetto ritardato"
diff --git a/Documentation/it/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc b/Documentation/it/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc
new file mode 100644 (file)
index 0000000..dc5692b
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Si può disegnare un arpeggio che attraversa delle note in voci diverse dello
+stesso rigo se si aggiunge l'incisore @code{Span_arpeggio_engraver} nel
+contesto @code{Staff}:
+
+"
+  doctitleit = "Creare degli arpeggi che attraversano note appartenenti a voci diverse"
diff --git a/Documentation/it/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc b/Documentation/it/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc
new file mode 100644 (file)
index 0000000..d084e25
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+In un rigo per pianoforte (@code{PianoStaff}), è possibile far sì che un
+arpeggio attraversi i righi impostando la proprietà @code{PianoStaff.connectArpeggios}.
+
+"
+  doctitleit = "Creare degli arpeggi che attraversano il rigo del pianoforte"
diff --git a/Documentation/it/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc b/Documentation/it/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc
new file mode 100644 (file)
index 0000000..7570ae1
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Si possono creare arpeggi che attraversano i righi in contesti diversi da
+@code{GrandStaff}, @code{PianoStaff} e @code{StaffGroup} se l'incisore
+@code{Span_arpeggio_engraver} è incluso nel contesto @code{Score}.
+
+"
+  doctitleit = "Creare degli arpeggi che attraversano i righi in altri contesti"
diff --git a/Documentation/it/texidocs/creating-metronome-marks-in-markup-mode.texidoc b/Documentation/it/texidocs/creating-metronome-marks-in-markup-mode.texidoc
new file mode 100644 (file)
index 0000000..fa2a586
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Si possono creare nuove indicazioni metronomiche in modalità testuale, ma
+non modificheranno il tempo del file MIDI.
+
+"
+  doctitleit = "Creare indicazioni metronomiche in modalità testuale"
diff --git a/Documentation/it/texidocs/cross-staff-tremolos.texidoc b/Documentation/it/texidocs/cross-staff-tremolos.texidoc
new file mode 100644 (file)
index 0000000..37e39d6
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Dato che @code{\\repeat tremolo} si aspetta esattamente due argomenti musicali per
+i tremoli di accordi, la nota o l'accordo che cambiano rigo in un tremolo che
+attraversa i righi devono essere posti tra parentesi graffe insieme al
+comando @code{\\change Staff}.
+
+"
+  doctitleit = "Tremoli attraverso i righi"
diff --git a/Documentation/it/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc b/Documentation/it/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc
new file mode 100644 (file)
index 0000000..4b3daf0
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+La direzione predefinita dei gambi sulla linea centrale del rigo si
+imposta con la proprietà @code{neutral-direction} dell'oggetto @code{Stem}.
+
+"
+  doctitleit = "Direzione predefinita dei gambi sulla linea centrale del rigo"
diff --git a/Documentation/it/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc b/Documentation/it/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc
new file mode 100644 (file)
index 0000000..c271fa5
--- /dev/null
@@ -0,0 +1,15 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Se c'è un solo rigo in uno dei tipi di rigo @code{ChoirStaff} o
+@code{StaffGroup}, la parentesi e la stanghetta iniziale non
+appaiono.  Si può modificare questo comportamento predefinito
+sovrascrivendo @code{collapse-height} e impostando un valore
+inferiore al numero di linee del rigo.
+
+Nei contesti @code{PianoStaff} e @code{GrandStaff}, dove i sistemi
+iniziano con una parentesi graffa invece di una parentesi quadra,
+occorre impostare un'altra proprietà, come si vede nel secondo
+sistema dell'esempio.
+
+"
+  doctitleit = "Mostrare la parentesi anche se c'è un solo rigo nel sistema"
diff --git a/Documentation/it/texidocs/dynamics-custom-text-spanner-postfix.texidoc b/Documentation/it/texidocs/dynamics-custom-text-spanner-postfix.texidoc
new file mode 100644 (file)
index 0000000..905b0bd
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Funzioni postfix per estensori testuali personalizzati del crescendo.  Gli
+estensori devono iniziare sulla prima nota della misura; e bisogna usare
+-\\mycresc, altrimenti l'inizio dell'estensore viene assegnato alla
+nota successiva.
+"
+  doctitleit = "Estensore testuale della dinamica personalizzato"
diff --git a/Documentation/it/texidocs/dynamics-text-spanner-postfix.texidoc b/Documentation/it/texidocs/dynamics-text-spanner-postfix.texidoc
new file mode 100644 (file)
index 0000000..0339153
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Si possono definire estensori testuali personalizzati che fanno uso delle
+forcine e dei crescendo testuali.  @code{\\<} e @code{\\>} generano le
+forcine, @code{\\cresc} etc. generano gli estensori testuali.
+"
+  doctitleit = "Estensore testuale della dinamica personalizzato"
diff --git a/Documentation/it/texidocs/engraving-ties-manually.texidoc b/Documentation/it/texidocs/engraving-ties-manually.texidoc
new file mode 100644 (file)
index 0000000..7b4c14c
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le legature di valore possono essere disegnate a mano cambiando la
+proprietà @code{tie-configuration} dell'oggetto @code{TieColumn}. Il
+primo numero indica la distanza dal centro del rigo nell'unità di
+metà spazio rigo, mentre il secondo numero indica la
+direzione (1 = su, -1 = giù).
+
+"
+  doctitleit = "Disegnare manualmente le legature di valore"
diff --git a/Documentation/it/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc b/Documentation/it/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc
new file mode 100644 (file)
index 0000000..f669834
--- /dev/null
@@ -0,0 +1,16 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+La proprietà @code{tupletSpannerDuration} imposta la durata di ognuno dei
+gruppi irregolari compresi tra parentesi dopo il comando @code{\\tuplet}.
+In questo modo si possono inserire molti gruppi irregolari consecutivi
+all'interno di una singola espressione @code{\\tuplet}, risparmiando così
+tempo e spazio.
+
+Ci sono vari modi per impostare @code{tupletSpannerDuration}.  Il
+comando @code{\\tupletSpan} la imposta su una certa durata e poi
+la annulla quando invece di una durata viene specificato
+@code{\\default}.  Altrimenti si può usare un argomento
+opzionale con @code{\\tuplet}.
+
+"
+  doctitleit = "Inserire vari gruppi irregolari usando una sola volta il comando \\tuplet"
diff --git a/Documentation/it/texidocs/extending-glissandi-across-repeats.texidoc b/Documentation/it/texidocs/extending-glissandi-across-repeats.texidoc
new file mode 100644 (file)
index 0000000..b590a54
--- /dev/null
@@ -0,0 +1,14 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Un glissando che si estende in vari blocchi @code{\\alternative} può
+essere simulato aggiungendo all'inizio di ogni blocco @code{\\alternative}
+una nota di abbellimento nascosta da cui inizia un glissando.  La nota di
+abbellimento deve avere la stessa altezza della nota da cui parte il
+glissando iniziale.  In questo frammento si usa una funzione musicale
+che prende come argomento l'altezza  della nota di abbellimento.
+
+Attenzione: nella musica polifonica la nota di abbellimento deve avere una nota
+di abbellimento corrispondente in tutte le altre voci.
+
+"
+  doctitleit = "Estendere i glissandi sulle volte delle ripetizioni"
diff --git a/Documentation/it/texidocs/flat-flags-and-beam-nibs.texidoc b/Documentation/it/texidocs/flat-flags-and-beam-nibs.texidoc
new file mode 100644 (file)
index 0000000..3384649
--- /dev/null
@@ -0,0 +1,29 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+È possibile ottenere delle codette su note isolate e dei tratti di suddivisione all'estremità
+della travatura con una combinazione di @code{stemLeftBeamCount},
+@code{stemRightBeamCount} e una coppia di indicatori della travatura @code{[]}.
+
+Per ottenere delle codette rivolte a destra, si usa la coppia di indicatori
+@code{[]} e si imposta @code{stemLeftBeamCount} a zero (vedi Example 1).
+
+Per ottenere delle codette rivolte a sinistra, si imposta invece
+@code{stemRightBeamCount} (Example 2).
+
+Perché i tratti di suddivisione alla fine di un gruppo di note unite da travatura siano rivolti
+a destra, si imposta @code{stemRightBeamCount} su un valore positivo. Perché i
+tratti di suddivisione all'inizio di un gruppo di note unite da travatura siano rivolti a sinistra,
+si imposta invece @code{stemLeftBeamCount} (Example 3).
+
+Talvolta, ad esempio per una nota isolata circondata da pause, ha senso
+avere una coda che punti sia a destra che a sinistra. Lo si può fare con
+una coppia di indicatori di travatura @code{[]} da soli (Example 4).
+
+(Nota che @code{\\set stemLeftBeamCount} è sempre equivalente a
+@code{\\once \\set}.  In altre parole, le impostazioni che definiscono
+il conteggio delle travature non @qq{permangono}, quindi la coppia di code
+attaccate al @code{c'16[]} solitario nell'ultimo esempio non hanno nulla a
+che fare con l'impostazione @code{\\set} di due note prima.)
+
+"
+  doctitleit = "Code e punte delle travature"
diff --git a/Documentation/it/texidocs/forcing-horizontal-shift-of-notes.texidoc b/Documentation/it/texidocs/forcing-horizontal-shift-of-notes.texidoc
new file mode 100644 (file)
index 0000000..b777e6a
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Quando il motore tipografico non riesce a risolvere una situazione, si può
+usare la sintassi che sovrascrive le decisioni tipografiche.  L'unità di
+misura usata è lo spazio del rigo.
+
+"
+  doctitleit = "Forzare lo spostamento orizzonatale delle note"
diff --git a/Documentation/it/texidocs/grid-lines--changing-their-appearance.texidoc b/Documentation/it/texidocs/grid-lines--changing-their-appearance.texidoc
new file mode 100644 (file)
index 0000000..c27961f
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+L'aspetto delle linee della griglia può essere modificato sovrascrivendo
+alcune delle loro proprietà.
+
+"
+  doctitleit = "Modificare l'aspetto delle linee della griglia"
diff --git a/Documentation/it/texidocs/guitar-strum-rhythms.texidoc b/Documentation/it/texidocs/guitar-strum-rhythms.texidoc
new file mode 100644 (file)
index 0000000..0116292
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Per la musica per chitarra, è possibile mostrare i ritmi di accompagnamento, insieme
+alle note della melodia e ai nomi e ai diagrammi degli accordi.
+
+"
+  doctitleit = "Ritmi di accompagnamento per chitarra"
index be4a8f006c922833a26cabc7653a1cec3dcdbd7b..2c7bfbc0c4d05ee19712a0d90303af9a51beaf7b 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
-Questo frammento mostra come nascondere le alterazioni delle note con
+Questo frammento mostra come nascondere le alterazioni delle note unite alla figura precedente mediante una
 legatura di valore all'inizio di un nuovo sistema
 
 "
diff --git a/Documentation/it/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc b/Documentation/it/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc
new file mode 100644 (file)
index 0000000..7cc5313
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+I cambi di dinamica in stile testuale (come cresc. e dim.) appaiono con
+una linea tratteggiata che mostra la loro estensione.  Questa linea
+può essere soppressa nel modo seguente:
+
+"
+  doctitleit = "Nascondere la linea di estensione per le dinamiche testuali"
index cebc7d05abca43e7a450581ea0b9567ab1bb38f4..d8883ad940432f70e81f33a947df177ec09294b9 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Il codice seguente presenta un modo di impostare un inno in cui ogni verso
 inizia e finisce con una misura parziale.  Mostra anche come aggiungere delle
diff --git a/Documentation/it/texidocs/inserting-a-caesura.texidoc b/Documentation/it/texidocs/inserting-a-caesura.texidoc
new file mode 100644 (file)
index 0000000..0adfa6a
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+I segni di cesura possono essere creati sovrascrivendo la proprietà @code{'text}
+dell'oggetto @code{BreathingSign}. È disponibile anche un segno di cesura
+curvo.
+
+"
+  doctitleit = "Inserire una cesura"
diff --git a/Documentation/it/texidocs/isolated-percent-repeats.texidoc b/Documentation/it/texidocs/isolated-percent-repeats.texidoc
new file mode 100644 (file)
index 0000000..68fee2c
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Si possono stampare anche segni di percentuale isolati.
+
+"
+  doctitleit = "Ripetizioni con segni di percentuale isolati"
index 1e5988fba626c9b4308dd931473b2978f7db94a2..7d56a61c9e718f1197961fad2c10cd65d4f2a03c 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Ecco un modello piuttosto complesso, per un gruppo jazz. Si noti che tutti
 gli strumenti sono in @code{\\key c \\major}. Si tratta della tonalità
diff --git a/Documentation/it/texidocs/making-glissandi-breakable.texidoc b/Documentation/it/texidocs/making-glissandi-breakable.texidoc
new file mode 100644 (file)
index 0000000..db18607
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Per permettere a un glissando di andare a capo se capita su un'interruzione di
+riga, si impostano le proprietà @code{breakable} e @code{after-line-breaking}
+su @code{#t}:
+
+"
+  doctitleit = "Lasciare che i glissandi vadano a capo"
diff --git a/Documentation/it/texidocs/making-slurs-with-complex-dash-structure.texidoc b/Documentation/it/texidocs/making-slurs-with-complex-dash-structure.texidoc
new file mode 100644 (file)
index 0000000..0d862f6
--- /dev/null
@@ -0,0 +1,19 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le legature di portamento possono avere schemi di tratteggio complessi
+definendo la proprietà @code{dash-definition}.  @code{dash-definition} è
+una lista di @code{dash-elements}.  Un @code{dash-element} è una lista
+di parametri che definiscono il comportamento del tratteggio per un
+segmento della legatura.
+
+La legatura di portamento è definita come il parametro t della curva di
+bezier che va da 0 sul margine sinistro della legatura fino a 1 su quello
+destro.  @code{dash-element}  è una lista di @code{(inizio-t fine-t frazione-trattino
+punto-trattino)}.  La regione della legatura di portamento che va da @code{inizio-t} a
+@code{fine-t} avrà una frazione @code{frazione-trattino} di ogni
+@code{punto-trattino} nero.  @code{punto-trattino} viene definito in spazi
+rigo.  @code{frazione-trattino} è impostato su 1 per una legatura di portamento
+continua.
+
+"
+  doctitleit = "Legature di portamento con complesse strutture di tratteggio"
diff --git a/Documentation/it/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc b/Documentation/it/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc
new file mode 100644 (file)
index 0000000..ef0b77a
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+In ambito didattico può essere utile rendere più spesso una linea del
+rigo (per esempio, la linea centrale, o per sottolineare la linea
+della chiave di Sol).  Per farlo si possono aggiungere altre linee
+e posizionarle molto vicino alla linea che deve essere evidenziata,
+usando la proprietà @code{line-positions} dell'oggetto @code{StaffSymbol}.
+
+"
+  doctitleit = "Rendere alcune linee del rigo più spesse delle altre"
diff --git a/Documentation/it/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc b/Documentation/it/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc
new file mode 100644 (file)
index 0000000..8fac1ab
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+La formattazione mensurale, in cui le stanghette non appaiono sui righi ma
+nello spazio tra i righi, si può ottenere usando @code{StaffGroup} al posto
+di @code{ChoirStaff}.  La stanghetta sui righi viene nascosta impostando
+la proprietà @code{transparent}.
+
+"
+  doctitleit = "Formattazione mensurale (stanghette tra i righi)"
diff --git a/Documentation/it/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc b/Documentation/it/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc
new file mode 100644 (file)
index 0000000..751df0c
--- /dev/null
@@ -0,0 +1,12 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le abbreviazioni sono definite in @samp{ly/script-init.ly}, dove sono
+assegnati valori predefiniti alle variabili @code{dashHat}, @code{dashPlus},
+@code{dashDash}, @code{dashBang}, @code{dashLarger}, @code{dashDot} e
+@code{dashUnderscore}.  Questi valori predefiniti possono essere
+modificati. Ad esempio, per associare l'abbreviazione @code{-+} (@code{dashPlus})
+al simbolo del trillo invece che al simbolo + predefinito, si assegna il
+valore @code{trill} alla variabile @code{dashPlus}:
+
+"
+  doctitleit = "Modificare i valori predefiniti per le abbreviazioni delle articolazioni"
diff --git a/Documentation/it/texidocs/multi-measure-rest-markup.texidoc b/Documentation/it/texidocs/multi-measure-rest-markup.texidoc
new file mode 100644 (file)
index 0000000..55abcbc
--- /dev/null
@@ -0,0 +1,13 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il testo a margine di una pausa multipla viene centrato sopra o sotto
+di essa.  Se il testo è lungo, la misura non si espanderà.  Per espandere
+la pausa multipla in modo che si allinei col testo, conviene usare un accordo
+vuoto con del testo attaccato prima della pausa multipla.
+
+Il testo così attaccato a una nota spaziatrice viene allineato a sinistra della
+posizione in cui la nota sarebbe posta nella misura, ma se la lunghezza della
+misura è determinata dalla lunghezza del testo, il testo verrà centrato.
+
+"
+  doctitleit = "Testo a margine delle pause multiple"
diff --git a/Documentation/it/texidocs/nesting-staves.texidoc b/Documentation/it/texidocs/nesting-staves.texidoc
new file mode 100644 (file)
index 0000000..0df20c0
--- /dev/null
@@ -0,0 +1,15 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Si può usare la proprietà @code{systemStartDelimiterHierarchy} per creare
+gruppi di righi annidati più complessi.  Il comando @code{\\set
+StaffGroup.systemStartDelimiterHierarchy} prende come argomento una lista
+alfabetica dell'insieme di righi prodotti. Prima di ogni rigo si può
+assegnare un delimitatore di inizio del sistema. Deve essere racchiuso
+tra parentesi e collega tutti i righi compresi tra le parentesi.  Gli
+elementi nella lista possono essere omessi, ma la prima parentesi quadra
+collega sempre tutti i righi. Le possibilità sono @code{SystemStartBar},
+@code{SystemStartBracket}, @code{SystemStartBrace} e
+@code{SystemStartSquare}.
+
+"
+  doctitleit = "Annidare i righi"
diff --git a/Documentation/it/texidocs/non-default-tuplet-numbers.texidoc b/Documentation/it/texidocs/non-default-tuplet-numbers.texidoc
new file mode 100644 (file)
index 0000000..a5f4170
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+LilyPond fornisce anche funzioni di formattazione che permettono di creare
+numeri di gruppi irregolari diversi dalla frazione vera e propria, così come
+di aggiungere un valore di nota al numero o alla frazione di un gruppo
+irregolare.
+
+"
+  doctitleit = "Numeri non predefiniti per i gruppi irregolari"
index 1307a90e93b88131e50e2abd071f91baa9d4833f..bcd17cefdbf59213aeaa62bc35db49ef6b2c2139 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Il comando @code{\\key} comunemente usato imposta la proprietà
 @code{keySignature}, che fa parte del contesto @code{Staff}.
index 3745ca141c61b6e863e47ceaf5394633b5b60674..0eee8468f6b1f1f5c50bb7eab74df1e1f3733051 100644 (file)
@@ -1,11 +1,11 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Le teste di nota con nome della nota usano la proprietà @code{note-names}
 dell'oggetto @code{NoteHead} per determinare cosa appaia
 all'interno della testa.  È possibile sovrascrivere questa proprietà
-e mostrare numeri che corrispondano ai gradi della scala.
+e mostrare numeri corrispondenti ai gradi della scala.
 
-Si può creare un semplice incisore che faccia questo per oggni
+Si può creare un semplice incisore che faccia questo per ogni
 oggetto testa di nota che incontra.
 "
   doctitleit = "Numeri dentro le teste di nota"
index b65a75f79790495ece025c08280aa2596ab6f498..3d9bf384c5915f71534934debe0f0ed0c5df2795 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Questo modello mostra come usare i contesti annidati @code{StaffGroup} e
 @code{GrandStaff} per creare sottogruppi degli strumenti dello stesso
index 20250b9f464f8c6802648aba9fc05075c7a71538..e22ca9d60e74fe1dfb98d20a992135978e3547a0 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Internamente, @code{\\ottava} imposta le proprietà @code{ottavation} (ad
 esempio, su @code{8va} o @code{8vb}) e @code{middleCPosition}.  Per
diff --git a/Documentation/it/texidocs/partcombine-and-autobeamoff.texidoc b/Documentation/it/texidocs/partcombine-and-autobeamoff.texidoc
new file mode 100644 (file)
index 0000000..9433792
--- /dev/null
@@ -0,0 +1,31 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+La funzione @code{\\autoBeamOff}, se usata insieme a
+@code{\\partcombine}, può essere difficile da comprendere.
+
+È preferibile usare invece
+
+
+@code{\\set Staff.autoBeaming = ##f}
+
+
+per assicurarsi che la disposizione delle travature sia disabilitata
+per tutto il rigo.
+
+
+@code{\\partcombine} funziona con 3 voci -- gambo in su singolo,
+gambo in giù singolo, gambo in su unito.
+
+
+L'uso di @code{\\autoBeamOff} all'interno del primo argomento di partcombine
+ha effetto sulla voce che è attiva al momento in cui la funzione viene elaborata,
+ovvero sul gambo in su singolo o sul gambo in giù unito. L'uso di @code{\\autoBeamOff}
+nel secondo argomento avrà effetto sulla voce che ha il gambo in giù singolo.
+
+
+Per poter usare @code{\\autoBeamOff} per impedire tutte le disposizioni automatiche
+delle travature, se usato con @code{\\partcombine}, è necessario richiamare
+tre volte la funzione @code{\\autoBeamOff}.
+
+"
+  doctitleit = "Partcombine e autoBeamOff"
diff --git a/Documentation/it/texidocs/percent-repeat-count-visibility.texidoc b/Documentation/it/texidocs/percent-repeat-count-visibility.texidoc
new file mode 100644 (file)
index 0000000..8351135
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+I contatori della ripetizione con segno percentuale possono essere mostrati a
+intervalli regolari impostando la proprietà di contesto @code{repeatCountVisibility}.
+
+"
+  doctitleit = "Visibilità del conto della ripetizione con segno percentuale"
diff --git a/Documentation/it/texidocs/percent-repeat-counter.texidoc b/Documentation/it/texidocs/percent-repeat-counter.texidoc
new file mode 100644 (file)
index 0000000..439663a
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le ripetizioni di misura che hanno più di due ripetizioni possono avere
+un contatore se si cambia la proprietà opportuna, come mostra questo esempio:
+
+"
+  doctitleit = "Contatore della ripetizione con segno percentuale"
diff --git a/Documentation/it/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc b/Documentation/it/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc
new file mode 100644 (file)
index 0000000..c2b5c32
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Questo esempio artificioso mostra come permettere interruzioni del rigo sia
+manuali che automatiche all'interno di un gruppo irregolare con travature.
+Si noti che le travature di questi gruppi irregolari fuori dal ritmo devono
+essere disposte manualmente.
+
+"
+  doctitleit = "Consentire l'interruzione del rigo all'interno di gruppi irregolari con travature"
index 7aa020d85bcbf8be12f83aa9df5fc002845611a6..947fe1a33525dc651e7ef0af60fb485a183de37d 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Ecco un comune doppio pentagramma per pianoforte con un po' di note.
 
index c3f97e5153e2a2cc9f2829b0989122049d51a556..536e012814027cfe694fc5530c7dd04e289b653b 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Invece di destinare un rigo a parte alla linea melodica e al suo testo, è
 possibile collocare il testo al centro di un doppio pentagramma per pianoforte.
index 06339ab602738fdce63a157c86836f78167b809d..80fc3b4806247ee3d2fda53617751500ecbe31ca 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Ecco un tipico formato per canzoni: un rigo con linea melodica e testo,
 e sotto l'accompagnamento per pianoforte.
diff --git a/Documentation/it/texidocs/positioning-grace-notes-with-floating-space.texidoc b/Documentation/it/texidocs/positioning-grace-notes-with-floating-space.texidoc
new file mode 100644 (file)
index 0000000..9b2f17e
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Se si imposta la proprietà @code{'strict-grace-spacing}, le colonne musicali
+degli abbellimenti 'fluttuano', ovvero si scollegano dalle note normali:
+prima vengono spaziate le note normali, poi le colonne musicali degli
+abbellimenti vengono messe a sinistra delle colonne delle note principali.
+
+"
+  doctitleit = "Posizionare gli abbellimenti con dello spazio fluttuante"
diff --git a/Documentation/it/texidocs/positioning-multi-measure-rests.texidoc b/Documentation/it/texidocs/positioning-multi-measure-rests.texidoc
new file mode 100644 (file)
index 0000000..70a0a4e
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Diversamente dalle pause normali, non esiste un comando predefinito per
+cambiare la posizione sul rigo di un simbolo di pausa multipla di qualsiasi
+tipo connettendolo a una nota.  Tuttavia, nella musica polifonica le pause
+multiple nelle voci dispari e pari sono separate verticalmente. Il posizionamento
+delle pause multiple si controlla nel modo seguente:
+
+"
+  doctitleit = "Posizionamento delle pause multiple"
diff --git a/Documentation/it/texidocs/positioning-text-markups-inside-slurs.texidoc b/Documentation/it/texidocs/positioning-text-markups-inside-slurs.texidoc
new file mode 100644 (file)
index 0000000..d10f8f0
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+I testi a margine devono avere la proprietà @code{outside-staff-priority}
+impostata su false per poter apparire dentro le legature di portamento.
+
+"
+  doctitleit = "Posizionare il testo a margine dentro le legature di portamento"
index 9a755b8c8850cc43f12110e0876c605108551a85..b873ae0e55d243a10c50e961cc290f402117261c 100644 (file)
@@ -1,10 +1,10 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
-Secondo le norme tipografiche standard, un segno di bequadro viene
-inserito prima di un diesis o di un bemolle se un'alterazione
-precedente sulla stessa nota deve essere cancellata.  Per cambiare
-questo comportamento si imposta la proprietà @code{extraNatural} su
-@code{f} (falso) nel contesto @code{Staff}.
+Secondo le norme tipografiche tradizionali, un segno di bequadro viene
+inserito prima di un diesis o di un bemolle se un precedente doppio diesis o
+bemolle sulla stessa nota è cancellato.  Per cambiare questo comportamento
+e seguire la pratica contemporanea, si imposta la proprietà @code{extraNatural}
+su @code{f} (falso) nel contesto @code{Staff}.
 
 "
   doctitleit = "Impedire l'inserimento automatico dei bequadri supplementari"
index b7f0a2b0e5bc1769e8981ceb1fd100e10900a179..c6dcdef76e4fd5c882f055386c27b7b2c0bfb388 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Quando l'armatura di chiave cambia, vengono inseriti automaticamente i
 segni di bequadro per annulare le alterazioni di precedenti armature.  Si
diff --git a/Documentation/it/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc b/Documentation/it/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc
new file mode 100644 (file)
index 0000000..ebaed1c
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Una stanghetta @code{.|:} può apparire all'inizio di un brano, se si
+sovrascrive la proprietà pertinente:
+
+"
+  doctitleit = "Stampare un segno  di ripetizione all'inizio di un brano"
diff --git a/Documentation/it/texidocs/printing-bar-numbers-at-regular-intervals.texidoc b/Documentation/it/texidocs/printing-bar-numbers-at-regular-intervals.texidoc
new file mode 100644 (file)
index 0000000..dca6b3a
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+I numeri di battuta possono essere resi visbili a intervalli regolari
+attraverso la proprietà @code{barNumberVisibility}. In questo esempio
+vengono mostrati ogni due misure eccetto alla fine della linea.
+
+"
+  doctitleit = "Mostrare i numeri di battuta a intervalli regolari"
diff --git a/Documentation/it/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc b/Documentation/it/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc
new file mode 100644 (file)
index 0000000..d799aba
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+I numeri di battuta possono apparire anche all'interno di rettangoli o cerchi.
+
+"
+  doctitleit = "Numeri di battuta racchiusi in rettangoli o cerchi"
diff --git a/Documentation/it/texidocs/printing-hairpins-in-various-styles.texidoc b/Documentation/it/texidocs/printing-hairpins-in-various-styles.texidoc
new file mode 100644 (file)
index 0000000..e3fd59d
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il segno di dinamica della forcella può avere diversi stili
+
+"
+  doctitleit = "Stampare le forcelle in vari stili"
diff --git a/Documentation/it/texidocs/printing-hairpins-using-al-niente-notation.texidoc b/Documentation/it/texidocs/printing-hairpins-using-al-niente-notation.texidoc
new file mode 100644 (file)
index 0000000..dcbb731
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le forcelle di dinamica possono essere rappresentate con ua punta
+tonda (notazione @qq{al niente}) impostando la proprietà @code{circled-tip}
+dell'oggetto @code{Hairpin} su @code{#t}.
+
+"
+  doctitleit = "Forcelle con notazione al niente"
diff --git a/Documentation/it/texidocs/printing-marks-at-the-end-of-a-line.texidoc b/Documentation/it/texidocs/printing-marks-at-the-end-of-a-line.texidoc
new file mode 100644 (file)
index 0000000..cef80c1
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+È possibile posizionare le indicazioni alla fine della linea corrente, invece che
+all'inizio della linea successiva.  In tali casi, può essere preferibile
+allineare l'estremità destra dell'indicazione alla stanghetta.
+"
+  doctitleit = "Posizionare le indicazioni alla fine di una linea"
diff --git a/Documentation/it/texidocs/printing-marks-on-every-staff.texidoc b/Documentation/it/texidocs/printing-marks-on-every-staff.texidoc
new file mode 100644 (file)
index 0000000..7971732
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Sebbene le indicazioni testuali siano di norma collocate solo sopra il
+rigo più alto, è possibile farle apparire su ogni rigo.
+"
+  doctitleit = "Stampare le indicazioni su ogni rigo"
diff --git a/Documentation/it/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc b/Documentation/it/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc
new file mode 100644 (file)
index 0000000..4ca4d67
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Di norma, il metronomo e i numeri di chiamata vengono posizionati sopra il
+rigo.  Per metterli sotto il rigo basta impostare correttamente la proprietà
+@code{direction} di @code{MetronomeMark} o @code{RehearsalMark}.
+
+"
+  doctitleit = "Posizionare il metronomo e i numeri di chiamata sotto il rigo"
diff --git a/Documentation/it/texidocs/printing-the-bar-number-for-the-first-measure.texidoc b/Documentation/it/texidocs/printing-the-bar-number-for-the-first-measure.texidoc
new file mode 100644 (file)
index 0000000..fadac46
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il primo numero di battuta di una partitura viene soppresso se è inferiore
+o uguale a `1'.  Se si imposta @code{barNumberVisibility} su
+@code{all-bar-numbers-visible}, verrà mostrato il numero di battuta della
+prima misura e di tutte quelle successive.  Si noti che perché funzioni è
+necessario inserire una stanghetta invisibile prima della prima nota.
+
+"
+  doctitleit = "Mostrare il numero di battuta nella prima misura"
diff --git a/Documentation/it/texidocs/redefining-grace-note-global-defaults.texidoc b/Documentation/it/texidocs/redefining-grace-note-global-defaults.texidoc
new file mode 100644 (file)
index 0000000..ab1e4a8
--- /dev/null
@@ -0,0 +1,11 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le impostazioni globali predefinite degli abbellimenti sono salvate negli
+identificatori @code{startGraceMusic}, @code{stopGraceMusic},
+@code{startAcciaccaturaMusic}, @code{stopAcciaccaturaMusic},
+@code{startAppoggiaturaMusic} e @code{stopAppoggiaturaMusic}, che
+sono definiti nel file @code{ly/grace-init.ly}.  Ridefinendoli si
+possono ottenere effetti diversi.
+
+"
+  doctitleit = "Ridefinire le impostazioni predefinite globali degli abbellimenti"
diff --git a/Documentation/it/texidocs/removing-bar-numbers-from-a-score.texidoc b/Documentation/it/texidocs/removing-bar-numbers-from-a-score.texidoc
new file mode 100644 (file)
index 0000000..badd306
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+I numeri di battuta possono essere tolti rimuovendo l'incisore
+@code{Bar_number_engraver} dal contesto @code{Score}.
+
+"
+  doctitleit = "Togliere i numeri di battuta da uno spartito"
diff --git a/Documentation/it/texidocs/removing-the-first-empty-line.texidoc b/Documentation/it/texidocs/removing-the-first-empty-line.texidoc
new file mode 100644 (file)
index 0000000..2ef24e9
--- /dev/null
@@ -0,0 +1,14 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il primo rigo vuoto si può togliere dalla partitura impostando la proprietà
+@code{remove-first} di @code{VerticalAxisGroup}.  Questa impostazione
+agisce a livello globale se posta nel blocco @code{\\layout}, a livello
+locale se posta nel rigo specifico che deve essere tolto.  Nel secondo
+caso, si deve specificare il contesto (@code{Staff} si applica solo al
+rigo corrente) prima della proprietà.
+
+Il rigo inferiore del secondo gruppo di righi non viene rimosso, perché
+l'impostazione ha effetto solo sul rigo in cui si trova.
+
+"
+  doctitleit = "Eliminare la prima linea vuota"
diff --git a/Documentation/it/texidocs/rest-styles.texidoc b/Documentation/it/texidocs/rest-styles.texidoc
new file mode 100644 (file)
index 0000000..14c3563
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Esistono vari stili di pausa.
+
+"
+  doctitleit = "Stili di pausa"
index f97f4f3492c9258728cb12085368dec587ac0e67..5edd89bc7edb683915bd06b37dc1bb7a6c8f11e3 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Modello per coro SATB (quattro righi)
 
diff --git a/Documentation/it/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc b/Documentation/it/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc
new file mode 100644 (file)
index 0000000..8a8a0b1
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Se la nota che termina una forcella si trova sul primo battito di una
+battuta, la forcella si ferma prima della stanghetta che precede la
+nota.  Si può controllare questo comportamento modificando la
+proprietà @code{'to-barline}.
+
+"
+  doctitleit = "Impostare il comportamento delle forcelle sulle stanghette"
diff --git a/Documentation/it/texidocs/setting-the-double-repeat-default-for-volte.texidoc b/Documentation/it/texidocs/setting-the-double-repeat-default-for-volte.texidoc
new file mode 100644 (file)
index 0000000..55e74b3
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Esistono tre diversi stili di doppie ripetizioni per le volte, che si
+possono impostare con @code{doubleRepeatType}.
+
+"
+  doctitleit = "Impostare la doppia ripetizione predefinita per le volte"
diff --git a/Documentation/it/texidocs/setting-the-minimum-length-of-hairpins.texidoc b/Documentation/it/texidocs/setting-the-minimum-length-of-hairpins.texidoc
new file mode 100644 (file)
index 0000000..17dab47
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Se le forcelle sono troppo corte, possono essere allungate modificando
+la proprietà @code{minimum-length} dell'oggetto @code{Hairpin}.
+
+"
+  doctitleit = "Impostare la lunghezza minima delle forcelle"
diff --git a/Documentation/it/texidocs/shortening-volta-brackets.texidoc b/Documentation/it/texidocs/shortening-volta-brackets.texidoc
new file mode 100644 (file)
index 0000000..573c2ca
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Per impostazione predefinita, le parentesi delle volte si estendono per
+tutta l'alternativa, ma si possono accorciare impostando
+@code{voltaSpannerDuration}.  Nell'esempio seguente, la parentesi dura
+una misura, che ha una durata di 3/4.
+
+"
+  doctitleit = "Accorciare le parentesi delle volte"
index 4c60b3167baa209ff75558183b3ec927d3bc3a44..69ef9377afcfe75f4e513b710ff372624669c691 100644 (file)
@@ -1,8 +1,7 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Ecco il modello di un comune spartito semplificato (lead sheet): include
-linea melodica, testo vocale, sigle degli accordi e relativi diagrammi
-per chitarra.
+linea melodica, testo vocale e sigle degli accordi.
 
 "
   doctitleit = "Modello di rigo singolo con note, testo, accordi e tasti"
index 0b691a12ef900a2f3c912bd0eb67ff0612310ff7..f09a4e3c3eddc3fe059694859b9e9486bab513ba 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Vuoi preparare uno spartito semplificato (lead sheet) con melodia e
 accordi?  La tua ricerca è finita!
index 524e43caab2dfd88c1535b630e6a98909b83bec8..a6c9b30121d100505b9c0458f3ee431f903780a6 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Questo piccolo modello presenta una semplice linea melodica con un testo. Copialo
 e incollalo, aggiungi le note e le parole. Questo esempio disabilita la
index 9e93a971095c0df41df9d851710f315d0f03c80b..a3231796b22e4175b7ce8abdda20577ea3935aa7 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Questo modello molto semplice mette a disposizione un rigo con delle note ed è
 quindi adatto per uno strumento non accompagnato o per un frammento
diff --git a/Documentation/it/texidocs/stand-alone-two-column-markup.texidoc b/Documentation/it/texidocs/stand-alone-two-column-markup.texidoc
new file mode 100644 (file)
index 0000000..03aecb7
--- /dev/null
@@ -0,0 +1,6 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il testo separato può essere disposto su varie colonne con i comandi di
+@code{\\markup}:
+"
+  doctitleit = "Testo separato su due colonne"
diff --git a/Documentation/it/texidocs/strict-beat-beaming.texidoc b/Documentation/it/texidocs/strict-beat-beaming.texidoc
new file mode 100644 (file)
index 0000000..3672cab
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Si possono impostare i tratti di suddivisione della travatura in modo che siano rivolti
+verso la relativa pulsazione.  La prima travatura fa sì che non spuntino
+i tratti di suddivisione (comportamento predefinito); la seconda travatura è orientata verso
+la pulsazione.
+
+"
+  doctitleit = "Travatura che segue strettamente il battito"
index d2581209d30c1fdfd8cccf377bb7de87fbbde95f..00fa356733bb10fa004a8774b8c871a78b1a93dd 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Questo modello presenta un semplice quartetto d'archi. Impiega anche una
 sezione @code{\\global} per definire il tempo e l'armatura di chiave.
index 673f7b75e2f09eefdb096a9a47b424023a36e6e2..58b5df322938716448ba6c1e8537676bf7c59f64 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Il frammento di codice del @qq{Modello per quartetto d'archi} crea un bel
 quartetto, ma cosa fare se si ha bisogno di creare le singole parti? Questo
diff --git a/Documentation/it/texidocs/subdividing-beams.texidoc b/Documentation/it/texidocs/subdividing-beams.texidoc
new file mode 100644 (file)
index 0000000..6683853
--- /dev/null
@@ -0,0 +1,20 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le travature di note consecutive di un sedicesimo (o più brevi) non
+vengono suddivise, ovvero i tre (o più) tratti della travatura si estendono, senza
+spezzarsi, sugli interi gruppi di note.  Questo comportamento può essere
+modificato in modo da suddividere le travature in sottoraggruppamenti attraverso
+la proprietà @code{subdivideBeams}.
+Se impostata, le travature che comprendono più sottoraggruppamenti verranno suddivise a intervalli
+definiti dal valore attuale di @code{baseMoment}, riducendo le travature
+multiple a una sola travatura che collega i sottoraggruppamenti.  Si noti che
+@code{baseMoment}, se non impostata esplicitamente, equivale a uno fratto
+il denominatore dell'attuale indicazione di tempo.  Deve quindi essere
+impostata su una frazione che stabilisca la durata del sottogruppo di
+travature; lo si può fare usando la funzione @code{ly:make-moment}, come
+è mostrato in questo frammento di codice.  Inoltre quando @code{baseMoment}
+cambia, anche @code{beatStructure} deve essere modificato per accordarsi
+con @code{baseMoment}:
+
+"
+  doctitleit = "Suddividere le travature"
diff --git a/Documentation/it/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc b/Documentation/it/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc
new file mode 100644 (file)
index 0000000..98d32fb
--- /dev/null
@@ -0,0 +1,12 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Talvolta un'indicazione di tempo non deve mostrare la frazione intera (ad esempio
+7/4), ma solo il numeratore (7 in questo caso). Si può ottenere facilmente con
+@code{\\override Staff.TimeSignature.style = #'single-digit},
+che cambia lo stile in modo permanente. Con @code{\\revert
+Staff.TimeSignature.style}, questa impostazione può essere annullata. Per
+applicare lo stile a cifra singola (@code{single-digit}) a una sola indicazione
+di tempo, si usa il comando @code{\\override} preceduto da @code{\\once}.
+
+"
+  doctitleit = "Indicazione di tempo che mostra solo il numeratore (invece della frazione)"
index 3836ced7d2a33b69cb19ddd3e9403d701cfdfb35..ab84a1b9c46b3055cf487a3b8e6f538c704ac245 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Questo esempio usa del codice Scheme per imporre delle modifiche
 enarmoniche alle note che permettano di avere il numero minimo di
index e5576b0d06f65f6b70f37576aae8cc19e2b75fe8..f26542a0efb0485ac2659bb96c3bed439607e39c 100644 (file)
@@ -1,19 +1,21 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Il comando @code{\\clef \"treble_8\"} equivale a impostare
 @code{clefGlyph}, @code{clefPosition} (che regola la posizione
 verticale della chiave), @code{middleCPosition} e
-@code{clefOctavation}. Viene stampata una chiave quando cambia una
+@code{clefTransposition}. Viene stampata una chiave quando cambia una
 di queste proprietà, eccetto @code{middleCPosition}.
 
 
 La modifica del glifo, della posizione della chiave o
 dell'ottavazione non è sufficiente per cambiare la posizione delle
 note che seguono sul rigo: bisogna anche specificare la posizione
-del Do centrale (middle C). I parametri di posizione sono relativi
+del Do centrale (middle C). Per far sì che le armature di chiave
+si trovino sulle linee corrette del rigo, occorre impostare anche
+@code{middleCClefPosition}. I parametri di posizione sono relativi
 alla linea centrale del rigo, con i numeri positivi che indicano
 la parte superiore: ogni linea e spazio valgono uno.  Il valore
-@code{clefOctavation} di norma è impostato su 7, -7, 15
+@code{clefTransposition} di norma è impostato su 7, -7, 15
 o -15, ma altri valori sono considerati validi.
 
 
diff --git a/Documentation/it/texidocs/tweaking-grace-layout-within-music.texidoc b/Documentation/it/texidocs/tweaking-grace-layout-within-music.texidoc
new file mode 100644 (file)
index 0000000..f062219
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+L'aspetto di tutte le espressioni contenute nei blocchi @code{\grace} di un
+brano può essere modificato con le funzioni @code{add-grace-property} e
+@code{remove-grace-property}. L'esempio seguente toglie la definizione
+della direzione di @code{Stem} nell'abbellimento, in modo che gli abbellimenti
+non siano sempre rivolti in su, e barra le teste di nota.
+
+"
+  doctitleit = "Modificare l'aspetto degli abbellimenti di un intero brano"
diff --git a/Documentation/it/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc b/Documentation/it/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc
new file mode 100644 (file)
index 0000000..dcc3f14
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Si può usare il segno @code{SystemStartSquare} (uno dei segni che delimitano
+l'inizio del sistema) impostandolo esplicitamente in un contesto
+@code{StaffGroup} o @code{ChoirStaff}.
+
+"
+  doctitleit = "Usare una parentesi quadra all'inizio di un gruppo di righi"
diff --git a/Documentation/it/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc b/Documentation/it/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc
new file mode 100644 (file)
index 0000000..970f4aa
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+La musica vocale e per fiati usa frequentemente il segno di spunta come segno
+di respiro.  Questo indica un respiro che sottrae un po' di tempo alla nota
+precedente invece di prendere una piccola pausa, indicata dal segno di
+respiro rappresentato dalla virgola.  Il segno può essere spostato un po'
+su per allontanarlo dal rigo.
+
+"
+  doctitleit = "Usare un segno di spunta come simbolo di respiro"
diff --git a/Documentation/it/texidocs/using-double-slurs-for-legato-chords.texidoc b/Documentation/it/texidocs/using-double-slurs-for-legato-chords.texidoc
new file mode 100644 (file)
index 0000000..f19c9a1
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Alcuni compositori scrivono due legature di portamento per indicare gli
+accordi legati.  Si può ottenere questo risultato impostando @code{doubleSlurs}.
+
+"
+  doctitleit = "Uso delle doppie legature di portamento per gli accordi legati"
diff --git a/Documentation/it/texidocs/using-grace-note-slashes-with-normal-heads.texidoc b/Documentation/it/texidocs/using-grace-note-slashes-with-normal-heads.texidoc
new file mode 100644 (file)
index 0000000..5703f11
--- /dev/null
@@ -0,0 +1,7 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Il gambo barrato presente nelle acciaccature può essere applicato
+in altre situazioni.
+
+"
+  doctitleit = "Usare il gambo barrato degli abbellimenti con le teste normali"
diff --git a/Documentation/it/texidocs/using-ties-with-arpeggios.texidoc b/Documentation/it/texidocs/using-ties-with-arpeggios.texidoc
new file mode 100644 (file)
index 0000000..904c021
--- /dev/null
@@ -0,0 +1,10 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Le legature di valore vengono usate talvolta per scrivere un arpeggio.  In questo
+caso, le due note da legare devono non essere consecutive.  Per ottenere tale risultato
+occorre impostare la proprietà @code{tieWaitForNote} su @code{#t}.  Questa
+funzionalità serve anche a legare un tremolo a un accordo e in generale
+qualsiasi coppia di note consecutive.
+
+"
+  doctitleit = "Usare le legature di valore con un arpeggio"
diff --git a/Documentation/it/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc b/Documentation/it/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc
new file mode 100644 (file)
index 0000000..218a315
--- /dev/null
@@ -0,0 +1,9 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Tutti gli oggetti @code{DynamicLineSpanner} (forcelle e testi di dinamica)
+sono posti a una distanza minima dal rigo determinata da @code{'staff-padding}.
+Se si imposta @code{'staff-padding} su un valore abbastanza grande,
+le dinamiche saranno allineate.
+
+"
+  doctitleit = "Dinamiche e segni testuali allineati verticalmente"
diff --git a/Documentation/it/texidocs/vertically-aligning-ossias-and-lyrics.texidoc b/Documentation/it/texidocs/vertically-aligning-ossias-and-lyrics.texidoc
new file mode 100644 (file)
index 0000000..22e5a05
--- /dev/null
@@ -0,0 +1,8 @@
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
+  texidocit = "
+Questo frammento mostra come usare le proprietà di contesto
+@code{alignBelowContext} e @code{alignAboveContext} per
+controllare il posizionamento del testo vocale e degli ossia.
+
+"
+  doctitleit = "Allineare verticalmente gli ossia e il testo vocale"
index d4a6a1fde9fb850fe59a473c7de22f51cab6ebcf..d21a508ebf1b489d2a0779ac81e049447bfa7137 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Questo modello aggiunge una riduzione automatica per pianoforte alla tipica
 partitura vocale SATB illustrata in @qq{Modello per complesso vocale}. Si
@@ -7,4 +7,4 @@ definizione musicale più di una volta. Qualsiasi modifica venga fatta alle note
 delle voci (ad esempio, @code{tenorMusic}) verrà applicata anche alla riduzione
 per pianoforte.
 "
-  doctitleit = "Modello per gruppo vocale con automatica riduzione per pianoforte"
+  doctitleit = "Modello per gruppo vocale con riduzione per pianoforte automatica"
index a84ed3ad713cfa02b25f740671c3c8a1b0e501bd..049e4a44d918825805b10788e5eb0a1053fbd23e 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Questo modello è fondamentalmente analogo al semplice modello @qq{Complesso vocale},
 con l'unica differenza che qui tutti i versi del testo sono posizionati
index 3351326e3e9642c47ce252c6deda2b7e1c65d9fe..9f00b26cc843f31998cade5142e124add5458759 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Questo modello crea una partitura che inizia con una sezione solistica e
 prosegue in un ritornello a due voci.  Illustra anche l'uso delle
index c3b10e0af51de4ee4ca2bb7c332bf529d4aae4e5..55efe8fe206cc5cc07faff8049efb3b8707cd064 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860
   texidocit = "
 Ecco una tipica partitura corale a quattro parti, SATB. Se il complesso è più
 ampio, è spesso comodo scrivere gli elementi comuni in un'unica sezione, che
index 2e8825463f905fe35a066fd9cfc561cd7367fbf4..df15a8a68abf9eb6f92e0e97a99ab8f19e14d57e 100644 (file)
@@ -16,17 +16,83 @@ td { border: 1px solid black; text-align: center; }
 
 @end html
 @end ifhtml
-@emph{Last updated Thu May 31 09:12:39 UTC 2012
+@emph{Ultimo aggiornamento Wed Dec 18 12:23:14 UTC 2013
 }
 @multitable @columnfractions  0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
 
+@headitem
+Cambiamenti in LilyPond
+@tab Traduttori
+@tab Revisori
+@tab Tradotto
+@tab Aggiornato
+@tab Altre informazioni
+@item
+Section titles
+@*
+1453
+@tab Federico Bruni
+@tab 
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab pre-GDP
+@item
+LilyPond --- \TITLE\
+@*
+1139
+@tab Federico Bruni
+@tab 
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab pre-GDP
+@end multitable
+
+
+@multitable @columnfractions  0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
+
 @headitem
 Manuale di apprendimento di LilyPond
-@tab Translators
-@tab Translation checkers
-@tab Translated
-@tab Up to date
-@tab Other info
+@tab Traduttori
+@tab Revisori
+@tab Tradotto
+@tab Aggiornato
+@tab Altre informazioni
 @item
 Section titles
 @*
@@ -37,21 +103,21 @@ Section titles
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
@@ -64,129 +130,156 @@ LilyPond --- \TITLE\
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 1 Tutorial
 @*
-2535
+2578
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 2 Notazione comunemente utilizzata
 @*
-4187
+4396
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 3 Concetti fondamentali
 @*
-11130
+11144
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
+@end ifnothtml
+@tab pre-GDP
+@item
+4 Modifica dell'output
+@*
+16191
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 A Modelli
 @*
-219
+372
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @end multitable
@@ -196,36 +289,36 @@ yes
 
 @headitem
 Guida alla Notazione di LilyPond
-@tab Translators
-@tab Translation checkers
-@tab Translated
-@tab Up to date
-@tab Other info
+@tab Traduttori
+@tab Revisori
+@tab Tradotto
+@tab Aggiornato
+@tab Altre informazioni
 @item
 Section titles
 @*
-355
+326
 @tab Federico Bruni
-@tab Luca Rossetto Casel
+@tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
@@ -233,26 +326,26 @@ LilyPond --- \TITLE\
 @*
 1139
 @tab Federico Bruni
-@tab Luca Rossetto Casel
+@tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
@@ -260,53 +353,242 @@ yes
 @*
 91
 @tab Federico Bruni
-@tab Luca Rossetto Casel
+@tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 1.1 Altezze
 @*
-4530
+4990
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab pre-GDP
+@item
+1.2 Ritmi
+@*
+6890
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab pre-GDP
+@item
+1.3 Segni di espressione
+@*
+1793
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab pre-GDP
+@item
+1.4 Ripetizioni
+@*
+1050
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab pre-GDP
+@item
+1.5 Note simultanee
+@*
+2821
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab pre-GDP
+@item
+1.6 Notazione del rigo
+@*
+2476
+@tab Federico Bruni
+@tab 
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab pre-GDP
+@item
+1.7 Note editoriali
+@*
+954
+@tab Federico Bruni
+@tab 
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
+@end html
+@end ifhtml
+@ifnothtml
+sì
+@end ifnothtml
+@tab pre-GDP
+@item
+1.8 Testo
+@*
+2816
+@tab Federico Bruni
+@tab 
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">sì</span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @end multitable
@@ -316,11 +598,11 @@ yes
 
 @headitem
 LilyPond: manuale d'uso del programma
-@tab Translators
-@tab Translation checkers
-@tab Translated
-@tab Up to date
-@tab Other info
+@tab Traduttori
+@tab Revisori
+@tab Tradotto
+@tab Aggiornato
+@tab Altre informazioni
 @item
 Section titles
 @*
@@ -331,21 +613,21 @@ Section titles
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
@@ -358,75 +640,75 @@ LilyPond --- \TITLE\
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 1 Eseguire @command{lilypond}
 @*
-4615
+4537
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 2 Aggiornare i file con @command{convert-ly}
 @*
-1209
+1484
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
@@ -439,75 +721,75 @@ yes
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 4 Programmi esterni
 @*
-2390
+2817
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 5 Consigli su come scrivere i file
 @*
-2694
+2692
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @end multitable
@@ -517,11 +799,11 @@ yes
 
 @headitem
 LilyPond -- Notazione musicale per tutti
-@tab Translators
-@tab Translation checkers
-@tab Translated
-@tab Up to date
-@tab Other info
+@tab Traduttori
+@tab Revisori
+@tab Tradotto
+@tab Aggiornato
+@tab Altre informazioni
 @item
 Section titles
 @*
@@ -532,21 +814,21 @@ Section titles
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
@@ -559,129 +841,129 @@ LilyPond --- \TITLE\
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 Introduzione
 @*
-4753
+4937
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 Download
 @*
-1211
+1201
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 Manuali
 @*
-1214
+1284
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab pre-GDP
 @item
 Comunità
 @*
-3006
+3073
 @tab Federico Bruni
 @tab Luca Rossetto Casel
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #1fff1f"></span>
 @end html
 @end ifhtml
 @ifnothtml
-yes
+sì
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">partially</span>
+<span style="background-color: #1fff1f">sì</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially
+sì
 @end ifnothtml
 @tab pre-GDP
 @end multitable
diff --git a/Documentation/it/usage/GNUmakefile b/Documentation/it/usage/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 7fd1c0d30940fdc922e51f5877feb8c71055c5ae..578723b2207537deeb72335ec1ef18b8713c7825 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 22b4097bcee9f2909b8c43fa69ea313aad0b71c3
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -28,41 +28,30 @@ LilyPond può interagire con altri programmi in vari modi.
 @node Punta e clicca
 @section Punta e clicca
 @translationof Point and click
+@cindex punta e clicca
 
 Il "punta e clicca" aggiunge dei collegamenti ai documenti pdf per certi
 elementi musicali.
 
 @menu
+* Configurare il sistema per il punta e clicca::
 * Abilitare il punta e clicca::
 * Punta e clicca selettivo::
 @end menu
 
-@node Abilitare il punta e clicca
-@unnumberedsubsec Abilitare il punta e clicca
-@translationof Enabling point and click
-
-@cindex punta e clicca
-
-Il "punta e clicca" (@emph{point and click}) permette di individuare gli elementi
-musicali nell'input cliccando su di essi nel lettore PDF.  In questo modo è più
-facile trovare la parte dell'input responsabile di un errore nello spartito.
+@node Configurare il sistema per il punta e clicca
+@subsection Configurare il sistema
+@translationof Configuring the system for point and click
 
 Quando questa funzionalità è attiva, LilyPond aggiunge dei collegamenti
-ipertestuali al file PDF.  Questi collegamenti vengono inviati al browser web,
-che apre un editor di testo col cursore posizionato nel punto giusto.
+ipertestuali al file PDF.  Questi collegamenti vengono inviati a un
+@q{programma di supporto per URI} o al browser web, che apre un editor di testo
+col cursore posizionato nel punto giusto.
 
 Perché questo procedimento funzioni è necessario configurare il lettore PDF
 in modo che segua i collegamenti ipertestuali usando lo script @file{lilypond-invoke-editor}
 fornito insieme a LilyPond.
 
-Per Xpdf su UNIX, occorre inserire la seguente linea nel file
-@file{xpdfrc}.  Su UNIX, questo file si trova in
-@file{/etc/xpdfrc} o @file{$HOME/.xpdfrc}.
-
-@example
-urlCommand     "lilypond-invoke-editor %s"
-@end example
-
 @file{lilypond-invoke-editor} è un piccolo programma di supporto.  Lancia un
 editor per gli URI @code{textedit} e un browser web per altri URI.  Valuta
 la variabile d'ambiente @code{EDITOR} in base a questi schemi,
@@ -98,8 +87,132 @@ emacsclient --no-wait +%(line)s:%(column)s %(file)s
 @noindent
 per @code{LYEDITOR} è equivalente alla chiamata standard emacsclient.
 
+@menu
+* Usare Xpdf per il punta e clicca::
+* Usare GNOME 2 per il punta e clicca::
+* Usare GNOME 3 per il punta e clicca::
+* Ulteriore configurazione per Evince::
+@end menu
+
+@node Usare Xpdf per il punta e clicca
+@unnumberedsubsubsec Usare Xpdf
+@translationof Using Xpdf for point and click
+@cindex Xpdf
 
-@cindex file size, output
+Se si usa Xpdf su UNIX, si deve inserire la seguente riga nel file
+@file{xpdfrc}.  Su UNIX, questo file può essere @file{/etc/xpdfrc}
+oppure @file{$HOME/.xpdfrc}.
+
+@example
+urlCommand     "lilypond-invoke-editor %s"
+@end example
+
+Se si usa Ubuntu, è probabile che la versione di Xpdf
+installata nel sistema causi il crash  per qualsiasi file PDF: questa
+situazione continua da molti anni ed è dovuta a una corrispondenza
+sbagliata tra librerie.  Conviene installare un pacchetto aggiornato
+di @samp{xpdf} e il corrispondente pacchetto @samp{libpoppler} da
+Debian.  Dopo aver verificato che funziona, si può  usare il comando
+@example
+sudo apt-mark hold xpdf
+@end example
+@noindent
+per impedire a Ubuntu di sovrascriverlo al prossimo @q{aggiornamento} del
+suo pacchetto difettoso.
+
+@node Usare GNOME 2 per il punta e clicca
+@unnumberedsubsubsec Usare GNOME 2
+@translationof Using GNOME 2 for point and click
+
+Per usare GNOME 2 (e i visualizzatori PDF ad esso integrati), il magico
+comando che fornisce al sistema gli URI @samp{textedit:} è
+@example
+gconftool-2 -t string -s /desktop/gnome/url-handlers/textedit/command "lilypond-invoke-editor %s"
+gconftool-2 -s /desktop/gnome/url-handlers/textedit/needs_terminal false -t bool
+gconftool-2 -t bool -s /desktop/gnome/url-handlers/textedit/enabled true
+@end example
+
+Dopo questi comandi,
+@example
+gnome-open textedit:///etc/issue:1:0:0
+@end example
+@noindent
+dovrebbe lanciare @file{lilypond-invoke-editor} per l'apertura del file.
+
+@node Usare GNOME 3 per il punta e clicca
+@unnumberedsubsubsec Usare GNOME 3
+@translationof Using GNOME 3 for point and click
+
+In GNOME 3, gli URI sono gestiti da @q{gvfs} invece che da
+@q{gconf}.  Si crea un file in una directory locale (ad esempio @file{/tmp})
+che abbia il nome @file{lilypond-invoke-editor.desktop} e il seguente contenuto
+@example
+[Desktop Entry]
+Version=1.0
+Name=lilypond-invoke-editor
+GenericName=Textedit URI handler
+Comment=URI handler for textedit:
+Exec=lilypond-invoke-editor %u
+Terminal=false
+Type=Application
+MimeType=x-scheme-handler/textedit;
+Categories=Editor
+NoDisplay=true
+@end example
+e poi si eseguono i comandi
+@example
+xdg-desktop-menu install ./lilypond-invoke-editor.desktop
+xdg-mime default lilypond-invoke-editor.desktop x-scheme-handler/textedit
+@end example
+
+Dopo questi comandi,
+@example
+gnome-open textedit:///etc/issue:1:0:0
+@end example
+@noindent
+dovrebbe lanciare @file{lilypond-invoke-editor} per l'apertura del file.
+
+@node Ulteriore configurazione per Evince
+@unnumberedsubsubsec Ulteriore configurazione per Evince
+@translationof Extra configuration for Evince
+@cindex Evince
+
+Se @code{gnome-open} funziona, ma Evince si rifiuta ancora di
+aprire i collegamenti punta e clicca a causa di permessi negati,
+potrebbe essere necessario cambiare il profilo Apparmor di
+Evince che controlla il tipo di azioni che Evince ha il
+permesso di eseguire.
+
+In Ubuntu, si modifica il file
+@file{/etc/apparmor.d/local/usr.bin.evince} e si aggiungono le
+seguenti righe:
+@example
+# Per i collegamenti Textedit
+/usr/local/bin/lilypond-invoke-editor Cx -> sanitized_helper,
+@end example
+@noindent
+
+Dopo aver aggiunto queste righe, si lancia il comando
+
+@example
+sudo apparmor_parser -r -T -W /etc/apparmor.d/usr.bin.evince
+@end example
+
+@noindent
+Ora Evince dovrebbe essere in grado di aprire i collegamenti punta e
+clicca.  È probabile che configurazioni simili funzionino anche
+con altri visualizzatori.
+
+
+@node Abilitare il punta e clicca
+@unnumberedsubsec Abilitare il punta e clicca
+@translationof Enabling point and click
+
+@cindex dimensione del file di output
+@cindex file di output, dimensione
+
+La funzionalità "punta e clicca" è abilitata di default quando si creano
+i file PDF.
 
 I collegamenti "punta e clicca" appesantiscono sensibilmente i file di output.  Per
 ridurre la dimensione dei file PDF e PS, è possibile disattivare il "punta e
@@ -268,7 +381,7 @@ filetype on
 @noindent
 Se LilyPond non è installato nella directory @file{/usr/local/},
 modifica il percorso in modo adeguato.  Questo argomento è trattato in
-@rlearning{Other sources of information}.
+@rlearning{Altre fonti di informazione}.
 
 
 @node Altri editor
@@ -278,7 +391,7 @@ modifica il percorso in modo adeguato.  Questo argomento è trattato in
 Altri editor (sia testuali che grafici) supportano LilyPond, ma i loro
 specifici file di configurazione non sono distribuiti insieme a
 LilyPond.  Consulta la documentazione di questi programmi per maggiori
-informazioni.  Questi editor sono elencati in @rweb{Easier editing}.
+informazioni.  Questi editor sono elencati in @rweb{Editing facilitato}.
 
 
 @node Conversione da altri formati
@@ -363,7 +476,7 @@ Quantizza la durata delle note di @var{DUR}.
 @item -e, --explicit-durations
 Crea durate esplicite.
 
-@item -h,--help
+@item -h, --help
 Mostra una sintesi dell'utilizzo del programma.
 
 @item -k, --key=@var{acc}[:@var{minor}]
@@ -375,7 +488,7 @@ minore si indica con @code{:1}.
 Scrive l'output in @var{file}.
 
 @item -s, --start-quant=@var{DUR}
-Quantize note starts on @var{DUR}.
+La quantizzazione delle note inizia su @var{DUR}.
 
 @item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN}
 Consente l'inserimento di gruppi irregolari @var{DUR}*@var{NUM}/@var{DEN}.
@@ -433,7 +546,7 @@ dalla linea di comando.
 @item -a, --absolute
 converte le altezze relative in assolute.
 
-@item -h,--help
+@item -h, --help
 mostra una sintesi dell'utilizzo e delle opzioni.
 
 @item -l, --language=LANG
@@ -451,7 +564,7 @@ memoria e tempo del processore.
 @item -m, --midi
 attiva il blocco midi.
 
-@item --nd --no-articulation-directions
+@item -nd, --no-articulation-directions
 non converte le direzioni (@code{^}, @code{_} o @code{-}) per
 articolazioni, dinamiche, etc.
 
@@ -459,11 +572,11 @@ articolazioni, dinamiche, etc.
 ignora le informazioni relative alle travature, impiegando la disposizione
 automatica delle travature fornita da LilyPond.
 
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
 imposta il nome del file di output su @var{file}.  Se @var{file} è @file{-}, l'output
 sarà salvato su stdout.  Se non specificato, verrà usato @var{file-xml}@file{.ly}.
 
-@item -r,--relative
+@item -r, --relative
 converte le altezze in modalità relativa (predefinito).
 
 @item -v, --verbose
@@ -472,7 +585,7 @@ Mostra un output dettagliato.
 @item --version
 Mostra informazioni sulla versione.
 
-@item -z,--compressed
+@item -z, --compressed
 il file di input è un file MusicXML compresso in un archivio ZIP.
 @end table
 
@@ -502,13 +615,13 @@ abc2ly [@var{opzione}]@dots{} @var{file-abc}
 @command{abc2ly} accetta le seguenti opzioni:
 
 @table @code
-@item -b,--beams=None
+@item -b, --beams=None
 preserva le regole di disposizione delle travature di ABC
-@item -h,--help
+@item -h, --help
 mostra questo messaggio di aiuto
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
 imposta il nome del file di output su @var{file}.
-@item -s,--strict
+@item -s, --strict
 imposta una modalità di interpretazione letterale per effettuare una conversione stretta
 @item --version
 mostra informazioni sulla versione.
@@ -576,9 +689,9 @@ maggiori informazioni su questo argomento.
 @command{etf2ly} accetta le seguenti opzioni:
 
 @table @code
-@item -h,--help
+@item -h, --help
 mostra questo messaggio di aiuto
-@item -o,--output=@var{FILE}
+@item -o, --output=@var{FILE}
 imposta il nome del file di output su @var{FILE}
 @item --version
 mostra informazioni sulla versione
@@ -640,7 +753,7 @@ La notazione di LilyPond può essere aggiunta a OpenOffice.org con
 
 Per inserire l'output di LilyPond in altri programmi, si usa @code{lilypond}
 invece di @code{lilypond-book}.  Bisogna creare ogni esempio singolarmente
-e aggiungerlo al documento; consulta la documentazione del realtivo
+e aggiungerlo al documento; consulta la documentazione del relativo
 programma.  La maggior parte dei programmi può inserire l'output di LilyPond
 in formato @file{PNG}, @file{EPS} o @file{PDF}.
 
@@ -671,7 +784,7 @@ PNG
 
 lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png miofile.ly
 
-Un file PNG transparente
+Un file PNG trasparente
 
 lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts \
   -dpixmap-format=pngalpha --png miofile.ly
index 77ad3f45c243b240bbf2d3b5b67c402416945861..e54bc7c78662ea53402263c0a4f977349a8a60db 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 
 @ignore
-    Translation of GIT committish: 44011e382e91f43fb6752b3fbbf8d8984131a565
+    Translation of GIT committish: eba67a0bc70f38a7847de75c640d7ad19c6fd804
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Note: keep this node named so that `info lilypond-book' brings you here.
 @node lilypond-book
@@ -87,7 +87,7 @@ Ad esempio,
 
 \begin{lilypond}
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 \end{lilypond}
 
@@ -119,11 +119,11 @@ esegui in un terminale
 lilypond-book --output=out --pdf lilybook.lytex
 @emph{lilypond-book (GNU LilyPond) @version{} }
 @emph{Lettura di lilybook.lytex...}
-@emph{..tagliato molto output..}
+@emph{@dots{}tagliato molto output@dots{}}
 @emph{Compilazione di lilybook.tex...}
 cd out
 pdflatex lilybook.tex
-@emph{..tagliato molto output..}
+@emph{@dots{}tagliato molto output@dots{}}
 xpdf lilybook.pdf
 @emph{(sostituisci @command{xpdf} col tuo lettore PDF preferito)}
 @end example
@@ -147,7 +147,7 @@ Ad esempio,
 
 @lilypond
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 @end lilypond
 
@@ -210,18 +210,18 @@ la musica nei file @LaTeX{}:
 @itemize
 
 @item
-il comando @code{\lilypond@{...@}}, dove si può inserire direttamente del
+il comando @code{\lilypond@{@dots{}@}}, dove si può inserire direttamente del
 codice lilypond corto
 
 @item
-l'ambiente @code{\begin@{lilypond@}...\end@{lilypond@}}, dove si può inserire
+l'ambiente @code{\begin@{lilypond@}@dots{}\end@{lilypond@}}, dove si può inserire
 direttamente del codice lilypond più lungo
 
 @item
-il comando @code{\lilypondfile@{...@}} per inserire un file lilypond
+il comando @code{\lilypondfile@{@dots{}@}} per inserire un file lilypond
 
 @item
-il comando @code{\musicxmlfile@{...@}} per inserire un file MusicXML, che
+il comando @code{\musicxmlfile@{@dots{}@}} per inserire un file MusicXML, che
 sarà elaborato da @code{musicxml2ly} e da @code{lilypond}.
 
 @end itemize
@@ -398,9 +398,9 @@ e poi specificando prima di ogni frammento la quantità di sistemi desiderata,
 
 @example
 \onlyFirstNSystems@{3@}
-\begin@{lilypond@}...\end@{lilypond@}
+\begin@{lilypond@}@dots{}\end@{lilypond@}
 \onlyFirstNSystems@{1@}
-\begin@{lilypond@}...\end@{lilypond@}
+\begin@{lilypond@}@dots{}\end@{lilypond@}
 @end example
 
 
@@ -424,18 +424,18 @@ musica nei file Texinfo:
 @itemize
 
 @item
-il comando @code{\lilypond@{...@}}, dove si può inserire direttamente del
+il comando @code{\lilypond@{@dots{}@}}, dove si può inserire direttamente del
 codice lilypond corto
 
 @item
-l'ambiente @code{\begin@{lilypond@}...\end@{lilypond@}}, dove si può inserire
+l'ambiente @code{\begin@{lilypond@}@dots{}\end@{lilypond@}}, dove si può inserire
 direttamente del codice lilypond più lungo
 
 @item
-il comando @code{\lilypondfile@{...@}} per inserire un file lilypond
+il comando @code{\lilypondfile@{@dots{}@}} per inserire un file lilypond
 
 @item
-il comando @code{\musicxmlfile@{...@}} per inserire un file MusicXML, che
+il comando @code{\musicxmlfile@{@dots{}@}} per inserire un file MusicXML, che
 sarà elaborato da @code{musicxml2ly} e da @code{lilypond}.
 
 @end itemize
@@ -489,7 +489,7 @@ genera
 
 @lilypond[fragment,staffsize=11]{<c' e' g'>}
 
-Diversamente da @LaTeX{}, @code{@@lilypond@{...@}} non genera un'immagine
+Diversamente da @LaTeX{}, @code{@@lilypond@{@dots{}@}} non genera un'immagine
 nel testo.  Prende sempre un paragrafo proprio.
 
 
@@ -503,18 +503,18 @@ musica nei file HTML:
 @itemize
 
 @item
-il comando @code{\lilypond@{...@}}, dove si può inserire direttamente del
+il comando @code{\lilypond@{@dots{}@}}, dove si può inserire direttamente del
 codice lilypond corto
 
 @item
-l'ambiente @code{\begin@{lilypond@}...\end@{lilypond@}}, dove si può inserire
+l'ambiente @code{\begin@{lilypond@}@dots{}\end@{lilypond@}}, dove si può inserire
 direttamente del codice lilypond più lungo
 
 @item
-il comando @code{\lilypondfile@{...@}} per inserire un file lilypond
+il comando @code{\lilypondfile@{@dots{}@}} per inserire un file lilypond
 
 @item
-il comando @code{\musicxmlfile@{...@}} per inserire un file MusicXML, che
+il comando @code{\musicxmlfile@{@dots{}@}} per inserire un file MusicXML, che
 sarà elaborato da @code{musicxml2ly} e da @code{lilypond}.
 
 @end itemize
@@ -558,7 +558,7 @@ per le immagini dei frammenti musicali:
 \key c \minor c4 es g2
 @end lilypond
 
-Per le immagini in linea, si usa @code{<lilypond ... />}, dove le opzioni
+Per le immagini in linea, si usa @code{<lilypond @dots{} />}, dove le opzioni
 sono distinte dalla musica attraverso i due punti, ad esempio
 
 @example
@@ -568,7 +568,7 @@ Un po' di musica in <lilypond relative=2: a b c/> una linea di testo.
 Per includere file separati, si usa
 
 @example
-<lilypondfile @var{option1} @var{option2} ...>@var{filename}</lilypondfile>
+<lilypondfile @var{opzione1} @var{opzione2} @dots{}>@var{filename}</lilypondfile>
 @end example
 
 @code{<musicxmlfile>} usa la stessa sintassi di @code{<lilypondfile>}, ma semplicemente
@@ -814,7 +814,7 @@ ci sia un campo @code{texidoc} nel blocco @code{\header}.  L'opzione @code{texid
 fa sì che @command{lilypond-book} includa tali file, aggiungendo il loro
 contenuto in forma di blocco di documentazione proprio prima del frammento
 di musica (ma fuori dall'ambiente @code{example} generato da un'opzione
-@code{quote})..
+@code{quote}).
 
 Se il file @file{foo.ly} contiene
 
@@ -1018,39 +1018,39 @@ o @command{makeinfo}.
 @example
 lilypond-book --output=out tuofile.lytex
 cd out
-...
+@dots{}
 @end example
 
-@itemx --skip-lily-check
+@item --skip-lily-check
 Non si arresta se non viene trovato l'output di lilypond.  Viene usata per la
 documentazione Info di LilyPond, che è priva di immagini.
 
-@itemx --skip-png-check
+@item --skip-png-check
 Non si arresta se non vengono trovate immagini PNG per i file EPS.  Viene usata
 per la documentazione Info di LilyPond, che è priva di immagini.
 
-@itemx --lily-output-dir=@var{dir}
+@item --lily-output-dir=@var{dir}
 Scrive i file lily-XXX nella directory @var{dir}, crea un link nella
 directory @option{--output}.  Si usa questa opzione per risparmiare tempo nella
 compilazione di documenti situati in directory diverse che condividono
 molti identici frammenti.
 
-@itemx --lily-loglevel=@var{loglevel}
+@item --lily-loglevel=@var{loglevel}
 Set the output verbosity of the invoked @command{lilypond} calls to @var{loglevel}.
 I valori possibili sono @code{NONE}, @code{ERROR}, @code{WARNING}, @code{BASIC_PROGRESS},
 @code{PROGRESS}, @code{INFO} (predefinito) e @code{DEBUG}. Se questa opzione
 non viene usata e la variabile d'ambiente @code{LILYPOND_LOGLEVEL} è
 impostata, il suo valore viene usato come loglevel.
 
-@itemx --info-images-dir=@var{dir}
+@item --info-images-dir=@var{dir}
 Formatta l'output di Texinfo in modo che Info cerchi le immagini della musica
 in @var{dir}.
 
-@itemx --latex-program=@var{prog}
+@item --latex-program=@var{prog}
 Lancia l'eseguibile @command{prog} invece di @command{latex}.  Questa opzione
 è utile, ad esempio, se il documento è elaborato con @command{xelatex}.
 
-@itemx --left-padding=@var{quantità}
+@item --left-padding=@var{quantità}
 Crea una spaziatura corrispondente a questa quantità tra i riquadri EPS.  @var{quantità} è
 misurata in millimetri e il valore predefinito è 3.0.  Questa opzione si usa
 se i righi dello spartito oltrepassano il margine destro.
@@ -1074,7 +1074,7 @@ Per impostazione predefinita, l'output viene mostrato sul terminale.  Questa
 opzione redirige tutto l'output in dei file di log nella stessa directory dei
 file sorgente.
 
-@itemx --use-source-file-names
+@item --use-source-file-names
 Salva i file di output dei frammenti con lo stesso nome, esclusa l'estensione,
 dei sorgenti.  Questa opzione funziona solo con i frammenti inclusi con
 @code{lilypondfile} e solo se le directory indicate da @option{--output-dir} e
@@ -1091,7 +1091,7 @@ Mostra informazioni sulla versione.
 
 @knownissues
 
-Il comando Texinfo @code{@@pagesizes} non viene inrerpretato.  Allo stesso
+Il comando Texinfo @code{@@pagesizes} non viene interpretato.  Allo stesso
 modo, i comandi @LaTeX{} che modificano i margini e la larghezza della linea
 dopo il preambolo vengono ignorati.
 
@@ -1395,4 +1395,3 @@ Altri modi per combinare testo e musica (senza usare
 @command{lilypond-book}) sono trattati in
 @ref{LilyPond output in other programs}.
 
-
index 929bcab677b89fcac47ff644121bc11758e5d090..a0497410523ea02162deb35361487429747246a1 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: ff7d82711b47d3d31f26e1e6fc012c4055a20059
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 
 @node Eseguire lilypond
@@ -138,13 +138,13 @@ Sono contemplate le seguenti opzioni:
 
 @table @code
 
-@item -d,--define-default=@var{variabile}=@var{valore}
+@item -d, --define-default=@var{variabile}=@var{valore}
 Si veda @ref{Advanced command line options for LilyPond}.
 
 @cindex Scheme, valutazione dell'espressione
 @cindex valutazione dell'espressione, Scheme
 
-@item -e,--evaluate=@var{espressione}
+@item -e, --evaluate=@var{espressione}
 Valuta l'@var{espressione} di Scheme prima di analizzare qualsiasi file @file{.ly}.
 Si possono specificare varie opzioni @option{-e}; saranno analizzate in modo
 sequenziale.
@@ -171,19 +171,19 @@ in cima al file @code{.ly}.
 @cindex output, formato
 @cindex formato, output
 
-@item -f,--format=@var{formato}
+@item -f, --format=@var{formato}
 Formati di output.  Come @code{formato} si può scegliere tra
 @code{ps}, @code{pdf} e @code{png}.
 
 Esempio: @code{lilypond -fpng @var{file}.ly}
 
-@item -h,--help
+@item -h, --help
 Mostra una sintesi dell'utilizzo.
 
-@item -H,--header=@var{CAMPO}
+@item -H, --header=@var{CAMPO}
 Estrae un campo dell'intestazione nel file @file{NOME.@var{CAMPO}}.
 
-@item -i,--init=@var{file}
+@item -i, --init=@var{file}
 Imposta il file di inizializzazione su @var{file} (predefinito: @file{init.ly}).
 
 @cindex ricerca dei file
@@ -198,7 +198,7 @@ la ricerca continuerà nelle directory seguenti.
 
 @cindex gabbia chroot, esecuzione all'interno di
 
-@item -j,--jail=@var{utente},@var{gruppo},@var{gabbia},@var{directory}
+@item -j, --jail=@var{utente},@var{gruppo},@var{gabbia},@var{directory}
 Esegue @command{lilypond} in una gabbia chroot.
 
 L'opzione @option{--jail} fornisce un'alternativa più flessibile a
@@ -260,7 +260,7 @@ memoria che può essere allocata.  Si veda anche @ref{LilyPond in chroot jail}.
 @cindex loglevel
 @cindex output dettagliato
 
-@item -l,--loglevel=@var{LIVELLO}
+@item -l, --loglevel=@var{LIVELLO}
 Imposta la verbosità dell'output della console su @var{LIVELLO}. I valori possibili sono:
 @table @code
 
@@ -271,7 +271,7 @@ Nessun output, nemmeno i messaggi di errore.
 Solo i messaggi di errore, niente avvisi o messaggi di elaborazione.
 
 @item WARN
-Avvisi e nessaggi di errore, nessun messaggio di elaborazione.
+Avvisi e messaggi di errore, nessun messaggio di elaborazione.
 
 @item BASIC_PROGRESS
 Messaggi di elaborazione di base (riuscita), avvisi e errori.
@@ -291,7 +291,7 @@ Tutti i messaggi possibili, incluso l'output verboso di debug.
 @cindex output, impostare il nome del file
 @cindex output, directory
 
-@item -o,--output=@var{FILE} o @var{CARTELLA}
+@item -o, --output=@var{FILE} o @var{CARTELLA}
 Imposta il file di output predefinito @var{FILE} oppure, se una cartella con
 quel nome esiste già, dirige l'output in @var{CARTELLA}, prendendo il nome
 del file dal file di input.  In entrambi i casi verrà aggiunto il suffisso
@@ -308,7 +308,7 @@ Genera PostScript.
 @cindex output, PNG (Portable Network Graphics)
 
 @item --png
-Genera immmagini di ogni pagina in formato PNG.  Questo implica
+Genera immagini di ogni pagina in formato PNG.  Questo implica
 @option{--ps}.  La risoluzione in DPI dell'immagine può essere impostata con
 @example
 -dresolution=110
@@ -320,14 +320,14 @@ Genera immmagini di ogni pagina in formato PNG.  Questo implica
 @item --pdf
 Genera PDF.  Questo implica @option{--ps}.
 
-@item -v,--version
+@item -v, --version
 Mostra informazioni sulla versione.
 
-@item -V,--verbose
+@item -V, --verbose
 Aumenta la prolissità: mostra i percorsi completi di tutti i file letti e dà
 informazioni sui tempi.
 
-@item -w,--warranty
+@item -w, --warranty
 Mostra la garanzia con cui viene distribuito GNU LilyPond.  (Distribuito
 con @strong{NESSUNA GARANZIA}!)
 
@@ -341,9 +341,15 @@ con @strong{NESSUNA GARANZIA}!)
 @table @code
 
 @item -d@var{[nome-opzione]}=@var{[valore]},--define-default=@var{[nome-opzione]}=@var{[valore]}
-Imposta l'equivalente funzione interna di Scheme su @var{valore}.  Se non
-viene specificato un @var{valore}, viene usato il valore predefinito.  Per disabilitare
-un'opzione, si può usare il prefisso @code{no-} prima di @var{nome-opzione}, ad esempio
+Imposta l'equivalente funzione interna di Scheme su @var{valore}.
+
+@example
+-dbackend=svg
+@end example
+
+Se non viene specificato un @var{valore}, viene usato il valore
+predefinito.  Per disabilitare un'opzione, si può usare il
+prefisso @code{no-} prima di @var{nome-opzione}, ad esempio
 
 @cindex punta e clicca, linea di comando
 
@@ -377,26 +383,26 @@ il risultato per evitare gli @q{artefatti} nelle immagini @code{PNG}.
 @code{EPS}.
 
 @item @code{backend}
-@tab @code{'ps}
+@tab @code{ps}
 @tab Seleziona il backend.  I file Postscript (predefinito) includono i tipi di
 carattere @code{TTF}, @code{Type1} e @code{OTF}.  Non vengono inclusi i sottoinsiemi
 di questi tipi.  Se si usa un set di caratteri @q{orientali}, si possono ottenere
 file di grosse dimensioni.
 
 @item
-@tab @code{'eps}
+@tab @code{eps}
 @tab Encapsulated PostScript.  Invia ogni pagina (sistema) in un file
 @file{EPS} separato, senza font, e in un unico file @file{EPS} con
 tutte le pagine (sistemi) inclusi i font.  Questa è la modalità
 predefinita di @command{lilypond-book}.
 
 @item
-@tab @code{'null}
+@tab @code{null}
 @tab non produce la stampa della partitura; ha lo stesso
 effetto di @code{-dno-print-pages}.
 
 @item
-@tab @code{'svg}
+@tab @code{svg}
 @tab Scalable Vector Graphics.  Crea un singolo file SVG, senza font
 incorporati, per ogni pagina dell'output.  Si raccomanda di installare i
 font Century Schoolbook, inclusi nell'installazione di LilyPond, per una
@@ -407,7 +413,7 @@ editor SVG o user agent.  C'è anche un'opzione @code{svg-woff} (sotto) per
 poter usare i file di font woff nel backend SVG.
 
 @item
-@tab @code{'scm}
+@tab @code{scm}
 @tab Estrae i comandi di disegno grezzi e interni, basati su Scheme.
 
 @item @code{check-internal-types}
@@ -524,9 +530,9 @@ redirige l'output nel file @code{FOO.log}.
 
 @item @code{max-markup-depth}
 @tab @code{1024}
-@tab Maximum depth for the markup tree. If a markup has more levels,
-assume it will not terminate on its own, print a warning and return a
-null markup instead.
+@tab Massima profondità per la struttura del blocco markup. Se un blocco markup ha
+più livelli, assume che non terminerà da solo, stampa un avviso e restituisce
+al suo posto un markup vuoto.
 
 @item @code{midi-extension}
 @tab @code{"midi"}
@@ -537,11 +543,6 @@ null markup instead.
 @tab Converte le stringhe di testo in percorsi quando i glifi appartengono a
 un font musicale.
 
-@item @code{old-relative}
-@tab @code{#f}
-@tab Fa sì che il modo @code{\relative} per la musica simultanea funzioni in
-modo simile alla sintassi degli accordi.
-
 @item @code{paper-size}
 @tab @code{\"a4\"}
 @tab Imposta la dimensione predefinita del foglio.  Nota che la stringa deve
@@ -568,7 +569,7 @@ di output nella forma @code{mioFile.preview.estensione}, contenente i
 titoli e il primo sistema.  Se vengono usati i blocchi @code{\book} o
 @code{\bookpart}, i titoli di @code{\book}, @code{\bookpart} o @code{\score}
 appariranno nell'output, incluso il primo sistema di ogni blocco @code{\score}
-se la variabile @code{print-all-headers} di @code{\paper} è impistata
+se la variabile @code{print-all-headers} di @code{\paper} è impostata
 su @code{#t}.
 
 Per impedire il normale output, si usano le opzioni @option{-dprint-pages} o
@@ -650,7 +651,7 @@ per configurarla.  Si veda @ref{Basic command line options for LilyPond}.
 @item @code{separate-log-files}
 @tab @code{#f}
 @tab Per i file di input @code{FILE1.ly}, @code{FILE2.ly}, etc. salva i dati di
-log nei file @code{FILE1.log}, @code{FILE2.log}, ...
+log nei file @code{FILE1.log}, @code{FILE2.log}, @dots{}
 
 @item @code{show-available-fonts}
 @tab @code{#f}
@@ -931,10 +932,10 @@ comprese, è facile gestirle.
 @menu
 * La musica esce dalla pagina::
 * Appare un rigo in più::
-* Errore apparente in ../ly/init.ly::
 * Messaggio di errore Unbound variable %::
 * Messaggio di errore FT_Get_Glyph_Name::
 * Avvertimento sul fatto che le affinità del rigo devono solo diminuire::
+* Messaggio di errore new inaspettato::
 @end menu
 
 @node La musica esce dalla pagina
@@ -957,11 +958,12 @@ linea, portando a una linea di musica estremamente compressa o
 a musica che esce dalla pagina.}
 
 La durata errata può essere trovata facilmente se si usano i controlli di
-battuta, si veda @ruser{Bar and bar number checks}.
+battuta, si veda @ruser{Controlli di battuta e del numero di battuta}.
 
 Se si vuole davvero ottenere una serie di tali misure sovrapposte
 bisogna inserire una barra di divisione invisibile nel punto in cui
-si desidera l'interruzione di linea.  Per i dettagli si veda @ruser{Bar lines}.
+si desidera l'interruzione di linea.  Per i dettagli si veda
+@ruser{Stanghette}.
 
 
 @node Appare un rigo in più
@@ -980,7 +982,7 @@ delle note nel rigo, ma in realtà produce due righi, di cui il più basso
 conserva il colore nero predefinito per le teste delle note.
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
 \new Staff { a }
 @end lilypond
 
@@ -992,7 +994,7 @@ corretto per colorare le teste di tutte le note è
 
 @lilypond[quote,verbatim,relative=2]
 \new Staff {
-  \override Staff.NoteHead #'color = #red
+  \override Staff.NoteHead.color = #red
   a
 }
 @end lilypond
@@ -1021,35 +1023,6 @@ Per correggere il problema basta istanziare esplicitamente il contesto
 @end lilypond
 
 
-@node Errore apparente in ../ly/init.ly
-@unnumberedsubsec Errore apparente in @code{../ly/init.ly}
-@translationof Apparent error in ../ly/init.ly
-
-Possono apparire diversi strani messaggi di errore relativi a errori di
-sintassi in @file{../ly/init.ly} se il file di input non ha una forma corretta,
-ad esempio se contiene delle parentesi o delle virgolette non chiuse
-correttamente.
-
-L'errore più comune è la mancanza di una parentesi graffa, (@code{@}}), alla fine
-di un blocco @code{score}.  In questo caso la soluzione è ovvia: controlla
-che il blocco @code{score} sia chiuso correttamente.  La struttura corretta
-di un file di input è descritta in @rlearning{Come funzionano i file di input di LilyPond}.
-Per evitare questi errori conviene usare un editor che evidenzi automaticamente
-le parentesi e le graffe corrispondenti.
-
-Un'altra causa frequente di errore è la mancanza di uno spazio tra l'ultima
-sillaba di un blocco di testo (lyrics) e la parentesi graffa che chiude il
-blocco, (@code{@}}).  Senza questa separazione, la graffa viene considerata
-come parte della sillaba.  Si consiglia di assicurarsi sempre che ci sia
-uno spazio prima e dopo @emph{ogni} parentesi graffa.  Per comprendere l'importanza
-di questo quando si usa il testo, si veda @ruser{Entering lyrics}.
-
-Questo messaggio di errore può apparire anche nel caso in cui sia omessa la
-virgoletta di chiusura, (@code{"}).  In questo caso il messaggio di errore
-@c keep "-matching straight in fancy editors
-dovrebbe dare un numero di riga vicino alla riga sbagliata.  La virgoletta
-non chiusa sarà solitamente una o due righe sopra.
-
 @node Messaggio di errore Unbound variable %
 @unnumberedsubsec Messaggio di errore Unbound variable %
 @translationof Error message Unbound variable %
@@ -1083,9 +1056,58 @@ messaggi di avvertimento facendo in modo che uno dei contesti si comporti
 come un rigo inserendo
 
 @example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
 @end example
 
 @noindent
 all'inizio del contesto.  Per dettagli si veda @qq{Spacing of non-staff lines} in
 @ruser{Flexible vertical spacing within systems}.
+
+@node Messaggio di errore new inaspettato
+@unnumberedsubsec Messaggio di errore @code{@bs{}new} inaspettato
+@translationof Error message unexpected new
+
+Un blocco @code{\score} deve contenere una @emph{singola} espressione musicale.
+Se invece contiene vari @code{\new Staff}, @code{\new StaffGroup} o simili
+contesti introdotti con @code{\new} senza che questi siano racchiusi tra
+parentesi graffe, @code{@{ @dots{} @}}, o doppie parentesi uncinate, @code{<< @dots{} >>},
+ovvero così:
+
+@example
+\score @{
+  % Invalido! Genera l'errore: errore di sintassi, \new inaspettato
+  \new Staff @{ @dots{} @}
+  \new Staff @{ @dots{} @}
+@}
+@end example
+
+@noindent
+verrà generato questo messaggio di errore.
+
+Per evitare l'errore, è sufficiente racchiudere tutti i blocchi @code{\new} tra
+parentesi graffe o doppie parentesi uncinate.
+
+Se si usano le parentesi graffe, i blocchi @code{\new} appariranno in
+modo sequenziale:
+
+@lilypond[quote,verbatim]
+\score {
+  {
+    \new Staff { a' a' a' a' }
+    \new Staff { g' g' g' g' }
+  }
+}
+@end lilypond
+
+@noindent
+ma è più probabile che si debbano usare le doppie parentesi uncinate in modo
+che i nuovi righi siano avviati in parallelo, ovvero contemporaneamente:
+
+@lilypond[quote,verbatim]
+\score {
+  <<
+    \new Staff { a' a' a' a' }
+    \new Staff { g' g' g' g' }
+  >>
+}
+@end lilypond
index 491dc3756e79a4c10f071c11f5dec4653bc425d8..a8b66c1a7936cbc137c7cc44f8854505592c5eff 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 45d0e015edc53abebada17a0fdb1d665f7edf900
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -65,8 +65,8 @@ il file.  L'esperienza personale insegna come sia frustrante cercare di ricordar
 quale versione di LilyPond si usava alcuni anni prima!  @command{convert-ly}
 richiede che si dichiari la versione di LilyPond utilizzata.
 
-@item @strong{Includi i controlli}: @ruser{Bar and bar number checks},
-@ruser{Octave checks}.  Includendo i controlli ogni tanto, se fai
+@item @strong{Includi i controlli}: @ruser{Controlli di battuta e del numero di battuta},
+@ruser{Controlli di ottava}.  Includendo i controlli ogni tanto, se fai
 un errore lo puoi individuare più rapidamente.  Cosa si intende per
 @q{ogni tanto}?  Dipende dalla complessità della musica.  Se la musica
 è molto semplice, anche solo una volta o due.  Se la musica è molto
@@ -96,7 +96,7 @@ al momento di rimetter mano alla musica.
 
 @item @strong{Separa le modifiche manuali (tweak)} dalle definizioni
 musicali.  Vedi @rlearning{Ridurre l'input grazie a variabili e funzioni}, e
-@rlearning{Style sheets}.
+@rlearning{Fogli di stile}.
 
 @end itemize
 
@@ -128,7 +128,7 @@ meglio.
 di una variabile, è consigliabile racchiudere le note tra parentesi graffe
 
 @example
-\transpose c altezza-naturale @{...@}
+\transpose c altezza-naturale @{@dots{}@}
 @end example
 
 @noindent
@@ -167,7 +167,7 @@ in una nuova versione di LilyPond.
 violin = \relative c'' @{
 g4 c'8. e16
 @}
-...
+@dots{}
 \score @{
   \new GrandStaff @{
     \new Staff @{
@@ -205,7 +205,7 @@ per individuare l'origine del problema.
 
 Gli strumenti più potenti a questo riguardo sono il commento della
 linea singola (indicato da @code{%}) e il commento di blocco
-(indicato da @code{%@{ ... %@}}).  Se non sai dove sia il problema,
+(indicato da @code{%@{ @dots{} %@}}).  Se non sai dove sia il problema,
 inizia col commentare ampie parti del file di input.  Dopo aver commentato
 una sezione, prova a compilare di nuovo il file.  Se funziona, allora il
 problema deve trovarsi nella parte che hai appena commentato.  Se non
index c22efb5dc936b87c54cf8213bbd5c0b42ff80b55..91c0081b2ea87dc9e038d18f47ac3d21dbcf153c 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: b381556a3132e765159edc75107b31259dbf5988
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
 @chapter Aggiornare i file con @command{convert-ly}
 @translationof Updating files with convert-ly
 
-@cindex Aggiornare un file di LilyPond
+@cindex aggiornare un file di LilyPond
 @cindex convert-ly
 
 La sintassi di input di LilyPond viene regolarmente modificata per semplificarla
 o per migliorarla in vari modi.  L'effetto collaterale è che l'interprete di LilyPond
 spesso non è più compatibile con i vecchi file di input.  Per ovviare a questo
-problema, si può usare il programma @command{convert-ly}, che permette di gestire
-gran parte dei cambiamenti di sintassi tra le versioni di LilyPond.
+problema, si può usare il programma @command{convert-ly} per aggiornare
+i file alle nuove versioni di LilyPond.
 
 @menu
 * Perché la sintassi cambia?::
@@ -56,16 +56,40 @@ vecchi utenti che avevano già delle partiture)?  In questo caso decidemmo di
 cambiare il nome in @code{print-all-headers}.  Fortunatamente, questa modifica
 può essere automatizzata con @command{convert-ly}.
 
-Purtroppo @code{convert-ly} non è in grado di gestire tutti i cambiamenti
+Purtroppo @command{convert-ly} non è in grado di gestire tutti i cambiamenti
 dell'input.  Ad esempio, in LilyPond 2.4 e precedenti, gli accenti e le lettere
 non inglesi venivano inserite con LaTeX -- per mostrare la parola francese per
 Natale si usava @code{No\"el}.  Ma in LilyPond
 @c keep "-matching straight in fancy editors
 2.6 e superiori, il carattere speciale @code{ë} deve essere inserito direttamente
-nel file LilyPond come carattere UTF-8.  @code{convert-ly} non può sostituire
+nel file LilyPond come carattere UTF-8.  @command{convert-ly} non può sostituire
 tutti i caratteri speciali di LaTeX con i rispettivi caratteri UTF-8; è necessario
 aggiornare a mano i vecchi file di input di LilyPond.
 
+Le regole di conversione di @command{convert-ly} si basano sulla ricerca
+e sostituzione di parole chiave piuttosto che su una completa comprensione
+di LilyPond.  Ciò comporta varie conseguenze:
+@itemize @bullet
+@item
+L'affidabilità della conversione dipende dalla qualità di ciascun insieme
+di regole applicate e dalla complessità del rispettivo cambiamento.  Talvolta
+le conversioni richiedono correzioni manuali, quindi la vecchia versione
+deve essere tenuta a disposizione per poterle confrontare.
+@item
+Sono possibili solo conversioni nei formati più recenti: non ci sono regole
+per tornare a una versione precedente.  Dunque la copia di lavoro principale
+di un file LilyPond deve essere aggiornata soltanto quando non è più necessario
+compilarlo con le versioni precedenti di LilyPond.  Sistemi di controllo di
+versione come Git possono essere utili per gestire più di una versione.
+@item
+LilyPond e Scheme hanno delle robuste difese in caso di spazi omessi o
+posizionati in modo originale, ma le regole usate da @command{convert-ly} tendono
+a dare per scontato certe forme stilistiche.  Seguire lo stile usato nei manuali
+è la via più sicura per aggiornamenti indolori, soprattutto perché i manuali
+stessi sono aggiornati con @command{convert-ly}.
+@end itemize
+
+
 
 @node Utilizzo di convert-ly
 @section Utilizzo di @command{convert-ly}
@@ -128,44 +152,62 @@ convert-ly [@var{opzione}]@dots{} @var{nomefile}@dots{}
 Esistono le seguenti opzioni:
 
 @table @code
-@item -e,--edit
+@item -d, --diff-version-update
+aumenta il numero di versione in @code{\version} solo se il file è stato
+modificato da @command{convert-ly}. In questo caso, la dichiarazione di
+versione corrisponderà alla versione successiva all'ultimo reale cambiamento.
+Senza questa opzione, la versione rifletterà l'ultima conversione
+@emph{tentata}.
+
+@item -e, --edit
 Applica le conversioni direttamente nel file di input, modificando
-l'originale.
+l'originale.  Il file originale viene rinominato @file{nomefile.ly~}.  Questo
+file di backup può essere un file nascosto in alcuni sistemi operativi.
 
-@item -f,--from=@var{from-patchlevel}
+@item -b, --backup-numbered
+Se usato insieme all'opzione @samp{-e}, aggiunge un numero al nome dei file
+di backup, in modo da non sovrascrivere i backup precedenti.  I file di
+backup possono essere nascosti in alcuni sistemi operativi.
+
+@item -f, --from=@var{from-patchlevel}
 Imposta la versione da cui convertire.  Se non viene impostata, @command{convert-ly}
 la ricaverà dalla stringa @code{\version} presente nel file.
 Esempio: @option{--from=2.10.25}
 
-@item -n,--no-version
+@item -h, --help
+Mostra la schermata di aiuto.
+
+@item -l @var{loglevel}, --loglevel=@var{loglevel}
+Imposta la verbosità dell'output su @var{loglevel}. I valori possibili, in
+caratteri maiuscoli, sono @code{PROGRESS} (predefinito), @code{NONE},
+@code{WARNING}, @code{ERROR} e @code{DEBUG}.
+
+@item -n, --no-version
 Normalmente @command{convert-ly} aggiunge un indicatore @code{\version}
 nell'output.  Questa opzione lo impedisce.
 
 @item -s, --show-rules
 Mostra tutte le conversioni conosciute ed esce.
 
-@item --to=@var{to-patchlevel}
-Imposta la versione obiettivo della conversione.  L'impostazione predefinita
-è l'ultima versione disponibile.  Esempio: @option{--to=2.12.2}
-
-@item -h, --help
-Mostra la schermata di aiuto.
+@item -t, --to=@var{to-patchlevel}
+Imposta esplicitamente la versione obiettivo della conversione, altrimenti
+viene usato il valore più recente.  Deve essere maggiore della versione iniziale.
+@example
+convert-ly --to=2.14.1 miofile.ly
+@end example
 
-@item -l @var{loglevel}, --loglevel=@var{loglevel}
-Imposta la verbosità dell'output su @var{loglevel}. I valori possibili sono @code{NONE},
-@code{ERROR}, @code{WARNING}, @code{PROGRESS} (predefinito) e @code{DEBUG}.
 @end table
 
 Per aggiornare i frammenti LilyPond presenti nei file texinfo, si usa
 
 @example
-convert-ly --from=... --to=... --no-version *.itely
+convert-ly --from=@dots{} --to=@dots{} --no-version *.itely
 @end example
 
 Per vedere i cambiamenti della sintassi di LilyPond tra due versioni, si usa
 
 @example
-convert-ly --from=... --to=... -s
+convert-ly --from=@dots{} --to=@dots{} -s
 @end example
 
 
@@ -267,5 +309,3 @@ converted.
  \score{} must now begin with a music expression.  Anything else
  (particularly \header{}) must come after the music.
 @end verbatim
-
-
diff --git a/Documentation/it/web/GNUmakefile b/Documentation/it/web/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index d3f2fe759a99ecaa8e79e1cb2280077869af801e..4737b5c964061e3471ba9ef5480601fb431859a0 100644 (file)
@@ -1,12 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 @ignore
-    Translation of GIT committish: 7f8a93a6c044fcbb3c7aeb3aa5cba0c921dc7691
+    Translation of GIT committish: b4a06339566ce7e7f17ba60745261fc26b32abb0
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
+@include included/acknowledge.itexi
 @include included/authors.itexi
 @include included/helpus.itexi
 
@@ -54,6 +55,9 @@ quando si discute di LilyPond.
 @item
 @ref{Autori}: le persone che hanno reso LilyPond quello che è oggi.
 
+@item
+@ref{Riconoscimenti}: progetti e istituzioni che supportano LilyPond
+
 @end itemize
 @divEnd
 
@@ -86,6 +90,7 @@ quando si discute di LilyPond.
 * Sviluppo::
 * GSoC 2012::
 * Autori::
+* Riconoscimenti::
 * Pubblicazioni::
 * Notizie vecchie::
 * Soffitta::
@@ -458,12 +463,11 @@ Sei iscritto alla mailing list @uref{mailto:bug-lilypond@@gnu.org,
 bug-lilypond@@gnu.org}, puoi inviare una normale email.
 
 @item
-Se non sei iscritto, puoi comunque inviare una segnalazione bug report attraverso
-the
+Se non sei iscritto, puoi comunque inviare una segnalazione bug attraverso
 @uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs,
 l'interfaccia web lilypond.bugs di gmane}.
 
-Purtroppo c'è un severo controllo @qq{no top-posting} nell'interfaccia di
+Purtroppo c'è un severo controllo @qq{contro il top-posting} nell'interfaccia di
 gmane, che viene spesso innescato erroneamente dai file lilypond.
 Per evitarlo, aggiungi
 
@@ -550,7 +554,7 @@ privati è affar loro, non nostro.
 @divClass{column-right-top}
 @subheading Linee guida
 
-Gli utenti che desiderano offrire del denato in cambio di lavoro devono
+Gli utenti che desiderano offrire del denaro in cambio di lavoro devono
 tenere a mente i seguenti punti:
 
 @itemize
@@ -774,12 +778,13 @@ manuali sono reperibili su @url{http://lilypond.org}}
 @divClass{normal-table}
 @multitable @columnfractions .3 .3 .3
 @headitem Introduzione
+
 @item
-@docLinkSplit{Learning,learning,@manualDevelLearningSplit}
+@docLinkSplit{Learning,learning,@manualDevelLearningSplit-it}
 @tab
-@docLinkBig{Learning,learning,@manualDevelLearningBig}
+@docLinkBig{Learning,learning,@manualDevelLearningBig-it}
 @tab
-@docLinkPdf{Learning,learning,@manualDevelLearningPdf}
+@docLinkPdf{Learning,learning,@manualDevelLearningPdf-it}
 
 @item
 @docLinkSplit{Glossary,music-glossary,@manualDevelGlossarySplit}
@@ -789,27 +794,29 @@ manuali sono reperibili su @url{http://lilypond.org}}
 @docLinkPdf{Glossary,music-glossary,@manualDevelGlossaryPdf}
 
 @item
-@docLinkSplit{Essay,essay,@manualDevelEssaySplit}
+@docLinkSplit{Essay,essay,@manualDevelEssaySplit-it}
 @tab
-@docLinkBig{Essay,essay,@manualDevelEssayBig}
+@docLinkBig{Essay,essay,@manualDevelEssayBig-it}
 @tab
-@docLinkPdf{Essay,essay,@manualDevelEssayPdf}
+@docLinkPdf{Essay,essay,@manualDevelEssayPdf-it}
+@end multitable
 
+@multitable @columnfractions .3 .3 .3
 @headitem Regolare
 
 @item
-@docLinkSplit{Notation,notation,@manualDevelNotationSplit}
+@docLinkSplit{Notation,notation,@manualDevelNotationSplit-it}
 @tab
-@docLinkBig{Notation,notation,@manualDevelNotationBig}
+@docLinkBig{Notation,notation,@manualDevelNotationBig-it}
 @tab
-@docLinkPdf{Notation,notation,@manualDevelNotationPdf}
+@docLinkPdf{Notation,notation,@manualDevelNotationPdf-it}
 
 @item
-@docLinkSplit{Usage,usage,@manualDevelUsageSplit}
+@docLinkSplit{Usage,usage,@manualDevelUsageSplit-it}
 @tab
-@docLinkBig{Usage,usage,@manualDevelUsageBig}
+@docLinkBig{Usage,usage,@manualDevelUsageBig-it}
 @tab
-@docLinkPdf{Usage,usage,@manualDevelUsagePdf}
+@docLinkPdf{Usage,usage,@manualDevelUsagePdf-it}
 
 @item
 @docLinkSplit{Snippets,snippets,@manualDevelSnippetsSplit}
@@ -817,15 +824,17 @@ manuali sono reperibili su @url{http://lilypond.org}}
 @docLinkBig{Snippets,snippets,@manualDevelSnippetsBig}
 @tab
 @docLinkPdf{Snippets,snippets,@manualDevelSnippetsPdf}
+@end multitable
 
+@multitable @columnfractions .3 .3 .3
 @headitem Saltuario
 
 @item
-@docLinkSplit{Web,web,@manualDevelWebSplit}
+@docLinkSplit{Web,web,@manualDevelWebSplit-it}
 @tab
-@docLinkBig{Web,web,@manualDevelWebBig}
+@docLinkBig{Web,web,@manualDevelWebBig-it}
 @tab
-@docLinkPdf{Web,web,@manualDevelWebPdf}
+@docLinkPdf{Web,web,@manualDevelWebPdf-it}
 
 @item
 @docLinkSplit{Changes,changes,@manualDevelChangesSplit}
@@ -847,15 +856,17 @@ manuali sono reperibili su @url{http://lilypond.org}}
 @docLinkBig{Internals,internals,@manualDevelInternalsBig}
 @tab
 @docLinkPdf{Internals,internals,@manualDevelInternalsPdf}
+@end multitable
 
 @ifset web_version
+@multitable @columnfractions .3
 @headitem Per scaricare
 
 @item
 @doctarballDevel
+@end multitable
 @end ifset
 
-@end multitable
 
 @divEnd
 @divEnd
@@ -938,7 +949,7 @@ Aggiungere la capacità di collegare ogni oggetto dell'output
 (e quindi al tag XML nell'albero XML)
 
 @item
-Aggiungere un backend di outoput XML, che possa aggiungere le informazioni di
+Aggiungere un backend di output XML, che possa aggiungere le informazioni di
 formattazione per ogni oggetto di output ai tag XML
 
 @end itemize
@@ -1109,6 +1120,19 @@ patch che introduca avvisi ulteriori.
 @divEnd
 
 
+@node Riconoscimenti
+@unnumberedsec Riconoscimenti
+@translationof Acknowledgements
+
+@divClass{column-center-top}
+@subheading Riconoscimenti
+
+@divClass{keep-bullets}
+@acknowledgementsCurrent
+@divEnd
+@divEnd
+
+
 
 @node Pubblicazioni
 @unnumberedsec Pubblicazioni
@@ -1159,7 +1183,8 @@ in @ref{Soffitta}}
 @subheading Annunci
 
 Annunci e notizie ordinati per versione:
-@uref{http://lilypond.org/doc/v2.14/Documentation/web/index#LilyPond-2_002e14_002e0-released_0021-June-6_002c-2011,v2.14}
+@uref{http://lilypond.org/doc/v2.16/Documentation/web/index#Lilypond-2_002e16_002e0-released_0021-August-24_002c-2012-1,v2.16},
+@uref{http://lilypond.org/doc/v2.14/Documentation/web/index#LilyPond-2_002e14_002e0-released_0021-June-6_002c-2011,v2.14},
 @miscLink{announce-v2.12,v2.12},
 @miscLink{announce-v2.10,v2.10},
 @miscLink{announce-v2.8,v2.8},
@@ -1172,25 +1197,43 @@ Annunci e notizie ordinati per versione:
 @miscLink{ANNOUNCE-0.1,v0.1}
 
 Elenco descrittivo dei cambiamenti per ogni versione:
-+@uref{http://lilypond.org/doc/v2.14/Documentation/changes/index.html,v2.14},
-+@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS,v2.12},
-+@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS,v2.10},
-+@uref{http://lilypond.org/doc/v2.8/Documentation/topdocs/NEWS,v2.8},
-+@uref{http://lilypond.org/doc/v2.6/Documentation/topdocs/NEWS,v2.6},
-+@uref{http://lilypond.org/doc/v2.4/Documentation/topdocs/out-www/NEWS,v2.4},
-+@uref{http://lilypond.org/doc/v2.2/Documentation/topdocs/out-www/NEWS,v2.2},
-+@uref{http://lilypond.org/doc/v2.0/Documentation/topdocs/out-www/NEWS,v2.0},
-+@uref{http://lilypond.org/doc/v1.8/Documentation/topdocs/out-www/NEWS,v1.8},
-+@uref{http://lilypond.org/doc/v1.6/Documentation/out-www/NEWS,v1.6},
-+@miscLink{NEWS-1.4,v1.4},
-+@miscLink{NEWS-1.2,v1.2}
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/index.html,v2.16},
+@uref{http://lilypond.org/doc/v2.14/Documentation/changes/index.html,v2.14},
+@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS,v2.12},
+@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS,v2.10},
+@uref{http://lilypond.org/doc/v2.8/Documentation/topdocs/NEWS,v2.8},
+@uref{http://lilypond.org/doc/v2.6/Documentation/topdocs/NEWS,v2.6},
+@uref{http://lilypond.org/doc/v2.4/Documentation/topdocs/out-www/NEWS,v2.4},
+@uref{http://lilypond.org/doc/v2.2/Documentation/topdocs/out-www/NEWS,v2.2},
+@uref{http://lilypond.org/doc/v2.0/Documentation/topdocs/out-www/NEWS,v2.0},
+@uref{http://lilypond.org/doc/v1.8/Documentation/topdocs/out-www/NEWS,v1.8},
+@uref{http://lilypond.org/doc/v1.6/Documentation/out-www/NEWS,v1.6},
+@miscLink{NEWS-1.4,v1.4},
+@miscLink{NEWS-1.2,v1.2}
+
+@divEnd
+
+@subheading Grazie
+
+Grazie a sviluppatori, collaboratori, cacciatori di bug e a chi ci ha dato
+preziosi suggerimenti
+@miscLink{THANKS-2.16,v2.16},
+@miscLink{THANKS-2.14,v2.14},
+@miscLink{THANKS-2.12,v2.12},
+@miscLink{THANKS-2.10,v2.10},
+@miscLink{THANKS-2.8,v2.8},
+@miscLink{THANKS-2.6,v2.6},
+@miscLink{THANKS-2.4,v2.4},
+@miscLink{THANKS-2.2,v2.2},
+@miscLink{THANKS-2.0,v2.0},
+@miscLink{THANKS-1.8,v1.8}
 
 @divEnd
 
 @divClass{column-center-bottom}
-@subheading Changelog
+@subheading Lista dei cambiamenti
 
-Changelog degli sviluppatori per ogni versione:
+Lista dei cambiamenti apportati da ciascun sviluppatore in ogni versione:
 @miscLink{ChangeLog-2.10,v2.10},
 @miscLink{ChangeLog-2.3,v2.3},
 @miscLink{ChangeLog-2.1,v2.1},
index 10dea82c2944b778bc85e0a559d3339ac9e257c9..d9c853dea45b2f7ca309bed8fd5da4f94c28873f 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 @ignore
-    Translation of GIT committish: 4239aa2369f74d8e8622c2235154e9f064c394f7
+    Translation of GIT committish: 2970311021cf68958850e43911e0cecf51f68fbc
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -220,14 +220,6 @@ sh lilypond-@versionStable{}-OS-TYPE.sh --help
 
 
 @divClass{column-right-top}
-@subheading Compilare un file
-
-@lilypadCommandLine
-
-@divEnd
-
-
-@divClass{column-left-top}
 @subheading Pacchetti specifici di una distribuzione
 
 Usa il gestore pacchetti della tua distribuzione per istallare o
@@ -265,6 +257,14 @@ openSUSE: LilyPond 2.12.3}
 @divEnd
 
 
+@divClass{column-center-top}
+@subheading Compilare un file
+
+@lilypadCommandLine
+
+@divEnd
+
+
 @divClass{column-center-bottom}
 @subheading Legalese
 
@@ -319,18 +319,10 @@ Elimina la cartella LilyPond.app.
 @divEnd
 
 @divClass{column-right-top}
-@subheading Compilare un file
-
-@lilypadOSX
-
-@divEnd
-
-
-@divClass{column-left-top}
 @subheading Esecuzione da linea di comando
 
-@warning{Se ti trovi bene con l'interfaccia grafica, puoi ignorare
-queste istruzioni.}
+@warning{Se ti trovi bene con le istruzioni per interfaccia grafica sotto, puoi
+ignorare queste istruzioni.}
 
 @subsubheading MacOS X su linea di comando
 
@@ -410,6 +402,14 @@ Lo stesso vale per tutti gli altri script in quella directory, come
 @divEnd
 
 
+@divClass{column-center-top}
+@subheading Compilare un file
+
+@lilypadOSX
+
+@divEnd
+
+
 @divClass{column-center-bottom}
 @subheading Legalese
 
@@ -440,7 +440,7 @@ Si riconoscono il copyright e i marchi di tutti i loghi e le immagini dei prodot
 @item
 @sourceimage{logo-windows,,,}
 @downloadStableWindows
-Per Windows 2000, XP, Vista, e Windows 7.
+Per Windows 2000, XP, Vista, Windows 7 e 8.
 
 @end itemize
 
@@ -450,10 +450,10 @@ Per Windows 2000, XP, Vista, e Windows 7.
 
 @item
 Trova il file scaricato e clicca due volte su di esso per avviare
-l'installer. Segui le istruzioni fornite dall'installer;
+il programma di installazione. Segui le istruzioni fornite dal programma.
 Ti consigliamo di lasciare tutte le opzioni di installazione attivate e
 e di usare il percorso di installazione predefinito. Clicca sul bottone @q{Finito}
-quando l'installer è terminato. LilyPond è ora installato.
+quando la procedura di installazione è terminata. LilyPond è ora installato.
 
 @end enumerate
 
@@ -479,18 +479,10 @@ bottone @q{Finish} quando la disinstallazione è terminata.
 
 
 @divClass{column-right-top}
-@subheading Compilare un file
-
-@lilypadWindows
-
-@divEnd
-
-
-@divClass{column-left-top}
 @subheading Esecuzione da linea di comando
 
-@warning{Se ti trovi bene con l'interfaccia grafica, puoi ignorare
-queste istruzioni.}
+@warning{Se ti trovi bene con le istruzioni per interfaccia grafica sotto, puoi
+ignorare queste istruzioni.}
 
 @subsubheading Windows da linea di comando
 
@@ -540,6 +532,13 @@ lilypond test.ly
 @divEnd
 
 
+@subheading Compilare un file
+
+@lilypadWindows
+
+@divEnd
+
+
 @divClass{column-center-bottom}
 @subheading Legalese
 
index 5bf496ca4b52a5671fcd7ba28c35955a17bdb12b..1bdf661fa01e0a59f7c7d26bfe26828af636dc24 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 @ignore
-    Translation of GIT committish: 6cb3cdbe1895fd9cb466fa8b6338c1420065cb79
+    Translation of GIT committish: f6443f01a56112f080b8d2e7e646007397bdf6ec
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -497,6 +497,18 @@ In evidenza:
 @divClass{keep-bullets}
 @itemize
 
+@item
+Un'edizione critica di @emph{Enea nel Lazio (1760)} di Tommaso
+Traetta, opera seria con libretto di Vittorio Amedeo Cigna-Santi, in
+quattro parti:
+@uref{http://www.academia.edu/1987651/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_1_4_, Parte prima}
+@uref{http://www.academia.edu/1994533/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_2_4_, Parte seconda}
+@uref{http://www.academia.edu/1994558/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_3_4_, Parte terza}
+@uref{http://www.academia.edu/1996242/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_4_4_, Parte quarta}
+Creata da
+@uref{http://unito.academia.edu/LucaRossettoCasel, Luca Rossetto Casel}
+per la sua tesi di dottorato.
+
 @item
 @emph{Pictures at an exhibition} di Mussorgsky, riorchestrata e diretta
 da @uref{http://www.aurelienbello.com/,Aurélien Bello} con
@@ -517,7 +529,7 @@ New Music Ensemble}.
 @item
 @emph{Anonymous Student Compliment or Complaint}, di
 @uref{http://www.mikesolomon.org, Mike Solomon}, che ha vinto il
-@uref{http://leftcoastensemble.org/contest, Left Coast Composition Contest del 2011},
+@uref{http://leftcoastensemble.org, Left Coast Composition Contest del 2011},
 a cui hanno partecipato 172 opere provenienti da 22 paesi.
 Altre opere comprendono Norman (age 1) per clarinetto solo, eseguita all'Electroacoustic
 Music Festival (FEMF) della @uref{http://emu.music.ufl.edu/fems_concerts.html, University of Florida}
@@ -532,7 +544,7 @@ per celebrare il 350° compleanno del compositore.
 
 @item
 Esecuzione dell' @emph{Armide} di Lully da parte della
-@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque},
+@uref{http://www.mercurybaroque.org, Mercury Baroque},
 15-16 Maggio 2009, a Houston, Texas (spartiti realizzati da
 @uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}).
 
@@ -540,7 +552,8 @@ Esecuzione dell' @emph{Armide} di Lully da parte della
 Brani strumentali dall' @emph{Hippolyte et Aricie} di Rameau presso
 la St. James's Church a Manhattan, 8 Maggio 2009, di Frederick Renz
 e il suo complesso @uref{http://www.earlymusicny.org/, Early Music
-New York} (spartiti realizzati da Nicolas Sceaux).
+New York} (spartiti realizzati da
+@uref{http://nicolas.sceaux.free.fr/,Nicolas Sceaux}).
 
 @item
 @emph{Affaire étrangère}, un opera di
@@ -708,8 +721,8 @@ Gli editor di Computer!Totaal, una rivista olandese di computer,
 nel numero di Ottobre 2004
 @uref{http://lilypond.org/website/pdf/computer-totaal.jpeg,
 descrivono LilyPond} come: @qq{Meraviglioso software
-libero [..] Gli spartiti prodotti da
-LilyPond sono incredibilmente belli [..] un sistema molto potente che
+libero [@dots{}] Gli spartiti prodotti da
+LilyPond sono incredibilmente belli [@dots{}] un sistema molto potente che
 può fare praticamente qualsiasi cosa.}
 
 @item
@@ -736,7 +749,7 @@ Febbraio 2004
 
 Il cantante jazz Gail Selkirk scrive su
 @uref{http://www.songbirdofswing.com/editorial_page/lilypond/,
-Tuffarsi in LilyPond}.  @qq{... puoi scrivere lead sheet o parti per
+Tuffarsi in LilyPond}.  @qq{@dots{} puoi scrivere lead sheet o parti per
 un'intera orchestra, e i risultati possono essere sorprendenti.}
 @uref{http://www.computermusic.co.uk/, Computer Music Special},
 numero CMS06.
@@ -766,7 +779,7 @@ nemmeno la metà della mia!}
 @subsubheading @uref{http://icem-www.folkwang-hochschule.de/~finnendahl/, Orm Finnendahl}, professore di Composizione, Musikhochschule Freiburg
 
 @qq{Anche se non conosco [LilyPond] molto bene ancora, sono
-@strong{*molto} colpito.  Ho usato il programma per scrivere un mottetto di
+@strong{molto} colpito.  Ho usato il programma per scrivere un mottetto di
 Josquin Desprez in notazione mensurale e non c'è dubbio che
 lilypond batte facilmente tutti gli altri programmi di notazione per
 quanto riguarda la velocità, la facilità d'uso e la resa grafica!}
@@ -777,7 +790,7 @@ quanto riguarda la velocità, la facilità d'uso e la resa grafica!}
 @imageFloat{darius-blasband,jpg, right}
 @subsubheading Darius Blasband, compositore (Bruxelles, Belgio)
 
-@qq{[..dopo la prima prova d'orchestra] ho ricevuto molti
+@qq{[@dots{}dopo la prima prova d'orchestra] ho ricevuto molti
 complimenti per la qualità degli spartiti.  Ancora più
 importante: sebbene Lilypond fornisca molti trucchi per migliorare
 l'aspetto degli spartiti, quello che l'orchestra ha ricevuto da me è
@@ -792,10 +805,10 @@ l'output grezzo e privo di ritocchi.}
 lavoro.  Non ho mai visto niente che possa avvicinarsi all'output di
 Lilypond -- sono assolutamente sicuro che le mie necessità nel campo
 dell'editoria musicale saranno soddisfatte oltre ogni aspettativa usando
-questo fantastico programma.  [..] l'output predefinito di Lilypond [..] ha
+questo fantastico programma.  [@dots{}] l'output predefinito di Lilypond [@dots{}] ha
 un aspetto migliore delle recenti pubblicazioni @q{professionali} con cui
 l'ho confrontato (ovvero quasi qualsiasi spartito della Warner Bros, e anche molti
-dei più recenti delle @q{vecchie case editrici}). [..]}
+dei più recenti delle @q{vecchie case editrici}). [@dots{}]}
 
 @qq{Li batte tutti, Finale/Sibelius/Igor/, qualsiasi cosa!!!}
 @divEnd
@@ -834,7 +847,7 @@ farlo.  Sono sicuro che nessun prodotto commerciale può avvicinarsi a questo.}
 @divClass{testimonial-item}
 @subsubheading David Bobroff, trombone basso, Iceland Symphony Orchestra
 
-@qq{Credo che Lilypond sia un grande programma [..] Più imparo LilyPond
+@qq{Credo che Lilypond sia un grande programma [@dots{}] Più imparo LilyPond
 e più mi piace!}
 @divEnd
 
@@ -843,7 +856,7 @@ e più mi piace!}
 @subsubheading Vaylor Trucks, chitarrista elettrico
 (@uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12,connesso con i} Yes)
 
-@qq{Sono impressionato da LilyPond [..]}
+@qq{Sono impressionato da LilyPond [@dots{}]}
 
 @qq{QUESTO È IL MIGLIOR PROGRAMMA MAI ESISTITO!!!}
 
@@ -856,7 +869,7 @@ e più mi piace!}
 
 @qq{Con LilyPond avevo una specie di relazione di amore-odio.  Amore
 perché il primo spartito che ho visto era così meraviglioso! Il modo in cui
-LilyPond viene presentato mente sulla sua bellezza, è troppo modesto! [..] Via
+LilyPond viene presentato mente sulla sua bellezza, è troppo modesto! [@dots{}] Via
 via che LilyPond migliora, costantemente, e io vedo come le cose vengono
 fatte in Scheme, ho sempre meno frustrazioni.  Comunque,
 quello che voglio dire è: grazie per metterci a disposizione LilyPond, è davvero
@@ -943,7 +956,7 @@ di tutto questo a un ritmo molto più graduale.}
 
 @subsubheading È semplice come l'A B C
 
-Le note vengoo codificate con lettere e numeri.  I comandi speciali sono
+Le note vengono codificate con lettere e numeri.  I comandi speciali sono
 inseriti con barre inverse (backslash).
 
 @imageFloat{text-input-1-annotate-it,png,center}
@@ -997,7 +1010,7 @@ altezza reale):
 Comprendiamo il fatto che molti utenti trovino questo modo di scrivere
 musica un po' strano.  Per questo motivo, abbiamo scritto un'ampia documentazione
 per aiutare i nuovi utenti, a cominciare dal manuale di @ref{Apprendimento}.  Il Manuale
-di Apprendimento Ã¨ il luogo migliore da cui iniziare, perchè molte domande trovano
+di Apprendimento Ã¨ il luogo migliore da cui iniziare, perché molte domande trovano
 risposta prima ancora di manifestarsi!
 
 Sei pregato di leggere il Manuale di Apprendimento prima di lamentarti per ipotetici malfunzionamenti!
@@ -1154,9 +1167,9 @@ Emacs è un editor di testo che ha la capacità di comprendere molti
 diversi linguaggi informatici.  Emacs è un editor molto estendibile
 e può essere usato come ambiente di sviluppo integrato (IDE).
 C'è una @q{modalità lilypond} che fornisce le definizioni del
-linguaggio per poter lavorare con i file sorgente di Lilypond.  Uno dei nostri
-sviluppatori ha scritto
-@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}, una
+linguaggio per poter lavorare con i file sorgente di Lilypond.
+Uno sviluppatore ha scritto
+@uref{https://github.com/nsceaux/lyqi,lyqi}, una
 modalità primaria di Emacs.
 
 @uref{http://www.vim.org}
@@ -1194,6 +1207,13 @@ usando le estensioni disponibili presso:
 
 @itemize
 
+@item
+@uref{http://www.jezra.net/projects/bwwtolily,bwwtolily} tenta
+di convertire un file @code{.bww} o @code{.bmw} in formato
+LilyPond.  Anche se non tutti gli abbellimenti verranno
+convertiti correttamente (questo vale soprattutto per i
+piobaireachd), il programma li elenca.
+
 @item
 @uref{http://www.canorus.org,Canorus}, un editor di partiture, può anche
 esportare in formato LilyPond, ma è un software ancora in beta.  Gli utenti
@@ -1223,7 +1243,6 @@ l'esportazione in formato LilyPond.
 @item
 @uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,
 NW2LY} è un programma scritto in C# che converte una canzone di NoteWorthy
-@c @uref{http://www.noteworthysoftware.com/,NoteWorthy}
 in formato LilyPond.
 
 @item
@@ -1257,12 +1276,14 @@ Control progettata per aiutare i compositori a costruire pezzi complessi
 di notazione LilyPond in modo iterativo e incrementale.
 
 @item
-@uref{http://common-lisp.net/project/fomus/,FOMUS}, una libreria LISP per
-generare notazione musicale da ambienti software per la musica prodotta
-da computer.
+@uref{http://common-lisp.net/project/fomus/,FOMUS}, (FOrmat MUSic)
+è uno strumento di notazione musicale per compositori di
+musica elettronica.  È scritto nel linguaggio di programmazione
+LISP ed è stato testato su vari interpreti.  È disponibile
+anche un port in C++.
 
 @item
-@uref{http://strasheela.sourceforge.net,Strasheela}, un
+@uref{http://strasheela.sourceforge.net/strasheela/doc/index.html,Strasheela}, un
 ambiente costruito sul linguaggio di programmazione a vincoli
 @uref{http://www.mozart-oz.org/, Mozart/Oz}.
 @end itemize
@@ -1282,7 +1303,7 @@ LilyKDE3 per KDE 3.5 e lilypond-KDE4 per KDE 4.1.
 
 @item
 @uref{http://noteedit.berlios.de,NoteEdit}, che importava
-@uref{http://www.musicxml.com/xml.html,MusicXML}, è stato "forkato"
+@uref{http://www.makemusic.com/musicxml,MusicXML}, è stato "forkato"
 in
 @uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}
 e @uref{http://canorus.org,Canorus}.
index 23c77980eed6c0ff83373e655ba1e5e9fd76948a..27a050e7b8097cdf55c2de84142acc72a5231e57 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
 @ignore
-    Translation of GIT committish: c7175b7e8387655964d9c9a975e9789fe581043c
+    Translation of GIT committish: 673a3c376246f030f524d3eb3680b6d902c51ad1
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -67,7 +67,7 @@ informazioni sull'incisione realizzata dal computer.
 
 @itemize
 
-@item @ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notazione}}
+@item @ifWebLinks{@manualStableNotationSplitNoName-it,@rusernamed{Top,Notazione}}
 guida alla sintassi.
 @details{Notazione}
 
@@ -140,6 +140,20 @@ License.
 
 @divEnd
 
+@divClass{column-center-bottom}
+@subheading Formati dei manuali
+
+I manuali di LilyPond vengono offerti generalmente in tre
+formati: HTML multipagina, HTML grande e PDF.  L'HTML multipagina
+è ottimale per la lettura online.  L'HTML grande (e alcuni di
+questi possono essere davvero grandi) contiene l'intero manuale
+in una sola pagina.  Il PDF può essere scaricato e usato offline.
+Per vedere questi tre formati segui i collegamenti
+@code{dettagli di} e poi il nome del manuale.
+
+@divEnd
+
+
 @divEnd
 
 
@@ -190,9 +204,9 @@ e seguire questi riferimenti incrociati per maggiori informazioni.
 
 @docLinks{Apprendimento, learning,
   @rlearningnamed{Top,Apprendimento},
-  @manualStableLearningSplit,
-  @manualStableLearningBig, 1.5 MB,
-  @manualStableLearningPdf, 3 MB}
+  @manualStableLearningSplit-it,
+  @manualStableLearningBig-it, 3 MB,
+  @manualStableLearningPdf-it, 5 MB}
 
 @divEnd
 
@@ -243,8 +257,8 @@ nella versione PDF a causa della sua maggiore risoluzione.}
 @docLinks{Saggio, essay,
   @ressaynamed{Top,Saggio},
   @manualStableEssaySplit,
-  @manualStableEssayBig, 2 MB,
-  @manualStableEssayPdf, 2.5 MB}
+  @manualStableEssayBig, 1 MB,
+  @manualStableEssayPdf, 2 MB}
 
 @divEnd
 
@@ -269,9 +283,9 @@ musicali inglesi presentati nel Glossario.}
 
 @docLinks{Notazione, notation,
   @rusernamed{Top,Notazione},
-  @manualStableNotationSplit,
-  @manualStableNotationBig, 7 MB,
-  @manualStableNotationPdf, 18 MB}
+  @manualStableNotationSplit-it,
+  @manualStableNotationBig-it, 9 MB,
+  @manualStableNotationPdf-it, 35 MB}
 
 @divEnd
 
@@ -294,9 +308,9 @@ intraprendere un progetto impegnativo.
 
 @docLinks{Uso, usage,
   @rprogramnamed{Top,Uso},
-  @manualStableUsageSplit,
-  @manualStableUsageBig, 400 KB,
-  @manualStableUsagePdf, 600 KB}
+  @manualStableUsageSplit-it,
+  @manualStableUsageBig-it, 400 KB,
+  @manualStableUsagePdf-it, 650 KB}
 
 @divEnd
 
@@ -327,8 +341,8 @@ ha un collegamento alla lista dei relativi frammenti di codice.
 @docLinks{Frammenti, snippets,
   @rlsrnamed{Top,Frammenti},
   @manualStableSnippetsSplit,
-  @manualStableSnippetsBig, 2.5 MB,
-  @manualStableSnippetsPdf, 8 MB}
+  @manualStableSnippetsBig, 1.5 MB,
+  @manualStableSnippetsPdf, 12.5 MB}
 
 @divEnd
 
@@ -403,9 +417,9 @@ di bug e lo sviluppo.
 
 @docLinksBare{Web, web,
   @ref{Top,Web},
-  @manualDevelWebSplit,
-  @manualDevelWebBig, 1 MB,
-  @manualDevelWebPdf, 2 MB}
+  @manualDevelWebSplit-it,
+  @manualDevelWebBig-it, 2.5 MB,
+  @manualDevelWebPdf-it, 3.5 MB}
 
 @divEnd
 
@@ -427,8 +441,8 @@ funzionalità di LilyPond rispetto alla versione stabile precedente.
 @docLinks{Cambiamenti, changes,
   @rchangesnamed{Top,Cambiamenti},
   @manualStableChangesSplit,
-  @manualStableChangesBig, 6 KB,
-  @manualStableChangesPdf, 200 KB}
+  @manualStableChangesBig, 90 KB,
+  @manualStableChangesPdf, 80 KB}
 
 @divEnd
 
@@ -450,8 +464,8 @@ funzionalità di LilyPond.
 @docLinks{Estendere, extending,
   @rextendnamed{Top,Estendere},
   @manualStableExtendingSplit,
-  @manualStableExtendingBig, 200 KB,
-  @manualStableExtendingPdf, 400 KB}
+  @manualStableExtendingBig, 300 KB,
+  @manualStableExtendingPdf, 500 KB}
 
 @divEnd
 
@@ -483,8 +497,8 @@ che si riferisce alla documentazione generata.
 @docLinks{Funzionamento interno, internals,
   @rinternalsnamed{Top,Funzionamento interno},
   @manualStableInternalsSplit,
-  @manualStableInternalsBig, 2.5 MB,
-  @manualStableInternalsPdf, 2.8 MB}
+  @manualStableInternalsBig, 3 MB,
+  @manualStableInternalsPdf, 4 MB}
 
 @divEnd
 
@@ -531,12 +545,12 @@ I pacchetti scaricabili sono disponibili presso @uref{http://lilypond.org}
 @divClass{keep-bullets}
 @itemize
 
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals,
+Documentazione di LilyPond 2.14}
+
 @item @uref{http://lilypond.org/doc/v2.12/Documentation/,
 Documentazione di LilyPond 2.12}
 
-@item @uref{http://lilypond.org/doc/v2.11/Documentation/,
-Documentazione di LilyPond 2.11}
-
 @item @uref{http://lilypond.org/doc/v2.10/Documentation/,
 Documentazione di LilyPond 2.10}
 
index 24cff45d256a27459be438fbbc70d35e82f336c5..54c121296993e5e8fd8385f551f61f9f6d50ed44 100644 (file)
@@ -1,6 +1,5 @@
 ISOLANG = ja
 depth = ../..
-SUBDIRS = web learning texidocs usage included notation
 STEPMAKE_TEMPLATES = documentation texinfo
 LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
 NO_PDF_FILES = 1
diff --git a/Documentation/ja/included/GNUmakefile b/Documentation/ja/included/GNUmakefile
deleted file mode 100644 (file)
index afe7a4d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
index dde1cd42b23f5b96cd5b5ea7658595e4689ecf42..c7534bfc10ce3e44329cdf6ef5ea6567011ccf12 100644 (file)
@@ -89,7 +89,7 @@ Mac OS に付属されているデフォルトの Preview PDF ビューアを使
 
 デスクトップ上の LilyPond アイコンをクリックして、見本のファイルを開きます。
 
-@sourceimage{Learning_Win7_Welcome_File_Whole,,,}
+@sourceimage{LilyPad,,,}
 
 見本ファイルの上端に表示されるメニューから
 @w{@code{ファイル > 名前を付けて保存}} を選択します。@c
@@ -97,11 +97,11 @@ Mac OS に付属されているデフォルトの Preview PDF ビューアを使
 なぜならファイルに有効な LilyPond ファイル名を付けるまで、@c
 上書き保存は機能しないからです。
 
-@sourceimage{Learning_Win7_Save_Menu,,,}
+@sourceimage{FileSave,,,}
 
 ファイル名を決めます。例えば @file{test.ly} とします。
 
-@sourceimage{Learning_Win7_Save_File_With_Name,,,}
+@sourceimage{SaveAs,,,}
 
 
 @subsubheading ステップ 2a. コンパイルする (ドラッグ&ドロップを使用します)
@@ -110,13 +110,13 @@ Mac OS に付属されているデフォルトの Preview PDF ビューアを使
 
 ファイルを LilyPond アイコンに直接ドラッグ&ドロップします。
 
-@sourceimage{Learning_Win7_Open_Dragndrop,,,}
+@sourceimage{DragDrop,,,}
 
 ファイルを右クリックして、ポップアップ メニューから
 @w{@code{プログラムから開く > LilyPond}} を選択します。
 Right-click on the file and from the pop-up context menu choose
 
-@sourceimage{Learning_Win7_Open_Context_Menu,,,}
+@sourceimage{GenPDF,,,}
 
 
 @subsubheading ステップ 2b. コンパイルする (ダブルクリックする)
@@ -129,11 +129,9 @@ Right-click on the file and from the pop-up context menu choose
 @file{test.ly} をコンパイルしている間、コマンド ウィンドウが一瞬だけ開いて閉じます。@c
 この処理の間に 3 つのファイルが作成されます。
 
-@sourceimage{Learning_Win7_All_Files_Created,,,}
-
 PDF ファイルは @file{test.ly} ファイルの譜刻結果を保持しています。
 
-@sourceimage{Learning_Win7_Pdf_Output,,,}
+@sourceimage{PDFRead,,,}
 
 
 @subsubheading その他のコマンド
@@ -141,19 +139,16 @@ PDF ファイルは @file{test.ly} ファイルの譜刻結果を保持してい
 新しくファイルを作成するには、以前に作成したファイルのウィンドウから
 @w{@code{ファイル > 新規作成}} を選択します。
 
-@sourceimage{Learning_Win7_New_Menu,,,}
-
-@noindent
 あるいは @w{@code{ファイル > 開く}} を選択し、以前に保存したファイルを@c
 開いて編集します。
 
-@sourceimage{Learning_Win7_Open_Menu,,,}
+@sourceimage{EditFile,,,}
 
 コンパイルを行う前にあなたが新たに行った編集を保存する必要があります。@c
 PDF ファイルが作成されない場合は、コンパイルの過程で作成されるログ ファイルで@c
 エラーをチェックしてください。
 
-@sourceimage{Learning_Win7_Log_File,,,}
+@sourceimage{BadLog,,,}
 
 このログ ファイルは、LilyPond ファイルをコンパイルする度に上書きされます。
 
@@ -184,7 +179,7 @@ PDF ファイルを PDF ビュー他で閲覧している場合、
 @example
 \\version "@w{@versionStable{}}"
 @{
-  c' e' g' e'
+@ @ c' e' g' e'
 @}
 @end example
 
diff --git a/Documentation/ja/learning/GNUmakefile b/Documentation/ja/learning/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 44f77490e1a4fc4c8a8104c139e5bf0d076c8a6f..989f0443cd808a58efc7a7c2482624e7c9504971 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: f7630a9232be374298d88e1b8bdb85ead17a7572
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @ignore
 Tutorial guidelines:  (different from policy.txt!)
@@ -328,7 +328,7 @@ c4~( c8 d~ d4 e)
 使うことで音符に付け加えることができます:
 
 @lilypond[verbatim,quote,relative=2]
-c4-^ c-+ c-- c-|
+c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
@@ -530,22 +530,22 @@ c2 d |
 @cindex tuplets (連符)
 @cindex triplets (3 連符)
 
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
 
 音楽用語集: @rglos{note value}, @rglos{triplet}
 
-@notation{連符} は @code{\times} キーワードによって作成されます。@c
+@notation{連符} は @code{\tuplet} キーワードによって作成されます。@c
 これは 2 つの引数をとります: 分数と楽譜の断片です。@c
-楽譜の断片の演奏時間と分数が乗算されます。@c
-3 連符は表記された演奏時間の 2/3 の長さなので、@notation{3 連符} は@c
-分数として 2/3 を持ちます。
+分数の分母は通常の音符の数で、分子は連符の音符の数です。@c
+3 連符は 2 つの音符の代わりに 3 つの音符を演奏しますので、@notation{連符}
+の分数は 3/2 となります。
 
 @lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
 @end lilypond
 
 
@@ -570,7 +570,7 @@ c2 d |
 よっても作成されます:
 
 @lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
 c2 \appoggiatura b16 c2 |
 c2 \acciaccatura b16 c2 |
 @end lilypond
@@ -1035,11 +1035,6 @@ LilyPond での多声音楽はまだ説明していないコンセプトを用
 >>
 @end lilypond
 
-@warning{空白または改行によって最後の音節を閉じ波括弧と分けることが不可欠です。@c
-そうしなければ、波括弧は音節の一部と見なされ、@c
-原因の分かりづらいエラーを引き起こします。@c
-@rprogram{見かけ上 ../ly/init.ly のエラーとなる} を参照してください。}
-
 二重の山括弧 @w{@code{<< ... >>}} が楽曲全体を囲っていて、@c
 音楽と歌詞が同時進行することを示しています。
 
@@ -1358,7 +1353,7 @@ cello = \new Staff {
 楽曲のある部分が何度もリピートしている場合に入力の手間を省くことができます。
 
 @lilypond[verbatim,quote]
-tripletA = \times 2/3 { c,8 e g }
+tripletA = \tuplet 3/2 { c,8 e g }
 barA = { \tripletA \tripletA \tripletA \tripletA }
 
 \relative c'' {
index f0d38bb7914c49a663fce8e23b317f7b484629f7..5122a524b8a8888b2ce01acae971114414d17d2a 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.29"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -587,10 +587,10 @@ LilyPond 以外では、種類の異なる括弧が適切にネストされる
 さらにフレージング スラーが連符の外にまで伸びています (行 3 と 4)。
 
 @lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
 @end lilypond
 
 
@@ -860,15 +860,15 @@ LilyPond の楽譜の中で最も低レベルで、最も基礎的であり、
   \\  % Voice two
     {
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No voice three
   \\  % Voice four
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -909,15 +909,15 @@ A フラットは付点 4 分音符であり、F は 4 分音符、D フラッ
   \\  % Voice two
     { \voiceTwoStyle
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No Voice three (we want stems down)
   \\  % Voice four
     { \voiceThreeStyle
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -1618,7 +1618,7 @@ score ブロックは単一の音楽表記とそれに関連する出力定義
 
 
 @seealso
-記譜法リファレンス: @ruser{Creating contexts}
+記譜法リファレンス: @ruser{Creating and referencing contexts}
 
 
 @node エングラーバの説明
@@ -1675,8 +1675,7 @@ LilyPond によって作成された楽譜上にあるすべての記号は
   @tab 音部記号を譜刻します。
 @item Completion_heads_engraver
   @tab 小節線をまたがる音符を分割します。
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
   @tab 強弱記号 (クレッシェンド、デクレッシェンド) と強弱テキスト (p や f など)
 を作成します。
 @item Forbid_line_break_engraver
@@ -1873,7 +1872,7 @@ LilyPond 入力ファイルに対する特別なサポートを持つ@c
 >>
 @end lilypond
 
-他の例としては、@code{clefOctavation} が @code{Score} コンテキストに@c
+他の例としては、@code{clefTransposition} が @code{Score} コンテキストに@c
 セットされた場合、直ちにすべての譜でのオクターブの値を変更し、すべての譜に@c
 適用される新しいデフォルト値をセットします。
 
@@ -2434,7 +2433,7 @@ celloMusic = \relative c {
 
 @seealso
 開始点となるテンプレートは付録 @q{テンプレート} で見つけることができます。@c
-@ref{単一の譜表} を参照してください。
+@ref{Single staff templates} を参照してください。
 
 
 @node 4 パート SATB ボーカル譜
@@ -2546,9 +2545,9 @@ lower = \relative c, {
 @end lilypond
 
 このレイアウトをそのまま提供するテンプレートはありません。@c
-最も近いのは @q{SATB ボーカル譜と自動ピアノ伴奏譜} -- @ref{合唱} を@c
-参照してください -- ですが、レイアウトを変更して、ボーカル パートから@c
-自動的に生成されたものではないピアノ伴奏譜を付け加える必要があります。@c
+最も近いのは @ref{SATB vocal score and automatic piano reduction}
+ですが、レイアウトを変更して、ボーカル パートから自動的に生成されたものでは@c
+ないピアノ伴奏譜を付け加える必要があります。@c
 ボーカル パートのための音楽と歌詞を保持している変数はそのまま使えますが、@c
 ピアノ伴奏譜のための変数を付け加える必要があります。
 
@@ -2983,8 +2982,7 @@ Voice はこれとは対照的に、あなたの音楽を連続して演奏す
         @}
       >>  % ManualOne Staff コンテキストの終了
       \new Staff = "ManualTwo" \with @{
-        \override VerticalAxisGroup
-          #'staff-staff-spacing  #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       @} <<
         \keyTime
         \clef "bass"
@@ -3026,7 +3024,7 @@ ManualOneVoiceTwoMusic = \relative c' {
 }
 ManualTwoMusic = \relative c' {
   c16 b c8~ c16 b c g a8 g~ g16 g aes ees |
-  f16 ees f d g aes g f ees d e8~ ees16 f ees d |
+  f16 ees f d g aes g f ees d ees8~ ees16 f ees d |
 }
 PedalOrganMusic = \relative c {
   r8 c16 d ees d ees8~ ees16 a, b g c b c8 |
@@ -3049,8 +3047,7 @@ PedalOrganMusic = \relative c {
         }
       >>  % ManualOne Staff コンテキストの終了
       \new Staff = "ManualTwo" \with {
-        \override VerticalAxisGroup
-          #'staff-staff-spacing #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       } <<
         \keyTime
         \clef "bass"
@@ -3119,7 +3116,7 @@ violin = \new Staff {
 @lilypond[quote,verbatim,ragged-right]
 dolce = \markup { \italic \bold dolce }
 
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
 fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
@@ -3151,7 +3148,7 @@ violin = \relative c'' {
 violin = \relative c'' @{
   \repeat volta 2 @{
     c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
-    \once \override TextScript #'padding = #5.0
+    \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d |
     c,4.\markup @{
       \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
@@ -3176,7 +3173,7 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = #padding
+     \once \override TextScript.padding = #padding
    #})
 
 \relative c''' {
index c990c68e4369922d907f6ff7c1abf00fcf4926bc..1a629efe95c95584465b9acdffd376c5ac226120 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: f7630a9232be374298d88e1b8bdb85ead17a7572
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
index 091ad9b7d7d3c0979a1b976d3757776e573df644..de6f029732c6b88282e51cdc5255fc247960a839 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: fcec8015634fd7665b8df57b630994ba4919b12c
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
 音符を付け加えて、LilyPond を実行してください。@c
 あとは美しく譜刻された楽譜をお楽しみください!
 
-@c bad node name for ancient notation to avoid conflict
 @menu
-* 単一の譜表::
+* 単一譜テンプレート::
 * ピアノ テンプレート::
-* 弦楽四重奏::
-* 合唱::
+* 弦楽四重奏テンプレート::
+* 合唱テンプレート::
 * オーケストラ テンプレート::
 * 古代の記譜法テンプレート::
 * その他のテンプレート::
 @end menu
 
 
-@node 単一の譜表
-@appendixsec 単一の譜表
-@translationof Single staff
+@node 単一譜テンプレート
+@appendixsec 単一譜テンプレート
+@translationof Single staff templates
+
+@menu
+* 音符のみ::
+* 音符と歌詞::
+* 音符とコード::
+* 音符、歌詞それにコード::
+@end menu
 
+@node 音符のみ
 @appendixsubsec 音符のみ
+@translationof Notes only
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
 {single-staff-template-with-only-notes.ly}
 
+@node 音符と歌詞
 @appendixsubsec 音符と歌詞
+@translationof Notes and lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
 {single-staff-template-with-notes-and-lyrics.ly}
 
+@node 音符とコード
 @appendixsubsec 音符とコード
+@translationof Notes and chords
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {single-staff-template-with-notes-and-chords.ly}
 
+@node 音符、歌詞それにコード
 @appendixsubsec 音符、歌詞それにコード
+@translationof Notes lyrics and chords
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {single-staff-template-with-notes,-lyrics,-and-chords.ly}
 @appendixsec ピアノ テンプレート
 @translationof Piano templates
 
+@menu
+* ソロ ピアノ::
+* ピアノと歌詞を持つ旋律::
+* 歌詞が中央に配置されたピアノ譜::
+@end menu
+
+@node ソロ ピアノ
 @appendixsubsec ソロ ピアノ
+@translationof Solo piano
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-simple.ly}
 
+@node ピアノと歌詞を持つ旋律
 @appendixsubsec ピアノと歌詞を持つ旋律
+@translationof Piano and melody with lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-with-melody-and-lyrics.ly}
 
+@node 歌詞が中央に配置されたピアノ譜
 @appendixsubsec 歌詞が中央に配置されたピアノ譜
+@translationof Piano centered lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-with-centered-lyrics.ly}
 
 
-@node 弦楽四重奏
-@appendixsec 弦楽四重奏
-@translationof String quartet
+@node 弦楽四重奏テンプレート
+@appendixsec 弦楽四重奏テンプレート
+@translationof String quartet templates
 
+@menu
+* 弦楽四重奏::
+* 弦楽四重奏パート::
+@end menu
+
+@node 弦楽四重奏
 @appendixsubsec 弦楽四重奏
+@translationof String quartet
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {string-quartet-template-simple.ly}
 
+@node 弦楽四重奏パート
 @appendixsubsec 弦楽四重奏パート
+@translationof String quartet parts
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {string-quartet-template-with-separate-parts.ly}
 
 
-@node 合唱
-@appendixsec 合唱
-@translationof Vocal ensembles
+@node 合唱テンプレート
+@appendixsec 合唱テンプレート
+@translationof Vocal ensembles templates
+
+@menu
+* SATB ボーカル譜::
+* SATB ボーカル譜と自動ピアノ譜::
+* 整列されたコンテキストを持つ SATB::
+* 4 つの譜に配置された SATB::
+* ソロと 2 パートのリフレイン::
+* 賛美歌::
+* 聖歌::
+@end menu
 
+@node SATB ボーカル譜
 @appendixsubsec SATB ボーカル譜
+@translationof SATB vocal score
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template.ly}
 
+@node SATB ボーカル譜と自動ピアノ譜
 @appendixsubsec SATB ボーカル譜と自動ピアノ譜
+@translationof SATB vocal score and automatic piano reduction
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-automatic-piano-reduction.ly}
 
+@node 整列されたコンテキストを持つ SATB
 @appendixsubsec 整列されたコンテキストを持つ SATB
+@translationof SATB with aligned contexts
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly}
 
+@node 4 つの譜に配置された SATB
 @appendixsubsec 4 つの譜に配置された SATB
+@translationof SATB on four staves
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {satb-choir-template---four-staves.ly}
 
+@node ソロと 2 パートのリフレイン
 @appendixsubsec ソロと 2 パートのリフレイン
+@translationof Solo verse and two-part refrain
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-verse-and-refrain.ly}
 
+@node 賛美歌
 @appendixsubsec 賛美歌
-@c Hymn tunes
+@translationof Hymn tunes
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {hymn-template.ly}
 
+@node 聖歌
 @appendixsubsec 聖歌
-@c Psalms
+@translationof Psalms
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {anglican-psalm-template.ly}
 @appendixsec オーケストラ テンプレート
 @translationof Orchestral templates
 
+@menu
+* オーケストラ、合唱それにピアノ::
+@end menu
+
+@node オーケストラ、合唱それにピアノ
 @appendixsubsec オーケストラ、合唱それにピアノ
+@translationof Orchestra choir and piano
+
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {orchestra,-choir-and-piano-template.ly}
 
 
-@c bad node name to avoid node name conflict
 @node 古代の記譜法テンプレート
 @appendixsec 古代の記譜法テンプレート
 @translationof Ancient notation templates
 
+@menu
+* Transcription of mensural music::
+* Gregorian transcription template::
+@end menu
+
+@node Transcription of mensural music
 @appendixsubsec Transcription of mensural music
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {ancient-notation-template----modern-transcription-of-mensural-music.ly}
 
+@node Gregorian transcription template
 @appendixsubsec Gregorian transcription template
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 @appendixsec その他のテンプレート
 @translationof Other templates
 
+@menu
+* ジャズ バンド::
+@end menu
+
+@node ジャズ バンド
 @appendixsubsec ジャズ バンド
+@translationof Jazz combo
 
 @c Line-width below is because of Issue 766.  If that's fixed, it can be removed.
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
index a87377f08484ddceeeb40f4092f40c66a5b95032..9df0483d2f52b6ecfad0491b683590d829ce323f 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: f7630a9232be374298d88e1b8bdb85ead17a7572
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -571,7 +571,7 @@ LilyPond 入力ファイルは多くの一般的なプログラミング言語
 @strong{空白は無視される}:
 あなたがどれくらい多くのスペース (または新しい行) を追加しても@c
 問題にならないということです。@c
-@w{@code{@{ c d e @}}} は @w{@code{@{ c @tie{}} @tie{} @tie{} d e @}} や@c
+@w{@code{@{ c d e @}}} は @w{@code{@{ c @tie{} @tie{} @tie{} d e @}}} や@c
 以下と同じ意味になります:
 
 @example
index 11329a5567229e73f92ab5132578fa813319e8b2..ff31215f2d54618bb50ce48119e2e5c080753b6a 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: c95106f1c57562c3f863edb0221cb7892438f6db
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.20"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -175,8 +175,8 @@ LilyPond が @code{\new Staff} のようなコマンドに遭遇した場合、@
 
 これから見ていくのですが、タイプが異なるオブジェクトのプロパティは@c
 異なるコマンドによって変更されます。@c
-そのため、プロパティの名前からオブジェクトの種類を識別できるようになると@c
-役に立ちます。
+そのため、名前からオブジェクトやプロパティのタイプを識別できるように@c
+なると役に立ちます。
 
 
 @node 調整手段
@@ -185,7 +185,17 @@ LilyPond が @code{\new Staff} のようなコマンドに遭遇した場合、@
 
 @cindex tweaking methods (調性手段)
 
-@strong{\override コマンド}
+@menu
+* \override コマンド::
+* \revert コマンド::
+* \once 接頭辞::
+* \overrideProperty コマンド::
+* \tweak コマンド::
+@end menu
+
+@node \override コマンド
+@unnumberedsubsubsec @code{\override} コマンド
+@translationof The \override command
 
 @cindex override command (override コマンド)
 @cindex override syntax (override 構文)
@@ -212,8 +222,7 @@ LilyPond が @code{\new Staff} のようなコマンドに遭遇した場合、@
 このコマンドの一般的な構文は以下のようなものです:
 
 @example
-\override @var{Context}.@var{LayoutObject} #'@var{layout-property} =
-#@var{value}
+\override @var{Context}.@var{LayoutObject}.@var{layout-property} = #@var{value}
 @end example
 
 @noindent
@@ -223,7 +232,7 @@ LilyPond が @code{\new Staff} のようなコマンドに遭遇した場合、@
 
 必要とされているコンテキストが明白であり、それが最下位レベルのコンテキストである
 -- つまり、@code{Voice}, @code{ChordNames} や @code{Lyrics} である
--- 場合、その @var{Context} は省略可能可能であり (そして通常は省略されます)、@c
+-- 場合、その @var{Context} は省略可能であり (そして通常は省略されます)、@c
 この後の例の多くでも省略します。@c
 後ほど、コンテキストを指定しなければならない場合について見ていきます。
 
@@ -232,27 +241,35 @@ LilyPond が @code{\new Staff} のようなコマンドに遭遇した場合、@
 しかしながら、このセクションではそれらのフォーマットとコマンドの使い方を示す@c
 ために、容易に理解できる簡単なプロパティと値をいくつか使用してみるだけです。
 
-今や、レイアウト プロパティの前に置かれなければならない @code{#'} や@c
-プロパティ値の前に置かれなければならない @code{#} について心配する必要は@c
-ありません。@c
-これらは常にそのような形式で正確に記述されなければなりません。@c
-これは調整では最も一般的に使用されるコマンドであり、この章の残りの部分の@c
-大半ではプロパティ (変更コマンド) の使用方法を示すための例を記述しています。@c
-ここでは符頭の色を変更する簡単な例を挙げます:
-
+LilyPond の基本的な表記は音符、演奏時間、それにマークアップなどの音楽要素@c
+です。@c
+数字、文字列、それにリストなどのもっと基本的な表記は @q{Scheme モード}
+で処理されます -- 表記の先頭に @samp{#} を記述することでこのモードが@c
+呼び出されます。@c
+これらの表記は LilyPond の音楽モードでも有効な表現である場合もありますが、@c
+このマニュアルでは一貫性を保つために常に @samp{#} を付けて記述します。@c
+Scheme モードについての更なる情報は @rextend{LilyPond Scheme syntax}
+を参照してください。
+
+@code{\override} は調整で用いられる最も一般的なコマンドであり、@c
+本章の残りの大半を使ってこのコマンドの使用例を示します。@c
+まずは符頭の色を変更する簡単な例を挙げます:
 
 @cindex color property, example (color プロパティの例)
 @cindex NoteHead, example of overriding (NoteHead をオーバライドする例)
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a b c |
 @end lilypond
 
-@strong{\revert コマンド}
+
+@node \revert コマンド
+@unnumberedsubsubsec @code{\revert} コマンド
+@translationof The \revert command
 
 @cindex revert command (revert コマンド)
 
@@ -268,7 +285,7 @@ g4 a b c |
 
 
 @example
-\revert @var{Context}.@var{LayoutObject} #'@var{layout-property}
+\revert @var{Context}.@var{LayoutObject}.@var{layout-property}
 @end example
 
 繰り返しますが、@code{\override} コマンドでの @var{Context} と同様に、@c
@@ -281,15 +298,18 @@ g4 a b c |
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
 b4 c |
 @end lilypond
 
-@strong{\once 接頭辞}
+
+@node \once 接頭辞
+@unnumberedsubsubsec The @code{\once} prefix
+@translationof The \once prefix
 
 @funindex \once
 @funindex once
@@ -303,17 +323,37 @@ b4 c |
 @cindex color property, example (color プロパティの例)
 @cindex NoteHead, example of overriding (NoteHead をオーバライドする例)
 
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+@lilypond[quote,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\once \override NoteHead #'color = #green
+\once \override NoteHead.color = #green
 g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
 b c |
 @end lilypond
 
-@strong{\overrideProperty コマンド}
+@code{\once} 接頭辞をさまざまな定義済みコマンドの前に置くことで、@c
+コマンドの効果を次の音楽タイミングに限定することもできます:
+
+@lilypond[quote,verbatim,relative=1]
+c4 d
+\once \stemDown
+e4 f |
+g4 a
+\once \hideNotes
+b c |
+@end lilypond
+
+しかしながら、@code{\...Neutral}, @code{\...Off}, それに @code{\un...}
+の形式の定義済みコマンドの前に @code{\once} を置いても効果はありません。@c
+なぜなら、それらのコマンドは内部的に @code{\override} ではなく、@code{\revert}
+を用いるためです。
+
+
+@node \overrideProperty コマンド
+@unnumberedsubsubsec @code{\overrideProperty} コマンド
+@translationof The \overrideProperty command
 
 @cindex overrideProperty command (overrideProperty コマンド)
 
@@ -326,7 +366,9 @@ b c |
 詳細は @rextend{Difficult tweaks} を参照してください。
 @c Maybe explain in a later iteration  -td
 
-@strong{\tweak コマンド}
+@node \tweak コマンド
+@unnumberedsubsubsec @code{\tweak} コマンド
+@translationof The \tweak command
 
 @cindex tweak command (tweak コマンド)
 
@@ -353,7 +395,7 @@ C メジャー コードの中にある真ん中の音符 (ミドル E) の符
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
 <c e g>4
 <c e g>4
 @end lilypond
@@ -376,7 +418,7 @@ C メジャー コードの中にある真ん中の音符 (ミドル E) の符
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
 @end lilypond
 
 @code{\tweak} の構文は @code{\override} コマンドの構文とは@c
@@ -388,7 +430,7 @@ C メジャー コードの中にある真ん中の音符 (ミドル E) の符
 そのため、簡単な形式の @code{\tweak} コマンドは以下のようになります:
 
 @example
-\tweak #'@var{layout-property} #@var{value}
+\tweak @var{layout-property} #@var{value}
 @end example
 
 さらに、@code{\tweak} コマンドは一連のアーティキュレーションの中にある@c
@@ -400,8 +442,8 @@ C メジャー コードの中にある真ん中の音符 (ミドル E) の符
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4^"Black"
-  -\tweak #'color #red ^"Red"
-  -\tweak #'color #green _"Green"
+  -\tweak color #red ^"Red"
+  -\tweak color #green _"Green"
 @end lilypond
 
 @noindent
@@ -412,8 +454,8 @@ a4^"Black"
 複数の向き記号 (@code{^} または @code{_}) で上書きした場合、@c
 最後に適用される左端の記号が勝ち残ります。
 
-+@cindex @code{\tweak}, Accidental
-+@cindex @code{\tweak}, specific layout object
+@cindex @code{\tweak}, Accidental (臨時記号に @code{\tweak} を用いる)
+@cindex @code{\tweak}, specific layout object (レイアウト オブジェクトを指定して @code{\tweak} を用いる)
 
 符幹や臨時記号などのオブジェクトは後になってから作成されるもので、@c
 @code{\tweak} コマンドの後に続くイベントから直接作成されません。@c
@@ -422,14 +464,15 @@ a4^"Black"
 追跡できるようにすることで、@code{\tweak} で調整することができます:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red   cis4
- \tweak Accidental #'color #green es
                                 g>
+<\tweak Accidental.color #red   cis4
+ \tweak Accidental.color #green es
+ g>
 @end lilypond
 
 この長い形式の @code{\tweak} コマンドは以下のように記述することができます:
+
 @example
-\tweak @var{layout-object} #'@var{layout-property} @var{value}
+\tweak @var{layout-object}.@var{layout-property} @var{value}
 @end example
 
 @cindex tuplets, nested (ネストされた連符)
@@ -458,12 +501,12 @@ a4^"Black"
 @cindex color property, example (color プロパティの例)
 
 @lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
-\times 4/3 {
-  \tweak #'color #red
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+\tweak direction #up
+\tuplet 3/4 {
+  \tweak color #red
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -475,18 +518,15 @@ a4^"Black"
 @cindex transparent property, example (transparent プロパティの例)
 @cindex TupletNumber, example of overriding (TupletNumber をオーバライドする例)
 
-@c NOTE Tuplet brackets collide if notes are high on staff
-@c See issue 509
 @lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
-\once \override TupletNumber
-  #'text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 { c8[ c c] }
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
+\tuplet 3/2 {
   c8[ c]
   c8[ c]
-  \once \override TupletNumber #'transparent = ##t
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+  \once \override TupletNumber.transparent = ##t
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -598,11 +638,9 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 
 内部リファレンスの Slur ページでは、まず Slur オブジェクトは
 @code{Slur_engraver} によって作成されるということが述べられています。@c
-それから、標準設定がをリストアップされています。@c
-標準設定はアルファベット順にはなって @strong{いない} ということに@c
-注意してください。@c
-太さを制御していそうなプロパティを探してブラウザを@c
-スクロール ダウンさせていくと、以下が見つかります:
+それから、標準設定がリストアップされています。@c
+スラーの太さを制御していそうなプロパティを探してブラウザをスクロール ダウン@c
+させていくと、以下が見つかります:
 
 @example
 @code{thickness} (number)
@@ -631,10 +669,9 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 実行するコマンドは以下のようになります:
 
 @example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
 @end example
 
-プロパティ名の前に @code{#'} を付けること、@c
 新しい値の前に @code{#} を付けることを忘れないでください!
 
 最後の疑問は @q{このコマンドをどこに置くべきか?} ということです。@c
@@ -651,7 +688,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
   \time 6/8
   {
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     r4 bes8 bes[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -671,7 +708,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 -- しかしながら、まだ練習が必要でしょう。@c
 これは以下の例で提供されます。
 
-@subheading コンテキストを見つけ出す
+@subsubsubheading コンテキストを見つけ出す
 
 @cindex context, finding (コンテキストを見つけ出す)
 @cindex context, identifying correct (正しいコンテキストを特定する)
@@ -689,7 +726,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 そのため、スラーは @code{Slur_engraver} が存在しているコンテキストの@c
 どれかで作成されるということになります。@c
 @code{Slur_engraver} へのリンクを辿ります。@c
-そのページの最後の方で @code{Slur_engraver} は 5 つのボイス コンテキスト
+そのページの最後の方で @code{Slur_engraver} は 7 つのボイス コンテキスト
 -- 標準のボイス コンテキストである @code{Voice} を含む
 -- の一部であることが述べられています。@c
 ですから、推測は正しかったのです。@c
@@ -697,7 +734,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 -- このことは、そこに音符を入力するという事実によって明らかに示されています
 -- ため、ここではそのコンテキストを省略することができるのです。
 
-@subheading 1 回だけオーバライドする
+@subsubsubheading 1 回だけオーバライドする
 
 @cindex overriding once only (一度だけオーバライドする)
 @cindex once override (一度だけオーバライドする)
@@ -728,7 +765,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
   {
     r4 bes8
     % 直後にあるスラーのみを太くします
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes8[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -744,7 +781,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 
 @code{\once} コマンドは @code{\set} コマンドの前でも使用される可能性があります。
 
-@subheading 元に戻す
+@subsubsubheading 元に戻す
 
 @cindex revert (元に戻す)
 @cindex default properties, reverting to (デフォルトのプロパティに戻す)
@@ -767,10 +804,10 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
   {
     r4 bes8
     % 直後にあるスラーのみを太くします
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes[( g]) g |
     % 直後にあるスラーのみを太くします
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     g8[( es]) es d[( f]) as |
     as8 g
   }
@@ -796,11 +833,11 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
   {
     r4 bes8
     % 以後のスラーの太さを 1.2 から 5.0 に増やします
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     bes[( g]) g |
     g8[( es]) es
     % 以後のスラーの太さをデフォルトの 1.2 に戻します
-    \revert Slur #'thickness
+    \revert Slur.thickness
     d8[( f]) as |
     as8 g
   }
@@ -887,25 +924,19 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 前と同様に、コンテキストを省略します。
 
 話は逸れますが重要なことを 1 つ挙げます。@c
-@code{font-shape} の値はシンボルなので、シングル アポストロフィ @code{'} を@c
-付ける必要があるということに注意してください。@c
-その理由は、以前の例での @code{thickness} や @code{font-shape} の前に@c
-アポストロフィを付ける必要がある理由と同じです。@c
-それらも両方ともシンボルです。@c
-シンボルは LilyPond によって内部的に読み取られます。@c
-それらのいくつかは @code{thickness} や @code{font-shape} のようなプロパティの@c
-名前であり、他のものは @code{italic} のようにプロパティに与えられる値として@c
-使用されます。@c
+プロパティには値としてシンボル (例えば @code{italic}) を取るものがあります。@c
+シンボルの前にはアポストロフィ @code{'} を置く必要があり、そうすることで内部的に
+LilyPond に読み込まれます。@c
 任意のテキスト文字列との違い -- 任意のテキスト文字列は @code{"a text string"}
 のような形で表記されます -- に注意してください。@c
-シンボルと文字列についてのより詳細な説明は、@rextend{Scheme tutorial} を@c
-参照してください。
+シンボルと文字列についてのより詳細な説明は@rextend{Scheme tutorial}
+参照してください。
 
 さて、それでは歌詞をイタリック体で譜刻するために必要となる
 @code{\override} コマンドは以下のようになります:
 
 @example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
 @end example
 
 @noindent
@@ -926,7 +957,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
     as8 g
   }
   \addlyrics {
-    \override LyricText #'font-shape = #'italic
+    \override LyricText.font-shape = #'italic
     The man who | feels love's sweet e -- | mo -- tion
   }
 }
@@ -935,34 +966,9 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @noindent
 これで歌詞がすべてイタリック体で譜刻されました。
 
-@subheading 歌詞モードの中でコンテキストを指定する
-
-@cindex context, specifying in lyric mode (歌詞モード内でコンテキストを指定する)
-@cindex lyric mode, specifying context (歌詞モード内でコンテキストを指定する)
-
-歌詞の場合、以前のようなコマンドの発行の仕方の中でコンテキストを@c
-指定しようとしても失敗するでしょう。@c
-歌詞モードの中で入力される音節はスペース、改行、数字のいずれかで区切られます。@c
-他のすべての文字は音節の一部と見なされます。@c
-これが、終端の @code{@}} の前にはスペースか改行を@c
-置かなければならない理由です。@c
-そうしないと、終端の @code{@}} は最後の音節の一部に含まれてしまいます。@c
-同様に、コンテキスト名とオブジェクト名を区切るために、@c
-ピリオドまたはドット @q{.} の前と後ろにスペースを挿入しなければなりません。@c
-さもないと 2 つの名前は一緒になってしまい、インタプリタはそれらを@c
-認識できなくなります。@c
-そのため、コマンドは以下のようにすべきです:
-
-@example
-\override Lyrics . LyricText #'font-shape = #'italic
-@end example
-
 @warning{歌詞の中では、最後の音節と終端の波括弧の間に常にスペースを@c
 置いてください。}
 
-@warning{歌詞の中のオーバライドでは、コンテキスト名とオブジェクト名の@c
-間にあるドットの両側に常にスペースを置いてください。}
-
 
 @seealso
 拡張: @rextend{Scheme tutorial}
@@ -982,8 +988,12 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 表示されています。@c
 ここに、あなたが必要になるであろうプロパティのタイプを、@c
 そのタイプのルールといくつかの例と共にリスト アップします。@c
-もちろん、@code{\override} コマンドの中でプロパティの値を入力する時は、@c
-常にそれらの値の前にハッシュ記号 @code{#} を付け加える必要があります。
+@code{\override} コマンドの中でプロパティの値を入力する時は、@c
+当然、常にそれらの値の前にハッシュ記号 @code{#} を付け加える必要があります
+-- 例え、その値自体が @code{#} で始まっていたとしても付け加える必要があり@c
+ます。@c
+ここでは定数の例だけを示します: Scheme を用いて値の計算をしたいのであれば、@c
+@rextend{Calculations in Scheme} を参照してください。
 
 @multitable @columnfractions .2 .45 .35
 @headitem プロパティ タイプ
@@ -993,28 +1003,28 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
   @tab 真か偽のどちらかで、それぞれ #t と #f で表されます
   @tab @code{#t}, @code{#f}
 @item Dimension (譜スペース)
-  @tab 正の小数 (譜スペース単位)
+  @tab 小数 (譜スペース単位)
   @tab @code{2.5}, @code{0.34}
 @item Direction
-  @tab 有効な向きを表す定数またはそれと等価な数値 (-1 から 1 までの小数が@c
+  @tab 向きを表す有効な定数またはそれと等価な数値 (-1 から 1 までの小数が@c
 許可されます)
   @tab @code{LEFT}, @code{CENTER}, @code{UP},
        @code{1}, @w{@code{-1}}
 @item Integer
-  @tab æ­£ã\81®æ\95´æ\95°
-  @tab @code{3}, @code{1}
+  @tab 整数
+  @tab @code{3}, @code{-1}
 @item List
-  @tab 値のセット。@c
-セットの値はスペースで区切られ、前にアポストロフィが付いた括弧で囲まれます
-  @tab @code{'(left-edge staff-bar)}, @code{'(1)},
+  @tab 一連の定数またはシンボル。@c
+  スペースで区切られ、前にアポストロフィが付いた括弧で囲まれます
+  @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
        @code{'(1.0 0.25 0.5)}
 @item Markup
   @tab 有効なマークアップ
   @tab @code{\markup @{ \italic "cresc." @}}
 @item Moment
   @tab make-moment 関数で構築される全音符の分数
-  @tab @code{(ly:make-moment 1 4)},
-       @code{(ly:make-moment 3 8)}
+  @tab @code{(ly:make-moment 1/4)},
+       @code{(ly:make-moment 3/8)}
 @item Number
   @tab 正または負の小数
   @tab @code{3.5}, @w{@code{-2.45}}
@@ -1031,9 +1041,8 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
   @tab @code{bend::print}, @code{ly:text-interface::print},
        @code{#f}
 @item Vector
-  @tab 前にアポストロフィ-ハッシュ @code{'#} が付いた括弧で囲まれた
-3 要素のリスト
-  @tab @code{'#(#t #t #f)}
+  @tab @code{#(}@dots{}@code{)} で囲まれたいくつかの定数
+  @tab @code{#(#t #t #f)}
 @end multitable
 
 
@@ -1097,7 +1106,17 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 拡大解釈すれば他の多くのレイアウト オブジェクトにも影響を与えます)。@c
 次はこれらのプロパティをそれぞれ見ていきましょう。
 
-@subheading ステンシル (stencil)
+@menu
+* stencil プロパティ::
+* break-visibility プロパティ::
+* transparent プロパティ::
+* color プロパティ::
+@end menu
+
+
+@node stencil プロパティ
+@unnumberedsubsubsec @code{stencil} プロパティ
+@translationof The stencil property
 
 @cindex stencil property (stencil プロパティ)
 
@@ -1114,7 +1133,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override BarLine #'stencil = ##f
+  \override BarLine.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1145,14 +1164,27 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'stencil = ##f
+  \override Staff.BarLine.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
 }
 @end lilypond
 
-今度は小節線が消えました。
+今度は小節線が消えました。@c
+@code{stencil} プロパティに @code{#f} をセットする操作は頻繁に行うので、@c
+短くしたコマンド @code{\omit} が用意されています:
+@funindex \omit
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \omit Staff.BarLine
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
 
 しかしながら、@code{stencil} プロパティを @code{#f} にセットするのではなく、@c
 オブジェクトの大きさを修正する必要があるオブジェクトも存在するということに@c
@@ -1167,12 +1199,15 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @lilypond[quote,verbatim,relative=2]
 {
   c4 c
-  \once \override NoteHead #'stencil = #point-stencil
+  \once \override NoteHead.stencil = #point-stencil
   c4 c
 }
 @end lilypond
 
-@subheading 可視性の破棄 (break-visibility)
+
+@node break-visibility プロパティ
+@unnumberedsubsubsec @code{break-visibility} property
+@translationof The break-visibility property
 
 @cindex break-visibility property (break-visibility プロパティ)
 
@@ -1182,12 +1217,13 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 これらはそれぞれ、小節線が行の最後、行の途中、行の最初に譜刻されるかどうかを@c
 制御します。@c
 以下の例ではすべての小節線を消したいので、必要となる値は
-@code{'#(#f #f #f)} です。@c
+@code{#(#f #f #f)} です
+(同じ結果を @code{all-invisible} でも得ることができます)。@c
 それではやってみましょう。@c
 @code{Staff} コンテキストを含めることを忘れないでください。@c
-また、この値を書くときに括弧を始める前に @code{#'#} を@c
+また、この値を書くときに括弧を始める前に @code{##} を@c
 付ける必要があることにも注意してください。@c
-@code{'#} はベクトルを導入するときに値の一部として必要とされ、@c
+@code{#} の 1 つはベクトルを導入するときに値の一部として必要とされ、@c
 先頭の @code{#} は @code{\override} コマンドの中で常に値の前に@c
 置くことが必要とされます。
 
@@ -1197,7 +1233,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+  \override Staff.BarLine.break-visibility = ##(#f #f #f)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1206,7 +1242,10 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 
 今度もすべての小節線が消えました。
 
-@subheading 透過性 (transparent)
+
+@node transparent プロパティ
+@unnumberedsubsubsec @code{transparent} プロパティ
+@translationof The transparent property
 
 @cindex transparent property (transparent プロパティ)
 @cindex transparency (透明性)
@@ -1233,7 +1272,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'transparent = ##t
+  \override Staff.TimeSignature.transparent = ##t
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1241,7 +1280,22 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @end lilypond
 
 @noindent
-拍子記号は消えました。@c
+@code{transparent} プロパティに @code{#t} をセットする操作も頻繁に行うので、@c
+短くしたコマンド @code{\hide} が用意されています:
+@funindex \hide
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \hide Staff.TimeSignature
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+@noindent
+どちらの場合でも拍子記号は消えました。@c
 しかしながら、このコマンドは拍子記号があるべき場所に隙間を残しています。@c
 たぶん、これは学生がその部分を埋めるための練習としては望ましいでしょうが、@c
 他の状況ではこの隙間は望ましくありません。@c
@@ -1254,7 +1308,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1262,14 +1316,17 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @end lilypond
 
 @noindent
-違いは明白です: ステンシルを @code{#f} にセットすると、@c
-オブジェクト自体が削除されます。@c
-一方、オブジェクトを @code{transparent} (透明) にするとそのオブジェクトは@c
-消えますが、オブジェクトは不可視になっただけです。
+違いは明白です: ステンシルを @code{#f} にセットする
+(@code{\omit} を用いることもできます) と、オブジェクト自体が削除されます。@c
+一方、オブジェクトを @code{transparent} (透明) にする
+(@code{\hide} を用いることもできます)とそのオブジェクトは消えますが、@c
+オブジェクトは不可視になっただけです。
 
 @subheading 色 (color)
 
-@cindex color property (color プロパティ)
+@node color プロパティ
+@unnumberedsubsubsec @code{color} プロパティ
+@translationof The color property
 
 最後に、小節線の色を白にすることによって小節線を不可視にしてみましょう。@c
 (これには白い小節線が譜線と交差したところで@c
@@ -1296,7 +1353,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #white
+  \override Staff.BarLine.color = #white
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1306,22 +1363,24 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @noindent
 今度も再び小節線は見えなくなりました。@c
 @emph{white} の前にアポストロフィは付かないということに注意してください
--- これはシンボルではなく@emph{数}です。@c
-この関数が呼び出されると、この関数はカラーを白にセットするために@c
-必要とされる内部値のリストを提供します。@c
-標準カラー リストにある他のカラーもまた数です。@c
-これが機能していることをあなた自身が納得するために、@c
\82«ã\83©ã\83¼ã\82\92ã\81\93ã\81®ã\83ªã\82¹ã\83\88ã\81®ä¸­ã\81«ã\81\82ã\82\8bä»\96ã\81®é\96¢æ\95°ã\81® 1 ã\81«å¤\89æ\9b´ã\81\97ã\82\88ã\81\86ã\81¨æ\80\9dã\81\86ã\81\8bã\82\82ã\81\97ã\82\8cã\81¾ã\81\9bã\82\93
+-- これはシンボルではなく@emph{数}です。@c
+この変数は評価される時、小節線の色を白にセットするのに必要な内部的な値の@c
+リストを提供します。@c
+標準カラー リストにある他のカラーもまた数です。@c
+小節線の色をこのリストの中にある他の変数に変更することで、@c
\81\93ã\82\8cã\81\8cæ©\9fè\83½ã\81\99ã\82\8bã\81\93ã\81¨ã\82\92ã\81\82ã\81ªã\81\9fè\87ªèº«ã\81§ç´\8då¾\97ã\81§ã\81\8dã\81¾ã\81\99
 
 @cindex color, X11 (X11 カラー)
 @cindex X11 colors (X11 カラー)
 
 @funindex x11-color
 
-カラーを変えるための 2 目の方法は、@ruser{List of colors} の
+カラーを変えるための 2 目の方法は、@ruser{List of colors} の
 2 番目のリストの中にある X11 カラー名のリストを使用する方法です。@c
-しかしながら、以下のように、これらの前には X11 カラー名を内部値のリストに@c
-変更するもう 1 つの関数 -- @code{x11-color} -- がなければなりません:
+しかしながら、X11 カラー名は関数 @code{x11-color} によって実際の値に@c
+マッピングされます。@c
+@code{x11-color} は以下のように X11 カラー シンボルを内部値のリストに@c
+変換します:
 
 @cindex BarLine, example of overriding (BarLine をオーバライドする例)
 @cindex color property, example (color プロパティの例)
@@ -1329,7 +1388,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(x11-color 'white)
+  \override Staff.BarLine.color = #(x11-color 'white)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1338,17 +1397,16 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 
 @noindent
 この場合、関数 @code{x11-color} はシンボルを引数として扱うので、@c
-シンボルの前にはアポストロフィをつけなくてはならず、@c
-@code{x11-color} とシンボルは括弧で囲まれていなければならないということに@c
-注意してください。
+変数として評価されないようシンボルの前にアポストロフィを付ける必要があり、@c
+関数呼び出し全体を括弧で囲む必要があるということに注意してください。
 
 @cindex rgb colors (RGB カラー)
 @cindex color, rgb (RGB カラー)
 
 @funindex rgb-color
 
\81¾ã\81  3 ç\95ªç\9b®ã\81®æ\96¹æ³\95ã\81\8cæ®\8bã\81£ã\81¦ã\81\84ます。@c
-これは RGB 値を内部カラーに変換する @code{rgb-color} 関数を使用する方法です。@c
\82\82ã\81\86 1 ã\81¤é\96¢æ\95°ã\81\8cã\81\82ã\82\8aます。@c
+RGB 値を内部カラーに変換する @code{rgb-color} 関数です。@c
 この関数は赤、緑、青の輝度を表す 3 つの引数をとります。@c
 これらの引数は 0 から 1 までの値をとります。@c
 ですから、カラーを赤にセットする場合の値は @code{(rgb-color 1 0 0)} となり、@c
@@ -1360,7 +1418,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+  \override Staff.BarLine.color = #(rgb-color 1 1 1)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1368,7 +1426,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @end lilypond
 
 最後に、X11 カラー セットの一部であるグレー スケールを用いる方法もあります。@c
-グレー スケールの範囲は黒 @code{'grey0'} から白 @code{'grey100'} まで
+グレー スケールの範囲は黒 @code{'grey0} から白 @code{'grey100} まで
 1 段階ずつあります。@c
 グレー スケールの使用方法を示すために、@c
 例の中にあるすべてのレイアウト オブジェクトのカラーをさまざまな濃度の@c
@@ -1386,12 +1444,12 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.StaffSymbol   #'color = #(x11-color 'grey30)
-  \override Staff.TimeSignature #'color = #(x11-color 'grey60)
-  \override Staff.Clef          #'color = #(x11-color 'grey60)
-  \override Voice.NoteHead      #'color = #(x11-color 'grey85)
-  \override Voice.Stem          #'color = #(x11-color 'grey85)
-  \override Staff.BarLine       #'color = #(x11-color 'grey10)
+  \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+  \override Staff.TimeSignature.color = #(x11-color 'grey60)
+  \override Staff.Clef.color = #(x11-color 'grey60)
+  \override Voice.NoteHead.color = #(x11-color 'grey85)
+  \override Voice.Stem.color = #(x11-color 'grey85)
+  \override Staff.BarLine.color = #(x11-color 'grey10)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1420,8 +1478,8 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 @cindex objects, size of (オブジェクトのサイズ)
 @cindex objects, changing size of (オブジェクトのサイズを変更する)
 
-以前の例を見直すことから始めてみましょう (@ref{音楽表記をネストする} を@c
-参照してください)。@c
+以前の例を見直すことから始めてみましょう
+(@ref{Nesting music expressions} を参照してください)。@c
 そこでは @rglos{ossia} として新たに一時的な譜を導入する方法が示されています。
 
 @cindex alignAboveContext property, example (alignAboveContext プロパティの例)
@@ -1450,7 +1508,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 
 @cindex alignAboveContext property, example (alignAboveContext プロパティの例)
 @cindex @code{\with}, example (@code{\with} の例)
-@cindex stencil property, example (stencil プロパティの例)
+@funindex \omit
 @cindex Clef, example of overriding (Clef をオーバライドする例)
 @cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例)
 
@@ -1465,8 +1523,8 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
         alignAboveContext = #"main"
       }
       {
-        \override Staff.Clef #'stencil = ##f
-        \override Staff.TimeSignature #'stencil = ##f
+        \omit Staff.Clef
+        \omit Staff.TimeSignature
         { f8 f c }
       }
     >>
@@ -1480,9 +1538,9 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 その括弧に囲まれているオーバライドと音楽がオッシア譜に適用されることを@c
 保証するために、必要となります。
 
-しかし、@code{\with} を使った譜コンテキストの変更と
-@code{\override} を使った音部記号と拍子記号のステンシルの変更との違いは@c
-何なのでしょうか?@c
+しかし、@code{\with} を用いた譜コンテキストの変更と @code{\override}
+を用いた音部記号と拍子記号のステンシルの変更 (あるいはこのケースでは
+@code{\omit} を用いています) との違いは何なのでしょうか?@c
 主な違いは、@code{\with} 節の中で行われた変更はそのコンテキストが@c
 作成されるときに行われ、@c
 そのコンテキストでは @strong{デフォルト} 値として残ります。@c
@@ -1527,9 +1585,34 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
       \new Staff \with {
         alignAboveContext = #"main"
         % この譜には音部記号を譜刻しません
-        \override Clef #'stencil = ##f
+        \override Clef.stencil = ##f
         % この譜には拍子記号を譜刻しません
-        \override TimeSignature #'stencil = ##f
+        \override TimeSignature.stencil = ##f
+      }
+      { f8 f c }
+    >>
+    r4 |
+  }
+}
+@end lilypond
+
+@code{transparent} プロパティを設定したり @code{stencil} を消すために@c
+短縮形 @code{\hide} と @code{\omit} を使うことができ、結果として@c
+以下のようになります:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+  \relative g' {
+    r4 g8 g c4 c8 d |
+    e4 r8
+    <<
+      { f8 c c }
+      \new Staff \with {
+        alignAboveContext = #"main"
+        % この譜には音部記号を譜刻しません
+        \omit Clef
+        % この譜には拍子記号を譜刻しません
+        \omit TimeSignature
       }
       { f8 f c }
     >>
@@ -1563,7 +1646,7 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
 フォント サイズを変更する:
 
 @example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
 @end example
 
 あるいは、@code{\set} を使って特別なプロパティ @code{fontSize} を設定するか、@c
@@ -1596,8 +1679,8 @@ Slur へのリンクを選択すると、Slur のプロパティがリスト ア
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \omit Clef
+        \omit TimeSignature
         % すべてのフォント サイズを約 24% 減らします
         fontSize = #-2
       }
@@ -1664,11 +1747,11 @@ LilyPond では距離と長さは一般に譜スペース -- 譜の中の隣り
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \omit Clef
+        \omit TimeSignature
         fontSize = #-2
         % 符幹の長さと譜線の間隔を減らします
-        \override StaffSymbol #'staff-space = #(magstep -2)
+        \override StaffSymbol.staff-space = #(magstep -2)
       }
       { f8 f c }
     >>
@@ -1793,7 +1876,8 @@ c2^"Text4" |
 @translationof Within-staff objects
 
 これまでにコマンド @code{\voiceXXX} がスラー、タイ、運指法記号、@c
-符幹の向きに依存する他のすべてに対してどのように影響を与えるかを見てきました。@c
+符幹の向きに依存する他のすべてに対してどのように影響を与えるかを見てきました
+-- @ref{Explicitly instantiating voices} を参照してください。
 これらのコマンドは、多声部音楽を記述しているときに上下する旋律を@c
 見分けられるようにすることを可能にするために不可欠なものです。@c
 しかしながら、この自動機能をオーバライドする必要がある場合もあります。@c
@@ -1810,6 +1894,15 @@ c2^"Text4" |
 符幹やフラグのような他のオブジェクトも上下の向きによって位置が左右します。@c
 @code{direction} がセットされているときは、これは自動的に制御されます。
 
+@menu
+* direction プロパティ::
+* 運指::
+@end menu
+
+@node direction プロパティ
+@unnumberedsubsubsec @code{direction} プロパティ
+@translationof The direction property
+
 @cindex down (下)
 @cindex up (上)
 @cindex center (中央)
@@ -1825,11 +1918,11 @@ c2^"Text4" |
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4 g c a |
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
 a4 g c a |
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
 a4 g c a |
-\revert Stem #'direction
+\revert Stem.direction
 a4 g c a |
 @end lilypond
 
@@ -1889,14 +1982,16 @@ a4 g c a |
   @tab 連符記号が音符の下/上にくる
 @end multitable
 
-これらの定義済みコマンドの前には @code{\once} が@c
-付か @strong{ない} かもしれません。@c
\82³ã\83\9eã\83³ã\83\89ã\81®å\8a¹æ\9e\9cã\82\92å\8d\98ä¸\80ã\81®é\9f³ç¬¦ã\81«å\88¶é\99\90ã\81\97ã\81\9fã\81\84å ´å\90\88ã\80\81@c
-等価の @code{\once \override} コマンドを使用するか、@c
\81\82ã\82\8bã\81\84ã\81¯ã\80\81å®\9a義æ¸\88ã\81¿ã\82³ã\83\9eã\83³ã\83\89ã\82\92使ç\94¨ã\81\97ã\81¦ã\80\81å\8a¹æ\9e\9cã\82\92å\8f\97ã\81\91ã\81\9fé\9f³ç¬¦ã\81®å¾\8cã\81«@c
-対応する @code{\xxxNeutral} コマンドを置かなければなりません
+これらのコマンドで中立/通常の位置に戻すコマンドは @code{\revert} を@c
+用いることで実装されていて、前に @code{\once} が付いて @strong{いない}
\81\8bã\82\82ã\81\97ã\82\8cã\81¾ã\81\9bã\82\93ã\80\82@c
+@code{\override} を用いて実装されているコマンドの効果を単一のタイミング@c
\81«é\99\90å®\9aã\81\97ã\81\9fã\81\84ã\81®ã\81§ã\81\82ã\82\8cã\81°ã\80\81æ\98\8e示ç\9a\84ã\81ªã\82ªã\83¼ã\83\90ã\83©ã\82¤ã\83\89ã\81®å ´å\90\88ã\81¨å\90\8cæ§\98ã\81«ã\80\81@c
+コマンドの前に @code{\once} を配置します
 
-@subheading 運指法記号 (Fingering)
+@node 運指
+@unnumberedsubsubsec 運指
+@translationof Fingering
 
 @cindex fingering, placement (運指法記号の配置)
 @cindex fingering, chords (和音の運指法記号)
@@ -1918,9 +2013,9 @@ a4 g c a |
 
 @lilypond[quote,verbatim,relative=2]
 c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
 c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
 c4-5 a-3 f-1 c'-5 |
 @end lilypond
 
@@ -2022,7 +2117,7 @@ LilyPond はこれらの制約を受け取り、
 @w{@code{-5}} であることがわかるので、@w{@code{-7}} にセットしてみましょう:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
 \set fingeringOrientations = #'(left)
 <f-2>4
 <c-1 e-2 g-3 b-5>4
@@ -2046,6 +2141,20 @@ LilyPond はこれらの制約を受け取り、
 @translationof Outside-staff objects
 
 譜外部オブジェクトは自動的に衝突を回避するよう配置されます。@c
+配置が最適でない場合に自動配置をオーバライドする方法がいくつかあります。
+
+@menu
+* outside-staff-priority プロパティ::
+* \textLengthOn コマンド::
+* 強弱記号の配置::
+* グラフィカル オブジェクトのサイズ::
+@end menu
+
+
+@node outside-staff-priority プロパティ
+@unnumberedsubsubsec @code{outside-staff-priority} プロパティ
+@translationof The outside-staff-priority property
+
 小さな値の @code{outside-staff-priority} プロパティを持つオブジェクトは@c
 譜の近くに配置され、他の譜外部オブジェクトは衝突を避けるのに必要な分だけ@c
 離されます。@c
@@ -2110,7 +2219,7 @@ LilyPond はこれらの制約を受け取り、
 @c KEEP LY
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % 以降のテキスト スパナの詳細を設定します
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % 強弱記号を譜の上に配置します
 \dynamicUp
@@ -2161,12 +2270,12 @@ c,4 c c c |
 @c KEEP LY
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % 以降のテキスト スパナの詳細を設定します
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % 強弱記号を譜の上に配置します
 \dynamicUp
 % 以降のオッターバ囲みをテキスト スパナの下に配置します
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
 % オッターバ囲みの開始
 \ottava #1
 c'4 \startTextSpan
@@ -2213,10 +2322,10 @@ c,4 c c c |
 @lilypond[quote,verbatim,relative=2]
 c4( c^\markup { \tiny \sharp } d4.) c8 |
 c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
 c4^\markup { \tiny \sharp } d4.) c8 |
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
 c4( c^\markup { \tiny \sharp } d4.) c8 |
 @end lilypond
 
@@ -2234,7 +2343,7 @@ c4( c^\markup { \tiny \sharp } d4.) c8 |
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 c2^"Text1"
 c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
 c2^"Text3"
 c2^"Text4" |
 @end lilypond
@@ -2249,7 +2358,9 @@ c2^"Text4" |
 音符を水平方向に広げる必要があります。@c
 これは @code{\textLengthOn} コマンドを用いることで達成できます。
 
-@subheading \textLengthOn
+@node \textLengthOn コマンド
+@unnumberedsubsubsec @code{\textLengthOn} コマンド
+@translationof The \textLengthOn command
 
 @cindex notes, spreading out with text (テキストに合わせて音符の間隔を広げる)
 
@@ -2273,10 +2384,8 @@ c2^"Text4" |
 @end lilypond
 
 デフォルトの動作に戻すためのコマンドは @code{\textLengthOff} です。@c
-@code{\once} は @code{\override}, @code{\set}, @code{\revert}
-それに @code{\unset} だけに付けることができるということを@c
-思い出してください。@c
-そのため、@code{\textLengthOn} で @code{\once} を使うことはできません。
+効果を与えるのが単一の音楽タイミングであれば、@code{\textLengthOn}
+に @code{\once} を付ける方法もあります。
 
 @cindex markup text, allowing collisions (マークアップ テキストの衝突を許可する)
 
@@ -2300,25 +2409,28 @@ c,,2^"Text" c'' |
 R1 |
 
 % 衝突回避を OFF にします
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 c,,2^"Long Text   " c'' |
 R1 |
 
 % 衝突回避を OFF にします
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 \textLengthOn        % そして textLengthOn を ON にします
 c,,2^"Long Text   "  % 後ろにスペースが付け加えられます
 c''2 |
 @end lilypond
 
-@subheading 強弱記号
+
+@node 強弱記号の配置
+@unnumberedsubsubsec 強弱記号の配置
+@translationof Dynamics placement
 
 @cindex tweaking dynamics placement (強弱記号の配置を調整する)
 @cindex dynamics, tweaking placement (強弱記号の配置を調整する)
 
 通常、強弱記号は譜の下に配置されます。@c
-しかしながら、@code{dynamicUp} コマンドを使うことで上に@c
-配置されるかもしれません。@c
+しかしながら、@code{\dynamicUp} コマンドを使うことで上に配置される@c
+かもしれません。@c
 強弱記号は、その記号が付いている音符と垂直方向の関係で配置され、@c
 フレージング スラーや小節番号などの譜内部オブジェクトのすべてよりも@c
 下 (あるいは上) に配置されます。@c
@@ -2354,7 +2466,9 @@ a4\f b\mf c\mp b\p
 そのため、@code{\override} コマンドを用いてそれを達成する方法を@c
 見出す必要があります。
 
-@subheading グラフィカル オブジェクトのサイズ
+@node グラフィカル オブジェクトのサイズ
+@unnumberedsubsubsec グラフィカル オブジェクトのサイズ
+@translationof Grob sizing
 
 @cindex grob sizing (グラフィカル オブジェクトのサイズを決定する)
 @cindex sizing grobs (グラフィカル オブジェクトのサイズを決定する)
@@ -2386,7 +2500,7 @@ a4\f b\mf c\mp b\p
 以下は強弱記号テキストに対してこれを行うコマンドです:
 
 @example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
 @end example
 
 @noindent
@@ -2397,7 +2511,7 @@ a4\f b\mf c\mp b\p
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(0 . 0)
 a4\f b\mf c\mp b\p |
 @end lilypond
 
@@ -2418,7 +2532,7 @@ a4\f b\mf c\mp b\p |
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
 % Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
 a4\f b\mf c\mp b\p
 @end lilypond
 
@@ -2705,7 +2819,21 @@ LilyPond はまずスラーが取り得る位置のリストを生成し、そ
 今度は、前のセクションで扱ったプロパティが記譜の重なりを解決する手助けを@c
 どのようにできるかを見ていきましょう。
 
-@subheading padding プロパティ
+@menu
+* padding プロパティ::
+* right-padding プロパティ::
+* staff-padding プロパティ::
+* self-alignment-X プロパティ::
+* staff-position プロパティ::
+* extra-offset プロパティ::
+* positions プロパティ::
+* force-hshift プロパティ::
+@end menu
+
+
+@node padding プロパティ
+@unnumberedsubsubsec @code{padding} プロパティ
+@translationof The padding property
 
 @cindex padding (パディング)
 @cindex fixing overlapping notation (記譜要素の重なりを修正する)
@@ -2719,7 +2847,7 @@ LilyPond はまずスラーが取り得る位置のリストを生成し、そ
 
 @lilypond[quote,fragment,relative=1,verbatim]
 c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
 b2\fermata
 @end lilypond
 
@@ -2729,11 +2857,11 @@ b2\fermata
 @c KEEP LY
 @lilypond[quote,fragment,relative=1,verbatim]
 % これは機能しません。この下を見てください
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
 \tempo 4 = 120
 c1 |
 % これは機能します
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
 \tempo 4 = 80
 d1 |
 @end lilypond
@@ -2749,7 +2877,10 @@ d1 |
 あるオブジェクトの @code{padding} プロパティが増やされた場合、@c
 そのオブジェクトとそれよりも外側にあるすべてオブジェクトが移動させられます。
 
-@subheading right-padding
+
+@node right-padding プロパティ
+@unnumberedsubsubsec @code{right-padding} プロパティ
+@translationof The right-padding property
 
 @cindex right-padding property (right-padding プロパティ)
 
@@ -2773,15 +2904,13 @@ sesquisharp = \markup { \sesquisharp }
 \relative c'' {
   c4
   % これは 1.5 倍シャープを譜刻しますが、スペースが小さすぎます
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 c
   % これはスペースを改善しています
-  \once \override Score.AccidentalPlacement #'right-padding = #0.6
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Score.AccidentalPlacement.right-padding = #0.6
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 |
 }
 @end lilypond
@@ -2798,7 +2927,10 @@ sesquisharp = \markup { \sesquisharp }
 
 @noindent
 
-@subheading staff-padding プロパティ
+
+@node staff-padding プロパティ
+@unnumberedsubsubsec @code{staff-padding} プロパティ
+@translationof The staff-padding property
 
 @cindex aligning objects on a baseline (オブジェクトをベースラインに揃える)
 @cindex objects, aligning on a baseline (オブジェクトをベースラインに揃える)
@@ -2822,13 +2954,16 @@ sesquisharp = \markup { \sesquisharp }
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
 % 幅を 1 単位広げます
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
 % 強弱記号を譜から 2 単位上のベース ラインに揃えます
-\override DynamicLineSpanner #'staff-padding = #2
+\override DynamicLineSpanner.staff-padding = #2
 a4\f b\mf c\mp b\p
 @end lilypond
 
-@subheading self-alignment-X プロパティ
+
+@node self-alignment-X プロパティ
+@unnumberedsubsubsec @code{self-alignment-X} プロパティ
+@translationof The self-alignment-X property
 
 以下の例はこのプロパティが、運指法記号オブジェクトの右端を親の音符の@c
 参照ポイントに揃えることによって、@c
@@ -2841,11 +2976,14 @@ a4\f b\mf c\mp b\p
 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
 \voiceOne
 <a\2>
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
 <a\2>
 @end lilypond
 
-@subheading staff-position プロパティ
+
+@node staff-position プロパティ
+@unnumberedsubsubsec @code{staff-position} プロパティ
+@translationof The staff-position property
 
 @cindex object collision within a staff (譜内部でのオブジェクトの衝突)
 
@@ -2877,7 +3015,7 @@ LilyPond がそれと衝突するかもしれない音符を突き止めるの
 <<
   { c4 c c c }
   \\
-  \override MultiMeasureRest #'staff-position = #-8
+  \override MultiMeasureRest.staff-position = #-8
   { R1 }
 >>
 @end lilypond
@@ -2885,7 +3023,10 @@ LilyPond がそれと衝突するかもしれない音符を突き止めるの
 これは、例えば @code{extra-offset} を使うよりも良い解決方法です。@c
 なぜなら、その休符の上に加線が自動的に挿入されるからです。
 
-@subheading extra-offset プロパティ
+
+@node extra-offset プロパティ
+@unnumberedsubsubsec @code{extra-offset} プロパティ
+@translationof The extra-offset property
 
 @cindex positioning objects (オブジェクトの位置を決定する)
 @cindex positioning grobs (グラフィカル オブジェクトの位置を決定する)
@@ -2904,11 +3045,14 @@ LilyPond がそれと衝突するかもしれない音符を突き止めるの
 @lilypond[quote,fragment,relative=1,verbatim]
 \stemUp
 f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
 f4-5
 @end lilypond
 
-@subheading positions プロパティ
+
+@node positions プロパティ
+@unnumberedsubsubsec @code{positions} プロパティ
+@translationof The positions property
 
 @cindex controlling tuplets, slurs, phrasing slurs, and beams manually (連符、スラー、フレージング スラーそれに連桁を手動で制御する)
 @cindex manually controlling tuplets, slurs, phrasing slurs, and beams (連符、スラー、フレージング スラーそれに連桁を手動で制御する)
@@ -2918,38 +3062,39 @@ f4-5
 @cindex beams, controlling manually (連桁を手動で制御する)
 
 @code{positions} プロパティは連符、スラー、フレージング スラー、@c
-連桁の位置と傾きを手動で制御することを可能にします。@c
-ここで、装飾音符に付いたスラーを避けようとしているために@c
-醜いフレージング スラーを持つ例を挙げます。
-
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4 \acciaccatura e8\( d8 c~ c d c d\)
-@end lilypond
+連桁の位置を手動で制御することができ、それにより傾きも制御できます。
 
-@noindent
-フレージング スラーを音符の上へ移動させることで、より良い結果が得られます:
+ここで、フレージング スラーとスラーが衝突している例を示します:
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\phrasingSlurUp
-\acciaccatura e8\( d8 c~ c d c d\)
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+a8 \( ( a'16 ) a \)
 @end lilypond
 
-@noindent
-しかし、何らかの理由でそうすることができない場合、それに代わる解決策は、@c
-@code{positions} プロパティを使ってフレージング スラーの左端を@c
-少し下げることです。@c
-この方法でも見栄えの悪さを解決できます。
-
 @cindex PhrasingSlur, example of overriding (PhrasingSlur をオーバライドする例)
 @cindex positions property, example (positions プロパティの例)
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
-\acciaccatura e8\( d8 c~ c d c d\)
+@noindent
+衝突を解決するために、フレージング スラーの両端を上に移動させます。@c
+左端を譜中央線よりも 2.5 譜スペース上に設定し、右端を 4.5 譜スペース上に@c
+設定すると、LilyPond は候補の中から両端の位置が最も設定に近いフレージング
+スラーを選択します:
+
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+\once \override PhrasingSlur.positions = #'(2.5 . 4.5)
+a8 \( ( a'16 ) a \)
 @end lilypond
 
+これで改善されました。@c
+しかしながら、スラーの右端を少し下げてみてはどうでしょうか?@c
+そうしようとした場合、この方法では実行できないことがわかります。@c
+すでに表示されているスラーよりも右端が下がっている候補は無く、@c
+そのような場合には @code{positions} は効果を持たないからです。@c
+しかしながら、必要があればタイ、スラー、それにフレージング スラーの@c
+位置と形状を非常に正確に設定することが @emph{できます}。@c
+正確な設定を行う方法は @ruser{Modifying ties and slurs} で学習してください。
+
+もう 1 つ例を示します。@c
+連桁がタイと衝突しています:
 
 @lilypond[quote,verbatim,fragment,ragged-right]
 {
@@ -2981,7 +3126,7 @@ r4
     { c'1 ~ c'2. e'8 f' }
     \\
     {
-      \override Beam #'positions = #'(-1 . -1)
+      \override Beam.positions = #'(-1 . -1)
       e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g''
     }
   >>
@@ -2998,7 +3143,9 @@ r4
 適用されていますが、@c
 ボイス 2 の連桁にはまったく適用されていないということに注意してください。
 
-@subheading force-hshift プロパティ
+@node force-hshift プロパティ
+@unnumberedsubsubsec @code{force-hshift} プロパティ
+@translationof The force-hshift property
 
 今や、@ref{私はボイスを聴いている} の最後で挙げた Chopin の例に@c
 どのように修正を加えるべきかを知っています。@c
@@ -3025,8 +3172,8 @@ r4
 これを修正するには、下の音符の @code{force-hshift} --
 これは @code{NoteColumn} のプロパティです -- を 0 にセットします。@c
 
-2 番目の和音では、F を A に揃えて、符幹の衝突を避けるために最下段の音符を@c
-少し右に移動させるべきでしょう。@c
+2 番目の和音では、F を A-フラットに揃えて、符幹の衝突を避けるために@c
+最下段の音符を少し右に移動させるべきでしょう。@c
 そうするには、D-フラットの @code{NoteColumn} の @code{force-hshift}
 を設定して譜スペースの半分だけ右にずらします。
 2 番目の和音の下の方の音符は、上の方の音符のすぐ右に置くのが最良です。@c
@@ -3046,13 +3193,13 @@ r4
     \\
     {
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
     \\
     \\
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -3087,7 +3234,7 @@ r4
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3100,7 +3247,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % マージされる音符の右にある c2 を再配置します
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % c2 をメインの音符列から外したため、
         % マージが機能します
         \shiftOnn
@@ -3112,8 +3259,7 @@ rhMusic = \relative c'' {
         % マージさせるために d2 の符幹を下向きにする必要があります
         \stemDown
         % d2 の符幹を不可視にします
-        \tweak Stem #'transparent ##t
-        \tweak Flag #'transparent ##t
+        \tweak Stem.transparent ##t
         d2
       }
       \new Voice {
@@ -3300,7 +3446,7 @@ lhMusic = \relative c' {
 ですから、以下の以下のオーバライドをタイで結ばれる最初の音符の前に置けば、@c
 タイは中央線から 3.5 半譜スペースだけ上の位置に移動させられます:
 
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
 
 これで第 2 小節の修正も完了で、以下のようになります:
 
@@ -3310,7 +3456,7 @@ lhMusic = \relative c' {
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3392,7 +3538,7 @@ lhMusic = \relative c' {
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3471,7 +3617,7 @@ C はシフト off のボイス 2 の中にあり、2 つの D はボイス 1 
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3544,7 +3690,7 @@ lhMusic = \relative c' {
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3558,7 +3704,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % マージされる音符の右にある c2 を再配置します
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % c2 をメインの音符列から外したため、マージが機能します
         \shiftOnn
         c2
@@ -3569,8 +3715,7 @@ rhMusic = \relative c'' {
         % マージさせるために d2 の符幹を下向きにする必要があります
         \stemDown
         % d2 の符幹を不可視にします
-        \tweak Stem #'transparent ##t
-        \tweak Flag #'transparent ##t
+        \tweak Stem.transparent ##t
         d2
       }
       \new Voice {
@@ -3623,6 +3768,11 @@ lhMusic = \relative c' {
 @subsection 調整のその他の使用方法
 @translationof Other uses for tweaks
 
+@menu
+* 異なるボイスの中にある音符をタイで結ぶ::
+* MIDI でフェルマータをシミュレートする::
+@end menu
+
 @cindex transparent property, use of (transparent プロパティの使用方法)
 @cindex objects, making invisible (オブジェクトを不可視にする)
 @cindex removing objects (オブジェクトを削除する)
@@ -3631,9 +3781,13 @@ lhMusic = \relative c' {
 @cindex objects, hiding (オブジェクトを隠す)
 @cindex invisible objects (不可視のオブジェクト)
 @cindex objects, invisible (不可視のオブジェクト)
-@cindex tying notes across voices (異なるボイスの中にある音符をタイで結ぶ)
 
-@subheading 異なるボイスの中にある音符をタイで結ぶ
+
+@node 異なるボイスの中にある音符をタイで結ぶ
+@unnumberedsubsubsec 異なるボイスの中にある音符をタイで結ぶ
+@translationof Tying notes across voices
+
+@cindex tying notes across voices (異なるボイスの中にある音符をタイで結ぶ)
 
 以下の例は異なるボイスの中にある音符をタイで結ぶ方法を示しています。@c
 通常、タイで結べるのは同じボイスの中にある 2 つ音符だけです。@c
@@ -3653,8 +3807,7 @@ lhMusic = \relative c' {
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
+    \tweak Stem.transparent ##t
     b8~ b\noBeam
   }
 \\
@@ -3668,9 +3821,8 @@ lhMusic = \relative c' {
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
-    \tweak Stem #'length #8
+    \tweak Stem.transparent ##t
+    \tweak Stem.length #8
     b8~ b\noBeam
   }
 \\
@@ -3678,7 +3830,40 @@ lhMusic = \relative c' {
 >>
 @end lilypond
 
-@subheading MIDI でフェルマータをシミュレートする
+@funindex \single
+@cindex tweak, generated from override
+今度は、グラフィカル オブジェクトの透明性を @emph{オーバライド} する@c
+ことで実現します。@c
+これまでに説明した短縮形 @code{\hide} を使います。@c
+調整と異なり、オーバライドは単一の音楽表記から生成されたプロパティにだけ@c
+効果を持ちます。@c
+@code{\single} を用いてオーバライドを調整に変換することができので、@c
+上記の例を以下のように書き換えることができます:
+
+@lilypond[quote,fragment,relative=2,verbatim]
+<<
+  {
+    \single \hide Stem
+    \single \hide Flag
+    \tweak Stem.length #8
+    b8~ b\noBeam
+  }
+\\
+  { b8[ g] }
+>>
+@end lilypond
+
+今回のケースでは、@code{\once \hide} との違いははっきりしません。@c
+同じ音楽タイミングに複数のオブジェクトが存在する場合
+(和音の中にある符頭のように)、この違いは重要になります。@c
+そのような場合、@code{\once} はすべてのオブジェクトに影響を与える@c
+のに対して、@code{\single} は直後にある音楽表記によって生成された@c
+ただ 1 つのオブジェクトだけに影響を与えます。
+
+
+@node MIDI でフェルマータをシミュレートする
+@unnumberedsubsubsec MIDI でフェルマータをシミュレートする
+@translationof Simulating a fermata in MIDI
 
 @cindex stencil property, use of (stencil プロパティの使用方法)
 @cindex fermata, implementing in MIDI (MIDI でフェルマータ を実装する)
@@ -3711,7 +3896,7 @@ lhMusic = \relative c' {
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'transparent = ##t
+    \once \hide Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata |
@@ -3733,7 +3918,7 @@ lhMusic = \relative c' {
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'stencil = ##f
+    \once \omit Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata |
@@ -3782,11 +3967,11 @@ lhMusic = \relative c' {
 使うことはできないでしょうか?
 
 @example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
 
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
 @end example
 
 これらも、強調する必要のある単語がたくさんある場合、入力するのが@c
@@ -3807,13 +3992,13 @@ lhMusic = \relative c' {
 
 @lilypond[quote,verbatim]
 emphasize = {
-  \override Lyrics.LyricText #'font-shape = #'italic
-  \override Lyrics.LyricText #'font-series = #'bold
+  \override Lyrics.LyricText.font-shape = #'italic
+  \override Lyrics.LyricText.font-series = #'bold
 }
 
 normal = {
-  \revert Lyrics.LyricText #'font-shape
-  \revert Lyrics.LyricText #'font-series
+  \revert Lyrics.LyricText.font-shape
+  \revert Lyrics.LyricText.font-series
 }
 
 global = { \key c \major \time 4/4 \partial 4 }
@@ -3887,7 +4072,7 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -3921,7 +4106,7 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 @end example
 
 音楽ファイルの先頭付近で @code{\include} コマンドを使ってこのファイルを@c
@@ -3960,7 +4145,7 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -3997,22 +4182,22 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
@@ -4030,22 +4215,22 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \layout{
   \context {
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context {
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   }
   \context {
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4069,7 +4254,7 @@ inst =
 出力のフォントを全体に大きくすることにします。
 
 @example
-%%%  definitions.ily
+%%%  web-publish.ily
 mpdolce =
 #(make-dynamic-script
   #@{ \markup @{ \hspace #0
@@ -4082,23 +4267,23 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 #(set-global-staff-size 23)
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
@@ -4116,18 +4301,18 @@ inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 #(set-global-staff-size 23)
 
 \layout{
   \context { \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context { \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4193,13 +4378,13 @@ LilyPond の内部ファイルを調べることによって@c
 このディレクトリの場所は、(a) あなたが lilypond.org からコンパイル済みの@c
 バイナリをダウンロードすることによって LilyPond を手に入れたのか、@c
 それとも、パッケージ マネージャから LilyPond をインストールした
-(つまり、Linux と一緒に配布されたか、fink や cygwin でインストールされた)
+(つまり、GNU/Linux と一緒に配布されたか、fink や cygwin でインストールされた)
 のか、(b) LilyPond はどの OS 上で使用されているのか、に依存します:
 
-@strong{lilypond.org からダウンロードした}
+@subsubsubheading lilypond.org からダウンロードした
 
 @itemize @bullet
-@item Linux
+@item GNU/Linux
 
 @example
 @file{@var{INSTALLDIR}/lilypond/usr/share/lilypond/current/}
@@ -4225,8 +4410,7 @@ LilyPond アプリケーション上でコントロール クリックして
 
 @end itemize
 
-@strong{パッケージ マネージャからインストールした、あるいは、@c
-ソースからコンパイルした}
+@subsubsubheading パッケージ マネージャからインストールした、あるいは、ソースからコンパイルした
 
 @file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/} に進んでください。@c
 @var{PREFIX} はパッケージ マネージャか @code{configure} スクリプトによって@c
@@ -4254,8 +4438,8 @@ LilyPond アプリケーション上でコントロール クリックして
 
 @example
 tieDotted = @{
-  \override Tie #'dash-period = #0.75
-  \override Tie #'dash-fraction = #0.1
+  \override Tie.dash-period = #0.75
+  \override Tie.dash-fraction = #0.1
 @}
 @end example
 
@@ -4357,7 +4541,7 @@ Scheme プロシージャをセットすることができます。@c
 
 \relative c' {
   % Arrange to obtain color from color-notehead procedure
-  \override NoteHead #'color = #color-notehead
+  \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
 }
 @end lilypond
index d1a8c83951a43b9d2c95d4e52f2d2719db7d7851..0afb531979aa576b72ee3553cbe5a8366e03c56c 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: dadabdfc4537ef85adb9159d46eda5a0ff180835
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
@@ -56,7 +56,6 @@ Copyright @copyright{} 1999--2012 by 著作者一同
 
 * Notation manual tables::      表と図
 * カンニング ペーパー::     LilyPond 構文についての要約
-* LilyPond 文法::          LilyPond 構文解析プログラムのための構文ダイアグラム
 * GNU Free Documentation License:: このドキュメントの使用許諾書
 * LilyPond コマンド インデックス::
 * LilyPond インデックス::
@@ -69,7 +68,6 @@ Copyright @copyright{} 1999--2012 by 著作者一同
 
 * 記譜法マニュアル表::      表と図
 * カンニング ペーパー::     LilyPond 構文についての要約
-* LilyPond 文法::           LilyPond 構文解析プログラムのための構文ダイアグラム
 * GNU Free Documentation License:: このドキュメントの使用許諾書
 * LilyPond コマンド インデックス::
 * LilyPond インデックス::
@@ -93,16 +91,6 @@ Copyright @copyright{} 1999--2012 by 著作者一同
 @include notation/cheatsheet.itely
 
 
-
-@node LilyPond 文法
-@appendix LilyPond 文法
-@translationof LilyPond grammar
-
-この付録は、構文解析プログラムからの出力である、LilyPond 文法についての記述です。
-
-@verbatiminclude ly-grammar.txt
-
-
 @include fdl.itexi
 
 
diff --git a/Documentation/ja/notation/GNUmakefile b/Documentation/ja/notation/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 8bdcca695e7d25d533de17c9f84b2513a82be4bb..8d3c5b837ceed3e5b51209d119aa199a45b56eb5 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -68,7 +68,7 @@ Scheme の要素は、@code{.ly} の中で、@c
 
 @menu
 * コンテキストの説明::
-* コンテキストを作成する::
+* ã\82³ã\83³ã\83\86ã\82­ã\82¹ã\83\88ã\82\92ä½\9cæ\88\90ã\81\97ã\81¦å\8f\82ç\85§ã\81\99ã\82\8b::
 * コンテキストを残しておく::
 * コンテキストのプラグインを変更する::
 * コンテキストのデフォルト設定を変更する::
@@ -286,152 +286,225 @@ context.
 
 @end ignore
 
-@node コンテキストを作成する
-@subsection コンテキストを作成する
-@translationof Creating contexts
 
-@c TODO more complete descriptions rather than learning style
-
-ボイスと譜が 1 つだけの楽譜では、コンテキストは自動的に作成されます。@c
-もっと複雑な楽譜では、手動でコンテキストを作成する必要があります。@c
-コンテキスを作成するために 3 つのコマンドがあります。
-
-@itemize
-
-@item
-もっとも簡単なコマンドは @code{\new} であり、@c
-もっとも素早く入力できるコマンドでもあります。@c
-このコマンドは音楽表記の前に置きます。例えば、以下のように:
+@node コンテキストを作成して参照する
+@subsection コンテキストを作成して参照する
+@translationof Creating and referencing contexts
 
 @funindex \new
+@funindex \context
 @cindex new contexts (新しいコンテキスト)
-@cindex Context, creating (コンテキストを作成する)
+@cindex referencing contexts (コンテキストを参照する)
+@cindex Contexts, creating and referencing (コンテキストを作成して参照する)
+
+LilyPond は、適切なコンテキストが存在しないうちに音楽表記に遭遇すると、@c
+自動的に下位コンテキストを作成します。@c
+しかしながら、通常これは、シンプルな楽譜やドキュメントの中の楽譜断片@c
+のような単純な場合にしかうまくいきません。@c
+もっと複雑な楽譜の場合、すべてのコンテキストを @code{\new} コマンドや
+@code{\context} コマンドを用いて明示的に指定することをお勧めします。@c
+これら 2 つのコマンドの構文はほとんど同じです:
 
 @example
-\new @var{type} @var{music expression}
+[\new | \context] @var{Context} [ = @var{name}] [@var{music-expression}]
 @end example
 
 @noindent
-ここで、@var{type} はコンテキスト名 (@code{Staff} や @code{Voice} など) です。@c
-このコマンドは新しいコンテキストを作成し、@c
-そのコンテキストに付属する @var{音楽表記} の解釈を開始します。
+ここで、@code{\new} と @code{\context} のどちらかを使用します。@c
+@var{Context} は作成するコンテキストのタイプであり、@var{name} は@c
+作成されるコンテキストにオプションで付けることができる名前であり、@c
+@var{music-expression} はこのコンテキストのエングラーバとパフォーマに@c
+よって処理される単一の音楽表記です。
 
-@code{\new} の実際的な使用例には、多くの譜を持つ楽譜があります。@c
-それぞれの譜に配置される各パートの前に @code{\new Staff} を記述します。
+コンテキスト名を持たない @code{\new} コマンドは一般的に複数の譜を持つ
+score を作成するのに用いられます:
 
-@lilypond[quote,verbatim,relative=2,ragged-right,fragment]
+@c KEEP LY
+@lilypond[quote,verbatim,relative=2]
 <<
-  \new Staff { c4 c }
-  \new Staff { d4 d }
+  \new Staff {
+    % 暗黙的に Voice コンテキストが作成されます
+    c4 c
+  }
+  \new Staff {
+    d4 d
+  }
 >>
 @end lilypond
 
-@code{\new} コマンドは、コンテキストに名前を与えることもできます:
+@noindent
+そして、1 つの譜に複数のボイスが配置されます:
 
-@example
-\new @var{type} = @var{id} @var{music}
-@end example
+@lilypond[quote,verbatim,relative=2]
+<<
+  \new Staff <<
+    \new Voice {
+      \voiceOne
+      c8 c c4 c c
+    }
+    \new Voice {
+      \voiceTwo
+      g4 g g g
+    }
+  >>
+>>
+@end lilypond
 
-しかしながら、ユーザが指定したコンテキスト名は、
-そのコンテキスト以前に同じ名前を与えられたコンテキストが無い場合にのみ、@c
-使用できます。
+@noindent
 
+@c 保留(意味のない文?)
+@c @code{\new} should always be used to specify unnamed contexts.
 
-@funindex \context
+@code{\new} と @code{\context} は動作が異なります:
 
+@itemize
 @item
-@code{\new} と同様に、@c
-@code{\context} コマンドも音楽表記をコンテキスト オブジェクトに代入します。@c
-しかしながら、このコマンドはコンテキストに明示的に名前を与えます。@c
-構文は以下の通りです:
+@code{\new} はコンテキスト名を持っているか、いないかにかかわらず、@c
+例え同じ名前を持つコンテキストが存在していたとしても、常に全く新たな@c
+コンテキストを作成します:
 
-@example
-\context @var{type} = @var{id} @var{music}
-@end example
+@lilypond[quote,verbatim,relative=2]
+<<
+  \new Staff <<
+    \new Voice = "A" {
+      \voiceOne
+      c8 c c4 c c
+    }
+    \new Voice = "A" {
+      \voiceTwo
+      g4 g g g
+    }
+  >>
+>>
+@end lilypond
 
-この構文は @var{id} という名前の @var{type} タイプのコンテキストが@c
-すで存在していないか検索します。@c
-コンテキストがまだ存在していなければ、@c
-指定された名前を持つコンテキストが新たに作成されます。@c
-これは、コンテキストを後で参照する場合に有用です。@c
-例えば、以下のように名前を付けられたメロディ:
+@item
+コンテキスト名を持つ @code{\context} は、階層、名前、それにタイプが@c
+同じコンテキストが存在しない場合にのみ、新たなコンテキスを作成します。@c
+存在する場合、@code{\context} はすでに作成されているコンテキストへの@c
+参照となり、音楽表記はそのコンテキストに渡されて処理されます。
 
-@example
-\context Voice = "@b{tenor}" @var{music}
-@end example
+名前を持つコンテキストの用途の 1 つとして、楽譜レイアウトと音楽コンテンツ@c
+を分離させることができます。@c
+以下の 2 つの形式はどちらも有効です:
 
-@noindent
-に、以下のように歌詞を設定すると、テキストは適切に音符に揃えられます:
+@c KEEP LY
+@lilypond[quote,verbatim]
+\score {
+  <<
+    % 楽譜レイアウト
+    \new Staff <<
+      \new Voice = "one" {
+        \voiceOne
+      }
+      \new Voice = "two" {
+        \voiceTwo
+      }
+    >>
 
-@example
-\new Lyrics \lyricsto "@b{tenor}" @var{lyrics}
-@end example
+    % 音楽コンテンツ
+    \context Voice = "one" {
+      \relative c'' {
+        c4 c c c
+      }
+    }
+    \context Voice = "two" {
+      \relative c'' {
+        g8 g g4 g g
+      }
+    }
+  >>
+}
+@end lilypond
 
-@noindent
+@c KEEP LY
+@lilypond[quote,verbatim]
+\score {
+  <<
+    % 楽譜レイアウト
+    \new Staff <<
+      \context Voice = "one" {
+        \voiceOne
+      }
+      \context Voice = "two" {
+        \voiceTwo
+      }
+    >>
+
+    % 音楽コンテンツ
+    \context Voice = "one" {
+      \relative c'' {
+        c4 c c c
+      }
+    }
+    \context Voice = "two" {
+      \relative c'' {
+        g8 g g4 g g
+      }
+    }
+  >>
+}
+@end lilypond
 
 名前付きコンテキストの他の使用例として、2 つの音楽表記をつなげて
 1 つのコンテキストにすることができます。@c
 以下の例では、アーティキュレーションと音符は別々に入力されています:
+@noindent
+変数を用いても同じことができます。@c
+@rlearning{Organizing pieces with variables} を参照してください。
 
-@example
-music = @{ c4 c4 @}
-arts = @{ s4-. s4-> @}
-@end example
-
-これらを同じ @code{Voice} コンテキストに送ることによって@c
-組み合わせることができます:
+@item
+コンテキスト名を持たない @code{\context} は、階層とタイプが一致する@c
+コンテキストのうち最初に作成されたものに適用され
+(例えそのコンテキストが名前を持っていたとしても適用されます)、@c
+音楽表記はそのコンテキストに渡されて処理されます。@c
+この形式が有用なことは稀です。@c
+しかしながら、コンテキスト名と音楽表記を持たない @code{\context}
+は、コンテキスト内で @code{\applyContext} で記述した Scheme
+プロシージャを実行させるのに用いられます:
 
 @example
-<<
-  \new Staff \context Voice = "A" \music
-  \context Voice = "A" \arts
->>
+\new Staff \relative c' @{
+  c1
+  \context Timing
+  \applyContext #(lambda (ctx)
+                   (newline)
+                   (display (ly:context-current-moment ctx)))
+  c1
+@}
 @end example
-@lilypond[quote,ragged-right]
-music = { c4 c4 }
-arts = { s4-. s4-> }
-\relative c'' <<
-  \new Staff \context Voice = "A" \music
-  \context Voice = "A" \arts
->>
-@end lilypond
 
-このメカニズムを用いることで、原典版 (オリジナル版) を定義し、@c
-オプションとしてそれに異なるアーティキュレーションを付けることができます。
+@end itemize
 
-@cindex creating contexts (コンテキストを作成する)
-
-@item
-コンテキストを作成する 3 つ目のコマンドは以下の通りです:
+後で参照するコンテキストには名前を付ける必要があります。@c
+例えば、歌詞を音楽に関連付けるような場合です:
 
 @example
-\context @var{type} @var{music}
+\new Voice = "tenor" @var{music}
+...
+\new Lyrics \lyricsto "tenor" @var{lyrics}
 @end example
 
 @noindent
-これは @code{= @var{id}} を持つ @code{\context} に似ていますが、@c
-タイプ @var{type} のすべてのコンテキストに適用されます
--- そのコンテキストに与えられた名前とは関係なく適用されます。@c
-
-この構文の変形版は、@c
-異なる階層で解釈される可能性がある音楽表記に対して使用されます。@c
-例えば、@code{\applyOutput} コマンド
-(@rextend{Running a function on all layout objects} を参照してください)
-です。@c
-明示的に @code{\context} を指定しなければ、通常は @code{Voice} に適用されます。
+歌詞を音楽に関連付ける方法についての詳細は
+@ref{Automatic syllable durations} を参照してください。
 
-@example
-\applyOutput #'@var{context} #@var{function}   % Voice に適用されます
-@end example
+ある特定のタイプのすべてのコンテキストのプロパティを @code{\layout}
+ブロックで変更することができます (構文は異なります)
+-- @ref{Changing all contexts of the same type} を参照してください。@c
+この構造でもレイアウトを音楽コンテンツから分離させることができます。@c
+単一のコンテキストを変更するのであれば、@code{\with} ブロックを用いる@c
+必要があります -- @ref{Changing just one specific context} を参照@c
+してください。
 
-@code{Score} レベルや @code{Staff} レベルで解釈させるには、以下のようにします:
+@seealso
 
-@example
-\applyOutput #'Score #@var{function}
-\applyOutput #'Staff #@var{function}
-@end example
+学習マニュアル:
+@rlearning{Organizing pieces with variables}
 
-@end itemize
+記譜法リファレンス:
+@ref{Changing just one specific context},
+@ref{Automatic syllable durations}
 
 
 @node コンテキストを残しておく
@@ -802,7 +875,7 @@ Internals Reference @expansion{} Translation @expansion{} Context.
   \layout {
     \context {
       \Staff
-      \override Stem #'thickness = #4.0
+      \override Stem.thickness = #4.0
     }
   }
 }
@@ -827,7 +900,7 @@ Internals Reference @expansion{} Translation @expansion{} Context.
 @end lilypond
 
 @item
-@code{\dynamicUp} や @code{\accidentalStyle "dodecaphonic"} のような音楽@c
+@code{\dynamicUp} や @code{\accidentalStyle dodecaphonic} のような音楽@c
 表記等、あらかじめ定義されているコマンド
 
 @lilypond[quote,verbatim]
@@ -843,7 +916,7 @@ Internals Reference @expansion{} Translation @expansion{} Context.
     }
     \context {
       \Staff
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
     }
   }
 }
@@ -894,9 +967,9 @@ StaffDefaults = \with {
     }
   }
   \layout {
-    \accidentalStyle "dodecaphonic"
+    \accidentalStyle dodecaphonic
     \set fontSize = #-4
-    \override Voice.Stem #'thickness = #4.0
+    \override Voice.Stem.thickness = #4.0
   }
 }
 @end lilypond
@@ -937,7 +1010,7 @@ StaffDefaults = \with {
   \new Staff {
     \new Voice
     \with {
-      \override Stem #'thickness = #4.0
+      \override Stem.thickness = #4.0
     }
     {
       \relative c'' {
@@ -989,7 +1062,7 @@ StaffDefaults = \with {
       }
     }
     \new Staff
-    \with { \accidentalStyle "dodecaphonic" }
+    \with { \accidentalStyle dodecaphonic }
     {
       \new Voice
       \with { \dynamicUp }
@@ -1081,9 +1154,8 @@ StaffDefaults = \with {
   \consists "Text_engraver"
   \consists "Pitch_squash_engraver"
   squashedPosition = #0
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Stem
   \alias Voice
 }
 \context { \Staff
@@ -1148,9 +1220,8 @@ squashedPosition = #0
 音符はスラッシュで、符幹を持ちません:
 
 @example
-\override NoteHead #'style = #'slash
-\override Stem #'transparent = ##t
-\override Flag #'transparent = ##t
+\override NoteHead.style = #'slash
+\hide Stem
 @end example
 
 これらのプラグインすべてが共同する必要があり、@c
@@ -1172,9 +1243,8 @@ squashedPosition = #0
   \consists "Text_engraver"
   \consists "Pitch_squash_engraver"
   squashedPosition = #0
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Stem
   \alias Voice
 @}
 @end example
@@ -1656,14 +1726,14 @@ Add this much extra space between objects that are next to each other.
 以下のコマンドは、音符と運指記号の間に 3 譜スペースを挿入します:
 
 @example
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
 @end example
 
 このコマンドを @code{Fingering} オブジェクトが作成される前に挿入する
 -- つまり @code{c2} の前に挿入する -- と、以下のような結果が得られます:
 
 @lilypond[quote,relative=2,fragment,verbatim]
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
 c-2
 \stemUp
 f
@@ -1777,7 +1847,7 @@ discuss the functionality of this command.
 The command
 
 @verbatim
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
 @end verbatim
 
 @noindent
@@ -1788,7 +1858,7 @@ appearance.  Here we see the command in action:
 
 @lilypond[quote,verbatim,relative=2,fragment]
 c4
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
 c4
 c4
 c4
@@ -1804,7 +1874,7 @@ causing the default context @code{Voice} to be used.  Adding
 
 @lilypond[quote,fragment,verbatim,relative=2]
 c4
-\once \override Stem #'thickness = #4.0
+\once \override Stem.thickness = #4.0
 c4
 c4
 @end lilypond
@@ -1815,9 +1885,9 @@ or beams, the @code{\override} command must be executed at the moment
 when the object is created.  In this example,
 
 @lilypond[quote,fragment,verbatim,relative=2]
-\override Slur #'thickness = #3.0
+\override Slur.thickness = #3.0
 c8[( c
-\override Beam #'thickness = #0.6
+\override Beam.beam-thickness = #0.6
 c8 c])
 @end lilypond
 
@@ -1831,8 +1901,8 @@ affects settings that were made in the same context.  In other words, the
 @code{\revert} in the next example does not do anything.
 
 @example
-\override Voice.Stem #'thickness = #4.0
-\revert Staff.Stem #'thickness
+\override Voice.Stem.thickness = #4.0
+\revert Staff.Stem.thickness
 @end example
 
 Some tweakable options are called @q{subproperties} and reside inside
@@ -1847,7 +1917,7 @@ properties.  To tweak those, use commands of the form
 such as
 
 @example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
 @end example
 
 @end ignore
@@ -2014,15 +2084,15 @@ Translation @expansion{} Tunable context properties.
 内部リファレンス:
 @rinternals{Tunable context properties}
 
-@cindex grob properties (グラフィカル オブジェクト プロパティ)
-@cindex properties, grob (グラフィカル オブジェクト プロパティ)
-@funindex \override
-
 
 @node override コマンド
 @subsection @code{\override} コマンド
 @translationof The override command
 
+@cindex grob properties (グラフィカル オブジェクト プロパティ)
+@cindex properties, grob (グラフィカル オブジェクト プロパティ)
+@funindex \override
+
 特殊なタイプのコンテキスト プロパティがあります:
 グラフィカル オブジェクト記述です。@c
 グラフィカル オブジェクト記述には @code{StudlyCaps} という名前
@@ -2033,49 +2103,30 @@ Translation @expansion{} Tunable context properties.
 @file{scm/define-grobs.scm} を参照してください。@c
 各グラフィカル オブジェクト記述は @code{\override} を用いて変更します。
 
-@code{\override} は、実際のところ、簡略化した記述です。
-
-@example
-\override @var{context}.@var{GrobName} #'@var{property} = #@var{value}
-@end example
-
-@noindent
-これは、以下と等価です:
+@code{\override} コマンドの構文は以下の通りです:
 
-@c  leave this long line -gp
 @example
-\set @var{context}.@var{GrobName}  =
-  #(cons (cons '@var{property} @var{value})
-         <previous value of @var{context}.@var{GrobName}>)
+\override [@var{context}.]@var{GrobName}.@var{property} = #@var{value}
 @end example
 
-@code{context}.@code{GrobName} (alist) の値は、@c
-個々のグラフィカル オブジェクトのプロパティを初期化するために使用されます。@c
-グラフィカル オブジェクトは、Scheme スタイルの名前
-(小文字の単語を @code{-} でつないだもの) のプロパティを持ちます。@c
-グラフィカル オブジェクト プロパティの値は、@c
-フォーマット処理の間ずっと変更されています:
-基本的に、フォーマット処理は、@c
-コールバック関数を用いてプロパティを計算することに他なりません。@c
-
 例えば、@code{Stem} オブジェクトの @code{thickness} プロパティを@c
 オーバライドすることによって、符幹の太さを太くすることができます:
 
 @lilypond[quote,verbatim,relative=2]
 c4 c
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 c4 c
 @end lilypond
 
-If no context is specified in an @code{\override}, the bottom
-context is used:
+@code{\override} でコンテキストが指定されていない場合、その下にある@c
+コンテキストに適用されます:
 
 @lilypond[quote,verbatim,relative=2]
-{ \override Staff.Stem #'thickness = #3.0
+{ \override Staff.Stem.thickness = #3.0
   <<
     {
       e4 e
-      \override Stem #'thickness = #0.5
+      \override Stem.thickness = #0.5
       e4 e
     } \\ {
       c4 c c c
@@ -2084,17 +2135,40 @@ context is used:
 }
 @end lilypond
 
+調整可能なオプションには @q{サブプロパティ} があり、これはプロパティの@c
+内部に存在します。@c
+これを調整するには、以下のような形式のコマンドを用います:
+
+@example
+\override Stem.details.beamed-lengths = #'(4 4 3)
+@end example
+
+また、スパナの端を変更するには、以下のようにします:
+
+@example
+\override TextSpanner.bound-details.left.text = #"left text"
+\override TextSpanner.bound-details.right.text = #"right text"
+@end example
+
 @funindex \revert
 @cindex reverting overrides (オーバライドを元に戻す)
 @cindex overrides, reverting (オーバライドを元に戻す)
 
-@code{\override} の効果は、@code{\revert} によって元に戻すことができます:
+@code{\override} の効果は、@code{\revert} によって元に戻すことができます。
+
+@code{\revert} の構文は以下の通りです:
+
+@example
+\revert [@var{context}.]@var{GrobName}.@var{property}
+@end example
+
+例を示します:
 
 @lilypond[quote,verbatim,relative=2]
 c4
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 c4 c
-\revert Voice.Stem #'thickness
+\revert Voice.Stem.thickness
 c4
 @end lilypond
 
@@ -2107,11 +2181,11 @@ c4
   <<
     {
       e4
-      \override Staff.Stem #'thickness = #3.0
+      \override Staff.Stem.thickness = #3.0
       e4 e e
     } \\ {
       c4 c c
-      \revert Staff.Stem #'thickness
+      \revert Staff.Stem.thickness
       c4
     }
   >>
@@ -2128,11 +2202,11 @@ c4
 {
   <<
     {
-      \override Stem #'thickness = #3.0
+      \override Stem.thickness = #3.0
       e4 e e e
     } \\ {
       c4
-      \once \override Stem #'thickness = #3.0
+      \once \override Stem.thickness = #3.0
       c4 c c
     }
   >>
@@ -2144,7 +2218,7 @@ c4
 Commands which change output generally look like
 
 @example
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 @end example
 
 @noindent
@@ -2157,13 +2231,6 @@ To construct this tweak we must determine these bits of information:
 @item a sensible value: here @code{3.0}.
 @end itemize
 
-Some tweakable options are called @q{subproperties} and reside inside
-properties.  To tweak those, use commands in the form
-
-@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
-@end example
-
 @cindex internal documentation
 @cindex finding graphical objects
 @cindex graphical object descriptions
@@ -2201,7 +2268,7 @@ and the program reference.
 @code{\tweak} コマンドは以下のような構文を持ちます:
 
 @example
-\tweak @var{layout-object} #'@var{grob-property} @var{value}
+\tweak [@var{layout-object}.]@var{grob-property} @var{value}
 @end example
 
 @code{layout-object} の指定はオプションです。@c
@@ -2216,19 +2283,19 @@ For example:
 
 @lilypond[relative=2,verbatim,quote]
 < c
-  \tweak #'color #red
+  \tweak color #red
   d
   g
-  \tweak #'duration-log #1
+  \tweak duration-log #1
   a
 > 4
--\tweak #'padding #8
+-\tweak padding #8
 -^
 @end lilypond
 
 
 
-But the main use of the @code{\tweak} command is to modify just
+The main use of the @code{\tweak} command is to modify just
 one of a number of notation elements which start at the same musical
 moment, like the notes of a chord, or tuplet brackets which start
 at the same time.
@@ -2250,14 +2317,14 @@ note, and able to modify it.
 So, this works:
 
 @lilypond[relative=2,verbatim,quote]
-<\tweak #'color #red c>4
+<\tweak color #red c>4
 @end lilypond
 
 @noindent
 but this does not:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
+\tweak color #red c4
 @end lilypond
 
 @end ignore
@@ -2288,10 +2355,10 @@ but this does not:
 
 @lilypond[relative=2,verbatim,quote]
 < c
-  \tweak #'color #red
+  \tweak color #red
   d
   g
-  \tweak #'duration-log #1
+  \tweak duration-log #1
   a
 > 4
 @end lilypond
@@ -2299,7 +2366,7 @@ but this does not:
 @code{\tweak} を用いて、スラーを変更することができます:
 
 @lilypond[verbatim,quote,relative=1]
-c-\tweak #'thickness #5 ( d e f)
+c-\tweak thickness #5 ( d e f)
 @end lilypond
 
 
@@ -2313,9 +2380,9 @@ c-\tweak #'thickness #5 ( d e f)
 からです:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
-\tweak #'color #red <c e>4
-<\tweak #'color #red c e>4
+\tweak color #red c4
+\tweak color #red <c e>4
+<\tweak color #red c e>4
 @end lilypond
 
 単純な @code{\tweak} コマンドでは入力から直接作成されないオブジェクトを@c
@@ -2325,13 +2392,14 @@ c-\tweak #'thickness #5 ( d e f)
 のではなく、後になって @code{NoteHead} レイアウト オブジェクトによって@c
 生成されるからです。
 
-そのような直接作成されないレイアウト オブジェクトは、明示的な形式の
-@code{\tweak} コマンドを用いることで調整することができます:
+そのような直接作成されないレイアウト オブジェクトは、グラフィカル
+オブジェクト名を明示的に指定した @code{\tweak} コマンドを用いることで@c
+調整することができます:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak Stem #'color #red
-\tweak Beam #'color #green c8 e
-<c e \tweak Accidental #'font-size #-3 ges>4
+\tweak Stem.color #red
+\tweak Beam.color #green c8 e
+<c e \tweak Accidental.font-size #-3 ges>4
 @end lilypond
 
 @code{\tweak} コマンドで音部記号や拍子記号を変更することはできません。@c
@@ -2344,10 +2412,10 @@ c-\tweak #'thickness #5 ( d e f)
 
 @lilypond[verbatim,quote,relative=1]
 c
--\tweak #'style #'dashed-line
--\tweak #'dash-fraction #0.2
--\tweak #'thickness #3
--\tweak #'color #red
+-\tweak style #'dashed-line
+-\tweak dash-fraction #0.2
+-\tweak thickness #3
+-\tweak color #red
  \glissando
 f'
 @end lilypond
@@ -2446,7 +2514,7 @@ property (modified with @code{\set}) was created.
 % 譜間スペースを減らします
 \new PianoStaff \with {
   % this is the nested declaration
-  \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
+  \override StaffGrouper.staff-staff-spacing.basic-distance = #7
 } <<
   \new Staff { \clef treble c''1 }
   \new Staff { \clef bass   c1   }
@@ -2463,7 +2531,7 @@ property (modified with @code{\set}) was created.
 
 @lilypond[quote,verbatim]
 \new PianoStaff \with {
-  \override StaffGrouper #'staff-staff-spacing =
+  \override StaffGrouper.staff-staff-spacing =
     #'((basic-distance . 0)
        (minimum-distance . 0)
        (padding . 0)
@@ -2483,10 +2551,10 @@ property (modified with @code{\set}) was created.
 このため、以下の 2 つの宣言は等価です:
 
 @example
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
   #'((basic-distance . 7))
 
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
   #'((basic-distance . 7)
      (minimum-distance . 0)
      (padding . 0)
@@ -2649,7 +2717,14 @@ property (modified with @code{\set}) was created.
 これらの選択のほとんどは LilyPond によって自動的に決定されますが、@c
 強制的に向きや配置を指定することが望ましい場合もあります。
 
-@strong{アーティキュレーションの方向指示子}
+@menu
+* アーティキュレーションの方向指示子::
+* 方向プロパティ::
+@end menu
+
+@node アーティキュレーションの方向指示子
+@unnumberedsubsubsec アーティキュレーションの方向指示子
+@translationof Articulation direction indicators
 
 デフォルトでは、アーティキュレーションのいくつかの向きは常に上または下に@c
 なっています (例えば、強弱記号やフェルマータ)。@c
@@ -2684,7 +2759,9 @@ c2( c)
 c2^( c)
 @end lilypond
 
-@strong{方向プロパティ}
+@node 方向プロパティ
+@unnumberedsubsubsec 方向プロパティ
+@translationof The direction property
 
 多くのレイアウト オブジェクトの位置や向きは、@c
 @code{direction} プロパティによって制御されます。
@@ -2772,7 +2849,7 @@ LilyPond における距離には 2 つのタイプがあります: 絶対距離
 値の後ろに @code{\staff-space} を付けることにより、
 比率で指定することもできます (次の段落を参照してください)。@c
 ページ レイアウトについての詳細は、@c
-@ref{ページ レイアウト} に記述されています。
+@ref{Page layout} に記述されています。
 
 相対距離は常に譜スペースを単位として指定されます
  -- 稀に、半譜スペースが使用されます。@c
@@ -2808,7 +2885,7 @@ Scheme 関数 @code{magstep} を使用することができます。@c
 @rlearning{オブジェクトの長さと太さ}
 
 記譜法リファレンス:
-@ref{ページ レイアウト},
+@ref{Page layout},
 @ref{譜サイズを設定する}
 
 
@@ -2835,7 +2912,7 @@ Scheme 関数 @code{magstep} を使用することができます。@c
 
 @lilypond[verbatim,quote,relative=1]
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
+  \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
 }
 { a4 e' f b | d1 }
 @end lilypond
@@ -2846,7 +2923,7 @@ Scheme 関数 @code{magstep} を使用することができます。@c
 
 @lilypond[verbatim,quote,relative=1]
 \new Staff \with {
-  \override StaffSymbol #'width = #23
+  \override StaffSymbol.width = #23
 }
 { a4 e' f b | d1 }
 @end lilypond
@@ -2869,12 +2946,19 @@ Scheme 関数 @code{magstep} を使用することができます。@c
 いくつかのスパナ -- 2 つのオブジェクトの間に直線を描くもの -- は、さらに、@c
 @code{line-spanner-interface} をサポートします。
 
+@menu
+* spanner-interface を使用する::
+* line-spanner-interface を使用する::
+@end menu
+
+@node spanner-interface を使用する
 @unnumberedsubsubsec @code{spanner-interface} を使用する
+@translationof Using the spanner-interface
 
 このインターフェイスは、@c
 いくつかのスパナに適用される 2 つのプロパティを提供します。
 
-@strong{@i{@code{minimum-length} プロパティ}}
+@subsubsubheading The @code{minimum-length} プロパティ
 
 スパナの最短の長さは、@code{minimum-length} プロパティによって指定されます。@c
 通常、このプロパティを増加させると、@c
@@ -2909,7 +2993,7 @@ Works not at all for:
 a~a
 a
 % タイの長さを増加させます
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
 ~a
 @end lilypond
 
@@ -2919,7 +3003,7 @@ a1
 \compressFullBarRests
 R1*23
 % 休符バーの長さを増加させます
-\once \override MultiMeasureRest #'minimum-length = #20
+\once \override MultiMeasureRest.minimum-length = #20
 R1*23
 a1
 @end lilypond
@@ -2928,7 +3012,7 @@ a1
 @lilypond[verbatim,quote,relative=2]
 a \< a a a \!
 % ヘアピンの長さを増加させます
-\override Hairpin #'minimum-length = #20
+\override Hairpin.minimum-length = #20
 a \< a a a \!
 @end lilypond
 
@@ -2938,12 +3022,12 @@ a \< a a a \!
 @lilypond[verbatim,quote,relative=2]
 a( a)
 a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
 ( a)
 
 a\( a\)
 a
--\tweak #'minimum-length #5
+-\tweak minimum-length #5
 \( a\)
 @end lilypond
 
 e \glissando c'
 
 % 単独では効果を持ちません
-\once \override Glissando #'minimum-length = #20
+\once \override Glissando.minimum-length = #20
 e, \glissando c'
 
 % 以下の両方のオーバライドが存在する場合にのみ、効果を持ちます
-\once \override Glissando #'minimum-length = #20
-\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Glissando.minimum-length = #20
+\once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
 e, \glissando c'
 @end lilypond
 
@@ -2977,16 +3061,16 @@ e, \glissando c'
 @c KEEP LY
 @lilypond[verbatim,quote,relative=1]
 % 単独では効果を持ちません
-\once \override Beam #'minimum-length = #20
+\once \override Beam.minimum-length = #20
 e8 e e e
 
 % 以下の両方のオーバライドが存在する場合にのみ、効果を持ちます
-\once \override Beam #'minimum-length = #20
-\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Beam.minimum-length = #20
+\once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
 e8 e e e
 @end lilypond
 
-@strong{@i{@code{to-barline} プロパティ}}
+@subsubsubheading The @code{to-barline} プロパティ
 
 @code{spanner-interface} の 2 番目に有用なプロパティは
 @code{to-barline} です。@c
@@ -2997,7 +3081,7 @@ e8 e e e
 
 @lilypond[verbatim,quote,relative=2]
 a \< a a a a \! a a a \break
-\override Hairpin #'to-barline = ##f
+\override Hairpin.to-barline = ##f
 a \< a a a a \! a a a
 @end lilypond
 
@@ -3006,7 +3090,9 @@ a \< a a a a \! a a a
 あるいは小節線で終了させることに意味が無い他のスパナに対して、@c
 このプロパティを @code{#t} に設定しても効果がありません。
 
+@node line-spanner-interface を使用する
 @unnumberedsubsubsec @code{line-spanner-interface} を使用する
+@translationof Using the line-spanner-interface
 
 @code{line-spanner-interface} をサポートするオブジェクトには@c
 以下のものがあります:
@@ -3031,8 +3117,8 @@ a \< a a a a \! a a a
 
 @lilypond[relative=2,quote,verbatim]
 e2 \glissando b
-\once \override Glissando #'(bound-details left Y) = #3
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.left.Y = #3
+\once \override Glissando.bound-details.right.Y = #-2
 e2 \glissando b
 @end lilypond
 
@@ -3049,8 +3135,8 @@ e2 \glissando b
 例を示します:
 
 @lilypond[relative=2,ragged-right,verbatim,fragment]
-\override Glissando #'breakable = ##t
-\override Glissando #'(bound-details right-broken Y) = #-3
+\override Glissando.breakable = ##t
+\override Glissando.bound-details.right-broken.Y = #-3
 c1 \glissando \break
 f1
 @end lilypond
@@ -3090,7 +3176,7 @@ f1
 水平スパナに @i{cresc.}, @i{tr} それに他のテキストを配置するために使用されます。
 
 @lilypond[quote,ragged-right,fragment,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
    = \markup { \small \bold Slower }
 c2\startTextSpan b c a\stopTextSpan
 @end lilypond
@@ -3105,15 +3191,11 @@ c2\startTextSpan b c a\stopTextSpan
 記号が上下します:
 
 @lilypond[relative=1,fragment,verbatim]
-\override TextSpanner
-  #'(bound-details left stencil-align-dir-y) = #-2
-\override TextSpanner
-  #'(bound-details right stencil-align-dir-y) = #UP
-
-\override TextSpanner
-  #'(bound-details left text) = #"ggg"
-\override TextSpanner
-  #'(bound-details right text) = #"hhh"
+\override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
+\override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
+
+\override TextSpanner.bound-details.left.text = #"ggg"
+\override TextSpanner.bound-details.right.text = #"hhh"
 c4^\startTextSpan c c c \stopTextSpan
 @end lilypond
 
@@ -3204,9 +3286,9 @@ c2 \< c2 c2
 
 @lilypond[quote,verbatim,relative=1]
 a1 a
-\override Score.BarLine #'stencil = ##f
+\omit Score.BarLine
 a a
-\revert Score.BarLine #'stencil
+\undo \omit Score.BarLine
 a a a
 @end lilypond
 
@@ -3223,7 +3305,7 @@ a a a
 
 @lilypond[quote,verbatim,relative=2]
 a4 a
-\once \override NoteHead #'transparent = ##t
+\once \hide NoteHead
 a a
 @end lilypond
 
@@ -3249,7 +3331,7 @@ a a
 白いオブジェクトの画像が幽霊のように浮かび上がることがあります:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
+\override Staff.Clef.color = #white
 a1
 @end lilypond
 
@@ -3278,8 +3360,8 @@ a1
 音部記号を先に描画させる必要があります:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
-\override Staff.Clef #'layer = #-1
+\override Staff.Clef.color = #white
+\override Staff.Clef.layer = #-1
 a1
 @end lilypond
 
@@ -3356,12 +3438,11 @@ a1
 @item @code{Clef}                @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @item @code{Custos}              @tab @code{Staff}          @tab @code{end-of-line-visible}
 @item @code{DoublePercentRepeat} @tab @code{Voice}          @tab @code{begin-of-line-invisible}
-@c omit KeyCancellation until it can be explained -td
-@c @item @code{KeyCancellation}  @tab ??             @tab @code{begin-of-line-invisible}
+@item @code{KeyCancellation}     @tab @code{Staff}          @tab @code{begin-of-line-invisible}
 @item @code{KeySignature}        @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @c omit LeftEdge until it can be explained -td
 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
-@item @code{OctavateEight}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
+@item @code{ClefModifier}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @item @code{RehearsalMark}       @tab @code{Score}          @tab @code{end-of-line-invisible}
 @item @code{TimeSignature}       @tab @code{Staff}          @tab @code{all-visible}
 
@@ -3374,7 +3455,7 @@ a1
 f4 g a b
 f4 g a b
 % カレント行の最後で小節線を削除します
-\once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
+\once \override Score.BarLine.break-visibility = #'#(#f #t #t)
 \break
 f4 g a b
 f4 g a b
@@ -3396,14 +3477,14 @@ f4 g a b
 描画するには @code{begin-of-line-invisible} を用い、@c
 描画しないのなら @code{all-invisible} を用います。
 @item Key signature -- 以下を参照してください
-@item OctavateEight -- 以下を参照してください
+@item ClefModifier -- 以下を参照してください
 @end itemize
 
 @node 特別な考慮を必要とするもの
 @unnumberedsubsubsec 特別な考慮を必要とするもの
 @translationof Special considerations
 
-@strong{@emph{明示的な変更の後の可視性}}
+@subsubsubheading 明示的な変更の後の可視性
 
 @cindex key signature, visibility following explicit change (明示的な変更の後の調号の可視性)
 @cindex explicitKeySignatureVisibility
@@ -3413,7 +3494,7 @@ f4 g a b
 @code{break-visibility} プロパティが調号の可視性と音部記号の変更を@c
 制御するのは、行の先頭 -- つまり、改行の後 -- においてだけです。@c
 行の途中や終わりでの明示的な調の変更や音部記号の変更の後に出現する@c
-調å\90\88や音部記号の可視性には効果を持ちません。@c
+調å\8f·や音部記号の可視性には効果を持ちません。@c
 以下の例では、@code{all-invisible} がセットされていますが、@c
 B フラット メジャーへの明示的な変更の後に出現する調号は可視のままです。
 
@@ -3422,7 +3503,7 @@ B フラット メジャーへの明示的な変更の後に出現する調号
 \key g \major
 f4 g a b
 % すべての調号を削除しようと試みます
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b
 \break
@@ -3450,16 +3531,16 @@ f4 g a b
 \key g \major
 f4 g a b
 \set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b \break
 f4 g a b
 f4 g a b
 @end lilypond
 
-@strong{@emph{忠告の臨時記号の可視性}}
+@subsubsubheading 前の調をキャンセルする臨時記号の可視性
 
\98\8e示ç\9a\84ã\81ªèª¿ã\81®å¤\89æ\9b´ã\81§æ\8f\8fç\94»ã\81\95ã\82\8cã\82\8bå¿ å\91\8aã\81®臨時記号を削除するには、@c
\98\8e示ç\9a\84ã\81ªèª¿ã\81®å¤\89æ\9b´ã\81§æ\8f\8fç\94»ã\81\95ã\82\8cã\82\8bå\89\8dã\81®èª¿ã\82\92ã\82­ã\83£ã\83³ã\82»ã\83«ã\81\99ã\82\8b臨時記号を削除するには、@c
 @code{Staff} コンテキスト プロパティ @code{printKeyCancellation} に
 @code{#f} をセットします:
 
@@ -3468,7 +3549,7 @@ f4 g a b
 f4 g a b
 \set Staff.explicitKeySignatureVisibility = #all-invisible
 \set Staff.printKeyCancellation = ##f
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b \break
 f4 g a b
@@ -3477,9 +3558,41 @@ f4 g a b
 
 このオーバライドによって、調の変更を示す臨時記号だけが残ります。
 
+調を C@tie{}メジャーや A@tie{}マイナーに変更する時、前の調をキャンセル@c
+する臨時記号は前の調のキャンセルしている @emph{だけ} であることに@c
+注意してください。@c
+そのようなケースでは、@code{printKeyCancellation} を @code{#f} に@c
+設定しても効果はありません:
+
+@lilypond[quote,verbatim,relative=1,ragged-right]
+\key g \major
+f4 g a b
+\set Staff.explicitKeySignatureVisibility = #all-invisible
+\set Staff.printKeyCancellation = ##f
+\key c \major
+f4 g a b \break
+f4 g a b
+f4 g a b
+@end lilypond
+
+調を C@tie{}メジャーや A@tie{}マイナーに変更する場合に、@c
+前の調をキャンセルする臨時記号を消すには、@code{KeyCancellation}
+グラフィカル オブジェクトの可視性をオーバライドします:
+
+@lilypond[quote,verbatim,relative=1,ragged-right]
+\key g \major
+f4 g a b
+\set Staff.explicitKeySignatureVisibility = #all-invisible
+\override Staff.KeyCancellation.break-visibility = #all-invisible
+\key c \major
+f4 g a b \break
+f4 g a b
+f4 g a b
+@end lilypond
+
 @c TODO Add visibility of cautionary accidentals before notes
 
-@strong{@emph{自動小節線}}
+@subsubsubheading 自動小節線
 
 @cindex automaticBars
 @cindex bar lines, suppressing (小節線を消す)
@@ -3497,18 +3610,18 @@ f4 g a b
 
 @c TODO Add example
 
-@strong{@emph{オクターブ移調付きの音部記号}}
+@subsubsubheading オクターブ移調付きの音部記号
 
-@cindex octavated clefs, visibility of (オクターブ移調付きの音部記号の可視性)
-@cindex visibility of octavated clefs (オクターブ移調付きの音部記号の可視性)
-@cindex clefs, visibility of octavation (オクターブ移調付きの音部記号の可視性)
+@cindex transposed clefs, visibility of (オクターブ移調付きの音部記号の可視性)
+@cindex visibility of transposed clefs (オクターブ移調付きの音部記号の可視性)
+@cindex clefs, visibility of transposition (オクターブ移調付きの音部記号の可視性)
 
 オクターブ移調付きの音部記号上の小さなオクターブ記号は
-@code{OctavateEight} レイアウト オブジェクトによって作り出されます。@c
+@code{ClefModifier} レイアウト オブジェクトによって作り出されます。@c
 このオブジェクトの可視性は
 @code{Clef} オブジェクトの可視性とは独立して制御されます。@c
 そのため、各行の先頭においてそのような音部記号を完全に消そうとするなら、@c
-@code{Clef} オブジェクトと @code{OctavateEight} オブジェクトの両方に対して@c
+@code{Clef} オブジェクトと @code{ClefModifier} オブジェクトの両方に対して@c
 必要な @code{break-visibility} のオーバライドを行う必要があります。
 
 明示的な音部記号の変更では、@c
@@ -3540,13 +3653,13 @@ f4 g a b
 
 @lilypond[relative=2,ragged-right,verbatim,fragment]
 d2 \glissando d'2
-\once \override Glissando #'style = #'dashed-line
+\once \override Glissando.style = #'dashed-line
 d,2 \glissando d'2
-\override Glissando #'style = #'dotted-line
+\override Glissando.style = #'dotted-line
 d,2 \glissando d'2
-\override Glissando #'style = #'zigzag
+\override Glissando.style = #'zigzag
 d,2 \glissando d'2
-\override Glissando #'style = #'trill
+\override Glissando.style = #'trill
 d,2 \glissando d'2
 @end lilypond
 
@@ -3557,7 +3670,7 @@ d,2 \glissando d'2
 @c TODO Complete
 @lilypond[relative=2,ragged-right,verbatim,quote]
 e2 \glissando f
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.right.Y = #-2
 e2 \glissando f
 @end lilypond
 
@@ -3610,7 +3723,7 @@ e2 \glissando f
 
 @lilypond[quote,verbatim,relative=1]
 g4\< e' d' f\!
-\override Hairpin #'rotation = #'(20 -1 0)
+\override Hairpin.rotation = #'(20 -1 0)
 g,,4\< e' d' f\!
 @end lilypond
 
@@ -3630,7 +3743,7 @@ g,,4\< e' d' f\!
 そうしなければテキストのいくつかは高く押し上げられてしまいます。
 
 @lilypond[quote,verbatim,relative=1]
-\override TextScript #'outside-staff-priority = ##f
+\override TextScript.outside-staff-priority = ##f
 g4^\markup { \rotate #30 "a G" }
 b^\markup { \rotate #30 "a B" }
 des^\markup { \rotate #30 "a D-Flat" }
@@ -3744,12 +3857,12 @@ fis^\markup { \rotate #30 "an F-Sharp" }
 @lilypond[verbatim,quote,relative=2]
 a-3
 a
--\tweak #'X-offset #0
--\tweak #'Y-offset #0
+-\tweak X-offset #0
+-\tweak Y-offset #0
 -3
 a
--\tweak #'X-offset #-1
--\tweak #'Y-offset #1
+-\tweak X-offset #-1
+-\tweak Y-offset #1
 -3
 @end lilypond
 
@@ -3805,7 +3918,7 @@ a
 @unnumberedsubsubsec @code{self-alignment-interface} を使用する
 @translationof Using the @code{self-alignment-interface}
 
-@emph{オブジェクトを自動的に水平方向に揃える}
+@subsubsubheading オブジェクトを自動的に水平方向に揃える
 
 @code{self-alignment-interface} をサポートするオブジェクトの水平方向の揃えは、@c
 @code{self-alignment-X} プロパティの値によって制御され、@c
 
 @lilypond[quote,verbatim,relative=1]
 a'
--\tweak #'self-alignment-X #-1
+-\tweak self-alignment-X #-1
 ^"left-aligned"
--\tweak #'self-alignment-X #0
+-\tweak self-alignment-X #0
 ^"center-aligned"
--\tweak #'self-alignment-X #RIGHT
+-\tweak self-alignment-X #RIGHT
 ^"right-aligned"
--\tweak #'self-alignment-X #-2.5
+-\tweak self-alignment-X #-2.5
 ^"aligned further to the right"
 @end lilypond
 
-@emph{オブジェクトを自動的に垂直方向に揃える}
+@subsubsubheading オブジェクトを自動的に垂直方向に揃える
 
 オブジェクトの @code{Y-offset} プロパティに
 @code{ly:self-alignment-interface::y-aligned-on-self} がセットされていれば、@c
@@ -3861,7 +3974,7 @@ a'
 記号 @code{DOWN}, @code{CENTER}, それに @code{UP} は@c
 それぞれ @w{@code{-1}, @code{0}, それに @code{1}} に対応します。
 
-@emph{オブジェクトを自動的に両方向に揃える}
+@subsubsubheading オブジェクトを自動的に両方向に揃える
 
 @code{X-offset} と @code{Y-offset} の両方の設定を行うことで、@c
 オブジェクトの水平方向と垂直方向の揃えを同時に行うことができます。
@@ -3871,9 +3984,9 @@ a'
 @c KEEP LY
 @lilypond[quote,verbatim,relative=2]
 a
--\tweak #'self-alignment-X #0.5  % 左方向に移動させます
--\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
--\tweak #'self-alignment-Y #-1  % 上方向に移動させます
+-\tweak self-alignment-X #0.5  % 左方向に移動させます
+-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
+-\tweak self-alignment-Y #-1  % 上方向に移動させます
 -3  % 3 の指
 @end lilypond
 
@@ -3926,20 +4039,20 @@ example shows the difference:
 @c KEEP LY
 @lilypond[verbatim,quote,relative=1]
 % リハーサル記号は音部記号の上に中央揃えされます
-\override Score.RehearsalMark #'break-align-symbols = #'(clef)
+\override Score.RehearsalMark.break-align-symbols = #'(clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
 % リハーサル記号は拍子記号の上に中央揃えされます
-\override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
 \key a \major
 \clef treble
 \time 3/4
 \mark "↓"
 e2.
 % リハーサル記号はブレス記号の上に中央揃えされます
-\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
+\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
 \key a \major
 \clef treble
 \time 4/4
@@ -3960,14 +4073,14 @@ e1
 @c KEEP LY
 @lilypond[verbatim,quote,relative=1]
 % リハーサル記号は調号の上に中央揃えされます
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
 % リハーサル記号は音部記号の上に中央揃えされます
 \set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \minor
 \clef bass
 \mark "↓"
@@ -3975,7 +4088,7 @@ gis,,1
 % リハーサル記号は小節線の上に中央揃えされます
 \set Staff.explicitKeySignatureVisibility = #all-invisible
 \set Staff.explicitClefVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef treble
 \mark "↓"
@@ -3989,19 +4102,19 @@ e''1
 @c KEEP LY
 @lilypond[verbatim,quote,relative=1]
 % RehearsalMark は KeySignature の上に中央揃えされます
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
 \key a \major
 \clef treble
 \time 4/4
 \mark "↓"
 e1
 % RehearsalMark は KeySignature の左端に揃えられます
-\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
+\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
 \mark "↓"
 \key a \major
 e
 % RehearsalMark は KeySignature の右端に揃えられます
-\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
+\once \override Score.KeySignature.break-align-anchor-alignment = #RIGHT
 \key a \major
 \mark "↓"
 e
 @lilypond[verbatim,quote,relative=1]
 % リハーサル記号は調号の左端に揃えられて
 % さらに 3.5 譜スペース右にずらされます
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
-\once \override Score.KeySignature #'break-align-anchor = #3.5
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
+\once \override Score.KeySignature.break-align-anchor = #3.5
 \key a \major
 \mark "↓"
 e1
 % リハーサル記号は調号の左端に揃えられて
 % さらに 2 譜スペース左にずらされます
-\once \override Score.KeySignature #'break-align-anchor = #-2
+\once \override Score.KeySignature.break-align-anchor = #-2
 \key a \major
 \mark "↓"
 e1
@@ -4074,8 +4187,8 @@ Staff, Lyrics 等はそれ自体でそれぞれに VerticalAxisGroup を持ち
 
 @lilypond[verbatim,quote]
 XinO = {
-  \once \override NoteHead  #'stencil = #ly:text-interface::print
-  \once \override NoteHead #'text = \markup {
+  \once \override NoteHead.stencil = #ly:text-interface::print
+  \once \override NoteHead.text = \markup {
     \combine
       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
       \musicglyph #"noteheads.s2cross"
@@ -4119,10 +4232,24 @@ Feta フォントに含まれる任意の図柄を提供することができま
 @cindex Bézier curves (ベジエ曲線)
 @cindex Bézier control points (ベジエ曲線の制御ポイント)
 
-タイ、スラー、それにフレージング スラーは 3 次のベジエ曲線として描かれます。@c
-自動的に算出されるタイあるいはスラーの形状が最適ではない場合、@c
-3 次ベジエ曲線を定義するのに必要な 4 つの制御ポイントを@c
-明示的に指定することによって、形状を変更することができます。
+@code{Tie}, @code{Slur}, @code{PhrasingSlur}, @code{LaissezVibrerTie},
+それに @code{RepeatTie} はすべて 3 次のベジエ曲線として描かれます。@c
+自動的に算出されるタイやスラーの形状が最適ではない場合、以下の 2 つの@c
+方法を用いて手動で形状を変更することができます:@c
+
+@enumerate a
+@item
+自動的に算出されるベジエ曲線の制御ポイントの移動させる
+
+@item
+求める曲線を定義するのに必要な 4 つの制御ポイントの位置を明示的に指定する
+@end enumerate
+
+2 つの方法について以下で説明します。@c
+曲線の調節がわずかであれば、最初の方法が適しています。@c
+2 番目の方法は単一の音符に関連付けられる曲線を作り出す場合に適しています。
+
+@subsubsubheading 3 次ベジエ曲線
 
 3 次あるいは 3 乗のベジエ曲線は、4 つの制御ポイントによって定義されます。@c
 1 番目と 4 番目の制御ポイントは曲線の始点と終点になります。@c
@@ -4134,10 +4261,16 @@ Web でベジエ曲線が描かれる様子を示すアニメーションを@c
 徐々に 3 番目の制御ポイントの方へ向きを変えながら
 4 番目の制御ポイントの方へ向かい続け、@c
 3 番目の制御ポイントから 4 番目の制御ポイントに到達します。@c
-ベジエ曲線は 4 つの制御ポイントからなる四角形の中に納まります。
+ベジエ曲線は 4 つの制御ポイントからなる四角形の中に納まります。@c
+制御ポイントの平行移動、回転、伸縮はすべて同じ操作です。
+
+@subsubsubheading 制御ポイントを移動させる
 
-ここで、@c
-タイが最適化されず、@code{\tieDown} が役に立たないケースを例として挙げます。
+@cindex shaping slurs and ties (スラーとタイの形状)
+@funindex \shape
+
+以下の例では、タイの自動配置が最適ではなく、@code{\tieDown} も役に@c
+立ちません。
 
 @lilypond[verbatim,quote,relative=1]
 <<
@@ -4147,41 +4280,147 @@ Web でベジエ曲線が描かれる様子を示すアニメーションを@c
 >>
 @end lilypond
 
-以下のようにタイの制御ポイントを手動で変更することにより、@c
-このタイの形状を改善することができます。
-
-ベジエ制御ポイントの座標は譜スペースを単位として指定されます。@c
-X@tie{}座標はそのタイあるいはスラーを取り付けられる音符の参照ポイントからの@c
-相対座標であり、Y@tie{}座標は譜の中央線からの相対座標です。@c
-制御ポイント座標は 10 進数 (実数) のペアを 4 つ持つリストとして設定されます。@c
-最適な制御ポイントを決定するための手順は、
-2 つの終点の座標を見積もり、それから 2 つの中間ポイントを推測することで、@c
-制御ポイントの座標を決定します。@c
-最適値はトライ&エラーで見つけ出します。
-
-左右対称の曲線にするには制御ポイントを左右対称に配置する必要があるということを@c
-覚えておくと役に立ちます。@c
-また、ベジエ曲線の制御ポイントに平行移動、回転、それに拡大縮小などの変換を@c
-適用することにより、@c
-その曲線を変換できるという特性があるとも覚えておいてください。
-
-上記の実例として、以下の例のオーバライドで満足のいくタイが得られています。@c
-オーバライドを配置する場所
--- タイ (あるいはスラー) が開始する音符の直前に配置する必要があります --
-に注意してください。
+@code{\shape} でタイの制御ポイントを調節することで衝突を避けることが@c
+できます。
+
+@code{\shape} の構文は以下の通りです:
+
+@example
+[-]@code{\shape} @var{displacements} @var{item}
+@end example
+
+これは @var{item} の制御ポイントを @var{displacements} だけ移動させます。@c
+引数 @var{displacements} は数のペアのリスト、あるいはそのようなリストの@c
+リストです。@c
+ペアの要素は制御ポイントの座標の移動量を表しています。@c
+@var{item} が文字列の場合、指定されたグラフィカル オブジェクト タイプ@c
+に @code{\once \override} で適用されます。@c
+@var{item} が音楽表記の場合、その音楽表記に調節が適用されます。
+
+言い換えると、@code{\shape} 関数は、引数 @var{item} が @qq{Slur}
+のようなグラフィカル オブジェクト名であるか @qq{(} のような音楽表記@c
+であるかによって、@code{\once \override} コマンドあるいは @code{\tweak}
+コマンドのどちらにでもなり得ます。@c
+引数 @var{displacements} は 4 つの (dx . dy) ペアのリストで 4 つの@c
+制御ポイントの移動を指定します -- 値の単位は譜スペースです。
+(曲線が複数のセグメントを持つ場合、引数 @var{displacements} は 4 つの@c
+ペアを持つリストのリストになります。)
+
+@code{\tweak} 形式で用いる場合にのみ、先頭にハイフン @code{-} を付ける@c
+必要があrます。
+
+それでは、上記の例に @code{\once \override} 形式の @code{\shape} を@c
+使ってタイを 0.5 譜スペースだけ上に移動させてみましょう:
+
+@lilypond[verbatim,quote,relative=1]
+<<
+  {
+    \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
+    e1~ e
+  }
+\\
+  { r4 <g c,> <g c,> <g c,> }
+>>
+@end lilypond
+
+タイの位置は改善されましたが、中央部分をもっと持ち上げるべきです。@c
+以下の例で @code{\tweak} 形式でそれを行っています:
 
 @lilypond[verbatim,quote,relative=1]
 <<
   {
-    \once \override Tie
-      #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
-     e1 ~ e
+    e1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e
   }
 \\
   { r4 <g c,> <g c,> <g c,> }
 >>
 @end lilypond
 
+同じ方法で制御ポイントを水平方向に移動させることもできて、同じ音楽@c
+タイミングで発生する 2 つの曲線をうまく配置することができます:
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+c8(\( a) a'4 e c\)
+\shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
+\shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
+c8(\( a) a'4 e c\)
+@end lilypond
+
+@code{\shape} 関数は改行を跨ぐ曲線の制御ポイントを移動させることも@c
+できます。@c
+分割される曲線それぞれにリストを与えて制御ポイントを移動させます。@c
+片方の曲線は変更する必要がない場合、空のリストを渡します。@c
+以下の例では、1 つのスラーが改行で 2 つに分割されています:
+
+@lilypond[verbatim,quote,ragged-right,relative=1]
+c4( f g c
+\break
+d,4 c' f, c)
+@end lilypond
+
+分割されたスラーの形状を変更することで、改行を跨いで続くスラーである@c
+ことがわかりやすくなります:
+
+@c KEEP LY
+@lilypond[verbatim,quote,ragged-right,relative=1]
+% 片方のスラーを変更する必要がない場合、
+% () を ((0 . 0) (0 . 0) (0 . 0) (0 . 0)) の短縮形として使うことができます
+\shape #'(
+           (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
+           ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
+         ) Slur
+c4( f g c
+\break
+d,4 c' f, c)
+@end lilypond
+
+S 字曲線が求められた場合は、常に制御ポイントを手動で調節する必要があります
+--- LilyPond が自動的にそのような形状を選択することはありません。
+
+@lilypond[verbatim,quote,relative=2]
+c8( e b-> f d' a e-> g)
+\shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
+c8\( e b-> f d' a e-> g\)
+@end lilypond
+
+@subsubsubheading 制御ポイントの位置を明示的に指定する
+
+ベジエ曲線の制御ポイントの座標を指定します -- 単位は譜スペースです。@c
+X@tie{}座標はタイあるいはスラーを取り付ける音符の参照ポイントからの@c
+相対位置で、X@tie{}座標は譜の中央線からの相対位置です。@c
+制御ポイントの座標をリストで指定します -- リストは数のペアを 4 つ持ちます。@c
+両端の座標を推測して、それから 2 つ中間点の座標を推測します。@c
+最適値はトライ&エラーで見つけます。@c
+音楽やレイアウトに変更が加えられた場合、手動で値を調節する必要がある@c
+ということに注意してください。
+
+制御ポイントを移動させるよりも、位置を明示的に指定する方が望ましい@c
+シチュエーションの 1 つは、単一の音符に関連付けられる曲線の場合です。@c
+ここで、そのような例を示します。@c
+繰り返しの差し替え部分まで延びるスラーを表示する方法を示しています。
+
+@c KEEP LY
+@lilypond[verbatim,quote,relative=2]
+c1
+\repeat volta 3 { c4 d( e f }
+\alternative {
+  { g2) d }
+  {
+    g2
+    % スラーを作成して、新しい位置に移動させます
+    % <> はスラーを終わらせるための空の和音です
+    -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
+    f,
+  }
+  {
+    e'2
+    % スラーを作成して、新しい位置に移動させます
+    -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
+    f,
+  }
+}
+@end lilypond
+
 @knownissues
 同じ音楽タイミングに複数のタイあるいはスラーが存在する場合、@c
 @code{control-points} プロパティを変更しても@c
@@ -4194,17 +4433,17 @@ X@tie{}座標はそのタイあるいはスラーを取り付けられる音符
 内部リファレンス:
 @rinternals{TieColumn}
 
+
+@node unpure-pure コンテナ
+@subsection unpure-pure コンテナ
+@translationof Unpure-pure containers
+
 @cindex Scheme, pure containers (Scheme pure コンテナ)
 @cindex Scheme, unpure containers (Scheme unpure コンテナ)
 @cindex pure containers, Scheme (Scheme pure コンテナ)
 @cindex unpure containers, Scheme (Scheme unpure コンテナ)
 @cindex horizontal spacing, overriding (水平方向のスペースを上書きする)
 
-
-@node unpure-pure コンテナ
-@subsection unpure-pure コンテナ
-@translationof Unpure-pure containers
-
 unpure-pure コンテナは @emph{Y-axis} スペース - 特に @code{Y-offset} と
 @code{Y-extent} - の算出を文字 (つまり、数字やペア) ではなく、Scheme 関数で@c
 上書きする際に有用です。
@@ -4264,12 +4503,12 @@ starting and ending column.
                               '(-0.5 . 0.5)))))
 
 squareLineCircleSpace = {
-  \override NoteHead #'stencil = #square-line-circle-space
+  \override NoteHead.stencil = #square-line-circle-space
 }
 
 smartSquareLineCircleSpace = {
   \squareLineCircleSpace
-  \override NoteHead #'Y-extent =
+  \override NoteHead.Y-extent =
    #(ly:make-unpure-pure-container
       ly:grob::stencil-height
       (lambda (grob start end) (ly:grob::stencil-height grob)))
@@ -4278,9 +4517,9 @@ smartSquareLineCircleSpace = {
 \new Voice \with { \remove "Stem_engraver" }
 \relative c'' {
   \squareLineCircleSpace
-  cis4 ces cisis c
+  cis4 ces disis d
   \smartSquareLineCircleSpace
-  cis4 ces cisis c
+  cis4 ces disis d
 }
 @end lilypond
 
@@ -4402,7 +4641,7 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = $padding
+     \once \override TextScript.padding = $padding
    #})
 
 \relative c''' {
@@ -4422,10 +4661,10 @@ custosNote =
      (parser location note)
      (ly:music?)
    #{
-     \tweak NoteHead #'stencil #ly:text-interface::print
-     \tweak NoteHead #'text
+     \tweak NoteHead.stencil #ly:text-interface::print
+     \tweak NoteHead.text
         \markup \musicglyph #"custodes.mensural.u0"
-     \tweak Stem #'stencil ##f
+     \tweak Stem.stencil ##f
      #note
    #})
 
@@ -4440,7 +4679,7 @@ tempoPadded =
      (parser location padding tempotext)
      (number? markup?)
    #{
-     \once \override Score.MetronomeMark #'padding = $padding
+     \once \override Score.MetronomeMark.padding = $padding
      \tempo \markup { \bold #tempotext }
    #})
 
index 4bf189266029444f1cfed08f399d9648e1a4deb8..cefecafef0d96936f16ff53027da5049176d9490 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: 45329bd378eedfebca34c746fff9e53b46cf2fe5
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 
 @c Translators: Yoshiki Sawada
@@ -31,9 +31,9 @@
 @item @code{1 2 8 16}
 @tab 演奏時間
 @tab
-@lilypond[fragment,relative=2,notime]
+@lilypond[relative=2,notime]
 \set Staff.autoBeaming = ##f
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 c1 c2 c8 c16
 @end lilypond
 
@@ -41,14 +41,14 @@ c1 c2 c8 c16
 @tab 増音の付点
 @tab
 @lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 c4. c4..
 @end lilypond
 
 @item @code{c d e f g a b }
 @tab 音階
 @tab
-@lilypond[fragment,relative=1,notime]
+@lilypond[relative=1,notime]
 c d e f g a b
 @end lilypond
 
@@ -56,14 +56,14 @@ c d e f g a b
 @item @code{fis bes}
 @tab 変音
 @tab
-@lilypond[fragment,relative=1,notime]
+@lilypond[relative=1,notime]
 fis bes
 @end lilypond
 
 @item @code{\clef treble \clef bass }
 @tab 音部記号
 @tab
-@lilypond[fragment,notime]
+@lilypond[relative=1,notime]
 \clef treble
 s4_" "
 \clef bass
@@ -73,8 +73,8 @@ s4_" "
 @item @code{\time 3/4 \time 4/4 }
 @tab 拍子記号
 @tab
-@lilypond[fragment]
-\override Staff.Clef #'transparent = ##t
+@lilypond[relative=1]
+\override Staff.Clef.stencil = #empty-stencil
 \time 3/4
 s4_" "
 \time 4/4
@@ -85,15 +85,15 @@ s16_" "
 @item @code{r4 r8}
 @tab 休符
 @tab
-@lilypond[relative=2,notime,fragment]
-\override Staff.Clef #'break-visibility = #all-invisible
+@lilypond[relative=2,notime]
+\override Staff.Clef.break-visibility = #all-invisible
 r4 r8
 @end lilypond
 
 @item @code{d ~ d}
 @tab タイ
 @tab
-@lilypond[relative=2,notime,fragment]
+@lilypond[relative=2,notime]
 \set Score.timing = ##f
 \set Staff.autoBeaming = ##f
 d ~ d
@@ -112,7 +112,7 @@ c128
 @item @var{note}@code{'}
 @tab 1 オクターブ上げる
 @tab
-@lilypond[relative=2,notime,fragment]
+@lilypond[relative=2,notime]
 \set Score.timing = ##f
 \set Staff.autoBeaming = ##f
 a a'
@@ -121,7 +121,7 @@ a a'
 @item @var{note}@code{,}
 @tab 1 オクターブ下げる
 @tab
-@lilypond[relative=2,notime,fragment]
+@lilypond[relative=2,notime]
 \set Score.timing = ##f
 \set Staff.autoBeaming = ##f
 c c,
@@ -131,7 +131,7 @@ c c,
 @item @code{c( d e)}
 @tab スラー
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \set Score.timing = ##f
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 \set Staff.autoBeaming = ##f
@@ -142,7 +142,7 @@ c( d e)
 @item @code{c\( c( d) e\)}
 @tab プレージング スラー
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \set Score.timing = ##f
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 \set Staff.autoBeaming = ##f
@@ -153,7 +153,7 @@ c\( c( d) e\)
 @item @code{a8[ b]}
 @tab 連桁
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \set Score.timing = ##f
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 \set Staff.autoBeaming = ##f
@@ -164,14 +164,14 @@ a8-[ b-]
 @item @code{<< \new Staff ... >>}
 @tab 複数の譜
 @tab
-@lilypond[fragment]
+@lilypond[relative=1]
 << \new Staff {
      \set Staff.implicitTimeSignatureVisibility = #all-invisible
-     c'1
+     c1
    }
    \new Staff {
      \set Staff.implicitTimeSignatureVisibility = #all-invisible
-     c'1
+     c1
    } >>
 @end lilypond
 
@@ -179,7 +179,7 @@ a8-[ b-]
 @item @code{c-> c-.}
 @tab アーティキュレーション
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 c-> c-.
 @end lilypond
@@ -188,7 +188,7 @@ c-> c-.
 @item @code{c2\mf c\sfz}
 @tab 強弱記号
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 c2\mf c\sfz
 @end lilypond
@@ -197,7 +197,7 @@ c2\mf c\sfz
 @item @code{a\< a a\!}
 @tab クレッシェンド
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \set Score.timing = ##f
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 \set Staff.autoBeaming = ##f
@@ -207,7 +207,7 @@ a\< a a\!
 @item @code{a\> a a\!}
 @tab デクレッシェンド
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \set Score.timing = ##f
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 \set Staff.autoBeaming = ##f
@@ -218,7 +218,7 @@ a\> a a\!
 @item @code{< >}
 @tab 和音
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 <c e>
 @end lilypond
@@ -227,25 +227,25 @@ a\> a a\!
 @item @code{\partial 8}
 @tab 上拍
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \partial 8
 f8 c2 d e
 @end lilypond
 
 
-@item @code{\times 2/3 @{f g a@}}
+@item @code{\tuplet 3/2 @{f g a@}}
 @tab 3 連符
 @tab
-@lilypond[relative=1,fragment]
+@lilypond[relative=1]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
-\times 2/3 { f8 g a }
+\tuplet 3/2 { f8 g a }
 @end lilypond
 
 
 @item @code{\grace}
 @tab 装飾小音符
 @tab
-@lilypond[relative=2,fragment]
+@lilypond[relative=2]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 \context Voice { \grace b16 c4 }
 @end lilypond
@@ -259,14 +259,14 @@ twinkle
 @item @code{\new Lyrics}
 @tab 歌詞を譜刻する
 @tab
-@lilypond[fragment]
+@lilypond[relative=1]
 \new Lyrics \lyricmode { twinkle }
 @end lilypond
 
 @item @code{twin -- kle}
 @tab 歌詞のハイフン
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 <<
    { g'1 g }
@@ -277,7 +277,7 @@ twinkle
 @item @code{\chordmode @{ c:dim f:maj7 @}}
 @tab コード
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 \chordmode { c:dim f:maj7 }
 @end lilypond
@@ -285,14 +285,14 @@ twinkle
 @item @code{\context ChordNames}
 @tab コード ネームを譜刻する
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \chords { c:dim f:maj7 }
 @end lilypond
 
 @item @code{<<@{e f@} \\ @{c d@}>>}
 @tab 多声
 @tab
-@lilypond[fragment,relative=2]
+@lilypond[relative=2]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
 \context Staff <<{e f} \\ {c d}>>
 @end lilypond
index c878007780ecb56979852030392b8e780441cfde..c7a7bc5a1b36a6361234b2f6827d894723b08989 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: cc3b9e1430f4cc9c54da7252e504f3d274a7ea17
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1
 }
 @end lilypond
@@ -191,7 +191,7 @@ m, m7
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:m c:m7
 }
 @end lilypond
@@ -204,7 +204,7 @@ dim, dim7
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:dim c:dim7
 }
 @end lilypond
@@ -216,7 +216,7 @@ aug
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:aug
 }
 @end lilypond
@@ -230,7 +230,7 @@ maj, maj7
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:maj c:maj7
 }
 @end lilypond
@@ -1185,46 +1185,3 @@ example, the vertical spacing of the figures may be set with
   }
 >>
 @end lilypond
-
-@c 保留
-継続線を用いた場合、@c
-通奏低音内での位置が異なる同じ番号の通奏低音が隣接すると、@c
-位置が反転する可能性があります。
-(訳者: 2 つ目の音符の通奏低音で 4 と 5 が入れ替わる例を示したいのだと@c
-思いますが、うまくいっていないようです。@c
-解決の例もコマンドの位置が違うと思います。)
-
-@ignore
-When using extender lines, adjacent figures with the same number in
-a different figure location can cause the figure positions to invert.
-@end ignore
-
-@lilypond[verbatim,ragged-right,quote,relative=1]
-<<
-  { fis4 g g, e' }
-  \figures {
-    \bassFigureExtendersOn
-    <6 5>4 <5\! 4> < 5 _!> <6>
-  }
->>
-@end lilypond
-
-この問題を回避するには、継続線を始める通奏低音の後で継続線を On にして、@c
-継続線の終わりで Off にします。
-
-@ignore
-To avoid this problem, simply turn on extenders after the figure that
-begins the extender line and turn them off at the end of the extender line.
-@end ignore
-
-@lilypond[verbatim,ragged-right,quote,relative=1]
-<<
-  { fis4 g g, e' }
-  \figures {
-    <6 5>4 <5 4>
-    \bassFigureExtendersOn
-    < 5 _!>4 <6>
-    \bassFigureExtendersOff
-  }
->>
-@end lilypond
index 8f2cf1cf02a26d8b2dfa46ecd0f5d1fa09f513af..6f79e1a415371a00a98a6050aa516b5b7fcc90e5 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: c19213c8cef68c0f2d8903cff16e0772acc9411a
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
index cea3f2159f8eb0d486753954d80f9f436c514543..084b00f5796212a5893ce26da4b1ce374574957e 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 
 @c Translators: Yoshiki Sawada
@@ -106,11 +106,11 @@ Scheme 関数 @code{magstep} は @code{font-size} 数をスケーリング フ
 @lilypond[verbatim,quote,relative=2]
 \set fontSize = #3
 c4.-> d8---3
-\override NoteHead #'font-size = #-4
+\override NoteHead.font-size = #-4
 c4.-> d8---3
-\override Script #'font-size = #2
+\override Script.font-size = #2
 c4.-> d8---3
-\override Stem #'font-size = #-5
+\override Stem.font-size = #-5
 c4.-> d8---3
 @end lilypond
 
@@ -165,7 +165,7 @@ c4.-> d8---3
 c4-1 d-2 f-4 e-3
 @end lilypond
 
-指の変更のためにマークアップ テキストが使用されることもあります。
\8c\87ã\81®å¤\89æ\9b´ã\81®ã\81\9fã\82\81ã\81«ã\83\9eã\83¼ã\82¯ã\82¢ã\83\83ã\83\97 ã\83\86ã\82­ã\82¹ã\83\88ã\82\84æ\96\87å­\97å\88\97ã\81\8c使ç\94¨ã\81\95ã\82\8cã\82\8bã\81\93ã\81¨ã\82\82ã\81\82ã\82\8aã\81¾ã\81\99ã\80\82
 
 @lilypond[verbatim,quote,relative=2]
 c4-1 d-2 f-4 e-3
@@ -174,7 +174,7 @@ c4-1 d-2 f-4 e-3
 指の入れ替えのためにマークアップ テキストを使うこともできます。
 
 @lilypond[verbatim,quote,relative=2]
-c4-1 d-2 f-4 c^\markup { \finger "2 - 3" }
+c4-1 d-2 f\finger \markup \tied-lyric #"4~3" c\finger "2 - 3"
 @end lilypond
 
 @cindex thumb-script (サム-スクリプト)
@@ -230,10 +230,6 @@ c4-1 d-2 f-4 c^\markup { \finger "2 - 3" }
 @rinternals{New_fingering_engraver},
 @rinternals{Fingering}
 
-@knownissues
-デフォルトでは、@samp{@var{note}-@var{digit}} は 9 よりも大きな数は@c
-サポートしません。
-
 
 @node 隠された音符
 @unnumberedsubsubsec 隠された音符
@@ -290,7 +286,7 @@ e8(\p f g a)--
 Notation Reference:
 @ref{不可視の休符},
 @ref{Visibility of objects},
-@ref{譜を隠す}
+@ref{Hiding staves}
 
 コード断片集:
 @rlsr{Editorial annotations}
@@ -324,11 +320,11 @@ Notation Reference:
 有効なカラー名は @ref{List of colors} でリストアップされています。
 
 @lilypond[verbatim,quote,relative=2]
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 c4 c
-\override NoteHead #'color = #(x11-color 'LimeGreen)
+\override NoteHead.color = #(x11-color 'LimeGreen)
 d
-\override Stem #'color = #blue
+\override Stem.color = #blue
 e
 @end lilypond
 
@@ -347,20 +343,20 @@ X11 のために定義された色の全範囲にアクセスすることがで
 
 @c KEEP LY
 @lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
 \set Staff.instrumentName = \markup {
   \with-color #(x11-color 'navy) "Clarinet"
 }
 
 gis8 a
-\override Beam #'color = #(x11-color "medium turquoise")
+\override Beam.color = #(x11-color "medium turquoise")
 gis a
-\override Accidental #'color = #(x11-color 'DarkRed)
+\override Accidental.color = #(x11-color 'DarkRed)
 gis a
-\override NoteHead #'color = #(x11-color "LimeGreen")
+\override NoteHead.color = #(x11-color "LimeGreen")
 gis a
 % 以下は意図的に意味をなさない色を指定しています。符幹が黒のままであることに注意してください
-\override Stem #'color = #(x11-color 'Boggle)
+\override Stem.color = #(x11-color 'Boggle)
 b2 cis
 @end lilypond
 
@@ -374,16 +370,16 @@ Scheme 関数 @code{rgb-color} を用いることによって、@c
 厳密な RGB カラーを指定することができます。
 
 @lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
 \set Staff.instrumentName = \markup {
   \with-color #(x11-color 'navy) "Clarinet"
 }
 
-\override Stem #'color = #(rgb-color 0 0 0)
+\override Stem.color = #(rgb-color 0 0 0)
 gis8 a
-\override Stem #'color = #(rgb-color 1 1 1)
+\override Stem.color = #(rgb-color 1 1 1)
 gis8 a
-\override Stem #'color = #(rgb-color 0 0 0.5)
+\override Stem.color = #(rgb-color 0 0 0.5)
 gis4 a
 @end lilypond
 
@@ -634,7 +630,7 @@ altered:
   \context {
     \Staff
     \consists "Grid_point_engraver"
-    gridInterval = #(ly:make-moment 1 4)
+    gridInterval = #(ly:make-moment 1/4)
   }
   \context {
     \Score
index eae0922e427858239084ed75270ea435e0124cd9..97973e4d2b0087726716eaa972e4f5946e2077a4 100644 (file)
@@ -1,12 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: cc3b9e1430f4cc9c54da7252e504f3d274a7ea17
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..@end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.25"
 
 
 @c Translators: Yoshiki Sawada
@@ -161,7 +161,7 @@ c1\fermata
 これらの出力は以下のように表示されます:
 
 @lilypond[verbatim,quote,relative=2]
-c4-^  c-+  c--  c-|
+c4-^  c-+  c--  c-!
 c4->  c-.  c2-_
 @end lilypond
 
@@ -180,8 +180,8 @@ c4->  c-.  c2-_
 このコマンドは @code{MultiMeasureRestText} オブジェクトを作成します。
 
 @lilypond[verbatim,quote,relative=2]
-\override Script #'color = #red
-\override MultiMeasureRestText #'color = #blue
+\override Script.color = #red
+\override MultiMeasureRestText.color = #blue
 a2\fermata r\fermata
 R1\fermataMarkup
 @end lilypond
@@ -620,6 +620,20 @@ moltoF = #(make-dynamic-script
 }
 @end lilypond
 
+強弱記号を音符に中央揃えさせるのではなく、左揃えさせるには、@c
+@code{\tweak} を使います:
+
+@lilypond[verbatim,quote]
+moltoF = \tweak DynamicText.self-alignment-X #LEFT
+         #(make-dynamic-script
+            (markup #:normal-text "molto"
+                    #:dynamic "f"))
+\relative c' {
+  <d e>16 <d e>
+  <d e>2..\moltoF <d e>1
+}
+@end lilypond
+
 マークアップ モードでのフォント設定は
 @ref{Selecting font and font size} で記述されています。
 
@@ -975,6 +989,12 @@ divisiones (ディビジョン: 区切り) がサポートされています。@
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {changing-the-breath-mark-symbol.ly}
 
+@c 未訳
+@cindex tick mark
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{using-a-tick-as-the-breath-mark-symbol.ly}
+
 @c 未訳
 @cindex caesura
 @cindex railroad tracks
@@ -1057,22 +1077,72 @@ c2\bendAfter #-8
 @funindex \glissando
 @funindex glissando
 
-@notation{ã\82°ã\83ªã\83\83ã\82µã\83³ã\83\89} ã\81¯é\9f³ç¬¦ã\81« @code{\glissando} ã\82\92ä»\98ã\81\91ã\82\8bã\81\93ã\81¨ã\81«ã\82\88ã\81£ã\81¦@c
-作成されます:
+@notation{ã\82°ã\83ªã\83\83ã\82µã\83³ã\83\89} ã\81¯é\9f³ç¬¦ã\81®å¾\8cã\81« @code{\glissando} ã\82\92ä»\98ã\81\91ã\82\8bã\81\93ã\81¨ã\81«@c
+よって作成されます:
 
 @lilypond[verbatim,quote,relative=2]
 g2\glissando g'
 c2\glissando c,
+\afterGrace f,1\glissando f'16
+@end lilypond
+
+グリッサンドは譜を跨いで音符を結ぶことができます:
+
+@lilypond[verbatim,quote]
+\new PianoStaff <<
+  \new Staff = "right" {
+    e'''2\glissando
+    \change Staff = "left"
+    a,,4\glissando
+    \change Staff = "right"
+    b''8 r |
+  }
+  \new Staff = "left" {
+    \clef bass
+    s1
+  }
+>>
+@end lilypond
+
+グリッサンドは和音の中にある音符を結ぶことができます。@c
+2 つの和音の音符を平行に 1 対 1 で結ぶのではない場合、
+@code{\glissandoMap} を設定することで、結び方を定義する必要があります。@c
+和音の音符は入力ファイル @file{.ly} で出現する順に 0, 1, @dots{} と@c
+番号が付きます。
+
+@lilypond[verbatim,quote,relative=2]
+<c, e>1\glissando g' |
+<c, e>1\glissando |
+<g' b> |
+\break
+\set glissandoMap = #'((0 . 1) (1 . 0))
+<c, g'>1\glissando |
+<d a'> |
+\set glissandoMap = #'((0 . 0) (0 . 1) (0 . 2))
+c1\glissando |
+<d f a> |
+\set glissandoMap = #'((2 . 0) (1 . 0) (0 . 1))
+<f d a'>1\glissando |
+<c c'> |
 @end lilypond
 
 異なるスタイルのグリッサンドを作成することもできます。@c
 詳細は @ref{Line styles} を参照してください。
 
-@snippets
 
+@snippets
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {contemporary-glissando.ly}
 
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{adding-timing-marks-to-long-glissandi.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{making-glissandi-breakable.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{extending-glissandi-across-repeats.ly}
+
 @seealso
 音楽用語集:
 @rglos{glissando}
index c214e6923ea0b573caa22722f7a7454b9415eacb..016491cf3e7452dfee4f254e1a55dcfd1e1974f2 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -243,7 +243,7 @@ symbols = {
 変更することができます。
 
 @lilypond[quote,ragged-right,verbatim]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \omit Voice.StringNumber }
 \new StaffGroup <<
    \new Staff \relative c {
      \clef "treble_8"
@@ -373,9 +373,6 @@ ties = \relative c' {
 
 @cindex harmonic indications in tablature notation (タブ譜の記譜法でのハーモニック指示)
 @cindex tablature and harmonic indications (タブ譜とハーモニック指示)
-@cindex slides in tablature notation (タブ譜の記譜法でのスライド)
-@cindex tablature and slides (タブ譜とスライド)
-@cindex chord glissandi (和音のグリッサンド)
 @funindex \harmonic
 @funindex \harmonicByFret
 @funindex \harmonicByRatio
@@ -383,7 +380,7 @@ ties = \relative c' {
 ハーモニック指示を演奏するピッチとしてタブ譜に付け加えることができます:
 
 @lilypond[verbatim,quote]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \omit Voice.StringNumber }
 firstHarmonic = {
   d'4\4\harmonic
   g'4\3\harmonic
@@ -461,9 +458,14 @@ ratioHarmonics = {
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {fretted-string-harmonics-in-tablature.ly}
 
+@cindex slides in tablature notation (タブ譜の記譜法でのスライド)
+@cindex tablature and slides (タブ譜とスライド)
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {slides-in-tablature.ly}
 
+@cindex chord glissandi (和音のグリッサンド)
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {chord-glissando-in-tablature.ly}
 
@@ -545,7 +547,7 @@ LilyPond は、あらかじめ定義されたチューニングに対して、@c
 @lilypond[quote,ragged-right,verbatim]
 <<
   \new Voice \with {
-    \override StringNumber #'stencil = ##f
+    \omit StringNumber
   } {
     \clef "bass_8"
     \relative c, {
@@ -661,7 +663,7 @@ LilyPond は、@code{TabStaff} の行数と自動的に算出される @code{Fre
 \layout @{
   \context @{
     \TabStaff
-    stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+    stringTunings = \stringTuning <c' g' d'' a''>
   @}
 @}
 @end example
@@ -929,8 +931,7 @@ fret-diagram-terse マークアップ文字列に運指の指示を含めるこ
     }
   }
   \context Staff {
-    \override Voice.TextScript
-      #'(fret-diagram-details finger-code) = #'below-string
+    \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;"
@@ -1005,8 +1006,7 @@ fret-diagram-verbose インターフェイスに特有なこととして、
     }
   \context Staff {
     \clef "treble_8"
-    \override Voice.TextScript
-      #'(fret-diagram-details finger-code) = #'below-string
+    \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
     <f, c f a c' f'>1^\markup {
       \fret-diagram-verbose #'(
         (place-fret 6 1)
@@ -1028,7 +1028,7 @@ fret-diagram-verbose インターフェイスに特有なこととして、
         (place-fret 1 3 3)
       )
     }
-    <c e g c' e'>1^\markup {
+    <c g c' e' g'>1^\markup {
       \fret-diagram-verbose #'(
         (capo 3)
         (mute 6)
@@ -1703,7 +1703,7 @@ LilyPond は楽譜譜刻プログラムなので、@c
 \clef "treble_8"
 b16 d g b e
 \textSpannerDown
-\override TextSpanner #'(bound-details left text) = #"XII "
+\override TextSpanner.bound-details.left.text = #"XII "
 g16\startTextSpan
 b16 e g e b g\stopTextSpan
 e16 b g d
@@ -1733,7 +1733,7 @@ e16 b g d
 @lilypond[quote,ragged-right,verbatim]
 \relative c' {
   \clef "treble_8"
-  \override Staff.NoteHead #'style = #'harmonic-mixed
+  \override Staff.NoteHead.style = #'harmonic-mixed
   d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
 }
 @end lilypond
@@ -1747,7 +1747,7 @@ music = \relative c' {
   < b\3 \deadNote d\2 b'\1 >
   < c\3 \deadNote e\2 c'\1 >
   \deadNotesOn
-  \times 2/3 { g8 b e }
+  \tuplet 3/2 { g8 b e }
   \deadNotesOff
   < a,\3 c\2 e\1 >1
 }
index 76484d3446846c81133b20096ccdf39547e7298d..0f02c9a92200136003834bd0e996791261aabab6 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.15"
 
 
 @c Translators: Yoshiki Sawada
@@ -530,7 +530,7 @@ foo = @{ c4 d e d @}
 @item Scheme 表記要素を区切る空白。
 @item @code{lyricmode} モードの @code{\override} と @code{\set} コマンドの@c
 中にある単語を区切る空白。@c
-特に、@code{\override Score . LyricText #'font-size = #5} のように、@c
+特に、@code{\override Score.LyricText.font-size = #5} のように、@c
 コマンドの中のドットとイコール記号の前後、コマンド全体の前後に@c
 空白を挿入することを忘れないで下さい。
 
@@ -1257,8 +1257,8 @@ scoreTitleMarkup = \markup @{ \column @{
     \footnote #'(0.5 . -2)
       \markup { The first note }
     a'4 b8
-    \footnote #'(0.5 . 1) #'Flag
-      \markup { The third note }
+    \single\footnote #'(0.5 . 1)
+      \markup { The third note } Flag
     e\noBeam c4 d4
   }
 }
@@ -1296,11 +1296,11 @@ scoreTitleMarkup = \markup @{ \column @{
     a'4-\footnote #'(-3 . 0) \markup { \bold Forte } \f
     -\footnote #'(0 . 1.5) \markup { スラー } (
     b8)-\footnote #'(0 . -2) \markup { 連桁 } [ e]
-    \footnote #'(1 . -1) #'Stem
-      \markup  { \teeny { これは符幹です } }
+    \single\footnote #'(1 . -1)
+      \markup  { \teeny { これは符幹です } } Stem
     c4
-    \footnote #'(0 . 0.5) #'AccidentalCautionary
-      \markup \italic { 忠告の臨時記号 }
+    \single\footnote #'(0 . 0.5)
+      \markup \italic { 忠告の臨時記号 } AccidentalCautionary
     \footnote #'(1 . 1) "音符自体"
     dis?4-\footnote #'(0.5 . -0.5) \markup \italic { スロー ダウン }
          _"rit."
@@ -1397,14 +1397,14 @@ LilyPond は対応するマークアップを同じページの下に表示す
       \markup { \teeny 3 } #'(0 . -2)
       \markup { 3. 連桁 } [
     e]
-    \footnote
-      \markup { 4 } #'(1 . -1) #'Stem
-      \markup  { \bold 4. { これは符幹です } }
+    \single\footnote
+      \markup { 4 } #'(1 . -1)
+      \markup  { \bold 4. { これは符幹です } } Stem
     c4
-    \footnote
+    \single\footnote
       \markup \concat \teeny { "sharp (v)" }
-          #'(0 . 0.5) #'AccidentalCautionary
-      \markup \italic { v. 忠告の臨時記号 }
+          #'(0 . 0.5)
+      \markup \italic { v. 忠告の臨時記号 } AccidentalCautionary
     dis?4-\footnote
       \markup \concat \teeny { "a" } #'(0.5 . -0.5)
       \markup \italic { a. スローダウン } _"rit."
@@ -2231,7 +2231,7 @@ portuguese = \lyricmode {
   à vo -- cê uma can -- ção legal
 }
 
-\relative  {
+\relative c'  {
   c2 d e f g f e
 }
 \addlyrics { \bulgarian }
index e760f8098f526ffdfb11b7680ae20df41e21ae9e..9827d26632d3a79b1a96b54ebb67a8864c731148 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
   \new Staff = "up" {
     \voiceOne
     % 譜を跨ぐボイスの中にある運指記号のためのスペースを作ります
-    \once\override DynamicLineSpanner #'staff-padding = #3.4
+    \once\override DynamicLineSpanner.staff-padding = #3.4
     e''2\p\< d''\>
     c''1\!
   }
 @lilypondfile[verbatim,quote]
 {cross-staff-stems.ly}
 
+このエングラーバは、名前をダブル クォートで囲っても指定することが@c
+できませんが、名前の前にハッシュ記号 @code{#} を置くことで指定できます。
+
 @snippets
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {indicating-cross-staff-chords-with-arpeggio-bracket.ly}
index 4cb341ef7aea3e78e8ba519f9d4409fe86d58a8d..f047a94ee5f5ccf505df5d16114333bb07e8e17f 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @c This file is part of notation.tely
 @ignore
-    Translation of GIT committish: ebe492ca408fb0d9abf80b94c56197eef8dc2f09
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
index be23d8800a578dcdce107dd81869d01118ffced6..9968a12829fd92e88880a39e9677ffad317c452f 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -264,17 +264,16 @@ mus = \drummode {
   << \new DrumStaff \with {
        \remove "Bar_engraver"
        \remove "Time_signature_engraver"
-       \override Stem #'transparent = ##t
-       \override Flag #'transparent = ##t
-       \override Stem #'Y-extent = ##f
+       \hide Stem
+       \override Stem.Y-extent = ##f
      } \mus
      \new Lyrics \nam
   >>
   \layout {
     \context {
       \Score
-      \override LyricText #'font-family = #'typewriter
-      \override BarNumber #'transparent =##T
+      \override LyricText.font-family = #'typewriter
+      \override BarNumber.transparent =##T
     }
   }
 }
@@ -296,16 +295,15 @@ mus = \drummode { timh ssh timl ssl cb s16 }
   \new DrumStaff \with {
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
-    \override StaffSymbol #'line-count = #2
-    \override StaffSymbol #'staff-space = #2
-    \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0)
+    \hide Stem
+    \override Stem.Y-extent = ##f
+    \override StaffSymbol.line-count = #2
+    \override StaffSymbol.staff-space = #2
+    \override VerticalAxisGroup.minimum-Y-extent = #'(-3.0 . 4.0)
     drumStyleTable = #timbales-style
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -323,16 +321,15 @@ mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 }
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
     drumStyleTable = #congas-style
-    \override StaffSymbol #'line-count = #2
+    \override StaffSymbol.line-count = #2
 
     %% this sucks; it will lengthen stems.
-    \override StaffSymbol #'staff-space = #2
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \override StaffSymbol.staff-space = #2
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -349,17 +346,16 @@ mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 }
   \new DrumStaff \with {
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
-    \override StaffSymbol #'line-count = #2
+    \override StaffSymbol.line-count = #2
     drumStyleTable = #bongos-style
 
     %% this sucks; it will lengthen stems.
-    \override StaffSymbol #'staff-space = #2
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \override StaffSymbol.staff-space = #2
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -376,14 +372,13 @@ mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 }
   \new DrumStaff \with{
     \remove "Bar_engraver"
     drumStyleTable = #percussion-style
-    \override StaffSymbol #'line-count = #1
+    \override StaffSymbol.line-count = #1
     \remove "Time_signature_engraver"
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -436,10 +431,10 @@ down = \drummode { bd4 sn bd toml8 toml }
 woodstaff = {
   % 以下は二線の譜を定義します。
   % また、二線の位置も定義します。
-  \override Staff.StaffSymbol #'line-positions = #'(-2 3)
+  \override Staff.StaffSymbol.line-positions = #'(-2 3)
 
   % 以下の行が必要です。この行を省略すると、小節線は短すぎます!
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
 }
 
 \new DrumStaff {
@@ -457,7 +452,7 @@ woodstaff = {
 @end lilypond
 
 上記の特殊なケースでは、@c
-小節線の長さを @code{\override Staff.BarLine #'bar-extent #'(from . to)}
+小節線の長さを @code{\override Staff.BarLine.bar-extent #'(from . to)}
 で変更する必要があります。@c
 さもないと、小節線の長さが短すぎます。@c
 また、2 本の譜線の位置を定義する必要があります。@c
@@ -469,8 +464,8 @@ woodstaff = {
 #(define mydrums '((tambourine default #t 0)))
 
 tambustaff = {
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Tambourine"
 }
 
@@ -495,8 +490,8 @@ tambustaff = {
 #(define mydrums '((tamtam default #t 0)))
 
 tamtamstaff = {
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Tamtam"
 }
 
@@ -517,9 +512,9 @@ tamtamstaff = {
                    (cowbell  default #t -2)))
 
 bellstaff = {
-  \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3)
+  \override DrumStaff.StaffSymbol.line-positions = #'(-2 3)
   \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Different Bells"
 }
 
index bac47b7f68cd7393c23be8d0569aa0d0dc441e21..eb6713859b40136017293d04a7e7bacbb800b5a3 100644 (file)
@@ -1,12 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.18"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -473,9 +473,9 @@ LilyPond の記号はいかなる標準にも準拠しません。
   @tab c d e f g a b h
 @item @code{english}
   @tab c d e f g a bf b
-@item @code{espanol}
+@item @code{espanol} または @code{español}
   @tab do re mi fa sol la sib si
-@item @code{italiano}
+@item @code{italiano} または @code{français}
   @tab do re mi fa sol la sib si
 @item @code{norsk}
   @tab c d e f g a b h
@@ -505,9 +505,9 @@ LilyPond の記号はいかなる標準にも準拠しません。
 @item @code{english}
   @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp
     @tab -ff/-flatflat
-@item @code{espanol}
+@item @code{espanol} または @code{español}
   @tab -s @tab -b @tab -ss/-x @tab -bb
-@item @code{italiano}
+@item @code{italiano} または @code{français}
   @tab -d @tab -b @tab -dd @tab -bb
 @item @code{norsk}
   @tab -iss/-is @tab -ess/-es @tab -ississ/-isis
@@ -561,9 +561,9 @@ a2 as e es a ases e eses
   @tab -ih @tab -eh @tab -isih @tab -eseh
 @item @code{english}
   @tab -qs @tab -qf @tab -tqs @tab -tqf
-@item @code{espanol}
+@item @code{espanol} または @code{español}
   @tab -cs @tab -cb @tab -tcs @tab -tcb
-@item @code{italiano}
+@item @code{italiano} または @code{français}
   @tab -sd @tab -sb @tab -dsd @tab -bsb
 @item @code{portugues}
   @tab -sqt @tab -bqt @tab -stqt @tab -btqt
@@ -919,7 +919,7 @@ music = \relative c' { c8. ees16( fis8. a16 b8.) gis16 f8. d16 }
 
 @warning{与えられた音階の中に無い音符は、移調されません。}
 
-@subsubheading 様式的な移調
+@subsubsubheading 様式的な移調
 
 @cindex modal transposition (様式的な移調)
 @cindex transposition, modal (様式的な移調)
@@ -974,7 +974,7 @@ motif = \relative c' { c8 d e f g a b c }
 }
 @end lilypond
 
-@subsubheading 様式的な反転
+@subsubsubheading 様式的な反転
 
 @cindex modal inversion (様式的な反転)
 @cindex inversion, modal (様式的な反転)
@@ -1147,8 +1147,10 @@ c2 c
 
 @cindex transposing clefs (音部を移調する)
 @cindex clef, transposing (音部を移調する)
-@cindex オクターブ移調 (octave transposition)
+@cindex octave transposition (オクターブ移調)
 @c 未訳
+@cindex optional octave transposition
+@cindex octave transposition, optional
 @cindex choral tenor clef
 @cindex tenor clef, choral
 
@@ -1173,6 +1175,18 @@ c2 c
 c2 c
 @end lilypond
 
+数字の引数を括弧や角括弧で囲むことで、オプションのオクターブを@c
+表示させることができます:
+
+@lilypond[verbatim,quote,relative=1]
+\clef "treble_(8)"
+c2 c
+\clef "bass^[15]"
+c2 c
+@end lilypond
+
+ピッチは数字の引数が括弧で囲まれていない場合と同じです。
+
 特殊な音部記号については @ref{Mensural clefs},
 @ref{Gregorian clefs}, @ref{Default tablatures}, それに
 @ref{Custom tablatures} で説明します。@c
@@ -1199,9 +1213,25 @@ c2 c
 内部リファレンス:
 @rinternals{Clef_engraver},
 @rinternals{Clef},
-@rinternals{OctavateEight},
+@rinternals{ClefModifier},
 @rinternals{clef-interface}
 
+@knownissues
+音部記号に付けるオクターブ移動の数字は、個別のグラフィカル オブジェクト@c
+として扱われます。@c
+このため、@var{Clef} に適用される @code{\override} は、@c
+別の @code{\override} で @var{ClefModifier} グラフィカル オブジェクトに@c
+適用する必要があります。
+
+@lilypond[fragment,quote,relative=1]
+\new Staff \with {
+  \override ClefModifier.color = #red
+  \override Clef.color = #blue
+}
+
+\clef "treble_8" c4
+@end lilypond
+
 
 @node 調号
 @unnumberedsubsubsec 調号
@@ -1277,6 +1307,37 @@ f
 fis
 @end lilypond
 
+新たにモードを定義することができます
+-- モードが C で始まる場合、C で始まる音階の各ステップに対する@c
+変更記号をリスト アップします。
+
+@lilypond[verbatim,quote]
+freygish = #`((0 . ,NATURAL) (1 . ,FLAT) (2 . ,NATURAL)
+    (3 . ,NATURAL) (4 . ,NATURAL) (5 . ,FLAT) (6 . ,FLAT))
+
+\relative c' {
+  \key c\freygish c4 des e f
+  \bar "||" \key d\freygish d es fis g
+}
+@end lilypond
+
+@code{KeySignature} のプロパティ @code{flat-positions} と
+@code{sharp-positions} を用いて、調号の臨時記号を通常とは異なる@c
+オクターブに表示させたり、複数のオクターブに表示させることができます。@c
+これらのプロパティに渡される値は、臨時記号を表示させる譜ポジションの@c
+範囲を指定します。@c
+1 つの値だけを渡した場合、その譜ポジションで終了するオクターブの範囲@c
+に臨時記号が配置されます。
+
+@lilypond[verbatim, quote,relative=0]
+\override Staff.KeySignature.flat-positions = #'((-5 . 5))
+\override Staff.KeyCancellation.flat-positions = #'((-5 . 5))
+\clef bass \key es\major es g bes d
+\clef treble \bar "||" \key es\major es g bes d
+
+\override Staff.KeySignature.sharp-positions = #'(2)
+\bar "||" \key b\major b fis b2
+@end lilypond
 
 @snippets
 
@@ -1303,7 +1364,6 @@ fis
 @rinternals{Key_performer},
 @rinternals{KeyCancellation},
 @rinternals{KeySignature},
-@rinternals{key-cancellation-interface},
 @rinternals{key-signature-interface}
 
 
@@ -1471,7 +1531,7 @@ LilyPond はどの臨時記号スタイルを使用するのかを指定する
 
 @example
 \new Staff <<
-  \accidentalStyle "voice"
+  \accidentalStyle voice
   @{ @dots{} @}
 >>
 @end example
@@ -1486,7 +1546,7 @@ LilyPond はどの臨時記号スタイルを使用するのかを指定する
 以下のようにします:
 
 @example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
 @end example
 
 サポートされる臨時記号スタイルを以下で示します。@c
@@ -1528,11 +1588,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1547,7 +1607,7 @@ musicB = {
   <<
     \context Staff = "up" @{
       %%% 次の行を変更したいスタイルに合わせて変更してください:
-      \accidentalStyle #'Score "default"
+      \accidentalStyle Score.default
       \musicA
     @}
     \context Staff = "down" @{
@@ -1610,11 +1670,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1682,11 +1742,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicB
     }
   >>
@@ -1700,7 +1760,6 @@ musicB = {
 
 @funindex modern
 
-@c ここから L221
 この規則は 20 世紀の一般的な臨時記号の付け方と一致します:
 この規則はいくつかの余分なナチュラル記号を省略します
 -- 伝統的にダブル シャープの後のシャープに前置されるナチュラル記号と、@c
@@ -1752,11 +1811,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicB
     }
   >>
@@ -1816,11 +1875,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicB
     }
   >>
@@ -1884,11 +1943,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicB
     }
   >>
@@ -1946,11 +2005,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicB
     }
   >>
@@ -2012,7 +2071,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano"
+      \accidentalStyle piano
       \musicA
     }
     \context Staff = "down" {
@@ -2071,7 +2130,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano-cautionary"
+      \accidentalStyle piano-cautionary
       \musicA
     }
     \context Staff = "down" {
@@ -2134,11 +2193,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicB
     }
   >>
@@ -2191,11 +2250,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicB
     }
   >>
@@ -2250,11 +2309,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicB
     }
   >>
@@ -2307,11 +2366,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicB
     }
   >>
@@ -2369,11 +2428,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicB
     }
   >>
@@ -2432,12 +2491,12 @@ musicB = {
   <<
     \context Staff = "up" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicA
     }
     \context Staff = "down" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicB
     }
   >>
@@ -2492,11 +2551,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicB
     }
   >>
@@ -2551,11 +2610,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicB
     }
   >>
@@ -2601,7 +2660,7 @@ musicB = {
 
 @lilypond[quote]
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2618,12 +2677,12 @@ musicB = {
 
 @lilypond[verbatim,quote]
 forget = #(define-music-function (parser location music) (ly:music?) #{
-  \accidentalStyle "forget"
+  \accidentalStyle forget
   #music
-  \accidentalStyle "modern"
+  \accidentalStyle modern
 #})
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2743,13 +2802,13 @@ forget = #(define-music-function (parser location music) (ly:music?) #{
 
 @lilypond[verbatim,quote,relative=2]
 c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
 c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
 a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
 a b
-\revert NoteHead #'style
+\revert NoteHead.style
 c4 d e f
 @end lilypond
 
index 41a2c5e031c9964fa9b715367b95d0a885b09a06..9df79cd8f14d4919eb1f2270d36338f99d2c6ead 100644 (file)
@@ -1,13 +1,13 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: cc3b9e1430f4cc9c54da7252e504f3d274a7ea17
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 
 @c Translators: Yoshiki Sawada
@@ -167,8 +167,8 @@ c1
 
 @cindex repeat with upbeat (上拍を持つ繰り返し)
 @cindex upbeat in a repeat (繰り返しの中にある上拍)
-@cindex anacrucis in a repeat (繰り返しの中にある弱拍)
-@cindex repeat with anacrucis (弱拍を持つ繰り返し)
+@cindex anacrusis in a repeat (繰り返しの中にある弱拍)
+@cindex repeat with anacrusis (弱拍を持つ繰り返し)
 @cindex repeat with pickup (ピックアップを持つ繰り返し)
 @cindex pickup in a repeat (繰り返しの中にあるピックアップ)
 @funindex \partial
@@ -236,11 +236,11 @@ g1 |
 \alternative {
   {
     f2 d |
-    \set Timing.measureLength = #(ly:make-moment 3 4)
+    \set Timing.measureLength = #(ly:make-moment 3/4)
     g4 g g  % optional bar check is allowed here
   }
   {
-    \set Timing.measureLength = #(ly:make-moment 4 4)
+    \set Timing.measureLength = #(ly:make-moment 4/4)
     a2 a |
   }
 }
@@ -310,6 +310,7 @@ c1
 記譜法リファレンス:
 @ref{Bar lines},
 @ref{Modifying context plug-ins},
+@ref{Modifying ties and slurs},
 @ref{Time administration}
 
 コード断片集:
@@ -329,14 +330,30 @@ c1
 @cindex repeat and measure number (繰り返しと小節番号)
 @cindex timing information and repeats (タイミング情報と繰り返し)
 @cindex measure number and repeats (小節番号と繰り返し)
-@cindex repeat and slur (繰り返しとスラー)
-@cindex slur and repeat (スラーと繰り返し)
+@cindex repeats and slur (繰り返しとスラー)
+@cindex slur and repeats (スラーと繰り返し)
+@cindex glissandi and repeats (グリッサンドと繰り返し)
+@cindex repeats and glissandi (繰り返しとグリッサンド)
 
 @code{\repeat} ブロックから @code{\alternative} ブロックまで続くスラーは、@c
 最初の入れ替え部分に対してのみ機能します。@c
-さらに、スラーは入れ替え部分の終わりから繰り返しの先頭までをカバーすることは@c
+他の入れ替え部分に対して見た目上、スラーを伸ばすには @code{\repeatTie} を@c
+使います。
+しかしながら、この手法はスラーが 1 本の場合のみ可能であり、@code{TabStaff}
+では機能しません。@c
+複数のスラーを入れ替え部分に伸ばし、@code{TabStaff} コンテキストでも機能@c
+する手法は @ref{Modifying ties and slurs} で示しています。
+
+さらに、入れ替え部分の最後から繰り返しの開始点までスラーで結ぶことも@c
 できません。
 
+@code{\repeat} ブロックから @code{\alternative} ブロックまで続く@c
+グリッサンドは最初の入れ替え部分に対してのみ機能します。@c
+他の入れ替え部分に対して見た目上、グリッサンドを伸ばすには、見えない装飾@c
+音符から始まるグリッサンドのコードを記述します。@c
+例として、@ref{Glissando} の楽譜断片集にある
+@qq{繰り返しを跨いでグリッサンドを延長する} を参照してください。
+
 不完全な小節で始まる繰り返しが @code{measureLength} プロパティの変更を行う@c
 @code{\alternative} ブロックを持つ場合、@c
 @code{\unfoldRepeats} を使用するとおかしな場所に小節線が引かれ、@c
@@ -400,7 +417,7 @@ c1
 標準の譜刻習慣に従い、楽曲の先頭では繰り返し記号は譜刻されません。
 
 @item end-repeat
-@code{:|} 小節線を譜刻します。
+@code{:|.} 小節線を譜刻します。
 
 @lilypond[verbatim,quote,relative=2]
 c1
@@ -661,7 +678,7 @@ c1
 
 @lilypond[verbatim,quote,relative=2]
 \repeat percent 4 { c8. <d f>16 }
-\repeat percent 2 { \times 2/3 { r8 c d } e4 }
+\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 }
 @end lilypond
 
 @snippets
index 38843909c285a3c150e1e88e0273d6ab5bf6dd32..fdffd7a251bd85bbd604f3e3211d46f49b3092e4 100644 (file)
@@ -6,7 +6,7 @@
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -150,7 +150,7 @@ a4 b c4. b8 a4. b4.. c8.
 @snippets
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
-{alternative-breve-note.ly}
+{alternative-breve-notes.ly}
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {changing-the-number-of-augmentation-dots-per-note.ly}
@@ -212,8 +212,8 @@ a4 b c4. b8 a4. b4.. c8.
 そのため、3 連符で指定する分数は 2/3 です。
 
 @lilypond[quote,verbatim,relative=2]
-a2 \times 2/3 { b4 b b }
-c4 c \times 2/3 { b4 a g }
+a2 \tuplet 3/2 { b4 b b }
+c4 c \tuplet 3/2 { b4 a g }
 @end lilypond
 
 @cindex tuplet bracket placement (連符囲みの配置)
@@ -232,7 +232,7 @@ c4 c \times 2/3 { b4 a g }
 
 @lilypond[quote,verbatim,relative=2]
 \autoBeamOff
-c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4
+c4 \tuplet 5/4 { f8 e f \tuplet 3/2 { e[ f g] } } f4
 @end lilypond
 
 ネストされた連符の演奏開始点が同時である場合に、それらの連符を変更するには
@@ -538,11 +538,11 @@ c2 ~ c
 オーバライドしてください。
 
 @lilypond[verbatim,quote,ragged-right,relative=2]
-\override Tie #'layer = #-2
-\override Staff.TimeSignature #'layer = #-1
-\override Staff.KeySignature #'layer = #-1
-\override Staff.TimeSignature #'whiteout = ##t
-\override Staff.KeySignature #'whiteout = ##t
+\override Tie.layer = #-2
+\override Staff.TimeSignature.layer = #-1
+\override Staff.KeySignature.layer = #-1
+\override Staff.TimeSignature.whiteout = ##t
+\override Staff.KeySignature.whiteout = ##t
 b2 b~
 \time 3/4
 \key a \major
@@ -638,7 +638,7 @@ b r4
 \new Staff {
   % この 2 本線には意味はありません
   \time 16/1
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   % 八全休符を譜刻します。二全休符 4 つと等価です
   r\maxima
   % 四全休符を譜刻します。二全休符 2 つと等価です
@@ -906,10 +906,10 @@ R2.^\fermataMarkup
 @c KEEP LY
 @lilypond[quote,verbatim,relative=2]
 % この例は誤ったオブジェクト名を指定しているため失敗します
-\override TextScript #'padding = #5
+\override TextScript.padding = #5
 R1^"wrong"
 % この例は正しいオブジェクト名が指定されています
-\override MultiMeasureRestText #'padding = #5
+\override MultiMeasureRestText.padding = #5
 R1^"right"
 @end lilypond
 
@@ -1270,7 +1270,7 @@ e4. d8 c2
 メトロノーム記号を 2 つの数の範囲として譜刻することもできます:
 
 @lilypond[verbatim,quote,relative=1]
-\tempo 4 = 40 ~ 46
+\tempo 4 = 40 - 46
 c4. e8 a4 g
 b,2 d4 r
 @end lilypond
@@ -1391,7 +1391,7 @@ r4 e8 | a4 c8 b c4 |
 
 @lilypond[quote,verbatim,relative=1]
 \time 3/4
-\set Timing.measurePosition = #(ly:make-moment -1 8)
+\set Timing.measurePosition = #(ly:make-moment -1/8)
 e8 | a4 c8 b c4 |
 @end lilypond
 
@@ -1427,7 +1427,7 @@ e8 | a4 c8 b c4 |
 \time 6/8
 \partial 8
 e8 | a4 c8 b[ c b] |
-\set Timing.measurePosition = #(ly:make-moment -1 4)
+\set Timing.measurePosition = #(ly:make-moment -1/4)
 r8 e,8 | a4 c8 b[ c b] |
 @end lilypond
 
@@ -1478,7 +1478,7 @@ d4 e d c
 
 @lilypond[verbatim,relative=2,quote]
 % すべての小節番号を表示します
-\override Score.BarNumber #'break-visibility = #all-visible
+\override Score.BarNumber.break-visibility = #all-visible
 c4 d e d
 \cadenzaOn
 c4 c d8[ d d] f4 g4.
@@ -1647,7 +1647,7 @@ c8 c c
     \scaleDurations 3/5 {
       \repeat unfold 2 { c8[ c c] }
       \repeat unfold 2 { c8[ c] } |
-      c4. c \times 2/3 { c8[ c c] } c4
+      c4. c \tuplet 3/2 { c8[ c c] } c4
     }
   }
 >>
@@ -2116,7 +2116,7 @@ c16^"(3+2)" c c c c |
 
 @lilypond[quote,verbatim,relative=2]
 \time 5/8
-\set Timing.baseMoment = #(ly:make-moment 1 16)
+\set Timing.baseMoment = #(ly:make-moment 1/16)
 \set Timing.beatStructure = #'(7 3)
 \repeat unfold 10 { a16 }
 @end lilypond
@@ -2203,7 +2203,7 @@ c16 c c |
 @c KEEP LY
 @lilypond[quote,verbatim,relative=2]
 \time 4/4
-\set Timing.baseMoment = #(ly:make-moment 1 8)
+\set Timing.baseMoment = #(ly:make-moment 1/8)
 \set Timing.beatStructure = #'(3 3 2)
 % 以下は beamExceptions のため、(3 3 2) の連桁にはなりません
 \repeat unfold 8 {c8} |
@@ -2339,7 +2339,7 @@ r4. a8 a a |
 <<
   \new Staff {
     \time 3/4
-    \set Timing.baseMoment = #(ly:make-moment 1 8)
+    \set Timing.baseMoment = #(ly:make-moment 1/8)
     \set Timing.beatStructure = #'(1 5)
     \repeat unfold 6 { a8 }
   }
@@ -2417,7 +2417,7 @@ c8 c\noBeam c c
 
 @lilypond[quote,verbatim,relative=2]
 c4 d8[
-\grace { e32[ d c d] }
+\grace { e32 d c d }
 e8] e[ e
 \grace { f16 }
 e8 e]
@@ -2509,14 +2509,14 @@ ritardando (徐々に緩やかに) や accelerando (次第に速く) を@c
 最後の 4 つの 32 分音符は一定のテンポです。
 
 @lilypond[relative=1,verbatim,quote]
-\override Beam #'grow-direction = #LEFT
-\featherDurations #(ly:make-moment 2 1)
+\override Beam.grow-direction = #LEFT
+\featherDurations #(ly:make-moment 2/1)
 { c16[ c c c c c c c] }
-\override Beam #'grow-direction = #RIGHT
-\featherDurations #(ly:make-moment 2 3)
+\override Beam.grow-direction = #RIGHT
+\featherDurations #(ly:make-moment 2/3)
 { c32[ d e f] }
 % revert to non-feathered beams
-\override Beam #'grow-direction = #'()
+\override Beam.grow-direction = #'()
 { g32[ a b c] }
 @end lilypond
 
@@ -2634,7 +2634,7 @@ f1 \bar "|"
 f1 \bar "."
 g1 \bar "||"
 a1 \bar ".|"
-b1 \bar ".|."
+b1 \bar ".."
 c1 \bar "|.|"
 d1 \bar "|."
 e1
@@ -2644,8 +2644,8 @@ e1
 さらに、点線と破線の小節線があります:
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar ":"
-g1 \bar "dashed"
+f1 \bar ";"
+g1 \bar "!"
 a1
 @end lilypond
 
@@ -2653,11 +2653,11 @@ a1
 さらに、繰り返しの小節線が 5 種類あります:
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar "|:"
-g1 \bar ":|:"
+f1 \bar ".|:"
+g1 \bar ":..:"
 a1 \bar ":|.|:"
 b1 \bar ":|.:"
-c1 \bar ":|"
+c1 \bar ":|."
 e1
 @end lilypond
 
@@ -2681,13 +2681,13 @@ c4 c c c
 c4 c c c \break
 \bar "S"
 c4 c c c
-\bar "|S"
+\bar "S-|"
 c4 c c c \break
-\bar "|S"
+\bar "S-|"
 c4 c c c
-\bar "S|"
+\bar "S-S"
 c4 c c c \break
-\bar "S|"
+\bar "S-S"
 c1
 @end lilypond
 
@@ -2708,9 +2708,9 @@ c1
 
 @lilypond[quote,relative=2,verbatim]
 c4 c c c
-\bar "||:"
+\bar ".|:-||"
 c4 c c c \break
-\bar "||:"
+\bar ".|:-||"
 c4 c c c
 @end lilypond
 
@@ -2718,29 +2718,29 @@ c4 c c c
 
 @lilypond[quote,relative=2,verbatim]
 c4 c c c
-\bar ":|S"
+\bar ":|.S"
 c4 c c c \break
-\bar ":|S"
+\bar ":|.S"
 c4 c c c
-\bar ":|S."
+\bar ":|.S-S"
 c4 c c c \break
-\bar ":|S."
+\bar ":|.S-S"
 c4 c c c
-\bar "S|:"
+\bar "S.|:-S"
 c4 c c c \break
-\bar "S|:"
+\bar "S.|:-S"
 c4 c c c
-\bar ".S|:"
+\bar "S.|:"
 c4 c c c \break
-\bar ".S|:"
+\bar "S.|:"
 c4 c c c
-\bar ":|S|:"
+\bar ":|.S.|:"
 c4 c c c \break
-\bar ":|S|:"
+\bar ":|.S.|:"
 c4 c c c
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
 c4 c c c \break
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
 c1
 @end lilypond
 
@@ -2847,7 +2847,7 @@ c1 c c c
 以下の例では、譜刻可能な場所すべてに小節番号を譜刻しています:
 
 @lilypond[verbatim,quote,relative=1]
-\override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+\override Score.BarNumber.break-visibility = #'#(#t #t #t)
 \set Score.currentBarNumber = #11
 % Permit first bar number to be printed
 \bar ""
@@ -2945,17 +2945,17 @@ c1 | c | c | c
 
 
 @funindex |
-@funindex pipeSymbol
+@funindex "|"
 
 入力の中で小節チェックあるいはパイプ記号 @code{|} に遭遇した場合にとられる@c
 アクションを再定義することも可能です。@c
 これにより、小節チェック以外のことを行うことができます。@c
-再定義は音楽表記を @code{pipeSymbol} に代入することによって行います。@c
+再定義は音楽表記を @code{"|"} に代入することによって行います。@c
 以下の例では、@code{|} は小節の終わりをチェックするのではなく、@c
 それが現れた場所に 2 重線の小節線を挿入するようセットされています。
 
 @lilypond[quote,verbatim]
-pipeSymbol = \bar "||"
+"|" = \bar "||"
 {
   c'2 c' |
   c'2 c'
@@ -3172,7 +3172,7 @@ c1
 
 @lilypond[quote,relative=2,verbatim]
 c4 \grace b16 a4(
-\grace { b16[ c16] } a2)
+\grace { b16 c16 } a2)
 @end lilypond
 
 装飾音符には他にも 3 つのタイプがあります。@c
@@ -3194,7 +3194,7 @@ Lilypond はさらに 2 つ特殊なタイプの装飾小音符をサポート
 @lilypond[quote,relative=2,verbatim]
 \acciaccatura d8 c4
 \appoggiatura e8 d4
-\acciaccatura { g16[ f] } e2
+\acciaccatura { g16 f } e2
 \slashedGrace a,8 g4
 \slashedGrace b16 a4(
 \slashedGrace b8 a2)
@@ -3206,8 +3206,8 @@ Lilypond はさらに 2 つ特殊なタイプの装飾小音符をサポート
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e2 \grace { c16[ d e f] } e2 }
-  \new Staff { c2 \grace { g8[ b] } c2 }
+  \new Staff { e2 \grace { c16 d e f } e2 }
+  \new Staff { c2 \grace { g8 b } c2 }
 >>
 @end lilypond
 
@@ -3257,7 +3257,7 @@ c1 \afterGrace d1 { c16[ d] } c1
 \new Voice {
   <<
     { d1^\trill_( }
-    { s2 s4. \grace { c16[ d] } }
+    { s2 s4. \grace { c16 d } }
   >>
   c1)
 }
@@ -3347,8 +3347,8 @@ c1 \afterGrace d1 { c16[ d] } c1
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e4 \bar "|:" \grace c16 d2. }
-  \new Staff { c4 \bar "|:" d2. }
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" d2. }
 >>
 @end lilypond
 
@@ -3359,8 +3359,8 @@ c1 \afterGrace d1 { c16[ d] } c1
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e4 \bar "|:" \grace c16 d2. }
-  \new Staff { c4 \bar "|:" \grace s16 d2. }
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" \grace s16 d2. }
 >>
 @end lilypond
 
@@ -3528,11 +3528,11 @@ MyCadenza = \relative c' {
 
 @lilypond[quote,verbatim]
 \new Voice \relative c' {
-  \set Timing.measureLength = #(ly:make-moment 5 4)
+  \set Timing.measureLength = #(ly:make-moment 5/4)
   c1 c4 |
   c1 c4 |
   c4 c
-  \set Timing.measurePosition = #(ly:make-moment 5 8)
+  \set Timing.measurePosition = #(ly:make-moment 5/8)
   b4 b b8 |
   c4 c1 |
 }
index 1db44650f40e06950ce0da9ea8bf84390c773305..b88b36a3197404c792a68e8949b75118e7da4729 100644 (file)
@@ -1,12 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: cc3b9e1430f4cc9c54da7252e504f3d274a7ea17
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 
 @c Translators: Yoshiki Sawada
@@ -64,7 +64,7 @@ LilyPond の中で多声部は同じ譜にある複数のボイスを参照し
 続くかもしれません:
 
 @lilypond[verbatim,quote,relative=2]
-<a c e>1\fermata <a c e>2-> <f a c e>4\prall <a c>8.^| <g c e>16-.
+<a c e>1\fermata <a c e>2-> <f a c e>4\prall <a c>8.^! <g c e>16-.
 @end lilypond
 
 和音の中にある音符自体にもアーティキュレーションや装飾を付けることができます。
@@ -96,7 +96,7 @@ LilyPond の中で多声部は同じ譜にある複数のボイスを参照し
 については @ref{Simultaneous expressions} を参照してください):
 
 @lilypond[verbatim,quote,relative=2]
-\grace { g8[( a b] }
+\grace { g8( a b }
 <> ) \p \< -. -\markup \italic "sempre staccato"
 \repeat unfold 4 { c4 e }  c1\f
 @end lilypond
@@ -171,7 +171,7 @@ LilyPond の中で多声部は同じ譜にある複数のボイスを参照し
 アーティキュレーション、マークアップ、スラー、連桁などを使うことができます。
 
 @lilypond[verbatim,quote,relative=2]
-<a c e>1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall
+<a c e>1\p^"text" q2\<( q8)[-! q8.]\! q16-1-2-3 q8\prall
 @end lilypond
 
 和音繰り返しのシンボルは常に最後の和音を覚えているため、@c
@@ -309,7 +309,7 @@ warning: ignoring too many clashing note columns
 以下でこのメッセージを表示させなくすることができます:
 
 @example
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
 @end example
 
 しかしながら、これは警告を非表示にするだけでなく、@c
@@ -399,7 +399,7 @@ warning: ignoring too many clashing note columns
 @funindex \oneVoice
 @funindex oneVoice
 
-@strong{@i{明示的にボイスをインスタンス化する}}
+@subsubsubheading 明示的にボイスをインスタンス化する
 
 単一の譜の中に複数の独立したボイスを配置するのに必要とされる基本的な構造が@c
 以下の例で示されています:
@@ -423,7 +423,7 @@ warning: ignoring too many clashing note columns
 向きに戻します。
 
 @c passage: 楽節
-@strong{@i{一時的に多声となる楽節 (passage)}}
+@subsubsubheading 一時的に多声となる楽節 (passage)
 
 一時的に多声となる楽節は以下のような構成で作成することができます:
 
@@ -468,7 +468,7 @@ warning: ignoring too many clashing note columns
 ここで、@code{\voiceOne} と @code{\voiceTwo} コマンドはそれぞれのボイスの@c
 設定を定義するために必要とされています。
 
-@strong{@i{2 重バックスラッシュ構造}}
+@subsubsubheading 2 重バックスラッシュ構造
 
 @code{<< @{...@} \\ @{...@} >>} 構造
 -- この中では 2 つ (あるいはそれ以上) の表記が
@@ -514,7 +514,7 @@ warning: ignoring too many clashing note columns
 @rlearning{ボイスを明示的にインスタンス化する} で説明されているように、@c
 明示的に @code{Voice} コンテキストを作成しておくと賢明です。
 
-@strong{@i{ボイスの順序}}
+@subsubsubheading Voice の順序
 
 入力ファイルの中にある複数のボイスを譜刻する時、以下の順序で譜刻されます:
 
@@ -554,7 +554,7 @@ etc.
 @warning{歌詞、スパナ (スラー、タイ、強弱のヘアピン等) はボイスを @q{跨ぐ}
 ことはできません。}
 
-@strong{@i{同一のリズム}}
+@subsubsubheading 同一のリズム
 
 同じリズムを持ち、並行して進行する音楽を譜刻するという特殊なケースでは、@c
 並行する音楽を単一の @code{Voice} の中に組み込み、@c
@@ -858,13 +858,13 @@ etc.
 @cindex collisions, ignoring (衝突を無視する)
 
 @knownissues
-@code{\override NoteColumn #'ignore-collision = ##t} を使うと@c
+@code{\override NoteColumn.ignore-collision = ##t} を使うと@c
 異なるボイスにある符頭が異なる音符を不適切にマージします。
 
 @lilypond[quote,relative=1,verbatim]
 \mergeDifferentlyHeadedOn
 << { c16 a' b a } \\ { c,2 } >>
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
 << { c16 a' b a } \\ { c,2 } >>
 @end lilypond
 
@@ -1075,8 +1075,8 @@ instrumentTwo = \relative c' {
 歌詞を処理するようには設計されていません。@c
 ボイスに歌詞が付けられている場合、パート結合は処理を停止します。
 
-@code{\partcombine} 関数を @code{\times} ブロックや @code{\relative} ブロック@c
-の中に置くことはできません。
+@code{\partcombine...} 関数を @code{\tuplet} ブロックや @code{\relative}
\83\96ã\83­ã\83\83ã\82¯ã\81®ä¸­ã\81«ç½®ã\81\8fã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82
 
 @code{printPartCombineTexts} がセットされていて、ある小節で 2 つのボイスの@c
 音符が同じである場合、@c
index c71eff7cda10d2ea4ac4bb8097f665f19975b45c..9c16677ce7348c91bfe573bf36f1708c41ef34b5 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 
 @c Translators: Yoshiki Sawada
@@ -35,7 +35,7 @@ staff lines."
 
 Could we add a sentence:
 "Use instead the pair               fontSize = #@var{N}
-            \override StaffSymbol #'staff-space = #(magstep
+            \override StaffSymbol.staff-space = #(magstep
 @var{N})
 inside the Staff context to change the size of the font and the
 distance between
@@ -107,16 +107,16 @@ http://code.google.com/p/lilypond/issues/detail?id=68
 オプションについて説明します。
 
 @menu
-* \paper ブロック::
+* paper ブロック::
 * 紙面サイズと自動拡縮::
-* 固定された垂直方向の \paper スペース変数::
-* 可変な垂直方向の \paper スペース変数::
-* 水平方向の \paper スペース変数::
-* 他の \paper 変数::
+* 固定された垂直方向の paper スペース変数::
+* 可変な垂直方向の paper スペース変数::
+* 水平方向の paper スペース変数::
+* 他の paper 変数::
 @end menu
 
 
-@node \paper ブロック
+@node paper ブロック
 @subsection @code{\paper} ブロック
 @translationof The \paper block
 
@@ -317,11 +317,11 @@ Scheme 関数
 
 自動拡縮によって影響を受ける垂直方向の長さは
 @code{top-margin} と @code{bottom-margin} です
-(@ref{固定された垂直方向の \paper スペース変数} を参照してください)。@c
+(@ref{固定された垂直方向の paper スペース変数,,固定された垂直方向の @code{@bs{}paper} スペース変数} を参照してください)。@c
 自動拡縮によって影響を受ける水平方向の長さは
 @code{right-margin}, @code{inner-margin}, @code{outer-margin},
 @code{binding-offset}, @code{indent}, それに @code{short-indent} です
-(@ref{水平方向の \paper スペース変数} を参照してください)。
+(@ref{水平方向の paper スペース変数,,水平方向の @code{@bs{}paper} スペース変数} を参照してください)。
 
 これらの長さに対するデフォルト値は
 @code{top-margin-default}, @code{bottom-margin-default} 等の内部変数を@c
@@ -333,15 +333,15 @@ Scheme 関数
 
 @seealso
 記譜法リファレンス:
-@ref{固定された垂直方向の \paper スペース変数},
-@ref{水平方向の \paper スペース変数}
+@ref{固定された垂直方向の paper スペース変数,,固定された垂直方向の @code{@bs{}paper} スペース変数},
+@ref{水平方向の paper スペース変数,,水平方向の @code{@bs{}paper} スペース変数}
 
 インストールされているファイル:
 @file{ly/paper-defaults-init.ly},
 @file{scm/paper.scm}
 
 
-@node 固定された垂直方向の \paper スペース変数
+@node 固定された垂直方向の paper スペース変数
 @subsection 固定された垂直方向の @code{\paper} スペース変数
 @translationof Fixed vertical spacing \paper variables
 
@@ -409,7 +409,7 @@ Scheme 関数
 明示的に定義された紙面サイズは、ユーザ定義の上または下のマージン設定を上書きします。
 
 
-@node 可変な垂直方向の \paper スペース変数
+@node 可変な垂直方向の paper スペース変数
 @subsection 可変な垂直方向の @code{\paper} スペース変数
 @translationof Flexible vertical spacing \paper variables
 
@@ -430,7 +430,7 @@ Scheme 関数
 
 @menu
 * 可変な垂直方向スペース連想リストの構造::
-* 可変な垂直方向の \paper スペース変数のリスト::
+* 可変な垂直方向の paper スペース変数のリスト::
 @end menu
 
 
@@ -517,7 +517,7 @@ largest of:
 @end example
 
 
-@node 可変な垂直方向の \paper スペース変数のリスト
+@node 可変な垂直方向の paper スペース変数のリスト
 @unnumberedsubsubsec 可変な垂直方向の @code{\paper} スペース変数のリスト
 @translationof List of flexible vertical spacing \paper variables
 
@@ -594,7 +594,7 @@ score の最後のシステムと、その後に score の最初のシステム
 @rlsr{Spacing}
 
 
-@node 水平方向の \paper スペース変数
+@node 水平方向の paper スペース変数
 @subsection 水平方向の @code{\paper} スペース変数
 @translationof Horizontal spacing \paper variables
 
@@ -603,13 +603,13 @@ score の最後のシステムと、その後に score の最初のシステム
 @ref{紙面サイズに応じた自動拡縮} を参照してください。}
 
 @menu
-* 幅とマージンの \paper 変数::
-* 両面モードのための \paper 変数::
-* シフトとインデントのための \paper 変数::
+* 幅とマージンの paper 変数::
+* 両面モードのための paper 変数::
+* シフトとインデントのための paper 変数::
 @end menu
 
 
-@node 幅とマージンの \paper 変数
+@node 幅とマージンの paper 変数
 @unnumberedsubsubsec 幅とマージンの @code{\paper} 変数
 @translationof \paper variables for widths and margins
 
@@ -716,7 +716,7 @@ score の最後のシステムと、その後に score の最初のシステム
 明示的に定義された紙面サイズは、ユーザ定義の左または右のマージン設定を上書きします。
 
 
-@node 両面モードのための \paper 変数
+@node 両面モードのための paper 変数
 @unnumberedsubsubsec 両面モードのための @code{\paper} 変数
 @translationof \paper variables for two-sided mode
 
@@ -770,7 +770,7 @@ book の一部であるページすべてが見開きページの外側に持つ
 @file{ly/paper-defaults-init.ly}
 
 
-@node シフトとインデントのための \paper 変数
+@node シフトとインデントのための paper 変数
 @unnumberedsubsubsec シフトとインデントのための @code{\paper} 変数
 @translationof \paper variables for shifts and indents
 
@@ -815,19 +815,19 @@ score の最初のシステムに対するインデントのレベルです。@c
 @rlsr{Spacing}
 
 
-@node 他の \paper 変数
+@node 他の paper 変数
 @subsection 他の @code{\paper} 変数
 @translationof Other \paper variables
 
 @menu
-* 改行のための \paper 変数::
-* 改ページのための \paper 変数::
-* ページ番号のための \paper 変数::
-* その他の \paper 変数::
+* 改行のための paper 変数::
+* 改ページのための paper 変数::
+* ページ番号のための paper 変数::
+* その他の paper 変数::
 @end menu
 
 
-@node 改行のための \paper 変数
+@node 改行のための paper 変数
 @unnumberedsubsubsec 改行のための @code{\paper} 変数
 @translationof \paper variables for line breaking
 
@@ -871,7 +871,7 @@ score で使用すべきシステム数です。@c
 @ref{改行}
 
 
-@node 改ページのための \paper 変数
+@node 改ページのための paper 変数
 @unnumberedsubsubsec 改ページのための @code{\paper} 変数
 @translationof \paper variables for page breaking
 
@@ -880,20 +880,20 @@ score で使用すべきシステム数です。@c
 
 @table @code
 
-@item blank-after-score-page-force
-@funindex blank-after-score-page-force
+@item blank-after-score-page-penalty
+@funindex blank-after-score-page-penalty
 
 楽譜の後ろ (と次の楽譜の前) に強制的に白紙を挿入します。@c
-デフォルトでは、この値は @code{blank-page-force} よりも小さいため、@c
+デフォルトでは、この値は @code{blank-page-penalty} よりも小さいため、@c
 楽譜の途中ではなく後ろに白紙が挿入されます。
 
-@item blank-last-page-force
-@funindex blank-last-page-force
+@item blank-last-page-penalty
+@funindex blank-last-page-penalty
 
 楽譜の最後が奇数ページの場合、楽譜の後ろに白紙を挿入します。
 
-@item blank-page-force
-@funindex blank-page-force
+@item blank-page-penalty
+@funindex blank-page-penalty
 
 楽譜の途中に強制的に白紙を挿入します。@c
 この値は @code{ly:optimal-breaking} では用いられません。@c
@@ -936,7 +936,7 @@ score で使用すべきページ数です。@c
 @file{ly/paper-defaults-init.ly}
 
 
-@node ページ番号のための \paper 変数
+@node ページ番号のための paper 変数
 @unnumberedsubsubsec ページ番号のための @code{\paper} 変数
 @translationof \paper variables for page numbering
 
@@ -986,7 +986,7 @@ increased by one.  Default: @code{#f}.
 ページ 1 が右側にくるようにする必要があります。
 
 
-@node その他の \paper 変数
+@node その他の paper 変数
 @unnumberedsubsubsec その他の @code{\paper} 変数
 @translationof Miscellaneous \paper variables
 
@@ -1093,15 +1093,15 @@ increased by one.  Default: @code{#f}.
 
 @item
 @code{line-width}, @code{ragged-right} それに @code{ragged-last}
-(@ref{幅とマージンの \paper 変数} を参照してください)
+(@ref{幅とマージンの paper 変数,,幅とマージンの @code{@bs{}paper} 変数} を参照してください)
 
 @item
 @code{indent} と @code{short-indent}
-(@ref{シフトとインデントのための \paper 変数} を参照してください)
+(@ref{シフトとインデントのための paper 変数,,シフトとインデントのための @code{@bs{}paper} 変数} を参照してください)
 
 @item
 @code{system-count}
-(@ref{改行のための \paper 変数} を参照してください)
+(@ref{改行のための paper 変数,,改行のための @code{@bs{}paper} 変数} を参照してください)
 
 @end itemize
 
@@ -1112,12 +1112,12 @@ increased by one.  Default: @code{#f}.
   indent = 2\cm
   \context @{
     \StaffGroup
-    \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8
+    \override StaffGrouper.staff-staff-spacing.basic-distance = #8
   @}
   \context @{
     \Voice
-    \override TextScript #'padding = #1
-    \override Glissando #'thickness = #3
+    \override TextScript.padding = #1
+    \override Glissando.thickness = #3
   @}
 @}
 @end example
@@ -1139,8 +1139,8 @@ increased by one.  Default: @code{#f}.
 \layout @{
   \context @{
     \Voice
-    \override TextScript #'color = #magenta
-    \override Glissando #'thickness = #1.5
+    \override TextScript.color = #magenta
+    \override Glissando.thickness = #1.5
   @}
 @}
 @end example
@@ -1159,7 +1159,7 @@ increased by one.  Default: @code{#f}.
 layoutVariable = \layout @{
   \context @{
     \Voice
-    \override NoteHead #'font-size = #4
+    \override NoteHead.font-size = #4
   @}
 @}
 @end example
@@ -1178,7 +1178,7 @@ layoutVariable = \layout @{
   \layoutVariable
   \context @{
     \Voice
-    \override NoteHead #'color = #red
+    \override NoteHead.color = #red
   @}
 @}
 @end example
@@ -1398,18 +1398,18 @@ c4 c c c |
   \remove "Forbid_line_break_engraver"
 } \relative c'' {
   <<
-    { c2. \times 2/3 { c4 c c } c2. | }
+    { c2. \tuplet 3/2 { c4 c c } c2. | }
     { s1 | \break s1 | }
   >>
 }
 @end lilypond
 
 同様に、通常は連桁が小節線を跨いでいる場合も、改行は禁止されます。@c
-この振る舞いは、@code{\override Beam #'breakable = ##t} により、@c
+この振る舞いは、@code{\override Beam.breakable = ##t} により、@c
 変更することができます:
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override Beam #'breakable = ##t
+\override Beam.breakable = ##t
 c2. c8[ c | \break
 c8 c] c2. |
 @end lilypond
@@ -1481,7 +1481,7 @@ c8 c] c2. |
 
 @seealso
 記譜法リファレンス:
-@ref{改行のための \paper 変数}
+@ref{改行のための paper 変数,,改行のための @code{@bs{}paper} 変数}
 
 コード断片集:
 @rlsr{Spacing}
@@ -1513,7 +1513,7 @@ score や最上位レベルのマークアップの間に挿入することが
 これらの設定が @code{#t} にセットされている場合、@c
 すべてのページあるいは最後のページのシステムは@c
 ページの垂直方向全体には広がりません。@c
-@ref{固定された垂直方向の \paper スペース変数} を参照してください。
+@ref{固定された垂直方向の paper スペース変数,,固定された垂直方向の @code{@bs{}paper} スペース変数} を参照してください。
 
 改ページは @code{page-breaking} 関数によって算出されます。@c
 LilyPond は改ページを算出するために 3 つのアルゴリズムを提供します:
@@ -1573,7 +1573,7 @@ LilyPond は改ページを算出するために 3 つのアルゴリズムを
 
 @seealso
 記譜法リファレンス:
-@ref{改行のための \paper 変数}
+@ref{改行のための paper 変数,,改行のための @code{@bs{}paper} 変数}
 
 コード断片集:
 @rlsr{Spacing}
@@ -1641,7 +1641,7 @@ LilyPond が改ページを決定するためのデフォルトの手法です
 コンテキスト プロパティ @code{minimumPageTurnLength} を読み込んで、@c
 どれくらい音符が無いセクションが続いたらページめくりを考慮するかを決定します。@c
 @code{minimumPageTurnLength} のデフォルト値は
-@code{(ly:make-moment 1 1)} です。@c
+@code{(ly:make-moment 1/1)} です。@c
 ページめくりを不可にしたいのならば、@c
 @code{minimumPageTurnLength} に非常に大きな値をセットします。
 
@@ -1651,7 +1651,7 @@ LilyPond が改ページを決定するためのデフォルトの手法です
   a4 b c d |
   R1 | % ここでページめくりが許可されます
   a4 b c d |
-  \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
+  \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
   R1 | % ここではページめくりは許可されません
   a4 b r2 |
   R1*2 | % ここでページめくりが許可されます
@@ -1743,8 +1743,8 @@ LilyPond はしばしば明示的な @code{\break} や @code{\pageBreak} を@c
 この振る舞いを上書きするための 2 つのコマンドがあります:
 
 @example
-\override NonMusicalPaperColumn #'line-break-permission = ##f
-\override NonMusicalPaperColumn #'page-break-permission = ##f
+\override NonMusicalPaperColumn.line-break-permission = ##f
+\override NonMusicalPaperColumn.page-break-permission = ##f
 @end example
 
 @code{line-break-permission} が偽に上書きされた場合、@c
@@ -1778,8 +1778,8 @@ music = \relative c'' { c8 c c c }
   \layout {
     \context {
       \Score
-      \override NonMusicalPaperColumn #'line-break-permission = ##f
-      \override NonMusicalPaperColumn #'page-break-permission = ##f
+      \override NonMusicalPaperColumn.line-break-permission = ##f
+      \override NonMusicalPaperColumn.page-break-permission = ##f
     }
   }
 }
@@ -1852,20 +1852,16 @@ music = \relative c'' { c4 c c c }
 \score {
   \new Staff <<
     \new Voice {
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 0))
+      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
       s1 * 2 \break
 
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 35))
+      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 35))
       s1 * 3 \break
 
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 70))
+      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 70))
       s1 * 6 \break
 
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 105))
+      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 105))
       s1 * 5 \break
     }
     \new Voice {
@@ -1943,7 +1939,7 @@ music = \relative c'' { c4 c c c }
 仕組みだけを説明しているということに注意してください。@c
 システム、score、マークアップ、それにマージン間の垂直方向のスペースは、@c
 @code{\paper} 変数によって制御されます
--- @ref{可変な垂直方向の \paper スペース変数} で説明しています。
+-- @ref{可変な垂直方向の paper スペース変数,,可変な垂直方向の @code{@bs{}paper} スペース変数} で説明しています。
 
 @menu
 * システム内部のスペース プロパティ::
@@ -2013,14 +2009,14 @@ music = \relative c'' { c4 c c c }
 #(define zero-space '((padding . -inf.0) (basic-distance . 0)))
 
 alignToZero = \with {
-  \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space
-  \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space
+  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
+  \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
 }
 lowerCaseChords = \with {
   chordNameLowercaseMinor = ##t
 }
 staffAffinityDown = \with {
-  \override VerticalAxisGroup #'staff-affinity = #DOWN
+  \override VerticalAxisGroup.staff-affinity = #DOWN
 }
 labelContext =
 #(define-music-function
@@ -2038,13 +2034,13 @@ labelContext =
                          \lowerCaseChords }
   \context { \FretBoards  \alignToZero \staffAffinityDown }
   \context { \Score
-    \override BarLine #'stencil = ##f
-    \override DynamicText #'self-alignment-X = #-1
-    \override FretBoard #'X-offset = #1.75
-    \override InstrumentName #'minimum-Y-extent = #'(-2 . 2)
-    \override InstrumentName #'extra-offset = #'(0 . -0.5)
-    \override TextScript #'minimum-Y-extent = #'(-2 . 3)
-    \override TimeSignature #'stencil = ##f
+    \omit BarLine
+    \override DynamicText.self-alignment-X = #-1
+    \override FretBoard.X-offset = #1.75
+    \override InstrumentName.minimum-Y-extent = #'(-2 . 2)
+    \override InstrumentName.extra-offset = #'(0 . -0.5)
+    \override TextScript.minimum-Y-extent = #'(-2 . 3)
+    \omit TimeSignature
   }
 }
 
@@ -2094,7 +2090,7 @@ labelContext =
 
 垂直方向のスペースのグラフィカル オブジェクト プロパティは
 (@code{staff-affinity} を除いて)、@c
-@ref{可変な垂直方向の \paper スペース変数} で説明した
+@ref{可変な垂直方向の paper スペース変数,,可変な垂直方向の @code{@bs{}paper} スペース変数} で説明した
 @code{\paper} スペース変数と同じ連想配列構造を使用します。
 連想配列を変更する方法は、@ref{Modifying alists} で説明します。@c
 グラフィカル オブジェクト プロパティの調節は、@c
@@ -2107,12 +2103,11 @@ labelContext =
 
 @example
 \new Staff \with @{
-  \override VerticalAxisGroup #'default-staff-staff-spacing
-       #'basic-distance = #10
+  \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
 @} @{ @dots{} @}
 
 \new Staff \with @{
-  \override VerticalAxisGroup #'default-staff-staff-spacing =
+  \override VerticalAxisGroup.default-staff-staff-spacing =
     #'((basic-distance . 10)
        (minimum-distance . 9)
        (padding . 1)
@@ -2127,8 +2122,7 @@ labelContext =
 \layout @{
   \context @{
     \Staff
-    \override VerticalAxisGroup #'default-staff-staff-spacing
-         #'basic-distance = #10
+    \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
   @}
 @}
 @end example
@@ -2247,7 +2241,7 @@ labelContext =
 
 @seealso
 記譜法リファレンス:
-@ref{可変な垂直方向の \paper スペース変数},
+@ref{可変な垂直方向の paper スペース変数,,可変な垂直方向の @code{@bs{}paper} スペース変数},
 @ref{Modifying alists}
 
 インストールされているファイル:
@@ -2294,7 +2288,7 @@ labelContext =
 \layout {
   \context {
     \Staff
-    \override VerticalAxisGroup #'default-staff-staff-spacing =
+    \override VerticalAxisGroup.default-staff-staff-spacing =
       #'((basic-distance . 8)
          (minimum-distance . 7)
          (padding . 1))
@@ -2317,7 +2311,7 @@ labelContext =
   % 'padding に負の値を設定することにより、譜を重ねることができます。
   % 'basic-distance が取り得る最小の値は 0 です。
   \new Staff \with {
-    \override VerticalAxisGroup #'default-staff-staff-spacing =
+    \override VerticalAxisGroup.default-staff-staff-spacing =
       #'((basic-distance . 3.5)
          (padding . -10))
   } { \clef bass g2 r | }
@@ -2372,14 +2366,14 @@ labelContext =
 \layout {
   \context {
     \Score
-    \override StaffGrouper #'staff-staff-spacing #'padding = #0
-    \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1
+    \override StaffGrouper.staff-staff-spacing.padding = #0
+    \override StaffGrouper.staff-staff-spacing.basic-distance = #1
   }
 }
 
 <<
   \new PianoStaff \with {
-    \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+    \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
   } <<
     \new Staff { c'1 }
     \new Staff { c'1 }
@@ -2439,24 +2433,23 @@ labelContext =
 \layout {
   \context {
     \Lyrics
-    \override VerticalAxisGroup
-      #'nonstaff-nonstaff-spacing #'stretchability = #1000
+    \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
   }
 }
 
 \new StaffGroup
 <<
   \new Staff \with {
-    \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30))
+    \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
   } { c'1 }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #UP
+    \override VerticalAxisGroup.staff-affinity = #UP
   } \lyricmode { up }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #CENTER
+    \override VerticalAxisGroup.staff-affinity = #CENTER
   } \lyricmode { center }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #DOWN
+    \override VerticalAxisGroup.staff-affinity = #DOWN
   } \lyricmode { down }
   \new Staff { c'1 }
 >>
@@ -2522,21 +2515,16 @@ labelContext =
 @code{NonMusicalPaperColumn} を上書きする例をいくつか挙げます:
 
 @example
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
                                  (Y-offset . 40))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (15)))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20)
+\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
                                  (Y-offset . 40)
                                  (alignment-distances . (15)))
 @end example
@@ -2590,14 +2578,11 @@ labelContext =
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 0))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 40))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 80))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 80))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -2630,16 +2615,13 @@ labelContext =
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 20)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 20)
                                            (alignment-distances . (15)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 60)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
                                            (alignment-distances . (15)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 100)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
                                            (alignment-distances . (15)))
           s1*5 \break
         }
@@ -2673,16 +2655,13 @@ labelContext =
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 0)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0)
                                            (alignment-distances . (30 10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 60)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
                                            (alignment-distances . (10 10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 100)
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
                                            (alignment-distances . (10 30)))
           s1*5 \break
         }
@@ -2759,13 +2738,13 @@ LilyPond は譜外部オブジェクトを、既に配置済みのオブジェ
 @lilypond[quote,ragged-right,relative=2,verbatim]
 c4_"Text"\pp
 r2.
-\once \override TextScript #'outside-staff-priority = #1
+\once \override TextScript.outside-staff-priority = #1
 c4_"Text"\pp % ここでは、テキストが譜の近くに配置されます
 r2.
 % outside-staff-priority に数ではない値を設定することにより、
 % 自動衝突回避を無効にします
-\once \override TextScript #'outside-staff-priority = ##f
-\once \override DynamicLineSpanner #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
+\once \override DynamicLineSpanner.outside-staff-priority = ##f
 c4_"Text"\pp % ここでは、2 つのオブジェクトが衝突します
 @end lilypond
 
@@ -2775,9 +2754,9 @@ c4_"Text"\pp % ここでは、2 つのオブジェクトが衝突します
 
 @c KEEP LY
 @lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18]
-\once \override TextScript #'outside-staff-padding = #0
+\once \override TextScript.outside-staff-padding = #0
 a'^"このテキストは音符のすぐ近くに配置されます。"
-\once \override TextScript #'outside-staff-padding = #3
+\once \override TextScript.outside-staff-padding = #3
 c^"このテキストは前のテキストから離れた位置に配置されます"
 c^"この手キスとは前にテキストの近くに配置されます"
 @end lilypond
@@ -2801,7 +2780,7 @@ c4
 c''2
 % outside-staff-horizontal-padding を設定することで修正します
 R1
-\once \override TextScript #'outside-staff-horizontal-padding = #1
+\once \override TextScript.outside-staff-horizontal-padding = #1
 c,,4^"Text"
 c4
 c''2
@@ -2920,8 +2899,8 @@ c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4
 {
   c'4 e''4 e'4 b'4 |
   b'4 e''4 b'4 e''4 |
-  \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
-  \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
+  \override Staff.NoteSpacing.stem-spacing-correction = #1.5
+  \override Staff.StaffSpacing.stem-spacing-correction = #1.5
   c'4 e''4 e'4 b'4 |
   b'4 e''4 b'4 e''4 |
 }
@@ -2949,7 +2928,7 @@ Essay on automated music engraving:
 -- 必要に応じて、パディングの値を調整しています。
 
 @example
- \override Score.NonMusicalPaperColumn #'padding = #10
+ \override Score.NonMusicalPaperColumn.padding = #10
 @end example
 
 スペースを減らすための手段はありません。
@@ -3024,8 +3003,7 @@ c16[ c c8]
   \layout {
     \context {
       \Score
-      \override SpacingSpanner
-        #'base-shortest-duration = #(ly:make-moment 1 16)
+      \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
     }
   }
 }
@@ -3045,14 +3023,14 @@ c16[ c c8]
 \score {
   <<
     \new Staff {
-      \times 4/5 {
+      \tuplet 5/4 {
         c8 c8 c8 c8 c8
       }
       c8 c8 c8 c8
     }
     \new Staff {
       c8 c8 c8 c8
-      \times 4/5 {
+      \tuplet 5/4 {
         c8 c8 c8 c8 c8
       }
     }
@@ -3060,7 +3038,7 @@ c16[ c c8]
   \layout {
     \context {
       \Score
-      \override SpacingSpanner #'uniform-stretching = ##t
+      \override SpacingSpanner.uniform-stretching = ##t
     }
   }
 }
@@ -3071,8 +3049,8 @@ c16[ c c8]
 音符にスペースが割り当てられます。
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override Score.SpacingSpanner #'strict-note-spacing = ##t
-\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c]  c32[ c32] }
+\override Score.SpacingSpanner.strict-note-spacing = ##t
+\new Staff { c8[ c \clef alto c \grace { c16 c } c8 c c]  c32[ c32] }
 @end lilypond
 
 @seealso
@@ -3158,7 +3136,7 @@ LilyPond はプロポーショナル ノーテーション用に 5 つの設定
 @item @code{uniform-stretching}
 @item @code{strict-note-spacing}
 @item @code{\remove "Separating_line_group_engraver"}
-@item @code{\override PaperColumn #'used = ##t}
+@item @code{\override PaperColumn.used = ##t}
 @end itemize
 
 以下の例では、@c
@@ -3175,7 +3153,7 @@ LilyPond はプロポーショナル ノーテーション用に 5 つの設定
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
@@ -3205,7 +3183,7 @@ LilyPond はプロポーショナル ノーテーション用に 5 つの設定
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
@@ -3213,7 +3191,7 @@ LilyPond はプロポーショナル ノーテーション用に 5 つの設定
  \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
+      proportionalNotationDuration = #(ly:make-moment 1/20)
     }
   }
 }
@@ -3238,10 +3216,10 @@ LilyPond はプロポーショナル ノーテーション用に 5 つの設定
 これはすべての音楽要素へのスペースに関係する参照演奏時間です。@c
 LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
 -- 全音符の分数を表す分子と分母です。@c
-それゆえ、@code{(ly:make-moment 1 20)} という呼び出しは、@c
+それゆえ、@code{(ly:make-moment 1/20)} という呼び出しは、@c
 20 分音符の参照演奏時間となります。@c
-@code{(ly:make-moment 1 16)}, @code{(ly:make-moment 1 8)}, それに
-@code{(ly:make-moment 3 97)} という値はすべてとり得る値です。
+@code{(ly:make-moment 1/16)}, @code{(ly:make-moment 1/8)}, それに
+@code{(ly:make-moment 3/97)} という値はすべてとり得る値です。
 
 では、どのように @code{proportionalNotationDuration} に渡す@c
 適切な参照演奏時間を決めるのでしょうか?@c
@@ -3256,7 +3234,7 @@ LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
@@ -3264,7 +3242,7 @@ LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 8)
+      proportionalNotationDuration = #(ly:make-moment 1/8)
     }
   }
 }
@@ -3274,7 +3252,7 @@ LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
@@ -3282,7 +3260,7 @@ LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 16)
+      proportionalNotationDuration = #(ly:make-moment 1/16)
     }
   }
 }
@@ -3292,7 +3270,7 @@ LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
@@ -3300,7 +3278,7 @@ LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 32)
+      proportionalNotationDuration = #(ly:make-moment 1/32)
     }
   }
 }
@@ -3325,12 +3303,12 @@ LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
     \new RhythmicStaff {
-      \times 8/9 {
+      \tuplet 9/8 {
         c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
       }
     }
@@ -3351,12 +3329,12 @@ LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
     \new RhythmicStaff {
-      \times 8/9 {
+      \tuplet 9/8 {
         c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
       }
     }
@@ -3364,7 +3342,7 @@ LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
+      proportionalNotationDuration = #(ly:make-moment 1/20)
     }
   }
 }
@@ -3383,12 +3361,12 @@ LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
     \new RhythmicStaff {
       c'2
       c'16 c'16 c'16 c'16
-      \times 4/5 {
+      \tuplet 5/4 {
         c'16 c'16 c'16 c'16 c'16
       }
     }
     \new RhythmicStaff {
-      \times 8/9 {
+      \tuplet 9/8 {
         c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
       }
     }
@@ -3396,8 +3374,8 @@ LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
-      \override SpacingSpanner #'uniform-stretching = ##t
+      proportionalNotationDuration = #(ly:make-moment 1/20)
+      \override SpacingSpanner.uniform-stretching = ##t
     }
   }
 }
@@ -3493,7 +3471,7 @@ OFF であるかのどちらかであるということです。@c
 
 @lilypond[quote,verbatim,ragged-right]
 \new Staff {
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
   c''8
   c''8
   c''8
@@ -3503,8 +3481,8 @@ OFF であるかのどちらかであるということです。@c
 }
 
 \new Staff {
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
-  \override Score.SpacingSpanner #'strict-note-spacing = ##t
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
+  \override Score.SpacingSpanner.strict-note-spacing = ##t
   c''8
   c''8
   c''8
@@ -3526,11 +3504,11 @@ OFF であるかのどちらかであるということです。@c
 以下のような設定です:
 
 @itemize
-@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
+@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
 @item @code{tupletFullLength = ##t}
-@item @code{\override Beam #'breakable = ##t}
-@item @code{\override Glissando #'breakable = ##t}
-@item @code{\override TextSpanner #'breakable = ##t}
+@item @code{\override Beam.breakable = ##t}
+@item @code{\override Glissando.breakable = ##t}
+@item @code{\override TextSpanner.breakable = ##t}
 @item @code{\remove "Forbid_line_break_engraver" in the Voice context}
 @end itemize
 
@@ -3690,7 +3668,7 @@ OFF であるかのどちらかであるということです。@c
 
 @lilypond[verbatim,quote,relative=1]
 e4 c g\f c
-e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
+e4 c g-\tweak X-offset #-2.7 -\tweak Y-offset #2.5 \f c
 @end lilypond
 
 @item
@@ -3729,8 +3707,7 @@ e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
   \layout {
     \context {
       \Score
-      \override SpacingSpanner
-        #'common-shortest-duration = #(ly:make-moment 1 2)
+      \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/2)
     }
   }
 }
index e79dbb450f644b5a81a9bf9475830eb36dd19eb5..e8beabaabb6da63382d7fc984aa08c7b47f2775a 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: 3ef893f1fe182e9f6cf5841cbff0706789bd3361
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
index 223d64e5cbc380ef3b61f89369bb6ba818e92cb1..7f048afa84f778516834e13f59a4dac364e8586d 100644 (file)
@@ -1,12 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 
 @c Translators: Yoshiki Sawada
@@ -75,7 +75,7 @@
 
 @notation{stave: 譜} (@notation{staff}: 譜 (表) の単称) は
 @code{\new} コマンドや @code{\context} コマンドで作成されます。@c
-詳細は @ref{Creating contexts} を参照してください。
+詳細は @ref{Creating and referencing contexts} を参照してください。
 
 基本的な譜コンテキストは @code{Staff} です:
 
 @rglos{staves}
 
 記譜法リファレンス:
-@ref{Creating contexts},
+@ref{Creating and referencing contexts},
 @ref{Percussion staves},
 @ref{Showing melody rhythms},
 @ref{Default tablatures},
@@ -449,11 +449,11 @@ f'4 d \startStaff g, e
 
 @lilypond[verbatim,quote,relative=2]
 f4 d \stopStaff
-\override Staff.StaffSymbol #'line-count = #2
+\override Staff.StaffSymbol.line-count = #2
 \startStaff g, e |
 
 f'4 d \stopStaff
-\revert Staff.StaffSymbol #'line-count
+\revert Staff.StaffSymbol.line-count
 \startStaff g, e |
 @end lilypond
 
@@ -465,16 +465,16 @@ f'4 d \stopStaff
 
 @lilypond[verbatim,quote,relative=2]
 f4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(1 3 5 -1 -3)
+\override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
 \startStaff g, e |
 f'4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(8 6.5 -6 -8 -0.5)
+\override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
 \startStaff g, e
 @end lilypond
 
 新しい譜線に対応して、@c
 音部記号とミドル C の位置を調節する必要があるかもしれません。@c
-@ref{音部記号} を参照してください。
+@ref{Clef} を参照してください。
 
 譜線の太さを変えることができます。@c
 デフォルトでは、加線 (訳者注: ledger line, 譜の上下に突き出た符頭と符幹に@c
@@ -482,7 +482,7 @@ f'4 d \stopStaff
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'thickness = #3
+  \override StaffSymbol.thickness = #3
 }
 { f4 d g, e }
 @end lilypond
@@ -493,8 +493,8 @@ f'4 d \stopStaff
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'thickness = #2
-  \override StaffSymbol #'ledger-line-thickness = #'(0.5 . 0.4)
+  \override StaffSymbol.thickness = #2
+  \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
 }
 { f'4 a, a,, f }
 @end lilypond
@@ -503,7 +503,7 @@ f'4 d \stopStaff
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'ledger-positions = #'(-3 -2 -1 2 5 6)
+  \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
 }
 { f'4 a, a,, f }
 @end lilypond
@@ -513,24 +513,24 @@ f'4 d \stopStaff
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'ledger-extra = #4
+  \override StaffSymbol.ledger-extra = #4
 }
 { f'4 a, d, f, }
 @end lilypond
 
 譜の内部に加線を表示させることもできます。@c
 この場合、譜線のカスタマイズが必要です。@c
-以下の例は明示的に @code{legder-position} をセットしない場合とした場合の@c
+以下の例は明示的に @code{ledger-position} をセットしない場合とした場合の@c
 加線のデフォルト位置を示しています。@c
 以下の例で、@code{StaffSymbol} 全体に対する @code{\override} を元に戻すには@c
 @code{\stopStaff} を行う必要があります。
 
 @lilypond[fragment,quote,relative=1]
-\override Staff.StaffSymbol #'line-positions =   #'(-8 0 2 4)
+\override Staff.StaffSymbol.line-positions =   #'(-8 0 2 4)
 d4 e f g
 \stopStaff
 \startStaff
-\override Staff.StaffSymbol #'ledger-positions = #'(-8 -6 (-4 -2) 0)
+\override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
 d4 e f g
 @end lilypond
 
@@ -538,7 +538,7 @@ d4 e f g
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'staff-space = #1.5
+  \override StaffSymbol.staff-space = #1.5
 }
 { f'4 d, g, e, }
 @end lilypond
@@ -617,8 +617,8 @@ d4 e f g
       \remove "Time_signature_engraver"
       alignAboveContext = #"main"
       fontSize = #-3
-      \override StaffSymbol #'staff-space = #(magstep -3)
-      \override StaffSymbol #'thickness = #(magstep -3)
+      \override StaffSymbol.staff-space = #(magstep -3)
+      \override StaffSymbol.thickness = #(magstep -3)
       firstClef = ##f
     }
     { e4 d f e }
@@ -639,10 +639,10 @@ d4 e f g
 <<
   \new Staff = ossia \with {
     \remove "Time_signature_engraver"
-    \override Clef #'transparent = ##t
+    \hide Clef
     fontSize = #-3
-    \override StaffSymbol #'staff-space = #(magstep -3)
-    \override StaffSymbol #'thickness = #(magstep -3)
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
   }
   { \stopStaff s1*6 }
 
@@ -673,16 +673,16 @@ d4 e f g
 @c そのようなケースでは、空白休符を使用する必要はまったくありません:
 @c @code{\startStaff} と @code{\stopStaff} が必要であるだけです。@c
 @code{\RemoveEmptyStaffContext} についての更なる情報は、@c
-@ref{譜を隠す} を参照してください。
+@ref{Hiding staves} を参照してください。
 
 @lilypond[verbatim,quote,ragged-right]
 <<
   \new Staff = ossia \with {
     \remove "Time_signature_engraver"
-    \override Clef #'transparent = ##t
+    \hide Clef
     fontSize = #-3
-    \override StaffSymbol #'staff-space = #(magstep -3)
-    \override StaffSymbol #'thickness = #(magstep -3)
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
   } \relative c'' {
     R1*3
     c4 e8 d c2
@@ -700,7 +700,7 @@ d4 e f g
 \layout {
   \context {
     \Staff \RemoveEmptyStaves
-    \override VerticalAxisGroup #'remove-first = ##t
+    \override VerticalAxisGroup.remove-first = ##t
   }
 }
 @end lilypond
@@ -800,7 +800,7 @@ d4 e f g
 @noindent
 譜に対してオッシア セクションを作成するために、@c
 @code{\RemoveEmptyStaffContext} を用いることもできます。@c
-詳細は @ref{オッシア譜} を参照してください。
+詳細は @ref{Ossia staves} を参照してください。
 
 @cindex hiding ancient staves (古代譜を隠す)
 @cindex hiding rhythmic staves (リズム譜を隠す)
@@ -859,8 +859,8 @@ d4 e f g
 以下のオーバライドを使用してください:
 
 @example
-\override StaffSymbol #'stencil = ##f
-\override NoteHead #'no-ledgers = ##t
+\omit StaffSymbol
+\override NoteHead.no-ledgers = ##t
 @end example
 
 @code{\Staff \RemoveEmptyStaves} に関連する既知の問題と警告は
@@ -933,8 +933,9 @@ d4 e f g
   { f2 g4 f }
   \new Staff \with {
     instrumentName = \markup {
-      \center-column { "Clarinet" }
-      \line { "in B" \smaller \flat }
+      \center-column { "Clarinet"
+        \line { "in B" \smaller \flat }
+      }
     }
   }
   { c4 b c2 }
@@ -946,7 +947,7 @@ d4 e f g
 
 しかしながら、楽器名が長い場合、@code{indent} 設定と @code{short-indent}
 設定の値を増やさない限り、譜グループの中にある楽器名は中央揃えされません。@c
-これらの設定についての詳細は @ref{シフトとインデントのための \paper 変数}
+これらの設定についての詳細は @ref{シフトとインデントのための paper 変数,,シフトとインデントのための @code{@bs{}paper} 変数}
 を参照してください。
 
 @lilypond[verbatim,quote,ragged-right]
@@ -982,7 +983,7 @@ d4 e f g
 楽器名を他のコンテキスト (@code{ChordNames} や @code{FiguredBass} など)
 に付け加えるには、
 そのコンテキストに @code{Instrument_name_engraver} を追加する必要があります。@c
-詳細は @ref{コンテキストのプラグインを変更する} を参照してください。
+詳細は @ref{Modifying context plug-ins} を参照してください。
 
 @cindex instrument names, changing (楽器名を変更する)
 @cindex changing instrument names (楽器名を変更する)
@@ -1049,7 +1050,7 @@ d4 e f g
 
 @seealso
 記譜法リファレンス:
-@ref{\paper variables for shifts and indents},
+@ref{シフトとインデントのための paper 変数,,シフトとインデントのための @code{@bs{}paper} 変数},
 @ref{Modifying context plug-ins}
 
 コード断片集:
@@ -1198,7 +1199,7 @@ oboeNotes = \relative c'' {
 @end lilypond
 
 引用にもタグを付けることができます。@c
-@ref{タグを使用する} を参照してください。
+@ref{Using tags} を参照してください。
 
 @seealso
 記譜法リファレンス:
@@ -1296,7 +1297,7 @@ d,,4 r a r
 用いることができます。@c
 これらのコマンドは @code{\quoteDuring} を特殊化したものです。@c
 @code{\quoteDuring} については、@c
-前のセクションの @ref{他のボイスを引用する} を参照してください。
+前のセクションの @ref{Quoting other voices} を参照してください。
 
 構文は以下の通りです:
 
@@ -1483,7 +1484,7 @@ bassClarinetNotes = \relative c' {
 合図に関連する他のマークアップ
 -- 音部変更と引用元の楽器を識別するラベルなど --
 にはタグを付けて楽譜に含めるかどうかを選択することができます。@c
-@ref{タグを使用する} を参照してください。
+@ref{Using tags} を参照してください。
 
 @lilypond[verbatim,quote]
 fluteNotes = \relative c'' {
index deea70d88c96b4f2ba8aec086ef83b61e080ad30..dfcfd646c63cd9682ed1941428a5930bac17d170 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: 6647daf0d6c8459d2b52bfc3a2a40bad4672fc7a
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 
 @c Translators: Yoshiki Sawada
@@ -138,7 +138,7 @@ a4_"scherzando" f
 処理速度を上げる必要がある場合は、以下を用います:
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
 @end example
 
 
@@ -157,7 +157,7 @@ a4_"scherzando" f
 ある音符から他の音符までの範囲に作成することができます:
 
 @lilypond[verbatim,quote,relative=2]
-\override TextSpanner #'(bound-details left text) = "rit."
+\override TextSpanner.bound-details.left.text = "rit."
 b1\startTextSpan
 e,\stopTextSpan
 @end lilypond
@@ -169,7 +169,7 @@ e,\stopTextSpan
 @code{\markup} ブロックを用いることで他の書体にすることができます。
 
 @lilypond[quote,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text) =
+\override TextSpanner.bound-details.left.text =
   \markup { \upright "rit." }
 b1\startTextSpan c
 e,\stopTextSpan
@@ -292,9 +292,6 @@ c  c
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-marks-at-the-end-of-a-line.ly}
 
-@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
-{aligning-marks-with-various-notation-objects.ly}
-
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-marks-on-every-staff.ly}
 
@@ -1206,11 +1203,7 @@ a1_\markup {
 
 @lilypond[quote,verbatim,relative=1]
 g1 bes
-ees-\markup {
-  \finger 4
-  \tied-lyric #"~"
-  \finger 1
-}
+ees\finger \markup \tied-lyric #"4~1"
 fis_\markup { \dynamic rf }
 bes^\markup {
   \beam #8 #0.1 #0.5
@@ -1454,12 +1447,12 @@ a1^\markup {
 @code{font-size} に提供する値が必要となります。
 
 @lilypond[quote,verbatim,relative=2]
-\override Score.RehearsalMark #'font-family = #'typewriter
+\override Score.RehearsalMark.font-family = #'typewriter
 \mark \markup "Ouverture"
-\override Voice.TextScript #'font-shape = #'italic
-\override Voice.TextScript #'font-series = #'bold
+\override Voice.TextScript.font-shape = #'italic
+\override Voice.TextScript.font-series = #'bold
 d2.^\markup "Allegro"
-\override Voice.TextScript #'font-size = #-3
+\override Voice.TextScript.font-size = #-3
 c4^smaller
 @end lilypond
 
@@ -1515,8 +1508,8 @@ FontConfig に認識されている任意のフォントを@c
 楽譜の中で使用することができます:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.TimeSignature #'font-name = #"Bitstream Charter"
-\override Staff.TimeSignature #'font-size = #2
+\override Staff.TimeSignature.font-name = #"Bitstream Charter"
+\override Staff.TimeSignature.font-size = #2
 \time 3/4
 
 a1_\markup {
@@ -1559,6 +1552,8 @@ lilypond -dshow-available-fonts x
 以下の例で示す方法に従ってフォント ファミリを指定することにより、@c
 @emph{roman}, @emph{sans} それに @emph{typewriter} フォント ファミリ@c
 として使用されるデフォルト フォントを変更することができます。@c
+この例ではグローバル譜サイズにセットされた値で自動的にフォントのサイズを@c
+伸縮しています。@c
 フォントについての説明は、@ref{フォントの説明} を参照してください。
 
 @cindex font families, setting (フォント ファミリを設定する)
@@ -1568,12 +1563,11 @@ lilypond -dshow-available-fonts x
 
 @lilypond[verbatim,quote]
 \paper  {
-  myStaffSize = #20
   #(define fonts
     (make-pango-font-tree "Times New Roman"
                           "Nimbus Sans"
                           "Luxi Mono"
-                           (/ myStaffSize 20)))
+                          (/ staff-height pt 20)))
 }
 
 \relative c'{
index dd010736c7ec9d7f10059cb8d55e4d883ffcb3a7..2525662768435fd7b784f19e854c3455eee39a71 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -70,14 +70,14 @@ orchestral strings.
 和音を弾く方向を付け加えることもできます
 -- @ref{Arpeggio} を参照してください。
 
-@item @rlearning{String quartet} に弦楽四重奏のテンプレートがあります。@c
-他の例はコード断片集で示されています。
+@item 弦楽四重奏のためのテンプレートが @rlearning{String quartet templates}
+にあります。他の例はコード断片集で示されています。
 
 @end itemize
 
 @seealso
 学習マニュアル:
-@rlearning{String quartet}
+@rlearning{String quartet templates}
 
 記譜法リファレンス:
 @ref{Text scripts},
index 6926442e3cfb4284dc78d8d7d9afeba3a11e5d81..0878902eb92a2f9f36e9f1da936d3fbb2cb93324 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
 
 @item
 たいていの声楽では歌詞として記述されたテキストを用います。@c
-この記譜法についての導入部は @rlearning{簡単な歌曲を作成する} にあります。
+この記譜法についての導入部は @rlearning{Setting simple songs} にあります。
 
 @item
 声楽はたいてい歌詞や他のテキスト要素 (配役の名前等) のために@c
 @code{markup} モードの使用を必要とします。@c
-@code{markup} モードの構文は @ref{テキスト マークアップの導入部} で@c
+@code{markup} モードの構文は @ref{Text markup introduction} で@c
 説明しています。
 
 @item
 声楽譜の最初に @notation{音域} (ambitus) が追加されることがあります。@c
-音域について @ref{音域} で説明しています。
+音域について @ref{Ambitus} で説明しています。
 
 @item
 デフォルトでは強弱記号は譜の下に配置されます。@c
 しかしながら、たいていの合唱の楽譜では、@c
-@ref{合唱のための楽譜レイアウト} で説明しているように、@c
+@ref{Score layouts for choral} で説明しているように、@c
 強弱記号は歌詞を避けるために譜の上に配置されます。
 
 @end itemize
 -- 上記の例のように歌詞の各音節の演奏時間を指定するか、@c
 @code{\addlyrics} または @code{\lyricsto} を用いて@c
 歌詞を自動的に旋律や他のボイスに揃えさせるかのどちらかです。@c
-前者は @ref{歌詞音節の手動演奏時間} で説明します。@c
-後者は @ref{歌詞音節の自動演奏時間} で説明します。
+前者は @ref{Manual syllable durations} で説明します。@c
+後者は @ref{Automatic syllable durations} で説明します。
 
 歌詞の単語または音節はアルファベット
 (さらに他のいくつかの文字 -- 以下を読んでください) で始まり、@c
 \lyricmode @{ lah lah lah @}
 @end example
 
-@cindex overrides in lyric mode (歌詞モードでのオーバライド)
-@funindex \override in \lyricmode
-
-同様に、歌詞モードではピリオドは前のアルファベットの並びに含まれてしまいます。@c
-このため、@code{\override} コマンドのピリオドの前後に@c
-空白を挿入する必要があります。@c
-以下のように記述しないでください
-
-@example
-\override Score.LyricText #'font-shape = #'italic
-@end example
-
-@noindent
-以下のように記述してください
-
-@example
-\override Score . LyricText #'font-shape = #'italic
-@end example
-
 句読点、アクセントが付いた文字を持つ歌詞、英語以外の言語の文字、@c
 あるいは特殊文字 (ハート記号や引用符等) は、UTF-8 エンコードで保存することで、@c
 直接入力することができます。@c
 
 歌詞の中で @code{\markup} を用いることで、@c
 歌詞の体裁を様々に制御することができます。@c
-多くのオプションの説明は、@ref{テキストをフォーマットする} を参照してください。
+多くのオプションの説明は、@ref{Formatting text} を参照してください。
 
 @snippets
 
 
 @seealso
 学習マニュアル:
-@rlearning{歌曲}
+@rlearning{Songs}
 
 記譜法リファレンス:
-@ref{歌詞音節の自動演奏時間},
-@ref{フォント},
-@ref{テキストをフォーマットする},
-@ref{入力モード},
-@ref{歌詞音節の手動演奏時間},
+@ref{Automatic syllable durations},
+@ref{Fonts},
+@ref{Formatting text},
+@ref{Input modes},
+@ref{Manual syllable durations},
 @ref{Special characters}
 
 内部リファレンス:
 @funindex \lyricsto
 
 歌詞はコンテキスト @code{Lyrics} の中で解釈されることで譜刻されます。@c
-@ref{コンテキストの説明} を参照してください。
+@ref{Contexts explained} を参照してください。
 
 @example
 \new Lyrics \lyricmode @{ @dots{} @}
 プロパティ @code{associatedVoice} を設定することにより、@c
 他のボイスあるいは (特殊な状況ですが) 関連付けされた旋律から@c
 歌詞の音節の演奏時間を取ることで、歌詞を自動的に揃えることができます。@c
-詳細は @ref{歌詞音節の自動演奏時間} を参照してください。
+詳細は @ref{Automatic syllable durations} を参照してください。
 
 @c KEEP LY
 @lilypond[quote,ragged-right,verbatim]
 歌詞の 2 番は歌詞を揃えるボイスを切り替える方法を示しています。@c
 この方法は、歌詞の 1 番と 2 番で音符への単語の揃え方が異なり、@c
 単語を揃えるべき音符がすべてボイス コンテキストの中にある場合に有用です。@c
-詳細は @ref{歌詞の節} を参照してください。
+詳細は @ref{Stanzas} を参照してください。
 
 @item
 歌詞を @code{¥lyricmode} で入力し、音節の演奏時間を明示的に示すことで、@c
 歌詞の 2 番は音符とは全く独立して単語を揃える方法を示しています。@c
 この方法は、歌詞の 1 番と 2 番で音符への単語の揃え方が異なり、@c
 単語を揃えるべき音符がボイス コンテキストから得られない場合に有用です。@c
-詳細は @ref{歌詞音節の手動演奏時間} を参照してください。@c
+詳細は @ref{Manual syllable durations} を参照してください。@c
 このテクニックは譜の上に会話をセットする場合にも有用です
--- これの例は @ref{音楽の中での会話} を参照してください。
+-- これの例は @ref{Dialogue over music} を参照してください。
 
 この方法で入力した音符はデフォルトでは音符に左揃えされますが、@c
 関連付されたボイスが存在する場合はそれを指定することで中央揃えされます。@c
-詳細は @ref{歌詞音節の手動演奏時間} を参照してください。
+詳細は @ref{Manual syllable durations} を参照してください。
 
 @end itemize
 
 
 3 つの方法のいずれでも、単語の音節の間にハイフンを描き、@c
 単語の後ろに延長線を描くことができます。@c
-詳細は @ref{延長線とハイフン} を参照してください。
+詳細は @ref{Extenders and hyphens} を参照してください。
 
 歌詞を揃える @code{Voice} コンテキストが @qq{消滅} してはいけません。@c
 さもないと、その後の歌詞は失われてしまいます。@c
 ボイスは何もすることが無くなると消滅する可能性があります
--- @ref{コンテキストを残しておく} を参照してください。
+-- @ref{Keeping contexts alive} を参照してください。
 
 @subheading @code{\lyricsto} を用いる
 
 @code{¥lyricsto} コマンドは自動的に歌詞モードを呼び出すため、@c
 @code{¥lyricmode} の記述は省略できます。@c
 デフォルトでは、歌詞は音符の下に配置されます。@c
-配置場所を変更する方法は @ref{歌詞の垂直方向の配置} を参照してください。
+配置場所を変更する方法は @ref{Placing lyrics vertically} を参照してください。
 
 @subheading @code{\addlyrics} を用いる
 
 @end lilypond
 
 このテクニックは、譜の上に会話を書く場合に有用です
--- @ref{音楽の中での会話} を参照してください。
+-- @ref{Dialogue over music} を参照してください。
 
 歌詞を音符に中央揃えさせるには、@c
 @code{associatedVoice} に音符を保持しているボイス コンテキストをセットします。@c
 
 @item
 自動連桁を off にして、手動で連桁を付けられた音符はメリスマと見なされます。@c
-@ref{自動連桁の振る舞いを設定する} を参照してください。
+@ref{Setting automatic beam behavior} を参照してください。
 
 @lilypond[quote,relative=2,verbatim]
 <<
 
 代替手段として、@code{ignoreMelismata} に真をセットすることで@c
 すべてのメリスマを無視することができます。@c
-@ref{リズムが異なる歌詞の節} を参照してください。
+@ref{Stanzas with different rhythms} を参照してください。
 
 @code{melismaBusyProperties} がアクティブになっているパッセージの中で@c
 メリスマを使う必要がある場合、@c
@@ -1046,7 +1027,7 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
   <<
     \new Lyrics = "lyrics" \with {
       % 譜の上に配置する歌詞は以下のオーバライドを行う必要があります
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff {
       \new Voice = "melody" {
@@ -1079,7 +1060,7 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
     \new Lyrics = "contraltos" \with {
       % 譜の上に配置する歌詞は以下のオーバライドを行う必要があります
       % lyrics above a staff should have this override
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff {
       \new Voice = "contraltos" {
@@ -1100,9 +1081,9 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
 }
 @end lilypond
 
-他の歌詞と譜の組み合わせは、上記の例に磨きをかけるか、@c
-学習マニュアルの @rlearning{合唱} テンプレートを吟味することによって@c
-作り出すことができます。
+他の歌詞と譜の組み合わせは、上記の例に磨きをかけるか、学習マニュアルの@c
+中にあるテンプレート -- @rlearning{Vocal ensembles templates} を参照して@c
+ください -- を吟味することによって作り出すことができます。
 
 @snippets
 @lilypondfile[verbatim,quote,texidoc,doctitle]
@@ -1110,11 +1091,11 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
 
 @seealso
 学習マニュアル:
-@rlearning{Vocal ensembles}
+@rlearning{Vocal ensembles templates}
 
 記譜法リファレンス:
 @ref{Context layout order},
-@ref{Creating contexts}
+@ref{Creating and referencing contexts}
 
 
 @node 歌詞の水平方向の配置
@@ -1130,7 +1111,7 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
 @lilypond[relative=1,verbatim,quote,ragged-right]
 {
   c c c c
-  \override Lyrics.LyricSpace #'minimum-distance = #1.0
+  \override Lyrics.LyricSpace.minimum-distance = #1.0
   c c c c
 }
 \addlyrics {
@@ -1156,7 +1137,7 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
   \layout {
     \context {
       \Lyrics
-      \override LyricSpace #'minimum-distance = #1.0
+      \override LyricSpace.minimum-distance = #1.0
     }
   }
 }
@@ -1173,7 +1154,7 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
 この機能を無効にすることで、処理をわずかにスピードアップすることができます:
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
 @end example
 
 歌詞が小節線を避けるようにするには、以下を使います:
@@ -1184,7 +1165,7 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
     \Lyrics
       \consists "Bar_engraver"
       \consists "Separating_line_group_engraver"
-      \override BarLine #'transparent = ##t
+      \hide BarLine
   @}
 @}
 @end example
@@ -1200,7 +1181,7 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
 @subheading 1 回の繰り返し
 
 @emph{音楽} の繰り返しは別の場所で説明しています
--- @ref{繰り返し} を参照してください。@c
+-- @ref{Repeats} を参照してください。@c
 このセクションでは、@c
 歌詞を繰り返しのある音楽に追加する方法について説明します。
 
@@ -1847,7 +1828,7 @@ text = {
 <<
   \new Voice = melody \relative c' {
     f4 \appoggiatura a32 b4
-    \grace { f16[ a16] } b2
+    \grace { f16 a16 } b2
     \afterGrace b2 { f16[ a16] }
     \appoggiatura a32 b4
     \acciaccatura a8 b4
@@ -1876,7 +1857,7 @@ text = {
 @lilypond[verbatim,ragged-right,quote]
 <<
   \new Voice = melody \relative c' {
-    \grace { c16[( d e f] }
+    \grace { c16( d e f }
     g1) f
   }
   \new Lyrics \with { includeGraceNotes = ##t }
@@ -1904,9 +1885,9 @@ text = {
     <<
       \new Voice = "alternative" {
         \voiceOne
-        \times 2/3 {
+        \tuplet 3/2 {
           % show associations clearly.
-          \override NoteColumn #'force-hshift = #-3
+          \override NoteColumn.force-hshift = #-3
           f8 f g
         }
       }
@@ -2044,7 +2025,7 @@ text = \lyricmode {
           "It has two lines."
         }
       }
-      \vspace #0.1 % 次の歌詞との間に垂直方向のスペースを入れます
+      \combine \null \vspace #0.1 % 次の歌詞との間に垂直方向のスペースを入れます
       \line { \bold "3."
         \column {
           "This is verse three."
@@ -2060,7 +2041,7 @@ text = \lyricmode {
           "It has two lines."
         }
       }
-      \vspace #0.1 % 次の歌詞との間に垂直方向のスペースを入れます
+      \combine \null \vspace #0.1 % 次の歌詞との間に垂直方向のスペースを入れます
       \line { \bold "5."
         \column {
           "This is verse five."
@@ -2105,27 +2086,29 @@ text = \lyricmode {
 @itemize
 
 @item
-譜レイアウトを構築する際は、@ref{譜を表示する} を参照してください。
+譜レイアウトを構築する際は、@ref{Displaying staves} を参照してください。
 
 @item
-ピアノ譜を記述する際は、@ref{キーボードと他の複数譜の楽器} を参照してください。
+ピアノ譜を記述する際は、@ref{Keyboard and other multi-staff instruments}
+を参照してください。
 
 @item
-旋律に沿って歌詞を記述する際は、@ref{声楽で共通の記譜法} を参照してください。
+旋律に沿って歌詞を記述する際は、@ref{Common notation for vocal music}
+を参照してください。
 
 @item
-歌詞を配置する際は、@ref{歌詞の垂直方向の配置} を参照してください。
+歌詞を配置する際は、@ref{Placing lyrics vertically} を参照してください。
 
 @item
-歌詞の節を入力する際は、@ref{歌詞の節} を参照してください。
+歌詞の節を入力する際は、@ref{Stanzas} を参照してください。
 
 @item
 しばしば、歌曲は譜の上にコード ネームを付けて譜刻されます。@c
-これは、@ref{和音を表示する} で説明しています。
+これは、@ref{Displaying chords} で説明しています。
 
 @item
 ギター伴奏や他のフレット楽器による伴奏の和音のフレット ダイアグラムを@c
-譜刻する際は、@ref{フレットのある弦楽器で共通の記譜法} の
+譜刻する際は、@ref{Common notation for fretted strings} の
 @qq{フレット ダイアグラム マークアップ} を参照してください。
 
 @end itemize
@@ -2152,7 +2135,7 @@ text = \lyricmode {
 
 ボーカル パートと @q{和音モード} を組み合わせることによって、@c
 リード譜を譜刻することができます。@c
-和音モードの構文についての説明は @ref{和音記譜法} にあります。
+和音モードの構文についての説明は @ref{Chord notation} にあります。
 
 @snippets
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
@@ -2205,27 +2188,27 @@ text = \lyricmode {
 @item
 SATB (S: ソプラノ、A: アルト、T: テナー、B: バス) ボーカル譜の導入部は@c
 学習マニュアルにあります。@c
-@rlearning{4 パート SATB ボーカル譜} を参照してください。
+@rlearning{Four-part SATB vocal score} を参照してください。
 
 @item
 学習マニュアルには、@c
 様々なスタイルの合唱に適したいくつかのテンプレートもあります。@c
-@rlearning{合唱} を参照してください。
+@rlearning{Vocal ensembles templates} を参照してください。
 
 @item
 @code{ChoirStaff} と @code{PianoStaff} についての情報は、@c
-@ref{譜をグループ化する} を参照してください。
+@ref{Grouping staves} を参照してください。
 
 @item
 セイクリッド ハープや動揺の記譜法で用いられるシェイプ符頭について、@c
-@ref{シェイプ符頭} で説明しています。
+@ref{Shape note heads} で説明しています。
 
 @item
 2 つのボーカル パートが 1 つの譜を共有する場合、@c
 上のパートの符幹、タイ、スラー等は上向きになり、@c
 下のパートは下向きになります。@c
 これを実現するには、@code{\voiceOne} と @code{\voiceTwo} を用います。@c
-@ref{単一譜の多声} を参照してください。
+@ref{Single-staff polyphony} を参照してください。
 
 @end itemize
 
@@ -2237,7 +2220,7 @@ SATB (S: ソプラノ、A: アルト、T: テナー、B: バス) ボーカル譜
 @seealso
 学習マニュアル:
 @rlearning{Four-part SATB vocal score},
-@rlearning{Vocal ensembles}
+@rlearning{Vocal ensembles templates}
 
 記譜法リファレンス:
 @ref{Context layout order},
@@ -2271,18 +2254,18 @@ SATB (S: ソプラノ、A: アルト、T: テナー、B: バス) ボーカル譜
 @item
 グローバル譜サイズを変更することで、@c
 楽譜の要素全体のサイズを変更することができます。@c
-@ref{譜サイズを設定する} を参照してください。
+@ref{Setting the staff size} を参照してください。
 
 @item
 システム、譜、それに歌詞の間隔はすべて独立して調節することができます。@c
-@ref{垂直方向のスペース} を参照してください。
+@ref{Vertical spacing} を参照してください。
 
 @item
 垂直方向のレイアウト変数の値を表示することで、@c
 垂直方向のスペースを調節する手助けとすることができます。@c
 少ないページに音楽を収めるための方法として、@c
-レイアウト変数の表示と他の事柄を @ref{音楽を少ないページに収める} で@c
-説明しています。
+レイアウト変数の表示と他の事柄を @ref{Fitting music onto fewer pages}
+説明しています。
 
 @item
 ページ毎のシステム数を 1 から 2 に変更した場合、@c
@@ -2292,7 +2275,7 @@ SATB (S: ソプラノ、A: アルト、T: テナー、B: バス) ボーカル譜
 
 @item
 他のページ フォーマット プロパティについての詳細は
-@ref{ページ レイアウト} を参照してください。
+@ref{Page layout} を参照してください。
 
 @end itemize
 
@@ -2325,8 +2308,8 @@ SATB (S: ソプラノ、A: アルト、T: テナー、B: バス) ボーカル譜
   \layout {
     \context {
       \Score
-      \override DynamicText #'direction = #UP
-      \override DynamicLineSpanner #'direction = #UP
+      \override DynamicText.direction = #UP
+      \override DynamicLineSpanner.direction = #UP
     }
   }
 }
@@ -2424,20 +2407,21 @@ LilyPond で台詞を譜刻することはできますが、台詞には音楽
 
 @item
 指揮譜は多くのグループ化された譜と歌詞を保持します。@c
-譜をグループ化する方法は @ref{譜をグループ化する} で説明しています。@c
-譜のグループをネストする方法は @ref{ネストされた譜グループ} を参照してください。
+譜をグループ化する方法は @ref{Grouping staves} で説明しています。@c
+譜のグループをネストする方法は @ref{Nested staff groups} を参照してください。
 
 @item
 指揮譜とボーカル譜では、空の譜の譜刻を抑制することがあります。@c
 そのような @qq{Frenched score} を作成する方法は
-@ref{譜を隠す} を参照してください。
+@ref{Hiding staves} を参照してください。
 
 @item
 オーケストラ パートを記述する方法は
-@ref{パートを記述する} でカバーしています。@c
+@ref{Writing parts} でカバーしています。@c
 オーケストラの楽器編成によっては、@c
 専門的な記譜法の他のセクションも関係するかもしれません。@c
-多くの楽器は移調楽器です -- @ref{楽器の移調} を参照してください。
+多くの楽器は移調楽器です -- @ref{Instrument transpositions}
+を参照してください。
 
 @item
 ページのシステム数をページ毎に変える場合、@c
@@ -2446,13 +2430,13 @@ LilyPond で台詞を譜刻することはできますが、台詞には音楽
 
 @item
 他のページ フォーマット プロパティの詳細は
-@ref{ページ レイアウト} を参照してください。
+@ref{Page layout} を参照してください。
 
 @item
 台詞の合図、舞台指示、それに脚注を挿入することができます
--- @ref{Creating footnotes} と @ref{テキスト} を参照してください。@c
+-- @ref{Creating footnotes} と @ref{Text} を参照してください。@c
 2 つの @code{\score} の間に独立したセクションとして詳細な舞台指示を@c
-追加することもできます -- @ref{独立したテキスト} を参照してください。
+追加することもできます -- @ref{Separate text} を参照してください。
 
 @end itemize
 
@@ -2539,7 +2523,7 @@ c c c
   #`((instrumentTransposition . ,(ly:make-pitch -1 0 0))
      (shortInstrumentName . "Kas.")
      (clefGlyph . "clefs.G")
-     (clefOctavation . -7)
+     (clefTransposition . -7)
      (middleCPosition . 1)
      (clefPosition . -2)
      (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Kaspar"))
@@ -2549,11 +2533,11 @@ c c c
   #`((instrumentTransposition . ,(ly:make-pitch 0 0 0))
      (shortInstrumentName . "Mel.")
      (clefGlyph . "clefs.F")
-     (clefOctavation . 0)
+     (clefTransposition . 0)
      (middleCPosition . 6)
      (clefPosition . 2)
      (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Melchior"))
-     (midiInstrument . "voice aahs"))
+     (midiInstrument . "choir aahs"))
 
 \relative c' {
   \instrumentSwitch "kaspar"
@@ -2591,7 +2575,7 @@ LilyPond の拡張:
 これはフルの指揮譜を使用できない場合に、指揮者の助けとなります。
 
 合図を挿入する基本的な仕組みはメインのテキストで完全に説明しています
--- @ref{他のボイスを引用する} と @ref{テキストをフォーマットする} を@c
+-- @ref{Quoting other voices} と @ref{Formatting text} を@c
 参照してください。@c
 しかしながら、多くの合図を挿入する必要がある場合
 -- 例えば、ボーカル譜のピアノ伴奏に楽器名を入れる場合、@c
@@ -2609,7 +2593,7 @@ pianoRH = \relative c'' {
   c4. g8
   % 合図音符の楽器名を、合図音符の直前、かつ譜の上に配置します
   \new CueVoice {
-    \override InstrumentSwitch #'self-alignment-X = #RIGHT
+    \override InstrumentSwitch.self-alignment-X = #RIGHT
     \set instrumentCueName = "Flute"
   }
   \cueDuring "flute" #UP { g4 bes4 }
@@ -2654,8 +2638,8 @@ pianoRH = \relative c'' {
   \transposition c'
   % 合図音符の楽器名を譜の下に配置します
   \new CueVoice {
-    \override InstrumentSwitch #'self-alignment-X = #RIGHT
-    \override InstrumentSwitch #'direction = #DOWN
+    \override InstrumentSwitch.self-alignment-X = #RIGHT
+    \override InstrumentSwitch.direction = #DOWN
     \set instrumentCueName = "Clar."
   }
   \cueDuring "clarinet" #DOWN { c4. g8 }
@@ -2694,11 +2678,11 @@ pianoLH = \relative c { c4 <c' e> e, <g c> }
 @rglos{cue-notes}
 
 記譜法リファレンス:
-@ref{オブジェクトを揃える},
-@ref{向きと配置},
-@ref{合図音符をフォーマットする},
-@ref{他のボイスを引用する},
-@ref{音楽関数を使用する}
+@ref{Aligning objects},
+@ref{Direction and placement},
+@ref{Formatting cue notes},
+@ref{Quoting other voices},
+@ref{Using music functions}
 
 コード断片集:
 @rlsr{Vocal music}
@@ -2726,7 +2710,7 @@ pianoLH = \relative c { c4 <c' e> e, <g c> }
 
 @q{parlato} や @q{Sprechgesang} などのエフェクトは、@c
 演者にピッチを持たずに、しかしながらリズムを持ちながら話すことを要求します。@c
-これは、@ref{特殊な符頭} で示すように、×の符頭で記譜します。
+これは、@ref{Special note heads} で示すように、×の符頭で記譜します。
 
 @c TODO add "marking-notes-on-spoken-parts" snippet -vv
 @c add "showing the rhythm of a melody" snip
@@ -2790,8 +2774,8 @@ dialogue = \lyricmode {
 \score {
   <<
     \new Lyrics \with {
-      \override LyricText #'font-shape = #'italic
-      \override LyricText #'self-alignment-X = #LEFT
+      \override LyricText.font-shape = #'italic
+      \override LyricText.self-alignment-X = #LEFT
     }
     { \dialogue }
     \new Staff {
@@ -2805,8 +2789,8 @@ dialogue = \lyricmode {
 
 @seealso
 記譜法リファレンス:
-@ref{歌詞音節の手動演奏時間},
-@ref{テキスト}
+@ref{Manual syllable durations},
+@ref{Text}
 
 内部リファレンス:
 @rinternals{LyricText}
@@ -2860,7 +2844,7 @@ dialogue = \lyricmode {
 リズムは単語の音声リズムから取ります。
 
 @lilypond[verbatim,quote]
-stemOff = { \override Staff.Stem #'transparent = ##t }
+stemOff = { \hide Staff.Stem }
 
 \relative c' {
   \stemOff
@@ -2953,9 +2937,9 @@ a4 b c2
 \bar "'"
 a4 b c2
 a4 b c2
-\bar ":"
+\bar ";"
 a4 b c2
-\bar "dashed"
+\bar "!"
 a4 b c2
 \bar "||"
 @end lilypond
@@ -2966,23 +2950,23 @@ a4 b c2
 
 @lilypond[verbatim,quote]
 divisioMinima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-minima
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 divisioMaior = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maior
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 divisioMaxima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maxima
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 finalis = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::finalis
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 
@@ -3098,8 +3082,7 @@ global = {
       \layout {
         \context {
           \Score
-          \override SpacingSpanner
-          #'base-shortest-duration = #(ly:make-moment 1 2)
+          \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
         }
         \context {
           \Staff
@@ -3128,17 +3111,16 @@ global = {
 
 @seealso
 学習マニュアル:
-@rlearning{オブジェクトの可視性と色},
-@rlearning{合唱}
+@rlearning{Visibility and color of objects},
+@rlearning{Vocal ensembles templates}
 
 記譜法リファレンス:
 @ref{Ancient notation},
-@ref{小節線},
-@ref{コンテキストのプラグインを変更する},
+@ref{Bar lines},
+@ref{Modifying context plug-ins},
 @ref{Typesetting Gregorian chant},
-@ref{無韻律の音楽},
-@ref{オブジェクトの可視性}
-
+@ref{Unmetered music},
+@ref{Visibility of objects}
 
 @node 賛美歌を配置する
 @unnumberedsubsubsec 賛美歌を配置する
@@ -3286,18 +3268,19 @@ tick = \markup {
 
 マークアップを使用してテキストを中央に配置し、@c
 テキスト行をいくつかの列に配列する方法は、@c
-@ref{テキストをフォーマットする} で説明しています。
+@ref{Formatting text} で説明しています。
 
 これらの要素のほとんどをテンプレートの歌詞で示しています。@c
-@rlearning{合唱} の中の @qq{賛美歌} を参照してください。
+@rlearning{Psalms} を参照してください。
 
 @seealso
 学習マニュアル:
-@rlearning{合唱}
+@rlearning{Psalms},
+@rlearning{Vocal ensembles templates}
 
 記譜法リファレンス:
 @ref{Fonts},
-@ref{テキストをフォーマットする}
+@ref{Formatting text}
 
 
 @node 賛美歌での部分小節
index cd9dea6efffc50ee1827c4c1998cd75e2fd875b3..5b6c57ad566b0675e72faaa75a05aa37e629ee5a 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: cc3b9e1430f4cc9c54da7252e504f3d274a7ea17
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -60,7 +60,7 @@
 他の記譜要素を管楽器に適用することができます:
 
 @itemize
-@item 多くの管楽器は移調楽器です。@ref{楽器の移調} を参照してください。
+@item 多くの管楽器は移調楽器です。@ref{Instrument transpositions} を参照してください。
 @item スライド グリッサンドはトロンボーンの特徴ですが、@c
 他の管楽器でもキーやバルブのグリッサンドを演奏できます。@c
 @ref{グリッサンド} を参照してください。
index 3ec484492ac6410b51fc866f47840e9699b2fc60..025f23c8417b89e5366ee871ebd69d4fe50c7cb6 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 @ignore
-    Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
diff --git a/Documentation/ja/texidocs/GNUmakefile b/Documentation/ja/texidocs/GNUmakefile
deleted file mode 100644 (file)
index 0ffa758..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
index 7d4bb7e65cdec4604d811341e13d9c5ace9d0284..75f4028c843d65227951bbd809839709067df1ae 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
   texidocja = "
 いくつかの音符を持つシンプルなピアノ譜を示します。
 
index 7209924f8fb90a7e2c9dcfec37ab103a8f20f2ef..6003892532a1d7fe6416cc7dd4e0503ccdcdb9bd 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
   texidocja = "
 旋律と歌詞のための総譜ではなく、歌詞をピアノ譜の 2 つの譜の間に配置することができます。
 "
index 6870e5d94002b842164b6b87f059a222025f4caa..f4d3a90aaa22fd7c7fe1dc734fffa2bca3a63d88 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
   texidocja = "
 これは一般的な歌曲のフォーマットです: 旋律と歌詞を持つ譜と、その下にピアノ伴奏譜があります。
 "
index 53e9065a952b0ee0eaff8270fef10be656bc7313..3a15161e4a05e2d51211783b930f754990c84538 100644 (file)
@@ -1,5 +1,5 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
   texidocja = "
 これは旋律、歌詞、コードを持つ歌曲の楽譜のためのテンプレートです。
 "
-  doctitleja = "音符、歌詞、コードを持つ単一譜のテンプレート"
\ No newline at end of file
+  doctitleja = "音符、歌詞、コードを持つ単一譜のテンプレート"
index 564494f2b127fde24ce1ea20ac722b644d582721..12e62f5a47d8ec789c049a5a559cd1ca6d38930d 100644 (file)
@@ -1,5 +1,5 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
   texidocja = "
 旋律とコードを持つリード譜を欲しくはありませんか?他を見る必要はありません!
 "
-  doctitleja = "音符とコードを持つ単一譜のテンプレート"
\ No newline at end of file
+  doctitleja = "音符とコードを持つ単一譜のテンプレート"
index 13f10c2a67cf471d2244475f854ab50422cd86d6..1250c1efc1051ec269c18b4f76c8c77404362880 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
   texidocja = "
 この小さなテンプレートは歌詞を持つ簡単な旋律を表しています。カット&@c
 ペーストして、音符を付け加えて、それから歌詞の単語を付け加えてください。@c
@@ -6,4 +6,4 @@
 ことです。自動ビームを使用するには、対応する行を変更するか、コメント
 アウトしてください。
 "
-  doctitleja = "音符と歌詞を持つ単一譜のテンプレート"
\ No newline at end of file
+  doctitleja = "音符と歌詞を持つ単一譜のテンプレート"
index 6eab4488c2950e23114c9c06b5bcde939cee9806..53ad1f89dd450a46dadb19428ade83f5f31dab40 100644 (file)
@@ -1,7 +1,7 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
   texidocja = "
 これは音符を持つ譜を提供するとても簡単なテンプレートであり、ソロの楽器や@c
 旋律の楽譜断片に適しています。これをファイルにカット&ペーストして、音符@c
 を付け加えれば完了です!
 "
-  doctitleja = "音符だけを持つ単一譜のテンプレート"
\ No newline at end of file
+  doctitleja = "音符だけを持つ単一譜のテンプレート"
index c810c11522012ab42d29b868bdf6d5088924123a..b8a4787610fc4e19ae6fb55957cb1771bfe941c5 100644 (file)
@@ -1,6 +1,6 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
   texidocja = "
 これは簡単な弦楽四重奏のためのテンプレートです。これは拍子記号と調号の@c
 ために @code{\\global} セクションを使っています。
 "
-  doctitleja = "弦楽四重奏テンプレート (シンプル)"
\ No newline at end of file
+  doctitleja = "弦楽四重奏テンプレート (シンプル)"
index 6ec49fbe1742ac3dcfa4af29a43f140e86625847..b3c0f8660a395becbc865bf3d0e6b48f0e9b78b8 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
   texidocja = "
 @qq{弦楽四重奏テンプレート} は適切な弦楽四重奏の楽譜を作り出しますが、@c
 個々のパート譜を譜刻する必要がある場合はどうでしょうか?今度の新しい@c
@@ -15,4 +15,4 @@
 別々のファイルに分ける場合は、指定されたコメントを外すことを忘れないで@c
 ください!
 "
-  doctitleja = "パートを個々に持つ弦楽四重奏テンプレート"
\ No newline at end of file
+  doctitleja = "パートを個々に持つ弦楽四重奏テンプレート"
index 74905139a78b921cf4b955a7539188f8dd4ad6c4..772c668ea1505817da17f04e1cbb9b1d7ecc1746 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
   texidocja = "
 このテンプレートは、@qq{合唱テンプレート} で示した標準の SATB ボーカル譜に自動@c
 ピアノ譜を付け加えています。これは LilyPond の強みの 1 つを示しています - 音楽@c
index def3a938adb13542c93061b5080c032e28e65919..792b4bc0c91ed0b3ff4a828dcd101a31f4f8a484 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
   texidocja = "
 このテンプレートは基本的に単純な @qq{合唱} テンプレートと同じですが、歌詞が
 @code{alignAboveContext} と @code{alignBelowContext} を用いて配置@c
index 107d59e23979fc195c13c74b7ea2f9384cb7ae83..0bf62675306810ddbf300b4551955dcb9074a166 100644 (file)
@@ -1,4 +1,4 @@
-%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661
+%% Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
   texidocja = "
 これは標準の 4 パート SATB (ソプラノ、アルト、テナー、バス) ボーカル譜です。@c
 もっと大きな合唱では、すべてのパートで使用されるセクションをインクルードすると@c
index 4c70493c4440b734824490ef2bd0437f09b85331..2bd1429e2465e778484b72624e39d5458861148c 100644 (file)
@@ -16,7 +16,7 @@ td { border: 1px solid black; text-align: center; }
 
 @end html
 @end ifhtml
-@emph{最終更新日 Thu May 31 09:12:39 UTC 2012
+@emph{最終更新日 Wed Dec 18 12:23:14 UTC 2013
 }
 @multitable @columnfractions  0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
 
@@ -84,61 +84,61 @@ LilyPond --- \TITLE\
 @item
 1 チュートリアル
 @*
-2535
+2578
 @tab Yoshiki Sawada
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #dfef77">一部 (48 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+一部 (48 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #25fe1f">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
 2 一般的な記譜法
 @*
-4187
+4396
 @tab Yoshiki Sawada
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #dfef77">一部 (35 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+一部 (35 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #40fe23">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
 3 基礎となるコンセプト
 @*
-11130
+11144
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -155,34 +155,34 @@ LilyPond --- \TITLE\
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #25fe1f">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
 4 出力を調整する
 @*
-15468
+16191
 @tab Yoshiki Sawada
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #dfef77">一部 (98 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+一部 (98 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #2cff20">partially</span>
+<span style="background-color: #39ff22">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -192,7 +192,7 @@ partially
 @item
 A テンプレート
 @*
-219
+372
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -231,7 +231,7 @@ LilyPond 記譜法リファレンス
 @item
 セクション タイトル
 @*
-355
+326
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -312,7 +312,7 @@ LilyPond --- \TITLE\
 @item
 1.1 ピッチ
 @*
-4530
+4990
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -329,7 +329,7 @@ LilyPond --- \TITLE\
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially</span>
+<span style="background-color: #2cff20">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -339,7 +339,7 @@ partially
 @item
 1.2 リズム
 @*
-6352
+6890
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -356,7 +356,7 @@ partially
 @ifhtml
 
 @html
-<span style="background-color: #39ff22">partially</span>
+<span style="background-color: #62ff28">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -366,7 +366,7 @@ partially
 @item
 1.3 発想記号
 @*
-1712
+1793
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -393,7 +393,7 @@ partially
 @item
 1.4 繰り返し
 @*
-1011
+1050
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -420,7 +420,7 @@ partially
 @item
 1.5 同時進行する音符
 @*
-2640
+2821
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -437,17 +437,17 @@ partially
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #2cff20">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
 1.6 譜の記譜法
 @*
-2392
+2476
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -464,17 +464,17 @@ partially
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #39ff22">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
 1.7 編集者の注釈
 @*
-949
+954
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -501,7 +501,7 @@ partially
 @item
 1.8 テキスト
 @*
-2729
+2816
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -518,11 +518,11 @@ partially
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #25fe1f">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
@@ -555,7 +555,7 @@ partially
 @item
 2.1 声楽
 @*
-4758
+5190
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -572,17 +572,17 @@ partially
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #33ff21">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
 2.2 キーボードと他の複数譜の楽器
 @*
-862
+888
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -636,7 +636,7 @@ partially
 @item
 2.4 フレットのある弦楽器
 @*
-2675
+2662
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -663,7 +663,7 @@ partially
 @item
 2.5 打楽器
 @*
-812
+811
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -680,17 +680,17 @@ partially
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #25fe1f">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
 2.6 管楽器
 @*
-321
+324
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -717,7 +717,7 @@ partially
 @item
 2.7 和音記譜法
 @*
-2022
+1972
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -734,11 +734,11 @@ partially
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #2cff20">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
@@ -798,7 +798,7 @@ partially
 @item
 3 入出力全般
 @*
-8701
+10392
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -815,7 +815,7 @@ partially
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">partially</span>
+<span style="background-color: #9eff30">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -825,7 +825,7 @@ partially
 @item
 4 スペースの問題
 @*
-11234
+12256
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -842,34 +842,34 @@ partially
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #83fe2c">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
 5 デフォルトを変更する
 @*
-12679
+15289
 @tab Yoshiki Sawada
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #dfef77">一部 (97 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+一部 (97 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially</span>
+<span style="background-color: #47ff24">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -972,34 +972,34 @@ LilyPond --- \TITLE\
 @item
 1 @command{lilypond} を実行する
 @*
-4615
+4537
 @tab Yoshiki Sawada
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #dfef77">一部 (97 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+一部 (97 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #33ff21">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
 2 @command{convert-ly} を使ってファイルを更新する
 @*
-1209
+1484
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -1016,11 +1016,11 @@ LilyPond --- \TITLE\
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #76fe2a">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
@@ -1043,44 +1043,44 @@ LilyPond --- \TITLE\
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #39ff22">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab pre-GDP
 @item
 4 外部プログラム
 @*
-2390
+2817
 @tab Yoshiki Sawada
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #dfef77">一部 (87 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+一部 (87 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #6fff29">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @item
 5 LilyPond 入力ファイルの記述に対する提案
 @*
-2694
+2692
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -1097,11 +1097,11 @@ LilyPond --- \TITLE\
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #2cff20">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab post-GDP
 @end multitable
@@ -1138,11 +1138,11 @@ Yoshinobu Ishizaki
 @ifhtml
 
 @html
-<span style="background-color: #39ff22">partially</span>
+<span style="background-color: #1fff1f">はい</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially
+はい
 @end ifnothtml
 @tab pre-GDP
 @item
@@ -1177,7 +1177,7 @@ Yoshinobu Ishizaki
 @item
 導入部
 @*
-4753
+4937
 @tab Yoshiki Sawada
 @*
 Yoshinobu Ishizaki
@@ -1196,7 +1196,7 @@ Yoshinobu Ishizaki
 @ifhtml
 
 @html
-<span style="background-color: #39ff22">partially</span>
+<span style="background-color: #54ff26">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -1206,7 +1206,7 @@ partially
 @item
 ダウンロード
 @*
-1211
+1201
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -1223,17 +1223,17 @@ partially
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #39ff22">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab pre-GDP
 @item
 マニュアル
 @*
-1214
+1284
 @tab Yoshiki Sawada
 @tab 
 @tab 
@@ -1250,34 +1250,34 @@ partially
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #47ff24">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+partially
 @end ifnothtml
 @tab pre-GDP
 @item
 コミュニティ
 @*
-3006
+3073
 @tab Yoshiki Sawada
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #dfef77">一部 (97 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-はい
+一部 (97 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">partially</span>
+<span style="background-color: #25fe1f">partially</span>
 @end html
 @end ifhtml
 @ifnothtml
diff --git a/Documentation/ja/usage/GNUmakefile b/Documentation/ja/usage/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 7afd9bb3459fdb1be9b2b825a5de0452ed8adeb9..bb64233371955c21c7b7846998ae5a611ef73be9 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: cc3b9e1430f4cc9c54da7252e504f3d274a7ea17
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -379,7 +379,7 @@ midi2ly [@var{option}]@dots{} @var{midi-file}
 @item -e, --explicit-durations
 すべての音符の演奏時間を出力します。
 
-@item -h,--help
+@item -h, --help
 使用方法の要約を表示します。
 
 @item -k, --key=@var{acc}[:@var{minor}]
@@ -451,7 +451,7 @@ musicxml2ly [@var{option}]@dots{} @var{xml-file}
 @item -a, --absolute
 絶対ピッチで出力します。
 
-@item -h,--help
+@item -h, --help
 使用方法の要約を表示します。
 
 @item -l, --language=LANG
@@ -477,21 +477,21 @@ MIDI ブロックを有効にします。
 @item --no-beaming
 連桁情報を変換せず、LilyPond の自動連桁機能を使用します。
 
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
 出力ファイル名を @var{file} とします。@c
 @var{file} に @file{-} を指定すると、出力は stdout に表示されます。@c
 指定が無い場合、出力は @var{xml-file}@file{.ly} となります。
 
-@item -r,--relative
+@item -r, --relative
 ピッチを相対モードに変換します。(デフォルト)
 
-@item -v,--verbose
+@item -v, --verbose
 Verbose モード (ログ等が詳細) で実行します。
 
 @item --version
 バージョン情報を表示します。
 
-@item -z,--compressed
+@item -z, --compressed
 入力ファイルが ZIP で圧縮された MusicXML ファイルであることを示します。
 @end table
 
@@ -522,16 +522,16 @@ abc2ly [@var{option}]@dots{} @var{abc-file}
 @command{abc2ly} には以下のオプションがあります。
 
 @table @code
-@item -b,--beams=None
+@item -b, --beams=None
 ABC の連桁情報を保持します。
 
-@item -h,--help
+@item -h, --help
 このオプション一覧を表示します。
 
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
 出力ファイル名を @var{file} とします。
 
-@item -s,--strict
+@item -s, --strict
 @c 未訳
 be strict about success
 
@@ -602,9 +602,9 @@ more information about this.
 The following options are supported by @command{etf2ly}:
 
 @table @code
-@item -h,--help
+@item -h, --help
 this help
-@item -o,--output=@var{FILE}
+@item -o, --output=@var{FILE}
 set output filename to @var{FILE}
 @item --version
 version information
index a1f5106dc42f39b17b5faf6994137b07052cf56b..e0f3f4bf69b70557f5ad2cf0290df37464f852cb 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: cc3b9e1430f4cc9c54da7252e504f3d274a7ea17
+    Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Translators: Yoshiki Sawada
 
@@ -95,7 +95,7 @@ Windows や Mac OS X のコマンド ラインを用いて @code{lilypond-book}
 
 \begin{lilypond}
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 \end{lilypond}
 
@@ -157,7 +157,7 @@ Texinfo で処理されるため、上記の例とはレイアウトが少し異
 
 @lilypond
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 @end lilypond
 
@@ -189,6 +189,7 @@ c'4 f16
 
 @page
 
+
 @node 楽譜とテキストを統合する
 @section 楽譜とテキストを統合する
 @translationof Integrating music and text
@@ -1164,6 +1165,7 @@ LilyPond ブロックの最初の @code{\score} だけが処理されます。
 そうしないと、@qq{Output would overwrite input file} のようなエラー
 メッセージが表示されて、終了します。
 
+
 @node lilypond-book テンプレート
 @section lilypond-book テンプレート
 @translationof lilypond-book templates
@@ -1206,7 +1208,6 @@ LilyPond 断片を Texinfo に組み込むことができます。@c
 \input texinfo @c -*-texinfo-*-
 @@node Top
 @@top
-@translationof Top
 
 Texinfo テキスト
 
@@ -1424,4 +1425,4 @@ LaTeX ファイルのヘッダ中に以下を記述します:
 @translationof Alternative methods of mixing text and music
 
 @command{lilypond-book} を使わずにテキストと楽譜を組み合わせる方法を
-@ref{LilyPond output in other programs} で説明しています。.
+@ref{LilyPond output in other programs} で説明しています。
index f65dfdc765b4eaf6658ad41753e38f2139bee2a3..23cf063b6ccea84228e8594db7d4ddff8f434cc4 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: cc3b9e1430f4cc9c54da7252e504f3d274a7ea17
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -144,13 +144,13 @@ lilypond は出力として @file{filename.ps} と @file{filename.pdf} を作り
 
 @table @code
 
-@item -d,--define-default=@var{var}=@var{val}
+@item -d, --define-default=@var{var}=@var{val}
 @ref{Advanced command line options for LilyPond} を参照してください。
 
 @cindex Scheme, expression evaluation (Scheme 表記の評価)
 @cindex expression evaluation, Scheme (Scheme 表記の評価)
 
-@item -e,--evaluate=@var{expr}
+@item -e, --evaluate=@var{expr}
 @file{.ly} ファイルを解析する前に Scheme @var{expr} を評価します。@c
 複数の @code{-e} オプションが与えられた場合、それらは順番に評価されます。
 
@@ -175,19 +175,19 @@ lilypond -e '(define-public a 42)'
 @cindex output, format (出力のフォーマット)
 @cindex format, output (出力のフォーマット)
 
-@item -f,--format=@var{format}
+@item -f, --format=@var{format}
 フォーマットを指定します。@c
 @code{format} の選択肢は @code{ps}, @code{pdf}, それに @code{png} です。
 
 例: @code{lilypond -fpng @var{filename}.ly}
 
-@item -h,--help
+@item -h, --help
 使用方法の要約を表示します。
 
-@item -H,--header=@var{FIELD}
+@item -H, --header=@var{FIELD}
 ヘッダ フィールドをファイル @file{BASENAME.@var{FIELD}} に吐き出します。
 
-@item -i,--init=@var{file}
+@item -i, --init=@var{file}
 init ファイルとして @var{file} をセットします (デフォルト: @file{init.ly})。
 
 @cindex file searching (ファイル サーチ)
@@ -202,7 +202,7 @@ init ファイルとして @var{file} をセットします (デフォルト: @f
 
 @cindex chroot jail, running inside (chroot jail 内部で実行する)
 
-@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir}
+@item -j, --jail=@var{user},@var{group},@var{jail},@var{dir}
 @command{lilypond} を chroot jail 環境で実行します。@c
 (訳者: chroot jail 環境とはセキュリティのために@c
 カレント プロセスに対してルート ディレクトリの位置を変更すること。)
@@ -278,7 +278,7 @@ LilyPond が使用可能な CPU 時間を数秒に制限する
 @cindex loglevel (ログレベル)
 @cindex output, verbosity (出力の饒舌さ)
 
-@item -l,--loglevel=@var{LEVEL}
+@item -l, --loglevel=@var{LEVEL}
 コンソール出力の饒舌さを @var{LEVEL} にセットします。@c
 取り得る値は以下の通りです:
 
@@ -312,7 +312,7 @@ LilyPond が使用可能な CPU 時間を数秒に制限する
 @cindex output, setting filename (出力のファイル名を設定する)
 @cindex output, directory (出力ディレクトリ)
 
-@item -o,--output=@var{FILE} or @var{FOLDER}
+@item -o, --output=@var{FILE} or @var{FOLDER}
 デフォルトの出力ファイルとして @var{FILE} をセットします。@c
 セットした名前のフォルダが存在する場合、そのフォルダに出力されます。@c
 適切な接尾辞が追加されます
@@ -343,14 +343,14 @@ PostScript を生成します。
 PDF を生成します。@c
 これは内部で @code{--ps} を使用します。
 
-@item -v,--version
+@item -v, --version
 バージョン情報を表示します。
 
-@item -V,--verbose
+@item -V, --verbose
 冗長表示モードにします:
 読み込むすべてのファイルのフル パスを表示して、時間情報を表示します。
 
-@item -w,--warranty
+@item -w, --warranty
 GNU LilyPond の保証責任を表示します。@c
 (GNU LilyPond には@strong{保証責任はありません}!)
 
@@ -364,10 +364,15 @@ GNU LilyPond の保証責任を表示します。@c
 @table @code
 
 @item -d@var{[option-name]}=@var{[value]},--define-default=@var{[option-name]}=@var{[value]}
-これは相当する内部 Scheme 関数に @var{value} をセットします。@c
+これは内部 Scheme 関数に @var{value} をセットします。@c
+
+@example
+-dbackend=svg
+@end example
+
 @var{value} が提供されない場合、デフォルト値が使われます。@c
-@var{option-name} に接頭辞 @code{no-} を付けてオプションを @q{off} に@c
-することができます。例えば、
+例えば、@var{option-name} に接頭辞 @code{no-} を付けると、そのオプションは
+@q{off} なります
 
 @cindex point and click, command line (コマンド ラインでポイント&クリックを指定する)
 
@@ -401,25 +406,25 @@ GNU LilyPond の保証責任を表示します。@c
 @code{.count} ファイルを作成します。
 
 @item @code{backend}
-@tab @code{'ps}
+@tab @code{ps}
 @tab バックエンドを選択します。Postscript ファイル (デフォルト) は@c
 @code{TTF}, @code{Type1}, それに @code{OTF} フォントを内包します。@c
 フォントのサブセットは作成されません。@c
 @q{東洋} の文字セットを用いるとファイルが非常に大きくなる可能性があります。
 
 @item
-@tab @code{'eps}
+@tab @code{eps}
 @tab Encapsulated PostScript。これはフォントを持たないページ (段) 毎の
 @file{EPS} ファイルと、フォントを内包するすべてのページ (段) を 1 つに@c
 まとめた @file{EPS} ファイルを吐き出します。@c
 @command{lilypond-book} はデフォルトでこのオプションを使用します。
 
 @item
-@tab @code{'null}
+@tab @code{null}
 @tab 楽譜を出力しません。@code{-dno-print-pages} と同じ効果を持ちます。
 
 @item
-@tab @code{'svg}
+@tab @code{svg}
 @tab Scalable Vector Graphics。これはページ毎に埋め込みフォントを持たない
 @code{SVG} ファイルを作成します。@c
 最適な描画を得るために、Century Schoolbook フォントをインストールすること@c
@@ -432,7 +437,7 @@ SVG バックエンドの中で woff フォント ファイルを使うための
 @code{svg-woff} (この表の下にあります) もあります。
 
 @item
-@tab @code{'scm}
+@tab @code{scm}
 @tab 内部的な Scheme ベースの描画コマンドを吐き出します。
 
 @c 未訳
@@ -767,7 +772,7 @@ CPU とメモリ使用を制限すべきです。
 LilyPond を chroot jail 環境で実行させるようサーバをセットアップすることは@c
 複雑な作業です。@c
 以下にステップをリスト アップします。@c
-各ステップの中にある例は Ubuntu Linux 用であり、@c
+各ステップの中にある例は Ubuntu GNU/Linux 用であり、@c
 @code{sudo} の使用が必要となるかもしれません。
 
 @itemize
@@ -977,7 +982,6 @@ test.ly:2:19: error: not a duration: 5
 @menu
 * 楽譜がページからはみ出る::
 * 余計な譜が表示される::
-* 見かけ上 ../ly/init.ly のエラーとなる::
 * エラー メッセージ Unbound variable %::
 * エラー メッセージ FT_Get_Glyph_Name::
 * 警告 -- Warning staff affinities should only decrease::
@@ -1028,7 +1032,7 @@ LilyPond マニュアルのほとんどの例はこの手法を用いていま
 結果は 2 つの譜が表示され、下の譜の符頭の色はデフォルトの黒のままとなります。
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
 \new Staff { a }
 @end lilypond
 
@@ -1043,7 +1047,7 @@ LilyPond マニュアルのほとんどの例はこの手法を用いていま
 
 @lilypond[quote,verbatim,relative=2]
 \new Staff {
-  \override Staff.NoteHead #'color = #red
+  \override Staff.NoteHead.color = #red
   a
 }
 @end lilypond
@@ -1071,33 +1075,6 @@ LilyPond マニュアルのほとんどの例はこの手法を用いていま
 @end lilypond
 
 
-@node 見かけ上 ../ly/init.ly のエラーとなる
-@unnumberedsubsec 見かけ上 @code{../ly/init.ly} のエラーとなる
-@translationof Apparent error in @code{../ly/init.ly}
-
-入力ファイルが正しく構成されていないと、@c
-@file{../ly/init.ly} に構文エラーがあるという@c
-様々な原因のはっきりしないエラー メッセージが表示されます。@c
-例えば、括弧やクォート記号の数が一致していない場合に@c
-このようなエラーが発生します。
-
-最も一般的なエラーは @code{score} ブロックの終わりに括弧が見当たらない
-(missing brace, (@code{@}})) というエラーです。@c
-この場合の解決方法は明らかです:
-@code{score} ブロックが正しく閉じられているかチェックしてください。@c
-入力ファイルの正しい構造は @rlearning{LilyPond 入力ファイルの仕組み}
-で記述されています。@c
-括弧の一致を自動的にハイライトするエディタを使うと、@c
-そのようなエラーを防ぐのに役立ちます。
-
-次に一般的なエラーの原因は、歌詞ブロックの最後の音節と閉じ括弧 (@code{@}})
-の間に空白が無いために発生します。@c
-空白が無ければ、この閉じ括弧は音節の一部と見なされます。@c
-常に @emph{すべての} 括弧の前後に空白を入れることをお勧めします。@c
-歌詞を用いる場合にこのことが重要になります。@c
-@ruser{Entering lyrics} を参照してください。
-
-
 @node エラー メッセージ Unbound variable %
 @unnumberedsubsec エラー メッセージ Unbound variable %
 @translationof Error message Unbound variable %
@@ -1133,7 +1110,7 @@ UTF-8 エンコードで保存されていない場合、@c
 譜として振舞うコンテキストを作ることで回避できます:
 
 @example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
 @end example
 
 @noindent
index c8d2ba04749b9e4259bd3b0eab925b01da42a131..71b94dcaddb20c8428a5637891c4ea38a72a6b9b 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: cc3b9e1430f4cc9c54da7252e504f3d274a7ea17
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -308,12 +308,12 @@ Windows でも利用可能です。
 
 @code{Makefile} の中に規則を定義するためのコマンドは、@c
 プラットフォームによって異なります。@c
-例えば、さまざまな種類がある Linux と MacOS は @code{bash} を使いますが、@c
-Windows は @code{cmd} を使います。@c
+例えば、さまざまな種類がある GNU/Linux と MacOS は @code{bash} を@c
+使いますが、Windows は @code{cmd} を使います。@c
 MacOS X では、コマンド ライン インタプリタを使用するためにシステムを@c
 コンフィグレーションする必要があるということに注意してください。@c
 ここで、@code{Makefile} の例をいくつか
-Linux/MacOS 用と Windows 用の両方のバージョンで示します。
+GNU/Linux/MacOS 用と Windows 用の両方のバージョンで示します。
 
 最初の例は、4 楽章のオーケストラのためのもので、@c
 以下のようなディレクトリ構造を持ちます:
index ac2aa3534b31ca044587cb723f0a4c53c9b509a6..6d9d3e3266b4c003ff6025372c19429c43f92b22 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
 
 @ignore
-    Translation of GIT committish: 3c62ac104645533873bba800f7b0f371089f535a
+    Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -134,21 +134,32 @@ Windows ユーザはこれらのコマンドを @q{コマンド プロンプト}
 convert-ly [@var{option}]@dots{} @var{filename}@dots{}
 @end example
 
-
 以下のオプションを与えることができます:
 
 @table @code
-@item -e,--edit
+@item -d, --diff-version-update
+@code{\version} を最新に更新します。最新バージョンよりも大きい場合は@c
+何もしません。
+
+@item -e, --edit
 入力ファイルに直接変換を適用して、それをその場で変更します。
 
-@item -f,--from=@var{from-patchlevel}
+@item -f, --from=@var{from-patchlevel}
 変換元のバージョンをセットします。@c
 これがセットされていない場合、@c
 @command{convert-ly} は入力ファイルの中にある
 @code{version} 文字列を基に推測します。@c
 例: @option{--from=2.10.25}
 
-@item -n,--no-version
+@item -h, --help
+ヘルプ (使い方) を表示します。
+
+@item -l @var{loglevel}, --loglevel=@var{loglevel}
+出力の饒舌さを @var{loglevel} にセットします。@c
+取り得る値は、大文字で、@code{PROGRESS} (デフォルト), @code{NONE},
+@code{WARNING}, @code{ERROR}, それに @code{DEBUG} です。
+
+@item -n, --no-version
 通常、@command{convert-ly} は @code{\version} インジケータを@c
 出力に付け加えます。@c
 このオプションを指定すると、それを抑制します。
@@ -156,18 +167,13 @@ convert-ly [@var{option}]@dots{} @var{filename}@dots{}
 @item -s, --show-rules
 すべての変換を表示して、終了します。
 
-@item --to=@var{to-patchlevel}
-変換先のバージョンをセットします。@c
-デフォルトは利用可能な最新バージョンです。@c
-例: @option{--to=2.12.2}
+@item -t, --to=@var{to-patchlevel}
+変換先のバージョンを明示してセットします。@c
+明示されない場合は、デフォルトで最新バージョンにセットします。
 
-@item -h, --help
-使用方法についてのヘルプを表示します。
-
-@item -l @var{loglevel}, --loglevel=@var{loglevel}
-出力の饒舌さを @var{loglevel} にセットします。@c
-取り得る値は @code{NONE}, @code{ERROR}, @code{WARNING},
-@code{PROGRESS} (デフォルト), それに @code{DEBUG} です。
+@example
+convert-ly --to=2.14.1 myfile.ly
+@end example
 
 @end table
 
diff --git a/Documentation/ja/web/GNUmakefile b/Documentation/ja/web/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
diff --git a/Documentation/learning/GNUmakefile b/Documentation/learning/GNUmakefile
deleted file mode 100644 (file)
index c93c9e0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 044cfcf6dfb759bcf20d9472e060c87308378ffa..8c833c76f56e81f2d5e91456ba0dc422125dd185 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @ignore
 Tutorial guidelines:  (different from policy.txt!)
@@ -51,7 +51,7 @@ This section introduces common notation that is used for one voice
 on one staff.
 
 @menu
-* Bar checks::
+* Bar lines and bar checks::
 * Accidentals and key signatures::
 * Ties and slurs::
 * Articulation and dynamics::
@@ -60,9 +60,32 @@ on one staff.
 * Advanced rhythmic commands::
 @end menu
 
+@node Bar lines and bar checks
+@subsection Bar lines and bar checks
+
+@menu
+* Bar lines::
+* Bar checks::
+@end menu
+
+@node Bar lines
+@unnumberedsubsubsec Bar lines
+
+
+Single bar lines are automatically placed in the music so
+there is no need to add them manually.  Other types of bar
+lines are added using @code{\bar}, for example
+@code{\bar "||"} for a double bar line, or @code{\bar "|."}
+for an ending bar line.  For a full list of bar lines see
+the @ruser{Bar lines}.
+
+@lilypond[verbatim,quote,relative=2]
+g1 e1 \bar "||" c2. c'4 \bar "|."
+@end lilypond
 
 @node Bar checks
-@subsection Bar checks
+@unnumberedsubsubsec Bar checks
+
 
 Though not strictly necessary, @emph{bar checks} should be
 used in the input code to show where bar lines are expected
@@ -84,11 +107,19 @@ Notation Reference:
 @node Accidentals and key signatures
 @subsection Accidentals and key signatures
 
+@menu
+* Accidentals::
+* Key signatures::
+* Warning key signatures and pitches::
+@end menu
+
 @warning{New users are often confused by these -- please read the
 warning at the bottom of this page, especially if you are not
 familiar with music theory!}
 
-@subheading Accidentals
+@node Accidentals
+@unnumberedsubsubsec Accidentals
+
 
 @cindex accidentals
 @cindex accidentals and key signatures
@@ -120,7 +151,10 @@ cis4 ees fisis, aeses
 @end lilypond
 
 @cindex key signature, setting
-@subheading Key signatures
+
+@node Key signatures
+@unnumberedsubsubsec Key signatures
+
 
 @cindex key signature
 @cindex major
@@ -151,7 +185,9 @@ a1 |
 
 @smallspace
 
-@subheading Warning: key signatures and pitches
+@node Warning key signatures and pitches
+@unnumberedsubsubsec Warning: key signatures and pitches
+
 
 Music Glossary: @rglos{accidental}, @rglos{key signature},
 @rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp},
@@ -228,7 +264,15 @@ Notation Reference:
 @funindex ( ... )
 @funindex \( ... \)
 
-@subheading Ties
+@menu
+* Ties::
+* Slurs::
+* Phrasing slurs::
+* Warnings slurs vs. ties::
+@end menu
+
+@node Ties
+@unnumberedsubsubsec Ties
 
 
 Music Glossary: @rglos{tie}.
@@ -240,7 +284,8 @@ first note being tied.
 g4~ g c2~ | c4~ c8 a~ a2 |
 @end lilypond
 
-@subheading Slurs
+@node Slurs
+@unnumberedsubsubsec Slurs
 
 
 Music Glossary: @rglos{slur}.
@@ -253,7 +298,9 @@ starting note and ending note are marked with @code{(} and
 d4( c16) cis( d e c cis d) e( d4)
 @end lilypond
 
-@subheading Phrasing slurs
+@node Phrasing slurs
+@unnumberedsubsubsec Phrasing slurs
+
 
 Music Glossary: @rglos{slur}, @rglos{phrasing}.
 
@@ -269,7 +316,10 @@ g4\( g8( a) b( c) b4\)
 @smallspace
 
 @cindex slurs versus ties
-@subheading Warnings: slurs vs. ties
+
+@node Warnings slurs vs. ties
+@unnumberedsubsubsec Warnings: slurs vs. ties
+
 
 Music Glossary: @rglos{articulation}, @rglos{slur}, @rglos{tie}.
 
@@ -294,8 +344,15 @@ Notation Reference:
 @node Articulation and dynamics
 @subsection Articulation and dynamics
 
+@menu
+* Articulations::
+* Fingerings::
+* Dynamics::
+@end menu
+
+@node Articulations
+@unnumberedsubsubsec Articulations
 
-@subheading Articulations
 
 @cindex articulation
 @cindex accent
@@ -307,11 +364,13 @@ Common @notation{articulations} can be added to a note using a
 dash @code{-} and a single character:
 
 @lilypond[verbatim,quote,relative=2]
-c4-^ c-+ c-- c-|
+c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
-@subheading Fingerings
+@node Fingerings
+@unnumberedsubsubsec Fingerings
+
 
 @cindex fingering
 
@@ -337,7 +396,9 @@ to let LilyPond determine the articulation directions.
 c4_-^1 d^. f^4_2-> e^-_+
 @end lilypond
 
-@subheading Dynamics
+@node Dynamics
+@unnumberedsubsubsec Dynamics
+
 
 @cindex dynamics
 @cindex decrescendo
@@ -471,7 +532,15 @@ Notation Reference:
 @node Advanced rhythmic commands
 @subsection Advanced rhythmic commands
 
-@subheading Partial measure
+@menu
+* Partial measure::
+* Tuplets::
+* Grace notes::
+@end menu
+
+@node Partial measure
+@unnumberedsubsubsec Partial measure
+
 
 @cindex pickup
 @cindex anacrusis
@@ -491,30 +560,35 @@ is a quarter note pickup and @code{\partial 8} an eighth note.
 c2 d |
 @end lilypond
 
-@subheading Tuplets
+@node Tuplets
+@unnumberedsubsubsec Tuplets
+
 
 @cindex tuplets
 @cindex triplets
 
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
 
 Music Glossary: @rglos{note value}, @rglos{triplet}.
 
-@notation{Tuplets} are made with the @code{\times} keyword.  It
+@notation{Tuplets} are made with the @code{\tuplet} keyword.  It
 takes two arguments: a fraction and a piece of music.  The
-duration of the piece of music is multiplied by the fraction.
-Triplets make notes occupy 2/3 of their notated duration, so a
-@notation{triplet} has 2/3 as its fraction
+fraction is the number of tuplet notes over the number 
+of notes normally filling the same duration.
+For triplets, there are three notes instead of two, so
+@notation{triplets} have 3/2 as their fraction.
 
 @lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
 @end lilypond
 
-@subheading Grace notes
+@node Grace notes
+@unnumberedsubsubsec Grace notes
+
 
 @cindex grace notes
 @cindex acciaccatura
@@ -535,7 +609,7 @@ although they can also be created by prefixing a music expression
 with the keyword @code{\appoggiatura} or @code{\acciaccatura}:
 
 @lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
 c2 \appoggiatura b16 c2 |
 c2 \acciaccatura b16 c2 |
 @end lilypond
@@ -576,6 +650,12 @@ than one voice on the same staff.
 @cindex compound music expression
 @cindex music expression, compound
 
+@menu
+* Analogy mathematical expressions::
+* Simultaneous music expressions multiple staves::
+* Simultaneous music expressions single staff::
+@end menu
+
 In LilyPond input files, music is represented by @emph{music
 expressions}.  A single note is a music expression:
 
@@ -599,7 +679,9 @@ one).  The result is another music expression:
 { { a4 g } f4 g }
 @end lilypond
 
-@subheading Analogy: mathematical expressions
+@node Analogy mathematical expressions
+@unnumberedsubsubsec Analogy: mathematical expressions
+
 
 This mechanism is similar to mathematical formulas: a big formula
 is created by composing small formulas.  Such formulas are called
@@ -625,7 +707,9 @@ arbitrarily deep, which is necessary for complex music like
 polyphonic scores.
 
 
-@subheading Simultaneous music expressions: multiple staves
+@node Simultaneous music expressions multiple staves
+@unnumberedsubsubsec Simultaneous music expressions: multiple staves
+
 
 @cindex multiple staves
 @cindex staves, multiple
@@ -668,12 +752,14 @@ different amount of space.  LilyPond does not care how much (or
 little) space there is at the beginning of a line, but indenting
 LilyPond code like this makes it much easier for humans to read.
 
-@warning{each note is relative to the previous note in
-the input, not relative to the @code{c''} in the initial
+@warning{each note is relative to the previous note in the input,
+only the first is relative to the @code{c''} in the initial
 @code{@bs{}relative} command.}
 
 
-@subheading Simultaneous music expressions: single staff
+@node Simultaneous music expressions single staff
+@unnumberedsubsubsec Simultaneous music expressions: single staff
+
 
 To determine the number of staves in a piece, LilyPond looks at
 the beginning of the first expression.  If there is a single note,
@@ -758,9 +844,6 @@ than polyrhythmic scores.
 }
 @end lilypond
 
-
-
-
 @node Staff groups
 @subsection Staff groups
 
@@ -937,12 +1020,7 @@ separating each syllable with a space.
 >>
 @end lilypond
 
-@warning{It is essential that the final syllable is separated from
-the terminating curly bracket by a space or a newline, or it will be
-assumed to be part of the syllable, giving rise to an obscure
-error, see @rprogram{Apparent error in ../ly/init.ly}.}
-
-Note the double angle brackets @w{@code{<< ... >>}} around the
+Note the double angle brackets @w{@code{<<@dots{}>>}} around the
 whole piece to show that the music and lyrics are to occur at the
 same time.
 
@@ -1253,7 +1331,7 @@ of another variable, giving a way of shortening the input if a
 section of music is repeated many times.
 
 @lilypond[verbatim,quote]
-tripletA = \times 2/3 { c,8 e g }
+tripletA = \tuplet 3/2 { c,8 e g }
 barA = { \tripletA \tripletA \tripletA \tripletA }
 
 \relative c'' {
@@ -1330,14 +1408,13 @@ above the music.  More information on titling can be found in
 @cindex absolute note names
 
 So far we have always used @code{\relative} to define pitches.
-This is the easiest way to enter most music, but another way of
-defining pitches exists: absolute mode.
+This is usually the fastest way to enter most music.  Without
+@code{\relative}, pitches are interpreted in absolute mode.
 
-If you omit the @code{\relative}, LilyPond treats all pitches as
-absolute values.  A @code{c'} will always mean middle C, a
-@code{b} will always mean the note one step below middle C, and a
-@code{g,} will always mean the note on the bottom staff of the
-bass clef.
+In this mode, LilyPond treats all pitches as absolute values.  A
+@code{c'} will always mean middle C, a @code{b} will always mean
+the note one step below middle C, and a @code{g,} will always mean
+the note on the bottom staff of the bass clef.
 
 @lilypond[verbatim,quote]
 {
@@ -1397,9 +1474,25 @@ to find.
 
 However, absolute mode is useful for music which has large
 intervals, and is extremely useful for computer-generated LilyPond
-files.
+files.  When cutting and pasting melody fragments, absolute mode
+preserves the original octave.
 
+Sometimes music is arranged in more complex ways.  If you are
+using @code{\relative} inside of @code{\relative}, the outer and
+inner relative sections are independent:
 
+@lilypond[verbatim,quote]
+\relative c { c'4 \relative c'' { f g } c }
+@end lilypond
+
+@funindex \absolute
+If you are using absolute music inside of relative, you'll need to
+mark the absolute music explicitly with @code{\absolute} to stop
+it from becoming part of the relative music:
+
+@lilypond[verbatim,quote]
+\relative c { c'4 \absolute { f'' g'' } c }
+@end lilypond
 
 @node After the tutorial
 @subsection After the tutorial
index 732874c1bb64fd8486588f77d1fcdaf75af6cb65..b8f001b3a282937f642510675e6e19666832f67f 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.29"
 
 @node Fundamental concepts
 @chapter Fundamental concepts
@@ -57,7 +57,7 @@ A basic example of a LilyPond input file is
 \header @{ @}
 
 \score @{
-  @var{...compound music expression...}  % all the music goes here!
+  @var{ @dots{} compound music expression @dots{} }  % all the music goes here!
   \layout @{ @}
   \midi @{ @}
 @}
@@ -133,13 +133,13 @@ note to a huge compound expression like
 @example
 @{
   \new StaffGroup <<
-    @var{...insert the whole score of a Wagner opera in here...}
+    @var{ @dots{} insert the whole score of a Wagner opera in here @dots{} }
   >>
 @}
 @end example
 
 @noindent
-Since everything is inside @code{@{ ... @}}, it counts
+Since everything is inside @code{@{ @dots{} @}}, it counts
 as one music expression.
 
 As we saw previously, the @code{\score} block can contain other
@@ -301,12 +301,12 @@ Here we have given names to the staves -- @qq{singer} and
 to cultivate so that you can see at a glance what each stave is
 for.
 
-Remember that we use @code{<< ... >>} instead of @code{@{ ... @}} to
+Remember that we use @code{<< @dots{} >>} instead of @code{@{ @dots{} @}} to
 show simultaneous music.  This causes the vocal part and piano part
-to appear one above the other in the score.  The @code{<< ... >>}
+to appear one above the other in the score.  The @code{<< @dots{} >>}
 construct would not be necessary for the Singer staff in the example
 above if it were going to contain only one sequential music
-expression, but @code{<< ... >>} rather than braces is necessary if
+expression, but @code{<< @dots{} >>} rather than braces is necessary if
 the music in the Staff is to contain two or more simultaneous
 expressions, e.g. two simultaneous Voices, or a Voice with lyrics.
 We're going to have a voice with lyrics, so angle brackets are
@@ -484,27 +484,27 @@ constructs.
 @multitable @columnfractions .3 .7
 @headitem Bracket Type
   @tab Function
-@item @code{@{ .. @}}
+@item @code{@{ @dots{} @}}
   @tab Encloses a sequential segment of music
-@item @code{< .. >}
+@item @code{< @dots{} >}
   @tab Encloses the notes of a chord
-@item @code{<< .. >>}
+@item @code{<< @dots{} >>}
   @tab Encloses simultaneous music expressions
-@item @code{( .. )}
+@item @code{( @dots{} )}
   @tab Marks the start and end of a slur
-@item @code{\( .. \)}
+@item @code{\( @dots{} \)}
   @tab Marks the start and end of a phrasing slur
-@item @code{[ .. ]}
+@item @code{[ @dots{} ]}
   @tab Marks the start and end of a manual beam
 @end multitable
 
 To these we should add other constructs which generate lines
 between or across notes: ties (marked by a tilde, @code{~}),
-tuplets written as @code{\times x/y @{..@}}, and grace notes
-written as @code{\grace@{..@}}.
+tuplets written as @code{\tuplet x/y @{ @dots{} @}}, and grace notes
+written as @code{\grace @{ @dots{} @}}.
 
 Outside LilyPond, the conventional use of brackets requires the
-different types to be properly nested, like this, @code{<< [ @{ ( .. )
+different types to be properly nested, like this, @code{<< [ @{ ( @dots{} )
 @} ] >>}, with the closing brackets being encountered in exactly the
 opposite order to the opening brackets.  This @strong{is} a
 requirement for the three types of bracket described by the word
@@ -532,10 +532,10 @@ extending into a tuplet, a tie crossing two tuplets, and a
 phrasing slur extending out of a tuplet (lines 3 and 4).
 
 @lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
 @end lilypond
 
 
@@ -593,7 +593,7 @@ this example of four chords:
 @end lilypond
 
 This can be expressed using just the single angle bracket chord
-symbols, @code{< ... >}, and for this just a single voice is
+symbols, @code{< @dots{} >}, and for this just a single voice is
 needed.  But suppose the F-sharp were actually an eighth-note
 followed by an eighth-note G, a passing note on the way to the A?
 Now we have two notes which start at the same time but have
@@ -610,8 +610,8 @@ Let us see how this is done in LilyPond input syntax.
 @funindex \\
 
 The easiest way to enter fragments with more than one voice on a
-staff is to enter each voice as a sequence (with @code{@{...@}}),
-and combine them simultaneously with angle brackets, @code{<<...>>}.
+staff is to enter each voice as a sequence (with @code{@{ @dots{} @}}),
+and combine them simultaneously with angle brackets, @code{<< @dots{} >>}.
 The fragments must also be separated with double backward slashes,
 @code{\\}, to place them in separate voices.  Without these, the
 notes would be entered into a single voice, which would usually
@@ -689,7 +689,7 @@ of slurs, stems, ties, dynamics etc., is set appropriately.
 @end lilypond
 
 These voices are all separate from the main voice that contains
-the notes just outside the @code{<< .. >>} construct.  Let's call
+the notes just outside the @code{<< @dots{} >>} construct.  Let's call
 this the @emph{simultaneous construct}.  Slurs and ties may only
 connect notes within the same voice, so slurs and ties cannot go
 into or out of a simultaneous construct.  Conversely,
@@ -749,7 +749,7 @@ used here) reverts the style back to the default.
 We shall see later how commands like these may be created by the
 user.
 See @ref{Visibility and color of objects} and
-@ref{Using variables for tweaks}.
+@ref{Using variables for layout adjustments}.
 
 @cindex polyphony and relative note entry
 @cindex relative note entry and polyphony
@@ -775,13 +775,13 @@ voices are widely separated, is to place a @code{\relative}
 command at the start of each voice:
 
 @example
-\relative c' @{ noteA ... @}
+\relative c' @{ noteA @dots{} @}
 <<
-  \relative c'' @{ < noteB noteC > ... @}
+  \relative c'' @{ < noteB noteC > @dots{} @}
 \\
-  \relative g' @{ noteD ... @}
+  \relative g' @{ noteD @dots{} @}
 >>
-\relative c' @{ noteE ... @}
+\relative c' @{ noteE @dots{} @}
 @end example
 
 Let us finally analyze the voices in a more complex piece of music.
@@ -802,15 +802,15 @@ later sections.
   \\  % Voice two
     {
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No voice three
   \\  % Voice four
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -852,15 +852,15 @@ not understand.
   \\  % Voice two
     { \voiceTwoStyle
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
   \\  % No Voice three (we want stems down)
   \\  % Voice four
     { \voiceThreeStyle
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -1546,7 +1546,7 @@ use in the section on lyrics, see @ref{Voices and vocals}.
 
 
 @seealso
-Notation Reference: @ruser{Creating contexts}.
+Notation Reference: @ruser{Creating and referencing contexts}.
 
 
 @node Engravers explained
@@ -1603,8 +1603,7 @@ from the name, or vice versa.
   @tab Engraves clefs
 @item Completion_heads_engraver
   @tab Splits notes which cross bar lines
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
   @tab Creates hairpins and dynamic texts
 @item Forbid_line_break_engraver
   @tab Prevents line breaks if a musical element is still active
@@ -1792,9 +1791,9 @@ and this turns them off in all staves:
 >>
 @end lilypond
 
-As another example, if @code{clefOctavation} is set in
+As another example, if @code{clefTransposition} is set in
 the @code{Score} context this immediately changes the value
-of the octavation in all current staves and sets a new default
+of the transposition in all current staves and sets a new default
 value which will be applied to all staves.
 
 The opposite command, @code{\unset}, effectively removes the
@@ -1842,7 +1841,7 @@ The default value of context properties may be set at the time the
 context is created.  Sometimes this is a clearer way of setting a
 property value if it is to remain fixed for the duration of
 the context.  When a context is created with a @code{\new}
-command it may be followed immediately by a @code{\with @{ .. @}}
+command it may be followed immediately by a @code{\with @{ @dots{} @}}
 block in which the default property values are set.  For example,
 if we wish to suppress the printing of extra naturals for the
 duration of a staff we would write:
@@ -1895,7 +1894,7 @@ The statement which sets the property value is the same as that in a
 @code{\context} block within a @code{\layout} block.  Each
 @code{\context} block will affect all contexts of the type specified
 throughout the @code{\score} or @code{\book} block in which the
-@code{\layout} block appears.  Here is a example to show the format:
+@code{\layout} block appears.  Here is an example to show the format:
 
 @lilypond[verbatim,quote]
 \score {
@@ -2325,7 +2324,7 @@ celloMusic = \relative c {
 
 @seealso
 The starting templates can be found in the @q{Templates} appendix,
-see @ref{Single staff}.
+see @ref{Single staff templates}.
 
 
 @node Four-part SATB vocal score
@@ -2437,8 +2436,8 @@ lower = \relative c, {
 @end lilypond
 
 None of the templates provides this layout exactly.  The nearest is
-@q{SATB vocal score and automatic piano reduction} -- see
-@ref{Vocal ensembles} -- but we need to change the layout and add a piano
+@ref{SATB vocal score and automatic piano reduction} -- but we need
+to change the layout and add a piano
 accompaniment which is not derived automatically from the vocal parts.
 The variables holding the music and words for the vocal parts are
 fine, but we shall need to add variables for the piano reduction.
@@ -2778,12 +2777,12 @@ see what errors it generates.
 @end example
 
 It is not necessary to use the simultaneous construct
-@code{<< .. >>} for the manual two staff and the pedal organ staff,
+@code{<< @dots{} >>} for the manual two staff and the pedal organ staff,
 since they contain only one music expression, but it does no harm,
 and always using angle brackets after @code{\new Staff} is a good
 habit to cultivate in case there are multiple voices.  The opposite
 is true for Voices: these should habitually be followed by braces
-@code{@{ .. @}} in case your music is coded in several variables
+@code{@{ @dots{} @}} in case your music is coded in several variables
 which need to run consecutively.
 
 Let's add this structure to the score block, and adjust the indenting.
@@ -2877,8 +2876,7 @@ so that the values are identical.
         @}
       >>  % end ManualOne Staff context
       \new Staff = "ManualTwo" \with @{
-        \override VerticalAxisGroup
-          #'staff-staff-spacing  #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       @} <<
         \keyTime
         \clef "bass"
@@ -2941,8 +2939,7 @@ PedalOrganMusic = \relative c {
         }
       >>  % end ManualOne Staff context
       \new Staff = "ManualTwo" \with {
-        \override VerticalAxisGroup
-          #'staff-staff-spacing #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       } <<
         \keyTime
         \clef "bass"
@@ -3009,7 +3006,7 @@ macros, or user-defined commands) for tweaks:
 @lilypond[quote,verbatim,ragged-right]
 dolce = \markup { \italic \bold dolce }
 
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
 fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
@@ -3042,7 +3039,7 @@ the last line.
 violin = \relative c'' @{
   \repeat volta 2 @{
     c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
-    \once \override TextScript #'padding = #5.0
+    \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d |
     c,4.\markup @{
       \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
@@ -3069,7 +3066,7 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = #padding
+     \once \override TextScript.padding = #padding
    #})
 
 \relative c''' {
index 0b6bc00fa47d9ccfe132ac78c88593fe28715a99..2370ff1f3b77c72dbb21b3b28e7e00ef2948f1a1 100644 (file)
@@ -17,38 +17,47 @@ This section of the manual contains templates with the LilyPond score
 already set up for you.  Just add notes, run LilyPond, and enjoy
 beautiful printed scores!
 
-@c bad node name for ancient notation to avoid conflict
 @menu
-* Single staff::
+* Single staff templates::
 * Piano templates::
-* String quartet::
-* Vocal ensembles::
+* String quartet templates::
+* Vocal ensembles templates::
 * Orchestral templates::
 * Ancient notation templates::
 * Other templates::
 @end menu
 
 
-@node Single staff
-@appendixsec Single staff
+@node Single staff templates
+@appendixsec Single staff templates
+
+@menu
+* Notes only::
+* Notes and lyrics::
+* Notes and chords::
+* Notes lyrics and chords::
+@end menu
 
+@node Notes only
 @appendixsubsec Notes only
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
 {single-staff-template-with-only-notes.ly}
 
-
+@node Notes and lyrics
 @appendixsubsec Notes and lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
 {single-staff-template-with-notes-and-lyrics.ly}
 
+@node Notes and chords
 @appendixsubsec Notes and chords
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {single-staff-template-with-notes-and-chords.ly}
 
-@appendixsubsec Notes, lyrics, and chords.
+@node Notes lyrics and chords
+@appendixsubsec Notes, lyrics, and chords
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {single-staff-template-with-notes,-lyrics,-and-chords.ly}
@@ -57,69 +66,102 @@ beautiful printed scores!
 @node Piano templates
 @appendixsec Piano templates
 
+@menu
+* Solo piano::
+* Piano and melody with lyrics::
+* Piano centered lyrics::
+@end menu
+
+@node Solo piano
 @appendixsubsec Solo piano
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-simple.ly}
 
+@node Piano and melody with lyrics
 @appendixsubsec Piano and melody with lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-with-melody-and-lyrics.ly}
 
+@node Piano centered lyrics
 @appendixsubsec Piano centered lyrics
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {piano-template-with-centered-lyrics.ly}
 
 
-@node String quartet
-@appendixsec String quartet
+@node String quartet templates
+@appendixsec String quartet templates
 
+@menu
+* String quartet::
+* String quartet parts::
+@end menu
+
+@node String quartet
 @appendixsubsec String quartet
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {string-quartet-template-simple.ly}
 
+@node String quartet parts
 @appendixsubsec String quartet parts
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {string-quartet-template-with-separate-parts.ly}
 
 
-@node Vocal ensembles
-@appendixsec Vocal ensembles
+@node Vocal ensembles templates
+@appendixsec Vocal ensembles templates
 
+@menu
+* SATB vocal score::
+* SATB vocal score and automatic piano reduction::
+* SATB with aligned contexts::
+* SATB on four staves::
+* Solo verse and two-part refrain::
+* Hymn tunes::
+* Psalms::
+@end menu
+
+@node SATB vocal score
 @appendixsubsec SATB vocal score
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template.ly}
 
+@node SATB vocal score and automatic piano reduction
 @appendixsubsec SATB vocal score and automatic piano reduction
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-automatic-piano-reduction.ly}
 
+@node SATB with aligned contexts
 @appendixsubsec SATB with aligned contexts
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly}
 
+@node SATB on four staves
 @appendixsubsec SATB on four staves
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {satb-choir-template---four-staves.ly}
 
+@node Solo verse and two-part refrain
 @appendixsubsec Solo verse and two-part refrain
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {vocal-ensemble-template-with-verse-and-refrain.ly}
 
+@node Hymn tunes
 @appendixsubsec Hymn tunes
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {hymn-template.ly}
 
+@node Psalms
 @appendixsubsec Psalms
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
@@ -129,21 +171,33 @@ beautiful printed scores!
 @node Orchestral templates
 @appendixsec Orchestral templates
 
+@menu
+* Orchestra choir and piano::
+@end menu
+
+@node Orchestra choir and piano
 @appendixsubsec Orchestra, choir and piano
+
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
 {orchestra,-choir-and-piano-template.ly}
 
 
-@c bad node name to avoid node name conflict
 @node Ancient notation templates
 @appendixsec Ancient notation templates
 
+@menu
+* Transcription of mensural music::
+* Gregorian transcription template::
+@end menu
+
+@node Transcription of mensural music
 @appendixsubsec Transcription of mensural music
 
 @c Line-width below is because of Issue 766.  If that's fixed, it can be removed.
 @lilypondfile[verbatim,quote,ragged-right,texidoc,line-width=140]
 {ancient-notation-template----modern-transcription-of-mensural-music.ly}
 
+@node Gregorian transcription template
 @appendixsubsec Gregorian transcription template
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc]
@@ -153,6 +207,11 @@ beautiful printed scores!
 @node Other templates
 @appendixsec Other templates
 
+@menu
+* Jazz combo::
+@end menu
+
+@node Jazz combo
 @appendixsubsec Jazz combo
 
 @c Line-width below is because of Issue 766.  If that's fixed, it can be removed.
index ea6c4e08e6ae9867dae1ae8d8fff0e5ffb764637..dfb60fab0b5a1b8fd315b0d109910efc222f1547 100644 (file)
@@ -45,6 +45,10 @@ LilyPond input files (written by you) to produce output files.
 @cindex example, first
 @cindex case sensitive
 
+@menu
+* Producing output::
+@end menu
+
 @qq{Compiling} is the term used for processing an input file in
 LilyPond format to produce output file(s).  Output files are
 generally PDF (for printing or viewing), MIDI (for playing), and
@@ -83,7 +87,8 @@ produce an error message.
 
 @smallspace
 
-@subheading Producing output
+@node Producing output
+@unnumberedsubsubsec Producing output
 
 @cindex PDF file
 @cindex viewing music
@@ -165,6 +170,16 @@ started writing input files.
 @cindex simple notation
 @cindex notation, simple
 
+@menu
+* Pitches::
+* Durations (rhythms)::
+* Rests::
+* Time signature::
+* Tempo marks::
+* Clef::
+* All together::
+@end menu
+
 LilyPond will add some notation elements automatically.  In the
 next example, we have only specified four pitches, but LilyPond
 has added a clef, time signature, and rhythms.
@@ -180,7 +195,8 @@ This behavior may be altered, but in most cases these automatic
 values are useful.
 
 
-@subheading Pitches
+@node Pitches
+@unnumberedsubsubsec Pitches
 
 @cindex pitches
 @cindex relative mode
@@ -287,7 +303,8 @@ To change a note by two (or more!) octaves, we use multiple
 quotes @code{''} and not one double quote @code{"}@tie{}!
 @c " - keeps quotes in order for context-sensitive editor -td
 
-@subheading Durations (rhythms)
+@node Durations (rhythms)
+@unnumberedsubsubsec Durations (rhythms)
 
 @cindex note durations
 @cindex durations
@@ -330,8 +347,8 @@ explicitly (i.e., with a number).
 }
 @end lilypond
 
-
-@subheading Rests
+@node Rests
+@unnumberedsubsubsec Rests
 
 @cindex rest
 @cindex notating rests
@@ -349,7 +366,8 @@ A @notation{rest} is entered just like a note with the name
 @end lilypond
 
 
-@subheading Time signature
+@node Time signature
+@unnumberedsubsubsec Time signature
 
 @cindex time signature
 
@@ -372,7 +390,8 @@ command:
 }
 @end lilypond
 
-@subheading Tempo marks
+@node Tempo marks
+@unnumberedsubsubsec Tempo marks
 
 @cindex tempo marks
 @cindex metronome marks
@@ -400,7 +419,8 @@ set with the @code{\tempo} command:
 @end lilypond
 
 
-@subheading Clef
+@node Clef
+@unnumberedsubsubsec Clef
 
 @cindex clef
 @cindex treble
@@ -429,7 +449,8 @@ The @notation{clef} can be set using the @code{\clef} command:
 @end lilypond
 
 
-@subheading All together
+@node All together
+@unnumberedsubsubsec All together
 
 Here is a small example showing all these elements together:
 
index f4210b2e0d8bfa711c239e011491ff745eee6d58..5ee640a9b98d8b2d15e30b514b79399434136ee7 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.20"
 
 @node Tweaking output
 @chapter Tweaking output
@@ -22,6 +22,7 @@ configurable; virtually every fragment of output may be changed.
 * The Internals Reference manual::
 * Appearance of objects::
 * Placement of objects::
+* Vertical spacing::
 * Collisions of objects::
 * Further tweaking::
 @end menu
@@ -172,7 +173,16 @@ the types of objects and properties from their names.
 
 @cindex tweaking methods
 
-@strong{\override command}
+@menu
+* The override command::
+* The revert command::
+* The once prefix::
+* The overrideProperty command::
+* The tweak command::
+@end menu
+
+@node The override command
+@unnumberedsubsubsec The @code{@bs{}override} command
 
 @cindex override command
 @cindex override syntax
@@ -197,8 +207,7 @@ how this is done.
 The general syntax of this command is:
 
 @example
-\override @var{Context}.@var{LayoutObject} #'@var{layout-property} =
-#@var{value}
+\override @var{Context}.@var{LayoutObject}.@var{layout-property} = #@var{value}
 @end example
 
 @noindent
@@ -206,38 +215,46 @@ This will set the property with the name @var{layout-property} of the
 layout object with the name @var{LayoutObject}, which is a member of
 the @var{Context} context, to the value @var{value}.
 
-The @var{Context} can be omitted (and usually is) when the
+The @var{Context} may be omitted (and usually is) when the
 required context is unambiguously implied and is one of lowest
 level contexts, i.e., @code{Voice}, @code{ChordNames} or
 @code{Lyrics}, and we shall omit it in many of the following
 examples.  We shall see later when it must be specified.
 
 Later sections deal comprehensively with properties and their
-values, see @ref{Types of properties}.  But in this section we shall 
+values, see @ref{Types of properties}.  But in this section we shall
 use just a few simple properties and values which are easily
 understood in order to illustrate the format and use of these
 commands.
 
-For now, don't worry about the @code{#'}, which must precede the
-layout property, and the@tie{}@code{#}, which must precede the value.
-These must always be present in exactly this form.  This is the
-most common command used in tweaking, and most of the rest of
-this chapter will be directed to presenting examples of how it is
-used.  Here is a simple example to change the color of the
-note head:
+LilyPond's primary expressions are musical items like notes,
+durations, and markups.  More basic expressions like numbers,
+strings, and lists are processed in @q{Scheme mode}, which is
+invoked by prefixing the value with @samp{#}.  Although the
+values may sometimes have a valid representation in LilyPond's
+musical mode, this manual will always use @samp{#} for their
+entry for the sake of consistency.  For more information about
+Scheme mode, see @rextend{LilyPond Scheme syntax}.
+
+@code{\override} is the most common command used in tweaking, and
+most of the rest of this chapter will be directed to presenting
+examples of how it is used.  Here is a simple example to change the
+color of the note head:
 
 @cindex color property, example
 @cindex NoteHead, example of overriding
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a b c |
 @end lilypond
 
-@strong{\revert command}
+
+@node The revert command
+@unnumberedsubsubsec The @code{@bs{}revert} command
 
 @cindex revert command
 
@@ -252,7 +269,7 @@ value; note, not its previous value if several @code{\override}
 commands have been issued.
 
 @example
-\revert @var{Context}.@var{LayoutObject} #'@var{layout-property}
+\revert @var{Context}.@var{LayoutObject}.@var{layout-property}
 @end example
 
 Again, just like @var{Context} in the @code{\override} command,
@@ -265,15 +282,17 @@ of the note head to the default value for the final two notes:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 e4 f |
-\override NoteHead #'color = #green
+\override NoteHead.color = #green
 g4 a
-\revert NoteHead #'color
+\revert NoteHead.color
 b4 c |
 @end lilypond
 
-@strong{\once prefix}
+
+@node The once prefix
+@unnumberedsubsubsec The @code{@bs{}once} prefix
 
 @funindex \once
 @funindex once
@@ -289,17 +308,36 @@ note like this:
 @cindex color property, example
 @cindex NoteHead, example of overriding
 
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+@lilypond[quote,verbatim,relative=1]
+c4 d
+\override NoteHead.color = #red
+e4 f |
+\once \override NoteHead.color = #green
+g4 a
+\revert NoteHead.color
+b c |
+@end lilypond
+
+The @code{\once} prefix may also be used in front of many
+predefined commands to limit their effect to one musical moment:
+
+@lilypond[quote,verbatim,relative=1]
 c4 d
-\override NoteHead #'color = #red
+\once \stemDown
 e4 f |
-\once \override NoteHead #'color = #green
 g4 a
-\revert NoteHead #'color
+\once \hideNotes
 b c |
 @end lilypond
 
-@strong{\overrideProperty command}
+However, predefined commands of the form @code{\@dots{}Neutral},
+@code{\@dots{}Off} and @code{\un@dots{}} use @code{\revert} internally
+rather than @code{\override} so prefixing these with @code{\once} has no
+effect.
+
+
+@node The overrideProperty command
+@unnumberedsubsubsec The @code{@bs{}overrideProperty} command
 
 @cindex overrideProperty command
 
@@ -312,7 +350,9 @@ We mention it here for completeness, but for details see
 @rextend{Difficult tweaks}.
 @c Maybe explain in a later iteration  -td
 
-@strong{\tweak command}
+
+@node The tweak command
+@unnumberedsubsubsec The @code{@bs{}tweak} command
 
 @cindex tweak command
 
@@ -335,7 +375,7 @@ middle note head (the E) in a C major chord.  Let's first see what
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-\once \override NoteHead #'font-size = #-3
+\once \override NoteHead.font-size = #-3
 <c e g>4
 <c e g>4
 @end lilypond
@@ -360,7 +400,7 @@ a chord would be changed in this way:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 <c e g>4
-<c \tweak #'font-size #-3 e g>4
+<c \tweak font-size #-3 e g>4
 @end lilypond
 
 Note that the syntax of @code{\tweak} is different from that of the
@@ -371,7 +411,7 @@ also that an equals sign should not be present.  So the simple form
 of the @code{\tweak} command is
 
 @example
-\tweak #'@var{layout-property} #@var{value}
+\tweak @var{layout-property} #@var{value}
 @end example
 
 A @code{\tweak} command can also be used to modify just one in
@@ -382,8 +422,8 @@ a series of articulations, as shown here:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4^"Black"
-  -\tweak #'color #red ^"Red"
-  -\tweak #'color #green _"Green"
+  -\tweak color #red ^"Red"
+  -\tweak color #green _"Green"
 @end lilypond
 
 @noindent
@@ -402,14 +442,15 @@ the layout object, provided that LilyPond can trace its origin back to
 the original event:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental #'color #red   cis4
- \tweak Accidental #'color #green es
                                 g>
+<\tweak Accidental.color #red   cis4
+ \tweak Accidental.color #green es
+ g>
 @end lilypond
 
 This long form of the @code{\tweak} command can be described as
+
 @example
-\tweak @var{layout-object} #'@var{layout-property} @var{value}
+\tweak @var{layout-object}.@var{layout-property} @var{value}
 @end example
 
 @cindex tuplets, nested
@@ -437,12 +478,12 @@ printed in red on the first short tuplet bracket.
 @cindex color property, example
 
 @lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
-\times 4/3 {
-  \tweak #'color #red
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+\tweak direction #up
+\tuplet 3/4 {
+  \tweak color #red
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -455,18 +496,15 @@ appearance may be modified in the usual way with
 @cindex transparent property, example
 @cindex TupletNumber, example of overriding
 
-@c NOTE Tuplet brackets collide if notes are high on staff
-@c See issue 509
 @lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
-\once \override TupletNumber
-  #'text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 { c8[ c c] }
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
+\tuplet 3/2 {
   c8[ c]
   c8[ c]
-  \once \override TupletNumber #'transparent = ##t
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c c] }
+  \once \override TupletNumber.transparent = ##t
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
 }
 @end lilypond
 
@@ -597,11 +635,10 @@ the context.  Let's use a very large value for the thickness
 at first, so we can be sure the command is working.  We get:
 
 @example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
 @end example
 
-Don't forget the @code{#'} preceding the
-property name and a@tie{}@code{#} preceding the new value!
+Don't forget the@tie{}@code{#} preceding the new value!
 
 The final question is, @q{Where should this command be
 placed?}  While you are unsure and learning, the best
@@ -617,7 +654,7 @@ close to it.}  Let's do that:
   \time 6/8
   {
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     r4 bes8 bes[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -638,7 +675,7 @@ essentials required to make up your own -- but you will
 still need some practice.  This is provided in the examples
 which follow.
 
-@subheading Finding the context
+@subsubsubheading Finding the context
 
 @cindex context, finding
 @cindex context, identifying correct
@@ -659,7 +696,7 @@ lowest level contexts which is implied unambiguously by
 the fact that we are entering notes, we can omit it in this
 location.
 
-@subheading Overriding once only
+@subsubsubheading Overriding once only
 
 @cindex overriding once only
 @cindex once override
@@ -687,7 +724,7 @@ repositioned as follows:
   {
     r4 bes8
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes8[( g]) g |
     g8[( es]) es d[( f]) as |
     as8 g
@@ -704,7 +741,7 @@ Now only the first slur is made heavier.
 The @code{\once} command can also be used before the @code{\set}
 command.
 
-@subheading Reverting
+@subsubsubheading Reverting
 
 @cindex revert
 @cindex default properties, reverting to
@@ -727,10 +764,10 @@ the slurs begin:
   {
     r4 bes8
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     bes[( g]) g |
     % Increase thickness of immediately following slur only
-    \once \override Slur #'thickness = #5.0
+    \once \override Slur.thickness = #5.0
     g8[( es]) es d[( f]) as |
     as8 g
   }
@@ -755,11 +792,11 @@ after the second slur:
   {
     r4 bes8
     % Increase thickness of all following slurs from 1.2 to 5.0
-    \override Slur #'thickness = #5.0
+    \override Slur.thickness = #5.0
     bes[( g]) g |
     g8[( es]) es
     % Revert thickness of all following slurs to default of 1.2
-    \revert Slur #'thickness
+    \revert Slur.thickness
     d8[( f]) as |
     as8 g
   }
@@ -832,23 +869,18 @@ to change the lyrics to italics.  The object is @code{LyricText},
 the property is @code{font-shape} and the value is
 @code{italic}.  As before, we'll omit the context.
 
-As an aside, although it is an important one, note that because the
-values of @code{font-shape} are symbols they must be introduced with a
-single apostrophe, @code{'}.  That is why apostrophes are needed
-before @code{thickness} in the earlier example and @code{font-shape}.
-These are both symbols too.  Symbols are then read internally by
-LilyPond.  Some of them are the names of properties, like
-@code{thickness} or @code{font-shape}, others are used as values that
-can be given to properties, like @code{italic}.  Note the distinction
-from arbitrary text strings, which would appear as @code{"a text
-string"}; for more details about symbols and strings, see
-@rextend{Scheme tutorial}.
+As an aside, although it is an important one, note that some
+properties take values that are symbols, like @code{italic}, and
+must be preceded by an apostrophe, @code{'}.  Symbols are then
+read internally by LilyPond.  Note the distinction from arbitrary
+text strings, which would appear as @code{"a text string"}; for
+more details about symbols and strings, see @rextend{Scheme tutorial}.
 
 So we see that the @code{\override} command needed to print the lyrics
 in italics is:
 
 @example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
 @end example
 
 @noindent
@@ -870,7 +902,7 @@ like so:
     as8 g
   }
   \addlyrics {
-    \override LyricText #'font-shape = #'italic
+    \override LyricText.font-shape = #'italic
     The man who | feels love's sweet e -- | mo -- tion
   }
 }
@@ -879,33 +911,9 @@ like so:
 @noindent
 and the lyrics are all printed in italics.
 
-@subheading Specifying the context in lyric mode
-
-@cindex context, specifying in lyric mode
-@cindex lyric mode, specifying context
-
-In the case of lyrics, if you try specifying the context in the
-format given earlier the command will fail.  A syllable
-entered in lyricmode is terminated by either a space,
-a newline or a digit.  All other characters are included
-as part of the syllable.  For this reason a space or newline
-must appear before the terminating @code{@}} to prevent it being
-included as part of the final syllable.  Similarly,
-spaces must be inserted before and after the
-period or dot, @q{.}, separating the context name from the
-object name, as otherwise the two names are run together and
-the interpreter cannot recognize them.  So the command should be:
-
-@example
-\override Lyrics . LyricText #'font-shape = #'italic
-@end example
-
 @warning{In lyrics always leave whitespace between the final
 syllable and the terminating brace.}
 
-@warning{In overrides in lyrics always place spaces around
-the dot between the context name and the object name.}
-
 
 @seealso
 Extending: @rextend{Scheme tutorial}.
@@ -924,7 +932,10 @@ property name in the IR.  Here is a list of the types you may
 need, together with the rules for that type, and some examples.
 You must always add a hash symbol, @code{#}, of course,
 to the front of these values when they are entered in the
-@code{\override} command.
+@code{\override} command, even if the value itself already
+starts with@tie{}@code{#}.  We only give examples for constants
+here: if you want to compute a value using Scheme, see
+@rextend{Calculations in Scheme}.
 
 @multitable @columnfractions .2 .45 .35
 @headitem Property type
@@ -934,32 +945,33 @@ to the front of these values when they are entered in the
   @tab Either True or False, represented by #t or #f
   @tab @code{#t}, @code{#f}
 @item Dimension (in staff space)
-  @tab A positive decimal number (in units of staff space)
+  @tab A decimal number (in units of staff space)
   @tab @code{2.5}, @code{0.34}
 @item Direction
-  @tab A valid direction constant or its numerical equivalent (decimal
-values between -1 and 1 are allowed)
+  @tab A valid direction constant or its numerical equivalent
+  (@code{0} or @code{CENTER} indicate a neutral direction)
   @tab @code{LEFT}, @code{CENTER}, @code{UP},
        @code{1}, @w{@code{-1}}
 @item Integer
-  @tab A positive whole number
-  @tab @code{3}, @code{1}
+  @tab A whole number
+  @tab @code{3}, @code{-1}
 @item List
-  @tab A set of values separated by spaces, enclosed in parentheses
-and preceded by an apostrophe
-  @tab @code{'(left-edge staff-bar)}, @code{'(1)},
+  @tab A sequence of constants or symbols separated by spaces, enclosed
+  in parentheses
+and preceded by an apostrophe (quote mark)
+  @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
        @code{'(1.0 0.25 0.5)}
 @item Markup
   @tab Any valid markup
-  @tab @code{\markup @{ \italic "cresc." @}}
+  @tab @code{\markup @{ \italic "cresc." @}}, @code{"bagpipe"}
 @item Moment
   @tab A fraction of a whole note constructed with the
 make-moment function
-  @tab @code{(ly:make-moment 1 4)},
-       @code{(ly:make-moment 3 8)}
+  @tab @code{(ly:make-moment 1/4)},
+       @code{(ly:make-moment 3/8)}
 @item Number
-  @tab Any positive or negative decimal value
-  @tab @code{3.5}, @w{@code{-2.45}}
+  @tab Any positive or negative, possibly decimal, value
+  @tab @code{3}, @w{@code{-2.45}}
 @item Pair (of numbers)
   @tab Two numbers separated by a @q{space . space} and enclosed
 in brackets preceded by an apostrophe
@@ -973,9 +985,9 @@ preceded by an apostrophe
   @tab @code{bend::print}, @code{ly:text-interface::print},
        @code{#f}
 @item Vector
-  @tab A list of three items enclosed in parentheses and preceded
-by apostrophe-hash, @code{'#}.
-  @tab @code{'#(#t #t #f)}
+  @tab Constants
+  enclosed in @code{#(}@dots{}@code{)}.
+  @tab @code{#(#t #t #f)}
 @end multitable
 
 
@@ -1029,7 +1041,15 @@ All of these can affect the visibility of bar lines (and, of course,
 by extension, many other layout objects too.)  Let's consider each of
 these in turn.
 
-@subheading stencil
+@menu
+* The stencil property::
+* The break-visibility property::
+* The transparent property::
+* The color property::
+@end menu
+
+@node The stencil property
+@unnumberedsubsubsec The @code{stencil} property
 
 @cindex stencil property
 
@@ -1045,7 +1065,7 @@ the implied Context, @code{Voice}:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override BarLine #'stencil = ##f
+  \override BarLine.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1070,32 +1090,46 @@ it by adding the correct context:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'stencil = ##f
+  \override Staff.BarLine.stencil = ##f
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
 }
 @end lilypond
 
-Now the bar lines have vanished.
+Now the bar lines have vanished.  Setting the @code{stencil}
+property to @code{#f} is such a frequent operation that there is a
+shorthand for it called @code{\omit}:
+@funindex \omit
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \omit Staff.BarLine
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
 
 Note, though, that setting the @code{stencil} property to @code{#f}
 will cause errors when the dimensions of the object are required for
 correct processing.  For example, errors will be generated if the
 @code{stencil} property of the @code{NoteHead} object is set to
 @code{#f}.  If this is the case, you can instead use the
-@code{point-stencil} function, which sets the stencil to a object
+@code{point-stencil} function, which sets the stencil to an object
 with zero size:
 
 @lilypond[quote,verbatim,relative=2]
 {
   c4 c
-  \once \override NoteHead #'stencil = #point-stencil
+  \once \override NoteHead.stencil = #point-stencil
   c4 c
 }
 @end lilypond
 
-@subheading break-visibility
+@node The break-visibility property
+@unnumberedsubsubsec The @code{break-visibility} property
 
 @cindex break-visibility property
 
@@ -1104,10 +1138,11 @@ We see from the @code{BarLine} properties in the IR that the
 These control respectively whether bar lines are printed at the end of
 a line, in the middle of lines, and at the beginning of lines.  For
 our example we want all bar lines to be suppressed, so the value we
-need is @code{'#(#f #f #f)}.  Let's try that, remembering to include
+need is @code{#(#f #f #f)} (also available
+under the name @code{all-invisible}).  Let's try that, remembering to include
 the @code{Staff} context.  Note also that in writing this value we
-have @code{#'#} before the opening bracket.  The @code{'#} is required
-as part of the value to introduce a vector, and the first@tie{}@code{#} is
+have @code{##} before the opening parenthesis.  One @code{#} is required
+as part of vector constant syntax, and the first@tie{}@code{#} is
 required, as always, to precede the value itself in the
 @code{\override} command.
 
@@ -1117,7 +1152,7 @@ required, as always, to precede the value itself in the
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
+  \override Staff.BarLine.break-visibility = ##(#f #f #f)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1126,7 +1161,8 @@ required, as always, to precede the value itself in the
 
 And we see this too removes all the bar lines.
 
-@subheading transparent
+@node The transparent property
+@unnumberedsubsubsec The @code{transparent} property
 
 @cindex transparent property
 @cindex transparency
@@ -1149,7 +1185,7 @@ transparent is:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'transparent = ##t
+  \override Staff.TimeSignature.transparent = ##t
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1157,7 +1193,24 @@ transparent is:
 @end lilypond
 
 @noindent
-The time signature is gone, but this command leaves a gap where
+Again, setting the @code{transparent} property is a rather
+frequent operation, so we have a shorthand for it called
+@code{\hide}:
+@funindex \hide
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \hide Staff.TimeSignature
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+@noindent
+In either case, the time signature is gone, but this command
+leaves a gap where
 the time signature should be.  Maybe this is what is wanted for
 an exercise for the student to fill it in, but in other
 circumstances a gap might be undesirable.  To remove it, the
@@ -1170,7 +1223,7 @@ instead:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1179,10 +1232,13 @@ instead:
 
 @noindent
 and the difference is obvious: setting the stencil to @code{#f}
+(possibly via @code{\omit})
 removes the object entirely; making the object @code{transparent}
+(which can be done using @code{\hide})
 leaves it where it is, but makes it invisible.
 
-@subheading color
+@node The color property
+@unnumberedsubsubsec The @code{color} property
 
 @cindex color property
 
@@ -1211,7 +1267,7 @@ we write:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #white
+  \override Staff.BarLine.color = #white
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1221,11 +1277,11 @@ we write:
 @noindent
 and again, we see the bar lines are not visible.  Note that
 @emph{white} is not preceded by an apostrophe -- it is not
-a symbol, but a @emph{function}.  When called, it provides
+a symbol, but a @emph{variable}.  When evaluated, it provides
 the list of internal values required to set the color to
-white.  The other colors in the normal list are functions
+white.  The other colors in the normal list are variables
 too.  To convince yourself this is working you might like
-to change the color to one of the other functions in the
+to change the color to one of the other variables in the
 list.
 
 @cindex color, X11
@@ -1235,9 +1291,9 @@ list.
 
 The second way of changing the color is to use the list of
 X11 color names in the second list in @ruser{List of colors}.
-However, these must be preceded by another function, which
-converts X11 color names into the list of internal values,
-@code{x11-color}, like this:
+However, these are mapped to the actual values by the function
+@code{x11-color} which
+converts X11 color symbols into the list of internal values like this:
 
 @cindex BarLine, example of overriding
 @cindex color property, example
@@ -1245,7 +1301,7 @@ converts X11 color names into the list of internal values,
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(x11-color 'white)
+  \override Staff.BarLine.color = #(x11-color 'white)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1255,14 +1311,15 @@ converts X11 color names into the list of internal values,
 @noindent
 Note that in this case the function @code{x11-color} takes
 a symbol as an argument, so the symbol must be preceded by
-an apostrophe and the two enclosed in brackets.
+an apostrophe to keep it from being evaluated as a variable, and
+the whole function call has to be enclosed in parentheses.
 
 @cindex rgb colors
 @cindex color, rgb
 
 @funindex rgb-color
 
-There is yet a third function, one which converts RGB values into
+There is another function, one which converts RGB values into
 internal colors -- the @code{rgb-color} function.  This takes
 three arguments giving the intensities of the red, green and
 blue colors.  These take values in the range 0 to 1.  So to
@@ -1275,7 +1332,7 @@ and to white it should be @code{(rgb-color 1 1 1)}:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.BarLine #'color = #(rgb-color 1 1 1)
+  \override Staff.BarLine.color = #(rgb-color 1 1 1)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1300,12 +1357,12 @@ various shades of grey:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 {
   \time 12/16
-  \override Staff.StaffSymbol   #'color = #(x11-color 'grey30)
-  \override Staff.TimeSignature #'color = #(x11-color 'grey60)
-  \override Staff.Clef          #'color = #(x11-color 'grey60)
-  \override Voice.NoteHead      #'color = #(x11-color 'grey85)
-  \override Voice.Stem          #'color = #(x11-color 'grey85)
-  \override Staff.BarLine       #'color = #(x11-color 'grey10)
+  \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+  \override Staff.TimeSignature.color = #(x11-color 'grey60)
+  \override Staff.Clef.color = #(x11-color 'grey60)
+  \override Voice.NoteHead.color = #(x11-color 'grey85)
+  \override Voice.Stem.color = #(x11-color 'grey85)
+  \override Staff.BarLine.color = #(x11-color 'grey10)
   c4 b8 c d16 c d8 |
   g,8 a16 b8 c d4 e16 |
   e8
@@ -1361,7 +1418,7 @@ we simply set the stencil of each to @code{#f}, as follows:
 
 @cindex alignAboveContext property, example
 @cindex @code{\with}, example
-@cindex stencil property, example
+@funindex \omit
 @cindex Clef, example of overriding
 @cindex TimeSignature, example of overriding
 
@@ -1376,8 +1433,8 @@ we simply set the stencil of each to @code{#f}, as follows:
         alignAboveContext = #"main"
       }
       {
-        \override Staff.Clef #'stencil = ##f
-        \override Staff.TimeSignature #'stencil = ##f
+        \omit Staff.Clef
+        \omit Staff.TimeSignature
         { f8 f c }
       }
     >>
@@ -1393,7 +1450,9 @@ to the ossia staff.
 
 But what is the difference between modifying the staff context by
 using @code{\with} and modifying the stencils of the clef and the
-time signature with \override?  The main difference is that
+time signature with @code{\override}, or in this case
+@code{\omit}?
+The main difference is that
 changes made in a @code{\with} clause are made at the time the
 context is created, and remain in force as the @strong{default}
 values for the duration of that context, whereas
@@ -1436,9 +1495,34 @@ So we could replace the example above with
       \new Staff \with {
         alignAboveContext = #"main"
         % Don't print clefs in this staff
-        \override Clef #'stencil = ##f
+        \override Clef.stencil = ##f
+        % Don't print time signatures in this staff
+        \override TimeSignature.stencil = ##f
+      }
+      { f8 f c }
+    >>
+    r4 |
+  }
+}
+@end lilypond
+
+It turns out that we can also employ the shorthands @code{\hide}
+and @code{\omit} for setting the @code{transparent} property and
+clearing the @code{stencil} here, leading to the result
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+  \relative g' {
+    r4 g8 g c4 c8 d |
+    e4 r8
+    <<
+      { f8 c c }
+      \new Staff \with {
+        alignAboveContext = #"main"
+        % Don't print clefs in this staff
+        \omit Clef
         % Don't print time signatures in this staff
-        \override TimeSignature #'stencil = ##f
+        \omit TimeSignature
       }
       { f8 f c }
     >>
@@ -1467,7 +1551,7 @@ fonts of each object type, like @code{NoteHead}s with commands
 like
 
 @example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
 @end example
 
 or we can change the size of all fonts by setting a special
@@ -1499,8 +1583,8 @@ Let's try it in our ossia example:
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \omit Clef
+        \omit TimeSignature
         % Reduce all font sizes by ~24%
         fontSize = #-2
       }
@@ -1565,11 +1649,11 @@ objects in proportion.  It is used like this:
       { f8 c c }
       \new Staff \with {
         alignAboveContext = #"main"
-        \override Clef #'stencil = ##f
-        \override TimeSignature #'stencil = ##f
+        \omit Clef
+        \omit TimeSignature
         fontSize = #-2
         % Reduce stem length and line spacing to match
-        \override StaffSymbol #'staff-space = #(magstep -2)
+        \override StaffSymbol.staff-space = #(magstep -2)
       }
       { f8 f c }
     >>
@@ -1709,6 +1793,14 @@ either up or down; others like stems and flags also move to
 right or left when they point up or down.  This is controlled
 automatically when @code{direction} is set.
 
+@menu
+* The direction property::
+* Fingering::
+@end menu
+
+@node The direction property
+@unnumberedsubsubsec The @code{direction} property
+
 @cindex down
 @cindex up
 @cindex center
@@ -1725,11 +1817,11 @@ default behavior.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 a4 g c a |
-\override Stem #'direction = #DOWN
+\override Stem.direction = #DOWN
 a4 g c a |
-\override Stem #'direction = #UP
+\override Stem.direction = #UP
 a4 g c a |
-\revert Stem #'direction
+\revert Stem.direction
 a4 g c a |
 @end lilypond
 
@@ -1787,13 +1879,14 @@ the commonest.  The meaning of each is stated where it is not obvious.
   @tab Tuplets are below/above notes
 @end multitable
 
-Note that these predefined commands may @strong{not} be
+The neutral/normal variants of these commands are implemented
+using @code{\revert} and may @strong{not} be
 preceded by @code{\once}.  If you wish to limit the
-effect to a single note you must either use the equivalent
-@code{\once \override} command or use the predefined command
-followed after the affected note by the corresponding
-@code{\xxxNeutral} command.
+effect of the other commands (which are implemented using
+@code{\override}) to a single timestep, you can precede them with
+@code{\once} like you would do with explicit overrides.
 
+@node Fingering
 @unnumberedsubsubsec Fingering
 
 @cindex fingering, placement
@@ -1816,9 +1909,9 @@ specifying @code{DOWN} and @code{UP}:
 
 @lilypond[quote,verbatim,relative=2]
 c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #DOWN
+\override Fingering.direction = #DOWN
 c4-5 a-3 f-1 c'-5 |
-\override Fingering #'direction = #UP
+\override Fingering.direction = #UP
 c4-5 a-3 f-1 c'-5 |
 @end lilypond
 
@@ -1921,7 +2014,7 @@ could be reduced.  The default value can be seen from the
 try @w{@code{-7}}:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
+\override Fingering.font-size = #-7
 \set fingeringOrientations = #'(left)
 <f-2>4
 <c-1 e-2 g-3 b-5>4
@@ -1943,6 +2036,20 @@ try @w{@code{-7}}:
 @subsection Outside-staff objects
 
 Outside-staff objects are automatically placed to avoid collisions.
+There are several ways to override the automatic placement if the
+positioning is not optimum.
+
+@menu
+* The outside-staff-priority property::
+* The textLengthOn command::
+* Dynamics placement::
+* Grob sizing::
+@end menu
+
+
+@node The outside-staff-priority property
+@unnumberedsubsubsec The @code{outside-staff-priority} property
+
 Objects with the lower value of the @code{outside-staff-priority}
 property are placed nearer to the staff, and other outside-staff
 objects are then raised as far as necessary to avoid collisions.
@@ -2019,7 +2126,7 @@ these.
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Place dynamics above staff
 \dynamicUp
@@ -2069,12 +2176,12 @@ in the @code{Staff} context:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
 % Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
     = \markup { \small \bold Slower }
 % Place dynamics above staff
 \dynamicUp
 % Place following Ottava Bracket below Text Spanners
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
 % Start Ottava Bracket
 \ottava #1
 c'4 \startTextSpan
@@ -2117,10 +2224,10 @@ example showing the effect of the two methods:
 @lilypond[quote,verbatim,relative=2]
 c4( c^\markup { \tiny \sharp } d4.) c8 |
 c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
 c4^\markup { \tiny \sharp } d4.) c8 |
-\once \override Slur #'outside-staff-priority = #500
+\once \override Slur.outside-staff-priority = #500
 c4( c^\markup { \tiny \sharp } d4.) c8 |
 @end lilypond
 
@@ -2139,7 +2246,7 @@ in the IR or in the tables above, and increase the priority of
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 c2^"Text1"
 c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
+\once \override TextScript.outside-staff-priority = #500
 c2^"Text3"
 c2^"Text4" |
 @end lilypond
@@ -2152,7 +2259,8 @@ clearly will need to space the notes out horizontally to make more
 room for the text.  This is done using the @code{textLengthOn}
 command.
 
-@subheading \textLengthOn
+@node The textLengthOn command
+@unnumberedsubsubsec The @code{@bs{}textLengthOn} command
 
 @cindex notes, spreading out with text
 
@@ -2175,9 +2283,12 @@ c2^"Text4" |
 @end lilypond
 
 The command to revert to the default behavior is
-@code{\textLengthOff}.  Remember @code{\once} only works with
-@code{\override}, @code{\set}, @code{\revert} or @code{\unset},
-so cannot be used with @code{\textLengthOn}.
+@code{\textLengthOff}.  Alternatively, @code{\once} may be used
+with @code{\textLengthOn} if the effect is to be limited to just a
+single musical moment.
+The corresponding spacing behavior for rehearsal marks and tempo
+indications is independently controlled with the commands
+@code{\markLengthOn} and @code{\markLengthOff}.
 
 @cindex markup text, allowing collisions
 
@@ -2199,19 +2310,19 @@ c,,2^"Text" c'' |
 R1 |
 
 % Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 c,,2^"Long Text   " c'' |
 R1 |
 
 % Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
 \textLengthOn        % and turn on textLengthOn
 c,,2^"Long Text   "  % Spaces at end are honored
 c''2 |
 @end lilypond
 
-
-@subheading Dynamics
+@node Dynamics placement
+@unnumberedsubsubsec Dynamics placement
 
 @cindex tweaking dynamics placement
 @cindex dynamics, tweaking placement
@@ -2241,7 +2352,7 @@ shows:
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
-a4\f b\mf c\mp b\p
+a4\f b\mf a\mp b\p
 @end lilypond
 
 @noindent
@@ -2252,7 +2363,8 @@ were able to do this for markup text by using the @code{\textLengthOn}
 command, but there is no equivalent command for dynamic marks.  So we
 shall have to work out how to do this using @code{\override} commands.
 
-@subheading Grob sizing
+@node Grob sizing
+@unnumberedsubsubsec Grob sizing
 
 @cindex grob sizing
 @cindex sizing grobs
@@ -2273,16 +2385,17 @@ These are properties of all grobs which support the
 
 By default, outside-staff objects are given a width of zero so
 that they may overlap in the horizontal direction.  This is done
-by the trick of adding infinity to the leftmost extent and
-minus infinity to the rightmost extent by setting the
-@code{extra-spacing-width} to @code{'(+inf.0 . -inf.0)}.  So
-to ensure they do not overlap in the horizontal direction we
-must override this value of @code{extra-spacing-width} to
-@code{'(0 . 0)} so the true width shines through.  This is
-the command to do this for dynamic text:
+by the trick of making the leftmost extent infinity and
+the rightmost extent minus infinity by setting the
+@code{extra-spacing-width} to @code{'(+inf.0 . -inf.0)}.  To
+ensure they do not overlap in the horizontal direction we
+must override this value of @code{extra-spacing-width} to give them
+a little extra spacing.  The units are the space between two staff
+lines, so moving the left edge half a unit to the left and the
+right edge half a unit to the right should do it:
 
 @example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
 @end example
 
 @noindent
@@ -2291,39 +2404,218 @@ Let's see if this works in our previous example:
 @cindex DynamicText, example of overriding
 @cindex extra-spacing-width property, example
 
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
-a4\f b\mf c\mp b\p |
-@end lilypond
-
-@noindent
-Well, it has certainly stopped the dynamic marks being
-displaced, but two problems remain.  The marks should be
-spaced a little further apart and it would be better
-if they were all the same distance from the staff.
-We can solve the first problem easily.  Instead of making
-the @code{extra-spacing-width} zero we could add a little
-more to it.  The units are the space between two staff
-lines, so moving the left edge half a unit to the left and the
-right edge half a unit to the right should do it:
-
-@cindex DynamicText, example of overriding
-@cindex extra-spacing-width property, example
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
 \dynamicUp
 % Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
-a4\f b\mf c\mp b\p
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
+a4\f b\mf a\mp b\p
 @end lilypond
 
 @noindent
 This looks better, but maybe we would prefer the dynamic marks
 to be aligned along the same baseline rather than going up and
 down with the notes.  The property to do this is
-@code{staff-padding} which is covered in the following section.
+@code{staff-padding} which is covered in the section on collisions
+(see @ref{Collisions of objects}).
+
+
+@node Vertical spacing
+@section Vertical spacing
 
+As a rule, LilyPond's vertical spacing of musical objects is pretty
+good.  Let's see how it does with a simple song, with 2 voices and
+piano accompaniment:
+
+@lilypond[quote,fragment,ragged-right]
+<<
+  \new ChoirStaff
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+
+There's nothing wrong with the default vertical spacing.  However, let's
+assume that you're working with a publisher with some specific
+requirements for vertical spacing of staves and lyrics: they want
+the lyrics spaced away from any notes, they want the piano
+accompaniment spaced away from the vocal line and they want the two
+piano staves pushed together tightly.  Let's start with the lyrics.
+
+Lyrics sit within a system, and therefore the commands to space them
+are found in @ruser{Flexible vertical spacing within systems}.  It
+tells us that lyrics are @code{non-staff lines} and therefore the
+command to change their spacing will refer to the @code{nonstaff}
+property.  Spacing them away from the staff to which they relate
+(the top line) will use the @code{relatedstaff} property.  Spacing
+them from the lower line will use the @code{unrelatedstaff} property.
+The vocal parts are part of a @code{VerticalAxisGroup}, so we need to
+adjust its properties.  Let's try it and see if it works.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #5
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #5
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+
+Well - yes it does, but perhaps too well.  When we set the
+@code{padding} to 5, LilyPond adds 5 staff spaces to the distance
+between objects, which is too much for us here.  We'll use 2.
+
+Next, let's move the piano music away from the vocal parts.  The
+vocal music is a @code{ChoirStaff}, so we need to increase the
+spacing between that group of staves and the piano staff below.
+We'll do this by changing the @code{basic-distance} of the
+@code{StaffGrouper}'s @code{staffgroup-staff-spacing}.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff \with {
+    \override StaffGrouper.
+      staffgroup-staff-spacing.basic-distance = #15
+  }
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #2
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #2
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+
+Excellent.  Now just for the last requirement to make the piano staves
+closer together.  To do this, we again alter the properties of the
+@code{StaffGrouper}, but this time we're going to reduce both
+the @code{basic-distance} and the @code{padding}.  We can do this
+as shown below.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+  \new ChoirStaff \with {
+    \override StaffGrouper.
+      staffgroup-staff-spacing.basic-distance = #15
+  }
+  <<
+    \new Staff {
+      \new Voice = "music" {
+        b'2 c' c' c'
+      }
+    }
+    \new Lyrics \with {
+      \override VerticalAxisGroup.
+        nonstaff-relatedstaff-spacing.padding = #2
+      \override VerticalAxisGroup.
+        nonstaff-unrelatedstaff-spacing.padding = #2
+    }
+    \lyricsto "music" {
+      Here are some lyrics
+    }
+    \new Staff {
+      \clef bass e'2 f e c
+    }
+  >>
+  \new PianoStaff \with {
+    \override StaffGrouper.staff-staff-spacing = #'(
+                            (basic-distance . 0)
+                            (padding . 0))
+  }
+  <<
+    \new Staff {
+      g''2 c'' c'' a''
+    }
+    \new Staff {
+      \clef bass e2 f c e
+    }
+  >>
+>>
+@end lilypond
+
+That's put them really close together -- but it's what
+the publisher wanted.  They could be moved further
+apart by altering the @code{padding} or @code{basic-distance}
+if wanted.
+
+There are many ways of altering vertical spacing.  A key point
+to remember is that the spacing between objects in a
+@code{StaffGroup} (like @code{GrandStaff} or
+@code{PianoStaff} groups) is controlled by the spacing variables
+of the @code{StaffGrouper}. Spacing from ungrouped staves
+(like @code{Lyrics} and @code{Staff}) is controlled by the
+variables of the @code{VerticalAxisGroup}.  See the
+@ruser{Flexible vertical spacing paper variables} and
+@ruser{Flexible vertical spacing within systems} for more
+details.
 
 @node Collisions of objects
 @section Collisions of objects
@@ -2411,9 +2703,9 @@ space between any object which supports the
 @code{side-position-interface} and the nearest other object (generally
 the note or the staff lines); @code{staff-padding} applies only to
 those objects which are always set outside the staff -- it controls
-the minimum amount of space that should be inserted between that
-object and the staff.  Note that @code{staff-padding} has no effect on
-objects which are positioned relative to the note rather than the
+the minimum distance from the staff to the outside-staff object.
+Note that @code{staff-padding} has no effect on
+objects that are positioned relative to the note rather than the
 staff, even though it may be overridden without error for such objects
 -- it is simply ignored.
 
@@ -2570,7 +2862,19 @@ should be used to move them.
 Let's now see how the properties in the previous section can
 help to resolve overlapping notation.
 
-@subheading padding property
+@menu
+* The padding property::
+* The right-padding property::
+* The staff-padding property::
+* The self-alignment-X property::
+* The staff-position property::
+* The extra-offset property::
+* The positions property::
+* The force-hshift property::
+@end menu
+
+@node The padding property
+@unnumberedsubsubsec The @code{padding} property
 
 @cindex padding
 @cindex fixing overlapping notation
@@ -2585,7 +2889,7 @@ above or below notes.
 
 @lilypond[quote,fragment,relative=1,verbatim]
 c2\fermata
-\override Script #'padding = #3
+\override Script.padding = #3
 b2\fermata
 @end lilypond
 
@@ -2594,11 +2898,11 @@ b2\fermata
 
 @lilypond[quote,fragment,relative=1,verbatim]
 % This will not work, see below
-\override MetronomeMark #'padding = #3
+\override MetronomeMark.padding = #3
 \tempo 4 = 120
 c1 |
 % This works
-\override Score.MetronomeMark #'padding = #3
+\override Score.MetronomeMark.padding = #3
 \tempo 4 = 80
 d1 |
 @end lilypond
@@ -2615,7 +2919,8 @@ their @code{outside-staff-priority}, then that object and all
 objects outside it are moved.
 
 
-@subheading right-padding
+@node The right-padding property
+@unnumberedsubsubsec The @code{right-padding} property
 
 @cindex right-padding property
 
@@ -2637,15 +2942,13 @@ sesquisharp = \markup { \sesquisharp }
 \relative c'' {
   c4
   % This prints a sesquisharp but the spacing is too small
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 c
   % This improves the spacing
-  \once \override Score.AccidentalPlacement #'right-padding = #0.6
-  \once \override Accidental
-    #'stencil = #ly:text-interface::print
-  \once \override Accidental #'text = #sesquisharp
+  \once \override Score.AccidentalPlacement.right-padding = #0.6
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
   cis4 |
 }
 @end lilypond
@@ -2660,15 +2963,16 @@ note head by overriding @code{right-padding}.
 
 @noindent
 
-@subheading staff-padding property
+@node The staff-padding property
+@unnumberedsubsubsec The @code{staff-padding} property
 
 @cindex aligning objects on a baseline
 @cindex objects, aligning on a baseline
 
 @code{staff-padding} can be used to align objects such as dynamics
-along a baseline at a fixed height above the staff, rather than at a
-height dependent on the position of the note to which they are
-attached.  It is not a property of @code{DynamicText} but of
+along a baseline at a fixed distance from the staff, when no other
+notation forces them further from the staff.
+It is not a property of @code{DynamicText} but of
 @code{DynamicLineSpanner}.  This is because the baseline should apply
 equally to @strong{all} dynamics, including those created as extended
 spanners.  So this is the way to align the dynamic marks in the
@@ -2680,19 +2984,16 @@ example taken from the previous section:
 @cindex staff-padding property, example
 
 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-% Extend width by 1 unit
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
-% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner #'staff-padding = #2
-a4\f b\mf c\mp b\p
+\override DynamicLineSpanner.staff-padding = #3
+a4\f b\mf a\p b\mp
 @end lilypond
 
 
-@subheading self-alignment-X property
+@node The self-alignment-X property
+@unnumberedsubsubsec The @code{self-alignment-X} property
 
-The following example shows how this can resolve the collision
-of a string fingering object with a note's stem by aligning the
+The following example shows how to adjust the position
+of a string fingering object relative to a note's stem by aligning the
 right edge with the reference point of the parent note:
 
 @cindex StringNumber, example of overriding
@@ -2701,11 +3002,12 @@ right edge with the reference point of the parent note:
 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
 \voiceOne
 <a\2>
-\once \override StringNumber #'self-alignment-X = #RIGHT
+\once \override StringNumber.self-alignment-X = #RIGHT
 <a\2>
 @end lilypond
 
-@subheading staff-position property
+@node The staff-position property
+@unnumberedsubsubsec The @code{staff-position} property
 
 @cindex object collision within a staff
 
@@ -2721,11 +3023,11 @@ example of a collision of this type:
 << { c4 c c c } \\ { R1 } >>
 @end lilypond
 
-The best solution here is to move the multimeasure rest down, since
-the rest is in voice two.  The default in @code{\voiceTwo} (i.e. in
-the second voice of a @code{<<@{...@} \\ @{...@}>>} construct) is that
-@code{staff-position} is set to -4 for MultiMeasureRest, so we need to
-move it, say, four half-staff spaces down to @w{@code{-8}}.
+The best solution here is to move the multimeasure rest down, since the
+rest is in voice two. The default in @code{\voiceTwo} (i.e. in the
+second voice of a @code{<<@{@dots{}@} \\ @{@dots{}@}>>} construct) is
+that @code{staff-position} is set to -4 for MultiMeasureRest, so we need
+to move it, say, four half-staff spaces down to @w{@code{-8}}.
 
 @cindex MultiMeasureRest, example of overriding
 @cindex staff-position property, example
@@ -2734,7 +3036,7 @@ move it, say, four half-staff spaces down to @w{@code{-8}}.
 <<
   { c4 c c c }
   \\
-  \override MultiMeasureRest #'staff-position = #-8
+  \override MultiMeasureRest.staff-position = #-8
   { R1 }
 >>
 @end lilypond
@@ -2742,7 +3044,8 @@ move it, say, four half-staff spaces down to @w{@code{-8}}.
 This is better than using, for example, @code{extra-offset},
 because the ledger line above the rest is inserted automatically.
 
-@subheading extra-offset property
+@node The extra-offset property
+@unnumberedsubsubsec The @code{extra-offset} property
 
 @cindex positioning objects
 @cindex positioning grobs
@@ -2761,12 +3064,13 @@ the left, and 1.8 staff space downwards:
 @lilypond[quote,fragment,relative=1,verbatim]
 \stemUp
 f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
 f4-5
 @end lilypond
 
 
-@subheading positions property
+@node The positions property
+@unnumberedsubsubsec The @code{positions} property
 
 @cindex controlling tuplets, slurs, phrasing slurs, and beams manually
 @cindex manually controlling tuplets, slurs, phrasing slurs, and beams
@@ -2775,40 +3079,39 @@ f4-5
 @cindex phrasing slurs, controlling manually
 @cindex beams, controlling manually
 
-The @code{positions} property allows the position and slope of
-tuplets, slurs, phrasing slurs and beams to be controlled manually.
-Here's an example which has an ugly phrasing slur due to its trying to
-avoid the slur on the acciaccatura.
+The @code{positions} property allows the vertical position and hence
+the slope of tuplets, slurs, phrasing slurs and beams to be controlled
+manually.
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4 \acciaccatura e8\( d8 c~ c d c d\)
-@end lilypond
+Here's an example in which the phrasing slur and slur collide:
 
-@noindent
-We could simply move the phrasing slur above the notes, and this
-would be the preferred solution:
-
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\phrasingSlurUp
-\acciaccatura e8\( d8 c~ c d c d\)
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+a8 \( ( a'16 ) a \)
 @end lilypond
 
-@noindent
-But if there were some reason why this could not be done the
-other alternative would be to move the left end of the phrasing
-slur down a little using the @code{positions} property.  This
-also resolves the rather nasty shape.
-
 @cindex PhrasingSlur, example of overriding
 @cindex positions property, example
 
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
-\acciaccatura e8\( d8 c~ c d c d\)
+@noindent
+One possibility would be to move the two ends of the phrasing slur
+higher.  We can try setting the left end to 2.5 staff-spaces above the
+centre line and the right end to 4.5 above, and LilyPond will
+select the phrasing slur from the candidates it has found with its
+end points closest to these:
+
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+\once \override PhrasingSlur.positions = #'(2.5 . 4.5)
+a8 \( ( a'16 ) a \)
 @end lilypond
 
+This is an improvement, but why not lower the right end of the slur
+a little?  If you try it you'll find it can't be done in this way.
+That's because there are no candidate slurs lower than the one
+already selected, and in this case the @code{positions} property has
+no effect.  However, ties, slurs and phrasing slurs @emph{can} be
+positioned and shaped very precisely when necessary.  To learn how to
+do this, see @ruser{Modifying ties and slurs}.
+
 Here's a further example.  We see that the beams
 collide with the ties:
 
@@ -2843,7 +3146,7 @@ say, 1:
     { c'1 ~ c'2. e'8 f' }
     \\
     {
-      \override Beam #'positions = #'(-1 . -1)
+      \override Beam.positions = #'(-1 . -1)
       e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g''
     }
   >>
@@ -2860,7 +3163,8 @@ Note that the override continues to apply in the first voice of
 the second measure of eighth notes, but not to any of the beams in the
 second voice.
 
-@subheading force-hshift property
+@node The force-hshift property
+@unnumberedsubsubsec The @code{force-hshift} property
 
 We can now see how to apply the final corrections to the Chopin
 example introduced at the end of @ref{I'm hearing Voices}, which
@@ -2906,13 +3210,13 @@ Here's the final result:
     \\
     {
       <ees, c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
     \\
     \\
     {
-      \override NoteColumn #'force-hshift = #0
+      \override NoteColumn.force-hshift = #0
       aes'2 f4 fes
     }
   >> |
@@ -2945,7 +3249,7 @@ dynamics, fingering and pedalling.
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -2958,7 +3262,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % Reposition the c2 to the right of the merged note
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % Move the c2 out of the main note column
         % so the merge will work
         \shiftOnn
@@ -2970,8 +3274,7 @@ rhMusic = \relative c'' {
         % Stem on the d2 must be down to permit merging
         \stemDown
         % Stem on the d2 should be invisible
-        \tweak Stem #'transparent ##t
-        \tweak Flag #'transparent ##t
+        \tweak Stem.transparent ##t
         d2
       }
       \new Voice {
@@ -3147,7 +3450,7 @@ spaces relative to the center line of the staff.  So the following
 override placed just before the first tied note would move the tie up
 to 3.5 half staff spaces above the center line:
 
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
 
 This completes bar two, giving:
 
@@ -3156,7 +3459,7 @@ This completes bar two, giving:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3235,7 +3538,7 @@ to the end, giving:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3309,7 +3612,7 @@ Applying these changes gives:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3379,7 +3682,7 @@ the @code{force-hshift} property.  Here's the final result:
 rhMusic = \relative c'' {
   \new Voice {
     r2 c4.\( g8 |
-    \once \override Tie #'staff-position = #3.5
+    \once \override Tie.staff-position = #3.5
     bes1~ |
     \bar "||"
     \time 6/4
@@ -3393,7 +3696,7 @@ rhMusic = \relative c'' {
         \voiceTwo
         c,8~
         % Reposition the c2 to the right of the merged note
-        \once \override NoteColumn #'force-hshift = #1.0
+        \once \override NoteColumn.force-hshift = #1.0
         % Move the c2 out of the main note column
         % so the merge will work
         \shiftOnn
@@ -3405,8 +3708,7 @@ rhMusic = \relative c'' {
         % Stem on the d2 must be down to permit merging
         \stemDown
         % Stem on the d2 should be invisible
-        \tweak Stem #'transparent ##t
-        \tweak Flag #'transparent ##t
+        \tweak Stem.transparent ##t
         d2
       }
       \new Voice {
@@ -3448,7 +3750,7 @@ lhMusic = \relative c' {
 
 @menu
 * Other uses for tweaks::
-* Using variables for tweaks::
+* Using variables for layout adjustments::
 * Style sheets::
 * Other sources of information::
 * Advanced tweaks with Scheme::
@@ -3457,6 +3759,11 @@ lhMusic = \relative c' {
 @node Other uses for tweaks
 @subsection Other uses for tweaks
 
+@menu
+* Tying notes across voices::
+* Simulating a fermata in MIDI::
+@end menu
+
 @cindex transparent property, use of
 @cindex objects, making invisible
 @cindex removing objects
@@ -3465,9 +3772,11 @@ lhMusic = \relative c' {
 @cindex objects, hiding
 @cindex invisible objects
 @cindex objects, invisible
-@cindex tying notes across voices
 
-@subheading Tying notes across voices
+@node Tying notes across voices
+@unnumberedsubsubsec Tying notes across voices
+
+@cindex tying notes across voices
 
 The following example demonstrates how to connect notes in
 different voices using ties.  Normally, only two notes in the
@@ -3488,8 +3797,7 @@ cross voices:
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
+    \tweak Stem.transparent ##t
     b8~ b\noBeam
   }
 \\
@@ -3504,9 +3812,8 @@ too much, we can lengthen the stem by setting the
 @lilypond[quote,fragment,relative=2,verbatim]
 <<
   {
-    \tweak Stem #'transparent ##t
-    \tweak Flag #'transparent ##t
-    \tweak Stem #'length #8
+    \tweak Stem.transparent ##t
+    \tweak Stem.length #8
     b8~ b\noBeam
   }
 \\
@@ -3514,7 +3821,37 @@ too much, we can lengthen the stem by setting the
 >>
 @end lilypond
 
-@subheading Simulating a fermata in MIDI
+@funindex \single
+@cindex tweak, generated from override
+Now for @emph{overriding} the transparency of a graphical object,
+we could have used the shorthand @code{\hide} as explained above.
+Tweaking is a different operation, affecting only properties
+generated from a single music expression.  It turns out that we
+can convert overrides into tweaks using @code{\single}, making it
+possible to rewrite the above example as
+
+@lilypond[quote,fragment,relative=2,verbatim]
+<<
+  {
+    \single \hide Stem
+    \single \hide Flag
+    \tweak Stem.length #8
+    b8~ b\noBeam
+  }
+\\
+  { b8[ g] }
+>>
+@end lilypond
+
+In this particular case, the difference to @code{\once \hide} is
+not apparent.  It is important when there are several objects at
+the same point in musical time (like noteheads in a chord).  In
+that case, @code{\once} will affect all of those objects while
+@code{\single} will only affect a single one, the one generated by
+the immediately following music expression.
+
+@node Simulating a fermata in MIDI
+@unnumberedsubsubsec Simulating a fermata in MIDI
 
 @cindex stencil property, use of
 @cindex fermata, implementing in MIDI
@@ -3544,7 +3881,7 @@ We show here the effect of the two methods:
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'transparent = ##t
+    \once \hide Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata |
@@ -3566,7 +3903,7 @@ We show here the effect of the two methods:
     % Visible tempo marking
     \tempo 4=120
     a4 a a
-    \once \override Score.MetronomeMark #'stencil = ##f
+    \once \omit Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
     a4\fermata |
@@ -3590,12 +3927,13 @@ second (with the stencil removed) does not.
 Music Glossary:
 @rglos{system}.
 
-@node Using variables for tweaks
-@subsection Using variables for tweaks
+@node Using variables for layout adjustments
+@subsection Using variables for layout adjustments
 
-@cindex variables, using for tweaks
-@cindex using variables for tweaks
-@cindex tweaks, using variables for
+@cindex variables, using for overrides
+@cindex overrides, using variables for
+@cindex adjustments, using variables for
+@cindex layout adjustments, using variables for
 
 Override commands are often long and tedious to type, and they
 have to be absolutely correct.  If the same overrides are to be
@@ -3610,11 +3948,11 @@ themselves prevents their use in simple variables.  As an
 alternative can we use @code{\override} and @code{\revert} commands?
 
 @example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
 
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
 @end example
 
 These would also be extremely tedious to enter if there were many
@@ -3632,13 +3970,13 @@ for the variables to make them quicker to type:
 
 @lilypond[quote,verbatim]
 emphasize = {
-  \override Lyrics.LyricText #'font-shape = #'italic
-  \override Lyrics.LyricText #'font-series = #'bold
+  \override Lyrics.LyricText.font-shape = #'italic
+  \override Lyrics.LyricText.font-series = #'bold
 }
 
 normal = {
-  \revert Lyrics.LyricText #'font-shape
-  \revert Lyrics.LyricText #'font-series
+  \revert Lyrics.LyricText.font-shape
+  \revert Lyrics.LyricText.font-series
 }
 
 global = { \key c \major \time 4/4 \partial 4 }
@@ -3700,18 +4038,15 @@ the parts with all the @code{#()}.  This is explained in
 
 @lilypond[quote,verbatim,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -3733,18 +4068,15 @@ Let's hide them in another file:
 @example
 %%% save this to a file called "definitions.ily"
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 @end example
 
 We will refer to this file using the @code{\include} command near
@@ -3771,18 +4103,15 @@ Now let's modify our music (let's save this file as @file{music.ly}).
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \relative c'' {
   \tempo 4=50
@@ -3806,66 +4135,60 @@ with this:
 @example
 %%%  definitions.ily
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 \layout{
   \context {
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context {
     \Staff
-    \override TimeSignature #'style = #'numbered
+    \override TimeSignature.style = #'numbered
   }
   \context {
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -3890,63 +4213,57 @@ overall size of the output.
 @example
 %%%  web-publish.ily
 mpdolce =
-#(make-dynamic-script
-  #@{ \markup @{ \hspace #0
-               \translate #'(5 . 0)
-               \line @{ \dynamic "mp"
-                       \text \italic "dolce" @} @}
-  #@})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #@{ ^\markup \bold \box #string #@})
+   #@{ <>^\markup \bold \box #string #@})
 
 #(set-global-staff-size 23)
 
 \layout@{
   \context @{
     \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   @}
   \context @{
     \Staff
   @}
   \context @{
     \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   @}
 @}
 @end example
 
 @lilypond[quote,ragged-right]
 mpdolce =
-#(make-dynamic-script
-  #{ \markup { \hspace #0
-               \translate #'(5 . 0)
-               \line { \dynamic "mp"
-                       \text \italic "dolce" } }
-  #})
+  \tweak self-alignment-X #-0.6
+  #(make-dynamic-script
+    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
 
 inst =
 #(define-music-function
      (parser location string)
      (string?)
-   #{ ^\markup \bold \box #string #})
+   #{ <>^\markup \bold \box #string #})
 
 #(set-global-staff-size 23)
 
 \layout{
   \context { \Score
-    \override MetronomeMark #'extra-offset = #'(-9 . 0)
-    \override MetronomeMark #'padding = #'3
+    \override MetronomeMark.extra-offset = #'(-5 . 0)
+    \override MetronomeMark.padding = #'3
   }
   \context { \Voice
-    \override Glissando #'thickness = #3
-    \override Glissando #'gap = #0.1
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
   }
 }
 
@@ -4010,7 +4327,7 @@ distributed with GNU/Linux, or installed under fink or cygwin) or
 compiled it from source, and (b) on which operating system it is
 being used:
 
-@strong{Downloaded from lilypond.org}
+@subsubsubheading Downloaded from lilypond.org
 
 @itemize @bullet
 @item GNU/Linux
@@ -4040,7 +4357,7 @@ Using Windows Explorer, navigate to
 
 @end itemize
 
-@strong{Installed from a package manager or compiled from source}
+@subsubsubheading Installed from a package manager or compiled from source
 
 Navigate to
 @file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, where
@@ -4067,8 +4384,8 @@ example, @code{/tieDotted} is defined to be:
 
 @example
 tieDotted = @{
-  \override Tie #'dash-period = #0.75
-  \override Tie #'dash-fraction = #0.1
+  \override Tie.dash-period = #0.75
+  \override Tie.dash-fraction = #0.1
 @}
 @end example
 
@@ -4169,7 +4486,7 @@ the staff.
 
 \relative c' {
   % Arrange to obtain color from color-notehead procedure
-  \override NoteHead #'color = #color-notehead
+  \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
 }
 @end lilypond
index 928366317d497e3420a050f3ccaab3d0e65c0068..cd370bb87d0f19b5a2ab48b286a7970798dfcdf9 100644 (file)
@@ -121,7 +121,7 @@ $LY_LANGUAGES->{'hu'} = {
 
 $LY_LANGUAGES->{'it'} = {
     'Back to Documentation Index' => 'Torna all\'indice della documentazione',
-    '<p>Thanks to ${webdev_link} for hosting ${lily_site}.' => '',
+    '<p>Thanks to ${webdev_link} for hosting ${lily_site}.' => 'Grazie a ${webdev_link} per l\'hosting di ${lily_site}.',
 };
 
 $LY_LANGUAGES->{'ja'} = {
@@ -1512,7 +1512,7 @@ sub generate_ly_toc_entries($$$$$)
          'introduction' => [2, 2, 2, 2, 3, 3, 4, 4],
          'download' => [2, 2, 2, 3, 3, 4],
          'manuals' => [1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4],
-         'community' => [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4],
+         'community' => [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4],
          );
       my $addColor = "colorDefault";
       while (($top_section, $color_indices) = each %color_maps) {
@@ -1682,7 +1682,7 @@ sub lilypond_print_toc_div ($$)
 
       print $fh '<h4 class="toc_header"> ' . &$anchor('',
                                     $Texi2HTML::HREF{'Top'},
-                                    $topname,
+                                    $topname . " <!-- Sidebar Version Tag  --> ",
                                     'title="Start of the manual"'
                                    ) . "</h4>\n";
     }
index 4a8f2eb72f0e28a0f003389cce973b062932da2a..bf09cbff12f089f4d6f0bac4460b8c9a0ac5102c 100644 (file)
@@ -2,7 +2,6 @@ depth = ../..
 
 STEPMAKE_TEMPLATES=documentation
 XPM_FILES=$(call src-wildcard,*.xpm)
-EXTRA_DIST_FILES= $(XPM_FILES)
 
 lilypond-icon = $(outdir)/lilypond.ico
 ly-icon = $(outdir)/ly.ico
index ad1c84ae49d5a7df0d857c50e3282b99bf5d0b86..c5c800b6e4a205b67ce8fc25164ce00ff4bc03bf 100644 (file)
@@ -10,7 +10,7 @@ OUT_PNG_PAGES = $(PNG_PAGES:%=$(outdir)/%.png)
 OUT_SMALL_PNG_FILES = $(OUT_PNG_FILES:%.png=%-small.png)
 
 ifeq ($(out),www)
-all: $(OUT_PNG_FILES) $(OUT_SMALL_PNG_FILES)
+local-WWW-1: $(OUT_PNG_FILES) $(OUT_SMALL_PNG_FILES)
 endif
 
 $(outdir)/%.png: %.ly
index fa5bda56203e6c09621bb7cc4502da2dea625fd7..4ee9f6fd214b52f369073fc5558ac6128e4f4f30 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 \include "example-header.ily"
 
 \paper {
 %%%%%%%%%%% INCIPIT DEFS %%%%%%%%%%
 
 incipitGlobal = {
-               \override NoteHead   #'style = #'mensural
-               \override Accidental #'style = #'mensural
-               \override KeySignature #'style = #'mensural
-               \override Rest #'style = #'mensural
-%              \override Staff.TimeSignature #'style = #'mensural
+               \override NoteHead.style = #'mensural
+               \override Accidental.style = #'mensural
+               \override KeySignature.style = #'mensural
+               \override Rest.style = #'mensural
+%              \override Staff.TimeSignature.style = #'mensural
                \cadenzaOn
-         \override Score.Clef #'extra-offset = #'(-0.0 . 0.5)
-         \override Score.Clef #'font-size = #3
+         \override Score.Clef.extra-offset = #'(-0.0 . 0.5)
+         \override Score.Clef.font-size = #3
          \clef "vaticana-do1"
 }
 
@@ -94,10 +94,10 @@ incipitTenor = \markup{
 incipitBassus = \markup{
     \score{ {
     \set Staff.instrumentName = "Bassus  "
-    \override NoteHead   #'style = #'neomensural
-               \override Accidental #'style = #'neomensural
-       \override Rest #'style = #'neomensural
-       \override Staff.TimeSignature #'style = #'neomensural
+    \override NoteHead.style = #'neomensural
+               \override Accidental.style = #'neomensural
+       \override Rest.style = #'neomensural
+       \override Staff.TimeSignature.style = #'neomensural
        \cadenzaOn
        \clef "petrucci-f3"
        \key f \major
@@ -121,12 +121,12 @@ incipitBassus = \markup{
 #(ly:set-option 'point-and-click #f)
 
 global = {
-  \override Staff.TimeSignature #'stencil = #(lambda (grob)
+  \override Staff.TimeSignature.stencil = #(lambda (grob)
        (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1))
   \time 3/4
-       \override Staff.BarLine #'transparent = ##t
-  \override HorizontalBracket #'direction = #UP
-  \override HorizontalBracket #'bracket-flare = #'(0 . 0)
+       \hide Staff.BarLine
+  \override HorizontalBracket.direction = #UP
+  \override HorizontalBracket.bracket-flare = #'(0 . 0)
 }
 
 %%%%%%%%% MACRO FOR MAKING SLASHES THROUGH STEMS %%%%%%%%%%
@@ -135,7 +135,7 @@ thick y-factor offset)
                                     (number? number? number? number? number?
 pair?)
 #{
-\once \override Voice.Stem #'text = \markup {
+\once \override Voice.Stem.text = \markup {
     \postscript #(let ((x-off (car offset))
                        (y-off (cdr offset)))
     (string-append
@@ -154,7 +154,7 @@ thick)) " moveto "
 270 90 arc "
                                              " gsave fill grestore stroke")) }
 
-\once \override Voice.Stem #'stencil = #(lambda (grob)
+\once \override Voice.Stem.stencil = #(lambda (grob)
     (let* ((sten1 (ly:stem::print grob))
            (sten2 (ly:text-interface::print grob))
            (extent1 (ly:stencil-extent sten1 Y))
@@ -182,14 +182,14 @@ triplumNotes = \relative c' {
   \clef "treble_8"
        %\set Staff.midiInstrument = "flute"
 %      \global
-       \override StemTremolo #'beam-thickness = #.125
-       \override StemTremolo #'slope = #1.0
+       \override StemTremolo.beam-thickness = #.125
+       \override StemTremolo.slope = #1.0
   f8 f4 e8 d c f f f | % 1
        % the \scaleDurations command below makes 5 notes last the
        % duration of a dotted quarter
-       e8 c4 \scaleDurations 3/2 {     \times 4/5{e16[ d e d e]} } e8 f4 | % 2
+       e8 c4 \scaleDurations 3/2 {     \tuplet 5/4{e16[ d e d e]} } e8 f4 | % 2
   g2. ~ g4. | % 3
-       f8 d4 f4. \scaleDurations 3/2 { \times 4/6{ g16[ f e f e f]}} % 4
+       f8 d4 f4. \scaleDurations 3/2 { \tuplet 6/4{ g16[ f e f e f]}} % 4
        g8 g4 g4. e4. | % 5
        fis8 d4 e8\startGroup g4\stopGroup f8[ e d] | % 6
        c2. r4. | % 7
index 951e99ff738388a72ed075bb3547dfe497877c9b..863c8594e644f9b2087b596d7a393fe50bdaa024 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 %\include "example-header.ily"
 
 
  %opus="BWV 610"
 
  footer = "Mutopia-2006/03/27-706"
- tagline = \markup { \override #'(box-padding . 1.0) \override #'(baseline-skip . 2.7) \box \center-column { \small \line { Sheet music from \with-url #"http://www.MutopiaProject.org" \line { \teeny www. \hspace #-1.0 MutopiaProject \hspace #-1.0 \teeny .org \hspace #0.5 } • \hspace #0.5 \italic Free to download, with the \italic freedom to distribute, modify and perform. } \line { \small \line { Typeset using \with-url #"http://www.LilyPond.org" \line { \teeny www. \hspace #-1.0 LilyPond \hspace #-1.0 \teeny .org } by \maintainer \hspace #-1.0 . \hspace #0.5 Reference: \footer } } \line { \teeny \line { This sheet music has been placed in the public domain by the typesetter, for details see: \hspace #-0.5 \with-url #"http://creativecommons.org/licenses/publicdomain" http://creativecommons.org/licenses/publicdomain } } } }
-
+ tagline = \markup {
+  \override #'(baseline-skip . 2.2)
+  \center-column {
+   \abs-fontsize #8 \sans \bold
+   \with-url #"http://www.MutopiaProject.org" {
+    "Mutopia"
+    "Project"
+   }
+  }
+  \override #'(baseline-skip . 0)
+  \column {
+   \with-color #grey
+   \filled-box #'( 0 . 1) #'(-2.5 . 1.4) #0
+  }
+  \override #'(baseline-skip . 2.2)
+  \column {
+   \abs-fontsize #8 \sans
+   \concat{"Typeset using " \with-url #"http://www.lilypond.org" "LilyPond" " ©2006 by " \maintainer "." }
+   \abs-fontsize #8 \sans
+   \concat {"This work is licensed under a " \with-url #"http://creativecommons.org/about/pdm" \copyright " license."}
+  }
+ }
 }
 
 \include "deutsch.ly"
 global = {
    \key c \minor
    \time 4/4
-   \accidentalStyle "default"
+   \tempo Largo
+   \accidentalStyle default
 }
 
 halsup = {
-  \stemUp
-  \tieUp
+  \voiceOne
 }
 
 halsdown = {
-  \stemDown
-  \tieDown
+  \voiceTwo
 }
 
 staffup = {
@@ -56,7 +75,7 @@ sopran = {
       \global
       \halsup
       \repeat volta 2 {
-         g4^\markup { \hspace #-4 \large "Largo" } g f es
+         g4 g f es
          d2 c\fermata
          g'4 g a h
          c2 h\fermata
index 721427eacbec533f6bce37e44842342f9ac3229c..82d2f6d858e35943db3160a44fbe788224698b20 100644 (file)
@@ -13,9 +13,9 @@
 % 'Add color...' sections are not the original author's, but added
 % afterwards specifically for illustration in LilyPond's Documentation.
 
-I = \once \override NoteColumn #'ignore-collision = ##t
+I = \once \override NoteColumn.ignore-collision = ##t
 
-\version "2.16.0"
+\version "2.17.30"
 
 staffPiano = \new PianoStaff {
   \set Score.timing = ##f
@@ -25,13 +25,12 @@ staffPiano = \new PianoStaff {
       \clef treble
       \key g \major
       \relative c'' {
-       \override Staff.NoteCollision
-       #'merge-differently-headed = ##t
+       \override Staff.NoteCollision.merge-differently-headed = ##t
        <<
          {
-           \override Beam #'positions = #'(8 . 8)
-           \override NoteHead #'transparent = ##t
-           \override NoteHead #'duration-log = #1
+           \override Beam.positions = #'(8 . 8)
+           \hide NoteHead
+           \override NoteHead.duration-log = #1
            s1 b8[^\markup {
              \override #'(baseline-skip . 0.5)
               % Add color to markup in top staff
@@ -48,42 +47,39 @@ staffPiano = \new PianoStaff {
              \column { \with-color #red \small { ^ 1 } }
            }
            s4.
-           \revert Beam #'positions
-           \revert NoteHead #'transparent
-           \revert NoteHead #'duration-log
+           \revert Beam.positions
+           \undo \hide NoteHead
+           \revert NoteHead.duration-log
          }
        \\
          {
             % Add color to both Dashed Slurs in top staff
-            \override Slur #'color = #(x11-color "purple")
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
+            \override Slur.color = #(x11-color "purple")
+           \hide Stem
            s1
-           \once \override Slur #'height-limit = #6
-           \once \override Slur #'extra-offset = #'(1.25 . 0)
+           \once \override Slur.height-limit = #6
+           \once \override Slur.extra-offset = #'(1.25 . 0)
            \slurDashed
            \I b2_( s2
-           \once \override NoteHead #'transparent = ##t
+           \once \hide NoteHead
            b4) s
-           \once \override Slur #'height-limit = #3.25
-           \once \override Slur #'extra-offset = #'(.75 . 0)
+           \once \override Slur.height-limit = #3.25
+           \once \override Slur.extra-offset = #'(.75 . 0)
            a2_( s4
-           \once \override NoteHead #'transparent = ##t
+           \once \hide NoteHead
            a4) g2
-           \revert Stem #'transparent
-           \revert Flag #'transparent
+           \undo \hide Stem
          }
        \\
-         \override Staff.NoteCollision
-         #'merge-differently-headed = ##t
+         \override Staff.NoteCollision.merge-differently-headed = ##t
          {
-           \override Beam #'positions = #'(4 . -3.25)
+           \override Beam.positions = #'(4 . -3.25)
            \stemUp
            g8[ s s4 s2
            \stemDown
-           \once \override NoteHead #'transparent = ##t
+           \once \hide NoteHead
            \I b8] s8
-           \override Beam #'positions = #'(3 . -2.25)
+           \override Beam.positions = #'(3 . -2.25)
            \stemUp
            a8[ s s4
            \stemDown
@@ -92,58 +88,51 @@ staffPiano = \new PianoStaff {
        \\
          {
             % Add color to all remaining Slurs in top staff
-            \override Slur #'color = #(x11-color "violet")
-            \override PhrasingSlur #'color = #(x11-color "violet")
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
-           \override Stem #'length = #0
+            \override Slur.color = #(x11-color "violet")
+            \override PhrasingSlur.color = #(x11-color "violet")
+           \hide Stem
+           \override Stem.length = #0
             % Add color to text markups in top staff
            g4_\( fis^(_\markup { \with-color #blue \tiny N } g)\)
            a^(^\markup { \with-color #blue \tiny P } b2)
            b4^(^\markup { \with-color #blue \tiny P }
            \stemUp
-           \revert Stem #'transparent
-           \revert Flag #'transparent
-           \override Stem #'length = #10
+           \undo \hide Stem
+           \override Stem.length = #10
            c8)^( s
-           \override Stem #'length = #14
+           \override Stem.length = #14
            b4) s s
-           \override Stem #'length = #0
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
-           \once \override Slur #'extra-offset = #'(0 . 0.35)
+           \override Stem.length = #0
+           \hide Stem
+           \once \override Slur.extra-offset = #'(0 . 0.35)
             % Add color to remaining text markup in top staff
            c4^\( b_(_\markup { \with-color #blue \tiny P } a)\) s2
-           \revert Stem #'length
+           \revert Stem.length
          }
        \\
          {
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
-           \override NoteHead #'transparent = ##t
-           \override Stem #'length = #0
+           \hide Stem
+           \hide NoteHead
+           \override Stem.length = #0
            s1 s4 e4 s
            \change Staff = "LH"
            fis,4 s2
-           \revert Stem #'transparent
-           \revert Flag #'transparent
-           \revert NoteHead #'transparent
-           \revert Stem #'length
+           \undo \hide Stem
+           \undo \hide NoteHead
+           \revert Stem.length
          }
        \\
          {
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
-           \override NoteHead #'transparent = ##t
-           \override Stem #'length = #0
+           \hide Stem
+           \hide NoteHead
+           \override Stem.length = #0
            s1 s s2
            fis'4 s
            \change Staff = "LH"
            g,4 s s2
-           \revert Stem #'transparent
-           \revert Flag #'transparent
-           \revert NoteHead #'transparent
-           \revert Stem #'length
+           \undo \hide Stem
+           \undo \hide NoteHead
+           \revert Stem.length
          }
        >>
        \bar "|."
@@ -154,12 +143,11 @@ staffPiano = \new PianoStaff {
       \clef bass
       \key g \major
       \relative c' {
-       \override Staff.NoteCollision
-       #'merge-differently-headed = ##t
+       \override Staff.NoteCollision.merge-differently-headed = ##t
        <<
          {
-           \override Beam #'positions = #'(-8 . -8)
-           \override NoteHead #'transparent = ##t
+           \override Beam.positions = #'(-8 . -8)
+           \hide NoteHead
            \stemDown
             % Add color to long beam text markups in bottom staff
            \I g8[_\markup { \with-color #(x11-color 'LawnGreen) \bold I }
@@ -168,110 +156,98 @@ staffPiano = \new PianoStaff {
             s4.
            \I g,8]_\markup { \with-color #(x11-color 'LawnGreen) \bold I }
             s4.
-           \revert Beam #'positions
-           \revert NoteHead #'transparent
+           \revert Beam.positions
+           \undo \hide NoteHead
          }
        \\
          {
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
+           \hide Stem
            \stemDown
-           \override TextScript #'extra-offset = #'(-11.75 . -12.25)
+           \override TextScript.extra-offset = #'(-11.75 . -12.25)
            \I g'2 s1 s s2 \I d2 g,2
-           \revert Stem #'transparent
-           \revert Flag #'transparent
+           \undo \hide Stem
          }
        \\
          {
             % Add color to all single-note Slurs in bottom staff
-            \override Slur #'color = #(x11-color "violet")
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
-           \once \override NoteHead #'transparent = ##t
-           \override Stem #'length = #0
+            \override Slur.color = #(x11-color "violet")
+           \hide Stem
+           \once \hide NoteHead
+           \override Stem.length = #0
            g'4
-           \once \override TextScript #'padding = #0.25
+           \once \override TextScript.padding = #0.25
             % Add color to text markups in bottom staff
            a4_(^\markup { \with-color #blue \tiny P } b)
            fis4^(^\markup { \with-color #blue \tiny P } e)
-           \once \override NoteHead #'transparent = ##t
-           \once \override Slur #'height-limit = #1.5
+           \once \hide NoteHead
+           \once \override Slur.height-limit = #1.5
             % Add color to remaining text markup in bottom staff
            c4^( d)^\markup { \with-color #blue \tiny N }
-           \once \override NoteHead #'transparent = ##t
-           \once \override Slur #'extra-offset = #'(0 . 0.5)
+           \once \hide NoteHead
+           \once \override Slur.extra-offset = #'(0 . 0.5)
            \I fis,4_(
-           \revert Stem #'transparent
-           \revert Flag #'transparent
-           \override Stem #'length = #10
+           \undo \hide Stem
+           \override Stem.length = #10
            \stemDown
            g4) s
-           \once \override Slur #'extra-offset = #'(0 . 0.25)
+           \once \override Slur.extra-offset = #'(0 . 0.25)
            \I c8_( s
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
-           \revert Stem #'length
+           \hide Stem
+           \revert Stem.length
            a4)
-           \once \override NoteHead #'transparent = ##t
+           \once \hide NoteHead
            \I d4^( d,4) s2
          }
        \\
          {
             % Add color to all two-note Slurs in bottom staff
-            \override Slur #'color = #(x11-color "violet")
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
-           \override NoteHead #'transparent = ##t
+            \override Slur.color = #(x11-color "violet")
+           \hide Stem
+           \hide NoteHead
            \I g'4^( s b) s2
-           \revert Stem #'transparent
-           \revert Flag #'transparent
-           \revert NoteHead #'transparent
-           \override Beam #'positions = #'(-4 . 1)
+           \undo \hide Stem
+           \undo \hide NoteHead
+           \override Beam.positions = #'(-4 . 1)
            \stemDown
            c,8[ s s4
            \stemUp
            fis,8] s
-           \override Beam #'positions = #'(1 . -4)
+           \override Beam.positions = #'(1 . -4)
            g8[ s
            \stemDown
            b8] s
-           \revert Beam #'positions
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
-           \override NoteHead #'transparent = ##t
+           \revert Beam.positions
+           \hide Stem
+           \hide NoteHead
            c4^( s d4) s s2
          }
        \\
          {
             % Add color to four-note Slur in bottom staff
-            \override Slur #'color = #(x11-color "violet")
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
-           \override NoteHead #'transparent = ##t
-           \override Stem #'length = #0
+            \override Slur.color = #(x11-color "violet")
+           \hide Stem
+           \hide NoteHead
+           \override Stem.length = #0
            \stemDown
-           \once \override Slur #'height-limit = #3
-           \once \override Slur #'extra-offset = #'(0 . 0.25)
+           \once \override Slur.height-limit = #3
+           \once \override Slur.extra-offset = #'(0 . 0.25)
            \I g4_( s2. e4) s2. s2 s1 s2
-           \revert Stem #'transparent
-           \revert Flag #'transparent
-           \revert NoteHead #'transparent
+           \undo \hide Stem
+           \undo \hide NoteHead
          }
        \\
          {
             % Add color to dashed Slur in bottom staff
-            \override Slur #'color = #(x11-color "purple")
-           \override Stem #'transparent = ##t
-           \override Flag #'transparent = ##t
-           \override NoteHead #'transparent = ##t
+            \override Slur.color = #(x11-color "purple")
+           \hide Stem
+           \hide NoteHead
            \slurDashed
-           \once \override Slur #'height-limit = #6.0
-           \once \override Slur #'extra-offset = #'(0.5 . -0.25)
-           \override Stem #'length = #0
+           \once \override Slur.height-limit = #6.0
+           \once \override Slur.extra-offset = #'(0.5 . -0.25)
+           \override Stem.length = #0
            g4_( s2. s1 g,4) s s1 s2
-           \revert Stem #'transparent
-           \revert Flag #'transparent
-           \revert NoteHead #'transparent
+           \undo \hide Stem
+           \undo \hide NoteHead
          }
        >>
        \bar "|."
index 4d2faf4c1e1583d0fdd87858c2f24fb4cbd55da7..c002e111d02c1e00396098f37dcf783fc823c3ef 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.30"
 
 \layout {
   indent = #0
@@ -7,19 +7,26 @@
   \context {
     \Score
 
-    proportionalNotationDuration = #(ly:make-moment 1 64)
-    \override Beam #'breakable = ##t
+    proportionalNotationDuration = #(ly:make-moment 1/64)
+    \override Beam.breakable = ##t
     autoBeaming = ##f
     tupletFullLength = ##t
-    \override BarNumber #'transparent = ##t
-    \override BarLine #'transparent = ##t
-    \override SpanBar #'transparent = ##t
-    \override Beam #'break-overshoot = #'(-0.5 . 1.0)
-    \override TextScript #'staff-padding = #6
-    \override Glissando #'thickness = #3
-    \override SpacingSpanner #'strict-grace-spacing = ##t
-    \override TupletBracket #'bracket-visibility = ##t
-    \override NoteColumn #'ignore-collision = ##t
+    \hide BarNumber
+    \hide BarLine
+    \hide SpanBar
+    \override Beam.break-overshoot = #'(-0.5 . 1.0)
+    \override TextScript.staff-padding = #6
+    \override Glissando.thickness = #3
+    \override SpacingSpanner.strict-grace-spacing = ##t
+    \override TupletBracket.bracket-visibility = ##t
+    \override NoteColumn.ignore-collision = ##t
+  }
+}
+
+\midi {
+  \context {
+    \Score
+    autoBeaming = ##f % synchronize lyrics the same way as \layout does
   }
 }
 
@@ -74,31 +81,31 @@ beam = #(define-music-function (parser location left right) (number? number?)
 )
 
 fraction = #(define-music-function (parser location music) (ly:music?)
-       #{ \tweak #'text #tuplet-number::calc-fraction-text #music #})
+       #{ \tweak text #tuplet-number::calc-fraction-text #music #})
 
 triangle = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(do do do do do do do) #music #})
+       #{ \once \set shapeNoteStyles = ##(do do do do do do do) #music #})
 
 semicircle = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(re re re re re re re) #music #})
+       #{ \once \set shapeNoteStyles = ##(re re re re re re re) #music #})
 
 blackdiamond = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(mi mi mi mi mi mi mi) #music #})
+       #{ \once \set shapeNoteStyles = ##(mi mi mi mi mi mi mi) #music #})
 
 tiltedtriangle = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(fa fa fa fa fa fa fa) #music #})
+       #{ \once \set shapeNoteStyles = ##(fa fa fa fa fa fa fa) #music #})
 
 square = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(la la la la la la la) #music #})
+       #{ \once \set shapeNoteStyles = ##(la la la la la la la) #music #})
 
 wedge = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(ti ti ti ti ti ti ti) #music #})
+       #{ \once \set shapeNoteStyles = ##(ti ti ti ti ti ti ti) #music #})
 
 harmonic = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(harmonic harmonic harmonic harmonic harmonic harmonic harmonic) #music #})
+       #{ \once \set shapeNoteStyles = ##(harmonic harmonic harmonic harmonic harmonic harmonic harmonic) #music #})
 
 cross = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(cross cross cross cross cross cross cross) #music #})
+       #{ \once \set shapeNoteStyles = ##(cross cross cross cross cross cross cross) #music #})
 
 white = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \override NoteHead #'duration-log = #1 #music #})
+       #{ \once \override NoteHead.duration-log = #1 #music #})
index 37f4dfd0d4d0280b7a866837e65b1cebc0b4cbd0..1e1d98d461de612fa0f34cd475c86495256787c1 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 % the example header file caused the head to be chopped off
 %\include "example-header.ily"
 
        \new StaffGroup <<
 
                \new Staff \with {
-                       \override Stem #'direction = #down
-                       \override Beam #'positions = #'(-7 . -7)
-                       \override TupletBracket #'direction = #down
-                       \override TupletBracket #'staff-padding = #5
-                       \override TupletBracket #'padding = #2.25
+                       \override Stem.direction = #down
+                       \override Beam.positions = #'(-7 . -7)
+                       \override TupletBracket.direction = #down
+                       \override TupletBracket.staff-padding = #5
+                       \override TupletBracket.padding = #2.25
                } <<
 
                        \new Voice {
 
-            \override Score.MetronomeMark #'extra-offset = #'(0 . 6)
-            \override Score.MetronomeMark #'font-size = #3
+            \override Score.MetronomeMark.extra-offset = #'(0 . 6)
+            \override Score.MetronomeMark.font-size = #3
             \tempo 8=42
                                \time 5/16       s4 ~ s16       \noBreak                 % measure 6
                                \time 4/8        s2                     \noBreak                 % measure 7
                        } {
 
                                % measure 6
-                               \fraction \times 5/3 {
-                                       \times 4/5 {
+                               \fraction \tuplet 3/5 {
+                                       \tuplet 5/4 {
                                                a'64 [ % 36
                                                cs''64 % 37
                                                f''64 % 38
                                                cs''64 % 39
                                                ef'''64 ] % 40
                                        }
-                                       \times 4/5 {
+                                       \tuplet 5/4 {
                                                g''64 [ % 41
                                                c''64 % 42
                                                e''64 % 43
@@ -77,7 +77,7 @@
 
                                % measure 7
                                r8 % 47
-                               \times 4/5 {
+                               \tuplet 5/4 {
                                        d''32 [ % 48
                                        af''32 % 49
                                        e'32 % 50
                >>
 
                \new Staff \with {
-                       \override Clef #'transparent = ##t
-                       \override StaffSymbol #'line-positions = #'(-4 -2   2 4)
-                       \override Stem #'direction = #down
-                       \override TupletBracket #'staff-padding = #5
-                       \override TupletBracket #'padding = #2.25
+                       \hide Clef
+                       \override StaffSymbol.line-positions = #'(-4 -2   2 4)
+                       \override Stem.direction = #down
+                       \override TupletBracket.staff-padding = #5
+                       \override TupletBracket.padding = #2.25
                } <<
 
                        \new Voice \with {
                                \remove "Forbid_line_break_engraver"
-                               \override Stem #'direction = #up
-                               \override Flag #'stroke-style = #"grace"
-                               \override Stem #'font-size = #-3
-                               \override Rest #'transparent = ##t
-                               \override NoteHead #'no-ledgers = ##t
-                               \override Dots #'transparent = ##t
-                               \override TupletBracket #'transparent = ##t
-                               \override TupletNumber #'transparent = ##t
+                               \override Stem.direction = #up
+                               \override Flag.stroke-style = #"grace"
+                               \override Stem.font-size = #-3
+                               \hide Rest
+                               \override NoteHead.no-ledgers = ##t
+                               \hide Dots
+                               \hide TupletBracket
+                               \hide TupletNumber
                        } {
 
                                % measure 6
-                               \fraction \times 5/3 {
+                               \fraction \tuplet 3/5 {
                                        \square f''16 * 1/8 % 40
                                        \square f''16 * 1/8 % 41
                                        \square f''16 * 1/8 % 42
                                        \square f''16 * 1/8 % 45
                                        \square f''16 * 1/8 % 46
                                        \square f''16 * 1/8 % 47
-                                       \times 2/3 {
+                                       \tuplet 3/2 {
                                                \square f''16 % 48
                                                \square f''16 * 1/2 % 49
                                        }
-                                       \times 2/3 {
+                                       \tuplet 3/2 {
                                                \square f''16 * 1/4 % 50
                                                \square f''16 * 1/4 % 51
                                                \square f''16 * 1/4 % 52
                                \square g''16 * 2/1 % 57
                                \square g''16 % 58
                                \square g''16 % 59
-                               \times 8/9 {
+                               \tuplet 9/8 {
                                        s16 % 60
                                        f''16 * 1/4 % 61
                                        f''16 * 1/4 % 62
                                }
 
                                % measure 8
-                               \times 4/5 {
-                                       \times 4/7 {
+                               \tuplet 5/4 {
+                                       \tuplet 7/4 {
                                                s4 % 66
                                                \triangle a''16 % 67
                                                \triangle a''16 % 68
 
                        \new Voice \with {
                                \remove "Forbid_line_break_engraver"
-                               \override Stem #'transparent = ##t
-                               \override Flag #'transparent = ##t
-                               \override Rest #'transparent = ##t
-                               \override Rest #'staff-position = #-0.5
-                               \override Dots #'transparent = ##t
-                               \override Beam #'transparent = ##t
-                               \override TupletBracket #'transparent = ##t
-                               \override TupletNumber #'transparent = ##t
+                               \hide Stem
+                               \hide Rest
+                               \override Rest.staff-position = #-0.5
+                               \hide Dots
+                               \hide Beam
+                               \hide TupletBracket
+                               \hide TupletNumber
                        } {
 
                                % measure 6
-                               \fraction \times 5/3 {
+                               \fraction \tuplet 3/5 {
                                        \blackdiamond f'128 [ % 40
                                        \blackdiamond f'128 % 41
                                        \blackdiamond f'128 % 42
                                        \blackdiamond f'128 % 45
                                        \blackdiamond f'128 % 46
                                        \blackdiamond f'128 ] % 47
-                                       \times 2/3 {
+                                       \tuplet 3/2 {
                                                \blackdiamond f'16 % 48
                                                \blackdiamond f'32 % 49
                                        }
-                                       \times 2/3 {
+                                       \tuplet 3/2 {
                                                \blackdiamond f'64 % 50
                                                \blackdiamond f'64 % 51
                                                \blackdiamond f'64 % 52
                                \harmonic a'8 \glissando % 57
                                \harmonic a'16 \glissando % 58
                                \blackdiamond a'16 % 59
-                               \times 8/9 {
+                               \tuplet 9/8 {
                                        s16 % 60
                                        \harmonic g'64 \glissando % 61
                                        \harmonic g'64 \glissando % 62
                                }
 
                                % measure 8
-                               \times 4/5 {
-                                       \times 4/7 {
+                               \tuplet 5/4 {
+                                       \tuplet 7/4 {
                                                s4 % 66
                                                \blackdiamond f'16 % 67
                                                \blackdiamond f'16 % 68
 
                        \new Voice \with {
                                \remove "Forbid_line_break_engraver"
-                               \override Stem #'direction = #down
-                               \override Stem #'font-size = #-3
-                               \override Flag #'stroke-style = #"grace"
-                               \override Rest #'transparent = ##t
-                               \override NoteHead #'no-ledgers = ##t
-                               \override Dots #'transparent = ##t
-                               \override TupletBracket #'transparent = ##t
-                               \override TupletNumber #'transparent = ##t
+                               \override Stem.direction = #down
+                               \override Stem.font-size = #-3
+                               \override Flag.stroke-style = #"grace"
+                               \hide Rest
+                               \override NoteHead.no-ledgers = ##t
+                               \hide Dots
+                               \hide TupletBracket
+                               \hide TupletNumber
                        } {
 
                                % measure 6
-                               \fraction \times 5/3 {
+                               \fraction \tuplet 3/5 {
                                        s128 % 40
                                        s128 % 41
                                        s128 % 42
                                        s128 % 45
                                        s128 % 46
                                        s128 % 47
-                                       \times 2/3 {
+                                       \tuplet 3/2 {
                                                \semicircle a16 % 48
                                                \semicircle a16 * 1/2 % 49
                                        }
-                                       \times 2/3 {
+                                       \tuplet 3/2 {
                                                \semicircle a16 * 1/4 % 50
                                                \semicircle a16 * 1/4 % 51
                                                \semicircle a16 * 1/4 % 52
                                s8 % 57
                                s16 % 58
                                \triangle a16 % 59
-                               \times 8/9 {
+                               \tuplet 9/8 {
                                        s16 % 60
                                        s64 % 61
                                        s64 % 62
                                }
 
                                % measure 8
-                               \times 4/5 {
-                                       \times 4/7 {
+                               \tuplet 5/4 {
+                                       \tuplet 7/4 {
                                                s4 % 66
                                                \semicircle a16 % 67
                                                \semicircle a16 % 68
 
                        \new Voice \with {
                                \remove "Forbid_line_break_engraver"
-                               \override Stem #'direction = #down
-                               \override NoteHead #'transparent = ##t
-                               \override NoteHead #'no-ledgers = ##t
-                               \override Rest #'staff-position = #-18
-                               \override Stem #'length = #10
-                               \override Beam #'positions = #'(-13 . -13)
-                               \override DynamicLineSpanner #'staff-padding = #18
-                               \override TextSpanner #'(bound-details left text) = #(markup (#:italic "covered"))
-                               \override TextSpanner #'dash-period = #1
-                               \override TextSpanner #'dash-fraction = #0.2
-                               \override TextSpanner #'(bound-details left padding) = #0.5
-                               \override TextSpanner #'(bound-details right padding) = #0.5
-                               \override TextSpanner #'staff-padding = #4
+                               \override Stem.direction = #down
+                               \hide NoteHead
+                               \override NoteHead.no-ledgers = ##t
+                               \override Rest.staff-position = #-18
+                               \override Stem.length = #10
+                               \override Beam.positions = #'(-13 . -13)
+                               \override DynamicLineSpanner.staff-padding = #18
+                               \override TextSpanner.bound-details.left.text = #(markup (#:italic "covered"))
+                               \override TextSpanner.dash-period = #1
+                               \override TextSpanner.dash-fraction = #0.2
+                               \override TextSpanner.bound-details.left.padding = #0.5
+                               \override TextSpanner.bound-details.right.padding = #0.5
+                               \override TextSpanner.staff-padding = #4
                        } {
 
                                % measure 6
-                               \fraction \times 5/3 {
+                               \fraction \tuplet 3/5 {
                                        \beam #0 #5 g,128 \sffp \< [ % 40
                                        \beam #5 #5 g,128 % 41
                                        \beam #5 #5 g,128 % 42
                                        \beam #5 #5 g,128 % 45
                                        \beam #5 #5 g,128 % 46
                                        \beam #5 #1 g,128 % 47
-                                       \times 2/3 {
+                                       \tuplet 3/2 {
                                                \beam #1 #2 g,16 % 48
                                                \beam #3 #1 g,32 \fX % 49
                                        }
-                                       \times 2/3 {
+                                       \tuplet 3/2 {
                                                \beam #1 #4 g,64 \sffp \< % 50
                                                \beam #4 #4 g,64 % 51
                                                \beam #4 #4 g,64 % 52
                                g,8 \sf \< [ % 57
                                g,16 % 58
                                \beam #2 #0 g,16 \ffX ] % 59
-                               \times 8/9 {
+                               \tuplet 9/8 {
                                        r16 % 60
                                        \beam #4 #4 g,64 \sfp \< [ % 61
                                        \beam #4 #4 g,64 % 62
                                }
 
                                % measure 8
-                               \times 4/5 {
-                                       \times 4/7 {
+                               \tuplet 5/4 {
+                                       \tuplet 7/4 {
                                                r4 % 66
                                                \beam #2 #2 g,16 \fX [ % 67
                                                \beam #2 #2 g,16 \f % 68
index 685d811ed3a8af1080555c5c237cf5b4d404afcf..bcf8fd7d2d4c7b996c5ee1c335cdd20e2f67ff95 100644 (file)
@@ -27,8 +27,8 @@ harmonies = \chordmode {
 }
 
 text = \lyricmode {
-  My eyes are dim, I can -- not see,
-  I have not brought my specs with me!
+  My eyes are __ dim, I can -- not see,
+  I have not __ brought my specs with me!
 }
 
 \score {
index 31834c1b01901f18780367557448c6828415fe88..1579ac27bfecfe4eedc23dcdde77f7284bc91b48 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 \include "example-header.ily"
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -26,15 +26,15 @@ appassmolto = \markup { \italic \large "appassionato molto" }
 global = {
   \time 3/4
   \set fontSize = #1
-  \override Beam #'thickness = #0.5
-  \override NoteColumn #'ignore-collision = ##t
+  \override Beam.thickness = #0.5
+  \override NoteColumn.ignore-collision = ##t
 }
 
 upperVoiceOne = \relative c'' {
   \voiceOne
-  \override TupletBracket #'transparent = ##t
-  <aes f'>8\([ \times 4/5{g'32( aes g f g]) }
-    <es aes>8[ \times 4/5{<d bes'>32( c' bes aes bes]) }
+  \hide TupletBracket
+  <aes f'>8\([ \tuplet 5/4{g'32( aes g f g]) }
+    <es aes>8[ \tuplet 5/4{<d bes'>32( c' bes aes bes]) }
     <es, aes es'>8 <d fis b d>\) | % end m. 1
   %--------------------------------------------------%
   <c g' c>4\( \voiceTwo <bes es bes'\arpeggio>\)
@@ -42,11 +42,11 @@ upperVoiceOne = \relative c'' {
   %--------------------------------------------------%
   \noBreak
   \voiceOne
-  <f aes d f>8\([ \times 4/5{<g g'>32( aes' g f g]) }
+  <f aes d f>8\([ \tuplet 5/4{<g g'>32( aes' g f g]) }
   \set subdivideBeams = ##t
-  \set baseMoment = #(ly:make-moment 1 8)
+  \set baseMoment = #(ly:make-moment 1/8)
   \set beatStructure = #'(2 2 2)
-  <aes, aes'>16 <c f> \times 4/5{ bes'32( c bes aes bes]) }
+  <aes, aes'>16 <c f> \tuplet 5/4{ bes'32( c bes aes bes]) }
   \set subdivideBeams = ##f
   \ottava #1 <es es'>16 <f f'> <d d'> \appoggiatura f8 <es es'>16\)
 }
@@ -55,20 +55,20 @@ upperVoiceTwo = \relative c'' {
   \voiceTwo
   s8 c8\< <bes, f'>[ <bes aes'> c' <bes, d fis>\!]
   s32 s32_\appassmolto s8. \voiceOne r8 <bes'' es bes'>-> s4
-  \override Stem #'cross-staff = ##t
-  \override Stem #'length = #28
-  \override Flag #'style = #'no-flag
+  \override Stem.cross-staff = ##t
+  \override Stem.length = #28
+  \override Flag.style = #'no-flag
   s8 \voiceTwo g,8 aes4 s4
 }
 
 middleVoiceOne = \relative c' {
-  \override Stem #'cross-staff = ##t
-  \override Stem #'length = #32
-  \override Flag #'style = #'no-flag
+  \override Stem.cross-staff = ##t
+  \override Stem.length = #32
+  \override Flag.style = #'no-flag
   d!8\noBeam s8 s8 s8_\crmolto s4  % 1
   s4 <g bes\arpeggio>8[ <es' g>] \voiceOne e,8( dis16 e) | % 2
-  \revert Stem #'length
-  \revert Stem #'cross-staff
+  \revert Stem.length
+  \revert Stem.cross-staff
   \showStaffSwitch
   \csh \stemUp f4 s2
   %s2.  % beginning m. 3
@@ -76,20 +76,20 @@ middleVoiceOne = \relative c' {
 
 middleVoiceTwo = \relative c' {
   s2. | % 1
-  \override Stem #'cross-staff = ##t
-  \override Stem #'length = #24
-  \override Flag #'style = #'no-flag
+  \override Stem.cross-staff = ##t
+  \override Stem.length = #24
+  \override Flag.style = #'no-flag
   s2 \voiceTwo e!4 | % 2
   s4 \voiceTwo <bes c es f>8 <f' aes es'>16 d' <bes, f' aes c>8 <bes' fis'> | % 3
 }
 
 lowerVoiceOne = \relative c, {
-  \override Staff.NoteCollision #'merge-differently-headed = ##t
-  \override Staff.NoteCollision #'merge-differently-dotted = ##t
+  \override Staff.NoteCollision.merge-differently-headed = ##t
+  \override Staff.NoteCollision.merge-differently-dotted = ##t
   bes8 \csm \stemDown <bes'' c es>8 s2
   \csl \stemUp
   \set subdivideBeams = ##t
-  \set baseMoment = #(ly:make-moment 1 16)
+  \set baseMoment = #(ly:make-moment 1/16)
   \set beatStructure = #'(4 4 4)
   s8 \hideNotes \slurUp \stemDown
     es,,64( bes'' s64 \unHideNotes \stemUp g64[ bes c d c]) s2
@@ -101,9 +101,9 @@ lowerVoiceTwo = \relative c, {
   \voiceTwo
   bes2.
   \csh
-  \once \override Beam #'damping = #+inf.0
+  \once \override Beam.damping = #+inf.0
   <bes'' es g>8 \csl \slurUp
-  %\once\override Slur #'extra-offset = #'(0 . 4)
+  %\once\override Slur.extra-offset = #'(0 . 4)
   es,,64 bes' es g s32.
     c64
     s4 <bes des>
@@ -114,7 +114,7 @@ lowerVoiceTwo = \relative c, {
 \score {
   \new PianoStaff <<
     \set PianoStaff.connectArpeggios = ##t
-%    \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket
+%    \override PianoStaff.Arpeggio.stencil = #ly:arpeggio::brew-chord-bracket
     \new Staff = "high" <<
       \global
       \context Voice = "upperVoiceOne" { \upperVoiceOne }
@@ -135,7 +135,7 @@ lowerVoiceTwo = \relative c, {
   \layout {
     \context {
       \Score
-      \override TimeSignature #'stencil = ##f
+      \omit TimeSignature
       \remove "Bar_number_engraver"
     }
   }
index 219acafdc90ac8c1452f2ad018e04f848b1caa09..6b205af903f8f9f53582db839243310e42982c51 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   tagline = ##f
   line-width = 158\mm
 }
 
-%% markups
-#(define-markup-list-command (paragraph layout props args) (markup-list?)
-  (let ((indent (chain-assoc-get 'par-indent props 2)))
-  (interpret-markup-list layout props
-  (make-justified-lines-markup-list (cons (make-hspace-markup indent)
-  args)))))
-
-#(define-markup-command (vspace layout props amount) (number?)
-  "This produces a invisible object taking vertical space."
-  (let ((amount (* amount 3.0)))
-    (if (> amount 0)
-        (ly:make-stencil "" (cons -1 1) (cons 0 amount))
-        (ly:make-stencil "" (cons -1 1) (cons amount amount)))))
-
 %% text defs
 presto = \markup { \bold \italic "Presto" }
 div = \markup { \bold "Div." }
@@ -41,23 +27,23 @@ naturale = \markup { \bold \italic "Naturale" }
 moltocr = {
   \set crescendoText = \markup { \italic "Molto cresc." }
   \set crescendoSpanner = #'text
-  \override DynamicTextSpanner #'style = #'dotted-line
+  \override DynamicTextSpanner.style = #'dotted-line
 }
 offCr = {
   \unset crescendoText
   \unset crescendoSpanner
-  \revert DynamicTextSpanner #'style
+  \revert DynamicTextSpanner.style
 }
 
 %% Layout for piano dynamics
 \layout {
   \context {
     \Voice
-    \override Glissando #'breakable = ##t
-    \override TextSpanner #'breakable = ##t
-    \override DynamicLineSpanner #'breakable = ##t
-    \override DynamicTextSpanner #'breakable = ##t
-    \override TrillSpanner #'breakable = ##t
+    \override Glissando.breakable = ##t
+    \override TextSpanner.breakable = ##t
+    \override DynamicLineSpanner.breakable = ##t
+    \override DynamicTextSpanner.breakable = ##t
+    \override TrillSpanner.breakable = ##t
   }
 }
 
@@ -107,10 +93,10 @@ offCr = {
     \consists "Text_engraver"
     \consists "Text_spanner_engraver"
     \consists "Font_size_engraver"
-    \override VerticalAxisGroup #'staff-affinity = #DOWN
-    \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing #'padding = #2
-    \override VerticalAxisGroup #'nonstaff-unrelatedstaff-spacing #'padding = #5
-    \override TextSpanner #'breakable = ##t
+    \override VerticalAxisGroup.staff-affinity = #DOWN
+    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
+    \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing.padding = #5
+    \override TextSpanner.breakable = ##t
   }
   \context {
     \Score
@@ -132,8 +118,8 @@ offCr = {
   \context {
     \MarkLine
     \name "SmallMarkLine"
-    \override MetronomeMark #'outside-staff-priority = #800
-    \override RehearsalMark #'outside-staff-priority = #1200
+    \override MetronomeMark.outside-staff-priority = #800
+    \override RehearsalMark.outside-staff-priority = #1200
   }
   \context {
     \Score
index 60fcf208818f2e02e20cdc85ceed6720c104ad0a..fbccc1f5585f627428c04821041a71a2136ede7e 100644 (file)
@@ -1,6 +1,4 @@
-\version "2.16.0"
-
-#(set-global-staff-size 22.45)
+\version "2.17.30"
 
 #(define (glissando::calc-extra-dy grob)
    (let* ((original (ly:grob-original grob))
          (- (ly:pitch-alteration right-pitch) (ly:pitch-alteration left-pitch))
          0 )))
 
-\paper {
-  indent= #0
-  line-width= #180
-}
-
 upper= \relative c' {
   \time 4/4
   \key e \major
@@ -43,21 +36,21 @@ lower= \relative c {
 }
 
 \score {
-  \new StaffGroup <<
+  \new StaffGroup \with {instrumentName = #"Guitar" } <<
     \new Staff = "guitar" <<
       \context Voice = "upper guitar" {
         \clef "G_8" \voiceOne
-        \override Glissando #'gap = #0.5
-        \override Glissando #'extra-offset = #'(-0.5 . 0)
-        \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
-        \override Glissando #'minimum-length = #4
-        \override Glissando #'extra-dy = #glissando::calc-extra-dy
+        \override Glissando.gap = #0.5
+        \override Glissando.extra-offset = #'(-0.5 . 0)
+        \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
+        \override Glissando.minimum-length = #4
+        \override Glissando.extra-dy = #glissando::calc-extra-dy
         \upper
       }
       \context Voice = "lower guitar" {
         \clef "G_8" \voiceTwo
-        \override Glissando #'bound-details #'right #'padding = #1
-        \override Glissando #'bound-details #'left #'padding = #0.2
+        \override Glissando.bound-details.right.padding = #1
+        \override Glissando.bound-details.left.padding = #0.2
         \lower
       }
     >>
@@ -70,11 +63,11 @@ lower= \relative c {
   \layout {
     \context {
       \Staff
-      \override StringNumber #'transparent = ##t
+      \hide StringNumber
     }
     \context {
       \TabStaff
-      \revert Arpeggio #'stencil
+      \revert Arpeggio.stencil
     }
   }
 }
index 082317705a9400e32d4516b7a3d54bc077d7cb9e..5dbe0da654ff9ab1036f92438a61e17f5499cefd 100644 (file)
@@ -2,12 +2,12 @@
 \include "example-header.ily"
 
 #(ly:set-option 'point-and-click #f)
+#(set-global-staff-size 24)
 
 global = {
     \time 4/4
     \numericTimeSignature
     \key c \major
-    #(set-global-staff-size 24)
 }
 
 cf = \relative c {
index d6ba0bfc9f3068398f009f6e090ca9c7eee5d402..d8597a9238846d023a7a5bd86bf267568d483dba 100644 (file)
@@ -741,7 +741,7 @@ followVoice.
 
 * Documentation updates
 
-* Added -e,--evaluate=CODE, to evaluate scheme from the command
+* Added -e, --evaluate=CODE, to evaluate scheme from the command
 line. Practical application:
 
         -e "(set-lily-option 'midi-debug #t)'
@@ -3343,7 +3343,7 @@ item for hard constraints.
 handle_broken_smobs (); should conserve a little memory.
 
 * Fixed handling of orphaned score-elements. Any element that does
-not have its Line_of_score as a ancestor in both directions, is silently
+not have its Line_of_score as an ancestor in both directions, is silently
 removed from the output.  This guarantees that programming errors
 don't result in coredumps from Dimension_cache::common_refpoint ():
 element->line_l () is always a common reference point.
index 362c00a21a30f92c61d298d720ef1a41c0339f2d..c890b90f3c05cec336e01c0a5f127a486bbb5df1 100644 (file)
        * input/no-notation/safe-tex.ly: New file.
 
        * scripts/lilypond.py (global_latex_preamble): Add \nofiles for
-       safe mode Add -s,--safe-mode option.  Use -S,--set for setting
+       safe mode Add -s, --safe-mode option.  Use -S, --set for setting
        options now.
        (run_lilypond): When in --safe-mode, pass option to lilypond-bin.
        When in --safe-mode, set environment openout_any=p[aranoid].
index b617fc99cd7dc1be42fa10f140a4317659ce5887..a1db6cd710cc01ee9ba6409619c0b92101af1e8e 100644 (file)
@@ -4,9 +4,11 @@ NAME = documentation
 
 STEPMAKE_TEMPLATES = documentation texinfo
 
-TEXTS = $(call src-wildcard,ANNOUNCE-*[0-9]) $(call src-wildcard,CHANGES-*[0-9]) $(call src-wildcard,ChangeLog*[0-9]) $(call src-wildcard,NEWS-*[0-9])
-EXTRA_DIST_FILES = $(TEXTS)
-EXTRA_DIST_FILES += $(call src-wildcard,*.html)
+TEXTS = $(call src-wildcard,ANNOUNCE-*[0-9]) \
+  $(call src-wildcard,CHANGES-*[0-9]) \
+  $(call src-wildcard,ChangeLog*[0-9]) \
+  $(call src-wildcard,NEWS-*[0-9]) \
+  $(call src-wildcard,THANKS-*[0-9])
 
 include $(depth)/make/stepmake.make
 
@@ -17,12 +19,9 @@ default: local-txt-doc
 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(TEXTS)))
 ##local-WWW-2: $(OUT_TXT_FILES) $(OUT_HTMLFILES) txt-to-html
 
-copy-for-me:
-       $(foreach a, $(README_TOP_FILES), cp ../$(a) $(outdir)/$(a).txt && ) true
-
 $(outdir)/%.txt: %
        cp $< $@
 
 txt-to-html:
-       $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
+       $(buildscript-dir)/text2html $(OUT_TXT_FILES)
        $(footify) $(addprefix $(outdir)/, $(addsuffix .html, $(TEXTS)))
diff --git a/Documentation/misc/THANKS-1.8 b/Documentation/misc/THANKS-1.8
new file mode 100644 (file)
index 0000000..dcd3163
--- /dev/null
@@ -0,0 +1,53 @@
+Release 1.8
+***********
+
+HEAD HACKERS
+
+Han-Wen Nienhuys
+Jan Nieuwenhuizen
+
+CONTRIBUTORS
+
+Graham Percival
+Heikki Junes
+Jügen Reuter
+Kim Shrier
+Rune Zedeler
+Werner Lemberg
+
+
+BUG HUNTERS
+
+Amelie Zapf
+Andrew Schaaf
+Atte Andre Jensen
+Bob Harrington
+Chris Jackson
+Chris Sawer
+David Bobroff
+Erik Sandberg
+Fernando Pablo Lopez-Lezcano
+Hans Kieserman
+Jeremie Lumbroso
+John Potelle
+John Williams
+Karl Berry
+Karl-Johan Karlsson 
+Klaus Zimmermann
+Koblinger Egmont
+Paul Scott
+Pedro Kroger
+Richard Shann
+Roland Stigge
+Ryan O'Neil
+Simon Bailey
+Simon Weatherill
+Stanislav Brabec
+Thomas Rijniers
+Werner Lemberg
+Yotam Medini
+
+
+#Local variables:
+#coding: utf-8
+#End:
diff --git a/Documentation/misc/THANKS-2.0 b/Documentation/misc/THANKS-2.0
new file mode 100644 (file)
index 0000000..8ef6b0c
--- /dev/null
@@ -0,0 +1,44 @@
+Release 2.0
+***********
+
+HEAD HACKERS
+
+Han-Wen Nienhuys
+Jan Nieuwenhuizen
+
+CONTRIBUTORS
+
+Mats Bengtsson
+Heikki Junes
+Jürgen Reuter
+
+BUG HUNTERS/SUGGESTIONS
+
+Antonio Palama
+Benjamin Milde
+Daniel Berjon Diez
+David Bobroff
+David Rayleigh Arnold
+Erik Ronstroem
+Fabio dos Santos
+Fodor Bertalan 
+Frederic Bron
+Graham Percival
+Ian Bailey-Mortimer
+John Williams
+Josza Marton
+Marco Caliari
+Matthieu Amiguet
+Michael Welsh Duggan
+Patrick Atamaniuk
+Paul Scott
+Pedro Kroeger
+Peter Lutek
+Richard Schoeller
+Thorkil Wolvendans
+Werner Trobin 
+
+
+#Local variables:
+#coding: utf-8
+#End:
diff --git a/Documentation/misc/THANKS-2.10 b/Documentation/misc/THANKS-2.10
new file mode 100644 (file)
index 0000000..be908e9
--- /dev/null
@@ -0,0 +1,129 @@
+Release 2.10
+************
+
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys  - Core development
+Jan Nieuwenhuizen - Core development
+Graham Percival   - Documentation Editor and Bug Meister
+John Mandereau    - Translation Meister
+Mats Bengtsson    - Support Guru 
+
+
+CONTRIBUTORS
+
+Angelo Contardi
+David Feuer
+Erik Sandberg
+Erlend Aasland
+Guido Amoruso
+Heikki Junes
+Joe Neeman
+John Mandereau
+
+
+TRANSLATORS
+
+Frédéric Chiasson
+Gauvain Pocentek
+Jean-Charles Malahieude
+John Mandereau
+Ludovic Sardain
+Nicolas Grandclaude
+Valentin Villenave
+
+
+SPONSORS
+
+Andrew Sidwell
+Anthony Youngman 
+Chris Sawer
+David Griffel
+Jamie Bullock
+Kieren MacMillan
+Michael Meixner 
+Paul Scott
+Rick Hansen
+Steve Doonan
+Trent Johnston
+Trevor Bača
+Vivian Barty-Taylor
+William Wilson
+
+DOCUMENTATION HELPERS
+
+Cameron Horsburgh
+Dave Luttinen
+Eduardo Vieira
+Erlend Aasland
+Geoff Horton
+Juergen Reuter
+
+
+BUG HUNTERS/SUGGESTIONS
+
+Albert Frantz
+Arvid Grøtting
+Anthony Youngman
+Aurèle Duda
+Ben Hoefer
+Bernie Arai
+Cameron Horsburgh
+Charles Cave
+Christian Hitz
+Christopher Ellis
+Claude Routhier
+Colin Wilding
+Daniel Tonda Castillo
+David Rogers
+Francisco Vila
+Harald Wellmann
+Henrik Frisk
+Hernán J. González 
+Johannes Schindelin
+John Williams
+J. Leung
+Karim Haddad
+Karl Hammar
+Keith Packard
+Kieren MacMillan
+Lee T. Wilkirson
+Lieke van der Meer
+Luc Wehli
+Manuzhai
+Mark Dewey
+Marcus Macauley
+Markus Schneider
+Matti Aaltonen
+Michael Meixner
+Michael Welsh Duggan
+Milan Zamazal
+Orm Finnendahl
+Paul Scott
+Phillip Kirlin
+Quentin Spencer
+Rainer Typke
+Rick Hansen
+Rutger Helmers
+Ruud van Silfhout
+Sietse Brouwer
+Stephen Carter
+Stephen Kress
+Thies Albrecht
+Toine Schreurs
+Trent Johnston
+Trevor Bača
+Trevor Daniels
+Vaclav Smilauer
+Vicente Solsona Dellá
+Victor Eijkhout
+Villum Sejersen
+Werner Lemberg
+Will Oram
+Zoltan V. Laszlo
+
+
+#Local variables:
+#coding: utf-8
+#End:
diff --git a/Documentation/misc/THANKS-2.12 b/Documentation/misc/THANKS-2.12
new file mode 100644 (file)
index 0000000..1928e06
--- /dev/null
@@ -0,0 +1,144 @@
+Release 2.12
+************
+
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys   - Core development
+Jan Nieuwenhuizen  - Core development
+Joe Neeman         - Core development
+Graham Percival    - Documentation Editor and Bug Meister
+Valentin Villenave - LSR Editor and Bug Meister
+Mats Bengtsson     - Support Guru
+John Mandereau     - Translation Meister
+
+
+CONTRIBUTORS
+
+Rune Zedeler
+Maximilian Albert
+Milan Zamazal
+Reinhold Kainhofer - musicxml2ly development
+Erlend Aasland
+Stan Sanderson     - Regression Checker
+Neil Puttock
+
+
+GRAND DOCUMENTATION PROJECT
+
+Trevor Daniels     - Assistant Documentation Editor
+Andrew Hawryluk    - NR work
+Carl Sorensen      - NR work
+Eyolf Østrem       - NR work
+Francisco Vila     - NR work
+Jay Hamilton       - NR work
+Jonathan Kulp      - NR work
+Joseph Harfouch    - NR work
+Patrick McCarty    - NR work
+Ralph Palmer       - NR work
+Till Rettig        - NR work
+Kurt Kroon         - Glossary Updates, NR work
+Alard de Boer      - Formatting
+Michael Rasmussen  - Formatting
+Trevor Bača        - Inspirational Headwords
+Reinhold Kainhofer - Technical Aid
+Neil Puttock       - Snippet Editor, Technical Aid
+
+
+TRANSLATORS
+
+Clytie Siddall
+Damien Heurtebise
+Francisco Vila
+Heikki Junes
+Jean-Charles Malahieude
+John Mandereau
+Matthieu Jacquot
+Nicolas Klutchnikoff
+Till Rettig
+Valentin Villenave
+
+
+SPONSORS
+
+Mike Amundsen
+Trevor Bača
+
+
+BUG HUNTERS/SUGGESTIONS
+
+Adam James Wilson
+Alard de Boer
+Alex Rolex
+Andy Haupt
+Arvid Grøtting
+Bertalan Fodor
+Benjamin Drung
+Cameron Horsburgh
+Carl Sorensen
+Christian Hitz
+Christian Herzberg
+David Bobroff
+David Griffel
+Daniel Hulme
+Daniel Johnson
+Dominic Neumann
+Eduardo Vieira
+Frédéric Chiasson
+Georg Dummer
+Georg Romstorfer
+Gilles Thibault
+Hernán J. González
+Hu Haipeng
+Jay Anderson
+James Kilfinger
+Jean-Marie Mouchel
+Jean-Yves Baudais
+Jesús Guillermo Andrade
+Jonathan Henkelman
+Kazuhiro Suzuki
+Kevin Dalley
+Laura Conrad
+Luc Wehli
+Maarten Hijzelendoorn
+Marc Lanoiselée
+Mark Polesky
+Matthieu Jacquot
+Matthijs Frankeno
+Martijn Vromans
+Marnen Laibow-Koser
+Maximilian Albert
+Mirosław Doroszewski
+Mike Coleman
+Neil Puttock
+Nicolas Mayencourt
+Nicolas Sceaux
+Orm Finnendahl
+Peter Budny
+Phillip Kirlin
+Pierre-Emmanuel Brame
+Ralph Palmer
+Renaud Flavigny
+Rick Hansen
+Risto Vääräniemi
+Robin Bannister
+Roland Goretzki
+Rune Zedeler
+Ruud van Silfhout
+Sean Reed
+Steven Weber
+Tomas Sauer
+Thomas Scharkowski
+Trevor Bača
+Vivian Barty-Taylor
+Werner Lemberg
+Wilbert Berendsen
+William Oram
+Yota Moteuchi
+Zack Charter
+Zoltan Selyem
+
+
+#Local variables:
+#coding: utf-8
+#End:
diff --git a/Documentation/misc/THANKS-2.14 b/Documentation/misc/THANKS-2.14
new file mode 100644 (file)
index 0000000..c0cd0b0
--- /dev/null
@@ -0,0 +1,53 @@
+Release 2.14
+************
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys   - Core development
+Jan Nieuwenhuizen  - Core development
+Graham Percival    - Release Meister
+Valentin Villenave - LSR Editor and Bug Meister
+Mats Bengtsson     - Support Guru
+John Mandereau     - Translation Meister
+Trevor Daniels     - Documentation Editor
+
+CONTRIBUTORS
+
+Carl Sorensen      - Fret diagrams
+Jonathan Kulp      - Documentation Patches
+Ralph Palmer       - Documentation Indexing
+
+TRANSLATORS
+
+Francisco Vila
+Jean-Charles Malahieude
+Till Rettig
+Yoshiki Sawada
+
+FROGS
+
+Carl Sorensen     - Frog meister
+Andrew Hawryluk
+Andrew Wilson
+Marek Klein
+Ian Hulin
+Frédéric Bron
+Hajo Dezelski
+Kieren MacMillan
+
+
+BUG HUNTERS/SUGGESTIONS
+
+Chris Liddell
+Chris Snyder
+David Kastrup
+Karim Haddad
+Mark Polesky
+Martin Tarenskeen
+Michael Käppler
+Nick Payne
+
+
+#Local variables:
+#coding: utf-8
+#End:
diff --git a/Documentation/misc/THANKS-2.16 b/Documentation/misc/THANKS-2.16
new file mode 100644 (file)
index 0000000..cd561ee
--- /dev/null
@@ -0,0 +1,73 @@
+Release 2.16
+************
+
+For information about the various official or semi-official positions,
+check out <URL:http://lilypond.org/authors.html>
+
+The following are registered as having authored changes to the
+repository of LilyPond since 2.14.2:
+
+Adam Spiers
+Alberto Simoes
+Aleksandr Andreev
+Anthony Fok
+Arnold Theresius
+Benkő Pál
+Bertrand Bordage
+Carl D. Sorensen
+Choan Gálvez
+Colin Campbell
+Daisuke Yamashita
+David Kastrup
+David Nalesnik
+Dénes Harmath
+Federico Bruni
+Francisco Vila
+Frédéric Bron
+Graham Breed
+Graham Percival
+Han-Wen Nienhuys
+Heikki Tauriainen
+Ian Hulin
+James Lowe
+Jan Nieuwenhuizen
+Jan-Peter Voigt
+Janek Warchoł
+Jean-Charles Malahieude
+Joe Neeman
+John Mandereau
+Joseph Wakeling
+Julien Rioux
+Karin Hoethker
+Keith OHara
+Marc Hohl
+Markus Oehme
+Matthias Kilian
+Michael Welsh Duggan
+Mike Solomon
+Neil Puttock
+Nicolas Sceaux
+Patrick McCarty
+Patrick Schmidt
+Pavel Roskin
+Peter Chubb
+Phil Holmes
+Piers Titus van der Torren
+Reinhold Kainhofer
+Rodolfo Zitellini
+Seafire
+Stefan Weil
+Sven Axelsson
+Thomas Morley
+Till Rettig
+Trevor Daniels
+Valentin Villenave
+Werner Lemberg
+Wol
+Yoshiki Sawada
+Łukasz Czerwiński
+
+
+#Local variables:
+#coding: utf-8
+#End:
diff --git a/Documentation/misc/THANKS-2.2 b/Documentation/misc/THANKS-2.2
new file mode 100644 (file)
index 0000000..afdbf7e
--- /dev/null
@@ -0,0 +1,60 @@
+Release 2.2
+***********
+
+HEAD HACKERS
+
+Han-Wen Nienhuys
+Jan Nieuwenhuizen
+
+CONTRIBUTORS
+
+David Bobroff
+Edward Sanford Sutton
+Heikki Junes
+Nicolas Sceaux
+
+BUG HUNTERS/SUGGESTIONS
+
+Alexandre Beneteau
+Andrew McNabb
+Atte Andre Jensen 
+Bertalan Fodor
+Bruce McIntyre
+Dave Symonds
+David Bobroff
+Darius
+Delma Avers
+Doug Linhardt
+Eric Wurbel
+Erik Sandberg
+Ferenc Wagner
+Hans Forbrich
+John Williams
+José Luis Cruz
+Jürgen Reuter
+Kieren Richard MacMillan
+Laurent Martelli
+Mats Bengtsson
+Matthias Kilian
+Nancho Alvarez
+Nick Busigin
+Nicolas Sceaux 
+Olivier Guéry
+Patrick Atamaniuk
+Paul Scott
+Pawel D
+Pedro Kroger
+Ray McKinney
+Reuben Thomas
+Robert Vlasaty
+Stef Epardaud
+Thomas Willhalm
+Thomas Scharkowski
+Tom Bäckström
+Werner Lemberg
+Will Oram
+
+
+#Local variables:
+#coding: utf-8
+#End:
diff --git a/Documentation/misc/THANKS-2.4 b/Documentation/misc/THANKS-2.4
new file mode 100644 (file)
index 0000000..9d89dd2
--- /dev/null
@@ -0,0 +1,63 @@
+Release 2.4
+***********
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys  - Core development
+Jan Nieuwenhuizen - Core development
+Erik Sandberg     - Bug Meister
+Pedro Kroger      - Build Meister
+Graham Percival   - Documentation Editor
+
+
+CONTRIBUTORS
+
+Carl Sorensen
+David Svoboda
+Guy Gascoigne-Piggford
+Heikki Junes
+Hendrik Maryns
+Kristof Bastiaensen
+Lisa Opus Goldstein
+Mats Bengtsson
+Michael Welsh Duggan
+Peter Lutek
+Werner Lemberg
+
+BUG HUNTERS/SUGGESTIONS
+
+
+Antti Kaihola
+Bertalan Fodor
+Brian Clements
+Christian Hitz
+Christoph Ludwig
+Christophe Papazian
+Daniel Berjón Díez
+Dave Phillips
+David Bobroff
+David Brandon
+Doug Asherman
+Ed Jackson
+Fernando Pablo Lopez-Lezcano
+Heinz Stolba
+Jack O'Quin
+Jefferson dos Santos Felix
+Karl Hammar
+Marco Gusy
+Martin Norbäck
+Matthias Neeracher
+Maurizio Tomasi
+Michael Kiermaier
+Pascal Legris
+Peter Rosenbeck
+Russ Ross
+Stephen Pollei
+Thomas Scharlowski
+Will Oram
+Yuval Harel
+
+
+#Local variables:
+#coding: utf-8
+#End:
diff --git a/Documentation/misc/THANKS-2.6 b/Documentation/misc/THANKS-2.6
new file mode 100644 (file)
index 0000000..0c58657
--- /dev/null
@@ -0,0 +1,109 @@
+Release 2.6
+***********
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys  - Core development
+Jan Nieuwenhuizen - Core development
+Erik Sandberg     - Bug Meister
+Pedro Kroger      - Build Meister
+Graham Percival   - Documentation Editor
+
+CONTRIBUTORS
+
+Andreas Scherer
+Arno Waschk
+Bertalan Fodor
+Carl Sorensen
+Christian Hitz
+David Jedlinsky
+Erlend Aasland
+Heikki Junes
+John Williams
+Jonatan Liljedahl
+Jürgen Reuter
+Mats Bengtsson
+Matthias Neeracher
+Mathieu Giraud
+Nicolas Sceaux
+Pal Benko
+Sebastiano Vigna
+Tatsuya Ono
+Vicente Solsona Della
+Werner Lemberg
+Yuval Harel
+
+TRANSLATORS
+
+Abel Cheung
+John Mandereau
+Olcay Yıldırım
+Roland Stigge
+Steven Michael Murphy
+
+
+WEBSITE TRANSLATORS
+
+Gauvain Pocentek
+Jean-Charles Malahieude
+John Mandereau
+Tineke de Munnik
+
+
+SPONSORS
+
+Bertalan Fodor
+Chris Sawer
+Gunther Strube
+Hans Forbrich
+Jonathan Walther
+Marcus Macauley
+Steve Doonan
+
+BUG HUNTERS/SUGGESTIONS
+
+Alexandre Beneteau
+Andreas Scherer
+Anthony W. Youngman
+Antti Kaihola
+Arjan Bos
+David Bobroff
+Bernard Hurley
+Bruce Fairchild
+Bruce McIntyre
+Daniel Johnson
+David Rogers
+Dylan Nicholson
+Ed Jackson
+Erik Ronström
+Fernando Pablo Lopez-Lezcano
+Gilles Sadowski
+Pothárn Imre
+Jack O'Quin
+Jeff Smith
+Johannes Schindelin
+John Mandereau
+Jose Miguel Pasini
+Josiah Boothby
+Juergen Reuter
+Karl Hammar
+Laura Conrad
+Olivier Guéry
+Paul Scott
+Richard Schoeller
+Rob Platt
+Roman Stöckl-Schmidt
+Russ Jorgensen
+Simon Bailey
+Stephen McCarthy
+Sven Axelsson
+Tapio Tuovila
+Tom Cato Amundsen
+Tyler Eaves
+Will Oram
+Wolfgang Hoffmann
+
+
+#Local variables:
+#coding: utf-8
+#End:
diff --git a/Documentation/misc/THANKS-2.8 b/Documentation/misc/THANKS-2.8
new file mode 100644 (file)
index 0000000..f75d0e0
--- /dev/null
@@ -0,0 +1,119 @@
+Release 2.8
+***********
+
+DEVELOPMENT TEAM
+
+Han-Wen Nienhuys  - Core development
+Jan Nieuwenhuizen - Core development
+Erik Sandberg     - Bug Meister
+Pedro Kroger      - Build Meister
+Graham Percival   - Documentation Editor
+Mats Bengtsson    - Support Guru 
+
+CONTRIBUTORS
+
+Erlend Aasland
+Heikki Junes
+Joe Neeman
+Johannes Schindelin
+Nicolas Sceaux
+Werner Lemberg
+Yoshinobu Ishizaki
+
+
+SPONSORS
+
+Aaron Mehl
+Basil Crow
+Bertalan Fodor
+Christian Ebert
+Henrik Frisk
+Jay Hamilton
+Jamie Bullock
+John Mandereau
+D. Josiah Boothby
+Kieren MacMillan
+Kris Shaffer
+Mark van den Borre
+Mike Rolish
+Muziekacademie Lede
+Nancho Alvarez
+Nicolas Sceaux
+Sean Reed
+Steve Doonan
+Sven Axelsson
+Trent Johnston
+Trevor Bača
+Vicente Solsona Dellá
+Yoshinobu Ishizaki   
+
+
+BUG HUNTERS/SUGGESTIONS
+
+Alan Stern
+Andrea Valle
+Bertalan Fodor
+Bob Broadus
+Bruce Fairchild
+Cameron Horsburgh
+Chris Sawer
+Christian Ebert
+Christian Hitz
+Darius Blasband
+David Bobroff
+David Raleigh Arnold
+Donald Axel
+Don Blaheta
+Dunstan Vavasour
+Edward Neeman
+Eduardo Vieira
+Ernesto Gancedo
+François Vion
+Frédéric Bron
+Geoff Horton
+Gianluca D.
+Hans Forbrich
+Hoang Nguyen
+Joe Neeman
+Jordi Nadal
+Jukka Akkanen
+Kieren Richard MacMillan
+Lambros Lambrou
+Laura Conrad
+Libero Mureddu
+Marcus Macauley
+Mark Steinheuser
+Matevž Jekovec
+Michael Kiermaier
+Michael Welsh Duggan
+Milan Zamazal
+Nicolas Mayencourt
+Orm Finnendahl
+Patrick K Welton
+Paul Scott
+Ralph Little
+Richard Schoeller
+Robert Vlasaty
+Roman Kurakin
+Russell Lang
+Scott Russell
+Sean Reed
+Seng Liang
+Steve Doonan
+Steven Weber
+Sven Axelsson
+Thomas Scharkowski
+Thomas Bushnell BSG
+Toine Schreurs
+Trent Johnston
+Trevor Bača
+Vicente Solsona Dellá
+Vincenzo Colonnella
+Werner Lemberg
+Will Oram
+Wolfgang Hoffmann
+
+
+#Local variables:
+#coding: utf-8
+#End:
index 04c654ef2305586967474cee825d99a725dd0d4c..0e176007f08c8ba5a6387a68bf3890c2b3ee7017 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-    Translation of GIT Committish: 2c452c6ec8d6c783bf24578447340d8feb7abafc
+    Translation of GIT Committish: 15588e9d567e08d8a640122f4dfab78a0959f710
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  Refer to `UPDATE A TRANSLATION'
 
 <DL>
 
-  <DT>Mozilla Firefox version 0.9 et suivantes</DT>
+  <DT>Mozilla Firefox version 3.0 et suivantes</DT>
   <DD>
     GNU/Linux
     <PRE>
-      Edition -&gt; Pr&eacute;ferences -&gt; G&eacute;n&eacute;ral -&gt; Langues
+      &Eacute;dition -&gt; Pr&eacute;ferences -&gt; Contenu -&gt; Langues -&gt; Choisir&hellip;
     </PRE>
   </DD>
   <DD>
     Microsoft Windows
     <PRE>
-      Outils -&gt; Options -&gt; G&eacute;n&eacute;ral -&gt; Langues
+      Outils -&gt; Options -&gt; Contenu -&gt; Langues -&gt; Choisir&hellip;
+    </PRE>
+  </DD>
+  <DD>
+    Mac OS
+    <PRE>
+      Firefox -&gt; Pr&eacute;f&eacute;rences -&gt; Contenu -&gt; Langues -&gt; Choisir&hellip;
     </PRE>
     Dans les versions plus anciennes, allez &agrave; <KBD>about:config</KBD>
     et changez la valeur de <KBD>intl.accept_languages</KBD>.
diff --git a/Documentation/misc/browser-language.it.html b/Documentation/misc/browser-language.it.html
new file mode 100644 (file)
index 0000000..3497b92
--- /dev/null
@@ -0,0 +1,72 @@
+<!--
+    Translation of GIT committish: 76249556809f7a916e9f2bdbe38d7bfc89a2e99d
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  Refer to `UPDATE A TRANSLATION'
+    in README for details.
+!-->
+
+<h1>Selezione automatica della lingua</h1>
+
+<P>
+  Per ottenere la selezione automatica della lingua, bisogna indicare al
+  browser web qual è la lingua preferita.  Il modo in cui farlo dipende
+  dal browser che si sta usando.
+</P>
+
+<!--
+    Instructions taken from http://www.debian.org/intro/cn
+    Do not copy the whole page, we use only about 50 of the 400 lines.
+    !-->
+
+<DL>
+
+  <DT>Mozilla Firefox versione 0.9 e successive</DT>
+  <DD>
+    GNU/Linux
+    <PRE>
+      Modifica -&gt; Preferenze -&gt; Contenuti -&gt; Lingue
+    </PRE>
+  </DD>
+  <DD>
+    Microsoft Windows
+    <PRE>
+      Strumenti -&gt; Opzioni -&gt; Contenuti -&gt; Lingue
+    </PRE>
+    In versioni precedenti bisogna andare in <KBD>about:config</KBD> e cambiare
+    il valore di <KBD>intl.accept_languages</KBD>.
+  </DD>
+
+  <DT>Mozilla / Netscape 4.x e versioni successive</DT>
+  <DD>
+    <PRE>
+      Modifica -&gt; Preferenze -&gt; Navigator -&gt; Lingue
+    </PRE>
+    Nota: con Netscape 4.x occorre assicurarsi di selezionare una lingua
+    tra quelle disponibili.  Molte persone hanno segnalato problemi
+    dovuti al fatto di aver inserito la lingua a mano.
+  </DD>
+
+  <DT>Microsoft Internet Explorer</DT>
+  <DD>
+    Microsoft Windows
+    <PRE>
+      Strumenti (o Visualizza o Extra) -&gt; Opzioni Internet -&gt; Lingue
+    </PRE>
+  </DD>
+  <DD>
+    MacOS
+    <PRE>
+      Modifica -&gt; Preferenze -&gt; Browser Web -&gt; Lingua/Font
+    </PRE>
+  </DD>
+</DL>
+
+<BR>
+Questa pagina, è ripresa da
+<A HREF="http://www.debian.org/intro/cn">Debian</A>, quindi è soggetta a
+
+Copyright &copy; 1997-2005
+<A HREF="http://www.spi-inc.org/">SPI</A>; vedi i <A href="http://www.debian.org/license" rel="copyright">termini della licenza</A>.
+<BR>
+Debian è un marchio registrato di Software in the Public Interest, Inc.
index 115e75784a10c330e7ac1733c1a15728bcfc8db1..7d198504b7dc8773ba6a50ab6ccc986b397f76f5 100644 (file)
@@ -598,7 +598,7 @@ An accidental alters a note by:
     \context {
       \Score
       \override SpacingSpanner
-        #'base-shortest-duration = #(ly:make-moment 1 32)
+        #'base-shortest-duration = #(ly:make-moment 1/32)
     }
   }
 }
@@ -683,7 +683,7 @@ Since one does not crescendo @emph{to} nothing, it is not correct to use
 @section alla breve
 
 ES: alla breve,
-I: ?,
+I: alla breve,
 F: alla breve, à la brève,
 D: Allabreve, alla breve
 NL: ?,
@@ -1782,7 +1782,7 @@ the top line high F:
     \context {
       \Score
       \override SpacingSpanner
-        #'base-shortest-duration = #(ly:make-moment 1 1)
+        #'base-shortest-duration = #(ly:make-moment 1/1)
       \override  NonMusicalPaperColumn
         #'line-break-system-details = #'((alignment-distances . (3 3)))
       \override BarLine #'stencil = ##f
@@ -1843,7 +1843,7 @@ have been selected:
     \context {
       \Score
       \override SpacingSpanner
-        #'base-shortest-duration = #(ly:make-moment 2 1)
+        #'base-shortest-duration = #(ly:make-moment 2/1)
       \override  NonMusicalPaperColumn
         #'line-break-system-details = #'((alignment-distances . (3 3)))
       \override BarLine #'stencil = ##f
@@ -1906,7 +1906,7 @@ shown below, where the notes show an arpeggio on a C major chord.
     \context {
       \Score
       \override SpacingSpanner #'base-shortest-duration =
-        #(ly:make-moment 2 1)
+        #(ly:make-moment 2/1)
       \override  NonMusicalPaperColumn
         #'line-break-system-details = #'((alignment-distances . (3 3)))
       \override BarLine #'stencil = ##f
@@ -1998,7 +1998,7 @@ Another name for @ref{common time}.
 @section Common Practice Period
 
 ES: ?,
-I: ?,
+I: Periodo di pratica comune,
 F: ?,
 D: Kunstmusik,
 NL: ?,
@@ -2089,7 +2089,7 @@ A meter that includes a triplet subdivision within the beat, such as
 @section compound time
 
 ES: compás compuesto, compás de amalgama (def. 2),
-I: ?,
+I: tempo misto,
 F: temps composé,
 D: zusammengesetzte Taktart,
 NL: ?,
@@ -2865,7 +2865,7 @@ FI: dissonanssi, dissonoiva intervalli, riitasointi.
 @section divisio
 
 ES: división,
-I: ?,
+I: divisio,
 F: ?,
 D: Divisio,
 NL: ?,
@@ -2900,7 +2900,7 @@ No cross-references.
 @section doit
 
 ES: elevación [de tono],
-I: ?,
+I: portamento indeterminato verso l'alto/l'acuto,
 F: saut,
 D: Glissando zu unbestimmter Tonhöhe,
 NL: ?,
@@ -2908,7 +2908,7 @@ DK: ?,
 S: ?,
 FI: nousu.
 
-Indicator for a indeterminately rising pitch bend.  Compare with
+Indicator for an indeterminately rising pitch bend.  Compare with
 @emph{glissando}, which has determinate starting and ending pitches.
 
 @seealso
@@ -3099,7 +3099,7 @@ FI: kaksoisylennysmerkki.
 @section double time signature
 
 ES: compás polimétrico,
-I: ?,
+I: indicazione di tempo doppia/polimetrica,
 F: ?,
 D: zusammengesetzte Taktart,
 NL: ?,
@@ -3519,7 +3519,7 @@ Double Bass).
 @section fall
 
 ES: caída [de tono],
-I: ?,
+I: portamento indeterminato verso il basso/il grave,
 F: chute,
 D: Glissando zu unbestimmter Tonhöhe nach unten,
 NL: ?,
@@ -3527,7 +3527,7 @@ DK: ?,
 S: ?,
 FI: lasku.
 
-Indicator for a indeterminately falling pitch bend.  Compare with
+Indicator for an indeterminately falling pitch bend.  Compare with
 @emph{glissando}, which has determinate starting and ending pitches.
 
 @seealso
@@ -3538,7 +3538,7 @@ Indicator for a indeterminately falling pitch bend.  Compare with
 @section feathered beam
 
 ES: barra progresiva,
-I: ?,
+I: travatura convergente/divergente,
 F: ligature en soufflet, lien de croches en soufflet,
 D: gespreizter Balken,
 NL: ?,
@@ -3702,7 +3702,7 @@ g64-"64th" s8
 @section flageolet
 
 ES: armónico,
-I: ?,
+I: armonico,
 F: flageolet,
 D: Flageolett,
 NL: ?,
@@ -3795,7 +3795,7 @@ FI: kvartti.
 @section Frenched score
 
 ES: partitura a la francesa,
-I: ?,
+I: partitura senza i righi vuoti,
 F: ?,
 D: Orchesterpartitur ohne leere Systeme,
 NL: ?,
@@ -3820,7 +3820,7 @@ you may wish to procure a copy of their style manual.
 @section Frenched staff
 
 ES: pentagrama a la francesa,
-I: ?,
+I: rigo temporaneo,
 F: ?,
 D: zeitweiliges Notensystem,
 NL: ?,
@@ -3956,7 +3956,7 @@ part in modern choral scores).
 @lilypond[quote,notime]
 \relative c'' {
   \override Staff.Clef #'full-size-change = ##t
-    \set Score.proportionalNotationDuration = #(ly:make-moment 1 8)
+    \set Score.proportionalNotationDuration = #(ly:make-moment 1/8)
     \clef french
     g1
     \clef treble
@@ -4319,7 +4319,7 @@ the same rhythm (more or less).  In contrast to @emph{polyphony}.
 @section hymn meter
 
 ES: ?,
-I: ?,
+I: metrica dell'inno,
 F: ?,
 D: Silbenanzahl,
 NL: ?,
@@ -4360,7 +4360,7 @@ No cross-references.
 @section incomplete dominant seventh chord
 
 ES: ?,
-I: ?,
+I: accordo di settima dominante incompleto,
 F: ?,
 D: verkürzter Dominantseptakkord,
 NL: ?,
@@ -4416,7 +4416,7 @@ The addition of such two intervals forms an octave.
 % Fifth
   < g des' >^"dim"
   < g d' >^"per"
-  < g dis >^"aug"
+  < g dis' >^"aug"
 % Sixth
   < gis es' >^"dim"
   < g! es' >^"min"
@@ -4714,7 +4714,7 @@ notes, unlike (b) @notation{leggiero} or @notation{non-legato}, (c)
 @section ligature
 
 ES: ligadura,
-I: ?,
+I: ligatura,
 F: ligature,
 DE: Ligatur,
 NL: ?,
@@ -4837,7 +4837,7 @@ g\longa g\breve
 @section lyric tie
 
 ES: ligadura de letra,
-I: ?,
+I: legatura del testo,
 F: ligature de mots,
 D: Textbindung,
 NL: ?,
@@ -5096,7 +5096,7 @@ TODO: add to definition (including summary info on proportional notation)
 @c TODO: add languages
 
 ES: signo de mensuración,
-I: ?,
+I: indicazione mensurale,
 F: signe de mensuration,
 D: Mensurzeichen,
 NL: ?,
@@ -5702,7 +5702,7 @@ FI: palautusmerkki.
 @c TODO: add definition.
 
 ES: tonos vecinos,
-I: ?,
+I: nota di volta,
 F: tons voisins,
 D: ?,
 NL: ?,
@@ -5853,17 +5853,17 @@ dotted notes are also frequently used.
 @lilypond[quote,line-width=13.0\cm]
 \relative c'' {
   \time 4/4
-  \times 2/3 {g8_"triplets" g g} g4 g8 g g4 \bar "||"
-  \times 2/5 {g8_"quintuplets" g g g g} g4 g8 g g4 \bar "||"
+  \tuplet 3/2 {g8_"triplets" g g} g4 g8 g g4 \bar "||"
+  \tuplet 5/2 {g8_"quintuplets" g g g g} g4 g8 g g4 \bar "||"
 }
 @end lilypond
 
 @lilypond[quote,line-width=13.0\cm]
 \relative c'' {
   \time 3/4
-  \times 3/2 {g4_"duplets" g} |
+  \tuplet 2/3 {g4_"duplets" g} |
   g4 g g \bar "||"
-  \times 6/4 {g8_"quadruplets" g g g} |
+  \tuplet 4/6 {g8_"quadruplets" g g g} |
   g8 g g g g4 \bar "||"
 }
 @end lilypond
@@ -6014,7 +6014,7 @@ the upper note is played first.
   }
   \relative c'' {
     c2. c32 b c b c b c b | c1
-    c2. b32 c b c \times 4/5 { b c b c b } | c1
+    c2. b32 c b c \tuplet 5/4 { b c b c b } | c1
   }
 >>
 @end lilypond
@@ -7110,7 +7110,7 @@ TODO: Where else could I refer the reader?
 @section simple meter
 
 ES: compás simple, compás de subdivisión binaria,
-I: ?,
+I: tempo semplice,
 F: mesure binaire,
 D: grader Takt,
 NL: ?,
index f4072b845c15b88f32dfc1d23d15dece5d793dbd..d4f25727e648f030b8f02b1fc6bb5c6f9fae2cee 100644 (file)
@@ -1,6 +1,5 @@
 ISOLANG = nl
 depth = ../..
-SUBDIRS = included web learning texidocs
 STEPMAKE_TEMPLATES = documentation texinfo
 LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
 # NO_PDF_FILES = 1
diff --git a/Documentation/nl/included/GNUmakefile b/Documentation/nl/included/GNUmakefile
deleted file mode 100644 (file)
index afe7a4d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
index f2f5c13aac2b6892245f706e3a5e1d80c04f36da..06b5fd1d832b757ee3819476da70d5ae0050438c 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
 @ignore
-    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -112,18 +112,18 @@ van een bestand.}
 Dubbelklik het LilyPond ikoon op je Bureaublad, een
 voorbeeldbestand wordt geopend.
 
-@sourceimage{Learning_Win7_Welcome_File_Whole,,,}
+@sourceimage{LilyPad,,,}
 
 Kies uit de menu's bovenaan het voorbeeldbestand
 @w{@code{Bestand > Opslaan als}}.  De optie @w{@code{Bestand
 > Opslaan}} kun je voor dit voorbeeldbestand niet gebruiken
 als je het nog geen geldige LilyPond-naam hebt gegeven.
 
-@sourceimage{Learning_Win7_Save_Menu,,,}
+@sourceimage{FileSave,,,}
 
 Kies een naam voor je bestand, bijvoorbeeld @file{test.ly}.
 
-@sourceimage{Learning_Win7_Save_File_With_Name,,,}
+@sourceimage{SaveAs,,,}
 
 
 @subsubheading Stap 2a. Compileer (door slepen en neerzetten - drag and drop)
@@ -134,12 +134,12 @@ bestand door ofwel:
 te slepen en neer te zetten bovenop het LilyPond ikoon,
 ofwel
 
-@sourceimage{Learning_Win7_Open_Dragndrop,,,}
+@sourceimage{DragDrop,,,}
 
 met de tweede muisknop op het bestand te klikken en uit het
 popup-contextmenu @w{@code{Open met > LilyPond}} te kiezen.
 
-@sourceimage{Learning_Win7_Open_Context_Menu,,,}
+@sourceimage{GenPDF,,,}
 
 @c FIXME: why present/advise the best/simplest for last?
 @subsubheading Stap 2b. Compileer (door te dubbelklikken)
@@ -154,32 +154,23 @@ een commandovenster geopend dat zich na korte tijd weer
 sluit.  Tijdens dit proces worden drie extra bestanden
 aangemaakt.
 
-@sourceimage{Learning_Win7_All_Files_Created,,,}
-
 Het PDF-bestand bevat het gegraveerde @file{test.ly} bestand.
 
-@sourceimage{Learning_Win7_Pdf_Output,,,}
+@sourceimage{GenPDF,,,}
 
 
 @subsubheading Andere commando's
 
 Om een nieuw bestand te maken, kies @w{@code{Bestand > Nieuw}} vanuit
-een eerder gemaakt bestand.
-
-@sourceimage{Learning_Win7_New_Menu,,,}
-
-@noindent
-of gebruik @w{@code{Bestand > Openen}} om een eerder gemaakt
-bestand te openen en te bewerken.
-
-@sourceimage{Learning_Win7_Open_Menu,,,}
+een eerder gemaakt bestand of gebruik @w{@code{Bestand > Openen}}
+om een eerder gemaakt bestand te openen en te bewerken.
 
 Als je een bestand bewerkt hebt, moet je het eerst opslaan
 voordat je het compileert en als het PDF-bestand niet wordt
 aangemaakt, controleer dan het venster met de voortgangslog
 op foutmeldingen.
 
-@sourceimage{Learning_Win7_Log_File,,,}
+@sourceimage{BadLog,,,}
 
 Dit logbestand wordt elke keer overschreven als je je
 LilyPond-bestand compileert.
@@ -216,7 +207,7 @@ Maak een tekstbestand met de naam @file{test.ly} en vul het met:
 @example
 \\version "@w{@versionStable{}}"
 @{
-  c' e' g' e'
+@ @ c' e' g' e'
 @}
 @end example
 
@@ -243,6 +234,7 @@ Berekenen van 1 pagina-afbreek brokken...[1: 1 pagina's]
 Tekenen van systemen...
 Opmaakuitvoer naar `test.ps'...
 Converteren naar `./test.pdf'...
+Success: compilation successfully completed
 @end example
 
 @subsubheading Stap 3. Bekijk de uitvoer
index d2ce06ad950aac52c872735d94d0d54744eda664..25f36cfcbaf0fbfc07a2981f5538cad7d53e0120 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
 @ignore
-    Translation of GIT committish: f0968c08c70e954c1d928feadf94006504ac4de1
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
diff --git a/Documentation/nl/learning/GNUmakefile b/Documentation/nl/learning/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index b5de751e9b3a304cd2857cba623826011afcee71..ae89bdba9c5a2bcacb14b8a8b710b9c24bb1256a 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
 
 @ignore
-    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -12,7 +12,7 @@
 @c Translation checker:
 @c Translation checker committish:
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 @ignore
 Tutorial guidelines:  (different from policy.txt!)
@@ -220,7 +220,7 @@ aes4 c b c
 Als het bovenstaand voorbeeld verwarrend is, ga dan eens na:
 als je piano aan het spelen was, welke toets zou je
 aanslaan?  Als je een zwarte aan zou slaan, dan @emph{moet}
-je @code{-is} of @code{-es} aan de notenaam toevoegen!
+je @w{@code{-is}} of @w{@code{-es}} aan de notenaam toevoegen!
 
 Het expliciet toevoegen van alle verplaatsingen vergt
 misschien een klein beetje extra inspanning tijdens het
@@ -340,7 +340,7 @@ aan een noot met een streepje @code{-} en een enkel
 karakter:
 
 @lilypond[verbatim,quote,relative=2]
-c4-^ c-+ c-- c-|
+c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
@@ -556,10 +556,10 @@ maakt dat de noten 2/3 van hun lengte duren, dus een
 @notation{triool} heeft als fractie 2/3
 
 @lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
 @end lilypond
 
 @subheading Versieringen
@@ -586,7 +586,7 @@ sleutelwoord @code{\appoggiatura} of @code{\acciaccatura}
 voor een muziekuitdrukking te zetten
 
 @lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
 c2 \appoggiatura b16 c2 |
 c2 \acciaccatura b16 c2 |
 @end lilypond
@@ -928,7 +928,8 @@ worden geplaatst buiten de hoekige haken.
 
 @lilypond[verbatim,quote,relative=2]
 r4 <c e g>~ <c f a>2 |
-<c e g>8[ <c f a> <c e g> <c f a>] <c e g>\>[ <c f a> <c f a> <c e g>]\! |
+<c e g>8[ <c f a> <c e g> <c f a>]
+  <c e g>\>[ <c f a> <c f a> <c e g>]\! |
 r4 <c e g>8.\p <c f a>16( <c e g>4-. <c f a>) |
 @end lilypond
 
@@ -1363,7 +1364,7 @@ compacter in te voeren.
 
 @c KEEP LY
 @lilypond[verbatim,quote]
-trioolA = \times 2/3 { c,8 e g }
+trioolA = \tuplet 3/2 { c,8 e g }
 maatA = { \trioolA \trioolA \trioolA \trioolA }
 
 \relative c'' {
@@ -1428,7 +1429,7 @@ staat gewoonlijk direct onder het versienummer.
 
 Als het bestand wordt verwerkt, worden titel en componist en
 opus boven de muziek geprint.  Meer informatie over titels
-staat in @ruser{Creating titles}.
+staat in @ruser{Creating titles headers and footers}.
 
 
 @node Absolute notenamen
index 0311790c8572c18565332965a59ac0b39d8f4e34..c68c506cf2865542d0f421e70676099f4cda896c 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
 
 @ignore
-    Translation of GIT committish: 66dd932f6519b7913400a838c5efbc5407e06cd8
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -12,7 +12,7 @@
 @c Translation checker:
 @c Translation checker committish:
 
-@c \version "2.16.0"
+@c \version "2.17.29"
 
 @node Fundamentele concepten
 @translationof Fundamental concepts
@@ -557,10 +557,10 @@ extending into a tuplet, a tie crossing two tuplets, and a
 phrasing slur extending out of a tuplet (lines 3 and 4).
 
 @lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
 @end lilypond
 
 
@@ -603,10 +603,10 @@ In fact, a Voice layer or context is the only one which can contain
 music.  If a Voice context is not explicitly declared one is created
 automatically, as we saw at the beginning of this chapter.  Some
 instruments such as an Oboe can play only one note at a time.  Music
-written for such instruments is monophonic and requires just a single
-voice.  Instruments which can play more than one note at a time like
-the piano will often require multiple voices to encode the different
-concurrent notes and rhythms they are capable of playing.
+written for such instruments requires just a single voice.  Instruments
+which can play more than one note at a time like the piano will often
+require multiple voices to encode the different concurrent notes and
+rhythms they are capable of playing.
 
 A single voice can contain many notes in a chord, of course,
 so when exactly are multiple voices needed?  Look first at
@@ -641,7 +641,7 @@ The fragments must also be separated with double backward slashes,
 @code{\\}, to place them in separate voices.  Without these, the
 notes would be entered into a single voice, which would usually
 cause errors.  This technique is particularly suited to pieces of
-music which are largely monophonic with occasional short sections
+music which are largely homophonic with occasional short sections
 of polyphony.
 
 Here's how we split the chords above into two voices and add both
@@ -697,8 +697,11 @@ used to encode three or more voices by adding more back-slash
 separators.
 
 The Voice contexts bear the names @code{"1"}, @code{"2"}, etc.
-In each of these contexts, the vertical direction of slurs,
-stems, ties, dynamics etc., is set appropriately.
+The first contexts set the @emph{outer} voices, the highest
+voice in context @code{"1"} and the lowest voice in context
+@code{"2"}.  The inner voices go in contexts @code{"3"} and
+@code{"4"}.  In each of these contexts, the vertical direction
+of slurs, stems, ties, dynamics etc., is set appropriately.
 
 @lilypond[quote,verbatim]
 \new Staff \relative c' {
@@ -822,16 +825,19 @@ later sections.
   <<  % Voice one
     { c2 aes4. bes8 }
   \\  % Voice two
-    { aes2 f4 fes }
-  \\  % No voice three
-  \\  % Voice four
     {
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'force-hshift = #0
-      <ees c>2
-      \once \override NoteColumn #'force-hshift = #0.5
+      \once \override NoteColumn.ignore-collision = ##t
+      <ees, c>2
+      \once \override NoteColumn.force-hshift = #0.5
       des2
     }
+  \\  % No voice three
+  \\  % Voice four
+    {
+      \override NoteColumn.force-hshift = #0
+      aes'2 f4 fes
+    }
   >> |
   <c ees aes c>1 |
 }
@@ -870,16 +876,17 @@ not understand.
     }
   \\  % Voice two
     { \voiceTwoStyle
-      aes2 f4 fes
+      % Ignore these for now - they are explained in Ch 4
+      \once \override NoteColumn.ignore-collision = ##t
+      <ees, c>2
+      \once \override NoteColumn.force-hshift = #0.5
+      des2
     }
   \\  % No Voice three (we want stems down)
   \\  % Voice four
     { \voiceThreeStyle
-      % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'force-hshift = #0
-      <ees c>2
-      \once \override NoteColumn #'force-hshift = #0.5
-      des2
+      \override NoteColumn.force-hshift = #0
+      aes'2 f4 fes
     }
   >> |
   <c ees aes c>1 |
@@ -896,7 +903,7 @@ enter the music of the first bar in three voices:
 \new Staff \relative c'' {
   \key aes \major
   <<
-    { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { <ees c>2 des }
+    { c2 aes4. bes8 } \\ { <ees, c>2 des } \\ { aes'2 f4 fes }
   >> |
   <c ees aes c>1 |
 }
@@ -921,30 +928,30 @@ adding another pair of @code{\\}.
   <<  % Voice one
     { c2 aes4. bes8 }
   \\  % Voice two
-    { aes2 f4 fes }
+    { <ees, c>2 des }
   \\  % Omit Voice three
   \\  % Voice four
-    { <ees c>2 des }
+    { aes'2 f4 fes }
   >> |
   <c ees aes c>1 |
 }
 @end lilypond
 
 @noindent
-We see that this fixes the stem direction, but exposes a problem
-sometimes encountered with multiple voices -- the stems of the notes
-in one voice can collide with the note heads in other voices.  In
-laying out the notes, LilyPond allows the notes or chords from two
-voices to occupy the same vertical note column provided the stems are
-in opposite directions, but the notes from the third and fourth voices
-are displaced, if necessary, to avoid the note heads colliding.  This
-usually works well, but in this example the notes of the lowest voice
-are clearly not well placed by default.  LilyPond provides several ways
-to adjust the horizontal placing of notes.  We are not quite ready yet
-to see how to correct this, so we shall leave this problem until a
+We see that this fixes the stem direction, but the horizontal
+placement of notes is not what we want.  LilyPond shifts the
+inner notes when they or their stems would collide with outer
+voices, but this is not appropriate for piano music.  In other
+situations, the shifts LilyPond applies might fail to clear
+the collisions.  LilyPond provides several ways to adjust the
+horizontal placing of notes.  We are not quite ready yet to see
+how to correct this, so we shall leave this problem until a
 later section --- see the @code{force-hshift} property in
 @ref{Fixing overlapping notation}.
 
+@warning{Lyrics, spanners (such as slurs, ties, hairpins etc.) cannot be
+created @q{across} voices.}
+
 
 @seealso
 Notation Reference: @ruser{Multiple voices}.
@@ -968,7 +975,7 @@ Notation Reference: @ruser{Multiple voices}.
 
 Voice contexts can also be created manually
 inside a @code{<< >>} block to create polyphonic music, using
-@code{\voiceOne} ... @code{\voiceFour} to indicate the required
+@code{\voiceOne} @dots{} @code{\voiceFour} to indicate the required
 directions of stems, slurs, etc.  In longer scores this method
 is clearer, as it permits the voices to be separated and to be
 given more descriptive names.
@@ -1045,22 +1052,21 @@ markup, ties, slurs, and dynamics:
 }
 @end lilypond
 
-Now let's look at three different ways to notate the same passage
-of polyphonic music, each of which is advantageous in different
+Now let's look at three different ways to notate the same passage of
+polyphonic music, each of which is advantageous in different
 circumstances, using the example from the previous section.
 
-An expression that appears directly inside a @code{<< >>} belongs
-to the main voice (but, note, @strong{not} in a @code{<< \\ >>}
-construct).  This is useful when extra voices appear while the
-main voice is playing.  Here is a more correct rendition of our
-example.  The red diamond-shaped notes
-demonstrate that the main melody is now in a single voice context,
+An expression that appears directly inside a @code{<< >>} belongs to the
+main voice (but, note, @strong{not} in a @code{<< \\ >>} construct).
+This is useful when extra voices appear while the main voice is playing.
+Here is a more correct rendition of our example.  The red diamond-shaped
+notes demonstrate that the main melody is now in a single voice context,
 permitting a phrasing slur to be drawn over them.
 
 @lilypond[quote,ragged-right,verbatim]
 \new Staff \relative c' {
   \voiceOneStyle
-  % The following notes are monophonic
+  % This section is homophonic
   c16^( d e f
   % Start simultaneous section of three voices
   <<
@@ -1622,8 +1628,7 @@ from the name, or vice versa.
   @tab Engraves clefs
 @item Completion_heads_engraver
   @tab Splits notes which cross bar lines
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
   @tab Creates hairpins and dynamic texts
 @item Forbid_line_break_engraver
   @tab Prevents line breaks if a musical element is still active
@@ -1787,11 +1792,11 @@ So this turns off extra naturals in one staff:
 @lilypond[quote,verbatim,ragged-right]
 <<
   \new Staff \relative c'' {
-    ais2 aes
+    aeses2 aes
   }
   \new Staff \relative c'' {
     \set Staff.extraNatural = ##f
-    ais2 aes
+    aeses2 aes
   }
 >>
 @end lilypond
@@ -1802,18 +1807,18 @@ and this turns them off in all staves:
 @lilypond[quote,verbatim,ragged-right]
 <<
   \new Staff \relative c'' {
-    ais2 aes
+    aeses2 aes
   }
   \new Staff \relative c'' {
     \set Score.extraNatural = ##f
-    ais2 aes
+    aeses2 aes
   }
 >>
 @end lilypond
 
-As another example, if @code{clefOctavation} is set in
+As another example, if @code{clefTransposition} is set in
 the @code{Score} context this immediately changes the value
-of the octavation in all current staves and sets a new default
+of the transposition in all current staves and sets a new default
 value which will be applied to all staves.
 
 The opposite command, @code{\unset}, effectively removes the
@@ -1877,12 +1882,12 @@ like this:
 <<
   \new Staff {
     \relative c'' {
-      gis4 ges aes ais
+      gisis4 gis aeses aes
     }
   }
   \new Staff \with { extraNatural = ##f } {
     \relative c'' {
-      gis4 ges aes ais
+      gisis4 gis aeses aes
     }
   }
 >>
@@ -1914,13 +1919,13 @@ The statement which sets the property value is the same as that in a
 @code{\context} block within a @code{\layout} block.  Each
 @code{\context} block will affect all contexts of the type specified
 throughout the @code{\score} or @code{\book} block in which the
-@code{\layout} block appears.  Here is a example to show the format:
+@code{\layout} block appears.  Here is an example to show the format:
 
 @lilypond[verbatim,quote]
 \score {
   \new Staff {
     \relative c'' {
-      cis4 e d ces
+      cisis4 e d cis
     }
   }
   \layout {
@@ -1940,12 +1945,12 @@ within the score:
   <<
     \new Staff {
       \relative c'' {
-        gis4 ges aes ais
+        gisis4 gis aeses aes
       }
     }
     \new Staff {
       \relative c'' {
-        gis4 ges aes ais
+        gisis4 gis aeses aes
       }
     }
   >>
@@ -2344,7 +2349,7 @@ celloMusic = \relative c {
 
 @seealso
 The starting templates can be found in the @q{Templates} appendix,
-see @ref{Single staff}.
+see @ref{Single staff templates}.
 
 
 @node Four-part SATB vocal score
@@ -2456,8 +2461,8 @@ lower = \relative c, {
 @end lilypond
 
 None of the templates provides this layout exactly.  The nearest is
-@q{SATB vocal score and automatic piano reduction} -- see
-@ref{Vocal ensembles} -- but we need to change the layout and add a piano
+@ref{SATB vocal score and automatic piano reduction} -- but we need
+to change the layout and add a piano
 accompaniment which is not derived automatically from the vocal parts.
 The variables holding the music and words for the vocal parts are
 fine, but we shall need to add variables for the piano reduction.
@@ -2896,8 +2901,7 @@ so that the values are identical.
         @}
       >>  % end ManualOne Staff context
       \new Staff = "ManualTwo" \with @{
-        \override VerticalAxisGroup
-          #'staff-staff-spacing  #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       @} <<
         \keyTime
         \clef "bass"
@@ -2937,7 +2941,7 @@ ManualOneVoiceTwoMusic = \relative c' {
 }
 ManualTwoMusic = \relative c' {
   c16 b c8~ c16 b c g a8 g~ g16 g aes ees |
-  f16 ees f d g aes g f ees d e8~ ees16 f ees d |
+  f16 ees f d g aes g f ees d ees8~ ees16 f ees d |
 }
 PedalOrganMusic = \relative c {
   r8 c16 d ees d ees8~ ees16 a, b g c b c8 |
@@ -2960,8 +2964,7 @@ PedalOrganMusic = \relative c {
         }
       >>  % end ManualOne Staff context
       \new Staff = "ManualTwo" \with {
-        \override VerticalAxisGroup
-          #'staff-staff-spacing #'stretchability = 5
+        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
       } <<
         \keyTime
         \clef "bass"
@@ -3028,7 +3031,7 @@ macros, or user-defined commands) for tweaks:
 @lilypond[quote,verbatim,ragged-right]
 dolce = \markup { \italic \bold dolce }
 
-padText = { \once \override TextScript #'padding = #5.0 }
+padText = { \once \override TextScript.padding = #5.0 }
 fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
@@ -3061,7 +3064,7 @@ the last line.
 violin = \relative c'' @{
   \repeat volta 2 @{
     c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
-    \once \override TextScript #'padding = #5.0
+    \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d |
     c,4.\markup @{
       \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
@@ -3088,7 +3091,7 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = $padding
+     \once \override TextScript.padding = #padding
    #})
 
 \relative c''' {
@@ -3234,3 +3237,5 @@ leading to
 >>
 @end lilypond
 
+
+
diff --git a/Documentation/nl/learning/preface.itely b/Documentation/nl/learning/preface.itely
new file mode 100644 (file)
index 0000000..74631e1
--- /dev/null
@@ -0,0 +1,60 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+
+@ignore
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.16.0"
+
+@node Preface
+@unnumbered Preface
+
+
+It must have been during a rehearsal of the EJE (Eindhoven Youth
+Orchestra), somewhere in 1995 that Jan, one of the cranked violists,
+told Han-Wen, one of the distorted French horn players, about the
+grand new project he was working on.  It was an automated system for
+printing music (to be precise, it was MPP, a preprocessor for
+MusiXTeX).  As it happened, Han-Wen accidentally wanted to print out
+some parts from a score, so he started looking at the software, and he
+quickly got hooked.  It was decided that MPP was a dead end.  After
+lots of philosophizing and heated email exchanges, Han-Wen started
+LilyPond in 1996.  This time, Jan got sucked into Han-Wen's new
+project.
+
+In some ways, developing a computer program is like learning to play
+an instrument.  In the beginning, discovering how it works is fun, and
+the things you cannot do are challenging.  After the initial excitement,
+you have to practice and practice.  Scales and studies can be dull, and
+if you are not motivated by others -- teachers, conductors or
+audience -- it is very tempting to give up.  You continue, and gradually
+playing becomes a part of your life.  Some days it comes naturally, and
+it is wonderful, and on some days it just does not work, but you keep
+playing, day after day.
+
+Like making music, working on LilyPond can be dull work, and on
+some days it feels like plodding through a morass of bugs.
+Nevertheless, it has become a part of our life, and we keep doing it.
+Probably the most important motivation is that our program actually
+does something useful for people.  When we browse around the net we
+find many people who use LilyPond, and produce impressive pieces of
+sheet music.  Seeing that feels unreal, but in a very pleasant way.
+
+Our users not only give us good vibes by using our program, many of
+them also help us by giving suggestions and sending bug reports, so we
+would like to thank all users that sent us bug reports, gave
+suggestions or contributed in any other way to LilyPond.
+
+Playing and printing music is more than a nice analogy.  Programming
+together is a lot of fun, and helping people is deeply satisfying, but
+ultimately, working on LilyPond is a way to express our deep love for
+music.  May it help you create lots of beautiful music!
+
+Han-Wen and Jan
+
+Utrecht/Eindhoven, The Netherlands, July 2002.
+
diff --git a/Documentation/nl/learning/templates.itely b/Documentation/nl/learning/templates.itely
new file mode 100644 (file)
index 0000000..7f7d1c9
--- /dev/null
@@ -0,0 +1,292 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+
+@ignore
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.16.0"
+
+@node Templates
+@appendix Templates
+
+This section of the manual contains templates with the LilyPond score
+already set up for you.  Just add notes, run LilyPond, and enjoy
+beautiful printed scores!
+
+@menu
+* Single staff templates::
+* Piano templates::
+* String quartet templates::
+* Vocal ensembles templates::
+* Orchestral templates::
+* Ancient notation templates::
+* Other templates::
+@end menu
+
+
+@node Single staff templates
+@appendixsec Single staff templates
+
+@menu
+* Notes only::
+* Notes and lyrics::
+* Notes and chords::
+* Notes lyrics and chords::
+@end menu
+
+@node Notes only
+@appendixsubsec Notes only
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
+{single-staff-template-with-only-notes.ly}
+
+@node Notes and lyrics
+@appendixsubsec Notes and lyrics
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,addversion]
+{single-staff-template-with-notes-and-lyrics.ly}
+
+@node Notes and chords
+@appendixsubsec Notes and chords
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{single-staff-template-with-notes-and-chords.ly}
+
+@node Notes lyrics and chords
+@appendixsubsec Notes, lyrics, and chords
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{single-staff-template-with-notes,-lyrics,-and-chords.ly}
+
+
+@node Piano templates
+@appendixsec Piano templates
+
+@menu
+* Solo piano::
+* Piano and melody with lyrics::
+* Piano centered lyrics::
+@end menu
+
+@node Solo piano
+@appendixsubsec Solo piano
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{piano-template-simple.ly}
+
+@node Piano and melody with lyrics
+@appendixsubsec Piano and melody with lyrics
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{piano-template-with-melody-and-lyrics.ly}
+
+@node Piano centered lyrics
+@appendixsubsec Piano centered lyrics
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{piano-template-with-centered-lyrics.ly}
+
+
+@node String quartet templates
+@appendixsec String quartet templates
+
+@menu
+* String quartet::
+* String quartet parts::
+@end menu
+
+@node String quartet
+@appendixsubsec String quartet
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{string-quartet-template-simple.ly}
+
+@node String quartet parts
+@appendixsubsec String quartet parts
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{string-quartet-template-with-separate-parts.ly}
+
+
+@node Vocal ensembles templates
+@appendixsec Vocal ensembles templates
+
+@menu
+* SATB vocal score::
+* SATB vocal score and automatic piano reduction::
+* SATB with aligned contexts::
+* SATB on four staves::
+* Solo verse and two-part refrain::
+* Hymn tunes::
+* Psalms::
+@end menu
+
+@node SATB vocal score
+@appendixsubsec SATB vocal score
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{vocal-ensemble-template.ly}
+
+@node SATB vocal score and automatic piano reduction
+@appendixsubsec SATB vocal score and automatic piano reduction
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{vocal-ensemble-template-with-automatic-piano-reduction.ly}
+
+@node SATB with aligned contexts
+@appendixsubsec SATB with aligned contexts
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly}
+
+@node SATB on four staves
+@appendixsubsec SATB on four staves
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{satb-choir-template---four-staves.ly}
+
+@node Solo verse and two-part refrain
+@appendixsubsec Solo verse and two-part refrain
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{vocal-ensemble-template-with-verse-and-refrain.ly}
+
+@node Hymn tunes
+@appendixsubsec Hymn tunes
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{hymn-template.ly}
+
+@node Psalms
+@appendixsubsec Psalms
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{anglican-psalm-template.ly}
+
+
+@node Orchestral templates
+@appendixsec Orchestral templates
+
+@menu
+* Orchestra choir and piano::
+@end menu
+
+@node Orchestra choir and piano
+@appendixsubsec Orchestra, choir and piano
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{orchestra,-choir-and-piano-template.ly}
+
+
+@node Ancient notation templates
+@appendixsec Ancient notation templates
+
+@menu
+* Transcription of mensural music::
+* Gregorian transcription template::
+@end menu
+
+@node Transcription of mensural music
+@appendixsubsec Transcription of mensural music
+
+@c Line-width below is because of Issue 766.  If that's fixed, it can be removed.
+@lilypondfile[verbatim,quote,ragged-right,texidoc,line-width=140]
+{ancient-notation-template----modern-transcription-of-mensural-music.ly}
+
+@node Gregorian transcription template
+@appendixsubsec Gregorian transcription template
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc]
+{ancient-notation-template----modern-transcription-of-gregorian-music.ly}
+
+
+@node Other templates
+@appendixsec Other templates
+
+@menu
+* Jazz combo::
+@end menu
+
+@node Jazz combo
+@appendixsubsec Jazz combo
+
+@c Line-width below is because of Issue 766.  If that's fixed, it can be removed.
+@lilypondfile[verbatim,quote,ragged-right,texidoc,line-width=140]
+{jazz-combo-template.ly}
+
+
+
+
+@ignore
+This isn't very useful, and only duplicates material in
+"global issues".  And if this info changes, this section often
+gets forgotten.
+
+@no de Other templates
+@se ction Other templates
+@su bsection All headers
+
+This template displays all available headers.  Some of them are only
+used in the Mutopia project; they don't affect the printed output at
+all.  They are used if you want the piece to be listed with different
+information in the Mutopia database than you wish to have printed on the
+music.  For example, Mutopia lists the composer of the famous D major
+violin concerto as TchaikovskyPI, whereas perhaps you wish to print
+"Petr Tchaikowski" on your music.
+
+@ The `line-width' is for \header.
+@li lypond[quote,verbatim,ragged-right,line-width]
+\version "2.16.0"
+\header {
+  dedication = "dedication"
+  title = "Title"
+  subtitle = "Subtitle"
+  subsubtitle = "Subsubtitle"
+  composer = "Composer (xxxx-yyyy)"
+  opus = "Opus 0"
+  piece = "Piece I"
+  meter = "meter"
+  instrument = "Instrument"
+  arranger = "Arranger"
+  poet = "Poet"
+  texttranslator = "Translator"
+  copyright = "public domain"
+
+  % These are headers used by the Mutopia Project
+  % http://www.mutopiaproject.org/
+  mutopiatitle = ""
+  mutopiacomposer = ""
+  mutopiapoet = ""
+  mutopiainstrument = ""
+  date = "composer's dates"
+  source = "urtext "
+  maintainer = "your name here"
+  maintainerEmail = "your email here"
+  maintainerWeb = "your home page"
+  lastupdated = "2004/Aug/26"
+}
+
+\score {
+  { c'4 }
+  \header {
+    piece = "piece1"
+    opus = "opus1"
+  }
+}
+
+\score {
+  { c'4 }
+  \header {
+    piece = "piece2"
+    opus = "opus2"
+  }
+}
+@end lilypond
+@end ignore
+
+
+
index ad9191151c30140848bacf72577514824f44f6f7..d428ec33fb75b78ef03df9adaca80a39152135ca 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
 @ignore
-    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
diff --git a/Documentation/nl/learning/tweaks.itely b/Documentation/nl/learning/tweaks.itely
new file mode 100644 (file)
index 0000000..80881da
--- /dev/null
@@ -0,0 +1,4321 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+
+@ignore
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.17.20"
+
+@node Tweaking output
+@chapter Tweaking output
+
+This chapter discusses how to modify output.  LilyPond is extremely
+configurable; virtually every fragment of output may be changed.
+
+
+@menu
+* Tweaking basics::
+* The Internals Reference manual::
+* Appearance of objects::
+* Placement of objects::
+* Collisions of objects::
+* Further tweaking::
+@end menu
+
+@node Tweaking basics
+@section Tweaking basics
+
+@menu
+* Introduction to tweaks::
+* Objects and interfaces::
+* Naming conventions of objects and properties::
+* Tweaking methods::
+@end menu
+
+@node Introduction to tweaks
+@subsection Introduction to tweaks
+
+@q{Tweaking} is a LilyPond term for the various methods available
+to the user for modifying the actions taken during interpretation
+of the input file and modifying the appearance of the printed
+output.  Some tweaks are very easy to use; others are more
+complex.  But taken together the methods available for tweaking
+permit almost any desired appearance of the printed music to be
+achieved.
+
+In this section we cover the basic concepts required to understand
+tweaking.  Later we give a variety of ready-made commands which can
+simply be copied to obtain the same effect in your own scores, and
+at the same time we show how these commands may be constructed so
+that you may learn how to develop your own tweaks.
+
+Before starting on this Chapter you may wish to review the section
+@ref{Contexts and engravers}, as Contexts, Engravers, and the
+Properties contained within them are fundamental to understanding
+and constructing Tweaks.
+
+@node Objects and interfaces
+@subsection Objects and interfaces
+
+@cindex object
+@cindex grob
+@cindex spanner
+@cindex interface
+@cindex properties, object
+@cindex object properties
+@cindex layout object
+@cindex object, layout
+@cindex interface
+
+Tweaking involves modifying the internal operation and structures
+of the LilyPond program, so we must first introduce some terms
+which are used to describe those internal operations and
+structures.
+
+The term @q{Object} is a generic term used to refer to the
+multitude of internal structures built by LilyPond during the
+processing of an input file.  So when a command like @code{\new
+Staff} is encountered a new object of type @code{Staff} is
+constructed.  That @code{Staff} object then holds all the
+properties associated with that particular staff, for example, its
+name and its key signature, together with details of the engravers
+which have been assigned to operate within that staff's context.
+Similarly, there are objects to hold the properties of all other
+contexts, such as @code{Voice} objects, @code{Score} objects,
+@code{Lyrics} objects, as well as objects to represent all
+notational elements such as bar lines,
+note heads, ties, dynamics, etc.  Every object has its own set of
+property values.
+
+Some types of object are given special names.  Objects which represent
+items of notation on the printed output such as note heads, stems,
+slurs, ties, fingering, clefs, etc are called @q{Layout objects},
+often known as @q{Graphical Objects}, or @q{Grobs} for short.  These
+are still objects in the generic sense above, and so they too all have
+properties associated with them, such as their position, size, color,
+etc.
+
+Some layout objects are still more specialized.  Phrasing slurs,
+crescendo hairpins, ottava marks, and many other grobs are not
+localized in a single place -- they have a starting point, an
+ending point, and maybe other properties concerned with their
+shape.  Objects with an extended shape like these are called
+@q{Spanners}.
+
+It remains to explain what @q{Interfaces} are.  Many objects, even
+though they are quite different, share common features which need to
+be processed in the same way.  For example, all grobs have a color, a
+size, a position, etc, and all these properties are processed in the
+same way during LilyPond's interpretation of the input file.  To
+simplify these internal operations these common actions and properties
+are grouped together in an object called a @code{grob-interface}.
+There are many other groupings of common properties like this, each
+one given a name ending in @code{interface}.  In total there are over
+100 such interfaces.  We shall see later why this is of interest and
+use to the user.
+
+These, then, are the main terms relating to objects which we
+shall use in this chapter.
+
+@node Naming conventions of objects and properties
+@subsection Naming conventions of objects and properties
+
+@cindex naming conventions for objects
+@cindex naming conventions for properties
+@cindex objects, naming conventions
+@cindex properties, naming conventions
+
+We met some object naming conventions previously, in
+@ref{Contexts and engravers}.  Here for reference is a list
+of the most common object and property types together with
+the conventions for naming them and a couple of examples of
+some real names.  We have used @q{A} to stand for any capitalized
+alphabetic character and @q{aaa} to stand for any number of
+lower-case alphabetic characters.  Other characters are used
+verbatim.
+
+@multitable @columnfractions .33 .33 .33
+@headitem Object/property type
+  @tab Naming convention
+  @tab Examples
+@item Contexts
+  @tab Aaaa or AaaaAaaaAaaa
+  @tab Staff, GrandStaff
+@item Layout Objects
+  @tab Aaaa or AaaaAaaaAaaa
+  @tab Slur, NoteHead
+@item Engravers
+  @tab Aaaa_aaa_engraver
+  @tab Clef_engraver, Note_heads_engraver
+@item Interfaces
+  @tab aaa-aaa-interface
+  @tab grob-interface, break-aligned-interface
+@item Context Properties
+  @tab aaa or aaaAaaaAaaa
+  @tab alignAboveContext, skipBars
+@item Layout Object Properties
+  @tab aaa or aaa-aaa-aaa
+  @tab direction, beam-thickness
+@end multitable
+
+As we shall see shortly, the properties of different types of object are
+modified by different commands, so it is useful to be able to recognize
+the types of objects and properties from their names.
+
+
+@node Tweaking methods
+@subsection Tweaking methods
+
+@cindex tweaking methods
+
+@menu
+* The \override command::
+* The \revert command::
+* The \once prefix::
+* The \overrideProperty command::
+* The \tweak command::
+@end menu
+
+@node The \override command
+@unnumberedsubsubsec The @code{\override} command
+
+@cindex override command
+@cindex override syntax
+
+@funindex \override
+@funindex override
+
+We have already met the commands @code{\set} and @code{\with}, used to
+change the properties of @strong{contexts} and to remove and add
+@strong{engravers}, in @ref{Modifying context properties}, and
+@ref{Adding and removing engravers}.  We must now introduce some more
+important commands.
+
+The command to change the properties of @strong{layout objects} is
+@code{\override}.  Because this command has to modify
+internal properties deep within LilyPond its syntax is not
+as simple as the commands you have used so far.  It needs to
+know precisely which property of which object in which context
+has to be modified, and what its new value is to be.  Let's see
+how this is done.
+
+The general syntax of this command is:
+
+@example
+\override @var{Context}.@var{LayoutObject}.@var{layout-property} = #@var{value}
+@end example
+
+@noindent
+This will set the property with the name @var{layout-property} of the
+layout object with the name @var{LayoutObject}, which is a member of
+the @var{Context} context, to the value @var{value}.
+
+The @var{Context} may be omitted (and usually is) when the
+required context is unambiguously implied and is one of lowest
+level contexts, i.e., @code{Voice}, @code{ChordNames} or
+@code{Lyrics}, and we shall omit it in many of the following
+examples.  We shall see later when it must be specified.
+
+Later sections deal comprehensively with properties and their
+values, see @ref{Types of properties}.  But in this section we shall
+use just a few simple properties and values which are easily
+understood in order to illustrate the format and use of these
+commands.
+
+LilyPond's primary expressions are musical items like notes,
+durations, and markups.  More basic expressions like numbers,
+strings, and lists are processed in @q{Scheme mode}, which is
+invoked by prefixing the value with @samp{#}.  Although the
+values may sometimes have a valid representation in LilyPond's
+musical mode, this manual will always use @samp{#} for their
+entry for the sake of consistency.  For more information about
+Scheme mode, see @rextend{LilyPond Scheme syntax}.
+
+@code{\override} is the most common command used in tweaking, and
+most of the rest of this chapter will be directed to presenting
+examples of how it is used.  Here is a simple example to change the
+color of the note head:
+
+@cindex color property, example
+@cindex NoteHead, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+c4 d
+\override NoteHead.color = #red
+e4 f |
+\override NoteHead.color = #green
+g4 a b c |
+@end lilypond
+
+
+@node The \revert command
+@unnumberedsubsubsec The @code{\revert} command
+
+@cindex revert command
+
+@funindex \revert
+@funindex revert
+
+Once overridden, the property retains its new value until it is
+overridden again or a @code{\revert} command is encountered.
+The @code{\revert} command has the following syntax and causes
+the value of the property to revert to its original default
+value; note, not its previous value if several @code{\override}
+commands have been issued.
+
+@example
+\revert @var{Context}.@var{LayoutObject}.@var{layout-property}
+@end example
+
+Again, just like @var{Context} in the @code{\override} command,
+@var{Context} is often not needed.  It will be omitted
+in many of the following examples.  Here we revert the color
+of the note head to the default value for the final two notes:
+
+@cindex color property, example
+@cindex NoteHead, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+c4 d
+\override NoteHead.color = #red
+e4 f |
+\override NoteHead.color = #green
+g4 a
+\revert NoteHead.color
+b4 c |
+@end lilypond
+
+
+@node The \once prefix
+@unnumberedsubsubsec The @code{\once} prefix
+
+@funindex \once
+@funindex once
+
+Both the @code{\override} and the @code{\set} commands may be prefixed
+by @code{\once}.  This causes the following @code{\override} or
+@code{\set} command to be effective only during the current musical
+moment before the property reverts back to its previous value (this can
+be different from the default if another @code{\override} is still in
+effect).  Using the same example, we can change the color of a single
+note like this:
+
+@cindex color property, example
+@cindex NoteHead, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+c4 d
+\override NoteHead.color = #red
+e4 f |
+\once \override NoteHead.color = #green
+g4 a
+\revert NoteHead.color
+b c |
+@end lilypond
+
+
+@node The \overrideProperty command
+@unnumberedsubsubsec The @code{\overrideProperty} command
+
+@cindex overrideProperty command
+
+@funindex \overrideProperty
+@funindex overrideProperty
+
+There is another form of the override command,
+@code{\overrideProperty}, which is occasionally required.
+We mention it here for completeness, but for details see
+@rextend{Difficult tweaks}.
+@c Maybe explain in a later iteration  -td
+
+
+@node The \tweak command
+@unnumberedsubsubsec The @code{\tweak} command
+
+@cindex tweak command
+
+@funindex \tweak
+@funindex tweak
+
+The final tweaking command which is available is @code{\tweak}.  This
+should be used when several objects occur at the same musical moment,
+but you only want to change the properties of selected ones, such as a
+single note within a chord.  Using @code{\override} would affect all the
+notes within a chord, whereas @code{\tweak} affects just the following
+item in the input stream.
+
+Here's an example.  Suppose we wish to change the size of the
+middle note head (the E) in a C major chord.  Let's first see what
+@code{\once \override} would do:
+
+@cindex font-size property, example
+@cindex NoteHead, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+<c e g>4
+\once \override NoteHead.font-size = #-3
+<c e g>4
+<c e g>4
+@end lilypond
+
+We see the override affects @emph{all} the note heads in the chord.
+This is because all the notes of a chord occur at the same
+@emph{musical moment}, and the action of @code{\once} is to
+apply the override to all layout objects of the type specified
+which occur at the same musical moment as the @code{\override}
+command itself.
+
+The @code{\tweak} command operates in a different way.  It acts on
+the immediately following item in the input stream.  In its simplest
+form, it is effective only on objects which are created directly
+from the following item, essentially note heads and articulations.
+
+So to return to our example, the size of the middle note of
+a chord would be changed in this way:
+
+@cindex font-size property, example
+@cindex @code{\tweak}, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+<c e g>4
+<c \tweak font-size #-3 e g>4
+@end lilypond
+
+Note that the syntax of @code{\tweak} is different from that of the
+@code{\override} command.  The context should not be specified; in
+fact, it would generate an error to do so.  Both context and layout
+object are implied by the following item in the input stream.  Note
+also that an equals sign should not be present.  So the simple form
+of the @code{\tweak} command is
+
+@example
+\tweak @var{layout-property} #@var{value}
+@end example
+
+A @code{\tweak} command can also be used to modify just one in
+a series of articulations, as shown here:
+
+@cindex color property, example
+@cindex @code{\tweak}, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+a4^"Black"
+  -\tweak color #red ^"Red"
+  -\tweak color #green _"Green"
+@end lilypond
+
+@noindent
+Note that the @code{\tweak} command must be preceded by an articulation
+mark since the tweaked expression needs to be applied as an articulation
+itself.  In case of multiple direction overrides (@code{^} or @code{_}),
+the leftmost override wins since it is applied last.
+
+@cindex @code{\tweak}, Accidental
+@cindex @code{\tweak}, specific layout object
+
+Objects such as stems and accidentals are created later, and not
+directly from the following event.  It is still possible to use
+@code{\tweak} on such indirectly created objects by explicitly naming
+the layout object, provided that LilyPond can trace its origin back to
+the original event:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+<\tweak Accidental.color #red   cis4
+ \tweak Accidental.color #green es
+ g>
+@end lilypond
+
+This long form of the @code{\tweak} command can be described as
+
+@example
+\tweak @var{layout-object}.@var{layout-property} @var{value}
+@end example
+
+@cindex tuplets, nested
+@cindex triplets, nested
+@cindex bracket, tuplet
+@cindex bracket, triplet
+@cindex tuplet bracket
+@cindex triplet bracket
+
+@funindex TupletBracket
+
+The @code{\tweak} command must also be used to change the
+appearance of one of a set of nested tuplets which begin at the
+same musical moment.  In the following example, the long tuplet
+bracket and the first of the three short brackets begin at the
+same musical moment, so any @code{\override} command would apply
+to both of them.  In the example, @code{\tweak} is used to
+distinguish between them.  The first @code{\tweak} command
+specifies that the long tuplet bracket is to be placed above the
+notes and the second one specifies that the tuplet number is to be
+printed in red on the first short tuplet bracket.
+
+@cindex @code{\tweak}, example
+@cindex direction property, example
+@cindex color property, example
+
+@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
+\tweak direction #up
+\tuplet 3/4 {
+  \tweak color #red
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
+}
+@end lilypond
+
+If nested tuplets do not begin at the same moment, their
+appearance may be modified in the usual way with
+@code{\override} commands:
+
+@cindex text property, example
+@cindex tuplet-number function, example
+@cindex transparent property, example
+@cindex TupletNumber, example of overriding
+
+@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
+\tuplet 3/2 { c8[ c c] }
+\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
+\tuplet 3/2 {
+  c8[ c]
+  c8[ c]
+  \once \override TupletNumber.transparent = ##t
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
+}
+@end lilypond
+
+
+@seealso
+Notation Reference:
+@ruser{The tweak command}.
+
+
+@node The Internals Reference manual
+@section The Internals Reference manual
+
+@cindex Internals Reference
+
+@menu
+* Properties of layout objects::
+* Properties found in interfaces::
+* Types of properties::
+@end menu
+
+@node Properties of layout objects
+@subsection Properties of layout objects
+
+@cindex properties of layout objects
+@cindex properties of grobs
+@cindex grobs, properties of
+@cindex layout objects, properties of
+@cindex Internals Reference manual
+
+Suppose you have a slur in a score which, to your mind,
+appears too thin and you'd like to draw it a little heavier.
+How do you go about doing this?  You know from the statements
+earlier about the flexibility of LilyPond that such a thing
+should be possible, and you would probably guess that an
+@code{\override} command would be needed.  But is there a
+heaviness property for a slur, and if there is, how might it
+be modified?  This is where the Internals Reference manual
+comes in.  It contains all the information you might need to
+construct this and all other @code{\override} commands.
+
+Before we look at the Internals Reference a word of warning.
+This is a @strong{reference} document, which means there is
+little or no explanation contained within it: its purpose is
+to present information precisely and concisely.  This
+means it might look daunting at first sight.  Don't worry!
+The guidance and explanation presented here will enable you
+to extract the information from the Internals Reference for
+yourself with just a little practice.
+
+@cindex override example
+@cindex Internals Reference, example of using
+@cindex @code{\addlyrics} example
+
+Let's use a concrete example with a simple fragment of real
+music:
+
+@c Mozart, Die Zauberflöte Nr.7 Duett
+
+@lilypond[quote,verbatim,relative=2]
+{
+  \key es \major
+  \time 6/8
+  {
+    r4 bes8 bes[( g]) g |
+    g8[( es]) es d[( f]) as |
+    as8 g
+  }
+  \addlyrics {
+    The man who | feels love's sweet e -- | mo -- tion
+  }
+}
+@end lilypond
+
+Suppose now that we decide we would like the slurs to be a
+little heavier.  Is this possible?  The slur is certainly a
+layout object, so the question is, @q{Is there a property
+belonging to a slur which controls the heaviness?}  To answer
+this we must look in the Internals Reference, or IR for short.
+
+The IR for the version of LilyPond you are using may be found
+on the LilyPond website at @uref{http://lilypond.org}.  Go to the
+documentation page and click on the Internals Reference link.
+For learning purposes you should use the standard HTML version,
+not the @q{one big page} or the PDF.  For the next few
+paragraphs to make sense you will need to actually do this
+as you read.
+
+Under the heading @strong{Top} you will see five links.  Select
+the link to the @emph{Backend}, which is where information about
+layout objects is to be found.  There, under the heading
+@strong{Backend}, select the link to @emph{All layout objects}.
+The page that appears lists all the layout objects used in your
+version of LilyPond, in alphabetic order.  Select the link to
+Slur, and the properties of Slurs are listed.
+
+An alternative way of finding this page is from the Notation
+Reference.  On one of the pages that deals with slurs you may find a
+link to the Internals Reference.  This link will take you directly to
+this page, but if you have an idea about the name of the layout object
+to be tweaked, it is easier to go straight to the IR and search there.
+
+This Slur page in the IR tells us first that Slur objects are created
+by the Slur_engraver.  Then it lists the standard settings.  Browse
+through them looking for a property that might control the heaviness of
+slurs, and you should find
+
+@example
+@code{thickness} (number)
+     @code{1.2}
+     Line thickness, generally measured in @code{line-thickness}
+@end example
+
+This looks a good bet to change the heaviness.  It tells us that
+the value of @code{thickness} is a simple @emph{number},
+that the default value is 1.2, and that the units are
+in another property called @code{line-thickness}.
+
+As we said earlier, there are few to no explanations in the IR,
+but we already have enough information to try changing the
+slur thickness.  We see that the name of the layout object
+is @code{Slur}, that the name of the property to change is
+@code{thickness} and that the new value should be a number
+somewhat larger than 1.2 if we are to make slurs thicker.
+
+We can now construct the @code{\override} command by simply
+substituting the values we have found for the names, omitting
+the context.  Let's use a very large value for the thickness
+at first, so we can be sure the command is working.  We get:
+
+@example
+\override Slur.thickness = #5.0
+@end example
+
+Don't forget the@tie{}@code{#} preceding the new value!
+
+The final question is, @q{Where should this command be
+placed?}  While you are unsure and learning, the best
+answer is, @q{Within the music, before the first slur and
+close to it.}  Let's do that:
+
+@cindex Slur example of overriding
+@cindex thickness property, example
+
+@lilypond[quote,verbatim,relative=2]
+{
+  \key es \major
+  \time 6/8
+  {
+    % Increase thickness of all following slurs from 1.2 to 5.0
+    \override Slur.thickness = #5.0
+    r4 bes8 bes[( g]) g |
+    g8[( es]) es d[( f]) as |
+    as8 g
+  }
+  \addlyrics {
+    The man who | feels love's sweet e -- | mo -- tion
+  }
+}
+@end lilypond
+
+@noindent
+and we see that the slur is indeed heavier.
+
+So this is the basic way of constructing @code{\override}
+commands.  There are a few more complications that we
+shall meet in later sections, but you now know all the
+essentials required to make up your own -- but you will
+still need some practice.  This is provided in the examples
+which follow.
+
+@subsubsubheading Finding the context
+
+@cindex context, finding
+@cindex context, identifying correct
+
+But first, what if we had needed to specify the Context?
+What should it be?  We could guess that slurs are in
+the Voice context, as they are clearly closely associated
+with individual lines of music, but can we be sure?  To
+find out, go back to the top of the IR page describing the
+Slur, where it says @q{Slur objects are created by: Slur
+engraver}.  So slurs will be created in whichever context
+the @code{Slur_engraver} is in.  Follow the link to the
+@code{Slur_engraver} page.  At the very bottom it tells
+us that @code{Slur_engraver} is part of seven Voice contexts,
+including the standard voice context, @code{Voice}, so our
+guess was correct.  And because @code{Voice} is one of the
+lowest level contexts which is implied unambiguously by
+the fact that we are entering notes, we can omit it in this
+location.
+
+@subsubsubheading Overriding once only
+
+@cindex overriding once only
+@cindex once override
+
+@funindex \once
+@funindex once
+
+As you can see, @emph{all} the slurs are thicker in the final example
+above.  But what if we wanted just the first slur to be thicker?  This
+is achieved with the @code{\once} command.  Placed immediately before
+the @code{\override} command it causes it to change only the slur
+which begins on the @strong{immediately following} note.  If the
+immediately following note does not begin a slur the command has no
+effect at all -- it is not remembered until a slur is encountered, it
+is simply discarded.  So the command with @code{\once} must be
+repositioned as follows:
+
+@cindex Slur, example of overriding
+@cindex thickness property, example
+
+@lilypond[quote,verbatim,relative=2]
+{
+  \key es \major
+  \time 6/8
+  {
+    r4 bes8
+    % Increase thickness of immediately following slur only
+    \once \override Slur.thickness = #5.0
+    bes8[( g]) g |
+    g8[( es]) es d[( f]) as |
+    as8 g
+  }
+  \addlyrics {
+    The man who | feels love's sweet e -- | mo -- tion
+  }
+}
+@end lilypond
+
+@noindent
+Now only the first slur is made heavier.
+
+The @code{\once} command can also be used before the @code{\set}
+command.
+
+@subsubsubheading Reverting
+
+@cindex revert
+@cindex default properties, reverting to
+
+@funindex \revert
+@funindex revert
+
+Finally, what if we wanted just the first two slurs to be
+heavier?  Well, we could use two commands, each preceded by
+@code{\once} placed immediately before each of the notes where
+the slurs begin:
+
+@cindex Slur, example of overriding
+@cindex thickness property, example
+
+@lilypond[quote,verbatim,relative=2]
+{
+  \key es \major
+  \time 6/8
+  {
+    r4 bes8
+    % Increase thickness of immediately following slur only
+    \once \override Slur.thickness = #5.0
+    bes[( g]) g |
+    % Increase thickness of immediately following slur only
+    \once \override Slur.thickness = #5.0
+    g8[( es]) es d[( f]) as |
+    as8 g
+  }
+  \addlyrics {
+    The man who | feels love's sweet e -- | mo -- tion
+  }
+}
+@end lilypond
+
+@noindent
+or we could omit the @code{\once} command and use the @code{\revert}
+command to return the @code{thickness} property to its default value
+after the second slur:
+
+@cindex Slur, example of overriding
+@cindex thickness property, example
+
+@lilypond[quote,verbatim,relative=2]
+{
+  \key es \major
+  \time 6/8
+  {
+    r4 bes8
+    % Increase thickness of all following slurs from 1.2 to 5.0
+    \override Slur.thickness = #5.0
+    bes[( g]) g |
+    g8[( es]) es
+    % Revert thickness of all following slurs to default of 1.2
+    \revert Slur.thickness
+    d8[( f]) as |
+    as8 g
+  }
+  \addlyrics {
+    The man who | feels love's sweet e -- | mo -- tion
+  }
+}
+@end lilypond
+
+@noindent
+The @code{\revert} command can be used to return any property
+changed with @code{\override} back to its default value.
+You may use whichever method best suits what you want to do.
+
+That concludes our introduction to the IR, and the basic
+method of tweaking.  Several examples follow in the later
+sections of this Chapter, partly to introduce you to some of the
+additional features of the IR, and partly to give you more
+practice in extracting information from it.  These examples will
+contain progressively fewer words of guidance and explanation.
+
+
+@node Properties found in interfaces
+@subsection Properties found in interfaces
+
+@cindex interface
+@cindex interface properties
+@cindex properties in interfaces
+
+Suppose now that we wish to print the lyrics in italics.  What form of
+@code{\override} command do we need to do this?  We first look in the
+IR page listing @q{All layout objects}, as before, and look for an
+object that might control lyrics.  We find @code{LyricText}, which
+looks right.  Clicking on this shows the settable properties for lyric
+text.  These include the @code{font-series} and @code{font-size}, but
+nothing that might give an italic shape.  This is because the shape
+property is one that is common to all font objects, so, rather than
+including it in every layout object, it is grouped together with other
+similar common properties and placed in an @strong{Interface}, the
+@code{font-interface}.
+
+So now we need to learn how to find the properties of interfaces,
+and to discover what objects use these interface properties.
+
+Look again at the IR page which describes LyricText.  At the bottom of
+the page is a list of clickable interfaces which LyricText supports.
+The list has several items, including @code{font-interface}.  Clicking
+on this brings up the properties associated with this interface, which
+are also properties of all the objects which support it, including
+LyricText.
+
+Now we see all the user-settable properties which control fonts,
+including @code{font-shape(symbol)}, where @code{symbol} can be
+set to @code{upright}, @code{italics} or @code{caps}.
+
+You will notice that @code{font-series} and @code{font-size} are also
+listed there.  This immediately raises the question: Why are the
+common font properties @code{font-series} and @code{font-size} listed
+under @code{LyricText} as well as under the interface
+@code{font-interface} but @code{font-shape} is not?  The answer is
+that @code{font-series} and @code{font-size} are changed from their
+global default values when a @code{LyricText} object is created, but
+@code{font-shape} is not.  The entries in @code{LyricText} then tell
+you the values for those two properties which apply to
+@code{LyricText}.  Other objects which support @code{font-interface}
+will set these properties differently when they are created.
+
+Let's see if we can now construct the @code{\override} command
+to change the lyrics to italics.  The object is @code{LyricText},
+the property is @code{font-shape} and the value is
+@code{italic}.  As before, we'll omit the context.
+
+As an aside, although it is an important one, note that some
+properties take values that are symbols, like @code{italic}, and
+must be preceded by an apostrophe, @code{'}.  Symbols are then
+read internally by LilyPond.  Note the distinction from arbitrary
+text strings, which would appear as @code{"a text string"}; for
+more details about symbols and strings, see @rextend{Scheme tutorial}.
+
+So we see that the @code{\override} command needed to print the lyrics
+in italics is:
+
+@example
+\override LyricText.font-shape = #'italic
+@end example
+
+@noindent
+This should be placed just in front of the lyrics we wish to affect,
+like so:
+
+@cindex font-shape property, example
+@cindex italic, example
+@cindex LyricText, example of overriding
+@cindex @code{\addlyrics}, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \key es \major
+  \time 6/8
+  {
+    r4 bes8 bes[( g]) g |
+    g8[( es]) es d[( f]) as |
+    as8 g
+  }
+  \addlyrics {
+    \override LyricText.font-shape = #'italic
+    The man who | feels love's sweet e -- | mo -- tion
+  }
+}
+@end lilypond
+
+@noindent
+and the lyrics are all printed in italics.
+
+@warning{In lyrics always leave whitespace between the final
+syllable and the terminating brace.}
+
+
+@seealso
+Extending: @rextend{Scheme tutorial}.
+
+
+@node Types of properties
+@subsection Types of properties
+
+@cindex property types
+
+So far we have seen two types of property: @code{number} and
+@code{symbol}.  To be valid, the value given to a property
+must be of the correct type and obey the rules for that type.
+The type of property is always shown in brackets after the
+property name in the IR.  Here is a list of the types you may
+need, together with the rules for that type, and some examples.
+You must always add a hash symbol, @code{#}, of course,
+to the front of these values when they are entered in the
+@code{\override} command, even if the value itself already
+starts with@tie{}@code{#}.  We only give examples for constants
+here: if you want to compute a value using Scheme, see
+@rextend{Calculations in Scheme}.
+
+@multitable @columnfractions .2 .45 .35
+@headitem Property type
+  @tab Rules
+  @tab Examples
+@item Boolean
+  @tab Either True or False, represented by #t or #f
+  @tab @code{#t}, @code{#f}
+@item Dimension (in staff space)
+  @tab A decimal number (in units of staff space)
+  @tab @code{2.5}, @code{0.34}
+@item Direction
+  @tab A valid direction constant or its numerical equivalent
+  (@code{0} or @code{CENTER} indicate a neutral direction)
+  @tab @code{LEFT}, @code{CENTER}, @code{UP},
+       @code{1}, @w{@code{-1}}
+@item Integer
+  @tab A whole number
+  @tab @code{3}, @code{-1}
+@item List
+  @tab A sequence of constants or symbols separated by spaces, enclosed
+  in parentheses
+and preceded by an apostrophe (quote mark)
+  @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
+       @code{'(1.0 0.25 0.5)}
+@item Markup
+  @tab Any valid markup
+  @tab @code{\markup @{ \italic "cresc." @}}, @code{"bagpipe"}
+@item Moment
+  @tab A fraction of a whole note constructed with the
+make-moment function
+  @tab @code{(ly:make-moment 1/4)},
+       @code{(ly:make-moment 3/8)}
+@item Number
+  @tab Any positive or negative, possibly decimal, value
+  @tab @code{3}, @w{@code{-2.45}}
+@item Pair (of numbers)
+  @tab Two numbers separated by a @q{space . space} and enclosed
+in brackets preceded by an apostrophe
+  @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
+@item Symbol
+  @tab Any of the set of permitted symbols for that property,
+preceded by an apostrophe
+  @tab @code{'italic}, @code{'inside}
+@item Unknown
+  @tab A procedure, or @code{#f} to cause no action
+  @tab @code{bend::print}, @code{ly:text-interface::print},
+       @code{#f}
+@item Vector
+  @tab Constants
+  enclosed in @code{#(}@dots{}@code{)}.
+  @tab @code{#(#t #t #f)}
+@end multitable
+
+
+@seealso
+Extending: @rextend{Scheme tutorial}.
+
+
+@node Appearance of objects
+@section Appearance of objects
+
+Let us now put what we have learned into practice with a few
+examples which show how tweaks may be used to change the
+appearance of the printed music.
+
+@menu
+* Visibility and color of objects::
+* Size of objects::
+* Length and thickness of objects::
+@end menu
+
+@node Visibility and color of objects
+@subsection Visibility and color of objects
+
+In the educational use of music we might wish to print a score
+with certain elements omitted as an exercise for the student,
+who is required to supply them.  As a simple example,
+let us suppose the exercise is to supply the missing bar lines
+in a piece of music.  But the bar lines are normally inserted
+automatically.  How do we prevent them printing?
+
+Before we tackle this, let us remember that object properties are
+grouped in what are called @emph{interfaces} -- see @ref{Properties
+found in interfaces}.  This is simply to group together those
+properties that may be used together to tweak a graphical object -- if
+one of them is allowed for an object, so are the others.  Some objects
+then use the properties in some interfaces, others use them from other
+interfaces.  The interfaces which contain the properties used by a
+particular grob are listed in the IR at the bottom of the page
+describing that grob, and those properties may be viewed by looking at
+those interfaces.
+
+We explained how to find information about grobs in @ref{Properties of
+layout objects}.  Using the same approach, we go to the IR to find the
+layout object which prints bar lines.  Going via @emph{Backend} and
+@emph{All layout objects} we find there is a layout object called
+@code{BarLine}.  Its properties include two that control its
+visibility: @code{break-visibility} and @code{stencil}.  Barline also
+supports a number of interfaces, including the @code{grob-interface},
+where we find the @code{transparent} and the @code{color} properties.
+All of these can affect the visibility of bar lines (and, of course,
+by extension, many other layout objects too.)  Let's consider each of
+these in turn.
+
+@menu
+* The stencil property::
+* The break-visibility property::
+* The transparent property::
+* The color property::
+@end menu
+
+@node The stencil property
+@unnumberedsubsubsec The @code{stencil} property
+
+@cindex stencil property
+
+This property controls the appearance of the bar lines by specifying
+the symbol (glyph) which should be printed.  In common
+with many other properties, it can be set to print nothing by
+setting its value to @code{#f}.  Let's try it, as before, omitting
+the implied Context, @code{Voice}:
+
+@cindex BarLine, example of overriding
+@cindex stencil property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \override BarLine.stencil = ##f
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+The bar lines are still printed.  What is wrong?  Go back to the IR
+and look again at the page giving the properties of BarLine.  At the
+top of the page it says @qq{Barline objects are created by:
+Bar_engraver}.  Go to the @code{Bar_engraver} page.  At the bottom it
+gives a list of Contexts in which the bar engraver operates.  All of
+them are of the type @code{Staff}, so the reason the @code{\override}
+command failed to work as expected is because @code{Barline} is not in
+the default @code{Voice} context.  If the context is specified
+incorrectly, the command simply does not work.  No error message is
+produced, and nothing is logged in the log file.  Let's try correcting
+it by adding the correct context:
+
+@cindex BarLine, example of overriding
+@cindex stencil property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \override Staff.BarLine.stencil = ##f
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+Now the bar lines have vanished.  Setting the @code{stencil}
+property to @code{#f} is such a frequent operation that there is a
+shorthand for it called @code{\omit}:
+@funindex \omit
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \omit Staff.BarLine
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+Note, though, that setting the @code{stencil} property to @code{#f}
+will cause errors when the dimensions of the object are required for
+correct processing.  For example, errors will be generated if the
+@code{stencil} property of the @code{NoteHead} object is set to
+@code{#f}.  If this is the case, you can instead use the
+@code{point-stencil} function, which sets the stencil to an object
+with zero size:
+
+@lilypond[quote,verbatim,relative=2]
+{
+  c4 c
+  \once \override NoteHead.stencil = #point-stencil
+  c4 c
+}
+@end lilypond
+
+@node The break-visibility property
+@unnumberedsubsubsec The @code{break-visibility} property
+
+@cindex break-visibility property
+
+We see from the @code{BarLine} properties in the IR that the
+@code{break-visibility} property requires a vector of three booleans.
+These control respectively whether bar lines are printed at the end of
+a line, in the middle of lines, and at the beginning of lines.  For
+our example we want all bar lines to be suppressed, so the value we
+need is @code{#(#f #f #f)} (also available
+under the name @code{all-invisible}).  Let's try that, remembering to include
+the @code{Staff} context.  Note also that in writing this value we
+have @code{##} before the opening parenthesis.  One @code{#} is required
+as part of vector constant syntax, and the first@tie{}@code{#} is
+required, as always, to precede the value itself in the
+@code{\override} command.
+
+@cindex BarLine, example of overriding
+@cindex break-visibility property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \override Staff.BarLine.break-visibility = ##(#f #f #f)
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+And we see this too removes all the bar lines.
+
+@node The transparent property
+@unnumberedsubsubsec The @code{transparent} property
+
+@cindex transparent property
+@cindex transparency
+
+We see from the properties specified in the @code{grob-interface} page
+in the IR that the @code{transparent} property is a boolean.  This
+should be set to @code{#t} to make the grob transparent.  In this next
+example let us make the time signature invisible rather than the bar
+lines.  To do this we need to find the grob name for the time
+signature.  Back to the @q{All layout objects} page in the IR to find
+the properties of the @code{TimeSignature} layout object.  This is
+produced by the @code{Time_signature_engraver} which you can check
+also lives in the @code{Staff} context and also supports the
+@code{grob-interface}.  So the command to make the time signature
+transparent is:
+
+@cindex TimeSignature, example of overriding
+@cindex transparent property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \override Staff.TimeSignature.transparent = ##t
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+@noindent
+Again, setting the @code{transparent} property is a rather
+frequent operation, so we have a shorthand for it called
+@code{\hide}:
+@funindex \hide
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \hide Staff.TimeSignature
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+@noindent
+In either case, the time signature is gone, but this command
+leaves a gap where
+the time signature should be.  Maybe this is what is wanted for
+an exercise for the student to fill it in, but in other
+circumstances a gap might be undesirable.  To remove it, the
+stencil for the time signature should be set to @code{#f}
+instead:
+
+@cindex TimeSignature, example of overriding
+@cindex stencil property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \omit Staff.TimeSignature
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+@noindent
+and the difference is obvious: setting the stencil to @code{#f}
+(possibly via @code{\omit})
+removes the object entirely; making the object @code{transparent}
+(which can be done using @code{\hide})
+leaves it where it is, but makes it invisible.
+
+@node The color property
+@unnumberedsubsubsec The @code{color} property
+
+@cindex color property
+
+Finally let us try making the bar lines invisible by coloring
+them white.  (There is a difficulty with this in that the
+white bar line may or may not blank out the staff lines where
+they cross.  You may see in some of the examples below that this
+happens unpredictably.  The details of why this is so and how to
+control it are covered in @ruser{Painting objects white}.  But at
+the moment we are learning about color, so please just accept this
+limitation for now.)
+
+The @code{grob-interface} specifies that the
+color property value is a list, but there is no
+explanation of what that list should be.  The list it
+requires is actually a list of values in internal units,
+but, to avoid having to know what these are, several ways
+are provided to specify colors.  The first way is to use one
+of the @q{normal} colors listed in the first table in
+@ruser{List of colors}.  To set the bar lines to white
+we write:
+
+@cindex BarLine, example of overriding
+@cindex color property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \override Staff.BarLine.color = #white
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+@noindent
+and again, we see the bar lines are not visible.  Note that
+@emph{white} is not preceded by an apostrophe -- it is not
+a symbol, but a @emph{variable}.  When evaluated, it provides
+the list of internal values required to set the color to
+white.  The other colors in the normal list are variables
+too.  To convince yourself this is working you might like
+to change the color to one of the other variables in the
+list.
+
+@cindex color, X11
+@cindex X11 colors
+
+@funindex x11-color
+
+The second way of changing the color is to use the list of
+X11 color names in the second list in @ruser{List of colors}.
+However, these are mapped to the actual values by the function
+@code{x11-color} which
+converts X11 color symbols into the list of internal values like this:
+
+@cindex BarLine, example of overriding
+@cindex color property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \override Staff.BarLine.color = #(x11-color 'white)
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+@noindent
+Note that in this case the function @code{x11-color} takes
+a symbol as an argument, so the symbol must be preceded by
+an apostrophe to keep it from being evaluated as a variable, and
+the whole function call has to be enclosed in parentheses.
+
+@cindex rgb colors
+@cindex color, rgb
+
+@funindex rgb-color
+
+There is another function, one which converts RGB values into
+internal colors -- the @code{rgb-color} function.  This takes
+three arguments giving the intensities of the red, green and
+blue colors.  These take values in the range 0 to 1.  So to
+set the color to red the value should be @code{(rgb-color 1 0 0)}
+and to white it should be @code{(rgb-color 1 1 1)}:
+
+@cindex BarLine, example of overriding
+@cindex color property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \override Staff.BarLine.color = #(rgb-color 1 1 1)
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+Finally, there is also a grey scale available as part of the
+X11 set of colors.  These range from black, @code{'grey0},
+to white, @code{'grey100}, in steps of 1.  Let's illustrate
+this by setting all the layout objects in our example to
+various shades of grey:
+
+@cindex StaffSymbol, example of overriding
+@cindex TimeSignature, example of overriding
+@cindex Clef, example of overriding
+@cindex NoteHead, example of overriding
+@cindex Stem, example of overriding
+@cindex BarLine, example of overriding
+@cindex color property, example
+@cindex x11-color, example of using
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+{
+  \time 12/16
+  \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+  \override Staff.TimeSignature.color = #(x11-color 'grey60)
+  \override Staff.Clef.color = #(x11-color 'grey60)
+  \override Voice.NoteHead.color = #(x11-color 'grey85)
+  \override Voice.Stem.color = #(x11-color 'grey85)
+  \override Staff.BarLine.color = #(x11-color 'grey10)
+  c4 b8 c d16 c d8 |
+  g,8 a16 b8 c d4 e16 |
+  e8
+}
+@end lilypond
+
+@noindent
+Note the contexts associated with each of the layout objects.
+It is important to get these right, or the commands will not
+work!  Remember, the context is the one in which the appropriate
+engraver is placed.  The default context for engravers can be
+found by starting from the layout object, going from there to
+the engraver which produces it, and on the engraver page in the
+IR it tells you in which context the engraver will normally be
+found.
+
+
+@node Size of objects
+@subsection Size of objects
+
+@cindex changing size of objects
+@cindex size of objects
+@cindex objects, size of
+@cindex objects, changing size of
+
+Let us begin by looking again at the earlier example
+(see @ref{Nesting music expressions}) which showed
+how to introduce a new temporary staff, as in an @rglos{ossia}.
+
+@cindex alignAboveContext property, example
+@cindex @code{\with}, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+  \relative g' {
+    r4 g8 g c4 c8 d |
+    e4 r8
+    <<
+      { f8 c c }
+      \new Staff \with {
+        alignAboveContext = #"main" }
+      { f8 f c }
+    >>
+    r4 |
+  }
+}
+@end lilypond
+
+Ossia are normally written without clef and time signature, and
+are usually printed slightly smaller than the main staff.  We
+already know now how to remove the clef and time signature --
+we simply set the stencil of each to @code{#f}, as follows:
+
+@cindex alignAboveContext property, example
+@cindex @code{\with}, example
+@funindex \omit
+@cindex Clef, example of overriding
+@cindex TimeSignature, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+  \relative g' {
+    r4 g8 g c4 c8 d |
+    e4 r8
+    <<
+      { f8 c c }
+      \new Staff \with {
+        alignAboveContext = #"main"
+      }
+      {
+        \omit Staff.Clef
+        \omit Staff.TimeSignature
+        { f8 f c }
+      }
+    >>
+    r4 |
+  }
+}
+@end lilypond
+
+@noindent
+where the extra pair of braces after the @code{\with} clause are
+required to ensure the enclosed overrides and music are applied
+to the ossia staff.
+
+But what is the difference between modifying the staff context by
+using @code{\with} and modifying the stencils of the clef and the
+time signature with @code{\override}, or in this case
+@code{\omit}?
+The main difference is that
+changes made in a @code{\with} clause are made at the time the
+context is created, and remain in force as the @strong{default}
+values for the duration of that context, whereas
+@code{\set} or @code{\override} commands embedded in the
+music are dynamic -- they make changes synchronized with
+a particular point in the music.  If changes are unset or
+reverted using @code{\unset} or @code{\revert} they return to
+their default values, which will be the ones set in the
+@code{\with} clause, or if none have been set there, the normal
+default values.
+
+Some context properties can be modified only in @code{\with} clauses.
+These are those properties which cannot sensibly be changed after the
+context has been created.  @code{alignAboveContext} and its partner,
+@code{alignBelowContext}, are two such properties -- once the staff
+has been created its alignment is decided and it would make no sense
+to try to change it later.
+
+The default values of layout object properties can also be set
+in @code{\with} clauses.  Simply use the normal @code{\override}
+command leaving out the context name, since this is unambiguously
+defined as the context which the @code{\with} clause is modifying.
+If fact, an error will be generated if a context is specified
+in this location.
+
+So we could replace the example above with
+
+@cindex alignAboveContext property, example
+@cindex @code{\with}, example
+@cindex Clef, example of overriding
+@cindex TimeSignature, example of overriding
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+  \relative g' {
+    r4 g8 g c4 c8 d |
+    e4 r8
+    <<
+      { f8 c c }
+      \new Staff \with {
+        alignAboveContext = #"main"
+        % Don't print clefs in this staff
+        \override Clef.stencil = ##f
+        % Don't print time signatures in this staff
+        \override TimeSignature.stencil = ##f
+      }
+      { f8 f c }
+    >>
+    r4 |
+  }
+}
+@end lilypond
+
+It turns out that we can also employ the shorthands @code{\hide}
+and @code{\omit} for setting the @code{transparent} property and
+clearing the @code{stencil} here, leading to the result
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+  \relative g' {
+    r4 g8 g c4 c8 d |
+    e4 r8
+    <<
+      { f8 c c }
+      \new Staff \with {
+        alignAboveContext = #"main"
+        % Don't print clefs in this staff
+        \omit Clef
+        % Don't print time signatures in this staff
+        \omit TimeSignature
+      }
+      { f8 f c }
+    >>
+    r4 |
+  }
+}
+@end lilypond
+
+Finally we come to changing the size of layout objects.
+
+Some layout objects are created as glyphs selected from a typeface
+font.  These include note heads, accidentals, markup, clefs, time
+signatures, dynamics and lyrics.  Their size is changed by modifying
+the @code{font-size} property, as we shall shortly see.  Other layout
+objects such as slurs and ties -- in general, spanner objects -- are
+drawn individually, so there is no @code{font-size} associated with
+them.  These objects generally derive their size from the objects to
+which they are attached, so usually there is no need to change their
+size manually.  Still other properties such as the length of stems and
+bar lines, thickness of beams and other lines, and the separation of
+staff lines all need to be modified in special ways.
+
+Returning to the ossia example, let us first change the font-size.
+We can do this in two ways.  We can either change the size of the
+fonts of each object type, like @code{NoteHead}s with commands
+like
+
+@example
+\override NoteHead.font-size = #-2
+@end example
+
+or we can change the size of all fonts by setting a special
+property, @code{fontSize}, using @code{\set}, or by including
+it in a @code{\with} clause (but without the @code{\set}).
+
+@example
+\set fontSize = #-2
+@end example
+
+Both of these statements would cause the font size to be reduced
+by 2 steps from its previous value, where each
+step reduces or increases the size by approximately 12%.
+
+Let's try it in our ossia example:
+
+@cindex alignAboveContext property, example
+@cindex @code{\with}, example
+@cindex Clef, example of overriding
+@cindex TimeSignature, example of overriding
+@cindex fontSize property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+  \relative g' {
+    r4 g8 g c4 c8 d |
+    e4 r8
+    <<
+      { f8 c c }
+      \new Staff \with {
+        alignAboveContext = #"main"
+        \omit Clef
+        \omit TimeSignature
+        % Reduce all font sizes by ~24%
+        fontSize = #-2
+      }
+      { f8 f c }
+    >>
+    r4 |
+  }
+}
+@end lilypond
+
+This is still not quite right.  The note heads and flags are
+smaller, but the stems are too long in proportion and the
+staff lines are spaced too widely apart.  These need to be
+scaled down in proportion to the font reduction.  The next
+sub-section discusses how this is done.
+
+@node Length and thickness of objects
+@subsection Length and thickness of objects
+
+@cindex distances
+@cindex thickness
+@cindex length
+@cindex magstep
+@cindex size, changing
+@cindex stem length, changing
+@cindex staff line spacing, changing
+
+Distances and lengths in LilyPond are generally measured in
+staff-spaces, the distance between adjacent lines in the staff,
+(or occasionally half staff spaces) while most @code{thickness}
+properties are measured in units of an internal property called
+@code{line-thickness.}  For example, by default, the lines of
+hairpins are given a thickness of 1 unit of @code{line-thickness},
+while the @code{thickness} of a note stem is 1.3.  Note, though,
+that some thickness properties are different; for example, the
+thickness of beams is controlled by the value of the
+@code{beam-thickness} property, which is measured in staff-spaces.
+
+So how are lengths to be scaled in proportion to the font size?
+This can be done with the help of a special function called
+@code{magstep} provided for exactly this purpose.  It takes
+one argument, the change in font size (#-2 in the example above)
+and returns a scaling factor suitable for reducing other
+objects in proportion.  It is used like this:
+
+@cindex alignAboveContext property, example
+@cindex @code{\with}, example
+@cindex Clef, example of overriding
+@cindex TimeSignature, example of overriding
+@cindex fontSize property, example
+@cindex StaffSymbol, example of overriding
+@cindex magstep function, example of using
+@cindex staff-space property, example
+@cindex stencil property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\new Staff ="main" {
+  \relative g' {
+    r4 g8 g c4 c8 d |
+    e4 r8
+    <<
+      { f8 c c }
+      \new Staff \with {
+        alignAboveContext = #"main"
+        \omit Clef
+        \omit TimeSignature
+        fontSize = #-2
+        % Reduce stem length and line spacing to match
+        \override StaffSymbol.staff-space = #(magstep -2)
+      }
+      { f8 f c }
+    >>
+    r4 |
+  }
+}
+@end lilypond
+
+@noindent
+Since the length of stems and many other length-related properties are
+always calculated relative to the value of the @code{staff-space}
+property these are automatically scaled down in length too.  Note that
+this affects only the vertical scale of the ossia -- the horizontal
+scale is determined by the layout of the main music in order to remain
+synchronized with it, so it is not affected by any of these changes in
+size.  Of course, if the scale of all the main music were changed in
+this way then the horizontal spacing would be affected.  This is
+discussed later in the layout section.
+
+This, then, completes the creation of an ossia.  The sizes and
+lengths of all other objects may be modified in analogous ways.
+
+For small changes in scale, as in the example above, the
+thickness of the various drawn lines such as bar lines,
+beams, hairpins, slurs, etc does not usually require global
+adjustment.  If the thickness of any particular layout object
+needs to be adjusted this can be best achieved by overriding its
+@code{thickness} property.  An example of changing the thickness
+of slurs was shown above in @ref{Properties of layout objects}.
+The thickness of all drawn objects (i.e., those not produced
+from a font) may be changed in the same way.
+
+
+@node Placement of objects
+@section Placement of objects
+
+@menu
+* Automatic behavior::
+* Within-staff objects::
+* Outside-staff objects::
+@end menu
+
+
+@node Automatic behavior
+@subsection Automatic behavior
+
+@cindex within-staff objects
+@cindex outside-staff objects
+@cindex objects, within-staff
+@cindex objects, outside-staff
+
+There are some objects in musical notation that belong to
+the staff and there are other objects that should be
+placed outside the staff.  These are called within-staff
+objects and outside-staff objects respectively.
+
+Within-staff objects are those that are located on the staff
+-- note heads, stems, accidentals, etc.  The positions of
+these are usually fixed by the music itself -- they are
+vertically positioned on specific lines of the staff or are
+tied to other objects that are so positioned.  Collisions of
+note heads, stems and accidentals in closely set chords are
+normally avoided automatically.  There are commands and
+overrides which can modify this automatic behavior, as we
+shall shortly see.
+
+Objects belonging outside the staff include things such as
+rehearsal marks, text and dynamic markings.  LilyPond's rule for
+the vertical placement of outside-staff objects is to place them
+as close to the staff as possible but not so close that they
+collide with any other object.  LilyPond uses the
+@code{outside-staff-priority} property to determine the order in
+which the objects should be placed, as follows.
+
+First, LilyPond places all the within-staff objects.
+Then it sorts the outside-staff objects according to their
+@code{outside-staff-priority}.  The outside-staff objects are
+taken one by one, beginning with the object with the lowest
+@code{outside-staff-priority}, and placed so that they do not
+collide with any objects that have already been placed.  That is,
+if two outside-staff grobs are competing for the same space, the
+one with the lower @code{outside-staff-priority} will be placed
+closer to the staff.  If two objects have the same
+@code{outside-staff-priority} the one encountered first will be
+placed closer to the staff.
+
+In the following example all the markup texts have the same
+priority (since it is not explicitly set).  Note that @q{Text3}
+is automatically positioned close to the staff again, nestling
+under @q{Text2}.
+
+@cindex markup example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+c2^"Text1"
+c2^"Text2" |
+c2^"Text3"
+c2^"Text4" |
+@end lilypond
+
+Staves are also positioned, by default, as closely together as
+possible (subject to a minimum separation).  If notes project
+a long way towards an adjacent staff they will force the
+staves further apart only if an overlap of the notation
+would otherwise occur.  The following example demonstrates
+this @q{nestling} of the notes on adjacent staves:
+
+@lilypond[quote,ragged-right,verbatim]
+<<
+  \new Staff {
+    \relative c' { c4 a, }
+  }
+  \new Staff {
+    \relative c'''' { c4 a, }
+  }
+>>
+@end lilypond
+
+
+@node Within-staff objects
+@subsection Within-staff objects
+
+We have already seen how the commands @code{\voiceXXX} affect the
+direction of slurs, ties, fingering and everything else which depends on
+the direction of the stems -- see @ref{Explicitly instantiating voices}.
+These commands are essential when writing polyphonic music to permit
+interweaving melodic lines to be distinguished.  But occasionally it may
+be necessary to override this automatic behavior.  This can be done for
+whole sections of music or even for an individual note.  The property
+which controls this behavior is the @code{direction} property of each
+layout object.  We first explain what this does, and then introduce a
+number of ready-made commands which avoid your having to code explicit
+overrides for the more common modifications.
+
+Some layout objects like slurs and ties curve, bend or point
+either up or down; others like stems and flags also move to
+right or left when they point up or down.  This is controlled
+automatically when @code{direction} is set.
+
+@menu
+* The direction property::
+* Fingering::
+@end menu
+
+@node The direction property
+@unnumberedsubsubsec The @code{direction} property
+
+@cindex down
+@cindex up
+@cindex center
+@cindex neutral
+
+The following example shows in bar 1 the default behavior of stems,
+with those on high notes pointing down and those on low notes pointing
+up, followed by four notes with all stems forced down, four notes with
+all stems forced up, and finally four notes reverted back to the
+default behavior.
+
+@cindex Stem, example of overriding
+@cindex direction property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+a4 g c a |
+\override Stem.direction = #DOWN
+a4 g c a |
+\override Stem.direction = #UP
+a4 g c a |
+\revert Stem.direction
+a4 g c a |
+@end lilypond
+
+Here we use the constants @code{DOWN} and @code{UP}.
+These have the values @w{@code{-1}} and @code{+1} respectively, and
+these numerical values may be used instead.  The value @code{0}
+may also be used in some cases.  It is simply treated as meaning
+@code{UP} for stems, but for some objects it means @q{center}.
+There is a constant, @code{CENTER} which has the value @code{0}.
+
+However, these explicit overrides are not usually used, as there are
+simpler equivalent predefined commands available.  Here is a table of
+the commonest.  The meaning of each is stated where it is not obvious.
+
+@multitable @columnfractions .2 .2 .25 .35
+@headitem Down/Left
+  @tab Up/Right
+  @tab Revert
+  @tab Effect
+@item @code{\arpeggioArrowDown}
+  @tab @code{\arpeggioArrowUp}
+  @tab @code{\arpeggioNormal}
+  @tab Arrow is at bottom, at top, or no arrow
+@item @code{\dotsDown}
+  @tab @code{\dotsUp}
+  @tab @code{\dotsNeutral}
+  @tab Direction of movement to avoid staff lines
+@item @code{\dynamicDown}
+  @tab @code{\dynamicUp}
+  @tab @code{\dynamicNeutral}
+  @tab
+@item @code{\phrasingSlurDown}
+  @tab @code{\phrasingSlurUp}
+  @tab @code{\phrasingSlurNeutral}
+  @tab Note: distinct from slur commands
+@item @code{\slurDown}
+  @tab @code{\slurUp}
+  @tab @code{\slurNeutral}
+  @tab
+@item @code{\stemDown}
+  @tab @code{\stemUp}
+  @tab @code{\stemNeutral}
+  @tab
+@item @code{\textSpannerDown}
+  @tab @code{\textSpannerUp}
+  @tab @code{\textSpannerNeutral}
+  @tab Text entered as spanner is below/above staff
+@item @code{\tieDown}
+  @tab @code{\tieUp}
+  @tab @code{\tieNeutral}
+  @tab
+@item @code{\tupletDown}
+  @tab @code{\tupletUp}
+  @tab @code{\tupletNeutral}
+  @tab Tuplets are below/above notes
+@end multitable
+
+The neutral/normal variants of these commands are implemented
+using @code{\revert} and may @strong{not} be
+preceded by @code{\once}.  If you wish to limit the
+effect of the other commands (which are implemented using
+@code{\override}) to a single timestep, you can precede them with
+@code{\once} like you would do with explicit overrides.
+
+@node Fingering
+@unnumberedsubsubsec Fingering
+
+@cindex fingering, placement
+@cindex fingering, chords
+
+The placement of fingering on single notes can also be controlled
+by the @code{direction} property, but changing @code{direction}
+has no effect on chords.  As we shall see, there are special
+commands which allow the fingering of individual notes
+of chords to be controlled, with the fingering being placed
+above, below, to the left or to the right of each note.
+
+First, here's the effect of @code{direction} on the fingering
+attached to single notes.  The first bar shows the default
+behaviour, and the following two bars shows the effect of
+specifying @code{DOWN} and @code{UP}:
+
+@cindex Fingering, example of overriding
+@cindex direction property, example
+
+@lilypond[quote,verbatim,relative=2]
+c4-5 a-3 f-1 c'-5 |
+\override Fingering.direction = #DOWN
+c4-5 a-3 f-1 c'-5 |
+\override Fingering.direction = #UP
+c4-5 a-3 f-1 c'-5 |
+@end lilypond
+
+However, overriding the @code{direction} property is not the
+easiest way of manually setting the fingering above or below
+the notes; using @code{_} or @code{^} instead of @code{-} before
+the fingering number is usually preferable.  Here is the previous
+example using this method:
+
+@cindex fingering example
+
+@lilypond[quote,verbatim,relative=2]
+c4-5 a-3 f-1 c'-5 |
+c4_5 a_3 f_1 c'_5 |
+c4^5 a^3 f^1 c'^5 |
+@end lilypond
+
+The @code{direction} property is ignored for chords, but the
+directional prefixes, @code{_} and @code{^} do work.  By default,
+the fingering is automatically placed both above and below the
+notes of a chord, as shown:
+
+@cindex fingering example
+
+@lilypond[quote,verbatim,relative=2]
+<c-5 g-3>4
+<c-5 g-3 e-2>4
+<c-5 g-3 e-2 c-1>4
+@end lilypond
+
+@noindent
+but this may be overridden to manually force all or any of the
+individual fingering numbers above or below:
+
+@cindex fingering example
+
+@lilypond[quote,verbatim,relative=2]
+<c-5 g-3 e-2 c-1>4
+<c^5 g_3 e_2 c_1>4
+<c^5 g^3 e^2 c_1>4
+@end lilypond
+
+Even greater control over the placement of fingering of the
+individual notes in a chord is possible by using the
+@code{\set fingeringOrientations} command.  The format of this
+command is:
+
+@example
+@code{\set fingeringOrientations = #'([up] [left/right] [down])}
+@end example
+
+@noindent
+@code{\set} is used because @code{fingeringOrientations} is a
+property of the @code{Voice} context, created and used by the
+@code{New_fingering_engraver}.
+
+The property may be set to a list of one to three values.
+It controls whether fingerings may be placed above (if
+@code{up} appears in the list), below (if @code{down} appears),
+to the left (if @code{left} appears, or to the right
+(if @code{right} appears).  Conversely, if a location is not
+listed, no fingering is placed there.  LilyPond takes these
+constraints and works out the best placement for the fingering
+of the notes of the following chords.  Note that @code{left} and
+@code{right} are mutually exclusive -- fingering may be placed
+only on one side or the other, not both.
+
+@warning{To control the placement of the fingering of a single
+note using this command it is necessary to write it as a single
+note chord by placing angle brackets round it.}
+
+Here are a few examples:
+
+@cindex fingering example
+@cindex @code{\set}, example of using
+@cindex fingeringOrientations property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\set fingeringOrientations = #'(left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+\set fingeringOrientations = #'(left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4 |
+\set fingeringOrientations = #'(up left down)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+\set fingeringOrientations = #'(up left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4 |
+\set fingeringOrientations = #'(right)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+@end lilypond
+
+@noindent
+If the fingering seems a little crowded the @code{font-size}
+could be reduced.  The default value can be seen from the
+@code{Fingering} object in the IR to be @w{@code{-5}}, so let's
+try @w{@code{-7}}:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\override Fingering.font-size = #-7
+\set fingeringOrientations = #'(left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+\set fingeringOrientations = #'(left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4 |
+\set fingeringOrientations = #'(up left down)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+\set fingeringOrientations = #'(up left)
+<f-2>4
+<c-1 e-2 g-3 b-5>4 |
+\set fingeringOrientations = #'(right)
+<f-2>4
+<c-1 e-2 g-3 b-5>4
+@end lilypond
+
+@node Outside-staff objects
+@subsection Outside-staff objects
+
+Outside-staff objects are automatically placed to avoid collisions.
+There are several ways to override the automatic placement if the
+positioning is not optimum.
+
+@menu
+* The outside-staff-priority property::
+* The \textLengthOn command::
+* Dynamics placement::
+* Grob sizing::
+@end menu
+
+
+@node The outside-staff-priority property
+@unnumberedsubsubsec The @code{outside-staff-priority} property
+
+Objects with the lower value of the @code{outside-staff-priority}
+property are placed nearer to the staff, and other outside-staff
+objects are then raised as far as necessary to avoid collisions.
+The @code{outside-staff-priority} is defined in the
+@code{grob-interface} and so is a property of all layout objects.
+By default it is set to @code{#f} for all within-staff objects,
+and to a numerical value appropriate to each outside-staff object
+when the object is created.  The following table shows the default
+numerical values for some of the commonest outside-staff objects.
+
+@cindex spanners
+
+Note the unusual names for some of the objects: spanner objects
+are automatically created to control the vertical positioning of
+grobs which (might) start and end at different musical moments, so
+changing the @code{outside-staff-priority} of the underlying grob
+will have no effect.  For example, changing
+@code{outside-staff-priority} of the @code{Hairpin} object will
+have no effect on the vertical positioning of hairpins -- you must
+change @code{outside-staff-priority} of the associated
+@code{DynamicLineSpanner} object instead.  This override must be
+placed at the start of the spanner, which might include several
+linked hairpins and dynamics.
+
+@multitable @columnfractions .3 .3 .3
+@headitem Layout Object
+  @tab Priority
+  @tab Controls position of:
+@item @code{RehearsalMark}
+  @tab @code{1500}
+  @tab Rehearsal marks
+@item @code{MetronomeMark}
+  @tab @code{1000}
+  @tab Metronome marks
+@item @code{VoltaBracketSpanner}
+  @tab @code{600}
+  @tab Volta brackets
+@item @code{TextScript}
+  @tab @code{450}
+  @tab Markup text
+@item @code{MultiMeasureRestText}
+  @tab @code{450}
+  @tab Markup text over full-bar rests
+@item @code{OttavaBracket}
+  @tab @code{400}
+  @tab Ottava brackets
+@item @code{TextSpanner}
+  @tab @code{350}
+  @tab Text spanners
+@item @code{DynamicLineSpanner}
+  @tab @code{250}
+  @tab All dynamic markings
+@item @code{BarNumber}
+  @tab @code{ 100}
+  @tab Bar numbers
+@item @code{TrillSpanner}
+  @tab @code{50}
+  @tab Spanning trills
+@end multitable
+
+Here is an example showing the default placement of some of
+these.
+
+@cindex text spanner
+@cindex ottava bracket
+
+@funindex \startTextSpan
+@funindex startTextSpan
+@funindex \stopTextSpan
+@funindex stopTextSpan
+
+@cindex TextSpanner, example of overriding
+@cindex bound-details property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+% Set details for later Text Spanner
+\override TextSpanner.bound-details.left.text
+    = \markup { \small \bold Slower }
+% Place dynamics above staff
+\dynamicUp
+% Start Ottava Bracket
+\ottava #1
+c'4 \startTextSpan
+% Add Dynamic Text and hairpin
+c4\pp\<
+c4
+% Add Text Script
+c4^Text |
+c4 c
+% Add Dynamic Text and terminate hairpin
+c4\ff c \stopTextSpan |
+% Stop Ottava Bracket
+\ottava #0
+c,4 c c c |
+@end lilypond
+
+This example also shows how to create Text Spanners --
+text with extender lines above a section of music.  The
+spanner extends from the @code{\startTextSpan} command to
+the @code{\stopTextSpan} command, and the format of the
+text is defined by the @code{\override TextSpanner} command.
+For more details see @ruser{Text spanners}.
+
+It also shows how ottava brackets are created.
+
+@cindex tweaking bar number placement
+@cindex bar numbers, tweaking placement
+@cindex tweaking metronome mark placement
+@cindex metronome mark, tweaking placement
+@cindex tweaking rehearsal mark placement
+@cindex rehearsal marks, tweaking placement
+
+If the default values of @code{outside-staff-priority} do not give you
+the placing you want, the priority of any of the objects may be
+overridden.  Suppose we would like the ottava bracket to be placed
+below the text spanner in the example above.  All we need to do is to
+look up the priority of @code{OttavaBracket} in the IR or in the
+tables above, and reduce it to a value lower than that of a
+@code{TextSpanner}, remembering that @code{OttavaBracket} is created
+in the @code{Staff} context:
+
+@cindex TextSpanner, example of overriding
+@cindex bound-details property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+% Set details for later Text Spanner
+\override TextSpanner.bound-details.left.text
+    = \markup { \small \bold Slower }
+% Place dynamics above staff
+\dynamicUp
+% Place following Ottava Bracket below Text Spanners
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
+% Start Ottava Bracket
+\ottava #1
+c'4 \startTextSpan
+% Add Dynamic Text
+c4\pp
+% Add Dynamic Line Spanner
+c4\<
+% Add Text Script
+c4^Text |
+c4 c
+% Add Dynamic Text
+c4\ff c \stopTextSpan |
+% Stop Ottava Bracket
+\ottava #0
+c,4 c c c |
+@end lilypond
+
+Note that some of these objects, in particular bar numbers,
+metronome marks and rehearsal marks, live by default in the
+@code{Score} context, so be sure to use the correct context
+when these are being overriden.
+
+@cindex slurs and outside-staff-priority
+@cindex slurs and articulations
+@cindex articulations and slurs
+
+Slurs by default are classed as within-staff objects, but
+they often appear above the staff if the notes to
+which they are attached are high on the staff.  This can push
+outside-staff objects such as articulations too high, as the slur
+will be placed first.  The @code{avoid-slur} property of the
+articulation can be set to @code{'inside} to bring the articulation
+inside the slur, but the @code{avoid-slur} property is effective
+only if the @code{outside-staff-priority} is also set to @code{#f}.
+Alternatively, the @code{outside-staff-priority} of the slur
+can be set to a numerical value to cause it to be placed along with
+other outside-staff objects according to that value.  Here's an
+example showing the effect of the two methods:
+
+@lilypond[quote,verbatim,relative=2]
+c4( c^\markup { \tiny \sharp } d4.) c8 |
+c4(
+\once \override TextScript.avoid-slur = #'inside
+\once \override TextScript.outside-staff-priority = ##f
+c4^\markup { \tiny \sharp } d4.) c8 |
+\once \override Slur.outside-staff-priority = #500
+c4( c^\markup { \tiny \sharp } d4.) c8 |
+@end lilypond
+
+Changing the @code{outside-staff-priority} can also be used to
+control the vertical placement of individual objects, although
+the results may not always be desirable.  Suppose we would
+like @qq{Text3} to be placed above @qq{Text4} in the example
+under Automatic behavior, above (see @ref{Automatic behavior}).
+All we need to do is to look up the priority of @code{TextScript}
+in the IR or in the tables above, and increase the priority of
+@qq{Text3} to a higher value:
+
+@cindex TextScript, example of overriding
+@cindex outside-staff-priority property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+c2^"Text1"
+c2^"Text2" |
+\once \override TextScript.outside-staff-priority = #500
+c2^"Text3"
+c2^"Text4" |
+@end lilypond
+
+This certainly lifts @qq{Text3} above @qq{Text4} but it also lifts it
+above @qq{Text2}, and @qq{Text4} now drops down.  Perhaps this is not
+so good.  What we would really like to do is to position all the
+annotation at the same distance above the staff.  To do this, we
+clearly will need to space the notes out horizontally to make more
+room for the text.  This is done using the @code{textLengthOn}
+command.
+
+@node The \textLengthOn command
+@unnumberedsubsubsec The @code{\textLengthOn} command
+
+@cindex notes, spreading out with text
+
+@funindex \textLengthOn
+@funindex textLengthOn
+@funindex \textLengthOff
+@funindex textLengthOff
+
+By default, text produced by markup takes up no horizontal space
+as far as laying out the music is concerned.  The @code{\textLengthOn}
+command reverses this behavior, causing the notes to be spaced
+out as far as is necessary to accommodate the text:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\textLengthOn  % Cause notes to space out to accommodate text
+c2^"Text1"
+c2^"Text2" |
+c2^"Text3"
+c2^"Text4" |
+@end lilypond
+
+The command to revert to the default behavior is
+@code{\textLengthOff}.  Remember @code{\once} only works with
+@code{\override}, @code{\set}, @code{\revert} or @code{\unset},
+so cannot be used with @code{\textLengthOn}.
+
+@cindex markup text, allowing collisions
+
+Markup text will also avoid notes which project above the staff.
+If this is not desired, the automatic displacement upwards may
+be turned off by setting the priority to @code{#f}.  Here's an
+example to show how markup text interacts with such notes.
+
+@cindex TextScript, example of overriding
+@cindex outside-staff-priority property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+% This markup is short enough to fit without collision
+c2^"Tex" c'' |
+R1 |
+
+% This is too long to fit, so it is displaced upwards
+c,,2^"Text" c'' |
+R1 |
+
+% Turn off collision avoidance
+\once \override TextScript.outside-staff-priority = ##f
+c,,2^"Long Text   " c'' |
+R1 |
+
+% Turn off collision avoidance
+\once \override TextScript.outside-staff-priority = ##f
+\textLengthOn        % and turn on textLengthOn
+c,,2^"Long Text   "  % Spaces at end are honored
+c''2 |
+@end lilypond
+
+@node Dynamics placement
+@unnumberedsubsubsec Dynamics placement
+
+@cindex tweaking dynamics placement
+@cindex dynamics, tweaking placement
+
+Dynamic markings will normally be positioned beneath the
+staff, but may be positioned above with the @code{\dynamicUp}
+command.  They will be positioned vertically relative to the
+note to which they are attached, and will float below (or above)
+all within-staff objects such as phrasing slurs and bar numbers.
+This can give quite acceptable results, as this example
+shows:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\clef "bass"
+\key aes \major
+\time 9/8
+\dynamicUp
+bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
+ees,2.~\)\mf ees4 r8 |
+@end lilypond
+
+However, if the notes and attached dynamics are close
+together the automatic placement will avoid collisions
+by displacing later dynamic markings further away, but this may
+not be the optimum placement, as this rather artificial example
+shows:
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\dynamicUp
+a4\f b\mf c\mp b\p
+@end lilypond
+
+@noindent
+Should a similar situation arise in @q{real} music, it may be
+preferable to space out the notes a little further, so the dynamic
+markings can all fit at the same vertical distance from the staff.  We
+were able to do this for markup text by using the @code{\textLengthOn}
+command, but there is no equivalent command for dynamic marks.  So we
+shall have to work out how to do this using @code{\override} commands.
+
+@node Grob sizing
+@unnumberedsubsubsec Grob sizing
+
+@cindex grob sizing
+@cindex sizing grobs
+
+First we must learn how grobs are sized.  All grobs have a
+reference point defined within them which is used to position
+them relative to their parent object.  This point in the grob
+is then positioned at a horizontal distance, @code{X-offset},
+and at a vertical distance, @code{Y-offset}, from its parent.
+The horizontal extent of the object is given by a pair of
+numbers, @code{X-extent}, which say where the left and right
+edges are relative to the reference point.  The vertical extent
+is similarly defined by a pair of numbers, @code{Y-extent}.
+These are properties of all grobs which support the
+@code{grob-interface}.
+
+@cindex @code{extra-spacing-width}
+
+By default, outside-staff objects are given a width of zero so
+that they may overlap in the horizontal direction.  This is done
+by the trick of adding infinity to the leftmost extent and
+minus infinity to the rightmost extent by setting the
+@code{extra-spacing-width} to @code{'(+inf.0 . -inf.0)}.  So
+to ensure they do not overlap in the horizontal direction we
+must override this value of @code{extra-spacing-width} to
+@code{'(0 . 0)} so the true width shines through.  This is
+the command to do this for dynamic text:
+
+@example
+\override DynamicText.extra-spacing-width = #'(0 . 0)
+@end example
+
+@noindent
+Let's see if this works in our previous example:
+
+@cindex DynamicText, example of overriding
+@cindex extra-spacing-width property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\dynamicUp
+\override DynamicText.extra-spacing-width = #'(0 . 0)
+a4\f b\mf c\mp b\p |
+@end lilypond
+
+@noindent
+Well, it has certainly stopped the dynamic marks being
+displaced, but two problems remain.  The marks should be
+spaced a little further apart and it would be better
+if they were all the same distance from the staff.
+We can solve the first problem easily.  Instead of making
+the @code{extra-spacing-width} zero we could add a little
+more to it.  The units are the space between two staff
+lines, so moving the left edge half a unit to the left and the
+right edge half a unit to the right should do it:
+
+@cindex DynamicText, example of overriding
+@cindex extra-spacing-width property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\dynamicUp
+% Extend width by 1 staff space
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
+a4\f b\mf c\mp b\p
+@end lilypond
+
+@noindent
+This looks better, but maybe we would prefer the dynamic marks
+to be aligned along the same baseline rather than going up and
+down with the notes.  The property to do this is
+@code{staff-padding} which is covered in the following section.
+
+
+@node Collisions of objects
+@section Collisions of objects
+
+@menu
+* Moving objects::
+* Fixing overlapping notation::
+* Real music example::
+@end menu
+
+@node Moving objects
+@subsection Moving objects
+
+@cindex moving overlapping objects
+@cindex moving colliding objects
+@cindex moving colliding grobs
+@cindex objects, moving colliding
+@cindex grobs, moving colliding
+
+This may come as a surprise, but LilyPond is not perfect.  Some
+notation elements can overlap.  This is unfortunate, but in fact
+rather rare.  Usually the need to move objects is for clarity or
+aesthetic reasons -- they would look better with a little more
+or a little less space around them.
+
+There are three main approaches to resolving overlapping
+notation.  They should be considered in the following order:
+
+@enumerate
+@item
+The @strong{direction} of one of the overlapping objects may
+be changed using the predefined commands listed above for
+within-staff objects (see @ref{Within-staff objects}).
+Stems, slurs, beams, ties, dynamics, text and tuplets may be
+repositioned easily in this way.  The limitation is that you
+have a choice of only two positions, and neither may be
+suitable.
+
+@item
+The @strong{object properties}, which LilyPond uses when positioning
+layout objects, may be modified using @code{\override}.  The
+advantages of making changes to this type of property are (a) that
+some other objects will be moved automatically if necessary to make
+room and (b) the single override can apply to all instances of the
+same type of object.  Such properties include:
+
+@itemize
+
+@item
+@code{direction}
+
+This has already been covered in some detail -- see
+@ref{Within-staff objects}.
+
+@item
+@code{padding}, @code{right-padding}, @code{staff-padding}
+
+@cindex padding
+@cindex padding property
+@cindex right-padding property
+@cindex staff-padding property
+
+As an object is being positioned the value of its @code{padding}
+property specifies the gap that must be left between itself and the
+nearest edge of the object against which it is being positioned.  Note
+that it is the @code{padding} value of the object @strong{being
+placed} that is used; the @code{padding} value of the object which is
+already placed is ignored.  Gaps specified by @code{padding} can be
+applied to all objects which support the
+@code{side-position-interface}.
+
+Instead of @code{padding}, the placement of groups of accidentals
+is controlled by @code{right-padding}.  This property is to be found
+in the @code{AccidentalPlacement} object which, note, lives in the
+@strong{Staff} context.  In the typesetting process the note heads
+are typeset first and then the accidentals, if any, are added to the
+left of the note heads using the @code{right-padding} property to determine
+the separation from the note heads and between individual accidentals.
+So only the @code{right-padding} property of the @code{AccidentalPlacement}
+object has any effect on the placement of the accidentals.
+
+The @code{staff-padding} property is closely related to the
+@code{padding} property: @code{padding} controls the minimum amount of
+space between any object which supports the
+@code{side-position-interface} and the nearest other object (generally
+the note or the staff lines); @code{staff-padding} applies only to
+those objects which are always set outside the staff -- it controls
+the minimum amount of space that should be inserted between that
+object and the staff.  Note that @code{staff-padding} has no effect on
+objects which are positioned relative to the note rather than the
+staff, even though it may be overridden without error for such objects
+-- it is simply ignored.
+
+To discover which padding property is required for the object you wish
+to reposition, you need to return to the IR and look up the object's
+properties.  Be aware that the padding properties might not be located
+in the obvious object, so look in objects that appear to be related.
+
+All padding values are measured in staff spaces.  For most
+objects, this value is set by default to be around 1.0 or less
+(it varies with each object).  It may be overridden if a larger
+(or smaller) gap is required.
+
+@item
+@code{self-alignment-X}
+
+@cindex self-alignment-X property
+
+This property can be used to align the object to the left, to
+the right, or to center it with respect to the parent object's
+reference point.  It may be used with all objects which support
+the @code{self-alignment-interface}.  In general these are objects
+that contain text.  The values are @code{LEFT}, @code{RIGHT}
+or @code{CENTER}.  Alternatively, a numerical value between
+@w{@code{-1}} and @code{+1} may be specified, where @w{@code{-1}} is
+left-aligned, @code{+1} is right-aligned, and numbers in between
+move the text progressively from left-aligned to right-aligned.
+Numerical values greater than @code{1} may be specified to move
+the text even further to the left, or less than @w{@code{-1}} to
+move the text even further to the right.  A change of @code{1}
+in the value corresponds to a movement of half the text's length.
+
+@item
+@code{extra-spacing-width}
+
+@cindex extra-spacing-width property
+
+This property is available for all objects which support the
+@code{item-interface}.  It takes two numbers, the first is added
+to the leftmost extent and the second is added to the rightmost
+extent.  Negative numbers move the edge to the left, positive to
+the right, so to widen an object the first number must be negative,
+the second positive.  Note that not all objects honor both
+numbers.  For example, the @code{Accidental} object only takes
+notice of the first (left edge) number.
+
+@item
+@code{staff-position}
+
+@cindex staff-position property
+
+@code{staff-position} is a property of the
+@code{staff-symbol-referencer-interface}, which is supported by
+objects which are positioned relative to the staff.  It specifies
+the vertical position of the object relative to the center line
+of the staff in half staff-spaces.  It is useful in resolving
+collisions between layout objects like multi-measure rests, ties
+and notes in different voices.
+
+@item
+@code{force-hshift}
+
+@cindex force-hshift property
+
+Closely spaced notes in a chord, or notes occurring at the same
+time in different voices, are arranged in two, occasionally more,
+columns to prevent the note heads overlapping.  These are called
+note columns, and an object called @code{NoteColumn} is created
+to lay out the notes in that column.
+
+The @code{force-hshift} property is a property of a @code{NoteColumn}
+(actually of the @code{note-column-interface}).  Changing it permits a
+note column to be moved in units appropriate to a note column,
+viz. the note head width of the first voice note.  It should be used
+in complex situations where the normal @code{\shiftOn} commands (see
+@ref{Explicitly instantiating voices}) do not resolve the note
+conflict.  It is preferable to the @code{extra-offset} property for
+this purpose as there is no need to work out the distance in
+staff-spaces, and moving the notes into or out of a @code{NoteColumn}
+affects other actions such as merging note heads.
+
+@end itemize
+
+@item
+Finally, when all else fails, objects may be manually repositioned
+relative to the staff center line vertically, or by displacing them by
+any distance to a new position.  The disadvantages are that the
+correct values for the repositioning have to be worked out, often by
+trial and error, for every object individually, and, because the
+movement is done after LilyPond has placed all other objects, the user
+is responsible for avoiding any collisions that might ensue.  But the
+main difficulty with this approach is that the repositioning values
+may need to be reworked if the music is later modified.  The
+properties that can be used for this type of manual repositioning are:
+
+@table @code
+@item extra-offset
+
+@cindex extra-offset property
+
+This property applies to any layout object supporting the
+@code{grob-interface}.  It takes a pair of numbers which specify the
+extra displacement in the horizontal and vertical directions.
+Negative numbers move the object to the left or down.  The units are
+staff-spaces.  The extra displacement is made after the typesetting of
+objects is finished, so an object may be repositioned anywhere without
+affecting anything else.
+
+@item positions
+
+@cindex positions property
+
+This is most useful for manually adjusting the slope and height
+of beams, slurs, and tuplets.  It takes a pair of numbers
+giving the position of the left and right ends of the beam, slur,
+etc. relative to the center line of the staff.  Units are
+staff-spaces.  Note, though, that slurs and phrasing slurs cannot
+be repositioned by arbitrarily large amounts.  LilyPond first
+generates a list of possible positions for the slur and by default
+finds the slur that @qq{looks best}.  If the @code{positions}
+property has been overridden the slur that is closest to the
+requested positions is selected from the list.
+@end table
+
+@end enumerate
+
+A particular object may not have all of these properties.
+It is necessary to go to the IR to look up which properties
+are available for the object in question.
+
+Here is a list of the objects which are most likely to be
+involved in collisions, together with the name of the object which
+should be looked up in the IR in order to discover which properties
+should be used to move them.
+
+@multitable @columnfractions .5 .5
+@headitem Object type           @tab Object name
+@item Articulations             @tab @code{Script}
+@item Beams                     @tab @code{Beam}
+@item Dynamics (vertically)     @tab @code{DynamicLineSpanner}
+@item Dynamics (horizontally)   @tab @code{DynamicText}
+@item Fingerings                @tab @code{Fingering}
+@item Rehearsal / Text marks    @tab @code{RehearsalMark}
+@item Slurs                     @tab @code{Slur}
+@item Text e.g. @code{^"text"}  @tab @code{TextScript}
+@item Ties                      @tab @code{Tie}
+@item Tuplets                   @tab @code{TupletBracket}
+@end multitable
+
+
+@node Fixing overlapping notation
+@subsection Fixing overlapping notation
+
+Let's now see how the properties in the previous section can
+help to resolve overlapping notation.
+
+@menu
+* The padding property::
+* The right-padding property::
+* The staff-padding property::
+* The self-alignment-X property::
+* The staff-position property::
+* The extra-offset property::
+* The positions property::
+* The force-hshift property::
+@end menu
+
+@node The padding property
+@unnumberedsubsubsec The @code{padding} property
+
+@cindex padding
+@cindex fixing overlapping notation
+@cindex overlapping notation
+
+The @code{padding} property can be set to increase
+(or decrease) the distance between symbols that are printed
+above or below notes.
+
+@cindex Script, example of overriding
+@cindex padding property, example
+
+@lilypond[quote,fragment,relative=1,verbatim]
+c2\fermata
+\override Script.padding = #3
+b2\fermata
+@end lilypond
+
+@cindex MetronomeMark, example of overriding
+@cindex padding property, example
+
+@lilypond[quote,fragment,relative=1,verbatim]
+% This will not work, see below
+\override MetronomeMark.padding = #3
+\tempo 4 = 120
+c1 |
+% This works
+\override Score.MetronomeMark.padding = #3
+\tempo 4 = 80
+d1 |
+@end lilypond
+
+Note in the second example how important it is to figure out what
+context handles a certain object.  Since the @code{MetronomeMark}
+object is handled in the @code{Score} context, property changes in the
+@code{Voice} context will not be noticed.  For more details, see
+@ruser{Modifying properties}.
+
+If the @code{padding} property of an object is increased when that
+object is in a stack of objects being positioned according to
+their @code{outside-staff-priority}, then that object and all
+objects outside it are moved.
+
+
+@node The right-padding property
+@unnumberedsubsubsec The @code{right-padding} property
+
+@cindex right-padding property
+
+The @code{right-padding} property affects the spacing between the
+accidental and the note to which it applies.  It is not often
+required, but the default spacing may be wrong for certain special
+accidental glyphs or combination of glyphs used in some microtonal
+music.  These have to be entered by overriding the accidental
+stencil with a markup containing the desired symbol(s), like this:
+
+@cindex Accidental, example of overriding
+@cindex text property, example
+@cindex stencil property, example
+@cindex AccidentalPlacement, example of overriding
+@cindex right-padding property, example
+
+@lilypond[quote,ragged-right,verbatim]
+sesquisharp = \markup { \sesquisharp }
+\relative c'' {
+  c4
+  % This prints a sesquisharp but the spacing is too small
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
+  cis4 c
+  % This improves the spacing
+  \once \override Score.AccidentalPlacement.right-padding = #0.6
+  \once \override Accidental.stencil = #ly:text-interface::print
+  \once \override Accidental.text = #sesquisharp
+  cis4 |
+}
+@end lilypond
+
+@noindent
+This necessarily uses an override for the accidental stencil which
+will not be covered until later.  The stencil type must be a
+procedure, here changed to print the contents of the @code{text}
+property of @code{Accidental}, which itself is set to be a
+sesquisharp sign.  This sign is then moved further away from the
+note head by overriding @code{right-padding}.
+
+@noindent
+
+@node The staff-padding property
+@unnumberedsubsubsec The @code{staff-padding} property
+
+@cindex aligning objects on a baseline
+@cindex objects, aligning on a baseline
+
+@code{staff-padding} can be used to align objects such as dynamics
+along a baseline at a fixed height above the staff, rather than at a
+height dependent on the position of the note to which they are
+attached.  It is not a property of @code{DynamicText} but of
+@code{DynamicLineSpanner}.  This is because the baseline should apply
+equally to @strong{all} dynamics, including those created as extended
+spanners.  So this is the way to align the dynamic marks in the
+example taken from the previous section:
+
+@cindex DynamicText, example of overriding
+@cindex extra-spacing-width property, example
+@cindex DynamicLineSpanner, example of overriding
+@cindex staff-padding property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+\dynamicUp
+% Extend width by 1 unit
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
+% Align dynamics to a base line 2 units above staff
+\override DynamicLineSpanner.staff-padding = #2
+a4\f b\mf c\mp b\p
+@end lilypond
+
+
+@node The self-alignment-X property
+@unnumberedsubsubsec The @code{self-alignment-X} property
+
+The following example shows how this can resolve the collision
+of a string fingering object with a note's stem by aligning the
+right edge with the reference point of the parent note:
+
+@cindex StringNumber, example of overriding
+@cindex self-alignment-X property, example
+
+@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
+\voiceOne
+<a\2>
+\once \override StringNumber.self-alignment-X = #RIGHT
+<a\2>
+@end lilypond
+
+@node The staff-position property
+@unnumberedsubsubsec The @code{staff-position} property
+
+@cindex object collision within a staff
+
+Multimeasure rests in one voice can collide with notes in another.
+Since these rests are typeset centered between the bar lines, it
+would require significant effort for LilyPond to figure out which
+other notes might collide with it, since all the current collision
+handling between notes and between notes and rests is done only
+for notes and rests that occur at the same time.  Here's an
+example of a collision of this type:
+
+@lilypond[quote,verbatim,fragment,ragged-right, relative=1]
+<< { c4 c c c } \\ { R1 } >>
+@end lilypond
+
+The best solution here is to move the multimeasure rest down, since
+the rest is in voice two.  The default in @code{\voiceTwo} (i.e. in
+the second voice of a @code{<<@{...@} \\ @{...@}>>} construct) is that
+@code{staff-position} is set to -4 for MultiMeasureRest, so we need to
+move it, say, four half-staff spaces down to @w{@code{-8}}.
+
+@cindex MultiMeasureRest, example of overriding
+@cindex staff-position property, example
+
+@lilypond[quote,verbatim,fragment,ragged-right, relative=1]
+<<
+  { c4 c c c }
+  \\
+  \override MultiMeasureRest.staff-position = #-8
+  { R1 }
+>>
+@end lilypond
+
+This is better than using, for example, @code{extra-offset},
+because the ledger line above the rest is inserted automatically.
+
+@node The extra-offset property
+@unnumberedsubsubsec The @code{extra-offset} property
+
+@cindex positioning objects
+@cindex positioning grobs
+@cindex objects, positioning
+@cindex grobs, positioning
+
+The @code{extra-offset} property provides complete control over the
+positioning of an object both horizontally and vertically.
+
+In the following example, the second fingering is moved a little to
+the left, and 1.8 staff space downwards:
+
+@cindex Fingering, example of overriding
+@cindex extra-offset property, example
+
+@lilypond[quote,fragment,relative=1,verbatim]
+\stemUp
+f4-5
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
+f4-5
+@end lilypond
+
+
+@node The positions property
+@unnumberedsubsubsec The @code{positions} property
+
+@cindex controlling tuplets, slurs, phrasing slurs, and beams manually
+@cindex manually controlling tuplets, slurs, phrasing slurs, and beams
+@cindex tuplet beams, controlling manually
+@cindex slurs, controlling manually
+@cindex phrasing slurs, controlling manually
+@cindex beams, controlling manually
+
+The @code{positions} property allows the vertical position and hence
+the slope of tuplets, slurs, phrasing slurs and beams to be controlled
+manually.
+
+Here's an example in which the phrasing slur and slur collide:
+
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+a8 \( ( a'16 ) a \)
+@end lilypond
+
+@cindex PhrasingSlur, example of overriding
+@cindex positions property, example
+
+@noindent
+One possibility would be to move the two ends of the phrasing slur
+higher.  We can try setting the left end to 2.5 staff-spaces above the
+centre line and the right end to 4.5 above, and LilyPond will
+select the phrasing slur from the candidates it has found with its
+end points closest to these:
+
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+\once \override PhrasingSlur.positions = #'(2.5 . 4.5)
+a8 \( ( a'16 ) a \)
+@end lilypond
+
+This is an improvement, but why not lower the right end of the slur
+a little?  If you try it you'll find it can't be done in this way.
+That's because there are no candidate slurs lower than the one
+already selected, and in this case the @code{positions} property has
+no effect.  However, ties, slurs and phrasing slurs @emph{can} be
+positioned and shaped very precisely when necessary.  To learn how to
+do this, see @ruser{Modifying ties and slurs}.
+
+Here's a further example.  We see that the beams
+collide with the ties:
+
+@lilypond[quote,verbatim,fragment,ragged-right]
+{
+  \time 4/2
+  <<
+    { c'1 ~ c'2. e'8 f' }
+    \\
+    { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
+  >>
+  <<
+    { c'1 ~ c'2. e'8 f' }
+    \\
+    { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
+  >>
+}
+@end lilypond
+
+@noindent
+This can be resolved by manually moving both ends of the beam
+up from their position at 1.81 staff-spaces below the center line to,
+say, 1:
+
+@cindex Beam, example of overriding
+@cindex positions property, example
+
+@lilypond[quote,verbatim,fragment,ragged-right]
+{
+  \time 4/2
+  <<
+    { c'1 ~ c'2. e'8 f' }
+    \\
+    {
+      \override Beam.positions = #'(-1 . -1)
+      e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g''
+    }
+  >>
+  <<
+    { c'1 ~ c'2. e'8 f' }
+    \\
+    { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
+  >>
+}
+@end lilypond
+
+@noindent
+Note that the override continues to apply in the first voice of
+the second measure of eighth notes, but not to any of the beams in the
+second voice.
+
+@node The force-hshift property
+@unnumberedsubsubsec The @code{force-hshift property}
+
+We can now see how to apply the final corrections to the Chopin
+example introduced at the end of @ref{I'm hearing Voices}, which
+was left looking like this:
+
+@lilypond[quote,verbatim,fragment,ragged-right]
+\new Staff \relative c'' {
+  \key aes \major
+  <<
+    { c2 aes4. bes8 }
+    \\
+    { <ees, c>2 des }
+    \\
+    \\
+    { aes'2 f4 fes }
+  >> |
+  <c ees aes c>1 |
+}
+@end lilypond
+
+@noindent
+The inner note of the first chord (i.e. the A-flat in the fourth
+Voice) need not be shifted away from the note column of the higher
+note.  To correct this we set @code{force-hshift}, which is a property
+of @code{NoteColumn}, of this note to zero.
+
+In the second chord we prefer the F to line up with the A-flat and the
+lowest note to be positioned slightly right to avoid a collision of
+stems.  We achieve this by setting @code{force-hshift} in the
+@code{NoteColumn} of the low D-flat to move it to the right by half
+a staff-space.
+
+Here's the final result:
+
+@cindex NoteColumn, example of overriding
+@cindex force-hshift property, example
+
+@lilypond[quote,verbatim,fragment,ragged-right]
+\new Staff \relative c'' {
+  \key aes \major
+  <<
+    { c2 aes4. bes8 }
+    \\
+    {
+      <ees, c>2
+      \once \override NoteColumn.force-hshift = #0.5
+      des2
+    }
+    \\
+    \\
+    {
+      \override NoteColumn.force-hshift = #0
+      aes'2 f4 fes
+    }
+  >> |
+  <c ees aes c>1 |
+}
+@end lilypond
+
+
+@node Real music example
+@subsection Real music example
+
+We end this section on Tweaks by showing the steps to be taken to
+deal with a tricky example which needs several tweaks to produce
+the desired output.  The example has been deliberately chosen to
+illustrate the use of the Notation Reference to resolve unusual
+problems with notation.  It is not representative of the more usual
+engraving process, so please do not let these difficulties put
+you off!  Fortunately, difficulties like these are not very common!
+
+The example is from Chopin's Première Ballade, Op. 23, bars 6 to
+9, the transition from the opening Lento to Moderato.
+Here, first, is what we want the output to look like, but to avoid
+over-complicating the example too much we have left out the
+dynamics, fingering and pedalling.
+
+@c The following should appear as music without code
+@c This example should not be indexed
+@c line-width ensures no break
+@lilypond[quote,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+  \new Voice {
+    r2 c4.\( g8 |
+    \once \override Tie.staff-position = #3.5
+    bes1~ |
+    \bar "||"
+    \time 6/4
+    \mergeDifferentlyHeadedOn
+    \mergeDifferentlyDottedOn
+    bes2.^\markup { \bold "Moderato" } r8
+    <<
+      { c,8 d fis bes a }
+      \new Voice {
+        \voiceTwo
+        c,8~
+        % Reposition the c2 to the right of the merged note
+        \once \override NoteColumn.force-hshift = #1.0
+        % Move the c2 out of the main note column
+        % so the merge will work
+        \shiftOnn
+        c2
+      }
+      \new Voice {
+        \voiceThree
+        s8
+        % Stem on the d2 must be down to permit merging
+        \stemDown
+        % Stem on the d2 should be invisible
+        \tweak Stem.transparent ##t
+        d2
+      }
+      \new Voice {
+        \voiceFour
+        s4 fis4.
+      }
+    >> |
+    \mergeDifferentlyHeadedOff
+    \mergeDifferentlyDottedOff
+    g2.\)
+  }
+}
+
+lhMusic = \relative c' {
+  r2 <c g ees>2( |
+  <d g, d>1)\arpeggio |
+  r2. d,,4 r4 r |
+  r4
+}
+
+\score {
+  \new PianoStaff <<
+    \new Staff = "RH"  <<
+      \key g \minor
+      \rhMusic
+    >>
+    \new Staff = "LH" <<
+      \key g \minor
+      \clef "bass"
+      \lhMusic
+    >>
+  >>
+}
+@end lilypond
+
+We note first that the right hand part in the third bar
+requires four voices.  These are the five beamed eighth notes,
+the tied C, the half-note D which is merged with the eighth note
+D, and the dotted quarter note F-sharp, which is also merged with
+the eighth note at the same pitch.  Everything else is in a single
+voice, so the easiest way is to introduce these extra three voices
+temporarily at the time they are needed.  If you have forgotten
+how to do this, look at @ref{I'm hearing Voices} and @ref{Explicitly
+instantiating voices}.  Here we choose to use explicitly instantiated
+voices for the polyphonic passage, as LilyPond is better able to
+avoid collisions if all voices are instantiated explicitly in this
+way.
+
+So let us begin by entering the notes as two variables, setting up
+the staff structure in a score block, and seeing what LilyPond
+produces by default:
+
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+  \new Voice {
+    r2 c4. g8 |
+    bes1~ |
+    \time 6/4
+    bes2. r8
+    % Start polyphonic section of four voices
+    <<
+      { c,8 d fis bes a }  % continuation of main voice
+      \new Voice {
+        \voiceTwo
+        c,8~ c2
+      }
+      \new Voice {
+        \voiceThree
+        s8 d2
+      }
+      \new Voice {
+        \voiceFour
+        s4 fis4.
+      }
+    >> |
+    g2.  % continuation of main voice
+  }
+}
+
+lhMusic = \relative c' {
+  r2 <c g ees>2 |
+  <d g, d>1 |
+  r2. d,,4 r4 r |
+  r4
+}
+
+\score {
+  \new PianoStaff <<
+    \new Staff = "RH"  <<
+      \key g \minor
+      \rhMusic
+    >>
+    \new Staff = "LH" <<
+      \key g \minor
+      \clef "bass"
+      \lhMusic
+    >>
+  >>
+}
+@end lilypond
+
+All the notes are right, but the appearance is far from
+satisfactory.  The tie collides with the change in time signature,
+some notes are not merged together, and several notation elements
+are missing.  Let's first deal with the easier things.  We can
+easily add the left hand slur and the right hand phrasing slur,
+since these were all covered in the Tutorial.  Doing this gives:
+
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+  \new Voice {
+    r2 c4.\( g8 |
+    bes1~ |
+    \time 6/4
+    bes2. r8
+    % Start polyphonic section of four voices
+    <<
+      { c,8 d fis bes a }  % continuation of main voice
+      \new Voice {
+        \voiceTwo
+        c,8~ c2
+      }
+      \new Voice {
+        \voiceThree
+        s8 d2
+      }
+      \new Voice {
+        \voiceFour
+        s4 fis4.
+      }
+    >> |
+    g2.\)  % continuation of main voice
+  }
+}
+
+lhMusic = \relative c' {
+  r2 <c g ees>2( |
+  <d g, d>1) |
+  r2. d,,4 r4 r |
+  r4
+}
+
+\score {
+  \new PianoStaff <<
+    \new Staff = "RH"  <<
+      \key g \minor
+      \rhMusic
+    >>
+    \new Staff = "LH" <<
+      \key g \minor
+      \clef "bass"
+      \lhMusic
+    >>
+  >>
+}
+@end lilypond
+
+The first bar is now correct.  The second bar contains an arpeggio and
+is terminated by a double bar line.  How do we do these, as they have
+not been mentioned in this Learning Manual?  This is where we need to
+turn to the Notation Reference.  Looking up @q{arpeggio} and @q{bar
+line} in the index quickly shows us that an arpeggio is produced by
+appending @code{\arpeggio} to a chord, and a double bar line is
+produced by the @code{\bar "||"} command.  That's easily done.  We
+next need to correct the collision of the tie with the time signature.
+This is best done by moving the tie upwards.  Moving objects was
+covered earlier in @ref{Moving objects}, which says that objects
+positioned relative to the staff can be moved vertically by overriding
+their @code{staff-position} property, which is specified in half staff
+spaces relative to the center line of the staff.  So the following
+override placed just before the first tied note would move the tie up
+to 3.5 half staff spaces above the center line:
+
+@code{\once \override Tie.staff-position = #3.5}
+
+This completes bar two, giving:
+
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+  \new Voice {
+    r2 c4.\( g8 |
+    \once \override Tie.staff-position = #3.5
+    bes1~ |
+    \bar "||"
+    \time 6/4
+    bes2. r8
+    % Start polyphonic section of four voices
+    <<
+      { c,8 d fis bes a }  % continuation of main voice
+      \new Voice {
+        \voiceTwo
+        c,8~ c2
+      }
+      \new Voice {
+        \voiceThree
+        s8 d2
+      }
+      \new Voice {
+        \voiceFour
+        s4 fis4.
+      }
+    >> |
+    g2.\)  % continuation of main voice
+  }
+}
+
+lhMusic = \relative c' {
+  r2 <c g ees>2( |
+  <d g, d>1)\arpeggio |
+  r2. d,,4 r4 r |
+  r4
+}
+
+\score {
+  \new PianoStaff <<
+    \new Staff = "RH"  <<
+      \key g \minor
+      \rhMusic
+    >>
+    \new Staff = "LH" <<
+      \key g \minor
+      \clef "bass"
+      \lhMusic
+    >>
+  >>
+}
+@end lilypond
+
+On to bar three and the start of the Moderato section.  The tutorial
+showed how to add bold text with the @code{\markup} command, so
+adding @qq{Moderato} in bold is easy.  But how do we merge notes in
+different voices together?  This is where we need to turn again to
+the Notation Reference for help.  A search for @qq{merge} in the
+Notation Reference index quickly leads us to the commands for merging
+differently headed and differently dotted notes in
+@ruser{Collision resolution}.  In our example we need to merge both
+types of note for the duration of the polyphonic section in bar 3,
+so using the information we find in the Notation Reference we add
+
+@example
+\mergeDifferentlyHeadedOn
+\mergeDifferentlyDottedOn
+@end example
+
+@noindent
+to the start of that section and
+
+@example
+\mergeDifferentlyHeadedOff
+\mergeDifferentlyDottedOff
+@end example
+
+@noindent
+to the end, giving:
+
+@c line-width ensures no break
+@lilypond[quote,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+  \new Voice {
+    r2 c4.\( g8 |
+    \once \override Tie.staff-position = #3.5
+    bes1~ |
+    \bar "||"
+    \time 6/4
+    bes2.^\markup { \bold "Moderato" } r8
+    \mergeDifferentlyHeadedOn
+    \mergeDifferentlyDottedOn
+    % Start polyphonic section of four voices
+    <<
+      { c,8 d fis bes a }  % continuation of main voice
+      \new Voice {
+        \voiceTwo
+        c,8~ c2
+      }
+      \new Voice {
+        \voiceThree
+        s8 d2
+      }
+      \new Voice {
+        \voiceFour
+        s4 fis4.
+      }
+    >> |
+    \mergeDifferentlyHeadedOff
+    \mergeDifferentlyDottedOff
+    g2.\)  % continuation of main voice
+  }
+}
+
+lhMusic = \relative c' {
+  r2 <c g ees>2( |
+  <d g, d>1)\arpeggio |
+  r2. d,,4 r4 r |
+  r4
+}
+
+\score {
+  \new PianoStaff <<
+    \new Staff = "RH"  <<
+      \key g \minor
+      \rhMusic
+    >>
+    \new Staff = "LH" <<
+      \key g \minor
+      \clef "bass"
+      \lhMusic
+    >>
+  >>
+}
+@end lilypond
+
+These overrides have merged the two F-sharp notes, but not the two
+on D.  Why not?  The answer is there in the same section in the
+Notation Reference -- notes being merged must have stems in
+opposite directions and two notes cannot be merged successfully if
+there is a third note in the same note column.  Here the two D's
+both have upward stems and there is a third note -- the C.  We know
+how to change the stem direction using @code{\stemDown}, and
+the Notation Reference also says how to move the C -- apply a shift
+using one of the @code{\shift} commands.  But which one?
+The C is in voice two which has shift off, and the two D's are in
+voices one and three, which have shift off and shift on,
+respectively.  So we have to shift the C a further level still
+using @code{\shiftOnn} to avoid it interfering with the two D's.
+Applying these changes gives:
+
+@cindex Tie, example of overriding
+@cindex staff-position property, example
+
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+  \new Voice {
+    r2 c4.\( g8 |
+    \once \override Tie.staff-position = #3.5
+    bes1~ |
+    \bar "||"
+    \time 6/4
+    bes2.^\markup { \bold "Moderato" } r8
+    \mergeDifferentlyHeadedOn
+    \mergeDifferentlyDottedOn
+    % Start polyphonic section of four voices
+    <<
+      { c,8 d fis bes a }  % continuation of main voice
+      \new Voice {
+        \voiceTwo
+        % Move the c2 out of the main note column
+        % so the merge will work
+        c,8~ \shiftOnn c2
+      }
+      \new Voice {
+        \voiceThree
+        % Stem on the d2 must be down to permit merging
+        s8 \stemDown d2
+      }
+      \new Voice {
+        \voiceFour
+        s4 fis4.
+      }
+    >> |
+    \mergeDifferentlyHeadedOff
+    \mergeDifferentlyDottedOff
+    g2.\)  % continuation of main voice
+  }
+}
+
+lhMusic = \relative c' {
+  r2 <c g ees>2( |
+  <d g, d>1)\arpeggio |
+  r2. d,,4 r4 r |
+  r4
+}
+
+\score {
+  \new PianoStaff <<
+    \new Staff = "RH"  <<
+      \key g \minor
+      \rhMusic
+    >>
+    \new Staff = "LH" <<
+      \key g \minor
+      \clef "bass"
+      \lhMusic
+    >>
+  >>
+}
+@end lilypond
+
+Nearly there.  Only two problems remain: The downward stem on the
+merged D should not be there, and the C would be better positioned
+to the right of the D's.  We know how to do both of these from the
+earlier tweaks: we make the stem transparent, and move the C with
+the @code{force-hshift} property.  Here's the final result:
+
+@cindex NoteColumn, example of overriding
+@cindex force-hshift property, example
+@cindex Stem, example of overriding
+@cindex transparent property, example
+
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative c'' {
+  \new Voice {
+    r2 c4.\( g8 |
+    \once \override Tie.staff-position = #3.5
+    bes1~ |
+    \bar "||"
+    \time 6/4
+    bes2.^\markup { \bold "Moderato" } r8
+    \mergeDifferentlyHeadedOn
+    \mergeDifferentlyDottedOn
+    % Start polyphonic section of four voices
+    <<
+      { c,8 d fis bes a }  % continuation of main voice
+      \new Voice {
+        \voiceTwo
+        c,8~
+        % Reposition the c2 to the right of the merged note
+        \once \override NoteColumn.force-hshift = #1.0
+        % Move the c2 out of the main note column
+        % so the merge will work
+        \shiftOnn
+        c2
+      }
+      \new Voice {
+        \voiceThree
+        s8
+        % Stem on the d2 must be down to permit merging
+        \stemDown
+        % Stem on the d2 should be invisible
+        \tweak Stem.transparent ##t
+        d2
+      }
+      \new Voice {
+        \voiceFour
+        s4 fis4.
+      }
+    >> |
+    \mergeDifferentlyHeadedOff
+    \mergeDifferentlyDottedOff
+    g2.\)  % continuation of main voice
+  }
+}
+
+lhMusic = \relative c' {
+  r2 <c g ees>2( |
+  <d g, d>1)\arpeggio |
+  r2. d,,4 r4 r |
+  r4
+}
+
+\score {
+  \new PianoStaff <<
+    \new Staff = "RH"  <<
+      \key g \minor
+      \rhMusic
+    >>
+    \new Staff = "LH" <<
+      \key g \minor
+      \clef "bass"
+      \lhMusic
+    >>
+  >>
+}
+@end lilypond
+
+
+@node Further tweaking
+@section Further tweaking
+
+@menu
+* Other uses for tweaks::
+* Using variables for tweaks::
+* Style sheets::
+* Other sources of information::
+* Advanced tweaks with Scheme::
+@end menu
+
+@node Other uses for tweaks
+@subsection Other uses for tweaks
+
+@menu
+* Tying notes across voices::
+* Simulating a fermata in MIDI::
+@end menu
+
+@cindex transparent property, use of
+@cindex objects, making invisible
+@cindex removing objects
+@cindex objects, removing
+@cindex hiding objects
+@cindex objects, hiding
+@cindex invisible objects
+@cindex objects, invisible
+
+@node Tying notes across voices
+@unnumberedsubsubsec Tying notes across voices
+
+@cindex tying notes across voices
+
+The following example demonstrates how to connect notes in
+different voices using ties.  Normally, only two notes in the
+same voice can be connected with ties.  By using two voices,
+with the tied notes in one of them
+
+@lilypond[quote,fragment,relative=2]
+<< { b8~ b\noBeam } \\ { b8[ g] } >>
+@end lilypond
+
+@noindent
+and blanking the first up-stem in that voice, the tie appears to
+cross voices:
+
+@cindex Stem, example of overriding
+@cindex transparent property, example
+
+@lilypond[quote,fragment,relative=2,verbatim]
+<<
+  {
+    \tweak Stem.transparent ##t
+    b8~ b\noBeam
+  }
+\\
+  { b8[ g] }
+>>
+@end lilypond
+
+To make sure that the just-blanked stem doesn't squeeze the tie
+too much, we can lengthen the stem by setting the
+@code{length} to @code{8},
+
+@lilypond[quote,fragment,relative=2,verbatim]
+<<
+  {
+    \tweak Stem.transparent ##t
+    \tweak Stem.length #8
+    b8~ b\noBeam
+  }
+\\
+  { b8[ g] }
+>>
+@end lilypond
+
+@funindex \single
+@cindex tweak, generated from override
+Now for @emph{overriding} the transparency of a graphical object,
+we could have used the shorthand @code{\hide} as explained above.
+Tweaking is a different operation, affecting only properties
+generated from a single music expression.  It turns out that we
+can convert overrides into tweaks using @code{\single}, making it
+possible to rewrite the above example as
+
+@lilypond[quote,fragment,relative=2,verbatim]
+<<
+  {
+    \single \hide Stem
+    \single \hide Flag
+    \tweak Stem.length #8
+    b8~ b\noBeam
+  }
+\\
+  { b8[ g] }
+>>
+@end lilypond
+
+In this particular case, the difference to @code{\once \hide} is
+not apparent.  It is important when there are several objects at
+the same point in musical time (like noteheads in a chord).  In
+that case, @code{\once} will affect all of those objects while
+@code{\single} will only affect a single one, the one generated by
+the immediately following music expression.
+
+@node Simulating a fermata in MIDI
+@unnumberedsubsubsec Simulating a fermata in MIDI
+
+@cindex stencil property, use of
+@cindex fermata, implementing in MIDI
+
+For outside-staff objects it is usually better to override the
+object's @code{stencil} property rather than its @code{transparent}
+property when you wish to remove it from the printed output.
+Setting the @code{stencil} property of an object to @code{#f} will
+remove that object entirely from the printed output.  This means it
+has no effect on the placement of other objects placed relative to
+it.
+
+For example, if we wished to change the metronome setting in order
+to simulate a fermata in the MIDI output we would not want the
+metronome markings to appear in the printed output, and we would
+not want it to influence the spacing between the two systems or
+the positions of adjacent annotations on the staff.  So setting
+its @code{stencil} property to @code{#f} would be the best way.
+We show here the effect of the two methods:
+
+@cindex MetronomeMark, example of overriding
+@cindex transparent property, example
+
+@lilypond[quote,verbatim,ragged-right]
+\score {
+  \relative c'' {
+    % Visible tempo marking
+    \tempo 4=120
+    a4 a a
+    \once \hide Score.MetronomeMark
+    % Invisible tempo marking to lengthen fermata in MIDI
+    \tempo 4=80
+    a4\fermata |
+    % New tempo for next section
+    \tempo 4=100
+    a4 a a a |
+  }
+  \layout { }
+  \midi { }
+}
+@end lilypond
+
+@cindex MetronomeMark, example of overriding
+@cindex stencil property, example
+
+@lilypond[quote,verbatim,ragged-right]
+\score {
+  \relative c'' {
+    % Visible tempo marking
+    \tempo 4=120
+    a4 a a
+    \once \omit Score.MetronomeMark
+    % Invisible tempo marking to lengthen fermata in MIDI
+    \tempo 4=80
+    a4\fermata |
+    % New tempo for next section
+    \tempo 4=100
+    a4 a a a |
+  }
+  \layout { }
+  \midi { }
+}
+@end lilypond
+
+@noindent
+Both methods remove the metronome mark which lengthens the fermata
+from the printed output, and both affect the MIDI timing as
+required, but the transparent metronome mark in the first line
+forces the following tempo indication too high while the
+second (with the stencil removed) does not.
+
+@seealso
+Music Glossary:
+@rglos{system}.
+
+@node Using variables for tweaks
+@subsection Using variables for tweaks
+
+@cindex variables, using for tweaks
+@cindex using variables for tweaks
+@cindex tweaks, using variables for
+
+Override commands are often long and tedious to type, and they
+have to be absolutely correct.  If the same overrides are to be
+used many times it may be worth defining variables to hold them.
+
+Suppose we wish to emphasize certain words in lyrics by printing
+them in bold italics.  The @code{\italic} and @code{\bold}
+commands only work within lyrics if they are embedded, together with
+the word or words to be modified, within a @code{\markup} block,
+which makes them tedious to enter.  The need to embed the words
+themselves prevents their use in simple variables.  As an
+alternative can we use @code{\override} and @code{\revert} commands?
+
+@example
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
+
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
+@end example
+
+These would also be extremely tedious to enter if there were many
+words requiring emphasis.  But we @emph{can} define these as two
+variables and use those to bracket the words to be emphasized.
+Another advantage of using variables for these overrides is that
+the spaces around the dot are not necessary, since they are not
+being interpreted in @code{\lyricmode} directly.  Here's an example
+of this, although in practice  we would choose shorter names
+for the variables to make them quicker to type:
+
+@cindex LyricText, example of overriding
+@cindex font-shape property, example
+@cindex font-series property, example
+
+@lilypond[quote,verbatim]
+emphasize = {
+  \override Lyrics.LyricText.font-shape = #'italic
+  \override Lyrics.LyricText.font-series = #'bold
+}
+
+normal = {
+  \revert Lyrics.LyricText.font-shape
+  \revert Lyrics.LyricText.font-series
+}
+
+global = { \key c \major \time 4/4 \partial 4 }
+
+SopranoMusic = \relative c' { c4 | e4. e8 g4 g    | a4   a   g  }
+AltoMusic    = \relative c' { c4 | c4. c8 e4 e    | f4   f   e  }
+TenorMusic   = \relative c  { e4 | g4. g8 c4.  b8 | a8 b c d e4 }
+BassMusic    = \relative c  { c4 | c4. c8 c4 c    | f8 g a b c4 }
+
+VerseOne = \lyrics {
+  E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save,
+}
+
+VerseTwo = \lyricmode {
+  O | \once \emphasize Christ, whose voice the | wa -- ters heard,
+}
+
+VerseThree = \lyricmode {
+  O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood
+}
+
+VerseFour = \lyricmode {
+  O | \emphasize Tri -- ni -- ty \normal of | love and pow'r
+}
+
+\score {
+  \new ChoirStaff <<
+    \new Staff <<
+      \clef "treble"
+      \new Voice = "Soprano"  { \voiceOne \global \SopranoMusic }
+      \new Voice = "Alto" { \voiceTwo \AltoMusic }
+      \new Lyrics \lyricsto "Soprano" { \VerseOne }
+      \new Lyrics \lyricsto "Soprano" { \VerseTwo }
+      \new Lyrics \lyricsto "Soprano" { \VerseThree }
+      \new Lyrics \lyricsto "Soprano" { \VerseFour }
+    >>
+    \new Staff <<
+      \clef "bass"
+      \new Voice = "Tenor" { \voiceOne \TenorMusic }
+      \new Voice = "Bass"  { \voiceTwo \BassMusic }
+    >>
+  >>
+}
+@end lilypond
+
+
+@node Style sheets
+@subsection Style sheets
+
+The output that LilyPond produces can be heavily modified; see
+@ref{Tweaking output}, for details.  But what if you have many
+input files that you want to apply your tweaks to?  Or what if you
+simply want to separate your tweaks from the actual music?  This
+is quite easy to do.
+
+Let's look at an example.  Don't worry if you don't understand
+the parts with all the @code{#()}.  This is explained in
+@ref{Advanced tweaks with Scheme}.
+
+@lilypond[quote,verbatim,ragged-right]
+mpdolce =
+#(make-dynamic-script
+  #{ \markup { \hspace #0
+               \translate #'(5 . 0)
+               \line { \dynamic "mp"
+                       \text \italic "dolce" } }
+  #})
+
+inst =
+#(define-music-function
+     (parser location string)
+     (string?)
+   #{ <>^\markup \bold \box #string #})
+
+\relative c'' {
+  \tempo 4=50
+  a4.\mpdolce d8 cis4--\glissando a |
+  b4 bes a2 |
+  \inst "Clarinet"
+  cis4.\< d8 e4 fis |
+  g8(\! fis)-. e( d)-. cis2 |
+}
+@end lilypond
+
+Let's do something about the @code{mpdolce} and @code{inst} definitions.
+They produce the output we desire, but we might want to use them in
+another piece.  We could simply copy-and-paste them at the top of every
+file, but that's an annoyance.  It also leaves those definitions in our
+input files, and I personally find all the @code{#()} somewhat ugly.
+Let's hide them in another file:
+
+@example
+%%% save this to a file called "definitions.ily"
+mpdolce =
+#(make-dynamic-script
+  #@{ \markup @{ \hspace #0
+               \translate #'(5 . 0)
+               \line @{ \dynamic "mp"
+                       \text \italic "dolce" @} @}
+  #@})
+
+inst =
+#(define-music-function
+     (parser location string)
+     (string?)
+   #@{ <>^\markup \bold \box #string #@})
+@end example
+
+We will refer to this file using the @code{\include} command near
+the top of the music file.  (The extension @file{.ily} is used to
+distinguish this included file, which is not meant to be compiled
+on its own, from the main file.)
+Now let's modify our music (let's save this file as @file{music.ly}).
+
+@c  We have to do this awkward example/lilypond-non-verbatim
+@c  because we can't do the \include stuff in the manual.
+
+@example
+\include "definitions.ily"
+
+\relative c'' @{
+  \tempo 4=50
+  a4.\mpdolce d8 cis4--\glissando a |
+  b4 bes a2 |
+  \inst "Clarinet"
+  cis4.\< d8 e4 fis |
+  g8(\! fis)-. e( d)-. cis2 |
+@}
+@end example
+
+@lilypond[quote,ragged-right]
+mpdolce =
+#(make-dynamic-script
+  #{ \markup { \hspace #0
+               \translate #'(5 . 0)
+               \line { \dynamic "mp"
+                       \text \italic "dolce" } }
+  #})
+
+inst =
+#(define-music-function
+     (parser location string)
+     (string?)
+   #{ <>^\markup \bold \box #string #})
+
+\relative c'' {
+  \tempo 4=50
+  a4.\mpdolce d8 cis4--\glissando a |
+  b4 bes a2 |
+  \inst "Clarinet"
+  cis4.\< d8 e4 fis |
+  g8(\! fis)-. e( d)-. cis2 |
+}
+@end lilypond
+
+That looks better, but let's make a few changes.  The glissando is hard
+to see, so let's make it thicker and closer to the note heads.  Let's
+put the metronome marking above the clef, instead of over the first
+note.  And finally, my composition professor hates @q{C} time signatures,
+so we'd better make that @q{4/4} instead.
+
+Don't change @file{music.ly}, though.  Replace our @file{definitions.ily}
+with this:
+
+@example
+%%%  definitions.ily
+mpdolce =
+#(make-dynamic-script
+  #@{ \markup @{ \hspace #0
+               \translate #'(5 . 0)
+               \line @{ \dynamic "mp"
+                       \text \italic "dolce" @} @}
+  #@})
+
+inst =
+#(define-music-function
+     (parser location string)
+     (string?)
+   #@{ <>^\markup \bold \box #string #@})
+
+\layout@{
+  \context @{
+    \Score
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
+  @}
+  \context @{
+    \Staff
+    \override TimeSignature.style = #'numbered
+  @}
+  \context @{
+    \Voice
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
+  @}
+@}
+@end example
+
+@lilypond[quote,ragged-right]
+mpdolce =
+#(make-dynamic-script
+  #{ \markup { \hspace #0
+               \translate #'(5 . 0)
+               \line { \dynamic "mp"
+                       \text \italic "dolce" } }
+  #})
+
+inst =
+#(define-music-function
+     (parser location string)
+     (string?)
+   #{ <>^\markup \bold \box #string #})
+
+\layout{
+  \context {
+    \Score
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
+  }
+  \context {
+    \Staff
+    \override TimeSignature.style = #'numbered
+  }
+  \context {
+    \Voice
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
+  }
+}
+
+\relative c'' {
+  \tempo 4=50
+  a4.\mpdolce d8 cis4--\glissando a |
+  b4 bes a2 |
+  \inst "Clarinet"
+  cis4.\< d8 e4 fis |
+  g8(\! fis)-. e( d)-. cis2 |
+}
+@end lilypond
+
+That looks nicer!  But now suppose that I want to publish this
+piece.  My composition professor doesn't like @q{C} time
+signatures, but I'm somewhat fond of them.  Let's copy the
+current @file{definitions.ily} to @file{web-publish.ily} and
+modify that.  Since this music is aimed at producing a pdf which
+will be displayed on the screen, we'll also increase the
+overall size of the output.
+
+@example
+%%%  web-publish.ily
+mpdolce =
+#(make-dynamic-script
+  #@{ \markup @{ \hspace #0
+               \translate #'(5 . 0)
+               \line @{ \dynamic "mp"
+                       \text \italic "dolce" @} @}
+  #@})
+
+inst =
+#(define-music-function
+     (parser location string)
+     (string?)
+   #@{ <>^\markup \bold \box #string #@})
+
+#(set-global-staff-size 23)
+
+\layout@{
+  \context @{
+    \Score
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
+  @}
+  \context @{
+    \Staff
+  @}
+  \context @{
+    \Voice
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
+  @}
+@}
+@end example
+
+@lilypond[quote,ragged-right]
+mpdolce =
+#(make-dynamic-script
+  #{ \markup { \hspace #0
+               \translate #'(5 . 0)
+               \line { \dynamic "mp"
+                       \text \italic "dolce" } }
+  #})
+
+inst =
+#(define-music-function
+     (parser location string)
+     (string?)
+   #{ <>^\markup \bold \box #string #})
+
+#(set-global-staff-size 23)
+
+\layout{
+  \context { \Score
+    \override MetronomeMark.extra-offset = #'(-9 . 0)
+    \override MetronomeMark.padding = #'3
+  }
+  \context { \Voice
+    \override Glissando.thickness = #3
+    \override Glissando.gap = #0.1
+  }
+}
+
+\relative c'' {
+  \tempo 4=50
+  a4.\mpdolce d8 cis4--\glissando a |
+  b4 bes a2 |
+  \inst "Clarinet"
+  cis4.\< d8 e4 fis |
+  g8(\! fis)-. e( d)-. cis2 |
+}
+@end lilypond
+
+Now in our music, I simply replace
+@code{\include "definitions.ily"} with
+@code{\include "web-publish.ily"}.  Of course, we could make this
+even more convenient.  We could make a @file{definitions.ily} file which
+contains only the definitions of @code{mpdolce} and @code{inst}, a
+@file{web-publish.ily} file which contains only the @code{\layout}
+section listed above, and a @file{university.ily} file which
+contains only the tweaks to produce the output that my professor
+prefers.  The top of @file{music.ly} would then look like this:
+
+@example
+\include "definitions.ily"
+
+%%%  Only uncomment one of these two lines!
+\include "web-publish.ily"
+%\include "university.ily"
+@end example
+
+This approach can be useful even if you are only producing
+one set of parts.  I use half a dozen different
+@q{style sheet} files for my projects.  I begin every music
+file with @code{\include "../global.ily"}, which contains
+
+@example
+%%%   global.ily
+\version @w{"@version{}"}
+
+#(ly:set-option 'point-and-click #f)
+
+\include "../init/init-defs.ly"
+\include "../init/init-layout.ly"
+\include "../init/init-headers.ly"
+\include "../init/init-paper.ly"
+@end example
+
+
+@node Other sources of information
+@subsection Other sources of information
+
+The Internals Reference documentation contains a lot of information
+about LilyPond, but even more information can be gathered by
+looking at the internal LilyPond files.  To explore these, you must
+first find the directory appropriate to your system.  The location
+of this directory depends (a) on whether you obtained LilyPond
+by downloading a precompiled binary from lilypond.org
+or whether you installed it from a package manager (i.e.
+distributed with GNU/Linux, or installed under fink or cygwin) or
+compiled it from source, and (b) on which operating system it is
+being used:
+
+@subsubsubheading Downloaded from lilypond.org
+
+@itemize @bullet
+@item GNU/Linux
+
+Navigate to
+@example
+@file{@var{INSTALLDIR}/lilypond/usr/@/share/lilypond/current/}
+@end example
+
+@item MacOS X
+
+Navigate to
+@example
+@file{@var{INSTALLDIR}/LilyPond.app/Contents/@/Resources/share/lilypond/current/}
+@end example
+
+by either @code{cd}-ing into this directory from the
+Terminal, or control-clicking on the LilyPond application and
+selecting @q{Show Package Contents}.
+
+@item Windows
+
+Using Windows Explorer, navigate to
+@example
+@file{@var{INSTALLDIR}/LilyPond/usr/@/share/lilypond/current/}
+@end example
+
+@end itemize
+
+@subsubsubheading Installed from a package manager or compiled from source
+
+Navigate to
+@file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, where
+@var{PREFIX} is set by your package manager or @code{configure}
+script, and @var{X.Y.Z} is the LilyPond version number.
+
+@smallspace
+
+Within this directory the two interesting subdirectories are
+
+@itemize
+@item @file{ly/} - contains files in LilyPond format
+@item @file{scm/} - contains files in Scheme format
+@end itemize
+
+Let's begin by looking at some files in @file{ly/}.
+Open @file{ly/property-init.ly} in a text editor.  The one
+you normally use for @code{.ly} files will be fine.  This file
+contains the definitions of all the standard LilyPond predefined
+commands, such as @code{\stemUp} and @code{\slurDotted}.  You will
+see that these are nothing more than definitions of variables
+containing one or a group of @code{\override} commands.  For
+example, @code{/tieDotted} is defined to be:
+
+@example
+tieDotted = @{
+  \override Tie.dash-period = #0.75
+  \override Tie.dash-fraction = #0.1
+@}
+@end example
+
+If you do not like the default values these predefined commands can
+be redefined easily, just like any other variable, at the
+head of your input file.
+
+The following are the most useful files to be found in
+@file{ly/}:
+
+@multitable @columnfractions .4 .6
+@headitem Filename
+  @tab Contents
+@item @file{ly/engraver-init.ly}
+  @tab Definitions of engraver Contexts
+@item @file{ly/paper-defaults-init.ly}
+  @tab Specifications of paper-related defaults
+@item @file{ly/performer-init.ly}
+  @tab Definitions of performer Contexts
+@item @file{ly/property-init.ly}
+  @tab Definitions of all common predefined commands
+@item @file{ly/spanner-init.ly}
+  @tab Definitions of spanner-related predefined commands
+@end multitable
+
+Other settings (such as the definitions of markup commands) are
+stored as @file{.scm} (Scheme) files.  The Scheme programming
+language is used to provide a programmable interface into
+LilyPond internal operation.  Further explanation of these files
+is currently outside the scope of this manual, as a knowledge of
+the Scheme language is required.  Users should be warned that
+a substantial amount of technical knowledge or time is required
+to understand Scheme and these files (see @rextend{Scheme tutorial}).
+
+If you have this knowledge, the Scheme files which may be of
+interest are:
+
+@multitable @columnfractions .4 .6
+@headitem Filename
+  @tab Contents
+@item @file{scm/auto-beam.scm}
+  @tab Sub-beaming defaults
+@item @file{scm/define-grobs.scm}
+  @tab Default settings for grob properties
+@item @file{scm/define-markup-commands.scm}
+  @tab Specify all markup commands
+@item @file{scm/midi.scm}
+  @tab Default settings for MIDI output
+@item @file{scm/output-lib.scm}
+  @tab Settings that affect appearance of frets, colors,
+       accidentals, bar lines, etc
+@item @file{scm/parser-clef.scm}
+  @tab Definitions of supported clefs
+@item @file{scm/script.scm}
+  @tab Default settings for articulations
+@end multitable
+
+
+@node Advanced tweaks with Scheme
+@subsection Advanced tweaks with Scheme
+
+Although many things are possible with the @code{\override} and
+@code{\tweak} commands, an even more powerful way of modifying
+the action of LilyPond is available through a programmable
+interface to the LilyPond internal operation.  Code written in
+the Scheme programming language can be incorporated directly in
+the internal operation of LilyPond.  Of course, at least a basic
+knowledge of programming in Scheme is required to do this, and an
+introduction is provided in the @rextend{Scheme tutorial}.
+
+As an illustration of one of the many possibilities, instead of
+setting a property to a constant it can be set to a Scheme
+procedure which is then called whenever that property is accessed
+by LilyPond.  The property can then be set dynamically to a value
+determined by the procedure at the time it is called.  In this
+example we color the note head in accordance with its position on
+the staff.
+
+@cindex x11-color function, example of using
+@cindex NoteHead, example of overriding
+@cindex color property, setting to Scheme procedure
+
+@lilypond[quote,verbatim,ragged-right]
+#(define (color-notehead grob)
+   "Color the notehead according to its position on the staff."
+   (let ((mod-position (modulo (ly:grob-property grob 'staff-position)
+                               7)))
+     (case mod-position
+       ;;   Return rainbow colors
+       ((1) (x11-color 'red    ))  ; for C
+       ((2) (x11-color 'orange ))  ; for D
+       ((3) (x11-color 'yellow ))  ; for E
+       ((4) (x11-color 'green  ))  ; for F
+       ((5) (x11-color 'blue   ))  ; for G
+       ((6) (x11-color 'purple ))  ; for A
+       ((0) (x11-color 'violet ))  ; for B
+       )))
+
+\relative c' {
+  % Arrange to obtain color from color-notehead procedure
+  \override NoteHead.color = #color-notehead
+  a2 b | c2 d | e2 f | g2 a |
+}
+@end lilypond
+
+Further examples showing the use of these programmable interfaces
+can be found in @rextend{Callback functions}.
+
+
+
index da7ef9c80126862c0b2600aabdae5c62a7fed789..2f82070f2ccf878460793425420a9a0cdc2eabf1 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @ignore
-    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
index 03652bbc888bd1a2be2a98cc81f7fca4db1bbb09..33e6c1062a769fa3a56d9e214ac46643e52eda46 100644 (file)
@@ -1,18 +1,26 @@
 <!--
-    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
 -->
 
+<!--
+we depend on an external entity here, which we cannot control.  Suppose
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
+For some time, Google won't have the new location in its index, so the
+search would get nothing.  It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
++-->
+
 <form action="http://google.com/search"
       method="get"
       name="search"
-      onSubmit="search.q.value='site:lilypond.org +v2.16 '
+      onSubmit="search.q.value='site:lilypond.org +v2.17 '
                + search.brute_query.value"
-      onMouseMove="search.q.value='site:lilypond.org +v2.16 '
+      onMouseMove="search.q.value='site:lilypond.org +v2.17 '
                   + search.brute_query.value"
-      onKeyUp="search.q.value='site:lilypond.org +v2.16 '
+      onKeyUp="search.q.value='site:lilypond.org +v2.17 '
               + search.brute_query.value">
   <input type="hidden" name="btnG" value="Zoek met Google">
   <input type="text" name="brute_query" onfocus="this.value=''" value="Zoek">
diff --git a/Documentation/nl/texidocs/GNUmakefile b/Documentation/nl/texidocs/GNUmakefile
deleted file mode 100644 (file)
index 0ffa758..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
index b8de237f632dc54d97f50d45a2f46091fa12ac0b..6e28d6897d6032fdd437e3323fcefdc1362ba87f 100644 (file)
@@ -16,7 +16,7 @@ td { border: 1px solid black; text-align: center; }
 
 @end html
 @end ifhtml
-@emph{Meest recente update Thu May 31 09:12:39 UTC 2012
+@emph{Meest recente update Wed Dec 18 12:23:14 UTC 2013
 }
 @multitable @columnfractions  0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
 
@@ -47,11 +47,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">gedeeltelijk</span>
+<span style="background-color: #1fff1f">ja</span>
 @end html
 @end ifhtml
 @ifnothtml
-gedeeltelijk
+ja
 @end ifnothtml
 @tab na-GDP
 @item
@@ -84,61 +84,61 @@ ja
 @item
 1 Leerboek
 @*
-2535
+2578
 @tab Jan Nieuwenhuizen
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #dfef77">gedeeltelijk (48 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+gedeeltelijk (48 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #25fe1f">gedeeltelijk</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+gedeeltelijk
 @end ifnothtml
 @tab voor-GDP
 @item
 2 Algemene muzieknotatie
 @*
-4187
+4396
 @tab Jan Nieuwenhuizen
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #dfef77">gedeeltelijk (35 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+gedeeltelijk (35 %)
 @end ifnothtml
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #4efe25">gedeeltelijk</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+gedeeltelijk
 @end ifnothtml
 @tab voor-GDP
 @item
 3 Fundamentele concepten
 @*
-11130
+11144
 @tab Jan Nieuwenhuizen
 @tab 
 @tab 
@@ -155,13 +155,67 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #47ff24">gedeeltelijk</span>
+<span style="background-color: #25fe1f">gedeeltelijk</span>
+@end html
+@end ifhtml
+@ifnothtml
+gedeeltelijk
+@end ifnothtml
+@tab voor-GDP
+@item
+4 Tweaking output
+@*
+16191
+@tab Jan Nieuwenhuizen
+@tab 
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #dfef77">gedeeltelijk (98 %)</span>
+@end html
+@end ifhtml
+@ifnothtml
+gedeeltelijk (98 %)
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #40fe23">gedeeltelijk</span>
 @end html
 @end ifhtml
 @ifnothtml
 gedeeltelijk
 @end ifnothtml
 @tab voor-GDP
+@item
+A Templates
+@*
+372
+@tab Jan Nieuwenhuizen
+@tab 
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">ja</span>
+@end html
+@end ifhtml
+@ifnothtml
+ja
+@end ifnothtml
+@tab 
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">ja</span>
+@end html
+@end ifhtml
+@ifnothtml
+ja
+@end ifnothtml
+@tab voor-GDP
 @end multitable
 
 
@@ -194,11 +248,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #5bff27">gedeeltelijk</span>
+<span style="background-color: #1fff1f">ja</span>
 @end html
 @end ifhtml
 @ifnothtml
-gedeeltelijk
+ja
 @end ifnothtml
 @tab na-GDP
 @item
@@ -231,7 +285,7 @@ ja
 @item
 Inleiding
 @*
-4753
+4937
 @tab Jan Nieuwenhuizen
 @tab Tineke de Munnik
 @tab 
@@ -248,7 +302,7 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #47ff24">gedeeltelijk</span>
+<span style="background-color: #5bff27">gedeeltelijk</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -258,7 +312,7 @@ gedeeltelijk
 @item
 Download
 @*
-1211
+1201
 @tab Jan Nieuwenhuizen
 @tab Tineke de Munnik
 @tab 
@@ -275,17 +329,17 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #33ff21">gedeeltelijk</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+gedeeltelijk
 @end ifnothtml
 @tab voor-GDP
 @item
 Handleidingen
 @*
-1214
+1284
 @tab Jan Nieuwenhuizen
 @tab Tineke de Munnik
 @tab 
@@ -302,11 +356,11 @@ ja
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #4efe25">gedeeltelijk</span>
 @end html
 @end ifhtml
 @ifnothtml
-ja
+gedeeltelijk
 @end ifnothtml
 @tab voor-GDP
 @end multitable
index b6f2537a0ab61d376f941eda881ea767f3253369..b682396f9fc8f9a06c15bdf7b12a819ed490d5b8 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: nl -*-
 @ignore
-    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -148,6 +148,44 @@ Lees meer in onze @ref{Inleiding}!
 @ifclear web_version
   @c do nothing
 @end ifclear
+@ifset web_version
+  @c make the box:
+@divId{wildCardBox}
+@subheading Twitter nieuws
+@divId{wildCardText}
+
+@divEnd
+@divEnd
+@end ifset
+
+@html
+
+<script language="JavaScript" type="text/javascript">
+  function loadXMLDoc(dname)
+    {
+      if (window.XMLHttpRequest)
+        {
+          xhttp=new XMLHttpRequest();
+        }
+      else
+        {
+          xhttp=new ActiveXObject("Microsoft.XMLHTTP");
+        }
+      xhttp.open("GET",dname,false);
+      xhttp.send();
+      return xhttp.responseXML;
+    }
+
+  var xmlDoc = loadXMLDoc("tweets.xml");
+  var tweets = xmlDoc.getElementsByTagName("tweet");
+  var index = Math.floor(Math.random() * tweets.length);
+  var tweet = tweets[index];
+  var text = tweet.childNodes[0];
+  document.getElementById("wildCardText").innerHTML = text.nodeValue;
+</script>
+
+@end html
+
 @ifset web_version
   @c make the box:
 @divId{latestVersion}
diff --git a/Documentation/nl/web/GNUmakefile b/Documentation/nl/web/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index a92aa33279b6c85bea94f1796038121324e5d2bb..6306c5d53100de3d785f27192262df104675842b 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
 @ignore
-    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -52,7 +52,7 @@ eerst de informatie over onze @ref{Tekstinvoer}.}
 @c ref is duplicated to avoid underlining ref as image.
 @ref{Unix, @sourceimage{logo-linux,,,}
 @sourceimage{logo-freebsd,,,}}
-@ref{Unix, Unix (Linux en FreeBSD)}
+@ref{Unix, Unix (GNU/Linux en FreeBSD)}
 
 @item
 @ref{MacOS X, @sourceimage{logo-macosx,,,}}
@@ -245,17 +245,17 @@ distributie voor het upgraden naar deze versies.
 @item
 @sourceimage{logo-fedora,,,}
 @uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447,
-Fedora: LilyPond 2.14.1}
+Fedora: LilyPond 2.14.2}
 
 @item
 @sourceimage{logo-ubuntu,,,}
 @uref{http://packages.ubuntu.com/search?keywords=lilypond,
-Ubuntu: LilyPond 2.12.3}
+Ubuntu: LilyPond 2.14.2}
 
 @item
 @sourceimage{logo-slackware,,,}
 @uref{http://www.johannes-schoepfer.de/lilypond/,
-Slackware: LilyPond 2.14.1}
+Slackware: LilyPond 2.14.2}
 
 @item
 @sourceimage{logo-debian,,,}
@@ -307,7 +307,6 @@ acknowledged.
 Voor MacOS 10.4 of nieuwer, met Intel-processors (als je
 twijfelt, gebruik deze).
 
-MacOS X 10.7 Lion wordt nog niet ondersteund.
 
 @item
 @sourceimage{logo-macosx,,,}
@@ -315,7 +314,6 @@ MacOS X 10.7 Lion wordt nog niet ondersteund.
 Voor MacOS 10.4 of nieuwer, met G3- en G4-processors (oudere
 Apple computers).
 
-MacOS X 10.7 Lion wordt nog niet ondersteund.
 
 @end itemize
 
@@ -365,6 +363,7 @@ Maak een bestand genaamd @command{lilypond} met als inhoud
 
 @divClass{h-scroll-auto}
 @example
+#! /bin/bash
 exec @var{MAP}/LilyPond.app/Contents/Resources/bin/lilypond "$@@"
 @end example
 @divEnd
@@ -455,7 +454,7 @@ acknowledged.
 @item
 @sourceimage{logo-windows,,,}
 @downloadStableWindows
-Voor Windows 2000, XP, Vista, en Windows 7.
+Voor Windows 2000, XP, Vista, Windows 7 en 8.
 
 @end itemize
 
index 88294d1f20f85bb88a20063be80b480f755a72f3..6d0ecef888aecd31f33f1b27fc9a0afdb4fe7f85 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: nl; fill-column: 60 -*-
 @c This file is part of web.texi
 @ignore
-    Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
+    Translation of GIT committish: 12c6693055728e69dce5c4e5a4a2b5f71180a5e2
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -470,7 +470,7 @@ kunnen we samen onze doelen bereiken met een fractie van de
 individuele inzet.
 
 @item
-Geef-cultuur: de Vrije Software (of @qq{Open Source})
+@qq{Geef-cultuur}: de Vrije Software
 beweging heeft veel geweldige software projecten opgeleverd,
 zoals @uref{http://kernel.org/, GNU/Linux},
 @uref{http://www.getfirefox.com/, Mozilla Firefox}, en
@@ -479,7 +479,7 @@ ze van deze projecten geprofiteerd hebben, willen sommige
 ontwikkelaars iets @qq{terug doen} voor de community.
 
 @item
-Werkervaring: bijdragen aan open-source projecten is een
+Werkervaring: bijdragen aan vrije software projecten is een
 mooie manier om te oefenen met programmeren, het schrijven
 van documentatie, het vertalen van documentatie, of
 ontwerpen.  Deze ervaring heeft sommige ontwikkelaars zelfs
@@ -538,14 +538,40 @@ uitvoeringen.  Enkele hoogtepunten:
 @divClass{keep-bullets}
 @itemize
 
+Mussorgskys @emph{Schilderijententoonstelling}, geherorchestreerd en
+onder leiding van @uref{http://www.aurelienbello.com/,Aurélien Bello} met
+de @uref{http://www.junge-philharmonie-brandenburg.de/,
+Junge Philharmonie Brandenburg}
+op 10 okt 2011 en opnieuw op 15-16 apr 2012.
+
 @item
-@emph{Affaire étrangère}, een opera van
-@uref{http://valentin.villenave.net/,Valentin Villenave}
-op een frans libretto van
-@uref{http://nl.wikipedia.org/wiki/Lewis_Trondheim, Lewis
-Trondheim}, premiëre op 1 februari, 2009 in
-@uref{http://www.orchestre-montpellier.com/, L'Opéra National de
-Montpellier}, Frankrijk.
+@uref{http://www.kierenmacmillan.info/, Kieren MacMillan}, componist en
+dirigent.  Onder zijn vele recente werken onder andere; @emph{Gaat uw weg},
+uitgevoerd door de @uref{http://www.saltlakechoralartists.org/,
+Salt Lake Choral Artists} in maart 2012; De
+@emph{Juist buiten bereik suite} uitgevoerd
+door het
+@uref{http://www.herald-dispatch.com/news/marshall/x1883873762/Music-duo-Chrysalis-to-perform-at-Marshall-University-on-Jan-19,
+Chrysalis Duo} ; @emph{thrafsmata} uitgevoerd in juli 2011 door het
+@uref{http://www.pnme.org/CurrentSeason/PreviousSeasons.html, Pittsburgh
+New Music Ensemble}.
+
+
+@item
+@emph{Anonieme student compliment of klacht}, door
+@uref{http://www.mikesolomon.org, Mike Solomon}, winnaar gekozen uit
+172 inzendingen uit 22 landen van de
+@uref{http://leftcoastensemble.org/contest, 2011 Linker Kust Compositie Wedstrijd}.
+Andere werken onder andere, Norman (1 jaar) voor solo klarinet, uitgevoerd op het
+@uref{http://emu.music.ufl.edu/fems_concerts.html, Universiteit van Florida}
+Electroacoustisch Muziek Festival (FEMF), oktober 2010.
+
+@item
+Een moderne editie van het @emph{Serenata Erminia} door Alessandro Scarlatti,
+bewerkt door Thomas Griffin, Musicoloog (Rome, Italië).  Uitgevoerd op 22
+oktober 2010 in het Galleria of the Palazzo Zevallos Stigliano, Napels,
+Italië.  @uref{http://www.ascarlatti2010.net, Alessandro Scarlatti 2010},
+ter gelegenheid van de 350ste verjaardag van de componist.
 
 @item
 @uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury
@@ -560,6 +586,15 @@ Frederick Renz met zijn ensemble
 @uref{http://www.earlymusicny.org/, Early Music New York}
 (gravure door Nicolas Sceaux).
 
+@item
+@emph{Affaire étrangère}, een opera van
+@uref{http://valentin.villenave.net/,Valentin Villenave}
+op een frans libretto van
+@uref{http://nl.wikipedia.org/wiki/Lewis_Trondheim, Lewis
+Trondheim}, premiëre op 1 februari, 2009 in
+@uref{http://www.orchestre-montpellier.com/, L'Opéra National de
+Montpellier}, Frankrijk.
+
 @end itemize
 @divEnd
 
@@ -988,7 +1023,7 @@ commando's worden ingevoerd met een backslash.
 @imageFloat{text-input-1-output,png,center}
 
 Verplaatsingen worden gevormd met verschillende benamingen:
-voeg @code{-is} toe voor een kruis en @code{-es} voor een
+voeg @w{@code{-is}} toe voor een kruis en @w{@code{-es}} voor een
 mol.  LilyPond bepaalt zelf waar de toevallige tekens
 geplaatst worden.
 
@@ -1049,6 +1084,31 @@ Verdere informatie is beschikbaar in
 
 @subsubheading Omgevingen voor eenvoudiger bewerken
 
+@ignore
+GNU policy forbids us from linking to non-Free software, so don't
+add such links.
+
+In particular, don't link to:
+- the LilyPond bundle for TextMate (a commercial editor for MacOS).
+
+@end ignore
+
+@divClass{column-center-top}
+@subheading Tunefl
+
+@sourceimage{logo-linux,,,}
+@sourceimage{logo-freebsd,,,}
+@sourceimage{logo-macosx,,,}
+@sourceimage{logo-windows,,,}
+
+@uref{http://www.tunefl.com}
+
+Met tunefl kun je partituren direct online zetten,
+zonder LilyPond op je computer te installeren.  Het is
+mogelijk om alle functies van het programma te proberen
+in een eenvoudige web interface.
+@divEnd
+
 @imageClickable{lilykde-screenshot-small,png,
   (klik om te vergroten),lilykde-screenshot,png,right}
 
@@ -1113,12 +1173,10 @@ point-and-click ondersteuning.
 
 @uref{http://www.frescobaldi.org}
 
-Frescobaldi is een muziek- en teksteditor speciaal voor
-LilyPond met een ingebouwde PDF-viewer, een krachtige
-partituur wizard en vele bewerkingsfuncties.  Het is
-gebaseerd op de KDE4 bibliotheken en draait momenteel op
-alle soorten Linux en andere UNIX-achtige operating
-systemen.
+Frescobaldi is een LilyPond bladmuziek-editor.  Krachtig,
+lichtgewicht en gemakkelijk te gebruiken en met ingebouwde
+PDF viewer.  Het draait op alle belangrijke platformen
+(GNU/Linux, Mac OS X en Windows).
 
 @divEnd
 
@@ -1156,6 +1214,14 @@ gehighlight in het tekstvenster.
 @sourceimage{logo-macosx,,,}
 @sourceimage{logo-windows,,,}
 
+@uref{http://elysium.thsoft.hu}
+
+Elysium is een LilyPond-omgeving (IDE) voor Eclipse met een
+geïntegreerd beeld voor broncode en partituur naast elkaar.
+Het heeft snelle visuele en auditieve terugkoppeling zonder
+te hoeven schakelen, en heeft veel wizard-gebaseerde
+sjablonen.
+
 @uref{http://www.gnu.org/software/emacs/}
 
 Emacs is een teksteditor met taalgevoelige functies voor
@@ -1194,17 +1260,6 @@ van de uitbreidingen die beschikbaar zijn op:
 @uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts}
 @end example
 
-@sourceimage{logo-macosx,,,}
-Er is een LilyPond bundel voor TextMate, een commerciële editor for MacOS.
-Die kan je installeren met:
-
-@example
-mkdir -p /Library/Application\ Support/TextMate/Bundles
-cd /Library/Application\ Support/TextMate/Bundles
-git clone http://github.com/textmate/lilypond.tmbundle.git
-
-@end example
-
 @divEnd
 
 
@@ -1214,20 +1269,22 @@ git clone http://github.com/textmate/lilypond.tmbundle.git
 @subsubheading Score, tab en MIDI-editors:
 
 @itemize
+
 @item
-@uref{http://www.rosegardenmusic.com,Rosegarden}, een audio en
-MIDI-sequencer, die tevens een partituur-editor voor het editen
-van enkelvoudige notenbalken heeft.
+@uref{http://canorus.org,Canorus}, een partituur-editor, kan
+ook exporteren naar LilyPond, maar is nog beta-software.
+Testers zijn welkom.
+
 
 @item
-@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd},
-een partituur editor gebaseerd op de @uref{http://cairographics.org, Cairo}
-bibliotheek en heeft experimentele LilyPond export.
+@uref{http://enc2ly.sourceforge.net/en/,Enc2ly} is een GNU/Linux programma
+dat een @uref{http://www.gvox.com/,Encore} muziek partituur omzet naar LilyPond.
 
 @item
-@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, een
-multi-track tablatuur-editor en -speler, heeft een
-partituur-beeld en tab-beeld en kan exporteren naar LilyPond.
+@uref{https://github.com/hanwen/go-enc2ly,go-enc2ly} is een Go gereedschap dat
+@uref{http://www.gvox.com/,Encore}-bestanden omzet naar LilyPond.  Het is gemaakt, gebruik makend van
+Felipe Castro's onderzoek en reverse engineering door middel van het veranderen van bestaande .enc-bestanden
+en die in te laden met de 4.55 demoversie.
 
 @item
 @uref{http://musescore.org,MuseScore}, een partituur-editor,
@@ -1235,13 +1292,9 @@ heeft onvolledige LilyPond-export maar wordt actief
 ontwikkeld.
 
 @item
-@uref{http://canorus.org,Canorus}, een partituur-editor, kan
-ook exporteren naar LilyPond, maar is nog beta-software.
-Testers zijn welkom.
-
-@item
-@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor},
-een realtime monofonische MIDI naar LilyPond-vertaler.
+@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd},
+een partituur editor gebaseerd op de @uref{http://cairographics.org, Cairo}
+bibliotheek en heeft experimentele LilyPond export.
 
 @item
 @uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,
@@ -1249,6 +1302,24 @@ NW2LY} een a C#-programma dat een
 @uref{http://www.noteworthysoftware.com/, NoteWorthy}-lied naar
 LilyPond converteert.
 
+@uref{https://github.com/ciconia/ripple/blob/master/README.markdown,Ripple} is
+een programma dat helpt bij het maken van partituren en partijen, en heeft een modus voor het samenvoegen van
+verschillende muzikale werken in een enkele partituur of partij.
+
+@item
+@uref{http://www.rosegardenmusic.com,Rosegarden}, een audio en
+MIDI-sequencer, die tevens een partituur-editor voor het editen
+van enkelvoudige notenbalken heeft.
+
+@item
+@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor},
+een realtime monofonische MIDI naar LilyPond-vertaler.
+
+@item
+@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, een
+multi-track tablatuur-editor en -speler, heeft een
+partituur-beeld en tab-beeld en kan exporteren naar LilyPond.
+
 @end itemize
 
 @subsubheading Gereedschappen voor de commandoregel
index ed484064e72243679d51f8d07409e2d69d9b75c8..61db2db59e7d6cbee7c8fb810c550db37bd3a92e 100644 (file)
@@ -128,6 +128,10 @@ tweaks-handleiding.
 
 @itemize
 
+@item
+@ref{Alles}:
+vorige stabiele versies en huidige als gecomprimeerd archief.
+
 @item
 @ref{Vertaald}:
 status van de vertaling voor niet-Engelstaligen.
@@ -202,9 +206,9 @@ informatie.
 
 @docLinks{Beginnen, learning,
   @rlearningnamed{Top,Learning},
-  @manualStableLearningSplit,
-  @manualStableLearningBig, 1.5 MB,
-  @manualStableLearningPdf, 3 MB}
+  @manualStableLearningSplit-nl,
+  @manualStableLearningBig-nl, 1.5 MB,
+  @manualStableLearningPdf-nl, 3 MB}
 
 @divEnd
 
index 098d4f3593a3cb1aea7d783e310761a788987fc8..517c4dc0463a1dcb6185c2b5332fcc78b0fd9be1 100644 (file)
@@ -58,7 +58,6 @@ Appendices
 
 * Notation manual tables::         Tables and charts.
 * Cheat sheet::                    Summary of LilyPond syntax.
-* LilyPond grammar::               Syntax diagram for LilyPond parser.
 * GNU Free Documentation License:: License of this document.
 * LilyPond command index::
 * LilyPond index::
@@ -84,16 +83,6 @@ Appendices
 @include notation/cheatsheet.itely
 
 
-
-@node LilyPond grammar
-@appendix LilyPond grammar
-
-This appendix contains a description of the LilyPond grammar, as
-output from the parser.
-
-@verbatiminclude ly-grammar.txt
-
-
 @include fdl.itexi
 
 
diff --git a/Documentation/notation/GNUmakefile b/Documentation/notation/GNUmakefile
deleted file mode 100644 (file)
index c93c9e0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index 7ef446ee621f16e8c83c4c94aaa2a1f5f77b9fa6..67aefbd86d0fbb92a38dec37565962d91c9f8029 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 
 @node Ancient notation
@@ -170,7 +170,6 @@ Music Glossary:
 * Pre-defined contexts::
 * Ligatures::
 * Custodes::
-* Figured bass support::
 @end menu
 
 
@@ -221,8 +220,8 @@ specific for this particular type of ligature.  By default, the
 above the ligature.
 
 @lilypond[quote,ragged-right,verbatim]
-\transpose c c' {
-  \[ g c a f d' \]
+\relative c'' {
+  \[ g c, a' f d' \]
   a g f
   \[ e f a g \]
 }
@@ -256,7 +255,7 @@ be collected and printed in front of it.
 
 The syntax still uses the deprecated infix style
 @code{\[ music expr \]}.  For consistency reasons, it will eventually
-be changed to postfix style @code{note\[ ... note\]}.
+be changed to postfix style @code{note\[ @dots{} note\]}.
 
 @c Alternatively, the file
 @c @file{gregorian-init.ly} can be included; it provides a scheme
@@ -304,7 +303,7 @@ desired, as shown in the following example:
     \context {
       \Staff
       \consists "Custos_engraver"
-      \override Custos #'style = #'mensural
+      \override Custos.style = #'mensural
     }
   }
 }
@@ -345,21 +344,6 @@ Snippets:
 Internals Reference:
 @rinternals{Custos}.
 
-
-@node Figured bass support
-@unnumberedsubsubsec Figured bass support
-
-There is limited support for figured bass notation from the
-Baroque period; see @ref{Figured bass}.
-
-@seealso
-Music Glossary:
-@rglos{figured bass}.
-
-Notation Reference:
-@ref{Figured bass}.
-
-
 @node Typesetting mensural music
 @subsection Typesetting mensural music
 
@@ -391,13 +375,13 @@ entering the chant, as the following excerpt demonstrates:
 @lilypond[quote,ragged-right,verbatim]
 \score {
   <<
-    \new MensuralVoice = "discantus" \transpose c c' {
-      \override Score.BarNumber #'transparent = ##t {
-        c'1\melisma bes a g\melismaEnd
+    \new MensuralVoice = "discantus" \relative c'' {
+      \hide Score.BarNumber {
+        c1\melisma bes a g\melismaEnd
         f\breve
-        \[ f1\melisma a c'\breve d'\melismaEnd \]
-        c'\longa
-        c'\breve\melisma a1 g1\melismaEnd
+        \[ f1\melisma a c\breve d\melismaEnd \]
+        c\longa
+        c\breve\melisma a1 g1\melismaEnd
         fis\longa^\signumcongruentiae
       }
     }
@@ -422,8 +406,8 @@ The following table shows all mensural clefs that are supported via
 the @code{\clef} command.  Some of the clefs use the same glyph,
 but differ only with respect to the line they are printed on.  In
 such cases, a trailing number in the name is used to enumerate
-these clefs, numbered from the lowest to the highest line.  Still,
-you can manually force a clef glyph to be typeset on an arbitrary
+these clefs, numbered from the lowest to the highest line.
+You can manually force a clef glyph to be typeset on an arbitrary
 line, as described in @ref{Clef}.  The note printed to the right
 side of each clef in the example column denotes the @code{c'} with
 respect to that clef.
@@ -443,12 +427,13 @@ beams, depending on which staff line it is printed.
 mensural C clef
 @tab
 @code{mensural-c1}, @code{mensural-c2},@*
-@code{mensural-c3}, @code{mensural-c4}
+@code{mensural-c3}, @code{mensural-c4},@*
+@code{mensural-c5}
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-c2"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -458,8 +443,8 @@ mensural F clef
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-f"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -469,8 +454,21 @@ mensural G clef
 @tab
 @lilypond[relative=1,notime]
   \clef "mensural-g"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
+@end lilypond
+
+@item
+black mensural C clef
+@tab
+@code{blackmensural-c1}, @code{blackmensural-c2},@*
+@code{blackmensural-c3}, @code{blackmensural-c4},@*
+@code{blackmensural-c5}
+@tab
+@lilypond[relative=1,notime]
+  \clef "blackmensural-c2"
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -480,7 +478,7 @@ neomensural C clef
 @code{neomensural-c3}, @code{neomensural-c4}
 @tab
 @lilypond[relative=1,notime]
-  \clef "neomensural-c2" c
+  \clef "neomensural-c2" c1
 @end lilypond
 
 @item
@@ -493,8 +491,8 @@ petrucci style C clefs, for use on different staff lines
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-c2"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -506,8 +504,8 @@ petrucci style F clefs, for use on different staff lines
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-f3"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 
 @item
@@ -517,8 +515,8 @@ petrucci style G clef
 @tab
 @lilypond[relative=1,notime]
   \clef "petrucci-g"
-  \override NoteHead #'style = #'mensural
-  c
+  \override NoteHead.style = #'mensural
+  c1
 @end lilypond
 @end multitable
 
@@ -558,34 +556,35 @@ to particular time fractions.  In other words, to get a particular mensuration s
 {
   \set Score.timing = ##f
   \set Score.barAlways = ##t
-  s_\markup { "\\time 4/4" }^\markup { "       " \musicglyph
+  \textLengthOn
+  s^\markup { "\\time 4/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural44" }
   s
-  s_\markup { "\\time 2/2" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 2/2" }_\markup { "       " \musicglyph
 #"timesig.neomensural22" }
   s
-  s_\markup { "\\time 6/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 6/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural64" }
   s
-  s_\markup { "\\time 6/8" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 6/8" }_\markup { "       " \musicglyph
 #"timesig.neomensural68" }
   \break
-  s_\markup { "\\time 3/2" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 3/2" }_\markup { "       " \musicglyph
 #"timesig.neomensural32" }
   s
-  s_\markup { "\\time 3/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 3/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural34" }
   s
-  s_\markup { "\\time 9/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 9/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural94" }
   s
-  s_\markup { "\\time 9/8" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 9/8" }_\markup { "       " \musicglyph
 #"timesig.neomensural98" }
   \break
-  s_\markup { "\\time 4/8" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 4/8" }_\markup { "       " \musicglyph
 #"timesig.neomensural48" }
   s
-  s_\markup { "\\time 2/4" }^\markup { "       " \musicglyph
+  s^\markup { "\\time 2/4" }_\markup { "       " \musicglyph
 #"timesig.neomensural24" }
 }
 @end lilypond
@@ -603,18 +602,18 @@ differences in style:
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter default }
 
-  \override Staff.TimeSignature #'style = #'numbered
+  \override Staff.TimeSignature.style = #'numbered
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter numbered }
 
-  \override Staff.TimeSignature #'style = #'mensural
+  \override Staff.TimeSignature.style = #'mensural
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter mensural }
 
-  \override Staff.TimeSignature #'style = #'neomensural
+  \override Staff.TimeSignature.style = #'neomensural
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter neomensural }
-  \override Staff.TimeSignature #'style = #'single-digit
+  \override Staff.TimeSignature.style = #'single-digit
   \time 2/2
   c1^\markup { \hspace #-2.0 \typewriter single-digit }
 }
@@ -637,7 +636,7 @@ example, the ratio of 1@tie{}breve = 3@tie{}semibreves
 (@emph{tempus perfectum}) can be made by hand, by setting
 
 @example
-breveTP = #(ly:make-duration -1 0 3 2)
+breveTP = #(ly:make-duration -1 0 3/2)
 @dots{}
 @{ c\breveTP f1 @}
 @end example
@@ -697,13 +696,13 @@ The following example demonstrates the @code{petrucci} style:
 @lilypond[quote,fragment,ragged-right,verbatim]
 \set Score.skipBars = ##t
 \autoBeamOff
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
 a'\maxima a'\longa a'\breve a'1 a'2 a'4 a'8 a'16 a'
-\override NoteHead #'style = #'semipetrucci
+\override NoteHead.style = #'semipetrucci
 a'\breve*5/6
-\override NoteHead #'style = #'blackpetrucci
+\override NoteHead.style = #'blackpetrucci
 a'8*4/3 a'
-\override NoteHead #'style = #'petrucci
+\override NoteHead.style = #'petrucci
 a'\longa
 @end lilypond
 
@@ -729,22 +728,19 @@ Use the @code{flag-style} property of grob @code{Stem} to
 select ancient flags.  Besides the @code{default} flag style,
 only the @code{mensural} style is supported.
 
-@lilypond[quote,fragment,ragged-right,verbatim]
-\override Flag #'style = #'mensural
-\override Stem #'thickness = #1.0
-\override NoteHead #'style = #'mensural
+@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+\override Flag.style = #'mensural
+\override Stem.thickness = #1.0
+\override NoteHead.style = #'mensural
 \autoBeamOff
-c'8 d'8 e'8 f'8 c'16 d'16 e'16 f'16 c'32 d'32 e'32 f'32 s8
-c''8 d''8 e''8 f''8 c''16 d''16 e''16 f''16 c''32 d''32 e''32 f''32
+c8 d e f c16 d e f c32 d e f s8
+c'8 d e f c16 d e f c32 d e f
 @end lilypond
 
-Note that the innermost flare of each mensural flag always is
+Note that the innermost flare of each mensural flag is
 vertically aligned with a staff line.
 
 There is no particular flag style for neo-mensural or Petrucci notation.
-@c Hence,
-@c when typesetting the incipit of a transcribed piece of mensural
-@c music, the default flag style should be used.
 There are no flags in Gregorian chant notation.
 
 @seealso
@@ -753,11 +749,8 @@ Music Glossary:
 @rglos{flag}.
 
 @knownissues
-The attachment of ancient flags to stems is slightly off.
-@c due to a change in early 2.3.x.
-
 Vertically aligning each flag with a staff line assumes that stems
-always end either exactly on or exactly in the middle between two
+always end either exactly on or exactly in the middle of two
 staff lines.  This may not always be true when using advanced layout
 features of classical notation (which however are typically out of
 scope for mensural notation).
@@ -781,11 +774,11 @@ The following example demonstrates the @code{mensural} and
 
 @lilypond[quote,fragment,ragged-right,verbatim]
 \set Score.skipBars = ##t
-\override Rest #'style = #'classical
+\override Rest.style = #'classical
 r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'mensural
+\override Rest.style = #'mensural
 r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break
-\override Rest #'style = #'neomensural
+\override Rest.style = #'neomensural
 r\longa^"neomensural" r\breve r1 r2 r4 r8 r16
 @end lilypond
 
@@ -835,7 +828,7 @@ The style for accidentals and key signatures is controlled by the
 @code{KeySignature}, respectively; e.g.:
 
 @example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
   #alteration-mensural-glyph-name-alist
 @end example
 
@@ -889,8 +882,8 @@ defined as a convenient shorthand:
 ficta = { \once \set suggestAccidentals = ##t }
 \score { \relative c''
   \new MensuralVoice  {
-       \once \set suggestAccidentals = ##t
-  bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
+    \once \set suggestAccidentals = ##t
+    bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
   }
 }
 @end lilypond
@@ -943,9 +936,9 @@ For example,
 
 @c @example
 @c \set Score.timing = ##f
-@c \set Score.defaultBarType = "empty"
-@c \override NoteHead #'style = #'neomensural
-@c \override Staff.TimeSignature #'style = #'neomensural
+@c \set Score.defaultBarType = "-"
+@c \override NoteHead.style = #'neomensural
+@c \override Staff.TimeSignature.style = #'neomensural
 @c \clef "petrucci-g"
 @c \[ c'\maxima g \]
 @c \[ d\longa c\breve f e d \]
@@ -954,19 +947,19 @@ For example,
 @c @end example
 @lilypond[quote,ragged-right,verbatim]
 \score {
-  \transpose c c' {
+  \relative c' {
     \set Score.timing = ##f
-    \set Score.defaultBarType = "empty"
-    \override NoteHead #'style = #'petrucci
-    \override Staff.TimeSignature #'style = #'mensural
+    \set Score.defaultBarType = "-"
+    \override NoteHead.style = #'petrucci
+    \override Staff.TimeSignature.style = #'mensural
     \clef "petrucci-g"
     \[ c'\maxima g \]
     \[ d\longa
-       \override NoteHead #'ligature-flexa = ##t
-       \once \override NoteHead #'flexa-width = #3.2
+       \override NoteHead.ligature-flexa = ##t
+       \once \override NoteHead.flexa-width = #3.2
        c\breve f e d \]
-    \[ c'\maxima d'\longa \]
-    \[ e'1 a g\breve \]
+    \[ c'\maxima d\longa \]
+    \[ e1 a, g\breve \]
   }
   \layout {
     \context {
@@ -983,19 +976,19 @@ Without replacing @code{Ligature_bracket_engraver} with
 to the following
 
 @lilypond[quote,ragged-right]
-\transpose c c' {
+\relative c' {
   \set Score.timing = ##f
-  \set Score.defaultBarType = "empty"
-  \override NoteHead #'style = #'petrucci
-  \override Staff.TimeSignature #'style = #'mensural
+  \set Score.defaultBarType = "-"
+  \override NoteHead.style = #'petrucci
+  \override Staff.TimeSignature.style = #'mensural
   \clef "petrucci-g"
   \[ c'\maxima g \]
   \[ d\longa
-     \override NoteHead #'ligature-flexa = ##t
-     \once \override NoteHead #'flexa-width = #3.2
+     \override NoteHead.ligature-flexa = ##t
+     \once \override NoteHead.flexa-width = #3.2
      c\breve f e d \]
-  \[ c'\maxima d'\longa \]
-  \[ e'1 a g\breve \]
+  \[ c'\maxima d\longa \]
+  \[ e1 a, g\breve \]
 }
 @end lilypond
 
@@ -1110,12 +1103,11 @@ Editio Vaticana style do clef
 @code{vaticana-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'vaticana.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'vaticana.punctum
   \clef "vaticana-do2"
   c
 @end lilypond
@@ -1126,12 +1118,11 @@ Editio Vaticana style fa clef
 @code{vaticana-fa1}, @code{vaticana-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'vaticana.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'vaticana.punctum
   \clef "vaticana-fa2"
   c
 @end lilypond
@@ -1143,12 +1134,11 @@ Editio Medicaea style do clef
 @code{medicaea-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'medicaea.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'medicaea.punctum
   \clef "medicaea-do2"
   c
 @end lilypond
@@ -1159,12 +1149,11 @@ Editio Medicaea style fa clef
 @code{medicaea-fa1}, @code{medicaea-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'medicaea.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'medicaea.punctum
   \clef "medicaea-fa2"
   c
 @end lilypond
@@ -1176,12 +1165,11 @@ hufnagel style do clef
 @code{hufnagel-do3}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-do2"
   c
 @end lilypond
@@ -1192,12 +1180,11 @@ hufnagel style fa clef
 @code{hufnagel-fa1}, @code{hufnagel-fa2}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'line-count = #4
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.line-count = #4
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-fa2"
   c
 @end lilypond
@@ -1208,11 +1195,10 @@ hufnagel style combined do/fa clef
 @code{hufnagel-do-fa}
 @tab
 @lilypond[relative=1,notime]
-  \override Staff.StaffSymbol #'color = #red
-  \override Staff.LedgerLineSpanner #'color = #red
-  \override Voice.Stem #'transparent = ##t
-  \override Voice.Flag #'transparent = ##t
-  \override NoteHead #'style = #'hufnagel.punctum
+  \override Staff.StaffSymbol.color = #red
+  \override Staff.LedgerLineSpanner.color = #red
+  \hide Voice.Stem
+  \override NoteHead.style = #'hufnagel.punctum
   \clef "hufnagel-do-fa"
   c
 @end lilypond
@@ -1264,7 +1250,7 @@ The style for accidentals and key signatures is controlled by the
 @code{KeySignature}, respectively; e.g.:
 
 @example
-\override Staff.Accidental #'glyph-name-alist =
+\override Staff.Accidental.glyph-name-alist =
   #alteration-mensural-glyph-name-alist
 @end example
 
@@ -1316,7 +1302,7 @@ Therefore, @file{gregorian.ly} also defines @code{\virgula} and
 \score {
   <<
     \context VaticanaVoice {
-      \override TextScript  #'padding = #3
+      \override TextScript.padding = #3
       g a g
       s^\markup { "divisio minima" }
       \divisioMinima
@@ -1384,9 +1370,9 @@ specifically designed for use with notation in
 \include "gregorian.ly"
 \score {
   \new VaticanaVoice {
-    \override TextScript #'font-family = #'typewriter
-    \override TextScript #'font-shape = #'upright
-    \override Script #'padding = #-0.1
+    \override TextScript.font-family = #'typewriter
+    \override TextScript.font-shape = #'upright
+    \override Script.padding = #-0.1
     a\ictus_"ictus " \bar "" \break
     a\circulus_"circulus " \bar "" \break
     a\semicirculus_"semicirculus " \bar "" \break
@@ -1507,7 +1493,7 @@ A note name without any qualifiers will produce a @emph{punctum}.
 All other neumes, including the single-note neumes with a
 different shape such as the @emph{virga}, are in principle
 considered as ligatures and should therefore be placed
-between @code{\[...\]}.
+between @code{\[@dots{}\]}.
 @c Regarding the @emph{punctum}, @code{b} and @code{\[ b \]} are
 @c equivalent.
 
@@ -1642,7 +1628,7 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum
     \[ b \]
   }
@@ -1656,7 +1642,7 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum
     \[ \cavum b \]
   }
@@ -1670,7 +1656,7 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum
     \[ \linea b \]
   }
@@ -1685,7 +1671,7 @@ code}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Auctum Ascendens
     \[ \auctum \ascendens b \]
   }
@@ -1700,7 +1686,7 @@ code}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Auctum Descendens
     \[ \auctum \descendens b \]
   }
@@ -1715,7 +1701,7 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Inclinatum
     \[ \inclinatum b \]
   }
@@ -1730,7 +1716,7 @@ code}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Inclinatum Auctum
     \[ \inclinatum \auctum b \]
   }
@@ -1745,7 +1731,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Punctum Inclinatum Parvum
     \[ \inclinatum \deminutum b \]
   }
@@ -1760,7 +1746,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Virga
     \[ \virga b \]
   }
@@ -1781,7 +1767,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Clivis vel Flexa
     \[ b \flexa g \]
   }
@@ -1797,7 +1783,7 @@ code}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Clivis Aucta Descendens
     \[ b \flexa \auctum \descendens g \]
   }
@@ -1812,7 +1798,7 @@ code}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Clivis Aucta Ascendens
     \[ b \flexa \auctum \ascendens g \]
   }
@@ -1827,7 +1813,7 @@ code}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Cephalicus
     \[ b \flexa \deminutum g \]
   }
@@ -1842,7 +1828,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Podatus vel Pes
     \[ g \pes b \]
   }
@@ -1857,8 +1843,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Pes Auctus Descendens
+  \relative c'' {
+    % Pes Auctus Descendens
     \[ g \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
@@ -1872,7 +1858,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Auctus Ascendens
     \[ g \pes \auctum \ascendens b \]
   }
@@ -1887,8 +1873,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Epiphonus
+  \relative c'' {
+    % Epiphonus
     \[ g \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
@@ -1902,7 +1888,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Initio Debilis
     \[ \deminutum g \pes b \]
   }
@@ -1917,7 +1903,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Auctus Descendens Initio Debilis
     \[ \deminutum g \pes \auctum \descendens b \]
   }
@@ -1939,7 +1925,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Torculus
     \[ a \pes b \flexa g \]
   }
@@ -1954,8 +1940,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Auctus Descendens
+  \relative c'' {
+    % Torculus Auctus Descendens
     \[ a \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
@@ -1969,8 +1955,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Deminutus
+  \relative c'' {
+    % Torculus Deminutus
     \[ a \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -1984,8 +1970,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Initio Debilis
+  \relative c'' {
+    % Torculus Initio Debilis
     \[ \deminutum a \pes b \flexa g \]
   }
 \layout { \neumeDemoLayout }}
@@ -1999,8 +1985,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Auctus Descendens Initio Debilis
+  \relative c'' {
+    % Torculus Auctus Descendens Initio Debilis
     \[ \deminutum a \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2014,8 +2000,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Torculus Deminutus Initio Debilis
+  \relative c'' {
+    % Torculus Deminutus Initio Debilis
     \[ \deminutum a \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2029,7 +2015,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Porrectus
     \[ a \flexa g \pes b \]
   }
@@ -2044,8 +2030,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Porrectus Auctus Descendens
+  \relative c'' {
+    % Porrectus Auctus Descendens
     \[ a \flexa g \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2059,8 +2045,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Porrectus Deminutus
+  \relative c'' {
+    % Porrectus Deminutus
     \[ a \flexa g \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2074,7 +2060,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Climacus
     \[ \virga b \inclinatum a \inclinatum g \]
   }
@@ -2089,8 +2075,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Climacus Auctus
+  \relative c'' {
+    % Climacus Auctus
     \[ \virga b \inclinatum a \inclinatum \auctum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2104,8 +2090,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Climacus Deminutus
+  \relative c'' {
+    % Climacus Deminutus
     \[ \virga b \inclinatum a \inclinatum \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
@@ -2119,7 +2105,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Scandicus
     \[ g \pes a \virga b \]
   }
@@ -2134,8 +2120,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Scandicus Auctus Descendens
+  \relative c'' {
+    % Scandicus Auctus Descendens
     \[ g \pes a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2149,8 +2135,8 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
-       % Scandicus Deminutus
+  \relative c'' {
+    % Scandicus Deminutus
     \[ g \pes a \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
@@ -2171,7 +2157,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Quilisma
     \[ g \pes \quilisma a \pes b \]
   }
@@ -2186,7 +2172,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Quilisma Pes Auctus Descendens
     \[ g \quilisma a \pes \auctum \descendens b \]
   }
@@ -2201,7 +2187,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Oriscus
     \[ \oriscus b \]
   }
@@ -2216,7 +2202,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Quassus
     \[ \oriscus g \pes \virga b \]
   }
@@ -2231,7 +2217,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Pes Quassus Auctus Descendens
     \[ \oriscus g \pes \auctum \descendens b \]
   }
@@ -2246,7 +2232,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Salicus
     \[ g \oriscus a \pes \virga b \]
   }
@@ -2261,7 +2247,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Salicus Auctus Descendens
     \[ g \oriscus a \pes \auctum \descendens b \]
   }
@@ -2276,7 +2262,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Stropha
     \[ \stropha b \]
   }
@@ -2291,7 +2277,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Stropha Aucta
     \[ \stropha \auctum b \]
   }
@@ -2306,7 +2292,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Bistropha
     \[ \stropha b \stropha b \]
   }
@@ -2321,7 +2307,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Tristropha
     \[ \stropha b \stropha b \stropha b \]
   }
@@ -2336,7 +2322,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c'' {
     % Trigonus
     \[ \stropha b \stropha b \stropha a \]
   }
@@ -2415,9 +2401,10 @@ with head prefixes in arbitrary order.
 @menu
 * Kievan contexts::
 * Kievan clefs::
-* Kievan note heads::
+* Kievan notes::
 * Kievan accidentals::
 * Kievan bar line::
+* Kievan melismata::
 @end menu
 
 @node Kievan contexts
@@ -2435,10 +2422,10 @@ values, so you can immediately go ahead entering the chant:
 @lilypond[quote,ragged-right,verbatim]
 \score {
   <<
-    \new KievanVoice = "melody" \transpose c c' {
+    \new KievanVoice = "melody" \relative c' {
       \cadenzaOn
-       c4 c c c c2 b,\longa
-       \bar "kievan"
+        c4 c c c c2 b\longa
+        \bar "k"
     }
     \new Lyrics \lyricsto "melody" {
       Го -- спо -- ди по -- ми -- луй.
@@ -2468,7 +2455,7 @@ It is used to indicate the position of @code{c}:
 
 @lilypond[quote,relative=1,notime,verbatim]
   \clef "kievan-do"
-  \override NoteHead #'style = #'kievan
+  \kievanOn
   c
 @end lilypond
 
@@ -2480,14 +2467,18 @@ Music Glossary:
 Notation Reference:
 @ref{Clef}.
 
-@node Kievan note heads
-@unnumberedsubsubsec Kievan note heads
+@node Kievan notes
+@unnumberedsubsubsec Kievan notes
 
 @cindex note heads, ancient
 
 For Kievan square notation, the appropriate note head style needs
-to be chosen.  This is accomplished by setting the @code{style}
-property of the @code{NoteHead} object to @code{kievan}.
+to be chosen and the flags and stems need to be turned off.
+This is accomplished by calling the @code{\kievanOn} function,
+which sets the appropriate properties of the note head, stems,
+and flags. Once Kievan note heads are not needed, these
+properties can be reverted by calling the @code{\kievanOff}
+function.
 
 The Kievan final note, which usually comes at the end of a piece
 of music, may be selected by setting the duration to
@@ -2499,8 +2490,10 @@ demonstrates the various Kievan note heads:
 @lilypond[quote,fragment,ragged-right,verbatim]
 \autoBeamOff
 \cadenzaOn
-\override NoteHead #'style = #'kievan
+\kievanOn
 b'1 b'2 b'4 b'8 b'\breve b'\longa
+\kievanOff
+b'2
 @end lilypond
 
 @seealso
@@ -2533,8 +2526,7 @@ primarily for the sake of compatibility.
 
 @lilypond[quote,relative=1,notime,verbatim]
 \clef "kievan-do"
-\override NoteHead #'style = #'kievan
-\override Accidental #'glyph-name-alist =
+\override Accidental.glyph-name-alist =
  #alteration-kievan-glyph-name-alist
 bes' dis,
 @end lilypond
@@ -2554,18 +2546,75 @@ Notation Reference:
 
 A decorative figure is commonly placed at the end of a piece of
 Kievan notation, which may be called the Kievan final bar line.
-It can be invoked as @code{\bar "kievan"}.
+It can be invoked as @code{\bar "k"}.
 
 @lilypond[quote,relative=1,notime,verbatim]
+  \kievanOn
   \clef "kievan-do"
-  \override NoteHead #'style = #'kievan
-  c \bar "kievan"
+  c \bar "k"
 @end lilypond
 
 @seealso
 @ref{Bars},
 @ref{The Feta font}
 
+@node Kievan melismata
+@unnumberedsubsubsec Kievan melismata
+
+@cindex Ligatures
+
+Notes within a Kievan melisma are usually placed close to each other
+and the melismata separated by whitespace. This is done to allow
+the chanter to quickly identify the melodic structures of Znamenny
+chant. In LilyPond, melismata are treated as ligatures and the
+spacing is implemented by the @code{Kievan_ligature_engraver}.
+
+When the @code{KievanVoice} and @code{KievanStaff} contexts are used,
+the @code{Kievan_ligature_engraver} is enabled by default. In other
+contexts, it can be invoked by replacing the @code{Ligature_bracket_engraver}
+with the @code{Kievan_ligature_engraver} in the layout block:
+
+@example
+\layout @{
+  \context @{
+    \Voice
+    \remove "Ligature_bracket_engraver"
+    \consists "Kievan_ligature_engraver"
+  @}
+@}
+@end example
+
+The spacing between the notes within a Kievan ligature can be controlled
+by setting the @code{padding} property of the @code{KievanLigature}.
+
+The following example demonstrates the use of Kievan ligatures:
+
+@lilypond[quote,ragged-right,verbatim]
+\score {
+  <<
+    \new KievanVoice = "melody" \relative c' {
+      \cadenzaOn
+        e2 \[ e4( d4 ) \] \[ c4( d e  d ) \] e1 \bar "k"
+    }
+    \new Lyrics \lyricsto "melody" {
+      Га -- врі -- и -- лу
+    }
+  >>
+}
+@end lilypond
+
+@seealso
+Music Glossary:
+@rglos{ligature}.
+
+Notation Reference:
+@ref{White mensural ligatures},
+@ref{Gregorian square neume ligatures},
+@ref{Ligatures}.
+
+@knownissues
+Horizontal spacing of ligatures is poor.
+
 @node Working with ancient music---scenarios and solutions
 @subsection Working with ancient music---scenarios and solutions
 
@@ -2642,7 +2691,7 @@ the @code{Stem_engraver} from the Voice context:
 
 @example
 \layout @{
-  ...
+  @dots{}
   \context @{
     \Voice
       \remove "Stem_engraver"
@@ -2653,12 +2702,9 @@ the @code{Stem_engraver} from the Voice context:
 However, in some transcription styles, stems are used
 occasionally, for example to indicate the transition from a
 single-tone recitative to a fixed melodic gesture.  In these cases,
-one can use either @code{\override Stem #'transparent = ##t} or
-@code{\override Stem #'length = #0} instead, and restore the stem
-when needed with the corresponding @code{\once \override Stem
-#'transparent = ##f} (see example below).  When using stems that
-carry flags, make sure to set @code{\override Flag #'transparent
-= ##t} as well.
+one can use either @code{\hide Stem} or
+@code{\override Stem.length = #0} instead, and restore the stem
+when needed with the corresponding @code{\once \override Stem.transparent = ##f} (see example below).
 
 @b{Timing.} For unmetered chant, there are several alternatives.
 
@@ -2668,12 +2714,12 @@ transparent, will leave an empty space in the score, since the
 invisible signature will still take up space.
 
 In many cases, @code{\set Score.timing = ##f} will give good
-results.  Another alternative is to use @code{\CadenzaOn} and
-@code{\CadenzaOff}.
+results.  Another alternative is to use @code{\cadenzaOn} and
+@code{\cadenzaOff}.
 
 To remove the bar lines, the radical approach is to @code{\remove}
 the Bar_engraver from the Staff context.  Again, one may want to
-use @code{\override BarLine #'transparent = ##t} instead, if an
+use @code{\hide BarLine} instead, if an
 occasional barline is wanted.
 
 A common type of transcription is recitativic chant where the
@@ -2690,9 +2736,9 @@ chant = \relative c' {
 }
 
 verba = \lyricmode {
-  \once \override LyricText #'self-alignment-X = #-1
+  \once \override LyricText.self-alignment-X = #-1
   "Noctem quietam et" fi -- nem per -- fec -- tum
-  \once \override LyricText #'self-alignment-X = #-1
+  \once \override LyricText.self-alignment-X = #-1
   "concedat nobis Dominus" om -- ni -- po -- tens.
 }
 \score {
@@ -2705,8 +2751,7 @@ verba = \lyricmode {
       \Staff
       \remove "Time_signature_engraver"
       \remove "Bar_engraver"
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
+      \hide Stem
     }
   }
 }
@@ -2722,13 +2767,12 @@ score, here in combination with changing stem visibility:
 chant = \relative c' {
   \clef "G_8"
   \set Score.timing = ##f
-  c\breve \override NoteHead #'transparent = ##t  c c c c c
-  \revert NoteHead #'transparent
-  \override Stem #'transparent = ##f \stemUp c4 b4 a
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t c2 c4  \divisioMaior
-  c\breve \override NoteHead #'transparent = ##t c c c c c c c
-  \revert NoteHead #'transparent c4 c f, f \finalis
+  c\breve \hide NoteHead  c c c c c
+  \undo \hide NoteHead
+  \override Stem.transparent = ##f \stemUp c4 b4 a
+  \hide Stem c2 c4  \divisioMaior
+  c\breve \hide NoteHead c c c c c c c
+  \undo \hide NoteHead c4 c f, f \finalis
 }
 
 verba = \lyricmode {
@@ -2745,9 +2789,8 @@ verba = \lyricmode {
     \context {
       \Staff
       \remove "Time_signature_engraver"
-      \override BarLine #'transparent = ##t
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
+      \hide BarLine
+      \hide Stem
     }
   }
 }
@@ -2776,10 +2819,10 @@ adjustments are necessary, this can be easily done with
 @lilypond[verbatim,quote]
 spiritus = \relative c' {
   \time 1/4
-  \override Lyrics.LyricText #'X-extent  = #'(0 . 3)
-  d4 \times 2/3 { f8 a g } g a a4 g f8 e
+  \override Lyrics.LyricText.X-extent  = #'(0 . 3)
+  d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
   d4 f8 g g8 d f g a g f4 g8 a a4  s
-  \times 2/3 { g8 f d } e f g a g4
+  \tuplet 3/2 { g8 f d } e f g a g4
 }
 
 spirLyr = \lyricmode {
@@ -2796,12 +2839,11 @@ spirLyr = \lyricmode {
     \context {
       \Staff
       \remove "Time_signature_engraver"
-      \override BarLine #'X-extent = #'(-1 . 1)
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
-      \override Beam #'transparent = ##t
-      \override BarLine #'transparent = ##t
-      \override TupletNumber #'transparent = ##t
+      \override BarLine.X-extent = #'(-1 . 1)
+      \hide Stem
+      \hide Beam
+      \hide BarLine
+      \hide TupletNumber
     }
   }
 }
@@ -2835,7 +2877,7 @@ TBC
 @c try Till Rettig
 @c Add example of white note heads:
 @c In the french baroque some composers used white note heads in slow pieces,
-@c mainly in 3/2-time.  A quarter looks there like a eighth with a white
+@c mainly in 3/2-time.  A quarter looks there like an eighth with a white
 @c note head.  (Franz-Rudolf Kuhnen)
 
 @c TODO Add example of this:
index f4f2ad0928b539f1f7ead912734ab56b1cf2d68e..3dc39edd9b88e1a238ea2d8bad24895ce4887551 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Changing defaults
 @chapter Changing defaults
@@ -59,7 +59,7 @@ This section describes what contexts are, and how to modify them.
 
 @menu
 * Contexts explained::
-* Creating contexts::
+* Creating and referencing contexts::
 * Keeping contexts alive::
 * Modifying context plug-ins::
 * Changing context default settings::
@@ -114,12 +114,57 @@ further explanation and with links to the IR.
 Contexts are arranged hierarchically:
 
 @menu
+* Output definitions - blueprints for contexts::
 * Score - the master of all contexts::
 * Top-level contexts - staff containers::
 * Intermediate-level contexts - staves::
 * Bottom-level contexts - voices::
 @end menu
 
+@node Output definitions - blueprints for contexts
+@unnumberedsubsubsec Output definitions - blueprints for contexts
+
+This section explains the relevance of output definitions when
+working with contexts.  Examples for actual output definitions are
+given later (see @ref{Changing all contexts of the same type}).
+
+@cindex output definitions
+@funindex \layout
+While music written in a file may refer to context types and
+names, contexts are created only when the music is actually being
+interpreted.  LilyPond interprets music under control of an
+@q{output definition} and may do so for several different output
+definitions, resulting in different output.  The output definition
+relevant for printing music is specified using @code{\layout}.
+
+@funindex \midi
+A much simpler output definition used for producing Midi output is
+specified using @code{\midi}.  Several other output definitions
+are used by LilyPond internally, like when using the part combiner
+(@ref{Automatic part combining}) or creating music quotes
+(@ref{Quoting other voices}).
+
+Output definitions define the relation between contexts as well as
+their respective default settings.  While most changes will
+usually be made inside of a @code{\layout} block, Midi-related
+settings will only have an effect when made within a @code{\midi}
+block.
+
+@funindex autoBeaming
+Some settings affect several outputs: for example, if
+@code{autoBeaming} is turned off in some context, beams count as
+melismata for the purpose of matching music to lyrics as described
+in @ref{Automatic syllable durations}.  This matching is done both
+for printed output as well as for Midi.  If changes made to
+@code{autoBeaming} within a context definition of a @code{\layout}
+block are not repeated in the corresponding @code{\midi} block,
+lyrics and music will get out of sync in Midi.
+
+@seealso
+Installed Files:
+@file{ly/engraver-init.ly}.
+@file{ly/performer-init.ly}.
+
 @node Score - the master of all contexts
 @unnumberedsubsubsec Score - the master of all contexts
 
@@ -130,8 +175,7 @@ such as clefs, time signatures, and key-signatures are aligned
 across staves.
 
 A Score context is instantiated implicitly when a
-@code{\score @{@dots{}@}} or @code{\layout @{@dots{}@}} block is
-processed.
+@code{\score @{@dots{}@}} block is processed.
 
 @node Top-level contexts - staff containers
 @unnumberedsubsubsec Top-level contexts - staff containers
@@ -195,8 +239,10 @@ a piece in mensural style.
 @unnumberedsubsubsec Bottom-level contexts - voices
 
 Voice-level contexts initialise certain properties and start
-appropriate engravers.  Being bottom-level contexts, they cannot
-contain other contexts.
+appropriate engravers.  A bottom-level context is one without
+@code{defaultchild}.  While it is possible to let it
+accept/@/contain subcontexts, they can only be created and entered
+explicitly.
 
 @strong{@emph{Voice}}
 
@@ -268,145 +314,214 @@ context.
 
 @end ignore
 
-@node Creating contexts
-@subsection Creating contexts
-
-@c TODO more complete descriptions rather than learning style
-
-For scores with only one voice and one staff, contexts are
-created automatically.  For more complex scores, it is necessary to
-create them by hand.  There are three commands that do this.
-
-@itemize
-
-@item
-The easiest command is @code{\new}, and it also the quickest to type.
-It is prepended to a music expression, for example
+@node Creating and referencing contexts
+@subsection Creating and referencing contexts
 
 @funindex \new
+@funindex \context
 @cindex new contexts
-@cindex Context, creating
+@cindex referencing contexts
+@cindex Contexts, creating and referencing
+
+LilyPond will create lower-level contexts automatically if a music
+expression is encountered before a suitable context exists, but this
+is usually successful only for simple scores or music fragments like
+the ones in the documentation.  For more complex scores it is
+advisable to specify all contexts explicitly with either the
+@code{\new} or @code{\context} command.  The syntax of
+these two commands is very similar:
 
 @example
-\new @var{type} @var{music expression}
+[\new | \context] @var{Context} [ = @var{name}] [@var{music-expression}]
 @end example
 
 @noindent
-where @var{type} is a context name (like @code{Staff} or
-@code{Voice}).  This command creates a new context, and starts
-interpreting the @var{music expression} with that.
+where either @code{\new} or @code{\context} may be specified.
+@var{Context} is the type of context which is to be created,
+@var{name} is an optional name to be given to the particular context
+being created and @var{music-expression} is a single music expression
+that is to be interpreted by the engravers and performers in this
+context.
 
-A practical application of @code{\new} is a score with many
-staves.  Each part that should be on its own staff, is preceded with
-@code{\new Staff}.
+The @code{\new} prefix without a name is commonly used to create
+scores with many staves:
 
-@lilypond[quote,verbatim,relative=2,ragged-right]
+@lilypond[quote,verbatim,relative=2]
 <<
-  \new Staff { c4 c }
-  \new Staff { d4 d }
+  \new Staff {
+    % leave the Voice context to be created implicitly
+    c4 c
+  }
+  \new Staff {
+    d4 d
+  }
 >>
 @end lilypond
 
-The @code{\new} command may also give a name to the context,
+@noindent
+and to place several voices into one staff:
 
-@example
-\new @var{type} = @var{id} @var{music}
-@end example
-However, this user specified name is only used if there is no other
-context already earlier with the same name.
+@lilypond[quote,verbatim,relative=2]
+<<
+  \new Staff <<
+    \new Voice {
+      \voiceOne
+      c8 c c4 c c
+    }
+    \new Voice {
+      \voiceTwo
+      g4 g g g
+    }
+  >>
+>>
+@end lilypond
 
+@noindent
+@code{\new} should always be used to specify unnamed contexts.
 
-@funindex \context
+The difference between @code{\new} and @code{\context} is in the
+action taken:
 
+@itemize
 @item
-Like @code{\new}, the @code{\context} command also directs a music
-expression to a context object, but gives the context an explicit name.  The
-syntax is
+@code{\new} with or without a name will always create a fresh,
+distinct, context, even if one with the same name already exists:
 
-@example
-\context @var{type} = @var{id} @var{music}
-@end example
+@lilypond[quote,verbatim,relative=2]
+<<
+  \new Staff <<
+    \new Voice = "A" {
+      \voiceOne
+      c8 c c4 c c
+    }
+    \new Voice = "A" {
+      \voiceTwo
+      g4 g g g
+    }
+  >>
+>>
+@end lilypond
 
-This form will search for an existing context of type @var{type}
-called @var{id}.  If that context does not exist yet, a new
-context with the specified name is created.  This is useful if
-the context is referred to later on.  For example, when
-setting lyrics the melody is in a named context
+@item
+@code{\context} with a name specified will create a distinct context
+only if a context of the same type with the same name in the same
+context hierarchy does not already exist.  Otherwise it will be taken
+as a reference to that previously created context, and its music
+expression will be passed to that context for interpretation.
 
-@example
-\context Voice = "@b{tenor}" @var{music}
-@end example
+One application of named contexts is in separating the score layout
+from the musical content.  Either of these two forms is valid:
 
-@noindent
-so the texts can be properly aligned to its notes,
+@lilypond[quote,verbatim]
+\score {
+  <<
+    % score layout
+    \new Staff <<
+      \new Voice = "one" {
+        \voiceOne
+      }
+      \new Voice = "two" {
+        \voiceTwo
+      }
+    >>
 
-@example
-\new Lyrics \lyricsto "@b{tenor}" @var{lyrics}
-@end example
+    % musical content
+    \context Voice = "one" {
+      \relative c'' {
+        c4 c c c
+      }
+    }
+    \context Voice = "two" {
+      \relative c'' {
+        g8 g g4 g g
+      }
+    }
+  >>
+}
+@end lilypond
 
-@noindent
+@lilypond[quote,verbatim]
+\score {
+  <<
+    % score layout
+    \new Staff <<
+      \context Voice = "one" {
+        \voiceOne
+      }
+      \context Voice = "two" {
+        \voiceTwo
+      }
+    >>
 
-Another possible use of named contexts is funneling two different
-music expressions into one context.  In the following example,
-articulations and notes are entered separately,
+    % musical content
+    \context Voice = "one" {
+      \relative c'' {
+        c4 c c c
+      }
+    }
+    \context Voice = "two" {
+      \relative c'' {
+        g8 g g4 g g
+      }
+    }
+  >>
+}
+@end lilypond
 
-@example
-music = @{ c4 c4 @}
-arts = @{ s4-. s4-> @}
-@end example
+@noindent
+Alternatively, variables may be employed to similar effect.  See
+@rlearning{Organizing pieces with variables}.
 
-They are combined by sending both to the same @code{Voice} context,
+@item
+@code{\context} with no name will match the first of any previously
+created contexts of the same type in the same context heirarchy,
+even one that has been given a name, and its music expression will be
+passed to that context for interpretation.  This form is rarely
+useful.  However, @code{\context} with no name and no music expression
+is used to set the context in which a Scheme procedure specified with
+@code{\applyContext} is executed:
 
 @example
-<<
-  \new Staff \context Voice = "A" \music
-  \context Voice = "A" \arts
->>
+\new Staff \relative c' @{
+  c1
+  \context Timing
+  \applyContext #(lambda (ctx)
+                   (newline)
+                   (display (ly:context-current-moment ctx)))
+  c1
+@}
 @end example
-@lilypond[quote,ragged-right]
-music = { c4 c4 }
-arts = { s4-. s4-> }
-\relative c'' <<
-  \new Staff \context Voice = "A" \music
-  \context Voice = "A" \arts
->>
-@end lilypond
 
-With this mechanism, it is possible to define an Urtext (original
-edition), with the option to put several distinct articulations on the
-same notes.
+@end itemize
 
-@cindex creating contexts
+A context must be named if it is to be referenced later, for example
+when lyrics are associated with music:
 
-@item
-The third command for creating contexts is
 @example
-\context @var{type} @var{music}
+\new Voice = "tenor" @var{music}
+@dots{}
+\new Lyrics \lyricsto "tenor" @var{lyrics}
 @end example
 
-
 @noindent
-This is similar to @code{\context} with @code{= @var{id}}, but matches
-any context of type @var{type}, regardless of its given name.
-
-This variant is used with music expressions that can be interpreted at
-several levels.  For example, the @code{\applyOutput} command (see
-@rextend{Running a function on all layout objects}).  Without an explicit
-@code{\context}, it is usually applied to @code{Voice}
+For details of associating lyrics with music see
+@ref{Automatic syllable durations}.
 
-@example
-\applyOutput #'@var{context} #@var{function}   % apply to Voice
-@end example
+The properties of all contexts of a particular type can be modified
+in a @code{\layout} block (with a different syntax), see
+@ref{Changing all contexts of the same type}.  This construct also
+provides a means of keeping layout instructions separate from the
+musical content.  If a single context is to be modified, a @code{\with}
+block must be used, see @ref{Changing just one specific context}.
 
-To have it interpreted at the @code{Score} or @code{Staff} level use
-these forms
+@seealso
+Learning Manual:
+@rlearning{Organizing pieces with variables}.
 
-@example
-\applyOutput #'Score #@var{function}
-\applyOutput #'Staff #@var{function}
-@end example
+Notation Reference:
+@ref{Changing just one specific context},
+@ref{Automatic syllable durations}.
 
-@end itemize
 
 @node Keeping contexts alive
 @subsection Keeping contexts alive
@@ -426,12 +541,12 @@ an earlier context.
 
 There is an exception to this general rule: just one of the
 @code{Voice} contexts in a @code{Staff} context or in a
-@code{<<...>>} construct will always persist to the end of the
-enclosing @code{Staff} context or @code{<<...>>} construct, even
+@code{<<@dots{}>>} construct will always persist to the end of the
+enclosing @code{Staff} context or @code{<<@dots{}>>} construct, even
 though there may be periods when it has nothing to do.  The context
 to persist in this way will be the first one encountered in the
-first enclosed @code{@{...@}} construct, ignoring any in enclosed
-@code{<<...>>} constructs.
+first enclosed @code{@{@dots{}@}} construct, ignoring any in enclosed
+@code{<<@dots{}>>} constructs.
 
 Any context can be kept alive by ensuring it has something to do at
 every musical moment.  @code{Staff} contexts are kept alive by
@@ -602,7 +717,7 @@ modifying it,
   @emph{etc.}
 @}
 @{
-  @emph{..music..}
+  @emph{@dots{}music@dots{}}
 @}
 @end example
 
@@ -648,14 +763,16 @@ time signature.
     \new Staff \with {
       \consists "Timing_translator"
       \consists "Default_bar_line_engraver"
-    } {
+    }
+    \relative c'' {
         \time 3/4
         c4 c c c c c
     }
   \new Staff \with {
     \consists "Timing_translator"
     \consists "Default_bar_line_engraver"
-  } {
+  }
+  \relative c'' {
       \time 2/4
       c4 c c c c c
   }
@@ -731,9 +848,15 @@ default values in just one particular instance of a context.
 @funindex \context
 @funindex \layout
 
-The context settings which are to be used by default in
+The default context settings which are to be used for typesetting in
 @code{Score}, @code{Staff}, @code{Voice} and other contexts may be
-specified in a @code{\context} block within any @code{\layout} block.
+specified in a @code{\context} block within any @code{\layout}
+block.
+
+Settings for Midi output as opposed to typesetting will have to be
+separately specified in @code{\midi} blocks (see @ref{Output
+definitions - blueprints for contexts}).
+
 The @code{\layout} block should be placed within the @code{\score}
 block to which it is to apply, after the music.
 
@@ -765,7 +888,7 @@ An @code{\override} command, but with the context name omitted
   \layout {
     \context {
       \Staff
-      \override Stem #'thickness = #4.0
+      \override Stem.thickness = #4.0
     }
   }
 }
@@ -791,7 +914,7 @@ Directly setting a context property
 
 @item
 A predefined command such as @code{\dynamicUp} or a music
-expression like @code{\accidentalStyle "dodecaphonic"}
+expression like @code{\accidentalStyle dodecaphonic}
 
 @lilypond[quote,verbatim]
 \score {
@@ -806,7 +929,7 @@ expression like @code{\accidentalStyle "dodecaphonic"}
     }
     \context {
       \Staff
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
     }
   }
 }
@@ -858,9 +981,9 @@ the same command written in the music stream.
     }
   }
   \layout {
-    \accidentalStyle "dodecaphonic"
+    \accidentalStyle dodecaphonic
     \set fontSize = #-4
-    \override Voice.Stem #'thickness = #4.0
+    \override Voice.Stem.thickness = #4.0
   }
 }
 @end lilypond
@@ -880,14 +1003,16 @@ must be placed immediately after the @code{\new} @var{context-type}
 command:
 
 @example
-\new Staff
-\with @{
-  [context settings for this context instance only]
-@} @{
-...
+\new Staff \with @{ [context settings for this context instance only] @}
+@{
+  @dots{}
 @}
 @end example
 
+Since such a @q{context modification} is specified inside of
+music, it will affect @emph{all} outputs (typesetting @emph{and}
+Midi) as opposed to changes within an output definition.
+
 The following types of settings may be specified:
 
 @itemize
@@ -897,10 +1022,7 @@ An @code{\override} command, but with the context name omitted
 @lilypond[quote,verbatim]
 \score {
   \new Staff {
-    \new Voice
-    \with {
-      \override Stem #'thickness = #4.0
-    }
+    \new Voice \with { \override Stem.thickness = #4.0 }
     {
       \relative c'' {
         a4^"Thick stems" a a a
@@ -923,10 +1045,8 @@ Directly setting a context property
         a4 a a a
       }
     }
-    \new Staff
-    \with {
-      fontSize = #-4
-    } {
+    \new Staff \with { fontSize = #-4 }
+    {
       \relative c'' {
         a4^"Smaller font" a a a
         a4 a a a
@@ -950,11 +1070,9 @@ A predefined command such as @code{\dynamicUp}
         }
       }
     }
-    \new Staff
-    \with { \accidentalStyle "dodecaphonic" }
+    \new Staff \with { \accidentalStyle dodecaphonic }
     {
-      \new Voice
-      \with { \dynamicUp }
+      \new Voice \with { \dynamicUp }
       {
         \relative c'' {
           a4^"Dynamics above" a a a
@@ -985,7 +1103,8 @@ on the context initiation statement is used,
 
 @item
 otherwise the default value taken from the most recent appropriate
-@code{\context} block in the @code{\layout} blocks is used,
+@code{\context} block in the @code{\layout} or @code{\midi} blocks
+is used,
 
 @item
 otherwise the LilyPond built-in default is used.
@@ -1000,7 +1119,7 @@ Notation Reference:
 @ref{Bottom-level contexts - voices},
 @ref{The set command},
 @ref{The override command},
-@ref{The \layout block}.
+@ref{The layout block,,The @code{@bs{}layout} block}.
 
 
 @node Defining new contexts
@@ -1022,7 +1141,7 @@ Notation Reference:
 @funindex \denies
 @funindex denies
 
-Specific contexts, like @code{Staff} and @code{Voice}, are made of
+Specific contexts, like @code{Staff} and @code{Voice}, are made from
 simple building blocks.  It is possible to create new types of
 contexts with different combinations of engraver plug-ins.
 
@@ -1040,9 +1159,8 @@ to indicate improvisation in jazz pieces,
   \consists "Text_engraver"
   \consists "Pitch_squash_engraver"
   squashedPosition = #0
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Stem
   \alias Voice
 }
 \context { \Staff
@@ -1077,45 +1195,53 @@ First it is necessary to define a name for the new context:
 \name ImproVoice
 @end example
 
-Since it is similar to the @code{Voice}, we want commands that work
-on (existing) @code{Voice}s to remain working.  This is achieved by
-giving the new context an alias @code{Voice},
+Since it is similar to the @code{Voice} context, we want commands that
+work in (existing) @code{Voice} contexts to continue working.  This is
+achieved by giving the new context an alias of @code{Voice},
 
 @example
 \alias Voice
 @end example
 
 The context will print notes and instructive texts, so we need to add
-the engravers which provide this functionality,
+the engravers which provide this functionality, plus the engraver which
+groups notes, stems and rests which occur at the same musical moment
+into columns,
 
 @example
 \consists "Note_heads_engraver"
 \consists "Text_engraver"
+\consists "Rhythmic_column_engraver"
 @end example
 
-but we only need this on the center line,
+The note heads should all be placed on the center line,
 
 @example
 \consists "Pitch_squash_engraver"
 squashedPosition = #0
 @end example
 
-The @rinternals{Pitch_squash_engraver} modifies note heads (created
-by @rinternals{Note_heads_engraver}) and sets their vertical
-position to the value of @code{squashedPosition}, in this case@tie{}@code{0},
-the center line.
+The @code{Pitch_squash_engraver} modifies note heads (created
+by the @code{Note_heads_engraver}) and sets their vertical
+position to the value of @code{squashedPosition}, in this
+case@tie{}@code{0}, the center line.
 
 The notes look like a slash, and have no stem,
 
 @example
-\override NoteHead #'style = #'slash
-\override Stem #'transparent = ##t
-\override Flag #'transparent = ##t
+\override NoteHead.style = #'slash
+\hide Stem
 @end example
 
-All these plug-ins have to cooperate, and this is achieved with a
-special plug-in, which must be marked with the keyword @code{\type}.
-This should always be @code{Engraver_group}.
+All these plug-ins have to communicate under the control of the
+context.  The mechanisms with which contexts communicate are
+established by declaring the context @code{\type}.  Within a
+@code{\layout} block, most contexts will be of type
+@code{Engraver_group}.  Some special contexts and contexts in
+@code{\midi} blocks use other context types.  Copying and
+modifying an existing context definition will also fill in the
+type.  Since this example creates a definition from scratch, it
+needs to be specified explicitly.
 
 @example
 \type "Engraver_group"
@@ -1129,20 +1255,20 @@ Put together, we get
   \type "Engraver_group"
   \consists "Note_heads_engraver"
   \consists "Text_engraver"
+  \consists "Rhythmic_column_engraver"
   \consists "Pitch_squash_engraver"
   squashedPosition = #0
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Stem
   \alias Voice
 @}
 @end example
 
 @funindex \accepts
-Contexts form hierarchies.  We want to hang the @code{ImproVoice}
-under @code{Staff}, just like normal @code{Voice}s.  Therefore, we
-modify the @code{Staff} definition with the @code{\accepts}
-command,
+Contexts form hierarchies.  We want to place the @code{ImproVoice}
+context within the @code{Staff} context, just like normal @code{Voice}
+contexts.  Therefore, we modify the @code{Staff} definition with the
+@code{\accepts} command,
 
 @example
 \context @{
@@ -1184,6 +1310,19 @@ Then the output at the start of this subsection can be entered as
 @}
 @end example
 
+To complete this example, changes affecting the context hierarchy
+should be repeated in a @code{\midi} block so that Midi output
+depends on the same context relations.
+
+@seealso
+
+Internals Reference:
+@rinternals{Engraver_group},
+@rinternals{Note_heads_engraver},
+@rinternals{Text_engraver},
+@rinternals{Rhythmic_column_engraver},
+@rinternals{Pitch_squash_engraver}.
+
 
 @node Context layout order
 @subsection Context layout order
@@ -1240,9 +1379,23 @@ another, but the required nesting differs.  For example, the
 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.
+@cindex contexts, implicit
+@cindex implicit contexts
+@funindex \defaultchild
+
+Note that a context will be silently created implicitly if a
+command is encountered when there is no suitable context available
+to contain it.
+
+Within a context definition, the type of subcontext to be
+implicitly created is specified using @code{\defaultchild}.  A
+number of music events require a @samp{Bottom} context: when such
+an event is encountered, subcontexts are created recursively until
+reaching a context with no @samp{defaultchild} setting.
+
+Implicit context creation can at times give rise to unexpected new
+staves or scores.  Using @code{\new} to create contexts explicitly
+avoids those problems.
 
 @cindex alignAboveContext
 @cindex alignBelowContext
@@ -1562,14 +1715,14 @@ fingering away from the note head.  The following command inserts
 3 staff spaces of white
 between the note and the fingering:
 @example
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
 @end example
 
 Inserting this command before the Fingering object is created,
 i.e., before @code{c2}, yields the following result:
 
 @lilypond[quote,relative=2,verbatim]
-\once \override Voice.Fingering #'padding = #3
+\once \override Voice.Fingering.padding = #3
 c-2
 \stemUp
 f
@@ -1667,7 +1820,7 @@ discuss the functionality of this command.
 The command
 
 @verbatim
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
 @end verbatim
 
 @noindent
@@ -1678,7 +1831,7 @@ appearance.  Here we see the command in action:
 
 @lilypond[quote,verbatim,relative=2]
 c4
-\override Staff.Stem #'thickness = #4.0
+\override Staff.Stem.thickness = #4.0
 c4
 c4
 c4
@@ -1694,7 +1847,7 @@ causing the default context @code{Voice} to be used.  Adding
 
 @lilypond[quote,verbatim,relative=2]
 c4
-\once \override Stem #'thickness = #4.0
+\once \override Stem.thickness = #4.0
 c4
 c4
 @end lilypond
@@ -1705,9 +1858,9 @@ or beams, the @code{\override} command must be executed at the moment
 when the object is created.  In this example,
 
 @lilypond[quote,verbatim,relative=2]
-\override Slur #'thickness = #3.0
+\override Slur.thickness = #3.0
 c8[( c
-\override Beam #'beam-thickness = #0.6
+\override Beam.beam-thickness = #0.6
 c8 c])
 @end lilypond
 
@@ -1721,8 +1874,8 @@ affects settings that were made in the same context.  In other words, the
 @code{\revert} in the next example does not do anything.
 
 @example
-\override Voice.Stem #'thickness = #4.0
-\revert Staff.Stem #'thickness
+\override Voice.Stem.thickness = #4.0
+\revert Staff.Stem.thickness
 @end example
 
 Some tweakable options are called @q{subproperties} and reside inside
@@ -1737,7 +1890,7 @@ properties.  To tweak those, use commands of the form
 such as
 
 @example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
+\override Stem.details.beamed-lengths = #'(4 4 3)
 @end example
 
 @end ignore
@@ -1893,14 +2046,14 @@ Translation @expansion{} Tunable context properties.
 Internals Reference:
 @rinternals{Tunable context properties}.
 
-@cindex grob properties
-@cindex properties, grob
-@funindex \override
-
 
 @node The override command
 @subsection The @code{\override} command
 
+@cindex grob properties
+@cindex properties, grob
+@funindex \override
+
 There is a special type of context property: the grob
 description.  Grob descriptions are named in @code{StudlyCaps}
 (starting with capital letters).  They contain the
@@ -1909,36 +2062,19 @@ association list.  See @file{scm/define-grobs.scm}
 to see the settings for each grob description.  Grob descriptions
 are modified with @code{\override}.
 
-@code{\override} is actually a shorthand;
-
-@example
-\override @var{context}.@var{GrobName} #'@var{property} = #@var{value}
-@end example
-
-@noindent
-is more or less equivalent to
+The syntax for the @code{\override} command is
 
-@c  leave this long line -gp
 @example
-\set @var{context}.@var{GrobName}  =
-  #(cons (cons '@var{property} @var{value})
-         <previous value of @var{context}.@var{GrobName}>)
+\override [@var{context}.]@var{GrobName}.@var{property} = #@var{value}
 @end example
 
-The value of @code{context}.@code{GrobName} (the alist) is used to initialize
-the properties of individual grobs.  Grobs have
-properties, named in Scheme style, with
-@code{dashed-words}.  The values of grob properties change
-during the formatting process: formatting basically amounts
-to computing properties using callback functions.
-
 For example, we can increase the thickness of a note stem by
 overriding the @code{thickness} property of the @code{Stem}
 object:
 
 @lilypond[quote,verbatim,relative=2]
 c4 c
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 c4 c
 @end lilypond
 
@@ -1946,11 +2082,11 @@ If no context is specified in an @code{\override}, the bottom
 context is used:
 
 @lilypond[quote,verbatim,relative=2]
-{ \override Staff.Stem #'thickness = #3.0
+{ \override Staff.Stem.thickness = #3.0
   <<
     {
       e4 e
-      \override Stem #'thickness = #0.5
+      \override Stem.thickness = #0.5
       e4 e
     } \\ {
       c4 c c c
@@ -1959,17 +2095,39 @@ context is used:
 }
 @end lilypond
 
+Some tweakable options are called @q{subproperties} and reside inside
+properties.  To tweak those, use commands in the form
+
+@example
+\override Stem.details.beamed-lengths = #'(4 4 3)
+@end example
+
+or to modify the ends of spanners, use a form like these
+
+@example
+\override TextSpanner.bound-details.left.text = #"left text"
+\override TextSpanner.bound-details.right.text = #"right text"
+@end example
+
 @funindex \revert
 @cindex reverting overrides
 @cindex overrides, reverting
 
-The effects of @code{\override} can be undone by @code{\revert}:
+The effects of @code{\override} can be undone by @code{\revert}.
+
+The syntax for the @code{\revert} command is
+
+@example
+\revert [@var{context}.]@var{GrobName}.@var{property}
+@end example
+
+For example,
 
 @lilypond[quote,verbatim,relative=2]
 c4
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 c4 c
-\revert Voice.Stem #'thickness
+\revert Voice.Stem.thickness
 c4
 @end lilypond
 
@@ -1981,11 +2139,11 @@ grobs in the affected context from the current time forward:
   <<
     {
       e4
-      \override Staff.Stem #'thickness = #3.0
+      \override Staff.Stem.thickness = #3.0
       e4 e e
     } \\ {
       c4 c c
-      \revert Staff.Stem #'thickness
+      \revert Staff.Stem.thickness
       c4
     }
   >>
@@ -2002,11 +2160,11 @@ to affect only the current time step:
 {
   <<
     {
-      \override Stem #'thickness = #3.0
+      \override Stem.thickness = #3.0
       e4 e e e
     } \\ {
       c4
-      \once \override Stem #'thickness = #3.0
+      \once \override Stem.thickness = #3.0
       c4 c c
     }
   >>
@@ -2018,7 +2176,7 @@ to affect only the current time step:
 Commands which change output generally look like
 
 @example
-\override Voice.Stem #'thickness = #3.0
+\override Voice.Stem.thickness = #3.0
 @end example
 
 @noindent
@@ -2031,13 +2189,6 @@ To construct this tweak we must determine these bits of information:
 @item a sensible value: here @code{3.0}.
 @end itemize
 
-Some tweakable options are called @q{subproperties} and reside inside
-properties.  To tweak those, use commands in the form
-
-@example
-\override Stem #'(details beamed-lengths) = #'(4 4 3)
-@end example
-
 @cindex internal documentation
 @cindex finding graphical objects
 @cindex graphical object descriptions
@@ -2074,7 +2225,7 @@ accomplished with the @code{\tweak} command, which has the following
 syntax:
 
 @example
-\tweak @var{layout-object} #'@var{grob-property} @var{value}
+\tweak [@var{layout-object}.]@var{grob-property} @var{value}
 @end example
 
 Specifying @var{layout-object} is optional.
@@ -2089,19 +2240,19 @@ For example:
 
 @lilypond[relative=2,verbatim,quote]
 < c
-  \tweak #'color #red
+  \tweak color #red
   d
   g
-  \tweak #'duration-log #1
+  \tweak duration-log #1
   a
 > 4
--\tweak #'padding #8
+-\tweak padding #8
 -^
 @end lilypond
 
 
 
-But the main use of the @code{\tweak} command is to modify just
+The main use of the @code{\tweak} command is to modify just
 one of a number of notation elements which start at the same musical
 moment, like the notes of a chord, or tuplet brackets which start
 at the same time.
@@ -2123,14 +2274,14 @@ note, and able to modify it.
 So, this works:
 
 @lilypond[relative=2,verbatim,quote]
-<\tweak #'color #red c>4
+<\tweak color #red c>4
 @end lilypond
 
 @noindent
 but this does not:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
+\tweak color #red c4
 @end lilypond
 
 @end ignore
@@ -2161,10 +2312,10 @@ note head are modified within a single chord:
 
 @lilypond[relative=2,verbatim,quote]
 < c
-  \tweak #'color #red
+  \tweak color #red
   d
   g
-  \tweak #'duration-log #1
+  \tweak duration-log #1
   a
 > 4
 @end lilypond
@@ -2172,7 +2323,7 @@ note head are modified within a single chord:
 @code{\tweak} can be used to modify slurs:
 
 @lilypond[verbatim,quote,relative=1]
-c-\tweak #'thickness #5 ( d e f)
+c-\tweak thickness #5 ( d e f)
 @end lilypond
 
 
@@ -2184,9 +2335,9 @@ only acts as a container, and all layout objects are created from events
 inside of the @code{EventChord}:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak #'color #red c4
-\tweak #'color #red <c e>4
-<\tweak #'color #red c e>4
+\tweak color #red c4
+\tweak color #red <c e>4
+<\tweak color #red c e>4
 @end lilypond
 
 The simple @code{\tweak} command cannot be used to modify any object
@@ -2196,13 +2347,14 @@ beams or accidentals, since these are generated later by
 @code{NoteHead} layout objects rather than by music elements in the
 input stream.
 
-Such indirectly created layout objects can be tweaked using the explicit
-form of the @code{\tweak} command:
+Such indirectly created layout objects can be tweaked using the form
+of the @code{\tweak} command in which the grob name is specified
+explicitly:
 
 @lilypond[relative=2,verbatim,quote]
-\tweak Stem #'color #red
-\tweak Beam #'color #green c8 e
-<c e \tweak Accidental #'font-size #-3 ges>4
+\tweak Stem.color #red
+\tweak Beam.color #green c8 e
+<c e \tweak Accidental.font-size #-3 ges>4
 @end lilypond
 
 @code{\tweak} cannot be used to modify clefs or time
@@ -2215,10 +2367,10 @@ notational element -- all affect it:
 
 @lilypond[verbatim,quote,relative=1]
 c
--\tweak #'style #'dashed-line
--\tweak #'dash-fraction #0.2
--\tweak #'thickness #3
--\tweak #'color #red
+-\tweak style #'dashed-line
+-\tweak dash-fraction #0.2
+-\tweak thickness #3
+-\tweak color #red
  \glissando
 f'
 @end lilypond
@@ -2249,20 +2401,60 @@ one encountered in the input file.
 @node set versus override
 @subsection @code{\set} vs. @code{\override}
 
-@c TODO -- This section is probably unnecessary now.
-
-@ignore
-We have seen two methods of changing properties: @code{\set} and
-@code{\override}.  There are actually two different kinds of
-properties.
-
-@code{fontSize} is a special property: it is equivalent to
-entering @code{\override ... #'font-size} for all pertinent
-objects.  Since this is a common change, the special
-property (modified with @code{\set}) was created.
-
-@end ignore
+@c TODO Should't a bunch of that be explained earlier?
 
+@funindex \set
+@funindex \override
+Both @code{\set} and @code{\override} manipulate properties
+associated with contexts.  In either case, properties heed the
+hierarchy of contexts: properties not set in a context itself show
+the values of the respective parent context.
+
+Values and lifetime of context properties are dynamic and only
+available when music is being interpreted, @q{iterated}.  At the
+time of context creation, properties are initialized from the
+corresponding context definition and possible context
+modifications.  Afterwards, changes are achieved with
+property-setting commands in the music itself.
+
+Now grob definitions are a special category of context properties.
+Since their structure, bookkeeping and use is different from
+ordinary context properties, they are accessed with a different
+set of commands, and treated separately in the documentation.
+
+As opposed to plain context properties, grob definitions are
+subdivided into grob properties.  A @qq{grob} (graphical object)
+is usually created by an engraver at the time of interpreting a
+music expression and receives its initial properties from the
+current grob definition of the engraver's context.  The engraver
+(or other @q{backend} parts of LilyPond) may subsequently add or
+change properties to the grob, but that does not affect the
+context's grob definition.
+
+What we call @q{grob properties} in the context of user-level
+tweaking are actually the properties of a context's grob
+definition.  In contrast to ordinary context properties, grob
+definitions have the bookkeeping required to keep track of its
+parts, the individual grob properties (and even subproperties of
+them) separately so that it is possible to define those parts in
+different contexts and have the overall grob definition at the
+time of grob creation be assembled from pieces provided in
+different contexts among the current context and its parents.
+
+Grob definitions are manipulated using @code{\override} and
+@code{\revert} and have a name starting with a capital letter
+(like @samp{NoteHead}) whereas ordinary context properties are
+manipulated using @code{\set} and @code{\unset} and are named
+starting with a lowercase letter.
+
+@cindex tweak, relation to @code{\override}
+@funindex \tweak
+@funindex \overrideProperty
+The special commands @code{\tweak} and @code{\overrideProperty}
+change grob properties bypassing context properties completely.
+Instead they catch grobs as they are being created and then
+directly set properties on them when they originate from a tweaked
+music event or are of a particular kind, respectively.
 
 @node Modifying alists
 @subsection Modifying alists
@@ -2311,7 +2503,7 @@ key individually, use a @emph{nested declaration}:
 % reduced space between staves
 \new PianoStaff \with {
   % this is the nested declaration
-  \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
+  \override StaffGrouper.staff-staff-spacing.basic-distance = #7
 } <<
   \new Staff { \clef treble c''1 }
   \new Staff { \clef bass   c1   }
@@ -2330,7 +2522,7 @@ completely re-defined with one declaration, as an alist:
 
 @lilypond[quote,verbatim]
 \new PianoStaff \with {
-  \override StaffGrouper #'staff-staff-spacing =
+  \override StaffGrouper.staff-staff-spacing =
     #'((basic-distance . 0)
        (minimum-distance . 0)
        (padding . 0)
@@ -2349,10 +2541,10 @@ of @code{basic-distance} when unset).  Thus the following two
 declarations are equivalent:
 
 @example
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
   #'((basic-distance . 7))
 
-\override StaffGrouper #'staff-staff-spacing =
+\override StaffGrouper.staff-staff-spacing =
   #'((basic-distance . 7)
      (minimum-distance . 0)
      (padding . 0)
@@ -2506,7 +2698,13 @@ left, right or center; etc.  Most of these choices may be left to
 be determined automatically by LilyPond, but in some cases it may
 be desirable to force a particular direction or placement.
 
-@strong{Articulation direction indicators}
+@menu
+* Articulation direction indicators::
+* The direction property::
+@end menu
+
+@node Articulation direction indicators
+@unnumberedsubsubsec Articulation direction indicators
 
 By default some directions are always up or always down (e.g.
 dynamics or fermata), while other things can alternate between
@@ -2539,7 +2737,8 @@ c2( c)
 c2^( c)
 @end lilypond
 
-@strong{The direction property}
+@node The direction property
+@unnumberedsubsubsec The direction property
 
 The position or direction of many layout objects is controlled by the
 @code{direction} property.
@@ -2678,7 +2877,7 @@ for @code{'line-positions}.}
 
 @lilypond[verbatim,quote,relative=1]
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
+  \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
 }
 { a4 e' f b | d1 }
 @end lilypond
@@ -2689,7 +2888,7 @@ this setting.
 
 @lilypond[verbatim,quote,relative=1]
 \new Staff \with {
-  \override StaffSymbol #'width = #23
+  \override StaffSymbol.width = #23
 }
 { a4 e' f b | d1 }
 @end lilypond
@@ -2709,11 +2908,17 @@ All spanners support the @code{spanner-interface}.  A few, essentially
 those that draw a straight line between the two objects, support in
 addition the @code{line-spanner-interface}.
 
+@menu
+* Using the spanner-interface::
+* Using the line-spanner-interface::
+@end menu
+
+@node Using the spanner-interface
 @unnumberedsubsubsec Using the @code{spanner-interface}
 
 This interface provides two properties that apply to several spanners.
 
-@strong{@i{The @code{minimum-length} property}}
+@subsubsubheading The @code{minimum-length} property
 
 The minimum length of the spanner is specified by the
 @code{minimum-length} property.  Increasing this usually has the
@@ -2744,11 +2949,11 @@ Works not at all for:
 @end ignore
 
 @lilypond[verbatim,quote,relative=2]
-a~a
+a~ a
 a
 % increase the length of the tie
--\tweak #'minimum-length #5
-~a
+-\tweak minimum-length #5
+~ a
 @end lilypond
 
 @lilypond[verbatim,quote,relative=2]
@@ -2756,7 +2961,7 @@ a1
 \compressFullBarRests
 R1*23
 % increase the length of the rest bar
-\once \override MultiMeasureRest #'minimum-length = #20
+\once \override MultiMeasureRest.minimum-length = #20
 R1*23
 a1
 @end lilypond
@@ -2764,7 +2969,7 @@ a1
 @lilypond[verbatim,quote,relative=2]
 a \< a a a \!
 % increase the length of the hairpin
-\override Hairpin #'minimum-length = #20
+\override Hairpin.minimum-length = #20
 a \< a a a \!
 @end lilypond
 
@@ -2772,15 +2977,15 @@ This override can also be used to increase the length of slurs and
 phrasing slurs:
 
 @lilypond[verbatim,quote,relative=2]
-a( a)
+a( g)
 a
--\tweak #'minimum-length #5
-( a)
+-\tweak minimum-length #5
+( g)
 
-a\( a\)
+a\( g\)
 a
--\tweak #'minimum-length #5
-\( a\)
+-\tweak minimum-length #5
+\( g\)
 @end lilypond
 
 For some layout objects, the @code{minimum-length} property becomes
@@ -2795,12 +3000,12 @@ the minimum length of a glissando has no effect unless the
 e \glissando c'
 
 % not effective alone
-\once \override Glissando #'minimum-length = #20
+\once \override Glissando.minimum-length = #20
 e, \glissando c'
 
 % effective only when both overrides are present
-\once \override Glissando #'minimum-length = #20
-\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Glissando.minimum-length = #20
+\once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
 e, \glissando c'
 @end lilypond
 
@@ -2808,16 +3013,16 @@ The same is true of the @code{Beam} object:
 
 @lilypond[verbatim,quote,relative=1]
 % not effective alone
-\once \override Beam #'minimum-length = #20
+\once \override Beam.minimum-length = #20
 e8 e e e
 
 % effective only when both overrides are present
-\once \override Beam #'minimum-length = #20
-\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
+\once \override Beam.minimum-length = #20
+\once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
 e8 e e e
 @end lilypond
 
-@strong{@i{The @code{to-barline} property}}
+@subsubsubheading The @code{to-barline} property
 
 The second useful property of the @code{spanner-interface} is
 @code{to-barline}.  By default this is true, causing hairpins and
@@ -2828,7 +3033,7 @@ itself:
 
 @lilypond[verbatim,quote,relative=2]
 a \< a a a a \! a a a \break
-\override Hairpin #'to-barline = ##f
+\override Hairpin.to-barline = ##f
 a \< a a a a \! a a a
 @end lilypond
 
@@ -2837,6 +3042,7 @@ setting it to @code{#t} has no effect on slurs or phrasing slurs
 or on other spanners for which terminating on the bar line would
 not be meaningful.
 
+@node Using the line-spanner-interface
 @unnumberedsubsubsec Using the @code{line-spanner-interface}
 
 Objects which support the @code{line-spanner-interface} include
@@ -2861,8 +3067,8 @@ the @code{\override} command is quite simple:
 
 @lilypond[relative=2,quote,verbatim]
 e2 \glissando b
-\once \override Glissando #'(bound-details left Y) = #3
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.left.Y = #3
+\once \override Glissando.bound-details.right.Y = #-2
 e2 \glissando b
 @end lilypond
 
@@ -2880,8 +3086,8 @@ specified by the @code{left-broken} and @code{right-broken}
 sub-lists of @code{bound-details}.  For example:
 
 @lilypond[relative=2,ragged-right,verbatim,quote]
-\override Glissando #'breakable = ##t
-\override Glissando #'(bound-details right-broken Y) = #-3
+\override Glissando.breakable = ##t
+\override Glissando.bound-details.right-broken.Y = #-3
 c1 \glissando \break
 f1
 @end lilypond
@@ -2921,7 +3127,7 @@ This is a markup that is evaluated to yield the stencil.  It is used
 to put @i{cresc.}, @i{tr} and other text on horizontal spanners.
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
    = \markup { \small \bold Slower }
 c2\startTextSpan b c a\stopTextSpan
 @end lilypond
@@ -2935,15 +3141,11 @@ or @code{stencil-offset} will move the symbol at the edge vertically
 relative to the end point of the line:
 
 @lilypond[relative=1,quote,verbatim]
-\override TextSpanner
-  #'(bound-details left stencil-align-dir-y) = #-2
-\override TextSpanner
-  #'(bound-details right stencil-align-dir-y) = #UP
-
-\override TextSpanner
-  #'(bound-details left text) = #"ggg"
-\override TextSpanner
-  #'(bound-details right text) = #"hhh"
+\override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
+\override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
+
+\override TextSpanner.bound-details.left.text = #"ggg"
+\override TextSpanner.bound-details.right.text = #"hhh"
 c4^\startTextSpan c c c \stopTextSpan
 @end lilypond
 
@@ -3022,6 +3224,7 @@ considerations.
 @unnumberedsubsubsec Removing the stencil
 
 @cindex stencil, removing
+@funindex \omit
 
 Every layout object has a stencil property.  By default this is set
 to the specific function which draws that object.  If this property
@@ -3031,9 +3234,19 @@ will not be drawn.  The default action can be recovered with
 
 @lilypond[quote,verbatim,relative=1]
 a1 a
-\override Score.BarLine #'stencil = ##f
+\override Score.BarLine.stencil = ##f
+a a
+\revert Score.BarLine.stencil
+a a a
+@end lilypond
+
+This rather common operation has a shortcut @code{\omit}:
+
+@lilypond[quote,verbatim,relative=1]
+a1 a
+\omit Score.BarLine
 a a
-\revert Score.BarLine #'stencil
+\undo \omit Score.BarLine
 a a a
 @end lilypond
 
@@ -3041,6 +3254,7 @@ a a a
 @unnumberedsubsubsec Making objects transparent
 
 @cindex transparent, making objects
+@funindex \hide
 
 Every layout object has a transparent property which by default is
 set to @code{#f}.  If set to @code{#t} the object still occupies
@@ -3048,7 +3262,15 @@ space but is made invisible.
 
 @lilypond[quote,verbatim,relative=2]
 a4 a
-\once \override NoteHead #'transparent = ##t
+\once \override NoteHead.transparent = ##t
+a a
+@end lilypond
+
+This rather common operation has a shortcut @code{\hide}:
+
+@lilypond[quote,verbatim,relative=2]
+a4 a
+\once \hide NoteHead
 a a
 @end lilypond
 
@@ -3072,7 +3294,7 @@ and this may leave a ghostly image of the white object, as shown
 here:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
+\override Staff.Clef.color = #white
 a1
 @end lilypond
 
@@ -3093,8 +3315,8 @@ the @code{Clef} object must be given in a lower value of
 @code{layer}, say @w{@code{-1}}, so that it is drawn earlier:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.Clef #'color = #white
-\override Staff.Clef #'layer = #-1
+\override Staff.Clef.color = #white
+\override Staff.Clef.layer = #-1
 a1
 @end lilypond
 
@@ -3170,12 +3392,11 @@ default setting of this property:
 @item @code{Clef}                @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @item @code{Custos}              @tab @code{Staff}          @tab @code{end-of-line-visible}
 @item @code{DoublePercentRepeat} @tab @code{Voice}          @tab @code{begin-of-line-invisible}
-@c omit KeyCancellation until it can be explained -td
-@c @item @code{KeyCancellation}  @tab ??             @tab @code{begin-of-line-invisible}
+@item @code{KeyCancellation}     @tab @code{Staff}          @tab @code{begin-of-line-invisible}
 @item @code{KeySignature}        @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @c omit LeftEdge until it can be explained -td
 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
-@item @code{OctavateEight}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
+@item @code{ClefModifier}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
 @item @code{RehearsalMark}       @tab @code{Score}          @tab @code{end-of-line-invisible}
 @item @code{TimeSignature}       @tab @code{Staff}          @tab @code{all-visible}
 
@@ -3188,7 +3409,7 @@ visibility of bar lines:
 f4 g a b
 f4 g a b
 % Remove bar line at the end of the current line
-\once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
+\once \override Score.BarLine.break-visibility = ##(#f #t #t)
 \break
 f4 g a b
 f4 g a b
@@ -3208,13 +3429,13 @@ line unless it is set to be different from 1.
 suppressed.  Use begin-of line-invisible to print and
 all-invisible to suppress.
 @item Key signature -- see below
-@item OctavateEight -- see below
+@item ClefModifier -- see below
 @end itemize
 
 @node Special considerations
 @unnumberedsubsubsec Special considerations
 
-@strong{@emph{Visibility following explicit changes}}
+@subsubsubheading Visibility following explicit changes
 
 @cindex key signature, visibility following explicit change
 @cindex explicitKeySignatureVisibility
@@ -3234,7 +3455,7 @@ is set.
 \key g \major
 f4 g a b
 % Try to remove all key signatures
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b
 \break
@@ -3260,16 +3481,16 @@ object to remove these.
 \key g \major
 f4 g a b
 \set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b \break
 f4 g a b
 f4 g a b
 @end lilypond
 
-@strong{@emph{Visibility of cautionary accidentals}}
+@subsubsubheading Visibility of cancelling accidentals
 
-To remove the cautionary accidentals printed at an explicit key
+To remove the cancelling accidentals printed at an explicit key
 change, set the Staff context property @code{printKeyCancellation}
 to @code{#f}:
 
@@ -3278,7 +3499,7 @@ to @code{#f}:
 f4 g a b
 \set Staff.explicitKeySignatureVisibility = #all-invisible
 \set Staff.printKeyCancellation = ##f
-\override Staff.KeySignature #'break-visibility = #all-invisible
+\override Staff.KeySignature.break-visibility = #all-invisible
 \key bes \major
 f4 g a b \break
 f4 g a b
@@ -3288,9 +3509,40 @@ f4 g a b
 With these overrides only the accidentals before the notes remain
 to indicate the change of key.
 
+Note that when changing the key to C@tie{}major or A@tie{}minor
+the cancelling accidentals would be the @emph{only} indication of
+the key change.  In this case setting @code{printKeyCancellation} to
+@code{#f} has no effect:
+
+@lilypond[quote,verbatim,relative=1,ragged-right]
+\key g \major
+f4 g a b
+\set Staff.explicitKeySignatureVisibility = #all-invisible
+\set Staff.printKeyCancellation = ##f
+\key c \major
+f4 g a b \break
+f4 g a b
+f4 g a b
+@end lilypond
+
+To suppress the cancelling accidentals even when the key is
+changed to C@tie{}major or A@tie{}minor, override
+the visibility of the @code{KeyCancellation} grob instead:
+
+@lilypond[quote,verbatim,relative=1,ragged-right]
+\key g \major
+f4 g a b
+\set Staff.explicitKeySignatureVisibility = #all-invisible
+\override Staff.KeyCancellation.break-visibility = #all-invisible
+\key c \major
+f4 g a b \break
+f4 g a b
+f4 g a b
+@end lilypond
+
 @c TODO Add visibility of cautionary accidentals before notes
 
-@strong{@emph{Automatic bars}}
+@subsubsubheading Automatic bars
 
 @cindex automaticBars
 @cindex bar lines, suppressing
@@ -3306,20 +3558,20 @@ occur only at explicit @code{\bar} commands.
 
 @c TODO Add example
 
-@strong{@emph{Octavated clefs}}
+@subsubsubheading Transposed clefs
 
-@cindex octavated clefs, visibility of
-@cindex visibility of octavated clefs
-@cindex clefs, visibility of octavation
+@cindex transposed clefs, visibility of
+@cindex visibility of transposed clefs
+@cindex clefs, visibility of transposition
 
-The small octavation symbol on octavated clefs is produced by the
-@code{OctavateEight} layout object.  Its visibility is automatically
+The small transposition symbol on transposed clefs is produced by the
+@code{ClefModifier} layout object.  Its visibility is automatically
 inherited from the @code{Clef} object, so it is not necessary to apply
-any required @code{break-visibility} overrides to the @code{OctavateEight} 
-layout objects to suppress octavation symbols for invisible clefs.
+any required @code{break-visibility} overrides to the @code{ClefModifier}
+layout objects to suppress transposition symbols for invisible clefs.
 
 For explicit clef changes, the @code{explicitClefVisibility}
-property controls both the clef symbol and any octavation symbol
+property controls both the clef symbol and any transposition symbol
 associated with it.
 
 @seealso
@@ -3347,13 +3599,13 @@ and how to tune them.
 
 @lilypond[relative=2,ragged-right,verbatim,quote]
 d2 \glissando d'2
-\once \override Glissando #'style = #'dashed-line
+\once \override Glissando.style = #'dashed-line
 d,2 \glissando d'2
-\override Glissando #'style = #'dotted-line
+\override Glissando.style = #'dotted-line
 d,2 \glissando d'2
-\override Glissando #'style = #'zigzag
+\override Glissando.style = #'zigzag
 d,2 \glissando d'2
-\override Glissando #'style = #'trill
+\override Glissando.style = #'trill
 d,2 \glissando d'2
 @end lilypond
 
@@ -3364,7 +3616,7 @@ override these:
 @c TODO Complete
 @lilypond[relative=2,ragged-right,verbatim,quote]
 e2 \glissando f
-\once \override Glissando #'(bound-details right Y) = #-2
+\once \override Glissando.bound-details.right.Y = #-2
 e2 \glissando f
 @end lilypond
 
@@ -3415,7 +3667,7 @@ they may be:
 
 @lilypond[quote,verbatim,relative=1]
 g4\< e' d' f\!
-\override Hairpin #'rotation = #'(20 -1 0)
+\override Hairpin.rotation = #'(20 -1 0)
 g,,4\< e' d' f\!
 @end lilypond
 
@@ -3433,7 +3685,7 @@ to disable the automatic collision avoidance, which would push some
 of the text too high.
 
 @lilypond[quote,verbatim,relative=1]
-\override TextScript #'outside-staff-priority = ##f
+\override TextScript.outside-staff-priority = ##f
 g4^\markup { \rotate #30 "a G" }
 b^\markup { \rotate #30 "a B" }
 des^\markup { \rotate #30 "a D-Flat" }
@@ -3451,6 +3703,7 @@ appearance of the printed score.
 * Vertical grouping of grobs::
 * Modifying stencils::
 * Modifying shapes::
+* Modifying broken spanners::
 * Unpure-pure containers::
 @end menu
 
@@ -3540,12 +3793,12 @@ and @code{Y-offset} modified.
 @lilypond[verbatim,quote,relative=2]
 a-3
 a
--\tweak #'X-offset #0
--\tweak #'Y-offset #0
+-\tweak X-offset #0
+-\tweak Y-offset #0
 -3
 a
--\tweak #'X-offset #-1
--\tweak #'Y-offset #1
+-\tweak X-offset #-1
+-\tweak Y-offset #1
 -3
 @end lilypond
 
@@ -3595,7 +3848,7 @@ to value of @code{direction}.
 @node Using the self-alignment-interface
 @unnumberedsubsubsec Using the @code{self-alignment-interface}
 
-@emph{Self-aligning objects horizontally}
+@subsubsubheading Self-aligning objects horizontally
 
 The horizontal alignment of an object which supports the
 @code{self-alignment-interface} is controlled by the value of
@@ -3620,17 +3873,17 @@ note:
 
 @lilypond[quote,verbatim,relative=1]
 a'
--\tweak #'self-alignment-X #-1
+-\tweak self-alignment-X #-1
 ^"left-aligned"
--\tweak #'self-alignment-X #0
+-\tweak self-alignment-X #0
 ^"center-aligned"
--\tweak #'self-alignment-X #RIGHT
+-\tweak self-alignment-X #RIGHT
 ^"right-aligned"
--\tweak #'self-alignment-X #-2.5
+-\tweak self-alignment-X #-2.5
 ^"aligned further to the right"
 @end lilypond
 
-@emph{Self-aligning objects vertically}
+@subsubsubheading Self-aligning objects vertically
 
 Objects may be aligned vertically in an analogous way to aligning
 them horizontally if the @code{Y-offset} property is set to
@@ -3648,7 +3901,7 @@ with the reference point of the parent.  The symbols @code{DOWN},
 @code{CENTER}, and @code{UP} may be substituted for @w{@code{-1}},
 @code{0}, and @code{1}, respectively.
 
-@emph{Self-aligning objects in both directions}
+@subsubsubheading Self-aligning objects in both directions
 
 By setting both @code{X-offset} and @code{Y-offset}, an object may
 be aligned in both directions simultaneously.
@@ -3658,9 +3911,9 @@ that it nestles close to the note head.
 
 @lilypond[quote,verbatim,relative=2]
 a
--\tweak #'self-alignment-X #0.5  % move horizontally left
--\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
--\tweak #'self-alignment-Y #-1  % move vertically up
+-\tweak self-alignment-X #0.5  % move horizontally left
+-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
+-\tweak self-alignment-Y #-1  % move vertically up
 -3  % third finger
 @end lilypond
 
@@ -3705,25 +3958,25 @@ objects other than bar lines.  These objects include @code{ambitus},
 @code{left-edge}, @code{key-cancellation}, @code{key-signature}, and
 @code{time-signature}.
 
-By default, rehearsal marks and bar numbers will be horizontally
-centered above the object:
+Each type of object has its own default reference point, to which
+rehearsal marks are aligned:
 
 @lilypond[verbatim,quote,relative=1]
-% The rehearsal mark will be centered above the Clef
-\override Score.RehearsalMark #'break-align-symbols = #'(clef)
+% The rehearsal mark will be aligned to the right edge of the Clef
+\override Score.RehearsalMark.break-align-symbols = #'(clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
-% The rehearsal mark will be centered above the Time Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
+% The rehearsal mark will be aligned to the left edge of the Time Signature
+\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
 \key a \major
 \clef treble
 \time 3/4
 \mark "↓"
 e2.
 % The rehearsal mark will be centered above the Breath Mark
-\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
+\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
 \key a \major
 \clef treble
 \time 4/4
@@ -3742,15 +3995,15 @@ line is invisible the object is aligned to the place where the bar
 line would be.
 
 @lilypond[verbatim,quote,relative=1]
-% The rehearsal mark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+% The rehearsal mark will be aligned to the right edge of the Key Signature
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
-% The rehearsal mark will be centered above the Clef
+% The rehearsal mark will be aligned to the right edge of the Clef
 \set Staff.explicitKeySignatureVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef bass
 \mark "↓"
@@ -3758,7 +4011,7 @@ gis,,1
 % The rehearsal mark will be centered above the Bar Line
 \set Staff.explicitKeySignatureVisibility = #all-invisible
 \set Staff.explicitClefVisibility = #all-invisible
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
 \key a \major
 \clef treble
 \mark "↓"
@@ -3770,20 +4023,20 @@ can be changed, as shown in the following example.  In a score with
 multiple staves, this setting should be done for all the staves.
 
 @lilypond[verbatim,quote,relative=1]
-% The RehearsalMark will be centered above the Key Signature
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+% The RehearsalMark will be aligned with the right edge of the Key Signature
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
 \key a \major
 \clef treble
 \time 4/4
 \mark "↓"
 e1
-% The RehearsalMark will be aligned with the left edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
+% The RehearsalMark will be centered above the Key Signature
+\once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
 \mark "↓"
 \key a \major
 e1
-% The RehearsalMark will be aligned with the right edge of the Key Signature
-\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
+% The RehearsalMark will be aligned with the left edge of the Key Signature
+\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
 \key a \major
 \mark "↓"
 e1
@@ -3795,14 +4048,14 @@ edge by an arbitrary amount.  The units are staff-spaces:
 @lilypond[verbatim,quote,relative=1]
 % The RehearsalMark will be aligned with the left edge of the Key Signature
 % and then shifted right by 3.5 staff-spaces
-\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
-\once \override Score.KeySignature #'break-align-anchor = #3.5
+\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
+\once \override Score.KeySignature.break-align-anchor = #3.5
 \key a \major
 \mark "↓"
 e1
 % The RehearsalMark will be aligned with the left edge of the Key Signature
 % and then shifted left by 2 staff-spaces
-\once \override Score.KeySignature #'break-align-anchor = #-2
+\once \override Score.KeySignature.break-align-anchor = #-2
 \key a \major
 \mark "↓"
 e1
@@ -3850,8 +4103,8 @@ symbol to a cross within a circle.
 
 @lilypond[verbatim,quote]
 XinO = {
-  \once \override NoteHead  #'stencil = #ly:text-interface::print
-  \once \override NoteHead #'text = \markup {
+  \once \override NoteHead.stencil = #ly:text-interface::print
+  \once \override NoteHead.text = \markup {
     \combine
       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
       \musicglyph #"noteheads.s2cross"
@@ -3892,11 +4145,28 @@ Notation Reference:
 @cindex Bézier curves, control points
 @cindex control points, Bézier curves
 
-Ties, slurs and phrasing slurs are drawn as third-order Bézier
-curves.  If the shape of the tie or slur which is calculated
-automatically is not optimum, the shape may be modified manually by
-explicitly specifying the four control points required to define
-a third-order Bézier curve.
+@code{Tie}s, @code{Slur}s, @code{PhrasingSlur}s,
+@code{LaissezVibrerTie}s and @code{RepeatTie}s are all drawn as
+third-order Bézier curves.  If the shape of the tie or slur which
+is calculated automatically is not optimum, the shape may be
+modified manually in two ways:
+
+@enumerate a
+@item
+by specifying the displacements to be made to the control points
+of the automatically calculated Bézier curve, or
+
+@item
+by explicitly specifying the positions of the four control points
+required to define the wanted curve.
+@end enumerate
+
+Both methods are explained below.  The first method is more suitable
+if only slight adjustments to the curve are required; the second may
+be better for creating curves which are related to just a single
+note.
+
+@subsubsubheading Cubic Bézier curves
 
 Third-order or cubic Bézier curves are defined by four control
 points.  The first and fourth control points are precisely the
@@ -3908,10 +4178,17 @@ heading directly towards the second, gradually bending over to
 head towards the third and continuing to bend over to head towards
 the fourth, arriving there travelling directly from the third
 control point.  The curve is entirely contained in the
-quadrilateral defined by the four control points.
+quadrilateral defined by the four control points.  Translations,
+rotations and scaling of the control points all result in exactly
+the same operations on the curve.
+
+@subsubsubheading Specifying displacements from current control points
+
+@cindex shaping slurs and ties
+@funindex \shape
 
-Here is an example of a case where the tie is not optimum, and
-where @code{\tieDown} would not help.
+In this example the automatic placement of the tie is not optimum,
+and @code{\tieDown} would not help.
 
 @lilypond[verbatim,quote,relative=1]
 <<
@@ -3921,40 +4198,152 @@ where @code{\tieDown} would not help.
 >>
 @end lilypond
 
-One way of improving this tie is to manually modify its control
-points, as follows.
+Adjusting the control points of the tie with @code{\shape} allows
+the collisions to be avoided.
 
-The coordinates of the Bézier control points are specified in units
-of staff-spaces.  The X@tie{}coordinate is relative to the reference
-point of the note to which the tie or slur is attached, and the
-Y@tie{}coordinate is relative to the staff center line.  The
-coordinates are entered as a list of four pairs of decimal numbers
-(reals).  One approach is to estimate the coordinates of the two
-end points, and then guess the two intermediate points.  The optimum
-values are then found by trial and error.
+The syntax of @code{\shape} is
+
+@example
+[-]@code{\shape} @var{displacements} @var{item}
+@end example
+
+This will reposition the control-points of @var{item} by the amounts
+given by @var{displacements}.  The @var{displacements} argument is a
+list of number pairs or a list of such lists.  Each element of a pair
+represents the displacement of one of the coordinates of a
+control-point.  If @var{item} is a string, the result is
+@code{\once\override} for the specified grob type.  If @var{item} is
+a music expression, the result is the same music expression with an
+appropriate tweak applied.
+
+In other words, the @code{\shape} function can act as either a
+@code{\once\override} command or a @code{\tweak} command depending
+on whether the @var{item} argument is a grob name, like @qq{Slur},
+or a music expression, like @qq{(}.  The @var{displacements} argument
+specifies the displacements of the four control points as a list of
+four pairs of (dx . dy) values in units of staff-spaces (or a list
+of such lists if the curve has more than one segment).
+
+The leading hyphen is required if and only if the @code{\tweak} form
+is being used.
+
+So, using the same example as above and the @code{\once\override}
+form of @code{\shape}, this will raise the tie by half a staff-space:
 
-It is useful to remember that a symmetric curve requires symmetric
-control points, and that Bézier curves have the useful property that
-transformations of the curve such as translation, rotation and
-scaling can be achieved by applying the same transformation to the
-curve's control points.
+@lilypond[verbatim,quote,relative=1]
+<<
+  {
+    \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
+    e1~ e
+  }
+\\
+  { r4 <g c,> <g c,> <g c,> }
+>>
+@end lilypond
 
-For the example above the following override gives a satisfactory
-tie.  Note the placement -- it has to be immediately before the note
-to which the start of the tie (or slur) is attached.
+This positioning of the tie is better, but maybe it should be raised
+more in the center.  The following example does this, this time using
+the alternative @code{\tweak} form:
 
 @lilypond[verbatim,quote,relative=1]
 <<
   {
-    \once \override Tie
-      #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
-     e1 ~ e
+    e1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e
   }
 \\
   { r4 <g c,> <g c,> <g c,> }
 >>
 @end lilypond
 
+Changes to the horizontal positions of the control points may be made
+in the same way, and two different curves starting at the same
+musical moment may also be shaped:
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+c8(\( a) a'4 e c\)
+\shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
+\shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
+c8(\( a) a'4 e c\)
+@end lilypond
+
+The @code{\shape} function can also displace the control points of
+curves which stretch across line breaks.  Each piece of the broken
+curve can be given its own list of offsets.  If changes to a
+particular segment are not needed, the empty list can serve as a
+placeholder.  In this example the line break makes the single slur
+look like two:
+
+@lilypond[verbatim,quote,ragged-right,relative=1]
+c4( f g c
+\break
+d,4 c' f, c)
+@end lilypond
+
+Changing the shapes of the two halves of the slur makes it clearer
+that the slur continues over the line break:
+
+@lilypond[verbatim,quote,ragged-right,relative=1]
+% () may be used as a shorthand for ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
+% if any of the segments does not need to be changed
+\shape #'(
+           (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
+           ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
+         ) Slur
+c4( f g c
+\break
+d,4 c' f, c)
+@end lilypond
+
+If an S-shaped curve is required the control points must always be
+adjusted manually --- LilyPond will never select such shapes
+automatically.
+
+@lilypond[verbatim,quote,relative=2]
+c8( e b-> f d' a e-> g)
+\shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
+c8\( e b-> f d' a e-> g\)
+@end lilypond
+
+@subsubsubheading Specifying control points explicitly
+
+The coordinates of the Bézier control points are specified in units
+of staff-spaces.  The X@tie{}coordinate is relative to the reference
+point of the note to which the tie or slur is attached, and the
+Y@tie{}coordinate is relative to the staff center line.  The
+coordinates are specified as a list of four pairs of decimal numbers
+(reals).  One approach is to estimate the coordinates of the two
+end points, and then guess the two intermediate points.  The optimum
+values are then found by trial and error.  Be aware that these values
+may need to be manually adjusted if any further changes are made to
+the music or the layout.
+
+One situation where specifying the control points explicitly is
+preferable to specifying displacements is when they need to be
+specified relative to a single note.  Here is an example of this.
+It shows one way of indicating a slur extending into alternative
+sections of a volta repeat.
+
+@lilypond[verbatim,quote,relative=2]
+c1
+\repeat volta 3 { c4 d( e f }
+\alternative {
+  { g2) d }
+  {
+    g2
+    % create a slur and move it to a new position
+    % the <> is just an empty chord to carry the slur termination
+    -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
+    f,
+  }
+  {
+    e'2
+    % create a slur and move it to a new position
+    -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
+    f,
+  }
+}
+@end lilypond
+
 @knownissues
 It is not possible to modify shapes of ties or slurs by changing
 the @code{control-points} property if there are multiple ties or slurs
@@ -3967,16 +4356,122 @@ required.
 Internals Reference:
 @rinternals{TieColumn}.
 
+
+@node Modifying broken spanners
+@subsection Modifying broken spanners
+
+@menu
+* Using alterBroken::
+@end menu
+
+@node Using alterBroken
+@unnumberedsubsubsec Using @code{\alterBroken}
+
+@cindex spanners, modifying
+@cindex broken spanners, modifying
+@funindex \alterBroken
+
+When a spanner crosses a line break or breaks, each piece
+inherits the attributes of the original spanner.  Thus, ordinary
+tweaking of a broken spanner applies the same modifications to
+each of its segments.  In the example below, overriding
+@code{thickness} affects the slur on either side of the line
+break.
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+r2
+\once\override Slur.thickness = 10
+c8( d e f
+\break
+g8 f e d) r2
+@end lilypond
+
+Independently modifying the appearance of individual pieces
+of a broken spanner is possible with the @code{\alterBroken}
+command.  This command can produce either an @code{\override}
+or a @code{\tweak} of a spanner property.
+
+The syntax for @code{\alterBroken} is
+
+@example
+[-]@code{\alterBroken} @var{property} @var{values} @var{item}
+@end example
+
+The argument @var{values} is a list of values, one for each
+broken piece.  If @var{item} is a grob name like @code{Slur} or
+@code{Staff.PianoPedalBracket}, the result is an @code{\override}
+of the specified grob type.  If @var{item} is a music expression
+such as @qq{(} or @qq{[} the result is the same music expression
+with an appropriate tweak applied.
+
+The leading hyphen must be used with the @code{\tweak} form.  Do
+not add it when @code{\alterBroken} is used as an
+@code{\override}.
+
+In its @code{\override} usage, @code{\alterBroken} may be
+prefaced by @code{\once} or @code{\temporary} and reverted by
+using @code{\revert} with @var{property}.
+
+The following code applies an independent @code{\override} to
+each of the slur segments in the previous example:
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+r2
+\alterBroken thickness #'(10 1) Slur
+c8( d e f
+\break
+g8 f e d) r2
+@end lilypond
+
+The @code{\alterBroken} command may be used with any spanner
+object, including @code{Tie}, @code{PhrasingSlur}, @code{Beam}
+and @code{TextSpanner}.  For example, an editor preparing a
+scholarly edition may wish to indicate the absence of part of a
+phrasing slur in a source by dashing only the segment which has
+been added.  The following example illustrates how this can be
+done, in this case using the @code{\tweak} form of the command:
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+% The empty list is conveniently used below, because it is the
+% default setting of dash-definition, resulting in a solid curve.
+c2-\alterBroken dash-definition #'(() ((0 1.0 0.4 0.75))) \(e
+\break
+g2 e\)
+@end lilypond
+
+It is important to understand that @code{\alterBroken} will set
+each piece of a broken spanner to the corresponding value in
+@var{values}.  When there are fewer values than pieces, any
+additional piece will be assigned the empty list.  This may lead
+to undesired results if the layout property is not set to the
+empty list by default.  In such cases, each segment should be
+assigned an appropriate value.
+
+@knownissues
+Line breaks may occur in different places following changes in
+layout. Settings chosen for @code{\alterBroken} may be unsuitable
+for a spanner that is no longer broken or is split into more
+segments than before.  Explicit use of @code{\break} can guard
+against this situation.
+The @code{\alterBroken} command is ineffective for spanner
+properties accessed before line-breaking such as
+@code{direction}.
+
+@seealso
+Extending LilyPond:
+@rextend{Difficult tweaks}.
+
+
+@node Unpure-pure containers
+@subsection Unpure-pure containers
+
 @cindex Scheme, pure containers
 @cindex Scheme, unpure containers
 @cindex pure containers, Scheme
 @cindex unpure containers, Scheme
 @cindex horizontal spacing, overriding
 
-
-@node Unpure-pure containers
-@subsection Unpure-pure containers
-
 Unpure-pure containers are useful for overriding @emph{Y-axis} spacing
 calculations - specifically @code{Y-offset} and @code{Y-extent} - with a
 Scheme function instead of a literal (i.e. a number or pair).
@@ -4037,12 +4532,12 @@ process.
                               '(-0.5 . 0.5)))))
 
 squareLineCircleSpace = {
-  \override NoteHead #'stencil = #square-line-circle-space
+  \override NoteHead.stencil = #square-line-circle-space
 }
 
 smartSquareLineCircleSpace = {
   \squareLineCircleSpace
-  \override NoteHead #'Y-extent =
+  \override NoteHead.Y-extent =
    #(ly:make-unpure-pure-container
       ly:grob::stencil-height
       (lambda (grob start end) (ly:grob::stencil-height grob)))
@@ -4051,9 +4546,9 @@ smartSquareLineCircleSpace = {
 \new Voice \with { \remove "Stem_engraver" }
 \relative c'' {
   \squareLineCircleSpace
-  cis4 ces cisis c
+  cis4 ces disis d
   \smartSquareLineCircleSpace
-  cis4 ces cisis c
+  cis4 ces disis d
 }
 @end lilypond
 
@@ -4178,15 +4673,15 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = #padding
+     \once \override TextScript.padding = #padding
    #})
 
-\relative c''' {
+\relative c'' {
   c4^"piu mosso" b a b
   \padText #1.8
-  c4^"piu mosso" d e f
+  c4^"piu mosso" b a b
   \padText #2.6
-  c4^"piu mosso" fis a g
+  c4^"piu mosso" b a b
 }
 @end lilypond
 
@@ -4199,10 +4694,10 @@ custosNote =
      (parser location note)
      (ly:music?)
    #{
-     \tweak NoteHead #'stencil #ly:text-interface::print
-     \tweak NoteHead #'text
+     \tweak NoteHead.stencil #ly:text-interface::print
+     \tweak NoteHead.text
         \markup \musicglyph #"custodes.mensural.u0"
-     \tweak Stem #'stencil ##f
+     \tweak Stem.stencil ##f
      #note
    #})
 
@@ -4217,7 +4712,7 @@ tempoPadded =
      (parser location padding tempotext)
      (number? markup?)
    #{
-     \once \override Score.MetronomeMark #'padding = #padding
+     \once \override Score.MetronomeMark.padding = #padding
      \tempo \markup { \bold #tempotext }
    #})
 
index 57cf68c4d1560aa9dff42568c66473569644452e..711be9782ad8f0bcc30b4d2b4ba6bad3cb6078b1 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 
 @c TODO: add tablature.
@@ -28,7 +28,7 @@
 @tab
 @lilypond[relative=2,notime]
 \set Staff.autoBeaming = ##f
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 c1 c2 c8 c16
 @end lilypond
 
@@ -36,7 +36,7 @@ c1 c2 c8 c16
 @tab augmentation dots
 @tab
 @lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 c4. c4..
 @end lilypond
 
@@ -68,7 +68,7 @@ s4_" "
 @tab time signature
 @tab
 @lilypond[relative=1]
-\override Staff.Clef #'stencil = #empty-stencil
+\override Staff.Clef.stencil = #empty-stencil
 \time 3/4
 s4_" "
 \time 4/4
@@ -80,7 +80,7 @@ s16_" "
 @tab rest
 @tab
 @lilypond[relative=2,notime]
-\override Staff.Clef #'break-visibility = #all-invisible
+\override Staff.Clef.break-visibility = #all-invisible
 r4 r8
 @end lilypond
 
@@ -155,7 +155,7 @@ a8-[ b-]
 @end lilypond
 
 
-@item @code{<< \new Staff ... >>}
+@item @code{<< \new Staff @dots{} >>}
 @tab more staves
 @tab
 @lilypond[relative=1]
@@ -227,12 +227,12 @@ f8 c2 d e
 @end lilypond
 
 
-@item @code{\times 2/3 @{f g a@}}
+@item @code{\tuplet 3/2 @{f g a@}}
 @tab triplets
 @tab
 @lilypond[relative=1]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
-\times 2/3 { f8 g a }
+\tuplet 3/2 { f8 g a }
 @end lilypond
 
 
index 753d82bb3d4b781096701ebfcb1a7a11ad58b555..88c08e19616a41480fa3fe27887da245441ea15b 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 
 @node Chord notation
@@ -168,7 +168,7 @@ The default action; produces a major triad.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1
 }
 @end lilypond
@@ -180,7 +180,7 @@ The minor chord.  This modifier lowers the 3rd.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:m c:m7
 }
 @end lilypond
@@ -194,7 +194,7 @@ present) the 7th step.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:dim c:dim7
 }
 @end lilypond
@@ -206,7 +206,7 @@ The augmented chord.  This modifier raises the 5th step.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:aug
 }
 @end lilypond
@@ -220,7 +220,7 @@ to create a major triad.
 @tab
 @lilypond[line-width=4\cm, noragged-right]
 \chordmode {
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   c1:maj c:maj7
 }
 @end lilypond
@@ -438,21 +438,20 @@ Chords can be entered as simultaneous notes or through the use of
 chord mode.  The displayed chord name will be the same, regardless
 of the mode of entry, unless there are inversions or added bass notes:
 
-@lilypond[verbatim,quote,relative=1]
+@lilypond[verbatim,quote]
+chordmusic = \relative c' {
+  <c e g>2 <f bes c>
+  <f c' e g>1
+  \chordmode {
+    c2 f:sus4 c1:/f
+  }
+}
 <<
   \new ChordNames {
-    <c e g>2  <f bes c>
-    <f c' e g>1
-    \chordmode {
-      c2 f:sus4 c1:/f
-    }
+    \chordmusic
   }
   {
-    <c e g>2  <f bes c>
-    <f, c' e g>1
-    \chordmode {
-      c2 f:sus4 c1:/f
-    }
+    \chordmusic
   }
 >>
 @end lilypond
@@ -483,8 +482,8 @@ Rests passed to a @code{ChordNames} context will cause the
 
 @funindex{\chords}
 
-@code{\chords @{ ... @}} is a shortcut notation for
-@code{\new ChordNames @{ \chordmode @{ ... @} @}}.
+@code{\chords @{ @dots{} @}} is a shortcut notation for
+@code{\new ChordNames @{ \chordmode @{ @dots{} @}}.
 
 @lilypond[verbatim,quote,ragged-right]
 \chords {
@@ -563,7 +562,7 @@ Jazz notation are shown on the chart in @ref{Chord name chart}.
 
 In addition to the different naming systems, different note names
 are used for the root in different languages.  The predefined
-variables @code{\germanChords}, @code{\semiGermanChords},
+commands @code{\germanChords}, @code{\semiGermanChords},
 @code{\italianChords} and @code{\frenchChords} set these variables.
 The effect is demonstrated here:
 
@@ -831,8 +830,8 @@ entry of bass figures, and there is a context named
 @code{BassFigure} objects.  Figured bass can also be displayed
 in @code{Staff} contexts.
 
-@code{\figures@{ ... @}} is a shortcut notation for
-@code{\new FiguredBass @{ \figuremode @{ ... @} @}}.
+@code{\figures@{ @dots{} @}} is a shortcut notation for
+@code{\new FiguredBass @{ \figuremode @{ @dots{} @} @}}.
 
 
 Although the support for figured bass may superficially resemble chord
@@ -1077,13 +1076,13 @@ figures is adjusted automatically.
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \new Staff = myStaff
+  \new Staff = "myStaff"
   \figuremode {
     <4>4 <10 6>8 s8
     <6 4>4 <6 4>
   }
   %% Put notes on same Staff as figures
-  \context Staff = myStaff
+  \context Staff = "myStaff"
   {
     \clef bass
     c4 c'8 r8 c4 c'
@@ -1097,14 +1096,14 @@ or below the staff.
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \new Staff = myStaff
+  \new Staff = "myStaff"
   \figuremode {
     <4>4 <10 6>8 s8
     \bassFigureStaffAlignmentDown
     <6 4>4 <6 4>
   }
   %% Put notes on same Staff as figures
-  \context Staff = myStaff
+  \context Staff = "myStaff"
   {
     \clef bass
     c4 c'8 r8 c4 c'
@@ -1162,31 +1161,3 @@ the bass line.
   }
 >>
 @end lilypond
-
-When using extender lines, adjacent figures with the same number in
-a different figure location can cause the figure positions to invert.
-
-@lilypond[verbatim,ragged-right,quote,relative=1]
-<<
-  { fis4 g g, e' }
-  \figures {
-    \bassFigureExtendersOn
-    <6 5>4 <5\! 4> < 5 _!> <6>
-  }
->>
-@end lilypond
-
-To avoid this problem, simply turn on extenders after the figure that
-begins the extender line and turn them off at the end of the extender line.
-
-@lilypond[verbatim,ragged-right,quote,relative=1]
-<<
-  { fis4 g g, e' }
-  \figures {
-    <6 5>4 <5 4>
-    \bassFigureExtendersOn
-    < 5 _!>4 <6>
-    \bassFigureExtendersOff
-  }
->>
-@end lilypond
index d81c9160fae7ed5e0e8a7ad44a3724c04bfbf5c0..630aa6690f568cfeba446583e8791e7f476249bf 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @node Editorial annotations
 @section Editorial annotations
@@ -97,11 +97,11 @@ so that only certain layout objects are affected.
 @lilypond[verbatim,quote,relative=2]
 \set fontSize = #3
 c4.-> d8---3
-\override NoteHead #'font-size = #-4
+\override NoteHead.font-size = #-4
 c4.-> d8---3
-\override Script #'font-size = #2
+\override Script.font-size = #2
 c4.-> d8---3
-\override Stem #'font-size = #-5
+\override Stem.font-size = #-5
 c4.-> d8---3
 @end lilypond
 
@@ -154,10 +154,10 @@ Fingering instructions can be entered using
 c4-1 d-2 f-4 e-3
 @end lilypond
 
-Markup texts may be used for finger changes.
+Markup texts or strings may be used for finger changes.
 
 @lilypond[verbatim,quote,relative=2]
-c4-1 d-2 f-4 c^\markup { \finger "2 - 3" }
+c4-1 d-2 f\finger \markup \tied-lyric #"4~3" c\finger "2 - 3"
 @end lilypond
 
 @cindex thumb-script
@@ -211,10 +211,6 @@ Internals Reference:
 @rinternals{New_fingering_engraver},
 @rinternals{Fingering}.
 
-@knownissues
-By default, numbers greater than 9 are not supported using
-@samp{@var{note}-@var{digit}}.
-
 
 @node Hidden notes
 @unnumberedsubsubsec Hidden notes
@@ -302,11 +298,11 @@ Individual objects may be assigned colors.  Valid color names
 are listed in the @ref{List of colors}.
 
 @lilypond[verbatim,quote,relative=2]
-\override NoteHead #'color = #red
+\override NoteHead.color = #red
 c4 c
-\override NoteHead #'color = #(x11-color 'LimeGreen)
+\override NoteHead.color = #(x11-color 'LimeGreen)
 d
-\override Stem #'color = #blue
+\override Stem.color = #blue
 e
 @end lilypond
 
@@ -323,20 +319,20 @@ If @code{x11-color} cannot make sense of the parameter then the
 color returned defaults to black.
 
 @lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
 \set Staff.instrumentName = \markup {
   \with-color #(x11-color 'navy) "Clarinet"
 }
 
 gis8 a
-\override Beam #'color = #(x11-color "medium turquoise")
+\override Beam.color = #(x11-color "medium turquoise")
 gis a
-\override Accidental #'color = #(x11-color 'DarkRed)
+\override Accidental.color = #(x11-color 'DarkRed)
 gis a
-\override NoteHead #'color = #(x11-color "LimeGreen")
+\override NoteHead.color = #(x11-color "LimeGreen")
 gis a
 % this is deliberate nonsense; note that the stems remain black
-\override Stem #'color = #(x11-color 'Boggle)
+\override Stem.color = #(x11-color 'Boggle)
 b2 cis
 @end lilypond
 
@@ -350,16 +346,16 @@ Exact RGB colors can be specified using the Scheme function
 @code{rgb-color}.
 
 @lilypond[verbatim,quote,relative=2]
-\override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
+\override Staff.StaffSymbol.color = #(x11-color 'SlateBlue2)
 \set Staff.instrumentName = \markup {
   \with-color #(x11-color 'navy) "Clarinet"
 }
 
-\override Stem #'color = #(rgb-color 0 0 0)
+\override Stem.color = #(rgb-color 0 0 0)
 gis8 a
-\override Stem #'color = #(rgb-color 1 1 1)
+\override Stem.color = #(rgb-color 1 1 1)
 gis8 a
-\override Stem #'color = #(rgb-color 0 0 0.5)
+\override Stem.color = #(rgb-color 0 0 0.5)
 gis4 a
 @end lilypond
 
@@ -474,6 +470,9 @@ Stems may be manually placed to point up or down; see
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {default-direction-of-stems-on-the-center-line-of-the-staff.ly}
 
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly}
+
 @seealso
 Notation Reference:
 @ref{Direction and placement}.
@@ -539,13 +538,11 @@ There are two music functions, @code{balloonGrobText} and
 latter is used like @code{\tweak}, typically within chords, to
 attach text to an individual note.
 
-Balloon text normally influences note spacing, but this can be
-altered:
+Balloon text does not influence note spacing, but this can be altered:
 
 @lilypond[verbatim,quote,relative=2]
 \new Voice \with { \consists "Balloon_engraver" }
 {
-  \balloonLengthOff
   \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" }
   a8
   \balloonGrobText #'Rest #'(-4 . -4) \markup { "I'm a rest" }
@@ -598,7 +595,7 @@ lines.
   \context {
     \Staff
     \consists "Grid_point_engraver"
-    gridInterval = #(ly:make-moment 1 4)
+    gridInterval = #(ly:make-moment 1/4)
   }
   \context {
     \Score
index 6d88b53264093a829f672b97dfb813ec5efe8e69..96c1449e9143af64d2732aa19e6a94952595b1f0 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.25"
 
 @node Expressive marks
 @section Expressive marks
@@ -148,7 +148,7 @@ articulation.  Predefined shorthands exist for @notation{marcato},
 Their corresponding output appears as follows:
 
 @lilypond[verbatim,quote,relative=2]
-c4-^ c-+ c-- c-|
+c4-^ c-+ c-- c-!
 c4-> c-. c2-_
 @end lilypond
 
@@ -167,8 +167,8 @@ to a multi-measure rest (and only a multi-measure rest).  This
 creates a @code{MultiMeasureRestText} object.
 
 @lilypond[verbatim,quote,relative=2]
-\override Script #'color = #red
-\override MultiMeasureRestText #'color = #blue
+\override Script.color = #red
+\override MultiMeasureRestText.color = #blue
 a2\fermata r\fermata
 R1\fermataMarkup
 @end lilypond
@@ -472,6 +472,16 @@ items such as text scripts, text spanners, and piano pedal marks.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {printing-hairpins-using-al-niente-notation.ly}
 
+@cindex Ferneyhough hairpins
+@cindex hairpins, Ferneyhough
+@cindex flared hairpins
+@cindex hairpins, flared
+@cindex constante hairpins
+@cindex hairpins, constante
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{printing-hairpins-in-various-styles.ly}
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {vertically-aligned-dynamics-and-textscripts.ly}
 
@@ -604,6 +614,20 @@ moltoF = #(make-dynamic-script
 }
 @end lilypond
 
+To left-align the dynamic text rather than centering it on a note
+use a @code{\tweak}:
+
+@lilypond[verbatim,quote]
+moltoF = \tweak DynamicText.self-alignment-X #LEFT
+         #(make-dynamic-script
+            (markup #:normal-text "molto"
+                    #:dynamic "f"))
+\relative c' {
+  <d e>16 <d e>
+  <d e>2..\moltoF <d e>1
+}
+@end lilypond
+
 Font settings in markup mode are described in
 @ref{Selecting font and font size}.
 
@@ -952,6 +976,11 @@ divisiones, are supported.  For details, see @ref{Divisiones}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {changing-the-breath-mark-symbol.ly}
 
+@cindex tick mark
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{using-a-tick-as-the-breath-mark-symbol.ly}
+
 @cindex caesura
 @cindex railroad tracks
 
@@ -1094,6 +1123,9 @@ Different styles of glissandi can be created.  For details, see
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {making-glissandi-breakable.ly}
 
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{extending-glissandi-across-repeats.ly}
+
 @seealso
 Music Glossary:
 @rglos{glissando}.
@@ -1233,8 +1265,8 @@ It is not possible to mix connected arpeggios and unconnected
 arpeggios in one @code{PianoStaff} at the same point in
 time.
 
-The parenthesis-style arpeggio brackets do not work for
-cross-staff arpeggios.
+The simple way of setting parenthesis-style arpeggio brackets does not work for
+cross-staff arpeggios; see @ref{Cross-staff stems}.
 
 
 @node Trills
index e183f1ccd65ea3f707506872ec6d8c48aba8978c..412295985bfb348461453156168cef0e786fd0de 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Fretted string instruments
 @section Fretted string instruments
@@ -237,7 +237,7 @@ possible.  This behaviour can be changed by setting @code{restrainOpenStrings}
 to @code{#t}.
 
 @lilypond[quote,ragged-right,verbatim]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \omit Voice.StringNumber }
 \new StaffGroup <<
    \new Staff \relative c {
      \clef "treble_8"
@@ -310,11 +310,11 @@ ties = \relative c' {
 \score {
   <<
     \new StaffGroup  <<
-      \context Staff {
+      \new Staff {
         \clef "treble_8"
         \ties
       }
-      \context TabStaff {
+      \new TabStaff {
         \ties
       }
     >>
@@ -349,11 +349,11 @@ ties = \relative c' {
 \score {
   <<
     \new StaffGroup  <<
-      \context Staff {
+      \new Staff {
         \clef "treble_8"
         \ties
       }
-      \context TabStaff {
+      \new TabStaff {
       \hideSplitTiedTabNotes
         \ties
       }
@@ -368,9 +368,6 @@ ties = \relative c' {
 
 @cindex harmonic indications in tablature notation
 @cindex tablature and harmonic indications
-@cindex slides in tablature notation
-@cindex tablature and slides
-@cindex chord glissandi
 @funindex \harmonic
 @funindex \harmonicByFret
 @funindex \harmonicByRatio
@@ -379,7 +376,7 @@ Harmonic indications can be added to tablature notation as sounding
 pitches:
 
 @lilypond[verbatim,quote]
-\layout { \override Voice.StringNumber #'stencil = ##f }
+\layout { \omit Voice.StringNumber }
 firstHarmonic = {
   d'4\4\harmonic
   g'4\3\harmonic
@@ -454,9 +451,14 @@ ratioHarmonics = {
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {fretted-string-harmonics-in-tablature.ly}
 
+@cindex slides in tablature notation
+@cindex tablature and slides
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {slides-in-tablature.ly}
 
+@cindex chord glissandi
+
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {chord-glissando-in-tablature.ly}
 
@@ -537,7 +539,7 @@ written.
 @lilypond[quote,ragged-right,verbatim]
 <<
   \new Voice \with {
-    \override StringNumber #'stencil = ##f
+    \omit StringNumber
   } {
     \clef "bass_8"
     \relative c, {
@@ -652,7 +654,7 @@ you can use
 \layout @{
   \context @{
     \TabStaff
-    stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+    stringTunings = \stringTuning <c' g' d'' a''>
   @}
 @}
 @end example
@@ -724,12 +726,12 @@ In addition, open and unplayed (muted) strings can be indicated.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram #"6-x;5-3;4-2;3-o;2-1;1-o;"
@@ -748,12 +750,12 @@ the fret-diagram markup string.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
      \chordmode {
        f1 g
      }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1^\markup {
       \fret-diagram #"c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;"
@@ -776,12 +778,12 @@ can be changed in the fret-diagram markup string.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
      \chordmode {
        f1 g
      }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1^\markup {
       \fret-diagram #"s:1.5;c:6-1-1;6-1;5-3;4-3;3-2;2-1;1-1;"
@@ -799,12 +801,12 @@ markup string.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       a1
     }
   }
-  \context Staff {
+  \new Staff {
     % An 'A' chord for ukulele
     a'1^\markup {
       \fret-diagram #"w:4;4-2-2;3-1-1;2-o;1-o;"
@@ -818,12 +820,12 @@ can be controlled by the fret-diagram markup string.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram #"f:1;6-x;5-3-3;4-2-2;3-o;2-1-1;1-o;"
@@ -840,12 +842,12 @@ markup string.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram #"d:0.35;6-x;5-3;4-2;3-o;2-1;1-o;"
@@ -870,12 +872,12 @@ Mute strings, open strings, and fret numbers can be indicated.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram-terse #"x;3;2;o;1;o;"
@@ -891,12 +893,12 @@ Barre indicators can be included in the fret-diagram-terse markup string.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       f1 g
     }
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1^\markup {
       \fret-diagram-terse #"1-(;3;3;2;1;1-);"
@@ -913,14 +915,13 @@ Fingering indications can be included in the fret-diagram-terse markup string.
 @c Need to use override to enable fingerings to show this -- can we do so?
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context Staff {
-    \override Voice.TextScript
-      #'(fret-diagram-details finger-code) = #'below-string
+  \new Staff {
+    \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram-terse #"x;3-3;2-2;o;1-1;o;"
@@ -946,12 +947,12 @@ element of the list indicates an item to be placed on the fret diagram.
 
 @lilypond[quote, verbatim]
 <<
-    \context ChordNames {
+    \new ChordNames {
       \chordmode {
         c1 d:m
       }
     }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1^\markup {
       \fret-diagram-verbose #'(
@@ -987,15 +988,14 @@ capo will be the lowest fret in the fret diagram.
 @c \override is necessary to make fingering visible
 @lilypond[quote, verbatim]
 <<
-    \context ChordNames {
+    \new ChordNames {
       \chordmode {
         f1 g c
       }
     }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
-    \override Voice.TextScript
-      #'(fret-diagram-details finger-code) = #'below-string
+    \override Voice.TextScript.fret-diagram-details.finger-code = #'below-string
     <f, c f a c' f'>1^\markup {
       \fret-diagram-verbose #'(
         (place-fret 6 1)
@@ -1017,7 +1017,7 @@ capo will be the lowest fret in the fret diagram.
         (place-fret 1 3 3)
       )
     }
-    <c e g c' e'>1^\markup {
+    <c g c' e' g'>1^\markup {
       \fret-diagram-verbose #'(
         (capo 3)
         (mute 6)
@@ -1123,7 +1123,7 @@ are stored in a lookup table:
 
 @lilypond[verbatim, ragged-right, quote]
 \include "predefined-guitar-fretboards.ly"
-\context FretBoards {
+\new FretBoards {
   \chordmode {
     c1 d
   }
@@ -1182,7 +1182,7 @@ either as simultaneous music or using chord mode (see
 
 @lilypond[verbatim, ragged-right,quote]
 \include "predefined-guitar-fretboards.ly"
-\context FretBoards {
+\new FretBoards {
   \chordmode { c1 }
   <c' e' g'>1
 }
@@ -1206,10 +1206,10 @@ mychords = \chordmode{
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1233,10 +1233,10 @@ mychordlist = {
   \transpose c e { \mychords }
 }
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychordlist
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychordlist
   }
 >>
@@ -1262,10 +1262,10 @@ mychords = \chordmode{
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1296,10 +1296,10 @@ mychords = \chordmode {
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1323,10 +1323,10 @@ mychords = \chordmode {
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1373,10 +1373,10 @@ mychords = \chordmode{
 }
 
 <<
-  \context ChordNames {
+  \new ChordNames {
     \mychords
   }
-  \context FretBoards {
+  \new FretBoards {
     \mychords
   }
 >>
@@ -1396,7 +1396,7 @@ the interface properties belong to @code{FretBoards.FretBoard}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {defining-predefined-fretboards-for-other-instruments.ly}
 
-@lilypondfile[verbatim,quote,texidoc,doctitle]
+@lilypondfile[verbatim,quote,texidoc,doctitle,ragged-right]
 {chordchanges-for-fretboards.ly}
 
 @lilypondfile[verbatim,quote,texidoc,doctitle]
@@ -1437,16 +1437,16 @@ calculates strings and frets that can be used to play the notes.
 
 @lilypond[quote,ragged-right,verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       f1 g
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <f, c f a c' f'>1
     <g,\6 b, d g b g'>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <f, c f a c' f'>1
     <g, b, d g b' g'>1
@@ -1471,19 +1471,19 @@ commands:
                         #guitar-tuning
                         #"x;3-1-(;5-2;5-3;5-4;3-1-1-);"
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 c c
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <c e g c' e'>1
     \predefinedFretboardsOff
     <c e g c' e'>1
     \predefinedFretboardsOn
     <c e g c' e'>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1
     <c e g c' e'>1
@@ -1508,16 +1508,16 @@ Fingerings can be added to FretBoard fret diagrams.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       c1 d:m
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <c-3 e-2 g c'-1 e'>1
     <d a-2 d'-3 f'-1>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <c e g c' e'>1
     <d a d' f'>1
@@ -1533,17 +1533,17 @@ property.
 
 @lilypond[quote, verbatim]
 <<
-  \context ChordNames {
+  \new ChordNames {
     \chordmode {
       d1:m d:m
     }
   }
-  \context FretBoards {
+  \new FretBoards {
     <d a d' f'>1
     \set FretBoards.minimumFret = #5
     <d a d' f'>1
   }
-  \context Staff {
+  \new Staff {
     \clef "treble_8"
     <d a d' f'>1
     <d a d' f'>1
@@ -1665,7 +1665,7 @@ barring indications.
 \clef "treble_8"
 b16 d g b e
 \textSpannerDown
-\override TextSpanner #'(bound-details left text) = #"XII "
+\override TextSpanner.bound-details.left.text = #"XII "
 g16\startTextSpan
 b16 e g e b g\stopTextSpan
 e16 b g d
@@ -1695,7 +1695,7 @@ text markup.
 @lilypond[quote,ragged-right,verbatim]
 \relative c' {
   \clef "treble_8"
-  \override Staff.NoteHead #'style = #'harmonic-mixed
+  \override Staff.NoteHead.style = #'harmonic-mixed
   d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
 }
 @end lilypond
@@ -1709,7 +1709,7 @@ music = \relative c' {
   < b\3 \deadNote d\2 b'\1 >
   < c\3 \deadNote e\2 c'\1 >
   \deadNotesOn
-  \times 2/3 { g8 b e }
+  \tuplet 3/2 { g8 b e }
   \deadNotesOff
   < a,\3 c\2 e\1 >1
 }
@@ -1858,15 +1858,20 @@ correct fret numbers for the fifth string:
 @c due to crazy intervals of banjo music, absolute pitch is recommended
 
 @lilypond[quote,ragged-right,verbatim]
-\new TabStaff <<
-  \set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo
-  \set TabStaff.stringTunings = #banjo-open-g-tuning
-  {
-    \stemDown
-    g8 d' g'\5 a b g e d' |
-    g4 d''8\5 b' a'\2 g'\5 e'\2 d' |
-    g4
+music = {
+  g8 d' g'\5 a b g e d' |
+  g4 d''8\5 b' a'\2 g'\5 e'\2 d' |
+  g4
+}
+
+<<
+  \new Staff \with { \omit StringNumber }
+  { \clef "treble_8"  \music }
+  \new TabStaff \with {
+    tablatureFormat = #fret-number-tablature-format-banjo
+    stringTunings = #banjo-open-g-tuning
   }
+  { \music }
 >>
 @end lilypond
 
index a8f12215ef963a056cae75466cdf8ec9b4927ed6..1617a393950256365c93d7b516620b8c3eb5708f 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @node General input and output
 @chapter General input and output
@@ -51,7 +51,7 @@ delimited by curly brackets:
 
 @example
 \score @{
-...
+  @dots{}
 @}
 @end example
 
@@ -98,7 +98,7 @@ are music expressions:
 
 Comments are one exception to this general rule.  (For others see
 @ref{File structure}.)  Both single-line comments and comments
-delimited by @code{%@{ .. %@}} may be placed anywhere within an
+delimited by @code{%@{ @dots{} %@}} may be placed anywhere within an
 input file.  They may be placed inside or outside a @code{\score}
 block, and inside or outside the single music expression within a
 @code{\score} block.
@@ -133,7 +133,7 @@ movements.  Each movement is entered with a @code{\score} block,
 
 @example
 \score @{
-  @var{..music..}
+  @var{@dots{}music@dots{}}
 @}
 @end example
 
@@ -141,7 +141,7 @@ and texts are entered with a @code{\markup} block,
 
 @example
 \markup @{
-  @var{..text..}
+  @var{@dots{}text@dots{}}
 @}
 @end example
 
@@ -152,13 +152,13 @@ will normally be typeset in the form of a single output file.
 
 @example
 \score @{
-  @var{..}
+  @var{@dots{}}
 @}
 \markup @{
-  @var{..}
+  @var{@dots{}}
 @}
 \score @{
-  @var{..}
+  @var{@dots{}}
 @}
 @end example
 
@@ -182,10 +182,10 @@ the top of the file is inserted.
   \header @{ piece = "Romanze" @}
 @}
 \markup @{
-   ..text of second verse..
+   @dots{}text of second verse@dots{}
 @}
 \markup @{
-   ..text of third verse..
+   @dots{}text of third verse@dots{}
 @}
 \score @{
   @dots{}
@@ -243,15 +243,15 @@ name which may clash, so
 @example
 \book @{
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 @end example
 
@@ -288,17 +288,17 @@ and @file{eightminiatures-Nocturne.pdf} by adding a
 \book @{
   \bookOutputSuffix "Romanze"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputSuffix "Menuetto"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputSuffix "Nocturne"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 @end example
 
@@ -309,17 +309,17 @@ by using @code{\bookOutputName} declarations
 \book @{
   \bookOutputName "Romanze"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputName "Menuetto"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 \book @{
   \bookOutputName "Nocturne"
   \score @{ @dots{} @}
-  \layout @{ @dots{} @}
+  \paper @{ @dots{} @}
 @}
 @end example
 
@@ -357,7 +357,7 @@ book-wide settings.  If more than one such definition of the same type
 is entered at the top level the definitions are combined, but in
 conflicting situations the later definitions take precedence.  For
 details of how this affects the @code{\layout} block see
-@ref{The \layout block}.
+@ref{The layout block,,The @code{@bs{}layout} block}.
 
 @item
 A direct scheme expression, such as
@@ -481,7 +481,7 @@ be entered:
 A single-line comment, introduced by a leading @code{%} sign.
 
 @item
-A multi-line comment delimited by @code{%@{ .. %@}}.
+A multi-line comment delimited by @code{%@{ @dots{} %@}}.
 
 @end itemize
 
@@ -493,17 +493,19 @@ However, whitespace should always be used in the following
 circumstances to avoid errors:
 
 @itemize
+
 @item Around every opening and closing curly bracket.
+
 @item After every command or variable, i.e. every item that
 begins with a @code{\} sign.
+
 @item After every item that is to be interpreted as a Scheme
 expression, i.e. every item that begins with a @code{#}@tie{}sign.
+
 @item To separate all elements of a Scheme expression.
-@item In @code{lyricmode} to separate all the terms in both
-@code{\override} and @code{\set} commands.  In particular, spaces
-must be used around the dot and the equals sign in commands like
-@code{\override Score . LyricText #'font-size = #5} and before and
-after the entire command.
+
+@item In @code{lyricmode} before and after @code{\set} and
+@code{\override} commands.
 
 @end itemize
 
@@ -513,7 +515,7 @@ Learning Manual:
 
 Notation Reference:
 @ref{Titles explained},
-@ref{The \layout block}.
+@ref{The layout block,,The @code{@bs{}layout} block}.
 
 
 @node Titles and headers
@@ -546,17 +548,17 @@ some pieces include a lot more information.
 
 Each @code{\book} block in a single input file produces a separate
 output file, see @ref{File structure}.  Within each output file
-two types of titling areas are provided: @emph{Bookpart Titles} at
-the beginning of each bookpart and @emph{Score Titles} at the
-beginning of each score.
+three types of titling areas are provided: @emph{Book Titles} at the
+beginning of each book, @emph{Bookpart Titles} at the beginning of
+each bookpart and @emph{Score Titles} at the beginning of each score.
 
 Values of titling fields such as @code{title} and @code{composer}
 are set in @code{\header} blocks.  (For the syntax of @code{\header}
 blocks and a complete list of the fields available by default see
-@ref{Default layout of bookpart and score titles}).  Both Bookpart
-Titles and Score Titles can contain the same fields, although by
-default the fields in Score Titles are limited to @code{piece} and
-@code{opus}.
+@ref{Default layout of bookpart and score titles}).  Book Titles,
+Bookpart Titles and Score Titles can all contain the same fields,
+although by default the fields in Score Titles are limited to
+@code{piece} and @code{opus}.
 
 @code{\header} blocks may be placed in four different places to form
 a descending hierarchy of @code{\header} blocks:
@@ -587,7 +589,15 @@ by a value set lower in the hierarchy, so:
 @itemize
 
 @item
- A Bookpart Title is derived from fields set at the top of the input
+A Book Title is derived from fields set at the top of the input file,
+modified by fields set in the @code{\book} block.  The resulting
+fields are used to print the Book Title for that book, providing that
+there is other material which generates a page at the start of the
+book, before the first bookpart.  A single @code{\pageBreak} will
+suffice.
+
+@item
+A Bookpart Title is derived from fields set at the top of the input
 file, modified by fields set in the @code{\book} block, and further
 modified by fields set in the @code{\bookpart} block.  The resulting
 values are used to print the Bookpart Title for that bookpart.
@@ -715,7 +725,7 @@ Notation Reference:
 
 This example demonstrates all @code{\header} variables:
 
-@lilypond[papersize=a7,quote,verbatim,noragged-right]
+@lilypond[papersize=a6landscape,quote,verbatim,noragged-right]
 \book {
   \header {
       % The following fields are centered
@@ -789,12 +799,17 @@ To change the default layout see @ref{Custom layout for titles}.
 
 @cindex breakbefore
 
+If a @code{\book} block starts immediately with a @code{\bookpart}
+block, no Book Title will be printed, as there is no page on which
+to print it.  If a Book Title is required, begin the @code{\book}
+block with some markup material or a @code{\pageBreak} command.
+
 Use the @code{breakbefore} variable inside a @code{\header} block
-that is itself in a @code{\score} block, to make the top-level
+that is itself in a @code{\score} block, to make the higher-level
 @code{\header} block titles appear on the first page on their own, with
 the music (defined in the @code{\score} block) starting on the next.
 
-@lilypond[papersize=a8landscape,verbatim,noragged-right]
+@lilypond[papersize=c7landscape,verbatim,noragged-right]
 \book {
   \header {
     title = "This is my Title"
@@ -860,16 +875,6 @@ the @code{copyright} text if there is only a single page.
 
 @end itemize
 
-@lilypond[papersize=a8landscape]
-\book {
-  \score {
-    \relative c' {
-      c4 d e f
-    }
-  }
-}
-@end lilypond
-
 The default tagline can be changed by adding a @code{tagline} in the
 top-level @code{\header} block.
 
@@ -913,7 +918,7 @@ footer and title text within the @code{\header} block.
   { s1 }
   \header {
     piece = \markup { \fontsize #4 \bold "PRAELUDIUM I" }
-    subtitle = \markup { \italic "(Excerpt)" }
+    opus = \markup { \italic "BWV 846" }
   }
 }
 @end lilypond
@@ -950,7 +955,7 @@ The default settings for @code{scoreTitleMarkup} as defined in
 
 @example
 scoreTitleMarkup = \markup @{ \column @{
-  \on-the-fly #print-all-headers @{ \bookTitleMarkup \hspace #1 @}
+  \on-the-fly \print-all-headers @{ \bookTitleMarkup \hspace #1 @}
   \fill-line @{
     \fromproperty #'header:piece
     \fromproperty #'header:opus
@@ -1109,9 +1114,9 @@ markup conditionally to header and footer text defined within the
 
 @example
 @code{variable} = @code{\markup} @{
-  ...
-  @code{\on-the-fly}  #@var{procedure}  @var{markup}
-  ...
+  @dots{}
+  @code{\on-the-fly}  \@var{procedure}  @var{markup}
+  @dots{}
 @}
 @end example
 
@@ -1129,8 +1134,8 @@ provided:
 @headitem  Procedure name           @tab  Condition tested
 
 @item print-page-number-check-first @tab  should this page number be printed?
-@item create-page-number-stencil    @tab  'print-page-numbers true?
-@item print-all-headers             @tab  'print-all-headers true?
+@item create-page-number-stencil    @tab  print-page-numbers true?
+@item print-all-headers             @tab  print-all-headers true?
 @item first-page                    @tab  first page in the book?
 @item (on-page nmbr)                @tab  page number = nmbr?
 @item last-page                     @tab  last page in the book?
@@ -1158,7 +1163,7 @@ same layout by defining it as @code{\oddFooterMarkup}:
     evenHeaderMarkup = \markup \null
     oddFooterMarkup = \markup {
       \fill-line {
-        \on-the-fly #print-page-number-check-first
+        \on-the-fly \print-page-number-check-first
         \fromproperty #'page:page-number-string
       }
     }
@@ -1174,9 +1179,9 @@ Several @code{\on-the-fly} conditions can be combined with an
 @q{and} operation, for example,
 
 @example
-  @code{\on-the-fly #first-page}
-  @code{\on-the-fly #last-page}
-  @code{@{ \markup ... \fromproperty #'header: ... @}}
+  @code{\on-the-fly \first-page}
+  @code{\on-the-fly \last-page}
+  @code{@{ \markup @dots{} \fromproperty #'header: @dots{} @}}
 @end example
 
 determines if the output is a single page.
@@ -1220,30 +1225,36 @@ Footnotes in music expressions fall into two categories:
 
 @table @emph
 @item Event-based footnotes
-are attached to a particular event.  Examples
-for such events are single notes, notes inside a chord, articulations
-(like beams, slurs, fingering indications, accents, dynamics) and
-lyrics.
+are attached to a particular event.  Examples for such events are
+single notes, articulations (like fingering indications, accents,
+dynamics), and post-events (like slurs and manual beams).  The
+general form for event-based footnotes is as follows:
 
-@item Time-based footnotes
-are bound to a particular point of time in a
-musical context.  Some commands like @code{\time} and @code{\clef}
-don't actually use events for creating objects like time signatures
-and clefs.  Neither does a chord create an event of its own: its
-stem or flag is created at the end of a time step (nominally through
-one of the note events inside).  A time-based footnote allows
-annotating such layout objects without referring to an event.
-
-@end table
+@example
+[@var{direction}] \footnote [@var{mark}] @var{offset} @var{footnote} @var{music}
+@end example
 
-The full form of a footnote command for both Event- and Time-based
-footnotes is
+@item Time-based footnotes
+are bound to a particular point of time in a musical context.  Some
+commands like @code{\time} and @code{\clef} don't actually use events
+for creating objects like time signatures and clefs.  Neither does a
+chord create an event of its own: its stem or flag is created at the
+end of a time step (nominally through one of the note events inside).
+Exactly which of a chord's multiple note events will be deemed the
+root cause of a stem or flag is undefined.  So for annotating those,
+time-based footnotes are preferable as well.
+
+A time-based footnote allows such layout objects to be annotated
+without referring to an event.  The general form for Time-based
+footnotes is:
 
 @example
-[@var{direction}] \footnote [@var{mark}] @var{offset} [@var{grob-name}] @var{footnote} @var{music}
+\footnote [@var{mark}] @var{offset} @var{footnote} [@var{Context}].@var{GrobName}
 @end example
 
-The elements are:
+@end table
+
+The elements for both forms are:
 
 @table @var
 
@@ -1268,24 +1279,24 @@ object where the mark should be placed.  Positive values of the
 offsets are taken from the right/top edge, negative values from the
 left/bottom edge and zero implies the mark is centered on the edge.
 
-@item grob-name
-specifies a type of grob to mark (like @samp{#'Flag}).  If it is
-given, a grob of that type associated with the referenced @var{music}
-will be used as the reference point.  It can be omitted (or replaced
-with @code{\default}) if the footnote mark is to be attached to the
-directly created grob in @var{music}.
+@item Context
+is the context in which the grob being footnoted is created.  It
+may be omitted if the grob is in a bottom context, e.g. a
+@code{Voice} context.
+@item GrobName
+specifies a type of grob to mark (like @samp{Flag}).  If it is
+specified, the footnote is not attached to a music expression in
+particular, but rather to all grobs of the type specified which
+occur at that moment of musical time.
 
 @item footnote
 is the markup or string specifying the footnote text to use at the
 bottom of the page.
 
 @item music
-is the music event or chord constituent or post-event that is being
-annotated.  While it cannot be omitted, it can be replaced by
-@code{\default} in which case the footnote is not attached to a music
-expression in particular, but rather to a moment of time.  It is
-mandatory in this case to use the @var{grob-name} argument for
-selecting an affected grob type, like @samp{#'TimeSignature}.
+is the music event or post-event or articulation
+that is being annotated.
 
 @end table
 
@@ -1293,15 +1304,13 @@ selecting an affected grob type, like @samp{#'TimeSignature}.
 
 @cindex footnotes, event-based
 
-The simplest form of event-based footnotes is just
+A footnote may be attached to a layout object directly caused
+by the event corresponding to @var{music} with the syntax:
 
 @example
-\footnote @var{offset} @var{footnote} @var{music}
+\footnote [@var{mark}] @var{offset} @var{footnote} @var{music}
 @end example
 
-This kind of footnote is attached to a layout object directly caused
-by the event corresponding to @var{music}.
-
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
   \header { tagline = ##f }
@@ -1314,12 +1323,33 @@ by the event corresponding to @var{music}.
 }
 @end lilypond
 
+Marking a @emph{whole} chord with an event-based footnote is not
+possible: a chord, even one containing just a single note, does
+not produce an actual event of its own.  However, individual
+notes @emph{inside} of the chord can be marked:
+
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+  \header { tagline = ##f }
+  \relative c'' {
+    \footnote #'(2 . 3) "Does not work" <a-3>2
+    <\footnote #'(-2 . -3) "Does work" a-3>4
+    <a-3 \footnote #'(3 . 1/2) "Also works" c-5>4
+  }
+}
+@end lilypond
+
 If the footnote is to be attached to a post-event or articulation
-the @code{\footnote} command must be preceded by a direction
+the @code{\footnote} command @emph{must} be preceded by a direction
 indicator, @code{-, _, ^}, and followed by the post-event or
 articulation to be annotated as the @var{music} argument.  In this
 form the @code{\footnote} can be considered to be simply a copy of
-its last argument with a footnote mark attached to it.
+its last argument with a footnote mark attached to it.  The syntax
+is:
+
+@example
+@var{direction} \footnote [@var{mark}] @var{offset} @var{footnote} @var{music}
+@end example
 
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
@@ -1334,62 +1364,77 @@ its last argument with a footnote mark attached to it.
 }
 @end lilypond
 
-Custom marks can be used as alternatives to numerical marks, and the
-annotation line joining the marked object to the mark can be
-suppressed:
+@subsubsubheading Time-based footnotes
+
+@cindex footnotes, time-based
+
+If the layout object being footmarked is @emph{indirectly} caused by
+an event (like an @code{Accidental} or @code{Stem} caused by a
+@code{NoteHead} event), the @var{GrobName} of the layout object
+is required after the footnote text instead of @var{music}:
 
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
   \header { tagline = ##f }
-  \relative c' {
-    \footnote "*" #'(0.5 . -2) \markup { \italic "* The first note" }
-    a'4 b8
-    \footnote \markup { \super "$" } #'(0.5 . 1)
-      \markup { \super "$" \italic " The second note" }
-    e c4
-    \once \override Score.FootnoteItem #'annotation-line = ##f
-    b-\footnote \markup \tiny "+" #'(0.1 . 0.1)
-      \markup { \super "+" \italic " Editorial" } \p
+  \relative c'' {
+    \footnote #'(-1 . -3) "A flat" Accidental
+    aes4 c
+    \footnote #'(-1 . 0.5) "Another flat" Accidental
+    ees
+    \footnote #'(1 . -2) "A stem" Stem
+    aes
   }
 }
 @end lilypond
 
-More examples of custom marks are shown in
-@ref{Footnotes in stand-alone text}.
+Note, however, that when a GrobName is specified, a footnote
+will be attached to all grobs of that type at the current time step:
 
-Marking an entire chord in this manner is not possible since a
-chord does not produce an event separate from that of its chord
-constituents, but the constituents themselves can be marked.
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+  \header { tagline = ##f }
+  \relative c' {
+    \footnote #'(-1 . 3) "A flat" Accidental
+    <ees ges bes>4
+    \footnote #'(2 . 0.5) "Articulation" Script
+    c'->-.
+  }
+}
+@end lilypond
 
-If the layout object being footmarked is @emph{indirectly} caused by
-an event (like an @code{Accidental} or @code{Stem} caused by a
-@code{NoteHead}), an additional symbol argument, the @var{grob-name},
-is required before the footnote text:
+A note inside of a chord can be given an individual (event-based)
+footnote.  A @samp{NoteHead} is the only grob directly caused
+from a chord note, so an event-based footnote command is
+@emph{only} suitable for adding a footnote to the @samp{NoteHead}
+within a chord.  All other chord note grobs are indirectly caused.
+The @code{\footnote} command itself offers no syntax for
+specifying @emph{both} a particular grob type @emph{as well as} a
+particular event to attach to.  However, one can use a time-based
+@code{\footnote} command for specifying the grob type, and then
+prefix this command with @code{\single} in order to have it
+applied to just the following event:
 
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
   \header { tagline = ##f }
   \relative c'' {
-    % footnotes may be added to chord constituents
-    < \footnote #'(-1 . -3) #'Accidental "Another flat" aes
-      c
-      \footnote #'(-1 . 0.5) #'Accidental "A flat" ees
+    < \footnote #'(1 . -2) "An A" a
+      \single \footnote #'(-1 . -1) "A sharp" Accidental
+      cis
+      \single \footnote #'(0.5 . 0.5) "A flat" Accidental
+      ees fis
     >2
-    \footnote #'(-1 . 2) #'Stem "A stem" ees2
   }
 }
 @end lilypond
 
 @warning {When footnotes are attached to several musical elements at
-the same musical moment, the footnotes are numbered from the higher
-to the lower elements as they appear in the printed output, not in
-the order in which they are written in the input stream.}
+the same musical moment, as they are in the example above, the
+footnotes are numbered from the higher to the lower elements as they
+appear in the printed output, not in the order in which they are
+written in the input stream.}
 
-@subsubsubheading Time-based footnotes
-
-@cindex footnotes, time-based
-
-Layout objects like clefs and key change signatures are mostly caused
+Layout objects like clefs and key-change signatures are mostly caused
 as a consequence of changed properties rather than actual events.
 Others, like bar lines and bar numbers, are a direct consequence of
 timing.  For this reason, footnotes on such objects have to be based
@@ -1398,30 +1443,52 @@ when marking features like stems and beams on @emph{chords}: while
 such per-chord features are nominally assigned to @emph{one} event
 inside the chord, relying on a particular choice would be imprudent.
 
-A time-based footnote is written in the same manner as an event-based
-footnote, except that @code{\default} is used in place of music
-indicating an event.  The layout object in question should always be
-explicitly specified for time-based footnotes to avoid getting marks
-on unexpected objects.
+The layout object in question must always be explicitly specified
+for time-based footnotes, and the appropriate context must be
+specified if the grob is created in a context other than the bottom
+context.
 
 @lilypond[quote,verbatim,papersize=a8landscape]
 \book {
   \header { tagline = ##f }
   \relative c'' {
     r1 |
-    \footnote #'(-0.5 . -1) #'TimeSignature "Meter change" \default
+    \footnote #'(-0.5 . -1) "Meter change" Staff.TimeSignature
     \time 3/4
-    \footnote #'(1 . -1) #'Stem "Chord stem" \default
+    \footnote #'(1 . -1) "Chord stem" Stem
     <c e g>4 q q
-    \footnote #'(-0.5 . 1) #'BarLine "Bar line" \default
+    \footnote #'(-0.5 . 1) "Bar line" Staff.BarLine
     q q
-    \footnote #'(0.5 . -1) #'KeySignature "Key change" \default
-    \key c\minor
+    \footnote #'(0.5 . -1) "Key change" Staff.KeySignature
+    \key c \minor
     q
   }
 }
 @end lilypond
 
+Custom marks can be used as alternatives to numerical marks, and the
+annotation line joining the marked object to the mark can be
+suppressed:
+
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+  \header { tagline = ##f }
+  \relative c' {
+    \footnote "*" #'(0.5 . -2) \markup { \italic "* The first note" } a'4
+    b8
+    \footnote \markup { \super "$" } #'(0.5 . 1)
+      \markup { \super "$" \italic " The second note" } e
+    c4
+    \once \override Score.FootnoteItem.annotation-line = ##f
+    b-\footnote \markup \tiny "+" #'(0.1 . 0.1)
+      \markup { \super "+" \italic " Editorial" } \p
+  }
+}
+@end lilypond
+
+More examples of custom marks are shown in
+@ref{Footnotes in stand-alone text}.
+
 
 @node Footnotes in stand-alone text
 @unnumberedsubsubsec Footnotes in stand-alone text
@@ -1442,7 +1509,7 @@ created in different ways.
 The syntax of a footnote in stand-alone text with automatic marks is
 
 @example
-\markup @{ ... \auto-footnote @var{text} @var{footnote} ... @}
+\markup @{ @dots{} \auto-footnote @var{text} @var{footnote} @dots{} @}
 @end example
 
 The elements are:
@@ -1481,7 +1548,7 @@ For example:
 The syntax of a footnote in stand-alone text with custom marks is
 
 @example
-\markup @{ ... \footnote @var{mark} @var{footnote} ... @}
+\markup @{ @dots{} \footnote @var{mark} @var{footnote} @dots{} @}
 @end example
 
 The elements are:
@@ -1564,12 +1631,14 @@ Internals Reference:
 @rinternals{Footnote_engraver}.
 
 @knownissues
-Multiple footnotes for the same page can only be stacked, one on top
-of the other; they cannot be printed on the same line.
+Multiple footnotes for the same page can only be stacked, one above
+the other; they cannot be printed on the same line.
 
 Footnotes cannot be attached to @code{MultiMeasureRests} or
-automatic beams and footnote marks may collide with staves,
-@code{\markup} objects, other footnote marks and annotation lines.
+automatic beams or lyrics.
+
+Footnote marks may collide with staves, @code{\markup} objects, other
+footnote marks and annotation lines.
 
 
 @node Reference to page numbers
@@ -1806,7 +1875,7 @@ subdirectory called @file{parts} within the current directory, use
 @example
 \include "parts/VI.ly"
 \include "parts/VII.ly"
-... etc
+@dots{} etc
 @end example
 
 Files which are to be included can also contain @code{\include}
@@ -1840,7 +1909,7 @@ libA/
   libA.ly
   A1.ly
   A2.ly
-  ...
+  @dots{}
 @end example
 
 @noindent
@@ -1850,7 +1919,7 @@ then the entry file, @code{libA.ly}, will contain
 #(ly:set-option 'relative-includes #t)
 \include "A1.ly"
 \include "A2.ly"
-...
+@dots{}
 % return to default setting
 #(ly:set-option 'relative-includes #f)
 @end example
@@ -1880,7 +1949,7 @@ and in main.ly write
 @example
 \include "VI.ly"
 \include "VII.ly"
-... etc
+@dots{} etc
 @end example
 
 Files which are to be included in many scores may be placed in
@@ -2019,13 +2088,16 @@ to tagged music is as follows:
 @headitem Filter
   @tab Result
 @item
-Tagged music preceded by @code{\keepWithTag #'@var{name}}
-  @tab Untagged music and music tagged with @var{name} is included;
-       music tagged with any other tag name is excluded.
+Tagged music preceded by @code{\keepWithTag #'@var{name}} or
+       @code{\keepWithTag #'(@var{name1} @var{name2}@dots{})}
+@tab Untagged music and music tagged with any of the given tag
+     names is included; 
+     music tagged with any other tag name is excluded.
 @item
-Tagged music preceded by @code{\removeWithTag #'@var{name}}
-@tab Untagged music and music tagged with any tag name other than
-     @var{name} is included; music tagged with @var{name} is
+Tagged music preceded by @code{\removeWithTag #'@var{name}} or
+       @code{\removeWithTag #'(@var{name1} @var{name2}@dots{})}
+@tab Untagged music and music not tagged with any of the given tag names
+     is included; music tagged with any of the given tag names is
      excluded.
 @item
 Tagged music not preceded by either @code{\keepWithTag} or
@@ -2096,12 +2168,13 @@ c1-\tag #'warn ^"Watch!"
 @end example
 
 Multiple tags may be placed on expressions with multiple
-@code{\tag} entries:
+@code{\tag} entries, or by combining multiple tags into one symbol
+list:
 
 @lilypond[quote,verbatim]
 music = \relative c'' {
   \tag #'a \tag #'both { a4 a a a }
-  \tag #'b \tag #'both { b4 b b b }
+  \tag #'(b both) { b4 b b b }
 }
 <<
 \keepWithTag #'a \music
@@ -2111,19 +2184,23 @@ music = \relative c'' {
 @end lilypond
 
 Multiple @code{\removeWithTag} filters may be applied to a single
-music expression to remove several differently named tagged sections:
+music expression to remove several differently named tagged
+sections.  Alternatively, you can use a single
+@code{\removeWithTag} with a list of tags.
 
 @lilypond[verbatim,quote]
 music = \relative c'' {
-\tag #'A { a4 a a a }
-\tag #'B { b4 b b b }
-\tag #'C { c4 c c c }
-\tag #'D { d4 d d d }
+  \tag #'A { a4 a a a }
+  \tag #'B { b4 b b b }
+  \tag #'C { c4 c c c }
+  \tag #'D { d4 d d d }
 }
-{
-\removeWithTag #'B
-\removeWithTag #'C
-\music
+\new Voice {
+  \removeWithTag #'B
+  \removeWithTag #'C
+  \music
+  \removeWithTag #'(B C)
+  \music
 }
 @end lilypond
 
@@ -2131,6 +2208,9 @@ Two or more @code{\keepWithTag} filters applied to a single music
 expression will cause @emph{all} tagged sections to be removed, as
 the first filter will remove all tagged sections except the one
 named, and the second filter will remove even that tagged section.
+Usually you would rather want to use a single @code{\keepWithTag}
+command with a list of multiple tags: this will only remove tagged
+sections not given in @emph{any} of the tags.
 
 Sometimes you want to splice some music at a particular place in an
 existing music expression.  You can use @code{\pushToTag} and
@@ -2165,16 +2245,14 @@ Notation Reference:
 @ref{Automatic part combining},
 @ref{Including LilyPond files}.
 
-@ignore
-@c This warning is more general than this placement implies.
-@c Rests are not merged whether or not they come from tagged sections.
-@c Should be deleted?  -td
-
 @knownissues
-Multiple rests are not merged if you create a score with more
-than one tagged section at the same place.
-
-@end ignore
+Calling @code{\relative} on a music expression obtained by filtering
+music through @code{\keepWithTag} or @code{\removeWithTag} might cause
+the octave relations to change, as only the pitches actually
+remaining in the filtered expression will be considered.  Applying
+@code{\relative} first, before @code{\keepWithTag} or
+@code{\removeWithTag}, avoids this danger as @code{\relative} then
+acts on all the pitches as-input.
 
 
 @node Using global settings
@@ -2452,10 +2530,10 @@ are adding notes) is interesting to view and correct.  To speed up
 this correction process, it is possible to skip typesetting of all but
 the last few measures.  This is achieved by putting
 
-@verbatim
+@example
 showLastLength = R1*5
-\score { ... }
-@end verbatim
+\score @{ @dots{} @}
+@end example
 
 @noindent
 in your source file.  This will render only the last 5 measures
@@ -2513,11 +2591,11 @@ Here are a few sample bars of music set in Gonville:
 
 @c NOTE: these images are a bit big, but that's important
 @c       for the font comparison.  -gp
-@sourceimage{Gonville_after,,,}
+@sourceimage{Gonville_after,15cm,,}
 
 Here are a few sample bars of music set in LilyPond's Feta font:
 
-@sourceimage{Gonville_before,,,}
+@sourceimage{Gonville_before,15cm,,}
 
 @subsubheading Installation Instructions for MacOS
 
@@ -2567,6 +2645,7 @@ score contains more than 15 staves, MIDI channels will be reused.
 
 @menu
 * Creating MIDI files::
+* MIDI Instruments::
 * MIDI block::
 * What goes into the MIDI output?::
 * Repeats in MIDI::
@@ -2583,7 +2662,7 @@ To create a MIDI output file from a LilyPond input file, add a
 
 @example
 \score @{
-  @var{...music...}
+  @var{@dots{}music@dots{}}
   \midi @{ @}
 @}
 @end example
@@ -2595,7 +2674,7 @@ present.
 
 @example
 \score @{
-  @var{...music...}
+  @var{@dots{}music@dots{}}
   \midi @{ @}
   \layout @{ @}
 @}
@@ -2637,33 +2716,6 @@ lilypond … -dmidi-extension=midi lilyFile.ly
 @end example
 
 
-@unnumberedsubsubsec Instrument names
-
-@cindex instrument names
-@funindex Staff.midiInstrument
-
-The MIDI instrument to be used is specified by setting the
-@code{Staff.midiInstrument} property to the instrument name.
-The name should be chosen from the list in @ref{MIDI instruments}.
-
-@example
-\new Staff @{
-  \set Staff.midiInstrument = #"glockenspiel"
-  @var{...notes...}
-@}
-@end example
-
-@example
-\new Staff \with @{midiInstrument = #"cello"@} @{
-  @var{...notes...}
-@}
-@end example
-
-If the selected instrument does not exactly match an instrument from
-the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"})
-instrument is used.
-
-
 @snippets
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
@@ -2700,6 +2752,34 @@ Not all midi players correctly handle tempo changes in the midi
 output.  Players that are known to work include MS Windows Media
 Player and @uref{http://@/timidity@/.sourceforge@/.net/,timidity}.
 
+@node MIDI Instruments
+@subsection MIDI Instruments
+
+@cindex instrument names
+@cindex MIDI, instruments
+@funindex Staff.midiInstrument
+
+The MIDI instrument to be used is specified by setting the
+@code{Staff.midiInstrument} property to the instrument name.
+The name should be chosen from the list in @ref{MIDI instruments}.
+
+@example
+\new Staff @{
+  \set Staff.midiInstrument = #"glockenspiel"
+  @var{@dots{}notes@dots{}}
+@}
+@end example
+
+@example
+\new Staff \with @{midiInstrument = #"cello"@} @{
+  @var{@dots{}notes@dots{}}
+@}
+@end example
+
+If the selected instrument does not exactly match an instrument from
+the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"})
+instrument is used.
+
 @node MIDI block
 @subsection MIDI block
 @cindex MIDI block
@@ -2714,7 +2794,7 @@ indication to be printed:
 
 @example
 \score @{
-  @var{...music...}
+  @var{@dots{}music@dots{}}
   \midi @{
     \tempo 4 = 72
   @}
@@ -2740,7 +2820,7 @@ from the MIDI output, insert the following lines in the
 
 @example
 \midi @{
-  ...
+  @dots{}
   \context @{
     \Voice
     \remove "Dynamic_performer"
@@ -2763,6 +2843,12 @@ within a score block defined with a @code{\score} command.
 
 @c TODO Check grace notes - timing is suspect?
 
+@menu
+* Supported in MIDI::
+* Unsupported in MIDI::
+@end menu
+
+@node Supported in MIDI
 @unnumberedsubsubsec Supported in MIDI
 
 @cindex Pitches in MIDI
@@ -2810,6 +2896,7 @@ above list:
 @end itemize
 
 
+@node Unsupported in MIDI
 @unnumberedsubsubsec Unsupported in MIDI
 
 @c TODO index as above
@@ -2864,12 +2951,12 @@ and percent repeats).  For example,
 
 @example
 \score @{
-  @var{..music..}
-  \layout @{ .. @}
+  @var{@dots{}music@dots{}}
+  \layout @{ @dots{} @}
 @}
 \score @{
-  \unfoldRepeats @var{..music..}
-  \midi @{ .. @}
+  \unfoldRepeats @var{@dots{}music@dots{}}
+  \midi @{ @dots{} @}
 @}
 @end example
 
@@ -2881,6 +2968,14 @@ by default in the Voice context.  It is possible to control the
 overall MIDI volume, the relative volume of dynamic markings and
 the relative volume of different instruments.
 
+@menu
+* Dynamic marks::
+* Overall MIDI volume::
+* Equalizing different instruments (i)::
+* Equalizing different instruments (ii)::
+@end menu
+
+@node Dynamic marks
 @unnumberedsubsubsec Dynamic marks
 
 Dynamic marks are translated to a fixed fraction of the available
@@ -2930,15 +3025,15 @@ redefined, it would be better to use the
 @file{../scm/midi.scm} and the associated table as a model.
 The final example in this section shows how this might be done.
 
+@node Overall MIDI volume
 @unnumberedsubsubsec Overall MIDI volume
 
 The minimum and maximum overall volume of MIDI dynamic markings is
 controlled by setting the properties @code{midiMinimumVolume} and
-@code{midiMaximumVolume} at the @code{Score} level.  These
-properties have an effect only on dynamic marks, so if they
-are to apply from the start of the score a dynamic mark must be
-placed there.  The fraction corresponding to each dynamic mark is
-modified with this formula
+@code{midiMaximumVolume} at the @code{Score} level.  These properties
+have an effect only at the start of a voice and on dynamic marks.  The
+fraction corresponding to each dynamic mark is modified with this
+formula
 
 @example
 midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fraction
@@ -2982,6 +3077,7 @@ volume is limited to the range 0.2 - 0.5.
 }
 @end lilypond
 
+@node Equalizing different instruments (i)
 @unnumberedsubsubsec Equalizing different instruments (i)
 
 If the minimum and maximum MIDI volume properties are set in
@@ -2991,9 +3087,7 @@ equalizer, which can enhance the quality of the MIDI output
 remarkably.
 
 In this example the volume of the clarinet is reduced relative
-to the volume of the flute.  There must be a dynamic
-mark on the first note of each instrument for this to work
-correctly.
+to the volume of the flute.
 
 @lilypond[verbatim,quote]
 \score {
@@ -3029,6 +3123,8 @@ correctly.
 }
 @end lilypond
 
+
+@node Equalizing different instruments (ii)
 @unnumberedsubsubsec Equalizing different instruments (ii)
 
 If the MIDI minimum and maximum volume properties are not set
@@ -3176,7 +3272,7 @@ and in the @code{\score} section do
 
 @example
 \unfoldRepeats \articulate <<
-       all the rest of the score...
+       all the rest of the score@dots{}
 >>
 @end example
 
@@ -3230,7 +3326,7 @@ will display
 
 By default, LilyPond will print these messages to the console
 along with all the other LilyPond compilation messages.  To split
-up these messages and save the results of @code{\display@{STUFF@}},
+up these messages and save the results of @code{\displayLilyMusic},
 redirect the output to a file.
 
 @example
@@ -3288,7 +3384,7 @@ The syntax is a tab-delimited line, with two fixed fields on each
 line followed by optional parameters.
 
 @example
-@var{time}  @var{type}  @var{...params...}
+@var{time}  @var{type}  @var{@dots{}params@dots{}}
 @end example
 
 This information can easily be read into other programs such as
index 6bf1c0be8fe3cb6f93dce9bce7ba00826da0d949..a8405b5274f29b9008be04c9afbaba92c08b5aa4 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @node Keyboard and other multi-staff instruments
 @section Keyboard and other multi-staff instruments
@@ -206,7 +206,7 @@ Overlapping notation can result when voices cross staves:
   \new Staff = "up" {
     \voiceOne
     % Make space for fingering in the cross-staff voice
-    \once\override DynamicLineSpanner #'staff-padding = #3.4
+    \once\override DynamicLineSpanner.staff-padding = #4
     e''2\p\< d''\>
     c''1\!
   }
@@ -580,7 +580,7 @@ come into use to simplify the performance instructions.
 @snippets
 
 @lilypondfile[verbatim,quote,texidoc,doctitle]
-{accordion-discant-symbols.ly}
+{accordion-registers.ly}
 
 @seealso
 Snippets:
index 2eb3182e46201771d74cf7441300010f5a5d1526..75c12d4e4d28f3ac06784ea8e5287b7322a8cea7 100644 (file)
@@ -1530,6 +1530,7 @@ created for midi, layout and paper blocks.
 
 @cindex parser
 @cindex Bison
+@cindex LilyPond grammar
 @cindex grammar for LilyPond
 @cindex BNF
 
@@ -1542,10 +1543,10 @@ cannot be achieved the file is invalid and an appropriate error
 message is produced.  The syntactic groupings and the rules for
 constructing the groupings from their parts for the LilyPond syntax
 are defined in @file{lily/parser.yy} and shown in Backus Normal Form
-(BNF) in @ref{LilyPond grammar}.  This file is used to build the
-parser during the program build by the parser generator, Bison.  It
-is part of the source code and is not included in the LilyPond
-binary installation.
+(BNF) in @rcontrib{LilyPond grammar}.  This file is used to build the
+parser during the program build by the parser generator, Bison.  It is
+part of the source code and is not included in the LilyPond binary
+installation.
 
 
 @node parser variable
@@ -1559,7 +1560,6 @@ binary installation.
 @cindex mode
 @cindex output-count
 @cindex output-suffix
-@cindex parseStringResult
 @cindex partCombineListener
 @cindex pitchnames
 @cindex toplevel-bookparts
@@ -1587,7 +1587,6 @@ LilyPond uses the following parser variables:
 @item mode
 @item output-count
 @item output-suffix
-@item parseStringResult
 @item partCombineListener
 @item pitchnames
 @item toplevel-bookparts
index f864e1e625279cd4c2767c62e9c8e28227a19275..27127dee69d5783e90200a0a652669a507402038 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Percussion
 @section Percussion
@@ -247,17 +247,16 @@ mus = \drummode {
   << \new DrumStaff \with {
        \remove "Bar_engraver"
        \remove "Time_signature_engraver"
-       \override Stem #'transparent = ##t
-       \override Flag #'transparent = ##t
-       \override Stem #'Y-extent = ##f
+       \hide Stem
+       \override Stem.Y-extent = ##f
      } \mus
      \new Lyrics \nam
   >>
   \layout {
     \context {
       \Score
-      \override LyricText #'font-family = #'typewriter
-      \override BarNumber #'transparent =##T
+      \override LyricText.font-family = #'typewriter
+      \override BarNumber.transparent =##T
     }
   }
 }
@@ -279,16 +278,15 @@ mus = \drummode { timh ssh timl ssl cb s16 }
   \new DrumStaff \with {
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
-    \override StaffSymbol #'line-count = #2
-    \override StaffSymbol #'staff-space = #2
-    \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.0 . 4.0)
+    \hide Stem
+    \override Stem.Y-extent = ##f
+    \override StaffSymbol.line-count = #2
+    \override StaffSymbol.staff-space = #2
+    \override VerticalAxisGroup.minimum-Y-extent = #'(-3.0 . 4.0)
     drumStyleTable = #timbales-style
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -306,16 +304,15 @@ mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 }
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
     drumStyleTable = #congas-style
-    \override StaffSymbol #'line-count = #2
+    \override StaffSymbol.line-count = #2
 
     %% this sucks; it will lengthen stems.
-    \override StaffSymbol #'staff-space = #2
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \override StaffSymbol.staff-space = #2
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -332,17 +329,16 @@ mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 }
   \new DrumStaff \with {
     \remove "Bar_engraver"
     \remove "Time_signature_engraver"
-    \override StaffSymbol #'line-count = #2
+    \override StaffSymbol.line-count = #2
     drumStyleTable = #bongos-style
 
     %% this sucks; it will lengthen stems.
-    \override StaffSymbol #'staff-space = #2
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \override StaffSymbol.staff-space = #2
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -359,14 +355,13 @@ mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 }
   \new DrumStaff \with{
     \remove "Bar_engraver"
     drumStyleTable = #percussion-style
-    \override StaffSymbol #'line-count = #1
+    \override StaffSymbol.line-count = #1
     \remove "Time_signature_engraver"
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Stem #'Y-extent = ##f
+    \hide Stem
+    \override Stem.Y-extent = ##f
   } \mus
   \new Lyrics {
-    \override LyricText #'font-family = #'typewriter
+    \override LyricText.font-family = #'typewriter
     \nam
   }
 >>
@@ -417,10 +412,10 @@ Two Woodblocks, entered with wbh (high woodblock) and wbl (low woodblock)
 woodstaff = {
   % This defines a staff with only two lines.
   % It also defines the positions of the two lines.
-  \override Staff.StaffSymbol #'line-positions = #'(-2 3)
+  \override Staff.StaffSymbol.line-positions = #'(-2 3)
 
   % This is necessary; if not entered, the barline would be too short!
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
 }
 
 \new DrumStaff {
@@ -438,7 +433,7 @@ woodstaff = {
 @end lilypond
 
 Note that in this special case the length of the barline must
-altered with @code{\override Staff.BarLine #'bar-extent #'(from . to)}.
+altered with @code{\override Staff.BarLine.bar-extent #'(from . to)}.
 Otherwise it would be too short.  And you have also to define the
 positions of the two stafflines.  For more information about these
 delicate things have a look at @ref{Staff symbol}.
@@ -449,8 +444,8 @@ A tambourine, entered with @q{tamb}:
 #(define mydrums '((tambourine default #t 0)))
 
 tambustaff = {
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Tambourine"
 }
 
@@ -475,8 +470,8 @@ Music for Tam-Tam (entered with @q{tt}):
 #(define mydrums '((tamtam default #t 0)))
 
 tamtamstaff = {
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Tamtam"
 }
 
@@ -497,9 +492,9 @@ Two different bells, entered with @q{cb} (cowbell) and @q{rb} (ridebell)
                    (cowbell  default #t -2)))
 
 bellstaff = {
-  \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3)
+  \override DrumStaff.StaffSymbol.line-positions = #'(-2 3)
   \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
-  \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5)
+  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
   \set DrumStaff.instrumentName = #"Different Bells"
 }
 
index c9e99f5eb712cf4e0af4255fe14be40a73b45eea..4c41302c4f273657cdba7d58c4e7d03494c6ee6d 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.18"
 
 
 @node Pitches
@@ -87,6 +87,18 @@ octave.
 }
 @end lilypond
 
+@funindex absolute
+@funindex \absolute
+Music can be marked explicitly as being in absolute octave
+notation by preceding it with @code{\absolute}:
+
+@example
+\absolute @var{musicexpr}
+@end example
+
+will be interpreted in absolute octave entry mode regardless of
+the context it appears in.
+
 @seealso
 Music Glossary:
 @rglos{Pitch names}.
@@ -107,13 +119,13 @@ Snippets:
 @funindex relative
 @funindex \relative
 
-When octaves are specified in absolute mode it is easy to
-accidentally put a pitch in the wrong octave.  Relative octave
-mode reduces these errors since most of the time it is not
-necessary to indicate any octaves at all.  Furthermore, in
-absolute mode a single mistake may be difficult to spot, while in
-relative mode a single error puts the rest of the piece off by one
-octave.
+Absolute octave entry requires specifying the octave for every
+single note.  Relative octave entry, in contrast, specifies each
+octave in relation to the last note: changing one note's octave
+will affect all of the following notes.
+
+Relative note mode has to be entered explicitly using the
+@code{\relative} command:
 
 @example
 \relative @var{startpitch} @var{musicexpr}
@@ -143,8 +155,27 @@ octaves.
 @item
 The pitch of the first note is relative to
 @code{@var{startpitch}}.  @code{@var{startpitch}} is specified in
-absolute octave mode, and it is recommended that it be a octave of
-@code{c}.
+absolute octave mode.  Which choices are meaningful?
+
+@table @asis
+@item an octave of @code{c}
+Identifying middle C with @code{c'} is quite basic, so finding
+octaves of @code{c} tends to be straightforward.  If your music
+starts with @code{gis} above @code{c'''}, you'd write something
+like @code{\relative c''' @{ gis' @dots{} @}}
+
+@item an octave of the first note inside
+Writing @code{\relative gis''' @{ gis @dots{} @}} makes it easy to
+determine the absolute pitch of the first note inside.
+
+@item no explicit starting pitch
+This (namely writing @code{\relative @{ gis''' @dots{} @}}) can be
+viewed as a compact version of the previous option: the first note
+inside is written in absolute pitch itself.  This happens to be
+equivalent to choosing @code{f} as the reference pitch.
+@end table
+
+The documentation will usually employ the first option.
 @end itemize
 
 Here is the relative mode shown in action:
@@ -283,12 +314,6 @@ Internals Reference:
 @funindex \relative
 @funindex relative
 
-@c DEPRECATED
-If no @code{@var{startpitch}} is specified for @code{\relative},
-then@tie{}@code{c'} is assumed.  However, this is a deprecated
-option and may disappear in future versions, so its use is
-discouraged.
-
 
 @node Accidentals
 @unnumberedsubsubsec Accidentals
@@ -379,7 +404,7 @@ cis cis cis! cis? c c c! c?
 Accidentals on tied notes are only printed at the beginning of a
 new system:
 
-@lilypond[verbatim,quote,relative=2]
+@lilypond[verbatim,quote,relative=2,ragged-right]
 cis1~ cis~
 \break
 cis
@@ -464,9 +489,9 @@ The available languages and the note names they define are:
   @tab c d e f g a b h
 @item @code{english}
   @tab c d e f g a bf b
-@item @code{espanol}
+@item @code{espanol} or @code{español}
   @tab do re mi fa sol la sib si
-@item @code{italiano}
+@item @code{italiano} or @code{français}
   @tab do re mi fa sol la sib si
 @item @code{norsk}
   @tab c d e f g a b h
@@ -497,9 +522,9 @@ also vary depending on the language:
 @item @code{english}
   @tab -s/-sharp @tab -f/-flat @tab -ss/-x/-sharpsharp
     @tab -ff/-flatflat
-@item @code{espanol}
+@item @code{espanol} or @code{español}
   @tab -s @tab -b @tab -ss/-x @tab -bb
-@item @code{italiano}
+@item @code{italiano} or @code{français}
   @tab -d @tab -b @tab -dd @tab -bb
 @item @code{norsk}
   @tab -iss/-is @tab -ess/-es @tab -ississ/-isis
@@ -551,9 +576,9 @@ appear in this table do not provide special note names yet.
   @tab -ih @tab -eh @tab -isih @tab -eseh
 @item @code{english}
   @tab -qs @tab -qf @tab -tqs @tab -tqf
-@item @code{espanol}
+@item @code{espanol} or @code{español}
   @tab -cs @tab -cb @tab -tcs @tab -tcb
-@item @code{italiano}
+@item @code{italiano} or @code{français}
   @tab -sd @tab -sb @tab -dsd @tab -bsb
 @item @code{portugues}
   @tab -sqt @tab -bqt @tab -stqt @tab -btqt
@@ -841,7 +866,7 @@ music = \relative c' { c d e f }
 @end lilypond
 
 @warning{Motifs to be inverted should be expressed in absolute form
-or be first converted to absolute form by enclosing them in a 
+or be first converted to absolute form by enclosing them in a
 @code{\relative} block.}
 
 @seealso
@@ -1127,6 +1152,8 @@ c2 c
 @cindex transposing clef
 @cindex clef, transposing
 @cindex octave transposition
+@cindex optional octave transposition
+@cindex octave transposition, optional
 @cindex choral tenor clef
 @cindex tenor clef, choral
 
@@ -1151,6 +1178,19 @@ c2 c
 c2 c
 @end lilypond
 
+Optional octavation can be obtained by enclosing the numeric
+argument in parentheses or brackets:
+
+@lilypond[verbatim,quote,relative=1]
+\clef "treble_(8)"
+c2 c
+\clef "bass^[15]"
+c2 c
+@end lilypond
+
+The pitches are displayed as if the numeric argument were
+given without parentheses/brackets.
+
 Some special purpose clefs are described in @ref{Mensural clefs},
 @ref{Gregorian clefs}, @ref{Default tablatures}, and @ref{Custom
 tablatures}.  For mixing different clefs when using cue notes within a
@@ -1176,9 +1216,24 @@ Snippets:
 Internals Reference:
 @rinternals{Clef_engraver},
 @rinternals{Clef},
-@rinternals{OctavateEight},
+@rinternals{ClefModifier},
 @rinternals{clef-interface}.
 
+@knownissues
+Ottavation numbers attached to clefs are treated as separate grobs.  So
+any @code{\override} done to the @var{Clef} will also need to be
+applied, as a separate @code{\override}, to the @var{ClefModifier}
+grob.
+
+@lilypond[fragment,quote,relative=1]
+\new Staff \with {
+  \override ClefModifier.color = #red
+  \override Clef.color = #blue
+}
+
+\clef "treble_8" c4
+@end lilypond
+
 
 @node Key signature
 @unnumberedsubsubsec Key signature
@@ -1250,6 +1305,37 @@ f
 fis
 @end lilypond
 
+Additional modes can be defined, by listing the alterations
+for each scale step when the mode starts on C.
+
+@lilypond[verbatim,quote]
+freygish = #`((0 . ,NATURAL) (1 . ,FLAT) (2 . ,NATURAL)
+    (3 . ,NATURAL) (4 . ,NATURAL) (5 . ,FLAT) (6 . ,FLAT))
+
+\relative c' {
+  \key c \freygish c4 des e f
+  \bar "||" \key d \freygish d es fis g
+}
+@end lilypond
+
+Accidentals in the key signature may be printed in octaves other
+than their traditional positions, or in multiple octaves, by
+using the @code{flat-positions} and @code{sharp-positions}
+properties of @code{KeySignature}.  Entries in these properties
+specify the range of staff-positions where accidentals will be
+printed.  If a single position is specified in an entry, the
+accidentals are placed within the octave ending at that staff
+position.
+
+@lilypond[verbatim, quote,relative=0]
+\override Staff.KeySignature.flat-positions = #'((-5 . 5))
+\override Staff.KeyCancellation.flat-positions = #'((-5 . 5))
+\clef bass \key es \major es g bes d
+\clef treble \bar "||" \key es \major es g bes d
+
+\override Staff.KeySignature.sharp-positions = #'(2)
+\bar "||" \key b \major b fis b2
+@end lilypond
 
 @snippets
 
@@ -1276,7 +1362,6 @@ Internals Reference:
 @rinternals{Key_performer},
 @rinternals{KeyCancellation},
 @rinternals{KeySignature},
-@rinternals{key-cancellation-interface},
 @rinternals{key-signature-interface}.
 
 
@@ -1315,6 +1400,9 @@ a2 b
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {ottava-text.ly}
 
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{adding-an-ottava-marking-to-a-single-voice.ly}
+
 @seealso
 Music Glossary:
 @rglos{octavation}.
@@ -1393,21 +1481,34 @@ playing in unison.
 @end lilypond
 
 The @code{\transposition} may be changed during a piece.  For
-example, a clarinetist may switch from an A clarinet to a B-flat
-clarinet.
-
-@lilypond[verbatim,quote,relative=2]
-\set Staff.instrumentName = #"Cl (A)"
-\key a \major
-\transposition a
-c d e f
-\textLengthOn
-<>^\markup { Switch to B\flat clarinet }
-R1
+example, a clarinetist may be required to switch from an A clarinet
+to a B-flat clarinet.
 
-\key bes \major
-\transposition bes
-c2 g
+@lilypond[verbatim,quote]
+flute = \relative c'' {
+  \key f \major
+  \cueDuring #"clarinet" #DOWN {
+    R1 _\markup\tiny "clarinet"
+    c4 f e d
+    R1 _\markup\tiny "clarinet"
+  }
+}
+clarinet = \relative c'' {
+  \key aes \major
+  \transposition a
+  aes4 bes c des
+  R1^\markup { muta in B\flat }
+  \key g \major
+  \transposition bes
+  d2 g,
+}
+\addQuote "clarinet" \clarinet
+<<
+  \new Staff \with { instrumentName = #"Flute" }
+    \flute
+  \new Staff \with { instrumentName = #"Cl (A)" }
+    \clarinet
+>>
 @end lilypond
 
 @seealso
@@ -1443,7 +1544,7 @@ accidental style to use.  This function is called as follows:
 
 @example
 \new Staff <<
-  \accidentalStyle "voice"
+  \accidentalStyle voice
   @{ @dots{} @}
 >>
 @end example
@@ -1456,7 +1557,7 @@ scope the style should be changed.  For example, to use the same
 style in all staves of the current @code{StaffGroup}, use:
 
 @example
-\accidentalStyle #'StaffGroup "voice"
+\accidentalStyle StaffGroup.voice
 @end example
 
 The following accidental styles are supported.  To demonstrate
@@ -1499,11 +1600,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1519,7 +1620,7 @@ both staves.
   <<
     \context Staff = "up" @{
       %%% change the next line as desired:
-      \accidentalStyle #'Score "default"
+      \accidentalStyle Score.default
       \musicA
     @}
     \context Staff = "down" @{
@@ -1582,11 +1683,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "default"
+      \accidentalStyle default
       \musicB
     }
   >>
@@ -1655,11 +1756,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "voice"
+      \accidentalStyle voice
       \musicB
     }
   >>
@@ -1721,11 +1822,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern"
+      \accidentalStyle modern
       \musicB
     }
   >>
@@ -1785,11 +1886,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-cautionary"
+      \accidentalStyle modern-cautionary
       \musicB
     }
   >>
@@ -1852,11 +1953,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice"
+      \accidentalStyle modern-voice
       \musicB
     }
   >>
@@ -1913,11 +2014,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "modern-voice-cautionary"
+      \accidentalStyle modern-voice-cautionary
       \musicB
     }
   >>
@@ -1978,7 +2079,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano"
+      \accidentalStyle piano
       \musicA
     }
     \context Staff = "down" {
@@ -2038,7 +2139,7 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "piano-cautionary"
+      \accidentalStyle piano-cautionary
       \musicA
     }
     \context Staff = "down" {
@@ -2097,11 +2198,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern"
+      \accidentalStyle neo-modern
       \musicB
     }
   >>
@@ -2154,11 +2255,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-cautionary"
+      \accidentalStyle neo-modern-cautionary
       \musicB
     }
   >>
@@ -2214,11 +2315,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice"
+      \accidentalStyle neo-modern-voice
       \musicB
     }
   >>
@@ -2271,11 +2372,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "neo-modern-voice-cautionary"
+      \accidentalStyle neo-modern-voice-cautionary
       \musicB
     }
   >>
@@ -2331,11 +2432,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "dodecaphonic"
+      \accidentalStyle dodecaphonic
       \musicB
     }
   >>
@@ -2393,12 +2494,12 @@ musicB = {
   <<
     \context Staff = "up" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicA
     }
     \context Staff = "down" {
       \key fis \minor
-      \accidentalStyle "teaching"
+      \accidentalStyle teaching
       \musicB
     }
   >>
@@ -2453,11 +2554,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "no-reset"
+      \accidentalStyle no-reset
       \musicB
     }
   >>
@@ -2512,11 +2613,11 @@ musicB = {
 \new PianoStaff {
   <<
     \context Staff = "up" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicA
     }
     \context Staff = "down" {
-      \accidentalStyle "forget"
+      \accidentalStyle forget
       \musicB
     }
   >>
@@ -2559,7 +2660,7 @@ not need a natural sign:
 
 @lilypond[quote]
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2576,12 +2677,12 @@ the accidental style to @code{forget}:
 
 @lilypond[verbatim,quote]
 forget = #(define-music-function (parser location music) (ly:music?) #{
-  \accidentalStyle "forget"
+  \accidentalStyle forget
   #music
-  \accidentalStyle "modern"
+  \accidentalStyle modern
 #})
 {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \time 2/4
   \repeat volta 2 {
     c'2
@@ -2696,13 +2797,13 @@ The appearance of note heads may be altered:
 
 @lilypond[verbatim,quote,relative=2]
 c4 b
-\override NoteHead #'style = #'cross
+\override NoteHead.style = #'cross
 c4 b
-\revert NoteHead #'style
+\revert NoteHead.style
 a b
-\override NoteHead #'style = #'harmonic
+\override NoteHead.style = #'harmonic
 a b
-\revert NoteHead #'style
+\revert NoteHead.style
 c4 d e f
 @end lilypond
 
@@ -2735,11 +2836,10 @@ As synonyms for @code{\xNote}, @code{\xNotesOn} and @code{\xNotesOff},
 @code{\deadNote}, @code{\deadNotesOn} and @code{\deadNotesOff} can
 be used.  The term @notation{dead note} is commonly used by guitarists.
 
-There is also a shorthand for diamond shapes which can be used
-only inside chords:
+There is also a similar shorthand for diamond shapes:
 
 @lilypond[verbatim,quote,relative=2]
-<c f\harmonic>2 <d a'\harmonic>4 <c g'\harmonic>
+<c f\harmonic>2 <d a'\harmonic>4 <c g'\harmonic> f\harmonic
 @end lilypond
 
 @predefined
index fb7cdf663b406f78dfa5b3674eb5849b94208e08..ad555652fb5add6687d7b0a4236236c864eb2db9 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @node Repeats
 @section Repeats
@@ -121,7 +121,7 @@ A single repeat with one alternate ending:
 c1
 @end lilypond
 
-A single repeat with more than one alternate ending:
+Multiple repeats with one alternate ending:
 
 @lilypond[verbatim,quote,relative=2]
 \repeat volta 4 { c4 d e f | }
@@ -156,8 +156,8 @@ expected number of endings.}
 
 @cindex repeat with upbeat
 @cindex upbeat in a repeat
-@cindex anacrucis in a repeat
-@cindex repeat with anacrucis
+@cindex anacrusis in a repeat
+@cindex repeat with anacrusis
 @cindex repeat with pickup
 @cindex pickup in a repeat
 @funindex \partial
@@ -225,11 +225,11 @@ at the start of each alternative, except the first.
 \alternative {
   {
     f2 d |
-    \set Timing.measureLength = #(ly:make-moment 3 4)
+    \set Timing.measureLength = #(ly:make-moment 3/4)
     g4 g g  % optional bar check is allowed here
   }
   {
-    \set Timing.measureLength = #(ly:make-moment 4 4)
+    \set Timing.measureLength = #(ly:make-moment 4/4)
     a2 a |
   }
 }
@@ -298,6 +298,7 @@ Music Glossary:
 Notation Reference:
 @ref{Bar lines},
 @ref{Modifying context plug-ins},
+@ref{Modifying ties and slurs},
 @ref{Time administration}.
 
 Snippets:
@@ -317,14 +318,32 @@ Internals Reference:
 @cindex repeat and measure number
 @cindex timing information and repeats
 @cindex measure number and repeats
-@cindex repeat and slur
-@cindex slur and repeat
+@cindex repeats and slur
+@cindex slur and repeats
+@cindex glissandi and repeats
+@cindex repeats and glissandi
 
 Slurs that span from a @code{\repeat} block into an
-@code{\alternative} block will only work for the first alternate
-ending.  Also, slurs cannot wrap around from the end of one
+@code{\alternative} block will only work for the first alternative
+ending.  The visual appearance of a continuing slur in other
+alternative blocks may be simulated with @code{\repeatTie} if the
+slur extends into only one note in the alternative block, although
+this method does not work in @code{TabStaff}.  Other methods which
+may be tailored to indicate continuing slurs over several notes in
+alternative blocks, and which also work in @code{TabStaff} contexts,
+are shown in @ref{Modifying ties and slurs}.
+
+Also, slurs cannot wrap around from the end of one
 alternative back to the beginning of the repeat.
 
+Glissandi that span from a @code{\repeat} block into an
+@code{\alternative} block will only work for the first alternative
+ending.  The visual appearance of a continuing glissando in other
+alternative blocks may be indicated by coding a glissando starting
+on a hidden grace note.  For an example, see
+@qq{Extending glissandi across repeats} under Selected Snippets
+in @ref{Glissando}.
+
 If a repeat that begins with an incomplete measure has an
 @code{\alternative} block that contains modifications to the
 @code{measureLength} property, using @code{\unfoldRepeats} will
@@ -372,7 +391,7 @@ layout of repeats.  Its value is a Scheme list of repeat commands.
 
 @table @code
 @item start-repeat
-Print a @code{|:} bar line.
+Print a @code{.|:} bar line.
 
 @lilypond[verbatim,quote,relative=2]
 c1
@@ -385,7 +404,7 @@ As per standard engraving practice, repeat signs are not printed
 at the beginning of a piece.
 
 @item end-repeat
-Print a @code{:|} bar line:
+Print a @code{:|.} bar line:
 
 @lilypond[verbatim,quote,relative=2]
 c1
@@ -394,7 +413,7 @@ d4 e f g
 c1
 @end lilypond
 
-@item (volta @var{number}) ... (volta #f)
+@item (volta @var{number}) @dots{} (volta #f)
 Create a new volta with the specified number.  The volta bracket must
 be explicitly terminated, or it will not be printed.
 
@@ -641,7 +660,7 @@ use a double-percent symbol.
 
 @lilypond[verbatim,quote,relative=2]
 \repeat percent 4 { c8. <d f>16 }
-\repeat percent 2 { \times 2/3 { r8 c d } e4 }
+\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 }
 @end lilypond
 
 @snippets
index c2a06b42029b9649b5a2348e4cc5bb9809d5ace3..f6842824a83783ce7c6b880d74fb37411ab6d973 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Rhythms
 @section Rhythms
@@ -143,7 +143,7 @@ the staff; see @ref{Direction and placement}.
 @snippets
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
-{alternative-breve-note.ly}
+{alternative-breve-notes.ly}
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {changing-the-number-of-augmentation-dots-per-note.ly}
@@ -186,26 +186,38 @@ rests from 128th to maxima (8 x whole) may be printed.
 @cindex tuplets
 @cindex triplets
 
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
 
-Tuplets are made from a music expression by multiplying all the
-durations with a fraction:
+Tuplets are made from a music expression with the @code{\tuplet}
+command, multiplying the speed of the music expression by a
+fraction:
 
 @example
-\times @var{fraction} @{ @var{music} @}
+\tuplet @var{fraction} @{ @var{music} @}
 @end example
 
 @noindent
-The duration of @code{@var{music}} will be multiplied by the
-fraction.  The fraction's denominator will be printed over or
+The fraction's numerator will be printed over or
 under the notes, optionally with a bracket.  The most common
-tuplet is the triplet in which 3 notes have the duration of 2, so
-the notes are 2/3 of their written length.
+tuplets are triplets: 3@tie{}notes sound within the duration
+normally allowed for@tie{}2:
 
 @lilypond[quote,verbatim,relative=2]
-a2 \times 2/3 { b4 b b }
-c4 c \times 2/3 { b4 a g }
+a2 \tuplet 3/2 { b4 b b }
+c4 c \tuplet 3/2 { b4 a g }
+@end lilypond
+
+@cindex tuplet grouping
+@noindent
+When entering long passages of tuplets, having to write a separate
+@code{\tuplet} command for each group is inconvenient.  It is
+possible to specify the duration of one tuplet group directly
+before the music in order to have the tuplets grouped
+automatically:
+
+@lilypond[quote,verbatim,relative=2]
+g2 r8 \tuplet 3/2 8 { cis16 d e e f g g f e }
 @end lilypond
 
 @cindex tuplet bracket placement
@@ -224,7 +236,7 @@ Tuplets may be nested:
 
 @lilypond[quote,verbatim,relative=2]
 \autoBeamOff
-c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4
+c4 \tuplet 5/4 { f8 e f \tuplet 3/2 { e[ f g] } } f4
 @end lilypond
 
 Modifying nested tuplets which begin at the same musical moment
@@ -296,7 +308,7 @@ Internals Reference:
 @knownissues
 Grace notes may be placed within tuplet brackets, @emph{except}
 when a staff begins with a grace note followed by a tuplet.  In this
-particular case, the grace note must be placed before the @code{\times}
+particular case, the grace note must be placed before the @code{\tuplet}
 command to avoid errors.
 
 @cindex tempo marks within tuplet brackets
@@ -380,6 +392,15 @@ Notation Reference:
 Snippets:
 @rlsr{Rhythms}.
 
+@knownissues
+The calculation of the position within a measure must take into
+account all the scaling factors applied to the notes within that
+measure and any fractional carry-out from earlier measures.  This
+calculation is carried out using rational numbers.  If an intermediate
+numerator or denominator in that calculation exceeds 2^30 the
+execution and typesetting will stop at that point without indicating
+an error.
+
 
 @node Ties
 @unnumberedsubsubsec Ties
@@ -396,10 +417,12 @@ indicate articulation, or @emph{phrasing slurs}, which indicate
 musical phrasing.  A tie is just a way of extending a note
 duration, similar to the augmentation dot.}
 
-A tie is entered using the tilde symbol (@code{~}).
+A tie is entered by appending a tilde symbol (@code{~}) to the first
+of each pair of notes being tied.  This indicates that the note
+should be tied to the following note, which must be at the same pitch.
 
 @lilypond[quote,verbatim,relative=2]
-a2 ~ a
+a2~ a4~ a16 r r8
 @end lilypond
 
 Ties are used either when the note crosses a bar line, or when
@@ -408,8 +431,8 @@ used when note values cross larger subdivisions of the measure:
 
 @lilypond[verbatim,quote]
 \relative c' {
-  r8 c~ c2 r4 |
-  r8^"not" c2 ~ c8 r4
+  r8 c~ c2 r4 |
+  r8^"not" c2~ c8 r4
 }
 @end lilypond
 
@@ -423,11 +446,11 @@ ties them across bar lines.
 
 When a tie is applied to a chord, all note heads whose pitches
 match are connected.  When no note heads match, no ties will be
-created.  Chords may be partially tied by placing the tie inside
+created.  Chords may be partially tied by placing the ties inside
 the chord.
 
 @lilypond[quote,verbatim,relative=1]
-<c e g> ~ <c e g>
+<c e g>~ <c e g c>
 <c~ e g~ b> <c e g b>
 @end lilypond
 
@@ -443,7 +466,7 @@ When a second alternative of a repeat starts with a tied note, you
 have to specify the repeated tie as follows:
 
 @lilypond[quote,relative=2,verbatim]
-\repeat volta 2 { c g <c e>2 ~ }
+\repeat volta 2 { c g <c e>2~ }
 \alternative {
   % First alternative: following note is tied normally
   { <c e>2. r4 }
@@ -475,7 +498,7 @@ be entered as follows:
 @funindex \tieNeutral
 @funindex tieNeutral
 
-Ties may be manually placed above or below the staff; see
+Ties may be made to curve up or down manually; see
 @ref{Direction and placement}.
 
 @cindex ties, appearance
@@ -496,26 +519,26 @@ dashed.
 
 @lilypond[quote, verbatim, relative=1]
 \tieDotted
-c2 ~ c
+c2~ c
 \tieDashed
-c2 ~ c
+c2~ c
 \tieHalfDashed
-c2 ~ c
+c2~ c
 \tieHalfSolid
-c2 ~ c
+c2~ c
 \tieSolid
-c2 ~ c
+c2~ c
 @end lilypond
 
 Custom dash patterns can be specified:
 
 @lilypond[quote, verbatim, relative=1]
 \tieDashPattern #0.3 #0.75
-c2 ~ c
+c2~ c
 \tieDashPattern #0.7 #1.5
-c2 ~ c
+c2~ c
 \tieSolid
-c2 ~ c
+c2~ c
 @end lilypond
 
 Dash pattern definitions for ties have the same structure as dash
@@ -526,11 +549,11 @@ Override @var{whiteout} and @var{layer} layout properties for ties that
 collide with other objects in a staff.
 
 @lilypond[verbatim,quote,ragged-right,relative=2]
-\override Tie #'layer = #-2
-\override Staff.TimeSignature #'layer = #-1
-\override Staff.KeySignature #'layer = #-1
-\override Staff.TimeSignature #'whiteout = ##t
-\override Staff.KeySignature #'whiteout = ##t
+\override Tie.layer = #-2
+\override Staff.TimeSignature.layer = #-1
+\override Staff.KeySignature.layer = #-1
+\override Staff.TimeSignature.whiteout = ##t
+\override Staff.KeySignature.whiteout = ##t
 b2 b~
 \time 3/4
 \key a \major
@@ -623,7 +646,7 @@ commands:
 \new Staff {
   % These two lines are just to prettify this example
   \time 16/1
-  \override Staff.TimeSignature #'stencil = ##f
+  \omit Staff.TimeSignature
   % Print a maxima rest, equal to four breves
   r\maxima
   % Print a longa rest, equal to two breves
@@ -883,10 +906,10 @@ following example:}
 
 @lilypond[quote,verbatim,relative=2]
 % This fails, as the wrong object name is specified
-\override TextScript #'padding = #5
+\override TextScript.padding = #5
 R1^"wrong"
 % This is the correct object name to be specified
-\override MultiMeasureRestText #'padding = #5
+\override MultiMeasureRestText.padding = #5
 R1^"right"
 @end lilypond
 
@@ -1118,37 +1141,6 @@ for the time signature that go beyond ending at every beat, as
 described in @ref{Setting automatic beam behavior}.
 @end enumerate
 
-The context containing @code{\overrideTimeSignatureSettings} must
-be instantiated before the @code{\overrideTimeSignatureSettings}
-call is executed.  That means it must either be explicitly
-instantiated or there must be music in the context before the
-@code{\overrideTimeSignatureSettings} call:
-
-@lilypond[quote,verbatim]
-\score {
-  \relative c' {
-    % This call will fail because the context isn't yet instantiated
-    \overrideTimeSignatureSettings
-      4/4        % timeSignatureFraction
-      1/4        % baseMomentFraction
-      #'(3 1)    % beatStructure
-      #'()       % beamExceptions
-    \time 4/4
-    c8^\markup {"Beamed (2 2)"}
-    \repeat unfold 7 { c8 } |
-    % This call will succeed
-    \overrideTimeSignatureSettings
-      4/4        % timeSignatureFraction
-      1/4        % baseMomentFraction
-      #'(3 1)    % beatStructure
-      #'()       % beamExceptions
-    \time 4/4
-    c8^\markup {"Beamed (3 1)"}
-    \repeat unfold 7 { c8 } |
-  }
-}
-@end lilypond
-
 
 @cindex time signature properties, restoring default values
 @cindex restoring default properties for time signatures
@@ -1273,7 +1265,7 @@ e4. d8 c2
 Metronome marks may also be printed as a range of two numbers:
 
 @lilypond[verbatim,quote,relative=1]
-\tempo 4 = 40 ~ 46
+\tempo 4 = 40 - 46
 c4. e8 a4 g
 b,2 d4 r
 @end lilypond
@@ -1310,6 +1302,29 @@ written by including an empty string in the input:
 d4 g e c
 @end lilypond
 
+@funindex \markLengthOn
+@funindex markLengthOn
+@funindex \markLengthOff
+@funindex markLengthOff
+
+In a part for an instrument with long periods of rests,
+tempo indications sometimes follow each other closely.
+The command @code{\markLengthOn} provides extra horizontal space
+to prevent tempo indications from overlapping, and @code{\markLengthOff}
+restores the default behavior of ignoring tempo marks
+for horizontal spacing.
+
+@lilypond[verbatim,quote,relative=0]
+\compressFullBarRests
+\markLengthOn
+\tempo "Molto vivace"
+R1*12
+\tempo "Meno mosso"
+R1*16
+\markLengthOff
+\tempo "Tranquillo"
+R1*20
+@end lilypond
 
 @snippets
 
@@ -1383,25 +1398,26 @@ The @var{duration} can be any value less than a full measure:
 r4 e8 | a4 c8 b c4 |
 @end lilypond
 
-The @code{\partial @var{duration}} can also be written as;
+@code{\partial @var{duration}} can also be written as:
 
 @example
 \set Timing.measurePosition -@var{duration}
 @end example
 
-So @code{\partial 8} becomes:
+So the first example above could be written:
 
 @lilypond[quote,verbatim,relative=1]
 \time 3/4
-\set Timing.measurePosition = #(ly:make-moment -1 8)
+\set Timing.measurePosition = #(ly:make-moment -1/8)
 e8 | a4 c8 b c4 |
 @end lilypond
 
-The property @code{measurePosition} contains a rational number
-indicating how much of the measure has passed at this point.  Note
-that this is set to a negative number by the @code{\partial} command:
-i.e., @code{\partial 4} is internally translated to @w{@code{-4}},
-meaning @qq{there is a quarter note left in the measure.}
+The property @code{measurePosition} contains a rational number, which
+is usually positive and indicates how much of the measure has passed
+at this point.  The @code{\partial @var{duration}} command sets it to
+a negative number, when it has a different meaning: it then says that
+the current (first) bar will be @emph{preceded} by a bar 0 (the partial
+bar) with a duration given by @var{duration}.
 
 @seealso
 Music Glossary:
@@ -1425,7 +1441,7 @@ occur, so use @code{\set Timing.measurePosition} instead.
 \time 6/8
 \partial 8
 e8 | a4 c8 b[ c b] |
-\set Timing.measurePosition = #(ly:make-moment -1 4)
+\set Timing.measurePosition = #(ly:make-moment -1/4)
 r8 e,8 | a4 c8 b[ c b] |
 @end lilypond
 
@@ -1476,7 +1492,7 @@ Bar numbering is resumed at the end of the cadenza.
 
 @lilypond[verbatim,relative=2,quote]
 % Show all bar numbers
-\override Score.BarNumber #'break-visibility = #all-visible
+\override Score.BarNumber.break-visibility = #all-visible
 c4 d e d
 \cadenzaOn
 c4 c d8[ d d] f4 g4.
@@ -1485,15 +1501,20 @@ c4 c d8[ d d] f4 g4.
 d4 e d c
 @end lilypond
 
-A new bar is never started within a cadenza, even if one or more
-@code{\bar} commands are inserted within it.  Therefore, reminder
-accidentals will need to be added manually.  See @ref{Accidentals}.
+Inserting a @code{\bar} command within a cadenza does not start a new
+measure, even if a bar line is printed.  So any accidentals -- which
+are usually assumed to remain in force until the end of the measure --
+will still be valid after the bar line printed by @code{\bar}.  If
+subsequent accidentals should be printed, forced accidentals or
+reminder accidentals need to be inserted manually, see
+@ref{Accidentals}.
 
 @lilypond[verbatim,relative=2,quote]
 c4 d e d
 \cadenzaOn
 cis4 d cis d
 \bar "|"
+% First cis is printed without alteration even if it's after a \bar
 cis4 d cis! d
 \cadenzaOff
 \bar "|"
@@ -1554,20 +1575,6 @@ stretches of unmetered music to permit breaking:
 \bar ""
 @end example
 
-Explicitly create a @code{Voice} context when starting a piece with
-@code{\cadenzaOn}, else unexpected errors may occur.
-
-@example
-\new Voice @{
-  \relative c' @{
-    \cadenzaOn
-    c16[^"Solo Free Time" d e f] g2.
-    \bar "||"
-    \cadenzaOff
-  @}
-@}
-@end example
-
 
 @node Polymetric notation
 @unnumberedsubsubsec Polymetric notation
@@ -1585,8 +1592,8 @@ Explicitly create a @code{Voice} context when starting a piece with
 @funindex timeSignatureFraction
 @funindex \scaleDurations
 @funindex scaleDurations
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
 
 Polymetric notation is supported explicitly or by manually modifying the
 visible time signature symbol and/or scaling note durations.
@@ -1627,7 +1634,7 @@ affect the autobeaming rules.
     \scaleDurations 3/5 {
       \repeat unfold 2 { c8[ c c] }
       \repeat unfold 2 { c8[ c] } |
-      c4. c \times 2/3 { c8[ c c] } c4
+      c4. c \tuplet 3/2 { c8[ c c] } c4
     }
   }
 >>
@@ -1940,7 +1947,7 @@ c16 c8
 @cindex beams, with melismata
 
 @warning{If beams are used to indicate melismata in songs, then
-automatic beaming should be switched off with @code{\autoBeamOff}
+automatic beaming should be switched off with @code{@bs{}autoBeamOff}
 and the beams indicated manually.  Using @code{@bs{}partcombine} with
 @code{@bs{}autoBeamOff} can produce unintended results.  See the
 snippets for more information.}
@@ -2023,13 +2030,18 @@ below, or alternatively the default values themselves may be changed
 as explained in @ref{Time signature}.
 
 If a @code{beamExceptions} rule is defined for the time signature in
-force, that rule is used to determine the beam placement.  If no
-@code{beamExceptions} rule is defined for the time signature in force,
-the beam placement is determined by the settings of @code{baseMoment}
-and @code{beatStructure}.
+force, that rule alone is used to determine the beam placement; the
+values of @code{baseMoment} and @code{beatStructure} are ignored.
+
+If no @code{beamExceptions} rule is defined for the time signature
+in force, the beam placement is determined by the values of
+@code{baseMoment} and @code{beatStructure}.
+
+
+@subsubsubheading Beaming based on @code{baseMoment} and @code{beatStructure}
 
 By default, @code{beamExceptions} rules are defined for most common
-time signatures, so the @code{beamException} rules must be disabled
+time signatures, so the @code{beamExceptions} rules must be disabled
 if automatic beaming is to be based on @code{baseMoment} and
 @code{beatStructure}.  The @code{beamExceptions} rules are disabled
 by
@@ -2038,41 +2050,35 @@ by
 \set Timing.beamExceptions = #'()
 @end example
 
-
-@subsubsubheading Beaming based on @code{baseMoment} and @code{beatStructure}
-
-In most instances, automatic beams will end at the end of a beat.
-The ending points for beats are determined by the context properties
-@code{baseMoment} and @code{beatStructure}.  @code{beatStructure}
-is a scheme list that defines the length of each beat in the measure
-in units of @code{baseMoment}.  By default, @code{baseMoment} is
-one over the denominator of the time signature.  By default,
-each unit of length @code{baseMoment} is a single beat.
+When @code{beamExceptions} is set to @code{#'()}, either due to an
+explicit setting or because no @code{beamExceptions} rules are defined
+internally for the time signature in force, the ending points for
+beams are on beats as specified by the context properties
+@code{baseMoment} and @code{beatStructure}.  @code{beatStructure} is
+a scheme list that defines the length of each beat in the measure in
+units of @code{baseMoment}.  By default, @code{baseMoment} is one
+over the denominator of the time signature.  By default, each unit of
+length @code{baseMoment} is a single beat.
 
 @lilypond[quote,relative=2,verbatim]
 \time 5/16
 c16^"default" c c c c |
+% beamExceptions are unlikely to be defined for 5/16 time,
+% but let's disable them anyway to be sure
+\set Timing.beamExceptions = #'()
 \set Timing.beatStructure = #'(2 3)
 c16^"(2+3)" c c c c |
 \set Timing.beatStructure = #'(3 2)
 c16^"(3+2)" c c c c |
 @end lilypond
 
-If a common time signature is being used, @code{beamExceptions}
-@emph{must} be disabled to enable @code{beatStructure} to work.
-The @code{\set Timing.beamExceptions = #'()} command can always
-be included if beaming is being determined by @code{beatStructure}.
-
 @lilypond[quote,relative=2,verbatim]
 \time 4/4
 a8^"default" a a a a a a a
-
-\set Timing.baseMoment = #(ly:make-moment 1 4)
-\set Timing.beatStructure = #'(1 1 1 1)
-a8^"no change" a a a a a a a
-
+% Disable beamExceptions because they are definitely
+% defined for 4/4 time
 \set Timing.beamExceptions = #'()
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
 \set Timing.beatStructure = #'(1 1 1 1)
 a8^"changed" a a a a a a a
 @end lilypond
@@ -2084,6 +2090,8 @@ enclosing context will apply.
 @lilypond[quote, verbatim,relative=1]
 \new Staff {
   \time 7/8
+  % No need to disable beamExceptions
+  % as they are not defined for 7/8 time
   \set Staff.beatStructure = #'(2 3 2)
   <<
     \new Voice = one {
@@ -2127,7 +2135,9 @@ compatible with the new value of @code{baseMoment}.
 
 @lilypond[quote,verbatim,relative=2]
 \time 5/8
-\set Timing.baseMoment = #(ly:make-moment 1 16)
+% No need to disable beamExceptions
+% as they are not defined for 5/8 time
+\set Timing.baseMoment = #(ly:make-moment 1/16)
 \set Timing.beatStructure = #'(7 3)
 \repeat unfold 10 { a16 }
 @end lilypond
@@ -2218,7 +2228,7 @@ if @code{beamExceptions} is not reset.
 
 @lilypond[quote,verbatim,relative=2]
 \time 4/4
-\set Timing.baseMoment = #(ly:make-moment 1 8)
+\set Timing.baseMoment = #(ly:make-moment 1/8)
 \set Timing.beatStructure = #'(3 3 2)
 % This won't beam (3 3 2) because of beamExceptions
 \repeat unfold 8 {c8} |
@@ -2235,7 +2245,7 @@ reset @code{beamExceptions}.
 \time 3/4
 % by default we beam in (6) due to beamExceptions
 \repeat unfold 6 {a8} |
-% This will beam (1 1 1) due to beatLength
+% This will beam (1 1 1) due to default baseMoment and beatStructure
 \set Timing.beamExceptions = #'()
 \repeat unfold 6 {a8}
 @end lilypond
@@ -2265,7 +2275,7 @@ the appearance of beams:
 
 @itemize
 @item
-If a manual beam is specified with @code{[..]} set the beam
+If a manual beam is specified with @code{[@dots{}]} set the beam
 as specified, otherwise
 
 @item
@@ -2275,7 +2285,7 @@ beams may end, otherwise
 
 @item
 if a beam-ending rule is defined in @code{beamExceptions}
-for a longer beam-type, use it to determined the valid places
+for a longer beam-type, use it to determine the valid places
 where beams may end, otherwise
 
 @item
@@ -2354,7 +2364,7 @@ in only one staff.
 <<
   \new Staff {
     \time 3/4
-    \set Timing.baseMoment = #(ly:make-moment 1 8)
+    \set Timing.baseMoment = #(ly:make-moment 1/8)
     \set Timing.beatStructure = #'(1 5)
     \repeat unfold 6 { a8 }
   }
@@ -2433,7 +2443,7 @@ Unbeamed grace notes are not put into normal note beams.
 
 @lilypond[quote,verbatim,relative=2]
 c4 d8[
-\grace { e32[ d c d] }
+\grace { e32 d c d }
 e8] e[ e
 \grace { f16 }
 e8 e]
@@ -2524,14 +2534,14 @@ lengthening.  The first four 32nd notes gradually speed up, while
 the last four 32nd notes are at a constant tempo.
 
 @lilypond[relative=1,verbatim,quote]
-\override Beam #'grow-direction = #LEFT
-\featherDurations #(ly:make-moment 2 1)
+\override Beam.grow-direction = #LEFT
+\featherDurations #(ly:make-moment 2/1)
 { c16[ c c c c c c c] }
-\override Beam #'grow-direction = #RIGHT
-\featherDurations #(ly:make-moment 2 3)
+\override Beam.grow-direction = #RIGHT
+\featherDurations #(ly:make-moment 2/3)
 { c32[ d e f] }
 % revert to non-feathered beams
-\override Beam #'grow-direction = #'()
+\override Beam.grow-direction = #'()
 { g32[ a b c] }
 @end lilypond
 
@@ -2646,7 +2656,7 @@ f1 \bar "|"
 f1 \bar "."
 g1 \bar "||"
 a1 \bar ".|"
-b1 \bar ".|."
+b1 \bar ".."
 c1 \bar "|.|"
 d1 \bar "|."
 e1
@@ -2656,31 +2666,43 @@ e1
 together with dotted and dashed bar lines:
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar ":"
-g1 \bar "dashed"
+f1 \bar ";"
+g1 \bar "!"
 a1
 @end lilypond
 
 @noindent
-and five types of repeat bar line:
+and nine types of repeat bar lines:
 
 @lilypond[quote,relative=1,verbatim]
-f1 \bar "|:"
-g1 \bar ":|:"
+f1 \bar ".|:"
+g1 \bar ":..:"
 a1 \bar ":|.|:"
 b1 \bar ":|.:"
-c1 \bar ":|"
-e1
+c1 \bar ":.|.:"
+d1 \bar "[|:"
+e1 \bar ":|][|:"
+f1 \bar ":|]"
+g1 \bar ":|."
+a1
 @end lilypond
 
 Additionally, a bar line can be printed as a simple tick:
 @lilypond[quote,relative=1,verbatim]
-f1 \bar "'"
+f1 \bar "'" g1
 @end lilypond
 However, as such ticks are typically used in Gregorian chant, it is
 preferable to use @code{\divisioMinima} there instead, described in
 the section @ref{Divisiones} in Gregorian chant.
 
+Lilypond supports kievan notation and provides a special kievan
+bar line:
+@lilypond[quote,relative=1,verbatim]
+f1 \bar "k"
+@end lilypond
+Further details of this notation are explained in
+@ref{Typesetting Kievan square notation}.
+
 @cindex segno
 
 For in-line segno signs, there are three types of bar lines which
@@ -2692,13 +2714,13 @@ c4 c c c
 c4 c c c \break
 \bar "S"
 c4 c c c
-\bar "|S"
+\bar "S-|"
 c4 c c c \break
-\bar "|S"
+\bar "S-|"
 c4 c c c
-\bar "S|"
+\bar "S-S"
 c4 c c c \break
-\bar "S|"
+\bar "S-S"
 c1
 @end lilypond
 
@@ -2710,16 +2732,16 @@ a repeated section.  Such repeated sections are better entered
 using the various repeat commands (see @ref{Repeats}), which
 automatically print the appropriate bar lines.
 
-In addition, you can specify @code{"||:"}, which is equivalent to
-@code{"|:"} except at line breaks, where it gives a double bar
+In addition, you can specify @code{".|:-||"}, which is equivalent to
+@code{".|:"} except at line breaks, where it gives a double bar
 line at the end of the line and a start repeat at the beginning of
 the next line.
 
 @lilypond[quote,relative=2,verbatim]
 c4 c c c
-\bar "||:"
+\bar ".|:-||"
 c4 c c c \break
-\bar "||:"
+\bar ".|:-||"
 c4 c c c
 @end lilypond
 
@@ -2728,29 +2750,29 @@ variations:
 
 @lilypond[quote,relative=2,verbatim]
 c4 c c c
-\bar ":|S"
+\bar ":|.S"
 c4 c c c \break
-\bar ":|S"
+\bar ":|.S"
 c4 c c c
-\bar ":|S."
+\bar ":|.S-S"
 c4 c c c \break
-\bar ":|S."
+\bar ":|.S-S"
 c4 c c c
-\bar "S|:"
+\bar "S.|:-S"
 c4 c c c \break
-\bar "S|:"
+\bar "S.|:-S"
 c4 c c c
-\bar ".S|:"
+\bar "S.|:"
 c4 c c c \break
-\bar ".S|:"
+\bar "S.|:"
 c4 c c c
-\bar ":|S|:"
+\bar ":|.S.|:"
 c4 c c c \break
-\bar ":|S|:"
+\bar ":|.S.|:"
 c4 c c c
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
 c4 c c c \break
-\bar ":|S.|:"
+\bar ":|.S.|:-S"
 c1
 @end lilypond
 
@@ -2758,6 +2780,100 @@ Additionally there is an @code{\inStaffSegno} command which
 creates a segno bar, placed in cooperation
 with the @code{\repeat volta} command.
 
+@funindex \defineBarLine
+@funindex defineBarLine
+@cindex bar lines, defining
+@cindex defining bar lines
+
+New bar line types can be defined with @code{\defineBarLine}:
+
+@example
+\defineBarLine @var{bartype} #'(@var{end} @var{begin} @var{span})
+@end example
+
+The @code{\defineBarline} variables can include the
+@q{empty} string @code{""}, which is equivalent to an invisible
+bar line being printed.  Or they can be set to @code{#f} which
+prints no bar line at all.
+
+After the definiton, the new bar line can be used by
+@code{\bar} @var{bartype}.
+
+There are currently ten bar line elements available:
+
+@lilypond[quote,verbatim]
+\defineBarLine ":" #'("" ":" "")
+\defineBarLine "=" #'("=" "" "")
+\defineBarLine "[" #'("" "[" "")
+\defineBarLine "]" #'("]" "" "")
+
+\new Staff {
+  s1 \bar "|"
+  s1 \bar "."
+  s1 \bar "!"
+  s1 \bar ";"
+  s1 \bar ":"
+  s1 \bar "k"
+  s1 \bar "S"
+  s1 \bar "="
+  s1 \bar "["
+  s1 \bar "]"
+  s1 \bar ""
+}
+@end lilypond
+
+The @code{"="} bar line provides the double span bar line, used
+in combination with the segno sign.  Do not use it as a standalone
+double thin bar line; here, @code{\bar} @var{"||"} is
+preferred.
+
+The @code{"-"} sign starts annotations to bar lines which
+are useful to distinguish those with identical appearance
+but different behavior at line breaks and/or different span bars.
+The part following the @code{"-"} sign is not used for building up
+the bar line.
+
+@lilypond[quote,relative=2,verbatim]
+\defineBarLine "||-dashedSpan" #'("||" "" "!!")
+
+\new StaffGroup <<
+  \new Staff {
+    c1 \bar "||"
+    c1 \bar "||-dashedSpan"
+    c1
+  }
+  \new Staff {
+    c1
+    c1
+    c1
+  }
+>>
+@end lilypond
+
+Furthermore, the space character @code{" "} serves as a placeholder
+for defining span bars correctly aligned to the main bar lines:
+
+@lilypond[quote,relative=2,verbatim]
+\defineBarLine ":|.-wrong" #'(":|." "" "|.")
+\defineBarLine ":|.-right" #'(":|." "" " |.")
+
+\new StaffGroup <<
+  \new Staff {
+    c1 \bar ":|.-wrong"
+    c1 \bar ":|.-right"
+    c1
+  }
+  \new Staff {
+    c1
+    c1
+    c1
+  }
+>>
+@end lilypond
+
+If additional elements are needed, LilyPond provides a simple
+way to define them.  For more informations on modifying or adding
+bar lines, see file @file{scm/bar-line.scm}.
 
 In scores with many staves, a @code{\bar} command in one staff is
 automatically applied to all staves.  The resulting bar lines are
@@ -2782,8 +2898,6 @@ connected between different staves of a @code{StaffGroup},
 @cindex default bar lines, changing
 @cindex bar lines, default, changing
 
-@snippets
-
 @funindex whichBar
 @funindex defaultBarType
 @funindex \bar
@@ -2804,6 +2918,9 @@ Notation Reference:
 @ref{Repeats},
 @ref{Grouping staves}.
 
+Installed Files:
+@file{scm/bar-line.scm}.
+
 Snippets:
 @rlsr{Rhythms}.
 
@@ -2852,7 +2969,7 @@ line visible}, @code{beginning of line visible}.  In the following
 example bar numbers are printed at all possible places:
 
 @lilypond[verbatim,quote,relative=1]
-\override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+\override Score.BarNumber.break-visibility = ##(#t #t #t)
 \set Score.currentBarNumber = #11
 % Permit first bar number to be printed
 \bar ""
@@ -2948,18 +3065,18 @@ warning to focus on the source of the timing error.
 
 
 @funindex |
-@funindex pipeSymbol
+@funindex "|"
 
 It is also possible to redefine the action taken when a bar check
 or pipe symbol, @code{|}, is encountered in the input, so that
 it does something other than a bar check.  This is done by
-assigning a music expression to @code{pipeSymbol}.
+assigning a music expression to @code{"|"}.
 In the following example @code{|} is set to insert a double bar
 line wherever it appears in the input, rather than checking
 for end of bar.
 
 @lilypond[quote,verbatim]
-pipeSymbol = \bar "||"
+"|" = \bar "||"
 {
   c'2 c' |
   c'2 c'
@@ -3178,7 +3295,7 @@ up no additional logical time in a measure.
 
 @lilypond[quote,relative=2,verbatim]
 c4 \grace b16 a4(
-\grace { b16[ c16] } a2)
+\grace { b16 c16 } a2)
 @end lilypond
 
 There are three other types of grace notes possible; the
@@ -3193,7 +3310,7 @@ between notes that are slurred themselves, using the
 @lilypond[quote,relative=2,verbatim]
 \acciaccatura d8 c4
 \appoggiatura e8 d4
-\acciaccatura { g16[ f] } e2
+\acciaccatura { g16 f } e2
 \slashedGrace a,8 g4
 \slashedGrace b16 a4(
 \slashedGrace b8 a2)
@@ -3205,8 +3322,8 @@ eighth grace note
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e2 \grace { c16[ d e f] } e2 }
-  \new Staff { c2 \grace { g8[ b] } c2 }
+  \new Staff { e2 \grace { c16 d e f } e2 }
+  \new Staff { c2 \grace { g8 b } c2 }
 >>
 @end lilypond
 
@@ -3253,7 +3370,7 @@ note after a space lasting 7/8 of the main note.
 \new Voice {
   <<
     { d1^\trill_( }
-    { s2 s4. \grace { c16[ d] } }
+    { s2 s4. \grace { c16 d } }
   >>
   c1)
 }
@@ -3319,6 +3436,7 @@ Snippets:
 Internals Reference:
 @rinternals{GraceMusic},
 @rinternals{Grace_beam_engraver},
+@rinternals{Grace_auto_beam_engraver},
 @rinternals{Grace_engraver},
 @rinternals{Grace_spacing_engraver}.
 
@@ -3341,8 +3459,8 @@ staves without, for example,
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e4 \bar "|:" \grace c16 d2. }
-  \new Staff { c4 \bar "|:" d2. }
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" d2. }
 >>
 @end lilypond
 
@@ -3352,8 +3470,8 @@ durations in the other staves.  For the above example
 
 @lilypond[quote,relative=2,verbatim]
 <<
-  \new Staff { e4 \bar "|:" \grace c16 d2. }
-  \new Staff { c4 \bar "|:" \grace s16 d2. }
+  \new Staff { e4 \bar ".|:" \grace c16 d2. }
+  \new Staff { c4 \bar ".|:" \grace s16 d2. }
 >>
 @end lilypond
 
@@ -3395,19 +3513,19 @@ error will be generated.  Either make the grace notes shorter in
 duration, for example:
 
 @example
-\acciaccatura @{ c'8[ d' e' f' g'] @}
+c'8 \acciaccatura @{ c'8[ d' e' f' g'] @}
 @end example
 
 becomes:
 
 @example
-\acciaccatura @{ c'16[ d' e' f' g'] @}
+c'8 \acciaccatura @{ c'16[ d' e' f' g'] @}
 @end example
 
 Or explicitly change the musical duration:
 
 @example
-\acciaccatura @{ \scaleDurations 1/2 @{ c'8[ d' e' f' g'] @} @}
+c'8 \acciaccatura @{ \scaleDurations 1/2 @{ c'8[ d' e' f' g'] @} @}
 @end example
 
 See @ref{Scaling durations}.
@@ -3517,11 +3635,11 @@ The next bar line then falls at 9/8 rather than 5/4.
 
 @lilypond[quote,verbatim]
 \new Voice \relative c' {
-  \set Timing.measureLength = #(ly:make-moment 5 4)
+  \set Timing.measureLength = #(ly:make-moment 5/4)
   c1 c4 |
   c1 c4 |
   c4 c
-  \set Timing.measurePosition = #(ly:make-moment 5 8)
+  \set Timing.measurePosition = #(ly:make-moment 5/8)
   b4 b b8 |
   c4 c1 |
 }
index 30e682b74ac5f69e87b5ab14a8b2f0a7bd582a4e..4725ecf0dee3c913de583cde1eab149c96dfb2ea 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.28"
 
 
 @node Simultaneous notes
@@ -60,7 +60,7 @@ Chords may also be followed by articulations, again just like simple
 notes.
 
 @lilypond[verbatim,quote,relative=2]
-<a c e>1\fermata <a c e>2-> <f a c e>4\prall <a c>8.^| <g c e>16-.
+<a c e>1\fermata <a c e>2-> <f a c e>4\prall <a c>8.^! <g c e>16-.
 @end lilypond
 
 The notes within the chord themselves can also be followed by articulation
@@ -91,7 +91,7 @@ be combined with them (for more complex possibilities of combining such
 elements, see @ref{Simultaneous expressions}):
 
 @lilypond[verbatim,quote,relative=2]
-\grace { g8[( a b] }
+\grace { g8( a b }
 <> ) \p \< -. -\markup \italic "sempre staccato"
 \repeat unfold 4 { c4 e }  c1\f
 @end lilypond
@@ -167,7 +167,7 @@ durations, articulations, markups, slurs, beams, etc. as only the
 pitches of the previous chord are duplicated.
 
 @lilypond[verbatim,quote,relative=2]
-<a c e>1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall
+<a c e>1\p^"text" q2\<( q8)[-! q8.]\! q16-1-2-3 q8\prall
 @end lilypond
 
 The chord repetition symbol always remembers the last instance of
@@ -300,7 +300,7 @@ warning: ignoring too many clashing note columns
 will appear during compilation.  This message can be suppressed by:
 
 @example
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
 @end example
 
 However, this not only suppresses the warning but will prevent any
@@ -414,8 +414,8 @@ A temporary polyphonic passage can be created with the following
 construct:
 
 @example
-<< @{ \voiceOne ... @}
-  \new Voice @{ \voiceTwo ... @}
+<< @{ \voiceOne @dots{} @}
+  \new Voice @{ \voiceTwo @dots{} @}
 >> \oneVoice
 @end example
 
@@ -457,7 +457,7 @@ required to define the settings of each voice.
 
 @subsubsubheading The double backslash construct
 
-The @code{<< @{...@} \\ @{...@} >>} construct, where the two (or
+The @code{<< @{@dots{}@} \\ @{@dots{}@} >>} construct, where the two (or
 more) expressions are separated by double backslashes, behaves
 differently to the similar construct without the double backslashes:
 @emph{all} the expressions within this construct are assigned
@@ -681,9 +681,8 @@ in bar 2, where the automatic merging fails.
 >>
 @end lilypond
 
-Notes with different note heads may be merged, with the
-exception of half-note heads and quarter-note heads, as shown
-below.  Here the note heads on beat 1 of bar 1 are now merged:
+Notes with different note heads may be merged as shown
+below.  In this example the note heads on beat 1 of bar 1 are now merged:
 
 @lilypond[quote,verbatim,relative=2]
 <<
@@ -702,6 +701,9 @@ below.  Here the note heads on beat 1 of bar 1 are now merged:
 >>
 @end lilypond
 
+Quarter and half notes are not merged in this way, since it would be difficult
+to tell them apart.
+
 Note heads with different dots as shown in beat 3 of bar 1 may be
 also be merged:
 
@@ -844,13 +846,13 @@ Internals Reference:
 @cindex collisions, ignoring
 
 @knownissues
-Using @code{\override NoteColumn #'ignore-collision = ##t} will cause
+Using @code{\override NoteColumn.ignore-collision = ##t} will cause
 differently headed notes in different voices to merge incorrectly.
 
 @lilypond[quote,relative=1,verbatim]
 \mergeDifferentlyHeadedOn
 << { c16 a' b a } \\ { c,2 } >>
-\override NoteColumn #'ignore-collision = ##t
+\override NoteColumn.ignore-collision = ##t
 << { c16 a' b a } \\ { c,2 } >>
 @end lilypond
 
@@ -963,7 +965,7 @@ the @code{\partcombine} function considers each note separately. In this
 case the @code{\partcombine} function can be overriden with the
 following commands:
 
-Commands ending in @code{...Once} apply only to the next note in the
+Commands ending in @code{@dots{}Once} apply only to the next note in the
 music expression.
 
 @itemize
@@ -1020,6 +1022,17 @@ instrumentTwo = \relative c' {
 @end lilypond
 
 
+@subsubsubheading Using \partcombine with lyrics
+
+@cindex \partcombine and lyrics
+
+The @code{\partcombine} command is not designed to work with
+lyrics; if one of the voices is explicitly named in order to
+attach lyrics to it, the partcombiner will stop working.  However,
+this effect can be achieved using a @code{NullVoice} context.  See
+@ref{Polyphony with shared lyrics}.
+
+
 @snippets
 
 @lilypondfile[verbatim,quote,texidoc,doctitle]
@@ -1044,12 +1057,9 @@ Internals Reference:
 @rinternals{Voice}.
 
 @knownissues
-All @code{\partcombine...} functions can only accept two voices and are
-not designed to work with lyrics; such that when one of the voices is
-explicitly named in order to attach lyrics to it, the partcombiner will
-stop working.
+All @code{\partcombine@dots{}} functions can only accept two voices.
 
-@code{\partcombine...} functions cannot be placed inside a @code{\times}
+@code{\partcombine@dots{}} functions cannot be placed inside a @code{\tuplet}
 or @code{\relative} block.
 
 If @code{printPartCombineTexts} is set and the two voices play the same
index 070ba07bd0435f83bd1475cc71014c72db4f8c17..73b431dd799a0af5ffde402bcf3d164a5b13cff9 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @ignore
 GDP TODO list
@@ -30,7 +30,7 @@ staff lines."
 
 Could we add a sentence:
 "Use instead the pair               fontSize = #@var{N}
-            \override StaffSymbol #'staff-space = #(magstep
+            \override StaffSymbol.staff-space = #(magstep
 @var{N})
 inside the Staff context to change the size of the font and the
 distance between
@@ -70,8 +70,8 @@ or stretched.
 
 Two types of blocks can contain layout settings:
 @code{\paper @{@dots{}@}} and @code{\layout @{@dots{}@}}.  The
-@code{\paper} block contains page layout settings that are
-expected to be the same for all scores in a book, such as the
+@code{\paper} block contains page layout settings that are expected
+to be the same for all scores in a book or bookpart, such as the
 paper height, or whether to print page numbers, etc.  See
 @ref{Page layout}.  The @code{\layout} block contains score layout
 settings, such as the number of systems to use, or the space
@@ -94,21 +94,48 @@ This section discusses page layout options for the @code{\paper}
 block.
 
 @menu
-* The \paper block::
+* The paper block::
 * Paper size and automatic scaling::
-* Fixed vertical spacing \paper variables::
-* Flexible vertical spacing \paper variables::
-* Horizontal spacing \paper variables::
-* Other \paper variables::
+* Fixed vertical spacing paper variables::
+* Flexible vertical spacing paper variables::
+* Horizontal spacing paper variables::
+* Other paper variables::
 @end menu
 
 
-@node The \paper block
-@subsection The @code{\paper} block
+@node The paper block
+@subsection The @code{@bs{}paper} block
+
+@code{\paper} blocks may be placed in three different places to form
+a descending hierarchy of @code{\paper} blocks:
+
+@itemize
+
+@item
+At the top of the input file, before all @code{\book},
+@code{\bookpart}, and @code{\score} blocks.
+
+@item
+Within a @code{\book} block but outside all the @code{\bookpart} and
+@code{\score} blocks within that book.
+
+@item
+Within a @code{\bookpart} block but outside all @code{\score} blocks
+within that bookpart.
+
+@end itemize
+
+A @code{\paper} block cannot be placed within a @code{\score} block.
+
+The values of the fields filter down this hierarchy, with the values
+set higher in the hierarchy persisting unless they are over-ridden
+by a value set lower in the hierarchy.
+
+Several @code{\paper} blocks can appear at each of the levels, for
+example as parts of several @code{\include}d files.  If so, the
+fields at each level are merged, with values encountered last taking
+precedence if duplicated fields appear.
 
-The @code{\paper} block can appear within a @code{\book} block,
-but not within a @code{\score} block.  Settings in a @code{\paper}
-block apply to the entire book, which may include multiple scores.
 Settings that can appear in a @code{\paper} block include:
 
 @itemize
@@ -134,7 +161,7 @@ footers, and titles are discussed in
 
 Most @code{\paper} variables will only work in a @code{\paper}
 block.  The few that will also work in a @code{\layout} block are
-listed in @ref{The \layout block}.
+listed in @ref{The layout block,,The @code{@bs{}layout} block}.
 
 Except when specified otherwise, all @code{\paper} variables that
 correspond to distances on the page are measured in millimeters,
@@ -176,7 +203,7 @@ The Scheme equivalent of the above example is:
 Notation Reference:
 @ref{Paper size and automatic scaling},
 @ref{Custom titles headers and footers},
-@ref{The \layout block}.
+@ref{The layout block,,The @code{@bs{}layout} block}.
 
 Installed Files:
 @file{ly/paper-defaults-init.ly}.
@@ -200,15 +227,18 @@ Installed Files:
 @unnumberedsubsubsec Setting the paper size
 
 @q{A4} is the default value when no explicit paper size is set. However,
-there are two functions that can be used to change it
-@code{set-default-paper-size},
+there are two functions that can be used to change it:
+
+@table @code
+@item set-default-paper-size
 
 @example
 #(set-default-paper-size "quarto")
 @end example
 
-which must always be placed at the toplevel scope. and
-@code{set-paper-size},
+which must always be placed at the toplevel scope, and
+
+@item set-paper-size
 
 @example
 \paper @{
@@ -217,9 +247,10 @@ which must always be placed at the toplevel scope. and
 @end example
 
 which must always be placed in a @code{\paper} block.
+@end table
 
 If the @code{set-default-paper-size} function is used in the toplevel
-scope, it must come before the any @code{\paper} block.
+scope, it must come before any @code{\paper} block.
 @code{set-default-paper-size} sets the paper size for all pages,
 whereas @code{set-paper-size} only sets the paper size for the pages
 that the @code{\paper} block applies to.  For example, if the
@@ -304,11 +335,12 @@ are described in @ref{Setting the paper size}.
 
 The vertical dimensions affected by automatic scaling are
 @code{top-margin} and @code{bottom-margin} (see
-@ref{Fixed vertical spacing \paper variables}).  The horizontal
+@ref{Fixed vertical spacing paper variables,,Fixed vertical spacing @code{@bs{}paper} variables}).
+The horizontal
 dimensions affected by automatic scaling are @code{left-margin},
 @code{right-margin}, @code{inner-margin}, @code{outer-margin},
 @code{binding-offset}, @code{indent}, and @code{short-indent} (see
-@ref{Horizontal spacing \paper variables}).
+@ref{Horizontal spacing paper variables,,Horizontal spacing @code{@bs{}paper} variables}).
 
 The default values for these dimensions are set in
 @file{ly/paper-defaults-init.ly}, using internal variables named
@@ -320,16 +352,16 @@ These are the values that result at the default paper size
 
 @seealso
 Notation Reference:
-@ref{Fixed vertical spacing \paper variables},
-@ref{Horizontal spacing \paper variables}.
+@ref{Fixed vertical spacing paper variables,,Fixed vertical spacing @code{@bs{}paper} variables},
+@ref{Horizontal spacing paper variables,,Horizontal spacing @code{@bs{}paper} variables}.
 
 Installed Files:
 @file{ly/paper-defaults-init.ly},
 @file{scm/paper.scm}.
 
 
-@node Fixed vertical spacing \paper variables
-@subsection Fixed vertical spacing @code{\paper} variables
+@node Fixed vertical spacing paper variables
+@subsection Fixed vertical spacing @code{@bs{}paper} variables
 
 @warning{Some @code{@bs{}paper} dimensions are automatically
 scaled to the paper size, which may lead to unexpected behavior.
@@ -396,8 +428,8 @@ Explicitly defined paper-sizes will override any user-defined top or
 bottom margin settings.
 
 
-@node Flexible vertical spacing \paper variables
-@subsection Flexible vertical spacing @code{\paper} variables
+@node Flexible vertical spacing paper variables
+@subsection Flexible vertical spacing @code{@bs{}paper} variables
 
 In most cases, it is preferable for the vertical distances between
 certain items (such as margins, titles, systems, and separate
@@ -415,7 +447,7 @@ settings typically entered inside a @code{\score} or
 
 @menu
 * Structure of flexible vertical spacing alists::
-* List of flexible vertical spacing \paper variables::
+* List of flexible vertical spacing paper variables::
 @end menu
 
 
@@ -512,8 +544,8 @@ redefines the variable:
 @end example
 
 
-@node List of flexible vertical spacing \paper variables
-@unnumberedsubsubsec List of flexible vertical spacing @code{\paper} variables
+@node List of flexible vertical spacing paper variables
+@unnumberedsubsubsec List of flexible vertical spacing @code{@bs{}paper} variables
 
 The names of these variables follow the format
 @code{@var{upper}-@var{lower}-spacing}, where @code{@var{upper}}
@@ -593,22 +625,22 @@ Snippets:
 @rlsr{Spacing}.
 
 
-@node Horizontal spacing \paper variables
-@subsection Horizontal spacing @code{\paper} variables
+@node Horizontal spacing paper variables
+@subsection Horizontal spacing @code{@bs{}paper} variables
 
 @warning{Some @code{@bs{}paper} dimensions are automatically
 scaled to the paper size, which may lead to unexpected behavior.
 See @ref{Automatic scaling to paper size}.}
 
 @menu
-* \paper variables for widths and margins::
-* \paper variables for two-sided mode::
-* \paper variables for shifts and indents::
+* paper variables for widths and margins::
+* paper variables for two-sided mode::
+* paper variables for shifts and indents::
 @end menu
 
 
-@node \paper variables for widths and margins
-@unnumberedsubsubsec @code{\paper} variables for widths and margins
+@node paper variables for widths and margins
+@unnumberedsubsubsec @code{@bs{}paper} variables for widths and margins
 
 Default values (before scaling) that are not listed here are
 defined in @file{ly/paper-defaults-init.ly}.
@@ -706,8 +738,8 @@ Explicitly defined paper-sizes will override any user-defined left or
 right margin settings.
 
 
-@node \paper variables for two-sided mode
-@unnumberedsubsubsec @code{\paper} variables for two-sided mode
+@node paper variables for two-sided mode
+@unnumberedsubsubsec @code{@bs{}paper} variables for two-sided mode
 
 Default values (before scaling) are defined in
 @file{ly/paper-defaults-init.ly}.
@@ -759,8 +791,8 @@ Installed Files:
 @file{ly/paper-defaults-init.ly}.
 
 
-@node \paper variables for shifts and indents
-@unnumberedsubsubsec @code{\paper} variables for shifts and indents
+@node paper variables for shifts and indents
+@unnumberedsubsubsec @code{@bs{}paper} variables for shifts and indents
 
 Default values (before scaling) that are not listed here are
 defined in @file{ly/paper-defaults-init.ly}.
@@ -804,21 +836,19 @@ Snippets:
 @rlsr{Spacing}.
 
 
-@node Other \paper variables
-@subsection Other @code{\paper} variables
+@node Other paper variables
+@subsection Other @code{@bs{}paper} variables
 
 @menu
-* \paper variables for line breaking::
-* \paper variables for page breaking::
-* \paper variables for page numbering::
-* Miscellaneous \paper variables::
+* paper variables for line breaking::
+* paper variables for page breaking::
+* paper variables for page numbering::
+* Miscellaneous paper variables::
 @end menu
 
 
-@node \paper variables for line breaking
-@unnumberedsubsubsec @code{\paper} variables for line breaking
-
-@c TODO: Mention that ly:optimal-breaking is on by default? -mp
+@node paper variables for line breaking
+@unnumberedsubsubsec @code{@bs{}paper} variables for line breaking
 
 @table @code
 
@@ -857,40 +887,21 @@ Notation Reference:
 @ref{Line breaking}.
 
 
-@node \paper variables for page breaking
-@unnumberedsubsubsec @code{\paper} variables for page breaking
+@node paper variables for page breaking
+@unnumberedsubsubsec @code{@bs{}paper} variables for page breaking
 
 Default values not listed here are defined in
 @file{ly/paper-defaults-init.ly}
 
 @table @code
 
-@item blank-after-score-page-force
-@funindex blank-after-score-page-force
-
-The penalty for having a blank page after the end of one score and
-before the next.  By default, this is smaller than
-@code{blank-page-force}, so that we prefer blank pages after
-scores to blank pages within a score.
-
-@item blank-last-page-force
-@funindex blank-last-page-force
-
-The penalty for ending the score on an odd-numbered page.
-
-@item blank-page-force
-@funindex blank-page-force
-
-The penalty for having a blank page in the middle of a
-score.  This is not used by @code{ly:optimal-breaking} since it will
-never consider blank pages in the middle of a score.
-
 @item page-breaking
 @funindex page-breaking
 
 The page-breaking algorithm to use.  Choices are
-@code{ly:minimal-breaking}, @code{ly:page-turn-breaking}, and
-@code{ly:optimal-breaking}.
+@code{ly:minimal-breaking}, @code{ly:page-turn-breaking},
+@code{ly:one-line-breaking} and @code{ly:optimal-breaking}
+(the default).
 
 @item page-breaking-system-system-spacing
 @funindex page-breaking-system-system-spacing
@@ -909,6 +920,56 @@ The number of pages to be used for a score, unset by default.
 
 @end table
 
+The following variables are effective only when @code{page-breaking}
+is set to @code{ly:page-turn-breaking}.  Page breaks are then chosen
+to minimize the number of page turns.  Since page turns are required
+on moving from an odd-numbered page to an even-numbered one, a
+layout in which the last page is odd-numbered will usually be
+favoured.  Places where page turns are preferred can be indicated
+manually by inserting @code{\allowPageTurn} or automatically by
+including the @code{Page_turn_engraver} (see @ref{Optimal page turning}).
+
+If there are insufficient choices available for making suitable page
+turns, LilyPond may insert a blank page either within a score, between
+scores (if there are two or more scores), or by ending a score on an
+even-numbered page.  The values of the following three variables may
+be increased to make these actions less likely.
+
+The values are penalties, i.e. the higher the value the less likely
+will be the associated action relative to other choices.
+
+@table @code
+
+@item blank-page-penalty
+@funindex blank-page-penalty
+
+The penalty for having a blank page in the middle of a score.  If
+@code{blank-page-penalty} is large and @code{ly:page-turn-breaking} is
+selected, then LilyPond will be less likely to insert a page in the
+middle of a score.  Instead, it will space out the music further to
+fill the blank page and the following one.  Default: 5.
+
+@item blank-last-page-penalty
+@funindex blank-last-page-penalty
+
+The penalty for ending the score on an even-numbered page.  If
+@code{blank-last-page-penalty} is large and
+@code{ly:page-turn-breaking} is selected, then LilyPond will be less
+likely to produce a score in which the last page is even-numbered.
+Instead, it will adjust the spacing in order to use one page more or
+one page less.  Default: 0.
+
+@item blank-after-score-page-penalty
+@funindex blank-after-score-page-penalty
+
+The penalty for having a blank page after the end of one score and
+before the next.  By default, this is smaller than
+@code{blank-page-penalty}, so that blank pages after scores are
+inserted in preference to blank pages within a score.  Default: 2.
+
+@end table
+
+
 @seealso
 Notation Reference:
 @ref{Page breaking},
@@ -921,8 +982,8 @@ Installed Files:
 @file{ly/paper-defaults-init.ly}.
 
 
-@node \paper variables for page numbering
-@unnumberedsubsubsec @code{\paper} variables for page numbering
+@node paper variables for page numbering
+@unnumberedsubsubsec @code{@bs{}paper} variables for page numbering
 
 Default values not listed here are defined in
 @file{ly/paper-defaults-init.ly}
@@ -968,8 +1029,8 @@ music to start on page 1 there must be a blank page on the back
 of the cover page so that page 1 is on the right hand side.
 
 
-@node Miscellaneous \paper variables
-@unnumberedsubsubsec Miscellaneous @code{\paper} variables
+@node Miscellaneous paper variables
+@unnumberedsubsubsec Miscellaneous @code{@bs{}paper} variables
 
 @table @code
 
@@ -1032,13 +1093,13 @@ This section discusses score layout options for the @code{\layout}
 block.
 
 @menu
-* The \layout block::
+* The layout block::
 * Setting the staff size::
 @end menu
 
 
-@node The \layout block
-@subsection The @code{\layout} block
+@node The layout block
+@subsection The @code{@bs{}layout} block
 
 @funindex \layout
 
@@ -1068,15 +1129,15 @@ variables that can appear in a @code{\layout} block are:
 
 @item
 @code{line-width}, @code{ragged-right} and @code{ragged-last}
-(see @ref{\paper variables for widths and margins})
+(see @ref{paper variables for widths and margins,,@code{@bs{}paper} variables for widths and margins})
 
 @item
 @code{indent} and @code{short-indent}
-(see @ref{\paper variables for shifts and indents})
+(see @ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents})
 
 @item
 @code{system-count}
-(see @ref{\paper variables for line breaking})
+(see @ref{paper variables for line breaking,,@code{@bs{}paper} variables for line breaking})
 
 @end itemize
 
@@ -1087,12 +1148,12 @@ Here is an example @code{\layout} block:
   indent = 2\cm
   \context @{
     \StaffGroup
-    \override StaffGrouper #'staff-staff-spacing #'basic-distance = #8
+    \override StaffGrouper.staff-staff-spacing.basic-distance = #8
   @}
   \context @{
     \Voice
-    \override TextScript #'padding = #1
-    \override Glissando #'thickness = #3
+    \override TextScript.padding = #1
+    \override Glissando.thickness = #3
   @}
 @}
 @end example
@@ -1113,8 +1174,8 @@ For example, if this block:
 \layout @{
   \context @{
     \Voice
-    \override TextScript #'color = #magenta
-    \override Glissando #'thickness = #1.5
+    \override TextScript.color = #magenta
+    \override Glissando.thickness = #1.5
   @}
 @}
 @end example
@@ -1134,13 +1195,13 @@ If a variable is defined like this:
 layoutVariable = \layout @{
   \context @{
     \Voice
-    \override NoteHead #'font-size = #4
+    \override NoteHead.font-size = #4
   @}
 @}
 @end example
 
 it will hold the current @code{\layout} configuration with the
-@code{NoteHead #'font-size} override added, but this combination
+@code{NoteHead.font-size} override added, but this combination
 is @emph{not} saved as the new current configuration.  Be aware
 that the @q{current configuration} is read when the variable is
 defined and not when it is used, so the content of the variable
@@ -1154,7 +1215,7 @@ for example:
   \layoutVariable
   \context @{
     \Voice
-    \override NoteHead #'color = #red
+    \override NoteHead.color = #red
   @}
 @}
 @end example
@@ -1172,11 +1233,11 @@ use of @code{\layoutVariable} the final @code{\layout} block would
 consist of:
 
 @example
-  TextScript #'padding = #1
-  TextScript #'color = #magenta
-  Glissando #'thickness = #1.5
-  NoteHead #' font-size = #4
-  NoteHead #' color = #red
+  TextScript.padding = #1
+  TextScript.color = #magenta
+  Glissando.thickness = #1.5
+  NoteHead.font-size = #4
+  NoteHead.color = #red
 @end example
 
 plus the @code{indent} and the @code{StaffGrouper} overrides.
@@ -1186,8 +1247,8 @@ But if the variable had already been defined before the first
 only
 
 @example
-  NoteHead #' font-size= #4 % (written in the variable definition)
-  NoteHead #' color = #red % (added after the use of the variable)
+  NoteHead.font-size = #4 % (written in the variable definition)
+  NoteHead.color = #red % (added after the use of the variable)
 @end example
 
 If carefully planned, @code{\layout} variables can be a valuable tool
@@ -1364,7 +1425,7 @@ with the music:
   \remove "Forbid_line_break_engraver"
 } \relative c'' {
   <<
-    { c2. \times 2/3 { c4 c c } c2. | }
+    { c2. \tuplet 3/2 { c4 c c } c2. | }
     { s1 | \break s1 | }
   >>
 }
@@ -1372,10 +1433,10 @@ with the music:
 
 Similarly, line breaks are normally forbidden when beams cross bar
 lines.  This behavior can be changed by setting
-@code{\override Beam #'breakable = ##t}:
+@code{\override Beam.breakable = ##t}:
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override Beam #'breakable = ##t
+\override Beam.breakable = ##t
 c2. c8[ c | \break
 c8 c] c2. |
 @end lilypond
@@ -1437,7 +1498,7 @@ every 4 measures, and only there:
 
 @seealso
 Notation Reference:
-@ref{\paper variables for line breaking}.
+@ref{paper variables for line breaking,,@code{@bs{}paper} variables for line breaking}.
 
 Snippets:
 @rlsr{Spacing}.
@@ -1464,7 +1525,7 @@ There are also analogous settings to @code{ragged-right} and
 @code{ragged-bottom} and @code{ragged-last-bottom}.  If set to
 @code{#t} the systems on all pages or just the last page
 respectively will not be justified vertically.  See
-@ref{Fixed vertical spacing \paper variables}.
+@ref{Fixed vertical spacing paper variables,,Fixed vertical spacing @code{@bs{}paper} variables}.
 
 Page breaks are computed by the @code{page-breaking} function.  LilyPond
 provides three algorithms for computing page breaks,
@@ -1521,7 +1582,7 @@ book parts.
 
 @seealso
 Notation Reference:
-@ref{\paper variables for page breaking}.
+@ref{paper variables for page breaking,,@code{@bs{}paper} variables for page breaking}.
 
 Snippets:
 @rlsr{Spacing}.
@@ -1578,7 +1639,7 @@ the section.
 The @code{Page_turn_engraver} reads the context property
 @code{minimumPageTurnLength} to determine how long a note-free section must
 be before a page turn is considered.  The default value for
-@code{minimumPageTurnLength} is @code{(ly:make-moment 1 1)}.  If you want
+@code{minimumPageTurnLength} is @code{(ly:make-moment 1/1)}.  If you want
 to disable page turns, you can set it to something very large.
 
 @example
@@ -1587,7 +1648,7 @@ to disable page turns, you can set it to something very large.
   a4 b c d |
   R1 | % a page turn will be allowed here
   a4 b c d |
-  \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
+  \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
   R1 | % a page turn will not be allowed here
   a4 b r2 |
   R1*2 | % a page turn will be allowed here
@@ -1617,6 +1678,9 @@ top-level markups.
 @endpredefined
 
 @seealso
+Notation Reference:
+@ref{paper variables for line breaking,,@code{@bs{}paper} variables for line breaking}.
+
 Snippets:
 @rlsr{Spacing}.
 
@@ -1671,8 +1735,8 @@ Lily sometimes rejects explicit @code{\break} and @code{\pageBreak}
 commands.  There are two commands to override this behavior:
 
 @example
-\override NonMusicalPaperColumn #'line-break-permission = ##f
-\override NonMusicalPaperColumn #'page-break-permission = ##f
+\override NonMusicalPaperColumn.line-break-permission = ##f
+\override NonMusicalPaperColumn.page-break-permission = ##f
 @end example
 
 When @code{line-break-permission} is overridden to false, Lily will insert
@@ -1703,8 +1767,8 @@ music = \relative c'' { c8 c c c }
   \layout {
     \context {
       \Score
-      \override NonMusicalPaperColumn #'line-break-permission = ##f
-      \override NonMusicalPaperColumn #'page-break-permission = ##f
+      \override NonMusicalPaperColumn.line-break-permission = ##f
+      \override NonMusicalPaperColumn.page-break-permission = ##f
     }
   }
 }
@@ -1742,21 +1806,25 @@ breaking layout information.
 @lilypond[quote,verbatim]
 music = \relative c'' { c4 c c c }
 
-\score {
-  \new Staff <<
-    \new Voice {
-      s1 * 2 \break
-      s1 * 3 \break
-      s1 * 6 \break
-      s1 * 5 \break
-    }
-    \new Voice {
-      \repeat unfold 2 { \music }
-      \repeat unfold 3 { \music }
-      \repeat unfold 6 { \music }
-      \repeat unfold 5 { \music }
-    }
-  >>
+\header { tagline = ##f }
+\paper { left-margin = 0\mm }
+\book {
+  \score {
+    \new Staff <<
+      \new Voice {
+        s1 * 2 \break
+        s1 * 3 \break
+        s1 * 6 \break
+        s1 * 5 \break
+      }
+      \new Voice {
+        \repeat unfold 2 { \music }
+        \repeat unfold 3 { \music }
+        \repeat unfold 6 { \music }
+        \repeat unfold 5 { \music }
+      }
+    >>
+  }
 }
 @end lilypond
 
@@ -1767,32 +1835,36 @@ This pattern becomes especially helpful when overriding
 @lilypond[quote,verbatim]
 music = \relative c'' { c4 c c c }
 
-\score {
-  \new Staff <<
-    \new Voice {
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 0))
-      s1 * 2 \break
-
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 35))
-      s1 * 3 \break
-
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 70))
-      s1 * 6 \break
-
-      \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 105))
-      s1 * 5 \break
-    }
-    \new Voice {
-      \repeat unfold 2 { \music }
-      \repeat unfold 3 { \music }
-      \repeat unfold 6 { \music }
-      \repeat unfold 5 { \music }
-    }
-  >>
+\header { tagline = ##f }
+\paper { left-margin = 0\mm }
+\book {
+  \score {
+    \new Staff <<
+      \new Voice {
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 0))
+        s1 * 2 \break
+
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 5))
+        s1 * 3 \break
+
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 15))
+        s1 * 6 \break
+
+        \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 30))
+        s1 * 5 \break
+      }
+      \new Voice {
+        \repeat unfold 2 { \music }
+        \repeat unfold 3 { \music }
+        \repeat unfold 6 { \music }
+        \repeat unfold 5 { \music }
+      }
+    >>
+  }
 }
 @end lilypond
 
@@ -1861,7 +1933,7 @@ control the vertical spacing of staves and non-staff lines within
 individual systems.  The vertical spacing between separate
 systems, scores, markups, and margins is controlled by
 @code{\paper} variables, which are discussed in
-@ref{Flexible vertical spacing \paper variables}.
+@ref{Flexible vertical spacing paper variables,,Flexible vertical spacing @code{@bs{}paper} variables}.
 
 @menu
 * Within-system spacing properties::
@@ -1915,7 +1987,7 @@ given in the following table:
 @item @code{ChordNames}  @tab baseline
 @item @code{NoteNames}   @tab baseline
 @item @code{Lyrics}      @tab baseline
-@item @code{Dynamics}    @tab vertical center
+@item @code{Dynamics}    @tab mid-height of @q{m}
 @item @code{FiguredBass} @tab highest point
 @item @code{FretBoards}  @tab top line
 @end multitable
@@ -1927,89 +1999,72 @@ of these reference points:
 #(define zero-space '((padding . -inf.0) (basic-distance . 0)))
 
 alignToZero = \with {
-  \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space
-  \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space
+  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
+  \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
+  \override VerticalAxisGroup.staff-affinity = #DOWN
+  \remove Text_engraver % avoid having two
+  \consists Text_engraver
 }
 lowerCaseChords = \with {
   chordNameLowercaseMinor = ##t
 }
-staffAffinityDown = \with {
-  \override VerticalAxisGroup #'staff-affinity = #DOWN
-}
 labelContext =
 #(define-music-function
      (parser location context)
      (string?)
-   #{ s1*0^\markup { \typewriter #context } #})
+     #{ s1*0^\markup { \upright {\typewriter #context } } #})
 
 \layout {
   \context { \Dynamics    \alignToZero }
   \context { \FiguredBass \alignToZero }
   \context { \Lyrics      \alignToZero }
-  \context { \NoteNames   \alignToZero \staffAffinityDown }
-  \context { \ChordNames  \alignToZero
-                          \staffAffinityDown
-                         \lowerCaseChords }
-  \context { \FretBoards  \alignToZero \staffAffinityDown }
+  \context { \NoteNames   \alignToZero }
+  \context { \ChordNames  \alignToZero \lowerCaseChords }
+  \context { \FretBoards  \alignToZero }
   \context { \Score
-    \override BarLine #'stencil = ##f
-    \override DynamicText #'self-alignment-X = #-1
-    \override FretBoard #'X-offset = #1.75
-    \override InstrumentName #'minimum-Y-extent = #'(-2 . 2)
-    \override InstrumentName #'extra-offset = #'(0 . -0.5)
-    \override TextScript #'minimum-Y-extent = #'(-2 . 3)
-    \override TimeSignature #'stencil = ##f
+    \omit BarLine
+    \override DynamicText.self-alignment-X = #-1
+    \override FretBoard.X-offset = #1.75
+    \override InstrumentName.minimum-Y-extent = #'(-1 . 2)
+    \textLengthOn
+    \omit TimeSignature
   }
 }
 
 %% These contexts have reference points at the baseline:
 %%   ChordNames, NoteNames, and Lyrics
 <<
-  \new ChordNames { \chords { g1:m } }
-  \new NoteNames { s1 | g1 | }
-  \new RhythmicStaff {
-    \set RhythmicStaff.instrumentName = #"baseline "
-    \textLengthOn
-    \labelContext "ChordNames " s1 |
-    \labelContext "NoteNames "  s1 |
-    \labelContext "Lyrics"     s1 |
-  }
-  \new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } }
+  \new ChordNames { \chords { \labelContext "ChordNames"  g1:m } }
+  \new NoteNames { s1 |\labelContext "NoteNames"  g1 | }
+  \new Lyrics { \lyrics { \skip 1*2 | \labelContext "Lyrics" ghijk1 | } }
+  \new RhythmicStaff \with { instrumentName = #"baseline " } s1*3
 >>
 
-%% The reference point for Dynamics is its vertical center
+%% The reference point for Dynamics is the midline of 'm' in the font
 <<
-  \new RhythmicStaff {
-    \set RhythmicStaff.instrumentName = #"vertical center "
-    \labelContext "Dynamics" s1*3
-  }
-  \new Dynamics { s1\mp s\fp }
+  \new Dynamics { \labelContext "Dynamics" s1\mp s\fp }
+  \new RhythmicStaff \with { instrumentName = #"mid-height " } s1*3
 >>
 
 %% The reference point for FiguredBass is its highest point
 <<
-  \new RhythmicStaff {
-    \set RhythmicStaff.instrumentName = #"highest point "
-    \labelContext "FiguredBass" s1
-  }
-  \new FiguredBass { \figuremode { <6 5>1 } }
+  \new FiguredBass { \labelContext "FiguredBass" \figuremode { <6 5>1 } }
+  \new RhythmicStaff \with { instrumentName = #"highest point " } s1
 >>
 
 %% The reference point for FretBoards is the top line
 \include "predefined-guitar-fretboards.ly"
 <<
-  \new FretBoards { \chordmode { e1 } }
-  \new RhythmicStaff {
-    \set RhythmicStaff.instrumentName = #"top line "
-    \labelContext "FretBoards " s1
-  }
+  \new FretBoards { \labelContext "FretBoards" \chordmode { e1 } }
+  \new RhythmicStaff \with { instrumentName = #"top line " } s1
 >>
 @end lilypond
 
 Each of the vertical spacing grob properties (except
 @code{staff-affinity}) uses the same alist structure as the
 @code{\paper} spacing variables discussed in
-@ref{Flexible vertical spacing \paper variables}.  Specific methods
+@ref{Flexible vertical spacing paper variables,,Flexible vertical spacing @code{@bs{}paper} variables}.
+Specific methods
 for modifying alists are discussed in @ref{Modifying alists}.
 Grob properties should be adjusted with an @code{\override} inside
 a @code{\score} or @code{\layout} block, and not inside a
@@ -2021,12 +2076,11 @@ individually, and the second completely re-defines the property:
 
 @example
 \new Staff \with @{
-  \override VerticalAxisGroup #'default-staff-staff-spacing
-       #'basic-distance = #10
+  \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
 @} @{ @dots{} @}
 
 \new Staff \with @{
-  \override VerticalAxisGroup #'default-staff-staff-spacing =
+  \override VerticalAxisGroup.default-staff-staff-spacing =
     #'((basic-distance . 10)
        (minimum-distance . 9)
        (padding . 1)
@@ -2041,8 +2095,7 @@ To change any spacing settings globally, put them in the
 \layout @{
   \context @{
     \Staff
-    \override VerticalAxisGroup #'default-staff-staff-spacing
-         #'basic-distance = #10
+    \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
   @}
 @}
 @end example
@@ -2153,7 +2206,7 @@ spacing settings for that staff.
 
 @seealso
 Notation Reference:
-@ref{Flexible vertical spacing \paper variables},
+@ref{Flexible vertical spacing paper variables,,Flexible vertical spacing @code{@bs{}paper} variables},
 @ref{Modifying alists}.
 
 Installed Files:
@@ -2200,7 +2253,7 @@ are combined in a group or groups.
 \layout {
   \context {
     \Staff
-    \override VerticalAxisGroup #'default-staff-staff-spacing =
+    \override VerticalAxisGroup.default-staff-staff-spacing =
       #'((basic-distance . 8)
          (minimum-distance . 7)
          (padding . 1))
@@ -2222,7 +2275,7 @@ are combined in a group or groups.
   % By setting 'padding to a negative value, staves can be made to
   % collide.  The lowest acceptable value for 'basic-distance is 0.
   \new Staff \with {
-    \override VerticalAxisGroup #'default-staff-staff-spacing =
+    \override VerticalAxisGroup.default-staff-staff-spacing =
       #'((basic-distance . 3.5)
          (padding . -10))
   } { \clef bass g2 r | }
@@ -2277,14 +2330,14 @@ The following example shows how properties of the
 \layout {
   \context {
     \Score
-    \override StaffGrouper #'staff-staff-spacing #'padding = #0
-    \override StaffGrouper #'staff-staff-spacing #'basic-distance = #1
+    \override StaffGrouper.staff-staff-spacing.padding = #0
+    \override StaffGrouper.staff-staff-spacing.basic-distance = #1
   }
 }
 
 <<
   \new PianoStaff \with {
-    \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+    \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
   } <<
     \new Staff { c'1 }
     \new Staff { c'1 }
@@ -2343,24 +2396,23 @@ able to stretch much more than usual:
 \layout {
   \context {
     \Lyrics
-    \override VerticalAxisGroup
-      #'nonstaff-nonstaff-spacing #'stretchability = #1000
+    \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
   }
 }
 
 \new StaffGroup
 <<
   \new Staff \with {
-    \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 30))
+    \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
   } { c'1 }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #UP
+    \override VerticalAxisGroup.staff-affinity = #UP
   } \lyricmode { up }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #CENTER
+    \override VerticalAxisGroup.staff-affinity = #CENTER
   } \lyricmode { center }
   \new Lyrics \with {
-    \override VerticalAxisGroup #'staff-affinity = #DOWN
+    \override VerticalAxisGroup.staff-affinity = #DOWN
   } \lyricmode { down }
   \new Staff { c'1 }
 >>
@@ -2390,12 +2442,12 @@ explained above is as a collection of settings that control the
 amount of vertical padding between staves and systems.
 
 It is possible to approach vertical spacing in a different way
-using @code{NonMusicalPaperColumn #'line-break-system-details}.
+using @code{NonMusicalPaperColumn.line-break-system-details}.
 While the flexible vertical spacing mechanisms specify vertical
-padding, @code{NonMusicalPaperColumn #'line-break-system-details}
+padding, @code{NonMusicalPaperColumn.line-break-system-details}
 can specify exact vertical positions on the page.
 
-@code{NonMusicalPaperColumn #'line-break-system-details} accepts
+@code{NonMusicalPaperColumn.line-break-system-details} accepts
 an associative list of three different settings:
 
 @itemize
@@ -2422,23 +2474,23 @@ example @code{NonMusicalPaperColumn} overrides with the special
 @code{\overrideProperty} command:
 
 @example
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((X-offset . 20))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((Y-offset . 40))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20)
-                                 (Y-offset . 40))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((X-offset . 20)
+     (Y-offset . 40))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((alignment-distances . (15)))
 
-\overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((X-offset . 20)
-                                 (Y-offset . 40)
-                                 (alignment-distances . (15)))
+\overrideProperty NonMusicalPaperColumn.line-break-system-details
+  #'((X-offset . 20)
+     (Y-offset . 40)
+     (alignment-distances . (15)))
 @end example
 
 To understand how each of these different settings work, we begin
@@ -2488,14 +2540,14 @@ attribute of the @code{NonMusicalPaperColumn} grob:
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 0))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 0))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 40))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 40))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 80))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 60))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -2526,17 +2578,17 @@ subproperty of @code{line-break-system-details}.
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 20)
-                                           (alignment-distances . (15)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 20)
+               (alignment-distances . (10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 60)
-                                           (alignment-distances . (15)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 60)
+               (alignment-distances . (15)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 100)
-                                           (alignment-distances . (15)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+          #'((Y-offset . 85)
+             (alignment-distances . (20)))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -2567,17 +2619,17 @@ specifies the vertical positioning of staves but not of staff groups.
     <<
       \new Staff <<
         \new Voice {
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 0)
-                                           (alignment-distances . (30 10)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 0)
+               (alignment-distances . (30 10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 60)
-                                           (alignment-distances . (10 10)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 60)
+               (alignment-distances . (10 10)))
           s1*5 \break
-          \overrideProperty #"Score.NonMusicalPaperColumn"
-            #'line-break-system-details #'((Y-offset . 100)
-                                           (alignment-distances . (10 30)))
+          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+            #'((Y-offset . 100)
+               (alignment-distances . (10 30)))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -2602,7 +2654,7 @@ do not count as a staff.
 of the distance between adjacent staff lines.  Positive values move staves
 and lyrics up, negative values move staves and lyrics down.
 
-@item Because the @code{NonMusicalPaperColumn #'line-break-system-details}
+@item Because the @code{NonMusicalPaperColumn.line-break-system-details}
 settings given here allow the positioning of staves and systems anywhere
 on the page, it is possible to violate paper or margin boundaries or even
 to print staves or systems on top of one another.  Reasonable values
@@ -2648,49 +2700,43 @@ the staff.
 @lilypond[quote,ragged-right,relative=2,verbatim]
 c4_"Text"\pp
 r2.
-\once \override TextScript #'outside-staff-priority = #1
+\once \override TextScript.outside-staff-priority = #1
 c4_"Text"\pp % this time the text will be closer to the staff
 r2.
 % by setting outside-staff-priority to a non-number,
 % we disable the automatic collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
-\once \override DynamicLineSpanner #'outside-staff-priority = ##f
+\once \override TextScript.outside-staff-priority = ##f
+\once \override DynamicLineSpanner.outside-staff-priority = ##f
 c4_"Text"\pp % now they will collide
 @end lilypond
 
-The vertical padding between an outside-staff object and the
-previously-positioned grobs can be controlled with
-@code{outside-staff-padding}.
+The vertical padding around outside-staff objects
+can be controlled with @code{outside-staff-padding}.
 
 @lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18]
-\once \override TextScript #'outside-staff-padding = #0
-a'^"This text is placed very close to the note"
-\once \override TextScript #'outside-staff-padding = #3
-c^"This text is padded away from the previous text"
-c^"This text is placed close to the previous text"
+\once \override TextScript.outside-staff-padding = #0
+a4-"outside-staff-padding = #0"
+\once \override TextScript.outside-staff-padding = #3
+d-"outside-staff-padding = #3"
+c-"default outside-staff-padding"
+b-"default outside-staff-padding"
+R1
 @end lilypond
 
 
-By default, outside-staff objects are placed only to avoid
+By default, outside-staff objects are placed so they avoid
 a horizontal collision with previously-positioned grobs.  This
-can lead to situations in which objects are placed very close to each
-other horizontally.  The vertical spacing between staves can
-also be set so that outside staff objects are interleaved.
-Setting @code{outside-staff-horizontal-padding}
-causes an object to be offset vertically so that such a situation
-doesn't occur.
+can lead to situations in which objects are placed close to each
+other horizontally.
+As shown in the example below, setting @code{outside-staff-horizontal-padding}
+increases the horizontal spacing required, and in this case moves the text up
+to prevent it from getting too close to the ledger lines.
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-% the markup is too close to the following note
-c4^"Text"
-c4
-c''2
-% setting outside-staff-horizontal-padding fixes this
+c4^"Word" c c''2
 R1
-\once \override TextScript #'outside-staff-horizontal-padding = #1
-c,,4^"Text"
-c4
-c''2
+\once \override TextScript.outside-staff-horizontal-padding = #1
+c,,4^"Word" c c''2
 @end lilypond
 
 @seealso
@@ -2730,8 +2776,9 @@ For example, the following piece contains lots of half, quarter, and
 The quarter note is followed by 2 NHW, the half by 3 NHW, etc.
 
 @lilypond[quote,verbatim,relative=1]
-c2 c4. c8 c4. c8 c4. c8 c8
-c8 c4 c4 c4
+c2 c4. c8
+c4. c8 c4. c8
+c8 c c4 c c
 @end lilypond
 
 Normally, @code{spacing-increment} is set to 1.2 staff space, which is
@@ -2773,7 +2820,7 @@ the common shortest note.  So if we were to add only a few 16th notes
 to the example above, they would be followed by half a NHW:
 
 @lilypond[quote,verbatim,relative=2]
-c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4
+c2 c4. c8 | c4. c16[ c] c4. c8 | c8 c c4 c c
 @end lilypond
 
 
@@ -2792,8 +2839,8 @@ once with exaggerated corrections:
 {
   c'4 e''4 e'4 b'4 |
   b'4 e''4 b'4 e''4 |
-  \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
-  \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
+  \override Staff.NoteSpacing.stem-spacing-correction = #1.5
+  \override Staff.StaffSpacing.stem-spacing-correction = #1.5
   c'4 e''4 e'4 b'4 |
   b'4 e''4 b'4 e''4 |
 }
@@ -2820,7 +2867,7 @@ following work-around may be used to insert extra space into a score,
 adjusting the padding value as necessary.
 
 @example
- \override Score.NonMusicalPaperColumn #'padding = #10
+ \override Score.NonMusicalPaperColumn.padding = #10
 @end example
 
 No work-around exists for decreasing the amount of space.
@@ -2829,12 +2876,18 @@ No work-around exists for decreasing the amount of space.
 @node New spacing area
 @subsection New spacing area
 
+@funindex \newSpacingSection
+@cindex new spacing area
+@cindex spacing area, new
+@cindex notes, spacing horizontally
+
 New sections with different spacing parameters can be started with
 @code{newSpacingSection}.  This is useful when there are
 sections with a different notions of long and short notes.
 
 In the following example, the time signature change introduces a new
-section, and hence the 16ths notes are spaced wider.
+section, and hence the 16ths notes are automatically spaced slightly
+wider.
 
 @lilypond[relative=1,verbatim,quote]
 \time 2/4
@@ -2846,8 +2899,25 @@ c16[ c c8]
 @end lilypond
 
 The @code{\newSpacingSection} command creates a new
-@code{SpacingSpanner} object, and hence new @code{\override}s
-may be used in that location.
+@code{SpacingSpanner} object at that musical moment.
+If the automatic spacing adjustments do not give the required spacing,
+manual @code{\override}s may be applied to its properties.  These must
+be applied at the same musical moment as the @code{\newSpacingSection}
+command itself.  They will then affect the spacing of all the following
+music until the properties are changed in a new spacing section, for
+example,
+
+@lilypond[relative=1,verbatim,quote]
+\time 4/16
+c16[ c c8]
+\newSpacingSection
+\override Score.SpacingSpanner.spacing-increment = #2
+c16[ c c8]
+\newSpacingSection
+\revert Score.SpacingSpanner.spacing-increment
+c16[ c c8]
+@end lilypond
+
 
 @seealso
 Snippets:
@@ -2891,8 +2961,7 @@ than @code{1 16}.
   \layout {
     \context {
       \Score
-      \override SpacingSpanner
-        #'base-shortest-duration = #(ly:make-moment 1 16)
+      \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
     }
   }
 }
@@ -2904,29 +2973,23 @@ than @code{1 16}.
 By default, spacing in tuplets depends on various non-duration
 factors (such as accidentals, clef changes, etc).  To disregard
 such symbols and force uniform equal-duration spacing, use
-@code{Score.SpacingSpanner #'uniform-stretching}.  This
+@code{Score.SpacingSpanner.uniform-stretching}.  This
 property can only be changed at the beginning of a score,
 
 @lilypond[quote,ragged-right,verbatim]
 \score {
   <<
     \new Staff {
-      \times 4/5 {
-        c8 c8 c8 c8 c8
-      }
-      c8 c8 c8 c8
+      \tuplet 5/4 { c8 c c c c } c8 c c c
     }
     \new Staff {
-      c8 c8 c8 c8
-      \times 4/5 {
-        c8 c8 c8 c8 c8
-      }
+      c8 c c c \tuplet 5/4 { c8 c c c c }
     }
   >>
   \layout {
     \context {
       \Score
-      \override SpacingSpanner #'uniform-stretching = ##t
+      \override SpacingSpanner.uniform-stretching = ##t
     }
   }
 }
@@ -2936,8 +2999,8 @@ When @code{strict-note-spacing} is set, notes are spaced without
 regard for clefs, bar lines, and grace notes,
 
 @lilypond[quote,ragged-right,relative=2,verbatim]
-\override Score.SpacingSpanner #'strict-note-spacing = ##t
-\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c]  c32[ c32] }
+\override Score.SpacingSpanner.strict-note-spacing = ##t
+\new Staff { c8[ c \clef alto c \grace { c16 c } c8 c c]  c32[ c] }
 @end lilypond
 
 @seealso
@@ -3017,7 +3080,7 @@ which may be used together or alone:
 @item @code{uniform-stretching}
 @item @code{strict-note-spacing}
 @item @code{\remove "Separating_line_group_engraver"}
-@item @code{\override PaperColumn #'used = ##t}
+@item @code{\override PaperColumn.used = ##t}
 @end itemize
 
 In the examples that follow, we explore these five different
@@ -3030,11 +3093,7 @@ spacing with ragged-right turned on.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
 }
@@ -3059,17 +3118,13 @@ setting.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
  \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
+      proportionalNotationDuration = #(ly:make-moment 1/20)
     }
   }
 }
@@ -3092,10 +3147,10 @@ The @code{proportionalNotationDuration} setting takes a single argument,
 which is the reference duration against that all music will be spaced.
 The LilyPond Scheme function @code{make-moment} takes two arguments
 -- a numerator and denominator which together express some fraction of
-a whole note.  The call @code{(ly:make-moment 1 20)} therefore produces
+a whole note.  The call @code{(ly:make-moment 1/20)} therefore produces
 a reference duration of a twentieth note.  Values such as
-@code{(ly:make-moment 1 16)}, @code{(ly:make-moment 1 8)}, and
-@code{(ly:make-moment 3 97)} are all possible as well.
+@code{(ly:make-moment 1/16)}, @code{(ly:make-moment 1/8)}, and
+@code{(ly:make-moment 3/97)} are all possible as well.
 
 How do we select the right reference duration to pass to
 @code{proportionalNotationDuration}?  Usually by a process of trial
@@ -3107,17 +3162,13 @@ larger reference durations space music tightly.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 8)
+      proportionalNotationDuration = #(ly:make-moment 1/8)
     }
   }
 }
@@ -3125,17 +3176,13 @@ larger reference durations space music tightly.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 16)
+      proportionalNotationDuration = #(ly:make-moment 1/16)
     }
   }
 }
@@ -3143,17 +3190,13 @@ larger reference durations space music tightly.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 32)
+      proportionalNotationDuration = #(ly:make-moment 1/32)
     }
   }
 }
@@ -3175,16 +3218,10 @@ tuplet.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
     \new RhythmicStaff {
-      \times 8/9 {
-        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
-      }
+      \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
     }
   >>
 }
@@ -3199,22 +3236,16 @@ result.  Setting @code{proportionalNotationDuration} fixes this.
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
     \new RhythmicStaff {
-      \times 8/9 {
-        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
-      }
+      \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
+      proportionalNotationDuration = #(ly:make-moment 1/20)
     }
   }
 }
@@ -3230,23 +3261,17 @@ turn on @code{uniform-stretching}, which is a property of
 \score {
   <<
     \new RhythmicStaff {
-      c'2
-      c'16 c'16 c'16 c'16
-      \times 4/5 {
-        c'16 c'16 c'16 c'16 c'16
-      }
+      c'2 c'16 c' c' c' \tuplet 5/4 { c'16 c' c' c' c' }
     }
     \new RhythmicStaff {
-      \times 8/9 {
-        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
-      }
+      \tuplet 9/8 { c'8 c' c' c' c' c' c' c' c' }
     }
   >>
   \layout {
     \context {
       \Score
-      proportionalNotationDuration = #(ly:make-moment 1 20)
-      \override SpacingSpanner #'uniform-stretching = ##t
+      proportionalNotationDuration = #(ly:make-moment 1/20)
+      \override SpacingSpanner.uniform-stretching = ##t
     }
   }
 }
@@ -3334,24 +3359,14 @@ property of @code{SpacingSpanner}.  Compare the two scores below:
 
 @lilypond[quote,verbatim,ragged-right]
 \new Staff {
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
-  c''8
-  c''8
-  c''8
-  \clef alto
-  d'8
-  d'2
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
+  c''8 c'' c'' \clef alto d' d'2
 }
 
 \new Staff {
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
-  \override Score.SpacingSpanner #'strict-note-spacing = ##t
-  c''8
-  c''8
-  c''8
-  \clef alto
-  d'8
-  d'2
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
+  \override Score.SpacingSpanner.strict-note-spacing = ##t
+  c''8 c'' c'' \clef alto d' d'2
 }
 @end lilypond
 
@@ -3366,11 +3381,11 @@ In addition to the settings given here, there are other settings
 that frequently appear in proportional scores.  These include:
 
 @itemize
-@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
-@item @code{tupletFullLength = ##t}
-@item @code{\override Beam #'breakable = ##t}
-@item @code{\override Glissando #'breakable = ##t}
-@item @code{\override TextSpanner #'breakable = ##t}
+@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
+@item @code{\set tupletFullLength = ##t}
+@item @code{\override Beam.breakable = ##t}
+@item @code{\override Glissando.breakable = ##t}
+@item @code{\override TextSpanner.breakable = ##t}
 @item @code{\remove "Forbid_line_break_engraver" in the Voice context}
 @end itemize
 
@@ -3416,9 +3431,7 @@ To graphically display the dimensions of vertical layout variables
 that may be altered for page formatting, set
 @code{annotate-spacing} in the @code{\paper} block:
 
-@c need to have \book{} otherwise we get the separate systems. -hwn
-@lilypond[verbatim,quote]
-#(set-default-paper-size "a6" 'landscape)
+@lilypond[verbatim,quote,papersize=a6landscape]
 \book {
   \score { { c4 } }
   \paper { annotate-spacing = ##t }
@@ -3520,7 +3533,7 @@ a system can be moved closer to the staff:
 
 @lilypond[verbatim,quote,relative=1]
 e4 c g\f c
-e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
+e4 c g-\tweak X-offset #-2.7 \f c
 @end lilypond
 
 @item
@@ -3558,8 +3571,8 @@ duration longer, a @q{squeezing} effect occurs:
   \layout {
     \context {
       \Score
-      \override SpacingSpanner
-        #'common-shortest-duration = #(ly:make-moment 1 2)
+      \override SpacingSpanner.common-shortest-duration =
+        #(ly:make-moment 1/2)
     }
   }
 }
index c7d799e47a0afb511edc98b47d8ce4568b7eafc1..278ffc97c0aefb0d3e148bfb684b37adfe377bf4 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Staff notation
 @section Staff notation
@@ -69,7 +69,7 @@ grouping staves.
 
 @notation{Staves} (singular: @notation{staff}) are created with
 the @code{\new} or @code{\context} commands.  For details, see
-@ref{Creating contexts}.
+@ref{Creating and referencing contexts}.
 
 The basic staff context is @code{Staff}:
 
@@ -124,7 +124,7 @@ Music Glossary:
 @rglos{staves}.
 
 Notation Reference:
-@ref{Creating contexts},
+@ref{Creating and referencing contexts},
 @ref{Percussion staves},
 @ref{Showing melody rhythms},
 @ref{Default tablatures},
@@ -432,67 +432,75 @@ f'4 d \startStaff g, e
 @endpredefined
 
 The lines of a staff belong to the @code{StaffSymbol} grob (including
-ledger lines) can be modified using @code{StaffSymbol} properties, but
+ledger lines) and can be modified using @code{StaffSymbol} properties, but
 these modifications must be made before the staff is (re)started.
 
-The number of staff lines can be altered,
+The number of staff lines can be altered:
 
 @lilypond[verbatim,quote,relative=2]
 f4 d \stopStaff
-\override Staff.StaffSymbol #'line-count = #2
+\override Staff.StaffSymbol.line-count = #2
 \startStaff g, e |
 
 f'4 d \stopStaff
-\revert Staff.StaffSymbol #'line-count
+\revert Staff.StaffSymbol.line-count
 \startStaff g, e |
 @end lilypond
 
-The position of each the staff lines can also be altered.  The values
-used are @emph{half} staff line spaces and the new position is relative
-to the normal center line.  A single staff line is printed for every
-value entered so that the number of staff lines, as well as their
-position in the staff, can be changed with a single override.
+The position of each staff line can also be altered.  A list of
+numbers sets each line's position.  @code{0}@tie{}corresponds to the normal
+center line, and the normal line positions are
+@code{(-4@tie{}-2@tie{}0@tie{}2@tie{}4)}.  A single staff line is
+printed for every value entered so that the number of staff lines, as
+well as their position, can be changed with a single override.
 
 @lilypond[verbatim,quote,relative=2]
 f4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(1 3 5 -1 -3)
+\override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
 \startStaff g, e |
 f'4 d \stopStaff
-\override Staff.StaffSymbol #'line-positions = #'(8 6.5 -6 -8 -0.5)
+\override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
 \startStaff g, e
 @end lilypond
 
-The clef position and the position of middle C may need to be adjusted
-accordingly to fit the new lines.  See @ref{Clef}.
+To preserve typical stem directions (in the bottom half of the staff
+stems point up, in the top half they point down), align the center
+line (or space) of the customized staff with the position of the
+normal center line (0).  The clef position and the position of
+middle@tie{}C may need to be adjusted accordingly to fit the new
+lines.  See @ref{Clef}.
 
 Staff line thickness can be altered.  Ledger lines and note stems, by
 default, are also affected.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'thickness = #3
+  \override StaffSymbol.thickness = #3
 }
 { f4 d g, e }
 @end lilypond
 
-However, it is possible to set ledger line thickness independently of
-staff lines.  The two values required multiply the staff line thickness
-with the staff line spacing and are then added together to give the
-ledger line thickness.
+It is also possible to set ledger line thickness independently of staff
+lines.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'thickness = #2
-  \override StaffSymbol #'ledger-line-thickness = #'(0.5 . 0.4)
+  \override StaffSymbol.thickness = #2
+  \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
 }
 { f'4 a, a,, f }
 @end lilypond
 
+@noindent
+The first value is multiplied by the staff line thickness, the second by
+the staff space and then the two values are added together to give the
+new thickness of the ledger line.
+
 The vertical positions of ledger lines can be altered,
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'ledger-positions = #'(-3 -2 -1 2 5 6)
+  \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
 }
 { f'4 a, a,, f }
 @end lilypond
@@ -503,23 +511,23 @@ also have their own ledger lines.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'ledger-extra = #4
+  \override StaffSymbol.ledger-extra = #4
 }
 { f'4 a, d, f, }
 @end lilypond
 
-Legder lines can also be made to appear inside the staff where custom
+Ledger lines can also be made to appear inside the staff where custom
 staff lines are required.  The example shows the default position of
-ledger lines when the explicit @code{legder-position} is and is not set.
-The @code{stopStaff} is needed in the example to revert the
+ledger lines when the explicit @code{ledger-position} is and is not set.
+The @code{\stopStaff} is needed in the example to revert the
 @code{\override} for the whole @code{StaffSymbol}.
 
-@lilypond[fragment,quote,relative=1]
-\override Staff.StaffSymbol #'line-positions =   #'(-8 0 2 4)
+@lilypond[verbatim,quote,relative=1]
+\override Staff.StaffSymbol.line-positions = #'(-8 0 2 4)
 d4 e f g
 \stopStaff
 \startStaff
-\override Staff.StaffSymbol #'ledger-positions = #'(-8 -6 (-4 -2) 0)
+\override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
 d4 e f g
 @end lilypond
 
@@ -528,7 +536,7 @@ line spacing as well.
 
 @lilypond[verbatim,quote,relative=2]
 \new Staff \with {
-  \override StaffSymbol #'staff-space = #1.5
+  \override StaffSymbol.staff-space = #1.5
 }
 { f'4 d, g, e, }
 @end lilypond
@@ -595,7 +603,7 @@ to align the ossia staff.  This method is most appropriate when
 only a few ossia staves are needed.
 
 @lilypond[verbatim,quote]
-\new Staff = main \relative c'' {
+\new Staff = "main" \relative c'' {
   c4 b d c
   <<
     { c4 b d c }
@@ -604,8 +612,8 @@ only a few ossia staves are needed.
       \remove "Time_signature_engraver"
       alignAboveContext = #"main"
       fontSize = #-3
-      \override StaffSymbol #'staff-space = #(magstep -3)
-      \override StaffSymbol #'thickness = #(magstep -3)
+      \override StaffSymbol.staff-space = #(magstep -3)
+      \override StaffSymbol.thickness = #(magstep -3)
       firstClef = ##f
     }
     { e4 d f e }
@@ -624,12 +632,12 @@ example.
 
 @lilypond[verbatim,quote,ragged-right]
 <<
-  \new Staff = ossia \with {
+  \new Staff = "ossia" \with {
     \remove "Time_signature_engraver"
-    \override Clef #'transparent = ##t
+    \hide Clef
     fontSize = #-3
-    \override StaffSymbol #'staff-space = #(magstep -3)
-    \override StaffSymbol #'thickness = #(magstep -3)
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
   }
   { \stopStaff s1*6 }
 
@@ -637,7 +645,7 @@ example.
     c4 b c2
     <<
       { e4 f e2 }
-      \context Staff = ossia {
+      \context Staff = "ossia" {
         \startStaff e4 g8 f e2 \stopStaff
       }
     >>
@@ -645,7 +653,7 @@ example.
     c4 b c2
     <<
       { g4 a g2 }
-      \context Staff = ossia {
+      \context Staff = "ossia" {
         \startStaff g4 e8 f g2 \stopStaff
       }
     >>
@@ -663,12 +671,12 @@ break.  For more information about
 
 @lilypond[verbatim,quote,ragged-right]
 <<
-  \new Staff = ossia \with {
+  \new Staff = "ossia" \with {
     \remove "Time_signature_engraver"
-    \override Clef #'transparent = ##t
+    \hide Clef
     fontSize = #-3
-    \override StaffSymbol #'staff-space = #(magstep -3)
-    \override StaffSymbol #'thickness = #(magstep -3)
+    \override StaffSymbol.staff-space = #(magstep -3)
+    \override StaffSymbol.thickness = #(magstep -3)
   } \relative c'' {
     R1*3
     c4 e8 d c2
@@ -686,7 +694,7 @@ break.  For more information about
 \layout {
   \context {
     \Staff \RemoveEmptyStaves
-    \override VerticalAxisGroup #'remove-first = ##t
+    \override VerticalAxisGroup.remove-first = ##t
   }
 }
 @end lilypond
@@ -839,8 +847,8 @@ this case, use the following overrides instead of removing the
 engraver:
 
 @example
-\override StaffSymbol #'stencil = ##f
-\override NoteHead #'no-ledgers = ##t
+\omit StaffSymbol
+\override NoteHead.no-ledgers = ##t
 @end example
 
 For the Known issues and warnings associated with
@@ -910,8 +918,9 @@ multi-line instrument names, @code{\center-column} must be used:
   { f2 g4 f }
   \new Staff \with {
     instrumentName = \markup {
-      \center-column { "Clarinet" }
-      \line { "in B" \smaller \flat }
+      \center-column { "Clarinet"
+        \line { "in B" \smaller \flat }
+      }
     }
   }
   { c4 b c2 }
@@ -924,7 +933,7 @@ multi-line instrument names, @code{\center-column} must be used:
 However, if the instrument names are longer, the instrument names in a
 staff group may not be centered unless the @code{indent} and
 @code{short-indent} settings are increased.  For details about these
-settings, see @ref{\paper variables for shifts and indents}.
+settings, see @ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents}.
 
 @lilypond[verbatim,quote,ragged-right]
 \relative c'' {
@@ -1026,7 +1035,7 @@ expression to declare the instrument switch:
 
 @seealso
 Notation Reference:
-@ref{\paper variables for shifts and indents},
+@ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents},
 @ref{Modifying context plug-ins}.
 
 Snippets:
index 7b056dbdbd3fe4e67625ad60acba4278e0469f82..62aac77931fc2a33268c62ae90dfb67f065952d1 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 @node Text
 @section Text
@@ -124,7 +124,7 @@ margins requires additonal calculations. In cases where slightly faster
 performance is desired, use
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
 @end example
 
 
@@ -140,7 +140,7 @@ multiple notes with dotted lines.  Such objects, called
 following syntax:
 
 @lilypond[verbatim,quote,relative=2]
-\override TextSpanner #'(bound-details left text) = "rit."
+\override TextSpanner.bound-details.left.text = "rit."
 b1\startTextSpan
 e,\stopTextSpan
 @end lilypond
@@ -155,7 +155,7 @@ obtained using @code{\markup} blocks, as described in
 @ref{Formatting text}.
 
 @lilypond[quote,relative=2,verbatim]
-\override TextSpanner #'(bound-details left text) =
+\override TextSpanner.bound-details.left.text =
   \markup { \upright "rit." }
 b1\startTextSpan c
 e,\stopTextSpan
@@ -261,22 +261,28 @@ bar, they can be placed above the bar line or between notes.  When
 specified at a line break, the mark will be printed at the beginning of
 the next line.
 
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim,relative=2,ragged-right]
 \mark "Allegro"
 c1 c
 \mark "assai" \break
 c  c
 @end lilypond
 
+@funindex \markLengthOn
+@funindex markLengthOn
+@funindex \markLengthOff
+@funindex markLengthOff
+
+@predefined
+@code{\markLengthOn},
+@code{\markLengthOff}.
+@endpredefined
 
 @snippets
 
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-marks-at-the-end-of-a-line.ly}
 
-@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
-{aligning-marks-with-various-notation-objects.ly}
-
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-marks-on-every-staff.ly}
 
@@ -1166,11 +1172,7 @@ in markup mode:
 
 @lilypond[quote,verbatim,relative=1]
 g1 bes
-ees-\markup {
-  \finger 4
-  \tied-lyric #"~"
-  \finger 1
-}
+ees\finger \markup \tied-lyric #"4~1"
 fis_\markup { \dynamic rf }
 bes^\markup {
   \beam #8 #0.1 #0.5
@@ -1397,18 +1399,26 @@ Three families of text fonts are made available: the @emph{roman}
 @emph{sans} font and the monospaced @emph{typewriter} font -- these
 last two families are determined by the Pango installation.
 
+@warning{There are no default fonts associated with the @emph{sans}
+and @emph{typewriter} font-families.  An input file that specifies
+either of these can lead to different output on different computers.
+To ensure consistent output among multiple platforms, fonts must be
+specified by name, and those fonts must be available on any system
+that processes the file.  See @ref{Single entry fonts} and
+@ref{Entire document fonts}.}
+
 Each family may include different shapes and series.  The following
 example demonstrates the ability to select alternate families, shapes,
 series and sizes.  The value supplied to @code{font-size} is the
 required change from the default size.
 
 @lilypond[quote,verbatim,relative=2]
-\override Score.RehearsalMark #'font-family = #'typewriter
+\override Score.RehearsalMark.font-family = #'typewriter
 \mark \markup "Ouverture"
-\override Voice.TextScript #'font-shape = #'italic
-\override Voice.TextScript #'font-series = #'bold
+\override Voice.TextScript.font-shape = #'italic
+\override Voice.TextScript.font-series = #'bold
 d2.^\markup "Allegro"
-\override Voice.TextScript #'font-size = #-3
+\override Voice.TextScript.font-size = #-3
 c4^smaller
 @end lilypond
 
@@ -1459,8 +1469,8 @@ Any font that is installed on the operating system and recognized by
 FontConfig may be used in a score, using the following syntax:
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.TimeSignature #'font-name = #"Bitstream Charter"
-\override Staff.TimeSignature #'font-size = #2
+\override Staff.TimeSignature.font-name = #"Bitstream Charter"
+\override Staff.TimeSignature.font-size = #2
 \time 3/4
 
 a1_\markup {
@@ -1501,8 +1511,9 @@ Snippets:
 
 It is possible to change the fonts to be used as the default fonts in
 the @emph{roman}, @emph{sans} and @emph{typewriter} font families by
-specifying them, in that order, as shown in the example below.  For an
-explanation of fonts, see @ref{Fonts explained}.
+specifying them, in that order, as shown in the example below, which
+automatically scales the fonts with the value set for the global staff
+size.  For an explanation of fonts, see @ref{Fonts explained}.
 
 @cindex font families, setting
 @cindex fonts, changing for entire document
@@ -1511,12 +1522,11 @@ explanation of fonts, see @ref{Fonts explained}.
 
 @lilypond[verbatim,quote]
 \paper  {
-  myStaffSize = #20
   #(define fonts
     (make-pango-font-tree "Times New Roman"
                           "Nimbus Sans"
                           "Luxi Mono"
-                           (/ myStaffSize 20)))
+                          (/ staff-height pt 20)))
 }
 
 \relative c'{
index a112331f14b6fffce9b47e2edafd94a2d3dd51d4..fcaff9d4dc85acc92e8547ed2c1611b04b556982 100644 (file)
@@ -60,14 +60,14 @@ in @ref{Fingering instructions}.
 see @ref{Chorded notes}.  Directives for playing chords may be
 added, see @ref{Arpeggio}.
 
-@item A template for a string quartet can be found in
-@rlearning{String quartet}.  Others are shown in the snippets.
+@item Templates for string quartets can be found in
+@rlearning{String quartet templates}.  Others are shown in the snippets.
 
 @end itemize
 
 @seealso
 Learning Manual:
-@rlearning{String quartet}.
+@rlearning{String quartet templates}.
 
 Notation Reference:
 @ref{Text scripts},
index 0dc82ee2f555ef6e559ebca32364a4e3dd0574d5..06aa65d46d7133a6933f31facc9e9f91b438d5b2 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.30"
 
 @node Vocal music
 @section Vocal music
@@ -149,25 +149,6 @@ compile.  Instead, braces should always be surrounded with white space:
 \lyricmode @{ lah lah lah @}
 @end example
 
-@cindex overrides in lyric mode
-@funindex \override in \lyricmode
-
-Similarly, in lyric mode, a period will be included in the
-alphabetic sequence that it follows.  As a consequence, spaces
-must be inserted around the period in @code{\override} commands.
-Do @emph{not} write
-
-@example
-\override Score.LyricText #'font-shape = #'italic
-@end example
-
-@noindent
-but instead use
-
-@example
-\override Score . LyricText #'font-shape = #'italic
-@end example
-
 Punctuation, lyrics with accented characters, characters from
 non-English languages, or special characters (such as the heart
 symbol or slanted quotes), may simply be inserted directly
@@ -402,7 +383,7 @@ the named Voice context containing the melody with
 @lilypond[quote,verbatim,relative=2]
 <<
   \new Voice = "melody" {
-    a4 a a a
+    a1 a4. a8 a2
   }
   \new Lyrics \lyricsto "melody" {
     These are the words
@@ -467,6 +448,7 @@ More stanzas can be added by adding more
 @end lilypond
 
 The command @code{\addlyrics} cannot handle polyphonic settings.
+Also, it cannot be used to associate lyrics to a @code{TabVoice}.
 For these cases one should use @code{\lyricsto}.
 
 @subheading Using associatedVoice
@@ -615,11 +597,16 @@ spaces between the syllables, you can surround the phrase with
 quotes or use a @code{_} character.  Alternatively, you can use
 the tilde symbol (@code{~}) to get a lyric tie.
 
-@lilypond[quote,ragged-right,verbatim]
+@lilypond[quote,ragged-right,verbatim,relative=2]
 {
-  \relative c'' { \autoBeamOff
-    r8 b c fis, fis c' b e, }
-  \addlyrics { Che_in ques -- ta_e_in quel -- l'al -- tr'on -- da }
+  { \autoBeamOff
+    r8 b c fis, fis c' b e,
+  }
+  \addlyrics
+  {
+    \override LyricHyphen.minimum-distance = #1.0 % Ensure hyphens are visible
+    Che_in ques -- ta_e_in quel -- l'al -- tr'on -- da
+  }
   \addlyrics { "Che in" ques -- "ta e in" quel -- l'al -- tr'on -- da }
   \addlyrics { Che~in ques -- ta~e~in quel -- l'al -- tr'on -- da }
 }
@@ -639,12 +626,12 @@ Internals Reference:
 @funindex \melisma
 @funindex \melismaEnd
 
-Sometimes, particularly in Medieval music, several notes are to be
-sung on one syllable; such vocalises are called melismata, or
-@rglos{melisma}s.  The syllable to a melisma is usually
+Sometimes, particularly in Medieval and baroque music, several notes are
+sung on one syllable; this is called melisma, see
+@rglos{melisma}.  The syllable to a melisma is usually
 left-aligned with the first note of the melisma.
 
-When a melisma occurs on a syllable other that the last one in a
+When a melisma occurs on a syllable other than the last one in a
 word, that syllable is usually joined to the following one with a
 hyphenated line.  This is indicated by placing a double hyphen,
 @w{@code{--}}, immediately after the syllable.
@@ -886,6 +873,7 @@ Internals Reference:
 * Placing syllables horizontally::
 * Lyrics and repeats::
 * Divisi lyrics::
+* Polyphony with shared lyrics::
 @end menu
 
 
@@ -1033,7 +1021,7 @@ follows:
   <<
     \new Lyrics = "lyrics" \with {
       % lyrics above a staff should have this override
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff {
       \new Voice = "melody" {
@@ -1064,7 +1052,7 @@ is an example of the second method:
     \new Lyrics = "sopranos"
     \new Lyrics = "contraltos" \with {
       % lyrics above a staff should have this override
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff {
       \new Voice = "contraltos" {
@@ -1086,8 +1074,8 @@ is an example of the second method:
 @end lilypond
 
 Other combinations of lyrics and staves may be generated by
-elaborating these examples, or by examining the
-@rlearning{Vocal ensembles} templates in the Learning Manual.
+elaborating these examples, or by examining the templates in the
+Learning Manual, see @rlearning{Vocal ensembles templates}.
 
 @snippets
 @lilypondfile[verbatim,quote,texidoc,doctitle]
@@ -1095,11 +1083,11 @@ elaborating these examples, or by examining the
 
 @seealso
 Learning Manual:
-@rlearning{Vocal ensembles}.
+@rlearning{Vocal ensembles templates}.
 
 Notation Reference:
 @ref{Context layout order},
-@ref{Creating contexts}.
+@ref{Creating and referencing contexts}.
 
 
 @node Placing syllables horizontally
@@ -1114,7 +1102,7 @@ To increase the spacing between lyrics, set the
 @lilypond[relative=1,verbatim,quote,ragged-right]
 {
   c c c c
-  \override Lyrics.LyricSpace #'minimum-distance = #1.0
+  \override Lyrics.LyricSpace.minimum-distance = #1.0
   c c c c
 }
 \addlyrics {
@@ -1140,7 +1128,7 @@ To make this change for all lyrics in the score, set the property in the
   \layout {
     \context {
       \Lyrics
-      \override LyricSpace #'minimum-distance = #1.0
+      \override LyricSpace.minimum-distance = #1.0
     }
   }
 }
@@ -1157,7 +1145,7 @@ requires additional calculations.  To speed up processing slightly, this
 feature can be disabled:
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##f
+\override Score.PaperColumn.keep-inside-line = ##f
 @end example
 
 To make lyrics avoid bar lines as well, use
@@ -1168,7 +1156,7 @@ To make lyrics avoid bar lines as well, use
     \Lyrics
       \consists "Bar_engraver"
       \consists "Separating_line_group_engraver"
-      \override BarLine #'transparent = ##t
+      \hide BarLine
   @}
 @}
 @end example
@@ -1647,6 +1635,123 @@ attaching lyrics to those specific contexts:
 }
 @end lilypond
 
+It is common in choral music to have a voice part split for
+several measures.  The @code{<< @{@dots{}@} \\ @{@dots{}@} >>}
+construct, where the two (or more) musical expressions are
+separated by double backslashes, might seem the proper way to
+set the split voices.  This construct, however, will assign
+@strong{all} the expressions within it to @strong{NEW Voice
+contexts} which will result in @emph{no lyrics} being set for
+them since the lyrics will be set to the original voice context
+-- not, typically, what one wants.  The temporary polyphonic
+passage is the proper construct to use, see section
+@emph{Temporary polyphonic passages} in @ref{Single-staff polyphony}.
+
+
+@node Polyphony with shared lyrics
+@unnumberedsubsubsec Polyphony with shared lyrics
+
+@cindex NullVoice
+@cindex polyphony, shared lyrics
+@cindex lyrics, shared among voices
+@cindex \partcombine and lyrics
+@funindex \partcombine
+
+When two voices with different rhythms share the same lyrics,
+aligning the lyrics to one of the voices may lead to problems in
+the other voice.  For example, the second lyric extender below is
+too short, since the lyrics are aligned only to the top voice:
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+alto = \relative { g'2 b8( a g a) }
+words = \lyricmode { la __ la __ }
+
+\new Staff <<
+  \new Voice = "sopranoVoice" { \voiceOne \soprano }
+  \new Voice { \voiceTwo \alto }
+  \new Lyrics \lyricsto "sopranoVoice" \words
+>>
+@end lilypond
+
+To get the desired result, align the lyrics to a new
+@code{NullVoice} context containing a suitable combination of the
+two voices.  The notes of the @code{NullVoice} context do not
+appear on the printed page, but can be used to align the lyrics
+appropriately:
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+alto = \relative { g'2 b8( a g a) }
+aligner = \relative { b'8( c d c) b( a g a) }
+words = \lyricmode { la __ la __ }
+
+\new Staff <<
+  \new Voice { \voiceOne \soprano }
+  \new Voice { \voiceTwo \alto }
+  \new NullVoice = "aligner" \aligner
+  \new Lyrics \lyricsto "aligner" \words
+>>
+@end lilypond
+
+The @code{NullVoice} context must be placed within a @code{Staff}
+context and contain notes that are already being displayed in that staff and that are also in the same octave.  Otherwise the
+@code{NullVoice} may interact with the printed voices in
+unexpected ways.  For example, arbitrary notes in the
+@code{NullVoice} may cause accidentals to appear (or disappear) on
+the staff.
+
+This method also can be used with the @code{\partcombine}
+function, which does not allow lyrics on its own:
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+alto = \relative { g'2 b8( a g a) }
+aligner = \relative { b'8( c d c) b( a g a) }
+words = \lyricmode { la __ la __ }
+
+\new Staff <<
+  \new Voice \partcombine \soprano \alto
+  \new NullVoice = "aligner" \aligner
+  \new Lyrics \lyricsto "aligner" \words
+>>
+@end lilypond
+
+@knownissues
+The @code{\addLyrics} function only works with @code{Voice} lyrics
+and so cannot be used with @code{NullVoice}.
+
+@noindent
+The @code{\partcombine} function is described in
+@ref{Automatic part combining}.
+
+Lastly, this method can be used even when the voices are in
+different staves, and is not limited to only two voices:
+
+@lilypond[quote,verbatim]
+soprano = \relative { b'8( c d c) d2 }
+altoOne = \relative { g'2 b8( a b4) }
+altoTwo = \relative { d'2 g4( fis8 g) }
+aligner = \relative { b'8( c d c) d( d d d) }
+words = \lyricmode { la __ la __ }
+
+\new ChoirStaff <<
+  \new Staff <<
+    \soprano
+    \new NullVoice = "aligner" \aligner
+  >>
+  \new Lyrics \lyricsto "aligner" \words
+  \new Staff \partcombine \altoOne \altoTwo
+>>
+@end lilypond
+
+However, note that in the second half of the measure above, the
+notes in the @code{NullVoice} context reflect the rhythm of the
+lower staff, but they do not deviate from the single pitch being
+displayed in the staff to which the @code{NullVoice} belongs.
+While not actually required in this particular example, it is a
+good idea in general to enter the notes in this way.
+
 
 @node Stanzas
 @subsection Stanzas
@@ -1820,7 +1925,7 @@ changed:
 <<
   \new Voice = melody \relative c' {
     f4 \appoggiatura a32 b4
-    \grace { f16[ a16] } b2
+    \grace { f16 a16 } b2
     \afterGrace b2 { f16[ a16] }
     \appoggiatura a32 b4
     \acciaccatura a8 b4
@@ -1849,7 +1954,7 @@ block:
 @lilypond[verbatim,ragged-right,quote]
 <<
   \new Voice = melody \relative c' {
-    \grace { c16[( d e f] }
+    \grace { c16( d e f }
     g1) f
   }
   \new Lyrics \with { includeGraceNotes = ##t }
@@ -1876,9 +1981,9 @@ within the lyrics by setting the @code{associatedVoice} property:
     <<
       \new Voice = "alternative" {
         \voiceOne
-        \times 2/3 {
+        \tuplet 3/2 {
           % show associations clearly.
-          \override NoteColumn #'force-hshift = #-3
+          \override NoteColumn.force-hshift = #-3
           f8 f g
         }
       }
@@ -2016,7 +2121,7 @@ text = \lyricmode {
           "It has two lines."
         }
       }
-      \vspace #0.1 % adds vertical spacing between verses
+      \combine \null \vspace #0.1 % adds vertical spacing between verses
       \line { \bold "3."
         \column {
           "This is verse three."
@@ -2032,7 +2137,7 @@ text = \lyricmode {
           "It has two lines."
         }
       }
-      \vspace #0.1 % adds vertical spacing between verses
+      \combine \null \vspace #0.1 % adds vertical spacing between verses
       \line { \bold "5."
         \column {
           "This is verse five."
@@ -2161,8 +2266,8 @@ etc.
 Choral music is usually notated on two, three or four staves within
 a @code{ChoirStaff} group.  Accompaniment, if required, is placed
 beneath in a @code{PianoStaff} group, which is usually reduced in
-size for @emph{a capella} choral works.  The notes for each vocal
-part are placed in a @code{Voice} context, with each staff
+size for rehearsal of @emph{a cappella} choral works.  The notes for
+each vocal part are placed in a @code{Voice} context, with each staff
 being given either a single vocal part (i.e., one @code{Voice}) or
 a pair of vocal parts (i.e., two @code{Voice}s).
 
@@ -2181,7 +2286,7 @@ the Learning Manual, see @rlearning{Four-part SATB vocal score}.
 @item
 Several templates suitable for various styles of choral music can
 also be found in the Learning Manual, see
-@rlearning{Vocal ensembles}.
+@rlearning{Vocal ensembles templates}.
 
 @item
 For information about @code{ChoirStaff} and @code{PianoStaff} see
@@ -2197,6 +2302,11 @@ the higher part will be directed up and those of the lower part
 down.  To do this, use @code{\voiceOne} and @code{\voiceTwo}.  See
 @ref{Single-staff polyphony}.
 
+@item
+When a vocal part temporarily splits, you should use
+@emph{Temporary polyphonic passages}
+(see @ref{Single-staff polyphony}).
+
 @end itemize
 
 @predefined
@@ -2207,7 +2317,7 @@ down.  To do this, use @code{\voiceOne} and @code{\voiceTwo}.  See
 @seealso
 Learning Manual:
 @rlearning{Four-part SATB vocal score},
-@rlearning{Vocal ensembles}.
+@rlearning{Vocal ensembles templates}.
 
 Notation Reference:
 @ref{Context layout order},
@@ -2287,8 +2397,8 @@ above their respective staves, as shown here:
   \layout {
     \context {
       \Score
-      \override DynamicText #'direction = #UP
-      \override DynamicLineSpanner #'direction = #UP
+      \override DynamicText.direction = #UP
+      \override DynamicLineSpanner.direction = #UP
     }
   }
 }
@@ -2499,7 +2609,7 @@ indicate each change.
   #`((instrumentTransposition . ,(ly:make-pitch -1 0 0))
      (shortInstrumentName . "Kas.")
      (clefGlyph . "clefs.G")
-     (clefOctavation . -7)
+     (clefTransposition . -7)
      (middleCPosition . 1)
      (clefPosition . -2)
      (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Kaspar"))
@@ -2509,11 +2619,11 @@ indicate each change.
   #`((instrumentTransposition . ,(ly:make-pitch 0 0 0))
      (shortInstrumentName . "Mel.")
      (clefGlyph . "clefs.F")
-     (clefOctavation . 0)
+     (clefTransposition . 0)
      (middleCPosition . 6)
      (clefPosition . 2)
      (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Melchior"))
-     (midiInstrument . "voice aahs"))
+     (midiInstrument . "choir aahs"))
 
 \relative c' {
   \instrumentSwitch "kaspar"
@@ -2568,7 +2678,7 @@ pianoRH = \relative c'' {
   % position name of cue-ing instrument just before the cue notes,
   % and above the staff
   \new CueVoice {
-    \override InstrumentSwitch #'self-alignment-X = #RIGHT
+    \override InstrumentSwitch.self-alignment-X = #RIGHT
     \set instrumentCueName = "Flute"
   }
   \cueDuring "flute" #UP { g4 bes4 }
@@ -2610,8 +2720,8 @@ pianoRH = \relative c'' {
   \transposition c'
   % position name of cue-ing instrument below the staff
   \new CueVoice {
-    \override InstrumentSwitch #'self-alignment-X = #RIGHT
-    \override InstrumentSwitch #'direction = #DOWN
+    \override InstrumentSwitch.self-alignment-X = #RIGHT
+    \override InstrumentSwitch.direction = #DOWN
     \set instrumentCueName = "Clar."
   }
   \cueDuring "clarinet" #DOWN { c4. g8 }
@@ -2745,8 +2855,8 @@ dialogue = \lyricmode {
 \score {
   <<
     \new Lyrics \with {
-      \override LyricText #'font-shape = #'italic
-      \override LyricText #'self-alignment-X = #LEFT
+      \override LyricText.font-shape = #'italic
+      \override LyricText.self-alignment-X = #LEFT
     }
     { \dialogue }
     \new Staff {
@@ -2812,7 +2922,7 @@ Chants often use quarter notes without stems to indicate the pitch,
 with the rhythm being taken from the spoken rhythm of the words.
 
 @lilypond[verbatim,quote]
-stemOff = { \override Staff.Stem #'transparent = ##t }
+stemOff = { \hide Staff.Stem }
 
 \relative c' {
   \stemOff
@@ -2903,9 +3013,9 @@ a4 b c2
 \bar "'"
 a4 b c2
 a4 b c2
-\bar ":"
+\bar ";"
 a4 b c2
-\bar "dashed"
+\bar "!"
 a4 b c2
 \bar "||"
 @end lilypond
@@ -2916,23 +3026,23 @@ modern.  This uses a modified @code{\breathe} mark:
 
 @lilypond[verbatim,quote]
 divisioMinima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-minima
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 divisioMaior = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maior
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 divisioMaxima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maxima
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 finalis = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::finalis
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+  \once \override BreathingSign.Y-offset = #0
   \breathe
 }
 
@@ -3046,8 +3156,7 @@ global = {
       \layout {
         \context {
           \Score
-          \override SpacingSpanner
-          #'base-shortest-duration = #(ly:make-moment 1 2)
+          \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
         }
         \context {
           \Staff
@@ -3079,7 +3188,7 @@ durations.
 @seealso
 Learning Manual:
 @rlearning{Visibility and color of objects},
-@rlearning{Vocal ensembles}.
+@rlearning{Vocal ensembles templates}.
 
 Notation Reference:
 @ref{Ancient notation},
@@ -3238,11 +3347,12 @@ The use of markup to center text, and arrange lines in columns is
 described in @ref{Formatting text}.
 
 Most of these elements are shown in one or other of the two verses
-in the template, see @qq{Psalms} in @rlearning{Vocal ensembles}.
+in the template, see @rlearning{Psalms}.
 
 @seealso
 Learning Manual:
-@rlearning{Vocal ensembles}.
+@rlearning{Psalms},
+@rlearning{Vocal ensembles templates}.
 
 Notation Reference:
 @ref{Fonts},
index dfb0d585ffe2a1dfcafca335e57506837421dd72..64fee0f3ca3bfb03406e0b8bf1873f3c82788fbf 100644 (file)
@@ -57,7 +57,7 @@ Other aspects of musical notation that can apply to wind instruments:
 @itemize
 @item Many wind instruments are transposing instruments, see
 @ref{Instrument transpositions}.
-@item The slide glissando are characteristic of the trombone, but other
+@item Slide glissandi are characteristic of the trombone, but other
 winds may perform keyed or valved glissandi.  See @ref{Glissando}.
 @item Harmonic series glissandi, which are possible on all brass
 instruments but common for French Horns, are usually written out as
diff --git a/Documentation/pictures/BadLog.png b/Documentation/pictures/BadLog.png
new file mode 100755 (executable)
index 0000000..ce95e98
Binary files /dev/null and b/Documentation/pictures/BadLog.png differ
diff --git a/Documentation/pictures/BadLog2.png b/Documentation/pictures/BadLog2.png
new file mode 100755 (executable)
index 0000000..2be3b29
Binary files /dev/null and b/Documentation/pictures/BadLog2.png differ
diff --git a/Documentation/pictures/DragDrop.png b/Documentation/pictures/DragDrop.png
new file mode 100755 (executable)
index 0000000..e67b947
Binary files /dev/null and b/Documentation/pictures/DragDrop.png differ
diff --git a/Documentation/pictures/EditFile.png b/Documentation/pictures/EditFile.png
new file mode 100755 (executable)
index 0000000..747ecad
Binary files /dev/null and b/Documentation/pictures/EditFile.png differ
diff --git a/Documentation/pictures/FileSave.png b/Documentation/pictures/FileSave.png
new file mode 100755 (executable)
index 0000000..8d91121
Binary files /dev/null and b/Documentation/pictures/FileSave.png differ
index 0254c26d0ba2169265cce1dfd0ec9491a870a4c4..131de3e32383b152b7a9fb22925544fc58f20153 100644 (file)
@@ -1,14 +1,10 @@
 depth = ../..
 
-SUBDIRS = pdf
-
 BITMAP_IMAGES = $(call src-wildcard,*.png) $(call src-wildcard,*.jpg)
 EPS_ILLUSTRATIONS = $(call src-wildcard,*.eps)
 SVG_FILES = $(call src-wildcard,*.svg)
 PDF_DIR = $(call src-wildcard,pdf/*.pdf)
 
-EXTRA_DIST_FILES = $(BITMAP_IMAGES) $(EPS_ILLUSTRATIONS) $(SVG_FILES)
-
 OUT_PDF_IMAGES = $(EPS_ILLUSTRATIONS:%.eps=$(outdir)/%.pdf)
 OUT_BITMAP_IMAGES = $(BITMAP_IMAGES:%=$(outdir)/%)
 OUT_BITMAP_IMAGES += $(EPS_ILLUSTRATIONS:%.eps=$(outdir)/%.png)
@@ -45,5 +41,5 @@ $(outdir)/%.png: %.eps
        gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit
 
 $(outdir)/%.pdf: %.eps
-       gs -dAutoRotatePages=/None -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $<
+       gs -dAutoRotatePages=/None -q -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ -dEPSCrop -c .setpdfwrite -f $<
 
diff --git a/Documentation/pictures/GenPDF.png b/Documentation/pictures/GenPDF.png
new file mode 100755 (executable)
index 0000000..8030910
Binary files /dev/null and b/Documentation/pictures/GenPDF.png differ
index 6bafc25a9d771b162ac80071e8e4de5ebb9af472..070ff0c64158848201571adc186b8b37ec50beb3 100644 (file)
Binary files a/Documentation/pictures/Gonville_after.png and b/Documentation/pictures/Gonville_after.png differ
index ef810fdda947b0bed727157ef555cde456b2fc28..9f0b3947ddc650ee1f3466b9f48c5a7a4b0d5f63 100644 (file)
Binary files a/Documentation/pictures/Gonville_before.png and b/Documentation/pictures/Gonville_before.png differ
index 3ad433f35f7a21b3721e624a0acb286c2817dfd7..2d21a2140c6e2ac80c9f5288a43990ee3d99688f 100644 (file)
Binary files a/Documentation/pictures/Learning_Macos_Compiling_log.png and b/Documentation/pictures/Learning_Macos_Compiling_log.png differ
index 4bfcbcb3315e6a60e0b4ae08f8931c6a12b8fe4c..e0c464fb22fbb62d08e5d8037f7dde074371dfdf 100644 (file)
Binary files a/Documentation/pictures/Learning_Macos_New_menu.png and b/Documentation/pictures/Learning_Macos_New_menu.png differ
index 3aefbc94c59597a33ec07a15d945eb90acd01aed..6c67f7d75f7c9b44e0ce8831e7e988d9c27df170 100644 (file)
Binary files a/Documentation/pictures/Learning_Macos_Open_Dialog_box.png and b/Documentation/pictures/Learning_Macos_Open_Dialog_box.png differ
index 7da0f54ce25f309203a580eed316db861598786e..e369df360a1f3fa5d09ad6f7d0811f10435720ab 100644 (file)
Binary files a/Documentation/pictures/Learning_Macos_Open_menu.png and b/Documentation/pictures/Learning_Macos_Open_menu.png differ
index 7a11e856f8a26c07de58663669d7b710dadb58e7..e594ea2bd1d4994fb489bcf174fcd3918f423389 100644 (file)
Binary files a/Documentation/pictures/Learning_Macos_Save_file_with_name.png and b/Documentation/pictures/Learning_Macos_Save_file_with_name.png differ
index 7fd05094486e57d60181c61b8a2c8d3042f556f1..6f51c4e5030481ef4696bf12de2674bd3af73be7 100644 (file)
Binary files a/Documentation/pictures/Learning_Macos_Save_menu.png and b/Documentation/pictures/Learning_Macos_Save_menu.png differ
index ed8924450596f77e9ce6fcc72eddfeedd770bed9..2fbc94b91a7d5bb179edc4e0529ad7d9db476e14 100644 (file)
Binary files a/Documentation/pictures/Learning_Macos_Typeset_menu.png and b/Documentation/pictures/Learning_Macos_Typeset_menu.png differ
index cba71447f477c85aab9e96edabb84d7d2b517348..560d7b0365b75e754d6a339eb1b938fdbb6fb608 100644 (file)
Binary files a/Documentation/pictures/Learning_Macos_pdf_output.png and b/Documentation/pictures/Learning_Macos_pdf_output.png differ
index f37ea9a95b8ee1d85b084da1ec0cee294d3efc56..e99a1de43ce43e218e90920490bd53f3fce2d9a1 100644 (file)
Binary files a/Documentation/pictures/Learning_Macos_welcome.png and b/Documentation/pictures/Learning_Macos_welcome.png differ
diff --git a/Documentation/pictures/Learning_Win7_All_Files_Created.png b/Documentation/pictures/Learning_Win7_All_Files_Created.png
deleted file mode 100644 (file)
index f33cd81..0000000
Binary files a/Documentation/pictures/Learning_Win7_All_Files_Created.png and /dev/null differ
diff --git a/Documentation/pictures/Learning_Win7_Log_File.png b/Documentation/pictures/Learning_Win7_Log_File.png
deleted file mode 100644 (file)
index 642ac78..0000000
Binary files a/Documentation/pictures/Learning_Win7_Log_File.png and /dev/null differ
diff --git a/Documentation/pictures/Learning_Win7_New_Menu.png b/Documentation/pictures/Learning_Win7_New_Menu.png
deleted file mode 100644 (file)
index 8946ec1..0000000
Binary files a/Documentation/pictures/Learning_Win7_New_Menu.png and /dev/null differ
diff --git a/Documentation/pictures/Learning_Win7_Open_Context_Menu.png b/Documentation/pictures/Learning_Win7_Open_Context_Menu.png
deleted file mode 100644 (file)
index 19c5db3..0000000
Binary files a/Documentation/pictures/Learning_Win7_Open_Context_Menu.png and /dev/null differ
diff --git a/Documentation/pictures/Learning_Win7_Open_Dragndrop.png b/Documentation/pictures/Learning_Win7_Open_Dragndrop.png
deleted file mode 100644 (file)
index 1e7fc8e..0000000
Binary files a/Documentation/pictures/Learning_Win7_Open_Dragndrop.png and /dev/null differ
diff --git a/Documentation/pictures/Learning_Win7_Open_Menu.png b/Documentation/pictures/Learning_Win7_Open_Menu.png
deleted file mode 100644 (file)
index c81dee5..0000000
Binary files a/Documentation/pictures/Learning_Win7_Open_Menu.png and /dev/null differ
diff --git a/Documentation/pictures/Learning_Win7_Pdf_Output.png b/Documentation/pictures/Learning_Win7_Pdf_Output.png
deleted file mode 100644 (file)
index c007685..0000000
Binary files a/Documentation/pictures/Learning_Win7_Pdf_Output.png and /dev/null differ
diff --git a/Documentation/pictures/Learning_Win7_Save_File_With_Name.png b/Documentation/pictures/Learning_Win7_Save_File_With_Name.png
deleted file mode 100644 (file)
index 2ecf46c..0000000
Binary files a/Documentation/pictures/Learning_Win7_Save_File_With_Name.png and /dev/null differ
diff --git a/Documentation/pictures/Learning_Win7_Save_Menu.png b/Documentation/pictures/Learning_Win7_Save_Menu.png
deleted file mode 100644 (file)
index e261abf..0000000
Binary files a/Documentation/pictures/Learning_Win7_Save_Menu.png and /dev/null differ
diff --git a/Documentation/pictures/Learning_Win7_Welcome_File_Whole.png b/Documentation/pictures/Learning_Win7_Welcome_File_Whole.png
deleted file mode 100644 (file)
index 3dd588d..0000000
Binary files a/Documentation/pictures/Learning_Win7_Welcome_File_Whole.png and /dev/null differ
diff --git a/Documentation/pictures/LilyPad.png b/Documentation/pictures/LilyPad.png
new file mode 100755 (executable)
index 0000000..5a9e976
Binary files /dev/null and b/Documentation/pictures/LilyPad.png differ
index f766063fa5aff4db4f9fe017e41c426cd61b22cc..03b740694dd46065e5bdb70b058db22899a252d9 100644 (file)
Binary files a/Documentation/pictures/OpusAndFeta.png and b/Documentation/pictures/OpusAndFeta.png differ
diff --git a/Documentation/pictures/PDFRead.png b/Documentation/pictures/PDFRead.png
new file mode 100755 (executable)
index 0000000..aaa1175
Binary files /dev/null and b/Documentation/pictures/PDFRead.png differ
diff --git a/Documentation/pictures/SaveAs.png b/Documentation/pictures/SaveAs.png
new file mode 100755 (executable)
index 0000000..ead5d0d
Binary files /dev/null and b/Documentation/pictures/SaveAs.png differ
index dac7f63eb79dd9c2d787b8dee0df435b89070b89..202cf8bd31afb91550293790cf252f1d4fad8c99 100644 (file)
Binary files a/Documentation/pictures/background-image.png and b/Documentation/pictures/background-image.png differ
index 06be5138ad7b065b1bc7db01d1b46e8e7f33acf5..dbc399efe3622a2bb2ff9de1d45e69825d31a257 100644 (file)
Binary files a/Documentation/pictures/baer-sarabande-hires.png and b/Documentation/pictures/baer-sarabande-hires.png differ
index fa14958da304381b696601299350a6e0eeee153e..2db728c41057ad25ca72bae28cd9adf36aca4646 100644 (file)
Binary files a/Documentation/pictures/baer-sarabande.png and b/Documentation/pictures/baer-sarabande.png differ
index e2ccd60b48d785f4580423b33ab5da192bca42e4..bff34bb79389e60a254986b3be5bd4df781e5ae2 100644 (file)
Binary files a/Documentation/pictures/baer-suite1-fullpage-hires.png and b/Documentation/pictures/baer-suite1-fullpage-hires.png differ
index 494f6e0294ba774e2dbfcb60245367040f4f1a7b..537ab64cbec726a934334fd792ae980d7113bf50 100644 (file)
Binary files a/Documentation/pictures/baer-suite1-fullpage.png and b/Documentation/pictures/baer-suite1-fullpage.png differ
index d94ac32de665e350bf898fee0994d03a500d4e3d..ee43975040ef0ef1dd043afd14b510f20135049a 100644 (file)
Binary files a/Documentation/pictures/baer-suite1-line.png and b/Documentation/pictures/baer-suite1-line.png differ
index cfe0bcfaf2425d9f0d00a5440c0b958ca41ba5ff..420f14bc27d3c967327dd20b42d2b9986319781c 100644 (file)
Binary files a/Documentation/pictures/bench-morgenlied.png and b/Documentation/pictures/bench-morgenlied.png differ
index c4506abac8acc0e45526b3d61e6cf073fede5fde..044a494ce86e0dd279633b39ad41bc250453fabc 100644 (file)
Binary files a/Documentation/pictures/bwv861-baer-alt-small.png and b/Documentation/pictures/bwv861-baer-alt-small.png differ
index b13577a72d3b3aee6e18c26d5e49864c72a5756d..bc02b64e05099882a9f6e54788903d450e95832b 100644 (file)
Binary files a/Documentation/pictures/bwv861-baer-alt.png and b/Documentation/pictures/bwv861-baer-alt.png differ
index 1ceea362861473e9e58ef24c4d4b27440dad735b..ee828f9f06f44c158827ff415e33920a23900210 100644 (file)
Binary files a/Documentation/pictures/bwv861-baer-small.png and b/Documentation/pictures/bwv861-baer-small.png differ
index 229155c84c0e3ab0863ff6f29846375da2a7c7c7..b592213a91372f86db94e77704cd09274c92aa56 100644 (file)
Binary files a/Documentation/pictures/bwv861-baer.png and b/Documentation/pictures/bwv861-baer.png differ
index 00f873f72c57904d9f746eec6aa555c410b8b575..e13ae4997575249444148d36112cc85aaf3689e2 100644 (file)
Binary files a/Documentation/pictures/bwv861-breitkopf-small.png and b/Documentation/pictures/bwv861-breitkopf-small.png differ
index 797b4086ca603c90bd2b4af467d3088468df5dfe..9b3284a897b669f38df9f4f80a097f7588018582 100644 (file)
Binary files a/Documentation/pictures/bwv861-breitkopf.png and b/Documentation/pictures/bwv861-breitkopf.png differ
index cdf4da71f00184800c39f0f0e4cb99b61ace8f71..a2be64bd50fa2a9ee0082c7e2a86cd61adf5cdf1 100644 (file)
Binary files a/Documentation/pictures/bwv861-finale2008a.png and b/Documentation/pictures/bwv861-finale2008a.png differ
index 848e260b8ed01e2b979296fa9fd40dd84c4047ab..c55920e8993802aeba1b3ca342564febc053938c 100644 (file)
Binary files a/Documentation/pictures/bwv861-gessellschaft-small.png and b/Documentation/pictures/bwv861-gessellschaft-small.png differ
index 7fc73903b04e2cf1a5421fda076c88ab0084d898..5e03aec5fe7fb9655a16fd6b80e13e3f7c60423b 100644 (file)
Binary files a/Documentation/pictures/bwv861-gessellschaft.png and b/Documentation/pictures/bwv861-gessellschaft.png differ
index 3933f3f2135104748f76a927a04adaa838b7cd41..9a25ca95de36f2dcd0b2856d5ca5d71a6b68242d 100644 (file)
Binary files a/Documentation/pictures/bwv861mm28-29.png and b/Documentation/pictures/bwv861mm28-29.png differ
index 506601e6cbff4073baa0fc0f71e38478de6f657c..6fd08686e883372e24d273e79d9dec004b7426a7 100644 (file)
Binary files a/Documentation/pictures/bwv861mm33-34-annotate.png and b/Documentation/pictures/bwv861mm33-34-annotate.png differ
index f1bffb449535740b97f956388ddc63f6cf8b6225..371d8e0f6b9bbfef6d160a8067420fbe4905fab8 100644 (file)
Binary files a/Documentation/pictures/bwv861mm33-34.png and b/Documentation/pictures/bwv861mm33-34.png differ
index e91e80dc6797cafa17ea06f1ae5ec1f4d89707be..37b464ae4a32dc27fd5f59c744d5b0af1e3e3047 100644 (file)
Binary files a/Documentation/pictures/color1-active.png and b/Documentation/pictures/color1-active.png differ
index 187579954bf99cf6bda2310e5651dd0a65b7ce72..cb80c402071486bb4eb551796f9d4c9fc7112d31 100644 (file)
Binary files a/Documentation/pictures/color1-bg.png and b/Documentation/pictures/color1-bg.png differ
index 1bc51a9e2bae9ac5340209133a21403f2366666a..8f6ac576f7e71514d9a5240bf23629015fefb3bd 100644 (file)
Binary files a/Documentation/pictures/color2-active.png and b/Documentation/pictures/color2-active.png differ
index 4eeb9cba9b9ffd6d83f6f1c86ceddefad7e53610..154b365f8aa5a4c5d38d18a1bbbc145f5b44e328 100644 (file)
Binary files a/Documentation/pictures/color2-bg.png and b/Documentation/pictures/color2-bg.png differ
index 71ae3ea5ab7dc2b7b33d74330808553f64d0c33c..3232bce7b6d13b9eee6e07cb10876140d65028e5 100644 (file)
Binary files a/Documentation/pictures/color2-hover.png and b/Documentation/pictures/color2-hover.png differ
index ceefd4b18c9d937abc5667e8c7574df8c3bf1a95..b2aed09810615330472082b75eaa0d2cf1d706cf 100644 (file)
Binary files a/Documentation/pictures/color3-active.png and b/Documentation/pictures/color3-active.png differ
index 2fcc56be068b06ec9e6ec336c9fccaceb6d4c6b7..ab2134fd7e266a8efb72a576780aa52b8e1b790c 100644 (file)
Binary files a/Documentation/pictures/color3-bg.png and b/Documentation/pictures/color3-bg.png differ
index c692715efdccc6323fd648c12dd56e66f2ee2d77..b070274ad18299e79a15715b3cc947550a13e554 100644 (file)
Binary files a/Documentation/pictures/color3-hover.png and b/Documentation/pictures/color3-hover.png differ
index 0046c0e18a3686366715cf27ee6351e0854ac59e..0daee7f7064acb94702bdfb5fca6509ee06cd8b9 100644 (file)
Binary files a/Documentation/pictures/color4-active.png and b/Documentation/pictures/color4-active.png differ
index ff7ee3512edcf7eceb0b5c091b34b4bcf6d07299..d71b3d91ce5061f389387dd80b40aadf505b6d9f 100644 (file)
Binary files a/Documentation/pictures/color4-bg.png and b/Documentation/pictures/color4-bg.png differ
index 7bdb50b6b734aa0f85b813812043111b4167eb78..9d48f2898c64577ff8b5129de384750d77013856 100644 (file)
Binary files a/Documentation/pictures/double-lily-modified3.png and b/Documentation/pictures/double-lily-modified3.png differ
index 449d7edaa880cfbb309fc338a46c1f082bc33547..61c7c842f5d5706d8ac383c3310e2cd55be0421b 100644 (file)
Binary files a/Documentation/pictures/engraver-noteheads.png and b/Documentation/pictures/engraver-noteheads.png differ
index dc2b2e6512552e880a30209dc6872e11585a2f1d..57c931882e703bf4ca2688ff0ed5464f0ebce746 100644 (file)
Binary files a/Documentation/pictures/engraver-score.png and b/Documentation/pictures/engraver-score.png differ
index 36707ddf93bec51f699e62078bd6b157d22030f4..79c2c5c51b82e5d6098b9de2cfca3b9242446b9a 100644 (file)
Binary files a/Documentation/pictures/finale-sarabande-full.png and b/Documentation/pictures/finale-sarabande-full.png differ
index 80507a4224d9beb516e7289163211da5fb293cb0..e327a16e46debbb7d71f0aa396cefd36fc6dd2cc 100644 (file)
Binary files a/Documentation/pictures/flat-design.png and b/Documentation/pictures/flat-design.png differ
index 37fed95b73cb9052cd717111cb6ae5422a7eac3e..36a777e1bd9bca679822b34f1788c8c4edbb494b 100644 (file)
Binary files a/Documentation/pictures/frescobaldi-lilypond-editor-small.png and b/Documentation/pictures/frescobaldi-lilypond-editor-small.png differ
index 7edcfc0791f53448d8a9f8d1457d714adb2ae639..7f465c84d53120660e6ade0138ef9b2e9c9ede4b 100644 (file)
Binary files a/Documentation/pictures/frescobaldi-lilypond-editor.png and b/Documentation/pictures/frescobaldi-lilypond-editor.png differ
index 6687b1c538c96329ed8af1e9deccc19ce258daf1..f1a6caadc0405caf36089414b4aac45fd0fcf942 100644 (file)
Binary files a/Documentation/pictures/hader-collage.png and b/Documentation/pictures/hader-collage.png differ
index a6d66503d4131e1025b1c23b725d02980e5663ba..5369c725e574ca8f00f6b298ef4f521015b45c26 100644 (file)
Binary files a/Documentation/pictures/hader-slaan.png and b/Documentation/pictures/hader-slaan.png differ
index 184b2f03977bc858a0103f6369cc111fffe64934..2d7bcf50023c385ec4d843fdd153486ebfc74ab6 100644 (file)
Binary files a/Documentation/pictures/henle-ledger.png and b/Documentation/pictures/henle-ledger.png differ
index 44ac2f110159275b6213cbae9978af6bf7025d6b..77ac137b0a3abc97cf5e72af3b14777d4d02f1a1 100644 (file)
Binary files a/Documentation/pictures/henle-suite1-fullpage-hires.png and b/Documentation/pictures/henle-suite1-fullpage-hires.png differ
index 75ffa117910a1578d7029457b0fb5f914a5f374b..d2eacacd3e25b32a4219782784f081c919f1b525 100644 (file)
Binary files a/Documentation/pictures/henle-suite1-fullpage.png and b/Documentation/pictures/henle-suite1-fullpage.png differ
index fc6a2647857c7bd3e40fe2a9b85a72a0c7ca483b..e8d78988fff91b3fb5464a02592b9551559ce22a 100644 (file)
Binary files a/Documentation/pictures/henle-suite1-line.png and b/Documentation/pictures/henle-suite1-line.png differ
index 7e691a76aaf6b1c63f59e483bd0af3f3b41c9242..1b7bfb1b0f400c96ea57e219346ce5341f7d7389 100644 (file)
Binary files a/Documentation/pictures/lelie.png and b/Documentation/pictures/lelie.png differ
index e9400ed92f7423eab3913beffebd1ca5b6af65b4..f3fe2f237c3e95c1d8604b17831e3881fa5aa346 100644 (file)
Binary files a/Documentation/pictures/lily-home-nav-active.png and b/Documentation/pictures/lily-home-nav-active.png differ
index 9032c8384a38b7858cc7f0dbd73d471243fd1e93..9a3e4e8c41113f109282f018931fc6b582ff4120 100644 (file)
Binary files a/Documentation/pictures/lily-home-nav-bg.png and b/Documentation/pictures/lily-home-nav-bg.png differ
index 954a8074f6f7271d1fe73ddc700c1d42fc6d4b84..aaf1c2e10346ad552833e6babab633e08028cba3 100644 (file)
Binary files a/Documentation/pictures/lily-home-nav-hover.png and b/Documentation/pictures/lily-home-nav-hover.png differ
index ce4dcc4150a10943da9cfcac0bff175cdc7dda42..ad37906e2d9a27d41cb898f8cafc5c1079ec2798 100644 (file)
Binary files a/Documentation/pictures/lily-ledger.png and b/Documentation/pictures/lily-ledger.png differ
index 8879ccf8dc1b89335beb4ee8047fe0dc8ea8b359..bf00309d2762758d434e29f97e8efe82333da072 100644 (file)
Binary files a/Documentation/pictures/lily14-sarabande-annotated-hires.png and b/Documentation/pictures/lily14-sarabande-annotated-hires.png differ
index 98769d7584e1b83b78f8d4319eae5da71eca6262..6ccc0a1032f10ed311694cb3db1cb4599dad09e0 100644 (file)
Binary files a/Documentation/pictures/lily14-sarabande-annotated.png and b/Documentation/pictures/lily14-sarabande-annotated.png differ
index f114f12d07650c25ac9a3287fa0b85c8a2f10f13..2dffeb53b8ba9ec09d5c08533a8e31d2c138afa6 100644 (file)
Binary files a/Documentation/pictures/lily14-sarabande-correct.png and b/Documentation/pictures/lily14-sarabande-correct.png differ
index 755f9bce653e00fc6b617e864611e3829a1ec120..2465ac1dbb3c4e219ec98adb1f0aebc52b8dd3d1 100644 (file)
Binary files a/Documentation/pictures/lily14-sarabande-hires.png and b/Documentation/pictures/lily14-sarabande-hires.png differ
index 64813732daa6e4df9fad2dddcf202613f39689e5..d1994909fbc438c9f8ffa4f74acf6a49eba6d354 100644 (file)
Binary files a/Documentation/pictures/lily17-sarabande.png and b/Documentation/pictures/lily17-sarabande.png differ
index 5e31316b885fc8b39bfee9f5973f5e425d572585..41f29b897f248c422b19d84bf3c0d2e26e0c22d6 100644 (file)
Binary files a/Documentation/pictures/lilykde-screenshot-small.png and b/Documentation/pictures/lilykde-screenshot-small.png differ
index 33fdbb3d3ecb887bb6540a7d593b7371f11e4227..20ad28082750cd646cf60736e51001ef6afc26ee 100644 (file)
Binary files a/Documentation/pictures/lilykde-screenshot.png and b/Documentation/pictures/lilykde-screenshot.png differ
index cd05bd912f3d7005f5e063bd2df777df0df4f00b..113940fe8301e242f8b8b4c88f6c55bad7d0f194 100644 (file)
Binary files a/Documentation/pictures/lilypond-book.png and b/Documentation/pictures/lilypond-book.png differ
index b15aaffc16abefcd79f562cb19fdd02901deede9..9011661cea4ebd6219271738cd2116271bb5a6b1 100644 (file)
Binary files a/Documentation/pictures/lilypondtool-2.12-screenshot-400wide.png and b/Documentation/pictures/lilypondtool-2.12-screenshot-400wide.png differ
index ab2cb0e65562b915ead91b4b25be392f5959b8e6..2c4b71489c0f38a628bf0fcbeb104f2c13f518ab 100644 (file)
Binary files a/Documentation/pictures/lilypondtool-2.12-screenshot.png and b/Documentation/pictures/lilypondtool-2.12-screenshot.png differ
index b30937c581508a58bd8b0a2bb23f1509d7c56f28..edfe1bf1352ca3de47fcb86a12f235d78ac8f04e 100644 (file)
Binary files a/Documentation/pictures/logo-linux.png and b/Documentation/pictures/logo-linux.png differ
index 01765f8b68bf83fde64280292b22f4ba5ab9a0d7..749f9ee925ef20e178263944bf274cd2e5d9fab4 100644 (file)
Binary files a/Documentation/pictures/logo-slackware.png and b/Documentation/pictures/logo-slackware.png differ
index dba0cd17109a0a54ef0a22a85aa21d89fd64a836..a678b6dfaadae255da0edd5c902690eeade28ea6 100644 (file)
Binary files a/Documentation/pictures/logo-suse.png and b/Documentation/pictures/logo-suse.png differ
index bb9d0de4ffd848f60fbebdab579d9c716a6398aa..b7b14254b807671da0c5c15f7a14ca23f63164b4 100644 (file)
Binary files a/Documentation/pictures/logo-ubuntu.png and b/Documentation/pictures/logo-ubuntu.png differ
index d915c654e74d61aa8e992fe8b136d64b36f172cc..9f869b15fd0709de80daebd7fa324c9608a54029 100644 (file)
Binary files a/Documentation/pictures/logo-windows.png and b/Documentation/pictures/logo-windows.png differ
index f71d7924b7ee4797a68c2c2998573345349df769..a6d8ba61c578728cf82ad9be31beb7643a859df4 100644 (file)
Binary files a/Documentation/pictures/morgenlied-crop-2.png and b/Documentation/pictures/morgenlied-crop-2.png differ
index 7c51ebf21b1cfdcceb94f7d55aa25df1e5ec8485..b0df9970b82ae9e1752702e76219f33031267f04 100644 (file)
Binary files a/Documentation/pictures/morgenlied-ly-crop2.png and b/Documentation/pictures/morgenlied-ly-crop2.png differ
index 112c406a7a10af874ef7d56bddda038f806271e5..18f7ea98309ba437e45756940091927329c8de9f 100644 (file)
Binary files a/Documentation/pictures/naive-notation.png and b/Documentation/pictures/naive-notation.png differ
index 65e68e29743265476c69c13b464782f912d6ea9b..af41a69eafefef3ad308347a4b04d2b4e58e788e 100644 (file)
Binary files a/Documentation/pictures/nav-active-2.png and b/Documentation/pictures/nav-active-2.png differ
index 8deb6cf0f0c4e26340a2908d21cee3110a807d8e..2ef6477b0f495abc4927acc3966d7cf142bf487e 100644 (file)
Binary files a/Documentation/pictures/nav-active.png and b/Documentation/pictures/nav-active.png differ
index f368e918697cae4e60e96a969d206a7478ae16dd..e1ce8278f13bf173e8226a52a6cc7bdd836bc489 100644 (file)
Binary files a/Documentation/pictures/nav-bg-2.png and b/Documentation/pictures/nav-bg-2.png differ
index 6f05e45f768caeadaff445dfc329f3dd2fa8494b..b893d07b1a1a0b6b323ca0f7656dca379da58068 100644 (file)
Binary files a/Documentation/pictures/nav-bg.png and b/Documentation/pictures/nav-bg.png differ
index 09f1cb69d22a5eeeff771c4007db41ef667ed4f8..84c436badfdbb1d5eae875d24cc55c05efb808d0 100644 (file)
Binary files a/Documentation/pictures/nav-hover-2.png and b/Documentation/pictures/nav-hover-2.png differ
index c368525182bfaad2140df7b2becfca1bd68724ec..3213900699a8b2edab65e876186aecb446abebc5 100644 (file)
Binary files a/Documentation/pictures/nav-hover.png and b/Documentation/pictures/nav-hover.png differ
index 1e09a8e91b533bf7633fea8ef8656b33adaa9b5f..2076152ecffb6badc467293cfe8bfb97db05b8c6 100644 (file)
Binary files a/Documentation/pictures/nereid-shot-small.png and b/Documentation/pictures/nereid-shot-small.png differ
index 138c2db9e12b07c44abfc1fa53b67d5cb2e5b481..7fbfe18dbe0f1de5fba70f1a25440e9156417fd9 100644 (file)
Binary files a/Documentation/pictures/nereid-shot.png and b/Documentation/pictures/nereid-shot.png differ
index 1026928ccb243b25b0073484d42acf082a661fcf..ab2416fbf18c07a932e0b8bf8f05eab7e7b242f5 100644 (file)
Binary files a/Documentation/pictures/nonnaive-notation.png and b/Documentation/pictures/nonnaive-notation.png differ
diff --git a/Documentation/pictures/pdf/GNUmakefile b/Documentation/pictures/pdf/GNUmakefile
deleted file mode 100644 (file)
index 72ac2bc..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-depth = ../../..
-
-PDF_FILES = $(call src-wildcard,*.pdf)
-
-EXTRA_DIST_FILES = $(PDF_FILES)
-
-STEPMAKE_TEMPLATES = documentation
-
-include $(depth)/make/stepmake.make
-
-default:
-
index 4bc8d8480d69f2886ca13906618edf1193c29bdc..72936972602959cdc9291ec9317e2fb42a785274 100644 (file)
Binary files a/Documentation/pictures/screenshot-denemo-small.png and b/Documentation/pictures/screenshot-denemo-small.png differ
index 0ed28cd4fd126122c0a79ceec372814282b83beb..f880fc08c411f0c576c292edea7424e505bbd13d 100644 (file)
Binary files a/Documentation/pictures/screenshot-denemo.png and b/Documentation/pictures/screenshot-denemo.png differ
index f7110941cae8ad739f33555b0203b98300652da0..f0b08a3fdca75f6349c56e0e2b828d4c2e2334ff 100644 (file)
Binary files a/Documentation/pictures/simple-notation.png and b/Documentation/pictures/simple-notation.png differ
index 9c7fa542435ae9bb26292b67c9b27b19b1a2d4f8..18962932d8896002bcae94c062e897c5d558a70f 100644 (file)
Binary files a/Documentation/pictures/stone-distance.png and b/Documentation/pictures/stone-distance.png differ
index ce17d3867183218e5b19fbc53e7942bafbee330d..a9553ecd9b29c90e75b9b2dc14c06baf3b7b5377 100644 (file)
Binary files a/Documentation/pictures/text-input-1-annotate-hu.png and b/Documentation/pictures/text-input-1-annotate-hu.png differ
index 9c5583cea309ddca0b66f414dfc3b6ea88bd6c76..4d7610d41cd62fd45c7c23192338cc0a6138a2fe 100644 (file)
Binary files a/Documentation/pictures/text-input-1-annotate-it.png and b/Documentation/pictures/text-input-1-annotate-it.png differ
index 3a8c3d81461d5fca631fca2658e5ac5f745c0171..d43d590851b1e5126b86f8d5ae0eaf24c4574842 100644 (file)
Binary files a/Documentation/pictures/text-input-1-annotate-nl.png and b/Documentation/pictures/text-input-1-annotate-nl.png differ
index 600c5e5c942df9c4785270a6894b931328566e4f..70eafb34e6abdf311e96777fd4f655609463cffd 100644 (file)
Binary files a/Documentation/pictures/text-input-2-annotate-hu.png and b/Documentation/pictures/text-input-2-annotate-hu.png differ
index 6966dfd677b4a789ac3b8b5ec472ae8c8ef5aece..ee6f461634d6731a417a2baa84c94ec71545deea 100644 (file)
Binary files a/Documentation/pictures/text-input-2-annotate-it.png and b/Documentation/pictures/text-input-2-annotate-it.png differ
index 2d9dcf148b9caede957a88013c8b46d9cd867ce2..61457833d5ad778e3b62117575d29961335c233b 100644 (file)
Binary files a/Documentation/pictures/text-input-2-annotate-nl.png and b/Documentation/pictures/text-input-2-annotate-nl.png differ
index a734abaaae420f8264ac15675c112ff4c4c696eb..8019e584fe11bc0438cca1187df0936543946aef 100644 (file)
Binary files a/Documentation/pictures/text-input-parts-both-annotate-hu.png and b/Documentation/pictures/text-input-parts-both-annotate-hu.png differ
index bf8de6f8909644b9ba523f077dc8eaa62c8e5e60..7c5993d2bb670c03b9764f2c7b89eddef955cc82 100644 (file)
Binary files a/Documentation/pictures/text-input-parts-both-annotate-it.png and b/Documentation/pictures/text-input-parts-both-annotate-it.png differ
index 82e0fc00b15a572d92615ece4d0d41db50d63e25..830690c1374e797f212ac39ae13a75012d5c677b 100644 (file)
Binary files a/Documentation/pictures/text-input-parts-both-annotate-nl.png and b/Documentation/pictures/text-input-parts-both-annotate-nl.png differ
index 6608579a08972533149c525543b3e01ff58d38b0..cf0b96abaccfb66006380926367219b7952f2acf 100644 (file)
Binary files a/Documentation/pictures/text-input-parts-single-annotate-hu.png and b/Documentation/pictures/text-input-parts-single-annotate-hu.png differ
index 4ec32414c9b1161f9455a847a0aaceb6072e696d..082ea5bd293a176aa43c54fbb1b7023d655efd49 100644 (file)
Binary files a/Documentation/pictures/text-input-parts-single-annotate-it.png and b/Documentation/pictures/text-input-parts-single-annotate-it.png differ
index 650417083295e210076b5d7203dd0e66d1cfa323..751d230968921b970ac85637a800690a389b6b4c 100644 (file)
Binary files a/Documentation/pictures/text-input-parts-single-annotate-nl.png and b/Documentation/pictures/text-input-parts-single-annotate-nl.png differ
index 51e5140c9c10710abf8c90d5d51132b28c8778fc..f261b0d9c695d9c6854416bb669ab4acf18c6c1f 100644 (file)
Binary files a/Documentation/pictures/text-input-pop-annotate-hu.png and b/Documentation/pictures/text-input-pop-annotate-hu.png differ
index 1e051271aff3aed244c22f6cf5741a089601c475..26376de6278b598fd7e3d4d05b543f07a1d066d4 100644 (file)
Binary files a/Documentation/pictures/text-input-pop-annotate-it.png and b/Documentation/pictures/text-input-pop-annotate-it.png differ
index a418c5f41ef3e8882bdc71383ae2bb8b669ecbf4..0b4740319cf2cc4fd86fdf4a709c0f435f5343e5 100644 (file)
Binary files a/Documentation/pictures/text-input-pop-annotate-nl.png and b/Documentation/pictures/text-input-pop-annotate-nl.png differ
index b599e1f8d1129528f37578febdcf12962159a60f..1e498c721f0090b8b0fed5f3a32ff598e847ecbb 100644 (file)
Binary files a/Documentation/pictures/text-input-score-annotate-hu.png and b/Documentation/pictures/text-input-score-annotate-hu.png differ
index a43c8b362eb30187a8395e8a7a094b44730234bc..2a7e31bb4219db598022e55705821241e6e7cc36 100644 (file)
Binary files a/Documentation/pictures/text-input-score-annotate-it.png and b/Documentation/pictures/text-input-score-annotate-it.png differ
index b5415b414be8c5bf571fb13cc8c630ab1647a9b5..b54001aa383bf4137fecba3bbdf255ce3fb3e84c 100644 (file)
Binary files a/Documentation/pictures/text-input-score-annotate-nl.png and b/Documentation/pictures/text-input-score-annotate-nl.png differ
diff --git a/Documentation/po/included/.gitignore b/Documentation/po/included/.gitignore
new file mode 100644 (file)
index 0000000..e69de29
index 1d9e2464fba2857d750d1ffd1ab8e29d47c641e2..4304b738197a9fd00219fb5ff4ed733417f6eacb 100644 (file)
@@ -1,27 +1,29 @@
 # translation of LilyPond documentation to Italian
 # Copyright (C) 2009--2012 Han-Wen Nienhuys, Jan Nieuwenhuizen
 # This file is distributed under the same license as the lilypond package.
+# Federico Bruni <fedelogy@gmail.com>, 2009, 2012.
 #
-# Federico Bruni <brunology@gmx.com>, 2009.
-#
-#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: it\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2012-01-27 13:12+0100\n"
-"PO-Revision-Date: 2009-11-04 HO:MI+ZONE\n"
-"Last-Translator: Federico Bruni <brunology@gmx.com>\n"
-"Language-Team: Italiano\n"
-"Language: \n"
+"PO-Revision-Date: 2013-12-26 11:15+0100\n"
+"Last-Translator: Federico Bruni <fedelogy@gmail.com>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Poedit 1.5.4\n"
+"Language: Italian\n"
 
 #: postprocess_html.py:55
 #, python-format
 msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)."
 msgstr ""
+"Questa pagina documenta %(package_name)s-%(package_version)s "
+"(%(branch_str)s)."
 
 #: postprocess_html.py:57
 #, python-format
@@ -33,20 +35,21 @@ msgstr ""
 #: postprocess_html.py:69
 #, python-format
 msgid "Other languages: %s."
-msgstr ""
+msgstr "Altre lingue: %s."
 
 #: postprocess_html.py:70
 #, python-format
 msgid "About <A HREF=\"%s\">automatic language selection</A>."
 msgstr ""
+"A proposito della <A HREF=\"%s\">selezione automatica della lingua</A>."
 
 #: postprocess_html.py:330
 msgid "stable-branch"
-msgstr ""
+msgstr "ramo stabile"
 
 #: postprocess_html.py:332
 msgid "development-branch"
-msgstr ""
+msgstr "ramo di sviluppo"
 
 #: translations-status.py:72
 msgid "Section titles"
@@ -55,65 +58,65 @@ msgstr ""
 #: translations-status.py:73
 #, python-format
 msgid "Last updated %s"
-msgstr ""
+msgstr "Ultimo aggiornamento %s"
 
 #: translations-status.py:74
 msgid "Translators"
-msgstr ""
+msgstr "Traduttori"
 
 #: translations-status.py:74
 msgid "Translation checkers"
-msgstr ""
+msgstr "Revisori"
 
 #: translations-status.py:75
 msgid "Translated"
-msgstr ""
+msgstr "Tradotto"
 
 #: translations-status.py:75
 msgid "Up to date"
-msgstr ""
+msgstr "Aggiornato"
 
 #: translations-status.py:76
 msgid "Other info"
-msgstr ""
+msgstr "Altre informazioni"
 
 #: translations-status.py:78
 msgid "no"
-msgstr ""
+msgstr "no"
 
 #: translations-status.py:79
 msgid "not translated"
-msgstr ""
+msgstr "non tradotto"
 
 #: translations-status.py:81
 #, python-format
 msgid "partially (%(p)d %%)"
-msgstr ""
+msgstr "parzialmente (%(p)d %%)"
 
 #: translations-status.py:83
 #, python-format
 msgid "partially translated (%(p)d %%)"
-msgstr ""
+msgstr "tradotto parzialmente (%(p)d %%)"
 
 #: translations-status.py:84 translations-status.py:86
 msgid "yes"
-msgstr ""
+msgstr ""
 
 #: translations-status.py:85
 msgid "translated"
-msgstr ""
+msgstr "tradotto"
 
 #: translations-status.py:86 translations-status.py:87
 msgid "up to date"
-msgstr ""
+msgstr "aggiornato"
 
 #: translations-status.py:88
 msgid "partially"
-msgstr ""
+msgstr "parzialmente"
 
 #: translations-status.py:89
 msgid "partially up to date"
-msgstr ""
+msgstr "parzialmente aggiornato"
 
 #: translations-status.py:90
 msgid "N/A"
index a1c294955579397246d8ee7f81f18682e3f86bdf..9f48bc6f56489ed97948262193d18eed5f44b2f5 100644 (file)
@@ -1,19 +1,19 @@
 <!--
 we depend on an external entity here, which we cannot control.  Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
 For some time, Google won't have the new location in its index, so the
-search would get nothing.  It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing.  It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
 -->
 
 <form action="http://google.com/search"
       method="get"
       name="search"
-      onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+      onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
                + search.brute_query.value"
-      onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+      onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
                   + search.brute_query.value"
-      onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+      onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
               + search.brute_query.value">
   <input type="hidden" name="btnG" value="Google Search">
   <input type="text" name="brute_query" onfocus="this.value=''" value="Search">
diff --git a/Documentation/snippets/GNUmakefile b/Documentation/snippets/GNUmakefile
deleted file mode 100644 (file)
index cfc96fe..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-depth = ../..
-
-.PHONY: snippets
-
-SUBDIRS = new
-EXTRA_DIST_FILES = $(call src-wildcard,*.snippet-list) \
-  $(call src-wildcard,*.ly) $(call src-wildcard,*.itely) \
-  README
-SNIPPET_LY_FILES = $(call src-wildcard,*.ly)
-OUT_SNIPPET_LY_FILES = $(SNIPPET_LY_FILES:%.ly=out/%.ly)
-
-include $(depth)/make/stepmake.make
-
-default:
index c7b4da7a679ae30632b3598a68278c44ed048a0c..505bda3c57299a86ccac556f802e48f5ffeda9f1 100644 (file)
@@ -1,21 +1,23 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.16.0
 \version "2.16.0"
 
 \header {
   lsrtags = "keyboards, specific-notation, symbols-and-glyphs, workaround"
 
   texidoc = "
-Accordion discant-specific symbols are added using @code{\\markup}. The
-vertical placement of the symbols can be tweaked by changing the
-@code{\\raise} arguments.
-
-
-
+This snippet has been obsoleted by predefined markup commands, see
+@ruser{Accordion Registers}.  It's still useful as a simple
+demonstration of how to combine symbols: the placement of the symbols
+added with @code{\\markup} can be tweaked by changing the
+@code{\\translate-scaled} arguments.  @code{\\translate-scaled} is
+used here rather than @code{\\translate} in order to let the
+positioning of the symbol parts adapt to changes of @code{font-size}.
 "
   doctitle = "Accordion-discant symbols"
 } % begin verbatim
@@ -34,7 +36,7 @@ dot = \markup {
 accBasson = ^\markup {
   \combine
   \discant
-  \raise #0.5 \dot
+  \translate-scaled #'(0 . 0.5) \dot
 }
 
 % een korig 8 en 16 voets register
@@ -42,18 +44,18 @@ accBandon = ^\markup {
   \combine
     \discant
     \combine
-      \raise #0.5 \dot
-      \raise #1.5 \dot
+      \translate-scaled #'(0 . 0.5) \dot
+      \translate-scaled #'(0 . 1.5) \dot
 }
 
 accVCello = ^\markup {
   \combine
     \discant
     \combine
-      \raise #0.5 \dot
+      \translate-scaled #'(0 . 0.5) \dot
       \combine
-        \raise #1.5 \dot
-        \translate #'(1 . 0) \raise #1.5 \dot
+        \translate-scaled #'(0 . 1.5) \dot
+        \translate-scaled #'(1 . 1.5) \dot
 }
 
 % 4-8-16 voets register
@@ -61,22 +63,22 @@ accHarmon = ^\markup {
   \combine
     \discant
     \combine
-      \raise #0.5 \dot
+      \translate-scaled #'(0 . 0.5) \dot
       \combine
-        \raise #1.5 \dot
-        \raise #2.5 \dot
+        \translate-scaled #'(0 . 1.5) \dot
+        \translate-scaled #'(0 . 2.5) \dot
 }
 
 accTrombon = ^\markup {
   \combine
     \discant
     \combine
-      \raise #0.5 \dot
+      \translate-scaled #'(0 . 0.5) \dot
       \combine
-        \raise #1.5 \dot
+        \translate-scaled #'(0 . 1.5) \dot
         \combine
-          \translate #'(1 . 0) \raise #1.5 \dot
-          \translate #'(-1 . 0) \raise #1.5 \dot
+          \translate-scaled #'(1 . 1.5) \dot
+          \translate-scaled #'(-1 . 1.5) \dot
 }
 
 % eenkorig 4 en 16 voets register
@@ -84,82 +86,82 @@ accOrgan = ^\markup {
   \combine
     \discant
     \combine
-      \raise #0.5 \dot
-      \raise #2.5 \dot
+      \translate-scaled #'(0 . 0.5) \dot
+      \translate-scaled #'(0 . 2.5) \dot
 }
 
 accMaster = ^\markup {
   \combine
     \discant
     \combine
-      \raise #0.5 \dot
+      \translate-scaled #'(0 . 0.5) \dot
       \combine
-        \raise #1.5 \dot
+        \translate-scaled #'(0 . 1.5) \dot
         \combine
-          \translate #'(1 . 0) \raise #1.5 \dot
+          \translate-scaled #'(1 . 1.5) \dot
           \combine
-            \translate #'(-1 . 0) \raise #1.5 \dot
-            \raise #2.5 \dot
+            \translate-scaled #'(-1 . 1.5) \dot
+            \translate-scaled #'(0 . 2.5) \dot
 }
 
 accAccord = ^\markup {
   \combine
     \discant
     \combine
-      \raise #1.5 \dot
+      \translate-scaled #'(0 . 1.5) \dot
       \combine
-        \translate #'(1 . 0) \raise #1.5 \dot
+        \translate-scaled #'(1 . 1.5) \dot
         \combine
-          \translate #'(-1 . 0) \raise #1.5 \dot
-          \raise #2.5 \dot
+          \translate-scaled #'(-1 . 1.5) \dot
+          \translate-scaled #'(0 . 2.5) \dot
 }
 
 accMusette = ^\markup {
   \combine
     \discant
     \combine
-      \raise #1.5 \dot
+      \translate-scaled #'(0 . 1.5) \dot
       \combine
-        \translate #'(1 . 0) \raise #1.5 \dot
-        \translate #'(-1 . 0) \raise #1.5 \dot
+        \translate-scaled #'(1 . 1.5) \dot
+        \translate-scaled #'(-1 . 1.5) \dot
 }
 
 accCeleste = ^\markup {
   \combine
     \discant
     \combine
-      \raise #1.5 \dot
-      \translate #'(-1 . 0) \raise #1.5 \dot
+      \translate-scaled #'(0 . 1.5) \dot
+      \translate-scaled #'(-1 . 1.5) \dot
 }
 
 accOboe = ^\markup {
   \combine
     \discant
     \combine
-      \raise #1.5 \dot
-      \raise #2.5 \dot
+      \translate-scaled #'(0 . 1.5) \dot
+      \translate-scaled #'(0 . 2.5) \dot
 }
 
 accClarin = ^\markup {
   \combine
     \discant
-    \raise #1.5 \dot
+    \translate-scaled #'(0 . 1.5) \dot
 }
 
 accPiccolo = ^\markup {
     \combine
        \discant
-       \raise #2.5 \dot
+       \translate-scaled #'(0 . 2.5) \dot
 }
 
 accViolin = ^\markup {
   \combine
     \discant
     \combine
-      \raise #1.5 \dot
+      \translate-scaled #'(0 . 1.5) \dot
       \combine
-        \translate #'(1 . 0) \raise #1.5 \dot
-        \raise #2.5 \dot
+        \translate-scaled #'(1 . 1.5) \dot
+        \translate-scaled #'(0 . 2.5) \dot
 }
 
 \relative c'' {
diff --git a/Documentation/snippets/accordion-registers.ly b/Documentation/snippets/accordion-registers.ly
new file mode 100644 (file)
index 0000000..00df021
--- /dev/null
@@ -0,0 +1,40 @@
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.23
+\version "2.17.23"
+
+\header {
+  lsrtags = "keyboards, specific-notation, symbols-and-glyphs"
+
+  texidoc = "Accordion register symbols are available as
+@code{\\markup} as well as as standalone music events (as register
+changes tend to occur between actual music events.  Bass registers are
+not overly standardized.  The available commands can be found in
+@ruser{Accordion Registers}."
+
+  doctitle = "Accordion register symbols"
+} % begin verbatim
+
+
+\layout { ragged-right = ##t }
+
+#(use-modules (scm accreg))
+
+\new PianoStaff
+<<
+  \new Staff \relative
+  { \clef treble \discant "10" r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
+    << { r16 <f bes> r <e a> r <d g> } \\ { d r a r bes r } >> | <cis e a>1 }
+  \new Staff \relative
+  { \clef treble \freeBass "1" r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
+    \clef bass \stdBass "Master"
+    << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
+        <e a cis>1^"a" } \\
+       { d8_"D" c_"C" bes_"B" | a1_"A" }
+     >>
+  }
+>>
index 6e15690aa868c29c56b33f398dcce1bfe282eb50..77d5beaa6009983d39b352cb2b931579d4cbf6c2 100644 (file)
@@ -1,22 +1,29 @@
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.6
 %% DO NOT EDIT this file manually; it is automatically
 %% generated from LSR http://lsr.dsi.unimi.it
 %% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "ancient-notation, chords, contexts-and-engravers"
 
   texidoc = "
 When writing a figured bass, you can place the figures above or below
-the bass notes, by defining the @code{BassFigureAlignmentPositioning
-#'direction} property (exclusively in a @code{Staff} context). Choices
-are @code{#UP} (or @code{#1}), @code{#CENTER} (or @code{#0}) and
-@code{#DOWN} (or @code{#-1}).
+the bass notes, by defining the
+@code{BassFigureAlignmentPositioning.direction} property (exclusively
+in a @code{Staff} context).  Choices are @code{#UP} (or @code{#1}),
+@code{#CENTER} (or @code{#0}) and @code{#DOWN} (or @code{#-1}).
 
-This property can be changed as many times as you wish. Use
+This property can be changed as many times as you wish.  Use
 @code{\\once \\override} if you don't want the override to apply to the
 whole score.
 
@@ -29,14 +36,15 @@ bass = {
   \clef bass
   g4 b, c d
   e d8 c d2
-}
+} % begin verbatim
+
 continuo = \figuremode {
   <_>4 <6>4 <5/>4
-  \override Staff.BassFigureAlignmentPositioning #'direction = #UP
+  \override Staff.BassFigureAlignmentPositioning.direction = #UP
   %\bassFigureStaffAlignmentUp
   < _+ >4 <6>
   \set Staff.useBassFigureExtenders = ##t
-  \override Staff.BassFigureAlignmentPositioning #'direction = #DOWN
+  \override Staff.BassFigureAlignmentPositioning.direction = #DOWN
   %\bassFigureStaffAlignmentDown
   <4>4. <4>8 <_+>4
 }
index 406cbfd5f18f684a2470b82c18086d4db2017e9d..6f05ed94eda50c4efc88120bf3960a9ab349a313 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "pitches, staff-notation, vocal-music"
@@ -22,7 +22,7 @@ manually to prevent collisions.
   \new Voice \with {
     \consists "Ambitus_engraver"
   } \relative c'' {
-    \override Ambitus #'X-offset = #2.0
+    \override Ambitus.X-offset = #2.0
     \voiceOne
     c4 a d e
     f1
index cd413a7d78461ac73eb0a82352e818fcdfcf0d41..f4a9963b3fdc39d1335482e98407899b7e045970 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "breaks, contexts-and-engravers, staff-notation, workaround"
@@ -30,7 +30,7 @@ workaround is to add a setting of
     << { c1 | c }
        \new Staff {
          \key f \major
-         \once \override Staff.TimeSignature #'stencil = ##f
+         \once \omit Staff.TimeSignature
          c1 | c
        }
     >>
@@ -39,7 +39,7 @@ workaround is to add a setting of
        \new Staff {
          \once \set Staff.explicitKeySignatureVisibility = #end-of-line-invisible
          \key f \major
-         \once \override Staff.TimeSignature #'stencil = ##f
+         \once \omit Staff.TimeSignature
          c1 | c
        }
     >>
index 205d47e79a24d2e00486eaede28453e14472e405..430371a6444e42ddcddf69e5dbafa66a4c3fe808 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "contexts-and-engravers, really-simple, staff-notation"
@@ -31,7 +31,7 @@ piece.
             c1 | d
           }
           \new Staff {
-            \once \override Staff.TimeSignature #'stencil = ##f
+            \once \omit Staff.TimeSignature
             c1 | b
           }
         >>
diff --git a/Documentation/snippets/adding-an-ottava-marking-to-a-single-voice.ly b/Documentation/snippets/adding-an-ottava-marking-to-a-single-voice.ly
new file mode 100644 (file)
index 0000000..fce68d8
--- /dev/null
@@ -0,0 +1,41 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.6"
+
+\header {
+  lsrtags = "pitches, tweaks-and-overrides"
+
+  texidoc = "
+If you have more than one voice on the staff, setting octavation in one
+voice will transpose the position of notes in all voices for the
+duration of the ottava bracket. If the ottavation is only intended to
+apply to one voice, the middleCPosition and ottava bracket may be set
+explicitly.  In this snippet, the bass clef usually has middleCPosition
+set to 6, six positions above the center  line, so in the 8va portion
+middleCPosition is 7 positions (one octave) higher still.
+
+"
+  doctitle = "Adding an ottava marking to a single voice"
+} % begin verbatim
+
+{
+  \clef bass
+  << { <g d'>1~ q2 <c' e'> }
+  \\
+    {
+      r2.
+      \set Staff.ottavation = #"8vb"
+      \once \override Staff.OttavaBracket.direction = #DOWN
+      \set Voice.middleCPosition = #(+ 6 7)
+      <b,,, b,,>4 ~ |
+      q2
+      \unset Staff.ottavation
+      \unset Voice.middleCPosition
+      <c e>2
+    }
+  >>
+}
index 27d3823480d9ed3652951f5fd53236c6a31389ac..ee14a8aff5b52dfef57e7abfda0c4549e378ac4a 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "chords, specific-notation"
@@ -19,7 +19,7 @@ To add bar line indications in the @code{ChordNames} context, add the
 
 
 \new ChordNames \with {
-  \override BarLine #'bar-extent = #'(-2 . 2)
+  \override BarLine.bar-extent = #'(-2 . 2)
   \consists "Bar_engraver"
 }
 \chordmode {
index 5a058474277d6584a3e55d3ce1f49635e63e964c..5912d2d8aa1728e60b98c52e22c0fbb2deae650b 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "expressive-marks, rhythms"
@@ -26,9 +26,9 @@ sections (enclosed within curly braces).
 
 
 {
-  r16[ g16 \times 2/3 { r16 e'8] }
-  g16( a \times 2/3 { b d e') }
-  g8[( a \times 2/3 { b d') e'] ~ }
+  r16[ g16 \tuplet 3/2 { r16 e'8] }
+  g16( a \tuplet 3/2 { b d e') }
+  g8[( a \tuplet 3/2 { b d') e'] ~ }
   \time 2/4
-  \times 4/5 { e'32\( a b d' e' } a'4.\)
+  \tuplet 5/4 { e'32\( a b d' e' } a'4.\)
 }
index a0b3264d0fabb7aa8a06f14c827fd2c3dd3d865e..7f354029fe14650377e8c0d964c58fdd7fc30d64 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "percussion, preparing-parts, really-simple, rhythms, specific-notation"
@@ -30,8 +30,8 @@ timb = \drummode { timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 cb }
   <<
     \new DrumStaff \with {
       drumStyleTable = #timbales-style
-      \override StaffSymbol #'line-count = #2
-      \override BarLine #'bar-extent = #'(-1 . 1)
+      \override StaffSymbol.line-count = #2
+      \override BarLine.bar-extent = #'(-1 . 1)
     } <<
       \set Staff.instrumentName = #"timbales"
       \timb
index 2fe4bcd6c44f0807f890996531197cc2e1066c8f..9e3f6072cb2ecd4d76d3872724b72bd31075a4cf 100644 (file)
@@ -1,53 +1,47 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.16.0
 \version "2.16.0"
 
 \header {
   lsrtags = "scheme-language"
 
   texidoc = "
-You can add various stuff to notes using @code{make-music}. In this
-example, an extra fingering is attached to a note.
-
-
-In general, first do a @code{display} of the music you want to create,
-then write a function that will structure the music for you.
-
-
+You can add additional elements to notes using @code{map-some-music}. In this
+example, an extra script is attached to a note.
 
+In general, first do a @code{\\displayMusic} of the music you want to
+create, then write a function that will work on the appropriate parts
+of the music for you.
 "
   doctitle = "Adding extra fingering with scheme"
 } % begin verbatim
 
 
-#(define (make-text-script x)
-   (make-music 'TextScriptEvent
-               'direction DOWN
-               'text (make-simple-markup x)))
-
-#(define (add-text-script m x)
-   (if (equal? (ly:music-property m 'name) 'EventChord)
-       (set! (ly:music-property m 'elements)
-             (cons (make-text-script x)
-                  (ly:music-property m 'elements)))
-       (let ((es (ly:music-property m 'elements))
-            (e (ly:music-property m 'element)))
-        (map (lambda (y) (add-text-script y x)) es)
-        (if (ly:music? e)
-            (add-text-script e x))))
-   m)
-
 addScript =
-#(define-music-function (parser location script music )
-                                       ( string? ly:music? )
-               (add-text-script music script))
+#(define-music-function (parser location script music)
+   (ly:event? ly:music?)
+   (map-some-music
+    (lambda (mus)
+      (define (append-script-at! prop)
+        (set! (ly:music-property mus prop)
+              (append (ly:music-property mus prop)
+                      (list (ly:music-deep-copy script))))
+        mus)
+      (case (ly:music-property mus 'name)
+        ((EventChord)
+         (append-script-at! 'elements))
+        ((NoteEvent)
+         (append-script-at! 'articulations))
+        (else #f)))
+    music))
 
 \score {
   {
-    \addScript "6" { c'4-3 }
+    \addScript _6 { c'4-3 <c' e' g'> }
   }
 }
index 528b3f3853911c3c053c4335f34319a68c29de74..80df7dc6d0539e8beb736e61b6737f1663db7fc4 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "staff-notation, symbols-and-glyphs, vocal-music"
@@ -43,7 +43,7 @@ splitStaffBarLineMarkup = \markup \with-dimensions #'(0 . 0) #'(0 . 0) {
 }
 
 splitStaffBarLine = {
-  \once \override Staff.BarLine #'stencil =
+  \once \override Staff.BarLine.stencil =
     #(lambda (grob)
        (ly:stencil-combine-at-edge
         (ly:bar-line::print grob)
@@ -98,7 +98,7 @@ splitStaffBarLine = {
   \layout {
     \context {
       \Staff \RemoveEmptyStaves
-      \override VerticalAxisGroup #'remove-first = ##t
+      \override VerticalAxisGroup.remove-first = ##t
     }
   }
 }
diff --git a/Documentation/snippets/adding-links-to-objects.ly b/Documentation/snippets/adding-links-to-objects.ly
new file mode 100644 (file)
index 0000000..a2d2143
--- /dev/null
@@ -0,0 +1,90 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.6"
+
+\header {
+  lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
+
+  texidoc = "
+To add a link to a grob-stencil you could use @code{add-link} as
+defined here. Works with @code{\\override} and @code{\\tweak}.
+Drawback: @code{point-and-click} will be disturbed for the linked grobs.
+
+Limitation: Works for PDF only.
+
+The linked objects are colored with a separate command.
+
+"
+  doctitle = "Adding links to objects"
+} % begin verbatim
+
+% Code by Thomas Morley
+% Contributed by harm6
+% Tested with 2.14.2 up to 2.17.9
+
+#(define (add-link url-strg)
+  (lambda (grob)
+    (let* ((stil (ly:grob-property grob 'stencil)))
+      (if (ly:stencil? stil)
+        (begin
+          (let* (
+             (x-ext (ly:stencil-extent stil X))
+             (y-ext (ly:stencil-extent stil Y))
+             (url-expr (list 'url-link url-strg `(quote ,x-ext) `(quote ,y-ext)))
+             (new-stil (ly:stencil-add (ly:make-stencil url-expr x-ext y-ext) stil)))
+          (ly:grob-set-property! grob 'stencil new-stil)))
+        #f))))
+
+%%%% test
+
+urlI =
+"http://lilypond.org/doc/v2.14/Documentation/notation/writing-pitches"
+
+urlII =
+"http://lilypond.org/doc/v2.14/Documentation/notation/rhythms"
+
+urlIII =
+"http://lilypond.org/doc/v2.14/Documentation/notation/note-heads"
+
+urlIV =
+"http://lilypond.org/doc/v2.14/Documentation/notation/beams"
+
+urlV =
+"http://lilypond.org/doc/v2.14/Documentation/notation/note-head-styles"
+
+\relative c' {
+  \key cis \minor
+
+  \once \override Staff.Clef.color = #green
+  \once \override Staff.Clef.after-line-breaking =
+    #(add-link urlI)
+
+  \once \override Staff.TimeSignature.color = #green
+  \once \override Staff.TimeSignature.after-line-breaking =
+    #(add-link urlII)
+
+  \once \override NoteHead.color = #green
+  \once \override NoteHead.after-line-breaking =
+    #(add-link urlIII)
+
+  cis'1
+  \once \override Beam.color = #green
+  \once \override Beam.after-line-breaking =
+    #(add-link urlIV)
+  cis8 dis e fis gis2
+  <gis,
+   % With 2.17.9 you could use the command below to address the Accidental.
+   % \tweak Accidental.before-line-breaking #(add-link url)
+   \tweak color #green
+   \tweak after-line-breaking #(add-link urlV)
+   \tweak style #'harmonic
+   bis
+   dis
+   fis
+  >1
+  <cis, cis' e>
+}
index cd77b63ccc8583ed8d4e7cc59e5b58bced13c5d6..92c4fc31e53671bd9c01a1ef563f3aa293f313b9 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.20
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "staff-notation, vocal-music"
@@ -33,8 +33,8 @@ cueWhile =
    (string? string? ly:dir? ly:music?)
    #{
      \cueDuring $instrument #dir {
-       \once \override TextScript #'self-alignment-X = #RIGHT
-       \once \override TextScript #'direction = $dir
+       \once \override TextScript.self-alignment-X = #RIGHT
+       \once \override TextScript.direction = $dir
        <>-\markup { \tiny #name }
        $music
      }
index 4287411de0680c73d9095a9e17f2dffea5fc6e6b..05b4e9ba0770a68a6ba6af814923cad9e996d9f6 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, workaround"
@@ -21,7 +21,7 @@ objects in parentheses.  The associated grob is @code{ParenthesesItem}.
 
 \relative c' {
   c2-\parenthesize ->
-  \override ParenthesesItem #'padding = #0.1
-  \override ParenthesesItem #'font-size = #-4
+  \override ParenthesesItem.padding = #0.1
+  \override ParenthesesItem.font-size = #-4
   <d \parenthesize f a>2
 }
index 587a5d9279cb5715a7a4919eb473181679321c34..0cbcfeb719f293ba263b5898181e9e1bfbb35e69 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.15.15"
+%% Note: this file works from version 2.17.30
+\version "2.17.30"
 
 \header {
   lsrtags = "expressive-marks, staff-notation, tweaks-and-overrides"
@@ -24,15 +24,15 @@ be repositioned slightly.
 
 
 glissandoSkipOn = {
-  \override NoteColumn #'glissando-skip = ##t
-  \override NoteHead #'transparent = ##t
-  \override NoteHead #'no-ledgers = ##t
+  \override NoteColumn.glissando-skip = ##t
+  \hide NoteHead
+  \override NoteHead.no-ledgers = ##t
 }
 
 glissandoSkipOff = {
-  \revert NoteColumn #'glissando-skip
-  \revert NoteHead #'transparent
-  \revert NoteHead #'no-ledgers
+  \revert NoteColumn.glissando-skip
+  \undo \hide NoteHead
+  \revert NoteHead.no-ledgers
 }
 
 \relative c'' {
index 749559f016cd014f5995ff8c3d09577ac680233f..e8d2f551871c724535b891c9aac005457f091dfe 100644 (file)
@@ -19,7 +19,6 @@ a variable using the Scheme function @code{context-spec-music}.
   doctitle = "Additional voices to avoid collisions"
 } % begin verbatim
 
-
 voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice)
 
 \relative c'' {
@@ -27,32 +26,29 @@ voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice)
   \key d \minor
   \partial 2
   <<
-    {
+    \new Voice  {
       \voiceOne
       a4. a8
       e'4 e4. e8
       f4 d4. c8
     }
-    \\
-    {
+    \new Voice {
+      \voiceTwo
+      d,2
+      d4 cis2
+      d4 bes2
+    }
+    \new Voice {
       \voiceThree
-      f,2
+      f'2
       bes4 a2
       a4 s2
     }
-    \\
-    {
+    \new Voice {
       \voiceFive
       s2
       g4 g2
       f4 f2
     }
-    \\
-    \bar "||"{
-      \voiceTwo
-      d2
-      d4 cis2
-      d4 bes2
-    }
   >>
 }
index a1869c9aedb1e75f93734d35fe9f029092633257..d442d817ec665bbe71ac326f30e2c3315820b025 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -26,8 +26,8 @@ graceNotes = {
 \relative c'' {
   c8
   \graceNotes
-  \override Score.GraceSpacing #'spacing-increment = #2.0
+  \override Score.GraceSpacing.spacing-increment = #2.0
   \graceNotes
-  \revert Score.GraceSpacing #'spacing-increment
+  \revert Score.GraceSpacing.spacing-increment
   \graceNotes
 }
index 551e96053721b8b666afd27beed418f8599a1709..e7bcf160f125bdd413839b07dcff7de29486acfb 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "correction-wanted, spacing, text, vocal-music, workaround"
@@ -34,7 +34,7 @@ This snippet shows how to bring the lyrics line closer to the staff.
   }
   % Reducing the minimum space below the staff and above the lyrics:
   \new Lyrics \with {
-    \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #'((basic-distance . 1))
+    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'((basic-distance . 1))
   }
   \lyricsto melody { aa aa aa aa aa aa aa aa aa }
 >>
index 86f26c7154890f4bef1832e5b940e55977984c53..6b0b03478d7ffb50f8b414d93ae7007a63eb7feb 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks"
@@ -18,7 +18,7 @@ the shape of falls and doits.
 } % begin verbatim
 
 \relative c'' {
-  \override Score.SpacingSpanner #'shortest-duration-space = #4.0
+  \override Score.SpacingSpanner.shortest-duration-space = #4.0
   c2-\bendAfter #5
   c2-\bendAfter #-4.75
   c2-\bendAfter #8.5
index f4a55903a1e3092dc3e36c4df04c5f841342d27e..b67aeac03a360a4c01f1a2ddfa57c0e0b5842de2 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "paper-and-layout, text, titles"
@@ -28,7 +28,7 @@ and the following systems, respectively.
 \score {
   \new StaffGroup <<
     \new Staff {
-      \override Staff.InstrumentName #'self-alignment-X = #LEFT
+      \override Staff.InstrumentName.self-alignment-X = #LEFT
       \set Staff.instrumentName = \markup \left-column {
         "Left aligned"
         "instrument name"
@@ -39,7 +39,7 @@ and the following systems, respectively.
       c''1
     }
     \new Staff {
-      \override Staff.InstrumentName #'self-alignment-X = #CENTER
+      \override Staff.InstrumentName.self-alignment-X = #CENTER
       \set Staff.instrumentName = \markup \center-column {
         Centered
         "instrument name"
@@ -49,7 +49,7 @@ and the following systems, respectively.
       g'1
     }
     \new Staff {
-      \override Staff.InstrumentName #'self-alignment-X = #RIGHT
+      \override Staff.InstrumentName.self-alignment-X = #RIGHT
       \set Staff.instrumentName = \markup \right-column {
         "Right aligned"
         "instrument name"
index e09a298f332c9b9cbfc9c8b079c8259c1028093c..321f4cb3d748742a6cab82106332dcf0bd4c86d3 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms"
@@ -22,16 +22,16 @@ positioned directly over the bar line or left-aligned to the bar line.
 
 \relative c' {
   \set Score.currentBarNumber = #111
-  \override Score.BarNumber #'break-visibility = #all-visible
+  \override Score.BarNumber.break-visibility = #all-visible
   % Increase the size of the bar number by 2
-  \override Score.BarNumber #'font-size = #2
+  \override Score.BarNumber.font-size = #2
   % Print a bar number every second measure
   \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2)
   c1 | c1
   % Center-align bar numbers
-  \override Score.BarNumber #'self-alignment-X = #CENTER
+  \override Score.BarNumber.self-alignment-X = #CENTER
   c1 | c1
   % Left-align bar numbers
-  \override Score.BarNumber #'self-alignment-X = #LEFT
+  \override Score.BarNumber.self-alignment-X = #LEFT
   c1 | c1
 }
diff --git a/Documentation/snippets/aligning-marks-with-various-notation-objects.ly b/Documentation/snippets/aligning-marks-with-various-notation-objects.ly
deleted file mode 100644 (file)
index ddab547..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
-
-\header {
-  lsrtags = "text"
-
-  texidoc = "
-If specified, text marks may be aligned with notation objects other
-than bar lines.  These objects include @code{ambitus},
-@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar},
-@code{left-edge}, @code{key-cancellation}, @code{key-signature}, and
-@code{time-signature}.
-
-
-
-In such cases, text marks will be horizontally centered above the
-object. However this can be changed, as demonstrated on the second line
-of this example (in a score with multiple staves, this setting should
-be done for all the staves).
-
-
-
-"
-  doctitle = "Aligning marks with various notation objects"
-} % begin verbatim
-
-\relative c' {
-  e1
-
-  % the RehearsalMark will be centered above the Clef
-  \override Score.RehearsalMark #'break-align-symbols = #'(clef)
-  \key a \major
-  \clef treble
-  \mark \markup { \char ##x2193 }
-  e1
-
-  % the RehearsalMark will be centered above the TimeSignature
-  \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
-  \key a \major
-  \clef treble
-  \time 3/4
-  \mark \markup { \char ##x2193 }
-  e2.
-
-  % the RehearsalMark will be centered above the KeySignature
-  \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
-  \key a \major
-  \clef treble
-  \time 4/4
-  \mark \markup { \char ##x2193 }
-  e1
-
-  \break
-  e1
-
-  % the RehearsalMark will be aligned with the left edge of the KeySignature
-  \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
-  \mark \markup { \char ##x2193 }
-  \key a \major
-  e1
-
-  % the RehearsalMark will be aligned with the right edge of the KeySignature
-  \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
-  \key a \major
-  \mark \markup { \char ##x2193 }
-  e1
-
-  % the RehearsalMark will be aligned with the left edge of the KeySignature
-  % and then shifted right by one unit.
-  \once \override Score.KeySignature #'break-align-anchor = #1
-  \key a \major
-  \mark \markup { \char ##x2193 }
-  e1
-}
index 8ab123ef88df364ba63c4fc2415a85d38b172e1b..c25eccd8a16d237457239aace1a6ea3b390118c7 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "text"
@@ -21,11 +21,11 @@ This behavior can be modified to align at right or left.
 \relative c' {
   c1 \mark "(Center)"
   c1
-  \once \override Score.RehearsalMark #'self-alignment-X = #LEFT
+  \once \override Score.RehearsalMark.self-alignment-X = #LEFT
   \mark "(Left)"
   c4 c c c
   c4 c c c
-  \once \override Score.RehearsalMark #'self-alignment-X = #RIGHT
+  \once \override Score.RehearsalMark.self-alignment-X = #RIGHT
   \mark "(Right)"
   c1
 }
index 01d5dbd819292aa6cff8dda104124317f42a4c36..d4a211ffe549e6a8268615e6989bc4ac25cdadd6 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, fretted-strings, spacing, specific-notation"
@@ -21,6 +21,6 @@ chord construct <>, even if it is only a single note.
 
 \relative c' {
   <c-1 e-2 g-3 b-5>2
-  \override Fingering #'staff-padding = #'()
+  \override Fingering.staff-padding = #'()
   <c-1 e-2 g-3 b-5>4 <g'-0>
 }
index f42ad922b2ebe2baec12643527c5543d31827355..719aa97ea12a02f12900037138a8beef78d8ef53 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "pitches, tweaks-and-overrides"
@@ -24,14 +24,14 @@ of the final argument.  Non-integer arguments may also be used.
 
 
 \relative c'' {
-  \override Stem #'(details beamed-lengths) = #'(2)
+  \override Stem.details.beamed-lengths = #'(2)
   a8[ a] a16[ a] a32[ a]
-  \override Stem #'(details beamed-lengths) = #'(8 10 12)
+  \override Stem.details.beamed-lengths = #'(8 10 12)
   a8[ a] a16[ a] a32[ a] r8
-  \override Stem #'(details beamed-lengths) = #'(8)
+  \override Stem.details.beamed-lengths = #'(8)
   a8[ a]
-  \override Stem #'(details beamed-lengths) = #'(8.5)
+  \override Stem.details.beamed-lengths = #'(8.5)
   a8[ a]
-  \revert Stem #'details
+  \revert Stem.details
   a8[ a] a16[ a] a32[ a] r16
 }
index 74b608255e8c217dfd1ffaeec40b61fe1730e1aa..017551b62ba821354a8640a9d52fe0d6ba219654 100644 (file)
@@ -4,7 +4,7 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.24
+%% Note: this file works from version 2.16.0
 \version "2.16.0"
 
 \header {
diff --git a/Documentation/snippets/alternative-breve-note.ly b/Documentation/snippets/alternative-breve-note.ly
deleted file mode 100644 (file)
index 75012ba..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
-
-\header {
-  lsrtags = "expressive-marks, rhythms"
-
-  texidoc = "
-This code demonstrates how to use the alternative breve note with two
-vertical lines on each side of the notehead instead of one line.
-
-"
-  doctitle = "Alternative breve note"
-} % begin verbatim
-
-\relative c'' {
-  \time 4/2
-  c\breve |
-  \override Staff.NoteHead #'style = #'altdefault
-  b\breve
-  \revert Staff.NoteHead #'style
-  a\breve
-}
diff --git a/Documentation/snippets/alternative-breve-notes.ly b/Documentation/snippets/alternative-breve-notes.ly
new file mode 100644 (file)
index 0000000..d735931
--- /dev/null
@@ -0,0 +1,29 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.6"
+
+\header {
+  lsrtags = "expressive-marks, rhythms"
+
+  texidoc = "
+Breve notes are also available with two vertical lines on each side of
+the notehead instead of one line and in baroque style.
+
+"
+  doctitle = "Alternative breve notes"
+} % begin verbatim
+
+\relative c'' {
+  \time 4/2
+  c\breve |
+  \override Staff.NoteHead.style = #'altdefault
+  b\breve
+  \override Staff.NoteHead.style = #'baroque
+  b\breve
+  \revert Staff.NoteHead.style
+  a\breve
+}
index 65baecd336c3c4dc28764542a3d4468c4513785b..02a153baf72892b55707de56674247841d2bdac0 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, really-simple, tweaks-and-overrides"
@@ -26,7 +26,7 @@ staff instead.
   }
 }
 \relative c'' {
-  \once \override HorizontalBracket #'direction = #UP
+  \once \override HorizontalBracket.direction = #UP
   c2\startGroup
   d2\stopGroup
 }
index 64a083b1a539404377001014ce8f08f6315f6396..e0d6f54f924baea1bc180d1802631de4cadacc92 100644 (file)
@@ -4,9 +4,9 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.9
+%% Note: this file works from version 2.17.6
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "ancient-notation, symbols-and-glyphs"
@@ -23,49 +23,49 @@ upperStaff = \new VaticanaStaff = "upperStaff" <<
   \context VaticanaVoice <<
     \transpose c c {
 
-      \override NoteHead #'style = #'vaticana.punctum
+      \override NoteHead.style = #'vaticana.punctum
       \key es \major
       \clef "vaticana-fa2"
       c1 des e f ges
 
-      \override NoteHead #'style = #'vaticana.inclinatum
+      \override NoteHead.style = #'vaticana.inclinatum
       a! b ces'
       \bar "|"
       % \break % 1 (8*1)
 
-      \override NoteHead #'style = #'vaticana.quilisma
+      \override NoteHead.style = #'vaticana.quilisma
       b! des'! ges! fes!
       \breathe
       \clef "vaticana-fa1"
-      \override NoteHead #'style = #'vaticana.plica
+      \override NoteHead.style = #'vaticana.plica
       es d
-      \override NoteHead #'style = #'vaticana.reverse.plica
+      \override NoteHead.style = #'vaticana.reverse.plica
       c d
       \bar "|"
       % \break %2 (8*1)
 
-      \override NoteHead #'style = #'vaticana.punctum.cavum
+      \override NoteHead.style = #'vaticana.punctum.cavum
       es f
-      \override NoteHead #'style = #'vaticana.lpes
+      \override NoteHead.style = #'vaticana.lpes
       g as
-      \override NoteHead #'style = #'vaticana.upes
+      \override NoteHead.style = #'vaticana.upes
       bes as
-      \override NoteHead #'style = #'vaticana.vupes
+      \override NoteHead.style = #'vaticana.vupes
       g f
-      \override NoteHead #'style = #'vaticana.linea.punctum
-      \once \override Staff.BarLine #'bar-extent = #'(-1 . 1) \bar "|"
+      \override NoteHead.style = #'vaticana.linea.punctum
+      \once \override Staff.BarLine.bar-extent = #'(-1 . 1) \bar "|"
       % \break % 3 (8*1)
 
       es d
-      \override NoteHead #'style = #'vaticana.epiphonus
+      \override NoteHead.style = #'vaticana.epiphonus
       c d
-      \override NoteHead #'style = #'vaticana.cephalicus
+      \override NoteHead.style = #'vaticana.cephalicus
       es f
 
-      \override Staff.KeySignature #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
-      \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
-      \override Staff.Custos #'style = #'medicaea
-      \override NoteHead #'style = #'medicaea.punctum
+      \override Staff.KeySignature.glyph-name-alist = #alteration-medicaea-glyph-name-alist
+      \override Staff.Accidental.glyph-name-alist = #alteration-medicaea-glyph-name-alist
+      \override Staff.Custos.style = #'medicaea
+      \override NoteHead.style = #'medicaea.punctum
       \clef "medicaea-fa2"
       ces des
       \bar "|"
@@ -73,22 +73,22 @@ upperStaff = \new VaticanaStaff = "upperStaff" <<
 
       e! f! ges
       \clef "medicaea-do2"
-      \override NoteHead #'style = #'medicaea.inclinatum
+      \override NoteHead.style = #'medicaea.inclinatum
       a! b! ces'
-      \override NoteHead #'style = #'medicaea.virga
+      \override NoteHead.style = #'medicaea.virga
       b! a!
       \bar "|"
       % \break % 5 (8*1)
 
       ges fes
       \clef "medicaea-fa1"
-      \override NoteHead #'style = #'medicaea.rvirga
+      \override NoteHead.style = #'medicaea.rvirga
       e des ces
 
-      \override Staff.KeySignature #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
-      \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
-      \override Staff.Custos #'style = #'hufnagel
-      \override NoteHead #'style = #'hufnagel.punctum
+      \override Staff.KeySignature.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+      \override Staff.Accidental.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+      \override Staff.Custos.style = #'hufnagel
+      \override NoteHead.style = #'hufnagel.punctum
       \clef "hufnagel-fa2"
       ces des es
       \bar "|"
@@ -96,16 +96,16 @@ upperStaff = \new VaticanaStaff = "upperStaff" <<
 
       fes ges
       \clef "hufnagel-do2"
-      \override NoteHead #'style = #'hufnagel.lpes
+      \override NoteHead.style = #'hufnagel.lpes
       as! bes! ces'
-      \override NoteHead #'style = #'hufnagel.virga
+      \override NoteHead.style = #'hufnagel.virga
       bes! as!
       \bar "|"
       % \break % 7 (8*1)
 
       ges! fes!
       \clef "hufnagel-do-fa"
-      \override NoteHead #'style = #'hufnagel.punctum
+      \override NoteHead.style = #'hufnagel.punctum
       es! des ces des! es! fes!
       \bar "||"
       % \break % 8 (8*1)
@@ -145,8 +145,8 @@ lowerStaff = \new MensuralStaff = "lowerStaff" <<
       r2
       \clef "mensural-g"
       r4 r8 r16 r16
-      \override NoteHead #'style = #'mensural
-      \override Rest #'style = #'mensural
+      \override NoteHead.style = #'mensural
+      \override Rest.style = #'mensural
       \clef "petrucci-f"
       c8 b, c16 b, c32 b, c64 b, c64 b,
       d8 e d16 e d32 e d64 e d64 e
@@ -210,23 +210,23 @@ lowerStaff = \new MensuralStaff = "lowerStaff" <<
     }
     \context {
       \MensuralVoice
-      \override NoteHead #'style = #'neomensural
-      \override Rest #'style = #'neomensural
-      \override Flag #'style = #'mensural
-      \override Stem #'thickness = #1.0
+      \override NoteHead.style = #'neomensural
+      \override Rest.style = #'neomensural
+      \override Flag.style = #'mensural
+      \override Stem.thickness = #1.0
     }
     \context {
       \MensuralStaff
-      \revert  BarLine #'transparent
-      \override KeySignature #'glyph-name-alist = #alteration-mensural-glyph-name-alist
+      \revert  BarLine.transparent
+      \override KeySignature.glyph-name-alist = #alteration-mensural-glyph-name-alist
       clefGlyph = #"clefs.petrucci.c2"
     }
     \context {
       \VaticanaStaff
-      \revert  BarLine #'transparent
-      \override StaffSymbol #'thickness = #2.0
-      \override KeySignature #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
-      \override Custos #'neutral-position = #4
+      \revert  BarLine.transparent
+      \override StaffSymbol.thickness = #2.0
+      \override KeySignature.glyph-name-alist = #alteration-vaticana-glyph-name-alist
+      \override Custos.neutral-position = #4
     }
   }
 }
index efdb39ae3356fc91bdf49eddb99bf34aff35e283..fbab93e75f1193105c57a6a6e5d735c2ae285472 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.30
+\version "2.17.30"
 
 \header {
   lsrtags = "vocal-music, ancient-notation, template"
@@ -44,12 +44,11 @@ verba = \lyricmode {
       \Staff
       \remove "Time_signature_engraver"
       \remove "Bar_engraver"
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
+      \hide Stem
     }
     \context {
       \Voice
-      \override Stem #'length = #0
+      \override Stem.length = #0
     }
     \context {
       \Score
index 9b7029cc2863c96e1469981902ab9d40d9da0b56..f9867cb5d6c616642e2e9e537ea3f387d682cab5 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "ancient-notation, real-music, really-cool, template"
@@ -27,18 +27,18 @@ global = {
   \set Score.skipBars = ##t
 
   % incipit
-  \once \override Score.SystemStartBracket #'transparent = ##t
+  \once \hide Score.SystemStartBracket
    % Set tight spacing
-  \override Score.SpacingSpanner #'spacing-increment = #1.0
+  \override Score.SpacingSpanner.spacing-increment = #1.0
   \key f \major
   \time 2/2
-  \once \override Staff.TimeSignature #'style = #'neomensural
-  \override Voice.NoteHead #'style = #'neomensural
-  \override Voice.Rest #'style = #'neomensural
+  \once \override Staff.TimeSignature.style = #'neomensural
+  \override Voice.NoteHead.style = #'neomensural
+  \override Voice.Rest.style = #'neomensural
   \set Staff.printKeyCancellation = ##f
   \cadenzaOn % turn off bar lines
   \skip 1*10
-  \once \override Staff.BarLine #'transparent = ##f
+  \once \override Staff.BarLine.transparent = ##f
   \bar "||"
   \skip 1*1 % need this extra \skip such that clef change comes
             % after bar line
@@ -46,12 +46,12 @@ global = {
 
   % main
   \cadenzaOff % turn bar lines on again
-  \once \override Staff.Clef #'full-size-change = ##t
+  \once \override Staff.Clef.full-size-change = ##t
   \set Staff.forceClef = ##t
   \key g \major
   \time 4/4
-  \override Voice.NoteHead #'style = #'default
-  \override Voice.Rest #'style = #'default
+  \override Voice.NoteHead.style = #'default
+  \override Voice.Rest.style = #'default
 
   % Setting printKeyCancellation back to #t must not
   % occur in the first bar after the incipit.  Dto. for forceClef.
@@ -63,7 +63,7 @@ global = {
   \skip 1*7 % the actual music
 
   % let finis bar go through all staves
-  \override Staff.BarLine #'transparent = ##f
+  \override Staff.BarLine.transparent = ##f
 
   % finis bar
   \bar "|."
@@ -86,7 +86,7 @@ discantusNotes = {
     c'4 e'4.( d'8 c' b |
     a4) b a2 |
     b4.( c'8 d'4) c'4 |
-    \once \override NoteHead #'transparent = ##t c'1 |
+    \once \hide NoteHead c'1 |
     b\breve |
   }
 }
@@ -122,7 +122,7 @@ altusNotes = {
     a2 g4 e |
     fis g4.( fis16 e fis4) |
     g1 |
-    \once \override NoteHead #'transparent = ##t g1 |
+    \once \hide NoteHead g1 |
     g\breve |
   }
 }
@@ -158,7 +158,7 @@ tenorNotes = {
     R1 |
     R1 |
     r2 d'2. d'4 b e' | % two bars
-    \once \override NoteHead #'transparent = ##t e'1 |
+    \once \hide NoteHead e'1 |
     d'\breve |
   }
 }
@@ -190,7 +190,7 @@ bassusNotes = {
     R1 |
     R1 |
     g2. e4 |
-    \once \override NoteHead #'transparent = ##t e1 |
+    \once \hide NoteHead e1 |
     g\breve |
   }
 }
@@ -229,7 +229,7 @@ bassusLyrics = \lyricmode {
       \Score
 
       % no bars in staves
-      \override BarLine #'transparent = ##t
+      \hide BarLine
 
       % incipit should not start with a start delimiter
       \remove "System_start_delimiter_engraver"
@@ -238,7 +238,7 @@ bassusLyrics = \lyricmode {
       \Voice
 
       % no slurs
-      \override Slur #'transparent = ##t
+      \hide Slur
 
       % The command below can be commented out in
       % short scores, but especially for large scores you
index fc6c07fe090d44c824b031afaab8d5ea2e6a3fe8..84e12ce3dc06aa706ede0f64dab6fa9f24342217 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "ancient-notation"
@@ -20,6 +20,6 @@ Time signatures may also be engraved in an old style.
 
 
 {
-  \override Staff.TimeSignature #'style = #'neomensural
+  \override Staff.TimeSignature.style = #'neomensural
   s1
 }
index 44920dce47013d69db182f1e2f0e772f671475ed..81f5816c0a56026213f67e6a06fe3c25ce693bbe 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "template, vocal-music"
@@ -87,8 +87,7 @@ tick = \markup {
       \layout {
         \context {
           \Score
-          \override SpacingSpanner
-          #'base-shortest-duration = #(ly:make-moment 1 2)
+          \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
         }
         \context {
           \Staff
index 113ee328b7e27a225e0b6e6f1122a642dd030fdd..8cefbedea781a681efa4c942aa797b365266972c 100644 (file)
@@ -30,7 +30,6 @@ correspondence between harmonic functions and note head styles.
   doctitle = "Applying note head styles depending on the step of the scale"
 } % begin verbatim
 
-
 fragment = {
   \key c \major
   c2 d
@@ -42,7 +41,7 @@ fragment = {
 \new Staff {
   \transpose c d
   \relative c' {
-    \set shapeNoteStyles = #'#(do re mi fa
+    \set shapeNoteStyles = ##(do re mi fa
                                #f la ti)
     \fragment
   }
@@ -50,7 +49,7 @@ fragment = {
   \break
 
   \relative c' {
-    \set shapeNoteStyles = #'#(cross triangle fa #f
+    \set shapeNoteStyles = ##(cross triangle fa #f
                                mensural xcircle diamond)
     \fragment
   }
index b4354ab71777172f42e269fab21d6275b31634bb..3d1708e4556223445e1dab4c2f9e7cb87906f467 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "world-music"
@@ -25,7 +25,7 @@ of what could be the start of a hijaz improvisation:
 
 \relative sol' {
   \key re \kurd
-  \accidentalStyle "forget"
+  \accidentalStyle forget
   \cadenzaOn
   sol4 sol sol sol fad mib sol1 fad8 mib re4. r8 mib1 fad sol
 }
index 8a16d3de606fcbdbb50917076cb4ff8c7a48d2d5..2ff6e85ab8ee11224603cf655ddc810993254c34 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
@@ -24,6 +24,6 @@ slurNotes = { d,8( a' d f a f' d, a) }
   \stemDown
   \slurUp
   \slurNotes
-  \once \override Slur #'eccentricity = #3.0
+  \once \override Slur.eccentricity = #3.0
   \slurNotes
 }
index d824ef92e567f1e804e2931e4f6ea80b7b691c75..40e9e04d68ee6d365fea613b03c4af546c002210 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "automatic-notation, connecting-notes, rhythms"
@@ -34,10 +34,10 @@ specified in @code{baseMoment}).
       }
     >>
     \oneVoice
-    \set baseMoment = #(ly:make-moment 1 8)
+    \set baseMoment = #(ly:make-moment 1/8)
     \set beatStructure = #'(2 2 2 2)
     b32^"baseMoment 1 8"[ a g f c' b a g]
-    \set baseMoment = #(ly:make-moment 1 16)
+    \set baseMoment = #(ly:make-moment 1/16)
     \set beatStructure = #'(4 4 4 4)
     b32^"baseMoment 1 16"[ a g f c' b a g]
   }
diff --git a/Documentation/snippets/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly b/Documentation/snippets/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly
new file mode 100644 (file)
index 0000000..6ff6b99
--- /dev/null
@@ -0,0 +1,34 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.6"
+
+\header {
+  lsrtags = "contexts-and-engravers, pitches"
+
+  texidoc = "
+LilyPond can alter the stem direction of the middle note on a staff so
+that it follows the melody, by adding the @code{Melody_engraver} to the
+Voice context and overriding the @code{neutral-direction} of Stem.
+
+"
+  doctitle = "Automatically changing the stem direction of the middle note based on the melody"
+} % begin verbatim
+
+\relative c'' {
+  \time 3/4
+  \autoBeamOff
+  a8 b g f b g |
+  c b d c b c
+}
+
+\layout {
+  \context {
+    \Voice
+    \consists "Melody_engraver"
+    \override Stem.neutral-direction = #'()
+  }
+}
index c726e375550a7219e9d3737a0c69084884982227..9af5fffa99995a2950d7f2526faf37c281f1e73e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "chords, editorial-annotations, rhythms, tweaks-and-overrides"
@@ -34,10 +34,10 @@ overridden.
 
   % Corrected to avoid collisions
   r8
-  \override Fingering #'add-stem-support = ##t
+  \override Fingering.add-stem-support = ##t
   <f c'-5>8
-  \override StringNumber #'add-stem-support = ##t
+  \override StringNumber.add-stem-support = ##t
   <f c'\5>8
-  \override StrokeFinger #'add-stem-support = ##t
+  \override StrokeFinger.add-stem-support = ##t
   <f c'-\rightHandFinger #2 >8
 }
index 8946b8a29c3d6393ba3059823ced3c554fb18870..a1e72321872dae356e64af20db20febb79a7c491 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.30
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "chords, fretted-strings"
@@ -42,12 +42,12 @@ bbarre =
                  (cons (make-music 'TextSpanEvent 'span-direction 1)
                        (ly:music-property last-element 'articulations))))))
    #{
-       \once \override TextSpanner #'font-size = #-2
-       \once \override TextSpanner #'font-shape = #'upright
-       \once \override TextSpanner #'staff-padding = #3
-       \once \override TextSpanner #'style = #'line
-       \once \override TextSpanner #'to-barline = ##f
-       \once \override TextSpanner #'bound-details =
+       \once \override TextSpanner.font-size = #-2
+       \once \override TextSpanner.font-shape = #'upright
+       \once \override TextSpanner.staff-padding = #3
+       \once \override TextSpanner.style = #'line
+       \once \override TextSpanner.to-barline = ##f
+       \once \override TextSpanner.bound-details =
             #`((left
                 (text . ,#{ \markup { \draw-line #'( 0 . -.5) } #})
                 (Y . 0)
@@ -59,7 +59,7 @@ bbarre =
                 (padding . 0.25)
                 (attach-dir . 2)))
 %% uncomment this line for make full barred
-       % \once  \override TextSpanner #'bound-details #'left #'text =  \markup { "B" #str }
+       % \once  \override TextSpanner.bound-details.left.text =  \markup { "B" #str }
        $music
    #})
 
index d5b9e07ea93cd0c4f73828fa57c8871db66832d4..a09e8853d06277e3d1fbb12e29b229982924f3fb 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "rhythms"
@@ -22,7 +22,7 @@ levels:
 \relative c'' {
   \time 5/4
   % Set default beaming for all staves
-  \set Score.baseMoment = #(ly:make-moment 1 8)
+  \set Score.baseMoment = #(ly:make-moment 1/8)
   \set Score.beatStructure = #'(3 4 3)
   <<
     \new Staff {
index db8da453b26ff942f463f35ff0e6f38496f52ca9..1b60a49d41b2c8c2432be6b20ef69d657f5d38bb 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms"
@@ -19,7 +19,7 @@ behavior can be changed as shown:
 
 
 \relative c'' {
-  \override Beam #'breakable = ##t
+  \override Beam.breakable = ##t
   c8 c[ c] c[ c] c[ c] c[ \break
   c8] c[ c] c[ c] c[ c] c
 }
index 58cbc13c6407e9df270c92ec1a98fd076be021ab..c9139bafb1f52c1702be5ee2dec65f48fb437744 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, really-cool, text"
@@ -21,6 +21,6 @@ white box will not overlap any other grob.
 
 \layout { ragged-right = ##f }
 \relative c' {
-  \override TextScript #'extra-offset = #'(2 . 4)
+  \override TextScript.extra-offset = #'(2 . 4)
   c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c
 }
index be5b8c08658d3c38f2d0d39820c926e1951bedd0..c1af6d24dae150e249a5c20eeb5200fbf358fb72 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, symbols-and-glyphs"
@@ -25,20 +25,20 @@ ticks, vees and @qq{railroad tracks} (caesura).
   << { g4 as g } \\ { es4 bes es } >> |
   % Modern notation:
   % by default, \breathe uses the rcomma, just as if saying:
-  % \override BreathingSign #'text = #(make-musicglyph-markup "scripts.rcomma")
+  % \override BreathingSign.text = #(make-musicglyph-markup "scripts.rcomma")
   << { g4 as g } \\ { es4 \breathe bes es } >> |
 
   % rvarcomma and lvarcomma are variations of the default rcomma and lcomma
   % N.B.: must use Staff context here, since we start a Voice below
-  \override Staff.BreathingSign #'text = \markup { \musicglyph #"scripts.rvarcomma" }
+  \override Staff.BreathingSign.text = \markup { \musicglyph #"scripts.rvarcomma" }
   << { g4 as g } \\ { es4 \breathe bes es } >> |
 
   % vee
-  \override BreathingSign #'text = \markup { \musicglyph #"scripts.upbow" }
+  \override BreathingSign.text = \markup { \musicglyph #"scripts.upbow" }
   es8[ d es f g] \breathe f |
 
   % caesura
-  \override BreathingSign #'text = \markup { \musicglyph #"scripts.caesura.curved" }
+  \override BreathingSign.text = \markup { \musicglyph #"scripts.caesura.curved" }
   es8[ d] \breathe es[ f g f] |
   es2 r4 \bar "||"
 }
index b21fc6e7929fc8847dce5edcdd85809993272811..68960a584034a088585dece16ea64f49fadc32f0 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
 
 \header {
   lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
   texidoc = "
 In order to make parts of a crescendo hairpin invisible, the following
 method is used: A white rectangle is drawn on top of the respective
-part of the crescendo hairpin, making it invisible.  The rectangle is
-defined as postscript code within a text markup.
-
-To fine-tune the position and size of the markup, the number preceding
-@code{setgray} in the postscript definition can be set to a value less
-than one, making it grey.  The two numbers before @code{scale} in the
-postscript code are responsible for the width and height of the
-rectangle, the two numbers before @code{translate} change the x- and
-y-origin of the rectangle.
+part of the crescendo hairpin, making it invisible.
 
+The markup command @code{with-dimensions} tells LilyPond to consider only
+the bottom edge of the rectangle when spacing it against the hairpin.
+The property @code{staff-padding} prevents the rectangle from fitting
+between the hairpin and staff.
 
 Make sure to put the hairpin in a lower layer than the text markup to
 draw the rectangle over the hairpin.
@@ -35,26 +32,18 @@ draw the rectangle over the hairpin.
   <<
     {
       \dynamicUp
-      \override DynamicLineSpanner #'staff-padding = #4
       r2 r16 c'8.\pp r4
     }
     \\
     {
-      \override DynamicLineSpanner #'layer = #0
+      \override DynamicLineSpanner.layer = #0
       des,2\mf\< ~
-      \override TextScript #'layer = #2
-      des16_\markup {
-        \postscript #"
-          1.9 -8 translate
-          5 4 scale
-          1 setgray
-          0 0 moveto
-          0 1 lineto
-          1 1 lineto
-          1 0 lineto
-          0 0 lineto
-          fill"
-      }
+      \override TextScript.layer = #2
+      \once\override TextScript.staff-padding = #6
+      \once\override TextScript.vertical-skylines = #'()
+      des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
+                    \with-color #white
+                    \filled-box #'(2 . 7) #'(0 . 2) #0
       r8. des4 ~ des16->\sff
     }
   >>
index befcd7ab02d8579aefe1ed4455db1228a1d0cf1f..c42000b8af319116f9f75fd2a88ca33a8a02e01a 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, symbols-and-glyphs, tweaks-and-overrides"
@@ -22,7 +22,7 @@ pleasing combination of railtracks and fermata.
 \relative c'' {
   c2.
   % construct the symbol
-  \override BreathingSign #'text = \markup {
+  \override BreathingSign.text = \markup {
     \line {
       \musicglyph #"scripts.caesura.curved"
       \translate #'(-1.75 . 1.6)
@@ -31,7 +31,7 @@ pleasing combination of railtracks and fermata.
   }
   \breathe c4
   % set the breathe mark back to normal
-  \revert BreathingSign #'text
+  \revert BreathingSign.text
   c2. \breathe c4
   \bar "|."
 }
index 4f2eb369260787696decd0d6ee9f53c3e4c1ea79..67e197227006f1dd368930a9ea1b8545ab881f3c 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, really-cool, scheme-language, text"
@@ -12,6 +12,9 @@
   texidoc = "
 This example provides a function to typeset a hairpin (de)crescendo
 with some additional text below it, such as @qq{molto} or @qq{poco}.
+The added text will change the direction according to the direction of
+the hairpin. The Hairpin is aligned to DynamicText.
+
 The example also illustrates how to modify the way an object is
 normally printed, using some Scheme code.
 
@@ -19,21 +22,49 @@ normally printed, using some Scheme code.
   doctitle = "Center text below hairpin dynamics"
 } % begin verbatim
 
-
 hairpinWithCenteredText =
 #(define-music-function (parser location text) (markup?)
 #{
-  \override Voice.Hairpin #'stencil = #(lambda (grob)
-    (ly:stencil-aligned-to
-     (ly:stencil-combine-at-edge
-      (ly:stencil-aligned-to (ly:hairpin::print grob) X CENTER)
-      Y DOWN
-      (ly:stencil-aligned-to (grob-interpret-markup grob text) X CENTER))
-     X LEFT))
+  \once \override Voice.Hairpin.after-line-breaking =
+    #(lambda (grob)
+      (let* ((stencil (ly:hairpin::print grob))
+             (par-y (ly:grob-parent grob Y))
+             (dir (ly:grob-property par-y 'direction))
+             (new-stencil (ly:stencil-aligned-to
+               (ly:stencil-combine-at-edge
+                 (ly:stencil-aligned-to stencil X CENTER)
+                 Y dir
+                 (ly:stencil-aligned-to (grob-interpret-markup grob text) X CENTER))
+               X LEFT))
+             (staff-space (ly:output-def-lookup (ly:grob-layout grob) 'staff-space))
+             (staff-line-thickness
+               (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
+             (grob-name (lambda (x) (assq-ref (ly:grob-property x 'meta) 'name)))
+             (par-x (ly:grob-parent grob X))
+             (dyn-text (eq? (grob-name par-x) 'DynamicText ))
+             (dyn-text-stencil-x-length
+               (if dyn-text
+                 (interval-length
+                   (ly:stencil-extent (ly:grob-property par-x 'stencil) X))
+                 0))
+             (x-shift
+               (if dyn-text
+                 (-
+                   (+ staff-space dyn-text-stencil-x-length)
+                   (* 0.5 staff-line-thickness)) 0)))
+
+      (ly:grob-set-property! grob 'Y-offset 0)
+      (ly:grob-set-property! grob 'stencil
+         (ly:stencil-translate-axis
+          new-stencil
+          x-shift X))))
 #})
 
-hairpinMolto = \hairpinWithCenteredText \markup { \italic molto }
-hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo }
+hairpinMolto =
+\hairpinWithCenteredText \markup { \italic molto }
+
+hairpinMore =
+\hairpinWithCenteredText \markup { \larger moltissimo }
 
 \layout { ragged-right = ##f }
 
@@ -41,5 +72,10 @@ hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo }
   \hairpinMolto
   c2\< c\f
   \hairpinMore
-  c2\< c\f
+  c2\ppppp\< c\f
+  \break
+  \hairpinMolto
+  c2^\< c\f
+  \hairpinMore
+  c2\ppppp\< c\f
 }
diff --git a/Documentation/snippets/centered-measure-numbers.ly b/Documentation/snippets/centered-measure-numbers.ly
new file mode 100644 (file)
index 0000000..490fde1
--- /dev/null
@@ -0,0 +1,56 @@
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.7
+\version "2.17.7"
+
+\header {
+  lsrtags = "contexts-and-engravers, repeats, staff-notation"
+
+  texidoc = "
+Scores of large ensemble works often have bar numbers placed beneath the
+system, centered horizontally on the measure's extent.  This snippet shows
+how the @code{Measure_counter_engraver} may be used to simulate this
+notational practice.  Here, the engraver has been added to a @code{Dynamics}
+context.
+
+"
+
+  doctitle = "Centered measure numbers"
+} % begin verbatim
+
+
+\layout {
+  \context {
+    \Dynamics
+    \consists #Measure_counter_engraver
+    \override MeasureCounter.direction = #DOWN
+    \override MeasureCounter.font-encoding = #'latin1
+    \override MeasureCounter.font-shape = #'italic
+    % to control the distance of the Dynamics context from the staff:
+    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
+  }
+  \context {
+    \Score
+    \remove "Bar_number_engraver"
+  }
+}
+
+pattern = \repeat unfold 7 { c'4 d' e' f' }
+
+\new StaffGroup <<
+  \new Staff {
+    \pattern
+  }
+  \new Staff {
+    \pattern
+  }
+  \new Dynamics {
+    \startMeasureCount
+    s1*7
+    \stopMeasureCount
+  }
+>>
index 36f83dd4a7a2c9971c95cf69066211eb77caff0a..b5342b4131087cb01e02db78f097b8bbe0e1352d 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.31
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "text, tweaks-and-overrides, contexts-and-engravers"
@@ -47,15 +47,15 @@ been shifted via @code{force-hshift}.
   \context {
     \Voice
     \consists #Text_align_engraver
-    \override TextScript #'X-offset =
+    \override TextScript.X-offset =
       #ly:self-alignment-interface::aligned-on-x-parent
-    \override TextScript #'self-alignment-X = #CENTER
+    \override TextScript.self-alignment-X = #CENTER
   }
 }
 
 \new Staff <<
   \relative c'' {
-    \override NoteColumn #'force-hshift = #3
+    \override NoteColumn.force-hshift = #3
     c1-\markup { \arrow-head #Y #DOWN ##t }
   }
   \\
index c9b51f780ee28e90cdac1d779b84e34f9b93e242..741edb8388c023baa88f9313ca48c7bec6cad62d 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, really-simple, simultaneous-notes, specific-notation, tweaks-and-overrides"
@@ -28,5 +28,5 @@ note head).
 
 
 \relative c' {
-  <\tweak #'font-size #+2 c e g c \tweak #'font-size #-2 e>1^\markup { A tiny e }_\markup { A big c }
+  <\tweak font-size #+2 c e g c \tweak font-size #-2 e>1^\markup { A tiny e }_\markup { A big c }
 }
index 3bd380f2c74daffb747cbfbe5b71c9e8087ddfb5..6409e4b15d31b8eca58caa87c205ef6652658641 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms"
@@ -25,6 +25,6 @@ spaces.
 
 {
   f8 f''8 f8 f''8
-  \override Beam #'auto-knee-gap = #6
+  \override Beam.auto-knee-gap = #6
   f8 f''8 f8 f''8
 }
index 38840626060d549417bbcca76c892c254953f1f2..118341b7a8a8acc192c31b6b0b3ec15b28620fe9 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -24,6 +24,6 @@ default number of ten may be changed by overriding the
 \relative c'' {
   \compressFullBarRests
   R1*2 | R1*5 | R1*9
-  \override MultiMeasureRest #'expand-limit = #3
+  \override MultiMeasureRest.expand-limit = #3
   R1*2 | R1*5 | R1*9
 }
index f0bbabd21576c4e96dea98215154095bce1a5b76..b174cb5bd84b25e691639f72afe775a87e5888dd 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "fretted-strings"
@@ -29,10 +29,10 @@ or fret in the different orientations will be aligned.
   \new FretBoards {
     \chordmode {
       c1
-      \override FretBoard #'(fret-diagram-details orientation) =
+      \override FretBoard.fret-diagram-details.orientation =
         #'landscape
       c1
-      \override FretBoard #'(fret-diagram-details orientation) =
+      \override FretBoard.fret-diagram-details.orientation =
         #'opposing-landscape
       c1
     }
index ceea216ef269f2b8d726385d7f3dc6ef0dbe84a5..4ef7475f41f5f34362edda04ca388ed4925d0f70 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "really-simple, vocal-music"
@@ -28,8 +28,8 @@ used for printing the stanza number.
   Hi, my name is Bert.
 }
 \addlyrics {
-  \override StanzaNumber #'font-name = #"DejaVu"
+  \override StanzaNumber.font-name = #"DejaVu"
   \set stanza = #"2. "
-  \override LyricText #'font-family = #'typewriter
+  \override LyricText.font-family = #'typewriter
   Oh, ché -- ri, je t'aime
 }
index 31434e5d019e7bbdf82b7d886ac322bd1f17f0e5..002aaf7216b57a008ba17664034236b9f1808256 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
@@ -27,7 +27,7 @@ is @code{'dashed-line}, and other possible values include @code{'line},
 \relative c'' {
   \set crescendoText = \markup { \italic { cresc. poco } }
   \set crescendoSpanner = #'text
-  \override DynamicTextSpanner #'style = #'dotted-line
+  \override DynamicTextSpanner.style = #'dotted-line
   a2\< a
   a2 a
   a2 a
index 3fe9208c41542fb6ac158b4228c31a5bf9d0caf2..7d13dc3b0669b4327ce271b5c6339edb057077b0 100644 (file)
@@ -4,13 +4,14 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "pitches"
 
   texidoc = "
-It is possible to change the default gap setting for ambitus.
+It is possible to change the default gap between the ambitus noteheads
+and the line joining them.
 
 "
   doctitle = "Changing the ambitus gap"
@@ -31,18 +32,18 @@ It is possible to change the default gap setting for ambitus.
 
 \new Staff {
   \time 2/4
-  \override AmbitusLine #'gap = #0
+  \override AmbitusLine.gap = #0
   c'4 g''
 }
 
 \new Staff {
   \time 2/4
-  \override AmbitusLine #'gap = #1
+  \override AmbitusLine.gap = #1
   c'4 g''
 }
 
 \new Staff {
   \time 2/4
-  \override AmbitusLine #'gap = #1.5
+  \override AmbitusLine.gap = #1.5
   c'4 g''
 }
index 8b51aea49a32113077de2b6199fe1b8056053d68..33978945b0fe86346959fdded696b52ca2b6c978 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks"
@@ -20,7 +20,7 @@ text.
 
 \relative c'' {
   c2
-  \override BreathingSign #'text =
+  \override BreathingSign.text =
     \markup { \musicglyph #"scripts.rvarcomma" }
   \breathe
   d2
index 6040c76cd19a0853966d13a5c40afc4b8b0dd246..38764d36f3f3ed3a4d939cb22275db211c2834fb 100644 (file)
@@ -4,14 +4,14 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, rhythms"
 
   texidoc = "
-This code demonstrates how to change the number of augmentation dots on
-a single note.
+The number of augmentation dots on a single note can be changed
+indepently of the dots placed after the note.
 
 "
   doctitle = "Changing the number of augmentation dots per note"
@@ -19,10 +19,10 @@ a single note.
 
 \relative c' {
   c4.. a16 r2 |
-  \override Dots #'dot-count = #4
+  \override Dots.dot-count = #4
   c4.. a16 r2 |
-  \override Dots #'dot-count = #0
+  \override Dots.dot-count = #0
   c4.. a16 r2 |
-  \revert Dots #'dot-count
+  \revert Dots.dot-count
   c4.. a16 r2 |
 }
index 19ab74b4496519d83f3e39b3b9bb064b19a3bb7d..c4c53e5c320b6f2301d7d0f773f4ee832b863c96 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "specific-notation, staff-notation"
@@ -36,7 +36,7 @@ lower = \relative c {
       \upper
     }
     \new Staff {
-      \override Staff.StaffSymbol #'line-count = #4
+      \override Staff.StaffSymbol.line-count = #4
       \lower
     }
   >>
index 1400f158c3f5cd2e8bd82bdd8098015e663f446e..ed30920b49eed08d4dd1aa7acc261f48e01bdcc6 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "paper-and-layout, staff-notation, tweaks-and-overrides"
@@ -29,7 +29,7 @@ changed by scaling the properties @code{'staff-space} and
   }
   \new Staff \with {
     fontSize = #-3
-    \override StaffSymbol #'staff-space = #(magstep -3)
+    \override StaffSymbol.staff-space = #(magstep -3)
   } {
     \clef bass
     c8 c c c c\f c c c
index 419f7616892be86f8c409330d70ff6d5056d6d1f..e0257869b78ebe016e8de761ffd877034f59b50b 100644 (file)
@@ -1,18 +1,18 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.30
+\version "2.17.30"
 
 \header {
   lsrtags = "rhythms"
 
   texidoc = "
 By default, only the numerator of the tuplet number is printed over the
-tuplet bracket, i.e., the denominator of the argument to the
-@code{\\times} command. Alternatively, num:den of the tuplet number may
+tuplet bracket. Alternatively, num:den of the tuplet number may
 be printed, or the tuplet number may be suppressed altogether.
 
 "
@@ -20,11 +20,12 @@ be printed, or the tuplet number may be suppressed altogether.
 } % begin verbatim
 
 
+
 \relative c'' {
-  \times 2/3 { c8 c c }
-  \times 2/3 { c8 c c }
-  \override TupletNumber #'text = #tuplet-number::calc-fraction-text
-  \times 2/3 { c8 c c }
-  \override TupletNumber #'stencil = ##f
-  \times 2/3 { c8 c c }
+  \tuplet 3/2 { c8 c c }
+  \tuplet 3/2 { c8 c c }
+  \override TupletNumber.text = #tuplet-number::calc-fraction-text
+  \tuplet 3/2 { c8 c c }
+  \omit TupletNumber
+  \tuplet 3/2 { c8 c c }
 }
index d49857c542c67e0cf927a17c2b2300a296c95205..74a6d43c10c7bbaf2a63be739f53cbd97439cfe8 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.17
-\version "2.16.0"
+%% Note: this file works from version 2.17.11
+\version "2.17.11"
 
 \header {
   lsrtags = "workaround, contexts-and-engravers, contemporary-notation, rhythms"
   \new Staff {
     \scaleDurations 8/5 {
       \time 6/8
-      \set Timing.measureLength = #(ly:make-moment 6 5)
+      \set Timing.measureLength = #(ly:make-moment 6/5)
       b8 b b b b b
       \time 2/4
-      \set Timing.measureLength = #(ly:make-moment 4 5)
+      \set Timing.measureLength = #(ly:make-moment 4/5)
       b4 b
     }
   }
index 7f9153f86d6e72ab297271e81008e440f7fd85bb..864374ec3f2a40dc6cbb918a390e23e25b6cefa5 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers, specific-notation"
@@ -19,15 +19,8 @@ aren't always the same length.
 } % begin verbatim
 
 
-stemOn = {
-  \revert Staff.Stem #'transparent
-  \revert Staff.Flag #'transparent
-}
-
-stemOff = {
-  \override Staff.Stem #'transparent = ##t
-  \override Staff.Flag #'transparent = ##t
-}
+stemOff = \hide Staff.Stem
+stemOn  = \undo \stemOff
 
 \score {
   \new Staff \with { \remove "Time_signature_engraver" }
index 0fed8b205032c1261a81e52623fab1899f6c391f..c335944a5a10708fc454136b9b5f887bb104c3d2 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.20
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "headword"
@@ -79,7 +79,7 @@ Bass = {
     \context Staff = lower {
       \new Voice {
         \clef bass
-        \accidentalStyle "modern-cautionary"
+        \accidentalStyle modern-cautionary
         <<
           \Tenor
           \Bass
@@ -96,7 +96,7 @@ Bass = {
     }
     \context {
       \Voice
-      \override StanzaNumber #'padding = #1.8
+      \override StanzaNumber.padding = #1.8
     }
   }
 }
index 05fe6f5ea60ab7003c1a153bbb19c69eac0fe62a..16ed079f6e578e48bedf99278136535810aab641 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, pitches, really-cool"
@@ -55,7 +55,7 @@ to distinguish enharmonics.
 
 \score {
   \new Staff \relative c' {
-    \override NoteHead #'color = #color-notehead
+    \override NoteHead.color = #color-notehead
     c8 b d dis ees f g aes
   }
 }
index 9005fff11aabe6d2dcf9ec3627281b212ee94640..0a8477adc57f1565ce54d8db0d7eeb19e9dacf29 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "simultaneous-notes, syntax-and-expressions, text"
@@ -65,7 +65,7 @@ musicDown = \relative c'' {
     indent = 6.0\cm
     \context {
       \Score
-      \override SystemStartBar #'collapse-height = #30
+      \override SystemStartBar.collapse-height = #30
     }
   }
 }
index da49aec5327c54897dad2e03f27a1cb62dce6320..9b1a047a5ba661b2b33af04aced1a253d84383b2 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.15
+\version "2.17.15"
 
 \header {
   lsrtags = "rhythms"
@@ -20,17 +21,9 @@ signatures and adapting the automatic beaming behavior.
   doctitle = "Compound time signatures"
 } % begin verbatim
 
-#(define ((compound-time one two num) grob)
-   (grob-interpret-markup grob
-                          (markup #:override '(baseline-skip . 0) #:number
-                                  (#:line ((#:column (one num))
-                                           #:vcenter "+"
-                                           (#:column (two num)))))))
 
 \relative c' {
-  \override Staff.TimeSignature #'stencil = #(compound-time "2" "3" "8")
-  \time 5/8
-  \set Staff.beatStructure = #'(2 3)
+  \compoundMeter #'((2 8) (3 8))
   c8 d e fis gis
   c8 fis, gis e d
   c8 d e4 gis8
index fbe2e227bb0c5076b559812152d82aff5478e995..b30f7e73931ef0aa602efd175fdbf75dba37cf25 100644 (file)
@@ -4,7 +4,7 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.19
+%% Note: this file works from version 2.16.0
 \version "2.16.0"
 
 \header {
index 46e86777edef84af77a71fca8e6c1d21e6cdc9f6..f2b61e8e8dbd9ef0eb9b1c599b1965c69de8bf9d 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms"
@@ -19,8 +19,8 @@ first bar number following line breaks.
 } % begin verbatim
 
 consistentlyLeftAlignedBarNumbers = {
-  \override Score.BarNumber #'break-visibility = #end-of-line-invisible
-  \override Score.BarNumber #'self-alignment-X =
+  \override Score.BarNumber.break-visibility = #end-of-line-invisible
+  \override Score.BarNumber.self-alignment-X =
     #(lambda (grob)
        (let ((break-dir (ly:item-break-dir grob)))
          (if (= break-dir RIGHT) RIGHT LEFT)))
index bad94e600d6c2d014c29e5db51512c68379da7df..7d9d563318bb33526d5cb0b3843727aebc62bf1e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "contemporary-notation, expressive-marks, specific-notation"
@@ -20,7 +20,7 @@ hidden note and cadenza timing.
 
 \relative c'' {
   \time 3/4
-  \override Glissando #'style = #'zigzag
+  \override Glissando.style = #'zigzag
   c4 c
   \cadenzaOn
   c4\glissando
index 2f4e1103dc2e75b730acd7d8cd49d97518772c52..c752cf87ed315ac271086897608fc463529629ba 100644 (file)
@@ -1,6 +1,8 @@
 adding-a-figured-bass-above-or-below-the-notes.ly
 adding-an-extra-staff-at-a-line-break.ly
 adding-an-extra-staff.ly
+automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly
+centered-measure-numbers.ly
 centering-markup-on-note-heads-automatically.ly
 changing-midi-output-to-one-channel-per-voice.ly
 changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly
@@ -8,9 +10,11 @@ chant-or-psalms-notation.ly
 creating-blank-staves.ly
 cross-staff-stems.ly
 defining-an-engraver-in-scheme--ambitus-engraver.ly
+displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.ly
 engravers-one-by-one.ly
 mensurstriche-layout-bar-lines-between-the-staves.ly
 nesting-staves.ly
+numbering-groups-of-measures.ly
 removing-bar-numbers-from-a-score.ly
 use-square-bracket-at-the-start-of-a-staff-group.ly
 vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly
index 794b65b8205ee85d60fb973b8bcb3c6b3cc58a95..4df07c679e00b1d4af621b2058538ecdfb7ff00b 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
@@ -28,16 +28,16 @@ be hidden by enabling the callback.
 \paper { ragged-right = ##t }
 
 \relative c'' {
-  \override Hairpin #'to-barline = ##f
-  \override Glissando #'breakable = ##t
+  \override Hairpin.to-barline = ##f
+  \override Glissando.breakable = ##t
   % show hairpin
-  \override Hairpin #'after-line-breaking = ##t
+  \override Hairpin.after-line-breaking = ##t
   % hide text span
-  \override TextSpanner #'after-line-breaking =
+  \override TextSpanner.after-line-breaking =
     #ly:spanner::kill-zero-spanned-time
   e2\<\startTextSpan
   % show glissando
-  \override Glissando #'after-line-breaking = ##t
+  \override Glissando.after-line-breaking = ##t
   f2\glissando
   \break
   f,1\!\stopTextSpan
index c1dfc67da40b8e60ebd665bf93c8a48ca6f48df8..d4091b033dea85aa784312116cfed89a28efbb0b 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
@@ -25,9 +25,9 @@ comes first.
 
 
 \relative c''' {
-  \once \override TextScript #'script-priority = #-100
+  \once \override TextScript.script-priority = #-100
   a2^\prall^\markup { \sharp }
 
-  \once \override Script #'script-priority = #-100
+  \once \override Script.script-priority = #-100
   a2^\prall^\markup { \sharp }
 }
index 7ceaf5615ef886abc0100a7012944ae8720f92bd..9c74de6b453cd25db13f1ef9ac3bfa42f30e5cdf 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -23,19 +23,19 @@ bracket), @code{#f} (never print a bracket) or @code{#'if-no-beam}
 
 
 music = \relative c'' {
-  \times 2/3 { c16[ d e } f8]
-  \times 2/3 { c8 d e }
-  \times 2/3 { c4 d e }
+  \tuplet 3/2 { c16[ d e } f8]
+  \tuplet 3/2 { c8 d e }
+  \tuplet 3/2 { c4 d e }
 }
 
 \new Voice {
   \relative c' {
     << \music s4^"default" >>
-    \override TupletBracket #'bracket-visibility = #'if-no-beam
+    \override TupletBracket.bracket-visibility = #'if-no-beam
     << \music s4^"'if-no-beam" >>
-    \override TupletBracket #'bracket-visibility = ##t
+    \override TupletBracket.bracket-visibility = ##t
     << \music s4^"#t" >>
-    \override TupletBracket #'bracket-visibility = ##f
+    \override TupletBracket.bracket-visibility = ##f
     << \music s4^"#f" >>
   }
 }
index 519275b9d98ef9fcd534282cf2c20eedf12e7a04..dba460587b29c125f96217c651538f640cf64652 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, expressive-marks, tweaks-and-overrides"
@@ -23,8 +23,8 @@ horizontally.
 
 
 \relative c'' {
-  \once \override TextScript #'avoid-slur = #'inside
-  \once \override TextScript #'outside-staff-priority = ##f
+  \once \override TextScript.avoid-slur = #'inside
+  \once \override TextScript.outside-staff-priority = ##f
   c2(^\markup \tiny \override #'(baseline-skip . 1) {
     \halign #-4
     \center-column {
index 28de0512c514c1b7e51921bb2894e0ce186a790b..22476cebfbccd592b6b3e0bdad5a403651d5ef7f 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.27
-\version "2.16.0"
+%% Note: this file works from version 2.17.11
+\version "2.17.11"
 
 \header {
   lsrtags = "pitches, real-music, really-cool, scheme-language"
@@ -25,7 +25,7 @@ Planets.
 rhythm =
 #(define-music-function (parser location p) (ly:pitch?)
    "Make the rhythm in Mars (the Planets) at the given pitch"
-  #{ \times 2/3 { $p 8 $p $p } $p 4 $p $p 8 $p $p 4 #})
+  #{ \tuplet 3/2 { $p 8 $p $p } $p 4 $p $p 8 $p $p 4 #})
 
 \new Staff {
   \time 5/4
index c1d0fb620fc3391b0f626b89591f590fa9c65b88..aaf99628423099b55ed0db33f18ead45350fd376 100644 (file)
@@ -1,48 +1,25 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.15
+\version "2.17.15"
 
 \header {
   lsrtags = "editorial-annotations, expressive-marks, scheme-language, staff-notation, tweaks-and-overrides"
 
   texidoc = "
-By default you cannot make double-digit fingering notation (i.e.
-numbers larger than 9). This is a hard coded limitation.
-
-This snippet shows two methods of creating fingerings larger than 9.
-
+Creating fingerings larger than 5 is possible.
 "
   doctitle = "Creating double-digit fingerings"
 } % begin verbatim
 
 
-ten =
-#(make-music 'FingeringEvent
-             'digit 10)
-
-fifty =
-#(make-music 'FingeringEvent
-             'digit 50)
-
-finger =
-#(define-music-function (parser location digit) (integer?)
-   (make-music 'FingeringEvent
-               'digit digit))
-
-#(define (calc-finger-without-warning grob)
-   (let* ((event (event-cause grob))
-         (digit (ly:event-property event 'digit)))
-     (number->string digit 10)))
-
 \relative c' {
-  % optional override to remove warnings for fingerings larger than 5
-  \override Fingering #'text = #calc-finger-without-warning
-  c1\ten
-  c1\fifty
-  c1-\finger #36
-  c1-\finger #29
+  c1-10
+  c1-50
+  c1-36
+  c1-29
 }
index 8f43bbff62eba84b0a0be51295af0d490a6178d2..d6299a8ca896e8e9334fcae07285cb9e86ad45ac 100644 (file)
@@ -1,9 +1,10 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.16.0
 \version "2.16.0"
 
 \header {
@@ -27,10 +28,16 @@ commands such as @code{\\dynamicUp} or @code{\\dynamicDown}.
 } % begin verbatim
 
 
-parenF = #(make-dynamic-script (markup #:line (#:normal-text #:italic
-           #:fontsize 2 "(" #:hspace -0.8 #:dynamic "f" #:normal-text
-           #:italic #:fontsize 2 ")")))
+paren =
+#(define-event-function (parser location dyn) (ly:event?)
+   (make-dynamic-script
+    #{ \markup \concat {
+         \normal-text \italic \fontsize #2 (
+        \pad-x #0.2 #(ly:music-property dyn 'text)
+        \normal-text \italic \fontsize #2 )
+       }
+    #}))
 
 \relative c'' {
-  c4\parenF c c \dynamicUp c\parenF
+  c4\paren\f c c \dynamicUp c\paren\p
 }
index 9bbac345084a1d5c4725380b50f97f1d1068869e..eefa6f59173c3c4750ea372e5aeccfe8963b1c9a 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "expressive-marks, text, tweaks-and-overrides"
@@ -24,21 +24,21 @@ end of one system and the start of the following system.
 {
   \key a \major
   \set Score.markFormatter = #format-mark-box-letters
-  \once \override Score.RehearsalMark #'outside-staff-priority = #5000
-  \once \override Score.RehearsalMark #'self-alignment-X = #LEFT
-  \once \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+  \once \override Score.RehearsalMark.outside-staff-priority = #5000
+  \once \override Score.RehearsalMark.self-alignment-X = #LEFT
+  \once \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
   \mark \markup { \bold { Senza denti } }
 
   % the hidden measure and bar line
   % \cadenzaOn turns off automatic calculation of bar numbers
   \cadenzaOn
-  \once \override Score.TimeSignature #'stencil = ##f
+  \once \omit Score.TimeSignature
   \time 1/16
   s16 \bar ""
   \cadenzaOff
 
   \time 4/4
-  \once \override Score.RehearsalMark #'self-alignment-X = #LEFT
+  \once \override Score.RehearsalMark.self-alignment-X = #LEFT
   \mark \markup { \box \bold Intro }
   d'1
   \mark \default
index ee587e14efe2e1d5ec33c194e5ec835a4fc2cee3..5e18e550e2936019fde484e5acf52538dcf0ff33 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, text, tweaks-and-overrides"
@@ -23,34 +23,33 @@ to modify its output.
 \paper { ragged-right = ##f }
 
 \relative c'' {
-  \override TextSpanner #'(bound-details left text) = #"bla"
-  \override TextSpanner #'(bound-details right text) = #"blu"
+  \override TextSpanner.bound-details.left.text = #"bla"
+  \override TextSpanner.bound-details.right.text = #"blu"
   a4 \startTextSpan
   b4 c
   a4 \stopTextSpan
 
-  \override TextSpanner #'style = #'line
-  \once \override TextSpanner
-    #'(bound-details left stencil-align-dir-y) = #CENTER
+  \override TextSpanner.style = #'line
+  \once \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
   a4 \startTextSpan
   b4 c
   a4 \stopTextSpan
 
-  \override TextSpanner #'style = #'dashed-line
-  \override TextSpanner #'(bound-details left text) =
+  \override TextSpanner.style = #'dashed-line
+  \override TextSpanner.bound-details.left.text =
     \markup { \draw-line #'(0 . 1) }
-  \override TextSpanner #'(bound-details right text) =
+  \override TextSpanner.bound-details.right.text =
     \markup { \draw-line #'(0 . -2) }
-  \once \override TextSpanner #'(bound-details right padding) = #-2
+  \once \override TextSpanner.bound-details.right.padding = #-2
 
   a4 \startTextSpan
   b4 c
   a4 \stopTextSpan
 
   \set Staff.middleCPosition = #-13
-  \override TextSpanner #'dash-period = #10
-  \override TextSpanner #'dash-fraction = #0.5
-  \override TextSpanner #'thickness = #10
+  \override TextSpanner.dash-period = #10
+  \override TextSpanner.dash-fraction = #0.5
+  \override TextSpanner.thickness = #10
   a4 \startTextSpan
   b4 c
   a4 \stopTextSpan
index 1c3817bbf25bcd1a63b54b772c55aa57c476aad3..cb4ec966af60d2cecfad24d90c23f89aad0071df 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "chords, keyboards, tweaks-and-overrides, workaround"
@@ -15,7 +15,7 @@ cross-staff chords, because no problems with automatic beam collision
 avoidance then arise.  If the stems from the lower staff were used in
 the following example, it would be necessary to change the automatic
 beam collision avoidance settings so that it doesn't detect collisions
-between staves using @code{\\override Staff.Beam #'collision-voice-only
+between staves using @code{\\override Staff.Beam.collision-voice-only
 = ##t}
 
 "
@@ -28,17 +28,17 @@ between staves using @code{\\override Staff.Beam #'collision-voice-only
     \relative c' {
       <<
         { r4
-          \override Stem #'cross-staff = ##t
-          \override Stem #'length = #19 % this is in half-spaces,
+          \override Stem.cross-staff = ##t
+          \override Stem.length = #19 % this is in half-spaces,
               % so it makes stems 9.5 staffspaces long
-          \override Stem #'Y-offset = #-6 % stems are normally lengthened
+          \override Stem.Y-offset = #-6 % stems are normally lengthened
               % upwards, so here we must lower the stem by the amount
               % equal to the lengthening - in this case (19 - 7) / 2
               % (7 is default stem length)
           e e e }
         { s4
           \change Staff = "bottom"
-          \override NoteColumn #'ignore-collision = ##t
+          \override NoteColumn.ignore-collision = ##t
           c, c c
         }
       >>
index 1431461cf30e82637dc598b1e17cbd75dcfad255..cfcc9ef0d0394d657e58621933c1579ee6bb1906 100644 (file)
@@ -4,7 +4,7 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.42
+%% Note: this file works from version 2.16.0
 \version "2.16.0"
 
 \header {
index 6a4afbd601db333b94a424960ec42ed4d4b420f2..b653e146ac31d4649d2b4237277033b16a9b562b 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "ancient-notation, specific-notation, symbols-and-glyphs, tweaks-and-overrides"
@@ -20,21 +20,21 @@ Custodes may be engraved in various styles.
 \layout { ragged-right = ##t }
 
 \new Staff \with { \consists "Custos_engraver" } \relative c' {
-  \override Staff.Custos #'neutral-position = #4
+  \override Staff.Custos.neutral-position = #4
 
-  \override Staff.Custos #'style = #'hufnagel
+  \override Staff.Custos.style = #'hufnagel
   c1^"hufnagel" \break
   <d a' f'>1
 
-  \override Staff.Custos #'style = #'medicaea
+  \override Staff.Custos.style = #'medicaea
   c1^"medicaea" \break
   <d a' f'>1
 
-  \override Staff.Custos #'style = #'vaticana
+  \override Staff.Custos.style = #'vaticana
   c1^"vaticana" \break
   <d a' f'>1
 
-  \override Staff.Custos #'style = #'mensural
+  \override Staff.Custos.style = #'mensural
   c1^"mensural" \break
   <d a' f'>1
 }
index e0e335621f355005ae9e2afd20a63b988303b920..f9d5816c3716fa9af9d9e956682effbd64e67487 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "fretted-strings, tweaks-and-overrides"
@@ -31,42 +31,27 @@ can be omitted in property overrides.
   }
   \new FretBoards {
     % Set global properties of fret diagram
-    \override FretBoards.FretBoard #'size = #'1.2
-    \override FretBoard
-      #'(fret-diagram-details finger-code) = #'in-dot
-    \override FretBoard
-      #'(fret-diagram-details dot-color) = #'white
+    \override FretBoards.FretBoard.size = #'1.2
+    \override FretBoard.fret-diagram-details.finger-code = #'in-dot
+    \override FretBoard.fret-diagram-details.dot-color = #'white
     \chordmode {
       c
-      \once \override FretBoard #'size = #'1.0
-      \once \override FretBoard
-        #'(fret-diagram-details barre-type) = #'straight
-      \once \override FretBoard
-        #'(fret-diagram-details dot-color) = #'black
-      \once \override FretBoard
-        #'(fret-diagram-details finger-code) = #'below-string
+      \once \override FretBoard.size = #'1.0
+      \once \override FretBoard.fret-diagram-details.barre-type = #'straight
+      \once \override FretBoard.fret-diagram-details.dot-color = #'black
+      \once \override FretBoard.fret-diagram-details.finger-code = #'below-string
       c'
-      \once \override FretBoard
-        #'(fret-diagram-details barre-type) = #'none
-      \once \override FretBoard
-        #'(fret-diagram-details number-type) = #'arabic
-      \once \override FretBoard
-        #'(fret-diagram-details orientation) = #'landscape
-      \once \override FretBoard
-        #'(fret-diagram-details mute-string) = #"M"
-      \once \override FretBoard
-        #'(fret-diagram-details label-dir) = #LEFT
-      \once \override FretBoard
-        #'(fret-diagram-details dot-color) = #'black
+      \once \override FretBoard.fret-diagram-details.barre-type = #'none
+      \once \override FretBoard.fret-diagram-details.number-type = #'arabic
+      \once \override FretBoard.fret-diagram-details.orientation = #'landscape
+      \once \override FretBoard.fret-diagram-details.mute-string = #"M"
+      \once \override FretBoard.fret-diagram-details.label-dir = #LEFT
+      \once \override FretBoard.fret-diagram-details.dot-color = #'black
       c'
-      \once \override FretBoard
-        #'(fret-diagram-details finger-code) = #'below-string
-      \once \override FretBoard
-        #'(fret-diagram-details dot-radius) = #0.35
-      \once \override FretBoard
-        #'(fret-diagram-details dot-position) = #0.5
-      \once \override FretBoard
-        #'(fret-diagram-details fret-count) = #3
+      \once \override FretBoard.fret-diagram-details.finger-code = #'below-string
+      \once \override FretBoard.fret-diagram-details.dot-radius = #0.35
+      \once \override FretBoard.fret-diagram-details.dot-position = #0.5
+      \once \override FretBoard.fret-diagram-details.fret-count = #3
       d
     }
   }
index 77c3004edad05c4ed25a6d48b0623d1493248926..57032ef0fd226deddea079e835a7f87ea479ce73 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "fretted-strings, tweaks-and-overrides"
@@ -26,11 +26,9 @@ markup.
   \new Voice = "mel" {
     \textLengthOn
     % Set global properties of fret diagram
-    \override TextScript #'size = #'1.2
-    \override TextScript
-      #'(fret-diagram-details finger-code) = #'in-dot
-    \override TextScript
-      #'(fret-diagram-details dot-color) = #'white
+    \override TextScript.size = #'1.2
+    \override TextScript.fret-diagram-details.finger-code = #'in-dot
+    \override TextScript.fret-diagram-details.dot-color = #'white
 
     %% C major for guitar, no barre, using defaults
        % terse style
index 8ffb32fee65e35db6528e9ed815388b0801f835e..50ff9bc0cda6324f42da991d69ae65a725c612b1 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations"
@@ -20,8 +20,8 @@ by the @code{Stem} property @code{neutral-direction}.
 
 \relative c'' {
   a4 b c b
-  \override Stem #'neutral-direction = #up
+  \override Stem.neutral-direction = #up
   a4 b c b
-  \override Stem #'neutral-direction = #down
+  \override Stem.neutral-direction = #down
   a4 b c b
 }
index 3546a1ec0e30d1ac791be8d53a7e5ec490bf6d9f..88efc8c20f6c8bdca90cd4a1bf4edeab90fb6b8c 100644 (file)
@@ -4,7 +4,7 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.31
+%% Note: this file works from version 2.16.0
 \version "2.16.0"
 
 \header {
index 6045697b5a527a874d18576de89ed6402250231c..6ba7858ccae789864e508d03831ba242f27aaea6 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "fretted-strings"
@@ -94,8 +94,7 @@ primeros = {
       \set Staff.stringTunings = #cuatroTuning
 %      \override FretBoard
 %        #'(fret-diagram-details string-count) = #'4
-      \override FretBoard
-        #'(fret-diagram-details finger-code) = #'in-dot
+      \override FretBoard.fret-diagram-details.finger-code = #'in-dot
       \primeros
     }
 
@@ -109,8 +108,7 @@ primeros = {
   \layout {
     \context {
       \Score
-      \override SpacingSpanner
-        #'base-shortest-duration = #(ly:make-moment 1 16)
+      \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
     }
   }
   \midi { }
index 7af25ba2be46e67eec3d8a07d3d910195441cb8e..94d61a4be575b90d6d6ca6de8b0343806b2d9497 100644 (file)
@@ -4,16 +4,17 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "staff-notation, tweaks-and-overrides"
 
   texidoc = "
 If there is only one staff in one of the staff types @code{ChoirStaff}
-or @code{StaffGroup}, the bracket and the starting bar line will not be
-displayed as standard behavior.  This can be changed by overriding the
-relevant properties.
+or @code{StaffGroup}, by default the bracket and the starting bar line
+will not be displayed.  This can be changed by overriding
+@code{collapse-height} to set its value to be less than the number of
+staff lines in the staff.
 
 Note that in contexts such as @code{PianoStaff} and @code{GrandStaff}
 where the systems begin with a brace instead of a bracket, another
@@ -23,28 +24,22 @@ property has to be set, as shown on the second system in the example.
   doctitle = "Display bracket with only one staff in a system"
 } % begin verbatim
 
-
-\markup \left-column {
-  \score {
-    \new StaffGroup <<
-      % Must be lower than the actual number of staff lines
-      \override StaffGroup.SystemStartBracket #'collapse-height = #1
-      \override Score.SystemStartBar #'collapse-height = #1
-      \new Staff {
-        c'1
-      }
-    >>
-    \layout { }
-  }
-  \null
-  \score {
-    \new PianoStaff <<
-      \override PianoStaff.SystemStartBrace #'collapse-height = #1
-      \override Score.SystemStartBar #'collapse-height = #1
-      \new Staff {
-        c'1
-      }
-    >>
-    \layout { }
-  }
+\score {
+  \new StaffGroup <<
+    % Must be lower than the actual number of staff lines
+    \override StaffGroup.SystemStartBracket.collapse-height = #4
+    \override Score.SystemStartBar.collapse-height = #4
+    \new Staff {
+      c'1
+    }
+  >>
+}
+\score {
+  \new PianoStaff <<
+    \override PianoStaff.SystemStartBrace.collapse-height = #4
+    \override Score.SystemStartBar.collapse-height = #4
+    \new Staff {
+      c'1
+    }
+  >>
 }
diff --git a/Documentation/snippets/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.ly b/Documentation/snippets/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.ly
new file mode 100644 (file)
index 0000000..bb20ae2
--- /dev/null
@@ -0,0 +1,76 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.15"
+
+\header {
+  lsrtags = "contexts-and-engravers"
+
+  texidoc = "
+In orchestral scores sometimes single or groups of instruments are
+silent for a while and their staves can be removed for that time (with
+@code{\\removeEmptyStaves}).
+
+
+When they play again it is often preferred to show the staves of all
+instruments of such a group. this can be done adding the
+@code{Keep_alive_together_engraver} in the grouper (e.g. a GrandStaff
+or a StaffGroup)
+
+
+In the example the violins are silent in the 2nd system and in the 3rd
+system. Only the first violin plays the last measure but the staff of
+the second violin is also displayed.
+
+"
+  doctitle = "Displaying a whole GrandStaff system if only one of its staves is alive"
+} % begin verbatim
+
+\score {
+  <<
+    \new StaffGroup = "StaffGroup_woodwinds"
+    <<
+      \new Staff = "Staff_flute" \with {
+        instrumentName = "Flute"
+        shortInstrumentName = "Fl"}
+        \relative c' { \repeat unfold 3 { c'4 c c c | c c c c | c c c c | \break }
+      }
+    >>
+    \new StaffGroup = "StaffGroup_Strings"
+    <<
+      \new GrandStaff = "GrandStaff_violins"
+      <<
+        \new Staff = "StaffViolinI" \with {
+          instrumentName = "Violin I"
+          shortInstrumentName = "Vi I"
+        }
+        \relative c'' {
+          a1 \repeat unfold 7 { s1 } \repeat unfold 12 a16  a4
+        }
+        \new Staff = "StaffViolinII" \with {
+          instrumentName = "Violin II"
+          shortInstrumentName = "Vi II"
+        }
+        \relative c' { e1 \repeat unfold 8 { s1 } }
+      >>
+      \new Staff = "Staff_cello" \with {
+        instrumentName = "Cello"
+        shortInstrumentName = "Ce"
+      }
+      \relative c { \clef bass \repeat unfold 9 { c1 }}
+    >>
+  >>
+}
+\layout {
+  \context {
+    \GrandStaff
+    \consists Keep_alive_together_engraver
+  }
+  \context {
+    \Staff
+    \RemoveEmptyStaves
+  }
+}
index 160093aac7ef987f032ae60ea36a7f36687149c6..902541ce0c8ccefebf086716c56a8d750eb105ee 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "chords, simultaneous-notes, workaround"
@@ -18,14 +18,14 @@ with different accidentals.
 } % begin verbatim
 
 fixA = {
-  \once \override Stem #'length = #9
+  \once \override Stem.length = #9
 }
 fixB = {
-  \once \override NoteHead #'X-offset = #1.7
-  \once \override Stem #'rotation = #'(45 0 0)
-  \once \override Stem #'extra-offset = #'(-0.2 . -0.2)
-  \once \override Flag #'style = #'no-flag
-  \once \override Accidental #'extra-offset = #'(4 . 0)
+  \once \override NoteHead.X-offset = #1.7
+  \once \override Stem.rotation = #'(45 0 0)
+  \once \override Stem.extra-offset = #'(-0.2 . -0.2)
+  \once \override Flag.style = #'no-flag
+  \once \override Accidental.extra-offset = #'(4 . 0)
 }
 
 \relative c' {
index 87d2da59f6294d002091b3067a93375b696d6f45..d6c8d46a2a2534599c2d762f3ae70d91b76de6ed 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "devel, scheme-language, tweaks-and-overrides"
@@ -39,7 +39,7 @@ When called this way
 
 
 @{
- \\once \\override NoteHead #'before-line-breaking = #display-ancestry
+ \\once \\override NoteHead.before-line-breaking = #display-ancestry
  c @}
 
 
@@ -114,9 +114,9 @@ NoteHead X,Y: NoteColumn
       (format-ancestry (get-ancestry grob) 0)))
 
 \relative c' {
-  \once \override NoteHead #'before-line-breaking = #display-ancestry
+  \once \override NoteHead.before-line-breaking = #display-ancestry
   f4
-  \once \override Accidental #'before-line-breaking = #display-ancestry
-  \once \override Arpeggio #'before-line-breaking = #display-ancestry
+  \once \override Accidental.before-line-breaking = #display-ancestry
+  \once \override Arpeggio.before-line-breaking = #display-ancestry
   <f as c>4\arpeggio
 }
index 2bddbf518c6a6db061623dae6a5bf8107cc94ee6..a95c7739b5bebaee032dd021cf4f38c4102c6703 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
@@ -19,19 +19,19 @@ arbitrary grob.
 
 
 \relative c'' {
-  \override TextScript #'stencil =
+  \override TextScript.stencil =
     #(make-stencil-boxer 0.1 0.3 ly:text-interface::print)
   c'4^"foo"
 
-  \override Stem #'stencil =
+  \override Stem.stencil =
     #(make-stencil-boxer 0.05 0.25 ly:stem::print)
-  \override Score.RehearsalMark  #'stencil =
+  \override Score.RehearsalMark.stencil =
     #(make-stencil-boxer 0.15 0.3 ly:text-interface::print)
   b8
 
-  \revert Stem #'stencil
+  \revert Stem.stencil
 
-  \revert Flag #'stencil
+  \revert Flag.stencil
   c4. c4
   \mark "F"
   c1
index b2dc749eb4b0633729002144f4aff450f4db4016..44cfe8c7a1f2f02f64942f28a19ca8df7fb58aa2 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations"
@@ -17,7 +17,7 @@ Here is how to circle a note.
 } % begin verbatim
 
 circle =
-\once \override NoteHead #'stencil = #(lambda (grob)
+\once \override NoteHead.stencil = #(lambda (grob)
     (let* ((note (ly:note-head::print grob))
            (combo-stencil (ly:stencil-add
                note
index f10fa4edc03b5956b5beccf0df86fa5aa8c29a50..196a3d8c81a5ccc935cf76a735d99ec12e880586 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
@@ -31,7 +31,7 @@ strategies for rehearsal marks and measure numbers.
       \circle \finger 2
     }
   }
-  \override Score.BarNumber #'break-visibility = #all-visible
-  \override Score.BarNumber #'stencil =
+  \override Score.BarNumber.break-visibility = #all-visible
+  \override Score.BarNumber.stencil =
     #(make-stencil-circler 0.1 0.25 ly:text-interface::print)
 }
index 8b488aae5c89519e45e122d66bc68f82c618632e..b2cb2d8ff9dacc90ac10820261cd38985c893949 100644 (file)
@@ -1,4 +1,5 @@
 adding-fingerings-to-a-score.ly
+adding-links-to-objects.ly
 allowing-fingerings-to-be-printed-inside-the-staff.ly
 alternative-bar-numbering.ly
 analysis-brackets-above-the-staff.ly
@@ -24,6 +25,7 @@ how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly
 making-some-staff-lines-thicker-than-the-others.ly
 marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly
 measure-counter.ly
+numbering-groups-of-measures.ly
 positioning-fingering-indications-precisely.ly
 positioning-text-markups-inside-slurs.ly
 printing-text-from-right-to-left.ly
index b40a6cebd24b3f377275ebe17ec51c274d3ac156..e6b962a5577363ac5aef7cfb20e4f79279f7bebe 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "headword"
@@ -53,7 +53,7 @@ Beethoven, Op. 31, No. 3 Piano sonata 18, Movt II, Scherzo Measures 9 -
     |
     e'4-2
     r8
-    \once \override Script #'script-priority = #-100
+    \once \override Script.script-priority = #-100
     \afterGrace
     f'8 ( \trill ^ \markup { \finger "3-2" }
     { e'16 [ f'16 ] }
@@ -71,7 +71,7 @@ Beethoven, Op. 31, No. 3 Piano sonata 18, Movt II, Scherzo Measures 9 -
   \new Staff {
     \key af \major
     \clef treble
-    \override Fingering #'direction = #down
+    \override Fingering.direction = #down
     \set Staff.fingeringOrientations = #'(down)
     \partial 8
     <af' af>8 \staccato
index 3e9ea2fee859ee682cf903db089ceea3e7508b7c..bae30fb4402be3b6b3d429f0a94ee7a0f3dd603a 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.29"
 
 \header {
   lsrtags = "contexts-and-engravers, specific-notation"
@@ -119,6 +119,7 @@ MyStaff = \context {
   shortInstrumentName = #'()
 
   \accepts "Voice"
+  \defaultchild "Voice"
 }
 
 
@@ -159,6 +160,7 @@ MyVoice = \context {
   %}
   \consists "Text_engraver"
   \consists "Dynamic_engraver"
+  \consists "Dynamic_align_engraver"
   \consists "Fingering_engraver"
 
   \consists "Script_column_engraver"
index 24c2538cf9abb532d665de8bd4931404942cf334..76bf91d1ce127dde4f8ca20714f4861876e0e9eb 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms"
@@ -22,7 +22,7 @@ second number indicates the direction (1 = up, -1 = down).
 
 \relative c' {
   <c e g>2~ <c e g>
-  \override TieColumn #'tie-configuration =
+  \override TieColumn.tie-configuration =
     #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1))
   <c e g>2~ <c e g>
 }
index 4b9d07625a16f928a444e8015f35837fd8b2fff6..1338e8c1756b0e71bfe21795d0e30096f81070db 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "repeats, rhythms"
@@ -28,20 +28,20 @@ the @code{'gap} property.
 
 \relative c'' {
   \repeat tremolo 8 { a32 f }
-  \override Beam #'gap-count = #1
+  \override Beam.gap-count = #1
   \repeat tremolo 8 { a32 f }
-  \override Beam #'gap-count = #2
+  \override Beam.gap-count = #2
   \repeat tremolo 8 { a32 f }
-  \override Beam #'gap-count = #3
+  \override Beam.gap-count = #3
   \repeat tremolo 8 { a32 f }
 
-  \override Beam #'gap-count = #3
-  \override Beam #'gap = #1.33
+  \override Beam.gap-count = #3
+  \override Beam.gap = #1.33
   \repeat tremolo 8 { a32 f }
-  \override Beam #'gap = #1
+  \override Beam.gap = #1
   \repeat tremolo 8 { a32 f }
-  \override Beam #'gap = #0.67
+  \override Beam.gap = #0.67
   \repeat tremolo 8 { a32 f }
-  \override Beam #'gap = #0.33
+  \override Beam.gap = #0.33
   \repeat tremolo 8 { a32 f }
 }
index 384c90017e2f978cb6f9f2bc1bb421f7ad27bac0..5e67e60d479c112c612c57e568dfe9d111641aca 100644 (file)
@@ -1,34 +1,36 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.11
+\version "2.17.11"
 
 \header {
   lsrtags = "rhythms, syntax-and-expressions"
 
   texidoc = "
 The property @code{tupletSpannerDuration} sets how long each of the
-tuplets contained within the brackets after @code{\\times} should last.
+tuplets contained within the brackets after @code{\\tuplet} should last.
 Many consecutive tuplets can then be placed within a single
-@code{\\times} expression, thus saving typing.
-
-In the example, two triplets are shown, while @code{\\times} was
-entered only once.
-
-
-Read the relevant sections of the Notation Reference for more
-information about @code{ly:make-moment}.
+@code{\\tuplet} expression, thus saving typing.
 
+There are several ways to set @code{tupletSpannerDuration}.  The command
+@code{\\tupletSpan} sets it to a given duration, and clears it when
+instead of a duration @code{\\default} is specified.  Another way is
+to use an optional argument with @code{\\tuplet}.
 "
-  doctitle = "Entering several tuplets using only one \\times command"
+  doctitle = "Entering several tuplets using only one \\tuplet command"
 } % begin verbatim
 
 
+
 \relative c' {
   \time 2/4
-  \set tupletSpannerDuration = #(ly:make-moment 1 4)
-  \times 2/3 { c8 c c c c c }
+  \tupletSpan 4
+  \tuplet 3/2 { c8^"\\tupletSpan 4" c c c c c }
+  \tupletSpan \default
+  \tuplet 3/2 { c8^"\\tupletSpan \\default" c c c c c }
+  \tuplet 3/2 4 { c8^"\\tuplet 3/2 4 {...}" c c c c c }
 }
index 6730fe41c9a1447c84442b8cf2a42b452e77ff7e..b7caf83f1e16aa84bda78e725057fd76559506d7 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
 
 \header {
   lsrtags = "headword"
@@ -27,8 +28,8 @@ Expressive headword
 %\layout {
 %   \context {
 %      \Score
-%      \override SpacingSpanner #'base-shortest-duration =
-%         #(ly:make-moment 1 20)
+%      \override SpacingSpanner.base-shortest-duration =
+%         #(ly:make-moment 1/20)
 %   }
 %}
 
@@ -40,7 +41,7 @@ Expressive headword
       \key g \major
       \time 6/8
       \partial 2
-      \once \override TextScript #'staff-padding = #2
+      \once \override TextScript.padding = #2
       d'8 \staccato
       ^ \markup { \column {
          RONDO
index 54cbf78449f2b19dd764f31c30602e610cd96c4a..0bc43e26f9383ccff71ed46a0a34bec98e7b1d5d 100644 (file)
@@ -1,7 +1,8 @@
 adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly
 adding-parentheses-around-an-expressive-mark-or-chordal-note.ly
+adding-timing-marks-to-long-glissandi.ly
 adjusting-the-shape-of-falls-and-doits.ly
-alternative-breve-note.ly
+alternative-breve-notes.ly
 asymmetric-slurs.ly
 breathing-signs.ly
 broken-crescendo-hairpin.ly
@@ -42,12 +43,14 @@ modifying-default-values-for-articulation-shorthand-notation.ly
 moving-slur-positions-vertically.ly
 positioning-arpeggios.ly
 positioning-text-markups-inside-slurs.ly
+printing-hairpins-in-various-styles.ly
 printing-hairpins-using-al-niente-notation.ly
 printing-metronome-and-rehearsal-marks-below-the-staff.ly
 setting-hairpin-behavior-at-bar-lines.ly
 setting-the-minimum-length-of-hairpins.ly
 showing-the-same-articulation-above-and-below-a-note-or-chord.ly
 snap-pizzicato-or-bartok-pizzicato.ly
+using-a-tick-as-the-breath-mark-symbol.ly
 using-arpeggiobracket-to-make-divisi-more-visible.ly
 using-double-slurs-for-legato-chords.ly
 using-the-whiteout-property.ly
diff --git a/Documentation/snippets/extending-glissandi-across-repeats.ly b/Documentation/snippets/extending-glissandi-across-repeats.ly
new file mode 100644 (file)
index 0000000..4656fac
--- /dev/null
@@ -0,0 +1,70 @@
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
+
+\header {
+  lsrtags = "staff-notation, tweaks-and-overrides"
+  texidoc = "
+A glissando which extends into several @code{\\alternative} blocks
+can be simulated by adding a hidden grace note with a glissando
+at the start of each @code{\\alternative} block.  The grace note
+should be at the same pitch as the note which starts the initial
+glissando.  This is implemented here with a music function which
+takes the pitch of the grace note as its argument.
+
+Note that in polyphonic music the grace note must be matched with
+corresponding grace notes in all other voices.
+"
+  doctitle = "Extending glissandi across repeats"
+} % begin verbatim
+
+
+repeatGliss = #(define-music-function (parser location grace)
+  (ly:pitch?)
+  #{
+    % the next two lines ensure the glissando is long enough
+    % to be visible
+    \once \override Glissando.springs-and-rods
+      = #ly:spanner::set-spacing-rods
+    \once \override Glissando.minimum-length = #3.5
+    \once \hideNotes
+    \grace $grace \glissando
+  #})
+
+\score {
+  \relative c'' {
+    \repeat volta 3 { c4 d e f\glissando }
+    \alternative {
+      { g2 d }
+      { \repeatGliss f g2 e }
+      { \repeatGliss f e2 d }
+    }
+  }
+}
+
+music =  \relative c' {
+  \voiceOne
+  \repeat volta 2 {
+    g a b c\glissando
+  }
+  \alternative {
+    { d1 }
+    { \repeatGliss c e1 }
+  }
+}
+
+\score {
+  \new StaffGroup <<
+    \new Staff <<
+      \context Voice { \clef "G_8" \music }
+    >>
+    \new TabStaff  <<
+      \context TabVoice { \clef "moderntab" \music }
+    >>
+  >>
+}
\ No newline at end of file
index fdf1803c22eb9dffe3b0e77d791e7271a7cb7a08..8b76e0204d938fa0f8990644f6b9a19060c51a7d 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "headword"
@@ -88,7 +88,7 @@ extendOff = \bassFigureExtendersOff
     \new FiguredBass \figuremode {
       \set figuredBassAlterationDirection = #RIGHT
       \set figuredBassPlusDirection = #RIGHT
-      \override BassFigureAlignment #'stacking-dir = #DOWN
+      \override BassFigureAlignment.stacking-dir = #DOWN
       s8 |
       s4 <6>4 <_+>4 <6>4 |
       <6 4\+ 2>8 <6>8 <_+> s8 s2 |
@@ -104,9 +104,9 @@ extendOff = \bassFigureExtendersOff
   \layout {
     \context {
       \Score
-      \override RehearsalMark #'break-align-symbols = #'(time-signature)
-      \override RehearsalMark #'self-alignment-X = #LEFT
-      \override TimeSignature #'break-align-anchor-alignment = #LEFT
+      \override RehearsalMark.break-align-symbols = #'(time-signature)
+      \override RehearsalMark.self-alignment-X = #LEFT
+      \override TimeSignature.break-align-anchor-alignment = #LEFT
     }
   }
 }
index 547d1e8037f01b93a826a669f7b22e2587e8c256..b9cdf44f71750fde290969b73b07892672c6ecee 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "keyboards, tweaks-and-overrides"
@@ -21,10 +21,10 @@ The appearance of pedal brackets may be altered in different ways.
 \relative c'' {
   c2\sostenutoOn c
   c2\sostenutoOff c
-  \once \override Staff.PianoPedalBracket #'shorten-pair = #'(-7 . -2)
+  \once \override Staff.PianoPedalBracket.shorten-pair = #'(-7 . -2)
   c2\sostenutoOn c
   c2\sostenutoOff c
-  \once \override Staff.PianoPedalBracket #'edge-height = #'(0 . 3)
+  \once \override Staff.PianoPedalBracket.edge-height = #'(0 . 3)
   c2\sostenutoOn c
   c2\sostenutoOff c
 }
index 15ebe07c1d4f792b9eaa400cf841108e3af0a190..e4ea09092fa0cddc632e2df4394ad8c2067a735a 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "symbols-and-glyphs, winds"
@@ -18,8 +18,8 @@ useful for wind instruments.
 } % begin verbatim
 
 centermarkup = {
-  \once \override TextScript #'self-alignment-X = #CENTER
-  \once \override TextScript #'X-offset =#(ly:make-simple-closure
+  \once \override TextScript.self-alignment-X = #CENTER
+  \once \override TextScript.X-offset =#(ly:make-simple-closure
     `(,+
       ,(ly:make-simple-closure (list
         ly:self-alignment-interface::centered-on-x-parent))
@@ -30,7 +30,7 @@ centermarkup = {
 {\relative c'
   {
     g\open
-    \once \override TextScript #'staff-padding = #-1.0 \centermarkup
+    \once \override TextScript.staff-padding = #-1.0 \centermarkup
     g^\markup{\combine \musicglyph #"scripts.open" \musicglyph
     #"scripts.tenuto"}
     \centermarkup g^\markup{\combine \musicglyph #"scripts.open"
index eeede2855cd59bfb3a48f6944d722a275eb76142..db142cd9d2ab90cb9dd68d9c0da9380927a7ca17 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "fretted-strings, specific-notation, stylesheet, version-specific"
@@ -97,30 +97,30 @@ xDown = \markup { \column { \small x \line { \strokeDown } } }
 
 % Just handy :)
 tupletOff = {
-  \once \override TupletNumber #'stencil = ##f
-  \once \override TupletBracket #'stencil = ##f
+  \once \omit TupletNumber
+  \once \omit TupletBracket
 }
 
 tupletsOff = {
-  \override TupletNumber #'stencil = ##f
-  \override TupletBracket #'bracket-visibility = #'if-no-beam
+  \omit TupletNumber
+  \override TupletBracket.bracket-visibility = #'if-no-beam
 }
 
 tupletsOn = {
-  \override TupletBracket #'bracket-visibility = #'default
-  \revert TupletNumber #'stencil
+  \override TupletBracket.bracket-visibility = #'default
+  \undo \omit TupletNumber
 }
 
 headsOff = {
-  \override TabNoteHead #'transparent = ##t
-  \override NoteHead #'transparent = ##t
-  \override NoteHead #'no-ledgers = ##t
+  \hide TabNoteHead
+  \hide NoteHead
+  \override NoteHead.no-ledgers = ##t
 }
 
 headsOn = {
-  \override TabNoteHead #'transparent = ##f
-  \override NoteHead #'transparent = ##f
-  \override NoteHead #'no-ledgers = ##f
+  \override TabNoteHead.transparent = ##f
+  \override NoteHead.transparent = ##f
+  \override NoteHead.no-ledgers = ##f
 }
 
 %%%%%%%  Cut here ----- End 'flamenco.ly'
@@ -148,7 +148,7 @@ part = \relative c' {
   r4
 
   \tupletOff
-  \times 4/5 {
+  \tuplet 5/4 {
     <a e' a cis e>16^\xUp
     \headsOff
     <a e' a cis e>^\aUp
@@ -161,7 +161,7 @@ part = \relative c' {
   r4
 
   \tupletsOff
-  \times 2/3 {
+  \tuplet 3/2 {
     <a e' a cis e>8^\pDown
     \headsOff
     <a e' a cis e>^\xUp
@@ -169,7 +169,7 @@ part = \relative c' {
     \headsOn
   }
 
-  \times 2/3 {
+  \tuplet 3/2 {
     <a e' a cis e>8^\pDown
     \headsOff
     <a e' a cis e>^\xUp
@@ -177,14 +177,14 @@ part = \relative c' {
     \headsOn
   }
 
-  \times 2/3 {
+  \tuplet 3/2 {
     <a e' a cis e>8^\pDown
     \headsOff
     <a e' a cis e>^\xUp
     <a e' a cis e>^\iUp
     \headsOn
   }
-  \times 2/3 {
+  \tuplet 3/2 {
     <a e' a cis e>8^\pDown
     \headsOff
     <a e' a cis e>^\xUp
@@ -193,30 +193,30 @@ part = \relative c' {
   }
 
   \tupletsOff
-  \override Beam #'positions = #'(2 . 2)
-  \times 2/3 {
+  \override Beam.positions = #'(2 . 2)
+  \tuplet 3/2 {
     a8^\markup{ \small p }
     <e' a>^\strokeUpGolpe
     <e a>^\strokeDown
   }
-  \times 2/3 {
+  \tuplet 3/2 {
     a,8^\markup{ \small p }
     <e' a>^\strokeUpGolpe
     <e a>^\strokeDown
   }
-  \times 2/3 {
+  \tuplet 3/2 {
     a,8^\markup{ \small p }
     <e' a>^\strokeUpGolpe
     <e a>^\strokeDown
   }
-  \times 2/3 {
+  \tuplet 3/2 {
     a,8^\markup{ \small p }
     <e' a>^\strokeUpGolpe
     <e a>^\strokeDown
   }
   \tupletsOn
 
-  \once \override TextScript #'extra-offset = #'(0 . -1)
+  \once \override TextScript.extra-offset = #'(0 . -1)
   <g, b f'>1_\golpe^\mUp
   \bar "|."
 }
index b239a2036d266a37a4e5982a6b0cd31d310bcee2..fb387f9b69d739bdaede5326c280368a491d9979 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "contemporary-notation, winds"
@@ -22,11 +22,11 @@ glyph.
 slap =
 #(define-music-function (parser location music) (ly:music?)
 #{
-  \override NoteHead #'stencil =
+  \override NoteHead.stencil =
   #(lambda (grob)
      (grob-interpret-markup grob
       (markup #:musicglyph "scripts.sforzato")))
-  \override NoteHead #'stem-attachment =
+  \override NoteHead.stem-attachment =
   #(lambda (grob)
      (let* ((thickness (ly:staff-symbol-line-thickness grob))
             (stem (ly:grob-object grob 'stem))
@@ -36,8 +36,8 @@ slap =
                       0)
                   (/ thickness 2)))))
   $music
-  \revert NoteHead #'stencil
-  \revert NoteHead #'stem-attachment
+  \revert NoteHead.stencil
+  \revert NoteHead.stem-attachment
 #})
 
 \relative c' {
index ce8072932cc059cd8710839460d28b300b67b1ce..e2413c73b20d20d72d420b530673904820e34e88 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "simultaneous-notes, tweaks-and-overrides"
@@ -26,7 +26,7 @@ are staff spaces.
   \\
   {
     <b f'>2
-    \once \override NoteColumn #'force-hshift = #1.7
+    \once \override NoteColumn.force-hshift = #1.7
     <b f'>2
   }
 >>
index 33545ccb6e39f464bb0d4d8758386d695dddf803..6ab4f3706fd8c802af1ccb10a13c4d51a19e3053 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "vocal-music"
@@ -27,10 +27,10 @@ omitted.  The behaviour can be overridden with the
 }
 \addlyrics {
   syl -- lab word word
-  \override LyricHyphen #'minimum-distance = #1.0
+  \override LyricHyphen.minimum-distance = #1.0
   syl -- lab word word
-  \override LyricHyphen #'minimum-distance = #2.0
+  \override LyricHyphen.minimum-distance = #2.0
   syl -- lab word word
-  \revert LyricHyphen #'minimum-distance
+  \revert LyricHyphen.minimum-distance
   syl -- lab word word
 }
index 217c235be48ceb62e3ed34cba6ea50fc87e6bbcb..244eefef50812637844cdd2bf70420ef47fd75a4 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "staff-notation, workaround"
@@ -38,6 +38,6 @@ example = {
   R1
   R1
 
-  \override Score.MetronomeMark #'extra-spacing-width = #'(0 . 0)
+  \override Score.MetronomeMark.extra-spacing-width = #'(0 . 0)
   \example
 }
index 0371ee117220fe9e3117bcc67704d5dece94dc55..7ae4dead641cf49548a3ddc6de5cebed34c8ff6a 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "fretted-strings, tweaks-and-overrides"
@@ -29,10 +29,9 @@ diagrams.
   \new Voice = "mel" {
     \textLengthOn
     % Set global properties of fret diagram
-    \override TextScript #'size = #1.2
-    \override TextScript
-      #'fret-diagram-details #'finger-code = #'below-string
-    \override TextScript #'fret-diagram-details #'dot-color = #'black
+    \override TextScript.size = #1.2
+    \override TextScript.fret-diagram-details.finger-code = #'below-string
+    \override TextScript.fret-diagram-details.dot-color = #'black
 
     %% A chord for ukulele
     a'2^\markup {
@@ -154,8 +153,7 @@ diagrams.
     }
 
       % These chords will be in landscape orientation
-    \override TextScript
-       #'fret-diagram-details #'orientation = #'landscape
+    \override TextScript.fret-diagram-details.orientation = #'landscape
 
     %% C major for guitar, barred on third fret
     %  verbose style
@@ -253,8 +251,7 @@ diagrams.
     }
 
       % These chords will be in opposing-landscape orientation
-    \override TextScript #'fret-diagram-details
-                           #'orientation = #'opposing-landscape
+    \override TextScript.fret-diagram-details.orientation = #'opposing-landscape
 
     %% C major for guitar, barred on third fret
     %  verbose style
index 0975f55757f9b11f6d2d52a18168fd974d467860..6b8f910d87befa5bb75c7813b931a50692890b7c 100644 (file)
@@ -4,13 +4,13 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.18
+%% Note: this file works from version 2.17.30
 % INSPIRATIONAL HEADER FOR LILYPOND DOCUMENTATION fretted-strings %
 % Passage from Johann Kaspar Mertz "Opern Revue, Op. 8, no. 17"   %
 % on melodies from Bellini's "Norma"                              %
 %*****************************************************************%
 
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "headword"
@@ -43,7 +43,7 @@ ssnor = \set stringNumberOrientations = #'(right)
 % define fingering offset
 FO = #(define-music-function (parser location offsetX offsetY) (number? number?)
 #{
-  \once \override Voice.Fingering #'extra-offset = #(cons offsetX offsetY)
+  \once \override Voice.Fingering.extra-offset = #(cons offsetX offsetY)
 #})
 
 % markups
@@ -81,22 +81,22 @@ melody = \relative c {
   R1 % m. 5
 
   e'4^\benmarcato e8. d16-4
-  d4-4 \times 2/3 { \sfou \FO #'-0.3 #'0.6 <c-2>4 b8 } | % end of m. 6
+  d4-4 \tuplet 3/2 { \sfou \FO #'-0.3 #'0.6 <c-2>4 b8 } | % end of m. 6
 
   \FO #'-0.3 #'0.3
-  <a-3>4 \times 2/3 { c4 b8 } a4 e'8. e16 | % m. 7
+  <a-3>4 \tuplet 3/2 { c4 b8 } a4 e'8. e16 | % m. 7
 
   \FO #'-0.3 #'0.3
-  <g-4>4 \times 2/3 { \sfol \FO #'0.3 #'0.0 <f-1>4 e8 } e4  % beg of m. 8
-  \times 2/3 { \sfou <d-4>4 c8 } | % end of m. 8
+  <g-4>4 \tuplet 3/2 { \sfol \FO #'0.3 #'0.0 <f-1>4 e8 } e4  % beg of m. 8
+  \tuplet 3/2 { \sfou <d-4>4 c8 } | % end of m. 8
 
-  b4 \times 2/3 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 <b-0>4 e | % end of m. 9
+  b4 \tuplet 3/2 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 <b-0>4 e | % end of m. 9
 
-  e4 e8. d16-4 d4 \times 2/3 { c4 b8 } | % m. 10
+  e4 e8. d16-4 d4 \tuplet 3/2 { c4 b8 } | % m. 10
 
-  \times 2/3 { a4 a8 b4 c8 } % beg of m. 11
+  \tuplet 3/2 { a4 a8 b4 c8 } % beg of m. 11
   \sfou \FO #'-0.3 #'0.3
-  <d-4>4^\< \times 2/3 { e4 <d f>8\! } | % end of m. 11
+  <d-4>4^\< \tuplet 3/2 { e4 <d f>8\! } | % end of m. 11
 }
 
 bass = \relative c {
@@ -115,22 +115,22 @@ bass = \relative c {
 
   %% new section starts here in A minor
   \set Score.beamExceptions = #'()
-  \once \override TextScript #'staff-padding = #1.7
-  \times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
+  \once \override TextScript.staff-padding = #1.7
+  \tuplet 3/2 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
 
-  \times 2/3 { a,8\pdolce e' a c a e } % beg m. 6
-  \times 2/3 { e,8 \sfou <e'-3> <gis-1> c gis e } | % end m. 6
+  \tuplet 3/2 { a,8\pdolce e' a c a e } % beg m. 6
+  \tuplet 3/2 { e,8 \sfou <e'-3> <gis-1> c gis e } | % end m. 6
 
-  \times 2/3 { a,8 <e'-2> a c e, b' a, e' a c a e } | % m. 7
+  \tuplet 3/2 { a,8 <e'-2> a c e, b' a, e' a c a e } | % m. 7
 
-  \times 2/3 { f,8 f' a \sfol \FO #'0.3 #'-0.5 <d-4> a f fis, d' a' d a d, } | % m. 8
+  \tuplet 3/2 { f,8 f' a \sfol \FO #'0.3 #'-0.5 <d-4> a f fis, d' a' d a d, } | % m. 8
 
-  \times 2/3 { <g,-3>8 d' g d' g, d % beg m. 9
+  \tuplet 3/2 { <g,-3>8 d' g d' g, d % beg m. 9
     \sfod \FO #'0.0 #'-2.0 <gis,-4> \sfou <e'-2> <gis-1> b gis e } | % end m. 9
 
-  \times 2/3 { a,8 e' a c a e e, e' gis c gis e } | % m. 10
+  \tuplet 3/2 { a,8 e' a c a e e, e' gis c gis e } | % m. 10
 
-  \times 2/3 { a,8 e' a b a e f, f' a d a f } | % m. 11
+  \tuplet 3/2 { a,8 e' a b a e f, f' a d a f } | % m. 11
 }
 
 \score {
@@ -141,9 +141,9 @@ bass = \relative c {
   \layout {
     \context {
       \Score
-      \override Fingering #'staff-padding = #'()
-      \override TupletNumber #'stencil = ##f
-      \override TupletBracket #'bracket-visibility = ##f
+      \override Fingering.staff-padding = #'()
+      \omit TupletNumber
+      \override TupletBracket.bracket-visibility = ##f
     }
   }
   \midi { }
index 8cb311a1a0eed7faa037eaf74f9cd74ad17597f3..a62c85dddd4ee385dbb7fbc438933ea3c52acf4c 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "fretted-strings"
@@ -18,15 +18,15 @@ Demonstrates fretted-string harmonics in tablature
 
 pinchedHarmonics = {
    \textSpannerDown
-   \override TextSpanner #'bound-details #'left #'text =
+   \override TextSpanner.bound-details.left.text =
       \markup {\halign #-0.5 \teeny "PH" }
-      \override TextSpanner #'style =
+      \override TextSpanner.style =
          #'dashed-line
-   \override TextSpanner #'dash-period = #0.6
-   \override TextSpanner #'bound-details #'right #'attach-dir = #1
-   \override TextSpanner #'bound-details #'right #'text =
+   \override TextSpanner.dash-period = #0.6
+   \override TextSpanner.bound-details.right.attach-dir = #1
+   \override TextSpanner.bound-details.right.text =
       \markup { \draw-line #'(0 . 1) }
-   \override TextSpanner #'bound-details #'right #'padding = #-0.5
+   \override TextSpanner.bound-details.right.padding = #-0.5
 }
 
 harmonics = {
index 1bf3b229793ec9224319e83b88315b53f3d6c1a6..99579b27f46d418c2ab24f4ae7f68c0715550c9e 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -50,20 +50,20 @@ function to generate the glyph for the flag.
 snippetexamplenotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64 }
 
 {
-  \override Score.RehearsalMark #'self-alignment-X = #LEFT
+  \override Score.RehearsalMark.self-alignment-X = #LEFT
   \time 1/4
   \mark "Normal flags"
   \snippetexamplenotes
 
   \mark "Custom flag: inverted"
-  \override Flag #'stencil = #inverted-flag
+  \override Flag.stencil = #inverted-flag
   \snippetexamplenotes
 
   \mark "Custom flag: weight"
-  \override Flag #'stencil = #weight-flag
+  \override Flag.stencil = #weight-flag
   \snippetexamplenotes
 
   \mark "Revert to normal"
-  \revert Flag #'stencil
+  \revert Flag.stencil
   \snippetexamplenotes
 }
index 20930095215a9475a31f10e030e6c04c7c0a3a15..cf2bfb23e93e8b7465c1065c24de01b8c1d2718f 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "pitches, really-cool, scheme-language"
@@ -29,7 +29,7 @@ get different random note patterns, just change this number.
                   (make-event-chord
                    (list
                     (make-music 'NoteEvent
-                                'duration (ly:make-duration 2 0 1 1)
+                                'duration (ly:make-duration 2 0 1/1)
                                 'pitch (ly:make-pitch
                                         (quotient idx 7)
                                         (remainder idx 7)
index c2182e123a3130279d1910ca41e18d86e5949b07..cc30a8b2bf262ebb4853e3aa620e6eecf15403fa 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "automatic-notation, really-cool, scheme-language"
@@ -78,7 +78,7 @@ modified to inser all collected scores so far to the book.
         (lambda (parser)
           (let* ((music (make-music 'EventChord
                           'elements (list (make-music 'NoteEvent
-                                            'duration (ly:make-duration 2 0 1 1)
+                                            'duration (ly:make-duration 2 0 1/1)
                                             'pitch (ly:make-pitch 0 pitch 0)))))
                  (score (scorify-music music parser))
                  (layout (ly:output-def-clone $defaultlayout))
index f58120b2d52b0d867a99fb56c150268d85a6ed9e..32caca079cb857828d4ccf2ab0a8e9a8597b5eb3 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.12
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, staff-notation, tweaks-and-overrides"
@@ -16,6 +16,6 @@
 
 \relative c' {
   a2 \glissando
-  \once \override NoteColumn #'glissando-skip = ##t
+  \once \override NoteColumn.glissando-skip = ##t
   f''4 d,
 }
index 2b69748857233465575107f61694770db3cc36ab..254a266304f0467cf319f06072150e209cab3341 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "editorial-annotations"
@@ -29,16 +29,16 @@ properties.
     \new Staff {
       \relative c {
         % this moves them up one staff space from the default position
-        \override Score.GridLine #'extra-offset = #'(0.0 . 1.0)
+        \override Score.GridLine.extra-offset = #'(0.0 . 1.0)
         \stemDown
         \clef bass
-        \once \override Score.GridLine #'thickness = #5.0
+        \once \override Score.GridLine.thickness = #5.0
         c4
-        \once \override Score.GridLine #'thickness = #1.0
+        \once \override Score.GridLine.thickness = #1.0
         g'4
-        \once \override Score.GridLine #'thickness = #3.0
+        \once \override Score.GridLine.thickness = #3.0
         f4
-        \once \override Score.GridLine #'thickness = #5.0
+        \once \override Score.GridLine.thickness = #5.0
         e4
       }
     }
@@ -49,13 +49,13 @@ properties.
       % set up grids
       \consists "Grid_point_engraver"
       % set the grid interval to one quarter note
-      gridInterval = #(ly:make-moment 1 4)
+      gridInterval = #(ly:make-moment 1/4)
     }
     \context {
       \Score
       \consists "Grid_line_span_engraver"
       % this moves them to the right half a staff space
-      \override NoteColumn #'X-offset = #-0.5
+      \override NoteColumn.X-offset = #-0.5
     }
   }
 }
index 52e4c45d94e7c77cf5ba7bf52a4f34109ae76d51..927ad32969f9f5ad323ae1e15cd643546699b771 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "editorial-annotations"
@@ -31,19 +31,19 @@ this snippet.
       \new Staff {
         % hides staff and notes so that only the grid lines are visible
         \hideNotes
-        \override Staff.BarLine #'transparent = ##t
-        \override Staff.StaffSymbol #'line-count = #0
-        \override Staff.TimeSignature #'transparent = ##t
-        \override Staff.Clef #'transparent = ##t
+        \hide Staff.BarLine
+        \override Staff.StaffSymbol.line-count = #0
+        \hide Staff.TimeSignature
+        \hide Staff.Clef
 
         % dummy notes to force regular note spacing
-        \once  \override Score.GridLine #'thickness = #4.0
+        \once  \override Score.GridLine.thickness = #4.0
         c8 c c
-        \once  \override Score.GridLine #'thickness = #3.0
+        \once  \override Score.GridLine.thickness = #3.0
         c8 c c
-        \once  \override Score.GridLine #'thickness = #4.0
+        \once  \override Score.GridLine.thickness = #4.0
         c8 c c
-        \once  \override Score.GridLine #'thickness = #3.0
+        \once  \override Score.GridLine.thickness = #3.0
         c8 c c
       }
     >>
@@ -53,16 +53,16 @@ this snippet.
       \Score
       \consists "Grid_line_span_engraver"
       % center grid lines horizontally below note heads
-      \override NoteColumn #'X-offset = #-0.5
+      \override NoteColumn.X-offset = #-0.5
     }
     \context {
       \Staff
       \consists "Grid_point_engraver"
-      gridInterval = #(ly:make-moment 1 8)
+      gridInterval = #(ly:make-moment 1/8)
       % set line length and positioning:
       % two staff spaces above center line on hidden staff
       % to four spaces below center line on visible staff
-      \override GridPoint #'Y-extent = #'(2 . -4)
+      \override GridPoint.Y-extent = #'(2 . -4)
     }
     ragged-right = ##t
   }
index dd1cbd8d03315ae4480561c1a3c50ad105794839..e2e2b802f24fede1310cb090275fc24d0b14ca1d 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.10
-\version "2.16.0"
+%% Note: this file works from version 2.17.30
+\version "2.17.30"
 
 \header {
   lsrtags = "fretted-strings"
@@ -23,12 +23,11 @@ in the following example.
 %% Hide fret number: useful to draw slide into/from a casual point of
 %% the fretboard.
 hideFretNumber = {
-  \once \override TabNoteHead #'transparent = ##t
-  \once \override NoteHead #'transparent = ##t
-  \once \override Stem #'transparent = ##t
-  \once \override Flag #'transparent = ##t
-  \once \override NoteHead #'no-ledgers = ##t
-  \once \override Glissando #'(bound-details left padding) = #0.3
+  \once \hide TabNoteHead
+  \once \hide NoteHead
+  \once \hide Stem
+  \once \override NoteHead.no-ledgers = ##t
+  \once \override Glissando.bound-details.left.padding = #0.3
 }
 
 music= \relative c' {
index e77b94296c2cd20569d8a81e506a6e5474454a39..ebfcda051323494a825a957fc9d52209c452a18a 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
@@ -20,16 +20,16 @@ dotted-line, line, trill or zigzag.
 
 \relative c' {
   c2\< c\!
-  \override Hairpin #'style = #'dashed-line
+  \override Hairpin.style = #'dashed-line
   c2\< c\!
-  \override Hairpin #'style = #'dotted-line
+  \override Hairpin.style = #'dotted-line
   c2\< c\!
-  \override Hairpin #'style = #'line
+  \override Hairpin.style = #'line
   c2\< c\!
-  \override Hairpin #'style = #'trill
+  \override Hairpin.style = #'trill
   c2\< c\!
-  \override Hairpin #'style = #'zigzag
+  \override Hairpin.style = #'zigzag
   c2\< c\!
-  \revert Hairpin #'style
+  \revert Hairpin.style
   c2\< c\!
 }
index e85878da1e779f43c8db4b29eb7e1785a014ce22..8c939d25c1d7e4532359f69b253c249cad5c80a4 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.15
+\version "2.17.15"
 
 \header {
   lsrtags = "contemporary-notation, percussion, real-music, rhythms"
@@ -19,29 +20,11 @@ is the template of a real Balkan song!).
 } % begin verbatim
 
 
-#(define plus (markup #:vcenter "+"))
-#(define ((custom-time-signature one two three four five six
-                                 seven eight nine ten eleven num) grob)
-   (grob-interpret-markup grob
-                          (markup #:override '(baseline-skip . 0) #:number
-                                  (#:line ((#:column (one num)) plus
-                                           (#:column (two num)) plus
-                                           (#:column (three num)) plus
-                                           (#:column (four num)) plus
-                                           (#:column (five num)) plus
-                                           (#:column (six num)) plus
-                                           (#:column (seven num)) plus
-                                           (#:column (eight num)) plus
-                                           (#:column (nine num)) plus
-                                           (#:column (ten num)) plus
-                                           (#:column (eleven num)))))))
 melody = \relative c'' {
   \set Staff.instrumentName = #"Bb Sop."
   \key g \major
-  \time #'(3 2 2 3 2 2 2 2 3 2 2) 25/8
-  \override Staff.TimeSignature #'stencil =
-    #(custom-time-signature "3" "2" "2" "3" "2" "2"
-      "2" "2" "3" "2" "2" "8")
+  \compoundMeter #'((3 8) (2 8) (2 8) (3 8) (2 8) (2 8)
+                    (2 8) (2 8) (3 8) (2 8) (2 8))
   c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break
   c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4
   c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break
@@ -50,8 +33,8 @@ melody = \relative c'' {
 }
 
 drum = \new DrumStaff \drummode {
-  \bar "|:" bd4.^\markup { Drums } sn4 bd \bar ":" sn4.
-  bd4 sn \bar ":" bd sn bd4. sn4 bd \bar ":|"
+  \bar ".|:" bd4.^\markup { Drums } sn4 bd \bar ";" sn4.
+  bd4 sn \bar ";" bd sn bd4. sn4 bd \bar ":|."
 }
 
 {
index c4e19591958406470aeec83f4977a5c8c6bd59ed..1c3c4ea4ea590867214e11a58917e8ad840b1301 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "pitches"
@@ -18,7 +18,7 @@ system.
 } % begin verbatim
 
 \relative c'' {
-  \override Accidental #'hide-tied-accidental-after-break = ##t
+  \override Accidental.hide-tied-accidental-after-break = ##t
   cis1~ cis~
   \break
   cis
index 1df5ec0bf40d7d69da645b29c9993c39f0380d9a..682e2d5421e3f4db6d64481b1bfaf7bfac35ad81 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks"
@@ -20,7 +20,7 @@ following way:
 
 
 \relative c'' {
-  \override DynamicTextSpanner #'style = #'none
+  \override DynamicTextSpanner.style = #'none
   \crescTextCresc
   c1\< | d | b | c\!
 }
index 79423f16588dc4532702931d2c6380f9a4060a1a..b336b35caf5dd57ff28804e2c7bab586698813ed 100644 (file)
@@ -1,10 +1,17 @@
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.6
 %% DO NOT EDIT this file manually; it is automatically
 %% generated from LSR http://lsr.dsi.unimi.it
 %% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "correction-wanted, expressive-marks, tweaks-and-overrides, version-specific"
@@ -17,16 +24,18 @@ displayed way after the note it applies to.
 To correctly align the @qq{sempre pp} horizontally, so that it is
 aligned as if it were only the \\pp, there are several approaches:
 
-* Simply use @code{\\once\\override DynamicText #'X-offset = #-9.2}
+* Simply use @code{\\once\\override DynamicText.X-offset = #-9.2}
 before the note with the dynamics to manually shift it to the correct
 position. Drawback: This has to be done manually each time you use that
-dynamic markup... * Add some padding (@code{#:hspace 7.1}) into the
+dynamic markup...
+
+* Add some padding (@code{#:hspace 7.1}) into the
 definition of your custom dynamic mark, so that after lilypond
 center-aligns it, it is already correctly aligned. Drawback: The
 padding really takes up that space and does not allow any other markup
 or dynamics to be shown in that position.
 
-* Shift the dynamic script @code{\\once\\override ... #'X-offset = ..}.
+* Shift the dynamic script @code{\\once\\override ...X-offset = ..}.
 Drawback: @code{\\once\\override} is needed for every invocation!
 
 * Set the dimensions of the additional text to 0 (using
@@ -53,7 +62,8 @@ not at the center of pp.
 } % begin verbatim
 
 
-\header { title = "Horizontally aligning custom dynamics" }
+\header { title = "Horizontally aligning custom dynamics" } % begin verbatim
+
 
 \paper { ragged-right = ##f }
 
@@ -63,7 +73,7 @@ not at the center of pp.
 semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" }
 
 % Solution 2: Using a dynamic script & shifting with
-%             \once \override ... #'X-offset = ..
+%             \once \override ...X-offset = ..
 % Drawback: \once \override needed for every invocation
 semppK =
 #(make-dynamic-script
@@ -108,7 +118,7 @@ semppG =
 
 % Solution 6: Dynamic with explicit alignment. This has only effect
 %             if one sets X-offset!
-% Drawback: One needs to set DynamicText #'X-offset!
+% Drawback: One needs to set DynamicText.X-offset!
 % Drawback: Aligned at the right edge of the additional text,
 %           not at the center of pp
 semppMII =
@@ -137,10 +147,10 @@ semppMII =
     \set Staff.instrumentName = \markup \column { Explicit shifting }
     \relative c'' {
       \key es \major
-      \once \override DynamicText #'X-offset = #-9.2
+      \once \override DynamicText.X-offset = #-9.2
       c4\semppK c\p c c
       c4\ff c
-      \once \override DynamicText #'X-offset = #-9.2
+      \once \override DynamicText.X-offset = #-9.2
       c4\semppK c
     }
   >>
@@ -170,7 +180,7 @@ semppMII =
     \relative c'' {
       \key es \major
       % Setting to ##f (false) gives the same result
-      \override DynamicText #'X-offset = #0
+      \override DynamicText.X-offset = #0
       c4\semppMII c\p c c | c\ff c c\semppMII c
     }
   >>
index c241b7f6afc1885153e408d17a7fe29667a0c2da..cbcd2bc9c724c931b57be795526ef4f3feb74547 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "fretted-strings, specific-notation, tweaks-and-overrides"
@@ -34,7 +34,7 @@ harmonies = \chordmode
 {
   a8:13
 % THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME
-  \once \override ChordNames.ChordName #'extra-offset = #'(10 . 0)
+  \once \override ChordNames.ChordName.extra-offset = #'(10 . 0)
   b8:13 s2.
 % THIS LINE IS THE SECOND METHOD
     s4 s4  b4:13
@@ -47,7 +47,7 @@ harmonies = \chordmode
     \context Staff
     {a8^\markup { \fret-diagram  #"6-x;5-0;4-2;3-0;2-0;1-2;"  }
 % THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM
-     \once \override TextScript #'extra-offset = #'(10 . 0)
+     \once \override TextScript.extra-offset = #'(10 . 0)
      b4.~^\markup { \fret-diagram  #"6-x;5-2;4-4;3-2;2-2;1-4;"  } b4. a8\break
 % HERE IS THE SECOND METHOD
      <<
index 72d4a9b1016e5183327a62c53b3f55010d91bb66..1a84268db61adb0477c4f709530d357e3dd58c95 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.24
+\version "2.17.24"
 
 \header {
   lsrtags = "editorial-annotations, expressive-marks, staff-notation, tweaks-and-overrides"
@@ -39,16 +40,16 @@ box of the mark from its original value.
 
 \relative c'{
     c d e f |
-    \once \override Score.RehearsalMark #'extra-offset = #'(0 . -8.5)
-    \once \override Score.RehearsalMark #'baseline-skip = #9
+    \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
+    \once \override Score.RehearsalMark.baseline-skip = #9
     \mark \markup \center-column { \circle 1 \box A }
     g f e d |
-    \once \override Score.RehearsalMark #'extra-offset = #'(0 . -8.5)
-    \once \override Score.RehearsalMark #'baseline-skip = #9
+    \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
+    \once \override Score.RehearsalMark.baseline-skip = #9
     \mark \markup \center-column { \flat { \bold \small \italic Fine. } }
     g f e d |
-    \once \override Score.RehearsalMark #'extra-offset = #'(0 . -8.5)
-    \once \override Score.RehearsalMark #'baseline-skip = #9
-    \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible
-    \mark \markup \center-column { \musicglyph #"scripts.ufermata" \box z }
+    \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
+    \once \override Score.RehearsalMark.baseline-skip = #9
+    \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
+    \mark \markup \center-column { \fermata \box z }
 }
index 80a56e227e5338159355ea7a6899813163eb1696..12d760f3ff1e1c2fd50bdb34e9ce9ad665468246 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, expressive-marks, staff-notation, tweaks-and-overrides"
@@ -30,7 +30,7 @@ independently of the other.
     \new Staff {
       <<
         \new Voice \with {
-          \consists "Mark_engraver"
+          \consists Mark_engraver
           \consists "Staff_collecting_engraver"
         }
         { c4 d e f
@@ -38,9 +38,9 @@ independently of the other.
           c4 d e f
         }
         \new Voice \with {
-          \consists "Mark_engraver"
+          \consists Mark_engraver
           \consists "Staff_collecting_engraver"
-          \override RehearsalMark #'direction = #DOWN
+          \override RehearsalMark.direction = #DOWN
         }
         { s4 s s s
           \mark \markup { \circle 1 }
index 075cd35840cc1e8a5624d208ffc78ac2211fff2a..b078cc0f538a3e3c5879103f08abf5429019f359 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.42
-\version "2.16.0"
+%% Note: this file works from version 2.17.30
+\version "2.17.30"
 
 \header {
   lsrtags = "staff-notation, ancient-notation, really-cool"
@@ -20,13 +20,10 @@ separate the instrument name definition and the incipit definition.
 incipit =
 #(define-music-function (parser location incipit-music) (ly:music?)
   #{
-    \once \override Staff.InstrumentName #'self-alignment-X = #RIGHT
-    \once \override Staff.InstrumentName #'self-alignment-Y = #UP
-    \once \override Staff.InstrumentName #'Y-offset =
-      #(lambda (grob)
-         (+ 4 (system-start-text::calc-y-offset grob)))
-    \once \override Staff.InstrumentName #'padding = #0.3
-    \once \override Staff.InstrumentName #'stencil =
+    \once \override Staff.InstrumentName.self-alignment-X = #RIGHT
+    \once \override Staff.InstrumentName.self-alignment-Y = ##f
+    \once \override Staff.InstrumentName.padding = #0.3
+    \once \override Staff.InstrumentName.stencil =
       #(lambda (grob)
         (let* ((instrument-name (ly:grob-property grob 'long-text)))
           (set! (ly:grob-property grob 'long-text)
@@ -35,8 +32,6 @@ incipit =
                         {
                           { \context MensuralStaff \with {
                                instrumentName = #instrument-name
-                               \override VerticalAxisGroup
-                                #'Y-extent = #'(-4 . 4)
                             } $incipit-music
                           }
                           \layout { $(ly:grob-layout grob)
@@ -46,7 +41,7 @@ incipit =
                                % escaping lexical closure and evaluating
                                % everything respective to (current-module).
                                     #(primitive-eval
-                                       '(or (false-if-exception (- indent (* mm incipit-width)))
+                                       '(or (false-if-exception (- indent incipit-width))
                                            (* 0.5 indent)))
                                     ragged-right = ##f
                                     ragged-last = ##f
@@ -67,7 +62,7 @@ global = {
   \skip 1*8
 
   % let finis bar go through all staves
-  \override Staff.BarLine #'transparent = ##f
+  \override Staff.BarLine.transparent = ##f
 
   % finis bar
   \bar "|."
@@ -94,7 +89,7 @@ discantusNotes = {
     c'4 e'4.( d'8 c' b |
     a4) b a2 |
     b4.( c'8 d'4) c'4 |
-    \once \override NoteHead #'transparent = ##t
+    \once \hide NoteHead
     c'1 |
     b\breve |
   }
@@ -131,7 +126,7 @@ altusNotes = {
     a2 g4 e |
     fis g4.( fis16 e fis4) |
     g1 |
-    \once \override NoteHead #'transparent = ##t
+    \once \hide NoteHead
     g1 |
     g\breve |
   }
@@ -169,7 +164,7 @@ tenorNotes = {
     R1 |
     % two measures
     r2 d'2. d'4 b e' |
-    \once \override NoteHead #'transparent = ##t
+    \once \hide NoteHead
     e'1 |
     d'\breve |
   }
@@ -205,7 +200,7 @@ bassusNotes = {
     R1 |
     R1 |
     g2. e4 |
-    \once \override NoteHead #'transparent = ##t
+    \once \hide NoteHead
     e1 |
     g\breve |
   }
@@ -254,7 +249,7 @@ bassusLyrics = \lyricmode {
     \context {
       \Score
       %% no bar lines in staves or lyrics
-      \override BarLine #'transparent = ##t
+      \hide BarLine
     }
     %% the next two instructions keep the lyrics between the bar lines
     \context {
@@ -265,7 +260,7 @@ bassusLyrics = \lyricmode {
     \context {
       \Voice
       %% no slurs
-      \override Slur #'transparent = ##t
+      \hide Slur
       %% Comment in the below "\remove" command to allow line
       %% breaking also at those bar lines where a note overlaps
       %% into the next measure.  The command is commented out in this
index 0452647221f52d1d83c0fdfc9f8c20afc11969a5..bbb2f9fbd6b03ca3d9aa619d0d2ecaba3dcce8d5 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "keyboards, real-music"
@@ -26,7 +26,7 @@ context.
 
 \new PianoStaff <<
   \set PianoStaff.connectArpeggios = ##t
-  \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket
+  \override PianoStaff.Arpeggio.stencil = #ly:arpeggio::brew-chord-bracket
   \new Staff {
     \relative c' {
       \key b \major
index 2789bce283664f3d204c07e4cce0f2132d69071d..c8378a2f1da094584efeb517d7d55663c64ffbc4 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
@@ -20,12 +20,12 @@ available.
 
 
 \relative c'' {
-  \override BreathingSign #'text = \markup {
+  \override BreathingSign.text = \markup {
     \musicglyph #"scripts.caesura.straight"
   }
   c8 e4. \breathe g8. e16 c4
 
-  \override BreathingSign #'text = \markup {
+  \override BreathingSign.text = \markup {
     \musicglyph #"scripts.caesura.curved"
   }
   g8 e'4. \breathe g8. e16 c4
index d556d5b80d5e820055a1658e6792bb3bb8ab894b..388398c02d8fd948cb5c072498734972c45bc58c 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.15
+\version "2.17.15"
 
 \header {
   lsrtags = "real-music, staff-notation"
@@ -25,22 +26,22 @@ tuning = \markup {
       \clef bass
       <c, g, d g>1
     }
-    \layout { ragged-right = ##t }
+    \layout { ragged-right = ##t  indent = 0\cm }
   }
 }
 
 \header {
   title = "Solo Cello Suites"
   subtitle = "Suite IV"
-  subsubtitle = \markup { Originalstimmung: \general-align #Y #CENTER \tuning }
+  subsubtitle = \markup { Originalstimmung: \raise #0.5 \tuning }
 }
 
 \layout { ragged-right = ##f }
 
 \relative c'' {
   \time 4/8
-  \times 2/3 { c8 d e } \times 2/3 { c d e }
-  \times 2/3 { c8 d e } \times 2/3 { c d e }
+  \tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e }
+  \tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e }
   g8 a g a
   g8 a g a
 }
index ff917606a4fd2735a698cbc7ac26fcf759ad6d77..4f0570da2c59e251d2e7572876132ae3e775a3b3 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.30
+\version "2.17.30"
 
 \header {
   lsrtags = "keyboards, percussion, fretted-strings, template, real-music"
@@ -41,17 +41,15 @@ music is within a @code{\\transpose} section.
 %%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%%
 
 sl = {
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Stem
 }
 nsl = {
-  \revert NoteHead #'style
-  \revert Stem #'transparent
-  \revert Flag #'transparent
+  \revert NoteHead.style
+  \undo \hide Stem
 }
-crOn = \override NoteHead #'style = #'cross
-crOff = \revert NoteHead #'style
+crOn = \override NoteHead.style = #'cross
+crOff = \revert NoteHead.style
 
 %% insert chord name style stuff here.
 
@@ -272,8 +270,8 @@ drumContents = {
     \context { \Staff \RemoveEmptyStaves }
     \context {
       \Score
-      \override BarNumber #'padding = #3
-      \override RehearsalMark #'padding = #2
+      \override BarNumber.padding = #3
+      \override RehearsalMark.padding = #2
       skipBars = ##t
     }
   }
index 04c569fd159dacac147696fe8ff3220282a9091e..150474729739106b2e9346033ece701b7c7db1f0 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "pitches, tweaks-and-overrides"
@@ -25,12 +25,12 @@ initial clef.  This can be overridden with @code{full-size-change}.
   c1
   \clef "treble"
   c1
-  \override Staff.Clef #'full-size-change = ##t
+  \override Staff.Clef.full-size-change = ##t
   \clef "bass"
   c1
   \clef "treble"
   c1
-  \revert Staff.Clef #'full-size-change
+  \revert Staff.Clef.full-size-change
   \clef "bass"
   c1
   \clef "treble"
index 8523dd6a8c54e477bed34165ea3f1785ea3695cf..177675afc54827856be5d33fbc4d2ef18bd6029b 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.24
+\version "2.17.24"
 
 \header {
   lsrtags = "headword"
@@ -31,7 +32,7 @@ fermataLong = \markup {
   \override #'(direction . 1)
   \override #'(baseline-skip . 2) {
     \dir-column {
-      \musicglyph #"scripts.ufermata"
+      \fermata
       \text \italic \center-align long
     }
   }
@@ -85,13 +86,13 @@ fermataLong = \markup {
     >>
     \clef bass
     <ds b! es'>4 ( ^ \markup \bold { Rall. }
-    \override Script #'stencil = #(lambda (grob)
+    \override Script.stencil = #(lambda (grob)
       (grob-interpret-markup grob fermataLong))
     <ds' as'>8 ) \fermata
     \noBeam
     \clef treble
     \slurUp
-    \once \override Hairpin #'to-barline = ##f
+    \once \override Hairpin.to-barline = ##f
     <as fs'>8 ( \pp \>
     |
     <gs b cs'>4. \! ) ^\markup \bold { a Tempo }
@@ -132,19 +133,19 @@ fermataLong = \markup {
         |
         s4. \!
         \slurUp
-        \once \override Script #'direction = #UP
+        \once \override Script.direction = #UP
         <a bs e'>8 ( \accent
         |
         <as! cs' gs'>4. )
-        \once \override Hairpin #'to-barline = ##f
+        \once \override Hairpin.to-barline = ##f
         <a' bs'>8 \ppp \>
         |
         s8 \!
         \stemDown
-        \once \override Script #'direction = #UP
+        \once \override Script.direction = #UP
         \ottava #1
         \voiceOne
-        \once \override PianoStaff.Arpeggio #'padding = #0.8
+        \once \override PianoStaff.Arpeggio.padding = #0.8
         <cs''' as''' cs''''>4. \arpeggio \fermata
         \ottava #0
         \bar "|."
@@ -219,8 +220,8 @@ fermataLong = \markup {
       cs'8
       < ds as >8 ] )
       |
-      \once \override Script #'outside-staff-priority = #100
-      \once \override TextScript #'outside-staff-priority = #500
+      \once \override Script.outside-staff-priority = #100
+      \once \override TextScript.outside-staff-priority = #500
       <cs, gs,>4. \fermata _\markup \italic { ped. }
       <fs, cs>8 (
       |
index 415afb73bdc72a72a461d0a7f39e1cf4479a6570..f834227dfcdf7ba2a70aaf52ca4894a1b9b5471b 100644 (file)
@@ -1,4 +1,5 @@
 accordion-discant-symbols.ly
+accordion-registers.ly
 changing-the-text-for-sustain-markings.ly
 clusters.ly
 controlling-the-placement-of-chord-fingerings.ly
index bfc4f1600e790ec7dac00b9377674952199e1936..d125dc80386fea60213aa6d6d411ac5db08ba80e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "connecting-notes, contemporary-notation, expressive-marks, fretted-strings, keyboards, specific-notation"
@@ -23,7 +23,7 @@ using @code{'tie-configuration}.
   <c d f g>4\laissezVibrer r <c d f g>4.\laissezVibrer r8
 
   <c d e f>4\laissezVibrer r
-  \override LaissezVibrerTieColumn #'tie-configuration
+  \override LaissezVibrerTieColumn.tie-configuration
      = #`((-7 . ,DOWN)
           (-5 . ,DOWN)
           (-3 . ,UP)
index 3bc9a105ac982fb94f490fc68e15f59af2ca5384..93086da94c1aae14b51da5f788c2c52e00eb0896 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
@@ -19,19 +19,19 @@ Glissando).
 
 
 \relative c'' {
-  \override TextSpanner #'bound-padding = #1.0
-  \override TextSpanner #'style = #'line
-  \override TextSpanner #'(bound-details right arrow) = ##t
-  \override TextSpanner #'(bound-details left text) = #"fof"
-  \override TextSpanner #'(bound-details right text) = #"gag"
-  \override TextSpanner #'(bound-details right padding) = #0.6
-
-  \override TextSpanner #'(bound-details right stencil-align-dir-y) = #CENTER
-  \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
-
-  \override Glissando #'(bound-details right arrow) = ##t
-  \override Glissando #'arrow-length = #0.5
-  \override Glissando #'arrow-width = #0.25
+  \override TextSpanner.bound-padding = #1.0
+  \override TextSpanner.style = #'line
+  \override TextSpanner.bound-details.right.arrow = ##t
+  \override TextSpanner.bound-details.left.text = #"fof"
+  \override TextSpanner.bound-details.right.text = #"gag"
+  \override TextSpanner.bound-details.right.padding = #0.6
+
+  \override TextSpanner.bound-details.right.stencil-align-dir-y = #CENTER
+  \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
+
+  \override Glissando.bound-details.right.arrow = ##t
+  \override Glissando.arrow-length = #0.5
+  \override Glissando.arrow-width = #0.25
 
   a8\startTextSpan gis a4 b\glissando b,
   g'4 c\stopTextSpan c2
index fc6757dc6ff03486a1e08946abc726ee91bab27f..9167330fe64826c539b5c3ff19df484be2f658b2 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "really-simple, text, vocal-music"
@@ -27,10 +27,10 @@ well.
   c1
 }
 \addlyrics {
-  \once \override LyricText #'self-alignment-X = #LEFT
+  \once \override LyricText.self-alignment-X = #LEFT
   "This is left-aligned"
-  \once \override LyricText #'self-alignment-X = #CENTER
+  \once \override LyricText.self-alignment-X = #CENTER
   "This is centered"
-  \once \override LyricText #'self-alignment-X = #1
+  \once \override LyricText.self-alignment-X = #1
   "This is right-aligned"
 }
index fd1668089cb43edec449cfd31dc533d5f3025302..c7ad7b10a5585dd30f10c28a4fa5182ccf0a36e0 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.30
+\version "2.17.30"
 
 \header {
   lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
@@ -31,11 +31,11 @@ in that voice, the tie appears to cross voices.
   \time 2/4
   <<
     {
-      \once \override Stem #'transparent = ##t
-      \once \override Stem #'length = #8
+      \once \hide Stem
+      \once \override Stem.length = #8
       b8 ~ b\noBeam
-      \once \override Stem #'transparent = ##t
-      \once \override Stem #'length = #8
+      \once \hide Stem
+      \once \override Stem.length = #8
       g8 ~ g\noBeam
     }
     \\
index 9eee164eb140159e78f12479de08e4956e157c2a..16799a19cfde7d9a4d90cae5e2d7d1f158773331 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.15.15"
+%% Note: this file works from version 2.17.30
+\version "2.17.30"
 
 \header {
   lsrtags = "staff-notation, tweaks-and-overrides"
@@ -21,14 +21,14 @@ at a line break:
 
 
 glissandoSkipOn = {
-  \override NoteColumn #'glissando-skip = ##t
-  \override NoteHead #'transparent = ##t
-  \override NoteHead #'no-ledgers = ##t
+  \override NoteColumn.glissando-skip = ##t
+  \hide NoteHead
+  \override NoteHead.no-ledgers = ##t
 }
 
 \relative c'' {
-  \override Glissando #'breakable = ##t
-  \override Glissando #'after-line-breaking = ##t
+  \override Glissando.breakable = ##t
+  \override Glissando.after-line-breaking = ##t
   f1\glissando |
   \break
   a4 r2. |
index 4fda57bcfeb84de0ef50d9749a650b67ad237c7f..b4d11b13d7fdd5c8eb2c6ff1f9df4be7fb6c8b96 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, rhythms"
@@ -29,12 +29,12 @@ staff spaces.  @code{dash-fraction} is set to 1 for a solid slur.
 
 \relative c' {
   \once \override
-    Slur #'dash-definition = #'((0 0.3 0.1 0.75)
+    Slur.dash-definition = #'((0 0.3 0.1 0.75)
                                 (0.3 0.6 1 1)
                                 (0.65 1.0 0.4 0.75))
   c4( d e f)
   \once \override
-    Slur #'dash-definition = #'((0 0.25 1 1)
+    Slur.dash-definition = #'((0 0.25 1 1)
                                 (0.3 0.7 0.4 0.75)
                                 (0.75 1.0 1 1))
   c4( d e f)
index 9b24e3f97eaf91a7ff7c0f9d82b07219bd9a7499..1cf8befaa02315be7d88b4d23a88acb2baf736b9 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, really-cool, staff-notation, workaround"
@@ -21,7 +21,7 @@ emphasized, using the @code{line-positions} property of the
 } % begin verbatim
 
 {
-  \override Staff.StaffSymbol #'line-positions =
+  \override Staff.StaffSymbol.line-positions =
     #'(-4 -2 -0.2 0 0.2 2 4)
   d'4 e' f' g'
 }
index d9d292cb290f6042af25e22c2a9304d6d2e014ca..fe444152341330962595b2cb43fd74a9d5b5ba16 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "connecting-notes, rhythms, tweaks-and-overrides"
@@ -24,9 +24,9 @@ Beam positions may be controlled manually, by overriding the
 \relative c' {
   \time 2/4
   % from upper staff-line (position 2) to center (position 0)
-  \override Beam #'positions = #'(2 . 0)
+  \override Beam.positions = #'(2 . 0)
   c8 c
   % from center to one above center (position 1)
-  \override Beam #'positions = #'(0 . 1)
+  \override Beam.positions = #'(0 . 1)
   c8 c
 }
index 8618782bb1a296ff002e237d947f487418d0abfd..a836fd38d17f4eccc3637fcd9fcc8ce14b31744a 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "contemporary-notation, editorial-annotations, vocal-music, workaround"
@@ -20,7 +20,7 @@ a spoken section with the @code{\\speakOn} keyword, and end it with the
 
 
 speakOn = {
-  \override Stem #'stencil =
+  \override Stem.stencil =
     #(lambda (grob)
        (let* ((x-parent (ly:grob-parent grob X))
               (is-rest? (ly:grob? (ly:grob-object x-parent 'rest))))
@@ -37,8 +37,8 @@ speakOn = {
 }
 
 speakOff = {
-  \revert Stem #'stencil
-  \revert Flag #'stencil
+  \revert Stem.stencil
+  \revert Flag.stencil
 }
 
 \score {
index df602528c1f06943a6db7391703fdd318affcc97..688ba96a071087d14fd380ef1bc0df2480980b65 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "editorial-annotations, repeats, staff-notation, workaround"
@@ -27,8 +27,8 @@ transparent percent repeats.
   }
   \context Voice = "foo" {
     \set countPercentRepeats = ##t
-    \override PercentRepeat #'transparent = ##t
-    \override PercentRepeatCounter #'staff-padding = #1
+    \hide PercentRepeat
+    \override PercentRepeatCounter.staff-padding = #1
     \repeat percent 4 { s1 }
   }
 >>
index 725d9b46eafcb49e89601b4e855b91b6f8e0a012..dfb597b9a7108a8cd646a1cf12afd62bf397842e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "ancient-notation, contexts-and-engravers, staff-notation, tweaks-and-overrides"
@@ -21,10 +21,10 @@ the @code{transparent} property.
 
 
 global = {
-  \override Staff.BarLine #'transparent = ##t
+  \hide Staff.BarLine
   s1 s
   % the final bar line is not interrupted
-  \revert Staff.BarLine #'transparent
+  \undo \hide Staff.BarLine
   \bar "|."
 }
 \new StaffGroup \relative c'' {
index 1b78f4dff4cacb5faf35a629c43c5a5853f9ca52..8cacc7ba9000e6a15a69f6224402366bda08a90a 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.18
+\version "2.17.18"
 
 \header {
   lsrtags = "really-simple, rhythms, version-specific"
@@ -19,7 +20,7 @@ can be printed on the same staff line, using the following setting.
 } % begin verbatim
 
 
-normalPos = \revert MultiMeasureRest #'staff-position
+normalPos = \revert MultiMeasureRest.direction
 
 {
   <<
index ea6f3381237ff44807cd86b0d3a9d7c04c693341..a2553ad84ec7c4e2a761471ce2c7bd208c55f8f7 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.25"
 
 \header {
   lsrtags = "expressive-marks"
@@ -12,7 +12,7 @@
   texidoc = "
 The shorthands are defined in @samp{ly/script-init.ly}, where the
 variables @code{dashHat}, @code{dashPlus}, @code{dashDash},
-@code{dashBar}, @code{dashLarger}, @code{dashDot}, and
+@code{dashBang}, @code{dashLarger}, @code{dashDot}, and
 @code{dashUnderscore} are assigned default values.  The default values
 for the shorthands can be modified. For example, to associate the
 @code{-+} (@code{dashPlus}) shorthand with the trill symbol instead of
index 3cff9d1059f74068fe9cd427f118c963e816b228..bde66e61680a96f7a3d805cd5941149b5e0f8c71 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "really-simple, rhythms"
@@ -30,11 +30,11 @@ modify what material they cover.
   % ...to cover all items up to the next note
   \set tupletFullLengthNote = ##t
   \time 2/4
-  \times 2/3 { c4 c c }
+  \tuplet 3/2 { c4 c c }
   % ...or to cover just whitespace
   \set tupletFullLengthNote = ##f
   \time 4/4
-  \times 4/5 { c4 c1 }
+  \tuplet 5/4 { c4 c1 }
   \time 3/4
   c2.
 }
index 748d309d101f80eb2d327d1f8a13a9bbb64aae74..8a225d29ff56a627f4b66e4ee93f685e6f1185a9 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
@@ -22,9 +22,9 @@ the right.  This behaviour can be over-ridden by using the
 
 \new Staff \relative c' <<
   { f2. f4
-    \override Staff.NoteCollision #'prefer-dotted-right = ##f
+    \override Staff.NoteCollision.prefer-dotted-right = ##f
     f2. f4
-    \override Staff.NoteCollision #'prefer-dotted-right = ##t
+    \override Staff.NoteCollision.prefer-dotted-right = ##t
     f2. f4
   }
   \\
index 6b7d5e44d809b62482a150334ba3753211c2bcb4..d2b93bb89c6d7ef23bce3d14528f8b37800d268b 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
@@ -28,24 +28,24 @@ slurs further down.
 \relative c' {
   \stemDown
   e4( a)
-  \override Slur #'positions = #'(1 . 1)
+  \override Slur.positions = #'(1 . 1)
   e4( a)
-  \override Slur #'positions = #'(2 . 2)
+  \override Slur.positions = #'(2 . 2)
   e4( a)
-  \override Slur #'positions = #'(3 . 3)
+  \override Slur.positions = #'(3 . 3)
   e4( a)
-  \override Slur #'positions = #'(4 . 4)
+  \override Slur.positions = #'(4 . 4)
   e4( a)
-  \override Slur #'positions = #'(5 . 5)
+  \override Slur.positions = #'(5 . 5)
   e4( a)
-  \override Slur #'positions = #'(0 . 5)
+  \override Slur.positions = #'(0 . 5)
   e4( a)
-  \override Slur #'positions = #'(5 . 0)
+  \override Slur.positions = #'(5 . 0)
   e4( a)
   \stemUp
-  \override Slur #'positions = #'(-5 . -5)
+  \override Slur.positions = #'(-5 . -5)
   e4( a)
   \stemDown
-  \revert Slur #'positions
+  \revert Slur.positions
   e4( a)
 }
index d7bd204f2c74614869f8ee3d85b336d87eecb1f5..e1d8deea448609d05f32a9d972cf88bb636048a0 100644 (file)
 Markups attached to a multi-measure rest will be centered above or
 below it.  Long markups attached to multi-measure rests do not cause
 the measure to expand.  To expand a multi-measure rest to fit the
-markup, use a spacer rest with an attached markup before the
+markup, use an empty chord with an attached markup before the
 multi-measure rest.
 
-Note that the spacer rest causes a bar line to be inserted.  Text
-attached to a spacer rest in this way is left-aligned to the position
-where the note would be placed in the measure, but if the measure
-length is determined by the length of the text, the text will appear to
-be centered.
+Text attached to a spacer rest in this way is left-aligned to the
+position where the note would be placed in the measure, but if the
+measure length is determined by the length of the text, the text will
+appear to be centered.
 
 "
   doctitle = "Multi-measure rest markup"
 } % begin verbatim
 
-
 \relative c' {
   \compressFullBarRests
   \textLengthOn
-  s1*0^\markup { [MAJOR GENERAL] }
+  <>^\markup { [MAJOR GENERAL] }
   R1*19
-  s1*0_\markup { \italic { Cue: ... it is yours } }
-  s1*0^\markup { A }
+  <>_\markup { \italic { Cue: ... it is yours } }
+  <>^\markup { A }
   R1*30^\markup { [MABEL] }
   \textLengthOff
   c4^\markup { CHORUS } d f c
diff --git a/Documentation/snippets/new/GNUmakefile b/Documentation/snippets/new/GNUmakefile
deleted file mode 100644 (file)
index 155e3f1..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-depth = ../../..
-
-EXTRA_DIST_FILES = README
-EXTRA_DIST_FILES += $(call src-wildcard,*.ly)
-
-include $(depth)/make/stepmake.make
diff --git a/Documentation/snippets/new/accordion-discant-symbols.ly b/Documentation/snippets/new/accordion-discant-symbols.ly
new file mode 100644 (file)
index 0000000..7ec2129
--- /dev/null
@@ -0,0 +1,176 @@
+\version "2.16.0"
+
+\header {
+  lsrtags = "keyboards, specific-notation, symbols-and-glyphs, workaround"
+
+  texidoc = "
+This snippet has been obsoleted by predefined markup commands, see
+@ruser{Accordion Registers}.  It's still useful as a simple
+demonstration of how to combine symbols: the placement of the symbols
+added with @code{\\markup} can be tweaked by changing the
+@code{\\translate-scaled} arguments.  @code{\\translate-scaled} is
+used here rather than @code{\\translate} in order to let the
+positioning of the symbol parts adapt to changes of @code{font-size}.
+"
+  doctitle = "Accordion-discant symbols"
+}
+
+discant = \markup {
+  \musicglyph #"accordion.discant"
+}
+dot = \markup {
+  \musicglyph #"accordion.dot"
+}
+
+\layout { ragged-right = ##t }
+
+% 16 voets register
+accBasson = ^\markup {
+  \combine
+  \discant
+  \translate-scaled #'(0 . 0.5) \dot
+}
+
+% een korig 8 en 16 voets register
+accBandon = ^\markup {
+  \combine
+    \discant
+    \combine
+      \translate-scaled #'(0 . 0.5) \dot
+      \translate-scaled #'(0 . 1.5) \dot
+}
+
+accVCello = ^\markup {
+  \combine
+    \discant
+    \combine
+      \translate-scaled #'(0 . 0.5) \dot
+      \combine
+        \translate-scaled #'(0 . 1.5) \dot
+        \translate-scaled #'(1 . 1.5) \dot
+}
+
+% 4-8-16 voets register
+accHarmon = ^\markup {
+  \combine
+    \discant
+    \combine
+      \translate-scaled #'(0 . 0.5) \dot
+      \combine
+        \translate-scaled #'(0 . 1.5) \dot
+        \translate-scaled #'(0 . 2.5) \dot
+}
+
+accTrombon = ^\markup {
+  \combine
+    \discant
+    \combine
+      \translate-scaled #'(0 . 0.5) \dot
+      \combine
+        \translate-scaled #'(0 . 1.5) \dot
+        \combine
+          \translate-scaled #'(1 . 1.5) \dot
+          \translate-scaled #'(-1 . 1.5) \dot
+}
+
+% eenkorig 4 en 16 voets register
+accOrgan = ^\markup {
+  \combine
+    \discant
+    \combine
+      \translate-scaled #'(0 . 0.5) \dot
+      \translate-scaled #'(0 . 2.5) \dot
+}
+
+accMaster = ^\markup {
+  \combine
+    \discant
+    \combine
+      \translate-scaled #'(0 . 0.5) \dot
+      \combine
+        \translate-scaled #'(0 . 1.5) \dot
+        \combine
+          \translate-scaled #'(1 . 1.5) \dot
+          \combine
+            \translate-scaled #'(-1 . 1.5) \dot
+            \translate-scaled #'(0 . 2.5) \dot
+}
+
+accAccord = ^\markup {
+  \combine
+    \discant
+    \combine
+      \translate-scaled #'(0 . 1.5) \dot
+      \combine
+        \translate-scaled #'(1 . 1.5) \dot
+        \combine
+          \translate-scaled #'(-1 . 1.5) \dot
+          \translate-scaled #'(0 . 2.5) \dot
+}
+
+accMusette = ^\markup {
+  \combine
+    \discant
+    \combine
+      \translate-scaled #'(0 . 1.5) \dot
+      \combine
+        \translate-scaled #'(1 . 1.5) \dot
+        \translate-scaled #'(-1 . 1.5) \dot
+}
+
+accCeleste = ^\markup {
+  \combine
+    \discant
+    \combine
+      \translate-scaled #'(0 . 1.5) \dot
+      \translate-scaled #'(-1 . 1.5) \dot
+}
+
+accOboe = ^\markup {
+  \combine
+    \discant
+    \combine
+      \translate-scaled #'(0 . 1.5) \dot
+      \translate-scaled #'(0 . 2.5) \dot
+}
+
+accClarin = ^\markup {
+  \combine
+    \discant
+    \translate-scaled #'(0 . 1.5) \dot
+}
+
+accPiccolo = ^\markup {
+    \combine
+       \discant
+       \translate-scaled #'(0 . 2.5) \dot
+}
+
+accViolin = ^\markup {
+  \combine
+    \discant
+    \combine
+      \translate-scaled #'(0 . 1.5) \dot
+      \combine
+        \translate-scaled #'(1 . 1.5) \dot
+        \translate-scaled #'(0 . 2.5) \dot
+}
+
+\relative c'' {
+  c4 d\accBasson e f
+  c4 d\accBandon e f
+  c4 d\accVCello e f
+  c4 d\accHarmon e f
+  c4 d\accTrombon e f
+  \break
+  c4 d\accOrgan e f
+  c4 d\accMaster e f
+  c4 d\accAccord e f
+  c4 d\accMusette e f
+  c4 d\accCeleste e f
+  \break
+  c4 d\accOboe e f
+  c4 d\accClarin e f
+  c4 d\accPiccolo e f
+  c4 d\accViolin e f
+}
diff --git a/Documentation/snippets/new/accordion-registers.ly b/Documentation/snippets/new/accordion-registers.ly
new file mode 100644 (file)
index 0000000..26a6e9d
--- /dev/null
@@ -0,0 +1,32 @@
+\version "2.17.23"
+
+\header {
+  lsrtags = "keyboards, specific-notation, symbols-and-glyphs"
+
+  texidoc = "Accordion register symbols are available as
+@code{\\markup} as well as as standalone music events (as register
+changes tend to occur between actual music events.  Bass registers are
+not overly standardized.  The available commands can be found in
+@ruser{Accordion Registers}."
+
+  doctitle = "Accordion register symbols"
+}
+
+\layout { ragged-right = ##t }
+
+#(use-modules (scm accreg))
+
+\new PianoStaff
+<<
+  \new Staff \relative
+  { \clef treble \discant "10" r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
+    << { r16 <f bes> r <e a> r <d g> } \\ { d r a r bes r } >> | <cis e a>1 }    
+  \new Staff \relative
+  { \clef treble \freeBass "1" r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
+    \clef bass \stdBass "Master"
+    << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
+        <e a cis>1^"a" } \\
+       { d8_"D" c_"C" bes_"B" | a1_"A" }
+     >>
+  }
+>>
diff --git a/Documentation/snippets/new/adding-a-figured-bass-above-or-below-the-notes.ly b/Documentation/snippets/new/adding-a-figured-bass-above-or-below-the-notes.ly
new file mode 100644 (file)
index 0000000..71dcf28
--- /dev/null
@@ -0,0 +1,48 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.6"
+
+\header {
+  lsrtags = "ancient-notation, chords, contexts-and-engravers"
+
+  texidoc = "
+When writing a figured bass, you can place the figures above or below
+the bass notes, by defining the
+@code{BassFigureAlignmentPositioning.direction} property (exclusively
+in a @code{Staff} context).  Choices are @code{#UP} (or @code{#1}),
+@code{#CENTER} (or @code{#0}) and @code{#DOWN} (or @code{#-1}).
+
+This property can be changed as many times as you wish.  Use
+@code{\\once \\override} if you don't want the override to apply to the
+whole score.
+
+"
+  doctitle = "Adding a figured bass above or below the notes"
+} % begin verbatim
+
+
+bass = {
+  \clef bass
+  g4 b, c d
+  e d8 c d2
+}
+continuo = \figuremode {
+  <_>4 <6>4 <5/>4
+  \override Staff.BassFigureAlignmentPositioning.direction = #UP
+  %\bassFigureStaffAlignmentUp
+  < _+ >4 <6>
+  \set Staff.useBassFigureExtenders = ##t
+  \override Staff.BassFigureAlignmentPositioning.direction = #DOWN
+  %\bassFigureStaffAlignmentDown
+  <4>4. <4>8 <_+>4
+}
+\score {
+  <<
+    \new Staff = bassStaff \bass
+    \context Staff = bassStaff \continuo
+  >>
+}
diff --git a/Documentation/snippets/new/adding-extra-fingering-with-scheme.ly b/Documentation/snippets/new/adding-extra-fingering-with-scheme.ly
new file mode 100644 (file)
index 0000000..b4d32ff
--- /dev/null
@@ -0,0 +1,39 @@
+\version "2.16.0"
+
+\header {
+  lsrtags = "scheme-language"
+
+  texidoc = "
+You can add additional elements to notes using @code{map-some-music}. In this
+example, an extra script is attached to a note.
+
+In general, first do a @code{\\displayMusic} of the music you want to
+create, then write a function that will work on the appropriate parts
+of the music for you.
+"
+  doctitle = "Adding extra fingering with scheme"
+}
+
+addScript =
+#(define-music-function (parser location script music)
+   (ly:event? ly:music?)
+   (map-some-music
+    (lambda (mus)
+      (define (append-script-at! prop)
+        (set! (ly:music-property mus prop)
+              (append (ly:music-property mus prop)
+                      (list (ly:music-deep-copy script))))
+        mus)
+      (case (ly:music-property mus 'name)
+        ((EventChord)
+         (append-script-at! 'elements))
+        ((NoteEvent)
+         (append-script-at! 'articulations))
+        (else #f)))
+    music))
+
+\score {
+  {
+    \addScript _6 { c'4-3 <c' e' g'> }
+  }
+}
index 42c4df97b052e76bc178546be7d45127d84628f3..fcc5778c8422e472040107cb16ee9234133d263f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "staff-notation, vocal-music"
@@ -25,8 +25,8 @@ cueWhile =
    (string? string? ly:dir? ly:music?)
    #{
      \cueDuring $instrument #dir {
-       \once \override TextScript #'self-alignment-X = #RIGHT
-       \once \override TextScript #'direction = $dir
+       \once \override TextScript.self-alignment-X = #RIGHT
+       \once \override TextScript.direction = $dir
        <>-\markup { \tiny #name }
        $music
      }
index f4ff3a7e21a1fd902fb974eb1f8e4e62c35c897e..3bb2d02119d5d7328b38e88212c12c34af6b5308 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.15.15"
+\version "2.17.30"
 
 \header {
   lsrtags = "expressive-marks, staff-notation, tweaks-and-overrides"
@@ -16,15 +16,15 @@ be repositioned slightly.
 }
 
 glissandoSkipOn = {
-  \override NoteColumn #'glissando-skip = ##t
-  \override NoteHead #'transparent = ##t
-  \override NoteHead #'no-ledgers = ##t
+  \override NoteColumn.glissando-skip = ##t
+  \hide NoteHead
+  \override NoteHead.no-ledgers = ##t
 }
 
 glissandoSkipOff = {
-  \revert NoteColumn #'glissando-skip
-  \revert NoteHead #'transparent
-  \revert NoteHead #'no-ledgers
+  \revert NoteColumn.glissando-skip
+  \undo \hide NoteHead
+  \revert NoteHead.no-ledgers
 }
 
 \relative c'' {
index 138f4227b94dac45a2ce5d5b95a992bc034fb1ed..159bed3faebf39c1c60efa3c4d60ea19897ffb24 100644 (file)
@@ -1,5 +1,5 @@
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "ancient-notation, symbols-and-glyphs"
@@ -15,49 +15,49 @@ upperStaff = \new VaticanaStaff = "upperStaff" <<
   \context VaticanaVoice <<
     \transpose c c {
 
-      \override NoteHead #'style = #'vaticana.punctum
+      \override NoteHead.style = #'vaticana.punctum
       \key es \major
       \clef "vaticana-fa2"
       c1 des e f ges
 
-      \override NoteHead #'style = #'vaticana.inclinatum
+      \override NoteHead.style = #'vaticana.inclinatum
       a! b ces'
       \bar "|"
       % \break % 1 (8*1)
 
-      \override NoteHead #'style = #'vaticana.quilisma
+      \override NoteHead.style = #'vaticana.quilisma
       b! des'! ges! fes!
       \breathe
       \clef "vaticana-fa1"
-      \override NoteHead #'style = #'vaticana.plica
+      \override NoteHead.style = #'vaticana.plica
       es d
-      \override NoteHead #'style = #'vaticana.reverse.plica
+      \override NoteHead.style = #'vaticana.reverse.plica
       c d
       \bar "|"
       % \break %2 (8*1)
 
-      \override NoteHead #'style = #'vaticana.punctum.cavum
+      \override NoteHead.style = #'vaticana.punctum.cavum
       es f
-      \override NoteHead #'style = #'vaticana.lpes
+      \override NoteHead.style = #'vaticana.lpes
       g as
-      \override NoteHead #'style = #'vaticana.upes
+      \override NoteHead.style = #'vaticana.upes
       bes as
-      \override NoteHead #'style = #'vaticana.vupes
+      \override NoteHead.style = #'vaticana.vupes
       g f
-      \override NoteHead #'style = #'vaticana.linea.punctum
-      \once \override Staff.BarLine #'bar-extent = #'(-1 . 1) \bar "|"
+      \override NoteHead.style = #'vaticana.linea.punctum
+      \once \override Staff.BarLine.bar-extent = #'(-1 . 1) \bar "|"
       % \break % 3 (8*1)
 
       es d
-      \override NoteHead #'style = #'vaticana.epiphonus
+      \override NoteHead.style = #'vaticana.epiphonus
       c d
-      \override NoteHead #'style = #'vaticana.cephalicus
+      \override NoteHead.style = #'vaticana.cephalicus
       es f
 
-      \override Staff.KeySignature #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
-      \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
-      \override Staff.Custos #'style = #'medicaea
-      \override NoteHead #'style = #'medicaea.punctum
+      \override Staff.KeySignature.glyph-name-alist = #alteration-medicaea-glyph-name-alist
+      \override Staff.Accidental.glyph-name-alist = #alteration-medicaea-glyph-name-alist
+      \override Staff.Custos.style = #'medicaea
+      \override NoteHead.style = #'medicaea.punctum
       \clef "medicaea-fa2"
       ces des
       \bar "|"
@@ -65,22 +65,22 @@ upperStaff = \new VaticanaStaff = "upperStaff" <<
 
       e! f! ges
       \clef "medicaea-do2"
-      \override NoteHead #'style = #'medicaea.inclinatum
+      \override NoteHead.style = #'medicaea.inclinatum
       a! b! ces'
-      \override NoteHead #'style = #'medicaea.virga
+      \override NoteHead.style = #'medicaea.virga
       b! a!
       \bar "|"
       % \break % 5 (8*1)
 
       ges fes
       \clef "medicaea-fa1"
-      \override NoteHead #'style = #'medicaea.rvirga
+      \override NoteHead.style = #'medicaea.rvirga
       e des ces
 
-      \override Staff.KeySignature #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
-      \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
-      \override Staff.Custos #'style = #'hufnagel
-      \override NoteHead #'style = #'hufnagel.punctum
+      \override Staff.KeySignature.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+      \override Staff.Accidental.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+      \override Staff.Custos.style = #'hufnagel
+      \override NoteHead.style = #'hufnagel.punctum
       \clef "hufnagel-fa2"
       ces des es
       \bar "|"
@@ -88,16 +88,16 @@ upperStaff = \new VaticanaStaff = "upperStaff" <<
 
       fes ges
       \clef "hufnagel-do2"
-      \override NoteHead #'style = #'hufnagel.lpes
+      \override NoteHead.style = #'hufnagel.lpes
       as! bes! ces'
-      \override NoteHead #'style = #'hufnagel.virga
+      \override NoteHead.style = #'hufnagel.virga
       bes! as!
       \bar "|"
       % \break % 7 (8*1)
 
       ges! fes!
       \clef "hufnagel-do-fa"
-      \override NoteHead #'style = #'hufnagel.punctum
+      \override NoteHead.style = #'hufnagel.punctum
       es! des ces des! es! fes!
       \bar "||"
       % \break % 8 (8*1)
@@ -137,8 +137,8 @@ lowerStaff = \new MensuralStaff = "lowerStaff" <<
       r2
       \clef "mensural-g"
       r4 r8 r16 r16
-      \override NoteHead #'style = #'mensural
-      \override Rest #'style = #'mensural
+      \override NoteHead.style = #'mensural
+      \override Rest.style = #'mensural
       \clef "petrucci-f"
       c8 b, c16 b, c32 b, c64 b, c64 b,
       d8 e d16 e d32 e d64 e d64 e
@@ -202,23 +202,23 @@ lowerStaff = \new MensuralStaff = "lowerStaff" <<
     }
     \context {
       \MensuralVoice
-      \override NoteHead #'style = #'neomensural
-      \override Rest #'style = #'neomensural
-      \override Flag #'style = #'mensural
-      \override Stem #'thickness = #1.0
+      \override NoteHead.style = #'neomensural
+      \override Rest.style = #'neomensural
+      \override Flag.style = #'mensural
+      \override Stem.thickness = #1.0
     }
     \context {
       \MensuralStaff
-      \revert  BarLine #'transparent
-      \override KeySignature #'glyph-name-alist = #alteration-mensural-glyph-name-alist
+      \revert  BarLine.transparent
+      \override KeySignature.glyph-name-alist = #alteration-mensural-glyph-name-alist
       clefGlyph = #"clefs.petrucci.c2"
     }
     \context {
       \VaticanaStaff
-      \revert  BarLine #'transparent
-      \override StaffSymbol #'thickness = #2.0
-      \override KeySignature #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
-      \override Custos #'neutral-position = #4
+      \revert  BarLine.transparent
+      \override StaffSymbol.thickness = #2.0
+      \override KeySignature.glyph-name-alist = #alteration-vaticana-glyph-name-alist
+      \override Custos.neutral-position = #4
     }
   }
 }
index 36e873fd008df7946fff64a803ce9d923457a0d5..2fe51d97a2a189e16c56401e36aba3ccc5137398 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "vocal-music, ancient-notation, template"
@@ -36,12 +36,11 @@ verba = \lyricmode {
       \Staff
       \remove "Time_signature_engraver"
       \remove "Bar_engraver"
-      \override Stem #'transparent = ##t
-      \override Flag #'transparent = ##t
+      \hide Stem
     }
     \context {
       \Voice
-      \override Stem #'length = #0
+      \override Stem.length = #0
     }
     \context {
       \Score
index 0f292adb038db9e6f4e6c5a452dceaf755a1ecc1..c74d3920023bfaf8d6d153efb0688251874fb383 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "chords, fretted-strings"
@@ -34,12 +34,12 @@ bbarre =
                  (cons (make-music 'TextSpanEvent 'span-direction 1)
                        (ly:music-property last-element 'articulations))))))
    #{
-       \once \override TextSpanner #'font-size = #-2
-       \once \override TextSpanner #'font-shape = #'upright
-       \once \override TextSpanner #'staff-padding = #3
-       \once \override TextSpanner #'style = #'line
-       \once \override TextSpanner #'to-barline = ##f
-       \once \override TextSpanner #'bound-details =
+       \once \override TextSpanner.font-size = #-2
+       \once \override TextSpanner.font-shape = #'upright
+       \once \override TextSpanner.staff-padding = #3
+       \once \override TextSpanner.style = #'line
+       \once \override TextSpanner.to-barline = ##f
+       \once \override TextSpanner.bound-details =
             #`((left
                 (text . ,#{ \markup { \draw-line #'( 0 . -.5) } #})
                 (Y . 0)
@@ -51,7 +51,7 @@ bbarre =
                 (padding . 0.25)
                 (attach-dir . 2)))
 %% uncomment this line for make full barred
-       % \once  \override TextSpanner #'bound-details #'left #'text =  \markup { "B" #str }
+       % \once  \override TextSpanner.bound-details.left.text =  \markup { "B" #str }
        $music
    #})
 
diff --git a/Documentation/snippets/new/broken-crescendo-hairpin.ly b/Documentation/snippets/new/broken-crescendo-hairpin.ly
new file mode 100644 (file)
index 0000000..27df944
--- /dev/null
@@ -0,0 +1,42 @@
+\version "2.17.27"
+
+\header {
+  lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
+
+  texidoc = "
+In order to make parts of a crescendo hairpin invisible, the following
+method is used: A white rectangle is drawn on top of the respective
+part of the crescendo hairpin, making it invisible.
+
+The markup command @code{with-dimensions} tells LilyPond to consider only
+the bottom edge of the rectangle when spacing it against the hairpin.
+The property @code{staff-padding} prevents the rectangle from fitting
+between the hairpin and staff.
+
+Make sure to put the hairpin in a lower layer than the text markup to
+draw the rectangle over the hairpin.
+
+"
+  doctitle = "Broken Crescendo Hairpin"
+}
+
+\relative c' {
+  <<
+    {
+      \dynamicUp
+      r2 r16 c'8.\pp r4
+    }
+    \\
+    {
+      \override DynamicLineSpanner.layer = #0
+      des,2\mf\< ~
+      \override TextScript.layer = #2
+      \once\override TextScript.staff-padding = #6
+      \once\override TextScript.vertical-skylines = #'()
+      des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
+                    \with-color #white
+                    \filled-box #'(2 . 7) #'(0 . 2) #0
+      r8. des4 ~ des16->\sff
+    }
+  >>
+}
diff --git a/Documentation/snippets/new/centered-measure-numbers.ly b/Documentation/snippets/new/centered-measure-numbers.ly
new file mode 100644 (file)
index 0000000..6fa6ee9
--- /dev/null
@@ -0,0 +1,48 @@
+\version "2.17.7"
+
+\header {
+  lsrtags = "contexts-and-engravers, repeats, staff-notation"
+
+  texidoc = "
+Scores of large ensemble works often have bar numbers placed beneath the
+system, centered horizontally on the measure's extent.  This snippet shows
+how the @code{Measure_counter_engraver} may be used to simulate this
+notational practice.  Here, the engraver has been added to a @code{Dynamics}
+context.
+
+"
+
+  doctitle = "Centered measure numbers"
+}
+
+\layout {
+  \context {
+    \Dynamics
+    \consists #Measure_counter_engraver
+    \override MeasureCounter.direction = #DOWN
+    \override MeasureCounter.font-encoding = #'latin1
+    \override MeasureCounter.font-shape = #'italic
+    % to control the distance of the Dynamics context from the staff:
+    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
+  }
+  \context {
+    \Score
+    \remove "Bar_number_engraver"
+  }
+}
+
+pattern = \repeat unfold 7 { c'4 d' e' f' }
+
+\new StaffGroup <<
+  \new Staff {
+    \pattern
+  }
+  \new Staff {
+    \pattern
+  }
+  \new Dynamics {
+    \startMeasureCount
+    s1*7
+    \stopMeasureCount
+  }
+>>
index 1e6ffa7b9ec9948a472e674e23239c2f50ff6f72..641f2861c7f4ddd1ea7719ddc68cf2dbabaebf7a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "text, tweaks-and-overrides, contexts-and-engravers"
@@ -39,15 +39,15 @@ been shifted via @code{force-hshift}.
   \context {
     \Voice
     \consists #Text_align_engraver
-    \override TextScript #'X-offset =
+    \override TextScript.X-offset =
       #ly:self-alignment-interface::aligned-on-x-parent
-    \override TextScript #'self-alignment-X = #CENTER
+    \override TextScript.self-alignment-X = #CENTER
   }
 }
 
 \new Staff <<
   \relative c'' {
-    \override NoteColumn #'force-hshift = #3
+    \override NoteColumn.force-hshift = #3
     c1-\markup { \arrow-head #Y #DOWN ##t }
   }
   \\
diff --git a/Documentation/snippets/new/changing-the-tuplet-number.ly b/Documentation/snippets/new/changing-the-tuplet-number.ly
new file mode 100644 (file)
index 0000000..346d12e
--- /dev/null
@@ -0,0 +1,23 @@
+\version "2.17.30"
+
+\header {
+  lsrtags = "rhythms"
+
+  texidoc = "
+By default, only the numerator of the tuplet number is printed over the
+tuplet bracket. Alternatively, num:den of the tuplet number may
+be printed, or the tuplet number may be suppressed altogether.
+
+"
+  doctitle = "Changing the tuplet number"
+}
+
+
+\relative c'' {
+  \tuplet 3/2 { c8 c c }
+  \tuplet 3/2 { c8 c c }
+  \override TupletNumber.text = #tuplet-number::calc-fraction-text
+  \tuplet 3/2 { c8 c c }
+  \omit TupletNumber
+  \tuplet 3/2 { c8 c c }
+}
index 0aff0ba5e746a97dd163ab0e57400204af244bfd..cedf58cd32f4ef39fb7723a7de8e7b8e75b9650f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "workaround, contexts-and-engravers, contemporary-notation, rhythms"
   \new Staff {
     \scaleDurations 8/5 {
       \time 6/8
-      \set Timing.measureLength = #(ly:make-moment 6 5)
+      \set Timing.measureLength = #(ly:make-moment 6/5)
       b8 b b b b b
       \time 2/4
-      \set Timing.measureLength = #(ly:make-moment 4 5)
+      \set Timing.measureLength = #(ly:make-moment 4/5)
       b4 b
     }
   }
index 3351cd2d38fa026f1f354f5b93bf1b708620943c..8edb405b0d76771c8fb01f5240acec87605d3815 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers, specific-notation"
@@ -11,15 +11,8 @@ aren't always the same length.
   doctitle = "Chant or psalms notation"
 }
 
-stemOn = {
-  \revert Staff.Stem #'transparent
-  \revert Staff.Flag #'transparent
-}
-
-stemOff = {
-  \override Staff.Stem #'transparent = ##t
-  \override Staff.Flag #'transparent = ##t
-}
+stemOff = \hide Staff.Stem
+stemOn  = \undo \stemOff
 
 \score {
   \new Staff \with { \remove "Time_signature_engraver" }
index 29fe905a43e89716a129baa71eed20e0347fb6cb..4f625ddbc81cf01fcfde750e71300894e9a0bc31 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "headword"
@@ -71,7 +71,7 @@ Bass = {
     \context Staff = lower {
       \new Voice {
         \clef bass
-        \accidentalStyle "modern-cautionary"
+        \accidentalStyle modern-cautionary
         <<
           \Tenor
           \Bass
@@ -88,7 +88,7 @@ Bass = {
     }
     \context {
       \Voice
-      \override StanzaNumber #'padding = #1.8
+      \override StanzaNumber.padding = #1.8
     }
   }
 }
diff --git a/Documentation/snippets/new/compound-time-signatures.ly b/Documentation/snippets/new/compound-time-signatures.ly
new file mode 100644 (file)
index 0000000..693ed00
--- /dev/null
@@ -0,0 +1,22 @@
+\version "2.17.15"
+
+\header {
+  lsrtags = "rhythms"
+
+  texidoc = "
+Odd 20th century time signatures (such as \\\"5/8\\\") can often be
+played as compound time signatures (e.g. \\\"3/8 + 2/8\\\"), which
+combine two or more inequal metrics. LilyPond can make such music quite
+easy to read and play, by explicitly printing the compound time
+signatures and adapting the automatic beaming behavior.
+
+"
+  doctitle = "Compound time signatures"
+}
+
+\relative c' {
+  \compoundMeter #'((2 8) (3 8))
+  c8 d e fis gis
+  c8 fis, gis e d
+  c8 d e4 gis8
+}
index ea2d8305a9c97d49748c15800dd336d611e80420..8e9a8c65b4f3a5719a4e33e771264cc524227552 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "pitches, real-music, really-cool, scheme-language"
@@ -17,7 +17,7 @@ Planets.
 rhythm =
 #(define-music-function (parser location p) (ly:pitch?)
    "Make the rhythm in Mars (the Planets) at the given pitch"
-  #{ \times 2/3 { $p 8 $p $p } $p 4 $p $p 8 $p $p 4 #})
+  #{ \tuplet 3/2 { $p 8 $p $p } $p 4 $p $p 8 $p $p 4 #})
 
 \new Staff {
   \time 5/4
diff --git a/Documentation/snippets/new/creating-double-digit-fingerings.ly b/Documentation/snippets/new/creating-double-digit-fingerings.ly
new file mode 100644 (file)
index 0000000..f9bf74b
--- /dev/null
@@ -0,0 +1,17 @@
+\version "2.17.15"
+
+\header {
+  lsrtags = "editorial-annotations, expressive-marks, scheme-language, staff-notation, tweaks-and-overrides"
+
+  texidoc = "
+Creating fingerings larger than 5 is possible.
+"
+  doctitle = "Creating double-digit fingerings"
+}
+
+\relative c' {
+  c1-10
+  c1-50
+  c1-36
+  c1-29
+}
diff --git a/Documentation/snippets/new/creating-real-parenthesized-dynamics.ly b/Documentation/snippets/new/creating-real-parenthesized-dynamics.ly
new file mode 100644 (file)
index 0000000..bfdd1bd
--- /dev/null
@@ -0,0 +1,35 @@
+\version "2.16.0"
+
+\header {
+  lsrtags = "expressive-marks, text, workaround"
+
+  texidoc = "
+Although the easiest way to add parentheses to a dynamic mark is to use
+a @code{\\markup} block, this method has a downside: the created
+objects will behave like text markups, and not like dynamics.
+
+However, it is possible to create a similar object using the equivalent
+Scheme code (as described in the Notation Reference), combined with the
+@code{make-dynamic-script} function. This way, the markup will be
+regarded as a dynamic, and therefore will remain compatible with
+commands such as @code{\\dynamicUp} or @code{\\dynamicDown}.
+
+
+
+"
+  doctitle = "Creating \"real\" parenthesized dynamics"
+}
+
+paren =
+#(define-event-function (parser location dyn) (ly:event?)
+   (make-dynamic-script
+    #{ \markup \concat {
+         \normal-text \italic \fontsize #2 (
+        \pad-x #0.2 #(ly:music-property dyn 'text)
+        \normal-text \italic \fontsize #2 )
+       }
+    #}))
+
+\relative c'' {
+  c4\paren\f c c \dynamicUp c\paren\p
+}
diff --git a/Documentation/snippets/new/entering-several-tuplets-using-only-one--times-command.ly b/Documentation/snippets/new/entering-several-tuplets-using-only-one--times-command.ly
new file mode 100644 (file)
index 0000000..0b6af1b
--- /dev/null
@@ -0,0 +1,28 @@
+\version "2.17.11"
+
+\header {
+  lsrtags = "rhythms, syntax-and-expressions"
+
+  texidoc = "
+The property @code{tupletSpannerDuration} sets how long each of the
+tuplets contained within the brackets after @code{\\tuplet} should last.
+Many consecutive tuplets can then be placed within a single
+@code{\\tuplet} expression, thus saving typing.
+
+There are several ways to set @code{tupletSpannerDuration}.  The command
+@code{\\tupletSpan} sets it to a given duration, and clears it when
+instead of a duration @code{\\default} is specified.  Another way is
+to use an optional argument with @code{\\tuplet}.
+"
+  doctitle = "Entering several tuplets using only one \\tuplet command"
+}
+
+
+\relative c' {
+  \time 2/4
+  \tupletSpan 4
+  \tuplet 3/2 { c8^"\\tupletSpan 4" c c c c c }
+  \tupletSpan \default
+  \tuplet 3/2 { c8^"\\tupletSpan \\default" c c c c c }
+  \tuplet 3/2 4 { c8^"\\tuplet 3/2 4 {...}" c c c c c }
+}
diff --git a/Documentation/snippets/new/expressive-headword.ly b/Documentation/snippets/new/expressive-headword.ly
new file mode 100644 (file)
index 0000000..1f9cf0f
--- /dev/null
@@ -0,0 +1,268 @@
+\version "2.17.27"
+
+\header {
+  lsrtags = "headword"
+
+  texidoc = "
+Expressive headword
+
+"
+  doctitle = "Expressive headword"
+}
+\include "english.ly"
+
+% NR 1.3 Expressive marks
+
+% L. v. Beethoven, Op. 49 no. 1
+% Piano sonata 19 - "Leichte Sonate"
+% measures 1 - 12
+
+%\layout {
+%   \context {
+%      \Score
+%      \override SpacingSpanner.base-shortest-duration =
+%         #(ly:make-moment 1/20)
+%   }
+%}
+
+\new PianoStaff <<
+
+   % RH Staff
+   \new Staff {
+      \clef treble
+      \key g \major
+      \time 6/8
+      \partial 2
+      \once \override TextScript.padding = #2
+      d'8 \staccato
+      ^ \markup { \column {
+         RONDO
+         \italic Allegro } }
+      d'8 \staccato
+      g'8 \staccato
+      a'8 \staccato
+
+      |
+
+      b'8 [ (
+      g'8 ] )
+      e'8 \staccato
+      e' \staccato
+      a'8 \staccato
+      b'8 \staccato
+
+      |
+
+      c''8 [ (
+      a'8 ] )
+      e''8 \staccato
+      d''8 \staccato
+      c''8 \staccato
+      b'8 \staccato
+
+      |
+
+      a'8 \staccato
+      g'8 \staccato
+      a'8 \staccato
+      \acciaccatura { g'16 [ a'16 ] }
+      bf'8
+      a'8 \staccato
+      g'8 \staccato
+
+      |
+
+      fs'8 [ (
+      d'8 ] )
+      d'8 \staccato
+      d'8 \staccato
+      g'8 \staccato
+      a'8 \staccato
+
+      |
+
+      b'8 [ (
+      g'8 ] )
+      e'8 \staccato
+      e'8 \staccato
+      a'8 \staccato
+      b'8 \staccato
+
+      |
+
+      c''8 [ (
+      a'8 ] )
+      e''8 \staccato
+      d''8 \staccato
+      c''8 \staccato
+      b'8 \staccato
+
+      |
+
+      a'8 \staccato
+      g'8 \staccato
+      a'8 \staccato
+      <<
+         {
+            \voiceOne
+            d'8
+            g'8
+            fs'8
+            \oneVoice
+         }
+         \new Voice {
+            \voiceTwo
+            d'4
+            c'8
+            \oneVoice
+         }
+      >>
+
+      |
+
+      <b g'>4 \tenuto
+      d'8 \staccato
+      g'8 \staccato
+      b'8 \staccato
+      d''8 \staccato
+
+      |
+
+      d''8 (
+      <c'' a'>8 \staccato )
+      <c'' a'>8 \staccato
+      d''8 (
+      <b' g'>8 \staccato )
+      <b' g'>8 \staccato
+
+      |
+
+      d''8 (
+      <c'' a'>8 \staccato )
+      <c'' a'>8 \staccato
+      d''8 (
+      <b' g'>8 \staccato )
+      <b' g'>8 \staccato
+
+      |
+
+      d''8 \staccato
+      <c'' a'>8 \staccato
+      <b' g'>8 \staccato
+      d'' \staccato
+      <c'' a'>8 \staccato
+      <b' g'>8 \staccato
+
+      |
+
+      <d'' c'' a'>4 \fermata
+      r8 r4 r8
+   }
+
+   % LH Staff
+   \new Staff {
+      \clef bass
+      \key g \major
+      \time 6/8
+      \partial 2
+      r8
+      r8
+      <d' b>8 \staccato
+      <c' a>8 \staccato
+
+      |
+
+      <b g>4
+      r8
+      r8
+      <e' c'>8 \staccato
+      <d' b>8 \staccato
+
+      |
+
+      <c' a>4
+      r8
+      r8
+      <a fs>8 \staccato
+      <b g>8 \staccato
+
+      |
+
+      <c' a>8 \staccato
+      <b d'>8 \staccato
+      <e' c'>8 \staccato
+      <e' cs'>4. (
+
+      |
+
+      d'4 )
+      r8
+      r8
+      <d' b!>8 \staccato
+      <c'! a>8 \staccato
+
+      |
+
+      <b g>4
+      r8
+      r8
+      <e' c'>8 \staccato
+      <d' b>8 \staccato
+
+      |
+
+      <c' a>4
+      r8
+      r8
+      <a fs>8 \staccato
+      <b g>8 \staccato
+
+      |
+
+      <c' a>8 \staccato
+      <d' b>8 \staccato
+      <e' c'>8 \staccato
+      <b d>4
+      <a d>8 \staccato
+
+      |
+
+      <g g,>4 \tenuto
+      r8
+      r4
+      r8
+
+      |
+
+      r8
+      <d' fs>8 \staccato
+      <d' fs>8 \staccato
+      r8
+      <d' g>8 \staccato
+      <d' g>8 \staccato
+
+      |
+
+      r8
+      <d' fs>8 \staccato
+      <d' fs>8 \staccato
+      r8
+      <d' g>8 \staccato
+      <d' g>8 \staccato
+
+      |
+
+      r8
+      <d' fs>8 \staccato
+      <d' g>8 \staccato
+      r8
+      <d' fs>8 \staccato
+      <d' g>8 \staccato
+
+      |
+
+      <d' fs>4 \fermata
+      r8 r4 r8
+   }
+
+>>
diff --git a/Documentation/snippets/new/extending-glissandi-across-repeats.ly b/Documentation/snippets/new/extending-glissandi-across-repeats.ly
new file mode 100644 (file)
index 0000000..0c7496c
--- /dev/null
@@ -0,0 +1,62 @@
+\version "2.17.6"
+
+\header {
+  lsrtags = "staff-notation, tweaks-and-overrides"
+  texidoc = "
+A glissando which extends into several @code{\alternative} blocks
+can be simulated by adding a hidden grace note with a glissando
+at the start of each @code{\alternative} block.  The grace note
+should be at the same pitch as the note which starts the initial
+glissando.  This is implemented here with a music function which
+takes the pitch of the grace note as its argument.
+
+Note that in polyphonic music the grace note must be matched with
+corresponding grace notes in all other voices.
+"
+  doctitle = "Extending glissandi across repeats"
+}
+
+repeatGliss = #(define-music-function (parser location grace)
+  (ly:pitch?)
+  #{
+    % the next two lines ensure the glissando is long enough
+    % to be visible
+    \once \override Glissando.springs-and-rods
+      = #ly:spanner::set-spacing-rods
+    \once \override Glissando.minimum-length = #3.5
+    \once \hideNotes
+    \grace $grace \glissando
+  #})
+
+\score {
+  \relative c'' {
+    \repeat volta 3 { c4 d e f\glissando }
+    \alternative {
+      { g2 d }
+      { \repeatGliss f g2 e }
+      { \repeatGliss f e2 d }
+    }
+  }
+}
+
+music =  \relative c' {
+  \voiceOne
+  \repeat volta 2 {
+    g a b c\glissando
+  }
+  \alternative {
+    { d1 }
+    { \repeatGliss c e1 }
+  }
+}
+
+\score {
+  \new StaffGroup <<
+    \new Staff <<
+      \context Voice { \clef "G_8" \music }
+    >>
+    \new TabStaff  <<
+      \context TabVoice { \clef "moderntab" \music }
+    >>
+  >>
+}
\ No newline at end of file
index f71af0f147f4b0c422c1a5a6f12d8044fa1dcd8f..24fe6e20e406e0f63d23fe9c4eaaa418789b87ac 100644 (file)
@@ -3,7 +3,7 @@
 % on melodies from Bellini's "Norma"                              %
 %*****************************************************************%
 
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "headword"
@@ -35,7 +35,7 @@ ssnor = \set stringNumberOrientations = #'(right)
 % define fingering offset
 FO = #(define-music-function (parser location offsetX offsetY) (number? number?)
 #{
-  \once \override Voice.Fingering #'extra-offset = #(cons offsetX offsetY)
+  \once \override Voice.Fingering.extra-offset = #(cons offsetX offsetY)
 #})
 
 % markups
@@ -73,22 +73,22 @@ melody = \relative c {
   R1 % m. 5
 
   e'4^\benmarcato e8. d16-4
-  d4-4 \times 2/3 { \sfou \FO #'-0.3 #'0.6 <c-2>4 b8 } | % end of m. 6
+  d4-4 \tuplet 3/2 { \sfou \FO #'-0.3 #'0.6 <c-2>4 b8 } | % end of m. 6
 
   \FO #'-0.3 #'0.3
-  <a-3>4 \times 2/3 { c4 b8 } a4 e'8. e16 | % m. 7
+  <a-3>4 \tuplet 3/2 { c4 b8 } a4 e'8. e16 | % m. 7
 
   \FO #'-0.3 #'0.3
-  <g-4>4 \times 2/3 { \sfol \FO #'0.3 #'0.0 <f-1>4 e8 } e4  % beg of m. 8
-  \times 2/3 { \sfou <d-4>4 c8 } | % end of m. 8
+  <g-4>4 \tuplet 3/2 { \sfol \FO #'0.3 #'0.0 <f-1>4 e8 } e4  % beg of m. 8
+  \tuplet 3/2 { \sfou <d-4>4 c8 } | % end of m. 8
 
-  b4 \times 2/3 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 <b-0>4 e | % end of m. 9
+  b4 \tuplet 3/2 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 <b-0>4 e | % end of m. 9
 
-  e4 e8. d16-4 d4 \times 2/3 { c4 b8 } | % m. 10
+  e4 e8. d16-4 d4 \tuplet 3/2 { c4 b8 } | % m. 10
 
-  \times 2/3 { a4 a8 b4 c8 } % beg of m. 11
+  \tuplet 3/2 { a4 a8 b4 c8 } % beg of m. 11
   \sfou \FO #'-0.3 #'0.3
-  <d-4>4^\< \times 2/3 { e4 <d f>8\! } | % end of m. 11
+  <d-4>4^\< \tuplet 3/2 { e4 <d f>8\! } | % end of m. 11
 }
 
 bass = \relative c {
@@ -107,22 +107,22 @@ bass = \relative c {
 
   %% new section starts here in A minor
   \set Score.beamExceptions = #'()
-  \once \override TextScript #'staff-padding = #1.7
-  \times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
+  \once \override TextScript.staff-padding = #1.7
+  \tuplet 3/2 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
 
-  \times 2/3 { a,8\pdolce e' a c a e } % beg m. 6
-  \times 2/3 { e,8 \sfou <e'-3> <gis-1> c gis e } | % end m. 6
+  \tuplet 3/2 { a,8\pdolce e' a c a e } % beg m. 6
+  \tuplet 3/2 { e,8 \sfou <e'-3> <gis-1> c gis e } | % end m. 6
 
-  \times 2/3 { a,8 <e'-2> a c e, b' a, e' a c a e } | % m. 7
+  \tuplet 3/2 { a,8 <e'-2> a c e, b' a, e' a c a e } | % m. 7
 
-  \times 2/3 { f,8 f' a \sfol \FO #'0.3 #'-0.5 <d-4> a f fis, d' a' d a d, } | % m. 8
+  \tuplet 3/2 { f,8 f' a \sfol \FO #'0.3 #'-0.5 <d-4> a f fis, d' a' d a d, } | % m. 8
 
-  \times 2/3 { <g,-3>8 d' g d' g, d % beg m. 9
+  \tuplet 3/2 { <g,-3>8 d' g d' g, d % beg m. 9
     \sfod \FO #'0.0 #'-2.0 <gis,-4> \sfou <e'-2> <gis-1> b gis e } | % end m. 9
 
-  \times 2/3 { a,8 e' a c a e e, e' gis c gis e } | % m. 10
+  \tuplet 3/2 { a,8 e' a c a e e, e' gis c gis e } | % m. 10
 
-  \times 2/3 { a,8 e' a b a e f, f' a d a f } | % m. 11
+  \tuplet 3/2 { a,8 e' a b a e f, f' a d a f } | % m. 11
 }
 
 \score {
@@ -133,9 +133,9 @@ bass = \relative c {
   \layout {
     \context {
       \Score
-      \override Fingering #'staff-padding = #'()
-      \override TupletNumber #'stencil = ##f
-      \override TupletBracket #'bracket-visibility = ##f
+      \override Fingering.staff-padding = #'()
+      \omit TupletNumber
+      \override TupletBracket.bracket-visibility = ##f
     }
   }
   \midi { }
index 240ef41b42ae02f87229544a0c61da4dcb4a49c4..aa54b59bf4350d3a05ac4a5f7a4f57c13a2481d1 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -42,21 +42,21 @@ function to generate the glyph for the flag.
 snippetexamplenotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64 }
 
 {
-  \override Score.RehearsalMark #'self-alignment-X = #LEFT
+  \override Score.RehearsalMark.self-alignment-X = #LEFT
   \time 1/4
   \mark "Normal flags"
   \snippetexamplenotes
 
   \mark "Custom flag: inverted"
-  \override Flag #'stencil = #inverted-flag
+  \override Flag.stencil = #inverted-flag
   \snippetexamplenotes
 
   \mark "Custom flag: weight"
-  \override Flag #'stencil = #weight-flag
+  \override Flag.stencil = #weight-flag
   \snippetexamplenotes
 
   \mark "Revert to normal"
-  \revert Flag #'stencil
+  \revert Flag.stencil
   \snippetexamplenotes
 }
 
index e978d0df487b18e1ec0b52da3926f0f88105279d..039d5b4310f932725d13cdf2c846ad1260a99fa8 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, staff-notation, tweaks-and-overrides"
@@ -8,6 +8,6 @@
 
 \relative c' {
   a2 \glissando
-  \once \override NoteColumn #'glissando-skip = ##t
+  \once \override NoteColumn.glissando-skip = ##t
   f''4 d,
 }
index a3a3ee80ac73be1015a018d0a8d21f2deb9ae52b..c65a265cf818a556757e524f3d6d1436887fb0a1 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "fretted-strings"
@@ -15,12 +15,11 @@ in the following example.
 %% Hide fret number: useful to draw slide into/from a casual point of
 %% the fretboard.
 hideFretNumber = {
-  \once \override TabNoteHead #'transparent = ##t
-  \once \override NoteHead #'transparent = ##t
-  \once \override Stem #'transparent = ##t
-  \once \override Flag #'transparent = ##t
-  \once \override NoteHead #'no-ledgers = ##t
-  \once \override Glissando #'(bound-details left padding) = #0.3
+  \once \hide TabNoteHead
+  \once \hide NoteHead
+  \once \hide Stem
+  \once \override NoteHead.no-ledgers = ##t
+  \once \override Glissando.bound-details.left.padding = #0.3
 }
 
 music= \relative c' {
diff --git a/Documentation/snippets/new/heavily-customized-polymetric-time-signatures.ly b/Documentation/snippets/new/heavily-customized-polymetric-time-signatures.ly
new file mode 100644 (file)
index 0000000..eefaf6e
--- /dev/null
@@ -0,0 +1,35 @@
+\version "2.17.15"
+
+\header {
+  lsrtags = "contemporary-notation, percussion, real-music, rhythms"
+
+  texidoc = "
+Though the polymetric time signature shown was not the most essential
+item here, it has been included to show the beat of this piece (which
+is the template of a real Balkan song!).
+
+"
+  doctitle = "Heavily customized polymetric time signatures"
+}
+
+melody = \relative c'' {
+  \set Staff.instrumentName = #"Bb Sop."
+  \key g \major
+  \compoundMeter #'((3 8) (2 8) (2 8) (3 8) (2 8) (2 8)
+                    (2 8) (2 8) (3 8) (2 8) (2 8))
+  c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break
+  c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4
+  c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break
+  c4. d4 c4 d4. c4 d c2 d4. e4-^ d4
+  c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break
+}
+
+drum = \new DrumStaff \drummode {
+  \bar ".|:" bd4.^\markup { Drums } sn4 bd \bar ";" sn4.
+  bd4 sn \bar ";" bd sn bd4. sn4 bd \bar ":|."
+}
+
+{
+  \melody
+  \drum
+}
diff --git a/Documentation/snippets/new/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly b/Documentation/snippets/new/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly
new file mode 100644 (file)
index 0000000..0ff1ee5
--- /dev/null
@@ -0,0 +1,179 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.6"
+
+\header {
+  lsrtags = "correction-wanted, expressive-marks, tweaks-and-overrides, version-specific"
+
+  texidoc = "
+Some dynamic expressions involve additional text, like @qq{sempre pp}.
+Since dynamics are usually centered under the note, the \\pp would be
+displayed way after the note it applies to.
+
+To correctly align the @qq{sempre pp} horizontally, so that it is
+aligned as if it were only the \\pp, there are several approaches:
+
+* Simply use @code{\\once\\override DynamicText.X-offset = #-9.2}
+before the note with the dynamics to manually shift it to the correct
+position. Drawback: This has to be done manually each time you use that
+dynamic markup...
+
+* Add some padding (@code{#:hspace 7.1}) into the
+definition of your custom dynamic mark, so that after lilypond
+center-aligns it, it is already correctly aligned. Drawback: The
+padding really takes up that space and does not allow any other markup
+or dynamics to be shown in that position.
+
+* Shift the dynamic script @code{\\once\\override ...X-offset = ..}.
+Drawback: @code{\\once\\override} is needed for every invocation!
+
+* Set the dimensions of the additional text to 0 (using
+@code{#:with-dimensions '(0 . 0) '(0 . 0)}). Drawback: To LilyPond
+@qq{sempre} has no extent, so it might put other stuff there and create
+collisions (which are not detected by the collision detection!). Also,
+there seems to be some spacing, so it's not exactly the same alignment
+as without the additional text
+
+* Add an explicit shifting directly inside the scheme function for the
+dynamic-script.
+
+* Set an explicit alignment inside the dynamic-script. By default, this
+won't have any effect, only if one sets X-offset! Drawback: One needs
+to set @code{DynamicText #'X-offset}, which will apply to all dynamic
+texts! Also, it is aligned at the right edge of the additional text,
+not at the center of pp.
+
+
+
+
+"
+  doctitle = "Horizontally aligning custom dynamics (e.g. \"sempre pp\" \"piu f\" \"subito p\")"
+} % begin verbatim
+
+
+\header { title = "Horizontally aligning custom dynamics" }
+
+\paper { ragged-right = ##f }
+
+% Solution 1: Using a simple markup with a particular halign value
+% Drawback: It's a markup, not a dynamic command, so \dynamicDown
+%           etc. will have no effect
+semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" }
+
+% Solution 2: Using a dynamic script & shifting with
+%             \once \override ...X-offset = ..
+% Drawback: \once \override needed for every invocation
+semppK =
+#(make-dynamic-script
+  (markup #:line
+          (#:normal-text
+           #:italic "sempre"
+           #:dynamic "pp")))
+
+% Solution 3: Padding the dynamic script so the center-alignment
+%             puts it at the correct position
+% Drawback: the padding really reserves the space, nothing else can be there
+semppT =
+#(make-dynamic-script
+  (markup #:line
+          (#:normal-text
+           #:italic "sempre"
+           #:dynamic "pp"
+           #:hspace 7.1)))
+
+% Solution 4: Dynamic, setting the dimensions of the additional text to 0
+% Drawback: To lilypond "sempre" has no extent, so it might put
+%           other stuff there => collisions
+% Drawback: Also, there seems to be some spacing, so it's not exactly the
+%           same alignment as without the additional text
+semppM =
+#(make-dynamic-script
+  (markup #:line
+          (#:with-dimensions '(0 . 0) '(0 . 0)
+                             #:right-align
+                             #:normal-text
+                             #:italic "sempre"
+                             #:dynamic "pp")))
+
+% Solution 5: Dynamic with explicit shifting inside the scheme function
+semppG =
+#(make-dynamic-script
+  (markup #:hspace 0
+          #:translate '(-18.85 . 0)
+          #:line (#:normal-text
+                  #:italic "sempre"
+                  #:dynamic "pp")))
+
+% Solution 6: Dynamic with explicit alignment. This has only effect
+%             if one sets X-offset!
+% Drawback: One needs to set DynamicText.X-offset!
+% Drawback: Aligned at the right edge of the additional text,
+%           not at the center of pp
+semppMII =
+#(make-dynamic-script
+  (markup #:line (#:right-align
+                  #:normal-text
+                  #:italic "sempre"
+                  #:dynamic "pp")))
+
+\context StaffGroup <<
+  \context Staff = "s" <<
+    \set Staff.instrumentName = #"Normal"
+    \relative c'' {
+      \key es \major
+      c4\pp c\p c c | c\ff c c\pp c
+    }
+  >>
+  \context Staff = "sMarkup" <<
+    \set Staff.instrumentName = \markup \column { Normal markup }
+    \relative c'' {
+      \key es \major
+      c4-\semppMarkup c\p c c | c\ff c c-\semppMarkup c
+    }
+  >>
+  \context Staff = "sK" <<
+    \set Staff.instrumentName = \markup \column { Explicit shifting }
+    \relative c'' {
+      \key es \major
+      \once \override DynamicText.X-offset = #-9.2
+      c4\semppK c\p c c
+      c4\ff c
+      \once \override DynamicText.X-offset = #-9.2
+      c4\semppK c
+    }
+  >>
+  \context Staff = "sT" <<
+    \set Staff.instrumentName = \markup \column { Right padding }
+    \relative c'' {
+      \key es \major
+      c4\semppT c\p c c | c\ff c c\semppT c
+    }
+  >>
+  \context Staff = "sM" <<
+    \set Staff.instrumentName = \markup \column { Setting dimension "to zero" }
+    \relative c'' {
+      \key es \major
+      c4\semppM c\p c c | c\ff c c\semppM c
+    }
+  >>
+  \context Staff = "sG" <<
+    \set Staff.instrumentName = \markup \column { Shifting inside dynamics }
+    \relative c'' {
+      \key es \major
+      c4\semppG c\p c c | c\ff c c\semppG c
+    }
+  >>
+  \context Staff = "sMII" <<
+    \set Staff.instrumentName = \markup \column { Alignment inside dynamics }
+    \relative c'' {
+      \key es \major
+      % Setting to ##f (false) gives the same result
+      \override DynamicText.X-offset = #0
+      c4\semppMII c\p c c | c\ff c c\semppMII c
+    }
+  >>
+>>
diff --git a/Documentation/snippets/new/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly b/Documentation/snippets/new/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly
new file mode 100644 (file)
index 0000000..d83c178
--- /dev/null
@@ -0,0 +1,47 @@
+\version "2.17.24"
+
+\header {
+  lsrtags = "editorial-annotations, expressive-marks, staff-notation, tweaks-and-overrides"
+
+  texidoc = "
+This method prints two 'rehearsal marks', one on top of the other. It
+shifts the lower rehearsal mark below the staff and then adds padding
+above it in order to place the upper rehearsal mark above the staff.
+
+By adjusting the extra-offset and baseline-skip values you can increase
+or decrease the overall space between the rehearsal mark and the staff.
+
+Because nearly every type of glyph or string can be made to behave like
+a rehearsal mark it is possible to centre those above and below a bar
+line.
+
+Adding the appropriate 'break visibility' as shown in snippet 1 will
+allow you to position two marks at the end of a line as well.
+
+Note: Method 1 is less complex than Method 2 but does not really allow
+for fine tuning of placement of one of the rehearsal marks without
+affecting the other.  It may also give some problems with vertical
+spacing, since using @code{extra-offset} does not change the bounding
+box of the mark from its original value.
+
+
+
+"
+  doctitle = "How to print two rehearsal marks above and below the same barline (method 1)"
+}
+
+\relative c'{
+    c d e f |
+    \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
+    \once \override Score.RehearsalMark.baseline-skip = #9
+    \mark \markup \center-column { \circle 1 \box A }
+    g f e d |
+    \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
+    \once \override Score.RehearsalMark.baseline-skip = #9
+    \mark \markup \center-column { \flat { \bold \small \italic Fine. } }
+    g f e d |
+    \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
+    \once \override Score.RehearsalMark.baseline-skip = #9
+    \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
+    \mark \markup \center-column { \fermata \box z }
+}
index 8a22de16c3adf9f52a7bd179f9de423645a71a38..3b85ef170cd384763180132e8d4208afcffd275d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "staff-notation, ancient-notation, really-cool"
@@ -12,13 +12,10 @@ separate the instrument name definition and the incipit definition.
 incipit =
 #(define-music-function (parser location incipit-music) (ly:music?)
   #{
-    \once \override Staff.InstrumentName #'self-alignment-X = #RIGHT
-    \once \override Staff.InstrumentName #'self-alignment-Y = #UP
-    \once \override Staff.InstrumentName #'Y-offset =
-      #(lambda (grob)
-         (+ 4 (system-start-text::calc-y-offset grob)))
-    \once \override Staff.InstrumentName #'padding = #0.3
-    \once \override Staff.InstrumentName #'stencil =
+    \once \override Staff.InstrumentName.self-alignment-X = #RIGHT
+    \once \override Staff.InstrumentName.self-alignment-Y = ##f
+    \once \override Staff.InstrumentName.padding = #0.3
+    \once \override Staff.InstrumentName.stencil =
       #(lambda (grob)
         (let* ((instrument-name (ly:grob-property grob 'long-text)))
           (set! (ly:grob-property grob 'long-text)
@@ -27,8 +24,6 @@ incipit =
                         {
                           { \context MensuralStaff \with {
                                instrumentName = #instrument-name
-                               \override VerticalAxisGroup
-                                #'Y-extent = #'(-4 . 4)
                             } $incipit-music
                           }
                           \layout { $(ly:grob-layout grob)
@@ -38,7 +33,7 @@ incipit =
                                % escaping lexical closure and evaluating
                                % everything respective to (current-module).
                                     #(primitive-eval
-                                       '(or (false-if-exception (- indent (* mm incipit-width)))
+                                       '(or (false-if-exception (- indent incipit-width))
                                            (* 0.5 indent)))
                                     ragged-right = ##f
                                     ragged-last = ##f
@@ -59,7 +54,7 @@ global = {
   \skip 1*8
 
   % let finis bar go through all staves
-  \override Staff.BarLine #'transparent = ##f
+  \override Staff.BarLine.transparent = ##f
 
   % finis bar
   \bar "|."
@@ -86,7 +81,7 @@ discantusNotes = {
     c'4 e'4.( d'8 c' b |
     a4) b a2 |
     b4.( c'8 d'4) c'4 |
-    \once \override NoteHead #'transparent = ##t
+    \once \hide NoteHead
     c'1 |
     b\breve |
   }
@@ -123,7 +118,7 @@ altusNotes = {
     a2 g4 e |
     fis g4.( fis16 e fis4) |
     g1 |
-    \once \override NoteHead #'transparent = ##t
+    \once \hide NoteHead
     g1 |
     g\breve |
   }
@@ -161,7 +156,7 @@ tenorNotes = {
     R1 |
     % two measures
     r2 d'2. d'4 b e' |
-    \once \override NoteHead #'transparent = ##t
+    \once \hide NoteHead
     e'1 |
     d'\breve |
   }
@@ -197,7 +192,7 @@ bassusNotes = {
     R1 |
     R1 |
     g2. e4 |
-    \once \override NoteHead #'transparent = ##t
+    \once \hide NoteHead
     e1 |
     g\breve |
   }
@@ -246,7 +241,7 @@ bassusLyrics = \lyricmode {
     \context {
       \Score
       %% no bar lines in staves or lyrics
-      \override BarLine #'transparent = ##t
+      \hide BarLine
     }
     %% the next two instructions keep the lyrics between the bar lines
     \context {
@@ -257,7 +252,7 @@ bassusLyrics = \lyricmode {
     \context {
       \Voice
       %% no slurs
-      \override Slur #'transparent = ##t
+      \hide Slur
       %% Comment in the below "\remove" command to allow line
       %% breaking also at those bar lines where a note overlaps
       %% into the next measure.  The command is commented out in this
diff --git a/Documentation/snippets/new/inserting-score-fragments-above-a-staff,-as-markups.ly b/Documentation/snippets/new/inserting-score-fragments-above-a-staff,-as-markups.ly
new file mode 100644 (file)
index 0000000..09a13cf
--- /dev/null
@@ -0,0 +1,39 @@
+\version "2.17.15"
+
+\header {
+  lsrtags = "real-music, staff-notation"
+
+  texidoc = "
+The @code{\\markup} command is quite versatile.  In this snippet, it
+contains a @code{\\score} block instead of texts or marks.
+
+"
+  doctitle = "Inserting score fragments above a staff as markups"
+}
+
+tuning = \markup {
+  \score {
+    \new Staff \with { \remove "Time_signature_engraver" }
+    {
+      \clef bass
+      <c, g, d g>1
+    }
+    \layout { ragged-right = ##t  indent = 0\cm }
+  }
+}
+
+\header {
+  title = "Solo Cello Suites"
+  subtitle = "Suite IV"
+  subsubtitle = \markup { Originalstimmung: \raise #0.5 \tuning }
+}
+
+\layout { ragged-right = ##f }
+
+\relative c'' {
+  \time 4/8
+  \tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e }
+  \tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e }
+  g8 a g a
+  g8 a g a
+}
index 3910d71dc63ff51ac8b2b45fc4884dc18c564b56..41b62e581ff0086af5a70f3bbd5dac07dd7d634d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "keyboards, percussion, fretted-strings, template, real-music"
@@ -33,17 +33,15 @@ music is within a @code{\\transpose} section.
 %%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%%
 
 sl = {
-  \override NoteHead #'style = #'slash
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
+  \override NoteHead.style = #'slash
+  \hide Stem
 }
 nsl = {
-  \revert NoteHead #'style
-  \revert Stem #'transparent
-  \revert Flag #'transparent
+  \revert NoteHead.style
+  \undo \hide Stem
 }
-crOn = \override NoteHead #'style = #'cross
-crOff = \revert NoteHead #'style
+crOn = \override NoteHead.style = #'cross
+crOff = \revert NoteHead.style
 
 %% insert chord name style stuff here.
 
@@ -264,8 +262,8 @@ drumContents = {
     \context { \Staff \RemoveEmptyStaves }
     \context {
       \Score
-      \override BarNumber #'padding = #3
-      \override RehearsalMark #'padding = #2
+      \override BarNumber.padding = #3
+      \override RehearsalMark.padding = #2
       skipBars = ##t
     }
   }
diff --git a/Documentation/snippets/new/keyboard-headword.ly b/Documentation/snippets/new/keyboard-headword.ly
new file mode 100644 (file)
index 0000000..cb2af25
--- /dev/null
@@ -0,0 +1,242 @@
+\version "2.17.24"
+
+\header {
+  lsrtags = "headword"
+
+  texidoc = "
+Keyboard headword
+
+"
+  doctitle = "Keyboard headword"
+}
+% M. Ravel, Sonatine (1905)
+% First movement
+\include "english.ly"
+
+\layout {
+  \context {
+    \Score
+    \remove "Bar_number_engraver"
+  }
+}
+
+fermataLong = \markup {
+  \override #'(direction . 1)
+  \override #'(baseline-skip . 2) {
+    \dir-column {
+      \fermata
+      \text \italic \center-align long
+    }
+  }
+}
+
+\new PianoStaff <<
+  \set PianoStaff.connectArpeggios = ##t
+  \new Staff {
+    \time 2/4
+    \key fs \major
+    <<
+      \new Voice {
+        \voiceOne
+        fs''8 ( ^\markup {
+          \override #'(baseline-skip . 2.4) \column {
+            \line \bold { Un peu retenu }
+            \line \italic { très expressif }
+          }
+        }
+        es''16
+        cs''16
+        as'4 )
+        |
+        fs''8 (
+        es''16
+        cs''16
+        as'4 )
+        |
+        fs''8 (
+        es''16
+        cs''16
+        as'8
+        cs''8 )
+        |
+      }
+      \new Voice {
+        \voiceTwo
+        gs'8\rest \ppp
+        fs'4 (
+        es'8 )
+        |
+        gs'8\rest
+        fs'4 (
+        es'8 )
+        |
+        gs'8\rest
+        fs'4 (
+        es'8 )
+        |
+      }
+    >>
+    \clef bass
+    <ds b! es'>4 ( ^ \markup \bold { Rall. }
+    \override Script.stencil = #(lambda (grob)
+      (grob-interpret-markup grob fermataLong))
+    <ds' as'>8 ) \fermata
+    \noBeam
+    \clef treble
+    \slurUp
+    \once \override Hairpin.to-barline = ##f
+    <as fs'>8 ( \pp \>
+    |
+    <gs b cs'>4. \! ) ^\markup \bold { a Tempo }
+    \slurUp
+    <as fs'>8 ^\( \>
+    |
+    <gs b cs'>4. \! \)
+    <<
+      \new Voice {
+        \voiceOne
+        <as fs'>8 (
+        |
+        cs'8 ^\markup \bold { Rallentando }
+        b16
+        cs'16
+        d'8
+        e'16
+        fs'16
+        |
+        <as! cs' gs'>4. )
+        s8
+        |
+        r8
+        <cs'' as'' cs'''>4 \arpeggio
+        e''16 ( ^\markup \bold { Lent }
+        fs''16
+        |
+        \voiceTwo
+        <as'! cs'' gs''>2 )
+        |
+      }
+      \new Voice {
+        \voiceTwo
+        s8
+        |
+        <gs b>4 \<
+        <fs bs>4 \>
+        |
+        s4. \!
+        \slurUp
+        \once \override Script.direction = #UP
+        <a bs e'>8 ( \accent
+        |
+        <as! cs' gs'>4. )
+        \once \override Hairpin.to-barline = ##f
+        <a' bs'>8 \ppp \>
+        |
+        s8 \!
+        \stemDown
+        \once \override Script.direction = #UP
+        \ottava #1
+        \voiceOne
+        \once \override PianoStaff.Arpeggio.padding = #0.8
+        <cs''' as''' cs''''>4. \arpeggio \fermata
+        \ottava #0
+        \bar "|."
+      }
+    >>
+  }
+  \new Staff <<
+    \set Staff.pedalSustainStyle = #'bracket
+    \key fs \major
+    \clef bass
+    \new Voice {
+      \voiceOne
+      ds'4 \tenuto
+      cs'4 \tenuto
+      |
+      ds'4 \tenuto
+      cs'4 \tenuto
+      |
+      ds'4 \tenuto
+      cs'4 \tenuto
+      |
+      s8
+      \clef treble
+      <b' cs''>8 [
+      \clef bass
+      <es b cs'>8 \fermata ]
+      s8
+      |
+      fs8\rest
+      \clef treble
+      <b' cs''>4 \tenuto
+      s8
+      |
+      fs8\rest
+      \clef treble
+      <b' cs''>4 \tenuto
+      s8
+      |
+      s2
+      |
+      ds8\rest
+      \clef treble
+      <as' cs''>4
+      \clef bass
+      s8
+      |
+      s8
+      \clef treble
+      <as'>4 \arpeggio
+      \clef bass
+      s8
+      |
+      s8
+      \clef treble
+      <as''>4. \arpeggio \fermata
+      |
+    }
+    \new Voice {
+      \voiceTwo
+      ds'8 [ (
+      < ds bs >8
+      cs'8
+      < ds as >8 ] )
+      |
+      ds'8 [ (
+      < ds bs >8
+      cs'8
+      < ds as >8 ] )
+      |
+      ds'8 [ (
+      < ds bs >8
+      cs'8
+      < ds as >8 ] )
+      |
+      \once \override Script.outside-staff-priority = #100
+      \once \override TextScript.outside-staff-priority = #500
+      <cs, gs,>4. \fermata _\markup \italic { ped. }
+      <fs, cs>8 (
+      |
+      <e, b,>4. ) \sustainOn
+      \clef bass
+      <fs, cs>8 \( \sustainOff
+      |
+      <e, b,>4. \) \sustainOn
+      \clef bass
+      <fs, cs>8 ( \sustainOff
+      |
+      <e, b,>4
+      <d, a,>4
+      |
+      <fs,, cs,>4. ) \sustainOn
+      <a, e>8 ( \sustainOff
+      |
+      <fs, cs>4. ) \sustainOn
+      \slurUp
+      <a e'>8 ( \sustainOff \sustainOn
+      |
+      <fs cs'>2 ) \sustainOff \sustainOn
+      |
+    }
+  >>
+>>
index 7596a4ebcbc2ea6a5e261a57697034bef09296fc..70b3bf144edf0660ae248641b494b9c190f54ac4 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
@@ -23,11 +23,11 @@ in that voice, the tie appears to cross voices.
   \time 2/4
   <<
     {
-      \once \override Stem #'transparent = ##t
-      \once \override Stem #'length = #8
+      \once \hide Stem
+      \once \override Stem.length = #8
       b8 ~ b\noBeam
-      \once \override Stem #'transparent = ##t
-      \once \override Stem #'length = #8
+      \once \hide Stem
+      \once \override Stem.length = #8
       g8 ~ g\noBeam
     }
     \\
index dc2bdfa13a58e902583804312c94c8989af3611d..bf065ac79148ea450d8c870de07c0a82cdc143db 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.15.15"
+\version "2.17.30"
 
 \header {
   lsrtags = "staff-notation, tweaks-and-overrides"
@@ -13,14 +13,14 @@ at a line break:
 }
 
 glissandoSkipOn = {
-  \override NoteColumn #'glissando-skip = ##t
-  \override NoteHead #'transparent = ##t
-  \override NoteHead #'no-ledgers = ##t
+  \override NoteColumn.glissando-skip = ##t
+  \hide NoteHead
+  \override NoteHead.no-ledgers = ##t
 }
 
 \relative c'' {
-  \override Glissando #'breakable = ##t
-  \override Glissando #'after-line-breaking = ##t
+  \override Glissando.breakable = ##t
+  \override Glissando.after-line-breaking = ##t
   f1\glissando |
   \break
   a4 r2. |
diff --git a/Documentation/snippets/new/merging-multi-measure-rests-in-a-polyphonic-part.ly b/Documentation/snippets/new/merging-multi-measure-rests-in-a-polyphonic-part.ly
new file mode 100644 (file)
index 0000000..3330291
--- /dev/null
@@ -0,0 +1,35 @@
+\version "2.17.18"
+
+\header {
+  lsrtags = "really-simple, rhythms, version-specific"
+
+  texidoc = "
+When using multi-measure rests in a polyphonic staff, the rests will be
+placed differently depending on the voice they belong to. However they
+can be printed on the same staff line, using the following setting.
+
+"
+  doctitle = "Merging multi-measure rests in a polyphonic part"
+}
+
+normalPos = \revert MultiMeasureRest.direction
+
+{
+  <<
+    {
+      c''1
+      R1
+      c''1
+      \normalPos
+      R1
+    }
+    \\
+    {
+      c'1
+      R1
+      c'1
+      \normalPos
+      R1
+    }
+  >>
+}
diff --git a/Documentation/snippets/new/numbering-groups-of-measures.ly b/Documentation/snippets/new/numbering-groups-of-measures.ly
new file mode 100644 (file)
index 0000000..2722b3d
--- /dev/null
@@ -0,0 +1,53 @@
+\version "2.17.7"
+
+\header {
+  lsrtags = "contexts-and-engravers, editorial-annotations, repeats, staff-notation"
+
+  texidoc = "
+This snippet demonstrates the use of the @code{Measure_counter_engraver} to
+number groups of successive measures.  Any stretch of measures may be numbered,
+whether consisting of repetitions or not.
+
+The engraver must be added to the appropriate context.  Here, a @code{Staff}
+context is used; another possibility is a @code{Dynamics} context.
+
+The counter is begun with @code{\\startMeasureCount} and ended with
+@code{\\stopMeasureCount}.  Numbering will start by default with @code{1}, but
+this behavior may be modified by overriding the @code{count-from} property.
+
+When a measure extends across a line break, the number will appear twice, the
+second time in parentheses.
+
+"
+  doctitle = "Numbering groups of measures"
+}
+
+\layout {
+  \context {
+    \Staff
+    \consists #Measure_counter_engraver
+  }
+}
+
+\new Staff {
+  \startMeasureCount
+  \repeat unfold 7 {
+    c'4 d' e' f'
+  }
+  \stopMeasureCount
+  \bar "||"
+  g'4 f' e' d'
+  \override Staff.MeasureCounter.count-from = #2
+  \startMeasureCount
+  \repeat unfold 5 {
+    g'4 f' e' d'
+  }
+  g'4 f'
+  \bar ""
+  \break
+  e'4 d'
+  \repeat unfold 7 {
+    g'4 f' e' d'
+  }
+  \stopMeasureCount
+}
diff --git a/Documentation/snippets/new/pitches-headword.ly b/Documentation/snippets/new/pitches-headword.ly
new file mode 100644 (file)
index 0000000..70246ce
--- /dev/null
@@ -0,0 +1,137 @@
+\version "2.17.27"
+
+\header {
+  lsrtags = "headword"
+
+  texidoc = "
+Piches headword
+
+"
+  doctitle = "Pitches headword"
+}
+% L. v. Beethoven
+% Piano sonata 21 - Dem Grafen von Waldstein Gewidmet
+% chorale at measures 34 - 40+
+
+\include "english.ly"
+
+\new PianoStaff <<
+
+  % RH Staff
+  \new Staff <<
+
+    % RH Voice 1
+    \new Voice {
+      \set Score.currentBarNumber = #34
+      \voiceOne
+      gs''2 ( ^ \markup \italic { dolce e molto ligato }
+      fs''4
+      e''4
+      |
+      ds''2
+      cs''2 )
+      |
+      ds''2 (
+      e''4
+      fs''4
+      |
+      <gs'' e''>2
+      <fs'' ds''>2 )
+      |
+      \oneVoice
+      \clef bass
+      <gs' e' b>2 (
+      <fs' ds' a>4
+      <e' cs' gs>4
+      |
+      <ds' bs fs>2
+      <cs' a e>2 )
+      |
+      \voiceOne
+      b2 %(
+      cs'4
+      ds'4
+      |
+      \clef treble
+      <e' gs>4 %)
+      r4 r2
+    }
+
+    % RH Voice 2
+    \new Voice {
+      \voiceTwo
+      \override Staff.DynamicLineSpanner.staff-padding = #3
+      <e'' b'>2 \p
+      <ds'' a'>4
+      <cs'' gs'>4
+      |
+      <bs' fs'>2
+      e'2
+      |
+      <b'! a'>2 -\tweak #'style #'none \cresc
+      b'4
+      <e'' cs''>4
+      |
+      b'2. ( \sf \>
+      a'4 )
+      \clef bass
+      | \break
+      s1 \p
+      |
+      s1
+      |
+      <gs e>4 (
+      <a fs>2. )
+      |
+      s4
+      r4 r2
+    }
+
+  >>
+
+  % LH Staff
+  \new Staff {
+    \override Staff.SustainPedalLineSpanner.staff-padding = #6
+    <gs' e'>2 ( \sustainOn
+    <fs' ds' b>4 \sustainOff
+    <e' cs'>4
+    |
+    <ds' bs gs>2
+    <cs' a>2 ) \sustainOn
+    |
+    \clef bass
+    \slurDown
+    <ds' b! a fs>2 ( \sustainOff
+    <e' b gs>4
+    <fs' cs' a>4 \sustainOn
+    |
+    \clef treble
+    \voiceOne
+    <<
+      {
+        <gs' e'>2
+        <fs' ds'>2 )
+      }
+      \new Voice {
+        \voiceTwo
+        b1 \sustainOff
+      }
+    >>
+    \oneVoice
+    |
+    %\break
+    \clef bass
+    <gs e>2 (
+    <fs ds b,>4
+    <e cs>4
+    |
+    <ds bs, gs,>2
+    <cs a,>2 ) \sustainOn
+    |
+    <b,! b,,!>1 ( \sustainOff
+    |
+    <e e,>4 )
+    r4 r2
+  }
+
+>>
index 8f9865ac23ebe78a39f0853d5395ab315f4c8d4c..e908ef14cd5a9c6de19907e53d3b05370e88ab39 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.18"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -19,17 +19,17 @@ follows:
   % Multi-measure rests by default are set under the fourth line
   R1
   % They can be moved using an override
-  \override MultiMeasureRest #'staff-position = #-2
+  \override MultiMeasureRest.staff-position = #-2
   R1
-  \override MultiMeasureRest #'staff-position = #0
+  \override MultiMeasureRest.staff-position = #0
   R1
-  \override MultiMeasureRest #'staff-position = #2
+  \override MultiMeasureRest.staff-position = #2
   R1
-  \override MultiMeasureRest #'staff-position = #3
+  \override MultiMeasureRest.staff-position = #3
   R1
-  \override MultiMeasureRest #'staff-position = #6
+  \override MultiMeasureRest.staff-position = #6
   R1
-  \revert MultiMeasureRest #'staff-position
+  \revert MultiMeasureRest.staff-position
   \break
 
   % In two Voices, odd-numbered voices are under the top line
@@ -42,7 +42,7 @@ follows:
   % Separating multi-measure rests in more than two voices
   % requires an override
   << { R1 } \\ { R1 } \\
-     \once \override MultiMeasureRest #'staff-position = #0
+     \once \override MultiMeasureRest.staff-position = #0
      { R1 }
   >>
 
@@ -50,10 +50,10 @@ follows:
   % in all voices to avoid multiple instances being printed
   \compressFullBarRests
   <<
-   \revert MultiMeasureRest #'staff-position
+   \revert MultiMeasureRest.direction
     { R1*3 }
     \\
-   \revert MultiMeasureRest #'staff-position
+   \revert MultiMeasureRest.direction
     { R1*3 }
   >>
 }
diff --git a/Documentation/snippets/new/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly b/Documentation/snippets/new/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly
new file mode 100644 (file)
index 0000000..1bdd351
--- /dev/null
@@ -0,0 +1,36 @@
+\version "2.17.6"
+
+\header {
+  lsrtags = "repeats, tweaks-and-overrides"
+
+  texidoc = "
+A @code{.|:} bar line can be printed at the beginning of a piece, by
+overriding the relevant property:
+
+"
+  doctitle = "Printing a repeat sign at the beginning of a piece"
+}
+
+
+\relative c'' {
+  \once \override Score.BreakAlignment.break-align-orders =
+    #(make-vector 3 '(instrument-name
+                      left-edge
+                      ambitus
+                      breathing-sign
+                      clef
+                      key-signature
+                      time-signature
+                      staff-bar
+                      custos))
+  \once \override Staff.TimeSignature.space-alist =
+    #'((first-note . (fixed-space . 2.0))
+       (right-edge . (extra-space . 0.5))
+       ;; free up some space between time signature
+       ;; and repeat bar line
+       (staff-bar . (extra-space . 1)))
+  \bar ".|:"
+  c1
+  d1
+  d4 e f g
+}
diff --git a/Documentation/snippets/new/printing-hairpins-in-various-styles.ly b/Documentation/snippets/new/printing-hairpins-in-various-styles.ly
new file mode 100644 (file)
index 0000000..b6a18ec
--- /dev/null
@@ -0,0 +1,30 @@
+\version "2.17.14"
+
+\header {
+  lsrtags = "expressive-marks"
+
+  texidoc = "
+Hairpin dynamics may be created in a variety of styles
+
+"
+  doctitle = "Printing hairpins in various styles"
+}
+
+\relative c'' {
+  \override Hairpin.stencil = #flared-hairpin
+  a4\< a a a\f
+  a4\p\< a a a\ff
+  a4\sfz\< a a a\!
+  \override Hairpin.stencil = #constante-hairpin
+  a4\< a a a\f
+  a4\p\< a a a\ff
+  a4\sfz\< a a a\!
+  \override Hairpin.stencil = #flared-hairpin
+  a4\> a a a\f
+  a4\p\> a a a\ff
+  a4\sfz\> a a a\!
+  \override Hairpin.stencil = #constante-hairpin
+  a4\> a a a\f
+  a4\p\> a a a\ff
+  a4\sfz\> a a a\!
+}
diff --git a/Documentation/snippets/new/quoting-another-voice-with-transposition.ly b/Documentation/snippets/new/quoting-another-voice-with-transposition.ly
new file mode 100644 (file)
index 0000000..a0153d6
--- /dev/null
@@ -0,0 +1,42 @@
+\version "2.17.13"
+
+\header {
+  lsrtags = "pitches, staff-notation"
+
+  texidoc = "
+Quotations take into account the transposition of both source and
+target.  In this example, all instruments play sounding middle C; the
+target is an instrument in F.  The target part may be transposed using
+@code{\\transpose}.  In this case, the quoted pitches will stay
+unchanged.
+"
+  doctitle = "Quoting another voice with transposition"
+}
+
+\addQuote clarinet {
+  \transposition bes
+  \repeat unfold 8 { d'16 d' d'8 }
+}
+
+\addQuote sax {
+  \transposition es'
+  \repeat unfold 16 { a8 }
+}
+
+quoteTest = {
+  % french horn
+  \transposition f
+  g'4
+  << \quoteDuring #"clarinet" { \skip 4 } s4^"clar." >>
+  << \quoteDuring #"sax" { \skip 4 } s4^"sax." >>
+  g'4
+}
+
+{
+  \set Staff.instrumentName =
+    \markup {
+      \center-column { Horn \line { in F } }
+    }
+  \quoteTest
+  \transpose c' d' << \quoteTest s4_"up a tone" >>
+}
index b6575a4714cbc91d0132c4da99c18dbb32fcab21..b4cd68c38cc51b64925bd3e61524d5a09e20a6b4 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms"
@@ -17,12 +17,12 @@ other effects may be obtained.
 
 startAcciaccaturaMusic = {
   <>(
-  \override Flag #'stroke-style = #"grace"
+  \override Flag.stroke-style = #"grace"
   \slurDashed
 }
 
 stopAcciaccaturaMusic = {
-  \revert Flag #'stroke-style
+  \revert Flag.stroke-style
   \slurSolid
   <>)
 }
index e4f2326b97ebb1367610d8e387e51d094b07841a..bca93b5c6a681234e5d5dac74e83127152ef5210 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "template, real-music, specific-notation"
@@ -64,15 +64,15 @@ harmonies = \new ChordNames \chordmode {
   bes1
 }
 
-NoStem = { \override Stem #'transparent = ##t \override Flag #'transparent = ##t }
-NoNoteHead = \override NoteHead #'transparent = ##t
-ZeroBeam = \override Beam  #'positions = #'(0 . 0)
+NoStem = { \hide Stem }
+NoNoteHead = \hide NoteHead
+ZeroBeam = \override Beam.positions = #'(0 . 0)
 
 staffTabLine = \new Staff \with {
   \remove "Time_signature_engraver"
   \remove "Clef_engraver"
 } {
-  \override Staff.StaffSymbol #'line-positions = #'(0)
+  \override Staff.StaffSymbol.line-positions = #'(0)
   % Shows one horizontal line. The vertical line (simulating a bar-line) is simulated with a gridline
   \set Staff.midiInstrument = #"choir aahs"
   \key c \major
@@ -80,7 +80,7 @@ staffTabLine = \new Staff \with {
   {
     % disable the following line to see the the noteheads while writing the song
     \NoNoteHead
-    \override NoteHead #'no-ledgers = ##t
+    \override NoteHead.no-ledgers = ##t
 
     % The beam between 8th-notes is used to draw the push-line
     %How to fast write the push-lines:
@@ -150,9 +150,9 @@ AccordionTab= { \dynamicUp
   \context {
     \Staff
     \consists "Grid_point_engraver"
-    gridInterval = #(ly:make-moment 4 4) % 4/4 - tact. How many beats per bar
+    gridInterval = #(ly:make-moment 4/4) % 4/4 - tact. How many beats per bar
     % The following line has to be adjusted O-F-T-E-N.
-    \override GridPoint #'Y-extent = #'(-2 . -21)
+    \override GridPoint.Y-extent = #'(-2 . -21)
   }
   \context {
     \ChoirStaff
@@ -176,7 +176,7 @@ staffVoice = \new Staff = astaffvoice  {
 
 staffAccordionMel =
 \new Staff  \with { \remove "Clef_engraver" } {
-  \accidentalStyle "forget" %Set the accidentals (Vorzeichen) for each note,
+  \accidentalStyle forget %Set the accidentals (Vorzeichen) for each note,
   %do not remember them for the rest of the measure.
   \time 4/4
   \set Staff.instrumentName="Accordion"
@@ -188,13 +188,13 @@ staffAccordionMel =
 
 AltOn =
 #(define-music-function (parser location mag) (number?)
-  #{ \override Stem #'length = #(* 7.0 mag)
-      \override NoteHead #'font-size =
+  #{ \override Stem.length = #(* 7.0 mag)
+      \override NoteHead.font-size =
 #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #})
 
 AltOff = {
-  \revert Stem #'length
-  \revert NoteHead #'font-size
+  \revert Stem.length
+  \revert NoteHead.font-size
 }
 
 BassRhytm = {s4 s8 | c2 c2 | c2 s8 }
@@ -204,8 +204,8 @@ staffBassRhytm =
 \new Staff = staffbass \with { \remove "Clef_engraver" } {
   % This is not a RhythmicStaff  because it must be possible to append lyrics.
 
-  \override Score.GridLine #'extra-offset = #'( 13.0 . 0.0 ) % x.y
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
+  \override Score.GridLine.extra-offset = #'( 13.0 . 0.0 ) % x.y
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
   % Shows one horizontal line. The vertical line (simulating a bar-line) is simulated by a grid
   % Search for 'grid' in this page to find all related functions
   \time 4/4
index 64ebf5d4d3033c8e43679703ce255ac782566011..67bc0f628684fcf2648bf96d944b717286113f70 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \include "catalan.ly"
 
 \header {
@@ -28,7 +28,7 @@ trompette = \relative do'' {
   \key mib \major
   \time 2/4
   R2^\markup { \italic Comodo } |
-  r8 \once \override TextScript #'padding = #2.0
+  r8 \once \override TextScript.padding = #2.0
   sib16-.^\markup {\dynamic p \italic grazioso} do-. mib( re)-. do-. sib-. |
   re8-. r8 re4->( |
   re8) do16-. re-. mib( re) do-. re-. |
index d05686f651ba8170cc2598650bd0b0a050492ec3..90ea3fc2f18022a7244e32b0c04051e0ef1d524b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, text, fretted-strings, tweaks-and-overrides, scheme-language"
@@ -14,10 +14,10 @@ series of notes is supposed to be played all on the same string.
 stringNumberSpanner =
 #(define-music-function (parser location StringNumber) (string?)
   #{
-    \override TextSpanner #'style = #'solid
-    \override TextSpanner #'font-size = #-5
-    \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
-    \override TextSpanner #'(bound-details left text) = \markup { \circle \number #StringNumber }
+    \override TextSpanner.style = #'solid
+    \override TextSpanner.font-size = #-5
+    \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
+    \override TextSpanner.bound-details.left.text = \markup { \circle \number #StringNumber }
   #})
 
 
diff --git a/Documentation/snippets/new/unfretted-headword.ly b/Documentation/snippets/new/unfretted-headword.ly
new file mode 100644 (file)
index 0000000..5c3f8a0
--- /dev/null
@@ -0,0 +1,229 @@
+\version "2.17.30"
+
+\header {
+  lsrtags = "headword"
+
+  texidoc = "
+Unfretted headword
+
+"
+  doctitle = "Unfretted headword"
+}
+% #!lilypond lcp-extract.ly -*- coding: utf-8; -*-
+
+%%%
+%%% les-cinq-pieds:
+%%% extract for the lilypond documentaton project
+%%%
+
+%% Title:      Les cinq pieds
+%% Composer:   David Séverin
+%% Date:       Juillet 2007
+%% Instrument: Violon Solo
+%% Dedication: A mon épouse Lívia De Souza Vidal
+%% Additional: avec l'aide de Krzysztof Wagenaar
+
+%% Statement:
+
+%% Here by, I, the composer, agree that this extract of my composition
+%% be in the public domain and can be part of, used and presented in
+%% the LilyPond Documention Project.
+
+%% Statement Date: Octber the 9th, 2008
+
+
+%%%
+%%% Abbreviations
+%%%
+
+db         = \markup { \musicglyph #"scripts.downbow" }
+dub        = \markup { \line { \musicglyph #"scripts.downbow" " " \musicglyph #"scripts.upbow" } }
+dubetc     = \markup { \line { \musicglyph #"scripts.downbow" " " \musicglyph #"scripts.upbow" "..." } }
+
+ub         = \markup { \musicglyph #"scripts.upbow" }
+udb        = \markup { \line { \musicglyph #"scripts.upbow" " " \musicglyph #"scripts.downbow" } }
+udbetc     = \markup { \line { \musicglyph #"scripts.upbow" " " \musicglyph #"scripts.downbow" "..." } }
+
+accel   = \markup \tiny \italic \bold "accel..."
+ritar   = \markup \tiny \italic \bold "ritar..."
+
+ignore     = \override NoteColumn.ignore-collision = ##t
+
+
+%%
+%% Strings
+%%
+
+svib           = \markup \small "s. vib."
+pvib           = \markup \small "p. vib."
+mvib           = \markup \small "m. vib."
+sulp           = \markup \small "s.p."
+norm           = \markup \small "n."
+
+quatre         = \markup \teeny "IV"
+
+
+%%
+%% Shifting Notes
+%%
+
+shift      = \once \override NoteColumn.force-hshift = #0.9
+shifta     = \once \override NoteColumn.force-hshift = #1.2
+shiftb     = \once \override NoteColumn.force-hshift = #1.4
+
+
+%%
+%% Hairpin
+%%
+
+% aniente        = "a niente"
+aniente        = \once \override Hairpin.circled-tip = ##t
+
+
+%%
+%% Tuplets
+%%
+
+tupletbp       = \once \override Staff.TupletBracket.padding = #2.25
+
+
+%%
+%% Flag [Note Head - Stem]
+%%
+
+noflag         = \once \override Flag.style = #'no-flag
+
+%%%
+%%% Functions
+%%%
+
+#(define-markup-command (colmark layout props args)
+  (markup-list?)
+  (let ((entries (cons (list '(baseline-skip . 2.3)) props)
+       ))
+   (interpret-markup layout entries
+    (make-column-markup
+     (map (lambda (arg)
+          (markup arg))
+      (reverse args))))))
+
+
+%%%
+%%% Instruments
+%%%
+
+ViolinSolo = \relative c' {
+
+  \voiceOne
+
+  \set Score.markFormatter     =  #format-mark-box-numbers
+  \override Score.VoltaBracket.font-name                  = #"sans"
+  \override Score.VoltaBracket.extra-offset               = #'(0 . 1)
+  \override SpacingSpanner.uniform-stretching         = ##t
+
+
+  %% Measure 1
+  \time 25/8
+  \mark \default
+  r2 ^\markup \colmark { \italic "fatigué" " " \bold "lentement"} r4 r r8
+  <<
+    { \shift d2 \glissando ^\markup \colmark { \quatre \dubetc \svib } \shifta e1 } \\
+    { d2 \open \mf \< ~ \aniente d1  \! \> r4 r ^\markup \colmark { " " \fermata } \! }
+  >>
+
+
+  %% Measure 2
+  \time 7/4
+  \set Score.repeatCommands = #'((volta "1) n.      2) s.p."))
+  <<
+    { \shift d2 \glissando ^\markup \colmark { \quatre \udbetc } \shifta e1 } \\
+    { d2 \open \mf \< ~ d1 \! \> ~ d4 ^\markup \colmark { " " \fermata } \! }
+  >>
+  \set Score.repeatCommands = #'((volta #f))
+
+
+  %% Measure 3
+  \time 15/4
+  <<
+    { \shift d2 \glissando ^\markup \colmark { \quatre \dubetc \pvib \norm } \shifta e1 \glissando d2 } \\
+    { d2 \open \mf \< ~ d1 ~ d2 \ff  ~ d1 \> ~ d2 ^\markup \colmark { " " " " \svib } ~ d4 \pp}
+  >>
+  \break
+
+  %% Measure 4
+  \time 4/4
+  \stemUp
+  \tupletDown
+  \tuplet 3/2 { d4 ^\markup \colmark { \quatre \db \accel } d d }
+  \tuplet 3/2 { d4 ^\markup \colmark { " " \db " " \sulp } d d }
+
+
+
+  %% Measure 5
+  \time 5/4
+  \tupletbp \tuplet 3/2 { d8 \mf \< ^\markup \colmark { \quatre \db \norm } d _\open d }
+  \tupletbp \tuplet 3/2 { d8 ^\markup \colmark { " " \db \sulp } d _\open d }
+  \tupletbp \tuplet 3/2 { d16 ^\markup \colmark { " " \db \norm } d _\open d d d _\open d }
+  d2 \ff ^\markup \colmark { " " \pvib } \>
+
+
+  %% Measure 6
+  \time 5/8
+  \once \override Beam.grow-direction = #RIGHT  % \featherDurations #(ly:make-moment 2/3)
+  { d16 \staccato
+    [ d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato]
+  }
+  \break
+
+
+  %% Measure 7
+  \time 7/4
+  \tupletbp \tuplet 3/2 { d16 ^\markup \colmark { \quatre } d _\open d d d _\open d }
+  \tupletbp \tuplet 3/2 { d8 ^\markup \colmark { " " \db } d _\open d }
+  \tupletbp \tuplet 3/2 { d8 ^\markup \colmark { " " \db " " \sulp } d _\open d }
+  \tuplet 3/2 { d4 ^\markup \colmark { \quatre \db \ritar \norm } d d }
+  \tuplet 3/2 { d4 ^\markup \colmark { " " \db " " \sulp } d d \ppp ~ }
+
+
+  %% Measure 8
+  d4 ^\markup \colmark { " " " " \pvib \norm }
+  deh2 d dih \<
+
+
+  %% Measure 9
+  <<
+    { \shift d2 \glissando ^\markup \colmark { \quatre } \shifta e1 } \\
+    { d2 \open ~ d1  ^\markup \colmark { " " " " \mvib } }
+  >>
+  \breathe r4 \!
+
+}
+
+
+%%%
+%%% Score
+%%%
+
+\score {
+
+  <<
+    \relative c' <<
+      \new Staff \ViolinSolo
+    >>
+
+    \hide Score.Rest
+    \set Score.defaultBarType          = "-"
+  >>
+
+  \layout  {
+    indent       = 0.0
+    \context {
+      \Staff
+      \remove "Time_signature_engraver"
+    }
+    \context {
+      \Score
+      \remove "Bar_number_engraver"
+    }
+  }
+}
diff --git a/Documentation/snippets/new/using-a-tick-as-the-breath-mark-symbol.ly b/Documentation/snippets/new/using-a-tick-as-the-breath-mark-symbol.ly
new file mode 100644 (file)
index 0000000..ad440c3
--- /dev/null
@@ -0,0 +1,25 @@
+\version "2.17.6"
+
+\header {
+  lsrtags = "expressive-marks"
+
+  texidoc = "
+Vocal and wind music frequently uses a tick mark as a breathing sign.  This
+indicates a breath that subtracts a little time from the previous note rather
+than causing a short pause, which is indicated by the comma breath mark.  The
+mark can be moved up a little to take it away from the stave.
+"
+  doctitle = "Using a tick as the breath mark symbol"
+}
+
+\relative c'' {
+  c2
+  \breathe
+  d2
+  \override BreathingSign.Y-offset = #2.6
+  \override BreathingSign.text =
+    \markup { \musicglyph #"scripts.tickmark" }
+  c2
+  \breathe
+  d2
+}
index d6b327d6edcec0b67ef9c0625068884cc3d4e2b2..5932ba2565238653ccf9c8d8383122afcf062a9f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -21,13 +21,13 @@ testnotes = {
   \time 2/4
   \testnotes
 
-  \override Flag #'stencil = #modern-straight-flag
+  \override Flag.stencil = #modern-straight-flag
   \testnotes
 
-  \override Flag #'stencil = #old-straight-flag
+  \override Flag.stencil = #old-straight-flag
   \testnotes
 
-  \revert Flag #'stencil
+  \revert Flag.stencil
   \testnotes
 }
 
index 024c95dbae26a626185b3174af3bc852c85f4559..0a53f3d9807ed1e6131e4d87ce33e892d618e11c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms"
@@ -12,7 +12,7 @@ other situations.
 }
 
 \relative c'' {
-  \override Flag #'stroke-style = #"grace"
+  \override Flag.stroke-style = #"grace"
   c8( d2) e8( f4)
 }
 
diff --git a/Documentation/snippets/new/vertically-aligned-dynamics-and-textscripts.ly b/Documentation/snippets/new/vertically-aligned-dynamics-and-textscripts.ly
new file mode 100644 (file)
index 0000000..909f09e
--- /dev/null
@@ -0,0 +1,34 @@
+\version "2.17.27"
+
+\header {
+  lsrtags = "spacing, tweaks-and-overrides, workaround"
+
+  texidoc = "
+All @code{DynamicLineSpanner} objects (hairpins and dynamic texts) are
+placed with their reference line at least @code{'staff-padding} from
+the staff, unless other notation forces them to be farther.
+Setting @code{'staff-padding} to a sufficiently large value aligns the
+dynamics.
+
+The same idea, together with @code{\\textLengthOn}, is used to align
+the text scripts along their baseline.
+
+"
+  doctitle = "Vertically aligned dynamics and textscripts"
+}
+\markup \vspace #1 %avoid LSR-bug
+
+music = \relative c' {
+  a'2\p b\f
+  e4\p f\f\> g, b\p
+  c2^\markup { \huge gorgeous } c^\markup { \huge fantastic }
+}
+
+{
+  \music
+  \break
+  \override DynamicLineSpanner.staff-padding = #3
+  \textLengthOn
+  \override TextScript.staff-padding = #1
+  \music
+}
index 8e74c262c71d7a5675a328855bf6d413223173c1..65030025a338a43f88da3343f790d1ed7cd74f49 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "rhythms"
@@ -19,30 +19,30 @@ to the tuplet number or tuplet fraction.
 } % begin verbatim
 
 \relative c'' {
-  \once \override TupletNumber #'text =
+  \once \override TupletNumber.text =
     #(tuplet-number::non-default-tuplet-denominator-text 7)
-  \times 2/3  { c4. c4. c4. c4. }
-  \once \override TupletNumber #'text =
+  \tuplet 3/2  { c4. c4. c4. c4. }
+  \once \override TupletNumber.text =
     #(tuplet-number::non-default-tuplet-fraction-text 12 7)
-  \times 2/3  { c4. c4. c4. c4. }
-  \once \override TupletNumber #'text =
+  \tuplet 3/2  { c4. c4. c4. c4. }
+  \once \override TupletNumber.text =
     #(tuplet-number::append-note-wrapper
       (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
-  \times 2/3  { c4. c4. c4. c4. }
+  \tuplet 3/2  { c4. c4. c4. c4. }
 
-  \once \override TupletNumber #'text =
+  \once \override TupletNumber.text =
     #(tuplet-number::append-note-wrapper
       tuplet-number::calc-denominator-text "4")
-  \times 2/3  { c8 c8 c8 c8 c8 c8 }
-  \once \override TupletNumber #'text =
+  \tuplet 3/2  { c8 c8 c8 c8 c8 c8 }
+  \once \override TupletNumber.text =
     #(tuplet-number::append-note-wrapper
       tuplet-number::calc-fraction-text "4")
-  \times 2/3  { c8 c8 c8 c8 c8 c8 }
+  \tuplet 3/2  { c8 c8 c8 c8 c8 c8 }
 
-  \once \override TupletNumber #'text =
+  \once \override TupletNumber.text =
     #(tuplet-number::fraction-with-notes "4." "8")
-  \times 2/3  { c4. c4. c4. c4. }
-  \once \override TupletNumber #'text =
+  \tuplet 3/2  { c4. c4. c4. c4. }
+  \once \override TupletNumber.text =
     #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
-  \times 2/3  { c4. c4. c4. c4. }
+  \tuplet 3/2  { c4. c4. c4. c4. }
 }
diff --git a/Documentation/snippets/numbering-groups-of-measures.ly b/Documentation/snippets/numbering-groups-of-measures.ly
new file mode 100644 (file)
index 0000000..7c082be
--- /dev/null
@@ -0,0 +1,61 @@
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.7
+\version "2.17.7"
+
+\header {
+  lsrtags = "contexts-and-engravers, editorial-annotations, repeats, staff-notation"
+
+  texidoc = "
+This snippet demonstrates the use of the @code{Measure_counter_engraver} to
+number groups of successive measures.  Any stretch of measures may be numbered,
+whether consisting of repetitions or not.
+
+The engraver must be added to the appropriate context.  Here, a @code{Staff}
+context is used; another possibility is a @code{Dynamics} context.
+
+The counter is begun with @code{\\startMeasureCount} and ended with
+@code{\\stopMeasureCount}.  Numbering will start by default with @code{1}, but
+this behavior may be modified by overriding the @code{count-from} property.
+
+When a measure extends across a line break, the number will appear twice, the
+second time in parentheses.
+
+"
+  doctitle = "Numbering groups of measures"
+} % begin verbatim
+
+
+\layout {
+  \context {
+    \Staff
+    \consists #Measure_counter_engraver
+  }
+}
+
+\new Staff {
+  \startMeasureCount
+  \repeat unfold 7 {
+    c'4 d' e' f'
+  }
+  \stopMeasureCount
+  \bar "||"
+  g'4 f' e' d'
+  \override Staff.MeasureCounter.count-from = #2
+  \startMeasureCount
+  \repeat unfold 5 {
+    g'4 f' e' d'
+  }
+  g'4 f'
+  \bar ""
+  \break
+  e'4 d'
+  \repeat unfold 7 {
+    g'4 f' e' d'
+  }
+  \stopMeasureCount
+}
index 9abd9336c601fa2ca1a85365024cdc817011e797..70faa4ae4bfeb719edab3521b4d2304086126576 100644 (file)
@@ -4,7 +4,7 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.31
+%% Note: this file works from version 2.16.0
 \version "2.16.0"
 
 \header {
index 61d36d9d6c83a0aa9cf561845c70224713fe573c..2ec7ebf8d9cd2ed53c42c1db9bf119875dc3e69d 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "vocal-music"
@@ -84,15 +84,15 @@ words = \lyricmode {
   \layout {
     \context {
       \Lyrics
-      \override VerticalAxisGroup #'staff-affinity = ##f
-      \override VerticalAxisGroup #'staff-staff-spacing =
+      \override VerticalAxisGroup.staff-affinity = ##f
+      \override VerticalAxisGroup.staff-staff-spacing =
         #'((basic-distance . 0)
           (minimum-distance . 2)
           (padding . 2))
     }
     \context {
       \Staff
-      \override VerticalAxisGroup #'staff-staff-spacing =
+      \override VerticalAxisGroup.staff-staff-spacing =
         #'((basic-distance . 0)
           (minimum-distance . 2)
           (padding . 2))
index 1f061947b055b5c9f6dc046de83ee7cb14f4a4ec..742e687c9300aabe9742f8932d7df54292332023 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "really-simple, scheme-language, text, titles"
@@ -23,7 +23,7 @@ By putting the output of
 
 \score {
   \new Lyrics {
-    \override Score.RehearsalMark #'self-alignment-X = #LEFT
+    \override Score.RehearsalMark.self-alignment-X = #LEFT
     \mark #(string-append "Processed with LilyPond version " (lilypond-version))
     s2
   }
diff --git a/Documentation/snippets/overriding-articulations-of-destinct-type.ly b/Documentation/snippets/overriding-articulations-of-destinct-type.ly
new file mode 100644 (file)
index 0000000..e13154f
--- /dev/null
@@ -0,0 +1,91 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.25"
+
+\header {
+  lsrtags = "scheme-language, tweaks-and-overrides"
+
+  texidoc = "
+Sometimes you may want to affect a single articulation-type. Although
+it is always possible to use @code{\\tweak}, it might become tedious to
+do so for every single sign of a whole score. The following shows how
+to tweak articulations with a list of custom-settings. One use-case
+might be to create a style-sheet.
+
+With 2.16.2 it is possible to put the proposed function,
+@code{\\customScripts}, into a @code{\\layout}-block.
+
+"
+  doctitle = "Overriding articulations of destinct type"
+} % begin verbatim
+
+% Code by David Nalesnik and Thomas Morley
+
+#(define (custom-script-tweaks ls)
+  (lambda (grob)
+    (let* ((type (ly:prob-property
+                    (assoc-ref (ly:grob-properties grob) 'cause)
+                    'articulation-type))
+           (tweaks (assoc-ref ls type)))
+      (if tweaks
+          (for-each
+            (lambda (x) (ly:grob-set-property! grob (car x) (cdr x)))
+            tweaks)))))
+
+customScripts =
+#(define-music-function (parser location settings)(list?)
+#{
+  \override Script.before-line-breaking =
+    #(custom-script-tweaks settings)
+#})
+
+revertCustomScripts = { \revert Script.before-line-breaking }
+
+%%%%%%%%%%%%%
+% Example:
+%%%%%%%%%%%%%
+
+% Predefine a list of desired tweaks.
+#(define my-settings-1
+  '(
+    ("staccato" . ((color . (1 0 0))(padding . 0.5)))
+    ("accent" . ((font-size . 0)(color . (1 0 0))))
+    ("tenuto" . ((rotation . (45 0 0)) (padding . 2)(font-size . 10)))
+    ("staccatissimo" . ((padding . 1) (color . (1 0 0))))
+    ("segno" . ((font-size . 0)(color . (1 0 0))))
+    ))
+
+#(define my-settings-2
+  '(
+    ("staccato" . ((color . (0 1 0))))
+    ("accent" . ((font-size . 4)(color . (0 1 0))(padding . 1.5)))
+    ("tenuto" . ((font-size . 10)))
+    ("staccatissimo" . ((padding . 2) (color . (0 1 0))))
+    ("coda" . ((color . (0 1 0)) (padding . 1)))
+    ))
+
+one =
+\relative c'' {
+  f1--
+  \customScripts #my-settings-1
+  f-. f-! f-> f-- f-!\segno
+  \revertCustomScripts
+  f-> f-.
+}
+
+two =
+\relative c' {
+  f1--
+  \customScripts #my-settings-2
+  f-. f-! f-> f---> f-!
+  f-> f-.\coda
+}
+
+\new Staff <<
+   \new Voice { \voiceOne \one }
+   \new Voice { \voiceTwo \two }
+   >>
index 909a29f4f8d04a82e387fafe4c152d39fe952807..727f9d4191aa3c18be1fdeaa2e48360011f509b4 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "spacing"
@@ -55,7 +55,7 @@ in markups.
       \mark "B" \label #'markB
       d2 d
       d2 d
-      \once \override Score.RehearsalMark #'break-visibility =
+      \once \override Score.RehearsalMark.break-visibility =
         #begin-of-line-invisible
       \mark "C" \label #'markC
     }
index 303b979a8a6a9abf12e7a5a7b1fdd75d5ee34152..e99215262aa0187781b6c640b75fd5faa22a7f01 100644 (file)
@@ -6,3 +6,4 @@ creating-blank-staves.ly
 demonstrating-all-headers.ly
 setting-system-separators.ly
 table-of-contents.ly
+vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
index 10206bee1747ced898086fd68285ea01000773d7..c67206c3aa3335e753411134078c96aeb119c765 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "rhythms, version-specific"
@@ -25,14 +25,14 @@ tuplets have to be beamed manually.
     % Permit line breaks within tuplets
     \remove "Forbid_line_break_engraver"
     % Allow beams to be broken at line breaks
-    \override Beam #'breakable = ##t
+    \override Beam.breakable = ##t
   }
 }
 \relative c'' {
   a8
-  \repeat unfold 5 { \times 2/3 { c[ b a] } }
+  \repeat unfold 5 { \tuplet 3/2 { c[ b a] } }
   % Insert a manual line break within a tuplet
-  \times 2/3 { c[ b \bar "" \break a] }
-  \repeat unfold 5 { \times 2/3 { c[ b a] } }
+  \tuplet 3/2 { c[ b \bar "" \break a] }
+  \repeat unfold 5 { \tuplet 3/2 { c[ b a] } }
   c8
 }
index b476dede6d55ccfce26ea0bd0113f81bb2459ae6..ad09b5755ba21e09989d1516d5e0d04db8791213 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
 
 \header {
   lsrtags = "headword"
@@ -67,7 +68,7 @@ Piches headword
     % RH Voice 2
     \new Voice {
       \voiceTwo
-      \override Staff.DynamicLineSpanner #'staff-padding = #2.5
+      \override Staff.DynamicLineSpanner.staff-padding = #3
       <e'' b'>2 \p
       <ds'' a'>4
       <cs'' gs'>4
@@ -75,8 +76,7 @@ Piches headword
       <bs' fs'>2
       e'2
       |
-      \once \override TextScript #'staff-padding = #2.5
-      <b'! a'>2 _ \markup \italic { cresc. }
+      <b'! a'>2 -\tweak #'style #'none \cresc
       b'4
       <e'' cs''>4
       |
@@ -99,7 +99,7 @@ Piches headword
 
   % LH Staff
   \new Staff {
-    \override Staff.SustainPedalLineSpanner #'staff-padding = #5
+    \override Staff.SustainPedalLineSpanner.staff-padding = #6
     <gs' e'>2 ( \sustainOn
     <fs' ds' b>4 \sustainOff
     <e' cs'>4
index 911ef6f5da0111c2d82e2c16f4f6a34076d1e4cc..87368cd7cf68dd0417a20704165e84d1b6e2d336 100644 (file)
@@ -1,8 +1,10 @@
 adding-ambitus-per-voice.ly
+adding-an-ottava-marking-to-a-single-voice.ly
 altering-the-length-of-beamed-stems.ly
 ambitus-with-multiple-voices.ly
 ambitus.ly
 applying-note-head-styles-depending-on-the-step-of-the-scale.ly
+automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly
 changing-the-ambitus-gap.ly
 changing-the-interval-of-lines-on-the-stave.ly
 clefs-can-be-transposed-by-arbitrary-amounts.ly
index b62ec12e5f4508d8c37a0eee934ac71220acd66f..68861a1dc30f69e376cdc3106967a13835a09844 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
@@ -20,10 +20,10 @@ and lower start positions independently.
 
 \relative c' {
   <c e g b>1\arpeggio
-  \once \override Arpeggio #'positions = #'(-5 . 0)
+  \once \override Arpeggio.positions = #'(-5 . 0)
   <c e g b>1\arpeggio
-  \once \override Arpeggio #'positions = #'(0 . 5)
+  \once \override Arpeggio.positions = #'(0 . 5)
   <c e g b>1\arpeggio
-  \once \override Arpeggio #'positions = #'(-5 . 5)
+  \once \override Arpeggio.positions = #'(-5 . 5)
   <c e g b>1\arpeggio
 }
index 790ab94f32b9f971ae8df3f854dea8178bc59142..253b05ec0315cf1a17423e60aa0c9a90158b3213 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations"
@@ -24,14 +24,14 @@ involved.
 \relative c' {
   \set fingeringOrientations = #'(left)
   <c-1 d-2 a'-5>4
-  <c-1 d-\tweak #'extra-offset #'(0 . 0.7)-2 a'-5>4
+  <c-1 d-\tweak extra-offset #'(0 . 0.7)-2 a'-5>4
   \set fingeringOrientations = #'(down)
   <c-1 d-2 a'-5>4
-  <c-1 d-\tweak #'extra-offset #'(-1.2 . 0)-2 a'-5>4
+  <c-1 d-\tweak extra-offset #'(-1.2 . 0)-2 a'-5>4
   \set fingeringOrientations = #'(down right up)
   <c-1 d-2 a'-5>4
-  <c-1 d-\tweak #'extra-offset #'(-1 . 1.2)-2 a'-5>4
+  <c-1 d-\tweak extra-offset #'(-1 . 1.2)-2 a'-5>4
   \set fingeringOrientations = #'(up)
   <c-1 d-2 a'-5>4
-  <c-1 d-\tweak #'extra-offset #'(-1.2 . 0)-2 a'-5>4
+  <c-1 d-\tweak extra-offset #'(-1.2 . 0)-2 a'-5>4
 }
index 7f13ed5280e83903011d9c4ac16cc33682e23d19..d3c6e90dc9672e68ac62002d576ab7ac929fad50 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms"
@@ -24,9 +24,9 @@ beaming for grace notes.
   f8[ e]
   \grace {
     f8[ e]
-    \override Stem  #'no-stem-extend = ##f
+    \override Stem.no-stem-extend = ##f
     f8[ e]
-    \revert Stem #'no-stem-extend
+    \revert Stem.no-stem-extend
   }
   f8[ e]
 }
index ae61dd1a9f1caaf04e747186bebfd0236013ee8c..0bbbdf1624d6d015bd1a85d91ea4fa21c48abdb5 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.28"
 
 \header {
   lsrtags = "rhythms"
@@ -22,10 +22,10 @@ the) graces are put left of the musical columns for the main notes.
 
 \relative c'' {
   <<
-    \override Score.SpacingSpanner #'strict-grace-spacing = ##t
+    \override Score.SpacingSpanner.strict-grace-spacing = ##t
     \new Staff \new Voice {
       \afterGrace c4 { c16[ c8 c16] }
-      c8[ \grace { b16[ d] } c8]
+      c8[ \grace { b16 d } c8]
       c4 r
     }
     \new Staff {
index 093834aa640adef45e1457d6d807c8e17b09a97a..b32e5b9a51d364d303558b022a3aaa46d9801ecb 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.14
-\version "2.16.0"
+%% Note: this file works from version 2.17.18
+\version "2.17.18"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -27,17 +27,17 @@ follows:
   % Multi-measure rests by default are set under the fourth line
   R1
   % They can be moved using an override
-  \override MultiMeasureRest #'staff-position = #-2
+  \override MultiMeasureRest.staff-position = #-2
   R1
-  \override MultiMeasureRest #'staff-position = #0
+  \override MultiMeasureRest.staff-position = #0
   R1
-  \override MultiMeasureRest #'staff-position = #2
+  \override MultiMeasureRest.staff-position = #2
   R1
-  \override MultiMeasureRest #'staff-position = #3
+  \override MultiMeasureRest.staff-position = #3
   R1
-  \override MultiMeasureRest #'staff-position = #6
+  \override MultiMeasureRest.staff-position = #6
   R1
-  \revert MultiMeasureRest #'staff-position
+  \revert MultiMeasureRest.staff-position
   \break
 
   % In two Voices, odd-numbered voices are under the top line
@@ -50,7 +50,7 @@ follows:
   % Separating multi-measure rests in more than two voices
   % requires an override
   << { R1 } \\ { R1 } \\
-     \once \override MultiMeasureRest #'staff-position = #0
+     \once \override MultiMeasureRest.staff-position = #0
      { R1 }
   >>
 
@@ -58,10 +58,10 @@ follows:
   % in all voices to avoid multiple instances being printed
   \compressFullBarRests
   <<
-   \revert MultiMeasureRest #'staff-position
+   \revert MultiMeasureRest.direction
     { R1*3 }
     \\
-   \revert MultiMeasureRest #'staff-position
+   \revert MultiMeasureRest.direction
     { R1*3 }
   >>
 }
index 047238c2a4d01ba5fe697b80b10784d193d350b3..b03aa21b892254452c834758aca73fd22e555fbb 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "breaks, repeats, symbols-and-glyphs, workaround"
@@ -30,14 +30,14 @@ line.
     }
 
     % Set segno sign as rehearsal mark and adjust size if needed
-    % \once \override Score.RehearsalMark #'font-size = #3
+    % \once \override Score.RehearsalMark.font-size = #3
     \mark \markup { \musicglyph #"scripts.segno" }
     \repeat unfold 2 {
       c4 c c c
     }
 
     % Set coda sign as rehearsal mark and adjust size if needed
-    \once \override Score.RehearsalMark #'font-size = #4
+    \once \override Score.RehearsalMark.font-size = #4
     \mark \markup { \musicglyph #"scripts.coda" }
     \repeat unfold 2 {
       c4 c c c
@@ -51,8 +51,8 @@ line.
     \bar "||"
 
     % Set segno sign as rehearsal mark and adjust size if needed
-    \once \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible
-    % \once \override Score.RehearsalMark #'font-size = #3
+    \once \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
+    % \once \override Score.RehearsalMark.font-size = #3
     \mark \markup { \musicglyph #"scripts.segno" }
 
     % Here begins the trickery!
@@ -64,14 +64,14 @@ line.
         % text line-aligned
         % ==================
         % Move text to the desired position
-        % \once \override TextScript #'extra-offset = #'( 2 . -3.5 )
-        % | s1*0^\markup { D.S. al Coda } }
+        % \once \override TextScript.extra-offset = #'( 2 . -3.5 )
+        % | <>^\markup { D.S. al Coda } }
 
         % text center-aligned
         % ====================
         % Move text to the desired position
-        % \once \override TextScript #'extra-offset = #'( 6 . -5.0 )
-        % | s1*0^\markup { \center-column { D.S. "al Coda" } }
+        % \once \override TextScript.extra-offset = #'( 6 . -5.0 )
+        % | <>^\markup { \center-column { D.S. "al Coda" } }
 
         % text and symbols center-aligned
         % ===============================
@@ -80,8 +80,8 @@ line.
           s1
           \bar ""
         }
-        \once \override TextScript #'extra-offset = #'( 0 . -3.0 )
-        \once \override TextScript #'word-space = #1.5
+        \once \override TextScript.extra-offset = #'( 0 . -3.0 )
+        \once \override TextScript.word-space = #1.5
         <>^\markup { \center-column { "D.S. al Coda" \line { \musicglyph #"scripts.coda" \musicglyph #"scripts.tenuto" \musicglyph #"scripts.coda"} } }
 
         % Increasing the unfold counter will expand the staff-free space
@@ -99,20 +99,20 @@ line.
    \break
 
    % Show up, you clef and key!
-   \once \override Staff.KeySignature #'break-visibility = #end-of-line-invisible
-   \once \override Staff.Clef #'break-visibility = #end-of-line-invisible
+   \once \override Staff.KeySignature.break-visibility = #end-of-line-invisible
+   \once \override Staff.Clef.break-visibility = #end-of-line-invisible
 
    % Set coda sign as rehearsal mark and adjust size and position
 
    % Put the coda sign ontop of the (treble-)clef dependend on coda's line-position
 
    % Coda NOT on new line, use this:
-   % \once \override Score.RehearsalMark #'extra-offset = #'( -2 . 1.75 )
+   % \once \override Score.RehearsalMark.extra-offset = #'( -2 . 1.75 )
 
    % Coda on new line, use this:
-   \once \override Score.RehearsalMark #'extra-offset = #'( -4.5 . 0 )
+   \once \override Score.RehearsalMark.extra-offset = #'( -4.5 . 0 )
 
-   \once \override Score.RehearsalMark #'font-size = #5
+   \once \override Score.RehearsalMark.font-size = #5
    \mark \markup { \musicglyph #"scripts.coda" }
 
    % The coda
index 206db5c2045be5d6d7f4769ab5a32515d25b972a..8348981a4e28bd116c24e5c7d178cb286e8741b7 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, expressive-marks, tweaks-and-overrides"
@@ -19,7 +19,7 @@ set to false in order to be printed inside slurs.
 
 
 \relative c'' {
-  \override TextScript #'avoid-slur = #'inside
-  \override TextScript #'outside-staff-priority = ##f
+  \override TextScript.avoid-slur = #'inside
+  \override TextScript.outside-staff-priority = ##f
   c2(^\markup { \halign #-10 \natural } d4.) c8
 }
index 8324912159d8a27c144d1b7fbcdea583487cc6f0..b788c3cd102b03a62456b84335cd959362b4cde3 100644 (file)
   lsrtags = "automatic-notation, pitches"
 
   texidoc = "
-In accordance with standard typesetting rules, a natural sign is
-printed before a sharp or flat if a previous accidental on the same
-note needs to be canceled.  To change this behavior, set the
-@code{extraNatural} property to @code{f} in the @code{Staff} context.
+In accordance with traditional typesetting rules, a natural sign is
+printed before a sharp or flat if a previous double sharp or flat on
+the same note  is canceled.  To change this behavior to contemporary
+practice, set the  @code{extraNatural} property to @code{f} in the
+@code{Staff} context.
 
 
 
@@ -21,7 +22,6 @@ note needs to be canceled.  To change this behavior, set the
   doctitle = "Preventing extra naturals from being automatically added"
 } % begin verbatim
 
-
 \relative c'' {
   aeses4 aes ais a
   \set Staff.extraNatural = ##f
index e6c6c823aa7bf175c47f370e683fa4d912c7b163..db86ab6d76c4fc308334e93f522bfa312026398e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "rhythms"
@@ -18,16 +18,17 @@ tuplet marking.  This can be overcome by setting @code{TupletBracket
   doctitle = "Preventing final mark from removing final tuplet"
 } % begin verbatim
 
+\markup \vspace #1 %% workaround for LSR-problem
 
 \new Staff {
    \set tupletFullLength = ##t
    \time 1/8
-   \times 2/3 { c'16 c'16 c'16 }
-   \times 2/3 { c'16 c'16 c'16 }
-   \times 2/3 { c'16 c'16 c'16 }
-   \override Score.RehearsalMark #'break-visibility = #'#(#t #t #t)
-   \override Score.RehearsalMark #'direction = #DOWN
-   \override Score.RehearsalMark #'self-alignment-X = #RIGHT
+   \tuplet 3/2 { c'16 c'16 c'16 }
+   \tuplet 3/2 { c'16 c'16 c'16 }
+   \tuplet 3/2 { c'16 c'16 c'16 }
+   \override Score.RehearsalMark.break-visibility = ##(#t #t #t)
+   \override Score.RehearsalMark.direction = #DOWN
+   \override Score.RehearsalMark.self-alignment-X = #RIGHT
 % due to issue 2362 the following line is commented
 %   \mark "Composed Feb 2007 - Feb 2008"
 % and a shorter mark is used.
@@ -37,15 +38,15 @@ tuplet marking.  This can be overcome by setting @code{TupletBracket
 \new Staff {
   \set tupletFullLength = ##t
 
-  \override TupletBracket #'full-length-to-extent = ##f
+  \override TupletBracket.full-length-to-extent = ##f
 
   \time 1/8
-  \times 2/3 { c'16 c'16 c'16 }
-  \times 2/3 { c'16 c'16 c'16 }
-  \times 2/3 { c'16 c'16 c'16 }
-  \override Score.RehearsalMark #'break-visibility = #'#(#t #t #t)
-  \override Score.RehearsalMark #'direction = #DOWN
-  \override Score.RehearsalMark #'self-alignment-X = #RIGHT
+  \tuplet 3/2 { c'16 c'16 c'16 }
+  \tuplet 3/2 { c'16 c'16 c'16 }
+  \tuplet 3/2 { c'16 c'16 c'16 }
+  \override Score.RehearsalMark.break-visibility = ##(#t #t #t)
+  \override Score.RehearsalMark.direction = #DOWN
+  \override Score.RehearsalMark.self-alignment-X = #RIGHT
 % due to issue 2362 the following line is commented
 %   \mark "Composed Feb 2007 - Feb 2008"
 % and a shorter mark is used.
index f2d620be9e9b5ce4aa56d5f4df2a3ca38715245d..b8590edebfd3ca4a581ffb5bbc4f30bd4e088ae7 100644 (file)
@@ -1,16 +1,17 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "repeats, tweaks-and-overrides"
 
   texidoc = "
-A @code{|:} bar line can be printed at the beginning of a piece, by
+A @code{.|:} bar line can be printed at the beginning of a piece, by
 overriding the relevant property:
 
 "
@@ -18,8 +19,9 @@ overriding the relevant property:
 } % begin verbatim
 
 
+
 \relative c'' {
-  \once \override Score.BreakAlignment #'break-align-orders =
+  \once \override Score.BreakAlignment.break-align-orders =
     #(make-vector 3 '(instrument-name
                       left-edge
                       ambitus
@@ -29,13 +31,13 @@ overriding the relevant property:
                       time-signature
                       staff-bar
                       custos))
-  \once \override Staff.TimeSignature #'space-alist =
+  \once \override Staff.TimeSignature.space-alist =
     #'((first-note . (fixed-space . 2.0))
        (right-edge . (extra-space . 0.5))
        ;; free up some space between time signature
        ;; and repeat bar line
        (staff-bar . (extra-space . 1)))
-  \bar "|:"
+  \bar ".|:"
   c1
   d1
   d4 e f g
index e75b2c37b339230b59da4d665e01ce1d870d0b3a..75c335bdeafccb02eb52708dcd13f99ded706346 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms"
@@ -20,7 +20,7 @@ measures except at the end of the line.
 
 
 \relative c' {
-  \override Score.BarNumber #'break-visibility = #end-of-line-invisible
+  \override Score.BarNumber.break-visibility = #end-of-line-invisible
   \set Score.currentBarNumber = #11
   % Permit first bar number to be printed
   \bar ""
index 838a1bb1e3eea0e4e53bcc892353bcecb2c827e9..63b65a8372c0cebfb01dad4faef1bb3cd679cbc0 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -19,19 +19,19 @@ Bar numbers can also be printed inside boxes or circles.
 
 \relative c' {
   % Prevent bar numbers at the end of a line and permit them elsewhere
-  \override Score.BarNumber #'break-visibility = #end-of-line-invisible
+  \override Score.BarNumber.break-visibility = #end-of-line-invisible
   \set Score.barNumberVisibility = #(every-nth-bar-number-visible 4)
 
   % Increase the size of the bar number by 2
-  \override Score.BarNumber #'font-size = #2
+  \override Score.BarNumber.font-size = #2
 
   % Draw a box round the following bar number(s)
-  \override Score.BarNumber #'stencil
+  \override Score.BarNumber.stencil
     = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print)
   \repeat unfold 5 { c1 }
 
   % Draw a circle round the following bar number(s)
-  \override Score.BarNumber #'stencil
+  \override Score.BarNumber.stencil
     = #(make-stencil-circler 0.1 0.25 ly:text-interface::print)
   \repeat unfold 4 { c1 } \bar "|."
 }
diff --git a/Documentation/snippets/printing-hairpins-in-various-styles.ly b/Documentation/snippets/printing-hairpins-in-various-styles.ly
new file mode 100644 (file)
index 0000000..1ce96f7
--- /dev/null
@@ -0,0 +1,38 @@
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.14
+\version "2.17.14"
+
+\header {
+  lsrtags = "expressive-marks"
+
+  texidoc = "
+Hairpin dynamics may be created in a variety of styles
+
+"
+  doctitle = "Printing hairpins in various styles"
+} % begin verbatim
+
+
+\relative c'' {
+  \override Hairpin.stencil = #flared-hairpin
+  a4\< a a a\f
+  a4\p\< a a a\ff
+  a4\sfz\< a a a\!
+  \override Hairpin.stencil = #constante-hairpin
+  a4\< a a a\f
+  a4\p\< a a a\ff
+  a4\sfz\< a a a\!
+  \override Hairpin.stencil = #flared-hairpin
+  a4\> a a a\f
+  a4\p\> a a a\ff
+  a4\sfz\> a a a\!
+  \override Hairpin.stencil = #constante-hairpin
+  a4\> a a a\f
+  a4\p\> a a a\ff
+  a4\sfz\> a a a\!
+}
index 6c7e5a3217c9dd5156bb09950ae872d0062ccd64..634017285c1e2dab1d88cf3f153603e695e8a2d1 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks"
@@ -20,7 +20,7 @@ notation) by setting the @code{circled-tip} property of the
 
 
 \relative c'' {
-  \override Hairpin #'circled-tip = ##t
+  \override Hairpin.circled-tip = ##t
   c2\< c\!
   c4\> c\< c2\!
 }
index 0b6dd34387a722250eca5e5c58dceb8b214044e9..89e2fbf87a829a4013d9c213e5ac3b0b8f41df66 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "text"
@@ -22,8 +22,8 @@ to align the right end of the mark with the bar line.
 \relative c'' {
   g2 c
   d,2 a'
-  \once \override Score.RehearsalMark #'break-visibility = #end-of-line-visible
-  \once \override Score.RehearsalMark #'self-alignment-X = #RIGHT
+  \once \override Score.RehearsalMark.break-visibility = #end-of-line-visible
+  \once \override Score.RehearsalMark.self-alignment-X = #RIGHT
   \mark "D.C. al Fine"
   \break
   g2 b,
index f8b2ebc048afce180e552fca3d6faf19519d4055..4c563872b41e188604e7d401e58a765ee371e477 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, rhythms, tweaks-and-overrides"
@@ -23,12 +23,12 @@ of @code{MetronomeMark} or @code{RehearsalMark} appropriately.
 
 {
   % Metronome marks below the staff
-  \override Score.MetronomeMark #'direction = #DOWN
+  \override Score.MetronomeMark.direction = #DOWN
   \tempo 8. = 120
   c''1
 
   % Rehearsal marks below the staff
-  \override Score.RehearsalMark #'direction = #DOWN
+  \override Score.RehearsalMark.direction = #DOWN
   \mark \default
   c''1
 }
index 1e189dfa9b1f15c5ee8f4e8f7c8fa1bb590388bd..8d52ffd405e7541ac359a72687713096a16d5a55 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "contemporary-notation, percussion, real-music, really-cool, rhythms"
@@ -41,9 +41,9 @@ global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } }
     \remove "Timing_translator"
     \remove "Default_bar_line_engraver"
     \remove "Bar_number_engraver"
-    \override SpacingSpanner #'uniform-stretching = ##t
-    \override SpacingSpanner #'strict-note-spacing = ##t
-    proportionalNotationDuration = #(ly:make-moment 1 64)
+    \override SpacingSpanner.uniform-stretching = ##t
+    \override SpacingSpanner.strict-note-spacing = ##t
+    proportionalNotationDuration = #(ly:make-moment 1/64)
   }
   \context {
     \Staff
@@ -60,7 +60,7 @@ global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } }
 Bassklarinette = \new Staff \with {
   \consists "Bar_number_engraver"
   barNumberVisibility = #(every-nth-bar-number-visible 2)
-  \override BarNumber #'break-visibility = #end-of-line-invisible
+  \override BarNumber.break-visibility = #end-of-line-invisible
 } <<
   \global {
     \bar "|"
@@ -79,12 +79,12 @@ Bassklarinette = \new Staff \with {
     \bar "|"
     \time 2/4
     \tupletUp
-    \times 2/3 { ees''4 r4 d''4 ~ }
+    \tuplet 3/2 { ees''4 r4 d''4 ~ }
 
     \bar "|"
     \time 3/8
     \tupletUp
-    \times 3/4 { d''4 r4 }
+    \tuplet 4/3 { d''4 r4 }
 
     \bar "|"
     \time 2/4
index eb4c12e5d78c3fd1b663e08a7dc984abd48cbc26..b5d489208de5f016a92e5fb24cff0073dd78b2c1 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.28"
 
 \header {
   lsrtags = "spacing, tweaks-and-overrides"
@@ -20,14 +20,14 @@ the note that occurs at the same time. This may cause collisions.
 
 
 \relative c'' <<
-  \override Score.SpacingSpanner #'strict-note-spacing = ##t
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+  \override Score.SpacingSpanner.strict-note-spacing = ##t
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
   \new Staff {
     c8[ c \clef alto c c \grace { d16 } c8 c] c4
-    c2 \grace { c16[ c16] } c2
+    c2 \grace { c16 c16 } c2
   }
   \new Staff {
-    c2 \times 2/3 { c8 \clef bass cis,, c } c4
+    c2 \tuplet 3/2 { c8 \clef bass cis,, c } c4
     c1
   }
 >>
index c2596fb4c5bf9b9cc1a9e5277d7512ec079c48fa..4edd6a59e58172bc594738f50c0cd2c85affb19e 100644 (file)
@@ -4,14 +4,14 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "staff-notation, text, vocal-music"
 
   texidoc = "
 Lyrics can be moved vertically to place them inside the staff.  The
-lyrics are moved with @code{\\override LyricText #'extra-offset = #'(0
+lyrics are moved with @code{\\override LyricText.extra-offset = #'(0
 . dy)} and there are similar commands to move the extenders and
 hyphens.  The offset needed is established with trial and error.
 
@@ -24,8 +24,8 @@ hyphens.  The offset needed is established with trial and error.
     \new Voice = "voc" \relative c' { \stemDown a bes c8 b c4 }
   >>
   \new Lyrics \with {
-    \override LyricText #'extra-offset = #'(0 . 8.6)
-    \override LyricExtender #'extra-offset = #'(0 . 8.6)
-    \override LyricHyphen #'extra-offset = #'(0 . 8.6)
+    \override LyricText.extra-offset = #'(0 . 8.6)
+    \override LyricExtender.extra-offset = #'(0 . 8.6)
+    \override LyricHyphen.extra-offset = #'(0 . 8.6)
   } \lyricsto "voc" { La la -- la __ _ la }
 >>
index ad8061229d248aa5a9ec2425a5983ece98763eef..df7517fd79a5b055b3b5a06efe5d7e3c59cac7be 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.13
+\version "2.17.13"
 
 \header {
   lsrtags = "pitches, staff-notation"
@@ -13,9 +14,8 @@
 Quotations take into account the transposition of both source and
 target.  In this example, all instruments play sounding middle C; the
 target is an instrument in F.  The target part may be transposed using
-@code{\\transpose}.  In this case, all the pitches (including the
-quoted ones) are transposed.
-
+@code{\\transpose}.  In this case, the quoted pitches will stay
+unchanged.
 "
   doctitle = "Quoting another voice with transposition"
 } % begin verbatim
index 55ea2aaba66980964c4241a7383291775653aa93..b83496137443d94decf2e74e1b7d96b8abd9715b 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "staff-notation"
@@ -33,7 +33,7 @@ quoteMe = \relative c' {
 
 original = \relative c'' {
   c8 d s2
-  \once \override NoteColumn #'ignore-collision = ##t
+  \once \override NoteColumn.ignore-collision = ##t
   es8 gis8
 }
 
@@ -54,7 +54,7 @@ original = \relative c'' {
     \new Voice {
       s4
       \set fontSize = #-4
-      \override Stem #'length-fraction = #(magstep -4)
+      \override Stem.length-fraction = #(magstep -4)
       \quoteDuring #"quoteMe" { \skip 2. }
     }
   >>
index dbe8cfa9d03a66bbed481b1127046586207e621c..a5cb083c2e58ec524790e87afad4cd6f43a093d3 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "winds"
@@ -20,8 +20,8 @@ instruments can be realized.
 % range chart for paetzold contrabass recorder
 
 centermarkup = {
-  \once \override TextScript #'self-alignment-X = #CENTER
-  \once \override TextScript #'X-offset =#(ly:make-simple-closure
+  \once \override TextScript.self-alignment-X = #CENTER
+  \once \override TextScript.X-offset =#(ly:make-simple-closure
   `(,+
   ,(ly:make-simple-closure (list
   ly:self-alignment-interface::centered-on-x-parent))
@@ -32,8 +32,8 @@ centermarkup = {
 \score {
   \new Staff \with {
     \remove "Time_signature_engraver"
-    \override Stem #'stencil = ##f
-    \override Flag #'stencil = ##f
+    \omit Stem
+    \omit Flag
     \consists "Horizontal_bracket_engraver"
   }
   {
@@ -44,19 +44,19 @@ centermarkup = {
     gis'1*1/4
     \stemDown a'4^\markup{1)}
     \centermarkup
-    \once \override TextScript #'padding = #2
+    \once \override TextScript.padding = #2
     bes'1*1/4_\markup{\override #'(baseline-skip . 1.7) \column
       { \fontsize #-5 \slashed-digit #0 \finger 1 \finger 2 \finger 3 \finger 4
     \finger 5 \finger 6 \finger 7} }
     b'1*1/4
     c''4^\markup{1)}
     \centermarkup
-    \once \override TextScript #'padding = #2
+    \once \override TextScript.padding = #2
     cis''1*1/4
     deh''1*1/4
     \centermarkup
-    \once \override TextScript #'padding = #2
-    \once \override Staff.HorizontalBracket #'direction = #UP
+    \once \override TextScript.padding = #2
+    \once \override Staff.HorizontalBracket.direction = #UP
     e''1*1/4_\markup{\override #'(baseline-skip . 1.7) \column
       { \fontsize #-5 \slashed-digit #0 \finger 1 \finger 2 \finger 4
     \finger 5} }\startGroup
index c8507a43eb4c8af7247dbf53c5bd79fc68061abf..ae51b3c9a724eb86c17961aa81e569088609a3f8 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms"
@@ -25,12 +25,12 @@ other effects may be obtained.
 
 startAcciaccaturaMusic = {
   <>(
-  \override Flag #'stroke-style = #"grace"
+  \override Flag.stroke-style = #"grace"
   \slurDashed
 }
 
 stopAcciaccaturaMusic = {
-  \revert Flag #'stroke-style
+  \revert Flag.stroke-style
   \slurSolid
   <>)
 }
index f615a50d7a7b39cab334933f8d70fb0e2f82751e..fd0fdce66220359594db3d42c0b52dd51d44c54e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -23,12 +23,12 @@ a staff-by-staff basis.
   \new StaffGroup <<
     \new Staff {
       e1 | e
-      \once \override Staff.BarLine #'allow-span-bar = ##f
+      \once \override Staff.BarLine.allow-span-bar = ##f
       e1 | e | e
     }
     \new Staff {
       c1 | c | c
-      \once \override Staff.BarLine #'allow-span-bar = ##f
+      \once \override Staff.BarLine.allow-span-bar = ##f
       c1 | c
     }
     \new Staff {
index bcdfb4ee5a2ed2f2ee5cd6e4b1957a3be57adcd1..6cad882e87f416581562e381d62dd9074dfcc4cd 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "breaks, staff-notation, tweaks-and-overrides"
@@ -30,7 +30,7 @@ written.
   \context {
     \Staff \RemoveEmptyStaves
     % To use the setting globally, uncomment the following line:
-    % \override VerticalAxisGroup #'remove-first = ##t
+    % \override VerticalAxisGroup.remove-first = ##t
   }
 }
 \new StaffGroup <<
@@ -41,7 +41,7 @@ written.
   \new Staff {
     % To use the setting globally, comment this line,
     % uncomment the line in the \layout block above
-    \override Staff.VerticalAxisGroup #'remove-first = ##t
+    \override Staff.VerticalAxisGroup.remove-first = ##t
     R1 \break
     R
   }
index 0f284e5bc413c030b2b382ed799cd8f47457f471..fa562f980a808c3124ebf197383683cbe5251a48 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.5"
 
 \header {
   lsrtags = "headword"
@@ -30,7 +30,7 @@ Repeats headword
       \key df \major
       \time 2/4
       \set Score.currentBarNumber = #9
-      \bar "|:"
+      \bar ".|:"
       <af ef c>4 (
       <af gf c>8..
       <af ef c>32
@@ -84,7 +84,7 @@ Repeats headword
       \oneVoice
       r8
       \clef bass
-      \bar ":|"
+      \bar ":|."
    }
 
    \new Staff = LH {
index c9b276e8ff251c94da8b644a26cbf942fa9fc9bd..3b55be22a85c818a8d458590c6bf421500ffbb2c 100644 (file)
@@ -1,8 +1,10 @@
 adding-volta-brackets-to-additional-staves.ly
+centered-measure-numbers.ly
 cross-staff-tremolos.ly
 engraving-tremolos-with-floating-beams.ly
 isolated-percent-repeats.ly
 measure-counter.ly
+numbering-groups-of-measures.ly
 percent-repeat-count-visibility.ly
 percent-repeat-counter.ly
 positioning-segno-and-coda-with-line-break.ly
index a2d56413647d3129506d38b47a509fa9a9fb6853..789f0b6d346682b3c5591e271ca9121955aee9f7 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "ancient-notation, rhythms, symbols-and-glyphs, tweaks-and-overrides"
@@ -30,22 +30,22 @@ Rests may be used in various styles.
 
 \new Staff \relative c {
   \cadenzaOn
-  \override Staff.Rest #'style = #'mensural
+  \override Staff.Rest.style = #'mensural
   r\maxima^\markup \typewriter { mensural }
   r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
   \bar ""
 
-  \override Staff.Rest #'style = #'neomensural
+  \override Staff.Rest.style = #'neomensural
   r\maxima^\markup \typewriter { neomensural }
   r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
   \bar ""
 
-  \override Staff.Rest #'style = #'classical
+  \override Staff.Rest.style = #'classical
   r\maxima^\markup \typewriter { classical }
   r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
   \bar ""
 
-  \override Staff.Rest  #'style = #'default
+  \override Staff.Rest.style = #'default
   r\maxima^\markup \typewriter { default }
   r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
 }
index 5feb8b92bd0f4b34d7428b572fa854041f7c9f3d..6d47071c7979cb17ab9b530e0e9089ca05c5e2d2 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -29,20 +29,20 @@ the appropriate duration).
 
 % Macro to print single slash
 rs = {
-  \once \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash
-  \once \override Rest #'thickness = #0.48
-  \once \override Rest #'slope = #1.7
+  \once \override Rest.stencil = #ly:percent-repeat-item-interface::beat-slash
+  \once \override Rest.thickness = #0.48
+  \once \override Rest.slope = #1.7
   r4
 }
 
 % Function to print a specified number of slashes
 comp = #(define-music-function (parser location count) (integer?)
   #{
-    \override Rest #'stencil = #ly:percent-repeat-item-interface::beat-slash
-    \override Rest #'thickness = #0.48
-    \override Rest #'slope = #1.7
+    \override Rest.stencil = #ly:percent-repeat-item-interface::beat-slash
+    \override Rest.thickness = #0.48
+    \override Rest.slope = #1.7
     \repeat unfold $count { r4 }
-    \revert Rest #'stencil
+    \revert Rest.stencil
   #}
 )
 
index a05cbcfc3e132aa73439e054341d0c4985c86e5a..b0c99b7dc44a2f58ce2a80def71f777893a30d5c 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "headword"
@@ -26,9 +26,9 @@ Rhythms headword
 \layout {
   \context {
     \Score
-    \override SpacingSpanner #'base-shortest-duration =
-      #(ly:make-moment 1 40)
-      %\override SpacingSpanner #'strict-grace-spacing = ##t
+    \override SpacingSpanner.base-shortest-duration =
+      #(ly:make-moment 1/40)
+      %\override SpacingSpanner.strict-grace-spacing = ##t
   }
 }
 
@@ -65,7 +65,7 @@ Rhythms headword
          }
       <e''! e'>16
       <f'' f'>16 ] )
-      \once \override TextScript #'padding = #3.8
+      \once \override TextScript.padding = #3.8
       <g'' g'>16 ( \staccato -\markup { \italic cresc. }
       <a'' a'>16 ) \staccato
       <bf'' bf'>32  (
@@ -75,7 +75,7 @@ Rhythms headword
 
       |
 
-      \once \override DynamicLineSpanner #'padding = #2
+      \once \override DynamicLineSpanner.padding = #2
       b''32 ( \p \>
       c'''32
       d'''32
index 6f964e1c636749d298d72e3b254742929564423a..99c7a93f8000f0a2fccd44eae45bb0232e44983d 100644 (file)
@@ -2,7 +2,7 @@ adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly
 adding-drum-parts.ly
 adjusting-grace-note-spacing.ly
 aligning-bar-numbers.ly
-alternative-breve-note.ly
+alternative-breve-notes.ly
 automatic-beam-subdivisions.ly
 automatically-change-durations.ly
 avoiding-collisions-with-chord-fingerings.ly
index 3e9034afe7de5530eea6e67131f93aa1630a08fe..a7bc17c61bd3fe216ce7afa6be1775acbc4fd7cf 100644 (file)
@@ -1,4 +1,5 @@
 adding-extra-fingering-with-scheme.ly
+adding-links-to-objects.ly
 adding-the-current-date-to-a-score.ly
 center-text-below-hairpin-dynamics.ly
 changing--flageolet-mark-size.ly
@@ -11,6 +12,7 @@ drawing-circles-around-various-objects.ly
 generating-random-notes.ly
 generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.ly
 outputting-the-version-number.ly
+overriding-articulations-of-destinct-type.ly
 string-number-extender-lines.ly
 three-sided-box.ly
 transposing-pitches-with-minimum-accidentals-smart-transpose.ly
index 029486b1fe2fcb93abb771b87e1b7c2f01ab371d..46883755e6b6e55885e0621009982ac7962c2626 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.20
-\version "2.16.0"
+%% Note: this file works from version 2.17.30
+\version "2.17.30"
 
 \header {
   lsrtags = "template, real-music, specific-notation"
@@ -72,15 +72,15 @@ harmonies = \new ChordNames \chordmode {
   bes1
 }
 
-NoStem = { \override Stem #'transparent = ##t \override Flag #'transparent = ##t }
-NoNoteHead = \override NoteHead #'transparent = ##t
-ZeroBeam = \override Beam  #'positions = #'(0 . 0)
+NoStem = { \hide Stem }
+NoNoteHead = \hide NoteHead
+ZeroBeam = \override Beam.positions = #'(0 . 0)
 
 staffTabLine = \new Staff \with {
   \remove "Time_signature_engraver"
   \remove "Clef_engraver"
 } {
-  \override Staff.StaffSymbol #'line-positions = #'(0)
+  \override Staff.StaffSymbol.line-positions = #'(0)
   % Shows one horizontal line. The vertical line (simulating a bar-line) is simulated with a gridline
   \set Staff.midiInstrument = #"choir aahs"
   \key c \major
@@ -88,7 +88,7 @@ staffTabLine = \new Staff \with {
   {
     % disable the following line to see the the noteheads while writing the song
     \NoNoteHead
-    \override NoteHead #'no-ledgers = ##t
+    \override NoteHead.no-ledgers = ##t
 
     % The beam between 8th-notes is used to draw the push-line
     %How to fast write the push-lines:
@@ -158,9 +158,9 @@ AccordionTab= { \dynamicUp
   \context {
     \Staff
     \consists "Grid_point_engraver"
-    gridInterval = #(ly:make-moment 4 4) % 4/4 - tact. How many beats per bar
+    gridInterval = #(ly:make-moment 4/4) % 4/4 - tact. How many beats per bar
     % The following line has to be adjusted O-F-T-E-N.
-    \override GridPoint #'Y-extent = #'(-2 . -21)
+    \override GridPoint.Y-extent = #'(-2 . -21)
   }
   \context {
     \ChoirStaff
@@ -184,7 +184,7 @@ staffVoice = \new Staff = astaffvoice  {
 
 staffAccordionMel =
 \new Staff  \with { \remove "Clef_engraver" } {
-  \accidentalStyle "forget" %Set the accidentals (Vorzeichen) for each note,
+  \accidentalStyle forget %Set the accidentals (Vorzeichen) for each note,
   %do not remember them for the rest of the measure.
   \time 4/4
   \set Staff.instrumentName="Accordion"
@@ -196,13 +196,13 @@ staffAccordionMel =
 
 AltOn =
 #(define-music-function (parser location mag) (number?)
-  #{ \override Stem #'length = #(* 7.0 mag)
-      \override NoteHead #'font-size =
+  #{ \override Stem.length = #(* 7.0 mag)
+      \override NoteHead.font-size =
 #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #})
 
 AltOff = {
-  \revert Stem #'length
-  \revert NoteHead #'font-size
+  \revert Stem.length
+  \revert NoteHead.font-size
 }
 
 BassRhytm = {s4 s8 | c2 c2 | c2 s8 }
@@ -212,8 +212,8 @@ staffBassRhytm =
 \new Staff = staffbass \with { \remove "Clef_engraver" } {
   % This is not a RhythmicStaff  because it must be possible to append lyrics.
 
-  \override Score.GridLine #'extra-offset = #'( 13.0 . 0.0 ) % x.y
-  \override Staff.StaffSymbol #'line-positions = #'( 0 )
+  \override Score.GridLine.extra-offset = #'( 13.0 . 0.0 ) % x.y
+  \override Staff.StaffSymbol.line-positions = #'( 0 )
   % Shows one horizontal line. The vertical line (simulating a bar-line) is simulated by a grid
   % Search for 'grid' in this page to find all related functions
   \time 4/4
index 2bb83f323928c65727b3824a289536630241cf3e..86b9fba5e587f59443e9817cc0581687c66e99dd 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "headword"
@@ -23,7 +23,7 @@ Random complex notation
       \key c \minor
       <<
         {
-          \revert Stem #'direction
+          \revert Stem.direction
           \change Staff = down
           \set subdivideBeams = ##t
           g16.[
@@ -41,7 +41,7 @@ Random complex notation
           c'''32([ b''16 a''16 gis''16 g''32)]
         }
         \\
-        { s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d''] }
+        { s4 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d''] }
         \\
         { s4 \autoBeamOff d''8.. f''32  }
         \\
@@ -52,9 +52,9 @@ Random complex notation
       \clef bass
       \key c \minor
       \set subdivideBeams = ##f
-      \override Stem #'french-beaming = ##t
-      \override Beam #'beam-thickness = #0.3
-      \override Stem #'thickness = #4.0
+      \override Stem.french-beaming = ##t
+      \override Beam.beam-thickness = #0.3
+      \override Stem.thickness = #4.0
       g'16[ b16 fis16 g16]
       <<
         \makeClusters {
@@ -62,7 +62,7 @@ Random complex notation
         }
         \\
         {
-          \override Staff.Arpeggio #'arpeggio-direction = #DOWN
+          \override Staff.Arpeggio.arpeggio-direction = #DOWN
           <cis, e, gis, b, cis>4\arpeggio
         }
       >>
index 72713fe3e2b669ab4dad7d8e7624722042597f50..be7a8967d80d9988484487a719c2a8cb31b7af87 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "pitches, tweaks-and-overrides"
@@ -28,8 +28,8 @@ or the end.
 } % begin verbatim
 
 \new Staff {
-  \override Score.BreakAlignment #'break-align-orders =
-    #'#((left-edge ambitus breathing-sign clef staff-bar
+  \override Score.BreakAlignment.break-align-orders =
+    ##((left-edge ambitus breathing-sign clef staff-bar
                    key-cancellation key-signature time-signature custos)
 
         (left-edge ambitus breathing-sign clef key-cancellation
index 0966e7ceae8b29a4ab6e97318849211a67f91f84..067fbbfd2c78f72e5c0cf832808e6648fa55e80e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
@@ -22,7 +22,7 @@ by overriding the @code{'to-barline} property.
 \relative c'' {
   e4\< e2.
   e1\!
-  \override Hairpin #'to-barline = ##f
+  \override Hairpin.to-barline = ##f
   e4\< e2.
   e1\!
 }
index 7051646a03f6f8284cba70723a9920ca61d742af..c469c52e646b35898387fe5941ebf5d6772f6144 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.5"
 
 \header {
   lsrtags = "repeats"
@@ -19,7 +19,7 @@ be set using @code{doubleRepeatType}.
 
 \relative c'' {
   \repeat volta 1 { c1 }
-  \set Score.doubleRepeatType = #":|:"
+  \set Score.doubleRepeatType = #":..:"
   \repeat volta 1 { c1 }
   \set Score.doubleRepeatType = #":|.|:"
   \repeat volta 1 { c1 }
index d22a05d91d813dc2190d1e3ae44c8492015b3d31..dea361c49cbfdff667664b826d236bf709277c9f 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks"
@@ -20,6 +20,6 @@ If hairpins are too short, they can be lengthened by modifying the
 
 \relative c'' {
   c4\< c\! d\> e\!
-  \override Hairpin #'minimum-length = #5
+  \override Hairpin.minimum-length = #5
   << f1 { s4 s\< s\> s\! } >>
 }
index a518debae4ce1c18017a2079c4a23ab87bf44bf2..611057d4cbdf18d0a78a9eb968202074fca44fe4 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "repeats"
@@ -23,7 +23,7 @@ lasts one measure, which is a duration of 3/4.
 \relative c'' {
   \time 3/4
   c4 c c
-  \set Score.voltaSpannerDuration = #(ly:make-moment 3 4)
+  \set Score.voltaSpannerDuration = #(ly:make-moment 3/4)
   \repeat volta 5 { d4 d d }
   \alternative {
     {
index c4f595c816c286766bfddf9b1cbb94e5a09d67e8..ec67a11657c1a544fa30016fc2c8411984186ef9 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides, version-specific"
@@ -22,7 +22,7 @@ flageolets in the snippet. To mimic the behaviour of scripts outside a
 chord, 'add-stem-support would be required. So, the solution is to
 write the note as a chord and add the articulations inside the <...>.
 The direction will always be above, but one can tweak this via a
-\\tweak: @code{<c-\\tweak #'direction #DOWN-\\fermata^\\fermata>}
+\\tweak: @code{<c-\\tweak direction #DOWN-\\fermata^\\fermata>}
 
 "
   doctitle = "Showing the same articulation above and below a note or chord"
index 8c43c694f23763186ae62dc0c3a84c19bb73763d..a08838f8f8ac03b15539a0538e3e89c3380c526c 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "headword"
@@ -28,15 +28,15 @@ Simultaneous notes
 \layout {
   \context {
     \Score
-    \override SpacingSpanner #'base-shortest-duration =
-    #(ly:make-moment 1 18)
-    \override NonMusicalPaperColumn #'line-break-system-details =
+    \override SpacingSpanner.base-shortest-duration =
+    #(ly:make-moment 1/18)
+    \override NonMusicalPaperColumn.line-break-system-details =
     #'((alignment-distances . (12)))
   }
 }
 
 trillFlat =
-\once \override TrillSpanner #'(bound-details left text) = \markup {
+\once \override TrillSpanner.bound-details.left.text = \markup {
   \concat {
     \musicglyph #"scripts.trill"
     \translate #'(-0.5 . 1.9)
@@ -80,7 +80,7 @@ trillFlat =
     % RH voice 2
     \new Voice {
       \voiceTwo
-      \override Voice.TrillSpanner #'direction = #DOWN
+      \override Voice.TrillSpanner.direction = #DOWN
       d''4.~ \f \startTrillSpan
       d''8.~ |
       d''4.~ d''8.~ |
@@ -94,7 +94,7 @@ trillFlat =
       d''4.~ \startTrillSpan
       d''8. ~ |
       d''4.~ d''8.~ |
-      \once \override NoteColumn #'ignore-collision = ##t
+      \once \override NoteColumn.ignore-collision = ##t
       \hideNotes
       d''8. \stopTrillSpan
       s4. |
@@ -123,7 +123,7 @@ trillFlat =
     <<
       \new Voice {
         \voiceOne
-        \override Voice.TrillSpanner #'direction = #UP
+        \override Voice.TrillSpanner.direction = #UP
         f'4.~ \startTrillSpan
         f'8.~ |
         f'4.~ f'8.~ |
@@ -131,7 +131,7 @@ trillFlat =
       }
       \new Voice {
         \voiceTwo
-        \override Voice.TrillSpanner #'direction = #DOWN
+        \override Voice.TrillSpanner.direction = #DOWN
         bf8.[ bf8. bf8.] |
         bf8.[ bf8. bf8.] |
         bf8.
index 970380d2f309713380c3f6404ddd733fa5581795..760135cda9a0180aa34d08e3dbebf7353b8156f8 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "fretted-strings"
@@ -21,12 +21,12 @@ slides = {
   c'8\3(\glissando d'8\3)
   c'8\3\glissando d'8\3
   \hideNotes
-  \grace { g16\3\glissando }
+  \grace { g16\glissando }
   \unHideNotes
   c'4\3
   \afterGrace d'4\3\glissando {
   \stemDown \hideNotes
-  g16\3 }
+  g16 }
   \unHideNotes
 }
 
@@ -38,10 +38,10 @@ slides = {
   \layout {
     \context {
       \Score
-      \override Glissando #'minimum-length = #4
-      \override Glissando #'springs-and-rods =
+      \override Glissando.minimum-length = #4
+      \override Glissando.springs-and-rods =
                           #ly:spanner::set-spacing-rods
-      \override Glissando #'thickness = #2
+      \override Glissando.thickness = #2
     }
   }
 }
index 29d2685ee58c817895e031c9010f5aab40d63089..218c52f2b9094d5eb5fd35e5a6560f5abe561188 100644 (file)
@@ -1,4 +1,5 @@
 accordion-discant-symbols.ly
+accordion-registers.ly
 adding-bar-lines-to-chordnames-context.ly
 adding-drum-parts.ly
 adding-fingerings-to-tablatures.ly
index 5b6ebcb365b7b88488d16b0fe95bbccc86948ff7..6e81017f846d1341681d00a4d094468feac10a01 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.32
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 \include "catalan.ly"
 
 \header {
@@ -36,7 +36,7 @@ trompette = \relative do'' {
   \key mib \major
   \time 2/4
   R2^\markup { \italic Comodo } |
-  r8 \once \override TextScript #'padding = #2.0
+  r8 \once \override TextScript.padding = #2.0
   sib16-.^\markup {\dynamic p \italic grazioso} do-. mib( re)-. do-. sib-. |
   re8-. r8 re4->( |
   re8) do16-. re-. mib( re) do-. re-. |
index 483a17253e8a47792de399b02bebf7801f4b1fc9..0a2df88f19cde82cc0f3955837f284851c95f959 100644 (file)
@@ -3,13 +3,16 @@ adding-an-extra-staff-at-a-line-break.ly
 adding-an-extra-staff.ly
 adding-indicators-to-staves-which-get-split-after-a-break.ly
 adding-orchestral-cues-to-a-vocal-score.ly
+adding-timing-marks-to-long-glissandi.ly
 alternative-bar-numbering.ly
+centered-measure-numbers.ly
 changing-the-number-of-lines-in-a-staff.ly
 changing-the-staff-size.ly
 creating-blank-staves.ly
 creating-double-digit-fingerings.ly
 cross-staff-stems.ly
 display-bracket-with-only-one-staff-in-a-system.ly
+extending-glissandi-across-repeats.ly
 forcing-measure-width-to-adapt-to-metronomemarks-width.ly
 glissandi-can-skip-grobs.ly
 how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly
@@ -17,11 +20,13 @@ how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly
 incipit.ly
 inserting-score-fragments-above-a-staff,-as-markups.ly
 letter-tablature-formatting.ly
+making-glissandi-breakable.ly
 making-some-staff-lines-thicker-than-the-others.ly
 measure-counter.ly
 mensurstriche-layout-bar-lines-between-the-staves.ly
 nesting-staves.ly
 non-traditional-key-signatures.ly
+numbering-groups-of-measures.ly
 orchestra,-choir-and-piano-template.ly
 putting-lyrics-inside-the-staff.ly
 quoting-another-voice-with-transposition.ly
@@ -34,5 +39,6 @@ time-signature-in-parentheses.ly
 tweaking-clef-properties.ly
 use-square-bracket-at-the-start-of-a-staff-group.ly
 using-autochange-with-more-than-one-voice.ly
+vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
 volta-below-chords.ly
 volta-multi-staff.ly
index dd096fe981b1cdf7303c9bdbfa8a824e5f4d198f..dd0005c4326e9cf87e617234d6050c120c3212f0 100644 (file)
@@ -17,7 +17,6 @@ Stand-alone text may be arranged in several columns using
   doctitle = "Stand-alone two-column markup"
 } % begin verbatim
 
-
 \markup {
   \fill-line {
     \hspace #1
@@ -30,13 +29,13 @@ Stand-alone text may be arranged in several columns using
       \line { Amen. }
     }
     \hspace #2
-    \column {
-      \line { \italic { O sacred feast } }
-      \line { \italic { in which Christ is received, } }
-      \line { \italic { the memory of His Passion is renewed, } }
-      \line { \italic { the mind is filled with grace, } }
-      \line { \italic { and a pledge of future glory is given to us. } }
-      \line { \italic { Amen. } }
+    \column \italic {
+      \line { O sacred feast }
+      \line { in which Christ is received, }
+      \line { the memory of His Passion is renewed, }
+      \line { the mind is filled with grace, }
+      \line { and a pledge of future glory is given to us. }
+      \line { Amen. }
     }
     \hspace #1
   }
index 1e8806041290ec7f2ba509fe8f2187e1be6f51e0..b5960df4974eb6434ea8de750ac3d86a0a36c8b1 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "fretted-strings"
@@ -24,7 +24,7 @@ example.
     \tabFullNotation
     g16 b d g b d g b
     \stemDown
-    \override Beam #'concaveness = #10000
+    \override Beam.concaveness = #10000
     g,,16 b d g b d g b
   }
 }
index fcc096e5b20bd91535f79582b9b7a875589d6875..0f1ea5e818083f822761679b8294ce1b7139aaec 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "contemporary-notation, rhythms"
@@ -38,10 +38,10 @@ the different notations.
   g'16[^\markup { beams over rests } f' r d']
 
   % N.B. use Score.Stem to set for the whole score.
-  \override Staff.Stem #'stemlet-length = #0.75
+  \override Staff.Stem.stemlet-length = #0.75
 
   c'16[^\markup { stemlets over rests } d' r f']
   g'16[^\markup { stemlets and no rests } f'
-  \once \override Rest #'transparent = ##t
+  \once \hide Rest
   r16 d']
 }
index 68779a8b4d36f669a3c8ae962e85da812fbd6800..238479a41329370478f3e1a29f470ea645f83f65 100644 (file)
@@ -4,7 +4,7 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.28
+%% Note: this file works from version 2.16.0
 \version "2.16.0"
 
 \header {
index 9e34f1ed6471617738690ebc92def167e1e5d95a..726e69b778ac901b19d6f6c8e7e59d995fa4dc7b 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.20
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, text, fretted-strings, tweaks-and-overrides, scheme-language"
@@ -22,10 +22,10 @@ series of notes is supposed to be played all on the same string.
 stringNumberSpanner =
 #(define-music-function (parser location StringNumber) (string?)
   #{
-    \override TextSpanner #'style = #'solid
-    \override TextSpanner #'font-size = #-5
-    \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
-    \override TextSpanner #'(bound-details left text) = \markup { \circle \number #StringNumber }
+    \override TextSpanner.style = #'solid
+    \override TextSpanner.font-size = #-5
+    \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
+    \override TextSpanner.bound-details.left.text = \markup { \circle \number #StringNumber }
   #})
 
 
index 41ffdce5400e46d5cafb7a056d8db28cbdcc4bb3..e7080e65a5898334dc02a278699e15a53336c13d 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "rhythms"
@@ -34,12 +34,12 @@ in this snippet. Also, when @code{baseMoment} is changed,
   c32[ c c c c c c c]
 
   % Set beam sub-group length to an eighth note
-  \set baseMoment = #(ly:make-moment 1 8)
+  \set baseMoment = #(ly:make-moment 1/8)
   \set beatStructure = #'(2 2 2 2)
   c32[ c c c c c c c]
 
   % Set beam sub-group length to a sixteenth note
-  \set baseMoment = #(ly:make-moment 1 16)
+  \set baseMoment = #(ly:make-moment 1/16)
   \set beatStructure = #'(4 4 4 4)
   c32[ c c c c c c c]
 }
index a37404cadf1249cc3d2a6fed9bb1ebb704f3fa48..0ecae8edd5560507be14ac459186822006d4886e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "simultaneous-notes, tweaks-and-overrides"
@@ -25,7 +25,7 @@ used with care.
 } % begin verbatim
 
 
-ignore = \override NoteColumn #'ignore-collision = ##t
+ignore = \override NoteColumn.ignore-collision = ##t
 
 \relative c' {
   <<
index c10bd2fa9eac332be659a1b6dfae3dc8e85e849b..920987ba49c490db54ba9b7d20c992fda21accda 100644 (file)
@@ -1,4 +1,5 @@
 accordion-discant-symbols.ly
+accordion-registers.ly
 adding-indicators-to-staves-which-get-split-after-a-break.ly
 ancient-fonts.ly
 breathing-signs.ly
index 7e72565d66807b43c8eda48db58818d24b762cde..f0e653afb06d025c075792653374de1e4e91de80 100644 (file)
@@ -1,2 +1,3 @@
 combining-two-parts-on-the-same-staff.ly
 entering-several-tuplets-using-only-one--times-command.ly
+vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
index 4254c582363c7a4d9c5f6189ae71a55c672119d5..0bcd3763efa7bbb4885d5a2031b11a1fc70c536d 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.28"
 
 \header {
   lsrtags = "headword"
@@ -27,8 +27,8 @@ Text headword
 \layout {
   \context {
     \Score
-    \override SpacingSpanner #'base-shortest-duration =
-    #(ly:make-moment 1 20)
+    \override SpacingSpanner.base-shortest-duration =
+    #(ly:make-moment 1/20)
   }
 }
 
@@ -40,7 +40,7 @@ Text headword
     \key af \major
     \time 3/4
 
-    \once \override TextScript #'staff-padding = #4
+    \once \override TextScript.staff-padding = #4
     <c'' af'>4. (
     _ \markup { \dynamic p \italic { con amabilità } }
     <af' ef'>8 )
@@ -66,7 +66,7 @@ Text headword
 
         |
 
-        \once \override TextScript #'staff-padding = #4
+        \once \override TextScript.staff-padding = #4
         ef''8. (
         _ \markup { \italic { tranqu. } }
         d''16 )
@@ -90,21 +90,20 @@ Text headword
     >>
 
     \oneVoice
-    \once \override TextScript #'staff-padding = #4
+    \once \override TextScript.staff-padding = #4
     df''32
     _ \markup { \italic dolce }
     c''32
     df''32
     ef''32
-    \acciaccatura { df''[ ef'' ] }
+    \acciaccatura { df'' ef''  }
     f''8
     ef''16
     df''16
 
     |
     \break
-    \overrideProperty "Score.NonMusicalPaperColumn"
-    #'line-break-system-details #'((alignment-distances . (12)))
+    \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (12)))
 
     c''4. (
     ^ \markup \italic { cantabile, con intimissimo sentimento,
@@ -183,9 +182,9 @@ Text headword
 
     |
 
-    \override Staff.SustainPedalLineSpanner #'outside-staff-priority = #1000
-    \override Staff.SustainPedalLineSpanner #'staff-padding = #7
-    \once \override TextScript #'padding = #2
+    \override Staff.SustainPedalLineSpanner.outside-staff-priority = #1000
+    \override Staff.SustainPedalLineSpanner.staff-padding = #7
+    \once \override TextScript.padding = #2
     af16 \sustainOn
     ^ \markup \italic { non staccato }
     _ \markup \italic { molto \concat { \dynamic { p } , } sempre tranquillo
@@ -219,7 +218,7 @@ Text headword
 
     |
 
-    \override Staff.SustainPedalLineSpanner #'staff-padding = #4
+    \override Staff.SustainPedalLineSpanner.staff-padding = #4
     df'16 \sustainOn
     <bf' g' ef'>16
     <bf' g' ef'>16
index 9076d5318b76a21d8f81eee5cf7734d216017d80..e89b570d89d516fea4e4fbf2cfef7d89bfee7771 100644 (file)
@@ -1,7 +1,6 @@
 adding-the-current-date-to-a-score.ly
 adjusting-lyrics-vertical-spacing.ly
 aligning-and-centering-instrument-names.ly
-aligning-marks-with-various-notation-objects.ly
 aligning-objects-created-with-the--mark-command.ly
 aligning-syllables-with-melisma.ly
 blanking-staff-lines-using-the--whiteout-command.ly
index f7acbae1f183a1847f0ffe94f509a1d45e77d49c..5eebaacc095b7eb687dc1da3a415c1d656040409 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "specific-notation, staff-notation, tweaks-and-overrides"
@@ -18,7 +18,7 @@ Another way to put the time signature in parenthesis
 
 
 \relative c'' {
-  \override Staff.TimeSignature #'stencil = #(lambda (grob)
+  \override Staff.TimeSignature.stencil = #(lambda (grob)
     (parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1 ))
   \time 2/4
   a4 b8 c
index 6d792fb6c15de875f13c628d34401e8898f6cb0a..257034d9599675551e7bd4a5d142a1ecda9c392d 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "specific-notation, staff-notation, tweaks-and-overrides"
@@ -18,7 +18,7 @@ The time signature can be enclosed within parentheses.
 
 
 \relative c'' {
-  \override Staff.TimeSignature #'stencil = #(lambda (grob)
+  \override Staff.TimeSignature.stencil = #(lambda (grob)
     (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1))
   \time 2/4
   a4 b8 c
index 188484760bd0b869b7fb50602835a140df98be4a..bee629dc693d0b3daddfaf3ed1190da66668485b 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -12,9 +12,9 @@
   texidoc = "
 Sometimes, a time signature should not print the whole fraction (e.g.
 7/4), but only the numerator (7 in this case). This can be easily done
-by using @code{\\override Staff.TimeSignature #'style = #'single-digit}
+by using @code{\\override Staff.TimeSignature.style = #'single-digit}
 to change the style permanently. By using @code{\\revert
-Staff.TimeSignature #'style}, this setting can be reversed. To apply
+Staff.TimeSignature.style}, this setting can be reversed. To apply
 the single-digit style to only one time signature, use the
 @code{\\override} command and prefix it with a @code{\\once}.
 
@@ -27,17 +27,17 @@ the single-digit style to only one time signature, use the
   \time 3/4
   c4 c c
   % Change the style permanently
-  \override Staff.TimeSignature #'style = #'single-digit
+  \override Staff.TimeSignature.style = #'single-digit
   \time 2/4
   c4 c
   \time 3/4
   c4 c c
   % Revert to default style:
-  \revert Staff.TimeSignature #'style
+  \revert Staff.TimeSignature.style
   \time 2/4
   c4 c
   % single-digit style only for the next time signature
-  \once \override Staff.TimeSignature #'style = #'single-digit
+  \once \override Staff.TimeSignature.style = #'single-digit
   \time 5/4
   c4 c c c c
   \time 2/4
index 8692f345bffacb1bde7a47a636973847b5e0b7ed..cebe3d2876ecbe555998b7ea0f2c97af67a14426 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   lsrtags = "ancient-notation, specific-notation, tweaks-and-overrides, workaround"
@@ -26,10 +26,10 @@ global = {
   \key g \major
   \time 4/4
   %make the staff lines invisible on staves
-  \override Staff.BarLine #'transparent = ##t
+  \hide Staff.BarLine
   \skip 1*8 % the actual music
   % let finis bar go through all staves
-  \override Staff.BarLine #'transparent = ##f
+  \override Staff.BarLine.transparent = ##f
   % finis bar
   \bar "|."
 }
@@ -42,7 +42,7 @@ discantusNotes = {
     c'4 e'4.( d'8 c' b |
     a4) b a2 |
     b4.( c'8 d'4) c'4 |
-    \once \override NoteHead #'transparent = ##t c'1 |
+    \once \hide NoteHead c'1 |
     b\breve |
   }
 }
@@ -64,7 +64,7 @@ altusNotes = {
     a2 g4 e |
     fis g4.( fis16 e fis4) |
     g1 |
-    \once \override NoteHead #'transparent = ##t g1 |
+    \once \hide NoteHead g1 |
     g\breve |
   }
 }
@@ -84,7 +84,7 @@ tenorNotes = {
     R1 |
     R1 |
     r2 d'2. d'4 b e' | % two bars
-    \once \override NoteHead #'transparent = ##t e'1 |
+    \once \hide NoteHead e'1 |
     d'\breve |
   }
 }
@@ -103,7 +103,7 @@ bassusNotes = {
     R1 |
     R1 |
     g2. e4 |
-    \once \override NoteHead #'transparent = ##t e1 |
+    \once \hide NoteHead e1 |
     g\breve |
   }
 }
@@ -118,9 +118,9 @@ incipitDiscantus = \markup {
   \score {
     {
       \set Staff.instrumentName = #"Discantus "
-      \override NoteHead #'style = #'neomensural
-      \override Rest #'style = #'neomensural
-      \override Staff.TimeSignature #'style = #'neomensural
+      \override NoteHead.style = #'neomensural
+      \override Rest.style = #'neomensural
+      \override Staff.TimeSignature.style = #'neomensural
       \cadenzaOn
       \clef "neomensural-c1"
       \key f \major
@@ -143,9 +143,9 @@ incipitAltus = \markup {
   \score {
     {
       \set Staff.instrumentName = #"Altus "
-      \override NoteHead #'style = #'neomensural
-      \override Rest #'style = #'neomensural
-      \override Staff.TimeSignature #'style = #'neomensural
+      \override NoteHead.style = #'neomensural
+      \override Rest.style = #'neomensural
+      \override Staff.TimeSignature.style = #'neomensural
       \cadenzaOn
       \clef "neomensural-c3"
       \key f \major
@@ -169,9 +169,9 @@ incipitTenor = \markup {
   \score {
     {
       \set Staff.instrumentName = #"Tenor  "
-      \override NoteHead #'style = #'neomensural
-      \override Rest #'style = #'neomensural
-      \override Staff.TimeSignature #'style = #'neomensural
+      \override NoteHead.style = #'neomensural
+      \override Rest.style = #'neomensural
+      \override Staff.TimeSignature.style = #'neomensural
       \cadenzaOn
       \clef "neomensural-c4"
       \key f \major
@@ -197,9 +197,9 @@ incipitBassus = \markup {
   \score {
     {
       \set Staff.instrumentName = #"Bassus  "
-      \override NoteHead #'style = #'neomensural
-      \override Rest #'style = #'neomensural
-      \override Staff.TimeSignature #'style = #'neomensural
+      \override NoteHead.style = #'neomensural
+      \override Rest.style = #'neomensural
+      \override Staff.TimeSignature.style = #'neomensural
       \cadenzaOn
       \clef "bass"
       \key f \major
@@ -259,13 +259,13 @@ incipitBassus = \markup {
     \context {
       \Score
       % no bars in staves
-      \override BarLine #'transparent = ##t
+      \hide BarLine
     }
     % the next three instructions keep the lyrics between the bar lines
     \context {
       \Lyrics
       \consists "Bar_engraver"
-      \override BarLine #'transparent = ##t
+      \hide BarLine
     }
     \context {
       \StaffGroup
@@ -274,7 +274,7 @@ incipitBassus = \markup {
     \context {
       \Voice
       % no slurs
-      \override Slur #'transparent = ##t
+      \hide Slur
       % Comment in the below "\remove" command to allow line
       % breaking also at those barlines where a note overlaps
       % into the next bar.  The command is commented out in this
index d4adb18f97bfdc3c986d28404e7acfcb3abb505e..a43faaca38bdd9a3d6d57e21e2d41674bdc70033 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.18"
 
 \header {
   lsrtags = "pitches, staff-notation, tweaks-and-overrides"
 The command @code{\\clef \"treble_8\"} is equivalent to setting
 @code{clefGlyph}, @code{clefPosition} (which controls the vertical
 position of the clef), @code{middleCPosition} and
-@code{clefOctavation}. A clef is printed when any of the properties
+@code{clefTransposition}. A clef is printed when any of the properties
 except @code{middleCPosition} are changed.
 
 
 Note that changing the glyph, the position of the clef, or the
 octavation does not in itself change the position of subsequent notes
 on the staff: the position of middle C must also be specified to do
-this. The positional parameters are relative to the staff center line,
-positive numbers displacing upwards, counting one for each line and
-space. The @code{clefOctavation} value would normally be set to 7, -7,
-15 or -15, but other values are valid.
+this. In order to get key signatures on the correct staff lines,
+@code{middleCClefPosition} must also be set.  The positional parameters
+are relative to the staff center line, positive numbers displacing
+upwards, counting one for each line and space. The
+@code{clefTransposition} value would normally be set to 7, -7, 15 or -15,
+but other values are valid.
 
 
 When a clef change takes place at a line break the new clef symbol is
@@ -43,36 +45,44 @@ line, they do not.
   doctitle = "Tweaking clef properties"
 } % begin verbatim
 
-
 \layout { ragged-right = ##t }
-
 {
   % The default treble clef
+  \key f \major
   c'1
   % The standard bass clef
   \set Staff.clefGlyph = #"clefs.F"
   \set Staff.clefPosition = #2
   \set Staff.middleCPosition = #6
+  \set Staff.middleCClefPosition = #6
+  \key g \major
   c'1
   % The baritone clef
   \set Staff.clefGlyph = #"clefs.C"
   \set Staff.clefPosition = #4
   \set Staff.middleCPosition = #4
+  \set Staff.middleCClefPosition = #4
+  \key f \major
   c'1
   % The standard choral tenor clef
   \set Staff.clefGlyph = #"clefs.G"
   \set Staff.clefPosition = #-2
-  \set Staff.clefOctavation = #-7
+  \set Staff.clefTransposition = #-7
   \set Staff.middleCPosition = #1
+  \set Staff.middleCClefPosition = #1
+  \key f \major
   c'1
   % A non-standard clef
   \set Staff.clefPosition = #0
-  \set Staff.clefOctavation = #0
+  \set Staff.clefTransposition = #0
   \set Staff.middleCPosition = #-4
+  \set Staff.middleCClefPosition = #-4
+  \key g \major
   c'1 \break
 
   % The following clef changes do not preserve
-  % the normal relationship between notes and clefs:
+  % the normal relationship between notes, key signatures
+  % and clefs:
 
   \set Staff.clefGlyph = #"clefs.F"
   \set Staff.clefPosition = #2
@@ -81,9 +91,9 @@ line, they do not.
   c'1
   \set Staff.clefGlyph = #"clefs.C"
   c'1
-  \set Staff.clefOctavation = #7
+  \set Staff.clefTransposition = #7
   c'1
-  \set Staff.clefOctavation = #0
+  \set Staff.clefTransposition = #0
   \set Staff.clefPosition = #0
   c'1
 
index 2afa28fc4df7324e57230f2e6351419ed18ca73c..b038e101b17e3a1bd989036d8a0d116b04d01997 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.28"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -27,8 +27,8 @@ up, and changes the default note heads to crosses.
     $(add-grace-property 'Voice 'NoteHead 'style 'cross)
     \new Voice {
        \acciaccatura { f16 } g4
-       \grace { d16[ e] } f4
-       \appoggiatura { f,32[ g a] } e2
+       \grace { d16 e } f4
+       \appoggiatura { f,32 g a } e2
     }
   }
 }
index 8ceb9fa8ac236c789a678ce8512ec261844bf242..2e71f5f6e3a59b32d4f57fb93421472c766275a8 100644 (file)
@@ -1,3 +1,6 @@
+adding-an-ottava-marking-to-a-single-voice.ly
+adding-links-to-objects.ly
+adding-timing-marks-to-long-glissandi.ly
 adjusting-grace-note-spacing.ly
 altering-the-length-of-beamed-stems.ly
 alternative-bar-numbering.ly
@@ -33,6 +36,7 @@ drawing-boxes-around-grobs.ly
 drawing-circles-around-various-objects.ly
 dynamics-custom-text-spanner-postfix.ly
 dynamics-text-spanner-postfix.ly
+extending-glissandi-across-repeats.ly
 fine-tuning-pedal-brackets.ly
 forcing-horizontal-shift-of-notes.ly
 fret-diagrams-explained-and-developed.ly
@@ -47,11 +51,13 @@ inserting-a-caesura.ly
 keep-change-clefs-full-sized.ly
 line-arrows.ly
 making-an-object-invisible-with-the-transparent-property.ly
+making-glissandi-breakable.ly
 manually-controlling-beam-positions.ly
 mensurstriche-layout-bar-lines-between-the-staves.ly
 moving-dotted-notes-in-polyphony.ly
 moving-slur-positions-vertically.ly
 nesting-staves.ly
+overriding-articulations-of-destinct-type.ly
 percent-repeat-count-visibility.ly
 positioning-arpeggios.ly
 positioning-multi-measure-rests.ly
index 17ec6b723e2644e2a85a7b261a92f529d47e2fe1..6cc02b677d2b580cf2caf29708c8e82d3af7a543 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.30
+\version "2.17.30"
 
 \header {
   lsrtags = "headword"
@@ -51,12 +52,10 @@ ub         = \markup { \musicglyph #"scripts.upbow" }
 udb        = \markup { \line { \musicglyph #"scripts.upbow" " " \musicglyph #"scripts.downbow" } }
 udbetc     = \markup { \line { \musicglyph #"scripts.upbow" " " \musicglyph #"scripts.downbow" "..." } }
 
-fermaTa    = \markup \musicglyph #"scripts.ufermata"
-
 accel   = \markup \tiny \italic \bold "accel..."
 ritar   = \markup \tiny \italic \bold "ritar..."
 
-ignore     = \override NoteColumn #'ignore-collision = ##t
+ignore     = \override NoteColumn.ignore-collision = ##t
 
 
 %%
@@ -76,9 +75,9 @@ quatre         = \markup \teeny "IV"
 %% Shifting Notes
 %%
 
-shift      = \once \override NoteColumn #'force-hshift = #0.9
-shifta     = \once \override NoteColumn #'force-hshift = #1.2
-shiftb     = \once \override NoteColumn #'force-hshift = #1.4
+shift      = \once \override NoteColumn.force-hshift = #0.9
+shifta     = \once \override NoteColumn.force-hshift = #1.2
+shiftb     = \once \override NoteColumn.force-hshift = #1.4
 
 
 %%
@@ -86,21 +85,21 @@ shiftb     = \once \override NoteColumn #'force-hshift = #1.4
 %%
 
 % aniente        = "a niente"
-aniente        = \once \override Hairpin #'circled-tip = ##t
+aniente        = \once \override Hairpin.circled-tip = ##t
 
 
 %%
 %% Tuplets
 %%
 
-tupletbp       = \once \override Staff.TupletBracket #'padding = #2.25
+tupletbp       = \once \override Staff.TupletBracket.padding = #2.25
 
 
 %%
 %% Flag [Note Head - Stem]
 %%
 
-noflag         = \once \override Flag #'style = #'no-flag
+noflag         = \once \override Flag.style = #'no-flag
 
 %%%
 %%% Functions
@@ -126,9 +125,9 @@ ViolinSolo = \relative c' {
   \voiceOne
 
   \set Score.markFormatter     =  #format-mark-box-numbers
-  \override Score.VoltaBracket #'font-name                  = #"sans"
-  \override Score.VoltaBracket #'extra-offset               = #'(0 . 1)
-  \override SpacingSpanner     #'uniform-stretching         = ##t
+  \override Score.VoltaBracket.font-name                  = #"sans"
+  \override Score.VoltaBracket.extra-offset               = #'(0 . 1)
+  \override SpacingSpanner.uniform-stretching         = ##t
 
 
   %% Measure 1
@@ -137,7 +136,7 @@ ViolinSolo = \relative c' {
   r2 ^\markup \colmark { \italic "fatigué" " " \bold "lentement"} r4 r r8
   <<
     { \shift d2 \glissando ^\markup \colmark { \quatre \dubetc \svib } \shifta e1 } \\
-    { d2 \open \mf \< ~ \aniente d1  \! \> r4 r ^\markup \colmark { " " \fermaTa } \! }
+    { d2 \open \mf \< ~ \aniente d1  \! \> r4 r ^\markup \colmark { " " \fermata } \! }
   >>
 
 
@@ -146,7 +145,7 @@ ViolinSolo = \relative c' {
   \set Score.repeatCommands = #'((volta "1) n.      2) s.p."))
   <<
     { \shift d2 \glissando ^\markup \colmark { \quatre \udbetc } \shifta e1 } \\
-    { d2 \open \mf \< ~ d1 \! \> ~ d4 ^\markup \colmark { " " \fermaTa } \! }
+    { d2 \open \mf \< ~ d1 \! \> ~ d4 ^\markup \colmark { " " \fermata } \! }
   >>
   \set Score.repeatCommands = #'((volta #f))
 
@@ -163,22 +162,22 @@ ViolinSolo = \relative c' {
   \time 4/4
   \stemUp
   \tupletDown
-  \times 2/3 { d4 ^\markup \colmark { \quatre \db \accel } d d }
-  \times 2/3 { d4 ^\markup \colmark { " " \db " " \sulp } d d }
+  \tuplet 3/2 { d4 ^\markup \colmark { \quatre \db \accel } d d }
+  \tuplet 3/2 { d4 ^\markup \colmark { " " \db " " \sulp } d d }
 
 
 
   %% Measure 5
   \time 5/4
-  \tupletbp \times 2/3 { d8 \mf \< ^\markup \colmark { \quatre \db \norm } d _\open d }
-  \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db \sulp } d _\open d }
-  \tupletbp \times 2/3 { d16 ^\markup \colmark { " " \db \norm } d _\open d d d _\open d }
+  \tupletbp \tuplet 3/2 { d8 \mf \< ^\markup \colmark { \quatre \db \norm } d _\open d }
+  \tupletbp \tuplet 3/2 { d8 ^\markup \colmark { " " \db \sulp } d _\open d }
+  \tupletbp \tuplet 3/2 { d16 ^\markup \colmark { " " \db \norm } d _\open d d d _\open d }
   d2 \ff ^\markup \colmark { " " \pvib } \>
 
 
   %% Measure 6
   \time 5/8
-  \once \override Beam #'grow-direction = #RIGHT  % \featherDurations #(ly:make-moment 2 3)
+  \once \override Beam.grow-direction = #RIGHT  % \featherDurations #(ly:make-moment 2/3)
   { d16 \staccato
     [ d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato]
   }
@@ -187,11 +186,11 @@ ViolinSolo = \relative c' {
 
   %% Measure 7
   \time 7/4
-  \tupletbp \times 2/3 { d16 ^\markup \colmark { \quatre } d _\open d d d _\open d }
-  \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db } d _\open d }
-  \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db " " \sulp } d _\open d }
-  \times 2/3 { d4 ^\markup \colmark { \quatre \db \ritar \norm } d d }
-  \times 2/3 { d4 ^\markup \colmark { " " \db " " \sulp } d d \ppp ~ }
+  \tupletbp \tuplet 3/2 { d16 ^\markup \colmark { \quatre } d _\open d d d _\open d }
+  \tupletbp \tuplet 3/2 { d8 ^\markup \colmark { " " \db } d _\open d }
+  \tupletbp \tuplet 3/2 { d8 ^\markup \colmark { " " \db " " \sulp } d _\open d }
+  \tuplet 3/2 { d4 ^\markup \colmark { \quatre \db \ritar \norm } d d }
+  \tuplet 3/2 { d4 ^\markup \colmark { " " \db " " \sulp } d d \ppp ~ }
 
 
   %% Measure 8
@@ -216,12 +215,12 @@ ViolinSolo = \relative c' {
 \score {
 
   <<
-    \relative <<
+    \relative c' <<
       \new Staff \ViolinSolo
     >>
 
-    \override Score.Rest #'transparent = ##t
-    \set Score.defaultBarType          = "empty"
+    \hide Score.Rest
+    \set Score.defaultBarType          = "-"
   >>
 
   \layout  {
diff --git a/Documentation/snippets/using-a-tick-as-the-breath-mark-symbol.ly b/Documentation/snippets/using-a-tick-as-the-breath-mark-symbol.ly
new file mode 100644 (file)
index 0000000..27c8049
--- /dev/null
@@ -0,0 +1,33 @@
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
+
+\header {
+  lsrtags = "expressive-marks"
+
+  texidoc = "
+Vocal and wind music frequently uses a tick mark as a breathing sign.  This
+indicates a breath that subtracts a little time from the previous note rather
+than causing a short pause, which is indicated by the comma breath mark.  The
+mark can be moved up a little to take it away from the stave.
+"
+  doctitle = "Using a tick as the breath mark symbol"
+} % begin verbatim
+
+
+\relative c'' {
+  c2
+  \breathe
+  d2
+  \override BreathingSign.Y-offset = #2.6
+  \override BreathingSign.text =
+    \markup { \musicglyph #"scripts.tickmark" }
+  c2
+  \breathe
+  d2
+}
index b037233ba4f45cb10638fa8726a75340f81e2d98..3338586384e5c4cf501bda9191a73f166515aafa 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -29,12 +29,12 @@ testnotes = {
   \time 2/4
   \testnotes
 
-  \override Flag #'stencil = #modern-straight-flag
+  \override Flag.stencil = #modern-straight-flag
   \testnotes
 
-  \override Flag #'stencil = #old-straight-flag
+  \override Flag.stencil = #old-straight-flag
   \testnotes
 
-  \revert Flag #'stencil
+  \revert Flag.stencil
   \testnotes
 }
index c5bcb7e88dc1a8f88346248faa83663a7c2a99ce..a348603f9abb305b1c98045b939d4dc6cf3a57b2 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.15.15
-\version "2.16.0"
+%% Note: this file works from version 2.17.6
+\version "2.17.6"
 
 \header {
   lsrtags = "rhythms"
@@ -20,6 +20,6 @@ other situations.
 
 
 \relative c'' {
-  \override Flag #'stroke-style = #"grace"
+  \override Flag.stroke-style = #"grace"
   c8( d2) e8( f4)
 }
index 6b8c9f468eaccb859b7f3e98e18631e4238041b2..c2e468501521a9c768dd4a8745367e5adfe3dc76 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "devel, scheme-language, tweaks-and-overrides"
@@ -68,10 +68,10 @@ Example console output:
 
 \relative c' {
   %% display grobs for each note head:
-  %\override NoteHead #'before-line-breaking = #display-grobs
+  %\override NoteHead.before-line-breaking = #display-grobs
   <c
   %% or just for one:
-  \tweak #'before-line-breaking #display-grobs
+  \tweak before-line-breaking #display-grobs
   es
   g>1\arpeggio
 }
index b732903167dac41358ad21e98853a408ae0b31bf..976387a0d1c36e334f56bd647e01f1c7c8de355a 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, really-cool, scheme-language, tweaks-and-overrides"
@@ -34,12 +34,12 @@ parallelogram =
     (cons 0 1.3125)
     (cons -.75 .75))
 
-myNoteHeads = \override NoteHead #'stencil = \parallelogram
-normalNoteHeads = \revert NoteHead #'stencil
+myNoteHeads = \override NoteHead.stencil = \parallelogram
+normalNoteHeads = \revert NoteHead.stencil
 
 \relative c'' {
   \myNoteHeads
   g4 d'
   \normalNoteHeads
-  <f, \tweak #'stencil \parallelogram b e>4 d
+  <f, \tweak stencil \parallelogram b e>4 d
 }
index 43540003dc6d610b2b41d4d4934f001312e460c7..f6bb8ed356c507fc2b44814b08ce8f478e7b0374 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "really-simple, tweaks-and-overrides"
@@ -22,9 +22,9 @@ Here are some examples of available tweaks.
   \time 2/4
   \set fingeringOrientations = #'(right)
   <
-    \tweak #'font-size #3 c
-    \tweak #'color #red d-\tweak #'font-size #8 -4
-    \tweak #'style #'cross g
-    \tweak #'duration-log #2 a
+    \tweak font-size #3 c
+    \tweak color #red d-\tweak font-size #8 -4
+    \tweak style #'cross g
+    \tweak duration-log #2 a
   >2
 }
index 70c0a834237ed643a5574034f1a7b53548f38b3b..2e9f1a32431d1c8614ea4cb84e9f71f4229702df 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "editorial-annotations, expressive-marks"
@@ -30,10 +30,10 @@ is not masked.
 } % begin verbatim
 
 {
-  \override Score.StaffSymbol #'layer = #4
-  \override Staff.TimeSignature #'layer = #3
+  \override Score.StaffSymbol.layer = #4
+  \override Staff.TimeSignature.layer = #3
   b'2 b'~
-  \once \override Staff.TimeSignature #'whiteout = ##t
+  \once \override Staff.TimeSignature.whiteout = ##t
   \time 3/4
   b' r4
 }
diff --git a/Documentation/snippets/vertical-aligned-staffgroups-without-connecting-systemstartbar.ly b/Documentation/snippets/vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
new file mode 100644 (file)
index 0000000..6610200
--- /dev/null
@@ -0,0 +1,350 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.30"
+
+\header {
+  lsrtags = "paper-and-layout, staff-notation, syntax-and-expressions"
+
+  texidoc = "
+This snippet shows how to achieve vertically aligned StaffGroups with a
+SystemStartBar for each StaffGroup, but without connecting them.
+
+"
+  doctitle = "Vertical aligned StaffGroups without connecting SystemStartBar"
+} % begin verbatim
+
+% by Thomas Morley
+
+#(set-global-staff-size 18)
+
+\paper {
+  indent = 0
+  ragged-right = ##f
+  print-all-headers = ##t
+}
+
+\layout {
+  \context {
+    \Staff
+    \consists "Mark_engraver"
+    \override RehearsalMark.self-alignment-X = #LEFT
+  }
+  \context {
+    \StaffGroup
+    systemStartDelimiterHierarchy =
+      #'(SystemStartBrace (SystemStartBracket a b))
+  }
+  \context {
+    \Score
+    \override SystemStartBrace.style = #'bar-line
+    \omit SystemStartBar
+    \override SystemStartBrace.padding = #-0.1
+    \override SystemStartBrace.thickness = #1.6
+    \remove "Mark_engraver"
+    \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #15
+  }
+}
+
+%%%% EXAMPLE
+
+txt =
+\lyricmode {
+  Wer4 nur den lie -- ben Gott läßt wal2 -- ten4
+  und4 hof -- fet auf ihn al -- le Zeit2.
+}
+
+% First StaffGroup "exercise"
+
+eI =
+\relative c' {
+        \mark \markup {
+                \bold Teacher:
+                This is a simple setting of the choral. Please improve it.
+                }
+        \key a \minor
+        \time 4/4
+        \voiceOne
+
+        \partial 4
+        e4
+        a b c b
+        a b gis2
+        e4\fermata g! g f
+        e a a gis
+        a2.\fermata
+        \bar ":|."
+}
+
+eII =
+\relative c' {
+        \key a \minor
+        \time 4/4
+        \voiceTwo
+        \partial 4
+        c4
+        e e e gis
+        a f e2
+        b4 b d d
+        c c d d
+        c2.
+        \bar ":|."
+}
+
+eIII =
+\relative c' {
+        \key a \minor
+        \time 4/4
+        \clef bass
+        \voiceOne
+
+        \partial 4
+        a4
+        c b a b
+        c d b2
+        gis4 g g b
+        c a f e
+        e2.
+}
+
+eIV =
+\relative c' {
+        \key a \minor
+        \time 4/4
+        \clef bass
+        \voiceTwo
+
+        \partial 4
+        a,4
+        a' gis a e
+        a, d e2
+        e,4\fermata e' b g
+        c f d e
+        a,2.\fermata
+        \bar ":|."
+}
+
+exercise =
+\new StaffGroup = "exercise"
+<<
+
+  \new Staff
+    <<
+      \new Voice \eI
+      \new Voice \eII
+    >>
+
+  \new Lyrics \txt
+
+  \new Staff
+    <<
+      \new Voice \eIII
+      \new Voice \eIV
+    >>
+>>
+
+% Second StaffGRoup "simple Bach"
+
+sbI =
+\relative c' {
+        \mark \markup { \bold" Pupil:" Here's my version! }
+        \key a \minor
+        \time 4/4
+        \voiceOne
+
+        \partial 4
+        e4
+        a b c b
+        a b gis2
+        e4\fermata g! g f
+        e a a gis
+        a2.\fermata
+        \bar ":|."
+}
+
+sbII =
+\relative c' {
+        \key a \minor
+        \time 4/4
+        \voiceTwo
+        \partial 4
+        c8 d
+        e4 e e8 f g4
+        f f e2
+        b4 b8 c d4 d
+        e8 d c4 b8 c d4
+        c2.
+        \bar ":|."
+}
+
+sbIII =
+\relative c' {
+        \key a \minor
+        \time 4/4
+        \clef bass
+        \voiceOne
+
+        \partial 4
+        a8 b
+        c4 b a b8 c
+        d4 d8 c b2
+        gis4 g g8 a b4
+        b a8 g f4 e
+        e2.
+}
+
+sbIV =
+\relative c' {
+        \key a \minor
+        \time 4/4
+        \clef bass
+        \voiceTwo
+
+        \partial 4
+        a,4
+        a' gis a e
+        f8 e d4 e2
+        e,4\fermata e' b a8 g
+        c4 f8 e d4 e
+        a,2.\fermata
+        \bar ":|."
+}
+
+simpleBach =
+\new StaffGroup = "simple Bach"
+<<
+
+  \new Staff
+    <<
+      \new Voice \sbI
+      \new Voice \sbII
+    >>
+
+  \new Lyrics \txt
+
+  \new Staff
+    <<
+      \new Voice \sbIII
+      \new Voice \sbIV
+    >>
+>>
+
+% Third StaffGroup "chromatic Bach"
+
+cbI =
+\relative c' {
+        \mark \markup {
+                \bold "Teacher:"
+                \column {
+                        "Well, you simply copied and transposed a version of J.S.Bach."
+                        "Do you know this one?"
+                }
+        }
+        \key a \minor
+        \time 4/4
+        \voiceOne
+
+        \partial 4
+        e4
+        a b c b
+        a b gis4. fis8
+        e4\fermata g! g f
+        e a a8 b gis4
+        a2.\fermata
+        \bar ":|."
+}
+
+cbII =
+\relative c' {
+        \key a \minor
+        \time 4/4
+        \voiceTwo
+        \partial 4
+        c8 d
+        e4 e e8 fis gis4
+        a8 g! f!4 e2
+        b4 e e d
+        d8[ cis] d dis e fis e4
+        e2.
+        \bar ":|."
+}
+
+cbIII =
+\relative c' {
+        \key a \minor
+        \time 4/4
+        \clef bass
+        \voiceOne
+
+        \partial 4
+        a8 b
+        c[ b] a gis8 a4 d,
+        e8[ e'] d c b4. a8
+        gis4 b c d8 c
+        b[ a] a b c b b c16 d
+        c2.
+}
+
+cbIV =
+\relative c' {
+        \key a \minor
+        \time 4/4
+        \clef bass
+        \voiceTwo
+
+        \partial 4
+        a4
+        c, e a, b
+        c d e2
+        e4\fermata e a b8 c
+        gis[ g] fis f e dis e4
+        a,2.\fermata
+        \bar ":|."
+}
+
+chromaticBach =
+\new StaffGroup = "chromatic Bach"
+<<
+
+  \new Staff
+    <<
+      \new Voice \cbI
+      \new Voice \cbII
+    >>
+
+  \new Lyrics \txt
+
+  \new Staff
+    <<
+      \new Voice \cbIII
+      \new Voice \cbIV
+    >>
+>>
+
+
+% Score
+
+\score {
+        <<
+        \exercise
+        \simpleBach
+        \chromaticBach
+        >>
+        \header {
+                title = \markup
+                           \column {
+                             \combine \null \vspace #1
+                             "Exercise: Improve the given choral"
+                             " "
+                            }
+        }
+        \layout {
+                \context {
+                        \Lyrics
+                        \override LyricText.X-offset = #-1
+                }
+        }
+}
index 31ec39112c2f7495ddc2934d95c125ace22db13a..82a609c12ff66ab2af1f3ff5dab4e56d575198fb 100644 (file)
@@ -1,27 +1,30 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
 
 \header {
   lsrtags = "spacing, tweaks-and-overrides, workaround"
 
   texidoc = "
-By setting the @code{'Y-extent} property to a suitable value, all
-@code{DynamicLineSpanner} objects (hairpins and dynamic texts) can be
-aligned to a common reference point, regardless of their actual extent.
-This way, every element will be vertically aligned, thus producing a
-more pleasing output.
+All @code{DynamicLineSpanner} objects (hairpins and dynamic texts) are
+placed with their reference line at least @code{'staff-padding} from
+the staff, unless other notation forces them to be farther.
+Setting @code{'staff-padding} to a sufficiently large value aligns the
+dynamics.
 
-The same idea is used to align the text scripts along their baseline.
+The same idea, together with @code{\\textLengthOn}, is used to align
+the text scripts along their baseline.
 
 "
   doctitle = "Vertically aligned dynamics and textscripts"
 } % begin verbatim
 
+\markup \vspace #1 %avoid LSR-bug
 
 music = \relative c' {
   a'2\p b\f
@@ -32,8 +35,8 @@ music = \relative c' {
 {
   \music
   \break
-  \override DynamicLineSpanner #'staff-padding = #2.0
-  \override DynamicLineSpanner #'Y-extent = #'(-1.5 . 1.5)
-  \override TextScript #'Y-extent = #'(-1.5 . 1.5)
+  \override DynamicLineSpanner.staff-padding = #3
+  \textLengthOn
+  \override TextScript.staff-padding = #1
   \music
 }
index a6fd2906b8425a96a681ef63faf82546f456c705..0adb0dec41def52b13ff6e762b25842cf82ed534 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "expressive-marks"
@@ -21,7 +21,7 @@ of the @code{DynamicLineSpanner} object.
 
 
 \relative c' {
-  \override DynamicLineSpanner #'staff-padding = #4
+  \override DynamicLineSpanner.staff-padding = #4
   c2\p f\mf
   g2\< b4\> c\!
 }
index b93afc58fcb5dd134d6464235d63c8b3c4f6dc26..4a85d9d6a4d45f32980e47f88c0b0aa8dab0c6a9 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   lsrtags = "spacing, tweaks-and-overrides, vocal-music"
@@ -36,11 +36,11 @@ positioning of lyrics and ossias.
       \new Staff \with {
         alignAboveContext = #"3"
         fontSize = #-2
-        \override StaffSymbol #'staff-space = #(magstep -2)
+        \override StaffSymbol.staff-space = #(magstep -2)
         \remove "Time_signature_engraver"
       } {
-        \times 4/6 {
-          \override TextScript #'padding = #3
+        \tuplet 6/4 {
+          \override TextScript.padding = #3
           c8[^"ossia above" d e d e f]
         }
       }
index a819d064ccf695499a87e4e97fa7294aa1522d0f..7c59cd3b1620509a15a17fff8bda7de53fcab57e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "vocal-music"
@@ -25,16 +25,16 @@ rightbrace = \markup { \rotate #180 \leftbrace }
 
 dropLyrics =
 {
-    \override LyricText #'extra-offset = #'(0 . -5)
-    \override LyricHyphen #'extra-offset = #'(0 . -5)
-    \override LyricExtender #'extra-offset = #'(0 . -5)
+    \override LyricText.extra-offset = #'(0 . -5)
+    \override LyricHyphen.extra-offset = #'(0 . -5)
+    \override LyricExtender.extra-offset = #'(0 . -5)
 }
 
 raiseLyrics =
 {
-    \revert LyricText #'extra-offset
-    \revert LyricHyphen #'extra-offset
-    \revert LyricExtender #'extra-offset
+    \revert LyricText.extra-offset
+    \revert LyricHyphen.extra-offset
+    \revert LyricExtender.extra-offset
 }
 
 skipFour = \repeat unfold 4 { \skip 8 }
index 59754d98ee480133791b2f26498ce5526a93b306..8e1796fd47d0b11b50aa25464b5ea8765e6d472e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "automatic-notation, keyboards, template, vocal-music"
@@ -67,7 +67,7 @@ bassWords = \lyricmode {
     \new ChoirStaff <<
       \new Lyrics = "sopranos" \with {
         % This is needed for lyrics above a staff
-        \override VerticalAxisGroup #'staff-affinity = #DOWN
+        \override VerticalAxisGroup.staff-affinity = #DOWN
       }
       \new Staff = "women" <<
         \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
@@ -76,7 +76,7 @@ bassWords = \lyricmode {
       \new Lyrics = "altos"
       \new Lyrics = "tenors" \with {
         % This is needed for lyrics above a staff
-        \override VerticalAxisGroup #'staff-affinity = #DOWN
+        \override VerticalAxisGroup.staff-affinity = #DOWN
       }
 
       \new Staff = "men" <<
index 86228b93fa4fb6c42550f9beecd81fb10823c958..51ffe694b2f6b7ee7bcbc4fdf5d186211ddc83cf 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "contexts-and-engravers, template, vocal-music"
@@ -101,7 +101,7 @@ BassLyrics = \lyricmode {
     \context { \Staff
       % these lines prevent empty staves from being printed
       \RemoveEmptyStaves
-      \override VerticalAxisGroup #'remove-first = ##t
+      \override VerticalAxisGroup.remove-first = ##t
     }
   }
 }
index c657cfe192a61031f62b1f2387b8d5c0621f011a..100d57e09857f97cee5c6b65ae52256689c94832 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "really-simple, template, vocal-music"
@@ -65,7 +65,7 @@ bassWords = \lyricmode {
   \new ChoirStaff <<
     \new Lyrics = "sopranos" \with {
       % this is needed for lyrics above a staff
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff = "women" <<
       \new Voice = "sopranos" {
@@ -80,7 +80,7 @@ bassWords = \lyricmode {
     \new Lyrics = "altos"
     \new Lyrics = "tenors" \with {
       % this is needed for lyrics above a staff
-      \override VerticalAxisGroup #'staff-affinity = #DOWN
+      \override VerticalAxisGroup.staff-affinity = #DOWN
     }
     \new Staff = "men" <<
       \clef bass
index 14b21c9c0ae336bd1de92d54881ce97a72fe517c..d09d784396542d4ca302646832e24d999b191deb 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "headword"
@@ -19,8 +19,8 @@ Vocal headword
 \layout {
   \context {
     \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
+    \override PaperColumn.keep-inside-line = ##t
+    \override NonMusicalPaperColumn.keep-inside-line = ##t
   }
 }
 
@@ -56,7 +56,7 @@ Vocal headword
     e([ d)] d([ cis d a)]
     g8([ fis)] fis([ e d c)]
     c8([ b)] g'2~
-    \once \override Script #'outside-staff-priority = #1 % put fermata closer to staff
+    \once \override Script.outside-staff-priority = #1 % put fermata closer to staff
     g4.\fermata ^\markup { \small \italic "ad libitum" } e8[ cis!] d
     d8 a a4 r \bar "||"
 
index ca451e32a81fa7b7cc450bf786030998d3b1e78b..821403d192245f6ace9d14eea0f57c156d1cd10b 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   lsrtags = "headword"
@@ -23,10 +23,10 @@ Wind headword
   \new StaffGroup <<
     \new Staff \relative c'' {
       \set Staff.instrumentName = "Flauto I,II"
-      \once \override Score.RehearsalMark #'self-alignment-X = #-1
-      \once \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
-      \once \override Score.TimeSignature #'break-align-anchor-alignment = #LEFT
-      \once \override Score.RehearsalMark #'padding = #4
+      \once \override Score.RehearsalMark.self-alignment-X = #-1
+      \once \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
+      \once \override Score.TimeSignature.break-align-anchor-alignment = #LEFT
+      \once \override Score.RehearsalMark.padding = #4
       \mark \markup \large \bold {Moderato assai}
       \key d \major
       \time 2/4
index f472cdafeae4dc5973f69043c4a3529fb53081b6..011aa3dcc6a7b2773f2bd76c1e306e603f84a0f1 100644 (file)
@@ -4,7 +4,7 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.14.0
+%% Note: this file works from version 2.16.0
 \version "2.16.0"
 
 \header {
index 71a59920ccfeffe4ed5fb492f2562323df135042..db8661d8432ebbf95cb04a64c867275b064a9d38 100644 (file)
@@ -19,6 +19,17 @@ defined in LilyPond.
 
 \relative c' {
   \textLengthOn
+  c1^
+  \markup {
+    \center-column {
+      'tin-whistle
+      " "
+       \woodwind-diagram
+                  #'tin-whistle
+                  #'()
+    }
+  }
+
   c1^
   \markup {
     \center-column {
index ce3dc1f42beec03241cb71d546e8b2f99dd37385..43a99497c10c8c78af1b8432170123142eae2c4e 100644 (file)
@@ -2,13 +2,16 @@ depth = ../..
 
 STEPMAKE_TEMPLATES=documentation tex texinfo topdocs
 LOCALSTEPMAKE_TEMPLATES=lilypond ly
-OUT_TEXI_FILES = $(TELY_FILES:%.tely=$(outdir)/%.texi)
+OUT_TEXI_FILES = $(TEXI_FILES:%.texi=$(outdir)/%.texi) $(TELY_FILES:%.tely=$(outdir)/%.texi)
 HTML_FILES=$(TEXI_FILES:%.texi=$(outdir)/%.html) $(TELY_FILES:%.tely=$(outdir)/%.html)
 README_TOP_FILES=NEWS AUTHORS INSTALL README
 OUTTXT_FILES= $(outdir)/NEWS.txt
 
 include $(depth)/make/stepmake.make
 
+DOCUMENTATION_INCLUDES += -I $(outdir) \
+  -I $(top-src-dir)/Documentation
+
 # FIXME ad-hoc file copy?
 $(outdir)/NEWS.tely: $(top-src-dir)/Documentation/changes.tely
        cp -f $< $@
index 47f0a7070361123d6db15700fcef074960b3b2c8..b562cc4d687f66b241d414be82bc3ffb5b7a722a 100644 (file)
 @node Top
 @top
 
+@menu
+* Compilation::
+@end menu
+
+
 @contents
 
 @include macros.itexi
+
+@node Compilation
+@chapter Compilation
+
 @include included/compile.itexi
 
 @bye
index 4287d245ebf808d63dff39015d47e06c7998e1c6..6951c1ce8f29dfaa46fe134f2ef3c52c68b126de 100644 (file)
@@ -16,17 +16,18 @@ td { border: 1px solid black; text-align: center; }
 
 @end html
 @end ifhtml
-@emph{Last updated Thu May 31 10:51:45 UTC 2012
+@emph{Last updated Wed Dec 18 12:23:14 UTC 2013
 }
-@multitable @columnfractions  0.5 0.5
+@multitable @columnfractions  0.333333333333 0.333333333333 0.333333333333
 
 @headitem
 LilyPond Changes
 @tab es
+@tab it
 @item
 Section titles
 @*
-(1192)
+(1453)
 @tab Francisco Vila
 @*
 
@@ -43,6 +44,29 @@ translated
 
 @ifhtml
 
+@html
+<span style="background-color: #1fff1f">up to date</span>
+@end html
+@end ifhtml
+@ifnothtml
+up to date
+@end ifnothtml
+@tab Federico Bruni
+@*
+
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">translated</span>
+@end html
+@end ifhtml
+@ifnothtml
+translated
+@end ifnothtml
+@*
+
+@ifhtml
+
 @html
 <span style="background-color: #1fff1f">up to date</span>
 @end html
@@ -70,6 +94,29 @@ translated
 
 @ifhtml
 
+@html
+<span style="background-color: #1fff1f">up to date</span>
+@end html
+@end ifhtml
+@ifnothtml
+up to date
+@end ifnothtml
+@tab Federico Bruni
+@*
+
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">translated</span>
+@end html
+@end ifhtml
+@ifnothtml
+translated
+@end ifnothtml
+@*
+
+@ifhtml
+
 @html
 <span style="background-color: #1fff1f">up to date</span>
 @end html
@@ -294,11 +341,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #33ff21">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -717,29 +764,29 @@ up to date
 @item
 1 Scheme tutorial
 @*
-(6041)
+(6271)
 @tab Till Paala
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (53 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (53 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -790,7 +837,7 @@ up to date
 @item
 2 Interfaces for programmers
 @*
-(5250)
+(5925)
 @tab Till Paala
 @*
 
@@ -808,11 +855,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #8aff2d">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -1194,11 +1241,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially up to date
+up to date
 @end ifnothtml
 @item
 LilyPond --- \TITLE\
@@ -1433,29 +1480,29 @@ up to date
 @item
 1 Tutorial
 @*
-(2535)
+(2578)
 @tab Pavel Fric
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (48 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (48 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Till Paala
 @*
@@ -1485,22 +1532,22 @@ Hajo Bäß
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (48 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (48 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -1600,18 +1647,18 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially translated (80 %)</span>
+<span style="background-color: #dfef77">partially translated (44 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially translated (80 %)
+partially translated (44 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #fff53e">partially up to date</span>
+<span style="background-color: #fff23f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -1666,22 +1713,22 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (48 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (48 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Jan Nieuwenhuizen
 @*
@@ -1709,49 +1756,49 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (48 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (48 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 2 Common notation
 @*
-(4187)
+(4396)
 @tab Pavel Fric
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (35 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (35 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #54ff26">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Till Paala
 @*
@@ -1759,22 +1806,22 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (35 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (35 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #4efe25">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -1874,18 +1921,18 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially translated (93 %)</span>
+<span style="background-color: #dfef77">partially translated (35 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially translated (93 %)
+partially translated (35 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #7dff2b">partially up to date</span>
+<span style="background-color: #a5ff31">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -1940,22 +1987,22 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (35 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (35 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #40fe23">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Jan Nieuwenhuizen
 @*
@@ -1983,27 +2030,27 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (35 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (35 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #4efe25">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 3 Fundamental concepts
 @*
-(11130)
+(11144)
 @tab Pavel Fric
 @*
 
@@ -2021,7 +2068,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #2cff20">partially up to date</span>
+<span style="background-color: #40fe23">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -2137,7 +2184,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #97ff2f">partially up to date</span>
+<span style="background-color: #a5ff31">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -2203,11 +2250,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Jan Nieuwenhuizen
 @*
@@ -2246,7 +2293,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #47ff24">partially up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -2255,25 +2302,25 @@ partially up to date
 @item
 4 Tweaking output
 @*
-(15468)
+(16191)
 @tab Pavel Fric
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially translated (98 %)</span>
+<span style="background-color: #dfef77">partially translated (50 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially translated (98 %)
+partially translated (50 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #47ff24">partially up to date</span>
+<span style="background-color: #9eff30">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -2285,18 +2332,18 @@ partially up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (52 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (52 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #2cff20">partially up to date</span>
+<span style="background-color: #83fe2c">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -2377,11 +2424,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially up to date
+up to date
 @end ifnothtml
 @tab Harmath Dénes
 @*
@@ -2400,7 +2447,7 @@ not translated
 @ifhtml
 
 @html
-<span style="background-color: #83fe2c">partially up to date</span>
+<span style="background-color: #dbff38">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -2432,11 +2479,11 @@ Luca Rossetto Casel
 @ifhtml
 
 @html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
 @end html
 @end ifhtml
 @ifnothtml
-not translated
+translated
 @end ifnothtml
 @*
 
@@ -2455,18 +2502,18 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (98 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (98 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #2cff20">partially up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -2498,45 +2545,45 @@ partially up to date
 @ifhtml
 
 @html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #dfef77">partially translated (98 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-not translated
+partially translated (98 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #40fe23">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 A Templates
 @*
-(219)
+(372)
 @tab Pavel Fric
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (38 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (38 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #b2fe32">partially up to date</span>
+<span style="background-color: #fffd3d">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -2548,18 +2595,18 @@ partially up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (38 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (38 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #76fe2a">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -2628,7 +2675,7 @@ not translated
 @ifhtml
 
 @html
-<span style="background-color: #c0ff34">partially up to date</span>
+<span style="background-color: #fff73e">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -2726,11 +2773,11 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
 @end html
 @end ifhtml
 @ifnothtml
-not translated
+translated
 @end ifnothtml
 @*
 
@@ -2988,7 +3035,7 @@ LilyPond Notation Reference
 @item
 Section titles
 @*
-(355)
+(326)
 @tab Till Paala
 @*
 
@@ -3065,26 +3112,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #1fff1f">translated</span>
 @end html
@@ -3206,26 +3233,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #1fff1f">translated</span>
 @end html
@@ -3347,26 +3354,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #1fff1f">translated</span>
 @end html
@@ -3411,7 +3398,7 @@ up to date
 @item
 1.1 Pitches
 @*
-(4530)
+(4990)
 @tab Till Paala
 @*
 
@@ -3429,11 +3416,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #47ff24">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -3572,7 +3559,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #2cff20">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -3581,7 +3568,7 @@ partially up to date
 @item
 1.2 Rhythms
 @*
-(6352)
+(6890)
 @tab Till Paala
 @*
 
@@ -3599,11 +3586,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #62ff28">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -3721,11 +3708,11 @@ Luca Rossetto Casel
 @ifhtml
 
 @html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
 @end html
 @end ifhtml
 @ifnothtml
-not translated
+translated
 @end ifnothtml
 @*
 
@@ -3755,7 +3742,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #39ff22">partially up to date</span>
+<span style="background-color: #62ff28">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -3764,7 +3751,7 @@ partially up to date
 @item
 1.3 Expressive marks
 @*
-(1712)
+(1793)
 @tab Till Paala
 @*
 
@@ -3782,11 +3769,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -3893,11 +3880,11 @@ Luca Rossetto Casel
 @ifhtml
 
 @html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
 @end html
 @end ifhtml
 @ifnothtml
-not translated
+translated
 @end ifnothtml
 @*
 
@@ -3936,7 +3923,7 @@ up to date
 @item
 1.4 Repeats
 @*
-(1011)
+(1050)
 @tab Till Paala
 @*
 
@@ -3954,11 +3941,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #40fe23">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -4065,11 +4052,11 @@ Luca Rossetto Casel
 @ifhtml
 
 @html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
 @end html
 @end ifhtml
 @ifnothtml
-not translated
+translated
 @end ifnothtml
 @*
 
@@ -4108,7 +4095,7 @@ up to date
 @item
 1.5 Simultaneous notes
 @*
-(2640)
+(2821)
 @tab Till Paala
 @*
 
@@ -4126,11 +4113,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -4239,11 +4226,11 @@ Luca Rossetto Casel
 @ifhtml
 
 @html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
 @end html
 @end ifhtml
 @ifnothtml
-not translated
+translated
 @end ifnothtml
 @*
 
@@ -4273,16 +4260,16 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #2cff20">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 1.6 Staff notation
 @*
-(2392)
+(2476)
 @tab Till Paala
 @*
 
@@ -4300,11 +4287,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #4efe25">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -4380,11 +4367,11 @@ up to date
 @ifhtml
 
 @html
-<small>Luca Rossetto Casel</small>
+<small></small>
 @end html
 @end ifhtml
 @ifnothtml
-Luca Rossetto Casel
+
 @end ifnothtml
 @*
 
@@ -4400,11 +4387,11 @@ Luca Rossetto Casel
 @ifhtml
 
 @html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
 @end html
 @end ifhtml
 @ifnothtml
-not translated
+translated
 @end ifnothtml
 @*
 
@@ -4434,16 +4421,16 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 1.7 Editorial annotations
 @*
-(949)
+(954)
 @tab Till Paala
 @*
 
@@ -4461,11 +4448,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #47ff24">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -4519,11 +4506,11 @@ up to date
 @ifhtml
 
 @html
-<small>Luca Rossetto Casel</small>
+<small></small>
 @end html
 @end ifhtml
 @ifnothtml
-Luca Rossetto Casel
+
 @end ifnothtml
 @*
 
@@ -4539,11 +4526,11 @@ Luca Rossetto Casel
 @ifhtml
 
 @html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
 @end html
 @end ifhtml
 @ifnothtml
-not translated
+translated
 @end ifnothtml
 @*
 
@@ -4582,7 +4569,7 @@ up to date
 @item
 1.8 Text
 @*
-(2729)
+(2816)
 @tab Till Paala
 @*
 
@@ -4600,11 +4587,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #33ff21">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -4689,11 +4676,11 @@ up to date
 @ifhtml
 
 @html
-<small>Luca Rossetto Casel</small>
+<small></small>
 @end html
 @end ifhtml
 @ifnothtml
-Luca Rossetto Casel
+
 @end ifnothtml
 @*
 
@@ -4709,11 +4696,11 @@ Luca Rossetto Casel
 @ifhtml
 
 @html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
 @end html
 @end ifhtml
 @ifnothtml
-not translated
+translated
 @end ifnothtml
 @*
 
@@ -4743,11 +4730,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 2 Specialist notation
@@ -4829,26 +4816,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #dfef77">partially translated (2 %)</span>
 @end html
@@ -4893,7 +4860,7 @@ up to date
 @item
 2.1 Vocal music
 @*
-(4758)
+(5190)
 @tab Till Paala
 @*
 
@@ -4911,11 +4878,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #47ff24">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -4990,26 +4957,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -5045,16 +4992,16 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #33ff21">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 2.2 Keyboard and other multi-staff instruments
 @*
-(862)
+(888)
 @tab  Till Paala
 @*
 
@@ -5072,11 +5019,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -5162,26 +5109,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -5244,11 +5171,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #2cff20">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -5334,26 +5261,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -5398,7 +5305,7 @@ up to date
 @item
 2.4 Fretted string instruments
 @*
-(2675)
+(2662)
 @tab Till Paala
 @*
 
@@ -5416,7 +5323,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #33ff21">partially up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -5493,26 +5400,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -5557,7 +5444,7 @@ partially up to date
 @item
 2.5 Percussion
 @*
-(812)
+(811)
 @tab Till Paala
 @*
 
@@ -5575,11 +5462,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #6fff29">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -5654,26 +5541,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -5709,16 +5576,16 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 2.6 Wind instruments
 @*
-(321)
+(324)
 @tab Till Paala
 @*
 
@@ -5826,26 +5693,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -5890,7 +5737,7 @@ up to date
 @item
 2.7 Chord notation
 @*
-(2022)
+(1972)
 @tab Till Paala
 @*
 
@@ -5908,11 +5755,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #33ff21">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -5998,26 +5845,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -6053,11 +5880,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #2cff20">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 2.8 Contemporary music
@@ -6157,26 +5984,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -6221,7 +6028,7 @@ up to date
 @item
 2.9 Ancient notation
 @*
-(4752)
+(5375)
 @tab Till Paala
 @*
 
@@ -6239,11 +6046,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #6fff29">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -6296,26 +6103,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -6457,26 +6244,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -6521,7 +6288,7 @@ up to date
 @item
 3 General input and output
 @*
-(8701)
+(10392)
 @tab Till Paala
 @*
 
@@ -6539,7 +6306,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #39ff22">partially up to date</span>
+<span style="background-color: #9eff30">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -6587,37 +6354,17 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #39ff22">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially up to date
+up to date
 @end ifnothtml
 @tab Federico Bruni
 @*
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -6653,7 +6400,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">partially up to date</span>
+<span style="background-color: #9eff30">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -6662,7 +6409,7 @@ partially up to date
 @item
 4 Spacing issues
 @*
-(11234)
+(12256)
 @tab Till Paala
 @*
 
@@ -6680,11 +6427,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #83fe2c">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -6739,26 +6486,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -6794,34 +6521,34 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #83fe2c">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 5 Changing defaults
 @*
-(12679)
+(15289)
 @tab Till Paala
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (85 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (85 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #91ff2e">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -6889,37 +6616,17 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially up to date
+up to date
 @end ifnothtml
 @tab Federico Bruni
 @*
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -6944,18 +6651,18 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (97 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (97 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #47ff24">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -6964,7 +6671,7 @@ partially up to date
 @item
 A Notation manual tables
 @*
-(2177)
+(2176)
 @tab Till Paala
 @*
 
@@ -7019,11 +6726,11 @@ Jean-Charles Malahieude
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially translated (95 %)</span>
+<span style="background-color: #1fff1f">translated</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially translated (95 %)
+translated
 @end ifnothtml
 @*
 
@@ -7041,26 +6748,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -7123,11 +6810,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #47ff24">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -7200,26 +6887,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -7341,26 +7008,6 @@ up to date
 
 @ifhtml
 
-@html
-<small>Luca Rossetto Casel</small>
-@end html
-@end ifhtml
-@ifnothtml
-Luca Rossetto Casel
-@end ifnothtml
-@*
-
-@ifhtml
-
-@html
-<small></small>
-@end html
-@end ifhtml
-@ifnothtml
-
-@end ifnothtml
-@ifhtml
-
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -7746,7 +7393,7 @@ up to date
 @item
 1 Running @command{lilypond}
 @*
-(4615)
+(4537)
 @tab Reinhold Kainhofer
 @*
 Till Paala
@@ -7775,18 +7422,18 @@ Till Paala
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially translated (98 %)</span>
+<span style="background-color: #1fff1f">translated</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially translated (98 %)
+translated
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #dbff38">partially up to date</span>
+<span style="background-color: #47ff24">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -7864,18 +7511,18 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially translated (95 %)</span>
+<span style="background-color: #dfef77">partially translated (94 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially translated (95 %)
+partially translated (94 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #ffbf47">partially up to date</span>
+<span style="background-color: #ffb249">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -7930,27 +7577,27 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (97 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (97 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #33ff21">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 2 Updating files with @command{convert-ly}
 @*
-(1209)
+(1484)
 @tab Till Paala
 @*
 
@@ -7968,11 +7615,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #91ff2e">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -8057,7 +7704,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #33ff21">partially up to date</span>
+<span style="background-color: #97ff2f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -8123,11 +7770,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #76fe2a">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 3 Running @command{lilypond-book}
@@ -8170,11 +7817,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -8259,7 +7906,7 @@ partially translated (13 %)
 @ifhtml
 
 @html
-<span style="background-color: #5bff27">partially up to date</span>
+<span style="background-color: #68ff28">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -8325,16 +7972,16 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 4 External programs
 @*
-(2390)
+(2817)
 @tab Till Paala
 @*
 Reinhold Kainhofer
@@ -8343,22 +7990,22 @@ Reinhold Kainhofer
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (87 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (87 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #6fff29">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -8478,27 +8125,27 @@ up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (87 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (87 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #6fff29">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 5 Suggestions for writing files
 @*
-(2694)
+(2692)
 @tab Till Paala
 @*
 
@@ -8516,11 +8163,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #2cff20">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -8585,17 +8232,6 @@ John Mandereau
 
 @ifhtml
 
-@html
-<small>Jean-Charles Malahieude</small>
-@end html
-@end ifhtml
-@ifnothtml
-Jean-Charles Malahieude
-@end ifnothtml
-@*
-
-@ifhtml
-
 @html
 <small></small>
 @end html
@@ -8706,11 +8342,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #2cff20">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @item
 A GNU Free Documentation License
@@ -9073,11 +8709,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #39ff22">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially up to date
+up to date
 @end ifnothtml
 @tab Jan Nieuwenhuizen
 @*
@@ -9116,14 +8752,16 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #5bff27">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially up to date
+up to date
 @end ifnothtml
 @tab Ben Luo
 @*
+Anthony Fok
+@*
 
 @ifhtml
 
@@ -9139,11 +8777,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #5bff27">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially up to date
+up to date
 @end ifnothtml
 @item
 LilyPond --- \TITLE\
@@ -9377,6 +9015,8 @@ up to date
 @end ifnothtml
 @tab Ben Luo
 @*
+Anthony Fok
+@*
 
 @ifhtml
 
@@ -9392,16 +9032,16 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+
 @end ifnothtml
 @item
 Introduction
 @*
-(4753)
+(4937)
 @tab Pavel Fric
 @*
 
@@ -9419,7 +9059,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #6fff29">partially up to date</span>
+<span style="background-color: #97ff2f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -9442,11 +9082,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #54ff26">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -9535,7 +9175,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #4efe25">partially up to date</span>
+<span style="background-color: #83fe2c">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -9603,7 +9243,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #39ff22">partially up to date</span>
+<span style="background-color: #54ff26">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -9646,13 +9286,17 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #47ff24">partially up to date</span>
+<span style="background-color: #5bff27">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
 partially up to date
 @end ifnothtml
-@tab 
+@tab Ben Luo
+@*
+Anthony Fok
+@*
+
 @ifhtml
 
 @html
@@ -9664,10 +9308,19 @@ translated
 @end ifnothtml
 @*
 
+@ifhtml
+
+@html
+<span style="background-color: #d587ff"></span>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
 @item
 Download
 @*
-(1211)
+(1201)
 @tab Pavel Fric
 @*
 
@@ -9685,7 +9338,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #4efe25">partially up to date</span>
+<span style="background-color: #68ff28">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -9708,11 +9361,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -9799,7 +9452,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #2cff20">partially up to date</span>
+<span style="background-color: #47ff24">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -9865,11 +9518,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Jan Nieuwenhuizen
 @*
@@ -9908,14 +9561,16 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #33ff21">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Ben Luo
 @*
+Anthony Fok
+@*
 
 @ifhtml
 
@@ -9931,16 +9586,16 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #2cff20">partially up to date</span>
+<span style="background-color: #d587ff"></span>
 @end html
 @end ifhtml
 @ifnothtml
-partially up to date
+
 @end ifnothtml
 @item
 Manuals
 @*
-(1214)
+(1284)
 @tab Pavel Fric
 @*
 
@@ -9958,7 +9613,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #4efe25">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -9981,11 +9636,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #47ff24">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Francisco Vila
 @*
@@ -10070,7 +9725,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #4efe25">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -10136,11 +9791,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #47ff24">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Jan Nieuwenhuizen
 @*
@@ -10179,17 +9834,37 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #4efe25">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-up to date
+partially up to date
 @end ifnothtml
 @tab Ben Luo
 @*
 
 @ifhtml
 
+@html
+<small>Anthony Fok</small>
+@end html
+@end ifhtml
+@ifnothtml
+Anthony Fok
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<small></small>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
+@ifhtml
+
 @html
 <span style="background-color: #1fff1f">translated</span>
 @end html
@@ -10202,7 +9877,7 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #47ff24">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -10461,6 +10136,26 @@ up to date
 
 @ifhtml
 
+@html
+<small>Anthony Fok</small>
+@end html
+@end ifhtml
+@ifnothtml
+Anthony Fok
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<small></small>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
+@ifhtml
+
 @html
 <span style="background-color: #d0f0f8">not translated</span>
 @end html
@@ -10482,25 +10177,25 @@ up to date
 @item
 Community
 @*
-(3006)
+(3073)
 @tab  Pavel Fric
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially translated (96 %)</span>
+<span style="background-color: #dfef77">partially translated (95 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially translated (96 %)
+partially translated (95 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #e1ff39">partially up to date</span>
+<span style="background-color: #e8fe39">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -10512,18 +10207,18 @@ partially up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (97 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (97 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">partially up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -10546,11 +10241,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially up to date
+up to date
 @end ifnothtml
 @tab Jean-Charles Malahieude
 @*
@@ -10560,11 +10255,11 @@ John Mandereau
 @ifhtml
 
 @html
-<small>Jean-Charles Malahieude</small>
+<small></small>
 @end html
 @end ifhtml
 @ifnothtml
-Jean-Charles Malahieude
+
 @end ifnothtml
 @*
 
@@ -10591,11 +10286,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially up to date
+up to date
 @end ifnothtml
 @tab Harmath Dénes
 @*
@@ -10603,18 +10298,18 @@ partially up to date
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially translated (96 %)</span>
+<span style="background-color: #dfef77">partially translated (95 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially translated (96 %)
+partially translated (95 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #d4ff37">partially up to date</span>
+<span style="background-color: #e1ff39">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -10657,11 +10352,11 @@ translated
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially up to date
+up to date
 @end ifnothtml
 @tab Yoshiki Sawada
 @*
@@ -10669,18 +10364,18 @@ partially up to date
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (97 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-translated
+partially translated (97 %)
 @end ifnothtml
 @*
 
 @ifhtml
 
 @html
-<span style="background-color: #40fe23">partially up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
 @end html
 @end ifhtml
 @ifnothtml
@@ -10729,17 +10424,30 @@ not translated
 @ifnothtml
 up to date
 @end ifnothtml
-@tab 
+@tab Ben Luo
+@*
+Anthony Fok
+@*
+
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">partially translated (96 %)</span>
+<span style="background-color: #dfef77">partially translated (97 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-partially translated (96 %)
+partially translated (97 %)
 @end ifnothtml
 @*
 
+@ifhtml
+
+@html
+<span style="background-color: #d587ff"></span>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
 @end multitable
 
diff --git a/Documentation/usage/GNUmakefile b/Documentation/usage/GNUmakefile
deleted file mode 100644 (file)
index 26e33a6..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-LATEX_FILES =$(call src-wildcard,*.latex)
-EXTRA_DIST_FILES = $(LATEX_FILES)
-
-include $(depth)/make/stepmake.make
-
-
index 2eda9533745a46e4d91daa4132d2d9d7c305f222..f6cbc0980cf42ed948b37922efe65dcdac290ea4 100644 (file)
@@ -26,40 +26,30 @@ LilyPond can interact with other programs in various ways.
 
 @node Point and click
 @section Point and click
+@cindex point and click
 
-Point and click adds links to pdf documents for certain music
-elements.
+Point and click lets you find notes in the input by clicking on them
+in the PDF viewer.  This makes it easier to find input that causes
+some error in the sheet music.
 
 @menu
+* Configuring the system for point and click::
 * Enabling point and click::
 * Selective point-and-click::
 @end menu
 
-@node Enabling point and click
-@unnumberedsubsec Enabling point and click
-
-@cindex point and click
-
-Point and click lets you find notes in the input by clicking on them
-in the PDF viewer.  This makes it easier to find input that causes
-some error in the sheet music.
+@node Configuring the system for point and click
+@subsection Configuring the system
 
-When this functionality is active, LilyPond adds hyperlinks to the PDF
-file.  These hyperlinks are sent to the web-browser, which opens a
-text-editor with the cursor in the right place.
+When this functionality is active, LilyPond adds hyperlinks to the
+PDF file.  These hyperlinks are sent to a @q{URI helper} or a
+web-browser, which opens a text-editor with the cursor in the
+right place.
 
 To make this chain work, you should configure your PDF viewer to
 follow hyperlinks using the @file{lilypond-invoke-editor} script
 supplied with LilyPond.
 
-For Xpdf on UNIX, the following should be present in
-@file{xpdfrc}.  On UNIX, this file is found either in
-@file{/etc/xpdfrc} or as @file{$HOME/.xpdfrc}.
-
-@example
-urlCommand     "lilypond-invoke-editor %s"
-@end example
-
 The program @file{lilypond-invoke-editor} is a small helper
 program.  It will invoke an editor for the special @code{textedit}
 URIs, and run a web browser for others.  It tests the environment
@@ -98,8 +88,125 @@ for @code{LYEDITOR} is equivalent to the standard emacsclient
 invocation.
 
 
+@menu
+* Using Xpdf for point and click::
+* Using GNOME 2 for point and click::
+* Using GNOME 3 for point and click::
+* Extra configuration for Evince::
+@end menu
+
+@node Using Xpdf for point and click
+@unnumberedsubsubsec Using Xpdf
+@cindex Xpdf
+
+For Xpdf on UNIX, the following should be present in
+@file{xpdfrc}.  On UNIX, this file is found either in
+@file{/etc/xpdfrc} or as @file{$HOME/.xpdfrc}.
+
+@example
+urlCommand     "lilypond-invoke-editor %s"
+@end example
+
+If you are using Ubuntu, it is likely that the version of Xpdf
+installed with your system crashes on every PDF file: this state
+has been persisting for several years and is due to library
+mismatches.  Your best bet is to install a current @samp{xpdf}
+package and the corresponding @samp{libpoppler} package from
+Debian instead.  Once you have tested that this works, you might
+want to use
+@example
+sudo apt-mark hold xpdf
+@end example
+@noindent
+in order to keep Ubuntu from overwriting it with the next
+@q{update} of its crashing package.
+
+@node Using GNOME 2 for point and click
+@unnumberedsubsubsec Using GNOME 2
+
+For using GNOME 2 (and PDF viewers integrated with it), the magic
+invocation for telling the system about the @samp{textedit:} URI
+is
+@example
+gconftool-2 -t string -s /desktop/gnome/url-handlers/textedit/command "lilypond-invoke-editor %s"
+gconftool-2 -s /desktop/gnome/url-handlers/textedit/needs_terminal false -t bool
+gconftool-2 -t bool -s /desktop/gnome/url-handlers/textedit/enabled true
+@end example
+
+After that invocation,
+@example
+gnome-open textedit:///etc/issue:1:0:0
+@end example
+@noindent
+should call @file{lilypond-invoke-editor} for opening files.
+
+@node Using GNOME 3 for point and click
+@unnumberedsubsubsec Using GNOME 3
+
+In GNOME 3, URIs are handled by the @q{gvfs} layer rather than by
+@q{gconf}.  Create a file in a local directory such as @file{/tmp}
+that is called @file{lilypond-invoke-editor.desktop} and has the contents
+@example
+[Desktop Entry]
+Version=1.0
+Name=lilypond-invoke-editor
+GenericName=Textedit URI handler
+Comment=URI handler for textedit:
+Exec=lilypond-invoke-editor %u
+Terminal=false
+Type=Application
+MimeType=x-scheme-handler/textedit;
+Categories=Editor
+NoDisplay=true
+@end example
+and then execute the commands
+@example
+xdg-desktop-menu install ./lilypond-invoke-editor.desktop
+xdg-mime default lilypond-invoke-editor.desktop x-scheme-handler/textedit
+@end example
+
+After that invocation,
+@example
+gnome-open textedit:///etc/issue:1:0:0
+@end example
+@noindent
+should call @file{lilypond-invoke-editor} for opening files.
+
+@node Extra configuration for Evince
+@unnumberedsubsubsec Extra configuration for Evince
+@cindex Evince
+
+If @code{gnome-open} works, but Evince still refuses to open point
+and click links due to denied permissions, you might need to
+change the Apparmor profile of Evince which controls the kind of
+actions Evince is allowed to perform.
+
+For Ubuntu, the process is to edit the file
+@file{/etc/apparmor.d/local/usr.bin.evince} and append the
+following lines:
+@example
+# For Textedit links
+/usr/local/bin/lilypond-invoke-editor Cx -> sanitized_helper,
+@end example
+@noindent
+
+After adding these lines, call
+
+@example
+sudo apparmor_parser -r -T -W /etc/apparmor.d/usr.bin.evince
+@end example
+
+@noindent
+Now Evince should be able to open point and click links.  It is
+likely that similar configurations will work for other viewers.
+
+@node Enabling point and click
+@unnumberedsubsec Enabling point and click
 @cindex file size, output
 
+Point and click functionality is enabled by default when creating
+PDF files.
+
 The point and click links enlarge the output files significantly.  For
 reducing the size of PDF and PS files, point and click may be switched
 off by issuing
@@ -354,7 +461,7 @@ Quantize note durations on @var{DUR}.
 @item -e, --explicit-durations
 Print explicit durations.
 
-@item -h,--help
+@item -h, --help
 Show summary of usage.
 
 @item -k, --key=@var{acc}[:@var{minor}]
@@ -423,7 +530,7 @@ The following options are supported by @command{musicxml2ly}:
 @item -a, --absolute
 convert pitches in absolute mode.
 
-@item -h,--help
+@item -h, --help
 print usage and option summary.
 
 @item -l, --language=LANG
@@ -439,7 +546,7 @@ use the lxml.etree Python package for XML-parsing; uses less memory and cpu time
 @item -m, --midi
 activate midi-block.
 
-@item -nd --no-articulation-directions
+@item -nd, --no-articulation-directions
 do not convert directions (@code{^}, @code{_} or @code{-}) for
 articulations, dynamics, etc.
 
@@ -447,21 +554,21 @@ articulations, dynamics, etc.
 do not convert beaming information, use LilyPond's automatic
 beaming instead.
 
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
 set output filename to @var{file}.  If @var{file} is @file{-}, the output
 will be printed on stdout.  If not given, @var{xml-file}@file{.ly} will
 be used.
 
-@item -r,--relative
+@item -r, --relative
 convert pitches in relative mode (default).
 
-@item -v,--verbose
+@item -v, --verbose
 be verbose.
 
 @item --version
 print version information.
 
-@item -z,--compressed
+@item -z, --compressed
 input file is a zip-compressed MusicXML file.
 @end table
 
@@ -489,13 +596,13 @@ abc2ly [@var{option}]@dots{} @var{abc-file}
 The following options are supported by @command{abc2ly}:
 
 @table @code
-@item -b,--beams=None
+@item -b, --beams=None
 preserve ABC's notion of beams
-@item -h,--help
+@item -h, --help
 this help
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
 set output filename to @var{file}.
-@item -s,--strict
+@item -s, --strict
 be strict about success
 @item --version
 print version information.
@@ -562,9 +669,9 @@ more information about this.
 The following options are supported by @command{etf2ly}:
 
 @table @code
-@item -h,--help
+@item -h, --help
 this help
-@item -o,--output=@var{FILE}
+@item -o, --output=@var{FILE}
 set output filename to @var{FILE}
 @item --version
 version information
index 5225b67d5cea5ac9170749a13486479bbd63bbe1..c14c49b43b3bcfd5f9c76715e82fa90b7a08c864 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.11"
 
 @c Note: keep this node named so that `info lilypond-book' brings you here.
 @node lilypond-book
@@ -86,7 +86,7 @@ For example,
 
 \begin{lilypond}
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 \end{lilypond}
 
@@ -118,11 +118,11 @@ terminal run
 lilypond-book --output=out --pdf lilybook.lytex
 @emph{lilypond-book (GNU LilyPond) @version{} }
 @emph{Reading lilybook.lytex...}
-@emph{..lots of stuff deleted..}
+@emph{@dots{}lots of stuff deleted@dots{}}
 @emph{Compiling lilybook.tex...}
 cd out
 pdflatex lilybook
-@emph{..lots of stuff deleted..}
+@emph{@dots{}lots of stuff deleted@dots{}}
 xpdf lilybook
 @emph{(replace @command{xpdf} by your favorite PDF viewer)}
 @end example
@@ -145,7 +145,7 @@ For example,
 
 @lilypond
 \relative c' {
-  c2 e2 \times 2/3 { f8 a b } a2 e4
+  c2 e2 \tuplet 3/2 { f8 a b } a2 e4
 }
 @end lilypond
 
@@ -207,19 +207,19 @@ include music in @LaTeX{} files:
 @itemize
 
 @item
-the @code{\lilypond@{...@}} command, where you can directly enter short
-lilypond code
+the @code{\lilypond@{@dots{}@}} command, where you can directly enter
+short lilypond code
 
 @item
-the @code{\begin@{lilypond@}...\end@{lilypond@}} environment, where you
-can directly enter longer lilypond code
+the @code{\begin@{lilypond@}@dots{}\end@{lilypond@}} environment, where
+you can directly enter longer lilypond code
 
 @item
-the @code{\lilypondfile@{...@}} command to insert a lilypond file
+the @code{\lilypondfile@{@dots{}@}} command to insert a lilypond file
 
 @item
-the @code{\musicxmlfile@{...@}} command to insert a MusicXML file, which
-will be processed by @code{musicxml2ly} and @code{lilypond}.
+the @code{\musicxmlfile@{@dots{}@}} command to insert a MusicXML file,
+which will be processed by @code{musicxml2ly} and @code{lilypond}.
 
 @end itemize
 
@@ -396,9 +396,9 @@ and then saying only how many systems you want before each fragment,
 
 @example
 \onlyFirstNSystems@{3@}
-\begin@{lilypond@}...\end@{lilypond@}
+\begin@{lilypond@}@dots{}\end@{lilypond@}
 \onlyFirstNSystems@{1@}
-\begin@{lilypond@}...\end@{lilypond@}
+\begin@{lilypond@}@dots{}\end@{lilypond@}
 @end example
 
 
@@ -421,19 +421,19 @@ include music into Texinfo files:
 @itemize
 
 @item
-the @code{@@lilypond@{...@}} command, where you can directly enter short
-lilypond code
+the @code{@@lilypond@{@dots{}@}} command, where you can directly enter
+short lilypond code
 
 @item
-the @code{@@lilypond...@@end lilypond} environment, where you can directly
-enter longer lilypond code
+the @code{@@lilypond@dots{}@@end lilypond} environment, where you can
+directly enter longer lilypond code
 
 @item
-the @code{@@lilypondfile@{...@}} command to insert a lilypond file
+the @code{@@lilypondfile@{@dots{}@}} command to insert a lilypond file
 
 @item
-the @code{@@musicxmlfile@{...@}} command to insert a MusicXML file, which
-will be processed by @code{musicxml2ly} and @code{lilypond}.
+the @code{@@musicxmlfile@{@dots{}@}} command to insert a MusicXML file,
+which will be processed by @code{musicxml2ly} and @code{lilypond}.
 
 @end itemize
 
@@ -486,7 +486,7 @@ produces
 
 @lilypond[fragment,staffsize=11]{<c' e' g'>}
 
-Contrary to @LaTeX{}, @code{@@lilypond@{...@}} does not generate an
+Contrary to @LaTeX{}, @code{@@lilypond@{@dots{}@}} does not generate an
 in-line image.  It always gets a paragraph of its own.
 
 
@@ -499,19 +499,21 @@ include music in HTML files:
 @itemize
 
 @item
-the @code{<lilypond ... />} command, where you can directly enter short
-lilypond code
+the @code{<lilypond @dots{} />} command, where you can directly enter
+short lilypond code
 
 @item
-the @code{<lilyond>...</lilypond>} environment, where you can directly
-enter longer lilypond code
+the @code{<lilyond>@dots{}</lilypond>} environment, where you can
+directly enter longer lilypond code
 
 @item
-the @code{<lilypondfile>...</lilypondfile>} command to insert a lilypond file
+the @code{<lilypondfile>@dots{}</lilypondfile>} command to insert a
+lilypond file
 
 @item
-the @code{<musicxmlfile>...</musicxmlfile>} command to insert a MusicXML
-file, which will be processed by @code{musicxml2ly} and @code{lilypond}.
+the @code{<musicxmlfile>@dots{}</musicxmlfile>} command to insert a
+MusicXML file, which will be processed by @code{musicxml2ly} and
+@code{lilypond}.
 
 @end itemize
 
@@ -544,7 +546,7 @@ tags for the music fragments:
 \key c \minor c4 es g2
 @end lilypond
 
-For inline pictures, use @code{<lilypond ... />}, where the options
+For inline pictures, use @code{<lilypond @dots{} />}, where the options
 are separated by a colon from the music, for example
 
 @example
@@ -554,7 +556,7 @@ Some music in <lilypond relative=2: a b c/> a line of text.
 To include separate files, say
 
 @example
-<lilypondfile @var{option1} @var{option2} ...>@var{filename}</lilypondfile>
+<lilypondfile @var{option1} @var{option2} @dots{}>@var{filename}</lilypondfile>
 @end example
 
 @code{<musicxmlfile>} uses the same syntax as @code{<lilypondfile>}, but
@@ -998,23 +1000,23 @@ before running @command{latex} or @command{makeinfo}.
 @example
 lilypond-book --output=out yourfile.lytex
 cd out
-...
+@dots{}
 @end example
 
-@itemx --skip-lily-check
+@item --skip-lily-check
 Do not fail if no lilypond output is found.  It is used for LilyPond
 Info documentation without images.
 
-@itemx --skip-png-check
+@item --skip-png-check
 Do not fail if no PNG images are found for EPS files.  It is used for
 LilyPond Info documentation without images.
 
-@itemx --lily-output-dir=@var{dir}
+@item --lily-output-dir=@var{dir}
 Write lily-XXX files to directory @var{dir}, link into @option{--output}
 directory.  Use this option to save building time for documents in
 different directories which share a lot of identical snippets.
 
-@itemx --lily-loglevel=@var{loglevel}
+@item --lily-loglevel=@var{loglevel}
 Set the output verbosity of the invoked @command{lilypond} calls to
 @var{loglevel}.  Possible values are @code{NONE}, @code{ERROR},
 @code{WARNING}, @code{BASIC_PROGRESS}, @code{PROGRESS}, @code{INFO}
@@ -1023,16 +1025,16 @@ environment variable @code{LILYPOND_LOGLEVEL} is set, its value is used
 as the loglevel.
 
 
-@itemx --info-images-dir=@var{dir}
+@item --info-images-dir=@var{dir}
 Format Texinfo output so that Info will look for images of music in
 @var{dir}.
 
-@itemx --latex-program=@var{prog}
+@item --latex-program=@var{prog}
 Run executable @command{prog} instead of @command{latex}.  This is
 useful if your document is processed with @command{xelatex}, for
 example.
 
-@itemx --left-padding=@var{amount}
+@item --left-padding=@var{amount}
 Pad EPS boxes by this much.  @var{amount} is measured in millimeters,
 and is 3.0 by default.  This option should be used if the lines of
 music stick out of the right margin.
@@ -1055,7 +1057,7 @@ Create PDF files for use with PDF@LaTeX{}.
 By default, output is displayed on the terminal.  This option redirects
 all output to log files in the same directory as the source files.
 
-@itemx --use-source-file-names
+@item --use-source-file-names
 Write snippet output files with the same base name as their source file.
 This option works only for snippets included with @code{lilypondfile}
 and only if directories implied by @option{--output-dir} and
index db31e4347135bba9dfc93051212ee87d303c59db..9e736bda0139d25349a5dda61ac6e6a240dc929e 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.16.0"
+@c \version "2.17.6"
 
 
 @node Running lilypond
@@ -134,13 +134,13 @@ The following options are supported:
 
 @table @code
 
-@item -d,--define-default=@var{var}=@var{val}
+@item -d, --define-default=@var{var}=@var{val}
 See @ref{Advanced command line options for LilyPond}.
 
 @cindex Scheme, expression evaluation
 @cindex expression evaluation, Scheme
 
-@item -e,--evaluate=@var{expr}
+@item -e, --evaluate=@var{expr}
 Evaluate the Scheme @var{expr} before parsing any @file{.ly} files.
 Multiple @option{-e} options may be given, they will be evaluated
 sequentially.
@@ -167,19 +167,19 @@ at the top of the @code{.ly} file.
 @cindex output, format
 @cindex format, output
 
-@item -f,--format=@var{format}
+@item -f, --format=@var{format}
 which formats should be written.  Choices for @code{format} are
 @code{ps}, @code{pdf}, and @code{png}.
 
 Example: @code{lilypond -fpng @var{filename}.ly}
 
-@item -h,--help
+@item -h, --help
 Show a summary of usage.
 
-@item -H,--header=@var{FIELD}
+@item -H, --header=@var{FIELD}
 Dump a header field to file @file{BASENAME.@var{FIELD}}.
 
-@item -i,--init=@var{file}
+@item -i, --init=@var{file}
 Set init file to @var{file} (default: @file{init.ly}).
 
 @cindex file searching
@@ -194,7 +194,7 @@ search will continue in subsequent directories.
 
 @cindex chroot jail, running inside
 
-@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir}
+@item -j, --jail=@var{user},@var{group},@var{jail},@var{dir}
 Run @command{lilypond} in a chroot jail.
 
 The @option{--jail} option provides a more flexible alternative to
@@ -257,7 +257,7 @@ the amount of memory that can be allocated.  Also see
 @cindex loglevel
 @cindex output, verbosity
 
-@item -l,--loglevel=@var{LEVEL}
+@item -l, --loglevel=@var{LEVEL}
 Set the verbosity of the console output to @var{LEVEL}. Possible values
 are:
 
@@ -290,7 +290,7 @@ All possible messages, including verbose debug output.
 @cindex output, setting filename
 @cindex output, directory
 
-@item -o,--output=@var{FILE} or @var{FOLDER}
+@item -o, --output=@var{FILE} or @var{FOLDER}
 Set the default output file to @var{FILE} or, if a folder with that name
 exists, direct the output to @var{FOLDER}, taking the file name from the
 input file.  The appropriate suffix will be added (e.g. @code{.pdf} for
@@ -319,14 +319,14 @@ Generate pictures of each page, in PNG format.  This implies
 @item --pdf
 Generate PDF.  This implies @option{--ps}.
 
-@item -v,--version
+@item -v, --version
 Show version information.
 
-@item -V,--verbose
+@item -V, --verbose
 Be verbose: show full paths of all files read, and give timing
 information.
 
-@item -w,--warranty
+@item -w, --warranty
 Show the warranty with which GNU LilyPond comes.  (It comes with
 @strong{NO WARRANTY}!)
 
@@ -339,9 +339,14 @@ Show the warranty with which GNU LilyPond comes.  (It comes with
 @table @code
 
 @item -d@var{[option-name]}=@var{[value]},--define-default=@var{[option-name]}=@var{[value]}
-This sets the equivalent internal Scheme function to @var{value}.  If a
-@var{value} is not supplied, then the default value is used.  The prefix
-@code{no-} may be added to @var{option-name} to switch @q{off} an
+This sets the equivalent internal Scheme function to @var{value}.
+
+@example
+-dbackend=svg
+@end example
+
+If a @var{value} is not supplied, then the default value is used.  The
+prefix @code{no-} may be added to @var{option-name} to switch @q{off} an
 option, e.g.
 
 @cindex point and click, command line
@@ -376,25 +381,25 @@ result to prevent @q{jaggies} in @code{PNG} images.
 @code{EPS} backend.
 
 @item @code{backend}
-@tab @code{'ps}
+@tab @code{ps}
 @tab Select backend.  Postscript files (default) include @code{TTF},
 @code{Type1} and @code{OTF} fonts.  No subsetting of these fonts is
 done.  Using @q{oriental} character sets can lead to very large files.
 
 @item
-@tab @code{'eps}
+@tab @code{eps}
 @tab Encapsulated PostScript.  This dumps every page (system) as a
 separate @file{EPS} file, without fonts, and as one collated @file{EPS}
 file with all pages (systems) including fonts.  Used as default by
 @command{lilypond-book}.
 
 @item
-@tab @code{'null}
+@tab @code{null}
 @tab Do not output a printed score; has the same effect as
 @code{-dno-print-pages}.
 
 @item
-@tab @code{'svg}
+@tab @code{svg}
 @tab Scalable Vector Graphics.  This creates a single @code{SVG} file,
 without embedded fonts, for every page of output.  It is recommended to
 install the Century Schoolbook fonts, included with your LilyPond
@@ -406,7 +411,7 @@ agent. There is also an option @code{svg-woff} (below) for use of woff
 font files in the SVG backend.
 
 @item
-@tab @code{'scm}
+@tab @code{scm}
 @tab Dump of the raw, internal Scheme-based drawing commands.
 
 @item @code{check-internal-types}
@@ -536,11 +541,6 @@ string.
 @tab @code{#f}
 @tab Convert text strings to paths when glyphs belong to a music font.
 
-@item @code{old-relative}
-@tab @code{#f}
-@tab Make @code{\relative} mode for simultaneous music work similar to
-chord syntax.
-
 @item @code{paper-size}
 @tab @code{\"a4\"}
 @tab Set default paper size.  Note the string must be enclosed in
@@ -648,7 +648,7 @@ more work to set up. See @ref{Basic command line options for LilyPond}.
 @item @code{separate-log-files}
 @tab @code{#f}
 @tab For input files @code{FILE1.ly}, @code{FILE2.ly}, etc. output log
-data to files @code{FILE1.log}, @code{FILE2.log}, ...
+data to files @code{FILE1.log}, @code{FILE2.log}@dots{}
 
 @item @code{show-available-fonts}
 @tab @code{#f}
@@ -920,10 +920,10 @@ are easily handled.
 @menu
 * Music runs off the page::
 * An extra staff appears::
-* Apparent error in ../ly/init.ly::
 * Error message Unbound variable %::
 * Error message FT_Get_Glyph_Name::
 * Warning staff affinities should only decrease::
+* Error message unexpected new::
 @end menu
 
 @node Music runs off the page
@@ -968,7 +968,7 @@ colored red, but in fact it results in two staves with the note
 heads remaining the default black in the lower staff.
 
 @lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
+\override Staff.NoteHead.color = #red
 \new Staff { a }
 @end lilypond
 
@@ -980,7 +980,7 @@ correct code to color all note heads red is
 
 @lilypond[quote,verbatim,relative=2]
 \new Staff {
-  \override Staff.NoteHead #'color = #red
+  \override Staff.NoteHead.color = #red
   a
 }
 @end lilypond
@@ -1009,34 +1009,6 @@ problem:
 @end lilypond
 
 
-@node Apparent error in ../ly/init.ly
-@unnumberedsubsec Apparent error in @code{../ly/init.ly}
-
-Various obscure error messages may appear about syntax errors in
-@file{../ly/init.ly} if the input file is not correctly formed,
-for example, if it does not contain correctly
-matched braces or quote signs.
-
-The most common error is a missing brace, (@code{@}}), at the end of
-a @code{score} block.  Here the solution is obvious: check the
-@code{score} block is correctly terminated.  The correct structure
-of an input file is described in @rlearning{How LilyPond input files work}.
-Using an editor which automatically highlights matching brackets and
-braces is helpful to avoid such errors.
-
-A second common cause is no white space between the last syllable
-of a lyrics block and the terminating brace, (@code{@}}).  Without
-this separation the brace is taken to be part of the syllable.  It
-is always advisable to ensure there is white space before and after
-@emph{every} brace.  For the importance of this when using lyrics,
-see @ruser{Entering lyrics}.
-
-This error message can also appear if a terminating quote sign,
-(@code{"}), is omitted.  In this case an accompanying error message
-@c keep "-matching straight in fancy editors
-should give a line number close to the line in error.  The
-mismatched quote will usually be on the line one or two above.
-
 @node Error message Unbound variable %
 @unnumberedsubsec Error message Unbound variable %
 
@@ -1066,9 +1038,59 @@ messages can be avoided by making one of the contexts behave as a
 staff by inserting
 
 @example
-\override VerticalAxisGroup #'staff-affinity = ##f
+\override VerticalAxisGroup.staff-affinity = ##f
 @end example
 
 @noindent
 at its start.  For details, see @qq{Spacing of non-staff lines} in
 @ruser{Flexible vertical spacing within systems}.
+
+
+@node Error message unexpected new
+@unnumberedsubsec Error message unexpected @code{@bs{}new}
+
+A @code{\score} block must contain a @emph{single} music expression.
+If instead it contains several @code{\new Staff},
+@code{\new StaffGroup} or similar contexts introduced with @code{\new}
+without them being enclosed in either curly brackets,
+@code{@{ @dots{} @}}, or double angle brackets, @code{<< @dots{} >>},
+like this:
+
+@example
+\score @{
+  % Invalid! Generates error: syntax error, unexpected \new
+  \new Staff @{ @dots{} @}
+  \new Staff @{ @dots{} @}
+@}
+@end example
+
+@noindent
+the error message will be produced.
+
+To avoid the error, enclose all the @code{\new} statements in
+curly or double angle brackets.
+
+Using curly brackets will introduce the @code{\new} statements
+sequentially:
+
+@lilypond[quote,verbatim]
+\score {
+  {
+    \new Staff { a' a' a' a' }
+    \new Staff { g' g' g' g' }
+  }
+}
+@end lilypond
+
+@noindent
+but more likely you should be using double angle brackets so the new
+staves are introduced in parallel, i.e. simultaneously:
+
+@lilypond[quote,verbatim]
+\score {
+  <<
+    \new Staff { a' a' a' a' }
+    \new Staff { g' g' g' g' }
+  >>
+}
+@end lilypond
index 24a7bb2e7676113a748d70c10203c713495518bd..2c6fcaca8fae3331e37f59f23a0dc5c24ae5aefb 100644 (file)
@@ -130,7 +130,7 @@ best.
 variable, it is recommended that the notes are wrapped in
 
 @example
-\transpose c natural-pitch @{...@}
+\transpose c natural-pitch @{@dots{}@}
 @end example
 
 @noindent
@@ -167,7 +167,7 @@ in a new version of LilyPond.
 violin = \relative c'' @{
 g4 c'8. e16
 @}
-...
+@dots{}
 \score @{
   \new GrandStaff @{
     \new Staff @{
@@ -177,12 +177,11 @@ g4 c'8. e16
 @}
 @end example
 
-@item @strong{Separate tweaks from music definitions}.  This
-point was made previously, but for large
-projects it is absolutely vital.  We might need to change
-the definition of @code{fthenp}, but then we only need
-to do this once, and we can still avoid touching anything
-inside @code{violin}.
+@item @strong{Separate tweaks from music definitions}.  This point was
+made previously, but for large projects it is absolutely vital.  We
+might need to change the definition of @code{fthenp}, but then we only
+need to do this once, and we can still avoid touching anything inside
+@code{violin}.
 
 @example
 fthenp = _\markup@{
@@ -205,7 +204,7 @@ investigation to determine the source of the problem.
 
 The most powerful tools for this purpose are the
 single line comment (indicated by @code{%}) and the block
-comment (indicated by @code{%@{ ... %@}}).  If you don't
+comment (indicated by @code{%@{@dots{}%@}}).  If you don't
 know where a problem is, start commenting out huge portions
 of your input file.  After you comment out a section, try
 compiling the file again.  If it works, then the problem
index 2075925c78c1a930f261d79338f8af5e16393f15..ad92a834e35db8307521379f9dc4bd9789e6ce09 100644 (file)
@@ -20,8 +20,8 @@
 The LilyPond input syntax is routinely changed to simplify it or improve
 it in different ways.  As a side effect of this, the LilyPond interpreter
 often is no longer compatible with older input files.  To remedy this,
-the program @command{convert-ly} can be used to deal with most of the
-syntax changes between LilyPond versions.
+the program @command{convert-ly} can be used for upgrading files
+to newer versions of LilyPond.
 
 @menu
 * Why does the syntax change?::
@@ -54,16 +54,40 @@ with existing scores)?  In this case, we decided to change the
 name to @code{print-all-headers}.  Fortunately, this change can be
 automated with our @command{convert-ly} tool.
 
-Unfortunately, @code{convert-ly} cannot handle all input changes.
+Unfortunately, @command{convert-ly} cannot handle all input changes.
 For example, in LilyPond 2.4 and earlier, accents and non-English
 letters were entered using LaTeX -- displaying the French word for
 Christmas was entered as @code{No\"el}.  But in LilyPond
 @c keep "-matching straight in fancy editors
 2.6 and above, the special @code{ë} must be entered directly into
-the LilyPond file as an UTF-8 character.  @code{convert-ly} cannot
+the LilyPond file as an UTF-8 character.  @command{convert-ly} cannot
 change all the LaTeX special characters into UTF-8 characters; you
 must manually update your old LilyPond input files.
 
+The conversion rules of @command{convert-ly} work using text pattern
+matching and replacement rather than a thorough understanding of
+LilyPond.  This has several consequences:
+@itemize @bullet
+@item
+The reliability of the conversion depends on the quality of each
+applied rule set and on the complexity of the respective change.
+Sometimes conversions may require manual fixes, so the old version
+should be kept available for comparison.
+@item
+Only conversions to newer formats are possible: there are no rule
+sets for downgrading.  So the main working copy of a LilyPond file
+should only be upgraded when older versions of LilyPond no longer
+need to be supported.  Version control systems such as Git might
+help with maintaining multiple versions.
+@item
+LilyPond and Scheme themselves are quite robust against creatively
+placed and omitted spaces, but the rules used by
+@command{convert-ly} tend to make some stylistic assumptions.
+Following the style used in the manuals is the safest bet for
+painless upgrades, particularly as the manuals themselves are
+upgraded using @command{convert-ly}.
+@end itemize
+
 
 @node Invoking convert-ly
 @section Invoking @command{convert-ly}
@@ -121,49 +145,69 @@ The program is invoked as follows:
 convert-ly [@var{option}]@dots{} @var{filename}@dots{}
 @end example
 
-
 The following options can be given:
 
 @table @code
-@item -e,--edit
+@item -d, --diff-version-update
+increase the @code{\version} string only if the file has actually
+been changed.  In that case, the version header will correspond to
+the version after the last actual change.  An unstable version
+number will be rounded up to the next stable version number unless
+that would exceed the target version number.  Without this option,
+the version will instead reflect the last @emph{attempted}
+conversion.
+
+@item -e, --edit
 Apply the conversions direct to the input file, modifying it
-in-place.
+in-place.  The original file is renamed as @file{myfile.ly~}.  This
+backup file may be a hidden file on some operating systems.
 
-@item -f,--from=@var{from-patchlevel}
+@item -b, --backup-numbered
+When used with the @samp{-e} option, number the backup files so that
+no previous version is overwritten.  The backup files may be hidden
+on some operating systems.
+
+@item -f, --from=@var{from-patchlevel}
 Set the version to convert from.  If this is not set, @command{convert-ly}
 will guess this, on the basis of @code{\version} strings in the file.
 E.g. @option{--from=2.10.25}
 
-@item -n,--no-version
+@item -h, --help
+Print usage help.
+
+@item -l @var{loglevel}, --loglevel=@var{loglevel}
+Set the output verbosity to @var{loglevel}. Possible values, in upper
+case, are @code{PROGRESS} (the default), @code{NONE}, @code{WARNING},
+@code{ERROR} and @code{DEBUG}.
+
+@item -n, --no-version
 Normally, @command{convert-ly} adds a @code{\version} indicator
 to the output.  Specifying this option suppresses this.
 
 @item -s, --show-rules
 Show all known conversions and exit.
 
-@item --to=@var{to-patchlevel}
-Set the goal version of the conversion.  It defaults to the latest
-available version.  E.g. @option{--to=2.12.2}
-
-@item -h, --help
-Print usage help.
+@item -t, --to=@var{to-patchlevel}
+Explicitly set which @code{\version} to convert to, otherwise the
+default is the most current value.  It must be higher than the
+starting version.
 
-@item -l @var{loglevel}, --loglevel=@var{loglevel}
-Set the output verbosity to @var{loglevel}. Possible values are @code{NONE},
-@code{ERROR}, @code{WARNING}, @code{PROGRESS} (default) and @code{DEBUG}.
+@example
+convert-ly --to=2.14.1 myfile.ly
+@end example
 
 @end table
 
 To upgrade LilyPond fragments in texinfo files, use
 
 @example
-convert-ly --from=... --to=... --no-version *.itely
+convert-ly --from=@dots{} --to=@dots{} --no-version *.itely
 @end example
 
 To see the changes in the LilyPond syntax between two versions, use
 
 @example
-convert-ly --from=... --to=... -s
+convert-ly --from=@dots{} --to=@dots{} -s
 @end example
 
 
index e6b077d328972fbea17a9ccbd033c75f5af90bdd..621488e92f53b98df0714c4fc46b49335a220d71 100644 (file)
@@ -306,8 +306,12 @@ Distributions will want to install lilypond.info in postinstall, doing:
 @divClass{heading-center}
 @divClass{contactBox}
 If you are aware of any other \topic\ which could be listed here,
-please let us know by following the instructions on
-@ref{Bug reports}.
+please let us know by writing a message to the bug-lilypond
+mailing list. If you're not subscribed yet you can do so on the list's
+@uref{https://lists.gnu.org/mailman/listinfo/bug-lilypond,info page}
+or post directly through the
+@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs,
+gmane lilypond.bugs web interface}.
 
 @divEnd
 @divEnd
diff --git a/Documentation/web/GNUmakefile b/Documentation/web/GNUmakefile
deleted file mode 100644 (file)
index 278256f..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-depth = ../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-SUBDIRS = server
-include $(depth)/make/stepmake.make
-
-#OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES))
-BIB_FILES = $(call src-wildcard,*.bib)
-EXTRA_DIST_FILES += $(BIB_FILES) $(call src-wildcard,*.bst)
-
index d06932a3ff44905ccc32aac598f7a4c9c1e35b42..54723d77f59f016826fa53d0647ae03b28d5466a 100644 (file)
@@ -7,6 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
+@include included/acknowledge.itexi
 @include included/authors.itexi
 @include included/helpus.itexi
 
@@ -53,6 +54,9 @@ discussing LilyPond.
 @item
 @ref{Authors}: the people who made LilyPond what it is today.
 
+@item
+@ref{Acknowledgements}: projects and institutions that support LilyPond
+
 @end itemize
 @divEnd
 
@@ -85,6 +89,7 @@ discussing LilyPond.
 * Development::
 * GSoC 2012::
 * Authors::
+* Acknowledgements::
 * Publications::
 * Old news::
 * Attic::
@@ -780,6 +785,7 @@ manuals can be found at @url{http://lilypond.org}}
 @divClass{normal-table}
 @multitable @columnfractions .3 .3 .3
 @headitem Introduction
+
 @item
 @docLinkSplit{Learning,learning,@manualDevelLearningSplit}
 @tab
@@ -800,7 +806,9 @@ manuals can be found at @url{http://lilypond.org}}
 @docLinkBig{Essay,essay,@manualDevelEssayBig}
 @tab
 @docLinkPdf{Essay,essay,@manualDevelEssayPdf}
+@end multitable
 
+@multitable @columnfractions .3 .3 .3
 @headitem Regular
 
 @item
@@ -823,7 +831,9 @@ manuals can be found at @url{http://lilypond.org}}
 @docLinkBig{Snippets,snippets,@manualDevelSnippetsBig}
 @tab
 @docLinkPdf{Snippets,snippets,@manualDevelSnippetsPdf}
+@end multitable
 
+@multitable @columnfractions .3 .3 .3
 @headitem Infrequent
 
 @item
@@ -853,15 +863,17 @@ manuals can be found at @url{http://lilypond.org}}
 @docLinkBig{Internals,internals,@manualDevelInternalsBig}
 @tab
 @docLinkPdf{Internals,internals,@manualDevelInternalsPdf}
+@end multitable
 
 @ifset web_version
+@multitable @columnfractions .3
 @headitem Downloadable
 
 @item
 @doctarballDevel
+@end multitable
 @end ifset
 
-@end multitable
 
 @divEnd
 @divEnd
@@ -1112,6 +1124,16 @@ any patch which introduced extra warnings.
 @divEnd
 @divEnd
 
+@node Acknowledgements
+@unnumberedsec Acknowledgements
+
+@divClass{column-center-top}
+@subheading Acknowledgements
+
+@divClass{keep-bullets}
+@acknowledgementsCurrent
+@divEnd
+@divEnd
 
 
 @node Publications
@@ -1160,6 +1182,7 @@ the @ref{Attic}}
 @subheading Announcements
 
 Announcements and news by version:
+@uref{http://lilypond.org/doc/v2.16/Documentation/web/index#Lilypond-2_002e16_002e0-released_0021-August-24_002c-2012-1,v2.16},
 @uref{http://lilypond.org/doc/v2.14/Documentation/web/index#LilyPond-2_002e14_002e0-released_0021-June-6_002c-2011,v2.14},
 @miscLink{announce-v2.12,v2.12},
 @miscLink{announce-v2.10,v2.10},
@@ -1173,6 +1196,7 @@ Announcements and news by version:
 @miscLink{ANNOUNCE-0.1,v0.1}
 
 Descriptive list of changes by version:
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/index.html,v2.16},
 @uref{http://lilypond.org/doc/v2.14/Documentation/changes/index.html,v2.14},
 @uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS,v2.12},
 @uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS,v2.10},
@@ -1188,6 +1212,23 @@ Descriptive list of changes by version:
 
 @divEnd
 
+@divClass{column-center-bottom}
+@subheading Thanks
+
+Thanks to developers, contributors, bug hunters and suggestions for
+@miscLink{THANKS-2.16,v2.16},
+@miscLink{THANKS-2.14,v2.14},
+@miscLink{THANKS-2.12,v2.12},
+@miscLink{THANKS-2.10,v2.10},
+@miscLink{THANKS-2.8,v2.8},
+@miscLink{THANKS-2.6,v2.6},
+@miscLink{THANKS-2.4,v2.4},
+@miscLink{THANKS-2.2,v2.2},
+@miscLink{THANKS-2.0,v2.0},
+@miscLink{THANKS-1.8,v1.8}
+
+@divEnd
+
 @divClass{column-center-bottom}
 @subheading Changelogs
 
index e0d3b5de0e7dae796e86b139747dda51f98d18c0..91bd1a334ca98a8b106c7cffdbe0dbcd1d7c0d92 100644 (file)
@@ -220,14 +220,6 @@ sh lilypond-@versionStable{}-OS-TYPE.sh --help
 
 
 @divClass{column-right-top}
-@subheading Compiling a file
-
-@lilypadCommandLine
-
-@divEnd
-
-
-@divClass{column-left-top}
 @subheading Distribution-specific Packages
 
 Please use your distribution's package manager to install or
@@ -265,6 +257,14 @@ openSUSE: LilyPond 2.12.3}
 @divEnd
 
 
+@divClass{column-center-top}
+@subheading Compiling a file
+
+@lilypadCommandLine
+
+@divEnd
+
+
 @divClass{column-center-bottom}
 @subheading Legalese
 
@@ -321,19 +321,12 @@ Delete the LilyPond.app folder.
 
 @divEnd
 
-@divClass{column-right-top}
-@subheading Compiling a file
-
-@lilypadOSX
-
-@divEnd
-
 
-@divClass{column-left-top}
+@divClass{column-right-top}
 @subheading Running on the command-line
 
-@warning{If you are happy with the GUI, then please ignore these
-instructions.}
+@warning{If you are happy with the GUI instructions below, then
+please ignore these instructions.}
 
 @subsubheading MacOS X on the command line
 
@@ -414,6 +407,14 @@ The same is true for all other scripts in that directory, such as
 @divEnd
 
 
+@divClass{column-center-top}
+@subheading Compiling a file
+
+@lilypadOSX
+
+@divEnd
+
+
 @divClass{column-center-bottom}
 @subheading Legalese
 
@@ -445,7 +446,7 @@ acknowledged.
 @item
 @sourceimage{logo-windows,,,}
 @downloadStableWindows
-For Windows 2000, XP, Vista and Windows 7.
+For Windows 2000, XP, Vista, Windows 7 and 8.
 
 @end itemize
 
@@ -484,18 +485,10 @@ button when the uninstaller has completed.
 
 
 @divClass{column-right-top}
-@subheading Compiling a file
-
-@lilypadWindows
-
-@divEnd
-
-
-@divClass{column-left-top}
 @subheading Running on the command-line
 
-@warning{If you are happy with the GUI, then please ignore these
-instructions.}
+@warning{If you are happy with the GUI instructions below, then
+please ignore these instructions.}
 
 @subsubheading Windows on the command line
 
@@ -545,6 +538,14 @@ lilypond test.ly
 @divEnd
 
 
+@divClass{column-center-top}
+@subheading Compiling a file
+
+@lilypadWindows
+
+@divEnd
+
+
 @divClass{column-center-bottom}
 @subheading Legalese
 
index 5feb5a7f00c2385368187b94aac15578458f8883..01172cc00fb985857e7f5e9fc20bb597eead2121 100644 (file)
@@ -497,6 +497,18 @@ Some highlights:
 @divClass{keep-bullets}
 @itemize
 
+@item
+A critical edition of Tommaso Traetta's @emph{Enea nel Lazio (1760)},
+opera series with libretto by Vittorio Amedeo Cigna-Santi, in four
+parts:
+@uref{http://www.academia.edu/1987651/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_1_4_, Part One}
+@uref{http://www.academia.edu/1994533/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_2_4_, Part Two}
+@uref{http://www.academia.edu/1994558/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_3_4_, Part Three}
+@uref{http://www.academia.edu/1996242/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_4_4_, Part Four}
+Created by
+@uref{http://unito.academia.edu/LucaRossettoCasel, Luca Rossetto Casel}
+for his Ph.D. Thesis.
+
 @item
 Mussorgsky's @emph{Pictures at an exhibition}, re-orchestrated and
 conducted by @uref{http://www.aurelienbello.com/,Aurélien Bello} with
@@ -516,12 +528,11 @@ Chrysalis Duo} ; @emph{thrafsmata} performed in July 2011 by the
 @uref{http://www.pnme.org/CurrentSeason/PreviousSeasons.html, Pittsburgh
 New Music Ensemble}.
 
-
 @item
 @emph{Anonymous Student Compliment or Complaint}, by
 @uref{http://www.mikesolomon.org, Mike Solomon}, winner chosen from among
 172 entries from 22 countries of the
-@uref{http://leftcoastensemble.org/contest, 2011 Left Coast Composition Contest}.
+@uref{http://leftcoastensemble.org, 2011 Left Coast Composition Contest}.
 Other works include, Norman (age 1) for clarinet solo, performed at the
 @uref{http://emu.music.ufl.edu/fems_concerts.html, University of Florida}'s
 Electroacoustic Music Festival (FEMF), October 2010.
@@ -534,16 +545,16 @@ Italy.  @uref{http://www.ascarlatti2010.net, Alessandro Scarlatti 2010},
 in celebration of the composer's 350th birthday.
 
 @item
-@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque}'s
-performance of Lully's @emph{Armide}, May 15-16, 2009, in Houston,
-Texas (engraving by @uref{http://nicolas.sceaux.free.fr/,
-Nicolas Sceaux}).
+@uref{http://www.mercurybaroque.org, Mercury Baroque}'s performance of
+Lully's @emph{Armide}, May 15-16, 2009, in Houston, Texas (engraving by
+@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}).
 
 @item
 Instrumental excerpts from Rameau's @emph{Hippolyte et Aricie} at
 St. James's Church in Manhattan, May 8, 2009, by Frederick Renz
 and his ensemble @uref{http://www.earlymusicny.org/, Early Music
-New York} (engraving by Nicolas Sceaux).
+New York} (engraving by
+@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}).
 
 @item
 @emph{Affaire étrangère}, an opera by
@@ -717,8 +728,8 @@ October 2004
 The editors of Computer!Totaal, a Dutch computer magazine,
 @uref{http://lilypond.org/website/pdf/computer-totaal.jpeg,
 describe LilyPond} in the October 2004 issue as: @qq{Wonderful
-free (open source) software [..] The sheet music produced by
-LilyPond is exceptionally pretty [..] a very powerful system that
+free (open source) software [@dots{}] The sheet music produced by
+LilyPond is exceptionally pretty [@dots{}] a very powerful system that
 can do almost anything.}
 
 @item
@@ -745,7 +756,7 @@ February 2004
 
 Jazz singer Gail Selkirk writes about
 @uref{http://www.songbirdofswing.com/editorial_page/lilypond/,
-Diving into LilyPond}.  @qq{... you can make lead sheets or full
+Diving into LilyPond}.  @qq{@dots{} you can make lead sheets or full
 orchestral parts, and the results can be stunning.}
 @uref{http://www.computermusic.co.uk/, Computer Music Special},
 issue CMS06.
@@ -801,12 +812,11 @@ the raw, untouched output.}
 work.  I've never seen anything approaching the output that I get
 from LilyPond -- I'm totally confident that my music publishing
 needs will be fulfilled beyond my expectations using this great
-application.  [..] basically untweaked LilyPond output [..] looks
-better than most recent @q{professional} publications I've compared
-it to (q.v., just about any Warner Bros. score, and even many of
-the most recent by @q{the old houses}). [..]}
-
-@qq{Beat that, Finale/Sibelius/Igor/whatever!!!}
+application.  [@dots{}] basically untweaked LilyPond output
+[@dots{}] looks better than most recent @q{professional}
+publications I've compared it to (q.v., just about any Warner
+Bros. score, and even many of the most recent by @q{the old
+houses}). [@dots{}]} @qq{Beat that, Finale/Sibelius/Igor/whatever!!!}
 @divEnd
 
 
@@ -843,7 +853,7 @@ time.  I'm convinced that no commercial product can come close.}
 @divClass{testimonial-item}
 @subsubheading David Bobroff, Bass Trombone, Iceland Symphony Orchestra
 
-@qq{I think LilyPond is great [..] The more I learn about LilyPond
+@qq{I think LilyPond is great [@dots{}] The more I learn about LilyPond
 the more I like it!}
 @divEnd
 
@@ -851,7 +861,7 @@ the more I like it!}
 @divClass{testimonial-item}
 @subsubheading Vaylor Trucks, Electric guitar player (Yes, @uref{http://www.allmanbrothersband.com/modules.php?op=modload&name=userpage&file=content&page_id=12, related to})
 
-@qq{I am super impressed with LilyPond [..]}
+@qq{I am super impressed with LilyPond [@dots{}]}
 
 @qq{THIS IS THE BEST PROGRAM EVER!!!}
 
@@ -864,7 +874,7 @@ the more I like it!}
 
 @qq{I had a kind of hate-passion relationship with it.  Passion
 because the first score I saw was so amazing! The description of
-LilyPond lies about its beautifulness, it is too modest! [..] as
+LilyPond lies about its beautifulness, it is too modest! [@dots{}] as
 LilyPond is getting always better, and as I look closer how things
 are done in scheme, I have less and less frustrations.  Anyway,
 what I mean is: thank you for providing LilyPond, it is really
@@ -1153,10 +1163,9 @@ Emacs is a text editor with language-sensitive capabilities for
 many different computer languages.  Emacs is a highly extensible
 editor and can be used as an Integrated Development Environment.
 There is a @q{lilypond mode} which supplies the language
-definitions for working with LilyPond source files.  As well, one of
-our developers has written
-@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}, an
-Emacs major mode.
+definitions for working with LilyPond source files.  A developer
+has written @uref{https://github.com/nsceaux/lyqi,lyqi}, an Emacs major
+mode.
 
 @uref{http://www.vim.org}
 
@@ -1192,8 +1201,14 @@ using the extensions available at:
 @itemize
 
 @item
-@uref{http://www.canorus.org,Canorus}, a score editor, can also export to
-LilyPond, but is still beta-software. Testers are welcome, though.
+@uref{http://www.jezra.net/projects/bwwtolily,bwwtolily} attempts to
+convert a @code{.bww} or @code{.bmw} file to LilyPond.  While not all of
+the embellishments may get converted properly (this is especially true
+with piobaireachd), the program will list them.
+
+@item
+@uref{http://www.canorus.org,Canorus}, a score editor, can also export
+to LilyPond, but is still beta-software. Testers are welcome, though.
 
 @item
 @uref{http://enc2ly.sourceforge.net/en/,Enc2ly} is a GNU/Linux program
@@ -1201,42 +1216,41 @@ which converts an @uref{http://www.gvox.com/,Encore} music score into
 a LilyPond one.
 
 @item
-@uref{https://github.com/hanwen/go-enc2ly,go-enc2ly} is a Go tool that converts
-@uref{http://www.gvox.com/,Encore} files to LilyPond. It was created using
-Felipe Castro's research and reverse engineering by tweaking existing .enc files
-and loading them using the 4.55 demo version.
+@uref{https://github.com/hanwen/go-enc2ly,go-enc2ly} is a Go tool that
+converts @uref{http://www.gvox.com/,Encore} files to LilyPond.  It was
+created using Felipe Castro's research and reverse engineering by
+tweaking existing .enc files and loading them using the 4.55 demo
+version.
 
 @item
-@uref{http://www.musescore.org,MuseScore}, a score editor, has incomplete
-LilyPond export but is being actively developed.
+@uref{http://www.musescore.org,MuseScore}, a score editor, has
+incomplete LilyPond export but is being actively developed.
 
 @item
-@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}, a
-score editor based on the @uref{http://www.cairographics.org,Cairo} library,
-has experimental support for exporting to LilyPond.
+@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd},
+a score editor based on the @uref{http://www.cairographics.org,Cairo}
+library, it has experimental support for exporting to LilyPond.
 
 @item
-@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,NW2LY} is
-a C# program which converts a
-@c @uref{http://www.noteworthysoftware.com/,NoteWorthy}
-NoteWorthy composer song into LilyPond.
+@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,NW2LY}
+is a C# program which converts a NoteWorthy composer song into LilyPond.
 
 @item
-@uref{https://github.com/ciconia/ripple/blob/master/README.markdown,Ripple} is
-a program that helps create scores and parts, including a mode for mixing
-different musical works together in a single score or part.
+@uref{https://github.com/ciconia/ripple/blob/master/README.markdown,Ripple}
+is a program that helps create scores and parts, including a mode for
+mixing different musical works together in a single score or part.
 
 @item
-@uref{http://www.rosegardenmusic.com,Rosegarden}, an audio and MIDI sequencer,
-which also has a score editor for single-staff editing.
+@uref{http://www.rosegardenmusic.com,Rosegarden}, an audio and MIDI
+sequencer, which also has a score editor for single-staff editing.
 
 @item
-@uref{https://launchpad.net/rumor/,Rumor}, a realtime monophonic MIDI to
-LilyPond converter.
+@uref{https://launchpad.net/rumor/,Rumor}, a realtime monophonic
+MIDI-to-LilyPond converter.
 
 @item
-@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, a multitrack tablature editor
-and player, includes a score viewer and can export to LilyPond.
+@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, a multitrack tablature
+editor and player, includes a score viewer and can export to LilyPond.
 
 @end itemize
 
@@ -1246,18 +1260,19 @@ and player, includes a score viewer and can export to LilyPond.
 
 @item
 @uref{http://www.projectabjad.org/,Abjad}, a
-@uref{http://www.python.org/,Python} API for Formalized Score
-Control designed to help composers build up complex pieces of
-LilyPond notation in an iterative and incremental way.
+@uref{http://www.python.org/,Python} API for Formalized Score Control
+designed to help composers build up complex pieces of LilyPond notation
+in an iterative and incremental way.
 
 @item
-@uref{http://common-lisp.net/project/fomus/,FOMUS}, a LISP library
-to generate music notation from computer music software
-environments.
+@uref{http://common-lisp.net/project/fomus/,FOMUS}, (FOrmat MUSic) is a
+music notation tool for computer music composers.  It is written in the
+Lisp programming language, and has been tested in a variety of
+interpreters.  A C++ port is also available.
 
 @item
-@uref{http://strasheela.sourceforge.net,Strasheela}, an
-environment built on top of the
+@uref{http://strasheela.sourceforge.net/strasheela/doc/index.html,Strasheela},
+an environment built on top of the
 @uref{http://www.mozart-oz.org/, Mozart/Oz} constraint programming
 language.
 
@@ -1272,12 +1287,12 @@ language.
 
 @item
 @uref{http://lilykde.googlecode.com/,LilyKDE} has been replaced by
-@uref{http://www.frescobaldi.org/,Frescobaldi}, and exists as
-LilyKDE3 for KDE 3.5 and lilypond-KDE4 for KDE 4.1 only.
+@uref{http://www.frescobaldi.org/,Frescobaldi}, and exists as LilyKDE3
+for KDE 3.5 and lilypond-KDE4 for KDE 4.1 only.
 
 @item
 @uref{http://noteedit.berlios.de,NoteEdit}, which imported
-@uref{http://www.musicxml.com/xml.html,MusicXML}, has been forked
+@uref{http://www.makemusic.com/musicxml,MusicXML}, has been forked
 into
 @uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}
 and @uref{http://canorus.org,Canorus}.
index a46ab720da6d11303708974ac47b2d4a3808a775..956ac12976dcbda17d8f66337de64224b3f8e64d 100644 (file)
@@ -144,6 +144,17 @@ these manuals are published under the GNU Free Documentation License.
 
 @divEnd
 
+@divClass{column-center-bottom}
+@subheading Manual formats
+
+The LilyPond manuals generally come in three formats: split HTML, big HTML and
+PDF.  Split HTML is good for reading online.  Big HTML (and some of these can be
+very big) contains the whole manual in a single page.  PDF is available for
+downloading and using offline.  To get to these 3 formats, follow the links
+that read @code{details of} and then the manual name.
+
+@divEnd
+
 @divEnd
 
 
@@ -194,8 +205,8 @@ and follow those cross-references for more information.
 @docLinks{Learning, learning,
   @rlearningnamed{Top,Learning},
   @manualStableLearningSplit,
-  @manualStableLearningBig, 1.5 MB,
-  @manualStableLearningPdf, 3 MB}
+  @manualStableLearningBig, 3 MB,
+  @manualStableLearningPdf, 5 MB}
 
 @divEnd
 
@@ -244,8 +255,8 @@ in the PDF version due to its higher resolution.}
 @docLinks{Essay, essay,
   @ressaynamed{Top,Essay},
   @manualStableEssaySplit,
-  @manualStableEssayBig, 2 MB,
-  @manualStableEssayPdf, 2.5 MB}
+  @manualStableEssayBig, 1 MB,
+  @manualStableEssayPdf, 2 MB}
 
 @divEnd
 
@@ -270,8 +281,8 @@ the English musical terms presented in the glossary.}
 @docLinks{Notation, notation,
   @rusernamed{Top,Notation},
   @manualStableNotationSplit,
-  @manualStableNotationBig, 7 MB,
-  @manualStableNotationPdf, 18 MB}
+  @manualStableNotationBig, 9 MB,
+  @manualStableNotationPdf, 35 MB}
 
 @divEnd
 
@@ -295,7 +306,7 @@ attempting any large projects.
   @rprogramnamed{Top,Usage},
   @manualStableUsageSplit,
   @manualStableUsageBig, 400 KB,
-  @manualStableUsagePdf, 600 KB}
+  @manualStableUsagePdf, 650 KB}
 
 @divEnd
 
@@ -325,8 +336,8 @@ linked from the @strong{See also} portion.
 @docLinks{Snippets, snippets,
   @rlsrnamed{Top,Snippets},
   @manualStableSnippetsSplit,
-  @manualStableSnippetsBig, 2.5 MB,
-  @manualStableSnippetsPdf, 8 MB}
+  @manualStableSnippetsBig, 1.5 MB,
+  @manualStableSnippetsPdf, 12.5 MB}
 
 @divEnd
 
@@ -400,8 +411,8 @@ reporting, and development.
 @docLinksBare{Web, web,
   @ref{Top,Web},
   @manualDevelWebSplit,
-  @manualDevelWebBig, 1 MB,
-  @manualDevelWebPdf, 2 MB}
+  @manualDevelWebBig, 2.5 MB,
+  @manualDevelWebPdf, 3.5 MB}
 
 @divEnd
 
@@ -422,8 +433,8 @@ LilyPond since the previous stable version.
 @docLinks{Changes, changes,
   @rchangesnamed{Top,Changes},
   @manualStableChangesSplit,
-  @manualStableChangesBig, 6 KB,
-  @manualStableChangesPdf, 200 KB}
+  @manualStableChangesBig, 90 KB,
+  @manualStableChangesPdf, 80 KB}
 
 @divEnd
 
@@ -443,8 +454,8 @@ This manual explains how to write extensions to LilyPond.
 @docLinks{Extending, extending,
   @rextendnamed{Top,Extending},
   @manualStableExtendingSplit,
-  @manualStableExtendingBig, 200 KB,
-  @manualStableExtendingPdf, 400 KB}
+  @manualStableExtendingBig, 300 KB,
+  @manualStableExtendingPdf, 500 KB}
 
 @divEnd
 
@@ -475,8 +486,8 @@ generated documentation.
 @docLinks{Internals, internals,
   @rinternalsnamed{Top,Internals},
   @manualStableInternalsSplit,
-  @manualStableInternalsBig, 2.5 MB,
-  @manualStableInternalsPdf, 2.8 MB}
+  @manualStableInternalsBig, 3 MB,
+  @manualStableInternalsPdf, 4 MB}
 
 @divEnd
 
@@ -521,12 +532,12 @@ Downloadable tarballs only available at @uref{http://lilypond.org}
 @divClass{keep-bullets}
 @itemize
 
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals,
+LilyPond 2.14 Documentation}
+
 @item @uref{http://lilypond.org/doc/v2.12/Documentation/,
 LilyPond 2.12 Documentation}
 
-@item @uref{http://lilypond.org/doc/v2.11/Documentation/,
-LilyPond 2.11 Documentation}
-
 @item @uref{http://lilypond.org/doc/v2.10/Documentation/,
 LilyPond 2.10 Documentation}
 
index 0de5407942106408b6ddf8d8a87fdf0ad8e72ce2..5828ad37280cdcbd3a35453754e861e7787e37ef 100644 (file)
 @c used for news about the upcoming release; see CG 10.2
 
 @newsItem
-@subsubheading LilyPond 2.16.2 released!  @emph{January 4, 2013}
+@subsubheading Lilypond 2.18.0 released!  @emph{December 29, 2013}
+
+We are proud to announce the release of GNU LilyPond 2.18.0.
+LilyPond is a music engraving program devoted to producing the
+highest-quality sheet music possible.  It brings the aesthetics of
+traditionally engraved music to computer printouts.
+
+Among the numerous improvements and changes, the following might
+be most visible:
+
+@itemize @bullet
+@item
+Many items are now positioned using their actual outline rather
+than a@tie{}rectangular bounding box.  This greatly reduces
+the occurrence of unsightly large gaps.
+
+@item
+Sets and overrides can now use the syntax
+@example
+\override Voice.TextSpanner.bound-details.left.text = "rit."
+@end example
+instead of the previous
+@example
+\override Voice.TextSpanner #'(bound-details left text) = "rit."
+@end example
+
+@item
+Triplets with a given group length can now be written as
+@example
+\tuplet 3/2 4 @{ c8 c c  c c c @}
+@end example
+instead of
+@example
+\times 2/3 @{ c8 c c @}  \times 2/3 @{ c8 c c @}
+@end example
+@end itemize
+
+A full list of noteworthy new features is given in:
+
+@example
+@uref{http://lilypond.org/doc/v2.18/Documentation/changes/index.html}
+@end example
+
+Great thanks go to the large number of LilyPond enthusiasts whose
+financial backing enabled one core developer, David Kastrup, to
+focus exclusively on LilyPond during the entire development cycle.
+
+LilyPond 2.18 has been brought to you by
+
+@table @asis
+@item Main Developers:
+Bertrand Bordage, Trevor Daniels, Colin Hall, Phil Holmes, Ian
+Hulin, Reinhold Kainhofer, David Kastrup, Jonathan Kulp, Werner
+Lemberg, John Mandereau, Patrick McCarty, Joe Neeman, Han-Wen
+Nienhuys, Jan Nieuwenhuizen, Graham Percival, Mark Polesky, Neil
+Puttock, Mike Solomon, Carl Sorensen, Francisco Vila, Valentin
+Villenave, Janek Warchoł
+
+@item Core Contributors:
+Aleksandr Andreev, Frédéric Bron, Torsten Hämmerle, Marc Hohl,
+James Lowe, Andrew Main, Thomas Morley, David Nalesnik, Keith
+OHara, Benkő Pál, Anders Pilegaard, Julien Rioux, Johannes Rohrer,
+Adam Spiers, Heikki Tauriainen
+
+@item Documentation Writers:
+Frédéric Bron, Federico Bruni, Colin Campbell, Urs Liska, James
+Lowe, Thomas Morley, Jean-Charles Malahieude, Guy Stalnaker,
+Martin Tarenskeen, Arnold Theresius, Rodolfo Zitellini
+
+@item Bug Squad:
+Colin Campbell, Eluze, Marc Hohl, Phil Holmes, Marek Klein, Ralph
+Palmer
+
+@item Support Team:
+Colin Campbell, Eluze, Marc Hohl, Marek Klein, Kieren MacMillan,
+Urs Liska, Ralph Palmer
+
+@item Translators:
+Federico Bruni, Luca Rossetto Casel, Felipe Castro, Pavel Fric,
+Jean-Charles Malahieude, Till Paala, Yoshiki Sawada
+
+@end table
+and numerous other contributors.
 
-We are happy to announce the release of LilyPond 2.16.2. This release is mainly
-to correct a problem with lilypond-book running on Windows. We recommend that
-only people requiring this functionality upgrade to this version.
 @newsEnd
 
 @newsItem
-@subsubheading LilyPond 2.17.9 released!  @emph{December 15, 2012}
+@subsubheading LilyPond blog.  @emph{June 2, 2013}
+
+Janek Warchoł has created a LilyPond blog.  You can find it at
+@uref{http://lilypondblog.org/, lilypondblog.org}!
 
-We are happy to announce the release of LilyPond 2.17.9.  This
-release contains the usual number of bugfixes and enhancements, and contains
-some work in progress.  You will have access to the very latest features, but
-some may be incomplete, and you may encounter bugs and crashes.  If you require
-a stable version of Lilypond, we recommend using the 2.16 version.
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.16.2 released!  @emph{January 4, 2013}
+
+We are happy to announce the release of LilyPond 2.16.2. This release is mainly
+to correct a problem with lilypond-book running on Windows. We recommend that
+only people requiring this functionality upgrade to this version.
 
 @newsEnd
 
index 1331adfcf20681f44cf8cb9705075733efa1b365..ea3ba36ad975691f33e7bebb52c5b32199abf0d6 100644 (file)
@@ -26,6 +26,283 @@ NOTE:
   * don't duplicate entries from news-front.itexi
 @end ignore
 
+@newsItem
+@subsubheading LilyPond 2.17.97 released!  @emph{December 8, 2013}
+
+We are excited to announce the release of LilyPond@tie{}2.17.97 as
+a potential final beta release for the upcoming stable release@tie{}2.18.  The
+developers believe this to be feature-complete, the
+documentation to be accurate, and no important issues to be
+overlooked.  For upgrading the syntax of your input files to the
+latest version, see @uref{http://www.lilypond.org/doc/v2.17/Documentation/usage/updating-files-with-convert_002dly, Updating files with convert-ly}.
+Please test this release and report back any problems, see
+@uref{http://www.lilypond.org/website/bug-reports.html, Bug reports}.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.96 released!  @emph{November 24, 2013}
+
+We are excited to announce the release of LilyPond@tie{}2.17.96 as
+a further beta release for the upcoming stable release@tie{}2.18.  The
+developers believe the release to be feature-complete, the
+documentation to be accurate, and no important issues to be
+overlooked.  For upgrading the syntax of your input files to the
+latest version, see @uref{http://www.lilypond.org/doc/v2.17/Documentation/usage/updating-files-with-convert_002dly, Updating files with convert-ly}.
+Please test this release and report back any problems, see
+@uref{http://www.lilypond.org/website/bug-reports.html, Bug reports}.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.95 released!  @emph{November 3, 2013}
+
+We are excited to announce the release of LilyPond@tie{}2.17.95 as
+beta release for the upcoming stable release@tie{}2.18.  The
+developers are still busy finding solutions for some last-minute
+problems, but the release is supposed to be feature-complete, the
+documentation to be accurate, and no important issues to be
+overlooked.  For upgrading the syntax of your input files to the
+latest version, see @rprogram{Updating files with convert-ly}.
+Please test this release and report back any problems, see
+@rweb{Bug reports}.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.29 released!  @emph{October 20, 2013}
+
+We are happy to announce the release of LilyPond 2.17.29.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.28 released!  @emph{October 6, 2013}
+
+We are happy to announce the release of LilyPond 2.17.28.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.27 released!  @emph{September 26, 2013}
+
+We are happy to announce the release of LilyPond 2.17.27.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.26 released!  @emph{September 8, 2013}
+
+We are happy to announce the release of LilyPond 2.17.26.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.25 released!  @emph{August 25, 2013}
+
+We are happy to announce the release of LilyPond 2.17.25.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.24 released!  @emph{August 11, 2013}
+
+We are happy to announce the release of LilyPond 2.17.24.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.23 released!  @emph{July 28, 2013}
+
+We are happy to announce the release of LilyPond 2.17.23.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.22 released!  @emph{July 14, 2013}
+
+We are happy to announce the release of LilyPond 2.17.22.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+This update cures the issue with the Windows version crashing with a problem
+with positioning text.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.21 released!  @emph{June 30, 2013}
+
+We are happy to announce the release of LilyPond 2.17.21.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.20 released!  @emph{June 9, 2013}
+
+We are happy to announce the release of LilyPond 2.17.20.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.19 released!  @emph{May 26, 2013}
+
+We are happy to announce the release of LilyPond 2.17.19.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.18 released!  @emph{May 11, 2013}
+
+We are happy to announce the release of LilyPond 2.17.18.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.17 released!  @emph{April 27, 2013}
+
+We are happy to announce the release of LilyPond 2.17.17.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.16 released!  @emph{April 13, 2013}
+
+We are happy to announce the release of LilyPond 2.17.16.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.15 released!  @emph{March 30, 2013}
+
+We are happy to announce the release of LilyPond 2.17.15.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.14 released!  @emph{March 10, 2013}
+
+We are happy to announce the release of LilyPond 2.17.14.  This
+release contains the usual number of bugfixes (including putting span bars back
+where they should be) and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.13 released!  @emph{February 23, 2013}
+
+We are happy to announce the release of LilyPond 2.17.13.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.12 released!  @emph{February 8, 2013}
+
+We are happy to announce the release of LilyPond 2.17.12.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.11 released!  @emph{January 26, 2013}
+
+We are happy to announce the release of LilyPond 2.17.11.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.10 released!  @emph{January 12 2013}
+
+We are happy to announce the release of LilyPond 2.17.10.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.9 released!  @emph{December 15, 2012}
+
+We are happy to announce the release of LilyPond 2.17.9.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
 
 @newsItem
 @subsubheading LilyPond 2.17.8 released!  @emph{December 1, 2012}
diff --git a/Documentation/web/server/GNUmakefile b/Documentation/web/server/GNUmakefile
deleted file mode 100644 (file)
index 99edf28..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-depth=../../..
-LOCALSTEPMAKE_TEMPLATES = ly
-include $(depth)/make/stepmake.make
-
-EXTRA_DIST_FILES = favicon.ico robots.txt tweets.xml
-EXTRA_DIST_FILES += lilypond.org.htaccess website-dir.htaccess
-
index d696f1093ed1f305bbb4401762383b0c928780c9..5e7dfae3d98773b58516b45122318f187bfd7716 100644 (file)
@@ -23,6 +23,10 @@ RewriteEngine On
 RewriteCond %{HTTP_USER_AGENT} httrack [NC]
 RewriteRule ^.*/source/.*$ /please-respect-robots.txt.html [L]
 
+# Deny rogue crawler
+RewriteCond %{HTTP_USER_AGENT} ^(.*)AhrefsBot(.*) [NC]
+RewriteRule .* - [F,L]
+
 # Permanent top level entry points -- ./doc
 RedirectMatch ^/music-glossary /glossary
 RedirectMatch ^/tutorial /learning
@@ -43,13 +47,13 @@ RedirectMatch ^/stable    /doc/stable
 #RedirectMatch ^/development    /doc/development
 
 #old# default doc dir
-RedirectMatch ^/doc/*$ /doc/v2.14
+RedirectMatch ^/doc/*$ /doc/v2.16
 # make attempt at `latest' symlink avoid ^v catch-all doc fix rule below
-RedirectMatch ^/doc//*latest/*(.*)$ /doc/v2.15/$1
-RedirectMatch ^/doc//*development/*(.*)$ /doc/v2.15/$1
-RedirectMatch ^/doc//*stable/*(.*)$ /doc/v2.14/$1
-RedirectMatch ^/doc//*([^v].*)$ /doc/v2.14/$1
-RedirectMatch ^(/Documentation.*)$ /doc/v2.14$1
+RedirectMatch ^/doc//*latest/*(.*)$ /doc/v2.17/$1
+RedirectMatch ^/doc//*development/*(.*)$ /doc/v2.17/$1
+RedirectMatch ^/doc//*stable/*(.*)$ /doc/v2.16/$1
+RedirectMatch ^/doc//*([^v].*)$ /doc/v2.16/$1
+RedirectMatch ^(/Documentation.*)$ /doc/v2.16$1
 RedirectMatch ^/index$ /
 
 # fix root calculation: no double slashes
index 27db672a39c61a39956b63872f66f78255104660..ccc8ed800dd36032733f74e5ba6d2dad63e61f73 100644 (file)
@@ -1,4 +1,5 @@
 # avoid 404s -- so that we can take action if any occur in /stats
+# Comment from Phil 9 July 2013 to allow tracking file through build
 
 User-agent: *
 Disallow: /doc/v1.6/
@@ -16,4 +17,7 @@ Disallow: /doc/v2.8/
 Disallow: /doc/v2.9/
 Disallow: /doc/v2.10/
 Disallow: /doc/v2.11/
+Disallow: /doc/v2.12/
 Disallow: /doc/v2.13/
+Disallow: /doc/v2.14/
+Disallow: /doc/v2.15/
index 1eb2eb29e1c6c9c7d1b067837580db3a4233bdbf..d6f425ed248d9c999627df817d71c2f0c6298b19 100644 (file)
@@ -1,60 +1,25 @@
 <tweets>
-<tweet>
-&lt;a target="_blank"
-href="http://www.inadiutorium.xf.cz"&gt;
-Project&lt;/a&gt; in adiutorium provides chants to the catholic Divine
-Office in the Czech language. We use LilyPond for the typesetting.
-</tweet>
-<tweet>
-28/07/2012 : Christophe Rousset et les Talens Lyriques interprètent Phaëton
-de Lully au
-&lt;a
-href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm"
-target="_blank"
-&gt;
-festival
-de Beaune&lt;/a&gt;,
-en utilisant un &lt;a
-href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39"
-target="_blank"
-&gt;
-matériel créé avec LilyPond.
-&lt;/a&gt;
-</tweet>
-<tweet>
-28/07/2012 : Christophe Rousset et les Talens Lyriques interprètent Phaëton
-de Lully au
-&lt;a
-href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm"
-target="_blank"
-&gt;
-festival
-de Beaune&lt;/a&gt;,
-en utilisant un &lt;a
-href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39"
-target="_blank"
-&gt;
-matériel créé avec LilyPond&lt;/a&gt;.
-</tweet>
-<tweet>
-2012.07.28: Christophe Rousset and Les Talens Lyriques play Phaëton by Lully
-at the
-&lt;a
-href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm"
-target="_blank"
-&gt;
-Beaune festival&lt;/a&gt;, using
-&lt;a
-href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39"
-target="_blank"
-&gt;
-music typeset with LilyPond&lt;/a&gt;.
-</tweet>
-<tweet>
-Schumann - &lt;a target="_blank"
-href="http://superbonus.project.free.fr/spip.php?article50"&gt;
-Album pour la Jeunesse&lt;/a&gt;, Op. 68.
-Currently in French or German, with or without
-fingering. LilyPond typeset and freely downloadable!
-</tweet>
+  <tweet>
+    The LilyPond Blog is up and running &lt;a
+    href="http://www.lilypondblog.org"&gt;here&lt;/a&gt;! Anyone can
+    follow and leave comments on the blog. To contribute,
+    contact &lt;a
+    href="mailto:janek.lilypond@gmail.com"&gt;Janek Warcho&#322;&lt;/a&gt;.
+  </tweet>
+  <tweet>
+    Adam Spiers has build a web site which uses LilyPond to dynamically
+    generate images of chords and scales called &lt;a
+    href="http://scalematcher.adamspiers.org/"&gt;Scale matcher&lt;/a&gt;.
+  </tweet>
+  <tweet>
+    Ben Lemon has created some LilyPond tutorials on YouTube.  Read
+    about them on his &lt;a
+    href="http://benlemon.me/blog/music/lilypond/operation-lilypond/"&gt;blog&lt;/a&gt;.
+  </tweet>
+  <tweet>
+    Server Acim, composer and professor of Composition and Conducting
+    in &#304;n&#246;n&#252; University - Malatya, Turkey, wrote the
+    Turkish Ebook &lt;a href="http://yadi.sk/d/fNmncSQ3DR3Ck"&gt;
+    "GNU/LilyPond, &#214;zg&#252;r Bir Nota Yazma Program&#305;"&lt;/a&gt;.
+  </tweet>
 </tweets>
index 2ed03b5350f57a843e890feb1a4fda05cfd4ca88..6b8b02c627936826d5b77fa9684a60f4f9d5d69f 100644 (file)
   note = {(@uref{http://lilypond.org/website/pdf/graham-sustainability-FOSS.pdf, PDF 333k})}
 }
 
+@inproceedings{hollerweger01,
+  title = {Lilypond: music notation for everyone!},
+  author = {Margarethe Maierhofer-Lischka & Florian Hollerweger},
+  booktitle = {Linux Audio Conference 2013 (LAC2013)},
+  year = 2013,
+  note = {(@uref{http://lilypond.org/website/pdf/lilypond_lac2013.pdf, PDF 890k})}
+}
 
index c46b13bb43f61b8e9ee40d06964a5292ce317cf1..08ecf84576a61ad79cb6923c92e01490ad9c8b00 100644 (file)
@@ -1,7 +1,5 @@
 ISOLANG = zh
 depth = ../..
-# SUBDIRS = web learning notation texidocs usage included essay extending
-SUBDIRS = web texidocs included
 STEPMAKE_TEMPLATES = documentation texinfo
 LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
 NO_PDF_FILES = 1
diff --git a/Documentation/zh/included/.gitignore b/Documentation/zh/included/.gitignore
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Documentation/zh/included/GNUmakefile b/Documentation/zh/included/GNUmakefile
deleted file mode 100644 (file)
index afe7a4d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-depth = ../../..
-
-STEPMAKE_TEMPLATES=documentation
-
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ly)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.ily)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itexi)
-EXTRA_DIST_FILES+=$(call src-wildcard,*.itely)
-
-include $(depth)/make/stepmake.make
index 844b22bccbdd87c49e06900403aef23006464e80..639cf4d778d1d3acb7ec24debc9606dc949b4c69 100644 (file)
@@ -5,20 +5,20 @@
     version that you are working on.  See TRANSLATION for details.
 
 we depend on an external entity here, which we cannot control.  Suppose
-we go from 2.16.x to 2.17.x and put the documentation under "v2.17".
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
 For some time, Google won't have the new location in its index, so the
-search would get nothing.  It would be better to keep "v2.16" in the
-search for a while and have a redirection from "v2.16" to "v2.17".
+search would get nothing.  It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
 -->
 
 <form action="http://google.com/search"
       method="get"
       name="search"
-      onSubmit="search.q.value='site:lilypond.org/doc/v2.16 '
+      onSubmit="search.q.value='site:lilypond.org/doc/v2.17 '
                + search.brute_query.value"
-      onMouseMove="search.q.value='site:lilypond.org/doc/v2.16 '
+      onMouseMove="search.q.value='site:lilypond.org/doc/v2.17 '
                   + search.brute_query.value"
-      onKeyUp="search.q.value='site:lilypond.org/doc/v2.16 '
+      onKeyUp="search.q.value='site:lilypond.org/doc/v2.17 '
               + search.brute_query.value">
   <input type="hidden" name="btnG" value="Google 搜索">
   <input type="text" name="brute_query" onfocus="this.value=''" value="搜索">
diff --git a/Documentation/zh/texidocs/GNUmakefile b/Documentation/zh/texidocs/GNUmakefile
deleted file mode 100644 (file)
index 0ffa758..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth=../../..
-
-EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc)
-
-include $(depth)/make/stepmake.make
index 7d48824e9b73e471e85371727d127be8ad017c37..ed86a34394dc6f4c8fa7cc01f3953245d40a68a5 100644 (file)
@@ -16,22 +16,24 @@ td { border: 1px solid black; text-align: center; }
 
 @end html
 @end ifhtml
-@emph{最近更新 Thu May 31 09:12:39 UTC 2012
+@emph{最近更新 Wed Dec 18 12:23:14 UTC 2013
 }
 @multitable @columnfractions  0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
 
 @headitem
-LilyPond -- 每一个人的五线谱
+LilyPond -- 人人的乐谱软件
 @tab 翻译者
-@tab 校对
+@tab 翻译校对
 @tab 已翻译
 @tab 最新
-@tab 其信息
+@tab 其信息
 @item
-标题
+章节标题
 @*
 616
 @tab Ben Luo
+@*
+Anthony Fok
 @tab 
 @tab 
 @ifhtml
@@ -47,18 +49,20 @@ LilyPond -- 每一个人的五线谱
 @ifhtml
 
 @html
-<span style="background-color: #5bff27">部分地</span>
+<span style="background-color: #1fff1f">是</span>
 @end html
 @end ifhtml
 @ifnothtml
-部分地
+是
 @end ifnothtml
-@tab pre-GDP
+@tab GDP 前
 @item
 LilyPond --- \TITLE\
 @*
 1139
 @tab Ben Luo
+@*
+Anthony Fok
 @tab 
 @tab 
 @ifhtml
@@ -74,18 +78,20 @@ LilyPond --- \TITLE\
 @ifhtml
 
 @html
-<span style="background-color: #1fff1f">是</span>
+<span style="background-color: #d587ff">不适用</span>
 @end html
 @end ifhtml
 @ifnothtml
-是
+不适用
 @end ifnothtml
-@tab pre-GDP
+@tab GDP 前
 @item
 简介
 @*
-4753
-@tab 
+4937
+@tab Ben Luo
+@*
+Anthony Fok
 @tab 
 @tab 
 @ifhtml
@@ -98,12 +104,23 @@ LilyPond --- \TITLE\
 是
 @end ifnothtml
 @tab 
-@tab pre-GDP
+@ifhtml
+
+@html
+<span style="background-color: #d587ff">不适用</span>
+@end html
+@end ifhtml
+@ifnothtml
+不适用
+@end ifnothtml
+@tab GDP 前
 @item
 下载
 @*
-1211
+1201
 @tab Ben Luo
+@*
+Anthony Fok
 @tab 
 @tab 
 @ifhtml
@@ -119,19 +136,19 @@ LilyPond --- \TITLE\
 @ifhtml
 
 @html
-<span style="background-color: #2cff20">部分地</span>
+<span style="background-color: #d587ff">不适用</span>
 @end html
 @end ifhtml
 @ifnothtml
-部分地
+不适用
 @end ifnothtml
-@tab pre-GDP
+@tab GDP 前
 @item
 手册
 @*
-1214
+1284
 @tab Ben Luo
-@tab 
+@tab Anthony Fok
 @tab 
 @ifhtml
 
@@ -146,30 +163,41 @@ LilyPond --- \TITLE\
 @ifhtml
 
 @html
-<span style="background-color: #25fe1f">部分地</span>
+<span style="background-color: #47ff24">部分</span>
 @end html
 @end ifhtml
 @ifnothtml
-部分
+部分
 @end ifnothtml
-@tab pre-GDP
+@tab GDP 前
 @item
 社区
 @*
-3006
-@tab 
+3073
+@tab Ben Luo
+@*
+Anthony Fok
 @tab 
 @tab 
 @ifhtml
 
 @html
-<span style="background-color: #dfef77">部分 (96 %)</span>
+<span style="background-color: #dfef77">部分 (97 %)</span>
 @end html
 @end ifhtml
 @ifnothtml
-部分 (96 %)
+部分 (97 %)
 @end ifnothtml
 @tab 
-@tab pre-GDP
+@ifhtml
+
+@html
+<span style="background-color: #d587ff">不适用</span>
+@end html
+@end ifhtml
+@ifnothtml
+不适用
+@end ifnothtml
+@tab GDP 前
 @end multitable
 
diff --git a/Documentation/zh/web/GNUmakefile b/Documentation/zh/web/GNUmakefile
deleted file mode 100644 (file)
index 425cc1d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-depth = ../../..
-
-LOCALSTEPMAKE_TEMPLATES = ly
-
-include $(depth)/make/stepmake.make
index a01e5abbbe98d53e93a6a2ba04eb3c86f9897336..f073b630690ed1eabd52a4d5e884f18f3f35d809 100644 (file)
@@ -834,11 +834,11 @@ manuals can be found at @url{http://lilypond.org}}
 @headitem Infrequent
 
 @item
-@docLinkSplit{Web,web,@manualDevelWebSplit}
+@docLinkSplit{Web,web,@manualDevelWebSplit-zh}
 @tab
-@docLinkBig{Web,web,@manualDevelWebBig}
+@docLinkBig{Web,web,@manualDevelWebBig-zh}
 @tab
-@docLinkPdf{Web,web,@manualDevelWebPdf}
+@docLinkPdf{Web,web,@manualDevelWebPdf-zh}
 
 @item
 @docLinkSplit{Changes,changes,@manualDevelChangesSplit}
index 512b8ef598bfc8d2e645df21415501fc2da5010f..74f255139382183558ed5e908f092cb137d19eb5 100644 (file)
@@ -6,10 +6,10 @@ SUBDIRS = python scripts \
        flower lily \
        mf ly \
        tex ps scm \
-       po make \
+       po \
        elisp vim \
        input \
-       stepmake $(documentation-dir)
+       $(documentation-dir)
 
 
 ## this convoluted construction is necessary, since we don't know the
@@ -17,7 +17,7 @@ SUBDIRS = python scripts \
 documentation-dir=$(if $(findstring no,$(DOCUMENTATION)),,Documentation)
 
 SCRIPTS = configure autogen.sh smart-autogen.sh smart-configure.sh
-README_FILES = COPYING COPYING.FDL DEDICATION ROADMAP THANKS HACKING \
+README_FILES = COPYING COPYING.FDL DEDICATION ROADMAP HACKING \
   LICENSE LICENSE.DOCUMENTATION
 TOPDOC_FILES = AUTHORS INSTALL README NEWS
 TOPDOC_TXT_FILES = $(addprefix $(top-build-dir)/Documentation/topdocs/$(outdir)/,$(addsuffix .txt,$(TOPDOC_FILES)))
@@ -26,11 +26,9 @@ IN_FILES := $(call src-wildcard,*.in)
 RELEASE_FILES = ChangeLog RELEASE-COMMIT
 RELEASE_OUT_FILES = $(RELEASE_FILES:%=$(outdir)/%)
 OUT_DIST_FILES += $(RELEASE_OUT_FILES)
-EXTRA_DIST_FILES = VERSION .gitignore .mailmap \
-  $(README_FILES) $(SCRIPTS) $(IN_FILES)
 INSTALLATION_DIR=$(local_lilypond_datadir)
 INSTALLATION_FILES=$(config_make) VERSION
-
+GENERATED_BUILD_FILES=configure aclocal.m4 autogen.sh
 # bootstrap stepmake:
 #
 STEPMAKE_TEMPLATES=toplevel po install
@@ -40,7 +38,36 @@ include $(depth)/make/stepmake.make
 
 .PHONY: test info website
 
-local-dist: refresh-release-files dist-toplevel-txt-files
+dist: local-dist $(GENERATED_BUILD_FILES) top-doc refresh-release-files .gitfilelist
+       @cd $(top-src-dir) && \
+         if test -n "`find . -name .git`" -a '(' -n "`git diff HEAD | head -1`" \
+           -o -n "`git status | grep -i untracked`" ')'; \
+         then echo "***   dist must been rolled on a clean git tree;"; \
+         echo "uncommitted changes or untracked files detected, aborting."; \
+         exit 1; fi
+       rm -rf $(distdir)
+       $(MAKE) local-dist $(distdir)
+       chmod -R a+r $(distdir)
+       chmod  a+x `find $(distdir) -type d -print`
+       $(LN) $(TOPDOC_TXT_FILES) $(distdir)
+       $(LN) $(GENERATED_BUILD_FILES:%=$(src-dir)/%) .gitfilelist $(distdir)
+       cd $(top-src-dir) && xargs $(buildscript-dir)/mass-link hard . $(distdir) <$(top-build-dir)/.gitfilelist
+       if test -n "`find $(top-src-dir) -name .git`"; then \
+         COMMIT_DATE=`git --git-dir=$(top-src-dir)/.git log -1 --format=%cD`; \
+         find $(distdir) | xargs touch -d "$$COMMIT_DATE"; fi
+       (cd ./$(depth)/$(outdir); $(TAR) -cf -  --owner=0 --group=0 $(DIST_NAME) | gzip -9 > $(DIST_NAME).tar.gz)
+       rm -rf $(distdir)
+
+ifneq ($(shell find $(top-src-dir) -name .git),)
+.gitfilelist: $(top-src-dir)/.git/index
+       cd $(top-src-dir) && git ls-files >$(top-build-dir)/$@
+local-clean-filelist:
+       rm -f .gitfilelist
+else
+.gitfilelist: $(src-dir)/.gitfilelist
+       cp $< $@
+local-clean-filelist:
+endif
 
 all: $(outdir)/VERSION
 
@@ -65,16 +92,11 @@ python-modules:
 
 top-doc: python-modules
 
-local-clean: local-clean-ChangeLog
+local-clean: local-clean-ChangeLog local-clean-filelist
 
 local-clean-ChangeLog:
        rm -f ChangeLog
 
-dist-toplevel-txt-files: top-doc
-       -mkdir -p $(distdir)
-       ln $(TOPDOC_TXT_FILES) $(distdir)
-       ln $(top-src-dir)/stepmake/aclocal.m4 $(distdir)
-
 info:
        $(foreach d, $(INFO_DIRECTORIES),$(MAKE) -C $(d) out=www info && ) true
 
@@ -285,32 +307,9 @@ test:
        $(MAKE) -C input/regression/abc2ly out=test local-test
        $(MAKE) -C input/regression/lilypond-book out=test local-test
 
-ifndef BASELINE_COMMIT
-BASELINE_COMMIT:=HEAD
-endif
-
-ifdef LILYPOND_BASELINES
-BASELINE_ARCHIVE:=$(LILYPOND_BASELINES)/baseline-$(shell git rev-list -1 $(BASELINE_COMMIT)).tar.gz
-
-test-baseline: $(BASELINE_ARCHIVE)
-       tar xzf $(BASELINE_ARCHIVE)
-       $(MAKE) test-snippets-clean
-
-$(BASELINE_ARCHIVE):
-       $(MAKE) test-baseline-create
-       tar czf $(BASELINE_ARCHIVE) input/regression/out-test-baseline \
-               input/regression/midi/out-test-baseline \
-               input/regression/musicxml/out-test-baseline \
-               input/regression/abc2ly/out-test-baseline \
-               input/regression/lilypond-book/out-test-baseline
-else
-test-baseline: test-baseline-create
-       $(MAKE) test-snippets-clean
-endif
-
-test-baseline-create:
+test-baseline:
        @if test -d .git ; then \
-               $(if $(shell git diff $(BASELINE_COMMIT)), echo "commit before base lining" && false,true) ; \
+               $(if $(shell git diff), echo "commit before base lining" && false,true) ; \
        fi
        $(MAKE)
        $(MAKE) test
@@ -319,6 +318,8 @@ test-baseline-create:
        $(MAKE) out=test -C input/regression/musicxml local-test-baseline
        $(MAKE) out=test -C input/regression/abc2ly local-test-baseline
        $(MAKE) out=test -C input/regression/lilypond-book local-test-baseline
+       $(MAKE) test-snippets-clean
+
 
 local-check: test
        rm -rf $(RESULT_DIR)
index 0bd9f80979b774e66471e651ade5fbd6df2f644b..dedfe576024d83f81c2920ae40f5313c82877dd9 100644 (file)
@@ -5,26 +5,27 @@ Table of Contents
 *****************
 
 INSTALL - compiling and installing GNU LilyPond
-  Overview of compiling
-  Requirements
-    Requirements for running LilyPond
-    Requirements for compiling LilyPond
-    Requirements for building documentation
-  Getting the source code
-  Configuring `make'
-    Running `./autogen.sh'
-    Running `../configure'
+1 Compilation
+  1.1 Overview of compiling
+  1.2 Requirements
+    1.2.1 Requirements for running LilyPond
+    1.2.2 Requirements for compiling LilyPond
+    1.2.3 Requirements for building documentation
+  1.3 Getting the source code
+  1.4 Configuring `make'
+    1.4.1 Running `./autogen.sh'
+    1.4.2 Running `../configure'
       Configuration options
       Checking build dependencies
       Configuring target directories
-  Compiling LilyPond
-    Using `make'
-    Saving time with the `-j' option
-    Compiling for multiple platforms
-    Useful `make' variables
-  Post-compilation options
-    Installing LilyPond from a local build
-    Generating documentation
+  1.5 Compiling LilyPond
+    1.5.1 Using `make'
+    1.5.2 Saving time with the `-j' option
+    1.5.3 Compiling for multiple platforms
+    1.5.4 Useful `make' variables
+  1.6 Post-compilation options
+    1.6.1 Installing LilyPond from a local build
+    1.6.2 Generating documentation
       Documentation editor's edit/compile cycle
       Building documentation
       Building a single document
@@ -32,20 +33,23 @@ INSTALL - compiling and installing GNU LilyPond
       AJAX search
       Installing documentation
       Building documentation without compiling
-    Testing LilyPond binary
-  Problems
-      Bison 1.875
-      Compiling on MacOS X
-      Solaris
-      FreeBSD
-      International fonts
-      Using lilypond python libraries
-  Concurrent stable and development versions
-  Build system
+    1.6.3 Testing LilyPond binary
+  1.7 Problems
+    Bison 1.875
+    Compiling on MacOS X
+    Solaris
+    FreeBSD
+    International fonts
+    Using lilypond python libraries
+  1.8 Concurrent stable and development versions
+  1.9 Build system
 
 
-Overview of compiling
-=====================
+1 Compilation
+*************
+
+1.1 Overview of compiling
+=========================
 
 Compiling LilyPond from source is an involved process, and is only
 recommended for developers and packagers.  Typical program users are
@@ -68,11 +72,11 @@ information, see *note Building documentation without compiling::.
 unsuccessful, though a workaround is available (see *note LilyDev:
 (lilypond-contributor)LilyDev.).
 
-Requirements
-============
+1.2 Requirements
+================
 
-Requirements for running LilyPond
----------------------------------
+1.2.1 Requirements for running LilyPond
+---------------------------------------
 
 Running LilyPond requires proper installation of the following software:
 
@@ -95,8 +99,8 @@ Running LilyPond requires proper installation of the following software:
    International fonts are required to create music with international
 text or lyrics.
 
-Requirements for compiling LilyPond
------------------------------------
+1.2.2 Requirements for compiling LilyPond
+-----------------------------------------
 
 Below is a full list of packages needed to build LilyPond.  However,
 for most common distributions there is an easy way of installing most
@@ -162,8 +166,8 @@ openSUSE, SLED                       `sudo zypper --build-deps-only
    * Type 1 utilities (http://www.lcdf.org/~eddietwo/type/#t1utils)
      (1.33 or newer recommended)
 
-Requirements for building documentation
----------------------------------------
+1.2.3 Requirements for building documentation
+---------------------------------------------
 
 You can view the documentation online at
 `http://www.lilypond.org/doc/', but you can also build it locally.
@@ -203,8 +207,8 @@ This process requires some additional tools and packages:
           xfonts-cronyx-100dpi
           xfonts-intl-.*
 
-Getting the source code
-=======================
+1.3 Getting the source code
+===========================
 
 Downloading the Git repository
 ------------------------------
@@ -250,11 +254,11 @@ of disk space.
 download and install the free-software 7zip archiver
 (http://www.7-zip.org) to extract the tarball.
 
-Configuring `make'
-==================
+1.4 Configuring `make'
+======================
 
-Running `./autogen.sh'
-----------------------
+1.4.1 Running `./autogen.sh'
+----------------------------
 
 After you unpack the tarball (or download the Git repository), the
 contents of your top source directory should be similar to the current
@@ -277,8 +281,8 @@ configuration, such as `configure', `README.txt', etc.
    We heavily recommend building lilypond inside a separate directory
 with this method.
 
-Running `../configure'
-----------------------
+1.4.2 Running `../configure'
+----------------------------
 
 Configuration options
 .....................
@@ -357,11 +361,11 @@ different types of program files.  See the full output of
 
    If you encounter any problems, please see *note Problems::.
 
-Compiling LilyPond
-==================
+1.5 Compiling LilyPond
+======================
 
-Using `make'
-------------
+1.5.1 Using `make'
+------------------
 
           Note: make sure that you are in the `build/' subdirectory of
           your source tree.
@@ -388,8 +392,8 @@ See also
    *note Generating documentation:: provides more info on the `make'
 targets used to build the LilyPond documentation.
 
-Saving time with the `-j' option
---------------------------------
+1.5.2 Saving time with the `-j' option
+--------------------------------------
 
 If your system has multiple CPUs, you can speed up compilation by
 adding `-jX' to the `make' command, where `X' is one more than the
@@ -405,8 +409,8 @@ it, try lowering the `X' value.
 difficult to determine the source of an error when one occurs.  In that
 case, running `make' without the `-j' is advised.
 
-Compiling for multiple platforms
---------------------------------
+1.5.3 Compiling for multiple platforms
+--------------------------------------
 
 If you want to build multiple versions of LilyPond with different
 configuration settings, you can use the `--enable-config=CONF' option
@@ -436,18 +440,18 @@ See also
 
    *note Installing LilyPond from a local build::
 
-Useful `make' variables
------------------------
+1.5.4 Useful `make' variables
+-----------------------------
 
 If a less verbose build output if desired, the variable `QUIET_BUILD'
 may be set to `1' on `make' command line, or in `local.make' at top of
 the build tree.
 
-Post-compilation options
-========================
+1.6 Post-compilation options
+============================
 
-Installing LilyPond from a local build
---------------------------------------
+1.6.1 Installing LilyPond from a local build
+--------------------------------------------
 
 If you configured `make' to install your local build in a directory
 where you normally have write permission (such as your home directory),
@@ -471,8 +475,8 @@ or...
 the installation directory to one that you can write to, and then
 re-install.  See *note Configuring target directories::.
 
-Generating documentation
-------------------------
+1.6.2 Generating documentation
+------------------------------
 
 Documentation editor's edit/compile cycle
 .........................................
@@ -710,8 +714,8 @@ exec /sw/bin/pngtopnm "$@"
 export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib
 exec /opt/local/bin/pngtopnm "$@"
 
-Testing LilyPond binary
------------------------
+1.6.3 Testing LilyPond binary
+-----------------------------
 
 LilyPond comes with an extensive suite that exercises the entire
 program.  This suite can be used to test that the binary has been built
@@ -727,8 +731,8 @@ been verified.
    More information on the regression test suite is found at *note
 Regression tests: (lilypond-contributor)Regression tests.
 
-Problems
-========
+1.7 Problems
+============
 
 For help and questions use <lilypond-user@gnu.org>.  Send bug reports
 to <bug-lilypond@gnu.org>.
@@ -736,7 +740,7 @@ to <bug-lilypond@gnu.org>.
    Bugs that are not fault of LilyPond are documented here.
 
 Bison 1.875
-...........
+-----------
 
 There is a bug in bison-1.875: compilation fails with "parse error
 before `goto'" in line 4922 due to a bug in bison.  To fix, please
@@ -749,7 +753,7 @@ recompile bison 1.875 with the following fix
      $ make
 
 Compiling on MacOS X
-....................
+--------------------
 
 Here are special instructions for compiling under MacOS X.  These
 instructions assume that dependencies are installed using MacPorts.
@@ -790,7 +794,7 @@ automatic font detection, add
      --with-ncsb-dir=/opt/local/share/ghostscript/fonts
 
 Solaris
-.......
+-------
 
 Solaris7, ./configure
 
@@ -805,7 +809,7 @@ or
      CONFIG_SHELL=/bin/bash bash -c ./configure
 
 FreeBSD
-.......
+-------
 
 To use system fonts, dejaview must be installed.  With the default
 port, the fonts are installed in `usr/X11R6/lib/X11/fonts/dejavu'.
@@ -817,7 +821,7 @@ for your hierarchy.)
      <dir>/usr/X11R6/lib/X11/fonts</dir>
 
 International fonts
-...................
+-------------------
 
 On Mac OS X, all fonts are installed by default.  However, finding all
 system fonts requires a bit of configuration; see this post
@@ -841,7 +845,7 @@ Debian GNU/Linux
         xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi
 
 Using lilypond python libraries
-...............................
+-------------------------------
 
 If you want to use lilypond's python libraries (either running certain
 build scripts manually, or using them in other programs), set
@@ -849,8 +853,8 @@ build scripts manually, or using them in other programs), set
 `.../usr/lib/lilypond/current/python' in the installation directory
 structure.
 
-Concurrent stable and development versions
-==========================================
+1.8 Concurrent stable and development versions
+==============================================
 
 It can be useful to have both the stable and the development versions
 of Lilypond available at once.  One way to do this on GNU/Linux is to
@@ -890,14 +894,14 @@ stable `lilypond'), and make it executable:
 
    - other compilation tricks for developers
 
-Build system
-============
+1.9 Build system
+================
 
 We currently use make and stepmake, which is complicated and only used
 by us.  Hopefully this will change in the future.
 
 Version-specific texinfo macros
-...............................
+-------------------------------
 
    * made with `scripts/build/create-version-itexi.py' and
      `scripts/build/create-weblinks-itexi.py'
diff --git a/LICENSE b/LICENSE
index 753f485dbef318b4f72e6cc55e8b01f714c7184c..e03b1e19ae24f55860ebeb92b8cf83b94074e830 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -22,13 +22,20 @@ The following exceptions apply:
   * It does not apply to ly/articulate.ly, which is only licensed
     under the GPL version 3 (not any later versions).
 
-  * If you create a document which uses fonts included in LilyPond,
-    and embed this font or unaltered portions of this font into the
-    document, then this font does not by itself cause the resulting
-    document to be covered by the GNU General Public License.  This
-    exception does not however invalidate any other reasons why the
-    document might be covered by the GNU General Public License.
-    If you modify one or more of the fonts, you may extend this
-    exception to your version of the fonts but you are not obliged
-    to do so.  If you do not wish to do so, delete this exception
-    statement from your version.
+  * The files under mf/ form a font, and this font is dual-licensed
+    under the GPL+Font exception and the SIL Open Font License (OFL).
+    A copy of the OFL is in the file LICENSE.OFL.
+
+    The font exception for the GPL stipulates the following exception:
+
+      If you create a document which uses fonts included in LilyPond,
+      and embed this font or unaltered portions of this font into the
+      document, then this font does not by itself cause the resulting
+      document to be covered by the GNU General Public License.  This
+      exception does not however invalidate any other reasons why the
+      document might be covered by the GNU General Public License.
+      If you modify one or more of the fonts, you may extend this
+      exception to your version of the fonts but you are not obliged
+      to do so.  If you do not wish to do so, delete this exception
+      statement from your version.
+
diff --git a/LICENSE.OFL b/LICENSE.OFL
new file mode 100644 (file)
index 0000000..41e80d6
--- /dev/null
@@ -0,0 +1,95 @@
+
+Copyright (c) 1996--2013, The LilyPond authors (lilypond.org) 
+with Reserved Font Name "Emmentaler" and "Feta".
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+SIL OPEN FONT LICENSE
+
+Version 1.1 - 26 February 2007
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
index c285a1cdf9713a87e260188acd3093b870b726b4..a4897e727ac00b5b1fbf4c5a0359f23be92636ea 100644 (file)
--- a/NEWS.txt
+++ b/NEWS.txt
-New features in 2.16
-********************
-
-Fixes and changes after 2.16.0
-==============================
-
-2.16.1
-     Please refer to the bug tracker for issues fixed in 2.16.1
-     (http://code.google.com/p/lilypond/issues/list?can=1&q=Fixed_2_16_1).
-
-New features in 2.16 since 2.14
-===============================
-
-   * Support for cross-staff stems on chords, using `crossStaff' and
-     the `Span_stem_engraver'.  This calculates the length of
-     cross-staff stems automatically.
-
-          [image of music]
+New features in 2.18 since 2.16
+*******************************
+
+   * There is now a new context type called `NullVoice' which, while not
+     appearing in the printed output, can be used to align lyrics.
+     This can be particularly convenient when used in parallel with a
+     `\partcombine' construct.
+
+          soprano = \relative c' { c e g c }
+          alto = \relative c' { a c e g }
+          verse = \lyricmode { This is my song }
+
+          \score {
+            \new Staff <<
+              \partcombine \soprano \alto
+              \new NullVoice = "aligner" \soprano
+              \new Lyrics \lyricsto "aligner" \verse
+            >>
+            \layout {}
+          }
+           [image of music]
 
 
-   * The syntax of words (character sequences recognized without
-     enclosing quotes) and commands (now always a backslash `\'
-     followed by a word) has been unified across all modes: it now
-     consists of alphabetic characters, possibly enclosing isolated
-     dashes `-' and underlines `_'.
+   * Several articulations can be put into a single variable or
+     returned from an event function:
 
-     As one consequence, using unquoted text scripts like (literally!)
-          { c-script c\f_script }
-     will now tend to result in invalid music.  Omitting quote marks
-     for arbitrary text rather than keywords has never been good
-     practice or even documented, and it is unlikely to have seen
-     significant use.
+          sempreStacc = -. ^\markup \italic sempre
+          \relative { c''4\sempreStacc c c c }
+           [image of music]
 
-     Staying with established conventions (like not using dashes or
-     underlines for command names intended to be used inside of music)
-     remains advisable.  The reason for this change is more robust
-     recognition of LilyPond's lexical units for LilyPond itself as
-     well as external tools interpreting its syntax.
 
-   * Support for Kievan square notation:
+   * The baseline of score markups is now taken from the reference
+     point (usually the middle of the staff) of the first bottom system
+     rather than the top of the bounding rectangle.  The following
 
-          \new KievanVoice {
-            \cadenzaOn
-            c d e f g a bes
-            \bar "kievan"
+          \markup {
+            violin: \score { \new Staff { <g d' a' e''>1 }
+                             \layout { indent=0 } } ,
+            cello: \score { \new Staff { \clef "bass" <c, g, d a> }
+                            \layout { indent=0 } }
           }
            [image of music]
 
 
-   * Augmentation dots now avoid the other voice in two-voice polyphony
-     so that users can move the `Dot_column_engraver' to set dots
-     independently for each `Voice'.
+     previously looked like
 
           [image of music]
 
 
-   * A Scheme function to adjust the control points of curves such as
-     slurs and ties, developed by several users, is now included in
-     LilyPond.
-
-          g8->( bes,-.) d4
-          \shape Slur #'((-0.5 . 1.5) (-3 . 0) (0 . 0) (0 . 0))
-          g8->( bes,!-.) d4
+     without a reliable way to get both scores to line up.
+
+   * LilyPond no longer automatically infers a `\defaultchild' context
+     in a context definition with `\accepts' clauses.  Any context
+     definition without an explicit or inherited `\defaultchild'
+     definition counts as a `Bottom' context and will be eligible for
+     rhythmic events and overrides without causing the implicit
+     creation of other contexts.  Be sure to specify a `\defaultchild'
+     for non-`Bottom' contexts when defining them from scratch.
+
+   * There is now extensive support for both discant and bass accordion
+     register symbols in the `scm accreg' module, see *note Accordion
+     Registers: (lilypond-notation)Accordion Registers.
+
+          #(use-modules (scm accreg))
+          \new PianoStaff
+          <<
+            \new Staff \relative
+            { \clef "treble"  \discant "10"
+              r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
+              \discant "121"
+              << { r16 <f bes> r <e a> r <d g> } \\
+                 { d r a r bes r } >> |
+              <cis e a>1
+            }
+            \new Staff \relative
+            { \clef "treble"  \freeBass "1"
+              r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
+              \clef "bass"  \stdBass "Master"
+              << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
+                   <e a cis>1^"a" } \\
+                 { d8_"D" c_"C" bes_"B" | a1_"A" }
+              >>
+            }
+          >>
            [image of music]
 
 
-   * Use of `\tempo' specifications in `\midi' blocks (removed in
-     2.9.16 in favor of explicit `tempoWholesPerMinute' settings) has
-     seen a revival: now any kind of property-setting music is turned
-     into context definitions within output specifications, allowing for
-     declarations like
-     \layout { \accidentalStyle modern }
-     \midi { \tempo 4. = 66 }
-
-   * The LilyPond G clef has been redesigned - upper loop is now more
-     balanced, bottom crook sticks out less and the "spine" (main
-     vertical line) is more evenly curved. The old and new versions can
-     be compared by looking at the documentation: old version
-     (http://lilypond.org/doc/v2.14/Documentation/notation/the-feta-font.html#clef-glyphs),
-     new version
-     (http://lilypond.org/doc/v2.15/Documentation/notation/the-feta-font.html#clef-glyphs).
-
-   * Lilypond's stencil commands have been simplified to allow for less
-     code duplication and better height approximations of graphical
-     objects.  The following stencil commands have been eliminated:
-        * `beam'
-
-        * `bezier-sandwich'
-
-        * `bracket'
-
-        * `dashed-slur'
-
-        * `dot'
-
-        * `oval'
-
-        * `repeat-slash'
-
-        * `zigzag-line'
-
-   * Flags are now treated as separate objects rather than as stem
-     parts.
+   * New commands `markLengthOn' and `markLengthOff' control the
+     allowance of horizontal space for tempo and rehearsal marks.
 
           [image of music]
 
 
-   * Two alternative methods for bar numbering can be set, especially
-     for when using repeated music;
+   * Rehearsal marks at the beginning of a line are now placed to the
+     right of the clef and key signature by default.  As in previous
+     versions, the `break-alignable-interface' controls the behavior.
 
           [image of music]
 
 
-   * The following is a fundamental change in LilyPond's music
-     representation: Rhythmic events like `LyricEvent' and `NoteEvent'
-     are no longer wrapped in `EventChord' unless they have been
-     actually entered as part of a chord in the input.  If you
-     manipulate music expressions in Scheme, the new behavior may
-     require changes in your code.  Calling the music function
-     `\eventChords' or the Scheme function `event-chord-wrap!'
-     converts to the old representation; using one of those might be
-     easiest for keeping legacy code operative.
-
-     The following three items are consequences of this change.
-
-   * The repetitive chord entry aid `q' has been reimplemented.
-     Repeated chords are now replaced right before interpreting a music
-     expression.  In case the user wants to retain some events of the
-     original chord, he can run the repeat chord replacement function
-     `\chordRepeats' manually.
-
-   * String numbers and right hand fingerings on single notes now appear
-     without having to be written inside of chord brackets.
-
-   * Music functions now work the same when used inside or outside of
-     chords, including all the possibilities of argument parsing.
-     Music variables can be used inside of chords: a construct like
-
-          tonic=fis'
-          { <\tonic \transpose c g \tonic> }
+   * Decimal numbers can now be written directly in music, without a
+     hash sign.  Together with the previous change in the way object
+     properties are specified, the code to change the length of stems
+     has changed from this:
+     \override Stem #'length = #5.6
+     e' f' g' a'
+     to this:
+     \override Stem.length = 5.6
+     e' f' g' a'
+
+     One has to write a digit on both sides of the dot - values like
+     `4.' or `-.3' are not allowed.
+
+     Decimal fractions are also not accepted in `\chordmode'.
+
+   * A number of shorthands like `(', `)', `|', `[', `]', `~', `\(',
+     `\)' and others can now freely be redefined like normal commands.
+     An example would be
+
+          "\\{" = (
+          "\\}" = )
+          "(" = \melisma
+          ")" = \melismaEnd
+
+          \new Staff <<
+            \relative c' {
+              c8 \{ d e f \} % slurred
+              g ( a b c ) % no slur, but with melisma
+              c,1 \bar "|."
+             }
+             \addlyrics { Li -- ly -- pond. }
+          >>
            [image of music]
 
 
-     now works as expected.  One can use `#{...#}' for constructing
-     chord constituents.  `\tweak' now works on single notes without
-     needing to wrap them in a chord.  Using it on command events and
-     lyrics is now possible, but not likely to give results yet.
+   * The articulation shorthand for `\staccatissimo' has been renamed
+     from `-|' to `-!'.
 
-   * `\tweak' now takes an optional layout object specification.  It can
-     be used for tweaking layout objects that are only indirectly
-     caused by the tweaked event, like accidentals, stems, and flags:
+   * Tempo change ranges are now written as `\tempo 4 = 60 - 68' rather
+     than `\tempo 4 = 60 ~ 68'.
 
-          <\tweak Accidental #'color #red   cis4
-           \tweak Accidental #'color #green es
-                                            g>
-           [image of music]
-
-
-   * Scheme expressions inside of embedded Lilypond (`#{...#}') are now
-     executed in lexical closure of the surrounding Scheme code.  `$'
-     is no longer special in embedded Lilypond.  It can be used
-     unconditionally in Lilypond code for immediate evaluation of Scheme
-     expressions, similar to how `ly:export' could previously be used.
-     `ly:export' has been removed.  As a consequence, `#' is now free
-     to delay evaluation of its argument until the parser actually
-     reduces the containing expression, greatly reducing the potential
-     for premature evaluation.  There are also `splicing' operators `$@'
-     and `#@' for interpreting the members of a list individually.
-
-   * To reduce the necessity for using `$', Scheme expressions written
-     with `#' are interpreted as music inside of music lists, and as
-     markups or markup lists inside of markups.
+   * Grob `OctavateEight' was renamed to `ClefModifier'.  Related
+     context properties were renamed from `xxxOctavationyyy' to
+     `xxxTranspositionyyy'.
 
-   * Support for jazz-like chords has been improved: Lydian and altered
-     chords are recognised; separators between chord modifiers are now
-     treated independently of separators between "slash" chords and
-     their bass notes (and by default, slashes are now only used for
-     the latter type of separator); additional pitches are no longer
-     prefixed with "add" by default; and the "m" in minor chords can be
-     customized.  *note Customizing chord names:
-     (lilypond-notation)Customizing chord names. for more information.
+   * There is a new `\absolute' command explicitly marking music as
+     being entered in absolute pitch.  While this has been the default
+     previously, an explicit `\absolute' also prevents reinterpretation
+     when the passage is placed inside of `\relative':
 
-   * The `\markuplines' command has been renamed to `\markuplist' for a
-     better match with its semantics and general Lilypond nomenclature.
+          \relative c { c'4 \absolute { f'' g'' } c }
+           [image of music]
 
-   * The interface for specifying string tunings in tablature has been
-     simplified considerably and employs the scheme function
-     `\stringTuning' for most purposes.
 
-   * Beams can now have their slopes preserved over line breaks.
+   * When `\relative' is used without an explicit reference pitch, the
+     reference pitch now is the middle of the first octave, making the
+     first entered pitch indistinguishable from absolute pitch.
+     Previously, omitting the reference pitch would have lead to a
+     default of `c''.  Since that choice was somewhat arbitrary,
+     recommended usage was to always specify the reference pitch.
 
-          [image of music]
+   * A new command `\single' can be used for converting a property
+     override into a tweak to be applied on a single music expression:
 
+          <a \single\voiceTwoStyle e' a>1
+           [image of music]
 
-     To do this, several callback functions are now deprecated.
-        * `ly:beam::calc-least-squares-positions'
 
-        * `ly:beam::slope-damping'
+   * Two ways of letting graphical objects not appear in the output are
+     overriding its `transparent' property with `#t' (retaining the
+     original spacing) or overriding its `stencil' property with `#f'
+     (not using any space at all).  Those two operations now have the
+     shorthands `\hide' and `\omit', respectively.  They can either be
+     given a music expression to tweak, or the name of a graphical
+     object for which an override should be created (for specifying
+     both, use `\single' on the override form):
 
-        * `ly:beam::shift-region-to-valid'
-     Furthermore, `ly:beam::quanting' now takes an additional argument
-     to help calculations over line breaks.  All of these functions are
-     now automatically called when setting the `positions' parameter.
+          \new Staff \with { \omit Clef }
+          \relative c'' <a e' \hide a>1
+           [image of music]
 
-   * In function arguments music, markups and Scheme expressions (as
-     well as several other syntactic entities) have become mostly
-     interchangeable and are told apart only by evaluating the
-     respective predicate.  In several cases, the predicate is
-     consulted by the parser, like when deciding whether to interpret
-     `-3' as a number or a fingering event.
 
-   * Music functions (and their close relatives) can now be defined with
-     optional arguments.
+   * A new command `\temporary' can be applied to overrides in order to
+     not have them replace previous property settings.  If a `\revert'
+     is applied to the same property subsequently, the previous setting
+     reappears:
 
-   * For defining commands executed only for their side-effects,
-     `define-void-function' is now available.
+          \override NoteHead.color = #red c4
+          \override NoteHead.color = #green d
+          \revert NoteHead.color e2
+          \override NoteHead.color = #red c4
+          \temporary\override NoteHead.color = #green d
+          \revert NoteHead.color e
+          \revert NoteHead.color c
+           [image of music]
 
-   * There is a new `define-event-function' command in analogy to
-     `define-music-function' that can be used for defining music
-     functions acting as post events without requiring a direction
-     specifier (`-', `^', or `_') placed before them.
 
-          dyn=#(define-event-function (parser location arg) (markup?)
-                   (make-dynamic-script arg))
-          \relative c' { c\dyn pfsss }
+     This is mainly useful for writing music functions that need to
+     have some property changed just for the duration of the function.
+
+   * `\tag', `\removeWithTag', and `\keepWithTag' can now accept a list
+     of symbols rather than just a single symbol for marking, removing,
+     and keeping music with any of multiple tags.  This is particularly
+     important for `\keepWithTag' since one cannot achieve the same
+     effect by using multiple consecutive `\keepWithTag' commands.
+
+   * The `-d old-relative' option has been removed.  Not actually
+     accessible from the command line any more, its remaining use was
+     for interpretating `\relative' in LilyPond files converted
+     automatically from version 1.8 or older.  It is unclear how much
+     of this was actually still operative.
+
+   * The meaning of `instrumentTransposition' has been reversed.  After
+     \set instrumentTransposition = #{ b #}
+     a written `c'' now sounds like `b'.  Previously, this would have
+     been the other way round.  This and the following change should
+     make dealing with transposing instruments more straightforward.
+
+   * The music generated by `\set' and `\override' commands is no
+     longer affected by `\transpose'.  The main consequence is that
+     `\transpose' will transpose audible/concert pitch and printed
+     pitch by the same amount even when the transposed music contains
+     `\transposition'.  Previously,
+     \transpose c' f' \transposition bes'
+     was equivalent to `\transposition f''.  Now it stays equivalent to
+     `\transposition bes''.
+
+   * When checking for collisions, LilyPond no longer treats objects as
+     rectangles.  Instead, the actual shape of objects is approximated
+     using an integral-like approach.  This generally results in more
+     even and snug positioning of objects and systems:
+
+     [image of music]
+
+     Previously, the above snippet looked like this:
+
+     [image of music]
+
+     Affected objects include `Accidentals', `Beams', `Clefs',
+     `Dynamics', `FiguredBass', `Flags', `Glissandos', `Lyrics',
+     `MetronomeMarks', `OttavaBrackets', `Pedals', `RehearsalMarks',
+     `Rests', `Scripts', `TextScripts', `Ties', `Tuplets' and
+     `VoltaBrackets'.
+
+   * Tuplets are now created with the `\tuplet' command, which takes a
+     fraction `T/N' to specify that T notes are played in the time
+     usually allowed for N. One `\tuplet' command can create several
+     tuplet groups if their duration is typed after the fraction.
+
+          \tuplet 3/2 { c8 d e } \tuplet 3/2 { f e d } c2
+          \tuplet 3/2 4 { c8 d e f e d } c2
            [image of music]
 
 
-   * A list of ASCII aliases for special characters can be included.
-
-          \paper {
-            #(include-special-characters)
+     The `\times' command with its inverted fraction order `N/T' is
+     still available.
+
+   * Introducing two new markup-commands; `\draw-dashed-line' and
+     `\draw-dotted-line'.
+
+     The dashed-line extends to the whole length given by DEST, if
+     `full-length' is set to `#t' (this is the default) without any
+     space at the beginning or end.  `off' will then be altered to fit.
+     To insist on the given (or default) values of `on', `off' use
+     `\override #'(full-length . #f)'.  Manual settings for `on', `off'
+     and `phase' are possible.
+
+     The dotted-line always extends to the whole length given by DEST,
+     without any space at the beginning or end.  Manual settings for
+     `off' are possible to get larger or smaller space between the dots.
+     The given (or default) value of `off' will be altered to fit the
+     line-length.
+
+          \markup {
+            \draw-dashed-line #'(5.1 . 2.3)
+            \override #'(on . 0.3)
+            \override #'(off . 0.5)
+            \draw-dashed-line #'(5.1 . 2.3)
+            \draw-dotted-line #'(5.1 . 2.3)
+            \override #'(thickness . 2)
+            \override #'(off . 0.2)
+            \draw-dotted-line #'(5.1 . 2.3)
           }
-          \markup "&bull; &dagger; &copyright; &OE; &ss; &para;"
            [image of music]
 
 
-   * There is a new `define-scheme-function' command in analogy to
-     `define-music-function' that can be used to define functions
-     evaluating to Scheme expressions while accepting arguments in
-     Lilypond syntax.
-
-   * The construct `#{ ... #}' can now be used not just for
-     constructing sequential music lists, but also for pitches
-     (distinguished from single note events by the absence of a
-     duration or other information that can't be part of a pitch),
-     single music events, void music expressions, post events, markups
-     (mostly freeing users from having to use the `markup' macro),
-     markup lists, number expressions, context definitions and
-     modifications, and a few other things.  If it encloses nothing or
-     only a single music event, it no longer returns a sequential music
-     list but rather a void music expression or just the music event
-     itself, respectively.
-
-   * Pitches can be used on the right side of assignments.  They are
-     distinguished from single note events by the absence of a duration
-     or other information that can't be part of a pitch.
-
-   * New command-line option `--loglevel=LEVEL' to control how much
-     output LilyPond creates. Possible values are ERROR, WARN,
-     BASIC_PROGRESS, PROGRESS, DEBUG.
+   * Starting with version 2.17.10, error messages or the `textedit'
+     URI used for point-and-click functionality specify column numbers
+     starting with 1 rather than 0.  The byte offset (also part of
+     `textedit' URIs) still starts at 0.
 
-   * `\once \set' now correctly resets the property value to the
-     previous value.
+   * The `\clef' command supports optional transposition:
 
-          [image of music]
-
-
-   * The alignment of dynamic spanners (hairpins, text crescendo, etc.)
-     is now automatically broken if a different direction is explicitly
-     given.
-
-          [image of music]
-
-
-   * Appoggiaturas and acciaccaturas now also work inside a slur, not
-     only inside a phrasing slur. Also, a function `\slashedGrace' was
-     added that does not use a slur from the acciaccatura note.
-
-          [image of music]
+          \clef "treble_(8)"
+          c2 c
+          \clef "bass^[15]"
+          c2 c
+           [image of music]
 
 
-   * To suppress the line on a crescendo text spanner (and other
-     similar spanners), LilyPond now fully supports the `#'style =
-     #'none' property.
+   * The LilyPond syntax of dot-separated words `Voice.Accidental' has
+     been made interchangeable with `#'(Voice Accidental)', a Scheme
+     list of symbols.  As one result, code like
+     \override Voice.TextSpanner #'(bound-details left text) = "rit."
+     is now equivalent to
+     \override Voice.TextSpanner bound-details.left.text = "rit."
+     or even
+     \override #'(Voice TextSpanner) bound-details.left.text = "rit."
+
+   * Grob and grob property path no longer need to be specified as two
+     separate arguments to commands like `\override' and `\revert',
+     allowing for the syntax
+     \override Voice.TextSpanner.bound-details.left.text = "rit."
+     Since complementary music functions like `\overrideProperty'
+     cannot support forms with and without separating space at the same
+     time, using a single dotted path is now the preferred form.
+     Specifying grob path and grob property path separately, currently
+     still supported with `\override' and `\revert' for compatibility
+     reasons, is deprecated.
+
+   * Due to words now being accepted as symbol function arguments, the
+     interfaces of `\accidentalStyle', `\alterBroken', `\footnote' and
+     `\tweak' had to be redesigned where optional symbol arguments were
+     involved.  Please check the respective music function
+     documentation for details.
+
+   * Several commands now accept symbol lists (conveniently entered as
+     dot-separated words) for various kinds of arguments.  These
+     include `\accidentalStyle', `\alterBroken', `\footnote', `\hide',
+     `\omit', `\overrideProperty', `\shape', and `\tweak'.
+
+   * The bar line user interface has changed. Bar glyphs now resemble
+     the appearance of the bar line, so a left repeat sign has to be
+     coded as `.|:'. The command `\defineBarLine' provides an easy way
+     to define additional bar line styles.
+
+   * Accidentals in the key signature may be printed in octaves other
+     than their traditional positions, or in multiple octaves.
 
           [image of music]
 
 
-   * LilyPond.app now supports MacOS X 10.7, thanks Christian Hitz!
-
-   * Glissandi can now span multiple lines.
-
 
 
 \1f
diff --git a/ROADMAP b/ROADMAP
index 99ad6b7fb6afe707b9079195a50a8a4f1fbc0f0a..2616c11c164380b3fe7f57a8458a69e9ac8fa7e8 100644 (file)
--- a/ROADMAP
+++ b/ROADMAP
@@ -78,6 +78,7 @@ LilyPond's source files.
 |
 |   SCRIPTS:
 |
+|-- config/              Autoconf helpers for configure script
 |-- python/              Python modules, MIDI module
 |   `-- auxiliar/        Python modules for build/maintenance
 |-- scripts/             End-user scripts (--> lilypond/usr/bin/)
diff --git a/THANKS b/THANKS
deleted file mode 100644 (file)
index 783d75f..0000000
--- a/THANKS
+++ /dev/null
@@ -1,820 +0,0 @@
-Release 2.16
-************
-
-For information about the various official or semi-official positions,
-check out <URL:http://lilypond.org/authors.html>
-
-The following are registered as having authored changes to the
-repository of LilyPond since 2.14.2:
-
-Adam Spiers
-Alberto Simoes
-Aleksandr Andreev
-Anthony Fok
-Arnold Theresius
-Benkő Pál
-Bertrand Bordage
-Carl D. Sorensen
-Choan Gálvez
-Colin Campbell
-Daisuke Yamashita
-David Kastrup
-David Nalesnik
-Dénes Harmath
-Federico Bruni
-Francisco Vila
-Frédéric Bron
-Graham Breed
-Graham Percival
-Han-Wen Nienhuys
-Heikki Tauriainen
-Ian Hulin
-James Lowe
-Jan Nieuwenhuizen
-Jan-Peter Voigt
-Janek Warchoł
-Jean-Charles Malahieude
-Joe Neeman
-John Mandereau
-Joseph Wakeling
-Julien Rioux
-Karin Hoethker
-Keith OHara
-Marc Hohl
-Markus Oehme
-Matthias Kilian
-Michael Welsh Duggan
-Mike Solomon
-Neil Puttock
-Nicolas Sceaux
-Patrick McCarty
-Patrick Schmidt
-Pavel Roskin
-Peter Chubb
-Phil Holmes
-Piers Titus van der Torren
-Reinhold Kainhofer
-Rodolfo Zitellini
-Seafire
-Stefan Weil
-Sven Axelsson
-Thomas Morley
-Till Rettig
-Trevor Daniels
-Valentin Villenave
-Werner Lemberg
-Wol
-Yoshiki Sawada
-Łukasz Czerwiński
-
-
-Release 2.13
-************
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys   - Core development
-Jan Nieuwenhuizen  - Core development
-Graham Percival    - Release Meister
-Valentin Villenave - LSR Editor and Bug Meister
-Mats Bengtsson     - Support Guru
-John Mandereau     - Translation Meister
-Trevor Daniels     - Documentation Editor
-
-CONTRIBUTORS
-
-Carl Sorensen      - Fret diagrams
-Jonathan Kulp      - Documentation Patches
-Ralph Palmer       - Documentation Indexing
-
-TRANSLATORS
-
-Francisco Vila
-Jean-Charles Malahieude
-Till Rettig
-Yoshiki Sawada
-
-FROGS
-
-Carl Sorensen     - Frog meister
-Andrew Hawryluk
-Andrew Wilson
-Marek Klein
-Ian Hulin
-Frédéric Bron
-Hajo Dezelski
-Kieren MacMillan
-
-
-BUG HUNTERS/SUGGESTIONS
-
-Chris Liddell
-Chris Snyder
-David Kastrup
-Karim Haddad
-Mark Polesky
-Martin Tarenskeen
-Michael Käppler
-Nick Payne
-
-
-Release 2.12
-************
-
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys   - Core development
-Jan Nieuwenhuizen  - Core development
-Joe Neeman         - Core development
-Graham Percival    - Documentation Editor and Bug Meister
-Valentin Villenave - LSR Editor and Bug Meister
-Mats Bengtsson     - Support Guru
-John Mandereau     - Translation Meister
-
-
-CONTRIBUTORS
-
-Rune Zedeler
-Maximilian Albert
-Milan Zamazal
-Reinhold Kainhofer - musicxml2ly development
-Erlend Aasland
-Stan Sanderson     - Regression Checker
-Neil Puttock
-
-
-GRAND DOCUMENTATION PROJECT
-
-Trevor Daniels     - Assistant Documentation Editor
-Andrew Hawryluk    - NR work
-Carl Sorensen      - NR work
-Eyolf Østrem       - NR work
-Francisco Vila     - NR work
-Jay Hamilton       - NR work
-Jonathan Kulp      - NR work
-Joseph Harfouch    - NR work
-Patrick McCarty    - NR work
-Ralph Palmer       - NR work
-Till Rettig        - NR work
-Kurt Kroon         - Glossary Updates, NR work
-Alard de Boer      - Formatting
-Michael Rasmussen  - Formatting
-Trevor Bača        - Inspirational Headwords
-Reinhold Kainhofer - Technical Aid
-Neil Puttock       - Snippet Editor, Technical Aid
-
-
-TRANSLATORS
-
-Clytie Siddall
-Damien Heurtebise
-Francisco Vila
-Heikki Junes
-Jean-Charles Malahieude
-John Mandereau
-Matthieu Jacquot
-Nicolas Klutchnikoff
-Till Rettig
-Valentin Villenave
-
-
-SPONSORS
-
-Mike Amundsen
-Trevor Bača
-
-
-BUG HUNTERS/SUGGESTIONS
-
-Adam James Wilson
-Alard de Boer
-Alex Rolex
-Andy Haupt
-Arvid Grøtting
-Bertalan Fodor
-Benjamin Drung
-Cameron Horsburgh
-Carl Sorensen
-Christian Hitz
-Christian Herzberg
-David Bobroff
-David Griffel
-Daniel Hulme
-Daniel Johnson
-Dominic Neumann
-Eduardo Vieira
-Frédéric Chiasson
-Georg Dummer
-Georg Romstorfer
-Gilles Thibault
-Hernán J. González
-Hu Haipeng
-Jay Anderson
-James Kilfinger
-Jean-Marie Mouchel
-Jean-Yves Baudais
-Jesús Guillermo Andrade
-Jonathan Henkelman
-Kazuhiro Suzuki
-Kevin Dalley
-Laura Conrad
-Luc Wehli
-Maarten Hijzelendoorn
-Marc Lanoiselée
-Mark Polesky
-Matthieu Jacquot
-Matthijs Frankeno
-Martijn Vromans
-Marnen Laibow-Koser
-Maximilian Albert
-Mirosław Doroszewski
-Mike Coleman
-Neil Puttock
-Nicolas Mayencourt
-Nicolas Sceaux
-Orm Finnendahl
-Peter Budny
-Phillip Kirlin
-Pierre-Emmanuel Brame
-Ralph Palmer
-Renaud Flavigny
-Rick Hansen
-Risto Vääräniemi
-Robin Bannister
-Roland Goretzki
-Rune Zedeler
-Ruud van Silfhout
-Sean Reed
-Steven Weber
-Tomas Sauer
-Thomas Scharkowski
-Trevor Bača
-Vivian Barty-Taylor
-Werner Lemberg
-Wilbert Berendsen
-William Oram
-Yota Moteuchi
-Zack Charter
-Zoltan Selyem
-
-
-
-Release 2.10
-************
-
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys  - Core development
-Jan Nieuwenhuizen - Core development
-Graham Percival   - Documentation Editor and Bug Meister
-John Mandereau    - Translation Meister
-Mats Bengtsson    - Support Guru 
-
-
-CONTRIBUTORS
-
-Angelo Contardi
-David Feuer
-Erik Sandberg
-Erlend Aasland
-Guido Amoruso
-Heikki Junes
-Joe Neeman
-John Mandereau
-
-
-TRANSLATORS
-
-Frédéric Chiasson
-Gauvain Pocentek
-Jean-Charles Malahieude
-John Mandereau
-Ludovic Sardain
-Nicolas Grandclaude
-Valentin Villenave
-
-
-SPONSORS
-
-Andrew Sidwell
-Anthony Youngman 
-Chris Sawer
-David Griffel
-Jamie Bullock
-Kieren MacMillan
-Michael Meixner 
-Paul Scott
-Rick Hansen
-Steve Doonan
-Trent Johnston
-Trevor Bača
-Vivian Barty-Taylor
-William Wilson
-
-DOCUMENTATION HELPERS
-
-Cameron Horsburgh
-Dave Luttinen
-Eduardo Vieira
-Erlend Aasland
-Geoff Horton
-Juergen Reuter
-
-
-BUG HUNTERS/SUGGESTIONS
-
-Albert Frantz
-Arvid Grøtting
-Anthony Youngman
-Aurèle Duda
-Ben Hoefer
-Bernie Arai
-Cameron Horsburgh
-Charles Cave
-Christian Hitz
-Christopher Ellis
-Claude Routhier
-Colin Wilding
-Daniel Tonda Castillo
-David Rogers
-Francisco Vila
-Harald Wellmann
-Henrik Frisk
-Hernán J. González 
-Johannes Schindelin
-John Williams
-J. Leung
-Karim Haddad
-Karl Hammar
-Keith Packard
-Kieren MacMillan
-Lee T. Wilkirson
-Lieke van der Meer
-Luc Wehli
-Manuzhai
-Mark Dewey
-Marcus Macauley
-Markus Schneider
-Matti Aaltonen
-Michael Meixner
-Michael Welsh Duggan
-Milan Zamazal
-Orm Finnendahl
-Paul Scott
-Phillip Kirlin
-Quentin Spencer
-Rainer Typke
-Rick Hansen
-Rutger Helmers
-Ruud van Silfhout
-Sietse Brouwer
-Stephen Carter
-Stephen Kress
-Thies Albrecht
-Toine Schreurs
-Trent Johnston
-Trevor Bača
-Trevor Daniels
-Vaclav Smilauer
-Vicente Solsona Dellá
-Victor Eijkhout
-Villum Sejersen
-Werner Lemberg
-Will Oram
-Zoltan V. Laszlo
-
-Release 2.8
-***********
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys  - Core development
-Jan Nieuwenhuizen - Core development
-Erik Sandberg     - Bug Meister
-Pedro Kroger      - Build Meister
-Graham Percival   - Documentation Editor
-Mats Bengtsson    - Support Guru 
-
-CONTRIBUTORS
-
-Erlend Aasland
-Heikki Junes
-Joe Neeman
-Johannes Schindelin
-Nicolas Sceaux
-Werner Lemberg
-Yoshinobu Ishizaki
-
-
-SPONSORS
-
-Aaron Mehl
-Basil Crow
-Bertalan Fodor
-Christian Ebert
-Henrik Frisk
-Jay Hamilton
-Jamie Bullock
-John Mandereau
-D. Josiah Boothby
-Kieren MacMillan
-Kris Shaffer
-Mark van den Borre
-Mike Rolish
-Muziekacademie Lede
-Nancho Alvarez
-Nicolas Sceaux
-Sean Reed
-Steve Doonan
-Sven Axelsson
-Trent Johnston
-Trevor Bača
-Vicente Solsona Dellá
-Yoshinobu Ishizaki   
-
-
-BUG HUNTERS/SUGGESTIONS
-
-Alan Stern
-Andrea Valle
-Bertalan Fodor
-Bob Broadus
-Bruce Fairchild
-Cameron Horsburgh
-Chris Sawer
-Christian Ebert
-Christian Hitz
-Darius Blasband
-David Bobroff
-David Raleigh Arnold
-Donald Axel
-Don Blaheta
-Dunstan Vavasour
-Edward Neeman
-Eduardo Vieira
-Ernesto Gancedo
-François Vion
-Frédéric Bron
-Geoff Horton
-Gianluca D.
-Hans Forbrich
-Hoang Nguyen
-Joe Neeman
-Jordi Nadal
-Jukka Akkanen
-Kieren Richard MacMillan
-Lambros Lambrou
-Laura Conrad
-Libero Mureddu
-Marcus Macauley
-Mark Steinheuser
-Matevž Jekovec
-Michael Kiermaier
-Michael Welsh Duggan
-Milan Zamazal
-Nicolas Mayencourt
-Orm Finnendahl
-Patrick K Welton
-Paul Scott
-Ralph Little
-Richard Schoeller
-Robert Vlasaty
-Roman Kurakin
-Russell Lang
-Scott Russell
-Sean Reed
-Seng Liang
-Steve Doonan
-Steven Weber
-Sven Axelsson
-Thomas Scharkowski
-Thomas Bushnell BSG
-Toine Schreurs
-Trent Johnston
-Trevor Bača
-Vicente Solsona Dellá
-Vincenzo Colonnella
-Werner Lemberg
-Will Oram
-Wolfgang Hoffmann
-
-Release 2.6
-***********
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys  - Core development
-Jan Nieuwenhuizen - Core development
-Erik Sandberg     - Bug Meister
-Pedro Kroger      - Build Meister
-Graham Percival   - Documentation Editor
-
-CONTRIBUTORS
-
-Andreas Scherer
-Arno Waschk
-Bertalan Fodor
-Carl Sorensen
-Christian Hitz
-David Jedlinsky
-Erlend Aasland
-Heikki Junes
-John Williams
-Jonatan Liljedahl
-Jürgen Reuter
-Mats Bengtsson
-Matthias Neeracher
-Mathieu Giraud
-Nicolas Sceaux
-Pal Benko
-Sebastiano Vigna
-Tatsuya Ono
-Vicente Solsona Della
-Werner Lemberg
-Yuval Harel
-
-TRANSLATORS
-
-Abel Cheung
-John Mandereau
-Olcay Yıldırım
-Roland Stigge
-Steven Michael Murphy
-
-
-WEBSITE TRANSLATORS
-
-Gauvain Pocentek
-Jean-Charles Malahieude
-John Mandereau
-Tineke de Munnik
-
-
-SPONSORS
-
-Bertalan Fodor
-Chris Sawer
-Gunther Strube
-Hans Forbrich
-Jonathan Walther
-Marcus Macauley
-Steve Doonan
-
-BUG HUNTERS/SUGGESTIONS
-
-Alexandre Beneteau
-Andreas Scherer
-Anthony W. Youngman
-Antti Kaihola
-Arjan Bos
-David Bobroff
-Bernard Hurley
-Bruce Fairchild
-Bruce McIntyre
-Daniel Johnson
-David Rogers
-Dylan Nicholson
-Ed Jackson
-Erik Ronström
-Fernando Pablo Lopez-Lezcano
-Gilles Sadowski
-Pothárn Imre
-Jack O'Quin
-Jeff Smith
-Johannes Schindelin
-John Mandereau
-Jose Miguel Pasini
-Josiah Boothby
-Juergen Reuter
-Karl Hammar
-Laura Conrad
-Olivier Guéry
-Paul Scott
-Richard Schoeller
-Rob Platt
-Roman Stöckl-Schmidt
-Russ Jorgensen
-Simon Bailey
-Stephen McCarthy
-Sven Axelsson
-Tapio Tuovila
-Tom Cato Amundsen
-Tyler Eaves
-Will Oram
-Wolfgang Hoffmann
-
-
-Release 2.4
-***********
-
-DEVELOPMENT TEAM
-
-Han-Wen Nienhuys  - Core development
-Jan Nieuwenhuizen - Core development
-Erik Sandberg     - Bug Meister
-Pedro Kroger      - Build Meister
-Graham Percival   - Documentation Editor
-
-
-CONTRIBUTORS
-
-Carl Sorensen
-David Svoboda
-Guy Gascoigne-Piggford
-Heikki Junes
-Hendrik Maryns
-Kristof Bastiaensen
-Lisa Opus Goldstein
-Mats Bengtsson
-Michael Welsh Duggan
-Peter Lutek
-Werner Lemberg
-
-BUG HUNTERS/SUGGESTIONS
-
-
-Antti Kaihola
-Bertalan Fodor
-Brian Clements
-Christian Hitz
-Christoph Ludwig
-Christophe Papazian
-Daniel Berjón Díez
-Dave Phillips
-David Bobroff
-David Brandon
-Doug Asherman
-Ed Jackson
-Fernando Pablo Lopez-Lezcano
-Heinz Stolba
-Jack O'Quin
-Jefferson dos Santos Felix
-Karl Hammar
-Marco Gusy
-Martin Norbäck
-Matthias Neeracher
-Maurizio Tomasi
-Michael Kiermaier
-Pascal Legris
-Peter Rosenbeck
-Russ Ross
-Stephen Pollei
-Thomas Scharlowski
-Will Oram
-Yuval Harel
-
-
-Release 2.2
-***********
-
-HEAD HACKERS
-
-Han-Wen Nienhuys
-Jan Nieuwenhuizen
-
-CONTRIBUTORS
-
-David Bobroff
-Edward Sanford Sutton
-Heikki Junes
-Nicolas Sceaux
-
-BUG HUNTERS/SUGGESTIONS
-
-Alexandre Beneteau
-Andrew McNabb
-Atte Andre Jensen 
-Bertalan Fodor
-Bruce McIntyre
-Dave Symonds
-David Bobroff
-Darius
-Delma Avers
-Doug Linhardt
-Eric Wurbel
-Erik Sandberg
-Ferenc Wagner
-Hans Forbrich
-John Williams
-José Luis Cruz
-Jürgen Reuter
-Kieren Richard MacMillan
-Laurent Martelli
-Mats Bengtsson
-Matthias Kilian
-Nancho Alvarez
-Nick Busigin
-Nicolas Sceaux 
-Olivier Guéry
-Patrick Atamaniuk
-Paul Scott
-Pawel D
-Pedro Kroger
-Ray McKinney
-Reuben Thomas
-Robert Vlasaty
-Stef Epardaud
-Thomas Willhalm
-Thomas Scharkowski
-Tom Bäckström
-Werner Lemberg
-Will Oram
-
-
-Release 2.0
-***********
-
-HEAD HACKERS
-
-Han-Wen Nienhuys
-Jan Nieuwenhuizen
-
-CONTRIBUTORS
-
-Mats Bengtsson
-Heikki Junes
-Jürgen Reuter
-
-BUG HUNTERS/SUGGESTIONS
-
-Antonio Palama
-Benjamin Milde
-Daniel Berjon Diez
-David Bobroff
-David Rayleigh Arnold
-Erik Ronstroem
-Fabio dos Santos
-Fodor Bertalan 
-Frederic Bron
-Graham Percival
-Ian Bailey-Mortimer
-John Williams
-Josza Marton
-Marco Caliari
-Matthieu Amiguet
-Michael Welsh Duggan
-Patrick Atamaniuk
-Paul Scott
-Pedro Kroeger
-Peter Lutek
-Richard Schoeller
-Thorkil Wolvendans
-Werner Trobin 
-
-
-Release 1.8
-***********
-
-HEAD HACKERS
-
-Han-Wen Nienhuys
-Jan Nieuwenhuizen
-
-CONTRIBUTORS
-
-Graham Percival
-Heikki Junes
-Jügen Reuter
-Kim Shrier
-Rune Zedeler
-Werner Lemberg
-
-
-BUG HUNTERS
-
-Amelie Zapf
-Andrew Schaaf
-Atte Andre Jensen
-Bob Harrington
-Chris Jackson
-Chris Sawer
-David Bobroff
-Erik Sandberg
-Fernando Pablo Lopez-Lezcano
-Hans Kieserman
-Jeremie Lumbroso
-John Potelle
-John Williams
-Karl Berry
-Karl-Johan Karlsson 
-Klaus Zimmermann
-Koblinger Egmont
-Paul Scott
-Pedro Kroger
-Richard Shann
-Roland Stigge
-Ryan O'Neil
-Simon Bailey
-Simon Weatherill
-Stanislav Brabec
-Thomas Rijniers
-Werner Lemberg
-Yotam Medini
-
-
-#Local variables:
-#coding: utf-8
-#End:
-
diff --git a/VERSION b/VERSION
index 808c65e8887dd7727659376a45f87a7903c3c9e9..a8308362647f07a1ef05e08e32c3aeff017de94d 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
-MINOR_VERSION=16
-PATCH_LEVEL=2
+MINOR_VERSION=18
+PATCH_LEVEL=0
 MY_PATCH_LEVEL=
-VERSION_STABLE=2.16.1
-VERSION_DEVEL=2.17.9
+VERSION_STABLE=2.18.0
+VERSION_DEVEL=2.17.97
index 682b6b1bd15e22504106c520493900346a541f34..c9f0093381604ad131867608ef50e772de949f45 100644 (file)
@@ -1,5 +1,5 @@
 dnl aclocal.m4   -*-shell-script-*-
-dnl StepMake subroutines for configure.in
+dnl StepMake subroutines for configure.ac
 
 
 ### mostly interal macros
@@ -140,7 +140,7 @@ AC_DEFUN(STEPMAKE_CHECK_VERSION_UNSUPPORTED, [
     fi
 ])
 
-### Macros to build configure.in
+### Macros to build configure.ac
 
 
 AC_DEFUN(STEPMAKE_BIBTEX2HTML, [
@@ -304,9 +304,6 @@ AC_DEFUN(STEPMAKE_GXXCODEGENBUG, [
 
 
 AC_DEFUN(STEPMAKE_DATADIR, [
-    if test "$datadir" = "\${prefix}/share"; then
-           datadir='${prefix}/share'
-    fi
     presome=${prefix}
     if test "$prefix" = "NONE"; then
        presome=${ac_default_prefix}
@@ -314,7 +311,7 @@ AC_DEFUN(STEPMAKE_DATADIR, [
     
     build_package_datadir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/share/$package
     
-    DATADIR=`echo ${datadir} | sed "s!\\\${datarootdir}!${prefix}/share!"`
+    DATADIR=`echo ${datadir} | sed "s!\\\${datarootdir}!${presome}/share!"`
     DATADIR=`echo ${DATADIR} | sed "s!\\\${prefix}!$presome!"`
     BUILD_PACKAGE_DATADIR=`echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!"`
     
@@ -327,11 +324,14 @@ AC_DEFUN(STEPMAKE_DATADIR, [
 
 ## ugh: cut & paste programming from datadir. 
 AC_DEFUN(STEPMAKE_LIBDIR, [
-
-    if test "$libdir" = "\${exec_prefix}/lib"; then
-       libdir='${exec_prefix}/lib'
+    presome=${exec_prefix}
+    if test "$presome" = "NONE"; then
+           presome=${prefix}
+    fi
+    if test "$presome" = "NONE"; then
+           presome=${ac_default_prefix}
     fi
-    presome=$exec_prefix
+
     build_package_libdir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/lib/$package
     
     LIBDIR=`echo ${libdir} | sed "s!\\\${exec_prefix}!$presome!"`
@@ -377,7 +377,7 @@ AC_DEFUN(STEPMAKE_END, [
     
     if test -n "$OPTIONAL"; then
        echo
-        echo "WARNING: Please consider installing optional programs: $OPTIONAL"
+        echo "WARNING: Please consider installing optional programs or files: $OPTIONAL"
     fi
 
     if test -n "$REQUIRED"; then
@@ -562,8 +562,44 @@ AC_DEFUN(STEPMAKE_GETTEXT, [
 ])
 
 
+# Check for guile, between minimum ($2) and maximum version ($3).
+# If missing, add entry to missing-list ($1, one of 'OPTIONAL', 'REQUIRED')
 AC_DEFUN(STEPMAKE_GUILE, [
-    STEPMAKE_PATH_PROG(GUILE, guile guile1, $1)
+    AC_MSG_CHECKING([for guile])
+    guile="guile"
+    found="no"
+    for r in $GUILE guile guile2 guile2.0 guile-2.0 guile1 guile1.9 guile1.8 guile-1 guile-1.9 guile-1.8; do
+       exe=`STEPMAKE_GET_EXECUTABLE($r)`
+       if ! $exe --version > /dev/null 2>&1 ; then
+           continue
+       fi
+       ver=`STEPMAKE_GET_VERSION($exe)`
+       num=`STEPMAKE_NUMERIC_VERSION($ver)`
+       req=`STEPMAKE_NUMERIC_VERSION($2)`
+       sup=`STEPMAKE_NUMERIC_VERSION($3)`
+       if test -n "$2" && test "$num" -lt "$req"; then
+           guile=["$r >= $2 (installed: $ver)"]
+           continue
+       else
+           if test -n "$3" && test "$num" -ge "$sup"; then
+               guile=["$r < $3 (installed: $ver)"]
+               continue
+           else
+               guile=$r
+               found=$r
+               break
+           fi
+       fi
+    done
+    AC_MSG_RESULT([$found])
+    if test "$found" != "no"; then
+       AC_MSG_CHECKING([$guile version])
+       AC_MSG_RESULT([$ver])
+       GUILE=$found
+    else
+       STEPMAKE_ADD_ENTRY($1, $guile)
+    fi
+    STEPMAKE_PATH_PROG(GUILE, $GUILE)
 ])
 
 
@@ -600,31 +636,45 @@ AC_DEFUN([STEPMAKE_GUILE_FLAGS], [
 ])
 
 
+# Check for guile-config, between minimum ($2) and maximum version ($3).
+# If missing, add entry to missing-list ($1, one of 'OPTIONAL', 'REQUIRED')
 AC_DEFUN(STEPMAKE_GUILE_DEVEL, [
     ## First, let's just see if we can find Guile at all.
     test -n "$target_alias" && target_guile_config=$target_alias-guile-config
     test -n "$host_alias" && host_guile_config=$host_alias-guile-config
     AC_MSG_CHECKING([for guile-config])
-    for guile_config in $GUILE_CONFIG $target_guile_config $host_guile_config $build_guile_config guile-config guile1-config; do
-       AC_MSG_RESULT([$guile_config])
-       if ! $guile_config --version > /dev/null 2>&1 ; then
-           AC_MSG_WARN([cannot execute $guile_config])
-           AC_MSG_CHECKING([if we are cross compiling])
-           GUILE_CONFIG='echo no guile-config'
+    guile_config="guile-config"
+    found="no"
+    for r in $GUILE_CONFIG $target_guile_config $host_guile_config $build_guile_config guile-config guile2-config guile2.0-config guile-2.0-config guile1-config guile1.9-config guile1.8-config guile-1-config guile-1.9-config guile-1.8-config; do
+       exe=`STEPMAKE_GET_EXECUTABLE($r)`
+       if ! $exe --version > /dev/null 2>&1 ; then
+           continue
+       fi
+       ver=`STEPMAKE_GET_VERSION($exe)`
+       num=`STEPMAKE_NUMERIC_VERSION($ver)`
+       req=`STEPMAKE_NUMERIC_VERSION($2)`
+       sup=`STEPMAKE_NUMERIC_VERSION($3)`
+       if test -n "$2" -a "$num" -lt "$req"; then
+           guile_config=["$r >= $2 (installed: $ver)"]
+           continue
        else
-           GUILE_CONFIG=$guile_config
-           break
+           if test -n "$3" -a "$num" -ge "$sup"; then
+               guile_config=["$r < $3 (installed: $ver)"]
+               continue
+           else
+               guile_config=$r
+               found=$r
+               break
+           fi
        fi
     done
-    STEPMAKE_OPTIONAL_REQUIRED(GUILE_CONFIG, $guile_config, $1)
-    if test $? -ne 0; then
-        STEPMAKE_ADD_ENTRY($1, 'guile-config (guile-devel, guile-dev or libguile-dev package) or guile1-config (guile1-devel package)')
-    fi 
-
-    STEPMAKE_CHECK_SEARCH_RESULT(GUILE_CONFIG)
-    # urg.  should test functionality rather than version.
-    if test $? -eq 0 -a -n "$2"; then
-       STEPMAKE_CHECK_VERSION(GUILE_CONFIG, $1, $2)
+    AC_MSG_RESULT([$found])
+    if test "$found" != "no"; then
+       AC_MSG_CHECKING([$guile_config version])
+       AC_MSG_RESULT([$ver])
+       GUILE_CONFIG=$found
+    else
+       STEPMAKE_ADD_ENTRY($1, "$guile_config (guile-devel, guile-dev or libguile-dev package) or guile1-config (guile1-devel package)")
     fi
 
     AC_SUBST(GUILE_CONFIG)
@@ -835,7 +885,7 @@ AC_DEFUN(STEPMAKE_INIT, [
     fi
     AC_SUBST(SHELL)
 
-    STEPMAKE_PYTHON(REQUIRED, 1.5)
+    STEPMAKE_PYTHON(REQUIRED, 1.5, 3.0)
 
     if expr "$MAKE" : '.*\(echo\)' >/dev/null; then
        $MAKE -v 2> /dev/null | grep GNU > /dev/null
@@ -981,33 +1031,49 @@ AC_DEFUN(STEPMAKE_PERL, [
 ])
 
 
+# Check for python, between minimum ($2) and maximum version ($3).
+# If missing, add entry to missing-list ($1, one of 'OPTIONAL', 'REQUIRED')
 AC_DEFUN(STEPMAKE_PYTHON, [
-    unset pv
     AC_MSG_CHECKING([for python])
-    for python in $PYTHON python python2 python2.4 python2.3 python2.2 python2.1 python2.0; do
-       AC_MSG_RESULT([$python])
-       if ! $python -V > /dev/null 2>&1 ; then
-           #AC_MSG_WARN([cannot execute $python])
-           PYTHON='echo no python'
+    python="python"
+    found="no"
+    for r in $PYTHON python python3 python3.3 python3.2 python3.1 python3.0 python2 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0; do
+       exe=`STEPMAKE_GET_EXECUTABLE($r)`
+       if ! $exe -V > /dev/null 2>&1 ; then
+           continue
+       fi
+       ver=`STEPMAKE_GET_VERSION($exe)`
+       num=`STEPMAKE_NUMERIC_VERSION($ver)`
+       req=`STEPMAKE_NUMERIC_VERSION($2)`
+       sup=`STEPMAKE_NUMERIC_VERSION($3)`
+       if test -n "$2" && test "$num" -lt "$req"; then
+           python=["$r >= $2 (installed: $ver)"]
+           continue
        else
-           unset pv
-           STEPMAKE_CHECK_VERSION(python, pv, $2)
-           if test -z "$pv"; then
-               PYTHON=$python
+           if test -n "$3" && test "$num" -ge "$sup"; then
+               python=["$r < $3 (installed: $ver)"]
+               continue
+           else
+               python=$r
+               found=$r
                break
            fi
        fi
     done
-    if test -n "$pv"; then
-       STEPMAKE_ADD_ENTRY($1, $pv)
+    AC_MSG_RESULT([$found])
+    if test "$found" != "no"; then
+       AC_MSG_CHECKING([$python version])
+       AC_MSG_RESULT([$ver])
+       PYTHON=$found
+    else
+       STEPMAKE_ADD_ENTRY($1, $python)
     fi
-    # clear cached value since arg 2 might point us to a new binary
-    unset ac_cv_path_PYTHON
-
     AC_PATH_PROG(PYTHON, $PYTHON)
     AC_SUBST(PYTHON)
 ])
 
+# Check for python-config, between minimum ($2) and maximum version ($3).
+# If missing, add entry to missing-list ($1, one of 'OPTIONAL', 'REQUIRED')
 AC_DEFUN(STEPMAKE_PYTHON_DEVEL, [
     AC_ARG_WITH(python-include,
        [AS_HELP_STRING([--with-python-include=DIR],
@@ -1028,8 +1094,9 @@ AC_DEFUN(STEPMAKE_PYTHON_DEVEL, [
            LDFLAGS="$LDFLAGS -l${withval}"
        fi
     ])
-    
-    AC_CHECK_PROGS(PYTHON_CONFIG, python-config, no)
+
+    STEPMAKE_PYTHON($1, $2, $3)
+    AC_CHECK_PROGS(PYTHON_CONFIG, `basename $PYTHON`-config, no)
 
     if test -z "$PYTHON_CFLAGS" -a "$PYTHON_CONFIG" != "no"; then
         # Clean out junk: http://bugs.python.org/issue3290
@@ -1083,13 +1150,31 @@ void *p = v.data ();
 
 
 AC_DEFUN(STEPMAKE_TEXMF_DIRS, [
-    # ugh
-    STEPMAKE_PROGS(KPSEWHICH, kpsewhich, OPTIONAL)
+    STEPMAKE_PROGS(KPSEWHICH, kpsewhich, $1)
+
+    AC_MSG_CHECKING(for metapost required files)
+    if test "$MFPLAIN_MP" = ""; then
+        MFPLAIN_MP=`kpsewhich -format=mp mfplain`
+    fi
+    if test "$MFPLAIN_MP" = ""; then
+        AC_MSG_RESULT(no)
+        STEPMAKE_ADD_ENTRY($1,['metapost CTAN package (texlive-metapost)'])
+    else
+        AC_MSG_RESULT(yes)
+    fi
 ])
 
 AC_DEFUN(STEPMAKE_TEXMF, [
     STEPMAKE_PROGS(METAFONT, mf-nowin mf mfw mfont, $1)
     STEPMAKE_PROGS(METAPOST, mpost, $1)
+    if test "$METAPOST" != ""; then
+       ver=`STEPMAKE_GET_VERSION($METAPOST)`
+       num=`STEPMAKE_NUMERIC_VERSION($ver)`
+       # Avoid buggy metapost versions: 1.600 <= x < 1.803
+       if test "$num" -ge "1600000" -a "$num" -lt "1803000"; then
+            STEPMAKE_ADD_ENTRY($1, ["mpost (due to a bug in metapost, versions 1.600 <= x < 1.803 are not supported; installed: $ver)"])
+       fi
+    fi
 
     AC_MSG_CHECKING(for working metafont mode)
     modelist='ljfour lj4 lj3 lj2 ljet laserjet'
index 34c022e0825ff602da60fd86aa9ac3f0ba951ce5..46dd22f98b86f9f1dc2895212a72c635d5928a81 100755 (executable)
@@ -7,18 +7,7 @@ case $1 in
     --noconf*) NOCONFIGURE=true;;
 esac
 
-if [ ! -f aclocal.m4 -o stepmake/aclocal.m4 -nt aclocal.m4 ]; then
-    echo "stepmake/aclocal.m4 is newer.  Copying file." 
-    cp -f stepmake/aclocal.m4 aclocal.m4
-fi
-
-if [ ! -f autogen.sh -o stepmake/autogen.sh -nt autogen.sh ]; then
-    echo "stepmake/autogen.sh is newer.  Copying file." 
-    cp -f stepmake/autogen.sh autogen.sh
-    exec ./autogen.sh "$@"
-fi
-
-for i in $srcdir/configure.in #`find $srcdir -name configure.in -print`
+for i in $srcdir/configure.ac #`find $srcdir -name configure.ac -print`
 do 
   dir=`dirname $i`
   echo processing $dir
index aa674379e3dcaa8679195c722f377c6b3ce84922..9837fc3e49f7ec52000e44fbd2c525ddc7c91031 100644 (file)
@@ -131,8 +131,8 @@ PATHSEP = @PATHSEP@
 PDFLATEX = @PDFLATEX@
 PERL = @PERL@
 PLATFORM_WINDOWS = @PLATFORM_WINDOWS@
-PYTHON = @PYTHON@
-TARGET_PYTHON = @PYTHON@
+PYTHON = @PYTHON@ -tt
+TARGET_PYTHON = @PYTHON@ -tt
 RANLIB = @RANLIB@
 ROOTSEP = @ROOTSEP@
 SHELL = @SHELL@
diff --git a/config/config.guess b/config/config.guess
new file mode 100755 (executable)
index 0000000..115f944
--- /dev/null
@@ -0,0 +1,1502 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   Free Software Foundation, Inc.
+
+timestamp='2010-04-03'
+
+# This file 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' HUP INT TERM
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       case "${UNAME_MACHINE_ARCH}" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           sh5el) machine=sh5le-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE_ARCH}" in
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep -q __ELF__
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "${UNAME_VERSION}" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit ;;
+    *:SolidBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Pn.n version is a patched version.
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    s390x:SunOS:*:*)
+       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+       echo i386-pc-auroraux${UNAME_RELEASE}
+       exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+       eval $set_cc_for_build
+       SUN_ARCH="i386"
+       # If there is a compiler, see if it is configured for 64-bit objects.
+       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+       # This test works for both compilers.
+       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               grep IS_64BIT_ARCH >/dev/null
+           then
+               SUN_ARCH="x86_64"
+           fi
+       fi
+       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c &&
+         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`$dummy $dummyarg` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit ;;
+    *:AIX:*:[456])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           eval $set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep -q __LP64__
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:FreeBSD:*:*)
+       case ${UNAME_MACHINE} in
+           pc98)
+               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           amd64)
+               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           *)
+               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       esac
+       exit ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
+    *:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    i*:windows32*:*)
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
+       exit ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit ;;
+    *:Interix*:*)
+       case ${UNAME_MACHINE} in
+           x86)
+               echo i586-pc-interix${UNAME_RELEASE}
+               exit ;;
+           authenticamd | genuineintel | EM64T)
+               echo x86_64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+           IA64)
+               echo ia64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+       esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit ;;
+    8664:Windows_NT:*)
+       echo x86_64-pc-mks
+       exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+       objdump --private-headers /bin/sh | grep -q ld.so.1
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
+    arm*:Linux:*:*)
+       eval $set_cc_for_build
+       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_EABI__
+       then
+           echo ${UNAME_MACHINE}-unknown-linux-gnu
+       else
+           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+       fi
+       exit ;;
+    avr32*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    cris:Linux:*:*)
+       echo cris-axis-linux-gnu
+       exit ;;
+    crisv32:Linux:*:*)
+       echo crisv32-axis-linux-gnu
+       exit ;;
+    frv:Linux:*:*)
+       echo frv-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       LIBC=gnu
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+       echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef ${UNAME_MACHINE}
+       #undef ${UNAME_MACHINE}el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=${UNAME_MACHINE}el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=${UNAME_MACHINE}
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    or32:Linux:*:*)
+       echo or32-unknown-linux-gnu
+       exit ;;
+    padre:Linux:*:*)
+       echo sparc-unknown-linux-gnu
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    vax:Linux:*:*)
+       echo ${UNAME_MACHINE}-dec-linux-gnu
+       exit ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit ;;
+    xtensa*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i586.
+       # Note: whatever this is, it MUST be the same as what config.sub
+       # prints for the "djgpp" host, or else GDB configury will decide that
+       # this is a cross-build.
+       echo i586-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+       OS_REL='.3'
+       test -r /etc/.relid \
+           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo ${UNAME_MACHINE}-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
+       echo i586-pc-haiku
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-7:SUPER-UX:*:*)
+       echo sx7-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8:SUPER-UX:*:*)
+       echo sx8-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8R:SUPER-UX:*:*)
+       echo sx8r-nec-superux${UNAME_RELEASE}
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       case $UNAME_PROCESSOR in
+           i386)
+               eval $set_cc_for_build
+               if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+                 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+                     (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+                     grep IS_64BIT_ARCH >/dev/null
+                 then
+                     UNAME_PROCESSOR="x86_64"
+                 fi
+               fi ;;
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+       exit ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "${UNAME_MACHINE}" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       exit ;;
+    i*86:rdos:*:*)
+       echo ${UNAME_MACHINE}-pc-rdos
+       exit ;;
+    i*86:AROS:*:*)
+       echo ${UNAME_MACHINE}-pc-aros
+       exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    c34*)
+       echo c34-convex-bsd
+       exit ;;
+    c38*)
+       echo c38-convex-bsd
+       exit ;;
+    c4*)
+       echo c4-convex-bsd
+       exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/config.sub b/config/config.sub
new file mode 100755 (executable)
index 0000000..204218c
--- /dev/null
@@ -0,0 +1,1731 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   Free Software Foundation, Inc.
+
+timestamp='2010-05-21'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis | -knuth | -cray | -microblaze)
+               os=
+               basic_machine=$1
+               ;;
+        -bluegene*)
+               os=-cnk
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco6)
+               os=-sco5v6
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+       | bfin \
+       | c4x | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fido | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | lm32 \
+       | m32c | m32r | m32rle | m68000 | m68k | m88k \
+       | maxq | mb | microblaze | mcore | mep | metag \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64octeon | mips64octeonel \
+       | mips64orion | mips64orionel \
+       | mips64r5900 | mips64r5900el \
+       | mips64vr | mips64vrel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | moxie \
+       | mt \
+       | msp430 \
+       | nios | nios2 \
+       | ns16k | ns32k \
+       | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | pyramid \
+       | rx \
+       | score \
+       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+       | spu | strongarm \
+       | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+       | ubicom32 \
+       | v850 | v850e \
+       | we32k \
+       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | z8k | z80)
+               basic_machine=$basic_machine-unknown
+               ;;
+       c54x)
+               basic_machine=tic54x-unknown
+               ;;
+       c55x)
+               basic_machine=tic55x-unknown
+               ;;
+       c6x)
+               basic_machine=tic6x-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+       ms1)
+               basic_machine=mt-unknown
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* | avr32-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* \
+       | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
+       | lm32-* \
+       | m32c-* | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64octeon-* | mips64octeonel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64r5900-* | mips64r5900el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nios-* | nios2-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | pyramid-* \
+       | romp-* | rs6000-* | rx-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+       | sparclite-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+       | tahoe-* | thumb-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tile-* | tilegx-* \
+       | tron-* \
+       | ubicom32-* \
+       | v850-* | v850e-* | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | xstormy16-* | xtensa*-* \
+       | ymp-* \
+       | z8k-* | z80-*)
+               ;;
+       # Recognize the basic CPU types without company name, with glob match.
+       xtensa*)
+               basic_machine=$basic_machine-unknown
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amd64)
+               basic_machine=x86_64-pc
+               ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aros)
+               basic_machine=i386-pc
+               os=-aros
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       blackfin)
+               basic_machine=bfin-unknown
+               os=-linux
+               ;;
+       blackfin-*)
+               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       bluegene*)
+               basic_machine=powerpc-ibm
+               os=-cnk
+               ;;
+       c54x-*)
+               basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c55x-*)
+               basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c6x-*)
+               basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+        cegcc)
+               basic_machine=arm-unknown
+               os=-cegcc
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       craynv)
+               basic_machine=craynv-cray
+               os=-unicosmp
+               ;;
+       cr16)
+               basic_machine=cr16-unknown
+               os=-elf
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       crisv32 | crisv32-* | etraxfs*)
+               basic_machine=crisv32-axis
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       crx)
+               basic_machine=crx-unknown
+               os=-elf
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dicos)
+               basic_machine=i686-pc
+               os=-dicos
+               ;;
+       djgpp)
+               basic_machine=i586-pc
+               os=-msdosdjgpp
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m68knommu)
+               basic_machine=m68k-unknown
+               os=-linux
+               ;;
+       m68knommu-*)
+               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+        microblaze)
+               basic_machine=microblaze-xilinx
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       mingw32ce)
+               basic_machine=arm-unknown
+               os=-mingw32ce
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       ms1-*)
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       openrisc | openrisc-*)
+               basic_machine=or32-unknown
+               ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       parisc)
+               basic_machine=hppa-unknown
+               os=-linux
+               ;;
+       parisc-*)
+               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pc98)
+               basic_machine=i386-pc
+               ;;
+       pc98-*)
+               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2 | pentiumiii | pentium3)
+               basic_machine=i686-pc
+               ;;
+       pentium4)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium4-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rdos)
+               basic_machine=i386-pc
+               os=-rdos
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       sde)
+               basic_machine=mipsisa32-sde
+               os=-elf
+               ;;
+       sei)
+               basic_machine=mips-sei
+               os=-seiux
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sh5el)
+               basic_machine=sh5le-unknown
+               ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
+       sparclite-wrs | simso-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=alphaev5-cray
+               os=-unicos
+               ;;
+       t90)
+               basic_machine=t90-cray
+               os=-unicos
+               ;;
+        # This must be matched before tile*.
+        tilegx*)
+               basic_machine=tilegx-unknown
+               os=-linux-gnu
+               ;;
+       tile*)
+               basic_machine=tile-unknown
+               os=-linux-gnu
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       toad1)
+               basic_machine=pdp10-xkl
+               os=-tops20
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       tpf)
+               basic_machine=s390x-ibm
+               os=-tpf
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xbox)
+               basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       z80-*-coff)
+               basic_machine=z80-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       mmix)
+               basic_machine=mmix-knuth
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+        -auroraux)
+               os=-auroraux
+               ;;
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+             | -sym* | -kopensolaris* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* | -aros* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+             | -openbsd* | -solidbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* | -cegcc* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-android* \
+             | -linux-newlib* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+        -os400*)
+               os=-os400
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -syllable*)
+               os=-syllable
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+        -tpf*)
+               os=-tpf
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+       -dicos*)
+               os=-dicos
+               ;;
+        -nacl*)
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+               os=-elf
+               ;;
+        spu-*)
+               os=-elf
+               ;;
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       tic54x-*)
+               os=-coff
+               ;;
+       tic55x-*)
+               os=-coff
+               ;;
+       tic6x-*)
+               os=-coff
+               ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+        mep-*)
+               os=-elf
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-haiku)
+               os=-haiku
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-knuth)
+               os=-mmixware
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+       *-gould)
+               os=-sysv
+               ;;
+       *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+       *-sgi)
+               os=-irix
+               ;;
+       *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -cnk*|-aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/install-sh b/config/install-sh
new file mode 100755 (executable)
index 0000000..e69de29
index 70107de1bf03511e857bedefae4d3a308ce414bf..33dec6d88fc265a7f719a2be19585134b5d553f0 100755 (executable)
--- a/configure
+++ b/configure
@@ -643,10 +643,15 @@ RSYNC
 ZIPDOC
 IMAGEMAGICK
 NETPBM
+TEXINDEX
+TEXI2PDF
+PDFTEX
 PDFLATEX
+BIBTEX
 DBLATEX
 TEXI2HTML
 MAKEINFO
+GHOSTSCRIPT
 PERL
 GUILE
 WINDRES
@@ -662,7 +667,6 @@ PKG_CONFIG
 LIBOBJS
 T1ASM
 FONTFORGE
-GHOSTSCRIPT
 PYTHON_CONFIG
 CXXABI_LIBS
 GUILE_LDFLAGS
@@ -1911,9 +1915,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 # Bootstrap StepMake configure
-# For user package:
 ac_aux_dir=
-for ac_dir in stepmake/bin "$srcdir"/stepmake/bin; do
+for ac_dir in config "$srcdir"/config; do
   if test -f "$ac_dir/install-sh"; then
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/install-sh -c"
@@ -1929,8 +1932,8 @@ for ac_dir in stepmake/bin "$srcdir"/stepmake/bin; do
   fi
 done
 if test -z "$ac_aux_dir"; then
-  { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in stepmake/bin \"$srcdir\"/stepmake/bin" >&5
-$as_echo "$as_me: error: cannot find install-sh or install.sh in stepmake/bin \"$srcdir\"/stepmake/bin" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&5
+$as_echo "$as_me: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
@@ -1944,10 +1947,6 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 
 
-# For stepmake package:
-# AC_CONFIG_AUX_DIR(bin)
-
-
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
   { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
@@ -2810,22 +2809,12 @@ fi
 
 
 
-    unset pv
     { $as_echo "$as_me:$LINENO: checking for python" >&5
 $as_echo_n "checking for python... " >&6; }
-    for python in $PYTHON python python2 python2.4 python2.3 python2.2 python2.1 python2.0; do
-       { $as_echo "$as_me:$LINENO: result: $python" >&5
-$as_echo "$python" >&6; }
-       if ! $python -V > /dev/null 2>&1 ; then
-           #AC_MSG_WARN([cannot execute $python])
-           PYTHON='echo no python'
-       else
-           unset pv
-
-    r="`eval echo '$'"python"`"
-    { $as_echo "$as_me:$LINENO: checking $r version" >&5
-$as_echo_n "checking $r version... " >&6; }
-    exe=`
+    python="python"
+    found="no"
+    for r in $PYTHON python python3 python3.3 python3.2 python3.1 python3.0 python2 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0; do
+       exe=`
     ## which doesn't work in ash, if /usr/bin/which isn't installed
     ## type -p doesn't work in ash
     ## command -v doesn't work in zsh
@@ -2833,10 +2822,10 @@ $as_echo_n "checking $r version... " >&6; }
     ## this test should work in ash, bash, pdksh (ksh), zsh
     type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}'
 `
-    if test -n ""; then
-        ver=""
-    else
-        ver=`
+       if ! $exe -V > /dev/null 2>&1 ; then
+           continue
+       fi
+       ver=`
     ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
     ##
     ## ARG.
@@ -2869,8 +2858,7 @@ $as_echo_n "checking $r version... " >&6; }
     echo "$_ver"
     #dnl
 `
-    fi
-    num=`
+       num=`
     echo "$ver" | awk -F. '
     {
       if ($3) {three = $3}
@@ -2878,7 +2866,7 @@ $as_echo_n "checking $r version... " >&6; }
     }
     {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
 `
-    req=`
+       req=`
     echo "1.5" | awk -F. '
     {
       if ($3) {three = $3}
@@ -2886,31 +2874,41 @@ $as_echo_n "checking $r version... " >&6; }
     }
     {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
 `
-    { $as_echo "$as_me:$LINENO: result: $ver" >&5
-$as_echo "$ver" >&6; }
-    if test "$num" -lt "$req"; then
-
-    eval "pv"=\"`eval echo \"'$'pv\" \""$r >= 1.5 (installed: $ver)"\"`\"
-
-    fi
-    vervar="`echo python | tr 'a-z' 'A-Z'`_VERSION"
-    eval `echo $vervar=$num`
-##    AC_SUBST(`eval echo $vervar`)
-
-           if test -z "$pv"; then
-               PYTHON=$python
+       sup=`
+    echo "3.0" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+       if test -n "1.5" && test "$num" -lt "$req"; then
+           python="$r >= 1.5 (installed: $ver)"
+           continue
+       else
+           if test -n "3.0" && test "$num" -ge "$sup"; then
+               python="$r < 3.0 (installed: $ver)"
+               continue
+           else
+               python=$r
+               found=$r
                break
            fi
        fi
     done
-    if test -n "$pv"; then
+    { $as_echo "$as_me:$LINENO: result: $found" >&5
+$as_echo "$found" >&6; }
+    if test "$found" != "no"; then
+       { $as_echo "$as_me:$LINENO: checking $python version" >&5
+$as_echo_n "checking $python version... " >&6; }
+       { $as_echo "$as_me:$LINENO: result: $ver" >&5
+$as_echo "$ver" >&6; }
+       PYTHON=$found
+    else
 
-    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"$pv\"`\"
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"$python\"`\"
 
     fi
-    # clear cached value since arg 2 might point us to a new binary
-    unset ac_cv_path_PYTHON
-
     # Extract the first word of "$PYTHON", so it can be a program name with args.
 set dummy $PYTHON; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
@@ -2990,9 +2988,6 @@ _ACEOF
 
 
 
-    if test "$datadir" = "\${prefix}/share"; then
-           datadir='${prefix}/share'
-    fi
     presome=${prefix}
     if test "$prefix" = "NONE"; then
        presome=${ac_default_prefix}
@@ -3000,7 +2995,7 @@ _ACEOF
 
     build_package_datadir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/share/$package
 
-    DATADIR=`echo ${datadir} | sed "s!\\\${datarootdir}!${prefix}/share!"`
+    DATADIR=`echo ${datadir} | sed "s!\\\${datarootdir}!${presome}/share!"`
     DATADIR=`echo ${DATADIR} | sed "s!\\\${prefix}!$presome!"`
     BUILD_PACKAGE_DATADIR=`echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!"`
 
@@ -3017,11 +3012,14 @@ _ACEOF
 
 
 
-
-    if test "$libdir" = "\${exec_prefix}/lib"; then
-       libdir='${exec_prefix}/lib'
+    presome=${exec_prefix}
+    if test "$presome" = "NONE"; then
+           presome=${prefix}
+    fi
+    if test "$presome" = "NONE"; then
+           presome=${ac_default_prefix}
     fi
-    presome=$exec_prefix
+
     build_package_libdir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/lib/$package
 
     LIBDIR=`echo ${libdir} | sed "s!\\\${exec_prefix}!$presome!"`
@@ -4232,33 +4230,18 @@ $as_echo "no" >&6; }
 fi
 
 
-{ $as_echo "$as_me:$LINENO: checking New Century Schoolbook PFB files" >&5
-$as_echo_n "checking New Century Schoolbook PFB files... " >&6; }
-
-
-UNCHECKED_NCSB_SOURCE_FILES=""
-if test "$NCSB_DIR" != "" ;  then
-  for f in c059013l c059016l c059033l c059036l; do
-    if test ! -f "$NCSB_DIR/$f.pfb"; then
+{ $as_echo "$as_me:$LINENO: checking for New Century Schoolbook PFB files" >&5
+$as_echo_n "checking for New Century Schoolbook PFB files... " >&6; }
 
-    { $as_echo "$as_me:$LINENO: WARNING: $NCSB_DIR does not contain $f.pfb." >&5
-$as_echo "$as_me: WARNING: $NCSB_DIR does not contain $f.pfb." >&2;}
-    warn_b=yes
 
-    else
-      UNCHECKED_NCSB_SOURCE_FILES="$NCSB_DIR/$f.pfb $UNCHECKED_NCSB_SOURCE_FILES"
-    fi
-  done
-else
+if test "$NCSB_DIR" = ""; then
   if test "$FCLIST" != ""; then
-    for style in Roman Italic "Bold Italic" Bold; do
-      NCSB_FILE=`$FCLIST "Century Schoolbook L:style=$style:foundry=urw:fontformat=Type 1" file \
-                | head -n 1`
+    NCSB_FILE=`$FCLIST "Century Schoolbook L:foundry=urw:fontformat=Type 1:lang=ru" file \
+              | head -n 1`
+    if test "$NCSB_FILE" != ""; then
       NCSB_FILE=`echo $NCSB_FILE | sed 's/\(:.*\)$//g'`
       NCSB_FILE=`$PYTHON "$srcdir/scripts/auxiliar/readlink.py" $NCSB_FILE`
-      UNCHECKED_NCSB_SOURCE_FILES="$NCSB_FILE $UNCHECKED_NCSB_SOURCE_FILES"
-    done
-    NCSB_DIR=`$as_dirname -- $NCSB_FILE ||
+      NCSB_DIR=`$as_dirname -- $NCSB_FILE ||
 $as_expr X$NCSB_FILE : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X$NCSB_FILE : 'X\(//\)[^/]' \| \
         X$NCSB_FILE : 'X\(//\)$' \| \
@@ -4281,27 +4264,53 @@ $as_echo X$NCSB_FILE |
            q
          }
          s/.*/./; q'`
-  else
-    { $as_echo "$as_me:$LINENO: result: not found" >&5
-$as_echo "not found" >&6; }
-    echo "Can't find Century Schoolbook files. Install FontConfig's fc-list,"
-    echo "or use --with-ncsb-dir"
+    fi
   fi
 fi
-NCSB_SOURCE_FILES=""
-for f in $UNCHECKED_NCSB_SOURCE_FILES; do
-  if test "`grep Cyrillic "$f"`" = ""; then
+if test "$NCSB_DIR" != "" ;  then
+  for f in c059013l.pfb c059016l.pfb c059033l.pfb c059036l.pfb; do
+    if test ! -f "$NCSB_DIR/$f"; then
+      MISSING_NCSB_SOURCE_FILES="$f $MISSING_NCSB_SOURCE_FILES"
+    else
+      if test "`grep Cyrillic "$NCSB_DIR/$f"`" = ""; then
+        INCOMPLETE_NCSB_SOURCE_FILES="$f $INCOMPLETE_NCSB_SOURCE_FILES"
+      else
+        NCSB_SOURCE_FILES="$NCSB_DIR/$f $NCSB_SOURCE_FILES"
+      fi
+    fi
+  done
+fi
+if test "$NCSB_DIR" = "" -o "$MISSING_NCSB_SOURCE_FILES" != "$INCOMPLETE_NCSB_SOURCE_FILES"; then
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 
-    { $as_echo "$as_me:$LINENO: WARNING: $f does not have Cyrillic characters." >&5
-$as_echo "$as_me: WARNING: $f does not have Cyrillic characters." >&2;}
-    warn_b=yes
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"International New Century Schoolbook fonts\"`\"
 
-  else
-    NCSB_SOURCE_FILES="$f $NCSB_SOURCE_FILES"
+  if test "$NCSB_DIR" = ""; then
+    if test "$FCLIST" = ""; then
+
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"'(install the fc-list utility from FontConfig, or use --with-ncsb-dir)'\"`\"
+
+    else
+
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"'(make sure the fc-list utility can see them, or use --with-ncsb-dir)'\"`\"
+
+    fi
   fi
-done
-{ $as_echo "$as_me:$LINENO: result: $NCSB_SOURCE_FILES" >&5
-$as_echo "$NCSB_SOURCE_FILES" >&6; }
+  if test "$MISSING_NCSB_SOURCE_FILES" != ""; then
+
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"'(these files are missing: $MISSING_NCSB_SOURCE_FILES)'\"`\"
+
+  fi
+  if test "$INCOMPLETE_NCSB_SOURCE_FILES" != ""; then
+
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"'(these files do not contain Cyrillic characters: $INCOMPLETE_NCSB_SOURCE_FILES)'\"`\"
+
+  fi
+else
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
 
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -4311,22 +4320,12 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
 
 
-    unset pv
     { $as_echo "$as_me:$LINENO: checking for python" >&5
 $as_echo_n "checking for python... " >&6; }
-    for python in $PYTHON python python2 python2.4 python2.3 python2.2 python2.1 python2.0; do
-       { $as_echo "$as_me:$LINENO: result: $python" >&5
-$as_echo "$python" >&6; }
-       if ! $python -V > /dev/null 2>&1 ; then
-           #AC_MSG_WARN([cannot execute $python])
-           PYTHON='echo no python'
-       else
-           unset pv
-
-    r="`eval echo '$'"python"`"
-    { $as_echo "$as_me:$LINENO: checking $r version" >&5
-$as_echo_n "checking $r version... " >&6; }
-    exe=`
+    python="python"
+    found="no"
+    for r in $PYTHON python python3 python3.3 python3.2 python3.1 python3.0 python2 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0; do
+       exe=`
     ## which doesn't work in ash, if /usr/bin/which isn't installed
     ## type -p doesn't work in ash
     ## command -v doesn't work in zsh
@@ -4334,10 +4333,10 @@ $as_echo_n "checking $r version... " >&6; }
     ## this test should work in ash, bash, pdksh (ksh), zsh
     type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}'
 `
-    if test -n ""; then
-        ver=""
-    else
-        ver=`
+       if ! $exe -V > /dev/null 2>&1 ; then
+           continue
+       fi
+       ver=`
     ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
     ##
     ## ARG.
@@ -4370,8 +4369,7 @@ $as_echo_n "checking $r version... " >&6; }
     echo "$_ver"
     #dnl
 `
-    fi
-    num=`
+       num=`
     echo "$ver" | awk -F. '
     {
       if ($3) {three = $3}
@@ -4379,7 +4377,7 @@ $as_echo_n "checking $r version... " >&6; }
     }
     {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
 `
-    req=`
+       req=`
     echo "2.4" | awk -F. '
     {
       if ($3) {three = $3}
@@ -4387,31 +4385,41 @@ $as_echo_n "checking $r version... " >&6; }
     }
     {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
 `
-    { $as_echo "$as_me:$LINENO: result: $ver" >&5
-$as_echo "$ver" >&6; }
-    if test "$num" -lt "$req"; then
-
-    eval "pv"=\"`eval echo \"'$'pv\" \""$r >= 2.4 (installed: $ver)"\"`\"
-
-    fi
-    vervar="`echo python | tr 'a-z' 'A-Z'`_VERSION"
-    eval `echo $vervar=$num`
-##    AC_SUBST(`eval echo $vervar`)
-
-           if test -z "$pv"; then
-               PYTHON=$python
+       sup=`
+    echo "3.0" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+       if test -n "2.4" && test "$num" -lt "$req"; then
+           python="$r >= 2.4 (installed: $ver)"
+           continue
+       else
+           if test -n "3.0" && test "$num" -ge "$sup"; then
+               python="$r < 3.0 (installed: $ver)"
+               continue
+           else
+               python=$r
+               found=$r
                break
            fi
        fi
     done
-    if test -n "$pv"; then
+    { $as_echo "$as_me:$LINENO: result: $found" >&5
+$as_echo "$found" >&6; }
+    if test "$found" != "no"; then
+       { $as_echo "$as_me:$LINENO: checking $python version" >&5
+$as_echo_n "checking $python version... " >&6; }
+       { $as_echo "$as_me:$LINENO: result: $ver" >&5
+$as_echo "$ver" >&6; }
+       PYTHON=$found
+    else
 
-    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"$pv\"`\"
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"$python\"`\"
 
     fi
-    # clear cached value since arg 2 might point us to a new binary
-    unset ac_cv_path_PYTHON
-
     # Extract the first word of "$PYTHON", so it can be a program name with args.
 set dummy $PYTHON; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
@@ -6524,9 +6532,9 @@ test -n "$BISON" || BISON="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"bison\"`\"
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"bison\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
+       if test "REQUIRED" = "REQUIRED"; then
            command="echo ERROR: bison not found"
            # abort configure process here?
        else
@@ -6608,7 +6616,7 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >=  (installed: $ver)"\"`\"
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
 
     fi
     vervar="`echo BISON | tr 'a-z' 'A-Z'`_VERSION"
@@ -6689,7 +6697,7 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= 1.29 (installed: $ver)"\"`\"
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 1.29 (installed: $ver)"\"`\"
 
     fi
     vervar="`echo BISON | tr 'a-z' 'A-Z'`_VERSION"
@@ -8036,6 +8044,55 @@ $as_echo "$ver" >&6; }
 
     fi
 
+    if test "$METAPOST" != ""; then
+       ver=`
+    ## "$METAPOST" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
+    ##
+    ## ARG.
+    ## Workaround for broken Debian gcc version string:
+    ##     gcc (GCC) 3.1.1 20020606 (Debian prerelease)
+    ##
+    ## -V: Workaround for python
+
+    #dnl
+
+    ## Assume and hunt for dotted version multiplet.
+    ## use eval trickery, because we cannot use multi-level $() instead of ``
+    ## for compatibility reasons.
+
+    ## grab the first version number in  --version output.
+    eval _ver=\"\`("$METAPOST" --version || "$METAPOST" -V) 2>&1 |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1 |
+               tr ' ' '\n' |
+               sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1\`\"
+
+    if test -z "$_ver"; then
+        ## If empty, try date [fontforge]
+        eval _ver=\"\`("$METAPOST" --version || "$METAPOST" -V) 2>&1 | grep '[0-9]\{6,8\}' \
+           | head -n 1 \
+           | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
+    fi
+    echo "$_ver"
+    #dnl
+`
+       num=`
+    echo "$ver" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+       # Avoid buggy metapost versions: 1.600 <= x < 1.803
+       if test "$num" -ge "1600000" -a "$num" -lt "1803000"; then
+
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""mpost (due to a bug in metapost, versions 1.600 <= x < 1.803 are not supported; installed: $ver)"\"`\"
+
+       fi
+    fi
 
     { $as_echo "$as_me:$LINENO: checking for working metafont mode" >&5
 $as_echo_n "checking for working metafont mode... " >&6; }
@@ -8054,7 +8111,6 @@ $as_echo "$MFMODE" >&6; }
 
 
 
-    # ugh
 
     for ac_prog in kpsewhich
 do
@@ -8111,9 +8167,9 @@ test -n "$KPSEWHICH" || KPSEWHICH="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"kpsewhich\"`\"
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"kpsewhich\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
+       if test "REQUIRED" = "REQUIRED"; then
            command="echo ERROR: kpsewhich not found"
            # abort configure process here?
        else
@@ -8195,7 +8251,7 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >=  (installed: $ver)"\"`\"
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
 
     fi
     vervar="`echo KPSEWHICH | tr 'a-z' 'A-Z'`_VERSION"
@@ -8205,74 +8261,32 @@ $as_echo "$ver" >&6; }
     fi
 
 
-
-    ## First, let's just see if we can find Guile at all.
-    test -n "$target_alias" && target_guile_config=$target_alias-guile-config
-    test -n "$host_alias" && host_guile_config=$host_alias-guile-config
-    { $as_echo "$as_me:$LINENO: checking for guile-config" >&5
-$as_echo_n "checking for guile-config... " >&6; }
-    for guile_config in $GUILE_CONFIG $target_guile_config $host_guile_config $build_guile_config guile-config guile1-config; do
-       { $as_echo "$as_me:$LINENO: result: $guile_config" >&5
-$as_echo "$guile_config" >&6; }
-       if ! $guile_config --version > /dev/null 2>&1 ; then
-           { $as_echo "$as_me:$LINENO: WARNING: cannot execute $guile_config" >&5
-$as_echo "$as_me: WARNING: cannot execute $guile_config" >&2;}
-           { $as_echo "$as_me:$LINENO: checking if we are cross compiling" >&5
-$as_echo_n "checking if we are cross compiling... " >&6; }
-           GUILE_CONFIG='echo no guile-config'
-       else
-           GUILE_CONFIG=$guile_config
-           break
-       fi
-    done
-
-
-    r="`eval echo '$'"GUILE_CONFIG"`"
-    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"GUILE_CONFIG"`' : '.*\(echo\)' > /dev/null; then
-       true
-    else
-       ##STEPMAKE_WARN(cannot find . )
-       false
-    fi
-
-    if test $? -ne 0; then
-
-    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"$guile_config\"`\"
-
-       if test "REQUIRED" = "REQUIRED"; then
-           command="echo ERROR: $guile_config not found"
-           # abort configure process here?
-       else
-           command="- echo $guile_config not found"
-       fi
-       eval "GUILE_CONFIG"='$command'
-       false
-    else
-       true
-    fi
-
-    if test $? -ne 0; then
-
-    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"'guile-config (guile-devel, guile-dev or libguile-dev package) or guile1-config (guile1-devel package)'\"`\"
-
+    { $as_echo "$as_me:$LINENO: checking for metapost required files" >&5
+$as_echo_n "checking for metapost required files... " >&6; }
+    if test "$MFPLAIN_MP" = ""; then
+        MFPLAIN_MP=`kpsewhich -format=mp mfplain`
     fi
+    if test "$MFPLAIN_MP" = ""; then
+        { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"'metapost CTAN package (texlive-metapost)'\"`\"
 
-    r="`eval echo '$'"GUILE_CONFIG"`"
-    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"GUILE_CONFIG"`' : '.*\(echo\)' > /dev/null; then
-       true
     else
-       ##STEPMAKE_WARN(cannot find . )
-       false
+        { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
     fi
 
-    # urg.  should test functionality rather than version.
-    if test $? -eq 0 -a -n "1.8.2"; then
 
-    r="`eval echo '$'"GUILE_CONFIG"`"
-    { $as_echo "$as_me:$LINENO: checking $r version" >&5
-$as_echo_n "checking $r version... " >&6; }
-    exe=`
+    ## First, let's just see if we can find Guile at all.
+    test -n "$target_alias" && target_guile_config=$target_alias-guile-config
+    test -n "$host_alias" && host_guile_config=$host_alias-guile-config
+    { $as_echo "$as_me:$LINENO: checking for guile-config" >&5
+$as_echo_n "checking for guile-config... " >&6; }
+    guile_config="guile-config"
+    found="no"
+    for r in $GUILE_CONFIG $target_guile_config $host_guile_config $build_guile_config guile-config guile2-config guile2.0-config guile-2.0-config guile1-config guile1.9-config guile1.8-config guile-1-config guile-1.9-config guile-1.8-config; do
+       exe=`
     ## which doesn't work in ash, if /usr/bin/which isn't installed
     ## type -p doesn't work in ash
     ## command -v doesn't work in zsh
@@ -8280,10 +8294,10 @@ $as_echo_n "checking $r version... " >&6; }
     ## this test should work in ash, bash, pdksh (ksh), zsh
     type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}'
 `
-    if test -n ""; then
-        ver=""
-    else
-        ver=`
+       if ! $exe --version > /dev/null 2>&1 ; then
+           continue
+       fi
+       ver=`
     ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
     ##
     ## ARG.
@@ -8316,8 +8330,7 @@ $as_echo_n "checking $r version... " >&6; }
     echo "$_ver"
     #dnl
 `
-    fi
-    num=`
+       num=`
     echo "$ver" | awk -F. '
     {
       if ($3) {three = $3}
@@ -8325,7 +8338,7 @@ $as_echo_n "checking $r version... " >&6; }
     }
     {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
 `
-    req=`
+       req=`
     echo "1.8.2" | awk -F. '
     {
       if ($3) {three = $3}
@@ -8333,16 +8346,39 @@ $as_echo_n "checking $r version... " >&6; }
     }
     {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
 `
-    { $as_echo "$as_me:$LINENO: result: $ver" >&5
+       sup=`
+    echo "1.9.0" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+       if test -n "1.8.2" -a "$num" -lt "$req"; then
+           guile_config="$r >= 1.8.2 (installed: $ver)"
+           continue
+       else
+           if test -n "1.9.0" -a "$num" -ge "$sup"; then
+               guile_config="$r < 1.9.0 (installed: $ver)"
+               continue
+           else
+               guile_config=$r
+               found=$r
+               break
+           fi
+       fi
+    done
+    { $as_echo "$as_me:$LINENO: result: $found" >&5
+$as_echo "$found" >&6; }
+    if test "$found" != "no"; then
+       { $as_echo "$as_me:$LINENO: checking $guile_config version" >&5
+$as_echo_n "checking $guile_config version... " >&6; }
+       { $as_echo "$as_me:$LINENO: result: $ver" >&5
 $as_echo "$ver" >&6; }
-    if test "$num" -lt "$req"; then
-
-    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 1.8.2 (installed: $ver)"\"`\"
+       GUILE_CONFIG=$found
+    else
 
-    fi
-    vervar="`echo GUILE_CONFIG | tr 'a-z' 'A-Z'`_VERSION"
-    eval `echo $vervar=$num`
-##    AC_SUBST(`eval echo $vervar`)
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$guile_config (guile-devel, guile-dev or libguile-dev package) or guile1-config (guile1-devel package)"\"`\"
 
     fi
 
@@ -9250,35 +9286,178 @@ $as_echo "$as_me: WARNING: Usage: --with-python-lib=name" >&2;}
 fi
 
 
-    for ac_prog in python-config
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_PYTHON_CONFIG+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$PYTHON_CONFIG"; then
-  ac_cv_prog_PYTHON_CONFIG="$PYTHON_CONFIG" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_PYTHON_CONFIG="$ac_prog"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-IFS=$as_save_IFS
 
-fi
-fi
+    { $as_echo "$as_me:$LINENO: checking for python" >&5
+$as_echo_n "checking for python... " >&6; }
+    python="python"
+    found="no"
+    for r in $PYTHON python python3 python3.3 python3.2 python3.1 python3.0 python2 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0; do
+       exe=`
+    ## which doesn't work in ash, if /usr/bin/which isn't installed
+    ## type -p doesn't work in ash
+    ## command -v doesn't work in zsh
+    ## command -v "$r" 2>&1
+    ## this test should work in ash, bash, pdksh (ksh), zsh
+    type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}'
+`
+       if ! $exe -V > /dev/null 2>&1 ; then
+           continue
+       fi
+       ver=`
+    ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
+    ##
+    ## ARG.
+    ## Workaround for broken Debian gcc version string:
+    ##     gcc (GCC) 3.1.1 20020606 (Debian prerelease)
+    ##
+    ## -V: Workaround for python
+
+    #dnl
+
+    ## Assume and hunt for dotted version multiplet.
+    ## use eval trickery, because we cannot use multi-level $() instead of ``
+    ## for compatibility reasons.
+
+    ## grab the first version number in  --version output.
+    eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1 |
+               tr ' ' '\n' |
+               sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1\`\"
+
+    if test -z "$_ver"; then
+        ## If empty, try date [fontforge]
+        eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \
+           | head -n 1 \
+           | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
+    fi
+    echo "$_ver"
+    #dnl
+`
+       num=`
+    echo "$ver" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+       req=`
+    echo "2.4" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+       sup=`
+    echo "3.0" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+       if test -n "2.4" && test "$num" -lt "$req"; then
+           python="$r >= 2.4 (installed: $ver)"
+           continue
+       else
+           if test -n "3.0" && test "$num" -ge "$sup"; then
+               python="$r < 3.0 (installed: $ver)"
+               continue
+           else
+               python=$r
+               found=$r
+               break
+           fi
+       fi
+    done
+    { $as_echo "$as_me:$LINENO: result: $found" >&5
+$as_echo "$found" >&6; }
+    if test "$found" != "no"; then
+       { $as_echo "$as_me:$LINENO: checking $python version" >&5
+$as_echo_n "checking $python version... " >&6; }
+       { $as_echo "$as_me:$LINENO: result: $ver" >&5
+$as_echo "$ver" >&6; }
+       PYTHON=$found
+    else
+
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"$python\"`\"
+
+    fi
+    # Extract the first word of "$PYTHON", so it can be a program name with args.
+set dummy $PYTHON; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PYTHON+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $PYTHON in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PYTHON=$ac_cv_path_PYTHON
+if test -n "$PYTHON"; then
+  { $as_echo "$as_me:$LINENO: result: $PYTHON" >&5
+$as_echo "$PYTHON" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+    for ac_prog in `basename $PYTHON`-config
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_PYTHON_CONFIG+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$PYTHON_CONFIG"; then
+  ac_cv_prog_PYTHON_CONFIG="$PYTHON_CONFIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_PYTHON_CONFIG="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
 PYTHON_CONFIG=$ac_cv_prog_PYTHON_CONFIG
 if test -n "$PYTHON_CONFIG"; then
   { $as_echo "$as_me:$LINENO: result: $PYTHON_CONFIG" >&5
@@ -9474,17 +9653,17 @@ done
 
 
 
-    for ac_prog in gs
+    for ac_prog in fontforge
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_GHOSTSCRIPT+set}" = set; then
+if test "${ac_cv_prog_FONTFORGE+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$GHOSTSCRIPT"; then
-  ac_cv_prog_GHOSTSCRIPT="$GHOSTSCRIPT" # Let the user override the test.
+  if test -n "$FONTFORGE"; then
+  ac_cv_prog_FONTFORGE="$FONTFORGE" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -9493,7 +9672,7 @@ do
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_GHOSTSCRIPT="$ac_prog"
+    ac_cv_prog_FONTFORGE="$ac_prog"
     $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -9503,24 +9682,24 @@ IFS=$as_save_IFS
 
 fi
 fi
-GHOSTSCRIPT=$ac_cv_prog_GHOSTSCRIPT
-if test -n "$GHOSTSCRIPT"; then
-  { $as_echo "$as_me:$LINENO: result: $GHOSTSCRIPT" >&5
-$as_echo "$GHOSTSCRIPT" >&6; }
+FONTFORGE=$ac_cv_prog_FONTFORGE
+if test -n "$FONTFORGE"; then
+  { $as_echo "$as_me:$LINENO: result: $FONTFORGE" >&5
+$as_echo "$FONTFORGE" >&6; }
 else
   { $as_echo "$as_me:$LINENO: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$GHOSTSCRIPT" && break
+  test -n "$FONTFORGE" && break
 done
-test -n "$GHOSTSCRIPT" || GHOSTSCRIPT="no"
+test -n "$FONTFORGE" || FONTFORGE="no"
 
 
 
-    r="`eval echo '$'"GHOSTSCRIPT"`"
-    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"GHOSTSCRIPT"`' : '.*\(echo\)' > /dev/null; then
+    r="`eval echo '$'"FONTFORGE"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"FONTFORGE"`' : '.*\(echo\)' > /dev/null; then
        true
     else
        ##STEPMAKE_WARN(cannot find . )
@@ -9529,33 +9708,33 @@ test -n "$GHOSTSCRIPT" || GHOSTSCRIPT="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"gs\"`\"
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"fontforge\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
-           command="echo ERROR: gs not found"
+       if test "REQUIRED" = "REQUIRED"; then
+           command="echo ERROR: fontforge not found"
            # abort configure process here?
        else
-           command="- echo gs not found"
+           command="- echo fontforge not found"
        fi
-       eval "GHOSTSCRIPT"='$command'
+       eval "FONTFORGE"='$command'
        false
     else
        true
     fi
 
     if test $? -eq 0; then
-       for ac_prog in gs
+       for ac_prog in fontforge
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_GHOSTSCRIPT+set}" = set; then
+if test "${ac_cv_path_FONTFORGE+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
-  case $GHOSTSCRIPT in
+  case $FONTFORGE in
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_GHOSTSCRIPT="$GHOSTSCRIPT" # Let the user override the test with a path.
+  ac_cv_path_FONTFORGE="$FONTFORGE" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -9565,7 +9744,7 @@ do
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_GHOSTSCRIPT="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_path_FONTFORGE="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -9576,22 +9755,22 @@ IFS=$as_save_IFS
   ;;
 esac
 fi
-GHOSTSCRIPT=$ac_cv_path_GHOSTSCRIPT
-if test -n "$GHOSTSCRIPT"; then
-  { $as_echo "$as_me:$LINENO: result: $GHOSTSCRIPT" >&5
-$as_echo "$GHOSTSCRIPT" >&6; }
+FONTFORGE=$ac_cv_path_FONTFORGE
+if test -n "$FONTFORGE"; then
+  { $as_echo "$as_me:$LINENO: result: $FONTFORGE" >&5
+$as_echo "$FONTFORGE" >&6; }
 else
   { $as_echo "$as_me:$LINENO: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$GHOSTSCRIPT" && break
+  test -n "$FONTFORGE" && break
 done
 
-       if test -n "8.60"; then
+       if test -n "20110222"; then
 
-    r="`eval echo '$'"GHOSTSCRIPT"`"
+    r="`eval echo '$'"FONTFORGE"`"
     { $as_echo "$as_me:$LINENO: checking $r version" >&5
 $as_echo_n "checking $r version... " >&6; }
     exe=`
@@ -9648,7 +9827,7 @@ $as_echo_n "checking $r version... " >&6; }
     {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
 `
     req=`
-    echo "8.60" | awk -F. '
+    echo "20110222" | awk -F. '
     {
       if ($3) {three = $3}
       else {three = 0}
@@ -9659,10 +9838,10 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= 8.60 (installed: $ver)"\"`\"
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 20110222 (installed: $ver)"\"`\"
 
     fi
-    vervar="`echo GHOSTSCRIPT | tr 'a-z' 'A-Z'`_VERSION"
+    vervar="`echo FONTFORGE | tr 'a-z' 'A-Z'`_VERSION"
     eval `echo $vervar=$num`
 ##    AC_SUBST(`eval echo $vervar`)
 
@@ -9671,17 +9850,17 @@ $as_echo "$ver" >&6; }
 
 
 
-    for ac_prog in fontforge
+    for ac_prog in t1asm
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_FONTFORGE+set}" = set; then
+if test "${ac_cv_prog_T1ASM+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$FONTFORGE"; then
-  ac_cv_prog_FONTFORGE="$FONTFORGE" # Let the user override the test.
+  if test -n "$T1ASM"; then
+  ac_cv_prog_T1ASM="$T1ASM" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -9690,7 +9869,7 @@ do
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_FONTFORGE="$ac_prog"
+    ac_cv_prog_T1ASM="$ac_prog"
     $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -9700,24 +9879,24 @@ IFS=$as_save_IFS
 
 fi
 fi
-FONTFORGE=$ac_cv_prog_FONTFORGE
-if test -n "$FONTFORGE"; then
-  { $as_echo "$as_me:$LINENO: result: $FONTFORGE" >&5
-$as_echo "$FONTFORGE" >&6; }
+T1ASM=$ac_cv_prog_T1ASM
+if test -n "$T1ASM"; then
+  { $as_echo "$as_me:$LINENO: result: $T1ASM" >&5
+$as_echo "$T1ASM" >&6; }
 else
   { $as_echo "$as_me:$LINENO: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$FONTFORGE" && break
+  test -n "$T1ASM" && break
 done
-test -n "$FONTFORGE" || FONTFORGE="no"
+test -n "$T1ASM" || T1ASM="no"
 
 
 
-    r="`eval echo '$'"FONTFORGE"`"
-    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"FONTFORGE"`' : '.*\(echo\)' > /dev/null; then
+    r="`eval echo '$'"T1ASM"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"T1ASM"`' : '.*\(echo\)' > /dev/null; then
        true
     else
        ##STEPMAKE_WARN(cannot find . )
@@ -9726,33 +9905,33 @@ test -n "$FONTFORGE" || FONTFORGE="no"
 
     if test $? -ne 0; then
 
-    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"fontforge\"`\"
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"t1asm\"`\"
 
        if test "REQUIRED" = "REQUIRED"; then
-           command="echo ERROR: fontforge not found"
+           command="echo ERROR: t1asm not found"
            # abort configure process here?
        else
-           command="- echo fontforge not found"
+           command="- echo t1asm not found"
        fi
-       eval "FONTFORGE"='$command'
+       eval "T1ASM"='$command'
        false
     else
        true
     fi
 
     if test $? -eq 0; then
-       for ac_prog in fontforge
+       for ac_prog in t1asm
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_FONTFORGE+set}" = set; then
+if test "${ac_cv_path_T1ASM+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
-  case $FONTFORGE in
+  case $T1ASM in
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_FONTFORGE="$FONTFORGE" # Let the user override the test with a path.
+  ac_cv_path_T1ASM="$T1ASM" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -9762,204 +9941,7 @@ do
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_FONTFORGE="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-FONTFORGE=$ac_cv_path_FONTFORGE
-if test -n "$FONTFORGE"; then
-  { $as_echo "$as_me:$LINENO: result: $FONTFORGE" >&5
-$as_echo "$FONTFORGE" >&6; }
-else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$FONTFORGE" && break
-done
-
-       if test -n "20110222"; then
-
-    r="`eval echo '$'"FONTFORGE"`"
-    { $as_echo "$as_me:$LINENO: checking $r version" >&5
-$as_echo_n "checking $r version... " >&6; }
-    exe=`
-    ## which doesn't work in ash, if /usr/bin/which isn't installed
-    ## type -p doesn't work in ash
-    ## command -v doesn't work in zsh
-    ## command -v "$r" 2>&1
-    ## this test should work in ash, bash, pdksh (ksh), zsh
-    type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}'
-`
-    if test -n ""; then
-        ver=""
-    else
-        ver=`
-    ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
-    ##
-    ## ARG.
-    ## Workaround for broken Debian gcc version string:
-    ##     gcc (GCC) 3.1.1 20020606 (Debian prerelease)
-    ##
-    ## -V: Workaround for python
-
-    #dnl
-
-    ## Assume and hunt for dotted version multiplet.
-    ## use eval trickery, because we cannot use multi-level $() instead of ``
-    ## for compatibility reasons.
-
-    ## grab the first version number in  --version output.
-    eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 |
-               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
-               head -n 1 |
-               tr ' ' '\n' |
-               sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
-               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
-               head -n 1\`\"
-
-    if test -z "$_ver"; then
-        ## If empty, try date [fontforge]
-        eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \
-           | head -n 1 \
-           | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
-    fi
-    echo "$_ver"
-    #dnl
-`
-    fi
-    num=`
-    echo "$ver" | awk -F. '
-    {
-      if ($3) {three = $3}
-      else {three = 0}
-    }
-    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
-`
-    req=`
-    echo "20110222" | awk -F. '
-    {
-      if ($3) {three = $3}
-      else {three = 0}
-    }
-    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
-`
-    { $as_echo "$as_me:$LINENO: result: $ver" >&5
-$as_echo "$ver" >&6; }
-    if test "$num" -lt "$req"; then
-
-    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 20110222 (installed: $ver)"\"`\"
-
-    fi
-    vervar="`echo FONTFORGE | tr 'a-z' 'A-Z'`_VERSION"
-    eval `echo $vervar=$num`
-##    AC_SUBST(`eval echo $vervar`)
-
-       fi
-    fi
-
-
-
-    for ac_prog in t1asm
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_T1ASM+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$T1ASM"; then
-  ac_cv_prog_T1ASM="$T1ASM" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_T1ASM="$ac_prog"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-T1ASM=$ac_cv_prog_T1ASM
-if test -n "$T1ASM"; then
-  { $as_echo "$as_me:$LINENO: result: $T1ASM" >&5
-$as_echo "$T1ASM" >&6; }
-else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$T1ASM" && break
-done
-test -n "$T1ASM" || T1ASM="no"
-
-
-
-    r="`eval echo '$'"T1ASM"`"
-    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"T1ASM"`' : '.*\(echo\)' > /dev/null; then
-       true
-    else
-       ##STEPMAKE_WARN(cannot find . )
-       false
-    fi
-
-    if test $? -ne 0; then
-
-    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"t1asm\"`\"
-
-       if test "REQUIRED" = "REQUIRED"; then
-           command="echo ERROR: t1asm not found"
-           # abort configure process here?
-       else
-           command="- echo t1asm not found"
-       fi
-       eval "T1ASM"='$command'
-       false
-    else
-       true
-    fi
-
-    if test $? -eq 0; then
-       for ac_prog in t1asm
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_T1ASM+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  case $T1ASM in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_T1ASM="$T1ASM" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_T1ASM="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_path_T1ASM="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -11881,52 +11863,150 @@ $as_echo "$ver" >&6; }
 
 
 
-## Optional tools for building documentation, website, extra fonts.
-
 # guile executable for some scripts
 
+    { $as_echo "$as_me:$LINENO: checking for guile" >&5
+$as_echo_n "checking for guile... " >&6; }
+    guile="guile"
+    found="no"
+    for r in $GUILE guile guile2 guile2.0 guile-2.0 guile1 guile1.9 guile1.8 guile-1 guile-1.9 guile-1.8; do
+       exe=`
+    ## which doesn't work in ash, if /usr/bin/which isn't installed
+    ## type -p doesn't work in ash
+    ## command -v doesn't work in zsh
+    ## command -v "$r" 2>&1
+    ## this test should work in ash, bash, pdksh (ksh), zsh
+    type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}'
+`
+       if ! $exe --version > /dev/null 2>&1 ; then
+           continue
+       fi
+       ver=`
+    ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
+    ##
+    ## ARG.
+    ## Workaround for broken Debian gcc version string:
+    ##     gcc (GCC) 3.1.1 20020606 (Debian prerelease)
+    ##
+    ## -V: Workaround for python
 
-    for ac_prog in guile guile1
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_GUILE+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$GUILE"; then
-  ac_cv_prog_GUILE="$GUILE" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_GUILE="$ac_prog"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-IFS=$as_save_IFS
+    #dnl
 
-fi
-fi
-GUILE=$ac_cv_prog_GUILE
-if test -n "$GUILE"; then
-  { $as_echo "$as_me:$LINENO: result: $GUILE" >&5
-$as_echo "$GUILE" >&6; }
-else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
+    ## Assume and hunt for dotted version multiplet.
+    ## use eval trickery, because we cannot use multi-level $() instead of ``
+    ## for compatibility reasons.
 
+    ## grab the first version number in  --version output.
+    eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1 |
+               tr ' ' '\n' |
+               sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1\`\"
 
-  test -n "$GUILE" && break
-done
+    if test -z "$_ver"; then
+        ## If empty, try date [fontforge]
+        eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \
+           | head -n 1 \
+           | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
+    fi
+    echo "$_ver"
+    #dnl
+`
+       num=`
+    echo "$ver" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+       req=`
+    echo "1.8.2" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+       sup=`
+    echo "1.9.0" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+       if test -n "1.8.2" && test "$num" -lt "$req"; then
+           guile="$r >= 1.8.2 (installed: $ver)"
+           continue
+       else
+           if test -n "1.9.0" && test "$num" -ge "$sup"; then
+               guile="$r < 1.9.0 (installed: $ver)"
+               continue
+           else
+               guile=$r
+               found=$r
+               break
+           fi
+       fi
+    done
+    { $as_echo "$as_me:$LINENO: result: $found" >&5
+$as_echo "$found" >&6; }
+    if test "$found" != "no"; then
+       { $as_echo "$as_me:$LINENO: checking $guile version" >&5
+$as_echo_n "checking $guile version... " >&6; }
+       { $as_echo "$as_me:$LINENO: result: $ver" >&5
+$as_echo "$ver" >&6; }
+       GUILE=$found
+    else
+
+    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"$guile\"`\"
+
+    fi
+
+    for ac_prog in $GUILE
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_GUILE+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GUILE"; then
+  ac_cv_prog_GUILE="$GUILE" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_GUILE="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+GUILE=$ac_cv_prog_GUILE
+if test -n "$GUILE"; then
+  { $as_echo "$as_me:$LINENO: result: $GUILE" >&5
+$as_echo "$GUILE" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$GUILE" && break
+done
 test -n "$GUILE" || GUILE="no"
 
 
@@ -11941,13 +12021,13 @@ test -n "$GUILE" || GUILE="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"guile guile1\"`\"
+    eval ""=\"`eval echo \"'$'\" \"$GUILE\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
-           command="echo ERROR: guile guile1 not found"
+       if test "" = "REQUIRED"; then
+           command="echo ERROR: $GUILE not found"
            # abort configure process here?
        else
-           command="- echo guile guile1 not found"
+           command="- echo $GUILE not found"
        fi
        eval "GUILE"='$command'
        false
@@ -11955,29 +12035,857 @@ test -n "$GUILE" || GUILE="no"
        true
     fi
 
-    if test $? -eq 0; then
-       for ac_prog in guile guile1
+    if test $? -eq 0; then
+       for ac_prog in $GUILE
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GUILE+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $GUILE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GUILE="$GUILE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GUILE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GUILE=$ac_cv_path_GUILE
+if test -n "$GUILE"; then
+  { $as_echo "$as_me:$LINENO: result: $GUILE" >&5
+$as_echo "$GUILE" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$GUILE" && break
+done
+
+       if test -n ""; then
+
+    r="`eval echo '$'"GUILE"`"
+    { $as_echo "$as_me:$LINENO: checking $r version" >&5
+$as_echo_n "checking $r version... " >&6; }
+    exe=`
+    ## which doesn't work in ash, if /usr/bin/which isn't installed
+    ## type -p doesn't work in ash
+    ## command -v doesn't work in zsh
+    ## command -v "$r" 2>&1
+    ## this test should work in ash, bash, pdksh (ksh), zsh
+    type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}'
+`
+    if test -n ""; then
+        ver=""
+    else
+        ver=`
+    ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
+    ##
+    ## ARG.
+    ## Workaround for broken Debian gcc version string:
+    ##     gcc (GCC) 3.1.1 20020606 (Debian prerelease)
+    ##
+    ## -V: Workaround for python
+
+    #dnl
+
+    ## Assume and hunt for dotted version multiplet.
+    ## use eval trickery, because we cannot use multi-level $() instead of ``
+    ## for compatibility reasons.
+
+    ## grab the first version number in  --version output.
+    eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1 |
+               tr ' ' '\n' |
+               sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1\`\"
+
+    if test -z "$_ver"; then
+        ## If empty, try date [fontforge]
+        eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \
+           | head -n 1 \
+           | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
+    fi
+    echo "$_ver"
+    #dnl
+`
+    fi
+    num=`
+    echo "$ver" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+    req=`
+    echo "" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+    { $as_echo "$as_me:$LINENO: result: $ver" >&5
+$as_echo "$ver" >&6; }
+    if test "$num" -lt "$req"; then
+
+    eval ""=\"`eval echo \"'$'\" \""$r >=  (installed: $ver)"\"`\"
+
+    fi
+    vervar="`echo GUILE | tr 'a-z' 'A-Z'`_VERSION"
+    eval `echo $vervar=$num`
+##    AC_SUBST(`eval echo $vervar`)
+
+       fi
+    fi
+
+
+
+# perl for help2man and for mf2pt1.pl
+
+
+    for ac_prog in perl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_PERL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$PERL"; then
+  ac_cv_prog_PERL="$PERL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_PERL="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+PERL=$ac_cv_prog_PERL
+if test -n "$PERL"; then
+  { $as_echo "$as_me:$LINENO: result: $PERL" >&5
+$as_echo "$PERL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$PERL" && break
+done
+test -n "$PERL" || PERL="no"
+
+
+
+    r="`eval echo '$'"PERL"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"PERL"`' : '.*\(echo\)' > /dev/null; then
+       true
+    else
+       ##STEPMAKE_WARN(cannot find . )
+       false
+    fi
+
+    if test $? -ne 0; then
+
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"perl\"`\"
+
+       if test "REQUIRED" = "REQUIRED"; then
+           command="echo ERROR: perl not found"
+           # abort configure process here?
+       else
+           command="- echo perl not found"
+       fi
+       eval "PERL"='$command'
+       false
+    else
+       true
+    fi
+
+    if test $? -eq 0; then
+       for ac_prog in perl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PERL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $PERL in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+  { $as_echo "$as_me:$LINENO: result: $PERL" >&5
+$as_echo "$PERL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$PERL" && break
+done
+
+       if test -n ""; then
+
+    r="`eval echo '$'"PERL"`"
+    { $as_echo "$as_me:$LINENO: checking $r version" >&5
+$as_echo_n "checking $r version... " >&6; }
+    exe=`
+    ## which doesn't work in ash, if /usr/bin/which isn't installed
+    ## type -p doesn't work in ash
+    ## command -v doesn't work in zsh
+    ## command -v "$r" 2>&1
+    ## this test should work in ash, bash, pdksh (ksh), zsh
+    type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}'
+`
+    if test -n ""; then
+        ver=""
+    else
+        ver=`
+    ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
+    ##
+    ## ARG.
+    ## Workaround for broken Debian gcc version string:
+    ##     gcc (GCC) 3.1.1 20020606 (Debian prerelease)
+    ##
+    ## -V: Workaround for python
+
+    #dnl
+
+    ## Assume and hunt for dotted version multiplet.
+    ## use eval trickery, because we cannot use multi-level $() instead of ``
+    ## for compatibility reasons.
+
+    ## grab the first version number in  --version output.
+    eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1 |
+               tr ' ' '\n' |
+               sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1\`\"
+
+    if test -z "$_ver"; then
+        ## If empty, try date [fontforge]
+        eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \
+           | head -n 1 \
+           | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
+    fi
+    echo "$_ver"
+    #dnl
+`
+    fi
+    num=`
+    echo "$ver" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+    req=`
+    echo "" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+    { $as_echo "$as_me:$LINENO: result: $ver" >&5
+$as_echo "$ver" >&6; }
+    if test "$num" -lt "$req"; then
+
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
+
+    fi
+    vervar="`echo PERL | tr 'a-z' 'A-Z'`_VERSION"
+    eval `echo $vervar=$num`
+##    AC_SUBST(`eval echo $vervar`)
+
+       fi
+    fi
+
+
+
+## Optional tools for building documentation, website, extra fonts.
+if test "$DOCUMENTATION" = "yes"; then
+  DOCUMENTATION_REQUIRED=REQUIRED
+else
+  DOCUMENTATION_REQUIRED=OPTIONAL
+fi
+
+
+    for ac_prog in gs
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_GHOSTSCRIPT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GHOSTSCRIPT"; then
+  ac_cv_prog_GHOSTSCRIPT="$GHOSTSCRIPT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_GHOSTSCRIPT="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+GHOSTSCRIPT=$ac_cv_prog_GHOSTSCRIPT
+if test -n "$GHOSTSCRIPT"; then
+  { $as_echo "$as_me:$LINENO: result: $GHOSTSCRIPT" >&5
+$as_echo "$GHOSTSCRIPT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$GHOSTSCRIPT" && break
+done
+test -n "$GHOSTSCRIPT" || GHOSTSCRIPT="no"
+
+
+
+    r="`eval echo '$'"GHOSTSCRIPT"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"GHOSTSCRIPT"`' : '.*\(echo\)' > /dev/null; then
+       true
+    else
+       ##STEPMAKE_WARN(cannot find . )
+       false
+    fi
+
+    if test $? -ne 0; then
+
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"gs\"`\"
+
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
+           command="echo ERROR: gs not found"
+           # abort configure process here?
+       else
+           command="- echo gs not found"
+       fi
+       eval "GHOSTSCRIPT"='$command'
+       false
+    else
+       true
+    fi
+
+    if test $? -eq 0; then
+       for ac_prog in gs
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GHOSTSCRIPT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $GHOSTSCRIPT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GHOSTSCRIPT="$GHOSTSCRIPT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GHOSTSCRIPT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GHOSTSCRIPT=$ac_cv_path_GHOSTSCRIPT
+if test -n "$GHOSTSCRIPT"; then
+  { $as_echo "$as_me:$LINENO: result: $GHOSTSCRIPT" >&5
+$as_echo "$GHOSTSCRIPT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$GHOSTSCRIPT" && break
+done
+
+       if test -n "8.60"; then
+
+    r="`eval echo '$'"GHOSTSCRIPT"`"
+    { $as_echo "$as_me:$LINENO: checking $r version" >&5
+$as_echo_n "checking $r version... " >&6; }
+    exe=`
+    ## which doesn't work in ash, if /usr/bin/which isn't installed
+    ## type -p doesn't work in ash
+    ## command -v doesn't work in zsh
+    ## command -v "$r" 2>&1
+    ## this test should work in ash, bash, pdksh (ksh), zsh
+    type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}'
+`
+    if test -n ""; then
+        ver=""
+    else
+        ver=`
+    ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
+    ##
+    ## ARG.
+    ## Workaround for broken Debian gcc version string:
+    ##     gcc (GCC) 3.1.1 20020606 (Debian prerelease)
+    ##
+    ## -V: Workaround for python
+
+    #dnl
+
+    ## Assume and hunt for dotted version multiplet.
+    ## use eval trickery, because we cannot use multi-level $() instead of ``
+    ## for compatibility reasons.
+
+    ## grab the first version number in  --version output.
+    eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1 |
+               tr ' ' '\n' |
+               sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1\`\"
+
+    if test -z "$_ver"; then
+        ## If empty, try date [fontforge]
+        eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \
+           | head -n 1 \
+           | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
+    fi
+    echo "$_ver"
+    #dnl
+`
+    fi
+    num=`
+    echo "$ver" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+    req=`
+    echo "8.60" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+    { $as_echo "$as_me:$LINENO: result: $ver" >&5
+$as_echo "$ver" >&6; }
+    if test "$num" -lt "$req"; then
+
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >= 8.60 (installed: $ver)"\"`\"
+
+    fi
+    vervar="`echo GHOSTSCRIPT | tr 'a-z' 'A-Z'`_VERSION"
+    eval `echo $vervar=$num`
+##    AC_SUBST(`eval echo $vervar`)
+
+       fi
+    fi
+
+
+
+    for ac_prog in makeinfo
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_MAKEINFO+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MAKEINFO"; then
+  ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_MAKEINFO="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+MAKEINFO=$ac_cv_prog_MAKEINFO
+if test -n "$MAKEINFO"; then
+  { $as_echo "$as_me:$LINENO: result: $MAKEINFO" >&5
+$as_echo "$MAKEINFO" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$MAKEINFO" && break
+done
+test -n "$MAKEINFO" || MAKEINFO="no"
+
+
+
+    r="`eval echo '$'"MAKEINFO"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"MAKEINFO"`' : '.*\(echo\)' > /dev/null; then
+       true
+    else
+       ##STEPMAKE_WARN(cannot find . )
+       false
+    fi
+
+    if test $? -ne 0; then
+
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"makeinfo\"`\"
+
+       if test "REQUIRED" = "REQUIRED"; then
+           command="echo ERROR: makeinfo not found"
+           # abort configure process here?
+       else
+           command="- echo makeinfo not found"
+       fi
+       eval "MAKEINFO"='$command'
+       false
+    else
+       true
+    fi
+
+    if test $? -eq 0 -a -n "4.11"; then
+
+    r="`eval echo '$'"MAKEINFO"`"
+    { $as_echo "$as_me:$LINENO: checking $r version" >&5
+$as_echo_n "checking $r version... " >&6; }
+    exe=`
+    ## which doesn't work in ash, if /usr/bin/which isn't installed
+    ## type -p doesn't work in ash
+    ## command -v doesn't work in zsh
+    ## command -v "$r" 2>&1
+    ## this test should work in ash, bash, pdksh (ksh), zsh
+    type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}'
+`
+    if test -n ""; then
+        ver=""
+    else
+        ver=`
+    ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
+    ##
+    ## ARG.
+    ## Workaround for broken Debian gcc version string:
+    ##     gcc (GCC) 3.1.1 20020606 (Debian prerelease)
+    ##
+    ## -V: Workaround for python
+
+    #dnl
+
+    ## Assume and hunt for dotted version multiplet.
+    ## use eval trickery, because we cannot use multi-level $() instead of ``
+    ## for compatibility reasons.
+
+    ## grab the first version number in  --version output.
+    eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1 |
+               tr ' ' '\n' |
+               sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1\`\"
+
+    if test -z "$_ver"; then
+        ## If empty, try date [fontforge]
+        eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \
+           | head -n 1 \
+           | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
+    fi
+    echo "$_ver"
+    #dnl
+`
+    fi
+    num=`
+    echo "$ver" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+    req=`
+    echo "4.11" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+    { $as_echo "$as_me:$LINENO: result: $ver" >&5
+$as_echo "$ver" >&6; }
+    if test "$num" -lt "$req"; then
+
+    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 4.11 (installed: $ver)"\"`\"
+
+    fi
+    vervar="`echo MAKEINFO | tr 'a-z' 'A-Z'`_VERSION"
+    eval `echo $vervar=$num`
+##    AC_SUBST(`eval echo $vervar`)
+
+    fi
+
+
+    for ac_prog in texi2html
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_TEXI2HTML+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$TEXI2HTML"; then
+  ac_cv_prog_TEXI2HTML="$TEXI2HTML" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_TEXI2HTML="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+TEXI2HTML=$ac_cv_prog_TEXI2HTML
+if test -n "$TEXI2HTML"; then
+  { $as_echo "$as_me:$LINENO: result: $TEXI2HTML" >&5
+$as_echo "$TEXI2HTML" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$TEXI2HTML" && break
+done
+test -n "$TEXI2HTML" || TEXI2HTML="no"
+
+
+
+    r="`eval echo '$'"TEXI2HTML"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"TEXI2HTML"`' : '.*\(echo\)' > /dev/null; then
+       true
+    else
+       ##STEPMAKE_WARN(cannot find . )
+       false
+    fi
+
+    if test $? -ne 0; then
+
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"texi2html\"`\"
+
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
+           command="echo ERROR: texi2html not found"
+           # abort configure process here?
+       else
+           command="- echo texi2html not found"
+       fi
+       eval "TEXI2HTML"='$command'
+       false
+    else
+       true
+    fi
+
+    if test $? -eq 0 -a -n "1.82"; then
+
+    r="`eval echo '$'"TEXI2HTML"`"
+    { $as_echo "$as_me:$LINENO: checking $r version" >&5
+$as_echo_n "checking $r version... " >&6; }
+    exe=`
+    ## which doesn't work in ash, if /usr/bin/which isn't installed
+    ## type -p doesn't work in ash
+    ## command -v doesn't work in zsh
+    ## command -v "$r" 2>&1
+    ## this test should work in ash, bash, pdksh (ksh), zsh
+    type -p $r 2>/dev/null | tail -n 1 | awk '{print $NF}'
+`
+    if test -n ""; then
+        ver=""
+    else
+        ver=`
+    ## "$exe" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
+    ##
+    ## ARG.
+    ## Workaround for broken Debian gcc version string:
+    ##     gcc (GCC) 3.1.1 20020606 (Debian prerelease)
+    ##
+    ## -V: Workaround for python
+
+    #dnl
+
+    ## Assume and hunt for dotted version multiplet.
+    ## use eval trickery, because we cannot use multi-level $() instead of ``
+    ## for compatibility reasons.
+
+    ## grab the first version number in  --version output.
+    eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1 |
+               tr ' ' '\n' |
+               sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
+               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
+               head -n 1\`\"
+
+    if test -z "$_ver"; then
+        ## If empty, try date [fontforge]
+        eval _ver=\"\`("$exe" --version || "$exe" -V) 2>&1 | grep '[0-9]\{6,8\}' \
+           | head -n 1 \
+           | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
+    fi
+    echo "$_ver"
+    #dnl
+`
+    fi
+    num=`
+    echo "$ver" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+    req=`
+    echo "1.82" | awk -F. '
+    {
+      if ($3) {three = $3}
+      else {three = 0}
+    }
+    {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
+`
+    { $as_echo "$as_me:$LINENO: result: $ver" >&5
+$as_echo "$ver" >&6; }
+    if test "$num" -lt "$req"; then
+
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >= 1.82 (installed: $ver)"\"`\"
+
+    fi
+    vervar="`echo TEXI2HTML | tr 'a-z' 'A-Z'`_VERSION"
+    eval `echo $vervar=$num`
+##    AC_SUBST(`eval echo $vervar`)
+
+    fi
+
+
+    for ac_prog in dblatex
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_GUILE+set}" = set; then
+if test "${ac_cv_prog_DBLATEX+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
-  case $GUILE in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_GUILE="$GUILE" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$DBLATEX"; then
+  ac_cv_prog_DBLATEX="$DBLATEX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_GUILE="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_prog_DBLATEX="$ac_prog"
     $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -11985,25 +12893,51 @@ done
 done
 IFS=$as_save_IFS
 
-  ;;
-esac
 fi
-GUILE=$ac_cv_path_GUILE
-if test -n "$GUILE"; then
-  { $as_echo "$as_me:$LINENO: result: $GUILE" >&5
-$as_echo "$GUILE" >&6; }
+fi
+DBLATEX=$ac_cv_prog_DBLATEX
+if test -n "$DBLATEX"; then
+  { $as_echo "$as_me:$LINENO: result: $DBLATEX" >&5
+$as_echo "$DBLATEX" >&6; }
 else
   { $as_echo "$as_me:$LINENO: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$GUILE" && break
+  test -n "$DBLATEX" && break
 done
+test -n "$DBLATEX" || DBLATEX="no"
 
-       if test -n ""; then
 
-    r="`eval echo '$'"GUILE"`"
+
+    r="`eval echo '$'"DBLATEX"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"DBLATEX"`' : '.*\(echo\)' > /dev/null; then
+       true
+    else
+       ##STEPMAKE_WARN(cannot find . )
+       false
+    fi
+
+    if test $? -ne 0; then
+
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"dblatex\"`\"
+
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
+           command="echo ERROR: dblatex not found"
+           # abort configure process here?
+       else
+           command="- echo dblatex not found"
+       fi
+       eval "DBLATEX"='$command'
+       false
+    else
+       true
+    fi
+
+    if test $? -eq 0 -a -n "0.1.4"; then
+
+    r="`eval echo '$'"DBLATEX"`"
     { $as_echo "$as_me:$LINENO: checking $r version" >&5
 $as_echo_n "checking $r version... " >&6; }
     exe=`
@@ -12060,7 +12994,7 @@ $as_echo_n "checking $r version... " >&6; }
     {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
 `
     req=`
-    echo "" | awk -F. '
+    echo "0.1.4" | awk -F. '
     {
       if ($3) {three = $3}
       else {three = 0}
@@ -12071,32 +13005,27 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >=  (installed: $ver)"\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >= 0.1.4 (installed: $ver)"\"`\"
 
     fi
-    vervar="`echo GUILE | tr 'a-z' 'A-Z'`_VERSION"
+    vervar="`echo DBLATEX | tr 'a-z' 'A-Z'`_VERSION"
     eval `echo $vervar=$num`
 ##    AC_SUBST(`eval echo $vervar`)
 
-       fi
     fi
 
 
-
-# perl for help2man.
-
-
-    for ac_prog in perl
+    for ac_prog in bibtex
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_PERL+set}" = set; then
+if test "${ac_cv_prog_BIBTEX+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$PERL"; then
-  ac_cv_prog_PERL="$PERL" # Let the user override the test.
+  if test -n "$BIBTEX"; then
+  ac_cv_prog_BIBTEX="$BIBTEX" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -12105,7 +13034,7 @@ do
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_PERL="$ac_prog"
+    ac_cv_prog_BIBTEX="$ac_prog"
     $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -12115,24 +13044,24 @@ IFS=$as_save_IFS
 
 fi
 fi
-PERL=$ac_cv_prog_PERL
-if test -n "$PERL"; then
-  { $as_echo "$as_me:$LINENO: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
+BIBTEX=$ac_cv_prog_BIBTEX
+if test -n "$BIBTEX"; then
+  { $as_echo "$as_me:$LINENO: result: $BIBTEX" >&5
+$as_echo "$BIBTEX" >&6; }
 else
   { $as_echo "$as_me:$LINENO: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$PERL" && break
+  test -n "$BIBTEX" && break
 done
-test -n "$PERL" || PERL="no"
+test -n "$BIBTEX" || BIBTEX="no"
 
 
 
-    r="`eval echo '$'"PERL"`"
-    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"PERL"`' : '.*\(echo\)' > /dev/null; then
+    r="`eval echo '$'"BIBTEX"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"BIBTEX"`' : '.*\(echo\)' > /dev/null; then
        true
     else
        ##STEPMAKE_WARN(cannot find . )
@@ -12141,69 +13070,23 @@ test -n "$PERL" || PERL="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"perl\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"bibtex\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
-           command="echo ERROR: perl not found"
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
+           command="echo ERROR: bibtex not found"
            # abort configure process here?
        else
-           command="- echo perl not found"
+           command="- echo bibtex not found"
        fi
-       eval "PERL"='$command'
+       eval "BIBTEX"='$command'
        false
     else
        true
     fi
 
-    if test $? -eq 0; then
-       for ac_prog in perl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PERL+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  case $PERL in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-PERL=$ac_cv_path_PERL
-if test -n "$PERL"; then
-  { $as_echo "$as_me:$LINENO: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
-else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$PERL" && break
-done
-
-       if test -n ""; then
+    if test $? -eq 0 -a -n ""; then
 
-    r="`eval echo '$'"PERL"`"
+    r="`eval echo '$'"BIBTEX"`"
     { $as_echo "$as_me:$LINENO: checking $r version" >&5
 $as_echo_n "checking $r version... " >&6; }
     exe=`
@@ -12271,30 +13154,27 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >=  (installed: $ver)"\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
 
     fi
-    vervar="`echo PERL | tr 'a-z' 'A-Z'`_VERSION"
+    vervar="`echo BIBTEX | tr 'a-z' 'A-Z'`_VERSION"
     eval `echo $vervar=$num`
 ##    AC_SUBST(`eval echo $vervar`)
 
-       fi
     fi
 
 
-
-
-    for ac_prog in makeinfo
+    for ac_prog in pdflatex
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_MAKEINFO+set}" = set; then
+if test "${ac_cv_prog_PDFLATEX+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$MAKEINFO"; then
-  ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
+  if test -n "$PDFLATEX"; then
+  ac_cv_prog_PDFLATEX="$PDFLATEX" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -12303,7 +13183,7 @@ do
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_MAKEINFO="$ac_prog"
+    ac_cv_prog_PDFLATEX="$ac_prog"
     $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -12313,24 +13193,24 @@ IFS=$as_save_IFS
 
 fi
 fi
-MAKEINFO=$ac_cv_prog_MAKEINFO
-if test -n "$MAKEINFO"; then
-  { $as_echo "$as_me:$LINENO: result: $MAKEINFO" >&5
-$as_echo "$MAKEINFO" >&6; }
+PDFLATEX=$ac_cv_prog_PDFLATEX
+if test -n "$PDFLATEX"; then
+  { $as_echo "$as_me:$LINENO: result: $PDFLATEX" >&5
+$as_echo "$PDFLATEX" >&6; }
 else
   { $as_echo "$as_me:$LINENO: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$MAKEINFO" && break
+  test -n "$PDFLATEX" && break
 done
-test -n "$MAKEINFO" || MAKEINFO="no"
+test -n "$PDFLATEX" || PDFLATEX="no"
 
 
 
-    r="`eval echo '$'"MAKEINFO"`"
-    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"MAKEINFO"`' : '.*\(echo\)' > /dev/null; then
+    r="`eval echo '$'"PDFLATEX"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"PDFLATEX"`' : '.*\(echo\)' > /dev/null; then
        true
     else
        ##STEPMAKE_WARN(cannot find . )
@@ -12339,23 +13219,23 @@ test -n "$MAKEINFO" || MAKEINFO="no"
 
     if test $? -ne 0; then
 
-    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \"makeinfo\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"pdflatex\"`\"
 
-       if test "REQUIRED" = "REQUIRED"; then
-           command="echo ERROR: makeinfo not found"
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
+           command="echo ERROR: pdflatex not found"
            # abort configure process here?
        else
-           command="- echo makeinfo not found"
+           command="- echo pdflatex not found"
        fi
-       eval "MAKEINFO"='$command'
+       eval "PDFLATEX"='$command'
        false
     else
        true
     fi
 
-    if test $? -eq 0 -a -n "4.11"; then
+    if test $? -eq 0 -a -n ""; then
 
-    r="`eval echo '$'"MAKEINFO"`"
+    r="`eval echo '$'"PDFLATEX"`"
     { $as_echo "$as_me:$LINENO: checking $r version" >&5
 $as_echo_n "checking $r version... " >&6; }
     exe=`
@@ -12412,7 +13292,7 @@ $as_echo_n "checking $r version... " >&6; }
     {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
 `
     req=`
-    echo "4.11" | awk -F. '
+    echo "" | awk -F. '
     {
       if ($3) {three = $3}
       else {three = 0}
@@ -12423,27 +13303,27 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "REQUIRED"=\"`eval echo \"'$'REQUIRED\" \""$r >= 4.11 (installed: $ver)"\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
 
     fi
-    vervar="`echo MAKEINFO | tr 'a-z' 'A-Z'`_VERSION"
+    vervar="`echo PDFLATEX | tr 'a-z' 'A-Z'`_VERSION"
     eval `echo $vervar=$num`
 ##    AC_SUBST(`eval echo $vervar`)
 
     fi
 
 
-    for ac_prog in texi2html
+    for ac_prog in pdfetex pdftex etex
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_TEXI2HTML+set}" = set; then
+if test "${ac_cv_prog_PDFTEX+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$TEXI2HTML"; then
-  ac_cv_prog_TEXI2HTML="$TEXI2HTML" # Let the user override the test.
+  if test -n "$PDFTEX"; then
+  ac_cv_prog_PDFTEX="$PDFTEX" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -12452,7 +13332,7 @@ do
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_TEXI2HTML="$ac_prog"
+    ac_cv_prog_PDFTEX="$ac_prog"
     $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -12462,24 +13342,24 @@ IFS=$as_save_IFS
 
 fi
 fi
-TEXI2HTML=$ac_cv_prog_TEXI2HTML
-if test -n "$TEXI2HTML"; then
-  { $as_echo "$as_me:$LINENO: result: $TEXI2HTML" >&5
-$as_echo "$TEXI2HTML" >&6; }
+PDFTEX=$ac_cv_prog_PDFTEX
+if test -n "$PDFTEX"; then
+  { $as_echo "$as_me:$LINENO: result: $PDFTEX" >&5
+$as_echo "$PDFTEX" >&6; }
 else
   { $as_echo "$as_me:$LINENO: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$TEXI2HTML" && break
+  test -n "$PDFTEX" && break
 done
-test -n "$TEXI2HTML" || TEXI2HTML="no"
+test -n "$PDFTEX" || PDFTEX="no"
 
 
 
-    r="`eval echo '$'"TEXI2HTML"`"
-    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"TEXI2HTML"`' : '.*\(echo\)' > /dev/null; then
+    r="`eval echo '$'"PDFTEX"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"PDFTEX"`' : '.*\(echo\)' > /dev/null; then
        true
     else
        ##STEPMAKE_WARN(cannot find . )
@@ -12488,23 +13368,23 @@ test -n "$TEXI2HTML" || TEXI2HTML="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"texi2html\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"pdfetex pdftex etex\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
-           command="echo ERROR: texi2html not found"
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
+           command="echo ERROR: pdfetex pdftex etex not found"
            # abort configure process here?
        else
-           command="- echo texi2html not found"
+           command="- echo pdfetex pdftex etex not found"
        fi
-       eval "TEXI2HTML"='$command'
+       eval "PDFTEX"='$command'
        false
     else
        true
     fi
 
-    if test $? -eq 0 -a -n "1.82"; then
+    if test $? -eq 0 -a -n ""; then
 
-    r="`eval echo '$'"TEXI2HTML"`"
+    r="`eval echo '$'"PDFTEX"`"
     { $as_echo "$as_me:$LINENO: checking $r version" >&5
 $as_echo_n "checking $r version... " >&6; }
     exe=`
@@ -12561,7 +13441,7 @@ $as_echo_n "checking $r version... " >&6; }
     {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
 `
     req=`
-    echo "1.82" | awk -F. '
+    echo "" | awk -F. '
     {
       if ($3) {three = $3}
       else {three = 0}
@@ -12572,27 +13452,27 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= 1.82 (installed: $ver)"\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
 
     fi
-    vervar="`echo TEXI2HTML | tr 'a-z' 'A-Z'`_VERSION"
+    vervar="`echo PDFTEX | tr 'a-z' 'A-Z'`_VERSION"
     eval `echo $vervar=$num`
 ##    AC_SUBST(`eval echo $vervar`)
 
     fi
 
 
-    for ac_prog in dblatex
+    for ac_prog in texi2pdf
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DBLATEX+set}" = set; then
+if test "${ac_cv_prog_TEXI2PDF+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$DBLATEX"; then
-  ac_cv_prog_DBLATEX="$DBLATEX" # Let the user override the test.
+  if test -n "$TEXI2PDF"; then
+  ac_cv_prog_TEXI2PDF="$TEXI2PDF" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -12601,7 +13481,7 @@ do
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_DBLATEX="$ac_prog"
+    ac_cv_prog_TEXI2PDF="$ac_prog"
     $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -12611,24 +13491,24 @@ IFS=$as_save_IFS
 
 fi
 fi
-DBLATEX=$ac_cv_prog_DBLATEX
-if test -n "$DBLATEX"; then
-  { $as_echo "$as_me:$LINENO: result: $DBLATEX" >&5
-$as_echo "$DBLATEX" >&6; }
+TEXI2PDF=$ac_cv_prog_TEXI2PDF
+if test -n "$TEXI2PDF"; then
+  { $as_echo "$as_me:$LINENO: result: $TEXI2PDF" >&5
+$as_echo "$TEXI2PDF" >&6; }
 else
   { $as_echo "$as_me:$LINENO: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$DBLATEX" && break
+  test -n "$TEXI2PDF" && break
 done
-test -n "$DBLATEX" || DBLATEX="no"
+test -n "$TEXI2PDF" || TEXI2PDF="no"
 
 
 
-    r="`eval echo '$'"DBLATEX"`"
-    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"DBLATEX"`' : '.*\(echo\)' > /dev/null; then
+    r="`eval echo '$'"TEXI2PDF"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"TEXI2PDF"`' : '.*\(echo\)' > /dev/null; then
        true
     else
        ##STEPMAKE_WARN(cannot find . )
@@ -12637,23 +13517,23 @@ test -n "$DBLATEX" || DBLATEX="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"dblatex\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"texi2pdf\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
-           command="echo ERROR: dblatex not found"
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
+           command="echo ERROR: texi2pdf not found"
            # abort configure process here?
        else
-           command="- echo dblatex not found"
+           command="- echo texi2pdf not found"
        fi
-       eval "DBLATEX"='$command'
+       eval "TEXI2PDF"='$command'
        false
     else
        true
     fi
 
-    if test $? -eq 0 -a -n "0.1.4"; then
+    if test $? -eq 0 -a -n ""; then
 
-    r="`eval echo '$'"DBLATEX"`"
+    r="`eval echo '$'"TEXI2PDF"`"
     { $as_echo "$as_me:$LINENO: checking $r version" >&5
 $as_echo_n "checking $r version... " >&6; }
     exe=`
@@ -12710,7 +13590,7 @@ $as_echo_n "checking $r version... " >&6; }
     {printf "%.0f\n", $1*1000000 + $2*1000 + three}'
 `
     req=`
-    echo "0.1.4" | awk -F. '
+    echo "" | awk -F. '
     {
       if ($3) {three = $3}
       else {three = 0}
@@ -12721,27 +13601,27 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >= 0.1.4 (installed: $ver)"\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
 
     fi
-    vervar="`echo DBLATEX | tr 'a-z' 'A-Z'`_VERSION"
+    vervar="`echo TEXI2PDF | tr 'a-z' 'A-Z'`_VERSION"
     eval `echo $vervar=$num`
 ##    AC_SUBST(`eval echo $vervar`)
 
     fi
 
 
-    for ac_prog in pdflatex
+    for ac_prog in texindex
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_PDFLATEX+set}" = set; then
+if test "${ac_cv_prog_TEXINDEX+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$PDFLATEX"; then
-  ac_cv_prog_PDFLATEX="$PDFLATEX" # Let the user override the test.
+  if test -n "$TEXINDEX"; then
+  ac_cv_prog_TEXINDEX="$TEXINDEX" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -12750,7 +13630,7 @@ do
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_PDFLATEX="$ac_prog"
+    ac_cv_prog_TEXINDEX="$ac_prog"
     $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -12760,24 +13640,24 @@ IFS=$as_save_IFS
 
 fi
 fi
-PDFLATEX=$ac_cv_prog_PDFLATEX
-if test -n "$PDFLATEX"; then
-  { $as_echo "$as_me:$LINENO: result: $PDFLATEX" >&5
-$as_echo "$PDFLATEX" >&6; }
+TEXINDEX=$ac_cv_prog_TEXINDEX
+if test -n "$TEXINDEX"; then
+  { $as_echo "$as_me:$LINENO: result: $TEXINDEX" >&5
+$as_echo "$TEXINDEX" >&6; }
 else
   { $as_echo "$as_me:$LINENO: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$PDFLATEX" && break
+  test -n "$TEXINDEX" && break
 done
-test -n "$PDFLATEX" || PDFLATEX="no"
+test -n "$TEXINDEX" || TEXINDEX="no"
 
 
 
-    r="`eval echo '$'"PDFLATEX"`"
-    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"PDFLATEX"`' : '.*\(echo\)' > /dev/null; then
+    r="`eval echo '$'"TEXINDEX"`"
+    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"TEXINDEX"`' : '.*\(echo\)' > /dev/null; then
        true
     else
        ##STEPMAKE_WARN(cannot find . )
@@ -12786,15 +13666,15 @@ test -n "$PDFLATEX" || PDFLATEX="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"pdflatex\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"texindex\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
-           command="echo ERROR: pdflatex not found"
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
+           command="echo ERROR: texindex not found"
            # abort configure process here?
        else
-           command="- echo pdflatex not found"
+           command="- echo texindex not found"
        fi
-       eval "PDFLATEX"='$command'
+       eval "TEXINDEX"='$command'
        false
     else
        true
@@ -12802,7 +13682,7 @@ test -n "$PDFLATEX" || PDFLATEX="no"
 
     if test $? -eq 0 -a -n ""; then
 
-    r="`eval echo '$'"PDFLATEX"`"
+    r="`eval echo '$'"TEXINDEX"`"
     { $as_echo "$as_me:$LINENO: checking $r version" >&5
 $as_echo_n "checking $r version... " >&6; }
     exe=`
@@ -12870,15 +13750,41 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >=  (installed: $ver)"\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
 
     fi
-    vervar="`echo PDFLATEX | tr 'a-z' 'A-Z'`_VERSION"
+    vervar="`echo TEXINDEX | tr 'a-z' 'A-Z'`_VERSION"
     eval `echo $vervar=$num`
 ##    AC_SUBST(`eval echo $vervar`)
 
     fi
 
+{ $as_echo "$as_me:$LINENO: checking for epsf.tex" >&5
+$as_echo_n "checking for epsf.tex... " >&6; }
+TEX_EPSF=`kpsewhich tex epsf`
+if test "$TEX_EPSF" = ""; then
+    { $as_echo "$as_me:$LINENO: result: not found" >&5
+$as_echo "not found" >&6; }
+
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"epsf.tex\"`\"
+
+else
+    { $as_echo "$as_me:$LINENO: result: $TEX_EPSF" >&5
+$as_echo "$TEX_EPSF" >&6; }
+fi
+{ $as_echo "$as_me:$LINENO: checking for Cyrillic characters support in TeX" >&5
+$as_echo_n "checking for Cyrillic characters support in TeX... " >&6; }
+TEX_FIKPARM=`kpsewhich -format=mf fikparm`
+if test "$TEX_FIKPARM" = ""; then
+    { $as_echo "$as_me:$LINENO: result: not found" >&5
+$as_echo "not found" >&6; }
+
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"'lh CTAN package (texlive-lang-cyrillic or texlive-texmf-fonts)'\"`\"
+
+else
+    { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
 
     for ac_prog in pngtopnm
 do
@@ -12935,9 +13841,9 @@ test -n "$NETPBM" || NETPBM="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"pngtopnm\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"pngtopnm\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
            command="echo ERROR: pngtopnm not found"
            # abort configure process here?
        else
@@ -13019,7 +13925,7 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >=  (installed: $ver)"\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
 
     fi
     vervar="`echo NETPBM | tr 'a-z' 'A-Z'`_VERSION"
@@ -13084,9 +13990,9 @@ test -n "$IMAGEMAGICK" || IMAGEMAGICK="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"convert\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"convert\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
            command="echo ERROR: convert not found"
            # abort configure process here?
        else
@@ -13168,7 +14074,7 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >=  (installed: $ver)"\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
 
     fi
     vervar="`echo IMAGEMAGICK | tr 'a-z' 'A-Z'`_VERSION"
@@ -13234,9 +14140,9 @@ test -n "$ZIPDOC" || ZIPDOC="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"zip\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"zip\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
            command="echo ERROR: zip not found"
            # abort configure process here?
        else
@@ -13318,7 +14224,7 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >=  (installed: $ver)"\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
 
     fi
     vervar="`echo ZIPDOC | tr 'a-z' 'A-Z'`_VERSION"
@@ -13383,9 +14289,9 @@ test -n "$RSYNC" || RSYNC="no"
 
     if test $? -ne 0; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \"rsync\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \"rsync\"`\"
 
-       if test "OPTIONAL" = "REQUIRED"; then
+       if test "$DOCUMENTATION_REQUIRED" = "REQUIRED"; then
            command="echo ERROR: rsync not found"
            # abort configure process here?
        else
@@ -13467,7 +14373,7 @@ $as_echo_n "checking $r version... " >&6; }
 $as_echo "$ver" >&6; }
     if test "$num" -lt "$req"; then
 
-    eval "OPTIONAL"=\"`eval echo \"'$'OPTIONAL\" \""$r >=  (installed: $ver)"\"`\"
+    eval "$DOCUMENTATION_REQUIRED"=\"`eval echo \"'$'$DOCUMENTATION_REQUIRED\" \""$r >=  (installed: $ver)"\"`\"
 
     fi
     vervar="`echo RSYNC | tr 'a-z' 'A-Z'`_VERSION"
@@ -13477,7 +14383,6 @@ $as_echo "$ver" >&6; }
     fi
 
 
-
 cat >>confdefs.h <<_ACEOF
 #define FLOWER_VERSION "${FULL_FLOWER_VERSION}"
 _ACEOF
@@ -14763,7 +15668,7 @@ fi
 
     if test -n "$OPTIONAL"; then
        echo
-        echo "WARNING: Please consider installing optional programs: $OPTIONAL"
+        echo "WARNING: Please consider installing optional programs or files: $OPTIONAL"
     fi
 
     if test -n "$REQUIRED"; then
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..008befe
--- /dev/null
@@ -0,0 +1,289 @@
+dnl configure.ac   -*-shell-script-*-
+dnl Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.60)
+
+# Bootstrap the init process.
+AC_INIT
+
+# Bootstrap StepMake configure
+AC_CONFIG_AUX_DIR([config])
+
+STEPMAKE_INIT
+
+# List a file that identifies your package.
+AC_CONFIG_SRCDIR([lily/main.cc])
+
+# Move to aclocal.m4?
+AC_CONFIG_HEADERS([$CONFIGFILE.hh:config.hh.in])
+
+# Uncomment the configuration options your package needs.
+
+DOCUMENTATION=yes
+AC_ARG_ENABLE(documentation,
+    [AS_HELP_STRING([--enable-documentation],
+                   [build Documentation.  Default: on])],
+    [DOCUMENTATION=$enableval])
+AC_SUBST(DOCUMENTATION)
+
+AC_ARG_WITH(ncsb-dir,
+    [AS_HELP_STRING([--with-ncsb-dir=DIR],
+                   [location of Century Schoolbook fonts.])],
+    [NCSB_DIR=$withval],
+    [NCSB_DIR=""])
+
+reloc_b=no
+AC_ARG_ENABLE(relocation,
+    [AS_HELP_STRING([--enable-relocation],
+                   [compile with dynamic relocation.  Default: off])],
+    [reloc_b=$enableval])
+
+rpath_b=no
+AC_ARG_ENABLE(rpath,
+    [AS_HELP_STRING([--enable-rpath],
+                   [hardcode runtime library path.  Default: off])],
+    [rpath_b=$enableval])
+
+LINK_GXX_STATICALLY=no
+AC_ARG_ENABLE(static-gxx,
+    [AS_HELP_STRING([--enable-static-gxx],
+                   [link libstdc++.a statically.  Default: off])],
+    [LINK_GXX_STATICALLY=$enableval])
+AC_SUBST(LINK_GXX_STATICALLY)
+
+# must come before any header checks
+STEPMAKE_COMPILE
+
+AC_CHECK_PROG(FCLIST, fc-list, fc-list)
+AC_MSG_CHECKING([for New Century Schoolbook PFB files])
+AC_SUBST(NCSB_SOURCE_FILES)
+AC_SUBST(NCSB_DIR)
+if test "$NCSB_DIR" = ""; then
+  if test "$FCLIST" != ""; then
+    NCSB_FILE=`$FCLIST "Century Schoolbook L:foundry=urw:fontformat=Type 1:lang=ru" file \
+              | head -n 1`
+    if test "$NCSB_FILE" != ""; then
+      NCSB_FILE=`echo $NCSB_FILE | sed 's/\(:.*\)$//g'`
+      NCSB_FILE=`$PYTHON "$srcdir/scripts/auxiliar/readlink.py" $NCSB_FILE`
+      NCSB_DIR=`AS_DIRNAME($NCSB_FILE)`
+    fi
+  fi
+fi
+if test "$NCSB_DIR" != "" ;  then
+  for f in c059013l.pfb c059016l.pfb c059033l.pfb c059036l.pfb; do
+    if test ! -f "$NCSB_DIR/$f"; then
+      MISSING_NCSB_SOURCE_FILES="$f $MISSING_NCSB_SOURCE_FILES"
+    else
+      if test "`grep Cyrillic "$NCSB_DIR/$f"`" = ""; then
+        INCOMPLETE_NCSB_SOURCE_FILES="$f $INCOMPLETE_NCSB_SOURCE_FILES"
+      else
+        NCSB_SOURCE_FILES="$NCSB_DIR/$f $NCSB_SOURCE_FILES"
+      fi
+    fi
+  done
+fi
+if test "$NCSB_DIR" = "" -o "$MISSING_NCSB_SOURCE_FILES" != "$INCOMPLETE_NCSB_SOURCE_FILES"; then
+  AC_MSG_RESULT(no)
+  STEPMAKE_ADD_ENTRY(REQUIRED,International New Century Schoolbook fonts)
+  if test "$NCSB_DIR" = ""; then
+    if test "$FCLIST" = ""; then
+      STEPMAKE_ADD_ENTRY(REQUIRED,'(install the fc-list utility from FontConfig, or use --with-ncsb-dir)')
+    else
+      STEPMAKE_ADD_ENTRY(REQUIRED,'(make sure the fc-list utility can see them, or use --with-ncsb-dir)')
+    fi
+  fi
+  if test "$MISSING_NCSB_SOURCE_FILES" != ""; then
+    STEPMAKE_ADD_ENTRY(REQUIRED,'(these files are missing: $MISSING_NCSB_SOURCE_FILES)')
+  fi
+  if test "$INCOMPLETE_NCSB_SOURCE_FILES" != ""; then
+    STEPMAKE_ADD_ENTRY(REQUIRED,'(these files do not contain Cyrillic characters: $INCOMPLETE_NCSB_SOURCE_FILES)')
+  fi
+else
+  AC_MSG_RESULT(yes)
+fi
+
+AC_LANG([C++])
+
+STEPMAKE_PYTHON(REQUIRED, 2.4, 3.0)
+# this checks if we have GNU C by compiling a program with
+# __GNUC__, but that macro now unofficially means "the compiler
+# supports the GNU C extensions" -- the intel C compiler and clang
+# both support __GNUC__!
+STEPMAKE_GCC_OR_CLANG(REQUIRED, 3.4)
+
+STEPMAKE_CXX(REQUIRED)
+STEPMAKE_GXX_OR_CLANG(REQUIRED, 3.4)
+STEPMAKE_GXXCODEGENBUG
+STEPMAKE_CXXTEMPLATE
+STEPMAKE_STL_DATA_METHOD
+STEPMAKE_LIB(REQUIRED)
+STEPMAKE_DLOPEN
+# Do not use bison 1.50 and 1.75.
+# 1.29 is required fr %locations, but I'm not sure it's enough --ns
+STEPMAKE_BISON(REQUIRED, 1.29)
+STEPMAKE_FLEX(REQUIRED)
+STEPMAKE_FLEXLEXER(REQUIRED)
+STEPMAKE_FLEXLEXER_LOCATION
+STEPMAKE_LOCALE
+STEPMAKE_GETTEXT
+STEPMAKE_MSGFMT(REQUIRED)
+STEPMAKE_TEXMF(REQUIRED)
+STEPMAKE_TEXMF_DIRS(REQUIRED)
+STEPMAKE_GUILE_DEVEL(REQUIRED, 1.8.2, 1.9.0)
+
+# check for 3 typedefs added in Guile 1.9
+save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$GUILE_CFLAGS $CXXFLAGS"
+AC_CHECK_TYPES([scm_t_hash_fold_fn, scm_t_hash_handle_fn],
+              [AC_DEFINE(HAVE_GUILE_HASH_FUNC)], [],
+              [#include <libguile.h>])
+AC_CHECK_TYPES([scm_t_subr],
+              [AC_DEFINE(HAVE_GUILE_SUBR_TYPE)], [],
+              [#include <libguile.h>])
+CXXFLAGS="$save_CXXFLAGS"
+
+## Check for usable cxxabi
+save_LIBS="$LIBS"
+LIBS="$LIBS $CXXABI_LIBS"
+AC_MSG_CHECKING(for usable C++ demangler)
+AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cxxabi.h>],
+           [abi::__cxa_demangle ("", 0, 0, 0)])],
+    [AC_DEFINE(HAVE_CXA_DEMANGLE)
+       AC_MSG_RESULT(yes)],[
+       LIBS="$LIBS -lsupc++"
+       AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cxxabi.h>],
+                   [abi::__cxa_demangle ("", 0, 0, 0)])],
+           [AC_DEFINE(HAVE_CXA_DEMANGLE)
+               AC_MSG_RESULT([yes, using -lsupc++])
+               CXXABI_LIBS="$CXXABI_LIBS -lsupc++"],
+           [AC_MSG_RESULT([no, use c++filt -t for manual demangling])])])
+LIBS="$save_LIBS"
+AC_SUBST(CXXABI_LIBS)
+
+## check rational bugfix.
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$GUILE_CFLAGS $CPPFLAGS"
+AC_MSG_CHECKING(GUILE rational bugfix)
+AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <libguile.h>
+#ifdef SCM_FRACTION_REDUCED_BIT
+#error
+#endif
+]])],[AC_MSG_RESULT(ok)],[REQUIRED="$REQUIRED GUILE-with-rational-bugfix"
+AC_MSG_RESULT(Must have patched GUILE rational support. See INSTALL.txt)])
+CPPFLAGS="$save_CPPFLAGS"
+
+
+STEPMAKE_PYTHON_DEVEL(REQUIRED, 2.4, 3.0)
+
+STEPMAKE_PATH_PROG(FONTFORGE, fontforge, REQUIRED, 20110222)
+
+STEPMAKE_PATH_PROG(T1ASM, t1asm, REQUIRED)
+
+AC_CHECK_HEADERS([assert.h grp.h libio.h pwd.h sys/stat.h wchar.h fpu_control.h])
+AC_CHECK_HEADERS([sstream])
+AC_HEADER_STAT
+AC_FUNC_MEMCMP
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS([chroot fopencookie gettext isinf memmem snprintf vsnprintf])
+
+STEPMAKE_PROGS(PKG_CONFIG, pkg-config, REQUIRED, 0.9.0)
+
+AC_MSG_CHECKING(whether to enable dynamic relocation)
+if test "$reloc_b" = "yes"; then
+    AC_DEFINE(ARGV0_RELOCATION)
+fi
+AC_MSG_RESULT($reloc_b)
+
+AC_MSG_CHECKING(for rpath linkage)
+if test "$rpath_b" = "yes"; then
+    LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,\\\$\$ORIGIN/../lib"
+elif test "$rpath_b" != "no"; then
+    LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,$rpath_b"
+fi
+AC_MSG_RESULT($rpath_b)
+
+HOST_ARCH=`$CC -dumpmachine`
+AC_SUBST(HOST_ARCH)
+
+STEPMAKE_PANGO_FT2(pangoft2, REQUIRED, 1.6.0)
+STEPMAKE_FONTCONFIG(fontconfig, REQUIRED, 2.4.0)
+STEPMAKE_FREETYPE2(freetype2, REQUIRED, 2.1.10)
+
+STEPMAKE_WINDOWS
+
+# guile executable for some scripts
+STEPMAKE_GUILE(OPTIONAL, 1.8.2, 1.9.0)
+
+# perl for help2man and for mf2pt1.pl
+STEPMAKE_PERL(REQUIRED)
+
+## Optional tools for building documentation, website, extra fonts.
+if test "$DOCUMENTATION" = "yes"; then
+  DOCUMENTATION_REQUIRED=REQUIRED
+else
+  DOCUMENTATION_REQUIRED=OPTIONAL
+fi
+
+STEPMAKE_PATH_PROG(GHOSTSCRIPT, gs, $DOCUMENTATION_REQUIRED, 8.60)
+
+STEPMAKE_PROGS(MAKEINFO, makeinfo, REQUIRED, 4.11)
+STEPMAKE_PROGS(TEXI2HTML, texi2html, $DOCUMENTATION_REQUIRED, 1.82)
+STEPMAKE_PROGS(DBLATEX, dblatex, $DOCUMENTATION_REQUIRED, 0.1.4)
+STEPMAKE_PROGS(BIBTEX, bibtex, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(PDFLATEX, pdflatex, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(PDFTEX, pdfetex pdftex etex, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(TEXI2PDF, texi2pdf, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(TEXINDEX, texindex, $DOCUMENTATION_REQUIRED)
+AC_MSG_CHECKING(for epsf.tex)
+TEX_EPSF=`kpsewhich tex epsf`
+if test "$TEX_EPSF" = ""; then
+    AC_MSG_RESULT(not found)
+    STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,epsf.tex)
+else
+    AC_MSG_RESULT($TEX_EPSF)
+fi
+AC_MSG_CHECKING(for Cyrillic characters support in TeX)
+TEX_FIKPARM=`kpsewhich -format=mf fikparm`
+if test "$TEX_FIKPARM" = ""; then
+    AC_MSG_RESULT(not found)
+    STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,
+['lh CTAN package (texlive-lang-cyrillic or texlive-texmf-fonts)'])
+else
+    AC_MSG_RESULT(yes)
+fi
+STEPMAKE_PROGS(NETPBM, pngtopnm, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(IMAGEMAGICK, convert, $DOCUMENTATION_REQUIRED)
+# this name avoids a conflict with ZIP in stepmake/aclocal.m4
+STEPMAKE_PROGS(ZIPDOC, zip, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(RSYNC, rsync, $DOCUMENTATION_REQUIRED)
+
+AC_DEFINE_UNQUOTED(FLOWER_VERSION, "${FULL_FLOWER_VERSION}")
+
+# must also have local.make if configure fails.
+touch local.make
+
+if test "$reloc_b$rpath_b" = "yesno"; then
+    STEPMAKE_WARN([Using --enable-relocation without --enable-rpath.  LilyPond may have trouble finding libraries.])
+fi
+
+# Gather requirements and generate output.
+STEPMAKE_END
+
+test -n "$CONFIGURATION" && mc=" conf=$CONFIGURATION" || mc=""
+
+if make top-doc 1>/dev/null 2>&1; then
+    rm -f INSTALL.txt && ln Documentation/topdocs/out/INSTALL.txt .
+    rm -f README.txt && ln Documentation/topdocs/out/README.txt .
+fi
+
+cat <<EOF
+
+Type:
+    make$mc all       to build LilyPond
+    make$mc install   to install LilyPond
+    make$mc help      to see all possible targets
+
+Edit local.make for local Makefile overrides.
+
+
+EOF
diff --git a/configure.in b/configure.in
deleted file mode 100644 (file)
index 74aaad6..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-dnl configure.in   -*-shell-script-*-
-dnl Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.60)
-
-# Bootstrap the init process.
-AC_INIT
-
-# Bootstrap StepMake configure
-# For user package:
-AC_CONFIG_AUX_DIR([stepmake/bin])
-
-# For stepmake package:
-# AC_CONFIG_AUX_DIR(bin)
-
-
-STEPMAKE_INIT
-
-# List a file that identifies your package.
-AC_CONFIG_SRCDIR([lily/main.cc])
-
-# Move to aclocal.m4?
-AC_CONFIG_HEADERS([$CONFIGFILE.hh:config.hh.in])
-
-# Uncomment the configuration options your package needs.
-
-DOCUMENTATION=yes
-AC_ARG_ENABLE(documentation,
-    [AS_HELP_STRING([--enable-documentation],
-                   [build Documentation.  Default: on])],
-    [DOCUMENTATION=$enableval])
-AC_SUBST(DOCUMENTATION)
-
-AC_ARG_WITH(ncsb-dir,
-    [AS_HELP_STRING([--with-ncsb-dir=DIR],
-                   [location of Century Schoolbook fonts.])],
-    [NCSB_DIR=$withval],
-    [NCSB_DIR=""])
-
-reloc_b=no
-AC_ARG_ENABLE(relocation,
-    [AS_HELP_STRING([--enable-relocation],
-                   [compile with dynamic relocation.  Default: off])],
-    [reloc_b=$enableval])
-
-rpath_b=no
-AC_ARG_ENABLE(rpath,
-    [AS_HELP_STRING([--enable-rpath],
-                   [hardcode runtime library path.  Default: off])],
-    [rpath_b=$enableval])
-
-LINK_GXX_STATICALLY=no
-AC_ARG_ENABLE(static-gxx,
-    [AS_HELP_STRING([--enable-static-gxx],
-                   [link libstdc++.a statically.  Default: off])],
-    [LINK_GXX_STATICALLY=$enableval])
-AC_SUBST(LINK_GXX_STATICALLY)
-
-# must come before any header checks
-STEPMAKE_COMPILE
-
-AC_CHECK_PROG(FCLIST, fc-list, fc-list)
-AC_MSG_CHECKING([New Century Schoolbook PFB files])
-AC_SUBST(NCSB_SOURCE_FILES)
-AC_SUBST(NCSB_DIR)
-UNCHECKED_NCSB_SOURCE_FILES=""
-if test "$NCSB_DIR" != "" ;  then
-  for f in c059013l c059016l c059033l c059036l; do
-    if test ! -f "$NCSB_DIR/$f.pfb"; then
-      STEPMAKE_WARN($NCSB_DIR does not contain $f.pfb.)
-    else
-      UNCHECKED_NCSB_SOURCE_FILES="$NCSB_DIR/$f.pfb $UNCHECKED_NCSB_SOURCE_FILES"
-    fi
-  done
-else
-  if test "$FCLIST" != ""; then
-    for style in Roman Italic "Bold Italic" Bold; do
-      NCSB_FILE=`$FCLIST "Century Schoolbook L:style=$style:foundry=urw:fontformat=Type 1" file \
-                | head -n 1`
-      NCSB_FILE=`echo $NCSB_FILE | sed 's/\(:.*\)$//g'`
-      NCSB_FILE=`$PYTHON "$srcdir/scripts/auxiliar/readlink.py" $NCSB_FILE`
-      UNCHECKED_NCSB_SOURCE_FILES="$NCSB_FILE $UNCHECKED_NCSB_SOURCE_FILES"
-    done
-    NCSB_DIR=`AS_DIRNAME($NCSB_FILE)`
-  else
-    AC_MSG_RESULT(not found)
-    echo "Can't find Century Schoolbook files. Install FontConfig's fc-list,"
-    echo "or use --with-ncsb-dir"
-  fi
-fi
-NCSB_SOURCE_FILES=""
-for f in $UNCHECKED_NCSB_SOURCE_FILES; do
-  if test "`grep Cyrillic "$f"`" = ""; then
-    STEPMAKE_WARN($f does not have Cyrillic characters.)
-  else
-    NCSB_SOURCE_FILES="$f $NCSB_SOURCE_FILES"
-  fi
-done
-AC_MSG_RESULT($NCSB_SOURCE_FILES)
-
-AC_LANG([C++])
-
-STEPMAKE_PYTHON(REQUIRED, 2.4)
-# this checks if we have GNU C by compiling a program with
-# __GNUC__, but that macro now unofficially means "the compiler
-# supports the GNU C extensions" -- the intel C compiler and clang
-# both support __GNUC__!
-STEPMAKE_GCC_OR_CLANG(REQUIRED, 3.4)
-
-STEPMAKE_CXX(REQUIRED)
-STEPMAKE_GXX_OR_CLANG(REQUIRED, 3.4)
-STEPMAKE_GXXCODEGENBUG
-STEPMAKE_CXXTEMPLATE
-STEPMAKE_STL_DATA_METHOD
-STEPMAKE_LIB(REQUIRED)
-STEPMAKE_DLOPEN
-# Do not use bison 1.50 and 1.75.
-# 1.29 is required fr %locations, but I'm not sure it's enough --ns
-STEPMAKE_BISON(OPTIONAL, 1.29)
-STEPMAKE_FLEX(REQUIRED)
-STEPMAKE_FLEXLEXER(REQUIRED)
-STEPMAKE_FLEXLEXER_LOCATION
-STEPMAKE_LOCALE
-STEPMAKE_GETTEXT
-STEPMAKE_MSGFMT(REQUIRED)
-STEPMAKE_TEXMF(REQUIRED)
-STEPMAKE_TEXMF_DIRS
-STEPMAKE_GUILE_DEVEL(REQUIRED, 1.8.2)
-
-# check for 3 typedefs added in Guile 1.9
-save_CXXFLAGS="$CXXFLAGS"
-CXXFLAGS="$GUILE_CFLAGS $CXXFLAGS"
-AC_CHECK_TYPES([scm_t_hash_fold_fn, scm_t_hash_handle_fn],
-              [AC_DEFINE(HAVE_GUILE_HASH_FUNC)], [],
-              [#include <libguile.h>])
-AC_CHECK_TYPES([scm_t_subr],
-              [AC_DEFINE(HAVE_GUILE_SUBR_TYPE)], [],
-              [#include <libguile.h>])
-CXXFLAGS="$save_CXXFLAGS"
-
-## Check for usable cxxabi
-save_LIBS="$LIBS"
-LIBS="$LIBS $CXXABI_LIBS"
-AC_MSG_CHECKING(for usable C++ demangler)
-AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cxxabi.h>],
-           [abi::__cxa_demangle ("", 0, 0, 0)])],
-    [AC_DEFINE(HAVE_CXA_DEMANGLE)
-       AC_MSG_RESULT(yes)],[
-       LIBS="$LIBS -lsupc++"
-       AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cxxabi.h>],
-                   [abi::__cxa_demangle ("", 0, 0, 0)])],
-           [AC_DEFINE(HAVE_CXA_DEMANGLE)
-               AC_MSG_RESULT([yes, using -lsupc++])
-               CXXABI_LIBS="$CXXABI_LIBS -lsupc++"],
-           [AC_MSG_RESULT([no, use c++filt -t for manual demangling])])])
-LIBS="$save_LIBS"
-AC_SUBST(CXXABI_LIBS)
-
-## check rational bugfix.
-save_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$GUILE_CFLAGS $CPPFLAGS"
-AC_MSG_CHECKING(GUILE rational bugfix)
-AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <libguile.h>
-#ifdef SCM_FRACTION_REDUCED_BIT
-#error
-#endif
-]])],[AC_MSG_RESULT(ok)],[REQUIRED="$REQUIRED GUILE-with-rational-bugfix"
-AC_MSG_RESULT(Must have patched GUILE rational support. See INSTALL.txt)])
-CPPFLAGS="$save_CPPFLAGS"
-
-
-STEPMAKE_PYTHON_DEVEL(REQUIRED)
-
-STEPMAKE_PATH_PROG(GHOSTSCRIPT, gs, OPTIONAL, 8.60)
-
-STEPMAKE_PATH_PROG(FONTFORGE, fontforge, REQUIRED, 20110222)
-
-STEPMAKE_PATH_PROG(T1ASM, t1asm, REQUIRED)
-
-AC_CHECK_HEADERS([assert.h grp.h libio.h pwd.h sys/stat.h wchar.h fpu_control.h])
-AC_CHECK_HEADERS([sstream])
-AC_HEADER_STAT
-AC_FUNC_MEMCMP
-AC_FUNC_VPRINTF
-AC_CHECK_FUNCS([chroot fopencookie gettext isinf memmem snprintf vsnprintf])
-
-STEPMAKE_PROGS(PKG_CONFIG, pkg-config, REQUIRED, 0.9.0)
-
-AC_MSG_CHECKING(whether to enable dynamic relocation)
-if test "$reloc_b" = "yes"; then
-    AC_DEFINE(ARGV0_RELOCATION)
-fi
-AC_MSG_RESULT($reloc_b)
-
-AC_MSG_CHECKING(for rpath linkage)
-if test "$rpath_b" = "yes"; then
-    LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,\\\$\$ORIGIN/../lib"
-elif test "$rpath_b" != "no"; then
-    LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,$rpath_b"
-fi
-AC_MSG_RESULT($rpath_b)
-
-HOST_ARCH=`$CC -dumpmachine`
-AC_SUBST(HOST_ARCH)
-
-STEPMAKE_PANGO_FT2(pangoft2, REQUIRED, 1.6.0)
-STEPMAKE_FONTCONFIG(fontconfig, REQUIRED, 2.4.0)
-STEPMAKE_FREETYPE2(freetype2, REQUIRED, 2.1.10)
-
-STEPMAKE_WINDOWS
-
-## Optional tools for building documentation, website, extra fonts.
-
-# guile executable for some scripts
-STEPMAKE_GUILE(OPTIONAL)
-
-# perl for help2man.
-STEPMAKE_PERL(OPTIONAL)
-
-STEPMAKE_PROGS(MAKEINFO, makeinfo, REQUIRED, 4.11)
-STEPMAKE_PROGS(TEXI2HTML, texi2html, OPTIONAL, 1.82)
-STEPMAKE_PROGS(DBLATEX, dblatex, OPTIONAL, 0.1.4)
-STEPMAKE_PROGS(PDFLATEX, pdflatex, OPTIONAL)
-STEPMAKE_PROGS(NETPBM, pngtopnm, OPTIONAL)
-STEPMAKE_PROGS(IMAGEMAGICK, convert, OPTIONAL)
-# this name avoids a conflict with ZIP in stepmake/aclocal.m4
-STEPMAKE_PROGS(ZIPDOC, zip, OPTIONAL)
-STEPMAKE_PROGS(RSYNC, rsync, OPTIONAL)
-
-
-AC_DEFINE_UNQUOTED(FLOWER_VERSION, "${FULL_FLOWER_VERSION}")
-
-# must also have local.make if configure fails.
-touch local.make
-
-if test "$reloc_b$rpath_b" = "yesno"; then
-    STEPMAKE_WARN([Using --enable-relocation without --enable-rpath.  LilyPond may have trouble finding libraries.])
-fi
-
-# Gather requirements and generate output.
-STEPMAKE_END
-
-test -n "$CONFIGURATION" && mc=" conf=$CONFIGURATION" || mc=""
-
-if make top-doc 1>/dev/null 2>&1; then
-    rm -f INSTALL.txt && ln Documentation/topdocs/out/INSTALL.txt .
-    rm -f README.txt && ln Documentation/topdocs/out/README.txt .
-fi
-
-cat <<EOF
-
-Type:
-    make$mc all       to build LilyPond
-    make$mc install   to install LilyPond
-    make$mc help      to see all possible targets
-
-Edit local.make for local Makefile overrides.
-
-
-EOF
index 9dcdf1ce6ed158339f0473176400d5a64078f3e5..b7308e2040d8a333974b92a629bb82238343ceb8 100644 (file)
@@ -9,7 +9,6 @@ INSTALLATION_OUT_DIR=$(elispdir)
 INSTALLATION_OUT_FILES=$(outdir)/lilypond-words.el
 
 STEPMAKE_TEMPLATES=elisp install install-out
-EXTRA_DIST_FILES= emacsclient.patch server.el.patch 
 
 include $(depth)/make/stepmake.make
 
diff --git a/elisp/emacsclient.patch b/elisp/emacsclient.patch
deleted file mode 100644 (file)
index e2df3ed..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-diff -ur emacs-20.5/lib-src/ChangeLog emacs-hanwen/lib-src/ChangeLog
---- emacs-20.5/lib-src/ChangeLog       Fri Dec 10 17:25:36 1999
-+++ emacs-hanwen/lib-src/ChangeLog     Sun Jul 16 23:00:54 2000
-@@ -1,3 +1,7 @@
-+2000-07-16  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
-+      
-+      * emacsclient.c: Added support for +LINE:COLUMN style arguments.
-+
- 1999-12-04  Gerd Moellmann  <gerd@gnu.org>
-       * Version 20.5 released.
-Only in emacs-hanwen/lib-src: ChangeLog~
-diff -ur emacs-20.5/lib-src/emacsclient.c emacs-hanwen/lib-src/emacsclient.c
---- emacs-20.5/lib-src/emacsclient.c   Wed Nov  3 14:12:46 1999
-+++ emacs-hanwen/lib-src/emacsclient.c Sun Jul 16 22:10:35 2000
-@@ -27,6 +27,7 @@
- #undef close
- #undef signal
-+#include <ctype.h> 
- #include <stdio.h>
- #include <getopt.h>
- #ifdef STDC_HEADERS
-@@ -323,7 +324,7 @@
-       if (*argv[i] == '+')
-       {
-         char *p = argv[i] + 1;
--        while (*p >= '0' && *p <= '9') p++;
-+        while (isdigit (*p) || *p == ':') p++;
-         if (*p != 0)
-           fprintf (out, "%s/", quote_file_name (cwd));
-       }
-@@ -466,7 +467,8 @@
-       if (*modified_arg == '+')
-       {
-         char *p = modified_arg + 1;
--        while (*p >= '0' && *p <= '9') p++;
-+        while (isdigit (*p) || *p == ':')
-+          p++;
-         if (*p != 0)
-           need_cwd = 1;
-       }
-Only in emacs-hanwen/lib-src: emacsclient.c~
-diff -ur emacs-20.5/lib-src/emacsserver.c emacs-hanwen/lib-src/emacsserver.c
---- emacs-20.5/lib-src/emacsserver.c   Mon Feb 22 21:44:14 1999
-+++ emacs-hanwen/lib-src/emacsserver.c Sun Jul 16 22:09:52 2000
-@@ -61,6 +61,7 @@
- #include <errno.h>
- #include <sys/stat.h>
-+
- #ifdef HAVE_UNISTD_H
- #include <unistd.h>
- #endif
-Only in emacs-hanwen/lib-src: emacsserver.c~
-Only in emacs-hanwen/lib-src: suf.el~
-diff -ur emacs-20.5/lisp/ChangeLog emacs-hanwen/lisp/ChangeLog
---- emacs-20.5/lisp/ChangeLog  Fri Dec 10 17:25:02 1999
-+++ emacs-hanwen/lisp/ChangeLog        Sun Jul 16 23:00:04 2000
-@@ -1,3 +1,8 @@
-+2000-07-16  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
-+
-+      * server.el (server-process-filter,server-visit-files): add support for "LINE:COLUMN"
-+      style emacsclient calls.
-+
- 1999-12-04  Gerd Moellmann  <gerd@gnu.org>
-       * Version 20.5 released.
-Only in emacs-hanwen/lisp: ChangeLog~
-diff -ur emacs-20.5/lisp/server.el emacs-hanwen/lisp/server.el
---- emacs-20.5/lisp/server.el  Sat Mar 13 01:20:25 1999
-+++ emacs-hanwen/lisp/server.el        Sun Jul 16 23:04:41 2000
-@@ -215,7 +215,8 @@
-                                 default-file-name-coding-system)))
-         client nowait
-         (files nil)
--        (lineno 1))
-+        (lineno 1)
-+        (columnno 0))
-       ;; Remove this line from STRING.
-       (setq string (substring string (match-end 0)))    
-       (if (string-match "^Error: " request)
-@@ -232,9 +233,17 @@
-                 (setq request (substring request (match-end 0)))
-                 (if (string-match "\\`-nowait" arg)
-                     (setq nowait t)
--                  (if (string-match "\\`\\+[0-9]+\\'" arg)
--                      ;; ARG is a line number option.
--                      (setq lineno (read (substring arg 1)))
-+                  (cond
-+                      ;; ARG is a line number option.
-+                   ((string-match "\\`\\+[0-9]+\\'" arg)
-+                    (setq lineno (read (substring arg 1)))
-+                    )
-+                   ;; ARG is line number / column option. 
-+                   ((string-match "\\`\\+[0-9]+:[0-9]+\\'" arg)
-+                    (setq lineno (read (substring arg 1 (string-match ":" arg))))
-+                    (setq columnno (read (substring arg (+ 1 (string-match ":" arg)))))
-+                    )
-+                   (t
-                     ;; ARG is a file name.
-                     ;; Collapse multiple slashes to single slashes.
-                     (setq arg (command-line-normalize-file-name arg))
-@@ -253,9 +262,11 @@
-                     (if coding-system
-                         (setq arg (decode-coding-string arg coding-system)))
-                     (setq files
--                          (cons (list arg lineno)
-+                          (cons (list arg lineno columnno)
-                                 files))
--                    (setq lineno 1)))))
-+                    (setq lineno 1)
-+                    (setq columnno 0)
-+                    )))))
-             (server-visit-files files client nowait)
-             ;; CLIENT is now a list (CLIENTNUM BUFFERS...)
-             (or nowait
-@@ -267,9 +278,11 @@
-   ;; Save for later any partial line that remains.
-   (setq server-previous-string string))
-+
-+
- (defun server-visit-files (files client &optional nowait)
-   "Finds FILES and returns the list CLIENT with the buffers nconc'd.
--FILES is an alist whose elements are (FILENAME LINENUMBER).
-+FILES is an alist whose elements are (FILENAME LINENUMBER COLUMNNUMBER).
- NOWAIT non-nil means this client is not waiting for the results,
- so don't mark these buffers specially, just visit them normally."
-   ;; Bind last-nonmenu-event to force use of keyboard, not mouse, for queries.
-@@ -297,6 +310,7 @@
-             (set-buffer (find-file-noselect filen))
-             (run-hooks 'server-visit-hook)))
-         (goto-line (nth 1 (car files)))
-+        (move-to-column (nth 2 (car files)))
-         (if (not nowait)
-             (setq server-buffer-clients
-                   (cons (car client) server-buffer-clients)))
-@@ -304,6 +318,7 @@
-         (setq files (cdr files)))
-       (set-buffer obuf))
-     (nconc client client-record)))
-+
\f
- (defun server-buffer-done (buffer &optional for-killing)
-   "Mark BUFFER as \"done\" for its client(s).
-Only in emacs-hanwen/lisp: server.el.orig
-Only in emacs-hanwen/lisp: server.el~
index 934d1d6f0b7e7cf25eff3cf4935724d6398480b8..be05016071bb46c67686a80c83c8d2a63aad0868 100644 (file)
@@ -286,15 +286,14 @@ in LilyPond-include-path."
 (defun LilyPond-compile-file (command name)
   ;; We maybe should know what we run here (Lily, lilypond, tex)
   ;; and adjust our error-matching regex ?
-  (compile-internal
+  (compilation-start
    (if (eq LilyPond-command-current 'LilyPond-command-master)
        command
      ;; use temporary directory for Commands on Buffer/Region
      ;; hm.. the directory is set twice, first to default-dir
-     (concat "cd " (LilyPond-temp-directory) "; " command))
-   "No more errors" name))
+     (concat "cd " (LilyPond-temp-directory) "; " command))))
 
-;; do we still need this, now that we're using compile-internal?
+;; do we still need this, now that we're using compilation-start?
 (defun LilyPond-save-buffer ()
   "Save buffer and set default command for compiling."
   (interactive)
@@ -436,8 +435,6 @@ in LilyPond-include-path."
   `(
     ("LilyPond" . (,(concat LilyPond-lilypond-command " %s") "%s" "%l" "View"))
     ("2PS" . (,(concat LilyPond-lilypond-command " -f ps %s") "%s" "%p" "ViewPS"))
-    ("2Gnome" . (,(concat LilyPond-lilypond-command " -b gnome %s")))
-
     ("Book" . ("lilypond-book %x" "%x" "%l" "LaTeX"))
     ("LaTeX" . ("latex '\\nonstopmode\\input %l'" "%l" "%d" "ViewDVI"))
 
@@ -570,11 +567,6 @@ Must be the car of an entry in `LilyPond-command-alist'."
   (LilyPond-command (LilyPond-command-menu "2PS") 'LilyPond-get-master-file)
 )
 
-(defun LilyPond-command-formatgnome ()
-  "Format the gnome output of the current document."
-  (interactive)
-  (LilyPond-command (LilyPond-command-menu "2Gnome") 'LilyPond-get-master-file))
-
 (defun LilyPond-command-formatmidi ()
   "Format the midi output of the current document."
   (interactive)
@@ -632,14 +624,15 @@ Must be the car of an entry in `LilyPond-command-alist'."
               (l (split-file-name file))
               (dir (car l))
               (base (cadr l)))
-         (LilyPond-command-expand
-          (concat (substring string 0 b)
-                  (shell-quote-argument (concat dir base))
-                  (let ((entry (assoc (substring string b e)
-                                      LilyPond-expand-alist)))
-                    (if entry (cdr entry) ""))
-                  (substring string e))
-          file))
+         (concat (substring string 0 b)
+                 (shell-quote-argument (concat dir base))
+                 (LilyPond-command-expand
+                  (concat
+                   (let ((entry (assoc (substring string b e)
+                                       LilyPond-expand-alist)))
+                     (if entry (cdr entry) ""))
+                   (substring string e))
+                  file)))
       string)))
 
 (defun LilyPond-shell-process (name buffer command)
@@ -758,7 +751,6 @@ command."
   (define-key LilyPond-mode-map "\C-c\C-c" 'LilyPond-command-master)
   (define-key LilyPond-mode-map "\C-cm" 'LilyPond-command-formatmidi)
   (define-key LilyPond-mode-map "\C-c\C-f" 'LilyPond-command-formatps)
-  (define-key LilyPond-mode-map "\C-c\C-g" 'LilyPond-command-formatgnome)
   (define-key LilyPond-mode-map "\C-c\C-s" 'LilyPond-command-view)
   (define-key LilyPond-mode-map "\C-c\C-p" 'LilyPond-command-viewps)
   (define-key LilyPond-mode-map [(control c) return] 'LilyPond-command-current-midi)
diff --git a/elisp/server.el.patch b/elisp/server.el.patch
deleted file mode 100644 (file)
index fb3c59f..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-From: Jan Nieuwenhuizen <janneke@gnu.org>
-Subject: Bugfix and feature for server.el
-To: emacs-devel@gnu.org
-cc: Han-Wen <hanwen@cs.uu.nl>
-Date: Sat, 10 Aug 2002 17:46:22 +0200
-Organization: Jan at Peder
-
-
-Find the following fix attached.  We had a problem with our
-application that uses `emacslient --no-wait' to edit input files.
-
-Emacs-21.2 (unlike previous versions), when invoked through
-`emacsclient --no-wait', wants to revert buffers whenever they have
-been edited, and does allow any editing, which is annoying.  When
-invoking with --no-wait, we are typically `moving around' and editing
-the same file all the time; and do not want to revert.
-
-When it does revert the buffer, it does not use the column argument of
-emacsclient; this is now fixed.
-
-Greetings,
-Han-Wen and Jan.
-
-
-Btw: this message was sent to bug-gnu-emacs about three weeks ago, but
-     that list seems to be slightly foobarred?  We both have current
-     disclaimers with GNU.
-
-
-ChangeLog:
-2002-07-21  Jan Nieuwenhuizen  <janneke@gnu.org>
-
-       * server.el (server-process-filter): Cleanup stray if.  Add
-       'no-revert to file list entry when emacsclient was invoked with
-       '--no-wait'.
-       (server-visit-files): New function goto-line-column.  Accept
-       'no-revert option.  Bugfix: also goto column when reverting
-       buffer.
-
---- server.el.~1.78.~  2001-12-18 17:42:38.000000000 +0100
-+++ server.el  2002-08-10 17:32:10.000000000 +0200
-@@ -251,40 +251,43 @@ Prefix arg means just kill any existing 
-                      (substring request (match-beginning 0) (1- (match-end 0))))
-                     (pos 0))
-                 (setq request (substring request (match-end 0)))
--                (if (string-match "\\`-nowait" arg)
--                    (setq nowait t)
--                  (cond
--                      ;; ARG is a line number option.
--                   ((string-match "\\`\\+[0-9]+\\'" arg)
-+                (cond
-+                 ((string-match "\\`-nowait" arg)
-+                  (setq nowait t))
-+                 ;; ARG is a line number option.
-+                 ((string-match "\\`\\+[0-9]+\\'" arg)
-                     (setq lineno (string-to-int (substring arg 1))))
--                   ;; ARG is line number:column option. 
--                   ((string-match "\\`+\\([0-9]+\\):\\([0-9]+\\)\\'" arg)
--                    (setq lineno (string-to-int (match-string 1 arg))
--                          columnno (string-to-int (match-string 2 arg))))
--                   (t
--                    ;; ARG is a file name.
--                    ;; Collapse multiple slashes to single slashes.
--                    (setq arg (command-line-normalize-file-name arg))
--                    ;; Undo the quoting that emacsclient does
--                    ;; for certain special characters.
--                    (while (string-match "&." arg pos)
--                      (setq pos (1+ (match-beginning 0)))
--                      (let ((nextchar (aref arg pos)))
--                        (cond ((= nextchar ?&)
--                               (setq arg (replace-match "&" t t arg)))
--                              ((= nextchar ?-)
--                               (setq arg (replace-match "-" t t arg)))
--                              (t
--                               (setq arg (replace-match " " t t arg))))))
--                    ;; Now decode the file name if necessary.
--                    (if coding-system
--                        (setq arg (decode-coding-string arg coding-system)))
--                    (setq files
--                          (cons (list arg lineno columnno)
--                                files))
--                    (setq lineno 1)
--                    (setq columnno 0))))))
--            (run-hooks 'pre-command-hook)
-+                 ;; ARG is line number:column option. 
-+                 ((string-match "\\`+\\([0-9]+\\):\\([0-9]+\\)\\'" arg)
-+                  (setq lineno (string-to-int (match-string 1 arg))
-+                        columnno (string-to-int (match-string 2 arg))))
-+                 (t
-+                  ;; ARG is a file name.
-+                  ;; Collapse multiple slashes to single slashes.
-+                  (setq arg (command-line-normalize-file-name arg))
-+                  ;; Undo the quoting that emacsclient does
-+                  ;; for certain special characters.
-+                  (while (string-match "&." arg pos)
-+                    (setq pos (1+ (match-beginning 0)))
-+                    (let ((nextchar (aref arg pos)))
-+                      (cond ((= nextchar ?&)
-+                             (setq arg (replace-match "&" t t arg)))
-+                            ((= nextchar ?-)
-+                             (setq arg (replace-match "-" t t arg)))
-+                            (t
-+                             (setq arg (replace-match " " t t arg))))))
-+                  ;; Now decode the file name if necessary.
-+                  (if coding-system
-+                      (setq arg (decode-coding-string arg coding-system)))
-+                  (setq files
-+                        ;; When invoking emacsclient with --no-wait, we are
-+                        ;; typically `moving around' and editing the same file;
-+                        ;; and do not want to revert.  Should make --no-revert
-+                        ;; option for emacsclient?
-+                        (cons (list arg lineno columnno (if nowait 'no-revert nil))
-+                              files))
-+                  (setq lineno 1)
-+                  (setq columnno 0)))))
-             (server-visit-files files client nowait)
-             (run-hooks 'post-command-hook)
-             ;; CLIENT is now a list (CLIENTNUM BUFFERS...)
-@@ -309,6 +312,13 @@ Prefix arg means just kill any existing 
- FILES is an alist whose elements are (FILENAME LINENUMBER COLUMNNUMBER).
- NOWAIT non-nil means this client is not waiting for the results,
- so don't mark these buffers specially, just visit them normally."
-+
-+  (defun goto-line-column (file-line-col)
-+    (goto-line (nth 1 file-line-col))
-+    (let ((column-number (nth 2 file-line-col)))
-+      (if (> column-number 0)
-+        (move-to-column (1- column-number)))))
-+  
-   ;; Bind last-nonmenu-event to force use of keyboard, not mouse, for queries.
-   (let (client-record (last-nonmenu-event t) (obuf (current-buffer)))
-     ;; Restore the current buffer afterward, but not using save-excursion,
-@@ -322,7 +332,8 @@ so don't mark these buffers specially, j
-         (let* ((filen (car (car files)))
-                (obuf (get-file-buffer filen)))
-           (push filen file-name-history)
--          (if (and obuf (set-buffer obuf))
-+          (if (and obuf (set-buffer obuf)
-+                   (not (memq 'no-revert (car files))))
-               (progn
-                 (cond ((file-exists-p filen)
-                        (if (or (not (verify-visited-file-modtime obuf))
-@@ -335,12 +346,9 @@ so don't mark these buffers specially, j
-                                     ", write buffer to file? "))
-                            (write-file filen))))
-                 (setq server-existing-buffer t)
--                (goto-line (nth 1 (car files))))
-+                (goto-line-column (car files)))
-             (set-buffer (find-file-noselect filen))
--            (goto-line (nth 1 (car files)))
--            (let ((column-number (nth 2 (car files))))
--              (when (> column-number 0)
--                (move-to-column (1- column-number))))
-+            (goto-line-column (car files))
-             (run-hooks 'server-visit-hook)))
-         (if (not nowait)
-             (setq server-buffer-clients
-
--- 
-Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond - The music typesetter
-http://www.xs4all.nl/~jantien       | http://www.lilypond.org
-
-
-
-
index 83fc5576fa694fb2763461ead4dc6e25f707f950..2b5b304cfa083f3c9be18498f5ee7915ac7e38cb 100644 (file)
@@ -2,11 +2,8 @@ depth = ..
 
 NAME = flower
 MODULE_NAME = flower
-SUBDIRS = include
 
-SCRIPTS =
 README_FILES = NEWS-1.0 NEWS-1.1.46 README TODO
-EXTRA_DIST_FILES= VERSION $(README_FILES) $(SCRIPTS)
 STEPMAKE_TEMPLATES=library c++ po test
 
 # test uses LILYPOND_DATADIR
index c24c0731e4f237bccba2ac3dd1d0b8b450210a19..1746c2c28d84adc5cbe8cd19f5e8d431dec10383 100644 (file)
@@ -51,7 +51,7 @@ using namespace std;
 
 #ifdef __CYGWIN__
 static string
-dos_to_posix (string file_name)
+dos_to_posix (const string &file_name)
 {
   char buf[PATH_MAX] = "";
   char s[PATH_MAX] = {0};
@@ -78,7 +78,7 @@ slashify (string file_name)
 }
 
 string
-dir_name (string const file_name)
+dir_name (const string &file_name)
 {
   string s = file_name;
   s = slashify (s);
index d0dd3a1f990afd846dc1dc73ed0a06485aa80024..b19732d15ee43050025792b2098a0b229baee662 100644 (file)
@@ -47,13 +47,13 @@ File_path::directories () const
 
 #include <algorithm>
 void
-File_path::parse_path (string p)
+File_path::parse_path (const string &p)
 {
   concat (dirs_, string_split (p, PATHSEP));
 }
 
 bool
-is_file (string file_name)
+is_file (const string &file_name)
 {
 #if !STAT_MACROS_BROKEN
   struct stat sbuf;
@@ -106,7 +106,7 @@ directory, in this order.
 The file name if found, or empty string if not found. */
 
 string
-File_path::find (string name) const
+File_path::find (const string &name) const
 {
   if (!name.length () || (name == "-"))
     return name;
@@ -146,7 +146,7 @@ File_path::find (string name) const
   where EXT is from EXTENSIONS.
 */
 string
-File_path::find (string name, char const *extensions[])
+File_path::find (const string &name, char const *extensions[])
 {
   if (name.empty () || name == "-")
     return name;
@@ -195,13 +195,13 @@ File_path::to_string () const
 }
 
 void
-File_path::append (string str)
+File_path::append (const string &str)
 {
   dirs_.push_back (str);
 }
 
 void
-File_path::prepend (string str)
+File_path::prepend (const string &str)
 {
   dirs_.insert (dirs_.begin (), str);
 }
diff --git a/flower/include/GNUmakefile b/flower/include/GNUmakefile
deleted file mode 100644 (file)
index 3ac9dd0..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# flower/lib/include/Makefile
-
-
-depth = ../..
-
-STEPMAKE_TEMPLATES=c++
-
-include $(depth)/make/stepmake.make
-
-
index 3e9c6d5294082689709f2d4dbca6675e02b514c0..4822783fc6b956241c363cbbb0521008234221a6 100644 (file)
@@ -23,7 +23,7 @@
 #include "std-vector.hh"
 #include "std-string.hh"
 
-std::string dir_name (std::string const file_name);
+std::string dir_name (const std::string &file_name);
 std::string get_working_directory ();
 
 class File_name
index 29ca17f24638a81dd3f4cf988ac5c7c21d5748af..8c8049391d9b5e1c1834643752b5818cf776c329 100644 (file)
@@ -38,16 +38,16 @@ class File_path
 
 public:
   vector<string> directories () const;
-  string find (string name) const;
-  string find (string name, char const *extensions[]);
+  string find (const string &name) const;
+  string find (const string &name, char const *extensions[]);
   string to_string () const;
   bool try_append (string str);
-  void append (string str);
-  void parse_path (string);
-  void prepend (string str);
+  void append (const string&);
+  void parse_path (const string&);
+  void prepend (const string&);
 };
 
-bool is_file (string file_name);
+bool is_file (const string &file_name);
 bool is_dir (string file_name);
 
 #endif /* FILE_PATH */
index 7c249afe893103760a3bdb68445d5fc70506823a..3ef0413772f1dd0c03fee0a7d8f0922310ae00f2 100644 (file)
    Add any compatibility definitions here for Guile V2.n
 */
 #endif // SCM_MAJOR_VERSION == 1
+#if defined (SCM_MAJOR_VERSION) && (SCM_MAJOR_VERSION > 1)
+#define GUILEV2 1
+#endif
+// TODO - remove GUILE1 definition when support for Guile 1 is dropped.
+#if defined (SCM_MAJOR_VERSION) && (SCM_MAJOR_VERSION < 2)
+#define GUILEV1 1
+#define GUILEV2 0
+#endif
 #endif /* GUILE_COMPATIBILITY_HH */
index 6dd46c28e96b429be9ddf40d8fd4b1d3c8525ed7..5797a293f73d29bee72be298877acb5c9064008d 100644 (file)
@@ -43,7 +43,7 @@ string _ (char const *ch);
 */
 string _f (char const *format, ...)
 __attribute__ ((format (printf, 1, 2)));
-string _f (char const *format, string s, string s2 = "", string s3 = "");
+string _f (char const *format, const string &s, const string &s2 = "", const string &s3 = "");
 /**
    va_list version of _f
  */
index b0acda65096bc8a75358c28d0a6c907a55ec9492..6ea7b43173b82d24585eb4cabf6aa2eed8c4b4e4 100644 (file)
 #include "std-vector.hh"
 #include "interval.hh"
 
-/*
-  A union of intervals in the real line.
-
-  Abysmal performance (quadratic) for large N, hopefully we don't have
-  that large N. In any case, this should probably be rewritten to use
-  a balanced tree.
-*/
-struct Interval_set
+class Interval_set
 {
-  vector<Interval> allowed_regions_;
-
+public:
   Interval_set ();
-  void set_full ();
-  void remove_interval (Interval rm);
+
+  static Interval_set interval_union (vector<Interval>);
+
+  vector<Interval> const &intervals () const { return intervals_; }
+  vector<Interval>::const_iterator upper_bound (Real x) const;
+  Real nearest_point (Real x, Direction dir = CENTER) const;
+  Interval_set complement () const;
+
+private:
+  vector<Interval> intervals_;
 };
 
 #endif /* INTERVAL_SET_HH */
index 5b7d2af11dac0363dfaa985cf6c1819920106c68..6b6e8ef9728ea7ab815b4b3ac1c03804d5eb0819 100644 (file)
@@ -39,7 +39,7 @@ using namespace std;
 typedef size_t ssize;
 #define NPOS string::npos
 
-string to_string (string s);
+string to_string (const string&);
 string to_string (char c, int n = 1);
 string to_string (int i, char const *format = 0);
 string to_string (double f, char const *format = 0);
@@ -53,7 +53,7 @@ __attribute__ ((format (printf, 1, 2)));
 
 string &replace_all (string *str, string const &find, string const &replace);
 string &replace_all (string *str, char find, char replace);
-char *string_copy (string s);
+char *string_copy (const string &s);
 
 int string_compare (string const &, string const &);
 
index dd276df1861c3696c8a54825dca76250afbb65ba..8275b929303a25f29d6025a31f31e439a7a2fb95 100644 (file)
@@ -30,6 +30,7 @@
 #endif
 #endif
 
+#include "config.hh"   /* needed at least for HAVE_STL_DATA_METHOD */
 #include <algorithm>   /* find, reverse, sort */
 #include <functional>  /* unary_function */
 #include <cassert>
@@ -258,7 +259,7 @@ junk_pointers (vector<T> &v)
 }
 
 vector<string> string_split (string str, char c);
-string string_join (vector<string> const &strs, string infix);
+string string_join (vector<string> const &strs, const string &infix);
 
 #define iterof(i,s) typeof((s).begin()) i((s).begin())
 
index 148005672ec78698c41ba2bf856b41947e69e254..6b4fba023f4f1ebb23efec44ecf006d471b2c9db 100644 (file)
@@ -19,23 +19,19 @@ class String_convert
   static int hex2nibble (Byte byte);
   static Byte nibble2hex_byte (Byte byte);
 public:
-  static string pad_to (string s, size_t length);
+  static string pad_to (const string &s, size_t length);
   static string bool_string (bool b);
-  static string bin2dec (string bin_string);
   static string bin2hex (Byte bin_char);
-  static string bin2hex (string bin_string);
-  static string dec2bin (string str);
-  static int bin2int (string bin_string);
-  static unsigned bin2unsigned (string bin_string);
+  static string bin2hex (const string &bin_string);
+  static int bin2int (const string &bin_string);
+  static unsigned bin2unsigned (const string &bin_string);
   static string char_string (char c, int n);
-  static int dec2int (string dec_string);
-  static double dec2double (string dec_string);
+  static int dec2int (const string &dec_string);
+  static double dec2double (const string &dec_string);
   static string double_string (double f, char const *fmt = 0);
   static string form_string (char const *format, ...) __attribute__ ((format (printf, 1, 2)));
   static string vform_string (char const *format, va_list args);
-  static int hex2int (string str);
-  static unsigned hex2unsigned (string str);
-  static string hex2bin (string str);
+  static string hex2bin (const string &str);
   static string int_string (int i, char const *fmt = 0);
   static string unsigned_string (unsigned);
   static string unsigned_long_string (unsigned long);
@@ -46,7 +42,6 @@ public:
   static string rational_string (Rational);
   static string pointer_string (void const *);
   static string precision_string (double x, int n);
-  //  static vector<string> split (string str, char c);
   static string i64_string (I64, char const *fmt = 0);
   static string to_lower (string s);
   static string to_upper (string s);
index 25240113ca2243e459839d7689db25b60c742206..333e95a94e5feece710e71a0a1470603bec63992 100644 (file)
@@ -44,25 +44,25 @@ extern int loglevel;
 extern bool warning_as_error;
 
 /* output messages, in decreasing order of importance */
-void error (string s, string location = ""); // Fatal error, exits lilypond!
-void programming_error (string s, string location = "");
-void non_fatal_error (string, string location = "");
-void warning (string s, string location = "");
-void basic_progress (string s, string location = "");
+void error (string s, const string &location = ""); // Fatal error, exits lilypond!
+void programming_error (const string &s, const string &location = "");
+void non_fatal_error (const string&, const string &location = "");
+void warning (const string &s, const string &location = "");
+void basic_progress (const string &s, const string &location = "");
 /* progress_indication does by default *NOT* start on a new line */
-void progress_indication (string s, bool newline = false, string location = "");
-void message (string s, bool newline = true, string location = "");
-void debug_output (string s, bool newline = true, string location = "");
+void progress_indication (const string &s, bool newline = false, const string &location = "");
+void message (const string &s, bool newline = true, const string &location = "");
+void debug_output (const string &s, bool newline = true, const string &location = "");
 
 /* Helper functions that always print out the message. Callers should ensure
    that the loglevel is obeyed */
-void print_message (int level, string location, string s, bool newline = true);
+void print_message (int level, const string &location, string s, bool newline = true);
 
 bool is_loglevel (int level);
 void set_loglevel (int level);
 void set_loglevel (string level);
 
-void expect_warning (string msg);
+void expect_warning (const string &msg);
 void check_expected_warnings ();
 
 #endif /* WARN_HH */
index aa54fa66168363eec4fe87484103c1001297f2d6..148d1a88015709ada81ae69babb4affc223e760c 100644 (file)
@@ -21,6 +21,7 @@
 #include <memory>
 #include <sstream>
 #include <stdexcept>
+#include <unistd.h>
 
 #define YAFFUT_STRINGIZE(x) YAFFUT_STRINGIZE_(x)
 #define YAFFUT_STRINGIZE_(x) #x
@@ -277,7 +278,7 @@ struct Test: public ITest, public virtual Suite
   static Registrator<Suite, Case> s_Registrator;
   Test (): Suite ()
   {
-    Registrator<Suite, Case>r = &s_Registrator;
+    Registrator<Suite, Case> *r = &s_Registrator;
     (void)r;
   }
   template <typename E, typename T>
@@ -301,7 +302,7 @@ struct Test<Case, void>: public ITest
   static Registrator<Case, void> s_Registrator;
   Test ()
   {
-    Registrator<Case, void>r = &s_Registrator;
+    Registrator<Case, void> *r = &s_Registrator;
     (void)r;
   }
   template <typename E, typename T>
index cbdcf58d6e9bf80abcb2c3951eabfe9c74be2ea7..2e6a09df9fcaf1456097c0d601a3f06cae34018c 100644 (file)
@@ -55,7 +55,7 @@ v_f (char const *format, va_list args)
 }
 
 string
-_f (char const *format, string s, string s2, string s3)
+_f (char const *format, const string &s, const string &s2, const string &s3)
 {
   return String_convert::form_string (gettext (format), s.c_str (), s2.c_str (),
                                       s3.c_str ());
index 84bde76a9cfe2a00d9cba2879d2f74f5362249e9..f1aaea59fcc67fbc74c0fbd92e3b326c14abd898 100644 (file)
 /*
   A union of intervals in the real line.
 
-  Abysmal performance (quadratic) for large N, hopefully we don't have
-  that large N. In any case, this should probably be rewritten to use
-  a balanced tree.
+  This class gives good performance for finding the union of
+  a collection of intervals (n log n) and for testing if a point
+  belongs to the union (log n).  It does not give an efficient way to
+  update the set (ie. by adding more intervals); to do this
+  efficiently would require a self-balancing tree, and it would not
+  be currently useful in lilypond anyway.
 */
 
 Interval_set::Interval_set ()
 {
-  set_full ();
 }
 
-void
-Interval_set::set_full ()
+Interval_set
+Interval_set::interval_union (vector<Interval> ivs)
 {
-  allowed_regions_.clear ();
-  Interval s;
-  s.set_full ();
-  allowed_regions_.push_back (s);
+  vector_sort (ivs, Interval::left_less);
+
+  Interval_set ret;
+
+  if (ivs.empty ())
+    return ret;
+
+  ret.intervals_.push_back (ivs.front ());
+
+  // Go over the intervals from left to right.  If the current interval
+  // overlaps with the last one, merge them.  Otherwise, append the
+  // current interval to the list.
+  for (vsize i = 1; i < ivs.size (); ++i)
+    {
+      Interval iv = ivs[i];
+      Interval &last = ret.intervals_.back ();
+
+      if (last[RIGHT] >= iv[LEFT])
+        // overlapping intervals: merge them
+        last[RIGHT] = max (last[RIGHT], iv[RIGHT]);
+      else if (!iv.is_empty ())
+        ret.intervals_.push_back (iv);
+    }
+
+  return ret;
+}
+
+// Returns an iterator pointing to the first interval whose left
+// endpoint is at least x.  That interval may or may not contain x.
+vector<Interval>::const_iterator
+Interval_set::upper_bound (Real x) const
+{
+  Interval xx (x, x);
+  return std::upper_bound (intervals_.begin (), intervals_.end (), xx, Interval::left_less);
 }
 
-void
-Interval_set::remove_interval (Interval rm)
+Real
+Interval_set::nearest_point (Real x, Direction d) const
 {
-  for (vsize i = 0; i < allowed_regions_.size ();)
+  Real left = -infinity_f; // The closest point to the left of x.
+  Real right = infinity_f; // The closest point to the right of x.
+
+  vector<Interval>::const_iterator i = upper_bound (x);
+  if (i != intervals_.end ())
+    right = (*i)[LEFT];
+
+  if (i != intervals_.begin ())
     {
-      Interval s = rm;
-
-      s.intersect (allowed_regions_[i]);
-
-      if (!s.is_empty ())
-        {
-          Interval before = allowed_regions_[i];
-          Interval after = allowed_regions_[i];
-
-          before[RIGHT] = s[LEFT];
-          after[LEFT] = s[RIGHT];
-
-          if (!before.is_empty () && before.length () > 0.0)
-            {
-              allowed_regions_.insert (allowed_regions_.begin () + (long)i, before);
-              i++;
-            }
-          allowed_regions_.erase (allowed_regions_.begin () + (long)i);
-          if (!after.is_empty () && after.length () > 0.0)
-            {
-              allowed_regions_.insert (allowed_regions_.begin () + (long)i, after);
-              i++;
-            }
-        }
-      else
-        i++;
+      Interval left_iv = *(i - 1);
+      // left_iv[LEFT] is guaranteed to be less than x. So if
+      // left_iv[RIGHT] >= x then left_iv contains x, which must then
+      // be the nearest point to x.
+      if (left_iv[RIGHT] >= x)
+        return x;
+
+      left = left_iv[RIGHT];
+    }
+
+  if (d == RIGHT)
+    return right;
+  if (d == LEFT)
+    return left;
+  else
+    return (right - x) < (x - left) ? right : left;
+}
+
+Interval_set
+Interval_set::complement () const
+{
+  Interval_set ret;
+
+  if (intervals_.empty ())
+    {
+      ret.intervals_.push_back (Interval (-infinity_f, infinity_f));
+      return ret;
     }
+
+  if (intervals_[0][LEFT] > -infinity_f)
+    ret.intervals_.push_back (Interval (-infinity_f, intervals_[0][LEFT]));
+
+  for (vsize i = 1; i < intervals_.size (); ++i)
+    ret.intervals_.push_back (Interval (intervals_[i - 1][RIGHT], intervals_[i][LEFT]));
+
+  if (intervals_.back ()[RIGHT] < infinity_f)
+    ret.intervals_.push_back (Interval (intervals_.back ()[RIGHT], infinity_f));
+
+  return ret;
 }
index d2c2d624d2981893ce9ac21879d450015f2364d9..7dc9d47311446f649db2f8d550b7d0ed40801419 100644 (file)
@@ -21,7 +21,7 @@
 #include "string-convert.hh"
 
 string
-to_string (string s)
+to_string (const string &s)
 {
   return s;
 }
@@ -106,7 +106,7 @@ replace_all (string *str, char find, char replace)
 }
 
 char *
-string_copy (string s)
+string_copy (const string &s)
 {
   ssize len = s.length ();
   char *dest = new char[len + 1];
@@ -144,7 +144,7 @@ string_split (string str, char c)
 }
 
 string
-string_join (vector<string> const &strs, string infix)
+string_join (vector<string> const &strs, const string &infix)
 {
   string result;
   for (vsize i = 0; i < strs.size (); i++)
index 68e6a0c0b82b199c9a499cf0e00c4d75a65dc12a..745a98ecea6a28bec022316114991f6153eca513 100644 (file)
@@ -37,32 +37,32 @@ string
 String_convert::bin2hex (Byte bin_char)
 {
   string str;
-  str += to_string ((char) nibble2hex_byte ((Byte) (bin_char >> 4)));
-  str += to_string ((char) nibble2hex_byte (bin_char++));
+  str += ::to_string ((char) nibble2hex_byte ((Byte) (bin_char >> 4)));
+  str += ::to_string ((char) nibble2hex_byte (bin_char++));
   return str;
 }
 
 string
-String_convert::bin2hex (string bin_string)
+String_convert::bin2hex (const string &bin_string)
 {
   string str;
   Byte const *byte = (Byte const *)bin_string.data ();
   for (ssize i = 0; i < bin_string.length (); i++)
     {
-      str += to_string ((char)nibble2hex_byte ((Byte) (*byte >> 4)));
-      str += to_string ((char)nibble2hex_byte (*byte++));
+      str += ::to_string ((char)nibble2hex_byte ((Byte) (*byte >> 4)));
+      str += ::to_string ((char)nibble2hex_byte (*byte++));
     }
   return str;
 }
 
 int
-String_convert::bin2int (string bin_string)
+String_convert::bin2int (const string &bin_string)
 {
   return bin2unsigned (bin_string);
 }
 
 unsigned
-String_convert::bin2unsigned (string bin_string)
+String_convert::bin2unsigned (const string &bin_string)
 {
   assert (bin_string.length () <= (int)sizeof (unsigned));
 
@@ -76,7 +76,7 @@ String_convert::bin2unsigned (string bin_string)
 }
 
 int
-String_convert::dec2int (string dec_string)
+String_convert::dec2int (const string &dec_string)
 {
   if (!dec_string.length ())
     return 0;
@@ -100,7 +100,7 @@ String_convert::i64_string (I64 i64, char const *fmt)
 }
 // breendet imp from string
 double
-String_convert::dec2double (string dec_string)
+String_convert::dec2double (const string &dec_string)
 {
   if (!dec_string.length ())
     return 0;
@@ -127,14 +127,14 @@ String_convert::hex2bin (string hex_string, string &bin_string_r)
       int low_i = hex2nibble (*byte++);
       if (high_i < 0 || low_i < 0)
         return 1; // invalid char
-      bin_string_r += to_string ((char) (high_i << 4 | low_i), 1);
+      bin_string_r += ::to_string ((char) (high_i << 4 | low_i), 1);
       i += 2;
     }
   return 0;
 }
 
 string
-String_convert::hex2bin (string hex_string)
+String_convert::hex2bin (const string &hex_string)
 {
   string str;
 
@@ -165,10 +165,10 @@ String_convert::int2dec (int i, size_t length_i, char ch)
     fill_char = '0';
 
   // ugh
-  string dec_string = to_string (i);
+  string dec_string = ::to_string (i);
 
   // ugh
-  return to_string (fill_char, ssize_t (length_i - dec_string.length ())) + dec_string;
+  return ::to_string (fill_char, ssize_t (length_i - dec_string.length ())) + dec_string;
 }
 
 // stupido.  Should use int_string ()
@@ -182,14 +182,14 @@ String_convert::unsigned2hex (unsigned u, size_t length, char fill_char)
 #if 1 // both go...
   while (u)
     {
-      str = to_string ((char) ((u % 16)["0123456789abcdef"])) + str;
+      str = ::to_string ((char) ((u % 16)["0123456789abcdef"])) + str;
       u /= 16;
     }
 #else
   str += int_string (u, "%x");  // hmm. %lx vs. %x -> portability?
 #endif
 
-  str = to_string (fill_char, ssize_t (length - str.length ())) + str;
+  str = ::to_string (fill_char, ssize_t (length - str.length ())) + str;
   while ((str.length () > length) && (str[ 0 ] == 'f'))
     str = str.substr (2);
 
@@ -299,7 +299,7 @@ String_convert::pointer_string (void const *l)
 string
 String_convert::precision_string (double x, int n)
 {
-  string format = "%." + to_string (max (0, n - 1)) + "e";
+  string format = "%." + ::to_string (max (0, n - 1)) + "e";
   string str = double_string (abs (x), format.c_str ());
 
   int exp = dec2int (str.substr (str.length () - 3));
@@ -316,9 +316,9 @@ String_convert::precision_string (double x, int n)
   str = str.substr (0, 1) + str.substr (2);
   ssize dot = 1 + exp;
   if (dot <= 0)
-    str = "0." + to_string ('0', -dot) + str;
+    str = "0." + ::to_string ('0', -dot) + str;
   else if (dot >= str.length ())
-    str += to_string ('0', dot - str.length ());
+    str += ::to_string ('0', dot - str.length ());
   else if ((dot > 0) && (dot < str.length ()))
     str = str.substr (0, dot) + "." + str.substr (dot);
   else
@@ -352,7 +352,7 @@ String_convert::unsigned_long_string (unsigned long ul)
 }
 
 string
-String_convert::pad_to (string s, size_t n)
+String_convert::pad_to (const string &s, size_t n)
 {
   return s + string (max (int (n - s.length ()), 0), ' ');
 }
@@ -360,13 +360,13 @@ String_convert::pad_to (string s, size_t n)
 string
 String_convert::to_upper (string s)
 {
-  return strnupr ((char *)s.c_str (), s.length ());
+  return strnupr (const_cast<char*>(s.c_str ()), s.length ());
 }
 
 string
 String_convert::to_lower (string s)
 {
-  return strnlwr ((char *)s.c_str (), s.length ());
+  return strnlwr (const_cast<char*>(s.c_str ()), s.length ());
 }
 
 string
diff --git a/flower/test-interval-set.cc b/flower/test-interval-set.cc
new file mode 100644 (file)
index 0000000..5b4d1f6
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2012 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 "interval-set.hh"
+
+#include "yaffut.hh"
+
+using namespace std;
+
+FUNC (interval_set_union)
+{
+  vector<Interval> ivs;
+
+  // Overlapping intervals.
+  ivs.push_back (Interval (-1, 1));
+  ivs.push_back (Interval (0, 3));
+  ivs.push_back (Interval (1, 2));
+  Interval_set result = Interval_set::interval_union (ivs);
+  EQUAL (result.intervals ().size (), 1);
+  // Compare intervals using to_string, since yaffut doesn't know how to compare intervals.
+  EQUAL (result.intervals ()[0].to_string (), Interval (-1, 3).to_string ());
+
+  // Non-overlapping intervals.
+  ivs.push_back (Interval (-5, -4));
+  result = Interval_set::interval_union (ivs);
+  EQUAL (result.intervals ().size (), 2);
+  EQUAL (result.intervals ()[0].to_string (), Interval (-5, -4).to_string ());
+  EQUAL (result.intervals ()[1].to_string (), Interval (-1, 3).to_string ());
+
+  // Infinite intervals.
+  ivs.push_back (Interval (-infinity_f, -4));
+  result = Interval_set::interval_union (ivs);
+  EQUAL (result.intervals ().size (), 2);
+  EQUAL (result.intervals ()[0].to_string (), Interval (-infinity_f, -4).to_string ());
+  EQUAL (result.intervals ()[1].to_string (), Interval (-1, 3).to_string ());
+
+  // Empty intervals.
+  ivs.push_back (Interval (infinity_f, -infinity_f));
+  result = Interval_set::interval_union (ivs);
+  EQUAL (result.intervals ().size (), 2);
+}
+
+FUNC (interval_set_nearest_point)
+{
+  vector<Interval> ivs;
+
+  ivs.push_back (Interval (-3, -1));
+  ivs.push_back (Interval (1, 3));
+  Interval_set set = Interval_set::interval_union (ivs);
+
+  // If the point is in the set, direction does not matter.
+  EQUAL (set.nearest_point (-2, UP), -2);
+  EQUAL (set.nearest_point (-2, DOWN), -2);
+  EQUAL (set.nearest_point (-2, CENTER), -2);
+
+  // If the point is not in the set, direction does matter.
+  EQUAL (set.nearest_point (-0.5, UP), 1);
+  EQUAL (set.nearest_point (-0.5, DOWN), -1);
+  EQUAL (set.nearest_point (-0.5, CENTER), -1);
+  EQUAL (set.nearest_point (0.5, CENTER), 1);
+
+  // The return value can be +- infinity.
+  EQUAL (set.nearest_point (5, UP), infinity_f);
+  EQUAL (set.nearest_point (5, DOWN), 3);
+  EQUAL (set.nearest_point (-5, DOWN), -infinity_f);
+  EQUAL (set.nearest_point (-5, UP), -3);
+}
+
+FUNC (interval_set_complement)
+{
+  vector<Interval> ivs;
+
+  ivs.push_back (Interval (-3, -1));
+  ivs.push_back (Interval (1, 3));
+  Interval_set set = Interval_set::interval_union (ivs).complement ();
+  EQUAL (set.intervals ().size (), 3);
+  EQUAL (set.intervals ()[0].to_string (), Interval (-infinity_f, -3).to_string ());
+  EQUAL (set.intervals ()[1].to_string (), Interval (-1, 1).to_string ());
+  EQUAL (set.intervals ()[2].to_string (), Interval (3, infinity_f).to_string ());
+
+  // Half-infinite sets are handled correctly.
+  ivs.push_back (Interval (-infinity_f, -2));
+  set = Interval_set::interval_union (ivs).complement ();
+  EQUAL (set.intervals ().size (), 2);
+  EQUAL (set.intervals ()[0].to_string (), Interval (-1, 1).to_string ());
+  EQUAL (set.intervals ()[1].to_string (), Interval (3, infinity_f).to_string ());
+
+  // Full and empty sets are handled correctly.
+  set = Interval_set ().complement ();
+  EQUAL (set.intervals ().size (), 1);
+  EQUAL (set.intervals ()[0].to_string (), Interval (-infinity_f, infinity_f).to_string ());
+  set = set.complement ();
+  EQUAL (set.intervals ().size (), 0);
+}
index f3f6e1c74369e8f92d0b4a9a849ac9889548ed5a..52e2a425086ed1b42a3eeecd40d0d306f37ee779 100644 (file)
@@ -99,7 +99,7 @@ set_loglevel (string level)
  * expected warnings again.
  */
 vector<string> expected_warnings;
-void expect_warning (string msg)
+void expect_warning (const string &msg)
 {
   expected_warnings.push_back (msg);
 }
@@ -119,7 +119,7 @@ void check_expected_warnings ()
   expected_warnings.clear ();
 }
 
-bool is_expected (string s)
+bool is_expected (const string &s)
 {
   bool expected = false;
   for (vsize i = 0; i < expected_warnings.size (); i++)
@@ -151,7 +151,7 @@ static bool message_newline = true;
    if newline is true, start the message on a new line.
 */
 void
-print_message (int level, string location, string s, bool newline)
+print_message (int level, const string &location, string s, bool newline)
 {
   /* Only print the message if the current loglevel allows it: */
   if (!is_loglevel (level))
@@ -178,7 +178,7 @@ print_message (int level, string location, string s, bool newline)
 
 /* Display a fatal error message.  Also exits lilypond.  */
 void
-error (string s, string location)
+error (string s, const string &location)
 {
   print_message (LOG_ERROR, location, _f ("fatal error: %s", s) + "\n");
   exit (1);
@@ -186,7 +186,7 @@ error (string s, string location)
 
 /* Display a severe programming error message, but don't exit.  */
 void
-programming_error (string s, string location)
+programming_error (const string &s, const string &location)
 {
   if (is_expected (s))
     print_message (LOG_DEBUG, location, _f ("suppressed programming error: %s", s) + "\n");
@@ -201,7 +201,7 @@ programming_error (string s, string location)
 
 /* Display a non-fatal error message, don't exit.  */
 void
-non_fatal_error (string s, string location)
+non_fatal_error (const string &s, const string &location)
 {
   if (is_expected (s))
     print_message (LOG_DEBUG, location, _f ("suppressed error: %s", s) + "\n");
@@ -213,7 +213,7 @@ non_fatal_error (string s, string location)
 
 /* Display a warning message. */
 void
-warning (string s, string location)
+warning (const string &s, const string &location)
 {
   if (is_expected (s))
     print_message (LOG_DEBUG, location, _f ("suppressed warning: %s", s) + "\n");
@@ -225,21 +225,21 @@ warning (string s, string location)
 
 /* Display a success message.  */
 void
-basic_progress (string s, string location)
+basic_progress (const string &s, const string &location)
 {
   print_message (LOG_BASIC, location, s + "\n", true);
 }
 
 /* Display information about the progress.  */
 void
-progress_indication (string s, bool newline, string location)
+progress_indication (const string &s, bool newline, const string &location)
 {
   print_message (LOG_PROGRESS, location, s, newline);
 }
 
 /* Display a single info message.  */
 void
-message (string s, bool newline, string location)
+message (const string &s, bool newline, const string &location)
 {
   // Use the progress loglevel for all normal messages (including progress msg)
   print_message (LOG_INFO, location, s, newline);
@@ -247,7 +247,7 @@ message (string s, bool newline, string location)
 
 /* Display a debug information, not necessarily on a new line.  */
 void
-debug_output (string s, bool newline, string location)
+debug_output (const string &s, bool newline, const string &location)
 {
   print_message (LOG_DEBUG, location, s, newline);
 }
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 153ae207b1d53d9fb7330c782fdc7e041b1a003b..b24254705833f70a95753bd4affae15f2399ead8 100644 (file)
@@ -6,23 +6,23 @@ are collected here.
 "
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \relative c'' {
       \time 3/4
       % FIXME: standard vs default, alteration-FOO vs FOO-alteration
-      \override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
+      \override Staff.Accidental.glyph-name-alist = #standard-alteration-glyph-name-alist
       cis^\markup { \typewriter default } c ces  
 
-      \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+      \override Staff.Accidental.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
       cis^\markup { \typewriter hufnagel } c ces  
 
-      \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
+      \override Staff.Accidental.glyph-name-alist = #alteration-medicaea-glyph-name-alist
       cis^\markup { \typewriter medicaea } c ces  
 
-      \override Staff.Accidental #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
+      \override Staff.Accidental.glyph-name-alist = #alteration-vaticana-glyph-name-alist
       cis^\markup { \typewriter vaticana } c ces  
 
-      \override Staff.Accidental #'glyph-name-alist = #alteration-mensural-glyph-name-alist
+      \override Staff.Accidental.glyph-name-alist = #alteration-mensural-glyph-name-alist
       cis^\markup { \typewriter mensural } c ces  
 }
index babfea87038d970b95789b7401deeddfec1aedae..70f4e8fa0a93f1982beea1abb119231afd64ce79 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
 
 texidoc = "Cautionary accidentals may be indicated using either
@@ -13,10 +13,10 @@ parentheses (default) or smaller accidentals.
 {
     c''4
     cis''?4
-    \once \override Staff.AccidentalCautionary #'parenthesized = ##f
-    \once \override Staff.AccidentalCautionary #'font-size = #-2
+    \once \override Staff.AccidentalCautionary.parenthesized = ##f
+    \once \override Staff.AccidentalCautionary.font-size = #-2
     cis''?4
-    \once \override Staff.AccidentalCautionary #'parenthesized = ##t
+    \once \override Staff.AccidentalCautionary.parenthesized = ##t
     cis''?4
 }
 
index 44200865653bde0e17f47ce48edb3bd070452bd7..bab45b8d9342c7fc27a3c79acab3901f45a9ae11 100644 (file)
@@ -9,10 +9,10 @@
 
 \version "2.16.0"
 \new Staff \relative c' {
-    \key g\major
-    \clef treble
-    cis dis f
-    \clef bass
-    <c dis fis>
+  \key g \major
+  \clef treble
+  cis dis f
+  \clef bass
+  <c dis fis>
 }
 
index aab51034c8f16830b9f41a94f883dbece89f2e05..063c8065b14f5b4f4db22e0dcd14835b52fa89f1 100644 (file)
@@ -2,9 +2,9 @@
   texidoc = "accidentals avoid stems of other notes too."
   }
 
-\version "2.16.0"
+\version "2.17.15"
 
 \paper {
   ragged-right  = ##t
   }
-\new Staff \relative <<bes' \\ a'>>
+\new Staff \relative c' <<bes' \\ a'>>
index f34d2392fa72bbf2a4103126c10da0a6c53f79c6..eb05abcddbdf1c7d653465b0b4d11bde98e6f403 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
 
 texidoc = "Several automatic accidental rules
@@ -30,13 +30,13 @@ Both scores should show the same accidentals.
 
 \score {
   \relative c'' {
-    \accidentalStyle "dodecaphonic"
+    \accidentalStyle dodecaphonic
     gis4 a g gisis
-    \accidentalStyle "neo-modern"
+    \accidentalStyle neo-modern
     gis8 a gis gis g' gis gis,, a'
-    \accidentalStyle "neo-modern-cautionary"
+    \accidentalStyle neo-modern-cautionary
     eis fis eis eis g2
-    \accidentalStyle "teaching"
+    \accidentalStyle teaching
     \key e \major
     e8 eis fis fis gis2
   }
diff --git a/input/regression/accidental-fingering-collision.ly b/input/regression/accidental-fingering-collision.ly
new file mode 100644 (file)
index 0000000..ac7a07e
--- /dev/null
@@ -0,0 +1,13 @@
+\version "2.17.0"
+
+\header {
+  texidoc = "Horizontal @code{Fingering} grobs should not collide with
+accidentals.
+"
+}
+
+\relative c' {
+  \time 2/4
+  \set fingeringOrientations = #'(left)
+  <a-3 cis-4> <a-3 cis!-4> |
+}
\ No newline at end of file
diff --git a/input/regression/accidental-grouping.ly b/input/regression/accidental-grouping.ly
new file mode 100644 (file)
index 0000000..b8cfce4
--- /dev/null
@@ -0,0 +1,16 @@
+\version "2.17.10"
+
+\header {
+  texidoc = "By setting @code{accidentalGrouping} to @code{'voice},
+LilyPond will horizontally stagger the accidentals of octaves
+in different voices as seen in this test's E-sharp.
+"
+}
+
+ \relative c''' {
+   << { <gis cis eis gis>1 } \\
+      { eis,              } >>
+  \set Staff . accidentalGrouping = #'voice
+   << { <gis' cis eis gis>1 } \\
+      { eis,              } >>
+}
index 170c4b32a252798ea74ef760d6161a064fac219b..c1c64c80cb1dddcf777f75314c9bbb1b82ddeca8 100644 (file)
@@ -6,15 +6,15 @@ accidental."
 
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
 \layout
 {
     ragged-right = ##t
 }
     
-\new PianoStaff \relative <<
-    \accidentalStyle "piano"
+\new PianoStaff \relative c' <<
+    \accidentalStyle piano
     \new Staff { ges'4 ges4 }
     \new Staff { r8 gis r8 gis }
     >>
index 0b40e548a1d9ecac8c553638503d9526cd9e4c0b..5cf5c665f8f765f991ad0de62e9ab35f96cc52e2 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Accidental padding works for all accidentals, including
@@ -6,7 +6,7 @@ those modifying the same pitch."
 }
 
 \relative c' {
-  \override Staff.AccidentalPlacement #'padding = #2
+  \override Staff.AccidentalPlacement.padding = #2
   <ces cis>1
   <ces des>1
 }
index 3beb51a0fd6f2f924941d7b15c5a7ef76186ae2d..6e0a867ffae647f95574f4224b9dfccd9a62fdbe 100644 (file)
@@ -7,7 +7,7 @@ denoting Musica Ficta."
  
 }
 
-\version "2.16.0"
+\version "2.17.25"
 \paper {
   ragged-right = ##t
 }
@@ -15,8 +15,8 @@ denoting Musica Ficta."
 \relative c'' {
   \time 2/4 
   \set suggestAccidentals = ##t 
-  cis^> gis'-|
-  \override AccidentalSuggestion #'parenthesized = ##t
+  cis^> gis'-!
+  \override AccidentalSuggestion.parenthesized = ##t
   cis,_"paren" gis'
 
 }
index c81aed3390a8c1ef4ae9ef162da26aec424c0b2f..f69a7a85756d283eb59f973584dcfa00ff0af944 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The second and third notes should not get accidentals,
@@ -20,7 +20,7 @@ mus =         \relative c' {
   fis8  gis8 ~
   \break
   gis1
-  \override Accidental #'hide-tied-accidental-after-break = ##t
+  \override Accidental.hide-tied-accidental-after-break = ##t
   f1~
   f2~f4 % ~ f8
   fis8  gis8 ~
index bd06e7fc66f477d404a56b0ba262bab375a1788a..61cebc562525aceb5b24818af1bfecc60262aeea 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \layout { ragged-right = ##t }
 
 \header{
@@ -28,7 +28,7 @@ voiceb =  \transpose c c' {
     \voicea
   }
   \context Staff << 
-    \accidentalStyle "modern-voice-cautionary"
+    \accidentalStyle modern-voice-cautionary
     \new Voice \voicea
     \new Voice \voiceb
   >>
diff --git a/input/regression/add-grace-property.ly b/input/regression/add-grace-property.ly
new file mode 100644 (file)
index 0000000..6594046
--- /dev/null
@@ -0,0 +1,25 @@
+\version "2.17.25"
+
+\header {
+  texidoc = "@code{\\add-grace-property} can be used at various
+context levels in order to override grace properties.  Overrides in
+different parallel contexts are independent."
+}
+
+<<
+ \new Staff = "1" \with { instrumentName =
+                         \markup \center-column { Voice mensural } }
+   \new Voice \with { $(add-grace-property 'Voice 'NoteHead 'style 'mensural)
+                     $(add-grace-property 'Score 'NoteHead 'style 'cross) }
+   { \grace d'8 c'1 \bar "|." }
+
+ \new Staff = "2" \with { instrumentName =
+                         \markup \center-column { Voice diamond } }
+   \new Voice \with { $(add-grace-property 'Voice 'NoteHead 'style 'diamond)   }
+   { \grace d'8 c'1 }
+
+ \new Staff = "3" \with { instrumentName =
+                         \markup \center-column { Score cross } }
+   \new Voice
+   { \grace d'8 c'1 }
+>>
diff --git a/input/regression/add-stem-support.ly b/input/regression/add-stem-support.ly
new file mode 100644 (file)
index 0000000..ab22af6
--- /dev/null
@@ -0,0 +1,25 @@
+\version "2.17.10"
+
+\header {
+  texidoc = "@code{add-stem-support} can be removed or implemented
+only for beamed notes.
+"
+}
+
+music = {
+  \clef bass
+  \stemUp
+  <g^3 a^5>2..->
+  r16 eeses'16
+  \set fingeringOrientations = #'(right)
+  <c e>8-1-4 <c^1 e^4> <g,-3 b,-4> r
+  r2
+}
+
+{
+  \music
+  \override Fingering #'add-stem-support = ##f
+  \music
+  \override Fingering #'add-stem-support = #only-if-beamed
+  \music
+}
\ No newline at end of file
index cbd9fa309877f59cfd814d829712ef4f2e1efa1d..5a6be94daff256e559067690e8153f6fee75f356 100644 (file)
@@ -3,13 +3,13 @@
 anywhere in the vertical alignment. "
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
 \paper {
   ragged-right = ##t
 }
 
-\relative <<
+\relative c' <<
   \new Staff = "1" { c2 c s1 }
   \new Staff = "2" { c2  c s1 }
   \new StaffGroup <<
@@ -22,8 +22,8 @@ anywhere in the vertical alignment. "
       }
       \new Staff {
         \set Staff.alignAboveContext = #"3"
-        \times 4/6 {
-          \override TextScript #'padding = #3
+        \tuplet 6/4 {
+          \override TextScript.padding = #3
           c4^"this" d_"staff" e^"above" d_"last" e^"staff" f
         }
       }
index 3613c57ca2c1a0f3ddf9397eab1b7e4d32702335..1314f2941a20910b5ab62fc8d2083869342ec191 100644 (file)
@@ -6,7 +6,7 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \book {
   \score {
       \new Staff { c c c c }
       \new Staff { 
        \overrideProperty
-       #"Score.NonMusicalPaperColumn"
-       #'line-break-system-details
+       Score.NonMusicalPaperColumn.line-break-system-details
        #'((alignment-distances . (#f 20)))
        c1 \break
        \overrideProperty
-       #"Score.NonMusicalPaperColumn"
-       #'line-break-system-details
+       Score.NonMusicalPaperColumn.line-break-system-details
        #'((alignment-distances . (5 15)))
        c1 \break
        \overrideProperty
-       #"Score.NonMusicalPaperColumn"
-       #'line-break-system-details
+       Score.NonMusicalPaperColumn.line-break-system-details
        #'((alignment-distances . (15 5)))
        c1 c
       }
index 1a37432f749a738395dfd2872d9b8e5adba45676..c2236ba2434090082691641b8e90dab7e74acade 100644 (file)
@@ -18,5 +18,5 @@ Different text styles are used for various purposes.
            d-4_\markup { \italic "cantabile"  } }
        {  e }  } \acciaccatura { c16 }
 
-    f4\ff^""^\markup  { \large "Largo" } \mark "B" g 
+    f4\ff^\markup  { \large "Largo" } \mark "B" g
 }
index 43dc32dc5d21411aed40843c0eba0adc075fbac9..14652297e6e24399d00a6a8e538bf2a80f730de2 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The command @code{\\alterBroken} may be used to override the
@@ -13,31 +13,33 @@ its usage with a variety of data types."
 #(ly:expect-warning (_ "not a spanner name"))
 
 \relative c'' {
-  \alterBroken Slur #'positions #'((3 . 3) (5 . 5))
-  \alterBroken Slur #'color #'((0 0 1) (1 0 0))
-  \alterBroken Slur #'dash-definition #'( ((0 1 0.4 0.75))
-                                          ((0 0.5 0.4 0.75) (0.5 1 1 1)) )
-  d4( d' b g
+  d4-\alterBroken #'positions #'((3 . 3) (5 . 5))
+    -\alterBroken #'color #'((0 0 1) (1 0 0))
+    -\alterBroken #'dash-definition #'( ((0 1 0.4 0.75))
+                                        ((0 0.5 0.4 0.75) (0.5 1 1 1)) )
+    -(
+  d' b g
   \break
   d d' b g)
-  \alterBroken "Staff.OttavaBracket" #'padding #'(1 3)
+  \alterBroken #'padding #'(1 3) Staff.OttavaBracket
   % Spaces in spanner's name are disregarded.
-  \alterBroken "Staff . OttavaBracket" #'style #'(line dashed-line)
+  \alterBroken #'style #'(line dashed-line) Staff.OttavaBracket
   \ottava #1
   % It is possible to use procedures as arguments.
-  \alterBroken Hairpin #'stencil #`(
-    ,ly:hairpin::print
-    ,(lambda (grob)
-      (ly:stencil-rotate (ly:hairpin::print grob) -5 0 0)))
-  c\< d e
+  c-\alterBroken Hairpin.stencil #`(
+      ,ly:hairpin::print
+      ,(lambda (grob)
+        (ly:stencil-rotate (ly:hairpin::print grob) -5 0 0)))
+    \<
+  d e
   % Since `NoteHead' is not the name of a spanner, the following has no
   % effect on layout.  A warning (suppressed here) is issued.
-  \alterBroken NoteHead #'color #`(,red ,blue)
-  \alterBroken Tie #'color #`(() ,blue)
-  \alterBroken Tie #'control-points #'(
+  \alterBroken #'color #`(,red ,blue) NoteHead
+  \once\alterBroken #'color #`(() ,blue) Tie
+  \once\alterBroken #'control-points #'(
      ((1 . 3) (2 . 4) (3 . 4) (4 . 3))
      ((3 . 3) (4 . 4) (5 . 4) (6 . 3))
-    )
+    ) Tie
   f~
   \break
   f c a f\!
index adc38287ee4381152c606aca7716317bd31a7ee0..65848e4507f2af14fb47415dcab64dcd6c2c1182 100644 (file)
@@ -1,8 +1,10 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The gaps between an @code{AmbitusLine} and its
-note heads are set by the @code{gap} property."
+note heads are set by the @code{gap} property. By default,
+@code{gap} is a function that reduces the gap for small intervals
+(e.g. a fourth), so that the line remains visible."
 }
 
 \layout {
@@ -14,7 +16,13 @@ note heads are set by the @code{gap} property."
 
 \new Staff {
   \time 2/4
-  \override AmbitusLine #'gap = #1
+  \override AmbitusLine.gap = #1
   c'4 g''
 }
 
+\new Staff <<
+  \time 2/4
+  { d'' g'' }
+  \\
+  { c' g' }
+>>
index 2a9c0f4482e422f2d9846a7e06ec788d7f27c841..fa22244c6d9ab499ac54f030e488fdf0157f25c6 100644 (file)
@@ -2,7 +2,7 @@
 
 \header {
   texidoc = "
-A @code{\Voice} should be able to contain both an @code{Ambitus_engraver}
+A @code{\\Voice} should be able to contain both an @code{Ambitus_engraver}
 and a @code{Mensural_ligature_engraver} without segfaulting.
   "
 }
@@ -10,6 +10,8 @@ and a @code{Mensural_ligature_engraver} without segfaulting.
 \new Voice \with  {
   \consists "Ambitus_engraver"
   \consists "Mensural_ligature_engraver"
+  \remove "Ligature_bracket_engraver"
 } {
+  \cadenzaOn
   \[ c'\longa c''\longa \]
 }
index 4f4a22f4b42ca3c0bbcab44e4a37945d87ffb521..5fccbca3a6af6aaf416b3d101905f901e1297249 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.17"
 
 \header  {
 texidoc = "Arpeggio stays clear of accidentals and flipped note heads."
@@ -8,6 +8,7 @@ texidoc = "Arpeggio stays clear of accidentals and flipped note heads."
   \context{
     \Staff
     connectArpeggios = ##t
+    \consists "Span_arpeggio_engraver"
   }
 }
 
@@ -17,4 +18,5 @@ texidoc = "Arpeggio stays clear of accidentals and flipped note heads."
   <fis'' g d a>\arpeggio
   <fis, g d a>\arpeggio
   <fis'' g d a>\arpeggio
+  << { <e' a>\arpeggio } \\ { <g cis>\arpeggio } >>
 }
index 5368458a8a1e71640db38d4149f8d169b27dc93f..96ebc548540d1a577611473d773ad817efe893bb 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Arpeggios do not overshoot the highest note head.
@@ -8,7 +8,7 @@ The first chord in this example simulates overshoot using
 
 \relative c' {
   % simulate overshoot for comparison
-  \once \override Arpeggio #'positions = #'(-3 . 1)
+  \once \override Arpeggio.positions = #'(-3 . 1)
   <c e g b>1\arpeggio
   <c e g b>1\arpeggio
   <f a c>2\arpeggio <g b d f>\arpeggio
diff --git a/input/regression/arpeggio-span-one-staff-collision.ly b/input/regression/arpeggio-span-one-staff-collision.ly
new file mode 100644 (file)
index 0000000..d5ba546
--- /dev/null
@@ -0,0 +1,23 @@
+\version "2.17.26"
+
+\header {
+  texidoc = "Span arpeggios that are not cross-staff do not have
+horizontal spacing problems.
+"
+}
+
+
+\new Staff
+\with
+{
+  \consists "Span_arpeggio_engraver"
+}
+\relative c''
+{
+  \set Staff.connectArpeggios = ##t
+  <<
+    {r2. <ges aes c ges'>4\arpeggio |}
+    \\
+    {\repeat unfold 12 aes,16 <ees aes c>4\arpeggio |}
+  >>
+}
index dc6ae63480112ec55f49c40d09b7856a691df300..8b3076328b1420a32e2b9040782223718c3ab950 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 \header{
   texidoc="
 Arpeggios are supported, both cross-staff and broken single staff.
@@ -14,7 +14,7 @@ Arpeggios are supported, both cross-staff and broken single staff.
     <fis,  d a>\arpeggio
     \arpeggioArrowUp
     <fis d a >\arpeggio            
-    %%\override PianoStaff.SpanArpeggio  #'connect = ##t
+    %%\override PianoStaff.SpanArpeggio.connect = ##t
     \set PianoStaff.connectArpeggios = ##t
     <fis d a>\arpeggio
   }
index 8daa66e33035ea8cd6663a0ffeeeb459a598f95e..34fa328dda650a2c45d891bee0426ed5312a9c37 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.5"
 
 \header{
 texidoc="No auto beams will be put over (manual) repeat bars."
@@ -8,5 +8,5 @@ texidoc="No auto beams will be put over (manual) repeat bars."
 
 {
   \time 3/4
-  a'4 b' c''8 \bar ":|:" d''8
+  a'4 b' c''8 \bar ":..:" d''8
 }
index 6798aa8e83ef723fb2dc1c73f5d42e8892e094d8..c811a5d9635d4674c72a6a6a1ffcbfb58b36e7c0 100644 (file)
@@ -8,14 +8,14 @@ beaming pattern related functions at the start of an autobeam."
 }
 
 
-\version "2.16.0"
+\version "2.17.11"
 \paper { ragged-right = ##t }
 {
   \time 2/4
   b16 b b b
   b16 b b b
   \set subdivideBeams = ##t
-  \set Score.baseMoment = #(ly:make-moment 1 8)
+  \set Score.baseMoment = #(ly:make-moment 1/8)
   b16 b b b
   b16 b b b
 }
index 121a22f79f81bf9f4e63a71ccfef33fa965c9ee8..a9229e1df26980ecd078223c6d90c3126a26fd3d 100644 (file)
@@ -4,10 +4,10 @@
   texidoc = "Automatic beaming is also done on tuplets."
 }
 
-\version "2.16.0"
+\version "2.17.11"
 \layout { ragged-right= ##t }
 
 \relative c''{
   c8 c c c
-  \times 4/6 { c c c c c c}
+  \tuplet 6/4 { c c c c c c}
 }
index 89a2e7c4bfc4b6de712a965a3894c62be6555927..1b9e3abb1f2e775bacfe83cd398e68102e6f9e21 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "Tuplet-spanner should not put (visible) brackets on
@@ -8,9 +8,9 @@ beams even if they're auto generated."
 \layout { ragged-right= ##t }
 
 \relative c' {
-  \set tupletSpannerDuration = #(ly:make-moment 1 4)
-  \override TupletBracket  #'bracket-visibility = #'if-no-beam
-  \times 2/3 {
+  \tupletSpan 4
+  \override TupletBracket.bracket-visibility = #'if-no-beam
+  \tuplet 3/2 {
     f8[ f f ] f8[ f f ] f f f f f f 
   }
 }
index 4a098e33d854b02f9819bd6902ffd0d35b4eb519..79aad6b6bb91700f79b61923097d5fa6736c346f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
 
@@ -27,7 +27,7 @@ is changed, beams should start at the beginning of the measure.
   r8^\markup "Beam to the beat" c c c c c
   c c c r r4 \bar "||"
 
-  \set Timing.baseMoment = #(ly:make-moment 1 8)
+  \set Timing.baseMoment = #(ly:make-moment 1/8)
   \set Timing.beatStructure = #'(3 3)
   r8^\markup "Override to beam groups of 3 eighth notes" c c c c c
   r4. c8 c c c c c r4.
index fbd81b8ec236ac794ab3c9b7a7e33283212ddfbf..37a1361d9b5ba0e039c376625c1d5e410c3668b7 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
 
@@ -10,7 +10,7 @@ In the example, the first beat should be beamed completely together."
 \relative c' {
   \time 2/4
   c16 c
-  \times 2/3 { c8 c16 }
-  \times 2/3 { c8 c16 }
+  \tuplet 3/2 { c8 c16 }
+  \tuplet 3/2 { c8 c16 }
   c16 c
 }
index aa83c7ff8f39840361b042d943d76448f673ca98..018c014da84bfcd7d1b47b2ac0af7866ad325075 100644 (file)
@@ -2,7 +2,7 @@
   texidoc = "Exercise all output functions"
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \paper { ragged-right = ##t }
 
     \new Staff
       {
        \ottava #1
-       \times 2/3 { c8[\< f]( f''\!) }
+       \tuplet 3/2 { c8[\< f]( f''\!) }
        \ottava #0
        <f,, \5>4
 
-       \override TextScript #'color = #red
+       \override TextScript.color = #red
        g4^"red"
       }
 
     \new Staff \relative c'' {
       \makeClusters { <g a>8 <e a> <g a>4 }
 
-      \override Glissando #'style = #'zigzag
+      \override Glissando.style = #'zigzag
       \slurDashed
       f2( \glissando f')
       \easyHeadsOn
index 5c5af19cedb3be043633c13cd23c8a6f319c5534..426bbf4b180e21be52f415b9e271d3d101341038 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 forcedLastBreak =  { \break }
 
@@ -16,7 +16,7 @@ forcedLastBreak =  { \break }
 
 
 #(define (assert-system-count-override count)
-  #{ \override NoteHead #'after-line-breaking
+  #{ \override NoteHead.after-line-breaking
        = #(lambda (smob) (assert-system-count smob count))
   #})
 
@@ -51,7 +51,7 @@ half way in measure 13 has been forgotten.
 
 
 sarabandeA =  \context Voice  \relative c {
-  \override Staff.NoteCollision  #'merge-differently-dotted = ##t
+  \override Staff.NoteCollision.merge-differently-dotted = ##t
 
 
   << { d8. e16 e4.\trill d16 e } \\
@@ -156,11 +156,11 @@ smallerPaper = \layout {
   \context {
     \Staff
     fontSize = #-1
-    \override StaffSymbol  #'staff-space = #0.8
+    \override StaffSymbol.staff-space = #0.8
   }
   \context {
     \Score
-    \override SpacingSpanner #'spacing-increment = #0.96
+    \override SpacingSpanner.spacing-increment = #0.96
   }
 
   indent = 5.6 \mm
index 3ba915b3cad39f1665fe10aaca695dd5bae43644..65264d48332cf1f00dc85fa391886f7b83552065 100644 (file)
@@ -5,7 +5,7 @@
 with lines and explanatory text added."
   
 }
-\version "2.16.0"
+\version "2.17.6"
 
 \layout{ ragged-right = ##t }
 
@@ -15,13 +15,19 @@ with lines and explanatory text added."
     \relative c'  {
       \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" }
       <c-\balloonText #'(-2 . -2) \markup { \simple #"hoi" }  >8
+      \balloonLengthOn
+      \balloonGrobText #'Rest #'(-1 . -2) \markup{ "Rest" }
+      r
+      \balloonLengthOff
+      \balloonGrobText #'Script #'(-1 . -1) \markup{ "Accent" }
+      c4->
     }
   }
 
   \layout {
     \context {
       \Score
-      \override PaperColumn #'keep-inside-line = ##f
+      \override PaperColumn.keep-inside-line = ##f
     }
   }
 }
index 6fde50c37e888128645df4fbc13329b1cfc5a6ee..11d0690743eeaf51dc80cada4e8fd0438c7f5e59 100644 (file)
@@ -1,10 +1,10 @@
-\version "2.16.0"
+\version "2.17.25"
 \header {
     texidoc = "The meaning of @code{|} is stored in the
-identifier @code{pipeSymbol}."
+identifier @code{\"|\"}."
 }
 
-pipeSymbol = \bar "||"
+"|" = \bar "||"
 
 \layout { ragged-right = ##t }
 
index a39a8b7976239fe2fa02d7b4903a476c96ff4528..0b4fefc86c459c0bec5bee3317decc7ce8708d63 100644 (file)
@@ -6,19 +6,19 @@
 }
 
 
-\version "2.16.0"
+\version "2.17.6"
 
 ledgerUp =
 {
   s2
   \stopStaff
-  \override Staff.StaffSymbol #'line-positions = #'(-4 -2 0 2 4 6)
+  \override Staff.StaffSymbol.line-positions = #'(-4 -2 0 2 4 6)
   \startStaff
   s2
   \noBreak
   s2
   \stopStaff
-  \revert Staff.StaffSymbol #'line-positions
+  \revert Staff.StaffSymbol.line-positions
   \startStaff
   s2
 }
@@ -27,11 +27,11 @@ ledgerDown =
 {
   s2
   \stopStaff
-  \override Staff.StaffSymbol #'line-positions = #'(-6 -4 -2 0 2 4)
+  \override Staff.StaffSymbol.line-positions = #'(-6 -4 -2 0 2 4)
   \startStaff
   s1
   \stopStaff
-  \revert Staff.StaffSymbol #'line-positions
+  \revert Staff.StaffSymbol.line-positions
   \startStaff
   s2
 }
@@ -40,7 +40,7 @@ ledgerDown =
 <<
   \new Staff \with
   {
-    \override BarLine #'bar-extent = #'(-1 . 1.5)
+    \override BarLine.bar-extent = #'(-1 . 1.5)
   }
   {
     \ledgerUp \ledgerDown
@@ -56,7 +56,7 @@ ledgerDown =
 
   \new Staff \with
   {
-    \override BarLine #'bar-extent = #'(0 . 0)
+    \override BarLine.bar-extent = #'(0 . 0)
   }
   {
     s1*4
@@ -72,7 +72,7 @@ ledgerDown =
 
   \new Staff \with
   {
-    \override BarLine #'bar-extent = #'(-2 . 0)
+    \override BarLine.bar-extent = #'(-2 . 0)
   }
   {
     s1*4
diff --git a/input/regression/bar-line-define-bar-glyph.ly b/input/regression/bar-line-define-bar-glyph.ly
new file mode 100644 (file)
index 0000000..cceab75
--- /dev/null
@@ -0,0 +1,28 @@
+\version "2.17.15"
+
+\header { texidoc = "New bar line glyphs can be defined in Scheme."
+        }
+
+\paper { ragged-right = ##t }
+
+
+#(define (make-coda-sign-bar-line grob extent)
+   (let ((stencil (ly:font-get-glyph (ly:grob-default-font grob)
+                                     "scripts.coda")))
+        stencil))
+
+#(add-bar-glyph-print-procedure "0" make-coda-sign-bar-line)
+
+\defineBarLine "0" #'("0" "" "")
+
+
+\relative c' \new StaffGroup <<
+  \new Staff {
+    c4 c \bar "0" c c \bar "0" \break
+    c1
+  }
+  \new Staff {
+    c4 c c c
+    c1
+  }
+>>
diff --git a/input/regression/bar-line-define-bar-line.ly b/input/regression/bar-line-define-bar-line.ly
new file mode 100644 (file)
index 0000000..b181aa3
--- /dev/null
@@ -0,0 +1,21 @@
+\version "2.17.15"
+
+\header { texidoc = "New bar line styles can be defined by @code{\\defineBarLine}."
+        }
+
+\paper { ragged-right = ##t }
+
+\defineBarLine "[|;" #'("|" "[|;" " |")
+\defineBarLine ";|]" #'(";|]" "" " |")
+
+\relative c' \new StaffGroup <<
+  \new Staff {
+    c4 c \bar "[|;" c c \bar ";|]" \break
+    c4 c \bar ";|]" c c \bar "[|;" \break
+    c1 }
+  \new Staff {
+    c4 c c c
+    c4 c c c
+    c1
+  }
+>>
index 17d5a7dc0e47119565a52fe2efe27102d876fcd5..3bbf05e07528a3295c0e5d2689e2e645cb0a2a79 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 
 \header { texidoc = "Segno bar lines can be used to mark
                      the begin and the end of a segno part."
@@ -6,12 +6,12 @@
 
 \paper { ragged-right = ##t }
 
-\relative \new StaffGroup <<
+\relative c' \new StaffGroup <<
   \new Staff {
-    c4 \bar "S" c \bar "|S" c \bar "S|" c \bar ":|S" \break
-    c4 c \bar ":|S|:" c c \bar ":|S.|:" \break
-    c4 c c2 \bar ".S|:" \break
-    c1 \bar ":|S." \break
+    c4 \bar "S" c \bar "S-|" c \bar "S-S" c \bar ":|.S" \break
+    c4 c \bar ":|.S.|:" c c \bar ":|.S.|:-S" \break
+    c4 c c2 \bar "S.|:" \break
+    c1 \bar ":|.S-S" \break
     c1 \bar "S" \break
     c1 }
   \new Staff {
index 359ccb4dd25076030bcce0824608c5048af781df..3beb61a9046ecc808635ac282226978c06c18071 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 
 \header { texidoc = "Various types of bar lines can be drawn.
 
@@ -15,11 +15,11 @@ space, centered on the top-most barline.
 
 " }
 
-\relative \new StaffGroup <<
+\relative c' \new StaffGroup <<
   \new Staff = "1" {
-    c2 \bar "dashed" c
+    c2 \bar "!" c
     s1
-    c2 \bar ":" c
+    c2 \bar ";" c
     s1
     c2 \bar "." c
     s1
index 8672a924f83532565bc5a2b77465e842cd81c437..6a3e4bf0758c3c6562f4a675fe2e5798063bd86c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Bar numbers can automatically reset at volta repeats.
@@ -10,7 +10,7 @@ musicWithBarNumberCheck =
   (integer?)
 #{
   \relative c' {
-    \override Score.BarNumber #'break-visibility = #'#(#t #t #t)
+    \override Score.BarNumber.break-visibility = ##(#t #t #t)
     \repeat volta 28 {
      c1 |
      c |
index 719c3f7acba4113ef9e055d0a5f4a234d4ac450e..ca1d1ff2c9188e7d7f0d263c09432c323a8bdf10 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
 
@@ -17,10 +17,10 @@ be increased.
 }
 
 \relative c'' {
-  \override Score.BarNumber #'break-visibility = #all-visible
+  \override Score.BarNumber.break-visibility = #all-visible
   \partial 4 c4 
   c1 c c
   \set Score.currentBarNumber = #99999
-  \override Score.BarNumber  #'padding = #3
+  \override Score.BarNumber.padding = #3
   c1 c
 }
index 8e06a82089e0d371119c2f70100772efa958388e..6f13e58a9e5be2d69367308597f84946a434ab9f 100644 (file)
@@ -3,7 +3,7 @@
   beamlets on the same height."
 
 }
-\version "2.16.0"
+\version "2.17.6"
 
 \paper {
   raggedright = ##t
@@ -11,6 +11,6 @@
 
 \relative c' {
   \time 1/4
-  \override Beam #'breakable = ##t
+  \override Beam.breakable = ##t
   r16 r16. c32[ c16 \break c8. ] r16
 }
index 73de47896c21cedb8a9c0b6e19fd96a60fbfcf37..75de18e03171339158853a742adfe063a87a25d5 100644 (file)
@@ -3,12 +3,12 @@
   texidoc = "Beamlets in grace notes remain readable."
 }
 
-\version "2.16.0"
+\version "2.17.28"
 \layout {
   ragged-right = ##t
 }
 
 \relative c'
 \context Staff {
-  f1 \grace { a'8[ f16] } g1
+  f1 \grace { a'8 f16 } g1
 }
index 7684ece58aa8a6d1d84dee918d8119b1517741f0..cb5a0b644a705c6b2689031b4fb964c6453c8124 100644 (file)
@@ -5,11 +5,11 @@
   
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \new Staff \with {
    \remove "Bar_engraver"
-   \override Beam #'breakable = ##t
+   \override Beam.breakable = ##t
 } {
    \time 1/8
    c'32 [
index c56fb8d6021a221febfb1f0a209740d7db937b43..0edbf53cd74b6d5dfbe54efe33a9535dd8de3332 100644 (file)
@@ -4,10 +4,10 @@
 "
 
 }
-\version "2.16.0"
+\version "2.17.6"
 \layout { ragged-right= ##t }
 
 \relative c''  {
-  \override Score.Beam #'breakable = ##t
+  \override Score.Beam.breakable = ##t
   \time 3/16 c16-[ d e \break f-] 
 }
index 92b0f0096777c4376acb19bab988fda15227b832..22262a85610413e603bc67108f4f81f7cf4e3e43 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="Some classic examples of broken beams, all taken from
@@ -11,7 +11,7 @@ Scriabin Op. 11, No. 1.
 }
 
 music = \relative c'' {
-  \override Beam #'breakable = ##t
+  \override Beam.breakable = ##t
   r2. f8[ c \break
   e c f,] r8 r4 a'8[ e \break
   g d g,] r8 r4 f'8[ a, \break
@@ -25,19 +25,19 @@ music = \relative c'' {
   f' b d ] r8 r2 |
 }
 
-\markup { "\override Beam #'positions = #beam::place-broken-parts-individually (default)" }
+\markup { "\override Beam.positions = #beam::place-broken-parts-individually (default)" }
 { \music }
 
-\markup { "\override Beam #'positions = #beam::align-with-broken-parts" }
+\markup { "\override Beam.positions = #beam::align-with-broken-parts" }
 \markup { \justify { Returns y-positions at the ends of the beam such that beams align-across-breaks. } }
 {
-  \override Beam #'positions = #beam::align-with-broken-parts
+  \override Beam.positions = #beam::align-with-broken-parts
   \music
 }
 
-\markup { "\override Beam #'positions = #beam::slope-like-broken-parts" }
+\markup { "\override Beam.positions = #beam::slope-like-broken-parts" }
 \markup { \justify { Approximates broken beam positioning in turn-of-the-century Editions Peters scores. } }
 {
-  \override Beam #'positions = #beam::slope-like-broken-parts
+  \override Beam.positions = #beam::slope-like-broken-parts
   \music
 }
index 4c6c8a03023efdd4b4117af26d3bcc1db8f6939a..561ca74d793d6c322ea27c438874518c21d4e301 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The functions passed to the @code{positions} property should
@@ -10,18 +10,18 @@ cases.
 \paper { ragged-right = ##t }
 {
   r2.
-  \override Beam #'breakable = ##t
+  \override Beam.breakable = ##t
   r8[ g' \break a' r]
 }
 {
   r2.
-  \override Beam #'positions = #beam::align-with-broken-parts
-  \override Beam #'breakable = ##t
+  \override Beam.positions = #beam::align-with-broken-parts
+  \override Beam.breakable = ##t
   r8[ g' \break a' r]
 }
 {
   r2.
-  \override Beam #'positions = #beam::slope-like-broken-parts
-  \override Beam #'breakable = ##t
+  \override Beam.positions = #beam::slope-like-broken-parts
+  \override Beam.breakable = ##t
   r8[ g' \break a' r]
 }
\ No newline at end of file
index efad10820a44f97371c98b908ddbd9a7b0ea5874..2e09fa6342b46d210ad66ff0ac932ebea333d762 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 \header{
 
   texidoc="Simple beams on middle staffline are allowed to be
 }
 
 \relative c'{
-  %%\override Staff.Stem  #'beamed-lengths = #'(3.50)
+  %%\override Staff.Stem.beamed-lengths = #'(3.50)
   %%  c8[ d]
   %%  d[ c]
   %% r2
-  %% \override Staff.Stem  #'beamed-lengths = #'(3.26)
+  %% \override Staff.Stem.beamed-lengths = #'(3.26)
 
   a8[^"small slope" b]
   b[ a]
index e7951e15abefcab87ac27d0421e0a15cc2e57542..507b5a5560fe95b880ce6c334f1dc297146d5781 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 \header {
   texidoc = "Manual beams do not collide with notes."
 }
@@ -8,7 +8,7 @@
   indent = #0.0
 }
 
-\relative \new Staff {
+\relative c' \new Staff {
 
   <<
     \new Voice {
   
   <<
      \new Voice {
-       \repeat unfold 8 \relative {
+       \repeat unfold 8 \relative c' {
         \voiceOne
         c8[
         \voiceTwo
         c'']
        }
      }
-     \new Voice \relative {
+     \new Voice \relative c' {
        \voiceFour
        s8 f 
        s8 g
@@ -67,7 +67,7 @@
   \break
    <<
      \new Voice {
-       \repeat unfold 8 \relative {
+       \repeat unfold 8 \relative c' {
         \voiceOne
 
         %% We must use a wider interval, otherwise the beam will be
@@ -77,7 +77,7 @@
         c'']
        }
      }
-     \new Voice \relative {
+     \new Voice \relative c' {
        \voiceFour
        \autoBeamOff
        \stemUp f' \stemDown f,
index 3e852029b96d9158405585f109ce5f64a94f3376..8f499e3683c60033311d08750fe3333fbfdfebed 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 \header {
   texidoc = "Manual beams do not collide with notes."
 }
@@ -8,7 +8,7 @@
   indent = #0.0
 }
 
-\relative \new Staff {
+\relative c' \new Staff {
 
   <<
     \new Voice {
index b4e717c8f724a7a90f4733969d19344465abbb53..95dd35c78b3a1621afac1351b23dac4e131d3f98 100644 (file)
@@ -7,7 +7,7 @@
 %  debug-beam-scoring = ##t
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \new Staff
 {
@@ -36,7 +36,7 @@
       s4. <g g'>4.
     } \\
     {
-%      \override Beam #'inspect-quants = #'(-4 . -3)
+%      \override Beam.inspect-quants = #'(-4 . -3)
       a8[ d e f g]
     }
     >>
index 441ed498657c77ec01c855064e9ee4d950af3d1e..cdc747be207974ba9ef5f1ddf07b39be9c18c374 100644 (file)
@@ -1,6 +1,6 @@
 
 
-\version "2.16.0"
+\version "2.17.28"
 
 \header { texidoc = "
 The beaming algorithm handles collisions between beams and
@@ -8,7 +8,7 @@ grace notes too.
 " }
 
 \relative c' {
- e'8[ f  e \grace { f,16[ a] } e'8]
+ e'8[ f  e \grace { f,16 a } e'8]
 }
 
 \relative c'{
index 68378389dd3f8d78425fcbb8c6d493ce618d30f5..aec8fa6d00f241f62a98bae6e07ffedd56d8837e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "Beams can be allowed to collide with grobs by overriding
 the collision-interfaces property."
@@ -6,7 +6,7 @@ the collision-interfaces property."
 
 \relative c' {
   c8 [ des' ]
-  \once \override Beam #'collision-interfaces = #'(beam-interface
+  \once \override Beam.collision-interfaces = #'(beam-interface
                                                    clef-interface
                                                    ;inline-accidental-interface
                                                    key-signature-interface
@@ -14,7 +14,7 @@ the collision-interfaces property."
                                                    time-signature-interface)
   c,8 [ des'! ]
   c, [ \key des \major d ]
-  \once \override Beam #'collision-interfaces = #'(beam-interface
+  \once \override Beam.collision-interfaces = #'(beam-interface
                                                    clef-interface
                                                    inline-accidental-interface
                                                    ;key-signature-interface
@@ -22,7 +22,7 @@ the collision-interfaces property."
                                                    time-signature-interface)
   c [ \key c \major d ]
   g [ \grace { a [ d ] } g, ]
-  \once \override Beam #'collision-interfaces = #'(;beam-interface
+  \once \override Beam.collision-interfaces = #'(;beam-interface
                                                    clef-interface
                                                    inline-accidental-interface
                                                    key-signature-interface
index 15cdea9bd39ea8fbf334a66d4ba136cafbeac80e..b601528b95ecd10c891611c91442ec6ac41290f2 100644 (file)
@@ -8,9 +8,9 @@
 %  debug-beam-scoring = ##t
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
-\relative {
+\relative c' {
   \time 2/4
   c8[ \clef "bass" e,, ]
   r8
index 9d01fbe79cd6b1cbe425123fa42e5bc689eabcda..89514aa5baec1bfe535ca2e94d917d5a769ccdb6 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "Beam collisions are resistant to scaled down staves."
 }
 
 \new Staff \with {
   fontSize = #-3
-  \override StaffSymbol #'staff-space = #(magstep -3)
-  \override StaffSymbol #'thickness = #(magstep -3) }
+  \override StaffSymbol.staff-space = #(magstep -3)
+  \override StaffSymbol.thickness = #(magstep -3) }
 <<
   \relative c'' { e16[ f] }
   \\
index cf675dfc05499d8be4087c810da5c4617cb17dc7..a6bf7d878054737774c0ae965454aeb984957162 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "Beam collision can be tweaked to only apply to the grobs
 within the beam's original voice."
@@ -8,7 +8,7 @@ within the beam's original voice."
   \time 5/4
   << { c8[ s c ] } \\ { s8 c' s8 } >>
   c,[ des' ]
-  \override Staff . Beam #'collision-voice-only = ##t
+  \override Staff.Beam.collision-voice-only = ##t
   << { c,8[ s c ] } \\ { s8 c' s8 } >>
   c,[ des'! ]
 }
index f02962d9013f3bd9f6643e6c850d766f57a61be3..59643345f23f49df7189275f1d1b7f7b9cf59fa4 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
 texidoc = "Concave beaming works for chords as well as monophonic
 music.
@@ -37,10 +37,10 @@ nonHorizontalBeams = {
 
 #(define (<> x y) (not (= x y)))
 mustBeHorizontal = {
-  \override Staff.Beam #'positions = #(check-slope-callbacks =)
+  \override Staff.Beam.positions = #(check-slope-callbacks =)
 }
 mustNotBeHorizontal = {
-  \override Staff.Beam #'positions = #(check-slope-callbacks <>)
+  \override Staff.Beam.positions = #(check-slope-callbacks <>)
 }
 
 \new Voice {
index 6643e38cef9c314ef979e19539f27999a6479b75..d165f4e5f479ae2ca1f40d2c89dd6d01818b2443 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 \header{
 
   texidoc = "Fully concave beams should be horizontal. Informally spoken,
@@ -12,7 +12,7 @@
 }
 
 
-resetMeasure = \set Score.measurePosition = #(ly:make-moment 0 1)
+resetMeasure = \set Score.measurePosition = #(ly:make-moment 0/1)
 
 %% examples from Ross.
 rossFourBeams =\relative c'' {
@@ -58,7 +58,7 @@ rossBeams = \relative c'' {
 
 #(define (<> x y) (not (= x  y)))
 \new Voice {
-  \override Beam #'positions = #(check-slope-callbacks =)
+  \override Beam.positions = #(check-slope-callbacks =)
   \rossBeams
   
 }
index ecf69921f4b3039856ced36675abdd32eece74eb..3008617671f681aa82a68c9dc05c6bbe3eef3b69 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Beamed stems have standard lengths if possible.  Quantization
@@ -6,6 +6,6 @@ is switched off in this example."
 }
 
 \relative c' {
-  \override Beam #'skip-quanting = ##t
+  \override Beam.skip-quanting = ##t
   f4  f8[ f]  f16[ f]  f32[ f]  f64[ f]  f128[ f]
 }
index 2fa96cb4798c050a3e718dc809a4790d7e5b2a05..21c755c2550a78ced9b33000a693cca2928018c3 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.11"
 \header{
 texidoc="
 Beams should behave reasonably well, even under extreme circumstances.
@@ -23,7 +23,7 @@ extreme = \relative c'' {
 
   %%%%%%%
   \stemNeutral
-  \times 2/3{ d16[ fis' d,]} \times 2/3{ cis[ g'' cis,,]}
+  \tuplet 3/2{ d16[ fis' d,]} \tuplet 3/2{ cis[ g'' cis,,]}
   a'16 cis a, g''' % Used to give a nice beam directed upwards.
   \stemNeutral
 
@@ -35,6 +35,6 @@ extreme = \relative c'' {
 {
                                % If we want to test extreme beams,
                                % we should not have them auto-kneed
-  \override Beam  #'auto-knee-gap = ##f
+  \override Beam.auto-knee-gap = ##f
   \extreme
 }
index b561ff0e5a1d52194ab654b71f42cb9c46c24c7c..0cf2c79aca7d371888e7de2c53a387886fa87076 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 \header  {
   texidoc = "Feathered beams should have the same progress of their feathering
 at the end of a line break as they do at the beginning of the next line."
@@ -14,124 +14,124 @@ at the end of a line break as they do at the beginning of the next line."
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #RIGHT
+    \omit Staff.TimeSignature
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #RIGHT
     a32[ b c d e f g a ]
-    \once \override Voice . Beam #'grow-direction = #LEFT
+    \once \override Voice.Beam.grow-direction = #LEFT
     a[ g f e d c b a]  \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #RIGHT
+    \omit Staff.TimeSignature
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #RIGHT
     a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #RIGHT
+    \omit Staff.TimeSignature
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #RIGHT
     a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #RIGHT
+    \omit Staff.TimeSignature
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #RIGHT
     a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #LEFT
+    \omit Staff.TimeSignature
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #LEFT
     a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #LEFT
+    \omit Staff.TimeSignature
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #LEFT
     a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #LEFT
+    \omit Staff.TimeSignature
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #LEFT
     a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Stem #'direction = #DOWN
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #RIGHT
+    \omit Staff.TimeSignature
+    \override Voice.Stem.direction = #DOWN
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #RIGHT
     a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Stem #'direction = #DOWN
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #RIGHT
+    \omit Staff.TimeSignature
+    \override Voice.Stem.direction = #DOWN
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #RIGHT
     a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Stem #'direction = #DOWN
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #RIGHT
+    \omit Staff.TimeSignature
+    \override Voice.Stem.direction = #DOWN
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #RIGHT
     a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Stem #'direction = #DOWN
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #LEFT
+    \omit Staff.TimeSignature
+    \override Voice.Stem.direction = #DOWN
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #LEFT
     a32[ b c d \bar "" \break e f g a b c d e f g a ] \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Stem #'direction = #DOWN
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #LEFT
+    \omit Staff.TimeSignature
+    \override Voice.Stem.direction = #DOWN
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #LEFT
     a32[ b c d e f g a \bar "" \break b c d e f g a ] \bar "|"
 } >>
 
 \new Staff <<
   \relative c' {
     \cadenzaOn
-    \override Staff . TimeSignature #'stencil = ##f
-    \override Voice . Stem #'direction = #DOWN
-    \override Voice . Beam #'breakable = ##t
-    \once \override Voice . Beam #'grow-direction = #LEFT
+    \omit Staff.TimeSignature
+    \override Voice.Stem.direction = #DOWN
+    \override Voice.Beam.breakable = ##t
+    \once \override Voice.Beam.grow-direction = #LEFT
     a32[ b c d e f g a b c d \bar "" \break e f g a ] \bar "|"
 } >>
index 6d0234713230e7692fe13147ae18ec13e7c6a6b0..3b350cab91e965e315449e3421c6b485a1ae888b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 \header {
 
   texidoc="In feathered beams, stems in knees reach up to the feathered part correctly.
@@ -9,24 +9,24 @@
 \layout { ragged-right = ##t}
 
 \relative c' {
-  \override Beam #'grow-direction = #-1
-%  \override Beam #'transparent = ##t
-  \override Stem #'direction = #UP
+  \override Beam.grow-direction = #-1
+%  \hide Beam
+  \override Stem.direction = #UP
   c32[
-  \override Stem #'direction = #DOWN
+  \override Stem.direction = #DOWN
 
   c''32 c32
-  \override Stem #'direction = #UP
+  \override Stem.direction = #UP
   c,,32]
 
-  \override Beam #'grow-direction = #1
-%  \override Beam #'transparent = ##t
-  \override Stem #'direction = #DOWN
+  \override Beam.grow-direction = #1
+%  \hide Beam
+  \override Stem.direction = #DOWN
   c''32[
-  \override Stem #'direction = #UP
+  \override Stem.direction = #UP
 
   c,,32 c32
-  \override Stem #'direction = #DOWN
+  \override Stem.direction = #DOWN
   c''32]
 
 }
index b9afa451249756d6ae6ac09c6571189fd310e4a6..0006976c6e6b9d6b032d7ba98a619456ab163f8c 100644 (file)
@@ -6,7 +6,7 @@
   
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \paper {
   ragged-right = ##t
@@ -18,8 +18,8 @@
 % a linear decrease instead?
 %
 
-\featherDurations #(ly:make-moment 3 4) \relative c'' {
-  \override Beam #'grow-direction = #LEFT
+\featherDurations #(ly:make-moment 3/4) \relative c'' {
+  \override Beam.grow-direction = #LEFT
   c16[
     c c c
     c c c c ] 
index 7bb865f849354000a29dbf38e8d132ed7c8d5f7b..d0f44becdcc1aaed29e214a5fc3c33b532d7a18c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
     texidoc = "In French style beaming, the stems do not go between beams."
@@ -8,7 +8,7 @@
 
 \relative c'
 {
-    \override Stem  #'french-beaming = ##t
+    \override Stem.french-beaming = ##t
     c16[ c c c]
     c8[ c16 e16 f16 g16 g8]
 }
index 303379b32670ece7365421c1517911627a5a4655..31bfcb9e543a5087df02ed589fd2e3697ccea616 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 \header {
 
   texidoc=" Funky kneed beams with beamlets also work. The beamlets
@@ -11,20 +11,20 @@ should be pointing to the note head.
 \layout { ragged-right = ##t}
 
 \relative c' {
-  \once \override Stem #'direction = #UP
+  \once \override Stem.direction = #UP
   c16
-  \once \override Stem #'direction = #DOWN
+  \once \override Stem.direction = #DOWN
 
   c''8 c,,16
-  \once \override Stem #'direction = #UP
+  \once \override Stem.direction = #UP
   c16
-  \once \override Stem #'direction = #DOWN
+  \once \override Stem.direction = #DOWN
 
   c''8 c16
-  \once \override Stem #'direction = #DOWN
+  \once \override Stem.direction = #DOWN
   
   c16 c,,8
-  \once \override Stem #'direction = #UP
+  \once \override Stem.direction = #UP
 
   c16          
 }
index 3d26b75d47c03e96f6893d4ba81a34c37b78d2ff..cf47dc9c50601f09d589c5d28c338a3b9dce06f4 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 \header {
   
   texidoc = "In complex configurations of knee beaming, according to
@@ -13,7 +13,7 @@ beam. This is in disagreement with the current algorithm."
 
 \relative c'
 {
-  \override Beam  #'auto-knee-gap = #7
+  \override Beam.auto-knee-gap = #7
   \set subdivideBeams = ##t         
   \time 8/8
   c,16[  g'''16  
index 15898c58d050ac3c1c89f0e9e0aa71b529f5022e..8ec0c42117dcee6d08260a71c7adbd67f1483857 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 
 \header {
        %%  \once.
        %%
 
-       \once \override Stem 
-       #'beaming = #(cons (list   1 2) (list 0 2 4))
+       \once \override Stem.beaming = #(cons (list   1 2) (list 0 2 4))
        c
-       \once \override Stem 
-       #'beaming = #(cons (list 0 2 4) (list 0 1 4))
+       \once \override Stem.beaming = #(cons (list 0 2 4) (list 0 1 4))
        c c c]
 }
 
index 4250947d158a58d9363791fe5c7417d60072f326..c238057e5a246f5f3fd9e771a25f056aaaf393f1 100644 (file)
@@ -3,7 +3,7 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 \paper {
   ragged-right = ##t
 }
@@ -16,7 +16,7 @@
     c]
 
   % only works for the right edge, sorry. 
-  \override Beam #'break-overshoot = #'(-0.5 . 0.5) 
+  \override Beam.break-overshoot = #'(-0.5 . 0.5) 
   \set stemLeftBeamCount = #2
   c8[
     c16
index b0522548d5ee3513bc4a6bfb078de3dd7dc6ee00..9e8b045a12b2f1242bb80099dfad148fa092f1a6 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 \header{
 
   texidoc=" Beams on ledgered notes should always reach the middle staff
@@ -18,9 +18,9 @@ note beams.  Override with @code{no-stem-extend}.  "
   f8[ f]   f64[ f] 
   \grace { 
     f8[ e8] 
-    \override Stem  #'no-stem-extend = ##f
+    \override Stem.no-stem-extend = ##f
     f8[ e8] 
-    \revert Stem #'no-stem-extend
+    \revert Stem.no-stem-extend
   }
   f8[ f]
   
index b1e959cb2bb80e4ec437a6abe3ed05e97144d6e0..40cfd61fa499464c5c94e8c1c1519f1e61326987 100644 (file)
@@ -8,7 +8,7 @@
 %% FIXME: This file should actually NOT produce any warnings!
 #(ly:set-option 'warning-as-error #f)
 
-\version "2.16.0"
+\version "2.17.6"
 
 \layout  {
   ragged-right = ##t
@@ -53,7 +53,7 @@ primes = \relative c' {
   \filler
 
 %{
-  \once \override Beam #'inspect-quants = #'(2.2 . 2.2)
+  \once \override Beam.inspect-quants = #'(2.2 . 2.2)
   \assertBeamQuant
   a8[ a]
   \filler
index eeadbfd798205e64ced0f5d4825a0524027e67d9..f64237ab227bd4e11b3bbd7da9aea541bcc40b40 100644 (file)
@@ -6,7 +6,7 @@ as invisible stems."
 
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \layout {
   ragged-right = ##t
@@ -14,9 +14,9 @@ as invisible stems."
 }
 
 \relative c' {
-  \times 2/3 {r8[ c' g']}
-  \override Stem #'stemlet-length = #0.5
-  \times 2/3 {r8[ c, g']}
+  \tuplet 3/2 {r8[ c' g']}
+  \override Stem.stemlet-length = #0.5
+  \tuplet 3/2 {r8[ c, g']}
 }
 
 
index 93223c969df881920fdaf095625563919c7fdfd4..5db5ea1f54141b2f71b57d00e9ac5d3924911652 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   
@@ -13,8 +13,8 @@ the beams should be subdivided every 1/8.
 }
 
 \relative c' {
-    \set tupletSpannerDuration = #(ly:make-moment 1 4)
-    \set baseMoment = #(ly:make-moment 1 8)
+    \tupletSpan 4
+    \set baseMoment = #(ly:make-moment 1/8)
     \set subdivideBeams = ##t
-    \times 4/6 { \repeat unfold 24 { c16 } }
+    \tuplet 6/4 { \repeat unfold 24 { c16 } }
 }
index f90b743df3f91c8dd4c3bc745b3bb1b4713a3b24..4d8398ac6da165656e84187eceea9cd15854e16e 100644 (file)
@@ -6,9 +6,9 @@
 \layout {
   ragged-right = ##t
   }
-\version "2.16.0"
+\version "2.17.6"
 
 \relative c'' {
-  \override Stem #'max-beam-connect = #1
+  \override Stem.max-beam-connect = #1
   c16[ c16]
 }
index caac0a6f6d090d0e0d07f3cd5a47500978ed13de..0c0a4c91cfcc77ce96e5499e621c4b4447f229f6 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
 
@@ -8,7 +8,7 @@ Beams in a completed tuplet should be continuous.
 }
 
 {
-  \times 2/3 {b16 b b} b8 b8 \times 2/3 {b16 b b}
-  \times 1/3 {b16 b b} b8. b \times 1/3 {b16 b b}
+  \tuplet 3/2 {b16 b b} b8 b8 \tuplet 3/2 {b16 b b}
+  \tuplet 3/1 {b16 b b} b8. b \tuplet 3/1 {b16 b b}
 }
 
index 39cdfe53707763e124df6cfc46ce9306990f051c..bb8bba1872a359a2df8a18128bca0181e7d2e58b 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.11"
 
 \header{
 texidoc="
@@ -10,7 +10,7 @@ case, line breaks are forbidden.
 
 \context Staff  \relative c''  {
 
-  c8[ \times 2/3 { c16 d e] }
+  c8[ \tuplet 3/2 { c16 d e] }
   s4*3
   
   c8.[ c16]
index d2a8667a6d82f8ecdbd1597b1573e776ea5c8721..5ec8e4b5a6aeecf8c36c1a6c104e4ad475540c41 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "
@@ -8,29 +8,29 @@ broken beat units.  This should work in tuplets as well as in ordinary time.
 }
 
 \relative c'' {
-    \times 2/3 {
+    \tuplet 3/2 {
       c8. c16 c8
     }
-   \times 2/3 {
+   \tuplet 3/2 {
       c8 c16 c8.
     }
-  \times 4/5 {
+  \tuplet 5/4 {
     c8[ c8. c16 c8 c8]
   }
-  \times 4/5 {
+  \tuplet 5/4 {
     c8[ c8 c16 c8. c8]
   }
-  \times 4/5 {
+  \tuplet 5/4 {
     c8 c16 c8. c8 c8
   }
-  \times 4/5 {
+  \tuplet 5/4 {
     c8 c8 c8. c16 c8
   }
   c8.[ c16 c8 c8]
   c8[ c16 c8. c8]
   c8[ c8. c16 c8]
   c8.[ c16 c8. c16]
-  \times 4/5 { c8 [ c16 c8 c16 c8 c8 ] }
-  \times 4/5 { a8 a32 a8 a16. a8 a8 }
+  \tuplet 5/4 { c8 [ c16 c8 c16 c8 c8 ] }
+  \tuplet 5/4 { a8 a32 a8 a16. a8 a8 }
 }
 
index b8c0dc57eba4f4f008dcf8b5bd56b64fef0c3e98..a5c7a8175881af330a77912b935628344d5a7f85 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
 
@@ -13,7 +13,7 @@
 }
 
 \relative c'' {
-  \override Score.SpacingSpanner #'shortest-duration-space = #3.0
+  \override Score.SpacingSpanner.shortest-duration-space = #3.0
   c4-\bendAfter #+5
   c4-\bendAfter #+4
   c4-\bendAfter #+3
index 7165087055fd34cf0ae8a77e9bfc3832aa51e54e..204b98802ea37930fbfe094381b2ddb33ba1429c 100644 (file)
@@ -3,7 +3,7 @@
 
 \header {
   texidoc = "
-A @code{\bookpart} variable can be inserted in a @code{\book}.
+A @code{\\bookpart} variable can be inserted in a @code{\\book}.
 No segfault should occur in this case.
 "
 }
index 5074966e5f0fb6e524c64762e5defc0efb432ae4..5cf9f3ccd932d02a31626a3088089ac1c190cbc5 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The default callback for break-align-anchor in clefs and time/@/key
@@ -7,14 +7,14 @@ the anchor to the extent of the break-aligned grob."
 }
 
 {
-  \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+  \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
   c1
   \key cis \major
-  \once \override Staff.KeySignature #'break-align-anchor-alignment = #LEFT
+  \once \override Staff.KeySignature.break-align-anchor-alignment = #LEFT
   \mark \default
   cis1
   \key ces \major
-  \once \override Staff.KeySignature #'break-align-anchor-alignment = #RIGHT
+  \once \override Staff.KeySignature.break-align-anchor-alignment = #RIGHT
   \mark \default
   ces1
 }
index 54554b20c28adbbc8e06c37bdafb6277001e0c55..cb02069ac5fef90d7e6b72cb42c35a547914a74c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The break-align-anchor property of a break-aligned grob gives
@@ -6,13 +6,13 @@ the horizontal offset at which other grobs should attach."
 }
 
 {
-  \override Score.RehearsalMark #'break-align-symbols = #'(staff-bar)
+  \override Score.RehearsalMark.break-align-symbols = #'(staff-bar)
   c'1
-  \once \override Staff.BarLine #'break-align-anchor = #-5
+  \once \override Staff.BarLine.break-align-anchor = #-5
   \mark \default
   \noBreak
   c'1
-  \once \override Staff.BarLine #'break-align-anchor = #5
+  \once \override Staff.BarLine.break-align-anchor = #5
   \mark \default
   \noBreak
   c'1
index 5178c65c6de436c80d8ddd26fe3ad47ca887d235..8e1a528753d73ec8b2f049e0db61187d2c9ecc04 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header{
   texidoc="
@@ -36,3 +36,63 @@ finalis, the latter three looking similar to bar glyphs.
     \finalis
   }
 }
+
+mus = \relative f' {
+  \clef tenor
+  c g c
+  c \virgula g c
+  c \caesura g c
+  c \divisioMinima g c
+  c \divisioMaior g c
+  c \divisioMaxima g c
+  \finalis
+}
+
+\new Staff \with {
+  \remove Bar_engraver
+} {
+  \context Voice \with {
+    \remove Stem_engraver
+  } {
+    \mus
+} }
+
+\new Staff \with {
+  \override StaffSymbol.line-positions = #'(-2 0 2 4)
+  \remove Bar_engraver
+} {
+  \context Voice \with {
+    \remove Stem_engraver
+  } {
+    \mus
+} }
+
+\new Staff \with {
+  \override StaffSymbol.line-count = #6
+  \remove Bar_engraver
+} {
+  \context Voice \with {
+    \remove Stem_engraver
+  } {
+    \mus
+} }
+
+\new Staff \with {
+  \override StaffSymbol.line-count = #2
+  \remove Bar_engraver
+} {
+  \context Voice \with {
+    \remove Stem_engraver
+  } {
+    \mus
+} }
+
+\new Staff \with {
+  \override StaffSymbol.line-positions = #'(-4 -2 2 5)
+  \remove Bar_engraver
+} {
+  \context Voice \with {
+    \remove Stem_engraver
+  } {
+    \mus
+} }
index 90022d685370b114e953e9b7ae0e7c25a3f9dc26..ecf0f65244f20f216e86ccc600b142ff4408a9de 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Breathing signs are positioned correctly on custom staves
@@ -6,8 +6,8 @@ which use @code{line-positions}."
 }
 
 \relative c' {
-  \override Staff.StaffSymbol #'line-positions = #'(-7 -5 -3 -1)
+  \override Staff.StaffSymbol.line-positions = #'(-7 -5 -3 -1)
   b2 \breathe b
-  \override BreathingSign #'direction = #DOWN
+  \override BreathingSign.direction = #DOWN
   \breathe
 }
index 765aa9d7ec63102952e78f77743ba0aa2772c439..f9e37878598fdf168876402d2e16737f5efdd777 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header{
   texidoc="
 Breathing signs are available in different tastes: commas (default),
@@ -11,7 +11,7 @@ ticks, vees and `railroad tracks' (caesura)."
   \new Staff {
     \relative c'' {
       %% by default, \breathe uses the rcomma, just as if saying:
-      %% \override BreathingSign #'text =
+      %% \override BreathingSign.text =
       %%   #(make-musicglyph-markup "scripts.rcomma")
       %%
       c4 c \breathe c c |
@@ -19,23 +19,23 @@ ticks, vees and `railroad tracks' (caesura)."
       %% rvarcomma and lvarcomma are variations of the default rcomma
       %% and lcomma
       %%
-      \override Staff.BreathingSign #'text =
+      \override Staff.BreathingSign.text =
         #(make-musicglyph-markup "scripts.rvarcomma")
       c4 c \breathe c c |
 
       %% wedge
       %%
-      \override BreathingSign #'text =
+      \override BreathingSign.text =
         #(make-musicglyph-markup "scripts.upbow")
       c4 c \breathe c c |
 
       %% caesurae
       %%
-      \override BreathingSign #'text =
+      \override BreathingSign.text =
         #(make-musicglyph-markup "scripts.caesura.curved")
       c4 c \breathe c c |
 
-      \override BreathingSign #'text =
+      \override BreathingSign.text =
         #(make-musicglyph-markup "scripts.caesura.straight")
       c4 c \breathe c c |
     }
index 257445615db087a75cb91645c6b9cf8f3e36cba0..f55588e5245edec061c86a4733bc5374ea108e0b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header  {
   texidoc = "LilyPond knows that breves and longas are wider than whole notes
   gis'1
   gis'\breve*1/2
   gis'\longa*1/4
-  \override NoteHead #'style = #'altdefault 
+  \override NoteHead.style = #'altdefault 
   gis'\breve*1/2
 }
 
 \score {
     \new Staff {
       \repeat unfold 8 { a'\breve*1/16 }
-      \override NoteHead #'style = #'altdefault 
+      \override NoteHead.style = #'altdefault 
       \repeat unfold 8 { a'\breve*1/16 }
     }
     \layout {
         \context {
             \Score
-            \override SpacingSpanner
-            #'common-shortest-duration = #(ly:make-moment 1 1 )
+            \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 1 )
         }
     }
 }
diff --git a/input/regression/cadenza-grace-autobeam.ly b/input/regression/cadenza-grace-autobeam.ly
new file mode 100644 (file)
index 0000000..8340d26
--- /dev/null
@@ -0,0 +1,21 @@
+\version "2.17.30"
+
+\header {
+
+  texidoc = "A grace note after @code{\\cadenzaOff} does not keep
+  autobeaming from resuming properly."
+
+}
+
+\layout { ragged-right = ##t }
+
+\relative c' {
+  e8 e e e e e e e
+  \cadenzaOn <>^\markup \typewriter "\\cadenzaOn"
+  e e e e e e e e
+  \cadenzaOff
+  \bar "|"
+  <>^\markup \typewriter "\\cadenzaOff"
+  \grace f8
+  e e e e e e e e
+}
diff --git a/input/regression/chord-name-override-text.ly b/input/regression/chord-name-override-text.ly
new file mode 100644 (file)
index 0000000..2877cc8
--- /dev/null
@@ -0,0 +1,13 @@
+\version "2.17.6"
+
+\header {
+  texidoc = "Users can override the @code{text} property of
+@code{ChordName}.
+"
+}
+
+\new ChordNames \chordmode {
+  a b c:7
+  \once \override ChordName.text = #"foo"
+  d
+}
\ No newline at end of file
index d70b80aab010d13287381ffb84faf3d0061910cc..ba8f1fdbe619f4c38813b02999f5d5594df1744e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 
 \header {
@@ -11,5 +11,5 @@ correctly on them.
 
 \relative c' {
   <c e g>4 r <c e g>2 ~ |
-  \times 2/3 { <c e g>4 q q } \times 2/3 { q q q } |
+  \tuplet 3/2 { <c e g>4 q q } \tuplet 3/2 { q q q } |
 }
index 524a3bd4e5682859b9e1c77745c44b4cb97792bc..52d001d273ca71cf695995d25e6eec6cfbd4ffc5 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.25"
 
 \header {
   texidoc = "
@@ -9,5 +9,5 @@ fingerings, etc are not repeated.
 }
 
 \relative c' {
-  <c-1 e-3 g-5>8\p( q) q4-| q8.\(^"text" q16 q4-|\)
+  <c-1 e-3 g-5>8\p( q) q4-! q8.\(^"text" q16 q4-!\)
 }
diff --git a/input/regression/chord-tremolo-accidental.ly b/input/regression/chord-tremolo-accidental.ly
new file mode 100644 (file)
index 0000000..f5a89cb
--- /dev/null
@@ -0,0 +1,18 @@
+\version "2.17.2"
+
+\header {
+  texidoc = "Chord tremolos adapt to the presence of accidentals.
+"
+}
+
+{
+  \repeat tremolo 16 { c''32 d'' }
+  \repeat tremolo 16 { c''32 <dis''> }
+  \repeat tremolo 16 { c''32 <dis'' fis''> }
+  \repeat tremolo 8 { c''32 d'' }
+  \repeat tremolo 8 { c''32 <dis''> }
+  \repeat tremolo 8 { c''32 <dis'' fis''> }
+  \repeat tremolo 4 { c''32 d'' }
+  \repeat tremolo 4 { c''32 <dis''> }
+  \repeat tremolo 16 { b''32 <cis'''> }
+}
\ No newline at end of file
index 9e30bbd0d8e4d1fdc14f7a1ba0a4dbb9ee00f7ec..ccfeb1e5be351b55eaf60f156b3ab78c61467060 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header{
   texidoc="@code{staffLineLayoutFunction} is used to change the position of the notes.
 This sets @code{staffLineLayoutFunction} to @code{ly:pitch-semitones} to
@@ -21,7 +21,7 @@ scales = \relative c' {
   clefPosition = #(+ -6 7)
 }
 {
-  \override Staff.StaffSymbol #'line-count = #5
+  \override Staff.StaffSymbol.line-count = #5
   \time 4/4
   <<
     \scales
diff --git a/input/regression/clef-oct-visibility.ly b/input/regression/clef-oct-visibility.ly
deleted file mode 100644 (file)
index 20b9622..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-\version "2.16.0"
-
-\header {
-
-    texidoc = "Octavation signs may be added to clefs.  By default,
-their break-visibility is derived from the associated clef, but it may
-be overridden explicitly. The initial treble_8 clef should not have an
-8, while the treble_8 clef after the tenor clef should.
-These settings also need to apply to clefs on new lines."
-
-}
-\layout { ragged-right = ##t  }
-
-
-\relative c' {
-  \override Staff.OctavateEight #'break-visibility = #all-invisible
-
-  \clef "treble_8"
-  c2 c |
-  c c | \break
-  c \clef "tenor" c |
-  \revert Staff.OctavateEight #'break-visibility
-  \clef "treble_8"
-  c2 c |
-  c c | \break
-  c c
-}
-
diff --git a/input/regression/clef-oct.ly b/input/regression/clef-oct.ly
deleted file mode 100644 (file)
index f34eae1..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-\version "2.16.0" \header {
-
-    texidoc = "Octavation signs may be added to clefs.  These
-octavation signs may be placed below or above (meaning an octave
-higher or lower), and can take any value, including 15 for two octaves."
-
-}
-\layout { ragged-right = ##t  }
-
-
-\relative c'' {
-
-  \clef "G_8"
-  c4
-  \clef "G_15"
-  c4
-  \clef "G_7"
-  c4
-  \clef "G_6"
-  c4 
-  \clef "G^8"
-  c4 
-  \clef "G^15"
-  c4 
-  \clef "G^9"
-  c4 
-}
-
diff --git a/input/regression/clef-octavation.ly b/input/regression/clef-octavation.ly
deleted file mode 100644 (file)
index c89a547..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-\version "2.16.0"
-
-\header {
-
-  texidoc="Octavate symbols should be correctly positioned close to
-the parent clef."
-
-}
-\score {
-  <<
-    \new Staff { \clef "G^8" g''1 }
-    \new Staff { \clef "F^8" c'1 }
-    \new Staff { \clef "C^8" c''1 }
-    \new Staff { \clef "G_8" g1 }
-    \new Staff { \clef "F_8" c,1 }
-    \new Staff { \clef "C_8" c1 }
-  >>
-}
diff --git a/input/regression/clef-transposition-optional.ly b/input/regression/clef-transposition-optional.ly
new file mode 100644 (file)
index 0000000..c7bc4f0
--- /dev/null
@@ -0,0 +1,15 @@
+\version "2.17.7"
+
+\header {
+
+  texidoc="Clef transposition symbols may be parenthesized or
+bracketed by using parentheses or brackets in the command string."
+
+}
+\score {
+  \new Staff {
+    \clef "G^(8)" g''1 |
+    \clef "bass_[15]" c,,1 |
+    \clef "C^(8)" c''1
+  }
+}
diff --git a/input/regression/clef-transposition-placement.ly b/input/regression/clef-transposition-placement.ly
new file mode 100644 (file)
index 0000000..119e00a
--- /dev/null
@@ -0,0 +1,18 @@
+\version "2.16.0"
+
+\header {
+
+  texidoc="Transposition symbols should be correctly positioned
+close to the parent clef."
+
+}
+\score {
+  <<
+    \new Staff { \clef "G^8" g''1 }
+    \new Staff { \clef "F^8" c'1 }
+    \new Staff { \clef "C^8" c''1 }
+    \new Staff { \clef "G_8" g1 }
+    \new Staff { \clef "F_8" c,1 }
+    \new Staff { \clef "C_8" c1 }
+  >>
+}
diff --git a/input/regression/clef-transposition-visibility.ly b/input/regression/clef-transposition-visibility.ly
new file mode 100644 (file)
index 0000000..ab82c49
--- /dev/null
@@ -0,0 +1,28 @@
+\version "2.17.18"
+
+\header {
+
+    texidoc = "Clefs may be transposed.  By default, break-visibility
+of ClefModifiers is derived from the associated clef, but it may
+be overridden explicitly. The initial treble_8 clef should not have an
+8, while the treble_8 clef after the tenor clef should.
+These settings also need to apply to clefs on new lines."
+
+}
+\layout { ragged-right = ##t  }
+
+
+\relative c' {
+  \override Staff.ClefModifier.break-visibility = #all-invisible
+
+  \clef "treble_8"
+  c2 c |
+  c c | \break
+  c \clef "tenor" c |
+  \revert Staff.ClefModifier.break-visibility
+  \clef "treble_8"
+  c2 c |
+  c c | \break
+  c c
+}
+
diff --git a/input/regression/clef-transposition.ly b/input/regression/clef-transposition.ly
new file mode 100644 (file)
index 0000000..d2ff573
--- /dev/null
@@ -0,0 +1,28 @@
+
+\version "2.16.0" \header {
+
+    texidoc = "Clefs may be transposed up or down
+by arbitrary amount, including 15 for two octaves."
+
+}
+\layout { ragged-right = ##t  }
+
+
+\relative c'' {
+
+  \clef "G_8"
+  c4
+  \clef "G_15"
+  c4
+  \clef "G_7"
+  c4
+  \clef "G_6"
+  c4
+  \clef "G^8"
+  c4
+  \clef "G^15"
+  c4
+  \clef "G^9"
+  c4
+}
+
index b51fcfdd8ce8390783f932e89d884e0f0242c029..fa08917267df21349e49fc9bce9bc736cc2fc7ca 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header{
 
@@ -24,7 +24,7 @@ full size."
   \clef "varbaritone"c'1^"varbaritone" \bar "||"
   \clef "bass"c'1^"bass" \bar "||"
   \clef "subbass"c'1^"subbass" \bar "||"
-  \override Staff.Clef  #'full-size-change = ##t 
+  \override Staff.Clef.full-size-change = ##t 
   \clef "treble" c'1^"full-size-change = #t" \bar "|."
 }
 
index 24cb829c422563eef542147a7b3fba76ff1dc64b..5757b9c8a7e4f678abe4323692979dbb518ab72d 100644 (file)
@@ -31,13 +31,13 @@ origScore = \score{
       d
       \grace c16
       e1
-      \key d\major
-      
+      \key d \major
+
       f
       \break  \clef bass
       g,
       fis
-    }  
+    }
 }
 
 \book { 
index db3ad23783699487504311973b2d043991ad827d..273d0a4d6d8d11c60805844b8f97e8aef58ab06a 100644 (file)
@@ -1,6 +1,6 @@
 
 
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "Clusters behave well across line breaks."
 }
@@ -16,16 +16,16 @@ fragment = \relative c' {
 <<
   \time 2/4 
   \new Staff {
-    \override ClusterSpanner #'style = #'ramp
+    \override ClusterSpanner.style = #'ramp
     \makeClusters \fragment
     r4
-    \override ClusterSpanner #'style = #'leftsided-stairs
+    \override ClusterSpanner.style = #'leftsided-stairs
     \makeClusters \fragment
     r4
-    \override ClusterSpanner #'style = #'rightsided-stairs
+    \override ClusterSpanner.style = #'rightsided-stairs
     \makeClusters \fragment
     r4
-    \override ClusterSpanner #'style = #'centered-stairs
+    \override ClusterSpanner.style = #'centered-stairs
     \makeClusters \fragment
     }
   
index b16b02989841719c3b7a308a05b853b172a6a331..87babb69348ad837a6202acc1d7f9ac1e70c9cb3 100644 (file)
@@ -7,9 +7,9 @@
 
 \layout  { ragged-right = ##t }
 
-\version "2.16.0"
+\version "2.17.15"
 
-\relative <<
+\relative c' <<
     \new Staff {
        <<
            { f g } \\
index 801e404063e3bdbadc0c5c64901f6196f33fba3b..38f8d4144c1446c5cfd3464bf73b81fa175489ce 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
 
     texidoc = "If dotted note heads must remain on the left side,
@@ -10,12 +10,12 @@ collision resolution moves the dots to the right."
 
 \relative c {
   \clef bass
-  \override Staff.NoteCollision #'prefer-dotted-right = ##t
+  \override Staff.NoteCollision.prefer-dotted-right = ##t
   << <b g' >4 ^"prefer-dotted-right = #t" \\ { c8. d16 } >>
   << <b g' >4 \\ { d8. d16 } >>
   << <b g' >4 \\ { f'8. d16 } >>
   << <c a' >4 \\ { g'8. d16 } >>
-  \override Staff.NoteCollision #'prefer-dotted-right = ##f
+  \override Staff.NoteCollision.prefer-dotted-right = ##f
   << <b g' >4 ^"prefer-dotted-right = #f" \\ { c8. d16 } >>
   << <b g' >4 \\ { d8. d16 } >>
   << <b g' >4 \\ { f'8. d16 } >>
index 229b12ca99ecca18cd2233a6dce56ec68a3d8ad5..b9db8bbcfdf6182d7bea575ee3c5a92276a25b93 100644 (file)
@@ -6,13 +6,13 @@
 
   }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \paper{ ragged-right=##t }
 
 \new Staff \relative c' <<
   { fis4.
-    \override Staff.NoteCollision #'prefer-dotted-right = ##f
+    \override Staff.NoteCollision.prefer-dotted-right = ##f
     fis4. }
   \\
   { \autoBeamOff e8 e e e e e e }
index ecc8d3688c63c58f34d6794059acb6cf7a491c29..8685cd62c11cccd4b372404bded494621aa901f7 100644 (file)
@@ -8,13 +8,13 @@
 
 {
   \key c \major
-  \set Staff.shapeNoteStyles = #'#(do re mi fa #f la ti)
+  \set Staff.shapeNoteStyles = ##(do re mi fa #f la ti)
   <<
     { f'4 }
     \\
     { f'4 }
   >>
-  \set Staff.shapeNoteStyles = #'#(do re mi faThin #f la ti)
+  \set Staff.shapeNoteStyles = ##(do re mi faThin #f la ti)
   <<
     { f'4 }
     \\
index da7b9b8577984fdc3767f894a3807d82c19ab1f3..685090b78adf710f8a465d7ac17aac2edac83e1e 100644 (file)
@@ -2,7 +2,7 @@
 
   texidoc = "Collision resolution may be forced manually with @code{force-hshift}. "
 }
-\version "2.16.0"
+\version "2.17.6"
 
 \paper  {
   ragged-right = ##t
@@ -10,7 +10,7 @@
 
 \relative c' {
   << {  f
-       \override NoteColumn #'force-hshift = #0.1
+       \override NoteColumn.force-hshift = #0.1
        f } \\
      {  e  e }
    >> 
index 6ecddba53e356f419c1f87f50c34b3775046a39e..9da7bed233e40b6623e29906e2fe38b15305624c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
     
     texidoc = "If @code{NoteCollision} has
@@ -13,7 +13,7 @@ should not disappear when merging similar note heads."
 \context Staff \relative c'' <<
   {
     g8[ g8]
-    \override Staff.NoteCollision  #'merge-differently-dotted = ##t
+    \override Staff.NoteCollision.merge-differently-dotted = ##t
     g8[ g8]
     g4. r8 g8. g16
     g8 g4 r8 g4
index b9300b2e065d090e45094f751692a31d3caa3811..7876e6a7fde80cd5d278c7167921ff575908613a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc =
 
@@ -14,7 +14,7 @@ if the black note heads are from 8th or shorter notes.
 
 \context Staff  \relative c'' <<
   {
-    \override Staff.NoteCollision  #'merge-differently-headed = ##t
+    \override Staff.NoteCollision.merge-differently-headed = ##t
     c2 c8 c4.
     c2
   }\\
index d34f227a88e9586971b87e43d6bf2b9c58607e51..3813a092654577607d61ac60e312a9c7fda90a42 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
  texidoc = "Mixed collisions with whole and longer notes
@@ -7,7 +7,7 @@
 
 \layout{ragged-right=##t}
 \relative c'' {
-  \override Score.NoteHead #'style = #'altdefault
+  \override Score.NoteHead.style = #'altdefault
   <<
     { c1 c2*2 c1 c4*4 c1 c\breve*1/2 c\breve*1/2 b\breve*1/2 }
     \\
index 37ad6ee8b68b102d9dcb0c12c821886d99d11d43..8f2c608e147361fbb83356e029a8b17927cc698b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header{
   texidoc = "Each grob can have a color assigned to it.
@@ -9,18 +9,18 @@ Use the @code{\\override} and @code{\\revert} expressions to set the
 \paper { ragged-right = ##t }
 
 \relative c' {
-  \override Accidental #'color = #darkgreen
-  \override Beam #'color = #cyan
-  \override NoteHead #'color = #darkyellow
+  \override Accidental.color = #darkgreen
+  \override Beam.color = #cyan
+  \override NoteHead.color = #darkyellow
   c4
-  \override NoteHead #'color = #red
+  \override NoteHead.color = #red
   f
-  \override NoteHead #'color = #darkmagenta
+  \override NoteHead.color = #darkmagenta
   g
-  \override NoteHead #'color = #darkblue
+  \override NoteHead.color = #darkblue
   b
-  \override NoteHead #'color = #green
-  \override Stem #'color = #blue
-  \override Flag #'color = #magenta
+  \override NoteHead.color = #green
+  \override Stem.color = #blue
+  \override Flag.color = #magenta
   e8 es d dis e4 r
 }
index 305f58a128a214aff5817dd9d9d8fa9991873a3d..e2e397618f2bee26bdfed7514ec3dbb868474e26 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "
@@ -15,6 +15,6 @@ Completion heads may be used with tuplets (and compressed music) too.
 }
 
 \context Staff \relative c'' {
-  \set tupletSpannerDuration = #(ly:make-moment 1 1)
-  \times 2/3 { g1 g g }
+  \tupletSpan 1
+  \tuplet 3/2 { g1 g g }
 }
index f88ab32ef9c09cfee28ee2de8c00757dd87f90a2..7f28cf4d315d4b66a192509e967c88576a9b972c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
 texidoc = "
@@ -12,15 +12,17 @@ Note head completion may be broken into sub-bar units by setting the
     \Voice
     \remove "Note_heads_engraver"
     \consists "Completion_heads_engraver"
+    \remove "Rest_engraver"
+    \consists "Completion_rest_engraver"
   }
 }
 
 \context Staff \relative f {
   \time 9/8
-  \set completionUnit = #(ly:make-moment 3 8)
-  g'1.. g2
+  \set completionUnit = #(ly:make-moment 3/8)
+  g'1.. r2
   \time 6/4
-  \set completionUnit = #(ly:make-moment 1 4)
-  \set tupletSpannerDuration = #(ly:make-moment 1 4)
-  \times 2/3 { e4 c8 f g a4 b8 c4 b8 a4 g8 a e f4 }
+  \set completionUnit = #(ly:make-moment 1/4)
+  \tupletSpan 4
+  \tuplet 3/2 { e4 c8 f g a4 b8 r4 b8 a4 g8 a e f4 }
 }
index 400c3506047df62747215e5f6346bc9550a25c79..d3a5a4553b193ed3d11b16938bc2d221e8bc25ed 100644 (file)
@@ -1,7 +1,7 @@
 \version "2.16.0"
 
 \header{
-  texidoc= "This tests @code{\once} applied to multiple property operations."
+  texidoc= "This tests @code{\\once} applied to multiple property operations."
 }
 
 \relative c' {
index 0fb7730f4de32e81138975202e15f895427a5e30..2f10281825beba9df08dcd9847ce2c73db886cba 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
     texidoc = "Create compound time signatures. The argument is a Scheme list
@@ -16,6 +16,7 @@ as @code{\\compoundMeter #'((3 2 8))} or shorter
 
 
 \relative c' {
+  \override Staff.TimeSignature.break-visibility = ##(#f #t #t)
   \compoundMeter #'(1 2 3 4 8)
   \repeat unfold 10 c8 \repeat unfold 20 c16 \break
 
index 81241dc9821e18a5fcadde7411035ddaa83a460f..5f3bb9901bf98772c9f0f818d38e28365d0b24e3 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header  {
 texidoc = "Context modifications can be stored into a variable as a
@@ -9,7 +9,7 @@ texidoc = "Context modifications can be stored into a variable as a
 ctxmod = \with {
   \remove "Time_signature_engraver"
   \consists "Ambitus_engraver"
-  \override StaffSymbol #'line-count = 4
+  \override StaffSymbol.line-count = 4
 }
 
 music = \relative c'' { \key fis \minor c1 d e }
@@ -20,7 +20,7 @@ music = \relative c'' { \key fis \minor c1 d e }
   \layout {
     \context { \Staff
       \ctxmod
-      \override NoteHead #'style = #'petrucci
+      \override NoteHead.style = #'petrucci
     }
   }
 }
@@ -31,8 +31,8 @@ music = \relative c'' { \key fis \minor c1 d e }
   >>
   \layout {
     \context { \Staff
-      \override StaffSymbol #'line-count = 3
-      \override NoteHead #'style = #'petrucci
+      \override StaffSymbol.line-count = 3
+      \override NoteHead.style = #'petrucci
     }
     % Should override the above definitions, but not reset others
     \context { \Staff
index abc8baec711ac3be3e46a8871d129428ca52e3a0..3857cd1593c0d9614ec6063ee07cb93d8c06aef4 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header  {
 texidoc = "Context modifications can be stored into a variable as a
@@ -9,37 +9,64 @@ texidoc = "Context modifications can be stored into a variable as a
 ctxmod = \with {
   \remove "Time_signature_engraver"
   \consists "Ambitus_engraver"
-  \override StaffSymbol #'line-count = 4
+  \override StaffSymbol.line-count = 4
 }
 
+\layout {
+  \context {
+    \Score
+    \remove "Mark_engraver"
+    \remove "Staff_collecting_engraver"
+  }
+  \context {
+    \Staff
+    \consists "Mark_engraver"
+    \consists "Staff_collecting_engraver"
+  }
+}
+
+
 music = \relative c'' { \key fis \minor c1 d e }
 
 \score { <<
+  \override Score.RehearsalMark.self-alignment-X = #LEFT
+  \override Score.RehearsalMark.font-size = #-2
   % No modifications:
-  \new Staff { \music }
-  % Some context modifications manually written in a \with block
+  \new Staff { \mark \markup { No modifications } \music }
   \new Staff \with {
     \remove "Time_signature_engraver"
     \consists "Ambitus_engraver"
-    \override StaffSymbol #'line-count = 4
-  } { \music }
+    \override StaffSymbol.line-count = 4
+  } {
+    \mark
+    \markup { "Remove time sig, add ambitus, set staff to 4 lines" }
+    \music }
+  % Some context modifications manually written in a \with block
+  \new Staff \with \ctxmod {
+    \mark \markup { "The same mods using a variable" } \music
+  }
   % The same mods as direct value of \with
-  \new Staff \with \ctxmod { \music }
-  % Mods as part of a \with block
-  \new Staff \with { \ctxmod } { \music }
+  \new Staff \with { \ctxmod } {
+    \mark \markup { "The same mods using a variable and \with" }
+    \music
+  }
   % Mods before a context mod in a with block are working:
   \new Staff \with {
     \remove "Clef_engraver"
     \ctxmod
-  } { \music }
+  } {
+    \mark
+    \markup { "Remove clef and use variable to add other changes as above" }
+    \music
+  }
   % Mods before and after a context mod in a with block are working:
   \new Staff \with {
     \remove "Clef_engraver"
     \ctxmod
     \remove "Key_engraver"
-  } { \music }
+  } { \mark \markup { "Also remove clef and key engravers" } \music }
   % Mods can be inserted instead of a \with block (i.e. \with is not required)
-  \new Staff \ctxmod { \music }
-  \new Staff { \music }
+  \new Staff \ctxmod { \mark \markup { "The same mods as staff 2" } \music }
+  \new Staff { \mark \markup { "Back to default" } \music }
 >>
 }
index d514fc18739fe06e67492108cc943ff14b3e226b..0969fbcb62a13ed0b4bd126462c037df3d025b22 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 instrument = \relative c' {
   \repeat unfold 40 { c8 }
@@ -9,8 +9,8 @@ Solo = \relative c' {
   c2 c |
   
   % Change the break-align-orders of the score so that cue-clef comes after bar-line
-  \override Score.BarLine #'space-alist #'cue-clef = #'(minimum-space . 1.0)
-  \override Score.BreakAlignment #'break-align-orders  =
+  \override Score.BarLine.space-alist.cue-clef = #'(minimum-space . 1.0)
+  \override Score.BreakAlignment.break-align-orders  =
     ##(( ;; end-of-line:
          left-edge cue-end-clef ambitus breathing-sign clef staff-bar
          key-cancellation key-signature time-signature cue-clef custos)
@@ -25,8 +25,8 @@ Solo = \relative c' {
   c2 c2 |
   
   % Revert back to default
-  \revert Score.BarLine #'(space-alist cue-clef)
-  \revert Score.BreakAlignment #'break-align-orders
+  \revert Score.BarLine.space-alist.cue-clef
+  \revert Score.BreakAlignment.break-align-orders
   \cueDuringWithClef #"instrQuote" #UP #"bass" { R1 }
   c2 c2 |
 }
diff --git a/input/regression/cue-clef-octavation.ly b/input/regression/cue-clef-octavation.ly
deleted file mode 100644 (file)
index 73e3302..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-\version "2.16.0"
-
-\header {
-  texidoc = "Octavation for clefs for cue notes."
-}
-
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
-\addQuote vIQuote { \vI }
-
-Solo = \relative c' {
-  \clef "treble_8" c1 |
-  \cueDuringWithClef #"vIQuote" #UP #"bass^8" { R1 } |
-  c1 | \break
-  c c
-  \clef "bass^8" c1 |
-  \cueDuringWithClef #"vIQuote" #UP #"treble_8" { R1 R1 } |
-  c
-  \cueDuringWithClef #"vIQuote" #UP #"treble_8" { R1 \break R } |
-  c
-}
-
-\score {
-  <<
-    \new Staff \new Voice \Solo
-  >>
-}
diff --git a/input/regression/cue-clef-transposition-optional.ly b/input/regression/cue-clef-transposition-optional.ly
new file mode 100644 (file)
index 0000000..caeaf13
--- /dev/null
@@ -0,0 +1,27 @@
+\version "2.17.7"
+
+\header {
+  texidoc = "Optional transposition for clefs for cue notes is supported
+by using parentheses or brackets around the transposition number."
+}
+
+vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+\addQuote vIQuote { \vI }
+
+Solo = \relative c' {
+  \clef "treble_8" c1 |
+  \cueDuringWithClef #"vIQuote" #UP #"bass^(15)" { R1 } |
+  c1 | \break
+  c c
+  \clef "bass^8" c1 |
+  \cueDuringWithClef #"vIQuote" #UP #"G_[8]" { R1 R1 } |
+  c
+  \cueDuringWithClef #"vIQuote" #UP #"treble_(8)" { R1 \break R } |
+  c
+}
+
+\score {
+  <<
+    \new Staff \new Voice \Solo
+  >>
+}
diff --git a/input/regression/cue-clef-transposition.ly b/input/regression/cue-clef-transposition.ly
new file mode 100644 (file)
index 0000000..dd26c9f
--- /dev/null
@@ -0,0 +1,26 @@
+\version "2.16.0"
+
+\header {
+  texidoc = "Transposition for clefs for cue notes."
+}
+
+vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+\addQuote vIQuote { \vI }
+
+Solo = \relative c' {
+  \clef "treble_8" c1 |
+  \cueDuringWithClef #"vIQuote" #UP #"bass^8" { R1 } |
+  c1 | \break
+  c c
+  \clef "bass^8" c1 |
+  \cueDuringWithClef #"vIQuote" #UP #"treble_8" { R1 R1 } |
+  c
+  \cueDuringWithClef #"vIQuote" #UP #"treble_8" { R1 \break R } |
+  c
+}
+
+\score {
+  <<
+    \new Staff \new Voice \Solo
+  >>
+}
index 1ffaddae8d85e063fc99e4ae3b0b55c59d7a2b8b..b129343a6e044bf29f1ac296a0cf44103604b855 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
     texidoc = "Custodes may be engraved in various styles."
 }
 
 
 {
-  \override Staff.Custos  #'neutral-position = #4
+  \override Staff.Custos.neutral-position = #4
 
-  \override Staff.Custos  #'style = #'hufnagel
+  \override Staff.Custos.style = #'hufnagel
   c'1^"hufnagel"
   \break < d' a' f''>1
 
-  \override Staff.Custos  #'style = #'medicaea
+  \override Staff.Custos.style = #'medicaea
   c'1^"medicaea"
   \break < d' a' f''>1
 
-  \override Staff.Custos  #'style = #'vaticana
+  \override Staff.Custos.style = #'vaticana
   c'1^"vaticana"
   \break < d' a' f''>1
 
-  \override Staff.Custos  #'style = #'mensural
+  \override Staff.Custos.style = #'mensural
   c'1^"mensural"
   \break < d' a' f''>1
 }
index 64075f0fde4271a6848aa9e0b65adbb5e0b2b4b8..a4abc604d1c09dbd86791a4e4e0a08caa3c1c4ae 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.25"
 #(use-modules (srfi srfi-13)
               (ice-9 format))
 
@@ -111,7 +111,7 @@ stderr of this run."
 \test ##[ { c-^ c^^ c_^ } #]                           % ArticulationEvent
 \test ##[ { c-+ c^+ c_+ } #]
 \test ##[ { c-- c^- c_- } #]
-\test ##[ { c-| c^| c_| } #]
+\test ##[ { c-! c^! c_! } #]
 \test ##[ { c-> c^> c_> } #]
 \test ##[ { c-. c^. c_. } #]
 \test ##[ { c-_ c^_ c__ } #]
@@ -159,7 +159,7 @@ stderr of this run."
 \test ##[ \mark \default #]                    % MarkEvent
 \test ##[ \mark "Allegro" #]
 \test ##[ \tempo 4 = 120 #]                    % MetronomeChangeEvent
-\test ##[ \tempo 4 = 108 ~ 116 #]
+\test ##[ \tempo 4 = 108 - 116 #]
 \test ##[ \tempo "Allegro" 4 = 132 #]
 \test ##[ \tempo "Andante" #]
 
@@ -178,14 +178,15 @@ stderr of this run."
 \test ##[ { \change Staff = "up" { c d } } #]          % ContextChange
 
 %% Tuplets
-\test ##[ \times 2/3 { c8 d e } #]                             % TimeScaledMusic
-\test ##[ \times 4/6 { c16 d e f g a } #]
-\test ##[ \times 2/3 { c d e \times 2/5 { f e d2 d4 } c } #]
-%}
+\test ##[ \tuplet 3/2 { c8 d e } #]                            % TimeScaledMusic
+\test ##[ \tuplet 6/4 { c16 d e f g a } #]
+\test ##[ \tuplet 3/2 { c4 d e \tuplet 5/2 { f4 e d2 d4 } c4 } #]
+\test ##[ \tuplet 3/2 2 { c4 d e \tuplet 5/2 2 { f4 e d2 d4 } c4 } #]
+
 %% \relative and \tranpose
 \test #"NOT A BUG" ##[ \relative c' { c b } #] % RelativeOctaveMusic
 \test #"NOT A BUG" ##[ \transpose c d { c d } #]       % TransposedMusic
-%}
+
 %% Repeats
 \test ##[ \repeat volta 2 { c d } #]           % VoltaRepeatedMusic
 \test ##[ \repeat unfold 2 { c d } #]                  % UnfoldedRepeatedMusic
@@ -211,13 +212,13 @@ stderr of this run."
 \test ##[ \unset Score . skipBars #]           % PropertyUnset
 \test ##[ \unset autoBeaming #]
 %% Layout properties
-\test ##[ \override Staff . Stem #'thickness = #4.0 #]         % OverrideProperty
-\test ##[ \once \override Beam #'beam-thickness = #0.6 #]
-\test ##[ \revert Staff . Stem #'thickness #]          % RevertProperty
-\test ##[ \revert Beam #'beam-thickness #]
+\test ##[ \override Staff.Stem.thickness = #4.0 #]             % OverrideProperty
+\test ##[ \once \override Beam.beam-thickness = #0.6 #]
+\test ##[ \revert Staff.Stem.thickness #]              % RevertProperty
+\test ##[ \revert Beam.beam-thickness #]
 \test "NOT A BUG" ##[ \oneVoice #]     % resetting a bunch of properties
-\test ##[ \override StaffGrouper #'(staff-staff-spacing basic-distance) = #7 #]    % nested properties
-\test ##[ \revert StaffGrouper #'(staff-staff-spacing basic-distance) #]    % nested properties
+\test ##[ \override StaffGrouper.staff-staff-spacing.basic-distance = #7 #]    % nested properties
+\test ##[ \revert StaffGrouper.staff-staff-spacing.basic-distance #]    % nested properties
 
 %% \applyOutput
 \test ##[ \applyOutput #'Foo #(lambda (arg) (list)) #]
@@ -241,11 +242,11 @@ stderr of this run."
 \test ##[ \ottava #1 #]    % OttavaMusic
 
 %% \tweak
-\test ##[ < \tweak #'duration-log #2 c > #]
-\test ##[ < c \tweak #'transparent ##t e > #]
-\test ##[ < \tweak #'color #'(1.0 0.0 0.0) \tweak #'duration-log #2 c > #]
-\test ##[ c-\tweak #'font-size #3 -> #]
-\test ##[ < \tweak Accidental #'color #'(1.0 0.0 0.0) cis eis g > #]
+\test ##[ < \tweak duration-log #2 c > #]
+\test ##[ < c \tweak transparent ##t e > #]
+\test ##[ < \tweak color #'(1.0 0.0 0.0) \tweak duration-log #2 c > #]
+\test ##[ c-\tweak font-size #3 -> #]
+\test ##[ < \tweak Accidental.color #'(1.0 0.0 0.0) cis eis g > #]
 
 %% end test.
 
index 8c6b087f5139a00ddd903c8e244f9d9df6a3d668..f87e23f038a36546b7d65d1eaac174b2fc741dc7 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "Dot Columns are engraved in the Staff by default,
@@ -9,7 +9,7 @@ and these dots avoid notes in other voices."
 
 music = \relative c'' { \time 3/4 << {
   <d f g>4. c c b g f a <a b> a <a' b>
-} \\ \times 1/2 {
+} \\ \tuplet 2/1 {
   <f, g b>2. a-- <a b> <g a>-. a2. a-- a a b <a b> \bar "|."
 } >> }
 
index 3b4d7af790c3dbadd7c8b4a16ec04415e056bef0..7d2d1ab29352835792c469b5c1790b1a3a0a8029 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The @code{dot-count} property
@@ -8,8 +8,8 @@ for @code{Dots} can be modified by the user."
 
 \relative c'' {
   c4.. a16
-  \override Dots #'dot-count = #4
+  \override Dots.dot-count = #4
   g4.. e16
-  \override Dots #'dot-count = #0
+  \override Dots.dot-count = #0
   c4. r8 r2
 }
index 08cc5f835de71f83dab6ae26d0147c7ab267c0a1..9ce981dc5912a4fca128df4c9052de31a4cebdc8 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.5"
 
 \header {
   texidoc = "Three types of double repeat bar line are supported."
@@ -7,7 +7,7 @@
   \new Staff \relative c' {
     c1
     \mark "\":|:\""
-    \bar ":|:"
+    \bar ":..:"
     c1
     \mark "\":|.|:\""
     \bar ":|.|:"
index 706fe0214a31083b469a16d1ae2875911d58c788..b0479b1ddf2a1b3464cbbfc3c4554d04ab7e5916 100644 (file)
@@ -7,7 +7,7 @@
 }
 
 
-\version "2.16.0"
+\version "2.17.6"
 
 drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh \repeat "unfold" 5 {hhc8 hho hhc8 hh16 hh} hhc4 r4 r2 }
 drl = \drummode {\repeat "unfold" 3 {bd4 sn8 bd bd4 << bd ss >> } bd8 tommh tommh bd toml toml bd tomfh16 tomfh }
@@ -18,8 +18,8 @@ timb = \drummode { \repeat "unfold" 2 {timh4 ssh timl8 ssh r timh r4 ssh8 timl r
     <<
       \new DrumStaff \with {
        drumStyleTable = #timbales-style
-       \override StaffSymbol #'line-count = #2
-       \override BarLine #'bar-extent = #'(-1 . 1)
+       \override StaffSymbol.line-count = #2
+       \override BarLine.bar-extent = #'(-1 . 1)
       } <<
        \set Staff.instrumentName = "timbales"
        \timb
index 71f32a35ebd0b076ec37c0a27cd9fc2afda8326b..96b59cb81ceaa17b229d62917c32798f4e6168ac 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "The compression factor of a duration identifier is
@@ -6,7 +6,7 @@ correctly accounted for by the parser."
 }
 
 % looks like a whole note, has duration of half note
-wholeHalved = #(ly:make-duration 0 0 1 2)
+wholeHalved = #(ly:make-duration 0 0 1/2)
 
 
 \relative c' {
index c6165db8567c5fa9dbfdff9042a05f780b41bcb3..69128631f656a33ad542fd95606c1f97813efc01 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Setting the style of a @code{DynamicTextSpanner} to @code{'none}
@@ -7,7 +7,7 @@ to hide the line altogether should also work over line breaks.
 }
 
 \relative c'' {
-  \override DynamicTextSpanner #'style = #'none
+  \override DynamicTextSpanner.style = #'none
   c2\cresc g,2
   \break
   g2 c'2\f
index 4211b4f891e871453860db09ac268f130dd72585..fd38e75b99d0046a3e44f35c3e4ceb510f40c280 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "If the line for a @code{DynamicTextSpanner} is hidden, the
@@ -10,7 +10,7 @@ dynamics to be unlinked."
   g4\p\cresc g g g
   g,1\f
 
-  \override DynamicTextSpanner #'style = #'none
+  \override DynamicTextSpanner.style = #'none
   g'4\p\cresc g g g
   g,1\f  
 }
diff --git a/input/regression/dynamics-avoid-cross-staff-stem-3.ly b/input/regression/dynamics-avoid-cross-staff-stem-3.ly
new file mode 100644 (file)
index 0000000..0b0b7b6
--- /dev/null
@@ -0,0 +1,19 @@
+\version "2.17.17"
+
+\header {
+  texidoc = "Cross-staff @code{Dynamic} does not trigger a cyclic
+dependency for direction look-up.
+"
+}
+
+<<
+  \new Staff = "up"
+    \relative c' {
+      f8
+      \change Staff = "down"
+      c e\f %should not trigger cyclic dependency
+      \change Staff = "up"
+      f
+    }
+  \new Staff = "down" { \clef bass s2 }
+>>
index e0f4a738bed9e46a0fc4f35f440e37d057cada44..078d876ad78ec32ab59ad653f07645ee3fe77c9e 100644 (file)
@@ -1,16 +1,19 @@
-\version "2.16.0"
+\version "2.17.10"
 
 \header {
-  texidoc = "LilyPond automatically shifts dynamics that collide with
-cross-staff stems when manual beams are used."
+  texidoc = "Dynamics are correctly nested over/under cross staff stems.
+They are, however, not yet factored into horizontal spacing - the fff
+collides with other grobs.
+"
 }
 
 \new GrandStaff <<
   \new Staff = "PnRH" {
     \relative g {
       \stemDown gis8 \p [ \change Staff = "PnLH" \stemUp a, \fff ]
+      a8 \p [ \change Staff = "PnRH" \stemDown gis'8 \fff ]
       \change Staff = "PnRH" r4
     }
   }
-  \new Staff = "PnLH" { \clef "F" { s4 r4 } }
+  \new Staff = "PnLH" { \clef "F" { s2 r4 } }
 >>
index e21ee623e231c05d6267d5f889ef02008fa2cbad..083585c31da06566e1a726eec1e5217dd70c9a8a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Text spanners work in the @code{Dynamics} context."
@@ -9,7 +9,7 @@
     c1 | c
   }
   \new Dynamics {
-    \override TextSpanner #'(bound-details left text) = #"rit."
+    \override TextSpanner.bound-details.left.text = #"rit."
     s1\startTextSpan
     s1\stopTextSpan
   }
diff --git a/input/regression/dynamics-empty.ly b/input/regression/dynamics-empty.ly
new file mode 100644 (file)
index 0000000..4b06d96
--- /dev/null
@@ -0,0 +1,26 @@
+\version "2.17.18"
+
+\header {
+  texidoc = "An empty Dynamics context does not confuse the spacing."
+}
+
+\score {
+  \new PianoStaff <<
+    \new Dynamics { s1}
+    \new Dynamics { s2\f\> s4 s\!\p }
+    \new Staff {d'2 g''}
+    \new Dynamics { s1 }
+    \new Dynamics { s2\f\> s4 s\!\p }
+    \new Dynamics { s1 }
+    \new Staff {d'2 g''}
+    \new Dynamics { s1 }
+    \new Dynamics { s2\sustainOn s4 s\sustainOff }
+  >>
+  \layout {
+    \context {
+      \Dynamics
+      \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing
+        = #'((minimum-distance . 5))
+    }
+  }
+}
diff --git a/input/regression/dynamics-outside-staff-priority.ly b/input/regression/dynamics-outside-staff-priority.ly
new file mode 100644 (file)
index 0000000..a2557d5
--- /dev/null
@@ -0,0 +1,18 @@
+\version "2.17.16"
+
+\header {
+  texidoc = "@code{DynamicText}, @code{DynamicLineSpanner}, and
+@code{Hairpin} do not have @code{outside-staff-priority} in @code{Dynamics}
+contexts. This allows grobs with @code{outside-staff-priority} set
+to be positioned above and below them.
+"
+}
+
+<<
+  \new Staff = "Test" {
+    \tempo "Andante" c'1
+  }
+  \new Dynamics \with { alignAboveContext = "Test" } {
+    s1\f
+  }
+>>
index 0a8b0120e1d1944536392651767c95be28b7fed6..1e3c4c6c3c2c25d2ff0b0120b92fd8837e083833 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "The space between an absolute dynamic and a dynamic text
 span can be changed using @code{'right-padding}.
@@ -7,6 +7,6 @@ span can be changed using @code{'right-padding}.
 
 \relative c' {
   \dimTextDim
-  \once \override DynamicText #'right-padding = #0
+  \once \override DynamicText.right-padding = #0
   c4\fff\> c c c\!
 }
index c810ba9c22c1a04ed73f1dd15ea4c818c45764f1..ef2e4532f8de0882fcad7a36c7ac03ac8228b847 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
     texidoc = " Easy-notation (or Ez-notation) prints names in note heads.
@@ -11,6 +11,6 @@ You also get ledger lines, of course."
   f2 e
   f4 e
   
-  \override NoteHead #'note-names = #'#("U" "V" "W" "X" "Y" "Z" "z")
+  \override NoteHead.note-names = ##("U" "V" "W" "X" "Y" "Z" "z")
   c2 d4 e
 }
index 5de09630a0d37a33eef39d00def5fe9cc4ebfa61..0e71ae8bdc0449f9312c97d216205661360881ad 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "An episema can be typeset over a single neume or a
@@ -9,7 +9,7 @@ melisma.  Its position is quantized between staff lines."
 \include "gregorian.ly"
 
 \new VaticanaVoice {
-  \revert Score.SpacingSpanner #'packed-spacing
+  \revert Score.SpacingSpanner.packed-spacing
   a\episemInitium\episemFinis
   \[ a\episemInitium \pes b \flexa a\episemFinis \]
   \[ a\episemInitium \pes b \flexa a b\episemFinis \flexa a \]
index b7af7fb715e66b44a948625c4aafcee0dca6726e..aa3d171c6baddb0519ff8e25872adece032b6543 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Music events can be extracted from a score with event
@@ -18,18 +18,18 @@ st =
   (parser location text)
   (string?)
 #{
-  \override TextSpanner #'(bound-details left text) = $text
+  \override TextSpanner.bound-details.left.text = $text
 #})
 
 
 vlnone = \new Staff {
   \set Staff.instrumentName = "violin-1"
   \set Staff.midiInstrument = "violin"
-  \override TextSpanner #'style = #'line
-  \override TextSpanner #'(bound-details right padding) = #-1
-  \override TextSpanner #'(bound-details left stencil-align-dir-y) =
+  \override TextSpanner.style = #'line
+  \override TextSpanner.bound-details.right.padding = #-1
+  \override TextSpanner.bound-details.left.stencil-align-dir-y =
     #CENTER
-  \override TextSpanner #'(bound-details right text) =
+  \override TextSpanner.bound-details.right.text =
     \markup { \draw-line #'(0 . -1) }
 \relative c' {
   \key d \major
diff --git a/input/regression/ferneyhough-hairpins.ly b/input/regression/ferneyhough-hairpins.ly
new file mode 100644 (file)
index 0000000..000d9da
--- /dev/null
@@ -0,0 +1,25 @@
+\version "2.17.14"
+
+\header {
+  texidoc = "LilyPond creates hairpins found in Ferneyhough scores.
+"
+}
+
+\relative c'' {
+  \override Hairpin #'stencil = #flared-hairpin
+  a4\< a a a\f
+  a4\p\< a a a\ff
+  a4\sfz\< a a a\!
+  \override Hairpin #'stencil = #constante-hairpin
+  a4\< a a a\f
+  a4\p\< a a a\ff
+  a4\sfz\< a a a\!
+  \override Hairpin #'stencil = #flared-hairpin
+  a4\> a a a\f
+  a4\p\> a a a\ff
+  a4\sfz\> a a a\!
+  \override Hairpin #'stencil = #constante-hairpin
+  a4\> a a a\f
+  a4\p\> a a a\ff
+  a4\sfz\> a a a\!
+}
\ No newline at end of file
index 691cc96243918288720584c577cdf0ac4c1cc989..01694b905423d9c55ccd274b4eca938bfabd5277 100644 (file)
@@ -6,13 +6,13 @@ true."
 
 }
 
-\version "2.16.0"
+\version "2.17.15"
 \paper {
   ragged-right = ##t
 }
 
 <<
-  \relative \new Voice {
+  \relative c' \new Voice {
     c8 c  b b  a a  b b  
     c c  b b
   
index e05535bd3cc89d923da17bba5387a5175b4f2b96..5dc20fa35e4f138f4d67ab375357c6d33b4a5658 100644 (file)
@@ -5,10 +5,10 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
 <<
-  \relative \new Voice {
+  \relative c' \new Voice {
     c8 c c c c c
   }
   \figures {
index 916d8e8621047d1167466c94e6f28440cd3cc01a..cb3cf4999a7eb87b340a096ec9b6f3c358449d48 100644 (file)
@@ -5,13 +5,13 @@ figures. They are switched on with @code{useBassFigureExtenders}"
 
 }
 
-\version "2.16.0"
+\version "2.17.15"
 \paper {
   ragged-right = ##t
 }
 
 <<
-  \relative \new Voice {
+  \relative c' \new Voice {
     c8 c  b b  a a  b b  
     c^"the same with extenders" c  b b  a a  b b  
   
index fc5a718b99f41d0ae234968f7268dbd34e80940f..73dce5c74467f91c11f9dfaf4fda8a950aff1dc6 100644 (file)
@@ -25,10 +25,9 @@ bassfigures = \figuremode {
 #(define (adjust-slash-stencil-default num forward stencil mag)
     stencil)
 
-unsetExceptions = #(define-music-function (parser location) ()
+unsetExceptions = #(define-void-function (parser location) ()
 ;  (set! horizontal-slash-interval horizontal-slash-interval-default)
 ;  (set! adjust-slash-stencil adjust-slash-stencil-default)
-  (make-music 'Music 'void #t)
 )
 
 <<
index 5d445a1b521d986855e44bdca55aaa8936e048be..a5a9cde1fc39ade9b43578bf61d6aa00e0422c37 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
 
@@ -35,7 +35,7 @@ You can also enter markup strings. The vertical alignment may also be tuned.
     <3 6\\ >
     <"V7" ["bla" 6] \markup{ \musicglyph #"rests.2"} >
 
-    \once \override BassFigureAlignment #'stacking-dir = #UP
+    \once \override BassFigureAlignment.stacking-dir = #UP
     <3 [5 7]>
     
   }
index ba89ec62336f06c65f99c45121f88ef818115775..2c5c6b6972179842c172338accbf017cbfb3e4f2 100644 (file)
@@ -1,11 +1,11 @@
 
-\version "2.16.0"
+\version "2.17.10"
 \header {
 
   texidoc = "It is possible to associate
 fingerings uniquely with notes. This makes it possible to add
-horizontal fingerings to notes. Fingering clears stems and flags
-if @code{'add-stem-support} is set.
+horizontal fingerings to notes. Fingering defaults to not clearing
+flags and stems unless there is a collision or a beam.
 "
 
 }
@@ -23,7 +23,7 @@ if @code{'add-stem-support} is set.
   \set fingeringOrientations = #'(down left up)
   < c-1  e-2 g-3 b-5 > 4
 
-  \once \override Fingering  #'staff-padding = #'()
+  \once \override Fingering.staff-padding = #'()
   < c-1  e-2 g-3 b-5 > 4
 
   \set fingeringOrientations = #'(up right)
@@ -32,7 +32,7 @@ if @code{'add-stem-support} is set.
   \set fingeringOrientations = #'(right)
   < c-1  e-2 g-3 b-5 > 8
 
-  \override Fingering #'add-stem-support = ##t
+  \override Fingering.add-stem-support = ##t
   \set fingeringOrientations = #'(up right)
   < c-1  e-2 g-3 b-5 > 4.
 
diff --git a/input/regression/fingering-column-snap-radius.ly b/input/regression/fingering-column-snap-radius.ly
new file mode 100644 (file)
index 0000000..50faefc
--- /dev/null
@@ -0,0 +1,13 @@
+\version "2.17.16"
+
+\header {
+  texidoc = "Horizontally-offset @code{Fingerings} align along the Y axis when
+they are within @code{FingeringColumn.snap-radius} of each other.
+"
+}
+
+\relative f'' {
+  \set fingeringOrientations = #'(left)
+  <cis-1 a-1 e-1>4
+  <ceses-1 a-1 e-1>4
+}
diff --git a/input/regression/fingering-column.ly b/input/regression/fingering-column.ly
new file mode 100644 (file)
index 0000000..d4d2551
--- /dev/null
@@ -0,0 +1,17 @@
+\version "2.17.10"
+
+\header {
+  texidoc = "Horizontal @code{Fingering} grobs that collide do not intersect.
+Non-intersecting @code{Fingering} grobs are left alone. This is managed
+by the @code{FingeringColumn} grob.
+"
+}
+
+\relative c'' {
+   \set fingeringOrientations = #'(left)
+   \override Fingering.staff-padding = #'()
+   \override Fingering.add-stem-support = ##f
+   <d-0 c-3 f,-0>4 <d-0 f,-3 e-0>
+   <d^0 c^3 f,-0> <d^0 f,-0> <c^3 f,-0>
+   <d-0 c-0 b-0 a-0 g-0 f-0>
+}
index 61760733de3723b00b70bb262cdb1811dcdc3a6e..26b91610c6dc1905b7a3176d055c1e39b521d5d7 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Fingerings work correctly with cross-staff beams."
@@ -19,7 +19,7 @@ music = \relative c {
       \stemUp \music }
     \new Staff="down" \new Voice { 
       \clef bass  \stemDown 
-      \override Fingering #'direction = #down 
+      \override Fingering.direction = #down 
       \transpose c c, \music }
   >>
 }
diff --git a/input/regression/fingering-directions.ly b/input/regression/fingering-directions.ly
new file mode 100644 (file)
index 0000000..ba8d152
--- /dev/null
@@ -0,0 +1,32 @@
+\version "2.16.0"
+
+\header {
+  texidoc = "Fingering directions in directed and undirected contexts."
+}
+
+\layout { ragged-right= ##t }
+
+{
+  \relative c''
+  \new Voice {
+    \tempo "\\voiceTwo"
+    \voiceTwo
+    c2^5 <c^5>
+    c_5 <c_5>
+    c-5 <c-5>
+    \tempo "\\oneVoice"
+    \oneVoice
+    c^5 <c^5>
+    c_5 <c_5>
+    c-5 <c-5>
+  } \addlyrics {
+    \override LyricText . font-size = #-2
+    \override LyricText . font-series = #'bold
+    "c^5" "<c^5>"
+    "c_5" "<c_5>"
+    "c-5" "<c-5>"
+    "c^5" "<c^5>"
+    "c_5" "<c_5>"
+    "c-5" "<c-5>"
+  }
+}
index 4b27eb8ca057c51130d25f5ddbd5744ef1181e49..3e815ea322182482132186910d271bb5a26fb20e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 #(set-global-staff-size 17)
 
 \header {
@@ -22,54 +22,54 @@ testnotes = { \autoBeamOff
 % Old settings: style set to default, 'mensural, 'no-flag; using the
 % default C++ function ly:stem::calc-stem
 {
-  \override Score.RehearsalMark #'self-alignment-X = #LEFT
+  \override Score.RehearsalMark.self-alignment-X = #LEFT
   \time 2/4
 
   \mark "Default flags (C++)"
   \testnotes
 
   \mark "Symbol: 'mensural (C++)"
-  \override Flag #'style = #'mensural
+  \override Flag.style = #'mensural
   \testnotes
 
   \mark "Symbol: 'no-flag (C++)"
-  \override Flag #'style = #'no-flag
+  \override Flag.style = #'no-flag
   \testnotes
 }
 
 % The same, but using the Scheme implementation of default-flag
 {
-  \override Score.RehearsalMark #'self-alignment-X = #LEFT
+  \override Score.RehearsalMark.self-alignment-X = #LEFT
   \time 2/4
 
-  \override Flag #'stencil = #default-flag
-  \revert Flag #'style
+  \override Flag.stencil = #default-flag
+  \revert Flag.style
   \mark "Default flags (Scheme)"
   \testnotes
 
   \mark "Symbol: 'mensural (Scheme)"
-  \override Flag #'style = #'mensural
+  \override Flag.style = #'mensural
   \testnotes
 
   \mark "Symbol: 'no-flag (Scheme)"
-  \override Flag #'style = #'no-flag
+  \override Flag.style = #'no-flag
   \testnotes
 }
 
 % New scheme functions: normal-flag, mensural-flag, no-flag
 {
-  \override Score.RehearsalMark #'self-alignment-X = #LEFT
+  \override Score.RehearsalMark.self-alignment-X = #LEFT
   \time 2/4
 
   \mark "Function: normal-flag"
-  \override Flag #'stencil = #normal-flag
+  \override Flag.stencil = #normal-flag
   \testnotes
 
   \mark "Function: mensural-flag"
-  \override Flag #'stencil = #mensural-flag
+  \override Flag.stencil = #mensural-flag
   \testnotes
 
   \mark "Function: no-flag"
-  \override Flag #'stencil = #no-flag
+  \override Flag.stencil = #no-flag
   \testnotes
 }
index 23f2d563e5de11197e70ce0969c4cce13b403aa0..d18c1bef2dfc3d8244d2f52ed1542d55b48087ff 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The 'stencil property of the Flag grob can be set to a custom
@@ -35,14 +35,14 @@ testnotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64 c''8 d''1
     (ly:stencil-translate rotated-flag (cons (- (/ stem-width 2))  0))))
 
 {
-  \override Score.RehearsalMark #'self-alignment-X = #LEFT
+  \override Score.RehearsalMark.self-alignment-X = #LEFT
   \time 2/4
   \mark "Function: weight-flag (custom)"
-  \override Flag #'stencil = #weight-flag
+  \override Flag.stencil = #weight-flag
   \testnotes
 
   \mark "Function: inverted-flag (custom)"
-  \override Flag #'stencil = #inverted-flag
+  \override Flag.stencil = #inverted-flag
   \testnotes
 
 }
index 8fc0d1245e3790ea31e4105fd03158330dd73cfb..7bda48a5e0571a609e3c9b06c4b3072de7fc1c67 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
 texidoc = "Flags can be drawn straight in the style used by
@@ -10,15 +10,15 @@ Stockhausen and Boulez.
 stemLength = #(define-music-function (parser location length) (number?)
   "Set the length of the next stem explicitly."
   #{
-    \once \override Stem #'length-fraction = #length
+    \once \override Stem.length-fraction = #length
   #}
 )
 
 {
     \autoBeamOff
     \time 3/8
-    \override Flag #'stencil = #modern-straight-flag
-    \override Stem #'length-fraction = #'1.5
+    \override Flag.stencil = #modern-straight-flag
+    \override Stem.length-fraction = #'1.5
     r8
     \acciaccatura {
          \stemDown
index 877d4ca4064b77dc7e85284103211d60eaf79c37..7e96536e6adde60dd9c00e9bd945f2d9c6c58299 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Straight flag styles."
@@ -6,25 +6,29 @@
 
 
 % test notes, which will be shown in different styles:
-testnotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64 
+testnotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64
    c''8 d''16 c''32 d''64 \acciaccatura {\stemDown c''8 \stemNeutral} d''64  }
 
 {
-  \override Score.RehearsalMark #'self-alignment-X = #LEFT
+  \override Score.RehearsalMark.self-alignment-X = #LEFT
   \time 2/4
   \mark "modern straight"
-  \override Flag #'stencil = #modern-straight-flag
+  \override Flag.stencil = #modern-straight-flag
   \testnotes
 
   \mark "old straight (large angles)"
-  \override Flag #'stencil = #old-straight-flag
+  \override Flag.stencil = #old-straight-flag
+  \testnotes
+
+  \mark "flat"
+  \override Flag.stencil = #flat-flag
   \testnotes
 %
 %   \mark "custom slant"
-% %   Custom straight flag. The parameters are: 
+% %   Custom straight flag. The parameters are:
 % %                flag thickness and spacing
 % %                up-flag angle and length
 % %               down-flag angle and length
-%   \override Flag #'stencil = #(straight-flag 0.35 0.8 -5 0.5 60 2.0)
+%   \override Flag.stencil = #(straight-flag 0.35 0.8 -5 0.5 60 2.0)
 %   \testnotes
 }
index 61166e865a13b163883d2676cb95dc194eb9a617..dac42fe513bc01688e31a488e8a6e3d54495f1c1 100644 (file)
@@ -5,7 +5,7 @@ This may happen with incorrect font versions.
 "
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \paper {
   ragged-right = ##T
@@ -19,7 +19,7 @@ This may happen with incorrect font versions.
   \layout {
     \context {
       \Score
-      \override PaperColumn #'keep-inside-line = ##f
+      \override PaperColumn.keep-inside-line = ##f
     }
   }
 }
index 84a0a4fcea20764d921731368f54170c21b5b264..228bcaa0723e16e23813de6b853e3a7ae7b08294 100644 (file)
@@ -5,7 +5,7 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \paper {
   % change for other default global staff size.
@@ -55,7 +55,7 @@
   \layout {
     \context {
       \Score
-      \override PaperColumn #'keep-inside-line = ##f
+      \override PaperColumn.keep-inside-line = ##f
     }
   }
 
index 523fc6f66d035ff1253c920ab36047e4fddae324..d0e9a472c51c0e08f0a31c64015a38395773d383 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
 
@@ -13,11 +13,11 @@ without size specification."
 
 
 {
-  \override Score.PaperColumn #'keep-inside-line = ##f
-  \override Staff.TimeSignature  #'font-name = #"Times New Roman"
+  \override Score.PaperColumn.keep-inside-line = ##f
+  \override Staff.TimeSignature.font-name = #"Times New Roman"
   \time 3/4
   \set Score.skipBars = ##t
-  \override Staff.MultiMeasureRestText #'font-name = #"LuxiMono"
+  \override Staff.MultiMeasureRestText.font-name = #"LuxiMono"
   R1*21^"Rest in LuxiMono"
 
   c'1_\markup {
index 0d8c91b0c050904007bbce393bfc662c34ee0fe9..58799d03dc61dbdfcce692fabb6342806c13d02e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "This is an example of automatic footnote numbering
 where the number is reset on each page.  It uses the symbol-footnotes
@@ -24,7 +24,7 @@ have been reached.
 \markup { h i }
 
 \relative c' {
-\footnote #'(1 . -1) #'NoteHead \markup { j } \default
+\footnote #'(1 . -1) \markup { j } NoteHead
 a b c d }
 
 \pageBreak
index 0206dc1e343b74755dcac363c49cf986728e9c1f..61c156b3ffd5676708b6945b7ecced62e58017fb 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "This regtest makes sure that footnote numbers are laid out
 in the correct vertical order.
@@ -30,59 +30,59 @@ in the correct vertical order.
     <<
       \new Staff \relative c' {
         d4 e
-        \once \override FootnoteItem #'numbering-assertion-function =
+        \once \override FootnoteItem.numbering-assertion-function =
           #(lambda (grob) (make-footnote-numbering-assertion-function 0))
         < f \footnote #'(1 . -1) \markup { n } a c >
-        \once \override FootnoteSpanner #'numbering-assertion-function =
+        \once \override FootnoteSpanner.numbering-assertion-function =
           #(simultaneous-footnote-numbering-assertion-function 2 4)
         a8-\footnote #'(1 . 1) \markup { p } \<
        -\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c\f |
         d a b c |\break
         d,4 e
-        \once \override FootnoteItem #'numbering-assertion-function =
+        \once \override FootnoteItem.numbering-assertion-function =
           #(lambda (grob) (make-footnote-numbering-assertion-function 6))
         < f \footnote #'(1 . -1) \markup { n } a c >
-        \once \override FootnoteSpanner #'numbering-assertion-function =
+        \once \override FootnoteSpanner.numbering-assertion-function =
           #(simultaneous-footnote-numbering-assertion-function 8 10)
         a8-\footnote #'(1 . 1) \markup { p } \<
        -\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c |
         d a b c\f |\pageBreak
         d,4 e
-        \once \override FootnoteItem #'numbering-assertion-function =
+        \once \override FootnoteItem.numbering-assertion-function =
           #(lambda (grob) (make-footnote-numbering-assertion-function 12))
         < f  \footnote #'(1 . -1) \markup { n } a c >
-        \once \override FootnoteSpanner #'numbering-assertion-function =
+        \once \override FootnoteSpanner.numbering-assertion-function =
           #(simultaneous-footnote-numbering-assertion-function 14 16)
         a8-\footnote #'(1 . 1) \markup { p } \<
-       -\footnote #'(1 . 1) #'Beam \markup { o } [ b c d ] a4 b c |
+       -\single\footnote #'(1 . 1) \markup { o } Beam [ b c d ] a4 b c |
         d a b c\! |\break
       }
       \new Staff \relative c' {
         d4 e
-        \once \override FootnoteItem #'numbering-assertion-function =
+        \once \override FootnoteItem.numbering-assertion-function =
           #(lambda (grob) (make-footnote-numbering-assertion-function 1))
         < f \footnote #'(1 . -1) \markup { n } a c >
-        \once \override FootnoteSpanner #'numbering-assertion-function =
+        \once \override FootnoteSpanner.numbering-assertion-function =
           #(simultaneous-footnote-numbering-assertion-function 3 5)
-        a8-\footnote #'(1 . 1) #'Hairpin \markup { p } \<
+        a8-\single\footnote #'(1 . 1) \markup { p } Hairpin \<
        -\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c\f |
         d a b c |\break
         d,4 e
-        \once \override FootnoteItem #'numbering-assertion-function =
+        \once \override FootnoteItem.numbering-assertion-function =
           #(lambda (grob) (make-footnote-numbering-assertion-function 7))
         < f \footnote #'(1 . -1) \markup { n } a c >
-        \once \override FootnoteSpanner #'numbering-assertion-function =
+        \once \override FootnoteSpanner.numbering-assertion-function =
           #(simultaneous-footnote-numbering-assertion-function 9 11)
         a8-\footnote #'(1 . 1) \markup { p } \<
        -\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c |
         d a b c\f |\pageBreak
         d,4 e
-        \once \override FootnoteItem #'numbering-assertion-function =
+        \once \override FootnoteItem.numbering-assertion-function =
           #(lambda (grob) (make-footnote-numbering-assertion-function 13))
         < f \footnote #'(1 . -1) \markup { n } a c >
-        \once \override FootnoteSpanner #'numbering-assertion-function =
+        \once \override FootnoteSpanner.numbering-assertion-function =
           #(simultaneous-footnote-numbering-assertion-function 15 17)
-        a8-\footnote #'(1 . 1) #'Hairpin \markup { p } \<
+        a8-\single\footnote #'(1 . 1) \markup { p } Hairpin \<
        -\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c |
         d a b c\! |\break
       }
index 333bcbdfa616d71ae5e1c678769b8f0faac059b4..9520780fce00ac550d38beb8053d3e2dc2078a2f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "This is an example of automatic footnote numbering
 where the number is not reset on each page.  It uses the default
@@ -38,9 +38,9 @@ footnotes.
 \markup { h i }
 
 \relative c' {
-  \once \override FootnoteItem #'numbering-assertion-function =
+  \once \override FootnoteItem.numbering-assertion-function =
     #(lambda (grob) (make-footnote-numbering-assertion-function 3))
-  \footnote #'(1 . -1) #'NoteHead \markup { j } \default
+  \footnote #'(1 . -1) \markup { j } NoteHead
   a b c d
 }
 
@@ -52,10 +52,10 @@ footnotes.
 
 \relative c' {
   d4 e
-  \once \override FootnoteItem #'numbering-assertion-function =
+  \once \override FootnoteItem.numbering-assertion-function =
     #(lambda (grob) (make-footnote-numbering-assertion-function 5))
   < f \footnote #'(1 . -1) \markup { n } a c >
-  \once \override FootnoteSpanner #'numbering-assertion-function =
+  \once \override FootnoteSpanner.numbering-assertion-function =
     #(simultaneous-footnote-numbering-assertion-function 6 7)
   a8-\footnote #'(1 . 1) \markup { p } \<
   -\footnote #'(1 . 1) \markup { o } [ b c d ] a4 b c |
index e6a3698c7184d24f531022ac5e28452f36b3d151..4e0821ab633e26df69f16a1753c66aa3d6128c3a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "With grobs that have break visibility, footnotes will
 automatically take the break visibility of the grob being footnoted.
@@ -14,12 +14,12 @@ This behavior can be overridden.
 {
   \relative c' {
     c1
-    \footnote "foo" #'(0 . 2) #'TimeSignature "bar" \default
+    \footnote "foo" #'(0 . 2) "bar" Staff.TimeSignature
     \time 3/4
     \break \pageBreak
     c2.
-    \once \override Score . FootnoteItem #'break-visibility = ##(#f #f #t)
-    \footnote "foo" #'(0 . 2) #'TimeSignature "bar" \default
+    \once \override Score.FootnoteItem.break-visibility = ##(#f #f #t)
+    \footnote "foo" #'(0 . 2) "bar" Staff.TimeSignature
     \time 4/4
     \break \pageBreak
     c1 \bar "|."
index 64b34e308a0d10becefc86fdd20659cb33833f9f..9798709ef9573e5725a6de68011cf17514182ad9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "Footnotes are annotated at the correct place, and the
 annotation goes to the correct page."
@@ -13,10 +13,10 @@ annotation goes to the correct page."
 \book {
 
 \relative c'' {
-b4-\footnote
+b4-\single\footnote
               \markup { \tiny "1." }
-              #'(0.5 . 0.5) #'Hairpin
-              \markup { 1. \justify { Goes to the first broken spanner. } }
+              #'(0.5 . 0.5)
+              \markup { 1. \justify { Goes to the first broken spanner. } } Hairpin
    \<
 c d a
 b c d a
@@ -37,11 +37,11 @@ b c d a
 b c d a
 b c d a\!
 
-\once \override FootnoteSpanner #'spanner-placement = #RIGHT
-b4-\footnote
+\once \override FootnoteSpanner.spanner-placement = #RIGHT
+b4-\single\footnote
               \markup { \tiny "2." }
-              #'(0.5 . 0.5) #'Hairpin
-              \markup { 2. \justify { Goes to the last broken spanner. } }
+              #'(0.5 . 0.5)
+              \markup { 2. \justify { Goes to the last broken spanner. } } Hairpin
    \<
 c d a
 b c d a
index 2c8803d42639820ca1b10746d46fa7c6a9a4a764..89e3be9d1762a3bccc44532584c39b6472eb2052 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="
@@ -20,11 +20,9 @@ of the topmost fret or string.
   \new FretBoards {
     \chordmode{
     c1 |
-    \override FretBoard #'fret-diagram-details
-       #'orientation = #'landscape
+    \override FretBoard.fret-diagram-details.orientation = #'landscape
     c1 |
-    \override FretBoard #'fret-diagram-details
-       #'orientation = #'opposing-landscape
+    \override FretBoard.fret-diagram-details.orientation = #'opposing-landscape
     c1
     }
   }
index b8f887469c886165eaab0af9df43737c4df0b4b7..e5b272fd6e70cc530640e5fb561681fbea59a9f4 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="
@@ -33,8 +33,7 @@ string, and its thickness can be changed.
      %% C major for guitar, with capo on third fret
        % thinner capo
         % verbose style
-    \override TextScript #'fret-diagram-details 
-        #'capo-thickness = #0.2
+    \override TextScript.fret-diagram-details.capo-thickness = #0.2
     c' ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (capo 3)
index 569878084a8d00226137173f35c3d67bd6b36120..1189c0b82c982f5c3f8fde771ccc106d5668e0b2 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="
@@ -32,8 +32,7 @@ size, and coloring.
                                      (barre 5 1 3))}
 
      %% C major for guitar, verbose style
-    \override TextScript #'fret-diagram-details 
-        #'dot-radius = #0.3
+    \override TextScript.fret-diagram-details.dot-radius = #0.3
     c' ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
@@ -44,9 +43,8 @@ size, and coloring.
                                      (barre 5 1 3))}
 
      %% C major for guitar, verbose style
-    \revert TextScript #'(fret-diagram-details dot-radius)
-    \once \override TextScript #'fret-diagram-details 
-        #'dot-color = #'white
+    \revert TextScript.fret-diagram-details.dot-radius
+    \once \override TextScript.fret-diagram-details.dot-color = #'white
     c' ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
@@ -57,8 +55,7 @@ size, and coloring.
                                      (barre 5 1 3))}
 
      %% C major for guitar,  verbose style
-    \once \override TextScript #'fret-diagram-details 
-        #'dot-position = #0.5
+    \once \override TextScript.fret-diagram-details.dot-position = #0.5
     c'1 ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
index 7827f048c3c783a590b6bbe4776a89a2c61f11c1..786d34110c6aa999ccffc21fd5b1fbe52ff3a24b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="
@@ -25,8 +25,7 @@ and fingering label font size can be adjusted.
   \new Voice {
     \textLengthOn
      %% C major for guitar,  verbose style
-    \override TextScript #'fret-diagram-details
-      #'finger-code = #'below-string
+    \override TextScript.fret-diagram-details.finger-code = #'below-string
     c'1 ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
@@ -37,8 +36,7 @@ and fingering label font size can be adjusted.
                                      (barre 5 1 3))}
 
      %% C major for guitar,  verbose style
-    \override TextScript #'fret-diagram-details 
-        #'string-label-font-mag = #0.4
+    \override TextScript.fret-diagram-details.string-label-font-mag = #0.4
     c'1 ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
@@ -49,8 +47,7 @@ and fingering label font size can be adjusted.
                                      (barre 5 1 3))}
 
      %% C major for guitar, verbose style
-    \override TextScript #'fret-diagram-details
-      #'finger-code = #'in-dot
+    \override TextScript.fret-diagram-details.finger-code = #'in-dot
     c' ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
@@ -61,8 +58,7 @@ and fingering label font size can be adjusted.
                                      (barre 5 1 3))}
 
      %% C major for guitar, verbose style
-    \once \override TextScript #'fret-diagram-details 
-        #'dot-color = #'white
+    \once \override TextScript.fret-diagram-details.dot-color = #'white
     c' ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
@@ -73,8 +69,7 @@ and fingering label font size can be adjusted.
                                      (barre 5 1 3))}
 
      %% C major for guitar,  verbose style
-    \once \override TextScript #'fret-diagram-details 
-        #'dot-label-font-mag = #0.75
+    \once \override TextScript.fret-diagram-details.dot-label-font-mag = #0.75
     c'1 ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
@@ -84,8 +79,7 @@ and fingering label font size can be adjusted.
                                      (place-fret 1 3 1)
                                      (barre 5 1 3))}
     %% dot color inversion, white on black
-    \once \override TextScript #'fret-diagram-details 
-        #'dot-color = #'black
+    \once \override TextScript.fret-diagram-details.dot-color = #'black
     c' ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1 inverted)
@@ -95,8 +89,7 @@ and fingering label font size can be adjusted.
                                      (place-fret 1 3 1)
                                      (barre 5 1 3))}
     %% dot color inversion, black on white
-    \once \override TextScript #'fret-diagram-details 
-        #'dot-color = #'white
+    \once \override TextScript.fret-diagram-details.dot-color = #'white
     c' ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1 inverted)
index 9f8a8b0732f12824e8621d997118a54d659596fe..6ae0e392b15353af9a9aa235502bd8430d11e33c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="
@@ -32,10 +32,8 @@ size, and number type.
                                      (barre 5 1 3))}
 
      %% C major for guitar, verbose style
-    \override TextScript #'fret-diagram-details 
-        #'label-dir = #LEFT 
-    \override TextScript #'fret-diagram-details 
-        #'number-type = #'roman-upper 
+    \override TextScript.fret-diagram-details.label-dir = #LEFT 
+    \override TextScript.fret-diagram-details.number-type = #'roman-upper 
     c' ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
@@ -46,13 +44,10 @@ size, and number type.
                                      (barre 5 1 3))}
 
      %% C major for guitar, verbose style
-    \revert TextScript #'(fret-diagram-details label-dir)
-    \override TextScript #'fret-diagram-details 
-        #'fret-label-font-mag = #0.4 
-    \override TextScript #'fret-diagram-details 
-        #'number-type = #'arabic 
-    \once \override TextScript #'fret-diagram-details 
-        #'fret-label-vertical-offset = #0.25
+    \revert TextScript.fret-diagram-details.label-dir
+    \override TextScript.fret-diagram-details.fret-label-font-mag = #0.4 
+    \override TextScript.fret-diagram-details.number-type = #'arabic 
+    \once \override TextScript.fret-diagram-details.fret-label-vertical-offset = #0.25
     c' ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
@@ -63,11 +58,9 @@ size, and number type.
                                      (barre 5 1 3))}
 
      %% C major for guitar, verbose style
-    \revert TextScript #'(fret-diagram-details label-dir)
-    \once \override TextScript #'fret-diagram-details 
-        #'number-type = #'custom
-    \once \override TextScript #'fret-diagram-details 
-        #'fret-label-custom-format = #"~d°"
+    \revert TextScript.fret-diagram-details.label-dir
+    \once \override TextScript.fret-diagram-details.number-type = #'custom
+    \once \override TextScript.fret-diagram-details.fret-label-custom-format = #"~d°"
     c' ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
index 95f4f5f4eba63b1f67a5e6ce7f881aa9a1561c26..db52341ec704020d933ea748d4f030d8ed87dc0f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="
@@ -19,18 +19,15 @@ Fret diagrams can be presented in landscape mode.
 
   \new Voice {
     \textLengthOn
-    \override TextScript #'fret-diagram-details
-       #'orientation = #'landscape
+    \override TextScript.fret-diagram-details.orientation = #'landscape
 
      %% C major for guitar, regular style
     c'1 ^\markup {
             \fret-diagram #"6-x;5-3-3;4-2-2;3-o;2-1;1-o;"}
 
      %% C major for guitar with barre on fret 3, regular style
-    \once \override TextScript #'fret-diagram-details 
-        #'label-dir = #LEFT
-    \once \override TextScript #'fret-diagram-details 
-        #'barre-type = #'straight
+    \once \override TextScript.fret-diagram-details.label-dir = #LEFT
+    \once \override TextScript.fret-diagram-details.barre-type = #'straight
     c' ^\markup {
             \fret-diagram 
                #"f:1;s:1.2;6-x;c:5-1-3;5-3-1;4-5-2;3-5-3;2-5-4;1-3-1;"}
index 60c87372534f657cd03ff68ab35ec9f792fc9959..29d617e5c22b600c344a1468e45af8b77a3ff0ce 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="
@@ -19,18 +19,15 @@ Fret diagrams can be presented in landscape mode.
 
   \new Voice {
     \textLengthOn
-    \override TextScript #'fret-diagram-details
-       #'orientation = #'opposing-landscape
+    \override TextScript.fret-diagram-details.orientation = #'opposing-landscape
 
      %% C major for guitar, regular style
     c'1 ^\markup {
             \fret-diagram #"6-x;5-3-3;4-2-2;3-o;2-1;1-o;"}
 
      %% C major for guitar with barre on fret 3, regular style
-    \once \override TextScript #'fret-diagram-details 
-        #'label-dir = #LEFT
-    \once \override TextScript #'fret-diagram-details 
-        #'barre-type = #'straight
+    \once \override TextScript.fret-diagram-details.label-dir = #LEFT
+    \once \override TextScript.fret-diagram-details.barre-type = #'straight
     c' ^\markup {
             \fret-diagram 
                #"f:1;s:1.2;6-x;c:5-1-3;5-3-1;4-5-2;3-5-3;2-5-4;1-3-1;"}
index 95942f78e5d13cfda057618c0ef8d8846dd25765..1dce8a9f4592213004f4609c5bb79538949488a3 100644 (file)
@@ -19,8 +19,6 @@ myFretDiagram =
 
 \markup \override #'(fret-diagram-details . ((finger-code . below-string))) {
   \myFretDiagram
-  \hspace #4
   \override #'(size . 1.5) \myFretDiagram
-  \hspace #8
   \override #'(size . 3) \myFretDiagram
 }
index aff93e9f4b2e19b2bf2f396f42907010991bca9e..d3ea85fd3db868941c9eb3eb89a6a924dcecfa81 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="
@@ -29,7 +29,7 @@ string thickness.
                                      (barre 5 1 3))}
 
      %% C major for guitar,  verbose style
-    \once \override TextScript #'thickness = #1.5 
+    \once \override TextScript.thickness = #1.5 
     c'1 ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
@@ -40,8 +40,7 @@ string thickness.
                                      (barre 5 1 3))}
 
      %% C major for guitar, verbose style
-    \once \override TextScript #'fret-diagram-details
-      #'string-thickness-factor = #0.3
+    \once \override TextScript.fret-diagram-details.string-thickness-factor = #0.3
     c' ^\markup {
             \fret-diagram-verbose #'((mute 6)
                                      (place-fret 5 3 1)
index bfb0aa6125bfbeba410ceb9468741616bfd5dc35..b54f5cf254de065768d7208143b996216fdc42fd 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="
@@ -25,20 +25,15 @@ can be changed.
             \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"}
 
      %% D major for guitar, terse style
-    \once \override TextScript #'fret-diagram-details
-        #'top-fret-thickness = #5
-    \once \override TextScript #'fret-diagram-details
-        #'xo-font-magnification = #0.3
+    \once \override TextScript.fret-diagram-details.top-fret-thickness = #5
+    \once \override TextScript.fret-diagram-details.xo-font-magnification = #0.3
     d'1 ^\markup {
             \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"}
 
      %% D major for guitar, terse style
-    \override TextScript #'fret-diagram-details
-        #'mute-string = #"M"
-    \override TextScript #'fret-diagram-details
-        #'open-string = #"*"
-    \override TextScript #'fret-diagram-details
-        #'xo-padding = #0.5
+    \override TextScript.fret-diagram-details.mute-string = #"M"
+    \override TextScript.fret-diagram-details.open-string = #"*"
+    \override TextScript.fret-diagram-details.xo-padding = #0.5
     d'1 ^\markup {
             \fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"}
 
index c583c6a1c37694155a481416ebecc905877f7bd2..d98479a4bb5f6fc75f429ac3f77d77bab414bf84 100644 (file)
@@ -10,8 +10,10 @@ or at the beginning of a new line."
 myChords = \chordmode {
   c1 c1 \break
   c1 c1 \break
+  c2 c4 c4 \break
   \set chordChanges = ##t
   c1 c1 \break
+  c2 c4 c4 \break
 }
 
 <<
index d3af8ab84e95157de580c7141ac9221cdfe5a754..bf00be2fc41b2396041b5d4c01f267caf457b910 100644 (file)
@@ -5,7 +5,7 @@
 }
 
 
-\version "2.16.0"
+\version "2.17.11"
 
 %% todo : use macro, to show the statement tested. 
 #(ly:progress "~a\n" (ly:expand-environment "${HOME} $HOME $$ "))
@@ -14,7 +14,7 @@
 %% very platform dependent.
 %% #(ly:font-config-display-fonts)
 
-#(ly:progress "~A\n" (ly:duration->string (ly:make-duration 2 2 3 7)))
+#(ly:progress "~A\n" (ly:duration->string (ly:make-duration 2 2 3/7)))
 #(ly:parser-parse-string (ly:parser-clone parser) "foo  = #1 #(ly:progress \"hello there\n\")")
 
 #(ly:progress "~a\n" (ly:truncate-list! (iota 5) 10))
index f766c18d33fc1f3b3da10c49a0406afc53d0fd32..ce150f885dbd1e6b79c27239ad9822020da10331 100644 (file)
@@ -2,14 +2,14 @@
   texidoc = "When broken, glissandi can span multiple lines."
 
 }
-\version "2.16.0"
+\version "2.17.6"
 \paper {
   ragged-right = ##t
 }
 
 \relative c'' {
-  \override Glissando #'breakable = ##t
-  \override Glissando #'after-line-breaking = ##t
+  \override Glissando.breakable = ##t
+  \override Glissando.after-line-breaking = ##t
   d1\glissando
   \break s1
   \break s1
index d1f46c5ea51f3d7d295c65f729f374ef4dc766c4..29659bac612682dda5a1b94e68ac88d87c546fdd 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Broken glissandi anticipate the pitch on the next line."
@@ -6,8 +6,8 @@
 
 \score {
  \relative c' {
-   \override Glissando #'after-line-breaking = ##t
-   \override Glissando #'breakable = ##t
+   \override Glissando.after-line-breaking = ##t
+   \override Glissando.breakable = ##t
    c1\glissando
    \break
    c'1
@@ -23,8 +23,8 @@
 
 \score {
  \relative c' {
-   \override Glissando #'after-line-breaking = ##t
-   \override Glissando #'breakable = ##t
+   \override Glissando.after-line-breaking = ##t
+   \override Glissando.breakable = ##t
    c1\glissando
    \break
    c'1
index c397a7fc3c92ba413f36d1287c92c0fc16d428e5..baf5993d99021856113d5b2de773e17eebdd141c 100644 (file)
@@ -2,12 +2,12 @@
   texidoc = "If broken, Glissandi anticipate on the pitch of the next line."
   
 }
-\version "2.16.0"
+\version "2.17.6"
 \paper {
   ragged-right = ##T }
 
 \relative c'' {
-  \override Glissando #'breakable = ##t 
+  \override Glissando.breakable = ##t 
   d1 \glissando |
   \break
   c,1
index 8eb0b1cd86cf14c6fd6bece9a49c9a6645760d21..5611773909407757ae173a4a733ad9b5abc0566e 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Individual glissandi within a chord can be tweaked."
 }
 
 \relative c' {
-  \once \override Voice . Glissando #'style =
+  \once \override Voice.Glissando.style =
     #(lambda (grob)
-       (if (eq? 1 (ly:grob-property grob 'glissando-index)) 'zigzag 'default))
+       (if (= 1 (ly:grob-property grob 'glissando-index)) 'zigzag 'default))
   <d f a>1 \glissando s1 <f a c>
 }
index be8ce1515b5e1dca1abeaf10472bf8111748b6d5..94dd576dccc5aaa8dcdecc1f5a3b457fb917c15a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "@code{NoteColumn} grobs can be skipped over by glissandi.
@@ -7,6 +7,6 @@
 
 \relative c' {
   a2 \glissando
-  \once \override NoteColumn #'glissando-skip = ##t
+  \once \override NoteColumn.glissando-skip = ##t
   f''4 d,
 }
index 057b8d3c4eb0e01552716606844ca5b3bbb54482..bdb5124483b4100baafbde788795ec5b1498c139 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header{
 
@@ -18,7 +18,7 @@ The engraver does no time-keeping, so it involves some trickery to get
 }
 
 \new Staff \relative c''{
-  \override Glissando #'breakable = ##t
+  \override Glissando.breakable = ##t
   
   %% gliss non gliss and 
   c4 \glissando d e \glissando f \glissando \break
@@ -26,7 +26,7 @@ The engraver does no time-keeping, so it involves some trickery to get
   c \glissando d, \glissando e'
   << { e8 \glissando g8 } \\
      { \repeat unfold 4 d16 } >>
-  \override Glissando  #'style = #'zigzag
+  \override Glissando.style = #'zigzag
   c4 \glissando c,, \glissando c' \glissando d
 }
 
diff --git a/input/regression/grace-auto-beam-engraver.ly b/input/regression/grace-auto-beam-engraver.ly
new file mode 100644 (file)
index 0000000..4e7ff31
--- /dev/null
@@ -0,0 +1,40 @@
+\version "2.17.28"
+
+\header
+{
+  texidoc = "A separate @samp{Grace_auto_beam_engraver} initiates
+autobeaming at the start of each @code{\\grace} command."
+}
+
+\layout { short-indent = 1\cm  indent = 2\cm }
+
+music = {
+  \mark "manual"
+  \relative c'' {
+    \grace {a8[ b] } a1 
+    \grace {a8[ b c b gis] } a1 
+    \grace {a8[ b c32 b c16 gis] } a1
+    \grace {a8[ b c16 d] c4 b8[ gis] } a1
+    \grace {a8[ b c16 d] c4 b8 a b\fermata a16[ gis] } a1
+  } \break
+  \mark "automatic"
+  \relative c'' {
+    \grace {a8 b } a1
+    \grace {a8 b c b gis } a1
+    \grace {a8 b c32 b c16 gis } a1
+    \grace {a8 b c16 d c4 b8 gis } a1
+    \grace {a8 b c16 d c4 b8 a b\fermata a16 gis } a1
+  }
+}
+
+\score {
+  <<
+    \new Staff \with { instrumentName = \markup \center-column
+                      { without engraver } }
+    \new Voice \with { \remove "Grace_auto_beam_engraver" }
+               \music
+    \new Staff \with { instrumentName = \markup \center-column
+                      { with engraver } }
+    \new Voice \music
+  >>
+}
index dbd2c32082c14aa30f0e70296d40fab73997009e..badaa1ae74016fb302401ec5dad0722ce6ef1e51 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.28"
 \header {
   texidoc = "Bar line should come before the grace note."
 }
@@ -11,7 +11,7 @@
 
 
 \relative c' \context Staff  { 
-  f1 \grace {  a'16[ f]  } g1 }
+  f1 \grace {  a'16 f  } g1 }
 
 
 
index 0aa75547f8ad4a27f5e8a6793aa6bc4a2b407685..8566a522ea22540fb56be987374f66b5f684832b 100644 (file)
@@ -9,10 +9,10 @@ Unbeamed grace notes are not put into normal beams.
 \layout { ragged-right= ##t }
 
 
-\version "2.16.0"
+\version "2.17.28"
 \relative c'' {
   c4  d8[
-    \grace {  e32[  d c d] } e8]
+    \grace {  e32  d c d } e8]
   e[  e
       \grace { f16 } e8 e]
 }
index 9f9551e6565f290860fca9d519c687e6933851be..bacb821e1fdcf890765808e20cc773f244cc13f5 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.28"
 
 #(ly:set-option 'warning-as-error #f)
 
@@ -8,5 +8,5 @@
 }
 
 \context Voice \relative c' {
-  c4 \grace { d16[ d16] }
+  c4 \grace { d16 d16 }
 }
index 17456f0fb66844a4c4e885b13e7ff636a5ad1df7..f167a9794e10705ad2d4f07d62d7469299873694 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 
 \header
 {
@@ -6,6 +6,6 @@
   when the grace note is tied to the next note.
 "
 }
-\relative {
+\relative c' {
   \slashedGrace c16~ c1
 }
index 5e295964cb509b05e8f916b808b809af5e7daefd..419ee40de8256c97ee31bfe6d806d731c36c8742 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.28"
 \header {
   texidoc = "Pieces may begin with grace notes."
 }
@@ -7,9 +7,9 @@
 \layout { ragged-right = ##t}
 
 \relative c' \context Staff  { 
-  \grace {  a'16[ f]  } g1
+  \grace {  a'16 f  } g1
   \bar "||"  % test if | and || are synced.
-  \grace {  a16[ bes]  }  c1
+  \grace {  a16 bes  }  c1
   \bar "||"  % test if | and || are synced. 
 }
 
index 45eb1b4c44b499f4ce9b204e3cc88d123ccbb8f5..6bae7e187c52529f49171bafcc8c174bc7b05009 100644 (file)
@@ -3,7 +3,7 @@
 normal notes, if possible. They should never be longer, even if that
 would lead to beam quanting problems."
 }
-\version "2.16.0"
+\version "2.17.28"
 
 \layout {
     ragged-right = ##t
@@ -14,9 +14,9 @@ would lead to beam quanting problems."
     << {  d8.\noBeam d16 } \\ >>   \grace { d16 } c8.[ b16]
     << {  c16[ b] } \\ >>
     
-    \grace { c16[ b] } d4
-%    \override Beam #'inspect-quants =#'(2.8 . 2.5)
-%    \grace { c16[ b] } d4
+    \grace { c16 b } d4
+%    \override Beam.inspect-quants =#'(2.8 . 2.5)
+%    \grace { c16 b } d4
 
            }
 
index c45799d0eb316d6116afaaee232c50dc80d8d429..62f576b57d8e2e0d4a81a8b60d176e4eb957dd9d 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 \header{
   texidoc = "Here @code{startGraceMusic} should set @code{no-stem-extend} to 
 true; the two grace beams should be the same here.
@@ -14,9 +14,9 @@ true; the two grace beams should be the same here.
 \context Voice \relative c {
   \grace { 
     f8[ e8] 
-    \override Stem  #'no-stem-extend = ##t
+    \override Stem.no-stem-extend = ##t
     f8[ e8] 
-    \revert Stem #'no-stem-extend
+    \revert Stem.no-stem-extend
   }
   a4
   
index 9032eb8c2eaf587782548a6a70e06f2f9d16725c..cd24450032282024fe78ff152f1bee6ad0937741 100644 (file)
@@ -7,15 +7,16 @@
 
 
 \relative c'' <<
-  \context Staff  {
+  \context Staff {
     c2
-                                  \grace  c8
-                                  c4 c4 }
+    \grace  c8
+    c4 c4
+  }
   \new Staff {
     c2 \clef bass
-    \grace {  dis8[ ( d8] \key es\major  }
-
-    c4) c4 }
+    \grace {  dis8[ ( d8] \key es \major  }
+    c4) c4
+  }
   \new Staff { c2 c4 c4 \bar "|." }
 >>
 
index 113de90be86f8836f5a291fce462bf7b7f8a07da..1a150fcc8aba9ebb6264c12f086fd5cf7efe7b70 100644 (file)
@@ -1,9 +1,9 @@
-\version "2.16.0"
+\version "2.17.5"
 
 \header {
 
   texidoc = "A volta repeat may begin with a grace. Consecutive
-    ending and starting repeat bars are merged into one @code{:||:}."
+    ending and starting repeat bars are merged into one @code{:..:}."
 
 }
 
@@ -11,7 +11,7 @@
 
 \relative c' {
   \repeat volta 2 {
-    c1 
+    c1
   }
   \repeat volta 2 {
     \grace {c8 } c4
index b347600cb30518a9f9e0b5f9e04aa92ff7c05d47..b19a9a7c5fc5f9602a7d2b7458f94a33599f1436 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.28"
 
 \header {
 
@@ -13,8 +13,8 @@
 
 \relative c''{\key a \minor \time 2/4
              \repeat "volta" 2 {
-               \grace {  a16[ b] }  c4 c4  |
-               \grace {  d16[ b] } c4 c4 |
+               \grace {  a16 b }  c4 c4  |
+               \grace {  d16 b } c4 c4 |
                
              }
            }
index 820386f1143d119b8cd25fec8520e76f15059783..f86551e0899b8c132337879fb0f600cae44c256f 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.28"
 
 \header{
 
@@ -16,10 +16,10 @@ Main note scripts do not end up on the grace note.
 
 \new Voice \relative c'' {
   \grace b8 c4\fermata
-  \grace {  c32[ cis32] } gis4
-  \grace {  cis32[ dis32] } e4
-  \grace {  c32[ d] }\times 2/3 {  c8[ c c] }
-  \grace {  b32[ ( c32] }   c4)
+  \grace {  c32 cis32 } gis4
+  \grace {  cis32 dis32 } e4
+  \grace {  c32 d }\tuplet 3/2 {  c8[ c c] }
+  \grace {  b32 ( c32 }   c4)
   \grace  <c d>16  c8[ c8]
                                %       \grace  c16  c8[ c8]
   %% broken?
index 4ee9efe7cf076b317754cb9d0950d84e6324bac3..b67f7b5d3344950235720c92acb9370a57ebd070 100644 (file)
@@ -5,24 +5,24 @@
 staves synchronized with the notes."
 
 }
-\version "2.16.0"
+\version "2.17.30"
 
 skips =
 {
   \time 12/8
-  \once  \override Score.GridLine #'thickness = #4.0
+  \once  \override Score.GridLine.thickness = #4.0
   s8 
   s8 
   s8 
-  \once  \override Score.GridLine #'thickness = #3.0
+  \once  \override Score.GridLine.thickness = #3.0
   s8 
   s8 
   s8 
-  \once  \override Score.GridLine #'thickness = #4.0
+  \once  \override Score.GridLine.thickness = #4.0
   s8 
   s8 
   s8 
-  \once  \override Score.GridLine #'thickness = #3.0
+  \once  \override Score.GridLine.thickness = #3.0
   s8 
   s8 
   s8 
@@ -39,8 +39,8 @@ skips =
   \context {
     \RhythmicStaff
     \consists "Grid_point_engraver"
-    gridInterval = #(ly:make-moment 1 8)
-    \override BarLine #'bar-extent = #'(-0.025 . 0.025)
+    gridInterval = #(ly:make-moment 1/8)
+    \override BarLine.bar-extent = #'(-0.025 . 0.025)
   }
   \context {
     \StaffGroup
@@ -49,10 +49,10 @@ skips =
   \context {
     \Score
       \consists "Grid_line_span_engraver"
-      \override SystemStartBrace #'transparent = ##t
+      \hide SystemStartBrace
 
-      \override NoteColumn #'X-offset = #-0.5
-      \override NoteHead #'Y-offset = #0.75
+      \override NoteColumn.X-offset = #-0.5
+      \override NoteHead.Y-offset = #0.75
   }
 }
 
@@ -63,7 +63,7 @@ skips =
 \new StaffGroup <<
   \new RhythmicStaff \with
   {
-    \override NoteHead  #'no-ledgers = ##t
+    \override NoteHead.no-ledgers = ##t
   }
   {
     \stemUp
@@ -71,11 +71,10 @@ skips =
   }
   \new RhythmicStaff
   {
-    \override NoteHead #'transparent = ##t
-    \override NoteHead #'no-ledgers = ##t
-    \override Stem #'transparent = ##t
-    \override Flag #'transparent = ##t
-    \override Beam #'transparent = ##t
+    \hide NoteHead
+    \override NoteHead.no-ledgers = ##t
+    \hide Stem
+    \hide Beam
     << \skips
 
                                % force regular spacing by introducing notes.
index c53bc4b14361bfe7ac2075895372a5fe6221c927..d09d4a01beeb617f66a7f2594a48e53f86c0b4aa 100644 (file)
@@ -6,7 +6,7 @@ individual grobs that are indirectly caused by events may be tuned."
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 \paper {
   ragged-right = ##t
 }
@@ -14,8 +14,8 @@ individual grobs that are indirectly caused by events may be tuned."
 \relative c''
 {
   <
-    \tweak Accidental #'color #red   cis4
-    \tweak Accidental #'color #green es
+    \tweak Accidental.color #red   cis4
+    \tweak Accidental.color #green es
     g
   >4
 }
index 93f55d7ee7475055a9996be5955044ed96bb38fa..9a065a3217b57629d06fa9b7446d30b086d0c233 100644 (file)
@@ -6,7 +6,7 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 \paper {
   ragged-right = ##t
 }
@@ -14,9 +14,9 @@
 {
   \set fingeringOrientations = #'(right)
   <
-    \tweak #'font-size #3  c
-    \tweak #'color #red  d-\tweak #'font-size #8 -4
-    \tweak #'style #'cross  g
-    \tweak #'duration-log #1  a
+    \tweak font-size #3  c
+    \tweak color #red  d-\tweak font-size #8 -4
+    \tweak style #'cross  g
+    \tweak duration-log #1  a
   >4
 }
index 3a94a5292b5bf37aafd71408931e4e46b53a91a2..3dffd61e5905539f8c4a8180df9071ffdab0425d 100644 (file)
@@ -1,14 +1,22 @@
 \header {
 
-  texidoc = "If a hairpin ends on the first note of a new stave, we
+  texidoc = "If a hairpin ends on the first note of a new staff, we
 do not print that ending.  But on the previous line, this hairpin
 should not be left open, and should end at the bar line. "
 }
 
-\version "2.16.0"
+\version "2.17.6"
+
+\layout {
+  line-width = 4.\cm
+}
 
 \relative c' {
   c1\>
   \break
   c1\!
+  \override Hairpin.to-barline = ##f
+  c1\>
+  \break
+  c1\!
 }
index bfda3413ccd1c0aacaadb8ec32e28e757598cbb1..2da785101c44fce72e7f85aa01966f8ed6cd75e7 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
 
@@ -10,9 +10,9 @@ followed by a crescendo al niente should only print one circle."
 \layout { ragged-right = ##t } 
 
 \relative c'' {
-  \override Hairpin #'circled-tip = ##t
+  \override Hairpin.circled-tip = ##t
   c1\< d\! d\> c\!
-  \override Hairpin #'to-barline = ##f
+  \override Hairpin.to-barline = ##f
   e\> c\< d\! \break
   c\< \break
   e d\! c\> \break
diff --git a/input/regression/hairpin-clef.ly b/input/regression/hairpin-clef.ly
new file mode 100644 (file)
index 0000000..43acfdf
--- /dev/null
@@ -0,0 +1,10 @@
+\version "2.16.0"
+
+\header {
+  texidoc = "Broken hairpins are not printed too high after treble clefs.
+"
+}
+
+\relative c'' {
+  c4^\< c c c \break c c c c\! |
+}
index ac6c007e94434ac69e463ed80ece7687fa81c731..8e860fa22ac4c1d075dbf7fd435ed5fb94ce428b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc ="Hairpin crescendi may be dashed. "
@@ -7,6 +7,6 @@
 
 
 \relative c' {
-  \override Hairpin  #'style = #'dashed-line
+  \override Hairpin.style = #'dashed-line
   f2\< g c1 d4\> b a gis\! }     
 
index 38508a11673a3d5cc89494fe9792dfe95cf5df34..3c70b0733069208837226bb34bc89edd48a776e5 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
 
@@ -12,7 +12,7 @@ into them."
 \layout { ragged-right = ##t } 
 
 \relative c'' {
-  \override Score.PaperColumn #'keep-inside-line = ##f
+  \override Score.PaperColumn.keep-inside-line = ##f
   c4 \> c4 c4\! c4_\ff \> c4 c4\!\p
   
   <<
diff --git a/input/regression/hairpin-key-signature.ly b/input/regression/hairpin-key-signature.ly
new file mode 100644 (file)
index 0000000..0811099
--- /dev/null
@@ -0,0 +1,11 @@
+\version "2.16.0"
+
+\header {
+  texidoc = "Broken hairpins are not printed too high after key signatures.
+"
+}
+
+\relative c'' {
+  \key e \major
+  c4^\< c c c \break c c c c\! |
+}
index 84392607e13e9443e4ea015f59a7c9843b531dad..9527267ff71df345e88ee5a89d7b0d318af3c6e1 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Bound padding for hairpins also applies before following
@@ -8,7 +8,7 @@ is not scaled down.
 }
 
 \relative c' {
-  \override Hairpin #'to-barline = ##f
+  \override Hairpin.to-barline = ##f
   c2\>
   \dimTextDim
   c2\>
@@ -16,7 +16,7 @@ is not scaled down.
   c\> c\! \break
   \dimTextDim
   c2\> 
-  \override Hairpin #'bound-padding = #5
+  \override Hairpin.bound-padding = #5
   \dimHairpin
   c2\>
   \dimTextDim
index 2bc3a9bec80b4c4d7dd56acf6295a344dea15a15..be083aaacf57b7ac6165730c966378c2a694d295 100644 (file)
@@ -5,9 +5,9 @@ should end at that bar line. "
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \relative c'' {
-  \override Hairpin #'bound-padding = #1.0
+  \override Hairpin.bound-padding = #1.0
   c4\< c2. c4\!
 }
index f8dc4d921bde347eb4265246e041ab919e35db36..4a2a7f6bdbb1bcf7b8ef9f39e795398dea8cd2ba 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Staves in a PianoStaff remain alive as long as any of
@@ -9,7 +9,7 @@ the staves has something interesting."
   \context {
     \Staff
     \RemoveEmptyStaves
-    \override VerticalAxisGroup #'remove-first = ##t
+    \override VerticalAxisGroup.remove-first = ##t
   }
 }
 
index 0f9dca6466725ba62f0f02768781d513d8100b91..545500c90b34889d58beed37110a834f98fa76fe 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header { texidoc =
 
@@ -12,7 +12,7 @@ not erase previous settings to the Staff context.
   ragged-right= ##t
   \context {
     \Staff
-    \override StaffSymbol #'line-count = 4
+    \override StaffSymbol.line-count = 4
     \consists "Ambitus_engraver"
     \remove "Clef_engraver"
   }
index 1482e24579d2353d6e482d03578326770eb50011..e239adc6bbad15b1607e50d8b27c149aee983bbd 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "Harp pedal diagram contains dividers at positions ~a.  Normally, there is only one divider after the third pedal.") '(1 3 5))
@@ -14,7 +14,7 @@ a warning is printed out, but they should still look okay."
 }
 
 \relative c'' {
-  \override Score.PaperColumn #'keep-inside-line = ##f
+  \override Score.PaperColumn.keep-inside-line = ##f
   % Sanity checks: #pedals != 7:
   c1^\markup \harp-pedal #"^-v|--"
   % Sanity checks: no divider, multiple dividers, divider on wrong position:
index 3a2f3af76262d743a0f4bb2a3ab577880e62dc42..d0718337681beaec115daa7d93b906b23d90d38d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Harp pedals can be tweaked through the size, thickness and 
@@ -6,10 +6,10 @@ harp-pedal-details properties of TextScript."
 }
 
 \relative c'' {
-  \override Score.PaperColumn #'keep-inside-line = ##f
-  \override Voice.TextScript #'(harp-pedal-details box-width) = #1
-  \once \override Voice.TextScript #'size = #1.5
-  \once \override Voice.TextScript #'thickness = #7
+  \override Score.PaperColumn.keep-inside-line = ##f
+  \override Voice.TextScript.harp-pedal-details.box-width = #1
+  \once \override Voice.TextScript.size = #1.5
+  \once \override Voice.TextScript.thickness = #7
   c1^\markup \harp-pedal #"o^ovo-|vovo-o^"
   c1^\markup \override #'(harp-pedal-details . (
                   (box-width . 0.6)
@@ -18,9 +18,9 @@ harp-pedal-details properties of TextScript."
                   (space-before-divider . 0.1)
                   (space-after-divider . 1.2))) {
            \harp-pedal #"o^ovo-|vovo-o^"}
-  \revert Voice.TextScript #'(harp-pedal-details box-width)
-  \override Voice.TextScript #'(harp-pedal-details circle-thickness) = #3
-  \override Voice.TextScript #'(harp-pedal-details circle-x-padding) = #0.6
-  \override Voice.TextScript #'(harp-pedal-details circle-y-padding) = #-0.3
+  \revert Voice.TextScript.harp-pedal-details.box-width
+  \override Voice.TextScript.harp-pedal-details.circle-thickness = #3
+  \override Voice.TextScript.harp-pedal-details.circle-x-padding = #0.6
+  \override Voice.TextScript.harp-pedal-details.circle-y-padding = #-0.3
   c1^\markup \harp-pedal #"o^ovo-|vovo-o^"
 }
index 1ce625fe6f58ccdd6cd45fd3f1cfbffa8c47780c..3ffb66efc5bf96c062a8865163c088a921c204ac 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Horizontal brackets are created with the correct event-cause, ensuring
@@ -13,7 +13,7 @@ tweaks are applied to the correct spanner."
 }
 
 \relative c' {
-  c1-\tweak #'thickness #6 \startGroup
+  c1-\tweak thickness #6 \startGroup
   c1\startGroup
   c1\stopGroup
   c1\stopGroup
index e90f11d3c6b40722194db03eaaee6ded0c93d4c0..7595621102681f613dd1181ab397beb47e229be9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Shows the id property of a grob being set.  This should have
@@ -6,4 +6,4 @@ no effect in the PS backend.
 "
 }
 
-{ \override NoteHead #'id = #"foo" c }
+{ \override NoteHead.id = #"foo" c }
index 7269e91cb4a88b1fe6bb6cd0abb16e4b5f6ca282..63790a7b55f6ff3aa345774a3b5950d84f77c11d 100644 (file)
@@ -10,10 +10,9 @@ modifier."
 \version "2.16.0"
 
 myDisplayMusic =
-#(define-music-function (parser location music)
+#(define-void-function (parser location music)
  (ly:music?)
- (display-scheme-music music (current-error-port))
- (make-music 'SequentialMusic 'void #t))
+ (display-scheme-music music (current-error-port)))
 
 \myDisplayMusic \chordmode { c }
 
diff --git a/input/regression/identifier-quoted.ly b/input/regression/identifier-quoted.ly
new file mode 100644 (file)
index 0000000..fa60533
--- /dev/null
@@ -0,0 +1,26 @@
+\header
+{
+
+texidoc = "Music identifiers containing arbitrary characters may be
+initialized using
+@example
+\"violin1\" = @{ c''4 c'' c'' c'' @}
+@end example
+and used as:
+@example
+\\new Voice @{ \\\"violin1\" @}
+@end example
+"
+
+}
+
+\version "2.17.28"
+
+"violin1" = { c''4 c'' c'' c'' }
+"violin2" = { a'4 a' a' a' }
+
+\layout { ragged-right = ##t }
+
+{
+  << \"violin1" \\ \"violin2" >>
+}
index 6963f99477334c2c7c906aa7f7c5919246e7b25c..2e3bffb754db3799ff30d8185d39e9cf1aef042d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "LilyPond does in-notes.
@@ -9,12 +9,12 @@
 \book {
   \relative c' {
     \repeat unfold 5 {
-      \once \override FootnoteItem #'footnote = ##f
+      \once \override FootnoteItem.footnote = ##f
       \footnote
-         "" #'(0 . 0) #'NoteHead
-         \markup { \box \fill-line { "this is a test" } } \default
+         "" #'(0 . 0)
+         \markup { \box \fill-line { "this is a test" } } NoteHead
       \repeat unfold 5 { a\< b c d\! }
-      \footnote #'(-1 . 1) #'NoteHead "foobar" \default
+      \footnote #'(-1 . 1) "foobar" NoteHead
       \repeat unfold 5 { a\< b c d\! }
     }
   }
index 7e8ea62a77ad1074cc6ac6923b8772ce6bb3d5cc..a5545558e8611f9d0bbc8a109663fe61fe7cebd4 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.10"
 
 \header {
   texidoc = "Incipits can be printed using an @code{InstrumentName}
@@ -19,10 +19,10 @@ grob."
 \score {
   \new Staff {
     %% All this would be shortcuted by an appropriate music function:
-    \override Staff.InstrumentName #'music = ##{ \clef "petrucci-c1" c'4 d' e' f' #}
-    \override Staff.InstrumentName #'self-alignment-X = #RIGHT
-    \override Staff.InstrumentName #'padding = #0
-    \override Staff.InstrumentName #'stencil =
+    \override Staff.InstrumentName.music = ##{ \clef "petrucci-c1" c'4 d' e' f' #}
+    \override Staff.InstrumentName.self-alignment-X = #RIGHT
+    \override Staff.InstrumentName.padding = #0
+    \override Staff.InstrumentName.stencil =
       #(lambda (grob)
          (let* ((instrument-name (ly:grob-property grob 'long-text))
                 (layout (ly:output-def-clone (ly:grob-layout grob)))
@@ -37,13 +37,10 @@ grob."
                                'MensuralStaff)
                               (ly:grob-property grob 'music))))
                 (score (ly:make-score music))
-                (mm (ly:output-def-lookup layout 'mm))
                 (indent (ly:output-def-lookup layout 'indent))
-                (incipit-width (ly:output-def-lookup layout 'incipit-width))
-                (scaled-incipit-width (if (number? incipit-width)
-                                          (* incipit-width mm)
-                                          (* indent 0.5))))
-           (ly:output-def-set-variable! layout 'indent (- indent scaled-incipit-width))
+                (incipit-width (ly:output-def-lookup layout 'incipit-width
+                (* indent 0.5))))
+           (ly:output-def-set-variable! layout 'indent (- indent incipit-width))
            (ly:output-def-set-variable! layout 'line-width indent)
            (ly:output-def-set-variable! layout 'ragged-right #f)
            (ly:score-add-output-def! score layout)
index 58de023f9ed5cbbe1766c3553dbdef13f25281ca..7e6db4ac3b2b132138e9033b5e8a83fef43cff5b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Instrument names are removed when the staves are
@@ -10,7 +10,7 @@ disappears, as does the instrument name."
         
 \new PianoStaff <<
   \new Staff {
-    \override Staff.VerticalAxisGroup #'remove-empty = ##t  
+    \override Staff.VerticalAxisGroup.remove-empty = ##t  
     \set PianoStaff.instrumentName = #"up" 
     \set PianoStaff.shortInstrumentName = #"u"
     c'1\break R
index cbceec3d99a8c76f3b9cf49d0009f75c7b799504..68d030ad856e51de1686e2ad73eedbf91a19d8a3 100644 (file)
@@ -8,20 +8,20 @@ the following systems, respectively."
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 \paper { left-margin = 3\cm }
 \score {
   \new StaffGroup <<
     \new Staff {
-      \override Staff . InstrumentName #'self-alignment-X = #LEFT
-      \set Staff . instrumentName = \markup \column {
+      \override Staff.InstrumentName.self-alignment-X = #LEFT
+      \set Staff . instrumentName = \markup \left-column {
        "Left aligned" "instrument name"
       }
       \set Staff . shortInstrumentName = "Left"
       c''1 \break c''
     }
     \new Staff {
-      \override Staff . InstrumentName #'self-alignment-X = #CENTER
+      \override Staff.InstrumentName.self-alignment-X = #CENTER
       \set Staff . instrumentName = \markup \center-column {
        "Centered" "instrument name"
       }
@@ -29,8 +29,8 @@ the following systems, respectively."
       g'1 g'
     }
     \new Staff {
-      \override Staff . InstrumentName #'self-alignment-X = #RIGHT
-      \set Staff . instrumentName = \markup \column \right-align {
+      \override Staff.InstrumentName.self-alignment-X = #RIGHT
+      \set Staff . instrumentName = \markup \right-column {
        "Right aligned" "instrument name"
       }
       \set Staff . shortInstrumentName = "Right"
index 7a99c9d474b5176a69753dab9336df18e23d277a..80df393fceaf5eaf1e89ae2fb09f1817cbb37a6a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "No such instrument: ~a") "bassClar")
 
@@ -7,7 +7,7 @@
 the given instrument definition does not exist."
 }
 
-\relative
+\relative c'
 {
   c4
   \instrumentSwitch "bassClar"
index 2e0198591f8e0c89611e24e9b8af2e0f6a6e3f2c..fc6542c8c27e68d8fd5e7d01c16b70f7e5708e54 100644 (file)
@@ -5,7 +5,7 @@
 properties for an in staff instrument switch. "
   }
 
-\version "2.16.0"
+\version "2.17.15"
 \addInstrumentDefinition #"bassClar"
   #`((instrumentTransposition . ,(ly:make-pitch -1 6 FLAT))
      (instrumentName . "bla") 
@@ -21,7 +21,7 @@ properties for an in staff instrument switch. "
   ragged-right = ##t
 }
 
-\relative
+\relative c'
 {
   c4
   \instrumentSwitch "bassClar"
index 44c499e277618ec89e82b99cf83398c3ae5e19a6..cef2ac4b52dd73500c9aab8d55ec243667dc1bee 100644 (file)
@@ -1,7 +1,8 @@
 
-\version "2.16.0"
+\version "2.17.6"
 \header { texidoc = "Each clef has its own accidental placing
-rules. "}
+rules, which can be adjusted using @code{sharp-positions}
+and @code{flat-positions}." }
 
 #(set-global-staff-size 16)
 
@@ -23,7 +24,20 @@ rules. "}
   \key cis \major cis \key ces \major ces
   \clef bass
   \key cis \major cis \key ces \major  ces
+  \break R1
+  \override Score.RehearsalMark.self-alignment-X = #LEFT
+  \override Score.RehearsalMark.font-size = #0
+  \mark "B-sharp on top"
+  \override Staff.KeySignature.sharp-positions = #'(6 0 1 2 3 4 5)
+  \override Staff.KeyCancellation.sharp-positions = #'(6 0 1 2 3 4 5)
+  \key cis \major R
+  \mark "Flats throughout the staff"
+  \override Staff.KeySignature.flat-positions = #'((-5 . 5))
+  \override Staff.KeyCancellation.flat-positions = #'((-5 . 5))
+  \key ces \major R
+  \clef tenor
+  \key cis \major cis \break \key ces \major ces
+  \clef treble
+  \key cis \major cis \key ces \major ces
 }
 
-
-
index 4d2dbd66ab33f0c40d56f50bdefdd0e1ca572dc4..4f46271696a00ccaf8336e4b96e08445997e8bbc 100644 (file)
@@ -5,10 +5,10 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 {
-  \override Staff.KeySignature #'padding-pairs
+  \override Staff.KeySignature.padding-pairs
     = #'((("accidentals.flat" . "accidentals.sharp.slashslash.stemstemstem") . 0.5))
     \set Staff.keySignature = #`((4 . ,FLAT) (6 . ,THREE-Q-SHARP) (2 . ,SEMI-FLAT))
   e2
index 28425c62e103001765012e9e6d6d5abad9848228..fdb11dddc19e1912a392991b62ef669cdff29a8d 100644 (file)
@@ -7,9 +7,9 @@
 <<
   \new Staff {
     \voiceOne
-    \key f\minor
+    \key f \minor
     f'4 f' f' f'
-    \key b\major
+    \key b \major
     e''8 e'' e''4 e''2
   }
   \new Staff {
index 207f93209509e97cb8f90ef2bb8114bd5ad33060..46079b264fb1bab9d783fe57304ff47a4c7829f8 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.15"
 \header{
 texidoc="
 Key signatures may appear on key changes, even without a barline.  
@@ -15,7 +15,7 @@ are created also on a clef change.
     ragged-right = ##T
 }
 
-\relative
+\relative c'
 {
     \set Staff.createKeyOnClefChange = ##t  
     \key bes \major c2
diff --git a/input/regression/kievan-notation.ly b/input/regression/kievan-notation.ly
new file mode 100644 (file)
index 0000000..fe78032
--- /dev/null
@@ -0,0 +1,19 @@
+\version "2.17.4"
+
+\header {
+  texidoc = "LilyPond typesets Kievan notation.
+"
+}
+
+\score {
+  <<
+    \new KievanVoice = "melody" \transpose c c' {
+      \cadenzaOn
+        c4 c8 c8[ d8] c4 c2 b,\longa
+       \bar "k"
+    }
+    \new Lyrics \lyricsto "melody" {
+      Го -- спо -- ди по -- ми -- луй.
+    }
+  >>
+}
index c756ec663041fff6ad2ef9c5909634a247e2e001..26d284654cc6a9d9342ede935d6739c6acf85967 100644 (file)
@@ -2,7 +2,7 @@
 
 \header {
   texidoc = "
-@code{\laissezVibrer} ties should also work on individual notes of a chord.
+@code{\\laissezVibrer} ties should also work on individual notes of a chord.
 " }
 
 \relative c' {
index 9d28c006b166de6240f31f4e20a37c2cea7b1448..af166fece5ce54d507b79902ec4263ec50cfe142 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
 
   texidoc = "The 'head-direction of a LaissezVibrerTieColumn should
@@ -8,7 +8,7 @@ be able to be set without causing a segmentation fault."
 
 \relative c'' {
   c2 \laissezVibrer
-  \once \override LaissezVibrerTieColumn #'head-direction = #RIGHT
+  \once \override LaissezVibrerTieColumn.head-direction = #RIGHT
   c \laissezVibrer
 }
 
index a693c2109ebb4901e6e18f99e2c79deab2a1fdf3..53d868c1f0bd71c999b5567b63368845916d804c 100644 (file)
@@ -10,7 +10,7 @@ They have fixed size. Their formatting can be tuned with
 "
   }
 
-\version "2.16.0"
+\version "2.17.6"
 \paper {
   ragged-right = ##t
 }
@@ -22,7 +22,7 @@ They have fixed size. Their formatting can be tuned with
   <c d f g>4.\laissezVibrer r8
 
   <c d e f>4\laissezVibrer r
-  \override LaissezVibrerTieColumn #'tie-configuration
+  \override LaissezVibrerTieColumn.tie-configuration
   = #'((-7 . -1)
        (-5 . -1)
        (-3 . 1)
index 05ca6d628b9953f7e6107dc39cf2378f8aaa1be4..80892c6c95c46ed085f57d7943d84e3c87d3bd1e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "
@@ -11,7 +11,7 @@ into context modifications.
 \score {
   \relative c' { cis cis cis cis }
   \layout {
-    \accidentalStyle "dodecaphonic"
+    \accidentalStyle dodecaphonic
   }
   \midi {
     \tempo 4 = 240
diff --git a/input/regression/ledger-lines-dynamics.ly b/input/regression/ledger-lines-dynamics.ly
new file mode 100644 (file)
index 0000000..a6e2d80
--- /dev/null
@@ -0,0 +1,10 @@
+\version "2.17.2"
+
+\header {
+  texidoc = "Dynamics and other outside staff objects avoid ledger lines.
+"
+}
+
+\relative c' {
+  f16\pp[ c d e ] r2. |
+}
index b36b52730d3f1828606c3c2b4b71628ada132566..9a9f16011979c22ff23a84e7a60272bfc4ec9afd 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "Ledger lines should appear at every other location
 for a variety of staves using both @code{line-count} and
@@ -16,36 +16,36 @@ notes = \relative c' {
 \new Staff {
   % upper and lower lines both odd
   #(define mylines '(-1 0 1))
-  \override Staff.StaffSymbol #'line-count = #(length mylines)
-  \override Staff.StaffSymbol #'line-positions = #mylines
+  \override Staff.StaffSymbol.line-count = #(length mylines)
+  \override Staff.StaffSymbol.line-positions = #mylines
   \notes
 }
 
 \new Staff {
   % upper and lower lines both even
   #(define mylines '(-2 0 2))
-  \override Staff.StaffSymbol #'line-positions = #mylines
+  \override Staff.StaffSymbol.line-positions = #mylines
 
-  \override Staff.StaffSymbol #'line-count = #(length mylines)
+  \override Staff.StaffSymbol.line-count = #(length mylines)
   \notes
 }
 
 \new Staff {
   % lower line odd, upper line even
   #(define mylines '(-1 0 2))
-  \override Staff.StaffSymbol #'line-positions = #mylines
-  \override Staff.StaffSymbol #'line-count = #(length mylines)
+  \override Staff.StaffSymbol.line-positions = #mylines
+  \override Staff.StaffSymbol.line-count = #(length mylines)
   \notes
 }
 
 \new Staff {
   % odd line count
-  \override Staff.StaffSymbol #'line-count = #5
+  \override Staff.StaffSymbol.line-count = #5
   \notes
 }
 
 \new Staff {
   % even line count
-  \override Staff.StaffSymbol #'line-count = #4
+  \override Staff.StaffSymbol.line-count = #4
   \notes
 }
index ebe1cb221dda16c4c098e0fd1fa14f60a12febd3..c87772419dd455a914c337282834c897bbabd9d4 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.10"
 
 \header {
     composer = "ARTHUR GRAY"
@@ -17,7 +17,7 @@ Nastiest piece of competition at
 http://www.orphee.com/comparison/study.html, see
 http://www.orphee.com/comparison/gray.pdf
 
-Lines that contain tweaks (10 currently, not counting reverts) are
+Lines that contain tweaks (3 currently, not counting reverts) are
 marked with %tweak
 
 possibly more impressive to render without tweaks?
@@ -54,7 +54,7 @@ treble = \new Voice \relative c''{
     cis''''4^\markup { \small \italic "m.g." }\arpeggio~
     \grace {
         cis8
-       \revert Stem #'direction
+       \revert Stem.direction
 
        a16[-5_( fis dis]
        \ottava #0
@@ -72,7 +72,7 @@ treble = \new Voice \relative c''{
     r8 <a' a,>8(\mf <gis gis,> <fis fis,>
 
     % \fingerUp
-    \override Fingering  #'direction = #UP
+    \override Fingering.direction = #UP
 
     <gis gis,> <fis fis,> e)-1-4-5 r
 
@@ -88,7 +88,7 @@ trebleTwo = \new Voice \relative c''{
     \stemDown
     \slurDown
     % \fingerDown
-    \override Fingering  #'direction = #DOWN
+    \override Fingering.direction = #DOWN
     s2
     | %1
     s1*2
@@ -98,10 +98,6 @@ trebleTwo = \new Voice \relative c''{
     <e, gis, e d!>2
     | %5
     s8 cis4. d4
-    % fair to count as one tweak?
-    \override Fingering #'add-stem-support = ##t %tweak
-    \override Fingering #'padding = #0.15
-    \override Fingering #'slur-padding = #0.1
     <cis e,>8[( <d,_3 b'_1>
     | %6
     <cis_1 a'_2>)] cis'4. d4
@@ -119,7 +115,7 @@ bass = \new Voice \relative c{
 
     r8. e,16(\f_2 <a a,>8[ <b b,>]
     | %2
-    %\override Staff.SustainPedalLineSpanner #'staff-padding = #5 %tweak
+    %\override Staff.SustainPedalLineSpanner.staff-padding = #5 %tweak
 
     <cis cis,>4\sustainOn
     \change Staff=treble
@@ -154,7 +150,7 @@ bass = \new Voice \relative c{
     >>
 
     \grace {
-       \override Flag  #'stroke-style = #"grace"
+       \override Flag.stroke-style = #"grace"
 
         s8
         s16 s s
@@ -163,7 +159,7 @@ bass = \new Voice \relative c{
        \clef bass
        <e,,, e,>32(\sustainOff\sustainOn
 
-       \revert Flag #'stroke-style
+       \revert Flag.stroke-style
     }
     <gis' e>2)
 
@@ -171,10 +167,10 @@ bass = \new Voice \relative c{
     \slurUp
 
     % \fingerDown
-    \override Fingering  #'direction = #DOWN
+    \override Fingering.direction = #DOWN
 
 
-    %\override Staff.SustainPedalLineSpanner #'staff-padding = #3.5 %tweak
+    %\override Staff.SustainPedalLineSpanner.staff-padding = #3.5 %tweak
     \set Staff.pedalSustainStyle = #'mixed
     %%a,8 e'[-5(<a-2 cis-3>])
 
@@ -208,7 +204,7 @@ bassTwo = \new Voice \relative c{
 }
 
 middleDynamics = {
-    %\override Dynamics.TextScript  #'padding = #-1 %tweak
+    %\override Dynamics.TextScript.padding = #-1 %tweak
     s2
     s1*2
     | %4
index 1232a90aac77e6cdb26a8674d73b21a4f2379696..cc59cbd152beacd23438231400e1eb9831656637 100644 (file)
@@ -12,23 +12,23 @@ the @code{TextScript} grob.
           
       }
 
-\version "2.16.0"
+\version "2.17.6"
 \layout { ragged-right = ##t }
 
 withPaddingA = #(define-music-function (parser location padding music) (number? ly:music?)
-                #{ \override TextScript #'padding = #padding
+                #{ \override TextScript.padding = #padding
                 $music 
-                \revert TextScript #'padding #})
+                \revert TextScript.padding #})
 
 withPaddingB = #(define-music-function (parser location padding music) (number? ly:music?)
-                #{ \override TextScript #'padding = #(* padding 2)
+                #{ \override TextScript.padding = #(* padding 2)
                 $music 
-                \revert TextScript #'padding #})
+                \revert TextScript.padding #})
 
 withPaddingC = #(define-music-function (parser location padding music) (number? ly:music?)
-                #{ \override TextScript #'padding = #(+ 1 (* padding 2))
+                #{ \override TextScript.padding = #(+ 1 (* padding 2))
                    $music 
-                   \revert TextScript #'padding #})
+                   \revert TextScript.padding #})
 
 {
     c'^"1"
index 3f27361283c00b4815715fd08857a5e5205399d7..935f068db7c392386cdc0b746f9702313bc95770 100644 (file)
@@ -7,17 +7,8 @@ include $(depth)/make/stepmake.make
 
 TITLE=lilypond-book Test Suite
 
-SUBDIRS=include
-
 COLLATED_FILES = $(OUT_FILES)
 
-EXTRA_DIST_FILES = include.mxl
-EXTRA_DIST_FILES += include.xml
-EXTRA_DIST_FILES += $(call src-wildcard,*.ly)
-EXTRA_DIST_FILES += $(call src-wildcard,*.ily)
-EXTRA_DIST_FILES += $(call src-wildcard,*.tely)
-EXTRA_DIST_FILES += $(call src-wildcard,*.itely)
-
 OUT_TEXI_FILES += ${TEXI_FILES:%.texi=$(outdir)/%.info}
 OUT_TEXI_FILES += ${TEXI_FILES:%.texi=$(outdir)/%.pdf}
 OUT_TEXINFO_FILES += ${TEXINFO_FILES:%.texinfo=$(outdir)/%.info}
diff --git a/input/regression/lilypond-book/include/GNUmakefile b/input/regression/lilypond-book/include/GNUmakefile
deleted file mode 100644 (file)
index 0b6e885..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-depth = ../../../..
-
-STEPMAKE_TEMPLATES=
-LOCALSTEPMAKE_TEMPLATES=
-
-include $(depth)/make/stepmake.make
-
-EXTRA_DIST_FILES += $(call src-wildcard,*.ly)
-EXTRA_DIST_FILES += $(call src-wildcard,*.ily)
-EXTRA_DIST_FILES += $(call src-wildcard,*.tely)
-EXTRA_DIST_FILES += $(call src-wildcard,*.itely)
diff --git a/input/regression/lilypond-book/include/def.tex b/input/regression/lilypond-book/include/def.tex
new file mode 100644 (file)
index 0000000..e9879a2
--- /dev/null
@@ -0,0 +1 @@
+\def\signature{The LilyPond Team}
index 48c94394667fe6b59c78c08ea1bdbdcf32a8dcd2..b383544d4e8d01f4774bbef15756ff5e0c837384 100644 (file)
@@ -1 +1,2 @@
+\version "2.16.0"
 myVar = { a b c a }
diff --git a/input/regression/lilypond-book/tex-include-preamble.lytex b/input/regression/lilypond-book/tex-include-preamble.lytex
new file mode 100644 (file)
index 0000000..a3815f2
--- /dev/null
@@ -0,0 +1,20 @@
+\documentclass{article}
+
+\input{include/def.tex}
+
+\begin{document}
+
+If the include file in the preamble is not available,
+the automatic line width detection would fail and the
+snippet below would have only one bar per line.
+
+\begin{lilypond}
+\relative c' {
+  a d a c e d a c
+  f g d e a d a c
+}
+\end{lilypond}
+
+Brought to you by \signature.
+
+\end{document}
index affd3a7ab082319df90f09f616bc2a9373854817..1b3bccc8a3dd41ec84f69b70d7aab8e0a38b9a8a 100644 (file)
@@ -2,26 +2,26 @@
   texidoc = "Arrows can be applied to text-spanners and line-spanners (such as the Glissando)"
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \paper {
   ragged-right = ##t
 }
 
 \relative c'' {
-  \override TextSpanner #'bound-padding = #1.0
-  \override TextSpanner #'style = #'line
-  \override TextSpanner #'(bound-details right arrow) = ##t
-  \override TextSpanner #'(bound-details left text) = #"fof"
-  \override TextSpanner #'(bound-details right text) = #"gag"
-  \override TextSpanner #'(bound-details right padding) = #0.6
+  \override TextSpanner.bound-padding = #1.0
+  \override TextSpanner.style = #'line
+  \override TextSpanner.bound-details.right.arrow = ##t
+  \override TextSpanner.bound-details.left.text = #"fof"
+  \override TextSpanner.bound-details.right.text = #"gag"
+  \override TextSpanner.bound-details.right.padding = #0.6
 
-  \override TextSpanner #'(bound-details right stencil-align-dir-y) = #CENTER
-  \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
+  \override TextSpanner.bound-details.right.stencil-align-dir-y = #CENTER
+  \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
   
-  \override Glissando #'(bound-details right arrow) = ##t
-  \override Glissando #'arrow-length = #0.5
-  \override Glissando #'arrow-width = #0.25
+  \override Glissando.bound-details.right.arrow = ##t
+  \override Glissando.arrow-length = #0.5
+  \override Glissando.arrow-width = #0.25
   
   a8\startTextSpan gis8 a4 b4\glissando
   b,4 | g' c\stopTextSpan c
index a3542cb43ee736be328028f78f9b9c7918adb284..c572d2375ee08f02c379fd997e8200a97d5f346a 100644 (file)
@@ -5,11 +5,11 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \relative c' {
-  \override Staff.OttavaBracket #'dash-period = #0.1
-  \override Score.OttavaBracket #'dash-fraction = #1
+  \override Staff.OttavaBracket.dash-period = #0.1
+  \override Score.OttavaBracket.dash-fraction = #1
 
   \ottava #1
   c4 c
index 3f63d32b5d8cf4cbd82f3e875305f1cbc621b09b..3302f88cdf15a3ee1d81e825ecb4cf8bbff9efdb 100644 (file)
@@ -5,21 +5,21 @@ starts and ends on a full dash. "
 
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
 \layout {
   indent = 0.0\mm
   ragged-right = ##T
 }
 
-\relative <<
+\relative c' <<
   \new Staff {
     \crescTextCresc
     c1_\< c c1\!
   }
   \new Staff {
-    \override DynamicTextSpanner #'dash-period = #3
-    \override DynamicTextSpanner #'dash-fraction = #0.3
+    \override DynamicTextSpanner.dash-period = #3
+    \override DynamicTextSpanner.dash-fraction = #0.3
     \crescTextCresc
     c1^\< c c1\!
   }
index 9d0a28137d91834a1b0122f9d6a77f68ea50068c..ab35aa1d95923406f66fcaa45351dc531c807a57 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Setting @code{'zigzag} style for spanners does not
@@ -10,10 +10,10 @@ the second markup and default trillspanner.
 
 \relative c' {
   c1^"text"
-  \override TrillSpanner #'style = #'zigzag
+  \override TrillSpanner.style = #'zigzag
   c1\startTrillSpan
   c2^\stopTrillSpan c^"text"
-  \revert TrillSpanner #'style
+  \revert TrillSpanner.style
   c1\startTrillSpan
   c1^\stopTrillSpan
 }
index 31f284e82f7a9d62711fe63d7ae77c5bf38c89b6..2d77edd91d3ff5fe9cbe393b6b73ad7e61320510 100644 (file)
@@ -1,24 +1,24 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Cover all line styles available."  
 }
 
 \relative c'' {
-  \override Glissando #'breakable = ##t
+  \override Glissando.breakable = ##t
 
   s2
   d2 \glissando d'2
-  \override Glissando #'style = #'dashed-line
+  \override Glissando.style = #'dashed-line
   d,2 \glissando d'2
-  \override Glissando #'style = #'dotted-line
+  \override Glissando.style = #'dotted-line
   d,2 \glissando d'2
   
-  \override Glissando #'style = #'zigzag
+  \override Glissando.style = #'zigzag
   d,2 \glissando d'2
-  \override Glissando #'style = #'trill
+  \override Glissando.style = #'trill
   d,2 \glissando d'2
   
-  \override Glissando #'style = #'none
+  \override Glissando.style = #'none
   d,2 \glissando d'2
 }
index 4236de7c86d13132e55b62c5e96c4a589f96aa14..d084e8f2bd3615aa76a5c632496055f0646c516a 100644 (file)
@@ -2,15 +2,15 @@
 {
 texidoc = "switching voices in the middle of the lyrics is possible using @code{lyricsto}."
   }
-\version "2.16.0"
+\version "2.17.15"
 
 <<
-  \relative \new Voice = "lahlah" {
+  \relative c' \new Voice = "lahlah" {
     c4
     <<
       \new Voice = "alternative" {
         \voiceOne
-       \override NoteColumn #'force-hshift = #-3
+       \override NoteColumn.force-hshift = #-3
        a'4 
       } 
       { \voiceTwo
index d78a8a86b4ab164f1ec6eb684ea9c3554e37dff9..ccf444b6821cb519507e369938ce8133ff2d7af9 100644 (file)
@@ -5,18 +5,18 @@ if the switch occurs together with context instantiation."
 
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
 <<
-  \relative \new Voice = "lahlah" {
+  \relative c' \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     <<
       \new Voice = "alternative" {
         \voiceOne
-        \times 2/3 {
+        \tuplet 3/2 {
          %% show associations clearly.
-          \override NoteColumn #'force-hshift = #-3
+          \override NoteColumn.force-hshift = #-3
           r8 f g
         }
       }
index 9d0943f390b19cc5a2cb3487adc9dbc49b904108..cedcb39d2d2e5fc2350fa3455384630f238ff459 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.11"
 
 \header{
 
@@ -19,7 +19,7 @@ lyrics ignore any other rhythms in the piece."
 
 m = \relative c'' {
     \autoBeamOff
-    g8( a)  r8 \times 2/3 { g'8( f e) } r8 \grace {  d16[ c b] } e4
+    g8( a)  r8 \tuplet 3/2 { g'8( f e) } r8 \grace {  d16[ c b] } e4
     \textLengthOff
     d8.^"melisma"      \melisma c16
     \melismaEnd
index cb34df9dcb9a4859e6b890668f42327aca4b3057..1100f625e9ed0969dee6b9a220180b824fee993d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.28"
 
 \header {
   texidoc="
@@ -8,7 +8,7 @@ expected also for syllables starting under grace notes.
 }
 
 \relative c' {
-  c2 \grace { c16([ d e f] } g2)
+  c2 \grace { c16( d e f } g2)
   f1
 }
 \addlyrics {
index 9428c029ab418baf6bfde09a599d4671731e0bc2..6a45c767d9381b223f61670335728a841eefc57c 100644 (file)
@@ -14,7 +14,7 @@ effect of a setting is delayed is one syllable."
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \layout {
   ragged-right = ##t
@@ -35,10 +35,10 @@ effect of a setting is delayed is one syllable."
   syl -- lab word
 
   %% increase minimum-distance: forces more space, so hyphen reappears
-  \override LyricHyphen #'minimum-distance = #1.0
+  \override LyricHyphen.minimum-distance = #1.0
   syl -- lab word
 
   %% minimum-distance 0 for LyricSpace: this places words next to each other. 
-  \override LyricSpace #'minimum-distance = #0.0
+  \override LyricSpace.minimum-distance = #0.0
   syl -- lab word
 }
index bbff24560736b9c520496bed92cab1272b25effd..7fcc3a52588a1e4de02f553466ae81ab1c628e19 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
     texidoc = "In lyrics, hyphens may be used."
 }
@@ -9,7 +9,7 @@
 
 \new Voice { c' (c') c'( c') }
 \addlyrics {
-  \override Lyrics . LyricSpace #'minimum-distance = #5.0
+  \override Lyrics.LyricSpace.minimum-distance = #5.0
   a -- b x -- y
 }
 
index ae46077db431b23767728a37b02c85a0fd015115..b75c2b0377405e9e0ce61e53ae4d234619a4d8b4 100644 (file)
@@ -1,7 +1,7 @@
 \version "2.16.0"
 \header {
   texidoc = "A syllable aligned with a melisma delimited with
-@code{\melisma} and @code{\melismaEnd} should be left-aligned.
+@code{\\melisma} and @code{\\melismaEnd} should be left-aligned.
 "
 }
 
index aed4b8aae29ae356db92fc11c6956e1f08f636a3..ccaad3d46931e6ae3713344eecef11f8daedc5e2 100644 (file)
@@ -1,9 +1,11 @@
 \header
 {
-  texidoc = "The @code{\\tweak} function can be used in Lyrics."
+  texidoc = "The @code{\\tweak} function can be used in Lyrics.  Where
+confusion of lyric words with grob names is possible, explicit use of
+@code{\\markup} can be used for resolving the ambiguity."
 }
 
-\version "2.16.0"
+\version "2.17.6"
 \paper {
   ragged-right = ##t
 }
@@ -11,8 +13,8 @@
 \new Lyrics \lyricmode
 {
   \markup \raise #1 \rotate #30 One 4
-  \tweak #'extra-offset #'(0 . 2) fish,
+  \tweak extra-offset #'(0 . 2) \markup fish,
   \markup \raise #1 \rotate #-30 two fish,
-  \tweak #'color #red red fish,
-  \tweak #'color #blue blue fish.
+  \tweak color #red \markup red fish,
+  \tweak color #blue \markup blue fish.
 }
index c559bedebea0c8ad18ddd607af5c9ba9a11da9c3..633e041bb6fb1e14404a847fdb2d8b0a6b59e638 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header{
 texidoc="
@@ -13,7 +13,7 @@ lyrics do not collide with barlines.
 
 \relative c'' <<
     \new Voice = "a"{
-       b1 \bar "|:" b1 \bar ":|" b1 \bar "|."
+       b1 \bar ".|:" b1 \bar ":|." b1 \bar "|."
     }
     \new Lyrics \with {
        \consists "Bar_engraver"
@@ -31,9 +31,9 @@ lyrics do not collide with barlines.
 \layout {
   \context {
     \Lyrics
-      \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'minimum-distance = #4.2
-      \override LyricText #'Y-offset = #-0.7
-      \override BarLine #'bar-extent = #'(-2 . 2)
+      \override VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance = #4.2
+      \override LyricText.Y-offset = #-0.7
+      \override BarLine.bar-extent = #'(-2 . 2)
   }
 }
 
index ab2491d4cad5f6ccfda795751e1f00be1785edea..ec3dfe2fc3c9ea56560d5845ad0e6a7d2bb98741 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.28"
 
 \header {
   texidoc="
@@ -9,7 +9,7 @@ assigned to grace notes.
 
 \relative c' {
   f4 \appoggiatura a32 b4
-  \grace { f16[ a16] } b2
+  \grace { f16 a16 } b2
   \afterGrace b2 { f16[ a16] }
   \appoggiatura a32 b4
   \acciaccatura a8 b4
index cb3fe3e868ed9de2ead2e456d506315a37c1bff9..30d2535c59be09e640d3e2379e819a6a930026a4 100644 (file)
@@ -6,9 +6,9 @@ paper column is very wide."
  
 \layout{ ragged-right = ##t }
 
-\version "2.16.0"
+\version "2.17.6"
 <<
-  \override Score.PaperColumn #'keep-inside-line = ##f
+  \override Score.PaperColumn.keep-inside-line = ##f
   \new Staff \relative c' {
     \key aes \major
     \context Voice = "1" { 
index 66acd5b324b59d71936b378d13a30d757229c034..acea89d45b15aff71ba4f1fdee7bab6ae3d0ed3b 100644 (file)
@@ -1,5 +1,6 @@
 \header {
-    texidoc = "Lyrics are not lowered despite the presence of an octavation 8."
+    texidoc = "Lyrics are not lowered despite the presence of
+a clef transposition (8 below the clef)."
 }
 
 \version "2.16.0"
diff --git a/input/regression/make-relative-copies.ly b/input/regression/make-relative-copies.ly
new file mode 100644 (file)
index 0000000..0947e72
--- /dev/null
@@ -0,0 +1,31 @@
+\version "2.17.97"
+
+\header {
+  texidoc = "@code{make-relative} has to copy its argument expressions
+in case the generated music expression is getting copied and modified.
+
+The code here defines a @code{\\reltranspose} function working inside
+of @code{\\relative} and uses it.  Both staves should appear
+identical."
+}
+
+\layout {
+  ragged-right = ##t
+}
+
+reltranspose =
+#(define-music-function (parser location from to music)
+  (ly:pitch? ly:pitch? ly:music?)
+  (make-relative (music) music
+   #{ \transpose #from #to $music #}))
+
+mus =
+\reltranspose c g {
+  \partial 4. c8 e g |
+  c2 r8 c, e g c1 | \bar "|."
+}
+
+<<
+  \new Staff \relative \mus
+  \new Staff \relative \mus
+>>
diff --git a/input/regression/make-relative-music.ly b/input/regression/make-relative-music.ly
new file mode 100644 (file)
index 0000000..25941d2
--- /dev/null
@@ -0,0 +1,32 @@
+\version "2.17.97"
+
+\header {
+  texidoc = "@code{make-relative} can make relativization on music
+function calls behave as one would expect from looking at the
+function's arguments rather than at the actually resulting
+expressions.  This regtest defines an example function
+@code{\\withOctave} which works equally well inside and outside of
+@code{\\relative}." 
+}
+
+withOctave =
+#(define-music-function (parser location music)
+  (ly:music?)
+  (make-relative
+   (music) music
+   #{ \context Bottom << $music \transpose c c' $music >> #}))
+
+mus = {
+  \partial 4. c'8 e g |
+  c2 e,4 g |
+  c,8 c' b a <g d'> <f c'> <e b'> <d a'> |
+  <c g'>1 | \bar "|."
+}
+
+<<
+  \relative \new Staff { <>^"original" \mus }
+  \relative \new Staff { <>^\markup \typewriter "\\relative \\withOctave"
+                        \withOctave \mus }
+  \new Staff { <>^\markup \typewriter "\\withOctave \\relative"
+              \withOctave \relative \mus }
+>>
diff --git a/input/regression/make-relative.ly b/input/regression/make-relative.ly
new file mode 100644 (file)
index 0000000..362a283
--- /dev/null
@@ -0,0 +1,82 @@
+\version "2.17.97"
+\header {
+
+  texidoc = "@code{make-relative} is a Scheme utility macro mainly
+useful for creating music functions accepting pitches as arguments.
+Its purpose is to make music functions taking pitch arguments for
+producing complex music fragments integrate nicely within a
+@code{\\relative} section.  This regtest typesets a short music
+fragment twice, once without using @code{\\relative}, once using it.
+The fragment should appear identical in both cases."
+
+}
+
+\layout { ragged-right= ##t }
+
+ph =
+#(define-music-function (parser location p1 p2 p3 p4 p5)
+  (ly:pitch? ly:pitch? ly:pitch? ly:pitch? ly:pitch?)
+  (make-relative (p1 p2 p3 p4 p5) (make-event-chord (list p1 p2 p3 p4 p5))
+   #{
+     \repeat unfold 2 { $p1 2 } |
+     \repeat unfold 2 { r16 $p2 8. ~ $p2 4 } |
+     \repeat unfold 2 { r8 $p3 16 $p4 $p5 $p3 $p4 $p5 } |
+   #}))
+
+\parallelMusic #'(low middle high)
+{
+  \ph c' e' g' c'' e''
+  R1*7 | \skip 1*7 | \oneVoice R1*7 \voiceOne |
+  \ph a c' e' g' c''
+  \voiceTwo | \change Staff = "down" \voiceOne | \oneVoice |
+  \ph d a d' fis' c''
+  \oneVoice R1*21 \voiceTwo | \skip 1*21 | R1*21 |
+  \ph c, c g bes e'
+  c,2~ c, | r16 c8. ~ c4 ~ c2
+  | r8 f16 a c' f' c' a c' a f a f d f d |
+  c,2~ c, | r16 b,8. ~ b,4 ~ b,2
+  | r8 g'16 b' d'' f'' d'' b' d'' b' g' b' d' f' e' d' |
+  c,1\fermata | c1 | <e' g' c''>1\fermata \bar "|." |
+}
+
+\score {
+  \new PianoStaff <<
+    \compressFullBarRests
+    \new Staff = "up" {
+      << \high \\ \middle >>
+    }
+    \new Staff = "down" {
+      \clef bass
+      \low
+    }
+  >>
+}
+
+\parallelMusic #'(low middle high)
+\relative c' {
+  \ph c e g c e
+  R1*7 | \skip 1*7 | \oneVoice R1*7 \voiceOne |
+  \ph a c e g c
+  \voiceTwo | \change Staff = "down" \voiceOne | \oneVoice |
+  \ph d, a' d fis c'
+  \oneVoice R1*21 \voiceTwo | \skip 1*21 | R1*21 |
+  \ph c, c' g' bes e
+  c2~ c | r16 c'8. ~ c4 ~ c2
+  | r8 f16 a c f c' a c a f a f d f d |
+  c,,2~ c | r16 b'8. ~ b4 ~ b2
+  | r8 g'16 b d f d b d b g b d f e d |
+  c,,1\fermata | c'1 | <e' g c>1\fermata \bar "|." |
+}
+
+\score {
+  \new PianoStaff <<
+    \compressFullBarRests
+    \new Staff = "up" {
+      << \high \\ \middle >>
+    }
+    \new Staff = "down" {
+      \clef bass
+      \low
+    }
+  >>
+}
index bb13a4cadb9ddbb1cc5572cb13db3ff8b07538d5..c161af8cc6a2f676620a98bf2bc735f5c12c5511 100644 (file)
@@ -1,14 +1,10 @@
 \version "2.16.0"
 
 \header {
-  texidoc = "Text markup using @code{center-align} or @code{center-column} shall
+  texidoc = "Text markup using @code{center-column} shall
 still reserve space for its whole width and not overwrite the previous stencil."
 }
 
-\markup{\left-align { AAA BB }}
-\markup{\center-align { AAA BB }}
-\markup{\right-align { AAA BB }}
-
 % Here the two center-columns should not collide with the +
 \markup \line {
   \center-column { \line {XXX} \line {Y} }
index f3ececfd809bb81556294603b92eaa3662ffe61a..56506da8e1c645ba91faf38992eaf395ed9602dd 100644 (file)
@@ -5,7 +5,7 @@
 
 }
 \paper { ragged-right = ##T }
-\version "2.16.0"
+\version "2.17.6"
 
 \score{
   {
@@ -40,7 +40,7 @@
   \layout {
     \context {
       \Score
-      \override PaperColumn #'keep-inside-line = ##f
+      \override PaperColumn.keep-inside-line = ##f
     }
   }
 }
diff --git a/input/regression/markup-frame-text.ly b/input/regression/markup-frame-text.ly
new file mode 100644 (file)
index 0000000..b24ab95
--- /dev/null
@@ -0,0 +1,15 @@
+\version "2.17.23"
+
+\header {
+
+  texidoc = "Text is framed properly with @code{\\box},
+@code{\\circle}, @code{\\oval} and @code{\\ellipse}"
+
+}
+
+\markup \column {
+       \line { \box { text in boxes "1" "12" "123" } }
+       \line { \circle { text in circles "1" "12" "123" } }
+       \line { \oval { text in ovals "1" "12" "123" } }
+       \line { \ellipse { text in ellipses "1" "12" "123" } }
+}
diff --git a/input/regression/markup-line-styles.ly b/input/regression/markup-line-styles.ly
new file mode 100644 (file)
index 0000000..5cbf5ed
--- /dev/null
@@ -0,0 +1,60 @@
+\version "2.17.10"
+
+\header {
+  texidoc = "The markup-commands @code{\\draw-dashed-line} and
+  @code{\\draw-dotted-line} should print the same visual length as
+  @code{\\draw-line}."
+}
+
+test =
+#(define-scheme-function (parser location x-nmbr y-nmbr)(number? number?)
+ (let* ((lst (map
+               (lambda (x)
+                 (let* ((x-lngth (if (positive? x-nmbr)
+                                     (* x 0.75)
+                                     (* x -0.75)))
+                        (dest (cons x-lngth y-nmbr))
+                        (x-strg (number->string x-lngth))
+                        (y-strg (number->string y-nmbr))
+                        (txt-1 (markup
+                               #:concat (
+                                   " \\draw-dotted-line #'("
+                                   x-strg
+                                   " . "
+                                   y-strg
+                                   ")")))
+                        (txt-2 (markup
+                               #:concat (
+                                   " \\draw-dashed-line #'("
+                                   x-strg
+                                   " . "
+                                   y-strg
+                                   ")")))
+                        (txt-3 (markup
+                               #:concat (
+                                   " \\draw-line #'("
+                                   x-strg
+                                   " . "
+                                   y-strg
+                                   ")"))))
+                    (markup
+                       #:override '(baseline-skip . 0)
+                       #:left-column
+                         (
+                         ;; dotted-line
+                         #:line
+                           ((#:draw-dotted-line dest)
+                             #:vcenter (#:fontsize -4 txt-1))
+                         ;; dashed-line
+                         #:line
+                           ((#:draw-dashed-line dest)
+                             #:vcenter (#:fontsize -4 txt-2))
+                         ;; default solid-line:
+                         #:line
+                           ((#:draw-line dest)
+                             #:vcenter (#:fontsize -4 txt-3))
+                         #:vspace 0.5))))
+                  (iota (abs x-nmbr)))))
+        lst))
+
+\test #15 #0
index 274e4f89b7a4f0bb6c51eb16a1e694ec9378806e..c226ae21dee18252594d4259e8a75c8c557a80a4 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
 
@@ -8,9 +8,9 @@
 }
 
 \new Staff {
-  \override TextSpanner #'bound-details #'right #'text =
+  \override TextSpanner.bound-details.right.text =
         #(markup #:draw-line '(0 . -1))
-  \override TextSpanner #'thickness = #2
+  \override TextSpanner.thickness = #2
   c'4 \startTextSpan
   c'4 \stopTextSpan
 }
index 24f8545c60edeff2d75ddfa770b42ab3e126d3ee..d40aee871898772fbe3d72ac5b7f4d8ca984df2c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The @code{'style} property from grobs such as
@@ -8,12 +8,12 @@ the default note head style for @code{\\note} and
 }
 
 \relative c' {
-  \override Staff.TimeSignature #'stencil =
+  \override Staff.TimeSignature.stencil =
     #(lambda (grob)
        (grob-interpret-markup grob
                               (markup #:override '(baseline-skip . 0)
                                       #:column (#:number "2" #:note "2" DOWN))))
-  \override TextSpanner #'(bound-details left text) =
+  \override TextSpanner.bound-details.left.text =
     \markup { \note #"16" #UP }
   c1\startTextSpan
   c1\stopTextSpan
index bb1406b4cc3185c6eb1b2a81fe63a4c5f02d34cb..f5fbc9b60d2671170f61920fbf415b857e78e8b7 100644 (file)
@@ -1,11 +1,20 @@
-\version "2.16.0"
+\version "2.17.19"
 
 \header {
   texidoc = "@code{\\note-by-number} and @code{\\note} support
-all note head styles."
+all note head styles and straight flags."
 }
 
-#(define-markup-command (show-note-styles layout props) ()
+#(define styles-list
+  '(default altdefault
+    baroque neomensural
+    mensural petrucci
+    harmonic harmonic-black
+    harmonic-mixed diamond
+    cross xcircle
+    triangle slash))
+
+#(define-markup-command (show-note-styles layout props styles) (list?)
    (interpret-markup layout props
                      (make-column-markup
                       (map
@@ -23,16 +32,41 @@ all note head styles."
                                (lambda (dur-log)
                                  (make-note-by-number-markup
                                   dur-log 0 UP))
-                               '(-3 -2 -1 0 1 2))))))))
-                       '(default altdefault
-                          baroque neomensural
-                          mensural petrucci
-                          harmonic harmonic-black
-                          harmonic-mixed diamond
-                          cross xcircle
-                          triangle slash)))))
+                               '(-3 -2 -1 0 1 2 3 4 5 6))))))))
+                       styles))))
+
+\markup {
+  \column {
+    \combine \null \vspace #1
+    \underline "Note-head-styles:"
+    \override #'(baseline-skip . 6)
+    \show-note-styles #styles-list
+  }
+}
+
+\markup {
+  \column {
+    \combine \null \vspace #1
+    \underline "Modern-straight-flag:"
+    \override #'(flag-style . modern-straight-flag)
+    \show-note-styles #'(default)
+  }
+}
+
+\markup {
+  \column {
+    \combine \null \vspace #1
+    \underline "Old-straight-flag:"
+    \override #'(flag-style . old-straight-flag)
+    \show-note-styles #'(default)
+  }
+}
 
 \markup {
-  \override #'(baseline-skip . 6)
-  \show-note-styles
+  \column {
+    \combine \null \vspace #1
+    \underline "Flat-flag:"
+    \override #'(flag-style . flat-flag)
+    \show-note-styles #'(default)
+  }
 }
index 1fece8436e4f3413669c5610d86ecb68e9244e30..c600fab42f9d83e08242ea82fe5d4cecf8b96a56 100644 (file)
@@ -3,64 +3,71 @@
   texidoc = "The note markup function may be used to make metronome
  markings. It works for a variety of flag, dot and duration settings."
 }
-\version "2.16.0"
+\version "2.17.12"
 
-\score {
-  \relative c''
-  {
-    c4^\markup {
-      \note #"1" #1
-      \note #"2" #1
-      \note #"4" #1
-      \note #"8" #1
-      \note #"16" #1
-      \note #"32" #1
-      \note #"64" #1
+mrkp =
+\markup {
+   \note #"1" #1
+   \note #"2" #1
+   \note #"4" #1
+   \note #"8" #1
+   \note #"16" #1
+   \note #"32" #1
+   \note #"64" #1
 
-      \note #"1" #-1
-      \note #"2" #-1
-      \note #"4" #-1
-      \note #"8" #-1
-      \note #"16" #-1
-      \note #"32" #-1
-      \note #"64" #-1
+   \note #"1" #-1
+   \note #"2" #-1
+   \note #"4" #-1
+   \note #"8" #-1
+   \note #"16" #-1
+   \note #"32" #-1
+   \note #"64" #-1
 
-      \note #"1." #-1
-      \note #"2." #-1
-      \note #"4." #-1
-      \note #"8." #-1
-      \note #"16." #-1
-      \note #"32." #-1
-      \note #"64." #-1
+   \note #"1." #-1
+   \note #"2." #-1
+   \note #"4." #-1
+   \note #"8." #-1
+   \note #"16." #-1
+   \note #"32." #-1
+   \note #"64." #-1
 
-      \note #"1." #1
-      \note #"2." #1
-      \note #"4." #1
-      \note #"8." #1
-      \note #"16." #1
-      \note #"32." #1
-      \note #"64." #1
+   \note #"1." #1
+   \note #"2." #1
+   \note #"4." #1
+   \note #"8." #1
+   \note #"16." #1
+   \note #"32." #1
+   \note #"64." #1
 
-      \override #'(style . cross)
-      { \note-by-number #2 #1 #1
-        \note-by-number #2 #1 #-1
-      }
-      \override #'(style . triangle)
-      { \note-by-number #2 #1 #1
-        \note-by-number #2 #1 #-1
-      }
+   \override #'(style . cross)
+   { \note-by-number #2 #1 #1
+     \note-by-number #2 #1 #-1
+   }
+   \override #'(style . triangle)
+   { \note-by-number #2 #1 #1
+     \note-by-number #2 #1 #-1
+   }
+}
 
+\score {
+  \relative c''
+  {
+    c4^\markup {
+            \column {
+                    \mrkp
+                    \override #'(style . mensural) \mrkp
+                    \override #'(flag-style . modern-straight-flag) \mrkp
+                    \override #'(flag-style . old-straight-flag) \mrkp
+                    \override #'(flag-style . flat-flag) \mrkp
+            }
     }
-
-    \override NoteHead #'style = #'triangle
+    \override NoteHead.style = #'triangle
     c4 a
   }
-
   \layout {
     \context {
       \Score
-      \override PaperColumn #'keep-inside-line = ##f
+      \override PaperColumn.keep-inside-line = ##f
     }
   }
-
 }
diff --git a/input/regression/markup-rest-styles.ly b/input/regression/markup-rest-styles.ly
new file mode 100644 (file)
index 0000000..5ed8262
--- /dev/null
@@ -0,0 +1,41 @@
+\version "2.17.9"
+
+\header {
+  texidoc = "@code{\\rest-by-number} and @code{\\rest} support
+all rest styles."
+}
+
+showRestStyles =
+#(define-scheme-function (parser location)()
+   (make-override-markup
+     (cons 'baseline-skip 7)
+     (make-column-markup
+       (map
+         (lambda (style)
+           (make-line-markup
+             (list
+               (make-pad-to-box-markup
+                 '(0 . 20) '(0 . 0)
+                 (symbol->string style))
+               (make-override-markup
+                 (cons 'line-width 60)
+                 (make-override-markup
+                   (cons 'style style)
+                   (make-fill-line-markup
+                     (map
+                       (lambda (dur-log)
+                         (make-rest-by-number-markup
+                          dur-log 0))
+                       '(-3 -2 -1 0 1 2 3 4 5 6 7))))))))
+         '(default
+           mensural
+           neomensural
+           classical
+           baroque
+           altdefault
+           petrucci
+           blackpetrucci
+           semipetrucci
+           kievan)))))
+
+\showRestStyles
diff --git a/input/regression/markup-rest.ly b/input/regression/markup-rest.ly
new file mode 100644 (file)
index 0000000..3c4895d
--- /dev/null
@@ -0,0 +1,90 @@
+\version "2.17.19"
+
+\header {
+  texidoc = "The rest markup function works for a variety of style, dot and
+duration settings."
+}
+
+showSimpleRest =
+#(define-scheme-function (parser location dots) (string?)
+   (make-override-markup
+     (cons 'baseline-skip 7)
+     (make-column-markup
+       (map
+         (lambda (style)
+                 (make-line-markup
+                   (list
+                     (make-pad-to-box-markup
+                       '(0 . 20) '(0 . 0)
+                        (symbol->string style))
+                     (make-override-markup
+                       (cons 'line-width 60)
+                       (make-override-markup
+                         (cons 'style style)
+                         (make-fill-line-markup
+                           (map
+                             (lambda (duration)
+                                     (make-rest-markup
+                                       (if (string? duration)
+                                           duration
+                                           (string-append
+                                             (number->string (expt 2 duration))
+                                             dots))))
+                             (append
+                               '("maxima" "longa" "breve")
+                               (iota 8)))))))))
+         '(default
+           mensural
+           neomensural
+           classical
+           baroque
+           altdefault
+           petrucci
+           blackpetrucci
+           semipetrucci
+           kievan)))))
+
+showMultiMeasureRests =
+#(define-scheme-function (parser location)()
+   (make-override-markup
+     (cons 'baseline-skip 7)
+     (make-column-markup
+       (map
+         (lambda (style)
+                 (make-line-markup
+                   (list
+                     (make-pad-to-box-markup
+                        '(0 . 20) '(0 . 0)
+                         (symbol->string style))
+                     (make-override-markup
+                       (cons 'line-width 80)
+                       (make-override-markup
+                         (cons 'style style)
+                         (make-fill-line-markup
+                           (map
+                             (lambda (duration)
+                               (make-line-markup
+                                 (list
+                                   (make-override-markup
+                                      (cons 'multi-measure-rest #t)
+                                      (make-rest-markup
+                                         (number->string duration))))))
+                             (cdr (iota 13)))))))))
+         '(default
+           mensural
+           neomensural
+           classical
+           baroque
+           altdefault
+           petrucci
+           blackpetrucci
+           semipetrucci
+           kievan)))))
+
+\markup \column { \bold "Simple Rests" \combine \null \vspace #0.1 }
+
+\showSimpleRest #"."
+
+\markup \column { \combine \null \vspace #0.1 \bold "MultiMeasureRests" \combine \null \vspace #0.1 }
+
+\showMultiMeasureRests
index 71860fb49fdb37ed3c1a55d88f4fe8db61dcdcf0..ffac9f2e68998f67ec017088cc231a560b4cb3bc 100644 (file)
@@ -2,7 +2,7 @@
     texidoc = "Use \\score block as markup command."
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 tuning = \markup {
     \score {
@@ -24,8 +24,8 @@ tuning = \markup {
 
 \relative c'' {
     \time 4/8
-    \times 2/3 { c8 d e } \times 2/3 {c d e}
-    \times 2/3 { c8 d e } \times 2/3 {c d e}
+    \tuplet 3/2 { c8 d e } \tuplet 3/2 {c d e}
+    \tuplet 3/2 { c8 d e } \tuplet 3/2 {c d e}
     g8 a8 g8 a
     g8 a8 g8 a
 }
index 8d3f2ce58f3c94b68e80a4f42f5e9df89e161852..b65a6f728eb8646e1ae5939b1d3eb666d3618ce6 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.19"
 \header {
   texidoc = "
   A list of special character ASCII aliases can be easily included.
@@ -21,7 +21,7 @@
   \italic \justify {
     &numero;2 &ndash; &OE;dipe&hellip;
   }
-  \vspace #0.5
+  \combine \null \vspace #0.5
   \bold "Lyric example:"
 }
 \new Lyrics \lyricmode {
index cd475a1bbfd5a3fef6e671d2c1fdda291305b4b1..dc56d260ac945ca65dc2ae76d91845a9e69a2fa6 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Demo of markup texts, using LilyPond syntax."
@@ -54,7 +54,7 @@
   \layout {
     \context {
       \Score
-      \override PaperColumn #'keep-inside-line = ##f
+      \override PaperColumn.keep-inside-line = ##f
     }
   }
 
index 24a4fe4b8b568851bd116a70a0eab4e7d33eb172..e9f1bba990b8bc715e4b323d6071b1bb05ba8324 100644 (file)
@@ -1,15 +1,11 @@
-
 \header {
   texidoc = "Users may define non-standard markup commands using
 the @code{define-markup-command} scheme macro."
 }
 
-
 \layout { ragged-right = ##t }
-  
 
-
-\version "2.16.0"
+\version "2.17.6"
 
 #(define-markup-command (upcase paper props str) (string?)
   "Upcase the string characters. Syntax: \\upcase #\"string\""
@@ -17,15 +13,13 @@ the @code{define-markup-command} scheme macro."
 
 \score{
   {
-    c''-\markup \upcase #"hello world"
-                               % produces a "HELLO WORLD" markup
+    c''-\markup \upcase #"hello world in upper case"
   }
 
   \layout {
     \context {
       \Score
-      \override PaperColumn #'keep-inside-line = ##f
+      \override PaperColumn.keep-inside-line = ##f
     }
   }
-
 }
diff --git a/input/regression/measure-counter-broken.ly b/input/regression/measure-counter-broken.ly
new file mode 100644 (file)
index 0000000..06e1508
--- /dev/null
@@ -0,0 +1,30 @@
+\version "2.17.6"
+
+\header {
+  texidoc = "Measures split across line breaks may be numbered in a measure
+count.  Each segment receives a number.  The first number has its ordinary
+appearance, but numbers after the break are enclosed in parentheses."
+}
+
+\layout {
+  indent = 0
+  ragged-right = ##t
+}
+
+\relative c' {
+  \startMeasureCount
+  a4 b c d
+  a4 b
+  \bar ""
+  \break
+  c4 d
+  a4 b c d
+  \stopMeasureCount
+}
+
+\layout {
+  \context {
+    \Staff
+    \consists #Measure_counter_engraver
+  }
+}
diff --git a/input/regression/measure-counter.ly b/input/regression/measure-counter.ly
new file mode 100644 (file)
index 0000000..095d1a5
--- /dev/null
@@ -0,0 +1,41 @@
+\version "2.17.6"
+
+\header {
+  texidoc = "Measures can be numbered sequentially by enclosing them with 
+@code{\\startMeasureCount} and @code{\\stopMeasureCount}."
+}
+
+\layout {
+  indent = 0
+  ragged-right = ##t
+}
+
+\relative c' {
+  \startMeasureCount
+  \repeat unfold 5 {
+    a4 b c d
+  }
+  \stopMeasureCount
+  a'4 b c d
+  \override Staff.MeasureCounter.count-from = #2
+  \startMeasureCount
+  \repeat unfold 4 {
+    a4 b c d
+  }
+  \stopMeasureCount\startMeasureCount
+  \revert Staff.MeasureCounter.count-from
+  \clef bass
+  \key fis \major
+  \time 3/4
+  \repeat unfold 3 {
+    R2.
+  }
+  \stopMeasureCount
+}
+
+\layout {
+  \context {
+    \Staff
+    \consists #Measure_counter_engraver
+  }
+}
index 246a5148115ef76696619c7e2e581ecff2af3b8d..bf15f85e7b6d6b66116d98200487de5f68ef6819 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Mensural ligatures show different shapes, depending on the
@@ -16,8 +16,8 @@
   }
   \context {
     \Score
-    \override SpacingSpanner #'packed-spacing = ##t
-    \override PaperColumn #'keep-inside-line = ##f
+    \override SpacingSpanner.packed-spacing = ##t
+    \override PaperColumn.keep-inside-line = ##f
   }
 }
 
@@ -25,7 +25,7 @@
   \clef "petrucci-c4"
   \set Staff.printKeyCancellation = ##f
   \cadenzaOn % turn off bar lines
-  \accidentalStyle "forget"
+  \accidentalStyle forget
   \textLengthOn
 
 % ligaturae binaria
     \]
 
   \[
-    \override NoteHead #'style = #'blackpetrucci
+    \override NoteHead.style = #'blackpetrucci
     b\longa^\markup { "LBBBBB." }
     c'\breve
     d'
     g
-    \once \override NoteHead #'ligature-flexa = ##t
+    \once \override NoteHead.ligature-flexa = ##t
     f
-    \revert NoteHead #'style
+    \revert NoteHead.style
     g\breve.
     \]
 
     \]
 
   \[
-    \override NoteHead #'style = #'blackpetrucci
+    \override NoteHead.style = #'blackpetrucci
     e'1^\markup { "SSB" }
     a
     g\breve
-    \revert NoteHead #'style
+    \revert NoteHead.style
     \]
 
   \[
     \]
 
   \[
-    \override NoteHead #'style = #'blackpetrucci
+    \override NoteHead.style = #'blackpetrucci
     e'\longa^\markup { "LBB" }
     f'\breve
-    \revert NoteHead #'style
+    \revert NoteHead.style
     e'
     \]
 
   \[
-    \override NoteHead #'style = #'blackpetrucci
+    \override NoteHead.style = #'blackpetrucci
     b\breve^\markup { "BBBBBBL" }
     g
-    \override NoteHead #'ligature-flexa = ##t
-    \override NoteHead #'flexa-width = #3
+    \override NoteHead.ligature-flexa = ##t
+    \override NoteHead.flexa-width = #3
     f
     f'
-    \override NoteHead #'flexa-width = #5
+    \override NoteHead.flexa-width = #5
     b
     c'
-    \revert NoteHead #'style
+    \revert NoteHead.style
     % though ligature-flexa is still ##t, this pair must be drawn as recta
     b\longa
-    \revert NoteHead #'flexa-width
-    \revert NoteHead #'ligature-flexa
+    \revert NoteHead.flexa-width
+    \revert NoteHead.ligature-flexa
     \]
 
   \bar "|" \break
 
 \context Staff \with
 {
-  \override StaffSymbol #'line-count = #4
+  \override StaffSymbol.line-count = #4
 }
 {
   \clef "petrucci-c5"
   \set Staff.printKeyCancellation = ##f
   \cadenzaOn % turn off bar lines
-  \accidentalStyle "forget"
+  \accidentalStyle forget
   \textLengthOn
 
   \[
index bf2fae37d8dd79ac4357cfc0a48ec889534cc1ce..3f028f97ff0534f175dd8106ffdc7f774badd759 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   
   texidoc = "There is limited support for mensural notation: note head
@@ -9,7 +9,7 @@ both for up and down stems."
 
 
 { \context Voice { 
-  \override NoteHead  #'style = #'mensural
+  \override NoteHead.style = #'mensural
   \transpose c d'' {  c4 c2 c8  c16 c16  c1 c\breve c\longa }
   \transpose c c' { c4 c2 c8  c16 c16  c1 c\breve c\longa }
 }}
index e75549626a05e7f3fef2c354b7aa396dc30623b8..52f5b13962951ce401bb52a6e9823fbc2282f6e2 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
 texidoc = "A @code{MetronomeMark}, @code{RehearsalMark} and @code{BarNumber}
@@ -15,14 +15,14 @@ should not effect the starting point of spanners.
  }
 
  \new Staff {
-   \override Score.MetronomeMark #'break-visibility = #all-visible
-   \override TupletBracket #'breakable = ##t
-   \override Beam #'breakable = ##t
-   \override Glissando #'breakable = ##t
+   \override Score.MetronomeMark.break-visibility = #all-visible
+   \override TupletBracket.breakable = ##t
+   \override Beam.breakable = ##t
+   \override Glissando.breakable = ##t
 
-   \ottava #1 \times 1/1 { e'8\<\startTextSpan\startTrillSpan\glissando
-     [ \override NoteColumn #'glissando-skip = ##t\repeat unfold 22 e'8
-       \revert NoteColumn #'glissando-skip e'8\!\stopTextSpan\stopTrillSpan ] } |
+   \ottava #1 \tuplet 1/1 { e'8\<\startTextSpan\startTrillSpan\glissando
+     [ \override NoteColumn.glissando-skip = ##t\repeat unfold 22 e'8
+       \revert NoteColumn.glissando-skip e'8\!\stopTextSpan\stopTrillSpan ] } |
  }
  \addlyrics { ah __ \repeat unfold 21 { \skip 4 } _ rrgh }
  \addlyrics { ah --  \repeat unfold 21 { \skip 4 } _ rrgh }
index dd6f44b00473cab475b9580b3fd98bf0c58eca84..deca81dd521a562eabe8b1c27c383a9bca83d804 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Metronome marks aligned on notes do not interfere with
@@ -21,7 +21,7 @@ the second note in the lower staff."
   \layout {
     \context {
       \Score
-      \override NonMusicalPaperColumn #'stencil = #ly:paper-column::print
+      \override NonMusicalPaperColumn.stencil = #ly:paper-column::print
     }
   }
 }
index 18edbe585905f5b19498ab989842fe6eb3770286..21410c6e6c9e4e9583fbd64f17ed0d3af4928e44 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Metronome marks respect symbol order in
@@ -17,8 +17,8 @@ measure.
 }
 
 \relative c' {
-  \override Staff.KeySignature #'break-align-anchor-alignment = #LEFT
-  \override Score.MetronomeMark #'break-align-symbols = #'(time-signature key-signature)
+  \override Staff.KeySignature.break-align-anchor-alignment = #LEFT
+  \override Score.MetronomeMark.break-align-symbols = #'(time-signature key-signature)
   \key c \minor
   \tempo "Time"
   c1 
index 849ebb6146ea6a388ffa09d3553725f4853ce0ba..90e99212b8c0c4f187b00505d701993f62114b4d 100644 (file)
@@ -1,14 +1,15 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "@code{\\tempo} marks are aligned with the time signature
-or first musical element unless the first element is a multi-measure
-rest: in this case, the tempo mark is aligned with the bar line.
+or the position of the first note.
 
 By overriding @code{break-align-symbols} the default alignment can be
-changed, as shown by the final metronome mark in this snippet, aligned
-with a key signature.
-"  
+changed.  If no symbol in @code{break-align-symbols} is present, the
+property @code{non-break-align-symbols} determines the alignment.  If
+the alignment object is a multi-measure rest, the tempo mark is aligned
+with the preceding bar line.
+"
 }
 
 \layout {
@@ -23,13 +24,19 @@ with a key signature.
   c1 \break
   \tempo "T-break"
   c1
-  \tempo "T-rest"
+  \tempo "T-phantom"
   R1 \break
   \time 8/8
   \tempo "T-time"
   R1
-  \override Score.MetronomeMark #'break-align-symbols = #'(key-signature)
+  \override Score.MetronomeMark.break-align-symbols = #'(key-signature)
   \key as \major
   \tempo "T-key"
+  c1 \break
+  \override Score.MetronomeMark.non-break-align-symbols =
+    #'(note-column-interface multi-measure-rest-interface)
+  \tempo "T-rest"
+  R1
+  \tempo "T-rest"
   R1
 }
index e987176b7e1a08a269b188d2e7975e977ec8e977..6fd2ed2441c56a02205751dc68b0943457c3799c 100644 (file)
@@ -17,7 +17,9 @@ The marking is left aligned with the time signature, if there is one.
 \version "2.16.0"
 
 \relative c'' {
-  \tempo \breve = 100 c1 c1 \tempo 8.. = 50 c1
+  \tempo \breve = 100 c1 c1
+  \markLengthOn
+  \tempo "Allegro" 8.. = 50 c1 \tempo "Adagio" c2 c'
 }
 
 
index ac6b5c67a385e90f7a90d39d54ea939cee86c06d..e85394570e91c6a4c2104d1257478bd373ad950d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.25"
 
 \header {
   texidoc = "
@@ -8,10 +8,10 @@ printed with an en-dash character, separated by thin-spaces.
 }
 
 \relative c'' {
-  \tempo 4 = 66 ~ 72
+  \tempo 4 = 66 - 72
   c1 | c
   $(make-event-chord (list (make-music 'TempoChangeEvent
-                                        'tempo-unit (ly:make-duration 2 0 1 1)
+                                        'tempo-unit (ly:make-duration 2 0 1/1)
                                         'metronome-count (cons 124 132))))
   c1 | c
 }
diff --git a/input/regression/midi-grace-after-tie.ly b/input/regression/midi-grace-after-tie.ly
new file mode 100644 (file)
index 0000000..6aca01b
--- /dev/null
@@ -0,0 +1,17 @@
+\header {
+
+  texidoc = "Tied notes sound as one note in MIDI.  Grace notes
+  following a tied note shorten the resulting single note in MIDI."
+
+  % https://code.google.com/p/lilypond/issues/detail?id=3091
+}
+\version "2.16.0"
+\score {
+  \relative c' {
+    % This first b~ tie should be honoured in the MIDI output:
+    a2. b4~
+    % i.e. this b8 must not be sounded:
+    | b8 \grace c16 d4
+  }
+  \midi { }
+}
index 11153ded7d8c233eb1bdf4ad8675e693a9406830..49cda2ccc4a26133706be7a3a5c1564aec8daa1d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 \header {
 texidoc = "
 
@@ -21,11 +21,11 @@ Midi2ly tuplet test.
 
     a1 a2 a2. a4 a4. a8 a8. a16 a16. a32 a32. a64
 
-    \times 2/3 { b4 b4 b4 }
-    \times 3/5 { b4 b4 b4 b4 b4 }
+    \tuplet 3/2 { b4 b4 b4 }
+    \tuplet 5/3 { b4 b4 b4 b4 b4 }
 
-    \times 2/3 { c8 c8 c8 }
-    \times 3/5 { c8 c8 c8 c8 c8 }
+    \tuplet 3/2 { c8 c8 c8 }
+    \tuplet 5/3 { c8 c8 c8 c8 c8 }
 
   }
   \layout { }  
diff --git a/input/regression/minimum-length-end-line.ly b/input/regression/minimum-length-end-line.ly
new file mode 100644 (file)
index 0000000..29ba2f7
--- /dev/null
@@ -0,0 +1,16 @@
+\version "2.17.16"
+
+\header {
+  texidoc = "Long spanners at the end of the lines stretch measures
+correctly.
+"
+}
+
+{
+  \override Hairpin.minimum-length = #60
+  \override Hairpin.to-barline = ##t
+  \repeat unfold 4 a1
+  a1\<
+  a1\>
+  a1\!
+}
index 186b71c0eba0d8b07fe0cb93b89f190583687530..ceafcc05dbf774e79e8723386e357fd977b30d00 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header{ texidoc = "The sans serif style tab clef is automatically adjusted to
                     different string spacings."
@@ -32,7 +32,7 @@ guitar = \relative c {
     \new TabStaff {
       \clef "moderntab"
       \set TabStaff.stringTunings = #guitar-tuning
-      \override TabStaff.StaffSymbol #'staff-space = #1.0 % default value is 1.5
+      \override TabStaff.StaffSymbol.staff-space = #1.0 % default value is 1.5
       \guitar
     }
   >>
index 1a19c523ff2b62f05abc6903130c4f58c3c2b2b7..2a2e93dca3f4d239d8004f3bc030d55ca83895fa 100644 (file)
@@ -27,7 +27,7 @@ been lowered
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 manuscriptBreak = { \break }
 
 
@@ -52,7 +52,7 @@ modernAccidentals = {
 melody =    \relative c'' \repeat volta 2 \new Voice = "singer" {
     \time 6/8
     \autoBeamOff
-    << s2.^\markup { \bold \large\larger\larger { \hspace #-3.0 Lieblich, etwas geschwind } }
+    << s2.^\markup { \bold \large\larger\larger \line { \hspace #-3.2 Lieblich, etwas geschwind } }
        R2.
     >>
   r4 r8 c4 g8 |
@@ -107,11 +107,11 @@ secondVerse = \lyricmode {
     }
 
 pianoRH =  \relative c''' \repeat volta 2 {
-    \accidentalStyle "modern"
+    \accidentalStyle modern
     g16(_\p fis a g fis g f e d c b a ) | 
     <g e>8( <es fis a> <d f b> <c e c'>) r8 r | 
     r8 c'( e,) f r a |
-    \once \override DynamicLineSpanner   #'padding =#3
+    \once \override DynamicLineSpanner.padding =#3
     r8 << { s8\> s8\! }  << { fis( g)
                            } \\ { c,4 } >> >> r8 <e c g> <e c g> |
     <d c a>4. r8 \clef bass  <d b f> <d b f> |
@@ -128,7 +128,7 @@ pianoRH =  \relative c''' \repeat volta 2 {
 }
 
 pianoLH =  \relative c'' \repeat volta 2 {
-    \accidentalStyle "modern"
+    \accidentalStyle modern
     g16( fis a g fis g f e d c b a) | 
     \clef bass g4.( c,8) r r
     \clef treble r4 <bes' c>8([ <a c>)] r <f c'> |
@@ -141,7 +141,7 @@ pianoLH =  \relative c'' \repeat volta 2 {
     fis r4 <g b>8( |
     <f c'>4.)
 
-    \once \override Slur  #'height-limit = #1.0
+    \once \override Slur.height-limit = #1.0
 
     <g c>4.( | <a c>4.) <g b,> |
     c,4 r8 g4 r8 |
@@ -155,7 +155,7 @@ pianoLH =  \relative c'' \repeat volta 2 {
     \score {
        << \time 6/8
           \new Staff <<
-              \context Staff \accidentalStyle "modern"
+              \context Staff \accidentalStyle modern
               \melody >>
           \lyricsto "singer" \new Lyrics \firstVerse
           \lyricsto "singer" \new Lyrics \secondVerse
@@ -171,13 +171,13 @@ pianoLH =  \relative c'' \repeat volta 2 {
        \layout {
            \context {
                \Lyrics
-               \override LyricText #'font-size = #-1
+               \override LyricText.font-size = #-1
            }
            \context {
                \Score
-               \override Beam #'beam-thickness = #0.55
-               \override SpacingSpanner #'spacing-increment = #1.0
-               \override Slur #'height-limit = #1.5
+               \override Beam.beam-thickness = #0.55
+               \override SpacingSpanner.spacing-increment = #1.0
+               \override Slur.height-limit = #1.5
            }
        }
        \midi {
index 5aff4966521b0a0d26e36a5db01cba0d399c689d..1494f4e299bb8ad9f005b6f91f927d458e786b9d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 \include "mozart-hrn3-defs.ily"
 
 allegro = \relative c' {
@@ -121,7 +121,7 @@ allegro = \relative c' {
   dis[( e)] r e-. e[( f)] r f-. |
   g4-.\f e-. c-. bes-. |
   g-.\ff e-. c-. r |
-  a'2 ~  a8[_""_\markup { \bold \italic "sempre " \dynamic "f" }  b16 c] d[( e d e)]
+  a'2 ~  a8[_\markup { \bold \italic "sempre " \dynamic "f" }  b16 c] d[( e d e)]
 
   f4. ( d8)  f8[ ( d) f d]
   c[ (e] g2) \appoggiatura f16
@@ -130,19 +130,19 @@ allegro = \relative c' {
   c4) r r2
   R1 |
   \mark "H"
-  \times 2/3 { c8[ b a ] }
-  \times 2/3 { g[ a b] }
-  \times 2/3 { c[ d e] }
-  \times 2/3 { f[ e d] } |
-  \times 2/3 { c[ b a ] }
-  \times 2/3 { g[ a b] }
-  \times 2/3 { c[ d e] }
-  \times 2/3 { f[ e d] }|
-  c4 \times 2/3 { r8 g'[( e)]} c4
-  \times 2/3 { r8 e[ ( c)]} |
-  g4 \times 2/3 { r8  c8[( g)] }
-  \times 2/3 { e[ ( g) e-. ] }
-  \times 2/3 { c[ ( e) c-.] }|
+  \tuplet 3/2 { c8[ b a ] }
+  \tuplet 3/2 { g[ a b] }
+  \tuplet 3/2 { c[ d e] }
+  \tuplet 3/2 { f[ e d] } |
+  \tuplet 3/2 { c[ b a ] }
+  \tuplet 3/2 { g[ a b] }
+  \tuplet 3/2 { c[ d e] }
+  \tuplet 3/2 { f[ e d] }|
+  c4 \tuplet 3/2 { r8 g'[( e)]} c4
+  \tuplet 3/2 { r8 e[ ( c)]} |
+  g4 \tuplet 3/2 { r8  c8[( g)] }
+  \tuplet 3/2 { e[ ( g) e-. ] }
+  \tuplet 3/2 { c[ ( e) c-.] }|
   g4 r8 g'\f a[ b c d]|
   \afterGrace d1_(\trill { c16[ d] }
   c4) r r2
index 4fe4973efe18f5ed1f9a123f62d4defb4869f51a..3fca03fd3fde78c3d22ba98320538ad97336f6d6 100644 (file)
@@ -1,10 +1,10 @@
 % 
 
-longgrace = \override Flag  #'stroke-style = #'()
-endlonggrace = \revert Flag #'stroke-style
+longgrace = \override Flag.stroke-style = #'()
+endlonggrace = \revert Flag.stroke-style
 ritenuto = \markup { \italic  "rit." }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \layout {
   \context {
@@ -12,11 +12,11 @@ ritenuto = \markup { \italic  "rit." }
     skipBars = ##t
     midiInstrument = #"french horn"
     %% try to mimic Breitkopf
-    \override RehearsalMark #'padding = #1
+    \override RehearsalMark.padding = #1
     restNumberThreshold = #1
 
-    \override RehearsalMark #'font-series = #'bold
-    \override RehearsalMark #'font-size = #4.5
+    \override RehearsalMark.font-series = #'bold
+    \override RehearsalMark.font-size = #4.5
   }
 }
 
index 145551b2a90465003c083998b30e0fdd6f9a7410..403d7aaf4963518a47c527c20cebe07b0b449bd9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \include  "mozart-hrn3-defs.ily"
 
 romanze =  \relative c' {
@@ -44,12 +44,12 @@ romanze =  \relative c' {
   \grace e16
   d8.[  c16) \< ]  c8[ c-.( c-. c)-.]\!
   \mark "C"
-  \override DynamicLineSpanner #'staff-padding = #2.5
+  \override DynamicLineSpanner.staff-padding = #2.5
   des1\sfp
   g,1\sfp
   c\sfp
   c,\sfp
-  \revert DynamicLineSpanner #'staff-padding
+  \revert DynamicLineSpanner.staff-padding
   R1*3
   r8  c[\p c c] c2~
   c8[ c' c c] c2~
index bc1a648567d416234b8cbe273cc503f0ef1d3aec..67130754de2220d7ecd9c5a760652b10c8b53a72 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header
 {
   texidoc = "The multimeasure rest is centered exactly between bar lines."
@@ -12,8 +12,8 @@
 
 {
   \set Score.skipBars = ##t
-  \override Staff.BarLine  #'hair-thickness = #7.5
-  \override Staff.MultiMeasureRest  #'hair-thickness = #10
+  \override Staff.BarLine.hair-thickness = #7.5
+  \override Staff.MultiMeasureRest.hair-thickness = #10
 
   c'1 R1*20 c'1
 }
index 2b9aa7e1695b9661d31dcd24af1ea6dfd7b92c9d..b063413003ada8a97ded7e6ac69c240f917ce690 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Though the default spacing for multi-measure rests
@@ -8,7 +8,7 @@ restored by overriding @code{spacing-pair}."
 
 <<
   \new Staff  {
-    \once \override MultiMeasureRest #'spacing-pair =
+    \once \override MultiMeasureRest.spacing-pair =
     #'(break-alignment . staff-bar)
     R1
   }
index 241cd920403b00f6807615ccd7e2b0ec0a91a20d..bd917b88493077a4a134a638ba4eebcb6de7a249 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Multi measure rest staff position can be overridden
@@ -7,6 +7,6 @@ to 0.
 }
 
 \relative c' {
-  \override MultiMeasureRest #'staff-position = #0
+  \override MultiMeasureRest.staff-position = #0
   R1
 }
index cc58c2470f8c3dec991173ce6a0731c86369f393..44c45ffb01cbfcc51bdaaee1a336fe88df7b58b8 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.24"
 
 \header  {
 
@@ -13,18 +13,19 @@ measures stretch to accommodate wide texts.
 
 }
 
-\layout { ragged-right = ##t }
-{
+\book { \score { {
   \time 3/4
   \set Score.skipBars = ##t
-  R2._\markup { \center-column { \musicglyph  #"scripts.dfermata" \roman "Ad lib"  }  }
+  R2._\markup { \center-column { \fermata \roman "Ad lib"  }  }
   R2.^\fermataMarkup
   R2.^"4"
   R2.*3_\markup { \roman "a1b2c3" }
   R2.*10^"inner"^"top"_"inner"_"bot"
-  \override MultiMeasureRestText  #'springs-and-rods
+  \override MultiMeasureRestText.springs-and-rods
     = #ly:multi-measure-rest::set-text-rods
 
   R2.^"very very very very very very long text"
   c'2.
 }
+  \layout { ragged-right = ##t }
+}}
index e05c7964eeb45a9e2613fdd3edbf1461323ef53f..af157a37c7f320ddcb20a4d3a7cf8db16ee38072 100644 (file)
@@ -2,23 +2,23 @@
   texidoc = "Multi-measure rests standard values can be tweaked."
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \markup "Use non-standard multi-measure rests:"
 \new Staff {
-  \override MultiMeasureRest #'usable-duration-logs = #(iota 2 1)
+  \override MultiMeasureRest.usable-duration-logs = #(iota 2 1)
   \time 1/4 R4
   \time 2/4 R2
 }
 \markup "Round up to the longer rest:"
 \new Staff {
-  \override MultiMeasureRest #'round-up-to-longer-rest = ##t
+  \override MultiMeasureRest.round-up-to-longer-rest = ##t
   \time 3/2 R1.
   \time 7/2 R\breve..
 }
 \markup "Round up to the longer rest only in specified time signatures:"
 \new Staff {
-  \override MultiMeasureRest #'round-up-exceptions = #'((3 . 2))
+  \override MultiMeasureRest.round-up-exceptions = #'((3 . 2))
   \time 3/2 R1.
   \time 7/2 R\breve..
   \time 3/2 R1.
index f86e1a0c7fcddb7e85b8e06c36cf984715107c22..30028a284a4add0dee328bb894bc8c5acc7d8385 100644 (file)
@@ -6,15 +6,15 @@ end span events at the end of a note."
   
 }
 
-\version "2.16.0"
+\version "2.17.15"
 \paper{
   ragged-right = ##T
 }
-\relative
+\relative c'
 << {   c'4 c c c }
    \\
    {
-     \override TextSpanner #'bound-details #'left #'text = "x" 
+     \override TextSpanner.bound-details.left.text = "x" 
      \endSpanners c,2\<\startTextSpan c2
 
    }
index 0a1d36825a42503245aec2779dbb3c6679bd0c16..8f4da124fa0d81f6864b40a96f1b5adb7d9e897d 100644 (file)
@@ -1,13 +1,13 @@
 \header
 {
-    
+
 texidoc = "Music functions are generic music transformation functions,
 which can be used to extend music syntax seamlessly.  Here we
 demonstrate a @code{\\myBar} function, which works similar to
 @code{\\bar}, but is implemented completely in Scheme."
 
 }
-\version "2.16.0"
+\version "2.17.5"
 
 myBar = #(define-music-function (parser location bar-type) (string?)
           (context-spec-music
@@ -17,6 +17,6 @@ myBar = #(define-music-function (parser location bar-type) (string?)
 \layout { ragged-right = ##t }
 
 {
-    d4 \myBar "|:" d4
+    d4 \myBar ".|:" d4
 }
 
index 43f346deac8ea116688476a06c5dfcf03785daaf..ee6e1eeb1c0dee46323aa68c5bb6646f2fc63cae 100644 (file)
@@ -10,21 +10,14 @@ and dynamics are left over. These are put onto the 2nd measure."
 
 }
 
-\version "2.16.0"
+\version "2.17.27"
 
 #(define (notes-to-skip m)
   "Convert all stuff with duration (notes, lyrics, bass figures, etc.) to skips.
-Scripts and dynamics are maintained.
-"
-  (if (memq 'rhythmic-event (ly:music-property m 'types))
-   (let* ((newmus (make-music 'SkipEvent)))
-    (map
-     (lambda (x) (ly:music-set-property! newmus (car x) (cdr x)))
-     (ly:music-mutable-properties m))
-    newmus
-  )
-   m)
-)
+Scripts and dynamics are maintained."
+  (if (music-is-of-type? m 'rhythmic-event)
+      (make-music 'SkipEvent m)
+      m))
 
 
 \layout { ragged-right= ##t }
index 85be49ec1aaccb8ba03ad2e69724753343077748..4e030790693e36d7940f645106f96ae867985909 100644 (file)
@@ -5,8 +5,8 @@
   <identification>
     <miscellaneous>
       <miscellaneous-field name="description">Various clefs: G, C, F, percussion, 
-          TAB and none; some are also possible with octavation and  on other 
-          staff lines than their default (e.g. soprano/alto/tenor/bariton C 
+          TAB and none; some are also possible with transposition and on other
+          staff lines than their default (e.g. soprano/alto/tenor/baritone C
           clefs); Each measure shows a different clef (measure 17 has the "none" 
           clef), only measure 18 has the same treble clef as measure 
           1.</miscellaneous-field>
index 65e73ea8670b8e35a69acb88e28293279055af16..5d1b8fc658da3bba123f2dcecbe25c7be3c4dd63 100644 (file)
@@ -3,8 +3,6 @@ depth = ../../..
 STEPMAKE_TEMPLATES=documentation texinfo tex
 LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc musicxml
 
-EXTRA_DIST_FILES = LICENSE book-musicxml-testsuite.py
-
 TEXI2HTML_FLAGS += --nomenu
 
 COLLATED_FILES = $(sort $(MUSICXML_FILES) $(MUSICMXL_FILES) $(TEXINFO_SOURCES) )
index 0c4e28f113a75b5dd7a47f3d6d202437915f9103..7d18f1af1998e82fb062e55f35c621a3b2ba605c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 % possible rename to staff-something.  -gp
 
 \header{ texidoc = "@cindex Staff Remove
@@ -11,7 +11,7 @@ corresponding engraver.
     ragged-right = ##t
 }
 
-\relative \new Staff \with {
+\relative c' \new Staff \with {
        \remove "Staff_symbol_engraver"
        \consists "Pitch_squash_engraver"
        \remove "Clef_engraver"
index 79e8ec88dc0a93024f2190cb9f23f824190fc27e..d63e91abe64c72a2455df5823823baa7c8d463b5 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "Bar lines are positioned correctly when using custom
 staves which are not centered around position@tie{}0.
 "
 }
 \new Staff {
-  \override Staff.StaffSymbol #'line-positions = #'(1 3 5 7 9)
+  \override Staff.StaffSymbol.line-positions = #'(1 3 5 7 9)
   c''1 \bar "||"
-  c''1 \bar ":"
+  c''1 \bar ";"
   c''1 \bar "|."
 }
index a3ba0d92a69b0c8877f518c51aaf810892d5e4b5..c6e520bd555b2d95f8f7ea4c4f6674806c086d55 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header{
   texidoc = "By default, text is set with empty horizontal dimensions.
@@ -12,11 +12,11 @@ to control the horizontal size of text."
 
 \relative c''{
   %% \textLengthOff
-  %% short for \override TextScript #'extra-spacing-width = #'(+inf.0 . -inf.0)
-  %%           \override TextScript #'extra-spacing-height = #'(0 . 0)
+  %% short for \override TextScript.extra-spacing-width = #'(+inf.0 . -inf.0)
+  %%           \override TextScript.extra-spacing-height = #'(0 . 0)
   c2_"very wide and long text" c | \break
-  %% short for \override TextScript #'extra-spacing-width = #'(0 . 0)
-  %%           \override TextScript #'extra-spacing-height = #'(-inf.0 . +inf.0)
+  %% short for \override TextScript.extra-spacing-width = #'(0 . 0)
+  %%           \override TextScript.extra-spacing-height = #'(-inf.0 . +inf.0)
   \textLengthOn
   c2_"very wide and long text" c
 }
index 67fffc13133b48db76d018fc9b759fdfe723aa19..2725b20e08848c8d1d335db8057cd8593c882baa 100644 (file)
@@ -9,7 +9,7 @@ to the @code{tonic} property."
 
 fragment = {
   \key c \major
-  \set shapeNoteStyles = #'#(do re mi fa sol la ti)
+  \set shapeNoteStyles = ##(do re mi fa sol la ti)
   c1 d e f g a b c d e f g a b c
   c,,2 d e f g a b c d e f g a b c
   c,,4 d e f g a b c d e f g a b c
index 9ddc8b6ae8456000d8d7ea1a977528dd5486886f..987b312febc4e69a14f6e4e3c1f3cdd1522b91be 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header{
   texidoc="
 Note head shapes may be set from several choices.
@@ -16,94 +16,67 @@ dimensions.
   ragged-right = ##t
 }
 
-pattern = <<
-  \new Voice {
-    \override Stem  #'direction = #UP
+pattern =
+#(define-music-function (parser location name style) (markup? ly:context-mod?)
+#{ <<
+  s1^#name
+  \new Voice \with #style {
+    \override Stem.direction = #UP
     e'4 e'2. e'1 e'\breve*1/2 e'\longa*1/4
   }
-  \new Voice {
-    \override Stem  #'direction = #DOWN
+  \new Voice \with #style {
+    \override Stem.direction = #DOWN
     g4 g2. g1 g\breve*1/2 g\longa*1/4
   }
->>
+>> #})
 
+patternStyle =
+#(define-music-function (parser location style) (symbol?)
+  #{
+     \pattern #(symbol->string style) \with {
+       \override NoteHead.style = #style
+     }
+  #})
 
 \transpose c c {
   \clef C
 
-  \override Staff.NoteHead  #'style = #'default
-  s1*0^\markup { "default" }
-  \pattern
-
-  \override Staff.NoteHead  #'style = #'altdefault
-  s1*0^\markup { "altdefault" }
-  \pattern
+  \patternStyle default
+  \patternStyle altdefault
 
   \break
 
-  \override Staff.NoteHead  #'style = #'baroque
-  s1*0^\markup { "baroque" }
-  \pattern
-
-  \override Staff.NoteHead  #'style = #'neomensural
-  s1*0^\markup { "neomensural" }
-  \pattern
+  \patternStyle baroque
+  \patternStyle neomensural
 
   \break
 
-  \override Staff.NoteHead  #'style = #'mensural
-  s1*0^\markup { "mensural" }
-  \pattern
-
-  \override Staff.NoteHead  #'style = #'petrucci
-  s1*0^\markup { "petrucci" }
-  \pattern
+  \patternStyle mensural
+  \patternStyle petrucci
 
   \break
 
-  \override Staff.NoteHead  #'style = #'harmonic
-  s1*0^\markup { "harmonic" }
-  \pattern
-
-  \override Staff.NoteHead  #'style = #'harmonic-black
-  s1*0^\markup { "harmonic-black" }
-  \pattern
+  \patternStyle harmonic
+  \patternStyle harmonic-black
 
   \break
 
-  \override Staff.NoteHead  #'style = #'harmonic-mixed
-  s1*0^\markup { "harmonic-mixed" }
-  \pattern
-
-  \override Staff.NoteHead  #'style = #'diamond
-  s1*0^\markup { "diamond" }
-  \pattern
+  \patternStyle harmonic-mixed
+  \patternStyle diamond
 
   \break
 
-  \override Staff.NoteHead  #'style = #'cross
-  s1*0^\markup { "cross" }
-  \pattern
-
-  \override Staff.NoteHead  #'style = #'xcircle
-  s1*0^\markup { "xcircle" }
-  \pattern
+  \patternStyle cross
+  \patternStyle xcircle
 
   \break
 
-  \override Staff.NoteHead  #'style = #'triangle
-  s1*0^\markup { "triangle" }
-  \pattern
-
-  \override Staff.NoteHead  #'style = #'slash
-  s1*0^\markup { "slash" }
-  \pattern
+  \patternStyle triangle
+  \patternStyle slash
 
   \break
 
-  \override Staff.NoteHead  #'style = #'kievan
-  s1*0^\markup { "kievan" }
-  \pattern
+  \pattern "kievan" \with { \kievanOn }
 
 }
 
index c1be7be23483b112d293ade1a8860865f9b94017..88131f516d16125fb934cbb903d9af4ad1a62944 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Note head lines (e.g. glissando)
@@ -17,7 +17,7 @@ sd = { \change Staff = down}
 \context PianoStaff
 <<
   \new Staff = "up"   {
-    \override Glissando #'breakable = ##t
+    \override Glissando.breakable = ##t
     \set PianoStaff.connectArpeggios = ##t
     \showStaffSwitch
     \clef F
index 489e62be63655a1a0e3cceff90c84c55d2b1d167..fdb44a041be22b8af9a261571a16ddaf0d17d8f2 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 \header{
   texidoc=" The number of stafflines of a staff can be set.  Ledger
@@ -9,9 +9,9 @@ adjusted accordingly.  "
 
 
 \new Staff \with {
-  \override StaffSymbol #'line-count = #3
+  \override StaffSymbol.line-count = #3
 }
 \relative c {
-  c' c c c | g' g g g  \bar ":|"
+  c' c c c | g' g g g  \bar ":|."
 }
 
diff --git a/input/regression/offsets.ly b/input/regression/offsets.ly
new file mode 100644 (file)
index 0000000..878664e
--- /dev/null
@@ -0,0 +1,82 @@
+\version "2.17.29"
+
+\header {
+  texidoc = "The @code{\\offset} command may be used to displace various properties
+from the default settings contained in grob descriptions.  Settings which may be
+offset are limited to those of type @code{number}, @code{number-pair}, or
+@code{number-pair-list}.  Most of the following examples begin with the grob in its
+default appearance.  The command is demonstrated as a tweak and as an override."
+}
+
+\layout {
+  ragged-right = ##t
+  indent = 0
+}
+
+\relative c' {
+
+  %% ARPEGGIO %%
+  % default
+  <c e g b>1\arpeggio
+  <c e g b>1-\offset positions #'(-1 . 1) \arpeggio
+  \bar "||"
+
+  %% BREATHING SIGN %%
+  % default
+  c1 \breathe
+  c1
+  \once \offset Y-offset 1 BreathingSign
+  \breathe
+  \bar "||"
+
+  %% DYNAMICS %%
+  % default
+  c1\f
+  \once \offset X-offset #-1 DynamicText
+  c1\f
+  % DynamicLineSpanner
+  \once \offset padding 1 DynamicLineSpanner
+  c1\f
+  \bar "||"
+
+  %% BEAMS %%
+  % default
+  c'8 d e f
+  \once \offset positions #'(-1 . -1) Voice.Beam
+  c8 d e f
+  % same effect as an offset of '(-2 . -2)
+  \once \offset positions #-2 Beam
+  c8 d e f
+  \override Beam.breakable = ##t
+  c8-\offset positions #'((-1 . -3) (-3 . -1)) [ d e f
+  \break
+  g8 f e d] c-\offset beam-thickness 0.48 [ d e f]
+  \bar "||"
+
+  %% TEXT SPANNERS %%
+  c4\startTextSpan d e f\stopTextSpan
+  \once \offset dash-fraction #'(0.1 0.3) TextSpanner
+  \once \offset staff-padding #'(1.0 2.0) TextSpanner
+  c4\startTextSpan d e f
+  \break
+  c4 d e f\stopTextSpan
+  \bar "||"
+
+  %% SLURS %%
+  % this duplicates the effect of the \shape command
+  \offset control-points #'(
+   ((0 . 0) (0 . 1) (0 . 2) (0 . 1))
+   ((1 . 0) (0 . 4) (0 . 4) (0 . 0))
+   ) Slur
+  c4-\offset line-thickness #'(0 10) ( d e f
+  \break
+  c4 d e f)
+  \bar "||"
+
+  %% ACCIDENTAL, STEM %%
+  % this illustrates use of \offset as a directed tweak
+  cis2
+  \offset AccidentalPlacement.right-padding 0.5
+  \offset Stem.thickness 4.0
+  cis!2
+}
index 973e1f580df7e4f4352e5c988873446fadb13b1c..c37be4fd249f9230fb642bdd3b21f54f055223a6 100644 (file)
@@ -17,12 +17,14 @@ page should be horizontally stretched.
 
 \paper {
   #(define page-breaking ly:optimal-breaking)
-  page-spacing-weight = #10
+  page-spacing-weight = #100 % default is 10
   ragged-last-bottom = ##t
 }
 
 \relative c' {
+  <>_"this page stretched horizontally"
   \repeat unfold 5 {a b c d} \pageBreak
+  <>_"this page with natural spacing"
   \repeat unfold 5 {a b c d}
 }
 
index 1fbce42da962db0ce46da318f5eb6099aa7ffe28..83ebf7886a6201b9e3463c94ec7a1a8ce8576ada 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 
 \header{
   texidoc= "Test optional music function arguments.
@@ -29,5 +29,5 @@ zap =
    (ly:pitch? #{ \pitch d' #}) (ly:pitch? #{ \pitch e' #})
    ly:music?) #{ $a $dur $b $c ^\markup{!} $d  #})
 
-\new Voice { \relative c' e' \relative { e' } \ablative c' e' \ablative { e' }
+\new Voice { \relative c' e' \relative c' { e' } \ablative c' e' \ablative { e' }
   \zap 8. c'' d'' {e''4..} \zap f''8 g'' \zap 4 a'' b'' c''' d'''2 }
index 3dc29fbcb7f469f0288d1a380cbd9ee6e17fa6a0..667e0c01db6bb2e43c66871921b929f1166de0cb 100644 (file)
@@ -5,7 +5,7 @@
   "Both edge heights of an ottava bracket can be specified."
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 
 \layout { ragged-right = ##t} 
   
   %override the left edge height to produce standard text with a left edge
   \ottava #1
-  \once \override Staff.OttavaBracket #'edge-height = #'(1.2 . 1.2)
+  \once \override Staff.OttavaBracket.edge-height = #'(1.2 . 1.2)
   a b c
   \ottava #0
   a
   
   % Look! we can make them go up!
   \ottava #1
-  \once \override Staff.OttavaBracket #'edge-height = #'(-1 . -1)
+  \once \override Staff.OttavaBracket.edge-height = #'(-1 . -1)
   a b c
   \ottava #0
   a
   
   % and have them go in different directions
   \ottava #1
-  \once \override Staff.OttavaBracket #'edge-height = #'(-1.2 . 1.2)
+  \once \override Staff.OttavaBracket.edge-height = #'(-1.2 . 1.2)
   a b c
   \ottava #0
   a
diff --git a/input/regression/outside-staff-placement-directive.ly b/input/regression/outside-staff-placement-directive.ly
new file mode 100644 (file)
index 0000000..9bc9fdd
--- /dev/null
@@ -0,0 +1,25 @@
+\version "2.17.6"
+
+\header {
+  texidoc = "The @code{outside-staff-placement-directive} adjusts
+  the order in which objects are placed outside the staff."
+}
+
+music = \transpose c c' { f2^"some" f^"words" f^"that" f^"overlap" }
+
+{
+  \override Staff.VerticalAxisGroup.outside-staff-placement-directive =
+    #'left-to-right-polite
+    \tempo left-to-right-polite \music }
+{
+  \override Staff.VerticalAxisGroup.outside-staff-placement-directive =
+    #'left-to-right-greedy
+    \tempo left-to-right-greedy \music }
+{
+  \override Staff.VerticalAxisGroup.outside-staff-placement-directive =
+    #'right-to-left-polite
+    \tempo right-to-left-polite \music }
+{
+  \override Staff.VerticalAxisGroup.outside-staff-placement-directive =
+    #'right-to-left-greedy
+    \tempo right-to-left-greedy \music }
index 3a629ee55671f6262e3549ed00390afcb7ee27a2..03a710b6793b15954b4ef8118186daf680bae18a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "A sublist of grob property lists may be overridden within a callback.
@@ -7,7 +7,7 @@
 }
 
 \relative c' {
-  \override Glissando #'after-line-breaking =
+  \override Glissando.after-line-breaking =
     #(lambda (grob)
        (ly:grob-set-nested-property! grob '(bound-details right Y) 3))
   c1 \glissando
index 6c899c7b6c50745353593a366b54f62e4c1d3f05..08a45d36d6d4cda97ee27faf51407b445d048db3 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Sublist of grob property lists may be also tuned.  In the
@@ -7,8 +7,8 @@ grob is tweaked."
 }
 
 \relative c' {
-  \override Stem #'details #'beamed-lengths = #'(6 10 8)
+  \override Stem.details.beamed-lengths = #'(6 10 8)
   c8[ c] c16[ c] c32[ c]
-  \revert Stem #'details
+  \revert Stem.details
   c8[ c] c16[ c] c32[ c]
 }
index 438d5f63c271fe6f2397e4bfff285ead890ae16f..b2038ad65bfd2eb66f7b4da171ab9a373bdc39c7 100644 (file)
@@ -14,8 +14,8 @@ Melody = \relative c' {
   c2 c | c c | c c
 }
 Words = \lyricmode{
-  bla bla bla bla bla bla
-  bla bla bla bla bla bla
+  ma ma ma ma ma ma
+  ma ma ma ma ma ma
 }
 \book {
   \score {
index fdfdd79327e511bc5b327aa82719f24862229b9f..2e148b303ab3d67839fb9d497020a734b7e3d42c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "minimum-distance within a system is correctly accounted for in page breaking."
@@ -7,7 +7,7 @@
 \layout {
   \context {
     \Score
-    \override VerticalAxisGroup #'staff-staff-spacing =
+    \override VerticalAxisGroup.staff-staff-spacing =
       #'((minimum-distance . 20))
   }
 }
index 3b4ed80620dc0f439bb6a44ae75a01137e27b1f4..a316608e6b35198b258b813b9a9329cf5e50d712 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "minimum-distance within a system is correctly accounted for in page breaking."
@@ -7,7 +7,7 @@
 \layout {
   \context {
     \Score
-    \override NonMusicalPaperColumn #'line-break-system-details = #'((alignment-distances . (20)))
+    \override NonMusicalPaperColumn.line-break-system-details = #'((alignment-distances . (20)))
   }
 }
 
index edec830b0e45d4a1d691bad8b9748ad1c08a609d..f50c73c8221451232b3387191805e45cf5a6da1f 100644 (file)
@@ -11,7 +11,7 @@
   ragged-last-bottom = ##f
 
   oddHeaderMarkup = \markup  {
-    \override #'(baseline-skip . 1)
+    \override #'(baseline-skip . 2.5)
     \center-column {
       \box \fill-line { \teeny " " " " }
       \on-the-fly #first-page "first-page-header-text"
@@ -24,7 +24,7 @@
   evenHeaderMarkup = \oddHeaderMarkup
 
   oddFooterMarkup = \markup \fill-line {
-    \override #'(baseline-skip . 0.5)
+    \override #'(baseline-skip . 1)
     \center-column {
        \on-the-fly #first-page "first-page-footer-text"
        \on-the-fly #last-page "last-page-footer-text"
index 21fa1fe80b4312f598197ecca103c479859edd0e..b0d426ea891a4a34e79157ecf2467ff7935219c9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Page labels may be placed inside music or at top-level,
@@ -38,7 +38,7 @@ and referred to in markups."
       \mark "B" \label #'markB
       d' d'
       d' d'
-      \once \override Score . RehearsalMark #'break-visibility = #begin-of-line-invisible
+      \once \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
       \mark "C" \label #'markC
     }
     \header { piece = "First score" }
index 0067cf34dcdb6ef8f657f0ffacd6775f111e5b06..60ff82d3e1a130b83d3448402c2f71c77a6e07bb 100644 (file)
@@ -8,7 +8,7 @@ systems may be placed absolutely on the printable area of the page."
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 #(set-default-paper-size "a6" 'portrait)
 
@@ -25,15 +25,13 @@ systems may be placed absolutely on the printable area of the page."
   \score {
     {
       \overrideProperty 
-      #"Score.NonMusicalPaperColumn"
-      #'line-break-system-details
+      Score.NonMusicalPaperColumn.line-break-system-details
       #'((Y-offset . 0.0))
       c1 c1 \break
       
     
       \overrideProperty 
-      #"Score.NonMusicalPaperColumn"
-      #'line-break-system-details
+      Score.NonMusicalPaperColumn.line-break-system-details
       #'((Y-offset . 62.0)
          (X-offset . 8.0)
       )
diff --git a/input/regression/page-limited-space.ly b/input/regression/page-limited-space.ly
deleted file mode 100644 (file)
index 6af1fc1..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-\version "2.16.0"
-#(set-default-paper-size "a6")
-
-\header {
-  texidoc = "The space between systems can be limited when there is too
-much space left on the page by setting @code{page-limit-inter-system-space}."
-}
-
-\book {
-  \paper {
-    page-limit-inter-system-space = ##t
-    page-limit-inter-system-space-factor = 1.4
-
-    ragged-last-bottom = ##f
-
-    oddFooterMarkup = \markup "page bottom"
-    evenFooterMarkup = \markup "page bottom"
-    oddHeaderMarkup = \markup \fill-line {
-      "page top" \fromproperty #'page:page-number-string }
-    evenHeaderMarkup = \markup \fill-line {
-      "page top" \fromproperty #'page:page-number-string }
-  }
-  \new Staff << \repeat unfold 9 { g'4 g' g' g' \break }
-                { s1*2 \pageBreak
-                  s1*3 \pageBreak } >>
-}
index c068be2f33403318817524d65099750d463c7d38..7ce93d0e6123de14cd3267da314343d17cb2d11f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "@var{alignment-distances} applies to the toplevel
@@ -9,8 +9,7 @@ the bass figure line should be directly below the 6."
 \score {
  <<
    \new Staff {
-     \overrideProperty #"Score.NonMusicalPaperColumn"
-     #'line-break-system-details #'((alignment-distances . (15)))
+     \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (15)))
      c'4
    }
    \new Staff <<
index d83ece346c0ead785142bb8182fef742892deb7b..3b8a17caa4a4a5ca4a638a203070591752ff35f5 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Dynamic centering still works with alignment-distances."
@@ -13,7 +13,7 @@
   \layout {
     \context {
       \Score
-      \override NonMusicalPaperColumn #'line-break-system-details =
+      \override NonMusicalPaperColumn.line-break-system-details =
         #'((alignment-distances . (20)))
     }
   }
index 1e26dfe31749b194789f76703c2e78277c5a8c4a..1f7f6ef3508a80bdbac9657498788dad82258d37 100644 (file)
@@ -16,6 +16,12 @@ the page layout engine."
      \new Lyrics \lyricsto "asdf" \lyricmode { a b c d }
   >>
   }
-  \markup "blah blah blah"
+  \markup "next song"
+  \score {
+    <<
+      \new Lyrics \lyricmode {la1 la }
+      \new Staff \new Voice { a'1 a'1 }
+  >>
+  }
 }
 
index 355edee9dd75d9402b055f9c7360d858d0e97619..40e13626a92bc8975e444b45b7fbafb7568f28c8 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Non-staff lines between two systems don't confuse the
@@ -15,7 +15,7 @@ between the two closest staves of consecutive systems."
 
 <<
   \new Lyrics
-  \with { \override VerticalAxisGroup #'staff-affinity = #DOWN }
+  \with { \override VerticalAxisGroup.staff-affinity = #DOWN }
   \lyricmode {
     My2 first Li4 -- ly song,2
     My2 first Li4 -- ly song,2
index ec4dceeaf4bc498ac4753b8b3b11ec0b1f13bb16..656f70024130b9f3cd659b16aa31ac1bc383d003 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "A non-staff line (such as @code{Lyrics}) at the
@@ -9,7 +9,7 @@ bottom of a system gets spaced appropriately."
   ragged-right = ##t
   \context {
     \Lyrics
-    \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'basic-distance = #20
+    \override VerticalAxisGroup.nonstaff-nonstaff-spacing.basic-distance = #20
   }
 }
 <<
index 99749aa80b906e8763091a9c7b1821c415e117d5..aff5f0a9d4a4e162680ced897efba1ef1b778a91 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Padding from the header and footer is measured to the
@@ -17,10 +17,10 @@ first non-staff line, whether or not it is spaceable."
 
   \score {
     <<
-      \new Lyrics \with { \override VerticalAxisGroup #'staff-affinity = #DOWN } \lyricmode { foo }
-      \new Lyrics \with { \override VerticalAxisGroup #'staff-affinity = #DOWN } \lyricmode { foo }
-      \new Lyrics \with { \override VerticalAxisGroup #'staff-affinity = #DOWN } \lyricmode { foo }
-      \new Lyrics \with { \override VerticalAxisGroup #'staff-affinity = #DOWN } \lyricmode { foo }
+      \new Lyrics \with { \override VerticalAxisGroup.staff-affinity = #DOWN } \lyricmode { foo }
+      \new Lyrics \with { \override VerticalAxisGroup.staff-affinity = #DOWN } \lyricmode { foo }
+      \new Lyrics \with { \override VerticalAxisGroup.staff-affinity = #DOWN } \lyricmode { foo }
+      \new Lyrics \with { \override VerticalAxisGroup.staff-affinity = #DOWN } \lyricmode { foo }
       \new Staff { c'1 }
       \new Staff { c'1 }
       \new Lyrics \lyricmode { foo }
index 35b583429b738253fcc6c2d7f828b68242774545..96f1c1df12dbdf8ae4b6905ea1c528899c6bc970 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Spacing rules between Staves coexist with rules affecting
@@ -17,9 +17,9 @@ staves is larger than the @code{padding} for associated lyrics."
 \layout {
   \context {
     \Lyrics
-    \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #'((padding . 0.2))
+    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'((padding . 0.2))
   } \context {
     \Staff
-    \override VerticalAxisGroup #'default-staff-staff-spacing = #'((padding . 4))
+    \override VerticalAxisGroup.default-staff-staff-spacing = #'((padding . 4))
   }
 }
index 05566ca81309b458a33ff4c8b3a47ab85986c2bd..9e9ce607f13138df766018adf6b3927e1794978b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "A non-staff line (such as @code{Lyrics}) at the top
@@ -9,9 +9,8 @@ of a system is spaced appropriately."
   ragged-right = ##t
   \context {
     \Lyrics
-    \override VerticalAxisGroup
-      #'nonstaff-nonstaff-spacing #'minimum-distance = #20
-    \override VerticalAxisGroup #'staff-affinity = #DOWN
+    \override VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance = #20
+    \override VerticalAxisGroup.staff-affinity = #DOWN
   }
 }
 <<
index 16e5588d276aa61e532e8702817eadb31fee8893..82d07a9be85894a8b2a57061c122404b2d821df7 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Non-staff lines (such as @code{Lyrics}) can specify
@@ -9,8 +9,7 @@ which they don't have affinity."
 <<
   \new Staff { c'1 }
   \new Lyrics \with {
-    \override VerticalAxisGroup
-      #'nonstaff-unrelatedstaff-spacing #'padding = #'20
+    \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing.padding = #'20
   } \lyricmode { foo }
   \new Staff { c'1 }
 >>
index 34dd5205124f96d9d2a9af9c68da961db7ffae10..5dc6a675764d6f579c008c72342977beace8e54c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "StaffGrouper interacts correctly with \RemoveEmptyStaffContext.
@@ -18,7 +18,7 @@ In both systems, there should be a large space between the staff groups."
 \score {
   <<
     \new StaffGroup = "G1" \with {
-      \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+      \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
     }
     <<
       \new Staff { c'1 \break c'1 \break R1 }
index 3d0ca6b0caaf31d9aaea1b50bee1235d1dd2ff59..865b84b4b6b9c6d389b758bc4aa9fde7341696f5 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "StaffGroups can be nested, in which case the inner StaffGroup wins."
@@ -7,14 +7,14 @@
 \score {
  <<
    \new StaffGroup \with {
-     \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #15
+     \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #15
    }
    <<
      \new Staff {
        c'1
      }
      \new StaffGroup \with {
-       \override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #20
+       \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
      } <<
        \new Staff {
          c'1
index 3fec3cf67b666734747600d4cb53634056a09a4b..b662df5d6638673721a6a360dddb0651cc60e22a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 #(set-default-paper-size "a6")
 
@@ -13,8 +13,7 @@ between staves."
   <<
     \new Staff { c'1 \pageBreak c'1 }
     \new Staff \with {
-      \override VerticalAxisGroup
-        #'default-staff-staff-spacing #'stretchability = #50
+      \override VerticalAxisGroup.default-staff-staff-spacing.stretchability = #50
     } { c'1 c'1 }
     \new Staff { c'1 c'1 }
   >>
index 197dbe38ea721a948df0529a5ad08bbaeecd5114..f62e4722551e4c3f1e72041947f4c32c81efc3a9 100644 (file)
@@ -13,7 +13,7 @@ By setting @code{annotate-spacing}, we can see the effect of each property.
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 #(set-global-staff-size 11)
 
@@ -25,14 +25,12 @@ By setting @code{annotate-spacing}, we can see the effect of each property.
        c\break
 
        \overrideProperty
-       #"Score.NonMusicalPaperColumn"
-       #'line-break-system-details
+       Score.NonMusicalPaperColumn.line-break-system-details
        #'((Y-extent . (-30 . 10)))
        c_"Big bounding box (property Y-extent)"\break
 
        \overrideProperty
-       #"Score.NonMusicalPaperColumn"
-       #'line-break-system-details
+       Score.NonMusicalPaperColumn.line-break-system-details
        #'((refpoint-Y-extent . (-37 . -10)))
        c_\markup {
          \column {
@@ -44,19 +42,17 @@ By setting @code{annotate-spacing}, we can see the effect of each property.
        \break
 
        \overrideProperty
-       #"Score.NonMusicalPaperColumn"
-       #'line-break-system-details
+       Score.NonMusicalPaperColumn.line-break-system-details
        #'((next-padding . 10))
 
        c_"Followed by padding, ie unstretchable space. (property next-padding)" \break
        \overrideProperty
-       #"Score.NonMusicalPaperColumn"
-       #'line-break-system-details
+       Score.NonMusicalPaperColumn.line-break-system-details
        #'((next-space . 20))
        c_"Followed by stretchable space (property next-space)"\break
        c\break
        \overrideProperty
-       #"Score.NonMusicalPaperColumn" #'line-break-system-details
+       Score.NonMusicalPaperColumn.line-break-system-details
        #'((bottom-space . 25.0))
        c_"25 staff space to the bottom of the page. (property bottom-space)"\break
 
index bceef72a62b2bf1438c67bfa054b8589011efdbc..80494988c36b1ed15945bde37d319fcdaf2227ef 100644 (file)
@@ -4,7 +4,7 @@
 first system can be forced to be uniform."
 
 }
-\version "2.16.0"
+\version "2.17.6"
 
 #(set-default-paper-size "a6")
 
@@ -16,7 +16,7 @@ first system can be forced to be uniform."
       c1\break\pageBreak
       c1
       \break\pageBreak
-      \override TextScript #'padding = #20
+      \override TextScript.padding = #20
       c1^"bla"
     }
   }
index 30a2270e9c14a21e367295092285bb21d0424004..e54292fa0b0dbe08a0134902120ffbae81bcfcb9 100644 (file)
@@ -22,6 +22,7 @@ in which case the turn will go after the special barline.
     auto-first-page-number = ##t
     print-page-number = ##t
     print-first-page-number = ##t
+    tagline = ##f
   }
 
   \score {
index 52401ae0ab8fe69fe7b5792b22e04470f4264462..a39a61ca797f0c6c6567ce9903dc4525dff00862 100644 (file)
   ragged-right = ##t
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \relative c' {
-  c4 -\parenthesize -.
+  c2 -\parenthesize -.
 
-  \override ParenthesesItem #'padding = #0.1
+  \parenthesize \breathe
+
+  \override ParenthesesItem.padding = #0.1
   <d \parenthesize fis a> 
 
 }
index 0d3de55492ee57c19502b235624fc1333378a199..430fb2771976fe362d23b935e8749efa8862ab8c 100644 (file)
@@ -1,7 +1,7 @@
 
 \header {
   texidoc ="If the part-combiner shows two separate voices, multi-measure rests
-  are supposed to use the same settings as @code{\voiceOnce} and @code{\voiceTwo}.
+  are supposed to use the same settings as @code{\\voiceOnce} and @code{\\voiceTwo}.
 "
 }
 
index 47d64fd7cc9709717f8dee748f468ca95e7697d9..46894fa0e45e0bbb5ac36ff97537a6b38990912e 100644 (file)
@@ -1,7 +1,7 @@
 
 \header {
   texidoc ="Overrides for the part-combiner. All functions like
-  @code{\partcombineApart} and @code{\partcombineApartOnce} are internally implemented
+  @code{\\partcombineApart} and @code{\\partcombineApartOnce} are internally implemented
   using a dedicated @code{PartCombineForceEvent}.
 "
 }
diff --git a/input/regression/part-combine-mmrest-apart.ly b/input/regression/part-combine-mmrest-apart.ly
new file mode 100644 (file)
index 0000000..9fae671
--- /dev/null
@@ -0,0 +1,35 @@
+\version "2.17.6"
+
+\header {
+  texidoc = "
+The positioning of multimeasure rests in @code{\\partcombineApart}
+passages corresponds with @code{\\voiceOne} and @code{\\voiceTwo} even
+when using non-standard staves.
+"
+}
+
+\layout {
+  indent = 4\cm
+  raggedright = ##t
+}
+
+\new StaffGroup
+<<
+  \new Staff \with
+    { \override StaffSymbol.line-count = #4
+      instrumentName = \markup \typewriter "\\partcombine"
+    }
+  {
+    \partcombine  { R1^"R1" r1^"r1"  \time 2/4 R2^"R2" r2^"r2" }
+    { \partcombineApart R1 r1 \time 2/4 R2 r2 }
+    
+  }
+  \new Staff \with
+    { \override StaffSymbol.line-count = #4
+      instrumentName = \markup \typewriter "<< ... \\\\ ... >>"
+    }
+  <<
+    { R1 r1 \time 2/4 R2 r2 } \\
+    { R1 r1 \time 2/4 R2 r2 }
+  >>
+>>
index a1636a7e6f1202546c70aa12856f122efb5c9b9f..0c1c5ce1951fd7ef37347ff3e023296433d4669d 100644 (file)
@@ -5,14 +5,14 @@ even after a switch, a tuplet ends correctly."
   
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \new Staff <<
   \partcombine
   \relative c'' {
     r2
-    \times 2/3 { g8[ g g] }
-    \times 2/3 { g[ g g] } g1
+    \tuplet 3/2 { g8[ g g] }
+    \tuplet 3/2 { g[ g g] } g1
   }
   \relative c'' { R1 g1 }
 >>
index 37029bae091329fa9d8a86b540f4d2389f2c64d4..1cdd5009e73319210e603f7fde2ff12f36fa400d 100644 (file)
@@ -5,17 +5,17 @@
 
 \paper { ragged-right = ##T }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \score {
   <<
     \new Staff {
       \partcombine
       \relative c'' {
-        \times 2/3 { d4 d d ~ } d2
+        \tuplet 3/2 { d4 d d ~ } d2
       }
       \relative c'' {
-        \times 2/3 { b4 a g ~ } g2
+        \tuplet 3/2 { b4 a g ~ } g2
       }
     }
   >>
index a9cb0e4b8c3ed36dfb8e7f309171fbd15a4a5710..8c4c8d1a129d4425b0e19f70c39f98e42effb984 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header
 {
   texidoc = "The standard piano pedals style comes with Ped symbols.
@@ -14,7 +14,7 @@ at the end of the melody."
   c, d16[  c  c c]  e[ e \sustainOff \sustainOn e e ] f4 \sustainOff 
   g\sustainOn  b \sustainOff c 
   \set Staff.pedalSustainStrings = #'("-" "-P" "P")
-  \override Staff.SustainPedal   #'padding = #-2
+  \override Staff.SustainPedal.padding = #-2
   c, \sustainOn d e \sustainOff \sustainOn f
   \sustainOff g b c
 }
index cf0118a44d3de0a0f0499ae8148551cffb9c0b0f..fc8e69a7e32a5246df1f0a0d1a950645b03e66a7 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header { texidoc = "
 The appearance of phrasing slurs may be changed from solid to dotted or dashed.
 "
@@ -16,7 +16,7 @@ The appearance of phrasing slurs may be changed from solid to dotted or dashed.
   c\( d e  c\) |
   \phrasingSlurDashPattern #0.4 #2.0
   c\( d e  c\) |
-  \once \override Slur #'dash-definition = #'((0 0.25 1 1)
+  \once \override Slur.dash-definition = #'((0 0.25 1 1)
                                               (0.3 0.7 0.4 0.75)
                                               (0.75 1.0 1.0 1.0))
   c\( d e  c\) |
index 5be066d2ce2c73b9f846b45497837c6df47a2c6a..0f5aa8302a2cd4d7d96ac0c3a36f71745bbeac22 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "Phrasing slurs do not collide with tuplet numbers."
@@ -6,7 +6,7 @@
 
 \relative c'' {
   \voiceOne
-  \times 2/3 {
+  \tuplet 3/2 {
     c8\( b c
   }
   a2.\)
index 7ab076858f91c6c8f8ce4f1096319cdbb1e0cf55..8eb6b0b20a84194a95517459d2ed87e0f3a655f7 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.5"
 \header {
 
   texidoc = "Distances between prefatory items (e.g. clef, bar,
@@ -16,11 +16,11 @@ bar-line is different from the start of line.
 
 \relative c'' {
   \set Staff.instrumentName = "fobar"
-  \bar "||:"
+  \bar ".|:-||"
   \key cis \major
   cis4 cis4 cis4 cis4 \clef bass  cis,1
   \clef treble
-  \bar ":|"
+  \bar ":|."
   \key g \minor
   c1
 }
index 911e2384371f14266cd916827a68dc6a8c84be0b..d7929a210a55e62f3beec499944e391ecf65e43d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "Nested properties may be overridden using Scheme list
 syntax.  This test performs two property overrides: the first
@@ -8,13 +8,13 @@ list.
 }
 
 \relative c' {
-  \once \override TextSpanner #'bound-details #'left #'text = #"foo"
+  \once \override TextSpanner.bound-details.left.text = #"foo"
   c4\startTextSpan
-  \once \override Tie #'details #'note-head-gap = #1
+  \once \override Tie.details.note-head-gap = #1
   c4 ~ c c\stopTextSpan
   
-  \once \override TextSpanner #'(bound-details left text) = #"foo"
+  \once \override TextSpanner.bound-details.left.text = #"foo"
   c4\startTextSpan
-  \once \override Tie #'(details note-head-gap) = #1
+  \once \override Tie.details.note-head-gap = #1
   c4 ~ c c\stopTextSpan
 }
index b7fb7f61a48841dbdf2582041e009f46ad52168d..b8d65588423a35b03412a2daae71ca6c616f26eb 100644 (file)
@@ -6,17 +6,17 @@ Scheme list syntax."
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \relative c' {
   f2 \glissando c
-  \override Glissando #'bound-details #'right #'Y = #4
+  \override Glissando.bound-details.right.Y = #4
   f2 \glissando c |
-  \override Glissando #'bound-details #'left #'Y = #-6
+  \override Glissando.bound-details.left.Y = #-6
   f2 \glissando c
-  \revert Glissando #'(bound-details right Y)
+  \revert Glissando.bound-details.right.Y
   f2 \glissando c
-  \revert Glissando #'(bound-details left Y)
+  \revert Glissando.bound-details.left.Y
   f2 \glissando c
 }
 
index 642d18104b8d0bd213f7e3e5abad8e50bc638142..5d5b8f4b5774fbd1e21e3cf3062cb66c0ed073f0 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 \header {
     texidoc = "Once properties take effect during a single time step only."
 }
@@ -8,7 +8,7 @@
 
 \relative c' {
     c4
-    \once \override Stem #'thickness = #5.0
+    \once \override Stem.thickness = #5.0
     c4
     c4
     c4
diff --git a/input/regression/property-unset.ly b/input/regression/property-unset.ly
new file mode 100644 (file)
index 0000000..8268aa2
--- /dev/null
@@ -0,0 +1,34 @@
+\version "2.16.0"
+
+\header{
+
+  texidoc= "@code{\\unset} should be able to unset the
+@samp{DrumStaff}-specific @samp{clefGlyph} equally well as layout
+instruction, in a context definition, or as context modification.  All
+systems here should revert to the @samp{Score}-level violin clef."
+
+}
+
+\layout { ragged-right = ##t }
+\score {
+  \new DrumStaff {
+    \unset DrumStaff.clefGlyph
+    \mark "layout instruction"
+    c c c c
+  }
+}
+
+\score {
+  \new DrumStaff {
+    \mark "context def"
+    c c c c
+  }
+  \layout { \context { \DrumStaff \unset clefGlyph } }
+}
+
+\score {
+  \new DrumStaff \with { \unset clefGlyph } {
+    \mark "context mod"
+    c c c c
+  }
+}
index 1f25719d090caecfe125a0ce84588ec17384e989..b84a83aa527a485facb3856f7ca12037f0e63030 100644 (file)
@@ -8,7 +8,7 @@ quoted. In this example, a 16th rest is not quoted, since
 @code{rest-event} is not in @code{quotedEventTypes}."
 
 }
-\version "2.16.0"
+\version "2.17.6"
 \layout {
     ragged-right = ##t
 }
@@ -33,7 +33,7 @@ original = \relative c'' { c8 d s2 es8 gis8 }
        \set Staff.instrumentName = "orig+quote"        
        \set Staff.quotedEventTypes = #'(note-event articulation-event)
        \new Voice {\voiceOne
-           \override Voice . Beam #'collision-voice-only = ##t
+           \override Voice.Beam.collision-voice-only = ##t
            \original }
        \new Voice {\voiceTwo s4 \quoteDuring #"quoteMe" { s2. } }
     >>
index 3c72a3fbb15b5811176c2e093c0faa2a7160db40..4a7c5d22d7164cd8ee138e17a134f344648d5df5 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The @code{\\quoteDuring} command shall also quote correctly all
@@ -12,7 +12,7 @@
 }
 
 mus = \relative c' {
-  % Acciaccaturas contain a slur and  \override Flag #'stroke-style
+  % Acciaccaturas contain a slur and  \override Flag.stroke-style
   % Thus, we're checking \override here
   c4 \acciaccatura d8 c4
   % Checking \set and \unset
@@ -21,17 +21,17 @@ mus = \relative c' {
 
   \set autoBeaming = ##f
   % Checking \once \override
-  \once \override Stem #'thickness = #8.0 d8
+  \once \override Stem.thickness = #8.0 d8
   % Checking two overrides
-  \override Stem #'thickness = #8.0 \override Flag #'stroke-style = "grace"
+  \override Stem.thickness = #8.0 \override Flag.stroke-style = "grace"
   d8
   % reverting one of them
-  \revert Stem #'thickness d8
+  \revert Stem.thickness d8
   % and the other
-  \revert Flag #'stroke-style c8
+  \revert Flag.stroke-style c8
 
   % checking tweaks
-  c2-\tweak #'color #red ->
+  c2-\tweak color #red ->
 }
 \addQuote "music" \mus
 
index 438cdb822cb8332729d357680edab34321718497..ceec1d58e5924e5484d59251919e9aa2ec596ce7 100644 (file)
@@ -5,8 +5,7 @@
     texidoc = "Quotations take into account the transposition of both
 source and target.  In this example, all instruments play sounding
 central C, the target is a instrument in F.  The target part may be
-@code{\\transpose}d.  In this case, all the pitches (including the
-quoted ones) will transposed as well.  "
+@code{\\transpose}d.  The quoted pitches will stay unchanged."
 
 }
 
index 55798ba5a2b6380506cc9eb7f8818e556523e378..c796d79b3e90c4625ba767f97c24c0f9648421d6 100644 (file)
@@ -3,12 +3,12 @@
   texidoc  ="Tuplet bracket ends properly when quoting."
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \paper { ragged-right = ##t }
 
 \addQuote x {
-   \times 2/3 { a'8 a' a' } a'4 a'2 |
+   \tuplet 3/2 { a'8 a' a' } a'4 a'2 |
 }
 
 \new Staff <<
index 943bc453eb96e2b5a00a58c4df658b33d99301ea..420f8641ba553379681f4e6db03c3c4b5bf70f7c 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
 
@@ -9,7 +9,7 @@
 }
 
 foo = \relative c' {
-  \times 2/3 { c4 c c } \times 2/3 { c4 c c }
+  \tuplet 3/2 { c4 c c } \tuplet 3/2 { c4 c c }
 }
 
 \addQuote "foo" { \foo }
@@ -21,7 +21,7 @@ foo = \relative c' {
 \new Staff
 <<
   \new Voice \transpose c c' {
-    \override Stem #'direction = #UP
+    \override Stem.direction = #UP
     \foo
   }
   \new Voice {
index ffa937775b2c743e39f56d11a66fb8a88d8749c8..aa63a632bd7220baf798c9fb668ca20e3776df32 100644 (file)
@@ -7,7 +7,7 @@ things are quoted. In this example, a 16th rest is not quoted, since
 @code{rest-event} is not in @code{quotedEventTypes}."
 
 }
-\version "2.16.0"
+\version "2.17.6"
 \layout {
     ragged-right = ##t
 }
@@ -35,7 +35,7 @@ original = \relative c'' { c8 d s2 es8 gis8 }
          \new Voice {\voiceTwo
            s4
            \set fontSize = #-4
-           \override Stem #'length-fraction = #(magstep -4)
+           \override Stem.length-fraction = #(magstep -4)
            \quoteDuring #"quoteMe" { \skip 2. }
        }
     >>
index ed1bb1fb92d705c649963dc604730b149c9a5305..d5cdfa85031475cd19c0cb178899136d6b67701b 100644 (file)
@@ -4,10 +4,10 @@
   the alignment depends on which symbols are visible."
 }
 
-\version "2.16.0"
+\version "2.17.6"
   
 \relative c' {
-  \override Score.RehearsalMark #'break-align-symbols = #'(clef key-signature staff-bar)
+  \override Score.RehearsalMark.break-align-symbols = #'(clef key-signature staff-bar)
   c1
   \clef "bass"
   \mark "clef"
index 8350db59c626eb1934d4ce071945d379585b3b32..6472c57a514e9bddc7dae3c10bd92a693f7b93dc 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "RehearsalMarks still align correctly if Mark_engraver is moved to
@@ -21,11 +21,11 @@ another context."
   c1
   \key cis \major
   \clef alto
-  \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+  \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
   \mark "on-key"
   cis
   \key ces \major
-  \override Score.RehearsalMark #'break-align-symbols = #'(clef)
+  \override Score.RehearsalMark.break-align-symbols = #'(clef)
   \clef treble
   \mark "on clef"
   ces
index e2ba0068fc00067e01ed310ffed231aba65f871b..a684113ab73183f2ea363eee9001c4a0cc5ea729 100644 (file)
@@ -7,18 +7,18 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
   
 \relative c' {
   c1 \mark "foo"
   c1
   \key cis \major
   \clef alto
-  \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
+  \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
   \mark "on-key"
   cis
   \key ces \major
-  \override Score.RehearsalMark #'break-align-symbols = #'(clef)
+  \override Score.RehearsalMark.break-align-symbols = #'(clef)
   \clef treble
   \mark "on clef"
   ces
index 3e9d5774973da9d2a37a0228b94b70c0849d94b3..f0abe4d2287306f32747c0ecd42a601be65ef11e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Rehearsal marks with direction DOWN get placed at
@@ -9,8 +9,8 @@ the bottom of the score."
    \new Staff { g'1 }
    \new Staff {
      c'1
-     \once \override Score . RehearsalMark #'break-visibility = #begin-of-line-invisible
-     \once \override Score . RehearsalMark #'direction = #DOWN
+     \once \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
+     \once \override Score.RehearsalMark.direction = #DOWN
      \mark \markup \italic "Fine."
    }
  >>
index b3ff68fded6475924bbfc8255ae310faca7f4001..0fb40e07b424496bb5091d38bf68ee87ba314cc1 100644 (file)
@@ -1,10 +1,18 @@
 \header {
-  texidoc = "Relative mode for repeats uses order of entry."
+  texidoc = "Using repeat unfold within a relative block gives a
+different result from writing the notes out in full.  The first
+system has all the notes within the stave.  In the second, the
+notes get progressively higher."
   }
 \version "2.16.0"
 
 \relative c' {
-  \repeat "unfold" 3
-  { f2 bes2 }
-  \alternative { a1 e b } 
+  c'1^"Using unfold"
+  \repeat unfold 3 { f,2^"Repeated" bes2 }
+  \alternative { { a2_"Alt1" c } { e_"Alt2" c } { b_"Alt3" d } }
+}
+
+\relative c' {
+  c'1^"The same notes, written out"
+  f,2 bes2 a2 c f2 bes2 e c f2 bes2 b d
 }
index 39abb34ffc08dda466ec8ddb83400927f8938aba..285bc85076859eec2ab7b44f3eafc227826570d5 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "
@@ -41,7 +41,7 @@ staffMusic = \new StaffGroup {
   ragged-right = ##t
   \context {
     \Staff
-    \override Beam #'auto-knee-gap = #4.5
+    \override Beam.auto-knee-gap = #4.5
     \RemoveEmptyStaves
   }
 }
index 651147fa2a9a2a4d4d965304f4e5588e43338fa0..9aa077f1b235ecc990b08507ca622f673d8fb937 100644 (file)
@@ -1,9 +1,9 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
 
   texidoc = "
 Rests should not keep staves alive when
-@code{\RemoveEmptyStaffContext} is active.  The
+@code{\\RemoveEmptyStaffContext} is active.  The
 following example should have only one staff.
 "
 
@@ -20,5 +20,5 @@ following example should have only one staff.
  >>
 
  \layout { \context { \RemoveEmptyStaffContext
-     \override VerticalAxisGroup #'remove-first = ##t } }
+     \override VerticalAxisGroup.remove-first = ##t } }
 }
index 8fd1ea0e5226cd6072e19602fef4c550f3d24ce1..baa5fc134f7880e8bf1b979af0b29aa894bad8db 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 
 \header {
   texidoc = "Percent repeats are also centered when there is a grace note in a parallel staff. "
@@ -8,7 +8,7 @@
   ragged-right =##t
 }
 
-\relative <<
+\relative c' <<
   \new Staff { \repeat percent 3 c1} 
   \new Staff { c1 c \grace b8 c1  }
 >>
index d9aafb8596867a37d1be9ca3e6fdd913bfc3b02f..601f310983f72c0fbcef19c1d855a33f54806b92 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "The positioning of dots and slashes in percent repeat
 glyphs can be altered using @code{dot-negative-kern} and
@@ -12,10 +12,10 @@ glyphs can be altered using @code{dot-negative-kern} and
     \repeat percent 2 { d'1 e' }
   }
   \new Staff {
-    \override PercentRepeat #'dot-negative-kern = #1.1
+    \override PercentRepeat.dot-negative-kern = #1.1
     \repeat percent 2 { c'1 }
-    \override DoublePercentRepeat #'dot-negative-kern = #0
-    \override DoublePercentRepeat #'slash-negative-kern = #1
+    \override DoublePercentRepeat.dot-negative-kern = #0
+    \override DoublePercentRepeat.slash-negative-kern = #1
     \repeat percent 2 { d'1 e' }
   }
 >>
index 3fea78a4a8b080a3034e5ca2f78522a19ce730cb..aa8f3cbc35688d5e34b338aac91f4f267a1fe5e1 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "The two dots of a repeat sign should be symmetric
 to the staff centre and avoid staff lines even for exotic staves.
@@ -10,20 +10,20 @@ Test set-global-staff size 10 (with layout-set-staff-size)."
 \score {
   <<
     \context Staff = "s1" \with {
-      \override StaffSymbol #'staff-space = #0.6
+      \override StaffSymbol.staff-space = #0.6
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s2" \with {
-      \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
-      \override StaffSymbol #'staff-space = #0.7
+      \override StaffSymbol.line-positions = #'(-4 -2 0 2)
+      \override StaffSymbol.staff-space = #0.7
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s3" {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
   >>
 }
@@ -31,20 +31,20 @@ Test set-global-staff size 10 (with layout-set-staff-size)."
 \score {
   <<
     \context Staff = "s1" {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s2" \with {
-      \override StaffSymbol #'staff-space = #1.7
-      \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+      \override StaffSymbol.staff-space = #1.7
+      \override StaffSymbol.line-positions = #'(-4 -2 0 2)
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s3" \with {
-      \override StaffSymbol #'staff-space = #3
+      \override StaffSymbol.staff-space = #3
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
   >>
 
index f3ac22d60a432a5e149b3b422e9c847239548d28..a5beda8c699b9153d5ae3c49bc204003f69c8ffd 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "The two dots of a repeat sign should be symmetric
 to the staff centre and avoid staff lines even for exotic staves.
@@ -10,20 +10,20 @@ Test set-global-staff size 30 (with layout-set-staff-size)."
 \score {
   <<
     \context Staff = "s1" \with {
-      \override StaffSymbol #'staff-space = #0.5
+      \override StaffSymbol.staff-space = #0.5
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s2" \with {
-      \override StaffSymbol #'staff-space = #0.6
-      \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+      \override StaffSymbol.staff-space = #0.6
+      \override StaffSymbol.line-positions = #'(-4 -2 0 2)
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s3" {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
   >>
 }
@@ -31,20 +31,20 @@ Test set-global-staff size 30 (with layout-set-staff-size)."
 \score {
   <<
     \context Staff = "s1" {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s2" \with {
-      \override StaffSymbol #'staff-space = #0.33
+      \override StaffSymbol.staff-space = #0.33
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s3" \with {
-      \override StaffSymbol #'staff-space = #0.33
-      \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+      \override StaffSymbol.staff-space = #0.33
+      \override StaffSymbol.line-positions = #'(-4 -2 0 2)
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
   >>
 
index 1686722e01fb50796cfa0de19acb85a5a53002e4..4d386efa326548bdf0c6f29d445241e7597ee33e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "The two dots of a repeat sign should be symmetric
 to the staff centre and avoid staff lines even for exotic staves.
@@ -10,19 +10,19 @@ Test set-global-staff size 10 (with layout-set-staff-size)."
 \score {
   <<
     \context Staff = "s1" \with {
-      \override StaffSymbol #'staff-space = #0.7
+      \override StaffSymbol.staff-space = #0.7
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s2" \with {
-      \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+      \override StaffSymbol.line-positions = #'(-4 -2 0 2)
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s3" {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
   >>
 }
@@ -30,20 +30,20 @@ Test set-global-staff size 10 (with layout-set-staff-size)."
 \score {
   <<
     \context Staff = "s1" {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s2" \with {
-      \override StaffSymbol #'staff-space = #3
-      \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+      \override StaffSymbol.staff-space = #3
+      \override StaffSymbol.line-positions = #'(-4 -2 0 2)
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s3" \with {
-      \override StaffSymbol #'staff-space = #6
+      \override StaffSymbol.staff-space = #6
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
   >>
 
index 0856984dd7a262304978909f9853f4058338c63b..73d267d362de89f550e58a7b691ca3b71d4558ef 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "The two dots of a repeat sign should be symmetric
 to the staff centre and avoid staff lines even for exotic staves.
@@ -8,19 +8,19 @@ Test layout-set-staff-size."
 \score {
   <<
     \context Staff = "s1" \with {
-      \override StaffSymbol #'staff-space = #0.3
+      \override StaffSymbol.staff-space = #0.3
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s2" \with {
-      \override StaffSymbol #'staff-space = #0.5
+      \override StaffSymbol.staff-space = #0.5
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s3" {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
   >>
 
@@ -33,19 +33,19 @@ Test layout-set-staff-size."
 {
   <<
     \context Staff = "s1" \with {
-      \override StaffSymbol #'staff-space = #0.5
+      \override StaffSymbol.staff-space = #0.5
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s2" \with {
-      \override StaffSymbol #'staff-space = #0.6
+      \override StaffSymbol.staff-space = #0.6
     } {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
 
     \context Staff = "s3" {
-      s1 \bar ":|"
+      s1 \bar ":|."
     }
   >>
 }
index b40c08d5908e6e1d7f5cd0f7301171fad2f46266..dfe00bfc55d8003779cf8abc1be04f4903219422 100644 (file)
@@ -1,11 +1,11 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "The two dots of a repeat sign should be symmetric
 to the staff centre and avoid staff lines even for exotic staves."
 }
 
 
-mus = \context Voice { \relative f' { d e f g \bar ":|" } }
+mus = \context Voice { \relative f' { d e f g \bar ":|." } }
 
 \new Staff {
   <<
@@ -15,7 +15,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-6 -4 -2 0 2)
+  \override StaffSymbol.line-positions = #'(-6 -4 -2 0 2)
 } {
   <<
     \clef french
@@ -25,7 +25,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-count = #4
+  \override StaffSymbol.line-count = #4
 } {
   <<
     \mus
@@ -34,7 +34,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-2 0 2 4)
+  \override StaffSymbol.line-positions = #'(-2 0 2 4)
 } {
   <<
     \mus
@@ -43,7 +43,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-8 -4)
+  \override StaffSymbol.line-positions = #'(-8 -4)
 } {
   <<
     \clef french
@@ -53,8 +53,8 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-2 0)
-  \override StaffSymbol #'staff-space = #1.5
+  \override StaffSymbol.line-positions = #'(-2 0)
+  \override StaffSymbol.staff-space = #1.5
 } {
   <<
     \mus
@@ -63,7 +63,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-2 0)
+  \override StaffSymbol.line-positions = #'(-2 0)
 } {
   <<
     \mus
@@ -72,7 +72,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-2.9 -2)
+  \override StaffSymbol.line-positions = #'(-2.9 -2)
 } {
   <<
     \mus
@@ -81,7 +81,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-4 -3 -2)
+  \override StaffSymbol.line-positions = #'(-4 -3 -2)
 } {
   <<
     \mus
@@ -90,7 +90,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-6 -5 -2 0 3 5)
+  \override StaffSymbol.line-positions = #'(-6 -5 -2 0 3 5)
 } {
   <<
     \mus
@@ -99,8 +99,8 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-4 -2 -1)
-  \override StaffSymbol #'staff-space = #1.5
+  \override StaffSymbol.line-positions = #'(-4 -2 -1)
+  \override StaffSymbol.staff-space = #1.5
 } {
   <<
     \mus
@@ -109,7 +109,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-10 -2 6 14)
+  \override StaffSymbol.line-positions = #'(-10 -2 6 14)
 } {
   <<
     \mus
@@ -118,7 +118,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-5 -4 -2 2 4 6)
+  \override StaffSymbol.line-positions = #'(-5 -4 -2 2 4 6)
 } {
   <<
     \mus
@@ -127,7 +127,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'thickness = #4
+  \override StaffSymbol.thickness = #4
 } {
   <<
     \clef french
@@ -139,7 +139,7 @@ mus = \context Voice { \relative f' { d e f g \bar ":|" } }
 }
 
 \new Staff \with {
-  \override StaffSymbol #'line-positions = #'(-2)
+  \override StaffSymbol.line-positions = #'(-2)
 } {
   <<
     \mus
index 0daf8a185e01b555d58f7b15bf9a4bba257fc443..3c0decb5e3ddd6c096cb5d5ebf914ffd0fe775d7 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "Beat repeats for patterns containing mixed durations use
@@ -10,7 +10,7 @@ a double percent symbol."
     c8. <d f>16
   }
   \repeat percent 2 {
-    \times 2/3 {
+    \tuplet 3/2 {
       r8 d e
     }
     c4
index d2be3073b3bccd2859697e6dabb7a080d890ea08..9980affc9d224f793a13669bcb661c20715fd4b3 100644 (file)
@@ -6,11 +6,11 @@ collisions can be combined."
 
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
 \layout { ragged-right=##t }
 
-\new Staff \relative
+\new Staff \relative c'
 <<
   {  s8 f4 } \\
   {  <f, a>8[ r <a d>] }
index 16e19464a108e672726b43cad3ca3fef30c7b84a..24cc53d8c8695152a5f3b4b80f882c986df41717 100644 (file)
@@ -3,16 +3,16 @@
 account properly."
 }
 
-\version "2.16.0"
+\version "2.17.6"
 \paper {
   ragged-right = ##t
 }
 
 
 \relative c''' {
-  \override Rest #'direction = #UP
+  \override Rest.direction = #UP
   \stemDown b8[ r b]
-  \override Rest #'direction = #DOWN
+  \override Rest.direction = #DOWN
   \stemDown b8[ r b]
 }
 
index 94eb2bdaac25acc53dfe15eb866bc0b729748624..f06bda4a7e3831e6afa744049f5b4756b59491ae 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
 texidoc = "Breve, whole and half rests moving outside the staff should get
 ledger lines."
@@ -9,7 +9,7 @@ ledger lines."
 
 rPos =
 #(define-music-function (parser location y) (number?)
-  #{ \override Rest #'staff-position = #y #})
+  #{ \override Rest.staff-position = #y #})
 
 {
   \set Score.timing = ##f
index 8f43fb5b171d97593dc292d3d7e067ec36966e74..4e8a039e2af1da057ba1a747b29f88255feb12f9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "half rests should lie on a staff line, whole rests should hang
@@ -42,17 +42,17 @@ mus = {
   }
 
   \new Staff {
-    \override Staff.StaffSymbol #'line-positions = #'(-4 -2 0 2)
+    \override Staff.StaffSymbol.line-positions = #'(-4 -2 0 2)
     \mus
   }
 
   \new Staff {
-    \override Staff.StaffSymbol #'line-count = #4
+    \override Staff.StaffSymbol.line-count = #4
     \mus
   }
 
   \new Staff {
-    \override Staff.StaffSymbol #'line-positions = #'(-4 -2 1 5)
+    \override Staff.StaffSymbol.line-positions = #'(-4 -2 1 5)
     \mus
   }
 
diff --git a/input/regression/rest-positioning.ly b/input/regression/rest-positioning.ly
new file mode 100644 (file)
index 0000000..a34b773
--- /dev/null
@@ -0,0 +1,36 @@
+\version "2.17.16"
+
+\header {
+  texidoc = "This shows the single and multi voice rest positions for
+various standard and tab staffs."
+}
+
+
+\layout {
+  ragged-right = ##t
+}
+
+mus = { \mark "R1*7" R1*7 \mark "R1" R1 \mark "r1" r1 \mark "r2" r2 \mark "r4" r4*2 }
+
+\score {
+  {
+    \compressFullBarRests
+    \new StaffGroup <<
+      $@(map
+         (lambda (n)
+           #{
+        \new Staff \with { \override StaffSymbol.line-count = $n }
+        { \mus << \mus \\ \mus >> }
+           #})
+         (iota 8))
+      $@(map
+          (lambda (x)
+            #{
+             \new TabStaff \with { stringTunings = #x }
+             { \mus << \mus \\ \mus >> }
+           #})
+          (list mandolin-tuning banjo-c-tuning guitar-tuning))
+    >>
+  }
+  \layout { \tabFullNotation }
+}
index 678844e2a85eeb3ca5ac49dcf4e01c402490717d..fd1609f1b6a279a66430ac7e1599b5ab54b44139 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
 
@@ -19,7 +19,7 @@ informations from top- and booklevel stack correctly."
           (let* ((scmpitch (ly:make-pitch 0 pitch 0))
                  (music (make-music 'EventChord
                           'elements (list (make-music 'NoteEvent
-                                            'duration (ly:make-duration 2 0 1 1)
+                                            'duration (ly:make-duration 2 0 1/1)
                                             'pitch scmpitch))))
                  (score (scorify-music music parser))
                  (layout (ly:output-def-clone $defaultlayout))
@@ -31,9 +31,8 @@ informations from top- and booklevel stack correctly."
             (set! pitch (modulo (1+ pitch) 7)))))
 
 oneNoteScore =
-#(define-music-function (parser location) ()
-   (add-one-note-score parser)
-   (make-music 'Music 'void #t))
+#(define-void-function (parser location) ()
+   (add-one-note-score parser))
 
 %%%
 
index a83bec87aa74c642c8e21e115aefeb1307ee4667..14e095e9549fea00fa45554183e33dd510e0b49b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Use @code{define-event-class}, scheme engraver methods,
@@ -6,27 +6,7 @@ and grob creation methods to create a fully functional text spanner
 in scheme."
 }
 
-#(define my-grob-descriptions '())
-
-#(define my-event-classes (ly:make-context-mod))
-
-defineEventClass =
-#(define-void-function (parser location class parent)
-   (symbol? symbol?)
-   (ly:add-context-mod
-    my-event-classes
-    `(apply
-      ,(lambda (context class parent)
-        (ly:context-set-property!
-         context
-         'EventClasses
-         (event-class-cons
-          class
-          parent
-          (ly:context-property context 'EventClasses '()))))
-      ,class ,parent)))
-
-\defineEventClass #'scheme-text-span-event #'span-event
+#(define-event-class 'scheme-text-span-event 'span-event)
 
 #(define (add-grob-definition grob-name grob-entry)
    (let* ((meta-entry   (assoc-get 'meta grob-entry))
@@ -49,9 +29,9 @@ defineEventClass =
      (set! meta-entry (assoc-set! meta-entry 'interfaces
                                   ifaces-entry))
      (set! grob-entry (assoc-set! grob-entry 'meta meta-entry))
-     (set! my-grob-descriptions
+     (set! all-grob-descriptions
            (cons (cons grob-name grob-entry)
-                 my-grob-descriptions))))
+                 all-grob-descriptions))))
 
 #(add-grob-definition
   'SchemeTextSpanner
@@ -126,66 +106,65 @@ start and stop.")
          grob
          (if (eq? axis X)
              ly:side-position-interface::x-aligned-side
-             ly:side-position-interface::y-aligned-side)
+             side-position-interface::y-aligned-side)
          (axis-offset-symbol axis)))))
 
 schemeTextSpannerEngraver =
 #(lambda (context)
    (let ((span '())
          (finished '())
-         (current-event '())
-         (event-drul '(() . ())))
+         (event-start '())
+         (event-stop '()))
      (make-engraver
       (listeners ((scheme-text-span-event engraver event)
-                 (if (= START (ly:event-property event 'span-direction))
-                     (set-car! event-drul event)
-                     (set-cdr! event-drul event))))
+                  (if (= START (ly:event-property event 'span-direction))
+                      (set! event-start event)
+                      (set! event-stop event))))
       (acknowledgers ((note-column-interface engraver grob source-engraver)
-                     (if (ly:spanner? span)
-                         (begin
-                           (ly:pointer-group-interface::add-grob span 'note-columns grob)
-                           (add-bound-item span grob)))
-                     (if (ly:spanner? finished)
-                         (begin
-                           (ly:pointer-group-interface::add-grob finished 'note-columns grob)
-                           (add-bound-item finished grob)))))
+                      (if (ly:spanner? span)
+                          (begin
+                            (ly:pointer-group-interface::add-grob span 'note-columns grob)
+                            (add-bound-item span grob)))
+                      (if (ly:spanner? finished)
+                          (begin
+                            (ly:pointer-group-interface::add-grob finished 'note-columns grob)
+                            (add-bound-item finished grob)))))
       ((process-music trans)
-       (if (ly:stream-event? (cdr event-drul))
-          (if (null? span)
-              (ly:warning "You're trying to end a scheme text spanner but you haven't started one.")
-              (begin (set! finished span)
-                     (ly:engraver-announce-end-grob trans finished current-event)
-                     (set! span '())
-                     (set! current-event '())
-                     (set-cdr! event-drul '()))))
-       (if (ly:stream-event? (car event-drul))
-          (begin (set! current-event (car event-drul))
-                 (set! span (ly:engraver-make-grob trans 'SchemeTextSpanner current-event))
-                 (set-axis! span Y)
-                 (set-car! event-drul '()))))
+       (if (ly:stream-event? event-stop)
+           (if (null? span)
+               (ly:warning "You're trying to end a scheme text spanner but you haven't started one.")
+               (begin (set! finished span)
+                      (ly:engraver-announce-end-grob trans finished event-start)
+                      (set! span '())
+                      (set! event-stop '()))))
+       (if (ly:stream-event? event-start)
+           (begin (set! span (ly:engraver-make-grob trans 'SchemeTextSpanner event-start))
+                  (set-axis! span Y)
+                  (set! event-start '()))))
       ((stop-translation-timestep trans)
        (if (and (ly:spanner? span)
-               (null? (ly:spanner-bound span LEFT)))
-          (set! (ly:spanner-bound span LEFT)
-                (ly:context-property context 'currentMusicalColumn)))
+                (null? (ly:spanner-bound span LEFT)))
+           (set! (ly:spanner-bound span LEFT)
+                 (ly:context-property context 'currentMusicalColumn)))
        (if (ly:spanner? finished)
-          (begin
-            (if (null? (ly:spanner-bound finished RIGHT))
-                (set! (ly:spanner-bound finished RIGHT)
-                      (ly:context-property context 'currentMusicalColumn)))
-            (set! finished '())
-            (set! event-drul '(() . ())))))
+           (begin
+             (if (null? (ly:spanner-bound finished RIGHT))
+                 (set! (ly:spanner-bound finished RIGHT)
+                       (ly:context-property context 'currentMusicalColumn)))
+             (set! finished '())
+             (set! event-start '())
+             (set! event-stop '()))))
       ((finalize trans)
        (if (ly:spanner? finished)
-          (begin
-            (if (null? (ly:spanner-bound finished RIGHT))
-                (set! (ly:spanner-bound finished RIGHT)
-                      (ly:context-property context 'currentMusicalColumn)))
-            (set! finished '())))
+           (begin
+             (if (null? (ly:spanner-bound finished RIGHT))
+                 (set! (ly:spanner-bound finished RIGHT)
+                       (ly:context-property context 'currentMusicalColumn)))
+             (set! finished '())))
        (if (ly:spanner? span)
-          (begin
-            (ly:warning "I think there's a dangling scheme text spanner :-(")
-            (ly:grob-suicide! span)
+           (begin
+             (ly:warning "I think there's a dangling scheme text spanner :-(")
+             (ly:grob-suicide! span)
             (set! span '())))))))
 
 schemeTextSpannerStart =
@@ -197,8 +176,7 @@ schemeTextSpannerEnd =
 \layout {
   \context {
     \Global
-    \grobdescriptions #my-grob-descriptions
-    #my-event-classes
+    \grobdescriptions #all-grob-descriptions
   }
   \context {
     \Voice
@@ -210,7 +188,7 @@ schemeTextSpannerEnd =
   a4 b\schemeTextSpannerStart c d |
   \repeat unfold 20 { a4 b c d | }
   a4 b c\schemeTextSpannerEnd d |
-  \override SchemeTextSpanner #'to-barline = ##t
+  \override SchemeTextSpanner.to-barline = ##t
   a4\schemeTextSpannerStart b d c |
   \repeat unfold 20 { a4 b c d | }
   a1\schemeTextSpannerEnd |
index ad625693e0ae5cb9d4884ab69f7b741d0e6ae5bc..88f8f72f02524535330d94df8dc9bfa4001cc4a3 100644 (file)
@@ -7,12 +7,12 @@ means centered on the stem).
 "
 }
 
-\version "2.16.0"
+\version "2.17.6"
 \relative c''
 {
-  \override Script #'toward-stem-shift = #0.0
+  \override Script.toward-stem-shift = #0.0
   a4^. c_.
 
-  \override Script #'toward-stem-shift = #1.0
+  \override Script.toward-stem-shift = #1.0
   a4^. c_.
 }
index ad6e9565f9088032e3fd79bfcad2186a0d4e9ee8..d307d9cf7bd421d8a7e8712276ac1c14f0ab349a 100644 (file)
@@ -8,13 +8,13 @@ The scripts should not be folded under the time signature.
 "
   
 }
-\version "2.16.0"
+\version "2.17.15"
 
 \paper {
   ragged-right = ##t
 }
 
-\relative 
+\relative c' 
 {
   \set stringNumberOrientations = #'(left) 
   \set fingeringOrientations = #'(left) 
diff --git a/input/regression/script-tie-collision.ly b/input/regression/script-tie-collision.ly
new file mode 100644 (file)
index 0000000..0b1c837
--- /dev/null
@@ -0,0 +1,23 @@
+\version "2.17.2"
+
+\header {
+  texidoc = "Scripts avoid ties.
+"
+}
+
+% Managing what note heads' scripts have been accounted for in
+% the Tie_engraver is tricky.
+% This regtest tries to confuse it with various configurations
+% Of notes with and without ties, with multiple scripts, etc..
+
+\relative c''' {
+  r2. c4~-> | c-> r2. |
+  r2. c4-> | c-> r2. |
+  r2. c4~-> | c r2. |
+  r2. c4~ | c-> r2. | \break
+  r2. <g-- c-> >4--~ | <g-- c>-> ~ <g c---_>-> r2 |
+  r2. c4~ | c-> ~ c-> r2 |
+  r2. c4~-> | c ~ c-> r2 |
+  r2. c4~-> | c-> ~ c r2 |
+  r2. c4-> |
+}
diff --git a/input/regression/semi-tie-cross-staff.ly b/input/regression/semi-tie-cross-staff.ly
new file mode 100644 (file)
index 0000000..68d72f5
--- /dev/null
@@ -0,0 +1,23 @@
+\version "2.17.18"
+
+\header {
+  texidoc = "Cross-staff @code{RepeatTie} and @code{LaissezVibrerTie}
+do not trigger programming errors for circular dependencies in direction.
+"
+}
+
+<<
+  \new Staff = "up" \relative c' {
+    f8
+    \change Staff = "down"
+    c\laissezVibrer eeses
+    \change Staff = "up"
+    f
+    f8
+    \change Staff = "down"
+    c eeses!\repeatTie
+    \change Staff = "up"
+    f
+  }
+  \new Staff = "down" { \clef bass s1 }
+>>
index 2566eb9c217b145de1138a446efd2e0dee3b9011..ad65384e707b321fd8b82def4ad5cfd39db3debf 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.16.0"
+\version "2.17.15"
 
 \header {
 
-  texidoc = "@code{\once \set} should change a context property value for just one timestep
+  texidoc = "@code{\\once \\set} should change a context property value for just one timestep
 and then return to the previous value."
 
 }
-\relative {
+\relative c' {
   \set fingeringOrientations = #'(left)
   <e-1>1 |
   \once \set fingeringOrientations = #'(right)
index 6e8bda777443df88ea62d2e680ecb4b49dc77c0a..c76991235cf9b753fc97ce04631913f6a76c5b09 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "In addition to @code{Slur}, the music function @code{\\shape} works
@@ -15,8 +15,8 @@ function."
 \relative c'' {
   % PhrasingSlur
   d4\( d' b g g,8 f' e d c2\)
-  \override PhrasingSlur #'color = #blue
-  \shape PhrasingSlur #'((0 . -2) (-1 . 3.5) (0.5 . 0.5) (0 . -2.5))
+  \override PhrasingSlur.color = #blue
+  \shape #'((0 . -2) (-1 . 3.5) (0.5 . 0.5) (0 . -2.5)) PhrasingSlur
   d4\( d' b g g,8 f' e d c2\)
   \break
 
@@ -24,8 +24,8 @@ function."
   cis1~
   \break
   cis
-  \override Tie #'color = #blue
-  \shape Tie #'(() ((0 . -0.9) (0 . -0.5) (0 . -0.5) (0 . -0.9)))
+  \override Tie.color = #blue
+  \shape #'(() ((0 . -0.9) (0 . -0.5) (0 . -0.5) (0 . -0.9))) Tie
   cis~
   \break
   cis
@@ -33,14 +33,14 @@ function."
 
   % LaissezVibrerTie
   c\laissezVibrer
-  \override LaissezVibrerTie #'color = #blue
-  \shape LaissezVibrerTie #'((0 . 0) (0.5 . 0.2) (1.5 . 0.2) (2 . 0))
+  \override LaissezVibrerTie.color = #blue
+  \shape #'((0 . 0) (0.5 . 0.2) (1.5 . 0.2) (2 . 0)) LaissezVibrerTie
   c\laissezVibrer
   \break
 
   % RepeatTie
   c\repeatTie
-  \override RepeatTie #'color = #blue
-  \shape RepeatTie #'((-1 . 0) (-0.7 . 0) (-0.3 . 0) (0 . 0))
+  \override RepeatTie.color = #blue
+  \shape #'((-1 . 0) (-0.7 . 0) (-0.3 . 0) (0 . 0)) RepeatTie
   c\repeatTie
 }
index 8b4ad53a6d683008c0dc0769a3c644a12fde3aaf..3427965c34fea16581bdf23e8a69cdead9a3e76f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The control points of a broken or unbroken slur may be offset by
 
 % modified
 \relative c'' {
-  \override Slur #'color = #blue
-  \shape Slur #'((0 . -2) (-1 . 3.5) (0.5 . 0.5) (0 . -2.5))
+  \override Slur.color = #blue
+  \shape #'((0 . -2) (-1 . 3.5) (0.5 . 0.5) (0 . -2.5)) Slur
   d4( d' b g g,8  f' e d c2)
-  \shape Slur #'(
+  \shape #'(
    ((0 . -2.5) (0 . 1.5) (0 . 1) (0 . -0.5))
    ((1 . 2.5) (0 . 1.5) (0 . 1) (0 . 0))
-  )
+  ) Slur
   d4( d' b g
   \break
   g,8 f' e d c2)
index 057cd93ede574b67691570a0ab908f712c76bd6e..e59a3f4f6d35381b6469154f09ca05b731986f66 100644 (file)
@@ -3,7 +3,7 @@
 \header {
 
   texidoc = "
-  @code{\shiftDurations} can use negative dot values without causing
+  @code{\\shiftDurations} can use negative dot values without causing
   a crash.
   "
 }
diff --git a/input/regression/shorthands.ly b/input/regression/shorthands.ly
new file mode 100644 (file)
index 0000000..e1a7af5
--- /dev/null
@@ -0,0 +1,28 @@
+\version "2.17.25"
+
+\header {
+
+texidoc = "A number of shorthands like @code{(}, @code{)}, @code{|},
+@code{[}, @code{]}, @code{~}, @code{\\(}, @code{\\)} and others can be
+redefined like normal commands.  @file{ly/declarations-init.ly} serves
+as a regtest for a number of them.  This test just demonstrates
+replacing @code{(} and @code{)} with melismata commands which are
+@emph{not} articulations."
+
+}
+
+\layout { ragged-right = ##t }
+
+"\\{" = (
+"\\}" = )
+"(" = \melisma
+")" = \melismaEnd
+
+\new Staff <<
+  \relative c' {
+    c8 \{ d e f \} % slurred
+    g ( a b c ) % no slur, but with melisma
+    c,1 \bar "|."
+   }
+   \addlyrics { Li -- ly -- pond. }
+>>
index c65c57075bde265d6824cc02f884c707782f5c8f..57e6d1a8305b515007b17cc8a10570ae774a5878 100644 (file)
@@ -7,9 +7,9 @@ last as long as their arguments."
   ragged-right = ##T
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
-\relative
+\relative c'
 <<
   \new Staff {
     c\breve    f4 r2.
index d33f2c5ac2b34501e6a60ebbed70cc2a54dec6f4..171cae4084d04ff7012968d9002d36d27940622c 100644 (file)
@@ -1,10 +1,4 @@
 \version "2.16.0"
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
-#(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
 #(ly:expect-warning (_ "system with empty extent"))
 #(ly:expect-warning (_ "didn't find a vertical alignment in this system"))
 
index 8849fa490745873330815a859feec95bde1c9916..b2f6262915bba100d6d47f61e08d9c116466de9b 100644 (file)
@@ -7,15 +7,15 @@
 }
 
 
-\version "2.16.0"
+\version "2.17.11"
 \paper {
   ragged-right = ##T
 }
 
 \new Staff \relative c' {
   \set Score.skipTypesetting = ##t
-  \times 2/3 { c8 c c } \times 2/3 { c c c }
-  \times 2/3 { c c c } \times 2/3 { c c c}
+  \tuplet 3/2 { c8 c c } \tuplet 3/2 { c c c }
+  \tuplet 3/2 { c c c } \tuplet 3/2 { c c c}
   \set Score.skipTypesetting = ##f
   d1 \break
   c
index 4862ab71dd8d9ca83e2e0647e2c08905d4345581..a7c0131c84a8c4fcbd450fcba2aebd1615d6b8dc 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   texidoc = "
@@ -12,7 +12,7 @@ interleaved with the high notes from the next system.
 \book {
   \score {
     {
-      \override Staff.TimeSignature #'stencil =  ##f
+      \omit Staff.TimeSignature
       \repeat unfold 3 { <c'''-1 e'''-3 g'''-5> c' <c,-1 e,-3 g,-5> c' \break}
     }
     \layout {
@@ -20,7 +20,7 @@ interleaved with the high notes from the next system.
       ragged-right = ##t
       \context {
         \Score
-       \override System #'skyline-horizontal-padding = #1.5
+       \override System.skyline-horizontal-padding = #3.0
       }
     }
   }
diff --git a/input/regression/skyline-point-extent.ly b/input/regression/skyline-point-extent.ly
new file mode 100644 (file)
index 0000000..ceb27b2
--- /dev/null
@@ -0,0 +1,22 @@
+\version "2.17.15"
+
+\header {
+  texidoc = "The @code{Script} grobs should follow the descending melody line,
+even though the @code{NoteHead} stencils are point stencils. The
+@code{Stem_engraver} is removed so that the only
+@code{side-support-element} is the @code{NoteHead}.
+"
+}
+
+\layout {
+  \context {
+    \Voice
+    \remove "Stem_engraver"
+  }
+}
+
+{
+  \override Script #'direction = #DOWN
+  \override NoteHead #'stencil = #point-stencil
+  c'2.-> b8-- a-- g1->
+}
index 748aa68dfc201ea9f09bbefec31b5d71fd4350fd..49c03760925acfffa19a3a3cd0e44d313b38c0a2 100644 (file)
@@ -5,13 +5,13 @@ using a skyline algorithm so that they don't collide with other objects."
 
 \layout {ragged-right = ##t}
 
-\version "2.16.0"
+\version "2.17.6"
 \relative c''' {
-  \override Score.PaperColumn #'keep-inside-line = ##f
-  \override TextScript #'outside-staff-priority = #2
-  \override DynamicLineSpanner #'outside-staff-priority = #1
+  \override Score.PaperColumn.keep-inside-line = ##f
+  \override TextScript.outside-staff-priority = #2
+  \override DynamicLineSpanner.outside-staff-priority = #1
   c
-  \once \override TextScript #'self-alignment-X = #CENTER
+  \once \override TextScript.self-alignment-X = #CENTER
   a,^"this doesn't collide with the c"
   b^"this goes above the previous markup"
   a8_"this goes below the dynamic"
index aa1813e05cd1535dc9c244e8851e5b791cde7b56..81f31fc0783afc58ace3ecdc52921bbd907014fb 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.28"
 
 \header{
 texidoc="
@@ -24,7 +24,7 @@ in unbroken state.
     \time 4/4
     << d1_(\trill
        { s2 \grace {
-          c16[ d] 
+          c16 d 
        } }
      >>
     \break 
index 12c9c1f7a92683ec2e2df2270a361ff14bac9ff0..834696a5be94c28859b946f548f8fb49d98f48c2 100644 (file)
@@ -1,13 +1,15 @@
-\version "2.16.0"
+\version "2.17.25"
 
 \header {
-  texidoc = "Slurs that depend on a cross-staff beam are not calculated until after line-breaking."
+  texidoc = "Slurs that depend on a cross-staff beam are not calculated until
+after line-breaking, and after inside-going articulations have been placed."
 }
 
 \paper { ragged-right=##t }
 \score {
     \new PianoStaff <<
-    \context Staff = rh \relative c'' { c8([ d) \change Staff = lh c,] }
-    \context Staff = lh { s4. }
+    \context Staff = rh \relative c'' { c8([ d) \change Staff = lh c,] r
+    \stemDown f'8 \change Staff = rh f_( \change Staff = lh f_\marcato f)}
+    \context Staff = lh { s1 }
     >>
 }
index 0bcf3691a710d24e9a938894725faa8aa62a05f7..bf8235d5e2020e0f6536318a4c046d7047ae5f47 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {texidoc = "@cindex Slur, dotted, dashed
 The appearance of slurs may be changed from solid to dotted or dashed.
 "
@@ -18,7 +18,7 @@ The appearance of slurs may be changed from solid to dotted or dashed.
   c( d e c) |
   \slurDashPattern #0.4 #2.0
   c( d e c) |
-  \once \override Slur #'dash-definition = #'((0 0.25 1 1)
+  \once \override Slur.dash-definition = #'((0 0.25 1 1)
                                               (0.3 0.7 0.4 0.75)
                                               (0.75 1.0 1.0 1.0))
   c( d e c) |
index 6e76f750c70234a7bc3a58867180365474e602b0..a3739a48b3fa2d7f6df72a540198c1a9798637cc 100644 (file)
@@ -4,14 +4,14 @@
   texidoc = "Dynamics avoid collision with slur."
 }
 
-\version "2.16.0"
+\version "2.17.15"
 \layout {
   indent = 0\mm
   ragged-right = ##t
 }
-\relative
+\relative c'
 {
-  b(^"dyn outside" b f'\p b,)
+  b( b f'\p b,)
 
   g( d'\< d \! g,)
 }
index 786b23e735469e79a93c6c66b6c90e7352e530b2..a1380cf53972ff4a7e2170a82d0d09e9e577d417 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
 
@@ -18,7 +18,7 @@ baseWalk =  \relative c {
     \slurUp
     d,8[( a' d f] a[ d f d] a[ f d  a)]
     d,8[( a' d f] a[ a a d] f[ d d,  a)]
-    \once\override Slur #'eccentricity = #6.0
+    \once\override Slur.eccentricity = #6.0
     d,8[( a' d f] a[ a a d] f[ d d,  a)]
 }
 
index 49613d4ba0988d70316d888113d28f8fe530d541..4a9cf8d94fa1ab104a960882b85aa218564e5639 100644 (file)
@@ -6,11 +6,11 @@ positioning of the slur. It selects the slur configuration closest to
 the given pair. "
   
   }
-\version "2.16.0"
+\version "2.17.6"
 
 \paper { ragged-right = ##T }
 \relative c' {
-  \override Slur #'positions = #'(-4 . -5)
+  \override Slur.positions = #'(-4 . -5)
   e( f g)
 }
 
index 87b544202f9d421574b1dfdc2078b80a72d68ed7..4c2f6ae7f1b9ade1f7d888fb9da733d3a9f6d4bf 100644 (file)
@@ -12,7 +12,7 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.28"
 \layout {
     ragged-right = ##t
 %    #(define debug-slur-scoring #t)
@@ -47,7 +47,7 @@
     | b='2( a4) s4
     | b='4.( c8) s2
     | << c=''1_(
-       { s2 \grace { b16[ c] } } >>
+       { s2 \grace { b16 c } } >>
     \break
     b4)
     e=''4.( c8) s4
@@ -69,7 +69,7 @@
        f=''2( d4 f | g c a f | d c f2 | f1) |
     }
 
-%    \override Slur #'eccentricity = #-2
+%    \override Slur.eccentricity = #-2
     c=''8 ( d[ b f d] a'[ c])
 }
 
index 56c0b8138fc3ac801b95317a77239217225efb27..a7ce4e3b13ea8e777d78c2e1d675f40b1b4bd1fc 100644 (file)
@@ -8,17 +8,17 @@
 }
 
 
-\version "2.16.0"
+\version "2.17.6"
 
 \layout { ragged-right = ##t }
 
 \relative c''{
     \clef alto
     \slurUp
-    \override Script #'slur-padding = #0.2
-    \override Script #'avoid-slur = #'inside
+    \override Script.slur-padding = #0.2
+    \override Script.avoid-slur = #'inside
     c4(^\downbow b) 
-    \override Script #'avoid-slur = #'around
+    \override Script.avoid-slur = #'around
     c4(^\downbow b) 
     c4^\downbow b 
 }
index b2fb1c50ab63d9b198eb6fe7d869538fdc6bbe97..8ba9e19b803ed223ae7148e817449fe8b0fbe915 100644 (file)
@@ -6,17 +6,17 @@
     slur responds appropriately if a script is moved."
 }
 
-\version "2.16.0"
+\version "2.17.15"
 \layout {
   indent = 0\mm
   ragged-right = ##t
 }
-\relative
+\relative c'
 {
   b4-.( b-.)
-  \once \override Script #'padding = #1.5
+  \once \override Script.padding = #1.5
   b-.( b-.)
   b_\downbow( b_\downbow)
-  \once \override Script #'padding = #1.5
+  \once \override Script.padding = #1.5
   b_\downbow( b_\downbow)
 }
index 5d3304f382f2f3e46fad3f8fe5c17deca1c4a94b..8a43894cd5e0eb534e0c5005e3c11f0a3a8113d6 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "A slur's shift region is automatically made
@@ -6,5 +6,5 @@ higher to accommodate extra encompass elements."
 }
 
 \relative c' {
-  c'2( \times 2/3 { g4 e c) }
+  c'2( \tuplet 3/2 { g4 e c) }
 }
index 3296fefa1d48424e96525a47075c70cf47e854c8..202ea32713f52851c25279216e45042f23630aaa 100644 (file)
@@ -5,7 +5,7 @@ This may not work if the slur starts after the tuplet.  "
   
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \paper {
   ragged-right = ##t
@@ -14,10 +14,10 @@ This may not work if the slur starts after the tuplet.  "
 
 \relative c' {
   \slurUp
-  \override TupletBracket #'bracket-visibility = ##f
-  \override Slur #'(details region-size)  = #6
+  \override TupletBracket.bracket-visibility = ##f
+  \override Slur.details.region-size  = #6
   
-  \times 2/3
+  \tuplet 3/2
   {
     c(  g'  c,)
   }
index 23887778460f0005533e7f51feaf526ce8a2df51..a858017427e81cc8716e6cd038ce68700e2d56aa 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Outside staff callbacks that no longer apply to grobs
@@ -12,7 +12,7 @@ the first and second examples.
 
 \relative c'' {
   \set strokeFingerOrientations = #'(up)
-  \override StrokeFinger #'avoid-slur = #'outside
+  \override StrokeFinger.avoid-slur = #'outside
   \autoBeamOff
   <a-\rightHandFinger #2 >16 b
   <a-\rightHandFinger #2 >16( b)
index c774699fe278c9c1ae7d04b9731b85bd1ecb20ac..1c9083597b6f6e0f446566a6f3942bfc15837cec 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 \header {
   texidoc="Festival song synthesis output supports
 reordered lyrics.
@@ -8,14 +8,14 @@ reordered lyrics.
 
 \festival #"song-reordering.xml" { \tempo 4 = 100 }
 <<
-  \relative \context Voice = "lahlah" {
+  \relative c' \context Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     <<
       \context Voice = alternative {
         \voiceOne
-        \times 2/3 {
-          \override NoteColumn #'force-hshift = #-3
+        \tuplet 3/2 {
+          \override NoteColumn.force-hshift = #-3
           f8 f g
         }
       }
index cd63ae0429a15070e4bb41c0bf2ba7a20a31356a..57595c22ad452ef88666b9e22d43fab6722b9425 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 \header {
   texidoc="Festival song synthesis output supports
 reordered lyrics.
@@ -8,7 +8,7 @@ reordered lyrics.
 
 \festival #"song-reordering2.xml" { \tempo 4 = 100 }
 <<
-  \relative \context Voice = "lahlah" {
+  \relative c' \context Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     <<
@@ -19,8 +19,8 @@ reordered lyrics.
       }
       \context Voice = alternative {
         \voiceOne
-        \times 2/3 {
-          \override NoteColumn #'force-hshift = #-3
+        \tuplet 3/2 {
+          \override NoteColumn.force-hshift = #-3
           f8 f g
         }
       }
index 8dd068162e19f0e7d4377025312c7fab7f9d8805..25aba696f52b7dc2887cdcbe827718d5900391da 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 \header {
   texidoc="Festival song synthesis output supports
 slurs.
@@ -8,7 +8,7 @@ slurs.
 
 \festival #"song-slurs.xml" { \tempo 4 = 100 }
 <<
-  \relative \context Voice = "lahlah" {
+  \relative c' \context Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     \slurDotted
index 8c2c1f6daa53de7182adfb36a4d549a49186ed43..02312f60422dfc2d33031289c49b5f4c24a9477b 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Accidentals do not influence the amount of stretchable space.
@@ -12,7 +12,7 @@ The accidental does add a little non-stretchable space.
   line-width = 18.\cm
 }
 \relative c'' {
-  \accidentalStyle "piano-cautionary"
+  \accidentalStyle piano-cautionary
   \time 2/4 
   d16 d d d d d cis d dis dis dis dis 
   
index eee994d286f974c836864520072c6bc340d2fc64..98c26482e72c5c94e5f6479192fd070712370174 100644 (file)
@@ -5,15 +5,15 @@
 }
 
 
-\version "2.16.0"
+\version "2.17.6"
 \layout{
   ragged-right = ##t 
 }
 
 
 \relative c'' {
-  \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
-  \override Score.NonMusicalPaperColumn #'layer = #2
+  \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
+  \override Score.NonMusicalPaperColumn.layer = #2
   
   \time 2/4
   \stemUp
index 1079310431ab2cc9f02e3f5c9894158f159a6b50..2511e308ae0a5994f33e13cc839c64fc0cf7965e 100644 (file)
@@ -3,13 +3,13 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \layout{ragged-right=##t}
 \new Staff {
 
-  \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
-  \override Score.NonMusicalPaperColumn #'layer = #1
+  \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
+  \override Score.NonMusicalPaperColumn.layer = #1
   
   s1
   <b' c'' c'>2\arpeggio
index a3ba1f82b81b3a9b564b218f724f9e76b0588ab4..2567773e833ca8f0fce21da4c2c18619f9db55ab 100644 (file)
@@ -9,15 +9,15 @@ to 1.5 staff space."
 }
 
 
-\version "2.16.0"
+\version "2.17.6"
 \layout{
   ragged-right = ##t 
 }
 
 
 \relative c'' {
-  \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
-  \override Score.NonMusicalPaperColumn #'layer = #2
+  \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
+  \override Score.NonMusicalPaperColumn.layer = #2
   
   \time 2/4
   \stemDown
index 3fb2543b05272ecec3e362038dea3410df59f735..a8503b1a32948df54347d703d296540665f555fb 100644 (file)
@@ -3,15 +3,15 @@
   
   }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \layout{
   ragged-right=##t
 }
 
 \new Staff \relative c' {
-  \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
-  \override Score.NonMusicalPaperColumn #'layer = #1
+  \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
+  \override Score.NonMusicalPaperColumn.layer = #1
   
   \time 4/4
   s1
@@ -19,7 +19,7 @@
   \time 3/4
   s2.
   c2.
-  \override Score.NonMusicalPaperColumn #'full-measure-extra-space = #3.0
+  \override Score.NonMusicalPaperColumn.full-measure-extra-space = #3.0
   s2.
   c2.
 }
index 0df8f7cd3113e22882587aa4bf3471143e51a0cc..6f5777b93d9b58157b03db06665cb4ad921a0eef 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
 
 texidoc = "A clef can be folded below notes in a different staff, if
@@ -11,10 +11,10 @@ can show where columns are in the score."
 
     \context {
        \Score
-       \override NonMusicalPaperColumn  #'stencil = #ly:paper-column::print
-       \override PaperColumn  #'stencil = #ly:paper-column::print        
-       \override NonMusicalPaperColumn #'font-family = #'roman
-       \override PaperColumn #'font-family = #'roman     
+       \override NonMusicalPaperColumn.stencil = #ly:paper-column::print
+       \override PaperColumn.stencil = #ly:paper-column::print   
+       \override NonMusicalPaperColumn.font-family = #'roman
+       \override PaperColumn.font-family = #'roman       
 
     }
 }
index 78e1fb11a10a7c9f0a9a5b7afefb72c058d4ad85..3d64bb03e8a9a4ed88f00ea9813064aad0633677 100644 (file)
@@ -5,7 +5,7 @@
   run are spaced accordingly. "
 }
 
-\version "2.16.0"
+\version "2.17.28"
 
 \paper {  ragged-right = ##t }
 
   c
   \grace { c16  }
   d
-  \grace { c16[ d e f] }
+  \grace { c16 d e f }
   c
-  \grace { c8[ c16 d c8]  }
+  \grace { c8 c16 d c8  }
   c
-  \override Score.GraceSpacing #'spacing-increment = #2.0
+  \override Score.GraceSpacing.spacing-increment = #2.0
 
   \grace { c4 c16 d16  }
   c
index a8430674d18efd8aa4a59eff8db7b7129f03ee33..b99c173eef978707f12e2a494fa9b479c4dcfdf6 100644 (file)
@@ -6,7 +6,7 @@ and the barline do not collide."
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \paper
 {
@@ -16,7 +16,7 @@ and the barline do not collide."
 \new Staff
 \relative c
 {
-  \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print 
+  \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print 
   \time 6/8
   \clef bass
   s2. |
index ca7611d6c0011c1c53ca745d64d6b1c26e87d773..abebf5a3997fbf479f1a9ae9f667bfad076701bb 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Spacing corrections for kneed beams still work when
@@ -10,7 +10,7 @@ compression is involved."
 \layout {
   \context {
     \Voice
-    \override Beam #'auto-knee-gap = #1
+    \override Beam.auto-knee-gap = #1
   }
 }
 
index 050606112b6495f2250f6abf180d0133595d81f1..2ef25e5675fa55aae4b38a2ba9ddeb4fe168e326 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
 
   texidoc = "For knees, the spacing correction is such that the
@@ -13,9 +13,9 @@ width of the note heads and the thickness of the stem.
   g''8[ g g'' g''] 
 
                                % check code independent of default settings.
-  \override NoteSpacing  #'knee-spacing-correction = #1.0 
+  \override NoteSpacing.knee-spacing-correction = #1.0 
   g''8[ g g'' g''] 
-  \override Stem  #'thickness = #10 
+  \override Stem.thickness = #10 
   g''8[ g g'' g''] 
 }
 
index f55dc72360f0f5aa401c85af9e98f0d8965dcdd5..6f299e8cb33db02c07305150c12e219a6d2cea7f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 #(ly:expect-warning (_ "Cannot determine neighbors for floating column. "))
 #(ly:expect-warning (_ "Loose column does not have right side to attach to."))
@@ -20,7 +20,7 @@ texidoc = "Even in case of incorrect contexts (eg. shortlived
 %% breaking spacing-wishes links.
 \score {
   \new Staff {
-    \override Score.SpacingSpanner #'strict-note-spacing = ##t
+    \override Score.SpacingSpanner.strict-note-spacing = ##t
     \afterGrace c'4 {c'32 c'32 }
     c'4
   }
index 1ddfe3cdf793d4969a24e7fc82007a4ba382a465..655e8b17ee07db05649aedd8bf93586836425cc0 100644 (file)
@@ -4,12 +4,12 @@ across a line break, it gets attached to the end of line."
 }
 
 
-\version "2.16.0"
+\version "2.17.6"
 
 \layout {
   \context {
     \Score
-    \override SpacingSpanner #'strict-grace-spacing = ##t
+    \override SpacingSpanner.strict-grace-spacing = ##t
   }
 }
 
index 225e8292a0b8890574049818808172bb5b99f1fb..3852ed4598d6541320e0eba2ee43170469e38886 100644 (file)
@@ -8,13 +8,13 @@ spacing."
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 \paper {
   ragged-right = ##t
 }
 
 <<
-  \override Score.SpacingSpanner  #'strict-grace-spacing = ##t
+  \override Score.SpacingSpanner.strict-grace-spacing = ##t
   \new Staff {
      c'4
      \afterGrace
index 18f2ba46286232696cf384871bd86a41c55937d9..43fdb6e8d488a14f380c7a9ef5c90bbb8d4abea8 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "Loose columns (here, the treble clef) are spaced
@@ -8,7 +8,7 @@ correctly in polyphonic music.
 
 \new PianoStaff <<
   \new Staff \relative c' {
-    \times 2/3 { g'4 a2 }
+    \tuplet 3/2 { g'4 a2 }
   }
   \new Staff \relative c' {
     \clef bass fis,,8 cis'
index 3b86929f36bbfd4d242cdb5e1566af63e318343c..8010f4edfb193818295f42f5d317a0e52ce7cd52 100644 (file)
@@ -4,7 +4,7 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \paper {
   ragged-right = ##t
@@ -12,7 +12,7 @@
 
 \relative c''
 {
-  \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible
+  \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
   c1
   \mark "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
 }
index 0b2d6ee98e834726e494a2153bca2d8872a06ac7..2400a0343a6682df3794e6f03e7c60382351a8b6 100644 (file)
@@ -6,7 +6,7 @@ This means that the 3/8 setting does not affect the whole rest spacing."
 }
 
 
-\version "2.16.0"
+\version "2.17.11"
 
 \layout {
   ragged-right = ##t
@@ -17,8 +17,8 @@ This means that the 3/8 setting does not affect the whole rest spacing."
     \remove "Separating_line_group_engraver"
   } {
     \relative c' {
-      \override Score.SpacingSpanner #'uniform-stretching = ##t
-      \set Score.proportionalNotationDuration = #(ly:make-moment 4 25)
+      \override Score.SpacingSpanner.uniform-stretching = ##t
+      \set Score.proportionalNotationDuration = #(ly:make-moment 4/25)
       r1
       \time 3/8 r4.
     }
index acc53cc8fe5e51c66c0b05643ee7b5bb883e0242..bab9232a8d1b7113ec43676e601aaa1352c96622 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
  \header{
 
@@ -11,19 +11,19 @@ hence it must be switched on explicitly with the
 \layout{
   \context{
     \Score
-    \override SpacingSpanner #'uniform-stretching = ##t
+    \override SpacingSpanner.uniform-stretching = ##t
   }
 }
 
 \relative c' { 
   \context StaffGroup << 
     \new Staff  \context Voice { 
-      \times 2/10 {  c8[ c c c c c c c c c] } 
-      \times 2/10 {  c[  c c c c c c c c c] } 
+      \tuplet 10/2 {  c8[ c c c c c c c c c] } 
+      \tuplet 10/2 {  c[  c c c c c c c c c] } 
     }
     \new Staff  \context Voice { 
-      \times 2/11 {  c8[ c c c c c c c c c c] } 
-      \times 2/11 {  c[  c c c c c c c c c c] } 
+      \tuplet 11/2 {  c8[ c c c c c c c c c c] } 
+      \tuplet 11/2 {  c[  c c c c c c c c c c] } 
     }
   >>
 }
diff --git a/input/regression/spacing-non-adjacent-columns3.ly b/input/regression/spacing-non-adjacent-columns3.ly
new file mode 100644 (file)
index 0000000..67389f9
--- /dev/null
@@ -0,0 +1,21 @@
+\version "2.17.28"
+\header {
+  texidoc = "The spacing engine avoids collisions between non-adjacent columns."
+}
+
+\paper{ragged-right = ##t }
+<<
+  \new ChordNames \chordmode {
+    \set additionalPitchPrefix = #"add"
+    f2:13.15 f2
+  }
+  \new Staff {
+    f'4 f'8 f' f'2 \break
+    \set fingeringOrientations = #'(left)
+    \grace { <d-1-2-3>8[ f a] }
+    <fis''-1-2-3-4-5>4 r4
+    \set fingeringOrientations = #'(right)
+    <g'-1-2-3-4-5>4 \grace { d''8 e'' d''}
+    g'4
+  }
+>>
index a187223b1f95fc298bb99291f0b5a4b3d86e03a0..d3a01b6f92b796722b597193f46227905c4ad334 100644 (file)
@@ -10,9 +10,9 @@
 "
   }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \relative c' {
-  \override Score.SpacingSpanner #'packed-spacing = ##t
+  \override Score.SpacingSpanner.packed-spacing = ##t
   c2 d4 f8[ g] a
 }
index 77984552d8f181127e8b29f49cc45e7783fa7f2b..8168fcc51ac077830a5849abe19cb178cdc47243 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The space after a paper column can be increased by overriding
@@ -8,8 +8,8 @@ the padding property."
 \layout {
   \context {
     \Score
-    \override PaperColumn #'padding = #10
-    \override NonMusicalPaperColumn #'padding = #10
+    \override PaperColumn.padding = #10
+    \override NonMusicalPaperColumn.padding = #10
   }
 }
 
index 9160af59afa68c0c3e3b90f09ba8da64ed1f7d41..73c13dcdf28d43487835a0114b96e9de6f950a7c 100644 (file)
@@ -6,15 +6,15 @@ to the distance for the given duration."
 
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \paper { ragged-right = ##t }
 
 \relative c''
 <<
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
   \new Staff { c8[ c c c c c]  c4 c2 r2 }
-  \new Staff { c2  \times 2/3 { c8 c c } c4 c1 }
+  \new Staff { c2  \tuplet 3/2 { c8 c c } c4 c1 }
 >>
 
    
index 996406aacb974b0b1019d46d52354f5004d2ee2c..e1539e59b821cdbaf1240e8c9be01ea2bce16d06 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "When space-to-barline is false, we measure the space between the note and the
@@ -9,15 +9,15 @@ the start of the barline."
 \paper {ragged-right = ##t}
 
 {
-  \override Score.SpacingSpanner #'common-shortest-duration = #(ly:make-moment 1 16)
+  \override Score.SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/16)
   c'2 \clef bass c'2 \clef treble
-  \override NoteSpacing #'space-to-barline = ##f
+  \override NoteSpacing.space-to-barline = ##f
   c'2 \clef bass c'2 \clef treble
 
   % the following two measures should be spaced identically
-  \override NoteSpacing #'space-to-barline = ##t
+  \override NoteSpacing.space-to-barline = ##t
   c'2 c'2
-  \override NoteSpacing #'space-to-barline = ##f
+  \override NoteSpacing.space-to-barline = ##f
   c'2 c'2
   c'1
 }
index 7d568f8cd08262f18ee23bb3e78933222ae645e9..7665030801a1a197f4ff31105bc55ffc8cb08832 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 \header {
 
   texidoc = "Upstem notes before a barline are printed with some extra
@@ -13,8 +13,8 @@ space. This is an optical correction similar to juxtaposed stems.
 
 \relative e'
 {
-  \override Score.PaperColumn #'layer = #1
-  \override Score.PaperColumn #'stencil = #ly:paper-column::print
+  \override Score.PaperColumn.layer = #1
+  \override Score.PaperColumn.stencil = #ly:paper-column::print
 
   
   \time 2/8
index 7b15bfc6cadb474de96f47b2074f55b4663fdb1e..fbca840c55484a9aea8e5732582f4baa00ebe308 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 \header{
 
@@ -17,11 +17,11 @@ much to correct."
 
 
 \context Voice \relative c {
-  \override Score.PaperColumn #'layer = #1
-  \override Score.PaperColumn #'stencil = #ly:paper-column::print
+  \override Score.PaperColumn.layer = #1
+  \override Score.PaperColumn.stencil = #ly:paper-column::print
 
   %% make sure neutral is down.
-  \override Stem  #'neutral-direction = #down
+  \override Stem.neutral-direction = #down
   \time 16/4  c''4 c c,  c' d, c' e, c' f, c' g c a c b c
 }
 
index 9ff4b55fb2c38eebb1f896710f644c0b7e62a66c..03a20bc67911b4775782ae04d11fb6298f4c547a 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "For juxtaposed chords with the same direction, a
 slight optical correction is used. It is constant, and works only if
@@ -9,8 +9,8 @@ two chords have no common head-positions range."
 \layout { ragged-right = ##t}
 
 \relative c'' {
-  \override Score.PaperColumn #'layer = #1
-  \override Score.PaperColumn #'stencil = #ly:paper-column::print
+  \override Score.PaperColumn.layer = #1
+  \override Score.PaperColumn.stencil = #ly:paper-column::print
 
   \stemDown
   \time 12/4
index 250366491cf94d253e104133bb694355e9ce2538..6e17724c1f3844a9091f4458bb87a4f96f2d46ba 100644 (file)
@@ -9,7 +9,7 @@ time.  This may cause collisions.  "
 }
 
 
-\version "2.16.0"
+\version "2.17.28"
 
 \paper {
   ragged-right = ##t
@@ -23,14 +23,14 @@ time.  This may cause collisions.  "
 
 \relative c''
 <<
-  \override Score.SpacingSpanner #'strict-note-spacing = ##t 
-  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+  \override Score.SpacingSpanner.strict-note-spacing = ##t 
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
   \new Staff {
     c8[ c \clef alto c c \grace { d16 }  c8 c]  c4 c2
-    \grace { c16[ c16] }
+    \grace { c16 c16 }
     c2 }
   \new Staff {
-    c2  \times 2/3 { c8 \clef bass cis,, c } 
+    c2  \tuplet 3/2 { c8 \clef bass cis,, c } 
     c4
     c1
   }
index 1a9fefd8244da6be5767edff61559de8f543a98f..38843d131e4fb5cc29331844cd5746e9eda14b09 100644 (file)
@@ -5,10 +5,10 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 <<
- \override Score.SpacingSpanner #'strict-grace-spacing = ##t
+ \override Score.SpacingSpanner.strict-grace-spacing = ##t
  \new Staff {
     c'4
     \afterGrace
index 2a98453f555e354fea11fa1c6ee723d4e2a40831..16cb6656fbe56cf55ecf97edefed398f8bafb660 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   texidoc = "An empty barline does not confuse the spacing engine too much.
@@ -19,7 +19,7 @@ The two scores should look approximately the same."
     \consists "Bar_engraver"
     \consists "Axis_group_engraver"
 
-    \override BarLine #'transparent = ##t
+    \hide BarLine
   }
 }
 
index 3b889d2d417f98efd73ac891d6d7385b99e87395..16cd079404acf57bb0eaf41a0b0c6925f1eeb4ee 100644 (file)
@@ -6,16 +6,16 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \relative c''
 <<
-  \override  Score.SpacingSpanner #'uniform-stretching = ##t 
+  \override  Score.SpacingSpanner.uniform-stretching = ##t 
   \new Staff {
     c16[ c c c c c c c c c16]
   }
   \new Staff {
-    \times 6/7 { c16 c c cis c c c }
+    \tuplet 7/6 { c16 c c cis c c c }
     c8[ c32 c32 c16]
     
   }
index c4e150cec1a12d3318c8af6df3e27a3ea2ec4007..c6fe94815be860a58e0a9f58b3a96e9c86d31ad5 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The @code{SpanBarStub} grob takes care of horizontal spacing
@@ -18,10 +18,10 @@ span bar were not there.
       \new Voice = "upper"
         \relative c'' {
           c2 c c c
-          \once \override Staff . BarLine #'allow-span-bar = ##f
+          \once \override Staff.BarLine.allow-span-bar = ##f
           c2 c c c
           c2 c c c
-          \once \override Staff . BarLine #'allow-span-bar = ##f
+          \once \override Staff.BarLine.allow-span-bar = ##f
           c2 c c c
         }
     \new Lyrics \lyricsto "upper" \lyricmode {
@@ -35,7 +35,7 @@ span bar were not there.
           c2 c c c
           c2 c c c
           c2 c c c
-          \once \override Staff . BarLine #'allow-span-bar = ##f
+          \once \override Staff.BarLine.allow-span-bar = ##f
           c2 c c c
         }
     \new Lyrics \lyricsto "middle" \lyricmode {
index 5bd5b074df5ea1d572b08e1e28476e1ff9ac854d..aac291494d72863f1b77e873339c37ea276e9968 100644 (file)
@@ -1,9 +1,9 @@
-\version "2.16.0"
+\version "2.17.5"
 
 \header {
 
-  texidoc = "At the beginning of a system, the @code{|:} repeat
-barline is drawn between the staves, but the @code{:|} is not."
+  texidoc = "At the beginning of a system, the @code{.|:} repeat
+barline is drawn between the staves, but the @code{:|.} is not."
 
 }
 
@@ -12,8 +12,8 @@ barline is drawn between the staves, but the @code{:|} is not."
 
 \new PianoStaff <<
   \new Staff = "up" {
-    \bar "|:" r1
-    \bar ":|" \break r1
+    \bar ".|:" r1
+    \bar ":|." \break r1
   }
   \new Staff = "down" { r r }
 >>
index 66ba86bbd00a529135e232efdf7695d97533ff46..adf890e5fcd8eb7ef7e263087c6991508c3c1532 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "Span bars can be turned on/@/off on a staff-by-staff basis."
 }
 \relative c' \new StaffGroup <<
   \new Staff {
     c1
-    \once \override Staff.BarLine #'allow-span-bar = ##f
+    \once \override Staff.BarLine.allow-span-bar = ##f
     c1 c1 c1
     \bar "|."
   }
   \new Staff {
     a1 a1
-    \once \override Staff.BarLine #'allow-span-bar = ##f
+    \once \override Staff.BarLine.allow-span-bar = ##f
     a1 a1
   }
   \new Staff {
index f36f2c7878d9a3dfafa568dbd4855482d4997710..498460291637f521252c973729ce8cc18f24554c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 \header {
   texidoc = "Span bars are drawn only between staff bar lines. By setting 
 bar lines to transparent, they are shown only between systems.
@@ -19,9 +19,9 @@ between systems.
 \relative c' \new StaffGroup <<
   \new Staff {
     a1
-    \once \override Score.BarLine #'transparent = ##t
+    \once \hide Score.BarLine
     a1
-    \once \override Score.SpanBar #'transparent = ##t
+    \once \hide Score.SpanBar
     a1 a1
     \bar "|."
   }
index 95bebac83215a3d8d44343d8227a066d3845d1b1..100d81346af74785c025d99a85ee29230eb4bb5e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
 texidoc = "The visibility of left-broken line spanners and hairpins
@@ -10,7 +10,7 @@ controlled by the callback @code{ly:spanner::kill-zero-spanned-time}.
 \paper { ragged-right = ##t }
 
 \relative c' {
-  \override TextSpanner #'bound-details =
+  \override TextSpanner.bound-details =
     #'((left
         (Y . 0)
         (padding . 0.25)
@@ -26,10 +26,10 @@ controlled by the callback @code{ly:spanner::kill-zero-spanned-time}.
        (right-broken
         (text . #f)))
   c1\startTextSpan\< \break
-  \override Hairpin #'to-barline = ##f
-  \override Hairpin #'after-line-breaking = ##f
+  \override Hairpin.to-barline = ##f
+  \override Hairpin.after-line-breaking = ##f
   c2\stopTextSpan\!
-  \override TextSpanner #'after-line-breaking =
+  \override TextSpanner.after-line-breaking =
     #ly:spanner::kill-zero-spanned-time
   c\startTextSpan\< \break
   c1\!\stopTextSpan
index 696f4fda0de8a06c9add77d6a9d386582da68cc8..02ffba9a5c7714f5de0be4857eb71785bf347269 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "The @code{break-overshoot} property sets the amount that
@@ -10,9 +10,9 @@ prefatory matter."
 \paper { ragged-right = ##t }
 
 \relative c'' {
-  \override Beam #'break-overshoot = #'(1.0 . 2.0)
-  \override TupletBracket #'break-overshoot = #'(1.0 . 2.0)
-  \override TupletBracket #'bracket-visibility = ##t
-  \override Beam #'breakable = ##t
-  c2.. \times 2/3 { c8.[ \break c8.] }
+  \override Beam.break-overshoot = #'(1.0 . 2.0)
+  \override TupletBracket.break-overshoot = #'(1.0 . 2.0)
+  \override TupletBracket.bracket-visibility = ##t
+  \override Beam.breakable = ##t
+  c2.. \tuplet 3/2 { c8.[ \break c8.] }
 }
index ba6137e25f703acc49b6f37c90324b99e24e442f..3e8c191937a4e77b6970961c8932e8aba4715af6 100644 (file)
@@ -7,11 +7,11 @@ either all or none are shown.  Ledger lines can be set to appear sooner or
 later by setting the @code{ledger-extra} property."
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \new Staff \relative c' {
-  \override Staff.StaffSymbol #'line-positions = #'(-5 -2 -1 2 5 6)
-  \override Staff.StaffSymbol #'ledger-positions = #'(-5 (-2 -1) 2)
-  \override Staff.StaffSymbol #'ledger-extra = #1
+  \override Staff.StaffSymbol.line-positions = #'(-5 -2 -1 2 5 6)
+  \override Staff.StaffSymbol.ledger-positions = #'(-5 (-2 -1) 2)
+  \override Staff.StaffSymbol.ledger-extra = #1
   g,4 c e b' c'' e g
 }
index de355e7dc01ab8fe447398fdd2e478161e7179a6..e8c9d4fa8feb26bdef66cedca7302632bf1cf3a2 100644 (file)
@@ -6,11 +6,11 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 
 \new Staff \relative c'  {
-  \override Staff.StaffSymbol #'line-positions = #'(-7 -2 0 3 9)
+  \override Staff.StaffSymbol.line-positions = #'(-7 -2 0 3 9)
   g c f b e a
 }
   
index 82e34418fd50c3eb1c3029b2a1e1039599d9fb61..7e42a72a5cf317f779605923698a1bb4f0390477 100644 (file)
@@ -7,21 +7,21 @@ large on smaller staves."
 
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \layout {
   ragged-right = ##t
 }
 
 melody = \relative c''' {
-  \override DynamicText  #'extra-offset = #'(0 . 3)
-  s1-\f c8[(\< r a g]) e[ r d( <f a>])\! \times 2/3 { d4 d d }
+  \override DynamicText.extra-offset = #'(0 . 3)
+  s1-\f c8[(\< r a g]) e[ r d( <f a>])\! \tuplet 3/2 { d4 d d }
 }
 
 <<
   \new Staff \with {
     fontSize = #-4
-    \override StaffSymbol #'staff-space = #(magstep -4)
+    \override StaffSymbol.staff-space = #(magstep -4)
   } {
     \melody
   }
index 0240b0d88ecef3649dc3ad4256bd769fda5e4356..36e75dba38ee33ab281d4631029dbab241f5e0df 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "The staff is a grob (graphical object) which may be adjusted as well, for example, to have 6 thick lines and a slightly large @code{staff-space}.
@@ -16,9 +16,9 @@ mus =  \relative c' { c4 g' d'8 d d d }
 
 <<
   \new Staff {
-    \override Staff.StaffSymbol  #'thickness = #2.0
-    \override Staff.StaffSymbol  #'line-count = #6
-    \override Staff.StaffSymbol  #'staff-space = #1.1
+    \override Staff.StaffSymbol.thickness = #2.0
+    \override Staff.StaffSymbol.line-count = #6
+    \override Staff.StaffSymbol.staff-space = #1.1
     \mus
   }
   \mus
index 76891556b32c8dce28b78ebc70aacf6193c705d6..f4eaf78f1ea62c6e18e392de72eab319a00b505b 100644 (file)
@@ -5,10 +5,10 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 \relative c'' \new Voice \with {
      \consists "Melody_engraver"
-     \override Stem #'neutral-direction = #'()
+     \override Stem.neutral-direction = #'()
 } {
   c4 b c b
   c c c c
index d7c50ba466a8cfa3a8af38804aa317fa201e2420..4a206696a9165ce7b0eba4ff4b91015fd59f8a8a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Stems with overridden 'Y-extent should
@@ -26,7 +26,7 @@ on one page.
   \score {
     \new Voice {
       \voiceTwo
-      \override Stem #'Y-extent = #'(0.0 . 0.0)
+      \override Stem.Y-extent = #'(0.0 . 0.0)
       \repeat unfold 144 a4
     }
     \layout {
index c8a72976f58bb9fc77730caac4d102dfeb42481b..39aa0921814f3859ad915a5dcb128c718f74fbd2 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Stem length and stem-begin-position can be set manually.
   \autoBeamOff
   \stemUp
   a8 aes''8
-  \override Stem #'length = #20
+  \override Stem.length = #20
   a,,8
-  \revert Stem #'length
+  \revert Stem.length
   aes''!8
   \stemNeutral
-  \override Stem #'stem-begin-position = #-2
+  \override Stem.stem-begin-position = #-2
   c,8
 }
index ff835d7d80becf184cc273f673f84a686c2ab084..2faa2de0d257cf829a6249d156b18993531486e8 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "Stemlets don't cause stems on whole notes."
 } 
@@ -6,6 +6,6 @@
 \paper{ ragged-right=##t }
 
 {
-  \override Stem #'stemlet-length = #0.5
+  \override Stem.stemlet-length = #0.5
   c''1
 }
index caf7240d526e34e13d591dc55b85140584b58396..4799eb5c8c37cafec0e10538c8fc53425496b625 100644 (file)
@@ -5,11 +5,11 @@ length can be set with @code{stemlet-length}."
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 \layout { ragged-right = ##t }
 
 \relative c' {
-    \override Stem #'stemlet-length = #0.75
+    \override Stem.stemlet-length = #0.75
     c8[ r8 c16 r16 c8]
     c4
 }
diff --git a/input/regression/stem-tremolo-note-collision.ly b/input/regression/stem-tremolo-note-collision.ly
new file mode 100644 (file)
index 0000000..6b5b32a
--- /dev/null
@@ -0,0 +1,20 @@
+\version "2.17.2"
+
+\header {
+  texidoc = "Tremolos should avoid other notes in the staff as
+best as possible and issue a warning otherwise.
+"
+}
+
+#(ly:expect-warning (_ "ignoring too many clashing note columns"))
+
+{
+<<
+   {  b'4 f'2. }
+   \\
+   {
+     \grace a8
+     \repeat tremolo 32 <b g'>32
+   }
+>>
+}
\ No newline at end of file
index 6848dd26e7799dfba86e0dd08569cbec1a8bca6b..f62e6ddbd5ca84e3015cda6c74668ba9dd9c347e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header{
   texidoc="Stem tremolos count in a note column's horizontal skyline.
 "
@@ -7,6 +7,6 @@
 
 \relative c'' {
   \autoBeamOff
-  \override NoteHead #'stencil = #(ly:make-stencil '() '(0 . 0) '(0 . 0))
+  \override NoteHead.stencil = #(ly:make-stencil '() '(0 . 0) '(0 . 0))
   \repeat unfold 8 { b8:32 }
 }
index 21944345599c95afe745f07d8d8ca561cce936b4..c89ded2dbd275b4893f00ac1e2d7d3357312041e 100644 (file)
@@ -4,7 +4,7 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \layout {
   ragged-right = ##t
@@ -18,7 +18,7 @@ fragment = \relative c' {
 <<
   \new Staff \with {
     fontSize = #-4
-    \override StaffSymbol #'staff-space = #(magstep -4)
+    \override StaffSymbol.staff-space = #(magstep -4)
   }
   \fragment
   \new Staff \fragment
index b692c38922dde050e850b23777d97316cff19e19..032f900ecc0a32b1f2a7c4fb6a969c8e9a451fb3 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "tremolo duration is too long"))
@@ -24,7 +24,7 @@ printed.
 
 \context Voice \relative c''{
   \textSpannerUp
-  \override TextScript  #'padding = #5
+  \override TextScript.padding = #5
   % The following note should print a warning (quarter tremolo cannot be notated)
   a1:4^":4" a:8^":8" c:16^":16" a:32^":32" a^"x" a:^":"
   a':32 a,,:32
index 788a2cd4459b640b885dcef6da3b7e1135cfdb35..b8c98153446581464a4ac40434781f308965d437 100644 (file)
@@ -2,9 +2,9 @@
   texidoc = "Combinations of rotation and color do work."
 }
 
-\version "2.16.0"
+\version "2.17.6"
 \relative c'{ 
-  \override Hairpin #'rotation = #'(20 -1 0)
-  \override Hairpin #'color = #(x11-color 'LimeGreen)
+  \override Hairpin.rotation = #'(20 -1 0)
+  \override Hairpin.color = #(x11-color 'LimeGreen)
   g4\< b d f'\!
 } 
index dc5bf9ed6a17855a8ee20dc3d3314a6022460a01..41192b986acf60b866a28f3a2f28c516b255363d 100644 (file)
@@ -1,5 +1,4 @@
-
-\version "2.16.0"
+\version "2.17.6"
 
 \header { texidoc=" You can write stencil callbacks in Scheme, thus
 providing custom glyphs for notation elements.  A simple example is
@@ -16,16 +15,13 @@ parens are also not seen by accidentals.
    "Construct a function that will do CALLBACK and add parentheses.
 Example usage:
 
-  \\property NoteHead \\override #'print-function
-                  =
-                     #(parenthesize-callback ly:note-head::print)
-                   
-"
-
+  \\override NoteHead.stencil
+  =
+  #(parenthesize-callback ly:note-head::print)"
    
    (define (parenthesize-stencil grob)
      "This function adds parentheses to the original callback for
-GROB.  The dimensions of the stencil is not affected.
+GROB.  It does not affect the dimensions of the stencil.
 "
      
      (let* ((fn (ly:grob-default-font grob))
@@ -34,14 +30,14 @@ GROB.  The dimensions of the stencil is not affected.
            (subject (callback grob))
 
            ; remember old size
-           (subject-dim-x (ly:stencil-extent subject 0))
-           (subject-dim-y (ly:stencil-extent subject 1)))
+           (subject-dim-x (ly:stencil-extent subject X))
+           (subject-dim-y (ly:stencil-extent subject Y)))
 
         ;; add parens
         (set! subject
             (ly:stencil-combine-at-edge 
-             (ly:stencil-combine-at-edge subject 0 1 pclose 0.2)
-             0 -1 popen  0.2))
+             (ly:stencil-combine-at-edge subject X RIGHT pclose 0.2)
+             X LEFT popen  0.2))
 
        ; revert old size.
        (ly:make-stencil
@@ -53,13 +49,13 @@ GROB.  The dimensions of the stencil is not affected.
 \relative c' {
     c4 e
 
-    \override NoteHead  #'stencil
+    \override NoteHead.stencil
     =
     #(parenthesize-callback ly:note-head::print)
     g bes
-    \revert NoteHead #'stencil
+    \revert NoteHead.stencil
 
-    \override Beam  #'stencil
+    \override Beam.stencil
     =
     #(parenthesize-callback ly:beam::print)
 
index fb75e14c602b1612b2b7bb5b18e202a6fd1ec0bf..eee897cfc392fd8636f5e4df2e9ea140b7b668c2 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "Stencils can be scaled using @code{ly:stencil-scale}.
@@ -8,15 +8,15 @@ signature in this test)."
 }
 
 \relative c' {
-  \override Staff.Clef #'stencil =
+  \override Staff.Clef.stencil =
   #(lambda (grob)
      (ly:stencil-scale (ly:clef::print grob) 1 -1))
-  \override Staff.TimeSignature #'stencil =
+  \override Staff.TimeSignature.stencil =
   #(lambda (grob)
      (ly:stencil-aligned-to
       (ly:stencil-scale (ly:time-signature::print grob) -2 1)
       X LEFT))
-  \override MultiMeasureRestText #'stencil =
+  \override MultiMeasureRestText.stencil =
   #(lambda (grob)
      (ly:stencil-scale (ly:text-interface::print grob) 2 1.6))
   R1\fermataMarkup
index e0ba0dcf79dd9ef6e19224f516ffdef5f1069f46..df9cdd96da7859e36777209a471eea3beb5eea30 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
 
     texidoc = "The size of every system is correctly determined; this 
 \layout { 
     \context {
        \Score
-       \override System  #'stencil = #box-grob-stencil
+       \override System.stencil = #box-grob-stencil
     }
 }
 
 \new Voice
 {
-    \unset Staff.minimumVerticalExtent
-    \override Score.RehearsalMark #'font-size = #20
+    \override Score.RehearsalMark.font-size = #20
     
     \slurDown c4 ( g4  c''4)
 }
index 165dfd1aa049f496b01697dec9c0cfe5348cf9dd..8c3012cf9df0fef8ae37dfbc6d3ac662d435ee7e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "When the staff-space is increased, the system-start delimiter
@@ -6,7 +6,7 @@ should still be collapsed (i.e. the collapse-height should not give an absolute
 length, but a multiple of staff-spaces)."
 }
 
-\new Staff \with { \override StaffSymbol #'staff-space = #1.4 }
+\new Staff \with { \override StaffSymbol.staff-space = #1.4 }
 {
   a4 b c d 
 }
index cded6cb3721ed77be4a10638303568a8eee3d576..d79dcd3b0f6651fff9cb360a9a7462aa1ae5cc7d 100644 (file)
@@ -1,17 +1,17 @@
 \header { texidoc = "A heavy-bar system start delimiter may be created by tuning the @code{SystemStartBar} grob."
        } 
 
-\version "2.16.0"
+\version "2.17.15"
 
 \paper {
   ragged-right = ##t
 }
 <<
   \new StaffGroup
-  \relative <<
+  \relative c' <<
     \set StaffGroup.systemStartDelimiter = #'SystemStartBar
-    \override StaffGroup.SystemStartBar #'thickness = #8
-    \override StaffGroup.SystemStartBar #'padding = #0.2
+    \override StaffGroup.SystemStartBar.thickness = #8
+    \override StaffGroup.SystemStartBar.padding = #0.2
     \new Staff { c1 }
     \new Staff { c1 }
   >>
index d637b667f473d1356556ff730871dd64e42e535f..41a4a72a2a73bf9a28c8087e59714f1e8402e087 100644 (file)
@@ -2,14 +2,14 @@
   created with the @code{systemStartDelimiterHierarchy} property."
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
 \paper {
   ragged-right = ##t
 }
 
 \new StaffGroup
-\relative <<
+\relative c' <<
   \set StaffGroup.systemStartDelimiterHierarchy
     = #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
   \new Staff { c1 }
index 01c93ff777c428cec463378cb780d36630e5967e..7fd2a30eefc847e9b16a8e7b805b7910bf6e77c0 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   texidoc = "In a TabStaff, the chord repetition function needs
@@ -19,7 +19,7 @@ Guitar = \relative c' {
     \new Staff {
       \new Voice {
         \clef "treble_8"
-        \override Voice.StringNumber #'transparent = ##t
+        \hide Voice.StringNumber
         \Guitar
       }
     }
index 2fbe808836f0bc365977b10a58ef9cb570d49174..55f65479114b503269757d1ad1efbb42c0e6501c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header{ texidoc = "As default, tablature staves show only the fret numbers, because
                     in most situations, they are combined with normal staves.
@@ -18,15 +18,17 @@ tabstuff = {
   \ottava #1
   r4 d'4 r8 e |
   \ottava #0
-  \times 3/4 { b,4 c \glissando d\5 \glissando c } |
+  \tuplet 4/3 { b,4 c \glissando d\5 \glissando c } |
   c4. d-_( |
   e\varcoda-> )
-  \override TextSpanner #'(bound-details left text) = "rit." f\startTextSpan |
+  \override TextSpanner.bound-details.left.text = "rit." f\startTextSpan |
   g ~ g\prall |
   g\thumb e-.\stopTextSpan
   \bar "|."
 }
 
+#(set-global-staff-size 18)
+
 \score {
   <<
     \new Staff { \clef "G_8" \tabstuff }
index aa1123aacf6675aa14853fa4fbbdbfb25c43d3a0..9cb31cf1afe343102e0d17b7f535d0feeaf136c9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   texidoc = "
@@ -35,7 +35,7 @@ test = {
 \score {
   <<
     \new Staff {
-      \new Voice \with { \override StringNumber #'stencil = ##f } {
+      \new Voice \with { \omit StringNumber } {
         \clef "treble_8"
         \test
       }
index 2431769f91c409462f95f570f415b1ec3a4e922d..b1e85522a011d5464c0ffec7d7936c4a4e2ff5b6 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.27"
 
 \header {
   texidoc = "
@@ -29,7 +29,7 @@ notes = \relative c' {
 \score {
   \new TabStaff
   \with {
-    stringTunings = \stringTuning \notemode { <a d' f' a' d'' f''> }
+    stringTunings = \stringTuning <a d' f' a' d'' f''>
     tablatureFormat = #fret-letter-tablature-format
   }
   \new TabVoice {
index 69cc1ea09b7371f67ab5ee1619bb9a6f4e775e1d..fc3d8a94e559c266c69b5adce02189198aff079f 100644 (file)
@@ -3,7 +3,7 @@
   texidoc = "How a repeat sign looks in tablature."
 }
 
-\version "2.16.0"
+\version "2.17.2"
 \paper
 {
   ragged-right = ##t
index 295d882e9321d745da6a050759af294439a14049..54b7c62daf8a4804bedfafb9fba5fc3bdeeeced7 100644 (file)
@@ -4,13 +4,13 @@
   texidoc = "Tab supports slides."
 }
 
-\version "2.16.0"
+\version "2.17.15"
 \paper {
   ragged-right = ##T
 }
 
 
-\relative \new TabVoice
+\relative c' \new TabVoice
 {
   <c g'\harmonic> d\2\glissando e\2
 }
diff --git a/input/regression/tablature-slurs-with-beams.ly b/input/regression/tablature-slurs-with-beams.ly
new file mode 100644 (file)
index 0000000..1425ed6
--- /dev/null
@@ -0,0 +1,36 @@
+\version "2.17.20"
+
+\header
+{
+  texidoc = "
+Slur placement in complementary tablatures should not be affected by
+either automatic or manual beaming.
+"
+}
+
+guitarSolo = {
+  \time 3/4
+  \set Timing.beamExceptions = #'((end . (((1 . 8) . (4 2)))))
+  <<
+    {bes'2( aes'8-. r)} \\
+    {r8 cis(-\tag #'beam [ b f'-\tag #'beam ]) <d f'>-. r}
+  >>
+  \bar "|."
+}
+
+guitarSolos = {
+  \tempo "Manual beams"
+  \guitarSolo
+  \tempo "Automatic beams"
+  \removeWithTag #'beam \guitarSolo
+}
+
+\score {
+  <<
+    \new StaffGroup <<
+      \new Staff { \clef "treble_8" \guitarSolos }
+      \new TabStaff \guitarSolos
+    >>
+    \new TabStaff \with { \tabFullNotation } \guitarSolos
+  >>
+}
index 9b32989b6f1cc117e1cf1a3dda2311a93049b77f..a784576ee6d505fd5b80710d3f23da321dfc52c6 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header{ texidoc = "In tablature, notes that are tied to are invisible
                      except after a line break or within a second volta;
@@ -29,7 +29,7 @@ thirdpart = \relative c' {
 \context StaffGroup <<
   \context Staff {
      \clef "G_8"
-    \override Voice.StringNumber #'transparent = ##t % remove circled string numbers
+    \hide Voice.StringNumber % remove circled string numbers
     \firstpart
     \secondpart
     \thirdpart
@@ -44,7 +44,7 @@ thirdpart = \relative c' {
 \context StaffGroup <<
   \context Staff {
     \clef "G_8"
-    \override Voice.StringNumber #'transparent = ##t % remove circled string numbers
+    \hide Voice.StringNumber % remove circled string numbers
     \firstpart
     \secondpart
     \thirdpart
diff --git a/input/regression/tag-multiple.ly b/input/regression/tag-multiple.ly
new file mode 100644 (file)
index 0000000..d9d62a0
--- /dev/null
@@ -0,0 +1,49 @@
+\version "2.17.6"
+\header {
+
+  texidoc = "The @code{\\removeWithTag} and @code{\\keepWithTag}
+commands can name multiple tags to remove or to keep."
+
+}
+
+\layout { ragged-right= ##t }
+
+music =
+<<
+  \tag #'flood \new Voice { \voiceOne \repeat unfold 16 { c'''8 cis'''8 } }
+  \tag #'highball \new Voice { \voiceThree \repeat unfold 8 { a'4( as') } }
+  \tag #'buffoon \new Voice { \voiceFour \repeat unfold 2 { f1~ f } }
+>>
+
+demo =
+#(define-music-function (parser location fun syms m)
+  (ly:music-function? symbol-list? ly:music?)
+  #{
+    \new Staff
+    <<
+      { \mark #(string-join (map symbol->string syms) "&") \skip 1*4 }
+      $fun #syms #m
+    >>
+  #})
+
+#(set-global-staff-size 16)
+
+\markuplist {
+  \fill-line { \center-column \fontsize #5 \bold { "\\keepWithTag" } }
+  \vspace #1
+}
+\demo #keepWithTag #'(none) \music
+\demo #keepWithTag #'(flood highball buffoon) \music
+\demo #keepWithTag #'(flood buffoon) \music
+\demo #keepWithTag #'(buffoon) \music
+
+\markup \vspace #2
+
+\markuplist {
+  \fill-line { \center-column \fontsize #5 \bold { "\\removeWithTag" } }
+  \vspace #1
+}
+\demo #removeWithTag #'(none) \music
+\demo #removeWithTag #'(flood highball buffoon) \music
+\demo #removeWithTag #'(flood buffoon) \music
+\demo #removeWithTag #'(buffoon) \music
index 6ea91213b7c606996dad291486c713fb3eefd0d7..ef10b57f9c629175c4c93db2c5ce05b14dc6924a 100644 (file)
@@ -18,5 +18,7 @@ it should always show up in the output-distance testing. "
   ragged-right = ##f
 }
 
-\relative c' { c4 d f8_\f[ g-.] }
+\new PianoStaff << \new Staff \relative c' { c4 d f8_\f[ g-.] r4 }
+                  \new Staff { \clef "bass" R1 }
+               >>
 
diff --git a/input/regression/text-script-vertical-skylines.ly b/input/regression/text-script-vertical-skylines.ly
new file mode 100644 (file)
index 0000000..3657bc2
--- /dev/null
@@ -0,0 +1,23 @@
+\version "2.17.21"
+
+\header {
+  texidoc = "@code{TextScript}s are spaced closely, following outlines of
+the stencil.  When markup commands like @code{pad-around} and
+@code{with-dimensions} change the extent of a stencil, these changed
+extents have effect in the stencil outline used to place the resulting
+@code{TextScript}."
+}
+
+{
+  g'2^\markup { g \line {. . . .} }
+  e'^\markup { e }
+
+  g'2^\markup { g \transparent \line {. . . .} }
+  e'^\markup { e }
+
+  g'2^\markup { g \pad-around #0.5 \line{. . . .} }
+  e'^\markup { e }
+
+  g'2^\markup { g \with-dimensions #'(-0 . 0) #'(-0 . 0) \line {. . . .} }
+  e'^\markup { e }
+}
index 4060ef4c56d06541ebf5da3aae2cc9d2945ced38..098ef131dbe4c417abd352bf69677aa0dc366e64 100644 (file)
@@ -9,15 +9,15 @@
   ragged-right = ##t
   }
 
-\version "2.16.0"
+\version "2.17.6"
 <<
    \new Staff {
-    \override TextSpanner #'(bound-details left text) = "*"
+    \override TextSpanner.bound-details.left.text = "*"
       c'16 \startTrillSpan c' c' c' \stopTrillSpan 
       c'16 \startTextSpan c' c' c' \stopTextSpan 
    }
    \new Staff {
-     \override TextScript #'self-alignment-X = #RIGHT 
+     \override TextScript.self-alignment-X = #RIGHT 
      \repeat unfold 2 {c'4 _ \markup { "FAT" } } 
    }
 >>
index 9df1e12c692e29fac1ac53f9beff1eb6416d77cd..cf1d6f1904680a64a557178038edf1b4a99c2397 100644 (file)
@@ -5,7 +5,7 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 sample = \relative c'' {
   c2\startTextSpan c2 \break
@@ -13,15 +13,15 @@ sample = \relative c'' {
 }
 
 << {
-  \override TextSpanner #'bound-details #'left-broken #' text =
+  \override TextSpanner.bound-details.left-broken #' text =
     \markup { \large "BROKEN" }
-  \override TextSpanner #'(bound-details left text) =
+  \override TextSpanner.bound-details.left.text =
     \markup { "text" }
   \sample
 } \\ {
-  \override TextSpanner #'(bound-details left text) =
+  \override TextSpanner.bound-details.left.text =
     \markup { "text" }
-  \override TextSpanner #'bound-details #'left-broken #' text =
+  \override TextSpanner.bound-details.left-broken #' text =
     \markup { \large "BROKEN" }
   \sample
 } >>
index fb00bbd8441d89fe036245415157c72ec36c810d..aea5616fce4d6ff84a938c0b1b825fbd92410917 100644 (file)
@@ -4,7 +4,7 @@
 " }
 
 
-\version "2.16.0"
+\version "2.17.6"
 
 \paper {
   debug-tie-scoring = ##t
@@ -12,7 +12,7 @@
 }
 
 \relative c'' {
-  \override Tie #'layer = #2
+  \override Tie.layer = #2
   a ~ <fis a>
 }
 
index 5157e69b6292ee96d544b52e7328590dbbd51110..fab5dc33e876018e265bf98ba9102e1e460a59a1 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
 
@@ -14,7 +14,7 @@ has a @code{minimum-length} of 5."
 }
 
 \relative c' {
-  \override Tie #'minimum-length = #5
+  \override Tie.minimum-length = #5
   f2. f16  f  f  f ~ | \break
   f1
 }
index 5c209bbecff6145e2f0983b1d9a6e90c48f2cf73..64844ae5a4908baf65c83774c7f6c8fee2ce17cc 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header { texidoc = "
 
@@ -11,7 +11,7 @@ are tried for the extremal ties in a chord.
 \relative c'' {
   \time 4/4 <bis bis>1 ~ \break
 
-  \override Tie #'(details multi-tie-region-size) = #1
+  \override Tie.details.multi-tie-region-size = #1
   \time 3/4 <bis bis>2.~ \break
   \time 4/4 <bis bis>1 
 }
index d830bd01a9d98c4c3a51389ff806e9e264239b22..af3ec740a9c0f26e4216f6fd72f1c9d11b78ab5a 100644 (file)
@@ -55,8 +55,8 @@ translate x y z to x~x y~y z~z
 
       (list ch1 ch2)))
 
-  (make-music 'SequentialMusic 'elements (apply append
-                                               (map chord->tied-chord (ly:music-property  chords 'elements)))))
+  (make-music 'SequentialMusic 'elements (append-map
+                                         chord->tied-chord (ly:music-property  chords 'elements))))
 
 baseChords =
 \applyMusic #(lambda (mus)
index 82b34a194a81249883082e74ca4159127693dde1..147d78a160128ee79da74115e443227eb1b9595a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {texidoc = "@cindex Tie, dotted, dashed
 The appearance of ties may be changed from solid to dotted or dashed.
 "
@@ -18,7 +18,7 @@ The appearance of ties may be changed from solid to dotted or dashed.
   c2 ~ c |
   \tieDashPattern #0.4 #2.0
   c2 ~ c |
-  \once \override Tie #'dash-definition = #'((0 0.25 1 1)
+  \once \override Tie.dash-definition = #'((0 0.25 1 1)
                                              (0.3 0.7 0.4 0.75)
                                              (0.75 1.0 1.0 1.0))
   c2 ~ c |
index 9442bd3b209f23f66ee6016575a0c739ff7eb660..b882d21e0fde3bcf015f547819d2e8b57bad4ae8 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "If using integers, the tie will vertically tuned for
@@ -7,9 +7,9 @@ as the exact location."
 }
 
 \relative c'' {
-  \override Tie #'staff-position = #3
+  \override Tie.staff-position = #3
   d4 ~
-  \override Tie #'staff-position = #3.0
+  \override Tie.staff-position = #3.0
   d ~
   d
 }
index b7720bf78bd8e63a27f2c0d14628ee06fe668900..b9a535b8fe510e1b44c63e04940644a519ade5bd 100644 (file)
@@ -11,7 +11,7 @@ You can leave a Tie alone by introducing a non-pair value
 
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \layout {
   ragged-right = ##t
@@ -23,7 +23,7 @@ You can leave a Tie alone by introducing a non-pair value
   <b d f g>~
 
   
-  \once \override TieColumn #'tie-configuration =
+  \once \override TieColumn.tie-configuration =
      #'((0 . -1)  (2 . -1) (5.5 . 1) (7 . 1))
 
   <b d f g>
index 421dd11912f0202b31d671d1cf6e7c67854f7cbf..e4ba0bd0669fe95c54d7a17395e9f6e15b32ec98 100644 (file)
@@ -8,7 +8,7 @@ tweaked with @code{'direction}."
 
 
 }
-\version "2.16.0"
+\version "2.17.6"
 \layout{ragged-right=##t}
 
 {
@@ -24,7 +24,7 @@ tweaked with @code{'direction}."
   c''\laissezVibrer\repeatTie
   r
   
-  \override LaissezVibrerTie #'direction = #DOWN
-  \override RepeatTie #'direction = #DOWN
+  \override LaissezVibrerTie.direction = #DOWN
+  \override RepeatTie.direction = #DOWN
   c''\laissezVibrer_"override"\repeatTie
 } 
index 24679f4268e31ccd0b8015a2f44b30c31ee41377..23df905a94c1dd5e5aea4b87facdc11c6f6f2970 100644 (file)
@@ -5,20 +5,20 @@ specifying their @code{direction} and/@/or @code{staff-position}."
   
 }
 
-\version "2.16.0"
+\version "2.17.6"
 
 \paper {
   ragged-right = ##t
 }
 
 {
-  \override Tie #'staff-position = #-5.5
+  \override Tie.staff-position = #-5.5
   c'4 ~ c'
-  \override Tie #'staff-position = #-6.5
+  \override Tie.staff-position = #-6.5
   c'4 ~ c'
-  \override Tie #'staff-position = #-7.5
+  \override Tie.staff-position = #-7.5
   c'4 ~ c'
-  \revert Tie #'staff-position
-  \override Tie #'direction = #UP
+  \revert Tie.staff-position
+  \override Tie.direction = #UP
   c'4 ~ c'
 }
index 1b9dd8411eb2001da1c1d2ecf7109cf3ce586c17..5b62f19c22c9324d0e32e424dd18386d2c671500 100644 (file)
@@ -5,10 +5,10 @@
 
   
   }
-\version "2.16.0"
+\version "2.17.15"
 
 \paper { ragged-right =  ##t }
-\relative
+\relative c'
 {
   <f d a>1~
   <f d a>1~
index 49d3a8052d75d92b6fa0bbdaa6f857fdf0e842da..502e32bd3944c8f194270fee21c5cbad5c130563 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \header {
   texidoc = "Chained trills end at the next trill or barline.
 Collisions can be prevented by overriding @code{bound-details}.
@@ -11,10 +11,10 @@ Collisions can be prevented by overriding @code{bound-details}.
   g8 f\startTrillSpan ~
   f8 g\stopTrillSpan \startTrillSpan ~
   g8 r\stopTrillSpan r4
-  \once \override TrillSpanner #'to-barline = ##t
+  \once \override TrillSpanner.to-barline = ##t
   c1\startTrillSpan ~
   c1
-  \once \override TrillSpanner #'(bound-details right padding) = #1.2
+  \once \override TrillSpanner.bound-details.right.padding = #1.2
   c1\stopTrillSpan \startTrillSpan
   c1\stopTrillSpan\startTrillSpan
 }
index ae0ff5a4a267c48a8e8b0dc618ac4088884d0085..6cb82618f8f6e5ab66d714e96cd60e95b1a528c6 100644 (file)
@@ -2,11 +2,11 @@
     texidoc = "Trill spanner can end on a grace note"
 }
 
-\version "2.16.0"
+\version "2.17.28"
 \layout {
     ragged-right = ##T
 }
-\relative \new Voice {
+\relative c' \new Voice {
     << { c1 \startTrillSpan }
-       { s2. \grace { d16[\stopTrillSpan e] } } >>
+       { s2. \grace { d16\stopTrillSpan e } } >>
     c4 }
index 3cdc11bc51b951fc4fc6db48c254f593e3108f1a..19d7b9eb53f20d0b00a0d4cce0bf732546cdb424 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "
@@ -11,7 +11,7 @@ even if scaled to a smaller size.
 <<
   \new Staff \with {
     fontSize = #-6
-    \override StaffSymbol #'staff-space = #(magstep -6)
+    \override StaffSymbol.staff-space = #(magstep -6)
   }
   \relative c' {
     c1\startTrillSpan | c\stopTrillSpan |
index e65cbd8d959e7566c031b5e3389aa4b980ce6a26..6b84baa674f17516bb9f675a5198fccc5c9a249e 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.11"
 \header {
 
   texidoc = "In combination with a beam, the bracket of the tuplet
@@ -10,8 +10,8 @@ the bracket."
 \layout { ragged-right= ##t }
 
 \context Voice\relative c'' {
-  \times 2/3 { r  c8[ c8] }
-  \times 2/3 {  c8[ c c] }
-  \times 2/3 {  c16[ c16]  c8[ c8] }
+  \tuplet 3/2 { r  c8[ c8] }
+  \tuplet 3/2 {  c8[ c c] }
+  \tuplet 3/2 {  c16[ c16]  c8[ c8] }
 }
 
index da2167cf1c1b393e5354b1d26af4173f777d3a27..719851b26d6c6a89df045918f2d8eb87389ddb00 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "@code{TupletBracket} grobs avoid @code{Fingering} grobs.
@@ -6,6 +6,6 @@
 }
 
 \relative d'' {
- \override TupletBracket #'direction = #UP
- \times 2/3 { d4 a8-4 }
+ \override TupletBracket.direction = #UP
+ \tuplet 3/2 { d4 a8-4 }
 }
index 8df61c59508aaf642c2f7af7e2721d12e52ea7c0..1cccccde46ee50817b30775d860d2238b2657782 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "Tuplet brackets avoid scripts by default.
@@ -6,5 +6,5 @@
 }
 
 \relative c'' {
-  \times 2/3 { a8^\espressivo r a^\espressivo }
+  \tuplet 3/2 { a8^\espressivo r a^\espressivo }
 }
index 0553472d6adf4b5cc089250ea1379d93533dac2e..62ce79a461ce42e8cef0e8fb80c7186a531e8eb8 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "@code{TupletBracket} grobs avoid @code{StringNumber} grobs.
@@ -6,6 +6,6 @@
 }
 
 \relative d'' {
- \override TupletBracket #'direction = #UP
- \times 2/3 { d4 <a\4>8 }
+ \override TupletBracket.direction = #UP
+ \tuplet 3/2 { d4 <a\4>8 }
 }
index 5fb976ed5844031279e41f552902967ff2a0eebd..2e6c9d0f34a48b95a33148d17f4a5e490663f01d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \paper {
   ragged-right = ##t
@@ -12,17 +12,17 @@ even across multiple staves."
 \layout {
   \context {
     \Score
-    \override TupletBracket #'bracket-visibility = ##t
+    \override TupletBracket.bracket-visibility = ##t
   }
 }
 
 voice = {
-  \times 2/3 { b8 \change Staff=I c' d' }
-  \times 2/3 { d' c' \change Staff=II b }
-  \times 2/3 { \change Staff=III c,
+  \tuplet 3/2 { b8 \change Staff=I c' d' }
+  \tuplet 3/2 { d' c' \change Staff=II b }
+  \tuplet 3/2 { \change Staff=III c,
                \change Staff=II b
                \change Staff=I c' }
-  \times 2/3 { c'[ \change Staff=II b] c }
+  \tuplet 3/2 { c'[ \change Staff=II b] c }
 }
 
 \score {
index ea8c1ea7521400808e0b7ae5f99653cfaf3b0e1d..1713160738662bc016cdd5eff56221be43b33210 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "The direction of tuplet brackets is the direction
@@ -8,13 +8,13 @@ to UP.
 }
 
 \relative c'' {
-  \times 2/3 { r r r }
-  \times 2/3 { r c r }
-  \times 2/3 { r a r }
-  \times 2/3 { c' f,, r }
-  \times 2/3 { f, c'' r }
-  \times 2/3 { a a c }
-  \times 2/3 { c c a }
-  \times 2/3 { a a a }
-  \times 2/3 { c c c }
+  \tuplet 3/2 { r r r }
+  \tuplet 3/2 { r c r }
+  \tuplet 3/2 { r a r }
+  \tuplet 3/2 { c' f,, r }
+  \tuplet 3/2 { f, c'' r }
+  \tuplet 3/2 { a a c }
+  \tuplet 3/2 { c c a }
+  \tuplet 3/2 { a a a }
+  \tuplet 3/2 { c c c }
 }
index 46204a8efec10ceae43ab0b63a575c3980d41648..ecfa6814f77edef22dd44aa53d4594b0589cbc25 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 \header {
 
   texidoc = "Tuplet brackets' outside staff priority can be
@@ -7,16 +7,16 @@ set.  Brackets, by default, carry their numbers with them."
 }
 
 \relative c'' {
-  \override TupletBracket #'avoid-scripts = ##f
+  \override TupletBracket.avoid-scripts = ##f
   % Plain old tuplet
-  \times 2/3 { a8 r a }
+  \tuplet 3/2 { a8 r a }
   % With nothing set, collisions abound both horizontally and
   % vertically
-  \times 2/3 { a8^\espressivo r a^\espressivo }
+  \tuplet 3/2 { a8^\espressivo r a^\espressivo }
   % Setting the staff priority prevents collisions
-  \override TupletBracket #'outside-staff-priority = #1
-  \times 2/3 { a8^\espressivo r a^\espressivo }
+  \override TupletBracket.outside-staff-priority = #1
+  \tuplet 3/2 { a8^\espressivo r a^\espressivo }
   % Note that, with the outside-staff-priority set, this bracket
   % should be at the same vertical level as the first one
-  \times 2/3 { a8 r a }
+  \tuplet 3/2 { a8 r a }
 }
diff --git a/input/regression/tuplet-bracket-vertical-skylines.ly b/input/regression/tuplet-bracket-vertical-skylines.ly
new file mode 100644 (file)
index 0000000..752f595
--- /dev/null
@@ -0,0 +1,12 @@
+\version "2.17.11"
+
+\header {
+  texidoc = "Tuplet brackets do not push objects with outside-staff-priority
+too high.
+"
+}
+
+\relative c' {
+  \override TupletBracket.direction = #UP
+  \tuplet 1/1 { a^"foo" a' a' a' }
+}
index adac9915b6fadfbe0a23ab1b55de0155b2b4c3e7..1d4a986ac5444009816bebb068303e8122c8f203 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "The default behavior of tuplet-bracket visibility is to print a bracket
@@ -21,19 +21,19 @@ unless there is a beam of the same length as the tuplet.  Overriding
 }
 
 music = \relative c'' {
-  \times 2/3 { c16[ d e } f8]
-  \times 2/3 { c8 d e }
-  \times 2/3 { c4 d e }
+  \tuplet 3/2 { c16[ d e } f8]
+  \tuplet 3/2 { c8 d e }
+  \tuplet 3/2 { c4 d e }
 }
 
 \new Voice {
   \relative c' {
     << \music s4^"default" >>
-    \override TupletBracket #'bracket-visibility = #'if-no-beam
+    \override TupletBracket.bracket-visibility = #'if-no-beam
     << \music s4^"'if-no-beam" >>
-    \override TupletBracket #'bracket-visibility = ##t
+    \override TupletBracket.bracket-visibility = ##t
     << \music s4^"#t" >>
-    \override TupletBracket #'bracket-visibility = ##f
+    \override TupletBracket.bracket-visibility = ##f
     << \music s4^"#f" >>
   }
 }
index 172d28cabc0206ef457930b76480d61049ce253f..9021ead4b1a0c34a994f3af11897069dd5c14d0a 100644 (file)
@@ -8,7 +8,7 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \paper {
   ragged-right = ##t  
 
 
 \relative c'' {
-  \override TupletNumber #'text = #tuplet-number::calc-fraction-text
+  \override TupletNumber.text = #tuplet-number::calc-fraction-text
 
-  \override TupletBracket #'edge-text = #(cons
+  \override TupletBracket.edge-text = #(cons
                                          (markup #:fontsize 6
                                             #:arrow-head X LEFT #f)
                                          (markup #:arrow-head X RIGHT #f))
-  \times 11/19 {
+  \tuplet 19/11 {
     c4 c4 c4 c4
-    \bar "empty" \break
+    \bar "-" \break
     c4 c4 c4 c4
     c4 c4 c4 c4
-    \bar "empty" \break
+    \bar "-" \break
     c4 c4 c4 c4
     c4 c4 c4 
   }
index 4bf1509f5e6035ddfb1384d6622d4b55f2daf75a..f7cf547b1667930d20c46325e623391fe682eb65 100644 (file)
@@ -4,17 +4,17 @@
   attaching column for a full-length tuplet bracket can be ignored."
 
 }
-\version "2.16.0"
+\version "2.17.11"
 
 \new Staff {
    \set tupletFullLength = ##t
    
    \time 1/8
-   \times 2/3 { c'16 c'16 c'16 }
-   \times 2/3 { c'16 c'16 c'16 }
-   \override TupletBracket #'full-length-to-extent = ##f
-   \times 2/3 { c'16 c'16 c'16 }
-   \override Score.RehearsalMark #'break-visibility = ##(#t #t #t)
-   \override Score.RehearsalMark #'direction = #down
+   \tuplet 3/2 { c'16 c'16 c'16 }
+   \tuplet 3/2 { c'16 c'16 c'16 }
+   \override TupletBracket.full-length-to-extent = ##f
+   \tuplet 3/2 { c'16 c'16 c'16 }
+   \override Score.RehearsalMark.break-visibility = ##(#t #t #t)
+   \override Score.RehearsalMark.direction = #down
    \mark "xxxxxxxxxxxxxxxxxxxxxxx"
 }
index 9553f9101acfd5d59bc6bea2d00387945f81f22a..06806188b4f2b8643a98d201fafc065a766099b9 100644 (file)
@@ -6,17 +6,17 @@ the next note, by setting @code{tupletFullLengthNote}."
 
   }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \new RhythmicStaff {
   \set tupletFullLength = ##t
   \time 4/4
-  \times 4/5 {
+  \tuplet 5/4 {
     c'4 c'1
   }
   \set tupletFullLengthNote = ##t
   \time 2/4
-  \times 2/3 {
+  \tuplet 3/2 {
     c4 c c 
   }
   \time 3/4
index 5e4b46bab5af4e2ef47fb48db0e65df4baa14ad8..484d24762b5938bc2b2d7440a032ccc8c361b883 100644 (file)
@@ -5,25 +5,25 @@
 start of the next non-tuplet note.  "
 
 }
-\version "2.16.0"
+\version "2.17.11"
 
 \paper { ragged-right = ##t
-indent = 0.0 }
+  indent = 0.0
+}
 
 \relative c'' \new Voice \with {
   \remove  Forbid_line_break_engraver
-  \override Beam #'breakable = ##t
+  \override Beam.breakable = ##t
 }
 {
   \set tupletFullLength = ##t
   c4
-  \times 2/3 { c8[ c c] }
-  \times 2/3 { c8[ c \bar "empty" \break c] }
-  << \times 2/3 { c8[ c c]  }
-     { s4*5/6 \bar "empty" \break } >>
+  \tuplet 3/2 { c8[ c c] }
+  \tuplet 3/2 { c8[ c \bar "-" \break c] }
+  << \tuplet 3/2 { c8[ c c]  }
+     { s4*5/6 \bar "-" \break } >>
   c4
-  \times 2/3 { c8[ c c] }
+  \tuplet 3/2 { c8[ c c] }
   
-  \bar "|." \key c\minor
+  \bar "|." \key c \minor
 }
-  
index 5e142e25026e07ade608203206d736f477f5f8cc..4bf91a6e4d63a86f39ac627f902da74c7495e303 100644 (file)
@@ -5,7 +5,7 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \layout {
   indent = 0.0\mm
@@ -14,7 +14,7 @@
 
 
 \relative c'' {
-  \override TupletNumber #'text = #tuplet-number::calc-fraction-text
-  \times  17/12  { c8 c4 c8 c8}
+  \override TupletNumber.text = #tuplet-number::calc-fraction-text
+  \tuplet  12/17  { c8 c4 c8 c8}
 }
 
index 65a577379453d28d8558d73eb9653114e3ae4072..a163eb262b062828626fcc354206f84d8e3002ec 100644 (file)
@@ -5,13 +5,13 @@
   
 }
 
-\version "2.16.0"
+\version "2.17.11"
 \paper{
   ragged-right=##t
 }
 
 {
-  \times 4/7 {
-    \times 4/5 { c'8 d' e' f' g' } a' b' c''
+  \tuplet 7/4 {
+    \tuplet 5/4 { c'8 d' e' f' g' } a' b' c''
   }
 }
index dc273e36987619680e0487052d676806d492d07d..33876e0034c0e23c51a448a06a13da6018a5062c 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
     texidoc = "Broken nested tuplets avoid each other correctly.
   \new Staff
   <<
     \relative c'' {
-      \override Score . Beam #'breakable = ##t
+      \override Score.Beam.breakable = ##t
 
       r2
 
-      \times 4/3 {
-        \times 2/3 { c8[ c c] }
-        \times 2/3 { c8[ c c] }
-        \times 2/3 { c8[ c c] }
+      \tuplet 3/4 {
+        \tuplet 3/2 { c8[ c c] }
+        \tuplet 3/2 { c8[ c c] }
+        \tuplet 3/2 { c8[ c c] }
       }
 
-      \times 4/3 {
-        \times 2/3 { a8[ a a] }
-        \times 2/3 { a8[ a a] }
-        \times 2/3 { a8[ a a] }
+      \tuplet 3/4 {
+        \tuplet 3/2 { a8[ a a] }
+        \tuplet 3/2 { a8[ a a] }
+        \tuplet 3/2 { a8[ a a] }
       }
 
-      \override TupletNumber #'text = #tuplet-number::calc-fraction-text
-      \times 4/6 {
-        \times 2/3 {
+      \override TupletNumber.text = #tuplet-number::calc-fraction-text
+      \tuplet 6/4 {
+        \tuplet 3/2 {
           a4 a a
         }
-        \times 3/5 {
+        \tuplet 5/3 {
           a4 a a a a
         }
         a4
index 8b727c2a5ccd6570629082cdea9d2371f4d0805a..093c57f28961a7c519b8ce6041180b1210bb872f 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
     texidoc=" Tuplets may be nested."
 }
 
 \relative c'' {
-  \times 4/3 {
-    \times 2/3 { c8[ c c] }
-    \times 2/3 { c8[ c c] }
-    \times 2/3 { c8[ c c] }
+  \tuplet 3/4 {
+    \tuplet 3/2 { c8[ c c] }
+    \tuplet 3/2 { c8[ c c] }
+    \tuplet 3/2 { c8[ c c] }
   }
 
-  \times 4/3 {
-    \times 2/3 { a8[ a a] }
-    \times 2/3 { a8[ a a] }
-    \times 2/3 { a8[ a a] }
+  \tuplet 3/4 {
+    \tuplet 3/2 { a8[ a a] }
+    \tuplet 3/2 { a8[ a a] }
+    \tuplet 3/2 { a8[ a a] }
   }
 
-  \override TupletNumber #'text = #tuplet-number::calc-fraction-text
-  \times 4/6 {
-    \times 2/3 {
+  \override TupletNumber.text = #tuplet-number::calc-fraction-text
+  \tuplet 6/4 {
+    \tuplet 3/2 {
       a4 a a
     }
-    \times 3/5 {
+    \tuplet 5/3 {
       a4 a a a a
     }
   }
   s1*1/6
   
   \stemUp
-  \times 4/6 {
-    \times 2/3 {
+  \tuplet 6/4 {
+    \tuplet 3/2 {
       a1*1/6 a f'
     }
-    \times 3/5 {
+    \tuplet 5/3 {
       c f g a b 
     }
   }
index 5608e9b2932694133ca0badb97fc821efcfd79c0..8898eec6d3c726a2bd12256b801a9e20cd65fe52 100644 (file)
@@ -3,23 +3,23 @@
 }
 
 
-\version "2.16.0"
+\version "2.17.11"
 
 \layout{
  \context{
    \TabStaff
-   \override TimeSignature #'stencil = ##f
+   \omit TimeSignature
  }
  \context{
    \TabVoice
    \remove "Beam_engraver"
    \remove "Stem_engraver"
-   \override TupletBracket #'number-visibility = ##f
+   \omit TupletNumber
  }
 }
 
 partition = {
-    \times 2/3 { f8 g a }
+    \tuplet 3/2 { f8 g a }
 }
 
 
diff --git a/input/regression/tuplet-number-outside-staff-positioning.ly b/input/regression/tuplet-number-outside-staff-positioning.ly
new file mode 100644 (file)
index 0000000..8cdb353
--- /dev/null
@@ -0,0 +1,17 @@
+\version "2.17.11"
+
+\header {
+
+  texidoc = "Grobs whose parents have @code{outside-staff-priority} set
+should figure into the vertical skyline of the @code{VerticalAxisGroup}
+such that grobs with a higher @code{outside-staff-priority} are correctly
+positioned above them.
+"
+
+}
+
+\relative c'' {
+   \override TupletBracket.outside-staff-priority = #1
+   \override TupletNumber.font-size = #5
+   \tuplet 3/2 { a4\trill a\trill^"foo" a\trill }
+}
\ No newline at end of file
index 7320677be0f98b5088b083b1bbfa311cd86ce958..1a21d0cf770fb54ca73f12038a3cf2f822b642cf 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 \header {
 
   texidoc = "Tuplet numbers' outside staff priority can be
@@ -7,10 +7,10 @@ set."
 }
 
 \relative c'' {
-  \override TupletBracket #'avoid-scripts = ##f
-  \times 2/3 { a8\trill a\trill a\trill }
-  \override TupletNumber #'outside-staff-priority = #1
-  \times 2/3 { a8\trill a\trill a\trill }
-  \override Script #'outside-staff-priority = #2
-  \times 2/3 { a8\trill a\trill a\trill }
+  \override TupletBracket.avoid-scripts = ##f
+  \tuplet 3/2 { a8\trill a\trill a\trill }
+  \override TupletNumber.outside-staff-priority = #1
+  \tuplet 3/2 { a8\trill a\trill a\trill }
+  \override Script.outside-staff-priority = #2
+  \tuplet 3/2 { a8\trill a\trill a\trill }
 }
index b22f5ee35f5f1a35a75df510eac7afd6a4abbdc8..fa92b7cc43419399f73a845aec14acfef8fd62e7 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
   texidoc = "Tuplet number position is correct when slurs and scripts
@@ -10,5 +10,5 @@ are present.
 {
   R1 |
   \break
-  \times 2/3 { e8(-> e e) }
+  \tuplet 3/2 { e8(-> e e) }
 }
index 3b6d8d98888af0dcc17167ee172bf7dc280d38df..4af8ddd23ce5cf769813464453e1ae705a4d7a70 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.30"
 
 \header {
   texidoc = "Tuplet bracket formatting supports numerous options,
@@ -8,31 +8,31 @@ for instance, bracketed (B) and non-bracketed (NB).
 
 \context Voice \relative c'' {
 
-  \times 2/3 { c'8 c,, c }
-  \times 2/3 { c'8 c'' c,, }
+  \tuplet 3/2 { c'8 c,, c }
+  \tuplet 3/2 { c'8 c'' c,, }
 
-  \times 2/3 { c8[^"NB" c c] }
+  \tuplet 3/2 { c8[^"NB" c c] }
 
-  \times 2/3 { c8^"B"  c[ c] }
-  \times 2/4 { r8_"B"  c,[ c'] r8 }
+  \tuplet 3/2 { c8^"B"  c[ c] }
+  \tuplet 4/2 { r8_"B"  c,[ c'] r8 }
 
-  \override TupletBracket #'bracket-visibility = #'if-no-beam  
-  \times 2/3 { c8[ c c] }
+  \override TupletBracket.bracket-visibility = #'if-no-beam  
+  \tuplet 3/2 { c8[ c c] }
 
   \tupletUp
-  \override TupletNumber #'stencil = ##f
-  \times 2/3 { c8^""^""^"up, no digit" c[ c] }
-  \revert TupletNumber #'stencil
-
-  \override TupletBracket #'bracket-visibility = ##t
-  \override TupletBracket #'edge-height = #'(0 . 0)
-  \override TupletBracket #'shorten-pair = #'(2.0 . 2.0)
-  \times 4/6 { c_"shorter, no edges" f b  b f c}       
-  \revert TupletBracket #'edge-height
-  \revert TupletBracket #'shorten-pair
-
-  \override TupletBracket #'bracket-flare = #'(0.5 . 0.5)
-  \times 2/3 { b^""^""^"angled edges" b b }
+  \omit TupletNumber
+  \tuplet 3/2 { c8^"up, no digit" c[ c] }
+  \undo \omit TupletNumber
+
+  \override TupletBracket.bracket-visibility = ##t
+  \override TupletBracket.edge-height = #'(0 . 0)
+  \override TupletBracket.shorten-pair = #'(2.0 . 2.0)
+  \tuplet 6/4 { c_"shorter, no edges" f b  b f c}      
+  \revert TupletBracket.edge-height
+  \revert TupletBracket.shorten-pair
+
+  \override TupletBracket.bracket-flare = #'(0.5 . 0.5)
+  \tuplet 3/2 { b^"angled edges" b b }
   \tupletNeutral
-  \times 2/3 { b b b }
+  \tuplet 3/2 { b b b }
 }
index 14d3364cbc7ef52bf0f6f8806bc80e958698e11f..beda1ec33e9e9c02bedfabb504637196c3289284 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.11"
 \header {
 
   texidoc = "Tuplets may contain rests. "
@@ -9,14 +9,14 @@
 
 \context Voice  \relative c'' {
   \time 2/4
-  \times 2/3 { r c,,, c''' }
-  \times 2/3 { r c c  }
-  \times 2/3 { r c r }
-  \times 2/3 { r r r }
-  \times 2/3 { r c e }
-  \times 2/3 { c r e }
-  \times 2/3 { r c g }
-  \times 2/3 { c r g }
+  \tuplet 3/2 { r c,,, c''' }
+  \tuplet 3/2 { r c c  }
+  \tuplet 3/2 { r c r }
+  \tuplet 3/2 { r r r }
+  \tuplet 3/2 { r c e }
+  \tuplet 3/2 { c r e }
+  \tuplet 3/2 { r c g }
+  \tuplet 3/2 { c r g }
 }
 
 
index 56509d27afadd6c533db1bc098dffebfd1ebb189..322a4d635b76d0bac131aa8811cad9a66ad66d6e 100644 (file)
@@ -4,14 +4,14 @@
   texidoc = "Show tuplet numbers also on single-note tuplets (otherwise the timing would look messed up!), but don't show a bracket. Make sure that tuplets without any notes don't show any number, either."
 
 }
-\version "2.16.0"
+\version "2.17.11"
 
 \paper { ragged-right = ##t
 indent = 0.0 }
 
 \new Staff <<
   \new Voice \relative c'' {
-    \times 4/6 { c2.:8 } \times 2/3 { g4.:8 } \times 2/3 { a,4.:8 } \times 4/6 {} \bar"|."
+    \tuplet 6/4 { c2.:8 } \tuplet 3/2 { g4.:8 } \tuplet 3/2 { a,4.:8 } \tuplet 6/4 {} \bar"|."
   }
 >>
   
index cccb4ab56d428a067866d556e2de2c3416c5226f..c112f0c9af3c1e36eed00f2cb756a068e7dc110b 100644 (file)
@@ -15,20 +15,20 @@ The bracket direction is determined by the dominating stem direction.
   ragged-right = ##t 
 }
 
-\version "2.16.0"
+\version "2.17.11"
 
 \new Voice {
   \relative c'' {
-    \times 2/3 { c4 d e}
-    \times 2/3 { c4 d e}
+    \tuplet 3/2 { c4 d e}
+    \tuplet 3/2 { c4 d e}
   }
   
   \relative c' {
-    \times 4/5 { a'4 as g fis f }
-    \times 4/5 { fis4 e es d des }
-    \times 4/5 { fis,4 e es d des }
-    \times 4/5 { bes'''4 bes,, b c cis }
-    \times 4/5 { a''4 b b c cis }
+    \tuplet 5/4 { a'4 as g fis f }
+    \tuplet 5/4 { fis4 e es d des }
+    \tuplet 5/4 { fis,4 e es d des }
+    \tuplet 5/4 { bes'''4 bes,, b c cis }
+    \tuplet 5/4 { a''4 b b c cis }
   }
 }
 
index 9ae2b584b1ef71b9c6e87cff5983d58b3fc29841..8729d9747a7ba6ebb1f74045c4ca24da3cdd0cca 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.11"
 \header {
 
   texidoc = "Horizontal tuplet brackets are shifted vertically
@@ -10,9 +10,9 @@ to avoid staff line collisions."
 \layout { ragged-right= ##t }
 
 \context Voice\relative c'' {
-  \times 2/3 { b'4 b b }
-  \times 2/3 { f4 f f }
-  \times 2/3 { g4 g g }
-  \times 2/3 { a4 a a }
+  \tuplet 3/2 { b'4 b b }
+  \tuplet 3/2 { f4 f f }
+  \tuplet 3/2 { g4 g g }
+  \tuplet 3/2 { a4 a a }
 }
 
index 7a3b8b6f4502c9b372818831cb88c0ea449ffa90..82fd4b97802b1f5a0f17fd430faa29cfbb3b37ed 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 
 \header {
 
@@ -9,9 +9,9 @@ Subdivision works properly for tuplets
 
 \relative c'' {
   \set subdivideBeams = ##t
-  \set baseMoment = #(ly:make-moment 1 8)
+  \set baseMoment = #(ly:make-moment 1/8)
   \set beatStructure = #'(2 2 2 2)
   \repeat unfold 8 {
-    \times 2/3 { c16 e d }
+    \tuplet 3/2 { c16 e d }
   }
 }
index 0fae8246675c2c70b0beb0de1cb41061396c5962..7e01d344db4ff1a82d8739d9843a0c472e61a805 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 \header{
   texidoc="Non-standard tuplet texts: Printing other tuplet fractions than the ones actually assigned."
 }
@@ -6,10 +6,10 @@
 
 
 \context Voice \relative c'' {
-  \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-denominator-text 7)
-  \times 2/3  { c4. c4. c4. c4. }
-  \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-fraction-text 12 7)
-  \times 2/3  { c4. c4. c4. c4. }
-  \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
-  \times 2/3  { c4. c4. c4. c4. }
+  \once \override TupletNumber.text = #(tuplet-number::non-default-tuplet-denominator-text 7)
+  \tuplet 3/2  { c4. c4. c4. c4. }
+  \once \override TupletNumber.text = #(tuplet-number::non-default-tuplet-fraction-text 12 7)
+  \tuplet 3/2  { c4. c4. c4. c4. }
+  \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
+  \tuplet 3/2  { c4. c4. c4. c4. }
 }
index 944b592fb79b7e185960bcf6b85bd7711d9f7474..9a63ebdf4574f42c28496d06aff9996ceb0d001f 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.16.0"
+\version "2.17.11"
 \header{
   texidoc="Non-standard tuplet texts: Printing a tuplet fraction with note durations assigned to both the denominator and the numerator."
 }
 
 
 \context Voice \relative c'' {
-  \once \override TupletNumber #'text = #(tuplet-number::fraction-with-notes "4." "8")
-  \times 2/3  { c4. c4. c4. c4. }
-  \once \override TupletNumber #'text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
-  \times 2/3  { c4. c4. c4. c4. }
+  \once \override TupletNumber.text = #(tuplet-number::fraction-with-notes "4." "8")
+  \tuplet 3/2  { c4. c4. c4. c4. }
+  \once \override TupletNumber.text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
+  \tuplet 3/2  { c4. c4. c4. c4. }
 }
index 8a53c80e8d84aa5d0f14a7cdb04792c907db9889..c29e1f19973e6d8ff0f31933a51fcd148d984f10 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.11"
 \header{
   texidoc="Non-standard tuplet texts: Appending a note value to the normal text and to the fraction text."
 }
@@ -6,8 +6,8 @@
 
 
 \context Voice \relative c'' {
-  \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
-  \times 2/3  { c8 c8 c8 c8 c8 c8 }
-  \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
-  \times 2/3  { c8 c8 c8 c8 c8 c8 }
+  \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
+  \tuplet 3/2  { c8 c8 c8 c8 c8 c8 }
+  \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
+  \tuplet 3/2  { c8 c8 c8 c8 c8 c8 }
 }
index dc71b7f2166fe45dfc22a3e4ed2c22be1456ded7..c250c5bea431a78fec627a7017a57ae213bb26dd 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.11"
 \header{
   
   texidoc="
@@ -20,16 +20,16 @@ direction as the bracket. The endings can be adjusted with
 
 
 \context Voice \relative c'' {
-  \times 2/3 { a8 b c }
-  \times 2/3 { r8  b[ f] }
-  \override TupletBracket  #'bracket-flare = #'(0.5 . 0.5)
-  \times 2/3 { r8 b r8 }
+  \tuplet 3/2 { a8 b c }
+  \tuplet 3/2 { r8  b[ f] }
+  \override TupletBracket.bracket-flare = #'(0.5 . 0.5)
+  \tuplet 3/2 { r8 b r8 }
   c4 |
   
-  \times 3/4 { c4 c4 c4 c4 } c4 | 
+  \tuplet 4/3 { c4 c4 c4 c4 } c4 | 
   
   \time 6/8
-  \times 6/9 { c8 c c c c c c c c }
+  \tuplet 9/6 { c8 c c c c c c c c }
 
 }
 
index 1e8a1acb93f81326544c796413c82a6caaa01e35..92bab856430f9b76f6032893e8b5d198346e4594 100644 (file)
@@ -8,8 +8,7 @@ heavily mutilated Edition Peters Morgenlied by Schubert"
 
 }
 
-\version "2.16.0"
-#(ly:expect-warning (_ "(De)crescendo with unspecified starting volume in MIDI."))
+\version "2.17.6"
 #(ly:expect-warning (_ "(De)crescendo with unspecified starting volume in MIDI."))
 
 ignoreMelisma =        \set ignoreMelismata = ##t
@@ -35,7 +34,7 @@ modernAccidentals = {
 melody =    \relative c'' \repeat volta 2 \context Voice = "singer" {
   \time 6/8
   \autoBeamOff
-  << s2.^\markup {  \larger { \hspace #-3.0 Lieblich, etwas geschwind } }
+  << s2.^\markup {  \larger \line { \hspace #-3.1 Lieblich, etwas geschwind } }
      R2.
   >>
   r4 r8 c4 g8 |
@@ -77,14 +76,14 @@ secondVerse = \lyricmode {
 }
 
 pianoRH =  \relative c''' \repeat volta 2\new Voice {
-  \accidentalStyle "modern"
+  \accidentalStyle modern
   \voiceOne
   g16( fis a g fis g f e d c b
   \oneVoice
   a ) | 
   <g e>8( <es fis a> <d e bes'> <c e c'>\arpeggio) r8 r | 
   r8 c'( e,) f r a |
-  \once \override DynamicLineSpanner   #'padding =#3
+  \once \override DynamicLineSpanner.padding =#3
   r8
   << { fis( g) } \\
      << { a4 } { s8\> s8\! } >>
@@ -100,7 +99,7 @@ pianoRH =  \relative c''' \repeat volta 2\new Voice {
              }
 
 pianoLH =  \relative c'' \repeat volta 2\new Voice {
-    \accidentalStyle "modern"
+    \accidentalStyle modern
     \voiceTwo
     g16( fis a g fis g
 
@@ -124,9 +123,9 @@ pianoLH =  \relative c'' \repeat volta 2\new Voice {
       << \time 6/8
         \new Staff \with {
           fontSize = #-3
-          \override StaffSymbol #'staff-space = #(magstep -3)
+          \override StaffSymbol.staff-space = #(magstep -3)
         } <<
-          \context Staff \accidentalStyle "modern"
+          \context Staff \accidentalStyle modern
           \melody >>
         \lyricsto "singer" \new Lyrics \firstVerse
         \lyricsto "singer" \new Lyrics \secondVerse
@@ -148,15 +147,15 @@ pianoLH =  \relative c'' \repeat volta 2\new Voice {
       \layout {
        \context {
          \Lyrics
-         \override LyricText #'font-size = #-1
+         \override LyricText.font-size = #-1
        }
        \context {
          \Score
-         \override Beam #'beam-thickness = #0.55
-         \override Beam #'auto-knee-gap = #4.0
-         \override SpacingSpanner #'spacing-increment = #1.0
-         \override Stem #'stemlet-length = #0.5
-         \override Slur #'height-limit = #1.5
+         \override Beam.beam-thickness = #0.55
+         \override Beam.auto-knee-gap = #4.0
+         \override SpacingSpanner.spacing-increment = #1.0
+         \override Stem.stemlet-length = #0.5
+         \override Slur.height-limit = #1.5
        }
       }
       
index b60479dc173875cd5fd8b930457523b81ac95886..09971b0e27381517af4e15604b7fa727c2a40c85 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc = "unpure-pure containers take two arguments: an unpure property and
@@ -17,9 +17,9 @@ of 8.
 \relative c'' {
   \stemUp \autoBeamOff
   d,8 eis'
-  \once \override Flag #'Y-offset =
+  \once \override Flag.Y-offset =
     #(ly:make-unpure-pure-container ly:flag::calc-y-offset 8)
   d,8 eis'!
-  \once \override Flag #'Y-offset = #8
+  \once \override Flag.Y-offset = #8
   d,8 eis'!
 }
diff --git a/input/regression/volta-bracket-add-volta-hook.ly b/input/regression/volta-bracket-add-volta-hook.ly
new file mode 100644 (file)
index 0000000..158c64c
--- /dev/null
@@ -0,0 +1,14 @@
+\version "2.17.5"
+
+\header {
+  texidoc = "Volta bracket end hooks can be added for other bar line types.
+"
+}
+
+#(allow-volta-hook "|")
+
+\new Staff {
+  \repeat volta 2 { c'1 }
+  \alternative { { c'1 } { d'1 } }
+  e'1
+}
\ No newline at end of file
diff --git a/input/regression/volta-bracket-vertical-skylines.ly b/input/regression/volta-bracket-vertical-skylines.ly
new file mode 100644 (file)
index 0000000..40b788d
--- /dev/null
@@ -0,0 +1,13 @@
+\version "2.16.0"
+
+\header {
+  texidoc = "Volta brackets are vertically fit to objects below them.
+"
+}
+
+\new Staff {
+  \repeat volta 3 { r2 a''''4 r4 }
+  \alternative { { r2 d''''4 r4 } { r2 d''''4 r4 } { r2 d''''4 r4 } }
+  \repeat volta 3 { r2 a''''4 r4 }
+  \alternative { { r2 a''''4 r4 } { r2 a''''4 r4 } { r2 a''''4 r4 } }
+}
\ No newline at end of file
index 514f7400794510df064226d749c8f3a4c460ddf3..3b1c30971fc40762dbc3650f6661b973430373c5 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header { texidoc = "If the 'whiteout property of a
 grob is set to #t, that part of all objects in lower
@@ -10,11 +10,11 @@ Tie but not the StaffSymbol.
 
 \relative c' {
   \time 3/4
-  \override Staff.StaffSymbol #'layer = #4
-  \once \override Tie #'layer = #2
+  \override Staff.StaffSymbol.layer = #4
+  \once \override Tie.layer = #2
   b'2.~
-  \once \override Staff.TimeSignature #'whiteout = ##t
-  \once \override Staff.TimeSignature #'layer = #3
+  \once \override Staff.TimeSignature.whiteout = ##t
+  \once \override Staff.TimeSignature.layer = #3
   \time 5/4
   b4
 }
index b998e5867b693d9ff0ed9c2a6da7780bcec1c692..c2802628ea9ff2e3895c4099669b451a4e47a65f 100644 (file)
@@ -4,7 +4,7 @@
 markup.  "
 
 }
-\version "2.16.0"
+\version "2.17.6"
 
 \paper
 {
@@ -12,7 +12,7 @@ markup.  "
 }
 
 \relative c'' {
-  \override TextScript #'layer = #'2
-  \override TextScript #'extra-offset = #'(2 . 4)
+  \override TextScript.layer = #'2
+  \override TextScript.extra-offset = #'(2 . 4)
   c4-\markup  { \whiteout \pad-markup #0.5 foo } c
 }
index 65d2eb95debbde3a35d6f3ecf156c86ee6c5b1bf..6e3eb0a42870062c481f2270d54c399dbb7bac66 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 \header {
   texidoc="
@@ -7,9 +7,9 @@ Setting staff-space to 0 does not cause a segmentation fault.
 }
 
 \new Staff \with {
-  \override StaffSymbol #'staff-space = #0
+  \override StaffSymbol.staff-space = #0
   } {
   \relative c' {
-    c1 \bar ":|"
+    c1 \bar ":|."
   }
 }
index 1872af74ce740499b504667e426d916c0935a12c..6d9afd770c4ed991e520c84e33d6f1d43029042f 100644 (file)
@@ -2,20 +2,14 @@
 depth = ..
 
 NAME = lilypond
-SUBDIRS = include
 
 MODULE_LIBS=$(depth)/flower
 MODULE_INCLUDES= $(depth)/flower/include
 
-# need this to convert between function pointers and member function pointers.
-MODULE_CXXFLAGS= -Wno-pmf-conversions 
-
 
 HELP2MAN_EXECS = lilypond
 STEPMAKE_TEMPLATES=c c++ executable po help2man
 
-OUT_DIST_FILES=$(addprefix $(outdir)/,parser.hh parser.cc)
-
 include $(depth)/make/stepmake.make
 
 ifeq ($(LINK_GXX_STATICALLY),yes)
@@ -78,6 +72,11 @@ endif
 $(outdir)/lexer.cc: $(config_h)
 $(outdir)/parser.cc: $(config_h)
 
+ifneq ($(LILYPOND_EXTERNAL_BINARY),)
+$(outdir)/lilypond.1: $(LILYPOND_EXTERNAL_BINARY) $(buildscript-dir)/help2man
+       $(buildscript-dir)/help2man $(LILYPOND_EXTERNAL_BINARY) > $@
+endif
+
 $(outdir)/general-scheme.o: $(outdir)/version.hh
 $(outdir)/lily-guile.o: $(outdir)/version.hh
 $(outdir)/lily-version.o: $(outdir)/version.hh
index 9c4d8976fe19c43d6dbae0e87b8a1a110e83d459..ac525d27de59984baaf236d467f934f9c2236864 100644 (file)
@@ -73,7 +73,7 @@ protected:
   TRANSLATOR_DECLARATIONS (Accidental_engraver);
   void process_music ();
 
-  void acknowledge_tie (Grob_info);
+  void acknowledge_end_tie (Grob_info);
   void acknowledge_arpeggio (Grob_info);
   void acknowledge_rhythmic_head (Grob_info);
   void acknowledge_finger (Grob_info);
@@ -329,7 +329,11 @@ Accidental_engraver::make_standard_accidental (Stream_event * /* note */,
   if (!accidental_placement_)
     accidental_placement_ = make_item ("AccidentalPlacement",
                                        a->self_scm ());
-  Accidental_placement::add_accidental (accidental_placement_, a);
+
+  Accidental_placement::add_accidental
+    (accidental_placement_, a,
+     get_property ("accidentalGrouping") == ly_symbol2scm ("voice"),
+     (long) trans);
 
   note_head->set_object ("accidental-grob", a->self_scm ());
 
@@ -468,7 +472,7 @@ Accidental_engraver::acknowledge_rhythmic_head (Grob_info info)
 }
 
 void
-Accidental_engraver::acknowledge_tie (Grob_info info)
+Accidental_engraver::acknowledge_end_tie (Grob_info info)
 {
   ties_.push_back (dynamic_cast<Spanner *> (info.grob ()));
 }
@@ -502,7 +506,7 @@ Accidental_engraver::process_music ()
 ADD_ACKNOWLEDGER (Accidental_engraver, arpeggio);
 ADD_ACKNOWLEDGER (Accidental_engraver, finger);
 ADD_ACKNOWLEDGER (Accidental_engraver, rhythmic_head);
-ADD_ACKNOWLEDGER (Accidental_engraver, tie);
+ADD_END_ACKNOWLEDGER (Accidental_engraver, tie);
 ADD_ACKNOWLEDGER (Accidental_engraver, note_column);
 
 ADD_TRANSLATOR (Accidental_engraver,
@@ -525,6 +529,7 @@ ADD_TRANSLATOR (Accidental_engraver,
                 "internalBarNumber "
                 "extraNatural "
                 "harmonicAccidentals "
+                "accidentalGrouping "
                 "keySignature "
                 "localKeySignature ",
 
index ff67181434c17525f7f5dc6a0aabc8ebbd1af6e2..da23e5719498bfbc97222d4bc90890a2207ccaae 100644 (file)
@@ -27,6 +27,7 @@
 #include "pointer-group-interface.hh"
 #include "rhythmic-head.hh"
 #include "skyline.hh"
+#include "skyline-pair.hh"
 #include "stream-event.hh"
 #include "warn.hh"
 
@@ -46,7 +47,7 @@ accidental_pitch (Grob *acc)
 }
 
 void
-Accidental_placement::add_accidental (Grob *me, Grob *a)
+Accidental_placement::add_accidental (Grob *me, Grob *a, bool stagger, long context_hash)
 {
   Pitch *p = accidental_pitch (a);
   if (!p)
@@ -54,11 +55,12 @@ Accidental_placement::add_accidental (Grob *me, Grob *a)
 
   a->set_parent (me, X_AXIS);
   a->set_property ("X-offset", Grob::x_parent_positioning_proc);
-  int n = p->get_notename ();
+  long n = p->get_notename ();
 
   SCM accs = me->get_object ("accidental-grobs");
-  SCM key = scm_from_int (n);
-  SCM entry = scm_assq (key, accs);
+  SCM key = scm_cons (scm_from_int (n), scm_from_long  (stagger ? context_hash : 1));
+  // assoc because we're dealing with pairs
+  SCM entry = scm_assoc (key, accs);
   if (entry == SCM_BOOL_F)
     entry = SCM_EOL;
   else
@@ -66,7 +68,7 @@ Accidental_placement::add_accidental (Grob *me, Grob *a)
 
   entry = scm_cons (a->self_scm (), entry);
 
-  accs = scm_assq_set_x (accs, key, entry);
+  accs = scm_assoc_set_x (accs, key, entry);
 
   me->set_object ("accidental-grobs", accs);
 }
@@ -115,21 +117,24 @@ Accidental_placement::get_relevant_accidentals (vector<Grob *> const &elts, Grob
 
 struct Accidental_placement_entry
 {
-  Skyline left_skyline_;
-  Skyline right_skyline_;
-  Interval vertical_extent_;
-  vector<Box> extents_;
+  Skyline_pair horizontal_skylines_;
   vector<Grob *> grobs_;
 };
 
 Real ape_priority (Accidental_placement_entry const *a)
 {
-  return a->vertical_extent_[UP];
+  // right is up because we're horizontal
+  return a->horizontal_skylines_.right ();
 }
 
 bool ape_less (Accidental_placement_entry *const &a,
                Accidental_placement_entry *const &b)
 {
+  vsize size_a = a->grobs_.size ();
+  vsize size_b = b->grobs_.size ();
+  if (size_a != size_b)
+    return size_b < size_a;
+
   return ape_priority (a) < ape_priority (b);
 }
 
@@ -182,23 +187,42 @@ stagger_apes (vector<Accidental_placement_entry *> *apes)
   vector<Accidental_placement_entry *> asc = *apes;
 
   vector_sort (asc, &ape_less);
+  // we do the staggering below based on size
+  // this ensures that if a placement has 4 entries, it will
+  // always be closer to the NoteColumn than a placement with 1
+  // this allows accidentals to be on-average closer to notes
+  // while still preserving octave alignment
+  vector<vector<Accidental_placement_entry *> > ascs;
+
+  vsize sz = INT_MAX;
+  for (vsize i = 0; i < asc.size (); i++)
+    {
+      vsize my_sz = asc[i]->grobs_.size ();
+      if (sz != my_sz)
+        ascs.push_back (vector<Accidental_placement_entry *> ());
+      ascs.back ().push_back (asc[i]);
+      sz = my_sz;
+    }
 
   apes->clear ();
 
-  int parity = 1;
-  for (vsize i = 0; i < asc.size ();)
+  for (vsize i = 0; i < ascs.size (); i++)
     {
-      Accidental_placement_entry *a = 0;
-      if (parity)
+      int parity = 1;
+      for (vsize j = 0; j < ascs[i].size ();)
         {
-          a = asc.back ();
-          asc.pop_back ();
-        }
-      else
-        a = asc[i++];
+          Accidental_placement_entry *a = 0;
+          if (parity)
+            {
+              a = ascs[i].back ();
+              ascs[i].pop_back ();
+            }
+          else
+            a = ascs[i][j++];
 
-      apes->push_back (a);
-      parity = !parity;
+          apes->push_back (a);
+          parity = !parity;
+        }
     }
 
   reverse (*apes);
@@ -261,17 +285,17 @@ set_ape_skylines (Accidental_placement_entry *ape,
           offset -= a->extent (a, X_AXIS).length () + padding;
         }
 
-      vector<Box> boxes = Accidental_interface::accurate_boxes (a, common);
-      ape->extents_.insert (ape->extents_.end (), boxes.begin (), boxes.end ());
-
-      for (vsize j = boxes.size (); j--;)
-        ape->vertical_extent_.unite (boxes[j][Y_AXIS]);
+      if (Skyline_pair *sky = Skyline_pair::unsmob (a->get_property ("horizontal-skylines")))
+        {
+          Skyline_pair copy (*sky);
+          copy.raise (a->relative_coordinate (common[X_AXIS], X_AXIS));
+          copy.shift (a->relative_coordinate (common[Y_AXIS], Y_AXIS));
+          ape->horizontal_skylines_.merge (copy);
+        }
 
       last_octave = p->get_octave ();
       last_alteration = p->get_alteration ();
     }
-  ape->left_skyline_ = Skyline (ape->extents_, 0, Y_AXIS, LEFT);
-  ape->right_skyline_ = Skyline (ape->extents_, 0, Y_AXIS, RIGHT);
 }
 
 static vector<Grob *>
@@ -318,9 +342,8 @@ extract_heads_and_stems (vector<Accidental_placement_entry *> const &apes)
   for (vsize i = ret.size (); i--;)
     if (Grob *s = Rhythmic_head::get_stem (ret[i]))
       ret.push_back (s);
-
-  vector_sort (ret, less<Grob *> ());
-  uniq (ret);
+  
+  uniquify (ret);
   return ret;
 }
 
@@ -350,7 +373,7 @@ build_heads_skyline (vector<Grob *> const &heads_and_stems,
     head_extents.push_back (Box (heads_and_stems[i]->extent (common[X_AXIS], X_AXIS),
                                  heads_and_stems[i]->pure_height (common[Y_AXIS], 0, INT_MAX)));
 
-  return Skyline (head_extents, 0, Y_AXIS, LEFT);
+  return Skyline (head_extents, Y_AXIS, LEFT);
 }
 
 /*
@@ -375,13 +398,14 @@ position_apes (Grob *me,
     {
       Accidental_placement_entry *ape = apes[i];
 
-      Real offset = -ape->right_skyline_.distance (left_skyline);
+      Real offset = -ape->horizontal_skylines_[RIGHT]
+                    .distance (left_skyline, 0.1);
       if (isinf (offset))
         offset = last_offset;
       else
         offset -= padding;
 
-      Skyline new_left_skyline = ape->left_skyline_;
+      Skyline new_left_skyline = ape->horizontal_skylines_[LEFT];
       new_left_skyline.raise (offset);
       new_left_skyline.merge (left_skyline);
       left_skyline = new_left_skyline;
@@ -390,8 +414,12 @@ position_apes (Grob *me,
       for (vsize j = ape->grobs_.size (); j--;)
         ape->grobs_[j]->translate_axis (offset, X_AXIS);
 
-      for (vsize j = ape->extents_.size (); j--;)
-        width.unite (offset + ape->extents_[j][X_AXIS]);
+      for (LEFT_and_RIGHT (d))
+        {
+          Real mh = ape->horizontal_skylines_[d].max_height ();
+          if (!isinf (mh))
+            width.add_point (mh);
+        }
 
       last_offset = offset;
     }
index 77129b6f9dc43dfe30e2d7cfd2b98d76cdba492d..ce05dfff722f6ed9d7847714415000babf2538cb 100644 (file)
@@ -25,6 +25,7 @@
 #include "paper-column.hh"
 #include "pitch.hh"
 #include "stencil.hh"
+#include "skyline-pair.hh"
 
 Stencil
 parenthesize (Grob *me, Stencil m)
@@ -68,6 +69,53 @@ Accidental_interface::width (SCM smob)
   return get_extent (unsmob_grob (smob), X_AXIS);
 }
 
+MAKE_SCHEME_CALLBACK (Accidental_interface, horizontal_skylines, 1);
+SCM
+Accidental_interface::horizontal_skylines (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  if (!me->is_live ())
+    return Skyline_pair ().smobbed_copy ();
+
+  /*
+   * Using the print function may trigger a suicide
+   * before line breaking. It is therefore `unpure' (c).
+   * We use the more basic get_stencil.
+   */
+  Stencil *my_stencil = unsmob_stencil (get_stencil (me));
+  if (!my_stencil)
+    return Skyline_pair ().smobbed_copy ();
+
+  Skyline_pair *sky =
+    Skyline_pair::unsmob
+      (Stencil::skylines_from_stencil
+        (my_stencil->smobbed_copy (), 0.0, Y_AXIS));
+
+  SCM alist = me->get_property ("glyph-name-alist");
+  SCM alt = me->get_property ("alteration");
+  string glyph_name = robust_scm2string (ly_assoc_get (alt, alist, SCM_BOOL_F),
+                                                       "");
+  if (glyph_name == "accidentals.flat"
+      || glyph_name == "accidentals.flatflat")
+    {
+      // a bit more padding for the right of the stem
+      // we raise the stem horizontally to a bit less than the average
+      // horizontal "height" of the entire glyph. This will bring flats
+      // closer to doubleflats, which looks better (MS opinion).
+      // this should work for all fonts where the flat is not
+      // completely bizarre
+      Real left = my_stencil->extent (X_AXIS)[LEFT];
+      Real right = my_stencil->extent (X_AXIS)[RIGHT] * 0.375;
+      Real down = my_stencil->extent (Y_AXIS)[DOWN];
+      Real up = my_stencil->extent (Y_AXIS)[UP];
+      vector<Box> boxes;
+      boxes.push_back (Box (Interval (left, right), Interval (down, up)));
+      Skyline merge_with_me (boxes, Y_AXIS, RIGHT);
+      (*sky)[RIGHT].merge (merge_with_me);
+    }
+  return sky->smobbed_copy ();
+}
+
 MAKE_SCHEME_CALLBACK (Accidental_interface, pure_height, 3);
 SCM
 Accidental_interface::pure_height (SCM smob, SCM start_scm, SCM)
@@ -89,85 +137,6 @@ Accidental_interface::pure_height (SCM smob, SCM start_scm, SCM)
   return ly_interval2scm (Interval ());
 }
 
-vector<Box>
-Accidental_interface::accurate_boxes (Grob *me, Grob **common)
-{
-  Box b;
-  b[X_AXIS] = me->extent (me, X_AXIS);
-  b[Y_AXIS] = me->extent (me, Y_AXIS);
-
-  vector<Box> boxes;
-
-  bool parens = to_boolean (me->get_property ("parenthesized"));
-  if (!me->is_live ())
-    return boxes;
-
-  if (!to_boolean (me->get_property ("restore-first"))
-      && !parens)
-    {
-      SCM alist = me->get_property ("glyph-name-alist");
-      SCM alt = me->get_property ("alteration");
-      string glyph_name = robust_scm2string (ly_assoc_get (alt, alist, SCM_BOOL_F),
-                                             "");
-
-      if (glyph_name == "accidentals.flat"
-          || glyph_name == "accidentals.mirroredflat")
-        {
-          Box stem = b;
-          Box bulb = b;
-
-          /*
-            we could make the stem thinner, but that places the flats
-            really close.
-          */
-          Direction bulb_dir
-            = glyph_name == "accidentals.mirroredflat" ? LEFT : RIGHT;
-          stem[X_AXIS][bulb_dir] = stem[X_AXIS].center ();
-
-          /*
-            To prevent vertical alignment for 6ths
-          */
-          stem[Y_AXIS] *= 1.1;
-          bulb[Y_AXIS][UP] *= .35;
-
-          boxes.push_back (bulb);
-          boxes.push_back (stem);
-        }
-      else if (glyph_name == "accidentals.natural")
-        {
-          Box lstem = b;
-          Box rstem = b;
-          Box belly = b;
-
-          lstem[Y_AXIS] *= 1.1;
-          rstem[Y_AXIS] *= 1.1;
-
-          belly[Y_AXIS] *= 0.75;
-          lstem[X_AXIS][RIGHT] *= .33;
-          rstem[X_AXIS][LEFT] = rstem[X_AXIS].linear_combination (1.0 / 3.0);
-          lstem[Y_AXIS][DOWN] = belly[Y_AXIS][DOWN];
-          rstem[Y_AXIS][UP] = belly[Y_AXIS][UP];
-          boxes.push_back (belly);
-          boxes.push_back (lstem);
-          boxes.push_back (rstem);
-        }
-      /*
-        TODO: add support for, double flat.
-      */
-    }
-
-  if (!boxes.size ())
-    boxes.push_back (b);
-
-  Offset o (me->relative_coordinate (common[X_AXIS], X_AXIS),
-            me->relative_coordinate (common[Y_AXIS], Y_AXIS));
-
-  for (vsize i = boxes.size (); i--;)
-    boxes[i].translate (o);
-
-  return boxes;
-}
-
 MAKE_SCHEME_CALLBACK (Accidental_interface, print, 1);
 SCM
 Accidental_interface::print (SCM smob)
@@ -231,6 +200,7 @@ ADD_INTERFACE (Accidental_interface,
                "avoid-slur "
                "forced "
                "glyph-name-alist "
+               "glyph-name "
                "hide-tied-accidental-after-break "
                "parenthesized "
                "restore-first "
index 0e350c142628d8db4eda48664b7a6e554f5443d8..8a2a8d9b819a4469f2b60c73f75f1d0899963d91 100644 (file)
@@ -121,7 +121,7 @@ get_skylines (Grob *me,
                   Box b;
                   b[a] = begin_of_line_extent;
                   b[other_axis (a)] = Interval (-infinity_f, -1);
-                  skylines.insert (b, 0, other_axis (a));
+                  skylines.insert (b, other_axis (a));
                 }
             }
 
@@ -130,7 +130,7 @@ get_skylines (Grob *me,
               Box b;
               b[a] = extent;
               b[other_axis (a)] = Interval (0, infinity_f);
-              skylines.insert (b, 0, other_axis (a));
+              skylines.insert (b, other_axis (a));
             }
         }
 
@@ -185,6 +185,16 @@ Align_interface::internal_get_minimum_translations (Grob *me,
   if (!pure && a == Y_AXIS && dynamic_cast<Spanner *> (me) && !me->get_system ())
     me->programming_error ("vertical alignment called before line-breaking");
 
+  // check the cache
+  if (pure)
+    {
+      SCM fv = ly_assoc_get (scm_cons (scm_from_int (start), scm_from_int (end)),
+                             me->get_property ("minimum-translations-alist"),
+                             SCM_EOL);
+      if (fv != SCM_EOL)
+        return ly_scm2floatvector (fv);
+    }
+
   // If include_fixed_spacing is true, we look at things like system-system-spacing
   // and alignment-distances, which only make sense for the toplevel VerticalAlignment.
   // If we aren't toplevel, we're working on something like BassFigureAlignment
@@ -285,6 +295,15 @@ Align_interface::internal_get_minimum_translations (Grob *me,
           all_translates.push_back (w);
         }
     }
+
+  if (pure)
+    {
+      SCM mta = me->get_property ("minimum-translations-alist");
+      mta = scm_cons (scm_cons (scm_cons (scm_from_int (start), scm_from_int (end)),
+                                ly_floatvector2scm (all_translates)),
+                      mta);
+      me->set_property ("minimum-translations-alist", mta);
+    }
   return all_translates;
 }
 
@@ -312,24 +331,11 @@ Align_interface::align_elements_to_minimum_distances (Grob *me, Axis a)
       all_grobs[j]->translate_axis (translates[j], a);
 }
 
-MAKE_SCHEME_CALLBACK (Align_interface, full_score_pure_minimum_translations, 1);
-SCM
-Align_interface::full_score_pure_minimum_translations (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-  extract_grob_set (me, "elements", all_grobs);
-
-  vector<Real> pure_minimum_translations = Align_interface::get_pure_minimum_translations (me, all_grobs, Y_AXIS, 0, INT_MAX);
-  return ly_floatvector2scm (pure_minimum_translations);
-}
-
 Real
 Align_interface::get_pure_child_y_translation (Grob *me, Grob *ch, int start, int end)
 {
   extract_grob_set (me, "elements", all_grobs);
-  vector<Real> translates = start == 0 && end == INT_MAX
-                            ? ly_scm2floatvector (me->get_object ("full-score-pure-minimum-translations"))
-                            : get_pure_minimum_translations (me, all_grobs, Y_AXIS, start, end);
+  vector<Real> translates = get_pure_minimum_translations (me, all_grobs, Y_AXIS, start, end);
 
   if (translates.size ())
     {
@@ -386,8 +392,8 @@ ADD_INTERFACE (Align_interface,
                /* properties */
                "align-dir "
                "axes "
-               "full-score-pure-minimum-translations "
                "elements "
+               "minimum-translations-alist "
                "padding "
                "positioning-done "
                "stacking-dir "
index 36ede54bb45236d4307738ac355aecf4a1b7e81f..cf0d4e90860d79d8268fdd463ed4bf717a3953d9 100644 (file)
@@ -28,7 +28,7 @@
 #include "warn.hh"
 
 Index_to_charcode_map const *
-All_font_metrics::get_index_to_charcode_map (string filename,
+All_font_metrics::get_index_to_charcode_map (const string &filename,
                                              int face_index,
                                              FT_Face face)
 {
@@ -40,7 +40,7 @@ All_font_metrics::get_index_to_charcode_map (string filename,
   return &filename_charcode_maps_map_[key];
 }
 
-All_font_metrics::All_font_metrics (string path)
+All_font_metrics::All_font_metrics (const string &path)
 {
   otf_dict_ = new Scheme_hash_table;
 
@@ -109,7 +109,7 @@ All_font_metrics::find_pango_font (PangoFontDescription const *description,
 #endif
 
 Open_type_font *
-All_font_metrics::find_otf (string name)
+All_font_metrics::find_otf (const string &name)
 {
   SCM sname = ly_symbol2scm (name.c_str ());
   SCM val;
@@ -140,7 +140,7 @@ All_font_metrics::find_otf (string name)
 }
 
 Font_metric *
-All_font_metrics::find_font (string name)
+All_font_metrics::find_font (const string &name)
 {
   Font_metric *f = find_otf (name);
 
index 92fee10a50a3fddf160078537e9f5dfee526559e..99d3f8a3350ce2eee60f67635b3fe8476a472225 100644 (file)
@@ -197,7 +197,7 @@ Ambitus_engraver::finalize ()
           Separation_item::add_conditional_item (heads_[d],
                                                  accidental_placement);
           Accidental_placement::add_accidental (accidental_placement,
-                                                accidentals_[d]);
+                                                accidentals_[d], false, 0);
           Pointer_group_interface::add_grob (ambitus_,
                                              ly_symbol2scm ("note-heads"),
                                              heads_[d]);
index 19f635f7f1f28f9829880f618bfddebd838a2ff9..2a6d3771d79ac364584aac5c0ff778eac8f9db8c 100644 (file)
 
 #include "engraver.hh"
 
-#include "pointer-group-interface.hh"
 #include "arpeggio.hh"
-#include "stem.hh"
+#include "item.hh"
+#include "note-column.hh"
+#include "pointer-group-interface.hh"
 #include "rhythmic-head.hh"
+#include "separation-item.hh"
 #include "side-position-interface.hh"
+#include "stem.hh"
 #include "stream-event.hh"
-#include "note-column.hh"
-#include "item.hh"
 
 #include "translator.icc"
 
@@ -37,6 +38,8 @@ public:
 
   void acknowledge_stem (Grob_info);
   void acknowledge_rhythmic_head (Grob_info);
+  void acknowledge_note_column (Grob_info);
+
 protected:
   void process_music ();
   void stop_translation_timestep ();
@@ -83,6 +86,13 @@ Arpeggio_engraver::acknowledge_rhythmic_head (Grob_info info)
     Side_position_interface::add_support (arpeggio_, info.grob ());
 }
 
+void
+Arpeggio_engraver::acknowledge_note_column (Grob_info info)
+{
+  if (arpeggio_)
+    Separation_item::add_conditional_item (info.grob (), arpeggio_);
+}
+
 void
 Arpeggio_engraver::process_music ()
 {
@@ -101,6 +111,7 @@ Arpeggio_engraver::stop_translation_timestep ()
 
 ADD_ACKNOWLEDGER (Arpeggio_engraver, stem);
 ADD_ACKNOWLEDGER (Arpeggio_engraver, rhythmic_head);
+ADD_ACKNOWLEDGER (Arpeggio_engraver, note_column);
 
 ADD_TRANSLATOR (Arpeggio_engraver,
                 /* doc */
index 96b6bbd3d5e3be8ee09313fed12249c3f0c2e372..4de173da061b38b32d4c7652291ad3c290cd5514 100644 (file)
@@ -56,6 +56,29 @@ Arpeggio::get_common_y (Grob *me)
   return common;
 }
 
+MAKE_SCHEME_CALLBACK (Arpeggio, calc_cross_staff, 1);
+SCM
+Arpeggio::calc_cross_staff (SCM grob)
+{
+  Grob *me = unsmob_grob (grob);
+
+  extract_grob_set (me, "stems", stems);
+  Grob *vag = 0;
+
+  for (vsize i = 0; i < stems.size (); i++)
+    {
+      if (!i)
+        vag = Grob::get_vertical_axis_group (stems[i]);
+      else
+        {
+          if (vag != Grob::get_vertical_axis_group (stems[i]))
+            return SCM_BOOL_T;
+        }
+    }
+
+  return SCM_BOOL_F;
+}
+
 MAKE_SCHEME_CALLBACK (Arpeggio, calc_positions, 1);
 SCM
 Arpeggio::calc_positions (SCM grob)
@@ -140,7 +163,7 @@ Arpeggio::print (SCM smob)
   if (dir)
     {
       Font_metric *fm = Font_interface::get_default_font (me);
-      arrow = fm->find_by_name ("scripts.arpeggio.arrow." + to_string (dir));
+      arrow = fm->find_by_name ("scripts.arpeggio.arrow." + ::to_string (dir));
       heads[dir] -= dir * arrow.extent (Y_AXIS).length ();
     }
 
@@ -169,7 +192,7 @@ Arpeggio::brew_chord_bracket (SCM smob)
   Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
   Real sp = 1.5 * Staff_symbol_referencer::staff_space (me);
   Real dy = heads.length () + sp;
-  Real x = 0.7;
+  Real x = robust_scm2double (me->get_property ("protrusion"), 0.4);
 
   Stencil mol (Lookup::bracket (Y_AXIS, Interval (0, dy), lt, x, lt));
   mol.translate_axis (heads[LEFT] - sp / 2.0, Y_AXIS);
@@ -227,9 +250,10 @@ ADD_INTERFACE (Arpeggio,
 
                /* properties */
                "arpeggio-direction "
+               "dash-definition " // TODO: make apply to non-slur arpeggios
                "positions "
+               "protrusion "
                "script-priority " // TODO: make around-note-interface
                "stems "
-               "dash-definition " // TODO: make apply to non-slur arpeggios
               );
 
index 07f74e11c78f95ea489d894a23ea2372d7caa600..90344949656a7d01d9d06e72c2c3ff5e6e196ee4 100644 (file)
@@ -38,7 +38,6 @@ articulation_list (vector<Stream_event *> note_events,
                    vector<Stream_event *> articulation_events,
                    char const *articulation_name)
 {
-  vector<Stream_event *> string_events;
   SCM articulations = SCM_EOL;
   vsize j = 0;
 
index 201e8fd98e7cf4939c1de6b4a7e8ca64efc540d6..a41357b28f296239350e38e770af2c01b7df7d21 100644 (file)
@@ -58,15 +58,41 @@ void
 Audio_note::tie_to (Audio_note *t, Moment skip)
 {
   tied_ = t;
-  Audio_note *first = t;
-  while (first->tied_)
-    first = first->tied_;
+  Audio_note *first = tie_head();
   // Add the skip to the tied note and the length of the appended note
   // to the full duration of the tie...
   first->length_mom_ += skip + length_mom_;
   length_mom_ = 0;
 }
 
+Audio_note *
+Audio_note::tie_head ()
+{
+  Audio_note *first = this;
+  while (first->tied_)
+    first = first->tied_;
+  return first;
+}
+
+string
+Audio_note::to_string () const
+{
+  string s = "#<Audio_note pitch ";
+  s += pitch_.to_string();
+  s += " len ";
+  s += length_mom_.to_string();
+  if (tied_)
+    {
+      s += " tied to " + tied_->to_string();
+    }
+  if (tie_event_)
+    {
+      s += " tie_event";
+    }
+  s += ">";
+  return s;
+}
+
 Audio_key::Audio_key (int acc, bool major)
 {
   accidentals_ = acc;
@@ -172,9 +198,25 @@ Audio_time_signature::Audio_time_signature (int beats, int one_beat)
   one_beat_ = one_beat;
 }
 
-Audio_text::Audio_text (Audio_text::Type type, string text_string)
+Audio_text::Audio_text (Audio_text::Type type, const string &text_string)
 {
   text_string_ = text_string;
   type_ = type;
 }
 
+Audio_control_function_value_change
+::Audio_control_function_value_change (Control control, Real value)
+  : control_ (control), value_ (value)
+{
+}
+
+const Audio_control_function_value_change::Context_property
+Audio_control_function_value_change::context_properties_[] = {
+  // property name, enum constant, lower bound for range, upper bound for range
+  { "midiBalance",     BALANCE,      -1.0, 1.0 },
+  { "midiPanPosition", PAN_POSITION, -1.0, 1.0 },
+  { "midiReverbLevel", REVERB_LEVEL,  0.0, 1.0 },
+  { "midiChorusLevel", CHORUS_LEVEL,  0.0, 1.0 },
+  // extra element to signify the end of the mapping, must be kept last
+  { 0,                 NUM_CONTROLS,  0.0, 0.0 }
+};
index fe9c94ae542ea1bf502f7272eb25aa06c97c01af..b5c7f88ce6f7ecf782f7d2511ce83f25a3a506a6 100644 (file)
@@ -38,7 +38,9 @@ class Auto_beam_engraver : public Engraver
 
 protected:
   void stop_translation_timestep ();
-  void process_music ();
+  void process_acknowledged ();
+
+  virtual void process_music ();
   virtual void finalize ();
   virtual void derived_mark () const;
 
@@ -49,17 +51,15 @@ protected:
   DECLARE_ACKNOWLEDGER (stem);
   DECLARE_TRANSLATOR_LISTENER (beam_forbid);
 
-  void process_acknowledged ();
-
 private:
-  bool test_moment (Direction, Moment, Moment);
+  virtual bool test_moment (Direction, Moment, Moment);
   void consider_begin (Moment, Moment);
   void consider_end (Moment, Moment);
   Spanner *create_beam ();
   void begin_beam ();
   void end_beam ();
   void junk_beam ();
-  bool is_same_grace_state (Grob *e);
+  virtual bool is_same_grace_state (Moment, Moment);
   void recheck_beam ();
   void typeset_beam ();
   vector<Item *> *remove_end_stems (vsize);
@@ -263,6 +263,13 @@ Auto_beam_engraver::junk_beam ()
   shortest_mom_ = Moment (Rational (1, 4));
 }
 
+bool
+Auto_beam_engraver::is_same_grace_state (Moment start, Moment now)
+{
+  return bool (start.grace_part_) == bool (now.grace_part_);
+}
+
+
 void
 Auto_beam_engraver::end_beam ()
 {
@@ -397,10 +404,10 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info)
     }
 
   /*
-    ignore grace notes.
+    ignore interspersed grace notes.
   */
   Moment now = now_mom ();
-  if (bool (beam_start_location_.grace_part_) != bool (now.grace_part_))
+  if (!is_same_grace_state (beam_start_location_, now))
     return;
 
   Duration *stem_duration = unsmob_duration (ev->get_property ("duration"));
@@ -564,3 +571,91 @@ ADD_TRANSLATOR (Auto_beam_engraver,
                 /* write */
                 ""
                );
+
+class Grace_auto_beam_engraver : public Auto_beam_engraver
+{
+  TRANSLATOR_DECLARATIONS (Grace_auto_beam_engraver);
+  DECLARE_TRANSLATOR_LISTENER (beam_forbid);
+
+private:
+  Moment last_grace_start_; // Full starting time of last grace group
+  Moment last_grace_position_; // Measure position of same
+  virtual void process_music ();
+  virtual bool is_same_grace_state (Moment, Moment);
+  virtual bool test_moment (Direction, Moment, Moment);
+};
+
+Grace_auto_beam_engraver::Grace_auto_beam_engraver ()
+{
+  last_grace_start_.main_part_.set_infinite (-1);
+  // grace_part_ is zero -> test_moment is false, last_grace_position_
+  // not considered.
+}
+
+IMPLEMENT_TRANSLATOR_LISTENER (Grace_auto_beam_engraver, beam_forbid);
+void
+Grace_auto_beam_engraver::listen_beam_forbid (Stream_event *ev)
+{
+  Auto_beam_engraver::listen_beam_forbid (ev);
+}
+
+bool
+Grace_auto_beam_engraver::is_same_grace_state (Moment, Moment)
+{
+  // This is for ignoring interspersed grace notes in main note
+  // beaming.  We never want to ignore something inside of grace note
+  // beaming, so return true.
+  return true;
+}
+
+void
+Grace_auto_beam_engraver::process_music ()
+{
+  Moment now = now_mom ();
+  // Update last_grace_start_ and last_grace_position_ only when the
+  // main time advances.
+  if (now.main_part_ > last_grace_start_.main_part_)
+    {
+      last_grace_start_ = now;
+      last_grace_position_ = measure_position (context ());
+    }
+
+  Auto_beam_engraver::process_music ();
+}
+
+bool
+Grace_auto_beam_engraver::test_moment (Direction dir, Moment test_mom, Moment)
+{
+  // If no grace group started this main moment, we have no business
+  // beaming.  Same if we have left the original main time step.
+  if (!last_grace_start_.grace_part_
+      || last_grace_position_.main_part_ != test_mom.main_part_)
+    return false;
+  // Autobeam start only when at the start of the grace group.
+  if (dir == START)
+      return last_grace_position_ == test_mom;
+  // Autobeam end only when the grace part is finished.
+  return !test_mom.grace_part_;
+}
+
+ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, stem);
+ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, bar_line);
+ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, beam);
+ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, breathing_sign);
+ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, rest);
+ADD_TRANSLATOR (Grace_auto_beam_engraver,
+                /* doc */
+                "Generates one autobeam group across an entire grace phrase. "
+                " As usual, any manual beaming or @code{\\noBeam} will block"
+                " autobeaming, just like setting the context property"
+                " @samp{autoBeaming} to @code{##f}.",
+
+                /* create */
+                "Beam ",
+
+                /* read */
+                "autoBeaming ",
+
+                /* write */
+                ""
+               );
index b52fb16bb4b8dc80fcc4526cec1c7c2785a5459a..1efa379e9d2cc2194e57c97756a7e932ad0466c3 100644 (file)
@@ -38,7 +38,7 @@ protected:
 private:
   SCM split_list_;
   Direction where_dir_;
-  void change_to (Music_iterator *, SCM, string);
+  void change_to (Music_iterator *, SCM, const string&);
   Moment start_moment_;
 
   Context_handle up_;
@@ -47,7 +47,7 @@ private:
 
 void
 Auto_change_iterator::change_to (Music_iterator *it, SCM to_type_sym,
-                                 string to_id)
+                                 const string &to_id)
 {
   Context *current = it->get_outlet ();
   Context *last = 0;
index 10ad7f59922796e33043cca02e1d0f31567400e6..295ba8b403284ec2d270dfc0435f27c0b855b01d 100644 (file)
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "axis-group-engraver.hh"
+#include "engraver.hh"
 
 #include "axis-group-interface.hh"
+#include "hara-kiri-group-spanner.hh"
 #include "pointer-group-interface.hh"
 #include "context.hh"
 #include "international.hh"
 
 #include "translator.icc"
 
+/**
+   Put stuff in a Spanner with an Axis_group_interface.
+   Use as last element of a context.
+*/
+class Axis_group_engraver : public Engraver
+{
+protected:
+  bool active_;
+  Spanner *staffline_;
+  SCM interesting_;
+  vector<Grob *> elts_;
+  void process_music ();
+  virtual void initialize ();
+  virtual void finalize ();
+  DECLARE_ACKNOWLEDGER (grob);
+  void process_acknowledged ();
+  virtual Spanner *get_spanner ();
+  virtual void add_element (Grob *);
+  virtual bool must_be_last () const;
+  virtual void derived_mark () const;
+
+public:
+  TRANSLATOR_DECLARATIONS (Axis_group_engraver);
+};
+
+
 Axis_group_engraver::Axis_group_engraver ()
 {
   staffline_ = 0;
+  interesting_ = SCM_EOL;
+  active_ = false;
 }
 
+void
+Axis_group_engraver::initialize ()
+{
+  active_ = !to_boolean (get_property ("hasAxisGroup"));
+  if (active_)
+    context ()->set_property ("hasAxisGroup", SCM_BOOL_T);
+}
+
+void
+Axis_group_engraver::derived_mark () const
+{
+  scm_gc_mark (interesting_);
+}
+
+
 bool
 Axis_group_engraver::must_be_last () const
 {
@@ -42,12 +86,13 @@ Axis_group_engraver::must_be_last () const
 void
 Axis_group_engraver::process_music ()
 {
-  if (!staffline_)
+  if (!staffline_ && active_)
     {
       staffline_ = get_spanner ();
       Grob *it = unsmob_grob (get_property ("currentCommandColumn"));
       staffline_->set_bound (LEFT, it);
     }
+  interesting_ = get_property ("keepAliveInterfaces");
 }
 
 Spanner *
@@ -71,7 +116,17 @@ Axis_group_engraver::finalize ()
 void
 Axis_group_engraver::acknowledge_grob (Grob_info i)
 {
-  elts_.push_back (i.grob ());
+  if (staffline_)
+    elts_.push_back (i.grob ());
+
+  if (staffline_ && to_boolean(staffline_->get_property("remove-empty")))
+    {
+      for (SCM s = interesting_; scm_is_pair (s); s = scm_cdr (s))
+        {
+          if (i.grob ()->internal_has_interface (scm_car (s)))
+            Hara_kiri_group_spanner::add_interesting_item (staffline_, i.grob ());
+        }
+    }
 }
 
 /*
@@ -121,8 +176,10 @@ ADD_TRANSLATOR (Axis_group_engraver,
                 "VerticalAxisGroup ",
 
                 /* read */
-                "currentCommandColumn ",
-
+                "currentCommandColumn "
+                "keepAliveInterfaces "
+                "hasAxisGroup ",
+                
                 /* write */
-                ""
+                "hasAxisGroup "
                );
index febff36afb6462d4b39137d46e1c7c221414ab73..1e945f2f9ec8e58f768dc0ae50932e4f450b70e3 100644 (file)
 
 #include "axis-group-interface.hh"
 
+#include <map>
+
 #include "align-interface.hh"
 #include "directional-element-interface.hh"
 #include "grob-array.hh"
 #include "hara-kiri-group-spanner.hh"
 #include "international.hh"
+#include "interval-set.hh"
 #include "lookup.hh"
 #include "paper-column.hh"
 #include "paper-score.hh"
 static bool
 pure_staff_priority_less (Grob *const &g1, Grob *const &g2);
 
+Real Axis_group_interface::default_outside_staff_padding_ = 0.46;
+
+Real
+Axis_group_interface::get_default_outside_staff_padding ()
+{
+  return default_outside_staff_padding_;
+}
+
 void
 Axis_group_interface::add_element (Grob *me, Grob *e)
 {
@@ -232,8 +243,11 @@ Axis_group_interface::adjacent_pure_heights (SCM smob)
       if (to_boolean (g->get_property ("cross-staff")))
         continue;
 
+      if (!g->is_live ())
+        continue;
+
       bool outside_staff = scm_is_number (g->get_property ("outside-staff-priority"));
-      Real padding = robust_scm2double (g->get_property ("outside-staff-padding"), 0.5);
+      Real padding = robust_scm2double (g->get_property ("outside-staff-padding"), get_default_outside_staff_padding ());
 
       // When we encounter the first outside-staff grob, make a copy
       // of the current heights to use as an estimate for the staff heights.
@@ -381,9 +395,7 @@ SCM
 Axis_group_interface::calc_skylines (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
-  extract_grob_set (me, "elements", elts);
-  Skyline_pair skylines = skyline_spacing (me, elts);
-
+  Skyline_pair skylines = skyline_spacing (me);
   return skylines.smobbed_copy ();
 }
 
@@ -424,11 +436,15 @@ Axis_group_interface::combine_skylines (SCM smob)
 SCM
 Axis_group_interface::generic_group_extent (Grob *me, Axis a)
 {
+  extract_grob_set (me, "elements", elts);
+
   /* trigger the callback to do skyline-spacing on the children */
   if (a == Y_AXIS)
-    (void) me->get_property ("vertical-skylines");
+    for (vsize i = 0; i < elts.size (); i++)
+      if (!(Stem::has_interface (elts[i])
+            && to_boolean (elts[i]->get_property ("cross-staff"))))
+        (void) elts[i]->get_property ("vertical-skylines");
 
-  extract_grob_set (me, "elements", elts);
   Grob *common = common_refpoint_of_array (elts, me, a);
 
   Real my_coord = me->relative_coordinate (common, a);
@@ -458,28 +474,45 @@ SCM
 Axis_group_interface::calc_pure_relevant_grobs (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
+  /* TODO: Filter out elements that belong to a different Axis_group,
+     such as the tie in
+     << \new Staff=A { c'1~ \change Staff=B c'}
+        \new Staff=B { \clef bass R1 R } >>
+    because thier location relative to this Axis_group is not known before
+    page layout.  For now, we need to trap this case in calc_pure_y_common.
+  */
   return internal_calc_pure_relevant_grobs (me, "elements");
 }
 
 SCM
-Axis_group_interface::internal_calc_pure_relevant_grobs (Grob *me, string grob_set_name)
+Axis_group_interface::internal_calc_pure_relevant_grobs (Grob *me, const string &grob_set_name)
 {
   extract_grob_set (me, grob_set_name.c_str (), elts);
 
   vector<Grob *> relevant_grobs;
-  SCM pure_relevant_p = ly_lily_module_constant ("pure-relevant?");
 
   for (vsize i = 0; i < elts.size (); i++)
     {
-      if (to_boolean (scm_apply_1 (pure_relevant_p, elts[i]->self_scm (), SCM_EOL)))
+      if (elts[i] && elts[i]->is_live ())
         relevant_grobs.push_back (elts[i]);
-
+      /*
+        TODO (mikesol): it is probably bad that we're reading prebroken
+        pieces from potentially suicided elements.  This behavior
+        has been in current master since at least 2.16.
+
+        We need to fully suicide all Items, meaning that their
+        prebroken pieces should not be accessible, which means that
+        Item::handle_prebroken_dependencies should only be called
+        AFTER this list is composed.  The list composition function
+        should probably not check for suicided items or NULL pointers
+        but leave that to the various methods that use it.
+      */
       if (Item *it = dynamic_cast<Item *> (elts[i]))
         {
           for (LEFT_and_RIGHT (d))
             {
               Item *piece = it->find_prebroken_piece (d);
-              if (piece && to_boolean (scm_apply_1 (pure_relevant_p, piece->self_scm (), SCM_EOL)))
+              if (piece && piece->is_live ())
                 relevant_grobs.push_back (piece);
             }
         }
@@ -500,6 +533,12 @@ Axis_group_interface::calc_pure_y_common (SCM smob)
 
   extract_grob_set (me, "pure-relevant-grobs", elts);
   Grob *common = common_refpoint_of_array (elts, me, Y_AXIS);
+  if (common != me && Align_interface::has_interface (common))
+    {
+      me->programming_error("My pure_y_common is a VerticalAlignment,"
+                            " which might contain several staves.");
+      common = me;
+    }
   if (!common)
     {
       me->programming_error ("No common parent found in calc_pure_y_common.");
@@ -547,7 +586,7 @@ Axis_group_interface::pure_group_height (Grob *me, int start, int end)
       programming_error ("no pure Y common refpoint");
       return Interval ();
     }
-  Real my_coord = me->relative_coordinate (common, Y_AXIS);
+  Real my_coord = me->pure_relative_y_coordinate (common, start, end);
   Interval r (relative_pure_height (me, start, end));
 
   return r - my_coord;
@@ -603,116 +642,219 @@ pure_staff_priority_less (Grob *const &g1, Grob *const &g2)
 }
 
 static void
-add_boxes (Grob *me, Grob *x_common, Grob *y_common, vector<Box> *const boxes, Skyline_pair *skylines)
+add_interior_skylines (Grob *me, Grob *x_common, Grob *y_common, vector<Skyline_pair> *skylines)
 {
-  /* if a child has skylines, use them instead of the extent box */
-  if (Skyline_pair *pair = Skyline_pair::unsmob (me->get_property ("vertical-skylines")))
-    {
-      Skyline_pair s = *pair;
-      s.shift (me->relative_coordinate (x_common, X_AXIS));
-      s.raise (me->relative_coordinate (y_common, Y_AXIS));
-      skylines->merge (s);
-    }
-  else if (Grob_array *elements = unsmob_grob_array (me->get_object ("elements")))
+  if (Grob_array *elements = unsmob_grob_array (me->get_object ("elements")))
     {
       for (vsize i = 0; i < elements->size (); i++)
-        add_boxes (elements->grob (i), x_common, y_common, boxes, skylines);
+        add_interior_skylines (elements->grob (i), x_common, y_common, skylines);
     }
   else if (!scm_is_number (me->get_property ("outside-staff-priority"))
            && !to_boolean (me->get_property ("cross-staff")))
     {
-      boxes->push_back (Box (me->extent (x_common, X_AXIS),
-                             me->extent (y_common, Y_AXIS)));
+      Skyline_pair *maybe_pair = Skyline_pair::unsmob (me->get_property ("vertical-skylines"));
+      if (!maybe_pair)
+        return;
+      if (maybe_pair->is_empty ())
+        return;
+      skylines->push_back (Skyline_pair (*maybe_pair));
+      skylines->back ().shift (me->relative_coordinate (x_common, X_AXIS));
+      skylines->back ().raise (me->relative_coordinate (y_common, Y_AXIS));
     }
 }
 
-/* We want to avoid situations like this:
-           still more text
-      more text
-   text
-   -------------------
-   staff
-   -------------------
-
-   The point is that "still more text" should be positioned under
-   "more text".  In order to achieve this, we place the grobs in several
-   passes.  We keep track of the right-most horizontal position that has been
-   affected by the current pass so far (actually we keep track of 2
-   positions, one for above the staff, one for below).
-
-   In each pass, we loop through the unplaced grobs from left to right.
-   If the grob doesn't overlap the right-most affected position, we place it
-   (and then update the right-most affected position to point to the right
-   edge of the just-placed grob).  Otherwise, we skip it until the next pass.
-*/
+// Raises the grob elt (whose skylines are given by h_skyline
+// and v_skyline) so that it doesn't intersect with staff_skyline,
+// or with anything in other_h_skylines and other_v_skylines.
+void
+avoid_outside_staff_collisions (Grob *elt,
+                                Skyline_pair *v_skyline,
+                                Real padding,
+                                Real horizon_padding,
+                                vector<Skyline_pair> const &other_v_skylines,
+                                vector<Real> const &other_padding,
+                                vector<Real> const &other_horizon_padding,
+                                Direction const dir)
+{
+  assert (other_v_skylines.size () == other_padding.size ());
+  assert (other_v_skylines.size () == other_horizon_padding.size ());
+  vector<Interval> forbidden_intervals;
+  for (vsize j = 0; j < other_v_skylines.size (); j++)
+    {
+      Skyline_pair const &v_other = other_v_skylines[j];
+      Real pad = max (padding, other_padding[j]);
+      Real horizon_pad = max (horizon_padding, other_horizon_padding[j]);
+
+      // We need to push elt up by at least this much to be above v_other.
+      Real up = (*v_skyline)[DOWN].distance (v_other[UP], horizon_pad) + pad;
+      // We need to push elt down by at least this much to be below v_other.
+      Real down = (*v_skyline)[UP].distance (v_other[DOWN], horizon_pad) + pad;
+
+      forbidden_intervals.push_back (Interval (-down, up));
+    }
+
+  Interval_set allowed_shifts
+    = Interval_set::interval_union (forbidden_intervals).complement ();
+  Real move = allowed_shifts.nearest_point (0, dir);
+  v_skyline->raise (move);
+  elt->translate_axis (move, Y_AXIS);
+}
+
+SCM
+valid_outside_staff_placement_directive (Grob *me)
+{
+  SCM directive = me->get_property ("outside-staff-placement-directive");
+
+  if ((directive == ly_symbol2scm ("left-to-right-greedy"))
+      || (directive == ly_symbol2scm ("left-to-right-polite"))
+      || (directive == ly_symbol2scm ("right-to-left-greedy"))
+      || (directive == ly_symbol2scm ("right-to-left-polite")))
+    return directive;
+
+  me->warning (_f ("\"%s\" is not a valid outside-staff-placement-directive",
+                   robust_symbol2string (directive, "").c_str ()));
+
+  return ly_symbol2scm ("left-to-right-polite");
+}
+
+// Shifts the grobs in elements to ensure that they (and any
+// connected riders) don't collide with the staff skylines
+// or anything in all_X_skylines.  Afterwards, the skylines
+// of the grobs in elements will be added to all_v_skylines.
 static void
-add_grobs_of_one_priority (Skyline_pair *const skylines,
+add_grobs_of_one_priority (Grob *me,
+                           Drul_array<vector<Skyline_pair> > *all_v_skylines,
+                           Drul_array<vector<Real> > *all_paddings,
+                           Drul_array<vector<Real> > *all_horizon_paddings,
                            vector<Grob *> elements,
                            Grob *x_common,
-                           Grob *y_common)
+                           Grob *y_common,
+                           multimap<Grob *, Grob *> const &riders)
 {
-  vector<Box> boxes;
-  Drul_array<Real> last_affected_position;
 
-  reverse (elements);
+  SCM directive
+    = valid_outside_staff_placement_directive (me);
+
+  bool l2r = ((directive == ly_symbol2scm ("left-to-right-greedy"))
+              || (directive == ly_symbol2scm ("left-to-right-polite")));
+
+  bool polite = ((directive == ly_symbol2scm ("left-to-right-polite"))
+                 || (directive == ly_symbol2scm ("right-to-left-polite")));
+
+  vector<Box> boxes;
+  vector<Skyline_pair> skylines_to_merge;
+
+  // We want to avoid situations like this:
+  //           still more text
+  //      more text
+  //   text
+  //   -------------------
+  //   staff
+  //   -------------------
+
+  // The point is that "still more text" should be positioned under
+  // "more text".  In order to achieve this, we place the grobs in several
+  // passes.  We keep track of the right-most horizontal position that has been
+  // affected by the current pass so far (actually we keep track of 2
+  // positions, one for above the staff, one for below).
+
+  // In each pass, we loop through the unplaced grobs from left to right.
+  // If the grob doesn't overlap the right-most affected position, we place it
+  // (and then update the right-most affected position to point to the right
+  // edge of the just-placed grob).  Otherwise, we skip it until the next pass.
   while (!elements.empty ())
     {
-      last_affected_position[UP] = -infinity_f;
-      last_affected_position[DOWN] = -infinity_f;
-      /* do one pass */
-      for (vsize i = elements.size (); i--;)
+      Drul_array<Real> last_end (-infinity_f, -infinity_f);
+      vector<Grob *> skipped_elements;
+      for (vsize i = l2r ? 0 : elements.size ();
+           l2r ? i < elements.size () : i--;
+           l2r ? i++ : 0)
         {
-          Direction dir = get_grob_direction (elements[i]);
+          Grob *elt = elements[i];
+          Real padding
+            = robust_scm2double (elt->get_property ("outside-staff-padding"),
+                                 Axis_group_interface
+                                 ::get_default_outside_staff_padding ());
+          Real horizon_padding
+            = robust_scm2double (elt->get_property ("outside-staff-horizontal-padding"), 0.0);
+          Interval x_extent = elt->extent (x_common, X_AXIS);
+          x_extent.widen (horizon_padding);
+
+          Direction dir = get_grob_direction (elt);
           if (dir == CENTER)
             {
               warning (_ ("an outside-staff object should have a direction, defaulting to up"));
               dir = UP;
             }
 
-          Box b (elements[i]->extent (x_common, X_AXIS),
-                 elements[i]->extent (y_common, Y_AXIS));
-          SCM horizon_padding_scm = elements[i]->get_property ("outside-staff-horizontal-padding");
-          Real horizon_padding = robust_scm2double (horizon_padding_scm, 0.0);
+          if (x_extent[LEFT] <= last_end[dir] && polite)
+            {
+              skipped_elements.push_back (elt);
+              continue;
+            }
+          last_end[dir] = x_extent[RIGHT];
 
-          if (b[X_AXIS][LEFT] - 2 * horizon_padding < last_affected_position[dir])
+          Skyline_pair *v_orig = Skyline_pair::unsmob (elt->get_property ("vertical-skylines"));
+          if (v_orig->is_empty ())
             continue;
 
-          if (!b[X_AXIS].is_empty () && !b[Y_AXIS].is_empty ())
+          // Find the riders associated with this grob, and merge their
+          // skylines with elt's skyline.
+          typedef multimap<Grob *, Grob *>::const_iterator GrobMapIterator;
+          pair<GrobMapIterator, GrobMapIterator> range = riders.equal_range (elt);
+          vector<Skyline_pair> rider_v_skylines;
+          for (GrobMapIterator j = range.first; j != range.second; j++)
             {
-              boxes.clear ();
-              boxes.push_back (b);
-              Skyline other = Skyline (boxes, horizon_padding, X_AXIS, -dir);
-              Real padding = robust_scm2double (elements[i]->get_property ("outside-staff-padding"), 0.5);
-              Real dist = (*skylines)[dir].distance (other) + padding;
-
-              if (dist > 0)
+              Grob *rider = j->second;
+              Skyline_pair *v_rider = Skyline_pair::unsmob (rider->get_property ("vertical-skylines"));
+              if (v_rider)
                 {
-                  b.translate (Offset (0, dir * dist));
-                  elements[i]->translate_axis (dir * dist, Y_AXIS);
+                  Skyline_pair copy (*v_rider);
+                  copy.shift (rider->relative_coordinate (x_common, X_AXIS));
+                  copy.raise (rider->relative_coordinate (y_common, Y_AXIS));
+                  rider_v_skylines.push_back (copy);
                 }
-              skylines->insert (b, 0, X_AXIS);
-              elements[i]->set_property ("outside-staff-priority", SCM_BOOL_F);
-              last_affected_position[dir] = b[X_AXIS][RIGHT];
             }
-
-          /*
-            Ugh: quadratic. --hwn
-           */
-          elements.erase (elements.begin () + i);
+          Skyline_pair v_skylines (*v_orig);
+          v_skylines.shift (elt->relative_coordinate (x_common, X_AXIS));
+          v_skylines.raise (elt->relative_coordinate (y_common, Y_AXIS));
+          v_skylines.merge (Skyline_pair (rider_v_skylines));
+
+          avoid_outside_staff_collisions (elt,
+                                          &v_skylines,
+                                          padding,
+                                          horizon_padding,
+                                          (*all_v_skylines)[dir],
+                                          (*all_paddings)[dir],
+                                          (*all_horizon_paddings)[dir],
+                                          dir);
+
+          elt->set_property ("outside-staff-priority", SCM_BOOL_F);
+          (*all_v_skylines)[dir].push_back (v_skylines);
+          (*all_paddings)[dir].push_back (padding);
+          (*all_horizon_paddings)[dir].push_back (horizon_padding);
         }
+      swap (elements, skipped_elements);
+      skipped_elements.clear ();
     }
 }
 
-bool
-Axis_group_interface::has_outside_staff_parent (Grob *me)
+// If the Grob has a Y-ancestor with outside-staff-priority, return it.
+// Otherwise, return 0.
+Grob *
+Axis_group_interface::outside_staff_ancestor (Grob *me)
 {
-  return (me
-          ? (scm_is_number (me->get_property ("outside-staff-priority"))
-             || has_outside_staff_parent (me->get_parent (Y_AXIS)))
-          : false);
+  Grob *parent = me->get_parent (Y_AXIS);
+  if (!parent)
+    return 0;
+
+  if (scm_is_number (parent->get_property ("outside-staff-priority")))
+    return parent;
+
+  return outside_staff_ancestor (parent);
 }
 
-// TODO: it is tricky to correctly handle skyline placement of cross-staff grobs.
+// It is tricky to correctly handle skyline placement of cross-staff grobs.
 // For example, cross-staff beams cannot be formatted until the distance between
 // staves is known and therefore any grobs that depend on the beam cannot be placed
 // until the skylines are known. On the other hand, the distance between staves should
@@ -722,8 +864,23 @@ Axis_group_interface::has_outside_staff_parent (Grob *me)
 // that there is no room for the cross-staff grob. It also means, of course, that
 // we don't get the benefits of skyline placement for cross-staff grobs.
 Skyline_pair
-Axis_group_interface::skyline_spacing (Grob *me, vector<Grob *> elements)
+Axis_group_interface::skyline_spacing (Grob *me)
 {
+  extract_grob_set (me, Grob_array::unsmob (me->get_object ("vertical-skyline-elements")) ? "vertical-skyline-elements" : "elements", fakeelements);
+  vector<Grob *> elements (fakeelements);
+  for (vsize i = 0; i < elements.size (); i++)
+    /*
+      As a sanity check, we make sure that no grob with an outside staff priority
+      has a Y-parent that also has an outside staff priority, which would result
+      in two movings.
+    */
+    if (scm_is_number (elements[i]->get_property ("outside-staff-priority"))
+        && outside_staff_ancestor (elements[i]))
+      {
+        elements[i]->warning ("Cannot set outside-staff-priority for element and elements' Y parent.");
+        elements[i]->set_property ("outside-staff-priority", SCM_BOOL_F);
+      }
+
   /* For grobs with an outside-staff-priority, the sorting function might
      call extent and cause suicide. This breaks the contract that is required
      for the STL sort function. To avoid this, we make sure that any suicides
@@ -737,25 +894,52 @@ Axis_group_interface::skyline_spacing (Grob *me, vector<Grob *> elements)
   Grob *x_common = common_refpoint_of_array (elements, me, X_AXIS);
   Grob *y_common = common_refpoint_of_array (elements, me, Y_AXIS);
 
-  assert (y_common == me);
+  if (y_common != me)
+    {
+      me->programming_error("Some of my vertical-skyline-elements"
+                            " are outside my VerticalAxisGroup.");
+      y_common = me;
+    }
+
+  // A rider is a grob that is not outside-staff, but has an outside-staff
+  // ancestor.  In that case, the rider gets moved along with its ancestor.
+  multimap<Grob *, Grob *> riders;
 
   vsize i = 0;
-  vector<Box> boxes;
+  vector<Skyline_pair> inside_staff_skylines;
 
-  Skyline_pair skylines;
   for (i = 0; i < elements.size ()
        && !scm_is_number (elements[i]->get_property ("outside-staff-priority")); i++)
-    if (!(to_boolean (elements[i]->get_property ("cross-staff")) || has_outside_staff_parent (elements[i])))
-      add_boxes (elements[i], x_common, y_common, &boxes, &skylines);
+    {
+      Grob *elt = elements[i];
+      Grob *ancestor = outside_staff_ancestor (elt);
+      if (!(to_boolean (elt->get_property ("cross-staff")) || ancestor))
+        add_interior_skylines (elt, x_common, y_common, &inside_staff_skylines);
+      if (ancestor)
+        riders.insert (pair<Grob *, Grob *> (ancestor, elt));
+    }
+
+  Skyline_pair skylines (inside_staff_skylines);
+
+  // These are the skylines of all outside-staff grobs
+  // that have already been processed.  We keep them around in order to
+  // check them for collisions with the currently active outside-staff grob.
+  Drul_array<vector<Skyline_pair> > all_v_skylines;
+  Drul_array<vector<Real> > all_paddings;
+  Drul_array<vector<Real> > all_horizon_paddings;
+  for (UP_and_DOWN (d))
+    {
+      all_v_skylines[d].push_back (skylines);
+      all_paddings[d].push_back (0);
+      all_horizon_paddings[d].push_back (0);
+    }
 
-  SCM padding_scm = me->get_property ("skyline-horizontal-padding");
-  Real padding = robust_scm2double (padding_scm, 0.1);
-  skylines.merge (Skyline_pair (boxes, padding, X_AXIS));
   for (; i < elements.size (); i++)
     {
       if (to_boolean (elements[i]->get_property ("cross-staff")))
         continue;
 
+      // Collect all the outside-staff grobs that have a particular priority.
       SCM priority = elements[i]->get_property ("outside-staff-priority");
       vector<Grob *> current_elts;
       current_elts.push_back (elements[i]);
@@ -767,9 +951,26 @@ Axis_group_interface::skyline_spacing (Grob *me, vector<Grob *> elements)
           ++i;
         }
 
-      add_grobs_of_one_priority (&skylines, current_elts, x_common, y_common);
+      add_grobs_of_one_priority (me,
+                                 &all_v_skylines,
+                                 &all_paddings,
+                                 &all_horizon_paddings,
+                                 current_elts,
+                                 x_common,
+                                 y_common,
+                                 riders);
     }
+
+  // Now everything in all_v_skylines has been shifted appropriately; merge
+  // them all into skylines to get the complete outline.
+  Skyline_pair other_skylines (all_v_skylines[UP]);
+  other_skylines.merge (Skyline_pair (all_v_skylines[DOWN]));
+  skylines.merge (other_skylines);
+
+  // We began by shifting my skyline to be relative to the common refpoint; now
+  // shift it back.
   skylines.shift (-me->relative_coordinate (x_common, X_AXIS));
+
   return skylines;
 }
 
@@ -845,6 +1046,7 @@ ADD_INTERFACE (Axis_group_interface,
                "nonstaff-nonstaff-spacing "
                "nonstaff-relatedstaff-spacing "
                "nonstaff-unrelatedstaff-spacing "
+               "outside-staff-placement-directive "
                "pure-relevant-grobs "
                "pure-relevant-items "
                "pure-relevant-spanners "
@@ -853,7 +1055,7 @@ ADD_INTERFACE (Axis_group_interface,
                "staff-grouper "
                "staff-staff-spacing "
                "system-Y-offset "
-               "vertical-skylines "
+               "vertical-skyline-elements "
                "X-common "
                "Y-common "
               );
index c2abb8cd85b05a7df84a85ad66bb1f595303a992..cf217be3b08efbb2baa9e5b949d361f9c38f00a6 100644 (file)
@@ -33,7 +33,6 @@ class Bar_engraver : public Engraver
 {
 public:
   TRANSLATOR_DECLARATIONS (Bar_engraver);
-  void request_bar (string type_string);
 
 protected:
   void stop_translation_timestep ();
index b700dc733d39c1ac25d8905186eb8194582139bb..9771799c18338a60d7fc4be6c39edaf698ea8020 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -34,6 +34,7 @@ protected:
   DECLARE_ACKNOWLEDGER (stem);
   DECLARE_ACKNOWLEDGER (accidental);
   DECLARE_ACKNOWLEDGER (clef);
+  DECLARE_ACKNOWLEDGER (clef_modifier);
   DECLARE_ACKNOWLEDGER (key_signature);
   DECLARE_ACKNOWLEDGER (time_signature);
   DECLARE_ACKNOWLEDGER (beam);
@@ -165,6 +166,12 @@ Beam_collision_engraver::acknowledge_key_signature (Grob_info i)
   covered_grobs_.push_back (i);
 }
 
+void
+Beam_collision_engraver::acknowledge_clef_modifier (Grob_info i)
+{
+  covered_grobs_.push_back (i);
+}
+
 void
 Beam_collision_engraver::acknowledge_time_signature (Grob_info i)
 {
@@ -192,6 +199,7 @@ ADD_ACKNOWLEDGER (Beam_collision_engraver, accidental);
 ADD_ACKNOWLEDGER (Beam_collision_engraver, clef);
 ADD_ACKNOWLEDGER (Beam_collision_engraver, key_signature);
 ADD_ACKNOWLEDGER (Beam_collision_engraver, time_signature);
+ADD_ACKNOWLEDGER (Beam_collision_engraver, clef_modifier);
 ADD_ACKNOWLEDGER (Beam_collision_engraver, flag);
 ADD_ACKNOWLEDGER (Beam_collision_engraver, beam);
 
index a89435de6871a6ff391ac34075cea7e3c3f44527..846e4a245c6d772cb7ec5097fbfe80a626bf33a0 100644 (file)
@@ -30,6 +30,7 @@
 #include "spanner.hh"
 #include "stream-event.hh"
 #include "stem.hh"
+#include "unpure-pure-container.hh"
 #include "warn.hh"
 
 #include "translator.icc"
@@ -176,14 +177,18 @@ Beam_engraver::typeset_beam ()
 {
   if (finished_beam_)
     {
-      if (!finished_beam_->get_bound (RIGHT))
-        finished_beam_->set_bound (RIGHT, finished_beam_->get_bound (LEFT));
-      if (forced_direction_)
+      Grob *stem = finished_beam_->get_bound (RIGHT);
+      if (!stem)
         {
-          Grob *stem = finished_beam_->get_bound (RIGHT);
-          set_grob_direction (stem, forced_direction_);
-          forced_direction_ = CENTER;
+          stem = finished_beam_->get_bound (LEFT);
+          if (stem)
+            finished_beam_->set_bound (RIGHT, stem);
         }
+
+      if (stem && forced_direction_)
+        set_grob_direction (stem, forced_direction_);
+
+      forced_direction_ = CENTER;
       finished_beam_info_->beamify (finished_beaming_options_);
 
       Beam::set_beaming (finished_beam_, finished_beam_info_);
@@ -243,7 +248,10 @@ Beam_engraver::acknowledge_rest (Grob_info info)
   if (beam_
       && !scm_is_number (info.grob ()->get_property_data ("staff-position")))
     chain_offset_callback (info.grob (),
-                           Beam::rest_collision_callback_proc, Y_AXIS);
+                           ly_make_unpure_pure_container
+                             (Beam::rest_collision_callback_proc,
+                              Beam::pure_rest_collision_callback_proc),
+                           Y_AXIS);
 }
 
 void
@@ -256,6 +264,14 @@ Beam_engraver::acknowledge_stem (Grob_info info)
   if (!valid_start_point ())
     return;
 
+  // It's suboptimal that we don't support callbacks returning ##f,
+  // but this makes beams have no effect on "stems" reliably in
+  // TabStaff when \tabFullNotation is switched off: the real stencil
+  // callback for beams is called quite late in the process, and we
+  // don't want to trigger it early.
+  if (scm_is_false (beam_->get_property_data ("stencil")))
+    return;
+
   Item *stem = dynamic_cast<Item *> (info.grob ());
   if (Stem::get_beam (stem))
     return;
index ac845103ea8f56c75d608da171224756b557314e..c590802675f8ac188a0c8e6e0df03f5e09a0aed4 100644 (file)
@@ -651,7 +651,7 @@ Beam_scoring_problem::calc_concaveness ()
   if (scm_is_number (conc))
     return scm_to_double (conc);
 
-  if (is_knee_)
+  if (is_knee_ || is_xstaff_)
     return 0.0;
 
   Direction beam_dir = CENTER;
index d73169a917181d046e8dfc50f9bd9cbc40b9d112..fbd158aeca8a33a442f2ece1f15f3990764bd7e2 100644 (file)
@@ -197,6 +197,18 @@ Beam::calc_direction (SCM smob)
             dir = to_dir (stem->get_property_data ("direction"));
           else
             dir = to_dir (stem->get_property ("default-direction"));
+
+          extract_grob_set (stem, "note-heads", heads);
+          /* default position of Kievan heads with beams is down
+             placing this here avoids warnings downstream */
+          if (heads.size())
+            {
+               if (heads[0]->get_property ("style") == ly_symbol2scm ("kievan"))
+                 {
+                    if (dir == CENTER)
+                      dir = DOWN;
+                 }
+            }
         }
     }
 
@@ -541,16 +553,14 @@ Beam::calc_beam_segments (SCM smob)
     }
 
   SCM segments_scm = SCM_EOL;
-  SCM *tail = &segments_scm;
 
-  for (vsize i = 0; i < segments.size (); i++)
+  for (vsize i = segments.size (); i--;)
     {
-      *tail = scm_cons (scm_list_2 (scm_cons (ly_symbol2scm ("vertical-count"),
-                                              scm_from_int (segments[i].vertical_count_)),
-                                    scm_cons (ly_symbol2scm ("horizontal"),
-                                              ly_interval2scm (segments[i].horizontal_))),
-                        SCM_EOL);
-      tail = SCM_CDRLOC (*tail);
+      segments_scm = scm_cons (scm_list_2 (scm_cons (ly_symbol2scm ("vertical-count"),
+                                                    scm_from_int (segments[i].vertical_count_)),
+                                          scm_cons (ly_symbol2scm ("horizontal"),
+                                                    ly_interval2scm (segments[i].horizontal_))),
+                              segments_scm);
     }
 
   return segments_scm;
@@ -646,9 +656,9 @@ Beam::print (SCM grob)
   Interval placements = robust_scm2interval (me->get_property ("normalized-endpoints"), Interval (0.0, 0.0));
 
   Stencil the_beam;
-  int extreme = (segments[0].vertical_count_ == 0
-                 ? segments[0].vertical_count_
-                 : segments.back ().vertical_count_);
+  vsize extreme = (segments[0].vertical_count_ == 0
+                   ? segments[0].vertical_count_
+                   : segments.back ().vertical_count_);
 
   for (vsize i = 0; i < segments.size (); i++)
     {
@@ -848,9 +858,7 @@ Beam::consider_auto_knees (Grob *me)
   if (!scm_is_number (scm))
     return;
 
-  Interval_set gaps;
-
-  gaps.set_full ();
+  vector<Interval> forbidden_intervals;
 
   extract_grob_set (me, "normal-stems", stems);
 
@@ -884,15 +892,17 @@ Beam::consider_auto_knees (Grob *me)
         }
       head_extents_array.push_back (head_extents);
 
-      gaps.remove_interval (head_extents);
+      forbidden_intervals.push_back (head_extents);
     }
 
   Interval max_gap;
   Real max_gap_len = 0.0;
 
-  for (vsize i = gaps.allowed_regions_.size () - 1; i != VPOS; i--)
+  vector<Interval> allowed_regions
+    = Interval_set::interval_union (forbidden_intervals).complement ().intervals ();
+  for (vsize i = allowed_regions.size () - 1; i != VPOS; i--)
     {
-      Interval gap = gaps.allowed_regions_[i];
+      Interval gap = allowed_regions[i];
 
       /*
         the outer gaps are not knees.
@@ -1361,6 +1371,12 @@ Beam::pure_rest_collision_callback (SCM smob,
                     rest_max_pos[UP]
                    ) * ss / 2.0
                - previous;
+
+  // So that ceil below kicks in for rests that would otherwise brush
+  // up against a beam quanted to a ledger line, add a bit of space
+  // between the beam and the rest.
+  shift += (0.01 * beamdir);
+
   /* Always move by a whole number of staff spaces */
   shift = ceil (fabs (shift / ss)) * ss * sign (shift);
 
index 411b5fbedb8422aeba060159a9dfd7901f6dd3e3..088cdc1a65663ccdf907cb18afe26aa48c46c1a4 100644 (file)
@@ -208,7 +208,7 @@ find_location (SCM grouping, Moment base_moment, Moment start_moment,
 
   while (*next_group_pos < *next_beat_pos)
     {
-      int group_count = 1;  //default -- 1 base moments in a beam
+      I64 group_count = 1;  //default -- 1 base moments in a beam
       if (scm_is_pair (grouping))
         {
           group_count = scm_to_int (scm_car (grouping));
@@ -217,17 +217,17 @@ find_location (SCM grouping, Moment base_moment, Moment start_moment,
 
       // If we have a tuplet, the count should be determined from
       // the maximum tuplet size for beamed tuplets.
-      int tuplet_number = factor.den ();
-      if (tuplet_number > 1)
+      U64 tuplet_number = factor.den ();
+      if (tuplet_number > 1U)
         {
           // We use 1/8 as the base moment for the tuplet because it's
           // the largest beamed value.  If the tuplet is shorter, it's
           // OK, the code still works
-          int test_count = ( Moment (Rational (1, 8) / factor) / base_moment).num ();
+          I64 test_count = ( Moment (Rational (1, 8) / factor) / base_moment).num ();
           if (test_count > group_count) group_count = test_count;
         }
       *group_pos = *next_group_pos;
-      *next_group_pos = *group_pos + group_count * base_moment;
+      *next_group_pos = *group_pos + Rational(group_count) * base_moment;
     }
 }
 
@@ -238,7 +238,7 @@ Beaming_pattern::find_rhythmic_importance (Beaming_options const &options)
   Moment next_group_pos (0);
   Moment next_beat_pos (options.base_moment_);
   Moment tuplet_start_moment (-1, 1);
-  int tuplet_number = 1;
+  I64 tuplet_number = 1;
 
   SCM grouping = options.grouping_;
   vsize i = 0;
index c4cdbb1c7b6c07d41bb338767994eef1bccc2ae4..d9267124037f329b37c6a9d2c7a5e68ad521fcfe 100644 (file)
@@ -140,6 +140,24 @@ Bezier::curve_point (Real t) const
   return o;
 }
 
+Real
+Bezier::slope_at_point (Real t) const
+{
+  Offset second_order[3];
+  Offset third_order[2];
+
+  for (vsize i = 0; i < 3; i++)
+    second_order[i] = ((control_[i + 1] - control_[i]) * t) + control_[i];
+
+  for (vsize i = 0; i < 2; i++)
+    third_order[i] = ((second_order[i + 1] - second_order[i]) * t) + second_order[i];
+
+  if (third_order[1][X_AXIS] - third_order[0][X_AXIS] == 0)
+    return infinity_f;
+
+  return (third_order[1][Y_AXIS] - third_order[0][Y_AXIS]) / (third_order[1][X_AXIS] - third_order[0][X_AXIS]);
+}
+
 /*
   Cache binom (3, j) t^j (1-t)^{3-j}
 */
index df4770ff7861eada58715e88cea9be1c74ae92da..df5ccb75b2649c2e547b976b129ba78cbc5aee0a 100644 (file)
@@ -23,7 +23,8 @@ void
 Box::translate (Offset o)
 {
   for (Axis i = X_AXIS; i < NO_AXES; incr (i))
-    interval_a_[i] += o[i];
+    if (!is_empty (i))
+      interval_a_[i] += o[i];
 }
 
 void
@@ -33,6 +34,13 @@ Box::unite (Box b)
     interval_a_[i].unite (b[i]);
 }
 
+Real
+Box::area () const
+{
+  return interval_a_[X_AXIS].length ()
+         * interval_a_[Y_AXIS].length ();
+}
+
 Box::Box ()
 {
 }
@@ -44,6 +52,21 @@ Box::set_empty ()
   interval_a_[Y_AXIS].set_empty ();
 }
 
+bool
+Box::is_empty () const
+{
+  return is_empty (X_AXIS) && is_empty (Y_AXIS);
+}
+
+bool
+Box::is_empty (Axis a) const
+{
+  Interval empty;
+  empty.set_empty ();
+  return interval_a_[a][LEFT] == empty[LEFT]
+    && interval_a_[a][RIGHT] == empty[RIGHT];
+}
+
 Box::Box (Interval ix, Interval iy)
 {
   x () = ix;
@@ -90,6 +113,13 @@ Box::widen (Real x, Real y)
   interval_a_[Y_AXIS].widen (y);
 }
 
+void
+Box::intersect (Box b)
+{
+  interval_a_[X_AXIS].intersect (b[X_AXIS]);
+  interval_a_[Y_AXIS].intersect (b[Y_AXIS]);
+}
+
 // for debugging
 
 void
index 242e39eacc7c35692d113ef7ea97d946f0a8da97..8e231cf27179fd9511940c02851f9c8134c1f8fc 100644 (file)
@@ -26,7 +26,6 @@
 #include "output-def.hh"
 #include "paper-column.hh"
 #include "pointer-group-interface.hh"
-#include "self-alignment-interface.hh"
 #include "side-position-interface.hh"
 #include "warn.hh"
 
index 02b29858af1465d042c0c16d6f57c967e82f0f27..e568e358e9ce14071e3970f56e64f188e0f6a3b8 100644 (file)
@@ -76,22 +76,65 @@ Breathing_sign::divisio_maior (SCM smob)
   Real blotdiameter = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
 
   /*
-   * Draw a vertical line that is vertically centered in the staff
-   * (just like a bar).  The height of this line should be a little
-   * more than half the size of the staff, such that the endings of
-   * the line are in the middle of a staff space.
-   */
-  Interval ydim = Staff_symbol_referencer::staff_span (me);
-  ydim.widen (-0.25 * ydim.delta ());
-  for (UP_and_DOWN (i))
+    Draw a vertical line that is roughly centered vertically in
+    the staff (just like a bar) with the following requirements:
+    1. length should be at least half the size of the staff
+    2. both ends should be in the middle of a staff space.
+
+    These two requirements contradict if the first or last space is
+    larger than half of the whole staff (e.g. the staff consists of
+    two lines only); in such cases the first prescription wins.
+  */
+  Interval ydim (0.0, 0.0);
+  if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me))
     {
-      int const int_dim = (int) ydim[i];
-      if (int_dim == ydim[i]
-          && Staff_symbol_referencer::on_staff_line (me, int_dim))
-        ydim[i] += i;
+      std::vector<Real> line_pos = Staff_symbol::line_positions (staff);
+      if (!line_pos.empty ())
+        {
+          std::sort (line_pos.begin (), line_pos.end ());
+          ydim[DOWN] = line_pos.front ();
+          ydim[UP] = line_pos.back ();
+          if (Real const height = ydim.length ())
+            {
+              ydim.widen (-0.25 * height);
+
+              /*
+                ydim has now the required height; to satisfy req. 2
+                find the staff spaces containing current endpoints.
+
+                standard algorithms are suitable to find the upper
+                line of these spaces; we must choose between
+                upper_bound and lower_bound considering that if
+                there's a line exactly at quarter of the staff (the
+                lower end) then we need the space below it, while if
+                there's a line exactly at three quarters of the staff
+                (upper end) then we need the space above it.
+
+                if the middle of the space found is not low/high
+                enough, take the next space (if there are no more
+                spaces, ydim won't be enlarged further).
+              */
+              std::vector<Real>::const_iterator it
+                = std::lower_bound (line_pos.begin (), line_pos.end (),
+                                    ydim[DOWN]);
+              assert (line_pos.begin () < it);
+              double val = (it[-1] + it[0]) / 2;
+              if (ydim[DOWN] < val && line_pos.begin () < it + 1)
+                val = (it[-2] + it[-1]) / 2;
+              ydim.add_point (val);
+
+              it = std::upper_bound (line_pos.begin (), line_pos.end (),
+                                     ydim[UP]);
+              assert (it < line_pos.end ());
+              val = (it[-1] + it[0]) / 2;
+              if (val < ydim[UP] && it + 1 < line_pos.end ())
+                val = (it[0] + it[1]) / 2;
+              ydim.add_point (val);
+            }
+        }
     }
 
-  ydim *= 1.0 / Staff_symbol_referencer::staff_space (me);
+  ydim *= Staff_symbol_referencer::staff_space (me) / 2;
 
   Interval xdim (0, thickness);
   Box b (xdim, ydim);
index 0adac3b8b3808d424847b345cba9a706a1174ca1..aa505f9fe104f83eee797770447e15fa10fc08c9 100644 (file)
@@ -26,7 +26,7 @@
 #include "warn.hh"
 
 void
-Change_iterator::error (string reason)
+Change_iterator::error (const string &reason)
 {
   string to_type = ly_symbol2string (get_music ()->get_property ("change-to-type"));
   string to_id = ly_scm2string (get_music ()->get_property ("change-to-id"));
index eab4d94d075c52ef95f0ae09449d6d9d184585c5..26b4a607bb13bb39fbcd6954da896ab293161625 100644 (file)
@@ -71,12 +71,21 @@ Chord_name_engraver::Chord_name_engraver ()
 void
 Chord_name_engraver::process_music ()
 {
+  if (!rest_event_ && !notes_.size ())
+   return;
+
+  chord_name_ = make_item ("ChordName",
+                           rest_event_ ? rest_event_->self_scm () : notes_[0]->self_scm ());
+
+  SCM maybe_markup = chord_name_->get_property_data ("text");
+
+  bool make_markup = !(Text_interface::is_markup (maybe_markup)
+                       || ly_is_procedure (maybe_markup));
+
   SCM markup;
-  SCM bass = SCM_EOL;
-  SCM inversion = SCM_EOL;
-  SCM pitches = SCM_EOL;
 
-  if (rest_event_)
+  if (rest_event_ && !make_markup) { }
+  else if (rest_event_)
     {
       SCM no_chord_markup = get_property ("noChordSymbol");
       if (!Text_interface::is_markup (no_chord_markup))
@@ -85,8 +94,9 @@ Chord_name_engraver::process_music ()
     }
   else
     {
-      if (!notes_.size ())
-        return;
+      SCM bass = SCM_EOL;
+      SCM inversion = SCM_EOL;
+      SCM pitches = SCM_EOL;
 
       Stream_event *inversion_event = 0;
       for (vsize i = 0; i < notes_.size (); i++)
@@ -125,24 +135,24 @@ Chord_name_engraver::process_music ()
       pitches = scm_sort_list (pitches, Pitch::less_p_proc);
 
       SCM name_proc = get_property ("chordNameFunction");
-      markup = scm_call_4 (name_proc, pitches, bass, inversion,
-                           context ()->self_scm ());
+      if (make_markup)
+        markup = scm_call_4 (name_proc, pitches, bass, inversion,
+                             context ()->self_scm ());
     }
   /*
     Ugh.
   */
-  SCM chord_as_scm = scm_cons (pitches, scm_cons (bass, inversion));
-
-  chord_name_ = make_item ("ChordName",
-                           rest_event_ ? rest_event_->self_scm () : notes_[0]->self_scm ());
-  chord_name_->set_property ("text", markup);
+  if (make_markup)
+    chord_name_->set_property ("text", markup);
+  else if (Text_interface::is_markup (maybe_markup))
+    markup = maybe_markup;
 
   SCM chord_changes = get_property ("chordChanges");
   if (to_boolean (chord_changes) && scm_is_pair (last_chord_)
-      && ly_is_equal (chord_as_scm, last_chord_))
+      && ly_is_equal (markup, last_chord_))
     chord_name_->set_property ("begin-of-line-visible", SCM_BOOL_T);
 
-  last_chord_ = chord_as_scm;
+  last_chord_ = markup;
 }
 
 IMPLEMENT_TRANSLATOR_LISTENER (Chord_name_engraver, note);
index 00c345771728f4e46a06ed75ce08c023b0740f1c..9e2a3eaa7f82c9255f4fd3105240dbf4bbf89cc3 100644 (file)
@@ -43,11 +43,11 @@ protected:
   virtual void derived_mark () const;
 private:
   Item *clef_;
-  Item *octavate_;
+  Item *modifier_;
 
   SCM prev_glyph_;
   SCM prev_cpos_;
-  SCM prev_octavation_;
+  SCM prev_transposition_;
   void create_clef ();
   void set_glyph ();
   void inspect_clef_properties ();
@@ -56,7 +56,7 @@ private:
 void
 Clef_engraver::derived_mark () const
 {
-  scm_gc_mark (prev_octavation_);
+  scm_gc_mark (prev_transposition_);
   scm_gc_mark (prev_cpos_);
   scm_gc_mark (prev_glyph_);
 }
@@ -64,12 +64,12 @@ Clef_engraver::derived_mark () const
 Clef_engraver::Clef_engraver ()
 {
   clef_ = 0;
-  octavate_ = 0;
+  modifier_ = 0;
 
   /*
     will trigger a clef at the start since #f != ' ()
   */
-  prev_octavation_ = prev_cpos_ = prev_glyph_ = SCM_BOOL_F;
+  prev_transposition_ = prev_cpos_ = prev_glyph_ = SCM_BOOL_F;
 }
 
 void
@@ -107,27 +107,30 @@ Clef_engraver::create_clef ()
       if (scm_is_number (cpos))
         clef_->set_property ("staff-position", cpos);
 
-      SCM oct = get_property ("clefOctavation");
-      if (scm_is_number (oct) && scm_to_int (oct))
+      SCM transp = get_property ("clefTransposition");
+      if (scm_is_number (transp) && scm_to_int (transp))
         {
-          Item *g = make_item ("OctavateEight", SCM_EOL);
+          Item *g = make_item ("ClefModifier", SCM_EOL);
 
-          int abs_oct = scm_to_int (oct);
-          int dir = sign (abs_oct);
-          abs_oct = abs (abs_oct) + 1;
+          int abs_transp = scm_to_int (transp);
+          int dir = sign (abs_transp);
+          abs_transp = abs (abs_transp) + 1;
 
-          SCM txt = scm_number_to_string (scm_from_int (abs_oct),
+          SCM txt = scm_number_to_string (scm_from_int (abs_transp),
                                           scm_from_int (10));
 
-          g->set_property ("text",
-                           scm_list_n (ly_lily_module_constant ("vcenter-markup"),
-                                       txt, SCM_UNDEFINED));
+          SCM style = get_property ("clefTranspositionStyle");
+
+          SCM formatter = get_property ("clefTranspositionFormatter");
+          if (ly_is_procedure (formatter))
+            g->set_property ("text", scm_call_2 (formatter, txt, style));
+
           Side_position_interface::add_support (g, clef_);
 
           g->set_parent (clef_, Y_AXIS);
           g->set_parent (clef_, X_AXIS);
           g->set_property ("direction", scm_from_int (dir));
-          octavate_ = g;
+          modifier_ = g;
         }
     }
 }
@@ -150,13 +153,13 @@ Clef_engraver::inspect_clef_properties ()
 {
   SCM glyph = get_property ("clefGlyph");
   SCM clefpos = get_property ("clefPosition");
-  SCM octavation = get_property ("clefOctavation");
+  SCM transposition = get_property ("clefTransposition");
   SCM force_clef = get_property ("forceClef");
 
   if (clefpos == SCM_EOL
       || scm_equal_p (glyph, prev_glyph_) == SCM_BOOL_F
       || scm_equal_p (clefpos, prev_cpos_) == SCM_BOOL_F
-      || scm_equal_p (octavation, prev_octavation_) == SCM_BOOL_F
+      || scm_equal_p (transposition, prev_transposition_) == SCM_BOOL_F
       || to_boolean (force_clef))
     {
       apply_on_children (context (),
@@ -171,7 +174,7 @@ Clef_engraver::inspect_clef_properties ()
 
       prev_cpos_ = clefpos;
       prev_glyph_ = glyph;
-      prev_octavation_ = octavation;
+      prev_transposition_ = transposition;
     }
 
   if (to_boolean (force_clef))
@@ -196,7 +199,7 @@ Clef_engraver::stop_translation_timestep ()
 
       clef_ = 0;
 
-      octavate_ = 0;
+      modifier_ = 0;
     }
 }
 
@@ -207,11 +210,12 @@ ADD_TRANSLATOR (Clef_engraver,
 
                 /* create */
                 "Clef "
-                "OctavateEight ",
+                "ClefModifier ",
 
                 /* read */
                 "clefGlyph "
-                "clefOctavation "
+                "clefTransposition "
+                "clefTranspositionStyle "
                 "clefPosition "
                 "explicitClefVisibility "
                 "forceClef ",
index 3c1ca3752537c9fe61ee4501dd333988c160d6db..b58bef99871b15efeccf97dffba8095aa203fc3f 100644 (file)
@@ -63,6 +63,7 @@ Clef::print (SCM smob)
   Stencil out = fm->find_by_name (glyph);
   if (out.is_empty ())
     me->warning (_f ("clef `%s' not found", glyph.c_str ()));
+
   return out.smobbed_copy ();
 }
 
index d0451afa92c51e26cb4e5719844141269fcde551..3e2915e719674c28021273dad98233b09363c9b2 100644 (file)
@@ -40,9 +40,9 @@
  *
  * - delegate actual creation of ligature to concrete subclass,
  *
- * - collect all accidentals that occur within the ligature and put
- * them at the left side of the ligature (TODO; see function
- * collect_accidentals ()),
+ * - except in Kievan notation, collect all accidentals that occur
+ * within the ligature and put them at the left side of the ligature
+ * (TODO; see function collect_accidentals ()),
  *
  * - collapse superflous space after each ligature (TODO).
  *
@@ -131,13 +131,17 @@ Coherent_ligature_engraver::move_related_items_to_column
  * occurs within the broken ligatures any more.
  */
 void
-Coherent_ligature_engraver::collect_accidentals (Spanner *, vector<Grob_info>)
+Coherent_ligature_engraver::collect_accidentals (Spanner *,
+                                                 vector<Grob_info> const &)
 {
   /* TODO */
+  /* NOTE: if implementing such a function, note that in Kievan notation,
+   * the B-flat accidental should not be "collected", but rather prints
+   * immediately before the note head as usual. */
 }
 
 void
-compute_delta_pitches (vector<Grob_info> primitives)
+compute_delta_pitches (vector<Grob_info> const &primitives)
 {
   int prev_pitch = 0;
   int delta_pitch = 0;
@@ -162,7 +166,7 @@ compute_delta_pitches (vector<Grob_info> primitives)
 
 void
 Coherent_ligature_engraver::typeset_ligature (Spanner *ligature,
-                                              vector<Grob_info> primitives)
+                                              vector<Grob_info> const &primitives)
 {
   // compute some commonly needed context info stored as grob
   // properties
index e0b57b8248395b8e755f3357a95f63d8f0896d92..52a7d6c0bd4d0a64db0fb6610a889c313f9c0781 100644 (file)
@@ -59,8 +59,6 @@ class Completion_heads_engraver : public Engraver
   vector<Item *> notes_;
   vector<Item *> prev_notes_;
   // Must remember notes for explicit ties.
-  vector<Item *> tie_note_candidates_;
-  vector<Stream_event *> tie_note_candidate_events_;
   vector<Grob *> ties_;
   vector<Stream_event *> note_events_;
   Spanner *tie_column_;
@@ -271,6 +269,7 @@ Completion_heads_engraver::make_tie (Grob *left, Grob *right)
   Grob *p = make_spanner ("Tie", SCM_EOL);
   Tie::set_head (p, LEFT, left);
   Tie::set_head (p, RIGHT, right);
+  announce_end_grob (p, SCM_EOL);
   ties_.push_back (p);
 }
 
@@ -291,9 +290,6 @@ Completion_heads_engraver::start_translation_timestep ()
   Moment now = now_mom ();
   if (note_end_mom_.main_part_ <= now.main_part_)
     {
-      tie_note_candidate_events_ = note_events_;
-      tie_note_candidates_ = prev_notes_;
-
       note_events_.clear ();
       prev_notes_.clear ();
     }
@@ -318,6 +314,7 @@ ADD_TRANSLATOR (Completion_heads_engraver,
                 "TieColumn ",
 
                 /* read */
+                "completionUnit "
                 "measureLength "
                 "measurePosition "
                 "middleCPosition "
index 3f918e2d0e76e0c83a9924e1466705708d9a81a7..61255226eac4eb53b385f1eadbde873507199bdd 100644 (file)
@@ -36,6 +36,7 @@ using namespace std;
 #include "stream-event.hh"
 #include "tie.hh"
 #include "warn.hh"
+#include "misc.hh"
 
 #include "translator.icc"
 
@@ -48,7 +49,7 @@ using namespace std;
   Every time process_music () is called and there are rest events, we
   figure out how long the rest to typeset should be. It should be no
   longer than what's specified, than what is left to do and it should
-  not cross barlines.
+  not cross barlines or sub-bar units.
 
   We copy the events into scratch rest events, to make sure that we get
   all durations exactly right.
@@ -57,7 +58,6 @@ using namespace std;
 class Completion_rest_engraver : public Engraver
 {
   vector<Item *> rests_;
-  vector<Item *> prev_rests_;
   vector<Stream_event *> rest_events_;
   Moment rest_end_mom_;
   bool is_first_;
@@ -65,7 +65,7 @@ class Completion_rest_engraver : public Engraver
   Rational do_nothing_until_;
   Rational factor_;
 
-  Moment next_barline_moment ();
+  Moment next_moment (Rational const &);
   Item *make_rest (Stream_event *);
 
 public:
@@ -100,10 +100,10 @@ Completion_rest_engraver::listen_rest (Stream_event *ev)
 }
 
 /*
-  The duration _until_ the next barline.
+  The duration _until_ the next barline or completion unit
 */
 Moment
-Completion_rest_engraver::next_barline_moment ()
+Completion_rest_engraver::next_moment (Rational const &note_len)
 {
   Moment *e = unsmob_moment (get_property ("measurePosition"));
   Moment *l = unsmob_moment (get_property ("measureLength"));
@@ -112,7 +112,40 @@ Completion_rest_engraver::next_barline_moment ()
       return Moment (0, 0);
     }
 
-  return (*l - *e);
+  Moment result = *l - *e;
+  Moment const *unit = unsmob_moment (get_property ("completionUnit"));
+
+  if (unit)
+    {
+      Rational const now_unit = e->main_part_ / unit->main_part_;
+      if (now_unit.den () > 1)
+        {
+          /*
+            within a unit - go to the end of that
+          */
+          result = unit->main_part_
+            * (Rational (1) - (now_unit - now_unit.trunc_rat ()));
+        }
+      else
+        {
+          /*
+            at the beginning of a unit:
+            take a power-of-two number of units, but not more than required,
+            since then the Duration constructor destroys the unit structure
+          */
+          if (note_len < result.main_part_)
+            result.main_part_ = note_len;
+          Rational const step_unit = result.main_part_ / unit->main_part_;
+          if (step_unit.den () < step_unit.num ())
+            {
+              int const log2
+                = intlog2 (int (step_unit.num () / step_unit.den ()));
+              result.main_part_ = unit->main_part_ * Rational (1 << log2);
+            }
+        }
+    }
+
+  return result;
 }
 
 Item *
@@ -144,19 +177,17 @@ Completion_rest_engraver::process_music ()
     return;
 
   Duration rest_dur;
-  Duration appearance;
   Duration *orig = 0;
   if (left_to_do_)
     {
       /*
-        rest that rest_dur may be strictly less than left_to_do_
+        note that rest_dur may be strictly less than left_to_do_
         (say, if left_to_do_ == 5/8)
       */
       if (factor_.denominator () == 1 && factor_ > Rational (1, 1))
         rest_dur = Duration (left_to_do_, false);
       else
         rest_dur = Duration (left_to_do_ / factor_, false).compressed (factor_);
-      appearance = Duration (left_to_do_, false);
     }
   else
     {
@@ -165,10 +196,10 @@ Completion_rest_engraver::process_music ()
       factor_ = rest_dur.factor ();
       left_to_do_ = orig->get_length ();
     }
-  Moment nb = next_barline_moment ();
+  Moment nb = next_moment (rest_dur.get_length ());
   if (nb.main_part_ && nb < rest_dur.get_length ())
     {
-      if (factor_.denominator () == 1 && factor_ > Rational (1, 1))
+      if (factor_.denominator () == 1 && factor_.numerator () > 1)
         rest_dur = Duration (nb.main_part_, false);
       else
         rest_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_);
@@ -209,8 +240,6 @@ Completion_rest_engraver::process_music ()
 void
 Completion_rest_engraver::stop_translation_timestep ()
 {
-  if (rests_.size ())
-    prev_rests_ = rests_;
   rests_.clear ();
 }
 
@@ -221,7 +250,6 @@ Completion_rest_engraver::start_translation_timestep ()
   if (rest_end_mom_.main_part_ <= now.main_part_)
     {
       rest_events_.clear ();
-      prev_rests_.clear ();
     }
   context ()->set_property ("restCompletionBusy",
                             ly_bool2scm (rest_events_.size ()));
@@ -240,6 +268,7 @@ ADD_TRANSLATOR (Completion_rest_engraver,
                 "Rest ",
 
                 /* read */
+                "completionUnit "
                 "middleCPosition "
                 "measurePosition "
                 "measureLength ",
index 5d04d258fe8fab77519367679f0544edd0561b38..ec677ec68ca2128c5a346a2f2b485a3fb329a9b6 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
index c8b7fc1d748bc06ae2074d33d436d77ab1bdd2e5..f8d4b0f5b2280d10ca669a1cb1678b3bdd5dc7ab 100644 (file)
@@ -202,8 +202,10 @@ Constrained_breaking::solve (vsize start, vsize end, vsize sys_count)
         }
     }
   /* if we get to here, just put everything on one line */
-  warning (_ ("cannot find line breaking that satisfies constraints"));
-  ret.push_back (space_line (0, end_brk));
+  if (sys_count > 0) {
+    warning (_ ("cannot find line breaking that satisfies constraints"));
+    ret.push_back (space_line (0, end_brk));
+  }
   return ret;
 }
 
@@ -291,9 +293,11 @@ Constrained_breaking::line_details (vsize start, vsize end, vsize sys_count)
     }
 
   /* if we get to here, just put everything on one line */
-  Line_details details;
-  fill_line_details (&details, 0, end_brk);
-  ret.push_back (details);
+  if (sys_count > 0) {
+    Line_details details;
+    fill_line_details (&details, 0, end_brk);
+    ret.push_back (details);
+  }
   return ret;
 }
 
@@ -567,7 +571,9 @@ Line_details::Line_details (Prob *pb, Output_def *paper)
 
   last_column_ = 0;
   force_ = 0;
-  Interval stencil_extent = unsmob_stencil (pb->get_property ("stencil"))->extent (Y_AXIS);
+  Stencil *st = unsmob_stencil (pb->get_property ("stencil"));
+  Interval stencil_extent = st->is_empty (Y_AXIS) ? Interval (0, 0)
+    : st->extent (Y_AXIS);
   shape_ = Line_shape (stencil_extent, stencil_extent); // pretend it goes all the way across
   tallness_ = 0;
   bottom_padding_ = 0;
index b4e1e2567cc19397940b58e41a4852a1b9bb9ca2..9ef10bea966a6f631b2338138cfc46836342dfd1 100644 (file)
@@ -93,6 +93,9 @@ Context_def::print_smob (SCM smob, SCM port, scm_print_state *)
 
   scm_puts ("#<Context_def ", port);
   scm_display (me->context_name_, port);
+  scm_puts (" ", port);
+  string loc = me->origin ()->location_string ();
+  scm_puts (loc.c_str (), port);
   scm_puts (">", port);
   return 1;
 }
@@ -313,6 +316,7 @@ Context_def::instantiate (SCM ops)
   context->definition_mods_ = ops;
   context->aliases_ = context_aliases_;
   context->accepts_list_ = get_accepted (ops);
+  context->default_child_ = get_default_child (ops);
 
   return context;
 }
@@ -339,6 +343,10 @@ Context_def::to_alist () const
                             get_translator_names (SCM_EOL)), ell);
   ell = scm_cons (scm_cons (ly_symbol2scm ("description"), description_), ell);
   ell = scm_cons (scm_cons (ly_symbol2scm ("aliases"), context_aliases_), ell);
+  ell = scm_cons (scm_cons (ly_symbol2scm ("accepts"), get_accepted (SCM_EOL)),
+                  ell);
+  if (scm_is_symbol (default_child_))
+    ell = scm_acons (ly_symbol2scm ("default-child"), default_child_, ell);
   ell = scm_cons (scm_cons (ly_symbol2scm ("accepts"), get_accepted (SCM_EOL)),
                   ell);
   ell = scm_cons (scm_cons (ly_symbol2scm ("property-ops"), property_ops_),
@@ -378,7 +386,7 @@ bool
 Context_def::is_alias (SCM sym) const
 {
   if (scm_is_eq (sym, ly_symbol2scm ("Bottom")))
-    return !scm_is_pair (get_accepted (SCM_EOL));
+    return !scm_is_symbol (get_default_child (SCM_EOL));
 
   if (scm_is_eq (sym, get_context_name ()))
     return true;
index 1ccfe5a970973e7ce3be409406985dcafd0e42f7..00108cf3149d8b3966b4c392a2dc523e143849c7 100644 (file)
@@ -91,13 +91,6 @@ execute_override_property (Context *context,
 
   SCM target_alist = scm_car (current_context_val);
 
-  /*
-    If the car is a list, the property path comes from a nested override
-    using list syntax inside a \context block
-  */
-  if (scm_is_pair (scm_car (grob_property_path)))
-    grob_property_path = scm_car (grob_property_path);
-
   SCM symbol = scm_car (grob_property_path);
   if (scm_is_pair (scm_cdr (grob_property_path)))
     {
@@ -230,33 +223,27 @@ apply_property_operations (Context *tg, SCM pre_init_ops)
       SCM entry = scm_car (s);
       SCM type = scm_car (entry);
       entry = scm_cdr (entry);
-      if (!scm_is_pair (entry))
-        continue;
-      SCM context_prop = scm_car (entry);
-      if (scm_is_pair (context_prop))
-        {
-          if (tg->is_alias (scm_car (context_prop)))
-            context_prop = scm_cdr (context_prop);
-          else
-            continue;
-        }
 
       if (type == ly_symbol2scm ("push"))
         {
+          SCM context_prop = scm_car (entry);
           SCM val = scm_cadr (entry);
           SCM grob_prop_path = scm_cddr (entry);
           sloppy_general_pushpop_property (tg, context_prop, grob_prop_path, val);
         }
       else if (type == ly_symbol2scm ("pop"))
         {
+          SCM context_prop = scm_car (entry);
           SCM val = SCM_UNDEFINED;
           SCM grob_prop_path = scm_cdr (entry);
           sloppy_general_pushpop_property (tg, context_prop, grob_prop_path, val);
         }
       else if (type == ly_symbol2scm ("assign"))
-        tg->set_property (context_prop, scm_cadr (entry));
+        tg->set_property (scm_car (entry), scm_cadr (entry));
       else if (type == ly_symbol2scm ("apply"))
-        scm_apply_1 (context_prop, tg->self_scm (), scm_cdr (entry));
+       scm_apply_1 (scm_car (entry), tg->self_scm (), scm_cdr (entry));
+      else if (type == ly_symbol2scm ("unset"))
+        tg->unset_property (scm_car (entry));
     }
 }
 
index 64f8dd8e15a0fdb3fbf9d2f8fd1821188395c231..f58a793ed4ef805fcbcf4cd47435e88de47edf82 100644 (file)
@@ -211,15 +211,3 @@ LY_DEFINE (ly_context_events_below, "ly:context-events-below",
   Context *ctx = unsmob_context (context);
   return ctx->events_below ()->self_scm ();
 }
-
-LY_DEFINE (ly_make_event_class, "ly:make-event-class",
-           2, 0, 0, (SCM context, SCM type),
-           "Make an event class (a list of types) from the given @var{type}"
-           " within the global context containing @var{context}.")
-{
-  LY_ASSERT_SMOB (Context, context, 1);
-  LY_ASSERT_TYPE (ly_is_symbol, type, 2);
-
-  Context *ctx = unsmob_context (context);
-  return ctx->make_event_class (type);
-}
index 4d949e8379c0a02f34003794b7f5e62bf3ec0b80..491ea8f0d864e4ffc0cbe729f5b0e0d4d8f25b12 100644 (file)
@@ -86,12 +86,12 @@ Context::Context ()
   implementation_ = 0;
   properties_scm_ = SCM_EOL;
   accepts_list_ = SCM_EOL;
+  default_child_ = SCM_EOL;
   context_list_ = SCM_EOL;
   definition_ = SCM_EOL;
   definition_mods_ = SCM_EOL;
   event_source_ = 0;
   events_below_ = 0;
-  ancestor_lookup_ = SCM_UNDEFINED;
 
   smobify_self ();
 
@@ -105,7 +105,7 @@ Context::Context ()
 
 /* TODO:  this shares code with find_create_context ().  */
 Context *
-Context::create_unique_context (SCM name, string id, SCM operations)
+Context::create_unique_context (SCM name, const string &id, SCM operations)
 {
   /*
     Don't create multiple score contexts.
@@ -154,14 +154,35 @@ Context::create_unique_context (SCM name, string id, SCM operations)
 }
 
 Context *
-Context::find_create_context (SCM n, string id, SCM operations)
+Context::find_create_context (SCM n, const string &id, SCM operations)
 {
   /*
     Don't create multiple score contexts.
   */
   Global_context *gthis = dynamic_cast<Global_context *> (this);
-  if (gthis && gthis->get_score_context ())
-    return gthis->get_score_context ()->find_create_context (n, id, operations);
+  if (gthis)
+    {
+      if (gthis->get_score_context ())
+        return gthis->get_score_context ()->find_create_context (n, id, operations);
+
+      // Special case: If we use \set Timing.xxx = whatever before
+      // Score is established, the alias of Score to Timing will not
+      // be taken into account.  We check for this particular case
+      // here.  Aliases apart from Score-level ones don't warrant
+      // context creation as they could create unwanted contexts, like
+      // RhythmicVoice instead of Voice.  Creating a Score context,
+      // however, can't really do anything wrong.
+
+      SCM score_name = default_child_context_name ();
+      SCM score_def = find_context_def (get_output_def (), score_name);
+
+      if (Context_def *cd = unsmob_context_def (score_def))
+        {
+          if (cd->is_alias (n))
+            return create_context (cd, id, operations);
+        }
+    }
+
 
   if (Context *existing = find_context_below (this, n, id))
     return existing;
@@ -228,9 +249,15 @@ Context::set_property_from_event (SCM sev)
   if (scm_is_symbol (sym))
     {
       SCM val = ev->get_property ("value");
+
+      if (SCM_UNBNDP (val)) {
+        unset_property (sym);
+        return;
+      }
+          
       bool ok = true;
-      if (val != SCM_EOL)
-        ok = type_check_assignment (sym, val, ly_symbol2scm ("translation-type?"));
+      ok = type_check_assignment (sym, val, ly_symbol2scm ("translation-type?"));
+
       if (ok)
         set_property (sym, val);
     }
@@ -334,7 +361,7 @@ Context::path_to_acceptable_context (SCM name) const
 
 Context *
 Context::create_context (Context_def *cdef,
-                         string id,
+                         const string &id,
                          SCM ops)
 {
   infant_event_ = 0;
@@ -374,9 +401,7 @@ Context::create_context (Context_def *cdef,
 SCM
 Context::default_child_context_name () const
 {
-  return scm_is_pair (accepts_list_)
-         ? scm_car (accepts_list_)
-         : SCM_EOL;
+  return default_child_;
 }
 
 bool
@@ -386,7 +411,7 @@ Context::is_bottom_context () const
 }
 
 Context *
-Context::get_default_interpreter (string context_id)
+Context::get_default_interpreter (const string &context_id)
 {
   if (!is_bottom_context ())
     {
@@ -400,9 +425,19 @@ Context::get_default_interpreter (string context_id)
           warning (_f ("cannot find or create: `%s'", name.c_str ()));
           t = unsmob_context_def (this->definition_);
         }
-
-      Context *tg = create_context (t, context_id, SCM_EOL);
-      return tg->get_default_interpreter (context_id);
+      if (scm_is_symbol (t->get_default_child (SCM_EOL)))
+        {
+          Context *tg = create_context (t, "\\new", SCM_EOL);
+          return tg->get_default_interpreter (context_id);
+        }
+      return create_context (t, context_id, SCM_EOL);
+    }
+  else if (!context_id.empty () && context_id != id_string ())
+    {
+      if (daddy_context_ && !dynamic_cast<Global_context *> (daddy_context_))
+        return daddy_context_->get_default_interpreter (context_id);
+      warning (_f ("cannot find or create new Bottom = \"%s\"",
+                   context_id.c_str ()));
     }
   return this;
 }
@@ -453,7 +488,9 @@ be called from any other place than the send_stream_event macro.
 void
 Context::internal_send_stream_event (SCM type, Input *origin, SCM props[])
 {
-  Stream_event *e = new Stream_event (make_event_class (type), origin);
+  Stream_event *e = new Stream_event
+    (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"), type),
+     origin);
   for (int i = 0; props[i]; i += 2)
     {
       e->set_property (props[i], props[i + 1]);
@@ -465,10 +502,9 @@ Context::internal_send_stream_event (SCM type, Input *origin, SCM props[])
 bool
 Context::is_alias (SCM sym) const
 {
-  if (sym == ly_symbol2scm ("Bottom")
-      && !scm_is_pair (accepts_list_))
-    return true;
-  if (sym == unsmob_context_def (definition_)->get_context_name ())
+  if (scm_is_eq (sym, ly_symbol2scm ("Bottom")))
+    return is_bottom_context ();
+  if (scm_is_eq (sym, context_name_symbol ()))
     return true;
 
   return scm_c_memq (sym, aliases_) != SCM_BOOL_F;
@@ -546,7 +582,7 @@ Context::disconnect_from_parent ()
 */
 Context *
 find_context_below (Context *where,
-                    SCM type, string id)
+                    SCM type, const string &id)
 {
   if (where->is_alias (type))
     {
@@ -594,14 +630,6 @@ Context::get_score_context () const
     return 0;
 }
 
-SCM
-Context::make_event_class (SCM event_type)
-{
-  if (SCM_UNBNDP (ancestor_lookup_))
-    ancestor_lookup_ = get_global_context ()->ancestor_lookup_;
-  return scm_hashq_ref (ancestor_lookup_, event_type, SCM_EOL);
-}
-
 Output_def *
 Context::get_output_def () const
 {
@@ -660,6 +688,7 @@ Context::mark_smob (SCM sm)
   scm_gc_mark (me->definition_mods_);
   scm_gc_mark (me->properties_scm_);
   scm_gc_mark (me->accepts_list_);
+  scm_gc_mark (me->default_child_);
 
   if (me->implementation_)
     scm_gc_mark (me->implementation_->self_scm ());
@@ -670,8 +699,6 @@ Context::mark_smob (SCM sm)
   if (me->events_below_)
     scm_gc_mark (me->events_below_->self_scm ());
 
-  scm_gc_mark (me->ancestor_lookup_);
-
   return me->properties_scm_;
 }
 
index 84f8044b4728a45b5248c43b7663cb3f9d2e3f78..9b0d676870d5d08d6074e2a3d2c6090657b5a7b0 100644 (file)
@@ -13,7 +13,7 @@ class Control_track_performer : public Performer
 {
   Audio_staff *control_track_;
 
-  void add_text (Audio_text::Type, string);
+  void add_text (Audio_text::Type, const string&);
   TRANSLATOR_DECLARATIONS (Control_track_performer);
 protected:
 
@@ -40,7 +40,7 @@ Control_track_performer::acknowledge_audio_element (Audio_element_info info)
 }
 
 void
-Control_track_performer::add_text (Audio_text::Type text_type, string str)
+Control_track_performer::add_text (Audio_text::Type text_type, const string &str)
 {
   Audio_item *text = new Audio_text (text_type, str);
   control_track_->add_audio_item (text);
index dad382a27a64d9c85612ad67d7e7f753daa8f166..aebf071b9ece7d86b70d40d027c394b47718424b 100644 (file)
@@ -46,22 +46,22 @@ protected:
   virtual void derived_mark () const;
 private:
   Item *clef_;
-  Item *octavate_;
+  Item *modifier_;
 
   SCM prev_glyph_;
   SCM prev_cpos_;
-  SCM prev_octavation_;
+  SCM prev_transposition_;
   void create_clef ();
   void create_end_clef ();
   void set_glyph ();
   void inspect_clef_properties ();
-  void create_octavate_eight (SCM oct);
+  void create_clef_modifier (SCM oct);
 };
 
 void
 Cue_clef_engraver::derived_mark () const
 {
-  scm_gc_mark (prev_octavation_);
+  scm_gc_mark (prev_transposition_);
   scm_gc_mark (prev_cpos_);
   scm_gc_mark (prev_glyph_);
 }
@@ -69,9 +69,9 @@ Cue_clef_engraver::derived_mark () const
 Cue_clef_engraver::Cue_clef_engraver ()
 {
   clef_ = 0;
-  octavate_ = 0;
+  modifier_ = 0;
 
-  prev_octavation_ = prev_cpos_ = prev_glyph_ = SCM_EOL;
+  prev_transposition_ = prev_cpos_ = prev_glyph_ = SCM_EOL;
 }
 
 void
@@ -100,28 +100,31 @@ Cue_clef_engraver::acknowledge_bar_line (Grob_info info)
 }
 
 void
-Cue_clef_engraver::create_octavate_eight (SCM oct)
+Cue_clef_engraver::create_clef_modifier (SCM transp)
 {
-  if (scm_is_number (oct) && scm_to_int (oct))
+  if (scm_is_number (transp) && scm_to_int (transp))
     {
-      Item *g = make_item ("OctavateEight", SCM_EOL);
+      Item *g = make_item ("ClefModifier", SCM_EOL);
 
-      int abs_oct = scm_to_int (oct);
-      int dir = sign (abs_oct);
-      abs_oct = abs (abs_oct) + 1;
+      int abs_transp = scm_to_int (transp);
+      int dir = sign (abs_transp);
+      abs_transp = abs (abs_transp) + 1;
 
-      SCM txt = scm_number_to_string (scm_from_int (abs_oct),
+      SCM txt = scm_number_to_string (scm_from_int (abs_transp),
                                       scm_from_int (10));
 
-      g->set_property ("text",
-                       scm_list_n (ly_lily_module_constant ("vcenter-markup"),
-                                   txt, SCM_UNDEFINED));
+      SCM style = get_property ("cueClefTranspositionStyle");
+
+      SCM formatter = get_property ("cueClefTranspositionFormatter");
+      if (ly_is_procedure (formatter))
+        g->set_property ("text", scm_call_2 (formatter, txt, style));
+
       Side_position_interface::add_support (g, clef_);
 
       g->set_parent (clef_, Y_AXIS);
       g->set_parent (clef_, X_AXIS);
       g->set_property ("direction", scm_from_int (dir));
-      octavate_ = g;
+      modifier_ = g;
     }
 }
 
@@ -137,7 +140,7 @@ Cue_clef_engraver::create_clef ()
       if (scm_is_number (cpos))
         clef_->set_property ("staff-position", cpos);
 
-      create_octavate_eight (get_property ("cueClefOctavation"));
+      create_clef_modifier (get_property ("cueClefTransposition"));
     }
 }
 
@@ -151,7 +154,7 @@ Cue_clef_engraver::create_end_clef ()
       if (scm_is_number (cpos))
         clef_->set_property ("staff-position", cpos);
 
-      create_octavate_eight (get_property ("clefOctavation"));
+      create_clef_modifier (get_property ("clefTransposition"));
     }
 }
 
@@ -166,11 +169,11 @@ Cue_clef_engraver::inspect_clef_properties ()
 {
   SCM glyph = get_property ("cueClefGlyph");
   SCM clefpos = get_property ("cueClefPosition");
-  SCM octavation = get_property ("cueClefOctavation");
+  SCM transposition = get_property ("cueClefTransposition");
 
   if (scm_equal_p (glyph, prev_glyph_) == SCM_BOOL_F
       || scm_equal_p (clefpos, prev_cpos_) == SCM_BOOL_F
-      || scm_equal_p (octavation, prev_octavation_) == SCM_BOOL_F)
+      || scm_equal_p (transposition, prev_transposition_) == SCM_BOOL_F)
     {
       set_glyph ();
       if (scm_is_string (glyph))
@@ -184,7 +187,7 @@ Cue_clef_engraver::inspect_clef_properties ()
 
       prev_cpos_ = clefpos;
       prev_glyph_ = glyph;
-      prev_octavation_ = octavation;
+      prev_transposition_ = transposition;
     }
 
 }
@@ -202,7 +205,7 @@ Cue_clef_engraver::stop_translation_timestep ()
         clef_->set_property ("break-visibility", vis);
 
       clef_ = 0;
-      octavate_ = 0;
+      modifier_ = 0;
     }
 }
 
@@ -214,15 +217,16 @@ ADD_TRANSLATOR (Cue_clef_engraver,
                 /* create */
                 "CueClef "
                 "CueEndClef "
-                "OctavateEight ",
+                "ClefModifier ",
 
                 /* read */
                 "cueClefGlyph "
-                "cueClefOctavation "
+                "cueClefTransposition "
+                "cueClefTranspositionStyle "
                 "cueClefPosition "
                 "explicitCueClefVisibility "
                 "middleCCuePosition "
-                "clefOctavation ",
+                "clefTransposition ",
 
                 /* write */
                 ""
index 3b5555f5818a26cc71f3712df1dac041b57180ec..a4c1bf6e2afabd20a5c1ef4e697c3ee7d811e059 100644 (file)
@@ -52,10 +52,11 @@ ADD_TRANSLATOR (Default_bar_line_engraver,
                 "defaultBarType "
                 "measureLength "
                 "whichBar "
-                "measurePosition ",
+                "measurePosition "
+                "timing ",
 
                 /* write */
-                "automaticBars "
+                ""
                );
 
 Default_bar_line_engraver::Default_bar_line_engraver ()
@@ -76,7 +77,8 @@ Default_bar_line_engraver::start_translation_timestep ()
 
   Moment mp = measure_position (context ());
   bool start_of_measure = (last_moment_.main_part_ != now.main_part_
-                           && !mp.main_part_);
+                           && !mp.main_part_
+                           && to_boolean (get_property ("timing")));
 
   if (!scm_is_string (which) && to_boolean (automatic_bars))
     {
index 2d2fce49f396d2c482c329916a9a7b4ba0b9ce30..4538f17bc11a22a2646741d5a14b67de299e7e7c 100644 (file)
@@ -30,6 +30,16 @@ Dimension_cache::Dimension_cache (Dimension_cache const &d)
   extent_ = d.extent_ ? new Interval (*d.extent_) : 0;
 }
 
+Dimension_cache &
+Dimension_cache::operator = (Dimension_cache const &d)
+{
+  clear ();
+  offset_ = d.offset_ ? new Real (*d.offset_) : 0;
+  parent_ = d.parent_;
+  extent_ = d.extent_ ? new Interval (*d.extent_) : 0;
+  return *this;
+}
+
 Dimension_cache::Dimension_cache ()
 {
   init ();
index 0d899f94ba7ea27cfcc0b610ee4bd14d0eecb52f..eb612d35c4aa223c4bb12f8c3e08091c419bd9f7 100644 (file)
@@ -71,6 +71,12 @@ Event dispatching:
   This is done by keeping a priority queue of listener lists,
   and iteratively send the event to the lowest-priority listener.
 - An event is never sent twice to listeners with equal priority.
+  The only case where listeners with equal priority may exist is when
+  two dispatchers are connected for more than one event type.  In that
+  case, the respective listeners all have the same priority, making
+  sure that any event is only dispatched at most once for that
+  combination of dispatchers, even if it matches more than one event
+  type.
 */
 IMPLEMENT_LISTENER (Dispatcher, dispatch);
 void
@@ -96,7 +102,7 @@ Dispatcher::dispatch (SCM sev)
     listener list, and the lowest priority element is repeatedly
     extracted and called.
 
-    The priority queue is implemented as a bubble-sorted C
+    The priority queue is implemented as an insertion-sorted C
     array. Using the stack instead of native Scheme datastructures
     avoids overheads for memory allocation. The queue is usually small
     (around 2 elements), so the quadratic sorting time is not a
@@ -115,7 +121,7 @@ Dispatcher::dispatch (SCM sev)
         num_classes--;
       else
         {
-          // bubblesort.
+          // insertion sort.
           int prio = scm_to_int (scm_caar (list));
           int j;
           for (j = i; j > 0 && lists[j - 1].prio > prio; j--)
@@ -203,6 +209,7 @@ Dispatcher::broadcast (Stream_event *ev)
   dispatch (ev->self_scm ());
 }
 
+// add_listener will always assign a new priority for each call
 void
 Dispatcher::add_listener (Listener l, SCM ev_class)
 {
@@ -213,6 +220,14 @@ inline void
 Dispatcher::internal_add_listener (Listener l, SCM ev_class, int priority)
 {
   SCM list = scm_hashq_ref (listeners_, ev_class, SCM_EOL);
+  // if ev_class is not yet listened to, we go through our list of
+  // source dispatchers and register ourselves there with the priority
+  // we have reserved for this dispatcher.  The priority system
+  // usually distributes events in the order events are registered.
+  // The reuse of a previous priority when registering another event
+  // for a dispatcher/dispatcher connection bypasses the normal
+  // ordering, but it is the mechanism by which duplicate broadcasts
+  // of the same event from one dispatcher to another are avoided.
   if (!scm_is_pair (list))
     {
       /* Tell all dispatchers that we listen to, that we want to hear ev_class
@@ -276,6 +291,10 @@ Dispatcher::remove_listener (Listener l, SCM ev_class)
 void
 Dispatcher::register_as_listener (Dispatcher *disp)
 {
+  // We are creating and remembering the priority _we_ have with the
+  // foreign dispatcher.  All events are dispatched with the same
+  // priority.  The result is that, for example, a single event class
+  // will only trigger an event listener once.
   int priority = ++disp->priority_count_;
 
   // Don't register twice to the same dispatcher.
index 1aa0b728c0657618f6839be6818691cee898848a..6cba432639deb7f8fd899a53a577987253787762 100644 (file)
@@ -187,7 +187,8 @@ Dot_column::calc_positioning_done (SCM smob)
 
       cfg.remove_collision (p);
       cfg[p] = dp;
-      if (Staff_symbol_referencer::on_line (dp.dot_, p))
+      if (Staff_symbol_referencer::on_line (dp.dot_, p) &&
+          dp.dot_->get_property ("style") != ly_symbol2scm ("kievan"))
         cfg.remove_collision (p);
     }
 
index be375b540d96db2eee758c7b77b0b72560add285..863aa5fc0242395b646abc2365ee6c96246a0670 100644 (file)
@@ -45,7 +45,7 @@ Dot_formatting_problem::best () const
 
 Dot_formatting_problem::Dot_formatting_problem (vector<Box> const &boxes,
                                                 Interval base_x)
-  : head_skyline_ (boxes, 0.2, Y_AXIS, RIGHT)
+  : head_skyline_ (boxes, Y_AXIS, RIGHT)
 {
   best_ = 0;
   head_skyline_.set_minimum_height (base_x[RIGHT]);
index 43c47b77199a4576a7de3890f8011d485e925e84..20503ca5ae4bfc414a3af60abf7190d6ec985f34 100644 (file)
@@ -62,7 +62,6 @@ Dots::print (SCM d)
 
       for (int i = scm_to_int (c); i--;)
         {
-          d.translate_axis (2 * dw, X_AXIS);
           mol.add_at_edge (X_AXIS, RIGHT, d, dw);
         }
     }
index 251d2099fe52ae5eee7c4938a44cbd42136bb070..06d24fdea60343494a7aaa7005d5f70aa6654fc6 100644 (file)
@@ -128,6 +128,8 @@ Drum_notes_engraver::acknowledge_note_column (Grob_info inf)
       if (!e->get_parent (X_AXIS)
           && Side_position_interface::get_axis (e) == Y_AXIS)
         e->set_parent (inf.grob (), X_AXIS);
+
+      Side_position_interface::add_support (e, inf.grob ());
     }
 }
 
index 265498658abb01358aa6cd86b18ee21986fa666b..37f93cd5c4dce99bae0716661f99beee03440d9c 100644 (file)
@@ -34,7 +34,8 @@
 class Dynamic_align_engraver : public Engraver
 {
   TRANSLATOR_DECLARATIONS (Dynamic_align_engraver);
-  DECLARE_ACKNOWLEDGER (note_column);
+  DECLARE_ACKNOWLEDGER (rhythmic_head);
+  DECLARE_ACKNOWLEDGER (stem);
   DECLARE_ACKNOWLEDGER (dynamic);
   DECLARE_ACKNOWLEDGER (footnote_spanner);
   DECLARE_END_ACKNOWLEDGER (dynamic);
@@ -64,7 +65,8 @@ Dynamic_align_engraver::Dynamic_align_engraver ()
 }
 
 ADD_ACKNOWLEDGER (Dynamic_align_engraver, dynamic);
-ADD_ACKNOWLEDGER (Dynamic_align_engraver, note_column);
+ADD_ACKNOWLEDGER (Dynamic_align_engraver, rhythmic_head);
+ADD_ACKNOWLEDGER (Dynamic_align_engraver, stem);
 ADD_ACKNOWLEDGER (Dynamic_align_engraver, footnote_spanner);
 ADD_END_ACKNOWLEDGER (Dynamic_align_engraver, dynamic);
 
@@ -107,7 +109,13 @@ Dynamic_align_engraver::acknowledge_footnote_spanner (Grob_info info)
 }
 
 void
-Dynamic_align_engraver::acknowledge_note_column (Grob_info info)
+Dynamic_align_engraver::acknowledge_rhythmic_head (Grob_info info)
+{
+  support_.push_back (info.grob ());
+}
+
+void
+Dynamic_align_engraver::acknowledge_stem (Grob_info info)
 {
   support_.push_back (info.grob ());
 }
index c492e59c5540809829324fbf50bdcb6ad8f4ba88..a4d4e06f5a68fb6d7ceea97e708d3b0950c1ae48 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  Copyright (C) 2008--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "axis-group-interface.hh"
-#include "context.hh"
-#include "engraver.hh"
-#include "dimensions.hh"
-#include "directional-element-interface.hh"
 #include "engraver.hh"
 #include "hairpin.hh"
 #include "international.hh"
-#include "interval.hh"
+#include "item.hh"
 #include "note-column.hh"
-#include "paper-column.hh"
 #include "pointer-group-interface.hh"
-#include "script-interface.hh"
 #include "self-alignment-interface.hh"
-#include "side-position-interface.hh"
-#include "staff-symbol-referencer.hh"
-#include "stream-event.hh"
-#include "warn.hh"
 #include "spanner.hh"
+#include "stream-event.hh"
 #include "text-interface.hh"
 
 #include "translator.icc"
 
-/*
-  TODO:
-
-  * direction of text-dynamic-event if not equal to direction of
-  line-spanner
-
-  - TODO: this engraver is too complicated. We should split it into
-  the handling of the basic grobs and the linespanner
-
-  - TODO: the line-spanner is not killed after the (de)crescs are
-  finished.
-*/
-
-/**
-   print text & hairpin dynamics.
-*/
 class Dynamic_engraver : public Engraver
 {
-  Item *script_;
-  Spanner *line_spanner_;
-  Spanner *cresc_;
-
-  Spanner *finished_line_spanner_;
-  Spanner *finished_cresc_;
-
-  Stream_event *script_ev_;
-  Stream_event *current_cresc_ev_;
-
-  Drul_array<Stream_event *> accepted_spanevents_drul_;
-
-  vector<Note_column *> pending_columns_;
-  vector<Grob *> pending_elements_;
-
-  void typeset_all ();
-
   TRANSLATOR_DECLARATIONS (Dynamic_engraver);
   DECLARE_ACKNOWLEDGER (note_column);
   DECLARE_TRANSLATOR_LISTENER (absolute_dynamic);
   DECLARE_TRANSLATOR_LISTENER (span_dynamic);
+  DECLARE_TRANSLATOR_LISTENER (break_span);
 
 protected:
+  virtual void process_music ();
+  virtual void stop_translation_timestep ();
   virtual void finalize ();
-  void stop_translation_timestep ();
-  void process_music ();
+
+private:
+  SCM get_property_setting (Stream_event *evt, char const *evprop,
+                            char const *ctxprop);
+  string get_spanner_type (Stream_event *ev);
+
+  Drul_array<Stream_event *> accepted_spanevents_drul_;
+  Spanner *current_spanner_;
+  Spanner *finished_spanner_;
+
+  Item *script_;
+  Stream_event *script_event_;
+  Stream_event *current_span_event_;
+  bool end_new_spanner_;
 };
 
 Dynamic_engraver::Dynamic_engraver ()
 {
+  script_event_ = 0;
+  current_span_event_ = 0;
   script_ = 0;
-  finished_cresc_ = 0;
-  line_spanner_ = 0;
-  finished_line_spanner_ = 0;
-  current_cresc_ev_ = 0;
-  cresc_ = 0;
-
-  script_ev_ = 0;
-  accepted_spanevents_drul_[START] = 0;
-  accepted_spanevents_drul_[STOP] = 0;
+  finished_spanner_ = 0;
+  current_spanner_ = 0;
+  accepted_spanevents_drul_.set (0, 0);
+  end_new_spanner_ = false;
 }
 
 IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_engraver, absolute_dynamic);
 void
 Dynamic_engraver::listen_absolute_dynamic (Stream_event *ev)
 {
-  /*
-    TODO: probably broken.
-  */
-  ASSIGN_EVENT_ONCE (script_ev_, ev);
+  ASSIGN_EVENT_ONCE (script_event_, ev);
 }
 
 IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_engraver, span_dynamic);
@@ -116,337 +82,223 @@ Dynamic_engraver::listen_span_dynamic (Stream_event *ev)
 {
   Direction d = to_dir (ev->get_property ("span-direction"));
 
-  if (d == START)
-    ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[START], ev);
-
-  /* Cancel any ongoing crescendo, either explicitly by \! or
-     implicitly by a new crescendo. Also avoid warning if cresc is
-     canceled both implicitly and explicitly. */
-  if ((d == STOP || current_cresc_ev_) && !accepted_spanevents_drul_[STOP])
-    ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[STOP], ev);
+  ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[d], ev);
 }
 
+IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_engraver, break_span);
 void
-Dynamic_engraver::process_music ()
+Dynamic_engraver::listen_break_span (Stream_event *event)
 {
-  if (accepted_spanevents_drul_[START] || accepted_spanevents_drul_[STOP] || script_ev_)
+  if (event->in_event_class ("break-dynamic-span-event"))
     {
-      if (!line_spanner_)
-        {
-          Stream_event *rq = accepted_spanevents_drul_[START];
-          line_spanner_ = make_spanner ("DynamicLineSpanner", rq ? rq->self_scm () : SCM_EOL);
-          if (script_ev_)
-            rq = script_ev_;
-        }
+      // Case 1: Already have a start dynamic event -> break applies to new
+      //         spanner (created later) -> set a flag
+      // Case 2: no new spanner, but spanner already active -> break it now
+      if (accepted_spanevents_drul_[START])
+        end_new_spanner_ = true;
+      else if (current_spanner_)
+        current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
     }
+}
 
-  /*
-    During a (de)crescendo, pending event will not be cleared,
-    and a line-spanner will always be created, as \< \! are already
-    two events.
-
-    Note: line-spanner must always have at least same duration
-    as (de)crecsendo, b.o. line-breaking.
-  */
+SCM
+Dynamic_engraver::get_property_setting (Stream_event *evt,
+                                        char const *evprop,
+                                        char const *ctxprop)
+{
+  SCM spanner_type = evt->get_property (evprop);
+  if (spanner_type == SCM_EOL)
+    spanner_type = get_property (ctxprop);
+  return spanner_type;
+}
 
-  /*
-    maybe we should leave dynamic texts to the text-engraver and
-    simply acknowledge them?
-  */
-  if (script_ev_)
+void
+Dynamic_engraver::process_music ()
+{
+  if (current_spanner_
+      && (accepted_spanevents_drul_[STOP]
+          || script_event_
+          || accepted_spanevents_drul_[START]))
     {
-      script_ = make_item ("DynamicText", script_ev_->self_scm ());
-      script_->set_property ("text",
-                             script_ev_->get_property ("text"));
+      Stream_event *ender = accepted_spanevents_drul_[STOP];
+      if (!ender)
+        ender = script_event_;
 
-      if (Direction d = to_dir (script_ev_->get_property ("direction")))
-        set_grob_direction (line_spanner_, d);
-      else if (Direction d = to_dir (line_spanner_->get_property ("direction")))
-        set_grob_direction (script_, d);
+      if (!ender)
+        ender = accepted_spanevents_drul_[START];
 
-      Axis_group_interface::add_element (line_spanner_, script_);
+      finished_spanner_ = current_spanner_;
+      announce_end_grob (finished_spanner_, ender->self_scm ());
+      current_spanner_ = 0;
+      current_span_event_ = 0;
     }
 
-  if (accepted_spanevents_drul_[STOP] || script_ev_)
+  if (accepted_spanevents_drul_[START])
     {
-      /*
-        finish side position alignment if the (de)cresc ends here, and
-        there are no new dynamics.
-      */
+      current_span_event_ = accepted_spanevents_drul_[START];
 
-      if (cresc_)
-        {
-          assert (!finished_cresc_ && cresc_);
-
-          if (script_)
-            {
-              cresc_->set_bound (RIGHT, script_);
-              add_bound_item (line_spanner_, script_);
-            }
-
-          finished_cresc_ = cresc_;
-          announce_end_grob (finished_cresc_, SCM_EOL);
-          cresc_ = 0;
-          current_cresc_ev_ = 0;
-        }
-      else if (accepted_spanevents_drul_[STOP])
-        accepted_spanevents_drul_[STOP]->origin ()->warning (_ ("cannot find start of (de)crescendo"));
-    }
+      string start_type = get_spanner_type (current_span_event_);
+      SCM cresc_type = get_property_setting (current_span_event_, "span-type",
+                                             (start_type + "Spanner").c_str ());
 
-  if (accepted_spanevents_drul_[START])
-    {
-      if (current_cresc_ev_)
+      if (cresc_type == ly_symbol2scm ("text"))
         {
-          string msg = _ ("already have a decrescendo");
-          if (current_cresc_ev_->in_event_class ("crescendo-event"))
-            msg = _ ("already have a crescendo");
-
-          accepted_spanevents_drul_[START]->origin ()->warning (msg);
-          current_cresc_ev_->origin ()->warning (_ ("cresc starts here"));
+          current_spanner_
+            = make_spanner ("DynamicTextSpanner",
+                            accepted_spanevents_drul_[START]->self_scm ());
+
+          SCM text = get_property_setting (current_span_event_, "span-text",
+                                           (start_type + "Text").c_str ());
+          if (Text_interface::is_markup (text))
+            current_spanner_->set_property ("text", text);
+          /*
+            If the line of a text spanner is hidden, end the alignment spanner
+            early: this allows dynamics to be spaced individually instead of
+            being linked together.
+          */
+          if (current_spanner_->get_property ("style") == ly_symbol2scm ("none"))
+            current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
         }
       else
         {
-          current_cresc_ev_ = accepted_spanevents_drul_[START];
-
-          if (Direction d = to_dir (current_cresc_ev_->get_property ("direction")))
-            set_grob_direction (line_spanner_, d);
-
-          /*
-            TODO: Use symbols.
-          */
-
-          SCM start_sym = scm_car (current_cresc_ev_->get_property ("class"));
-          string start_type;
-
-          if (start_sym == ly_symbol2scm ("decrescendo-event"))
-            start_type = "decrescendo";
-          else if (start_sym == ly_symbol2scm ("crescendo-event"))
-            start_type = "crescendo";
-          else
-            {
-              programming_error ("unknown dynamic spanner type");
-              return;
-            }
-
-          /*
-            UGH. TODO: should read from original event, so appearance
-            may be altered with \tweak.
-           */
-          SCM s = get_property ((start_type + "Spanner").c_str ());
-          if (!scm_is_symbol (s) || s == ly_symbol2scm ("hairpin"))
+          if (cresc_type != ly_symbol2scm ("hairpin"))
             {
-              cresc_ = make_spanner ("Hairpin", accepted_spanevents_drul_[START]->self_scm ());
-              if (finished_cresc_)
-                {
-                  Pointer_group_interface::add_grob (finished_cresc_,
-                                                     ly_symbol2scm ("adjacent-hairpins"),
-                                                     cresc_);
-
-                  Pointer_group_interface::add_grob (cresc_,
-                                                     ly_symbol2scm ("adjacent-hairpins"),
-                                                     finished_cresc_);
-                }
+              string as_string = ly_scm_write_string (cresc_type);
+              current_span_event_
+              ->origin ()->warning (_f ("unknown crescendo style: %s\ndefaulting to hairpin.", as_string.c_str ()));
             }
+          current_spanner_ = make_spanner ("Hairpin",
+                                           current_span_event_->self_scm ());
+        }
+      // if we have a break-dynamic-span event right after the start dynamic, break the new spanner immediately
+      if (end_new_spanner_)
+        {
+          current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
+          end_new_spanner_ = false;
+        }
+      if (finished_spanner_)
+        {
+          if (Hairpin::has_interface (finished_spanner_))
+            Pointer_group_interface::add_grob (finished_spanner_,
+                                               ly_symbol2scm ("adjacent-spanners"),
+                                               current_spanner_);
+          if (Hairpin::has_interface (current_spanner_))
+            Pointer_group_interface::add_grob (current_spanner_,
+                                               ly_symbol2scm ("adjacent-spanners"),
+                                               finished_spanner_);
+        }
+    }
 
-          /*
-            This is a convenient (and legacy) interface to TextSpanners
-            for use in (de)crescendi.
-            Hmm.
-          */
-          else
-            {
-              cresc_ = make_spanner ("DynamicTextSpanner", accepted_spanevents_drul_[START]->self_scm ());
-              cresc_->set_property ("style", s);
-              context ()->set_property ((start_type
-                                         + "Spanner").c_str (), SCM_EOL);
-              s = get_property ((start_type + "Text").c_str ());
-              if (Text_interface::is_markup (s))
-                {
-                  cresc_->set_property ("text", s);
-                  context ()->set_property ((start_type + "Text").c_str (),
-                                            SCM_EOL);
-                }
-
-              if (script_)
-                {
-                  set_nested_property (cresc_,
-                                       scm_list_3 (ly_symbol2scm ("bound-details"),
-                                                   ly_symbol2scm ("left"),
-                                                   ly_symbol2scm ("attach-dir")
-                                                  ),
-                                       scm_from_int (RIGHT));
-                }
-            }
+  if (script_event_)
+    {
+      script_ = make_item ("DynamicText", script_event_->self_scm ());
+      script_->set_property ("text",
+                             script_event_->get_property ("text"));
 
-          if (script_)
-            {
-              cresc_->set_bound (LEFT, script_);
-              add_bound_item (line_spanner_, cresc_->get_bound (LEFT));
-            }
-          Axis_group_interface::add_element (line_spanner_, cresc_);
-        }
+      if (finished_spanner_)
+        finished_spanner_->set_bound (RIGHT, script_);
+      if (current_spanner_)
+        current_spanner_->set_bound (LEFT, script_);
     }
 }
 
 void
 Dynamic_engraver::stop_translation_timestep ()
 {
-  if (!current_cresc_ev_ && line_spanner_)
-    {
-      assert (!finished_line_spanner_);
-      finished_line_spanner_ = line_spanner_;
-      line_spanner_ = 0;
-    }
-
-  typeset_all ();
-
-  if (cresc_ && !cresc_->get_bound (LEFT))
-    {
-      cresc_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn")));
-      add_bound_item (line_spanner_, cresc_->get_bound (LEFT));
-    }
-
-  script_ev_ = 0;
-  accepted_spanevents_drul_[START] = 0;
-  accepted_spanevents_drul_[STOP] = 0;
+  if (finished_spanner_ && !finished_spanner_->get_bound (RIGHT))
+    finished_spanner_
+    ->set_bound (RIGHT,
+                 unsmob_grob (get_property ("currentMusicalColumn")));
+
+  if (current_spanner_ && !current_spanner_->get_bound (LEFT))
+    current_spanner_
+    ->set_bound (LEFT,
+                 unsmob_grob (get_property ("currentMusicalColumn")));
+  script_ = 0;
+  script_event_ = 0;
+  accepted_spanevents_drul_.set (0, 0);
+  finished_spanner_ = 0;
+  end_new_spanner_ = false;
 }
 
 void
 Dynamic_engraver::finalize ()
 {
-  typeset_all ();
-
-  if (line_spanner_
-      && !line_spanner_->is_live ())
-    line_spanner_ = 0;
-  if (line_spanner_)
-    {
-      finished_line_spanner_ = line_spanner_;
-      typeset_all ();
-    }
-
-  if (cresc_
-      && !cresc_->is_live ())
-    cresc_ = 0;
-  if (cresc_)
+  if (current_spanner_
+      && !current_spanner_->is_live ())
+    current_spanner_ = 0;
+  if (current_spanner_)
     {
-      current_cresc_ev_->origin ()->warning (_ ("unterminated (de)crescendo"));
-      cresc_->suicide ();
-      cresc_ = 0;
+      current_span_event_
+      ->origin ()->warning (_f ("unterminated %s",
+                                get_spanner_type (current_span_event_)
+                                .c_str ()));
+      current_spanner_->suicide ();
+      current_spanner_ = 0;
     }
 }
 
-void
-Dynamic_engraver::typeset_all ()
+string
+Dynamic_engraver::get_spanner_type (Stream_event *ev)
 {
-  if (finished_cresc_)
-    {
-      if (!finished_cresc_->get_bound (RIGHT))
-        {
+  string type;
+  SCM start_sym = scm_car (ev->get_property ("class"));
 
-          Grob *column_bound = unsmob_grob (get_property ("currentMusicalColumn"));
+  if (start_sym == ly_symbol2scm ("decrescendo-event"))
+    type = "decrescendo";
+  else if (start_sym == ly_symbol2scm ("crescendo-event"))
+    type = "crescendo";
+  else
+    programming_error ("unknown dynamic spanner type");
 
-          finished_cresc_->set_bound (RIGHT, script_
-                                      ? script_
-                                      : column_bound);
-
-          if (finished_line_spanner_)
-            add_bound_item (finished_line_spanner_,
-                            finished_cresc_->get_bound (RIGHT));
-        }
-      finished_cresc_ = 0;
-    }
-
-  script_ = 0;
-  if (finished_line_spanner_)
-    {
-      /*
-        We used to have
-
-        extend-spanner-over-elements (finished_line_spanner_);
-
-        but this is rather kludgy, since finished_line_spanner_
-        typically has a staff-symbol field set , extending it over the
-        entire staff.
-
-      */
-
-      Grob *l = finished_line_spanner_->get_bound (LEFT);
-      Grob *r = finished_line_spanner_->get_bound (RIGHT);
-      if (!r && l)
-        finished_line_spanner_->set_bound (RIGHT, l);
-      else if (!l && r)
-        finished_line_spanner_->set_bound (LEFT, r);
-      else if (!r && !l)
-        {
-          /*
-            This is a isolated dynamic apparently, and does not even have
-            any interesting support item.
-          */
-          Grob *cc = unsmob_grob (get_property ("currentMusicalColumn"));
-          Item *ci = dynamic_cast<Item *> (cc);
-          finished_line_spanner_->set_bound (RIGHT, ci);
-          finished_line_spanner_->set_bound (LEFT, ci);
-        }
-      finished_line_spanner_ = 0;
-    }
+  return type;
 }
 
 void
 Dynamic_engraver::acknowledge_note_column (Grob_info info)
 {
-  if (!line_spanner_)
-    return;
-
-  if (line_spanner_
-      /* Don't refill killed spanner */
-      && line_spanner_->is_live ())
-    {
-      Side_position_interface::add_support (line_spanner_, info.grob ());
-      add_bound_item (line_spanner_, dynamic_cast<Item *> (info.grob ()));
-    }
-
   if (script_ && !script_->get_parent (X_AXIS))
     {
       extract_grob_set (info.grob (), "note-heads", heads);
-      if (heads.size ())
+      Grob *stem = unsmob_grob (info.grob ()->get_object ("stem"));
+      /*
+        Spacing constraints may require dynamics to be aligned on rests,
+        so check for a rest if this note column has no note heads.
+      */
+      Grob *x_parent = (heads.size ()
+                        ? heads[0]
+                        : unsmob_grob (info.grob ()->get_object ("rest")));
+      if (x_parent)
         {
-          Grob *head = heads[0];
-          script_->set_parent (head, X_AXIS);
+          script_->set_parent (x_parent, X_AXIS);
           Self_alignment_interface::set_center_parent (script_, X_AXIS);
         }
+      if (stem)
+        Pointer_group_interface::add_grob (script_, ly_symbol2scm ("potential-X-colliding-grobs"), stem);
     }
 
-  if (cresc_)
-    {
-      if (!cresc_->get_bound (LEFT))
-        {
-          cresc_->set_bound (LEFT, info.grob ());
-          add_bound_item (line_spanner_, cresc_->get_bound (LEFT));
-        }
-    }
-
-  if (finished_cresc_ && !finished_cresc_->get_bound (RIGHT))
-    finished_cresc_->set_bound (RIGHT, info.grob ());
+  if (current_spanner_ && !current_spanner_->get_bound (LEFT))
+    current_spanner_->set_bound (LEFT, info.grob ());
+  if (finished_spanner_ && !finished_spanner_->get_bound (RIGHT))
+    finished_spanner_->set_bound (RIGHT, info.grob ());
 }
 
 ADD_ACKNOWLEDGER (Dynamic_engraver, note_column);
-
 ADD_TRANSLATOR (Dynamic_engraver,
                 /* doc */
-                "Create hairpins, dynamic texts, and their vertical"
-                " alignments.  The symbols are collected onto a"
-                " @code{DynamicLineSpanner} grob which takes care of vertical"
-                " positioning.",
+                "Create hairpins, dynamic texts and dynamic text spanners.",
 
                 /* create */
-                "DynamicLineSpanner "
                 "DynamicTextSpanner "
                 "DynamicText "
                 "Hairpin ",
 
                 /* read */
-                "",
+                "crescendoSpanner "
+                "crescendoText "
+                "currentMusicalColumn "
+                "decrescendoSpanner "
+                "decrescendoText ",
 
                 /* write */
                 ""
index 86734d7ee62fb4bce8cd54a54ab6c6832899c3ed..936060bfc60bf7c4e673c9e699fa150abb2ab5c5 100644 (file)
@@ -162,6 +162,18 @@ Dynamic_performer::process_music ()
       announce_element (info);
     }
 
+  if (!last_volume_initialized_)
+    {
+      absolute_ = new Audio_dynamic ();
+
+      last_volume_
+       = absolute_->volume_ = equalize_volume (0.71); // Backward compatible
+      last_volume_initialized_ = true;
+
+      Audio_element_info info (absolute_, script_event_);
+      announce_element (info);
+    }
+
   if (span_dynamic_)
     span_dynamic_->add_absolute (absolute_);
 
index db1303d63ce3b918f95e5d9f254c589a84bf89ea..b8bf1234c04d625fe36c635c38aa3bad1a24c85b 100644 (file)
@@ -53,7 +53,7 @@ Engraver::make_grob_info (Grob *e, SCM cause)
   /* TODO: Remove Music code when it's no longer needed */
   if (Music *m = unsmob_music (cause))
     {
-      cause = m->to_event (context ())->unprotect ();
+      cause = m->to_event ()->unprotect ();
     }
   if (e->get_property ("cause") == SCM_EOL
       && (unsmob_stream_event (cause) || unsmob_grob (cause)))
index 5fa27a69cbe40819c1f0146c56fdd1579ada4a90..9b55e04f49cd83360dfbff36c6f8ed6530a4467f 100644 (file)
@@ -39,7 +39,7 @@ protected:
   DECLARE_ACKNOWLEDGER (note_column);
   DECLARE_ACKNOWLEDGER (slur);
   DECLARE_END_ACKNOWLEDGER (slur);
-  DECLARE_ACKNOWLEDGER (tie);
+  DECLARE_END_ACKNOWLEDGER (tie);
   DECLARE_ACKNOWLEDGER (bass_figure_alignment);
   DECLARE_END_ACKNOWLEDGER (bass_figure_alignment);
 
@@ -106,7 +106,7 @@ Figured_bass_position_engraver::acknowledge_slur (Grob_info info)
 }
 
 void
-Figured_bass_position_engraver::acknowledge_tie (Grob_info info)
+Figured_bass_position_engraver::acknowledge_end_tie (Grob_info info)
 {
   support_.push_back (info.grob ());
 }
@@ -142,7 +142,7 @@ ADD_ACKNOWLEDGER (Figured_bass_position_engraver, note_column);
 ADD_ACKNOWLEDGER (Figured_bass_position_engraver, slur);
 ADD_END_ACKNOWLEDGER (Figured_bass_position_engraver, slur);
 
-ADD_ACKNOWLEDGER (Figured_bass_position_engraver, tie);
+ADD_END_ACKNOWLEDGER (Figured_bass_position_engraver, tie);
 ADD_ACKNOWLEDGER (Figured_bass_position_engraver, bass_figure_alignment);
 ADD_END_ACKNOWLEDGER (Figured_bass_position_engraver, bass_figure_alignment);
 
index 96be62c9a2985bc8822420f9338cb7b2af1cf914..b124fda9b154d3f00195867223faf9e2c5d8e0b0 100644 (file)
@@ -26,10 +26,10 @@ using namespace std;
 map<string, string> file_name_map_global;
 
 string
-map_file_name (string s)
+map_file_name (const string &s)
 {
   if (file_name_map_global.find (s) != file_name_map_global.end ())
-    s = file_name_map_global[s];
+    return file_name_map_global[s];
   return s;
 }
 
diff --git a/lily/fingering-column-engraver.cc b/lily/fingering-column-engraver.cc
new file mode 100644 (file)
index 0000000..1c5b904
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2012 Mike Solomon <mike@mikesolomon.org>
+
+  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 "engraver.hh"
+#include "side-position-interface.hh"
+#include "pointer-group-interface.hh"
+#include "fingering-column.hh"
+#include "item.hh"
+
+#include "translator.icc"
+
+/**
+   Find potentially colliding scripts, and put them in a
+   Fingering_column, that will fix the columns.  */
+class Fingering_column_engraver : public Engraver
+{
+  Drul_array<Grob *> fingering_columns_;
+  Drul_array<vector<Grob *> > scripts_;
+  vector<Grob *> possibles_;
+
+public:
+  TRANSLATOR_DECLARATIONS (Fingering_column_engraver);
+protected:
+  DECLARE_ACKNOWLEDGER (finger);
+  void process_acknowledged ();
+  void stop_translation_timestep ();
+};
+
+Fingering_column_engraver::Fingering_column_engraver ()
+{
+  for (LEFT_and_RIGHT (d))
+    fingering_columns_[d] = 0;
+}
+
+void
+Fingering_column_engraver::stop_translation_timestep ()
+{
+  for (vsize i = 0; i < possibles_.size (); i++)
+    if (!Item::is_non_musical (possibles_[i]))
+      {
+        if (Side_position_interface::get_axis (possibles_[i]) == X_AXIS)
+          {
+            Direction d = robust_scm2dir (possibles_[i]->get_property ("direction"), CENTER);
+            if (d)
+              scripts_[d].push_back (possibles_[i]);
+            else
+              possibles_[i]->warning ("Cannot add a fingering without a direction.");
+          }
+      }
+
+  for (LEFT_and_RIGHT (d))
+    {
+      if (scripts_[d].size () < 2 && fingering_columns_[d])
+        {
+          fingering_columns_[d]->suicide ();
+          fingering_columns_[d] = 0;
+        }
+      if (fingering_columns_[d])
+        {
+          for (vsize i = 0; i < scripts_[d].size (); i++)
+            Fingering_column::add_fingering (fingering_columns_[d], scripts_[d][i]);
+
+        }
+      scripts_[d].clear ();
+      fingering_columns_[d] = 0;
+    }
+  possibles_.clear ();
+}
+
+void
+Fingering_column_engraver::acknowledge_finger (Grob_info inf)
+{
+  Item *thing = dynamic_cast<Item *> (inf.grob ());
+  if (thing)
+    possibles_.push_back (thing);
+}
+
+void
+Fingering_column_engraver::process_acknowledged ()
+{
+  for (LEFT_and_RIGHT (d))
+    {
+      if (possibles_.size () > 1 && !fingering_columns_[d])
+        fingering_columns_[d] = make_item ("FingeringColumn", SCM_EOL);
+    }
+}
+
+ADD_ACKNOWLEDGER (Fingering_column_engraver, finger);
+ADD_TRANSLATOR (Fingering_column_engraver,
+                /* doc */
+                "Find potentially colliding scripts and put them into a"
+                " @code{FingeringColumn} object; that will fix the collisions.",
+
+                /* create */
+                "FingeringColumn ",
+
+                /* read */
+                "",
+
+                /* write */
+                ""
+               );
diff --git a/lily/fingering-column.cc b/lily/fingering-column.cc
new file mode 100644 (file)
index 0000000..62d7d08
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2012 Mike Solomon <mike@mikesolomon.org>
+
+  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 "directional-element-interface.hh"
+#include "grob.hh"
+#include "fingering-column.hh"
+#include "pointer-group-interface.hh"
+#include "staff-symbol-referencer.hh"
+#include "item.hh"
+#include "paper-column.hh"
+
+#define EPS 1e-5
+
+struct Fingering_and_offset
+{
+  Grob *fingering_;
+  Real offset_;
+  Fingering_and_offset (Grob *fingering, Real offset);
+};
+
+Fingering_and_offset::Fingering_and_offset (Grob *fingering, Real offset) :
+  fingering_ (fingering), offset_ (offset)
+{
+}
+
+bool
+fingering_and_offset_less (Fingering_and_offset fo0, Fingering_and_offset fo1)
+{
+  return fo0.offset_ < fo1.offset_;
+}
+
+MAKE_SCHEME_CALLBACK (Fingering_column, calc_positioning_done, 1);
+SCM
+Fingering_column::calc_positioning_done (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  if (!me->is_live ())
+    return SCM_BOOL_T;
+
+  me->set_property ("positioning-done", SCM_BOOL_T);
+
+  do_y_positioning (me);
+  do_x_positioning (me);
+
+  return SCM_BOOL_T;
+}
+
+void
+Fingering_column::do_y_positioning (Grob *me)
+{
+  extract_grob_set (me, "fingerings", const_fingerings);
+
+  if (const_fingerings.size () < 2)
+    {
+      me->programming_error ("This FingeringColumn should have never been created.");
+      return;
+    }
+
+  vector<Grob *> fingerings;
+  for (vsize i = 0; i < const_fingerings.size (); i++)
+    fingerings.push_back (const_fingerings[i]);
+
+
+  Grob *common[2] = {common_refpoint_of_array (fingerings, me, X_AXIS),
+                     common_refpoint_of_array (fingerings, me, Y_AXIS)};
+
+  Real padding = robust_scm2double (me->get_property ("padding"), 0.2);
+
+  // order the fingerings from bottom to top
+  vector_sort (fingerings, pure_position_less);
+
+ vector<Real> shift(fingerings.size());
+
+  // Try stacking the fingerings top-to-bottom, and then bottom-to-top.
+  // Use the average of the resulting stacked locations as the final positions
+  for (UP_and_DOWN (d))
+     {
+      Real stack_end = -d * infinity_f;
+      Interval prev_x_ext;
+      for (vsize i = (d == UP)? 0 : fingerings.size() - 1;
+           i < fingerings.size ();
+           i += d)
+        {
+          Interval x_ext = fingerings[i]->extent(common[X_AXIS], X_AXIS);
+          Interval y_ext = fingerings[i]->extent(fingerings[i], Y_AXIS);
+          Real parent_y = fingerings[i]->get_parent(Y_AXIS)
+                         ->relative_coordinate(common[Y_AXIS], Y_AXIS);
+
+          // Checking only between sequential neighbors, seems good enough
+          if (!intersection(x_ext, prev_x_ext).is_empty())
+            stack_end += d * (y_ext.length() + padding);
+          // minmax() returns whichever is further along in direction d
+          stack_end = minmax(d, stack_end, parent_y);
+
+          shift[i] += 0.5 * (stack_end - y_ext[d] - parent_y);
+
+          prev_x_ext = x_ext;
+        }
+     }
+
+  for (vsize i = 0; i < fingerings.size (); i++)
+    fingerings[i]->translate_axis(shift[i], Y_AXIS);
+}
+
+void
+Fingering_column::do_x_positioning (Grob *me)
+{
+  extract_grob_set (me, "fingerings", fingerings);
+  if (!fingerings.size ())
+    return;
+
+  Grob *common_x = common_refpoint_of_array (fingerings, me, X_AXIS);
+
+  Real snap = robust_scm2double (me->get_property ("snap-radius"), 0.3);
+  vector<Fingering_and_offset> fos;
+
+  for (vsize i = 0; i < fingerings.size (); i++)
+    fos.push_back (Fingering_and_offset (fingerings[i], fingerings[i]->relative_coordinate (common_x, X_AXIS)));
+
+  vector_sort (fos, fingering_and_offset_less);
+  Direction dir = get_grob_direction (fingerings[0]);
+  if (dir == RIGHT)
+    reverse (fos);
+
+  Real prev = infinity_f * dir;
+  for (vsize i = 0; i < fos.size (); i++)
+    {
+      if ((fabs (fos[i].offset_ - prev) < snap)
+                && (fabs (fos[i].offset_ - prev) > EPS))
+        fos[i].offset_ = prev;
+
+      prev = fos[i].offset_;
+    }
+
+  for (vsize i = 0; i < fos.size (); i++)
+    fos[i].fingering_->translate_axis (fos[i].offset_ - fos[i].fingering_->relative_coordinate (common_x, X_AXIS), X_AXIS);
+}
+
+void
+Fingering_column::add_fingering (Grob *fc, Grob *f)
+{
+  Pointer_group_interface::add_grob (fc, ly_symbol2scm ("fingerings"), f);
+  f->set_parent (fc, X_AXIS);
+  f->set_property ("Y-offset", Grob::x_parent_positioning_proc);
+}
+
+ADD_INTERFACE (Fingering_column,
+               "Makes sure that fingerings placed laterally"
+               " do not collide and that they are flush if"
+               " necessary.",
+
+               /* properties */
+               "padding "
+               "positioning-done "
+               "snap-radius "
+              );
index a364947b08eb363e02718616aab51a359d07136b..56d7b3257eae269451251c1a8926d62e5069a6eb 100644 (file)
@@ -41,6 +41,7 @@ protected:
   DECLARE_TRANSLATOR_LISTENER (fingering);
   DECLARE_ACKNOWLEDGER (rhythmic_head);
   DECLARE_ACKNOWLEDGER (stem);
+  DECLARE_ACKNOWLEDGER (flag);
 
 private:
   void make_script (Direction, Stream_event *, int);
@@ -60,6 +61,13 @@ Fingering_engraver::acknowledge_stem (Grob_info inf)
     Side_position_interface::add_support (fingerings_[i], inf.grob ());
 }
 
+void
+Fingering_engraver::acknowledge_flag (Grob_info inf)
+{
+  for (vsize i = 0; i < fingerings_.size (); i++)
+    Side_position_interface::add_support (fingerings_[i], inf.grob ());
+}
+
 void
 Fingering_engraver::acknowledge_rhythmic_head (Grob_info inf)
 {
@@ -115,13 +123,10 @@ Fingering_engraver::make_script (Direction d, Stream_event *r, int i)
 
   fingering->set_property ("script-priority", scm_from_int (priority));
 
-  if (!is_direction (fingering->get_property_data ("direction")))
-    {
-      if (d)
-        fingering->set_property ("direction", scm_from_int (d));
-      else
-        fingering->set_property ("direction", scm_from_int (RIGHT));
-    }
+  if (d)
+    fingering->set_property ("direction", scm_from_int (d));
+  else if (!is_direction (fingering->get_property_data ("direction")))
+    fingering->set_property ("direction", scm_from_int (UP));
 
   fingerings_.push_back (fingering);
 }
@@ -139,6 +144,7 @@ Fingering_engraver::Fingering_engraver ()
 
 ADD_ACKNOWLEDGER (Fingering_engraver, rhythmic_head);
 ADD_ACKNOWLEDGER (Fingering_engraver, stem);
+ADD_ACKNOWLEDGER (Fingering_engraver, flag);
 
 ADD_TRANSLATOR (Fingering_engraver,
                 /* doc */
index f997d6fe457f44626cddc7bec2579788b4046a69..f4fcce8e0e96a8db468846208a8ab193ec7952b8 100644 (file)
@@ -33,6 +33,7 @@ class Flag
 {
 public:
   DECLARE_SCHEME_CALLBACK (print, (SCM));
+  DECLARE_SCHEME_CALLBACK (glyph_name, (SCM));
   DECLARE_SCHEME_CALLBACK (width, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM));
   DECLARE_SCHEME_CALLBACK (pure_calc_y_offset, (SCM, SCM, SCM));
@@ -61,9 +62,10 @@ Flag::width (SCM smob)
 
   return ly_interval2scm (sten->extent (X_AXIS) - stem->extent (stem, X_AXIS)[RIGHT]);
 }
-MAKE_SCHEME_CALLBACK (Flag, print, 1);
+
+MAKE_SCHEME_CALLBACK (Flag, glyph_name, 1);
 SCM
-Flag::print (SCM smob)
+Flag::glyph_name (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
   Grob *stem = me->get_parent (X_AXIS);
@@ -76,9 +78,6 @@ Flag::print (SCM smob)
   if (scm_is_symbol (flag_style_scm))
     flag_style = ly_symbol2string (flag_style_scm);
 
-  if (flag_style == "no-flag")
-    return Stencil ().smobbed_copy ();
-
   bool adjust = true;
 
   string staffline_offs;
@@ -106,9 +105,31 @@ Flag::print (SCM smob)
 
   char dir = (d == UP) ? 'u' : 'd';
   string font_char = flag_style
-                     + to_string (dir) + staffline_offs + to_string (log);
+                     + ::to_string (dir) + staffline_offs + ::to_string (log);
+  return ly_string2scm ("flags." + font_char);
+}
+
+MAKE_SCHEME_CALLBACK (Flag, print, 1);
+SCM
+Flag::print (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  Grob *stem = me->get_parent (X_AXIS);
+
+  Direction d = get_grob_direction (stem);
+  string flag_style;
+
+  SCM flag_style_scm = me->get_property ("style");
+  if (scm_is_symbol (flag_style_scm))
+    flag_style = ly_symbol2string (flag_style_scm);
+
+  if (flag_style == "no-flag")
+    return Stencil ().smobbed_copy ();
+
+  char dir = (d == UP) ? 'u' : 'd';
   Font_metric *fm = Font_interface::get_default_font (me);
-  Stencil flag = fm->find_by_name ("flags." + font_char);
+  string font_char = robust_scm2string (me->get_property ("glyph-name"), "");
+  Stencil flag = fm->find_by_name (font_char);
   if (flag.is_empty ())
     me->warning (_f ("flag `%s' not found", font_char));
 
@@ -122,11 +143,11 @@ Flag::print (SCM smob)
       string stroke_style = ly_scm2string (stroke_style_scm);
       if (!stroke_style.empty ())
         {
-          string font_char = flag_style + to_string (dir) + stroke_style;
+          string font_char = flag_style + ::to_string (dir) + stroke_style;
           Stencil stroke = fm->find_by_name ("flags." + font_char);
           if (stroke.is_empty ())
             {
-              font_char = to_string (dir) + stroke_style;
+              font_char = ::to_string (dir) + stroke_style;
               stroke = fm->find_by_name ("flags." + font_char);
             }
           if (stroke.is_empty ())
@@ -165,11 +186,13 @@ Flag::internal_calc_y_offset (SCM smob, bool pure)
   Real blot
     = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
 
-  Real y2 = pure
-            ? stem->pure_height (stem, 0, INT_MAX)[d]
-            : stem->extent (stem, Y_AXIS)[d];
+  Interval stem_extent = pure
+                         ? stem->pure_height (stem, 0, INT_MAX)
+                         : stem->extent (stem, Y_AXIS);
 
-  return scm_from_double (y2 - d * blot / 2);
+  return scm_from_double (stem_extent.is_empty ()
+                          ? 0.0
+                          : stem_extent[d] - d * blot / 2);
 }
 
 MAKE_SCHEME_CALLBACK (Flag, calc_x_offset, 1);
@@ -190,6 +213,7 @@ ADD_INTERFACE (Flag,
                " @code{'no-flag}, which switches off the flag.",
 
                /* properties */
+               "glyph-name "
                "style "
                "stroke-style "
               );
index 6990afe5476f31fd9f04c845165f2c2719fdc624..892319f3b837668bf404d350605e285aa67e13f5 100644 (file)
@@ -84,12 +84,6 @@ Font_metric::get_indexed_char_dimensions (size_t) const
   return Box (Interval (0, 0), Interval (0, 0));
 }
 
-size_t
-Font_metric::name_to_index (string) const
-{
-  return (size_t) - 1;
-}
-
 Offset
 Font_metric::get_indexed_wxwy (size_t) const
 {
@@ -145,7 +139,7 @@ Font_metric::index_to_charcode (size_t i) const
 }
 
 Offset
-Font_metric::attachment_point (string) const
+Font_metric::attachment_point (const string&) const
 {
   return Offset (0, 0);
 }
@@ -158,7 +152,7 @@ Font_metric::sub_fonts () const
 
 Stencil
 Font_metric::text_stencil (Output_def *state,
-                           string, bool) const
+                           const string&, bool) const
 {
   (void) state;
 
index efa7900b00d5f570130f0dd279278c435e0b138a..20ee7c149fba5eb80f000c94f95b3a6e5f2ab565 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -33,45 +33,22 @@ class Footnote_engraver : public Engraver
 {
   TRANSLATOR_DECLARATIONS (Footnote_engraver);
 
-  DECLARE_TRANSLATOR_LISTENER (footnote);
   DECLARE_ACKNOWLEDGER (grob);
   DECLARE_END_ACKNOWLEDGER (grob);
-  vector<Stream_event *> events_;
+
   vector<Drul_array<Spanner *> > annotated_spanners_;
 
-  void stop_translation_timestep ();
   void finalize ();
-  virtual void derived_mark () const;
 
   void footnotify (Grob *, SCM);
 };
 
-IMPLEMENT_TRANSLATOR_LISTENER (Footnote_engraver, footnote);
-void
-Footnote_engraver::listen_footnote (Stream_event *ev)
-{
-  events_.push_back (ev);
-}
-
-void
-Footnote_engraver::stop_translation_timestep ()
-{
-  events_.clear ();
-}
-
 void
 Footnote_engraver::finalize ()
 {
   annotated_spanners_.clear ();
 }
 
-void
-Footnote_engraver::derived_mark () const
-{
-  for (vsize i = 0; i < events_.size (); ++i)
-    scm_gc_mark (events_[i]->self_scm ());
-}
-
 Footnote_engraver::Footnote_engraver ()
 {
 }
@@ -111,28 +88,12 @@ Footnote_engraver::acknowledge_grob (Grob_info info)
           return;
         }
 
-      footnotify (info.grob (), mus->to_event (context ())->unprotect ());
+      footnotify (info.grob (), mus->to_event ()->unprotect ());
 
       // This grob has exhausted its footnote
       info.grob ()->set_property ("footnote-music", SCM_EOL);
-      return;
-    }
 
-  if (!events_.empty ())
-    {
-      string grobname = info.grob ()->name ();
-
-      for (vsize i = 0; i < events_.size (); i++)
-        {
-          SCM name = events_[i]->get_property ("symbol");
-          if (scm_is_symbol (name)
-              && grobname == ly_symbol2string (name))
-            {
-              footnotify (info.grob (), events_[i]->self_scm ());
-              // Event has exhausted its footnote
-              events_[i]->set_property ("symbol", SCM_EOL);
-            }
-        }
+      return;
     }
 }
 
index 00e5cae3519b28cc8f1314334e25cd3ec3884115..88af76c1ae84ad97b870e016a0c8e1ac432ed90f 100644 (file)
@@ -31,7 +31,7 @@ const struct Freetype_error_message
   const char *err_msg;
 } ft_errors[] =
 
-#include <freetype/fterrors.h>
+#include FT_ERRORS_H
 
   ;
 
index f19b1649686225c8bc4f67b5bcf555d5a24096da..55a3fb378095af6a0f7f35f7f3e89d55ad6a550a 100644 (file)
@@ -20,6 +20,9 @@
 #include "freetype.hh"
 #include "warn.hh"
 
+#include FT_OUTLINE_H
+#include FT_BBOX_H
+
 FT_Library freetype2_library;
 
 void
@@ -30,3 +33,172 @@ init_freetype ()
     error ("cannot initialize FreeType");
 }
 
+Box
+ly_FT_get_unscaled_indexed_char_dimensions (FT_Face const &face, size_t signed_idx)
+{
+  FT_UInt idx = FT_UInt (signed_idx);
+  FT_Load_Glyph (face, idx, FT_LOAD_NO_SCALE);
+
+  FT_Glyph_Metrics m = face->glyph->metrics;
+  FT_Pos hb = m.horiBearingX;
+  FT_Pos vb = m.horiBearingY;
+
+  // is this viable for all grobs?
+  return Box (Interval (Real (hb), Real (hb + m.width)),
+              Interval (Real (vb - m.height), Real (vb)));
+}
+
+SCM
+box_to_scheme_lines (Box b)
+{
+  return scm_list_4 (scm_list_4 (scm_from_double (b[X_AXIS][LEFT]),
+                                 scm_from_double (b[Y_AXIS][DOWN]),
+                                 scm_from_double (b[X_AXIS][RIGHT]),
+                                 scm_from_double (b[Y_AXIS][DOWN])),
+                     scm_list_4 (scm_from_double (b[X_AXIS][RIGHT]),
+                                 scm_from_double (b[Y_AXIS][DOWN]),
+                                 scm_from_double (b[X_AXIS][RIGHT]),
+                                 scm_from_double (b[Y_AXIS][UP])),
+                     scm_list_4 (scm_from_double (b[X_AXIS][RIGHT]),
+                                 scm_from_double (b[Y_AXIS][UP]),
+                                 scm_from_double (b[X_AXIS][LEFT]),
+                                 scm_from_double (b[Y_AXIS][UP])),
+                     scm_list_4 (scm_from_double (b[X_AXIS][LEFT]),
+                                 scm_from_double (b[Y_AXIS][UP]),
+                                 scm_from_double (b[X_AXIS][LEFT]),
+                                 scm_from_double (b[Y_AXIS][DOWN])));
+}
+
+Box
+ly_FT_get_glyph_outline_bbox (FT_Face const &face, size_t signed_idx)
+{
+  FT_UInt idx = FT_UInt (signed_idx);
+  FT_Load_Glyph (face, idx, FT_LOAD_NO_SCALE);
+
+  if (!(face->glyph->format == FT_GLYPH_FORMAT_OUTLINE))
+    {
+#if 0
+      // will generate a lot of warnings
+      warning ("Cannot make glyph outline");
+#endif
+      return Box (Interval (infinity_f, -infinity_f), Interval (infinity_f, -infinity_f));
+    }
+  FT_Outline *outline;
+  outline = &(face->glyph->outline);
+
+  FT_BBox bbox;
+  FT_Outline_Get_BBox (outline, &bbox);
+
+  return Box (Interval (bbox.xMin, bbox.xMax), Interval (bbox.yMin, bbox.yMax));
+}
+
+SCM
+ly_FT_get_glyph_outline (FT_Face const &face, size_t signed_idx)
+{
+  FT_UInt idx = FT_UInt (signed_idx);
+  FT_Load_Glyph (face, idx, FT_LOAD_NO_SCALE);
+
+  if (!(face->glyph->format == FT_GLYPH_FORMAT_OUTLINE))
+    {
+#if 0
+      // will generate a lot of warnings
+      warning ("Cannot make glyph outline");
+#endif
+      return box_to_scheme_lines (ly_FT_get_unscaled_indexed_char_dimensions (face, signed_idx));
+    }
+
+  FT_Outline *outline;
+  outline = &(face->glyph->outline);
+  SCM out = SCM_EOL;
+  Offset lastpos;
+  Offset firstpos;
+  int j = 0;
+  while (j < outline->n_points)
+    {
+      if (j == 0)
+        {
+          firstpos = Offset (outline->points[j].x, outline->points[j].y);
+          lastpos = firstpos;
+          j++;
+        }
+      else if (outline->tags[j] & 1)
+        {
+          // it is a line
+          out = scm_cons (scm_list_4 (scm_from_double (lastpos[X_AXIS]),
+                                      scm_from_double (lastpos[Y_AXIS]),
+                                      scm_from_double (outline->points[j].x),
+                                      scm_from_double (outline->points[j].y)),
+                          out);
+          lastpos = Offset (outline->points[j].x, outline->points[j].y);
+          j++;
+        }
+      else if (outline->tags[j] & 2)
+        {
+          // it is a third order bezier
+          out = scm_cons (scm_list_n (scm_from_double (lastpos[X_AXIS]),
+                                      scm_from_double (lastpos[Y_AXIS]),
+                                      scm_from_double (outline->points[j].x),
+                                      scm_from_double (outline->points[j].y),
+                                      scm_from_double (outline->points[j + 1].x),
+                                      scm_from_double (outline->points[j + 1].y),
+                                      scm_from_double (outline->points[j + 2].x),
+                                      scm_from_double (outline->points[j + 2].y),
+                                      SCM_UNDEFINED),
+                          out);
+          lastpos = Offset (outline->points[j + 2].x, outline->points[j + 2].y);
+          j += 3;
+        }
+      else
+        {
+          // it is a second order bezier
+          Real x0 = lastpos[X_AXIS];
+          Real x1 = outline->points[j].x;
+          Real x2 = outline->points[j + 1].x;
+
+          Real y0 = lastpos[Y_AXIS];
+          Real y1 = outline->points[j].y;
+          Real y2 = outline->points[j + 1].y;
+
+          Real qx2 = x0 + x2 - (2 * x1);
+          Real qx1 = (2 * x1) - (2 * x0);
+          Real qx0 = x0;
+
+          Real qy2 = y0 + y2 - (2 * y1);
+          Real qy1 = (2 * y1) - (2 * y0);
+          Real qy0 = y0;
+
+          Real cx0 = qx0;
+          Real cx1 = qx0 + (qx1 / 3);
+          Real cx2 = qx0 + (2 * qx1 / 3) + (qx2 / 3);
+          Real cx3 = qx0 + qx1 + qx2;
+
+          Real cy0 = qy0;
+          Real cy1 = qy0 + (qy1 / 3);
+          Real cy2 = qy0 + (2 * qy1 / 3) + (qy2 / 3);
+          Real cy3 = qy0 + qy1 + qy2;
+
+          out = scm_cons (scm_list_n (scm_from_double (cx0),
+                                      scm_from_double (cy0),
+                                      scm_from_double (cx1),
+                                      scm_from_double (cy1),
+                                      scm_from_double (cx2),
+                                      scm_from_double (cy2),
+                                      scm_from_double (cx3),
+                                      scm_from_double (cy3),
+                                      SCM_UNDEFINED),
+                          out);
+          lastpos = Offset (outline->points[j + 1].x, outline->points[j + 1].y);
+          j += 2;
+        }
+    }
+
+  // just in case, close the figure
+  out = scm_cons (scm_list_4 (scm_from_double (lastpos[X_AXIS]),
+                              scm_from_double (lastpos[Y_AXIS]),
+                              scm_from_double (firstpos[X_AXIS]),
+                              scm_from_double (firstpos[Y_AXIS])),
+                  out);
+
+  out = scm_reverse_x (out, SCM_EOL);
+  return out;
+}
index d53c9132ebb5f92b0a47cc053b1d5c44d04b05ad..453064214434cd3f1e5a9ab06362f49134d8d828 100644 (file)
@@ -53,19 +53,19 @@ protected:
   DECLARE_TRANSLATOR_LISTENER (fingering);
 
 private:
-  SCM last_fret_notes_;
+  SCM last_placements_;
 };
 
 void
 Fretboard_engraver::derived_mark () const
 {
-  scm_gc_mark (last_fret_notes_);
+  scm_gc_mark (last_placements_);
 }
 
 Fretboard_engraver::Fretboard_engraver ()
 {
   fret_board_ = 0;
-  last_fret_notes_ = SCM_EOL;
+  last_placements_ = SCM_BOOL_F;
 }
 
 IMPLEMENT_TRANSLATOR_LISTENER (Fretboard_engraver, note);
@@ -111,11 +111,12 @@ Fretboard_engraver::process_music ()
                 scm_list_2 (tab_strings, fingers),
                 fret_board_->self_scm ());
   SCM changes = get_property ("chordChanges");
-  if (to_boolean (changes) && scm_is_pair (last_fret_notes_)
-      && ly_is_equal (last_fret_notes_, fret_notes))
+  SCM placements = fret_board_->get_property ("dot-placement-list");
+  if (to_boolean (changes)
+      && ly_is_equal (last_placements_, placements))
     fret_board_->set_property ("begin-of-line-visible", SCM_BOOL_T);
 
-  last_fret_notes_ = fret_notes;
+  last_placements_ = placements;
 }
 
 void
index b1384076b1ed2dc8f7a726beaeaa46753ac71dcc..ec2355733387d435b561392f50cf9e0637d515a8 100644 (file)
@@ -27,7 +27,7 @@ using namespace std;
 static SCM doc_hash_table;
 
 void
-ly_check_name (string cxx, string scm_name)
+ly_check_name (const string &cxx, const string &scm_name)
 {
   string mangle = mangle_cxx_identifier (cxx);
   if (mangle != scm_name)
@@ -38,9 +38,9 @@ ly_check_name (string cxx, string scm_name)
 
 void
 ly_add_function_documentation (SCM func,
-                               string fname,
-                               string varlist,
-                               string doc)
+                               const string &fname,
+                               const string &varlist,
+                               const string &doc)
 {
   if (doc == "")
     return;
@@ -70,7 +70,7 @@ map<void *, string> type_names;
 
 void
 ly_add_type_predicate (void *ptr,
-                       string name)
+                       const string &name)
 {
   type_names[ptr] = name;
 }
index 1267793cf3564b3e3198aeffe3b235a7ef3e2528..86ee2b05b963132936020f212fa5ef09a613b5c6 100644 (file)
@@ -90,8 +90,7 @@ LY_DEFINE (ly_interpret_music_expression, "ly:interpret-music-expression",
   LY_ASSERT_TYPE (unsmob_global_context, ctx, 2);
 
   Music *music = unsmob_music (mus);
-  if (!music
-      || !music->get_length ().to_bool ())
+  if (!music)
     {
       warning (_ ("no music found in score"));
       return SCM_BOOL_F;
index 005c54b45e67b97b38e256e1d639eaea638c2e7b..3fa5089e8076ec559395aa159fafb917df32f07b 100644 (file)
@@ -52,13 +52,8 @@ Global_context::Global_context (Output_def *o)
   else
     globaldef->apply_default_property_operations (this);
 
-  SCM p = get_property ("EventClasses");
-
-  ancestor_lookup_ = scm_make_hash_table (scm_length (p));
-  for (; scm_is_pair (p); p = scm_cdr (p))
-    scm_hashq_set_x (ancestor_lookup_, scm_caar (p), scm_car (p));
-
-  accepts_list_ = scm_list_1 (ly_symbol2scm ("Score"));
+  default_child_ = ly_symbol2scm ("Score");
+  accepts_list_ = scm_list_1 (default_child_);
 }
 
 Output_def *
@@ -207,7 +202,7 @@ Global_context::previous_moment () const
 }
 
 Context *
-Global_context::get_default_interpreter (string /* context_id */)
+Global_context::get_default_interpreter (const string &/* context_id */)
 {
   if (get_score_context ())
     return get_score_context ()->get_default_interpreter ();
diff --git a/lily/global-vars.cc b/lily/global-vars.cc
new file mode 100644 (file)
index 0000000..f12e957
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+  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 "file-path.hh"
+#include "main.hh"
+
+/*
+ * Global options that can be overridden through command line.
+ */
+
+/* Names of header fields to be dumped to a separate file. */
+vector<string> dump_header_fieldnames_global;
+
+/* Name of initialisation file. */
+string init_name_global;
+
+/* Output formats to generate.  */
+string output_format_global = "";
+
+/* Current output name. */
+string output_name_global;
+
+/* Run in safe mode? */
+bool be_safe_global = false;
+
+/* Scheme code to execute before parsing, after .scm init.
+   This is where -e arguments are appended to.  */
+string init_scheme_code_global;
+string init_scheme_variables_global;
+
+bool relocate_binary = true;
+
+/*
+ * Miscellaneous global stuff.
+ */
+File_path global_path;
+
+/* Where the init files live.  Typically:
+   LILYPOND_DATADIR = /usr/share/lilypond
+*/
+string lilypond_datadir;
+
+vector<string> start_environment_global;
index 6ab68c8c9bd264b2a90db3719296faa2f4caf7e9..bfc7bfd8833674df2a5716e44c6709d0de60a910 100644 (file)
@@ -93,7 +93,7 @@ void fix_prefix_set (int *current_set, int min_set, int max_set, Grob *primitive
   fix_prefix ("pes_or_flexa", LINEA, current_set, min_set, max_set, primitive);
 }
 
-void check_and_fix_all_prefixes (vector<Grob_info> primitives)
+void check_and_fix_all_prefixes (vector<Grob_info> const &primitives)
 {
   /* Check for invalid head modifier combinations */
   for (vsize i = 0; i < primitives.size (); i++)
@@ -204,7 +204,7 @@ void check_and_fix_all_prefixes (vector<Grob_info> primitives)
  * Marks those heads that participate in a pes or flexa.
  */
 void
-provide_context_info (vector<Grob_info> primitives)
+provide_context_info (vector<Grob_info> const &primitives)
 {
   Grob *prev_primitive = 0;
   int prev_prefix_set = 0;
@@ -253,7 +253,7 @@ provide_context_info (vector<Grob_info> primitives)
 
 void
 Gregorian_ligature_engraver::build_ligature (Spanner *ligature,
-                                             vector<Grob_info> primitives)
+                                             vector<Grob_info> const &primitives)
 {
   // apply style-independent checking and transformation
   check_and_fix_all_prefixes (primitives);
index e6e16e43931d0d6eb6f6280631fc3db8a00a73f9..a0f54ed162f3ec2c75a73195bc4d1b37f1557e1d 100644 (file)
@@ -21,7 +21,7 @@
 
 #include "grob.hh"
 
-void check_prefix (string name, int mask, int prefix_set, string *str)
+void check_prefix (const string &name, int mask, int prefix_set, string *str)
 {
   if (prefix_set & mask)
     {
index 62d071cee17a03d69a5639c05d3ea318276f6682..d0cf11106878b12c73a80d6222cfb7aed955100e 100644 (file)
@@ -98,8 +98,7 @@ Grob_array::remove_duplicates ()
 {
   assert (!ordered_);
 
-  vector_sort (grobs_, less<Grob *> ());
-  ::uniq (grobs_);
+  uniquify (grobs_);
 }
 
 bool
index 4f6c0adc81f5219836e20c2bb92754f347a20eab..4c63fe3c0c55436c4a608e0747582ff026c6ffd7 100644 (file)
@@ -1,5 +1,6 @@
 #include "grob.hh"
 #include "simple-closure.hh"
+#include "unpure-pure-container.hh"
 
 SCM
 axis_offset_symbol (Axis a)
@@ -38,7 +39,7 @@ add_offset_callback (Grob *g, SCM proc, Axis a)
       return;
     }
 
-  if (ly_is_procedure (data))
+  if (ly_is_procedure (data) || is_unpure_pure_container (data))
     data = ly_make_simple_closure (scm_list_1 (data));
   else if (is_simple_closure (data))
     data = simple_closure_expression (data);
@@ -66,7 +67,7 @@ chain_callback (Grob *g, SCM proc, SCM sym)
 {
   SCM data = g->get_property_data (sym);
 
-  if (ly_is_procedure (data))
+  if (ly_is_procedure (data) || is_unpure_pure_container (data))
     data = ly_make_simple_closure (scm_list_1 (data));
   else if (is_simple_closure (data))
     data = simple_closure_expression (data);
index 22c5fe2e7198e644d9001d8144587043671dbcbc..f9773e5ec5a4878b12f66f1535970a5696e6ff8a 100644 (file)
@@ -170,7 +170,7 @@ Grob::internal_get_property (SCM sym) const
     {
       programming_error (to_string ("cyclic dependency: calculation-in-progress encountered for #'%s (%s)",
                                     ly_symbol2string (sym).c_str (),
-                                    name ().c_str ()));
+                                    name ().c_str ()));//assert (1==0);
       if (debug_property_callbacks)
         {
           message ("backtrace: ");
@@ -181,6 +181,7 @@ Grob::internal_get_property (SCM sym) const
 
   if (is_unpure_pure_container (val))
     val = unpure_pure_container_unpure_part (val);
+
   if (ly_is_procedure (val)
       || is_simple_closure (val))
     {
@@ -241,17 +242,12 @@ Grob::try_callback_on_alist (SCM *alist, SCM sym, SCM proc)
     grob_property_callback_stack = scm_cdr (grob_property_callback_stack);
 #endif
 
-  /*
-    If the function returns SCM_UNSPECIFIED, we assume the
-    property has been set with an explicit set_property ()
-    call.
-  */
   if (value == SCM_UNSPECIFIED)
     {
       value = get_property_data (sym);
       assert (value == SCM_EOL || value == marker);
       if (value == marker)
-        *alist = scm_assq_remove_x (*alist, marker);
+        *alist = scm_assq_remove_x (*alist, sym);
     }
   else
     {
@@ -326,9 +322,35 @@ Grob::internal_has_interface (SCM k)
 SCM
 call_pure_function (SCM unpure, SCM args, int start, int end)
 {
-  SCM scm_call_pure_function = ly_lily_module_constant ("call-pure-function");
+  if (is_unpure_pure_container (unpure))
+    {
+      SCM pure = unpure_pure_container_pure_part (unpure);
+
+      if (is_simple_closure (pure))
+        {
+          SCM expr = simple_closure_expression (pure);
+          return evaluate_with_simple_closure (scm_car (args), expr, true, start, end);
+        }
+
+      if (ly_is_procedure (pure))
+        return scm_apply_0 (pure,
+                            scm_append (scm_list_2 (scm_list_3 (scm_car (args),
+                                                                scm_from_int (start),
+                                                                scm_from_int (end)),
+                                                    scm_cdr (args))));
+
+      return pure;
+    }
+
+  if (is_simple_closure (unpure))
+    {
+      SCM expr = simple_closure_expression (unpure);
+      return evaluate_with_simple_closure (scm_car (args), expr, true, start, end);
+    }
+
+  if (!ly_is_procedure (unpure))
+    return unpure;
 
-  return scm_apply_0 (scm_call_pure_function,
-                      scm_list_4 (unpure, args, scm_from_int (start), scm_from_int (end)));
+  return SCM_BOOL_F;
 }
 
index 81ff7864ff36b4b4ff972bb0fc3051d8700f60e5..9ae9c14fcbd3698a57adff41dfecf6edb80d5529 100644 (file)
@@ -25,6 +25,7 @@
 #include "paper-score.hh"
 #include "simple-closure.hh"
 #include "system.hh"
+#include "unpure-pure-container.hh"
 #include "warn.hh"              // error ()
 
 LY_DEFINE (ly_grob_property_data, "ly:grob-property-data",
@@ -66,7 +67,7 @@ LY_DEFINE (ly_grob_set_nested_property_x, "ly:grob-set-nested-property!",
 
   LY_ASSERT_SMOB (Grob, grob, 1);
 
-  bool type_ok = ly_cheap_is_list (symlist);
+  bool type_ok = scm_is_pair (symlist);
 
   if (type_ok)
     for (SCM s = symlist; scm_is_pair (s) && type_ok; s = scm_cdr (s))
@@ -74,7 +75,10 @@ LY_DEFINE (ly_grob_set_nested_property_x, "ly:grob-set-nested-property!",
 
   SCM_ASSERT_TYPE (type_ok, symlist, SCM_ARG2, __FUNCTION__, "list of symbols");
 
-  set_nested_property (sc, symlist, val);
+  if (scm_is_pair (scm_cdr (symlist)))
+    set_nested_property (sc, symlist, val);
+  else
+    ly_grob_set_property_x (grob, scm_car (symlist), val);
   return SCM_UNSPECIFIED;
 }
 
@@ -447,7 +451,7 @@ LY_DEFINE (ly_grob_chain_callback, "ly:grob-chain-callback",
   Grob *gr = unsmob_grob (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
-  LY_ASSERT_TYPE (ly_is_procedure, proc, 2);
+  SCM_ASSERT_TYPE (ly_is_procedure (proc) || is_unpure_pure_container (proc), proc, SCM_ARG2, __FUNCTION__, "procedure or unpure pure container");
   LY_ASSERT_TYPE (ly_is_symbol, sym, 3);
 
   chain_callback (gr, proc, sym);
@@ -466,3 +470,15 @@ LY_DEFINE (ly_grob_vertical_less_p, "ly:grob-vertical<?",
 
   return ly_bool2scm (Grob::vertical_less (ga, gb));
 }
+
+LY_DEFINE (ly_grob_get_vertical_axis_group_index, "ly:grob-get-vertical-axis-group-index",
+           1, 0, 0, (SCM grob),
+           "Get the index of the vertical axis group the grob @var{grob} belongs to;"
+           " return @code{-1} if none is found.")
+{
+  Grob *gr = unsmob_grob (grob);
+
+  LY_ASSERT_SMOB (Grob, grob, 1);
+
+  return scm_from_int (Grob::get_vertical_axis_group_index (gr));
+}
index 828ae7f07b40687457f8031475f0a42d9992dc67..dee7bdaa3cfd5d4506f51b8c11250bbcc1fe95a9 100644 (file)
@@ -20,6 +20,7 @@
 #include "grob.hh"
 
 #include <cstring>
+#include <set>
 
 #include "align-interface.hh"
 #include "axis-group-interface.hh"
@@ -35,6 +36,7 @@
 #include "stencil.hh"
 #include "stream-event.hh"
 #include "system.hh"
+#include "unpure-pure-container.hh"
 #include "warn.hh"
 
 #include "ly-smobs.icc"
@@ -78,17 +80,30 @@ Grob::Grob (SCM basicprops)
   if (get_property_data ("X-extent") == SCM_EOL)
     set_property ("X-extent", Grob::stencil_width_proc);
   if (get_property_data ("Y-extent") == SCM_EOL)
-    set_property ("Y-extent", Grob::stencil_height_proc);
+    set_property ("Y-extent",
+                  ly_make_unpure_pure_container (Grob::stencil_height_proc,
+                                                 Grob::pure_stencil_height_proc));
+  if (get_property_data ("vertical-skylines") == SCM_EOL)
+    set_property ("vertical-skylines",
+                  ly_make_unpure_pure_container (Grob::simple_vertical_skylines_from_extents_proc,
+                                                 Grob::pure_simple_vertical_skylines_from_extents_proc));
+  if (get_property_data ("horizontal-skylines") == SCM_EOL)
+    set_property ("horizontal-skylines",
+                  ly_make_unpure_pure_container (Grob::simple_horizontal_skylines_from_extents_proc,
+                                                 Grob::pure_simple_horizontal_skylines_from_extents_proc));
 }
 
 Grob::Grob (Grob const &s)
-  : dim_cache_ (s.dim_cache_)
 {
   original_ = (Grob *) & s;
   self_scm_ = SCM_EOL;
 
   immutable_property_alist_ = s.immutable_property_alist_;
   mutable_property_alist_ = SCM_EOL;
+
+  for (Axis a = X_AXIS; a < NO_AXES; incr (a))
+      dim_cache_ [a] = s.dim_cache_ [a];
+
   interfaces_ = s.interfaces_;
   object_alist_ = SCM_EOL;
 
@@ -467,9 +482,11 @@ Grob::extent (Grob *refp, Axis a) const
     }
 
   // We never want nan, so we avoid shifting infinite values.
-  for (LEFT_and_RIGHT (d))
-    if (!isinf (real_ext[d]))
-      real_ext[d] += offset;
+    if(!isinf (offset))
+      real_ext.translate(offset);
+    else
+      this->warning(_f ("ignored infinite %s-offset",
+                        a == X_AXIS ? "X" : "Y"));
 
   return real_ext;
 }
@@ -478,7 +495,7 @@ Interval
 Grob::pure_height (Grob *refp, int start, int end)
 {
   SCM iv_scm = get_pure_property ("Y-extent", start, end);
-  Interval iv = robust_scm2interval (iv_scm, Interval (0, 0));
+  Interval iv = robust_scm2interval (iv_scm, Interval ());
   Real offset = pure_relative_y_coordinate (refp, start, end);
 
   SCM min_ext = get_property ("minimum-Y-extent");
@@ -707,7 +724,7 @@ Grob::internal_vertical_less (Grob *g1, Grob *g2, bool pure)
   MESSAGES
 ****************************************************************/
 void
-Grob::programming_error (string s) const
+Grob::programming_error (const string &s) const
 {
   SCM cause = self_scm ();
   while (Grob *g = unsmob_grob (cause))
@@ -723,7 +740,7 @@ Grob::programming_error (string s) const
 }
 
 void
-Grob::warning (string s) const
+Grob::warning (const string &s) const
 {
   SCM cause = self_scm ();
   while (Grob *g = unsmob_grob (cause))
@@ -799,11 +816,10 @@ ADD_INTERFACE (Grob,
                "color "
                "cross-staff "
                "id "
-               "extra-X-extent "
-               "extra-Y-extent "
                "extra-offset "
                "footnote-music "
                "forced-spacing "
+               "horizontal-skylines "
                "interfaces "
                "layer "
                "meta "
@@ -814,10 +830,12 @@ ADD_INTERFACE (Grob,
                "outside-staff-priority "
                "pure-Y-offset-in-progress "
                "rotation "
+               "skyline-horizontal-padding "
                "springs-and-rods "
                "staff-symbol "
                "stencil "
                "transparent "
+               "vertical-skylines "
                "whiteout "
               );
 
@@ -843,6 +861,18 @@ Grob::stencil_height (SCM smob)
   return grob_stencil_extent (me, Y_AXIS);
 }
 
+MAKE_SCHEME_CALLBACK (Grob, pure_stencil_height, 3);
+SCM
+Grob::pure_stencil_height (SCM smob, SCM /* beg */, SCM /* end */)
+{
+  Grob *me = unsmob_grob (smob);
+  if (unsmob_stencil (me->get_property_data ("stencil")))
+    return grob_stencil_extent (me, Y_AXIS);
+
+  return ly_interval2scm (Interval ());
+
+}
+
 MAKE_SCHEME_CALLBACK (Grob, y_parent_positioning, 1);
 SCM
 Grob::y_parent_positioning (SCM smob)
@@ -903,6 +933,20 @@ common_refpoint_of_array (vector<Grob *> const &arr, Grob *common, Axis a)
   return common;
 }
 
+Grob *
+common_refpoint_of_array (set<Grob *> const &arr, Grob *common, Axis a)
+{
+  set<Grob *>::iterator it;
+
+  for (it = arr.begin (); it != arr.end (); it++)
+    if (common)
+      common = common->common_refpoint (*it, a);
+    else
+      common = *it;
+
+  return common;
+}
+
 Interval
 robust_relative_extent (Grob *me, Grob *refpoint, Axis a)
 {
@@ -928,3 +972,50 @@ Grob::check_cross_staff (Grob *commony)
   return false;
 }
 
+static
+bool
+indirect_less (Grob **a, Grob **b)
+{
+  // Use original order as tie breaker.  That gives us a stable sort
+  // at the lower price tag of an unstable one, and we want a stable
+  // sort in order to reliably retain the first instance of a grob
+  // pointer.
+  return *a < *b || (*a == *b && a < b);
+}
+
+static
+bool
+indirect_eq (Grob **a, Grob **b)
+{
+  return *a == *b;
+}
+
+static
+bool
+direct_less (Grob **a, Grob **b)
+{
+  return a < b;
+}
+
+// uniquify uniquifies on the memory addresses of the Grobs, but then
+// uses the original order.  This makes results independent from the
+// memory allocation of Grobs.
+
+void
+uniquify (vector <Grob *> & grobs)
+{
+  vector <Grob **> vec (grobs.size ());
+  for (vsize i = 0; i < grobs.size (); i++)
+    vec[i] = &grobs[i];
+  vector_sort (vec, indirect_less);
+  vec.erase (unique (vec.begin (), vec.end (), indirect_eq), vec.end ());
+  vector_sort (vec, direct_less);
+
+  // Since the output is a sorted copy of the input with some elements
+  // removed, we can fill in the vector in-place if we do it starting
+  // from the front.
+  for (vsize i = 0; i < vec.size (); i++)
+    grobs[i] = *vec[i];
+  grobs.erase (grobs.begin () + vec.size (), grobs.end ());
+  return;
+}
index cacfb0f51c148968f015fec995ef17d742ba24b3..40e165dd6d0ffe35c9cfff0051e19133129037ed 100644 (file)
@@ -127,14 +127,16 @@ Hairpin::print (SCM smob)
       broken[d] = bounds[d]->break_status_dir () != CENTER;
     }
 
-  broken[RIGHT] = broken[RIGHT] && me->broken_neighbor (RIGHT);
-  broken[RIGHT] = broken[RIGHT] && me->broken_neighbor (RIGHT)->is_live ();
-
   if (broken[RIGHT])
     {
       Spanner *next = me->broken_neighbor (RIGHT);
-      Stencil *s = next->get_stencil ();
-      if (!s || s->is_empty ())
+      // Hairpin-parts suicide in after-line-breaking if they need not be drawn
+      if (next)
+        {
+          (void) next->get_property ("after-line-breaking");
+          broken[RIGHT] = next->is_live ();
+        }
+      else
         broken[RIGHT] = false;
     }
 
diff --git a/lily/hara-kiri-engraver.cc b/lily/hara-kiri-engraver.cc
deleted file mode 100644 (file)
index 243d9cb..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-  This file is part of LilyPond, the GNU music typesetter.
-
-  Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-  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 "axis-group-engraver.hh"
-#include "hara-kiri-group-spanner.hh"
-#include "rhythmic-head.hh"
-#include "spanner.hh"
-
-#include "translator.icc"
-
-/*
-  TODO: fold together with axis_group_engraver?
- */
-
-class Hara_kiri_engraver : public Axis_group_engraver
-{
-protected:
-  virtual Spanner *get_spanner ();
-  DECLARE_ACKNOWLEDGER (grob);
-  virtual void add_element (Grob *e);
-  void process_music ();
-  virtual void derived_mark () const;
-  SCM interesting_;
-public:
-  TRANSLATOR_DECLARATIONS (Hara_kiri_engraver);
-};
-
-Hara_kiri_engraver::Hara_kiri_engraver ()
-{
-  interesting_ = SCM_EOL;
-}
-
-void
-Hara_kiri_engraver::derived_mark () const
-{
-  scm_gc_mark (interesting_);
-}
-
-void
-Hara_kiri_engraver::process_music ()
-{
-  Axis_group_engraver::process_music ();
-  interesting_ = get_property ("keepAliveInterfaces");
-}
-
-void
-Hara_kiri_engraver::add_element (Grob *e)
-{
-  Axis_group_engraver::add_element (e);
-}
-
-Spanner *
-Hara_kiri_engraver::get_spanner ()
-{
-  Spanner *sp = make_spanner ("VerticalAxisGroup", SCM_EOL);
-  return sp;
-}
-
-void
-Hara_kiri_engraver::acknowledge_grob (Grob_info i)
-{
-  Axis_group_engraver::acknowledge_grob (i);
-  if (staffline_)
-    {
-      for (SCM s = interesting_; scm_is_pair (s); s = scm_cdr (s))
-        {
-          if (i.grob ()->internal_has_interface (scm_car (s)))
-            Hara_kiri_group_spanner::add_interesting_item (staffline_, i.grob ());
-        }
-    }
-}
-
-ADD_ACKNOWLEDGER (Hara_kiri_engraver, grob);
-ADD_TRANSLATOR (Hara_kiri_engraver,
-                /* doc */
-                "Like @code{Axis_group_engraver}, but make a hara-kiri"
-                " spanner, and add interesting items (i.e., note heads, lyric"
-                " syllables, and normal rests).",
-
-                /* create */
-                "VerticalAxisGroup ",
-
-                /* read */
-                "keepAliveInterfaces ",
-
-                /* write */
-                ""
-               );
-
index cb5aacecc551faf1055579bc47f5d5b50d146684..610ab950f4da2b00b6599fa32f83f3b10acd7f6a 100644 (file)
@@ -134,8 +134,12 @@ void
 Hara_kiri_group_spanner::consider_suicide (Grob *me)
 {
   Spanner *sp = dynamic_cast<Spanner *> (me);
-  int left = sp->get_bound (LEFT)->get_column ()->get_rank ();
-  int right = sp->get_bound (RIGHT)->get_column ()->get_rank ();
+  int left = 0;
+  int right = INT_MAX;
+  if (Item *l = sp->get_bound (LEFT))
+    left = l->get_column ()->get_rank ();
+  if (Item *r = sp->get_bound (RIGHT))
+    right = r->get_column ()->get_rank ();
   if (!request_suicide (me, left, right))
     return;
 
index 806eb1512f198254a50fe9e1c83d11c54b3b88ce..8c00965744f3c327a5576241fe32a274cb2a08d5 100644 (file)
@@ -59,7 +59,7 @@ Includable_lexer::Includable_lexer ()
 
 /** Set the new input file to NAME, remember old file.  */
 void
-Includable_lexer::new_input (string name, Sources *sources)
+Includable_lexer::new_input (const string &name, Sources *sources)
 {
   string current_dir = dir_name (main_input_name_);
   if (relative_includes)
@@ -94,7 +94,7 @@ Includable_lexer::new_input (string name, Sources *sources)
 }
 
 void
-Includable_lexer::new_input (string name, string data, Sources *sources)
+Includable_lexer::new_input (const string &name, string data, Sources *sources)
 {
   Source_file *file = new Source_file (name, data);
   sources->add (file);
diff --git a/lily/include/GNUmakefile b/lily/include/GNUmakefile
deleted file mode 100644 (file)
index ae2bfb6..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# lily/include/Makefile
-
-depth = ../..
-STEPMAKE_TEMPLATES=c++
-
-include $(depth)/make/stepmake.make
-
-
index bf4bfb7a58b51adef7e586ad95810c2fceee9d3a..f58563cbbbd1b4b80986abd678f96933979b1e0f 100644 (file)
@@ -32,11 +32,10 @@ public:
   DECLARE_SCHEME_CALLBACK (print, (SCM));
   DECLARE_SCHEME_CALLBACK (height, (SCM));
   DECLARE_SCHEME_CALLBACK (width, (SCM));
+  DECLARE_SCHEME_CALLBACK (horizontal_skylines, (SCM));
   DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
 
   DECLARE_GROB_INTERFACE ();
-  static string get_fontcharname (string style, int alteration);
-  static vector<Box> accurate_boxes (Grob *me, Grob **common);
   static SCM get_stencil (Grob *me);
 };
 
index fa0902e1ae21be8b35bf80239488fe613af52774..08ba1e163f37053b1c1f0b9b99381d999e6aea11 100644 (file)
@@ -27,7 +27,7 @@ class Accidental_placement
 {
 public:
   DECLARE_SCHEME_CALLBACK (alignment_callback, (SCM element));
-  static void add_accidental (Grob *, Grob *);
+  static void add_accidental (Grob *, Grob *, bool, long);
 
   static vector<Grob *> get_relevant_accidentals (vector<Grob *> const &elts, Grob *left);
   static void split_accidentals (Grob *accs,
index 3bb5b583778f02b0cf8bfc6a123d8ea013116fb6..7f2ca8326ab669b6a4afe7c71a83ddf68202ea62 100644 (file)
@@ -49,18 +49,18 @@ class All_font_metrics
   All_font_metrics (All_font_metrics const &);
 public:
 
-  Index_to_charcode_map const *get_index_to_charcode_map (string filename,
+  Index_to_charcode_map const *get_index_to_charcode_map (const string &filename,
                                                           int face_index,
                                                           FT_Face face);
 
-  All_font_metrics (string search_path);
+  All_font_metrics (const string &search_path);
   ~All_font_metrics ();
 
   Pango_font *find_pango_font (PangoFontDescription const *description,
                                Real scale);
 
-  Font_metric *find_font (string name);
-  Open_type_font *find_otf (string name);
+  Font_metric *find_font (const string &name);
+  Open_type_font *find_otf (const string &name);
   SCM font_descriptions () const;
 };
 
index a03beaa7a815e1f776744f827829a55675b8d270..1347219812cef80a9cf5bdb7235d6e28909eec67 100644 (file)
@@ -29,6 +29,7 @@ public:
   static Grob *get_common_y (Grob *);
   DECLARE_SCHEME_CALLBACK (print, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_positions, (SCM));
+  DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM));
   DECLARE_SCHEME_CALLBACK (brew_chord_bracket, (SCM));
   DECLARE_SCHEME_CALLBACK (brew_chord_slur, (SCM));
   DECLARE_SCHEME_CALLBACK (width, (SCM));
index 45dcc7b7991f6b486fbd1f8c284cafa0f56bbf61..43ed2e05a91e6fd8ccb80b8ff351354be927fb02 100644 (file)
@@ -86,6 +86,8 @@ public:
 
   // with tieWaitForNote, there might be a skip between the tied notes!
   void tie_to (Audio_note *, Moment skip = 0);
+  Audio_note *tie_head ();
+  virtual string to_string () const;
 
   Pitch pitch_;
   Moment length_mom_;
@@ -112,7 +114,7 @@ public:
     MARKER, CUE_POINT
   };
 
-  Audio_text (Audio_text::Type type, string text_string);
+  Audio_text (Audio_text::Type type, const string &text_string);
 
   Type type_;
   string text_string_;
@@ -135,6 +137,38 @@ public:
   int one_beat_;
 };
 
+class Audio_control_function_value_change : public Audio_item
+{
+public:
+  // Supported control functions.
+  enum Control
+  {
+    BALANCE = 0, PAN_POSITION, REVERB_LEVEL, CHORUS_LEVEL,
+    // pseudo value for representing the size of the enum; must be kept last
+    NUM_CONTROLS
+  };
+
+  Audio_control_function_value_change (Control control, Real value);
+
+  // Information about a context property corresponding to a control function
+  // (name, the corresponding enumeration value, and the allowed range for the
+  // value of the context property).
+  struct Context_property
+  {
+    const char *name_;
+    Control control_;
+    Real range_min_;
+    Real range_max_;
+  };
+
+  // Mapping from supported control functions to the corresponding context
+  // properties.
+  static const Context_property context_properties_[];
+
+  Control control_;
+  Real value_;
+};
+
 int moment_to_ticks (Moment);
 Real moment_to_real (Moment);
 Moment remap_grace_duration (Moment);
diff --git a/lily/include/axis-group-engraver.hh b/lily/include/axis-group-engraver.hh
deleted file mode 100644 (file)
index 9f87aa3..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-  This file is part of LilyPond, the GNU music typesetter.
-
-  Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-  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/>.
-*/
-
-#ifndef AXIS_GROUP_ENGRAVER_HH
-#define AXIS_GROUP_ENGRAVER_HH
-
-#include "engraver.hh"
-
-/**
-   Put stuff in a Spanner with an Axis_group_interface.
-   Use as last element of a context.
-*/
-class Axis_group_engraver : public Engraver
-{
-protected:
-  Spanner *staffline_;
-  vector<Grob *> elts_;
-  void process_music ();
-  virtual void finalize ();
-  DECLARE_ACKNOWLEDGER (grob);
-  void process_acknowledged ();
-  virtual Spanner *get_spanner ();
-  virtual void add_element (Grob *);
-  virtual bool must_be_last () const;
-
-public:
-  TRANSLATOR_DECLARATIONS (Axis_group_engraver);
-};
-#endif /* AXIS_GROUP_ENGRAVER_HH */
index 19bdc1e2ee9b85018f5d3bf93cb5647429fdb66d..5995c70e658f0b5ee29e312828c1f23a3f1eec7f 100644 (file)
 #include "grob-interface.hh"
 #include "skyline.hh"
 
-struct Axis_group_interface
+class Axis_group_interface
 {
+  static Real default_outside_staff_padding_;
+  public
+:
   static SCM generic_group_extent (Grob *me, Axis a);
+  static Real get_default_outside_staff_padding ();
   static Interval generic_bound_extent (Grob *me, Grob *common, Axis a);
   static Interval pure_group_height (Grob *me, int start, int end);
   DECLARE_SCHEME_CALLBACK (width, (SCM smob));
@@ -45,7 +49,7 @@ struct Axis_group_interface
   DECLARE_SCHEME_CALLBACK (calc_pure_relevant_items, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_pure_relevant_spanners, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_pure_y_common, (SCM));
-  static SCM internal_calc_pure_relevant_grobs (Grob *, string);
+  static SCM internal_calc_pure_relevant_grobs (Grob *, const string&);
   static Interval relative_group_extent (vector<Grob *> const &list,
                                          Grob *common, Axis);
   static Interval relative_maybe_bound_group_extent (vector<Grob *> const &list,
@@ -57,8 +61,8 @@ struct Axis_group_interface
   static Interval rest_of_line_pure_height (Grob *me, int, int);
   static Interval part_of_line_pure_height (Grob *me, bool begin, int, int);
 
-  static bool has_outside_staff_parent (Grob *me);
-  static Skyline_pair skyline_spacing (Grob *me, vector<Grob *> elements);
+  static Grob *outside_staff_ancestor (Grob *me);
+  static Skyline_pair skyline_spacing (Grob *me);
   static void add_element (Grob *me, Grob *);
   static void set_axes (Grob *, Axis, Axis);
   static bool has_axis (Grob *, Axis);
index 6e2302d19a8811960ccb9c30c0a7b7d8ebd7724e..7e77d6794d9bea907c8afa293da73a0eab27a5b2 100644 (file)
@@ -190,7 +190,7 @@ private:
   void score_slope_direction (Beam_configuration *config) const;
   void score_slope_musical (Beam_configuration *config) const;
   void score_stem_lengths (Beam_configuration *config) const;
-  void generate_quants (vector<Beam_configuration *>scores) const;
+  void generate_quants (vector<Beam_configuration *> *scores) const;
   void score_collisions (Beam_configuration *config) const;
 };
 
index 1e88dbb76499080680f30459562c4912c9086155..d09c0ac8bee4a7870d319ab1b64a240278bbcfbf 100644 (file)
@@ -48,6 +48,7 @@ public:
 
   Polynomial polynomial (Axis)const;
   Offset curve_point (Real t) const;
+  Real slope_at_point (Real t) const;
   Real curve_coordinate (Real t, Axis) const;
 
   static const int CONTROL_COUNT = 4;
index af5695b3bce8f64978a623c4d16b56dea054b7a4..b0f899431188bf4d653ac448afbb6e074efdd6fa 100644 (file)
@@ -20,6 +20,9 @@ public:
   Interval y () const {return interval_a_[Y_AXIS]; }
   Interval operator [] (Axis a) const;
   Interval &operator [] (Axis a);
+  Real area () const;
+  bool is_empty () const;
+  bool is_empty (Axis a) const;
 
   Offset center () const;
 
@@ -31,9 +34,12 @@ public:
   void widen (Real x, Real y);
   void scale (Real r);
   void unite (Box b);
+  void intersect (Box b);
   void print ();
   Box ();
   Box (Interval ix, Interval iy);
 };
 
+DECLARE_UNSMOB (Box, box);
+
 #endif
index 482f53d970d34164f493a55cf102c45005f211e5..2c9cb33125a7de97454a9b9500c5c4aebb6daa46 100644 (file)
@@ -31,7 +31,7 @@ public:
   DECLARE_CLASSNAME (Change_iterator);
 
 private:
-  void error (string);
+  void error (const string&);
 };
 
 #endif
index cc3ed8d6951fa115b0fab960fab9583725fb81e3..bf422c40d1b4d1e108bc6d692f84e03a264d7693 100644 (file)
@@ -29,12 +29,12 @@ public:
 
 protected:
   virtual void build_ligature (Spanner *ligature,
-                               vector<Grob_info> primitives) = 0;
+                               vector<Grob_info> const &primitives) = 0;
   virtual void typeset_ligature (Spanner *ligature,
-                                 vector<Grob_info> primitives);
+                                 vector<Grob_info> const &primitives);
   virtual void move_related_items_to_column (Item *, Paper_column *, Real);
 private:
-  void collect_accidentals (Spanner *, vector<Grob_info>);
+  void collect_accidentals (Spanner *, vector<Grob_info> const &);
 };
 
 #endif // COHERENT_LIGATURE_ENGRAVER_HH
index 731e20c1e3dca00feab28d8e4ce9ed3af1ffc0fe..cb4c4f70be28a7ac56e72e8e98291b6bf7d62b14 100644 (file)
@@ -203,6 +203,6 @@ private:
   Real combine_demerits (Real force, Real prev_force);
 
   bool calc_subproblem (vsize start, vsize systems, vsize max_break_index);
-  void fill_line_details (Line_details *const, vsize, vsize);
+  void fill_line_details (Line_details *, vsize, vsize);
 };
 #endif /* CONSTRAINED_BREAKING_HH */
index 2fddd980b7918ab0006011e9643a8c2a212782e4..2776c8110502b678f061f4f2a597e77dae5bb2c9 100644 (file)
@@ -28,7 +28,7 @@
 #include <set>
 
 /*
-  The definition of a interpretation context as given in the
+  The definition of an interpretation context as given in the
   input. The lists are stored in order of definition.
 */
 struct Context_def
index 297ec4bb39822beec2d2020c804ac5e1bb4f93b9..d384d73a0481d2563700014974912d3817db0e37 100644 (file)
@@ -42,8 +42,6 @@ public:
   void add_context_mod (SCM);
   void add_context_mods (SCM);
 
-  VIRTUAL_COPY_CONSTRUCTOR (Context_mod, Context_mod);
-
   SCM get_mods () const;
 
   Context_mod ();
index 5543235c25d4b668d2140300697bcb2914a68799..c779074007cbfe3061051419be0471f2e01b25a2 100644 (file)
@@ -55,6 +55,7 @@ protected:
   SCM properties_scm_;
   SCM context_list_;
   SCM accepts_list_;
+  SCM default_child_;
   SCM aliases_;
   Translator_group *implementation_;
   string id_string_;
@@ -101,7 +102,7 @@ public:
   void instrumented_set_property (SCM, SCM, const char *, int, const char *);
   void internal_set_property (SCM var_sym, SCM value);
 
-  Context *create_context (Context_def *, string, SCM);
+  Context *create_context (Context_def *, const string&, SCM);
   DECLARE_LISTENER (create_context_from_event);
   DECLARE_LISTENER (acknowledge_infant);
   DECLARE_LISTENER (remove_context);
@@ -115,14 +116,7 @@ public:
   virtual Context *get_score_context () const;
   virtual Output_def *get_output_def () const;
   virtual Moment now_mom () const;
-  virtual Context *get_default_interpreter (string context_id = "");
-
-  // It would make some sense to have the following just available in
-  // a global context.  It would be decidedly tricky, however, to have
-  // it initialized before the constructor of its Context base class
-  // was able to trigger garbage collection.
-  SCM ancestor_lookup_;
-  SCM make_event_class (SCM);
+  virtual Context *get_default_interpreter (const string &context_id = "");
 
   bool is_alias (SCM) const;
   void add_alias (SCM);
@@ -131,8 +125,8 @@ public:
   bool is_removable () const;
 
   Context *find_create_context (SCM context_name,
-                                string id, SCM ops);
-  Context *create_unique_context (SCM context_name, string context_id,
+                                const string &id, SCM ops);
+  Context *create_unique_context (SCM context_name, const string &context_id,
                                   SCM ops);
   vector<Context_def *> path_to_acceptable_context (SCM alias) const;
 };
@@ -150,7 +144,7 @@ void sloppy_general_pushpop_property (Context *context,
                                       SCM context_property, SCM grob_property_path, SCM val);
 SCM updated_grob_properties (Context *tg, SCM sym);
 Context *find_context_below (Context *where,
-                             SCM type_sym, string id);
+                             SCM type_sym, const string &id);
 bool melisma_busy (Context *);
 
 Context *get_voice_to_lyrics (Context *lyrics);
index 581bcff8a99cc5109aa14171b01a34f7f7dabdd3..6210be1285130f886adab00c3a035d597a92b9e7 100644 (file)
@@ -36,6 +36,7 @@ class Dimension_cache
   friend class Grob;
 
   Dimension_cache (Dimension_cache const &);
+  Dimension_cache & operator = (Dimension_cache const &d);
   ~Dimension_cache ();
   Dimension_cache ();
 };
index aaecc3d923cd7b73469fa536d16f59dc753875cd..04168f420916b1d36063f1f2dd2a6ac27880a48f 100644 (file)
@@ -23,7 +23,7 @@
 #include "simple-music-iterator.hh"
 
 /**
-   Walk through a Event_chord
+   Walk through an Event_chord
 */
 class Event_chord_iterator : public Simple_music_iterator
 {
index 3e25d7e5cfc95ab5d0dc1d8c5eb813dff47b6283..5999f7558223b4006724be9328cbb575569f5cd2 100644 (file)
@@ -22,7 +22,7 @@
 
 #include "std-string.hh"
 
-string map_file_name (string s);
+string map_file_name (const string &s);
 
 #endif /* FILE_NAME_MAP_HH */
 
diff --git a/lily/include/fingering-column.hh b/lily/include/fingering-column.hh
new file mode 100644 (file)
index 0000000..5052322
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 1999--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+  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/>.
+*/
+
+#ifndef FINGERING_COLUMN_HH
+#define FINGERING_COLUMN_HH
+
+#include "lily-proto.hh"
+#include "grob-interface.hh"
+#include "std-vector.hh"
+
+struct Fingering_column
+{
+  static void add_fingering (Grob *, Grob *);
+  DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
+  DECLARE_GROB_INTERFACE ();
+  static void do_x_positioning (Grob *me);
+  static void do_y_positioning (Grob *me);
+};
+
+#endif /* FINGERING_COLUMN_HH */
index 4743e42b609ed794c255697c29a303d2f75599af..4c11989729ffc50a78323ef77ed209d8b5e6d703 100644 (file)
@@ -41,14 +41,14 @@ public:
   // Return stencil for given string. output_state may be modified to
   // record the font.
   virtual Stencil text_stencil (Output_def *output_state,
-                                string text, bool music) const;
+                                const string &text, bool music) const;
 
   virtual string font_name () const;
   virtual size_t count () const;
-  virtual Offset attachment_point (string) const;
+  virtual Offset attachment_point (const string&) const;
   virtual Offset get_indexed_wxwy (size_t) const;
   virtual Box get_indexed_char_dimensions (size_t index) const;
-  virtual size_t name_to_index (string) const;
+  virtual size_t name_to_index (string) const=0;
   virtual size_t index_to_charcode (size_t) const;
   virtual Real design_size () const;
   virtual Stencil find_by_name (string) const;
@@ -66,8 +66,6 @@ protected:
   Font_metric ();
 };
 
-int get_encoded_index (Font_metric *m, string input_coding, int code);
-
 DECLARE_UNSMOB (Font_metric, metrics);
 
 char *pfb2pfa (Byte const *pfb, int length);
index 3ddc07e67fceb620856e6ad085758a148f9761c6..89104bc8880a19b7ad32fb9ba8b166ece8fe85b5 100644 (file)
 #ifndef FREETYPE_HH
 #define FREETYPE_HH
 
+// This include file loads the header file macros for FreeType.
 #include <ft2build.h>
 #include FT_FREETYPE_H
 
 #include "std-string.hh"
+#include "box.hh"
 
 void init_freetype ();
 extern FT_Library freetype2_library;
 
 string freetype_error_string (FT_Error code);
 
+SCM box_to_scheme_lines (Box b);
+Box ly_FT_get_unscaled_indexed_char_dimensions (FT_Face const &face, size_t signed_idx);
+Box ly_FT_get_glyph_outline_bbox (FT_Face const &face, size_t signed_idx);
+SCM ly_FT_get_glyph_outline (FT_Face const &face, size_t signed_idx);
+
 #endif /* FREETYPE_HH */
index 079162d27223bfac8295a577118135360d25b6e4..1ea2b38dc70d750b83268941ef42604b7874dd4c 100644 (file)
@@ -46,7 +46,7 @@ public:
   virtual SCM get_output ();
   virtual Output_def *get_output_def () const;
   virtual Moment now_mom () const;
-  virtual Context *get_default_interpreter (string context_id = "");
+  virtual Context *get_default_interpreter (const string &context_id = "");
 
   Moment previous_moment () const;
 protected:
index 3ebf372eedb25876ad2dc422c0370ade43d70926..a65d54f67bd8f975db35479413fe618d8c54a9e4 100644 (file)
@@ -33,9 +33,10 @@ protected:
   Gregorian_ligature_engraver ();
 
   virtual void listen_pes_or_flexa (Stream_event *ev);
-  virtual void build_ligature (Spanner *ligature, vector<Grob_info> primitives);
+  virtual void build_ligature (Spanner *ligature,
+                               vector<Grob_info> const &primitives);
   virtual void transform_heads (Spanner *ligature,
-                                vector<Grob_info> primitives) = 0;
+                                vector<Grob_info> const &primitives) = 0;
   void stop_translation_timestep ();
 };
 
index fd55dbf20968baba7b9c52be139fa3b6425e2e9f..a0902d6d8907a74542ee3260efea9b1003fd2246 100644 (file)
@@ -25,6 +25,8 @@
 #include "dimension-cache.hh"
 #include "grob-interface.hh"
 
+#include <set>
+
 class Grob
 {
 private:
@@ -67,8 +69,19 @@ public:
   /* standard callbacks */
   DECLARE_SCHEME_CALLBACK (x_parent_positioning, (SCM));
   DECLARE_SCHEME_CALLBACK (y_parent_positioning, (SCM));
+  DECLARE_SCHEME_CALLBACK (pure_stencil_height, (SCM smob, SCM, SCM));
   DECLARE_SCHEME_CALLBACK (stencil_height, (SCM smob));
   DECLARE_SCHEME_CALLBACK (stencil_width, (SCM smob));
+  DECLARE_SCHEME_CALLBACK (pure_simple_vertical_skylines_from_extents, (SCM smob, SCM, SCM));
+  DECLARE_SCHEME_CALLBACK (simple_vertical_skylines_from_extents, (SCM smob));
+  DECLARE_SCHEME_CALLBACK (vertical_skylines_from_stencil, (SCM smob));
+  DECLARE_SCHEME_CALLBACK (pure_vertical_skylines_from_element_stencils, (SCM smob, SCM, SCM));
+  DECLARE_SCHEME_CALLBACK (vertical_skylines_from_element_stencils, (SCM smob));
+  DECLARE_SCHEME_CALLBACK (pure_simple_horizontal_skylines_from_extents, (SCM smob, SCM, SCM));
+  DECLARE_SCHEME_CALLBACK (simple_horizontal_skylines_from_extents, (SCM smob));
+  DECLARE_SCHEME_CALLBACK (horizontal_skylines_from_stencil, (SCM smob));
+  DECLARE_SCHEME_CALLBACK (pure_horizontal_skylines_from_element_stencils, (SCM smob, SCM, SCM));
+  DECLARE_SCHEME_CALLBACK (horizontal_skylines_from_element_stencils, (SCM smob));
 
   /* R/O access */
   Output_def *layout () const { return layout_; }
@@ -101,8 +114,8 @@ public:
   void internal_set_property (SCM sym, SCM val);
 
   /* messages */
-  void warning (string) const;
-  void programming_error (string) const;
+  void warning (const string&) const;
+  void programming_error (const string&) const;
 
   /* class hierarchy */
   virtual System *get_system () const;
@@ -141,17 +154,21 @@ public:
   void fixup_refpoint ();
 
   /* vertical ordering */
+  static bool internal_vertical_less (Grob *g1, Grob *g2, bool pure);
   static Grob *get_root_vertical_alignment (Grob *g);
   static Grob *get_vertical_axis_group (Grob *g);
   static bool vertical_less (Grob *g1, Grob *g2);
   static bool pure_vertical_less (Grob *g1, Grob *g2);
-  static bool internal_vertical_less (Grob *g1, Grob *g2, bool pure);
   static int get_vertical_axis_group_index (Grob *g);
 
+  /* skylines */
   virtual Interval_t<int> spanned_rank_interval () const;
   virtual bool pure_is_visible (int start, int end) const;
   bool check_cross_staff (Grob *common);
   static bool less (Grob *g1, Grob *g2);
+  static SCM maybe_pure_internal_simple_skylines_from_extents (Grob *, Axis, bool, int, int, bool, bool);
+  static SCM internal_skylines_from_element_stencils (Grob *me, Axis a, bool pure, int beg, int end);
+  static SCM internal_skylines_from_element_stencils (SCM, Axis);
 };
 
 /* smob utilities */
@@ -159,9 +176,13 @@ DECLARE_UNSMOB (Grob, grob);
 Spanner *unsmob_spanner (SCM);
 Item *unsmob_item (SCM);
 
+/* unification */
+void uniquify (vector <Grob *> &);
+
 /* refpoints */
 Grob *common_refpoint_of_list (SCM elt_list, Grob *, Axis a);
 Grob *common_refpoint_of_array (vector<Grob *> const &, Grob *, Axis a);
+Grob *common_refpoint_of_array (set<Grob *> const &, Grob *, Axis a);
 System *get_root_system (Grob *me);
 
 /* extents */
index c9595f923b84e44d7ef2ee48293b45f6dba93354..8378404513cabf9b3169b26b5bf71584f12d12d7 100644 (file)
@@ -53,9 +53,9 @@ public:
   vector<string> file_name_strings_;
 
   Source_file *get_source_file () const;
-  virtual void new_input (string s, Sources *);
+  virtual void new_input (const string &s, Sources *);
 
-  void new_input (string name, string data, Sources *);
+  void new_input (const string &name, string data, Sources *);
 
   char const *here_str0 () const;
 };
index 2ae9f093eed3fa7d9cf580f25ac6e1c7825e346b..a11f8f8c1b25f787bd632aaa41bc7388eea3340f 100644 (file)
@@ -36,12 +36,12 @@ public:
   char const *end () const;
 
   void set (Source_file *, char const *, char const *);
-  void error (string) const;
-  void programming_error (string) const;
-  void non_fatal_error (string) const;
-  void warning (string) const;
-  void message (string) const;
-  void debug_output (string) const;
+  void error (const string&) const;
+  void programming_error (const string&) const;
+  void non_fatal_error (const string&) const;
+  void warning (const string&) const;
+  void message (const string&) const;
+  void debug_output (const string&) const;
   void set_spot (Input const &);
   void step_forward ();
   void set_location (Input const &, Input const &);
@@ -63,7 +63,7 @@ public:
   Input ();
 protected:
   string message_location () const;
-  string message_string (string msg) const;
+  string message_string (const string &msg) const;
 };
 
 #include "smobs.hh"
index b618b94720ca780ebee5aea040e8bf2c662591e8..e7e237e9497c971f3b9fdcea1e32271712627fa0 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
   Jan Nieuwenhuizen <janneke@gnu.org>
 
   LilyPond is free software: you can redistribute it and/or modify
diff --git a/lily/include/kievan-ligature.hh b/lily/include/kievan-ligature.hh
new file mode 100644 (file)
index 0000000..cb6494c
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2013 Aleksandr Andreev <aleksandr.andreev@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/>.
+*/
+
+#ifndef KIEVAN_LIGATURE_HH
+#define KIEVAN_LIGATURE_HH
+
+#include "lily-proto.hh"
+#include "grob-interface.hh"
+
+struct Kievan_ligature
+{
+  DECLARE_SCHEME_CALLBACK (print, (SCM));
+  DECLARE_GROB_INTERFACE ();
+};
+
+#endif /* KIEVAN_LIGATURE_HH */
index afb349980f266ccc8e21a31187147024f9990281..1ad21499b86120345ebf6fbbf18d5dca86b8c0e5 100644 (file)
@@ -36,7 +36,7 @@ protected:
   void process_music ();
   virtual Spanner *create_ligature_spanner () = 0;
   virtual void typeset_ligature (Spanner *ligature,
-                                 vector<Grob_info> primitives) = 0;
+                                 vector<Grob_info> const &primitives) = 0;
   virtual Spanner *current_ligature ();
   SCM brew_ligature_primitive_proc;
 
index c0df65849824051b13d50f5dcd3d9dc748abcfef..a273f5ac5d3da229e0cd49122edba438cddfabc5 100644 (file)
@@ -129,7 +129,7 @@ inline SCM ly_symbol2scm (char const *x) { return scm_from_locale_symbol ((x));
 
 string mangle_cxx_identifier (string);
 
-void ly_add_type_predicate (void *ptr, string name);
+void ly_add_type_predicate (void *ptr, const string &name);
 string predicate_to_typename (void *ptr);
 
 /*
@@ -159,8 +159,8 @@ string predicate_to_typename (void *ptr);
 #define MAKE_SCHEME_CALLBACK(TYPE, FUNC, ARGCOUNT)                      \
   MAKE_SCHEME_CALLBACK_WITH_OPTARGS(TYPE,FUNC,ARGCOUNT, 0, "");
 
-void ly_add_function_documentation (SCM proc, string fname, string varlist, string doc);
-void ly_check_name (string cxx, string fname);
+void ly_add_function_documentation (SCM proc, const string &fname, const string &varlist, const string &doc);
+void ly_check_name (const string &cxx, const string &fname);
 
 #define ADD_SCM_INIT_FUNC(name, func)           \
   class name ## _scm_initter                    \
index f2b8f08ba17bfa00fcae3aacf13035d68a30aa17..4592b2497db9321b5bac7a96829e49a272328031 100644 (file)
@@ -50,12 +50,12 @@ SCM ly_truncate_list (int k, SCM lst);
 
 extern SCM global_lily_module;
 
-string gulp_file_to_string (string fn, bool must_exist, int size);
+string gulp_file_to_string (const string &fn, bool must_exist, int size);
 
 SCM ly_string2scm (string const &s);
 string ly_scm2string (SCM s);
 string ly_symbol2string (SCM);
-string robust_symbol2string (SCM, string);
+string robust_symbol2string (SCM, const string&);
 Rational ly_scm2rational (SCM);
 SCM ly_rational2scm (Rational);
 SCM ly_offset2scm (Offset);
@@ -78,7 +78,7 @@ Drul_array<Real> robust_scm2drul (SCM, Drul_array<Real>);
 Drul_array<bool> robust_scm2booldrul (SCM, Drul_array<bool>);
 Interval robust_scm2interval (SCM, Drul_array<Real>);
 Offset robust_scm2offset (SCM, Offset);
-string robust_scm2string (SCM, string);
+string robust_scm2string (SCM, const string&);
 Rational robust_scm2rational (SCM, Rational);
 vector<Real> ly_scm2floatvector (SCM);
 SCM ly_floatvector2scm (vector<Real> v);
index caa3b4b44b5987f5c094b74a8ad96606a8c4b7d7..4bc4cbe887403eb685cecf84442c2f741ad0f7f7 100644 (file)
@@ -36,10 +36,10 @@ class Lily_lexer : public Includable_lexer
   DECLARE_SMOBS (Lily_lexer);
 
 private:
-  int lookup_keyword (string);
-  int scan_bare_word (string);
-  SCM scan_markup_word (string);
-  int scan_escaped_word (string);
+  int lookup_keyword (const string&);
+  int scan_bare_word (const string&);
+  int scan_escaped_word (const string&);
+  int scan_shorthand (const string&);
   int scan_scm_id (SCM);
   int identifier_type (SCM);
   char escaped_char (char) const;
@@ -50,13 +50,15 @@ private:
   SCM scopes_;
   SCM start_module_;
   int hidden_state_;
+  Input override_input_;
   SCM eval_scm (SCM, char extra_token = 0);
 public:
   SCM eval_scm_token (SCM sval) { return eval_scm (sval, '#'); }
   SCM extra_tokens_;
-  YYSTYPE *lexval_;
+  SCM *lexval_;
   Input *lexloc_;
   bool is_main_input_;
+  vsize main_input_level_;
 
   Sources *sources_;
 
@@ -68,7 +70,7 @@ public:
   Input last_input_;
 
   Lily_lexer (Sources *, Lily_parser *);
-  Lily_lexer (Lily_lexer const &, Lily_parser *);
+  Lily_lexer (Lily_lexer const &, Lily_parser *, SCM);
   int yylex ();
 
   void add_lexed_char (int);
@@ -76,6 +78,7 @@ public:
   void prepare_for_next_token ();
   int try_special_identifiers (SCM *, SCM);
   Input here_input () const;
+  Input const &override_input (Input const &) const;
 
   void add_scope (SCM);
   SCM set_current_scope ();
@@ -84,14 +87,14 @@ public:
 
   void start_main_input ();
 
-  virtual void new_input (string s, Sources *);
-  virtual void new_input (string s, string d, Sources *);
+  virtual void new_input (const string &s, Sources *);
+  virtual void new_input (const string &s, string d, Sources *);
 
   bool top_input () { return include_stack_.size () < 2; }
   SCM keyword_list () const;
-  SCM lookup_identifier (string s);
+  SCM lookup_identifier (const string &s);
   SCM lookup_identifier_symbol (SCM s);
-  void push_extra_token (int token_type, SCM scm = SCM_UNDEFINED);
+  void push_extra_token (int token_type, SCM scm = SCM_UNSPECIFIED);
   void push_chord_state (SCM alist);
   void push_figuredbass_state ();
   void push_lyric_state ();
index 2e065ff31d70dd3b38e204ade3088484699ad6b2..3b4c757d657192a315e97bfa893b7591b583c2e9 100644 (file)
@@ -54,21 +54,22 @@ public:
   bool ignore_version_b_;
 
   Lily_parser (Sources *sources);
-  Lily_parser (Lily_parser const &, SCM closures = SCM_EOL);
+  Lily_parser (Lily_parser const &, SCM closures = SCM_EOL,
+               SCM location = SCM_BOOL_F);
 
   DECLARE_SCHEME_CALLBACK (layout_description, ());
 
   void clear ();
   void do_init_file ();
-  void do_yyparse ();
-  void include_string (string ly_code);
-  void parse_file (string init, string name, string out_name);
-  void parse_string (string ly_code);
-  SCM parse_string_expression (string ly_code, string filename, int line);
-  void parser_error (string);
-  void parser_error (Input const &, string);
+  SCM do_yyparse ();
+  void include_string (const string &ly_code);
+  void parse_file (const string &init, const string &name, const string &out_name);
+  void parse_string (const string &ly_code);
+  SCM parse_string_expression (const string &ly_code, const string &filename, int line);
+  void parser_error (const string&);
+  void parser_error (Input const &, const string&);
   // The following is called as yyerror
-  static void parser_error (Input const *i, Lily_parser *parser, string s);
+  static void parser_error (Input const *i, Lily_parser *parser, SCM *, const string &s);
   void set_yydebug (bool);
 
   SCM make_scope () const;
@@ -76,14 +77,6 @@ public:
 
 DECLARE_UNSMOB (Lily_parser, lily_parser);
 
-SCM ly_parse_file (SCM);
-SCM ly_parse_string (SCM);
-// SCM ly_parser_add_book_and_score (SCM, SCM);
-SCM ly_parser_print_book (SCM, SCM);
-SCM ly_parser_print_score (SCM, SCM);
-SCM ly_parser_bookify (SCM, SCM);
-SCM ly_parser_scorify (SCM, SCM);
-
 Output_def *get_layout (Lily_parser *parser);
 Output_def *get_midi (Lily_parser *parser);
 Output_def *get_paper (Lily_parser *parser);
index 9ecb1b44aaf377c089302ca7e870251f6ba25b60..80240d5923830edf35de5e3250161ffea4d1bbd0 100644 (file)
@@ -24,6 +24,7 @@
 
 class All_font_metrics;
 class Audio_column;
+class Audio_control_function_value_change;
 class Audio_dynamic;
 class Audio_element;
 class Audio_instrument;
@@ -80,7 +81,6 @@ class Grace_music;
 class Grob;
 class Grob_array;
 class Grob_info;
-class Hara_kiri_engraver;
 class Hara_kiri_line_group_engraver;
 class Includable_lexer;
 class Input;
@@ -105,6 +105,7 @@ class Lyric_performer;
 class Lyric_phrasing_engraver;
 class Mensural_ligature_engraver;
 class Midi_chunk;
+class Midi_control_function_value_change;
 class Midi_duration;
 class Midi_dynamic;
 class Midi_event;
@@ -199,8 +200,7 @@ class Translator_group;
 class Transposed_music;
 class yyFlexLexer;
 
-typedef void (*Engraver_void_function_engraver_grob_info) (Engraver *,
-                                                           Grob_info);
-typedef void (*Translator_void_method_ptr) (Translator *);
+typedef void (Engraver::*Engraver_void_function_engraver_grob_info) (Grob_info);
+typedef void (Translator::*Translator_void_method_ptr) ();
 
 #endif /* LILY_PROTO_HH */
index 952b19b8e1f1c632d3f24576fca573f395f0826b..e79f01137af90f731856e813da91e4082c6a91a2 100644 (file)
@@ -25,7 +25,7 @@
 struct Lilypond_version
 {
   Lilypond_version (int major, int minor, int patch);
-  Lilypond_version (string str);
+  Lilypond_version (const string &str);
 
   string to_string () const;
   operator int () const;
index e9113b4e087630a241c3337640f78541b8e954b2..06a1a0999116464203448bc5987c14bcf8890217 100644 (file)
@@ -28,8 +28,6 @@ void set_debug (bool);
 void do_scores ();
 void clear_scores ();
 void add_score (Score *s);
-void set_default_output (string s);
-string find_file (string);
 void call_constructors ();
 vector<string> get_inclusion_names ();
 void set_inclusion_names (vector<string>);
index d73b6af790fd17b0e21f767c45e0581980de7c1c..c87adf6491a91c8a8ccbc4a0b041a2f06ca6f808 100644 (file)
@@ -43,7 +43,7 @@ public:
 class Midi_chunk
 {
 public:
-  void set (string header_string, string data_string, string footer_string);
+  void set (const string &header_string, const string &data_string, const string &footer_string);
   virtual string to_string () const;
   virtual string data_string () const;
   DECLARE_CLASSNAME (Midi_chunk);
index c5a9cc9fddce90dcee66b6fe84cd95f1acc8afda..492e2e9fc83eb4a831c7e6cba230687e34d44650 100644 (file)
@@ -46,11 +46,26 @@ public:
 class Midi_channel_item : public Midi_item
 {
 public:
+  virtual ~Midi_channel_item ();
   int channel_;
   DECLARE_CLASSNAME (Midi_channel_item);
   Midi_channel_item (Audio_item *ai);
 };
 
+/**
+   Midi control function value changes.
+*/
+class Midi_control_function_value_change : public Midi_channel_item
+{
+public:
+  DECLARE_CLASSNAME (Midi_control_function_value_change);
+  Midi_control_function_value_change (Audio_control_function_value_change *ai);
+  virtual ~Midi_control_function_value_change ();
+  virtual string to_string () const;
+  Audio_control_function_value_change::Control control_;
+  Real value_;
+};
+
 class Midi_duration : public Midi_item
 {
 public:
index ee1534da07d73a43ebf79361f38dcab4637974e0..7ea838fdd0f845ebb50eb676c27b9c42031605e7 100644 (file)
@@ -29,10 +29,10 @@ using namespace std;
 
 struct Midi_stream
 {
-  Midi_stream (string file_name_string);
+  Midi_stream (const string &file_name_string);
   ~Midi_stream ();
 
-  void write (string);
+  void write (const string&);
   void write (Midi_chunk const &);
   void open ();
 
index b70d2c2ce2e2d15dad2b95973af7cf47fca62007..9bba2d09e936bb2ef8499f48661b883a6c4fe03a 100644 (file)
@@ -61,9 +61,10 @@ normalize (Real x, Real x1, Real x2)
 
 Real directed_round (Real f, Direction d);
 
+Offset get_point_in_y_direction (Offset orig, Real slope, Real dist, Direction dir);
 Real peak_around (Real epsilon, Real threshold, Real x);
 Real convex_amplifier (Real standard_x, Real increase_factor, Real x);
-string camel_case_to_lisp_identifier (string in);
+string camel_case_to_lisp_identifier (const string &in);
 
 #endif
 
index cd5cd6116fc0979748af39a66618861c7451a07b..40533cb3c3e36aeb608b6299fcb49e7969ba2f5f 100644 (file)
 struct Modified_font_metric : public Font_metric
 {
 public:
-  Stencil text_stencil (Output_def *output_state, string, bool) const;
+  Stencil text_stencil (Output_def *output_state, const string&, bool) const;
+  Real get_magnification () const;
 
   static SCM make_scaled_font_metric (Font_metric *fm, Real magnification);
   size_t count () const;
   Offset get_indexed_wxwy (size_t) const;
-  Offset attachment_point (string) const;
+  Offset attachment_point (const string&) const;
   size_t name_to_index (string) const;
   size_t index_to_charcode (size_t) const;
   Font_metric *original_font () const;
index 55943c4b4421afb29518a12eea85a4b86ed5424b..d012a77b0712ae052f1cb7ecfd3373c0c8cbabf9 100644 (file)
@@ -28,6 +28,7 @@ class Multi_measure_rest
 public:
   DECLARE_GROB_INTERFACE ();
   DECLARE_SCHEME_CALLBACK (print, (SCM));
+  DECLARE_SCHEME_CALLBACK (height, (SCM));
   DECLARE_SCHEME_CALLBACK (percent, (SCM));
   static void add_column (Grob *, Item *);
   DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM));
index b0f48371048a50bc6f4a3d953d89fc20828a88da..83cc5ff4c3148a4add8d1c7b165bc46a0bfe8829 100644 (file)
@@ -24,7 +24,6 @@
 #include "moment.hh"
 #include "pitch.hh"
 #include "prob.hh"
-#include "context.hh"
 
 #define is_mus_type(x) internal_is_music_type (ly_symbol2scm (x))
 
@@ -40,7 +39,7 @@ public:
 
   bool internal_is_music_type (SCM) const;
 
-  Stream_event *to_event (Context *) const;
+  Stream_event *to_event () const;
 
   DECLARE_SCHEME_CALLBACK (relative_callback, (SCM, SCM));
   Pitch to_relative_octave (Pitch);
index ae0f3271b0ce9bfe0fabe1705bfeb021b946084f..db192bf19a7fc9c97c3fe13e8742fd3de8baa690 100644 (file)
@@ -40,6 +40,7 @@ public:
   static SCM automatic_shift (Grob *, Drul_array<vector<Grob *> >);
   static SCM forced_shift (Grob *);
 
+  static vector<int> note_head_positions (Grob *me);
   static Drul_array<vector<Grob *> > get_clash_groups (Grob *me);
   DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM smob));
   static void add_column (Grob *me, Grob *ncol);
index 280a5c969f474c1c3996fe42365025a224678e19..c2723f0ba8d570759a5da8c9cf40717c3937499d 100644 (file)
@@ -34,7 +34,6 @@ public:
   static bool shift_less (Grob *const &, Grob *const &);
   static Direction dir (Grob *me);
   static Grob *accidentals (Grob *me);
-  static Grob *arpeggio (Grob *me);
   static Slice head_positions_interval (Grob *me);
   static Grob *first_head (Grob *me);
   static Grob *get_rest (Grob *me);
index 532933b84b59b34cde0022e33c322fccbdcefcdc..6155dd7dc6513a4bf4cda1c759282dc38e24d2c1 100644 (file)
@@ -36,7 +36,7 @@ public:
   static Real stem_attachment_coordinate (Grob *, Axis a);
   static int get_balltype (Grob *);
 
-  static Offset get_stem_attachment (Font_metric *, string);
+  static Offset get_stem_attachment (Font_metric *, const string&);
 };
 #endif // NOTEHEAD_HH
 
index 6ee62823ec4928001b7391d26bf062d5f606d270..cb55e9744bc890842a0445bb221a66886e834f7c 100644 (file)
@@ -41,27 +41,29 @@ class Open_type_font : public Font_metric
 
   DECLARE_CLASSNAME (Open_type_font);
 public:
+  Real get_units_per_EM () const;
   SCM get_subfonts () const;
   SCM get_global_table () const;
   SCM get_char_table () const;
   SCM glyph_list () const;
-
-  string get_otf_table (string tag) const;
-  static SCM make_otf (string);
+  SCM get_glyph_outline (size_t signed_idx) const;
+  Box get_glyph_outline_bbox (size_t signed_idx) const;
+  string get_otf_table (const string &tag) const;
+  static SCM make_otf (const string&);
   string font_name () const;
   ~Open_type_font ();
-  Offset attachment_point (string) const;
+  Offset attachment_point (const string&) const;
   size_t count () const;
   Box get_indexed_char_dimensions (size_t) const;
+  Box get_unscaled_indexed_char_dimensions (size_t) const;
   size_t name_to_index (string) const;
-  //size_t glyph_name_to_charcode (string) const;
   size_t index_to_charcode (size_t) const;
   void derived_mark () const;
   SCM sub_fonts () const;
   Real design_size () const;
 };
 
-string get_otf_table (FT_Face face, string tag);
-FT_Face open_ft_face (string str, FT_Long idx);
+string get_otf_table (FT_Face face, const string &tag);
+FT_Face open_ft_face (const string&, FT_Long idx);
 
 #endif /* OPEN_TYPE_FONT_HH */
index 3f44061513064044bf173a496e43c332ac8f8bcc..eff52c2c3845a7b3f47f85a42b2defcaf7595ed7 100644 (file)
@@ -65,7 +65,7 @@ public:
   /*
     variables.
    */
-  SCM c_variable (string id) const;
+  SCM c_variable (const string &id) const;
   SCM lookup_variable (SCM sym) const;
   void set_variable (SCM sym, SCM val);
   void normalize ();
index 6b4ad4b68f9646196d774216b0d27330d2892e0f..ad559551d1fe9d6a7919c3da9d6841e70e07fde1 100644 (file)
@@ -48,12 +48,18 @@ public:
 
   string description_string () const;
   SCM font_file_name () const;
-  void register_font_file (string, string, int);
+  void register_font_file (const string &filename, const string &ps_name, int face_index);
+
+  size_t name_to_index (string) const;
+  SCM get_glyph_outline (size_t signed_idx) const;
+  Box get_glyph_outline_bbox (size_t signed_idx) const;
+  Box get_unscaled_indexed_char_dimensions (size_t) const;
+  Box get_scaled_indexed_char_dimensions (size_t) const;
 
   Stencil pango_item_string_stencil (PangoGlyphItem const *) const;
 
   virtual Stencil text_stencil (Output_def *output_state,
-                                string text, bool music) const;
+                                const string &text, bool music) const;
   virtual void derived_mark () const;
 };
 
index 1ac0a74dfde8ee538e003305c4197458db1a3837..02bc2746a2f841103bfae79194c81253f6ebc158 100644 (file)
@@ -40,18 +40,17 @@ public:
   DECLARE_SMOBS (Paper_outputter);
 
 public:
-  Paper_outputter (SCM port, string format);
+  Paper_outputter (SCM port, const string &format);
 
   void close ();
   SCM dump_string (SCM);
   SCM file () const;
   SCM module () const;
-  void output_scheme (SCM scm);
+  SCM output_scheme (SCM scm);
   void output_stencil (Stencil);
   SCM scheme_to_string (SCM);
 };
 
-Paper_outputter *get_paper_outputter (string, string);
 DECLARE_UNSMOB (Paper_outputter, outputter);
 
 #endif /* PAPER_OUTPUTTER_HH */
index 0e6729a81f5a34184c77aa48d8ea14f0f838f3a7..16016256903542770862e9c613591374afb46af2 100644 (file)
@@ -25,7 +25,7 @@
 #include "grob-info.hh"
 #include "translator.hh"
 
-/* Convert a music definition into a audio representation.
+/* Convert a music definition into an audio representation.
    A baseclass.  */
 class Performer : public Translator
 {
index ae131d3f5d31dfa79272dbd3731ba26e948021d0..83526816de55cffbb3081d651980b3b5bb0714d2 100644 (file)
@@ -22,8 +22,6 @@
 #include "lily-guile.hh"
 
 /* options */
-extern bool lily_1_8_relative;
-extern bool lily_1_8_compatibility_used;
 
 SCM ly_get_option (SCM);
 SCM ly_set_option (SCM, SCM);
index 015ea1948b7952d3a95fd672a1d073ffbff5091a..5cf10fee35bbf25ac961bb3d19f8992e31560a66 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
index 1a3e8a38d9928ea161112debe86754d3a69c6a8a..5fda3c73a7647d1a51e339932c35c1e28fbbfc41 100644 (file)
 
 #include "std-string.hh"
 
-void read_relocation_dir (string dirname);
-void read_relocation_file (string filename);
-string expand_environment_variables (string orig);
+void read_relocation_dir (const string &dirname);
+void read_relocation_file (const string &filename);
+string expand_environment_variables (const string &orig);
 
-int sane_putenv (char const *key, string value, bool overwrite);
+int sane_putenv (char const *key, const string &value, bool overwrite);
 void setup_paths (char const *argv0);
 extern bool relocate_binary;
 
index 208da0499ae195377b055afda7f154756ef471c7..d5dbae9e25791f385858ded77d6a146558ae98cc 100644 (file)
@@ -30,7 +30,9 @@ public:
   DECLARE_SCHEME_CALLBACK (y_offset_callback, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM));
   DECLARE_GROB_INTERFACE ();
-  static string glyph_name (Grob *, int, string, bool);
+  static string glyph_name (Grob *, int durlog, const string &style, bool, Real);
+  static Real staff_position_internal (Grob *, int /* duration_log */,
+                                       int /* dir */);
   static SCM brew_internal_stencil (Grob *, bool);
   static SCM generic_extent_callback (Grob *, Axis);
   static void translate (Grob *me, int dy);
index f639a1c051bd375a7eccc7867d787207f0570437..c2a5f851fc7c24b32f097ef34b5ac3dfe35d23f8 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2012 Mike Solomon <mike@mikesolomon.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
index c3c7e9c878f2d3f999ded36dbc3de461d8a777e1..dd69f8663000e1a2aaf9d3e985451fbedce01b9e 100644 (file)
@@ -30,10 +30,8 @@ struct Self_alignment_interface
   static SCM aligned_on_self (Grob *me, Axis a, bool pure, int start, int end);
   static SCM centered_on_object (Grob *me, Axis a);
   static SCM aligned_on_parent (Grob *me, Axis a);
-  static SCM avoid_colliding_grobs (Grob *me, Axis a, Real offset);
   static void set_center_parent (Grob *me, Axis a);
   static void set_align_self (Grob *me, Axis a);
-  static void avoid_x_collisions (Grob *me);
 
   DECLARE_SCHEME_CALLBACK (x_aligned_on_self, (SCM element));
   DECLARE_SCHEME_CALLBACK (y_aligned_on_self, (SCM element));
@@ -44,8 +42,6 @@ struct Self_alignment_interface
   DECLARE_SCHEME_CALLBACK (centered_on_x_parent, (SCM element));
   DECLARE_SCHEME_CALLBACK (centered_on_y_parent, (SCM element));
   DECLARE_SCHEME_CALLBACK (x_centered_on_y_parent, (SCM element));
-  DECLARE_SCHEME_CALLBACK (avoid_x_colliding_grobs, (SCM element, SCM offset));
-  DECLARE_SCHEME_CALLBACK (x_colliding_grobs, (SCM element));
   DECLARE_SCHEME_CALLBACK (aligned_on_x_parent, (SCM element));
   DECLARE_SCHEME_CALLBACK (aligned_on_y_parent, (SCM element));
 };
index edb6dc6a7a09ce72e75d37e1a5a5dfa6a2c58890..e7c1637471bdbedf4052acf45f73400d92a2704d 100644 (file)
@@ -42,14 +42,11 @@ public:
 
   static SCM aligned_side (Grob *me, Axis a, bool pure, int start, int end, Real *current_off_ptr);
 
-  static SCM general_side_position (Grob *, Axis, bool, bool my_extents,
-                                    bool pure, int start, int end, Real *current_off);
-  static SCM skyline_side_position (Grob *me, Axis a, bool pure, int start, int end, Real *current_offset);
-
   static Axis get_axis (Grob *);
   static void set_axis (Grob *, Axis);
   DECLARE_GROB_INTERFACE ();
   static void add_support (Grob *, Grob *);
+  static void recursive_add_support (Grob *, Grob *);
   static void add_staff_support (Grob *);
 };
 
index 22dd6393324b1a3de3557cd4a3fec55b9bc5c337..566b9be3f74c74d94e8619500b77bb8815e07468 100644 (file)
@@ -30,11 +30,17 @@ private:
   DECLARE_SIMPLE_SMOBS (Skyline_pair);
 public:
   Skyline_pair ();
-  Skyline_pair (vector<Box> const &boxes, Real horizon_padding, Axis a);
-  Skyline_pair (Box const &, Real horizon_padding, Axis a);
+  Skyline_pair (vector<Box> const &boxes, Axis a);
+  Skyline_pair (vector<Drul_array<Offset> > const &buildings, Axis a);
+  Skyline_pair (vector<Skyline_pair> const &skypairs);
+  Skyline_pair (Box const &, Axis a);
+
+  Real left () const;
+  Real right () const;
   void raise (Real);
   void shift (Real);
-  void insert (Box const &, Real horizon_padding, Axis);
+  void deholify ();
+  void insert (Box const &, Axis);
   void merge (Skyline_pair const &other);
   Skyline &operator [] (Direction d);
   Skyline const &operator [] (Direction d) const;
index 0715c545a635a7f6af70ea85e8520c0804506338..6846474857d476227c797ce021ec24fa1def8e38 100644 (file)
 
 struct Building
 {
+  Real start_;
   Real end_;
   Real y_intercept_;
   Real slope_;
 
   void precompute (Real start, Real start_height, Real end_height, Real end);
   Building (Real start, Real start_height, Real end_height, Real end);
-  Building (Box const &b, Real horizon_padding, Axis a, Direction d);
+  Building (Box const &b, Axis a, Direction d);
   void print () const;
 
   Real height (Real x) const;
   Real intersection_x (Building const &other) const;
   void leading_part (Real chop);
   bool conceals (Building const &other, Real x) const;
-  Building sloped_neighbour (Real start, Real horizon_padding, Direction d) const;
+  Real shift_to_intersect (Real x, Real y) const;
 };
 
 class Skyline
@@ -54,44 +55,53 @@ private:
   list<Building> buildings_;
   Direction sky_;
 
-  void internal_merge_skyline (list<Building>*, list<Building>*,
-                               list<Building> *const result);
-  list<Building> internal_build_skyline (list<Box>*, Real, Axis, Direction);
+  void internal_merge_skyline (list<Building> *, list<Building> *,
+                               list<Building> *result) const;
+  list<Building> internal_build_skyline (list<Building> *) const;
+  Real internal_distance (Skyline const &, Real horizon_padding, Real *touch_point) const;
+  Real internal_distance (Skyline const &, Real *touch_point) const;
+  void normalize ();
 
   DECLARE_SIMPLE_SMOBS (Skyline);
 
 public:
   Skyline ();
-  Skyline (Skyline const &src);
-  Skyline (Skyline const &src, Real horizon_padding, Axis a);
   Skyline (Direction sky);
-  Skyline (vector<Box> const &bldgs, Real horizon_padding, Axis a, Direction sky);
-  Skyline (Box const &b, Real horizon_padding, Axis a, Direction sky);
+  Skyline (vector<Box> const &bldgs, Axis a, Direction sky);
+  Skyline (vector<Drul_array<Offset> > const &bldgs, Axis a, Direction sky);
+  Skyline (vector<Skyline_pair> const &skypairs, Direction sky);
+  Skyline (Box const &b, Axis a, Direction sky);
 
   vector<Offset> to_points (Axis) const;
+  void deholify ();
   void merge (Skyline const &);
-  void insert (Box const &, Real horizon_padding, Axis);
+  void insert (Box const &, Axis);
   void print () const;
   void print_points () const;
   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 shift_to_avoid (Skyline const &other, Real, Direction d, Real horizon_padding = 0);
+  Real raise_to_avoid (Skyline const &other, Real, Direction d, Real horizon_padding = 0);
+  Drul_array<Real> shifts_to_avoid_intersection (Skyline const &, Real horizon_padding = 0) const;
+  Interval raises_to_avoid_intersection (Skyline const &, Real horizon_padding = 0) const;
   Real height (Real airplane) const;
   Real max_height () const;
   Real max_height_position () const;
+  Real left () const;
+  Real right () const;
+  Direction direction () const;
   void set_minimum_height (Real height);
   void clear ();
   bool is_empty () const;
+  Skyline padded (Real horizon_padding) 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 48ec73644840e93d9f720439f4242482973caaa6..5114815619659f834461230d21512715fda383f1 100644 (file)
@@ -51,7 +51,7 @@ public:
 
   Real score () const { return score_; }
   string card () const { return score_card_; }
-  void add_score (Real, string);
+  void add_score (Real, const string&);
 
   void generate_curve (Slur_score_state const &state, Real r0, Real h_inf,
                        vector<Offset> const &);
diff --git a/lily/include/slur-proto-engraver.hh b/lily/include/slur-proto-engraver.hh
new file mode 100644 (file)
index 0000000..e27c96a
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2013 Mike Solomon <mike@mikesolomon.org>
+
+  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/>.
+*/
+
+#ifndef SLUR_PROTO_ENGRAVER_HH
+#define SLUR_PROTO_ENGRAVER_HH
+
+#include "engraver.hh"
+#include "moment.hh"
+
+class Slur_proto_engraver : public Engraver
+{
+protected:
+  Slur_proto_engraver (const char* double_property_name,
+    const char* grob_name, const char* object_name, const char* event_name) :
+      double_property_name_ (double_property_name),
+      grob_name_ (grob_name), object_name_ (object_name),
+      event_name_ (event_name) {}
+
+  // protected so that subclasses can see them
+  vector<Stream_event *> start_events_;
+  vector<Stream_event *> stop_events_;
+  vector<Grob *> slurs_;
+  vector<Grob *> end_slurs_;
+  vector<Grob_info> objects_to_acknowledge_;
+  const char* double_property_name_;
+  const char* grob_name_;
+  const char* object_name_;
+  const char* event_name_;
+
+  DECLARE_ACKNOWLEDGER (inline_accidental);
+  DECLARE_ACKNOWLEDGER (fingering);
+  DECLARE_ACKNOWLEDGER (note_column);
+  DECLARE_ACKNOWLEDGER (script);
+  DECLARE_ACKNOWLEDGER (dots);
+  DECLARE_ACKNOWLEDGER (text_script);
+  DECLARE_END_ACKNOWLEDGER (tie);
+  DECLARE_ACKNOWLEDGER (tuplet_number);
+
+  void internal_listen_slur (Stream_event *ev);
+  void acknowledge_extra_object (Grob_info);
+  void stop_translation_timestep ();
+  void process_music ();
+
+  bool can_create_slur (const string&, vsize, vsize *, Stream_event *);
+  void create_slur (const string &spanner_id, Stream_event *ev_cause, Grob *g_cause, Direction dir, bool left_broken);
+  bool try_to_end (Stream_event *ev);
+
+  virtual void set_melisma (bool);
+  virtual void finalize ();
+  virtual void derived_mark () const;
+
+public:
+  // no TRANSLATOR_DECLARATIONS (Slur_proto_engraver) needed since this
+  // class is abstract
+};
+
+#endif // SLUR_PROTO_ENGRAVER_HH
index d1f743ca8e2b51f34a8a50f3f358014a387ade0d..b20311785d2d1870c23075cc28e4645f4ea70c4d 100644 (file)
@@ -30,7 +30,7 @@ public:
   static void add_column (Grob *me, Grob *col);
   static void add_extra_encompass (Grob *me, Grob *col);
   static void replace_breakable_encompass_objects (Grob *me);
-  static void auxiliary_acknowledge_extra_object (Grob_info const &, vector<Grob *>&, vector<Grob *>&);
+  static void auxiliary_acknowledge_extra_object (Grob_info const &, vector<Grob *> &, vector<Grob *> &);
   DECLARE_SCHEME_CALLBACK (print, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_control_points, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
index fb4fa530ee3fd6ef93090a6d50fa4cb3da27315f..cd111981bbea9c0fa38f27032e1a9dfefd20eeac 100644 (file)
   Simple smobs are created by adding the
   DECLARE_SIMPLE_SMOBS(Classname) to the declaration
 
+  A simple smob is only optionally under the reign of the GUILE
+  garbage collector: its usual life time is that of a normal C++
+  object.  While a smobbed_copy () is fully under control of the
+  garbage collector and will have its mark_smob function called during
+  garbage collection, an automatic variable of this type will not have
+  mark_smob called, but rather have its memory image in the call stack
+  scanned for contained non-immediate SCM values.  Anything requiring
+  more complex mark_smob behavior is not suitable for a simple smob.
+
+  When you create a smobbed_copy, the _copy_ is fully managed by the
+  GUILE memory system.  As a corollary, multiple smobbed_copy calls
+  yield multiple GUILE objects generally not eq? to each other.
+
   2. Complex smobs are objects that have an identity. These objects
   carry this identity in the form of a self_scm () method, which is a
-  SCM pointer to the object itself.
+  SCM pointer to the object itself.  Complex smobs are always under
+  control of the GUILE memory system.
 
   The constructor for a complex smob should have 3 steps:
 
@@ -186,7 +200,7 @@ public:
       pass_here.checkin (arg);                                          \
   } while (0)
 #else
-#define ASSERT_LIVE_IS_ALLOWED(arg) do { } \
+#define ASSERT_LIVE_IS_ALLOWED(arg) do { (void)(arg); }  \
   while (0)
 #endif
 
index e4bdc3f63843ac97019412e11d9f328957de7a29..5f3553aea08c46e94a746ad410bfa3ec18d8d2e5 100644 (file)
@@ -48,8 +48,8 @@ class Source_file
 
   DECLARE_SMOBS (Source_file);
 public:
-  Source_file (string fn);
-  Source_file (string, string);
+  Source_file (const string &fn);
+  Source_file (const string&, const string&);
 
   char const *c_str () const;
   virtual string quote_input (char const *pos_str0) const;
@@ -73,7 +73,7 @@ protected:
   int line_offset_;
 };
 
-vector<char> gulp_file (string fn, int desired);
+vector<char> gulp_file (const string &fn, int desired);
 
 #endif /* SOURCE_FILE_HH */
 
index 03a6f8c90886fc8dea0a7252c7713182206ec4dc..7137046d302e08e41c22e9eaa5dcd444afcbe2ab 100644 (file)
@@ -35,6 +35,7 @@ public:
   DECLARE_SCHEME_CALLBACK (print, (SCM));
   DECLARE_SCHEME_CALLBACK (width, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_style, (SCM));
+  DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
   DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
   static Stencil raw_stencil (Grob *, Real slope, Direction stemdir);
   static Real y_offset (Grob *, bool pure);
index de1b7d6c9a7b3ee8047737cddb8cdb2e06ff580b..101c00341af9eb48929dcc1dd258832de9d383c2 100644 (file)
@@ -67,6 +67,8 @@ public:
   DECLARE_SCHEME_CALLBACK (offset_callback, (SCM element));
   DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_beaming, (SCM));
+  DECLARE_SCHEME_CALLBACK (calc_length, (SCM));
+  DECLARE_SCHEME_CALLBACK (pure_calc_length, (SCM, SCM, SCM));
   DECLARE_SCHEME_CALLBACK (calc_stem_begin_position, (SCM));
   DECLARE_SCHEME_CALLBACK (pure_calc_stem_begin_position, (SCM, SCM, SCM));
   DECLARE_SCHEME_CALLBACK (calc_stem_end_position, (SCM));
index 00c295316c16615e7f0eed3a0c2a6ffcbc945c14..34bafa6d41a18c9958303028a16d517ad893029a 100644 (file)
@@ -71,6 +71,7 @@ public:
      Set dimensions to empty, or to (Interval (0, 0), Interval (0, 0) */
   void set_empty (bool);
   void add_at_edge (Axis a, Direction d, const Stencil &m, Real padding);
+  void stack (Axis a, Direction d, const Stencil &m, Real padding, Real mindist);
   void add_stencil (Stencil const &m);
   void translate (Offset);
   Stencil translated (Offset) const;
@@ -84,13 +85,15 @@ public:
   Interval extent (Axis) const;
   Box extent_box () const;
   bool is_empty () const;
+  bool is_empty (Axis) const;
   Stencil in_color (Real r, Real g, Real b) const;
+  static SCM skylines_from_stencil (SCM, Real, Axis);
 };
 
 DECLARE_UNSMOB (Stencil, stencil);
 
 void interpret_stencil_expression (SCM expr,
-                                   void (*func) (void *, SCM),
+                                   SCM (*func) (void *, SCM),
                                    void *func_arg,
                                    Offset o);
 SCM find_expression_fonts (SCM expr);
diff --git a/lily/include/stream.hh b/lily/include/stream.hh
deleted file mode 100644 (file)
index 000ec16..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-  This file is part of LilyPond, the GNU music typesetter.
-
-  Copyright (C) 2001--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-  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/>.
-*/
-
-#ifndef STREAM_HH
-#define STREAM_HH
-
-#include "std-string.hh"
-
-#include <iostream>
-#include <sstream>
-using namespace std;
-
-#if __GNUC__ > 2
-ostream *open_file_stream (string file_name,
-                           ios_base::openmode mode = ios::out);
-#else
-ostream *open_file_stream (string file_name, int mode = ios::out);
-#endif
-void close_file_stream (ostream *os);
-
-#endif /* STREAM_HH */
-
index 453e48234deb3248544f5ed139ede07605f347e3..a5efe750adf0f976b8189b1bb53e14ef51cf76ad 100644 (file)
@@ -39,7 +39,6 @@ class System : public Spanner
 
 public:
   Paper_score *paper_score () const;
-  Grob *get_vertical_alignment ();
   Grob *get_extremal_staff (Direction dir, Interval const &);
   Grob *get_neighboring_staff (Direction dir, Grob *vertical_axis_group, Interval_t<int> bounds);
   Grob *get_pure_bound (Direction dir, int start, int end);
@@ -59,12 +58,14 @@ public:
 
   DECLARE_SCHEME_CALLBACK (footnotes_before_line_breaking, (SCM));
   DECLARE_SCHEME_CALLBACK (footnotes_after_line_breaking, (SCM));
+  DECLARE_SCHEME_CALLBACK (vertical_skyline_elements, (SCM));
   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));
+  DECLARE_SCHEME_CALLBACK (get_vertical_alignment, (SCM));
 
   System (SCM);
   System (System const &);
diff --git a/lily/include/tie-column-format.hh b/lily/include/tie-column-format.hh
deleted file mode 100644 (file)
index 8a2a16a..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-  This file is part of LilyPond, the GNU music typesetter.
-
-  Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-  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/>.
-*/
-
-#ifndef TIE_COLUMN_FORMAT_HH
-#define TIE_COLUMN_FORMAT_HH
-
-#include "lily-proto.hh"
-#include "tie-configuration.hh"
-
-void set_chord_outline (Skyline *skyline,
-                        vector<Item *> bounds,
-                        Grob *common,
-                        Direction d);
-void set_tie_config_directions (Ties_configuration *tie_configs_ptr);
-void shift_small_ties (Ties_configuration *tie_configs,
-                       Grob *staff_referencer,
-                       Tie_details const &details);
-void final_shape_adjustment (Tie_configuration &conf,
-                             Tie_formatting_problem const &,
-                             Grob *staff_referencer);
-void
-set_chord_outlines (Drul_array<Skyline> *skyline_drul,
-                    vector<Grob *> ties,
-                    Grob *common);
-
-void
-set_manual_tie_configuration (Ties_configuration *tie_configs,
-                              bool *manual_override,
-                              SCM manual_configs
-                             );
-
-#endif /* TIE_COLUMN_FORMAT_HH */
index 32ffb45a955f1ec72a5cdf3d8dcd5680f7be191c..9da9e45a40a478aea507ac4eb7adaa6f1a7befc0 100644 (file)
@@ -46,7 +46,7 @@ public:
   /* computed. */
   Interval attachment_x_;
 
-  void add_score (Real, string);
+  void add_score (Real, const string&);
   Tie_configuration ();
   void center_tie_vertically (Tie_details const &);
   Bezier get_transformed_bezier (Tie_details const &) const;
@@ -72,8 +72,8 @@ class Ties_configuration : public vector<Tie_configuration>
   friend class Tie_formatting_problem;
 public:
   Ties_configuration ();
-  void add_score (Real amount, string description);
-  void add_tie_score (Real amount, int i, string description);
+  void add_score (Real amount, const string &description);
+  void add_tie_score (Real amount, int i, const string &description);
   Real score () const;
   void reset_score ();
   string card () const;
index e5004c2925cd7cda2530b0b343977d2e9d1660d5..ad044de86075d6d9e9178d05a4ed11fd8d81335d 100644 (file)
@@ -43,7 +43,7 @@ struct Translator_method_binding
   void invoke ()
   {
     if (method_)
-      (*method_) (translator_);
+      (translator_->*method_) ();
   }
 };
 
index 41e2d9745bd2fcf71c66a82e6aebd3f972fe6711..be6781eb030aec34b5d41cb1077b06347e0be71c 100644 (file)
@@ -136,9 +136,8 @@ public:
   virtual void initialize ();
   virtual void finalize ();
 
-  /* should maybe be virtual */
-  void connect_to_context (Context *c);
-  void disconnect_from_context (Context *c);
+  virtual void connect_to_context (Context *c);
+  virtual void disconnect_from_context (Context *c);
 
   void stop_translation_timestep ();
   void start_translation_timestep ();
index bc1e79b373554cc5dd2b720ddf444ddd4610a701..2b29c828bac6f18d80b151445d014b83578dc51f 100644 (file)
@@ -79,7 +79,7 @@ Input::set_location (Input const &i_start, Input const &i_end)
   [file:line:column:][warning:]message
 */
 string
-Input::message_string (string msg) const
+Input::message_string (const string &msg) const
 {
   if (source_file_)
     return msg + "\n" + source_file_->quote_input (start_);
@@ -93,7 +93,7 @@ Input::message_location () const
   return (source_file_) ? location_string () : "";
 }
 void
-Input::error (string s) const
+Input::error (const string &s) const
 {
   ::non_fatal_error (message_string (s), message_location ());
   // UGH, fix naming or usage (use non_fatal_error in most places, instead)
@@ -101,31 +101,31 @@ Input::error (string s) const
 }
 
 void
-Input::programming_error (string s) const
+Input::programming_error (const string &s) const
 {
   ::programming_error (message_string (s), message_location ());
 }
 
 void
-Input::non_fatal_error (string s) const
+Input::non_fatal_error (const string &s) const
 {
   ::non_fatal_error (message_string (s), message_location ());
 }
 
 void
-Input::warning (string s) const
+Input::warning (const string &s) const
 {
   ::warning (message_string (s), message_location ());
 }
 
 void
-Input::message (string s) const
+Input::message (const string &s) const
 {
   ::message (message_string (s), true, message_location ());
 }
 
 void
-Input::debug_output (string s) const
+Input::debug_output (const string &s) const
 {
   ::debug_output (message_string (s), true, message_location ());
 }
@@ -142,7 +142,7 @@ string
 Input::line_number_string () const
 {
   if (source_file_)
-    return to_string (source_file_->get_line (start_));
+    return ::to_string (source_file_->get_line (start_));
   return "?";
 }
 
index ffe784fae81ca4eb8fca4b81f88e62b8e8b15eea..d26e3e0d2887dde7ae79e999dcde65a9f4948044 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
   Jan Nieuwenhuizen <janneke@gnu.org>
 
   LilyPond is free software: you can redistribute it and/or modify
@@ -19,7 +19,7 @@
 */
 
 #include "interval-minefield.hh"
-#include "grob.hh"
+
 Interval_minefield::Interval_minefield (Interval feasible_placements, Real bulk)
 {
   feasible_placements_ = feasible_placements;
index 9941bc13c2abf79bc36fd25f952a084633d6e635..9cc808dde4491c11f87e928b001d1be1deedca0c 100644 (file)
@@ -43,7 +43,7 @@ Item::Item (SCM s)
 }
 
 /**
-   Item copy ctor.  Copy nothing: everything should be a elt property
+   Item copy ctor.  Copy nothing: everything should be an elt property
    or a special purpose pointer (such as broken_to_drul_[]) */
 Item::Item (Item const &s)
   : Grob (s)
index a7b65530fc28ffad5f4afabc2c1a51b95fb0afc1..fb691c00d806b60948cb187f44ad166ce4e7c80a 100644 (file)
@@ -58,7 +58,7 @@ Key_signature_interface::print (SCM smob)
     the cancellation signature.
   */
 
-  int last_pos = -1000;
+  Slice pos, overlapping_pos;
   SCM last_glyph_name = SCM_BOOL_F;
   SCM padding_pairs = me->get_property ("padding-pairs");
 
@@ -87,13 +87,17 @@ Key_signature_interface::print (SCM smob)
         me->warning (_ ("alteration not found"));
       else
         {
-          SCM what = scm_caar (s);
-
-          SCM proc = ly_lily_module_constant ("key-signature-interface::alteration-position");
-
-          int pos = scm_to_int (scm_call_3 (proc, what, scm_cdar (s), c0s));
-          acc.translate_axis (pos * inter, Y_AXIS);
-
+          SCM proc = ly_lily_module_constant ("key-signature-interface::alteration-positions");
+
+          pos.set_empty ();
+          Stencil column;
+          for (SCM pos_list = scm_call_3 (proc, scm_car (s), c0s, smob);
+               scm_is_pair (pos_list); pos_list = scm_cdr (pos_list))
+            {
+              int p = scm_to_int (scm_car (pos_list));
+              pos.add_point (p);
+              column.add_stencil (acc.translated (Offset (0, p * inter)));
+            }
           /*
             The natural sign (unlike flat & sharp)
             has vertical edges on both sides. A little padding is
@@ -106,13 +110,13 @@ Key_signature_interface::print (SCM smob)
           if (scm_is_pair (handle))
             padding = robust_scm2double (scm_cdr (handle), 0.0);
           else if (glyph_name == "accidentals.natural"
-                   && last_pos < pos + 2
-                   && last_pos > pos - 6)
+                   && !intersection (overlapping_pos, pos).is_empty ())
             padding += 0.3;
 
-          mol.add_at_edge (X_AXIS, LEFT, acc, padding);
+          mol.add_at_edge (X_AXIS, LEFT, column, padding);
 
-          last_pos = pos;
+          pos.widen (4);
+          overlapping_pos = pos + 2;
           last_glyph_name = glyph_name_scm;
         }
     }
@@ -129,6 +133,8 @@ ADD_INTERFACE (Key_signature_interface,
                "alteration-alist "
                "c0-position "
                "glyph-name-alist "
+               "flat-positions "
+               "sharp-positions "
                "padding "
                "padding-pairs "
               );
diff --git a/lily/kievan-ligature-engraver.cc b/lily/kievan-ligature-engraver.cc
new file mode 100644 (file)
index 0000000..92b9848
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2013 Aleksandr Andreev <aleksandr.andreev@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 "coherent-ligature-engraver.hh"
+#include "font-interface.hh"
+#include "international.hh"
+#include "kievan-ligature.hh"
+#include "paper-column.hh"
+#include "rhythmic-head.hh"
+#include "spanner.hh"
+#include "stream-event.hh"
+#include "warn.hh"
+
+#include "translator.icc"
+
+class Kievan_ligature_engraver : public Coherent_ligature_engraver
+{
+
+protected:
+  virtual Spanner *create_ligature_spanner ();
+  virtual void build_ligature (Spanner *ligature,
+                               vector<Grob_info> const &primitives);
+  DECLARE_TRANSLATOR_LISTENER (ligature);
+
+public:
+  TRANSLATOR_DECLARATIONS (Kievan_ligature_engraver);
+
+private:
+  void fold_up_primitives (vector<Grob_info> const &primitives, Real padding, Real &min_length);
+};
+
+IMPLEMENT_TRANSLATOR_LISTENER (Kievan_ligature_engraver, ligature);
+void
+Kievan_ligature_engraver::listen_ligature (Stream_event *ev)
+{
+  Ligature_engraver::listen_ligature (ev);
+}
+
+Kievan_ligature_engraver::Kievan_ligature_engraver ()
+{
+
+}
+
+Spanner *
+Kievan_ligature_engraver::create_ligature_spanner ()
+{
+  return make_spanner ("KievanLigature", SCM_EOL);
+}
+
+void
+Kievan_ligature_engraver::fold_up_primitives (vector<Grob_info> const &primitives,
+                                               Real padding, Real &min_length)
+{
+  Item *first = 0;
+  Real accumul_acc_space = 0.0;
+  // start us off with some padding on the left
+  min_length = padding;
+
+  for (vsize i = 0; i < primitives.size (); i++)
+    {
+      Item *current = dynamic_cast<Item *> (primitives[i].grob ());
+      Interval my_ext = current->extent (current, X_AXIS);
+      Real head_width = my_ext.length ();
+      if (i == 0)
+         first = current;
+
+      // must keep track of accidentals in spacing problem
+      Grob *acc_gr = unsmob_grob (current->get_object ("accidental-grob"));
+      if (acc_gr && i > 0)
+        {
+           Interval acc_ext = acc_gr->extent (acc_gr, X_AXIS);
+           accumul_acc_space += acc_ext.length();
+        }
+
+      move_related_items_to_column (current, first->get_column (),
+                                    min_length);
+
+      // check if we have any dots
+      if (size_t const dot_count = Rhythmic_head::dot_count (current))
+        {
+          Grob *dot_gr = Rhythmic_head::get_dots (current);
+
+          head_width += Font_interface::get_default_font (current)->
+              find_by_name ("dots.dotkievan").extent (X_AXIS).length() -
+              0.5 * (padding - accumul_acc_space);
+
+          dot_gr->translate_axis (0.5 * (padding - accumul_acc_space), X_AXIS);
+        }
+
+      // add more padding if we have an accidental coming up
+      if (i < primitives.size () - 1)
+        {
+           Item *next = dynamic_cast<Item *> (primitives[i + 1].grob ());
+           Grob *acc_gr = unsmob_grob (next->get_object ("accidental-grob"));
+           if (acc_gr)
+             {
+                Interval acc_ext = acc_gr->extent (acc_gr, X_AXIS);
+                padding += acc_ext.length();
+             }
+        }
+
+      min_length += head_width + padding - accumul_acc_space;
+
+    }
+
+}
+
+void
+Kievan_ligature_engraver::build_ligature (Spanner *ligature,
+                                            vector<Grob_info> const &primitives)
+{
+  Real min_length;
+
+  Real padding = robust_scm2double (ligature->get_property ("padding"), 0.0);
+  fold_up_primitives (primitives, padding, min_length);
+  if (robust_scm2double (ligature->get_property ("minimum-length"), 0.0)
+      < min_length)
+    ligature->set_property ("minimum-length", scm_from_double (min_length));
+
+}
+
+ADD_ACKNOWLEDGER (Kievan_ligature_engraver, rest);
+ADD_ACKNOWLEDGER (Kievan_ligature_engraver, ligature_head);
+
+ADD_TRANSLATOR (Kievan_ligature_engraver,
+                /* doc */
+                "Handle @code{Kievan_ligature_events} by glueing Kievan"
+                " heads together.",
+
+                /* create */
+                "KievanLigature ",
+
+                /* read */
+                "",
+
+                /* write */
+                ""
+               );
diff --git a/lily/kievan-ligature.cc b/lily/kievan-ligature.cc
new file mode 100644 (file)
index 0000000..21ea23e
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2013 Aleksandr Andreev <aleksandr.andreev@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 "kievan-ligature.hh"
+
+#include "international.hh"
+#include "item.hh"
+#include "warn.hh"
+
+MAKE_SCHEME_CALLBACK (Kievan_ligature, print, 1);
+SCM
+Kievan_ligature::print (SCM)
+{
+  return SCM_EOL;
+}
+
+ADD_INTERFACE (Kievan_ligature,
+               "A kievan ligature.",
+
+               /* properties */
+               "primitive "
+               "padding "
+              );
index 614874a8e83fa74c7220cbb097458160e7552220..2bb12c9cdcbb7c0c7e6d0ca3c696d0e47ac5b745 100644 (file)
@@ -95,7 +95,6 @@ Ledger_line_engraver::stop_spanner ()
   if (span_)
     {
       span_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn")));
-      Pointer_group_interface::set_ordered (span_, ly_symbol2scm ("elements"), false);
       span_ = 0;
     }
 }
index 114ddb3f02c0e5f98f314848cdae8d0be87495e2..de88ba402f6518fa44f068b3c431ce975fc25f69 100644 (file)
@@ -40,20 +40,15 @@ set_rods (Drul_array<Interval> const &current_extents,
           Drul_array<Interval> const &previous_extents,
           Item *current_column,
           Item *previous_column,
-          Real min_length_fraction)
+          Real min_length)
 {
-  Direction d = UP;
-  do
+  for (UP_and_DOWN (d))
     {
       if (!current_extents[d].is_empty ()
           && !previous_extents[d].is_empty ())
         {
-          Real total_head_length = previous_extents[d].length ()
-                                   + current_extents[d].length ();
-
           Rod rod;
-          rod.distance_ = total_head_length
-                          * (3 / 2 * min_length_fraction)
+          rod.distance_ = 2 * min_length
                           /*
                             we go from right to left.
                           */
@@ -65,7 +60,6 @@ set_rods (Drul_array<Interval> const &current_extents,
           rod.add_to_cols ();
         }
     }
-  while (flip (&d) != DOWN);
 }
 
 MAKE_SCHEME_CALLBACK (Ledger_line_spanner, set_spacing_rods, 1);
@@ -87,6 +81,7 @@ Ledger_line_spanner::set_spacing_rods (SCM smob)
 
   Drul_array<Interval> current_extents;
   Drul_array<Interval> previous_extents;
+  Real current_head_width = 0.0;
   Item *previous_column = 0;
   Item *current_column = 0;
 
@@ -108,12 +103,17 @@ Ledger_line_spanner::set_spacing_rods (SCM smob)
       if (staff_extent.contains (pos))
         continue;
 
+      /* Ambitus heads can appear out-of-order in heads[],
+       * but as part of prefatory matter, they need no rods */
+      if (h->internal_has_interface (ly_symbol2scm ("ambitus-interface")))
+        continue;
+
       Item *column = h->get_column ();
       if (current_column != column)
         {
           set_rods (current_extents, previous_extents,
                     current_column, previous_column,
-                    min_length_fraction);
+                    current_head_width * min_length_fraction);
 
           previous_column = current_column;
           current_column = column;
@@ -121,6 +121,7 @@ Ledger_line_spanner::set_spacing_rods (SCM smob)
 
           current_extents[DOWN].set_empty ();
           current_extents[UP].set_empty ();
+          current_head_width = 0.0;
         }
 
       Interval head_extent = h->extent (column, X_AXIS);
@@ -129,12 +130,13 @@ Ledger_line_spanner::set_spacing_rods (SCM smob)
         continue;
 
       current_extents[vdir].unite (head_extent);
+      current_head_width = max (current_head_width, head_extent.length ());
     }
 
   if (previous_column && current_column)
     set_rods (current_extents, previous_extents,
               current_column, previous_column,
-              min_length_fraction);
+              current_head_width * min_length_fraction);
 
   return SCM_UNSPECIFIED;
 }
@@ -324,14 +326,15 @@ Ledger_line_spanner::print (SCM smob)
 ADD_INTERFACE (Ledger_line_spanner,
                "This spanner draws the ledger lines of a staff.  This is a"
                " separate grob because it has to process all potential"
-               " collisions between all note heads.",
+               " collisions between all note heads.  The thickness of ledger"
+               " lines is controlled by the @code{ledger-line-thickness}"
+               " property of the @ref{StaffSymbol} grob.",
 
                /* properties */
                "gap "
                "length-fraction "
                "minimum-length-fraction "
                "note-heads "
-               "thickness "
               );
 
 struct Ledgered_interface
index 9fb4cb6d558429e8d76811d6cb2922ab1da9f6d0..3bad9f2e7e9e40da7ac95289db44186c04951e13 100644 (file)
@@ -1,4 +1,4 @@
-%{ // -*- mode: c++; c-file-style: "linux" -*-
+%{ // -*- mode: c++; c-file-style: "linux"; indent-tabs-mode: t -*-
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
@@ -86,13 +86,19 @@ SCM lookup_markup_list_command (string s);
 bool is_valid_version (string s);
 
 
-#define start_quote()  \
-       yy_push_state (quote);\
-       yylval.string = new string
+#define start_quote() do {                      \
+                yy_push_state (quote);          \
+                yylval = SCM_EOL;               \
+        } while (0)
 
-#define start_lyric_quote()    \
-       yy_push_state (lyric_quote);\
-       yylval.string = new string
+/*
+  The inside of \"violin1" is marked by commandquote mode
+*/
+
+#define start_command_quote() do {             \
+                yy_push_state (commandquote);  \
+                yylval = SCM_EOL;               \
+        } while (0)
 
 #define yylval (*lexval_)
 
@@ -122,11 +128,12 @@ SCM (* scm_parse_error_handler) (void *);
 %x figures
 %x incl
 %x lyrics
-%x lyric_quote
 %x longcomment
+%x maininput
 %x markup
 %x notes
 %x quote
+%x commandquote
 %x sourcefileline
 %x sourcefilename
 %x version
@@ -151,24 +158,23 @@ A         [a-zA-Z\200-\377]
 AA             {A}|_
 N              [0-9]
 ANY_CHAR       (.|\n)
-PUNCT          [][()?!:'`]
-SPECIAL_CHAR           [&@]
-NATIONAL       [\001-\006\021-\027\031\036]
-TEX            {AA}|-|{PUNCT}|{NATIONAL}|{SPECIAL_CHAR}
 WORD           {A}([-_]{A}|{A})*
 COMMAND                \\{WORD}
-
+/* SPECIAL category is for every letter that needs to get passed to
+ * the parser rather than being redefinable by the user */
+SPECIAL                [-+*/=<>{}!?_^'',.:]
+SHORTHAND      (.|\\.)
 UNSIGNED       {N}+
 E_UNSIGNED     \\{N}+
 FRACTION       {N}+\/{N}+
 INT            -?{UNSIGNED}
 REAL           ({INT}\.{N}*)|(-?\.{N}+)
+STRICTREAL      {UNSIGNED}\.{UNSIGNED}
 WHITE          [ \n\t\f\r]
 HORIZONTALWHITE                [ \t]
 BLACK          [^ \n\t\f\r]
 RESTNAME       [rs]
-LYRICS         ({AA}|{TEX})[^0-9 \t\n\r\f]*
-ESCAPED                [nt\\'"]
+ESCAPED                [nt\\''""]
 EXTENDER       __
 HYPHEN         --
 BOM_UTF8       \357\273\277
@@ -189,7 +195,7 @@ BOM_UTF8    \357\273\277
 
   /* produce requested token */
   int type = scm_to_int (scm_caar (extra_tokens_));
-  yylval.scm = scm_cdar (extra_tokens_);
+  yylval = scm_cdar (extra_tokens_);
   extra_tokens_ = scm_cdr (extra_tokens_);
   if (scm_is_null (extra_tokens_))
     yy_pop_state ();
@@ -202,7 +208,7 @@ BOM_UTF8    \357\273\277
 
   /* produce requested token */
   int type = scm_to_int (scm_caar (extra_tokens_));
-  yylval.scm = scm_cdar (extra_tokens_);
+  yylval = scm_cdar (extra_tokens_);
   extra_tokens_ = scm_cdr (extra_tokens_);
   if (scm_is_null (extra_tokens_))
     yy_pop_state ();
@@ -225,16 +231,10 @@ BOM_UTF8  \357\273\277
   "%{" {
        yy_push_state (longcomment);
   }
-  %[^{\n\r][^\n\r]*[\n\r]      {
-         (void) YYText_utf8 ();
-  }
-  %[^{\n\r]    { // backup rule
+  %[^{\n\r][^\n\r]*[\n\r]?     {
          (void) YYText_utf8 ();
   }
-  %[\n\r]      {
-  }
-  %[^{\n\r][^\n\r]*    {
-         (void) YYText_utf8 ();
+  %[\n\r]?     {
   }
   {WHITE}+     {
 
@@ -256,7 +256,7 @@ BOM_UTF8    \357\273\277
 <INITIAL,chords,lyrics,notes,figures>\\sourcefileline{WHITE}*  {
        yy_push_state (sourcefileline);
 }
-<version>\"[^"]*\"     { /* got the version number */
+<version>\"[^""]*\"     { /* got the version number */
        string s (YYText_utf8 () + 1);
        s = s.substr (0, s.rfind ('\"'));
 
@@ -265,10 +265,10 @@ BOM_UTF8  \357\273\277
        SCM top_scope = scm_car (scm_last_pair (scopes_));
        scm_module_define (top_scope, ly_symbol2scm ("version-seen"), SCM_BOOL_T);
 
-       if (!is_valid_version (s))
+       if (!is_valid_version (s)) {
+                yylval = SCM_UNSPECIFIED;
                return INVALID;
-
-
+        }
 }
 <sourcefilename>\"[^""]*\"     {
        string s (YYText_utf8 () + 1);
@@ -321,10 +321,14 @@ BOM_UTF8  \357\273\277
        if (!is_main_input_)
        {
                start_main_input ();
+               main_input_level_ = include_stack_.size ();
                is_main_input_ = true;
+               int state = YYSTATE;
+               yy_push_state (maininput);
+               yy_push_state (state);
        }
        else
-               error (_ ("\\maininput not allowed outside init files"));
+               LexerError (_ ("\\maininput not allowed outside init files").c_str ());
 }
 
 <INITIAL,chords,lyrics,figures,notes>\\include           {
@@ -384,8 +388,8 @@ BOM_UTF8    \357\273\277
 }
 
 <incl,version,sourcefilename>\"[^""]*   { // backup rule
-       error (_ ("end quote missing"));
-       exit (1);
+       LexerError (_ ("end quote missing").c_str ());
+       yy_pop_state ();
 }
 
     /* Flex picks the longest matching pattern including trailing
@@ -397,16 +401,18 @@ BOM_UTF8  \357\273\277
 <chords,notes,figures>{RESTNAME}/[-_]  |  // pseudo backup rule
 <chords,notes,figures>{RESTNAME}       {
        char const *s = YYText ();
-       yylval.scm = scm_from_locale_string (s);
+       yylval = scm_from_locale_string (s);
        return RESTNAME;
 }
 <chords,notes,figures>q/[-_]   | // pseudo backup rule
 <chords,notes,figures>q        {
+        yylval = SCM_UNSPECIFIED;
        return CHORD_REPETITION;
 }
 
 <chords,notes,figures>R/[-_]   | // pseudo backup rule
 <chords,notes,figures>R                {
+        yylval = SCM_UNSPECIFIED;
        return MULTI_MEASURE_REST;
 }
 <INITIAL,chords,figures,lyrics,markup,notes>#  { //embedded scm
@@ -425,7 +431,7 @@ BOM_UTF8    \357\273\277
        }
        char_count_stack_.back () += n;
 
-       yylval.scm = sval;
+       yylval = sval;
        return SCM_TOKEN;
 }
 
@@ -445,38 +451,61 @@ BOM_UTF8  \357\273\277
        sval = eval_scm (sval, '$');
 
        int token = scan_scm_id (sval);
-       if (!scm_is_eq (yylval.scm, SCM_UNSPECIFIED))
+       if (!scm_is_eq (yylval, SCM_UNSPECIFIED))
                return token;
 }
 
 <INITIAL,notes,lyrics>{ 
        \<\<    {
+                yylval = SCM_UNSPECIFIED;
                return DOUBLE_ANGLE_OPEN;
        }
        \>\>    {
+                yylval = SCM_UNSPECIFIED;
                return DOUBLE_ANGLE_CLOSE;
        }
 }
 
 <INITIAL,notes>{
        \<      {
+                yylval = SCM_UNSPECIFIED;
                return ANGLE_OPEN;
        }
        \>      {
+                yylval = SCM_UNSPECIFIED;
                return ANGLE_CLOSE;
        }
 }
 
 <figures>{
        _       {
+                yylval = SCM_UNSPECIFIED;
                return FIGURE_SPACE;
        }
        \>              {
+                yylval = SCM_UNSPECIFIED;
                return FIGURE_CLOSE;
        }
        \<      {
+                yylval = SCM_UNSPECIFIED;
                return FIGURE_OPEN;
        }
+       \\\+    {
+               yylval = SCM_UNSPECIFIED;
+               return E_PLUS;
+       }
+       \\!     {
+               yylval = SCM_UNSPECIFIED;
+               return E_EXCLAMATION;
+       }
+       \\\\    {
+               yylval = SCM_UNSPECIFIED;
+               return E_BACKSLASH;
+       }
+       [][]    {
+               yylval = SCM_UNSPECIFIED;
+               return  YYText ()[0];
+       }
 }
 
 <notes,figures>{
@@ -484,85 +513,115 @@ BOM_UTF8 \357\273\277
        {WORD}  {
                return scan_bare_word (YYText_utf8 ());
        }
-
+       \\\"    {
+               start_command_quote ();
+       }
        {COMMAND}/[-_]  | // backup rule
        {COMMAND}       {
                return scan_escaped_word (YYText_utf8 () + 1); 
        }
        {FRACTION}      {
-               yylval.scm =  scan_fraction (YYText ());
+               yylval =  scan_fraction (YYText ());
                return FRACTION;
        }
-       {UNSIGNED}/\/   | // backup rule
-       {UNSIGNED}              {
-               yylval.scm = scm_c_read_string (YYText ());
+       {STRICTREAL}    {
+               yylval = scm_c_read_string (YYText ());
+               return REAL;
+       }
+       {UNSIGNED}/[/.] | // backup rule
+       {UNSIGNED}      {
+               yylval = scm_c_read_string (YYText ());
                return UNSIGNED;
        }
        {E_UNSIGNED}    {
-               yylval.i = String_convert::dec2int (string (YYText () +1));
+               yylval = scm_c_read_string (YYText () + 1);
                return E_UNSIGNED;
        }
 }
 
-<quote,lyric_quote>{
+<quote,commandquote>{
        \\{ESCAPED}     {
-               *yylval.string += to_string (escaped_char (YYText ()[1]));
+                char c = escaped_char (YYText ()[1]);
+               yylval = scm_cons (scm_from_locale_stringn (&c, 1),
+                                   yylval);
        }
        [^\\""]+        {
-               *yylval.string += YYText_utf8 ();
+                yylval = scm_cons (scm_from_locale_string (YYText_utf8 ()),
+                                   yylval);
        }
        \"      {
 
+               /* yylval is union. Must remember STRING before setting SCM*/
+
+                yylval = scm_string_concatenate_reverse (yylval,
+                                                         SCM_UNDEFINED,
+                                                         SCM_UNDEFINED);
+
+               if (get_state () == commandquote) {
+                       yy_pop_state ();
+                       return scan_escaped_word (ly_scm2string (yylval));
+               }
+
                yy_pop_state ();
 
-               /* yylval is union. Must remember STRING before setting SCM*/
-               string *sp = yylval.string;
-               yylval.scm = ly_string2scm (*sp);
-               delete sp;
-               return is_lyric_state () ? LYRICS_STRING : STRING;
+               return STRING;
        }
        \\      {
-               *yylval.string += YYText ();
+                yylval = scm_cons (scm_from_locale_string (YYText ()),
+                                   yylval);
        }
 }
 
 <lyrics>{
        \" {
-               start_lyric_quote ();
+               start_quote ();
        }
        {FRACTION}      {
-               yylval.scm =  scan_fraction (YYText ());
+               yylval =  scan_fraction (YYText ());
                return FRACTION;
        }
-       {UNSIGNED}/\/   | // backup rule
+       {STRICTREAL}    {
+               yylval = scm_c_read_string (YYText ());
+               return REAL;
+       }
+       {UNSIGNED}/[/.] | // backup rule
        {UNSIGNED}              {
-               yylval.scm = scm_c_read_string (YYText ());
+               yylval = scm_c_read_string (YYText ());
                return UNSIGNED;
        }
+       \\\"    {
+               start_command_quote ();
+       }
        {COMMAND}/[-_]  | // backup rule
        {COMMAND}       {
                return scan_escaped_word (YYText_utf8 () + 1);
        }
-       {LYRICS} {
+       \\.|\|  {
+               // UTF-8 already covered by COMMAND
+               return scan_shorthand (YYText ());
+       }
+       /* Characters needed to express durations, assignments */
+       [*.=]   {
+                yylval = SCM_UNSPECIFIED;
+               return YYText ()[0];
+       }
+       [^|*.=$#{}\"\\ \t\n\r\f0-9][^$#{}\"\\ \t\n\r\f0-9]* {
                /* ugr. This sux. */
-               string s (YYText_utf8 ()); 
+               string s (YYText_utf8 ());
+                yylval = SCM_UNSPECIFIED;
                if (s == "__")
-                       return yylval.i = EXTENDER;
+                       return EXTENDER;
                if (s == "--")
-                       return yylval.i = HYPHEN;
+                       return HYPHEN;
                s = lyric_fudge (s);
+               yylval = ly_string2scm (s);
 
-               char c = s[s.length () - 1];
-               if (c == '{' ||  c == '}') // brace open is for not confusing dumb tools.
-                       here_input ().warning (
-                               _ ("Brace found at end of lyric.  Did you forget a space?"));
-               yylval.scm = ly_string2scm (s);
-
-
-               return LYRICS_STRING;
+               return STRING;
        }
-       . {
-               return YYText ()[0]; // LYRICS already catches all multibytes.
+       /* This should really just cover {} */
+       [{}] {
+                yylval = SCM_UNSPECIFIED;
+               return YYText ()[0];
        }
 }
 <chords>{
@@ -570,44 +629,53 @@ BOM_UTF8  \357\273\277
        {WORD}  {
                return scan_bare_word (YYText_utf8 ());
        }
+       \\\"    {
+               start_command_quote ();
+       }
        {COMMAND}/[-_]  | // backup rule
        {COMMAND}       {
                return scan_escaped_word (YYText_utf8 () + 1);
        }
        {FRACTION}      {
-               yylval.scm =  scan_fraction (YYText ());
+               yylval =  scan_fraction (YYText ());
                return FRACTION;
        }
        {UNSIGNED}/\/   | // backup rule
        {UNSIGNED}              {
-               yylval.scm = scm_c_read_string (YYText ());
+               yylval = scm_c_read_string (YYText ());
                return UNSIGNED;
        }
        -  {
+                yylval = SCM_UNSPECIFIED;
                return CHORD_MINUS;
        }
        :  {
+                yylval = SCM_UNSPECIFIED;
                return CHORD_COLON;
        }
        \/\+ {
+                yylval = SCM_UNSPECIFIED;
                return CHORD_BASS;
        }
        \/  {
+                yylval = SCM_UNSPECIFIED;
                return CHORD_SLASH;
        }
        \^  {
+                yylval = SCM_UNSPECIFIED;
                return CHORD_CARET;
        }
-       . {
-               return YYText ()[0]; // WORD catches all multibyte.
-       }
 }
 
 
 <markup>{
        \\score {
+                yylval = SCM_UNSPECIFIED;
                return SCORE;
        }
+       \\\"    {
+               start_command_quote ();
+       }
        {COMMAND}/[-_]  | // backup rule
        {COMMAND} {
                string str (YYText_utf8 () + 1);
@@ -639,7 +707,7 @@ BOM_UTF8    \357\273\277
                // in reverse order, so the first token pushed in the
                // loop will be EXPECT_NO_MORE_ARGS.
 
-               yylval.scm = scm_car(s);
+               yylval = scm_car(s);
 
                // yylval now contains the function to call as token
                // value (for token type MARKUP_FUNCTION or
@@ -659,41 +727,47 @@ BOM_UTF8  \357\273\277
                }
                return token_type;
        }
-       [{}]    {
-               return YYText ()[0];
-       }
        [^$#{}\"\\ \t\n\r\f]+ {
                string s (YYText_utf8 ()); 
 
-               char c = s[s.length () - 1];
-               /* brace open is for not confusing dumb tools.  */
-               if (c == '{' ||  c == '}')
-                       here_input ().warning (
-                               _ ("Brace found at end of markup.  Did you forget a space?"));
-               yylval.scm = ly_string2scm (s);
-
-
+               yylval = ly_string2scm (s);
                return STRING;
        }
-       .  {
-               return YYText()[0];  // Above is catchall for multibyte
+       [{}]  {
+                yylval = SCM_UNSPECIFIED;
+               return YYText ()[0];
        }
 }
 
 <longcomment><<EOF>> {
                LexerError (_ ("EOF found inside a comment").c_str ());
-               is_main_input_ = false; // should be safe , can't have \include in --safe.
-               if (!close_input ())
-                 yyterminate (); // can't move this, since it actually rets a YY_NULL
+               yy_pop_state ();
        }
 
-<<EOF>> { if (is_main_input_)
+<quote,commandquote><<EOF>> {
+       LexerError (_ ("EOF found inside string").c_str ());
+       yy_pop_state ();
+}
+
+<<EOF>> {
+        yylval = SCM_UNSPECIFIED;
+        if (is_main_input_)
        {
-               /* 2 = init.ly + current file.
-                  > because we're before closing, but is_main_input_ should
-                  reflect after.
-               */ 
-               is_main_input_ = include_stack_.size () > 2;
+               is_main_input_ = include_stack_.size () > main_input_level_;
+               if (!is_main_input_)
+               {
+                       main_input_level_ = 0;
+                       pop_state ();
+                       if (YYSTATE != maininput)
+                       {
+                               LexerError (_ ("Unfinished main input").c_str ());
+                               do {
+                                       yy_pop_state ();
+                               } while (YYSTATE != maininput);
+                       }
+                       extra_tokens_ = SCM_EOL;
+                       yy_pop_state ();
+               }
                if (!close_input () || !is_main_input_)
                /* Returns YY_NULL */
                        yyterminate ();
@@ -703,11 +777,21 @@ BOM_UTF8  \357\273\277
                yyterminate ();
 }
 
+<maininput>{ANY_CHAR} {
+       while (include_stack_.size () > main_input_level_
+              && close_input ())
+               ;
+       yyterminate ();
+}
+
 <INITIAL>{
        {WORD}/[-_]     | // backup rule
        {WORD}  {
                return scan_bare_word (YYText_utf8 ());
        }
+       \\\"    {
+               start_command_quote ();
+       }
        {COMMAND}/[-_]  | // backup rule
        {COMMAND}       {
                return scan_escaped_word (YYText_utf8 () + 1);
@@ -715,72 +799,41 @@ BOM_UTF8  \357\273\277
 }
 
 {FRACTION}     {
-       yylval.scm =  scan_fraction (YYText ());
+       yylval =  scan_fraction (YYText ());
        return FRACTION;
 }
 
 -{UNSIGNED}    | // backup rule
 {REAL}         {
-       yylval.scm = scm_c_read_string (YYText ());
+       yylval = scm_c_read_string (YYText ());
        return REAL;
 }
 
 {UNSIGNED}/\/  | // backup rule
 {UNSIGNED}     {
-       yylval.scm = scm_c_read_string (YYText ());
+       yylval = scm_c_read_string (YYText ());
        return UNSIGNED;
 }
 
 
-[{}]   {
-
+-/\.   { // backup rule
+        yylval = SCM_UNSPECIFIED;
        return YYText ()[0];
 }
 
--/\.   | // backup rule
-[*:=]          {
-       char c = YYText ()[0];
-
-       return c;
-}
-
-<INITIAL,notes,figures>.       {
+<INITIAL,chords,lyrics,figures,notes>{SPECIAL} {
+        yylval = SCM_UNSPECIFIED;
        return YYText ()[0];
 }
 
-<INITIAL,lyrics,notes,figures>\\. {
-    char c = YYText ()[1];
-
-    switch (c) {
-    case '>':
-       return E_ANGLE_CLOSE;
-    case '<':
-       return E_ANGLE_OPEN;
-    case '!':
-       return E_EXCLAMATION;
-    case '(':
-       return E_OPEN;
-    case ')':
-       return E_CLOSE;
-    case '[':
-       return E_BRACKET_OPEN;
-    case '+':
-       return E_PLUS;
-    case ']':
-       return E_BRACKET_CLOSE;
-    case '~':
-       return E_TILDE;
-    case '\\':
-       return E_BACKSLASH;
-
-    default:
-       return E_CHAR;
-    }
+<INITIAL,chords,lyrics,figures,notes>{SHORTHAND}       {
+       return scan_shorthand (YYText_utf8 ()); // should not be utf-8
 }
 
 <*>.[\200-\277]*       {
        string msg = _f ("invalid character: `%s'", YYText_utf8 ());
        LexerError (msg.c_str ());
+        yylval = SCM_UNSPECIFIED;
        return '%';  // Better not return half a utf8 character.
 }
 
@@ -867,7 +920,9 @@ Lily_lexer::pop_state ()
        if (YYSTATE == notes || YYSTATE == chords)
                pitchname_tab_stack_ = scm_cdr (pitchname_tab_stack_);
 
-       yy_pop_state ();
+       // don't cross the maininput threshold
+       if (YYSTATE != maininput)
+               yy_pop_state ();
 
        if (extra) {
                hidden_state_ = YYSTATE;
@@ -878,32 +933,57 @@ Lily_lexer::pop_state ()
 int
 Lily_lexer::identifier_type (SCM sid)
 {
-       int k = try_special_identifiers (&yylval.scm , sid);
+       int k = try_special_identifiers (&yylval , sid);
        return k >= 0  ? k : SCM_IDENTIFIER;
 }
 
 
 int
-Lily_lexer::scan_escaped_word (string str)
+Lily_lexer::scan_escaped_word (const string &str)
 {
        // use more SCM for this.
 
 //     SCM sym = ly_symbol2scm (str.c_str ());
 
+        yylval = SCM_UNSPECIFIED;
        int i = lookup_keyword (str);
-       if (i == MARKUP && is_lyric_state ())
-               return LYRIC_MARKUP;
+
        if (i != -1)
                return i;
 
        SCM sid = lookup_identifier (str);
+       if (Music *m = unsmob_music (sid))
+       {
+               m->set_spot (override_input (here_input ()));
+       }
+
        if (sid != SCM_UNDEFINED)
                return scan_scm_id (sid);
 
        string msg (_f ("unknown escaped string: `\\%s'", str));        
        LexerError (msg.c_str ());
 
-       yylval.scm = ly_string2scm (str);
+       yylval = ly_string2scm (str);
+
+       return STRING;
+}
+
+int
+Lily_lexer::scan_shorthand (const string &str)
+{
+       SCM sid = lookup_identifier (str);
+       if (Music *m = unsmob_music (sid))
+       {
+               m->set_spot (override_input (here_input ()));
+       }
+
+       if (sid != SCM_UNDEFINED)
+               return scan_scm_id (sid);
+
+       string msg (_f ("undefined character or shorthand: %s", str));  
+       LexerError (msg.c_str ());
+
+       yylval = ly_string2scm (str);
 
        return STRING;
 }
@@ -915,7 +995,7 @@ Lily_lexer::scan_scm_id (SCM sid)
        {
                int funtype = SCM_FUNCTION;
 
-               yylval.scm = sid;
+               yylval = sid;
 
                SCM s = get_music_function_signature (sid);
                SCM cs = scm_car (s);
@@ -945,11 +1025,7 @@ Lily_lexer::scan_scm_id (SCM sid)
                                cs = SCM_CAR (cs);
                        }
                        
-                       if (cs == Pitch_type_p_proc)
-                               push_extra_token (EXPECT_PITCH);
-                       else if (cs == Duration_type_p_proc)
-                               push_extra_token (EXPECT_DURATION);
-                       else if (ly_is_procedure (cs))
+                       if (ly_is_procedure (cs))
                                push_extra_token (EXPECT_SCM, cs);
                        else
                        {
@@ -961,12 +1037,12 @@ Lily_lexer::scan_scm_id (SCM sid)
                }
                return funtype;
        }
-       yylval.scm = sid;
+       yylval = sid;
        return identifier_type (sid);
 }
 
 int
-Lily_lexer::scan_bare_word (string str)
+Lily_lexer::scan_bare_word (const string &str)
 {
        SCM sym = ly_symbol2scm (str.c_str ());
        if ((YYSTATE == notes) || (YYSTATE == chords)) {
@@ -975,20 +1051,20 @@ Lily_lexer::scan_bare_word (string str)
                        handle = scm_hashq_get_handle (scm_cdar (pitchname_tab_stack_), sym);
                
                if (scm_is_pair (handle)) {
-                       yylval.scm = scm_cdr (handle);
-                       if (unsmob_pitch (yylval.scm)) 
+                       yylval = scm_cdr (handle);
+                       if (unsmob_pitch (yylval))
                            return (YYSTATE == notes) ? NOTENAME_PITCH : TONICNAME_PITCH;
-                       else if (scm_is_symbol (yylval.scm))
+                       else if (scm_is_symbol (yylval))
                            return DRUM_PITCH;
                }
                else if ((YYSTATE == chords)
                        && (handle = scm_hashq_get_handle (chordmodifier_tab_, sym))!= SCM_BOOL_F)
                {
-                   yylval.scm = scm_cdr (handle);
+                   yylval = scm_cdr (handle);
                    return CHORD_MODIFIER;
                }
        }
-       yylval.scm = ly_string2scm (str);
+       yylval = ly_string2scm (str);
        return STRING;
 }
 
@@ -1056,19 +1132,26 @@ Lily_lexer::eval_scm (SCM readerdata, char extra_token)
                sval = scm_struct_ref (sval, SCM_INUM0);
 
                if (scm_is_pair (sval)) {
-                       for (SCM v = scm_reverse (scm_cdr (sval));
-                            scm_is_pair (v);
-                            v = scm_cdr (v))
+                       for (SCM p = scm_reverse (scm_cdr (sval));
+                            scm_is_pair (p);
+                            p = scm_cdr (p))
                        {
+                               SCM v = scm_car (p);
+                               if (Music *m = unsmob_music (v))
+                               {
+                                       if (!unsmob_input (m->get_property ("origin")))
+                                               m->set_spot (override_input (here_input ()));
+                               }
+                                       
                                int token;
                                switch (extra_token) {
                                case '$':
-                                       token = scan_scm_id (scm_car (v));
-                                       if (!scm_is_eq (yylval.scm, SCM_UNSPECIFIED))
-                                               push_extra_token (token, yylval.scm);
+                                       token = scan_scm_id (v);
+                                       if (!scm_is_eq (yylval, SCM_UNSPECIFIED))
+                                               push_extra_token (token, yylval);
                                        break;
                                case '#':
-                                       push_extra_token (SCM_IDENTIFIER, scm_car (v));
+                                       push_extra_token (SCM_IDENTIFIER, v);
                                        break;
                                }
                        }
@@ -1077,6 +1160,12 @@ Lily_lexer::eval_scm (SCM readerdata, char extra_token)
                        sval = SCM_UNSPECIFIED;
        }
 
+       if (Music *m = unsmob_music (sval))
+       {
+               if (!unsmob_input (m->get_property ("origin")))
+                       m->set_spot (override_input (here_input ()));
+       }
+
        return sval;
 }
 
index fb6f54c7064e97d6352d73a8417b599f58822c66..297337a976eb404c7b4096eb26307fb29c537578 100644 (file)
  * produce a single connected graphical object of fixed width,
  * consisting of noteheads and other primitives.  Space may be
  * inserted only after each ligature, if necessary, but in no case
- * between the primitives of the ligature.  Accidentals have to be put
+ * between the primitives of the ligature. The same approach is
+ * used for Kievan notation ligatures, or, rather melismas.
+ * Though these are not single connected objects, they behave much
+ * in the same way and have a fixed, small amount of space between
+ * noteheads. Except in Kievan "ligatures", accidentals have to be put
  * to the left of the ligature, and not to the left of individual
- * noteheads.  Class Coherent_ligature_engraver is the common
+ * noteheads. In Kievan ligatures, the B-flat may be part of the
+ * ligature itself. Class Coherent_ligature_engraver is the common
  * superclass for all of these engravers.
  *
  * The second category is for engravers that are relaxed in the sense
index e8380324fbe40f84311c5592c4100046c99e7194..06018c4c9c48502dde6b90eedd16fd05c17c6acf 100644 (file)
@@ -62,7 +62,7 @@ ly_scm_write_string (SCM s)
 SCM
 ly_quote_scm (SCM s)
 {
-  return scm_list_n (ly_symbol2scm ("quote"), s, SCM_UNDEFINED);
+  return scm_list_2 (ly_symbol2scm ("quote"), s);
 }
 
 string
@@ -75,13 +75,13 @@ ly_symbol2string (SCM s)
 }
 
 string
-robust_symbol2string (SCM sym, string str)
+robust_symbol2string (SCM sym, const string &str)
 {
   return scm_is_symbol (sym) ? ly_symbol2string (sym) : str;
 }
 
 string
-gulp_file_to_string (string fn, bool must_exist, int size)
+gulp_file_to_string (const string &fn, bool must_exist, int size)
 {
   string s = global_path.find (fn);
   if (s == "")
@@ -355,8 +355,23 @@ SCM
 ly_deep_copy (SCM src)
 {
   if (scm_is_pair (src))
-    return scm_cons (ly_deep_copy (scm_car (src)), ly_deep_copy (scm_cdr (src)));
-  else if (scm_is_vector (src))
+    {
+      SCM res = SCM_EOL;
+      do
+        {
+          res = scm_cons (ly_deep_copy (scm_car (src)), res);
+          src = scm_cdr (src);
+        }
+      while (scm_is_pair (src));
+      // Oh, come on, GUILE.  Why do you require the second argument
+      // of scm_reverse_x to be a proper list?  That makes no sense.
+      // return scm_reverse_x (res, ly_deep_copy (src));
+      SCM last_cons = res;
+      res = scm_reverse_x (res, SCM_EOL);
+      scm_set_cdr_x (last_cons, ly_deep_copy (src));
+      return res;
+    }
+  if (scm_is_vector (src))
     {
       int len = scm_c_vector_length (src);
       SCM nv = scm_c_make_vector (len, SCM_UNDEFINED);
@@ -365,6 +380,7 @@ ly_deep_copy (SCM src)
           SCM si = scm_from_int (i);
           scm_vector_set_x (nv, si, ly_deep_copy (scm_vector_ref (src, si)));
         }
+      return nv;
     }
   return src;
 }
@@ -383,31 +399,11 @@ print_scm_val (SCM val)
 bool
 type_check_assignment (SCM sym, SCM val, SCM type_symbol)
 {
-  bool ok = true;
-
-  /*
-    Always succeeds.
-
-
-    TODO: should remove #f from allowed vals?
-  */
-  if (val == SCM_EOL || val == SCM_BOOL_F)
-    return ok;
 
+  // If undefined, some internal function caused it...should never happen.
+  assert (val != SCM_UNDEFINED);
   if (!scm_is_symbol (sym))
-#if 0
     return false;
-#else
-    /*
-      This is used for autoBeamSettings.
-
-      TODO: deprecate the use of \override and \revert for
-      autoBeamSettings?
-
-      or use a symbol autoBeamSettingS?
-    */
-    return true;
-#endif
 
   SCM type = scm_object_property (sym, type_symbol);
 
@@ -423,26 +419,34 @@ type_check_assignment (SCM sym, SCM val, SCM type_symbol)
         scm_throw (ly_symbol2scm ("ly-file-failed"), scm_list_3 (ly_symbol2scm ("typecheck"),
                                                                  sym, val));
 
-      warning (_ ("doing assignment anyway"));
+      warning (_ ("skipping assignment"));
+      return false;
     }
-  else
+
+  /*
+    Always succeeds.
+
+
+    TODO: should remove #f from allowed vals?
+  */
+  if (val == SCM_EOL || val == SCM_BOOL_F)
+    return true;
+
+  if (val != SCM_EOL
+      && ly_is_procedure (type)
+      && scm_call_1 (type, val) == SCM_BOOL_F)
     {
-      if (val != SCM_EOL
-          && ly_is_procedure (type)
-          && scm_call_1 (type, val) == SCM_BOOL_F)
-        {
-          ok = false;
-          SCM typefunc = ly_lily_module_constant ("type-name");
-          SCM type_name = scm_call_1 (typefunc, type);
-
-          warning (_f ("type check for `%s' failed; value `%s' must be of type `%s'",
-                       ly_symbol2string (sym).c_str (),
-                       print_scm_val (val),
-                       ly_scm2string (type_name).c_str ()));
-          progress_indication ("\n");
-        }
+      SCM typefunc = ly_lily_module_constant ("type-name");
+      SCM type_name = scm_call_1 (typefunc, type);
+      
+      warning (_f ("type check for `%s' failed; value `%s' must be of type `%s'",
+                   ly_symbol2string (sym).c_str (),
+                   print_scm_val (val),
+                   ly_scm2string (type_name).c_str ()));
+      progress_indication ("\n");
+      return false;
     }
-  return ok;
+  return true;
 }
 
 /* some SCM abbrevs
@@ -550,10 +554,10 @@ ly_floatvector2scm (vector<Real> v)
 }
 
 string
-robust_scm2string (SCM k, string s)
+robust_scm2string (SCM k, const string &s)
 {
   if (scm_is_string (k))
-    s = ly_scm2string (k);
+    return ly_scm2string (k);
   return s;
 }
 
index 39aeb78dd14c0fe9cd9bce93f50cb365f748e5c3..c72ff8fc129eca056015f930b7a94c02d528902a 100644 (file)
@@ -96,6 +96,7 @@ Lily_lexer::Lily_lexer (Sources *sources, Lily_parser *parser)
   scopes_ = SCM_EOL;
   error_level_ = 0;
   is_main_input_ = false;
+  main_input_level_ = 0;
   start_module_ = SCM_EOL;
   extra_tokens_ = SCM_EOL;
   smobify_self ();
@@ -105,7 +106,8 @@ Lily_lexer::Lily_lexer (Sources *sources, Lily_parser *parser)
   chordmodifier_tab_ = scm_make_vector (scm_from_int (1), SCM_EOL);
 }
 
-Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser)
+Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser,
+                        SCM override_input)
   : Includable_lexer ()
 {
   parser_ = parser;
@@ -118,8 +120,11 @@ Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser)
 
   error_level_ = 0;
   is_main_input_ = src.is_main_input_;
+  main_input_level_ = 0;
 
   extra_tokens_ = SCM_EOL;
+  if (unsmob_input (override_input))
+    override_input_ = *unsmob_input (override_input);
 
   smobify_self ();
 
@@ -173,7 +178,7 @@ Lily_lexer::set_current_scope ()
 }
 
 int
-Lily_lexer::lookup_keyword (string s)
+Lily_lexer::lookup_keyword (const string &s)
 {
   return keytable_->lookup (s.c_str ());
 }
@@ -212,7 +217,7 @@ Lily_lexer::lookup_identifier_symbol (SCM sym)
 }
 
 SCM
-Lily_lexer::lookup_identifier (string name)
+Lily_lexer::lookup_identifier (const string &name)
 {
   return lookup_identifier_symbol (ly_symbol2scm (name.c_str ()));
 }
@@ -231,13 +236,13 @@ Lily_lexer::start_main_input ()
 }
 
 void
-Lily_lexer::new_input (string str, string d, Sources *ss)
+Lily_lexer::new_input (const string &str, string d, Sources *ss)
 {
   Includable_lexer::new_input (str, d, ss);
 }
 
 void
-Lily_lexer::new_input (string str, Sources *ss)
+Lily_lexer::new_input (const string &str, Sources *ss)
 {
   if (is_main_input_ && be_safe_global)
     {
@@ -333,6 +338,13 @@ Lily_lexer::here_input () const
   return Input (*lexloc_);
 }
 
+Input const &
+Lily_lexer::override_input (Input const &in) const
+{
+  return override_input_.get_source_file ()
+    ? override_input_ : in;
+}
+
 void
 Lily_lexer::prepare_for_next_token ()
 {
index 059cac3149d23b150b2e9f1164f6ac03e96713c3..74d3feb65349a37f54e46a9e6437ca6ebefccca2 100644 (file)
@@ -146,11 +146,12 @@ LY_DEFINE (ly_parser_lexer, "ly:parser-lexer",
 }
 
 LY_DEFINE (ly_parser_clone, "ly:parser-clone",
-           1, 1, 0, (SCM parser_smob, SCM closures),
+           1, 2, 0, (SCM parser_smob, SCM closures, SCM location),
            "Return a clone of @var{parser-smob}.  An association list"
            " of port positions to closures can be specified in @var{closures}"
            " in order to have @code{$} and @code{#} interpreted in their original"
-           " lexical environment.")
+           " lexical environment.  If @var{location} is a valid location,"
+           " it becomes the source of all music expressions inside.")
 {
   LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
   Lily_parser *parser = unsmob_lily_parser (parser_smob);
@@ -158,7 +159,7 @@ LY_DEFINE (ly_parser_clone, "ly:parser-clone",
     closures = SCM_EOL;
   else
     LY_ASSERT_TYPE (ly_is_list, closures, 2);
-  Lily_parser *clone = new Lily_parser (*parser, closures);
+  Lily_parser *clone = new Lily_parser (*parser, closures, location);
 
   return clone->unprotect ();
 }
index 833fe6e1588fc7feea90375adfe1a16f18f06579..cd7819e9c8d5f6823592e310783025ed15933280 100644 (file)
@@ -53,7 +53,7 @@ Lily_parser::Lily_parser (Sources *sources)
   lexer_->unprotect ();
 }
 
-Lily_parser::Lily_parser (Lily_parser const &src, SCM closures)
+Lily_parser::Lily_parser (Lily_parser const &src, SCM closures, SCM location)
 {
   lexer_ = 0;
   sources_ = src.sources_;
@@ -65,10 +65,9 @@ Lily_parser::Lily_parser (Lily_parser const &src, SCM closures)
   smobify_self ();
   if (src.lexer_)
     {
-      lexer_ = new Lily_lexer (*src.lexer_, this);
+      lexer_ = new Lily_lexer (*src.lexer_, this, location);
+      lexer_->unprotect ();
     }
-
-  lexer_->unprotect ();
 }
 
 Lily_parser::~Lily_parser ()
@@ -98,7 +97,7 @@ Lily_parser::print_smob (SCM s, SCM port, scm_print_state *)
 
 /* Process one .ly file, or book.  */
 void
-Lily_parser::parse_file (string init, string name, string out_name)
+Lily_parser::parse_file (const string &init, const string &name, const string &out_name)
 {
   lexer_->set_identifier (ly_symbol2scm ("parser"), self_scm ());
   output_basename_ = out_name;
@@ -120,9 +119,11 @@ Lily_parser::parse_file (string init, string name, string out_name)
      OUT_FILE (unless IN_FILE redefines output file name).  */
 
   SCM mod = lexer_->set_current_scope ();
-  do {
-    do_yyparse ();
-  } while (!lexer_->is_clean ());
+  do
+    {
+      do_yyparse ();
+    }
+  while (!lexer_->is_clean ());
 
   /*
     Don't mix cyclic pointers with weak tables.
@@ -138,10 +139,9 @@ Lily_parser::parse_file (string init, string name, string out_name)
 }
 
 void
-Lily_parser::parse_string (string ly_code)
+Lily_parser::parse_string (const string &ly_code)
 {
   lexer_->main_input_name_ = "<string>";
-  lexer_->is_main_input_ = true;
   lexer_->new_input (lexer_->main_input_name_, ly_code, sources_);
 
   SCM mod = lexer_->set_current_scope ();
@@ -155,11 +155,10 @@ Lily_parser::parse_string (string ly_code)
 }
 
 SCM
-Lily_parser::parse_string_expression (string ly_code, string filename,
+Lily_parser::parse_string_expression (const string &ly_code, const string &filename,
                                       int line)
 {
   lexer_->main_input_name_ = filename;
-  lexer_->is_main_input_ = true;
   lexer_->new_input (lexer_->main_input_name_, ly_code, sources_);
   if (line)
     {
@@ -169,9 +168,7 @@ Lily_parser::parse_string_expression (string ly_code, string filename,
   SCM parser = lexer_->lookup_identifier_symbol (ly_symbol2scm ("parser"));
   lexer_->set_identifier (ly_symbol2scm ("parser"), self_scm ());
   lexer_->push_extra_token (EMBEDDED_LILY);
-  do_yyparse ();
-  SCM result = lexer_->lookup_identifier_symbol (ly_symbol2scm ("parseStringResult"));
-  // parseStringResult is set in the grammar rule for embedded_lilypond
+  SCM result = do_yyparse ();
 
   lexer_->set_identifier (ly_symbol2scm ("parser"), parser);
   scm_set_current_module (mod);
@@ -181,7 +178,7 @@ Lily_parser::parse_string_expression (string ly_code, string filename,
 }
 
 void
-Lily_parser::include_string (string ly_code)
+Lily_parser::include_string (const string &ly_code)
 {
   lexer_->new_input ("<included string>", ly_code, sources_);
 }
@@ -205,14 +202,14 @@ Lily_parser::here_str0 () const
 }
 
 void
-Lily_parser::parser_error (string s)
+Lily_parser::parser_error (const string &s)
 {
   lexer_->here_input ().error (_ (s.c_str ()));
   error_level_ = 1;
 }
 
 void
-Lily_parser::parser_error (Input const &i, string s)
+Lily_parser::parser_error (Input const &i, const string &s)
 {
   i.error (s);
   error_level_ = 1;
index 28bb08d76152cca62c7d50a10c0cd1b8ad19f111..9c6d2130a331dd5f2599bbcae66090f501cf7ac7 100644 (file)
@@ -30,7 +30,7 @@ Lilypond_version::Lilypond_version (int major, int minor, int patch)
   patch_ = patch;
 }
 
-Lilypond_version::Lilypond_version (string str)
+Lilypond_version::Lilypond_version (const string &str)
 {
   major_ = 0;
   minor_ = 0;
index 2d43a71fa4f0006943990e89e390fcdf4c71b28b..6c5e627442ce460650c66f5c20456248f98c4e57 100644 (file)
@@ -114,7 +114,7 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir)
                       ? Axis_group_interface::generic_bound_extent (bound_grob, commonx, X_AXIS)
                       : robust_relative_extent (bound_grob, commonx, X_AXIS)).linear_combination (attach);
 
-      Grob *acc = Note_column::accidentals (bound_grob->get_parent (X_AXIS));
+      Grob *acc = unsmob_grob (bound_grob->get_object ("accidental-grob"));
       if (acc && to_boolean (ly_assoc_get (ly_symbol2scm ("end-on-accidental"), details, SCM_BOOL_F)))
         x_coord = robust_relative_extent (acc, commonx, X_AXIS).linear_combination (attach);
 
@@ -189,7 +189,9 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir)
         }
       else
         {
-          y = me->get_bound (dir)->extent (common_y, Y_AXIS).center ();
+          Interval ii = me->get_bound (dir)->extent (common_y, Y_AXIS);
+          if (!ii.is_empty())
+            y = ii.center ();
           details = scm_acons (ly_symbol2scm ("common-Y"), common_y->self_scm (), details);
         }
 
@@ -355,9 +357,9 @@ Line_spanner::print (SCM smob)
     }
 
   Offset adjust = dz.direction () * Staff_symbol_referencer::staff_space (me);
-
   Offset line_left = span_points[LEFT] + (arrows[LEFT] ? adjust * 1.4 : Offset (0, 0));
   Offset line_right = span_points[RIGHT] - (arrows[RIGHT] ? adjust * 0.55 : Offset (0, 0));
+
   if (line_right[X_AXIS] > line_left[X_AXIS])
     {
       line.add_stencil (Line_interface::line (me, line_left, line_right));
index 1acb34f783cf83dab6b0cc503f8d55fb47852a0e..e903d5a9a403b18f1ce1192642f8f769619b741e 100644 (file)
@@ -27,6 +27,7 @@ using namespace std;
 
 #include "line-interface.hh"
 #include "warn.hh"
+#include "international.hh"
 #include "dimensions.hh"
 #include "bezier.hh"
 #include "file-path.hh"
@@ -169,10 +170,18 @@ Lookup::filled_box (Box b)
 Stencil
 Lookup::round_filled_box (Box b, Real blotdiameter)
 {
-  if (b.x ().length () < blotdiameter)
-    blotdiameter = b.x ().length ();
-  if (b.y ().length () < blotdiameter)
-    blotdiameter = b.y ().length ();
+  Real width = b.x ().delta ();
+  blotdiameter = min (blotdiameter, width);
+  Real height = b.y ().delta ();
+  blotdiameter = min (blotdiameter, height);
+
+  if (blotdiameter < 0.0)
+    {
+      if (!isinf (blotdiameter))
+        warning (_f ("Not drawing a box with negative dimension, %.2f by %.2f.",
+                     width, height));
+      return Stencil (b, SCM_EOL);
+    }
 
   SCM at = (scm_list_n (ly_symbol2scm ("round-filled-box"),
                         scm_from_double (-b[X_AXIS][LEFT]),
index 48c8af205e1a16741b44405850279773869fd07e..3c47335b3572f8deebbcae629d13b6a6cbcf43b2 100644 (file)
@@ -110,14 +110,14 @@ Lyric_combine_music_iterator::set_music_context (Context *to)
   if (music_context_)
     {
       music_context_->event_source ()->
-      remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event"));
+      remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("rhythmic-event"));
     }
 
   music_context_ = to;
   if (to)
     {
       to->event_source ()->add_listener (GET_LISTENER (set_busy),
-                                         ly_symbol2scm ("music-event"));
+                                         ly_symbol2scm ("rhythmic-event"));
     }
 }
 
index 239ff1b39dc245f4507e4469558b083d5067393b..5ac75067a070ad4db7a2fd71863e5426ccd291e5 100644 (file)
@@ -60,31 +60,34 @@ using namespace std;
  */
 
 /* Names of header fields to be dumped to a separate file. */
-vector<string> dump_header_fieldnames_global;
+//vector<string> dump_header_fieldnames_global; // moved to global-data.cc
 
 /* Name of initialisation file. */
-string init_name_global;
+//string init_name_global; // moved to global-data.cc
 
 /* Output formats to generate.  */
-string output_format_global = "";
+//string output_format_global = ""; // moved to global-data.cc
 
 /* Current output name. */
-string output_name_global;
+//string output_name_global; // moved to global-data.cc
 
 /* Run in safe mode? */
-bool be_safe_global = false;
+//bool be_safe_global = false; // moved to global-data.cc
+
+/* Provide URI links to the original file */
+bool point_and_click_global = true;
 
 /* Scheme code to execute before parsing, after .scm init.
    This is where -e arguments are appended to.  */
-string init_scheme_code_global;
-string init_scheme_variables_global;
+//string init_scheme_code_global; // moved to global-data.cc
+//string init_scheme_variables_global; // moved to global-data.cc
 
-bool relocate_binary = true;
+//bool relocate_binary = true; // moved to global-data.cc
 
 /*
  * Miscellaneous global stuff.
  */
-File_path global_path;
+//File_path global_path; // moved to global-data.cc
 
 /*
  * File globals.
@@ -122,7 +125,7 @@ static char const *WARRANTY
 /* Where the init files live.  Typically:
    LILYPOND_DATADIR = /usr/share/lilypond
 */
-string lilypond_datadir;
+//string lilypond_datadir; // moved to global-data.cc
 
 /* The jail specification: USER, GROUP, JAIL, DIR. */
 string jail_spec;
@@ -134,6 +137,10 @@ static Getopt_long *option_parser = 0;
  * use _i () to get entry in POT file
  * call gettext () explicitly for actual "translation"  */
 
+/*
+  Data to be used to display when
+  -h command line option is detected.
+*/
 static Long_option_init options_static[]
 =
 {
@@ -206,6 +213,11 @@ configure_fpu ()
 
 static void
 env_var_info (FILE *out, char const *key)
+/*
+ * Retrieve value of an OS environment variable.
+ * Parameter:
+ *  key, the name of an environment variable.
+ */
 {
   if (char const *value = getenv (key))
     fprintf (out, "%s=\"%s\"\n", key, value);
@@ -213,6 +225,10 @@ env_var_info (FILE *out, char const *key)
 
 static void
 dir_info (FILE *out)
+/*
+ * Print out information re directories being used by LilyPond
+ * for this session.
+ */
 {
   fputs ("\n", out);
   fprintf (out, "LILYPOND_DATADIR=\"%s\"\n", LILYPOND_DATADIR);
@@ -237,6 +253,9 @@ dir_info (FILE *out)
 
 static void
 copyright ()
+/*
+ * Print out LilyPond copyright info.
+ */
 {
   /* Do not update the copyright years here, run `make grand-replace'  */
   printf ("%s", (_f ("Copyright (c) %s by\n%s  and others.", "1996--2012",
@@ -246,12 +265,18 @@ copyright ()
 
 static void
 identify (FILE *out)
+/*
+ * Print out LilyPond version string.
+ */
 {
   fputs (gnu_lilypond_version_string ().c_str (), out);
   fputs ("\n", out);
 }
 
 static void
+/*
+ * Print copyright and program name
+ */
 notice ()
 {
   identify (stdout);
@@ -264,6 +289,11 @@ notice ()
 LY_DEFINE (ly_usage, "ly:usage",
            0, 0, 0, (),
            "Print usage message.")
+/*
+ * ly_usage: Routine to output standard information when LilyPond is run without a
+ * source file to compile.
+ * Also callable as ly:usage from Scheme.
+ */
 {
   /* No version number or newline here.  It confuses help2man.  */
   printf ("%s", (_f ("Usage: %s [OPTION]... FILE...", PROGRAM_NAME).c_str ()));
@@ -292,6 +322,9 @@ LY_DEFINE (ly_usage, "ly:usage",
 
 static void
 warranty ()
+/*
+ * Prints out LilyPond warranty information
+ */
 {
   identify (stdout);
   printf ("\n");
@@ -301,10 +334,20 @@ warranty ()
 }
 
 static void
-prepend_load_path (string dir)
+prepend_scheme_list (const string &dir, const string &scmlist)
+/*
+ *  Inserts an item at the front of a Scheme list, e.g. %load-path
+ *  Parameters:
+ *    dir:     The directory to add to the front of the list
+ *    scmlist: The Scheme list onto which to prepend the directory
+ */
 {
-  string s = "(set! %load-path (cons \"" + dir + "\" %load-path))";
-  scm_c_eval_string (s.c_str ());
+  SCM var = scm_c_lookup (scmlist.c_str());
+  scm_variable_set_x (var, scm_cons (scm_from_locale_string (dir.c_str()),
+                                    scm_variable_ref (var)));
+  /*  string setcmd =
+             "(set! " + scmlist + " (cons \"" + dir + "\" " + scmlist +"))";
+            scm_c_eval_string (setcmd.c_str());*/
 }
 
 void init_global_tweak_registry ();
@@ -397,12 +440,48 @@ do_chroot_jail ()
 
 static void
 main_with_guile (void *, int, char **)
+/*
+ * main-with-guile is invoked as a callback via scm_boot_guile from
+ * main.
+ * scm_boot_guile will have passed its data, argc and argv parameters
+ * to main_with_guile.
+ */
 {
-  /* Engravers use lily.scm contents, need to make Guile find it.
-     Prepend onto GUILE %load-path, very ugh. */
-
-  prepend_load_path (lilypond_datadir);
-  prepend_load_path (lilypond_datadir + "/scm");
+  /* Engravers use lily.scm contents, so we need to make Guile find it.
+     Prepend onto GUILE %load-path.
+      %load-path is the symbol Guile searches for .scm files
+      %load-compiled-path is the symbol Guile V2 searches for .go files
+   */
+   string scm_pct_load_path = "%load-path";
+   string scm_pct_load_compiled_path = "%load-compiled-path";
+
+   prepend_scheme_list (lilypond_datadir, scm_pct_load_path );
+   prepend_scheme_list (lilypond_datadir + "/scm", scm_pct_load_path);
+
+#if (GUILE2)
+   /*
+     Just as ughy - prepend "/scm/out" onto GUILE V2+ %load-compiled-path
+     and set %compile-fallback-path to our scm/out directory
+   */
+   /*
+     %load-compiled-path is the symbol Guile V2 searches for .go files
+   */
+   prepend_scheme_list (lilypond_datadir + "/scm/out",
+                         scm_pct_load_compiled_path);
+   /*
+     %compile-fallback-path is the guile cache root for auto-compiled files
+   */
+
+   string scm_pct_fallback_path = "%compile-fallback-path";
+   string ly_scm_go_dir = lilypond_datadir + "/scm/out";
+   //string scm_pct_set_fallback = "(set! " + scm_pct_fallback_path +
+   //  " \"" + lilypond_datadir + "/scm/out\")";
+   //scm_c_eval_string (scm_pct_set_fallback.c_str() );
+   scm_primitive_eval
+     (scm_list_3 (scm_from_locale_symbol ("set!"),
+                  scm_from_locale_symbol ("%compile-fallback-path"),
+                  scm_from_locale_string (ly_scm_go_dir.c_str())));
+#endif
 
   if (is_loglevel (LOG_DEBUG))
     dir_info (stderr);
@@ -417,9 +496,12 @@ main_with_guile (void *, int, char **)
   init_freetype ();
   ly_reset_all_fonts ();
 
-  /* We accept multiple independent music files on the command line to
+  /*
+     We accept multiple independent music files on the command line to
      reduce compile time when processing lots of small files.
-     Starting the GUILE engine is very time consuming.  */
+     This way we don't have to start the Guile/Scheme interpreter more than once, as
+     starting the GUILE engine is very time consuming.
+  */
 
   SCM files = SCM_EOL;
   SCM *tail = &files;
@@ -436,7 +518,18 @@ main_with_guile (void *, int, char **)
   if (!jail_spec.empty ())
     do_chroot_jail ();
 #endif
-
+  /*
+    Now execute the Scheme entry-point declared in
+    lily.scm (lilypond-main)
+  */
+  // These commands moved to lily_guile_v2.scm
+  // SCM rep_mod = scm_c_resolve_module ("system repl repl");
+  // scm_c_use_module ("system repl repl");
+  // SCM err_handling_mod = scm_c_resolve_module ("system repl error-handling");
+  // SCM call_with_error_handling = scm_c_module_lookup (err_handling_mod, "call-with-error-handling");
+  // SCM result = scm_call_1 (
+  //                      scm_variable_ref (call_with_error_handling),
+  //                      scm_call_1 (ly_lily_module_constant ("lilypond-main"), files));
   SCM result = scm_call_1 (ly_lily_module_constant ("lilypond-main"), files);
   (void) result;
 
@@ -446,6 +539,11 @@ main_with_guile (void *, int, char **)
 
 static void
 setup_localisation ()
+/*
+ *  Set up local language text locale (if available from configure)
+ *  Implicit inputs:
+ *  HAVE_GETTEXT: Internationalization available for a local language.
+ */
 {
 #if HAVE_GETTEXT
   /* Enable locales */
@@ -465,7 +563,12 @@ setup_localisation ()
 }
 
 static void
-add_output_format (string format)
+add_output_format (const string &format)
+/*
+ * Capture information internally from command-line options
+ * re output format.
+ *
+ */
 {
   if (output_format_global != "")
     output_format_global += ",";
@@ -474,6 +577,11 @@ add_output_format (string format)
 
 static void
 parse_argv (int argc, char **argv)
+/*
+ *  Parse command-line options
+ *  also, if -h (help), -v (version) or  -w (warranty) is detected,
+ *  output the usage information and exit.
+ */
 {
   bool show_help = false;
   option_parser = new Getopt_long (argc, argv, options_static);
@@ -584,8 +692,16 @@ parse_argv (int argc, char **argv)
     }
 }
 
+/*
+  T1686 Add two new routines called by setup_guile_env
+*/
+
 void
-setup_guile_env ()
+setup_guile_gc_env ()
+/*
+ * Set up environment variables relevant to the
+ * Garbage Collector
+ */
 {
   char const *yield = getenv ("LILYPOND_GC_YIELD");
   bool overwrite = true;
@@ -605,16 +721,61 @@ setup_guile_env ()
                "104857600", overwrite);
 }
 
-vector<string> start_environment_global;
+
+void
+setup_guile_v2_env ()
+/*
+ * Set up environment variables relevant to compiling
+ * Scheme files for Guile V2.
+ */
+{
+     sane_putenv("GUILE_AUTO_COMPILE", "0", true);  // disable auto-compile
+     sane_putenv("GUILE_WARN_DEPRECATED",
+                  "detailed", "true");   // set Guile to info re deprecation
+     /*
+        Set root for Guile %compile-fallback to
+        Lilypond root for its data.
+      */
+     sane_putenv("XDG_CACHE_HOME",
+                  lilypond_datadir, true);
+}
+
+void
+setup_guile_env ()
+/*
+ * Set up environment variables relevant to Scheme
+ */
+{
+
+  setup_guile_gc_env ();  // configure garbage collector
+#if (GUILEV2)
+  setup_guile_v2_env ();  // configure Guile V2 behaviour
+#endif
+}
+
+//vector<string> start_environment_global;
 
 int
 main (int argc, char **argv, char **envp)
+/*
+ * Main entry-point for LilyPond executable image
+ * Parameters:
+ * argc:   Count of arguments on the command line
+ * argv:   Vector of string arguments on command line
+ * envp:   Point to vector of OS environment variables
+ */
 {
   configure_fpu ();
-
+  /*
+    Process environment variables
+  */
   for (char **p = envp; *p; p++)
     start_environment_global.push_back (*p);
-
+  /*
+    Handle old-style environment equivalent to
+    old-style -V or --verbose command arguments.
+    Set it to the equivalent for --loglevel-DEBUG
+   */
   if (getenv ("LILYPOND_VERBOSE"))
     set_loglevel (LOGLEVEL_DEBUG);
   if (getenv ("LILYPOND_LOGLEVEL"))
@@ -626,10 +787,15 @@ main (int argc, char **argv, char **envp)
     identify (stderr);
 
   setup_paths (argv[0]);
-  setup_guile_env ();
-
-#if 0
-  /* Debugging aid.  */
+  setup_guile_env ();  // set up environment variables to pass into Guile API
+  /*
+   * Start up Guile API using main_with_guile as a callback.
+   */
+#if (GUILEV2)
+ /* Debugging aid.
+    Set it on by default for Guile V2
+    while migration in progress.
+ */
   try
     {
       scm_boot_guile (argc, argv, main_with_guile, 0);
index 0ebd1324506ebf7b404a3ab640ba57e746cf4f91..c6ab972c74994c27752d1881200a52c073651dea 100644 (file)
@@ -33,6 +33,7 @@ protected:
   DECLARE_ACKNOWLEDGER (slur);
   TRANSLATOR_DECLARATIONS (Melody_engraver);
   void stop_translation_timestep ();
+  void process_acknowledged ();
   void process_music ();
 };
 
@@ -49,8 +50,12 @@ Melody_engraver::process_music ()
     melody_item_ = 0;
 }
 
+/*
+  Used to be in stop_translation_timestep, but grobs can't
+  be created here.
+*/
 void
-Melody_engraver::stop_translation_timestep ()
+Melody_engraver::process_acknowledged ()
 {
   if (stem_
       && !is_direction (stem_->get_property_data ("neutral-direction")))
@@ -66,6 +71,11 @@ Melody_engraver::stop_translation_timestep ()
           Melody_spanner::add_stem (melody_item_, stem_);
         }
     }
+}
+
+void
+Melody_engraver::stop_translation_timestep ()
+{
   stem_ = 0;
 }
 
index 35b8614b0d62fa2a657510c68b9ac3fc35e37144..8f70fa4e487a0a84d1b0d436e0d8e77851269409 100644 (file)
@@ -57,16 +57,20 @@ class Mensural_ligature_engraver : public Coherent_ligature_engraver
 
 protected:
   virtual Spanner *create_ligature_spanner ();
-  virtual void build_ligature (Spanner *ligature, vector<Grob_info> primitives);
+  virtual void build_ligature (Spanner *ligature,
+                               vector<Grob_info> const &primitives);
   DECLARE_TRANSLATOR_LISTENER (ligature);
 
 public:
   TRANSLATOR_DECLARATIONS (Mensural_ligature_engraver);
 
 private:
-  void transform_heads (vector<Grob_info> primitives);
-  void propagate_properties (Spanner *ligature, vector<Grob_info> primitives);
-  void fold_up_primitives (vector<Grob_info> primitives);
+  void transform_heads (vector<Grob_info> const &primitives);
+  void propagate_properties (Spanner *ligature,
+                             vector<Grob_info> const &primitives,
+                             Real &min_length);
+  void fold_up_primitives (vector<Grob_info> const &primitives,
+                           Real &min_length);
 };
 
 IMPLEMENT_TRANSLATOR_LISTENER (Mensural_ligature_engraver, ligature);
@@ -89,7 +93,7 @@ Mensural_ligature_engraver::create_ligature_spanner ()
 }
 
 void
-Mensural_ligature_engraver::transform_heads (vector<Grob_info> primitives)
+Mensural_ligature_engraver::transform_heads (vector<Grob_info> const &primitives)
 {
   if (primitives.size () < 2)
     {
@@ -336,7 +340,8 @@ Mensural_ligature_engraver::transform_heads (vector<Grob_info> primitives)
  */
 void
 Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
-                                                  vector<Grob_info> primitives)
+                                                  vector<Grob_info> const &primitives,
+                                                  Real &min_length)
 {
   Real thickness
     = robust_scm2double (ligature->get_property ("thickness"), 1.3);
@@ -350,6 +355,7 @@ Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
     = Font_interface::get_default_font (ligature)->
       find_by_name ("noteheads.sM3ligmensural").extent (X_AXIS).length ();
 
+  min_length = 0.0;
   Item *prev_primitive = NULL;
   for (vsize i = 0; i < primitives.size (); i++)
     {
@@ -362,9 +368,11 @@ Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
         {
         case MLP_BREVIS:
         case MLP_LONGA:
+          min_length += head_width;
           primitive->set_property ("head-width", scm_from_double (head_width));
           break;
         case MLP_MAXIMA:
+          min_length += maxima_head_width;
           primitive->set_property ("head-width",
                                    scm_from_double (maxima_head_width));
           break;
@@ -377,6 +385,7 @@ Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
           {
             SCM flexa_scm = primitive->get_property ("flexa-width");
             Real const flexa_width = robust_scm2double (flexa_scm, 2.0);
+            min_length += flexa_width + thickness;
             SCM head_width = scm_from_double (0.5 * (flexa_width + thickness));
             primitive->set_property ("head-width", head_width);
             prev_primitive->set_property ("head-width", head_width);
@@ -393,7 +402,8 @@ Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
 }
 
 void
-Mensural_ligature_engraver::fold_up_primitives (vector<Grob_info> primitives)
+Mensural_ligature_engraver::fold_up_primitives (vector<Grob_info> const &primitives,
+                                                Real &min_length)
 {
   Item *first = 0;
   Real distance = 0.0;
@@ -416,7 +426,7 @@ Mensural_ligature_engraver::fold_up_primitives (vector<Grob_info> primitives)
       Real head_width = scm_to_double (current->get_property ("head-width"));
       distance += head_width - thickness;
 
-      if (Rhythmic_head::dot_count (current) > 0)
+      if (size_t const dot_count = Rhythmic_head::dot_count (current))
         /*
           Move dots above/behind the ligature.
           dots should also avoid staff lines.
@@ -452,6 +462,8 @@ Mensural_ligature_engraver::fold_up_primitives (vector<Grob_info> primitives)
               else if (delta == 1 || delta == -1)
                 vert_shift -= delta * staff_space;
             }
+          else
+            min_length += head_width * dot_count;
 
           dot_gr->translate_axis (vert_shift, Y_AXIS);
 
@@ -466,11 +478,21 @@ Mensural_ligature_engraver::fold_up_primitives (vector<Grob_info> primitives)
 
 void
 Mensural_ligature_engraver::build_ligature (Spanner *ligature,
-                                            vector<Grob_info> primitives)
+                                            vector<Grob_info> const &primitives)
 {
+  /*
+    the X extent of the actual graphics representing the ligature;
+    less space than that means collision
+  */
+  Real min_length;
+
   transform_heads (primitives);
-  propagate_properties (ligature, primitives);
-  fold_up_primitives (primitives);
+  propagate_properties (ligature, primitives, min_length);
+  fold_up_primitives (primitives, min_length);
+
+  if (robust_scm2double (ligature->get_property ("minimum-length"), 0.0)
+      < min_length)
+    ligature->set_property ("minimum-length", scm_from_double (min_length));
 }
 
 ADD_ACKNOWLEDGER (Mensural_ligature_engraver, rest);
index 3bffcb841c87f205f7b9fbd6127c42240ba2ede4..4695eef98683831400df09c3a337368ea12266f9 100644 (file)
@@ -168,7 +168,7 @@ internal_brew_primitive (Grob *me)
       duration_log--;
     case MLP_BREVIS:
       duration_log--;
-      suffix = to_string (duration_log) + color
+      suffix = ::to_string (duration_log) + color
                + (duration_log < -1 ? "lig" : "") + "mensural";
       index = prefix + "s";
       out = fm->find_by_name (index + "r" + suffix);
index 699ec7e89876049d379858b5dd287118f4266271..f98c76373e9728e68c66863a7008c20e7c548d74 100644 (file)
@@ -181,7 +181,7 @@ Midi_chunk::~Midi_chunk ()
 }
 
 void
-Midi_chunk::set (string header_string, string data_string, string footer_string)
+Midi_chunk::set (const string &header_string, const string &data_string, const string &footer_string)
 {
   data_string_ = data_string;
   footer_string_ = footer_string;
diff --git a/lily/midi-control-function-performer.cc b/lily/midi-control-function-performer.cc
new file mode 100644 (file)
index 0000000..ff0855d
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2013 by Heikki Tauriainen <g034737@welho.com>.
+  Adapted from performer implementations
+  Copyright (C) 1996--2012 Jan Nieuwenhuizen <janneke@gnu.org>,
+  Han-Wen Nienhyus <hanwen@xs4all.nl> and others.
+
+  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 "performer.hh"
+
+#include "audio-item.hh"
+#include "context.hh"
+#include "dispatcher.hh"
+#include "international.hh"
+#include "listener.hh"
+#include "stream-event.hh"
+
+#include "translator.icc"
+
+/**
+   MIDI control function performer.  Announces "set property" events on MIDI
+   context properties.
+*/
+class Midi_control_function_performer : public Performer
+{
+public:
+  TRANSLATOR_DECLARATIONS (Midi_control_function_performer);
+  DECLARE_LISTENER (announce_function_value_change);
+  ~Midi_control_function_performer ();
+
+  void connect_to_context (Context *c);
+  void disconnect_from_context (Context *c);
+};
+
+Midi_control_function_performer::Midi_control_function_performer ()
+{
+}
+
+Midi_control_function_performer::~Midi_control_function_performer ()
+{
+}
+
+void
+Midi_control_function_performer::connect_to_context (Context *c)
+{
+  c->events_below ()->
+    add_listener (GET_LISTENER (announce_function_value_change),
+                  ly_symbol2scm ("SetProperty"));
+}
+
+void
+Midi_control_function_performer::disconnect_from_context (Context *c)
+{
+  c->events_below ()->
+    remove_listener (GET_LISTENER (announce_function_value_change),
+                     ly_symbol2scm ("SetProperty"));
+}
+
+IMPLEMENT_LISTENER (Midi_control_function_performer,
+                    announce_function_value_change)
+void
+Midi_control_function_performer::announce_function_value_change (SCM sev)
+{
+  Stream_event *ev = unsmob_stream_event (sev);
+  SCM sym = ev->get_property ("symbol");
+  if (!scm_is_symbol (sym))
+    return;
+
+  // Search for a matching context property; if found, check that the value
+  // of the property is within the allowed range, and announce a possible
+  // change in the value of the corresponding control function.
+  string symbol = ly_symbol2string (sym);
+  for (const Audio_control_function_value_change::Context_property *p
+         = Audio_control_function_value_change::context_properties_;
+       p->name_; ++p)
+    {
+      if (symbol == p->name_)
+        {
+          SCM value = ev->get_property ("value");
+          if (scm_is_number (value))
+            {
+              Real val = scm_to_double (value);
+              if (val >= p->range_min_ && val <= p->range_max_)
+                {
+                  // Normalize the value to the 0.0 to 1.0 range.
+                  val = ((val - p->range_min_)
+                         / (p->range_max_ - p->range_min_));
+                  Audio_control_function_value_change *item
+                    = new Audio_control_function_value_change (p->control_,
+                                                               val);
+                  announce_element (Audio_element_info (item, 0));
+                }
+              else
+                ev->origin ()->
+                  warning (_f ("ignoring out-of-range value change for MIDI "
+                               "property `%s'",
+                               p->name_));
+            }
+          break;
+        }
+    }
+}
+
+ADD_TRANSLATOR (Midi_control_function_performer,
+                /* doc */
+                "",
+
+                /* create */
+                "",
+
+                /* read */
+                "midiBalance "
+                "midiPanPosition "
+                "midiReverbLevel "
+                "midiChorusLevel ",
+
+                /* write */
+                ""
+               );
index 0d0edbb4c7fc904a8f4526ecc6389799587e558b..54d00ff683d59ce4f1ffc98975c492e91de9c26b 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "duration.hh"
 #include "international.hh"
+#include "libc-extension.hh"
 #include "main.hh"
 #include "midi-stream.hh"
 #include "misc.hh"
@@ -50,6 +51,9 @@ Midi_item::get_midi (Audio_item *a)
     return new Midi_time_signature (i);
   else if (Audio_text *i = dynamic_cast<Audio_text *> (a))
     return new Midi_text (i);
+  else if (Audio_control_function_value_change *i
+           = dynamic_cast<Audio_control_function_value_change *> (a))
+    return new Midi_control_function_value_change (i);
   else
     assert (0);
 
@@ -102,10 +106,24 @@ Midi_channel_item::Midi_channel_item (Audio_item *ai)
 {
 }
 
+Midi_control_function_value_change
+::Midi_control_function_value_change (Audio_control_function_value_change *ai)
+  : Midi_channel_item (ai), control_ (ai->control_), value_ (ai->value_)
+{
+}
+
 Midi_item::~Midi_item ()
 {
 }
 
+Midi_channel_item::~Midi_channel_item ()
+{
+}
+
+Midi_control_function_value_change::~Midi_control_function_value_change ()
+{
+}
+
 string
 int2midi_varint_string (int i)
 {
@@ -342,6 +360,66 @@ Midi_text::to_string () const
   return str;
 }
 
+string
+Midi_control_function_value_change::to_string () const
+{
+  // MIDI control function information.  A MIDI control function may have one
+  // or two assigned control numbers depending on whether it supports coarse
+  // (7-bit) or fine (14-bit) resolution.  If the control function supports
+  // fine resolution, the first (respectively, second) member of the structure
+  // represents the control number for setting the most (least) significant 7
+  // bits of the control function's value.
+  struct Control_function
+  {
+    int msb_control_number_;
+    int lsb_control_number_;
+  };
+
+  // Mapping from supported control functions (enumeration values defined in
+  // Audio_controller_value_change::Control) to the corresponding MIDI control
+  // numbers.
+  static const Control_function control_functions[] =
+    {
+      // When adding support for new control functions, please note the
+      // following:
+      // - The order of the control number definitions should be kept
+      //   consistent with the order of the enumeration values defined in
+      //   Audio_control_function_value_change::Control.
+      // - If the control function has only coarse resolution, the function's
+      //   control number should be stored in the MSB member of the array
+      //   element, and the LSB member should be set to a negative value.
+
+      {  8, 40 }, // balance
+      { 10, 42 }, // pan position
+      { 91, -1 }, // reverb level (only coarse resolution available)
+      { 93, -1 }  // chorus level (only coarse resolution available)
+    };
+
+  string str;
+  const Control_function *control_function = &control_functions[control_];
+  static const Real full_fine_scale = 0x3FFF;
+  static const Real full_coarse_scale = 0x7F;
+  bool fine_resolution = (control_function->lsb_control_number_ >= 0);
+  // value_ is in range [0.0 .. 1.0].  For directional value ranges,
+  // #CENTER will correspond to 0.5 exactly, and my_round rounds
+  // upwards when in case of doubt.  That means that center position
+  // will round to 0x40 or 0x2000 by a hair's breadth.
+  int value = (int) my_round (value_ * (fine_resolution ?
+                                        full_fine_scale : full_coarse_scale));
+  Byte status_byte = (char) (0xB0 + channel_);
+  str += ::to_string ((char)status_byte);
+  str += ::to_string ((char)(control_function->msb_control_number_));
+  str += ::to_string ((char)(fine_resolution ? (value >> 7) : value));
+  if (fine_resolution)
+    {
+      str += ::to_string ((char)0x00);
+      str += ::to_string ((char)status_byte);
+      str += ::to_string ((char)(control_function->lsb_control_number_));
+      str += ::to_string ((char)(value & 0x7F));
+    }
+  return str;
+}
+
 char const *
 Midi_item::name () const
 {
index 9409762d66f0bbf2eb9b1514336569c677e5ce05..289bb1494a3b52091a7871d71eebcb4600d2b336 100644 (file)
@@ -27,11 +27,10 @@ using namespace std;
 #include "midi-chunk.hh"
 #include "misc.hh"
 #include "program-option.hh"
-#include "stream.hh"
 #include "string-convert.hh"
 #include "warn.hh"
 
-Midi_stream::Midi_stream (string file_name)
+Midi_stream::Midi_stream (const string &file_name)
 {
   file_name_string_ = file_name;
   out_file_ = fopen (file_name.c_str (), "wb");
@@ -45,7 +44,7 @@ Midi_stream::~Midi_stream ()
 }
 
 void
-Midi_stream::write (string str)
+Midi_stream::write (const string &str)
 {
   size_t sz = sizeof (Byte);
   size_t n = str.length ();
index 6d0b1290a38491f3f8c47f21d7063ab88f47b3a1..b97630b0d147ed8ebc05d63c111b8928c3667cad 100644 (file)
@@ -178,7 +178,8 @@ void
 Midi_walker::process ()
 {
   Audio_item *audio = items_[index_];
-  do_stop_notes (audio->audio_column_->ticks ());
+  Audio_column *col = audio->get_column ();
+  do_stop_notes (col->ticks ());
 
   if (Midi_item *midi = get_midi (audio))
     {
index 801266d79b07ff6a8114c572b00f29f51a186259..58d0a6e9d301af63baead8b7e8f96d2f7cb0d0ff 100644 (file)
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#include <complex>
+
 #include "misc.hh"
+#include "offset.hh"
 #include "warn.hh"
 
 /*
@@ -75,7 +78,7 @@ convex_amplifier (Real standard_x, Real increase_factor, Real x)
 }
 
 string
-camel_case_to_lisp_identifier (string in)
+camel_case_to_lisp_identifier (const string &in)
 {
   vector<char> out;
 
@@ -94,3 +97,20 @@ camel_case_to_lisp_identifier (string in)
 
   return result;
 }
+
+Offset
+get_point_in_y_direction (Offset orig, Real slope, Real dist, Direction dir)
+{
+  if (slope == infinity_f)
+    return orig + Offset (dir * dist, 0.0);
+
+  Real x = slope == 0.0 ? 1.0 * dir : 1.0 * sign (slope) * dir;
+  Real y = slope * x;
+  Real angle = atan2 (y, x);
+
+  complex<Real> orig_c (orig[X_AXIS], orig[Y_AXIS]);
+  complex<Real> to_move = polar (dist, angle);
+  complex<Real> res = orig_c + to_move;
+
+  return Offset (real (res), imag (res));
+}
index 0acee126497e8435a74efdac94ce0fe3b8f8acd3..1657cf5a9e68722954d8d67f6c4c4661b0206a35 100644 (file)
@@ -61,6 +61,12 @@ Modified_font_metric::get_indexed_char_dimensions (vsize i) const
   return b;
 }
 
+Real
+Modified_font_metric::get_magnification () const
+{
+  return magnification_;
+}
+
 vsize
 Modified_font_metric::count () const
 {
@@ -68,7 +74,7 @@ Modified_font_metric::count () const
 }
 
 Offset
-Modified_font_metric::attachment_point (string s) const
+Modified_font_metric::attachment_point (const string &s) const
 {
   Offset o = orig_->attachment_point (s);
   return o * magnification_;
@@ -81,7 +87,7 @@ Modified_font_metric::get_indexed_wxwy (vsize k) const
   return o * magnification_;
 }
 
-vsize
+size_t
 Modified_font_metric::name_to_index (string s) const
 {
   return orig_->name_to_index (s);
@@ -100,7 +106,7 @@ Modified_font_metric::derived_mark () const
 
 Stencil
 Modified_font_metric::text_stencil (Output_def *state,
-                                    string text, bool feta) const
+                                    const string &text, bool feta) const
 {
   Box b;
   if (Pango_font *pf = dynamic_cast<Pango_font *> (orig_))
index 4fc43ca32b8c8f846d5373673615ae23a7a9eca8..0da0445c9cd49ae514780795b10d718288d9e386 100644 (file)
@@ -17,8 +17,7 @@
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "ly-module.hh"
-
+#include "ly-module.hh" // pulls in lily-guile.hh and guile-compatibility.hh
 #include "warn.hh"
 #include "main.hh"
 #include "std-string.hh"
@@ -52,14 +51,31 @@ LY_DEFINE (ly_module_copy, "ly:module-copy",
   return SCM_UNSPECIFIED;
 }
 
-/* Lookup SYM, but don't give error when it is not defined.  */
+
+
+/* Lookup SYM, but don't give error when it is not defined.
+   N.B. this is only needed when running with Guile versions
+   prior to V2.0.3, when calls to ly_module_lookup can be replaced
+   with direct calls to the Guile API scm_module_variable in the
+   LilyPond codebase.
+*/
 SCM
 ly_module_lookup (SCM module, SCM sym)
 {
 #define FUNC_NAME __FUNCTION__
   SCM_VALIDATE_MODULE (1, module);
-
+/*
+  Issue 2758:
+    Guile V2 onward has a scm_module_variable API module.
+    Guile V1.8.7 only has a (module-variable) REPL function, however
+    using ly_lily_module_constant ("module-variable") and calling
+    the memoized result is slow.
+ */
+#if GUILEV1
   return scm_sym2var (sym, scm_module_lookup_closure (module), SCM_BOOL_F);
+#else
+  return scm_module_variable (module, sym);
+#endif
 #undef FUNC_NAME
 }
 
index 47718a2fec86d906e0b3ce0adb7211c17f07237b..e823c298e319ee2dc47b95f0d77cde384465a748 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "multi-measure-rest.hh"
 
+#include "directional-element-interface.hh"
 #include "duration.hh"
 #include "font-interface.hh"
 #include "international.hh"
@@ -32,6 +33,7 @@
 #include "separation-item.hh"
 #include "spacing-options.hh"
 #include "spanner.hh"
+#include "staff-symbol.hh"
 #include "staff-symbol-referencer.hh"
 #include "system.hh"
 #include "text-interface.hh"
@@ -115,6 +117,20 @@ Multi_measure_rest::print (SCM smob)
   return mol.smobbed_copy ();
 }
 
+MAKE_SCHEME_CALLBACK (Multi_measure_rest, height, 1);
+SCM
+Multi_measure_rest::height (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+
+  Real space = 1000000; // something very large...
+
+  Stencil mol;
+  mol.add_stencil (symbol_stencil (me, space));
+
+  return ly_interval2scm (mol.extent (Y_AXIS));
+}
+
 int
 calc_closest_duration_log (Grob *me, double duration, bool force_round_up, bool paranoid)
 {
@@ -209,15 +225,14 @@ Multi_measure_rest::symbol_stencil (Grob *me, Real space)
 
   if (measure_count == 1)
     {
-      if (mdl == 0 && me->get_property ("staff-position") == SCM_EOL)
+      if (me->get_property ("staff-position") == SCM_EOL)
         {
-          if (Staff_symbol_referencer::on_staff_line (me, 2))
-            me->set_property ("staff-position", scm_from_int (2));
-          else if (Staff_symbol_referencer::on_staff_line (me, 3))
-            me->set_property ("staff-position", scm_from_int (3));
+          int dir = get_grob_direction (me);
+          Real pos = Rest::staff_position_internal (me, mdl, dir);
+          me->set_property ("staff-position", scm_from_double (pos));
         }
-
-      Stencil s = musfont->find_by_name (Rest::glyph_name (me, mdl, "", true));
+      Stencil s = musfont->find_by_name (Rest::glyph_name (me, mdl, "", true, 0.0));
 
       s.translate_axis ((space - s.extent (X_AXIS).length ()) / 2, X_AXIS);
       return s;
@@ -266,6 +281,22 @@ Multi_measure_rest::church_rest (Grob *me, Font_metric *musfont, int measure_cou
   Real symbols_width = 0.0;
   double total_duration = measure_count * pow (2.0, -calc_measure_duration_log (me, true));
 
+  SCM staff_position = me->get_property ("staff-position");
+
+  if (!scm_is_number (staff_position))
+    {
+      // Staff position is somewhat icky regarding its definition for
+      // compatibility reasons.  It is intended to be the baseline of
+      // a breve rest.  However, when the staff space is more than
+      // single space (like with tablature), it looks better if all
+      // rests are actually hanging.  So staff position, in reality,
+      // is the semi-breve position - 2.  Everything else is
+      // calculated from there.
+      int dir = get_grob_direction (me);
+      Real pos = Rest::staff_position_internal (me, 0, dir);
+      me->set_property ("staff-position", scm_from_double (pos - 2));
+    }
+
   while (total_duration > 0)
     {
       int dl = calc_closest_duration_log (me, total_duration, false, true);
@@ -273,12 +304,17 @@ Multi_measure_rest::church_rest (Grob *me, Font_metric *musfont, int measure_cou
 
       total_duration -= duration;
 
-      Stencil r = musfont->find_by_name (Rest::glyph_name (me, dl, "", true));
+      Stencil r = musfont->find_by_name (Rest::glyph_name (me, dl, "", true, 2));
+
+      Real staff_space = Staff_symbol_referencer::staff_space (me);
       if (dl == 0)
         {
-          Real staff_space = Staff_symbol_referencer::staff_space (me);
           r.translate_axis (staff_space, Y_AXIS);
         }
+      else
+        {
+          r.translate_axis (staff_space-r.extent (Y_AXIS).at (UP), Y_AXIS);
+        }
       symbols_width += r.extent (X_AXIS).length ();
       mols = scm_cons (r.smobbed_copy (), mols);
       symbol_count++;
index ffa903b4ebedc5d6ead2b34eb08679747f3ab30e..dc2d9a6aa24640bb933942cd13050b25467af5a5 100644 (file)
@@ -114,18 +114,30 @@ LY_DEFINE (ly_music_list_p, "ly:music-list?",
 
 LY_DEFINE (ly_music_deep_copy, "ly:music-deep-copy",
            1, 0, 0, (SCM m),
-           "Copy @var{m} and all sub expressions of@tie{}@var{m}.")
+           "Copy @var{m} and all sub expressions of@tie{}@var{m}."
+           " @var{m} may be an arbitrary type; cons cells and music"
+           " are copied recursively.")
 {
-  SCM copy = m;
   if (unsmob_music (m))
+      return unsmob_music (m)->clone ()->unprotect ();
+  if (scm_is_pair (m))
     {
-      Music *mcopy = unsmob_music (m)->clone ();
-      copy = mcopy->unprotect ();
+      SCM copy = SCM_EOL;
+      do
+        {
+          copy = scm_cons (ly_music_deep_copy (scm_car (m)), copy);
+          m = scm_cdr (m);
+        }
+      while (scm_is_pair (m));
+      // Oh, come on, GUILE.  Why do you require the second argument
+      // of scm_reverse_x to be a proper list?  That makes no sense.
+      // return scm_reverse_x (copy, ly_music_deep_copy (m));
+      SCM last_cons = copy;
+      copy = scm_reverse_x (copy, SCM_EOL);
+      scm_set_cdr_x (last_cons, ly_music_deep_copy (m));
+      return copy;
     }
-  else if (scm_is_pair (m))
-    copy = scm_cons (ly_music_deep_copy (scm_car (m)),
-                     ly_music_deep_copy (scm_cdr (m)));
-  return copy;
+  return m;
 }
 
 LY_DEFINE (ly_music_transpose, "ly:music-transpose",
@@ -170,8 +182,6 @@ LY_DEFINE (ly_make_music_relative_x, "ly:make-music-relative!",
   Pitch start = *unsmob_pitch (pitch);
   Music *m = unsmob_music (music);
   Pitch last = m->to_relative_octave (start);
-  if (lily_1_8_relative)
-    m->set_property ("last-pitch", last.smobbed_copy ());
 
   return last.smobbed_copy ();
 }
index 7ab62470b567bc5fad37a004329749d7fa7d00a2..b40597df246bb4bd296e5f0a33b205ba057abcc2 100644 (file)
@@ -177,25 +177,8 @@ Music_sequence::simultaneous_relative_callback (SCM music, SCM pitch)
 {
   Music *me = unsmob_music (music);
   Pitch p = *unsmob_pitch (pitch);
-
-  SCM elts = me->get_property ("elements");
-  SCM copied = SCM_EOL;
-  if (lily_1_8_relative)
-    copied = ly_music_deep_copy (elts);
-
-  Pitch retval = music_list_to_relative (elts, p, false);
-
-  if (lily_1_8_relative)
-    {
-
-      Pitch retval_1_8 = music_list_to_relative (copied, p, true);
-      if (retval_1_8 != retval)
-        lily_1_8_compatibility_used = true;
-
-      retval = retval_1_8;
-    }
-
-  return retval.smobbed_copy ();
+  return music_list_to_relative (me->get_property ("elements"),
+                                 p, false).smobbed_copy ();
 }
 
 MAKE_SCHEME_CALLBACK (Music_sequence, event_chord_relative_callback, 2);
index 7a38d7af41d84851151b65e2c5bcbdaa4cc4e010..eea6a9ca818a58552a5d4cdda7a159754696d186 100644 (file)
@@ -226,6 +226,10 @@ transpose_mutable (SCM alist, Pitch delta)
               transposed = transposed.normalized ();
             }
 
+          if (prop == ly_symbol2scm ("tonic"))
+            transposed = Pitch (-1, transposed.get_notename (),
+                                transposed.get_alteration ());
+
           new_val = transposed.smobbed_copy ();
         }
       else if (prop == ly_symbol2scm ("element"))
@@ -271,7 +275,7 @@ Music::origin () const
   ES TODO: This method should probably be reworked or junked.
 */
 Stream_event *
-Music::to_event (Context *c) const
+Music::to_event () const
 {
   SCM class_name = ly_camel_case_2_lisp_identifier (get_property ("name"));
 
@@ -279,8 +283,9 @@ Music::to_event (Context *c) const
   if (!internal_is_music_type (class_name))
     programming_error ("Not a music type");
 
-  Stream_event *e = new Stream_event (c->make_event_class (class_name),
-                                      mutable_property_alist_);
+  Stream_event *e = new Stream_event
+    (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"), class_name),
+     mutable_property_alist_);
   Moment length = get_length ();
   if (length.to_bool ())
     e->set_property ("length", length.smobbed_copy ());
@@ -293,7 +298,7 @@ Music::to_event (Context *c) const
       for (; scm_is_pair (art_mus); art_mus = scm_cdr (art_mus))
         {
           Music *m = unsmob_music (scm_car (art_mus));
-          art_ev = scm_cons (m->to_event (c)->unprotect (), art_ev);
+          art_ev = scm_cons (m->to_event ()->unprotect (), art_ev);
         }
       e->set_property ("articulations", scm_reverse_x (art_ev, SCM_EOL));
     }
@@ -310,7 +315,7 @@ Music::to_event (Context *c) const
 void
 Music::send_to_context (Context *c)
 {
-  Stream_event *ev = to_event (c);
+  Stream_event *ev = to_event ();
   c->event_source ()->broadcast (ev);
   ev->unprotect ();
 }
diff --git a/lily/new-dynamic-engraver.cc b/lily/new-dynamic-engraver.cc
deleted file mode 100644 (file)
index 749f9aa..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
-  This file is part of LilyPond, the GNU music typesetter.
-
-  Copyright (C) 2008--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
-
-  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 "engraver.hh"
-#include "hairpin.hh"
-#include "international.hh"
-#include "item.hh"
-#include "note-column.hh"
-#include "pointer-group-interface.hh"
-#include "self-alignment-interface.hh"
-#include "spanner.hh"
-#include "stream-event.hh"
-#include "text-interface.hh"
-
-#include "translator.icc"
-
-class New_dynamic_engraver : public Engraver
-{
-  TRANSLATOR_DECLARATIONS (New_dynamic_engraver);
-  DECLARE_ACKNOWLEDGER (note_column);
-  DECLARE_TRANSLATOR_LISTENER (absolute_dynamic);
-  DECLARE_TRANSLATOR_LISTENER (span_dynamic);
-  DECLARE_TRANSLATOR_LISTENER (break_span);
-
-protected:
-  virtual void process_music ();
-  virtual void stop_translation_timestep ();
-  virtual void finalize ();
-
-private:
-  SCM get_property_setting (Stream_event *evt, char const *evprop,
-                            char const *ctxprop);
-  string get_spanner_type (Stream_event *ev);
-
-  Drul_array<Stream_event *> accepted_spanevents_drul_;
-  Spanner *current_spanner_;
-  Spanner *finished_spanner_;
-
-  Item *script_;
-  Stream_event *script_event_;
-  Stream_event *current_span_event_;
-  bool end_new_spanner_;
-};
-
-New_dynamic_engraver::New_dynamic_engraver ()
-{
-  script_event_ = 0;
-  current_span_event_ = 0;
-  script_ = 0;
-  finished_spanner_ = 0;
-  current_spanner_ = 0;
-  accepted_spanevents_drul_.set (0, 0);
-  end_new_spanner_ = false;
-}
-
-IMPLEMENT_TRANSLATOR_LISTENER (New_dynamic_engraver, absolute_dynamic);
-void
-New_dynamic_engraver::listen_absolute_dynamic (Stream_event *ev)
-{
-  ASSIGN_EVENT_ONCE (script_event_, ev);
-}
-
-IMPLEMENT_TRANSLATOR_LISTENER (New_dynamic_engraver, span_dynamic);
-void
-New_dynamic_engraver::listen_span_dynamic (Stream_event *ev)
-{
-  Direction d = to_dir (ev->get_property ("span-direction"));
-
-  ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[d], ev);
-}
-
-IMPLEMENT_TRANSLATOR_LISTENER (New_dynamic_engraver, break_span);
-void
-New_dynamic_engraver::listen_break_span (Stream_event *event)
-{
-  if (event->in_event_class ("break-dynamic-span-event"))
-    {
-      // Case 1: Already have a start dynamic event -> break applies to new
-      //         spanner (created later) -> set a flag
-      // Case 2: no new spanner, but spanner already active -> break it now
-      if (accepted_spanevents_drul_[START])
-        end_new_spanner_ = true;
-      else if (current_spanner_)
-        current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
-    }
-}
-
-SCM
-New_dynamic_engraver::get_property_setting (Stream_event *evt,
-                                            char const *evprop,
-                                            char const *ctxprop)
-{
-  SCM spanner_type = evt->get_property (evprop);
-  if (spanner_type == SCM_EOL)
-    spanner_type = get_property (ctxprop);
-  return spanner_type;
-}
-
-void
-New_dynamic_engraver::process_music ()
-{
-  if (current_spanner_
-      && (accepted_spanevents_drul_[STOP]
-          || script_event_
-          || accepted_spanevents_drul_[START]))
-    {
-      Stream_event *ender = accepted_spanevents_drul_[STOP];
-      if (!ender)
-        ender = script_event_;
-
-      if (!ender)
-        ender = accepted_spanevents_drul_[START];
-
-      finished_spanner_ = current_spanner_;
-      announce_end_grob (finished_spanner_, ender->self_scm ());
-      current_spanner_ = 0;
-      current_span_event_ = 0;
-    }
-
-  if (accepted_spanevents_drul_[START])
-    {
-      current_span_event_ = accepted_spanevents_drul_[START];
-
-      string start_type = get_spanner_type (current_span_event_);
-      SCM cresc_type = get_property_setting (current_span_event_, "span-type",
-                                             (start_type + "Spanner").c_str ());
-
-      if (cresc_type == ly_symbol2scm ("text"))
-        {
-          current_spanner_
-            = make_spanner ("DynamicTextSpanner",
-                            accepted_spanevents_drul_[START]->self_scm ());
-
-          SCM text = get_property_setting (current_span_event_, "span-text",
-                                           (start_type + "Text").c_str ());
-          if (Text_interface::is_markup (text))
-            current_spanner_->set_property ("text", text);
-          /*
-            If the line of a text spanner is hidden, end the alignment spanner
-            early: this allows dynamics to be spaced individually instead of
-            being linked together.
-          */
-          if (current_spanner_->get_property ("style") == ly_symbol2scm ("none"))
-            current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
-        }
-      else
-        {
-          if (cresc_type != ly_symbol2scm ("hairpin"))
-            {
-              string as_string = ly_scm_write_string (cresc_type);
-              current_span_event_
-              ->origin ()->warning (_f ("unknown crescendo style: %s\ndefaulting to hairpin.", as_string.c_str ()));
-            }
-          current_spanner_ = make_spanner ("Hairpin",
-                                           current_span_event_->self_scm ());
-        }
-      // if we have a break-dynamic-span event right after the start dynamic, break the new spanner immediately
-      if (end_new_spanner_)
-        {
-          current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
-          end_new_spanner_ = false;
-        }
-      if (finished_spanner_)
-        {
-          if (Hairpin::has_interface (finished_spanner_))
-            Pointer_group_interface::add_grob (finished_spanner_,
-                                               ly_symbol2scm ("adjacent-spanners"),
-                                               current_spanner_);
-          if (Hairpin::has_interface (current_spanner_))
-            Pointer_group_interface::add_grob (current_spanner_,
-                                               ly_symbol2scm ("adjacent-spanners"),
-                                               finished_spanner_);
-        }
-    }
-
-  if (script_event_)
-    {
-      script_ = make_item ("DynamicText", script_event_->self_scm ());
-      script_->set_property ("text",
-                             script_event_->get_property ("text"));
-
-      if (finished_spanner_)
-        finished_spanner_->set_bound (RIGHT, script_);
-      if (current_spanner_)
-        current_spanner_->set_bound (LEFT, script_);
-    }
-}
-
-void
-New_dynamic_engraver::stop_translation_timestep ()
-{
-  if (finished_spanner_ && !finished_spanner_->get_bound (RIGHT))
-    finished_spanner_
-    ->set_bound (RIGHT,
-                 unsmob_grob (get_property ("currentMusicalColumn")));
-
-  if (current_spanner_ && !current_spanner_->get_bound (LEFT))
-    current_spanner_
-    ->set_bound (LEFT,
-                 unsmob_grob (get_property ("currentMusicalColumn")));
-  script_ = 0;
-  script_event_ = 0;
-  accepted_spanevents_drul_.set (0, 0);
-  finished_spanner_ = 0;
-  end_new_spanner_ = false;
-}
-
-void
-New_dynamic_engraver::finalize ()
-{
-  if (current_spanner_
-      && !current_spanner_->is_live ())
-    current_spanner_ = 0;
-  if (current_spanner_)
-    {
-      current_span_event_
-      ->origin ()->warning (_f ("unterminated %s",
-                                get_spanner_type (current_span_event_)
-                                .c_str ()));
-      current_spanner_->suicide ();
-      current_spanner_ = 0;
-    }
-}
-
-string
-New_dynamic_engraver::get_spanner_type (Stream_event *ev)
-{
-  string type;
-  SCM start_sym = scm_car (ev->get_property ("class"));
-
-  if (start_sym == ly_symbol2scm ("decrescendo-event"))
-    type = "decrescendo";
-  else if (start_sym == ly_symbol2scm ("crescendo-event"))
-    type = "crescendo";
-  else
-    programming_error ("unknown dynamic spanner type");
-
-  return type;
-}
-
-void
-New_dynamic_engraver::acknowledge_note_column (Grob_info info)
-{
-  if (script_ && !script_->get_parent (X_AXIS))
-    {
-      extract_grob_set (info.grob (), "note-heads", heads);
-      Grob *stem = unsmob_grob (info.grob ()->get_object ("stem"));
-      /*
-        Spacing constraints may require dynamics to be aligned on rests,
-        so check for a rest if this note column has no note heads.
-      */
-      Grob *x_parent = (heads.size ()
-                        ? heads[0]
-                        : unsmob_grob (info.grob ()->get_object ("rest")));
-      if (x_parent)
-        {
-          script_->set_parent (x_parent, X_AXIS);
-          Self_alignment_interface::set_center_parent (script_, X_AXIS);
-          Self_alignment_interface::avoid_x_collisions (script_);
-        }
-      if (stem)
-        Pointer_group_interface::add_grob (script_, ly_symbol2scm ("potential-X-colliding-grobs"), stem);
-    }
-
-  if (current_spanner_ && !current_spanner_->get_bound (LEFT))
-    current_spanner_->set_bound (LEFT, info.grob ());
-  if (finished_spanner_ && !finished_spanner_->get_bound (RIGHT))
-    finished_spanner_->set_bound (RIGHT, info.grob ());
-}
-
-ADD_ACKNOWLEDGER (New_dynamic_engraver, note_column);
-ADD_TRANSLATOR (New_dynamic_engraver,
-                /* doc */
-                "Create hairpins, dynamic texts and dynamic text spanners.",
-
-                /* create */
-                "DynamicTextSpanner "
-                "DynamicText "
-                "Hairpin ",
-
-                /* read */
-                "crescendoSpanner "
-                "crescendoText "
-                "currentMusicalColumn "
-                "decrescendoSpanner "
-                "decrescendoText ",
-
-                /* write */
-                ""
-               );
index 574591a23e8e53e1428d5fb0b431d793000dea9b..a605f0f4ae7e4f574245c84a054e83b93ec58b93 100644 (file)
@@ -194,7 +194,7 @@ New_fingering_engraver::position_scripts (SCM orientations,
                                           vector<Finger_tuple> *scripts)
 {
   for (vsize i = 0; i < scripts->size (); i++)
-    if (stem_ && to_boolean (scripts->at (i).script_->get_property ("add-stem-support")))
+    if (stem_)
       {
         Side_position_interface::add_support (scripts->at (i).script_, stem_);
         if (Grob *flag = unsmob_grob (stem_->get_object ("flag")))
index 3ab245ca5e84591fd924d65cf3334f5b7082e481..aad09a95a99ee64069f3fdca24441b06b096d709 100644 (file)
@@ -231,7 +231,8 @@ check_meshing_chords (Grob *me,
 
       /* If possible, don't wipe any heads.  Else, wipe shortest head,
          or head with smallest amount of dots.  Note: when merging
-         different heads, dots on the smaller one disappear. */
+         different heads, dots on the smaller one disappear; and when
+         merging identical heads, dots on the down-stem head disappear */
       Grob *wipe_ball = 0;
       Grob *dot_wipe_head = head_up;
 
@@ -248,7 +249,7 @@ check_meshing_chords (Grob *me,
               wipe_ball = head_up;
             }
           else
-            dot_wipe_head = head_up;
+            dot_wipe_head = head_down;
         }
       else if (down_ball_type > up_ball_type)
         {
@@ -593,6 +594,22 @@ Note_collision_interface::add_column (Grob *me, Grob *ncol)
   Axis_group_interface::add_element (me, ncol);
 }
 
+vector<int>
+Note_collision_interface::note_head_positions (Grob *me)
+{
+  vector<int> out;
+  extract_grob_set (me, "elements", elts);
+  for (vsize i = 0; i < elts.size (); i++)
+    if (Grob *stem = unsmob_grob (elts[i]->get_object ("stem")))
+      {
+        vector<int> nhp = Stem::note_head_positions (stem);
+        out.insert (out.end (), nhp.begin (), nhp.end ());
+      }
+
+  vector_sort (out, less<int> ());
+  return out;
+}
+
 ADD_INTERFACE (Note_collision_interface,
                "An object that handles collisions between notes with"
                " different stem directions and horizontal shifts.  Most of"
index da52093797fb1f3b98c91f42c07ad0835f70a441..42bd9b484c005270e9b290b8fef74df1cd355bd9 100644 (file)
@@ -196,12 +196,6 @@ Note_column::dot_column (Grob *me)
   return 0;
 }
 
-Grob *
-Note_column::arpeggio (Grob *me)
-{
-  return unsmob_grob (me->get_object ("arpeggio"));
-}
-
 /* If a note-column contains a cross-staff stem then
    nc->extent (Y_AXIS, refp) will not consider the extent of the stem.
    If you want the extent of the stem to be included (and you are safe
@@ -220,7 +214,6 @@ ADD_INTERFACE (Note_column,
                "Stem and noteheads combined.",
 
                /* properties */
-               "arpeggio "
                "force-hshift "
                "horizontal-shift "
                "ignore-collision "
index 287b10dc043a42ce8ebe613422a8c51fe916874b..5d8352e72df32240749dcaa3d0f80dda8d16e6df 100644 (file)
@@ -38,7 +38,7 @@ internal_print (Grob *me, string *font_char)
 {
   string style = robust_symbol2string (me->get_property ("style"), "default");
 
-  string suffix = to_string (min (robust_scm2int (me->get_property ("duration-log"), 2), 2));
+  string suffix = ::to_string (min (robust_scm2int (me->get_property ("duration-log"), 2), 2));
   if (style != "default")
     suffix = robust_scm2string (me->get_property ("glyph-name"), "");
 
@@ -162,7 +162,7 @@ Note_head::stem_attachment_coordinate (Grob *me, Axis a)
 }
 
 Offset
-Note_head::get_stem_attachment (Font_metric *fm, string key)
+Note_head::get_stem_attachment (Font_metric *fm, const string &key)
 {
   Offset att;
 
index 01086620ef5e3f6ea23ce554926c52e7eb8ee338..ddf9fe39213e0d74910ce75a268808ad254d424c 100644 (file)
@@ -80,21 +80,24 @@ Note_performer::process_music ()
           Moment len = get_event_length (n, now_mom ());
 
           Audio_note *p = new Audio_note (*pitp, len,
-                                          tie_event, transposing.negated ());
+                                          tie_event, transposing);
           Audio_element_info info (p, n);
           announce_element (info);
           notes_.push_back (p);
 
           /*
-            shorten previous note.
+            Shorten previous note. If it was part of a tie, shorten
+            the first note in the tie.
            */
           if (now_mom ().grace_part_)
             {
               if (last_start_.grace_part_ == Rational (0))
                 {
                   for (vsize i = 0; i < last_notes_.size (); i++)
-                    last_notes_[i]->length_mom_ += Moment (0,
-                                                           now_mom ().grace_part_);
+                    {
+                      Audio_note *tie_head = last_notes_[i]->tie_head ();
+                      tie_head->length_mom_ += Moment (0, now_mom ().grace_part_);
+                    }
                 }
             }
         }
index 477236775d553d750f40e4d795e1f52aa71dcccb..1d0d21fbbb502e5ae977c0e90781cfe63233aca2 100644 (file)
@@ -79,7 +79,7 @@ Note_spacing::get_spacing (Grob *me, Item *right_col,
     adjust things so there are no collisions.
   */
   Drul_array<Skyline> skys = Spacing_interface::skylines (me, right_col);
-  Real distance = skys[LEFT].distance (skys[RIGHT]);
+  Real distance = skys[LEFT].distance (skys[RIGHT], robust_scm2double (right_col->get_property ("skyline-vertical-padding"), 0.0));
   Real min_dist = max (0.0, distance);
   Real min_desired_space = left_head_end + (min_dist - left_head_end + base_space - increment) / 2;
   Real ideal = base_space - increment + left_head_end;
index fc97b99687b4a96a5dfa58cd831d2cdbb7d9bbd5..76bbff86ed0cfdb762a70d3da57bdd9c4647f459 100644 (file)
 */
 
 #include "open-type-font.hh"
+#include "freetype.hh"
 
 #include <cstdio>
 
 using namespace std;
 
-#include <freetype/tttables.h>
+#include FT_TRUETYPE_TABLES_H
 
 #include "dimensions.hh"
+#include "freetype.hh"
 #include "international.hh"
 #include "modified-font-metric.hh"
 #include "warn.hh"
@@ -58,7 +60,7 @@ load_table (char const *tag_str, FT_Face face, FT_ULong *length)
 }
 
 string
-Open_type_font::get_otf_table (string tag) const
+Open_type_font::get_otf_table (const string &tag) const
 {
   return ::get_otf_table (face_, tag);
 }
@@ -90,7 +92,7 @@ Open_type_font::~Open_type_font ()
   UGH fix naming
 */
 string
-get_otf_table (FT_Face face, string tag)
+get_otf_table (FT_Face face, const string &tag)
 {
   FT_ULong len;
   FT_Byte *tab = load_table (tag.c_str (), face, &len);
@@ -101,7 +103,7 @@ get_otf_table (FT_Face face, string tag)
 }
 
 FT_Face
-open_ft_face (string str, FT_Long idx)
+open_ft_face (const string &str, FT_Long idx)
 {
   FT_Face face;
   FT_Error error_code = FT_New_Face (freetype2_library, str.c_str (), idx, &face);
@@ -116,7 +118,7 @@ open_ft_face (string str, FT_Long idx)
 }
 
 SCM
-Open_type_font::make_otf (string str)
+Open_type_font::make_otf (const string &str)
 {
   FT_Face face = open_ft_face (str, 0 /* index */);
   Open_type_font *otf = new Open_type_font (face);
@@ -150,7 +152,7 @@ Open_type_font::derived_mark () const
 }
 
 Offset
-Open_type_font::attachment_point (string glyph_name) const
+Open_type_font::attachment_point (const string &glyph_name) const
 {
   SCM sym = ly_symbol2scm (glyph_name.c_str ());
   SCM entry = scm_hashq_ref (lily_character_table_, sym, SCM_BOOL_F);
@@ -213,19 +215,18 @@ Open_type_font::get_indexed_char_dimensions (size_t signed_idx) const
         }
     }
 
-  FT_UInt idx = FT_UInt (signed_idx);
-  FT_Load_Glyph (face_, idx, FT_LOAD_NO_SCALE);
-
-  FT_Glyph_Metrics m = face_->glyph->metrics;
-  FT_Pos hb = m.horiBearingX;
-  FT_Pos vb = m.horiBearingY;
-  Box b (Interval (Real (-hb), Real (m.width - hb)),
-         Interval (Real (-vb), Real (m.height - vb)));
+  Box b = get_unscaled_indexed_char_dimensions (signed_idx);
 
   b.scale (design_size () / Real (face_->units_per_EM));
   return b;
 }
 
+Real
+Open_type_font::get_units_per_EM () const
+{
+  return face_->units_per_EM;
+}
+
 size_t
 Open_type_font::name_to_index (string nm) const
 {
@@ -236,6 +237,24 @@ Open_type_font::name_to_index (string nm) const
   return (size_t) - 1;
 }
 
+Box
+Open_type_font::get_unscaled_indexed_char_dimensions (size_t signed_idx) const
+{
+  return ly_FT_get_unscaled_indexed_char_dimensions (face_, signed_idx);
+}
+
+Box
+Open_type_font::get_glyph_outline_bbox (size_t signed_idx) const
+{
+  return ly_FT_get_glyph_outline_bbox (face_, signed_idx);
+}
+
+SCM
+Open_type_font::get_glyph_outline (size_t signed_idx) const
+{
+  return ly_FT_get_glyph_outline (face_, signed_idx);
+}
+
 size_t
 Open_type_font::index_to_charcode (size_t i) const
 {
index 2b0910f8873600feebf136424c8ffa823d0f93d6..3ff29d01bd0d67d2bf8a644483dbbda3ef5d262a 100644 (file)
@@ -64,12 +64,21 @@ Optimal_page_breaking::solve ()
       best = space_systems_on_best_pages (0, first_page_num);
 
       page_count = best.systems_per_page_.size ();
-      min_sys_count = ideal_sys_count - best.systems_per_page_.back ();
+      if (page_count == 0)
+        {
+          min_sys_count = 0;
+        }
+      else
+        {
+          min_sys_count = ideal_sys_count - best.systems_per_page_.back ();
 
-      if (page_count > 1 && best.systems_per_page_[page_count - 2] > 1)
-        min_sys_count -= best.systems_per_page_[page_count - 2];
+          if (page_count > 1 && best.systems_per_page_[page_count - 2] > 1)
+            min_sys_count -= best.systems_per_page_[page_count - 2];
 
-      min_sys_count = max (min_sys_count, (vsize)1);
+          if (min_sys_count > ideal_sys_count  // subtraction wrapped around
+              || min_sys_count <= 0)
+            min_sys_count = 1;
+        }
     }
   else
     {
@@ -103,7 +112,7 @@ Optimal_page_breaking::solve ()
 
   if (page_count == 1)
     message (_ ("Fitting music on 1 page..."));
-  else if (scm_is_integer (forced_page_count))
+  else if (scm_is_integer (forced_page_count) || page_count == 0)
     message (_f ("Fitting music on %d pages...", (int)page_count));
   else
     message (_f ("Fitting music on %d or %d pages...", (int)page_count - 1, (int)page_count));
diff --git a/lily/out/parser.cc b/lily/out/parser.cc
deleted file mode 100644 (file)
index 208de71..0000000
+++ /dev/null
@@ -1,7582 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
-
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   This program 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 2, or (at your option)
-   any later version.
-
-   This program 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 this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
-   simplifying the original so-called "semantic" parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "2.3"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 1
-
-/* Using locations.  */
-#define YYLSP_NEEDED 1
-
-
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     END_OF_FILE = 0,
-     PREC_BOT = 258,
-     REPEAT = 259,
-     ALTERNATIVE = 260,
-     COMPOSITE = 261,
-     ADDLYRICS = 262,
-     DEFAULT = 263,
-     FUNCTION_ARGLIST = 264,
-     DURATION_IDENTIFIER = 265,
-     REAL = 266,
-     UNSIGNED = 267,
-     TONICNAME_PITCH = 268,
-     NOTENAME_PITCH = 269,
-     PITCH_IDENTIFIER = 270,
-     NUMBER_IDENTIFIER = 271,
-     PREC_TOP = 272,
-     ACCEPTS = 273,
-     ALIAS = 274,
-     BOOK = 275,
-     BOOKPART = 276,
-     CHANGE = 277,
-     CHORDMODE = 278,
-     CHORDS = 279,
-     CONSISTS = 280,
-     CONTEXT = 281,
-     DEFAULTCHILD = 282,
-     DENIES = 283,
-     DESCRIPTION = 284,
-     DRUMMODE = 285,
-     DRUMS = 286,
-     FIGUREMODE = 287,
-     FIGURES = 288,
-     HEADER = 289,
-     INVALID = 290,
-     LAYOUT = 291,
-     LYRICMODE = 292,
-     LYRICS = 293,
-     LYRICSTO = 294,
-     MARKUP = 295,
-     MARKUPLIST = 296,
-     MIDI = 297,
-     NAME = 298,
-     NOTEMODE = 299,
-     OVERRIDE = 300,
-     PAPER = 301,
-     REMOVE = 302,
-     REST = 303,
-     REVERT = 304,
-     SCORE = 305,
-     SEQUENTIAL = 306,
-     SET = 307,
-     SIMULTANEOUS = 308,
-     TEMPO = 309,
-     TYPE = 310,
-     UNSET = 311,
-     WITH = 312,
-     NEWCONTEXT = 313,
-     CHORD_BASS = 314,
-     CHORD_CARET = 315,
-     CHORD_COLON = 316,
-     CHORD_MINUS = 317,
-     CHORD_SLASH = 318,
-     ANGLE_OPEN = 319,
-     ANGLE_CLOSE = 320,
-     DOUBLE_ANGLE_OPEN = 321,
-     DOUBLE_ANGLE_CLOSE = 322,
-     E_BACKSLASH = 323,
-     E_ANGLE_CLOSE = 324,
-     E_CHAR = 325,
-     E_CLOSE = 326,
-     E_EXCLAMATION = 327,
-     E_BRACKET_OPEN = 328,
-     E_OPEN = 329,
-     E_BRACKET_CLOSE = 330,
-     E_ANGLE_OPEN = 331,
-     E_PLUS = 332,
-     E_TILDE = 333,
-     EXTENDER = 334,
-     FIGURE_CLOSE = 335,
-     FIGURE_OPEN = 336,
-     FIGURE_SPACE = 337,
-     HYPHEN = 338,
-     CHORDMODIFIERS = 339,
-     LYRIC_MARKUP = 340,
-     MULTI_MEASURE_REST = 341,
-     E_UNSIGNED = 342,
-     EXPECT_MARKUP = 343,
-     EXPECT_PITCH = 344,
-     EXPECT_DURATION = 345,
-     EXPECT_SCM = 346,
-     BACKUP = 347,
-     REPARSE = 348,
-     EXPECT_MARKUP_LIST = 349,
-     EXPECT_OPTIONAL = 350,
-     EXPECT_NO_MORE_ARGS = 351,
-     EMBEDDED_LILY = 352,
-     BOOK_IDENTIFIER = 353,
-     CHORDMODIFIER_PITCH = 354,
-     CHORD_MODIFIER = 355,
-     CHORD_REPETITION = 356,
-     CONTEXT_DEF_IDENTIFIER = 357,
-     CONTEXT_MOD_IDENTIFIER = 358,
-     DRUM_PITCH = 359,
-     EVENT_IDENTIFIER = 360,
-     EVENT_FUNCTION = 361,
-     FRACTION = 362,
-     LYRICS_STRING = 363,
-     LYRIC_ELEMENT = 364,
-     LYRIC_MARKUP_IDENTIFIER = 365,
-     MARKUP_FUNCTION = 366,
-     MARKUP_LIST_FUNCTION = 367,
-     MARKUP_IDENTIFIER = 368,
-     MARKUPLIST_IDENTIFIER = 369,
-     MUSIC_FUNCTION = 370,
-     MUSIC_IDENTIFIER = 371,
-     OUTPUT_DEF_IDENTIFIER = 372,
-     RESTNAME = 373,
-     SCM_FUNCTION = 374,
-     SCM_IDENTIFIER = 375,
-     SCM_TOKEN = 376,
-     SCORE_IDENTIFIER = 377,
-     STRING = 378,
-     STRING_IDENTIFIER = 379,
-     UNARY_MINUS = 380
-   };
-#endif
-/* Tokens.  */
-#define END_OF_FILE 0
-#define PREC_BOT 258
-#define REPEAT 259
-#define ALTERNATIVE 260
-#define COMPOSITE 261
-#define ADDLYRICS 262
-#define DEFAULT 263
-#define FUNCTION_ARGLIST 264
-#define DURATION_IDENTIFIER 265
-#define REAL 266
-#define UNSIGNED 267
-#define TONICNAME_PITCH 268
-#define NOTENAME_PITCH 269
-#define PITCH_IDENTIFIER 270
-#define NUMBER_IDENTIFIER 271
-#define PREC_TOP 272
-#define ACCEPTS 273
-#define ALIAS 274
-#define BOOK 275
-#define BOOKPART 276
-#define CHANGE 277
-#define CHORDMODE 278
-#define CHORDS 279
-#define CONSISTS 280
-#define CONTEXT 281
-#define DEFAULTCHILD 282
-#define DENIES 283
-#define DESCRIPTION 284
-#define DRUMMODE 285
-#define DRUMS 286
-#define FIGUREMODE 287
-#define FIGURES 288
-#define HEADER 289
-#define INVALID 290
-#define LAYOUT 291
-#define LYRICMODE 292
-#define LYRICS 293
-#define LYRICSTO 294
-#define MARKUP 295
-#define MARKUPLIST 296
-#define MIDI 297
-#define NAME 298
-#define NOTEMODE 299
-#define OVERRIDE 300
-#define PAPER 301
-#define REMOVE 302
-#define REST 303
-#define REVERT 304
-#define SCORE 305
-#define SEQUENTIAL 306
-#define SET 307
-#define SIMULTANEOUS 308
-#define TEMPO 309
-#define TYPE 310
-#define UNSET 311
-#define WITH 312
-#define NEWCONTEXT 313
-#define CHORD_BASS 314
-#define CHORD_CARET 315
-#define CHORD_COLON 316
-#define CHORD_MINUS 317
-#define CHORD_SLASH 318
-#define ANGLE_OPEN 319
-#define ANGLE_CLOSE 320
-#define DOUBLE_ANGLE_OPEN 321
-#define DOUBLE_ANGLE_CLOSE 322
-#define E_BACKSLASH 323
-#define E_ANGLE_CLOSE 324
-#define E_CHAR 325
-#define E_CLOSE 326
-#define E_EXCLAMATION 327
-#define E_BRACKET_OPEN 328
-#define E_OPEN 329
-#define E_BRACKET_CLOSE 330
-#define E_ANGLE_OPEN 331
-#define E_PLUS 332
-#define E_TILDE 333
-#define EXTENDER 334
-#define FIGURE_CLOSE 335
-#define FIGURE_OPEN 336
-#define FIGURE_SPACE 337
-#define HYPHEN 338
-#define CHORDMODIFIERS 339
-#define LYRIC_MARKUP 340
-#define MULTI_MEASURE_REST 341
-#define E_UNSIGNED 342
-#define EXPECT_MARKUP 343
-#define EXPECT_PITCH 344
-#define EXPECT_DURATION 345
-#define EXPECT_SCM 346
-#define BACKUP 347
-#define REPARSE 348
-#define EXPECT_MARKUP_LIST 349
-#define EXPECT_OPTIONAL 350
-#define EXPECT_NO_MORE_ARGS 351
-#define EMBEDDED_LILY 352
-#define BOOK_IDENTIFIER 353
-#define CHORDMODIFIER_PITCH 354
-#define CHORD_MODIFIER 355
-#define CHORD_REPETITION 356
-#define CONTEXT_DEF_IDENTIFIER 357
-#define CONTEXT_MOD_IDENTIFIER 358
-#define DRUM_PITCH 359
-#define EVENT_IDENTIFIER 360
-#define EVENT_FUNCTION 361
-#define FRACTION 362
-#define LYRICS_STRING 363
-#define LYRIC_ELEMENT 364
-#define LYRIC_MARKUP_IDENTIFIER 365
-#define MARKUP_FUNCTION 366
-#define MARKUP_LIST_FUNCTION 367
-#define MARKUP_IDENTIFIER 368
-#define MARKUPLIST_IDENTIFIER 369
-#define MUSIC_FUNCTION 370
-#define MUSIC_IDENTIFIER 371
-#define OUTPUT_DEF_IDENTIFIER 372
-#define RESTNAME 373
-#define SCM_FUNCTION 374
-#define SCM_IDENTIFIER 375
-#define SCM_TOKEN 376
-#define SCORE_IDENTIFIER 377
-#define STRING 378
-#define STRING_IDENTIFIER 379
-#define UNARY_MINUS 380
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 30 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-
-
-#define yyerror Lily_parser::parser_error
-
-/* We use custom location type: Input objects */
-#define YYLTYPE Input
-#define YYLLOC_DEFAULT(Current,Rhs,N) \
-       ((Current).set_location ((Rhs)[1], (Rhs)[N]))
-
-
-#line 108 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
- // -*-Fundamental-*-
-
-/*
-FIXME:
-
-   * The rules for who is protecting what are very shady.  Uniformise
-     this.
-
-   * There are too many lexical modes?
-*/
-
-#include "config.hh"
-
-#include <cctype>
-#include <cstdlib>
-#include <cstdio>
-using namespace std;
-
-#include "book.hh"
-#include "context-def.hh"
-#include "context-mod.hh"
-#include "dimensions.hh"
-#include "file-path.hh"
-#include "input.hh"
-#include "international.hh"
-#include "lily-guile.hh"
-#include "lily-lexer.hh"
-#include "lily-parser.hh"
-#include "main.hh"
-#include "misc.hh"
-#include "music.hh"
-#include "output-def.hh"
-#include "paper-book.hh"
-#include "scm-hash.hh"
-#include "score.hh"
-#include "text-interface.hh"
-#include "warn.hh"
-
-void
-Lily_parser::parser_error (Input const *i, Lily_parser *parser, string s)
-{
-       parser->parser_error (*i, s);
-}
-
-#define MYBACKUP(Token, Value, Location)                               \
-do                                                                     \
-       if (yychar == YYEMPTY)                                          \
-       {                                                               \
-               if (Token)                                              \
-                       parser->lexer_->push_extra_token (Token, Value); \
-               parser->lexer_->push_extra_token (BACKUP);              \
-       } else {                                                        \
-               parser->parser_error                                    \
-                       (Location, _("Too much lookahead"));            \
-       }                                                               \
-while (0)
-
-
-#define MYREPARSE(Location, Pred, Token, Value)                                \
-do                                                                     \
-       if (yychar == YYEMPTY)                                          \
-       {                                                               \
-               parser->lexer_->push_extra_token (Token, Value);        \
-               parser->lexer_->push_extra_token (REPARSE,              \
-                                                 Pred);                \
-       } else {                                                        \
-               parser->parser_error                                    \
-                       (Location, _("Too much lookahead"));            \
-       }                                                               \
-while (0)
-
-
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 1
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 1
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 182 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-{
-       Book *book;
-       Output_def *outputdef;
-       SCM scm;
-       std::string *string;
-       Score *score;
-       int i;
-}
-/* Line 187 of yacc.c.  */
-#line 441 "out/parser.cc"
-       YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
-typedef struct YYLTYPE
-{
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
-} YYLTYPE;
-# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
-# define YYLTYPE_IS_DECLARED 1
-# define YYLTYPE_IS_TRIVIAL 1
-#endif
-
-
-/* Copy the second part of user declarations.  */
-#line 191 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-
-
-#define MY_MAKE_MUSIC(x, spot)  make_music_with_input (ly_symbol2scm (x), spot)
-
-/* ES TODO:
-- Don't use lily module, create a new module instead.
-- delay application of the function
-*/
-#define LOWLEVEL_MAKE_SYNTAX(proc, args)       \
-  scm_apply_0 (proc, args)
-/* Syntactic Sugar. */
-#define MAKE_SYNTAX(name, location, ...)       \
-  LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant (name), scm_list_n (parser->self_scm (), make_input (location) , ##__VA_ARGS__, SCM_UNDEFINED))
-#define START_MAKE_SYNTAX(name, ...)                                   \
-       scm_list_n (ly_lily_module_constant (name) , ##__VA_ARGS__, SCM_UNDEFINED)
-#define FINISH_MAKE_SYNTAX(start, location, ...)                       \
-       LOWLEVEL_MAKE_SYNTAX (scm_car (start), scm_cons2 (parser->self_scm (), make_input (location), scm_append_x (scm_list_2 (scm_cdr (start), scm_list_n (__VA_ARGS__, SCM_UNDEFINED)))))
-
-SCM get_next_unique_context_id ();
-SCM get_next_unique_lyrics_context_id ();
-
-#undef _
-#if !HAVE_GETTEXT
-#define _(x) x
-#else
-#include <libintl.h>
-#define _(x) gettext (x)
-#endif
-
-
-static Music *make_music_with_input (SCM name, Input where);
-SCM check_scheme_arg (Lily_parser *parser, Input loc,
-                     SCM arg, SCM args, SCM pred);
-SCM loc_on_music (Input loc, SCM arg);
-SCM make_chord_elements (Input loc, SCM pitch, SCM dur, SCM modification_list);
-SCM make_chord_step (int step, Rational alter);
-SCM make_simple_markup (SCM a);
-bool is_duration (int t);
-bool is_regular_identifier (SCM id);
-int yylex (YYSTYPE *s, YYLTYPE *loc, Lily_parser *parser);
-void set_music_properties (Music *p, SCM a);
-
-
-
-/* Line 216 of yacc.c.  */
-#line 509 "out/parser.cc"
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-#  define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-#  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(msgid) msgid
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
-#else
-# define YYUSE(e) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int i)
-#else
-static int
-YYID (i)
-    int i;
-#endif
-{
-  return i;
-}
-#endif
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-#  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
-       && ! ((defined YYMALLOC || defined malloc) \
-            && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-        || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
-            && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yytype_int16 yyss;
-  YYSTYPE yyvs;
-    YYLTYPE yyls;
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
-      + 2 * YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)             \
-      do                                       \
-       {                                       \
-         YYSIZE_T yyi;                         \
-         for (yyi = 0; yyi < (Count); yyi++)   \
-           (To)[yyi] = (From)[yyi];            \
-       }                                       \
-      while (YYID (0))
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)                                       \
-    do                                                                 \
-      {                                                                        \
-       YYSIZE_T yynewbytes;                                            \
-       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
-       Stack = &yyptr->Stack;                                          \
-       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        \
-    while (YYID (0))
-
-#endif
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  5
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   4999
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  147
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  186
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  530
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  786
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   380
-
-#define YYTRANSLATE(YYX)                                               \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   145,     2,     2,     2,     2,     2,   142,
-     140,   141,   144,   128,   143,   127,   133,    17,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    10,     2,
-       2,   132,     2,   146,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   137,     2,   138,   135,   136,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   130,   134,   131,   139,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    11,    12,    13,    14,    15,
-      16,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     129
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     5,     6,    10,    11,    14,    17,    20,
-      23,    24,    27,    29,    31,    33,    35,    37,    39,    41,
-      43,    45,    47,    49,    51,    53,    55,    57,    59,    61,
-      63,    65,    67,    69,    71,    73,    75,    77,    80,    81,
-      83,    87,    89,    92,    93,    96,   101,   103,   105,   109,
-     114,   116,   118,   120,   122,   124,   126,   128,   130,   132,
-     134,   136,   138,   140,   142,   144,   149,   151,   153,   155,
-     156,   158,   161,   164,   167,   172,   173,   175,   178,   181,
-     184,   187,   190,   193,   194,   198,   201,   204,   209,   210,
-     212,   215,   218,   221,   224,   227,   228,   232,   235,   238,
-     243,   245,   247,   248,   252,   255,   258,   260,   263,   265,
-     267,   269,   271,   273,   274,   280,   283,   287,   290,   291,
-     295,   298,   303,   309,   312,   313,   316,   319,   323,   325,
-     327,   329,   331,   333,   335,   337,   339,   341,   346,   353,
-     356,   358,   361,   365,   367,   369,   371,   372,   378,   381,
-     383,   386,   387,   389,   390,   393,   396,   399,   401,   403,
-     405,   408,   410,   412,   414,   416,   418,   420,   422,   426,
-     430,   434,   439,   444,   449,   454,   460,   466,   472,   474,
-     479,   484,   486,   491,   496,   498,   500,   502,   504,   509,
-     514,   519,   524,   529,   534,   539,   545,   551,   557,   562,
-     567,   572,   576,   580,   582,   584,   586,   590,   594,   598,
-     602,   604,   606,   610,   614,   619,   624,   629,   633,   635,
-     637,   639,   643,   647,   652,   657,   662,   666,   670,   674,
-     676,   679,   683,   687,   689,   692,   696,   700,   702,   704,
-     706,   708,   710,   713,   715,   719,   723,   728,   733,   738,
-     741,   742,   745,   747,   749,   751,   754,   759,   764,   767,
-     771,   773,   775,   777,   779,   781,   783,   785,   787,   789,
-     790,   794,   795,   800,   803,   804,   809,   814,   816,   819,
-     821,   825,   828,   834,   838,   840,   842,   844,   846,   848,
-     850,   852,   854,   856,   858,   861,   864,   866,   870,   876,
-     880,   885,   888,   890,   892,   894,   898,   900,   902,   904,
-     906,   908,   910,   912,   914,   916,   918,   920,   923,   926,
-     930,   934,   936,   938,   942,   946,   947,   950,   956,   959,
-     961,   963,   965,   968,   971,   973,   975,   977,   979,   981,
-     983,   985,   986,   989,   991,   994,   996,   998,  1001,  1004,
-    1007,  1010,  1012,  1015,  1017,  1019,  1021,  1023,  1025,  1027,
-    1029,  1031,  1033,  1035,  1037,  1039,  1041,  1043,  1045,  1047,
-    1049,  1051,  1052,  1054,  1057,  1060,  1062,  1065,  1067,  1070,
-    1072,  1075,  1078,  1080,  1083,  1086,  1088,  1090,  1092,  1094,
-    1096,  1098,  1100,  1102,  1104,  1106,  1108,  1110,  1112,  1114,
-    1116,  1118,  1120,  1122,  1123,  1125,  1127,  1130,  1133,  1135,
-    1139,  1143,  1144,  1147,  1149,  1152,  1154,  1156,  1158,  1160,
-    1162,  1164,  1166,  1168,  1171,  1174,  1177,  1179,  1181,  1183,
-    1185,  1187,  1190,  1191,  1194,  1198,  1199,  1201,  1208,  1211,
-    1214,  1216,  1219,  1221,  1223,  1225,  1229,  1233,  1237,  1241,
-    1244,  1249,  1250,  1253,  1255,  1257,  1260,  1263,  1265,  1267,
-    1269,  1271,  1275,  1277,  1280,  1283,  1285,  1289,  1293,  1297,
-    1299,  1301,  1305,  1309,  1312,  1314,  1316,  1319,  1322,  1324,
-    1326,  1328,  1330,  1332,  1334,  1335,  1338,  1339,  1342,  1344,
-    1345,  1349,  1351,  1352,  1356,  1358,  1359,  1363,  1365,  1368,
-    1370,  1371,  1375,  1377,  1379,  1381,  1383,  1386,  1389,  1393,
-    1394,  1397,  1400,  1403,  1407,  1411,  1413,  1415,  1419,  1423,
-    1425,  1428,  1430,  1432,  1434,  1436,  1437,  1443,  1446,  1449,
-    1452
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int16 yyrhs[] =
-{
-     148,     0,    -1,   150,    -1,    -1,    99,   149,   158,    -1,
-      -1,   150,   151,    -1,   150,   162,    -1,   150,     1,    -1,
-     150,    37,    -1,    -1,   152,   160,    -1,   168,    -1,   171,
-      -1,   174,    -1,   200,    -1,   316,    -1,   314,    -1,   178,
-      -1,   123,    -1,   122,    -1,   153,    -1,   125,    -1,   126,
-      -1,   316,    -1,   314,    -1,   196,    -1,   174,    -1,   164,
-      -1,   168,    -1,   171,    -1,   178,    -1,   153,    -1,   157,
-      -1,   154,    -1,   157,    -1,   190,    -1,   121,   211,    -1,
-      -1,   163,    -1,   189,   189,   186,    -1,     1,    -1,    37,
-     158,    -1,    -1,   159,   162,    -1,    36,   130,   159,   131,
-      -1,   125,    -1,   110,    -1,   161,   132,   163,    -1,   161,
-     237,   132,   163,    -1,   155,    -1,   174,    -1,   168,    -1,
-     171,    -1,   178,    -1,   164,    -1,   191,    -1,   259,    -1,
-     303,    -1,   109,    -1,   244,    -1,   155,    -1,   316,    -1,
-     314,    -1,   196,    -1,    28,   130,   167,   131,    -1,   155,
-      -1,   200,    -1,   165,    -1,    -1,   104,    -1,   167,   240,
-      -1,   167,   196,    -1,   167,   166,    -1,    22,   130,   169,
-     131,    -1,    -1,   100,    -1,   169,   177,    -1,   169,   171,
-      -1,   169,   174,    -1,   169,   200,    -1,   169,   316,    -1,
-     169,   314,    -1,    -1,   169,   170,   160,    -1,   169,   155,
-      -1,   169,     1,    -1,    23,   130,   172,   131,    -1,    -1,
-     100,    -1,   172,   177,    -1,   172,   174,    -1,   172,   200,
-      -1,   172,   316,    -1,   172,   314,    -1,    -1,   172,   173,
-     160,    -1,   172,   155,    -1,   172,     1,    -1,    52,   130,
-     175,   131,    -1,   188,    -1,   124,    -1,    -1,   175,   176,
-     160,    -1,   175,   178,    -1,   175,     1,    -1,   178,    -1,
-     183,   131,    -1,    48,    -1,    44,    -1,    38,    -1,   179,
-      -1,   190,    -1,    -1,    28,   182,   130,   167,   131,    -1,
-     180,   130,    -1,   180,   130,   119,    -1,   183,   162,    -1,
-      -1,   183,   184,   181,    -1,   183,     1,    -1,    56,   279,
-     132,   302,    -1,    56,   247,   279,   132,   302,    -1,    56,
-     246,    -1,    -1,   186,   189,    -1,   186,     1,    -1,   130,
-     186,   131,    -1,   190,    -1,   295,    -1,   188,    -1,   155,
-      -1,   195,    -1,   200,    -1,   195,    -1,   200,    -1,   295,
-      -1,     4,   245,   309,   188,    -1,     4,   245,   309,   188,
-       5,   187,    -1,    53,   187,    -1,   187,    -1,    55,   187,
-      -1,    68,   186,    69,    -1,   248,    -1,   243,    -1,   235,
-      -1,    -1,    59,   197,   130,   199,   131,    -1,    59,   105,
-      -1,   105,    -1,    59,   219,    -1,    -1,   196,    -1,    -1,
-     199,   240,    -1,   199,   105,    -1,   199,   166,    -1,   225,
-      -1,   202,    -1,   202,    -1,   226,   201,    -1,   254,    -1,
-     227,    -1,   118,    -1,   203,    -1,   194,    -1,   193,    -1,
-     212,    -1,    97,    91,   204,    -1,    97,    92,   204,    -1,
-      97,    93,   204,    -1,    97,    91,   211,   271,    -1,    97,
-      92,   215,   276,    -1,    97,    93,   215,   109,    -1,    97,
-      93,   215,   259,    -1,    97,    93,   215,   127,    13,    -1,
-      97,    93,   215,   127,    12,    -1,    97,    93,   215,   127,
-      18,    -1,   205,    -1,    97,    93,   211,   220,    -1,    97,
-      93,   215,   307,    -1,   205,    -1,    97,    93,   211,   156,
-      -1,    97,    93,   215,   306,    -1,   212,    -1,   210,    -1,
-     216,    -1,   210,    -1,    97,    93,   208,   220,    -1,    97,
-      93,   209,   259,    -1,    97,    93,   208,   293,    -1,    97,
-      93,   209,    13,    -1,    97,    93,   209,    12,    -1,    97,
-      93,   209,    18,    -1,    97,    93,   209,   109,    -1,    97,
-      93,   209,   127,    13,    -1,    97,    93,   209,   127,    12,
-      -1,    97,    93,   209,   127,    18,    -1,    97,    91,   208,
-     271,    -1,    97,    92,   209,   276,    -1,    97,    93,   210,
-      94,    -1,   210,    95,   220,    -1,   210,    95,   306,    -1,
-     212,    -1,   207,    -1,   222,    -1,    93,   217,   156,    -1,
-      93,   218,   306,    -1,    93,   218,   109,    -1,    93,   218,
-     259,    -1,   214,    -1,   213,    -1,    93,   217,   293,    -1,
-     213,    95,   294,    -1,    93,   218,   127,    13,    -1,    93,
-     218,   127,    12,    -1,    93,   218,   127,    18,    -1,   214,
-      95,   306,    -1,   216,    -1,   206,    -1,   222,    -1,    93,
-     217,   220,    -1,    93,   218,   306,    -1,    93,   218,   127,
-      13,    -1,    93,   218,   127,    12,    -1,    93,   218,   127,
-      18,    -1,    93,   218,   259,    -1,    93,   218,   109,    -1,
-      93,   217,   293,    -1,   208,    -1,   210,    94,    -1,    97,
-      91,   217,    -1,    97,    92,   217,    -1,   209,    -1,   210,
-      94,    -1,    97,    91,   218,    -1,    97,    92,   218,    -1,
-     153,    -1,   221,    -1,   154,    -1,   221,    -1,   201,    -1,
-     121,   215,    -1,    98,    -1,    91,   217,   271,    -1,    92,
-     218,   276,    -1,    97,    91,   204,     8,    -1,    97,    92,
-     204,     8,    -1,    97,    93,   204,     8,    -1,   117,   211,
-      -1,    -1,   132,   245,    -1,   223,    -1,   192,    -1,   233,
-      -1,   226,   188,    -1,    28,   245,   224,   198,    -1,    60,
-     245,   224,   198,    -1,   228,   203,    -1,   229,   198,   203,
-      -1,    46,    -1,    32,    -1,    34,    -1,    25,    -1,    39,
-      -1,    33,    -1,    35,    -1,    26,    -1,    40,    -1,    -1,
-       7,   231,   200,    -1,    -1,   230,     7,   232,   200,    -1,
-     200,   230,    -1,    -1,    41,   245,   234,   188,    -1,    24,
-     125,   132,   125,    -1,   219,    -1,   236,   219,    -1,   236,
-      -1,   125,   132,   246,    -1,    58,   245,    -1,    47,   245,
-     237,   132,   246,    -1,    51,   245,   155,    -1,    27,    -1,
-      49,    -1,    20,    -1,    29,    -1,    30,    -1,    21,    -1,
-      57,    -1,    31,    -1,    45,    -1,   238,    -1,   239,   125,
-      -1,   239,   155,    -1,   245,    -1,   245,   133,   245,    -1,
-      47,   241,   237,   132,   246,    -1,    51,   241,   155,    -1,
-      54,   241,   132,   246,    -1,    58,   241,    -1,   242,    -1,
-     125,    -1,   126,    -1,   244,   128,   244,    -1,   125,    -1,
-     110,    -1,   126,    -1,   156,    -1,   306,    -1,   109,    -1,
-     293,    -1,   220,    -1,   306,    -1,   109,    -1,   293,    -1,
-     291,   258,    -1,   292,   258,    -1,   103,   278,   258,    -1,
-      88,   278,   258,    -1,   256,    -1,   249,    -1,   250,   278,
-     258,    -1,    66,   251,    67,    -1,    -1,   251,   252,    -1,
-     270,   310,   311,   265,   258,    -1,   106,   258,    -1,   253,
-      -1,   223,    -1,   118,    -1,   117,   215,    -1,   108,   215,
-      -1,   257,    -1,    75,    -1,    77,    -1,    70,    -1,   134,
-      -1,    80,    -1,   185,    -1,    -1,   258,   260,    -1,   263,
-      -1,   275,   254,    -1,    85,    -1,    81,    -1,   275,   264,
-      -1,   275,   263,    -1,   135,   273,    -1,   136,   273,    -1,
-     259,    -1,   127,   273,    -1,    89,    -1,   137,    -1,   138,
-      -1,   139,    -1,   140,    -1,   141,    -1,    74,    -1,    76,
-      -1,    73,    -1,    71,    -1,    78,    -1,   262,    -1,   261,
-      -1,   107,    -1,   282,    -1,   255,    -1,   272,    -1,   274,
-      -1,    -1,   132,    -1,   132,   267,    -1,   132,   266,    -1,
-     142,    -1,   266,   142,    -1,   143,    -1,   267,   143,    -1,
-      15,    -1,    15,   266,    -1,    15,   267,    -1,    14,    -1,
-      14,   266,    -1,    14,   267,    -1,   268,    -1,    16,    -1,
-     270,    -1,   269,    -1,   316,    -1,   245,    -1,    13,    -1,
-     135,    -1,   128,    -1,   127,    -1,   134,    -1,    67,    -1,
-     133,    -1,   136,    -1,   136,    -1,   135,    -1,   127,    -1,
-     280,    -1,    -1,   280,    -1,   277,    -1,   308,   281,    -1,
-      11,   281,    -1,   279,    -1,   280,   144,   308,    -1,   280,
-     144,   109,    -1,    -1,   281,   133,    -1,    10,    -1,    10,
-     308,    -1,    13,    -1,   125,    -1,   316,    -1,   127,    -1,
-     128,    -1,   145,    -1,    84,    -1,   283,    -1,   285,   138,
-      -1,   285,   284,    -1,   285,   286,    -1,    79,    -1,    74,
-      -1,    17,    -1,    70,    -1,   285,    -1,   137,   285,    -1,
-      -1,   288,   287,    -1,    83,   288,    82,    -1,    -1,    50,
-      -1,   270,   310,   311,   265,   277,   290,    -1,   106,   278,
-      -1,   120,   278,    -1,   296,    -1,   289,   278,    -1,   312,
-      -1,   110,    -1,   293,    -1,   293,   280,   258,    -1,   293,
-     260,   258,    -1,   111,   278,   258,    -1,   293,   278,   258,
-      -1,   269,   278,    -1,   269,   278,   298,   297,    -1,    -1,
-     297,   299,    -1,    63,    -1,    62,    -1,    65,   269,    -1,
-      61,   269,    -1,   298,    -1,   300,    -1,   102,    -1,   301,
-      -1,   300,   133,   301,    -1,   308,    -1,   308,   128,    -1,
-     308,    64,    -1,   308,    -1,   308,   139,   308,    -1,   303,
-     128,   304,    -1,   303,   127,   304,    -1,   304,    -1,   305,
-      -1,   305,   144,   305,    -1,   305,    17,   305,    -1,   127,
-     305,    -1,   306,    -1,   307,    -1,    13,    18,    -1,    12,
-      18,    -1,    13,    -1,    12,    -1,    18,    -1,    13,    -1,
-      13,    -1,    18,    -1,    -1,   310,   145,    -1,    -1,   311,
-     146,    -1,   112,    -1,    -1,    87,   313,   318,    -1,   116,
-      -1,    -1,    43,   315,   321,    -1,   115,    -1,    -1,    42,
-     317,   318,    -1,   321,    -1,   329,   330,    -1,   330,    -1,
-      -1,   153,   320,    94,    -1,   116,    -1,   322,    -1,   323,
-      -1,   325,    -1,   319,   116,    -1,   329,   323,    -1,   130,
-     324,   131,    -1,    -1,   324,   332,    -1,   324,   321,    -1,
-     114,   327,    -1,    96,   327,   321,    -1,    93,   327,   219,
-      -1,    98,    -1,   326,    -1,    90,   327,   332,    -1,   113,
-      90,   327,    -1,   328,    -1,   329,   328,    -1,   125,    -1,
-     115,    -1,   112,    -1,   126,    -1,    -1,    52,   331,   130,
-     175,   131,    -1,   113,   326,    -1,   319,   115,    -1,   329,
-     330,    -1,   330,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,   565,   565,   566,   566,   575,   576,   578,   580,   583,
-     590,   590,   595,   601,   607,   614,   619,   623,   627,   644,
-     648,   652,   653,   654,   655,   656,   657,   658,   663,   664,
-     669,   674,   684,   685,   689,   690,   691,   695,   703,   706,
-     707,   715,   718,   724,   726,   732,   741,   742,   746,   749,
-     761,   766,   770,   774,   778,   782,   785,   788,   791,   794,
-     797,   800,   803,   806,   809,   815,   822,   823,   827,   843,
-     847,   851,   854,   861,   873,   884,   894,   900,   905,   911,
-     917,   922,   926,   931,   930,   934,   935,   943,   950,   955,
-     961,   965,   971,   976,   980,   985,   984,   990,   991,   998,
-    1004,  1014,  1020,  1019,  1025,  1037,  1048,  1061,  1070,  1075,
-    1080,  1089,  1101,  1106,  1105,  1115,  1119,  1129,  1133,  1132,
-    1148,  1154,  1157,  1160,  1169,  1172,  1176,  1186,  1192,  1193,
-    1197,  1198,  1212,  1222,  1226,  1227,  1228,  1232,  1236,  1243,
-    1246,  1252,  1255,  1261,  1262,  1263,  1267,  1267,  1272,  1276,
-    1280,  1292,  1295,  1302,  1305,  1308,  1313,  1320,  1321,  1326,
-    1327,  1331,  1335,  1336,  1337,  1341,  1342,  1350,  1351,  1355,
-    1359,  1367,  1370,  1373,  1377,  1381,  1397,  1403,  1412,  1413,
-    1417,  1424,  1425,  1429,  1436,  1437,  1441,  1442,  1446,  1456,
-    1466,  1483,  1494,  1505,  1515,  1525,  1545,  1555,  1564,  1568,
-    1572,  1577,  1582,  1590,  1591,  1595,  1596,  1601,  1606,  1611,
-    1616,  1617,  1621,  1652,  1661,  1678,  1684,  1689,  1696,  1697,
-    1701,  1702,  1707,  1712,  1728,  1734,  1740,  1745,  1750,  1758,
-    1759,  1760,  1764,  1771,  1772,  1773,  1777,  1784,  1785,  1789,
-    1790,  1791,  1795,  1802,  1805,  1808,  1811,  1814,  1817,  1823,
-    1831,  1832,  1838,  1839,  1840,  1841,  1848,  1855,  1865,  1876,
-    1891,  1897,  1904,  1909,  1917,  1924,  1930,  1935,  1942,  1949,
-    1949,  1958,  1958,  1967,  1970,  1970,  1979,  1986,  1989,  1995,
-    2001,  2005,  2009,  2014,  2021,  2022,  2024,  2025,  2026,  2028,
-    2029,  2030,  2031,  2035,  2036,  2039,  2056,  2065,  2072,  2079,
-    2085,  2091,  2099,  2105,  2108,  2111,  2116,  2119,  2122,  2128,
-    2129,  2130,  2131,  2135,  2136,  2137,  2138,  2143,  2157,  2166,
-    2172,  2178,  2179,  2184,  2202,  2209,  2210,  2217,  2243,  2253,
-    2270,  2271,  2280,  2287,  2294,  2297,  2302,  2307,  2310,  2327,
-    2330,  2337,  2340,  2347,  2350,  2357,  2362,  2367,  2375,  2383,
-    2388,  2396,  2397,  2403,  2411,  2414,  2417,  2420,  2423,  2426,
-    2429,  2432,  2435,  2438,  2444,  2458,  2459,  2462,  2467,  2471,
-    2474,  2485,  2486,  2487,  2488,  2492,  2495,  2501,  2504,  2510,
-    2513,  2518,  2530,  2533,  2538,  2547,  2550,  2554,  2555,  2559,
-    2564,  2573,  2581,  2584,  2587,  2590,  2593,  2596,  2599,  2605,
-    2606,  2607,  2611,  2617,  2620,  2628,  2636,  2645,  2655,  2658,
-    2661,  2669,  2672,  2678,  2681,  2689,  2690,  2691,  2695,  2696,
-    2697,  2701,  2705,  2716,  2720,  2731,  2754,  2757,  2760,  2763,
-    2769,  2772,  2779,  2782,  2788,  2795,  2796,  2800,  2832,  2839,
-    2855,  2860,  2870,  2873,  2879,  2880,  2886,  2892,  2902,  2911,
-    2914,  2921,  2924,  2930,  2933,  2936,  2939,  2945,  2948,  2951,
-    2957,  2958,  2964,  2967,  2970,  2976,  2979,  2991,  2994,  2997,
-    3001,  3004,  3007,  3013,  3016,  3021,  3022,  3025,  3031,  3032,
-    3033,  3037,  3043,  3044,  3048,  3049,  3053,  3054,  3062,  3066,
-    3065,  3074,  3078,  3077,  3086,  3090,  3089,  3098,  3101,  3104,
-    3111,  3110,  3125,  3128,  3131,  3134,  3137,  3144,  3151,  3157,
-    3158,  3161,  3167,  3173,  3176,  3179,  3185,  3186,  3192,  3198,
-    3201,  3207,  3210,  3213,  3216,  3219,  3219,  3228,  3231,  3238,
-    3242
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-static const char *const yytname[] =
-{
-  "\"end of input\"", "error", "$undefined", "PREC_BOT", "\"\\\\repeat\"",
-  "\"\\\\alternative\"", "COMPOSITE", "\"\\\\addlyrics\"",
-  "\"\\\\default\"", "FUNCTION_ARGLIST", "':'", "DURATION_IDENTIFIER",
-  "REAL", "UNSIGNED", "TONICNAME_PITCH", "NOTENAME_PITCH",
-  "PITCH_IDENTIFIER", "'/'", "NUMBER_IDENTIFIER", "PREC_TOP",
-  "\"\\\\accepts\"", "\"\\\\alias\"", "\"\\\\book\"", "\"\\\\bookpart\"",
-  "\"\\\\change\"", "\"\\\\chordmode\"", "\"\\\\chords\"",
-  "\"\\\\consists\"", "\"\\\\context\"", "\"\\\\defaultchild\"",
-  "\"\\\\denies\"", "\"\\\\description\"", "\"\\\\drummode\"",
-  "\"\\\\drums\"", "\"\\\\figuremode\"", "\"\\\\figures\"",
-  "\"\\\\header\"", "\"\\\\version-error\"", "\"\\\\layout\"",
-  "\"\\\\lyricmode\"", "\"\\\\lyrics\"", "\"\\\\lyricsto\"",
-  "\"\\\\markup\"", "\"\\\\markuplist\"", "\"\\\\midi\"", "\"\\\\name\"",
-  "\"\\\\notemode\"", "\"\\\\override\"", "\"\\\\paper\"",
-  "\"\\\\remove\"", "\"\\\\rest\"", "\"\\\\revert\"", "\"\\\\score\"",
-  "\"\\\\sequential\"", "\"\\\\set\"", "\"\\\\simultaneous\"",
-  "\"\\\\tempo\"", "\"\\\\type\"", "\"\\\\unset\"", "\"\\\\with\"",
-  "\"\\\\new\"", "\"/+\"", "\"^\"", "\":\"", "\"-\"", "\"/\"", "\"<\"",
-  "\">\"", "\"<<\"", "\">>\"", "\"\\\\\"", "\"\\\\>\"",
-  "\"\\\\C[haracter]\"", "\"\\\\)\"", "\"\\\\!\"", "\"\\\\[\"",
-  "\"\\\\(\"", "\"\\\\]\"", "\"\\\\<\"", "\"\\\\+\"", "\"\\\\~\"",
-  "\"__\"", "FIGURE_CLOSE", "FIGURE_OPEN", "\"_\"", "\"--\"",
-  "CHORDMODIFIERS", "LYRIC_MARKUP", "MULTI_MEASURE_REST", "E_UNSIGNED",
-  "\"markup?\"", "\"ly:pitch?\"", "\"ly:duration?\"", "\"scheme?\"",
-  "\"(backed-up?)\"", "\"(reparsed?)\"", "\"markup-list?\"",
-  "\"optional?\"", "EXPECT_NO_MORE_ARGS", "\"#{\"", "BOOK_IDENTIFIER",
-  "CHORDMODIFIER_PITCH", "CHORD_MODIFIER", "CHORD_REPETITION",
-  "CONTEXT_DEF_IDENTIFIER", "CONTEXT_MOD_IDENTIFIER", "DRUM_PITCH",
-  "EVENT_IDENTIFIER", "EVENT_FUNCTION", "FRACTION", "LYRICS_STRING",
-  "LYRIC_ELEMENT", "LYRIC_MARKUP_IDENTIFIER", "MARKUP_FUNCTION",
-  "MARKUP_LIST_FUNCTION", "MARKUP_IDENTIFIER", "MARKUPLIST_IDENTIFIER",
-  "MUSIC_FUNCTION", "MUSIC_IDENTIFIER", "OUTPUT_DEF_IDENTIFIER",
-  "RESTNAME", "SCM_FUNCTION", "SCM_IDENTIFIER", "SCM_TOKEN",
-  "SCORE_IDENTIFIER", "STRING", "STRING_IDENTIFIER", "'-'", "'+'",
-  "UNARY_MINUS", "'{'", "'}'", "'='", "'.'", "'|'", "'^'", "'_'", "'['",
-  "']'", "'~'", "'('", "')'", "'''", "','", "'*'", "'!'", "'?'", "$accept",
-  "start_symbol", "@1", "lilypond", "toplevel_expression", "@2",
-  "embedded_scm_bare", "embedded_scm_bare_arg", "embedded_scm",
-  "embedded_scm_arg", "scm_function_call", "embedded_lilypond",
-  "lilypond_header_body", "lilypond_header", "assignment_id", "assignment",
-  "identifier_init", "context_def_spec_block", "context_mod_arg",
-  "context_mod_embedded", "context_def_spec_body", "book_block",
-  "book_body", "@3", "bookpart_block", "bookpart_body", "@4",
-  "score_block", "score_body", "@5", "paper_block", "output_def",
-  "output_def_head", "output_def_head_with_mode_switch",
-  "music_or_context_def", "@6", "output_def_body", "@7", "tempo_event",
-  "music_list", "braced_music_list", "music", "music_embedded",
-  "music_arg", "music_assign", "repeated_music", "sequential_music",
-  "simultaneous_music", "simple_music", "context_modification", "@8",
-  "optional_context_mod", "context_mod_list", "composite_music",
-  "closed_music", "music_bare", "grouped_music_list",
-  "function_arglist_skip", "function_arglist_nonbackup_common",
-  "function_arglist_closed_nonbackup", "function_arglist_nonbackup",
-  "function_arglist_keep", "function_arglist_closed_keep",
-  "function_arglist_backup", "function_arglist", "function_arglist_common",
-  "function_arglist_common_lyric", "function_arglist_common_minus",
-  "function_arglist_closed", "function_arglist_closed_common",
-  "function_arglist_optional", "function_arglist_closed_optional",
-  "embedded_scm_closed", "embedded_scm_arg_closed",
-  "scm_function_call_closed", "function_arglist_bare",
-  "music_function_call", "optional_id", "complex_music",
-  "complex_music_prefix", "mode_changed_music", "mode_changing_head",
-  "mode_changing_head_with_context", "new_lyrics", "@9", "@10",
-  "re_rhythmed_music", "@11", "context_change", "property_path_revved",
-  "property_path", "property_operation", "context_def_mod", "context_mod",
-  "context_prop_spec", "simple_music_property_def", "music_property_def",
-  "string", "simple_string", "scalar", "scalar_closed", "event_chord",
-  "note_chord_element", "chord_body", "chord_body_elements",
-  "chord_body_element", "music_function_chord_body",
-  "music_function_call_closed", "event_function_event", "command_element",
-  "command_event", "post_events", "post_event_nofinger", "post_event",
-  "string_number_event", "direction_less_char", "direction_less_event",
-  "direction_reqd_event", "octave_check", "sup_quotes", "sub_quotes",
-  "steno_pitch", "steno_tonic_pitch", "pitch", "pitch_also_in_chords",
-  "gen_text_def", "fingering", "script_abbreviation", "script_dir",
-  "duration_length", "maybe_notemode_duration",
-  "optional_notemode_duration", "steno_duration", "multiplied_duration",
-  "dots", "tremolo_type", "bass_number", "figured_bass_alteration",
-  "bass_figure", "figured_bass_modification", "br_bass_figure",
-  "figure_list", "figure_spec", "optional_rest", "simple_element",
-  "simple_chord_elements", "lyric_element", "lyric_element_arg",
-  "lyric_element_music", "new_chord", "chord_items", "chord_separator",
-  "chord_item", "step_numbers", "step_number", "tempo_range",
-  "number_expression", "number_term", "number_factor", "bare_number",
-  "bare_number_closed", "bare_unsigned", "unsigned_number", "exclamations",
-  "questions", "lyric_markup", "@12", "full_markup_list", "@13",
-  "full_markup", "@14", "markup_top", "markup_scm", "@15", "markup_list",
-  "markup_composed_list", "markup_braced_list", "markup_braced_list_body",
-  "markup_command_list", "markup_command_basic_arguments",
-  "markup_command_list_arguments", "markup_head_1_item",
-  "markup_head_1_list", "simple_markup", "@16", "markup", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-      58,   265,   266,   267,   268,   269,   270,    47,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,   337,   338,   339,   340,   341,   342,
-     343,   344,   345,   346,   347,   348,   349,   350,   351,   352,
-     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
-     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-     373,   374,   375,   376,   377,   378,   379,    45,    43,   380,
-     123,   125,    61,    46,   124,    94,    95,    91,    93,   126,
-      40,    41,    39,    44,    42,    33,    63
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint16 yyr1[] =
-{
-       0,   147,   148,   149,   148,   150,   150,   150,   150,   150,
-     152,   151,   151,   151,   151,   151,   151,   151,   151,   153,
-     153,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     154,   154,   155,   155,   156,   156,   156,   157,   158,   158,
-     158,   158,   158,   159,   159,   160,   161,   161,   162,   162,
-     162,   163,   163,   163,   163,   163,   163,   163,   163,   163,
-     163,   163,   163,   163,   163,   164,   165,   165,   166,   167,
-     167,   167,   167,   167,   168,   169,   169,   169,   169,   169,
-     169,   169,   169,   170,   169,   169,   169,   171,   172,   172,
-     172,   172,   172,   172,   172,   173,   172,   172,   172,   174,
-     175,   175,   176,   175,   175,   175,   177,   178,   179,   179,
-     179,   180,   181,   182,   181,   183,   183,   183,   184,   183,
-     183,   185,   185,   185,   186,   186,   186,   187,   188,   188,
-     189,   189,   190,   190,   191,   191,   191,   192,   192,   193,
-     193,   194,   194,   195,   195,   195,   197,   196,   196,   196,
-     196,   198,   198,   199,   199,   199,   199,   200,   200,   201,
-     201,   201,   202,   202,   202,   203,   203,   204,   204,   204,
-     204,   205,   205,   205,   205,   205,   205,   205,   206,   206,
-     206,   207,   207,   207,   208,   208,   209,   209,   210,   210,
-     210,   210,   210,   210,   210,   210,   210,   210,   210,   210,
-     210,   210,   210,   211,   211,   212,   212,   212,   212,   212,
-     212,   212,   213,   213,   214,   214,   214,   214,   215,   215,
-     216,   216,   216,   216,   216,   216,   216,   216,   216,   217,
-     217,   217,   217,   218,   218,   218,   218,   219,   219,   220,
-     220,   220,   221,   222,   222,   222,   222,   222,   222,   223,
-     224,   224,   225,   225,   225,   225,   226,   226,   227,   227,
-     228,   228,   228,   228,   228,   229,   229,   229,   229,   231,
-     230,   232,   230,   233,   234,   233,   235,   236,   236,   237,
-     238,   238,   238,   238,   239,   239,   239,   239,   239,   239,
-     239,   239,   239,   240,   240,   240,   241,   241,   242,   242,
-     242,   242,   243,   244,   244,   244,   245,   245,   245,   246,
-     246,   246,   246,   247,   247,   247,   247,   248,   248,   248,
-     248,   248,   248,   249,   250,   251,   251,   252,   252,   252,
-     253,   253,   254,   255,   256,   256,   256,   256,   256,   257,
-     257,   258,   258,   259,   259,   259,   259,   259,   259,   259,
-     259,   260,   260,   261,   262,   262,   262,   262,   262,   262,
-     262,   262,   262,   262,   263,   263,   263,   263,   263,   264,
-     264,   265,   265,   265,   265,   266,   266,   267,   267,   268,
-     268,   268,   269,   269,   269,   270,   270,   271,   271,   272,
-     272,   273,   274,   274,   274,   274,   274,   274,   274,   275,
-     275,   275,   276,   277,   277,   278,   279,   279,   280,   280,
-     280,   281,   281,   282,   282,   283,   283,   283,   284,   284,
-     284,   285,   285,   285,   285,   285,   286,   286,   286,   286,
-     287,   287,   288,   288,   289,   290,   290,   291,   291,   291,
-     292,   292,   293,   293,   294,   294,   294,   294,   295,   296,
-     296,   297,   297,   298,   298,   298,   298,   299,   299,   299,
-     300,   300,   301,   301,   301,   302,   302,   303,   303,   303,
-     304,   304,   304,   305,   305,   306,   306,   306,   307,   307,
-     307,   308,   309,   309,   310,   310,   311,   311,   312,   313,
-     312,   314,   315,   314,   316,   317,   316,   318,   318,   318,
-     320,   319,   321,   321,   321,   321,   321,   322,   323,   324,
-     324,   324,   325,   326,   326,   326,   327,   327,   328,   329,
-     329,   330,   330,   330,   330,   331,   330,   330,   330,   332,
-     332
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     1,     0,     3,     0,     2,     2,     2,     2,
-       0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     0,     1,
-       3,     1,     2,     0,     2,     4,     1,     1,     3,     4,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     4,     1,     1,     1,     0,
-       1,     2,     2,     2,     4,     0,     1,     2,     2,     2,
-       2,     2,     2,     0,     3,     2,     2,     4,     0,     1,
-       2,     2,     2,     2,     2,     0,     3,     2,     2,     4,
-       1,     1,     0,     3,     2,     2,     1,     2,     1,     1,
-       1,     1,     1,     0,     5,     2,     3,     2,     0,     3,
-       2,     4,     5,     2,     0,     2,     2,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     4,     6,     2,
-       1,     2,     3,     1,     1,     1,     0,     5,     2,     1,
-       2,     0,     1,     0,     2,     2,     2,     1,     1,     1,
-       2,     1,     1,     1,     1,     1,     1,     1,     3,     3,
-       3,     4,     4,     4,     4,     5,     5,     5,     1,     4,
-       4,     1,     4,     4,     1,     1,     1,     1,     4,     4,
-       4,     4,     4,     4,     4,     5,     5,     5,     4,     4,
-       4,     3,     3,     1,     1,     1,     3,     3,     3,     3,
-       1,     1,     3,     3,     4,     4,     4,     3,     1,     1,
-       1,     3,     3,     4,     4,     4,     3,     3,     3,     1,
-       2,     3,     3,     1,     2,     3,     3,     1,     1,     1,
-       1,     1,     2,     1,     3,     3,     4,     4,     4,     2,
-       0,     2,     1,     1,     1,     2,     4,     4,     2,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       3,     0,     4,     2,     0,     4,     4,     1,     2,     1,
-       3,     2,     5,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     2,     1,     3,     5,     3,
-       4,     2,     1,     1,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     2,     3,
-       3,     1,     1,     3,     3,     0,     2,     5,     2,     1,
-       1,     1,     2,     2,     1,     1,     1,     1,     1,     1,
-       1,     0,     2,     1,     2,     1,     1,     2,     2,     2,
-       2,     1,     2,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     1,     2,     2,     1,     2,     1,     2,     1,
-       2,     2,     1,     2,     2,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     1,     1,     2,     2,     1,     3,
-       3,     0,     2,     1,     2,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     2,     2,     1,     1,     1,     1,
-       1,     2,     0,     2,     3,     0,     1,     6,     2,     2,
-       1,     2,     1,     1,     1,     3,     3,     3,     3,     2,
-       4,     0,     2,     1,     1,     2,     2,     1,     1,     1,
-       1,     3,     1,     2,     2,     1,     3,     3,     3,     1,
-       1,     3,     3,     2,     1,     1,     2,     2,     1,     1,
-       1,     1,     1,     1,     0,     2,     0,     2,     1,     0,
-       3,     1,     0,     3,     1,     0,     3,     1,     2,     1,
-       0,     3,     1,     1,     1,     1,     2,     2,     3,     0,
-       2,     2,     2,     3,     3,     1,     1,     3,     3,     1,
-       2,     1,     1,     1,     1,     0,     5,     2,     2,     2,
-       1
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const yytype_uint16 yydefact[] =
-{
-       5,     3,     0,     0,     0,     1,     8,     0,     0,     0,
-     263,   267,     0,   261,   265,   262,   266,     9,   110,   264,
-     268,     0,   495,   492,   109,   260,   108,     0,     0,     0,
-       0,   124,    47,   494,   491,     0,   163,     0,    20,    19,
-      46,   124,     6,     0,    32,    50,    33,     0,     7,    12,
-      13,    14,    18,   111,     0,     0,   140,   253,   166,   165,
-      15,   158,   164,   252,   157,     0,   162,     0,   151,   254,
-      17,    16,    41,   413,   479,   478,   382,   379,   386,   480,
-       0,     0,     0,     0,     0,     0,     0,     0,   146,   325,
-     337,   362,   361,   359,   335,   360,   336,   363,   339,   346,
-     432,   345,   489,   403,   353,   403,   149,   403,   366,     0,
-      59,   443,   488,   403,   303,   304,   401,   338,   400,   399,
-     354,   355,   356,   357,   358,   131,     4,    39,    55,    52,
-      53,    51,    54,   340,   130,     0,   128,    56,   132,    64,
-     133,   145,   302,   144,    60,   143,   322,   403,   368,   321,
-     334,    57,   365,   364,   343,   385,   403,   484,     0,   367,
-     403,   341,   341,   403,   129,   440,    58,   469,   470,   474,
-     475,   442,    63,    62,   307,   306,   308,     0,    75,    88,
-     250,   274,     0,     0,     0,   139,   141,   250,     0,     0,
-       0,     0,     0,   243,   181,   204,   249,   203,   211,   210,
-     205,    37,     0,     0,    11,     0,     0,   237,   277,   238,
-     279,     0,   115,   120,   107,   117,     0,   269,   273,   255,
-     132,   133,   129,   258,   152,     0,   481,   414,   477,   476,
-     375,   377,   383,   384,   380,   381,     0,    69,    42,     0,
-     296,     0,     0,   411,   478,   311,     0,     0,    22,    23,
-      21,    34,   309,    35,    28,    29,    30,    27,    31,    36,
-      26,   241,   158,   313,   240,     0,   123,     0,   161,     0,
-     312,   310,   411,    25,    24,   301,   148,     0,   150,     0,
-       0,     0,   405,   341,   408,   404,   341,   438,     0,     0,
-     178,   219,   333,   218,   220,   439,     0,   473,   391,   349,
-     350,   131,   124,     0,   341,   449,   486,   396,     0,   394,
-     393,   397,   395,   392,   398,   390,   344,   348,   347,   369,
-     370,   389,   441,   317,   318,   341,     0,     0,     0,     0,
-     482,   483,     0,    76,     0,    89,     0,     0,   151,     0,
-     525,   523,     0,     0,   522,   502,   521,   524,   509,   500,
-     496,     0,   497,   503,   504,   505,   519,     0,   499,     0,
-       0,   493,     0,   101,     0,   100,   151,   126,   142,   125,
-       0,   229,   185,   184,     0,     0,   233,   187,   186,     0,
-       0,     0,   185,     0,     0,   205,     0,     0,     0,     0,
-       0,   127,    43,   242,    61,    48,   134,   135,   136,   278,
-       0,   116,   113,   119,   112,     0,   271,   259,   376,   378,
-       0,    70,     0,     0,     0,   299,     0,   407,     0,   181,
-     332,   160,     0,     0,   406,   153,   324,   341,   331,   330,
-     326,   329,   484,   415,   434,   421,   416,     0,   422,   430,
-     433,   417,   490,   320,     0,   319,     0,     0,     0,     0,
-     305,   323,     0,   454,   453,     0,   451,   485,   371,   401,
-     351,   342,   448,   468,   467,   472,   471,   137,    86,    74,
-      85,     0,    78,    79,    77,   106,    80,    82,    81,    98,
-      87,    97,     0,    91,    90,    92,    94,    93,   251,   256,
-     275,     0,     0,     0,     0,   515,   527,     0,   516,   512,
-       0,     0,   528,   506,     0,   507,   520,   498,   105,    99,
-       0,   104,   257,     0,     0,     0,   230,     0,   388,   387,
-     244,     0,     0,   234,   245,   402,     0,     0,     0,     0,
-     230,    34,   206,   212,   208,   401,   209,   207,     0,     0,
-       0,   203,     0,     0,   167,     0,     0,     0,     0,     0,
-     403,   444,   213,   217,     0,    49,     0,   270,     0,   276,
-     286,   289,   284,   287,   288,   291,   292,     0,   285,     0,
-     290,     0,     0,    65,    66,    68,    73,    72,    67,   293,
-       0,    71,     0,   297,   311,   300,   312,   310,   412,     0,
-       0,   121,   465,     0,   328,   486,   431,   428,   429,   427,
-     426,   418,   419,   423,   420,   424,   425,   410,   409,   239,
-     159,   221,     0,   228,   227,   401,   226,   222,     0,     0,
-     456,   455,   450,   372,   487,   403,   352,     0,    84,    96,
-       0,   518,     0,     0,     0,   508,   511,     0,   530,   510,
-     501,   103,     0,   229,   184,   231,     0,   185,   232,     0,
-       0,     0,   185,   201,   202,     0,     0,   185,   235,   233,
-     236,   212,   208,   401,   209,   207,     0,   215,   214,   216,
-       0,     0,     0,   246,   171,     0,   247,   172,     0,   248,
-     182,   173,   401,   174,   183,   341,   341,   341,    45,    44,
-      69,   272,     0,     0,   281,     0,   294,   295,   298,     0,
-       0,   122,     0,   155,   147,   156,   154,   371,   224,   223,
-     225,   179,   479,   478,   180,   459,   457,   452,   458,   460,
-     462,   374,   373,   435,   138,     0,   514,   513,     0,   517,
-     529,     0,     0,     0,   198,   199,     0,     0,   188,   190,
-     192,   191,   193,   194,   401,   189,   200,     0,     0,   215,
-     214,   216,     0,     0,   168,   169,   170,   176,   175,   177,
-     447,   446,   445,     0,     0,   283,   280,   475,   466,   341,
-       0,   464,   463,   436,   437,   526,   185,   187,   196,   195,
-     197,   114,     0,   327,   461,   282
-};
-
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,     2,     4,     3,    42,    43,    44,   531,   301,   252,
-      46,   126,   554,   204,    47,    48,   127,   254,   575,   576,
-     412,   255,   334,   471,   256,   336,   482,   257,   364,   510,
-     474,   258,    53,    54,   403,   556,    55,   216,   133,   188,
-      56,   134,   369,   136,   137,    57,    58,    59,   220,   260,
-     277,   225,   593,   221,   261,    61,    62,   754,   419,   291,
-     195,   371,   376,   382,   196,   644,   198,   199,   393,   378,
-     645,   658,   208,   611,   264,   385,    63,   338,    64,    65,
-      66,    67,    68,   218,   405,   558,    69,   339,   141,   210,
-     211,   579,   580,   581,   239,   142,   143,   144,   240,   266,
-     267,   145,   146,   147,   279,   430,   431,   268,   148,   149,
-     150,   323,   460,   461,   152,   153,   154,   318,   625,   232,
-     233,   155,   156,   157,   734,   319,   299,   320,   158,   735,
-     282,   283,   284,   285,   417,   159,   438,   605,   439,   606,
-     440,   280,   160,   774,   161,   162,   163,   552,   222,   165,
-     622,   456,   717,   718,   719,   591,   166,   167,   168,   169,
-     170,   272,   332,   306,   458,   171,   281,   273,   183,   274,
-     182,   350,   504,   501,   352,   353,   354,   500,   355,   498,
-     499,   356,   357,   358,   491,   639
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -560
-static const yytype_int16 yypact[] =
-{
-     -24,  -560,    78,  4169,   966,  -560,  -560,    56,   -28,   -19,
-    -560,  -560,    56,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
-    -560,    56,  -560,  -560,  -560,  -560,  -560,    -7,    22,    22,
-      56,  -560,  -560,  -560,  -560,   382,  -560,   382,  -560,  -560,
-    -560,  -560,  -560,    84,  -560,  -560,  -560,   -25,  -560,  -560,
-    -560,  -560,  -560,  -560,    40,   801,  -560,  -560,  -560,  -560,
-     107,  -560,  -560,  -560,  -560,  3845,  -560,   273,    28,  -560,
-    -560,  -560,  -560,   117,   116,   149,    93,    93,  -560,  -560,
-      52,   176,   966,    56,    56,    56,  2889,    56,   172,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
-    -560,  -560,  -560,   183,  -560,   183,  -560,   183,  -560,   634,
-    -560,  -560,  -560,   183,  -560,  -560,   297,  -560,   167,   167,
-    -560,  -560,  -560,  -560,  -560,   187,  -560,  -560,  -560,  -560,
-    -560,  -560,  -560,  -560,  -560,  3627,  -560,  -560,   202,  -560,
-     122,  -560,  -560,  -560,    86,  -560,  -560,   183,  -560,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,   183,  -560,  1518,  -560,
-     183,  -560,  -560,   183,   217,  -560,   279,  -560,    14,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,   151,   130,   140,
-      90,  -560,   669,   316,  3738,  -560,  -560,    90,  1344,   651,
-     746,   836,   157,  -560,  -560,  -560,  -560,  -560,   150,   162,
-    -560,  -560,  1456,   133,  -560,   634,  1104,  -560,  -560,  -560,
-     575,   134,   178,  -560,  -560,  -560,  4059,  -560,   282,  -560,
-    -560,   107,  -560,  -560,  -560,   273,  -560,  -560,  -560,  -560,
-    -560,  -560,   190,   164,   190,   164,   210,   247,  -560,   575,
-     230,   595,   233,  -560,    59,   303,   861,   861,  -560,  -560,
-    -560,  1670,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
-    -560,  -560,  1762,  -560,  -560,  3952,  -560,   183,  -560,   253,
-     310,   334,  -560,  -560,  -560,  -560,  -560,   257,  -560,   170,
-     420,   669,  -560,  -560,  -560,   249,  -560,  -560,   836,   642,
-    -560,  -560,  -560,  -560,  -560,  -560,   138,  -560,  -560,  -560,
-    -560,  -560,  -560,   323,  -560,   735,   251,  -560,   634,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
-    -560,  -560,  -560,  2751,  2751,  -560,   138,   138,   138,   138,
-    -560,  -560,  3845,  -560,  4215,  -560,  4315,    56,    28,  3845,
-    -560,  -560,   436,   440,  -560,  -560,  -560,  -560,  -560,  -560,
-    -560,   320,  -560,  -560,  -560,  -560,  -560,  1313,  -560,   309,
-     298,  -560,   -18,  -560,    80,  -560,    28,  -560,  -560,  -560,
-     686,  -560,   358,  -560,   816,   782,  -560,   364,  -560,   183,
-     836,   846,  1590,  3135,  2406,  1783,   871,   965,   968,   171,
-     297,  -560,  -560,  -560,  -560,  -560,  -560,   107,  -560,  -560,
-    1104,  -560,    56,  -560,  -560,  4618,  -560,  -560,  -560,  -560,
-     294,  -560,  4360,   295,    56,  -560,  3012,   333,   849,  1863,
-    -560,  -560,   337,   117,   333,  -560,  -560,  -560,  -560,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,   129,  -560,  1124,
-    -560,  -560,  -560,  2751,    75,  2751,  4763,  2480,   968,  1232,
-    -560,  2751,   457,  -560,  -560,   457,  -560,  -560,    13,   167,
-    -560,  -560,  2751,  -560,  -560,  -560,  -560,   476,  -560,  -560,
-    -560,    84,  -560,  -560,  -560,  -560,   107,  -560,  -560,  -560,
-    -560,  -560,    84,  -560,  -560,   107,  -560,  -560,  -560,  -560,
-    -560,   359,   440,   440,   440,  -560,  -560,   440,  -560,  -560,
-     643,   400,  -560,  -560,   388,  -560,  -560,  -560,  -560,  -560,
-      84,  -560,  -560,  1108,  1183,  1230,  -560,  4657,  -560,  -560,
-    -560,  1289,  1289,  -560,  -560,   249,  3258,  2519,  1325,  1325,
-    2558,  -560,  -560,  -560,  -560,   317,  -560,  -560,   882,   503,
-     816,   507,   894,   514,  -560,   183,   904,   519,  3381,  2632,
-     183,   809,  -560,  -560,   741,  -560,   401,  -560,  4618,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,    56,  -560,    56,
-    -560,    56,   407,  -560,  -560,  -560,  -560,  -560,   107,  -560,
-     685,  -560,  3012,  -560,  -560,  -560,  -560,  -560,  -560,   968,
-     117,  -560,   405,  4511,  2751,   251,  1124,  -560,  -560,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
-    -560,  -560,  1271,  -560,  -560,   528,  -560,  -560,  4869,  2671,
-    -560,  -560,   206,    93,  -560,   183,  -560,    22,  -560,  -560,
-    3738,  -560,   575,   316,   395,  -560,  -560,  1313,  -560,  -560,
-    -560,  -560,   936,   816,   507,  -560,   183,   104,  -560,  1006,
-    4763,  2710,  1629,  -560,  -560,  1018,   816,   165,  -560,   183,
-    -560,  1943,  1964,   553,  2044,  2124,  1032,  -560,  -560,  -560,
-     871,   965,   968,  -560,  -560,   968,  -560,  -560,   968,  -560,
-    -560,  -560,   621,  -560,  -560,  -560,  -560,   249,  -560,  -560,
-     247,  -560,   575,   595,  -560,  3012,  -560,  -560,  -560,  3504,
-    2632,  -560,   117,  -560,  -560,  -560,  -560,    13,  -560,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,   431,  -560,
-      27,   190,   164,   523,  -560,   124,  -560,  -560,   395,  -560,
-    -560,  1108,  1183,  1230,  -560,  -560,  1401,  1230,  -560,  -560,
-    -560,  -560,  -560,  -560,   666,  -560,  -560,  1289,  1289,  2145,
-    2225,  2305,  1325,  1325,  -560,  -560,  -560,  -560,  -560,  -560,
-    2751,  2751,  2751,  4467,   437,  -560,  -560,  2326,  -560,  -560,
-     117,  -560,  -560,  -560,  -560,  -560,   481,   481,  -560,  -560,
-    -560,  -560,  3012,  2751,  -560,  -560
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
-{
-    -560,  -560,  -560,  -560,  -560,  -560,   -35,   -12,    -3,  -347,
-     -58,   500,  -560,  -192,  -560,   -29,  -167,    45,  -560,    -2,
-    -104,    67,  -560,  -560,    64,  -560,  -560,    37,   -42,  -560,
-     256,     4,  -560,  -560,  -560,  -560,  -560,  -560,  -560,     2,
-     -11,   -41,    58,   -63,  -560,  -560,  -560,  -560,    50,     1,
-    -560,  -253,  -560,     0,  -220,   -56,   -10,   224,    -8,  -560,
-    -560,    57,   160,    39,   -22,   -26,  -560,  -560,    29,    -5,
-    -157,  -127,   -53,   -76,   -27,   -16,   321,   408,  -560,   -31,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
-    -214,  -560,  -560,     8,   414,  -560,  -560,   300,   114,  -351,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,   446,  -560,  -560,
-    -560,   -78,    10,    62,  -560,  -560,   456,  -560,   -90,   -75,
-     -55,  -560,  -156,  -235,  -308,  -560,   -39,  -560,  -560,  -306,
-      -1,   -57,   -40,  -271,   348,  -560,  -560,  -560,   191,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,   -70,  -560,    72,  -560,
-    -560,     9,  -560,  -560,  -140,    61,  -560,   223,   -44,   -73,
-    -559,   -67,  -560,   208,    47,  -560,  -560,    55,  -560,   106,
-    -560,   366,  -145,  -560,  -141,  -560,  -257,  -560,  -560,   313,
-     -69,  -268,  -150,  -310,  -560,    24
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -482
-static const yytype_int16 yytable[] =
-{
-      45,   125,   234,    60,   140,   139,   227,    52,   132,   197,
-     263,   197,   207,   271,   151,   201,   270,   185,   186,   200,
-     209,   200,   235,   259,   219,   413,   215,   194,   253,   194,
-     262,   328,   374,   362,   383,   278,   532,   351,   360,   395,
-      51,   131,   361,   202,   432,   421,   269,   507,   286,   128,
-     287,   250,    45,   207,   138,   265,   295,   223,    70,   172,
-     714,   209,   135,   379,   384,   585,   520,    50,   130,   224,
-      49,   129,   297,   524,   251,     1,   164,   229,     5,   125,
-     300,   508,   140,   139,   324,   489,   132,    88,   226,   506,
-     304,   771,   151,   294,   506,   359,   205,    38,    39,   305,
-     505,   290,   178,   322,   293,   505,   325,   206,   525,    71,
-     173,   179,   348,   512,   217,  -187,  -102,  -187,    18,   131,
-     203,   177,  -135,   184,    24,   508,   180,   128,    26,   217,
-     226,   446,   138,   106,   228,   181,   351,   172,   292,   519,
-     135,   767,   433,   365,   187,   623,   130,   349,   349,   129,
-      74,    75,    41,   404,   164,   772,    79,   399,   329,   624,
-    -102,   447,    18,   373,   330,   373,   174,   229,    24,   331,
-     212,    22,    26,   200,   294,   207,  -187,   236,  -187,   532,
-     298,   175,   176,   209,   607,    77,    78,   -61,   173,   294,
-     638,  -481,  -481,   302,   243,   180,   226,   290,   516,   517,
-     293,   680,  -134,   394,   207,   443,   397,   139,   445,   262,
-     132,   509,   209,   435,   303,   407,   151,  -136,   518,   226,
-     197,   197,   337,   526,   219,   201,   451,   422,   372,   377,
-     333,   698,   674,   555,   265,   230,   231,   426,   415,   677,
-     335,   293,   293,   131,    33,   389,   349,   462,   386,   387,
-     388,   128,   297,   527,   436,   775,   396,   390,   102,   523,
-     517,   172,   373,   392,   321,   296,   400,   452,   453,   454,
-     130,   455,   315,   129,   525,   420,   427,   276,   398,   628,
-     687,   111,   550,   112,   465,   466,   174,    35,   428,   406,
-     629,   467,   294,   205,    38,    39,   620,   401,   490,   621,
-     290,   175,   176,   293,   449,   519,   237,   409,   715,    74,
-      75,   537,   173,   533,  -315,    79,  -315,   553,   641,   551,
-     259,  -316,   349,  -316,   638,   253,    28,   730,    29,   667,
-     668,   470,   408,   481,   476,   669,   485,   420,   475,   224,
-     475,    31,   410,   587,   766,  -314,   586,  -314,   250,   594,
-     637,   411,   680,   259,   373,   351,   592,   648,   253,   636,
-     541,   544,   541,   414,   540,   416,   548,   224,   511,   506,
-     200,   473,   648,   483,   617,   525,   613,   608,   194,   290,
-     505,   250,   293,   293,   518,   423,   441,   425,   525,   477,
-     610,   486,   421,   444,   536,   660,   457,   394,   472,   492,
-     397,   139,   660,    41,   132,   557,   326,   327,   519,   574,
-     151,   250,   578,   577,   503,   612,   545,   549,   730,   559,
-     626,   519,   541,   631,   632,   633,   618,   582,   634,   359,
-     343,   785,   345,   433,   609,   502,   503,   131,    38,    39,
-     478,   653,   487,   293,   654,   128,   348,   340,   114,   115,
-     396,   488,   516,   517,   665,   172,   661,   616,   523,   517,
-     506,   610,    22,   259,   130,   349,   588,   129,   253,   590,
-     262,    76,   398,   189,   190,   191,   684,   619,   764,   192,
-     193,   627,   250,   362,   728,   259,   612,   518,   360,   630,
-     253,   250,   727,   685,   640,   265,   544,   200,   241,   242,
-     518,   275,   434,   502,   435,   609,   173,   341,   342,   587,
-     344,   673,   586,   250,   251,  -167,   180,    38,    39,   259,
-     346,   347,   676,   592,   253,   689,   492,   679,   583,   493,
-     497,   690,   494,   493,   495,    33,   494,   664,   495,   695,
-     708,   709,   711,   441,   702,   436,   710,   250,   721,   463,
-     464,    45,   372,   647,   652,   720,   610,   437,   691,   683,
-     657,   377,   610,   541,   770,   749,   750,   699,   722,   782,
-     643,   751,   650,   773,   738,   648,   517,   697,   656,   726,
-     739,   612,   238,   250,   293,   643,   763,   612,   725,   365,
-     574,   705,   484,   578,   610,   366,   648,   207,   349,   349,
-     429,   706,   349,   450,   316,   209,   609,   760,   761,   762,
-     539,   543,   547,   686,   317,   250,   724,   769,   700,   612,
-     424,   660,   587,   711,   723,   586,   660,   684,   596,   683,
-     784,   716,   259,   757,   758,   768,   259,   253,   609,   759,
-     595,   253,   707,   262,   541,   544,   541,   442,   540,   541,
-     548,   701,   541,   618,   200,   496,   699,   207,   729,     0,
-     250,   745,   194,   290,   250,   209,   293,   293,   265,     0,
-     293,     0,   547,   293,   646,   651,     0,     0,   778,   779,
-       0,   692,   659,   693,   780,   694,     0,   251,     0,   659,
-     765,   783,     0,   349,     0,   340,   205,    38,    39,     0,
-     545,   549,     0,   720,   619,     0,     0,   700,     0,   587,
-     683,   544,   586,     0,     0,   200,    37,    38,    39,   259,
-     200,   340,   544,     0,   253,   189,   190,   288,     0,   511,
-       0,   289,   193,   386,   387,   448,     0,   539,   543,   547,
-       0,     0,   189,   190,   191,   539,   543,   250,   370,   193,
-       0,     0,   539,   543,     0,   341,   342,   343,   344,   345,
-     574,     0,     0,   578,   577,    38,    39,     0,   346,   347,
-     372,   647,   652,   348,   635,   776,   777,   513,   514,   515,
-       0,   341,   342,   343,   344,   345,   657,   377,   643,     0,
-     650,    38,    39,   656,   346,   347,   452,   453,   454,   348,
-     455,     0,   213,     0,   656,  -118,    37,    38,    39,   643,
-     696,     0,     0,   547,     0,  -118,  -118,  -118,     0,    73,
-     243,     0,   226,     0,     0,  -118,  -118,  -118,     0,  -118,
-      76,    77,    78,  -118,  -118,  -118,  -118,   189,   190,   288,
-    -118,  -118,  -118,   375,   193,     0,     0,  -118,  -118,     0,
-       0,    32,  -118,     0,  -118,  -118,  -118,  -118,     0,  -118,
-       0,  -118,    37,    38,    39,     0,    40,  -118,     0,  -118,
-       0,  -118,   688,   521,   522,   515,  -118,     0,  -118,     0,
-      91,  -118,    92,    93,  -118,    95,     0,    97,     0,  -118,
-      99,     0,   646,   651,   101,   755,   756,   646,   104,   756,
-       0,     0,   756,     0,  -118,     0,     0,  -118,   659,     0,
-       0,    32,     0,   659,     0,     0,   108,   109,  -118,  -118,
-       0,  -118,    37,    38,    39,     0,    40,   189,   190,   380,
-       0,  -118,   214,   381,   193,  -118,   459,   528,   529,   515,
-     386,   387,   589,     0,   118,   119,   120,   121,   122,   123,
-     124,     0,   189,   190,   380,     0,   755,   756,   418,   193,
-       0,   755,   189,   190,   191,     0,   -38,    72,   538,   193,
-       7,     0,   755,   670,   671,   672,    73,   755,    74,    75,
-      76,    77,    78,     0,    79,   670,   671,   675,     8,     9,
-      80,    10,    11,     0,    81,   670,   671,   678,    13,    14,
-      15,    16,     0,    82,    18,    19,    20,    21,    22,    23,
-      24,     0,    25,    83,    26,     0,     0,    84,    27,    28,
-      85,    29,    86,     0,    87,    88,    30,   731,   732,   733,
-       0,     0,    89,     0,    31,     0,    90,    91,     0,    92,
-      93,    94,    95,    96,    97,     0,    98,    99,     0,   100,
-       0,   101,     0,   102,   103,   104,   189,   190,   380,   189,
-     190,   380,   542,   193,     0,   546,   193,     0,     0,   105,
-       0,   106,   107,   108,   109,   110,   111,     0,   112,     0,
-       0,    33,    34,    35,    36,     0,   113,    37,    38,    39,
-       0,   114,   115,   116,     0,     0,    41,   736,   737,   733,
-     117,   118,   119,   120,   121,   122,   123,   124,     7,   747,
-     748,   733,     0,     0,    73,     0,    74,    75,    76,    77,
-      78,     0,    79,   752,   753,   733,     8,     9,    80,    10,
-      11,     0,    81,     0,     0,     0,    13,    14,    15,    16,
-       0,   597,    18,    19,    20,    21,    22,    23,    24,     0,
-      25,    83,    26,     0,     0,    84,    27,    28,    85,    29,
-      86,     0,    87,    88,    30,     0,     0,     0,     0,     0,
-      89,     0,    31,     0,    90,    91,     0,    92,    93,    94,
-      95,    96,    97,     0,    98,    99,     0,   100,     0,   101,
-       0,   102,   103,   104,   598,     0,     0,     0,   599,   189,
-     190,   191,     0,   600,     0,   642,   193,   105,     0,   106,
-     107,   108,   109,   110,   111,     0,   112,     0,     0,    33,
-      34,    35,    36,     0,   113,    37,    38,    39,     0,   114,
-     115,   116,   -40,   367,    41,     0,     7,     0,   117,   118,
-     119,   120,   121,   122,   123,   124,    76,    77,    78,     0,
-       0,   601,   602,     0,     0,     0,    80,    10,    11,     0,
-      12,     0,   603,     0,    13,    14,    15,    16,     0,   604,
-       0,    19,    20,    21,   189,   190,   380,     0,    25,    83,
-     642,   193,     0,    84,     0,    28,    85,    29,    86,     0,
-      87,     0,    30,     0,     0,     0,    10,    11,    89,    12,
-      31,     0,    90,    13,    14,    15,    16,    94,     0,    96,
-      19,    20,    98,     0,     0,   100,     0,    25,     0,   102,
-     103,   189,   190,   380,    28,     0,    29,   649,   193,     0,
-       0,    30,     0,     0,     0,   105,     0,     0,   107,    31,
-       0,     0,   111,     0,   112,   367,     0,     0,     7,    35,
-      36,     0,   113,    37,    38,    39,     0,     0,    76,    77,
-      78,     0,    41,     0,     0,   340,   117,     0,    80,    10,
-      11,     0,    12,     0,     0,     0,    13,    14,    15,    16,
-     189,   190,   380,    19,    20,    21,   655,   193,   308,    36,
-      25,    83,     0,     0,     0,    84,     0,    28,    85,    29,
-      86,    41,    87,     0,    30,     0,     0,     0,     0,     0,
-      89,     0,    31,   368,    90,     0,   189,   190,   380,    94,
-       0,    96,   666,   193,    98,   341,   342,   100,   344,     0,
-       0,   102,   103,     0,     0,    38,    39,     0,   346,   347,
-       0,     0,     0,   348,     0,     0,     0,   105,     0,     0,
-     107,     0,     0,     0,   111,     0,   112,   367,     0,     0,
-       7,    35,    36,     0,   113,    37,    38,    39,     0,     0,
-      76,    77,    78,     0,    41,     0,     0,     0,   117,     0,
-      80,    10,    11,     0,    12,     0,     0,     0,    13,    14,
-      15,    16,   189,   190,   191,    19,    20,    21,   649,   193,
-       0,     0,    25,    83,     0,     0,     0,    84,     0,    28,
-      85,    29,    86,     0,    87,     0,    30,     0,     0,     0,
-       0,     0,    89,     0,    31,     0,    90,     0,    73,     0,
-       0,    94,     0,    96,     0,     0,    98,     0,     0,   100,
-       0,     0,     0,   102,   103,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   105,
-      22,     0,   107,     0,     0,     0,   111,     0,   112,     0,
-       0,     0,     0,    35,    36,     0,   113,    37,    38,    39,
-       0,     0,     0,     0,     0,   307,    41,   391,     0,    91,
-     117,    92,    93,     0,    95,     0,    97,     0,     0,     0,
-    -187,  -187,  -187,  -187,     0,     0,     0,   104,  -187,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   108,   109,     0,   174,     0,
-       0,     0,     0,    33,     0,   308,     0,     0,     0,  -187,
-       0,  -187,  -187,   175,   176,   309,   310,  -187,     0,     0,
-       0,   311,   312,   313,   314,   120,   121,   122,   123,   124,
-       0,  -187,     0,  -187,  -187,     0,  -187,     0,  -187,     0,
-       0,  -187,     0,     0,     0,  -187,     0,     0,     0,  -187,
-    -239,  -239,  -239,  -239,   530,   517,     0,     0,  -239,     0,
-       0,     0,     0,     0,     0,     0,     0,  -187,  -187,  -187,
-    -187,     0,  -187,  -187,     0,  -187,     0,  -187,     0,     0,
-    -187,     0,     0,     0,  -187,     0,     0,  -187,  -187,     0,
-       0,     0,     0,   746,   517,  -187,  -187,  -187,  -187,  -187,
-    -187,  -187,     0,     0,     0,     0,  -187,  -187,  -187,     0,
-       0,  -239,     0,  -239,  -239,     0,  -239,     0,  -239,     0,
-       0,  -239,     0,     0,     0,  -239,  -187,     0,     0,  -239,
-       0,     0,     0,     0,  -187,  -187,  -187,  -187,  -187,  -187,
-    -187,     0,  -159,  -159,  -159,  -159,     0,  -239,  -239,  -239,
-    -159,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  -220,  -220,  -220,  -220,  -239,     0,     0,
-       0,  -220,     0,     0,     0,  -239,  -239,  -239,  -239,  -239,
-    -239,  -239,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  -159,     0,  -159,  -159,     0,  -159,     0,
-    -159,     0,     0,  -159,     0,     0,     0,  -159,     0,     0,
-       0,  -159,     0,     0,  -220,     0,  -220,  -220,     0,  -220,
-       0,  -220,     0,     0,  -220,     0,     0,     0,  -220,  -159,
-    -159,  -159,  -220,  -178,  -178,  -178,  -178,     0,     0,     0,
-       0,  -178,     0,     0,     0,     0,     0,     0,     0,  -159,
-    -220,  -220,  -220,     0,     0,     0,     0,  -159,  -159,  -159,
-    -159,  -159,  -159,  -159,     0,     0,     0,     0,     0,     0,
-    -220,     0,     0,     0,     0,     0,     0,     0,  -220,  -220,
-    -220,  -220,  -220,  -220,  -220,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  -178,     0,  -178,  -178,     0,  -178,
-       0,  -178,     0,     0,  -178,     0,     0,     0,  -178,     0,
-       0,     0,  -178,  -228,  -228,  -228,  -228,     0,     0,     0,
-       0,  -228,     0,     0,     0,     0,     0,     0,     0,     0,
-    -178,  -178,  -178,     0,  -227,  -227,  -227,  -227,     0,     0,
-       0,     0,  -227,     0,     0,     0,     0,     0,     0,     0,
-    -178,     0,     0,     0,     0,     0,     0,     0,  -178,  -178,
-    -178,  -178,  -178,  -178,  -178,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  -228,     0,  -228,  -228,     0,  -228,
-       0,  -228,     0,     0,  -228,     0,     0,     0,  -228,     0,
-       0,     0,  -228,     0,     0,  -227,     0,  -227,  -227,     0,
-    -227,     0,  -227,     0,     0,  -227,     0,     0,     0,  -227,
-    -228,  -228,  -228,  -227,  -226,  -226,  -226,  -226,     0,     0,
-       0,     0,  -226,     0,     0,     0,     0,     0,     0,     0,
-    -228,  -227,  -227,  -227,     0,     0,     0,     0,  -228,  -228,
-    -228,  -228,  -228,  -228,  -228,     0,     0,     0,     0,     0,
-       0,  -227,     0,     0,     0,     0,     0,     0,     0,  -227,
-    -227,  -227,  -227,  -227,  -227,  -227,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  -226,     0,  -226,  -226,     0,
-    -226,     0,  -226,     0,     0,  -226,     0,     0,     0,  -226,
-       0,     0,     0,  -226,  -222,  -222,  -222,  -222,     0,     0,
-       0,     0,  -222,     0,     0,     0,     0,     0,     0,     0,
-       0,  -226,  -226,  -226,     0,  -224,  -224,  -224,  -224,     0,
-       0,     0,     0,  -224,     0,     0,     0,     0,     0,     0,
-       0,  -226,     0,     0,     0,     0,     0,     0,     0,  -226,
-    -226,  -226,  -226,  -226,  -226,  -226,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  -222,     0,  -222,  -222,     0,
-    -222,     0,  -222,     0,     0,  -222,     0,     0,     0,  -222,
-       0,     0,     0,  -222,     0,     0,  -224,     0,  -224,  -224,
-       0,  -224,     0,  -224,     0,     0,  -224,     0,     0,     0,
-    -224,  -222,  -222,  -222,  -224,  -223,  -223,  -223,  -223,     0,
-       0,     0,     0,  -223,     0,     0,     0,     0,     0,     0,
-       0,  -222,  -224,  -224,  -224,     0,     0,     0,     0,  -222,
-    -222,  -222,  -222,  -222,  -222,  -222,     0,     0,     0,     0,
-       0,     0,  -224,     0,     0,     0,     0,     0,     0,     0,
-    -224,  -224,  -224,  -224,  -224,  -224,  -224,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  -223,     0,  -223,  -223,
-       0,  -223,     0,  -223,     0,     0,  -223,     0,     0,     0,
-    -223,     0,     0,     0,  -223,  -225,  -225,  -225,  -225,     0,
-       0,     0,     0,  -225,     0,     0,     0,     0,     0,     0,
-       0,     0,  -223,  -223,  -223,     0,  -180,  -180,  -180,  -180,
-       0,     0,     0,     0,  -180,     0,     0,     0,     0,     0,
-       0,     0,  -223,     0,     0,     0,     0,     0,     0,     0,
-    -223,  -223,  -223,  -223,  -223,  -223,  -223,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  -225,     0,  -225,  -225,
-       0,  -225,     0,  -225,     0,     0,  -225,     0,     0,     0,
-    -225,     0,     0,     0,  -225,     0,     0,  -180,     0,  -180,
-    -180,     0,  -180,     0,  -180,     0,     0,  -180,     0,     0,
-       0,  -180,  -225,  -225,  -225,  -180,    73,     0,    74,    75,
-       0,     0,     0,     0,    79,     0,     0,     0,     0,     0,
-       0,     0,  -225,  -180,  -180,  -180,     0,     0,     0,     0,
-    -225,  -225,  -225,  -225,  -225,  -225,  -225,     0,     0,     0,
-       0,     0,     0,  -180,     0,     0,     0,     0,     0,     0,
-       0,  -180,  -180,  -180,  -180,  -180,  -180,  -180,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    91,     0,    92,
-      93,     0,    95,     0,    97,     0,     0,    99,     0,     0,
-      73,   101,    74,    75,     0,   104,     0,     0,    79,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   108,   109,   534,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    73,
-       0,    74,    75,   535,     0,     0,     0,    79,     0,     0,
-       0,   118,   119,   120,   121,   122,   123,   124,     0,     0,
-       0,    91,     0,    92,    93,     0,    95,     0,    97,     0,
-       0,    99,     0,     0,     0,   101,     0,     0,  -234,   104,
-    -234,  -234,     0,     0,     0,     0,  -234,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   108,   109,   614,
-      91,     0,    92,    93,     0,    95,     0,    97,     0,     0,
-      99,     0,     0,     0,   101,     0,     0,   615,   104,     0,
-       0,     0,     0,     0,     0,   118,   119,   120,   121,   122,
-     123,   124,     0,     0,     0,     0,   108,   109,   662,  -234,
-       0,  -234,  -234,     0,  -234,     0,  -234,     0,     0,  -234,
-       0,     0,    73,  -234,    74,    75,   663,  -234,     0,     0,
-      79,     0,     0,     0,   118,   119,   120,   121,   122,   123,
-     124,     0,     0,     0,     0,  -234,  -234,  -234,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    73,     0,   712,   713,  -234,     0,     0,     0,    79,
-       0,     0,     0,  -234,  -234,  -234,  -234,  -234,  -234,  -234,
-       0,     0,     0,    91,     0,    92,    93,     0,    95,     0,
-      97,     0,     0,    99,     0,     0,     0,   101,     0,     0,
-      73,   104,   740,   741,     0,     0,     0,     0,   742,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   108,
-     109,   681,    91,     0,    92,    93,     0,    95,     0,    97,
-       0,     0,    99,     0,     0,     0,   101,     0,     0,   682,
-     104,    73,     0,     0,     0,     0,     0,   118,   119,   120,
-     121,   122,   123,   124,     0,     0,     0,     0,   108,   109,
-     681,    91,     0,    92,    93,     0,    95,     0,    97,     0,
-       0,    99,     0,     0,     0,   101,     0,     0,   682,   104,
-       0,     0,     0,     0,     0,     0,   118,   119,   120,   121,
-     122,   123,   124,     0,     0,     0,     0,   108,   109,   743,
-       0,     0,    91,     0,    92,    93,     0,    95,     0,    97,
-       0,     0,    99,     0,     0,     0,   101,   744,     0,     0,
-     104,     0,     0,     0,     0,   118,   119,   120,   121,   122,
-     123,   124,     0,     0,     0,     0,     0,     0,   108,   109,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   459,     0,
-       0,     0,     0,     0,     0,     0,   118,   119,   120,   121,
-     122,   123,   124,     7,     0,     0,     0,     0,     0,     0,
-     243,    74,   244,    76,    77,    78,     0,    79,     0,     0,
-       0,     8,     9,    80,    10,    11,     0,    81,     0,     0,
-       0,    13,    14,    15,    16,     0,     0,    18,    19,    20,
-      21,    22,    23,    24,     0,    25,    83,    26,     0,     0,
-      84,    27,    28,    85,    29,    86,     0,    87,    88,    30,
-       0,     0,     0,     0,     0,    89,     0,    31,     0,    90,
-       0,     0,     0,     0,    94,     0,    96,     0,     0,    98,
-       0,     0,   100,     0,     0,     0,   102,   103,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   105,     0,   106,   107,     0,     0,   245,   111,
-       0,   112,     0,     0,    33,    34,   246,    36,     0,   113,
-     247,    38,    39,     0,   248,   249,     7,     0,     0,    41,
-       0,     0,     0,   117,    74,    75,    76,    77,    78,     0,
-      79,     0,     0,     0,     8,     9,    80,    10,    11,     0,
-      81,     0,     0,     0,    13,    14,    15,    16,     0,     0,
-      18,    19,    20,    21,    22,    23,    24,     0,    25,    83,
-      26,     0,     0,    84,    27,    28,    85,    29,    86,     0,
-      87,    88,    30,     0,     0,     0,     0,     0,    89,     0,
-      31,     0,    90,     0,     0,     0,     0,    94,     0,    96,
-       0,     0,    98,     0,     0,   100,     0,     0,     0,   102,
-     103,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   105,     0,   106,   107,     0,
-       0,   584,   111,     0,   112,     0,     0,    33,    34,    35,
-      36,     0,   113,    37,    38,    39,     0,   248,   249,     7,
-       0,     0,    41,     0,     0,     0,   117,     0,     0,    76,
-      77,    78,     0,     0,     0,     0,     0,     8,     9,    80,
-      10,    11,     0,    81,     0,     0,     0,    13,    14,    15,
-      16,     0,     0,    18,    19,    20,    21,    22,    23,    24,
-       0,    25,    83,    26,     0,     0,    84,    27,    28,    85,
-      29,    86,     0,    87,    88,    30,     0,     0,     0,     0,
-       0,    89,     0,    31,     0,    90,     0,     0,     0,     0,
-      94,     0,    96,     0,     0,    98,     0,     0,   100,     0,
-       0,     0,   102,   103,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   105,     0,
-     106,   107,     0,     0,     0,   111,     0,   112,     0,     0,
-      33,    34,    35,    36,     0,   113,    37,    38,    39,     0,
-     248,   249,     7,     0,     0,    41,     0,     0,     0,   117,
-       0,     0,    76,    77,    78,     0,     0,     0,     0,     0,
-       8,     9,    80,    10,    11,     0,    81,     0,     0,     0,
-      13,    14,    15,    16,     0,     0,    18,    19,    20,    21,
-      22,    23,    24,     0,    25,    83,    26,     0,     0,    84,
-      27,    28,    85,    29,    86,     0,    87,    88,    30,     0,
-       0,     0,     0,     0,    89,     0,    31,     0,    90,     0,
-       0,     0,     0,    94,     0,    96,     0,     0,    98,     0,
-       0,   100,     0,     0,     0,   102,   103,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   105,     0,   106,   107,     0,     0,     0,   111,     0,
-     112,     0,     0,    33,    34,   246,    36,     0,   113,   247,
-      38,    39,     0,   248,   249,     7,     0,     0,    41,     0,
-       0,     0,   117,     0,     0,    76,    77,    78,     0,     0,
-       0,     0,     0,     8,     9,    80,    10,    11,     0,    81,
-       0,     0,     0,    13,    14,    15,    16,     0,     0,    18,
-      19,    20,    21,    22,    23,    24,     0,    25,    83,    26,
-       0,     0,    84,    27,    28,    85,    29,    86,     0,    87,
-      88,    30,     0,     0,     0,     0,     0,    89,     0,    31,
-       0,    90,     0,     0,     0,     0,    94,     0,    96,     0,
-       0,    98,     0,     0,   100,     0,     0,     0,     0,   103,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   105,     0,   106,   107,     0,     0,
-       0,     0,     0,     0,     0,     0,    33,    34,    35,    36,
-       0,   113,    37,    38,    39,     0,   248,   249,     7,     0,
-       0,    41,     0,     0,     0,   117,     0,     0,    76,    77,
-      78,     0,     0,     0,     0,     0,     8,     9,    80,    10,
-      11,     0,    81,     0,     0,     0,    13,    14,    15,    16,
-       0,     0,    18,    19,    20,    21,    22,    23,    24,     0,
-      25,    83,    26,     0,     0,    84,    27,    28,    85,    29,
-      86,     0,    87,    88,    30,     0,     0,     0,     0,     0,
-      89,     0,    31,     0,    90,     0,     0,     0,     0,    94,
-       0,    96,     0,     0,    98,     0,     0,   100,     0,     0,
-       0,     0,   103,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   105,     0,   106,
-     107,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-      34,   246,    36,     0,   113,   247,    38,    39,     0,   248,
-     249,     7,     0,     0,    41,     0,     0,     0,   117,     0,
-       0,    76,    77,    78,     0,     0,     0,     0,     0,     0,
-       0,    80,    10,    11,     0,    12,     0,     0,     0,    13,
-      14,    15,    16,     0,     0,     0,    19,    20,    21,     0,
-       0,     0,     0,    25,    83,     0,     0,     0,    84,     0,
-      28,    85,    29,    86,     0,    87,     0,    30,     0,     0,
-       0,     0,     0,    89,     0,    31,     0,    90,     0,     0,
-       0,     0,    94,     0,    96,     0,     0,    98,     0,     0,
-     100,     0,     0,     0,   102,   103,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     105,     0,     0,   107,     0,     0,     0,   111,     0,   112,
-       0,     0,     7,     0,    35,    36,     0,   113,    37,    38,
-      39,     0,    76,    77,    78,     0,     0,    41,     0,     0,
-       0,   117,    80,    10,    11,     0,    12,     0,     0,     0,
-      13,    14,    15,    16,     0,     0,     0,    19,    20,    21,
-       0,     0,     0,     0,    25,    83,     0,     0,     0,    84,
-       0,    28,    85,    29,    86,     0,    87,     0,    30,     0,
-       0,     0,     0,     0,    89,     0,    31,     0,    90,     0,
-       0,     0,     0,    94,     0,    96,     0,     0,    98,     0,
-       0,   100,     0,     0,     0,   102,   103,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   105,     0,     0,   107,     0,     0,     0,   111,     7,
-     112,     0,     0,     0,     0,    35,    36,     0,   113,    76,
-      77,    78,   363,     0,     0,     0,     0,     0,    41,    80,
-      10,    11,   117,    12,     0,     0,     0,    13,    14,    15,
-      16,     0,     0,     0,    19,    20,    21,     0,     0,     0,
-       0,    25,    83,     0,     0,     0,    84,     0,    28,    85,
-      29,    86,     0,    87,     0,    30,     0,     0,     0,     0,
-       0,    89,     0,    31,     0,    90,     0,     0,     0,     0,
-      94,     0,    96,     0,     0,    98,     0,     0,   100,     0,
-       0,     0,   102,   103,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   105,     0,
-       0,   107,     0,     0,     0,   111,     7,   112,     0,     0,
-       0,     0,    35,    36,     0,   113,    76,    77,    78,     0,
-       0,     0,     0,     0,     0,    41,    80,    10,    11,   117,
-      12,     0,     0,     0,    13,    14,    15,    16,     0,     0,
-       0,    19,    20,    21,     0,     0,     0,     0,    25,    83,
-       0,     0,     0,    84,     0,    28,    85,    29,    86,     0,
-      87,     0,    30,     0,     0,     0,     0,     0,    89,     0,
-      31,     0,    90,     0,     0,     0,     0,    94,     0,    96,
-       0,     0,    98,     0,     0,   100,     0,     0,     0,   102,
-     103,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   105,     0,     0,   107,     0,
-       0,     0,   111,     7,   112,     0,     0,     0,     0,   246,
-      36,     0,   113,    76,    77,    78,     0,     0,     0,     0,
-       0,     0,    41,    80,    10,    11,   117,   402,     0,     0,
-       0,    13,    14,    15,    16,     0,     0,     0,    19,    20,
-      21,     0,     0,     0,     0,    25,    83,     0,     0,     0,
-      84,     0,    28,    85,    29,    86,     0,    87,     0,    30,
-       0,     0,     0,     0,     0,    89,     0,    31,     0,    90,
-       0,     0,     0,     0,    94,     0,    96,     0,     0,    98,
-       0,     0,   100,     0,     0,     0,     0,   103,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   105,     0,     0,   107,     0,     0,     0,    -2,
-       6,     0,     0,     7,     0,     0,    35,    36,     0,   113,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    41,
-       0,     8,     9,   117,    10,    11,     0,    12,     0,     0,
-       0,    13,    14,    15,    16,   -10,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,    25,   468,    26,     0,     7,
-       0,    27,    28,     0,    29,     0,     0,     0,     0,    30,
-       0,     0,     0,     0,     0,     0,     0,    31,     9,     0,
-      10,    11,     0,    12,     0,     0,     0,    13,    14,    15,
-      16,   -83,     0,    18,    19,    20,    21,    22,    23,    24,
-       0,    25,     0,    26,     0,     0,     0,    27,    28,     0,
-      29,     0,     0,     0,     0,    30,     0,     0,     0,    32,
-       0,     0,     0,    31,    33,    34,    35,    36,     0,     0,
-      37,    38,    39,     0,    40,     0,     0,     0,     0,    41,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   479,     0,     0,     7,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      33,    34,    35,    36,     0,     0,    37,    38,    39,     0,
-      10,    11,     0,    12,     0,    41,   469,    13,    14,    15,
-      16,   -95,     0,    18,    19,    20,    21,    22,    23,    24,
-       0,    25,     0,    26,     7,     0,     0,    27,    28,     0,
-      29,     0,     0,     0,     0,    30,     0,     0,     0,     0,
-     560,   561,     0,    31,     0,    10,    11,   562,    12,   563,
-     564,   565,    13,    14,    15,    16,     0,     0,     0,    19,
-      20,    21,     0,     0,     0,   566,    25,   567,     0,   568,
-       0,   569,     0,    28,     0,    29,     0,   570,   571,    88,
-      30,     0,     0,     0,     0,     0,     0,     0,    31,     0,
-      33,    34,    35,    36,     0,     0,    37,    38,    39,     0,
-       0,     0,     0,     0,     0,    41,   480,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   106,     0,     0,     0,     0,
-       0,     7,     0,     0,     0,     0,     0,    35,    36,     0,
-       0,    37,    38,    39,     0,   572,     0,   560,   561,     0,
-      41,   573,    10,    11,   562,    12,   563,   564,   565,    13,
-      14,    15,    16,     0,     0,     0,    19,    20,    21,     0,
-       0,     0,   566,    25,   567,     7,   568,     0,   569,     0,
-      28,     0,    29,     0,   570,   571,    88,    30,     0,     0,
-       0,   560,   561,     0,     0,    31,    10,    11,   562,    12,
-     563,   564,   565,    13,    14,    15,    16,     0,     0,     0,
-      19,    20,    21,     0,     0,     0,   566,    25,   567,     0,
-     568,     0,   569,     0,    28,     0,    29,     0,   570,   571,
-       0,    30,   106,     0,     0,     0,     0,     0,     0,    31,
-       0,     0,     0,     0,    35,    36,     0,     0,    37,    38,
-      39,     0,   572,     0,     0,     0,     0,    41,   781,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   703,     0,     0,     0,
-       0,     0,     7,     0,     0,     0,     0,     0,    35,    36,
-       0,     0,    37,    38,    39,     0,   572,     0,     0,     0,
-       0,    41,   704,    10,    11,     0,    12,     0,     0,     0,
-      13,    14,    15,    16,     0,     0,     0,    19,    20,    21,
-       0,     0,     0,     0,    25,     0,     0,     0,     0,    74,
-      75,    28,     0,    29,     0,    79,     0,     0,    30,     8,
-       9,     0,    10,    11,     0,    81,    31,     0,     0,    13,
-      14,    15,    16,     0,     0,    18,    19,    20,     0,    22,
-      23,    24,     0,    25,     0,    26,     0,     0,     0,    27,
-      28,     0,    29,     0,     0,     0,    88,    30,     0,     0,
-       0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    35,    36,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    41,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   106,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    33,    34,   308,    36,     0,     0,   205,    38,
-      39,     0,   248,   249,     0,     8,     9,    41,    10,    11,
-       0,    81,     0,     0,     0,    13,    14,    15,    16,     0,
-       0,    18,    19,    20,     0,    22,    23,    24,     0,    25,
-       0,    26,     0,     0,     0,    27,    28,     0,    29,     0,
-       0,     0,    88,    30,     0,     0,     0,     0,     0,     0,
-       0,    31,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     102,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   106,     0,
-       0,     0,     0,   111,     0,   112,     0,     0,    33,    34,
-     308,    36,     0,     0,   205,    38,    39,     0,   248,   249,
-       0,     8,     9,    41,    10,    11,     0,    81,     0,     0,
-       0,    13,    14,    15,    16,     0,     0,    18,    19,    20,
-       0,    22,    23,    24,     0,    25,     0,    26,     0,     0,
-       0,    27,    28,     0,    29,     0,     0,     0,    88,    30,
-       0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   106,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    33,    34,   308,    36,     0,     0,
-     205,    38,    39,     0,   248,   249,     0,     0,     0,    41
-};
-
-static const yytype_int16 yycheck[] =
-{
-       3,     4,    77,     3,     4,     4,    73,     3,     4,    35,
-      86,    37,    47,    86,     4,    37,    86,    28,    29,    35,
-      47,    37,    77,    86,    65,   239,    55,    35,    86,    37,
-      86,    17,   189,   183,   191,    88,   383,   182,   183,   206,
-       3,     4,   183,    41,   279,   265,    86,   357,   105,     4,
-     107,    86,    55,    88,     4,    86,   113,    67,     3,     4,
-     619,    88,     4,   190,   191,   416,   374,     3,     4,    68,
-       3,     4,   116,   379,    86,    99,     4,    18,     0,    82,
-     119,     1,    82,    82,   162,   338,    82,    59,    13,   357,
-     147,    64,    82,   109,   362,   113,   121,   122,   123,   156,
-     357,   109,   130,   160,   109,   362,   163,   132,   379,     3,
-       4,   130,   130,   366,     7,    11,    36,    13,    38,    82,
-      36,     7,     0,   130,    44,     1,    12,    82,    48,     7,
-      13,   288,    82,   105,    18,    21,   281,    82,   109,   374,
-      82,   700,    13,   184,    30,   132,    82,   182,   183,    82,
-      12,    13,   130,   216,    82,   128,    18,   210,   144,   146,
-      36,   288,    38,   189,    13,   191,   110,    18,    44,    18,
-     130,    42,    48,   189,   190,   210,    11,   125,    13,   526,
-      13,   125,   126,   210,   109,    15,    16,     0,    82,   205,
-     500,   132,   133,   135,    11,    81,    13,   205,    94,    95,
-     205,   548,     0,   206,   239,   283,   206,   206,   286,   265,
-     206,   131,   239,    84,   128,   225,   206,     0,   374,    13,
-     246,   247,   132,   380,   265,   247,   304,   267,   189,   190,
-     100,   582,   540,   400,   265,   142,   143,    67,   241,   545,
-     100,   246,   247,   206,   115,    95,   281,   325,    91,    92,
-      93,   206,   296,   380,   125,   131,   206,    95,    87,    94,
-      95,   206,   288,   130,   158,   127,   132,    61,    62,    63,
-     206,    65,   158,   206,   545,   246,   106,   105,   206,   471,
-     551,   110,   111,   112,   328,   329,   110,   117,   118,     7,
-     482,   332,   308,   121,   122,   123,   452,   119,   339,   455,
-     308,   125,   126,   308,   302,   540,   130,   143,   102,    12,
-      13,   384,   206,   383,    11,    18,    13,   390,   510,   389,
-     383,    11,   357,    13,   634,   383,    53,   637,    55,    12,
-      13,   334,   142,   336,   334,    18,   336,   308,   334,   338,
-     336,    68,   132,   416,   695,    11,   416,    13,   383,   427,
-     500,   104,   699,   416,   380,   500,   423,   514,   416,   500,
-     386,   387,   388,   133,   386,   132,   388,   366,   364,   637,
-     386,   334,   529,   336,   447,   646,   446,   444,   386,   387,
-     637,   416,   387,   388,   540,   132,   280,   130,   659,   334,
-     446,   336,   612,   144,   384,   522,   145,   400,   334,    90,
-     400,   400,   529,   130,   400,   405,   127,   128,   643,   412,
-     400,   446,   412,   412,   116,   446,   387,   388,   728,   125,
-     459,   656,   448,   492,   493,   494,   448,   132,   497,   113,
-     114,   782,   116,    13,   446,   115,   116,   400,   122,   123,
-     334,   517,   336,   448,   517,   400,   130,    52,   125,   126,
-     400,   337,    94,    95,   527,   400,   526,   447,    94,    95,
-     728,   517,    42,   526,   400,   500,   133,   400,   526,   132,
-     526,    14,   400,    91,    92,    93,   549,   448,   692,    97,
-      98,     5,   517,   633,   634,   548,   517,   643,   633,   130,
-     548,   526,   633,   550,    94,   526,   522,   513,    84,    85,
-     656,    87,    82,   115,    84,   517,   400,   112,   113,   582,
-     115,     8,   582,   548,   526,     8,   402,   122,   123,   582,
-     125,   126,     8,   590,   582,   554,    90,     8,   414,    93,
-      90,   130,    96,    93,    98,   115,    96,   527,    98,   132,
-      12,    13,   618,   437,   139,   125,    18,   582,   623,   326,
-     327,   554,   513,   514,   515,   622,   612,   137,   558,   549,
-     521,   522,   618,   589,   133,    12,    13,   589,   623,   132,
-     513,    18,   515,    50,   650,   732,    95,   580,   521,   632,
-     650,   612,    82,   618,   589,   528,   690,   618,   630,   630,
-     593,   593,   336,   593,   650,   187,   753,   632,   633,   634,
-     279,   593,   637,   303,   158,   632,   618,   685,   686,   687,
-     386,   387,   388,   551,   158,   650,   627,   707,   589,   650,
-     272,   748,   695,   699,   625,   695,   753,   700,   437,   619,
-     770,   622,   695,    12,    13,   702,   699,   695,   650,    18,
-     432,   699,   595,   699,   670,   671,   672,   281,   670,   675,
-     672,   590,   678,   675,   670,   342,   678,   692,   634,    -1,
-     695,   651,   670,   671,   699,   692,   671,   672,   699,    -1,
-     675,    -1,   448,   678,   514,   515,    -1,    -1,    12,    13,
-      -1,   567,   522,   569,    18,   571,    -1,   699,    -1,   529,
-     693,   769,    -1,   728,    -1,    52,   121,   122,   123,    -1,
-     671,   672,    -1,   770,   675,    -1,    -1,   678,    -1,   782,
-     700,   737,   782,    -1,    -1,   731,   121,   122,   123,   782,
-     736,    52,   748,    -1,   782,    91,    92,    93,    -1,   725,
-      -1,    97,    98,    91,    92,    93,    -1,   513,   514,   515,
-      -1,    -1,    91,    92,    93,   521,   522,   782,    97,    98,
-      -1,    -1,   528,   529,    -1,   112,   113,   114,   115,   116,
-     763,    -1,    -1,   763,   763,   122,   123,    -1,   125,   126,
-     731,   732,   733,   130,   131,   736,   737,    91,    92,    93,
-      -1,   112,   113,   114,   115,   116,   747,   748,   731,    -1,
-     733,   122,   123,   736,   125,   126,    61,    62,    63,   130,
-      65,    -1,     1,    -1,   747,     4,   121,   122,   123,   752,
-     125,    -1,    -1,   589,    -1,    14,    15,    16,    -1,    10,
-      11,    -1,    13,    -1,    -1,    24,    25,    26,    -1,    28,
-      14,    15,    16,    32,    33,    34,    35,    91,    92,    93,
-      39,    40,    41,    97,    98,    -1,    -1,    46,    47,    -1,
-      -1,   110,    51,    -1,    53,    54,    55,    56,    -1,    58,
-      -1,    60,   121,   122,   123,    -1,   125,    66,    -1,    68,
-      -1,    70,   131,    91,    92,    93,    75,    -1,    77,    -1,
-      71,    80,    73,    74,    83,    76,    -1,    78,    -1,    88,
-      81,    -1,   732,   733,    85,   671,   672,   737,    89,   675,
-      -1,    -1,   678,    -1,   103,    -1,    -1,   106,   748,    -1,
-      -1,   110,    -1,   753,    -1,    -1,   107,   108,   117,   118,
-      -1,   120,   121,   122,   123,    -1,   125,    91,    92,    93,
-      -1,   130,   131,    97,    98,   134,   127,    91,    92,    93,
-      91,    92,    93,    -1,   135,   136,   137,   138,   139,   140,
-     141,    -1,    91,    92,    93,    -1,   732,   733,    97,    98,
-      -1,   737,    91,    92,    93,    -1,     0,     1,    97,    98,
-       4,    -1,   748,    91,    92,    93,    10,   753,    12,    13,
-      14,    15,    16,    -1,    18,    91,    92,    93,    22,    23,
-      24,    25,    26,    -1,    28,    91,    92,    93,    32,    33,
-      34,    35,    -1,    37,    38,    39,    40,    41,    42,    43,
-      44,    -1,    46,    47,    48,    -1,    -1,    51,    52,    53,
-      54,    55,    56,    -1,    58,    59,    60,    91,    92,    93,
-      -1,    -1,    66,    -1,    68,    -1,    70,    71,    -1,    73,
-      74,    75,    76,    77,    78,    -1,    80,    81,    -1,    83,
-      -1,    85,    -1,    87,    88,    89,    91,    92,    93,    91,
-      92,    93,    97,    98,    -1,    97,    98,    -1,    -1,   103,
-      -1,   105,   106,   107,   108,   109,   110,    -1,   112,    -1,
-      -1,   115,   116,   117,   118,    -1,   120,   121,   122,   123,
-      -1,   125,   126,   127,    -1,    -1,   130,    91,    92,    93,
-     134,   135,   136,   137,   138,   139,   140,   141,     4,    91,
-      92,    93,    -1,    -1,    10,    -1,    12,    13,    14,    15,
-      16,    -1,    18,    91,    92,    93,    22,    23,    24,    25,
-      26,    -1,    28,    -1,    -1,    -1,    32,    33,    34,    35,
-      -1,    17,    38,    39,    40,    41,    42,    43,    44,    -1,
-      46,    47,    48,    -1,    -1,    51,    52,    53,    54,    55,
-      56,    -1,    58,    59,    60,    -1,    -1,    -1,    -1,    -1,
-      66,    -1,    68,    -1,    70,    71,    -1,    73,    74,    75,
-      76,    77,    78,    -1,    80,    81,    -1,    83,    -1,    85,
-      -1,    87,    88,    89,    70,    -1,    -1,    -1,    74,    91,
-      92,    93,    -1,    79,    -1,    97,    98,   103,    -1,   105,
-     106,   107,   108,   109,   110,    -1,   112,    -1,    -1,   115,
-     116,   117,   118,    -1,   120,   121,   122,   123,    -1,   125,
-     126,   127,     0,     1,   130,    -1,     4,    -1,   134,   135,
-     136,   137,   138,   139,   140,   141,    14,    15,    16,    -1,
-      -1,   127,   128,    -1,    -1,    -1,    24,    25,    26,    -1,
-      28,    -1,   138,    -1,    32,    33,    34,    35,    -1,   145,
-      -1,    39,    40,    41,    91,    92,    93,    -1,    46,    47,
-      97,    98,    -1,    51,    -1,    53,    54,    55,    56,    -1,
-      58,    -1,    60,    -1,    -1,    -1,    25,    26,    66,    28,
-      68,    -1,    70,    32,    33,    34,    35,    75,    -1,    77,
-      39,    40,    80,    -1,    -1,    83,    -1,    46,    -1,    87,
-      88,    91,    92,    93,    53,    -1,    55,    97,    98,    -1,
-      -1,    60,    -1,    -1,    -1,   103,    -1,    -1,   106,    68,
-      -1,    -1,   110,    -1,   112,     1,    -1,    -1,     4,   117,
-     118,    -1,   120,   121,   122,   123,    -1,    -1,    14,    15,
-      16,    -1,   130,    -1,    -1,    52,   134,    -1,    24,    25,
-      26,    -1,    28,    -1,    -1,    -1,    32,    33,    34,    35,
-      91,    92,    93,    39,    40,    41,    97,    98,   117,   118,
-      46,    47,    -1,    -1,    -1,    51,    -1,    53,    54,    55,
-      56,   130,    58,    -1,    60,    -1,    -1,    -1,    -1,    -1,
-      66,    -1,    68,    69,    70,    -1,    91,    92,    93,    75,
-      -1,    77,    97,    98,    80,   112,   113,    83,   115,    -1,
-      -1,    87,    88,    -1,    -1,   122,   123,    -1,   125,   126,
-      -1,    -1,    -1,   130,    -1,    -1,    -1,   103,    -1,    -1,
-     106,    -1,    -1,    -1,   110,    -1,   112,     1,    -1,    -1,
-       4,   117,   118,    -1,   120,   121,   122,   123,    -1,    -1,
-      14,    15,    16,    -1,   130,    -1,    -1,    -1,   134,    -1,
-      24,    25,    26,    -1,    28,    -1,    -1,    -1,    32,    33,
-      34,    35,    91,    92,    93,    39,    40,    41,    97,    98,
-      -1,    -1,    46,    47,    -1,    -1,    -1,    51,    -1,    53,
-      54,    55,    56,    -1,    58,    -1,    60,    -1,    -1,    -1,
-      -1,    -1,    66,    -1,    68,    -1,    70,    -1,    10,    -1,
-      -1,    75,    -1,    77,    -1,    -1,    80,    -1,    -1,    83,
-      -1,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,
-      42,    -1,   106,    -1,    -1,    -1,   110,    -1,   112,    -1,
-      -1,    -1,    -1,   117,   118,    -1,   120,   121,   122,   123,
-      -1,    -1,    -1,    -1,    -1,    67,   130,   131,    -1,    71,
-     134,    73,    74,    -1,    76,    -1,    78,    -1,    -1,    -1,
-      10,    11,    12,    13,    -1,    -1,    -1,    89,    18,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   107,   108,    -1,   110,    -1,
-      -1,    -1,    -1,   115,    -1,   117,    -1,    -1,    -1,    10,
-      -1,    12,    13,   125,   126,   127,   128,    18,    -1,    -1,
-      -1,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-      -1,    71,    -1,    73,    74,    -1,    76,    -1,    78,    -1,
-      -1,    81,    -1,    -1,    -1,    85,    -1,    -1,    -1,    89,
-      10,    11,    12,    13,    94,    95,    -1,    -1,    18,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,   108,   109,
-      71,    -1,    73,    74,    -1,    76,    -1,    78,    -1,    -1,
-      81,    -1,    -1,    -1,    85,    -1,    -1,   127,    89,    -1,
-      -1,    -1,    -1,    94,    95,   135,   136,   137,   138,   139,
-     140,   141,    -1,    -1,    -1,    -1,   107,   108,   109,    -1,
-      -1,    71,    -1,    73,    74,    -1,    76,    -1,    78,    -1,
-      -1,    81,    -1,    -1,    -1,    85,   127,    -1,    -1,    89,
-      -1,    -1,    -1,    -1,   135,   136,   137,   138,   139,   140,
-     141,    -1,    10,    11,    12,    13,    -1,   107,   108,   109,
-      18,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    10,    11,    12,    13,   127,    -1,    -1,
-      -1,    18,    -1,    -1,    -1,   135,   136,   137,   138,   139,
-     140,   141,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    71,    -1,    73,    74,    -1,    76,    -1,
-      78,    -1,    -1,    81,    -1,    -1,    -1,    85,    -1,    -1,
-      -1,    89,    -1,    -1,    71,    -1,    73,    74,    -1,    76,
-      -1,    78,    -1,    -1,    81,    -1,    -1,    -1,    85,   107,
-     108,   109,    89,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    18,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   127,
-     107,   108,   109,    -1,    -1,    -1,    -1,   135,   136,   137,
-     138,   139,   140,   141,    -1,    -1,    -1,    -1,    -1,    -1,
-     127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   135,   136,
-     137,   138,   139,   140,   141,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    71,    -1,    73,    74,    -1,    76,
-      -1,    78,    -1,    -1,    81,    -1,    -1,    -1,    85,    -1,
-      -1,    -1,    89,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    18,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     107,   108,   109,    -1,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    18,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   135,   136,
-     137,   138,   139,   140,   141,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    71,    -1,    73,    74,    -1,    76,
-      -1,    78,    -1,    -1,    81,    -1,    -1,    -1,    85,    -1,
-      -1,    -1,    89,    -1,    -1,    71,    -1,    73,    74,    -1,
-      76,    -1,    78,    -1,    -1,    81,    -1,    -1,    -1,    85,
-     107,   108,   109,    89,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    18,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     127,   107,   108,   109,    -1,    -1,    -1,    -1,   135,   136,
-     137,   138,   139,   140,   141,    -1,    -1,    -1,    -1,    -1,
-      -1,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   135,
-     136,   137,   138,   139,   140,   141,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,    -1,
-      76,    -1,    78,    -1,    -1,    81,    -1,    -1,    -1,    85,
-      -1,    -1,    -1,    89,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    18,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   107,   108,   109,    -1,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    18,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   135,
-     136,   137,   138,   139,   140,   141,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,    -1,
-      76,    -1,    78,    -1,    -1,    81,    -1,    -1,    -1,    85,
-      -1,    -1,    -1,    89,    -1,    -1,    71,    -1,    73,    74,
-      -1,    76,    -1,    78,    -1,    -1,    81,    -1,    -1,    -1,
-      85,   107,   108,   109,    89,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    18,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   127,   107,   108,   109,    -1,    -1,    -1,    -1,   135,
-     136,   137,   138,   139,   140,   141,    -1,    -1,    -1,    -1,
-      -1,    -1,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     135,   136,   137,   138,   139,   140,   141,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
-      -1,    76,    -1,    78,    -1,    -1,    81,    -1,    -1,    -1,
-      85,    -1,    -1,    -1,    89,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    18,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   107,   108,   109,    -1,    10,    11,    12,    13,
-      -1,    -1,    -1,    -1,    18,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     135,   136,   137,   138,   139,   140,   141,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
-      -1,    76,    -1,    78,    -1,    -1,    81,    -1,    -1,    -1,
-      85,    -1,    -1,    -1,    89,    -1,    -1,    71,    -1,    73,
-      74,    -1,    76,    -1,    78,    -1,    -1,    81,    -1,    -1,
-      -1,    85,   107,   108,   109,    89,    10,    -1,    12,    13,
-      -1,    -1,    -1,    -1,    18,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   127,   107,   108,   109,    -1,    -1,    -1,    -1,
-     135,   136,   137,   138,   139,   140,   141,    -1,    -1,    -1,
-      -1,    -1,    -1,   127,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   135,   136,   137,   138,   139,   140,   141,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    73,
-      74,    -1,    76,    -1,    78,    -1,    -1,    81,    -1,    -1,
-      10,    85,    12,    13,    -1,    89,    -1,    -1,    18,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   107,   108,   109,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,
-      -1,    12,    13,   127,    -1,    -1,    -1,    18,    -1,    -1,
-      -1,   135,   136,   137,   138,   139,   140,   141,    -1,    -1,
-      -1,    71,    -1,    73,    74,    -1,    76,    -1,    78,    -1,
-      -1,    81,    -1,    -1,    -1,    85,    -1,    -1,    10,    89,
-      12,    13,    -1,    -1,    -1,    -1,    18,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,   108,   109,
-      71,    -1,    73,    74,    -1,    76,    -1,    78,    -1,    -1,
-      81,    -1,    -1,    -1,    85,    -1,    -1,   127,    89,    -1,
-      -1,    -1,    -1,    -1,    -1,   135,   136,   137,   138,   139,
-     140,   141,    -1,    -1,    -1,    -1,   107,   108,   109,    71,
-      -1,    73,    74,    -1,    76,    -1,    78,    -1,    -1,    81,
-      -1,    -1,    10,    85,    12,    13,   127,    89,    -1,    -1,
-      18,    -1,    -1,    -1,   135,   136,   137,   138,   139,   140,
-     141,    -1,    -1,    -1,    -1,   107,   108,   109,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    10,    -1,    12,    13,   127,    -1,    -1,    -1,    18,
-      -1,    -1,    -1,   135,   136,   137,   138,   139,   140,   141,
-      -1,    -1,    -1,    71,    -1,    73,    74,    -1,    76,    -1,
-      78,    -1,    -1,    81,    -1,    -1,    -1,    85,    -1,    -1,
-      10,    89,    12,    13,    -1,    -1,    -1,    -1,    18,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,
-     108,   109,    71,    -1,    73,    74,    -1,    76,    -1,    78,
-      -1,    -1,    81,    -1,    -1,    -1,    85,    -1,    -1,   127,
-      89,    10,    -1,    -1,    -1,    -1,    -1,   135,   136,   137,
-     138,   139,   140,   141,    -1,    -1,    -1,    -1,   107,   108,
-     109,    71,    -1,    73,    74,    -1,    76,    -1,    78,    -1,
-      -1,    81,    -1,    -1,    -1,    85,    -1,    -1,   127,    89,
-      -1,    -1,    -1,    -1,    -1,    -1,   135,   136,   137,   138,
-     139,   140,   141,    -1,    -1,    -1,    -1,   107,   108,   109,
-      -1,    -1,    71,    -1,    73,    74,    -1,    76,    -1,    78,
-      -1,    -1,    81,    -1,    -1,    -1,    85,   127,    -1,    -1,
-      89,    -1,    -1,    -1,    -1,   135,   136,   137,   138,   139,
-     140,   141,    -1,    -1,    -1,    -1,    -1,    -1,   107,   108,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   127,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   135,   136,   137,   138,
-     139,   140,   141,     4,    -1,    -1,    -1,    -1,    -1,    -1,
-      11,    12,    13,    14,    15,    16,    -1,    18,    -1,    -1,
-      -1,    22,    23,    24,    25,    26,    -1,    28,    -1,    -1,
-      -1,    32,    33,    34,    35,    -1,    -1,    38,    39,    40,
-      41,    42,    43,    44,    -1,    46,    47,    48,    -1,    -1,
-      51,    52,    53,    54,    55,    56,    -1,    58,    59,    60,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,
-      -1,    -1,    -1,    -1,    75,    -1,    77,    -1,    -1,    80,
-      -1,    -1,    83,    -1,    -1,    -1,    87,    88,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   103,    -1,   105,   106,    -1,    -1,   109,   110,
-      -1,   112,    -1,    -1,   115,   116,   117,   118,    -1,   120,
-     121,   122,   123,    -1,   125,   126,     4,    -1,    -1,   130,
-      -1,    -1,    -1,   134,    12,    13,    14,    15,    16,    -1,
-      18,    -1,    -1,    -1,    22,    23,    24,    25,    26,    -1,
-      28,    -1,    -1,    -1,    32,    33,    34,    35,    -1,    -1,
-      38,    39,    40,    41,    42,    43,    44,    -1,    46,    47,
-      48,    -1,    -1,    51,    52,    53,    54,    55,    56,    -1,
-      58,    59,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
-      68,    -1,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,
-      -1,    -1,    80,    -1,    -1,    83,    -1,    -1,    -1,    87,
-      88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   103,    -1,   105,   106,    -1,
-      -1,   109,   110,    -1,   112,    -1,    -1,   115,   116,   117,
-     118,    -1,   120,   121,   122,   123,    -1,   125,   126,     4,
-      -1,    -1,   130,    -1,    -1,    -1,   134,    -1,    -1,    14,
-      15,    16,    -1,    -1,    -1,    -1,    -1,    22,    23,    24,
-      25,    26,    -1,    28,    -1,    -1,    -1,    32,    33,    34,
-      35,    -1,    -1,    38,    39,    40,    41,    42,    43,    44,
-      -1,    46,    47,    48,    -1,    -1,    51,    52,    53,    54,
-      55,    56,    -1,    58,    59,    60,    -1,    -1,    -1,    -1,
-      -1,    66,    -1,    68,    -1,    70,    -1,    -1,    -1,    -1,
-      75,    -1,    77,    -1,    -1,    80,    -1,    -1,    83,    -1,
-      -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,
-     105,   106,    -1,    -1,    -1,   110,    -1,   112,    -1,    -1,
-     115,   116,   117,   118,    -1,   120,   121,   122,   123,    -1,
-     125,   126,     4,    -1,    -1,   130,    -1,    -1,    -1,   134,
-      -1,    -1,    14,    15,    16,    -1,    -1,    -1,    -1,    -1,
-      22,    23,    24,    25,    26,    -1,    28,    -1,    -1,    -1,
-      32,    33,    34,    35,    -1,    -1,    38,    39,    40,    41,
-      42,    43,    44,    -1,    46,    47,    48,    -1,    -1,    51,
-      52,    53,    54,    55,    56,    -1,    58,    59,    60,    -1,
-      -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,
-      -1,    -1,    -1,    75,    -1,    77,    -1,    -1,    80,    -1,
-      -1,    83,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   103,    -1,   105,   106,    -1,    -1,    -1,   110,    -1,
-     112,    -1,    -1,   115,   116,   117,   118,    -1,   120,   121,
-     122,   123,    -1,   125,   126,     4,    -1,    -1,   130,    -1,
-      -1,    -1,   134,    -1,    -1,    14,    15,    16,    -1,    -1,
-      -1,    -1,    -1,    22,    23,    24,    25,    26,    -1,    28,
-      -1,    -1,    -1,    32,    33,    34,    35,    -1,    -1,    38,
-      39,    40,    41,    42,    43,    44,    -1,    46,    47,    48,
-      -1,    -1,    51,    52,    53,    54,    55,    56,    -1,    58,
-      59,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,
-      -1,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,    -1,
-      -1,    80,    -1,    -1,    83,    -1,    -1,    -1,    -1,    88,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   103,    -1,   105,   106,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   115,   116,   117,   118,
-      -1,   120,   121,   122,   123,    -1,   125,   126,     4,    -1,
-      -1,   130,    -1,    -1,    -1,   134,    -1,    -1,    14,    15,
-      16,    -1,    -1,    -1,    -1,    -1,    22,    23,    24,    25,
-      26,    -1,    28,    -1,    -1,    -1,    32,    33,    34,    35,
-      -1,    -1,    38,    39,    40,    41,    42,    43,    44,    -1,
-      46,    47,    48,    -1,    -1,    51,    52,    53,    54,    55,
-      56,    -1,    58,    59,    60,    -1,    -1,    -1,    -1,    -1,
-      66,    -1,    68,    -1,    70,    -1,    -1,    -1,    -1,    75,
-      -1,    77,    -1,    -1,    80,    -1,    -1,    83,    -1,    -1,
-      -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,   105,
-     106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   115,
-     116,   117,   118,    -1,   120,   121,   122,   123,    -1,   125,
-     126,     4,    -1,    -1,   130,    -1,    -1,    -1,   134,    -1,
-      -1,    14,    15,    16,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    24,    25,    26,    -1,    28,    -1,    -1,    -1,    32,
-      33,    34,    35,    -1,    -1,    -1,    39,    40,    41,    -1,
-      -1,    -1,    -1,    46,    47,    -1,    -1,    -1,    51,    -1,
-      53,    54,    55,    56,    -1,    58,    -1,    60,    -1,    -1,
-      -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,
-      -1,    -1,    75,    -1,    77,    -1,    -1,    80,    -1,    -1,
-      83,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     103,    -1,    -1,   106,    -1,    -1,    -1,   110,    -1,   112,
-      -1,    -1,     4,    -1,   117,   118,    -1,   120,   121,   122,
-     123,    -1,    14,    15,    16,    -1,    -1,   130,    -1,    -1,
-      -1,   134,    24,    25,    26,    -1,    28,    -1,    -1,    -1,
-      32,    33,    34,    35,    -1,    -1,    -1,    39,    40,    41,
-      -1,    -1,    -1,    -1,    46,    47,    -1,    -1,    -1,    51,
-      -1,    53,    54,    55,    56,    -1,    58,    -1,    60,    -1,
-      -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,
-      -1,    -1,    -1,    75,    -1,    77,    -1,    -1,    80,    -1,
-      -1,    83,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   103,    -1,    -1,   106,    -1,    -1,    -1,   110,     4,
-     112,    -1,    -1,    -1,    -1,   117,   118,    -1,   120,    14,
-      15,    16,   124,    -1,    -1,    -1,    -1,    -1,   130,    24,
-      25,    26,   134,    28,    -1,    -1,    -1,    32,    33,    34,
-      35,    -1,    -1,    -1,    39,    40,    41,    -1,    -1,    -1,
-      -1,    46,    47,    -1,    -1,    -1,    51,    -1,    53,    54,
-      55,    56,    -1,    58,    -1,    60,    -1,    -1,    -1,    -1,
-      -1,    66,    -1,    68,    -1,    70,    -1,    -1,    -1,    -1,
-      75,    -1,    77,    -1,    -1,    80,    -1,    -1,    83,    -1,
-      -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,
-      -1,   106,    -1,    -1,    -1,   110,     4,   112,    -1,    -1,
-      -1,    -1,   117,   118,    -1,   120,    14,    15,    16,    -1,
-      -1,    -1,    -1,    -1,    -1,   130,    24,    25,    26,   134,
-      28,    -1,    -1,    -1,    32,    33,    34,    35,    -1,    -1,
-      -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
-      -1,    -1,    -1,    51,    -1,    53,    54,    55,    56,    -1,
-      58,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
-      68,    -1,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,
-      -1,    -1,    80,    -1,    -1,    83,    -1,    -1,    -1,    87,
-      88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,   106,    -1,
-      -1,    -1,   110,     4,   112,    -1,    -1,    -1,    -1,   117,
-     118,    -1,   120,    14,    15,    16,    -1,    -1,    -1,    -1,
-      -1,    -1,   130,    24,    25,    26,   134,    28,    -1,    -1,
-      -1,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    -1,    -1,    -1,
-      51,    -1,    53,    54,    55,    56,    -1,    58,    -1,    60,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,
-      -1,    -1,    -1,    -1,    75,    -1,    77,    -1,    -1,    80,
-      -1,    -1,    83,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   103,    -1,    -1,   106,    -1,    -1,    -1,     0,
-       1,    -1,    -1,     4,    -1,    -1,   117,   118,    -1,   120,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   130,
-      -1,    22,    23,   134,    25,    26,    -1,    28,    -1,    -1,
-      -1,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    -1,    46,     1,    48,    -1,     4,
-      -1,    52,    53,    -1,    55,    -1,    -1,    -1,    -1,    60,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    23,    -1,
-      25,    26,    -1,    28,    -1,    -1,    -1,    32,    33,    34,
-      35,    36,    -1,    38,    39,    40,    41,    42,    43,    44,
-      -1,    46,    -1,    48,    -1,    -1,    -1,    52,    53,    -1,
-      55,    -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,   110,
-      -1,    -1,    -1,    68,   115,   116,   117,   118,    -1,    -1,
-     121,   122,   123,    -1,   125,    -1,    -1,    -1,    -1,   130,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,     4,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     115,   116,   117,   118,    -1,    -1,   121,   122,   123,    -1,
-      25,    26,    -1,    28,    -1,   130,   131,    32,    33,    34,
-      35,    36,    -1,    38,    39,    40,    41,    42,    43,    44,
-      -1,    46,    -1,    48,     4,    -1,    -1,    52,    53,    -1,
-      55,    -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
-      20,    21,    -1,    68,    -1,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    39,
-      40,    41,    -1,    -1,    -1,    45,    46,    47,    -1,    49,
-      -1,    51,    -1,    53,    -1,    55,    -1,    57,    58,    59,
-      60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
-     115,   116,   117,   118,    -1,    -1,   121,   122,   123,    -1,
-      -1,    -1,    -1,    -1,    -1,   130,   131,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   105,    -1,    -1,    -1,    -1,
-      -1,     4,    -1,    -1,    -1,    -1,    -1,   117,   118,    -1,
-      -1,   121,   122,   123,    -1,   125,    -1,    20,    21,    -1,
-     130,   131,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    -1,    -1,    -1,    39,    40,    41,    -1,
-      -1,    -1,    45,    46,    47,     4,    49,    -1,    51,    -1,
-      53,    -1,    55,    -1,    57,    58,    59,    60,    -1,    -1,
-      -1,    20,    21,    -1,    -1,    68,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    -1,    -1,    -1,
-      39,    40,    41,    -1,    -1,    -1,    45,    46,    47,    -1,
-      49,    -1,    51,    -1,    53,    -1,    55,    -1,    57,    58,
-      -1,    60,   105,    -1,    -1,    -1,    -1,    -1,    -1,    68,
-      -1,    -1,    -1,    -1,   117,   118,    -1,    -1,   121,   122,
-     123,    -1,   125,    -1,    -1,    -1,    -1,   130,   131,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   105,    -1,    -1,    -1,
-      -1,    -1,     4,    -1,    -1,    -1,    -1,    -1,   117,   118,
-      -1,    -1,   121,   122,   123,    -1,   125,    -1,    -1,    -1,
-      -1,   130,   131,    25,    26,    -1,    28,    -1,    -1,    -1,
-      32,    33,    34,    35,    -1,    -1,    -1,    39,    40,    41,
-      -1,    -1,    -1,    -1,    46,    -1,    -1,    -1,    -1,    12,
-      13,    53,    -1,    55,    -1,    18,    -1,    -1,    60,    22,
-      23,    -1,    25,    26,    -1,    28,    68,    -1,    -1,    32,
-      33,    34,    35,    -1,    -1,    38,    39,    40,    -1,    42,
-      43,    44,    -1,    46,    -1,    48,    -1,    -1,    -1,    52,
-      53,    -1,    55,    -1,    -1,    -1,    59,    60,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   130,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   105,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   115,   116,   117,   118,    -1,    -1,   121,   122,
-     123,    -1,   125,   126,    -1,    22,    23,   130,    25,    26,
-      -1,    28,    -1,    -1,    -1,    32,    33,    34,    35,    -1,
-      -1,    38,    39,    40,    -1,    42,    43,    44,    -1,    46,
-      -1,    48,    -1,    -1,    -1,    52,    53,    -1,    55,    -1,
-      -1,    -1,    59,    60,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   105,    -1,
-      -1,    -1,    -1,   110,    -1,   112,    -1,    -1,   115,   116,
-     117,   118,    -1,    -1,   121,   122,   123,    -1,   125,   126,
-      -1,    22,    23,   130,    25,    26,    -1,    28,    -1,    -1,
-      -1,    32,    33,    34,    35,    -1,    -1,    38,    39,    40,
-      -1,    42,    43,    44,    -1,    46,    -1,    48,    -1,    -1,
-      -1,    52,    53,    -1,    55,    -1,    -1,    -1,    59,    60,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   105,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   115,   116,   117,   118,    -1,    -1,
-     121,   122,   123,    -1,   125,   126,    -1,    -1,    -1,   130
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint16 yystos[] =
-{
-       0,    99,   148,   150,   149,     0,     1,     4,    22,    23,
-      25,    26,    28,    32,    33,    34,    35,    37,    38,    39,
-      40,    41,    42,    43,    44,    46,    48,    52,    53,    55,
-      60,    68,   110,   115,   116,   117,   118,   121,   122,   123,
-     125,   130,   151,   152,   153,   155,   157,   161,   162,   168,
-     171,   174,   178,   179,   180,   183,   187,   192,   193,   194,
-     200,   202,   203,   223,   225,   226,   227,   228,   229,   233,
-     314,   316,     1,    10,    12,    13,    14,    15,    16,    18,
-      24,    28,    37,    47,    51,    54,    56,    58,    59,    66,
-      70,    71,    73,    74,    75,    76,    77,    78,    80,    81,
-      83,    85,    87,    88,    89,   103,   105,   106,   107,   108,
-     109,   110,   112,   120,   125,   126,   127,   134,   135,   136,
-     137,   138,   139,   140,   141,   155,   158,   163,   164,   168,
-     171,   174,   178,   185,   188,   189,   190,   191,   195,   196,
-     200,   235,   242,   243,   244,   248,   249,   250,   255,   256,
-     257,   259,   261,   262,   263,   268,   269,   270,   275,   282,
-     289,   291,   292,   293,   295,   296,   303,   304,   305,   306,
-     307,   312,   314,   316,   110,   125,   126,   245,   130,   130,
-     245,   245,   317,   315,   130,   187,   187,   245,   186,    91,
-      92,    93,    97,    98,   205,   207,   211,   212,   213,   214,
-     222,   211,   186,    36,   160,   121,   132,   153,   219,   221,
-     236,   237,   130,     1,   131,   162,   184,     7,   230,   188,
-     195,   200,   295,   203,   196,   198,    13,   308,    18,    18,
-     142,   143,   266,   267,   266,   267,   125,   130,   158,   241,
-     245,   241,   241,    11,    13,   109,   117,   121,   125,   126,
-     153,   154,   156,   157,   164,   168,   171,   174,   178,   190,
-     196,   201,   202,   220,   221,   226,   246,   247,   254,   279,
-     293,   306,   308,   314,   316,   241,   105,   197,   219,   251,
-     288,   313,   277,   278,   279,   280,   278,   278,    93,    97,
-     205,   206,   215,   216,   222,   278,   127,   305,    13,   273,
-     273,   155,   189,   128,   278,   278,   310,    67,   117,   127,
-     128,   133,   134,   135,   136,   245,   254,   263,   264,   272,
-     274,   316,   278,   258,   258,   278,   127,   128,    17,   144,
-      13,    18,   309,   100,   169,   100,   172,   132,   224,   234,
-      52,   112,   113,   114,   115,   116,   125,   126,   130,   153,
-     318,   319,   321,   322,   323,   325,   328,   329,   330,   113,
-     319,   321,   329,   124,   175,   188,   224,     1,    69,   189,
-      97,   208,   210,   212,   217,    97,   209,   210,   216,   218,
-      93,    97,   210,   217,   218,   222,    91,    92,    93,    95,
-      95,   131,   130,   215,   155,   163,   195,   200,   295,   219,
-     132,   119,    28,   181,   190,   231,     7,   203,   142,   143,
-     132,   104,   167,   237,   133,   155,   132,   281,    97,   205,
-     215,   201,   279,   132,   281,   130,    67,   106,   118,   223,
-     252,   253,   270,    13,    82,    84,   125,   137,   283,   285,
-     287,   316,   318,   258,   144,   258,   217,   218,    93,   186,
-     244,   258,    61,    62,    63,    65,   298,   145,   311,   127,
-     259,   260,   258,   304,   304,   305,   305,   188,     1,   131,
-     155,   170,   171,   174,   177,   178,   200,   314,   316,     1,
-     131,   155,   173,   174,   177,   200,   314,   316,   245,   198,
-     188,   331,    90,    93,    96,    98,   326,    90,   326,   327,
-     324,   320,   115,   116,   319,   323,   328,   330,     1,   131,
-     176,   178,   198,    91,    92,    93,    94,    95,   269,   270,
-     271,    91,    92,    94,   276,   280,   217,   218,    91,    92,
-      94,   154,   156,   293,   109,   127,   259,   306,    97,   204,
-     211,   212,    97,   204,   212,   215,    97,   204,   211,   215,
-     111,   293,   294,   306,   159,   163,   182,   200,   232,   125,
-      20,    21,    27,    29,    30,    31,    45,    47,    49,    51,
-      57,    58,   125,   131,   155,   165,   166,   196,   200,   238,
-     239,   240,   132,   245,   109,   246,   293,   306,   133,    93,
-     132,   302,   308,   199,   258,   310,   285,    17,    70,    74,
-      79,   127,   128,   138,   145,   284,   286,   109,   308,   154,
-     202,   220,   226,   293,   109,   127,   259,   306,   211,   215,
-     269,   269,   297,   132,   146,   265,   273,     5,   160,   160,
-     130,   327,   327,   327,   327,   131,   321,   329,   330,   332,
-      94,   160,    97,   208,   212,   217,   209,   210,   217,    97,
-     208,   209,   210,   220,   306,    97,   208,   210,   218,   209,
-     218,   293,   109,   127,   259,   306,    97,    12,    13,    18,
-      91,    92,    93,     8,   271,    93,     8,   276,    93,     8,
-     156,   109,   127,   259,   306,   278,   260,   280,   131,   162,
-     130,   200,   245,   245,   245,   132,   125,   155,   246,   211,
-     215,   302,   139,   105,   131,   166,   240,   311,    12,    13,
-      18,   220,    12,    13,   307,   102,   298,   299,   300,   301,
-     308,   266,   267,   277,   187,   175,   219,   321,   329,   332,
-     330,    91,    92,    93,   271,   276,    91,    92,   220,   293,
-      12,    13,    18,   109,   127,   259,    94,    91,    92,    12,
-      13,    18,    91,    92,   204,   204,   204,    12,    13,    18,
-     258,   258,   258,   167,   237,   155,   246,   307,   308,   265,
-     133,    64,   128,    50,   290,   131,   210,   210,    12,    13,
-      18,   131,   132,   258,   301,   246
-};
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                (-2)
-#define YYEOF          0
-
-#define YYACCEPT       goto yyacceptlab
-#define YYABORT                goto yyabortlab
-#define YYERROR                goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
-
-#define YYFAIL         goto yyerrlab
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                 \
-do                                                             \
-  if (yychar == YYEMPTY && yylen == 1)                         \
-    {                                                          \
-      yychar = (Token);                                                \
-      yylval = (Value);                                                \
-      yytoken = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK (1);                                          \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    {                                                          \
-      yyerror (&yylloc, parser, YY_("syntax error: cannot back up")); \
-      YYERROR;                                                 \
-    }                                                          \
-while (YYID (0))
-
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
-    do                                                                 \
-      if (YYID (N))                                                    \
-       {                                                               \
-         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
-         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
-         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
-         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
-       }                                                               \
-      else                                                             \
-       {                                                               \
-         (Current).first_line   = (Current).last_line   =              \
-           YYRHSLOC (Rhs, 0).last_line;                                \
-         (Current).first_column = (Current).last_column =              \
-           YYRHSLOC (Rhs, 0).last_column;                              \
-       }                                                               \
-    while (YYID (0))
-#endif
-
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)                 \
-     fprintf (File, "%d.%d-%d.%d",                     \
-             (Loc).first_line, (Loc).first_column,     \
-             (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
-#else
-# define YYLEX yylex (&yylval, &yylloc, parser)
-#endif
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
-do {                                                                     \
-  if (yydebug)                                                           \
-    {                                                                    \
-      YYFPRINTF (stderr, "%s ", Title);                                          \
-      yy_symbol_print (stderr,                                           \
-                 Type, Value, Location, parser); \
-      YYFPRINTF (stderr, "\n");                                                  \
-    }                                                                    \
-} while (YYID (0))
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, Lily_parser *parser)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, parser)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-    YYLTYPE const * const yylocationp;
-    Lily_parser *parser;
-#endif
-{
-  if (!yyvaluep)
-    return;
-  YYUSE (yylocationp);
-  YYUSE (parser);
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
-# endif
-  switch (yytype)
-    {
-      default:
-       break;
-    }
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, Lily_parser *parser)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp, parser)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-    YYLTYPE const * const yylocationp;
-    Lily_parser *parser;
-#endif
-{
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
-  YY_LOCATION_PRINT (yyoutput, *yylocationp);
-  YYFPRINTF (yyoutput, ": ");
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, parser);
-  YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
-#else
-static void
-yy_stack_print (bottom, top)
-    yytype_int16 *bottom;
-    yytype_int16 *top;
-#endif
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)                           \
-do {                                                           \
-  if (yydebug)                                                 \
-    yy_stack_print ((Bottom), (Top));                          \
-} while (YYID (0))
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, Lily_parser *parser)
-#else
-static void
-yy_reduce_print (yyvsp, yylsp, yyrule, parser)
-    YYSTYPE *yyvsp;
-    YYLTYPE *yylsp;
-    int yyrule;
-    Lily_parser *parser;
-#endif
-{
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  unsigned long int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-            yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      fprintf (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-                      &(yyvsp[(yyi + 1) - (yynrhs)])
-                      , &(yylsp[(yyi + 1) - (yynrhs)])                , parser);
-      fprintf (stderr, "\n");
-    }
-}
-
-# define YY_REDUCE_PRINT(Rule)         \
-do {                                   \
-  if (yydebug)                         \
-    yy_reduce_print (yyvsp, yylsp, Rule, parser); \
-} while (YYID (0))
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-\f
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
-yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
-{
-  YYSIZE_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-       switch (*++yyp)
-         {
-         case '\'':
-         case ',':
-           goto do_not_strip_quotes;
-
-         case '\\':
-           if (*++yyp != '\\')
-             goto do_not_strip_quotes;
-           /* Fall through.  */
-         default:
-           if (yyres)
-             yyres[yyn] = *yyp;
-           yyn++;
-           break;
-
-         case '"':
-           if (yyres)
-             yyres[yyn] = '\0';
-           return yyn;
-         }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
-  int yyn = yypact[yystate];
-
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
-    {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
-
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-        constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-                   + sizeof yyexpecting - 1
-                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-                      * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-        YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-         {
-           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-             {
-               yycount = 1;
-               yysize = yysize0;
-               yyformat[sizeof yyunexpected - 1] = '\0';
-               break;
-             }
-           yyarg[yycount++] = yytname[yyx];
-           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-           yysize_overflow |= (yysize1 < yysize);
-           yysize = yysize1;
-           yyfmt = yystpcpy (yyfmt, yyprefix);
-           yyprefix = yyor;
-         }
-
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
-
-      if (yysize_overflow)
-       return YYSIZE_MAXIMUM;
-
-      if (yyresult)
-       {
-         /* Avoid sprintf, as that infringes on the user's name space.
-            Don't have undefined behavior even if the translation
-            produced a string with the wrong number of "%s"s.  */
-         char *yyp = yyresult;
-         int yyi = 0;
-         while ((*yyp = *yyf) != '\0')
-           {
-             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-               {
-                 yyp += yytnamerr (yyp, yyarg[yyi++]);
-                 yyf += 2;
-               }
-             else
-               {
-                 yyp++;
-                 yyf++;
-               }
-           }
-       }
-      return yysize;
-    }
-}
-#endif /* YYERROR_VERBOSE */
-\f
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, Lily_parser *parser)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep, yylocationp, parser)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-    YYLTYPE *yylocationp;
-    Lily_parser *parser;
-#endif
-{
-  YYUSE (yyvaluep);
-  YYUSE (yylocationp);
-  YYUSE (parser);
-
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
-
-      default:
-       break;
-    }
-}
-\f
-
-/* Prevent warnings from -Wmissing-prototypes.  */
-
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (Lily_parser *parser);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
-
-
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (Lily_parser *parser)
-#else
-int
-yyparse (parser)
-    Lily_parser *parser;
-#endif
-#endif
-{
-  /* The look-ahead symbol.  */
-int yychar;
-
-/* The semantic value of the look-ahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far.  */
-int yynerrs;
-/* Location data for the look-ahead symbol.  */
-YYLTYPE yylloc;
-
-  int yystate;
-  int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack.  */
-  yytype_int16 yyssa[YYINITDEPTH];
-  yytype_int16 *yyss = yyssa;
-  yytype_int16 *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  YYSTYPE *yyvsp;
-
-  /* The location stack.  */
-  YYLTYPE yylsa[YYINITDEPTH];
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-  /* The locations where the error started and ended.  */
-  YYLTYPE yyerror_range[2];
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-  YYLTYPE yyloc;
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY;            /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  yyssp = yyss;
-  yyvsp = yyvs;
-  yylsp = yyls;
-#if YYLTYPE_IS_TRIVIAL
-  /* Initialize the default location before parsing starts.  */
-  yylloc.first_line   = yylloc.last_line   = 1;
-  yylloc.first_column = yylloc.last_column = 0;
-#endif
-
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed.  So pushing a state here evens the stacks.  */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-       /* Give user a chance to reallocate the stack.  Use copies of
-          these so that the &'s don't force the real ones into
-          memory.  */
-       YYSTYPE *yyvs1 = yyvs;
-       yytype_int16 *yyss1 = yyss;
-       YYLTYPE *yyls1 = yyls;
-
-       /* Each stack pointer address is followed by the size of the
-          data in use in that stack, in bytes.  This used to be a
-          conditional around just the two extra args, but that might
-          be undefined if yyoverflow is a macro.  */
-       yyoverflow (YY_("memory exhausted"),
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-                   &yyls1, yysize * sizeof (*yylsp),
-                   &yystacksize);
-       yyls = yyls1;
-       yyss = yyss1;
-       yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-       goto yyexhaustedlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-       yystacksize = YYMAXDEPTH;
-
-      {
-       yytype_int16 *yyss1 = yyss;
-       union yyalloc *yyptr =
-         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-       if (! yyptr)
-         goto yyexhaustedlab;
-       YYSTACK_RELOCATE (yyss);
-       YYSTACK_RELOCATE (yyvs);
-       YYSTACK_RELOCATE (yyls);
-#  undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-      yylsp = yyls + yysize - 1;
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                 (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
-       YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-  /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
-
-  /* First try to decide what to do without reference to look-ahead token.  */
-  yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
-    goto yydefault;
-
-  /* Not known => get a look-ahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-    }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
-    {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the look-ahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  yystate = yyn;
-  *++yyvsp = yylval;
-  *++yylsp = yylloc;
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-  /* Default location.  */
-  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-        case 3:
-#line 566 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
-               parser->lexer_->push_note_state (nn);
-       ;}
-    break;
-
-  case 4:
-#line 569 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->pop_state ();
-               parser->lexer_->set_identifier (ly_symbol2scm ("parseStringResult"), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 5:
-#line 575 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { ;}
-    break;
-
-  case 6:
-#line 576 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-       ;}
-    break;
-
-  case 7:
-#line 578 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-       ;}
-    break;
-
-  case 8:
-#line 580 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->error_level_ = 1;
-       ;}
-    break;
-
-  case 9:
-#line 583 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->error_level_ = 1;
-       ;}
-    break;
-
-  case 10:
-#line 590 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->add_scope (get_header (parser));
-       ;}
-    break;
-
-  case 11:
-#line 592 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->set_identifier (ly_symbol2scm ("$defaultheader"), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 12:
-#line 595 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Book *book = (yyvsp[(1) - (1)].book);
-               SCM proc = parser->lexer_->lookup_identifier ("toplevel-book-handler");
-               scm_call_2 (proc, parser->self_scm (), book->self_scm ());
-               book->unprotect ();
-       ;}
-    break;
-
-  case 13:
-#line 601 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Book *bookpart = (yyvsp[(1) - (1)].book);
-               SCM proc = parser->lexer_->lookup_identifier ("toplevel-bookpart-handler");
-               scm_call_2 (proc, parser->self_scm (), bookpart->self_scm ());
-               bookpart->unprotect ();
-       ;}
-    break;
-
-  case 14:
-#line 607 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Score *score = (yyvsp[(1) - (1)].score);
-
-               SCM proc = parser->lexer_->lookup_identifier ("toplevel-score-handler");
-               scm_call_2 (proc, parser->self_scm (), score->self_scm ());
-               score->unprotect ();
-       ;}
-    break;
-
-  case 15:
-#line 614 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *music = unsmob_music ((yyvsp[(1) - (1)].scm));
-               SCM proc = parser->lexer_->lookup_identifier ("toplevel-music-handler");
-               scm_call_2 (proc, parser->self_scm (), music->self_scm ());
-       ;}
-    break;
-
-  case 16:
-#line 619 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler");
-               scm_call_2 (proc, parser->self_scm (), scm_list_1 ((yyvsp[(1) - (1)].scm)));
-       ;}
-    break;
-
-  case 17:
-#line 623 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler");
-               scm_call_2 (proc, parser->self_scm (), (yyvsp[(1) - (1)].scm));
-       ;}
-    break;
-
-  case 18:
-#line 627 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM id = SCM_EOL;
-               Output_def * od = (yyvsp[(1) - (1)].outputdef);
-
-               if ((yyvsp[(1) - (1)].outputdef)->c_variable ("is-paper") == SCM_BOOL_T)
-                       id = ly_symbol2scm ("$defaultpaper");
-               else if ((yyvsp[(1) - (1)].outputdef)->c_variable ("is-midi") == SCM_BOOL_T)
-                       id = ly_symbol2scm ("$defaultmidi");
-               else if ((yyvsp[(1) - (1)].outputdef)->c_variable ("is-layout") == SCM_BOOL_T)
-                       id = ly_symbol2scm ("$defaultlayout");
-
-               parser->lexer_->set_identifier (id, od->self_scm ());
-               od->unprotect();
-       ;}
-    break;
-
-  case 19:
-#line 645 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = parser->lexer_->eval_scm_token ((yyvsp[(1) - (1)].scm));
-       ;}
-    break;
-
-  case 27:
-#line 659 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].score)->self_scm ();
-               (yyvsp[(1) - (1)].score)->unprotect ();
-       ;}
-    break;
-
-  case 29:
-#line 665 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].book)->self_scm ();
-               (yyvsp[(1) - (1)].book)->unprotect ();
-       ;}
-    break;
-
-  case 30:
-#line 670 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].book)->self_scm ();
-               (yyvsp[(1) - (1)].book)->unprotect ();
-       ;}
-    break;
-
-  case 31:
-#line 675 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].outputdef)->self_scm ();
-               (yyvsp[(1) - (1)].outputdef)->unprotect ();
-       ;}
-    break;
-
-  case 37:
-#line 695 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("music-function", (yyloc),
-                                        (yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 38:
-#line 703 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("void-music", (yyloc));
-       ;}
-    break;
-
-  case 40:
-#line 707 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyvsp[(3) - (3)].scm) = scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL);
-               if (unsmob_music ((yyvsp[(2) - (3)].scm)))
-                       (yyvsp[(3) - (3)].scm) = scm_cons ((yyvsp[(2) - (3)].scm), (yyvsp[(3) - (3)].scm));
-               if (unsmob_music ((yyvsp[(1) - (3)].scm)))
-                       (yyvsp[(3) - (3)].scm) = scm_cons ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-               (yyval.scm) = MAKE_SYNTAX ("sequential-music", (yyloc), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 41:
-#line 715 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->error_level_ = 1;
-       ;}
-    break;
-
-  case 42:
-#line 718 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->error_level_ = 1;
-       ;}
-    break;
-
-  case 44:
-#line 726 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-
-       ;}
-    break;
-
-  case 45:
-#line 732 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = parser->lexer_->remove_scope ();
-       ;}
-    break;
-
-  case 46:
-#line 741 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;}
-    break;
-
-  case 47:
-#line 742 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;}
-    break;
-
-  case 48:
-#line 746 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->set_identifier ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 49:
-#line 749 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM path = scm_cons (scm_string_to_symbol ((yyvsp[(1) - (4)].scm)), (yyvsp[(2) - (4)].scm));
-               parser->lexer_->set_identifier (path, (yyvsp[(4) - (4)].scm));
-       ;
-/*
- TODO: devise standard for protection in parser.
-
-  The parser stack lives on the C-stack, which means that
-all objects can be unprotected as soon as they're here.
-
-*/
-       ;}
-    break;
-
-  case 50:
-#line 761 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { ;}
-    break;
-
-  case 51:
-#line 766 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].score)->self_scm ();
-               (yyvsp[(1) - (1)].score)->unprotect ();
-       ;}
-    break;
-
-  case 52:
-#line 770 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].book)->self_scm ();
-               (yyvsp[(1) - (1)].book)->unprotect ();
-       ;}
-    break;
-
-  case 53:
-#line 774 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].book)->self_scm ();
-               (yyvsp[(1) - (1)].book)->unprotect ();
-       ;}
-    break;
-
-  case 54:
-#line 778 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].outputdef)->self_scm ();
-               (yyvsp[(1) - (1)].outputdef)->unprotect ();
-       ;}
-    break;
-
-  case 55:
-#line 782 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 56:
-#line 785 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 57:
-#line 788 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 58:
-#line 791 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 59:
-#line 794 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 60:
-#line 797 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 61:
-#line 800 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 62:
-#line 803 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 63:
-#line 806 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 64:
-#line 809 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                (yyval.scm) = (yyvsp[(1) - (1)].scm);
-        ;}
-    break;
-
-  case 65:
-#line 816 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(3) - (4)].scm);
-       ;}
-    break;
-
-  case 68:
-#line 828 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (unsmob_music ((yyvsp[(1) - (1)].scm))) {
-                       SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
-                       (yyvsp[(1) - (1)].scm) = scm_call_2 (proc, parser->self_scm (), (yyvsp[(1) - (1)].scm));
-               }
-               if (unsmob_context_mod ((yyvsp[(1) - (1)].scm)))
-                       (yyval.scm) = (yyvsp[(1) - (1)].scm);
-               else {
-                       parser->parser_error ((yylsp[(1) - (1)]), _ ("not a context mod"));
-               }
-       ;}
-    break;
-
-  case 69:
-#line 843 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = Context_def::make_scm ();
-               unsmob_context_def ((yyval.scm))->origin ()->set_spot ((yyloc));
-       ;}
-    break;
-
-  case 70:
-#line 847 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-               unsmob_context_def ((yyval.scm))->origin ()->set_spot ((yyloc));
-       ;}
-    break;
-
-  case 71:
-#line 851 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               unsmob_context_def ((yyval.scm))->add_context_mod ((yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 72:
-#line 854 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                Context_def *td = unsmob_context_def ((yyval.scm));
-                SCM new_mods = unsmob_context_mod ((yyvsp[(2) - (2)].scm))->get_mods ();
-                for (SCM m = new_mods; scm_is_pair (m); m = scm_cdr (m)) {
-                    td->add_context_mod (scm_car (m));
-                }
-       ;}
-    break;
-
-  case 73:
-#line 861 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                Context_def *td = unsmob_context_def ((yyval.scm));
-                SCM new_mods = unsmob_context_mod ((yyvsp[(2) - (2)].scm))->get_mods ();
-                for (SCM m = new_mods; scm_is_pair (m); m = scm_cdr (m)) {
-                    td->add_context_mod (scm_car (m));
-                }
-       ;}
-    break;
-
-  case 74:
-#line 873 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.book) = (yyvsp[(3) - (4)].book);
-               pop_paper (parser);
-               parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), SCM_BOOL_F);
-       ;}
-    break;
-
-  case 75:
-#line 884 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.book) = new Book;
-               init_papers (parser);
-               (yyval.book)->origin ()->set_spot ((yyloc));
-               (yyval.book)->paper_ = dynamic_cast<Output_def*> (unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
-               (yyval.book)->paper_->unprotect ();
-               push_paper (parser, (yyval.book)->paper_);
-               (yyval.book)->header_ = get_header (parser);
-               parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), (yyval.book)->self_scm ());
-       ;}
-    break;
-
-  case 76:
-#line 894 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.book) = unsmob_book ((yyvsp[(1) - (1)].scm));
-               (yyval.book)->protect ();
-               (yyval.book)->origin ()->set_spot ((yyloc));
-               parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), (yyvsp[(1) - (1)].scm));
-       ;}
-    break;
-
-  case 77:
-#line 900 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.book)->paper_ = (yyvsp[(2) - (2)].outputdef);
-               (yyvsp[(2) - (2)].outputdef)->unprotect ();
-               set_paper (parser, (yyvsp[(2) - (2)].outputdef));
-       ;}
-    break;
-
-  case 78:
-#line 905 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Book *bookpart = (yyvsp[(2) - (2)].book);
-               SCM proc = parser->lexer_->lookup_identifier ("book-bookpart-handler");
-               scm_call_2 (proc, (yyval.book)->self_scm (), bookpart->self_scm ());
-               bookpart->unprotect ();
-       ;}
-    break;
-
-  case 79:
-#line 911 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Score *score = (yyvsp[(2) - (2)].score);
-               SCM proc = parser->lexer_->lookup_identifier ("book-score-handler");
-               scm_call_2 (proc, (yyval.book)->self_scm (), score->self_scm ());
-               score->unprotect ();
-       ;}
-    break;
-
-  case 80:
-#line 917 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *music = unsmob_music ((yyvsp[(2) - (2)].scm));
-               SCM proc = parser->lexer_->lookup_identifier ("book-music-handler");
-               scm_call_3 (proc, parser->self_scm (), (yyval.book)->self_scm (), music->self_scm ());
-       ;}
-    break;
-
-  case 81:
-#line 922 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
-               scm_call_2 (proc, (yyval.book)->self_scm (), scm_list_1 ((yyvsp[(2) - (2)].scm)));
-       ;}
-    break;
-
-  case 82:
-#line 926 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
-               scm_call_2 (proc, (yyval.book)->self_scm (), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 83:
-#line 931 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->add_scope ((yyvsp[(1) - (1)].book)->header_);
-       ;}
-    break;
-
-  case 85:
-#line 934 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { ;}
-    break;
-
-  case 86:
-#line 935 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.book)->paper_ = 0;
-               (yyval.book)->scores_ = SCM_EOL;
-               (yyval.book)->bookparts_ = SCM_EOL;
-       ;}
-    break;
-
-  case 87:
-#line 943 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.book) = (yyvsp[(3) - (4)].book);
-               parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), SCM_BOOL_F);
-       ;}
-    break;
-
-  case 88:
-#line 950 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.book) = new Book;
-               (yyval.book)->origin ()->set_spot ((yyloc));
-               parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), (yyval.book)->self_scm ());
-       ;}
-    break;
-
-  case 89:
-#line 955 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.book) = unsmob_book ((yyvsp[(1) - (1)].scm));
-               (yyval.book)->protect ();
-               (yyval.book)->origin ()->set_spot ((yyloc));
-               parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), (yyvsp[(1) - (1)].scm));
-       ;}
-    break;
-
-  case 90:
-#line 961 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.book)->paper_ = (yyvsp[(2) - (2)].outputdef);
-               (yyvsp[(2) - (2)].outputdef)->unprotect ();
-       ;}
-    break;
-
-  case 91:
-#line 965 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Score *score = (yyvsp[(2) - (2)].score);
-               SCM proc = parser->lexer_->lookup_identifier ("bookpart-score-handler");
-               scm_call_2 (proc, (yyval.book)->self_scm (), score->self_scm ());
-               score->unprotect ();
-       ;}
-    break;
-
-  case 92:
-#line 971 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *music = unsmob_music ((yyvsp[(2) - (2)].scm));
-               SCM proc = parser->lexer_->lookup_identifier ("bookpart-music-handler");
-               scm_call_3 (proc, parser->self_scm (), (yyval.book)->self_scm (), music->self_scm ());
-       ;}
-    break;
-
-  case 93:
-#line 976 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
-               scm_call_2 (proc, (yyval.book)->self_scm (), scm_list_1 ((yyvsp[(2) - (2)].scm)));
-       ;}
-    break;
-
-  case 94:
-#line 980 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
-               scm_call_2 (proc, (yyval.book)->self_scm (), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 95:
-#line 985 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (!ly_is_module ((yyvsp[(1) - (1)].book)->header_))
-                       (yyvsp[(1) - (1)].book)->header_ = ly_make_module (false);
-               parser->lexer_->add_scope ((yyvsp[(1) - (1)].book)->header_);
-       ;}
-    break;
-
-  case 97:
-#line 990 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { ;}
-    break;
-
-  case 98:
-#line 991 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.book)->paper_ = 0;
-               (yyval.book)->scores_ = SCM_EOL;
-       ;}
-    break;
-
-  case 99:
-#line 998 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.score) = (yyvsp[(3) - (4)].score);
-       ;}
-    break;
-
-  case 100:
-#line 1004 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM m = (yyvsp[(1) - (1)].scm);
-               SCM scorify = ly_lily_module_constant ("scorify-music");
-               SCM score = scm_call_2 (scorify, m, parser->self_scm ());
-
-               // pass ownernship to C++ again.
-               (yyval.score) = unsmob_score (score);
-               (yyval.score)->protect ();
-               (yyval.score)->origin ()->set_spot ((yyloc));
-       ;}
-    break;
-
-  case 101:
-#line 1014 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.score) = unsmob_score ((yyvsp[(1) - (1)].scm));
-               (yyval.score)->protect ();
-               (yyval.score)->origin ()->set_spot ((yyloc));
-       ;}
-    break;
-
-  case 102:
-#line 1020 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (!ly_is_module ((yyvsp[(1) - (1)].score)->get_header ()))
-                       (yyvsp[(1) - (1)].score)->set_header (ly_make_module (false));
-               parser->lexer_->add_scope ((yyvsp[(1) - (1)].score)->get_header ());
-       ;}
-    break;
-
-  case 104:
-#line 1025 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if ((yyvsp[(2) - (2)].outputdef)->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T)
-               {
-                       parser->parser_error ((yylsp[(2) - (2)]), _("\\paper cannot be used in \\score, use \\layout instead"));
-
-               }
-               else
-               {
-                       (yyval.score)->add_output_def ((yyvsp[(2) - (2)].outputdef));
-               }
-               (yyvsp[(2) - (2)].outputdef)->unprotect ();
-       ;}
-    break;
-
-  case 105:
-#line 1037 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.score)->error_found_ = true;
-       ;}
-    break;
-
-  case 106:
-#line 1048 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.outputdef) = (yyvsp[(1) - (1)].outputdef);
-               if ((yyval.outputdef)->lookup_variable (ly_symbol2scm ("is-paper")) != SCM_BOOL_T)
-               {
-                       parser->parser_error ((yylsp[(1) - (1)]), _ ("need \\paper for paper block"));
-                       (yyvsp[(1) - (1)].outputdef)->unprotect ();
-                       (yyval.outputdef) = get_paper (parser);
-               }
-       ;}
-    break;
-
-  case 107:
-#line 1061 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.outputdef) = (yyvsp[(1) - (2)].outputdef);
-
-               parser->lexer_->remove_scope ();
-               parser->lexer_->pop_state ();
-       ;}
-    break;
-
-  case 108:
-#line 1070 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.outputdef) = get_paper (parser);
-               (yyval.outputdef)->input_origin_ = (yyloc);
-               parser->lexer_->add_scope ((yyval.outputdef)->scope_);
-       ;}
-    break;
-
-  case 109:
-#line 1075 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Output_def *p = get_midi (parser);
-               (yyval.outputdef) = p;
-               parser->lexer_->add_scope (p->scope_);
-       ;}
-    break;
-
-  case 110:
-#line 1080 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Output_def *p = get_layout (parser);
-
-               parser->lexer_->add_scope (p->scope_);
-               (yyval.outputdef) = p;
-       ;}
-    break;
-
-  case 111:
-#line 1089 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->push_initial_state ();
-               (yyval.outputdef) = (yyvsp[(1) - (1)].outputdef);
-       ;}
-    break;
-
-  case 112:
-#line 1102 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->pop_state ();
-       ;}
-    break;
-
-  case 113:
-#line 1106 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->pop_state ();
-       ;}
-    break;
-
-  case 114:
-#line 1109 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(4) - (5)].scm);
-       ;}
-    break;
-
-  case 115:
-#line 1115 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.outputdef) = (yyvsp[(1) - (2)].outputdef);
-               (yyval.outputdef)->input_origin_.set_spot ((yyloc));
-       ;}
-    break;
-
-  case 116:
-#line 1119 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyvsp[(1) - (3)].outputdef)->unprotect ();
-
-               Output_def *o = unsmob_output_def ((yyvsp[(3) - (3)].scm));
-               o->input_origin_.set_spot ((yyloc));
-               (yyval.outputdef) = o;
-               (yyval.outputdef)->protect ();
-               parser->lexer_->remove_scope ();
-               parser->lexer_->add_scope (o->scope_);
-       ;}
-    break;
-
-  case 117:
-#line 1129 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-
-       ;}
-    break;
-
-  case 118:
-#line 1133 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
-               parser->lexer_->push_note_state (nn);
-       ;}
-    break;
-
-  case 119:
-#line 1137 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (unsmob_context_def ((yyvsp[(3) - (3)].scm)))
-                       assign_context_def ((yyval.outputdef), (yyvsp[(3) - (3)].scm));
-               else {
-
-                       SCM proc = parser->lexer_->lookup_identifier
-                                    ("output-def-music-handler");
-                       scm_call_3 (proc, parser->self_scm (),
-                                   (yyvsp[(1) - (3)].outputdef)->self_scm (), (yyvsp[(3) - (3)].scm));
-               }
-       ;}
-    break;
-
-  case 120:
-#line 1148 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-
-       ;}
-    break;
-
-  case 121:
-#line 1154 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("tempo", (yyloc), SCM_EOL, (yyvsp[(2) - (4)].scm), (yyvsp[(4) - (4)].scm));
-       ;}
-    break;
-
-  case 122:
-#line 1157 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("tempo", (yyloc), (yyvsp[(2) - (5)].scm), (yyvsp[(3) - (5)].scm), (yyvsp[(5) - (5)].scm));
-       ;}
-    break;
-
-  case 123:
-#line 1160 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("tempo", (yyloc), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 124:
-#line 1169 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = SCM_EOL;
-       ;}
-    break;
-
-  case 125:
-#line 1172 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (unsmob_music ((yyvsp[(2) - (2)].scm)))
-                       (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm));
-       ;}
-    break;
-
-  case 126:
-#line 1176 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *m = MY_MAKE_MUSIC("Music", (yyloc));
-               // ugh. code dup
-               m->set_property ("error-found", SCM_BOOL_T);
-               (yyval.scm) = scm_cons (m->self_scm (), (yyvsp[(1) - (2)].scm));
-               m->unprotect (); /* UGH */
-       ;}
-    break;
-
-  case 127:
-#line 1187 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_reverse_x ((yyvsp[(2) - (3)].scm), SCM_EOL);
-       ;}
-    break;
-
-  case 131:
-#line 1199 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (unsmob_music ((yyvsp[(1) - (1)].scm))
-                   || scm_is_eq ((yyvsp[(1) - (1)].scm), SCM_UNSPECIFIED))
-                       (yyval.scm) = (yyvsp[(1) - (1)].scm);
-               else
-               {
-                       (yyloc).warning (_ ("Ignoring non-music expression"));
-                       (yyval.scm) = SCM_UNSPECIFIED;
-               }
-       ;}
-    break;
-
-  case 132:
-#line 1213 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (unsmob_pitch ((yyvsp[(1) - (1)].scm))) {
-                       Music *n = MY_MAKE_MUSIC ("NoteEvent", (yylsp[(1) - (1)]));
-                       n->set_property ("pitch", (yyvsp[(1) - (1)].scm));
-                       n->set_property ("duration",
-                                        parser->default_duration_.smobbed_copy ());
-                       (yyval.scm) = n->unprotect ();
-               }
-       ;}
-    break;
-
-  case 137:
-#line 1233 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("repeat", (yyloc), (yyvsp[(2) - (4)].scm), (yyvsp[(3) - (4)].scm), (yyvsp[(4) - (4)].scm), SCM_EOL);
-       ;}
-    break;
-
-  case 138:
-#line 1237 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("repeat", (yyloc), (yyvsp[(2) - (6)].scm), (yyvsp[(3) - (6)].scm), (yyvsp[(4) - (6)].scm), (yyvsp[(6) - (6)].scm));
-       ;}
-    break;
-
-  case 139:
-#line 1243 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("sequential-music", (yyloc), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 140:
-#line 1246 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("sequential-music", (yyloc), (yyvsp[(1) - (1)].scm));
-       ;}
-    break;
-
-  case 141:
-#line 1252 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("simultaneous-music", (yyloc), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 142:
-#line 1255 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("simultaneous-music", (yyloc), scm_reverse_x ((yyvsp[(2) - (3)].scm), SCM_EOL));
-       ;}
-    break;
-
-  case 146:
-#line 1267 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { parser->lexer_->push_initial_state (); ;}
-    break;
-
-  case 147:
-#line 1268 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                parser->lexer_->pop_state ();
-                (yyval.scm) = (yyvsp[(4) - (5)].scm);
-        ;}
-    break;
-
-  case 148:
-#line 1273 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                (yyval.scm) = (yyvsp[(2) - (2)].scm);
-        ;}
-    break;
-
-  case 149:
-#line 1277 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                (yyval.scm) = (yyvsp[(1) - (1)].scm);
-        ;}
-    break;
-
-  case 150:
-#line 1281 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (unsmob_context_mod ((yyvsp[(2) - (2)].scm)))
-                       (yyval.scm) = (yyvsp[(2) - (2)].scm);
-               else {
-                       parser->parser_error ((yylsp[(2) - (2)]), _ ("not a context mod"));
-                       (yyval.scm) = Context_mod ().smobbed_copy ();
-               }
-       ;}
-    break;
-
-  case 151:
-#line 1292 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-            (yyval.scm) = SCM_EOL;
-        ;}
-    break;
-
-  case 152:
-#line 1296 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-              (yyval.scm) = (yyvsp[(1) - (1)].scm);
-        ;}
-    break;
-
-  case 153:
-#line 1302 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-            (yyval.scm) = Context_mod ().smobbed_copy ();
-        ;}
-    break;
-
-  case 154:
-#line 1305 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                 unsmob_context_mod ((yyvsp[(1) - (2)].scm))->add_context_mod ((yyvsp[(2) - (2)].scm));
-        ;}
-    break;
-
-  case 155:
-#line 1308 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                 Context_mod *md = unsmob_context_mod ((yyvsp[(2) - (2)].scm));
-                 if (md)
-                     unsmob_context_mod ((yyvsp[(1) - (2)].scm))->add_context_mods (md->get_mods ());
-        ;}
-    break;
-
-  case 156:
-#line 1313 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               unsmob_context_mod ((yyvsp[(1) - (2)].scm))->add_context_mods
-                       (unsmob_context_mod ((yyvsp[(2) - (2)].scm))->get_mods ());
-        ;}
-    break;
-
-  case 160:
-#line 1328 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = FINISH_MAKE_SYNTAX ((yyvsp[(1) - (2)].scm), (yyloc), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 165:
-#line 1341 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;}
-    break;
-
-  case 166:
-#line 1342 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;}
-    break;
-
-  case 168:
-#line 1352 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 169:
-#line 1356 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 170:
-#line 1360 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 171:
-#line 1367 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm));
-       ;}
-    break;
-
-  case 172:
-#line 1370 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm));
-       ;}
-    break;
-
-  case 173:
-#line 1374 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(4) - (4)]), (yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm), (yyvsp[(2) - (4)].scm));
-       ;}
-    break;
-
-  case 174:
-#line 1378 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(4) - (4)]), (yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm), (yyvsp[(2) - (4)].scm));
-       ;}
-    break;
-
-  case 175:
-#line 1382 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM n = scm_difference ((yyvsp[(5) - (5)].scm), SCM_UNDEFINED);
-               if (scm_is_true (scm_call_1 ((yyvsp[(2) - (5)].scm), n)))
-                       (yyval.scm) = scm_cons (n, (yyvsp[(3) - (5)].scm));
-               else {
-                       Music *t = MY_MAKE_MUSIC ("FingeringEvent", (yylsp[(5) - (5)]));
-                       t->set_property ("digit", (yyvsp[(5) - (5)].scm));
-                       (yyval.scm) = t->unprotect ();
-                       if (scm_is_true (scm_call_1 ((yyvsp[(2) - (5)].scm), (yyval.scm))))
-                               (yyval.scm) = scm_cons ((yyval.scm), (yyvsp[(3) - (5)].scm));
-                       else
-                               (yyval.scm) = check_scheme_arg (parser, (yylsp[(4) - (5)]), n, (yyvsp[(3) - (5)].scm), (yyvsp[(2) - (5)].scm));
-               }
-               
-       ;}
-    break;
-
-  case 176:
-#line 1398 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(4) - (5)]),
-                                      scm_difference ((yyvsp[(5) - (5)].scm), SCM_UNDEFINED),
-                                      (yyvsp[(3) - (5)].scm), (yyvsp[(2) - (5)].scm));
-       ;}
-    break;
-
-  case 177:
-#line 1404 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(4) - (5)]),
-                                      scm_difference ((yyvsp[(5) - (5)].scm), SCM_UNDEFINED),
-                                      (yyvsp[(3) - (5)].scm), (yyvsp[(2) - (5)].scm));
-       ;}
-    break;
-
-  case 179:
-#line 1414 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(4) - (4)]), (yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm), (yyvsp[(2) - (4)].scm));
-       ;}
-    break;
-
-  case 180:
-#line 1418 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(4) - (4)]), (yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm), (yyvsp[(2) - (4)].scm));
-       ;}
-    break;
-
-  case 182:
-#line 1426 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(4) - (4)]), (yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm), (yyvsp[(2) - (4)].scm));
-       ;}
-    break;
-
-  case 183:
-#line 1430 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(4) - (4)]), (yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm), (yyvsp[(2) - (4)].scm));
-       ;}
-    break;
-
-  case 188:
-#line 1447 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (scm_is_true (scm_call_1 ((yyvsp[(2) - (4)].scm), (yyvsp[(4) - (4)].scm))))
-               {
-                       (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm));
-               } else {
-                       (yyval.scm) = scm_cons (loc_on_music ((yylsp[(3) - (4)]), (yyvsp[(1) - (4)].scm)), (yyvsp[(3) - (4)].scm));
-                       MYBACKUP (SCM_IDENTIFIER, (yyvsp[(4) - (4)].scm), (yylsp[(4) - (4)]));
-               }
-       ;}
-    break;
-
-  case 189:
-#line 1457 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (scm_is_true (scm_call_1 ((yyvsp[(2) - (4)].scm), (yyvsp[(4) - (4)].scm))))
-               {
-                       (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm));
-               } else {
-                       (yyval.scm) = scm_cons (loc_on_music ((yylsp[(3) - (4)]), (yyvsp[(1) - (4)].scm)), (yyvsp[(3) - (4)].scm));
-                       MYBACKUP (EVENT_IDENTIFIER, (yyvsp[(4) - (4)].scm), (yylsp[(4) - (4)]));
-               }
-       ;}
-    break;
-
-  case 190:
-#line 1467 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               // There is no point interpreting a lyrics string as
-               // an event, since we don't allow music possibly
-               // followed by durations or postevent into closed
-               // music, and we only accept closed music in optional
-               // arguments at the moment.  If this changes, more
-               // complex schemes might become interesting here as
-               // well: see how we do this at the mandatory argument
-               // point.
-               if (scm_is_true (scm_call_1 ((yyvsp[(2) - (4)].scm), (yyvsp[(4) - (4)].scm))))
-                       (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm));
-               else {
-                       (yyval.scm) = scm_cons (loc_on_music ((yylsp[(3) - (4)]), (yyvsp[(1) - (4)].scm)), (yyvsp[(3) - (4)].scm));
-                       MYBACKUP (LYRICS_STRING, (yyvsp[(4) - (4)].scm), (yylsp[(4) - (4)]));
-               }
-       ;}
-    break;
-
-  case 191:
-#line 1484 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (scm_is_true (scm_call_1 ((yyvsp[(2) - (4)].scm), (yyvsp[(4) - (4)].scm))))
-               {
-                       (yyval.scm) = (yyvsp[(3) - (4)].scm);
-                       MYREPARSE ((yylsp[(4) - (4)]), (yyvsp[(2) - (4)].scm), UNSIGNED, (yyvsp[(4) - (4)].scm));
-               } else {
-                       (yyval.scm) = scm_cons (loc_on_music ((yylsp[(3) - (4)]), (yyvsp[(1) - (4)].scm)), (yyvsp[(3) - (4)].scm));
-                       MYBACKUP (UNSIGNED, (yyvsp[(4) - (4)].scm), (yylsp[(4) - (4)]));
-               }
-       ;}
-    break;
-
-  case 192:
-#line 1495 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (scm_is_true (scm_call_1 ((yyvsp[(2) - (4)].scm), (yyvsp[(4) - (4)].scm))))
-               {
-                       (yyval.scm) = (yyvsp[(3) - (4)].scm);
-                       MYREPARSE ((yylsp[(4) - (4)]), (yyvsp[(2) - (4)].scm), REAL, (yyvsp[(4) - (4)].scm));
-               } else {
-                       (yyval.scm) = scm_cons (loc_on_music ((yylsp[(3) - (4)]), (yyvsp[(1) - (4)].scm)), (yyvsp[(3) - (4)].scm));
-                       MYBACKUP (REAL, (yyvsp[(4) - (4)].scm), (yylsp[(4) - (4)]));
-               }
-       ;}
-    break;
-
-  case 193:
-#line 1506 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (scm_is_true (scm_call_1 ((yyvsp[(2) - (4)].scm), (yyvsp[(4) - (4)].scm))))
-               {
-                       (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm));
-               } else {
-                       (yyval.scm) = scm_cons (loc_on_music ((yylsp[(3) - (4)]), (yyvsp[(1) - (4)].scm)), (yyvsp[(3) - (4)].scm));
-                       MYBACKUP (NUMBER_IDENTIFIER, (yyvsp[(4) - (4)].scm), (yylsp[(4) - (4)]));
-               }
-       ;}
-    break;
-
-  case 194:
-#line 1516 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (scm_is_true (scm_call_1 ((yyvsp[(2) - (4)].scm), (yyvsp[(4) - (4)].scm))))
-               {
-                       (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm));
-               } else {
-                       (yyval.scm) = scm_cons (loc_on_music ((yylsp[(3) - (4)]), (yyvsp[(1) - (4)].scm)), (yyvsp[(3) - (4)].scm));
-                       MYBACKUP (FRACTION, (yyvsp[(4) - (4)].scm), (yylsp[(4) - (4)]));
-               }
-       ;}
-    break;
-
-  case 195:
-#line 1526 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM n = scm_difference ((yyvsp[(5) - (5)].scm), SCM_UNDEFINED);
-               if (scm_is_true (scm_call_1 ((yyvsp[(2) - (5)].scm), n))) {
-                       (yyval.scm) = (yyvsp[(3) - (5)].scm);
-                       MYREPARSE ((yylsp[(5) - (5)]), (yyvsp[(2) - (5)].scm), REAL, n);
-               } else {
-                       Music *t = MY_MAKE_MUSIC ("FingeringEvent", (yylsp[(5) - (5)]));
-                       t->set_property ("digit", (yyvsp[(5) - (5)].scm));
-                       (yyval.scm) = t->unprotect ();
-                       if (scm_is_true (scm_call_1 ((yyvsp[(2) - (5)].scm), (yyval.scm))))
-                               (yyval.scm) = scm_cons ((yyval.scm), (yyvsp[(3) - (5)].scm));
-                       else {
-                               (yyval.scm) = scm_cons (loc_on_music ((yylsp[(3) - (5)]), (yyvsp[(1) - (5)].scm)), (yyvsp[(3) - (5)].scm));
-                               MYBACKUP (UNSIGNED, (yyvsp[(5) - (5)].scm), (yylsp[(5) - (5)]));
-                               parser->lexer_->push_extra_token ('-');
-                       }
-               }
-               
-       ;}
-    break;
-
-  case 196:
-#line 1546 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM n = scm_difference ((yyvsp[(5) - (5)].scm), SCM_UNDEFINED);
-               if (scm_is_true (scm_call_1 ((yyvsp[(2) - (5)].scm), n))) {
-                       MYREPARSE ((yylsp[(5) - (5)]), (yyvsp[(2) - (5)].scm), REAL, n);
-                       (yyval.scm) = (yyvsp[(3) - (5)].scm);
-               } else {
-                       MYBACKUP (REAL, n, (yylsp[(5) - (5)]));
-               }
-       ;}
-    break;
-
-  case 197:
-#line 1556 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM n = scm_difference ((yyvsp[(5) - (5)].scm), SCM_UNDEFINED);
-               if (scm_is_true (scm_call_1 ((yyvsp[(2) - (5)].scm), n))) {
-                       (yyval.scm) = scm_cons (n, (yyvsp[(3) - (5)].scm));
-               } else {
-                       MYBACKUP (NUMBER_IDENTIFIER, n, (yylsp[(5) - (5)]));
-               }
-       ;}
-    break;
-
-  case 198:
-#line 1565 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm));
-       ;}
-    break;
-
-  case 199:
-#line 1569 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(3) - (4)].scm));
-       ;}
-    break;
-
-  case 200:
-#line 1573 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (4)].scm), (yyvsp[(3) - (4)].scm));
-               MYBACKUP(0, SCM_UNDEFINED, (yylsp[(3) - (4)]));
-       ;}
-    break;
-
-  case 201:
-#line 1578 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(1) - (3)].scm), (yyvsp[(2) - (3)].scm));
-       ;}
-    break;
-
-  case 202:
-#line 1583 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(1) - (3)].scm), (yyvsp[(2) - (3)].scm));
-       ;}
-    break;
-
-  case 206:
-#line 1597 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(1) - (3)].scm));
-       ;}
-    break;
-
-  case 207:
-#line 1602 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(1) - (3)].scm));
-       ;}
-    break;
-
-  case 208:
-#line 1607 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(1) - (3)].scm));
-       ;}
-    break;
-
-  case 209:
-#line 1612 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(1) - (3)].scm));
-       ;}
-    break;
-
-  case 212:
-#line 1622 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               // We check how the predicate thinks about a lyrics
-               // event or about a markup.  If it accepts neither, we
-               // backup the original token.  Otherwise we commit to
-               // taking the token.  Depending on what the predicate
-               // is willing to accept, we interpret as a string, as
-               // a lyric event, or ambiguously (meaning that if
-               // something looking like a duration or post event
-               // follows, we take the event, otherwise the string).
-               SCM lyric_event = MAKE_SYNTAX ("lyric-event", (yylsp[(3) - (3)]), (yyvsp[(3) - (3)].scm),
-                                              parser->default_duration_.smobbed_copy ());
-               if (scm_is_true (scm_call_1 ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm))))
-                       if (scm_is_true (scm_call_1 ((yyvsp[(1) - (3)].scm), lyric_event)))
-                       {
-                               (yyval.scm) = (yyvsp[(2) - (3)].scm);
-                               MYREPARSE ((yylsp[(3) - (3)]), (yyvsp[(1) - (3)].scm), LYRICS_STRING, (yyvsp[(3) - (3)].scm));
-                       } else {
-                               (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm));
-                       }
-               else if (scm_is_true (scm_call_1 ((yyvsp[(1) - (3)].scm), lyric_event)))
-               {
-                       (yyval.scm) = (yyvsp[(2) - (3)].scm);
-                       MYREPARSE ((yylsp[(3) - (3)]), (yyvsp[(1) - (3)].scm), LYRIC_ELEMENT, (yyvsp[(3) - (3)].scm));
-               } else {
-                       // This is going to flag a syntax error, we
-                       // know the predicate to be false.
-                       check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                         (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(1) - (3)].scm));
-               }
-       ;}
-    break;
-
-  case 213:
-#line 1653 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               // This should never be false
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(1) - (3)].scm), (yyvsp[(2) - (3)].scm));
-       ;}
-    break;
-
-  case 214:
-#line 1662 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM n = scm_difference ((yyvsp[(4) - (4)].scm), SCM_UNDEFINED);
-               if (scm_is_true (scm_call_1 ((yyvsp[(1) - (4)].scm), n))) {
-                       (yyval.scm) = (yyvsp[(2) - (4)].scm);
-                       MYREPARSE ((yylsp[(4) - (4)]), (yyvsp[(1) - (4)].scm), REAL, n);
-               } else {
-                       Music *t = MY_MAKE_MUSIC ("FingeringEvent", (yylsp[(4) - (4)]));
-                       t->set_property ("digit", (yyvsp[(4) - (4)].scm));
-                       (yyval.scm) = t->unprotect ();
-                       if (scm_is_true (scm_call_1 ((yyvsp[(1) - (4)].scm), (yyval.scm))))
-                               (yyval.scm) = scm_cons ((yyval.scm), (yyvsp[(2) - (4)].scm));
-                       else
-                               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (4)]), n, (yyvsp[(2) - (4)].scm), (yyvsp[(1) - (4)].scm));
-               }
-               
-       ;}
-    break;
-
-  case 215:
-#line 1679 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(2) - (4)].scm);
-               SCM n = scm_difference ((yyvsp[(4) - (4)].scm), SCM_UNDEFINED);
-               MYREPARSE ((yylsp[(4) - (4)]), (yyvsp[(1) - (4)].scm), REAL, n);
-       ;}
-    break;
-
-  case 216:
-#line 1685 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM n = scm_difference ((yyvsp[(4) - (4)].scm), SCM_UNDEFINED);
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(4) - (4)]), n, (yyvsp[(2) - (4)].scm), (yyvsp[(1) - (4)].scm));
-       ;}
-    break;
-
-  case 217:
-#line 1690 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]), (yyvsp[(3) - (3)].scm), (yyvsp[(1) - (3)].scm), (yyvsp[(2) - (3)].scm));
-       ;}
-    break;
-
-  case 221:
-#line 1703 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(1) - (3)].scm));
-       ;}
-    break;
-
-  case 222:
-#line 1708 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(1) - (3)].scm));
-       ;}
-    break;
-
-  case 223:
-#line 1713 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM n = scm_difference ((yyvsp[(4) - (4)].scm), SCM_UNDEFINED);
-               if (scm_is_true (scm_call_1 ((yyvsp[(1) - (4)].scm), n))) {
-                       (yyval.scm) = scm_cons (n, (yyvsp[(2) - (4)].scm));
-               } else {
-                       Music *t = MY_MAKE_MUSIC ("FingeringEvent", (yylsp[(4) - (4)]));
-                       t->set_property ("digit", (yyvsp[(4) - (4)].scm));
-                       (yyval.scm) = t->unprotect ();
-                       if (scm_is_true (scm_call_1 ((yyvsp[(1) - (4)].scm), (yyval.scm))))
-                               (yyval.scm) = scm_cons ((yyval.scm), (yyvsp[(2) - (4)].scm));
-                       else
-                               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (4)]), n, (yyvsp[(2) - (4)].scm), (yyvsp[(1) - (4)].scm));
-               }
-               
-       ;}
-    break;
-
-  case 224:
-#line 1729 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (4)]),
-                                      scm_difference ((yyvsp[(4) - (4)].scm), SCM_UNDEFINED),
-                                      (yyvsp[(2) - (4)].scm), (yyvsp[(1) - (4)].scm));
-       ;}
-    break;
-
-  case 225:
-#line 1735 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (4)]),
-                                      scm_difference ((yyvsp[(4) - (4)].scm), SCM_UNDEFINED),
-                                      (yyvsp[(2) - (4)].scm), (yyvsp[(1) - (4)].scm));
-       ;}
-    break;
-
-  case 226:
-#line 1741 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(1) - (3)].scm));
-       ;}
-    break;
-
-  case 227:
-#line 1746 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(1) - (3)].scm));
-       ;}
-    break;
-
-  case 228:
-#line 1751 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]),
-                                      (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(1) - (3)].scm));
-       ;}
-    break;
-
-  case 231:
-#line 1761 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 232:
-#line 1765 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 235:
-#line 1774 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 236:
-#line 1778 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 242:
-#line 1795 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("music-function", (yyloc),
-                                        (yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 243:
-#line 1802 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = SCM_EOL;
-       ;}
-    break;
-
-  case 244:
-#line 1805 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm));
-       ;}
-    break;
-
-  case 245:
-#line 1808 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm));
-       ;}
-    break;
-
-  case 246:
-#line 1811 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (4)].scm), (yyvsp[(3) - (4)].scm));
-       ;}
-    break;
-
-  case 247:
-#line 1814 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (4)].scm), (yyvsp[(3) - (4)].scm));
-       ;}
-    break;
-
-  case 248:
-#line 1817 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (4)].scm), (yyvsp[(3) - (4)].scm));
-       ;}
-    break;
-
-  case 249:
-#line 1823 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("music-function", (yyloc),
-                                        (yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 250:
-#line 1831 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = SCM_EOL; ;}
-    break;
-
-  case 251:
-#line 1832 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(2) - (2)].scm);
-       ;}
-    break;
-
-  case 253:
-#line 1839 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;}
-    break;
-
-  case 254:
-#line 1840 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;}
-    break;
-
-  case 255:
-#line 1842 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = FINISH_MAKE_SYNTAX ((yyvsp[(1) - (2)].scm), (yyloc), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 256:
-#line 1848 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                Context_mod *ctxmod = unsmob_context_mod ((yyvsp[(4) - (4)].scm));
-                SCM mods = SCM_EOL;
-                if (ctxmod)
-                        mods = ctxmod->get_mods ();
-               (yyval.scm) = START_MAKE_SYNTAX ("context-specification", (yyvsp[(2) - (4)].scm), (yyvsp[(3) - (4)].scm), mods, SCM_BOOL_F);
-       ;}
-    break;
-
-  case 257:
-#line 1855 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                Context_mod *ctxmod = unsmob_context_mod ((yyvsp[(4) - (4)].scm));
-                SCM mods = SCM_EOL;
-                if (ctxmod)
-                        mods = ctxmod->get_mods ();
-               (yyval.scm) = START_MAKE_SYNTAX ("context-specification", (yyvsp[(2) - (4)].scm), (yyvsp[(3) - (4)].scm), mods, SCM_BOOL_T);
-       ;}
-    break;
-
-  case 258:
-#line 1865 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if ((yyvsp[(1) - (2)].scm) == ly_symbol2scm ("chords"))
-               {
-                 (yyval.scm) = MAKE_SYNTAX ("unrelativable-music", (yyloc), (yyvsp[(2) - (2)].scm));
-               }
-               else
-               {
-                 (yyval.scm) = (yyvsp[(2) - (2)].scm);
-               }
-               parser->lexer_->pop_state ();
-       ;}
-    break;
-
-  case 259:
-#line 1876 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                Context_mod *ctxmod = unsmob_context_mod ((yyvsp[(2) - (3)].scm));
-                SCM mods = SCM_EOL;
-                if (ctxmod)
-                        mods = ctxmod->get_mods ();
-               (yyval.scm) = MAKE_SYNTAX ("context-specification", (yyloc), (yyvsp[(1) - (3)].scm), SCM_EOL, mods, SCM_BOOL_T, (yyvsp[(3) - (3)].scm));
-               if ((yyvsp[(1) - (3)].scm) == ly_symbol2scm ("ChordNames"))
-               {
-                 (yyval.scm) = MAKE_SYNTAX ("unrelativable-music", (yyloc), (yyval.scm));
-               }
-               parser->lexer_->pop_state ();
-       ;}
-    break;
-
-  case 260:
-#line 1891 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
-               parser->lexer_->push_note_state (nn);
-
-               (yyval.scm) = ly_symbol2scm ("notes");
-       ;}
-    break;
-
-  case 261:
-#line 1898 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM nn = parser->lexer_->lookup_identifier ("drumPitchNames");
-               parser->lexer_->push_note_state (nn);
-
-               (yyval.scm) = ly_symbol2scm ("drums");
-       ;}
-    break;
-
-  case 262:
-#line 1904 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->push_figuredbass_state ();
-
-               (yyval.scm) = ly_symbol2scm ("figures");
-       ;}
-    break;
-
-  case 263:
-#line 1909 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM nn = parser->lexer_->lookup_identifier ("chordmodifiers");
-               parser->lexer_->chordmodifier_tab_ = alist_to_hashq (nn);
-               nn = parser->lexer_->lookup_identifier ("pitchnames");
-               parser->lexer_->push_chord_state (nn);
-               (yyval.scm) = ly_symbol2scm ("chords");
-
-       ;}
-    break;
-
-  case 264:
-#line 1918 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { parser->lexer_->push_lyric_state ();
-               (yyval.scm) = ly_symbol2scm ("lyrics");
-       ;}
-    break;
-
-  case 265:
-#line 1924 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM nn = parser->lexer_->lookup_identifier ("drumPitchNames");
-               parser->lexer_->push_note_state (nn);
-
-               (yyval.scm) = ly_symbol2scm ("DrumStaff");
-       ;}
-    break;
-
-  case 266:
-#line 1930 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->push_figuredbass_state ();
-
-               (yyval.scm) = ly_symbol2scm ("FiguredBass");
-       ;}
-    break;
-
-  case 267:
-#line 1935 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM nn = parser->lexer_->lookup_identifier ("chordmodifiers");
-               parser->lexer_->chordmodifier_tab_ = alist_to_hashq (nn);
-               nn = parser->lexer_->lookup_identifier ("pitchnames");
-               parser->lexer_->push_chord_state (nn);
-               (yyval.scm) = ly_symbol2scm ("ChordNames");
-       ;}
-    break;
-
-  case 268:
-#line 1943 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { parser->lexer_->push_lyric_state ();
-               (yyval.scm) = ly_symbol2scm ("Lyrics");
-       ;}
-    break;
-
-  case 269:
-#line 1949 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { parser->lexer_->push_lyric_state (); ;}
-    break;
-
-  case 270:
-#line 1951 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-       /* Can also use music at the expensive of two S/Rs similar to
-           \repeat \alternative */
-               parser->lexer_->pop_state ();
-
-               (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), SCM_EOL);
-       ;}
-    break;
-
-  case 271:
-#line 1958 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->push_lyric_state ();
-       ;}
-    break;
-
-  case 272:
-#line 1960 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->pop_state ();
-               (yyval.scm) = scm_cons ((yyvsp[(4) - (4)].scm), (yyvsp[(1) - (4)].scm));
-       ;}
-    break;
-
-  case 273:
-#line 1967 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("add-lyrics", (yyloc), (yyvsp[(1) - (2)].scm), scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL));
-       ;}
-    break;
-
-  case 274:
-#line 1970 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->push_lyric_state ();
-       ;}
-    break;
-
-  case 275:
-#line 1972 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               parser->lexer_->pop_state ();
-               (yyval.scm) = MAKE_SYNTAX ("lyric-combine", (yyloc), (yyvsp[(2) - (4)].scm), (yyvsp[(4) - (4)].scm));
-       ;}
-    break;
-
-  case 276:
-#line 1979 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("context-change", (yyloc), scm_string_to_symbol ((yyvsp[(2) - (4)].scm)), (yyvsp[(4) - (4)].scm));
-       ;}
-    break;
-
-  case 277:
-#line 1986 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (1)].scm), SCM_EOL);
-       ;}
-    break;
-
-  case 278:
-#line 1989 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm));
-       ;}
-    break;
-
-  case 279:
-#line 1995 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_reverse_x ((yyvsp[(1) - (1)].scm), SCM_EOL);
-       ;}
-    break;
-
-  case 280:
-#line 2001 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_3 (ly_symbol2scm ("assign"),
-                       scm_string_to_symbol ((yyvsp[(1) - (3)].scm)), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 281:
-#line 2005 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_2 (ly_symbol2scm ("unset"),
-                       scm_string_to_symbol ((yyvsp[(2) - (2)].scm)));
-       ;}
-    break;
-
-  case 282:
-#line 2009 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_append (scm_list_2 (scm_list_3 (ly_symbol2scm ("push"),
-                                                       scm_string_to_symbol ((yyvsp[(2) - (5)].scm)), (yyvsp[(5) - (5)].scm)),
-                                            (yyvsp[(3) - (5)].scm)));
-       ;}
-    break;
-
-  case 283:
-#line 2014 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_3 (ly_symbol2scm ("pop"),
-                       scm_string_to_symbol ((yyvsp[(2) - (3)].scm)), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 284:
-#line 2021 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = ly_symbol2scm ("consists"); ;}
-    break;
-
-  case 285:
-#line 2022 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = ly_symbol2scm ("remove"); ;}
-    break;
-
-  case 286:
-#line 2024 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = ly_symbol2scm ("accepts"); ;}
-    break;
-
-  case 287:
-#line 2025 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = ly_symbol2scm ("default-child"); ;}
-    break;
-
-  case 288:
-#line 2026 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = ly_symbol2scm ("denies"); ;}
-    break;
-
-  case 289:
-#line 2028 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = ly_symbol2scm ("alias"); ;}
-    break;
-
-  case 290:
-#line 2029 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = ly_symbol2scm ("translator-type"); ;}
-    break;
-
-  case 291:
-#line 2030 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = ly_symbol2scm ("description"); ;}
-    break;
-
-  case 292:
-#line 2031 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = ly_symbol2scm ("context-name"); ;}
-    break;
-
-  case 293:
-#line 2035 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;}
-    break;
-
-  case 294:
-#line 2036 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_2 ((yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 295:
-#line 2040 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (!scm_is_string ((yyvsp[(2) - (2)].scm))
-                   && ly_symbol2scm ("consists") != (yyvsp[(1) - (2)].scm)
-                   && ly_symbol2scm ("remove") != (yyvsp[(1) - (2)].scm))
-               {
-                       (yyval.scm) = SCM_EOL;
-                       parser->parser_error ((yylsp[(1) - (2)]), _ ("only \\consists and \\remove take non-string argument."));
-               }
-               else
-               {
-                       (yyval.scm) = scm_list_2 ((yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm));
-               }
-       ;}
-    break;
-
-  case 296:
-#line 2056 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (!is_regular_identifier ((yyvsp[(1) - (1)].scm)))
-               {
-                       (yyloc).error (_("Grob name should be alphanumeric"));
-               }
-
-               (yyval.scm) = scm_list_2 (ly_symbol2scm ("Bottom"),
-                       scm_string_to_symbol ((yyvsp[(1) - (1)].scm)));
-       ;}
-    break;
-
-  case 297:
-#line 2065 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_2 (scm_string_to_symbol ((yyvsp[(1) - (3)].scm)),
-                       scm_string_to_symbol ((yyvsp[(3) - (3)].scm)));
-       ;}
-    break;
-
-  case 298:
-#line 2072 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_append (scm_list_2 (scm_list_n (scm_car ((yyvsp[(2) - (5)].scm)),
-                               ly_symbol2scm ("OverrideProperty"),
-                               scm_cadr ((yyvsp[(2) - (5)].scm)),
-                               (yyvsp[(5) - (5)].scm), SCM_UNDEFINED),
-                               (yyvsp[(3) - (5)].scm)));
-       ;}
-    break;
-
-  case 299:
-#line 2079 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_4 (scm_car ((yyvsp[(2) - (3)].scm)),
-                       ly_symbol2scm ("RevertProperty"),
-                       scm_cadr ((yyvsp[(2) - (3)].scm)),
-                       (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 300:
-#line 2085 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_4 (scm_car ((yyvsp[(2) - (4)].scm)),
-                       ly_symbol2scm ("PropertySet"),
-                       scm_cadr ((yyvsp[(2) - (4)].scm)),
-                       (yyvsp[(4) - (4)].scm));
-       ;}
-    break;
-
-  case 301:
-#line 2091 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_3 (scm_car ((yyvsp[(2) - (2)].scm)),
-                       ly_symbol2scm ("PropertyUnset"),
-                       scm_cadr ((yyvsp[(2) - (2)].scm)));
-       ;}
-    break;
-
-  case 302:
-#line 2099 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant ("property-operation"), scm_cons2 (parser->self_scm (), make_input ((yyloc)), (yyvsp[(1) - (1)].scm)));
-       ;}
-    break;
-
-  case 303:
-#line 2105 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 304:
-#line 2108 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 305:
-#line 2111 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_string_append (scm_list_2 ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm)));
-       ;}
-    break;
-
-  case 306:
-#line 2116 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 307:
-#line 2119 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 308:
-#line 2122 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 317:
-#line 2143 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               // Let the rhythmic music iterator sort this mess out.
-               if (scm_is_pair ((yyvsp[(2) - (2)].scm))) {
-                       if (unsmob_pitch ((yyvsp[(1) - (2)].scm))) {
-                               Music *n = MY_MAKE_MUSIC ("NoteEvent", (yylsp[(1) - (2)]));
-                               n->set_property ("pitch", (yyvsp[(1) - (2)].scm));
-                               n->set_property ("duration",
-                                                parser->default_duration_.smobbed_copy ());
-                               (yyval.scm) = n->unprotect ();
-                       }
-                       unsmob_music ((yyval.scm))->set_property ("articulations",
-                                                        scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL));
-               }
-       ;}
-    break;
-
-  case 318:
-#line 2157 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM elts = ly_append2 ((yyvsp[(1) - (2)].scm), scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL));
-
-               Input i;
-               /* why is this giving wrong start location? -ns
-                * i = @$; */
-               i.set_location ((yylsp[(1) - (2)]), (yylsp[(2) - (2)]));
-               (yyval.scm) = MAKE_SYNTAX ("event-chord", i, elts);
-       ;}
-    break;
-
-  case 319:
-#line 2166 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Input i;
-               i.set_location ((yylsp[(1) - (3)]), (yylsp[(3) - (3)]));
-               (yyval.scm) = MAKE_SYNTAX ("repetition-chord", i,
-                                 (yyvsp[(2) - (3)].scm), scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL));
-       ;}
-    break;
-
-  case 320:
-#line 2172 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Input i;
-               i.set_location ((yylsp[(1) - (3)]), (yylsp[(3) - (3)]));
-               (yyval.scm) = MAKE_SYNTAX ("multi-measure-rest", i, (yyvsp[(2) - (3)].scm),
-                                 scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL));
-       ;}
-    break;
-
-  case 323:
-#line 2185 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *m = unsmob_music ((yyvsp[(1) - (3)].scm));
-               SCM dur = unsmob_duration ((yyvsp[(2) - (3)].scm))->smobbed_copy ();
-               SCM es = m->get_property ("elements");
-               SCM postevs = scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL);
-
-               for (SCM s = es; scm_is_pair (s); s = scm_cdr (s))
-                 unsmob_music (scm_car (s))->set_property ("duration", dur);
-               es = ly_append2 (es, postevs);
-
-               m-> set_property ("elements", es);
-               m->set_spot ((yyloc));
-               (yyval.scm) = m->self_scm ();
-       ;}
-    break;
-
-  case 324:
-#line 2203 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("event-chord", (yyloc), scm_reverse_x ((yyvsp[(2) - (3)].scm), SCM_EOL));
-       ;}
-    break;
-
-  case 325:
-#line 2209 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = SCM_EOL; ;}
-    break;
-
-  case 326:
-#line 2210 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (!SCM_UNBNDP ((yyvsp[(2) - (2)].scm)))
-                       (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm));
-       ;}
-    break;
-
-  case 327:
-#line 2218 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               int q = (yyvsp[(3) - (5)].i);
-               int ex = (yyvsp[(2) - (5)].i);
-               SCM check = (yyvsp[(4) - (5)].scm);
-               SCM post = (yyvsp[(5) - (5)].scm);
-
-               Music *n = MY_MAKE_MUSIC ("NoteEvent", (yyloc));
-               n->set_property ("pitch", (yyvsp[(1) - (5)].scm));
-               if (q % 2)
-                       n->set_property ("cautionary", SCM_BOOL_T);
-               if (ex % 2 || q % 2)
-                       n->set_property ("force-accidental", SCM_BOOL_T);
-
-               if (scm_is_pair (post)) {
-                       SCM arts = scm_reverse_x (post, SCM_EOL);
-                       n->set_property ("articulations", arts);
-               }
-               if (scm_is_number (check))
-               {
-                       int q = scm_to_int (check);
-                       n->set_property ("absolute-octave", scm_from_int (q-1));
-               }
-
-               (yyval.scm) = n->unprotect ();
-       ;}
-    break;
-
-  case 328:
-#line 2243 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *n = MY_MAKE_MUSIC ("NoteEvent", (yyloc));
-               n->set_property ("drum-type", (yyvsp[(1) - (2)].scm));
-
-               if (scm_is_pair ((yyvsp[(2) - (2)].scm))) {
-                       SCM arts = scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL);
-                       n->set_property ("articulations", arts);
-               }
-               (yyval.scm) = n->unprotect ();
-       ;}
-    break;
-
-  case 329:
-#line 2254 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *m = unsmob_music ((yyvsp[(1) - (1)].scm));
-
-               while (m && m->is_mus_type ("music-wrapper-music")) {
-                       (yyval.scm) = m->get_property ("element");
-                       m = unsmob_music ((yyval.scm));
-               }
-
-               if (!(m && m->is_mus_type ("rhythmic-event"))) {
-                       parser->parser_error ((yyloc), _ ("not a rhythmic event"));
-                       (yyval.scm) = SCM_UNDEFINED;
-               }
-       ;}
-    break;
-
-  case 332:
-#line 2280 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("music-function", (yyloc),
-                                        (yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 333:
-#line 2287 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("music-function", (yyloc),
-                                        (yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 334:
-#line 2294 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 335:
-#line 2297 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *m = MY_MAKE_MUSIC ("LigatureEvent", (yyloc));
-               m->set_property ("span-direction", scm_from_int (START));
-               (yyval.scm) = m->unprotect();
-       ;}
-    break;
-
-  case 336:
-#line 2302 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *m = MY_MAKE_MUSIC ("LigatureEvent", (yyloc));
-               m->set_property ("span-direction", scm_from_int (STOP));
-               (yyval.scm) = m->unprotect ();
-       ;}
-    break;
-
-  case 337:
-#line 2307 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("voice-separator", (yyloc));
-       ;}
-    break;
-
-  case 338:
-#line 2310 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM pipe = parser->lexer_->lookup_identifier ("pipeSymbol");
-
-               Music *m = unsmob_music (pipe);
-               if (m)
-               {
-                       m = m->clone ();
-                       m->set_spot ((yyloc));
-                       (yyval.scm) = m->unprotect ();
-               }
-               else
-                       (yyval.scm) = MAKE_SYNTAX ("bar-check", (yyloc));
-
-       ;}
-    break;
-
-  case 339:
-#line 2327 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MY_MAKE_MUSIC ("PesOrFlexaEvent", (yyloc))->unprotect ();
-       ;}
-    break;
-
-  case 340:
-#line 2330 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 341:
-#line 2337 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = SCM_EOL;
-       ;}
-    break;
-
-  case 342:
-#line 2340 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               unsmob_music ((yyvsp[(2) - (2)].scm))->set_spot ((yylsp[(2) - (2)]));
-               (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyval.scm));
-       ;}
-    break;
-
-  case 343:
-#line 2347 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 344:
-#line 2350 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(2) - (2)].scm);
-               if ((yyvsp[(1) - (2)].i))
-               {
-                       unsmob_music ((yyval.scm))->set_property ("direction", scm_from_int ((yyvsp[(1) - (2)].i)));
-               }
-       ;}
-    break;
-
-  case 345:
-#line 2357 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (!parser->lexer_->is_lyric_state ())
-                       parser->parser_error ((yylsp[(1) - (1)]), _ ("have to be in Lyric mode for lyrics"));
-               (yyval.scm) = MY_MAKE_MUSIC ("HyphenEvent", (yyloc))->unprotect ();
-       ;}
-    break;
-
-  case 346:
-#line 2362 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (!parser->lexer_->is_lyric_state ())
-                       parser->parser_error ((yylsp[(1) - (1)]), _ ("have to be in Lyric mode for lyrics"));
-               (yyval.scm) = MY_MAKE_MUSIC ("ExtenderEvent", (yyloc))->unprotect ();
-       ;}
-    break;
-
-  case 347:
-#line 2367 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if ((yyvsp[(1) - (2)].i))
-               {
-                       Music *m = unsmob_music ((yyvsp[(2) - (2)].scm));
-                       m->set_property ("direction", scm_from_int ((yyvsp[(1) - (2)].i)));
-               }
-               (yyval.scm) = (yyvsp[(2) - (2)].scm);
-       ;}
-    break;
-
-  case 348:
-#line 2375 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if ((yyvsp[(1) - (2)].i))
-               {
-                       Music *m = unsmob_music ((yyvsp[(2) - (2)].scm));
-                       m->set_property ("direction", scm_from_int ((yyvsp[(1) - (2)].i)));
-               }
-               (yyval.scm) = (yyvsp[(2) - (2)].scm);
-       ;}
-    break;
-
-  case 349:
-#line 2384 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(2) - (2)].scm);
-               unsmob_music ((yyval.scm))->set_property ("direction", scm_from_int (UP));
-       ;}
-    break;
-
-  case 350:
-#line 2389 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(2) - (2)].scm);
-               unsmob_music ((yyval.scm))->set_property ("direction", scm_from_int (DOWN));
-       ;}
-    break;
-
-  case 352:
-#line 2397 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(2) - (2)].scm);
-       ;}
-    break;
-
-  case 353:
-#line 2403 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *s = MY_MAKE_MUSIC ("StringNumberEvent", (yyloc));
-               s->set_property ("string-number", scm_from_int ((yyvsp[(1) - (1)].i)));
-               (yyval.scm) = s->unprotect ();
-       ;}
-    break;
-
-  case 354:
-#line 2411 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("bracketOpenSymbol");
-       ;}
-    break;
-
-  case 355:
-#line 2414 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("bracketCloseSymbol");
-       ;}
-    break;
-
-  case 356:
-#line 2417 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("tildeSymbol");
-       ;}
-    break;
-
-  case 357:
-#line 2420 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("parenthesisOpenSymbol");
-       ;}
-    break;
-
-  case 358:
-#line 2423 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("parenthesisCloseSymbol");
-       ;}
-    break;
-
-  case 359:
-#line 2426 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("escapedExclamationSymbol");
-       ;}
-    break;
-
-  case 360:
-#line 2429 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("escapedParenthesisOpenSymbol");
-       ;}
-    break;
-
-  case 361:
-#line 2432 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("escapedParenthesisCloseSymbol");
-       ;}
-    break;
-
-  case 362:
-#line 2435 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("escapedBiggerSymbol");
-       ;}
-    break;
-
-  case 363:
-#line 2438 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("escapedSmallerSymbol");
-       ;}
-    break;
-
-  case 364:
-#line 2444 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM predefd = parser->lexer_->lookup_identifier_symbol ((yyvsp[(1) - (1)].scm));
-               Music *m = 0;
-               if (unsmob_music (predefd))
-               {
-                       m = unsmob_music (predefd)->clone ();
-                       m->set_spot ((yyloc));
-               }
-               else
-               {
-                       m = MY_MAKE_MUSIC ("Music", (yyloc));
-               }
-               (yyval.scm) = m->unprotect ();
-       ;}
-    break;
-
-  case 366:
-#line 2459 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 367:
-#line 2462 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *a = MY_MAKE_MUSIC ("TremoloEvent", (yyloc));
-               a->set_property ("tremolo-type", scm_from_int ((yyvsp[(1) - (1)].i)));
-               (yyval.scm) = a->unprotect ();
-        ;}
-    break;
-
-  case 369:
-#line 2471 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 370:
-#line 2474 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM s = parser->lexer_->lookup_identifier ("dash" + ly_scm2string ((yyvsp[(1) - (1)].scm)));
-               Music *a = MY_MAKE_MUSIC ("ArticulationEvent", (yyloc));
-               if (scm_is_string (s))
-                       a->set_property ("articulation-type", s);
-               else parser->parser_error ((yylsp[(1) - (1)]), _ ("expecting string as script definition"));
-               (yyval.scm) = a->unprotect ();
-       ;}
-    break;
-
-  case 371:
-#line 2485 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = SCM_EOL; ;}
-    break;
-
-  case 372:
-#line 2486 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = scm_from_int (0); ;}
-    break;
-
-  case 373:
-#line 2487 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = scm_from_int (-(yyvsp[(2) - (2)].i)); ;}
-    break;
-
-  case 374:
-#line 2488 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = scm_from_int ((yyvsp[(2) - (2)].i)); ;}
-    break;
-
-  case 375:
-#line 2492 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.i) = 1;
-       ;}
-    break;
-
-  case 376:
-#line 2495 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.i) ++;
-       ;}
-    break;
-
-  case 377:
-#line 2501 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.i) = 1;
-       ;}
-    break;
-
-  case 378:
-#line 2504 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.i)++;
-       ;}
-    break;
-
-  case 379:
-#line 2510 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 380:
-#line 2513 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Pitch p = *unsmob_pitch ((yyvsp[(1) - (2)].scm));
-               p = p.transposed (Pitch ((yyvsp[(2) - (2)].i),0,0));
-               (yyval.scm) = p.smobbed_copy ();
-       ;}
-    break;
-
-  case 381:
-#line 2518 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Pitch p =* unsmob_pitch ((yyvsp[(1) - (2)].scm));
-               p = p.transposed (Pitch (-(yyvsp[(2) - (2)].i),0,0));
-               (yyval.scm) = p.smobbed_copy ();
-       ;}
-    break;
-
-  case 382:
-#line 2530 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 383:
-#line 2533 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Pitch p = *unsmob_pitch ((yyvsp[(1) - (2)].scm));
-               p = p.transposed (Pitch ((yyvsp[(2) - (2)].i),0,0));
-               (yyval.scm) = p.smobbed_copy ();
-       ;}
-    break;
-
-  case 384:
-#line 2538 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Pitch p = *unsmob_pitch ((yyvsp[(1) - (2)].scm));
-
-               p = p.transposed (Pitch (-(yyvsp[(2) - (2)].i),0,0));
-               (yyval.scm) = p.smobbed_copy ();
-       ;}
-    break;
-
-  case 385:
-#line 2547 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 389:
-#line 2559 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *t = MY_MAKE_MUSIC ("TextScriptEvent", (yyloc));
-               t->set_property ("text", (yyvsp[(1) - (1)].scm));
-               (yyval.scm) = t->unprotect ();
-       ;}
-    break;
-
-  case 390:
-#line 2564 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *t = MY_MAKE_MUSIC ("TextScriptEvent", (yyloc));
-               t->set_property ("text",
-                       make_simple_markup ((yyvsp[(1) - (1)].scm)));
-               (yyval.scm) = t->unprotect ();
-       ;}
-    break;
-
-  case 391:
-#line 2573 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *t = MY_MAKE_MUSIC ("FingeringEvent", (yyloc));
-               t->set_property ("digit", (yyvsp[(1) - (1)].scm));
-               (yyval.scm) = t->unprotect ();
-       ;}
-    break;
-
-  case 392:
-#line 2581 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_from_locale_string ("Hat");
-       ;}
-    break;
-
-  case 393:
-#line 2584 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_from_locale_string ("Plus");
-       ;}
-    break;
-
-  case 394:
-#line 2587 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_from_locale_string ("Dash");
-       ;}
-    break;
-
-  case 395:
-#line 2590 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_from_locale_string ("Bar");
-       ;}
-    break;
-
-  case 396:
-#line 2593 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_from_locale_string ("Larger");
-       ;}
-    break;
-
-  case 397:
-#line 2596 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_from_locale_string ("Dot");
-       ;}
-    break;
-
-  case 398:
-#line 2599 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_from_locale_string ("Underscore");
-       ;}
-    break;
-
-  case 399:
-#line 2605 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.i) = DOWN; ;}
-    break;
-
-  case 400:
-#line 2606 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.i) = UP; ;}
-    break;
-
-  case 401:
-#line 2607 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.i) = CENTER; ;}
-    break;
-
-  case 402:
-#line 2611 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 403:
-#line 2617 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = SCM_UNDEFINED;
-       ;}
-    break;
-
-  case 404:
-#line 2620 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-               parser->default_duration_ = *unsmob_duration ((yyval.scm));
-       ;}
-    break;
-
-  case 405:
-#line 2629 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (SCM_UNBNDP ((yyval.scm)))
-                       (yyval.scm) = parser->default_duration_.smobbed_copy ();
-       ;}
-    break;
-
-  case 406:
-#line 2636 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               int len = 0;
-               if (!is_duration ((yyvsp[(1) - (2)].i)))
-                       parser->parser_error ((yylsp[(1) - (2)]), _f ("not a duration: %d", (yyvsp[(1) - (2)].i)));
-               else
-                       len = intlog2 ((yyvsp[(1) - (2)].i));
-
-               (yyval.scm) = Duration (len, (yyvsp[(2) - (2)].i)).smobbed_copy ();
-       ;}
-    break;
-
-  case 407:
-#line 2645 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Duration *d = unsmob_duration ((yyvsp[(1) - (2)].scm));
-               Duration k (d->duration_log (), d->dot_count () + (yyvsp[(2) - (2)].i));
-               k = k.compressed (d->factor ());
-               *d = k;
-               (yyval.scm) = (yyvsp[(1) - (2)].scm);
-       ;}
-    break;
-
-  case 408:
-#line 2655 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 409:
-#line 2658 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = unsmob_duration ((yyval.scm))->compressed ( (yyvsp[(3) - (3)].i)) .smobbed_copy ();
-       ;}
-    break;
-
-  case 410:
-#line 2661 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Rational  m (scm_to_int (scm_car ((yyvsp[(3) - (3)].scm))), scm_to_int (scm_cdr ((yyvsp[(3) - (3)].scm))));
-
-               (yyval.scm) = unsmob_duration ((yyval.scm))->compressed (m).smobbed_copy ();
-       ;}
-    break;
-
-  case 411:
-#line 2669 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.i) = 0;
-       ;}
-    break;
-
-  case 412:
-#line 2672 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.i) ++;
-       ;}
-    break;
-
-  case 413:
-#line 2678 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.i) = 0;
-       ;}
-    break;
-
-  case 414:
-#line 2681 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (!is_duration ((yyvsp[(2) - (2)].i)))
-                       parser->parser_error ((yylsp[(2) - (2)]), _f ("not a duration: %d", (yyvsp[(2) - (2)].i)));
-               (yyval.i) = (yyvsp[(2) - (2)].i);
-       ;}
-    break;
-
-  case 415:
-#line 2689 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;}
-    break;
-
-  case 416:
-#line 2690 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;}
-    break;
-
-  case 417:
-#line 2691 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;}
-    break;
-
-  case 418:
-#line 2695 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = ly_rational2scm (FLAT_ALTERATION); ;}
-    break;
-
-  case 419:
-#line 2696 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = ly_rational2scm (SHARP_ALTERATION); ;}
-    break;
-
-  case 420:
-#line 2697 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = scm_from_int (0); ;}
-    break;
-
-  case 421:
-#line 2701 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *bfr = MY_MAKE_MUSIC ("BassFigureEvent", (yyloc));
-               (yyval.scm) = bfr->unprotect ();
-       ;}
-    break;
-
-  case 422:
-#line 2705 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *bfr = MY_MAKE_MUSIC ("BassFigureEvent", (yyloc));
-               (yyval.scm) = bfr->self_scm ();
-
-               if (scm_is_number ((yyvsp[(1) - (1)].scm)))
-                       bfr->set_property ("figure", (yyvsp[(1) - (1)].scm));
-               else if (Text_interface::is_markup ((yyvsp[(1) - (1)].scm)))
-                       bfr->set_property ("text", (yyvsp[(1) - (1)].scm));
-
-               bfr->unprotect ();
-       ;}
-    break;
-
-  case 423:
-#line 2716 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (2)].scm);
-               unsmob_music ((yyvsp[(1) - (2)].scm))->set_property ("bracket-stop", SCM_BOOL_T);
-       ;}
-    break;
-
-  case 424:
-#line 2720 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *m = unsmob_music ((yyvsp[(1) - (2)].scm));
-               if (scm_to_double ((yyvsp[(2) - (2)].scm))) {
-                       SCM salter = m->get_property ("alteration");
-                       SCM alter = scm_is_number (salter) ? salter : scm_from_int (0);
-                       m->set_property ("alteration",
-                                        scm_sum (alter, (yyvsp[(2) - (2)].scm)));
-               } else {
-                       m->set_property ("alteration", scm_from_int (0));
-               }
-       ;}
-    break;
-
-  case 425:
-#line 2731 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *m = unsmob_music ((yyvsp[(1) - (2)].scm));
-               if ((yyvsp[(2) - (2)].scm) == ly_symbol2scm ("plus"))
-                       {
-                       m->set_property ("augmented", SCM_BOOL_T);
-                       }
-               else if ((yyvsp[(2) - (2)].scm) == ly_symbol2scm ("slash"))
-                       {
-                       m->set_property ("diminished", SCM_BOOL_T);
-                       }
-               else if ((yyvsp[(2) - (2)].scm) == ly_symbol2scm ("exclamation"))
-                       {
-                       m->set_property ("no-continuation", SCM_BOOL_T);
-                       }
-               else if ((yyvsp[(2) - (2)].scm) == ly_symbol2scm ("backslash"))
-                       {
-                       m->set_property ("augmented-slash", SCM_BOOL_T);
-                       }
-       ;}
-    break;
-
-  case 426:
-#line 2754 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("plus");
-       ;}
-    break;
-
-  case 427:
-#line 2757 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("exclamation");
-       ;}
-    break;
-
-  case 428:
-#line 2760 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("slash");
-       ;}
-    break;
-
-  case 429:
-#line 2763 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("backslash");
-       ;}
-    break;
-
-  case 430:
-#line 2769 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 431:
-#line 2772 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(2) - (2)].scm);
-               unsmob_music ((yyval.scm))->set_property ("bracket-start", SCM_BOOL_T);
-       ;}
-    break;
-
-  case 432:
-#line 2779 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = SCM_EOL;
-       ;}
-    break;
-
-  case 433:
-#line 2782 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm));
-       ;}
-    break;
-
-  case 434:
-#line 2788 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_reverse_x ((yyvsp[(2) - (3)].scm), SCM_EOL);
-       ;}
-    break;
-
-  case 435:
-#line 2795 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.i) = 0; ;}
-    break;
-
-  case 436:
-#line 2796 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.i) = 1; ;}
-    break;
-
-  case 437:
-#line 2800 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (!parser->lexer_->is_note_state ())
-                       parser->parser_error ((yylsp[(1) - (6)]), _ ("have to be in Note mode for notes"));
-               if ((yyvsp[(2) - (6)].i) || (yyvsp[(3) - (6)].i) || scm_is_number ((yyvsp[(4) - (6)].scm)) || !SCM_UNBNDP ((yyvsp[(5) - (6)].scm)) || (yyvsp[(6) - (6)].i))
-               {
-                       Music *n = 0;
-                       if ((yyvsp[(6) - (6)].i))
-                               n = MY_MAKE_MUSIC ("RestEvent", (yyloc));
-                       else
-                               n = MY_MAKE_MUSIC ("NoteEvent", (yyloc));
-                       
-                       n->set_property ("pitch", (yyvsp[(1) - (6)].scm));
-                       if (SCM_UNBNDP ((yyvsp[(5) - (6)].scm)))
-                               n->set_property ("duration",
-                                                parser->default_duration_.smobbed_copy ());
-                       else
-                               n->set_property ("duration", (yyvsp[(5) - (6)].scm));
-                       
-                       if (scm_is_number ((yyvsp[(4) - (6)].scm)))
-                       {
-                               int q = scm_to_int ((yyvsp[(4) - (6)].scm));
-                               n->set_property ("absolute-octave", scm_from_int (q-1));
-                       }
-                       
-                       if ((yyvsp[(3) - (6)].i) % 2)
-                               n->set_property ("cautionary", SCM_BOOL_T);
-                       if ((yyvsp[(2) - (6)].i) % 2 || (yyvsp[(3) - (6)].i) % 2)
-                               n->set_property ("force-accidental", SCM_BOOL_T);
-                       
-                       (yyval.scm) = n->unprotect ();
-               }
-       ;}
-    break;
-
-  case 438:
-#line 2832 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *n = MY_MAKE_MUSIC ("NoteEvent", (yyloc));
-               n->set_property ("duration", (yyvsp[(2) - (2)].scm));
-               n->set_property ("drum-type", (yyvsp[(1) - (2)].scm));
-
-               (yyval.scm) = n->unprotect ();
-       ;}
-    break;
-
-  case 439:
-#line 2839 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Music *ev = 0;
-               if (ly_scm2string ((yyvsp[(1) - (2)].scm)) == "s") {
-                       /* Space */
-                       ev = MY_MAKE_MUSIC ("SkipEvent", (yyloc));
-                 }
-               else {
-                       ev = MY_MAKE_MUSIC ("RestEvent", (yyloc));
-
-                   }
-               ev->set_property ("duration", (yyvsp[(2) - (2)].scm));
-               (yyval.scm) = ev->unprotect ();
-       ;}
-    break;
-
-  case 440:
-#line 2855 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-                if (!parser->lexer_->is_chord_state ())
-                        parser->parser_error ((yylsp[(1) - (1)]), _ ("have to be in Chord mode for chords"));
-                (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 441:
-#line 2860 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               for (SCM s = (yyvsp[(1) - (2)].scm); scm_is_pair (s); s = scm_cdr (s))
-               {
-                       unsmob_music (scm_car (s))->set_property ("duration", (yyvsp[(2) - (2)].scm));
-               }
-               (yyval.scm) = (yyvsp[(1) - (2)].scm);
-       ;}
-    break;
-
-  case 442:
-#line 2870 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 443:
-#line 2873 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 445:
-#line 2880 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("lyric-event", (yyloc), (yyvsp[(1) - (3)].scm), (yyvsp[(2) - (3)].scm));
-               if (scm_is_pair ((yyvsp[(3) - (3)].scm)))
-                       unsmob_music ((yyval.scm))->set_property
-                               ("articulations", scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL));
-       ;}
-    break;
-
-  case 446:
-#line 2886 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("lyric-event", (yyloc), (yyvsp[(1) - (3)].scm),
-                                 parser->default_duration_.smobbed_copy ());
-               unsmob_music ((yyval.scm))->set_property
-                       ("articulations", scm_cons ((yyvsp[(2) - (3)].scm), scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL)));
-       ;}
-    break;
-
-  case 447:
-#line 2892 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("lyric-event", (yyloc), (yyvsp[(1) - (3)].scm), (yyvsp[(2) - (3)].scm));
-               if (scm_is_pair ((yyvsp[(3) - (3)].scm)))
-                       unsmob_music ((yyval.scm))->set_property
-                               ("articulations", scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL));
-       ;}
-    break;
-
-  case 448:
-#line 2902 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = MAKE_SYNTAX ("lyric-event", (yyloc), (yyvsp[(1) - (3)].scm), (yyvsp[(2) - (3)].scm));
-               if (scm_is_pair ((yyvsp[(3) - (3)].scm)))
-                       unsmob_music ((yyval.scm))->set_property
-                               ("articulations", scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL));
-       ;}
-    break;
-
-  case 449:
-#line 2911 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = make_chord_elements ((yyloc), (yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm), SCM_EOL);
-       ;}
-    break;
-
-  case 450:
-#line 2914 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM its = scm_reverse_x ((yyvsp[(4) - (4)].scm), SCM_EOL);
-               (yyval.scm) = make_chord_elements ((yyloc), (yyvsp[(1) - (4)].scm), (yyvsp[(2) - (4)].scm), scm_cons ((yyvsp[(3) - (4)].scm), its));
-       ;}
-    break;
-
-  case 451:
-#line 2921 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = SCM_EOL;
-       ;}
-    break;
-
-  case 452:
-#line 2924 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyval.scm));
-       ;}
-    break;
-
-  case 453:
-#line 2930 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("chord-colon");
-       ;}
-    break;
-
-  case 454:
-#line 2933 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = ly_symbol2scm ("chord-caret");
-       ;}
-    break;
-
-  case 455:
-#line 2936 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_2 (ly_symbol2scm ("chord-slash"), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 456:
-#line 2939 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_2 (ly_symbol2scm ("chord-bass"), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 457:
-#line 2945 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 458:
-#line 2948 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_reverse_x ((yyvsp[(1) - (1)].scm), SCM_EOL);
-       ;}
-    break;
-
-  case 459:
-#line 2951 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 460:
-#line 2957 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = scm_cons ((yyvsp[(1) - (1)].scm), SCM_EOL); ;}
-    break;
-
-  case 461:
-#line 2958 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyval.scm));
-       ;}
-    break;
-
-  case 462:
-#line 2964 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = make_chord_step ((yyvsp[(1) - (1)].i), 0);
-        ;}
-    break;
-
-  case 463:
-#line 2967 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = make_chord_step ((yyvsp[(1) - (2)].i), SHARP_ALTERATION);
-       ;}
-    break;
-
-  case 464:
-#line 2970 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = make_chord_step ((yyvsp[(1) - (2)].i), FLAT_ALTERATION);
-       ;}
-    break;
-
-  case 465:
-#line 2976 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_from_int ((yyvsp[(1) - (1)].i));
-       ;}
-    break;
-
-  case 466:
-#line 2979 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons (scm_from_int ((yyvsp[(1) - (3)].i)), scm_from_int ((yyvsp[(3) - (3)].i)));
-       ;}
-    break;
-
-  case 467:
-#line 2991 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_sum ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 468:
-#line 2994 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_difference ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 470:
-#line 3001 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 471:
-#line 3004 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_product ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 472:
-#line 3007 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_divide ((yyvsp[(1) - (3)].scm), (yyvsp[(3) - (3)].scm));
-       ;}
-    break;
-
-  case 473:
-#line 3013 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { /* %prec UNARY_MINUS */
-               (yyval.scm) = scm_difference ((yyvsp[(2) - (2)].scm), SCM_UNDEFINED);
-       ;}
-    break;
-
-  case 476:
-#line 3022 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_product ((yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 477:
-#line 3025 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_product ((yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm));
-       ;}
-    break;
-
-  case 481:
-#line 3037 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.i) = scm_to_int ((yyvsp[(1) - (1)].scm));
-       ;}
-    break;
-
-  case 484:
-#line 3048 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.i) = 0; ;}
-    break;
-
-  case 485:
-#line 3049 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.i) ++; ;}
-    break;
-
-  case 486:
-#line 3053 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.i) = 0; ;}
-    break;
-
-  case 487:
-#line 3054 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.i) ++; ;}
-    break;
-
-  case 488:
-#line 3062 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 489:
-#line 3066 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { parser->lexer_->push_markup_state (); ;}
-    break;
-
-  case 490:
-#line 3067 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(3) - (3)].scm);
-               parser->lexer_->pop_state ();
-       ;}
-    break;
-
-  case 491:
-#line 3074 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 492:
-#line 3078 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { parser->lexer_->push_markup_state (); ;}
-    break;
-
-  case 493:
-#line 3079 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(3) - (3)].scm);
-               parser->lexer_->pop_state ();
-       ;}
-    break;
-
-  case 494:
-#line 3086 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 495:
-#line 3090 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { parser->lexer_->push_markup_state (); ;}
-    break;
-
-  case 496:
-#line 3091 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(3) - (3)].scm);
-               parser->lexer_->pop_state ();
-       ;}
-    break;
-
-  case 497:
-#line 3098 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_2 (ly_lily_module_constant ("line-markup"),  (yyvsp[(1) - (1)].scm));
-       ;}
-    break;
-
-  case 498:
-#line 3101 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_car (scm_call_2 (ly_lily_module_constant ("map-markup-command-list"), (yyvsp[(1) - (2)].scm), scm_list_1 ((yyvsp[(2) - (2)].scm))));
-       ;}
-    break;
-
-  case 499:
-#line 3104 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 500:
-#line 3111 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               if (Text_interface::is_markup ((yyvsp[(1) - (1)].scm)))
-                       MYBACKUP (MARKUP_IDENTIFIER, (yyvsp[(1) - (1)].scm), (yylsp[(1) - (1)]));
-               else if (Text_interface::is_markup_list ((yyvsp[(1) - (1)].scm)))
-                       MYBACKUP (MARKUPLIST_IDENTIFIER, (yyvsp[(1) - (1)].scm), (yylsp[(1) - (1)]));
-               else {
-                       parser->parser_error ((yylsp[(1) - (1)]), _ ("not a markup"));
-                       MYBACKUP (MARKUP_IDENTIFIER, scm_string (SCM_EOL), (yylsp[(1) - (1)]));
-               }
-       ;}
-    break;
-
-  case 502:
-#line 3125 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 503:
-#line 3128 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 504:
-#line 3131 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 505:
-#line 3134 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_1 ((yyvsp[(1) - (1)].scm));
-       ;}
-    break;
-
-  case 506:
-#line 3138 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(2) - (2)].scm);
-       ;}
-    break;
-
-  case 507:
-#line 3144 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_call_2 (ly_lily_module_constant ("map-markup-command-list"), (yyvsp[(1) - (2)].scm), (yyvsp[(2) - (2)].scm));
-
-       ;}
-    break;
-
-  case 508:
-#line 3151 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_reverse_x ((yyvsp[(2) - (3)].scm), SCM_EOL);
-       ;}
-    break;
-
-  case 509:
-#line 3157 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {  (yyval.scm) = SCM_EOL; ;}
-    break;
-
-  case 510:
-#line 3158 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm));
-       ;}
-    break;
-
-  case 511:
-#line 3161 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_reverse_x ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm));
-       ;}
-    break;
-
-  case 512:
-#line 3167 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-         (yyval.scm) = scm_cons ((yyvsp[(1) - (2)].scm), scm_reverse_x((yyvsp[(2) - (2)].scm), SCM_EOL));
-       ;}
-    break;
-
-  case 513:
-#line 3173 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-         (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm));
-       ;}
-    break;
-
-  case 514:
-#line 3176 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-         (yyval.scm) = check_scheme_arg (parser, (yylsp[(3) - (3)]), (yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm), (yyvsp[(1) - (3)].scm));
-       ;}
-    break;
-
-  case 515:
-#line 3179 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-         (yyval.scm) = SCM_EOL;
-       ;}
-    break;
-
-  case 516:
-#line 3185 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    { (yyval.scm) = (yyvsp[(1) - (1)].scm); ;}
-    break;
-
-  case 517:
-#line 3186 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-         (yyval.scm) = scm_cons ((yyvsp[(3) - (3)].scm), (yyvsp[(2) - (3)].scm));
-       ;}
-    break;
-
-  case 518:
-#line 3192 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-         (yyval.scm) = scm_cons ((yyvsp[(1) - (3)].scm), scm_reverse_x ((yyvsp[(3) - (3)].scm), SCM_EOL));
-       ;}
-    break;
-
-  case 519:
-#line 3198 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_list_1 ((yyvsp[(1) - (1)].scm));
-       ;}
-    break;
-
-  case 520:
-#line 3201 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(2) - (2)].scm), (yyvsp[(1) - (2)].scm));
-       ;}
-    break;
-
-  case 521:
-#line 3207 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = make_simple_markup ((yyvsp[(1) - (1)].scm));
-       ;}
-    break;
-
-  case 522:
-#line 3210 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 523:
-#line 3213 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 524:
-#line 3216 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-  case 525:
-#line 3219 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
-               parser->lexer_->push_note_state (nn);
-       ;}
-    break;
-
-  case 526:
-#line 3222 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               Score * sc = (yyvsp[(4) - (5)].score);
-               (yyval.scm) = scm_list_2 (ly_lily_module_constant ("score-markup"), sc->self_scm ());
-               sc->unprotect ();
-               parser->lexer_->pop_state ();
-       ;}
-    break;
-
-  case 527:
-#line 3228 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = scm_cons ((yyvsp[(1) - (2)].scm), scm_reverse_x ((yyvsp[(2) - (2)].scm), SCM_EOL));
-       ;}
-    break;
-
-  case 528:
-#line 3232 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(2) - (2)].scm);
-       ;}
-    break;
-
-  case 529:
-#line 3238 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               SCM mapper = ly_lily_module_constant ("map-markup-command-list");
-               (yyval.scm) = scm_car (scm_call_2 (mapper, (yyvsp[(1) - (2)].scm), scm_list_1 ((yyvsp[(2) - (2)].scm))));
-       ;}
-    break;
-
-  case 530:
-#line 3242 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-    {
-               (yyval.scm) = (yyvsp[(1) - (1)].scm);
-       ;}
-    break;
-
-
-/* Line 1267 of yacc.c.  */
-#line 7150 "out/parser.cc"
-      default: break;
-    }
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-  *++yylsp = yyloc;
-
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (&yylloc, parser, YY_("syntax error"));
-#else
-      {
-       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-         {
-           YYSIZE_T yyalloc = 2 * yysize;
-           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-             yyalloc = YYSTACK_ALLOC_MAXIMUM;
-           if (yymsg != yymsgbuf)
-             YYSTACK_FREE (yymsg);
-           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-           if (yymsg)
-             yymsg_alloc = yyalloc;
-           else
-             {
-               yymsg = yymsgbuf;
-               yymsg_alloc = sizeof yymsgbuf;
-             }
-         }
-
-       if (0 < yysize && yysize <= yymsg_alloc)
-         {
-           (void) yysyntax_error (yymsg, yystate, yychar);
-           yyerror (&yylloc, parser, yymsg);
-         }
-       else
-         {
-           yyerror (&yylloc, parser, YY_("syntax error"));
-           if (yysize != 0)
-             goto yyexhaustedlab;
-         }
-      }
-#endif
-    }
-
-  yyerror_range[0] = yylloc;
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse look-ahead token after an
-        error, discard it.  */
-
-      if (yychar <= YYEOF)
-       {
-         /* Return failure if at end of input.  */
-         if (yychar == YYEOF)
-           YYABORT;
-       }
-      else
-       {
-         yydestruct ("Error: discarding",
-                     yytoken, &yylval, &yylloc, parser);
-         yychar = YYEMPTY;
-       }
-    }
-
-  /* Else will try to reuse look-ahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-  yyerror_range[0] = yylsp[1-yylen];
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-       {
-         yyn += YYTERROR;
-         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-           {
-             yyn = yytable[yyn];
-             if (0 < yyn)
-               break;
-           }
-       }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-       YYABORT;
-
-      yyerror_range[0] = *yylsp;
-      yydestruct ("Error: popping",
-                 yystos[yystate], yyvsp, yylsp, parser);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  *++yyvsp = yylval;
-
-  yyerror_range[1] = yylloc;
-  /* Using YYLLOC is tempting, but would change the location of
-     the look-ahead.  YYLOC is available though.  */
-  YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
-  *++yylsp = yyloc;
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#ifndef yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (&yylloc, parser, YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEOF && yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-                yytoken, &yylval, &yylloc, parser);
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
-    {
-      yydestruct ("Cleanup: popping",
-                 yystos[*yyssp], yyvsp, yylsp, parser);
-      YYPOPSTACK (1);
-    }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
-}
-
-
-#line 3247 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-
-
-void
-Lily_parser::set_yydebug (bool x)
-{
-       yydebug = x;
-}
-
-void
-Lily_parser::do_yyparse ()
-{
-       yyparse (this);
-}
-
-
-
-
-
-/*
-
-It is a little strange to have this function in this file, but
-otherwise, we have to import music classes into the lexer.
-
-*/
-int
-Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
-{
-       if (scm_is_string (sid)) {
-               *destination = sid;
-               return STRING_IDENTIFIER;
-       } else if (unsmob_book (sid)) {
-               Book *book =  unsmob_book (sid)->clone ();
-               *destination = book->self_scm ();
-               book->unprotect ();
-
-               return BOOK_IDENTIFIER;
-       } else if (scm_is_number (sid)) {
-               *destination = sid;
-               return NUMBER_IDENTIFIER;
-        } else if (unsmob_context_def (sid)) {
-                Context_def *def= unsmob_context_def (sid)->clone ();
-
-                *destination = def->self_scm ();
-                def->unprotect ();
-
-                return CONTEXT_DEF_IDENTIFIER;
-        } else if (unsmob_context_mod (sid)) {
-                *destination = unsmob_context_mod (sid)->smobbed_copy ();
-
-                return CONTEXT_MOD_IDENTIFIER;
-       } else if (unsmob_score (sid)) {
-               Score *score = new Score (*unsmob_score (sid));
-               *destination = score->self_scm ();
-
-               score->unprotect ();
-               return SCORE_IDENTIFIER;
-       } else if (Music *mus = unsmob_music (sid)) {
-               mus = mus->clone ();
-               *destination = mus->self_scm ();
-               unsmob_music (*destination)->
-                       set_property ("origin", make_input (last_input_));
-
-               bool is_event = mus->is_mus_type ("post-event");
-               mus->unprotect ();
-               return is_event ? EVENT_IDENTIFIER : MUSIC_IDENTIFIER;
-       } else if (unsmob_pitch (sid)) {
-               *destination = unsmob_pitch (sid)->smobbed_copy ();
-               return PITCH_IDENTIFIER;
-       } else if (unsmob_duration (sid)) {
-               *destination = unsmob_duration (sid)->smobbed_copy ();
-               return DURATION_IDENTIFIER;
-       } else if (unsmob_output_def (sid)) {
-               Output_def *p = unsmob_output_def (sid);
-               p = p->clone ();
-
-               *destination = p->self_scm ();
-               p->unprotect ();
-               return OUTPUT_DEF_IDENTIFIER;
-       } else if (Text_interface::is_markup (sid)) {
-               *destination = sid;
-               if (is_lyric_state ())
-                       return LYRIC_MARKUP_IDENTIFIER;
-               return MARKUP_IDENTIFIER;
-       } else if (Text_interface::is_markup_list (sid)) {
-               *destination = sid;
-               return MARKUPLIST_IDENTIFIER;
-       }
-
-       return -1;
-}
-
-SCM
-get_next_unique_context_id ()
-{
-       return scm_from_locale_string ("$uniqueContextId");
-}
-
-
-SCM
-get_next_unique_lyrics_context_id ()
-{
-       static int new_context_count;
-       char s[128];
-       snprintf (s, sizeof (s)-1, "uniqueContext%d", new_context_count++);
-       return scm_from_locale_string (s);
-}
-
-SCM check_scheme_arg (Lily_parser *parser, Input loc,
-                     SCM arg, SCM args, SCM pred)
-{
-       args = scm_cons (arg, args);
-       if (scm_is_true (scm_call_1 (pred, arg)))
-               return args;
-       scm_set_cdr_x (scm_last_pair (args), SCM_EOL);
-       MAKE_SYNTAX ("argument-error", loc, scm_length (args), pred, arg);
-       scm_set_cdr_x (scm_last_pair (args), SCM_BOOL_F);
-       return args;
-}
-
-SCM loc_on_music (Input loc, SCM arg)
-{
-       if (Music *m = unsmob_music (arg))
-       {
-               m = m->clone ();
-               m->set_spot (loc);
-               return m->unprotect ();
-       }
-       return arg;
-}
-
-bool
-is_regular_identifier (SCM id)
-{
-  string str = ly_scm2string (id);
-  char const *s = str.c_str ();
-
-  bool v = true;
-#if 0
-  isalpha (*s);
-  s++;
-#endif
-  while (*s && v)
-   {
-        v = v && isalnum (*s);
-        s++;
-   }
-  return v;
-}
-
-Music *
-make_music_with_input (SCM name, Input where)
-{
-       Music *m = make_music_by_name (name);
-       m->set_spot (where);
-       return m;
-}
-
-SCM
-make_simple_markup (SCM a)
-{
-       return a;
-}
-
-bool
-is_duration (int t)
-{
-  return t && t == 1 << intlog2 (t);
-}
-
-void
-set_music_properties (Music *p, SCM a)
-{
-  for (SCM k = a; scm_is_pair (k); k = scm_cdr (k))
-       p->set_property (scm_caar (k), scm_cdar (k));
-}
-
-
-SCM
-make_chord_step (int step, Rational alter)
-{
-       if (step == 7)
-               alter += FLAT_ALTERATION;
-
-       while (step < 0)
-               step += 7;
-       Pitch m ((step -1) / 7, (step - 1) % 7, alter);
-       return m.smobbed_copy ();
-}
-
-
-SCM
-make_chord_elements (Input loc, SCM pitch, SCM dur, SCM modification_list)
-{
-       SCM chord_ctor = ly_lily_module_constant ("construct-chord-elements");
-       SCM res = scm_call_3 (chord_ctor, pitch, dur, modification_list);
-       for (SCM s = res; scm_is_pair (s); s = scm_cdr (s))
-       {
-               unsmob_music (scm_car (s))->set_spot (loc);
-       }
-       return res;
-}
-
-int
-yylex (YYSTYPE *s, YYLTYPE *loc, Lily_parser *parser)
-{
-       Lily_lexer *lex = parser->lexer_;
-
-       lex->lexval_ = s;
-       lex->lexloc_ = loc;
-       lex->prepare_for_next_token ();
-       return lex->yylex ();
-}
-
diff --git a/lily/out/parser.hh b/lily/out/parser.hh
deleted file mode 100644 (file)
index 2f16b53..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
-
-/* Skeleton interface for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   This program 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 2, or (at your option)
-   any later version.
-
-   This program 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 this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     END_OF_FILE = 0,
-     PREC_BOT = 258,
-     REPEAT = 259,
-     ALTERNATIVE = 260,
-     COMPOSITE = 261,
-     ADDLYRICS = 262,
-     DEFAULT = 263,
-     FUNCTION_ARGLIST = 264,
-     DURATION_IDENTIFIER = 265,
-     REAL = 266,
-     UNSIGNED = 267,
-     TONICNAME_PITCH = 268,
-     NOTENAME_PITCH = 269,
-     PITCH_IDENTIFIER = 270,
-     NUMBER_IDENTIFIER = 271,
-     PREC_TOP = 272,
-     ACCEPTS = 273,
-     ALIAS = 274,
-     BOOK = 275,
-     BOOKPART = 276,
-     CHANGE = 277,
-     CHORDMODE = 278,
-     CHORDS = 279,
-     CONSISTS = 280,
-     CONTEXT = 281,
-     DEFAULTCHILD = 282,
-     DENIES = 283,
-     DESCRIPTION = 284,
-     DRUMMODE = 285,
-     DRUMS = 286,
-     FIGUREMODE = 287,
-     FIGURES = 288,
-     HEADER = 289,
-     INVALID = 290,
-     LAYOUT = 291,
-     LYRICMODE = 292,
-     LYRICS = 293,
-     LYRICSTO = 294,
-     MARKUP = 295,
-     MARKUPLIST = 296,
-     MIDI = 297,
-     NAME = 298,
-     NOTEMODE = 299,
-     OVERRIDE = 300,
-     PAPER = 301,
-     REMOVE = 302,
-     REST = 303,
-     REVERT = 304,
-     SCORE = 305,
-     SEQUENTIAL = 306,
-     SET = 307,
-     SIMULTANEOUS = 308,
-     TEMPO = 309,
-     TYPE = 310,
-     UNSET = 311,
-     WITH = 312,
-     NEWCONTEXT = 313,
-     CHORD_BASS = 314,
-     CHORD_CARET = 315,
-     CHORD_COLON = 316,
-     CHORD_MINUS = 317,
-     CHORD_SLASH = 318,
-     ANGLE_OPEN = 319,
-     ANGLE_CLOSE = 320,
-     DOUBLE_ANGLE_OPEN = 321,
-     DOUBLE_ANGLE_CLOSE = 322,
-     E_BACKSLASH = 323,
-     E_ANGLE_CLOSE = 324,
-     E_CHAR = 325,
-     E_CLOSE = 326,
-     E_EXCLAMATION = 327,
-     E_BRACKET_OPEN = 328,
-     E_OPEN = 329,
-     E_BRACKET_CLOSE = 330,
-     E_ANGLE_OPEN = 331,
-     E_PLUS = 332,
-     E_TILDE = 333,
-     EXTENDER = 334,
-     FIGURE_CLOSE = 335,
-     FIGURE_OPEN = 336,
-     FIGURE_SPACE = 337,
-     HYPHEN = 338,
-     CHORDMODIFIERS = 339,
-     LYRIC_MARKUP = 340,
-     MULTI_MEASURE_REST = 341,
-     E_UNSIGNED = 342,
-     EXPECT_MARKUP = 343,
-     EXPECT_PITCH = 344,
-     EXPECT_DURATION = 345,
-     EXPECT_SCM = 346,
-     BACKUP = 347,
-     REPARSE = 348,
-     EXPECT_MARKUP_LIST = 349,
-     EXPECT_OPTIONAL = 350,
-     EXPECT_NO_MORE_ARGS = 351,
-     EMBEDDED_LILY = 352,
-     BOOK_IDENTIFIER = 353,
-     CHORDMODIFIER_PITCH = 354,
-     CHORD_MODIFIER = 355,
-     CHORD_REPETITION = 356,
-     CONTEXT_DEF_IDENTIFIER = 357,
-     CONTEXT_MOD_IDENTIFIER = 358,
-     DRUM_PITCH = 359,
-     EVENT_IDENTIFIER = 360,
-     EVENT_FUNCTION = 361,
-     FRACTION = 362,
-     LYRICS_STRING = 363,
-     LYRIC_ELEMENT = 364,
-     LYRIC_MARKUP_IDENTIFIER = 365,
-     MARKUP_FUNCTION = 366,
-     MARKUP_LIST_FUNCTION = 367,
-     MARKUP_IDENTIFIER = 368,
-     MARKUPLIST_IDENTIFIER = 369,
-     MUSIC_FUNCTION = 370,
-     MUSIC_IDENTIFIER = 371,
-     OUTPUT_DEF_IDENTIFIER = 372,
-     RESTNAME = 373,
-     SCM_FUNCTION = 374,
-     SCM_IDENTIFIER = 375,
-     SCM_TOKEN = 376,
-     SCORE_IDENTIFIER = 377,
-     STRING = 378,
-     STRING_IDENTIFIER = 379,
-     UNARY_MINUS = 380
-   };
-#endif
-/* Tokens.  */
-#define END_OF_FILE 0
-#define PREC_BOT 258
-#define REPEAT 259
-#define ALTERNATIVE 260
-#define COMPOSITE 261
-#define ADDLYRICS 262
-#define DEFAULT 263
-#define FUNCTION_ARGLIST 264
-#define DURATION_IDENTIFIER 265
-#define REAL 266
-#define UNSIGNED 267
-#define TONICNAME_PITCH 268
-#define NOTENAME_PITCH 269
-#define PITCH_IDENTIFIER 270
-#define NUMBER_IDENTIFIER 271
-#define PREC_TOP 272
-#define ACCEPTS 273
-#define ALIAS 274
-#define BOOK 275
-#define BOOKPART 276
-#define CHANGE 277
-#define CHORDMODE 278
-#define CHORDS 279
-#define CONSISTS 280
-#define CONTEXT 281
-#define DEFAULTCHILD 282
-#define DENIES 283
-#define DESCRIPTION 284
-#define DRUMMODE 285
-#define DRUMS 286
-#define FIGUREMODE 287
-#define FIGURES 288
-#define HEADER 289
-#define INVALID 290
-#define LAYOUT 291
-#define LYRICMODE 292
-#define LYRICS 293
-#define LYRICSTO 294
-#define MARKUP 295
-#define MARKUPLIST 296
-#define MIDI 297
-#define NAME 298
-#define NOTEMODE 299
-#define OVERRIDE 300
-#define PAPER 301
-#define REMOVE 302
-#define REST 303
-#define REVERT 304
-#define SCORE 305
-#define SEQUENTIAL 306
-#define SET 307
-#define SIMULTANEOUS 308
-#define TEMPO 309
-#define TYPE 310
-#define UNSET 311
-#define WITH 312
-#define NEWCONTEXT 313
-#define CHORD_BASS 314
-#define CHORD_CARET 315
-#define CHORD_COLON 316
-#define CHORD_MINUS 317
-#define CHORD_SLASH 318
-#define ANGLE_OPEN 319
-#define ANGLE_CLOSE 320
-#define DOUBLE_ANGLE_OPEN 321
-#define DOUBLE_ANGLE_CLOSE 322
-#define E_BACKSLASH 323
-#define E_ANGLE_CLOSE 324
-#define E_CHAR 325
-#define E_CLOSE 326
-#define E_EXCLAMATION 327
-#define E_BRACKET_OPEN 328
-#define E_OPEN 329
-#define E_BRACKET_CLOSE 330
-#define E_ANGLE_OPEN 331
-#define E_PLUS 332
-#define E_TILDE 333
-#define EXTENDER 334
-#define FIGURE_CLOSE 335
-#define FIGURE_OPEN 336
-#define FIGURE_SPACE 337
-#define HYPHEN 338
-#define CHORDMODIFIERS 339
-#define LYRIC_MARKUP 340
-#define MULTI_MEASURE_REST 341
-#define E_UNSIGNED 342
-#define EXPECT_MARKUP 343
-#define EXPECT_PITCH 344
-#define EXPECT_DURATION 345
-#define EXPECT_SCM 346
-#define BACKUP 347
-#define REPARSE 348
-#define EXPECT_MARKUP_LIST 349
-#define EXPECT_OPTIONAL 350
-#define EXPECT_NO_MORE_ARGS 351
-#define EMBEDDED_LILY 352
-#define BOOK_IDENTIFIER 353
-#define CHORDMODIFIER_PITCH 354
-#define CHORD_MODIFIER 355
-#define CHORD_REPETITION 356
-#define CONTEXT_DEF_IDENTIFIER 357
-#define CONTEXT_MOD_IDENTIFIER 358
-#define DRUM_PITCH 359
-#define EVENT_IDENTIFIER 360
-#define EVENT_FUNCTION 361
-#define FRACTION 362
-#define LYRICS_STRING 363
-#define LYRIC_ELEMENT 364
-#define LYRIC_MARKUP_IDENTIFIER 365
-#define MARKUP_FUNCTION 366
-#define MARKUP_LIST_FUNCTION 367
-#define MARKUP_IDENTIFIER 368
-#define MARKUPLIST_IDENTIFIER 369
-#define MUSIC_FUNCTION 370
-#define MUSIC_IDENTIFIER 371
-#define OUTPUT_DEF_IDENTIFIER 372
-#define RESTNAME 373
-#define SCM_FUNCTION 374
-#define SCM_IDENTIFIER 375
-#define SCM_TOKEN 376
-#define SCORE_IDENTIFIER 377
-#define STRING 378
-#define STRING_IDENTIFIER 379
-#define UNARY_MINUS 380
-
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 182 "/home/gub/gub/target/linux-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.16/lily/parser.yy"
-{
-       Book *book;
-       Output_def *outputdef;
-       SCM scm;
-       std::string *string;
-       Score *score;
-       int i;
-}
-/* Line 1489 of yacc.c.  */
-#line 310 "out/parser-tmp.hh"
-       YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-
-
-#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
-typedef struct YYLTYPE
-{
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
-} YYLTYPE;
-# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
-# define YYLTYPE_IS_DECLARED 1
-# define YYLTYPE_IS_TRIVIAL 1
-#endif
-
-
index e425dbf4f93cd2dba5fc03172017a02f04ff63b4..addb0ef1ef57f5ee858b3e0a8804da09ace1fbc0 100644 (file)
@@ -129,7 +129,7 @@ Output_def::lookup_variable (SCM sym) const
 }
 
 SCM
-Output_def::c_variable (string s) const
+Output_def::c_variable (const string &s) const
 {
   return lookup_variable (ly_symbol2scm (s.c_str ()));
 }
index 692244b897063daab340b814da73529beee58642..9a6f8f40f25c0edbe47f45ecde1780c2babc89b6 100644 (file)
@@ -504,7 +504,7 @@ Page_breaking::page_height (int page_num, bool last) const
   // This means that we won't cache properly if page_num is negative or
   // if calc_height returns a negative number.  But that's likely to
   // be rare, so it shouldn't affect performance.
-  vector<Real>cache = last ? last_page_height_cache_ : page_height_cache_;
+  vector<Real> &cache = last ? last_page_height_cache_ : page_height_cache_;
   if (page_num >= 0 && (int) cache.size () > page_num && cache[page_num] >= 0)
     return cache[page_num];
   else
@@ -1224,11 +1224,11 @@ Page_breaking::blank_page_penalty () const
   SCM penalty_sym;
 
   if (is_last ())
-    penalty_sym = ly_symbol2scm ("blank-last-page-force");
+    penalty_sym = ly_symbol2scm ("blank-last-page-penalty");
   else if (ends_score ())
-    penalty_sym = ly_symbol2scm ("blank-after-score-page-force");
+    penalty_sym = ly_symbol2scm ("blank-after-score-page-penalty");
   else
-    penalty_sym = ly_symbol2scm ("blank-page-force");
+    penalty_sym = ly_symbol2scm ("blank-page-penalty");
 
   Break_position const &pos = breaks_[current_end_breakpoint_];
   if (Paper_score *ps = system_specs_[pos.system_spec_index_].pscore_)
index 7c9967055146637364524d559b0e11095482e739..5885a661359b6accd9055228bd11b10cf8f19f88 100644 (file)
@@ -161,8 +161,10 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
     in duplicated work, either by making this process less complicated or (preferably)
     by passing its results downstream.
   */
-  vector<SCM> footnote_number_markups; // Holds the numbering markups.
-  vector<Stencil> footnote_number_stencils; // Holds translated versions of the stencilized numbering markups.
+
+  // find the maximum X_AXIS length
+  Real max_length = -infinity_f;
+
   for (vsize i = 0; i < fn_count; i++)
     {
       if (fn_grobs[i])
@@ -172,43 +174,40 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
             (void) scm_call_1 (assertion_function, scm_from_int (counter));
         }
       SCM markup = scm_call_1 (numbering_function, scm_from_int (counter));
-      Stencil *s = unsmob_stencil (Text_interface::interpret_markup (layout, props, markup));
-      if (!s)
+      SCM stencil = Text_interface::interpret_markup (layout, props, markup);
+      Stencil *st = unsmob_stencil (stencil);
+      if (!st)
         {
           programming_error ("Your numbering function needs to return a stencil.");
-          footnote_number_markups.push_back (SCM_EOL);
-          footnote_number_stencils.push_back (Stencil (Box (Interval (0, 0), Interval (0, 0)), SCM_EOL));
-        }
-      else
-        {
-          footnote_number_markups.push_back (markup);
-          footnote_number_stencils.push_back (*s);
+          markup = SCM_EOL;
+          stencil = Stencil (Box (Interval (0, 0), Interval (0, 0)), SCM_EOL).smobbed_copy ();
+          st = unsmob_stencil (stencil);
         }
+      in_text_numbers = scm_cons (markup, in_text_numbers);
+      numbers = scm_cons (stencil, numbers);
+
+      if (!st->extent (X_AXIS).is_empty ())
+        max_length = max (max_length, st->extent (X_AXIS)[RIGHT]);
+
       counter++;
     }
 
-  // find the maximum X_AXIS length
-  Real max_length = -infinity_f;
-  for (vsize i = 0; i < fn_count; i++)
-    max_length = max (max_length, footnote_number_stencils[i].extent (X_AXIS).length ());
+  in_text_numbers = scm_reverse_x (in_text_numbers, SCM_EOL);
+  numbers = scm_reverse_x (numbers, SCM_EOL);
 
   /*
     translate each stencil such that it attains the correct maximum length and bundle the
     footnotes into a scheme object.
   */
 
-  for (vsize i = 0; i < fn_count; i++)
+  for (SCM p = numbers; scm_is_pair (p); p = scm_cdr (p))
     {
-      in_text_numbers = scm_cons (footnote_number_markups[i], in_text_numbers);
-      footnote_number_stencils[i].translate_axis ((max_length
-                                                   - footnote_number_stencils[i].extent (X_AXIS).length ()),
-                                                  X_AXIS);
-      numbers = scm_cons (footnote_number_stencils[i].smobbed_copy (), numbers);
+      Stencil *st = unsmob_stencil (scm_car (p));
+      if (!st->extent (X_AXIS).is_empty ())
+        st->translate_axis ((max_length - st->extent (X_AXIS)[RIGHT]),
+                            X_AXIS);
     }
 
-  in_text_numbers = scm_reverse_x (in_text_numbers, SCM_EOL);
-  numbers = scm_reverse_x (numbers, SCM_EOL);
-
   // build the footnotes
 
   for (SCM s = lines; scm_is_pair (s); s = scm_cdr (s))
@@ -539,7 +538,7 @@ Page_layout_problem::set_footer_height (Real height)
 void
 Page_layout_problem::append_system (System *sys, Spring const &spring, Real indent, Real padding)
 {
-  Grob *align = sys->get_vertical_alignment ();
+  Grob *align = unsmob_grob (sys->get_object ("vertical-alignment"));
   if (!align)
     return;
 
@@ -653,8 +652,6 @@ Page_layout_problem::append_system (System *sys, Spring const &spring, Real inde
                            : 0;
 
   // Corner case: there was only one staff, and it wasn't spaceable.
-  // Mark it spaceable, because we do not allow non-spaceable staves
-  // to be at the top or bottom of a system.
   if (!found_spaceable_staff && elts.size ())
     mark_as_spaceable (elts[0]);
 }
@@ -668,7 +665,8 @@ Page_layout_problem::append_prob (Prob *prob, Spring const &spring, Real padding
 
   if (sky)
     {
-      minimum_distance = (*sky)[UP].distance (bottom_skyline_);
+      minimum_distance = max ((*sky)[UP].distance (bottom_skyline_),
+                              bottom_loose_baseline_);
       bottom_skyline_ = (*sky)[DOWN];
     }
   else if (Stencil *sten = unsmob_stencil (prob->get_property ("stencil")))
@@ -679,6 +677,7 @@ Page_layout_problem::append_prob (Prob *prob, Spring const &spring, Real padding
       bottom_skyline_.clear ();
       bottom_skyline_.set_minimum_height (iv[DOWN]);
     }
+  bottom_loose_baseline_ = 0.0;
 
   Spring spring_copy = spring;
   if (tight_spacing)
@@ -853,6 +852,9 @@ Page_layout_problem::find_system_offsets ()
                 }
               else // ! is_spaceable
                 {
+                  if (staff->extent (staff, Y_AXIS).is_empty ())
+                    continue;
+
                   if (loose_lines.empty ())
                     loose_lines.push_back (last_spaceable_line);
 
index 9434fb910aab7705be46630374f25a5bc4e51cd6..a705827d2274df700b56503bc8b60bb06d58dcb8 100644 (file)
@@ -102,8 +102,8 @@ Page_spacing::account_for_footnotes (Line_details const &line)
              : 0.0))
          +
          (footnote_height
-          - (has_footnotes_
-             ? breaker_->footnote_padding () + breaker_->footnote_footer_padding ()
+          + (has_footnotes_
+             ? breaker_->footnote_padding () + breaker_->footnote_footer_padding ()
              : 0.0));
 }
 
@@ -155,6 +155,9 @@ Page_spacer::solve ()
     }
 
   Page_spacing_result ret;
+  if (simple_state_.empty ())
+    return ret;
+
   ret.penalty_ = simple_state_.back ().penalty_
                  + lines_.back ().page_penalty_ + lines_.back ().turn_penalty_;
   ret.system_count_status_ = simple_state_.back ().system_count_status_;
index 2055214c8262e5c093f01cab74646b4b2f944e34..047ba6a82fee8fedf396505ebf3ea62a992795d7 100644 (file)
@@ -232,7 +232,7 @@ Page_turn_page_breaking::solve ()
   for (vsize i = 0; i < last_break_position (); i++)
     {
       calc_subproblem (i);
-      progress_indication (string ("[") + to_string (i + 1) + "]");
+      progress_indication (string ("[") + ::to_string (i + 1) + "]");
     }
   progress_indication ("\n");
 
index 70810b5e27ecff6b49231bd8bf1cd05d0585f7d5..e7b5489df53b7d7963ef519271ded85da2e50d8f 100644 (file)
@@ -22,7 +22,8 @@
 #define PANGO_ENABLE_BACKEND
 
 #include <pango/pangoft2.h>
-#include <freetype/ftxf86.h>
+#include "freetype.hh"
+#include FT_XFREE86_H
 
 #include <map>
 #include <cstdio>
@@ -81,8 +82,8 @@ Pango_font::~Pango_font ()
 }
 
 void
-Pango_font::register_font_file (string filename,
-                                string ps_name,
+Pango_font::register_font_file (const string &filename,
+                                const string &ps_name,
                                 int face_index)
 {
   scm_hash_set_x (physical_font_tab_,
@@ -91,6 +92,22 @@ Pango_font::register_font_file (string filename,
                               scm_from_int (face_index)));
 }
 
+size_t
+Pango_font::name_to_index (string nm) const
+{
+  PangoFcFont *fcfont = PANGO_FC_FONT (pango_context_load_font (context_, pango_description_));
+  FT_Face face = pango_fc_font_lock_face (fcfont);
+  char *nm_str = (char *) nm.c_str ();
+  if (FT_UInt idx = FT_Get_Name_Index (face, nm_str))
+    {
+      pango_fc_font_unlock_face (fcfont);
+      return (size_t) idx;
+    }
+
+  pango_fc_font_unlock_face (fcfont);
+  return (size_t) - 1;
+}
+
 void
 Pango_font::derived_mark () const
 {
@@ -114,6 +131,51 @@ get_unicode_name (char *s,
     sprintf (s, "uni%04lX", code);
 }
 
+Box
+Pango_font::get_unscaled_indexed_char_dimensions (size_t signed_idx) const
+{
+  PangoFcFont *fcfont = PANGO_FC_FONT (pango_context_load_font (context_, pango_description_));
+  FT_Face face = pango_fc_font_lock_face (fcfont);
+  Box b = ly_FT_get_unscaled_indexed_char_dimensions (face, signed_idx);
+  pango_fc_font_unlock_face (fcfont);
+  return b;
+}
+
+Box
+Pango_font::get_scaled_indexed_char_dimensions (size_t signed_idx) const
+{
+  PangoFont *font = pango_context_load_font (context_, pango_description_);
+  PangoRectangle logical_rect;
+  PangoRectangle ink_rect;
+  pango_font_get_glyph_extents (font, signed_idx, &ink_rect, &logical_rect);
+  Box out (Interval (PANGO_LBEARING (ink_rect),
+                     PANGO_RBEARING (ink_rect)),
+           Interval (-PANGO_DESCENT (ink_rect),
+                     PANGO_ASCENT (ink_rect)));
+  out.scale (scale_);
+  return out;
+}
+
+Box
+Pango_font::get_glyph_outline_bbox (size_t signed_idx) const
+{
+  PangoFcFont *fcfont = PANGO_FC_FONT (pango_context_load_font (context_, pango_description_));
+  FT_Face face = pango_fc_font_lock_face (fcfont);
+  Box b = ly_FT_get_glyph_outline_bbox (face, signed_idx);
+  pango_fc_font_unlock_face (fcfont);
+  return b;
+}
+
+SCM
+Pango_font::get_glyph_outline (size_t signed_idx) const
+{
+  PangoFcFont *fcfont = PANGO_FC_FONT (pango_context_load_font (context_, pango_description_));
+  FT_Face face = pango_fc_font_lock_face (fcfont);
+  SCM s = ly_FT_get_glyph_outline (face, signed_idx);
+  pango_fc_font_unlock_face (fcfont);
+  return s;
+}
+
 Stencil
 Pango_font::pango_item_string_stencil (PangoGlyphItem const *glyph_item) const
 {
@@ -128,7 +190,6 @@ Pango_font::pango_item_string_stencil (PangoGlyphItem const *glyph_item) const
   pango_glyph_string_extents (pgs, pa->font, &ink_rect, &logical_rect);
 
   PangoFcFont *fcfont = PANGO_FC_FONT (pa->font);
-
   FT_Face ftface = pango_fc_font_lock_face (fcfont);
 
   Box b (Interval (PANGO_LBEARING (logical_rect),
@@ -231,7 +292,20 @@ Pango_font::pango_item_string_stencil (PangoGlyphItem const *glyph_item) const
       else
         char_id = scm_from_locale_string (glyph_name);
 
-      *tail = scm_cons (scm_list_4 (scm_from_double (ggeo.width * scale_),
+      PangoRectangle logical_sub_rect;
+      PangoRectangle ink_sub_rect;
+
+      pango_glyph_string_extents_range (pgs, i, i + 1, pa->font, &ink_sub_rect, &logical_sub_rect);
+      Box b_sub (Interval (PANGO_LBEARING (logical_sub_rect),
+                           PANGO_RBEARING (logical_sub_rect)),
+                 Interval (-PANGO_DESCENT (ink_sub_rect),
+                           PANGO_ASCENT (ink_sub_rect)));
+
+      b_sub.scale (scale_);
+
+      *tail = scm_cons (scm_list_5 (scm_from_double (b_sub[X_AXIS][RIGHT] - b_sub[X_AXIS][LEFT]),
+                                    scm_cons (scm_from_double (b_sub[Y_AXIS][DOWN]),
+                                              scm_from_double (b_sub[Y_AXIS][UP])),
                                     scm_from_double (ggeo.x_offset * scale_),
                                     scm_from_double (- ggeo.y_offset * scale_),
                                     char_id),
@@ -284,13 +358,14 @@ Pango_font::pango_item_string_stencil (PangoGlyphItem const *glyph_item) const
       ((Pango_font *) this)->register_font_file (file_name,
                                                  ps_name,
                                                  face_index);
-      pango_fc_font_unlock_face (fcfont);
 
-      SCM expr = scm_list_5 (ly_symbol2scm ("glyph-string"),
+      SCM expr = scm_list_n (ly_symbol2scm ("glyph-string"),
+                             self_scm (),
                              ly_string2scm (ps_name),
                              scm_from_double (size),
                              scm_from_bool (cid_keyed),
-                             ly_quote_scm (glyph_exprs));
+                             ly_quote_scm (glyph_exprs),
+                             SCM_UNDEFINED);
 
       return Stencil (b, expr);
     }
@@ -309,7 +384,7 @@ extern bool music_strings_to_paths;
 
 Stencil
 Pango_font::text_stencil (Output_def * /* state */,
-                          string str, bool music_string) const
+                          const string &str, bool music_string) const
 {
   /*
     The text assigned to a PangoLayout is automatically divided
index cb05b0c183037f6e4c472253288be2bbfaa89936..082bcd824374ca9b8907c36e28b6b601b83fdc85 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "dimensions.hh"
 #include "all-font-metrics.hh"
+#include "libc-extension.hh"
 #include "output-def.hh"
 #include "pango-font.hh"
 
@@ -54,7 +55,8 @@ properties_to_pango_description (SCM chain, Real text_size)
                                  0.0);
   Real size = text_size * pow (2.0, step / 6.0);
 
-  pango_font_description_set_size (description, gint (size * PANGO_SCALE));
+  pango_font_description_set_size (description,
+                                   gint (my_round (size * PANGO_SCALE)));
   return description;
 }
 
index 8ff894d8facbc9f402af3d33d2834125d95d97d6..cb39f58d1e2d7e48c473e9f4519b5f62ed36e6e8 100644 (file)
@@ -22,6 +22,7 @@
 #include "international.hh"
 #include "accidental-placement.hh"
 #include "accidental-interface.hh"
+#include "arpeggio.hh"
 #include "axis-group-interface.hh"
 #include "context.hh"
 #include "note-spacing.hh"
@@ -49,7 +50,7 @@ void
 Paper_column_engraver::finalize ()
 {
   if (! (breaks_ % 8))
-    progress_indication ("[" + to_string (breaks_) + "]");
+    progress_indication ("[" + ::to_string (breaks_) + "]");
 
   if (!made_columns_)
     {
@@ -241,7 +242,8 @@ Paper_column_engraver::stop_translation_timestep ()
       if (!unsmob_grob (elem->get_object ("axis-group-parent-X")))
         elem->set_object ("axis-group-parent-X", col->self_scm ());
 
-      if (Accidental_placement::has_interface (elem))
+      if (Accidental_placement::has_interface (elem)
+          || Arpeggio::has_interface (elem))
         Separation_item::add_conditional_item (col, elem);
       else if (!Accidental_interface::has_interface (elem))
         Separation_item::add_item (col, elem);
@@ -267,7 +269,7 @@ Paper_column_engraver::stop_translation_timestep ()
       breaks_++;
 
       if (! (breaks_ % 8))
-        progress_indication ("[" + to_string (breaks_) + "]");
+        progress_indication ("[" + ::to_string (breaks_) + "]");
     }
 
   context ()->get_score_context ()->unset_property (ly_symbol2scm ("forbidBreak"));
index cdf3d595ca554ec9ee0c1afcf5deaf9fa7aa493f..4379ce1a1d1228c8288485eb95c3b18fd1041f9f 100644 (file)
@@ -219,7 +219,17 @@ Paper_column::break_align_width (Grob *me, SCM align_sym)
 }
 
 /*
-  Print a vertical line and  the rank number, to aid debugging.
+  Print a:
+  - vertical line,
+  - the rank number,
+  - rank moment,
+  - blue arrow representing ideal distance,
+  - red arrow representing minimum distance
+  to aid debugging.  To turn this on, simply add
+  \override Score.PaperColumn #'stencil = #ly:paper-column::print
+  \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
+  to your score.
+  Also, as of 2013-10-16 there's a switch in Frescobaldi that turns this on.
 */
 MAKE_SCHEME_CALLBACK (Paper_column, print, 1);
 SCM
@@ -227,14 +237,13 @@ Paper_column::print (SCM p)
 {
   Paper_column *me = dynamic_cast<Paper_column *> (unsmob_grob (p));
 
-  string r = to_string (Paper_column::get_rank (me));
+  string r = ::to_string (Paper_column::get_rank (me));
 
   Moment *mom = unsmob_moment (me->get_property ("when"));
   string when = mom ? mom->to_string () : "?/?";
 
   Font_metric *musfont = Font_interface::get_default_font (me);
   SCM properties = Font_interface::text_font_alist_chain (me);
-
   SCM scm_mol = Text_interface::interpret_markup (me->layout ()->self_scm (),
                                                   properties,
                                                   ly_string2scm (r));
@@ -242,18 +251,22 @@ Paper_column::print (SCM p)
                                                    properties,
                                                    ly_string2scm (when));
   Stencil t = *unsmob_stencil (scm_mol);
+  t.scale (1.2, 1.4);
   t.add_at_edge (Y_AXIS, DOWN, *unsmob_stencil (when_mol), 0.1);
-  t.align_to (X_AXIS, CENTER);
+  t.align_to (X_AXIS, LEFT);
+  // compensate for font serifs and half letter-distance
+  t.translate (Offset (-0.1, 0));
   t.align_to (Y_AXIS, DOWN);
 
-  Stencil l = Lookup::filled_box (Box (Interval (-0.01, 0.01),
-                                       Interval (-2, -1)));
+  Stencil l = Lookup::filled_box (Box (Interval (0, 0.02),
+                                       Interval (-8, -1)));
 
-  SCM small_letters = scm_cons (scm_acons (ly_symbol2scm ("font-size"),
-                                           scm_from_int (-6), SCM_EOL),
-                                properties);
+  Real small_pad = 0.15;
+  Real big_pad = 0.35;
 
+  // number of printed arrows from *both* loops
   int j = 0;
+
   for (SCM s = me->get_object ("ideal-distances");
        scm_is_pair (s); s = scm_cdr (s))
     {
@@ -263,7 +276,28 @@ Paper_column::print (SCM p)
         continue;
 
       j++;
-      Real y = -j * 1 - 3;
+
+      Stencil arrowhead (musfont->find_by_name ("arrowheads.open.01"));
+      // initial scaling; it will also scale with font-size.
+      arrowhead.scale (1, 1.66);
+      Real head_len = arrowhead.extent (X_AXIS).length ();
+
+      SCM stil = Text_interface::interpret_markup (me->layout ()->self_scm (),
+                                                   properties,
+                                                   ly_string2scm (String_convert::form_string ("%5.2lf", sp->distance ())));
+      Stencil *number_stc = unsmob_stencil (stil);
+      number_stc->scale (1, 1.1);
+      Real num_height = number_stc->extent (Y_AXIS).length ();
+      Real num_len = number_stc->extent (X_AXIS).length ();
+      number_stc->align_to (Y_AXIS, DOWN);
+
+      // arrow's y-coord relative to the top of l stencil:
+      Real y = -2.5;
+      y -= j * (num_height + small_pad + big_pad);
+      // horizontally center number on the arrow, excluding arrowhead.
+      Offset num_off = Offset ((sp->distance () - num_len - head_len) / 2,
+                               y + small_pad);
+
       vector<Offset> pts;
       pts.push_back (Offset (0, y));
 
@@ -271,15 +305,10 @@ Paper_column::print (SCM p)
       pts.push_back (p2);
 
       Stencil id_stencil = Lookup::points_to_line_stencil (0.1, pts);
-      Stencil head (musfont->find_by_name ("arrowheads.open.01"));
-
-      SCM distance_stc = Text_interface::interpret_markup (me->layout ()->self_scm (),
-                                                           small_letters,
-                                                           ly_string2scm (String_convert::form_string ("%5.2lf", sp->distance ())));
-
-      id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (sp->distance () / 3, y + 1)));
-      id_stencil.add_stencil (head.translated (p2));
-      id_stencil = id_stencil.in_color (0, 0, 1);
+      id_stencil.add_stencil (arrowhead.translated (p2));
+      id_stencil.add_stencil (number_stc->translated (num_off));
+      // use a lighter shade of blue so it will remain legible on black background.
+      id_stencil = id_stencil.in_color (0.2, 0.4, 1);
       l.add_stencil (id_stencil);
     }
 
@@ -293,7 +322,27 @@ Paper_column::print (SCM p)
 
       j++;
 
-      Real y = -j * 1.0 - 3.5;
+      Stencil arrowhead (musfont->find_by_name ("arrowheads.open.01"));
+      // initial scaling; it will also scale with font-size.
+      arrowhead.scale (1, 1.66);
+      Real head_len = arrowhead.extent (X_AXIS).length ();
+
+      SCM stil = Text_interface::interpret_markup (me->layout ()->self_scm (),
+                                                   properties,
+                                                   ly_string2scm (String_convert::form_string ("%5.2lf", dist)));
+      Stencil *number_stc = unsmob_stencil (stil);
+      number_stc->scale (1, 1.1);
+      Real num_height = number_stc->extent (Y_AXIS).length ();
+      Real num_len = number_stc->extent (X_AXIS).length ();
+      number_stc->align_to (Y_AXIS, UP);
+
+      // arrow's y-coord relative to the top of l stencil:
+      Real y = -3;
+      y -= j * (num_height + small_pad + big_pad);
+      // horizontally center number on the arrow, excluding arrowhead.
+      Offset num_off = Offset ((dist - num_len - head_len) / 2,
+                               y - small_pad);
+
       vector<Offset> pts;
       pts.push_back (Offset (0, y));
 
@@ -301,18 +350,10 @@ Paper_column::print (SCM p)
       pts.push_back (p2);
 
       Stencil id_stencil = Lookup::points_to_line_stencil (0.1, pts);
-      Stencil head (musfont->find_by_name ("arrowheads.open.0M1"));
-      head.translate_axis (y, Y_AXIS);
-      id_stencil.add_stencil (head);
-
-      SCM distance_stc = Text_interface::interpret_markup (me->layout ()->self_scm (),
-                                                           small_letters,
-                                                           ly_string2scm (String_convert::form_string ("%5.2lf",
-                                                               dist)));
-
-      id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (dist / 3, y - 1)));
-
-      id_stencil = id_stencil.in_color (1, 0, 0);
+      id_stencil.add_stencil (arrowhead.translated (p2));
+      id_stencil.add_stencil (number_stc->translated (num_off));
+      // use a lighter shade of red so it will remain legible on black background.
+      id_stencil = id_stencil.in_color (1, 0.25, 0.25);
       l.add_stencil (id_stencil);
     }
   t.add_stencil (l);
index aa3a296c1f4bca5f179af85b459ed41f70b825c0..4c6dc86ebeb8d645477920e9e4aa35c4b45cdd5a 100644 (file)
@@ -18,6 +18,7 @@
 */
 
 #include "dimensions.hh"
+#include "libc-extension.hh"
 #include "output-def.hh"
 #include "modified-font-metric.hh"
 #include "pango-font.hh"
@@ -92,9 +93,9 @@ find_pango_font (Output_def *layout, SCM descr, Real factor)
   PangoFontDescription *description
     = pango_font_description_from_string (scm_i_string_chars (descr));
 
-  pango_font_description_set_size (description,
-                                   gint (factor *
-                                         pango_font_description_get_size (description)));
+  pango_font_description_set_size
+    (description,
+     gint (my_round (factor * pango_font_description_get_size (description))));
 
   Font_metric *fm = all_fonts_global->find_pango_font (description,
                                                        output_scale (layout));
index 57efb2fb35be2c547ab963c8ab0726ee62c296b0..34110554dc3b6b2514d5bbcb1ddaa195e07bab92 100644 (file)
@@ -40,7 +40,7 @@ using namespace std;
 
 #include "ly-smobs.icc"
 
-Paper_outputter::Paper_outputter (SCM port, string format)
+Paper_outputter::Paper_outputter (SCM port, const string &format)
 {
   file_ = port;
   output_module_ = SCM_EOL;
@@ -105,17 +105,20 @@ Paper_outputter::module () const
   return output_module_;
 }
 
-void
+SCM
 Paper_outputter::output_scheme (SCM scm)
 {
-  dump_string (scheme_to_string (scm));
+  SCM str = scheme_to_string (scm);
+  if (scm_is_string (str))
+    dump_string (str);
+  return str;
 }
 
-void
+SCM
 paper_outputter_dump (void *po, SCM x)
 {
   Paper_outputter *me = (Paper_outputter *) po;
-  me->output_scheme (x);
+  return me->output_scheme (x);
 }
 
 void
index 020a998886de9d5ea9f791d1da66c7926664e3ac..f6baee2096eeb0fbcdf78a8bfa08f73ba4b5d993 100644 (file)
@@ -1,4 +1,4 @@
-/* -*- mode: c++; c-file-style: "linux" -*- */
+/* -*- mode: c++; c-file-style: "linux"; indent-tabs-mode: t -*- */
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
 
 /* We use custom location type: Input objects */
 #define YYLTYPE Input
+#define YYSTYPE SCM
 #define YYLLOC_DEFAULT(Current,Rhs,N) \
        ((Current).set_location ((Rhs)[1], (Rhs)[N]))
 
+#define YYPRINT(file, type, value)                                      \
+        do {                                                            \
+                if (scm_is_eq (value, SCM_UNSPECIFIED))                 \
+                        break;                                          \
+                char *p = scm_to_locale_string                          \
+                        (scm_simple_format (SCM_BOOL_F,                 \
+                                            scm_from_locale_string ("~S"), \
+                                            scm_list_1 (value)));       \
+                fputs (p, file);                                        \
+                free (p);                                               \
+        } while (0)
 
 %}
 
 %parse-param {Lily_parser *parser}
+%parse-param {SCM *retval}
 %lex-param {Lily_parser *parser}
 %error-verbose
 %debug
@@ -49,7 +62,7 @@ deleting them.  Let's hope that a stack overflow doesn't trigger a move
 of the parse stack onto the heap. */
 
 %left PREC_BOT
-%nonassoc REPEAT
+%nonassoc REPEAT REPEAT_IDENTIFIER
 %nonassoc ALTERNATIVE
 
 /* The above precedences tackle the shift/reduce problem
@@ -67,40 +80,24 @@ or
 %nonassoc COMPOSITE
 %left ADDLYRICS
 
- /* ADDLYRICS needs to have lower precedence than argument scanning,
-  * or we won't be able to tell music apart from closed_music without
-  * lookahead in the context of function calls.
-  */
+%right ':' UNSIGNED REAL E_UNSIGNED EVENT_IDENTIFIER EVENT_FUNCTION '^' '_'
+       HYPHEN EXTENDER DURATION_IDENTIFIER
 
-%nonassoc DEFAULT
-
- /* \default is only applied after exhausting function arguments */
-
-%nonassoc FUNCTION_ARGLIST
-
- /* expressions with units are permitted into argument lists */
-
-%right PITCH_IDENTIFIER NOTENAME_PITCH TONICNAME_PITCH
-      UNSIGNED REAL DURATION_IDENTIFIER ':'
-
- /* The above are the symbols that can start optional function arguments
-    that are recognized in the grammar rather than by predicate
+ /* The above are needed for collecting tremoli and other items (that
+    could otherwise be interpreted as belonging to the next function
+    argument) greedily, and together with the next rule will serve to
+    join numbers and units greedily instead of allowing them into
+    separate function arguments
  */
 
-%nonassoc NUMBER_IDENTIFIER '/'
-
- /* Number-unit expressions, where permitted, are concatenated into
-  * function arguments, just like fractions and tremoli.  Tremoli must
-  * not have higher precedence than UNSIGNED, or Lilypond will not
-  * join ':' with a following optional number.
-  */
+%nonassoc NUMBER_IDENTIFIER
 
 %left PREC_TOP
 
 
 
 
-%pure_parser
+%pure-parser
 %locations
 
 
@@ -144,7 +141,7 @@ using namespace std;
 #include "warn.hh"
 
 void
-Lily_parser::parser_error (Input const *i, Lily_parser *parser, string s)
+Lily_parser::parser_error (Input const *i, Lily_parser *parser, SCM *, const string &s)
 {
        parser->parser_error (*i, s);
 }
@@ -179,18 +176,11 @@ while (0)
 %}
 
 
-%union {
-       Book *book;
-       Output_def *outputdef;
-       SCM scm;
-       std::string *string;
-       Score *score;
-       int i;
-}
-
 %{
 
-#define MY_MAKE_MUSIC(x, spot)  make_music_with_input (ly_symbol2scm (x), spot)
+#define MY_MAKE_MUSIC(x, spot) \
+       make_music_with_input (ly_symbol2scm (x), \
+                              parser->lexer_->override_input (spot))
 
 /* ES TODO:
 - Don't use lily module, create a new module instead.
@@ -199,12 +189,12 @@ while (0)
 #define LOWLEVEL_MAKE_SYNTAX(proc, args)       \
   scm_apply_0 (proc, args)
 /* Syntactic Sugar. */
-#define MAKE_SYNTAX(name, location, ...)       \
-  LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant (name), scm_list_n (parser->self_scm (), make_input (location) , ##__VA_ARGS__, SCM_UNDEFINED))
+#define MAKE_SYNTAX(name, location, ...)                               \
+       LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant (name), scm_list_n (parser->self_scm (), make_input (parser->lexer_->override_input (location)), ##__VA_ARGS__, SCM_UNDEFINED))
 #define START_MAKE_SYNTAX(name, ...)                                   \
        scm_list_n (ly_lily_module_constant (name) , ##__VA_ARGS__, SCM_UNDEFINED)
 #define FINISH_MAKE_SYNTAX(start, location, ...)                       \
-       LOWLEVEL_MAKE_SYNTAX (scm_car (start), scm_cons2 (parser->self_scm (), make_input (location), scm_append_x (scm_list_2 (scm_cdr (start), scm_list_n (__VA_ARGS__, SCM_UNDEFINED)))))
+       LOWLEVEL_MAKE_SYNTAX (scm_car (start), scm_cons2 (parser->self_scm (), make_input (parser->lexer_->override_input (location)), scm_append_x (scm_list_2 (scm_cdr (start), scm_list_n (__VA_ARGS__, SCM_UNDEFINED)))))
 
 SCM get_next_unique_context_id ();
 SCM get_next_unique_lyrics_context_id ();
@@ -220,15 +210,16 @@ SCM get_next_unique_lyrics_context_id ();
 
 static Music *make_music_with_input (SCM name, Input where);
 SCM check_scheme_arg (Lily_parser *parser, Input loc,
-                     SCM arg, SCM args, SCM pred);
+                     SCM arg, SCM args, SCM pred, SCM disp = SCM_UNDEFINED);
+SCM make_music_from_simple (Lily_parser *parser, Input loc, SCM pitch);
 SCM loc_on_music (Input loc, SCM arg);
 SCM make_chord_elements (Input loc, SCM pitch, SCM dur, SCM modification_list);
-SCM make_chord_step (int step, Rational alter);
+SCM make_chord_step (SCM step, Rational alter);
 SCM make_simple_markup (SCM a);
-bool is_duration (int t);
-bool is_regular_identifier (SCM id);
+SCM make_duration (SCM t, int dots = 0);
+bool is_regular_identifier (SCM id, bool multiple=false);
+SCM try_string_variants (SCM pred, SCM str);
 int yylex (YYSTYPE *s, YYLTYPE *loc, Lily_parser *parser);
-void set_music_properties (Music *p, SCM a);
 
 %}
 
@@ -302,16 +293,8 @@ void set_music_properties (Music *p, SCM a);
 %token DOUBLE_ANGLE_OPEN "<<"
 %token DOUBLE_ANGLE_CLOSE ">>"
 %token E_BACKSLASH "\\"
-%token E_ANGLE_CLOSE "\\>"
-%token E_CHAR "\\C[haracter]"
-%token E_CLOSE "\\)"
 %token E_EXCLAMATION "\\!"
-%token E_BRACKET_OPEN "\\["
-%token E_OPEN "\\("
-%token E_BRACKET_CLOSE "\\]"
-%token E_ANGLE_OPEN "\\<"
 %token E_PLUS "\\+"
-%token E_TILDE "\\~"
 %token EXTENDER "__"
 
 /*
@@ -322,235 +305,58 @@ If we give names, Bison complains.
 %token FIGURE_SPACE "_"
 %token HYPHEN "--"
 
-%token CHORDMODIFIERS
-%token LYRIC_MARKUP
 %token MULTI_MEASURE_REST
 
 
-%token <i> E_UNSIGNED
-%token <scm> UNSIGNED
+%token E_UNSIGNED
+%token UNSIGNED
 
 /* Artificial tokens, for more generic function syntax */
-%token <i> EXPECT_MARKUP "markup?"
-%token <i> EXPECT_PITCH "ly:pitch?"
-%token <i> EXPECT_DURATION "ly:duration?"
-%token <scm> EXPECT_SCM "scheme?"
-%token <scm> BACKUP "(backed-up?)"
-%token <scm> REPARSE "(reparsed?)"
-%token <i> EXPECT_MARKUP_LIST "markup-list?"
-%token <scm> EXPECT_OPTIONAL "optional?"
+%token EXPECT_MARKUP "markup?"
+%token EXPECT_SCM "scheme?"
+%token BACKUP "(backed-up?)"
+%token REPARSE "(reparsed?)"
+%token EXPECT_MARKUP_LIST "markup-list?"
+%token EXPECT_OPTIONAL "optional?"
 /* After the last argument. */
-%token <i> EXPECT_NO_MORE_ARGS;
+%token EXPECT_NO_MORE_ARGS;
 
 /* An artificial token for parsing embedded Lilypond */
-%token <i> EMBEDDED_LILY "#{"
-
-%token <scm> BOOK_IDENTIFIER
-%token <scm> CHORDMODIFIER_PITCH
-%token <scm> CHORD_MODIFIER
-%token <scm> CHORD_REPETITION
-%token <scm> CONTEXT_DEF_IDENTIFIER
-%token <scm> CONTEXT_MOD_IDENTIFIER
-%token <scm> DRUM_PITCH
-%token <scm> PITCH_IDENTIFIER
-%token <scm> DURATION_IDENTIFIER
-%token <scm> EVENT_IDENTIFIER
-%token <scm> EVENT_FUNCTION
-%token <scm> FRACTION
-%token <scm> LYRICS_STRING
-%token <scm> LYRIC_ELEMENT
-%token <scm> LYRIC_MARKUP_IDENTIFIER
-%token <scm> MARKUP_FUNCTION
-%token <scm> MARKUP_LIST_FUNCTION
-%token <scm> MARKUP_IDENTIFIER
-%token <scm> MARKUPLIST_IDENTIFIER
-%token <scm> MUSIC_FUNCTION
-%token <scm> MUSIC_IDENTIFIER
-%token <scm> NOTENAME_PITCH
-%token <scm> NUMBER_IDENTIFIER
-%token <scm> OUTPUT_DEF_IDENTIFIER
-%token <scm> REAL
-%token <scm> RESTNAME
-%token <scm> SCM_FUNCTION
-%token <scm> SCM_IDENTIFIER
-%token <scm> SCM_TOKEN
-%token <scm> SCORE_IDENTIFIER
-%token <scm> STRING
-%token <scm> STRING_IDENTIFIER
-%token <scm> TONICNAME_PITCH
-
-
-%type <book> book_block
-%type <book> book_body
-%type <book> bookpart_block
-%type <book> bookpart_body
-
-%type <i> bare_unsigned
-%type <scm> figured_bass_alteration
-%type <i> dots
-%type <i> exclamations
-%type <i> optional_rest
-%type <i> questions
-%type <i> script_dir
-%type <i> sub_quotes
-%type <i> sup_quotes
-%type <i> tremolo_type
-
-/* Music */
-%type <scm> composite_music
-%type <scm> grouped_music_list
-%type <scm> braced_music_list
-%type <scm> closed_music
-%type <scm> music
-%type <scm> music_bare
-%type <scm> music_arg
-%type <scm> music_assign
-%type <scm> music_embedded
-%type <scm> music_or_context_def
-%type <scm> complex_music
-%type <scm> complex_music_prefix
-%type <scm> mode_changed_music
-%type <scm> repeated_music
-%type <scm> sequential_music
-%type <scm> simple_music
-%type <scm> simultaneous_music
-%type <scm> chord_body
-%type <scm> chord_body_element
-%type <scm> command_element
-%type <scm> command_event
-%type <scm> context_modification
-%type <scm> context_change
-%type <scm> direction_less_event
-%type <scm> direction_reqd_event
-%type <scm> embedded_lilypond
-%type <scm> event_chord
-%type <scm> fingering
-%type <scm> gen_text_def
-%type <scm> music_property_def
-%type <scm> note_chord_element
-%type <scm> post_event
-%type <scm> post_event_nofinger
-%type <scm> re_rhythmed_music
-%type <scm> simple_element
-%type <scm> simple_music_property_def
-%type <scm> start_symbol
-%type <scm> string_number_event
-%type <scm> tempo_event
-
-%type <outputdef> output_def_body
-%type <outputdef> output_def_head
-%type <outputdef> output_def_head_with_mode_switch
-%type <outputdef> output_def
-%type <outputdef> paper_block
-
-%type <scm> music_function_call
-%type <scm> music_list
-%type <scm> assignment_id
-%type <scm> bare_number
-%type <scm> bare_number_closed
-%type <scm> unsigned_number
-%type <scm> bass_figure
-%type <scm> figured_bass_modification
-%type <scm> br_bass_figure
-%type <scm> bass_number
-%type <scm> chord_body_elements
-%type <scm> chord_item
-%type <scm> chord_items
-%type <scm> chord_separator
-%type <scm> context_def_mod
-%type <scm> context_def_spec_block
-%type <scm> context_def_spec_body
-%type <scm> context_mod
-%type <scm> context_mod_arg
-%type <scm> context_mod_embedded
-%type <scm> context_mod_list
-%type <scm> context_prop_spec
-%type <scm> direction_less_char
-%type <scm> duration_length
-%type <scm> embedded_scm
-%type <scm> embedded_scm_arg
-%type <scm> embedded_scm_arg_closed
-%type <scm> embedded_scm_bare
-%type <scm> embedded_scm_bare_arg
-%type <scm> embedded_scm_closed
-%type <scm> event_function_event
-%type <scm> figure_list
-%type <scm> figure_spec
-%type <scm> full_markup
-%type <scm> full_markup_list
-%type <scm> function_arglist
-%type <scm> function_arglist_optional
-%type <scm> function_arglist_backup
-%type <scm> function_arglist_nonbackup
-%type <scm> function_arglist_nonbackup_common
-%type <scm> function_arglist_closed_nonbackup
-%type <scm> function_arglist_skip
-%type <scm> function_arglist_bare
-%type <scm> function_arglist_closed
-%type <scm> function_arglist_closed_optional
-%type <scm> function_arglist_common
-%type <scm> function_arglist_common_lyric
-%type <scm> function_arglist_common_minus
-%type <scm> function_arglist_closed_common
-%type <scm> function_arglist_keep
-%type <scm> function_arglist_closed_keep
-%type <scm> identifier_init
-%type <scm> lilypond
-%type <scm> lilypond_header
-%type <scm> lyric_element
-%type <scm> lyric_element_arg
-%type <scm> lyric_element_music
-%type <scm> lyric_markup
-%type <scm> markup
-%type <scm> markup_braced_list
-%type <scm> markup_braced_list_body
-%type <scm> markup_composed_list
-%type <scm> markup_command_list
-%type <scm> markup_command_list_arguments
-%type <scm> markup_command_basic_arguments
-%type <scm> markup_head_1_item
-%type <scm> markup_head_1_list
-%type <scm> markup_list
-%type <scm> markup_top
-%type <scm> maybe_notemode_duration
-%type <scm> mode_changing_head
-%type <scm> mode_changing_head_with_context
-%type <scm> multiplied_duration
-%type <scm> music_function_call_closed
-%type <scm> music_function_chord_body
-%type <scm> new_chord
-%type <scm> new_lyrics
-%type <scm> number_expression
-%type <scm> number_factor
-%type <scm> number_term
-%type <scm> octave_check
-%type <scm> optional_context_mod
-%type <scm> optional_id
-%type <scm> optional_notemode_duration
-%type <scm> pitch
-%type <scm> pitch_also_in_chords
-%type <scm> post_events
-%type <scm> property_operation
-%type <scm> property_path property_path_revved
-%type <scm> scalar
-%type <scm> scalar_closed
-%type <scm> scm_function_call
-%type <scm> scm_function_call_closed
-%type <scm> script_abbreviation
-%type <scm> simple_chord_elements
-%type <scm> simple_markup
-%type <scm> simple_string
-%type <scm> steno_duration
-%type <scm> steno_pitch
-%type <scm> steno_tonic_pitch
-%type <scm> step_number
-%type <scm> step_numbers
-%type <scm> string
-%type <scm> tempo_range
-
-%type <score> score_block
-%type <score> score_body
-
+%token EMBEDDED_LILY "#{"
+
+%token BOOK_IDENTIFIER
+%token CHORD_BODY_IDENTIFIER
+%token CHORD_MODIFIER
+%token CHORD_REPETITION
+%token CONTEXT_DEF_IDENTIFIER
+%token CONTEXT_MOD_IDENTIFIER
+%token DRUM_PITCH
+%token PITCH_IDENTIFIER
+%token PITCH_ARG
+%token DURATION_IDENTIFIER
+%token EVENT_IDENTIFIER
+%token EVENT_FUNCTION
+%token FRACTION
+%token LYRIC_ELEMENT
+%token MARKUP_FUNCTION
+%token MARKUP_LIST_FUNCTION
+%token MARKUP_IDENTIFIER
+%token MARKUPLIST_IDENTIFIER
+%token MUSIC_FUNCTION
+%token MUSIC_IDENTIFIER
+%token NOTENAME_PITCH
+%token NUMBER_IDENTIFIER
+%token OUTPUT_DEF_IDENTIFIER
+%token REAL
+%token REPEAT_IDENTIFIER
+%token RESTNAME
+%token SCM_ARG
+%token SCM_FUNCTION
+%token SCM_IDENTIFIER
+%token SCM_TOKEN
+%token STRING
+%token SYMBOL_LIST
+%token TONICNAME_PITCH
 
 %left '-' '+'
 
@@ -568,11 +374,11 @@ start_symbol:
                parser->lexer_->push_note_state (nn);
        } embedded_lilypond {
                parser->lexer_->pop_state ();
-               parser->lexer_->set_identifier (ly_symbol2scm ("parseStringResult"), $3);
+                *retval = $3;
        }
        ;
 
-lilypond:      /* empty */ { }
+lilypond:      /* empty */ { $$ = SCM_UNSPECIFIED; }
        | lilypond toplevel_expression {
        }
        | lilypond assignment {
@@ -593,28 +399,20 @@ toplevel_expression:
                parser->lexer_->set_identifier (ly_symbol2scm ("$defaultheader"), $2);
        }
        | book_block {
-               Book *book = $1;
                SCM proc = parser->lexer_->lookup_identifier ("toplevel-book-handler");
-               scm_call_2 (proc, parser->self_scm (), book->self_scm ());
-               book->unprotect ();
+               scm_call_2 (proc, parser->self_scm (), $1);
        }
        | bookpart_block {
-               Book *bookpart = $1;
                SCM proc = parser->lexer_->lookup_identifier ("toplevel-bookpart-handler");
-               scm_call_2 (proc, parser->self_scm (), bookpart->self_scm ());
-               bookpart->unprotect ();
+               scm_call_2 (proc, parser->self_scm (), $1);
        }
        | score_block {
-               Score *score = $1;
-
                SCM proc = parser->lexer_->lookup_identifier ("toplevel-score-handler");
-               scm_call_2 (proc, parser->self_scm (), score->self_scm ());
-               score->unprotect ();
+               scm_call_2 (proc, parser->self_scm (), $1);
        }
        | composite_music {
-               Music *music = unsmob_music ($1);
                SCM proc = parser->lexer_->lookup_identifier ("toplevel-music-handler");
-               scm_call_2 (proc, parser->self_scm (), music->self_scm ());
+               scm_call_2 (proc, parser->self_scm (), $1);
        }
        | full_markup {
                SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler");
@@ -624,19 +422,36 @@ toplevel_expression:
                SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler");
                scm_call_2 (proc, parser->self_scm (), $1);
        }
+       | SCM_TOKEN {
+               // Evaluate and ignore #xxx, as opposed to \xxx
+               parser->lexer_->eval_scm_token ($1);
+       }
+       | embedded_scm_active
+       {
+               SCM out = SCM_UNDEFINED;
+               if (Text_interface::is_markup ($1))
+                       out = scm_list_1 ($1);
+               else if (Text_interface::is_markup_list ($1))
+                       out = $1;
+               if (scm_is_pair (out))
+               {
+                       SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler");
+                       scm_call_2 (proc, parser->self_scm (), out);
+               } else if (!scm_is_eq ($1, SCM_UNSPECIFIED))
+                       parser->parser_error (@1, _("bad expression type"));
+       }
        | output_def {
                SCM id = SCM_EOL;
-               Output_def * od = $1;
+               Output_def * od = unsmob_output_def ($1);
 
-               if ($1->c_variable ("is-paper") == SCM_BOOL_T)
+               if (od->c_variable ("is-paper") == SCM_BOOL_T)
                        id = ly_symbol2scm ("$defaultpaper");
-               else if ($1->c_variable ("is-midi") == SCM_BOOL_T)
+               else if (od->c_variable ("is-midi") == SCM_BOOL_T)
                        id = ly_symbol2scm ("$defaultmidi");
-               else if ($1->c_variable ("is-layout") == SCM_BOOL_T)
+               else if (od->c_variable ("is-layout") == SCM_BOOL_T)
                        id = ly_symbol2scm ("$defaultlayout");
 
-               parser->lexer_->set_identifier (id, od->self_scm ());
-               od->unprotect();
+               parser->lexer_->set_identifier (id, $1);
        }
        ;
 
@@ -648,34 +463,25 @@ embedded_scm_bare:
        | SCM_IDENTIFIER
        ;
 
+embedded_scm_active:
+       SCM_IDENTIFIER
+       | scm_function_call
+       ;
+
 embedded_scm_bare_arg:
-       embedded_scm_bare
-       | STRING
-       | STRING_IDENTIFIER
-       | full_markup
+       SCM_ARG
+       | SCM_TOKEN
+       {
+               $$ = parser->lexer_->eval_scm_token ($1);
+       }
+       | FRACTION
        | full_markup_list
        | context_modification
        | score_block
-       {
-               $$ = $1->self_scm ();
-               $1->unprotect ();
-       }
        | context_def_spec_block
        | book_block
-       {
-               $$ = $1->self_scm ();
-               $1->unprotect ();
-       }
        | bookpart_block
-       {
-               $$ = $1->self_scm ();
-               $1->unprotect ();
-       }
        | output_def
-       {
-               $$ = $1->self_scm ();
-               $1->unprotect ();
-       }
        ;
 
 /* The generic version may end in music, or not */
@@ -685,10 +491,19 @@ embedded_scm:
        | scm_function_call
        ;
 
+/* embedded_scm_arg is _not_ casting pitches to music by default, this
+ * has to be done by the function itself.  Note that this may cause
+ * the results of scm_function_call or embedded_scm_bare_arg to be
+ * turned into music from pitches as well.  Note that this creates a
+ * distinctly awkward situation for calculated drum pitches.  Those
+ * are at the current point of time rejected as music constituents as
+ * they can't be distinguished from "proper" symbols.
+ */
+
 embedded_scm_arg:
        embedded_scm_bare_arg
        | scm_function_call
-       | music_arg
+       | music_assign
        ;
 
 scm_function_call:
@@ -701,6 +516,10 @@ scm_function_call:
 embedded_lilypond:
        /* empty */
        {
+               // FIXME: @$ does not contain a useful source location
+               // for empty rules, and the only token in the whole
+               // production, EMBEDDED_LILY, is synthetic and also
+               // contains no source location.
                $$ = MAKE_SYNTAX ("void-music", @$);
        }
        | identifier_init
@@ -714,17 +533,22 @@ embedded_lilypond:
        }
        | error {
                parser->error_level_ = 1;
+                $$ = SCM_UNSPECIFIED;
        }
        | INVALID embedded_lilypond {
                parser->error_level_ = 1;
+                $$ = $2;
        }
        ;
 
 
 lilypond_header_body:
-       /* empty */
+       /* empty */ { $$ = SCM_UNSPECIFIED; }
        | lilypond_header_body assignment  {
 
+       }
+       | lilypond_header_body embedded_scm  {
+
        }
        ;
 
@@ -739,88 +563,83 @@ lilypond_header:
 */
 assignment_id:
        STRING          { $$ = $1; }
-       | LYRICS_STRING { $$ = $1; }
        ;
 
 assignment:
        assignment_id '=' identifier_init  {
                parser->lexer_->set_identifier ($1, $3);
+                $$ = SCM_UNSPECIFIED;
        }
        | assignment_id property_path '=' identifier_init {
                SCM path = scm_cons (scm_string_to_symbol ($1), $2);
                parser->lexer_->set_identifier (path, $4);
-       ;
-/*
- TODO: devise standard for protection in parser.
-
-  The parser stack lives on the C-stack, which means that
-all objects can be unprotected as soon as they're here.
-
-*/
+                $$ = SCM_UNSPECIFIED;
+       }
+       | assignment_id '.' property_path '=' identifier_init {
+               SCM path = scm_cons (scm_string_to_symbol ($1), $3);
+               parser->lexer_->set_identifier (path, $5);
+                $$ = SCM_UNSPECIFIED;
        }
-       | embedded_scm { }
        ;
 
 
 identifier_init:
-       score_block {
-               $$ = $1->self_scm ();
-               $1->unprotect ();
-       }
-       | book_block {
-               $$ = $1->self_scm ();
-               $1->unprotect ();
-       }
-       | bookpart_block {
-               $$ = $1->self_scm ();
-               $1->unprotect ();
-       }
-       | output_def {
-               $$ = $1->self_scm ();
-               $1->unprotect ();
-       }
-       | context_def_spec_block {
-               $$ = $1;
-       }
-       | music_assign  {
-               $$ = $1;
-       }
-       | post_event_nofinger {
-               $$ = $1;
-       }
-       | number_expression {
-               $$ = $1;
-       }
-       | FRACTION {
-               $$ = $1;
-       }
-       | string {
-               $$ = $1;
-       }
-        | embedded_scm {
-               $$ = $1;
-       }
-       | full_markup {
-               $$ = $1;
-       }
-       | full_markup_list {
-               $$ = $1;
+       score_block
+       | book_block
+       | bookpart_block
+       | output_def
+       | context_def_spec_block
+       | music_assign
+       | post_event_nofinger post_events
+       {
+               $$ = scm_reverse_x ($2, SCM_EOL);
+               if (Music *m = unsmob_music ($1))
+               {
+                       if (m->is_mus_type ("post-event-wrapper"))
+                               $$ = scm_append
+                                       (scm_list_2 (m->get_property ("elements"),
+                                                    $$));
+                       else
+                               $$ = scm_cons ($1, $$);
+               }
+               if (scm_is_pair ($$)
+                   && scm_is_null (scm_cdr ($$)))
+                       $$ = scm_car ($$);
+               else
+               {
+                       Music * m = MY_MAKE_MUSIC ("PostEvents", @$);
+                       m->set_property ("elements", $$);
+                       $$ = m->unprotect ();
+               }
        }
-        | context_modification {
-                $$ = $1;
-        }
+       | number_expression
+       | FRACTION
+       | string
+        | embedded_scm
+       | full_markup_list
+        | context_modification
        ;
 
 context_def_spec_block:
        CONTEXT '{' context_def_spec_body '}'
                {
                $$ = $3;
+               unsmob_context_def ($$)->origin ()->set_spot (@$);
        }
        ;
 
 context_mod_arg:
        embedded_scm
-       | composite_music
+       |
+       {
+               SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
+               parser->lexer_->push_note_state (nn);
+       }
+       composite_music
+       {
+               parser->lexer_->pop_state ();
+               $$ = $2;
+       }
        ;
 
 context_mod_embedded:
@@ -834,6 +653,7 @@ context_mod_embedded:
                        $$ = $1;
                else {
                        parser->parser_error (@1, _ ("not a context mod"));
+                       $$ = Context_mod ().smobbed_copy ();
                }
        }
        ;
@@ -842,14 +662,13 @@ context_mod_embedded:
 context_def_spec_body:
        /**/ {
                $$ = Context_def::make_scm ();
-               unsmob_context_def ($$)->origin ()->set_spot (@$);
        }
        | CONTEXT_DEF_IDENTIFIER {
                $$ = $1;
-               unsmob_context_def ($$)->origin ()->set_spot (@$);
        }
        | context_def_spec_body context_mod {
-               unsmob_context_def ($$)->add_context_mod ($2);
+               if (!SCM_UNBNDP ($2))
+                       unsmob_context_def ($$)->add_context_mod ($2);
        }
        | context_def_spec_body context_modification {
                 Context_def *td = unsmob_context_def ($$);
@@ -872,6 +691,7 @@ context_def_spec_body:
 book_block:
        BOOK '{' book_body '}'  {
                $$ = $3;
+               unsmob_book ($$)->origin ()->set_spot (@$);
                pop_paper (parser);
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), SCM_BOOL_F);
        }
@@ -882,115 +702,137 @@ book_block:
    * grok \layout and \midi?  */
 book_body:
        {
-               $$ = new Book;
+               Book *book = new Book;
                init_papers (parser);
-               $$->origin ()->set_spot (@$);
-               $$->paper_ = dynamic_cast<Output_def*> (unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
-               $$->paper_->unprotect ();
-               push_paper (parser, $$->paper_);
-               $$->header_ = get_header (parser);
-               parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $$->self_scm ());
+               book->paper_ = dynamic_cast<Output_def*> (unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
+               book->paper_->unprotect ();
+               push_paper (parser, book->paper_);
+               book->header_ = get_header (parser);
+                $$ = book->unprotect ();
+               parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $$);
        }
        | BOOK_IDENTIFIER {
-               $$ = unsmob_book ($1);
-               $$->protect ();
-               $$->origin ()->set_spot (@$);
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $1);
        }
        | book_body paper_block {
-               $$->paper_ = $2;
-               $2->unprotect ();
-               set_paper (parser, $2);
+               unsmob_book ($1)->paper_ = unsmob_output_def ($2);
+               set_paper (parser, unsmob_output_def ($2));
        }
        | book_body bookpart_block {
-               Book *bookpart = $2;
                SCM proc = parser->lexer_->lookup_identifier ("book-bookpart-handler");
-               scm_call_2 (proc, $$->self_scm (), bookpart->self_scm ());
-               bookpart->unprotect ();
+               scm_call_2 (proc, $1, $2);
        }
        | book_body score_block {
-               Score *score = $2;
                SCM proc = parser->lexer_->lookup_identifier ("book-score-handler");
-               scm_call_2 (proc, $$->self_scm (), score->self_scm ());
-               score->unprotect ();
+               scm_call_2 (proc, $1, $2);
        }
        | book_body composite_music {
-               Music *music = unsmob_music ($2);
                SCM proc = parser->lexer_->lookup_identifier ("book-music-handler");
-               scm_call_3 (proc, parser->self_scm (), $$->self_scm (), music->self_scm ());
+               scm_call_3 (proc, parser->self_scm (), $1, $2);
        }
        | book_body full_markup {
                SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
-               scm_call_2 (proc, $$->self_scm (), scm_list_1 ($2));
+               scm_call_2 (proc, $1, scm_list_1 ($2));
        }
        | book_body full_markup_list {
                SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
-               scm_call_2 (proc, $$->self_scm (), $2);
+               scm_call_2 (proc, $1, $2);
+       }
+       | book_body SCM_TOKEN {
+               // Evaluate and ignore #xxx, as opposed to \xxx
+               parser->lexer_->eval_scm_token ($2);
+       }
+       | book_body embedded_scm_active
+       {
+               SCM out = SCM_UNDEFINED;
+               if (Text_interface::is_markup ($2))
+                       out = scm_list_1 ($2);
+               else if (Text_interface::is_markup_list ($2))
+                       out = $2;
+               if (scm_is_pair (out))
+               {
+                       SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
+                       scm_call_2 (proc, $1, out);
+               } else if (!scm_is_eq ($2, SCM_UNSPECIFIED))
+                       parser->parser_error (@2, _("bad expression type"));
        }
        | book_body
        {
-               parser->lexer_->add_scope ($1->header_);
+               parser->lexer_->add_scope (unsmob_book ($1)->header_);
        } lilypond_header
-       | book_body embedded_scm { }
        | book_body error {
-               $$->paper_ = 0;
-               $$->scores_ = SCM_EOL;
-               $$->bookparts_ = SCM_EOL;
+                Book *book = unsmob_book ($1);
+               book->paper_ = 0;
+               book->scores_ = SCM_EOL;
+               book->bookparts_ = SCM_EOL;
        }
        ;
 
 bookpart_block:
        BOOKPART '{' bookpart_body '}' {
                $$ = $3;
+               unsmob_book ($$)->origin ()->set_spot (@$);
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), SCM_BOOL_F);
        }
        ;
 
 bookpart_body:
        {
-               $$ = new Book;
-               $$->origin ()->set_spot (@$);
-               parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $$->self_scm ());
+               Book *book = new Book;
+                $$ = book->unprotect ();
+               parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $$);
        }
        | BOOK_IDENTIFIER {
-               $$ = unsmob_book ($1);
-               $$->protect ();
-               $$->origin ()->set_spot (@$);
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $1);
        }
        | bookpart_body paper_block {
-               $$->paper_ = $2;
-               $2->unprotect ();
+               unsmob_book ($$)->paper_ = unsmob_output_def ($2);
        }
        | bookpart_body score_block {
-               Score *score = $2;
                SCM proc = parser->lexer_->lookup_identifier ("bookpart-score-handler");
-               scm_call_2 (proc, $$->self_scm (), score->self_scm ());
-               score->unprotect ();
+               scm_call_2 (proc, $1, $2);
        }
        | bookpart_body composite_music {
-               Music *music = unsmob_music ($2);
                SCM proc = parser->lexer_->lookup_identifier ("bookpart-music-handler");
-               scm_call_3 (proc, parser->self_scm (), $$->self_scm (), music->self_scm ());
+               scm_call_3 (proc, parser->self_scm (), $1, $2);
        }
        | bookpart_body full_markup {
                SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
-               scm_call_2 (proc, $$->self_scm (), scm_list_1 ($2));
+               scm_call_2 (proc, $1, scm_list_1 ($2));
        }
        | bookpart_body full_markup_list {
                SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
-               scm_call_2 (proc, $$->self_scm (), $2);
+               scm_call_2 (proc, $1, $2);
+       }
+       | bookpart_body SCM_TOKEN {
+               // Evaluate and ignore #xxx, as opposed to \xxx
+               parser->lexer_->eval_scm_token ($2);
+       }
+       | bookpart_body embedded_scm_active
+       {
+               SCM out = SCM_UNDEFINED;
+               if (Text_interface::is_markup ($2))
+                       out = scm_list_1 ($2);
+               else if (Text_interface::is_markup_list ($2))
+                       out = $2;
+               if (scm_is_pair (out))
+               {
+                       SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
+                       scm_call_2 (proc, $1, out);
+               } else if (!scm_is_eq ($2, SCM_UNSPECIFIED))
+                       parser->parser_error (@2, _("bad expression type"));
        }
        | bookpart_body
        {
-               if (!ly_is_module ($1->header_))
-                       $1->header_ = ly_make_module (false);
-               parser->lexer_->add_scope ($1->header_);
+                Book *book = unsmob_book ($1);
+               if (!ly_is_module (book->header_))
+                       book->header_ = ly_make_module (false);
+               parser->lexer_->add_scope (book->header_);
        } lilypond_header
-       | bookpart_body embedded_scm { }
        | bookpart_body error {
-               $$->paper_ = 0;
-               $$->scores_ = SCM_EOL;
+                Book *book = unsmob_book ($1);
+               book->paper_ = 0;
+               book->scores_ = SCM_EOL;
        }
        ;
 
@@ -1002,40 +844,43 @@ score_block:
 
 score_body:
        music {
-               SCM m = $1;
                SCM scorify = ly_lily_module_constant ("scorify-music");
-               SCM score = scm_call_2 (scorify, m, parser->self_scm ());
+               $$ = scm_call_2 (scorify, $1, parser->self_scm ());
 
-               // pass ownernship to C++ again.
-               $$ = unsmob_score (score);
-               $$->protect ();
-               $$->origin ()->set_spot (@$);
+               unsmob_score ($$)->origin ()->set_spot (@$);
        }
-       | SCORE_IDENTIFIER {
-               $$ = unsmob_score ($1);
-               $$->protect ();
-               $$->origin ()->set_spot (@$);
+       | embedded_scm_active {
+               Score *score;
+               if (unsmob_score ($1))
+                       score = new Score (*unsmob_score ($1));
+               else {
+                       score = new Score;
+                       parser->parser_error (@1, _("score expected"));
+               }
+               unsmob_score ($$)->origin ()->set_spot (@$);
+               $$ = score->unprotect ();
        }
        | score_body
        {
-               if (!ly_is_module ($1->get_header ()))
-                       $1->set_header (ly_make_module (false));
-               parser->lexer_->add_scope ($1->get_header ());
+                Score *score = unsmob_score ($1);
+               if (!ly_is_module (score->get_header ()))
+                       score->set_header (ly_make_module (false));
+               parser->lexer_->add_scope (score->get_header ());
        } lilypond_header
        | score_body output_def {
-               if ($2->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T)
+                Output_def *od = unsmob_output_def ($2);
+               if (od->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T)
                {
                        parser->parser_error (@2, _("\\paper cannot be used in \\score, use \\layout instead"));
 
                }
                else
                {
-                       $$->add_output_def ($2);
+                       unsmob_score ($1)->add_output_def (od);
                }
-               $2->unprotect ();
        }
        | score_body error {
-               $$->error_found_ = true;
+               unsmob_score ($$)->error_found_ = true;
        }
        ;
 
@@ -1046,12 +891,12 @@ score_body:
 
 paper_block:
        output_def {
-               $$ = $1;
-               if ($$->lookup_variable (ly_symbol2scm ("is-paper")) != SCM_BOOL_T)
+                Output_def *od = unsmob_output_def ($1);
+
+               if (od->lookup_variable (ly_symbol2scm ("is-paper")) != SCM_BOOL_T)
                {
                        parser->parser_error (@1, _ ("need \\paper for paper block"));
-                       $1->unprotect ();
-                       $$ = get_paper (parser);
+                       $$ = get_paper (parser)->unprotect ();
                }
        }
        ;
@@ -1068,20 +913,21 @@ output_def:
 
 output_def_head:
        PAPER {
-               $$ = get_paper (parser);
-               $$->input_origin_ = @$;
-               parser->lexer_->add_scope ($$->scope_);
+                Output_def *p = get_paper (parser);
+               p->input_origin_ = @$;
+               parser->lexer_->add_scope (p->scope_);
+                $$ = p->unprotect ();
        }
        | MIDI    {
                Output_def *p = get_midi (parser);
-               $$ = p;
+               $$ = p->unprotect ();
                parser->lexer_->add_scope (p->scope_);
        }
        | LAYOUT        {
                Output_def *p = get_layout (parser);
 
                parser->lexer_->add_scope (p->scope_);
-               $$ = p;
+               $$ = p->unprotect ();
        }
        ;
 
@@ -1099,35 +945,26 @@ output_def_head_with_mode_switch:
 
 music_or_context_def:
        music_arg
-       {
-               parser->lexer_->pop_state ();
-       }
-       | CONTEXT
-       {
-               parser->lexer_->pop_state ();
-       } '{' context_def_spec_body '}'
-       {
-               $$ = $4;
-       }
+       | context_def_spec_block
        ;
 
 output_def_body:
        output_def_head_with_mode_switch '{' {
                $$ = $1;
-               $$->input_origin_.set_spot (@$);
+               unsmob_output_def ($$)->input_origin_.set_spot (@$);
        }
        | output_def_head_with_mode_switch '{' OUTPUT_DEF_IDENTIFIER    {
-               $1->unprotect ();
-
                Output_def *o = unsmob_output_def ($3);
                o->input_origin_.set_spot (@$);
-               $$ = o;
-               $$->protect ();
+               $$ = o->self_scm ();
                parser->lexer_->remove_scope ();
                parser->lexer_->add_scope (o->scope_);
        }
        | output_def_body assignment  {
 
+       }
+       | output_def_body embedded_scm  {
+
        }
        | output_def_body
        {
@@ -1135,14 +972,15 @@ output_def_body:
                parser->lexer_->push_note_state (nn);
        } music_or_context_def
        {
+               parser->lexer_->pop_state ();
                if (unsmob_context_def ($3))
-                       assign_context_def ($$, $3);
+                       assign_context_def (unsmob_output_def ($1), $3);
                else {
 
                        SCM proc = parser->lexer_->lookup_identifier
                                     ("output-def-music-handler");
                        scm_call_3 (proc, parser->self_scm (),
-                                   $1->self_scm (), $3);
+                                   $1, $3);
                }
        }
        | output_def_body error {
@@ -1154,12 +992,12 @@ tempo_event:
        TEMPO steno_duration '=' tempo_range    {
                $$ = MAKE_SYNTAX ("tempo", @$, SCM_EOL, $2, $4);
        }
-       | TEMPO scalar_closed steno_duration '=' tempo_range    {
+       | TEMPO scalar steno_duration '=' tempo_range   {
                $$ = MAKE_SYNTAX ("tempo", @$, $2, $3, $5);
        }
        | TEMPO scalar {
                $$ = MAKE_SYNTAX ("tempo", @$, $2);
-       }
+       } %prec ':'
        ;
 
 /*
@@ -1195,15 +1033,40 @@ music:  music_arg
 
 music_embedded:
        music
-       | embedded_scm
        {
-               if (unsmob_music ($1)
-                   || scm_is_eq ($1, SCM_UNSPECIFIED))
+               if (unsmob_music ($1)->is_mus_type ("post-event")) {
+                       parser->parser_error (@1, _ ("unexpected post-event"));
+                       $$ = SCM_UNSPECIFIED;
+               }
+       }
+       | music_embedded_backup
+       {
+               $$ = $1;
+       }
+       | music_embedded_backup BACKUP lyric_element_music
+       {
+               $$ = $3;
+       }
+       ;
+
+music_embedded_backup:
+       embedded_scm
+       {
+               if (scm_is_eq ($1, SCM_UNSPECIFIED))
                        $$ = $1;
-               else
-               {
+               else if (Music *m = unsmob_music ($1)) {
+                       if (m->is_mus_type ("post-event")) {
+                               parser->parser_error
+                                       (@1, _ ("unexpected post-event"));
+                               $$ = SCM_UNSPECIFIED;
+                       } else
+                               $$ = $1;
+               } else if (parser->lexer_->is_lyric_state ()
+                          && Text_interface::is_markup ($1))
+                       MYBACKUP (LYRIC_ELEMENT, $1, @1);
+               else {
                        @$.warning (_ ("Ignoring non-music expression"));
-                       $$ = SCM_UNSPECIFIED;
+                       $$ = $1;
                }
        }
        ;
@@ -1211,12 +1074,11 @@ music_embedded:
 music_arg:
        simple_music
        {
-               if (unsmob_pitch ($1)) {
-                       Music *n = MY_MAKE_MUSIC ("NoteEvent", @1);
-                       n->set_property ("pitch", $1);
-                       n->set_property ("duration",
-                                        parser->default_duration_.smobbed_copy ());
-                       $$ = n->unprotect ();
+               $$ = make_music_from_simple (parser, @1, $1);
+                if (!unsmob_music ($$))
+               {
+                        parser->parser_error (@1, _ ("music expected"));
+                       $$ = MAKE_SYNTAX ("void-music", @$);
                }
        }
        | composite_music %prec COMPOSITE
@@ -1225,7 +1087,6 @@ music_arg:
 music_assign:
        simple_music
        | composite_music %prec COMPOSITE
-       | lyric_element_music
        ;
 
 repeated_music:
@@ -1233,10 +1094,20 @@ repeated_music:
        {
                $$ = MAKE_SYNTAX ("repeat", @$, $2, $3, $4, SCM_EOL);
        }
+       | REPEAT_IDENTIFIER music
+       {
+               $$ = MAKE_SYNTAX ("repeat", @$, scm_car ($1), scm_cdr ($1),
+                                 $2, SCM_EOL);
+       }
        | REPEAT simple_string unsigned_number music ALTERNATIVE braced_music_list
        {
                $$ = MAKE_SYNTAX ("repeat", @$, $2, $3, $4, $6);
        }
+       | REPEAT_IDENTIFIER music ALTERNATIVE braced_music_list
+       {
+               $$ = MAKE_SYNTAX ("repeat", @$, scm_car ($1), scm_cdr ($1),
+                                 $2, $4);
+       }
        ;
 
 sequential_music:
@@ -1264,7 +1135,11 @@ simple_music:
        ;
 
 context_modification:
-        WITH { parser->lexer_->push_initial_state (); } '{' context_mod_list '}'
+        WITH
+       {
+               SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
+               parser->lexer_->push_note_state (nn);
+       } '{' context_mod_list '}'
         {
                 parser->lexer_->pop_state ();
                 $$ = $4;
@@ -1277,8 +1152,12 @@ context_modification:
         {
                 $$ = $1;
         }
-       | WITH embedded_scm_closed
+       | WITH context_modification_arg
        {
+               if (unsmob_music ($2)) {
+                       SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
+                       $2 = scm_call_2 (proc, parser->self_scm (), $2);
+               }
                if (unsmob_context_mod ($2))
                        $$ = $2;
                else {
@@ -1288,6 +1167,11 @@ context_modification:
        }
         ;
 
+context_modification_arg:
+       embedded_scm_closed
+       | MUSIC_IDENTIFIER
+       ;
+
 optional_context_mod:
         /**/ {
             $$ = SCM_EOL;
@@ -1303,7 +1187,8 @@ context_mod_list:
             $$ = Context_mod ().smobbed_copy ();
         }
         | context_mod_list context_mod  {
-                 unsmob_context_mod ($1)->add_context_mod ($2);
+               if (!SCM_UNBNDP ($2))
+                       unsmob_context_mod ($1)->add_context_mod ($2);
         }
         | context_mod_list CONTEXT_MOD_IDENTIFIER {
                  Context_mod *md = unsmob_context_mod ($2);
@@ -1342,43 +1227,72 @@ grouped_music_list:
        | sequential_music              { $$ = $1; }
        ;
 
-/* An argument list. If a function \foo expects scm scm pitch, then the lexer expands \foo into the token sequence:
- MUSIC_FUNCTION EXPECT_PITCH EXPECT_SCM EXPECT_SCM EXPECT_NO_MORE_ARGS
-and this rule returns the reversed list of arguments. */
-
-function_arglist_skip:
-       function_arglist_common
-       | EXPECT_OPTIONAL EXPECT_PITCH function_arglist_skip
-       {
-               $$ = scm_cons ($1, $3);
-       } %prec FUNCTION_ARGLIST
-       | EXPECT_OPTIONAL EXPECT_DURATION function_arglist_skip
-       {
-               $$ = scm_cons ($1, $3);
-       } %prec FUNCTION_ARGLIST
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip
-       {
-               $$ = scm_cons ($1, $3);
-       } %prec FUNCTION_ARGLIST
-       ;
-
+/* Function argument lists are arguably the most complex part in the
+ * parser.  They are pretty tricky to understand because of the way
+ * they are processed, and because of optional arguments that can be
+ * omitted.  When there are several optional arguments in a row,
+ * omitting one automatically omits all following arguments.  Optional
+ * arguments can only be omitted when either
+ *
+ * a) the omission is explicitly started with \default
+ * b) the omission is implicitly started by an argument not matching
+ *    its predicate, and there is a mandatory argument later that can
+ *    "catch" the argument that does not fit.
+ *
+ * When argument parsing starts, the lexer pushes EXPECT_SCM tokens
+ * (corresponding to mandatory arguments and having a predicate
+ * function as semantic value) or EXPECT_OPTIONAL EXPECT_SCM (where
+ * the semantic value of the EXPECT_OPTIONAL token is the default to
+ * use when the optional argument is omitted, and EXPECT_SCM again has
+ * the argument predicate as semantic value) in reverse order to the
+ * parser, followed by EXPECT_NO_MORE_ARGS.  The argument list is then
+ * processed inside-out while actual tokens are consumed.
+ *
+ * This means that the argument list tokens determine the actions
+ * taken as they arrive.  The structure of the argument list is known
+ * to the parser and stored in its parse stack when the first argument
+ * is being parsed.  What the parser does not know is which predicates
+ * will match and whether or not \default will be appearing in the
+ * argument list, and where.
+ *
+ * Many of the basic nonterminals used for argument list scanning come
+ * in a "normal" and a "closed" flavor.  A closed expression is one
+ * that can be parsed without a lookahead token.  That makes it
+ * feasible for an optional argument that may need to be skipped:
+ * skipping can only be accomplished by pushing back the token into
+ * the lexer, and that only works when there is no lookahead token.
+ *
+ * Sequences of 0 or more optional arguments are scanned using either
+ * function_arglist_backup or function_arglist_nonbackup.  The first
+ * is used when optional arguments are followed by at least one
+ * mandatory argument: in that case optional arguments may be skipped
+ * by either a false predicate (in which case the expression will be
+ * pushed back as one or more tokens, preceded by a BACKUP token) or
+ * by using \default.
+ *
+ * If optional arguments are at the end of the argument list, they are
+ * instead scanned using function_arglist_nonbackup: here the only
+ * manner to enter into skipping of optional arguments is the use of
+ * \default.
+ *
+ * The argument list of a normal function call is parsed using
+ * function_arglist.  The part of an argument list before a mandatory
+ * argument is parsed using function_arglist_optional.
+ *
+ * The difference is that leading optional arguments are scanned using
+ * function_arglist_nonbackup and function_arglist_backup,
+ * respectively.
+ *
+ * Most other details are obvious in the rules themselves.
+ *
+ */
 
 function_arglist_nonbackup_common:
-       EXPECT_OPTIONAL EXPECT_PITCH function_arglist pitch_also_in_chords {
-               $$ = scm_cons ($4, $3);
-       }
-       | EXPECT_OPTIONAL EXPECT_DURATION function_arglist_closed duration_length {
-               $$ = scm_cons ($4, $3);
-       }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed FRACTION
-       {
-               $$ = check_scheme_arg (parser, @4, $4, $3, $2);
-       }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed post_event_nofinger
+       EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup post_event_nofinger
        {
                $$ = check_scheme_arg (parser, @4, $4, $3, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed '-' UNSIGNED
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' UNSIGNED
        {
                SCM n = scm_difference ($5, SCM_UNDEFINED);
                if (scm_is_true (scm_call_1 ($2, n)))
@@ -1386,21 +1300,18 @@ function_arglist_nonbackup_common:
                else {
                        Music *t = MY_MAKE_MUSIC ("FingeringEvent", @5);
                        t->set_property ("digit", $5);
-                       $$ = t->unprotect ();
-                       if (scm_is_true (scm_call_1 ($2, $$)))
-                               $$ = scm_cons ($$, $3);
-                       else
-                               $$ = check_scheme_arg (parser, @4, n, $3, $2);
+                       $$ = check_scheme_arg (parser, @4, t->unprotect (),
+                                              $3, $2, n);
                }
                
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed '-' REAL
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' REAL
        {
                $$ = check_scheme_arg (parser, @4,
                                       scm_difference ($5, SCM_UNDEFINED),
                                       $3, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed '-' NUMBER_IDENTIFIER
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' NUMBER_IDENTIFIER
        {
                $$ = check_scheme_arg (parser, @4,
                                       scm_difference ($5, SCM_UNDEFINED),
@@ -1410,119 +1321,279 @@ function_arglist_nonbackup_common:
 
 function_arglist_closed_nonbackup:
        function_arglist_nonbackup_common
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist embedded_scm_arg_closed
+       | function_arglist_closed_common
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup embedded_scm_arg_closed
+       {
+               $$ = check_scheme_arg (parser, @4, $4, $3, $2);
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup bare_number_closed
        {
                $$ = check_scheme_arg (parser, @4, $4, $3, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed bare_number_closed
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup SCM_IDENTIFIER
+       {
+               $$ = check_scheme_arg (parser, @4,
+                                      try_string_variants ($2, $4),
+                                      $3, $2, $4);
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup STRING
+       {
+               $$ = check_scheme_arg (parser, @4,
+                                      try_string_variants ($2, $4),
+                                      $3, $2, $4);
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup full_markup
        {
                $$ = check_scheme_arg (parser, @4, $4, $3, $2);
        }
        ;
 
-function_arglist_nonbackup:
-       function_arglist_nonbackup_common
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist embedded_scm_arg
+symbol_list_arg:
+       SYMBOL_LIST
+       | SYMBOL_LIST '.' symbol_list_rev
        {
-               $$ = check_scheme_arg (parser, @4, $4, $3, $2);
+               $$ = scm_append (scm_list_2 ($1, scm_reverse_x ($3, SCM_EOL)));
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed bare_number
+       ;
+
+symbol_list_rev:
+       symbol_list_part
+       | symbol_list_rev '.' symbol_list_part
        {
-               $$ = check_scheme_arg (parser, @4, $4, $3, $2);
+               $$ = scm_append_x (scm_list_2 ($3, $1));
        }
        ;
 
-function_arglist_keep:
-       function_arglist_common
-       | function_arglist_backup
+// symbol_list_part delivers elements in reverse copy.
+
+symbol_list_part:
+       symbol_list_element
+       {
+               SCM sym_l_p = ly_lily_module_constant ("symbol-list?");
+               $$ = try_string_variants (sym_l_p, $1);
+               if (SCM_UNBNDP ($$)) {
+                       parser->parser_error (@1, _("not a symbol"));
+                       $$ = SCM_EOL;
+               } else
+                       $$ = scm_reverse ($$);
+       }
        ;
 
-function_arglist_closed_keep:
-       function_arglist_closed_common
-       | function_arglist_backup
+
+symbol_list_element:
+       STRING
+       | embedded_scm_bare
        ;
 
-function_arglist_backup:
-       EXPECT_OPTIONAL EXPECT_SCM function_arglist_keep embedded_scm_arg_closed
+
+function_arglist_nonbackup:
+       function_arglist_nonbackup_common
+       | function_arglist_common
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup embedded_scm_arg
        {
                if (scm_is_true (scm_call_1 ($2, $4)))
-               {
                        $$ = scm_cons ($4, $3);
-               } else {
-                       $$ = scm_cons (loc_on_music (@3, $1), $3);
-                       MYBACKUP (SCM_IDENTIFIER, $4, @4);
-               }
+               else
+                       $$ = check_scheme_arg (parser, @4,
+                                              make_music_from_simple
+                                              (parser, @4, $4),
+                                              $3, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep post_event_nofinger
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup bare_number_common
        {
-               if (scm_is_true (scm_call_1 ($2, $4)))
-               {
-                       $$ = scm_cons ($4, $3);
-               } else {
-                       $$ = scm_cons (loc_on_music (@3, $1), $3);
-                       MYBACKUP (EVENT_IDENTIFIER, $4, @4);
-               }
+               $$ = check_scheme_arg (parser, @4, $4, $3, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_keep lyric_element
+       | function_arglist_nonbackup_reparse REPARSE duration_length
        {
-               // There is no point interpreting a lyrics string as
-               // an event, since we don't allow music possibly
-               // followed by durations or postevent into closed
-               // music, and we only accept closed music in optional
-               // arguments at the moment.  If this changes, more
-               // complex schemes might become interesting here as
-               // well: see how we do this at the mandatory argument
-               // point.
-               if (scm_is_true (scm_call_1 ($2, $4)))
-                       $$ = scm_cons ($4, $3);
-               else {
-                       $$ = scm_cons (loc_on_music (@3, $1), $3);
-                       MYBACKUP (LYRICS_STRING, $4, @4);
-               }
+               $$ = check_scheme_arg (parser, @3, $3, $1, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep UNSIGNED
+       | function_arglist_nonbackup_reparse REPARSE bare_number_common
        {
-               if (scm_is_true (scm_call_1 ($2, $4)))
-               {
-                       $$ = $3;
-                       MYREPARSE (@4, $2, UNSIGNED, $4);
-               } else {
-                       $$ = scm_cons (loc_on_music (@3, $1), $3);
-                       MYBACKUP (UNSIGNED, $4, @4);
-               }
+               $$ = check_scheme_arg (parser, @3, $3, $1, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep REAL
+       | function_arglist_nonbackup_reparse REPARSE SCM_ARG
        {
-               if (scm_is_true (scm_call_1 ($2, $4)))
-               {
-                       $$ = $3;
-                       MYREPARSE (@4, $2, REAL, $4);
-               } else {
-                       $$ = scm_cons (loc_on_music (@3, $1), $3);
-                       MYBACKUP (REAL, $4, @4);
-               }
+               $$ = check_scheme_arg (parser, @3, $3, $1, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep NUMBER_IDENTIFIER
+       | function_arglist_nonbackup_reparse REPARSE lyric_element_music
        {
-               if (scm_is_true (scm_call_1 ($2, $4)))
-               {
-                       $$ = scm_cons ($4, $3);
-               } else {
-                       $$ = scm_cons (loc_on_music (@3, $1), $3);
-                       MYBACKUP (NUMBER_IDENTIFIER, $4, @4);
+               $$ = check_scheme_arg (parser, @3, $3, $1, $2);
+       }
+       | function_arglist_nonbackup_reparse REPARSE symbol_list_arg
+       {
+               $$ = check_scheme_arg (parser, @3, $3, $1, $2);
+       }
+       ;
+
+function_arglist_nonbackup_reparse:
+       EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup SCM_IDENTIFIER
+       {
+               $$ = $3;
+               SCM res = try_string_variants ($2, $4);
+               if (!SCM_UNBNDP (res))
+                       if (scm_is_pair (res))
+                               MYREPARSE (@4, $2, SYMBOL_LIST, res);
+                       else
+                               MYREPARSE (@4, $2, SCM_ARG, res);
+               else if (scm_is_true
+                        (scm_call_1
+                         ($2, make_music_from_simple
+                          (parser, @4, $4))))
+                       MYREPARSE (@4, $2, STRING, $4);
+               else
+                       MYREPARSE (@4, $2, SCM_ARG, $4);
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup STRING
+       {
+               $$ = $3;
+               SCM res = try_string_variants ($2, $4);
+               if (!SCM_UNBNDP (res))
+                       if (scm_is_pair (res))
+                               MYREPARSE (@4, $2, SYMBOL_LIST, res);
+                       else
+                               MYREPARSE (@4, $2, SCM_ARG, res);
+               else if (scm_is_true
+                        (scm_call_1
+                         ($2, make_music_from_simple
+                          (parser, @4, $4))))
+                       MYREPARSE (@4, $2, STRING, $4);
+               else
+                       MYREPARSE (@4, $2, SCM_ARG, $4);
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup full_markup
+       {
+               $$ = $3;
+               if (scm_is_true (scm_call_1 ($2, $4)))
+                       MYREPARSE (@4, $2, SCM_ARG, $4);
+               else if (scm_is_true
+                        (scm_call_1
+                         ($2, make_music_from_simple
+                          (parser, @4, $4))))
+                       MYREPARSE (@4, $2, STRING, $4);
+               else
+                       MYREPARSE (@4, $2, SCM_ARG, $4);
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup UNSIGNED
+       {
+               $$ = $3;
+               if (scm_is_true (scm_call_1 ($2, $4)))
+                       MYREPARSE (@4, $2, REAL, $4);
+               else {
+                       SCM d = make_duration ($4);
+                       if (SCM_UNBNDP (d) || scm_is_false (scm_call_1 ($2, d)))
+                               MYREPARSE (@4, $2, REAL, $4); // trigger error
+                       else
+                               MYREPARSE (@4, $2, DURATION_IDENTIFIER, d);
+               }
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup DURATION_IDENTIFIER {
+               $$ = $3;
+               MYREPARSE (@4, $2, DURATION_IDENTIFIER, $4);
+       }
+       ;
+
+
+// function_arglist_backup can't occur at the end of an argument
+// list.  It needs to be careful about avoiding lookahead only until
+// it has made a decision whether or not to accept the parsed entity.
+// At that point of time, music requiring lookahead to parse becomes
+// fine.
+function_arglist_backup:
+       function_arglist_common
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup embedded_scm_arg_closed
+       {
+               if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       $$ = scm_cons ($4, $3);
+               } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (SCM_ARG, $4, @4);
+               }
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup REPEAT simple_string unsigned_number
+       {
+               $4 = MAKE_SYNTAX ("repeat", @4, $5, $6,
+                                 MY_MAKE_MUSIC ("Music", @4)->unprotect (),
+                                 SCM_EOL);
+               if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       $$ = $3;
+                       MYREPARSE (@4, $2, REPEAT_IDENTIFIER, scm_cons ($5, $6));
+               } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (REPEAT_IDENTIFIER, scm_cons ($5, $6), @4);
+               }
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup chord_body
+       {
+               if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       $$ = $3;
+                       MYREPARSE (@4, $2, CHORD_BODY_IDENTIFIER, $4);
+               } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (CHORD_BODY_IDENTIFIER, $4, @4);
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep FRACTION
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup post_event_nofinger
        {
                if (scm_is_true (scm_call_1 ($2, $4)))
                {
                        $$ = scm_cons ($4, $3);
                } else {
                        $$ = scm_cons (loc_on_music (@3, $1), $3);
-                       MYBACKUP (FRACTION, $4, @4);
+                       MYBACKUP (EVENT_IDENTIFIER, $4, @4);
+               }
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup full_markup
+       {
+               if (scm_is_true (scm_call_1 ($2, $4)))
+                       $$ = scm_cons ($4, $3);
+               else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (LYRIC_ELEMENT, $4, @4);
+               }
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup UNSIGNED
+       {
+               if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       MYREPARSE (@4, $2, REAL, $4);
+                       $$ = $3;
+               } else {
+                       SCM d = make_duration ($4);
+                       if (SCM_UNBNDP (d) || scm_is_false (scm_call_1 ($2, d)))
+                       {
+                               $$ = scm_cons (loc_on_music (@3, $1), $3);
+                               MYBACKUP (UNSIGNED, $4, @4);
+                       } else {
+                               MYREPARSE (@4, $2, DURATION_IDENTIFIER, d);
+                               $$ = $3;
+                       }
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep '-' UNSIGNED
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup REAL
+       {
+               if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       $$ = $3;
+                       MYREPARSE (@4, $2, REAL, $4);
+               } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (REAL, $4, @4);
+               }
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup NUMBER_IDENTIFIER
+       {
+               if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       $$ = scm_cons ($4, $3);
+               } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (NUMBER_IDENTIFIER, $4, @4);
+               }
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup '-' UNSIGNED
        {
                SCM n = scm_difference ($5, SCM_UNDEFINED);
                if (scm_is_true (scm_call_1 ($2, n))) {
@@ -1542,241 +1613,375 @@ function_arglist_backup:
                }
                
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep '-' REAL
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup '-' REAL
        {
                SCM n = scm_difference ($5, SCM_UNDEFINED);
                if (scm_is_true (scm_call_1 ($2, n))) {
                        MYREPARSE (@5, $2, REAL, n);
                        $$ = $3;
                } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
                        MYBACKUP (REAL, n, @5);
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep '-' NUMBER_IDENTIFIER
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup '-' NUMBER_IDENTIFIER
        {
                SCM n = scm_difference ($5, SCM_UNDEFINED);
                if (scm_is_true (scm_call_1 ($2, n))) {
                        $$ = scm_cons (n, $3);
                } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
                        MYBACKUP (NUMBER_IDENTIFIER, n, @5);
                }
        }
-       | EXPECT_OPTIONAL EXPECT_PITCH function_arglist_keep pitch_also_in_chords
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup PITCH_IDENTIFIER
        {
-               $$ = scm_cons ($4, $3);
+               SCM m = make_music_from_simple (parser, @4, $4);
+               if (unsmob_music (m) && scm_is_true (scm_call_1 ($2, m)))
+               {
+                       MYREPARSE (@4, $2, PITCH_IDENTIFIER, $4);
+                       $$ = $3;
+               } else if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       MYREPARSE (@4, $2, PITCH_ARG, $4);
+                       $$ = $3;
+               } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (PITCH_IDENTIFIER, $4, @4);
+               }
        }
-       | EXPECT_OPTIONAL EXPECT_DURATION function_arglist_closed_keep duration_length
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup NOTENAME_PITCH
        {
-               $$ = scm_cons ($4, $3);
+               SCM m = make_music_from_simple (parser, @4, $4);
+               if (unsmob_music (m) && scm_is_true (scm_call_1 ($2, m)))
+               {
+                       MYREPARSE (@4, $2, NOTENAME_PITCH, $4);
+                       $$ = $3;
+               } else if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       MYREPARSE (@4, $2, PITCH_ARG, $4);
+                       $$ = $3;
+               } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (NOTENAME_PITCH, $4, @4);
+               }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup BACKUP
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup TONICNAME_PITCH
        {
-               $$ = scm_cons ($1, $3);
-               MYBACKUP(0, SCM_UNDEFINED, @3);
+               SCM m = make_music_from_simple (parser, @4, $4);
+               if (unsmob_music (m) && scm_is_true (scm_call_1 ($2, m)))
+               {
+                       MYREPARSE (@4, $2, TONICNAME_PITCH, $4);
+                       $$ = $3;
+               } else if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       MYREPARSE (@4, $2, PITCH_ARG, $4);
+                       $$ = $3;
+               } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (TONICNAME_PITCH, $4, @4);
+               }
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup DURATION_IDENTIFIER
+       {
+               if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       MYREPARSE (@4, $2, DURATION_IDENTIFIER, $4);
+                       $$ = $3;
+               } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (DURATION_IDENTIFIER, $4, @4);
+               }
        }
-       | function_arglist_backup REPARSE embedded_scm_arg_closed
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup SCM_IDENTIFIER
+       {
+               SCM res = try_string_variants ($2, $4);
+               if (!SCM_UNBNDP (res))
+                       if (scm_is_pair (res)) {
+                               $$ = $3;
+                               MYREPARSE (@4, $2, SYMBOL_LIST, res);
+                       }
+                       else
+                               $$ = scm_cons (res, $3);
+               else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (SCM_IDENTIFIER, $4, @4);
+               }
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup STRING
+       {
+               SCM res = try_string_variants ($2, $4);
+               if (!SCM_UNBNDP (res))
+                       if (scm_is_pair (res)) {
+                               $$ = $3;
+                               MYREPARSE (@4, $2, SYMBOL_LIST, res);
+                       }
+                       else
+                               $$ = scm_cons (res, $3);
+               else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (STRING, $4, @4);
+               }
+       }
+       | function_arglist_backup REPARSE music_assign
+       {
+               if (scm_is_true (scm_call_1 ($2, $3)))
+                       $$ = scm_cons ($3, $1);
+               else
+                       $$ = check_scheme_arg (parser, @3,
+                                              make_music_from_simple
+                                              (parser, @3, $3),
+                                              $1, $2);
+       }
+       | function_arglist_backup REPARSE pitch_arg
+       {
+               $$ = check_scheme_arg (parser, @3,
+                                      $3, $1, $2);
+       }               
+       | function_arglist_backup REPARSE bare_number_common
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $1, $2);
        }
-       | function_arglist_backup REPARSE bare_number
+       | function_arglist_backup REPARSE duration_length
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $1, $2);
        }
+       | function_arglist_backup REPARSE symbol_list_arg
+       {
+               $$ = check_scheme_arg (parser, @3, $3, $1, $2);
+       }
        ;
 
 function_arglist:
-       function_arglist_common
-       | function_arglist_nonbackup
+       function_arglist_nonbackup
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_nonbackup DEFAULT
+       {
+               $$ = scm_cons (loc_on_music (@4, $1), $3);
+       }
+       ;
+
+function_arglist_skip_nonbackup:
+       function_arglist_nonbackup
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_nonbackup
+       {
+               $$ = scm_cons (loc_on_music (@3, $1), $3);
+       }
        ;
 
 function_arglist_common:
-       function_arglist_bare
+       EXPECT_NO_MORE_ARGS {
+               $$ = SCM_EOL;
+       }
        | EXPECT_SCM function_arglist_optional embedded_scm_arg
+       {
+               if (scm_is_true (scm_call_1 ($1, $3)))
+                       $$ = scm_cons ($3, $2);
+               else
+                       $$ = check_scheme_arg (parser, @3,
+                                              make_music_from_simple
+                                              (parser, @3, $3),
+                                              $2, $1);
+       }
+       | EXPECT_SCM function_arglist_optional bare_number_common
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional bare_number
+       | EXPECT_SCM function_arglist_optional post_event_nofinger
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional FRACTION
+       | EXPECT_SCM function_arglist_optional '-' NUMBER_IDENTIFIER
+       {
+               SCM n = scm_difference ($4, SCM_UNDEFINED);
+               $$ = check_scheme_arg (parser, @4, n, $2, $1);
+       }
+       | function_arglist_common_reparse REPARSE SCM_ARG
        {
                $$ = check_scheme_arg (parser, @3,
-                                      $3, $2, $1);
+                                      $3, $1, $2);
        }
-       | EXPECT_SCM function_arglist_closed_optional post_event_nofinger
+       | function_arglist_common_reparse REPARSE lyric_element_music
        {
                $$ = check_scheme_arg (parser, @3,
-                                      $3, $2, $1);
+                                      $3, $1, $2);
+       }
+       | function_arglist_common_reparse REPARSE bare_number_common
+       {
+               $$ = check_scheme_arg (parser, @3,
+                                      $3, $1, $2);
+       }
+       | function_arglist_common_reparse REPARSE duration_length
+       {
+               $$ = check_scheme_arg (parser, @3,
+                                      $3, $1, $2);
+       }
+       | function_arglist_common_reparse REPARSE symbol_list_arg
+       {
+               $$ = check_scheme_arg (parser, @3, $3, $1, $2);
        }
-       | function_arglist_common_minus
-       | function_arglist_common_lyric
        ;
 
-function_arglist_common_lyric:
-       EXPECT_SCM function_arglist_optional lyric_element
+function_arglist_common_reparse:
+       EXPECT_SCM function_arglist_optional SCM_IDENTIFIER
+       {
+               $$ = $2;
+               SCM res = try_string_variants ($1, $3);
+               if (!SCM_UNBNDP (res))
+                       if (scm_is_pair (res))
+                               MYREPARSE (@3, $1, SYMBOL_LIST, res);
+                       else
+                               MYREPARSE (@3, $1, SCM_ARG, res);
+               else if (scm_is_true
+                        (scm_call_1
+                         ($1, make_music_from_simple (parser, @3, $3))))
+                       MYREPARSE (@3, $1, LYRIC_ELEMENT, $3);
+               else
+                       // This is going to flag a syntax error, we
+                       // know the predicate to be false.
+                       MYREPARSE (@3, $1, SCM_ARG, $3);
+       }
+       | EXPECT_SCM function_arglist_optional STRING
        {
-               // We check how the predicate thinks about a lyrics
-               // event or about a markup.  If it accepts neither, we
-               // backup the original token.  Otherwise we commit to
-               // taking the token.  Depending on what the predicate
-               // is willing to accept, we interpret as a string, as
-               // a lyric event, or ambiguously (meaning that if
-               // something looking like a duration or post event
-               // follows, we take the event, otherwise the string).
-               SCM lyric_event = MAKE_SYNTAX ("lyric-event", @3, $3,
-                                              parser->default_duration_.smobbed_copy ());
+               $$ = $2;
+               SCM res = try_string_variants ($1, $3);
+               if (!SCM_UNBNDP (res))
+                       if (scm_is_pair (res))
+                               MYREPARSE (@3, $1, SYMBOL_LIST, res);
+                       else
+                               MYREPARSE (@3, $1, SCM_ARG, res);
+               else if (scm_is_true
+                        (scm_call_1
+                         ($1, make_music_from_simple (parser, @3, $3))))
+                       MYREPARSE (@3, $1, LYRIC_ELEMENT, $3);
+               else
+                       // This is going to flag a syntax error, we
+                       // know the predicate to be false.
+                       MYREPARSE (@3, $1, SCM_ARG, $3);
+       }
+       | EXPECT_SCM function_arglist_optional full_markup
+       {
+               $$ = $2;
                if (scm_is_true (scm_call_1 ($1, $3)))
-                       if (scm_is_true (scm_call_1 ($1, lyric_event)))
-                       {
-                               $$ = $2;
-                               MYREPARSE (@3, $1, LYRICS_STRING, $3);
-                       } else {
-                               $$ = scm_cons ($3, $2);
-                       }
-               else if (scm_is_true (scm_call_1 ($1, lyric_event)))
-               {
-                       $$ = $2;
+                       MYREPARSE (@3, $1, SCM_ARG, $3);
+               else if (scm_is_true
+                        (scm_call_1
+                         ($1, make_music_from_simple (parser, @3, $3))))
                        MYREPARSE (@3, $1, LYRIC_ELEMENT, $3);
-               } else {
+               else
                        // This is going to flag a syntax error, we
                        // know the predicate to be false.
-                       check_scheme_arg (parser, @3,
-                                         $3, $2, $1);
+                       MYREPARSE (@3, $1, SCM_ARG, $3);
+       }
+       | EXPECT_SCM function_arglist_optional UNSIGNED
+       {
+               $$ = $2;
+               if (scm_is_true (scm_call_1 ($1, $3)))
+                       MYREPARSE (@3, $1, REAL, $3);
+               else {
+                       SCM d = make_duration ($3);
+                       if (SCM_UNBNDP (d) || scm_is_false (scm_call_1 ($1, d)))
+                               MYREPARSE (@3, $1, REAL, $3);
+                       else
+                               MYREPARSE (@3, $1, DURATION_IDENTIFIER, d);
                }
        }
-       | function_arglist_common_lyric REPARSE lyric_element_arg
+       | EXPECT_SCM function_arglist_optional DURATION_IDENTIFIER
        {
-               // This should never be false
-               $$ = check_scheme_arg (parser, @3,
-                                      $3, $1, $2);
+               $$ = $2;
+               MYREPARSE (@3, $1, DURATION_IDENTIFIER, $3);
        }
-       ;
-
-function_arglist_common_minus:
-       EXPECT_SCM function_arglist_closed_optional '-' UNSIGNED
+       | EXPECT_SCM function_arglist_optional '-' UNSIGNED
        {
+               $$ = $2;
                SCM n = scm_difference ($4, SCM_UNDEFINED);
-               if (scm_is_true (scm_call_1 ($1, n))) {
-                       $$ = $2;
+               if (scm_is_true (scm_call_1 ($1, n)))
                        MYREPARSE (@4, $1, REAL, n);
-               else {
+               else {
                        Music *t = MY_MAKE_MUSIC ("FingeringEvent", @4);
                        t->set_property ("digit", $4);
-                       $$ = t->unprotect ();
-                       if (scm_is_true (scm_call_1 ($1, $$)))
-                               $$ = scm_cons ($$, $2);
+                       SCM m = t->unprotect ();
+                       if (scm_is_true (scm_call_1 ($1, m)))
+                               MYREPARSE (@4, $1, SCM_ARG, m);
                        else
-                               $$ = check_scheme_arg (parser, @3, n, $2, $1);
+                               MYREPARSE (@4, $1, SCM_ARG, $4);
                }
                
        }
-       | EXPECT_SCM function_arglist_closed_optional '-' REAL
+       | EXPECT_SCM function_arglist_optional '-' REAL
        {
                $$ = $2;
                SCM n = scm_difference ($4, SCM_UNDEFINED);
                MYREPARSE (@4, $1, REAL, n);
        }
-       | EXPECT_SCM function_arglist_closed_optional '-' NUMBER_IDENTIFIER
-       {
-               SCM n = scm_difference ($4, SCM_UNDEFINED);
-               $$ = check_scheme_arg (parser, @4, n, $2, $1);
-       }
-       | function_arglist_common_minus REPARSE bare_number
-       {
-               $$ = check_scheme_arg (parser, @3, $3, $1, $2);
-       }
        ;
 
 function_arglist_closed:
-       function_arglist_closed_common
-       | function_arglist_closed_nonbackup
+       function_arglist_closed_nonbackup
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_nonbackup DEFAULT
+       {
+               $$ = scm_cons (loc_on_music (@4, $1), $3);
+       }
        ;
 
 function_arglist_closed_common:
-       function_arglist_bare
+       EXPECT_NO_MORE_ARGS {
+               $$ = SCM_EOL;
+       }
        | EXPECT_SCM function_arglist_optional embedded_scm_arg_closed
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional bare_number
+       | EXPECT_SCM function_arglist_optional bare_number_common_closed
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional '-' UNSIGNED
-       {
-               SCM n = scm_difference ($4, SCM_UNDEFINED);
-               if (scm_is_true (scm_call_1 ($1, n))) {
-                       $$ = scm_cons (n, $2);
-               } else {
-                       Music *t = MY_MAKE_MUSIC ("FingeringEvent", @4);
-                       t->set_property ("digit", $4);
-                       $$ = t->unprotect ();
-                       if (scm_is_true (scm_call_1 ($1, $$)))
-                               $$ = scm_cons ($$, $2);
-                       else
-                               $$ = check_scheme_arg (parser, @3, n, $2, $1);
-               }
-               
-       }
-       | EXPECT_SCM function_arglist_closed_optional '-' REAL
+       | EXPECT_SCM function_arglist_optional '-' NUMBER_IDENTIFIER
        {
                $$ = check_scheme_arg (parser, @3,
                                       scm_difference ($4, SCM_UNDEFINED),
                                       $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional '-' NUMBER_IDENTIFIER
+       | EXPECT_SCM function_arglist_optional post_event_nofinger
        {
                $$ = check_scheme_arg (parser, @3,
-                                      scm_difference ($4, SCM_UNDEFINED),
-                                      $2, $1);
+                                      $3, $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional post_event_nofinger
+       | function_arglist_common_reparse REPARSE SCM_ARG
        {
                $$ = check_scheme_arg (parser, @3,
-                                      $3, $2, $1);
+                                      $3, $1, $2);
        }
-       | EXPECT_SCM function_arglist_closed_optional FRACTION
+       | function_arglist_common_reparse REPARSE bare_number_common_closed
        {
                $$ = check_scheme_arg (parser, @3,
-                                      $3, $2, $1);
+                                      $3, $1, $2);
        }
-       | EXPECT_SCM function_arglist_optional lyric_element
+       | function_arglist_common_reparse REPARSE symbol_list_arg
        {
-               $$ = check_scheme_arg (parser, @3,
-                                      $3, $2, $1);
+               $$ = check_scheme_arg (parser, @3, $3, $1, $2);
        }
        ;
 
 function_arglist_optional:
-       function_arglist_keep %prec FUNCTION_ARGLIST
-       | function_arglist_backup BACKUP
-       | EXPECT_OPTIONAL EXPECT_PITCH function_arglist_optional
+       function_arglist_backup
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_backup DEFAULT
        {
-               $$ = scm_cons ($1, $3);
-       }
-       | EXPECT_OPTIONAL EXPECT_DURATION function_arglist_optional
-       {
-               $$ = scm_cons ($1, $3);
+               $$ = scm_cons (loc_on_music (@4, $1), $3);
        }
+       | function_arglist_skip_backup BACKUP
        ;
 
-function_arglist_closed_optional:
-       function_arglist_closed_keep %prec FUNCTION_ARGLIST
-       | function_arglist_backup BACKUP
-       | EXPECT_OPTIONAL EXPECT_PITCH function_arglist_closed_optional
+function_arglist_skip_backup:
+       function_arglist_backup
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_backup
        {
-               $$ = scm_cons ($1, $3);
-       }
-       | EXPECT_OPTIONAL EXPECT_DURATION function_arglist_closed_optional
-       {
-               $$ = scm_cons ($1, $3);
+               $$ = scm_cons (loc_on_music (@3, $1), $3);
        }
        ;
 
@@ -1795,27 +2000,6 @@ scm_function_call_closed:
        SCM_FUNCTION function_arglist_closed {
                $$ = MAKE_SYNTAX ("music-function", @$,
                                         $1, $2);
-       } %prec FUNCTION_ARGLIST
-       ;
-
-function_arglist_bare:
-       EXPECT_NO_MORE_ARGS {
-               $$ = SCM_EOL;
-       }
-       | EXPECT_PITCH function_arglist_optional pitch_also_in_chords {
-               $$ = scm_cons ($3, $2);
-       }
-       | EXPECT_DURATION function_arglist_closed_optional duration_length {
-               $$ = scm_cons ($3, $2);
-       }
-       | EXPECT_OPTIONAL EXPECT_PITCH function_arglist_skip DEFAULT {
-               $$ = scm_cons ($1, $3);
-       }
-       | EXPECT_OPTIONAL EXPECT_DURATION function_arglist_skip DEFAULT {
-               $$ = scm_cons ($1, $3);
-       }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip DEFAULT {
-               $$ = scm_cons ($1, $3);
        }
        ;
 
@@ -1845,14 +2029,14 @@ complex_music:
        ;
 
 complex_music_prefix:
-       CONTEXT simple_string optional_id optional_context_mod {
+       CONTEXT symbol optional_id optional_context_mod {
                 Context_mod *ctxmod = unsmob_context_mod ($4);
                 SCM mods = SCM_EOL;
                 if (ctxmod)
                         mods = ctxmod->get_mods ();
                $$ = START_MAKE_SYNTAX ("context-specification", $2, $3, mods, SCM_BOOL_F);
        }
-       | NEWCONTEXT simple_string optional_id optional_context_mod {
+       | NEWCONTEXT symbol optional_id optional_context_mod {
                 Context_mod *ctxmod = unsmob_context_mod ($4);
                 SCM mods = SCM_EOL;
                 if (ctxmod)
@@ -1976,47 +2160,98 @@ re_rhythmed_music:
        ;
 
 context_change:
-       CHANGE STRING '=' STRING  {
-               $$ = MAKE_SYNTAX ("context-change", @$, scm_string_to_symbol ($2), $4);
+       CHANGE symbol '=' simple_string  {
+               $$ = MAKE_SYNTAX ("context-change", @$, $2, $4);
        }
        ;
 
 
-property_path_revved:
-       embedded_scm_closed {
-               $$ = scm_cons ($1, SCM_EOL);
-       }
-       | property_path_revved embedded_scm_closed {
-               $$ = scm_cons ($2, $1);
-       }
-       ;
-
 property_path:
-       property_path_revved  {
+       symbol_list_rev  {
                $$ = scm_reverse_x ($1, SCM_EOL);
        }
+       | symbol_list_rev property_path {
+               $$ = scm_reverse_x ($1, $2);
+       }
        ;
 
 property_operation:
-       STRING '=' scalar {
-               $$ = scm_list_3 (ly_symbol2scm ("assign"),
-                       scm_string_to_symbol ($1), $3);
+       symbol '=' scalar {
+               $$ = scm_list_3 (ly_symbol2scm ("assign"), $1, $3);
+       }
+       | UNSET symbol {
+               $$ = scm_list_2 (ly_symbol2scm ("unset"), $2);
        }
-       | UNSET simple_string {
-               $$ = scm_list_2 (ly_symbol2scm ("unset"),
-                       scm_string_to_symbol ($2));
+       | OVERRIDE property_path '=' scalar {
+               if (scm_ilength ($2) < 2) {
+                       parser->parser_error (@2, _("bad grob property path"));
+                       $$ = SCM_UNDEFINED;
+               } else {
+                       $$ = scm_cons (ly_symbol2scm ("push"),
+                                      scm_cons2 (scm_car ($2),
+                                                 $4,
+                                                 scm_cdr ($2)));
+               }
        }
-       | OVERRIDE simple_string property_path '=' scalar {
-               $$ = scm_append (scm_list_2 (scm_list_3 (ly_symbol2scm ("push"),
-                                                       scm_string_to_symbol ($2), $5),
-                                            $3));
+       | REVERT revert_arg {
+               $$ = scm_cons (ly_symbol2scm ("pop"), $2);
+       }
+       ;
+
+// This is all quite awkward for the sake of substantial backward
+// compatibility while at the same time allowing a more "natural" form
+// of specification not separating grob specification from grob
+// property path.  The purpose of this definition of revert_arg is to
+// allow the symbol list which specifies grob and property to revert
+// to be optionally be split into two parts after the grob (which in
+// this case is just the first element of the list).  symbol_list_part
+// is only one path component, but it can be parsed without lookahead,
+// so we can follow it with a synthetic BACKUP token when needed.  If
+// the first symbol_list_part already contains multiple elements (only
+// possible if a Scheme expression provides them), we just parse for
+// additional elements introduced by '.', which is what the
+// SYMBOL_LIST backup in connection with the immediately following
+// rule using symbol_list_arg does.
+//
+// As long as we don't have our coffers filled with both grob and at
+// least one grob property specification, the rest of the required
+// symbol list chain may be provided either with or without a leading
+// dot.  This is for both allowing the traditional
+// \revert Accidental #'color
+// as well as well as the "naive" form
+// \revert Accidental.color
+
+revert_arg:
+       revert_arg_backup BACKUP symbol_list_arg
+       {
+               $$ = $3;
        }
-       | REVERT simple_string embedded_scm {
-               $$ = scm_list_3 (ly_symbol2scm ("pop"),
-                       scm_string_to_symbol ($2), $3);
+       ;
+
+revert_arg_backup:
+       revert_arg_part
+       {
+               if (scm_is_null ($1)
+                   || scm_is_null (scm_cdr ($1)))
+                       MYBACKUP (SCM_ARG, $1, @1);
+               else
+                       MYBACKUP (SYMBOL_LIST, scm_reverse_x ($1, SCM_EOL), @1);
        }
        ;
 
+// revert_arg_part delivers results in reverse
+revert_arg_part:
+       symbol_list_part
+       | revert_arg_backup BACKUP SCM_ARG '.' symbol_list_part
+       {
+               $$ = scm_append_x (scm_list_2 ($5, $3));
+       }
+       | revert_arg_backup BACKUP SCM_ARG symbol_list_part
+       {
+               $$ = scm_append_x (scm_list_2 ($4, $3));
+       }               
+       ;
+
 context_def_mod:
        CONSISTS { $$ = ly_symbol2scm ("consists"); }
        | REMOVE { $$ = ly_symbol2scm ("remove"); }
@@ -2052,52 +2287,141 @@ context_mod:
        }
        ;
 
+// If defined, at least two members.
+grob_prop_spec:
+       symbol_list_rev
+       {
+               SCM l = scm_reverse_x ($1, SCM_EOL);
+               if (scm_is_pair (l)
+                   && to_boolean
+                   (scm_object_property (scm_car (l),
+                                         ly_symbol2scm ("is-grob?"))))
+                       l = scm_cons (ly_symbol2scm ("Bottom"), l);
+               if (scm_is_null (l) || scm_is_null (scm_cdr (l))) {
+                       parser->parser_error (@1, _ ("bad grob property path"));
+                       l = SCM_UNDEFINED;
+               }
+               $$ = l;
+       }
+       ;
+
+// If defined, at least three members
+grob_prop_path:
+       grob_prop_spec
+       {
+               if (!SCM_UNBNDP ($1) && scm_is_null (scm_cddr ($1)))
+               {
+                       parser->parser_error (@1, _ ("bad grob property path"));
+                       $$ = SCM_UNDEFINED;
+               }
+       }
+       | grob_prop_spec property_path
+       {
+               if (!SCM_UNBNDP ($1)) {
+                       $$ = scm_append_x (scm_list_2 ($1, $2));
+                       if (scm_is_null (scm_cddr ($$))) {
+                               parser->parser_error (@$, _ ("bad grob property path"));
+                               $$ = SCM_UNDEFINED;
+                       }
+               }
+
+       }
+       ;
+
+// Exactly two elements or undefined
 context_prop_spec:
-       simple_string {
-               if (!is_regular_identifier ($1))
-               {
-                       @$.error (_("Grob name should be alphanumeric"));
+       symbol_list_rev
+       {
+               SCM l = scm_reverse_x ($1, SCM_EOL);
+               switch (scm_ilength (l)) {
+               case 1:
+                       l = scm_cons (ly_symbol2scm ("Bottom"), l);
+               case 2:
+                       break;
+               default:
+                       parser->parser_error (@1, _ ("bad context property path"));
+                       l = SCM_UNDEFINED;
                }
-
-               $$ = scm_list_2 (ly_symbol2scm ("Bottom"),
-                       scm_string_to_symbol ($1));
-       }
-       | simple_string '.' simple_string {
-               $$ = scm_list_2 (scm_string_to_symbol ($1),
-                       scm_string_to_symbol ($3));
+               $$ = l;
        }
        ;
 
 simple_music_property_def:
-       OVERRIDE context_prop_spec property_path '=' scalar {
-               $$ = scm_append (scm_list_2 (scm_list_n (scm_car ($2),
-                               ly_symbol2scm ("OverrideProperty"),
-                               scm_cadr ($2),
-                               $5, SCM_UNDEFINED),
-                               $3));
-       }
-       | REVERT context_prop_spec embedded_scm {
-               $$ = scm_list_4 (scm_car ($2),
-                       ly_symbol2scm ("RevertProperty"),
-                       scm_cadr ($2),
-                       $3);
+       OVERRIDE grob_prop_path '=' scalar {
+               if (SCM_UNBNDP ($2))
+                       $$ = SCM_UNDEFINED;
+               else {
+                       $$ = scm_list_5 (scm_car ($2),
+                                        ly_symbol2scm ("OverrideProperty"),
+                                        scm_cadr ($2),
+                                        $4,
+                                        scm_cddr ($2));
+               }
+       }
+       | REVERT simple_revert_context revert_arg {
+               $$ = scm_list_4 ($2,
+                                ly_symbol2scm ("RevertProperty"),
+                                scm_car ($3),
+                                scm_cdr ($3));
        }
        | SET context_prop_spec '=' scalar {
-               $$ = scm_list_4 (scm_car ($2),
-                       ly_symbol2scm ("PropertySet"),
-                       scm_cadr ($2),
-                       $4);
+               if (SCM_UNBNDP ($2))
+                       $$ = SCM_UNDEFINED;
+               else
+                       $$ = scm_list_4 (scm_car ($2),
+                                        ly_symbol2scm ("PropertySet"),
+                                        scm_cadr ($2),
+                                        $4);
        }
        | UNSET context_prop_spec {
-               $$ = scm_list_3 (scm_car ($2),
-                       ly_symbol2scm ("PropertyUnset"),
-                       scm_cadr ($2));
+               if (SCM_UNBNDP ($2))
+                       $$ = SCM_UNDEFINED;
+               else
+                       $$ = scm_list_3 (scm_car ($2),
+                                        ly_symbol2scm ("PropertyUnset"),
+                                        scm_cadr ($2));
+       }
+       ;
+
+
+// This is all quite awkward for the sake of substantial backward
+// compatibility while at the same time allowing a more "natural" form
+// of specification not separating grob specification from grob
+// property path.  The purpose of this definition of
+// simple_revert_context is to allow the symbol list which specifies
+// grob and property to revert to be optionally be split into two
+// parts after the grob (which may be preceded by a context
+// specification, a case which we distinguish by checking whether the
+// first symbol is a valid grob symbol instead).
+//
+// See revert_arg above for the main work horse of this arrangement.
+// simple_revert_context just caters for the context and delegates the
+// rest of the job to revert_arg.
+
+simple_revert_context:
+       symbol_list_part
+       {
+               $1 = scm_reverse_x ($1, SCM_EOL);
+               if (scm_is_null ($1)
+                   || to_boolean
+                   (scm_object_property (scm_car ($1),
+                                         ly_symbol2scm ("is-grob?")))) {
+                       $$ = ly_symbol2scm ("Bottom");
+                       parser->lexer_->push_extra_token (SCM_IDENTIFIER, $1);
+               } else {
+                       $$ = scm_car ($1);
+                       parser->lexer_->push_extra_token (SCM_IDENTIFIER,
+                                                         scm_cdr ($1));
+               }
        }
        ;
 
 music_property_def:
        simple_music_property_def {
-               $$ = LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant ("property-operation"), scm_cons2 (parser->self_scm (), make_input (@$), $1));
+               if (SCM_UNBNDP ($1))
+                       $$ = MAKE_SYNTAX ("void-music", @1);
+               else
+                       $$ = LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant ("property-operation"), scm_cons2 (parser->self_scm (), make_input (@$), $1));
        }
        ;
 
@@ -2105,76 +2429,104 @@ string:
        STRING {
                $$ = $1;
        }
-       | STRING_IDENTIFIER {
-               $$ = $1;
-       }
-       | string '+' string {
-               $$ = scm_string_append (scm_list_2 ($1, $3));
-       }
+       | full_markup
        ;
 
 simple_string: STRING {
                $$ = $1;
        }
-       | LYRICS_STRING {
-               $$ = $1;
+       | embedded_scm_bare
+       {
+               if (scm_is_string ($1)) {
+                       $$ = $1;
+               } else {
+                       parser->parser_error (@1, (_ ("simple string expected")));
+                       $$ = scm_string (SCM_EOL);
+               }
        }
-       | STRING_IDENTIFIER {
-               $$ = $1;
+       ;
+
+symbol:
+       STRING {
+               $$ = scm_string_to_symbol ($1);
+       }
+       | embedded_scm_bare
+       {
+               // This is a bit of overkill but makes the same
+               // routine responsible for all symbol interpretations.
+               $$ = try_string_variants (ly_lily_module_constant ("symbol?"),
+                                         $1);
+               if (SCM_UNBNDP ($$))
+               {
+                       parser->parser_error (@1, (_ ("symbol expected")));
+                       // Generate a unique symbol in case it is used
+                       // for an assignment or similar
+                       $$ = scm_make_symbol (ly_string2scm ("undefined"));
+               }
        }
        ;
 
 scalar:
        embedded_scm_arg
+       | SCM_IDENTIFIER
        | bare_number
-       | FRACTION
-       | lyric_element
-       ;
-
-scalar_closed:
-       embedded_scm_arg_closed
-       | bare_number
-       | FRACTION
-       | lyric_element
+       // The following is a rather defensive variant of admitting
+       // negative numbers: the grammar would permit number_factor or
+       // even number_expression.  However, function arguments allow
+       // only this simple kind of negative number, so to have things
+       // like \tweak and \override behave reasonably similar, it
+       // makes sense to rule out things like -- which are rather an
+       // accent in function argument contexts.
+       | '-' bare_number
+       {
+               $$ = scm_difference ($2, SCM_UNDEFINED);
+       }
+       | STRING
+       | full_markup
        ;
 
-
 event_chord:
        simple_element post_events {
                // Let the rhythmic music iterator sort this mess out.
                if (scm_is_pair ($2)) {
-                       if (unsmob_pitch ($1)) {
-                               Music *n = MY_MAKE_MUSIC ("NoteEvent", @1);
-                               n->set_property ("pitch", $1);
-                               n->set_property ("duration",
-                                                parser->default_duration_.smobbed_copy ());
-                               $$ = n->unprotect ();
+                       $$ = make_music_from_simple (parser, @1, $1);
+                       if (unsmob_music ($$))
+                                unsmob_music ($$)->set_property ("articulations",
+                                                                 scm_reverse_x ($2, SCM_EOL));
+                        else
+                       {
+                                parser->parser_error (@1, _("music expected"));
+                               $$ = MAKE_SYNTAX ("void-music", @1);
                        }
-                       unsmob_music ($$)->set_property ("articulations",
-                                                        scm_reverse_x ($2, SCM_EOL));
                }
-       }
+       } %prec ':'
        | simple_chord_elements post_events     {
-               SCM elts = ly_append2 ($1, scm_reverse_x ($2, SCM_EOL));
-
-               Input i;
-               /* why is this giving wrong start location? -ns
-                * i = @$; */
-               i.set_location (@1, @2);
-               $$ = MAKE_SYNTAX ("event-chord", i, elts);
-       }
+               if (scm_is_pair ($2)) {
+                       if (unsmob_pitch ($1))
+                               $1 = make_chord_elements (@1,
+                                                         $1,
+                                                         parser->default_duration_.smobbed_copy (),
+                                                         SCM_EOL);
+
+                       SCM elts = ly_append2 ($1, scm_reverse_x ($2, SCM_EOL));
+
+                       $$ = MAKE_SYNTAX ("event-chord", @1, elts);
+               } else if (!unsmob_pitch ($1))
+                       $$ = MAKE_SYNTAX ("event-chord", @1, $1);
+               // A mere pitch drops through.
+       } %prec ':'
        | CHORD_REPETITION optional_notemode_duration post_events {
                Input i;
                i.set_location (@1, @3);
                $$ = MAKE_SYNTAX ("repetition-chord", i,
                                  $2, scm_reverse_x ($3, SCM_EOL));
-       }
+       } %prec ':'
        | MULTI_MEASURE_REST optional_notemode_duration post_events {
                Input i;
                i.set_location (@1, @3);
                $$ = MAKE_SYNTAX ("multi-measure-rest", i, $2,
                                  scm_reverse_x ($3, SCM_EOL));
-       }
+       } %prec ':'
        | command_element
        | note_chord_element
        ;
@@ -2195,7 +2547,7 @@ note_chord_element:
                m-> set_property ("elements", es);
                m->set_spot (@$);
                $$ = m->self_scm ();
-       }
+       } %prec ':'
        ;
 
 chord_body:
@@ -2203,6 +2555,7 @@ chord_body:
        {
                $$ = MAKE_SYNTAX ("event-chord", @$, scm_reverse_x ($2, SCM_EOL));
        }
+       | CHORD_BODY_IDENTIFIER
        ;
 
 chord_body_elements:
@@ -2216,16 +2569,16 @@ chord_body_elements:
 chord_body_element:
        pitch exclamations questions octave_check post_events
        {
-               int q = $3;
-               int ex = $2;
+               bool q = to_boolean ($3);
+               bool ex = to_boolean ($2);
                SCM check = $4;
                SCM post = $5;
 
                Music *n = MY_MAKE_MUSIC ("NoteEvent", @$);
                n->set_property ("pitch", $1);
-               if (q % 2)
+               if (q)
                        n->set_property ("cautionary", SCM_BOOL_T);
-               if (ex % 2 || q % 2)
+                if (ex || q)
                        n->set_property ("force-accidental", SCM_BOOL_T);
 
                if (scm_is_pair (post)) {
@@ -2294,40 +2647,10 @@ command_element:
        command_event {
                $$ = $1;
        }
-       | E_BRACKET_OPEN {
-               Music *m = MY_MAKE_MUSIC ("LigatureEvent", @$);
-               m->set_property ("span-direction", scm_from_int (START));
-               $$ = m->unprotect();
-       }
-       | E_BRACKET_CLOSE {
-               Music *m = MY_MAKE_MUSIC ("LigatureEvent", @$);
-               m->set_property ("span-direction", scm_from_int (STOP));
-               $$ = m->unprotect ();
-       }
-       | E_BACKSLASH {
-               $$ = MAKE_SYNTAX ("voice-separator", @$);
-       }
-       | '|'      {
-               SCM pipe = parser->lexer_->lookup_identifier ("pipeSymbol");
-
-               Music *m = unsmob_music (pipe);
-               if (m)
-               {
-                       m = m->clone ();
-                       m->set_spot (@$);
-                       $$ = m->unprotect ();
-               }
-               else
-                       $$ = MAKE_SYNTAX ("bar-check", @$);
-
-       }
        ;
 
 command_event:
-       E_TILDE {
-               $$ = MY_MAKE_MUSIC ("PesOrFlexaEvent", @$)->unprotect ();
-       }
-       | tempo_event {
+       tempo_event {
                $$ = $1;
        }
        ;
@@ -2338,8 +2661,22 @@ post_events:
                $$ = SCM_EOL;
        }
        | post_events post_event {
-               unsmob_music ($2)->set_spot (@2);
-               $$ = scm_cons ($2, $$);
+               $$ = $1;
+               if (Music *m = unsmob_music ($2))
+               {
+                       if (m->is_mus_type ("post-event-wrapper"))
+                       {
+                               for (SCM p = m->get_property ("elements");
+                                    scm_is_pair (p);
+                                    p = scm_cdr (p))
+                               {
+                                       $$ = scm_cons (scm_car (p), $$);
+                               }
+                       } else {
+                               m->set_spot (@2);
+                               $$ = scm_cons ($2, $$);
+                       }
+               }
        }
        ;
 
@@ -2349,9 +2686,12 @@ post_event_nofinger:
        }
        | script_dir music_function_call_closed {
                $$ = $2;
-               if ($1)
+               if (!unsmob_music ($2)->is_mus_type ("post-event")) {
+                       parser->parser_error (@2, _ ("post-event expected"));
+                       $$ = SCM_UNSPECIFIED;
+               } else if (!SCM_UNBNDP ($1))
                {
-                       unsmob_music ($$)->set_property ("direction", scm_from_int ($1));
+                       unsmob_music ($$)->set_property ("direction", $1);
                }
        }
        | HYPHEN {
@@ -2365,18 +2705,18 @@ post_event_nofinger:
                $$ = MY_MAKE_MUSIC ("ExtenderEvent", @$)->unprotect ();
        }
        | script_dir direction_reqd_event {
-               if ($1)
+               if (!SCM_UNBNDP ($1))
                {
                        Music *m = unsmob_music ($2);
-                       m->set_property ("direction", scm_from_int ($1));
+                       m->set_property ("direction", $1);
                }
                $$ = $2;
        }
        | script_dir direction_less_event {
-               if ($1)
+               if (!SCM_UNBNDP ($1))
                {
                        Music *m = unsmob_music ($2);
-                       m->set_property ("direction", scm_from_int ($1));
+                       m->set_property ("direction", $1);
                }
                $$ = $2;
        }
@@ -2402,66 +2742,19 @@ post_event:
 string_number_event:
        E_UNSIGNED {
                Music *s = MY_MAKE_MUSIC ("StringNumberEvent", @$);
-               s->set_property ("string-number", scm_from_int ($1));
+               s->set_property ("string-number", $1);
                $$ = s->unprotect ();
        }
        ;
 
-direction_less_char:
-       '['  {
-               $$ = ly_symbol2scm ("bracketOpenSymbol");
-       }
-       | ']'  {
-               $$ = ly_symbol2scm ("bracketCloseSymbol");
-       }
-       | '~'  {
-               $$ = ly_symbol2scm ("tildeSymbol");
-       }
-       | '('  {
-               $$ = ly_symbol2scm ("parenthesisOpenSymbol");
-       }
-       | ')'  {
-               $$ = ly_symbol2scm ("parenthesisCloseSymbol");
-       }
-       | E_EXCLAMATION  {
-               $$ = ly_symbol2scm ("escapedExclamationSymbol");
-       }
-       | E_OPEN  {
-               $$ = ly_symbol2scm ("escapedParenthesisOpenSymbol");
-       }
-       | E_CLOSE  {
-               $$ = ly_symbol2scm ("escapedParenthesisCloseSymbol");
-       }
-       | E_ANGLE_CLOSE  {
-               $$ = ly_symbol2scm ("escapedBiggerSymbol");
-       }
-       | E_ANGLE_OPEN  {
-               $$ = ly_symbol2scm ("escapedSmallerSymbol");
-       }
-       ;
-
 direction_less_event:
-       direction_less_char {
-               SCM predefd = parser->lexer_->lookup_identifier_symbol ($1);
-               Music *m = 0;
-               if (unsmob_music (predefd))
-               {
-                       m = unsmob_music (predefd)->clone ();
-                       m->set_spot (@$);
-               }
-               else
-               {
-                       m = MY_MAKE_MUSIC ("Music", @$);
-               }
-               $$ = m->unprotect ();
-       }
-       | string_number_event
+       string_number_event
        | EVENT_IDENTIFIER      {
                $$ = $1;
        }
        | tremolo_type  {
                Music *a = MY_MAKE_MUSIC ("TremoloEvent", @$);
-               a->set_property ("tremolo-type", scm_from_int ($1));
+               a->set_property ("tremolo-type", $1);
                $$ = a->unprotect ();
         }
        | event_function_event  
@@ -2483,42 +2776,44 @@ direction_reqd_event:
 
 octave_check:
        /**/ { $$ = SCM_EOL; }
-       | '='  { $$ = scm_from_int (0); }
-       | '=' sub_quotes { $$ = scm_from_int (-$2); }
-       | '=' sup_quotes { $$ = scm_from_int ($2); }
+       | '=' quotes { $$ = $2; }
        ;
 
+quotes:
+       /* empty */
+       {
+                $$ = SCM_INUM0;
+        }
+       | sub_quotes
+        | sup_quotes
+        ;
+
 sup_quotes:
        '\'' {
-               $$ = 1;
+               $$ = scm_from_int (1);
        }
        | sup_quotes '\'' {
-               $$ ++;
+               $$ = scm_oneplus ($1);
        }
        ;
 
 sub_quotes:
        ',' {
-               $$ = 1;
+               $$ = scm_from_int (-1);
        }
        | sub_quotes ',' {
-               $$++;
+               $$ = scm_oneminus ($1);
        }
        ;
 
 steno_pitch:
-       NOTENAME_PITCH  {
-               $$ = $1;
-       }
-       | NOTENAME_PITCH sup_quotes     {
-               Pitch p = *unsmob_pitch ($1);
-               p = p.transposed (Pitch ($2,0,0));
-               $$ = p.smobbed_copy ();
-       }
-       | NOTENAME_PITCH sub_quotes      {
-               Pitch p =* unsmob_pitch ($1);
-               p = p.transposed (Pitch (-$2,0,0));
-               $$ = p.smobbed_copy ();
+       NOTENAME_PITCH quotes {
+                if (!scm_is_eq (SCM_INUM0, $2))
+                {
+                        Pitch p = *unsmob_pitch ($1);
+                        p = p.transposed (Pitch (scm_to_int ($2),0,0));
+                        $$ = p.smobbed_copy ();
+                }
        }
        ;
 
@@ -2527,32 +2822,37 @@ ugh. duplication
 */
 
 steno_tonic_pitch:
-       TONICNAME_PITCH {
-               $$ = $1;
-       }
-       | TONICNAME_PITCH sup_quotes    {
-               Pitch p = *unsmob_pitch ($1);
-               p = p.transposed (Pitch ($2,0,0));
-               $$ = p.smobbed_copy ();
-       }
-       | TONICNAME_PITCH sub_quotes     {
-               Pitch p = *unsmob_pitch ($1);
-
-               p = p.transposed (Pitch (-$2,0,0));
-               $$ = p.smobbed_copy ();
+       TONICNAME_PITCH quotes {
+                if (!scm_is_eq (SCM_INUM0, $2))
+                {
+                        Pitch p = *unsmob_pitch ($1);
+                        p = p.transposed (Pitch (scm_to_int ($2),0,0));
+                        $$ = p.smobbed_copy ();
+                }
        }
        ;
 
 pitch:
-       steno_pitch {
-               $$ = $1;
+       steno_pitch
+       | PITCH_IDENTIFIER quotes {
+                if (!scm_is_eq (SCM_INUM0, $2))
+                {
+                        Pitch p = *unsmob_pitch ($1);
+                        p = p.transposed (Pitch (scm_to_int ($2),0,0));
+                        $$ = p.smobbed_copy ();
+                }
        }
-       | PITCH_IDENTIFIER
        ;
 
-pitch_also_in_chords:
-       pitch
-       | steno_tonic_pitch
+pitch_arg:
+       PITCH_ARG quotes {
+                if (!scm_is_eq (SCM_INUM0, $2))
+                {
+                        Pitch p = *unsmob_pitch ($1);
+                        p = p.transposed (Pitch (scm_to_int ($2),0,0));
+                        $$ = p.smobbed_copy ();
+                }
+       }
        ;
 
 gen_text_def:
@@ -2561,12 +2861,24 @@ gen_text_def:
                t->set_property ("text", $1);
                $$ = t->unprotect ();
        }
-       | simple_string {
+       | STRING {
                Music *t = MY_MAKE_MUSIC ("TextScriptEvent", @$);
                t->set_property ("text",
                        make_simple_markup ($1));
                $$ = t->unprotect ();
        }
+       | embedded_scm_closed
+       {
+               Music *m = unsmob_music ($1);
+               if (m && m->is_mus_type ("post-event"))
+                       $$ = $1;
+               else if (Text_interface::is_markup ($1)) {
+                       Music *t = MY_MAKE_MUSIC ("TextScriptEvent", @$);
+                       t->set_property ("text", $1);
+                       $$ = t->unprotect ();
+               } else
+                       parser->parser_error (@1, _ ("not an articulation"));
+       }
        ;
 
 fingering:
@@ -2587,8 +2899,8 @@ script_abbreviation:
        | '-'           {
                $$ = scm_from_locale_string ("Dash");
        }
-       | '|'           {
-               $$ = scm_from_locale_string ("Bar");
+       | '!'           {
+               $$ = scm_from_locale_string ("Bang");
        }
        | ANGLE_CLOSE   {
                $$ = scm_from_locale_string ("Larger");
@@ -2602,9 +2914,9 @@ script_abbreviation:
        ;
 
 script_dir:
-       '_'     { $$ = DOWN; }
-       | '^'   { $$ = UP; }
-       | '-'   { $$ = CENTER; }
+       '_'     { $$ = scm_from_int (DOWN); }
+       | '^'   { $$ = scm_from_int (UP); }
+       | '-'   { $$ = SCM_UNDEFINED; }
        ;
 
 duration_length:
@@ -2616,7 +2928,7 @@ duration_length:
 maybe_notemode_duration:
        {
                $$ = SCM_UNDEFINED;
-       }
+       } %prec ':'
        | multiplied_duration   {
                $$ = $1;
                parser->default_duration_ = *unsmob_duration ($$);
@@ -2633,21 +2945,21 @@ optional_notemode_duration:
        ;
 
 steno_duration:
-       bare_unsigned dots              {
-               int len = 0;
-               if (!is_duration ($1))
-                       parser->parser_error (@1, _f ("not a duration: %d", $1));
-               else
-                       len = intlog2 ($1);
-
-               $$ = Duration (len, $2).smobbed_copy ();
+       UNSIGNED dots           {
+               $$ = make_duration ($1, scm_to_int ($2));
+               if (SCM_UNBNDP ($$))
+               {
+                       parser->parser_error (@1, _ ("not a duration"));
+                       $$ = Duration ().smobbed_copy ();
+               }
        }
        | DURATION_IDENTIFIER dots      {
                Duration *d = unsmob_duration ($1);
-               Duration k (d->duration_log (), d->dot_count () + $2);
+               Duration k (d->duration_log (),
+                            d->dot_count () + scm_to_int ($2));
                k = k.compressed (d->factor ());
-               *d = k;
-               $$ = $1;
+                scm_remember_upto_here_1 ($1);
+               $$ = k.smobbed_copy ();
        }
        ;
 
@@ -2655,8 +2967,8 @@ multiplied_duration:
        steno_duration {
                $$ = $1;
        }
-       | multiplied_duration '*' bare_unsigned {
-               $$ = unsmob_duration ($$)->compressed ( $3) .smobbed_copy ();
+       | multiplied_duration '*' UNSIGNED {
+               $$ = unsmob_duration ($$)->compressed (scm_to_int ($3)).smobbed_copy ();
        }
        | multiplied_duration '*' FRACTION {
                Rational  m (scm_to_int (scm_car ($3)), scm_to_int (scm_cdr ($3)));
@@ -2667,20 +2979,20 @@ multiplied_duration:
 
 dots:
        /* empty */     {
-               $$ = 0;
+               $$ = SCM_INUM0;
        }
        | dots '.' {
-               $$ ++;
+               $$ = scm_oneplus ($1);
        }
        ;
 
 tremolo_type:
        ':'     {
-               $$ = 0;
+               $$ = SCM_INUM0;
        }
-       | ':' bare_unsigned {
-               if (!is_duration ($2))
-                       parser->parser_error (@2, _f ("not a duration: %d", $2));
+       | ':' UNSIGNED {
+               if (SCM_UNBNDP (make_duration ($2)))
+                       parser->parser_error (@2, _ ("not a duration"));
                $$ = $2;
        }
        ;
@@ -2689,6 +3001,18 @@ bass_number:
        UNSIGNED { $$ = $1; }
        | STRING { $$ = $1; }
        | full_markup { $$ = $1; }
+       | embedded_scm_bare
+       {
+               // as an integer, it needs to be non-negative, and otherwise
+               // it needs to be suitable as a markup.
+               if (scm_is_integer ($1)
+                   ? scm_is_true (scm_negative_p ($1))
+                   : !Text_interface::is_markup ($1))
+               {
+                       parser->parser_error (@1, _ ("bass number expected"));
+                       $$ = SCM_INUM0;
+               }
+       }
        ;
 
 figured_bass_alteration:
@@ -2730,38 +3054,23 @@ bass_figure:
        }
        | bass_figure figured_bass_modification  {
                Music *m = unsmob_music ($1);
-               if ($2 == ly_symbol2scm ("plus"))
-                       {
-                       m->set_property ("augmented", SCM_BOOL_T);
-                       }
-               else if ($2 == ly_symbol2scm ("slash"))
-                       {
-                       m->set_property ("diminished", SCM_BOOL_T);
-                       }
-               else if ($2 == ly_symbol2scm ("exclamation"))
-                       {
-                       m->set_property ("no-continuation", SCM_BOOL_T);
-                       }
-               else if ($2 == ly_symbol2scm ("backslash"))
-                       {
-                       m->set_property ("augmented-slash", SCM_BOOL_T);
-                       }
+               m->set_property ($2, SCM_BOOL_T);
        }
        ;
 
 
 figured_bass_modification:
        E_PLUS          {
-               $$ = ly_symbol2scm ("plus");
+               $$ = ly_symbol2scm ("augmented");
        }
        | E_EXCLAMATION {
-               $$ = ly_symbol2scm ("exclamation");
+               $$ = ly_symbol2scm ("no-continuation");
        }
        | '/'           {
-               $$ = ly_symbol2scm ("slash");
+               $$ = ly_symbol2scm ("diminished");
        }
        | E_BACKSLASH {
-               $$ = ly_symbol2scm ("backslash");
+               $$ = ly_symbol2scm ("augmented-slash");
        }
        ;
 
@@ -2792,18 +3101,22 @@ figure_spec:
 
 
 optional_rest:
-       /**/   { $$ = 0; }
-       | REST { $$ = 1; }
+       /**/   { $$ = SCM_BOOL_F; }
+       | REST { $$ = SCM_BOOL_T; }
        ;
 
 simple_element:
        pitch exclamations questions octave_check maybe_notemode_duration optional_rest {
                if (!parser->lexer_->is_note_state ())
                        parser->parser_error (@1, _ ("have to be in Note mode for notes"));
-               if ($2 || $3 || scm_is_number ($4) || !SCM_UNBNDP ($5) || $6)
+               if (!SCM_UNBNDP ($2)
+                    || !SCM_UNBNDP ($3)
+                    || scm_is_number ($4)
+                    || !SCM_UNBNDP ($5)
+                    || scm_is_true ($6))
                {
                        Music *n = 0;
-                       if ($6)
+                       if (scm_is_true ($6))
                                n = MY_MAKE_MUSIC ("RestEvent", @$);
                        else
                                n = MY_MAKE_MUSIC ("NoteEvent", @$);
@@ -2821,9 +3134,9 @@ simple_element:
                                n->set_property ("absolute-octave", scm_from_int (q-1));
                        }
                        
-                       if ($3 % 2)
+                       if (to_boolean ($3))
                                n->set_property ("cautionary", SCM_BOOL_T);
-                       if ($2 % 2 || $3 % 2)
+                       if (to_boolean ($2) || to_boolean ($3))
                                n->set_property ("force-accidental", SCM_BOOL_T);
                        
                        $$ = n->unprotect ();
@@ -2851,6 +3164,7 @@ simple_element:
        }
        ;
 
+// Can return a single pitch rather than a list.
 simple_chord_elements:
        new_chord {
                 if (!parser->lexer_->is_chord_state ())
@@ -2867,54 +3181,40 @@ simple_chord_elements:
        ;
 
 lyric_element:
-       lyric_markup {
+       full_markup {
+               if (!parser->lexer_->is_lyric_state ())
+                       parser->parser_error (@1, _ ("markup outside of text script or \\lyricmode"));
                $$ = $1;
        }
-       | LYRICS_STRING {
+       | STRING {
+               if (!parser->lexer_->is_lyric_state ())
+                       parser->parser_error (@1, _ ("unrecognized string, not in text script or \\lyricmode"));
                $$ = $1;
        }
+       | LYRIC_ELEMENT
        ;
 
-lyric_element_arg:
-       lyric_element
-       | lyric_element multiplied_duration post_events {
-               $$ = MAKE_SYNTAX ("lyric-event", @$, $1, $2);
-               if (scm_is_pair ($3))
-                       unsmob_music ($$)->set_property
-                               ("articulations", scm_reverse_x ($3, SCM_EOL));
-       }
-       | lyric_element post_event post_events {
-               $$ = MAKE_SYNTAX ("lyric-event", @$, $1,
-                                 parser->default_duration_.smobbed_copy ());
-               unsmob_music ($$)->set_property
-                       ("articulations", scm_cons ($2, scm_reverse_x ($3, SCM_EOL)));
-       }
-       | LYRIC_ELEMENT optional_notemode_duration post_events {
-               $$ = MAKE_SYNTAX ("lyric-event", @$, $1, $2);
-               if (scm_is_pair ($3))
-                       unsmob_music ($$)->set_property
-                               ("articulations", scm_reverse_x ($3, SCM_EOL));
-       }
-       ;
-
-
 lyric_element_music:
        lyric_element optional_notemode_duration post_events {
                $$ = MAKE_SYNTAX ("lyric-event", @$, $1, $2);
                if (scm_is_pair ($3))
                        unsmob_music ($$)->set_property
                                ("articulations", scm_reverse_x ($3, SCM_EOL));
-       }
+       } %prec ':'
        ;
 
+// Can return a single pitch rather than a list.
 new_chord:
-       steno_tonic_pitch optional_notemode_duration   {
-               $$ = make_chord_elements (@$, $1, $2, SCM_EOL);
+       steno_tonic_pitch maybe_notemode_duration   {
+               if (SCM_UNBNDP ($2))
+                       $$ = $1;
+               else
+                       $$ = make_chord_elements (@$, $1, $2, SCM_EOL);
        }
        | steno_tonic_pitch optional_notemode_duration chord_separator chord_items {
                SCM its = scm_reverse_x ($4, SCM_EOL);
                $$ = make_chord_elements (@$, $1, $2, scm_cons ($3, its));
-       }
+       } %prec ':'
        ;
 
 chord_items:
@@ -2961,23 +3261,23 @@ step_numbers:
        ;
 
 step_number:
-       bare_unsigned {
+       UNSIGNED {
                $$ = make_chord_step ($1, 0);
         }
-       | bare_unsigned '+' {
+       | UNSIGNED '+' {
                $$ = make_chord_step ($1, SHARP_ALTERATION);
        }
-       | bare_unsigned CHORD_MINUS {
+       | UNSIGNED CHORD_MINUS {
                $$ = make_chord_step ($1, FLAT_ALTERATION);
        }
        ;
 
 tempo_range:
-       bare_unsigned {
-               $$ = scm_from_int ($1);
-       }
-       | bare_unsigned '~' bare_unsigned {
-               $$ = scm_cons (scm_from_int ($1), scm_from_int ($3));
+       unsigned_number {
+               $$ = $1;
+       } %prec ':'
+       | unsigned_number '-' unsigned_number {
+               $$ = scm_cons ($1, $3);
        }
        ;
 
@@ -3016,65 +3316,78 @@ number_factor:
        | bare_number
        ;
 
+bare_number_common:
+       bare_number_common_closed
+       | REAL NUMBER_IDENTIFIER
+       {
+               $$ = scm_product ($1, $2);
+       }
+       ;
+
+bare_number_common_closed:
+       REAL
+       | NUMBER_IDENTIFIER
+       ;
 
 bare_number:
-       bare_number_closed
+       bare_number_common
+       | UNSIGNED
        | UNSIGNED NUMBER_IDENTIFIER    {
                $$ = scm_product ($1, $2);
        }
-       | REAL NUMBER_IDENTIFIER        {
-               $$ = scm_product ($1, $2);
-       }
        ;
 
 bare_number_closed:
        UNSIGNED
-       | REAL
-       | NUMBER_IDENTIFIER
-       ;
-
-bare_unsigned:
-       UNSIGNED {
-               $$ = scm_to_int ($1);
-       }
+       | bare_number_common_closed
        ;
 
 unsigned_number:
        UNSIGNED
        | NUMBER_IDENTIFIER
+       {
+               if (!scm_is_integer ($1)
+                   || scm_is_true (scm_negative_p ($1)))
+               {
+                       parser->parser_error (@1, _("not an unsigned integer"));
+                       $$ = SCM_INUM0;
+               }
+       }
+       | embedded_scm
+       {
+               if (!scm_is_integer ($1)
+                   || scm_is_true (scm_negative_p ($1)))
+               {
+                       parser->parser_error (@1, _("not an unsigned integer"));
+                       $$ = SCM_INUM0;
+               }
+       }
        ;
 
 exclamations:
-               { $$ = 0; }
-       | exclamations '!'      { $$ ++; }
+               { $$ = SCM_UNDEFINED; }
+       | exclamations '!'
+        {
+                if (SCM_UNBNDP ($1))
+                        $$ = SCM_BOOL_T;
+                else
+                        $$ = scm_not ($1);
+        }
        ;
 
 questions:
-               { $$ = 0; }
-       | questions '?' { $$ ++; }
-       ;
-
-/*
-This should be done more dynamically if possible.
-*/
-
-lyric_markup:
-       LYRIC_MARKUP_IDENTIFIER {
-               $$ = $1;
-       }
-       | LYRIC_MARKUP
-               { parser->lexer_->push_markup_state (); }
-       markup_top {
-               $$ = $3;
-               parser->lexer_->pop_state ();
-       }
+       { $$ = SCM_UNDEFINED; }
+       | questions '?'
+        {
+                if (SCM_UNBNDP ($1))
+                        $$ = SCM_BOOL_T;
+                else
+                        $$ = scm_not ($1);
+        }
        ;
 
 full_markup_list:
-       MARKUPLIST_IDENTIFIER {
-               $$ = $1;
-       }
-       | MARKUPLIST
+       MARKUPLIST
                { parser->lexer_->push_markup_state (); }
        markup_list {
                $$ = $3;
@@ -3083,10 +3396,7 @@ full_markup_list:
        ;
 
 full_markup:
-       MARKUP_IDENTIFIER {
-               $$ = $1;
-       }
-       | MARKUP
+       MARKUP
                { parser->lexer_->push_markup_state (); }
        markup_top {
                $$ = $3;
@@ -3098,8 +3408,10 @@ markup_top:
        markup_list {
                $$ = scm_list_2 (ly_lily_module_constant ("line-markup"),  $1);
        }
-       | markup_head_1_list simple_markup      {
-               $$ = scm_car (scm_call_2 (ly_lily_module_constant ("map-markup-command-list"), $1, scm_list_1 ($2)));
+       | markup_head_1_list simple_markup
+       {
+               $$ = scm_car (MAKE_SYNTAX ("composed-markup-list",
+                                          @2, $1, scm_list_1 ($2)));
        }
        | simple_markup {
                $$ = $1;
@@ -3122,13 +3434,14 @@ markup_scm:
                        
 
 markup_list:
-       MARKUPLIST_IDENTIFIER {
+       markup_composed_list {
                $$ = $1;
        }
-       | markup_composed_list {
-               $$ = $1;
-       }
-       | markup_braced_list {
+       | markup_uncomposed_list
+       ;
+
+markup_uncomposed_list:
+       markup_braced_list {
                $$ = $1;
        }
        | markup_command_list {
@@ -3141,9 +3454,9 @@ markup_list:
        ;
 
 markup_composed_list:
-       markup_head_1_list markup_braced_list {
-               $$ = scm_call_2 (ly_lily_module_constant ("map-markup-command-list"), $1, $2);
-
+       markup_head_1_list markup_uncomposed_list {
+               $$ = MAKE_SYNTAX ("composed-markup-list",
+                                 @2, $1, $2);
        }
        ;
 
@@ -3207,22 +3520,11 @@ simple_markup:
        STRING {
                $$ = make_simple_markup ($1);
        }
-       | MARKUP_IDENTIFIER {
-               $$ = $1;
-       }
-       | LYRIC_MARKUP_IDENTIFIER {
-               $$ = $1;
-       }
-       | STRING_IDENTIFIER {
-               $$ = $1;
-       }
        | SCORE {
                SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
                parser->lexer_->push_note_state (nn);
        } '{' score_body '}' {
-               Score * sc = $4;
-               $$ = scm_list_2 (ly_lily_module_constant ("score-markup"), sc->self_scm ());
-               sc->unprotect ();
+               $$ = scm_list_2 (ly_lily_module_constant ("score-markup"), $4);
                parser->lexer_->pop_state ();
        }
        | MARKUP_FUNCTION markup_command_basic_arguments {
@@ -3235,9 +3537,10 @@ simple_markup:
        ;
 
 markup:
-       markup_head_1_list simple_markup        {
-               SCM mapper = ly_lily_module_constant ("map-markup-command-list");
-               $$ = scm_car (scm_call_2 (mapper, $1, scm_list_1 ($2)));
+       markup_head_1_list simple_markup
+       {
+               $$ = scm_car (MAKE_SYNTAX ("composed-markup-list",
+                                          @2, $1, scm_list_1 ($2)));
        }
        | simple_markup {
                $$ = $1;
@@ -3252,10 +3555,12 @@ Lily_parser::set_yydebug (bool x)
        yydebug = x;
 }
 
-void
+SCM
 Lily_parser::do_yyparse ()
 {
-       yyparse (this);
+        SCM retval = SCM_UNDEFINED;
+       yyparse (this, &retval);
+        return retval;
 }
 
 
@@ -3271,10 +3576,7 @@ otherwise, we have to import music classes into the lexer.
 int
 Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
 {
-       if (scm_is_string (sid)) {
-               *destination = sid;
-               return STRING_IDENTIFIER;
-       } else if (unsmob_book (sid)) {
+       if (unsmob_book (sid)) {
                Book *book =  unsmob_book (sid)->clone ();
                *destination = book->self_scm ();
                book->unprotect ();
@@ -3294,18 +3596,9 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
                 *destination = unsmob_context_mod (sid)->smobbed_copy ();
 
                 return CONTEXT_MOD_IDENTIFIER;
-       } else if (unsmob_score (sid)) {
-               Score *score = new Score (*unsmob_score (sid));
-               *destination = score->self_scm ();
-
-               score->unprotect ();
-               return SCORE_IDENTIFIER;
        } else if (Music *mus = unsmob_music (sid)) {
                mus = mus->clone ();
                *destination = mus->self_scm ();
-               unsmob_music (*destination)->
-                       set_property ("origin", make_input (last_input_));
-
                bool is_event = mus->is_mus_type ("post-event");
                mus->unprotect ();
                return is_event ? EVENT_IDENTIFIER : MUSIC_IDENTIFIER;
@@ -3322,14 +3615,6 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
                *destination = p->self_scm ();
                p->unprotect ();
                return OUTPUT_DEF_IDENTIFIER;
-       } else if (Text_interface::is_markup (sid)) {
-               *destination = sid;
-               if (is_lyric_state ())
-                       return LYRIC_MARKUP_IDENTIFIER;
-               return MARKUP_IDENTIFIER;
-       } else if (Text_interface::is_markup_list (sid)) {
-               *destination = sid;
-               return MARKUPLIST_IDENTIFIER;
        }
 
        return -1;
@@ -3351,14 +3636,34 @@ get_next_unique_lyrics_context_id ()
        return scm_from_locale_string (s);
 }
 
+// check_scheme_arg checks one argument with a given predicate for use
+// in an argument list and throws a syntax error if it is unusable.
+// The argument is prepended to the argument list in any case.  After
+// throwing a syntax error, the argument list is terminated with #f as
+// its last cdr in order to mark it as uncallable while not losing
+// track of its total length.
+//
+// There are a few special considerations: if optional argument disp
+// is given (otherwise it defaults to SCM_UNDEFINED), it will be used
+// instead of arg in a prospective error message.  This is useful if
+// arg is not the actual argument but rather a transformation of it.
+//
+// If arg itself is SCM_UNDEFINED, the predicate is considered false
+// and an error message using disp is produced unconditionally.
+
 SCM check_scheme_arg (Lily_parser *parser, Input loc,
-                     SCM arg, SCM args, SCM pred)
+                     SCM arg, SCM args, SCM pred, SCM disp)
 {
-       args = scm_cons (arg, args);
-       if (scm_is_true (scm_call_1 (pred, arg)))
-               return args;
+       if (SCM_UNBNDP (arg))
+               args = scm_cons (disp, args);
+       else {
+               args = scm_cons (arg, args);
+               if (scm_is_true (scm_call_1 (pred, arg)))
+                       return args;
+       }
        scm_set_cdr_x (scm_last_pair (args), SCM_EOL);
-       MAKE_SYNTAX ("argument-error", loc, scm_length (args), pred, arg);
+       MAKE_SYNTAX ("argument-error", loc, scm_length (args), pred,
+                    SCM_UNBNDP (disp) ? arg : disp);
        scm_set_cdr_x (scm_last_pair (args), SCM_BOOL_F);
        return args;
 }
@@ -3374,23 +3679,106 @@ SCM loc_on_music (Input loc, SCM arg)
        return arg;
 }
 
+SCM
+try_string_variants (SCM pred, SCM str)
+{
+       // a matching predicate is always ok
+       if (scm_is_true (scm_call_1 (pred, str)))
+               return str;
+       // a symbol may be interpreted as a list of symbols if it helps
+       if (scm_is_symbol (str)) {
+               str = scm_list_1 (str);
+               if (scm_is_true (scm_call_1 (pred, str)))
+                       return str;
+               return SCM_UNDEFINED;
+       }
+
+       // If this cannot be a string representation of a symbol list,
+       // we are through.
+
+       if (!is_regular_identifier (str, true))
+               return SCM_UNDEFINED;
+
+       str = scm_string_split (str, SCM_MAKE_CHAR ('.'));
+       for (SCM p = str; scm_is_pair (p); p = scm_cdr (p))
+               scm_set_car_x (p, scm_string_to_symbol (scm_car (p)));
+
+       // Let's attempt the symbol list interpretation first.
+
+       if (scm_is_true (scm_call_1 (pred, str)))
+               return str;
+
+       // If there is just one symbol in the list, we might interpret
+       // it as a single symbol
+
+       if (scm_is_null (scm_cdr (str)))
+       {
+               str = scm_car (str);
+               if (scm_is_true (scm_call_1 (pred, str)))
+                       return str;
+       }
+
+       return SCM_UNDEFINED;
+}
+
 bool
-is_regular_identifier (SCM id)
+is_regular_identifier (SCM id, bool multiple)
 {
+  if (!scm_is_string (id))
+         return false;
+
   string str = ly_scm2string (id);
-  char const *s = str.c_str ();
 
-  bool v = true;
-#if 0
-  isalpha (*s);
-  s++;
-#endif
-  while (*s && v)
-   {
-        v = v && isalnum (*s);
-        s++;
-   }
-  return v;
+  bool middle = false;
+
+  for (string::iterator it=str.begin(); it != str.end (); it++)
+  {
+         int c = *it & 0xff;
+         if ((c >= 'a' && c <= 'z')
+             || (c >= 'A' && c <= 'Z')
+             || c > 0x7f)
+                 middle = true;
+         else if (middle && (c == '-' || c == '_' || (multiple && c == '.')))
+                 middle = false;
+         else
+                 return false;
+  }
+  return middle;
+}
+
+SCM
+make_music_from_simple (Lily_parser *parser, Input loc, SCM simple)
+{
+       if (unsmob_music (simple))
+               return simple;
+       if (parser->lexer_->is_note_state ()) {
+               if (scm_is_symbol (simple)) {
+                       Music *n = MY_MAKE_MUSIC ("NoteEvent", loc);
+                       n->set_property ("duration", parser->default_duration_.smobbed_copy ());
+                       n->set_property ("drum-type", simple);
+                       return n->unprotect ();
+               }
+               if (unsmob_pitch (simple)) {
+                       Music *n = MY_MAKE_MUSIC ("NoteEvent", loc);
+                       n->set_property ("duration", parser->default_duration_.smobbed_copy ());
+                       n->set_property ("pitch", simple);
+                       return n->unprotect ();
+               }
+               return simple;
+       } else if (parser->lexer_->is_lyric_state ()) {
+               if (Text_interface::is_markup (simple))
+                       return MAKE_SYNTAX ("lyric-event", loc, simple,
+                                           parser->default_duration_.smobbed_copy ());
+       } else if (parser->lexer_->is_chord_state ()) {
+               if (unsmob_pitch (simple))
+                       return MAKE_SYNTAX
+                               ("event-chord",
+                                loc,
+                                make_chord_elements (loc, simple,
+                                                     parser->default_duration_.smobbed_copy (),
+                                                     SCM_EOL));
+       }
+       return simple;
 }
 
 Music *
@@ -3407,23 +3795,21 @@ make_simple_markup (SCM a)
        return a;
 }
 
-bool
-is_duration (int t)
-{
-  return t && t == 1 << intlog2 (t);
-}
-
-void
-set_music_properties (Music *p, SCM a)
+SCM
+make_duration (SCM d, int dots)
 {
-  for (SCM k = a; scm_is_pair (k); k = scm_cdr (k))
-       p->set_property (scm_caar (k), scm_cdar (k));
+       int t = scm_to_int (d);
+       if (t > 0 && (t & (t-1)) == 0)
+               return Duration (intlog2 (t), dots).smobbed_copy ();
+       else
+               return SCM_UNDEFINED;
 }
 
-
 SCM
-make_chord_step (int step, Rational alter)
+make_chord_step (SCM step_scm, Rational alter)
 {
+        int step = scm_to_int (step_scm);
+
        if (step == 7)
                alter += FLAT_ALTERATION;
 
index c0c9acc89306268535dca2c3a13b2fc56e0b4d54..654edc35be3ce9751e29c4ac1362742ac6f5f5a9 100644 (file)
@@ -224,8 +224,8 @@ Part_combine_iterator::kill_mmrest (int in)
   if (!mmrest_event_)
     {
       mmrest_event_ = new Stream_event
-      (handles_[in].get_context ()->make_event_class
-       (ly_symbol2scm ("multi-measure-rest-event")));
+        (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"),
+                     ly_symbol2scm ("multi-measure-rest-event")));
       mmrest_event_->set_property ("duration", SCM_EOL);
       mmrest_event_->unprotect ();
     }
@@ -256,15 +256,16 @@ Part_combine_iterator::unisono (bool silent)
       if (playing_state_ != UNISONO
           && newstate == UNISONO)
         {
-          Context *out = (last_playing_ == SOLO2 ? second_iter_ : first_iter_)
-                         ->get_outlet ();
           if (!unisono_event_)
             {
               unisono_event_ = new Stream_event
-              (out->make_event_class (ly_symbol2scm ("unisono-event")));
+                (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"),
+                             ly_symbol2scm ("unisono-event")));
               unisono_event_->unprotect ();
             }
 
+          Context *out = (last_playing_ == SOLO2 ? second_iter_ : first_iter_)
+                         ->get_outlet ();
           out->event_source ()->broadcast (unisono_event_);
           playing_state_ = UNISONO;
         }
@@ -290,8 +291,8 @@ Part_combine_iterator::solo1 ()
           if (!solo_one_event_)
             {
               solo_one_event_ = new Stream_event
-              (first_iter_->get_outlet ()->make_event_class
-               (ly_symbol2scm ("solo-one-event")));
+                (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"),
+                             ly_symbol2scm ("solo-one-event")));
               solo_one_event_->unprotect ();
             }
 
@@ -317,8 +318,8 @@ Part_combine_iterator::solo2 ()
           if (!solo_two_event_)
             {
               solo_two_event_ = new Stream_event
-              (second_iter_->get_outlet ()->make_event_class
-               (ly_symbol2scm ("solo-two-event")));
+                (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"),
+                             ly_symbol2scm ("solo-two-event")));
               solo_two_event_->unprotect ();
             }
 
@@ -406,6 +407,7 @@ Part_combine_iterator::construct_children ()
     "DynamicLineSpanner",
     "Tie",
     "Dots",
+    "MultiMeasureRest",
     "Rest",
     "Slur",
     "TextScript",
@@ -431,11 +433,6 @@ Part_combine_iterator::construct_children ()
                             ly_symbol2scm ("horizontal-shift"), horizontalShiftOne_);
   execute_pushpop_property (two, ly_symbol2scm ("NoteColumn"),
                             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));
-  execute_pushpop_property (two, ly_symbol2scm ("MultiMeasureRest"),
-                            ly_symbol2scm ("staff-position"), scm_from_int (-4));
 
 }
 
index 2b1ff3eb5b531bca251b42fcf059e744ee98476a..7c3b3e965b56f171ef2e3761c7c9a85867581ad0 100644 (file)
@@ -36,7 +36,7 @@ void
 Partial_iterator::process (Moment m)
 {
   if (Duration * dur
-      = unsmob_duration (get_music ()->get_property ("partial-duration")))
+      = unsmob_duration (get_music ()->get_property ("duration")))
     {
       Context *ctx = get_outlet ();
       Moment now = ctx->now_mom ();
index 1801ae286d3fa8e9ae3e02611f9f09b6730eb411..544ce974614c253cf89d7952464171d20320c6c1 100644 (file)
@@ -36,10 +36,25 @@ LY_DEFINE (ly_encode_string_for_pdf, "ly:encode-string-for-pdf",
   char const *charset = "UTF-8"; // Input is ALWAYS UTF-8!
   gsize bytes_written = 0;
 
+#if 0
+
   /* First, try to convert to ISO-8859-1 (no encodings required). This will
    * fail, if the string contains accented characters, so we do not check
    * for errors. */
   g = g_convert (p, -1, "ISO-8859-1", charset, 0, &bytes_written, 0);
+
+#else
+
+  /* In contrast to the above comment, we do _not_ try full ISO-8859-1
+   * since a number of Ghostscript versions fail to properly convert
+   * this into PDF.  UTF-16BE, in contrast, works better with recent
+   * versions of Ghostscript.
+   */
+
+  g = g_convert (p, -1, "ASCII", charset, 0, &bytes_written, 0);
+
+#endif
+
   /* If that fails, we have to resolve to full UTF-16BE */
   if (!g)
     {
index 4e19544d41823b6e21a5e0003d0a6616641a4745..dfd23a871af1080ce57e8b4d9b862c6745c4d7f3 100644 (file)
@@ -56,7 +56,7 @@ Performance::output (Midi_stream &midi_stream) const
   for (vsize i = 0; i < audio_staffs_.size (); i++)
     {
       Audio_staff *s = audio_staffs_[i];
-      debug_output ("[" + to_string (i), true);
+      debug_output ("[" + ::to_string (i), true);
       s->output (midi_stream, i, ports_);
       debug_output ("]", false);
     }
index 123878b644b7e753e876af2f3ee18013e6f0547b..6d9aac7af68d64fb5b7220acc2ebccb0f37435d0 100644 (file)
 #include "international.hh"
 #include "note-column.hh"
 #include "slur.hh"
+#include "slur-proto-engraver.hh"
 #include "spanner.hh"
 #include "stream-event.hh"
 #include "warn.hh"
 
 #include "translator.icc"
 
-/*
-  NOTE NOTE NOTE
-
-  This is largely similar to Slur_engraver. Check if fixes
-  apply there too.
-
-  (on principle, engravers don't use inheritance for code sharing)
-
- */
-
-/*
-  It is possible that a slur starts and ends on the same note.  At
-  least, it is for phrasing slurs: a note can be both beginning and
-  ending of a phrase.
-*/
-class Phrasing_slur_engraver : public Engraver
+class Phrasing_slur_engraver : public Slur_proto_engraver
 {
-  vector<Stream_event *> start_events_;
-  vector<Stream_event *> stop_events_;
-  vector<Grob *> slurs_;
-  vector<Grob *> end_slurs_;
-  vector<Grob_info> objects_to_acknowledge_;
-
 protected:
   DECLARE_TRANSLATOR_LISTENER (phrasing_slur);
-  DECLARE_ACKNOWLEDGER (inline_accidental);
-  DECLARE_ACKNOWLEDGER (fingering);
-  DECLARE_ACKNOWLEDGER (note_column);
   DECLARE_ACKNOWLEDGER (slur);
-  DECLARE_ACKNOWLEDGER (script);
-  DECLARE_ACKNOWLEDGER (dots);
-  DECLARE_ACKNOWLEDGER (text_script);
-  DECLARE_ACKNOWLEDGER (tie);
-  DECLARE_ACKNOWLEDGER (tuplet_number);
-
-  void acknowledge_extra_object (Grob_info);
-  void stop_translation_timestep ();
-  void process_music ();
-
-  virtual void finalize ();
-  virtual void derived_mark () const;
 
 public:
   TRANSLATOR_DECLARATIONS (Phrasing_slur_engraver);
 };
 
-Phrasing_slur_engraver::Phrasing_slur_engraver ()
+Phrasing_slur_engraver::Phrasing_slur_engraver () :
+  Slur_proto_engraver (0, "PhrasingSlur", "phrasing slur", "phrasing-slur-event")
 {
 }
 
-void
-Phrasing_slur_engraver::derived_mark () const
-{
-  for (vsize i = start_events_.size (); i--;)
-    scm_gc_mark (start_events_[i]->self_scm ());
-  for (vsize i = stop_events_.size (); i--;)
-    scm_gc_mark (stop_events_[i]->self_scm ());
-}
-
 IMPLEMENT_TRANSLATOR_LISTENER (Phrasing_slur_engraver, phrasing_slur);
 void
 Phrasing_slur_engraver::listen_phrasing_slur (Stream_event *ev)
 {
-  Direction d = to_dir (ev->get_property ("span-direction"));
-  if (d == START)
-    start_events_.push_back (ev);
-  else if (d == STOP)
-    stop_events_.push_back (ev);
-  else ev->origin ()->warning (_f ("direction of %s invalid: %d",
-                                     "phrasing-slur-event", int (d)));
-}
-
-void
-Phrasing_slur_engraver::acknowledge_note_column (Grob_info info)
-{
-  Grob *e = info.grob ();
-  for (vsize i = slurs_.size (); i--;)
-    Slur::add_column (slurs_[i], e);
-  for (vsize i = end_slurs_.size (); i--;)
-    Slur::add_column (end_slurs_[i], e);
-}
-
-void
-Phrasing_slur_engraver::acknowledge_extra_object (Grob_info info)
-{
-  objects_to_acknowledge_.push_back (info);
-}
-
-void
-Phrasing_slur_engraver::acknowledge_inline_accidental (Grob_info info)
-{
-  acknowledge_extra_object (info);
-}
-
-void
-Phrasing_slur_engraver::acknowledge_dots (Grob_info info)
-{
-  acknowledge_extra_object (info);
-}
-
-void
-Phrasing_slur_engraver::acknowledge_fingering (Grob_info info)
-{
-  acknowledge_extra_object (info);
-}
-
-void
-Phrasing_slur_engraver::acknowledge_tuplet_number (Grob_info info)
-{
-  acknowledge_extra_object (info);
-}
-
-void
-Phrasing_slur_engraver::acknowledge_script (Grob_info info)
-{
-  if (!info.grob ()->internal_has_interface (ly_symbol2scm ("dynamic-interface")))
-    acknowledge_extra_object (info);
-}
-
-void
-Phrasing_slur_engraver::acknowledge_text_script (Grob_info info)
-{
-  acknowledge_extra_object (info);
-}
-
-void
-Phrasing_slur_engraver::acknowledge_tie (Grob_info info)
-{
-  acknowledge_extra_object (info);
+  internal_listen_slur (ev);
 }
 
 void
@@ -167,146 +59,6 @@ Phrasing_slur_engraver::acknowledge_slur (Grob_info info)
   acknowledge_extra_object (info);
 }
 
-void
-Phrasing_slur_engraver::finalize ()
-{
-  for (vsize i = 0; i < slurs_.size (); i++)
-    {
-      slurs_[i]->warning (_ ("unterminated phrasing slur"));
-      slurs_[i]->suicide ();
-    }
-  slurs_.clear ();
-}
-
-void
-Phrasing_slur_engraver::process_music ()
-{
-  for (vsize i = 0; i < stop_events_.size (); i++)
-    {
-      Stream_event *ev = stop_events_[i];
-      string id = robust_scm2string (ev->get_property ("spanner-id"), "");
-
-      // Find the slurs that are ended with this event (by checking the spanner-id)
-      bool ended = false;
-      for (vsize j = slurs_.size (); j--;)
-        {
-          if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""))
-            {
-              ended = true;
-              end_slurs_.push_back (slurs_[j]);
-              slurs_.erase (slurs_.begin () + j);
-            }
-        }
-      if (ended)
-        {
-          // Ignore redundant stop events for this id
-          for (vsize j = stop_events_.size (); --j > i;)
-            {
-              if (id == robust_scm2string (stop_events_[j]->get_property ("spanner-id"), ""))
-                stop_events_.erase (stop_events_.begin () + j);
-            }
-        }
-      else
-        ev->origin ()->warning (_ ("cannot end phrasing slur"));
-    }
-
-  vsize old_slurs = slurs_.size ();
-  for (vsize i = start_events_.size (); i--;)
-    {
-      Stream_event *ev = start_events_[i];
-      string id = robust_scm2string (ev->get_property ("spanner-id"), "");
-      Direction updown = to_dir (ev->get_property ("direction"));
-
-      bool completed;
-      for (vsize j = slurs_.size (); !(completed = (j-- == 0));)
-        {
-          // Check if we already have a slur with the same spanner-id.
-          if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""))
-            {
-              if (j < old_slurs)
-                {
-                  // We already have an old slur, so give a warning
-                  // and completely ignore the new slur.
-                  ev->origin ()->warning (_ ("already have phrasing slur"));
-                  start_events_.erase (start_events_.begin () + i);
-                  break;
-                }
-
-              // If this slur event has no direction, it will not
-              // contribute anything new to the existing slur(s), so
-              // we can ignore it.
-
-              if (!updown)
-                break;
-
-              Stream_event *c = unsmob_stream_event (slurs_[j]->get_property ("cause"));
-
-              if (!c)
-                {
-                  slurs_[j]->programming_error ("phrasing slur without a cause");
-                  continue;
-                }
-
-              Direction slur_dir = to_dir (c->get_property ("direction"));
-
-              // If the existing slur does not have a direction yet,
-              // we'd rather take the new one.
-
-              if (!slur_dir)
-                {
-                  slurs_[j]->suicide ();
-                  slurs_.erase (slurs_.begin () + j);
-                  continue;
-                }
-
-              // If the existing slur has the same direction as ours, drop ours
-
-              if (slur_dir == updown)
-                break;
-            }
-        }
-      // If the loop completed, our slur is new
-      if (completed)
-        {
-          Grob *slur = make_spanner ("PhrasingSlur", ev->self_scm ());
-          slur->set_property ("spanner-id", ly_string2scm (id));
-          if (updown)
-            set_grob_direction (slur, updown);
-          slurs_.push_back (slur);
-        }
-    }
-}
-
-void
-Phrasing_slur_engraver::stop_translation_timestep ()
-{
-  if (Grob *g = unsmob_grob (get_property ("currentCommandColumn")))
-    {
-      for (vsize i = 0; i < end_slurs_.size (); i++)
-        Slur::add_extra_encompass (end_slurs_[i], g);
-
-      if (!start_events_.size ())
-        for (vsize i = 0; i < slurs_.size (); i++)
-          Slur::add_extra_encompass (slurs_[i], g);
-    }
-
-  for (vsize i = 0; i < end_slurs_.size (); i++)
-    {
-      Spanner *s = dynamic_cast<Spanner *> (end_slurs_[i]);
-      if (!s->get_bound (RIGHT))
-        s->set_bound (RIGHT, unsmob_grob (get_property ("currentMusicalColumn")));
-      announce_end_grob (s, SCM_EOL);
-    }
-
-  for (vsize i = 0; i < objects_to_acknowledge_.size (); i++)
-    Slur::auxiliary_acknowledge_extra_object (objects_to_acknowledge_[i], slurs_, end_slurs_);
-
-  objects_to_acknowledge_.clear ();
-  end_slurs_.clear ();
-  start_events_.clear ();
-  stop_events_.clear ();
-}
-
 ADD_ACKNOWLEDGER (Phrasing_slur_engraver, inline_accidental);
 ADD_ACKNOWLEDGER (Phrasing_slur_engraver, fingering)
 ADD_ACKNOWLEDGER (Phrasing_slur_engraver, note_column);
@@ -314,7 +66,7 @@ ADD_ACKNOWLEDGER (Phrasing_slur_engraver, slur);
 ADD_ACKNOWLEDGER (Phrasing_slur_engraver, script);
 ADD_ACKNOWLEDGER (Phrasing_slur_engraver, dots);
 ADD_ACKNOWLEDGER (Phrasing_slur_engraver, text_script);
-ADD_ACKNOWLEDGER (Phrasing_slur_engraver, tie);
+ADD_END_ACKNOWLEDGER (Phrasing_slur_engraver, tie);
 ADD_ACKNOWLEDGER (Phrasing_slur_engraver, tuplet_number);
 
 ADD_TRANSLATOR (Phrasing_slur_engraver,
index 0433325523d9c9dbf4e20c9993fed55ee6308043..238d235e72652853f0dda3850f05c37edef062a6 100644 (file)
@@ -172,7 +172,7 @@ LY_DEFINE (ly_set_middle_C_x, "ly:set-middle-C!",
            1, 0, 0, (SCM context),
            "Set the @code{middleCPosition} variable in @var{context}"
            " based on the variables @code{middleCClefPosition} and"
-           " middleCOffset.")
+           " @code{middleCOffset}.")
 {
   LY_ASSERT_SMOB (Context, context, 1);
 
index ef49b217d14ff2f2dad2fc79afa604c25a9a675f..c2a02e71d9e213a2db91bb409955a5f7e5277bec 100644 (file)
@@ -38,6 +38,8 @@ public:
 protected:
   DECLARE_ACKNOWLEDGER (note_head);
   DECLARE_ACKNOWLEDGER (dots);
+  DECLARE_ACKNOWLEDGER (stem);
+  DECLARE_ACKNOWLEDGER (flag);
   DECLARE_ACKNOWLEDGER (trill_spanner);
   void stop_translation_timestep ();
 
@@ -64,6 +66,16 @@ Pitched_trill_engraver::acknowledge_dots (Grob_info info)
   heads_.push_back (info.grob ());
 }
 void
+Pitched_trill_engraver::acknowledge_stem (Grob_info info)
+{
+  heads_.push_back (info.grob ());
+}
+void
+Pitched_trill_engraver::acknowledge_flag (Grob_info info)
+{
+  heads_.push_back (info.grob ());
+}
+void
 Pitched_trill_engraver::acknowledge_note_head (Grob_info info)
 {
   heads_.push_back (info.grob ());
@@ -159,6 +171,8 @@ Pitched_trill_engraver::stop_translation_timestep ()
 
 ADD_ACKNOWLEDGER (Pitched_trill_engraver, note_head);
 ADD_ACKNOWLEDGER (Pitched_trill_engraver, dots);
+ADD_ACKNOWLEDGER (Pitched_trill_engraver, stem);
+ADD_ACKNOWLEDGER (Pitched_trill_engraver, flag);
 ADD_ACKNOWLEDGER (Pitched_trill_engraver, trill_spanner);
 
 ADD_TRANSLATOR (Pitched_trill_engraver,
index 616e99397a4d2c8c70b7cd5235bf08a9350fcf35..302b48e3f48b9ec5f6dda3450c39a111f66a30c8 100644 (file)
@@ -37,11 +37,6 @@ bool debug_page_breaking_scoring;
 bool music_strings_to_paths;
 bool relative_includes;
 
-/*
-  Backwards compatibility.
-*/
-bool lily_1_8_relative = false;
-bool lily_1_8_compatibility_used = false;
 bool profile_property_accesses = false;
 /*
   crash if internally the wrong type is used for a grob property.
@@ -85,13 +80,6 @@ internal_set_option (SCM var,
       be_safe_global = valbool;
       val = val_scm_bool;
     }
-  else if (varstr == "old-relative")
-    {
-      lily_1_8_relative = valbool;
-      /* Needs to be reset for each file that uses this option. */
-      lily_1_8_compatibility_used = valbool;
-      val = val_scm_bool;
-    }
   else if (varstr == "strict-infinity-checking")
     {
       strict_infinity_checking = valbool;
index af1b38d159a04c0c07b21311999917c0ae28614a..6352f16399b92a41438de83cf639e6a40e679da5 100644 (file)
@@ -35,14 +35,21 @@ Property_iterator::process (Moment mom)
 {
   Context *o = get_outlet ();
   Music *m = get_music ();
-  SCM previous_value = o->get_property (m->get_property ("symbol"));
+  bool once = to_boolean (m->get_property ("once"));
+  SCM symbol = m->get_property ("symbol");
+  SCM previous_value = SCM_UNDEFINED;
+  if (once) {
+    Context *w = o->where_defined (symbol, &previous_value);
+    if (o != w)
+      previous_value = SCM_UNDEFINED;
+  }
   send_stream_event (o, "SetProperty", m->origin (),
-                     ly_symbol2scm ("symbol"), m->get_property ("symbol"),
+                     ly_symbol2scm ("symbol"), symbol,
                      ly_symbol2scm ("value"), m->get_property ("value"));
 
   /* For \once \set install a finalization hook to reset the property to the
    * previous value after the timestep */
-  if (to_boolean (m->get_property ("once")))
+  if (once)
     {
       Global_context *tg = get_outlet ()->get_global_context ();
       tg->add_finalization (scm_list_n (once_finalization_proc,
index 1018dc54f6efc762aab8e734cdd76f7e7c09b0b7..24925d29b8599b027703cc76cd0add07114f214b 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -46,9 +46,7 @@ Pure_from_neighbor_engraver::Pure_from_neighbor_engraver ()
 void
 Pure_from_neighbor_engraver::acknowledge_item (Grob_info i)
 {
-  SCM pure_relevant_p = ly_lily_module_constant ("pure-relevant?");
-  if (!Pure_from_neighbor_interface::has_interface (i.item ())
-      && to_boolean (scm_call_1 (pure_relevant_p, i.item ()->self_scm ())))
+  if (!Pure_from_neighbor_interface::has_interface (i.item ()))
     pure_relevants_.push_back (i.item ());
 }
 
index ce202bcf82a64b397e5f220b50986aab60ba103d..4f70da828b19aaf7ed693f04974a2254695b0180 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
index 69c580f5d5484fc4e0c8717144e90ffce55a95f8..d35bb54b2c9d336cf668b60c0e42e0583e5a7f34 100644 (file)
@@ -128,15 +128,16 @@ Quote_iterator::construct_children ()
   SCM name = get_music ()->get_property ("quoted-context-type");
   SCM id = get_music ()->get_property ("quoted-context-id");
 
-  if (scm_is_string (id)
-      && scm_is_symbol (name))
+  if (scm_is_symbol (name))
     {
-      Context *cue_context = get_outlet ()->find_create_context (name,
-                                                                 ly_scm2string (id), SCM_EOL);
+      Context *cue_context =
+        get_outlet ()->find_create_context (name,
+                                            robust_scm2string (id, ""),
+                                            SCM_EOL);
       quote_outlet_.set_context (cue_context);
     }
   else
-    quote_outlet_.set_context (get_outlet ());
+    quote_outlet_.set_context (get_outlet ()->get_default_interpreter ());
 
   event_vector_ = get_music ()->get_property ("quoted-events");
 
@@ -237,11 +238,21 @@ Quote_iterator::process (Moment m)
       Pitch *quote_pitch = unsmob_pitch (scm_cdar (entry));
 
       /*
-        The pitch that sounds like central C
+        The pitch that sounds when written central C is played.
       */
+      Pitch temp_pitch;
       Pitch *me_pitch = unsmob_pitch (get_music ()->get_property ("quoted-transposition"));
       if (!me_pitch)
         me_pitch = unsmob_pitch (get_outlet ()->get_property ("instrumentTransposition"));
+      else
+        {
+          // We are not going to win a beauty contest with this one,
+          // but it is slated for replacement and touches little code.
+          // quoted-transposition currently has a different sign
+          // convention than instrumentTransposition
+          temp_pitch = me_pitch->negated ();
+          me_pitch = &temp_pitch;
+        }
       SCM cid = get_music ()->get_property ("quoted-context-id");
       bool is_cue = scm_is_string (cid) && (ly_scm2string (cid) == "cue");
 
@@ -263,7 +274,7 @@ Quote_iterator::process (Moment m)
                   if (me_pitch)
                     mp = *me_pitch;
 
-                  Pitch diff = pitch_interval (qp, mp);
+                  Pitch diff = pitch_interval (mp, qp);
                   ev = ev->clone ();
                   ev->make_transposable ();
 
index 94f566357c5cf5eeb9831ade241834b77e76514d..2f31e20a223c3a2d854557df7dd6f1289aa99dd8 100644 (file)
@@ -38,23 +38,9 @@ Relative_octave_music::no_relative_callback (SCM /* music */,
 
 MAKE_SCHEME_CALLBACK (Relative_octave_music, relative_callback, 2)
 SCM
-Relative_octave_music::relative_callback (SCM music, SCM pitch)
+Relative_octave_music::relative_callback (SCM /* music */,
+                                          SCM pitch)
 {
-  Music *me = unsmob_music (music);
-  if (lily_1_8_relative)
-    {
-      lily_1_8_compatibility_used = true;
-      /*  last-pitch should be junked some time, when
-          we ditch 1.8 compat too.
-
-          When you do, B should start where A left off.
-
-          \relative { A \relative { ...} B }  */
-      SCM last_pitch = me->get_property ("last-pitch");
-      Pitch *ptr = unsmob_pitch (last_pitch);
-      return (ptr) ? last_pitch : pitch;
-    }
-  else
-    return pitch;
+  return pitch;
 }
 
index 0d600820ae0fa977029b7e439aaae2a4ba86c9e6..3a13f03701f421397feec39a723942cea8c1d0c4 100644 (file)
@@ -42,7 +42,7 @@
 #define FRAMEWORKDIR ".."
 
 int
-sane_putenv (char const *key, string value, bool overwrite)
+sane_putenv (char const *key, const string &value, bool overwrite)
 {
   if (overwrite || !getenv (key))
     {
@@ -64,7 +64,7 @@ sane_putenv (char const *key, string value, bool overwrite)
 }
 
 static int
-set_env_file (char const *key, string value, bool overwrite = false)
+set_env_file (char const *key, const string &value, bool overwrite = false)
 {
   if (is_file (value))
     return sane_putenv (key, value, overwrite);
@@ -75,7 +75,7 @@ set_env_file (char const *key, string value, bool overwrite = false)
 }
 
 static int
-set_env_dir (char const *key, string value)
+set_env_dir (char const *key, const string &value)
 {
   if (is_dir (value))
     return sane_putenv (key, value, false);
@@ -108,7 +108,7 @@ prepend_env_path (char const *key, string value)
 #endif
 
 static void
-prefix_relocation (string prefix)
+prefix_relocation (const string &prefix)
 {
   string bindir = prefix + "/bin";
   string datadir = prefix + "/share";
@@ -141,7 +141,7 @@ prefix_relocation (string prefix)
 */
 
 static void
-framework_relocation (string prefix)
+framework_relocation (const string &prefix)
 {
   debug_output (_f ("Relocation: framework_prefix=%s", prefix));
 
@@ -165,66 +165,51 @@ setup_paths (char const *argv0_ptr)
   if (relocate_binary)
     {
       string prefix_directory;
-      if (getenv ("LILYPOND_RELOCATE_PREFIX"))
+      string argv0_abs;
+      if (argv0_filename.is_absolute ())
         {
-          prefix_directory = getenv ("LILYPOND_RELOCATE_PREFIX");
-#ifdef __MINGW32__
-          /* Normalize file name.  */
-          prefix_directory = File_name (prefix_directory).to_string ();
-#endif /* __MINGW32__ */
-
-          prefix_relocation (prefix_directory);
-          string bindir = prefix_directory + "/bin";
-          framework_relocation (bindir);
+          argv0_abs = argv0_filename.to_string ();
+          debug_output (_f ("Relocation: is absolute: argv0=%s\n", argv0_ptr));
         }
-      else if (relocate_binary)
+      else if (argv0_filename.dir_.length ())
         {
-          string argv0_abs;
-          if (argv0_filename.is_absolute ())
-            {
-              argv0_abs = argv0_filename.to_string ();
-              debug_output (_f ("Relocation: is absolute: argv0=%s\n", argv0_ptr));
-            }
-          else if (argv0_filename.dir_.length ())
-            {
-              argv0_abs = get_working_directory ()
-                          + "/" + string (argv0_filename.to_string ());
-              debug_output (_f ("Relocation: from cwd: argv0=%s\n", argv0_ptr));
-            }
-          else
-            {
-              /* Find absolute ARGV0 name, using PATH.  */
-              File_path path;
-              path.parse_path (getenv ("PATH"));
+          argv0_abs = get_working_directory ()
+                      + "/" + string (argv0_filename.to_string ());
+          debug_output (_f ("Relocation : from cwd: argv0=%s\n", argv0_ptr));
+        }
+      else
+        {
+          /* Find absolute ARGV0 name, using PATH.  */
+          File_path path;
+          path.parse_path (getenv ("PATH"));
 
 #ifndef __MINGW32__
-              argv0_abs = path.find (argv0_filename.to_string ());
+          argv0_abs = path.find (argv0_filename.to_string ());
 #else /* __MINGW32__ */
-              path.prepend (get_working_directory ());
-              char const *ext[] = {"exe", "", 0 };
-              argv0_abs = path.find (argv0_filename.to_string (), ext);
+          path.prepend (get_working_directory ());
+          char const *ext[] = {"exe", "", 0 };
+          argv0_abs = path.find (argv0_filename.to_string (), ext);
 #endif /* __MINGW32__ */
 
-              debug_output (_f ("Relocation: from PATH=%s\nargv0=%s",
-                                path.to_string ().c_str (), argv0_ptr), true);
+          debug_output (_f ("Relocation: from PATH=%s\nargv0=%s\n",
+                            path.to_string ().c_str (), argv0_ptr), true);
 
-              if (argv0_abs.empty ())
-                programming_error ("cannot find absolute argv0");
-            }
+          if (argv0_abs.empty ())
+            programming_error ("cannot find absolute argv0");
+        }
 
-          string bindir = dir_name (argv0_abs);
-          string argv0_prefix = dir_name (bindir);
-          string compile_prefix = dir_name (dir_name (dir_name (lilypond_datadir)));
-          if (argv0_prefix != compile_prefix)
-            {
-              prefix_relocation (argv0_prefix);
-              prefix_directory = argv0_prefix;
-            }
-          if (argv0_prefix != compile_prefix || string (FRAMEWORKDIR) != "..")
-            {
-              framework_relocation (bindir + "/" + FRAMEWORKDIR);
-              prefix_directory = bindir + "/" + FRAMEWORKDIR;
-            }
+      string bindir = dir_name (argv0_abs);
+      string argv0_prefix = dir_name (bindir);
+      string compile_prefix = dir_name (dir_name (dir_name (lilypond_datadir)));
+      if (argv0_prefix != compile_prefix)
+        {
+          prefix_relocation (argv0_prefix);
+          prefix_directory = argv0_prefix;
+        }
+      if (argv0_prefix != compile_prefix || string (FRAMEWORKDIR) != "..")
+        {
+          framework_relocation (bindir + "/" + FRAMEWORKDIR);
+          prefix_directory = bindir + "/" + FRAMEWORKDIR;
         }
 
       lilypond_datadir = prefix_directory
@@ -272,7 +257,7 @@ setup_paths (char const *argv0_ptr)
 }
 
 string
-expand_environment_variables (string orig)
+expand_environment_variables (const string &orig)
 {
   char const *start_ptr = orig.c_str ();
   char const *ptr = orig.c_str ();
@@ -355,7 +340,7 @@ read_line (FILE *f)
 }
 
 void
-read_relocation_file (string filename)
+read_relocation_file (const string &filename)
 {
   debug_output (_f ("Relocation file: %s", filename.c_str ()) + "\n");
   char const *cname = filename.c_str ();
@@ -398,7 +383,7 @@ read_relocation_file (string filename)
 }
 
 void
-read_relocation_dir (string dirname)
+read_relocation_dir (const string &dirname)
 {
   if (DIR *dir = opendir (dirname.c_str ()))
     while (struct dirent *ent = readdir (dir))
index 6d3234c6c6ce8b6145cfdf685729f1d35ddefdbd..779323e07d39a2fc8ce1bc244ffe9c80f3e07d0d 100644 (file)
@@ -102,20 +102,20 @@ Repeat_acknowledge_engraver::process_music ()
   if (segno)
     if (start)
       if (end) // { segno, start, end }
-        s = robust_scm2string (get_property ("doubleRepeatSegnoType"), ":|S|:");
+        s = robust_scm2string (get_property ("doubleRepeatSegnoType"), ":|.S.|:");
       else // { segno, start }
-        s = robust_scm2string (get_property ("startRepeatSegnoType"), ".S|:");
+        s = robust_scm2string (get_property ("startRepeatSegnoType"), "S.|:");
     else if (end) // { segno, end }
-      s = robust_scm2string (get_property ("endRepeatSegnoType"), ":|S");
+      s = robust_scm2string (get_property ("endRepeatSegnoType"), ":|.S");
     else // { segno }
       s = robust_scm2string (get_property ("segnoType"), "S");
   else if (start)
     if (end) // { start, end }
-      s = robust_scm2string (get_property ("doubleRepeatType"), ":|:");
+      s = robust_scm2string (get_property ("doubleRepeatType"), ":|.|:");
     else // { start }
-      s = robust_scm2string (get_property ("startRepeatType"), "|:");
+      s = robust_scm2string (get_property ("startRepeatType"), ".|:");
   else if (end) // { end }
-    s = robust_scm2string (get_property ("endRepeatType"), ":|");
+    s = robust_scm2string (get_property ("endRepeatType"), ":|.");
 
   /*
     TODO: line breaks might be allowed if we set whichBar to "".
index 13e12df2a48af8f8bcc61540b64658a7649c0a2e..78ffd6b8800c33f316c70225a58f741ba32e107a 100644 (file)
@@ -35,33 +35,6 @@ Repeated_music::alternatives (Music *me)
   return me->get_property ("elements");
 }
 
-MAKE_SCHEME_CALLBACK (Repeated_music, relative_callback, 2);
-SCM
-Repeated_music::relative_callback (SCM music, SCM pitch)
-{
-  Pitch p = *unsmob_pitch (pitch);
-  Music *me = unsmob_music (music);
-  if (lily_1_8_relative)
-    {
-      Music *body = unsmob_music (me->get_property ("element"));
-      if (body)
-        p = body->to_relative_octave (p);
-
-      Pitch last = p;
-      SCM alternatives = me->get_property ("elements");
-
-      for (SCM s = alternatives; scm_is_pair (s); s = scm_cdr (s))
-        {
-          lily_1_8_compatibility_used = true;
-          unsmob_music (scm_car (s))->to_relative_octave (p);
-        }
-
-      return last.smobbed_copy ();
-    }
-  else
-    return me->generic_to_relative_octave (p).smobbed_copy ();
-}
-
 Moment
 Repeated_music::alternatives_get_length (Music *me, bool fold)
 {
index e2b0db5ef2352e6e6d002259d90386bb97579bee..46435b73ad5b26356e21ceb5ef369635eafe19df 100644 (file)
@@ -34,6 +34,7 @@ using namespace std;
 #include "staff-symbol-referencer.hh"
 #include "stem.hh"
 #include "grob.hh"
+#include "unpure-pure-container.hh"
 #include "warn.hh"
 
 MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Rest_collision, force_shift_callback_rest, 2, 1, "");
@@ -72,7 +73,10 @@ Rest_collision::add_column (Grob *me, Grob *p)
   if (rest)
     {
       chain_offset_callback (rest,
-                             Rest_collision::force_shift_callback_rest_proc, Y_AXIS);
+                             ly_make_unpure_pure_container
+                               (Rest_collision::force_shift_callback_rest_proc,
+                                ly_lily_module_constant ("pure-chain-offset-callback")),
+                              Y_AXIS);
     }
 }
 
index 8e45405de278dbd4ea5040dfc3259c6a2164a112..3a448546b05f74b034436da5a6df1d905062eb4d 100644 (file)
@@ -39,19 +39,28 @@ Rest::y_offset_callback (SCM smob)
   int duration_log = scm_to_int (me->get_property ("duration-log"));
   Real ss = Staff_symbol_referencer::staff_space (me);
 
+  return scm_from_double (ss * 0.5 * Rest::staff_position_internal (me, duration_log, get_grob_direction (me)));
+}
+
+Real
+Rest::staff_position_internal (Grob *me, int duration_log, int dir)
+{
+  if (!me)
+    return 0;
+
   bool position_override = scm_is_number (me->get_property ("staff-position"));
-  Real amount;
+  Real pos;
 
   if (position_override)
     {
-      amount
-        = robust_scm2double (me->get_property ("staff-position"), 0) * 0.5 * ss;
+      pos
+        = robust_scm2double (me->get_property ("staff-position"), 0);
 
       /*
         semibreve rests are positioned one staff line off
       */
       if (duration_log == 0)
-        amount += ss;
+        return pos + 2;
 
       /*
         trust the client on good positioning;
@@ -59,37 +68,75 @@ Rest::y_offset_callback (SCM smob)
         to be properly aligned to staff lines,
         but custom rest shapes may not need that sort of care.
       */
+
+      return pos;
     }
-  else
-    {
-      int pos = 4 * get_grob_direction (me);
 
+  pos = 4 * dir;
+
+  if (duration_log > 1)
+    /* Only half notes or longer want alignment with staff lines */
+    return pos;
+      
+  /*
+    We need a staff symbol for actually aligning anything
+  */
+  Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
+  if (!staff)
+    return pos;
+
+  std::vector<Real> linepos = Staff_symbol::line_positions (staff);
+
+  if (linepos.empty ())
+    return pos;
+      
+  std::sort (linepos.begin (), linepos.end ());
+          
+  if (duration_log == 0)
+    {
       /*
-        make a semibreve rest hang from the next line,
-        except for a single line staff
+        lower voice semibreve rests generally hang a line lower
       */
-      if (duration_log == 0 && Staff_symbol_referencer::line_count (me) > 1)
-        pos += 2;
+
+      if (dir < 0)
+        pos -= 2;
 
       /*
-        make sure rest is aligned to a staff line
+        make a semibreve rest hang from the next available line,
+        except when there is none.
       */
-      if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me))
-        {
-          std::vector<Real> linepos = Staff_symbol::line_positions (staff);
-          std::sort (linepos.begin (), linepos.end ());
-          std::vector<Real>::const_iterator it
-            = std::lower_bound (linepos.begin (), linepos.end (), pos);
-          if (it != linepos.end ())
-            {
-              pos = (int)ceil (*it);
-            }
-        }
-
-      amount = ss * 0.5 * pos;
+      
+      std::vector<Real>::const_iterator it
+        = std::upper_bound (linepos.begin (), linepos.end (), pos);
+      if (it != linepos.end ())
+        pos = *it;
+      else
+        pos = linepos.back ();
     }
+  else
+    {
+      std::vector<Real>::const_iterator it
+        = std::upper_bound (linepos.begin (), linepos.end (), pos);
+      if (it != linepos.begin ())
+        --it;
+      pos = *it;
+    }
+
+  /* Finished for neutral position */
+  if (!dir)
+    return pos;
 
-  return scm_from_double (amount);
+  /* If we have a voiced position, make sure that it's on the
+     proper side of neutral before using it.  If it isn't, we fall
+     back to a constant offset from neutral position.
+  */
+
+  Real neutral = staff_position_internal (me, duration_log, 0);
+
+  if (dir * (pos - neutral) > 0)
+    return pos;
+
+  return neutral + 4 * dir;
 }
 
 /* A rest might lie under a beam, in which case it should be cross-staff if
@@ -112,13 +159,14 @@ Rest::calc_cross_staff (SCM smob)
   make this function easily usable in C++
 */
 string
-Rest::glyph_name (Grob *me, int durlog, string style, bool try_ledgers)
+Rest::glyph_name (Grob *me, int durlog, const string &style, bool try_ledgers,
+                  Real offset)
 {
   bool is_ledgered = false;
   if (try_ledgers && (durlog == -1 || durlog == 0 || durlog == 1))
     {
-      int const pos = int (Staff_symbol_referencer::get_position (me));
-
+      int const pos = int (Staff_symbol_referencer::get_position (me)
+                           + offset);
       /*
         half rests need ledger if not lying on a staff line,
         whole rests need ledger if not hanging from a staff line,
@@ -169,7 +217,7 @@ Rest::glyph_name (Grob *me, int durlog, string style, bool try_ledgers)
       actual_style = "";
     }
 
-  return ("rests." + to_string (durlog) + (is_ledgered ? "o" : "")
+  return ("rests." + ::to_string (durlog) + (is_ledgered ? "o" : "")
           + actual_style);
 }
 
@@ -186,7 +234,7 @@ Rest::brew_internal_stencil (Grob *me, bool ledgered)
   string style = robust_symbol2string (me->get_property ("style"), "default");
 
   Font_metric *fm = Font_interface::get_default_font (me);
-  string font_char = glyph_name (me, durlog, style, ledgered);
+  string font_char = glyph_name (me, durlog, style, ledgered, 0.0);
   Stencil out = fm->find_by_name (font_char);
   if (out.is_empty ())
     me->warning (_f ("rest `%s' not found", font_char.c_str ()));
index e4e78ecee6a2ad06b99441fe44f4957552e46999..1955498fc43a1e80b6291f91405e2b3dc64324fc 100644 (file)
@@ -57,7 +57,6 @@ class Rhythmic_column_engraver : public Engraver
   Grob *stem_;
   Grob *flag_;
   Grob *note_column_;
-  Grob *arpeggio_;
 
   TRANSLATOR_DECLARATIONS (Rhythmic_column_engraver);
 protected:
@@ -65,7 +64,6 @@ protected:
   DECLARE_ACKNOWLEDGER (stem);
   DECLARE_ACKNOWLEDGER (flag);
   DECLARE_ACKNOWLEDGER (rhythmic_head);
-  DECLARE_ACKNOWLEDGER (arpeggio);
   void process_acknowledged ();
   void stop_translation_timestep ();
 };
@@ -76,7 +74,6 @@ Rhythmic_column_engraver::Rhythmic_column_engraver ()
   stem_ = 0;
   flag_ = 0;
   note_column_ = 0;
-  arpeggio_ = 0;
 }
 
 void
@@ -103,13 +100,11 @@ Rhythmic_column_engraver::process_acknowledged ()
           stem_ = 0;
         }
 
-      if (arpeggio_)
+      if (flag_)
         {
-          Pointer_group_interface::add_grob (note_column_, ly_symbol2scm ("elements"), arpeggio_);
-          note_column_->set_object ("arpeggio", arpeggio_->self_scm ());
+          Pointer_group_interface::add_grob (note_column_, ly_symbol2scm ("elements"), flag_);
+          flag_ = 0;
         }
-      if (flag_)
-        Pointer_group_interface::add_grob (note_column_, ly_symbol2scm ("elements"), flag_);
     }
 }
 
@@ -131,25 +126,17 @@ Rhythmic_column_engraver::acknowledge_rhythmic_head (Grob_info i)
   rheads_.push_back (i.grob ());
 }
 
-void
-Rhythmic_column_engraver::acknowledge_arpeggio (Grob_info i)
-{
-  arpeggio_ = i.grob ();
-}
-
 void
 Rhythmic_column_engraver::stop_translation_timestep ()
 {
   note_column_ = 0;
   stem_ = 0;
-  arpeggio_ = 0;
   flag_ = 0;
 }
 
 ADD_ACKNOWLEDGER (Rhythmic_column_engraver, stem);
 ADD_ACKNOWLEDGER (Rhythmic_column_engraver, flag);
 ADD_ACKNOWLEDGER (Rhythmic_column_engraver, rhythmic_head);
-ADD_ACKNOWLEDGER (Rhythmic_column_engraver, arpeggio);
 
 ADD_TRANSLATOR (Rhythmic_column_engraver,
                 /* doc */
index b50122e8bb39df97cb7e33e1a6f9fcd642baa86e..64daa8ea5b615be924c82bf08cf37d9d5619c315 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2012 Mike Solomon <mike@mikesolomon.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -47,7 +47,7 @@ Rhythmic_music_iterator::process (Moment m)
       descend_to_bottom_context ();
 
       Context *c = get_outlet ();
-      Stream_event *ev = get_music ()->to_event (c);
+      Stream_event *ev = get_music ()->to_event ();
       SCM arts = ev->get_property ("articulations");
 
       if (scm_is_pair (arts))
index 9dc229a48d09a90cfb0a8180f00b68b2d163bd39..1ab23e096fbe06b8021531b3b40b27353d37e3cb 100644 (file)
@@ -131,6 +131,17 @@ IMPLEMENT_LISTENER (Score_performer, one_time_step);
 void
 Score_performer::one_time_step (SCM)
 {
+  // audio_column_ can be 0 when prepare has not been called.  The
+  // condition is triggered when Simple_music_iterator implicitly
+  // creates a Score context, like when writing
+  //
+  // \score { { | c4 c c c } \midi { } }
+  //
+  // The same situation happens with the Score_engraver group, but it
+  // would appear not to suffer any bad side effects.
+
+  if (!audio_column_)
+    audio_column_ = new Audio_column (context ()->now_mom ());
   if (to_boolean (context ()->get_property ("skipTypesetting")))
     {
       if (!skipping_)
@@ -174,4 +185,3 @@ Score_performer::initialize ()
 
   Translator_group::initialize ();
 }
-
index 7a306af442703f7faf35683c048d5863a1605363..98ff693ad2f895aa17967ffac7fe8b0c560d93b6 100644 (file)
@@ -130,16 +130,11 @@ LY_DEFINE (ly_score_embedded_format, "ly:score-embedded-format",
   if (!score_def)
     return SCM_BOOL_F;
 
-  score_def = score_def->clone ();
-  SCM prot = score_def->unprotect ();
-
-  /* TODO: SCORE_DEF should be scaled according to OD->parent_ or OD
-     itself. */
+  score_def = scale_output_def (score_def, output_scale (od));
   score_def->parent_ = od;
 
-  SCM context = ly_run_translator (sc->get_music (), score_def->self_scm ());
+  SCM context = ly_run_translator (sc->get_music (), score_def->unprotect ());
   SCM output = ly_format_output (context);
 
-  scm_remember_upto_here_1 (prot);
   return output;
 }
index 0a014a38008bb3e57aafb92a3671aa90b0c8ac95..8c963929bff878ac9773ca64b147fd0294a5ae84 100644 (file)
@@ -152,11 +152,12 @@ Script_column::order_grobs (vector<Grob *> grobs)
             {
               SCM last_outside_staff = last->get_property ("outside-staff-priority");
               /*
-                if outside_staff_priority is missing for previous grob, just
-                use it as a support for the current grob
+                if outside_staff_priority is missing for previous grob,
+                use all the scripts so far as support for the current grob
               */
               if (!scm_is_number (last_outside_staff))
-                Side_position_interface::add_support (g, last);
+                for (SCM t = ss; !scm_is_eq (t, s); t = scm_cdr (t))
+                  Side_position_interface::add_support (g, unsmob_grob (scm_car (t)));
               /*
                 if outside_staff_priority is missing or is equal to original
                 outside_staff_priority of previous grob, set new
index 288d771ef24634915b5fc0cf7b74b743c4b0698a..3085f4f1553feebc4a3a2fa07d891b6fd1691783 100644 (file)
@@ -58,6 +58,8 @@ protected:
   DECLARE_ACKNOWLEDGER (rhythmic_head);
   DECLARE_ACKNOWLEDGER (stem);
   DECLARE_ACKNOWLEDGER (stem_tremolo);
+  DECLARE_ACKNOWLEDGER (tie);
+  DECLARE_END_ACKNOWLEDGER (tie);
   DECLARE_ACKNOWLEDGER (note_column);
   DECLARE_ACKNOWLEDGER (inline_accidental);
 
@@ -199,6 +201,26 @@ Script_engraver::acknowledge_stem_tremolo (Grob_info info)
     }
 }
 
+void
+Script_engraver::acknowledge_tie (Grob_info info)
+{
+  for (vsize i = 0; i < scripts_.size (); i++)
+    {
+      Grob *e = scripts_[i].script_;
+      Side_position_interface::add_support (e, info.grob ());
+    }
+}
+
+void
+Script_engraver::acknowledge_end_tie (Grob_info info)
+{
+  for (vsize i = 0; i < scripts_.size (); i++)
+    {
+      Grob *e = scripts_[i].script_;
+      Side_position_interface::add_support (e, info.grob ());
+    }
+}
+
 void
 Script_engraver::acknowledge_inline_accidental (Grob_info info)
 {
@@ -255,6 +277,8 @@ Script_engraver::stop_translation_timestep ()
 
 ADD_ACKNOWLEDGER (Script_engraver, rhythmic_head);
 ADD_ACKNOWLEDGER (Script_engraver, stem);
+ADD_ACKNOWLEDGER (Script_engraver, tie);
+ADD_END_ACKNOWLEDGER (Script_engraver, tie);
 ADD_ACKNOWLEDGER (Script_engraver, note_column);
 ADD_ACKNOWLEDGER (Script_engraver, stem_tremolo);
 ADD_ACKNOWLEDGER (Script_engraver, inline_accidental);
index 40a251a0772aeece60587d8134dadeb6f9a7af19..28b978d329c04e5ab876e84683e3eea054db42fa 100644 (file)
@@ -138,7 +138,6 @@ ADD_INTERFACE (Text_script,
                "An object that is put above or below a note.",
 
                /* properties */
-               "add-stem-support "
                "avoid-slur "
                "script-priority "
                "slur "
@@ -151,7 +150,6 @@ ADD_INTERFACE (Script_interface,
                "An object that is put above or below a note.",
 
                /* properties */
-               "add-stem-support "
                "avoid-slur "
                "direction-source "
                "positioning-done "
index a37b5871007eec8ef9368976958997b6a4c84a98..1b4e421b70070afd612c345a43b4c116e5e70387 100644 (file)
@@ -59,8 +59,12 @@ Self_alignment_interface::aligned_on_self (Grob *me, Axis a, bool pure, int star
   if (scm_is_number (align))
     {
       Interval ext (me->maybe_pure_extent (me, a, pure, start, end));
+      // Empty extent doesn't mean an error - we simply don't align such grobs.
+      // However, empty extent and non-empty stencil would be suspicious.
       if (!ext.is_empty ())
         return scm_from_double (- ext.linear_combination (scm_to_double (align)));
+      else if (me->get_stencil ())
+        warning (me->name () + " has empty extent and non-empty stencil.");
     }
   return scm_from_double (0.0);
 }
@@ -147,80 +151,23 @@ Self_alignment_interface::aligned_on_parent (Grob *me, Axis a)
   Real align = scm_to_double (align_prop);
 
   Interval ext (me->extent (me, a));
-  if (ext.is_empty ())
-    programming_error ("cannot align on self: empty element");
-  else
+
+  // Empty extent doesn't mean an error - we simply don't align such grobs.
+  // However, empty extent and non-empty stencil would be suspicious.
+  if (!ext.is_empty ())
     x -= ext.linear_combination (align);
+  else if (me->get_stencil ())
+    warning (me->name () + " has empty extent and non-empty stencil.");
 
+  // See comment above.
   if (!he.is_empty ())
     x += he.linear_combination (align);
+  else if (him->get_stencil ())
+    warning (him->name () + " has empty extent and non-empty stencil.");
 
   return scm_from_double (x);
 }
 
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, avoid_x_colliding_grobs, 2);
-SCM
-Self_alignment_interface::avoid_x_colliding_grobs (SCM smob, SCM o)
-{
-  SCM avoided = avoid_colliding_grobs (unsmob_grob (smob), X_AXIS, robust_scm2double (o, 0.0));
-  return scm_is_null (avoided) ? o : avoided;
-}
-
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_colliding_grobs, 1);
-SCM
-Self_alignment_interface::x_colliding_grobs (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-  extract_grob_set (me, "potential-X-colliding-grobs", pot);
-  vector<Grob *> act;
-  Direction d = get_grob_direction (me->get_parent (Y_AXIS));
-  for (vsize i = 0; i < pot.size (); i++)
-    if (d == get_grob_direction (pot[i])
-        && to_boolean (pot[i]->get_property ("cross-staff")))
-      act.push_back (pot[i]);
-
-  SCM grobs_scm = Grob_array::make_array ();
-  unsmob_grob_array (grobs_scm)->set_array (act);
-
-  return grobs_scm;
-}
-
-SCM
-Self_alignment_interface::avoid_colliding_grobs (Grob *me, Axis a, Real offset)
-{
-  extract_grob_set (me, a == X_AXIS ? "X-colliding-grobs" : "Y-colliding-grobs", colls);
-  if (!colls.size ())
-    return SCM_EOL;
-  vector<Interval> ivs;
-
-  Item *refp = dynamic_cast<Item *> (common_refpoint_of_array (colls, me, a));
-  if (!refp)
-    return SCM_EOL;
-
-  Interval iv = me->extent (me, a) + offset;
-  for (vsize i = 0; i < colls.size (); i++)
-    ivs.push_back (colls[i]->extent (refp, a));
-
-  Interval_minefield minefield (Interval (iv.center (), iv.center ()), iv.length ());
-  for (vsize i = 0; i < ivs.size (); i++)
-    minefield.add_forbidden_interval (ivs[i]);
-  minefield.solve ();
-  Interval pos = minefield.feasible_placements ();
-
-  if (pos[LEFT] == pos[RIGHT])
-    return SCM_EOL;
-
-  Direction col_dir = ((abs (pos[LEFT] - iv.center ())
-                        + robust_scm2double (me->get_property ("collision-bias"), 0.0))
-                       > abs (pos[RIGHT] - iv.center ()))
-                      ? RIGHT
-                      : LEFT;
-
-  return scm_from_double ((pos[col_dir] - (iv.length () / 2)
-                           + col_dir
-                           * robust_scm2double (me->get_property ("collision-padding"), 0.0)));
-}
-
 void
 Self_alignment_interface::set_center_parent (Grob *me, Axis a)
 {
@@ -229,12 +176,6 @@ Self_alignment_interface::set_center_parent (Grob *me, Axis a)
                        a);
 }
 
-void
-Self_alignment_interface::avoid_x_collisions (Grob *me)
-{
-  chain_offset_callback (me, avoid_x_colliding_grobs_proc, X_AXIS);
-}
-
 void
 Self_alignment_interface::set_align_self (Grob *me, Axis a)
 {
index f47171fb5a380ef8764a5abbc96e9f5c1135a24f..07ef344440aef7efe046d9d04a514a701bd7d6ad 100644 (file)
 #include "staff-symbol-referencer.hh"
 #include "item.hh"
 #include "tie-formatting-problem.hh"
-#include "tie-column-format.hh"
 
 ADD_INTERFACE (Semi_tie_column,
                "The interface for a column of l.v. (laissez vibrer) ties.",
 
                /* properties */
+               "direction "
                "positioning-done "
                "head-direction "
                "tie-configuration "
index b3e574dad8978488b96de7cf80d4728041ef5485..ebee8d6bf3f0c53413232cf6dfbc52e40d611c9a 100644 (file)
@@ -80,8 +80,7 @@ Skyline
 Separation_item::conditional_skyline (Grob *me, Grob *left)
 {
   vector<Box> bs = boxes (me, left);
-  Real horizon_padding = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0);
-  return Skyline (bs, horizon_padding, Y_AXIS, LEFT);
+  return Skyline (bs, Y_AXIS, LEFT);
 }
 
 MAKE_SCHEME_CALLBACK (Separation_item, calc_skylines, 1);
@@ -90,14 +89,28 @@ Separation_item::calc_skylines (SCM smob)
 {
   Item *me = unsmob_item (smob);
   vector<Box> bs = boxes (me, 0);
-  Real horizon_padding = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0);
-  return Skyline_pair (bs, horizon_padding, Y_AXIS).smobbed_copy ();
+  Skyline_pair sp (bs, Y_AXIS);
+  /*
+    TODO: We need to decide if padding is 'intrinsic'
+    to a skyline or if it is something that is only added on in
+    distance calculations.  Here, we make it intrinsic, which copies
+    the behavior from the old code but no longer corresponds to how
+    vertical skylines are handled (where padding is not built into
+    the skyline).
+  */
+  Real vp = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0);
+  sp[LEFT] = sp[LEFT].padded (vp);
+  sp[RIGHT] = sp[RIGHT].padded (vp);
+  return sp.smobbed_copy ();
 }
 
-/* if left is non-NULL, get the boxes corresponding to the
-   conditional-elements (conditioned on the grob LEFT). This
-   sounds more general than it is: conditional-elements are
-   always accidentals attached to a tied note.
+/*
+   If left is non-NULL, get the boxes corresponding to the
+   conditional-elements (conditioned on the grob LEFT).
+   Conditional elements are, for now, arpeggios and accidental
+   placements.  Based on the left grob, the accidentals will
+   be printed or not, so we filter using
+   Accidental_placement::get_relevant_accidentals.
 */
 vector<Box>
 Separation_item::boxes (Grob *me, Grob *left)
@@ -111,7 +124,19 @@ Separation_item::boxes (Grob *me, Grob *left)
   vector<Grob *> elts;
 
   if (left)
-    elts = Accidental_placement::get_relevant_accidentals (read_only_elts, left);
+    {
+      vector<Grob *> accidental_elts;
+      vector<Grob *> other_elts; // for now only arpeggios
+      for (vsize i = 0; i < read_only_elts.size (); i++)
+        {
+          if (Accidental_placement::has_interface (read_only_elts[i]))
+            accidental_elts.push_back (read_only_elts[i]);
+          else
+            other_elts.push_back (read_only_elts[i]);
+        }
+      elts = Accidental_placement::get_relevant_accidentals (accidental_elts, left);
+      elts.insert (elts.end (), other_elts.begin (), other_elts.end ());
+    }
   else
     elts = read_only_elts;
 
@@ -140,10 +165,19 @@ Separation_item::boxes (Grob *me, Grob *left)
       Interval extra_height = robust_scm2interval (elts[i]->get_property ("extra-spacing-height"),
                                                    Interval (0.0, 0.0));
 
-      x[LEFT] += extra_width[LEFT];
-      x[RIGHT] += extra_width[RIGHT];
-      y[DOWN] += extra_height[DOWN];
-      y[UP] += extra_height[UP];
+      // The conventional empty extent is (+inf.0 . -inf.0)
+      //  but (-inf.0 . +inf.0) is used as extra-spacing-height
+      //  on items that must not overlap other note-columns.
+      // If these two uses of inf combine, leave the empty extent.
+
+      if (!isinf (x[LEFT]))
+        x[LEFT] += extra_width[LEFT];
+      if (!isinf (x[RIGHT]))
+        x[RIGHT] += extra_width[RIGHT];
+      if (!isinf (y[DOWN]))
+        y[DOWN] += extra_height[DOWN];
+      if (!isinf (y[UP]))
+        y[UP] += extra_height[UP];
 
       if (!x.is_empty () && !y.is_empty ())
         out.push_back (Box (x, y));
index 6fad89ea54cccf0e5846d69d35e90d6e0ff391c3..a53fa6a75097805320120bcb641104e74c46b37b 100644 (file)
 
 #include <cmath>                // ceil.
 #include <algorithm>
+#include <set>
+#include <map>
 
 using namespace std;
 
 #include "accidental-interface.hh"
+#include "accidental-placement.hh"
 #include "axis-group-interface.hh"
 #include "directional-element-interface.hh"
 #include "grob.hh"
 #include "grob-array.hh"
+#include "international.hh"
+#include "item.hh"
 #include "main.hh"
 #include "misc.hh"
 #include "note-head.hh"
+#include "note-column.hh"
 #include "pointer-group-interface.hh"
+#include "skyline-pair.hh"
 #include "staff-symbol-referencer.hh"
 #include "staff-symbol.hh"
 #include "stem.hh"
 #include "string-convert.hh"
 #include "system.hh"
 #include "warn.hh"
+#include "unpure-pure-container.hh"
 
 void
 Side_position_interface::add_support (Grob *me, Grob *e)
@@ -46,222 +54,32 @@ Side_position_interface::add_support (Grob *me, Grob *e)
   Pointer_group_interface::add_unordered_grob (me, ly_symbol2scm ("side-support-elements"), e);
 }
 
-SCM
-finish_offset (Grob *me, Direction dir, Real total_off, Real *current_offset)
-{
-  Real ss = Staff_symbol_referencer::staff_space (me);
-  Real minimum_space = ss * robust_scm2double (me->get_property ("minimum-space"), -1);
-  total_off += dir * ss * robust_scm2double (me->get_property ("padding"), 0);
-
-  if (minimum_space >= 0
-      && dir
-      && total_off * dir < minimum_space)
-    total_off = minimum_space * dir;
-
-  if (current_offset)
-    total_off = dir * max (dir * total_off,
-                           dir * (*current_offset));
-
-  /* FIXME: 1000 should relate to paper size.  */
-  if (fabs (total_off) > 1000)
-    {
-      string msg
-        = String_convert::form_string ("Improbable offset for grob %s: %f",
-                                       me->name ().c_str (), total_off);
-
-      programming_error (msg);
-      if (strict_infinity_checking)
-        scm_misc_error (__FUNCTION__, "Improbable offset.", SCM_EOL);
-    }
-
-  return scm_from_double (total_off);
-}
-
-/* Put the element next to the support, optionally taking in
-   account the extent of the support.
-
-   Does not take into account the extent of ME.
-*/
-SCM
-Side_position_interface::general_side_position (Grob *me, Axis a, bool use_extents,
-                                                bool include_my_extent,
-                                                bool pure, int start, int end,
-                                                Real *current_offset)
+set<Grob *>
+get_support_set (Grob *me)
 {
-  extract_grob_set (me, "side-support-elements", support);
-
-  Grob *common = common_refpoint_of_array (support, me->get_parent (a), a);
-  Grob *staff_symbol = Staff_symbol_referencer::get_staff_symbol (me);
-  bool include_staff
-    = staff_symbol
-      && a == Y_AXIS
-      && scm_is_number (me->get_property ("staff-padding"))
-      && !to_boolean (me->get_property ("quantize-position"));
-
-  Interval dim;
-  Interval staff_extents;
-  if (include_staff)
-    {
-      common = staff_symbol->common_refpoint (common, Y_AXIS);
-      staff_extents = staff_symbol->maybe_pure_extent (common, Y_AXIS, pure, start, end);
-
-      if (include_staff)
-        dim.unite (staff_extents);
-    }
+  // Only slightly kludgy heuristic...
+  // We want to make sure that all AccidentalPlacements'
+  // accidentals make it into the side support
+  extract_grob_set (me, "side-support-elements", proto_support);
+  set<Grob *> support;
 
-  Direction dir = get_grob_direction (me);
-
-  for (vsize i = 0; i < support.size (); i++)
+  for (vsize i = 0; i < proto_support.size (); i++)
     {
-      Grob *e = support[i];
-
-      // In the case of a stem, we will find a note head as well
-      // ignoring the stem solves cyclic dependencies if the stem is
-      // attached to a cross-staff beam.
-      if (a == Y_AXIS
-          && Stem::has_interface (e)
-          && dir == - get_grob_direction (e))
-        continue;
-
-      if (e)
+      if (Accidental_placement::has_interface (proto_support[i]))
         {
-          if (use_extents)
-            dim.unite (e->maybe_pure_extent (common, a, pure, start, end));
-          else
-            {
-              Real x = e->maybe_pure_coordinate (common, a, pure, start, end);
-              dim.unite (Interval (x, x));
-            }
+          Grob *accs = proto_support[i];
+          for (SCM acs = accs->get_object ("accidental-grobs"); scm_is_pair (acs);
+               acs = scm_cdr (acs))
+            for (SCM s = scm_cdar (acs); scm_is_pair (s); s = scm_cdr (s))
+              {
+                Grob *a = unsmob_grob (scm_car (s));
+                support.insert (a);
+              }
         }
-    }
-
-  if (dim.is_empty ())
-    dim = Interval (0, 0);
-
-  Real off = me->get_parent (a)->maybe_pure_coordinate (common, a, pure, start, end);
-
-  Real total_off = dim.linear_combination (dir) - off;
-  if (include_my_extent)
-    {
-      Interval iv = me->maybe_pure_extent (me, a, pure, start, end);
-      if (!iv.is_empty ())
-        {
-          if (!dir)
-            {
-              programming_error ("direction unknown, but aligned-side wanted");
-              dir = DOWN;
-            }
-          total_off += -iv[-dir];
-        }
-    }
-
-  return finish_offset (me, dir, total_off, current_offset);
-}
-
-SCM
-Side_position_interface::skyline_side_position (Grob *me, Axis a,
-                                                bool pure, int start, int end,
-                                                Real *current_offset)
-{
-  extract_grob_set (me, "side-support-elements", support);
-
-  Grob *common[2];
-  for (Axis ax = X_AXIS; ax < NO_AXES; incr (ax))
-    common[ax] = common_refpoint_of_array (support, ax == a ? me->get_parent (ax) : me, ax);
-
-  Grob *staff_symbol = Staff_symbol_referencer::get_staff_symbol (me);
-  Direction dir = get_grob_direction (me);
-
-  Box off;
-  for (Axis ax = X_AXIS; ax < NO_AXES; incr (ax))
-    {
-      if (ax == a)
-        off[ax] = me->get_parent (ax)->maybe_pure_coordinate (common[ax], ax, pure, start, end)
-                  + me->maybe_pure_extent (me, ax, pure, start, end);
       else
-        off[ax] = me->maybe_pure_extent (common[ax], ax, pure, start, end);
-    }
-
-  if (off[X_AXIS].is_empty () || off[Y_AXIS].is_empty ())
-    return scm_from_double (0.0);
-
-  Real skyline_padding = 0.1;
-
-  Skyline my_dim (off, skyline_padding, other_axis (a), -dir);
-
-  bool include_staff
-    = staff_symbol
-      && a == Y_AXIS
-      && scm_is_number (me->get_property ("staff-padding"))
-      && !to_boolean (me->get_property ("quantize-position"));
-
-  vector<Box> boxes;
-  Real min_h = dir == LEFT ? infinity_f : -infinity_f;
-  for (vsize i = 0; i < support.size (); i++)
-    {
-      Grob *e = support[i];
-
-      // In the case of a stem, we will find a note head as well
-      // ignoring the stem solves cyclic dependencies if the stem is
-      // attached to a cross-staff beam.
-      if (a == Y_AXIS
-          && Stem::has_interface (e)
-          && dir == - get_grob_direction (e))
-        continue;
-
-      if (e)
-        {
-          if (Accidental_interface::has_interface (e))
-            {
-              vector<Box> bs = Accidental_interface::accurate_boxes (e, common);
-              boxes.insert (boxes.end (), bs.begin (), bs.end ());
-            }
-          else
-            {
-              Box b;
-              for (Axis ax = X_AXIS; ax < NO_AXES; incr (ax))
-                b[ax] = e->maybe_pure_extent (common[ax], ax, pure, start, end);
-
-              if (b[X_AXIS].is_empty () || b[Y_AXIS].is_empty ())
-                continue;
-
-              boxes.push_back (b);
-              min_h = minmax (dir, b[a][-dir], min_h);
-            }
-        }
+        support.insert (proto_support[i]);
     }
-
-  Skyline dim (boxes, skyline_padding, other_axis (a), dir);
-  if (!boxes.size ())
-    dim.set_minimum_height (0.0);
-  else
-    dim.set_minimum_height (min_h);
-
-  if (include_staff)
-    {
-      Interval staff_extents;
-      common[Y_AXIS] = staff_symbol->common_refpoint (common[Y_AXIS], Y_AXIS);
-      staff_extents = staff_symbol->maybe_pure_extent (common[Y_AXIS], Y_AXIS, pure, start, end);
-      dim.set_minimum_height (minmax (dir, min_h, staff_extents[dir]));
-    }
-
-  Real total_off = dir * dim.distance (my_dim);
-  return finish_offset (me, dir, total_off, current_offset);
-}
-
-MAKE_SCHEME_CALLBACK (Side_position_interface, y_aligned_on_support_refpoints, 1);
-SCM
-Side_position_interface::y_aligned_on_support_refpoints (SCM smob)
-{
-  return general_side_position (unsmob_grob (smob), Y_AXIS, false, false, false, 0, 0, 0);
-}
-
-MAKE_SCHEME_CALLBACK (Side_position_interface, pure_y_aligned_on_support_refpoints, 3);
-SCM
-Side_position_interface::pure_y_aligned_on_support_refpoints (SCM smob, SCM start, SCM end)
-{
-  return general_side_position (unsmob_grob (smob), Y_AXIS, false, false,
-                                true, scm_to_int (start), scm_to_int (end), 0);
+  return support;
 }
 
 /*
@@ -278,14 +96,25 @@ axis_aligned_side_helper (SCM smob, Axis a, bool pure, int start, int end, SCM c
       current_off_ptr = &r;
     }
 
-  return Side_position_interface::aligned_side (unsmob_grob (smob), a, pure, start, end, current_off_ptr);
+  Grob *me = unsmob_grob (smob);
+  // We will only ever want widths of spanners after line breaking
+  // so we can set pure to false
+  if (dynamic_cast<Spanner *> (me) && a == X_AXIS)
+    pure = false;
+
+  return Side_position_interface::aligned_side (me, a, pure, start, end, current_off_ptr);
 }
 
 MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Side_position_interface, x_aligned_side, 2, 1, "");
 SCM
 Side_position_interface::x_aligned_side (SCM smob, SCM current_off)
 {
-  return axis_aligned_side_helper (smob, X_AXIS, false, 0, 0, current_off);
+  // Because horizontal skylines need vertical heights, we'd trigger
+  // unpure calculations too soon if this were called before line breaking.
+  // So, we always use pure heights.  Given that horizontal skylines are
+  // almost always used before line breaking anyway, this doesn't cause
+  // problems.
+  return axis_aligned_side_helper (smob, X_AXIS, true, 0, 0, current_off);
 }
 
 MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Side_position_interface, y_aligned_side, 2, 1, "");
@@ -312,40 +141,239 @@ Side_position_interface::calc_cross_staff (SCM smob)
   Grob *me = unsmob_grob (smob);
   extract_grob_set (me, "side-support-elements", elts);
 
+  Direction my_dir = get_grob_direction (me) ;
+
+  for (vsize i = 0; i < elts.size (); i++)
+    {
+      /*
+        If 'me' is placed relative to any cross-staff element with a
+        'direction callback defined, the placement of 'me' is likely
+        to depend on staff-spacing, thus 'me' should be considered
+        cross-staff.
+      */
+      if (to_boolean (elts[i]->get_property ("cross-staff"))
+           && !is_direction (elts[i]->get_property_data ("direction")))
+        return SCM_BOOL_T;
+
+      /*
+        If elts[i] is cross-staff and is pointing in the same
+        direction as 'me', we assume that the alignment
+        of 'me' is influenced the cross-staffitude of elts[i]
+        and thus we mark 'me' as cross-staff.
+      */
+      if (to_boolean (elts[i]->get_property ("cross-staff"))
+           && my_dir == get_grob_direction (elts[i]))
+        return SCM_BOOL_T;
+    }
+
+  Grob *myvag = Grob::get_vertical_axis_group (me);
   for (vsize i = 0; i < elts.size (); i++)
-    if (to_boolean (elts[i]->get_property ("cross-staff")))
+    if (myvag != Grob::get_vertical_axis_group (elts[i]))
       return SCM_BOOL_T;
 
-  Grob *common = common_refpoint_of_array (elts, me->get_parent (Y_AXIS), Y_AXIS);
-  return scm_from_bool (common != me->get_parent (Y_AXIS));
+  return SCM_BOOL_F;
 }
 
+// long function - each stage is clearly marked
+
 SCM
 Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, int end,
                                        Real *current_off)
 {
   Direction dir = get_grob_direction (me);
-  bool skyline = to_boolean (me->get_property ("use-skylines"));
 
-  Real o = scm_to_double (skyline
-                          ? skyline_side_position (me, a, pure, start, end, current_off)
-                          : general_side_position (me, a, true, true, pure, start, end, current_off));
+  set<Grob *> support = get_support_set (me);
+
+  Grob *common[2];
+  for (Axis ax = X_AXIS; ax < NO_AXES; incr (ax))
+    common[ax] = common_refpoint_of_array (support,
+                                           (ax == a
+                                           ? me->get_parent (ax)
+                                           : me),
+                                           ax);
+
+  Grob *staff_symbol = Staff_symbol_referencer::get_staff_symbol (me);
+  bool quantize_position = to_boolean (me->get_maybe_pure_property ("quantize-position", pure, start, end));
+  bool me_cross_staff = to_boolean (me->get_property ("cross-staff"));
+
+  bool include_staff
+    = staff_symbol
+      && a == Y_AXIS
+      && scm_is_number (me->get_maybe_pure_property ("staff-padding", pure, start, end))
+      && !quantize_position;
+
+  if (include_staff)
+    common[Y_AXIS] = staff_symbol->common_refpoint (common[Y_AXIS], Y_AXIS);
+
+  Skyline my_dim;
+  SCM skyp = me->get_maybe_pure_property (a == X_AXIS
+                                          ? "horizontal-skylines"
+                                          : "vertical-skylines",
+                                          pure,
+                                          start,
+                                          end);
+  if (Skyline_pair::unsmob (skyp))
+    {
+      // for spanner pure heights, we don't know horizontal spacing,
+      // so a spanner can never have a meaningful x coordiante
+      // we just give it the parents' coordinate because its
+      // skyline will likely be of infinite width anyway
+      // and we don't want to prematurely trigger H spacing
+      Real xc = a == X_AXIS || (pure && dynamic_cast<Spanner *> (me))
+                ? me->get_parent (X_AXIS)->relative_coordinate (common[X_AXIS], X_AXIS)
+                : me->relative_coordinate (common[X_AXIS], X_AXIS);
+      // same here, for X_AXIS spacing, if it's happening, it should only be
+      // before line breaking.  because there is no thing as "pure" x spacing,
+      // we assume that it is all pure
+      Real yc = a == X_AXIS
+                ? me->pure_relative_y_coordinate (common[Y_AXIS], start, end)
+                : me->get_parent (Y_AXIS)->maybe_pure_coordinate (common[Y_AXIS], Y_AXIS, pure, start, end);
+      Skyline_pair copy = *Skyline_pair::unsmob (skyp);
+      copy.shift (a == X_AXIS ? yc : xc);
+      copy.raise (a == X_AXIS ? xc : yc);
+      my_dim = copy[-dir];
+    }
+  else
+    me->warning ("cannot find skylines - strange alignment will follow");
+
+
+  vector<Box> boxes;
+  vector<Skyline_pair> skyps;
+  set<Grob *>::iterator it;
+
+  for (it = support.begin (); it != support.end (); it++)
+    {
+      Grob *e = *it;
+
+      bool cross_staff = to_boolean (e->get_property ("cross-staff"));
+      if (a == Y_AXIS
+          && !me_cross_staff // 'me' promised not to adapt to staff-spacing
+          && cross_staff) // but 'e' might move based on staff-pacing
+        continue; // so 'me' may not move in response to 'e'
+
+      if (a == Y_AXIS
+          && Stem::has_interface (e))
+        {
+          // If called as 'pure' we may not force a stem to set its direction,
+          if (pure && !is_direction (e->get_property_data ("direction")))
+            continue;
+          // There is no need to consider stems pointing away.
+          if (dir == -get_grob_direction (e))
+            continue;
+        }
+
+      if (e)
+        {
+           SCM sp = e->get_maybe_pure_property (a == X_AXIS
+                                                ? "horizontal-skylines"
+                                                : "vertical-skylines",
+                                                pure,
+                                                start,
+                                                end);
+
+           if (Skyline_pair::unsmob (sp))
+             {
+               Real xc = pure && dynamic_cast<Spanner *> (e)
+                         ? e->get_parent (X_AXIS)->relative_coordinate (common[X_AXIS], X_AXIS)
+                         : e->relative_coordinate (common[X_AXIS], X_AXIS);
+               // same logic as above
+               // we assume horizontal spacing is always pure
+               Real yc = a == X_AXIS
+                         ? e->pure_relative_y_coordinate (common[Y_AXIS], start, end)
+                         : e->maybe_pure_coordinate (common[Y_AXIS], Y_AXIS, pure, start, end);
+               Skyline_pair copy = *Skyline_pair::unsmob (sp);
+               if (a == Y_AXIS
+                   && Stem::has_interface (e)
+                   && to_boolean (me->get_maybe_pure_property ("add-stem-support", pure, start, end)))
+                 copy[dir].set_minimum_height (copy[dir].max_height ());
+               copy.shift (a == X_AXIS ? yc : xc);
+               copy.raise (a == X_AXIS ? xc : yc);
+               skyps.push_back (copy);
+             }
+           else { /* no warning*/ }
+        }
+    }
+
+  Skyline dim (boxes, other_axis (a), dir);
+  if (skyps.size ())
+    {
+      Skyline_pair merged (skyps);
+      dim.merge (merged[dir]);
+    }
+
+  if (include_staff)
+    {
+      Interval staff_extents;
+      common[Y_AXIS] = staff_symbol->common_refpoint (common[Y_AXIS], Y_AXIS);
+      staff_extents = staff_symbol->maybe_pure_extent (common[Y_AXIS], Y_AXIS, pure, start, end);
+      dim.set_minimum_height (staff_extents[dir]);
+    }
+
+  // Sometimes, we want to side position for grobs but they
+  // don't position against anything.  Some cases where this is true:
+  //   - StanzaNumber if the supporting lyrics are hara-kiri'd
+  //     SystemStartBracket
+  //     InstrumentName
+  // In all these cases, we set the height of the support to 0.
+  // This becomes then like the self-alignment-interface with the
+  // caveat that there is padding added.
+  // TODO: if there is a grob that never has side-support-elements
+  // (like InstrumentName), why are we using this function? Isn't it
+  // overkill? A function like self-alignment-interface with padding
+  // works just fine.
+  // One could even imagine the two interfaces merged, as the only
+  // difference is that in self-alignment-interface we align on the parent
+  // where as here we align on a group of grobs.
+  if (dim.is_empty ())
+    {
+      dim = Skyline (dim.direction ());
+      dim.set_minimum_height (0.0);
+    }
+
+  Real ss = Staff_symbol_referencer::staff_space (me);
+  Real dist = dim.distance (my_dim, robust_scm2double (me->get_maybe_pure_property ("horizon-padding", pure, start, end), 0.0));
+  Real total_off = !isinf (dist) ? dir * dist : 0.0;
+
+  total_off += dir * ss * robust_scm2double (me->get_maybe_pure_property ("padding", pure, start, end), 0.0);
+
+  Real minimum_space = ss * robust_scm2double (me->get_maybe_pure_property ("minimum-space", pure, start, end), -1);
+
+  if (minimum_space >= 0
+      && dir
+      && total_off * dir < minimum_space)
+    total_off = minimum_space * dir;
+
+  if (current_off)
+    total_off = dir * max (dir * total_off,
+                           dir * (*current_off));
+
+  /* FIXME: 1000 should relate to paper size.  */
+  if (fabs (total_off) > 1000)
+    {
+      string msg
+        = String_convert::form_string ("Improbable offset for grob %s: %f",
+                                       me->name ().c_str (), total_off);
+
+      programming_error (msg);
+      if (strict_infinity_checking)
+        scm_misc_error (__FUNCTION__, "Improbable offset.", SCM_EOL);
+    }
 
   /*
-    Maintain a minimum distance to the staff. This is similar to side
-    position with padding, but it will put adjoining objects on a row if
+    Ensure 'staff-padding' from my refpoint to the staff.  This is similar to
+    side-position with padding, but it will put adjoining objects on a row if
     stuff sticks out of the staff a little.
   */
   Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
   if (staff && a == Y_AXIS)
     {
-      if (to_boolean (me->get_property ("quantize-position")))
+      if (quantize_position)
         {
           Grob *common = me->common_refpoint (staff, Y_AXIS);
           Real my_off = me->get_parent (Y_AXIS)->maybe_pure_coordinate (common, Y_AXIS, pure, start, end);
           Real staff_off = staff->maybe_pure_coordinate (common, Y_AXIS, pure, start, end);
           Real ss = Staff_symbol::staff_space (staff);
-          Real position = 2 * (my_off + o - staff_off) / ss;
+          Real position = 2 * (my_off + total_off - staff_off) / ss;
           Real rounded = directed_round (position, dir);
           Grob *head = me->get_parent (X_AXIS);
 
@@ -357,18 +385,16 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
 
                   && abs (Staff_symbol_referencer::get_position (head)) > abs (position)))
             {
-              o += (rounded - position) * 0.5 * ss;
+              total_off += (rounded - position) * 0.5 * ss;
               if (Staff_symbol_referencer::on_line (me, int (rounded)))
-                o += dir * 0.5 * ss;
+                total_off += dir * 0.5 * ss;
             }
         }
-      else if (scm_is_number (me->get_property ("staff-padding")) && dir)
+      else if (scm_is_number (me->get_maybe_pure_property ("staff-padding", pure, start, end)) && dir)
         {
-          Interval iv = me->maybe_pure_extent (me, a, pure, start, end);
-
           Real staff_padding
             = Staff_symbol_referencer::staff_space (me)
-              * scm_to_double (me->get_property ("staff-padding"));
+              * scm_to_double (me->get_maybe_pure_property ("staff-padding", pure, start, end));
 
           Grob *parent = me->get_parent (Y_AXIS);
           Grob *common = me->common_refpoint (staff, Y_AXIS);
@@ -376,12 +402,12 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
           Real staff_position = staff->maybe_pure_coordinate (common, Y_AXIS, pure, start, end);
           Interval staff_extent = staff->maybe_pure_extent (staff, a, pure, start, end);
           Real diff = (dir * staff_extent[dir] + staff_padding
-                       - dir * (o + iv[-dir])
+                       - dir * total_off
                        + dir * (staff_position - parent_position));
-          o += dir * max (diff, 0.0);
+          total_off += dir * max (diff, 0.0);
         }
     }
-  return scm_from_double (o);
+  return scm_from_double (total_off);
 }
 
 void
@@ -393,7 +419,7 @@ Side_position_interface::set_axis (Grob *me, Axis a)
       chain_offset_callback (me,
                              (a == X_AXIS)
                              ? x_aligned_side_proc
-                             : y_aligned_side_proc,
+                             : ly_make_unpure_pure_container (y_aligned_side_proc, pure_y_aligned_side_proc),
                              a);
     }
 }
@@ -465,8 +491,10 @@ ADD_INTERFACE (Side_position_interface,
                " is ignored.",
 
                /* properties */
+               "add-stem-support "
                "direction "
                "minimum-space "
+               "horizon-padding "
                "padding "
                "quantize-position "
                "side-axis "
index 0c5dca8e95873af67d1d0433b50d8ae6950abfbb..59f9fd995b78c4f00a677db6c37cacb6e652129f 100644 (file)
@@ -18,6 +18,7 @@
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include "simple-closure.hh"
+#include "unpure-pure-container.hh"
 
 #include "grob.hh"
 
@@ -64,27 +65,34 @@ evaluate_with_simple_closure (SCM delayed_argument,
   if (is_simple_closure (expr))
     {
       SCM inside = simple_closure_expression (expr);
+      SCM proc = is_unpure_pure_container (scm_car (inside))
+               ? (pure ? scm_car (inside) : unpure_pure_container_unpure_part (scm_car (inside)))
+               : scm_car (inside);
       SCM args = scm_cons (delayed_argument,
                            evaluate_args (delayed_argument, scm_cdr (inside),
                                           pure, start, end));
       if (scm_cdr (args) == SCM_UNSPECIFIED)
         return SCM_UNSPECIFIED;
       if (pure)
-        return call_pure_function (scm_car (inside), args, start, end);
-      return scm_apply_0 (scm_car (inside), args);
+        return call_pure_function (proc, args, start, end);
+      return scm_apply_0 (proc, args);
     }
   else if (!scm_is_pair (expr))
     return expr;
   else if (scm_car (expr) == ly_symbol2scm ("quote"))
     return scm_cadr (expr);
-  else if (ly_is_procedure (scm_car (expr)))
+  else if (is_unpure_pure_container (scm_car (expr))
+           || ly_is_procedure (scm_car (expr)))
     {
+      SCM proc = is_unpure_pure_container (scm_car (expr))
+               ? (pure ? scm_car (expr) : unpure_pure_container_unpure_part (scm_car (expr)))
+               : scm_car (expr);
       SCM args = evaluate_args (delayed_argument, scm_cdr (expr), pure, start, end);
       if (args == SCM_UNSPECIFIED)
         return SCM_UNSPECIFIED;
       if (pure)
-        return call_pure_function (scm_car (expr), args, start, end);
-      return scm_apply_0 (scm_car (expr), args);
+        return call_pure_function (proc, args, start, end);
+      return scm_apply_0 (proc, args);
     }
   else
     // ugh. deviation from standard. Should print error?
index 88ebae09d85c4714e318013bbf5d6a5c8541a452..aef524da87579bb2ecb1e087409f0f2da04baa3f 100644 (file)
@@ -370,9 +370,12 @@ get_column_description (vector<Grob *> const &cols, vsize col_index, bool line_s
   if (next_col)
     description.spring_ = Spaceable_grob::get_spring (col, next_col);
 
-  Grob *end_col = dynamic_cast<Item *> (cols[col_index + 1])->find_prebroken_piece (LEFT);
-  if (end_col)
-    description.end_spring_ = Spaceable_grob::get_spring (col, end_col);
+  if (col_index + 1 < cols.size ())
+    {
+      Grob *end_col = dynamic_cast<Item *> (cols[col_index + 1])->find_prebroken_piece (LEFT);
+      if (end_col)
+        description.end_spring_ = Spaceable_grob::get_spring (col, end_col);
+    }
 
   for (SCM s = Spaceable_grob::get_minimum_distances (col);
        scm_is_pair (s); s = scm_cdr (s))
@@ -384,6 +387,9 @@ get_column_description (vector<Grob *> const &cols, vsize col_index, bool line_s
           if (cols[j] == other)
             description.rods_.push_back (Rod_description (j, scm_to_double (scm_cdar (s))));
           else /* it must end at the LEFT prebroken_piece */
+               /* see Spanner::set_spacing_rods for more comments on how
+                  to deal with situations where  we don't know if we're
+                  ending yet on the left prebroken piece */
             description.end_rods_.push_back (Rod_description (j, scm_to_double (scm_cdar (s))));
         }
     }
index 3b891e8e79f1e978f6ab82ded8ff45f9e37a4bb2..3e0ad4fae72cc504185da470df43bc4c8b2c9ff3 100644 (file)
@@ -63,7 +63,7 @@ Simultaneous_music_iterator::construct_children ()
 
       SCM name = ly_symbol2scm (get_outlet ()->context_name ().c_str ());
       Context *c = (j && create_separate_contexts_)
-                   ? get_outlet ()->find_create_context (name, to_string (j), SCM_EOL)
+                   ? get_outlet ()->find_create_context (name, ::to_string (j), SCM_EOL)
                    : get_outlet ();
 
       if (!c)
index 6f6b4e1b889b5bf0529c0069cfd374bfe507e98a..164117c35bdb62b59516eafe08a8d725e1456fe0 100644 (file)
@@ -28,13 +28,23 @@ Skyline_pair::Skyline_pair ()
 {
 }
 
-Skyline_pair::Skyline_pair (vector<Box> const &boxes, Real padding, Axis a)
-  : skylines_ (Skyline (boxes, padding, a, DOWN), Skyline (boxes, padding, a, UP))
+Skyline_pair::Skyline_pair (vector<Box> const &boxes, Axis a)
+  : skylines_ (Skyline (boxes, a, DOWN), Skyline (boxes, a, UP))
 {
 }
 
-Skyline_pair::Skyline_pair (Box const &b, Real padding, Axis a)
-  : skylines_ (Skyline (b, padding, a, DOWN), Skyline (b, padding, a, UP))
+Skyline_pair::Skyline_pair (vector<Drul_array<Offset> > const &buildings, Axis a)
+  : skylines_ (Skyline (buildings, a, DOWN), Skyline (buildings, a, UP))
+{
+}
+
+Skyline_pair::Skyline_pair (vector<Skyline_pair> const &skypairs)
+  : skylines_ (Skyline (skypairs, DOWN), Skyline (skypairs, UP))
+{
+}
+
+Skyline_pair::Skyline_pair (Box const &b, Axis a)
+  : skylines_ (Skyline (b, a, DOWN), Skyline (b, a, UP))
 {
 }
 
@@ -45,6 +55,13 @@ Skyline_pair::raise (Real r)
   skylines_[DOWN].raise (r);
 }
 
+void
+Skyline_pair::deholify ()
+{
+  skylines_[UP].deholify ();
+  skylines_[DOWN].deholify ();
+}
+
 void
 Skyline_pair::shift (Real r)
 {
@@ -53,10 +70,10 @@ Skyline_pair::shift (Real r)
 }
 
 void
-Skyline_pair::insert (Box const &b, Real padding, Axis a)
+Skyline_pair::insert (Box const &b, Axis a)
 {
-  skylines_[UP].insert (b, padding, a);
-  skylines_[DOWN].insert (b, padding, a);
+  skylines_[UP].insert (b, a);
+  skylines_[DOWN].insert (b, a);
 }
 
 void
@@ -73,11 +90,23 @@ Skyline_pair::print () const
   skylines_[DOWN].print ();
 }
 
+Real
+Skyline_pair::left () const
+{
+  return min (skylines_[UP].left (), skylines_[DOWN].left ());
+}
+
+Real
+Skyline_pair::right () const
+{
+  return max (skylines_[UP].right (), skylines_[DOWN].right ());
+}
+
 void
 Skyline_pair::print_points () const
 {
-  skylines_[UP].print ();
-  skylines_[DOWN].print ();
+  skylines_[UP].print_points ();
+  skylines_[DOWN].print_points ();
 }
 
 bool
index 0250fc07f4743ba44e7bc1ac8af23ed6057aa435..a4620158661686c997ae058498152ccab811398f 100644 (file)
@@ -18,6 +18,7 @@
 */
 
 #include "skyline.hh"
+#include "skyline-pair.hh"
 #include <deque>
 #include <cstdio>
 
    a DOWN skyline with an UP skyline, we need to flip the DOWN skyline first.
    This means that the merging routine doesn't need to be aware of direction,
    but the distance routine does.
-*/
 
-/* If we start including very thin buildings, numerical accuracy errors can
-   arise. Therefore, we ignore all buildings that are less than epsilon wide. */
-#define EPS 1e-5
+   From 2007 through 2012, buildings of width less than EPS were discarded,
+   citing numerical accuracy concerns.  We remember that floating point
+   comparisons of nearly-equal values can be affected by rounding error.
+   Also, some target machines use the x87 floating point unit, which provides
+   extended precision for intermediate results held in registers. On this type
+   of hardware comparisons such as
+     double c = 1.0/3.0; boolean compare = (c == 1.0/3.0)
+   could go either way because the 1.0/3.0 is allowed to be kept
+   higher precision than the variable 'c'.
+   Alert to these considerations, we now accept buildings of zero-width.
+*/
 
 static void
 print_buildings (list<Building> const &b)
@@ -87,16 +95,18 @@ Building::Building (Real start, Real start_height, Real end_height, Real end)
   if (isinf (start) || isinf (end))
     assert (start_height == end_height);
 
+  start_ = start;
   end_ = end;
   precompute (start, start_height, end_height, end);
 }
 
-Building::Building (Box const &b, Real horizon_padding, Axis horizon_axis, Direction sky)
+Building::Building (Box const &b, Axis horizon_axis, Direction sky)
 {
-  Real start = b[horizon_axis][LEFT] - horizon_padding;
-  Real end = b[horizon_axis][RIGHT] + horizon_padding;
+  Real start = b[horizon_axis][LEFT];
+  Real end = b[horizon_axis][RIGHT];
   Real height = sky * b[other_axis (horizon_axis)][sky];
 
+  start_ = start;
   end_ = end;
   precompute (start, height, height, end);
 }
@@ -104,9 +114,9 @@ Building::Building (Box const &b, Real horizon_padding, Axis horizon_axis, Direc
 void
 Building::precompute (Real start, Real start_height, Real end_height, Real end)
 {
-  slope_ = (end_height - start_height) / (end - start);
-  if (start_height == end_height) /* if they were both infinite, we would get nan, not 0, from the prev line */
-    slope_ = 0;
+  slope_ = 0.0; /* if they were both infinite, we would get nan, not 0, from the prev line */
+  if (start_height != end_height)
+    slope_ = (end_height - start_height) / (end - start);
 
   assert (!isinf (slope_) && !isnan (slope_));
 
@@ -115,11 +125,17 @@ Building::precompute (Real start, Real start_height, Real end_height, Real end)
       assert (start_height == end_height);
       y_intercept_ = start_height;
     }
+  else if (fabs(slope_) > 1e6)
+    // too steep to be stored in slope-intercept form, given round-off error
+    {
+      slope_ = 0.0;
+      y_intercept_ = max(start_height, end_height);
+    }
   else
     y_intercept_ = start_height - slope_ * start;
 }
 
-Real
+inline Real
 Building::height (Real x) const
 {
   return isinf (x) ? y_intercept_ : slope_ * x + y_intercept_;
@@ -128,10 +144,10 @@ Building::height (Real x) const
 void
 Building::print () const
 {
-  printf ("%f x + %f ends at %f\n", slope_, y_intercept_, end_);
+  printf ("%f x + %f from %f to %f\n", slope_, y_intercept_, start_, end_);
 }
 
-Real
+inline Real
 Building::intersection_x (Building const &other) const
 {
   Real ret = (y_intercept_ - other.y_intercept_) / (other.slope_ - slope_);
@@ -145,28 +161,39 @@ Building::leading_part (Real chop)
   end_ = chop;
 }
 
-Building
-Building::sloped_neighbour (Real start, Real horizon_padding, Direction d) const
+// Returns a shift s such that (x + s, y) intersects the roof of
+// this building.  If no such shift exists, returns infinity_f.
+Real
+Building::shift_to_intersect (Real x, Real y) const
 {
-  Real x = (d == LEFT) ? start : end_;
-  Real left = x;
-  Real right = x + d * horizon_padding;
-  Real left_height = height (x);
-  Real right_height = left_height - horizon_padding;
-  if (d == LEFT)
-    {
-      swap (left, right);
-      swap (left_height, right_height);
-    }
-  return Building (left, left_height, right_height, right);
+  // Solve for s: y = (x + s)*m + b
+  Real ret = (y - y_intercept_ - slope_ * x) / slope_;
+
+  if (ret >= start_ && ret <= end_ && !isinf (ret))
+    return ret;
+  return infinity_f;
 }
 
 static Real
-first_intersection (Building const &b, list<Building> *const s, Real start_x)
+first_intersection (Building const &b, list<Building> *s, Real start_x)
+/* Return the first x >= start_x where skyline s above Building b.
+ * Removes buildings from s that are concealed by b. */
 {
   while (!s->empty () && start_x < b.end_)
     {
       Building c = s->front ();
+
+      // conceals and intersection_x involve multiplication and
+      // division. Avoid that, if we can.
+      if (c.y_intercept_ == -infinity_f)
+        {
+          if (c.end_ > b.end_)
+            return b.end_;
+          start_x = c.end_;
+          s->pop_front ();
+          continue;
+        }
+
       if (c.conceals (b, start_x))
         return start_x;
 
@@ -193,9 +220,59 @@ Building::conceals (Building const &other, Real x) const
          || (i > x && slope_ < other.slope_);
 }
 
+// Remove redundant empty buildings from the skyline.
+// If there are two adjacent empty buildings, they can be
+// turned into one.
+void
+Skyline::normalize ()
+{
+  bool last_empty = false;
+  list<Building>::iterator i;
+
+  for (i = buildings_.begin (); i != buildings_.end (); i++)
+    {
+      if (last_empty && i->y_intercept_ == -infinity_f)
+        {
+          list<Building>::iterator last = i;
+          last--;
+          last->end_ = i->end_;
+          buildings_.erase (i);
+          i = last;
+        }
+      last_empty = (i->y_intercept_ == -infinity_f);
+    }
+
+  assert (buildings_.front ().start_ == -infinity_f);
+  assert (buildings_.back ().end_ == infinity_f);
+}
+
+void
+Skyline::deholify ()
+{
+  // Since a skyline should always be normalized, we can
+  // assume that there are never two adjacent empty buildings.
+  // That is, if center is empty then left and right are not.
+  list<Building>::iterator left = buildings_.begin ();
+  list<Building>::iterator center = buildings_.begin ();
+  list<Building>::iterator right;
+
+  for (right = buildings_.begin (); right != buildings_.end (); right++)
+    {
+      if (center != buildings_.begin () && center->y_intercept_ == -infinity_f)
+        {
+          Real p1 = left->height (left->end_);
+          Real p2 = right->height (right->start_);
+          *center = Building (center->start_, p1, p2, center->end_);
+
+          left = center;
+          center = right;
+        }
+    }
+}
+
 void
 Skyline::internal_merge_skyline (list<Building> *s1, list<Building> *s2,
-                                 list<Building> *const result)
+                                 list<Building> *const result) const
 {
   if (s1->empty () || s2->empty ())
     {
@@ -204,33 +281,59 @@ Skyline::internal_merge_skyline (list<Building> *s1, list<Building> *s2,
     }
 
   Real x = -infinity_f;
+  Real last_end = -infinity_f;
   while (!s1->empty ())
     {
       if (s2->front ().conceals (s1->front (), x))
         swap (s1, s2);
 
       Building b = s1->front ();
-      Real end = first_intersection (b, s2, x);
+      Building c = s2->front ();
 
+      // Optimization: if the other skyline is empty at this point,
+      // we can avoid testing some intersections. Just grab as many
+      // buildings from s1 as we can, and shove them onto the output.
+      if (c.y_intercept_ == -infinity_f
+          && c.end_ >= b.end_)
+        {
+          list<Building>::iterator i = s1->begin ();
+          i++;
+          while (i != s1->end () && i->end_ <= c.end_)
+            i++;
+
+          s1->front ().start_ = x;
+          result->splice (result->end (), *s1, s1->begin (), i);
+          x = result->back ().end_;
+          last_end = x;
+          continue;
+        }
+      // first_intersection() removes buildings from s2 if b hides them
+      Real end = first_intersection (b, s2, x);
       if (s2->empty ())
         {
-          result->push_front (b);
+          b.start_ = last_end;
+          result->push_back (b);
           break;
         }
 
-      /* only include buildings wider than epsilon */
-      if (end > x + EPS)
+      // Should be (end > x), during ver2.19.  end == x happens fairly often,
+      // and we do not need to keep vertical segments within a skyline.
+      if (end >= x)
         {
           b.leading_part (end);
-          result->push_front (b);
+          b.start_ = last_end;
+          last_end = b.end_;
+          result->push_back (b);
         }
 
       if (end >= s1->front ().end_)
         s1->pop_front ();
+      // Should add during ver2.19 (to avoid an endless loop
+      // when  merging identical skylines with a vertical segment)
+      // if (end >= s2->front().end_) s2->pop_front();
 
       x = end;
     }
-  result->reverse ();
 }
 
 static void
@@ -240,89 +343,89 @@ empty_skyline (list<Building> *const ret)
 }
 
 /*
-  Given Building 'b' with starting wall location 'start', extend each side
-  with a sloped roofline of width 'horizon_padding'; put the skyline in 'ret'
+  Given Building 'b', build a skyline containing only that building.
 */
 static void
-single_skyline (Building b, Real start, Real horizon_padding, list<Building> *const ret)
+single_skyline (Building b, list<Building> *const ret)
 {
-  bool sloped_neighbours = horizon_padding > 0 && !isinf (start) && !isinf (b.end_);
-  if (!isinf (b.end_))
-    ret->push_front (Building (b.end_ + horizon_padding, -infinity_f,
-                               -infinity_f, infinity_f));
-  if (sloped_neighbours)
-    ret->push_front (b.sloped_neighbour (start, horizon_padding, RIGHT));
-
-  if (b.end_ > start + EPS)
-    ret->push_front (b);
+  assert (b.end_ >= b.start_);
 
-  if (sloped_neighbours)
-    ret->push_front (b.sloped_neighbour (start, horizon_padding, LEFT));
-
-  if (!isinf (start))
-    ret->push_front (Building (-infinity_f, -infinity_f,
-                               -infinity_f, start - horizon_padding));
+  if (b.start_ != -infinity_f)
+    ret->push_back (Building (-infinity_f, -infinity_f,
+                              -infinity_f, b.start_));
+  ret->push_back (b);
+  if (b.end_ != infinity_f)
+    ret->push_back (Building (b.end_, -infinity_f,
+                              -infinity_f, infinity_f));
 }
 
 /* remove a non-overlapping set of boxes from BOXES and build a skyline
    out of them */
 static list<Building>
-non_overlapping_skyline (list<Box> *const boxes, Real horizon_padding, Axis horizon_axis, Direction sky)
+non_overlapping_skyline (list<Building> *const buildings)
 {
   list<Building> result;
   Real last_end = -infinity_f;
-  list<Box>::iterator i = boxes->begin ();
-  while (i != boxes->end ())
+  Building last_building (-infinity_f, -infinity_f, -infinity_f, infinity_f);
+  list<Building>::iterator i = buildings->begin ();
+  while (i != buildings->end ())
     {
-      Interval iv = (*i)[horizon_axis];
+      Real x1 = i->start_;
+      Real y1 = i->height (i->start_);
+      Real x2 = i->end_;
+      Real y2 = i->height (i->end_);
+
+      // Drop buildings that will obviously have no effect.
+      if (last_building.height (x1) >= y1
+          && last_building.end_ >= x2
+          && last_building.height (x2) >= y2)
+        {
+          list<Building>::iterator j = i++;
+          buildings->erase (j);
+          continue;
+        }
 
-      if (iv[LEFT] - horizon_padding < last_end)
+      if (x1 < last_end)
         {
           i++;
           continue;
         }
 
-      if (iv[LEFT] - horizon_padding > last_end + EPS)
-        result.push_front (Building (last_end, -infinity_f, -infinity_f, iv[LEFT] - 2 * horizon_padding));
+      // Insert empty Buildings into any gaps. (TODO: is this needed? -KOH)
+      if (x1 > last_end)
+        result.push_back (Building (last_end, -infinity_f, -infinity_f, x1));
 
-      Building b (*i, horizon_padding, horizon_axis, sky);
-      bool sloped_neighbours = horizon_padding > 0 && !isinf (iv.length ());
-      if (sloped_neighbours)
-        result.push_front (b.sloped_neighbour (iv[LEFT] - horizon_padding, horizon_padding, LEFT));
-      result.push_front (b);
-      if (sloped_neighbours)
-        result.push_front (b.sloped_neighbour (iv[LEFT] - horizon_padding, horizon_padding, RIGHT));
+      result.push_back (*i);
+      last_building = *i;
+      last_end = i->end_;
 
-      list<Box>::iterator j = i++;
-      boxes->erase (j);
-      last_end = result.front ().end_;
+      list<Building>::iterator j = i++;
+      buildings->erase (j);
     }
+
   if (last_end < infinity_f)
-    result.push_front (Building (last_end, -infinity_f, -infinity_f, infinity_f));
-  result.reverse ();
+    result.push_back (Building (last_end, -infinity_f, -infinity_f, infinity_f));
   return result;
 }
 
-class LessThanBox
+class LessThanBuilding
 {
-  Axis a_;
-
 public:
-  LessThanBox (Axis a)
+  bool operator () (Building const &b1, Building const &b2)
   {
-    a_ = a;
-  }
-
-  bool operator () (Box const &b1, Box const &b2)
-  {
-    return b1[a_][LEFT] < b2[a_][LEFT];
+    return b1.start_ < b2.start_
+           || (b1.start_ == b2.start_ && b1.height (b1.start_) > b2.height (b1.start_));
   }
 };
 
+/**
+   BUILDINGS is a list of buildings, but they could be overlapping
+   and in any order.  The returned list of buildings is ordered and non-overlapping.
+*/
 list<Building>
-Skyline::internal_build_skyline (list<Box> *boxes, Real horizon_padding, Axis horizon_axis, Direction sky)
+Skyline::internal_build_skyline (list<Building> *buildings) const
 {
-  vsize size = boxes->size ();
+  vsize size = buildings->size ();
 
   if (size == 0)
     {
@@ -333,16 +436,14 @@ Skyline::internal_build_skyline (list<Box> *boxes, Real horizon_padding, Axis ho
   else if (size == 1)
     {
       list<Building> result;
-      single_skyline (Building (boxes->front (), horizon_padding, horizon_axis, sky),
-                      boxes->front ()[horizon_axis][LEFT] - horizon_padding,
-                      horizon_padding, &result);
+      single_skyline (buildings->front (), &result);
       return result;
     }
 
   deque<list<Building> > partials;
-  boxes->sort (LessThanBox (horizon_axis));
-  while (!boxes->empty ())
-    partials.push_back (non_overlapping_skyline (boxes, horizon_padding, horizon_axis, sky));
+  buildings->sort (LessThanBuilding ());
+  while (!buildings->empty ())
+    partials.push_back (non_overlapping_skyline (buildings));
 
   /* we'd like to say while (partials->size () > 1) but that's O (n).
      Instead, we exit in the middle of the loop */
@@ -369,18 +470,6 @@ Skyline::Skyline ()
   empty_skyline (&buildings_);
 }
 
-Skyline::Skyline (Skyline const &src)
-{
-  sky_ = src.sky_;
-
-  /* doesn't a list's copy constructor do this? -- jneem */
-  for (list<Building>::const_iterator i = src.buildings_.begin ();
-       i != src.buildings_.end (); i++)
-    {
-      buildings_.push_back (Building ((*i)));
-    }
-}
-
 Skyline::Skyline (Direction sky)
 {
   sky_ = sky;
@@ -388,68 +477,90 @@ Skyline::Skyline (Direction sky)
 }
 
 /*
-  build padded skyline from an existing skyline with padding
-  added to it.
-*/
+  Build skyline from a set of boxes.
 
-Skyline::Skyline (Skyline const &src, Real horizon_padding, Axis /*a*/)
+  Boxes should be non-empty on both axes.  Otherwise, they will be ignored
+ */
+Skyline::Skyline (vector<Box> const &boxes, Axis horizon_axis, Direction sky)
 {
-  /*
-     We extract boxes from the skyline, then build a new skyline from
-     the boxes.
-     A box is created for every horizontal portion of the skyline
-     Because skylines are defined positive, and then inverted if they
-     are to be down-facing, we create the new skyline in the UP
-     direction, then give it the down direction if needed.
-  */
-  Real start = -infinity_f;
-  list<Box> boxes;
+  list<Building> buildings;
+  sky_ = sky;
+
+  for (vsize i = 0; i < boxes.size (); i++)
+    if (!boxes[i].is_empty (X_AXIS)
+        && !boxes[i].is_empty (Y_AXIS))
+      buildings.push_front (Building (boxes[i], horizon_axis, sky));
 
-  // establish a baseline box
-  // FIXME: This has hardcoded logic, assuming a == X_AXIS!
-  boxes.push_back (Box (Interval (-infinity_f, infinity_f),
-                        Interval (0, 0)));
-  list<Building>::const_iterator end = src.buildings_.end ();
-  for (list<Building>::const_iterator i = src.buildings_.begin (); i != end; start = i->end_, i++)
-    if ((i->slope_ == 0) && !isinf (i->y_intercept_))
-      boxes.push_back (Box (Interval (start, i->end_),
-                            Interval (-infinity_f, i->y_intercept_)));
-  buildings_ = internal_build_skyline (&boxes, horizon_padding, X_AXIS, UP);
-  sky_ = src.sky_;
+  buildings_ = internal_build_skyline (&buildings);
+  normalize ();
 }
 
 /*
-  build skyline from a set of boxes. If horizon_padding > 0, expand all the boxes
-  by that amount and add 45-degree sloped boxes to the edges of each box (of
-  width horizon_padding). That is, the total amount of horizontal expansion is
-  horizon_padding*4, half of which is sloped and half of which is flat.
+  build skyline from a set of line segments.
 
-  Boxes should have fatness in the horizon_axis (after they are expanded by
-  horizon_padding), otherwise they are ignored.
+  Segments can be articulated from left to right or right to left.
+  In the case of the latter, they will be stored internally as left to right.
  */
-Skyline::Skyline (vector<Box> const &boxes, Real horizon_padding, Axis horizon_axis, Direction sky)
+Skyline::Skyline (vector<Drul_array<Offset> > const &segments, Axis horizon_axis, Direction sky)
 {
-  list<Box> filtered_boxes;
+  list<Building> buildings;
   sky_ = sky;
 
-  Axis vert_axis = other_axis (horizon_axis);
-  for (vsize i = 0; i < boxes.size (); i++)
+  for (vsize i = 0; i < segments.size (); i++)
     {
-      Interval iv = boxes[i][horizon_axis];
-      iv.widen (horizon_padding);
-      if (iv.length () > EPS && !boxes[i][vert_axis].is_empty ())
-        filtered_boxes.push_front (boxes[i]);
+      Drul_array<Offset> const &seg = segments[i];
+      Offset left = seg[LEFT];
+      Offset right = seg[RIGHT];
+      if (left[horizon_axis] > right[horizon_axis])
+        swap (left, right);
+
+      Real x1 = left[horizon_axis];
+      Real x2 = right[horizon_axis];
+      Real y1 = left[other_axis (horizon_axis)] * sky;
+      Real y2 = right[other_axis (horizon_axis)] * sky;
+
+      if (x1 <= x2)
+        buildings.push_back (Building (x1, y1, y2, x2));
     }
 
-  buildings_ = internal_build_skyline (&filtered_boxes, horizon_padding, horizon_axis, sky);
+  buildings_ = internal_build_skyline (&buildings);
+  normalize ();
 }
 
-Skyline::Skyline (Box const &b, Real horizon_padding, Axis horizon_axis, Direction sky)
+Skyline::Skyline (vector<Skyline_pair> const &skypairs, Direction sky)
 {
   sky_ = sky;
-  Building front (b, horizon_padding, horizon_axis, sky);
-  single_skyline (front, b[horizon_axis][LEFT] - horizon_padding,
-                  horizon_padding, &buildings_);
+
+  deque<Skyline> partials;
+  for (vsize i = 0; i < skypairs.size (); i++)
+    partials.push_back (Skyline ((skypairs[i])[sky]));
+
+  while (partials.size () > 1)
+    {
+      Skyline one = partials.front ();
+      partials.pop_front ();
+      Skyline two = partials.front ();
+      partials.pop_front ();
+
+      one.merge (two);
+      partials.push_back (one);
+    }
+
+  if (partials.size ())
+    buildings_.swap (partials.front ().buildings_);
+  else
+    buildings_.clear ();
+}
+
+Skyline::Skyline (Box const &b, Axis horizon_axis, Direction sky)
+{
+  sky_ = sky;
+  if (!b.is_empty (X_AXIS) && !b.is_empty (Y_AXIS))
+    {
+      Building front (b, horizon_axis, sky);
+      single_skyline (front, &buildings_);
+      normalize ();
+    }
 }
 
 void
@@ -457,14 +568,24 @@ Skyline::merge (Skyline const &other)
 {
   assert (sky_ == other.sky_);
 
+  if (other.is_empty ())
+    return;
+
+  if (is_empty ())
+    {
+      buildings_ = other.buildings_;
+      return;
+    }
+
   list<Building> other_bld (other.buildings_);
   list<Building> my_bld;
   my_bld.splice (my_bld.begin (), buildings_);
   internal_merge_skyline (&other_bld, &my_bld, &buildings_);
+  normalize ();
 }
 
 void
-Skyline::insert (Box const &b, Real horizon_padding, Axis a)
+Skyline::insert (Box const &b, Axis a)
 {
   list<Building> other_bld;
   list<Building> my_bld;
@@ -477,15 +598,13 @@ Skyline::insert (Box const &b, Real horizon_padding, Axis a)
     }
 
   /* do the same filtering as in Skyline (vector<Box> const&, etc.) */
-  Interval iv = b[a];
-  iv.widen (horizon_padding);
-  if (iv.length () <= EPS || b[other_axis (a)].is_empty ())
+  if (b.is_empty (X_AXIS) || b.is_empty (Y_AXIS))
     return;
 
   my_bld.splice (my_bld.begin (), buildings_);
-  single_skyline (Building (b, horizon_padding, a, sky_), b[a][LEFT] - horizon_padding,
-                  horizon_padding, &other_bld);
+  single_skyline (Building (b, a, sky_), &other_bld);
   internal_merge_skyline (&other_bld, &my_bld, &buildings_);
+  normalize ();
 }
 
 void
@@ -502,6 +621,7 @@ Skyline::shift (Real s)
   list<Building>::iterator end = buildings_.end ();
   for (list<Building>::iterator i = buildings_.begin (); i != end; i++)
     {
+      i->start_ += s;
       i->end_ += s;
       i->y_intercept_ -= s * i->slope_;
     }
@@ -525,32 +645,87 @@ Skyline::touching_point (Skyline const &other, Real horizon_padding) const
 Real
 Skyline::internal_distance (Skyline const &other, Real horizon_padding, Real *touch_point) const
 {
-  assert (sky_ == -other.sky_);
+  if (horizon_padding == 0.0)
+    return internal_distance (other, touch_point);
+
+  // Note that it is not necessary to build a padded version of other,
+  // because the same effect can be achieved just by doubling horizon_padding.
+  Skyline padded_this = padded (horizon_padding);
+  return padded_this.internal_distance (other, touch_point);
+}
+
+Skyline
+Skyline::padded (Real horizon_padding) const
+{
+  if (horizon_padding < 0.0)
+    warning ("Cannot have negative horizon padding.  Junking.");
 
-  Skyline const *padded_this = this;
-  Skyline const *padded_other = &other;
-  bool created_tmp_skylines = false;
-
-  /*
-    For systems, padding is not added at creation time.  Padding is
-    added to AxisGroup objects when outside-staff objects are added.
-    Thus, when we want to place systems with horizontal padding,
-    we do it at distance calculation time.
-  */
-  if (horizon_padding != 0.0)
+  if (horizon_padding <= 0.0)
+    return *this;
+
+  list<Building> pad_buildings;
+  for (list<Building>::const_iterator i = buildings_.begin (); i != buildings_.end (); ++i)
     {
-      padded_this = new Skyline (*padded_this, horizon_padding, X_AXIS);
-      padded_other = new Skyline (*padded_other, horizon_padding, X_AXIS);
-      created_tmp_skylines = true;
+      if (i->start_ > -infinity_f)
+        {
+          Real height = i->height (i->start_);
+          if (height > -infinity_f)
+            {
+              // Add the sloped building that pads the left side of the current building.
+              Real start = i->start_ - 2 * horizon_padding;
+              Real end = i->start_ - horizon_padding;
+              pad_buildings.push_back (Building (start, height - horizon_padding, height, end));
+
+              // Add the flat building that pads the left side of the current building.
+              start = i->start_ - horizon_padding;
+              end = i->start_;
+              pad_buildings.push_back (Building (start, height, height, end));
+            }
+        }
+
+      if (i->end_ < infinity_f)
+        {
+          Real height = i->height (i->end_);
+          if (height > -infinity_f)
+            {
+              // Add the flat building that pads the right side of the current building.
+              Real start = i->end_;
+              Real end = start + horizon_padding;
+              pad_buildings.push_back (Building (start, height, height, end));
+
+              // Add the sloped building that pads the right side of the current building.
+              start = end;
+              end += horizon_padding;
+              pad_buildings.push_back (Building (start, height, height - horizon_padding, end));
+            }
+        }
     }
 
-  list<Building>::const_iterator i = padded_this->buildings_.begin ();
-  list<Building>::const_iterator j = padded_other->buildings_.begin ();
+  // The buildings may be overlapping, so resolve that.
+  list<Building> pad_skyline = internal_build_skyline (&pad_buildings);
+
+  // Merge the padding with the original, to make a new skyline.
+  Skyline padded (sky_);
+  list<Building> my_buildings = buildings_;
+  padded.buildings_.clear ();
+  internal_merge_skyline (&pad_skyline, &my_buildings, &padded.buildings_);
+  padded.normalize ();
+
+  return padded;
+}
+
+Real
+Skyline::internal_distance (Skyline const &other, Real *touch_point) const
+{
+  assert (sky_ == -other.sky_);
+
+  list<Building>::const_iterator i = buildings_.begin ();
+  list<Building>::const_iterator j = other.buildings_.begin ();
 
   Real dist = -infinity_f;
   Real start = -infinity_f;
   Real touch = -infinity_f;
-  while (i != padded_this->buildings_.end () && j != padded_other->buildings_.end ())
+  while (i != buildings_.end () && j != other.buildings_.end ())
     {
       Real end = min (i->end_, j->end_);
       Real start_dist = i->height (start) + j->height (start);
@@ -569,12 +744,6 @@ Skyline::internal_distance (Skyline const &other, Real horizon_padding, Real *to
       start = end;
     }
 
-  if (created_tmp_skylines)
-    {
-      delete padded_this;
-      delete padded_other;
-    }
-
   *touch_point = touch;
   return dist;
 }
@@ -598,9 +767,44 @@ Skyline::height (Real airplane) const
 Real
 Skyline::max_height () const
 {
-  Skyline s (-sky_);
-  s.set_minimum_height (0);
-  return sky_ * distance (s);
+  Real ret = -infinity_f;
+
+  list<Building>::const_iterator i;
+  for (i = buildings_.begin (); i != buildings_.end (); ++i)
+    {
+      ret = max (ret, i->height (i->start_));
+      ret = max (ret, i->height (i->end_));
+    }
+
+  return sky_ * ret;
+}
+
+Direction
+Skyline::direction () const
+{
+  return sky_;
+}
+
+Real
+Skyline::left () const
+{
+  for (list<Building>::const_iterator i (buildings_.begin ());
+       i != buildings_.end (); i++)
+    if (i->y_intercept_ > -infinity_f)
+      return i->start_;
+
+  return infinity_f;
+}
+
+Real
+Skyline::right () const
+{
+  for (list<Building>::const_reverse_iterator i (buildings_.rbegin ());
+       i != buildings_.rend (); ++i)
+    if (i->y_intercept_ > -infinity_f)
+      return i->end_;
+
+  return -infinity_f;
 }
 
 Real
@@ -643,6 +847,8 @@ Skyline::to_points (Axis horizon_axis) const
 bool
 Skyline::is_empty () const
 {
+  if (!buildings_.size ())
+    return true;
   Building b = buildings_.front ();
   return b.end_ == infinity_f && b.y_intercept_ == -infinity_f;
 }
@@ -735,3 +941,12 @@ 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));
 }
+
+LY_DEFINE (ly_skyline_empty_p, "ly:skyline-empty?",
+           1, 0, 0, (SCM sky),
+           "Return whether @var{sky} is empty.")
+{
+  Skyline *s = Skyline::unsmob (sky);
+  LY_ASSERT_SMOB (Skyline, sky, 1);
+  return scm_from_bool (s->is_empty ());
+}
index b144b2656ff927aeb5a51f506e631b98cf441499..332995ac99ef051d760cf1a786080a16f8bf6314 100644 (file)
@@ -187,7 +187,7 @@ Slur_configuration::Slur_configuration ()
 };
 
 void
-Slur_configuration::add_score (Real s, string desc)
+Slur_configuration::add_score (Real s, const string &desc)
 {
   if (s < 0)
     {
index 03f5a5c430667ca9783b9578c454202aa55d6859..a8a54f535a1b4bdbd0edae79b25f3bdf4d51dafb 100644 (file)
 #include "international.hh"
 #include "note-column.hh"
 #include "slur.hh"
+#include "slur-proto-engraver.hh"
 #include "spanner.hh"
 #include "stream-event.hh"
 #include "warn.hh"
 
 #include "translator.icc"
 
-/*
-  NOTE NOTE NOTE
-
-  This is largely similar to Phrasing_slur_engraver. Check if fixes
-  apply there too.
-
-  (on principle, engravers don't use inheritance for code sharing)
-
- */
-
-/*
-  It is possible that a slur starts and ends on the same note.  At
-  least, it is for phrasing slurs: a note can be both beginning and
-  ending of a phrase.
-*/
-class Slur_engraver : public Engraver
+class Slur_engraver : public Slur_proto_engraver
 {
-  vector<Stream_event *> start_events_;
-  vector<Stream_event *> stop_events_;
-  vector<Grob *> slurs_;
-  vector<Grob *> end_slurs_;
-  vector<Grob_info> objects_to_acknowledge_;
-
-  void set_melisma (bool);
+  virtual void set_melisma (bool);
 
 protected:
   DECLARE_TRANSLATOR_LISTENER (slur);
-  DECLARE_ACKNOWLEDGER (inline_accidental);
-  DECLARE_ACKNOWLEDGER (fingering);
-  DECLARE_ACKNOWLEDGER (note_column);
-  DECLARE_ACKNOWLEDGER (script);
-  DECLARE_ACKNOWLEDGER (dots);
-  DECLARE_ACKNOWLEDGER (text_script);
-  DECLARE_ACKNOWLEDGER (tie);
-  DECLARE_ACKNOWLEDGER (tuplet_number);
-
-  void acknowledge_extra_object (Grob_info);
-  void stop_translation_timestep ();
-  void process_music ();
-
-  virtual void finalize ();
-  virtual void derived_mark () const;
 
 public:
   TRANSLATOR_DECLARATIONS (Slur_engraver);
 };
 
-Slur_engraver::Slur_engraver ()
+Slur_engraver::Slur_engraver () :
+  Slur_proto_engraver ("doubleSlurs", "Slur", "slur", "slur-event")
 {
 }
 
-void
-Slur_engraver::derived_mark () const
-{
-  for (vsize i = start_events_.size (); i--;)
-    scm_gc_mark (start_events_[i]->self_scm ());
-  for (vsize i = stop_events_.size (); i--;)
-    scm_gc_mark (stop_events_[i]->self_scm ());
-}
-
 IMPLEMENT_TRANSLATOR_LISTENER (Slur_engraver, slur);
 void
 Slur_engraver::listen_slur (Stream_event *ev)
 {
-  Direction d = to_dir (ev->get_property ("span-direction"));
-  if (d == START)
-    start_events_.push_back (ev);
-  else if (d == STOP)
-    stop_events_.push_back (ev);
-  else ev->origin ()->warning (_f ("direction of %s invalid: %d",
-                                     "slur-event", int (d)));
+  internal_listen_slur (ev);
 }
 
 void
 Slur_engraver::set_melisma (bool m)
 {
-  context ()->set_property ("slurMelismaBusy", m ? SCM_BOOL_T : SCM_BOOL_F);
-}
-
-void
-Slur_engraver::acknowledge_note_column (Grob_info info)
-{
-  Grob *e = info.grob ();
-  for (vsize i = slurs_.size (); i--;)
-    Slur::add_column (slurs_[i], e);
-  for (vsize i = end_slurs_.size (); i--;)
-    Slur::add_column (end_slurs_[i], e);
-}
-
-void
-Slur_engraver::acknowledge_extra_object (Grob_info info)
-{
-  objects_to_acknowledge_.push_back (info);
-}
-
-void
-Slur_engraver::acknowledge_inline_accidental (Grob_info info)
-{
-  acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::acknowledge_dots (Grob_info info)
-{
-  acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::acknowledge_fingering (Grob_info info)
-{
-  acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::acknowledge_tuplet_number (Grob_info info)
-{
-  acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::acknowledge_script (Grob_info info)
-{
-  if (!info.grob ()->internal_has_interface (ly_symbol2scm ("dynamic-interface")))
-    acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::acknowledge_text_script (Grob_info info)
-{
-  acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::acknowledge_tie (Grob_info info)
-{
-  acknowledge_extra_object (info);
-}
-
-void
-Slur_engraver::finalize ()
-{
-  for (vsize i = 0; i < slurs_.size (); i++)
-    {
-      slurs_[i]->warning (_ ("unterminated slur"));
-      slurs_[i]->suicide ();
-    }
-  slurs_.clear ();
-}
-
-void
-Slur_engraver::process_music ()
-{
-  for (vsize i = 0; i < stop_events_.size (); i++)
-    {
-      Stream_event *ev = stop_events_[i];
-      string id = robust_scm2string (ev->get_property ("spanner-id"), "");
-
-      // Find the slurs that are ended with this event (by checking the spanner-id)
-      bool ended = false;
-      for (vsize j = slurs_.size (); j--;)
-        {
-          if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""))
-            {
-              ended = true;
-              end_slurs_.push_back (slurs_[j]);
-              slurs_.erase (slurs_.begin () + j);
-            }
-        }
-      if (ended)
-        {
-          // Ignore redundant stop events for this id
-          for (vsize j = stop_events_.size (); --j > i;)
-            {
-              if (id == robust_scm2string (stop_events_[j]->get_property ("spanner-id"), ""))
-                stop_events_.erase (stop_events_.begin () + j);
-            }
-        }
-      else
-        ev->origin ()->warning (_ ("cannot end slur"));
-    }
-
-  vsize old_slurs = slurs_.size ();
-  for (vsize i = start_events_.size (); i--;)
-    {
-      Stream_event *ev = start_events_[i];
-      string id = robust_scm2string (ev->get_property ("spanner-id"), "");
-      Direction updown = to_dir (ev->get_property ("direction"));
-
-      bool completed;
-      for (vsize j = slurs_.size (); !(completed = (j-- == 0));)
-        {
-          // Check if we already have a slur with the same spanner-id.
-          if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""))
-            {
-              if (j < old_slurs)
-                {
-                  // We already have an old slur, so give a warning
-                  // and completely ignore the new slur.
-                  ev->origin ()->warning (_ ("already have slur"));
-                  start_events_.erase (start_events_.begin () + i);
-                  break;
-                }
-
-              // If this slur event has no direction, it will not
-              // contribute anything new to the existing slur(s), so
-              // we can ignore it.
-
-              if (!updown)
-                break;
-
-              Stream_event *c = unsmob_stream_event (slurs_[j]->get_property ("cause"));
-
-              if (!c)
-                {
-                  slurs_[j]->programming_error ("slur without a cause");
-                  continue;
-                }
-
-              Direction slur_dir = to_dir (c->get_property ("direction"));
-
-              // If the existing slur does not have a direction yet,
-              // we'd rather take the new one.
-
-              if (!slur_dir)
-                {
-                  slurs_[j]->suicide ();
-                  slurs_.erase (slurs_.begin () + j);
-                  continue;
-                }
-
-              // If the existing slur has the same direction as ours, drop ours
-
-              if (slur_dir == updown)
-                break;
-            }
-        }
-      // If the loop completed, our slur is new
-      if (completed)
-        {
-          Grob *slur = make_spanner ("Slur", ev->self_scm ());
-          slur->set_property ("spanner-id", ly_string2scm (id));
-          if (updown)
-            set_grob_direction (slur, updown);
-          slurs_.push_back (slur);
-
-          if (to_boolean (get_property ("doubleSlurs")))
-            {
-              set_grob_direction (slur, DOWN);
-              slur = make_spanner ("Slur", ev->self_scm ());
-              slur->set_property ("spanner-id", ly_string2scm (id));
-              set_grob_direction (slur, UP);
-              slurs_.push_back (slur);
-            }
-        }
-    }
-  set_melisma (slurs_.size ());
-}
-
-void
-Slur_engraver::stop_translation_timestep ()
-{
-  if (Grob *g = unsmob_grob (get_property ("currentCommandColumn")))
-    {
-      for (vsize i = 0; i < end_slurs_.size (); i++)
-        Slur::add_extra_encompass (end_slurs_[i], g);
-
-      if (!start_events_.size ())
-        for (vsize i = 0; i < slurs_.size (); i++)
-          Slur::add_extra_encompass (slurs_[i], g);
-    }
-
-  for (vsize i = 0; i < end_slurs_.size (); i++)
-    {
-      Spanner *s = dynamic_cast<Spanner *> (end_slurs_[i]);
-      if (!s->get_bound (RIGHT))
-        s->set_bound (RIGHT, unsmob_grob (get_property ("currentMusicalColumn")));
-      announce_end_grob (s, SCM_EOL);
-    }
-
-  for (vsize i = 0; i < objects_to_acknowledge_.size (); i++)
-    Slur::auxiliary_acknowledge_extra_object (objects_to_acknowledge_[i], slurs_, end_slurs_);
-
-  objects_to_acknowledge_.clear ();
-  end_slurs_.clear ();
-  start_events_.clear ();
-  stop_events_.clear ();
+  context ()->set_property ("slurMelismaBusy", ly_bool2scm (m));
 }
 
 ADD_ACKNOWLEDGER (Slur_engraver, inline_accidental);
@@ -324,7 +66,7 @@ ADD_ACKNOWLEDGER (Slur_engraver, note_column);
 ADD_ACKNOWLEDGER (Slur_engraver, script);
 ADD_ACKNOWLEDGER (Slur_engraver, text_script);
 ADD_ACKNOWLEDGER (Slur_engraver, dots);
-ADD_ACKNOWLEDGER (Slur_engraver, tie);
+ADD_END_ACKNOWLEDGER (Slur_engraver, tie);
 ADD_ACKNOWLEDGER (Slur_engraver, tuplet_number);
 ADD_TRANSLATOR (Slur_engraver,
                 /* doc */
diff --git a/lily/slur-proto-engraver.cc b/lily/slur-proto-engraver.cc
new file mode 100644 (file)
index 0000000..f2e3456
--- /dev/null
@@ -0,0 +1,297 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2013 Mike Solomon <mike@mikesolomon.org>
+
+  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 "engraver.hh"
+
+#include "context.hh"
+#include "directional-element-interface.hh"
+#include "international.hh"
+#include "note-column.hh"
+#include "slur.hh"
+#include "slur-proto-engraver.hh"
+#include "spanner.hh"
+#include "stream-event.hh"
+#include "warn.hh"
+
+#include "translator.icc"
+
+void
+Slur_proto_engraver::derived_mark () const
+{
+  for (vsize i = start_events_.size (); i--;)
+    scm_gc_mark (start_events_[i]->self_scm ());
+  for (vsize i = stop_events_.size (); i--;)
+    scm_gc_mark (stop_events_[i]->self_scm ());
+}
+
+void
+Slur_proto_engraver::internal_listen_slur (Stream_event *ev)
+{
+  Direction d = to_dir (ev->get_property ("span-direction"));
+  if (d == START)
+    start_events_.push_back (ev);
+  else if (d == STOP)
+    stop_events_.push_back (ev);
+  else ev->origin ()->warning (_f ("direction of %s invalid: %d",
+                                     event_name_, int (d)));
+}
+
+void
+Slur_proto_engraver::acknowledge_note_column (Grob_info info)
+{
+  Grob *e = info.grob ();
+  for (vsize i = slurs_.size (); i--;)
+    Slur::add_column (slurs_[i], e);
+  for (vsize i = end_slurs_.size (); i--;)
+    Slur::add_column (end_slurs_[i], e);
+}
+
+void
+Slur_proto_engraver::acknowledge_extra_object (Grob_info info)
+{
+  objects_to_acknowledge_.push_back (info);
+}
+
+void
+Slur_proto_engraver::acknowledge_inline_accidental (Grob_info info)
+{
+  acknowledge_extra_object (info);
+}
+
+void
+Slur_proto_engraver::acknowledge_dots (Grob_info info)
+{
+  acknowledge_extra_object (info);
+}
+
+void
+Slur_proto_engraver::acknowledge_fingering (Grob_info info)
+{
+  acknowledge_extra_object (info);
+}
+
+void
+Slur_proto_engraver::acknowledge_tuplet_number (Grob_info info)
+{
+  acknowledge_extra_object (info);
+}
+
+void
+Slur_proto_engraver::acknowledge_script (Grob_info info)
+{
+  if (!info.grob ()->internal_has_interface (ly_symbol2scm ("dynamic-interface")))
+    acknowledge_extra_object (info);
+}
+
+void
+Slur_proto_engraver::acknowledge_text_script (Grob_info info)
+{
+  acknowledge_extra_object (info);
+}
+
+void
+Slur_proto_engraver::acknowledge_end_tie (Grob_info info)
+{
+  acknowledge_extra_object (info);
+}
+
+void
+Slur_proto_engraver::finalize ()
+{
+  for (vsize i = 0; i < slurs_.size (); i++)
+    {
+      slurs_[i]->warning (_f ("unterminated %s", object_name_));
+      slurs_[i]->suicide ();
+    }
+  slurs_.clear ();
+}
+
+void
+Slur_proto_engraver::create_slur (const string &spanner_id, Stream_event *ev_cause, Grob *g_cause, Direction dir, bool left_broken)
+{
+  Grob *ccc = unsmob_grob (get_property ("currentCommandColumn"));
+  SCM cause = ev_cause ? ev_cause->self_scm () : g_cause->self_scm ();
+  Spanner *slur = make_spanner (grob_name_, cause);
+  slur->set_property ("spanner-id", ly_string2scm (spanner_id));
+  if (dir)
+    set_grob_direction (slur, dir);
+  if (left_broken)
+    slur->set_bound (LEFT, ccc);
+  slurs_.push_back (slur);
+  if (double_property_name_
+      && to_boolean (get_property (double_property_name_)))
+  {
+    set_grob_direction (slur, DOWN);
+    slur = make_spanner (grob_name_, cause);
+    slur->set_property ("spanner-id", ly_string2scm (spanner_id));
+    set_grob_direction (slur, UP);
+    if (left_broken)
+      slur->set_bound (LEFT, ccc);
+    slurs_.push_back (slur);
+  }
+
+}
+
+bool
+Slur_proto_engraver::can_create_slur (const string &id, vsize old_slurs, vsize *event_idx, Stream_event *ev)
+{
+  for (vsize j = slurs_.size (); j--;)
+    {
+      Grob *slur = slurs_[j];
+      Direction updown = to_dir (ev->get_property ("direction"));
+
+      // Check if we already have a slur with the same spanner-id.
+      if (id == robust_scm2string (slur->get_property ("spanner-id"), ""))
+        {
+          if (j < old_slurs)
+            {
+              // We already have an old slur, so give a warning
+              // and completely ignore the new slur.
+              ev->origin ()->warning (_f ("already have %s", object_name_));
+              if (event_idx)
+                start_events_.erase (start_events_.begin () + (*event_idx));
+              return false;
+            }
+
+          // If this slur event has no direction, it will not
+          // contribute anything new to the existing slur(s), so
+          // we can ignore it.
+
+          if (!updown)
+            return false;
+
+          Stream_event *c = unsmob_stream_event (slur->get_property ("cause"));
+
+          if (!c)
+            {
+              slur->programming_error (_f ("%s without a cause", object_name_));
+              return true;
+            }
+
+          Direction slur_dir = to_dir (c->get_property ("direction"));
+
+          // If the existing slur does not have a direction yet,
+          // we'd rather take the new one.
+
+          if (!slur_dir)
+            {
+              slur->suicide ();
+              slurs_.erase (slurs_.begin () + j);
+              return true;
+            }
+
+          // If the existing slur has the same direction as ours, drop ours
+
+          if (slur_dir == updown)
+            return false;
+        }
+    }
+  return true;
+}
+
+bool
+Slur_proto_engraver::try_to_end (Stream_event *ev)
+{
+  string id = robust_scm2string (ev->get_property ("spanner-id"), "");
+
+  // Find the slurs that are ended with this event (by checking the spanner-id)
+  bool ended = false;
+  for (vsize j = slurs_.size (); j--;)
+    {
+      if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""))
+        {
+          ended = true;
+          end_slurs_.push_back (slurs_[j]);
+          slurs_.erase (slurs_.begin () + j);
+        }
+    }
+  return ended;
+}
+
+void
+Slur_proto_engraver::process_music ()
+{
+  for (vsize i = 0; i < stop_events_.size (); i++)
+    {
+      string id = robust_scm2string (stop_events_[i]->get_property ("spanner-id"), "");
+      bool ended = try_to_end (stop_events_[i]);
+      if (ended)
+        {
+          // Ignore redundant stop events for this id
+          for (vsize j = stop_events_.size (); --j > i;)
+            {
+              if (id == robust_scm2string (stop_events_[j]->get_property ("spanner-id"), ""))
+                stop_events_.erase (stop_events_.begin () + j);
+            }
+        }
+      else
+        stop_events_[i]->origin ()->warning (_f ("cannot end %s", object_name_));
+    }
+
+  vsize old_slurs = slurs_.size ();
+  for (vsize i = start_events_.size (); i--;)
+    {
+      Stream_event *ev = start_events_[i];
+      string id = robust_scm2string (ev->get_property ("spanner-id"), "");
+      Direction updown = to_dir (ev->get_property ("direction"));
+
+      if (can_create_slur (id, old_slurs, &i, ev))
+        create_slur (id, ev, 0, updown, false);
+    }
+
+  set_melisma (slurs_.size ());
+}
+
+void
+Slur_proto_engraver::set_melisma (bool)
+{
+}
+
+void
+Slur_proto_engraver::stop_translation_timestep ()
+{
+  if (Grob *g = unsmob_grob (get_property ("currentCommandColumn")))
+    {
+      for (vsize i = 0; i < end_slurs_.size (); i++)
+        Slur::add_extra_encompass (end_slurs_[i], g);
+
+      if (!start_events_.size ())
+        for (vsize i = 0; i < slurs_.size (); i++)
+          Slur::add_extra_encompass (slurs_[i], g);
+    }
+
+  for (vsize i = 0; i < end_slurs_.size (); i++)
+    {
+      Spanner *s = dynamic_cast<Spanner *> (end_slurs_[i]);
+      if (!s->get_bound (RIGHT))
+        s->set_bound (RIGHT, unsmob_grob (get_property ("currentMusicalColumn")));
+      announce_end_grob (s, SCM_EOL);
+    }
+
+  for (vsize i = 0; i < objects_to_acknowledge_.size (); i++)
+    Slur::auxiliary_acknowledge_extra_object (objects_to_acknowledge_[i], slurs_, end_slurs_);
+
+  objects_to_acknowledge_.clear ();
+  end_slurs_.clear ();
+  start_events_.clear ();
+  stop_events_.clear ();
+}
+
+// no ADD_ACKNOWLEDGER / ADD_TRANSLATOR macro calls
+// since this class is abstract
index e1025fa545c56c1c20ee0a476355b778229cf336..47bb40611c483018713bae43ec380b3ed1cd9461 100644 (file)
@@ -459,11 +459,16 @@ Slur_score_state::get_y_attachment_range () const
     {
       if (extremes_[d].note_column_)
         {
-          end_ys[d] = dir_
-                      * max (max (dir_ * (base_attachments_[d][Y_AXIS]
-                                          + parameters_.region_size_ * dir_),
-                                  dir_ * (dir_ + extremes_[d].note_column_->extent (common_[Y_AXIS], Y_AXIS)[dir_])),
-                             dir_ * base_attachments_[-d][Y_AXIS]);
+          Interval nc_extent = extremes_[d].note_column_
+                               ->extent (common_[Y_AXIS], Y_AXIS);
+          if (nc_extent.is_empty ())
+            slur_->warning ("slur trying to encompass an empty note column.");
+          else
+            end_ys[d] = dir_
+                        * max (max (dir_ * (base_attachments_[d][Y_AXIS]
+                                            + parameters_.region_size_ * dir_),
+                                    dir_ * (dir_ + nc_extent[dir_])),
+                               dir_ * base_attachments_[-d][Y_AXIS]);
         }
       else
         end_ys[d] = base_attachments_[d][Y_AXIS] + parameters_.region_size_ * dir_;
index 6d0d84203ea0da8b80a2d30b5a59d7d739ccfeb5..0aa96c787d1d7ba482ed0170e3990ee703258236 100644 (file)
@@ -31,8 +31,8 @@
 #include "main.hh"              // DEBUG_SLUR_SCORING
 #include "note-column.hh"
 #include "output-def.hh"
-#include "spanner.hh"
 #include "skyline-pair.hh"
+#include "spanner.hh"
 #include "staff-symbol-referencer.hh"
 #include "stem.hh"
 #include "text-interface.hh"
@@ -40,6 +40,7 @@
 #include "warn.hh"
 #include "slur-scoring.hh"
 #include "separation-item.hh"
+#include "unpure-pure-container.hh"
 #include "international.hh"
 
 MAKE_SCHEME_CALLBACK (Slur, calc_direction, 1)
@@ -364,7 +365,7 @@ Slur::outside_slur_callback (SCM grob, SCM offset_scm)
   return scm_from_double (offset + avoidance_offset);
 }
 
-MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Slur, vertical_skylines, 1, 0, "");
+MAKE_SCHEME_CALLBACK (Slur, vertical_skylines, 1);
 SCM
 Slur::vertical_skylines (SCM smob)
 {
@@ -372,7 +373,7 @@ Slur::vertical_skylines (SCM smob)
   vector<Box> boxes;
 
   if (!me)
-    return Skyline_pair (boxes, 0.0, X_AXIS).smobbed_copy ();
+    return Skyline_pair (boxes, X_AXIS).smobbed_copy ();
 
   Bezier curve = Slur::get_curve (me);
   vsize box_count = robust_scm2vsize (me->get_property ("skyline-quantizing"), 10);
@@ -384,7 +385,7 @@ Slur::vertical_skylines (SCM smob)
       boxes.push_back (b);
     }
 
-  return Skyline_pair (boxes, 0.0, X_AXIS).smobbed_copy ();
+  return Skyline_pair (boxes, X_AXIS).smobbed_copy ();
 }
 
 /*
@@ -421,7 +422,10 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info,
     {
       if (slur)
         {
-          chain_offset_callback (e, outside_slur_callback_proc, Y_AXIS);
+          chain_offset_callback (e,
+                                 ly_make_unpure_pure_container (outside_slur_callback_proc,
+                                                                pure_outside_slur_callback_proc),
+                                 Y_AXIS);
           chain_callback (e, outside_slur_cross_staff_proc, ly_symbol2scm ("cross-staff"));
           e->set_object ("slur", slur->self_scm ());
         }
@@ -562,10 +566,8 @@ ADD_INTERFACE (Slur,
                "inspect-index "
                "line-thickness "
                "note-columns "
-               "skyline-quantizing "
                "positions "
                "ratio "
                "thickness "
-               "vertical-skylines "
               );
 
index d847605425b0d9be7a9ec79bf66f0d2b462a8004..788c78a69ee6239795b5026fbf8cb37c1995e522 100644 (file)
@@ -55,7 +55,7 @@ Source_file::load_stdin ()
   return contents of FILENAME. *Not 0-terminated!*
  */
 vector<char>
-gulp_file (string filename, int desired_size)
+gulp_file (const string &filename, int desired_size)
 {
   /* "b" must ensure to open literally, avoiding text (CR/LF)
      conversions.  */
@@ -106,7 +106,7 @@ Source_file::init ()
   smobify_self ();
 }
 
-Source_file::Source_file (string filename, string data)
+Source_file::Source_file (const string &filename, const string &data)
 {
   init ();
 
@@ -124,7 +124,7 @@ Source_file::Source_file (string filename, string data)
       newline_locations_.push_back (&characters_[0] + i);
 }
 
-Source_file::Source_file (string filename_string)
+Source_file::Source_file (const string &filename_string)
 {
   init ();
 
@@ -181,8 +181,8 @@ Source_file::file_line_column_string (char const *context_str0) const
       int l, ch, col, offset;
       get_counts (context_str0, &l, &ch, &col, &offset);
 
-      return name_string () + ":" + to_string (l)
-             + ":" + to_string (col);
+      return name_string () + ":" + ::to_string (l)
+             + ":" + ::to_string (col + 1);
     }
 }
 
@@ -196,8 +196,8 @@ Source_file::quote_input (char const *pos_str0) const
   get_counts (pos_str0, &l, &ch, &col, &offset);
   string line = line_string (pos_str0);
   string context = line.substr (0, offset)
-                   + to_string ('\n')
-                   + to_string (' ', col)
+                   + ::to_string ('\n')
+                   + ::to_string (' ', col)
                    + line.substr (offset, line.length () - offset);
   return context;
 }
index 657ff0cd6a9d2b6541b87bfdd8f6a789dbdcf13b..022c6a121949543fa05c7fd4b4fba680aa8b1fea 100644 (file)
@@ -223,79 +223,66 @@ Spacing_spanner::generate_pair_spacing (Grob *me,
 static void
 set_column_rods (vector<Grob *> const &cols, Real padding)
 {
-  /* distances[i] will be the minimum distance between column i and column i+1 */
-  vector<Real> distances;
+  /* distances[i] will be the distance betwen cols[i-1] and cols[i], and
+     overhangs[j] the amount by which cols[0 thru j] extend beyond cols[j]
+     when each column is placed as far to the left as possible. */
+  vector<Real> distances (cols.size ());
+  vector<Real> overhangs (cols.size ());
 
-  for (vsize i = 1; i < cols.size (); i++)
+  for (vsize i = 0; i < cols.size (); i++)
     {
-      assert (distances.size () == i - 1);
-
       Item *r = dynamic_cast<Item *> (cols[i]);
       Item *rb = r->find_prebroken_piece (LEFT);
 
       if (Separation_item::is_empty (r) && (!rb || Separation_item::is_empty (rb)))
-        {
-          distances.push_back (0);
-          continue;
-        }
+        continue;
 
       Skyline_pair *skys = Skyline_pair::unsmob (r->get_property ("horizontal-skylines"));
-      Real right_stickout = skys ? (*skys)[LEFT].max_height () : 0.0;
+      overhangs[i] = skys ? (*skys)[RIGHT].max_height () : 0.0;
+
+      if (0 == i) continue;
 
-      /* min rather than max because right-stickout will be negative if the right-hand column
+      /* min rather than max because stickout will be negative if the right-hand column
          sticks out a lot to the left */
-      right_stickout = min (right_stickout,
-                            Separation_item::conditional_skyline (r, cols[i - 1]).max_height ());
+      Real stickout = min (skys ? (*skys)[LEFT].max_height () : 0.0,
+                           Separation_item::conditional_skyline (r, cols[i - 1]).max_height ());
 
-      Drul_array<Item *> r_cols (r, rb);
-      Drul_array<Real> cur_dist (0.0, 0.0);
+      Real prev_distances = 0.0;
 
       /* This is an inner loop and hence it is potentially quadratic. However, we only continue
          as long as there is a rod to insert. Therefore, this loop will usually only execute
          a constant number of times per iteration of the outer loop. */
       for (vsize j = i; j--;)
         {
+          if (overhangs[j] + padding <= prev_distances + distances[i] + stickout)
+            break; // cols[0 thru j] cannot reach cols[i]
+
           Item *l = dynamic_cast<Item *> (cols[j]);
           Item *lb = l->find_prebroken_piece (RIGHT);
-          Skyline_pair *skys = Skyline_pair::unsmob (l->get_property ("horizontal-skylines"));
-          Real left_stickout = skys ? (*skys)[RIGHT].max_height () : 0.0;
-          bool done = true;
 
-          for (LEFT_and_RIGHT (d))
-            {
-              if (j < i - 1)
-                cur_dist[d] += distances[j];
+          Real dist = Separation_item::set_distance (l, r, padding);
+          distances[i] = max (distances[i], dist - prev_distances);
 
-              Item *r_col = r_cols[d];
-              bool touches = right_stickout - left_stickout + cur_dist[d] < 0.0;
-              Real dist = 0.0;
-
-              /* we set a distance for the line-starter column even if its non-broken counterpart
-                 doesn't touch the right column. */
-              if (lb)
-                Separation_item::set_distance (lb, r_col, padding);
-
-              if (touches || j == i - 1)
-                dist = Separation_item::set_distance (l, r_col, padding);
-
-              if (j == i - 1 && d == LEFT)
-                distances.push_back (dist);
-
-              if (j == i - 1)
-                cur_dist[d] = distances[j];
-
-              cur_dist[d] = max (cur_dist[d], dist);
-              done = done && !touches;
-
-              if (!rb)
-                break;
+          if (lb)
+            {
+              dist = Separation_item::set_distance (lb, r, padding);
+              // The left-broken version might reach more columns to the
+              // right than the unbroken version, by extending farther and/or
+              // nesting more closely;
+              if (j == i - 1) // check this, the first time we see each lb.
+                overhangs[j] = max (overhangs[j],
+                                    lb->extent (lb, X_AXIS)[RIGHT]
+                                    + distances[i] - dist);
             }
+          if (rb)
+            Separation_item::set_distance (l, rb, padding);
+          if (lb && rb)
+            Separation_item::set_distance (lb, rb, padding);
 
-          /* we need the empty check for gregorian notation, where there are a lot of
-             extraneous paper-columns that we need to skip over */
-          if (done && !Separation_item::is_empty (l))
-            break;
+          prev_distances += distances[j];
         }
+      overhangs[i] = max (overhangs[i],
+                          overhangs[i - 1] - distances[i]);
     }
 }
 
index 61ebd16dfe0d5c191b338a5e3bf7759b4ef2cafb..f68f904d56746503c15e36f20ae5dd325f1d4d78 100644 (file)
 
 #include "engraver.hh"
 #include "arpeggio.hh"
+#include "item.hh"
 #include "pointer-group-interface.hh"
+#include "separation-item.hh"
 #include "side-position-interface.hh"
 #include "staff-symbol-referencer.hh"
-#include "item.hh"
 
 /**
    Make arpeggios that span multiple staves.  Catch arpeggios, and span a
@@ -35,6 +36,7 @@ class Span_arpeggio_engraver : public Engraver
 public:
   TRANSLATOR_DECLARATIONS (Span_arpeggio_engraver);
   DECLARE_ACKNOWLEDGER (arpeggio);
+  DECLARE_ACKNOWLEDGER (note_column);
 
 protected:
   void process_acknowledged ();
@@ -43,6 +45,7 @@ protected:
 private:
   Item *span_arpeggio_;
   vector<Grob *> arpeggios_;
+  vector<Grob *> note_columns_;
 };
 
 Span_arpeggio_engraver::Span_arpeggio_engraver ()
@@ -57,6 +60,12 @@ Span_arpeggio_engraver::acknowledge_arpeggio (Grob_info info)
     arpeggios_.push_back (info.grob ());
 }
 
+void
+Span_arpeggio_engraver::acknowledge_note_column (Grob_info info)
+{
+  note_columns_.push_back (info.grob ());
+}
+
 void
 Span_arpeggio_engraver::process_acknowledged ()
 {
@@ -69,9 +78,13 @@ Span_arpeggio_engraver::process_acknowledged ()
   */
   if (!span_arpeggio_ && arpeggios_.size () > 1
       && to_boolean (get_property ("connectArpeggios")))
+    span_arpeggio_ = make_item ("Arpeggio", SCM_EOL);
+
+  if (span_arpeggio_)
     {
-      span_arpeggio_ = make_item ("Arpeggio", SCM_EOL);
-      span_arpeggio_->set_property ("cross-staff", SCM_BOOL_T);
+      for (vsize i = 0; i < note_columns_.size (); i++)
+        Separation_item::add_conditional_item (note_columns_[i], span_arpeggio_);
+      note_columns_.clear ();
     }
 }
 
@@ -107,11 +120,13 @@ Span_arpeggio_engraver::stop_translation_timestep ()
       span_arpeggio_ = 0;
     }
   arpeggios_.clear ();
+  note_columns_.clear ();
 }
 
 #include "translator.icc"
 
 ADD_ACKNOWLEDGER (Span_arpeggio_engraver, arpeggio);
+ADD_ACKNOWLEDGER (Span_arpeggio_engraver, note_column);
 ADD_TRANSLATOR (Span_arpeggio_engraver,
                 /* doc */
                 "Make arpeggios that span multiple staves.",
index 10d97241bde43c0563d749074c845eb4ca54fcec..b813bbb25d6aaa281ee683338085bdfd9d683a89 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
index af2ea7137f0d9ab4dbddc9127d6dfc03f549e180..e0e1c18e1d09f6a9ae59afffc78646fa571ea906 100644 (file)
@@ -385,6 +385,23 @@ Spanner::set_spacing_rods (SCM smob)
       r.item_drul_[LEFT] = sp->get_bound (LEFT);
       r.item_drul_[RIGHT] = sp->get_bound (RIGHT);
       r.add_to_cols ();
+
+      /*
+        We do not know yet if the spanner is going to have a bound that is
+        broken. To account for this uncertainty, we add the rod twice:
+        once for the central column (see above) and once for the left column
+        (see below). As end_rods_ are never used when rods_ are used and vice
+        versa, this rod will only be accessed once for each spacing
+        configuraiton before line breaking. Then, as a grob never exists in
+        both unbroken and broken forms after line breaking, only one of these
+        two rods will be in the column vector used for spacing in
+        simple-spacer.cc get_line_confugration.
+      */
+      if (Item *left_pbp = sp->get_bound (RIGHT)->find_prebroken_piece (LEFT))
+        {
+          r.item_drul_[RIGHT] = left_pbp;
+          r.add_to_cols ();
+        }
     }
 
   return SCM_UNSPECIFIED;
index 77dc986cfe8dd4fed779c32da03d8c57e0ee523d..4daa2ca9a2d0a8c17b1688363d7470ba14f90800 100644 (file)
@@ -46,12 +46,12 @@ protected:
 
 private:
   string new_instrument_string ();
-  void set_instrument_name (string voice);
-  void set_instrument (int channel, string voice);
-  int get_channel (string instrument);
-  Audio_staff *get_audio_staff (string voice);
-  Audio_staff *new_audio_staff (string voice);
-  Audio_dynamic *get_dynamic (string voice);
+  void set_instrument_name (const string &voice);
+  void set_instrument (int channel, const string &voice);
+  int get_channel (const string &instrument);
+  Audio_staff *get_audio_staff (const string &voice);
+  Audio_staff *new_audio_staff (const string &voice);
+  Audio_dynamic *get_dynamic (const string &voice);
 
   string instrument_string_;
   int channel_;
@@ -111,7 +111,7 @@ Staff_performer::initialize ()
 }
 
 Audio_staff *
-Staff_performer::new_audio_staff (string voice)
+Staff_performer::new_audio_staff (const string &voice)
 {
   Audio_staff *audio_staff = new Audio_staff;
   audio_staff->merge_unisons_
@@ -128,11 +128,37 @@ Staff_performer::new_audio_staff (string voice)
   staff_map_[voice] = audio_staff;
   if (!instrument_string_.empty ())
     set_instrument (channel_, voice);
+  // Set initial values (if any) for control functions.
+  for (const Audio_control_function_value_change::Context_property *p
+         = Audio_control_function_value_change::context_properties_;
+       p->name_; ++p)
+    {
+      SCM value = get_property (p->name_);
+      if (scm_is_number (value))
+        {
+          Real val = scm_to_double (value);
+          if (val >= p->range_min_ && val <= p->range_max_)
+            {
+              // Normalize the value to the 0.0 to 1.0 range.
+              val = ((val - p->range_min_)
+                     / (p->range_max_ - p->range_min_));
+              Audio_control_function_value_change *item
+                = new Audio_control_function_value_change (p->control_, val);
+              item->channel_ = channel_;
+              audio_staff->add_audio_item (item);
+              announce_element (Audio_element_info (item, 0));
+            }
+          else
+            warning (_f ("ignoring out-of-range value change for MIDI "
+                         "property `%s'",
+                         p->name_));
+        }
+    }
   return audio_staff;
 }
 
 Audio_staff *
-Staff_performer::get_audio_staff (string voice)
+Staff_performer::get_audio_staff (const string &voice)
 {
   SCM channel_mapping = get_property ("midiChannelMapping");
   if (channel_mapping != ly_symbol2scm ("instrument")
@@ -152,7 +178,7 @@ Staff_performer::get_audio_staff (string voice)
 }
 
 Audio_dynamic *
-Staff_performer::get_dynamic (string voice)
+Staff_performer::get_dynamic (const string &voice)
 {
   map<string, Audio_dynamic *>::const_iterator i = dynamic_map_.find (voice);
   if (i != dynamic_map_.end ())
@@ -166,7 +192,7 @@ Staff_performer::process_music ()
 }
 
 void
-Staff_performer::set_instrument (int channel, string voice)
+Staff_performer::set_instrument (int channel, const string &voice)
 {
   instrument_ = new Audio_instrument (instrument_string_);
   instrument_->channel_ = channel;
@@ -179,7 +205,7 @@ Staff_performer::set_instrument (int channel, string voice)
 }
 
 void
-Staff_performer::set_instrument_name (string voice)
+Staff_performer::set_instrument_name (const string &voice)
 {
   instrument_name_ = new Audio_text (Audio_text::INSTRUMENT_NAME,
                                      instrument_string_);
@@ -242,10 +268,10 @@ Staff_performer::new_instrument_string ()
 }
 
 int
-Staff_performer::get_channel (string instrument)
+Staff_performer::get_channel (const string &instrument)
 {
   SCM channel_mapping = get_property ("midiChannelMapping");
-  map<string, int>channel_map
+  map<string, int> &channel_map
     = (channel_mapping != ly_symbol2scm ("instrument"))
       ? channel_map_
       : static_channel_map_;
index 49f42ea4a6d3e4caa98f3c8b75a795825bbf5f7d..e8bedd2e70bab0c558525aa0f26a544b0c6b1d58 100644 (file)
@@ -129,7 +129,7 @@ Staff_spacing::get_spacing (Grob *me, Grob *right_col, Real situational_space)
       /*
         TODO:
 
-        Should  insert a adjustable space here? For excercises, you might want to
+        Should insert an adjustable space here? For exercises, you might want to
         use a staff without a clef in the beginning.
       */
 
index d48091537aca3d55cc033389ef47dab9d126d43b..1f9d2d8a7a5b7568ed810f70936f5df8087f6b54 100644 (file)
@@ -24,6 +24,8 @@
 #include "directional-element-interface.hh"
 #include "item.hh"
 #include "lookup.hh"
+#include "note-collision.hh"
+#include "note-column.hh"
 #include "output-def.hh"
 #include "staff-symbol-referencer.hh"
 #include "stem.hh"
@@ -56,7 +58,7 @@ Stem_tremolo::calc_slope (SCM smob)
   else
     /* down stems with flags should have more sloped trems (helps avoid
        flag/stem collisions without making the stem very long) */
-    return scm_from_double ((Stem::duration_log (stem) >= 3 && get_grob_direction (stem) == DOWN)
+    return scm_from_double ((Stem::duration_log (stem) >= 3 && get_grob_direction (me) == DOWN)
                             ? 0.40 : 0.25);
 }
 
@@ -66,12 +68,12 @@ Stem_tremolo::calc_width (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
   Grob *stem = unsmob_grob (me->get_object ("stem"));
-  Direction stemdir = get_grob_direction (stem);
+  Direction dir = get_grob_direction (me);
   bool beam = Stem::get_beam (stem);
   bool flag = Stem::duration_log (stem) >= 3 && !beam;
 
   /* beamed stems and up-stems with flags have shorter tremolos */
-  return scm_from_double (((stemdir == UP && flag) || beam) ? 1.0 : 1.5);
+  return scm_from_double (((dir == UP && flag) || beam) ? 1.0 : 1.5);
 }
 
 MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_style, 1)
@@ -80,11 +82,11 @@ Stem_tremolo::calc_style (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
   Grob *stem = unsmob_grob (me->get_object ("stem"));
-  Direction stemdir = get_grob_direction (stem);
+  Direction dir = get_grob_direction (me);
   bool beam = Stem::get_beam (stem);
   bool flag = Stem::duration_log (stem) >= 3 && !beam;
 
-  return ly_symbol2scm (((stemdir == UP && flag) || beam) ? "rectangle" : "default");
+  return ly_symbol2scm (((dir == UP && flag) || beam) ? "rectangle" : "default");
 }
 
 Real
@@ -100,7 +102,7 @@ Stem_tremolo::get_beam_translation (Grob *me)
 }
 
 Stencil
-Stem_tremolo::raw_stencil (Grob *me, Real slope, Direction stemdir)
+Stem_tremolo::raw_stencil (Grob *me, Real slope, Direction dir)
 {
   Real ss = Staff_symbol_referencer::staff_space (me);
   Real thick = robust_scm2double (me->get_property ("beam-thickness"), 1);
@@ -137,7 +139,7 @@ Stem_tremolo::raw_stencil (Grob *me, Real slope, Direction stemdir)
   for (int i = 0; i < tremolo_flags; i++)
     {
       Stencil b (a);
-      b.translate_axis (beam_translation * i * stemdir * -1, Y_AXIS);
+      b.translate_axis (beam_translation * i * dir * -1, Y_AXIS);
       mol.add_stencil (b);
     }
   return mol;
@@ -157,9 +159,7 @@ Stem_tremolo::pure_height (SCM smob, SCM, SCM)
   if (!stem)
     return ly_interval2scm (s1.extent (Y_AXIS));
 
-  Direction stemdir = get_grob_direction (stem);
-  if (stemdir == 0)
-    stemdir = UP;
+  Direction dir = get_grob_direction (me);
 
   Spanner *beam = Stem::get_beam (stem);
 
@@ -168,11 +168,11 @@ Stem_tremolo::pure_height (SCM smob, SCM, SCM)
 
   Interval ph = stem->pure_height (stem, 0, INT_MAX);
   Stem_info si = Stem::get_stem_info (stem);
-  ph[-stemdir] = si.shortest_y_;
+  ph[-dir] = si.shortest_y_;
   int beam_count = Stem::beam_multiplicity (stem).length () + 1;
   Real beam_translation = get_beam_translation (me);
 
-  ph = ph - stemdir * max (beam_count, 1) * beam_translation;
+  ph = ph - dir * max (beam_count, 1) * beam_translation;
   ph = ph - ph.center ();
 
   return ly_interval2scm (ph);
@@ -208,15 +208,13 @@ Stem_tremolo::untranslated_stencil (Grob *me, Real slope)
       return Stencil ();
     }
 
-  Direction stemdir = get_grob_direction (stem);
-  if (!stemdir)
-    stemdir = UP;
+  Direction dir = get_grob_direction (me);
 
   bool whole_note = Stem::duration_log (stem) <= 0;
 
   /* for a whole note, we position relative to the notehead, so we want the
      stencil aligned on the flag closest to the head */
-  Direction stencil_dir = whole_note ? -stemdir : stemdir;
+  Direction stencil_dir = whole_note ? -dir : dir;
   return raw_stencil (me, slope, stencil_dir);
 }
 
@@ -238,6 +236,46 @@ Stem_tremolo::pure_calc_y_offset (SCM smob,
   return scm_from_double (y_offset (me, true));
 }
 
+MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_direction, 1);
+SCM
+Stem_tremolo::calc_direction (SCM smob)
+{
+  Item *me = unsmob_item (smob);
+
+  Item *stem = unsmob_item (me->get_object ("stem"));
+  if (!stem)
+    return scm_from_int (CENTER);
+
+  Direction stemdir = get_grob_direction (stem);
+
+  vector<int> nhp = Stem::note_head_positions (stem);
+  /*
+   * We re-decide stem-dir if there may be collisions with other
+   * note heads in the staff.
+   */
+  Grob *maybe_nc = stem->get_parent (X_AXIS)->get_parent (X_AXIS);
+  bool whole_note = Stem::duration_log (stem) <= 0;
+  if (whole_note && Note_collision_interface::has_interface (maybe_nc))
+    {
+      Drul_array<bool> avoid_me (false, false);
+      vector<int> all_nhps = Note_collision_interface::note_head_positions (maybe_nc);
+      if (all_nhps[0] < nhp[0])
+        avoid_me[DOWN] = true;
+      if (all_nhps.back () > nhp.back ())
+        avoid_me[UP] = true;
+      if (avoid_me[stemdir])
+        {
+          stemdir = -stemdir;
+          if (avoid_me[stemdir])
+            {
+              me->warning ("Whole-note tremolo may collide with simultaneous notes.");
+              stemdir = -stemdir;
+            }
+        }
+    }
+  return scm_from_int (stemdir);
+}
+
 Real
 Stem_tremolo::y_offset (Grob *me, bool pure)
 {
@@ -245,9 +283,7 @@ Stem_tremolo::y_offset (Grob *me, bool pure)
   if (!stem)
     return 0.0;
 
-  Direction stemdir = get_grob_direction (stem);
-  if (stemdir == 0)
-    stemdir = UP;
+  Direction dir = get_grob_direction (me);
 
   Spanner *beam = Stem::get_beam (stem);
   Real beam_translation = get_beam_translation (me);
@@ -258,34 +294,34 @@ Stem_tremolo::y_offset (Grob *me, bool pure)
     {
       Interval ph = stem->pure_height (stem, 0, INT_MAX);
       Stem_info si = Stem::get_stem_info (stem);
-      ph[-stemdir] = si.shortest_y_;
+      ph[-dir] = si.shortest_y_;
 
-      return (ph - stemdir * max (beam_count, 1) * beam_translation)[stemdir] - stemdir * 0.5 * me->pure_height (me, 0, INT_MAX).length ();
+      return (ph - dir * max (beam_count, 1) * beam_translation)[dir] - dir * 0.5 * me->pure_height (me, 0, INT_MAX).length ();
     }
 
   Real end_y
     = (pure
-       ? stem->pure_height (stem, 0, INT_MAX)[stemdir]
-       : stem->extent (stem, Y_AXIS)[stemdir])
-      - stemdir * max (beam_count, 1) * beam_translation
+       ? stem->pure_height (stem, 0, INT_MAX)[dir]
+       : stem->extent (stem, Y_AXIS)[dir])
+      - dir * max (beam_count, 1) * beam_translation
       - Stem::beam_end_corrective (stem);
 
   if (!beam && Stem::duration_log (stem) >= 3)
     {
-      end_y -= stemdir * (Stem::duration_log (stem) - 2) * beam_translation;
-      if (stemdir == UP)
-        end_y -= stemdir * beam_translation * 0.5;
+      end_y -= dir * (Stem::duration_log (stem) - 2) * beam_translation;
+      if (dir == UP)
+        end_y -= dir * beam_translation * 0.5;
     }
 
   bool whole_note = Stem::duration_log (stem) <= 0;
-  if (whole_note)
+  if (whole_note || isinf(end_y))
     {
       /* we shouldn't position relative to the end of the stem since the stem
          is invisible */
       Real ss = Staff_symbol_referencer::staff_space (me);
       vector<int> nhp = Stem::note_head_positions (stem);
-      Real note_head = (stemdir == UP ? nhp.back () : nhp[0]) * ss / 2;
-      end_y = note_head + stemdir * 1.5;
+      Real note_head = (dir == UP ? nhp.back () : nhp[0]) * ss / 2;
+      end_y = note_head + dir * 1.5;
     }
 
   return end_y;
@@ -308,6 +344,7 @@ ADD_INTERFACE (Stem_tremolo,
                /* properties */
                "beam-thickness "
                "beam-width "
+               "direction "
                "flag-count "
                "length-fraction "
                "stem "
index 8069a456c814e48cf24bddec96bf9d8fae2279ac..5f072fac6ae2585362bd7c733483134203415e52 100644 (file)
@@ -275,9 +275,12 @@ Stem::add_head (Grob *me, Grob *n)
 bool
 Stem::is_invisible (Grob *me)
 {
-  return !is_normal_stem (me)
-         && (robust_scm2double (me->get_property ("stemlet-length"),
-                                0.0) == 0.0);
+  if (is_normal_stem (me))
+    return false;
+  else if (head_count (me))
+    return true;
+  else // if there are no note-heads, we might want stemlets
+    return 0.0 == robust_scm2double (me->get_property ("stemlet-length"), 0.0);
 }
 
 bool
@@ -286,9 +289,7 @@ Stem::is_normal_stem (Grob *me)
   if (!head_count (me))
     return false;
 
-  extract_grob_set (me, "note-heads", heads);
-  SCM style = heads[0]->get_property ("style");
-  return style != ly_symbol2scm ("kievan") && scm_to_int (me->get_property ("duration-log")) >= 1;
+  return scm_to_int (me->get_property ("duration-log")) >= 1;
 }
 
 MAKE_SCHEME_CALLBACK (Stem, pure_height, 3)
@@ -545,7 +546,8 @@ Stem::calc_positioning_done (SCM smob)
           = hed->extent (hed, X_AXIS).linear_combination (CENTER)
             - heads[i]->extent (heads[i], X_AXIS).linear_combination (CENTER);
 
-      heads[i]->translate_axis (amount, X_AXIS);
+      if (!isnan (amount)) // empty heads can produce NaN
+        heads[i]->translate_axis (amount, X_AXIS);
     }
   bool parity = true;
   Real lastpos = Real (Staff_symbol_referencer::get_position (heads[0]));
@@ -794,12 +796,40 @@ Stem::internal_calc_stem_begin_position (Grob *me, bool calc_beam)
       Real y_attach = Note_head::stem_attachment_coordinate (head, Y_AXIS);
 
       y_attach = head_height.linear_combination (y_attach);
-      pos += d * y_attach * 2 / ss;
+      if (!isinf (y_attach) && !isnan (y_attach)) // empty heads
+        pos += d * y_attach * 2 / ss;
     }
 
   return pos;
 }
 
+
+MAKE_SCHEME_CALLBACK (Stem, pure_calc_length, 3);
+SCM
+Stem::pure_calc_length (SCM smob, SCM /*start*/, SCM /*end*/)
+{
+  Grob *me = unsmob_grob (smob);
+  Real beg = robust_scm2double (me->get_pure_property ("stem-begin-position", 0, INT_MAX), 0.0);
+  Real res = fabs (internal_calc_stem_end_position (me, false) - beg);
+  return scm_from_double (res);
+}
+
+MAKE_SCHEME_CALLBACK (Stem, calc_length, 1);
+SCM
+Stem::calc_length (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  if (unsmob_grob (me->get_object ("beam")))
+    {
+      me->programming_error ("ly:stem::calc-length called but will not be used for beamed stem.");
+      return scm_from_double (0.0);
+    }
+
+  Real beg = robust_scm2double (me->get_property ("stem-begin-position"), 0.0);
+  Real res = fabs (internal_calc_stem_end_position (me, true) - beg);
+  return scm_from_double (res);
+}
+
 bool
 Stem::is_valid_stem (Grob *me)
 {
@@ -811,9 +841,6 @@ Stem::is_valid_stem (Grob *me)
   if (!lh && !beam)
     return false;
 
-  if (lh && robust_scm2int (lh->get_property ("duration-log"), 0) < 1)
-    return false;
-
   if (is_invisible (me))
     return false;
 
@@ -882,7 +909,7 @@ Stem::offset_callback (SCM smob)
 
       Direction d = get_grob_direction (me);
       Real real_attach = head_wid.linear_combination (d * attach);
-      Real r = real_attach;
+      Real r = isnan(real_attach)? 0.0: real_attach;
 
       /* If not centered: correct for stem thickness.  */
       string style = robust_symbol2string (f->get_property ("style"), "default");
diff --git a/lily/stencil-integral.cc b/lily/stencil-integral.cc
new file mode 100644 (file)
index 0000000..4ae14e4
--- /dev/null
@@ -0,0 +1,1173 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2012 Mike Solomon <mike@mikesolomon.org>
+
+  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/>.
+*/
+
+/*
+tools for transform-matrices following the standard at
+http://www.w3.org/TR/SVG/coords.html
+
+a list in the form
+(list a b c d e f g)
+becomes this matrix:
+[ a c e ]
+[ b d f ]
+[ 0 0 1 ]
+when this transforms a point (x,y), the point is written as matrix:
+[ x ]
+[ y ]
+[ 1 ]
+*/
+
+#include <pango/pango-matrix.h>
+#include <complex>
+#include "box.hh"
+#include "bezier.hh"
+#include "dimensions.hh"
+#include "font-metric.hh"
+#include "grob.hh"
+#include "interval.hh"
+#include "freetype.hh"
+#include "misc.hh"
+#include "offset.hh"
+#include "modified-font-metric.hh"
+#include "open-type-font.hh"
+#include "pango-font.hh"
+#include "pointer-group-interface.hh"
+#include "lily-guile.hh"
+#include "real.hh"
+#include "rest.hh"
+#include "stencil.hh"
+#include "string-convert.hh"
+#include "skyline.hh"
+#include "skyline-pair.hh"
+#include "spanner.hh"
+using namespace std;
+
+Real QUANTIZATION_UNIT = 0.2;
+
+void create_path_cap (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, Offset pt, Real rad, Real slope, Direction d);
+
+struct Transform_matrix_and_expression
+{
+  PangoMatrix tm_;
+  SCM expr_;
+
+  Transform_matrix_and_expression (PangoMatrix tm, SCM expr);
+};
+
+Transform_matrix_and_expression::Transform_matrix_and_expression (PangoMatrix tm, SCM expr)
+{
+  tm_ = tm;
+  expr_ = expr;
+}
+
+PangoMatrix
+make_transform_matrix (Real p0, Real p1, Real p2, Real p3, Real p4, Real p5)
+{
+  PangoMatrix out;
+  out.xx = p0;
+  out.xy = p1;
+  out.yx = p2;
+  out.yy = p3;
+  out.x0 = p4;
+  out.y0 = p5;
+  return out;
+}
+
+//// UTILITY FUNCTIONS
+
+/*
+  map x's placement between orig_l and orig_r onto
+  the interval final_l final_r
+*/
+Real
+linear_map (Real final_l, Real final_r, Real orig_l, Real orig_r, Real x)
+{
+  return final_l + ((final_r - final_l) * ((x - orig_l) / (orig_r - orig_l)));
+}
+
+/*
+  from a nested SCM list, return the first list of numbers
+  useful for polygons
+*/
+SCM
+get_number_list (SCM l)
+{
+  if (scm_is_pair (l))
+    {
+      if (scm_is_number (scm_car (l)))
+        return l;
+      SCM res = get_number_list (scm_car (l));
+      if (res == SCM_BOOL_F)
+        return get_number_list (scm_cdr (l));
+      return res;
+    }
+  return SCM_BOOL_F;
+}
+
+/*
+  from a nested SCM list, return the first list of numbers
+  useful for paths
+*/
+SCM
+get_path_list (SCM l)
+{
+  if (scm_is_pair (l))
+    {
+      if (scm_memv (scm_car (l),
+                    scm_list_n (ly_symbol2scm ("moveto"),
+                                ly_symbol2scm ("rmoveto"),
+                                ly_symbol2scm ("lineto"),
+                                ly_symbol2scm ("rlineto"),
+                                ly_symbol2scm ("curveto"),
+                                ly_symbol2scm ("rcurveto"),
+                                ly_symbol2scm ("closepath"),
+                                SCM_UNDEFINED))
+          != SCM_BOOL_F)
+        return l;
+      SCM res = get_path_list (scm_car (l));
+      if (res == SCM_BOOL_F)
+        return get_path_list (scm_cdr (l));
+      return res;
+    }
+  return SCM_BOOL_F;
+}
+
+Real
+perpendicular_slope (Real s)
+{
+  if (s == 0.0)
+    return infinity_f;
+  if (s == infinity_f)
+    return 0.0;
+  return -1.0 / s;
+}
+
+//// END UTILITY FUNCTIONS
+
+/*
+  below, for all of the functions make_X_boxes, the expression
+  is always unpacked into variables.
+  then, after a line of /////, there are manipulations of these variables
+  (there may be no manipulations necessary depending on the function)
+  afterwards, there is another ///// followed by the creation of points
+  and boxes
+*/
+
+void
+make_draw_line_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr, bool use_building)
+{
+  Real thick = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real x0 = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real y0 = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real x1 = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real y1 = robust_scm2double (scm_car (expr), 0.0);
+  Real slope = x1 == x0 ? infinity_f : (y1 - y0) / (x1 - x0);
+  //////////////////////
+  if (x1 < x0)
+    {
+      swap (x0, x1);
+      swap (y0, y1);
+    }
+  Offset left (x0, y0);
+  Offset right (x1, y1);
+  Direction d = DOWN;
+  do
+    {
+      Offset inter_l = get_point_in_y_direction (left, perpendicular_slope (slope), thick / 2, d);
+      Offset inter_r = get_point_in_y_direction (right, perpendicular_slope (slope), thick / 2, d);
+      pango_matrix_transform_point (&trans, &inter_l[X_AXIS], &inter_l[Y_AXIS]);
+      pango_matrix_transform_point (&trans, &inter_r[X_AXIS], &inter_r[Y_AXIS]);
+      if ((inter_l[X_AXIS] == inter_r[X_AXIS]) || (inter_l[Y_AXIS] == inter_r[Y_AXIS]))
+        {
+          Box b;
+          b.add_point (inter_l);
+          b.add_point (inter_r);
+          boxes.push_back (b);
+        }
+      else if (use_building)
+        buildings.push_back (Drul_array<Offset> (inter_l, inter_r));
+      else
+        {
+          Offset inter_l = get_point_in_y_direction (left, perpendicular_slope (slope), thick / 2, d);
+          Offset inter_r = get_point_in_y_direction (right, perpendicular_slope (slope), thick / 2, d);
+          pango_matrix_transform_point (&trans, &inter_l[X_AXIS], &inter_l[Y_AXIS]);
+          pango_matrix_transform_point (&trans, &inter_r[X_AXIS], &inter_r[Y_AXIS]);
+          Real length = sqrt (((inter_l[X_AXIS] - inter_r[X_AXIS]) * (inter_l[X_AXIS] - inter_r[X_AXIS])) + ((inter_l[Y_AXIS] - inter_r[Y_AXIS]) * (inter_l[Y_AXIS] - inter_r[Y_AXIS])));
+
+          vsize passes = (vsize) ((length * 2) + 1);
+          vector<Offset> points;
+
+          for (vsize i = 0; i < 1 + passes; i++)
+            {
+              Offset pt (linear_map (x0, x1, 0, passes, i),
+                         linear_map (y0, y1, 0, passes, i));
+              Offset inter = get_point_in_y_direction (pt, perpendicular_slope (slope), thick / 2, d);
+              pango_matrix_transform_point (&trans, &inter[X_AXIS], &inter[Y_AXIS]);
+              points.push_back (inter);
+            }
+          for (vsize i = 0; i < points.size () - 1; i++)
+            {
+              Box b;
+              b.add_point (points[i]);
+              b.add_point (points[i + 1]);
+              boxes.push_back (b);
+            }
+        }
+    }
+  while (flip (&d) != DOWN);
+
+  if (thick > 0.0)
+    {
+      // beg line cap
+      create_path_cap (boxes,
+                       buildings,
+                       trans,
+                       Offset (x0, y0),
+                       thick / 2,
+                       perpendicular_slope (slope),
+                       Direction (sign (slope)));
+
+      // end line cap
+      create_path_cap (boxes,
+                       buildings,
+                       trans,
+                       Offset (x1, y1),
+                       thick / 2,
+                       perpendicular_slope (slope),
+                       Direction (sign (-slope)));
+    }
+}
+
+void
+make_partial_ellipse_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+  Real x_rad = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real y_rad = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real start = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real end = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real th = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  bool connect = to_boolean (scm_car (expr));
+  expr = scm_cdr (expr);
+  bool fill = to_boolean (scm_car (expr));
+  //////////////////////
+  start = M_PI * start / 180;
+  end = M_PI * end / 180;
+  if (end == start)
+    end += (2 * M_PI);
+  complex<Real> sunit = polar (1.0, start);
+  complex<Real> eunit = polar (1.0, end);
+  Offset sp (real (sunit) * x_rad, imag (sunit) * y_rad);
+  Offset ep (real (eunit) * x_rad, imag (eunit) * y_rad);
+  //////////////////////
+  Drul_array<vector<Offset> > points;
+  Direction d = DOWN;
+  int quantization = max (1, (int) (((x_rad * trans.xx) + (y_rad * trans.yy)) * M_PI / QUANTIZATION_UNIT));
+  do
+    {
+      for (vsize i = 0; i < 1 + (vsize) quantization; i++)
+        {
+          Real ang = linear_map (start, end, 0, quantization, i);
+          complex<Real> coord = polar (1.0, ang);
+          Offset pt (real (coord) * x_rad,
+                     imag (coord) * y_rad);
+          Real slope = pt[Y_AXIS] / pt[X_AXIS];
+          Offset inter = get_point_in_y_direction (pt, perpendicular_slope (slope), th / 2, d);
+          pango_matrix_transform_point (&trans, &inter[X_AXIS], &inter[Y_AXIS]);
+          points[d].push_back (inter);
+        }
+    }
+  while (flip (&d) != DOWN);
+
+  for (vsize i = 0; i < points[DOWN].size () - 1; i++)
+    {
+      Box b;
+      do
+        {
+          b.add_point (points[d][i]);
+          b.add_point (points[d][i + 1]);
+        }
+      while (flip (&d) != DOWN);
+      boxes.push_back (b);
+    }
+
+  if (connect || fill)
+    {
+      make_draw_line_boxes (boxes, buildings, trans, scm_list_5 (scm_from_double (th),
+                                                                 scm_from_double (sp[X_AXIS]),
+                                                                 scm_from_double (sp[Y_AXIS]),
+                                                                 scm_from_double (ep[X_AXIS]),
+                                                                 scm_from_double (ep[Y_AXIS])),
+                            false);
+    }
+
+  if (th > 0.0)
+    {
+      // beg line cap
+      complex<Real> coord = polar (1.0, start);
+      Offset pt (real (coord) * x_rad,
+                 imag (coord) * y_rad);
+      Real slope = pt[Y_AXIS] / pt[X_AXIS];
+      create_path_cap (boxes,
+                       buildings,
+                       trans,
+                       pt,
+                       th / 2,
+                       perpendicular_slope (slope),
+                       Direction (sign (slope)));
+
+      // end line cap
+      coord = polar (1.0, start);
+      pt = Offset (real (coord) * x_rad,
+                   imag (coord) * y_rad);
+      slope = pt[Y_AXIS] / pt[X_AXIS];
+      create_path_cap (boxes,
+                       buildings,
+                       trans,
+                       pt,
+                       th / 2,
+                       perpendicular_slope (slope),
+                       Direction (sign (-slope)));
+    }
+}
+
+void
+make_round_filled_box_boxes (vector<Box> &boxes, PangoMatrix trans, SCM expr)
+{
+  Real left = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real right = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real bottom = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real top = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real th = robust_scm2double (scm_car (expr), 0.0);
+  //////////////////////
+  vector<Offset> points;
+  Box b;
+  Offset p0 = Offset (-left - (th / 2), -bottom - (th / 2));
+  Offset p1 = Offset (right + (th / 2), top + (th / 2));
+  pango_matrix_transform_point (&trans, &p0[X_AXIS], &p0[Y_AXIS]);
+  pango_matrix_transform_point (&trans, &p1[X_AXIS], &p1[Y_AXIS]);
+  b.add_point (p0);
+  b.add_point (p1);
+  boxes.push_back (b);
+}
+
+void
+create_path_cap (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, Offset pt, Real rad, Real slope, Direction d)
+{
+  Real angle = atan (slope) * 180 / M_PI;
+  Real other = angle > 180 ? angle - 180 : angle + 180;
+  if (angle < other)
+    {
+      Real holder = other;
+      other = angle;
+      angle = holder;
+    }
+  other = (slope >= 0 && d == DOWN) || (slope < 0 && d == UP)
+          ? other + 360.0
+          : other;
+  PangoMatrix new_trans (trans);
+  pango_matrix_translate (&new_trans, pt[X_AXIS], pt[Y_AXIS]);
+  make_partial_ellipse_boxes (boxes, buildings, new_trans,
+                              scm_list_n (scm_from_double (rad),
+                                          scm_from_double (rad),
+                                          scm_from_double (angle),
+                                          scm_from_double (other),
+                                          scm_from_double (0.0),
+                                          SCM_BOOL_F,
+                                          SCM_BOOL_F,
+                                          SCM_UNDEFINED));
+}
+
+void
+make_draw_bezier_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+  Real th = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real x0 = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real y0 = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real x1 = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real y1 = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real x2 = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real y2 = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real x3 = robust_scm2double (scm_car (expr), 0.0);
+  expr = scm_cdr (expr);
+  Real y3 = robust_scm2double (scm_car (expr), 0.0);
+  //////////////////////
+  Bezier curve;
+  curve.control_[0] = Offset (x0, y0);
+  curve.control_[1] = Offset (x1, y1);
+  curve.control_[2] = Offset (x2, y2);
+  curve.control_[3] = Offset (x3, y3);
+  Offset temp0 (x0, y0);
+  Offset temp1 (x1, y1);
+  Offset temp2 (x2, y2);
+  Offset temp3 (x3, y3);
+  pango_matrix_transform_point (&trans, &temp0[X_AXIS], &temp0[Y_AXIS]);
+  pango_matrix_transform_point (&trans, &temp1[X_AXIS], &temp1[Y_AXIS]);
+  pango_matrix_transform_point (&trans, &temp2[X_AXIS], &temp2[Y_AXIS]);
+  pango_matrix_transform_point (&trans, &temp3[X_AXIS], &temp3[Y_AXIS]);
+  //////////////////////
+  Drul_array<vector<Offset> > points;
+  Direction d = DOWN;
+  int quantization = int (((temp1 - temp0).length ()
+                           + (temp2 - temp1).length ()
+                           + (temp3 - temp2).length ())
+                          / QUANTIZATION_UNIT);
+  do
+    {
+      Offset first = get_point_in_y_direction (curve.control_[0], perpendicular_slope (curve.slope_at_point (0.0)), th / 2, d);
+      pango_matrix_transform_point (&trans, &first[X_AXIS], &first[Y_AXIS]);
+      points[d].push_back (first);
+      for (vsize i = 1; i < (vsize) quantization; i++)
+        {
+          Real pt = (i * 1.0) / quantization;
+          Offset inter = get_point_in_y_direction (curve.curve_point (pt), perpendicular_slope (curve.slope_at_point (pt)), th / 2, d);
+          pango_matrix_transform_point (&trans, &inter[X_AXIS], &inter[Y_AXIS]);
+          points[d].push_back (inter);
+        }
+      Offset last = get_point_in_y_direction (curve.control_[3], curve.slope_at_point (1.0), th / 2, d);
+      pango_matrix_transform_point (&trans, &last[X_AXIS], &last[Y_AXIS]);
+      points[d].push_back (last);
+    }
+  while (flip (&d) != DOWN);
+
+  for (vsize i = 0; i < points[DOWN].size () - 1; i++)
+    {
+      Box b;
+      do
+        {
+          b.add_point (points[d][i]);
+          b.add_point (points[d][i + 1]);
+        }
+      while (flip (&d) != DOWN);
+      boxes.push_back (b);
+    }
+
+  // beg line cap
+  if (th >= 0)
+    {
+      Real slope = curve.slope_at_point (0.0);
+      d = Direction (sign (slope == 0.0 || abs (slope) == infinity_f
+                           ? curve.slope_at_point (0.0001)
+                           : slope));
+
+      create_path_cap (boxes,
+                       buildings,
+                       trans,
+                       curve.control_[0],
+                       th / 2,
+                       perpendicular_slope (curve.slope_at_point (0.0)),
+                       d);
+
+      // end line cap
+      slope = curve.slope_at_point (1.0);
+      d = Direction (sign (slope == 0.0 || abs (slope) == infinity_f
+                           ? curve.slope_at_point (0.9999)
+                           : slope));
+
+      create_path_cap (boxes,
+                       buildings,
+                       trans,
+                       curve.control_[3],
+                       th / 2,
+                       perpendicular_slope (curve.slope_at_point (1.0)),
+                       d);
+    }
+}
+
+/*
+  converts a path into lists of 4 (line) or 8 (curve) absolute coordinates
+  for example:
+  '(moveto 1 2 lineto 3 4 rlineto -1 -1 curveto 3 3 5 5 6 6 rcurveto -1 -1 -1 -1 -1 -1 closepath)
+  becomes
+  '((1 2 3 4)
+    (3 4 2 3)
+    (2 3 3 3 5 5 6 6)
+    (6 6 5 5 4 4 3 3)
+    (3 3 1 2))
+*/
+
+SCM
+all_commands_to_absolute_and_group (SCM expr)
+{
+  SCM out = SCM_EOL;
+  Offset start (0, 0);
+  Offset current (0, 0);
+  bool first = true;
+  while (scm_is_pair (expr))
+    {
+      if (scm_car (expr) == ly_symbol2scm ("moveto")
+          || (scm_car (expr) == ly_symbol2scm ("rmoveto") && first))
+        {
+          Real x = robust_scm2double (scm_cadr (expr), 0.0);
+          Real y = robust_scm2double (scm_caddr (expr), 0.0);
+          start = Offset (x, y);
+          current = start;
+          expr = scm_cdddr (expr);
+        }
+      if (scm_car (expr) == ly_symbol2scm ("rmoveto"))
+        {
+          Real x = robust_scm2double (scm_cadr (expr), 0.0);
+          Real y = robust_scm2double (scm_caddr (expr), 0.0);
+          start = (Offset (x, y) + current);
+          current = start;
+          expr = scm_cdddr (expr);
+        }
+      else if (scm_car (expr) == ly_symbol2scm ("lineto"))
+        {
+          Real x = robust_scm2double (scm_cadr (expr), 0.0);
+          Real y = robust_scm2double (scm_caddr (expr), 0.0);
+          out = scm_cons (scm_list_4 (scm_from_double (current[X_AXIS]),
+                                      scm_from_double (current[Y_AXIS]),
+                                      scm_from_double (x),
+                                      scm_from_double (y)),
+                          out);
+          current = Offset (x, y);
+          expr = scm_cdddr (expr);
+        }
+      else if (scm_car (expr) == ly_symbol2scm ("rlineto"))
+        {
+          Real x = robust_scm2double (scm_cadr (expr), 0.0);
+          Real y = robust_scm2double (scm_caddr (expr), 0.0);
+          out = scm_cons (scm_list_4 (scm_from_double (current[X_AXIS]),
+                                      scm_from_double (current[Y_AXIS]),
+                                      scm_from_double (x + current[X_AXIS]),
+                                      scm_from_double (y + current[Y_AXIS])),
+                          out);
+          current = (Offset (x, y) + current);
+          expr = scm_cdddr (expr);
+        }
+      else if (scm_car (expr) == ly_symbol2scm ("curveto"))
+        {
+          Real x1 = robust_scm2double (scm_cadr (expr), 0.0);
+          expr = scm_cddr (expr);
+          Real y1 = robust_scm2double (scm_car (expr), 0.0);
+          expr = scm_cdr (expr);
+          Real x2 = robust_scm2double (scm_car (expr), 0.0);
+          expr = scm_cdr (expr);
+          Real y2 = robust_scm2double (scm_car (expr), 0.0);
+          expr = scm_cdr (expr);
+          Real x3 = robust_scm2double (scm_car (expr), 0.0);
+          expr = scm_cdr (expr);
+          Real y3 = robust_scm2double (scm_car (expr), 0.0);
+          expr = scm_cdr (expr);
+          out = scm_cons (scm_list_n (scm_from_double (current[X_AXIS]),
+                                      scm_from_double (current[Y_AXIS]),
+                                      scm_from_double (x1),
+                                      scm_from_double (y1),
+                                      scm_from_double (x2),
+                                      scm_from_double (y2),
+                                      scm_from_double (x3),
+                                      scm_from_double (y3),
+                                      SCM_UNDEFINED),
+                          out);
+          current = Offset (x3, y3);
+        }
+      else if (scm_car (expr) == ly_symbol2scm ("rcurveto"))
+        {
+          Real x1 = robust_scm2double (scm_cadr (expr), 0.0);
+          expr = scm_cddr (expr);
+          Real y1 = robust_scm2double (scm_car (expr), 0.0);
+          expr = scm_cdr (expr);
+          Real x2 = robust_scm2double (scm_car (expr), 0.0);
+          expr = scm_cdr (expr);
+          Real y2 = robust_scm2double (scm_car (expr), 0.0);
+          expr = scm_cdr (expr);
+          Real x3 = robust_scm2double (scm_car (expr), 0.0);
+          expr = scm_cdr (expr);
+          Real y3 = robust_scm2double (scm_car (expr), 0.0);
+          expr = scm_cdr (expr);
+          out = scm_cons (scm_list_n (scm_from_double (current[X_AXIS]),
+                                      scm_from_double (current[Y_AXIS]),
+                                      scm_from_double (x1 + current[X_AXIS]),
+                                      scm_from_double (y1 + current[Y_AXIS]),
+                                      scm_from_double (x2 + current[X_AXIS]),
+                                      scm_from_double (y2 + current[Y_AXIS]),
+                                      scm_from_double (x3 + current[X_AXIS]),
+                                      scm_from_double (y3 + current[Y_AXIS]),
+                                      SCM_UNDEFINED),
+                          out);
+          current = (Offset (x3, y3) + current);
+        }
+      else if (scm_car (expr) == ly_symbol2scm ("closepath"))
+        {
+          if ((current[X_AXIS] != start[X_AXIS]) || (current[Y_AXIS] != start[Y_AXIS]))
+            {
+              out = scm_cons (scm_list_4 (scm_from_double (current[X_AXIS]),
+                                          scm_from_double (current[Y_AXIS]),
+                                          scm_from_double (start[X_AXIS]),
+                                          scm_from_double (start[Y_AXIS])),
+                              out);
+              current = start;
+            }
+          expr = scm_cdr (expr);
+        }
+      else
+        {
+          warning ("Malformed path for path stencil.");
+          return out;
+        }
+      first = false;
+    }
+  return scm_reverse_x (out, SCM_EOL);
+}
+
+void
+internal_make_path_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr, bool use_building)
+{
+  SCM blot = scm_car (expr);
+  expr = scm_cdr (expr);
+  SCM path = all_commands_to_absolute_and_group (expr);
+  // note that expr has more stuff that we don't need after this - simply ignore it
+  //////////////////////
+  for (SCM s = path; scm_is_pair (s); s = scm_cdr (s))
+    {
+      scm_to_int (scm_length (scm_car (s))) == 4
+      ? make_draw_line_boxes (boxes, buildings, trans, scm_cons (blot, scm_car (s)), use_building)
+      : make_draw_bezier_boxes (boxes, buildings, trans, scm_cons (blot, scm_car (s)));
+    }
+}
+
+void
+make_path_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+  return internal_make_path_boxes (boxes, buildings, trans, scm_cons (scm_car (expr), get_path_list (scm_cdr (expr))), false);
+}
+
+void
+make_polygon_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+  SCM coords = get_number_list (scm_car (expr));
+  expr = scm_cdr (expr);
+  SCM blot_diameter = scm_car (expr);
+  //////////////////////
+  bool first = true;
+  SCM l = SCM_EOL;
+  for (SCM s = coords; scm_is_pair (s); s = scm_cddr (s))
+    {
+      l = scm_cons (first ? ly_symbol2scm ("moveto") : ly_symbol2scm ("lineto"), l);
+      l = scm_cons (scm_car (s), l);
+      l = scm_cons (scm_cadr (s), l);
+      first = false;
+    }
+  l = scm_cons (ly_symbol2scm ("closepath"), l);
+  internal_make_path_boxes (boxes, buildings, trans, scm_cons (blot_diameter, scm_reverse_x (l, SCM_EOL)), true);
+}
+
+void
+make_named_glyph_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+  SCM fm_scm = scm_car (expr);
+  Font_metric *fm = unsmob_metrics (fm_scm);
+  expr = scm_cdr (expr);
+  SCM glyph = scm_car (expr);
+  string glyph_s = ly_scm2string (glyph);
+
+  //////////////////////
+  Open_type_font *open_fm
+    = dynamic_cast<Open_type_font *>
+      (dynamic_cast<Modified_font_metric *>(fm)->original_font ());
+  SCM_ASSERT_TYPE (open_fm, fm_scm, SCM_ARG1, __FUNCTION__, "OpenType font");
+
+  size_t gidx = open_fm->name_to_index (glyph_s);
+  // Bbox is the best approximation of the width based on how it would be
+  // calculated in open-type-font.cc if it were based on real extents
+  Box bbox = open_fm->get_unscaled_indexed_char_dimensions (gidx);
+  bbox.scale (dynamic_cast<Modified_font_metric *>(fm)->get_magnification () * open_fm->design_size () / open_fm->get_units_per_EM ());
+  // Real bbox is the real bbox of the object
+  Box real_bbox = open_fm->get_glyph_outline_bbox (gidx);
+
+  Real scale = bbox[X_AXIS].length () / real_bbox[X_AXIS].length ();
+
+  pango_matrix_scale (&trans, scale, scale);
+
+  SCM outline = open_fm->get_glyph_outline (gidx);
+  //////////////////////
+  for (SCM s = outline;
+       scm_is_pair (s);
+       s = scm_cdr (s))
+    {
+      scm_to_int (scm_length (scm_car (s))) == 4
+      ? make_draw_line_boxes (boxes, buildings, trans, scm_cons (scm_from_double (0), scm_car (s)), false)
+      : make_draw_bezier_boxes (boxes, buildings, trans, scm_cons (scm_from_double (0), scm_car (s)));
+    }
+}
+
+void
+make_glyph_string_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+  SCM fm_scm = scm_car (expr);
+  Font_metric *fm = unsmob_metrics (fm_scm);
+  expr = scm_cdr (expr);
+  expr = scm_cdr (expr); // font-name
+  expr = scm_cdr (expr); // size
+  expr = scm_cdr (expr); // cid?
+  SCM whxy = scm_cadar (expr);
+  vector<Real> widths;
+  vector<Interval> heights;
+  vector<Real> xos;
+  vector<Real> yos;
+  vector<string> char_ids;
+  //////////////////////
+  Pango_font *pango_fm = dynamic_cast<Pango_font *> (fm);
+  SCM_ASSERT_TYPE (pango_fm, fm_scm, SCM_ARG1, __FUNCTION__, "Pango font");
+
+  for (SCM s = whxy; scm_is_pair (s); s = scm_cdr (s))
+    {
+      SCM now = scm_car (s);
+      widths.push_back (robust_scm2double (scm_car (now), 0.0));
+      now = scm_cdr (now);
+      heights.push_back (robust_scm2interval (scm_car (now), Interval (0, 0)));
+      now = scm_cdr (now);
+      xos.push_back (robust_scm2double (scm_car (now), 0.0));
+      now = scm_cdr (now);
+      yos.push_back (robust_scm2double (scm_car (now), 0.0));
+      now = scm_cdr (now);
+      char_ids.push_back (robust_scm2string (scm_car (now), ""));
+    }
+  Real cumulative_x = 0.0;
+  for (vsize i = 0; i < widths.size (); i++)
+    {
+      PangoMatrix transcopy (trans);
+      Offset pt0 (cumulative_x + xos[i], heights[i][DOWN] + yos[i]);
+      Offset pt1 (cumulative_x + widths[i] + xos[i], heights[i][UP] + yos[i]);
+      cumulative_x += widths[i];
+
+      Box kerned_bbox;
+      kerned_bbox.add_point (pt0);
+      kerned_bbox.add_point (pt1);
+      size_t gidx = pango_fm->name_to_index (char_ids[i]);
+      Box real_bbox = pango_fm->get_scaled_indexed_char_dimensions (gidx);
+      Box bbox = pango_fm->get_unscaled_indexed_char_dimensions (gidx);
+      SCM outline = pango_fm->get_glyph_outline (gidx);
+
+      // scales may have rounding error but should be close
+      Real xlen = real_bbox[X_AXIS].length () / bbox[X_AXIS].length ();
+      Real ylen = real_bbox[Y_AXIS].length () / bbox[Y_AXIS].length ();
+
+      /*
+        TODO:
+
+        The value will be nan for whitespace, in which case we just want
+        filler, so the kerned bbox is ok.
+
+        However, if the value is inf, this likely means that LilyPond is
+        using a font that is currently difficult to get the measurements
+        from the Pango_font.  This should eventually be fixed.  The solution
+        for now is just to use the bounding box.
+      */
+      if (isnan (xlen) || isnan (ylen) || isinf (xlen) || isinf (ylen))
+        outline = box_to_scheme_lines (kerned_bbox);
+      else
+        {
+          assert (abs (xlen - ylen) < 10e-3);
+
+          Real scale_factor = max (xlen, ylen);
+          // the three operations below move the stencil from its original coordinates to current coordinates
+          pango_matrix_translate (&transcopy, kerned_bbox[X_AXIS][LEFT], kerned_bbox[Y_AXIS][DOWN] - real_bbox[Y_AXIS][DOWN]);
+          pango_matrix_translate (&transcopy, real_bbox[X_AXIS][LEFT], real_bbox[Y_AXIS][DOWN]);
+          pango_matrix_scale (&transcopy, scale_factor, scale_factor);
+          pango_matrix_translate (&transcopy, -bbox[X_AXIS][LEFT], -bbox[Y_AXIS][DOWN]);
+        }
+      //////////////////////
+      for (SCM s = outline;
+           scm_is_pair (s);
+           s = scm_cdr (s))
+        {
+          scm_to_int (scm_length (scm_car (s))) == 4
+          ? make_draw_line_boxes (boxes, buildings, transcopy, scm_cons (scm_from_double (0), scm_car (s)), false)
+          : make_draw_bezier_boxes (boxes, buildings, transcopy, scm_cons (scm_from_double (0), scm_car (s)));
+        }
+    }
+}
+
+/*
+  receives a stencil expression and a transform matrix
+  depending on the stencil name, dispatches it to the appropriate function
+*/
+
+void
+stencil_dispatcher (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
+{
+  if (not scm_is_pair (expr))
+    return;
+  if (scm_car (expr) == ly_symbol2scm ("draw-line"))
+    make_draw_line_boxes (boxes, buildings, trans, scm_cdr (expr), true);
+  else if (scm_car (expr) == ly_symbol2scm ("dashed-line"))
+    {
+      expr = scm_cdr (expr);
+      SCM th = scm_car (expr);
+      expr = scm_cdr (expr);
+      expr = scm_cdr (expr); // on
+      expr = scm_cdr (expr); // off
+      SCM x1 = scm_car (expr);
+      expr = scm_cdr (expr);
+      SCM x2 = scm_car (expr);
+      make_draw_line_boxes (boxes, buildings, trans, scm_list_5 (th, scm_from_double (0.0), scm_from_double (0.0), x1, x2), true);
+    }
+  else if (scm_car (expr) == ly_symbol2scm ("circle"))
+    {
+      expr = scm_cdr (expr);
+      SCM rad = scm_car (expr);
+      expr = scm_cdr (expr);
+      SCM th = scm_car (expr);
+      make_partial_ellipse_boxes (boxes, buildings, trans,
+                                  scm_list_n (rad,
+                                              rad,
+                                              scm_from_double (0.0),
+                                              scm_from_double (360.0),
+                                              th,
+                                              SCM_BOOL_F,
+                                              SCM_BOOL_T,
+                                              SCM_UNDEFINED));
+    }
+  else if (scm_car (expr) == ly_symbol2scm ("ellipse"))
+    {
+      expr = scm_cdr (expr);
+      SCM x_rad = scm_car (expr);
+      expr = scm_cdr (expr);
+      SCM y_rad = scm_car (expr);
+      expr = scm_cdr (expr);
+      SCM th = scm_car (expr);
+      make_partial_ellipse_boxes (boxes, buildings, trans,
+                                  scm_list_n (x_rad,
+                                              y_rad,
+                                              scm_from_double (0.0),
+                                              scm_from_double (360.0),
+                                              th,
+                                              SCM_BOOL_F,
+                                              SCM_BOOL_T,
+                                              SCM_UNDEFINED));
+    }
+  else if (scm_car (expr) == ly_symbol2scm ("partial-ellipse"))
+    make_partial_ellipse_boxes (boxes, buildings, trans, scm_cdr (expr));
+  else if (scm_car (expr) == ly_symbol2scm ("round-filled-box"))
+    make_round_filled_box_boxes (boxes, trans, scm_cdr (expr));
+  else if (scm_car (expr) == ly_symbol2scm ("named-glyph"))
+    make_named_glyph_boxes (boxes, buildings, trans, scm_cdr (expr));
+  else if (scm_car (expr) == ly_symbol2scm ("polygon"))
+    make_polygon_boxes (boxes, buildings, trans, scm_cdr (expr));
+  else if (scm_car (expr) == ly_symbol2scm ("path"))
+    make_path_boxes (boxes, buildings, trans, scm_cdr (expr));
+  else if (scm_car (expr) == ly_symbol2scm ("glyph-string"))
+    make_glyph_string_boxes (boxes, buildings, trans, scm_cdr (expr));
+  else
+    {
+#if 0
+      warning ("Stencil expression not supported by the veritcal skylines.");
+#endif
+      /*
+        We don't issue a warning here, as we assume that stencil-expression.cc
+        is doing stencil-checking correctly.
+      */
+    }
+}
+
+/*
+  traverses a stencil expression, returning a vector of Transform_matrix_and_expression
+  the struct Transform_matrix_and_expression contains two members,
+  a Transform_matrix that indicates where to move a stencil and the stencil expression
+  to show how to construct the stencil
+*/
+vector<Transform_matrix_and_expression>
+stencil_traverser (PangoMatrix trans, SCM expr)
+{
+  if (scm_is_null (expr))
+    return vector<Transform_matrix_and_expression> ();
+  else if (expr == ly_string2scm (""))
+    return vector<Transform_matrix_and_expression> ();
+  else if (scm_car (expr) == ly_symbol2scm ("combine-stencil"))
+    {
+      vector<Transform_matrix_and_expression> out;
+      for (SCM s = scm_cdr (expr); scm_is_pair (s); s = scm_cdr (s))
+        {
+          vector<Transform_matrix_and_expression> res = stencil_traverser (trans, scm_car (s));
+          out.insert (out.end (), res.begin (), res.end ());
+        }
+      return out;
+    }
+  else if (scm_car (expr) == ly_symbol2scm ("footnote"))
+    return vector<Transform_matrix_and_expression> ();
+  else if (scm_car (expr) == ly_symbol2scm ("translate-stencil"))
+    {
+      Real x = robust_scm2double (scm_caadr (expr), 0.0);
+      Real y = robust_scm2double (scm_cdadr (expr), 0.0);
+      pango_matrix_translate (&trans, x, y);
+      return stencil_traverser (trans, scm_caddr (expr));
+    }
+  else if (scm_car (expr) == ly_symbol2scm ("scale-stencil"))
+    {
+      Real x = robust_scm2double (scm_caadr (expr), 0.0);
+      Real y = robust_scm2double (scm_cadadr (expr), 0.0);
+      pango_matrix_scale (&trans, x, y);
+      return stencil_traverser (trans, scm_caddr (expr));
+    }
+  else if (scm_car (expr) == ly_symbol2scm ("rotate-stencil"))
+    {
+      Real ang = robust_scm2double (scm_caadr (expr), 0.0);
+      Real x = robust_scm2double (scm_car (scm_cadadr (expr)), 0.0);
+      Real y = robust_scm2double (scm_cdr (scm_cadadr (expr)), 0.0);
+      pango_matrix_translate (&trans, x, y);
+      pango_matrix_rotate (&trans, -ang);
+      pango_matrix_translate (&trans, -x, -y);
+      return stencil_traverser (trans, scm_caddr (expr));
+    }
+  else if (scm_car (expr) == ly_symbol2scm ("delay-stencil-evaluation"))
+    // should not use the place-holder text, but no need for the warning below
+    return vector<Transform_matrix_and_expression> ();
+  else if (scm_car (expr) == ly_symbol2scm ("grob-cause"))
+    return stencil_traverser (trans, scm_caddr (expr));
+  else if (scm_car (expr) == ly_symbol2scm ("color"))
+    return stencil_traverser (trans, scm_caddr (expr));
+  else if (scm_car (expr) == ly_symbol2scm ("transparent-stencil"))
+    return stencil_traverser (trans, scm_cadr (expr));
+  else if (scm_car (expr) == ly_symbol2scm ("id"))
+    return stencil_traverser (trans, scm_caddr (expr));
+  else
+    {
+      vector<Transform_matrix_and_expression> out;
+      out.push_back (Transform_matrix_and_expression (trans, expr));
+      return out;
+    }
+  warning ("Stencil expression not supported by the veritcal skylines.");
+  return vector<Transform_matrix_and_expression> ();
+}
+
+SCM
+Grob::maybe_pure_internal_simple_skylines_from_extents (Grob *me, Axis a, bool pure, int beg, int end, bool ignore_x, bool ignore_y)
+{
+  vector<Box> boxes;
+  // we don't know how far spanners stretch along the X axis before
+  // line breaking. better have them take up the whole thing
+  Interval xex = ignore_x
+                 ? Interval (-infinity_f, infinity_f)
+                 : me->extent (me, X_AXIS);
+
+  // If we're looking at the x exent of a cross staff grob, it could be
+  // very early on in the computation process.  We won't know its height
+  // until way later, so we give a brute force approximation.
+  Interval yex = ignore_y
+                 ? Interval (-infinity_f, infinity_f)
+                 : me->maybe_pure_extent (me, Y_AXIS, pure, beg, end);
+
+  if (xex.is_empty () || yex.is_empty ())
+    return Skyline_pair ().smobbed_copy ();
+
+  boxes.push_back (Box (xex, yex));
+  return Skyline_pair (boxes, a).smobbed_copy ();
+}
+
+MAKE_SCHEME_CALLBACK (Grob, pure_simple_vertical_skylines_from_extents, 3);
+SCM
+Grob::pure_simple_vertical_skylines_from_extents (SCM smob, SCM begscm, SCM endscm)
+{
+  Grob *me = unsmob_grob (smob);
+  int beg = robust_scm2int (begscm, 0);
+  int end = robust_scm2int (endscm, INT_MAX);
+  // We cannot measure the widths before line breaking,
+  // so we assume that the width is infinite: pass ignore_x=true
+  return maybe_pure_internal_simple_skylines_from_extents (me, X_AXIS, true, beg, end, true, false);
+}
+
+MAKE_SCHEME_CALLBACK (Grob, simple_vertical_skylines_from_extents, 1);
+SCM
+Grob::simple_vertical_skylines_from_extents (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  return maybe_pure_internal_simple_skylines_from_extents (me, X_AXIS, false, 0, 0, false, false);
+}
+
+MAKE_SCHEME_CALLBACK (Grob, pure_simple_horizontal_skylines_from_extents, 3);
+SCM
+Grob::pure_simple_horizontal_skylines_from_extents (SCM smob, SCM begscm, SCM endscm)
+{
+  Grob *me = unsmob_grob (smob);
+  int beg = robust_scm2int (begscm, 0);
+  int end = robust_scm2int (endscm, INT_MAX);
+  // If the grob is cross staff, we cannot measure its Y-extent before
+  // wayyyy downstream (after spacing of axis groups is done).
+  // Thus, we assume that the Y extent is infinite for cross staff grobs.
+  return maybe_pure_internal_simple_skylines_from_extents (me, Y_AXIS, true, beg, end, false, to_boolean (me->get_property ("cross-staff")));
+}
+
+MAKE_SCHEME_CALLBACK (Grob, simple_horizontal_skylines_from_extents, 1);
+SCM
+Grob::simple_horizontal_skylines_from_extents (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  // See comment in function above.
+  return maybe_pure_internal_simple_skylines_from_extents (me, Y_AXIS, false, 0, 0, false, to_boolean (me->get_property ("cross-staff")));
+}
+
+SCM
+Stencil::skylines_from_stencil (SCM sten, Real pad, Axis a)
+{
+  Stencil *s = unsmob_stencil (sten);
+  if (!s)
+    return Skyline_pair ().smobbed_copy ();
+
+  vector<Transform_matrix_and_expression> data
+    = stencil_traverser (make_transform_matrix (1.0, 0.0, 0.0, 1.0, 0.0, 0.0),
+                         s->expr ());
+  vector<Box> boxes;
+  vector<Drul_array<Offset> > buildings;
+  for (vsize i = 0; i < data.size (); i++)
+    stencil_dispatcher (boxes, buildings, data[i].tm_, data[i].expr_);
+
+  // we use the bounding box if there are no boxes
+  if (!boxes.size () && !buildings.size ())
+    boxes.push_back (Box (s->extent (X_AXIS), s->extent (Y_AXIS)));
+
+  Skyline_pair out (boxes, a);
+  out.merge (Skyline_pair (buildings, a));
+
+  for (DOWN_and_UP (d))
+    out[d] = out[d].padded (pad);
+
+  out.deholify ();
+  return out.smobbed_copy ();
+}
+
+MAKE_SCHEME_CALLBACK (Grob, vertical_skylines_from_stencil, 1);
+SCM
+Grob::vertical_skylines_from_stencil (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+
+  Real pad = robust_scm2double (me->get_property ("skyline-horizontal-padding"), 0.0);
+  SCM out = Stencil::skylines_from_stencil (me->get_property ("stencil"), pad, X_AXIS);
+
+  return out;
+}
+
+MAKE_SCHEME_CALLBACK (Grob, horizontal_skylines_from_stencil, 1);
+SCM
+Grob::horizontal_skylines_from_stencil (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+
+  Real pad = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0);
+  SCM out = Stencil::skylines_from_stencil (me->get_property ("stencil"), pad, Y_AXIS);
+
+  return out;
+}
+
+SCM
+Grob::internal_skylines_from_element_stencils (Grob *me, Axis a, bool pure, int beg, int end)
+{
+
+  extract_grob_set (me, "elements", elts);
+  vector<Real> x_pos;
+  vector<Real> y_pos;
+  Grob *x_common = common_refpoint_of_array (elts, me, X_AXIS);
+  Grob *y_common = common_refpoint_of_array (elts, me, Y_AXIS);
+  for (vsize i = 0; i < elts.size (); i++)
+    {
+      x_pos.push_back (elts[i]->relative_coordinate (x_common, X_AXIS));
+      y_pos.push_back (elts[i]->maybe_pure_coordinate (y_common, Y_AXIS, pure, beg, end));
+    }
+  Real my_x = me->relative_coordinate (x_common, X_AXIS);
+  Real my_y = me->maybe_pure_coordinate (y_common, Y_AXIS, pure, beg, end);
+
+  Skyline_pair res;
+  for (vsize i = 0; i < elts.size (); i++)
+    {
+      Skyline_pair *skyp = Skyline_pair::unsmob (elts[i]->get_maybe_pure_property (a == X_AXIS ? "vertical-skylines" : "horizontal-skylines", pure, beg, end));
+      if (skyp)
+        {
+          /*
+            Here, copying is essential.  Otherwise, the skyline pair will
+            get doubly shifted!
+          */
+          /*
+            It took Mike about 6 months of his life to add the `else' clause
+            below.  For horizontal skylines, the raise and shift calls need
+            to be reversed.  This is what was causing the problems in the
+            shifting with all of the tests. RIP 6 months!
+          */
+          Skyline_pair copy = Skyline_pair (*skyp);
+          if (a == X_AXIS)
+            {
+              copy.shift (x_pos[i] - my_x);
+              copy.raise (y_pos[i] - my_y);
+            }
+          else
+            {
+              copy.raise (x_pos[i] - my_x);
+              copy.shift (y_pos[i] - my_y);
+            }
+          res.merge (copy);
+        }
+    }
+  return res.smobbed_copy ();
+}
+
+MAKE_SCHEME_CALLBACK (Grob, vertical_skylines_from_element_stencils, 1);
+SCM
+Grob::vertical_skylines_from_element_stencils (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  return internal_skylines_from_element_stencils (me, X_AXIS, false, 0, INT_MAX);
+}
+
+MAKE_SCHEME_CALLBACK (Grob, horizontal_skylines_from_element_stencils, 1);
+SCM
+Grob::horizontal_skylines_from_element_stencils (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  return internal_skylines_from_element_stencils (me, Y_AXIS, false, 0, INT_MAX);
+}
+
+MAKE_SCHEME_CALLBACK (Grob, pure_vertical_skylines_from_element_stencils, 3);
+SCM
+Grob::pure_vertical_skylines_from_element_stencils (SCM smob, SCM beg_scm, SCM end_scm)
+{
+  Grob *me = unsmob_grob (smob);
+  int beg = robust_scm2int (beg_scm, 0);
+  int end = robust_scm2int (end_scm, 0);
+  return internal_skylines_from_element_stencils (me, X_AXIS, true, beg, end);
+}
+
+MAKE_SCHEME_CALLBACK (Grob, pure_horizontal_skylines_from_element_stencils, 3);
+SCM
+Grob::pure_horizontal_skylines_from_element_stencils (SCM smob, SCM beg_scm, SCM end_scm)
+{
+  Grob *me = unsmob_grob (smob);
+  int beg = robust_scm2int (beg_scm, 0);
+  int end = robust_scm2int (end_scm, 0);
+  return internal_skylines_from_element_stencils (me, Y_AXIS, true, beg, end);
+}
index 8214af5dcc8e40a427dcd80212a0931a74bcef6f..734eb6080648ea4c7f496818c9a64994afb2bb08 100644 (file)
@@ -21,7 +21,7 @@
 
 void
 interpret_stencil_expression (SCM expr,
-                              void (*func) (void *, SCM),
+                              SCM (*func) (void *, SCM),
                               void *func_arg,
                               Offset o)
 {
@@ -37,6 +37,8 @@ interpret_stencil_expression (SCM expr,
           interpret_stencil_expression (scm_force (scm_cadr (expr)), func, func_arg, o);
           return;
         }
+      if (head == ly_symbol2scm ("transparent-stencil"))
+        return;
       if (head == ly_symbol2scm ("footnote"))
         return;
       if (head == ly_symbol2scm ("translate-stencil"))
@@ -55,10 +57,12 @@ interpret_stencil_expression (SCM expr,
         {
           SCM grob = scm_cadr (expr);
 
-          (*func) (func_arg, scm_list_3 (head,
-                                         ly_quote_scm (ly_offset2scm (o)), grob));
+          SCM link =
+            (*func) (func_arg,
+                     scm_list_3 (head, ly_quote_scm (ly_offset2scm (o)), grob));
           interpret_stencil_expression (scm_caddr (expr), func, func_arg, o);
-          (*func) (func_arg, scm_list_1 (ly_symbol2scm ("no-origin")));
+          if (scm_is_true (link))
+            (*func) (func_arg, scm_list_1 (ly_symbol2scm ("no-origin")));
           return;
         }
       else if (head == ly_symbol2scm ("color"))
@@ -133,7 +137,7 @@ struct Font_list
   SCM fonts_;
 };
 
-static void
+static SCM
 find_font_function (void *fs, SCM x)
 {
   Font_list *me = (Font_list *) fs;
@@ -152,6 +156,7 @@ find_font_function (void *fs, SCM x)
             me->fonts_ = scm_cons (scm_cadr (what), me->fonts_);
         }
     }
+  return SCM_BOOL_T;
 }
 
 SCM
index 7e346ca7f821b634977571f31b17ebc03536657d..ab0f8cf745237b37cf36663ab93c0a6d884d3fa4 100644 (file)
@@ -34,11 +34,14 @@ LY_DEFINE (ly_stencil_translate_axis, "ly:stencil-translate-axis",
   Stencil *s = unsmob_stencil (stil);
   LY_ASSERT_SMOB (Stencil, stil, 1);
   LY_ASSERT_TYPE (scm_is_number, amount, 2);
+
   LY_ASSERT_TYPE (is_axis, axis, 3);
 
   Real real_amount = scm_to_double (amount);
 
   SCM new_s = s->smobbed_copy ();
+  scm_remember_upto_here_1 (stil);
+
   Stencil *q = unsmob_stencil (new_s);
   q->translate_axis (real_amount, Axis (scm_to_int (axis)));
   return new_s;
@@ -55,6 +58,8 @@ LY_DEFINE (ly_stencil_translate, "ly:stencil-translate",
   Offset o = ly_scm2offset (offset);
 
   SCM new_s = s->smobbed_copy ();
+  scm_remember_upto_here_1 (stil);
+
   Stencil *q = unsmob_stencil (new_s);
   q->translate (o);
   return new_s;
@@ -83,12 +88,17 @@ LY_DEFINE (ly_stencil_extent, "ly:stencil-extent",
 }
 
 LY_DEFINE (ly_stencil_empty_p, "ly:stencil-empty?",
-           1, 0, 0, (SCM stil),
-           "Return whether @var{stil} is empty.")
+           1, 1, 0, (SCM stil, SCM axis),
+           "Return whether @var{stil} is empty.  If an optional"
+           " @var{axis} is supplied, the emptiness check is"
+           " restricted to that axis.")
 {
   Stencil *s = unsmob_stencil (stil);
   LY_ASSERT_SMOB (Stencil, stil, 1);
-  return scm_from_bool (s->is_empty ());
+  if (SCM_UNBNDP (axis))
+    return scm_from_bool (s->is_empty ());
+  LY_ASSERT_TYPE (is_axis, axis, 2);
+  return scm_from_bool (s->is_empty (Axis (scm_to_int (axis))));
 }
 
 LY_DEFINE (ly_stencil_combine_at_edge, "ly:stencil-combine-at-edge",
@@ -127,6 +137,61 @@ LY_DEFINE (ly_stencil_combine_at_edge, "ly:stencil-combine-at-edge",
     result.add_at_edge (Axis (scm_to_int (axis)),
                         Direction (scm_to_int (direction)), *s2, p);
 
+  scm_remember_upto_here_2 (first, second);
+
+  return result.smobbed_copy ();
+}
+
+LY_DEFINE (ly_stencil_stack, "ly:stencil-stack",
+           4, 2, 0, (SCM first, SCM axis, SCM direction,
+                     SCM second,
+                     SCM padding,
+                     SCM mindist),
+           "Construct a stencil by stacking @var{second} next to @var{first}."
+           "  @var{axis} can be 0 (x-axis) or@tie{}1 (y-axis)."
+           "  @var{direction} can be -1 (left or down) or@tie{}1 (right or"
+           " up).  The stencils are juxtaposed with @var{padding} as extra"
+           " space.  @var{first} and @var{second} may also be @code{'()} or"
+           " @code{#f}.  As opposed to @code{ly:stencil-combine-at-edge},"
+           " metrics are suited for successively accumulating lines of"
+           " stencils.  Also, @var{second} stencil is drawn last.\n\n"
+           "If @var{mindist} is specified, reference points are placed"
+           " apart at least by this distance.  If either of the stencils"
+           " is spacing, @var{padding} and @var{mindist} do not apply.")
+{
+  Stencil *s1 = unsmob_stencil (first);
+  Stencil *s2 = unsmob_stencil (second);
+  Stencil result;
+
+  SCM_ASSERT_TYPE (s1 || first == SCM_BOOL_F || first == SCM_EOL,
+                   first, SCM_ARG1, __FUNCTION__, "Stencil, #f or ()");
+  SCM_ASSERT_TYPE (s2 || second == SCM_BOOL_F || second == SCM_EOL,
+                   second, SCM_ARG4, __FUNCTION__, "Stencil, #f or ()");
+  LY_ASSERT_TYPE (is_axis, axis, 2);
+  LY_ASSERT_TYPE (is_direction, direction, 3);
+
+  Real p = 0.0;
+  if (padding != SCM_UNDEFINED)
+    {
+      LY_ASSERT_TYPE (scm_is_number, padding, 5);
+      p = scm_to_double (padding);
+    }
+  Real d = -infinity_f;
+  if (!SCM_UNBNDP (mindist))
+    {
+      LY_ASSERT_TYPE (scm_is_number, mindist, 6);
+      d = scm_to_double (mindist);
+    }
+
+  if (s1)
+    result = *s1;
+
+  if (s2)
+    result.stack (Axis (scm_to_int (axis)),
+                  Direction (scm_to_int (direction)), *s2, p, d);
+
+  scm_remember_upto_here_2 (first, second);
+
   return result.smobbed_copy ();
 }
 
@@ -138,7 +203,8 @@ LY_DEFINE (ly_stencil_add, "ly:stencil-add",
   SCM_VALIDATE_REST_ARGUMENT (args);
 
   SCM expr = SCM_EOL;
-  SCM *tail = &expr;
+  SCM cs = ly_symbol2scm ("combine-stencil");
+
   Box extent;
   extent.set_empty ();
 
@@ -149,12 +215,18 @@ LY_DEFINE (ly_stencil_add, "ly:stencil-add",
         SCM_ASSERT_TYPE (s, scm_car (args), SCM_ARGn, __FUNCTION__, "Stencil");
 
       extent.unite (s->extent_box ());
-      *tail = scm_cons (s->expr (), SCM_EOL);
-      tail = SCM_CDRLOC (*tail);
+      if (scm_is_pair (s->expr ()) && scm_is_eq (cs, s->expr ()))
+        {
+          expr = scm_reverse_x (scm_list_copy (scm_cdr (s->expr ())),
+                                expr);
+        }
+      else
+        expr = scm_cons (s->expr (), expr);
+
       args = scm_cdr (args);
     }
 
-  expr = scm_cons (ly_symbol2scm ("combine-stencil"), expr);
+  expr = scm_cons (cs, scm_reverse_x (expr, SCM_EOL));
   return Stencil (extent, expr).smobbed_copy ();
 }
 
@@ -172,7 +244,7 @@ LY_DEFINE (ly_make_stencil, "ly:make-stencil",
            "@item\n"
            "The vertical and horizontal extents of the object, given as"
            " pairs.  If an extent is unspecified (or if you use"
-           " @code{(1000 . -1000)} as its value), it is taken to be empty.\n"
+           " @code{empty-interval} as its value), it is taken to be empty.\n"
            "@end enumerate\n")
 {
   SCM_ASSERT_TYPE (!scm_is_pair (expr)
@@ -243,10 +315,10 @@ struct Stencil_interpret_arguments
   SCM arg1;
 };
 
-void stencil_interpret_in_scm (void *p, SCM expr)
+SCM stencil_interpret_in_scm (void *p, SCM expr)
 {
   Stencil_interpret_arguments *ap = (Stencil_interpret_arguments *) p;
-  scm_call_2 (ap->func, ap->arg1, expr);
+  return scm_call_2 (ap->func, ap->arg1, expr);
 }
 
 LY_DEFINE (ly_interpret_stencil_expression, "ly:interpret-stencil-expression",
index a488c598137106339e3dc12951ce5ae6ff520a01..c8985105ea44f0216ca58a3153a31cb89f3b55f2 100644 (file)
@@ -68,8 +68,13 @@ bool
 Stencil::is_empty () const
 {
   return (expr_ == SCM_EOL
-          || dim_[X_AXIS].is_empty ()
-          || dim_[Y_AXIS].is_empty ());
+          || dim_.is_empty ());
+}
+
+bool
+Stencil::is_empty (Axis a) const
+{
+  return dim_.is_empty (a);
 }
 
 SCM
@@ -173,9 +178,10 @@ Stencil::translate (Offset o)
       incr (a);
     }
 
-  expr_ = scm_list_n (ly_symbol2scm ("translate-stencil"),
-                      ly_offset2scm (o),
-                      expr_, SCM_UNDEFINED);
+  if (!scm_is_null (expr_))
+    expr_ = scm_list_n (ly_symbol2scm ("translate-stencil"),
+                        ly_offset2scm (o),
+                        expr_, SCM_UNDEFINED);
   if (!is_empty ())
     dim_.translate (o);
 }
@@ -202,7 +208,28 @@ Stencil::scale (Real x, Real y)
 void
 Stencil::add_stencil (Stencil const &s)
 {
-  expr_ = scm_list_3 (ly_symbol2scm ("combine-stencil"), s.expr_, expr_);
+  SCM cs = ly_symbol2scm ("combine-stencil");
+  if (scm_is_null (expr_))
+    expr_ = s.expr_;
+  else if (scm_is_null (s.expr_))
+    ;
+  else if (scm_is_pair (expr_)
+      && scm_is_eq (cs, scm_car (expr_)))
+    {
+      if (scm_is_pair (s.expr_)
+          && scm_is_eq (cs, scm_car (s.expr_)))
+        expr_ = scm_append (scm_list_2 (s.expr_, scm_cdr (expr_)));
+      else
+        expr_ = scm_cons2 (cs, s.expr_, scm_cdr (expr_));
+    }
+  else
+    {
+      if (scm_is_pair (s.expr_)
+          && scm_is_eq (cs, scm_car (s.expr_)))
+        expr_ = scm_append (scm_list_2 (s.expr_, scm_list_1 (expr_)));
+      else
+        expr_ = scm_list_3 (cs, s.expr_, expr_);
+    }
   dim_.unite (s.dim_);
 }
 
@@ -224,7 +251,7 @@ Stencil::set_empty (bool e)
 void
 Stencil::align_to (Axis a, Real x)
 {
-  if (is_empty ())
+  if (is_empty (a))
     return;
 
   Interval i (extent (a));
@@ -232,28 +259,155 @@ Stencil::align_to (Axis a, Real x)
 }
 
 /*  See scheme Function.  */
+
+// Any stencil that is empty in the orthogonal axis is spacing.
+// Spacing is not subjected to the max (0) rule and can thus be
+// negative.
+
 void
 Stencil::add_at_edge (Axis a, Direction d, Stencil const &s, Real padding)
 {
-  Interval my_extent = dim_[a];
-  Interval i (s.extent (a));
-  Real his_extent;
-  if (i.is_empty ())
+  // Material that is empty in the axis of reference has only limited
+  // usefulness for combining.  We still retain as much information as
+  // available since there may be uses like setting page links or
+  // background color or watermarks, and off-axis extents.
+
+  if (is_empty (a))
     {
-      programming_error ("Stencil::add_at_edge: adding empty stencil.");
-      his_extent = 0.0;
+      add_stencil (s);
+      return;
     }
-  else
-    his_extent = i[-d];
 
-  Real offset = (my_extent.is_empty () ? 0.0 : my_extent[d] - his_extent)
-                + d * padding;
+  Interval first_extent = extent (a);
+
+  if (s.is_empty (a))
+    {
+      Stencil toadd (s);
+      // translation does not affect axis-empty extent box.
+      toadd.translate_axis (first_extent[d], a);
+      add_stencil (toadd);
+      return;
+    }
+
+  Interval next_extent = s.extent (a);
+
+  bool first_is_spacing = is_empty (other_axis (a));
+  bool next_is_spacing = s.is_empty (other_axis (a));
+
+  Real offset = first_extent[d] - next_extent[-d];
+
+  if (!(first_is_spacing || next_is_spacing))
+    {
+      offset += d * padding;
+    }
 
   Stencil toadd (s);
   toadd.translate_axis (offset, a);
   add_stencil (toadd);
 }
 
+// Stencil::stack is mainly used for assembling lines or columns
+// of stencils.  For the most common case of adding at the right, the
+// reference point of the added stencil is usually placed at the right
+// edge of the current one, unless the added stencil has a negative
+// left extent in which case its left edge is placed at the right edge
+// of the current one.
+//
+// Spacing is special in that it is applied without padding.  Spacing
+// at the right edge shifts the right edge accordingly.
+//
+// For spacing at the left edge, there are several approaches.  In
+// order to get to predictable behavior, we want to have at least a
+// continuous approach.  An obvious idea is to do a "translate" by the
+// appropriate amount.  Doing that while retaining the nominal left
+// edge seems like the most straightforward way.
+
+void
+Stencil::stack (Axis a, Direction d, Stencil const &s, Real padding, Real mindist)
+{
+  // Material that is empty in the axis of reference can't be sensibly
+  // stacked.  We just revert to add_at_edge behavior then.
+
+  if (is_empty (a))
+    {
+      Stencil toadd (s);
+      toadd.add_stencil (*this);
+      expr_ = toadd.expr ();
+      dim_ = toadd.extent_box ();
+      return;
+    }
+
+  Interval first_extent = extent (a);
+
+  if (s.is_empty (a))
+    {
+      Stencil toadd (s);
+      toadd.translate_axis (first_extent[d], a);
+      toadd.add_stencil (*this);
+      expr_ = toadd.expr ();
+      dim_ = toadd.extent_box ();
+      return;
+    }
+
+  Interval next_extent = s.extent (a);
+
+  // It is somewhat tedious to special-case all spacing, but it turns
+  // out that not doing so makes it astonishingly hard to make the
+  // code do the correct thing.
+
+  // If first is spacing, we translate second accordingly without
+  // letting this affect its backward edge.
+  if (is_empty (other_axis (a)))
+    {
+      Stencil toadd (s);
+      Real offset = d * first_extent.delta ();
+      toadd.translate_axis (offset, a);
+      toadd.add_stencil (*this);
+      expr_ = toadd.expr ();
+      dim_ = toadd.extent_box ();
+      dim_[a][-d] = next_extent[-d];
+      dim_[a][d] = next_extent[d] + offset;
+      return;
+    }
+
+  // If next is spacing, similar action:
+  if (s.is_empty (other_axis (a)))
+    {
+      Stencil toadd (s);
+      Real offset = first_extent [d];
+      toadd.translate_axis (offset, a);
+      toadd.add_stencil (*this);
+      expr_ = toadd.expr ();
+      dim_ = toadd.extent_box ();
+      dim_[a][-d] = first_extent[-d];
+      dim_[a][d] = first_extent[d] + d * next_extent.delta ();
+      return;
+    }
+
+
+  Real offset = first_extent[d];
+
+  // If the added stencil has a backwardly protruding edge, we make
+  // room for it when combining.
+
+  if (d * next_extent [-d] < 0)
+    offset -= next_extent [-d];
+
+  offset += d * padding;
+
+  if (offset * d < mindist)
+    offset = d * mindist;
+
+  Stencil toadd (s);
+  toadd.translate_axis (offset, a);
+  toadd.add_stencil (*this);
+  expr_ = toadd.expr ();
+  dim_ = toadd.extent_box ();
+  dim_[a][-d] = first_extent [-d];
+  dim_[a][d] = next_extent [d] + offset;
+}
+
+
 Stencil
 Stencil::in_color (Real r, Real g, Real b) const
 {
index 8a83f499e2120a176c9bf31b0f016d2cb367f2e5..16703d33f586b13bd57bb3e9e28c00d1a4793af6 100644 (file)
@@ -44,16 +44,13 @@ LY_DEFINE (ly_make_stream_event, "ly:make-stream-event",
 }
 
 LY_DEFINE (ly_event_property, "ly:event-property",
-           2, 0, 0, (SCM sev, SCM sym),
-           "Get the property @var{sym} of stream event @var{mus}."
-           "  If @var{sym} is undefined, return @code{'()}.")
+           2, 1, 0, (SCM sev, SCM sym, SCM val),
+           "Get the property @var{sym} of stream event @var{sev}."
+           "  If @var{sym} is undefined, return @var{val} or"
+           " @code{'()} if @var{val} is not specified.")
 {
-  LY_ASSERT_TYPE (unsmob_stream_event, sev, 1);
-  LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
-
-  Stream_event *e = unsmob_stream_event (sev);
-
-  return e->internal_get_property (sym);
+  LY_ASSERT_TYPE (unsmob_stream_event, sev, 1)
+  return ly_prob_property (sev, sym, val);
 }
 
 LY_DEFINE (ly_event_set_property_x, "ly:event-set-property!",
index d4b523c06c63b82094346bc1d13d08af83ae4a4a..a45b7dd13a6c0fd87936da38584331e1f73cda87 100644 (file)
@@ -169,7 +169,7 @@ System_start_delimiter::staff_brace (Grob *me, Real y)
     }
   while (hi - lo > 1);
 
-  Stencil stil (fm->find_by_name ("brace" + to_string (lo)));
+  Stencil stil (fm->find_by_name ("brace" + ::to_string (lo)));
   stil.translate_axis (-b[X_AXIS].length () / 2, X_AXIS);
 
   stil.translate_axis (-0.2, X_AXIS);
index be3c9ec1921ac34a571911de5e7705b87ef31c3f..ad4d0bab772453f4007edd23b6519c429eed347e 100644 (file)
@@ -36,6 +36,7 @@
 #include "pointer-group-interface.hh"
 #include "skyline-pair.hh"
 #include "staff-symbol-referencer.hh"
+#include "system-start-delimiter.hh"
 #include "text-interface.hh"
 #include "warn.hh"
 #include "unpure-pure-container.hh"
@@ -222,7 +223,7 @@ System::get_paper_systems ()
       scm_vector_set_x (lines, scm_from_int (i),
                         system->get_paper_system ());
 
-      debug_output (to_string (i) + "]", false);
+      debug_output (::to_string (i) + "]", false);
     }
   return lines;
 }
@@ -404,6 +405,37 @@ System::footnotes_after_line_breaking (SCM smob)
   return grobs_scm;
 }
 
+MAKE_SCHEME_CALLBACK (System, vertical_skyline_elements, 1);
+SCM
+System::vertical_skyline_elements (SCM smob)
+{
+  Grob *me_grob = unsmob_grob (smob);
+  vector<Grob *> vertical_skyline_grobs;
+  extract_grob_set (me_grob, "elements", my_elts);
+  for (vsize i = 0; i < my_elts.size (); i++)
+    if (System_start_delimiter::has_interface (my_elts[i]))
+      vertical_skyline_grobs.push_back (my_elts[i]);
+
+  System *me = dynamic_cast<System *> (me_grob);
+  Grob *align = unsmob_grob (me->get_object ("vertical-alignment"));
+  if (!align)
+    {
+      SCM grobs_scm = Grob_array::make_array ();
+      unsmob_grob_array (grobs_scm)->set_array (vertical_skyline_grobs);
+      return grobs_scm;
+    }
+
+  extract_grob_set (align, "elements", elts);
+
+  for (vsize i = 0; i < elts.size (); i++)
+    if (Hara_kiri_group_spanner::has_interface (elts[i]))
+      vertical_skyline_grobs.push_back (elts[i]);
+
+  SCM grobs_scm = Grob_array::make_array ();
+  unsmob_grob_array (grobs_scm)->set_array (vertical_skyline_grobs);
+  return grobs_scm;
+}
+
 void
 System::break_into_pieces (vector<Column_x_positions> const &breaking)
 {
@@ -516,8 +548,7 @@ System::post_processing ()
      anyway. */
 
   vector<Grob *> all_elts_sorted (all_elements_->array ());
-  vector_sort (all_elts_sorted, std::less<Grob *> ());
-  uniq (all_elts_sorted);
+  uniquify (all_elts_sorted);
   this->get_stencil ();
   for (vsize i = all_elts_sorted.size (); i--;)
     {
@@ -622,7 +653,7 @@ System::get_paper_system ()
     pl->set_property ("last-in-score", SCM_BOOL_T);
 
   Interval staff_refpoints;
-  if (Grob *align = get_vertical_alignment ())
+  if (Grob *align = unsmob_grob (get_object ("vertical-alignment")))
     {
       extract_grob_set (align, "elements", staves);
       for (vsize i = 0; i < staves.size (); i++)
@@ -723,22 +754,27 @@ get_root_system (Grob *me)
   return dynamic_cast<System *> (system_grob);
 }
 
-Grob *
-System::get_vertical_alignment ()
+MAKE_SCHEME_CALLBACK (System, get_vertical_alignment, 1);
+SCM
+System::get_vertical_alignment (SCM smob)
 {
-  extract_grob_set (this, "elements", elts);
+  Grob *me = unsmob_grob (smob);
+  extract_grob_set (me, "elements", elts);
   Grob *ret = 0;
   for (vsize i = 0; i < elts.size (); i++)
     if (Align_interface::has_interface (elts[i]))
       {
         if (ret)
-          programming_error ("found multiple vertical alignments in this system");
+          me->programming_error ("found multiple vertical alignments in this system");
         ret = elts[i];
       }
 
   if (!ret)
-    programming_error ("didn't find a vertical alignment in this system");
-  return ret;
+    {
+      me->programming_error ("didn't find a vertical alignment in this system");
+      return SCM_EOL;
+    }
+  return ret->self_scm ();
 }
 
 // Finds the furthest staff in the given direction whose x-extent
@@ -746,7 +782,7 @@ System::get_vertical_alignment ()
 Grob *
 System::get_extremal_staff (Direction dir, Interval const &iv)
 {
-  Grob *align = get_vertical_alignment ();
+  Grob *align = unsmob_grob (get_object ("vertical-alignment"));
   if (!align)
     return 0;
 
@@ -770,7 +806,7 @@ System::get_extremal_staff (Direction dir, Interval const &iv)
 Grob *
 System::get_neighboring_staff (Direction dir, Grob *vertical_axis_group, Interval_t<int> bounds)
 {
-  Grob *align = get_vertical_alignment ();
+  Grob *align = unsmob_grob (get_object ("vertical-alignment"));
   if (!align)
     return 0;
 
@@ -800,7 +836,7 @@ Interval
 System::pure_refpoint_extent (vsize start, vsize end)
 {
   Interval ret;
-  Grob *alignment = get_vertical_alignment ();
+  Grob *alignment = unsmob_grob (get_object ("vertical-alignment"));
   if (!alignment)
     return Interval ();
 
@@ -827,7 +863,7 @@ System::pure_refpoint_extent (vsize start, vsize end)
 Interval
 System::part_of_line_pure_height (vsize start, vsize end, bool begin)
 {
-  Grob *alignment = get_vertical_alignment ();
+  Grob *alignment = unsmob_grob (get_object ("vertical-alignment"));
   if (!alignment)
     return Interval ();
 
@@ -877,21 +913,19 @@ System::calc_pure_relevant_grobs (SCM smob)
 
   extract_grob_set (me, "elements", elts);
   vector<Grob *> relevant_grobs;
-  SCM pure_relevant_p = ly_lily_module_constant ("pure-relevant?");
 
   for (vsize i = 0; i < elts.size (); ++i)
     {
       if (!Axis_group_interface::has_interface (elts[i]))
         {
-          if (to_boolean (scm_apply_1 (pure_relevant_p, elts[i]->self_scm (), SCM_EOL)))
-            relevant_grobs.push_back (elts[i]);
+          relevant_grobs.push_back (elts[i]);
 
           if (Item *it = dynamic_cast<Item *> (elts[i]))
             {
               for (LEFT_and_RIGHT (d))
                 {
                   Item *piece = it->find_prebroken_piece (d);
-                  if (piece && to_boolean (scm_apply_1 (pure_relevant_p, piece->self_scm (), SCM_EOL)))
+                  if (piece && piece->is_live ())
                     relevant_grobs.push_back (piece);
                 }
             }
@@ -960,7 +994,7 @@ static SCM
 get_maybe_spaceable_staves (SCM smob, int filter)
 {
   System *me = dynamic_cast<System *> (unsmob_grob (smob));
-  Grob *align = me->get_vertical_alignment ();
+  Grob *align = unsmob_grob (me->get_object ("vertical_alignment"));
   SCM ret = SCM_EOL;
 
   if (align)
@@ -1022,5 +1056,5 @@ ADD_INTERFACE (System,
                "in-note-stencil "
                "labels "
                "pure-Y-extent "
-               "skyline-horizontal-padding "
+               "vertical-alignment "
               );
index cd906c2e8eb7f791c58f522ea2a74415f27e8423..c406beaab5436a9a053883651ff02d1b5364ed87 100644 (file)
@@ -19,7 +19,9 @@
 */
 
 #include "text-interface.hh"
+#include "skyline-pair.hh"
 
+#include "lookup.hh"
 #include "config.hh"
 #include "font-interface.hh"
 #include "grob.hh"
@@ -107,12 +109,10 @@ Text_interface::interpret_markup (SCM layout_smob, SCM props, SCM markup)
 {
   if (scm_is_string (markup))
     return interpret_string (layout_smob, props, markup);
-  else if (scm_is_pair (markup))
+  else if (is_markup (markup))
     {
       SCM func = scm_car (markup);
       SCM args = scm_cdr (markup);
-      if (!is_markup (markup))
-        programming_error ("markup head has no markup signature");
 
       /* Use a hare/tortoise algorithm to detect whether we are in a cycle,
        * i.e. whether we have already encountered the same markup in the
@@ -175,11 +175,14 @@ Text_interface::print (SCM grob)
 bool
 Text_interface::is_markup (SCM x)
 {
-  return (scm_is_string (x)
-          || (scm_is_pair (x)
-              && SCM_BOOL_F
-              != scm_object_property (scm_car (x),
-                                      ly_symbol2scm ("markup-signature"))));
+  return scm_is_string (x)
+    || (scm_is_pair (x)
+        && scm_is_true
+        (scm_object_property (scm_car (x),
+                              ly_symbol2scm ("markup-signature")))
+        && scm_is_false
+        (scm_object_property (scm_car (x),
+                              ly_symbol2scm ("markup-list-command"))));
 }
 
 bool
index bc14eb9bdf7ea04ffd8b38832bf5e02076bedb7c..7bc35584c571c43772ae62089cd2304cc23c0f32 100644 (file)
@@ -29,7 +29,6 @@
 #include "pointer-group-interface.hh"
 #include "tie.hh"
 #include "directional-element-interface.hh"
-#include "tie-column-format.hh"
 #include "tie-formatting-problem.hh"
 #include "tie-configuration.hh"
 
index 79992fb80885cdb87347faf4991a5e43c44aa1b4..19bcbd822c250df3a3a9862d30a5010c58dad213 100644 (file)
@@ -102,7 +102,7 @@ Tie_configuration::distance (Tie_configuration const &a,
 }
 
 void
-Tie_configuration::add_score (Real s, string desc)
+Tie_configuration::add_score (Real s, const string &desc)
 {
   assert (!scored_);
   score_ += s;
@@ -136,7 +136,7 @@ Ties_configuration::reset_score ()
 }
 
 void
-Ties_configuration::add_tie_score (Real s, int i, string desc)
+Ties_configuration::add_tie_score (Real s, int i, const string &desc)
 {
   assert (!scored_);
   score_ += s;
@@ -150,7 +150,7 @@ Ties_configuration::add_tie_score (Real s, int i, string desc)
 }
 
 void
-Ties_configuration::add_score (Real s, string desc)
+Ties_configuration::add_score (Real s, const string &desc)
 {
   assert (!scored_);
   score_ += s;
index 40da0d3e8410663881acd57eb0d191a87626ee35..637a73ef32f3d36348823d34f014af687d5e6306 100644 (file)
@@ -46,9 +46,9 @@ struct Head_event_tuple
 {
   Grob *head_;
   Moment end_moment_;
-  SCM tie_definition_;
   Stream_event *tie_stream_event_;
   Stream_event *tie_event_;
+  Spanner *tie_;
   // Indicate whether a tie from the same moment has been processed successfully
   // This is needed for tied chords, e.g. <c e g>~ g, because otherwise the c
   // and e will trigger a warning for an unterminated tie!
@@ -57,15 +57,20 @@ struct Head_event_tuple
   Head_event_tuple ()
   {
     head_ = 0;
-    tie_definition_ = SCM_EOL;
     tie_event_ = 0;
     tie_stream_event_ = 0;
     tie_from_chord_created = false;
+    tie_ = 0;
   }
 };
 
 class Tie_engraver : public Engraver
 {
+  /*
+    Whether tie event has been processed and can be deleted or should
+    be kept for later portions of a split note.
+  */
+  bool event_processed_;
   Stream_event *event_;
   vector<Grob *> now_heads_;
   vector<Head_event_tuple> heads_to_tie_;
@@ -74,8 +79,8 @@ class Tie_engraver : public Engraver
   Spanner *tie_column_;
 
 protected:
+  void process_acknowledged ();
   void stop_translation_timestep ();
-  virtual void derived_mark () const;
   void start_translation_timestep ();
   DECLARE_ACKNOWLEDGER (note_head);
   DECLARE_TRANSLATOR_LISTENER (tie);
@@ -87,25 +92,21 @@ public:
   TRANSLATOR_DECLARATIONS (Tie_engraver);
 };
 
-void
-Tie_engraver::derived_mark () const
-{
-  Engraver::derived_mark ();
-  for (vsize i = 0; i < heads_to_tie_.size (); i++)
-    scm_gc_mark (heads_to_tie_[i].tie_definition_);
-}
-
 Tie_engraver::Tie_engraver ()
 {
   event_ = 0;
   tie_column_ = 0;
+  event_processed_ = false;
 }
 
 IMPLEMENT_TRANSLATOR_LISTENER (Tie_engraver, tie);
 void
 Tie_engraver::listen_tie (Stream_event *ev)
 {
-  ASSIGN_EVENT_ONCE (event_, ev);
+  if (!to_boolean (get_property ("skipTypesetting")))
+    {
+      ASSIGN_EVENT_ONCE (event_, ev);
+    }
 }
 
 void Tie_engraver::report_unterminated_tie (Head_event_tuple const &tie_start)
@@ -114,7 +115,10 @@ void Tie_engraver::report_unterminated_tie (Head_event_tuple const &tie_start)
   // moment that created a tie, so this is not necessarily an unterminated
   // tie. Happens e.g. for <c e g>~ g
   if (!tie_start.tie_from_chord_created)
-    tie_start.head_->warning (_ ("unterminated tie"));
+    {
+      tie_start.tie_->warning (_ ("unterminated tie"));
+      tie_start.tie_->suicide ();
+    }
 }
 
 /*
@@ -166,20 +170,21 @@ Tie_engraver::acknowledge_note_head (Grob_info i)
       if (ly_is_equal (right_ev->get_property ("pitch"), left_ev->get_property ("pitch"))
           && (!Tie_engraver::has_autosplit_end (left_ev)))
         {
-          Grob *p = new Spanner (heads_to_tie_[i].tie_definition_);
+          Grob *p = heads_to_tie_[i].tie_;
           Moment end = heads_to_tie_[i].end_moment_;
 
-          SCM cause = heads_to_tie_[i].tie_event_
-                      ? heads_to_tie_[i].tie_event_->self_scm ()
-                      : heads_to_tie_[i].tie_stream_event_->self_scm ();
+          Stream_event *cause = heads_to_tie_[i].tie_event_
+                                    ? heads_to_tie_[i].tie_event_
+                                    : heads_to_tie_[i].tie_stream_event_;
+
+          announce_end_grob (p, cause->self_scm ());
 
-          announce_grob (p, cause);
           Tie::set_head (p, LEFT, th);
           Tie::set_head (p, RIGHT, h);
 
-          if (is_direction (unsmob_stream_event (cause)->get_property ("direction")))
+          if (is_direction (cause->get_property ("direction")))
             {
-              Direction d = to_dir (unsmob_stream_event (cause)->get_property ("direction"));
+              Direction d = to_dir (cause->get_property ("direction"));
               p->set_property ("direction", scm_from_int (d));
             }
 
@@ -229,7 +234,7 @@ Tie_engraver::start_translation_timestep ()
 }
 
 void
-Tie_engraver::stop_translation_timestep ()
+Tie_engraver::process_acknowledged ()
 {
   bool wait = to_boolean (get_property ("tieWaitForNote"));
   if (ties_.size ())
@@ -251,11 +256,6 @@ Tie_engraver::stop_translation_timestep ()
 
   vector<Head_event_tuple> new_heads_to_tie;
 
-  /*
-    Whether tie event has been processed and can be deleted or should
-    be kept for later portions of a split note.
-  */
-  bool event_processed = false;
 
   for (vsize i = 0; i < now_heads_.size (); i++)
     {
@@ -292,17 +292,16 @@ Tie_engraver::stop_translation_timestep ()
       if (left_ev && (tie_event || tie_stream_event)
           && (!Tie_engraver::has_autosplit_end (left_ev)))
         {
-          event_processed = true;
+          event_processed_ = true;
 
           Head_event_tuple event_tup;
 
-          SCM start_definition
-            = updated_grob_properties (context (), ly_symbol2scm ("Tie"));
-
           event_tup.head_ = head;
-          event_tup.tie_definition_ = start_definition;
           event_tup.tie_event_ = tie_event;
           event_tup.tie_stream_event_ = tie_stream_event;
+          event_tup.tie_ = make_spanner ("Tie", tie_event
+                                    ? tie_event->self_scm ()
+                                    : tie_stream_event->self_scm ());
 
           Moment end = now_mom ();
           if (end.grace_part_)
@@ -331,14 +330,20 @@ Tie_engraver::stop_translation_timestep ()
   for (vsize i = 0; i < new_heads_to_tie.size (); i++)
     heads_to_tie_.push_back (new_heads_to_tie[i]);
 
+  now_heads_.clear ();
+}
+
+void
+Tie_engraver::stop_translation_timestep ()
+{
   /*
     Discard event only if it has been processed with at least one
     appropriate note.
   */
-  if (event_processed)
+  if (event_processed_)
     event_ = 0;
 
-  now_heads_.clear ();
+  event_processed_ = false;
 }
 
 void
@@ -371,6 +376,7 @@ ADD_TRANSLATOR (Tie_engraver,
                 "TieColumn ",
 
                 /* read */
+                "skipTypesetting "
                 "tieWaitForNote ",
 
                 /* write */
index f514b390957628461d0fa63940823086d09afdd8..304e4b3b2ad0d06e62ce2ea2598c1334f6d9169d 100644 (file)
@@ -243,8 +243,7 @@ Tie_formatting_problem::set_column_chord_outline (vector<Item *> bounds,
         boxes.push_back (Box (x, y));
     }
 
-  /* todo: the horizon_padding is somewhat arbitrary */
-  chord_outlines_[key] = Skyline (boxes, details_.skyline_padding_, Y_AXIS, -dir);
+  chord_outlines_[key] = Skyline (boxes, Y_AXIS, -dir).padded (details_.skyline_padding_);
   if (bounds[0]->break_status_dir ())
     {
       Interval iv (Axis_group_interface::staff_extent (bounds[0], x_refpoint_, X_AXIS, y_refpoint_, Y_AXIS));
index f00c2563f6fe4f71922577e5f0d4963ad41c2547..89f20278bfbe35290e836e61a851e2af1313c772 100644 (file)
@@ -67,7 +67,7 @@ Time_signature::special_time_signature (Grob *me, SCM scm_style, int n, int d)
     return numbered_time_signature (me, n, d);
 
   if ((style == "default") || (style == ""))
-    style = to_string ("C");
+    style = ::to_string ("C");
 
   if (style == "C")
     {
@@ -77,7 +77,7 @@ Time_signature::special_time_signature (Grob *me, SCM scm_style, int n, int d)
         return numbered_time_signature (me, n, d);
     }
 
-  string char_name = style + to_string (n) + to_string (d);
+  string char_name = style + ::to_string (n) + ::to_string (d);
   me->set_property ("font-encoding", ly_symbol2scm ("fetaMusic"));
   Stencil out = Font_interface::get_default_font (me)
                 ->find_by_name ("timesig." + char_name);
@@ -100,9 +100,9 @@ Time_signature::numbered_time_signature (Grob *me, int num, int den)
                     chain);
 
   SCM sn = Text_interface::interpret_markup (me->layout ()->self_scm (), chain,
-                                             ly_string2scm (to_string (num)));
+                                             ly_string2scm (::to_string (num)));
   SCM sd = Text_interface::interpret_markup (me->layout ()->self_scm (), chain,
-                                             ly_string2scm (to_string (den)));
+                                             ly_string2scm (::to_string (den)));
 
   Stencil n = *unsmob_stencil (sn);
   Stencil d = *unsmob_stencil (sd);
index c6b245ba61b25da7b4a0223bf126d22a069ebdb7..67832e3cc5ae60d9fc44154c5f33bfd2061e41f3 100644 (file)
@@ -22,6 +22,7 @@
 #include "warn.hh"
 #include "translator-group.hh"
 #include "global-context.hh"
+#include "moment.hh"
 
 void
 Timing_translator::stop_translation_timestep ()
@@ -66,16 +67,80 @@ Timing_translator::initialize ()
   context ()->set_property ("currentBarNumber", barnumber);
   context ()->set_property ("internalBarNumber", barnumber);
 
-  context ()->set_property ("timeSignatureFraction",
-                            timing->get_property ("timeSignatureFraction"));
+  SCM timeSignatureFraction = timing->get_property ("timeSignatureFraction");
+
+  if (!scm_is_pair (timeSignatureFraction))
+    {
+      programming_error ("missing timeSignatureFraction");
+      timeSignatureFraction = scm_cons (scm_from_int (4), scm_from_int (4));
+    }
+  context ()->set_property ("timeSignatureFraction", timeSignatureFraction);
+
+  SCM measureLength = timing->get_property ("measureLength");
+
+  if (!unsmob_moment (measureLength))
+    {
+      measureLength =
+        Moment (ly_scm2rational
+                (scm_divide (scm_car (timeSignatureFraction),
+                             scm_cdr (timeSignatureFraction)))).smobbed_copy ();
+    }
+  context ()->set_property ("measureLength", measureLength);
+
   /*
     Do not init measurePosition; this should be done from global
     context.
   */
-  context ()->set_property ("measureLength",
-                            timing->get_property ("measureLength"));
-  context ()->set_property ("baseMoment",
-                            timing->get_property ("baseMoment"));
+
+  SCM timeSignatureSettings = timing->get_property ("timeSignatureSettings");
+  if (!scm_is_pair (timeSignatureSettings))
+    {
+      programming_error ("missing timeSignatureSettings");
+      // A memoized constant is not the prettiest thing as a fallback
+      // since it does not track changes of the variable.  However,
+      // this is still better than nothing, and we already complained
+      // via a programming_error
+      timeSignatureSettings = ly_lily_module_constant ("default-time-signature-settings");
+    }
+  context ()->set_property ("timeSignatureSettings", timeSignatureSettings);
+
+  SCM beamExceptions = timing->get_property ("beamExceptions");
+  if (!scm_is_pair (beamExceptions))
+    {
+      beamExceptions =
+        scm_call_2 (ly_lily_module_constant ("beam-exceptions"),
+                    timeSignatureFraction,
+                    timeSignatureSettings);
+    }
+  context ()->set_property ("beamExceptions", beamExceptions);
+
+  SCM baseMoment = timing->get_property ("baseMoment");
+  if (!unsmob_moment (baseMoment))
+    {
+      baseMoment =
+        Moment (ly_scm2rational
+                (scm_call_2 (ly_lily_module_constant ("base-length"),
+                             timeSignatureFraction,
+                             timeSignatureSettings))).smobbed_copy ();
+    }
+  context ()->set_property ("baseMoment", baseMoment);
+
+  SCM beatStructure = timing->get_property ("beatStructure");
+  if (!scm_is_pair (beatStructure))
+    {
+      beatStructure =
+        scm_call_3 (ly_lily_module_constant ("beat-structure"),
+                    ly_rational2scm (unsmob_moment (baseMoment)->main_part_),
+                    timeSignatureFraction,
+                    timeSignatureSettings);
+    }
+  context ()->set_property ("beatStructure", beatStructure);
+
+  context ()->set_property ("beamHalfMeasure",
+                            timing->get_property ("beamHalfMeasure"));
+
+  context ()->set_property ("autoBeaming",
+                            timing->get_property ("autoBeaming"));
 }
 
 Rational
@@ -121,26 +186,44 @@ Timing_translator::start_translation_timestep ()
   else
     {
       measposp = now;
-      context ()->set_property ("measurePosition",
-                                measposp.smobbed_copy ());
     }
 
-  measposp += dt;
-
   int current_barnumber = robust_scm2int (get_property ("currentBarNumber"), 0);
   int internal_barnumber = robust_scm2int (get_property ("internalBarNumber"), 0);
 
   SCM cad = get_property ("timing");
   bool c = to_boolean (cad);
 
-  Rational len = measure_length ();
-  while (c && measposp.main_part_ >= len)
+  if (c)
     {
-      measposp.main_part_ -= len;
-      current_barnumber++;
-      internal_barnumber++;
+      Rational len = measure_length ();
+
+      measposp += dt;
+
+      while (measposp.main_part_ >= len)
+        {
+          measposp.main_part_ -= len;
+          current_barnumber++;
+          internal_barnumber++;
+        }
     }
 
+
+  // Because "timing" can be switched on and off asynchronously with
+  // graces, measurePosition might get into strange settings of
+  // grace_part_.  It does not actually make sense to have it diverge
+  // from the main timing.  Updating the grace part outside of the
+  // actual check for "timing" looks strange and will lead to changes
+  // of grace_part_ even when timing is off.  However, when timing is
+  // switched back on again, this will generally happen in an override
+  // that does _not_ in itself advance current_moment.  So the whole
+  // timing advance logic will only get triggered while "timing" is
+  // still of.  Maybe we should keep measurePosition.grace_part_
+  // constantly at zero anyway?
+
+  measposp.grace_part_ = now.grace_part_;
+
+
   context ()->set_property ("currentBarNumber", scm_from_int (current_barnumber));
   context ()->set_property ("internalBarNumber", scm_from_int (internal_barnumber));
   context ()->set_property ("measurePosition", measposp.smobbed_copy ());
index 6c74b259be4ab377aec8cd4117d9a757a9c36a2c..dffaa095f6013731855137d50469314901ec2792 100644 (file)
@@ -32,7 +32,7 @@ Engraver_dispatch_list::apply (Grob_info gi)
       if (e.engraver_ == origin)
         continue;
 
-      (*e.function_) (e.engraver_, gi);
+      (e.engraver_->*e.function_) (gi);
     }
 }
 
index be7cfe543cc170ec6674ba7f27a901b12dff0d20..6d7f97bf37c4703df35cda3a58673059e34d1159 100644 (file)
@@ -20,7 +20,7 @@
 #include <cstdio>
 #include "freetype.hh"
 
-#include <freetype/tttables.h>
+#include FT_TRUETYPE_TABLES_H
 
 #include "international.hh"
 #include "memory-stream.hh"
@@ -467,7 +467,7 @@ print_trailer (void *out,
 }
 
 static void
-create_type42_font (void *out, string name, int idx)
+create_type42_font (void *out, const string &name, int idx)
 {
   FT_Face face;
 
index d211dcae38f55b39c91cb9095791816eb07396cc..1eccaabc06ffb663718f2b65fbcf5bfc4f2ce1c9 100644 (file)
@@ -92,8 +92,10 @@ Tuplet_bracket::parallel_beam (Grob *me_grob, vector<Grob *> const &cols,
 {
   Spanner *me = dynamic_cast<Spanner *> (me_grob);
 
-  if (me->get_bound (LEFT)->break_status_dir ()
-      || me->get_bound (RIGHT)->break_status_dir ())
+  Item *left = me->get_bound (LEFT);
+  Item *right = me->get_bound (RIGHT);
+  if (!left || left->break_status_dir ()
+      || !right || right->break_status_dir ())
     return 0;
 
   Drul_array<Grob *> stems (Note_column::get_stem (cols[0]),
index 1b75bf923cd8b9cd33ee4909dae2ed1784465061..1fc30d898a178ef27e464b57fac4b925d1e4836c 100644 (file)
@@ -107,7 +107,7 @@ Tuplet_engraver::listen_tuplet_span (Stream_event *ev)
           tuplets_.pop_back ();
         }
       else if (!to_boolean (get_property ("skipTypesetting")))
-        ev->origin ()->warning (_ ("No tuplet to end"));
+        ev->origin ()->debug_output (_ ("No tuplet to end"));
     }
   else
     ev->origin ()->programming_error ("direction tuplet-span-event_ invalid.");
@@ -155,7 +155,10 @@ Tuplet_engraver::process_music ()
                                      stopped_tuplets_[i].bracket_->get_bound (LEFT));
                 }
               else
-                programming_error ("stopped tuplet bracket has neither left nor right bound");
+                {
+                  warning ("omitting tuplet bracket with neither left nor right bound");
+                  continue;
+                }
             }
           // todo: scrap last_tuplets_, use stopped_tuplets_ only.
           // clear stopped_tuplets_ at start_translation_timestep
@@ -217,7 +220,8 @@ Tuplet_engraver::acknowledge_script (Grob_info inf)
     if (tuplets_[j].bracket_)
       {
         Item *i = dynamic_cast<Item *> (inf.grob ());
-        Tuplet_bracket::add_script (tuplets_[j].bracket_, i);
+        if (!i->internal_has_interface (ly_symbol2scm ("dynamic-interface")))
+          Tuplet_bracket::add_script (tuplets_[j].bracket_, i);
       }
 }
 
index 872ccae48d662215f64c844b5f4b9cadc920062c..bf9a223684840885a32edf9d1efbcfa5354676b0 100644 (file)
@@ -126,12 +126,17 @@ Tuplet_iterator::process (Moment m)
 void
 Tuplet_iterator::construct_children ()
 {
-  spanner_duration_ = music_get_length ();
+  if (Duration *d = unsmob_duration (get_music ()->get_property ("duration")))
+    spanner_duration_ = d->get_length ();
+  else
+    {
+      spanner_duration_ = music_get_length ();
 
-  Moment *mp
-    = unsmob_moment (get_outlet ()->get_property ("tupletSpannerDuration"));
-  if (mp)
-    spanner_duration_ = min (mp->main_part_, spanner_duration_);
+      Moment *mp
+        = unsmob_moment (get_outlet ()->get_property ("tupletSpannerDuration"));
+      if (mp)
+        spanner_duration_ = min (mp->main_part_, spanner_duration_);
+    }
 
   Music_wrapper_iterator::construct_children ();
 
index d6fb7855224349f018e762cc23aea1c13ed6cc14..a5d7ff68ddf9c607489df49916c4faa8256822a4 100644 (file)
@@ -46,15 +46,34 @@ Tweak_engraver::acknowledge_grob (Grob_info info)
     ev = info.ultimate_event_cause ();
   if (ev)
     {
+      // Each tweak conses an address and a value.
+      // The address has one of the following forms:
+      // symbol -> direct tweak
+      // (grob . symbol) -> targeted tweak
+      // (#t . symbol-path) -> direct nested tweak
+      // (grob . symbol-path) -> targeted nested tweak
       for (SCM s = ev->get_property ("tweaks");
            scm_is_pair (s); s = scm_cdr (s))
         {
           if (scm_is_pair (scm_caar (s)))
             {
-              if (SCM_UNBNDP (grobname))
-                grobname = scm_from_locale_symbol (info.grob ()->name ().c_str ());
-              if (scm_is_eq (scm_caaar (s), grobname))
-                info.grob ()->set_property (scm_cdaar (s), scm_cdar (s));
+              if (scm_is_symbol (scm_caaar (s)))
+                {
+                  if (SCM_UNBNDP (grobname))
+                    grobname = scm_from_locale_symbol
+                      (info.grob ()->name ().c_str ());
+                  if (scm_is_eq (scm_caaar (s), grobname))
+                    {
+                      if (scm_is_symbol (scm_cdaar (s)))
+                        info.grob ()->set_property (scm_cdaar (s), scm_cdar (s));
+                      else
+                        set_nested_property (info.grob (), scm_cdaar (s),
+                                             scm_cdar (s));
+                    }
+                }
+              else if (direct)
+                set_nested_property (info.grob (), scm_cdaar (s),
+                                     scm_cdar (s));
             }
           else if (direct)
             info.grob ()->set_property (scm_caar (s), scm_cdar (s));
index 2caba1216efc9dae103655f11c5fe5315b3039e2..9b2f871769356ea1de2f47900d8a5a6fb5ffb037 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2011--2012 Mike Solomon <mike@apollinemike.com>
+  Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
 
 
   LilyPond is free software: you can redistribute it and/or modify
@@ -22,6 +22,9 @@
 #include "grob.hh"
 
 static scm_t_bits unpure_pure_container_tag;
+static scm_t_bits unpure_pure_call_tag;
+// Used for rerouting a function of (grob start end) to one of
+// (grob)
 
 bool
 is_unpure_pure_container (SCM s)
@@ -33,14 +36,21 @@ SCM
 unpure_pure_container_unpure_part (SCM smob)
 {
   LY_ASSERT_TYPE (is_unpure_pure_container, smob, 1);
-  return (SCM) SCM_CELL_WORD_1 (smob);
+  return SCM_SMOB_OBJECT (smob);
 }
 
 SCM
 unpure_pure_container_pure_part (SCM smob)
 {
   LY_ASSERT_TYPE (is_unpure_pure_container, smob, 1);
-  return (SCM) SCM_CELL_WORD_2 (smob);
+  SCM res = SCM_SMOB_OBJECT_2 (smob);
+
+  if (!SCM_UNBNDP (res))
+    return res;
+
+  SCM_NEWSMOB (res, unpure_pure_call_tag,
+               SCM_UNPACK (unpure_pure_container_unpure_part (smob)));
+  return res;
 }
 
 LY_DEFINE (ly_unpure_pure_container_p, "ly:unpure-pure-container?",
@@ -54,11 +64,13 @@ LY_DEFINE (ly_make_unpure_pure_container, "ly:make-unpure-pure-container",
            1, 1, 0, (SCM unpure, SCM pure),
            "Make an unpure-pure container.  @var{unpure} should be an unpure"
            " expression, and @var{pure} should be a pure expression.  If @var{pure}"
-           " is ommitted, the value of @var{unpure} will be used twice.")
+           " is omitted, the value of @var{unpure} will be used twice,"
+           " except that a callback is given two extra arguments"
+           " that are ignored for the sake of pure calculations.")
 {
   SCM z;
 
-  if (pure == SCM_UNDEFINED)
+  if (SCM_UNBNDP (pure) && !ly_is_procedure (unpure))
     pure = unpure;
 
   SCM_NEWSMOB2 (z, unpure_pure_container_tag, SCM_UNPACK (unpure), SCM_UNPACK (pure));
@@ -86,25 +98,46 @@ print_unpure_pure_container (SCM s, SCM port, scm_print_state *)
 {
   scm_puts ("#<unpure-pure-container ", port);
   scm_display (unpure_pure_container_unpure_part (s), port);
-  scm_puts (" ", port);
-  scm_display (unpure_pure_container_pure_part (s), port);
+  if (!SCM_UNBNDP (SCM_SMOB_OBJECT_2 (s)))
+    {
+      scm_puts (" ", port);
+      scm_display (unpure_pure_container_pure_part (s), port);
+    }
   scm_puts (" >", port);
   return 1;
 }
 
 SCM
-pure_mark (SCM pure)
+pure_mark (SCM smob)
 {
-  scm_gc_mark (unpure_pure_container_unpure_part (pure));
-  scm_gc_mark (unpure_pure_container_pure_part (pure));
-  return pure;
+  scm_gc_mark (SCM_SMOB_OBJECT (smob));
+  return SCM_SMOB_OBJECT_2 (smob);
+}
+
+// Function signature has two fixed arguments so that dropping two
+// will always work: if we have fewer to start with, it will trigger
+// wrong-number-of-args in a sensible location rather than making
+// drop-right barf.
+
+SCM
+apply_unpure_pure (SCM clo, SCM arg1, SCM arg2, SCM rest)
+{  
+  return scm_apply_0 (SCM_SMOB_OBJECT (clo),
+                      scm_call_2 (ly_lily_module_constant ("drop-right"),
+                                  scm_cons2 (arg1, arg2, rest),
+                                  scm_from_int (2)));
 }
+  
 
 void init_unpure_pure_container ()
 {
   unpure_pure_container_tag = scm_make_smob_type ("unpure-pure-container", 0);
   scm_set_smob_mark (unpure_pure_container_tag, pure_mark);
   scm_set_smob_print (unpure_pure_container_tag, print_unpure_pure_container);
+  unpure_pure_call_tag = scm_make_smob_type ("unpure-pure-call", 0);
+  scm_set_smob_mark (unpure_pure_call_tag, scm_markcdr);
+  scm_set_smob_apply (unpure_pure_call_tag,
+                      (scm_t_subr) apply_unpure_pure, 2, 0, 1);
 };
 
 ADD_SCM_INIT_FUNC (unpure_pure_container, init_unpure_pure_container);
index 2e3148cc2884ecfde792223b7bbed4cc567fe01f..9b1485777c962ecbfa0f89a731e036211afb3218 100644 (file)
@@ -67,7 +67,7 @@ private:
                                int context_info, int delta_pitch);
   bool is_stacked_head (int prefix_set,
                         int context_info);
-  Real align_heads (vector<Grob_info> primitives,
+  Real align_heads (vector<Grob_info> const &primitives,
                     Real flexa_width,
                     Real thickness);
   void check_for_prefix_loss (Item *primitive);
@@ -81,7 +81,7 @@ public:
 protected:
   virtual Spanner *create_ligature_spanner ();
   virtual void transform_heads (Spanner *ligature,
-                                vector<Grob_info> primitives);
+                                vector<Grob_info> const &primitives);
   DECLARE_TRANSLATOR_LISTENER (pes_or_flexa);
   DECLARE_TRANSLATOR_LISTENER (ligature);
 };
@@ -166,7 +166,7 @@ Vaticana_ligature_engraver::need_extra_horizontal_space (int prev_prefix_set, in
 {
   if (prev_prefix_set & VIRGA)
     /*
-     * After a virga, make a an additional small space such that the
+     * After a virga, make an additional small space such that the
      * appendix on the right side of the head does not touch the
      * following head.
      */
@@ -181,7 +181,7 @@ Vaticana_ligature_engraver::need_extra_horizontal_space (int prev_prefix_set, in
 
   if ((context_info & FLEXA_LEFT) && ! (context_info & PES_UPPER))
     /*
-     * Before a flexa (but not within a torculus), make a an
+     * Before a flexa (but not within a torculus), make an
      * additional small space such that the appendix on the left side
      * of the flexa does not touch the this head.
      */
@@ -199,7 +199,7 @@ Vaticana_ligature_engraver::need_extra_horizontal_space (int prev_prefix_set, in
 }
 
 Real
-Vaticana_ligature_engraver::align_heads (vector<Grob_info> primitives,
+Vaticana_ligature_engraver::align_heads (vector<Grob_info> const &primitives,
                                          Real flexa_width,
                                          Real thickness)
 {
@@ -473,7 +473,7 @@ Vaticana_ligature_engraver::check_for_ambiguous_dot_pitch (Grob_info primitive)
 
 void
 Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
-                                             vector<Grob_info> primitives)
+                                             vector<Grob_info> const &primitives)
 {
   Real flexa_width = robust_scm2double (ligature->get_property ("flexa-width"), 2);
 
index 97f14fdce03b0e6f88aecac0be7ccc4491e0938f..65cf6e7f772d7af5086ccbe6bfab11a94664a1d7 100644 (file)
@@ -22,6 +22,7 @@
 #include "align-interface.hh"
 #include "axis-group-interface.hh"
 #include "engraver.hh"
+#include "international.hh"
 #include "spanner.hh"
 #include "pointer-group-interface.hh"
 #include "grob-array.hh"
@@ -58,7 +59,8 @@ ADD_TRANSLATOR (Vertical_align_engraver,
 
                 /* read */
                 "alignAboveContext "
-                "alignBelowContext ",
+                "alignBelowContext "
+                "hasAxisGroup ",
 
                 /* write */
                 ""
@@ -86,8 +88,15 @@ Vertical_align_engraver::initialize ()
 void
 Vertical_align_engraver::process_music ()
 {
-  if (!valign_)
+  if (!valign_ && !scm_is_null (id_to_group_hashtab_))
     {
+      if (to_boolean (get_property ("hasAxisGroup")))
+        {
+          warning (_ ("Ignoring Vertical_align_engraver in VerticalAxisGroup"));
+          id_to_group_hashtab_ = SCM_EOL;
+          return;
+        }
+      
       top_level_ = to_boolean (get_property ("topLevelAlignment"));
 
       valign_ = make_spanner (top_level_ ? "VerticalAlignment" : "StaffGrouper", SCM_EOL);
@@ -120,6 +129,9 @@ Vertical_align_engraver::qualifies (Grob_info i) const
 void
 Vertical_align_engraver::acknowledge_axis_group (Grob_info i)
 {
+  if (scm_is_null (id_to_group_hashtab_))
+    return;
+
   if (top_level_ && qualifies (i))
     {
       string id = i.context ()->id_string ();
index 317b47ee8d54e9e91f1cd31135c96aa1d0ca9816..7b0fd1341179b4cddc88e5293933debdcb4eb6b6 100644 (file)
@@ -52,7 +52,6 @@ Volta_bracket_interface::print (SCM smob)
                                             == (Spanner *)me);
 
   Output_def *layout = me->layout ();
-  Real half_space = 0.5;
 
   Item *bound = dynamic_cast<Spanner *> (me)->get_bound (LEFT);
 
@@ -92,7 +91,7 @@ Volta_bracket_interface::print (SCM smob)
 
   Interval empty;
   Offset start;
-  start[X_AXIS] = me->spanner_length () - left - half_space;
+  start[X_AXIS] = me->spanner_length () - left;
 
   /*
     ugh, Tuplet_bracket should use Horizontal_bracket, not the other way around.
@@ -138,14 +137,8 @@ Volta_bracket_interface::modify_edge_height (Spanner *me)
   else
     str = "|";
 
-  no_vertical_end
-  |= (str != ":|"
-      && str != "|:"
-      && str != "|."
-      && str != ":|:"
-      && str != ":|.|:"
-      && str != ":|.:"
-      && str != ".|");
+  no_vertical_end |= ly_scm2bool (scm_call_1 (ly_lily_module_constant ("volta-bracket::calc-hook-visibility"),
+                                             ly_string2scm (str)));
 
   if (no_vertical_end || no_vertical_start)
     {
@@ -179,5 +172,6 @@ ADD_INTERFACE (Volta_bracket_interface,
                "bars "
                "thickness "
                "height "
+               "shorten-pair "
               );
 
index 2e386e6fd18bba885a63cd6e3c1426fe29db2e29..8dbc7b85e6ecf600a6a745d9258caf73d677730b 100644 (file)
@@ -94,7 +94,7 @@ Volta_repeat_iterator::next_element (bool side_effect)
     {
       if (alt_count_)
         {
-          string repstr = to_string (rep_count_ - alt_count_ + done_count_) + ".";
+          string repstr = ::to_string (rep_count_ - alt_count_ + done_count_) + ".";
           if (done_count_ > 1)
             {
               add_repeat_command (scm_list_n (ly_symbol2scm ("volta"), SCM_BOOL_F, SCM_UNDEFINED));
@@ -104,7 +104,7 @@ Volta_repeat_iterator::next_element (bool side_effect)
             }
 
           if (done_count_ == 1 && alt_count_ < rep_count_)
-            repstr = "1.--" + to_string (rep_count_ - alt_count_ + done_count_) + ".";
+            repstr = "1.--" + ::to_string (rep_count_ - alt_count_ + done_count_) + ".";
 
           if (done_count_ <= alt_count_)
             add_repeat_command (scm_list_n (ly_symbol2scm ("volta"),
index 0f631885628b0b2db001efefdbf5460ec8f3e0f0..645b47ae68b234a781ce8830c87cdae9a9091662 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 \language "italiano"
 
 %%%%%%%
@@ -21,7 +21,7 @@
 %
 
 dwn = {
-  \once \override Voice.Accidental #'stencil = #(lambda (grob)
+  \once \override Voice.Accidental.stencil = #(lambda (grob)
   (ly:stencil-combine-at-edge
     (ly:accidental-interface::print grob) Y UP
     (grob-interpret-markup grob (markup #:line
index 4f748f35b9b89da20c00ee4c64753aa87839fca1..6992c87ebdc94b8a7a09860153d7494655b8354a 100644 (file)
@@ -31,7 +31,7 @@
 %
 %%%USAGE
 % In the \score section do:
-%  \unfoldRepeats \articulate <<
+% \articulate <<
 %      all the rest of the score
 % >>
 % or use the lilywrap script.
 %  * Add Mordents (reported by Patrick Karl)
 %
 
-\version "2.16.0"
+\version "2.17.11"
 
+#(use-modules (srfi srfi-1))
+#(use-modules (srfi srfi-11))
 #(use-modules (ice-9 debug))
 #(use-modules (scm display-lily))
 
 
 % How much to slow down for a rall. or a poco rall.
 % (or speed up for accel or poco accel)
-#(define ac:rallFactor (ly:make-moment 60 100)) % 40% slowdown
-#(define ac:pocoRallFactor (ly:make-moment 90 100)) % 10% slowdown
+#(define ac:rallFactor (ly:make-moment 60/100)) % 40% slowdown
+#(define ac:pocoRallFactor (ly:make-moment 90/100)) % 10% slowdown
 
 % The absolute time for a twiddle in a trill, in minutes.
 % Start with 1/4 seconds == 1/240 minutes
-#(define ac:maxTwiddleTime (ly:make-moment 1 240))
+#(define ac:maxTwiddleTime (ly:make-moment 1/240))
+
+% How long ordinary grace notes should be relative to their notated
+% duration.  9/40 is LilyPond's built-in behaviour for MIDI output
+% (though the notation reference says 1/4).
+#(define ac:defaultGraceFactor 9/40)
+
+% What proportion of an ordinary grace note's time should be stolen
+% from preceding notes (as opposed to stealing from the principal note).
+% Composers' intentions for this vary.  Taking all from the preceding
+% notes is LilyPond's built-in behaviour for MIDI output.
+#(define ac:defaultGraceBackwardness 1)
 
 
 % Internal variables, don't touch.
                 (cons 6 0))))
 
 
-#(define ac:currentTempo (ly:make-moment 15 1)) % 4 = 60, measured wholes per minute
+#(define ac:currentTempo (ly:make-moment 15/1)) % 4 = 60, measured wholes per minute
 #(define ac:lastTempo ac:currentTempo) % for 'a tempo' or 'tempo I'
 
 % The duration of the current note.  Start at a crotchet
 % for no good reason.
-#(define ac:currentDuration (ly:make-duration 2 0 1 1))
+#(define ac:currentDuration (ly:make-duration 2 0 1/1))
+
+% Amount of musical time (in whole notes) that we need to steal from the
+% next events seen.
+#(define ac:stealForward 0)
+
+% List of events in the output so far, in reverse order, from which we can
+% steal time.
+#(define ac:eventsBackward '())
+
+% Log events for the backward chain.
+#(define (ac:logEventsBackward music)
+  (music-map
+   (lambda (m)
+    (case (ly:music-property m 'name)
+     ((EventChord)
+      (set! ac:eventsBackward (cons m ac:eventsBackward))
+      m)
+     ((BarCheck SkipMusic)
+      (let ((wm (make-sequential-music (list m))))
+       (set! ac:eventsBackward (cons wm ac:eventsBackward))
+       wm))
+     (else
+      m)))
+   music))
+
+% Steal time from the backward chain.  Adds to ac:stealForward (with a
+% warning) if it couldn't backward-steal all that was desired.
+#(define (ac:stealTimeBackward tosteal)
+  (if (<= tosteal 0)
+   #t
+   (if (null? ac:eventsBackward)
+    (begin
+     (ly:warning (_ "articulation failed to steal ~a note backward at beginning of music; stealing forward instead") tosteal)
+     (set! ac:stealForward (+ ac:stealForward tosteal)))
+    (let*
+     ((lastev (car ac:eventsBackward))
+      (levlen (ly:moment-main (ly:music-length lastev))))
+     (if (< tosteal levlen)
+      (begin
+       (ly:music-compress lastev (ly:make-moment (/ (- levlen tosteal) levlen)))
+       #t)
+      (begin
+       (if (any (lambda (z) (eq? 'NoteEvent (ly:music-property z 'name)))
+               (ly:music-property lastev 'elements))
+       (ly:warning (_ "stealing the entirety of a note's time")))
+       (set! (ly:music-property lastev 'elements) '())
+       (set! ac:eventsBackward (cdr ac:eventsBackward))
+       (ac:stealTimeBackward (- tosteal levlen))))))))
 
 % Debugging: display a moment plus some text.
 % Returns its moment argument so can be used in-line.
     pre-t
     (let loop ((len (ly:music-length music)))
      (if (ly:moment<? t len)
-      (loop (ly:moment-mul len (ly:make-moment 1 2)))
+      (loop (ly:moment-mul len (ly:make-moment 1/2)))
       len)))))
 
 
 #(define (ac:trill music)
   " Replace music with time-compressed repeats of the music,
     maybe accelerating if the length is longer than a crotchet "
-  (let* ((hemisemidur (ly:make-duration 5 0 1 1))
+  (let* ((hemisemidur (ly:make-duration 5 0 1/1))
         (orig-len  (ly:music-length music))
         (t (ac:twiddletime music))
         (uppernote '())
-        (note_moment (ly:moment-mul t (ly:make-moment 1 2)))
+        (note_moment (ly:moment-mul t (ly:make-moment 1/2)))
         (c1 (ly:moment-div orig-len note_moment))
         (c2 (inexact->exact
              (round (/ (ly:moment-main-numerator c1)
          'metronome-count
          tempo
          'tempo-unit
-         (ly:make-duration 0 0 1 1))
+         (ly:make-duration 0 0 1/1))
     (context-spec-music
     (make-property-set 'tempoWholesPerMinute  tempo) 'Score))))
 
+%
+% Totally unfold repeats, so that the non-obvious sequencing doesn't
+% confuse us.  This is necessary for time stealing to work, because
+% that relies on the sequence in which we see events matching their
+% audible sequence.  Also unfold multi-measure rests to equivalent
+% skips, with preceding and following bar checks, so that time stealing
+% can change the length of the pause without falling foul of the
+% implicit bar checks.
+%
+#(define (ac:unfoldMusic music)
+  (music-map
+   (lambda (m)
+    (case (ly:music-property m 'name)
+     ((UnfoldedRepeatedMusic)
+      (let
+       ((body (ly:music-property m 'element))
+       (altl (ly:music-property m 'elements))
+       (rc (ly:music-property m 'repeat-count)))
+       (if (null? altl)
+       (make-sequential-music
+        (list-tabulate rc (lambda (i) (ly:music-deep-copy body))))
+       (let ((ealtl (if (> (length altl) rc) (take altl rc) altl)))
+        (make-sequential-music
+         (apply append!
+          (append!
+           (list-tabulate
+            (- rc (length ealtl))
+            (lambda (i) (list (ly:music-deep-copy body) (ly:music-deep-copy (car ealtl)))))
+           (map (lambda (alt) (list (ly:music-deep-copy body) alt)) ealtl))))))))
+     ((EventChord)
+      (let-values
+       (((trem evl)
+        (partition (lambda (v) (eq? (ly:music-property v 'name) 'TremoloEvent))
+         (ly:music-property m 'elements))))
+       (if (null? trem)
+       m
+       (let*
+        ((tremtype (ly:music-property (car trem) 'tremolo-type))
+         (tremtype-log (1- (integer-length tremtype)))
+         (durev (find (lambda (v) (not (null? (ly:music-property v 'duration)))) evl))
+         (totaldur (if durev (ly:music-property durev 'duration) (ly:make-duration tremtype-log 0 1)))
+         (tgt-nrep (/ (duration-visual-length totaldur) (duration-log-factor tremtype-log)))
+         (eff-nrep (max (truncate tgt-nrep) 1))
+         (tremdur (ly:make-duration tremtype-log 0
+                   (* (/ tgt-nrep eff-nrep) (ly:duration-scale totaldur)))))
+        (or (and (= eff-nrep tgt-nrep) (= (ash 1 tremtype-log) tremtype))
+         (ly:warning (_ "non-integer tremolo ~a:~a")
+          (duration->lily-string (duration-visual totaldur) #:force-duration #t #:time-scale 1)
+          tremtype))
+        (for-each
+         (lambda (v)
+          (or (null? (ly:music-property v 'duration))
+           (set! (ly:music-property v 'duration) tremdur)))
+         evl)
+        (set! (ly:music-property m 'elements) evl)
+        (make-sequential-music
+         (list-tabulate eff-nrep (lambda (i) (ly:music-deep-copy m))))))))
+     ((MultiMeasureRestMusic)
+      (make-sequential-music
+       (list
+       (make-music 'BarCheck)
+       (make-music 'SkipMusic 'duration (ly:music-property m 'duration))
+       (make-music 'BarCheck))))
+     (else
+      m)))
+   (unfold-repeats music)))
+
 % If there's an articulation, use it.
 % If in a slur, use (1 . 1) instead.
 % Treat phrasing slurs as slurs, but allow explicit articulation.
    (if (null? es)
     (begin
      (set! (ly:music-property music 'elements) (reverse newelements))
-     (cond
-      (ac:inTrill (cons 'trill actions))
-      ((and (eq? factor ac:normalFactor) (or ac:inSlur ac:inPhrasingSlur))
-       (append actions (list 'articulation  '(1 . 1)) ))
-      (else (append actions (list 'articulation  factor)))))
+     (if
+      (not (any (lambda (m) (music-is-of-type? m 'rhythmic-event))
+               newelements))
+      actions
+      (append
+       (let ((st ac:stealForward))
+       (if (= st 0)
+        '()
+        (begin
+         (set! ac:stealForward 0)
+         (list 'steal st))))
+       actions
+       (cond
+       (ac:inTrill '(trill))
+       ((and (eq? factor ac:normalFactor) (or ac:inSlur ac:inPhrasingSlur))
+        (list 'articulation  '(1 . 1)))
+       (else (list 'articulation  factor))))))
     ; else part
     (let ((e (car es))
          (tail (cdr es)))
 
 
 #(define (ac:articulate-chord music)
-  (begin
-   (cond
-
-    ((eq? 'EventChord (ly:music-property music 'name))
+  (cond
+   ((eq? 'EventChord (ly:music-property music 'name))
+    (ac:logEventsBackward
      (let loop ((actions (ac:getactions music)))
       (if (null? actions)
-       (if (ly:moment> (ly:music-length music) (make-moment 1 4))
+       (if (ly:moment<? (ly:make-moment 1/4) (ly:music-length music))
         (ac:to128  music)
         music)
 
        ; We implement as a half-shake.
        (let*
         ((totallength (ly:music-length music))
-         (newlen (ly:moment-sub totallength (ly:make-moment 3 32)))
+         (newlen (ly:moment-sub totallength (ly:make-moment 3/32)))
          (newdur (ly:make-duration
                   0 0
                   (ly:moment-main-numerator newlen)
                   (ly:moment-main-denominator newlen)))
-         (gracedur (ly:make-duration 5 0 1 1))
+         (gracedur (ly:make-duration 5 0 1/1))
          (gracenote (ly:music-deep-copy music))
          (abovenote (ly:music-deep-copy music))
          (mainnote (ly:music-deep-copy music))
         ((totaldur (ly:music-property
                (car (ly:music-property music 'elements)) 'duration))
          (dur (ly:duration-length totaldur))
-         (newlen (ly:moment-sub dur (ly:make-moment 2 32)))
+         (newlen (ly:moment-sub dur (ly:make-moment 2/32)))
          (newdur (ly:make-duration
                0 0
                   (ly:moment-main-numerator newlen)
          (music-map (lambda (n)
           (if (eq? 'NoteEvent (ly:music-property n 'name))
            (set! (ly:music-property n 'duration)
-            (ly:make-duration 5 0 1 1)))
+            (ly:make-duration 5 0 1/1)))
                      n)
           mordent)
          (music-map (lambda (n)
              (lambda (z) (eq? 'NoteEvent (ly:music-property z 'name)))
              (ly:music-property above 'elements)))
            newmusic)))))
-     ))))
+       ((steal)
+       (let
+        ((totallen (ly:moment-main (ly:music-length music)))
+         (steallen (cadr actions)))
+        (if (>= steallen totallen)
+         (begin
+          (if (any (lambda (z) (eq? 'NoteEvent (ly:music-property z 'name)))
+                   (ly:music-property music 'elements))
+           (ly:warning (_ "stealing the entirety of a note's time")))
+          (set! ac:stealForward (- steallen totallen))
+          (make-sequential-music '()))
+         (begin
+          (ly:music-compress music (ly:make-moment (/ (- totallen steallen) totallen)))
+          (loop (cddr actions))))))
+     )))))
+
+   ((eq? 'GraceMusic (ly:music-property music 'name))
+    (let
+     ((first-ev
+       (call-with-current-continuation
+       (lambda (yield-fev)
+        (music-map
+         (lambda (m)
+          (if (eq? 'EventChord (ly:music-property m 'name))
+           (yield-fev m)
+           m))
+         music)
+        #f))))
+     (if first-ev
+      (let ((fev-pos (find-tail (lambda (m) (eq? m first-ev)) ac:eventsBackward)))
+       (if fev-pos
+       (set! ac:eventsBackward (cdr fev-pos))
+       (ly:warning (_ "articulation of grace notes has gone awry"))))))
+    (let*
+     ((gmus (ly:music-compress (ly:music-property music 'element)
+                              (ly:make-moment ac:defaultGraceFactor)))
+      (glen (ly:moment-main (ly:music-length gmus))))
+     (ac:stealTimeBackward (* glen ac:defaultGraceBackwardness))
+     (set! ac:stealForward (+ ac:stealForward (* glen (- 1 ac:defaultGraceBackwardness))))
+     gmus))
+
+   ((memq (ly:music-property music 'name) '(BarCheck SkipMusic))
+    (let ((totallen (ly:moment-main (ly:music-length music)))
+         (steallen ac:stealForward))
+     (cond
+      ((= steallen 0)
+       (ac:logEventsBackward music))
+      ((< steallen totallen)
+       (set! ac:stealForward 0)
+       (ac:logEventsBackward
+       (ly:music-compress music (ly:make-moment (/ (- totallen steallen) totallen)))))
+      (else
+       (set! ac:stealForward (- steallen totallen))
+       (make-sequential-music '())))))
 
-    ((eq? 'KeyChangeEvent (ly:music-property music 'name))
-     (set! ac:current-key music)
-     music
-   )
+   ((eq? 'KeyChangeEvent (ly:music-property music 'name))
+    (set! ac:current-key music)
+    music)
 
-    ((eq? 'PropertySet (ly:music-property music 'name))
-     (ac:adjust-props (ly:music-property music 'symbol) music)
-     music)
+   ((eq? 'PropertySet (ly:music-property music 'name))
+    (ac:adjust-props (ly:music-property music 'symbol) music)
+    music)
 
-    (else music))
- ))
+   (else music)))
 
 
 
@@ -660,9 +850,20 @@ articulate = #(define-music-function (parser location music)
               "Adjust times of note to add tenuto, staccato and
                 normal articulations.
                "
-              (set! music (event-chord-wrap! music parser))
-              (music-map ac:articulate-chord music)
-              )
+              (dynamic-wind
+               (lambda ()
+                (set! ac:stealForward 0)
+                (set! ac:eventsBackward '()))
+               (lambda ()
+                (music-map
+                 ac:articulate-chord
+                 (ac:unfoldMusic (event-chord-wrap! music parser))))
+               (lambda ()
+                (or (= ac:stealForward 0)
+                 (begin
+                  (ly:warning (_ "articulation failed to steal ~a note at end of music") ac:stealForward)
+                  (set! ac:stealForward 0)))
+                (set! ac:eventsBackward '()))))
 
 
 % Override \afterGrace to be in terms of audio, not spacing.
@@ -705,10 +906,10 @@ appoggiatura =
         (main-orig-len (ly:music-length main))
         (numerator (ly:moment-main-numerator maindur))
         (factor (if (eq? (remainder numerator 3) 0)
-                 (ly:make-moment 1 3) (ly:make-moment 1 2))))
+                 (ly:make-moment 1/3) (ly:make-moment 1/2))))
    (ly:music-compress grace
     (ly:moment-mul factor (ly:moment-div main-orig-len grace-orig-len)))
-   (ly:music-compress main (ly:moment-sub (ly:make-moment 1 1) factor))
+   (ly:music-compress main (ly:moment-sub (ly:make-moment 1/1) factor))
 
     (set! (ly:music-property grace 'elements)
      (append (ly:music-property grace 'elements)
index 85b216ab40693d66b0fd3c6817c728222dfaea30..9252f723b5b9e4b5cab1afa4ee00aed21aa39013 100644 (file)
@@ -9,7 +9,7 @@
   $Id: bagpipe.ly,v 1.12 2006/03/16 14:39:46 hanwen Exp $
 %}
 
-\version "2.16.0"
+\version "2.17.30"
 
 % Notes of the scale of the Great Highland Bagpipe. Extra high notes for bombarde.
 % Flat notes used mainly in some modern music.
@@ -38,17 +38,17 @@ pitchnames = \pitchnamesBagpipe
 
 hideKeySignature = {
   % We normally don't want to show the key signature.
-  \override Staff.KeySignature  #'stencil = ##f
+  \omit Staff.KeySignature
   \set Staff.extraNatural = ##f
   \key d \major
-  \accidentalStyle "forget"
+  \accidentalStyle forget
 }
 showKeySignature = {
   % Show the key signature e.g. for BMW compatibility.
-  \override Staff.KeySignature  #'stencil = #ly:key-signature-interface::print
+  \override Staff.KeySignature.stencil = #ly:key-signature-interface::print
   \set Staff.extraNatural = ##f
   \key d \major
-  \accidentalStyle "forget"
+  \accidentalStyle forget
 }
 
 % Layout tweaks.
@@ -57,10 +57,10 @@ showKeySignature = {
   \context {
     \Voice
     % All stems go down.
-    \override Stem #'direction = #DOWN
+    \override Stem.direction = #DOWN
     % All slurs and ties are on top.
-    \override Slur #'direction = #UP
-    \override Tie #'direction = #UP
+    \override Slur.direction = #UP
+    \override Tie.direction = #UP
   }
 }
 
@@ -89,13 +89,13 @@ marchTime = {
 
 % Add appropriate tweaks needed for piping grace notes to look great.
 stemspace = #(define-music-function (parser location extent) (pair?) #{
-  \once \override Staff.Stem #'X-extent = #extent
+  \once \override Staff.Stem.X-extent = #extent
 #})
 pgrace = #(define-music-function (parser location notes) (ly:music?) #{
-  \override Score.GraceSpacing #'spacing-increment = #0
-  \override Score.Stem #'beamlet-max-length-proportion = #'(0.5 . 0.5)
+  \override Score.GraceSpacing.spacing-increment = #0
+  \override Score.Stem.beamlet-max-length-proportion = #'(0.5 . 0.5)
   \small \grace $notes \normalsize
-  \revert Score.Stem #'beamlet-default-length
+  \revert Score.Stem.beamlet-default-length
 #})
 
 % Single grace notes
index aad9ac2f3e6758e427aac2560bb85e5c221c87e8..8cef71025069ab217cddc3d5a4b2786a81880bc7 100644 (file)
@@ -36,6 +36,6 @@ optional list of @var{event-types} such as @code{#'(articulation-event)}."
 tabChordRepetition =
 #(define-void-function (parser location) ()
    (_i "Include the string and fingering information in a chord repetition.
-This function is deprecated; try using @code{\tabChordRepeats} instead.")
+This function is deprecated; try using @code{\\tabChordRepeats} instead.")
    (ly:parser-define! parser '$chord-repeat-events
                      '(string-number-event fingering-event)))
index 1b8201879e7148329846618b665eac3f745cf0c7..b57fd713372f74149187fceb37a7f8077ab9180a 100644 (file)
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.16.0"
+\version "2.17.6"
 
 RemoveEmptyStaves = \with {
-  \remove "Axis_group_engraver"
-  % If RemoveEmptyStaves is called twice, two
-  % Hara_kiri_engravers would be added, which leads to a
-  % warning.
-  % This code makes sure that no previous Hara_kiri_engraver
-  % is left before adding a new one.
-  \remove "Hara_kiri_engraver"
-  \consists "Hara_kiri_engraver"
-  \override VerticalAxisGroup #'remove-empty = ##t
+  \override VerticalAxisGroup.remove-empty = ##t
   \description "Remove staves which are considered to be empty according
 to the list of interfaces set by @code{keepAliveInterfaces}."
 }
index f417f10d945fbbc42f7b9ca4f6b0d7d3a8a9e1b8..f3f5eef6689e383abf610af6aad1af062c055afc 100644 (file)
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.16.0"
-
-%% < 1.8 compatibility switch
-#(ly:set-option 'old-relative)
+\version "2.17.25"
 
 %% named durations
 breve = #(ly:make-duration -1 0)
@@ -41,6 +38,10 @@ maxima = #(ly:make-duration -3 0)
 
 #(define default-fret-table (make-hash-table 101))
 #(define chord-shape-table (make-hash-table 29))
+#(call-after-session
+  (lambda ()
+   (hash-clear! default-fret-table)
+   (hash-clear! chord-shape-table)))
 
 % declarations for standard directions
 left = #-1
@@ -54,10 +55,10 @@ bigger = #1
 center = #0
 
 %% FIXME
-%% should also set \override Beam #'breakable, but how to do it "portably"? (ie. also
+%% should also set \override Beam.breakable, but how to do it "portably"? (ie. also
 %% working with lyric sections)
 %%
-%% try \once \override Score.Beam #'breakable = ##t
+%% try \once \override Score.Beam.breakable = ##t
 
 %% rather name \newline, \pageBreak ?
 break = #(make-music 'LineBreakEvent 'break-permission 'force)
@@ -73,17 +74,21 @@ startStaff = #(make-span-event 'StaffSpanEvent START)
 % Code articulation definitions
 %
 noBeam = #(make-music 'BeamForbidEvent)
-pipeSymbol = #(make-music 'BarCheck)
-bracketOpenSymbol = #(make-span-event 'BeamEvent START)
-bracketCloseSymbol = #(make-span-event 'BeamEvent STOP)
-tildeSymbol = #(make-music 'TieEvent)
-parenthesisOpenSymbol =  #(make-span-event 'SlurEvent START)
-parenthesisCloseSymbol = #(make-span-event 'SlurEvent STOP)
-escapedExclamationSymbol = #(make-span-event 'CrescendoEvent STOP)
-escapedParenthesisOpenSymbol = #(make-span-event 'PhrasingSlurEvent START)
-escapedParenthesisCloseSymbol = #(make-span-event 'PhrasingSlurEvent STOP)
-escapedBiggerSymbol = #(make-span-event 'DecrescendoEvent START)
-escapedSmallerSymbol = #(make-span-event 'CrescendoEvent START)
+"|" = #(make-music 'BarCheck)
+"[" = #(make-span-event 'BeamEvent START)
+"]" = #(make-span-event 'BeamEvent STOP)
+"~" = #(make-music 'TieEvent)
+"(" =  #(make-span-event 'SlurEvent START)
+")" = #(make-span-event 'SlurEvent STOP)
+"\\!" = #(make-span-event 'CrescendoEvent STOP)
+"\\(" = #(make-span-event 'PhrasingSlurEvent START)
+"\\)" = #(make-span-event 'PhrasingSlurEvent STOP)
+"\\>" = #(make-span-event 'DecrescendoEvent START)
+"\\<" = #(make-span-event 'CrescendoEvent START)
+"\\[" = #(make-span-event 'LigatureEvent START)
+"\\]" = #(make-span-event 'LigatureEvent STOP)
+"\\~" = #(make-music 'PesOrFlexaEvent)
+"\\\\" = #(make-music 'VoiceSeparator)
 
 
 \include "scale-definitions-init.ly"
@@ -99,6 +104,9 @@ repeatTie = #(make-music 'RepeatTieEvent)
 
 %% MAKE-HASH-TABLE in GUILE 1.6 takes mandatory size parameter.
 #(define musicQuotes (make-hash-table 29))
+#(call-after-session
+  (lambda ()
+   (hash-clear! musicQuotes)))
 
 #(define toplevel-book-handler print-book-with-defaults)
 #(define toplevel-bookpart-handler collect-bookpart-for-book)
index 4d2329032da616cd4dea626c141d26140f2a4601..4d002257fb008657b20d4ed7c79b34ad58c56503 100644 (file)
@@ -16,7 +16,7 @@
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.16.0"
+\version "2.17.29"
 
 \context {
   \name "Global"
@@ -26,7 +26,6 @@
   \defaultchild "Score"
   \description "Hard coded entry point for LilyPond.  Cannot be tuned."
   \grobdescriptions #all-grob-descriptions
-  EventClasses = #all-event-classes
 }
 
 \context {
@@ -37,7 +36,7 @@
 
   \consists "Fretboard_engraver"
   \consists "Output_property_engraver"
-  \consists "Hara_kiri_engraver"
+  \consists "Axis_group_engraver"
   \consists "Separating_line_group_engraver"
   \consists "Font_size_engraver"
   \consists "Instrument_name_engraver"
@@ -85,7 +84,7 @@
   \consists "Figured_bass_position_engraver"
   \consists "Script_row_engraver"
   \consists "Cue_clef_engraver"
-  \consists "Footnote_engraver"
+  \consists "Fingering_column_engraver"
 
   localKeySignature = #'()
   createSpacing = ##t
   \defaultchild "Voice"
   \accepts "Voice"
   \accepts "CueVoice"
+  \accepts "NullVoice"
 
   \description "Handles clefs, bar lines, keys, accidentals.  It can contain
 @code{Voice} contexts."
 
   clefGlyph = #"clefs.percussion"
   clefPosition = #0
-  \override Script #'staff-padding = #0.75
+  \override Script.staff-padding = #0.75
 }
 
 
@@ -169,12 +169,11 @@ contained staves are not connected vertically."
   \name RhythmicStaff
   \alias "Staff"
 
-  \override BarLine #'bar-extent = #'(-2 . 2)
-  \override VoltaBracket #'staff-padding = #3
-  \override StaffSymbol #'line-count = #1
+  \override VoltaBracket.staff-padding = #3
+  \override StaffSymbol.line-count = #1
 
-  \override Stem  #'neutral-direction = #UP
-  \override Beam  #'neutral-direction = #UP
+  \override Stem.neutral-direction = #UP
+  \override Beam.neutral-direction = #UP
 
   \consists "Output_property_engraver"
   \consists "Font_size_engraver"
@@ -231,7 +230,6 @@ multiple voices on the same staff."
   \consists "Note_heads_engraver"
   \consists "Dots_engraver"
   \consists "Rest_engraver"
-  \consists "Tweak_engraver"
 
   %% switch on to make stem directions interpolate for the
   %% center line.
@@ -241,6 +239,7 @@ multiple voices on the same staff."
   \consists "Beam_engraver"
   \consists "Grace_beam_engraver"
   \consists "Auto_beam_engraver"
+  \consists "Grace_auto_beam_engraver"
 
   %% must come before Script_column_engraver.
   \consists "New_fingering_engraver"
@@ -252,9 +251,8 @@ multiple voices on the same staff."
   \consists "Part_combine_engraver"
 
   \consists "Text_engraver"
-  \consists "New_dynamic_engraver"
+  \consists "Dynamic_engraver"
   \consists "Dynamic_align_engraver"
-%  \consists "Dynamic_engraver"
   \consists "Fingering_engraver"
   \consists "Bend_engraver"
 
@@ -278,9 +276,9 @@ multiple voices on the same staff."
   \name CueVoice
   \alias Voice
   fontSize = #-4
-  \override Stem #'length-fraction = #(magstep -4)
-  \override Beam #'length-fraction = #(magstep -4)
-  \override Beam #'beam-thickness = #0.35
+  \override Stem.length-fraction = #(magstep -4)
+  \override Beam.length-fraction = #(magstep -4)
+  \override Beam.beam-thickness = #0.35
 }
 
 \context {
@@ -398,22 +396,25 @@ a collection of staves, with a bracket in front and spanning bar lines."
   \consists "Bar_engraver"
   \consists "Piano_pedal_engraver"
   \consists "Script_engraver"
-  \consists "New_dynamic_engraver"
+  \consists "Dynamic_engraver"
   \consists "Dynamic_align_engraver"
   \consists "Text_engraver"
   \consists "Text_spanner_engraver"
+  \consists "Font_size_engraver"
   \consists "Axis_group_engraver"
-  \consists "Tweak_engraver"
 
   pedalSustainStrings = #'("Ped." "*Ped." "*")
   pedalUnaCordaStrings = #'("una corda" "" "tre corde")
-  \override VerticalAxisGroup #'staff-affinity = #CENTER
-  \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing =
+  \override VerticalAxisGroup.staff-affinity = #CENTER
+  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
     #'((basic-distance . 5)
        (padding . 0.5))
-  \override TextScript #'font-shape = #'italic
-  \override DynamicLineSpanner #'Y-offset = #0
-  \override DynamicText #'X-offset =
+  \override TextScript.font-shape = #'italic
+  \override DynamicLineSpanner.Y-offset = #0
+  \override DynamicLineSpanner.outside-staff-priority = ##f
+  \override DynamicText.outside-staff-priority = ##f
+  \override Hairpin.outside-staff-priority = ##f
+  \override DynamicText.X-offset =
   #(ly:make-simple-closure
     `(,+
       ,(ly:make-simple-closure
@@ -436,38 +437,37 @@ printing of a single line of lyrics."
   \consists "Lyric_engraver"
   \consists "Extender_engraver"
   \consists "Hyphen_engraver"
-  \consists "Tweak_engraver"
   \consists "Stanza_number_engraver"
   \consists "Instrument_name_engraver"
   \consists "Font_size_engraver"
-  \consists "Hara_kiri_engraver"
+  \consists "Axis_group_engraver"
   \consists "Pure_from_neighbor_engraver"
   searchForVoice = ##f
   %% explicitly set instrument, so it is not inherited from the parent
   instrumentName = #'()
   shortInstrumentName = #'()
 
-  \override VerticalAxisGroup #'remove-first = ##t
-  \override VerticalAxisGroup #'remove-empty = ##t
-  \override VerticalAxisGroup #'staff-affinity = #UP
-  \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing =
+  \override VerticalAxisGroup.remove-first = ##t
+  \override VerticalAxisGroup.remove-empty = ##t
+  \override VerticalAxisGroup.staff-affinity = #UP
+  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
     #'((basic-distance . 5.5)
        (padding . 0.5)
        (stretchability . 1))
-  \override VerticalAxisGroup #'nonstaff-nonstaff-spacing =
+  \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
      #'((basic-distance . 0)
        (minimum-distance . 2.8)
        (padding . 0.2)
        (stretchability . 0))
-  \override VerticalAxisGroup #'nonstaff-unrelatedstaff-spacing #'padding = #1.5
-  \override InstrumentName #'self-alignment-Y = ##f
+  \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing.padding = #1.5
+  \override InstrumentName.self-alignment-Y = ##f
 
   %% sync with define-grobs.scm ;
-  \override InstrumentName #'font-size = #1.0
+  \override InstrumentName.font-size = #1.0
 
   %% make sure that barlines aren't collapsed, when
   %% Bar_engraver is there.
-  \override BarLine #'bar-extent = #'(-0.05 . 0.05)
+  \override BarLine.bar-extent = #'(-0.05 . 0.05)
 
 }
 
@@ -477,18 +477,17 @@ printing of a single line of lyrics."
   \description "A context for printing the names of notes."
   \consists "Axis_group_engraver"
 
-  \override VerticalAxisGroup #'staff-affinity = #UP
-  \override VerticalAxisGroup #'nonstaff-nonstaff-spacing =
+  \override VerticalAxisGroup.staff-affinity = #UP
+  \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
     #'((basic-distance . 0)
        (minimum-distance . 2.8)
        (padding . 0.2)
        (stretchability . 0))
-  \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing =
+  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
     #'((basic-distance . 5.5)
        (padding . 0.5)
        (stretchability . 1))
-  \override VerticalAxisGroup
-    #'nonstaff-unrelatedstaff-spacing #'padding = 1.5
+  \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing.padding = 1.5
 
   \consists "Tie_engraver"
   \consists "Note_name_engraver"
@@ -503,13 +502,14 @@ printing of a single line of lyrics."
   \consists "Output_property_engraver"
   \consists "Separating_line_group_engraver"
   \consists "Chord_name_engraver"
-  \consists "Hara_kiri_engraver"
+  \consists "Axis_group_engraver"
 %  \consists "Note_spacing_engraver"
-  \override VerticalAxisGroup #'remove-first = ##t
-  \override VerticalAxisGroup #'remove-empty = ##t
-  \override VerticalAxisGroup #'staff-affinity = #DOWN
-  \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing #'padding = #0.5
-  \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'padding = #0.5
+
+  \override VerticalAxisGroup.remove-first = ##t
+  \override VerticalAxisGroup.remove-empty = ##t
+  \override VerticalAxisGroup.staff-affinity = #DOWN
+  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #0.5
+  \override VerticalAxisGroup.nonstaff-nonstaff-spacing.padding = #0.5
 }
 
 \context {
@@ -524,8 +524,8 @@ aligned across staves.
 
 You cannot explicitly instantiate a @code{Score} context (since it
 is not contained in any other context).  It is instantiated
-automatically when an output definition (a @code{\score} or
-@code{\layout} block) is processed."
+automatically when an output definition (a @code{\\score} or
+@code{\\layout} block) is processed."
 
   \consists "Paper_column_engraver"
   \consists "Repeat_acknowledge_engraver"
@@ -544,6 +544,7 @@ automatically when an output definition (a @code{\score} or
   \consists "Timing_translator"
   \consists "Default_bar_line_engraver"
   \consists "Output_property_engraver"
+  \consists "Tweak_engraver"
   \consists "System_start_delimiter_engraver"
   \consists "Mark_engraver"
   \consists "Volta_engraver"
@@ -604,11 +605,13 @@ automatically when an output definition (a @code{\score} or
   decrescendoSpanner = #'hairpin
 
   defaultBarType = #"|"
-  doubleRepeatType = #":|:"
-  startRepeatType = #"|:"
-  endRepeatType = #":|"
+  doubleRepeatType = #":..:"
+  startRepeatType = #".|:"
+  endRepeatType = #":|."
   barNumberVisibility = #first-bar-number-invisible-and-no-parenthesized-bar-numbers
   barNumberFormatter = #robust-bar-number-function
+  clefTranspositionFormatter = #clef-transposition-markup
+  cueClefTranspositionFormatter = #clef-transposition-markup
   automaticBars = ##t
 
   explicitClefVisibility = #all-visible
@@ -618,16 +621,13 @@ automatically when an output definition (a @code{\score} or
 
   repeatCountVisibility = #all-repeat-counts-visible
 
+%% Other Timing variables are derived and set by the Timing_translator
+%% at initialization time by calling the functions in
+%% scm/time-signature-settings.scm
+
   timeSignatureSettings = #default-time-signature-settings
   timeSignatureFraction = 4/4
 
-%% These defaults should be the same as the rules established in
-%%   scm/time-signature-settings.scm for 4/4 time
-  measureLength = #(ly:make-moment 4 4)
-  baseMoment = #(ly:make-moment 1  4)
-  beatStructure = #'(1 1 1 1)
-  beamExceptions = #'((end . (((1 . 8) . (4 4))
-                              ((1 . 12) . (3 3 3 3)))))
   beamHalfMeasure = ##t
 
   autoBeaming = ##t
@@ -704,26 +704,8 @@ automatically when an output definition (a @code{\score} or
   figuredBassFormatter = #format-bass-figure
   metronomeMarkFormatter = #format-metronome-markup
 
-
   %% See also make-voice-props-set
-  graceSettings = #`(
-    (Voice Stem direction ,UP)
-    (Voice Stem font-size -3)
-    (Voice Flag font-size -3)
-    (Voice NoteHead font-size -3)
-    (Voice TabNoteHead font-size -4)
-    (Voice Dots font-size -3)
-    (Voice Stem length-fraction 0.8)
-    (Voice Stem no-stem-extend #t)
-    (Voice Beam beam-thickness 0.384)
-    (Voice Beam length-fraction 0.8)
-    (Voice Accidental font-size -4)
-    (Voice AccidentalCautionary font-size -4)
-    (Voice Slur direction ,DOWN)
-    (Voice Script font-size -3)
-    (Voice Fingering font-size -8)
-    (Voice StringNumber font-size -8)
-  )
+  graceSettings = #score-grace-settings
 
   keepAliveInterfaces = #'(
     bass-figure-interface
@@ -765,13 +747,13 @@ automatically when an output definition (a @code{\score} or
 
   \consists "Figured_bass_engraver"
   \consists "Separating_line_group_engraver"
-  \consists "Hara_kiri_engraver"
+  \consists "Axis_group_engraver"
 
-  \override VerticalAxisGroup #'remove-empty = ##t
-  \override VerticalAxisGroup #'remove-first = ##t
-  \override VerticalAxisGroup #'staff-affinity = #UP
-  \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing #'padding = #0.5
-  \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'padding = #0.5
+  \override VerticalAxisGroup.remove-empty = ##t
+  \override VerticalAxisGroup.remove-first = ##t
+  \override VerticalAxisGroup.staff-affinity = #UP
+  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #0.5
+  \override VerticalAxisGroup.nonstaff-nonstaff-spacing.padding = #0.5
 }
 
 \context {
@@ -785,6 +767,59 @@ automatically when an output definition (a @code{\score} or
 context."
 }
 
+\context {
+  \name "NullVoice"
+  \type "Engraver_group"
+
+  \description "Non-printing context, typically used for aligning
+lyrics in polyphonic situations, or with @code{\partcombine}."
+
+  %% don't route anything out of here
+  \alias "Staff"
+  \alias "Voice"
+
+  %% all three are needed for ties to work with lyrics
+  \consists "Note_heads_engraver"
+  \consists "Rhythmic_column_engraver"
+  \consists "Tie_engraver"
+
+  %% both are needed for melismas to work with \autoBeamOff
+  \consists "Beam_engraver"
+  \consists "Stem_engraver"
+
+  %% needed for slurs to work with lyrics
+  \consists "Slur_engraver"
+
+  %% keep noteheads inside the staff
+  \consists "Pitch_squash_engraver"
+  squashedPosition = 0
+
+  %% `\omit NoteHead' would give slur attachment errors
+  \omit Accidental
+  \omit Beam
+  \omit Dots
+  \omit Flag
+  \omit Rest
+  \omit Slur
+  \omit Stem
+  \omit Tie
+
+  %% let these take up space (for lyric extenders, etc.)
+  \override NoteHead.transparent = ##t
+  \override TabNoteHead.transparent = ##t
+
+  %% don't let notes shift
+  \override NoteHead.X-offset = 0
+  \override NoteColumn.ignore-collision = ##t
+
+  %% keep beams and stems inside the staff
+  \override Beam.positions = #'(1 . 1)
+  \override Stem.length = 0
+
+  %% prevent "weird stem size" warnings
+  \override Stem.direction = #UP
+}
+
 \context {
   \Voice
   \name "TabVoice"
@@ -799,72 +834,8 @@ context."
 
   \description "Context for drawing notes in a Tab staff."
 
-  %% TabStaff increase the staff-space, which in turn
-  %% increases beam thickness and spacing; beams are
-  %% too big. We have to adjust the beam settings:
-  \override Beam #'beam-thickness = #0.32
-  \override Beam #'length-fraction = #0.62
-  %% the same goes for tremolo beams
-  \override StemTremolo #'beam-thickness = #0.32
-  %% NOTE: in lily/stem-tremolo.cc, we have length-fraction = 1,
-  %% and the tablature staff space is scaled (1.5 by default),
-  %% so we use the inversion of the scale factor:
-  \override StemTremolo #'length-fraction = #(lambda (grob)
-                                               (/ 1 (ly:staff-symbol-staff-space grob)))
-  \override StemTremolo #'beam-width = #stem-tremolo::calc-tab-width
-
   %% No accidental in tablature !
   \remove "Accidental_engraver"
-  %% make the Stems as short as possible to minimize their influence
-  %% on the slur::calc-control-points routine
-  \override Stem #'no-stem-extend = ##t
-  \override Flag #'style = #'no-flag
-  \override Stem #'details = #'((lengths 0 0 0 0 0 0)
-                                (beamed-lengths 0 0 0)
-                                (beamed-minimum-free-lengths 0 0 0)
-                                (beamed-extreme-minimum-free-lengths 0 0)
-                                (stem-shorten 0 0))
-  %% after all, the stubs of the stems may still be visible, so ...
-  \override Stem #'stencil = ##f
-  \override Flag #'stencil = ##f
-  %% automatic beams should be suppressed for similar reasons ...
-  autoBeaming = ##f
-  %% remove beams, dots and rests ...
-  \override Beam #'stencil = ##f
-  \override StemTremolo #'stencil = ##f
-  \override Dots #'stencil = ##f
-  \override Rest #'stencil = ##f
-  \override MultiMeasureRest #'stencil = ##f
-  \override MultiMeasureRestNumber #'stencil = ##f
-  \override MultiMeasureRestText #'stencil = ##f
-  %% ... all kinds of ties/slurs
-  \override Tie  #'stencil = ##f
-  \override RepeatTie #'stencil = ##f
-  \override LaissezVibrerTie #'stencil = ##f
-  \override Slur #'stencil = #slur::draw-tab-slur
-  \override PhrasingSlur #'stencil = ##f
-  %% 'tied to' fret numbers become invisible or parenthesized, respectively)
-  \override Tie #'after-line-breaking = #tie::handle-tab-note-head
-  \override RepeatTie #'after-line-breaking = #repeat-tie::handle-tab-note-head
-  %% ... and all kinds of markups, spanners etc.
-  \override TupletBracket #'stencil = ##f
-  \override TupletNumber #'stencil = ##f
-  \override DynamicText #'stencil = ##f
-  \override DynamicTextSpanner #'stencil = ##f
-  \override TextSpanner #'stencil = ##f
-  \override Hairpin #'stencil = ##f
-  \override Script #'stencil = ##f
-  \override TextScript #'stencil = ##f
-  \override Glissando #'stencil = #glissando::draw-tab-glissando
-  %% the direction for glissando lines will be automatically corrected
-  \override Glissando #'extra-dy = #glissando::calc-tab-extra-dy
-  \override Glissando #'bound-details #'right = #`((attach-dir . ,LEFT)
-                                                  (padding . 0.3))
-  \override Glissando #'bound-details #'left = #`((attach-dir . ,RIGHT)
-                                                  (padding . 0.3))
-  %% dead notes
-  \override TabNoteHead #'glyph-name = #tab-note-head::calc-glyph-name
-  \override TabNoteHead #'stencil = #tab-note-head::whiteout-if-style-set
 }
 
 \context {
@@ -881,10 +852,10 @@ contexts and handles the line spacing, the tablature clef etc. properly."
   \defaultchild "TabVoice"
 
   %% 6 strings, bigger spacing
-  \override StaffSymbol #'staff-space = #1.5
+  \override StaffSymbol.staff-space = #1.5
 
   %% Don't draw stems over the tablature figures !
-  \override Stem #'avoid-note-head = ##t
+  \override Stem.avoid-note-head = ##t
 
   %% No accidental in tablature !
   \remove "Accidental_engraver"
@@ -892,14 +863,14 @@ contexts and handles the line spacing, the tablature clef etc. properly."
 
   \remove "Ottava_spanner_engraver"
   %% the clef handler
-  \override Clef #'stencil = #clef::print-modern-tab-if-set
+  \override Clef.stencil = #clef::print-modern-tab-if-set
   %% no time signature
-  \override TimeSignature #'stencil = ##f
+  \override TimeSignature.stencil = ##f
   %% no arpeggios
-  \override Arpeggio #'stencil = ##f
+  \override Arpeggio.stencil = ##f
   %% we ignore collision warnings that may occur due to
   %% stem overlapping, because we have no stems ;-)
-  \override NoteColumn #'ignore-collision = ##t
+  \override NoteColumn.ignore-collision = ##t
   %% Special "TAB" clef
   clefGlyph = #"clefs.tab"
   clefPosition = #0
@@ -907,6 +878,71 @@ contexts and handles the line spacing, the tablature clef etc. properly."
   handleNegativeFrets = #'recalculate
   %% Allow open strings even if minimumFret is set
   restrainOpenStrings = ##f
+
+  %% TabStaff increase the staff-space, which in turn
+  %% increases beam thickness and spacing; beams are
+  %% too big. We have to adjust the beam settings:
+  \override Beam.beam-thickness = #0.32
+  \override Beam.length-fraction = #0.62
+  %% the same goes for tremolo beams
+  \override StemTremolo.beam-thickness = #0.32
+  %% NOTE: in lily/stem-tremolo.cc, we have length-fraction = 1,
+  %% and the tablature staff space is scaled (1.5 by default),
+  %% so we use the inversion of the scale factor:
+  \override StemTremolo.length-fraction = #(lambda (grob)
+                                               (/ 1 (ly:staff-symbol-staff-space grob)))
+  \override StemTremolo.beam-width = #stem-tremolo::calc-tab-width
+
+  %% make the Stems as short as possible to minimize their influence
+  %% on the slur::calc-control-points routine
+  \override Stem.no-stem-extend = ##t
+  \override Flag.style = #'no-flag
+  \override Stem.details = #'((lengths 0 0 0 0 0 0)
+                                (beamed-lengths 0 0 0)
+                                (beamed-minimum-free-lengths 0 0 0)
+                                (beamed-extreme-minimum-free-lengths 0 0)
+                                (stem-shorten 0 0))
+  %% after all, the stubs of the stems may still be visible, so ...
+  \override Stem.stencil = ##f
+  \override Flag.stencil = ##f
+  %% automatic beams should be suppressed for similar reasons ...
+  autoBeaming = ##f
+  %% remove beams, dots and rests ...
+  \override Beam.stencil = ##f
+  \override StemTremolo.stencil = ##f
+  \override Dots.stencil = ##f
+  \override Rest.stencil = ##f
+  \override MultiMeasureRest.stencil = ##f
+  \override MultiMeasureRestNumber.stencil = ##f
+  \override MultiMeasureRestText.stencil = ##f
+  %% ... all kinds of ties/slurs
+  \override Tie.stencil = ##f
+  \override RepeatTie.stencil = ##f
+  \override LaissezVibrerTie.stencil = ##f
+  \override Slur.stencil = #slur::draw-tab-slur
+  \override PhrasingSlur.stencil = ##f
+  %% 'tied to' fret numbers become invisible or parenthesized, respectively)
+  \override Tie.after-line-breaking = #tie::handle-tab-note-head
+  \override RepeatTie.after-line-breaking = #repeat-tie::handle-tab-note-head
+  %% ... and all kinds of markups, spanners etc.
+  \override TupletBracket.stencil = ##f
+  \override TupletNumber.stencil = ##f
+  \override DynamicText.stencil = ##f
+  \override DynamicTextSpanner.stencil = ##f
+  \override TextSpanner.stencil = ##f
+  \override Hairpin.stencil = ##f
+  \override Script.stencil = ##f
+  \override TextScript.stencil = ##f
+  \override Glissando.stencil = #glissando::draw-tab-glissando
+  %% the direction for glissando lines will be automatically corrected
+  \override Glissando.extra-dy = #glissando::calc-tab-extra-dy
+  \override Glissando.bound-details.right = #`((attach-dir . ,LEFT)
+                                                  (padding . 0.3))
+  \override Glissando.bound-details.left = #`((attach-dir . ,RIGHT)
+                                                  (padding . 0.3))
+  %% dead notes
+  \override TabNoteHead.glyph-name = #tab-note-head::calc-glyph-name
+  \override TabNoteHead.stencil = #tab-note-head::whiteout-if-style-set
 }
 
 \context {
@@ -925,11 +961,11 @@ of Editio Vaticana."
   \consists "Episema_engraver"
 
   %% Set default head for notes outside of \[ \].
-  \override NoteHead #'style = #'vaticana.punctum
+  \override NoteHead.style = #'vaticana.punctum
 
   %% Put some space before and after divisiones.
   %% FIXME: This does not seem to show any effect.
-  \override Script #'padding = #0.5
+  \override Script.padding = #0.5
 
   %% There are no beams in Gregorian Chant notation.
   autoBeaming = ##f
@@ -953,28 +989,28 @@ of Editio Vaticana."
   %% We can not remove Bar_engraver; otherwise clefs and custodes will
   %% not show up any more among other line breaking issues.
   %% Instead, we make the grob transparent.
-  \override BarLine #'transparent = ##t
+  \override BarLine.transparent = ##t
 
-  \override StaffSymbol #'line-count = #4
-  \override StaffSymbol #'thickness = #0.6
+  \override StaffSymbol.line-count = #4
+  \override StaffSymbol.thickness = #0.6
 
   %% FIXME: unit on StaffSymbol's width should be \linewidth.
-  %% \override StaffSymbol #'width = #60.0
+  %% \override StaffSymbol.width = #60.0
 
   %% Choose vaticana do clef on 3rd line as default.
   clefGlyph = #"clefs.vaticana.do"
   middleCPosition = #1
   middleCClefPosition = #1
   clefPosition = #1
-  clefOctavation = #0
+  clefTransposition = #0
 
   %% Select vaticana style font.
-  \override KeySignature #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
-  \override Accidental #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
-  \override Custos #'style = #'vaticana
-  \override Custos #'neutral-position = #3
-  \override Custos #'neutral-direction = #DOWN
-  \override Dots #'style = #'vaticana
+  \override KeySignature.glyph-name-alist = #alteration-vaticana-glyph-name-alist
+  \override Accidental.glyph-name-alist = #alteration-vaticana-glyph-name-alist
+  \override Custos.style = #'vaticana
+  \override Custos.neutral-position = #3
+  \override Custos.neutral-direction = #DOWN
+  \override Dots.style = #'vaticana
 }
 
 \context {
@@ -987,11 +1023,11 @@ of Editio Vaticana."
   %% other ligature engraver would cause a "Junking event: `LigatureEvent'"
   %% warning for every "\[" and "\]".  Therefore, we make the grob
   %% transparent instead.
-  \override LigatureBracket #'transparent = ##t
+  \override LigatureBracket.transparent = ##t
 
   %% Put some space before and after divisiones.
   %% FIXME: This does not seem to show any effect.
-  \override Script #'padding = #0.5
+  \override Script.padding = #0.5
 
   %% There are no beams in Gregorian Chant notation.
   autoBeaming = ##f
@@ -1009,7 +1045,7 @@ of Editio Vaticana."
   %% We can not remove Bar_engraver; otherwise clefs and custodes will
   %% not show up any more among other line breaking issues.
   %% Instead, we make the grob transparent.
-  \override BarLine #'transparent = ##t
+  \override BarLine.transparent = ##t
 }
 
 \context {
@@ -1024,9 +1060,9 @@ accommodated for typesetting a piece in mensural style."
   \consists "Mensural_ligature_engraver"
 
   %% Set default head for notes outside of \[ \].
-  \override NoteHead #'style = #'mensural
-  \override Rest #'style = #'mensural
-  \override Flag #'style = #'mensural
+  \override NoteHead.style = #'mensural
+  \override Rest.style = #'mensural
+  \override Flag.style = #'mensural
 
   %% There are no beams in mensural notation.
   autoBeaming = ##f
@@ -1047,30 +1083,30 @@ accommodated for typesetting a piece in mensural style."
   %% We can not remove Bar_engraver; otherwise clefs and custodes will
   %% not show up any more among other line breaking issues.
   %% Instead, we make the grob transparent.
-  \override BarLine #'transparent = ##t
+  \override BarLine.transparent = ##t
 
-  \override StaffSymbol #'thickness = #0.6
+  \override StaffSymbol.thickness = #0.6
 
   %% FIXME: unit on StaffSymbol's width should be \linewidth.
-  %% \override StaffSymbol #'width = #60.0
+  %% \override StaffSymbol.width = #60.0
 
   %% Choose mensural g clef on 2nd line as default.
   clefGlyph = #"clefs.mensural.g"
   middleCClefPosition = #-6
   middleCPosition = #-6
   clefPosition = #-2
-  clefOctavation = #0
+  clefTransposition = #0
 
   %% Select mensural style font.
-  \override TimeSignature #'style = #'mensural
-  \override KeySignature #'glyph-name-alist = #alteration-mensural-glyph-name-alist
-  \override Accidental #'glyph-name-alist = #alteration-mensural-glyph-name-alist
-  \override Custos #'style = #'mensural
-  \override Custos #'neutral-position = #3
-  \override Custos #'neutral-direction = #DOWN
+  \override TimeSignature.style = #'mensural
+  \override KeySignature.glyph-name-alist = #alteration-mensural-glyph-name-alist
+  \override Accidental.glyph-name-alist = #alteration-mensural-glyph-name-alist
+  \override Custos.style = #'mensural
+  \override Custos.neutral-position = #3
+  \override Custos.neutral-direction = #DOWN
 
   %% Accidentals are valid only once (same as
-  %% \accidentalStyle "forget")
+  %% \accidentalStyle forget)
   extraNatural = ##f
   autoAccidentals = #`(Staff ,(make-accidental-rule 'same-octave -1))
   autoCautionaries = #'()
@@ -1088,12 +1124,12 @@ accommodated for typesetting a piece in Petrucci style."
   \consists "Mensural_ligature_engraver"
 
   %% Set glyph styles.
-  \override NoteHead #'style = #'petrucci
-  \override Rest #'style = #'mensural
+  \override NoteHead.style = #'petrucci
+  \override Rest.style = #'mensural
 
   % Thickens and shortens stems.
-  \override Stem #'thickness = #1.7
-  \override Stem #'length = #5
+  \override Stem.thickness = #1.7
+  \override Stem.length = #5
 
   %% There are no beams in Petrucci notation.
   autoBeaming = ##f
@@ -1111,18 +1147,18 @@ accommodated for typesetting a piece in Petrucci style."
 
   \consists "Custos_engraver"
 
-  \override StaffSymbol #'thickness = #1.3
+  \override StaffSymbol.thickness = #1.3
 
   %% Choose Petrucci g clef on 2nd line as default.
   clefGlyph = #"clefs.petrucci.g"
   middleCClefPosition = #-6
   middleCPosition = #-6
   clefPosition = #-2
-  clefOctavation = #0
+  clefTransposition = #0
 
-  \override Custos #'style = #'mensural
-  \override Custos #'neutral-position = #3
-  \override Custos #'neutral-direction = #DOWN
+  \override Custos.style = #'mensural
+  \override Custos.neutral-position = #3
+  \override Custos.neutral-direction = #DOWN
 
   %% Accidentals are valid only once (if the following note is different)
   extraNatural = ##f
@@ -1139,12 +1175,22 @@ accommodated for typesetting a piece in Petrucci style."
  \description "Same as @code{Voice} context, except that it is
 accommodated for typesetting a piece in Kievan style."
 
+  \remove "Ligature_bracket_engraver"
+  \consists "Kievan_ligature_engraver"
+
  %% Set glyph styles.
- \override NoteHead #'style = #'kievan
- \override Rest #'style = #'mensural
- \override Accidental #'glyph-name-alist = #alteration-kievan-glyph-name-alist
- \override Dots #'style = #'kievan
- \override Slur #'stencil = ##f
+ \override NoteHead.style = #'kievan
+ \override Stem.X-offset = #stem::kievan-offset-callback
+ \override Stem.stencil = ##f
+ \override Flag.stencil = ##f
+ \override Rest.style = #'mensural
+ \override Accidental.glyph-name-alist = #alteration-kievan-glyph-name-alist
+ \override Dots.style = #'kievan
+ \override Slur.stencil = ##f
+ \override Stem.length = #0.0
+ \override Beam.positions = #beam::get-kievan-positions
+ \override Beam.quantized-positions = #beam::get-kievan-quantized-positions
+ \override NoteHead.duration-log = #note-head::calc-kievan-duration-log
 
  %% There are beams in Kievan notation, but they are invoked manually
  autoBeaming = ##f
@@ -1167,7 +1213,7 @@ accommodated for typesetting a piece in Kievan style."
  middleCClefPosition = #0
  middleCPosition = #0
  clefPosition = #0
- clefOctavation = #0
+ clefTransposition = #0
 
  %% Accidentals are valid only once (if the following note is different)
  extraNatural = ##f
index 6c0f75970e708e370195b8934801074c507f77a3..9e5282de89d7ca33704a58fb592a62ec17c848e0 100644 (file)
@@ -66,7 +66,7 @@ program using the output of this function to interpret grace notes
 however they want (half duration, quarter duration?  before beat,
 after beat?  etc.)."
    (if
-       (eq? 0 (ly:moment-grace-numerator moment))
+       (zero? (ly:moment-grace-numerator moment))
        (ly:format "~a" (format-moment moment))
        ;; grace notes have a negative numerator, so no "-" necessary
        (ly:format
index abbfd8a3d9b7d2e1d5bf0dd59f4af92ee7973103..6fe32f49fbaf513055c94b2fa103d6cf368a23e5 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 startGraceSlur = #(make-music 'SlurEvent 'span-direction START 'spanner-id "grace")
 stopGraceSlur = #(make-music 'SlurEvent 'span-direction STOP 'spanner-id "grace")
@@ -21,18 +21,18 @@ stopAppoggiaturaMusic =  {
 
 startAcciaccaturaMusic =  {
     <>\startGraceSlur
-    \override Flag  #'stroke-style = #"grace"
+    \temporary \override Flag.stroke-style = #"grace"
 }
 
 stopAcciaccaturaMusic =  {
-    \revert Flag #'stroke-style
+    \revert Flag.stroke-style
     <>\stopGraceSlur
 }
 
 startSlashedGraceMusic =  {
-  \override Flag #'stroke-style = #"grace"
+  \temporary \override Flag.stroke-style = #"grace"
 }
 
 stopSlashedGraceMusic =  {
-  \revert Flag #'stroke-style
+  \revert Flag.stroke-style
 }
index 9c6bd051a6d19ad0d47872b7ce357cbbce6a8bba..b0fe9f24c2f21d403da331a39d6d7d915e2fd217 100644 (file)
@@ -3,7 +3,7 @@
   $Id$
 %}
 
-\version "2.16.0"
+\version "2.17.30"
 
 %
 % Declare memorable shortcuts for special unicode characters
@@ -49,86 +49,91 @@ responsum =
 % Declare head prefix shortcuts.
 %
 virga =
-  \once \override NoteHead  #'virga = ##t
+  \once \override NoteHead.virga = ##t
 stropha =
-  \once \override NoteHead  #'stropha = ##t
+  \once \override NoteHead.stropha = ##t
 inclinatum =
-  \once \override NoteHead  #'inclinatum = ##t
+  \once \override NoteHead.inclinatum = ##t
 auctum =
-  \once \override NoteHead  #'auctum = ##t
+  \once \override NoteHead.auctum = ##t
 descendens =
-  \once \override NoteHead  #'descendens = ##t
+  \once \override NoteHead.descendens = ##t
 ascendens =
-  \once \override NoteHead  #'ascendens = ##t
+  \once \override NoteHead.ascendens = ##t
 pes =
-  \once \override NoteHead  #'pes-or-flexa = ##t
+  \once \override NoteHead.pes-or-flexa = ##t
 flexa =
-  \once \override NoteHead  #'pes-or-flexa = ##t
+  \once \override NoteHead.pes-or-flexa = ##t
 oriscus =
-  \once \override NoteHead  #'oriscus = ##t
+  \once \override NoteHead.oriscus = ##t
 quilisma =
-  \once \override NoteHead  #'quilisma = ##t
+  \once \override NoteHead.quilisma = ##t
 deminutum =
-  \once \override NoteHead  #'deminutum = ##t
+  \once \override NoteHead.deminutum = ##t
 linea =
-  \once \override NoteHead  #'linea = ##t
+  \once \override NoteHead.linea = ##t
 cavum =
-  \once \override NoteHead  #'cavum = ##t
+  \once \override NoteHead.cavum = ##t
 
 %
 % Declare divisiones shortcuts.
 %
 virgula = {
-  \once \override BreathingSign  #'text = #(make-musicglyph-markup "scripts.rcomma")
-  \once \override BreathingSign  #'font-size = #-2
+  \once \override BreathingSign.text = #(make-musicglyph-markup "scripts.rcomma")
+  \once \override BreathingSign.font-size = #-2
 
   % Workaround: add padding.  Correct fix would be spacing engine handle this.
-  \once \override BreathingSign  #'extra-X-extent = #'(-1.0 . 0)
+  \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+  \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
 
   \breathe
 }
 caesura = {
-  \once \override BreathingSign  #'text = #(make-musicglyph-markup "scripts.rvarcomma")
-  \once \override BreathingSign  #'font-size = #-2
+  \once \override BreathingSign.text = #(make-musicglyph-markup "scripts.rvarcomma")
+  \once \override BreathingSign.font-size = #-2
 
   % Workaround: add padding.  Correct fix would be spacing engine handle this.
-  \once \override BreathingSign  #'extra-X-extent = #'(-1.0 . 0)
+  \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+  \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
 
   \breathe
 }
 divisioMinima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-minima
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima
 
   % Workaround: add padding.  Correct fix would be spacing engine handle this.
-  \once \override BreathingSign  #'extra-X-extent = #'(-1.0 . 0)
+  \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+  \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
 
   \breathe
 }
 divisioMaior = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maior
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior
+  \once \override BreathingSign.Y-offset = #0
 
   % Workaround: add padding.  Correct fix would be spacing engine handle this.
-  \once \override BreathingSign  #'extra-X-extent = #'(-1.0 . 0)
+  \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+  \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
 
   \breathe
 }
 divisioMaxima = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::divisio-maxima
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima
+  \once \override BreathingSign.Y-offset = #0
 
   % Workaround: add padding.  Correct fix would be spacing engine handle this.
-  \once \override BreathingSign  #'extra-X-extent = #'(-1.0 . 0)
+  \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+  \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
 
   \breathe
 }
 finalis = {
-  \once \override BreathingSign  #'stencil = #ly:breathing-sign::finalis
-  \once \override BreathingSign  #'Y-offset = #0
+  \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+  \once \override BreathingSign.Y-offset = #0
 
   % Workaround: add padding.  Correct fix would be spacing engine handle this.
-  \once \override BreathingSign  #'extra-X-extent = #'(-1.0 . 0)
-  \once \override BreathingSign  #'extra-spacing-height = #'(-0.5 . 0.5)
+  \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+  \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
 
   \breathe
 }
@@ -221,8 +226,8 @@ ligature = #(define-music-function
 
     \context {
        \VaticanaStaff
-        \override StaffSymbol #'color = #red
-        \override LedgerLineSpanner #'color = #red
+        \override StaffSymbol.color = #red
+        \override LedgerLineSpanner.color = #red
     }
     \context {
        \Score
@@ -245,7 +250,7 @@ ligature = #(define-music-function
        %%%
        barAlways = ##f
 
-       \override SpacingSpanner #'packed-spacing = ##t
+       \override SpacingSpanner.packed-spacing = ##t
 
        %%%
        %%% TODO: Play around with the following SpacingSpanner
@@ -255,11 +260,11 @@ ligature = #(define-music-function
        %%% causes tons of "programming error: adding reverse spring,
        %%% setting to unit" messages.
        %%%
-       %\override SpacingSpanner #'base-shortest-duration = #(ly:make-moment 1 4)
-       %\override SpacingSpanner #'shortest-duration-space = #0
-       %\override SpacingSpanner #'average-spacing-wishes = ##f
-       %\override SpacingSpanner #'spacing-increment = #0.0
-       %\override SpacingSpanner #'uniform-stretching = ##t
+       %\override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/4)
+       %\override SpacingSpanner.shortest-duration-space = #0
+       %\override SpacingSpanner.average-spacing-wishes = ##f
+       %\override SpacingSpanner.spacing-increment = #0.0
+       %\override SpacingSpanner.uniform-stretching = ##t
     }
 }
 
@@ -280,18 +285,17 @@ neumeDemoLayout = \layout {
        \Staff
        \remove "Clef_engraver"
        \remove "Key_engraver"
-       \override StaffSymbol #'transparent = ##t
+       \hide StaffSymbol
        \remove "Time_signature_engraver"
        \remove "Bar_engraver"
-       \override VerticalAxisGroup #'staff-staff-spacing = #'()
+       \override VerticalAxisGroup.staff-staff-spacing = #'()
     }
     \context {
        \Voice
        \remove "Ligature_bracket_engraver"
        \consists "Vaticana_ligature_engraver"
-       \override NoteHead #'style = #'vaticana.punctum
-       \override Stem #'transparent = ##t
-       \override Flag #'transparent = ##t
+       \override NoteHead.style = #'vaticana.punctum
+       \hide Stem
     }
 }
 
index a8bcc65d1143daa0a9904b2f7d3f71f02154731f..acaa2c9899939af19c94e387ff6a9446e773469d 100644 (file)
@@ -6,45 +6,20 @@
 
 \version "2.16.0"
 
-#(if (not (ly:undead? lilypond-declarations))
-     (ly:parser-include-string parser
-                              "\\include \"declarations-init.ly\""))
+#(session-initialize
+  (lambda ()
+   ;; we can't use ly:parser-include-string here since that does not
+   ;; actually do any parsing but merely switches inputs, so the
+   ;; session saved by the session initializer after calling this
+   ;; function has not actually started.  A parser clone, in contrast,
+   ;; can run and complete synchronously and shares the module with
+   ;; the current parser.
+   (ly:parser-parse-string (ly:parser-clone parser)
+    "\\include \"declarations-init.ly\"")))
 
-%% We need to save the variables of the current module along with
-%% their values: functions defined in the module might refer to the
-%% variables
+#(note-names-language parser default-language)
 
-#(if lilypond-declarations
-     (if (ly:undead? lilypond-declarations)
-        (begin
-          (for-each
-           (lambda (p)
-             (let ((var (cadr p))
-                   (val (cddr p)))
-               (variable-set! var
-                              (if (ly:output-def? val)
-                                  (ly:output-def-clone val)
-                                  val))
-               (module-add! (current-module) (car p) var)))
-           (ly:get-undead lilypond-declarations))
-          (note-names-language parser default-language))
-        (let ((decl '()))
-          (module-for-each
-           (lambda (s v)
-             (let ((val (variable-ref v)))
-               (if (not (ly:lily-parser? val))
-                   (set! decl
-                         (cons
-                          (cons*
-                           s v
-                           (if (ly:output-def? val)
-                               (ly:output-def-clone val)
-                               val))
-                          decl)))))
-           (current-module))
-          (set! lilypond-declarations (ly:make-undead decl)))))
-
-#(ly:set-option 'old-relative #f)
+#(define location #f)
 #(define toplevel-scores (list))
 #(define toplevel-bookparts (list))
 #(define $defaultheader #f)
@@ -54,9 +29,6 @@
 #(define expect-error #f)
 #(define output-empty-score-list #f)
 #(define output-suffix #f)
-#(hash-clear! default-fret-table)
-#(hash-clear! chord-shape-table)
-#(hash-clear! musicQuotes)
 
 #(use-modules (scm clip-region))
 #(use-modules (srfi srfi-1))
@@ -72,11 +44,6 @@ $(if (ly:get-option 'include-settings)
 %% Above and below comments compensate for the parser's look-ahead.
 %%
 
-#(if (and (ly:get-option 'old-relative)
-      (defined? 'input-file-name)
-      (not (ly:get-option 'old-relative-used)))
-  (old-relative-not-used-message input-file-name))%% there is a problem at the end of the input file
-
 #(if (and (not version-seen)
       (defined? 'input-file-name))
   (version-not-seen-message input-file-name))
@@ -88,15 +55,15 @@ $(if (ly:get-option 'include-settings)
                          toplevel-book-handler)))
    (cond ((pair? toplevel-bookparts)
           (let ((book (ly:make-book $defaultpaper $defaultheader)))
-            (map (lambda (part)
-                   (ly:book-add-bookpart! book part))
-                 (reverse! toplevel-bookparts))
+            (for-each (lambda (part)
+                        (ly:book-add-bookpart! book part))
+                      (reverse! toplevel-bookparts))
             (set! toplevel-bookparts (list))
             ;; if scores have been defined after the last explicit \bookpart:
             (if (pair? toplevel-scores)
-                (map (lambda (score)
-                       (ly:book-add-score! book score))
-                     (reverse! toplevel-scores)))
+                (for-each (lambda (score)
+                            (ly:book-add-score! book score))
+                          (reverse! toplevel-scores)))
             (set! toplevel-scores (list))
             (book-handler parser book)))
          ((or (pair? toplevel-scores) output-empty-score-list)
index 1209bc130dced64eb8260ccd5e08ec9b0f56273d..cf6852a02859a7c4de70270a29d71e11b5b5298d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.6"
 
 %{
 
@@ -144,11 +144,11 @@ makamGlyphs = #`((1 . "accidentals.doublesharp")
 \layout {
   \context {
     \Score
-    \override KeySignature #'glyph-name-alist = \makamGlyphs
-    \override Accidental #'glyph-name-alist = \makamGlyphs
-    \override AccidentalCautionary #'glyph-name-alist = \makamGlyphs
-    \override TrillPitchAccidental #'glyph-name-alist = \makamGlyphs
-    \override AmbitusAccidental #'glyph-name-alist = \makamGlyphs
+    \override KeySignature.glyph-name-alist = \makamGlyphs
+    \override Accidental.glyph-name-alist = \makamGlyphs
+    \override AccidentalCautionary.glyph-name-alist = \makamGlyphs
+    \override TrillPitchAccidental.glyph-name-alist = \makamGlyphs
+    \override AmbitusAccidental.glyph-name-alist = \makamGlyphs
   }
 }
 
index 0fa79af3ddb63acd68e1861710c29cfa6903ccf6..bf738074cda120346f26b231c6854bd427ac72e7 100644 (file)
@@ -18,7 +18,7 @@
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.16.0"
+\version "2.17.11"
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 %% TODO: using define-music-function in a .scm causes crash.
 
+absolute =
+#(define-music-function (parser location music)
+   (ly:music?)
+   (_i "Make @var{music} absolute.  This does not actually change the
+music itself but rather hides it from surrounding @code{\\relative}
+commands.")
+   (make-music 'RelativeOctaveMusic 'element music))
+
 acciaccatura =
 #(def-grace-function startAcciaccaturaMusic stopAcciaccaturaMusic
    (_i "Create an acciaccatura from the following music expression"))
@@ -86,35 +94,38 @@ markups), or inside a score.")
                                           'break-permission 'allow))))
 
 alterBroken =
-#(define-music-function (parser location name property arg)
-  (string? scheme? list?)
-  (_i "Override @var{property} for pieces of broken spanner @var{name} with
-values @var{arg}.")
-  (let* ((name (string-delete name char-set:blank)) ; remove any spaces
-         (name-components (string-split name #\.))
-         (context-name "Bottom")
-         (grob-name #f))
-
-    (if (> 2 (length name-components))
-        (set! grob-name (car name-components))
-        (begin
-          (set! grob-name (cadr name-components))
-          (set! context-name (car name-components))))
-
-    ;; only apply override if grob is a spanner
-    (let ((description
-            (assoc-get (string->symbol grob-name) all-grob-descriptions)))
-      (if (and description
-               (member 'spanner-interface
-                       (assoc-get 'interfaces
-                                  (assoc-get 'meta description))))
-          #{
-            \override $context-name . $grob-name $property =
-              #(value-for-spanner-piece arg)
-          #}
+#(define-music-function (parser location property arg item)
+  (symbol-list-or-symbol? list? symbol-list-or-music?)
+  (_i "Override @var{property} for pieces of broken spanner @var{item}
+with values @var{arg}.  @var{item} may either be music in the form of
+a starting spanner event, or a symbol list in the form
+@samp{Context.Grob} or just @samp{Grob}.  Iff @var{item} is in the
+form of a spanner event, @var{property} may also have the form
+@samp{Grob.property} for specifying a directed tweak.")
+  (if (ly:music? item)
+      (if (eq? (ly:music-property item 'span-direction) START)
+          #{ \tweak #property #(value-for-spanner-piece arg) #item #}
           (begin
-            (ly:input-warning location (_ "not a spanner name, `~a'") grob-name)
-            (make-music 'SequentialMusic 'void #t))))))
+            (ly:music-warning item (_ "not a spanner"))
+            item))
+      (let* ((p (check-grob-path item parser location
+                                 #:default 'Bottom
+                                 #:min 2
+                                 #:max 2))
+             (name (and p (second p)))
+             (description
+              (and name (assoc-get name all-grob-descriptions))))
+        (if (and description
+                 (member 'spanner-interface
+                         (assoc-get 'interfaces
+                                    (assoc-get 'meta description))))
+            #{
+              \override #item . #property =
+              #(value-for-spanner-piece arg)
+            #}
+            (begin
+              (ly:input-warning location (_ "not a spanner name, `~a'") name)
+              (make-music 'Music))))))
 
 appendToTag =
 #(define-music-function (parser location tag more music)
@@ -175,14 +186,16 @@ balloonGrobText =
    (symbol? number-pair? markup?)
    (_i "Attach @var{text} to @var{grob-name} at offset @var{offset}
  (use like @code{\\once})")
-   (make-music 'AnnotateOutputEvent
-              'symbol grob-name
-              'X-offset (car offset)
-              'Y-offset (cdr offset)
-              'text text))
+   (make-event-chord
+    (list
+     (make-music 'AnnotateOutputEvent
+                 'symbol grob-name
+                 'X-offset (car offset)
+                 'Y-offset (cdr offset)
+                 'text text))))
 
 balloonText =
-#(define-music-function (parser location offset text) (number-pair? markup?)
+#(define-event-function (parser location offset text) (number-pair? markup?)
    (_i "Attach @var{text} at @var{offset} (use like @code{\\tweak})")
    (make-music 'AnnotateOutputEvent
               'X-offset (car offset)
@@ -257,24 +270,24 @@ as @code{\\compoundMeter #'((3 2 8))} or shorter
          (timesig (cons (ly:moment-main-numerator mlen)
                         (ly:moment-main-denominator mlen))))
   #{
-    \once \override Staff.TimeSignature #'stencil = #(lambda (grob)
+    \once \override Staff.TimeSignature.stencil = #(lambda (grob)
       (grob-interpret-markup grob (format-compound-time args)))
-    \set Timing.timeSignatureFraction = $timesig
-    \set Timing.baseMoment = $beat
-    \set Timing.beatStructure = $beatGrouping
+    \set Timing.timeSignatureFraction = #timesig
+    \set Timing.baseMoment = #beat
+    \set Timing.beatStructure = #beatGrouping
     \set Timing.beamExceptions = #'()
-    \set Timing.measureLength = $mlen
+    \set Timing.measureLength = #mlen
   #} ))
 
 crossStaff =
 #(define-music-function (parser location notes) (ly:music?)
   (_i "Create cross-staff stems")
   #{
-  \override Stem #'cross-staff = #cross-staff-connect
-  \override Flag #'style = #'no-flag
-  $notes
-  \revert Stem #'cross-staff
-  \revert Flag #'style
+  \temporary \override Stem.cross-staff = #cross-staff-connect
+  \temporary \override Flag.style = #'no-flag
+  #notes
+  \revert Stem.cross-staff
+  \revert Flag.style
 #})
 
 cueClef =
@@ -294,7 +307,7 @@ cueDuring =
 in a CueVoice oriented by @var{dir}.")
    (make-music 'QuoteMusic
               'element main-music
-              'quoted-context-type 'Voice
+              'quoted-context-type 'CueVoice
               'quoted-context-id "cue"
               'quoted-music-name what
               'quoted-voice-direction dir))
@@ -306,7 +319,7 @@ cueDuringWithClef =
 in a CueVoice oriented by @var{dir}.")
    (make-music 'QuoteMusic
               'element main-music
-              'quoted-context-type 'Voice
+              'quoted-context-type 'CueVoice
               'quoted-context-id "cue"
               'quoted-music-name what
               'quoted-music-clef clef
@@ -329,6 +342,13 @@ displayMusic =
    (display-scheme-music music)
    music)
 
+displayScheme =
+#(define-scheme-function (parser location expr) (scheme?)
+   (_i "Display the internal representation of @var{expr} to the console.")
+   (newline)
+   (display-scheme-music expr)
+   expr)
+
 
 
 endSpanners =
@@ -341,10 +361,8 @@ without the need of a specific end spanner.")
                                  (extract-typed-music music 'span-event)))
          (stop-span-evs
           (map (lambda (m)
-                 (let ((c (music-clone m)))
-                   (set! (ly:music-property c 'span-direction) STOP)
-                   c))
-               start-span-evs))
+                 (music-clone m 'span-direction STOP))
+                start-span-evs))
          (end-ev-chord (make-music 'EventChord
                                    'elements stop-span-evs))
          (total (make-music 'SequentialMusic
@@ -378,25 +396,33 @@ featherDurations=
 
      argument))
 
+finger =
+#(define-event-function (parser location finger) (number-or-markup?)
+   (_i "Apply @var{finger} as a fingering indication.")
+
+   (make-music
+            'FingeringEvent
+            (if (number? finger) 'digit 'text)
+            finger))
+
 footnote =
-#(define-music-function (parser location mark offset grob-name footnote music)
-   ((markup?) number-pair? (symbol?) markup? (ly:music?))
-   (_i "Make the markup @var{footnote} a footnote on @var{music}.  The
+#(define-music-function (parser location mark offset footnote item)
+   ((markup?) number-pair? markup? symbol-list-or-music?)
+   (_i "Make the markup @var{footnote} a footnote on @var{item}.  The
 footnote is marked with a markup @var{mark} moved by @var{offset} with
 respect to the marked music.
 
 If @var{mark} is not given or specified as @var{\\default}, it is
-replaced by an automatically generated sequence number.  If a symbol
-@var{grob-name} is specified, then grobs of that type will be marked
-if they have @var{music} as their ultimate cause; by default all grobs
-having @var{music} as their @emph{direct} cause will be marked,
-similar to the way @code{\\tweak} works.
-
-If @var{music} is given as @code{\\default}, a footnote event
-affecting @emph{all} grobs matching @var{grob-name} at a given time
-step is generated.  This may be required for creating footnotes on
-time signatures, clefs, and other items not cooperating with
-@code{\\tweak}.
+replaced by an automatically generated sequence number.  If @var{item}
+is a symbol list of form @samp{Grob} or @samp{Context.Grob}, then
+grobs of that type will be marked at the current time step in the
+given context (default @code{Bottom}).
+
+If @var{item} is music, the music will get a footnote attached to a
+grob immediately attached to the event, like @var{\\tweak} does.  For
+attaching a footnote to an @emph{indirectly} caused grob, write
+@code{\\single\\footnote}, use @var{item} to specify the grob, and
+follow it with the music to annotate.
 
 Like with @code{\\tweak}, if you use a footnote on a following
 post-event, the @code{\\footnote} command itself needs to be attached
@@ -407,21 +433,8 @@ to the preceding note or rest as a post-event with @code{-}.")
               'Y-offset (cdr offset)
               'automatically-numbered (not mark)
               'text (or mark (make-null-markup))
-              'footnote-text footnote
-              'symbol (or grob-name '()))))
-     (cond (music
-           (set! (ly:music-property music 'tweaks)
-                 (acons (if grob-name
-                            (cons grob-name 'footnote-music)
-                            'footnote-music)
-                        mus
-                        (ly:music-property music 'tweaks)))
-           music)
-          (grob-name mus)
-          (else
-           (ly:input-warning location
-                             (_ "\\footnote requires music or grob-name"))
-           (make-music 'Music)))))
+              'footnote-text footnote)))
+     #{ \once \tweak footnote-music #mus #item #}))
 
 grace =
 #(def-grace-function startGraceMusic stopGraceMusic
@@ -441,18 +454,16 @@ harmonicByFret = #(define-music-function (parser location fret music) (number? l
 harmonics played on a fretted instrument by touching the strings at @var{fret}.")
   #{
     \set harmonicDots = ##t
-    \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label (number->string fret))
-    \override NoteHead #'Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height
-                                       (lambda (grob start end)
-                                               (ly:grob::stencil-height grob)))
-    \override NoteHead #'stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
+    \temporary \override TabNoteHead.stencil = #(tab-note-head::print-custom-fret-label (number->string fret))
+    \temporary \override NoteHead.Y-extent = #grob::always-Y-extent-from-stencil
+    \temporary \override NoteHead.stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
                                             (ly:note-head::print grob))
-    $(make-harmonic
+    #(make-harmonic
        (calc-harmonic-pitch (fret->pitch (number->string fret)) music))
     \unset harmonicDots
-    \revert TabNoteHead #'stencil
-    \revert NoteHead #'Y-extent
-    \revert NoteHead #'stencil
+    \revert TabNoteHead.stencil
+    \revert NoteHead.Y-extent
+    \revert NoteHead.stencil
   #})
 
 harmonicByRatio = #(define-music-function (parser location ratio music) (number? ly:music?)
@@ -461,20 +472,31 @@ harmonics played on a fretted instrument by touching the strings at the point
 given through @var{ratio}.")
   #{
     \set harmonicDots = ##t
-    \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label (ratio->fret ratio))
-    \override NoteHead #'Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height
+    \temporary \override TabNoteHead.stencil = #(tab-note-head::print-custom-fret-label (ratio->fret ratio))
+    \temporary \override NoteHead.Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height
                                        (lambda (grob start end)
                                                (ly:grob::stencil-height grob)))
-    \override NoteHead #'stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
+    \temporary \override NoteHead.stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
                                             (ly:note-head::print grob))
-    $(make-harmonic
+    #(make-harmonic
       (calc-harmonic-pitch (ratio->pitch ratio) music))
     \unset harmonicDots
-    \revert TabNoteHead #'stencil
-    \revert NoteHead #'Y-extent
-    \revert NoteHead #'stencil
+    \revert TabNoteHead.stencil
+    \revert NoteHead.Y-extent
+    \revert NoteHead.stencil
   #})
 
+hide =
+#(define-music-function (parser location item) (symbol-list-or-music?)
+   (_i "Set @var{item}'s @samp{transparent} property to @code{#t},
+making it invisible while still retaining its dimensions.
+
+If @var{item} is a symbol list of form @code{GrobName} or
+@code{Context.GrobName}, the result is an override for the grob name
+specified by it.  If @var{item} is a music expression, the result is
+the same music expression with an appropriate tweak applied to it.")
+   #{ \tweak transparent ##t #item #})
+
 inStaffSegno =
 #(define-music-function (parser location) ()
    (_i "Put the segno variant 'varsegno' at this position into the staff,
@@ -511,15 +533,21 @@ instrumentSwitch =
 
 
 keepWithTag =
-#(define-music-function (parser location tag music) (symbol? ly:music?)
-   (_i "Include only elements of @var{music} that are tagged with @var{tag}.")
+#(define-music-function (parser location tag music)
+   (symbol-list-or-symbol? ly:music?)
+   (_i "Include only elements of @var{music} that are either untagged
+or tagged with one of the tags in @var{tag}.  @var{tag} may be either
+a single symbol or a list of symbols.")
    (music-filter
-    (lambda (m)
-      (let* ((tags (ly:music-property m 'tags))
-            (res (memq tag tags)))
-       (or
-        (eq? tags '())
-        res)))
+    (if (symbol? tag)
+        (lambda (m)
+          (let ((music-tags (ly:music-property m 'tags)))
+            (or (null? music-tags)
+                (memq tag music-tags))))
+        (lambda (m)
+          (let ((music-tags (ly:music-property m 'tags)))
+            (or (null? music-tags)
+                (any (lambda (t) (memq t music-tags)) tag)))))
     music))
 
 key =
@@ -664,17 +692,79 @@ octaveCheck =
    (make-music 'RelativeOctaveCheck
                'pitch pitch))
 
+offset =
+#(define-music-function (parser location property offsets item)
+  (symbol-list-or-symbol? scheme? symbol-list-or-music?)
+   (_i "Offset the default value of @var{property} of @var{item} by
+@var{offsets}.  If @var{item} is a string, the result is
+@code{\\override} for the specified grob type.  If @var{item} is
+a music expression, the result is the same music expression with an
+appropriate tweak applied.")
+  (if (ly:music? item)
+      ; In case of a tweak, grob property path is Grob.property
+      (let ((prop-path (check-grob-path
+                         (if (symbol? property)
+                             (list property)
+                             property)
+                         parser location
+                         #:start 1 #:default #t #:min 2 #:max 2)))
+        (if prop-path
+            ; If the head of the grob property path is a symbol--i.e.,
+            ; a grob name, produce a directed tweak.  Otherwise, create
+            ; an ordinary tweak.
+            (if (symbol? (car prop-path))
+                #{
+                  \tweak #prop-path #(offsetter (second prop-path) offsets) #item
+                #}
+                #{
+                  \tweak #(second prop-path) #(offsetter (second prop-path) offsets) #item
+                #})
+            item))
+      ; In case of an override, grob property path is Context.Grob.property.
+      (let ((prop-path (check-grob-path
+                         (append item
+                                 (if (symbol? property)
+                                     (list property)
+                                     property))
+                         parser location
+                         #:default 'Bottom #:min 3 #:max 3)))
+        (if prop-path
+            #{
+              \override #prop-path = #(offsetter (third prop-path) offsets)
+            #}
+            (make-music 'Music)))))
+omit =
+#(define-music-function (parser location item) (symbol-list-or-music?)
+   (_i "Set @var{item}'s @samp{stencil} property to @code{#f},
+effectively omitting it without taking up space.
+
+If @var{item} is a symbol list of form @code{GrobName} or
+@code{Context.GrobName}, the result is an override for the grob name
+specified by it.  If @var{item} is a music expression, the result is
+the same music expression with an appropriate tweak applied to it.")
+   #{ \tweak stencil ##f #item #})
+
 once =
 #(define-music-function (parser location music) (ly:music?)
-   (_i "Set @code{once} to @code{#t} on all layout instruction events in @var{music}.")
-   (music-map
-    (lambda (m)
-      (cond ((music-is-of-type? m 'layout-instruction-event)
-            (set! (ly:music-property m 'once) #t))
-           ((ly:duration? (ly:music-property m 'duration))
-            (ly:music-warning m (_ "Cannot apply \\once to timed music"))))
-      m)
-    music))
+   (_i "Set @code{once} to @code{#t} on all layout instruction events
+in @var{music}.  This will complain about music with an actual
+duration.  As a special exception, if @var{music} contains
+@samp{tweaks} it will be silently ignored in order to allow for
+@code{\\once \\tweak} to work as both one-time override and proper
+tweak.")
+   (if (not (pair? (ly:music-property music 'tweaks)))
+       (for-some-music
+        (lambda (m)
+          (cond ((music-is-of-type? m 'layout-instruction-event)
+                 (set! (ly:music-property m 'once) #t)
+                 #t)
+                ((ly:duration? (ly:music-property m 'duration))
+                 (ly:music-warning m (_ "Cannot apply \\once to timed music"))
+                 #t)
+                (else #f)))
+        music))
+   music)
 
 ottava =
 #(define-music-function (parser location octave) (integer?)
@@ -685,7 +775,7 @@ ottava =
 overrideTimeSignatureSettings =
 #(define-music-function
    (parser location time-signature base-moment beat-structure beam-exceptions)
-   (pair? pair? cheap-list? cheap-list?)
+   (fraction? fraction? list? list?)
 
    (_i "Override @code{timeSignatureSettings}
 for time signatures of @var{time-signature} to have settings
@@ -697,31 +787,30 @@ of @var{base-moment}, @var{beat-structure}, and @var{beam-exceptions}.")
     (override-time-signature-setting time-signature setting)))
 
 overrideProperty =
-#(define-music-function (parser location name property value)
-   (string? symbol? scheme?)
+#(define-music-function (parser location grob-property-path value)
+   (symbol-list? scheme?)
 
-   (_i "Set @var{property} to @var{value} in all grobs named @var{name}.
-The @var{name} argument is a string of the form @code{\"Context.GrobName\"}
-or @code{\"GrobName\"}.")
+   (_i "Set the grob property specified by @var{grob-property-path} to
+@var{value}.  @var{grob-property-path} is a symbol list of the form
+@code{Context.GrobName.property} or @code{GrobName.property}, possibly
+with subproperties given as well.")
+   (let ((p (check-grob-path grob-property-path parser location
+                             #:default 'Bottom
+                             #:min 3)))
+     (if p
+         (make-music 'ApplyOutputEvent
+                     'context-type (first p)
+                     'procedure
+                     (lambda (grob orig-context context)
+                       (if (equal?
+                            (cdr (assoc 'name (ly:grob-property grob 'meta)))
+                            (second p))
+                           (ly:grob-set-nested-property!
+                            grob (cddr p) value))))
+         (make-music 'Music))))
 
-   (let ((name-components (string-split name #\.))
-        (context-name 'Bottom)
-        (grob-name #f))
 
-     (if (> 2 (length name-components))
-        (set! grob-name (string->symbol (car name-components)))
-        (begin
-          (set! grob-name (string->symbol (list-ref name-components 1)))
-          (set! context-name (string->symbol (list-ref name-components 0)))))
 
-     (make-music 'ApplyOutputEvent
-                'context-type context-name
-                'procedure
-                (lambda (grob orig-context context)
-                  (if (equal?
-                       (cdr (assoc 'name (ly:grob-property grob 'meta)))
-                       grob-name)
-                      (set! (ly:grob-property grob property) value))))))
 
 
 
@@ -777,93 +866,102 @@ Example:
   C = { e e | f f | }
 @end verbatim
 ")
-   (let* ((voices (apply circular-list (make-list (length voice-ids) (list))))
-         (current-voices voices)
-         (current-sequence (list))
-         (original music)
-         (wrapper #f))
-     ;;
-     ;; utilities
-     (define (push-music m)
-       "Push the music expression into the current sequence"
-       (set! current-sequence (cons m current-sequence)))
-     (define (change-voice)
-       "Stores the previously built sequence into the current voice and
+   (define (bar-check? m)
+     "Checks whether m is a bar check."
+     (eq? (ly:music-property m 'name) 'BarCheck))
+   (define (recurse-and-split music)
+     "This returns either a list of music split along barchecks, or
+@code{#f}."
+     (let ((elt (ly:music-property music 'element))
+           (elts (ly:music-property music 'elements)))
+       (cond ((ly:music? elt)
+              (let ((lst (recurse-and-split elt)))
+                (and lst
+                     (map
+                      (lambda (x)
+                        (let ((res (music-clone music 'element x)))
+                          (if (ly:input-location?
+                               (ly:music-property x 'origin))
+                              (set! (ly:music-property res 'origin)
+                                    (ly:music-property x 'origin)))
+                          res))
+                      lst))))
+             ((any bar-check? elts)
+              (let* ((voices (apply circular-list
+                                    (make-list (length voice-ids)
+                                               '())))
+                     (current-voices voices)
+                     (current-sequence '()))
+                ;;
+                ;; utilities
+                (define (push-music m)
+                  "Push the music expression into the current sequence"
+                  (set! current-sequence (cons m current-sequence)))
+                (define (change-voice)
+                  "Stores the previously built sequence into the current voice and
        change to the following voice."
-       (list-set! current-voices 0 (cons (make-music 'SequentialMusic
-                                                    'elements (reverse! current-sequence))
-                                        (car current-voices)))
-       (set! current-sequence (list))
-       (set! current-voices (cdr current-voices)))
-     (define (bar-check? m)
-       "Checks whether m is a bar check."
-       (eq? (ly:music-property m 'name) 'BarCheck))
-     (define (music-origin music)
-       "Recursively search an origin location stored in music."
-       (cond ((null? music) #f)
-            ((not (null? (ly:music-property music 'origin)))
-             (ly:music-property music 'origin))
-            (else (or (music-origin (ly:music-property music 'element))
-                      (let ((origins (remove not (map music-origin
-                                                      (ly:music-property music 'elements)))))
-                        (and (not (null? origins)) (car origins)))))))
-     (while (music-is-of-type? music 'music-wrapper-music)
-           (set! wrapper music)
-           (set! music (ly:music-property wrapper 'element)))
-     (if wrapper
-        (set! (ly:music-property wrapper 'element)
-                                 (make-music 'SequentialMusic
-                                             'origin location))
-        (set! original
-              (make-music 'SequentialMusic
-                          'origin location)))
-     ;;
-     ;; first, split the music and fill in voices
-     ;; We flatten direct layers of SequentialMusic since they are
-     ;; pretty much impossible to avoid when writing music functions.
-     (let rec ((music music))
-       (for-each (lambda (m)
-                  (if (eq? (ly:music-property m 'name) 'SequentialMusic)
-                      (rec m)
-                      (begin
-                        (push-music m)
-                        (if (bar-check? m) (change-voice)))))
-                (ly:music-property music 'elements)))
-     (if (not (null? current-sequence)) (change-voice))
-     ;; un-circularize `voices' and reorder the voices
-     (set! voices (map-in-order (lambda (dummy seqs)
-                                 (reverse! seqs))
-                               voice-ids voices))
-     ;;
-     ;; set origin location of each sequence in each voice
-     ;; for better type error tracking
-     (for-each (lambda (voice)
-                (for-each (lambda (seq)
-                            (set! (ly:music-property seq 'origin)
-                                  (or (music-origin seq) location)))
-                          voice))
-              voices)
-     ;;
-     ;; check sequence length
-     (apply for-each (lambda* (#:rest seqs)
-                             (let ((moment-reference (ly:music-length (car seqs))))
-                               (for-each (lambda (seq moment)
-                                           (if (not (equal? moment moment-reference))
-                                               (ly:music-warning seq
-                                                                 "Bars in parallel music don't have the same length")))
-                                         seqs (map-in-order ly:music-length seqs))))
-           voices)
-     ;;
-     ;; bind voice identifiers to the voices
-     (for-each (lambda (voice-id voice)
-           (ly:parser-define! parser voice-id
-                              (let ((v (ly:music-deep-copy original)))
-                                (set! (ly:music-property
-                                       (car (extract-named-music
-                                             v 'SequentialMusic))
-                                       'elements) voice)
-                                v)))
-         voice-ids voices)))
+                  (set-car! current-voices
+                            (cons (reverse! current-sequence)
+                                  (car current-voices)))
+                  (set! current-sequence '())
+                  (set! current-voices (cdr current-voices)))
+                (for-each (lambda (m)
+                            (let ((split? (recurse-and-split m)))
+                              (if split?
+                                  (for-each
+                                   (lambda (m)
+                                     (push-music m)
+                                     (change-voice))
+                                   split?)
+                                  (begin
+                                    (push-music m)
+                                    (if (bar-check? m) (change-voice))))))
+                          elts)
+                (if (pair? current-sequence) (change-voice))
+                ;; un-circularize `voices' and reorder the voices
+
+                (set! voices (map reverse!
+                                  (list-head voices (length voice-ids))))
+
+                ;; check sequence length
+                (apply for-each (lambda seqs
+                                  (define (seq-len seq)
+                                    (reduce ly:moment-add
+                                            (ly:make-moment 0)
+                                            (map ly:music-length seq)))
+                                  (let ((moment-reference (seq-len (car seqs))))
+                                    (for-each (lambda (seq)
+                                                (if (not (equal? (seq-len seq)
+                                                                 moment-reference))
+                                                    (ly:music-warning
+                                                     (if (pair? seq)
+                                                         (last seq)
+                                                         (caar seqs))
+                                                     (_ "Bars in parallel music don't have the same length"))))
+                                              seqs)))
+                       voices)
+                (map
+                 (lambda (lst)
+                   (set! lst (concatenate! lst))
+                   (let ((res (music-clone music 'elements lst)))
+                     (if (and (pair? lst)
+                              (ly:input-location? (ly:music-property
+                                                   (car lst)
+                                                   'origin)))
+                         (set! (ly:music-property res 'origin)
+                               (ly:music-property (car lst) 'origin)))
+                     res))
+                 voices)))
+             (else #f))))
+   (let ((voices (recurse-and-split music)))
+     (if voices
+         ;;
+         ;; bind voice identifiers to the voices
+         (for-each (lambda (voice-id voice)
+                     (ly:parser-define! parser voice-id voice))
+         voice-ids voices)
+         (ly:music-warning music
+                           (_ "ignoring parallel music without barchecks")))))
 
 parenthesize =
 #(define-music-function (parser loc arg) (ly:music?)
@@ -932,7 +1030,7 @@ partial =
     (descend-to-context
      (context-spec-music (make-music 'PartialSet
                                     'origin location
-                                    'partial-duration dur)
+                                    'duration dur)
                         'Timing)
      'Score))
 
@@ -988,20 +1086,40 @@ usually contains spacers or multi-measure rests.")
 
 relative =
 #(define-music-function (parser location pitch music)
-   ((ly:pitch? (ly:make-pitch 0 0 0)) ly:music?)
-   (_i "Make @var{music} relative to @var{pitch} (default @code{c'}).")
-   (ly:make-music-relative! music pitch)
+   ((ly:pitch?) ly:music?)
+   (_i "Make @var{music} relative to @var{pitch}.  If @var{pitch} is
+omitted, the first note in @var{music} is given in absolute pitch.")
+   ;; When \relative has no clear decision (can only happen with
+   ;; scales with an even number of steps), it goes down (see
+   ;; pitch.cc).  The following formula puts out f for both the normal
+   ;; 7-step scale as well as for a "shortened" scale missing the
+   ;; final b.  In either case, a first note of c will end up as c,
+   ;; namely pitch (-1, 0, 0).
+   (ly:make-music-relative! music
+                            (or pitch
+                                (ly:make-pitch
+                                 -1
+                                 (quotient
+                                  ;; size of current scale:
+                                  (ly:pitch-steps (ly:make-pitch 1 0))
+                                  2))))
    (make-music 'RelativeOctaveMusic
               'element music))
 
 removeWithTag =
-#(define-music-function (parser location tag music) (symbol? ly:music?)
-   (_i "Remove elements of @var{music} that are tagged with @var{tag}.")
+#(define-music-function (parser location tag music)
+   (symbol-list-or-symbol? ly:music?)
+   (_i "Remove elements of @var{music} that are tagged with one of the
+tags in @var{tag}.  @var{tag} may be either a single symbol or a list
+of symbols.")
    (music-filter
-    (lambda (m)
-      (let* ((tags (ly:music-property m 'tags))
-            (res (memq tag tags)))
-       (not res)))
+    (if (symbol? tag)
+        (lambda (m)
+          (not (memq tag (ly:music-property m 'tags))))
+        (lambda (m)
+          (let ((music-tags (ly:music-property m 'tags)))
+            (or (null? music-tags)
+                (not (any (lambda (t) (memq t music-tags)) tag))))))
     music))
 
 resetRelativeOctave =
@@ -1028,13 +1146,12 @@ for time signatures of @var{time-signature}.")
    (revert-time-signature-setting time-signature))
 
 rightHandFinger =
-#(define-event-function (parser location finger) (number-or-string?)
+#(define-event-function (parser location finger) (number-or-markup?)
    (_i "Apply @var{finger} as a fingering indication.")
 
    (make-music
             'StrokeFingerEvent
-            'origin location
-            (if (string? finger) 'text 'digit)
+            (if (number? finger) 'digit 'text)
             finger))
 
 scaleDurations =
@@ -1095,12 +1212,16 @@ a context modification duplicating their effect.")
      mods))
 
 shape =
-#(define-music-function (parser location grob offsets)
-   (string? list?)
-   (_i "Offset control-points of @var{grob} by @var{offsets}.  The argument
-is a list of number pairs or list of such lists.  Each element of a pair
-represents an offset to one of the coordinates of a control-point.")
-   (define ((shape-curve offsets) grob)
+#(define-music-function (parser location offsets item)
+   (list? symbol-list-or-music?)
+   (_i "Offset control-points of @var{item} by @var{offsets}.  The
+argument is a list of number pairs or list of such lists.  Each
+element of a pair represents an offset to one of the coordinates of a
+control-point.  If @var{item} is a string, the result is
+@code{\\once\\override} for the specified grob type.  If @var{item} is
+a music expression, the result is the same music expression with an
+appropriate tweak applied.")
+   (define (shape-curve grob)
      (let* ((orig (ly:grob-original grob))
             (siblings (if (ly:spanner? grob)
                           (ly:spanner-broken-into orig) '()))
@@ -1131,10 +1252,7 @@ represents an offset to one of the coordinates of a control-point.")
        (if (>= total-found 2)
            (helper siblings offsets)
            (offset-control-points (car offsets)))))
-
-   #{
-     \once \override $grob #'control-points = #(shape-curve offsets)
-   #})
+   #{ \once \tweak control-points #shape-curve #item #})
 
 shiftDurations =
 #(define-music-function (parser location dur dots arg)
@@ -1146,6 +1264,30 @@ shiftDurations =
     (lambda (x)
       (shift-one-duration-log x dur dots)) arg))
 
+single =
+#(define-music-function (parser location overrides music)
+   (ly:music? ly:music?)
+   (_i "Convert @var{overrides} to tweaks and apply them to @var{music}.
+This does not convert @code{\\revert}, @code{\\set} or @code{\\unset}.")
+   (set! (ly:music-property music 'tweaks)
+         (fold-some-music
+          (lambda (m) (eq? (ly:music-property m 'name)
+                           'OverrideProperty))
+          (lambda (m tweaks)
+            (let ((p (cond
+                      ((ly:music-property m 'grob-property #f) => list)
+                      (else
+                       (ly:music-property m 'grob-property-path)))))
+              (acons (cons (ly:music-property m 'symbol) ;grob name
+                           (if (pair? (cdr p))
+                               p ;grob property path
+                               (car p))) ;grob property
+                     (ly:music-property m 'grob-value)
+                     tweaks)))
+          (ly:music-property music 'tweaks)
+          overrides))
+   music)
+
 skip =
 #(define-music-function (parser location dur) (ly:duration?)
   (_i "Skip forward by @var{dur}.")
@@ -1163,28 +1305,70 @@ spacingTweaks =
    (_i "Set the system stretch, by reading the 'system-stretch property of
 the `parameters' assoc list.")
    #{
-     \overrideProperty #"Score.NonMusicalPaperColumn"
-     #'line-break-system-details
+     \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
      #(list (cons 'alignment-extra-space (cdr (assoc 'system-stretch parameters)))
             (cons 'system-Y-extent (cdr (assoc 'system-Y-extent parameters))))
    #})
 
 styledNoteHeads =
 #(define-music-function (parser location style heads music)
-   (symbol? list-or-symbol? ly:music?)
+   (symbol? symbol-list-or-symbol? ly:music?)
    (_i "Set @var{heads} in @var{music} to @var{style}.")
    (style-note-heads heads style music))
 
 tag =
-#(define-music-function (parser location tag arg) (symbol? ly:music?)
-
-   (_i "Add @var{tag} to the @code{tags} property of @var{arg}.")
+#(define-music-function (parser location tag music) (symbol-list-or-symbol? ly:music?)
+   (_i "Tag the following @var{music} with @var{tag} and return the
+result, by adding the single symbol or symbol list @var{tag} to the
+@code{tags} property of @var{music}.")
 
    (set!
-    (ly:music-property arg 'tags)
-    (cons tag
-         (ly:music-property arg 'tags)))
-   arg)
+    (ly:music-property music 'tags)
+    ((if (symbol? tag) cons append)
+     tag
+     (ly:music-property music 'tags)))
+   music)
+
+temporary =
+#(define-music-function (parser location music)
+   (ly:music?)
+   (_i "Make any @code{\\override} in @var{music} replace an existing
+grob property value only temporarily, restoring the old value when a
+corresponding @code{\\revert} is executed.  This is achieved by
+clearing the @samp{pop-first} property normally set on
+@code{\\override}s.
+
+An @code{\\override}/@/@code{\\revert} sequence created by using
+@code{\\temporary} and @code{\\undo} on the same music containing
+overrides will cancel out perfectly or cause a@tie{}warning.
+
+Non-property-related music is ignored, warnings are generated for any
+property-changing music that isn't an @code{\\override}.")
+   (define warned #f)
+   (for-some-music
+    (lambda (m)
+      (and (or (music-is-of-type? m 'layout-instruction-event)
+               (music-is-of-type? m 'context-specification)
+               (music-is-of-type? m 'apply-context)
+               (music-is-of-type? m 'time-signature-music))
+           (case (ly:music-property m 'name)
+             ((OverrideProperty)
+              (if (ly:music-property m 'pop-first #f)
+                  (set! (ly:music-property m 'pop-first) '()))
+              (if (ly:music-property m 'once #f)
+                  (set! (ly:music-property m 'once) '()))
+              #t)
+             ((ContextSpeccedMusic)
+              #f)
+             (else
+              (if (not warned)
+                  (begin
+                    (ly:input-warning location (_ "Cannot make ~a revertible")
+                                      (ly:music-property m 'name))
+                    (set! warned #t)))
+              #t))))
+    music)
+   music)
 
 time =
 #(define-music-function (parser location beat-structure fraction)
@@ -1227,10 +1411,12 @@ as a first or second voice.")
 
    (make-music 'QuoteMusic
               'element main-music
-              'quoted-context-type 'Voice
+              'quoted-context-type 'CueVoice
               'quoted-context-id "cue"
               'quoted-music-name what
               'quoted-voice-direction dir
+               ;; following is inverse of instrumentTransposition for
+               ;; historical reasons
               'quoted-transposition pitch))
 
 transposition =
@@ -1238,32 +1424,149 @@ transposition =
    (_i "Set instrument transposition")
 
    (context-spec-music
-    (make-property-set 'instrumentTransposition
-                       (ly:pitch-negate pitch))
+    (make-property-set 'instrumentTransposition pitch)
     'Staff))
 
+tuplet =
+#(define-music-function (parser location ratio tuplet-span music)
+   (fraction? (ly:duration? '()) ly:music?)
+   (_i "Scale the given @var{music} to tuplets.  @var{ratio} is a
+fraction that specifies how many notes are played in place of the
+nominal value: it will be @samp{3/2} for triplets, namely three notes
+being played in place of two.  If the optional duration
+@var{tuplet-span} is specified, it is used instead of
+@code{tupletSpannerDuration} for grouping the tuplets.
+For example,
+@example
+\\tuplet 3/2 4 @{ c8 c c c c c @}
+@end example
+will result in two groups of three tuplets, each group lasting for a
+quarter note.")
+   (make-music 'TimeScaledMusic
+               'element (ly:music-compress
+                         music
+                         (ly:make-moment (cdr ratio) (car ratio)))
+               'numerator (cdr ratio)
+               'denominator (car ratio)
+               'duration tuplet-span))
+
+tupletSpan =
+#(define-music-function (parser location tuplet-span)
+   ((ly:duration?))
+   (_i "Set @code{tupletSpannerDuration}, the length into which
+@code{\\tuplet} without an explicit @samp{tuplet-span} argument of its
+own will group its tuplets, to the duration @var{tuplet-span}.  To
+revert to the default of not subdividing the contents of a @code{\\tuplet}
+command without explicit @samp{tuplet-span}, use
+@example
+\\tupletSpan \\default
+@end example
+")
+   (if tuplet-span
+       #{ \set tupletSpannerDuration = #(ly:duration-length tuplet-span) #}
+       #{ \unset tupletSpannerDuration #}))
+
 tweak =
-#(define-music-function (parser location grob prop value music)
-   ((string?) symbol? scheme? ly:music?)
-   (_i "Add a tweak to the following @var{music}.
-Layout objects created by @var{music} get their property @var{prop}
-set to @var{value}.  If @var{grob} is specified, like with
+#(define-music-function (parser location prop value item)
+   (symbol-list-or-symbol? scheme? symbol-list-or-music?)
+   (_i "Add a tweak to the following @var{item}, usually music.
+Layout objects created by @var{item} get their property @var{prop}
+set to @var{value}.  If @var{prop} has the form @samp{Grob.property}, like with
 @example
-\\tweak Accidental #'color #red cis'
+\\tweak Accidental.color #red cis'
 @end example
 an indirectly created grob (@samp{Accidental} is caused by
 @samp{NoteHead}) can be tweaked; otherwise only directly created grobs
-are affected.")
-   (if (not (object-property prop 'backend-type?))
-       (begin
-        (ly:input-warning location (_ "cannot find property type-check for ~a") prop)
-        (ly:warning (_ "doing assignment anyway"))))
-   (set!
-    (ly:music-property music 'tweaks)
-    (acons (if grob (cons (string->symbol grob) prop) prop)
-          value
-          (ly:music-property music 'tweaks)))
-   music)
+are affected.
+
+As a special case, @var{item} may be a symbol list specifying a grob
+path, in which case @code{\\override} is called on it instead of
+creating tweaked music.  This is mainly useful when using
+@code{\\tweak} as as a component for building other functions.
+
+If this use case would call for @code{\\once \\override} rather than a
+plain @code{\\override}, writing @code{\\once \\tweak @dots{}} can be
+convenient.
+
+@var{prop} can contain additional elements in which case a nested
+property (inside of an alist) is tweaked.")
+   (if (ly:music? item)
+       (let ((p (check-grob-path prop parser location
+                                 #:start 1
+                                 #:default #t
+                                 #:min 2)))
+         (if p
+             (set! (ly:music-property item 'tweaks)
+                   (acons (cond ((pair? (cddr p)) p)
+                                ((symbol? (car p))
+                                 (cons (car p) (cadr p)))
+                                (else (cadr p)))
+                          value
+                          (ly:music-property item 'tweaks))))
+         item)
+       ;; We could just throw this at \override and let it sort this
+       ;; out on its own, but this way we should get better error
+       ;; diagnostics.
+       (let ((p (check-grob-path
+                 (append item (if (symbol? prop) (list prop) prop))
+                 parser location
+                 #:default 'Bottom #:min 3)))
+         (if p
+             #{ \override #p = #value #}
+             (make-music 'Music)))))
+
+undo =
+#(define-music-function (parser location music)
+   (ly:music?)
+   (_i "Convert @code{\\override} and @code{\\set} in @var{music} to
+@code{\\revert} and @code{\\unset}, respectively.  Any reverts and
+unsets already in @var{music} cause a warning.  Non-property-related music is ignored.")
+   (define warned #f)
+   (let loop
+       ((music music))
+     (let
+         ((lst
+           (fold-some-music
+            (lambda (m) (or (music-is-of-type? m 'layout-instruction-event)
+                            (music-is-of-type? m 'context-specification)
+                            (music-is-of-type? m 'apply-context)
+                            (music-is-of-type? m 'time-signature-music)))
+            (lambda (m overrides)
+              (case (ly:music-property m 'name)
+                ((OverrideProperty)
+                 (cons
+                  (make-music 'RevertProperty
+                              'symbol (ly:music-property m 'symbol)
+                              'grob-property-path
+                              (cond
+                               ((ly:music-property m 'grob-property #f) => list)
+                               (else
+                                (ly:music-property m 'grob-property-path))))
+                  overrides))
+                ((PropertySet)
+                 (cons
+                  (make-music 'PropertyUnset
+                              'symbol (ly:music-property m 'symbol))
+                  overrides))
+                ((ContextSpeccedMusic)
+                 (cons
+                  (make-music 'ContextSpeccedMusic
+                              'element (loop (ly:music-property m 'element))
+                              'context-type (ly:music-property m 'context-type))
+                  overrides))
+                (else
+                 (if (not warned)
+                     (begin
+                       (ly:input-warning location (_ "Cannot revert ~a")
+                                         (ly:music-property m 'name))
+                       (set! warned #t)))
+                 overrides)))
+            '()
+            music)))
+       (cond
+        ((null? lst) (make-music 'Music))
+        ((null? (cdr lst)) (car lst))
+        (else (make-sequential-music lst))))))
 
 unfoldRepeats =
 #(define-music-function (parser location music) (ly:music?)
index c50681c27866b3b034e0249912487593c3d66ca7..07ee79176b16ae316671d52980d1737a493c8f66 100644 (file)
@@ -97,9 +97,9 @@
   %%
   %% Page breaking
   %%
-  blank-after-score-page-force = 2
-  blank-last-page-force = 0
-  blank-page-force = 5
+  blank-after-score-page-penalty = 2
+  blank-last-page-penalty = 0
+  blank-page-penalty = 5
   page-breaking = #ly:optimal-breaking
 
 
index fddfbf09188e839542ae21ad77fdf281f3fb37b4..1a383607f1ea2c4d068edcf322f3cb5cf0ef2e6f 100644 (file)
@@ -16,7 +16,7 @@
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.16.0"
+\version "2.17.14"
 
 %%
 %% setup for Request->Element conversion.
   \name Staff
   \accepts Voice
   \accepts CueVoice
+  \accepts NullVoice
   \defaultchild Voice
 
   \consists "Staff_performer"
   \consists "Key_performer"
+  \consists "Midi_control_function_performer"
 }
 
 \context {
   \name Global
   \accepts Score
+  \defaultchild Score
   \description "Hard coded entry point for LilyPond.  Cannot be tuned."
-  EventClasses = #all-event-classes
 }
 
 \context {
@@ -48,6 +50,7 @@
   \alias Staff
   \consists "Staff_performer"
   \consists "Key_performer"
+  \consists "Midi_control_function_performer"
 }
 
 \context {
@@ -59,6 +62,7 @@
   \defaultchild VaticanaVoice
   \consists "Staff_performer"
   \consists "Key_performer"
+  \consists "Midi_control_function_performer"
 }
 
 \context {
@@ -70,6 +74,7 @@
   \alias Staff
   \consists "Staff_performer"
   \consists "Key_performer"
+  \consists "Midi_control_function_performer"
 }
 
 \context {
 \context {
   \Voice
   \name TabVoice
-  autoBeaming = ##f  % needed for consistent melismata with engravers
 }
 
 \context {
   \name "Devnull"
 }
 
+\context {
+  \type "Performer_Group"
+  \name NullVoice
+  \alias Staff
+  \alias Voice
+  %% needed for melismata
+  %% TODO: at least the tie performer likely does not work without the
+  %% Note_performer, but I don't know how to shut note output off in
+  %% MIDI.
+  \consists "Tie_performer"
+  \consists "Beam_performer"
+  \consists "Slur_performer"
+}
+
 \context {
   \Staff
   \name TabStaff
   \alias Staff
   \accepts TabVoice
   \defaultchild TabVoice
+  autoBeaming = ##f  % needed for consistent melismata with engravers
 }
 
 \context {
   \name Score
 
   melismaBusyProperties = #default-melisma-properties
-  autoBeaming = ##t  % needed for consistent melismata with engravers
   instrumentName = #"bright acoustic"
   midiChannelMapping = #'staff
 
   %% quarter = 60
-  tempoWholesPerMinute = #(ly:make-moment 15 1)
+  tempoWholesPerMinute = #(ly:make-moment 15/1)
 
   \accepts Staff
   \accepts DrumStaff
   %% Timing variables in layout definitions before any
   %% Timing_translator has been run.
 
+  timeSignatureSettings = #default-time-signature-settings
   timeSignatureFraction = 4/4
+  autoBeaming = ##t  % needed for consistent melismata with engravers
 
-%% These defaults should be the same as the rules established in
-%%   scm/time-signature-settings.scm for 4/4 time
-  measureLength = #(ly:make-moment 4 4)
-  baseMoment = #(ly:make-moment 1  4)
+  %% Other beaming variables are not important as autobeams don't affect
+  %% the Midi.  Melismata are only affected by beams when autobeaming
+  %% is switched off.
 
   \consists "Timing_translator"
 
   \type "Performer_group"
   \consists "Staff_performer"
   \accepts ChordNameVoice
+  \defaultchild ChordNameVoice
   \name ChordNames
 }
 
 \context {
-  \type "Performer_group"
-  \consists "Note_performer"
+  \Voice
   \name ChordNameVoice
 }
 
index 71000148b6708d4770c60beac2e1a35bcf7df470..705e9628720702b5f24ad21daf9948a2a268f3fb 100644 (file)
 % chord-shape-table
 
 addChordShape =
-#(define-music-function (parser location key-symbol tuning shape-definition)
+#(define-void-function (parser location key-symbol tuning shape-definition)
    (symbol? pair? string-or-pair?)
    (_i "Add chord shape @var{shape-definition} to the @var{chord-shape-table}
 hash with the key @code{(cons @var{key-symbol} @var{tuning})}.")
    (hash-set! chord-shape-table
                (cons key-symbol tuning)
-               shape-definition)
-   (make-music 'SequentialMusic 'void #t))
+               shape-definition))
 
 #(define (chord-shape shape-code tuning)
    (get-chord-shape shape-code tuning chord-shape-table))
@@ -62,7 +61,7 @@ table @code{rest}."
 % fretboard-table
 
 storePredefinedDiagram =
-#(define-music-function
+#(define-void-function
    (parser location fretboard-table chord tuning diagram-definition)
    (hash-table? ly:music? pair? string-or-pair?)
   (_i "Add predefined fret diagram defined by @var{diagram-definition}
@@ -75,5 +74,4 @@ storePredefinedDiagram =
                                  diagram-definition)))
   (hash-set! fretboard-table
              hash-key
-             verbose-definition)
-  (make-music 'SequentialMusic 'void #t)))
+             verbose-definition)))
index e36c3c04650fb83ac0a00bd150bc0d19bde1c694..42a1d5100c8c2732ed72ac729fa0fe90e8124fe0 100644 (file)
@@ -1,6 +1,6 @@
 % property-init.ly
 
-\version "2.16.0"
+\version "2.17.24"
 
 %% for dashed slurs, phrasing slurs, and ties
 #(define (make-simple-dash-definition dash-fraction dash-period)
@@ -13,18 +13,21 @@ defaultNoteHeads =
    (_i "Revert to the default note head style.")
    (revert-head-style '(NoteHead TabNoteHead)))
 
-
 accidentalStyle =
 #(define-music-function
-   (parser location context style) ((symbol?) string?)
-   (_i "Set accidental style to @var{style}, a string.  If an optional
-@var{context} symbol is given, e.g. @code{#'Staff} or @code{#'Voice},
-the settings are applied to that context.  Otherwise, the context
-defaults to @samp{Staff}, except for piano styles, which use
-@samp{GrandStaff} as a context." )
-   (if context
-       (set-accidental-style (string->symbol style) context)
-       (set-accidental-style (string->symbol style))))
+   (parser location style) (symbol-list?)
+   (_i "Set accidental style to symbol list @var{style} in the form
+@samp{piano-cautionary}.  If @var{style} has a form like
+@samp{Staff.piano-cautionary}, the settings are applied to that
+context.  Otherwise, the context defaults to @samp{Staff}, except for
+piano styles, which use @samp{GrandStaff} as a context." )
+   (case (length style)
+    ((1) (set-accidental-style (car style)))
+    ((2) (set-accidental-style (cadr style) (car style)))
+    (else
+     (ly:parser-error parser (_ "not an accidental style")
+      location)
+     (make-music 'Music))))
 
 %% arpeggios
 
@@ -35,34 +38,34 @@ defaults to @samp{Staff}, except for piano styles, which use
 
 arpeggio = #(make-music 'ArpeggioEvent)
 arpeggioArrowUp = {
-  \revert Arpeggio  #'stencil
-  \revert Arpeggio #'X-extent
-  \override Arpeggio  #'arpeggio-direction = #UP
+  \revert Arpeggio.stencil
+  \revert Arpeggio.X-extent
+  \override Arpeggio.arpeggio-direction = #UP
 }
 arpeggioArrowDown = {
-  \revert Arpeggio #'stencil
-  \revert Arpeggio #'X-extent
-  \override Arpeggio  #'arpeggio-direction = #DOWN
+  \revert Arpeggio.stencil
+  \revert Arpeggio.X-extent
+  \override Arpeggio.arpeggio-direction = #DOWN
 }
 arpeggioNormal = {
-  \revert Arpeggio #'stencil
-  \revert Arpeggio #'X-extent
-  \revert Arpeggio #'arpeggio-direction
-  \revert Arpeggio #'dash-definition
+  \revert Arpeggio.stencil
+  \revert Arpeggio.X-extent
+  \revert Arpeggio.arpeggio-direction
+  \revert Arpeggio.dash-definition
 }
 arpeggioBracket = {
-  \revert Arpeggio #'X-extent
-  \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket
+  \revert Arpeggio.X-extent
+  \override Arpeggio.stencil = #ly:arpeggio::brew-chord-bracket
 }
 arpeggioParenthesis = {
-  \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur
-  \override Arpeggio #'X-extent = #ly:grob::stencil-width
-  \revert Arpeggio #'dash-definition
+  \override Arpeggio.stencil = #ly:arpeggio::brew-chord-slur
+  \override Arpeggio.X-extent = #ly:grob::stencil-width
+  \revert Arpeggio.dash-definition
 }
 arpeggioParenthesisDashed = {
-  \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur
-  \override Arpeggio #'X-extent = #ly:grob::stencil-width
-  \override Arpeggio #'dash-definition = #'((0 1 0.4 0.75))
+  \override Arpeggio.stencil = #ly:arpeggio::brew-chord-slur
+  \override Arpeggio.X-extent = #ly:grob::stencil-width
+  \override Arpeggio.dash-definition = #'((0 1 0.4 0.75))
 }
 
 
@@ -75,15 +78,32 @@ autoBeamOff = \set autoBeaming = ##f
 %% balloon length
 
 balloonLengthOn = {
-  \override BalloonTextItem #'extra-spacing-width = #'(0 . 0)
-  \override BalloonTextItem #'extra-spacing-height = #'(-inf.0 . +inf.0)
+  \override BalloonTextItem.extra-spacing-width = #'(0 . 0)
+  \override BalloonTextItem.extra-spacing-height = #'(-inf.0 . +inf.0)
 }
 balloonLengthOff = {
-  \override BalloonTextItem #'extra-spacing-width = #'(+inf.0 . -inf.0)
-  \override BalloonTextItem #'extra-spacing-height = #'(0 . 0)
+  \override BalloonTextItem.extra-spacing-width = #'(+inf.0 . -inf.0)
+  \override BalloonTextItem.extra-spacing-height = #'(0 . 0)
 }
 
 
+%% bar lines
+
+defineBarLine =
+#(define-void-function
+   (parser location bar glyph-list) (string? list?)
+   (_i "Define bar line settings for bar line @var{bar}.
+     The list @var{glyph-list} must have three entries which define
+     the appearance at the end of line, at the beginning of the next line,
+     and the span bar, respectively." )
+  (if (not (= (length glyph-list) 3))
+      (ly:error (_ "Argument list for bar '~a' must have three components.") bar)
+      (define-bar-line bar
+                       (car glyph-list)
+                       (cadr glyph-list)
+                       (caddr glyph-list))))
+
+
 %% bass figures
 
 bassFigureExtendersOn = {
@@ -95,26 +115,18 @@ bassFigureExtendersOff = {
   \set Staff.useBassFigureExtenders = ##f
 }
 bassFigureStaffAlignmentDown =
-  \override Staff.BassFigureAlignmentPositioning #'direction = #DOWN
+  \override Staff.BassFigureAlignmentPositioning.direction = #DOWN
 bassFigureStaffAlignmentUp =
-  \override Staff.BassFigureAlignmentPositioning #'direction = #UP
+  \override Staff.BassFigureAlignmentPositioning.direction = #UP
 bassFigureStaffAlignmentNeutral =
-  \revert Staff.BassFigureAlignmentPositioning #'direction
+  \revert Staff.BassFigureAlignmentPositioning.direction
 
 
 %% cadenzas
 
-cadenzaOn  = {
-  \set Timing.timing = ##f
-  \set Timing.autoBeaming = ##f
-}
-
-cadenzaOff = {
-  \set Timing.timing = ##t
-  \set Timing.measurePosition = #ZERO-MOMENT
-  \set Timing.autoBeaming = ##t
-}
+cadenzaOn  = \set Timing.timing = ##f
 
+cadenzaOff = \set Timing.timing = ##t
 
 %% chord names
 
@@ -147,40 +159,40 @@ expandFullBarRests   = \set Score.skipBars = ##f
 
 %% dots
 
-dotsUp      = \override Dots #'direction = #UP
-dotsDown    = \override Dots #'direction = #DOWN
-dotsNeutral = \revert Dots #'direction
+dotsUp      = \override Dots.direction = #UP
+dotsDown    = \override Dots.direction = #DOWN
+dotsNeutral = \revert Dots.direction
 
 
 %% dynamics
 
 dynamicUp = {
-  \override DynamicText #'direction = #UP
-  \override DynamicLineSpanner #'direction = #UP
+  \override DynamicText.direction = #UP
+  \override DynamicLineSpanner.direction = #UP
 }
 dynamicDown = {
-  \override DynamicText #'direction = #DOWN
-  \override DynamicLineSpanner #'direction = #DOWN
+  \override DynamicText.direction = #DOWN
+  \override DynamicLineSpanner.direction = #DOWN
 }
 dynamicNeutral = {
-  \revert DynamicText #'direction
-  \revert DynamicLineSpanner #'direction
+  \revert DynamicText.direction
+  \revert DynamicLineSpanner.direction
 }
 
 
 %% easy heads
 
 easyHeadsOn = {
-  \override NoteHead #'stencil = #note-head::brew-ez-stencil
-  \override NoteHead #'font-size = #-8
-  \override NoteHead #'font-family = #'sans
-  \override NoteHead #'font-series = #'bold
+  \override NoteHead.stencil = #note-head::brew-ez-stencil
+  \override NoteHead.font-size = #-8
+  \override NoteHead.font-family = #'sans
+  \override NoteHead.font-series = #'bold
 }
 easyHeadsOff = {
-  \revert NoteHead #'stencil
-  \revert NoteHead #'font-size
-  \revert NoteHead #'font-family
-  \revert NoteHead #'font-series
+  \revert NoteHead.stencil
+  \revert NoteHead.font-size
+  \revert NoteHead.font-family
+  \revert NoteHead.font-series
 }
 
 
@@ -189,8 +201,8 @@ easyHeadsOff = {
 %% End the incipit and print a ``normal line start''.
 endincipit = \context Staff {
   \partial 16 s16  % Hack to handle e.g. \bar ".|" \endincipit
-  \once \override Staff.Clef #'full-size-change = ##t
-  \once \override Staff.Clef #'non-default = ##t
+  \once \override Staff.Clef.full-size-change = ##t
+  \once \override Staff.Clef.non-default = ##t
   \bar ""
 }
 
@@ -199,14 +211,10 @@ endincipit = \context Staff {
 
 fermataMarkup =
 #(make-music 'MultiMeasureTextEvent
-             'tweaks (list
-                      ;; Set the 'text based on the 'direction
-                      (cons 'text (lambda (grob)
-                                    (if (eq? (ly:grob-property grob 'direction) DOWN)
-                                        (markup #:musicglyph "scripts.dfermata")
-                                        (markup #:musicglyph "scripts.ufermata"))))
-                      (cons 'outside-staff-priority 40)
-                      (cons 'outside-staff-padding 0)))
+            ;; Set the 'text based on the 'direction
+            'text (make-fermata-markup)
+             'tweaks '((outside-staff-priority . 40)
+                      (outside-staff-padding . 0)))
 
 %% font sizes
 
@@ -240,26 +248,23 @@ harmonicNote =
 
 hideNotes = {
   % hide notes, accidentals, etc.
-  \override Dots #'transparent = ##t
-  \override NoteHead #'transparent = ##t
-  \override NoteHead #'no-ledgers = ##t
-  \override Stem #'transparent = ##t
-  \override Flag #'transparent = ##t
-  \override Beam #'transparent = ##t
-  \override Accidental #'transparent = ##t
-  \override Rest #'transparent = ##t
-  \override TabNoteHead #'transparent = ##t
+  \override Dots.transparent = ##t
+  \override NoteHead.transparent = ##t
+  \override NoteHead.no-ledgers = ##t
+  % assume that any Beam inherits transparency from its parent Stem
+  \override Stem.transparent = ##t
+  \override Accidental.transparent = ##t
+  \override Rest.transparent = ##t
+  \override TabNoteHead.transparent = ##t
 }
 unHideNotes = {
-  \revert Accidental #'transparent
-  \revert Beam #'transparent
-  \revert Stem #'transparent
-  \revert Flag #'transparent
-  \revert NoteHead #'transparent
-  \revert NoteHead #'no-ledgers
-  \revert Dots #'transparent
-  \revert Rest #'transparent
-  \revert TabNoteHead #'transparent
+  \revert Accidental.transparent
+  \revert Stem.transparent
+  \revert NoteHead.transparent
+  \revert NoteHead.no-ledgers
+  \revert Dots.transparent
+  \revert Rest.transparent
+  \revert TabNoteHead.transparent
 }
 
 
@@ -267,34 +272,63 @@ unHideNotes = {
 
 improvisationOn = {
   \set squashedPosition = #0
-  \override NoteHead #'style = #'slash
-  \override Accidental #'stencil = ##f
-  \override AccidentalCautionary #'stencil = ##f
+  \override NoteHead.style = #'slash
+  \override Accidental.stencil = ##f
+  \override AccidentalCautionary.stencil = ##f
 }
 improvisationOff = {
   \unset squashedPosition
-  \revert NoteHead #'style
-  \revert Accidental #'stencil
-  \revert AccidentalCautionary #'stencil
+  \revert NoteHead.style
+  \revert Accidental.stencil
+  \revert AccidentalCautionary.stencil
+}
+
+%% kievan
+kievanOn = {
+ \override NoteHead.style = #'kievan
+ \override Stem.X-offset = #stem::kievan-offset-callback
+ \override Stem.stencil = ##f
+ \override Flag.stencil = ##f
+ \override Rest.style = #'mensural
+ \override Accidental.glyph-name-alist = #alteration-kievan-glyph-name-alist
+ \override Dots.style = #'kievan
+ \override Slur.stencil = ##f
+ \override Stem.length = #0.0
+ \override Beam.positions = #beam::get-kievan-positions
+ \override Beam.quantized-positions = #beam::get-kievan-quantized-positions
+ \override NoteHead.duration-log = #note-head::calc-kievan-duration-log
+}
+kievanOff = {
+ \revert NoteHead.style
+ \revert Stem.X-offset
+ \revert Stem.stencil
+ \revert Rest.style
+ \revert Accidental.glyph-name-alist
+ \revert Dots.style
+ \revert Slur.stencil
+ \revert Flag.stencil
+ \revert Stem.length
+ \revert Beam.positions
+ \revert Beam.quantized-positions
+ \revert NoteHead.duration-log
 }
 
-
 %% merging
 
 mergeDifferentlyDottedOn =
-  \override Staff.NoteCollision #'merge-differently-dotted = ##t
+  \override Staff.NoteCollision.merge-differently-dotted = ##t
 mergeDifferentlyDottedOff =
-  \revert Staff.NoteCollision #'merge-differently-dotted
+  \revert Staff.NoteCollision.merge-differently-dotted
 mergeDifferentlyHeadedOn =
-  \override Staff.NoteCollision #'merge-differently-headed = ##t
+  \override Staff.NoteCollision.merge-differently-headed = ##t
 mergeDifferentlyHeadedOff =
-  \revert Staff.NoteCollision #'merge-differently-headed
+  \revert Staff.NoteCollision.merge-differently-headed
 
 
 %% numeric time signature
 
-numericTimeSignature = \override Staff.TimeSignature #'style = #'numbered
-defaultTimeSignature = \revert Staff.TimeSignature #'style
+numericTimeSignature = \override Staff.TimeSignature.style = #'numbered
+defaultTimeSignature = \revert Staff.TimeSignature.style
 
 
 %% palm mutes
@@ -313,9 +347,9 @@ palmMute =
 %% phrasing slurs
 
 % directions
-phrasingSlurUp      = \override PhrasingSlur #'direction = #UP
-phrasingSlurDown    = \override PhrasingSlur #'direction = #DOWN
-phrasingSlurNeutral = \revert PhrasingSlur #'direction
+phrasingSlurUp      = \override PhrasingSlur.direction = #UP
+phrasingSlurDown    = \override PhrasingSlur.direction = #DOWN
+phrasingSlurNeutral = \revert PhrasingSlur.direction
 
 % dash-patterns (make-simple-dash-definition defined at top of file)
 phrasingSlurDashPattern =
@@ -324,42 +358,40 @@ phrasingSlurDashPattern =
    (_i "Set up a custom style of dash pattern for @var{dash-fraction} ratio of
 line to space repeated at @var{dash-period} interval for phrasing slurs.")
   #{
-     \override PhrasingSlur #'dash-definition =
+     \override PhrasingSlur.dash-definition =
        $(make-simple-dash-definition dash-fraction dash-period)
   #})
 phrasingSlurDashed =
-  \override PhrasingSlur #'dash-definition = #'((0 1 0.4 0.75))
+  \override PhrasingSlur.dash-definition = #'((0 1 0.4 0.75))
 phrasingSlurDotted =
-  \override PhrasingSlur #'dash-definition = #'((0 1 0.1 0.75))
+  \override PhrasingSlur.dash-definition = #'((0 1 0.1 0.75))
 phrasingSlurHalfDashed =
-  \override PhrasingSlur #'dash-definition = #'((0 0.5 0.4 0.75)
+  \override PhrasingSlur.dash-definition = #'((0 0.5 0.4 0.75)
                                                (0.5 1 1 1))
 phrasingSlurHalfSolid =
-  \override PhrasingSlur #'dash-definition = #'((0 0.5 1 1)
+  \override PhrasingSlur.dash-definition = #'((0 0.5 1 1)
                                                (0.5 1 0.4 0.75))
 phrasingSlurSolid =
-  \revert PhrasingSlur #'dash-definition
+  \revert PhrasingSlur.dash-definition
 
 
 %% point and click
 
 pointAndClickOn  =
-#(define-music-function (parser location) ()
+#(define-void-function (parser location) ()
    (_i "Enable generation of code in final-format (e.g. pdf) files to reference the
 originating lilypond source statement;
 this is helpful when developing a score but generates bigger final-format files.")
-   (ly:set-option 'point-and-click #t)
-   (make-music 'SequentialMusic 'void #t))
+   (ly:set-option 'point-and-click #t))
 
 pointAndClickOff =
-#(define-music-function (parser location) ()
+#(define-void-function (parser location) ()
    (_i "Suppress generating extra code in final-format (e.g. pdf) files to point
 back to the lilypond source statement.")
-   (ly:set-option 'point-and-click #f)
-   (make-music 'SequentialMusic 'void #t))
+   (ly:set-option 'point-and-click #f))
 
 pointAndClickTypes =
-#(define-void-function (parser location types) (list-or-symbol?)
+#(define-void-function (parser location types) (symbol-list-or-symbol?)
   (_i "Set a type or list of types (such as @code{#'note-event}) for which point-and-click info is generated.")
   (ly:set-option 'point-and-click types))
 
@@ -373,38 +405,38 @@ predefinedFretboardsOn =
 
 %% shape note heads
 
-aikenHeads      = \set shapeNoteStyles = #'#(do re miMirror fa sol la ti)
-aikenHeadsMinor = \set shapeNoteStyles = #'#(la ti do re miMirror fa sol)
+aikenHeads      = \set shapeNoteStyles = ##(do re miMirror fa sol la ti)
+aikenHeadsMinor = \set shapeNoteStyles = ##(la ti do re miMirror fa sol)
 funkHeads =
-  \set shapeNoteStyles = #'#(doFunk reFunk miFunk faFunk solFunk laFunk tiFunk)
+  \set shapeNoteStyles = ##(doFunk reFunk miFunk faFunk solFunk laFunk tiFunk)
 funkHeadsMinor =
-  \set shapeNoteStyles = #'#(laFunk tiFunk doFunk reFunk miFunk faFunk solFunk)
-sacredHarpHeads = \set shapeNoteStyles = #'#(fa sol la fa sol la mi)
-sacredHarpHeadsMinor = \set shapeNoteStyles = #'#(la mi fa sol la fa sol)
+  \set shapeNoteStyles = ##(laFunk tiFunk doFunk reFunk miFunk faFunk solFunk)
+sacredHarpHeads = \set shapeNoteStyles = ##(fa sol la fa sol la mi)
+sacredHarpHeadsMinor = \set shapeNoteStyles = ##(la mi fa sol la fa sol)
 southernHarmonyHeads =
-  \set shapeNoteStyles = #'#(faThin sol laThin faThin sol laThin miThin)
+  \set shapeNoteStyles = ##(faThin sol laThin faThin sol laThin miThin)
 southernHarmonyHeadsMinor =
-  \set shapeNoteStyles = #'#(laThin miThin faThin sol laThin faThin sol)
+  \set shapeNoteStyles = ##(laThin miThin faThin sol laThin faThin sol)
 walkerHeads =
-  \set shapeNoteStyles = #'#(doWalker reWalker miWalker faWalker solFunk laWalker tiWalker)
+  \set shapeNoteStyles = ##(doWalker reWalker miWalker faWalker solFunk laWalker tiWalker)
 walkerHeadsMinor =
-  \set shapeNoteStyles = #'#(laWalker tiWalker doWalker reWalker miWalker faWalker solFunk)
+  \set shapeNoteStyles = ##(laWalker tiWalker doWalker reWalker miWalker faWalker solFunk)
 
 
 %% shifts
 
-shiftOn   = \override NoteColumn #'horizontal-shift = #1
-shiftOnn  = \override NoteColumn #'horizontal-shift = #2
-shiftOnnn = \override NoteColumn #'horizontal-shift = #3
-shiftOff  = \revert NoteColumn #'horizontal-shift
+shiftOn   = \override NoteColumn.horizontal-shift = #1
+shiftOnn  = \override NoteColumn.horizontal-shift = #2
+shiftOnnn = \override NoteColumn.horizontal-shift = #3
+shiftOff  = \revert NoteColumn.horizontal-shift
 
 
 %% slurs
 
 % directions
-slurUp         = \override Slur #'direction = #UP
-slurDown       = \override Slur #'direction = #DOWN
-slurNeutral    = \revert Slur #'direction
+slurUp         = \override Slur.direction = #UP
+slurDown       = \override Slur.direction = #DOWN
+slurNeutral    = \revert Slur.direction
 
 % dash-patterns (make-simple-dash-definition defined at top of file)
 slurDashPattern =
@@ -413,16 +445,16 @@ slurDashPattern =
   (_i "Set up a custom style of dash pattern for @var{dash-fraction}
 ratio of line to space repeated at @var{dash-period} interval for slurs.")
   #{
-     \override Slur #'dash-definition =
+     \override Slur.dash-definition =
        $(make-simple-dash-definition dash-fraction dash-period)
   #})
-slurDashed     = \override Slur #'dash-definition = #'((0 1 0.4 0.75))
-slurDotted     = \override Slur #'dash-definition = #'((0 1 0.1 0.75))
-slurHalfDashed = \override Slur #'dash-definition = #'((0 0.5 0.4 0.75)
+slurDashed     = \override Slur.dash-definition = #'((0 1 0.4 0.75))
+slurDotted     = \override Slur.dash-definition = #'((0 1 0.1 0.75))
+slurHalfDashed = \override Slur.dash-definition = #'((0 0.5 0.4 0.75)
                                                       (0.5 1 1 1))
-slurHalfSolid  = \override Slur #'dash-definition = #'((0 0.5 1 1)
+slurHalfSolid  = \override Slur.dash-definition = #'((0 0.5 1 1)
                                                       (0.5 1 0.4 0.75))
-slurSolid      = \revert Slur #'dash-definition
+slurSolid      = \revert Slur.dash-definition
 
 
 %% staff switches
@@ -433,9 +465,9 @@ hideStaffSwitch = \set followVoice = ##f
 
 %% stems
 
-stemUp      = \override Stem #'direction = #UP
-stemDown    = \override Stem #'direction = #DOWN
-stemNeutral = \revert Stem #'direction
+stemUp      = \override Stem.direction = #UP
+stemDown    = \override Stem.direction = #DOWN
+stemNeutral = \revert Stem.direction
 
 
 %% tablature
@@ -443,91 +475,107 @@ stemNeutral = \revert Stem #'direction
 % switch to full notation
 tabFullNotation = {
   % time signature
-  \revert TabStaff.TimeSignature #'stencil
+  \revert TabStaff.TimeSignature.stencil
   % stems (the half note gets a double stem)
-  \revert TabVoice.Stem #'length
-  \revert TabVoice.Stem #'no-stem-extend
-  \revert TabVoice.Flag #'style
-  \revert TabVoice.Stem #'details
-  \revert TabVoice.Stem #'stencil
-  \revert TabVoice.Flag #'stencil
-  \override TabVoice.Stem #'stencil = #tabvoice::draw-double-stem-for-half-notes
-  \override TabVoice.Stem #'X-extent = #tabvoice::make-double-stem-width-for-half-notes
-  \set TabVoice.autoBeaming = ##t
-  \revert TabVoice.NoteColumn #'ignore-collision
+  \revert TabStaff.Stem.length
+  \revert TabStaff.Stem.no-stem-extend
+  \revert TabStaff.Flag.style
+  \revert TabStaff.Stem.details
+  \revert TabStaff.Stem.stencil
+  \revert TabStaff.Flag.stencil
+  \override TabStaff.Stem.stencil = #tabvoice::draw-double-stem-for-half-notes
+  \override TabStaff.Stem.X-extent = #tabvoice::make-double-stem-width-for-half-notes
+  \set TabStaff.autoBeaming = ##t
+  \revert TabStaff.NoteColumn.ignore-collision
   % beams, dots
-  \revert TabVoice.Beam #'stencil
-  \revert TabVoice.StemTremolo #'stencil
-  \revert TabVoice.Dots #'stencil
-  \revert TabVoice.Tie #'stencil
-  \revert TabVoice.Tie #'after-line-breaking
-  \revert TabVoice.RepeatTie #'stencil
-  \revert TabVoice.RepeatTie #'after-line-breaking
-  \revert TabVoice.LaissezVibrerTie #'stencil
-  \revert TabVoice.Slur #'stencil
-  \revert TabVoice.PhrasingSlur #'stencil
+  \revert TabStaff.Beam.stencil
+  \revert TabStaff.StemTremolo.stencil
+  \revert TabStaff.Dots.stencil
+  \revert TabStaff.Tie.stencil
+  \revert TabStaff.Tie.after-line-breaking
+  \revert TabStaff.RepeatTie.stencil
+  \revert TabStaff.RepeatTie.after-line-breaking
+  \revert TabStaff.LaissezVibrerTie.stencil
+  \revert TabStaff.Slur.stencil
+  \revert TabStaff.PhrasingSlur.stencil
   % tuplet stuff
-  \revert TabVoice.TupletBracket #'stencil
-  \revert TabVoice.TupletNumber #'stencil
+  \revert TabStaff.TupletBracket.stencil
+  \revert TabStaff.TupletNumber.stencil
   % dynamic signs
-  \revert TabVoice.DynamicText #'stencil
-  \revert TabVoice.DynamicTextSpanner #'stencil
-  \revert TabVoice.DynamicTextSpanner #'stencil
-  \revert TabVoice.Hairpin #'stencil
+  \revert TabStaff.DynamicText.stencil
+  \revert TabStaff.DynamicTextSpanner.stencil
+  \revert TabStaff.DynamicTextSpanner.stencil
+  \revert TabStaff.Hairpin.stencil
   % rests
-  \revert TabVoice.Rest #'stencil
-  \revert TabVoice.MultiMeasureRest #'stencil
-  \revert TabVoice.MultiMeasureRestNumber #'stencil
-  \revert TabVoice.MultiMeasureRestText #'stencil
+  \revert TabStaff.Rest.stencil
+  \revert TabStaff.MultiMeasureRest.stencil
+  \revert TabStaff.MultiMeasureRestNumber.stencil
+  \revert TabStaff.MultiMeasureRestText.stencil
   % markups etc.
-  \revert TabVoice.Glissando #'stencil
-  \revert TabVoice.Script #'stencil
-  \revert TabVoice.TextScript #'stencil
-  \revert TabVoice.TextSpanner #'stencil
-  \revert TabStaff.Arpeggio #'stencil
-  \revert TabStaff.NoteColumn #'ignore-collision
+  \revert TabStaff.Glissando.stencil
+  \revert TabStaff.Script.stencil
+  \revert TabStaff.TextScript.stencil
+  \revert TabStaff.TextSpanner.stencil
+  \revert TabStaff.Arpeggio.stencil
+  \revert TabStaff.NoteColumn.ignore-collision
 }
 
 %tie/repeat tie behaviour
 hideSplitTiedTabNotes = {
-  \override TabVoice.TabNoteHead #'(details tied-properties break-visibility) = #all-invisible
-  \override TabVoice.TabNoteHead #'(details tied-properties parenthesize) = ##f
-  \override TabVoice.TabNoteHead #'(details repeat-tied-properties note-head-visible) = ##f
-  \override TabVoice.TabNoteHead #'(details repeat-tied-properties parenthesize) = ##f
+  \override TabVoice.TabNoteHead.details.tied-properties.break-visibility = #all-invisible
+  \override TabVoice.TabNoteHead.details.tied-properties.parenthesize = ##f
+  \override TabVoice.TabNoteHead.details.repeat-tied-properties.note-head-visible = ##f
+  \override TabVoice.TabNoteHead.details.repeat-tied-properties.parenthesize = ##f
 }
 
 showSplitTiedTabNotes = {
-  \override TabVoice.TabNoteHead #'(details tied-properties break-visibility) = #begin-of-line-visible
-  \override TabVoice.TabNoteHead #'(details tied-properties parenthesize) = ##t
-  \override TabVoice.TabNoteHead #'(details repeat-tied-properties note-head-visible) = ##t
-  \override TabVoice.TabNoteHead #'(details repeat-tied-properties parenthesize) = ##t
+  \override TabVoice.TabNoteHead.details.tied-properties.break-visibility = #begin-of-line-visible
+  \override TabVoice.TabNoteHead.details.tied-properties.parenthesize = ##t
+  \override TabVoice.TabNoteHead.details.repeat-tied-properties.note-head-visible = ##t
+  \override TabVoice.TabNoteHead.details.repeat-tied-properties.parenthesize = ##t
 }
 
 %% text length
 
 textLengthOn = {
-  \override TextScript #'extra-spacing-width = #'(0 . 0)
-  \override TextScript #'extra-spacing-height = #'(-inf.0 . +inf.0)
+  % 0.4 staff-space between adjacent texts
+  \override TextScript.extra-spacing-width = #'(-0.0 . 0.4)
+  \override TextScript.extra-spacing-height = #'(-inf.0 . +inf.0)
 }
+
 textLengthOff = {
-  \override TextScript #'extra-spacing-width = #'(+inf.0 . -inf.0)
-  \override TextScript #'extra-spacing-height = #'(0 . 0)
+  \override TextScript.extra-spacing-width = #'(+inf.0 . -inf.0)
+  \override TextScript.extra-spacing-height = #'(0 . 0)
+}
+
+markLengthOn = {
+  \override Score.MetronomeMark.extra-spacing-width = #'(0 . 1.0)
+  \override Score.RehearsalMark.extra-spacing-width = #'(-0.5 . 0.5)
+  % Raise as much as four staff-spaces before pushing notecolumns right
+  \override Score.MetronomeMark.extra-spacing-height = #'(4 . 4)
+  \override Score.RehearsalMark.extra-spacing-height = #'(4 . 4)
 }
 
+markLengthOff = {
+  \override Score.MetronomeMark.extra-spacing-width = #'(+inf.0 . -inf.0)
+  \override Score.RehearsalMark.extra-spacing-width = #'(+inf.0 . -inf.0)
+  \revert Score.MetronomeMark.extra-spacing-height
+  \revert Score.RehearsalMark.extra-spacing-height
+}
 
 %% text spanners
 
-textSpannerUp      = \override TextSpanner #'direction = #UP
-textSpannerDown    = \override TextSpanner #'direction = #DOWN
-textSpannerNeutral = \revert TextSpanner #'direction
+textSpannerUp      = \override TextSpanner.direction = #UP
+textSpannerDown    = \override TextSpanner.direction = #DOWN
+textSpannerNeutral = \revert TextSpanner.direction
 
 
 %% ties
 
 % directions
-tieUp      = \override Tie #'direction = #UP
-tieDown    = \override Tie #'direction = #DOWN
-tieNeutral = \revert Tie #'direction
+tieUp      = \override Tie.direction = #UP
+tieDown    = \override Tie.direction = #DOWN
+tieNeutral = \revert Tie.direction
 
 % dash-patterns (make-simple-dash-definition defined at top of file)
 tieDashPattern =
@@ -536,23 +584,23 @@ tieDashPattern =
   (_i "Set up a custom style of dash pattern for @var{dash-fraction}
 ratio of line to space repeated at @var{dash-period} interval for ties.")
   #{
-     \override Tie #'dash-definition =
+     \override Tie.dash-definition =
        $(make-simple-dash-definition dash-fraction dash-period)
   #})
-tieDashed     = \override Tie #'dash-definition = #'((0 1 0.4 0.75))
-tieDotted     = \override Tie #'dash-definition = #'((0 1 0.1 0.75))
-tieHalfDashed = \override Tie #'dash-definition = #'((0 0.5 0.4 0.75)
+tieDashed     = \override Tie.dash-definition = #'((0 1 0.4 0.75))
+tieDotted     = \override Tie.dash-definition = #'((0 1 0.1 0.75))
+tieHalfDashed = \override Tie.dash-definition = #'((0 0.5 0.4 0.75)
                                                     (0.5 1 1 1))
-tieHalfSolid  = \override Tie #'dash-definition = #'((0 0.5 1 1)
+tieHalfSolid  = \override Tie.dash-definition = #'((0 0.5 1 1)
                                                     (0.5 1 0.4 0.75))
-tieSolid      = \revert Tie #'dash-definition
+tieSolid      = \revert Tie.dash-definition
 
 
 %% tuplets
 
-tupletUp      = \override TupletBracket #'direction = #UP
-tupletDown    = \override TupletBracket #'direction = #DOWN
-tupletNeutral = \revert TupletBracket #'direction
+tupletUp      = \override TupletBracket.direction = #UP
+tupletDown    = \override TupletBracket.direction = #DOWN
+tupletNeutral = \revert TupletBracket.direction
 
 
 %% voice properties
@@ -568,42 +616,43 @@ oneVoice   = #(context-spec-music (make-voice-props-revert) 'Voice)
 %% voice styles
 
 voiceOneStyle = {
-  \override NoteHead #'style = #'diamond
-  \override NoteHead #'color = #red
-  \override Stem #'color = #red
-  \override Flag #'color = #red
-  \override Beam #'color = #red
+  \override NoteHead.style = #'diamond
+  \override NoteHead.color = #red
+  \override Stem.color = #red
+  \override Beam.color = #red
 }
 voiceTwoStyle = {
-  \override NoteHead #'style = #'triangle
-  \override NoteHead #'color = #blue
-  \override Stem #'color = #blue
-  \override Flag #'color = #blue
-  \override Beam #'color = #blue
+  \override NoteHead.style = #'triangle
+  \override NoteHead.color = #blue
+  \override Stem.color = #blue
+  \override Beam.color = #blue
 }
 voiceThreeStyle = {
-  \override NoteHead #'style = #'xcircle
-  \override NoteHead #'color = #green
-  \override Stem #'color = #green
-  \override Flag #'color = #green
-  \override Beam #'color = #green
+  \override NoteHead.style = #'xcircle
+  \override NoteHead.color = #green
+  \override Stem.color = #green
+  \override Beam.color = #green
 }
 voiceFourStyle = {
-  \override NoteHead #'style = #'cross
-  \override NoteHead #'color = #magenta
-  \override Stem #'color = #magenta
-  \override Flag #'color = #magenta
-  \override Beam #'color = #magenta
+  \override NoteHead.style = #'cross
+  \override NoteHead.color = #magenta
+  \override Stem.color = #magenta
+  \override Beam.color = #magenta
 }
 voiceNeutralStyle = {
-  \revert NoteHead #'style
-  \revert NoteHead #'color
-  \revert Stem #'color
-  \revert Flag #'color
-  \revert Beam #'color
+  \revert NoteHead.style
+  \revert NoteHead.color
+  \revert Stem.color
+  \revert Beam.color
 }
 
 
+%% volta brackets
+
+allowVoltaHook =
+#(define-void-function (parser location bar) (string?)
+                       (allow-volta-hook bar))
+
 %% x notes
 
 xNotesOn =
index ed7aed59486874bcbc4d35182d2b6f35b5d49d21..0cb37947e7294cb1f98b97a4a83dbe26d059ac31 100644 (file)
@@ -1,12 +1,12 @@
 % script-init.ly
 
-\version "2.16.0"
+\version "2.17.25"
 
 % code char abbreviations
 dashHat = "marcato"
 dashPlus = "stopped"
 dashDash = "tenuto"
-dashBar = "staccatissimo"
+dashBang = "staccatissimo"
 dashLarger = "accent"
 dashDot = "staccato"
 dashUnderscore = "portato"
@@ -46,7 +46,8 @@ staccatissimo = #(make-articulation "staccatissimo")
 staccato = #(make-articulation "staccato")
 stopped = #(make-articulation "stopped")
 tenuto = #(make-articulation "tenuto")
-thumb = #(make-articulation "thumb")
+thumb = \finger \markup \scale #(cons (magstep 5) (magstep 5))
+                        \musicglyph #"scripts.thumb"
 trill = #(make-articulation "trill")
 turn = #(make-articulation "turn")
 upbow = #(make-articulation "upbow")
index b507d01829a527abe49866bfdf36a77fbd970732..44dcdb663352fb5a5974daf78ed7b0ee7dcb8bb4 100644 (file)
@@ -10,6 +10,10 @@ enddecr = #(make-span-event 'DecrescendoEvent STOP)
 endcr = #(make-span-event 'CrescendoEvent STOP) 
 
 
+startMeasureCount = #(make-span-event 'MeasureCounterEvent START)
+stopMeasureCount = #(make-span-event 'MeasureCounterEvent STOP)
+
+
 startTextSpan = #(make-span-event 'TextSpanEvent START)
 stopTextSpan = #(make-span-event 'TextSpanEvent STOP)
 
index 98ad8b2e63ce89d6ddabb2aa5aa85be825767d07..da2bf166c94e063ec5b419b2bf38cc5325ce7603 100644 (file)
@@ -8,17 +8,19 @@ slashSeparator = \markup {
 }
 
 tagline = \markup {
-  \with-url
+  \pad-to-box #'(0 . 0) #'(0 . 3)
+  {  \with-url
 
-  #"http://lilypond.org/"
-  \line {
+    #"http://lilypond.org/"
+    \line {
 
-    %% 2014 = em dash.
+      %% 2014 = em dash.
 
-    #(format #f "Music engraving by LilyPond ~a~awww.lilypond.org"
-       (lilypond-version)
-       (ly:wide-char->utf-8 #x2014)
-       )
+      #(format #f "Music engraving by LilyPond ~a~awww.lilypond.org"
+         (lilypond-version)
+         (ly:wide-char->utf-8 #x2014)
+         )
+    }
   }
 }
 
@@ -59,7 +61,7 @@ bookTitleMarkup = \markup {
 }
 
 scoreTitleMarkup = \markup { \column {
-  \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
+  \on-the-fly \print-all-headers { \bookTitleMarkup \hspace #1 }
   \fill-line {
     \fromproperty #'header:piece
     \fromproperty #'header:opus
@@ -107,14 +109,25 @@ book last one."
    empty-stencil))
 
 %% Bookpart first page and last page predicates
+#(define (part-first-page? layout props)
+  (= (chain-assoc-get 'page:page-number props -1)
+     (ly:output-def-lookup layout 'first-page-number)))
+
+#(define (part-last-page? layout props)
+  (chain-assoc-get 'page:is-bookpart-last-page props #f))
+
 #(define (part-first-page layout props arg)
-  (if (= (chain-assoc-get 'page:page-number props -1)
-         (ly:output-def-lookup layout 'first-page-number))
+  (if (part-first-page? layout props)
+      (interpret-markup layout props arg)
+      empty-stencil))
+
+#(define (not-part-first-page layout props arg)
+  (if (not (part-first-page? layout props))
       (interpret-markup layout props arg)
       empty-stencil))
 
 #(define (part-last-page layout props arg)
-  (if (chain-assoc-get 'page:is-bookpart-last-page props #f)
+  (if (part-last-page? layout props)
       (interpret-markup layout props arg)
       empty-stencil))
 
@@ -142,7 +155,7 @@ oddHeaderMarkup = \markup
   %% force the header to take some space, otherwise the
   %% page layout becomes a complete mess.
   " "
-  \on-the-fly #not-first-page \fromproperty #'header:instrument
+  \on-the-fly #not-part-first-page \fromproperty #'header:instrument
   \on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string
 }
 
@@ -151,18 +164,18 @@ oddHeaderMarkup = \markup
 evenHeaderMarkup = \markup
 \fill-line {
   \on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string
-  \on-the-fly #not-first-page \fromproperty #'header:instrument
+  \on-the-fly #not-part-first-page \fromproperty #'header:instrument
   " "
 }
 
 oddFooterMarkup = \markup {
   \column {
     \fill-line {
-      %% Copyright header field only on first page.
-      \on-the-fly #first-page \fromproperty #'header:copyright
+      %% Copyright header field only on first page in each bookpart.
+      \on-the-fly #part-first-page \fromproperty #'header:copyright
     }
     \fill-line {
-      %% Tagline header field only on last page.
+      %% Tagline header field only on last page in the book.
       \on-the-fly #last-page \fromproperty #'header:tagline
     }
   }
index 5511ed4689fcd4a4f13be5494d12dfb64dcc610f..32eeb462f8e77e0f3893058708334d68ddafc2b9 100644 (file)
@@ -7,6 +7,7 @@
   #f)
 
 #(let ((toc-item-list (list)))
+   (call-after-session (lambda () (set! toc-item-list '())))
    (set! add-toc-item!
         (lambda (markup-symbol text)
           (let ((label (gensym "toc")))
@@ -24,7 +25,7 @@
 \paper {
   tocTitleMarkup = \markup \huge \column {
     \fill-line { \null "Table of Contents" \null }
-    \hspace #1
+    \null
   }
   tocItemMarkup = \markup \fill-line {
     \fromproperty #'toc:text \fromproperty #'toc:page
diff --git a/make/GNUmakefile b/make/GNUmakefile
deleted file mode 100644 (file)
index 1f26abc..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-depth = ..
-
-STEPMAKE_TEMPLATES=makedir install
-
-include $(depth)/make/stepmake.make
-
-default: spec
-
index f8fda6c5b1ce7ef213c439ea7885a9cf753196bf..ef394cd41e7c949f6f43bf6bb1d947a6f78719b3 100644 (file)
@@ -3,5 +3,3 @@
 ABC_FILES = $(call src-wildcard,*.abc)
 OUT_LY_FILES = $(sort ${ABC_FILES:%.abc=$(outdir)/%.ly})
 OUT_FILES = $(OUT_LY_FILES)
-
-EXTRA_DIST_FILES += $(ABC_FILES)
index d374e5ca7339d97b03dace3d413b210eb5ee2174..e36acd7356921449c5def23dd77eb31e2e3d6631 100644 (file)
@@ -2,7 +2,7 @@
 .SUFFIXES: .html .info .texi .texinfo
 
 # Explicitly list the dependencies on generated content
-$(outdir)/web.texi: $(outdir)/weblinks.itexi
+$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi $(outdir)/version.itexi
 
 $(top-build-dir)/Documentation/$(outdir)/%/index.$(ISOLANG).html: $(outdir)/%/index.html $(TRANSLATION_LILY_IMAGES)
        mkdir -p $(dir $@)
@@ -20,19 +20,13 @@ $(top-build-dir)/Documentation/$(outdir)/%.$(ISOLANG).pdf: $(outdir)/%.pdf
        mkdir -p $(dir $@)
        cp -f $< $@
 
-$(outdir)/version.%: $(top-src-dir)/VERSION
-       $(PYTHON) $(top-src-dir)/scripts/build/create-version-itexi.py > $@
-
-$(outdir)/weblinks.%: $(top-src-dir)/VERSION
-       $(PYTHON) $(top-src-dir)/scripts/build/create-weblinks-itexi.py > $@
-
 $(outdir)/%.png: $(top-build-dir)/Documentation/$(outdir)/%.png
        ln -f $< $@
 
 $(MASTER_TEXI_FILES): $(ITELY_FILES) $(ITEXI_FILES) $(outdir)/pictures
 
 $(outdir)/pictures:
-       $(MAKE) -C $(top-build-dir)/Documentation/pictures WWW-1
+       $(MAKE) -C $(top-build-dir)/Documentation/pictures out=www WWW-1
        ln -sf $(top-build-dir)/Documentation/pictures/$(outdir) $@
 
 $(TRANSLATION_LILY_IMAGES): $(MASTER_TEXI_FILES)
index cd5001174ae660d762b3b0ee8e05869c75f73c36..875617a5031db393e35db55c588ee500903a8e61 100644 (file)
@@ -2,10 +2,10 @@ default:
 
 ifeq ($(out),www)
 ifneq ($(NO_PDF_FILES),)
-local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(XREF_MAPS_FILES)
+local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(XREF_MAPS_FILES) $(TRANSLATION_LILY_IMAGES)
 endif
 ifeq ($(NO_PDF_FILES),)
-local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES)
+local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES) $(TRANSLATION_LILY_IMAGES)
 endif
 
 local-WWW-2: $(DEEP_HTML_FILES) $(BIG_PAGE_HTML_FILES) $(DOCUMENTATION_LOCALE_TARGET)
index 2b2242427b99f3174dae747d06a1c32d7c6ecaa9..48cfcdbb123c9fd43313373e492ca1553cb867ed 100644 (file)
@@ -4,7 +4,7 @@ LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
 
 TELY_FILES := $(call src-wildcard,*.tely)
 TEXI_FILES := $(call src-wildcard,*.texi)
-MASTER_TEXI_FILES := $(TEXI_FILES) $(TELY_FILES:%.tely=$(outdir)/%.texi)
+MASTER_TEXI_FILES := $(TEXI_FILES:%=$(outdir)/%) $(TELY_FILES:%.tely=$(outdir)/%.texi)
 
 TEXINFO_MANUALS =\
  $(TELY_FILES:%.tely=%)\
@@ -26,12 +26,14 @@ PDF_FILES := $(TELY_FILES:%.tely=$(top-build-dir)/Documentation/$(outdir)/%.$(IS
 ITELY_FILES := $(call src-wildcard,*.itely)
 ITEXI_FILES := $(call src-wildcard,*.itexi)
 
-DOCUMENTATION_INCLUDES = \
+DOCUMENTATION_INCLUDES += \
+  -I $(top-build-dir)/Documentation/$(outdir) \
+  -I $(top-build-dir)/Documentation/snippets/out \
   -I $(top-src-dir)/Documentation/$(ISOLANG)/included \
+  -I $(top-src-dir)/Documentation/included \
   -I $(top-src-dir)/Documentation \
-  -I $(top-build-dir)/Documentation/$(outdir)
+  -I $(top-src-dir)/input/regression
 
-LILYPOND_BOOK_INCLUDES += $(DOCUMENTATION_INCLUDES)
 MAKEINFO_FLAGS += --enable-encoding $(DOCUMENTATION_INCLUDES)
 MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS)
 
index d12c27ebcde1749725581a12db10403de7f0598d..b27aa56e14ca1e8e0b429e1981a0b7c46bfc3ee2 100644 (file)
@@ -52,5 +52,5 @@ $(outdir)/%.xml:  %.lyxml
 # Add the xml => pdf rule only if we have dblatex
 ifeq (,$(findstring dblatex,$(MISSING_OPTIONAL)))
 $(outdir)/%.pdf:  $(outdir)/%.xml
-       cd $(outdir) && $(DBLATEX) $(notdir $<)
+       cd $(outdir) && $(buildscript-dir)/run-and-check "$(DBLATEX) $(notdir $<)" "$*.dblatex.log"
 endif
index 5c5e1efe3e0a171d74607787988e0a3e289c96b1..e67a570c92706d79e0913034b599577ef3e656ce 100644 (file)
@@ -27,13 +27,7 @@ MUSICXML2LY = $(script-dir)/musicxml2ly.py
 CONVERT_LY = $(script-dir)/convert-ly.py
 LILYPOND_BOOK = $(script-dir)/lilypond-book.py
 
-LILYPOND_BOOK_INCLUDES = -I $(src-dir)/ -I $(outdir) -I $(input-dir)   \
- -I $(top-src-dir)/Documentation -I $(top-build-dir)/Documentation/snippets/out \
- -I $(input-dir)/regression/ -I $(top-src-dir)/Documentation/included/ \
- -I $(top-build-dir)/mf/$(outconfbase)/        \
- -I $(top-build-dir)/mf/out/ \
- -I $(top-src-dir)/Documentation/pictures \
- -I $(top-build-dir)/Documentation/pictures/$(outdir)
+LILYPOND_BOOK_INCLUDES = -I $(src-dir) $(DOCUMENTATION_INCLUDES)
 
 ## override from cmd line to speed up. 
 ANTI_ALIAS_FACTOR=2
index 954626f6bcacc5f54db067aff178dea5aa623bd3..25dd5b2fbbb64afbc1a0bd315f46694cb15c8389 100644 (file)
@@ -46,4 +46,5 @@ $(outdir)/others-did.itexi $(outdir)/we-wrote.itexi: $(outdir)/%.itexi: $(top-sr
        BSTINPUTS=$(top-src-dir)/Documentation/web/ $(buildscript-dir)/bib2texi \
                -s $(top-src-dir)/Documentation/lily-bib \
                -o $(outdir)/$*.itexi \
+               -q \
                $(top-src-dir)/Documentation/web/$*.bib
index 7d572adb750c212847b326e9729adb16288d46ab..e60159ab082e2f890e924a6120809ba4e13821cc 100644 (file)
@@ -12,10 +12,8 @@ ILY_FILES := $(call src-wildcard,*.ily)
 
 TEXINFO_SOURCES += $(TELY_FILES) $(ITELY_FILES) $(ITEXI_FILES)
 
-EXTRA_DIST_FILES +=$(TELY_FILES) $(LY_FILES) $(ITEXI_FILES) $(ITELY_FILES) $(ILY_FILES)
-
 # prerequisites for all rules invoking compiled lilypond binary
 ifeq ($(LILYPOND_EXTERNAL_BINARY),)
-INIT_LY_SOURCES = $(wildcard $(top-src-dir)/scm/*.scm)
-SCHEME_SOURCES = $(wildcard $(top-src-dir)/ly/*.ly)
+INIT_LY_SOURCES = $(wildcard $(top-src-dir)/ly/*.ly)
+SCHEME_SOURCES = $(wildcard $(top-src-dir)/scm/*.scm)
 endif
index 7b3a27613fd076f2bb7e61e27999d9556fae2759..8aef6eea4b465c2026cd0db99ba74cec530cdcc5 100644 (file)
@@ -6,5 +6,3 @@ HEADER_FIELDS = texidoc options
 OUT_DIFF_FILES = ${LY_FILES:%.ly=$(outdir)/%.diff}
 MIDI2LY_IGNORE_RES = -I 'Lily was here' -I '^\\version ' -I 'TEXT_EVENT.*GNU LilyPond' -I '^% included from'
 DIFF = diff
-
-EXTRA_DIST_FILES += $(MIDI_FILES) $(HEADER_FILES)
index 7706e58151a5cd1cc7619e8bc2a48ec71a55fa49..84dc36446b65cdb3dd6761518e1a4b1251936b03 100644 (file)
@@ -4,5 +4,3 @@ MUSICXML_FILES = $(call src-wildcard,*.xml)
 MUSICMXL_FILES = $(call src-wildcard,*.mxl)  # Allow .mxl for compressed files
 OUT_LY_FILES = $(sort ${MUSICXML_FILES:%.xml=$(outdir)/%.ly} ${MUSICMXL_FILES:%.mxl=$(outdir)/%.ly})
 OUT_FILES = $(OUT_LY_FILES)
-
-EXTRA_DIST_FILES += $(MUSICXML_FILES) $(MUSICMXL_FILES) $(call src-wildcard,*.broken)
index ad11f04379fc1937646e82df063417a92fb566c7..3e8df628d564f956f0be839224a947ae082b1c54 100644 (file)
@@ -68,11 +68,11 @@ EXTRACT_TEXI_FILENAMES=$(PYTHON) $(script-dir)/extract_texi_filenames.py $(quiet
                -I $(dir $<) \
                -I $(OUT) \
                -o $(OUT)
-CREATE_VERSION=python $(script-dir)/create-version-itexi.py
-CREATE_WEBLINKS=python $(script-dir)/create-weblinks-itexi.py
-MASS_LINK=python $(script-dir)/mass-link.py
-WEB_POST=python $(script-dir)/website_post.py
-WEB_BIBS=python $(script-dir)/bib2texi.py
+CREATE_VERSION=$(PYTHON) $(script-dir)/create-version-itexi.py
+CREATE_WEBLINKS=$(PYTHON) $(script-dir)/create-weblinks-itexi.py
+MASS_LINK=$(PYTHON) $(script-dir)/mass-link.py
+WEB_POST=$(PYTHON) $(script-dir)/website_post.py
+WEB_BIBS=$(PYTHON) $(script-dir)/bib2texi.py
 
 EXAMPLES=$(LILYPOND_WEB_MEDIA_GIT)/ly-examples
 PICTURES=$(LILYPOND_WEB_MEDIA_GIT)/pictures
@@ -252,12 +252,12 @@ $(OUT)/web.%.xref-map: $(top-src-dir)/Documentation/%/web.texi
        $(DO_TEXI_DEP) $(EXTRACT_TEXI_FILENAMES) --split=node $<
 
 # Build the English website
-$(OUT)/index.html: $(top-src-dir)/Documentation/web.texi $(xref-files)
+$(OUT)/index.html: $(top-src-dir)/Documentation/web.texi $(version-files) $(xref-files)
        $(DO_TEXI_DEP) $(TEXI2HTML) $<
 
 # Build translated websites
 $(eval $(foreach l,$(WEB_LANGS),\
-$(eval $(OUT)/$(l)/index.html: $(top-src-dir)/Documentation/$(l)/web.texi $(xref-files); \
+$(eval $(OUT)/$(l)/index.html: $(top-src-dir)/Documentation/$(l)/web.texi $(version-files) $(xref-files); \
        $$(DO_TEXI_DEP) $$(TEXI2HTML) --lang="$(l)" $$<; ) \
 ))
 
index f81b56dabef7f8de1bd4cd73b9bec5c7670b21bd..9da619c823df9cda42b3874466293b928b3ab900 100644 (file)
@@ -7,7 +7,8 @@ STEPMAKE_TEMPLATES = metafont \
                     install-out
 LOCALSTEPMAKE_TEMPLATES = lilypond
 
-# We don't use $(MF_FILES), because there's more .mf cruft here
+# These are the main .mf files.  We don't use $(MF_FILES) here,
+# because there are more .mf files, input'ed into the main files.
 FETA_MF_FILES = $(call src-wildcard,feta[0-9]*.mf) \
                $(call src-wildcard,feta-braces-[a-z].mf) \
                $(call src-wildcard,feta-alphabet*[0-9].mf) \
@@ -35,15 +36,10 @@ OTF_TABLES = $(STAFF_SIZES:%=$(outdir)/feta%.otf-table) \
 SVG_FILES = $(OTF_FILES:%.otf=%.svg)
 WOFF_FILES = $(OTF_FILES:%.otf=%.woff)
 
-FC_FIND = $(shell $(FCLIST) --verbose 'Century Schoolbook L:style=$(1)' \
-                 | grep 'file:' \
-                 | sed 's/.*"\([^"]*\)".*/\1/g')
-
 NCSB_OTFS = $(addprefix $(outdir)/,CenturySchL-Ital.otf \
                                   CenturySchL-BoldItal.otf \
                                   CenturySchL-Roma.otf \
                                   CenturySchL-Bold.otf)
-NCSB_INSTALL_DIR = $(local_lilypond_datadir)/fonts/otf
 
 LOG_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.log)
 LISP_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.lisp)
@@ -99,9 +95,10 @@ $(PE_SCRIPTS): $(buildscript-dir)/gen-emmentaler-scripts
        $< --dir=$(outdir)
 
 
-# Make tfm files first, log files last,
-# so that normally log files aren't made twice
-ALL_GEN_FILES = $(LOG_FILES) \
+# Generate emmentaler-*.pe scripts first, and *.otf, *.svg, *.woff files last,
+# so that normally these files aren't regenerated on a subsequent call to make.
+ALL_GEN_FILES = $(PE_SCRIPTS) \
+               $(LOG_FILES) \
                $(ENC_FILES) \
                $(LISP_FILES) \
                $(OTF_TABLES) \
index 905d1c3e8e112545bc78ea1113e268951615c352..11306724402b1424d5c947ab3bbac15a0538d61c 100644 (file)
@@ -3,11 +3,11 @@
 %
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or you can redistribute it under
+% the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index c96ff8d06cbe57f3d7e40525d13980fbc4e0211f..68271bf995cd4db66d55d6729adb7e21303e4e0b 100644 (file)
@@ -3,10 +3,11 @@
 %
 % Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or you can redistribute it under
+% the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -39,12 +40,13 @@ fet_beginchar ("accordion register discant", "discant")
 
        set_char_box (r# + accreg_linethickness# / 2,
                      r# + accreg_linethickness# / 2,
-                     0, 2 r# + 0.7 accreg_linethickness#);
+                     0.7 accreg_linethickness# / 2,
+                     2 r# + 0.7 accreg_linethickness# / 2);
 
        lh = vround (2/3 r);
        lt = vround (0.7 accreg_linethickness);
-
-       h := 3 lh + lt;
+       d := vround (0.7 accreg_linethickness / 2);
+       h := 3 lh + lt - d;
        b := w := (3 lh + hround accreg_linethickness) / 2;
 
        penpos1 (hround accreg_linethickness, 0);
@@ -52,10 +54,10 @@ fet_beginchar ("accordion register discant", "discant")
        penpos3 (hround accreg_linethickness, 180);
        penpos4 (lt, 270);
 
-       z1r = (w, h / 2);
+       z1r = (w, 0.5 [-d, h]);
        z2r = (0, h);
-       z3r = (-b, h / 2);
-       z4r = (0, 0);
+       z3r = (-b, 0.5 [-d, h]);
+       z4r = (0, -d);
 
        penlabels (1, 2, 3, 4);
 
@@ -87,9 +89,9 @@ fet_beginchar ("accordion register discant", "discant")
 
        pickup penrazor scaled lt rotated 90;
 
-       top z5 = pat intersectionpoint ((0, lh + lt) -- (w, lh + lt));
+       top z5 = pat intersectionpoint ((0, lh + lt - d) -- (w, lh + lt - d));
        z6 = z5 xscaled -1;
-       bot z7 = pat intersectionpoint ((0, 2 lh) -- (w, 2 lh));
+       bot z7 = pat intersectionpoint ((0, 2 lh - d) -- (w, 2 lh - d));
        z8 = z7 xscaled -1;
 
        labels (5, 6, 7, 8);
@@ -122,12 +124,13 @@ fet_beginchar ("accordion register freebass", "freebass")
 
        set_char_box (r# + accreg_linethickness# / 2,
                      r# + accreg_linethickness# / 2,
-                     0, 2 r# + 0.7 accreg_linethickness#);
+                     0.7 accreg_linethickness# / 2,
+                     2 r# + 0.7 accreg_linethickness# / 2);
 
        lh = vround r;
        lt = vround (0.7 accreg_linethickness);
-
-       h := 2 lh + lt;
+       d := vround (0.7 accreg_linethickness / 2);
+       h := 2 lh + lt - d;
        b := w := (2 lh + hround accreg_linethickness) / 2;
 
        penpos1 (hround accreg_linethickness, 0);
@@ -135,10 +138,10 @@ fet_beginchar ("accordion register freebass", "freebass")
        penpos3 (accreg_linethickness, 180);
        penpos4 (lt, 270);
 
-       z1r = (w, h / 2);
+       z1r = (w, 0.5 [-d, h]);
        z2r = (0, h);
-       z3r = (-b, h / 2);
-       z4r = (0, 0);
+       z3r = (-b, 0.5 [-d, h]);
+       z4r = (0, -d);
 
        penlabels (1, 2, 3, 4);
 
@@ -180,12 +183,13 @@ fet_beginchar ("accordion register stdbass", "stdbass")
 
        set_char_box (r# + accreg_linethickness# / 2,
                      r# + accreg_linethickness# / 2,
-                     0, 2 r# + 0.7 accreg_linethickness#);
+                     0.7 accreg_linethickness# / 2,
+                     2 r# + 0.7 accreg_linethickness# / 2);
 
        lh = vround (1/2 r);
        lt = vround (0.7 accreg_linethickness);
-
-       h := 4 lh + lt;
+       d := vround (0.7 accreg_linethickness / 2);
+       h := 4 lh + lt - d;
        b := w := (4 lh + hround accreg_linethickness) / 2;
 
        penpos1 (hround accreg_linethickness, 0);
@@ -193,10 +197,10 @@ fet_beginchar ("accordion register stdbass", "stdbass")
        penpos3 (hround accreg_linethickness, 180);
        penpos4 (lt, 270);
 
-       z1r = (w, h / 2);
+       z1r = (w, 0.5 [-d, h]);
        z2r = (0, h);
-       z3r = (-b, h / 2);
-       z4r = (0, 0);
+       z3r = (-b, 0.5 [-d, h]);
+       z4r = (0, -d);
 
        penlabels (1, 2, 3, 4);
 
@@ -228,9 +232,9 @@ fet_beginchar ("accordion register stdbass", "stdbass")
 
        pickup penrazor scaled lt rotated 90;
 
-       top z5 = pat intersectionpoint ((0, lh + lt) -- (w, lh + lt));
+       top z5 = pat intersectionpoint ((0, lh + lt - d) -- (w, lh + lt - d));
        z6 = z5 xscaled -1;
-       bot z7 = pat intersectionpoint ((0, 3 lh) -- (w, 3 lh));
+       bot z7 = pat intersectionpoint ((0, 3 lh - d) -- (w, 3 lh - d));
        z8 = z7 xscaled -1;
 
        labels (5, 6, 7, 8);
@@ -252,24 +256,26 @@ fet_beginchar ("accordion register bayanbass", "bayanbass")
 
        set_char_box (accreg_lh# + accreg_linethickness# / 2,
                      accreg_lh# + accreg_linethickness# / 2,
-                     0, 3 accreg_lh# + accreg_linethickness#);
+                     accreg_linethickness# / 2,
+                     3 accreg_lh# + accreg_linethickness# / 2);
 
-       h := 3 lh + lt;
+       d := vround (accreg_linethickness# / 2);
+       h := 3 lh + lt - d;
 
-       draw_rounded_block ((-w, 0), (-w + lt, h), lt);
-       draw_rounded_block ((w - lt, 0), (w, h), lt);
+       draw_rounded_block ((-w, -d), (-w + lt, h), lt);
+       draw_rounded_block ((w - lt, -d), (w, h), lt);
 
        pickup penrazor scaled lt rotated 90;
 
-       bot z1 = (-w + lt / 2, 0);
-       bot z2 = (-w + lt / 2, lh);
-       bot z3 = (-w + lt / 2, 2 lh);
-       bot z4 = (-w + lt / 2, 3 lh);
+       bot z1 = (-w + lt / 2, -d);
+       bot z2 = (-w + lt / 2, lh - d);
+       bot z3 = (-w + lt / 2, 2 lh - d);
+       bot z4 = (-w + lt / 2, 3 lh - d);
 
-       bot z5 = (w - lt / 2, 0);
-       bot z6 = (w - lt / 2, lh);
-       bot z7 = (w - lt / 2, 2 lh);
-       bot z8 = (w - lt / 2, 3 lh);
+       bot z5 = (w - lt / 2, -d);
+       bot z6 = (w - lt / 2, lh - d);
+       bot z7 = (w - lt / 2, 2 lh - d);
+       bot z8 = (w - lt / 2, 3 lh - d);
 
        draw z1
             -- z5;
index f80afc91b9a1e5102ff00716c9ef91a0e57f7757..e20269218224053dcc8efdadcd4fe45691304e93 100644 (file)
@@ -3,10 +3,10 @@
 %
 % Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index a12b4ebda669051d6390564d89b3b6bed740c04c..e24f1605db2fe939ecf8bc36bb39b5e996be6bd4 100644 (file)
@@ -8,10 +8,10 @@
 % to automate generation of the lily tables.
 % The output should be parsed by the mf-to-table script.
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 2436c6f1f3131c9e7af5a1b1d8280004c948d318..1210262421a478024ef6ba167df54407d850cce9 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index cf4adea384a141171782a914ba6e4fea717d0ae9..df91510af7355a3cbe1fa724bf372a4f56bf7bfd 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index eacfc57a24dcfb952ba4bbd89c59d74d76443209..87fc66047dfccba037f8b27548b7ed3147b39386 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 4f4a6e961adcc4a91037d5175f1021c13497c4b0..ffad571c0c3c943635a1d70286c4335a829d68d7 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 31201f184d651613ddc3b110db3f0ef7f5b6a620..a0b130bdada639107e7bd2cd250aa5dbfb0a8448 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 920ac35a55ee487692f41d160ecfe5bc30788a93..ad31d2bcc8a2d392772f0d550271c72c4c4bccc3 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 9c233e0aded8c5426b24c20ce3b3e585a15031fb..545ca5a855b5ce4e97f5b1bb29249ea0347b0e3d 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index f8ea48dcacf9e4fba85c5d34d36a2935ba8b3281..646e153106f1a8044f312a375b469237bee27c6f 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index c8e7a73a106e30d32eb5ea94f6f34ca16dca1309..0f3fcd35673df1281a2ddc7b0f5159d28a30bc26 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 5ecd5b71a8980759e47f14b63b7d2e4cf4f9409a..c948f345fd6e525fa0d221606b96a55f86dc99e9 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %                Jan Nieuwenhuizen <janneke@gnu.org>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 2971f1e416f8784f3146892acf17130431c4478b..d3b29cab544fd8ff4caeb25e432445a666bca518 100644 (file)
@@ -3,10 +3,10 @@
 %
 % Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index e1c513f94dd7bf7ce4d36d81cfaeffb3051a6e09..d76b3414535e4403fc01f071dfb88fdbc81385cb 100644 (file)
@@ -5,10 +5,10 @@
 % Jan Nieuwenhuizen <janneke@gnu.org>,
 % Juergen Reuter <reuter@ipd.uka.de>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index c568aed7375303f44da5f5490f553d80d08d7f8b..be38847a2c2ec4970c71e8b403bd76b993b75ce9 100644 (file)
@@ -3,10 +3,10 @@
 %
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index c2728c3f08d225017b71d5610d2d28f995ccd86c..c1b7c43a6a5d4289c951712cce4e7e6f0b87331e 100644 (file)
@@ -3,10 +3,10 @@
 %
 % Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index a40e5d9b1e04485e114819bf9e155ceac40cfc7f..947cc8a35a487c91bfac13000e000812a9229d8c 100644 (file)
@@ -3,11 +3,10 @@
 %
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 81d68a49a3f291f0611b41584b3e7661eddd595b..2cd890f3b0008ffd341d29b1a7ad5f832ec0e821 100644 (file)
@@ -3,10 +3,10 @@
 %
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 16c31a7bebe611db84ceb5264331a8d2511bc121..0d253ce653d73d859e4ed9f5ab6124be77c8389b 100644 (file)
@@ -3,11 +3,10 @@
 %
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index b111c9444502775b8be1803191ded359521c2329..c464c3f7f8342488834f5a37608216c65f90d64f 100644 (file)
@@ -3,10 +3,10 @@
 %
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 70cf9a43957d0b630e375e16ed6934ce4f8f70ce..3c255073c8339bb64a559b2119e340c356423466 100644 (file)
@@ -3,11 +3,10 @@
 %
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index c45969ed6a60da78bbdb1117307c57477d7e7dae..82abf14e54bf3fb3ede1de6caab4cb6609a0f1cc 100644 (file)
@@ -5,11 +5,10 @@
 % & Han-Wen Nienhuys <hanwen@xs4all.nl>
 % & Juergen Reuter <reuter@ipd.uka.de>
 %
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -99,11 +98,6 @@ def draw_longa (expr up) =
        draw_outside_ellipse (1.80, 0, 0.707, 0);
        undraw_inside_ellipse (1.30, 125, 0.68, 2 stafflinethickness#);
 
-       set_char_box (stemthick#,
-                     width# + stemthick#,
-                     noteheight# / 2,
-                     noteheight# / 2);
-
        pickup pencircle scaled stemthick;
 
        % Longas of smaller design sizes should have their lines longer.
@@ -118,8 +112,12 @@ def draw_longa (expr up) =
                quanted_line_length := max (0.77, line_length);
        fi;
 
+
        final_line_length := quanted_line_length * staff_space;
 
+       save boxtop, boxbot;
+       define_pixels (boxtop, boxbot);
+
        if up:
                bot y1 = -final_line_length;
                top y2 = final_line_length;
@@ -130,6 +128,8 @@ def draw_longa (expr up) =
                x4 = x3;
                top y4 = h + 3.0 staff_space;
                y3 = y1;
+               boxtop# := staff_space# * (quanted_line_length + 3.0) - stemthick# ;
+               boxbot# := staff_space# * quanted_line_length;
        else:
                bot y1 = -d - 3.0 staff_space;
                top y2 = final_line_length;
@@ -140,11 +140,18 @@ def draw_longa (expr up) =
                x4 = x3;
                y4 = y2;
                bot y3 = -final_line_length;
+               boxtop# := staff_space# * quanted_line_length;
+               boxbot# := staff_space# * (quanted_line_length + 3.0) - stemthick# ;
        fi;
 
        draw_gridline (z1, z2, stemthick);
        draw_gridline (z3, z4, stemthick);
 
+       set_char_box (stemthick#,
+                     width# + stemthick#,
+                     boxbot#,
+                     boxtop#);
+
        labels (1, 2, 3, 4);
 enddef;
 
@@ -201,11 +208,6 @@ def draw_brevis (expr linecount, line_thickness_multiplier) =
        draw_outside_ellipse (1.80, 0, 0.707, 0);
        undraw_inside_ellipse (1.30, 125, 0.68, 2 stafflinethickness#);
 
-       set_char_box (stemthick# * linecount + gap# * (linecount - 1),
-                     width# + stemthick# * linecount + gap# * (linecount - 1),
-                     noteheight# / 2,
-                     noteheight# / 2);
-
        define_pixels (gap);
        pickup pencircle scaled stemthick;
 
@@ -221,6 +223,11 @@ def draw_brevis (expr linecount, line_thickness_multiplier) =
                quanted_line_length := max (0.77, line_length);
        fi;
 
+       set_char_box (stemthick# * linecount + gap# * (linecount - 1),
+                     width# + stemthick# * linecount + gap# * (linecount - 1),
+                     staff_space# * quanted_line_length,
+                     staff_space# * quanted_line_length);
+
        bot y1 = -quanted_line_length * staff_space;
        top y2 = quanted_line_length * staff_space;
        rt x1 - fudge = 0;
index 0e637550cab74851f05482108b698138aa7c1a4b..8ec75697ae2fc62870d0facc84adf8d93c4cff90 100644 (file)
@@ -3,10 +3,10 @@
 %
 % Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index a61edfe73b0cfa20a9c2cbfa27e301d249d5b954..8336df3306f441d7627d39def7926a3a196a3342 100644 (file)
@@ -3,10 +3,10 @@
 %
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index edad126265088095f9aa8d7a539a77da06e932ae..b4979ca4a6c608358390562f474cb6b28189224e 100644 (file)
@@ -5,10 +5,10 @@
 %
 % Voor Cup
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index b109d3bac2e21533a52f63e776e880009e624796..09439853a0b35a0b830e80db8bf5ec04d57985c2 100644 (file)
@@ -3,10 +3,10 @@
 %
 % Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 83859dbe66fc2b4af51bd7bf63947d9700db6913..91c3ae1fe49867c126308b3571d266194eb30479 100644 (file)
@@ -5,10 +5,10 @@
 %      Jan Nieuwenhuizen <janneke@gnu.org>
 %
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -1737,6 +1737,59 @@ fet_beginchar ("Straight caesura", "caesura.straight");
 fet_endchar;
 
 
+% A tick character to use instead of a comma or caesura as a breath mark.
+% Very common in vocal notation.
+
+fet_beginchar ("Tick mark", "tickmark");
+       save end_rad, bot_rad, pat, x_centre, x_extent;
+       path pat;
+
+       end_rad = linethickness / 2;
+       bot_rad = linethickness;
+
+       x_centre# = 0.6 staff_space#;
+       x_extent# = 1.7 staff_space#;
+
+       define_pixels (x_centre, x_extent);
+
+       pickup pencircle scaled end_rad;
+
+       lft x1 = -x_centre;
+       y1 = 0.8 staff_space;
+
+       x2 = 0;
+       y2l = 0;
+
+       top rt z3 = (x_extent - x_centre, x_extent);
+
+       x4 = lft x1;
+       y4 = staff_space;
+
+       penpos2 (0.4 staff_space, 90);
+       penpos3 (end_rad, angle(z4 - z3) + 90);
+       penpos1 (end_rad, angle(z2 - z1) + 90);
+
+       pat = z1r
+             .. top z1
+             .. z1l{z2 - z1}
+             .. {z2 - (z1 + (0.3 staff_space,0))}z2l + (-bot_rad, bot_rad)
+             .. z2l
+             .. z2l + (bot_rad, bot_rad){z3 - (0.6 staff_space, 0) - z2}
+             .. {z3 - z4}z3r
+             .. rt z3
+             .. {z4 - z3}z3l
+             .. {z2 - (z3 - (0.6 staff_space, 0))}rt z2r
+             .. {z1 - z2}lft z2r{z1 - z2}
+             .. cycle;
+       fill pat;
+
+       set_char_box (x_centre#, x_extent# - x_centre#, 0, x_extent#);
+
+       penlabels (1, 2, 3);
+       labels (4);
+fet_endchar;
+
+
 fet_beginchar ("snap pizzicato (Bartok pizzicato)", "snappizzicato");
        save height, width, thickness, superness;
 
index 62702e92ffcdad5e5f13a4bc61ccdca4416e9f8c..6df5e7ca5c77481afcaffbbc65d2d5ef6dc86bae 100644 (file)
@@ -3,10 +3,10 @@
 %
 % Copyright (C) 2011--2012 Bertrand Bordage <bordage.bertrand@gmail.com>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 2bbb7d91a50551722455d355b7c3560c34a1a0eb..0098f0ad424e4ca0cb8bab6cbccc8d140325042e 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 1998--2012 Mats Bengtsson <matsb@s3.kth.se>,
 %               Christian Mondrup <scancm@biobase.dk>
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 9ad4e698883382dffed7a4e414b5b4b5708a1b1e..ea63af0bfbe72d1dd708cf9da2a0c89f60fe3515 100644 (file)
@@ -3,11 +3,10 @@
 %
 % Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
 %
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 7ea7f14f68d8800602a6aae067514d2d10f30c9b..f7cf78563b09b70a20669ebaaa1ac6acee58e47e 100644 (file)
@@ -3,11 +3,10 @@
 %
 % Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
 % 
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 34a09cf20bc40d7b0def688c2af66fc54731362f..ec6561dc8e50a0cc001e6135c63a6b4caae99f23 100644 (file)
@@ -3,11 +3,10 @@
 %
 % Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
 %
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -443,6 +442,7 @@ def draw_brevis (expr exact_center, bwidth, bheight, blinethickness) =
        penlabels (1, 2, 3);
 enddef;
 
+
 %
 % Draw two brevis notes; the second one shifted down by `shift'.
 % The other parameters are the same as with `draw_brevis'.
@@ -522,87 +522,6 @@ def draw_double_brevis (expr exact_center, bwidth, bheight,
 enddef;
 
 
-%
-% Draw three brevis notes; the second one shifted down by `shift',
-% the third one by `2 shift'.
-% The other parameters are the same as with `draw_brevis'.
-%
-def draw_triple_brevis (expr exact_center, bwidth, bheight,
-                            blinethickness, shift) =
-       save brevis_width, brevis_height, linethickness;
-
-       brevis_width# = bwidth;
-       brevis_height# = bheight;
-       linethickness# = blinethickness;
-
-       save beam_width, beam_height;
-       save serif_size, serif_protrude, hole_height;
-
-       beam_width# = 1.4 linethickness#;
-       hole_height# = 3 linethickness#;
-       2 beam_height# + hole_height# = brevis_height#;
-       serif_size# = (hole_height# - linethickness#) / 2;
-       serif_protrude# = 1.5 serif_size#;
-
-       save xoffs, yoffs;
-
-       xoffs# = xpart exact_center;
-       yoffs# = ypart exact_center;
-
-       define_pixels (xoffs, yoffs);
-       define_pixels (brevis_width, brevis_height, linethickness);
-       define_pixels (beam_width, beam_height, serif_size, serif_protrude);
-
-       z1l = (xoffs, yoffs - linethickness);
-       z2r = z1r + serif_size * (1, -1);
-       z3l = z2l + (-serif_size, -serif_protrude);
-
-       penpos1 (beam_width, 0);
-       penpos2 (beam_height, 90);
-       penpos3 (beam_width, 180);
-
-       z7 = z1 shifted (0, -2 shift);
-       z8 = z2 shifted (0, -2 shift);
-       z9 = z3 shifted (0, -2 shift);
-       
-       penpos7 (beam_width, 0);
-       penpos8 (beam_height, 90);
-       penpos9 (beam_width, 180);
-
-       save pat_in, pat_out;
-       path pat_in, pat_out;
-
-       pat_out := z9r{down}
-                  .. z9l{up}
-                  .. z8l{right};
-       pat_out := pat_out
-                  -- reverse pat_out xscaled -1
-                                     shifted (2 xoffs + brevis_width, 0);
-       pat_out := pat_out
-                  -- reverse pat_out yscaled -1
-                                     shifted (0, -2 yoffs)
-                  -- cycle;
-
-       fill pat_out;
-
-       pat_in := z1r{down}
-                 .. z2r{right};
-       pat_in := pat_in
-                 -- reverse pat_in xscaled -1
-                                   shifted (2 xoffs + brevis_width, 0);
-       pat_in := pat_in
-                 -- reverse pat_in yscaled -1
-                                   shifted (0, 2 yoffs)
-                 -- cycle;
-
-       unfill pat_in;
-       unfill pat_in shifted (0, -shift);
-       unfill pat_in shifted (0, -2 shift);
-
-       penlabels (1, 2, 3, 7, 8, 9);
-enddef;
-
-
 def draw_neomensural_c_clef (expr exact_center, reduction) = 
        save reduced_il, reduced_slt, stem_width;
 
@@ -841,97 +760,108 @@ fet_beginchar ("petrucci c5 clef", "petrucci.c5_change");
 fet_endchar;
 
 
-def draw_mensural_c_clef (expr exact_center, reduction) =
-       % inspired by Ockeghem, "Missa Prolationum", in: MGG, volume
-       % 9, table 94.
-
-       save reduced_il;
+def draw_mensural_c_clef (expr exact_center, reduction, fill_char) =
+       save reduced_il, vert_thick, hor_thick, blot_rad;
 
        reduced_il# = staff_space# * reduction;
+       vert_thick# = linethickness# * 1.4;
+       hor_thick# = staff_space# * reduction * 0.25;
+
+       blot_rad = blot_diameter / 2;
+
+       define_pixels (reduced_il, vert_thick, hor_thick);
+
+       pickup pencircle scaled blot_diameter;
+
+       penpos1 (vert_thick, 0);
+       penpos2 (vert_thick, 0);
+       penpos3 (hor_thick, 90);
+       penpos4 (hor_thick, 90);
+       penpos5 (hor_thick, 90);
+       penpos6 (hor_thick, 90);
+       penpos7 (vert_thick, 0);
+       penpos8 (hor_thick, 90);
+
+       z1l = (0, 0);
+       x2l = 0;
+       top y2 = 2.2 reduced_il;
+       z3 = (vert_thick, 0.75 reduced_il);
+       z4 = z3 + (reduced_il - vert_thick, 0);
+       z5 = z4 + (vert_thick, -0.5 reduced_il);
+       z6 = z5 - (reduced_il, 0);
+       z7 = z4 + (0.5 vert_thick, 0.5 reduced_il);
+       z8 = z5 - (vert_thick, 0);
+
+       save pat, pat_mid;
+       path pat, pat_mid;
+
+       pat = z1l
+             -- z2l{up}
+             .. z2 + (0, blot_rad)
+             .. {down}z2r
+             -- top z3r{down}
+             .. {right}rt z3r
+             -- lft z4r{right}
+             .. {up}top z4r
+             -- z7l{up}
+             .. z7 + (0, blot_rad)
+             .. {down}z7r
+             -- top z5l{down}
+             .. {left}lft z5l
+             -- rt z6l{left}
+             .. {down}bot z6l
+             --z1r;
+       pat := pat
+              -- reverse pat yscaled -1
+              -- cycle;
+       fill pat;
 
-       define_pixels (reduced_il);
-
-       draw_triple_brevis (exact_center + (0, 0.5 staff_space#),
-                           2 reduced_il#, 0.8 staff_space#,
-                           0.8 linethickness#, staff_space);
-
-       save half_reduced_il;
-
-       half_reduced_il# = staff_space# * sqrt (reduction);
-
-       define_pixels (half_reduced_il);
-
-       set_char_box (0 - xpart exact_center,
-                     2 reduced_il# + xpart exact_center,
-                     2.2 half_reduced_il# + staff_space# -
-                       2 ypart exact_center,
-                     2.2 half_reduced_il# + 2 ypart exact_center);
-
-       save xoffs, yoffs;
-
-       xoffs# = xpart exact_center;
-       yoffs# = ypart exact_center;
-
-       define_pixels (xoffs, yoffs);
-
-       save ellipse, T;
-       path ellipse;
-       transform T;
+       if fill_char:
+               pat_mid = bot z3l{up}
+                         .. {right}rt z3l
+                         -- lft z4l{right}
+                         .. {down}bot z4l
+                         -- top z8r{down}
+                         .. {left}lft z8r
+                         -- rt z6r{left}
+                         .. {up}top z6r
+                         --cycle;
+               unfill pat_mid;
+
+               pat_mid := pat_mid shifted (0, -reduced_il);
+               unfill pat_mid;
+       fi;
 
-       T := identity xscaled 1.4 linethickness
-                     yscaled blot_diameter;
-       pickup pencircle transformed T;
-       ellipse := fullcircle transformed T;
+       set_char_box (0, reduced_il# + vert_thick#,
+                     2.2 reduced_il#, 2.2 reduced_il#);
 
-       lft x11 = lft x13 = xoffs;
-       top y11 = yoffs + 2.2 half_reduced_il;
-       bot y13 = yoffs - 2.2 half_reduced_il - staff_space;
-       rt x15 = rt x17 = xoffs + brevis_width;
-       y15 = yoffs + 1.4 half_reduced_il;
-       y17 = yoffs - 1.4 half_reduced_il - staff_space;
+       penlabels (1, 2, 3, 4, 5, 6, 7, 8);
+enddef;
 
-       z12 = z14 yscaled -1 shifted (0, -staff_space);
-       z14 = z9;
-       z16 = z18 yscaled -1 shifted (0, -staff_space);
-       rt z18 = lft z14 shifted (brevis_width, 0);
 
-       penpos12 (1.4 linethickness, 0);
-       penpos14 (1.4 linethickness, 0);
-       penpos16 (1.4 linethickness, 0);
-       penpos18 (1.4 linethickness, 0);
+fet_beginchar ("mensural c clef", "mensural.c");
+       if test = 1:
+               draw_staff (-1, 3, 0.0);
+       fi;
+       draw_mensural_c_clef ((0, 0), 1.0, true);
+fet_endchar;
 
-       fill get_subpath (ellipse, up, down, z11)
-            -- z12l
-            -- z12r
-            -- cycle;
-       fill get_subpath (ellipse, down, up, z13)
-            -- z14r
-            -- z14l
-            -- cycle;
-       fill get_subpath (ellipse, up, down, z15)
-            -- z16l
-            -- z16r
-            -- cycle;
-       fill get_subpath (ellipse, down, up, z17)
-            -- z18r
-            -- z18l
-            -- cycle;
 
-       labels (11, 13, 15, 17);
-       penlabels (12, 14, 16, 18);
-enddef;
+fet_beginchar ("mensural c clef", "mensural.c_change");
+       draw_mensural_c_clef ((0, 0), .8, true);
+fet_endchar;
 
 
-fet_beginchar ("mensural c clef", "mensural.c");
+fet_beginchar ("black mensural c clef", "blackmensural.c");
        if test = 1:
                draw_staff (-1, 3, 0.0);
        fi;
-       draw_mensural_c_clef ((0, 0), 1.0);
+       draw_mensural_c_clef ((0, 0), 1.0, false);
 fet_endchar;
 
 
-fet_beginchar ("mensural c clef", "mensural.c_change");
-       draw_mensural_c_clef ((0, 0), .8);
+fet_beginchar ("black mensural c clef", "blackmensural.c_change");
+       draw_mensural_c_clef ((0, 0), 0.8, false);
 fet_endchar;
 
 
index 3729679d720c53c4bba65bbc7726d38ce710e02e..08bf714858c738f7c234200d12ec419b144edcb3 100644 (file)
@@ -3,11 +3,10 @@
 %
 % Copyright (C) 2000--2012 Juergen Reuter <reuter@ipd.uka.de>
 % 
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 4e77d9c465c64d3b67e123ca41b738fc71b4e716..86a8ee7f4c167d891420b3d7643235ef8e478245 100644 (file)
@@ -3,11 +3,10 @@
 %
 % Copyright (C) 2006--2012 Juergen Reuter <reuter@ipd.uka.de>
 % 
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 13febbca6cc942851124491c7141411cd63c8923..9c136745d64220bdb1462509a21565bb74eed36c 100644 (file)
@@ -3,11 +3,10 @@
 %
 % Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
 % 
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -41,56 +40,39 @@ dir_down := -1;
 %
 
 def draw_mensural_outermost_flare (expr staffline_adjustment, d_) =
-       define_pixels (linethickness, staff_space);
-
-       save ellipse, pat, T;
-       path ellipse, pat;
-       transform T;
-
-       T := identity xscaled 1.00 linethickness
-                     yscaled 0.22 staff_space
-                     rotated -35;
-       pickup pencircle transformed T;
-       ellipse := fullcircle transformed T;    
-
-       z11 = (+0.00 staff_space, -0.00 staff_space);
-       z12 = (+0.15 staff_space, -0.00 staff_space);
+    save flag_end, flag_right;
 
        if staffline_adjustment = between_staff_lines:
-               z13 = (+0.45 staff_space, -0.35 staff_space);
-               z14 = (+0.45 staff_space, -0.85 staff_space);
-               z15 = (+0.00 staff_space, -2.00 staff_space);
+               flag_end := 1.9;
+               flag_right := 0.6;
        elseif staffline_adjustment = on_staff_line:
-               z13 = (+0.20 staff_space, -0.05 staff_space);
-               z14 = (+0.20 staff_space, -1.15 staff_space);
-               z15 = (+0.00 staff_space, -1.40 staff_space);
+               flag_end := 1.4;
+               flag_right := 0.5;
        else: % staffline_adjustment = anywhere
-               z13 = (+0.33 staff_space, -0.20 staff_space);
-               z14 = (+0.33 staff_space, -1.00 staff_space);
-               z15 = (+0.00 staff_space, -1.70 staff_space);
+               flag_end := 1.7;
+               flag_right := 0.6;
        fi;
 
-       pat := z13{z13 - z12}
-              .. {z15 - z14}z14;
-
-       fill get_subpath (ellipse, z11 - z12, z12 - z11, z11)
-            -- get_subpoint (ellipse, z12 - z11, z12)
-            -- get_subpoint (ellipse, z13 - z12, z12)
-            -- get_subpoint (ellipse, direction 0 of pat, z13)
-                 {direction 0 of pat}
-            .. {direction 1 of pat}
-                 get_subpoint (ellipse, direction 1 of pat, z14)
-            -- get_subpath (ellipse, z15 - z14, z14 - z15, z15)
-            -- get_subpoint (ellipse, -direction 1 of pat, z14)
-                 {-direction 1 of pat}
-            .. {-direction 0 of pat}
-                 get_subpoint (ellipse, -direction 0 of pat, z13)
-            -- get_subpath (ellipse, z12 - z13, z11 - z12, z12)
-            -- cycle;
+       penpos1 (0.25 staff_space, 90);
+       penpos2 (0.2 staff_space, 0);
+       penpos3 (0.1 staff_space, -35);
+       z1r = (0, 0);
+       z2r = (flag_right * staff_space, -0.4 staff_space);
+       z3l = (0, -1.0 * flag_end * staff_space);
+       fill z1l
+            .. tension 2.0
+            .. z2l
+            .. tension 3.0
+            .. { dir -125 }z3l{ dir -125 }
+            .. { dir 55 }z3r{dir 55 }
+            .. tension 3.0
+            .. z2r
+            .. tension 2.0
+            .. z1r
+            -- cycle ;
+       draw_square_block ((-0.5 stemthickness_rounded, 0),
+                          (0, -0.25 staff_space));
 
-       if d_ = dir_up:
-               labels (11, 12, 13, 14, 15);
-       fi;
 enddef;
 
 
@@ -185,7 +167,8 @@ def draw_mensural_flag (expr staffline_adjustment, flares, d_) =
 
        if d_ = dir_down:
                currentpicture := currentpicture xscaled -1
-                                                yscaled -1;
+                                                yscaled -1
+                                                shifted (-0.5 stemthickness_rounded, 0);
        fi;
 enddef;
 
index c07bd219662a08d737fd3585d04f97369a078932..31b35ff25ba4db2a4fcdc263a9e0c9b13b843683 100644 (file)
@@ -3,11 +3,10 @@
 %
 % Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
 %
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 6554c8b210ad36fae99944a2b243803e8c4dd240..a42a1db393bd66aed906f078b5a8e7e4b6e18415 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 3ccaca909442bec0f98d95da3ffccd35f68c338f..a4103791ff8302c808f4c2529def1013b2fd3f09 100644 (file)
@@ -3,11 +3,10 @@
 %
 % Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index afc713f3523e89e60c4c66f1233e013fe1e9a941..cf1bfae111f97d683063ec938276762e038ed450 100644 (file)
@@ -6,10 +6,10 @@
 % Neo-mensural heads originally by
 % Christian Mondrup and Mats Bengtsson
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -166,7 +166,7 @@ def draw_neomensural_longa (expr wid, holeheight, direction) =
 enddef;
 
 
-def draw_neomensural_black_head (expr width, height) =
+def draw_neomensural_black_head (expr width, height, concaveness) =
        save head_width, head_height, stem_width;
        save ne, nw, ne_dist, nw_dist;
        pair ne, nw, ne_dist, nw_dist;
@@ -197,25 +197,25 @@ def draw_neomensural_black_head (expr width, height) =
        ne_dist := (nw rotated -90) * blot_diameter / 2;
 
        fill lft z1
-            .. (z1 + nw_dist)
-            -- (z2 + nw_dist)
+            .. (z1 + nw_dist){ ne rotated -concaveness }
+            .. { ne rotated concaveness }(z2 + nw_dist)
             .. top z2
-            .. (z2 + ne_dist)
-            -- (z3 + ne_dist)
+            .. (z2 + ne_dist){ nw rotated (180 - concaveness) }
+            .. { nw rotated (180 + concaveness) }(z3 + ne_dist)
             .. rt z3
-            .. (z3 - nw_dist)
-            -- (z4 - nw_dist)
+            .. (z3 - nw_dist){ ne rotated (180 - concaveness) }
+            .. { ne rotated (180 + concaveness) }(z4 - nw_dist)
             .. bot z4
-            .. (z4 - ne_dist)
-            -- (z1 - ne_dist)
+            .. (z4 - ne_dist){ nw  rotated -concaveness }
+            .. { nw  rotated concaveness }(z1 - ne_dist)
             .. cycle;
 
        labels (1, 2, 3, 4);
 enddef;
 
 
-def draw_neomensural_open_head (expr width, height)=
-       draw_neomensural_black_head (width, height);
+def draw_neomensural_open_head (expr width, height, concaveness)=
+       draw_neomensural_black_head (width, height, concaveness);
 
        save headNW, headSW, stem_width;
 
@@ -317,15 +317,15 @@ save nm_height, nm_width;
 nm_height := noteheight#;
 nm_width := staff_space#;
 fet_beginchar ("Neo-mensural semibrevis head", "s0neomensural");
-       draw_neomensural_open_head (nm_width, nm_height);
+       draw_neomensural_open_head (nm_width, nm_height, 0);
 fet_endchar;
 
 fet_beginchar ("Neo-mensural minima head", "s1neomensural");
-       draw_neomensural_open_head (nm_width, nm_height);
+       draw_neomensural_open_head (nm_width, nm_height, 0);
 fet_endchar;
 
 fet_beginchar ("Neo-mensural semiminima head", "s2neomensural");
-       draw_neomensural_black_head (nm_width, nm_height);
+       draw_neomensural_black_head (nm_width, nm_height, 0);
 fet_endchar;
 
 %%%%%%%%
@@ -342,13 +342,13 @@ fet_endchar;
 %
 
 fet_beginchar ("Harmonic notehead (Neo-mensural open)", "s0harmonic");
-       draw_neomensural_open_head (1.3 staff_space#, 1.3 noteheight#);
+       draw_neomensural_open_head (1.3 staff_space#, 1.3 noteheight#, 5);
        charwx := head_width#;
        charwy := 0;
 fet_endchar;
 
 fet_beginchar ("Harmonic notehead (Neo-mensural black)", "s2harmonic");
-       draw_neomensural_black_head (1.3 staff_space#, 1.3 noteheight#);
+       draw_neomensural_black_head (1.3 staff_space#, 1.3 noteheight#, 5);
        charwx := head_width#;
        charwy := 0;
 fet_endchar;
@@ -737,15 +737,15 @@ petrucci_height := 1.4 noteheight#;
 petrucci_width := .72 petrucci_height;
 
 fet_beginchar ("Petrucci semibrevis head", "s0petrucci");
-       draw_neomensural_open_head (petrucci_width, petrucci_height);
+       draw_neomensural_open_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci minima head", "s1petrucci");
-       draw_neomensural_open_head (petrucci_width, petrucci_height);
+       draw_neomensural_open_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci semiminima head", "s2petrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 
@@ -754,15 +754,15 @@ fet_endchar;
 %
 
 fet_beginchar ("Petrucci colored semibrevis head", "s0blackpetrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci colored minima head", "s1blackpetrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci colored semiminima head", "s2blackpetrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 
index b8b3c51ce8cb4c26e3b400795e888308b0d6a749..d238211b7e2aba6be7b2e892cced1ae836376ab5 100644 (file)
@@ -7,10 +7,10 @@
 % Christian Mondrup and Mats Bengtsson.
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 7899fcba428f01c8e26b1fdf48f8d1ab65aca58d..cc96bbc465661a7437277c6c2ef512c2f78804e0 100644 (file)
@@ -4,10 +4,10 @@
 % Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
 % 
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index 598835586a10a2f3e2b94dc963c48355162a5620..ef0fa621a5506dd73c2b91b018c094d512a0d043 100644 (file)
@@ -5,11 +5,10 @@
 %               Christian Mondrup <scancm@biobase.dk>
 % Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
 %
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
index c62e64887e189102b61edfd257b0bb740f39c15a..31c763c7f3d013493cd45426b3769bd0b8394f36 100644 (file)
@@ -1 +1 @@
-See http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=log;h=refs/tags/release/2.16.2-1
+See http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=log;h=refs/tags/release/2.18.0-1
index a4e5ae7a0c4b979b3418981d75d613688a74ce76..2424106466753cd7eb84296d27ddaf7753d20856 100644 (file)
-commit 11cdcc31caf00b9b4931bcda846e14fdfddcfd41
+commit aef26ebc6cc020fb83c5ad6150a8be7d41f44862
 Author: Phil Holmes <mail@philholmes.net>
-Date:   Fri Jan 4 13:32:22 2013 +0000
+Date:   Sun Dec 29 16:25:45 2013 +0000
 
-    Release: update news.
+    Release: bump VERSION_STABLE.
 
-diff --git a/Documentation/web/news-front.itexi b/Documentation/web/news-front.itexi
-index 2d0a892..0de5407 100644
---- a/Documentation/web/news-front.itexi
-+++ b/Documentation/web/news-front.itexi
-@@ -9,17 +9,17 @@
- @c used for news about the upcoming release; see CG 10.2
- @newsItem
--@subsubheading LilyPond 2.16.1 released!  @emph{November 9, 2012}
-+@subsubheading LilyPond 2.16.2 released!  @emph{January 4, 2013}
--We are happy to announce the release of LilyPond 2.16.1. This has a number of
--updates to the previous stable version, and should cause no problems. We
--recommend that everybody upgrade to this version.
-+We are happy to announce the release of LilyPond 2.16.2. This release is mainly
-+to correct a problem with lilypond-book running on Windows. We recommend that
-+only people requiring this functionality upgrade to this version.
- @newsEnd
- @newsItem
--@subsubheading LilyPond 2.17.6 released!  @emph{November 3, 2012}
-+@subsubheading LilyPond 2.17.9 released!  @emph{December 15, 2012}
--We are happy to announce the release of LilyPond 2.17.6.  This
-+We are happy to announce the release of LilyPond 2.17.9.  This
- release contains the usual number of bugfixes and enhancements, and contains
- some work in progress.  You will have access to the very latest features, but
- some may be incomplete, and you may encounter bugs and crashes.  If you require
-@@ -28,30 +28,41 @@ a stable version of Lilypond, we recommend using the 2.16 version.
- @newsEnd
- @newsItem
--@subsubheading LilyPond 2.17.5 released!  @emph{October 20, 2012}
-+@subsubheading The LilyPond Report #28.  @emph{November 12, 2012}
--We are happy to announce the release of LilyPond 2.17.5.  This
--release contains the usual number of bugfixes and enhancements, and contains
--some work in progress.  You will have access to the very latest features, but
--some may be incomplete, and you may encounter bugs and crashes.  If you require
--a stable version of Lilypond, we recommend using the 2.16 version.
-+The @uref{http://news.lilynet.net/?The-LilyPond-Report-28, October
-+issue of the @emph{LilyPond Report}} focuses on the
-+@uref{http://news.lilynet.net/?LilyPond-meeting-in-Waltrop,
-+meeting of LilyPond developers and users} in Waltrop, Germany last
-+August.  Of course, there are also some musings on LilyPond
-+triggered by the release of 2.16.0 and 2.17.0 occuring from that
-+venue.
-+
-+There are also two monthly financial reports from David Kastrup
-+whose work on LilyPond is
-+@uref{http://news.lilynet.net/?The-LilyPond-Report-24#an_urgent_request_for_funding,
-+solely paid for} by financial contributions from other developer
-+and users (thank you!), and a report about experiences from
-+@uref{http://scorio.com, a web-based music typesetting service}
-+using LilyPond internally.
-+Come @uref{http://news.lilynet.net/?The-LilyPond-Report-28, read
-+LilyPond Report 28} now; comments and contributions are warmly
-+encouraged!
- @newsEnd
- @newsItem
--@subsubheading LilyPond 2.17.4 released!  @emph{October 6, 2012}
--
--We are happy to announce the release of LilyPond 2.17.4.  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.16 version.
-+@subsubheading LilyPond 2.16.1 released!  @emph{November 9, 2012}
-+We are happy to announce the release of LilyPond 2.16.1. This has a number of
-+updates to the previous stable version, and should cause no problems. We
-+recommend that everybody upgrade to this version.
- @newsEnd
- @newsItem
- @subsubheading Lilypond 2.16.0 released!  @emph{August 24, 2012}
--We are proud to announce the release of GNU LilyPond 2.16.0.
-+We are proud to announce the release of GNU LilyPond 2.16.1.
- LilyPond is a music engraving program, devoted to producing the
- highest-quality sheet music possible.  It brings the aesthetics of
- traditionally engraved music to computer printouts.
-diff --git a/Documentation/web/news.itexi b/Documentation/web/news.itexi
-index 0a21c0d..1331adf 100644
---- a/Documentation/web/news.itexi
-+++ b/Documentation/web/news.itexi
-@@ -28,6 +28,220 @@ NOTE:
- @newsItem
-+@subsubheading LilyPond 2.17.8 released!  @emph{December 1, 2012}
-+
-+We are happy to announce the release of LilyPond 2.17.8.  This
+diff --git a/VERSION b/VERSION
+index 4221957..a830836 100644
+--- a/VERSION
++++ b/VERSION
+@@ -1,7 +1,7 @@
+ PACKAGE_NAME=LilyPond
+ MAJOR_VERSION=2
+-MINOR_VERSION=17
+-PATCH_LEVEL=98
++MINOR_VERSION=18
++PATCH_LEVEL=0
+ MY_PATCH_LEVEL=
+ VERSION_STABLE=2.18.0
+-VERSION_DEVEL=2.17.98
++VERSION_DEVEL=2.17.97
diff --git a/po/ca.po b/po/ca.po
new file mode 100644 (file)
index 0000000..519b5aa
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,4007 @@
+# Translation of LilyPond.
+# Copyright (C) 1998--2012 Han-Wen Nienhuys, Jan Nieuwenhuizen
+# This file is distributed under the same license as the lilypond package.
+# Walter Garcia-Fontes <walter.garcia@upf.edu>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lilypond-2.17.96\n"
+"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
+"POT-Creation-Date: 2013-11-24 12:14+0000\n"
+"PO-Revision-Date: 2013-11-30 19:23+0100\n"
+"Last-Translator: Walter Garcia-Fontes <walter.garcia@upf.edu>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: book_base.py:26
+#, python-format
+msgid "file not found: %s"
+msgstr "no s'ha trobat el fitxer: %s"
+
+#: book_base.py:164
+msgid "Output function not implemented"
+msgstr "Funció de sortida sense implementar"
+
+#: book_latex.py:174
+msgid "cannot find \\begin{document} in LaTeX document"
+msgstr "no s'ha pogut trobar \\begin{document} al document LaTeX"
+
+#: book_latex.py:190
+#, python-format
+msgid "Running `%s' on file `%s' to detect default page settings.\n"
+msgstr "S'està executant `%s' al fitxer `%s' per detectar els paràmetres de pàgina predeterminada.\n"
+
+#: book_latex.py:212 book_texinfo.py:228
+msgid "Unable to auto-detect default settings:\n"
+msgstr "No es pot detectar automàticament els paràmetres predeterminats:\n"
+
+#: book_latex.py:224 book_texinfo.py:240
+#, python-format
+msgid ""
+"Unable to auto-detect default settings:\n"
+"%s"
+msgstr ""
+"No es pot detectar automàticament els paràmetres per defecte:\n"
+"%s"
+
+#: book_latex.py:247
+msgid "cannot detect textwidth from LaTeX"
+msgstr "no es pot detectar l'amplada del text de LaTeX"
+
+#: book_snippets.py:406
+#, python-format
+msgid "deprecated ly-option used: %s=%s"
+msgstr "ly-option usada obsoleta: %s=%s"
+
+#: book_snippets.py:408
+#, python-format
+msgid "compatibility mode translation: %s=%s"
+msgstr "traducció en mode compatibilitat: %s=%s"
+
+#: book_snippets.py:411
+#, python-format
+msgid "deprecated ly-option used: %s"
+msgstr "ly-option usada obsoleta: %s"
+
+#: book_snippets.py:413
+#, python-format
+msgid "compatibility mode translation: %s"
+msgstr "traducció en mode compatibilitat: %s"
+
+#: book_snippets.py:530
+#, python-format
+msgid "ignoring unknown ly option: %s"
+msgstr "s'ignorarà l'opció ly desconeguda: %s"
+
+#: book_snippets.py:621
+#, python-format
+msgid "Missing files: %s"
+msgstr "Manquen fitxers: %s"
+
+#: book_snippets.py:651
+#, python-format
+msgid "Could not overwrite file %s"
+msgstr "No s'ha pogut sobreescriure el fitxer %s"
+
+#: book_snippets.py:738
+#, python-format
+msgid "Running through filter `%s'"
+msgstr "S'està executant a través del filtre `%s'"
+
+#: book_snippets.py:759
+#, python-format
+msgid "`%s' failed (%d)"
+msgstr "`%s' ha fallat (%d)"
+
+#: book_snippets.py:760
+msgid "The error log is as follows:"
+msgstr "El registre d'error és com segueix:"
+
+#: book_snippets.py:880
+#, python-format
+msgid "Converting MusicXML file `%s'...\n"
+msgstr "S'està converting el fitxer MusicXML `%s'...\n"
+
+#: book_snippets.py:907
+#, python-format
+msgid ""
+"%s: duplicate filename but different contents of original file,\n"
+"printing diff against existing file."
+msgstr ""
+"%s: fitxer duplicat però contingut diferent del fitxer original,\n"
+"s'està imprimint la diferència respecte el fitxer existent."
+
+#: book_snippets.py:920
+#, python-format
+msgid ""
+"%s: duplicate filename but different contents of converted lilypond file,\n"
+"printing diff against existing file."
+msgstr ""
+"%s: fitxer duplicat però contingut diferent del fitxer convertit de lilypond,\n"
+"S'està imprimint la diferència respecte el fitxer existent."
+
+#. Work around a texi2pdf bug: if LANG=C is not given, a broken regexp is
+#. used to detect relative/absolute paths, so the absolute path is not
+#. detected as such and this command fails:
+#: book_texinfo.py:206
+#, python-format
+msgid "Running texi2pdf on file %s to detect default page settings.\n"
+msgstr "S'està executant texi2pdf sobre el fitxer %s per detectar els paràmetres de pàgina per defecte.\n"
+
+#: convertrules.py:13
+#, python-format
+msgid "Not smart enough to convert %s."
+msgstr "No hi ha prou informació per convertir %s."
+
+#: convertrules.py:14
+msgid "Please refer to the manual for details, and update manually."
+msgstr "Sisplau referiu-vos al manual per a detalls, i actualitzeu manualment."
+
+#: convertrules.py:15
+#, python-format
+msgid "%s has been replaced by %s"
+msgstr "%s s'ha reemplaçat per %s"
+
+#: convertrules.py:25 lilylib.py:136 warn.cc:223
+#, c-format, python-format
+msgid "warning: %s"
+msgstr "advertiment: %s"
+
+#: convertrules.py:50 convertrules.py:95
+msgid "\\header { key = concat + with + operator }"
+msgstr "\\\\header { clau = concatenació + amb + operador }"
+
+#: convertrules.py:57
+#, python-format
+msgid "deprecated %s"
+msgstr "%s obsolet"
+
+#: convertrules.py:66
+msgid "deprecated \\textstyle, new \\key syntax"
+msgstr "\\textstyle obsolet, nova sintaxi \\key"
+
+#: convertrules.py:82 convertrules.py:1856 convertrules.py:2032
+#: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801
+#: convertrules.py:3151 convertrules.py:3385
+msgid "bump version for release"
+msgstr "fixa la versió per al llançament"
+
+#: convertrules.py:98
+msgid "new \\header format"
+msgstr "nou format de \\header"
+
+#: convertrules.py:125
+msgid "\\translator syntax"
+msgstr "sintaxi de \\translator"
+
+#: convertrules.py:176
+msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
+msgstr "Alternativa de música de \\repeat NUM -> Alternativa de música \\repeat FOLDSTR"
+
+#: convertrules.py:206 convertrules.py:679 convertrules.py:1351
+#: convertrules.py:2318
+#, python-format
+msgid "deprecate %s"
+msgstr "%s obsolet"
+
+#: convertrules.py:280
+#, python-format
+msgid "deprecate %s "
+msgstr "torna %s obsolet"
+
+#: convertrules.py:306
+msgid "new \\notenames format"
+msgstr "nou format de \\notenames"
+
+#: convertrules.py:322
+msgid "new tremolo format"
+msgstr "nou format de trèmolo"
+
+#: convertrules.py:326
+msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver"
+msgstr "Staff_margin_engraver obsolet, useu Instrument_name_engraver"
+
+#: convertrules.py:377
+msgid "change property definition case (eg. onevoice -> oneVoice)"
+msgstr "canvieu les majúscules de la definició de propietat (per exemple onevoice -> oneVoice)"
+
+#: convertrules.py:438
+msgid "new \\textscript markup text"
+msgstr "nou text de marcat de \\textscript"
+
+#: convertrules.py:510
+#, python-format
+msgid "identifier names: %s"
+msgstr "noms d'identificador: %s"
+
+#: convertrules.py:549
+msgid "point-and-click argument changed to procedure."
+msgstr "l'argument d'escollir i clicar s'ha a canviat a un procediment."
+
+#: convertrules.py:591
+msgid "semicolons removed"
+msgstr "els punts i coma s'han eliminat"
+
+#. 40 ?
+#: convertrules.py:634
+#, python-format
+msgid "%s property names"
+msgstr "noms de propietat %s"
+
+#: convertrules.py:704
+msgid "automaticMelismata turned on by default"
+msgstr "l'automaticMelismata s'ha habilitat per defecte"
+
+#: convertrules.py:709
+msgid "automaticMelismata is turned on by default since 1.5.67."
+msgstr "l'automaticMelismata s'ha habilitat per defecte des de 1.5.67."
+
+#: convertrules.py:943 convertrules.py:1636 convertrules.py:1890
+#: convertrules.py:2135
+#, python-format
+msgid "remove %s"
+msgstr "elimina %s"
+
+#: convertrules.py:978 convertrules.py:981
+msgid "cluster syntax"
+msgstr "sintaxi de cluster"
+
+#: convertrules.py:988
+msgid "new Pedal style syntax"
+msgstr "nou estil de sintaxis de Pedal"
+
+#: convertrules.py:1247
+msgid ""
+"New relative mode,\n"
+"Postfix articulations, new text markup syntax, new chord syntax."
+msgstr ""
+"Nou mode relatiu,\n"
+"Articulacions postfix, nova sintaxi de marcat de text, nova sintaxi d'acords."
+
+#: convertrules.py:1260
+msgid "Remove - before articulation"
+msgstr "Elimineu - abans de l'articulació"
+
+#: convertrules.py:1295
+#, python-format
+msgid "%s misspelling"
+msgstr "%s escriptura incorrecta"
+
+#: convertrules.py:1314
+msgid "Swap < > and << >>"
+msgstr "Intercanvieu < > i << >>"
+
+#: convertrules.py:1317
+msgid "attempting automatic \\figures conversion.  Check results!"
+msgstr "s'està intentant la conversió automàtica \\figures. Verifiqueu els resultats!"
+
+#: convertrules.py:1363
+msgid "Use Scheme code to construct arbitrary note events."
+msgstr "Useu codi Scheme per construir esdeveniments de nota arbitraris."
+
+#: convertrules.py:1370
+msgid ""
+"use symbolic constants for alterations,\n"
+"remove \\outputproperty, move ly:verbose into ly:get-option"
+msgstr ""
+"useu constants simbòliques per a les alteracions,\n"
+"elimineu \\outputproperty, canvieu ly:verbose a ly:get_option"
+
+#: convertrules.py:1395
+#, python-format
+msgid ""
+"\\outputproperty found,\n"
+"Please hand-edit, using\n"
+"\n"
+"  \\applyoutput #(outputproperty-compatibility %s '%s <GROB PROPERTY VALUE>)\n"
+"\n"
+"as a substitution text."
+msgstr ""
+"s'ha trobat \\outputproperty,\n"
+"Sisplau editeu-lo a mà, usant\n"
+"\n"
+"\\applyoutput #(outputproperty-compatibility %s '%s <VALOR D'OBJECTE GRÀFIC>)\n"
+"\n"
+"com a text de substitució."
+
+#: convertrules.py:1407
+msgid ""
+"The alteration field of Scheme pitches was multiplied by 2\n"
+"to support quarter tone accidentals.  You must update the following constructs manually:\n"
+"\n"
+"* calls of ly:make-pitch and ly:pitch-alteration\n"
+"* keySignature settings made with \\property\n"
+msgstr ""
+"El camp d'alteració de to es va multiplicar per 2\n"
+"per donar suport a alteracions de quart de to. Heu d'actualitzar manualment \n"
+"les següents construccions:\n"
+"\n"
+"* crides a ly:make-pitch i ly:pitch-alteration\n"
+"* configuracions keySignature fetes amb \\property\n"
+
+#: convertrules.py:1450
+msgid "removal of automaticMelismata; use melismaBusyProperties instead."
+msgstr "supressió de automaticMelismata; useu en canvi melistamataBusyProperties."
+
+#: convertrules.py:1557
+msgid "\\partcombine syntax change to \\newpartcombine"
+msgstr "sintaxi \\partcombine canviada a  \\newpartcombine"
+
+#: convertrules.py:1582
+msgid ""
+"Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
+"Harmonic notes. Thread context removed. Lyrics context removed."
+msgstr ""
+"Canvia la notació de percussió. Es remou \\chormodifies, \\notenames.\n"
+"Notes harmòniques. Context de fil suprès. Context de lletres de cançons suprès."
+
+# S'ha trobat percussió. Encercleu les notes de percussió en \drumnode
+#: convertrules.py:1586
+msgid "Drums found. Enclose drum notes in \\drummode"
+msgstr "S'han trobat percussions. Incloeu les notes de percussió dins \\drummode"
+
+#: convertrules.py:1597 convertrules.py:1604 convertrules.py:1615
+#, python-format
+msgid ""
+"\n"
+"%s found. Check file manually!\n"
+msgstr ""
+"\n"
+"S'ha trobat %s. Verifiqueu el fitxer manualment!\n"
+
+#: convertrules.py:1597
+msgid "Drum notation"
+msgstr "Notació de percussió"
+
+#: convertrules.py:1656
+msgid "new syntax for property settings:"
+msgstr "nova sintaxi per a paràmetres de les propietats:"
+
+#: convertrules.py:1682
+msgid "Property setting syntax in \\translator{ }"
+msgstr "Sintaxi de paràmetres de propietat a \\translator{ }"
+
+#: convertrules.py:1721
+msgid "Scheme grob function renaming"
+msgstr "Canvi de nom de la funció d'elements gràfics Scheme"
+
+#: convertrules.py:1732 convertrules.py:2139 convertrules.py:2143
+#: convertrules.py:2709
+#, python-format
+msgid "Use %s\n"
+msgstr "Useu %s\n"
+
+#: convertrules.py:1748
+msgid "More Scheme function renaming"
+msgstr "Més canvis de nom de funcions Scheme"
+
+#: convertrules.py:1872
+msgid ""
+"Page layout has been changed, using paper size and margins.\n"
+"textheight is no longer used.\n"
+msgstr ""
+"La disposició de pàgina ha canviat, s'està usant la dimensió i els marges de la pàgina.<\n"
+"No s'usa més textheight.\n"
+
+#: convertrules.py:1958
+msgid ""
+"\\foo -> \\foomode (for chords, notes, etc.)\n"
+"fold \\new FooContext \\foomode into \\foo."
+msgstr ""
+"\\foo -> \\foomode (per a acords, notes, etc.)\n"
+"plegueu \\new FooContext \\foomode en \\foo."
+
+#: convertrules.py:1996
+msgid ""
+"staff size should be changed at top-level\n"
+"with\n"
+"\n"
+"  #(set-global-staff-size <STAFF-HEIGHT-IN-POINT>)\n"
+"\n"
+msgstr ""
+"la dimensió del pentagrama s'hauria de caviar al primer nivell\n"
+"amb\n"
+" #(set-global-staff-size <ALÇADA-DEL-PENTAGRAMA-EN-PUNTS>)\n"
+
+#: convertrules.py:2016
+msgid "regularize other identifiers"
+msgstr "regularitza d'altres identificadors"
+
+#: convertrules.py:2084
+msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
+msgstr "\\encoding: recodificació intel·ligent latin1..utf-0. Elimineu ly:point-and-click"
+
+#: convertrules.py:2095
+msgid "LilyPond source must be UTF-8"
+msgstr "El codi LilyPond ha de ser UTF-8"
+
+#: convertrules.py:2098
+msgid "Try the texstrings backend"
+msgstr "Proveu el mecanisme de cadenes de caràcters"
+
+#: convertrules.py:2101
+#, python-format
+msgid "Do something like: %s"
+msgstr "Feu quelcom com: %s"
+
+#: convertrules.py:2104
+msgid "Or save as UTF-8 in your editor"
+msgstr "O deseu com a UTF-8 al vostre editor"
+
+#: convertrules.py:2154
+msgid "warn about auto beam settings"
+msgstr "adverteix-me sobre paràmetres per a vírgules automàtiques"
+
+#: convertrules.py:2158
+msgid "auto beam settings"
+msgstr "paràmetres de pliques automàtiques"
+
+#: convertrules.py:2159
+msgid ""
+"\n"
+"Auto beam settings must now specify each interesting moment in a measure\n"
+"explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n"
+msgstr ""
+"\n"
+"Els paràmetres per a vírgules automàtiques han d'especificar ara\n"
+"explícitament cada  moment interessant en un compàs; no es multiplica\n"
+"més la duració 1/4 per cobrir també duracions d'1/2 i 3/4.\n"
+
+#: convertrules.py:2272
+msgid "verticalAlignmentChildCallback has been deprecated"
+msgstr "verticalAlignmentChildCallback ha caigut en desús"
+
+#: convertrules.py:2277
+msgid "Remove callbacks property, deprecate XY-extent-callback."
+msgstr "Remogueu les propietats de crida de retorn, XY-extent-callback ha caigut en desús"
+
+#: convertrules.py:2298
+msgid "Use grob closures iso. XY-offset-callbacks."
+msgstr "Utilitzeu tancaments d'objecte gràfic en comptes de XY-offset-callbacks."
+
+#: convertrules.py:2360
+msgid "foobar -> foo-bar for \\paper, \\layout"
+msgstr "ental -> en-tal per a \\paper, \\layout"
+
+#: convertrules.py:2470
+msgid "deprecate \\tempo in \\midi"
+msgstr "\\tempo a \\midi ha caigut en desús"
+
+#: convertrules.py:2523
+msgid "deprecate cautionary-style. Use AccidentalCautionary properties"
+msgstr "cautionary-style ha caigut en desús. Useu propietats AccidentalCautionary"
+
+#: convertrules.py:2536
+msgid "Rename accidental glyphs, use glyph-name-alist."
+msgstr "http://translationproject.org/POT-files/lilypond-2.15.95.pot"
+
+#: convertrules.py:2591
+msgid "edge-text settings for TextSpanner"
+msgstr "Paràmetres edge-text per a TextSpanner"
+
+#: convertrules.py:2592
+#, python-format
+msgid ""
+"Use\n"
+"\n"
+"%s"
+msgstr ""
+"Useu\n"
+"\n"
+"%s"
+
+#: convertrules.py:2625
+msgid "Use the `alignment-offsets' sub-property of\n"
+msgstr "Useu la sub-propietat `alignment-offsets' de\n"
+
+#: convertrules.py:2626
+msgid "NonMusicalPaperColumn #'line-break-system-details\n"
+msgstr "NonMusicalPaperColumn #'line-break-system-details\n"
+
+#: convertrules.py:2627
+msgid "to set fixed distances between staves.\n"
+msgstr "per establir distàncies fixes entre pautes.\n"
+
+#: convertrules.py:2639
+msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
+msgstr "Useu #'style i no #'dash-fraction per seleccionar línies sòlides/intermitents."
+
+#: convertrules.py:2645
+msgid "all settings related to dashed lines"
+msgstr "tots els paràmetres relacionats amb línies intermitents"
+
+#: convertrules.py:2646
+msgid "Use \\override ... #'style = #'line for solid lines and\n"
+msgstr "Useu \\override ... #'style = #'line per a línies sòlides i\n"
+
+#: convertrules.py:2647
+msgid "\t\\override ... #'style = #'dashed-line for dashed lines."
+msgstr "\t\\override ... #'style = #'dashed-line per a línies intermitents."
+
+#: convertrules.py:2683
+msgid ""
+"metronomeMarkFormatter uses text markup as second argument,\n"
+"fret diagram properties moved to fret-diagram-details."
+msgstr ""
+"metronomeMarkFormatter fa servir format de text com a segon argument,\n"
+"s'han mogut les propietats de diagrama de trastos a fret-diagram-details."
+
+#: convertrules.py:2689
+msgid "metronomeMarkFormatter got an additional text argument.\n"
+msgstr "metronomeMarkFormatter té un argument de text addicional.\n"
+
+#: convertrules.py:2690
+#, python-format
+msgid ""
+"The function assigned to Score.metronomeMarkFunction now uses the signature\n"
+"%s"
+msgstr ""
+"La funció assignada a Score.metronomeMarkFunction utilitza ara la firma\n"
+"%s"
+
+#: convertrules.py:2708
+#, python-format
+msgid "%s in fret-diagram properties"
+msgstr "%s a propietats fret-diagram"
+
+#: convertrules.py:2752
+msgid "\\put-adjacent argument order"
+msgstr "ordre d'arguments de \\put-adjacent"
+
+#: convertrules.py:2753
+msgid "Axis and direction now come before markups:\n"
+msgstr "Els eixos i la direcció venen ara abans dels formats:\n"
+
+#: convertrules.py:2754
+msgid "\\put-adjacent axis dir markup markup."
+msgstr "\\put-adjacent eix carpeta marcat marcat"
+
+#: convertrules.py:2785
+msgid "re-definition of InnerStaffGroup"
+msgstr "re-definició d'InnerStaffGroup"
+
+#: convertrules.py:2790
+msgid "re-definition of InnerChoirStaff"
+msgstr "re-definició d'InnerChoirStaff"
+
+#: convertrules.py:2800
+msgid "Syntax changes for \\addChordShape and \\chord-shape"
+msgstr "Canvis de sintaxi per a \\addChordShape i \\chord-shape"
+
+#: convertrules.py:2805
+msgid "stringTuning must be added to addChordShape call.\n"
+msgstr "S'ha d'afegir stringTuning a la crida addChordShape.\n"
+
+#: convertrules.py:2810
+msgid "stringTuning must be added to chord-shape call.\n"
+msgstr "S'ha d'afegir stringTuning a la crida chord-shape.\n"
+
+#: convertrules.py:2816
+msgid "Remove oldaddlyrics"
+msgstr "Elimineu oldaddlyrics"
+
+#: convertrules.py:2820
+msgid ""
+"oldaddlyrics is no longer supported. \n"
+"         Use addlyrics or lyrsicsto instead.\n"
+msgstr ""
+"oldaddlyrics ha deixat d'estar suportat. \n"
+"         Useu en canvi addlyrics o lyrsicsto.\n"
+
+#: convertrules.py:2826
+msgid ""
+"keySignature property not reversed any more\n"
+"MIDI 47: orchestral strings -> orchestral harp"
+msgstr ""
+"La propietat keySignature ja no es reverteix\n"
+"MIDI 47: orchestral strings -> ochestral harp"
+
+#: convertrules.py:2831
+msgid "The alist for Staff.keySignature is no longer in reversed order.\n"
+msgstr "La llista-A per a Staff,keySignature ja no està en ordre invers.\n"
+
+#: convertrules.py:2837
+msgid ""
+"\\bar \".\" now produces a thick barline\n"
+"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
+"Dash parameters for slurs and ties are now in dash-definition"
+msgstr ""
+"\\bar \".\" produeix ara una línia divisòria gruixuda\n"
+"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
+"Els paràmetres de discontinuïtat per a les lligadures\n"
+"d'expressió i d'unió estan ara a dash-definition"
+
+#: convertrules.py:2843
+msgid "\\bar \".\" now produces a thick barline.\n"
+msgstr "\\bar \".\" produeix ara una línia divisòria gruixuda.\n"
+
+#: convertrules.py:2849
+msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
+msgstr "Els paràmetres de discontinuïtat per a lligadures d'expressió i d'unió estan ara a 'dash-details.\n"
+
+#: convertrules.py:2854
+msgid ""
+"Autobeaming rules have changed.  override-auto-beam-setting and\n"
+"revert-auto-beam-setting have been eliminated.\n"
+"\\overrideBeamSettings has been added.\n"
+"beatGrouping has been eliminated.\n"
+"Different settings for vertical layout.\n"
+"ly:system-start-text::print -> system-start-text::print\n"
+"Beam #'thickness -> Beam #'beam-thickness\n"
+"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n"
+"ly:ambitus::print -> ambitus::print\n"
+"Explicit dynamics context definition from `Piano centered dynamics'\n"
+"template replaced by new `Dynamics' context."
+msgstr ""
+"Les regles d'autobarrat han canviat. Ara s'han\n"
+"eliminat override-auto-beam-setting i revert-auto-beam-setting.\n"
+"S'ha afegit \\overrideBeamSettings.\n"
+"S'ha eliminat beatGrouping.\n"
+"Diferents ajustos per a la disposició vertical.\n"
+"ly:system-start-text::print -> system-start-text::print\n"
+"Beam #'thickness -> Beam #'beam-thickness\n"
+"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n"
+"ly:ambitus::print -> ambitus::print\n"
+"S'ha substituït la definició explícita del context de dinàmica\n"
+"La plantilla `Piano centered dynamics' s'ha substituït\n"
+"pel nou context `Dynamics'."
+
+#: convertrules.py:2868
+msgid "    Autobeam settings are now overriden with \\overrideBeamSettings.\n"
+msgstr "    Els paràmetres de autobarrat es sobreescriuen ara amb \\overrideBeamSettings.\n"
+
+#: convertrules.py:2873
+msgid "    Autobeam settings are now reverted with \\revertBeamSettings.\n"
+msgstr "    Els paràmetres de autobarrat es reverteixen ara amb \\revertBeamSettings.\n"
+
+#: convertrules.py:2879
+msgid ""
+"    beatGrouping with a specified context must now be accomplished with\n"
+"   \\overrideBeamSettings.\n"
+msgstr ""
+"    beatGrouping amb un context especificat s'aconsegueix ara amb\n"
+"   \\overrideBeamSettings.\n"
+
+#: convertrules.py:2885
+msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n"
+msgstr "alignment-offsets ha canviat a alignment-distances: ara s'han d'especificat les distàncies entre pautes enlloc del desplaçament de cada pauta.\n"
+
+#: convertrules.py:2896
+msgid ""
+"Remove obsolete engravers/translators: Note_swallow_translator,\n"
+"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
+"Swallow_performer and String_number_engraver.\n"
+"New vertical spacing variables."
+msgstr ""
+"Removeu gravadors o traductors obsolets: Noe_swallow_translator,\n"
+"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
+"Swallow_performer i String_number_engraver.\n"
+"Noves variables d'espaiament vertical."
+
+#: convertrules.py:2927
+msgid "Vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n"
+msgstr "L'espaiament vertical ja no depèn de l'Y-extent d'un VerticalAxisGroup.\n"
+
+#: convertrules.py:2933
+msgid "Unify fetaNumber and fetaDynamic encodings"
+msgstr "Unifiqueu les codificacions fetaNumber i fetaDynamic"
+
+#: convertrules.py:2938
+msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
+msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves<"
+
+#: convertrules.py:2949
+msgid "\\cresc etc. are now postfix operators"
+msgstr "\\cresc etc. son ara operadors posteriors"
+
+#: convertrules.py:2961
+msgid ""
+"Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n"
+"\"accordion.accEtcbase\" -> \"accordion.etcbass\""
+msgstr ""
+"Elimineu beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings i \\revertBeamSettings.\n"
+"\"accordion.accEtcbase\" -> \"accordion.etcbass\""
+
+#: convertrules.py:2979
+msgid "Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"
+msgstr "Useu \\set beamExceptions o \\overrideTimeSignatureSettings.\n"
+
+#: convertrules.py:2983
+msgid "Use \\set beamExceptions or \\revertTimeSignatureSettings.\n"
+msgstr "Useu \\set beamExceptions o \\revertTimeSignatureSettings.\n"
+
+#: convertrules.py:2987
+msgid "Use baseMoment, beatStructure, and beamExceptions.\n"
+msgstr "Useu baseMoment i beatStructure.\n"
+
+#: convertrules.py:2991 convertrules.py:2995
+msgid "Use baseMoment and beatStructure.\n"
+msgstr "Useu baseMoment i beatStructure.\n"
+
+#: convertrules.py:3000
+msgid ""
+"Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n"
+"Deprecate negative dash-period for hidden lines: use #'style = #'none instead."
+msgstr ""
+"Diagrames de digitació d'instruments de vent: Moveu la mida, el gruix i la gràfica de llista d'arguments a les propietats.\n"
+"Deixeu obsolet el període de discontinuïtat negatiu per a les línies ocultes: useu en canvi #'style = #'none."
+
+#: convertrules.py:3005
+msgid "Move size, thickness, and graphic to properties.  Argument should be just the key list.\n"
+msgstr "Moveu la mida, el gruix i la gràfica a propietats. L'argument hauria de ser sols la llista de claus.\n"
+
+#: convertrules.py:3013
+msgid ""
+"Rename vertical spacing variables.\n"
+"Add fretboard-table argument to savePredefinedFretboard."
+msgstr ""
+"Canvieu el nom a les variables d'espaiament vertical.\n"
+"Afegiu l'argument de la taula de diagrama de posicions a savePredefinedFretboard."
+
+#: convertrules.py:3031
+msgid "Rename vertical spacing grob properties."
+msgstr "Canvieu les propietats d'espaiament vertical d'objecte gràfic."
+
+#: convertrules.py:3047
+msgid "Remove \\paper variables head-separation and foot-separation."
+msgstr "Removeu les variables \\paper head-separation i foot-separation."
+
+#: convertrules.py:3051
+msgid "Adjust settings for top-system-spacing instead.\n"
+msgstr "Ajusteu en canvi els paràmetres per a top-system-spacing.\n"
+
+#: convertrules.py:3055
+msgid "Adjust settings for last-bottom-spacing instead.\n"
+msgstr "Ajusteu en canvi els paràmetres per a last-bottom-spacing.\n"
+
+#: convertrules.py:3061
+msgid ""
+"Rename space to basic-distance in various spacing alists.\n"
+"Remove HarmonicParenthesesItem grob."
+msgstr ""
+"Canvieu l'espai de basic-distance a diverses llistes-A d'espaiament.\n"
+"Elimineu l'objecte gràfic HarmonicParenthesesItem."
+
+#: convertrules.py:3068
+msgid "HarmonicParenthesesItem has been eliminated.\n"
+msgstr "S'ha eliminat HarmonicParenthesesItem.\n"
+
+#: convertrules.py:3069
+msgid "Harmonic parentheses are part of the TabNoteHead grob.\n"
+msgstr "Els parèntesis d'harmònics formen part de l'objecte gràfic TabNoteHead.\n"
+
+#: convertrules.py:3074
+msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n"
+msgstr "Removeu el context de overrideTimeSignatureSettings i revertTimeSignatureSettings.\n"
+
+#: convertrules.py:3081
+msgid ""
+"Change stringTunings from a list of semitones to a list of pitches.\n"
+"Change tenor and baritone ukulele names in string tunings.\n"
+"Generate messages for manual conversion of vertical spacing if required."
+msgstr ""
+"Canvieu stringTunings des d'una llista de semitons a una llista de tonalitats.\n"
+"Canvieu els noms tenor i baritone de les afinacions de corda de l'ukulele.\n"
+"Genereu missatges per a la conversió manual de l'espaiament vertical si es requereix"
+
+#: convertrules.py:3124
+msgid "Vertical spacing changes might affect user-defined contexts."
+msgstr "Els canvis d'espaiament vertical poden afectar els contextos definits per l'usuari"
+
+#: convertrules.py:3130
+msgid "Replace bar-size with bar-extent."
+msgstr "Substituïu bar-size amb bar-extent."
+
+#: convertrules.py:3142
+msgid "Woodwind diagrams: Changes to the clarinet diagram."
+msgstr "Diagrames de digitació d'instruments de vent: Canvis al diagrama de clarinet"
+
+#: convertrules.py:3146
+msgid "Clarinet fingering changed to reflect actual anatomy of instrument.\n"
+msgstr "La digitació del clarinet ha canviat per reflectir l'anatomia real l'instrument.\n"
+
+#: convertrules.py:3156
+msgid "Handling of non-automatic footnotes."
+msgstr "Gestió de notes a peu de pàgina no automàtiques."
+
+#: convertrules.py:3160
+msgid "If you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.\n"
+msgstr ""
+"Si esteu usant notes a peu de pàgina no automàtiques, assegureu-vos\n"
+" d'establir footnote-autonumbering = ##f al bloc de paper.\n"
+
+#: convertrules.py:3165
+msgid "Change in internal property for MultiMeasureRest"
+msgstr "Canvi a la propietat interna per a MultiMeasureRest"
+
+#: convertrules.py:3169
+msgid "This internal property has been replaced by round-up-to-longer-rest, round-up-exceptions and usable-duration-logs.\n"
+msgstr "Aquesta propietat interna s'ha substituït per round-up-to-longer-rest, round-up-exceptions i usable-duration-logs.\n"
+
+#: convertrules.py:3174
+msgid "Creation of a Flag grob and moving of certain Stem properties to this grob"
+msgstr "Creació d'un objecte gràfic Flag i trasllat de certes propietats Stem a aquest objecte gràfic"
+
+#: convertrules.py:3210
+msgid "consistent-broken-slope is now handled through the positions callback.\n"
+msgstr "Ara es gestiona consistent-broken-slope mitjançant crida de retorn de posicions.\n"
+
+#: convertrules.py:3211
+msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n"
+msgstr "input/regression/beam-broken-classic.ly mostra com es gestionen ara les barres dividides.\n"
+
+#: convertrules.py:3369
+msgid "beamExceptions controls whole-measure beaming."
+msgstr "beamExceptions controla el barrat de compassos complets."
+
+#: convertrules.py:3606
+msgid "Flag.transparent and Flag.color inherit from Stem"
+msgstr "Flag.transparent i Flag.color s'han heredat de Stem"
+
+#: convertrules.py:3672
+msgid "Staff-padding now controls the distance to the baseline, not the nearest point."
+msgstr "Staff-padding ara controla la distància de la base, no el punt més proper."
+
+#: fontextract.py:25
+#, python-format
+msgid "Scanning %s"
+msgstr "S'està escanejant %s"
+
+#: fontextract.py:70
+#, python-format
+msgid "Extracted %s"
+msgstr "S'ha estret %s"
+
+#: fontextract.py:85
+#, python-format
+msgid "Writing fonts to %s"
+msgstr "S'estan escrivint els tipus de lletres a %s"
+
+#: lilylib.py:101
+#, python-format
+msgid "Setting loglevel to %s"
+msgstr "S'està establint el nivell de registre a %s"
+
+#: lilylib.py:104
+#, python-format
+msgid "Unknown or invalid loglevel '%s'"
+msgstr "Nivell de registre '%s' desconegut o invàlid"
+
+#: lilylib.py:133 warn.cc:211
+#, c-format, python-format
+msgid "error: %s"
+msgstr "error: %s"
+
+#: lilylib.py:190
+#, python-format
+msgid "Processing %s.ly"
+msgstr "S'està processant %s.ly"
+
+#: lilylib.py:194 lilylib.py:255
+#, python-format
+msgid "Invoking `%s'"
+msgstr "S'està invocant `%s'"
+
+#: lilylib.py:196 lilylib.py:257
+#, python-format
+msgid "Running %s..."
+msgstr "S'està executant %s..."
+
+#: lilylib.py:333
+#, python-format
+msgid "Usage: %s"
+msgstr "Ús: %s"
+
+#: musicexp.py:224 musicexp.py:229
+msgid "Language does not support microtones contained in the piece"
+msgstr "El llenguatge no dóna suport als microtons continguts a la peça"
+
+#: musicexp.py:491
+msgid "Tuplet brackets of curved shape are not correctly implemented"
+msgstr "Els claudàtors corbs de grup especial no estan correctament implementats"
+
+#: musicexp.py:677
+#, python-format
+msgid "unable to set the music %(music)s for the repeat %(repeat)s"
+msgstr "No s'ha pogut establir el fragment %(music)s  per a la repetició %(repeat)s"
+
+#: musicexp.py:686
+msgid "encountered repeat without body"
+msgstr "s'ha trobat una repetició sense cos"
+
+#. no self.elements!
+#: musicexp.py:856
+#, python-format
+msgid "Grace note with no following music: %s"
+msgstr "Nota d'adorn sense música a continuació: %s"
+
+#: musicexp.py:1018
+#, python-format
+msgid "Invalid octave shift size found: %s. Using no shift."
+msgstr "S'ha trobat un desplaçament d'octava no vàlid: %s. No s'usarà cap desplaçament."
+
+#: musicexp.py:1476
+#, python-format
+msgid "Unable to convert alteration %s to a lilypond expression"
+msgstr "No es pot convertir l'alteració %s a una expressió lilypond"
+
+#. TODO: Handle pieces without a time signature!
+#: musicxml.py:361
+msgid "Senza-misura time signatures are not yet supported!"
+msgstr "Els compassos senza-misura no tenen suport encara!"
+
+#: musicxml.py:379
+msgid "Unable to interpret time signature! Falling back to 4/4."
+msgstr "No es pot interpretar la indicació de temps! Es tornarà a 4/4."
+
+#: musicxml.py:435
+#, python-format
+msgid "Key alteration octave given for a non-existing alteration nr. %s, available numbers: %s!"
+msgstr "S'ha proporcionat una tonalitat d'alteració d'octava per a una alteració no existent número %s, els números disponibles: %s!"
+
+#: musicxml.py:523
+#, python-format
+msgid "Unable to find instrument for ID=%s\n"
+msgstr "No es pot trobar l'instrument per a l'ID=%s\n"
+
+#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
+#, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "%s [OPCIÓ]... FITXER"
+
+#: abc2ly.py:1387
+#, python-format
+msgid ""
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input.\n"
+msgstr ""
+"abc2ly converteix el fitxer de música ABC\n"
+"(veure %s) a input LilyPond.\n"
+
+#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:181
+msgid "show version number and exit"
+msgstr "mostra el número de versió i surt"
+
+#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:160
+msgid "show this help and exit"
+msgstr "mostra aquesta ajuda i surt"
+
+#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071
+msgid "write output to FILE"
+msgstr "escriu el resultat a FITXER"
+
+#: abc2ly.py:1404
+msgid "be strict about success"
+msgstr "sigues estricte sobre l'èxit"
+
+#: abc2ly.py:1407
+msgid "preserve ABC's notion of beams"
+msgstr "preserva la noció ABC per a les barres"
+
+#: abc2ly.py:1410
+msgid "suppress progress messages"
+msgstr "suprimeix els missatges de progrés"
+
+#. Translators, please translate this string as
+#. "Report bugs in English via %s",
+#. or if there is a LilyPond users list or forum in your language
+#. "Report bugs in English via %s or in YOUR_LANG via URI"
+#: abc2ly.py:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:315
+#, c-format, python-format
+msgid "Report bugs via %s"
+msgstr "Informa dels errors en anglès via %s"
+
+#: convert-ly.py:47
+msgid ""
+"Update LilyPond input to newer version.  By default, update from the\n"
+"version taken from the \\version command, to the current LilyPond version."
+msgstr ""
+"Actualitza l'input LilyPond a una versió més nova. Per defecte,\n"
+"actualitza des de la versió agafada de la instrucció \\version  a la versió actual de LilyPond."
+
+#: convert-ly.py:50
+msgid "If FILE is `-', read from standard input."
+msgstr "Si el FITXER és `-', llegeix des de l'entrada estàndard."
+
+#: convert-ly.py:52 lilypond-book.py:82
+msgid "Examples:"
+msgstr "Exemples:"
+
+#: convert-ly.py:79 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
+#, python-format
+msgid "Copyright (c) %s by"
+msgstr "Copyright (c) %s per"
+
+#: convert-ly.py:81 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
+msgid "Distributed under terms of the GNU General Public License."
+msgstr "Distribuït sota els terminis de Llicència Pública General GNU."
+
+#: convert-ly.py:82 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
+msgid "It comes with NO WARRANTY."
+msgstr "Es proveeix SENSE GARANTIES."
+
+#: convert-ly.py:100 convert-ly.py:141
+msgid "VERSION"
+msgstr "VERSIÓ"
+
+#: convert-ly.py:102
+msgid "start from VERSION [default: \\version found in file]"
+msgstr "comença des de la VERSIÓ [per defecte: s'ha trobar \\version al fitxer]"
+
+#: convert-ly.py:105
+msgid "edit in place"
+msgstr "edita in situ"
+
+#: convert-ly.py:109 lilypond-book.py:179 musicxml2ly.py:2627
+msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)"
+msgstr "Imprimeix els missatges del registre d'acord amb NIVELL DE REGISTRE (NONE, ERROR, WARNING, PROGRESS (per defecte), DEBUG)"
+
+#: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
+#: musicxml2ly.py:2629 main.cc:174
+msgid "LOGLEVEL"
+msgstr "NIVELL_DE_REGISTRE"
+
+#: convert-ly.py:117
+msgid "do not add \\version command if missing"
+msgstr "no afegeixes l'ordre \\version si no és present"
+
+#: convert-ly.py:123
+#, python-format
+msgid "force updating \\version number to %s"
+msgstr "força el número de actualització de \\version a %s"
+
+#: convert-ly.py:129
+msgid "only update \\version number if file is modified"
+msgstr "actualitza el número de \\version únicament si el fitxer es modifica"
+
+#: convert-ly.py:135
+#, python-format
+msgid "show rules [default: -f 0, -t %s]"
+msgstr "mostra les regles [per defecte: -f 0, -t %s]"
+
+#: convert-ly.py:140
+#, python-format
+msgid "convert to VERSION [default: %s]"
+msgstr "converteix a VERSIÓ [per defecte: %s]"
+
+#: convert-ly.py:147
+msgid "make a numbered backup [default: filename.ext~]"
+msgstr "fest una còpia de seguretat numerada: [predeterminat: nom-de-arxiu.ext~]"
+
+#: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
+#: main.cc:183
+msgid "show warranty and copyright"
+msgstr "mostra la garantia i el copyright"
+
+#: convert-ly.py:196
+msgid "Applying conversion: "
+msgstr "S'està fent la conversió: "
+
+#: convert-ly.py:215
+msgid "Error while converting"
+msgstr "S'ha produït un error en convertir"
+
+#: convert-ly.py:217
+msgid "Stopping at last successful rule"
+msgstr "S'ha aturat a l'última regla reeixida"
+
+#: convert-ly.py:256
+#, python-format
+msgid "Processing `%s'... "
+msgstr "S'està processant `%s'... "
+
+#: convert-ly.py:367
+#, python-format
+msgid "%s: Unable to open file"
+msgstr "%s: No s'ha pogut determinar la versió. S'ha omès"
+
+#: convert-ly.py:373
+#, python-format
+msgid "%s: Unable to determine version.  Skipping"
+msgstr "%s: No s'ha pogut determinar la versió. S'ha omès"
+
+#: convert-ly.py:379
+#, python-format
+msgid ""
+"%s: Invalid version string `%s' \n"
+"Valid version strings consist of three numbers, separated by dots, e.g. `2.8.12'"
+msgstr ""
+"%s: Versió de cadena de caràcters no vàlida `%s' \n"
+"Les cadenes de versió vàlides consisteixen de tres números, separats per punts, per exemple `2.8.12'"
+
+#: convert-ly.py:385
+#, python-format
+msgid "There was %d error."
+msgid_plural "There were %d errors."
+msgstr[0] "Hi havia %d error."
+msgstr[1] "Hi havien %d errors."
+
+#: etf2ly.py:1197
+#, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "%s [OPCIÓ]... FITXER-ETF"
+
+#: etf2ly.py:1198
+msgid ""
+"Enigma Transport Format is a format used by Coda Music Technology's\n"
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n"
+msgstr ""
+"El format transportable d'Enigma és un format usat pel producte Finale\n"
+"de Coda Music Technology. etf2ly converteix un subconjunt d'ETF a fitxer LilyPond a punt d'usar.\n"
+
+#: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
+#: main.cc:166 main.cc:178
+msgid "FILE"
+msgstr "FITXER"
+
+#: lilypond-book.py:80
+msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr "Processa els fragments LilyPond a HTML híbrid, LaTeX, texinfo o document DocBook."
+
+#: lilypond-book.py:87
+msgid "BOOK"
+msgstr "LLIBRE"
+
+#: lilypond-book.py:95
+#, python-format
+msgid "Exiting (%d)..."
+msgstr "S'està sortint (%d)..."
+
+#: lilypond-book.py:127
+msgid "FILTER"
+msgstr "FILTRE"
+
+#: lilypond-book.py:130
+msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
+msgstr "redirigeix els fragments a través de FILTRE (per defecte: `convert-ly -n -']"
+
+#: lilypond-book.py:134
+msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
+msgstr "usa el format de sortida FORMAT (texi [per defecte], texi-html, latex, html, docbook)"
+
+#: lilypond-book.py:135
+msgid "FORMAT"
+msgstr "FORMAT"
+
+#: lilypond-book.py:142
+msgid "add DIR to include path"
+msgstr "afegeix DIRECTORI al camí d'inclusió"
+
+#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:165
+msgid "DIR"
+msgstr "DIRECTORI"
+
+#: lilypond-book.py:148
+msgid "format Texinfo output so that Info will look for images of music in DIR"
+msgstr "formateja la sortida Texinfo de manera que Info busqui les imatges o la música a DIRECTORI"
+
+#: lilypond-book.py:155
+msgid "PAD"
+msgstr "FARCEIX"
+
+#: lilypond-book.py:157
+msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)"
+msgstr "farceix la part esquerra de la música per alinear la música tot i  hi hagi un nombre imparell de compassos (en mm)"
+
+#: lilypond-book.py:162
+msgid "Print lilypond log messages according to LOGLEVEL"
+msgstr "Imprimeix els missatges de registre de lilypond d'acord amb NIVELL_DE_REGISTRE"
+
+#: lilypond-book.py:168
+msgid "write lily-XXX files to DIR, link into --output dir"
+msgstr "escriu els fitxers lily-XXX a DIRECTORI, enllaça al directori --output"
+
+#: lilypond-book.py:173
+msgid "Load the additional python PACKAGE (containing e.g. a custom output format)"
+msgstr "Carrega el PAQUET addicional de python (contenint per exemple un format de sortida personalitzat)"
+
+#: lilypond-book.py:174
+msgid "PACKAGE"
+msgstr "PAQUET"
+
+#: lilypond-book.py:186
+msgid "write output to DIR"
+msgstr "escriu la sortida a DIRECTORI"
+
+#: lilypond-book.py:191
+msgid "COMMAND"
+msgstr "ORDRE"
+
+#: lilypond-book.py:192
+msgid "process ly_files using COMMAND FILE..."
+msgstr "processa ly_files usant ORDRE FITXER..."
+
+#: lilypond-book.py:197
+msgid "Redirect the lilypond output"
+msgstr "Redirigeix la sortida output"
+
+#: lilypond-book.py:201
+msgid "Compile snippets in safe mode"
+msgstr "Compila els fragments en mode segur"
+
+#: lilypond-book.py:207
+msgid "do not fail if no lilypond output is found"
+msgstr "no abortis si no es troba cap sortida lilypond"
+
+#: lilypond-book.py:213
+msgid "do not fail if no PNG images are found for EPS files"
+msgstr "no abortis si no es troben imatges PNG per als fitxers EPS"
+
+#: lilypond-book.py:219
+msgid "write snippet output files with the same base name as their source file"
+msgstr "escriu els fitxers de sortida de fragments amb el mateix nom de base que el fitxer font"
+
+#: lilypond-book.py:223 midi2ly.py:1090 musicxml2ly.py:2596
+msgid "be verbose"
+msgstr "produeix missatges detallats"
+
+#: lilypond-book.py:239
+msgid ""
+"run executable PROG instead of latex, or in\n"
+"case --pdf option is set instead of pdflatex"
+msgstr ""
+"executa PROG en comptes de latex, o en el cas \n"
+"que l'opció --pdf estigui escollida en comptes de pdfflatex"
+
+#: lilypond-book.py:241 lilypond-book.py:246
+msgid "PROG"
+msgstr "PROG"
+
+#: lilypond-book.py:245
+msgid "run executable PROG instead of texi2pdf"
+msgstr "executa PROG en comptes de texi2pdf"
+
+#: lilypond-book.py:252
+msgid "create PDF files for use with PDFTeX"
+msgstr "crea fitxers PDF per usar amb PDFTEX"
+
+#: lilypond-book.py:463
+msgid "Writing snippets..."
+msgstr "S'estàn escrivint els fragments..."
+
+#: lilypond-book.py:468
+msgid "Processing..."
+msgstr "S'està processant..."
+
+#: lilypond-book.py:473
+msgid "All snippets are up to date..."
+msgstr "Tots els fragments estan actualitzats..."
+
+#: lilypond-book.py:475
+msgid "Linking files..."
+msgstr "S'estàn enllaçant els fitxers..."
+
+#: lilypond-book.py:495
+#, python-format
+msgid "cannot determine format for: %s"
+msgstr "no es pot determinar el format de: %s"
+
+#: lilypond-book.py:504
+#, python-format
+msgid "%s is up to date."
+msgstr "%s està actualitzat."
+
+#: lilypond-book.py:517
+#, python-format
+msgid "Writing `%s'..."
+msgstr "S'està escrivint `%s'..."
+
+#: lilypond-book.py:580
+msgid "Output would overwrite input file; use --output."
+msgstr "La sortida sobreescriuria el fitxer d'entrada; useu --output."
+
+#: lilypond-book.py:584
+#, python-format
+msgid "Reading %s..."
+msgstr "S'està llegint %s..."
+
+#: lilypond-book.py:591
+msgid "Dissecting..."
+msgstr "S'està dissecant..."
+
+#: lilypond-book.py:602
+#, python-format
+msgid "Compiling %s..."
+msgstr "S'està compilant %s..."
+
+#: lilypond-book.py:610
+#, python-format
+msgid "Processing include: %s"
+msgstr "S'està processant la inclusió: %s"
+
+#: lilypond-book.py:621
+#, python-format
+msgid "Removing `%s'"
+msgstr "S'està eliminant `%s'"
+
+#: lilypond-book.py:714
+#, python-format
+msgid "Setting LilyPond's loglevel to %s"
+msgstr "S'està establint el nivell de registre de LilyPond a %s"
+
+#: lilypond-book.py:718
+#, python-format
+msgid "Setting LilyPond's loglevel to %s (from environment variable LILYPOND_LOGLEVEL)"
+msgstr "S'està establint el nivell de registre de LilyPond a %s (a partir de la variable d'entorn LILYPOND_LOG_LEVEL)"
+
+#: lilypond-book.py:721
+msgid "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
+msgstr "S'està establint la sortida de LilyPond a --verbose, cosa que està implicada pel paràmetre de configuració lilypond-book"
+
+#: midi2ly.py:90
+msgid "warning: "
+msgstr "advertiment: "
+
+#: midi2ly.py:93 midi2ly.py:1124
+msgid "error: "
+msgstr "error: "
+
+#: midi2ly.py:94
+msgid "Exiting... "
+msgstr "S'està sortint... "
+
+#: midi2ly.py:835
+msgid "found more than 5 voices on a staff, expect bad output"
+msgstr "s'han trobat més de 5 veus en un sistema, espereu una sortida mala"
+
+#: midi2ly.py:1032
+#, python-format
+msgid "%s output to `%s'..."
+msgstr "%s sortida a `%s'..."
+
+#: midi2ly.py:1045
+#, python-format
+msgid "Convert %s to LilyPond input.\n"
+msgstr "Converteix %s a una entrada LilyPond.\n"
+
+#: midi2ly.py:1050
+msgid "print absolute pitches"
+msgstr "mostra les tonalitats absoluts"
+
+#: midi2ly.py:1052 midi2ly.py:1080
+msgid "DUR"
+msgstr "DURACIÓ"
+
+#: midi2ly.py:1053
+msgid "quantise note durations on DUR"
+msgstr "quantifica la duració de les notes a DURACIÓ"
+
+#: midi2ly.py:1056
+msgid "debug printing"
+msgstr "impressió de depuració"
+
+#: midi2ly.py:1059
+msgid "print explicit durations"
+msgstr "imprimeix les duracions explícites"
+
+#: midi2ly.py:1064
+msgid "prepend FILE to output"
+msgstr "Anteposa FITXER a la sortida"
+
+#: midi2ly.py:1068
+msgid "set key: ALT=+sharps|-flats; MINOR=1"
+msgstr "estableix la clau: ALT=+sharps|-flats;: MINOR=1"
+
+#: midi2ly.py:1069
+msgid "ALT[:MINOR]"
+msgstr "ALT[:MINOR]"
+
+#: midi2ly.py:1074
+msgid "preview of first 4 bars"
+msgstr "previsualitza els primers 4 compassos"
+
+#: midi2ly.py:1078
+msgid "suppress progress messages and warnings about excess voices"
+msgstr "suprimeix els missatges de progrés i els advertiments sobre veus en excés"
+
+#: midi2ly.py:1079
+msgid "quantise note starts on DUR"
+msgstr "quantifica el començament de les notes en DURACIÓ"
+
+#: midi2ly.py:1083
+msgid "use s instead of r for rests"
+msgstr "usa s en comptes d'r per als silencis"
+
+#: midi2ly.py:1085
+msgid "DUR*NUM/DEN"
+msgstr "DURACIÓ*NUMERACIÓ/DENOMINADOR"
+
+#: midi2ly.py:1088
+msgid "allow tuplet durations DUR*NUM/DEN"
+msgstr "permet duració DURACIÓ*NUMERADOR/DENOMINADOR d'un grup excedent"
+
+#: midi2ly.py:1098
+msgid "treat every text as a lyric"
+msgstr "tracta tots els textos com a lletres"
+
+#: midi2ly.py:1101
+msgid "Examples"
+msgstr "Exemples"
+
+#: midi2ly.py:1125
+msgid "no files specified on command line."
+msgstr "no s'han especificat fitxers a la línia d'ordres."
+
+#: musicxml2ly.py:228
+#, python-format
+msgid "Encountered file created by %s, containing wrong beaming information. All beaming information in the MusicXML file will be ignored"
+msgstr "S'ha trobat un fitxer creat per %s que conté informació incorrecta d'un grup de notes. S'ignorarà tota la informació de grups de notes al fitxer MusicXML"
+
+#: musicxml2ly.py:247 musicxml2ly.py:249
+#, python-format
+msgid "Unprocessed PartGroupInfo %s encountered"
+msgstr "S'ha trobat PartGroupInfo %s sense processar"
+
+#: musicxml2ly.py:500
+#, python-format
+msgid "Encountered note at %s without type and duration (=%s)"
+msgstr "S'ha trobat una nota a %s sense tipus i duració (=%s)"
+
+#: musicxml2ly.py:520
+#, python-format
+msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration"
+msgstr "S'ha trobat una duració racional amb denominador %s, no és possible convertir-la a una duració lilypond"
+
+#: musicxml2ly.py:767
+msgid "Unable to extract key signature!"
+msgstr "No es pot extraure l'armadura!"
+
+#: musicxml2ly.py:794
+#, python-format
+msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!"
+msgstr "mode %s desconegut, s'esperava 'major' o 'menor\" o mode església!"
+
+#: musicxml2ly.py:932
+#, python-format
+msgid "Encountered unprocessed marker %s\n"
+msgstr "S'ha trobat un marcador %s sense processar\n"
+
+#: musicxml2ly.py:1026
+#, python-format
+msgid "unknown span event %s"
+msgstr "esdeveniment %s desconegut de lapse"
+
+#: musicxml2ly.py:1036
+#, python-format
+msgid "unknown span type %s for %s"
+msgstr "tipus de lapse %s desconegut per a %s"
+
+#: musicxml2ly.py:1456
+msgid "Unknown metronome mark, ignoring"
+msgstr "Marca de metrònom desconegut, s'ignorarà"
+
+#. TODO: Implement the other (more complex) way for tempo marks!
+#: musicxml2ly.py:1461
+msgid "Metronome marks with complex relations (<metronome-note> in MusicXML) are not yet implemented."
+msgstr "No s'han implementat encara Les marques de metrònom amb relacions complexes (<metronome-note> en MusicXML)."
+
+#: musicxml2ly.py:1663
+#, python-format
+msgid "Unable to convert chord type %s to lilypond."
+msgstr "No es pot convertir el tipus d'acord %s a lilypond."
+
+#: musicxml2ly.py:1816
+#, python-format
+msgid "drum %s type unknown, please add to instrument_drumtype_dict"
+msgstr "tipus %s de percussió desconegut, sisplau afegiu-lo a instrument_drumtype_dict"
+
+#: musicxml2ly.py:1820
+msgid "cannot find suitable event"
+msgstr "no es pot trobar un esdeveniment apropiat"
+
+#: musicxml2ly.py:1968
+#, python-format
+msgid "Negative skip %s (from position %s to %s)"
+msgstr "Omissió negativa %s (de la posició %s a %s)"
+
+#: musicxml2ly.py:2109
+#, python-format
+msgid "Negative skip found: from %s to %s, difference is %s"
+msgstr "S'ha trobat una omissió negativa: de %s a %s, la diferència és %s"
+
+#: musicxml2ly.py:2190
+#, python-format
+msgid "unexpected %s; expected %s or %s or %s"
+msgstr "%s no esperada; s'esperava %s o %s o %s"
+
+#: musicxml2ly.py:2296
+msgid "Encountered closing slur, but no slur is open"
+msgstr "S'ha trobat un tancament d'una lligadura d'expressió, però no hi havia cap lligadura oberta"
+
+#: musicxml2ly.py:2299
+msgid "Cannot have two simultaneous (closing) slurs"
+msgstr "No es poden tenir dues lligadures (de tancament) simultànies"
+
+#: musicxml2ly.py:2308
+msgid "Cannot have a slur inside another slur"
+msgstr "No pot haver-hi una lligadura a dins d'una altra lligadura"
+
+#: musicxml2ly.py:2311
+msgid "Cannot have two simultaneous slurs"
+msgstr "No poden haver-hi dues lligadures simultànies"
+
+#: musicxml2ly.py:2445
+#, python-format
+msgid "cannot simultaneously have more than one mode: %s"
+msgstr "no pot haver-hi més d'un mode: %s"
+
+#: musicxml2ly.py:2553
+msgid "Converting to LilyPond expressions..."
+msgstr "S'està converting a expressions Lilypond..."
+
+#: musicxml2ly.py:2564
+msgid "musicxml2ly [OPTION]... FILE.xml"
+msgstr "musicxml2ly [OPCIÓ]... FITXER.xml"
+
+#: musicxml2ly.py:2566
+msgid ""
+"Convert MusicXML from FILE.xml to LilyPond input.\n"
+"If the given filename is -, musicxml2ly reads from the command line.\n"
+msgstr ""
+"Converteix MuxicXML des de FITXER.xml a entrada LilyPond.\n"
+"Si el nom de fitxer donat és -, muxicxml2ly llegeix des de la línia d'ordres.\n"
+
+#: musicxml2ly.py:2576
+msgid ""
+"Copyright (c) 2005--2012 by\n"
+"    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
+"    Jan Nieuwenhuizen <janneke@gnu.org> and\n"
+"    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
+msgstr ""
+"Copyright (c) 2005--2012 per\n"
+"    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
+"    Jan Nieuwenhuizen <janneke@gnu.org> i\n"
+"    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
+
+#: musicxml2ly.py:2602
+msgid "use lxml.etree; uses less memory and cpu time"
+msgstr "usa lxml.etree; fa servir menys memòria i temps de cpu"
+
+#: musicxml2ly.py:2608
+msgid "input file is a zip-compressed MusicXML file"
+msgstr "el fitxer d'entrada és un fitxer MusicXML comprimit amb zip"
+
+#: musicxml2ly.py:2614
+msgid "convert pitches in relative mode (default)"
+msgstr "converteix l'altura del so a mode relatiu (per defecte)"
+
+#: musicxml2ly.py:2619
+msgid "convert pitches in absolute mode"
+msgstr "converteix les altures del so a mode absolut"
+
+#: musicxml2ly.py:2622
+msgid "LANG"
+msgstr "LANG"
+
+#: musicxml2ly.py:2624
+msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
+msgstr "usa LANG pels noms de les altures del so, per exemple 'deutsch' per a noms de notes en alemany"
+
+#: musicxml2ly.py:2638
+msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
+msgstr "no converteixis les direccions (^, _ o -) per a les articulacions, les dinàmiques, etc."
+
+#: musicxml2ly.py:2644
+msgid "do not convert exact vertical positions of rests"
+msgstr "no converteixis les posicions verticals exactes dels silencis"
+
+#: musicxml2ly.py:2650
+msgid "do not convert the exact page layout and breaks"
+msgstr "no converteixis la disposició exacta de pàgina i els salts"
+
+#: musicxml2ly.py:2656
+msgid "do not convert beaming information, use lilypond's automatic beaming instead"
+msgstr "no converteixis la informació sobre barres, usa en canvi les barres automàtiques de lilypond"
+
+#: musicxml2ly.py:2664
+msgid "set output filename to FILE, stdout if -"
+msgstr "estableix el nom de fitxer de sortida a FITXER, sortida estàndard si -"
+
+#: musicxml2ly.py:2670
+msgid "activate midi-block"
+msgstr "activa midi-block"
+
+#: musicxml2ly.py:2754
+#, python-format
+msgid "unknown part in part-list: %s"
+msgstr "part desconeguda a part-list: %s"
+
+#: musicxml2ly.py:2816
+msgid "Input is compressed, extracting raw MusicXML data from stdin"
+msgstr "L'entrada està comprimida, s'està extraient dades en brut MusicXML de l'entrada estàndard"
+
+#: musicxml2ly.py:2829
+#, python-format
+msgid "Input file %s is compressed, extracting raw MusicXML data"
+msgstr "El fitxer d'entrada %s està comprimit, s'està extraient dades en brut MusicXML"
+
+#: musicxml2ly.py:2859
+msgid "Reading MusicXML from Standard input ..."
+msgstr "S'està llegint MusicXML de l'entrada estàndard ..."
+
+#: musicxml2ly.py:2861
+#, python-format
+msgid "Reading MusicXML from %s ..."
+msgstr "S'està llegint MusicXML de %s ..."
+
+#: musicxml2ly.py:2894
+#, python-format
+msgid "Output to `%s'"
+msgstr "Sortida a `%s'"
+
+#: musicxml2ly.py:2964
+#, python-format
+msgid "Unable to find input file %s"
+msgstr "No es pot trobar el fitxer d'entrada %s"
+
+#: website_post.py:125
+msgid "English"
+msgstr "Anglès"
+
+#: website_post.py:128
+msgid "Other languages"
+msgstr "Altres llengües"
+
+#: website_post.py:129
+#, python-format
+msgid "About <a href=\"%s\">automatic language selection</a>."
+msgstr "Sobre <a href=\"%s\">selecció automàtica de llengua</a>."
+
+#: getopt-long.cc:153
+#, c-format
+msgid "option `%s' requires an argument"
+msgstr "l'opció `%s' requereix un argument"
+
+#: getopt-long.cc:157
+#, c-format
+msgid "option `%s' does not allow an argument"
+msgstr "l'opció `%s' no permet un argument"
+
+#: getopt-long.cc:161
+#, c-format
+msgid "unrecognized option: `%s'"
+msgstr "opció no reconeguda: `%s'"
+
+#: getopt-long.cc:167
+#, c-format
+msgid "invalid argument `%s' to option `%s'"
+msgstr "argument no vàlid `%s' a l'opció `%s'"
+
+#: warn.cc:56
+#, c-format
+msgid "Log level set to %d\n"
+msgstr "El nivell de registre s'ha fixat a %d\n"
+
+#: warn.cc:89
+#, c-format
+msgid "unknown log level `%s', using default (INFO)"
+msgstr "nivell de registre desconegut `%s', s'està usant el nivell per defecte (INFO)"
+
+#. Some expected warning was not triggered, so print out a warning.
+#: warn.cc:112
+#, c-format
+msgid "%d expected warning(s) not encountered: "
+msgstr "els advertiments esperats %d no s'han produït: "
+
+#: warn.cc:183
+#, c-format
+msgid "fatal error: %s"
+msgstr "error fatal: %s"
+
+#: warn.cc:192
+#, c-format
+msgid "suppressed programming error: %s"
+msgstr "s'ha suprimit l'error de programació: %s"
+
+#: warn.cc:197
+#, c-format
+msgid "programming error: %s"
+msgstr "error de programació: %s"
+
+#: warn.cc:198
+msgid "continuing, cross fingers"
+msgstr "es continuarà, creueu els dits"
+
+#: warn.cc:207
+#, c-format
+msgid "suppressed error: %s"
+msgstr "error suprimit: %s"
+
+#: warn.cc:219
+#, c-format
+msgid "suppressed warning: %s"
+msgstr "advertiment suprimit %s"
+
+#: accidental-engraver.cc:180
+#, c-format
+msgid "accidental typesetting list must begin with context-name: %s"
+msgstr "la llista de tipografia d'accidents ha de començar amb un context-name: %s"
+
+#: accidental-engraver.cc:210
+#, c-format
+msgid "procedure or context-name expected for accidental rule, found %s"
+msgstr "s'espera un procediment o un context-name per a la regla d'accidents, s'ha trobat %s"
+
+#: accidental.cc:169
+#, c-format
+msgid "Could not find glyph-name for alteration %s"
+msgstr "No s'ha pogut trobar glyph-name per a l'alteració %s"
+
+#: accidental.cc:184
+msgid "natural alteration glyph not found"
+msgstr "no s'ha trobat el glif d'alteració natural"
+
+#: all-font-metrics.cc:149
+#, c-format
+msgid "cannot find font: `%s'"
+msgstr "no es pot trobar el tipus de lletra: `%s'"
+
+#: apply-context-iterator.cc:42
+msgid "\\applycontext argument is not a procedure"
+msgstr "l'argument \\applycontent no és un procediment"
+
+#: arpeggio.cc:138
+msgid "no heads for arpeggio found?"
+msgstr "no s'ha trobat el cap per a l'arpegi?"
+
+#: auto-change-iterator.cc:74 change-iterator.cc:72
+#, c-format
+msgid "cannot change, already in translator: %s"
+msgstr "no es pot canviar, ja està al traductor: %s"
+
+#: axis-group-engraver.cc:149
+msgid "Axis_group_engraver: vertical group already has a parent"
+msgstr "Axis_group_engraver: el grup vertical ja té un pare"
+
+#: axis-group-engraver.cc:150
+msgid "are there two Axis_group_engravers?"
+msgstr "hi ha dos Axis_group_engravers?"
+
+#: axis-group-engraver.cc:151
+msgid "removing this vertical group"
+msgstr "s'està eliminant aquest grup vertical"
+
+#: axis-group-interface.cc:714
+#, c-format
+msgid "\"%s\" is not a valid outside-staff-placement-directive"
+msgstr "\"%s\" no és una outside-staff-placement-directive vàlida"
+
+#: axis-group-interface.cc:786
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr "un objecte fora del pentagrama hauria de tenir una direcció, s'agafa cap a dalt per defecte"
+
+#: bar-check-iterator.cc:84
+#, c-format
+msgid "barcheck failed at: %s"
+msgstr "la verificació de la barra ha fallat a: %s"
+
+#: beam-engraver.cc:148
+msgid "already have a beam"
+msgstr "ja té una barra"
+
+#: beam-engraver.cc:235
+msgid "unterminated beam"
+msgstr "barra sense terminar"
+
+#: beam-engraver.cc:282 chord-tremolo-engraver.cc:149
+msgid "stem must have Rhythmic structure"
+msgstr "la vírgula ha de tenir una estructura rítmica"
+
+#: beam-engraver.cc:293
+msgid "stem does not fit in beam"
+msgstr "la vírgula no encaixa amb la barra"
+
+#: beam-engraver.cc:294
+msgid "beam was started here"
+msgstr "s'ha iniciat una barra aquí"
+
+#. We are completely screwed.
+#: beam-quanting.cc:839
+msgid "no viable initial configuration found: may not find good beam slope"
+msgstr "no s'ha trobat cap configuració inicial viable: és possible que no es trobi un bon pendent per a la barra"
+
+#: beam.cc:181
+msgid "removing beam with no stems"
+msgstr "s'està eliminant una barra sense vírgules"
+
+#: change-iterator.cc:34
+#, c-format
+msgid "cannot change `%s' to `%s'"
+msgstr "no es pot canviar `%s' a `%s'"
+
+#. FIXME: constant error message.
+#: change-iterator.cc:93
+msgid "cannot find context to switch to"
+msgstr "no es pot trobar un context per usar-lo per canviar"
+
+#. We could change the current translator's id, but that would make
+#. errors hard to catch.
+#.
+#. last->translator_id_string () = get_change
+#. ()->change_to_id_string ();
+#: change-iterator.cc:102
+#, c-format
+msgid "not changing to same context type: %s"
+msgstr "no es canviarà al mateix tipus de context: %s"
+
+#. FIXME: uncomprehensable message
+#: change-iterator.cc:106
+msgid "none of these in my family"
+msgstr "cap d'aquests a la meva família"
+
+#: chord-tremolo-engraver.cc:88
+msgid "No tremolo to end"
+msgstr "No s'ha trobat un trèmolo per a finalitzar"
+
+#: chord-tremolo-engraver.cc:109
+msgid "unterminated chord tremolo"
+msgstr "trèmolo d'acord sense acabar"
+
+#: clef.cc:65
+#, c-format
+msgid "clef `%s' not found"
+msgstr "no s'ha trobat la clau `%s'"
+
+#: cluster.cc:120
+#, c-format
+msgid "unknown cluster style `%s'"
+msgstr "estil de grup desconegut `%s'"
+
+#: cluster.cc:157
+msgid "junking empty cluster"
+msgstr "eliminant grup buit"
+
+#: coherent-ligature-engraver.cc:110
+#, c-format
+msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
+msgstr "Coherent_ligature_engraver: s'està configurant `spacing-increment=0.01': ptr=%ul"
+
+#: constrained-breaking.cc:187 constrained-breaking.cc:206
+msgid "cannot find line breaking that satisfies constraints"
+msgstr "no es pot trobar un salt de línia que satisfaci les restriccions"
+
+#: context-property.cc:43
+msgid "need symbol arguments for \\override and \\revert"
+msgstr "es necessiten arguments de símbol per a \\override i \\revert"
+
+#: context.cc:149
+#, c-format
+msgid "cannot find or create new `%s'"
+msgstr "no es pot trobar o crear nou/nova `%s'"
+
+#: context.cc:228
+#, c-format
+msgid "cannot find or create `%s' called `%s'"
+msgstr "no es pot crear `%s' anomenat `%s'"
+
+#: context.cc:425
+#, c-format
+msgid "cannot find or create: `%s'"
+msgstr "no es pot trobar o crear: `%s'"
+
+#: context.cc:439
+#, c-format
+msgid "cannot find or create new Bottom = \"%s\""
+msgstr "no es pot trobar el nou Botó = \"%s\""
+
+#: custos.cc:87
+#, c-format
+msgid "custos `%s' not found"
+msgstr "no s'ha trobat l'advertiment de canvi de tonalitat (custos) %s"
+
+#: dispatcher.cc:89
+msgid "Event class should be a list"
+msgstr "La classe d'esdeveniment hauria de ser una llista"
+
+#: dispatcher.cc:172
+#, c-format
+msgid "Junking event: %s"
+msgstr "S'està eliminant l'esdeveniment: %s"
+
+#: dispatcher.cc:277
+msgid "Attempting to remove nonexisting listener."
+msgstr "S'està intentant eliminar el port d'escolta no existent."
+
+#: dispatcher.cc:303
+msgid "Already listening to dispatcher, ignoring request"
+msgstr "Ja s'està escoltant al distribuïdor, s'ignorarà la demanda"
+
+#: dots.cc:48
+#, c-format
+msgid "dot `%s' not found"
+msgstr "no s'ha trobat el punt `%s'"
+
+#: dynamic-engraver.cc:168
+#, c-format
+msgid ""
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
+msgstr ""
+"estil de crescendo desconegut: %s\n"
+"es reverteix a forquilla."
+
+#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#, c-format
+msgid "unterminated %s"
+msgstr "%s sense acabar"
+
+#. No explicit dynamic script events have occurred yet, but there is
+#. nevertheless a dynamic spanner.  Initialize last_volume_ to a
+#. value within the available range.
+#: dynamic-performer.cc:129
+msgid "(De)crescendo with unspecified starting volume in MIDI."
+msgstr "(De)crescendo sense volum d'inici especificat al MIDI."
+
+#: episema-engraver.cc:75
+msgid "already have an episema"
+msgstr "ja hi ha un episema"
+
+#: episema-engraver.cc:88
+msgid "cannot find start of episema"
+msgstr "no es pot trobar l'inici de l'episema"
+
+#: episema-engraver.cc:137
+msgid "unterminated episema"
+msgstr "episema sense terminar"
+
+#: extender-engraver.cc:169 extender-engraver.cc:178
+msgid "unterminated extender"
+msgstr "extensor sense terminar"
+
+#: flag.cc:134
+#, c-format
+msgid "flag `%s' not found"
+msgstr "no s'ha trobat l'indicador `%s'"
+
+#: flag.cc:154
+#, c-format
+msgid "flag stroke `%s' not found"
+msgstr "no s'ha trobat indicador de barra `%s'"
+
+#: font-config-scheme.cc:151 font-config.cc:53
+#, c-format
+msgid "failed adding font directory: %s"
+msgstr "no s'ha pogut afegir directori de tipus de lletra: %s"
+
+#: font-config-scheme.cc:153 font-config.cc:55
+#, c-format
+msgid "Adding font directory: %s"
+msgstr "S'està afegint el directori de tipus de lletra: %s"
+
+#: font-config-scheme.cc:167
+#, c-format
+msgid "failed adding font file: %s"
+msgstr "no s'ha pogut afegir fitxer de tipus de lletra: %s"
+
+#: font-config-scheme.cc:169
+#, c-format
+msgid "Adding font file: %s"
+msgstr "S'està afegint fiter de tipus de lletra: %s"
+
+#: font-config.cc:38
+msgid "Initializing FontConfig..."
+msgstr "S'està iniciant FontConfig..."
+
+#: font-config.cc:58
+msgid "Building font database..."
+msgstr "Se està construint base de dades de tipus de lletra..."
+
+#: footnote-engraver.cc:87
+msgid "Must be footnote-event."
+msgstr "Ha de ser un footnote-event."
+
+#: general-scheme.cc:390
+#, c-format
+msgid "failed redirecting stderr to `%s'"
+msgstr "no s'ha pogut redirigir l'error estàndard a `%s'"
+
+#: general-scheme.cc:469 output-ps.scm:48
+msgid "Found infinity or nan in output.  Substituting 0.0"
+msgstr "S'ha trobat infinit o nan a la sortida. S'està substituint 0.0"
+
+#: glissando-engraver.cc:158
+msgid "unterminated glissando"
+msgstr "glissando sense terminar"
+
+#: global-context-scheme.cc:95 global-context-scheme.cc:113
+msgid "no music found in score"
+msgstr "no s'ha trobat música a la partitura"
+
+#: global-context-scheme.cc:103
+msgid "Interpreting music..."
+msgstr "S'està interpretant la música..."
+
+#: global-context-scheme.cc:125
+#, c-format
+msgid "elapsed time: %.2f seconds"
+msgstr "temps empleat: %.2f segons"
+
+#: gregorian-ligature-engraver.cc:70
+#, c-format
+msgid "\\%s ignored"
+msgstr "s'ha ignorat \\%s"
+
+#: gregorian-ligature-engraver.cc:75
+#, c-format
+msgid "implied \\%s added"
+msgstr "\\%s implicat afegit"
+
+#. ligature may not start with 2nd head of pes or flexa
+#: gregorian-ligature-engraver.cc:224
+msgid "cannot apply `\\~' on first head of ligature"
+msgstr "no es pot utilitzar `\\-' al primer cap de la lligadura"
+
+#. (pitch == prev_pitch)
+#: gregorian-ligature-engraver.cc:236
+msgid "cannot apply `\\~' on heads with identical pitch"
+msgstr "no es pot utilitzar `\\-' als caps amb to idèntic"
+
+#: grob-interface.cc:68
+#, c-format
+msgid "Unknown interface `%s'"
+msgstr "Interfície `%s' desconeguda"
+
+#: grob-interface.cc:79
+#, c-format
+msgid "Grob `%s' has no interface for property `%s'"
+msgstr "L'objecte gràfic `%s' no té interfície per a la propietat `%s'"
+
+#: grob-property.cc:35
+#, c-format
+msgid "%d: %s"
+msgstr "%d: %s"
+
+#: grob.cc:488
+#, c-format
+msgid "ignored infinite %s-offset"
+msgstr "s'ha ignorat un desplaçament-%s infinit"
+
+#: hairpin.cc:60
+msgid "Asking for broken bound padding at a non-broken bound."
+msgstr "S'està demanant un farciment trencat a un límit no trencat."
+
+#: hairpin.cc:256
+msgid "decrescendo too small"
+msgstr "decrescendo massa petit"
+
+#: horizontal-bracket-engraver.cc:62
+msgid "do not have that many brackets"
+msgstr "no hi ha tants parèntesis"
+
+#: horizontal-bracket-engraver.cc:71
+msgid "conflicting note group events"
+msgstr "esdeveniments de grup de notes en conflicte"
+
+#: hyphen-engraver.cc:104
+msgid "removing unterminated hyphen"
+msgstr "s'està removent el guionet no terminat"
+
+#: hyphen-engraver.cc:118
+msgid "unterminated hyphen; removing"
+msgstr "guionet sense terminar; s'està removent"
+
+#: includable-lexer.cc:71 lily-guile.cc:91 lily-parser-scheme.cc:108
+#, c-format
+msgid "cannot find file: `%s'"
+msgstr "no es pot trobar el fitxer: `%s'"
+
+#: includable-lexer.cc:73 lily-parser-scheme.cc:100
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(camí de búsqueda: `%s')"
+
+#: input.cc:138 source-file.cc:178 source-file.cc:193
+msgid "position unknown"
+msgstr "no es coneix la posició"
+
+#: key-engraver.cc:198
+msgid "Incomplete keyAlterationOrder for key signature"
+msgstr "keyAlterationOrder incomplet per a l'armadura"
+
+#: key-signature-interface.cc:77
+#, c-format
+msgid "No glyph found for alteration: %s"
+msgstr "No s'ha trobat el glif per a l'alteració: %s"
+
+#: key-signature-interface.cc:87
+msgid "alteration not found"
+msgstr "no s'ha trobat l'alteració"
+
+#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:109
+msgid "cannot find start of ligature"
+msgstr "no es pot trobar l'inici de la lligadura"
+
+#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:136
+msgid "already have a ligature"
+msgstr "ja hi ha una lligadura"
+
+#: ligature-engraver.cc:114
+msgid "no right bound"
+msgstr "sense límit dret"
+
+#: ligature-engraver.cc:145
+msgid "no left bound"
+msgstr "sense límit esquerre"
+
+#: ligature-engraver.cc:189
+msgid "unterminated ligature"
+msgstr "ligadura sense terminar"
+
+#: ligature-engraver.cc:216
+msgid "ignoring rest: ligature may not contain rest"
+msgstr "s'està ignorant el silenci: la lligadura no pot contenir un silenci"
+
+#: ligature-engraver.cc:217
+msgid "ligature was started here"
+msgstr "s'ha iniciat una lligadura aquí"
+
+#: lily-guile.cc:93
+#, c-format
+msgid "(load path: `%s')"
+msgstr "(camí de càrrega: `%s')"
+
+#: lily-guile.cc:412
+#, c-format
+msgid "cannot find property type-check for `%s' (%s)."
+msgstr "no es pot trobar la propietat type-check per a `%s' (%s)."
+
+#: lily-guile.cc:415
+msgid "perhaps a typing error?"
+msgstr "potser un error tipogràfic?"
+
+#: lily-guile.cc:422
+msgid "skipping assignment"
+msgstr "s'està saltant l'assignació"
+
+#: lily-guile.cc:442
+#, c-format
+msgid "type check for `%s' failed; value `%s' must be of type `%s'"
+msgstr "la verificació de tipus per a `%s' ha fallat; el valor `%s' ha de ser de tipus `%s'"
+
+#: lily-lexer.cc:249
+msgid "include files are not allowed in safe mode"
+msgstr "no es permet incloure fitxers en mode segur"
+
+#: lily-lexer.cc:276
+#, c-format
+msgid "identifier name is a keyword: `%s'"
+msgstr "el nom del identificador és una paraula clau: `%s'"
+
+#: lily-lexer.cc:297 lily-lexer.cc:310
+#, c-format
+msgid "%s:EOF"
+msgstr "%s:EOF"
+
+#: lily-parser-scheme.cc:80
+#, c-format
+msgid "Changing working directory to: `%s'"
+msgstr "S'està canviant el directori de treball a: `%s'"
+
+#: lily-parser-scheme.cc:84
+#, c-format
+msgid "unable to change directory to: `%s'"
+msgstr "no es pot canviar el directori a: `%s'"
+
+#: lily-parser-scheme.cc:99
+#, c-format
+msgid "cannot find init file: `%s'"
+msgstr "no es pot trobar el fitxer inicial: `%s'"
+
+#: lily-parser-scheme.cc:117
+#, c-format
+msgid "Processing `%s'"
+msgstr "S'està processant `%s'"
+
+#: lily-parser-scheme.cc:209
+msgid "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-include-string instead."
+msgstr "ly:parser-parse-string sols és vàlid amb un analitzador nou. Useu en canvi ly:parser-include-string."
+
+#: lily-parser-scheme.cc:240
+msgid "ly:parse-string-expression is only valid with a new parser.  Use ly:parser-include-string instead."
+msgstr "ly:parser-parse-string sols és vàlid amb un analitzador nou. Useu en canvi ly:parser-include-string."
+
+#: lily-parser.cc:107
+msgid "Parsing..."
+msgstr "Analitzant..."
+
+#: lookup.cc:181
+#, c-format
+msgid "Not drawing a box with negative dimension, %.2f by %.2f."
+msgstr "No es dibuixarà una caixa amb dimensió negativa, %.2f per %.2f."
+
+#: lyric-combine-music-iterator.cc:199
+msgid "argument of \\lyricsto should contain Lyrics context"
+msgstr "l'argument de \\lyricsto hauria de contenir un context de lletra"
+
+#: lyric-combine-music-iterator.cc:337
+#, c-format
+msgid "cannot find Voice `%s'"
+msgstr "no es pot trobar la veu `%s'"
+
+#: lyric-engraver.cc:186
+msgid "Lyric syllable does not have note.  Use \\lyricsto or associatedVoice."
+msgstr "La síl·laba de lletra no té una nota. Useu \\lyricsto o associatedVoice."
+
+#: main.cc:104
+#, c-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information.\n"
+msgstr ""
+"Aquest programa és programari lliure. Està cobert per la Llicència\n"
+"Pública General GNU i sou benvinguts a canviar-lo i/o distribuir\n"
+"còpies d'ell sota certes condicions. Crideu-lo com `%s --warranty' per\n"
+"a més informació.\n"
+
+#: main.cc:110
+msgid ""
+"    This program is free software; you can redistribute it and/or\n"
+"modify it under the terms of the GNU General Public License as \n"
+"published by the Free Software Foundation, either version 3 of\n"
+"the License, or (at your option) any later version.\n"
+"\n"
+"    This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
+"General Public License for more details.\n"
+"\n"
+"    You should have received a copy of the\n"
+"GNU General Public License along with this program; if not, write to\n"
+"the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
+"Boston, MA 02111-1307, USA.\n"
+msgstr ""
+"    Aquest programa és programari lliure; podeu redistribuir-lo i/o\n"
+"modificar-lo sota els terminis de la Llicència Pública General GNU tal\n"
+"tal com la publica la Free Software Foundation, o bé la versió 3 de la\n"
+"Llicència o (d'acord amb la vostra opció) qualsevol versió posterior.\n"
+"\n"
+"    Aquest programa es distribueix amb l'esperança que sigui útil,\n"
+"però SENSE CAP GARANTIA; sense ni tan sols la garantia implicada de\n"
+"COMERCIABILITAT o AJUST A UN PROPÒSIT PARTICULAR. Vegeu la LLicència\n"
+"Pública General GNU per a més detalls.\n"
+"\n"
+"    Hauríeu d'haver rebut una còpia de la Llicència Pública General GNU\n"
+"conjuntament amb aquest programa; si no l'heu rebuda, escriviu a la Free\n"
+"Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA\n"
+"02111-1307, USA.\n"
+
+#: main.cc:148
+msgid "SYM[=VAL]"
+msgstr "SYM[=VAL]"
+
+#: main.cc:149
+msgid ""
+"set Scheme option SYM to VAL (default: #t).\n"
+"Use -dhelp for help."
+msgstr ""
+"estableix l'opció SYM de Scheme a VAL (per defecte: #t).\n"
+"Useu -dhelp per a ajuda."
+
+#: main.cc:153
+msgid "EXPR"
+msgstr "EXPR"
+
+#: main.cc:153
+msgid "evaluate scheme code"
+msgstr "avalua el codi d'esquema"
+
+#. Bug in option parser: --output =foe is taken as an abbreviation
+#. for --output-format.
+#: main.cc:156
+msgid "FORMATs"
+msgstr "FORMATs"
+
+#: main.cc:156
+msgid "dump FORMAT,...  Also as separate options:"
+msgstr "bolca el FORMAT,...  També com a opcions separades:"
+
+#: main.cc:157
+msgid "generate PDF (default)"
+msgstr "genera PDF (predeterminat)"
+
+#: main.cc:158
+msgid "generate PNG"
+msgstr "genera PNG"
+
+#: main.cc:159
+msgid "generate PostScript"
+msgstr "genera PostScript"
+
+#: main.cc:162
+msgid "FIELD"
+msgstr "CAMP"
+
+#: main.cc:162
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
+msgstr ""
+"bolca la capçalera al fitxer\n"
+"anomenat NOMDEBASE.CAMP"
+
+#: main.cc:165
+msgid "add DIR to search path"
+msgstr "afegeix DIR al camí de búsqueda"
+
+#: main.cc:166
+msgid "use FILE as init file"
+msgstr "usa FITXER com a fitxer inicial"
+
+#: main.cc:169
+msgid "USER, GROUP, JAIL, DIR"
+msgstr "USER, GROUP, JAIL, DIR"
+
+#: main.cc:169
+msgid ""
+"chroot to JAIL, become USER:GROUP\n"
+"and cd into DIR"
+msgstr ""
+"fes un chroot a JAIL, converteix-te en USER:GROUP\n"
+"i fes un cd a DIR"
+
+#: main.cc:174
+msgid ""
+"print log messages according to LOGLEVEL.  Possible values are:\n"
+"NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
+msgstr ""
+"imprimeix els missatges del registre d'acord amb NIVELL DE REGISTRE. Els valors\n"
+"possibles són: NONE, ERROR, WARNING, BASIC, PROGRESS,  (preterminat) i DEBUG."
+
+#: main.cc:178
+msgid "write output to FILE (suffix will be added)"
+msgstr "escriu la sortida a FITXER (s'afegirà el sufix)"
+
+#: main.cc:179
+msgid "relocate using directory of lilypond program"
+msgstr "relocalitza el directori d'us del programa lilypond"
+
+#: main.cc:180
+msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
+msgstr "sense progrés, sols missatges d'error (equivalent a nivell de registre = ERROR)"
+
+#: main.cc:182
+msgid "be verbose (equivalent to loglevel=DEBUG)"
+msgstr "produeix missatges detallats (equivalent a nivell de registre = DEBUG)"
+
+#. Do not update the copyright years here, run `make grand-replace'
+#: main.cc:261
+#, c-format
+msgid ""
+"Copyright (c) %s by\n"
+"%s  and others."
+msgstr ""
+"Copyright (c) %s per\n"
+"%s i d'altres."
+
+#. No version number or newline here.  It confuses help2man.
+#: main.cc:299
+#, c-format
+msgid "Usage: %s [OPTION]... FILE..."
+msgstr "Ús: %s [OPCIÓ]... FITXER..."
+
+#: main.cc:301
+msgid "Typeset music and/or produce MIDI from FILE."
+msgstr "Compon tipogràficament la músic i/o produeix MIDI des d'un FITXER."
+
+#: main.cc:303
+msgid "LilyPond produces beautiful music notation."
+msgstr "LilyPond produeix una notació musical bella."
+
+#: main.cc:305
+#, c-format
+msgid "For more information, see %s"
+msgstr "Per a més informació, vegeu %s"
+
+#: main.cc:307
+msgid "Options:"
+msgstr "Opcions:"
+
+#: main.cc:374
+#, c-format
+msgid "expected %d arguments with jail, found: %u"
+msgstr "s'esperava %d arguments amb presó, s'ha trobat: %u"
+
+#: main.cc:388
+#, c-format
+msgid "no such user: %s"
+msgstr "no hi ha aquest usuari: %s"
+
+#: main.cc:390
+#, c-format
+msgid "cannot get user id from user name: %s: %s"
+msgstr "no es pot recuperar la identitat d'usuari des del nom d'usuari: %s: %s"
+
+#: main.cc:405
+#, c-format
+msgid "no such group: %s"
+msgstr "no hi ha aquest grup: %s"
+
+#: main.cc:407
+#, c-format
+msgid "cannot get group id from group name: %s: %s"
+msgstr "no es pot recuperar la identitat de grup des del nom de grup: %s: %s"
+
+#: main.cc:415
+#, c-format
+msgid "cannot chroot to: %s: %s"
+msgstr "no es pot executar chroot a: %s: %s"
+
+#: main.cc:422
+#, c-format
+msgid "cannot change group id to: %d: %s"
+msgstr "no es pot canviar la identitat de grup a: %d: %s"
+
+#: main.cc:428
+#, c-format
+msgid "cannot change user id to: %d: %s"
+msgstr "no es pot canviar la identitat d'usuari a: %d: %s"
+
+#: main.cc:434
+#, c-format
+msgid "cannot change working directory to: %s: %s"
+msgstr "no es pot canviar el directori de treball a: %s: %s"
+
+#: main.cc:805
+#, c-format
+msgid "exception caught: %s"
+msgstr "s'ha capturar una excepció: %s"
+
+#. FIXME: constant error message.
+#: mark-engraver.cc:156
+msgid "rehearsalMark must have integer value"
+msgstr "la rehearsalMark ha de tenir un valor enter"
+
+#: mark-engraver.cc:162
+msgid "mark label must be a markup object"
+msgstr "l'etiqueta de marca ha de ser un objecte de marcat"
+
+#: mensural-ligature-engraver.cc:100
+msgid "ligature with less than 2 heads -> skipping"
+msgstr "lligadura amb menys de 2 caps -> s'ometrà"
+
+#: mensural-ligature-engraver.cc:127
+msgid "cannot determine pitch of ligature primitive -> skipping"
+msgstr "no es pot determinar el to de la primitiva de lligadura -> s'ometrà"
+
+#: mensural-ligature-engraver.cc:141
+msgid "single note ligature - skipping"
+msgstr "lligadura de nota única - s'ometrà"
+
+#: mensural-ligature-engraver.cc:152
+msgid "prime interval within ligature -> skipping"
+msgstr "interval principal dins d'una lligadura -> s'ometrà"
+
+#: mensural-ligature-engraver.cc:163
+msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
+msgstr "lligadura de mesura: la duració no és cap de Mx, L, B, S -> s'ometrà"
+
+#: mensural-ligature-engraver.cc:206
+msgid "semibrevis must be followed by another one -> skipping"
+msgstr "les rodones han de ser seguides per una altra -> s'ometrà"
+
+#: mensural-ligature-engraver.cc:216
+msgid ""
+"semibreves can only appear at the beginning of a ligature,\n"
+"and there may be only zero or two of them"
+msgstr ""
+"les rodones sols poden aparèixer al principi de la lligadura,\n"
+"i sols poden haver-hi cap o dues d'elles"
+
+#: mensural-ligature-engraver.cc:236
+msgid ""
+"invalid ligatura ending:\n"
+"when the last note is a descending brevis,\n"
+"the penultimate note must be another one,\n"
+"or the ligatura must be LB or SSB"
+msgstr ""
+"finalització de lligadura no vàlida:\n"
+"quan l'última nota és una quadrada descendent,\n"
+"la penúltima nota ha de ser una altra,\n"
+"o la lligadura ha de ser LB o SSB"
+
+#: mensural-ligature-engraver.cc:396
+msgid "unexpected case fall-through"
+msgstr "cas quebrat no esperat"
+
+#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#, c-format
+msgid "ignoring out-of-range value change for MIDI property `%s'"
+msgstr "s'ignorarà el canvi de valor fora de rang per a la propietat MIDI `%s'"
+
+#: midi-item.cc:93
+#, c-format
+msgid "no such MIDI instrument: `%s'"
+msgstr "no existeix l'instrument MIDI: `%s'"
+
+#: midi-item.cc:179
+msgid "Time signature with more than 255 beats.  Truncating"
+msgstr "Indicació de temps amb més de 255 batecs"
+
+#: midi-stream.cc:38
+#, c-format
+msgid "cannot open for write: %s: %s"
+msgstr "no es pot obrir per escriptura: %s: %s"
+
+#: midi-stream.cc:54
+#, c-format
+msgid "cannot write to file: `%s'"
+msgstr "no es pot escriure al fitxer: `%s'"
+
+#: minimal-page-breaking.cc:40 paper-score.cc:122
+msgid "Calculating line breaks..."
+msgstr "S'estan calculant els salts de línia..."
+
+#: minimal-page-breaking.cc:44
+msgid "Calculating page breaks..."
+msgstr "S'estan calculant els salts de pàgina..."
+
+#: multi-measure-rest.cc:154
+msgid "usable-duration-logs must be a non-empty list.  Falling back to whole rests."
+msgstr "els usable-duration-logs han de ser una llista no buida. S'està revertint a silencis de rodona"
+
+#: multi-measure-rest.cc:364
+msgid "Using naive multi measure rest spacing."
+msgstr "S'estan usant espaiaments ingenus de silencis amb mesures múltiples."
+
+#: music.cc:150
+#, c-format
+msgid "octave check failed; expected \"%s\", found: \"%s\""
+msgstr "ha fallat la verificació d'octava; s'esperava \"%s\", s'ha trobat: \"%s\""
+
+#: music.cc:219
+msgid "(normalized pitch)"
+msgstr "(to normalitzat)"
+
+#: music.cc:223
+#, c-format
+msgid "Transposing %s by %s makes alteration larger than double"
+msgstr "Si es transposa %s per %s es fa l'alteració més llarga que el doble"
+
+#: new-fingering-engraver.cc:113
+msgid "cannot add text scripts to individual note heads"
+msgstr "no es poden afegir guions de text a caps de notes individuals"
+
+#: new-fingering-engraver.cc:269
+msgid "no placement found for fingerings"
+msgstr "no s'ha trobat la posició per a la digitació"
+
+#: new-fingering-engraver.cc:270
+msgid "placing below"
+msgstr "posicionant a sota"
+
+#: note-collision.cc:497
+msgid "ignoring too many clashing note columns"
+msgstr "s'ignorarà per un excessiu nombre de columnes de nota en conflicte"
+
+#: note-column.cc:147
+msgid "cannot have note heads and rests together on a stem"
+msgstr "no es poden tenir caps de nota i silencis a l'hora a una barra"
+
+#: note-head.cc:95
+#, c-format
+msgid "none of note heads `%s' or `%s' found"
+msgstr "no s'ha trobat ni el caps de nota `%s' ni el cap de nota `%s'"
+
+#: note-heads-engraver.cc:76
+msgid "NoteEvent without pitch"
+msgstr "NoteEvent sense tonalitat"
+
+#: open-type-font.cc:45
+#, c-format
+msgid "cannot allocate %lu bytes"
+msgstr "no es poden assignar %lu bytes"
+
+#: open-type-font.cc:49
+#, c-format
+msgid "cannot load font table: %s"
+msgstr "no es pot carregar la taula de tipus de lletra: %s"
+
+#: open-type-font.cc:54
+#, c-format
+msgid "FreeType error: %s"
+msgstr "Error de FreeType: %s"
+
+#: open-type-font.cc:111
+#, c-format
+msgid "unsupported font format: %s"
+msgstr "format de tipus de lletra no suportat: %s"
+
+#: open-type-font.cc:113
+#, c-format
+msgid "error reading font file %s: %s"
+msgstr "s'ha produït un error llegint el fitxer de tipus de lletra %s: %s"
+
+#: open-type-font.cc:188
+#, c-format
+msgid "FT_Get_Glyph_Name () Freetype error: %s"
+msgstr "FT_Get_Glyps_Name () Error de Freetype: %s"
+
+#: open-type-font.cc:336 pango-font.cc:256
+#, c-format
+msgid "FT_Get_Glyph_Name () error: %s"
+msgstr "Error FT_Get_Glyph_Name (): %s"
+
+#. find out the ideal number of pages
+#: optimal-page-breaking.cc:62
+msgid "Finding the ideal number of pages..."
+msgstr "S'està buscant el nombre ideal de pàgines..."
+
+#: optimal-page-breaking.cc:94
+msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page"
+msgstr ""
+"no s'ha pogut satisfer systems-per-page i page-count a l'hora,\n"
+"s'ignorarà systems-per-page"
+
+#: optimal-page-breaking.cc:114
+msgid "Fitting music on 1 page..."
+msgstr "Ajustant la partitura a 1 pàgina..."
+
+#: optimal-page-breaking.cc:116
+#, c-format
+msgid "Fitting music on %d pages..."
+msgstr "Ajustant la partitura a %d pàgines..."
+
+#: optimal-page-breaking.cc:118
+#, c-format
+msgid "Fitting music on %d or %d pages..."
+msgstr "Ajustant la partitura a %d o %d pàgines..."
+
+#: optimal-page-breaking.cc:128 optimal-page-breaking.cc:181
+#, c-format
+msgid "trying %d systems"
+msgstr "s'està provant amb %d sistemes de pentagrames"
+
+#: optimal-page-breaking.cc:147 optimal-page-breaking.cc:209
+#, c-format
+msgid "best score for this sys-count: %f"
+msgstr "millor partitura per a aquest syst-count: %f"
+
+#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248
+#: paper-score.cc:162
+msgid "Drawing systems..."
+msgstr "S'estan dibuixant els sistemes de pentagrames..."
+
+#: output-def.cc:235
+msgid "margins do not fit with line-width, setting default values"
+msgstr "els marges no concorden amb line-width, s'establiran els valors predeterminats"
+
+#: output-def.cc:242
+msgid "systems run off the page due to improper paper settings, setting default values"
+msgstr ""
+"els sistemes de pentagrames sobrepassen la pàgina degut a paràmetres\n"
+"de pàgina incorrectes, s'establiran els valors predeterminats"
+
+#: page-breaking.cc:277
+msgid "ignoring min-systems-per-page and max-systems-per-page because systems-per-page was set"
+msgstr "s'ignorarà min-systems-per-page i max-systems-per-page perquè s'ha establert systems-per-page"
+
+#: page-breaking.cc:282
+msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values"
+msgstr "min-systems-per-page és més gran que max-systems-per-page, s'ignoraran ambdós valors"
+
+#: page-layout-problem.cc:402
+msgid "A page layout problem has been initiated that cannot accommodate footnotes."
+msgstr "S'ha iniciat un problema de disposició de pàgina que no pot acomodar notes a peu de pàgina."
+
+#: page-layout-problem.cc:731
+msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed"
+msgstr "no es pot ajustar la partitura a la pàgina: s'ha requerit ragged-spacing, però la pàgina estava comprimida"
+
+#: page-layout-problem.cc:734
+#, c-format
+msgid "cannot fit music on page: overflow is %f"
+msgstr "no es pot ajustar la partitura a la pàgina: l'excés és %f"
+
+#: page-layout-problem.cc:736
+msgid "compressing music to fit"
+msgstr "s'està comprimint la partitura perquè encaixi"
+
+#: page-layout-problem.cc:1199
+msgid "staff-affinities should only decrease"
+msgstr "les staff-affinities no haurien de decréixer"
+
+#: page-turn-page-breaking.cc:168
+#, c-format
+msgid "page-turn-page-breaking: breaking from %d to %d"
+msgstr "page-turn-page-breaking: saltant de %d a %d"
+
+#: page-turn-page-breaking.cc:217
+msgid "cannot fit the first page turn onto a single page.  Consider setting first-page-number to an even number."
+msgstr "no es pot ajustar el primer salt de pàgina a una pàgina única. Considereu establir first-page-number a un nombre parell."
+
+#: page-turn-page-breaking.cc:230
+#, c-format
+msgid "Calculating page and line breaks (%d possible page breaks)..."
+msgstr "S'estan calculant els salts de pàgina i de línia (%d salts de pàgina possibles)..."
+
+#: page-turn-page-breaking.cc:300
+#, c-format
+msgid "break starting at page %d"
+msgstr "el salt comença a la pàgina %d"
+
+#: page-turn-page-breaking.cc:301
+#, c-format
+msgid "\tdemerits: %f"
+msgstr "\tdemèrits: %f"
+
+#: page-turn-page-breaking.cc:302
+#, c-format
+msgid "\tsystem count: %d"
+msgstr "\tquantitat de sistemes de pentagrames: %d"
+
+#: page-turn-page-breaking.cc:303
+#, c-format
+msgid "\tpage count: %d"
+msgstr "\tquantitat de pàgines: %d"
+
+#: page-turn-page-breaking.cc:304
+#, c-format
+msgid "\tprevious break: %d"
+msgstr "\tsalt anterior: %d"
+
+#: pango-font.cc:245
+#, c-format
+msgid "no glyph for character U+%0X in font `%s'"
+msgstr "no hi ha un glif per al caràcter U+%0X al tipus de lletra `%s'"
+
+#: pango-font.cc:272
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+"El glif no té nom, però el tipus de lletra permet el nomenament de glifs.\n"
+"S'està ometent el glif U+%0x, fitxer %s"
+
+#: pango-font.cc:322
+#, c-format
+msgid "no PostScript font name for font `%s'"
+msgstr "no hi ha un nom de tipus de lletra Postscript per al tipus de lletra `%s'"
+
+#: pango-font.cc:372
+msgid "FreeType face has no PostScript font name"
+msgstr "La família FreeType no té un nom de tipus de lletra PostScript"
+
+#: paper-book.cc:214
+#, c-format
+msgid "program option -dprint-pages not supported by backend `%s'"
+msgstr "l'opció de programa -dprint-pages no té suport al dorsal `%s' "
+
+#: paper-book.cc:233
+#, c-format
+msgid "program option -dpreview not supported by backend `%s'"
+msgstr "l'opció del programa -dpreview no està suportada pel dorsal `%s'"
+
+#: paper-column-engraver.cc:263
+msgid "forced break was overridden by some other event, should you be using bar checks?"
+msgstr "el salt forçat s'ha cancel·lat per algun altre esdeveniment, hauríeu d'estar usant verificacions de barres?"
+
+#: paper-outputter-scheme.cc:41
+#, c-format
+msgid "Layout output to `%s'..."
+msgstr "Sortida de disposició a `%s'..."
+
+#: paper-score.cc:134
+#, c-format
+msgid "Element count %d (spanners %d) "
+msgstr "Quantitat d'elements %d (expansor %d)"
+
+#: paper-score.cc:138
+msgid "Preprocessing graphical objects..."
+msgstr "Pre-processant els objectes gràfics..."
+
+#: parse-scm.cc:121
+msgid "GUILE signaled an error for the expression beginning here"
+msgstr "GUILE ha senyalat un error per a l'expressió que comença aquí"
+
+#: partial-iterator.cc:45
+msgid "trying to use \\partial after the start of a piece"
+msgstr "s'esta provant d'usar \\partial després de l'inici d'una peça"
+
+#: pdf-scheme.cc:65
+#, c-format
+msgid "Conversion of string `%s' to UTF-16be failed: %s"
+msgstr "La conversió de la cadena de caràcters `%s'a UTF-16be ha fallat: %s"
+
+#: percent-repeat-engraver.cc:147
+msgid "unterminated percent repeat"
+msgstr "repetició de percentatge sense terminar"
+
+#: performance.cc:54
+msgid "Track..."
+msgstr "Pista..."
+
+#: performance.cc:82
+#, c-format
+msgid "MIDI output to `%s'..."
+msgstr "Sortida MIDI a `%s'..."
+
+#: piano-pedal-engraver.cc:279
+#, c-format
+msgid "expect 3 strings for piano pedals, found: %ld"
+msgstr "s'esperaven 3 cadenes de caràcters per als pedals de piano, s'han trobat: %ld"
+
+#: piano-pedal-engraver.cc:294 piano-pedal-engraver.cc:305
+#: piano-pedal-performer.cc:104
+#, c-format
+msgid "cannot find start of piano pedal: `%s'"
+msgstr "no es pot trobar l'inici del pedal de piano: `%s'"
+
+#: piano-pedal-engraver.cc:340
+#, c-format
+msgid "cannot find start of piano pedal bracket: `%s'"
+msgstr "no es pot trobar el parèntesi del pedal de piano: `%s'"
+
+#: program-option-scheme.cc:223
+#, c-format
+msgid "no such internal option: %s"
+msgstr "no hi ha aquesta opció interna: %s"
+
+#: property-iterator.cc:100
+#, c-format
+msgid "not a grob name, `%s'"
+msgstr "no és un nom d'objecte gràfic, `%s'"
+
+#: relative-octave-check.cc:49
+msgid "Failed octave check, got: "
+msgstr "Ha fallat la verificació d'octava, s'ha obtès: "
+
+#: relocate.cc:52
+#, c-format
+msgid "Setting %s to %s"
+msgstr "S'ha establert %s a %s"
+
+#. this warning should only be printed in debug mode!
+#: relocate.cc:73
+#, c-format
+msgid "no such file: %s for %s"
+msgstr "no existeix aquest fitxer: %s per a %s"
+
+#. this warning should only be printed in debug mode!
+#. this warning should only be printed in debug mode
+#: relocate.cc:84 relocate.cc:102
+#, c-format
+msgid "no such directory: %s for %s"
+msgstr "no existeix aquest directori: %s per a %s"
+
+#: relocate.cc:93
+#, c-format
+msgid "%s=%s (prepend)\n"
+msgstr "%s=%s (anteposa)\n"
+
+#: relocate.cc:124
+#, c-format
+msgid "not relocating, no %s/ or current/ found under %s"
+msgstr "no es relocalitzarà, no s'ha trobat %s/ o actual/ sota %s"
+
+#: relocate.cc:134
+#, c-format
+msgid "Relocation: compile datadir=%s, new datadir=%s"
+msgstr "Relocalització: directori de dades de compilació=%s, nou directori=%s"
+
+#: relocate.cc:146
+#, c-format
+msgid "Relocation: framework_prefix=%s"
+msgstr "Relocalització: framework_prefix=%s"
+
+#: relocate.cc:172
+#, c-format
+msgid "Relocation: is absolute: argv0=%s\n"
+msgstr "Relocalització: és absolut: argv0=%s\n"
+
+#: relocate.cc:178
+#, c-format
+msgid "Relocation : from cwd: argv0=%s\n"
+msgstr "Relocalització : de cwd: argv0=%s\n"
+
+#: relocate.cc:194
+#, c-format
+msgid ""
+"Relocation: from PATH=%s\n"
+"argv0=%s\n"
+msgstr ""
+"Relocalització: de CAMÍ=%s\n"
+"argv0=%s\n"
+
+#: relocate.cc:220
+msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
+msgstr "LILYPONDPREFIX és obsolet, useu LILYPOND_DATADIR"
+
+#: relocate.cc:345
+#, c-format
+msgid "Relocation file: %s"
+msgstr "Fitxer de relocalització: %s"
+
+#: relocate.cc:349 source-file.cc:65
+#, c-format
+msgid "cannot open file: `%s'"
+msgstr "no es pot obrir: `%s'"
+
+#: relocate.cc:379
+#, c-format
+msgid "Unknown relocation command %s"
+msgstr "Ordre desconeguda de relocalització %s"
+
+#: rest-collision-engraver.cc:70
+msgid "rhythmic head is not part of a rhythmic column"
+msgstr "el cap rítmic no és part de la columna rítmica"
+
+#: rest-collision.cc:150
+msgid "cannot resolve rest collision: rest direction not set"
+msgstr "no es pot resoldre la col·lisió de silenci: no s'ha establert la direcció del silenci"
+
+#: rest-collision.cc:161 rest-collision.cc:270
+msgid "too many colliding rests"
+msgstr "massa silencis en col·lisió"
+
+#: rest.cc:240
+#, c-format
+msgid "rest `%s' not found"
+msgstr "no s'ha trobat el silenci `%s'"
+
+#: score-engraver.cc:78
+#, c-format
+msgid "cannot find `%s'"
+msgstr "no es pot trobar `%s'"
+
+#: score-engraver.cc:80
+msgid "Music font has not been installed properly."
+msgstr "No s'ha instal·lat adequadament el tipus de lletra de música."
+
+#: score-engraver.cc:82
+#, c-format
+msgid "Search path `%s'"
+msgstr "Camí de búsqueda `%s'"
+
+#: score-engraver.cc:84
+msgid "Aborting"
+msgstr "S'està avortant"
+
+#: score.cc:172
+msgid "already have music in score"
+msgstr "ja hi han notes a la partitura"
+
+#: score.cc:173
+msgid "this is the previous music"
+msgstr "aquestes són les notes anteriors"
+
+#: score.cc:178
+msgid "errors found, ignoring music expression"
+msgstr "s'han trobat errors, s'ignorarà el fragment de música"
+
+#. FIXME:
+#: script-engraver.cc:115
+msgid "do not know how to interpret articulation:"
+msgstr "no hi ha prou informació per interpretar l'articulació:"
+
+#: script-engraver.cc:116
+msgid " scheme encoding: "
+msgstr "codificació de l'esquema: "
+
+#: skyline-pair.cc:160
+msgid "direction must not be CENTER in ly:skyline-pair::skyline"
+msgstr "la direcció no pot ser CENTRE a ly:skyline-pair::skyline"
+
+#: slur-proto-engraver.cc:51
+#, c-format
+msgid "direction of %s invalid: %d"
+msgstr "la direcció de %s no és vàlida: %d"
+
+#. We already have an old slur, so give a warning
+#. and completely ignore the new slur.
+#: slur-proto-engraver.cc:166
+#, c-format
+msgid "already have %s"
+msgstr "ja hi ha %s"
+
+#: slur-proto-engraver.cc:183
+#, c-format
+msgid "%s without a cause"
+msgstr "%s sens una causa"
+
+#: slur-proto-engraver.cc:244
+#, c-format
+msgid "cannot end %s"
+msgstr "no es pot finalitzar %s"
+
+#: slur.cc:434
+#, c-format
+msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
+msgstr "S'ignorarà l'objecte gràfic per a la lligadura: %s. No s'ha establert avoid-slur?"
+
+#: source-file.cc:85
+#, c-format
+msgid "expected to read %d characters, got %d"
+msgstr "s'esperaven llegir %d caràcters, s'han obtès %d"
+
+#: staff-performer.cc:301
+msgid "MIDI channel wrapped around"
+msgstr "El canal de MIDI està ajustat al voltant"
+
+#: staff-performer.cc:302
+msgid "remapping modulo 16"
+msgstr "es tornarà a mapejar el mòdul 16"
+
+#: stem-engraver.cc:110
+msgid "tremolo duration is too long"
+msgstr "la duració del trèmolo és massa llarga"
+
+#: stem-engraver.cc:162
+#, c-format
+msgid "adding note head to incompatible stem (type = %d/%d)"
+msgstr "s'afegirà un cap de nota a una vírgula incompatible (tipus = %d/%d)"
+
+#: stem-engraver.cc:165
+msgid "maybe input should specify polyphonic voices"
+msgstr "potser l'entrada hauria d'especificar veus polifòniques"
+
+#: stem.cc:128
+msgid "weird stem size, check for narrow beams"
+msgstr "dimensió de vírgula estranya, verifiqueu si hi han barres estretes "
+
+#: system.cc:201
+#, c-format
+msgid "Element count %d"
+msgstr "Nombre d'elements %d"
+
+#: system.cc:512
+#, c-format
+msgid "Grob count %d"
+msgstr "Nombre d'objectes gràfics %d"
+
+#. TODO: Also print the arguments of the markup!
+#: text-interface.cc:129
+#, c-format
+msgid "Cyclic markup detected: %s"
+msgstr "S'ha detectat un marcat cíclic: %s"
+
+#. TODO: Also print the arguments of the markup!
+#: text-interface.cc:142
+#, c-format
+msgid "Markup depth exceeds maximal value of %d; Markup: %s"
+msgstr "La profunditat del marcat excedeix el valor màxim de %d; Marcat: %s"
+
+#: text-spanner-engraver.cc:72
+msgid "cannot find start of text spanner"
+msgstr "no es pot trobar l'inici de l'expansor de text"
+
+#: text-spanner-engraver.cc:85
+msgid "already have a text spanner"
+msgstr "ja hi ha un expansor de text"
+
+#: text-spanner-engraver.cc:130
+msgid "unterminated text spanner"
+msgstr "expansor de text sense terminar"
+
+#: tie-engraver.cc:119
+msgid "unterminated tie"
+msgstr "lligadura sense terminar"
+
+#: tie-engraver.cc:353
+msgid "lonely tie"
+msgstr "lligadura aïllada"
+
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#: time-signature-engraver.cc:75
+#, c-format
+msgid "strange time signature found: %d/%d"
+msgstr "s'ha trobat una indicació de temps estranya: %d/%d"
+
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#: time-signature.cc:89
+#, c-format
+msgid "time signature symbol `%s' not found; reverting to numbered style"
+msgstr "no s'ha trobat el símbol d'indicació de temps `%s'; es revertirà a l'estil numèric"
+
+#: translator-ctors.cc:65
+#, c-format
+msgid "unknown translator: `%s'"
+msgstr "traductor desconegut: `%s'"
+
+#: translator-group-ctors.cc:40
+#, c-format
+msgid "fatal error.  Couldn't find type: %s"
+msgstr "error fatal. No s'ha pogut trobar el tipus: %s"
+
+#: translator-group.cc:188
+#, c-format
+msgid "cannot find: `%s'"
+msgstr "no es pot trobar: `%s'"
+
+#: translator.cc:326
+#, c-format
+msgid "Two simultaneous %s events, junking this one"
+msgstr "Dos esdeveniments simultanis %s, s'eliminarà aquest"
+
+#: translator.cc:327
+#, c-format
+msgid "Previous %s event here"
+msgstr "Esdeveniment %s previ aquí"
+
+#: ttf.cc:480 ttf.cc:528
+#, c-format
+msgid "font index %d too large for font `%s', using index 0"
+msgstr "l'índex de tipus de lletra %d és massa gran per al tipus de lletra `%s', s'usarà l'índex 0"
+
+#: ttf.cc:512 ttf.cc:562
+msgid "font index must be non-negative, using index 0"
+msgstr "l'índex de tipus de lletra ha de ser no-negatiu, s'usarà l'índex 0"
+
+#: tuplet-engraver.cc:110
+msgid "No tuplet to end"
+msgstr "No s'ha trobat una tupla per finalitzar"
+
+#: vaticana-ligature-engraver.cc:400
+#, c-format
+msgid "ignored prefix(es) `%s' of this head according to restrictions of the selected ligature style"
+msgstr "s'ignorarà el(s) prefix(os) `%s' per a aquest cap d'acord amb les restriccions de l'estil seleccionat de lligadura "
+
+#: vaticana-ligature-engraver.cc:466
+msgid "Ambiguous use of dots in ligature: there are multiple dotted notes with the same pitch.  The ligature should be split."
+msgstr "Ús ambigu de punts a la lligadura: hi ha notes múltiples amb punt amb la mateixa tonalitat. S'hauria de dividir la lligadura."
+
+#: vaticana-ligature-engraver.cc:524
+msgid "This ligature has a dotted head followed by a non-dotted head.  The ligature should be split after the last dotted head before this head."
+msgstr "Aquesta lligadura té un cap amb punt seguit d'un altre cap sense punt. La lligadura s'hauria de dividir després de l'últim cap amb punt abans d'aquest cap"
+
+#: vaticana-ligature-engraver.cc:736
+#, c-format
+msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
+msgstr "Vaticana_ligature_engraver: s'establirà `spacing-increment = %f': ptr =%ul"
+
+#: vaticana-ligature.cc:94
+msgid "flexa-height undefined; assuming 0"
+msgstr "flexa-height sense definir; se suposarà 0"
+
+#: vaticana-ligature.cc:99
+msgid "ascending vaticana style flexa"
+msgstr "estil de flexa vaticana ascendent"
+
+#: vertical-align-engraver.cc:95
+msgid "Ignoring Vertical_align_engraver in VerticalAxisGroup"
+msgstr "S'ignorarà Vertical_align_engraver a VerticalAxisGroup"
+
+#. fixme: be more verbose.
+#: volta-engraver.cc:110
+msgid "cannot end volta spanner"
+msgstr "no es pot terminar l'expansor de volta"
+
+#: volta-engraver.cc:120
+msgid "already have a volta spanner, ending that one prematurely"
+msgstr "ja hi ha un expansor de volta, es terminarà aquell prematurament"
+
+#: volta-engraver.cc:124
+msgid "also already have an ended spanner"
+msgstr "també ja hi ha un expansor finalitzat"
+
+#: volta-engraver.cc:125
+msgid "giving up"
+msgstr "es renunciarà"
+
+#: parser.yy:158 parser.yy:172
+msgid "Too much lookahead"
+msgstr "Massa cerca anticipada"
+
+#: parser.yy:441 parser.yy:752 parser.yy:818
+msgid "bad expression type"
+msgstr "tipus d'expressió incorrecta"
+
+#: parser.yy:650 parser.yy:1159
+msgid "not a context mod"
+msgstr "no és un mod de context"
+
+#: parser.yy:853
+msgid "score expected"
+msgstr "s'esperaven notes"
+
+#: parser.yy:869
+msgid "\\paper cannot be used in \\score, use \\layout instead"
+msgstr "no es pot usar \\paper a \\score, useu en canvi \\layout"
+
+#: parser.yy:893
+msgid "need \\paper for paper block"
+msgstr "es necessita \\paper per a un bloc de paper"
+
+#: parser.yy:1033 parser.yy:1055
+msgid "unexpected post-event"
+msgstr "esdeveniment posterior inesperat"
+
+#: parser.yy:1063
+msgid "Ignoring non-music expression"
+msgstr "S'ignorarà l'expressió que no és musical"
+
+#: parser.yy:1075 parser.yy:2493
+msgid "music expected"
+msgstr "s'esperaven notes"
+
+#: parser.yy:1370
+msgid "not a symbol"
+msgstr "no és un símbol"
+
+#: parser.yy:2182 parser.yy:2296 parser.yy:2309 parser.yy:2318
+msgid "bad grob property path"
+msgstr "camí incorrecte de propietat d'element gràfic"
+
+#: parser.yy:2276
+msgid "only \\consists and \\remove take non-string argument."
+msgstr "sols \\consists i \\remove admeten arguments no-textuals."
+
+#: parser.yy:2337
+msgid "bad context property path"
+msgstr "camí incorrecte de propietat de context"
+
+#: parser.yy:2438
+msgid "simple string expected"
+msgstr "s'esperava una cadena simple de caràcters"
+
+#: parser.yy:2456
+msgid "symbol expected"
+msgstr "s'esperava un símbol"
+
+#: parser.yy:2611
+msgid "not a rhythmic event"
+msgstr "no és un esdeveniment rítmic"
+
+#: parser.yy:2685
+msgid "post-event expected"
+msgstr "s'esperava un post-esdeveniment"
+
+#: parser.yy:2694 parser.yy:2699
+msgid "have to be in Lyric mode for lyrics"
+msgstr "s'ha de ser a mode Lyric per a lletres"
+
+#: parser.yy:2767
+msgid "expecting string as script definition"
+msgstr "s'esperava una cadena de caràcters per a la definició del fitxer de seqüencies d'ordres"
+
+#: parser.yy:2875
+msgid "not an articulation"
+msgstr "no és una articulació"
+
+#: parser.yy:2947 parser.yy:2990
+msgid "not a duration"
+msgstr "no és una duració"
+
+#: parser.yy:3007
+msgid "bass number expected"
+msgstr "s'esperava un número de baix"
+
+#: parser.yy:3106
+msgid "have to be in Note mode for notes"
+msgstr "s'ha d'estar en mode Nota per a notes"
+
+#: parser.yy:3166
+msgid "have to be in Chord mode for chords"
+msgstr "s'ha d'estar en mode Acords per a acords"
+
+#: parser.yy:3181
+msgid "markup outside of text script or \\lyricmode"
+msgstr "marcat fora d'un codi font de text o \\lyricmode"
+
+#: parser.yy:3186
+msgid "unrecognized string, not in text script or \\lyricmode"
+msgstr "cadena de text no reconeguda, no s'està en codi font de text o \\lyricmode"
+
+#: parser.yy:3347 parser.yy:3356
+msgid "not an unsigned integer"
+msgstr "no és un enter sense signe"
+
+#: parser.yy:3424
+msgid "not a markup"
+msgstr "no és un marcat"
+
+#: lexer.ll:224
+msgid "stray UTF-8 BOM encountered"
+msgstr "s'ha trobat una marca BOM d'UTF-8 estranya"
+
+#: lexer.ll:227
+msgid "Skipping UTF-8 BOM"
+msgstr "S'ometrà la marca BOM d'UTF-8"
+
+#: lexer.ll:279
+#, c-format
+msgid "Renaming input to: `%s'"
+msgstr "Es reanomenarà l'entrada a: `%s'"
+
+#: lexer.ll:296
+msgid "quoted string expected after \\version"
+msgstr "cadena de caràcters entrecomillada després de \\version"
+
+#: lexer.ll:300
+msgid "quoted string expected after \\sourcefilename"
+msgstr "s'esperava una cadena entrecomillada de caràcters després de \\sourcefilename"
+
+#: lexer.ll:304
+msgid "integer expected after \\sourcefileline"
+msgstr "s'esperava un nombre enter després de \\sourcefileline"
+
+#: lexer.ll:331
+msgid "\\maininput not allowed outside init files"
+msgstr "no es permet \\maininput fora de fitxers d'inici"
+
+#: lexer.ll:355
+#, c-format
+msgid "wrong or undefined identifier: `%s'"
+msgstr "identificador incorrecte o sense definir: `%s'"
+
+#: lexer.ll:381
+msgid "string expected after \\include"
+msgstr "s'esperava una cadena de caràcters després de \\include"
+
+#: lexer.ll:391
+msgid "end quote missing"
+msgstr "cometa de tancament no present"
+
+#: lexer.ll:743
+msgid "EOF found inside a comment"
+msgstr "S'ha trobat EOF (final de fitxer) a dins d'un comentari"
+
+#: lexer.ll:748
+msgid "EOF found inside string"
+msgstr "S'ha trobat EOF a dins d'un comentari"
+
+#: lexer.ll:763
+msgid "Unfinished main input"
+msgstr "Entrada principal sense terminar"
+
+#: lexer.ll:834
+#, c-format
+msgid "invalid character: `%s'"
+msgstr "caràcter no vàlid: `%s'"
+
+#: lexer.ll:963
+#, c-format
+msgid "unknown escaped string: `\\%s'"
+msgstr "cadena escapada de caràcters desconeguda: `\\%s'"
+
+#: lexer.ll:983
+#, c-format
+msgid "undefined character or shorthand: %s"
+msgstr "caràcter no definit o abreviació taquigràfica: %s"
+
+#: lexer.ll:1275
+msgid "non-UTF-8 input"
+msgstr "entrada no UTF-8"
+
+#: lexer.ll:1319
+#, c-format
+msgid "file too old: %s (oldest supported: %s)"
+msgstr "fitxer massa antic: %s (el més antic suportat: %s)"
+
+#: lexer.ll:1320
+msgid "consider updating the input with the convert-ly script"
+msgstr "considereu d'actualitzar l'entrada amb una seqüència d'ordres convert-ly"
+
+#: lexer.ll:1326
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr "el programa és massa antic: %s (el fitxer requereix: %s)"
+
+#: backend-library.scm:27
+#, scheme-format
+msgid "Invoking `~a'..."
+msgstr "Invocant `~a'..."
+
+#: backend-library.scm:31
+#, scheme-format
+msgid "`~a' failed (~a)\n"
+msgstr "`~a' ha fallat (~a)\n"
+
+#: backend-library.scm:93
+#, scheme-format
+msgid "Converting to `~a'...\n"
+msgstr "S'està convertint a `~a'...\n"
+
+#. Do not try to guess the name of the png file,
+#. GS produces PNG files like BASE-page%d.png.
+#: backend-library.scm:102
+#, scheme-format
+msgid "Converting to ~a..."
+msgstr "S'està convertint a ~a..."
+
+#: backend-library.scm:140
+#, scheme-format
+msgid "Writing header field `~a' to `~a'..."
+msgstr "S'està escrivint el camp de capçalera `~a' a `~a'..."
+
+#: backend-library.scm:189
+#, scheme-format
+msgid "missing stencil expression `~S'"
+msgstr "manca l'expressió de plantilla `~S'"
+
+#: bar-line.scm:133
+#, scheme-format
+msgid "Bar glyph ~a not known. Ignoring."
+msgstr "Glif de barra ~a desconegut. S'ignorarà."
+
+#: bar-line.scm:161
+#, scheme-format
+msgid "Annotation '~a' is allowed in the first argument of a bar line definition only."
+msgstr "Es permet l'anotació '~a' al primer argument d'una definició de línia de barra"
+
+#: bar-line.scm:169
+#, scheme-format
+msgid "Replacement '~a' is allowed in the last argument of a bar line definition only."
+msgstr "Es permet el reemplaçament '~a' a l'últim argument d'una definició de línia de barra"
+
+#: bar-line.scm:230
+#, scheme-format
+msgid "add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character."
+msgstr "add-bar-glyph-print-procedure: el glif '~a' ha de ser un caràcter ASCII únic."
+
+#: bar-line.scm:795
+#, scheme-format
+msgid "No span bar glyph defined for bar glyph '~a'; ignoring."
+msgstr "No s'ha definit un glif d'expansió de barra per al glif de barra '~a'; s'ignorarà."
+
+#: chord-entry.scm:52
+#, scheme-format
+msgid "Spurious garbage following chord: ~A"
+msgstr "Hi ha brossa espúria després d'un acord: ~A"
+
+#: define-context-properties.scm:31 define-grob-properties.scm:21
+#: define-music-properties.scm:21
+#, scheme-format
+msgid "symbol ~S redefined"
+msgstr "s'ha redefinit el símbol ~S"
+
+#: define-event-classes.scm:73
+#, scheme-format
+msgid "unknown parent class `~a'"
+msgstr "classe pare desconeguda `~a'"
+
+#: define-event-classes.scm:107
+#, scheme-format
+msgid "Cannot redefine event class `~S'"
+msgstr "No es pot redefenir la classe d'esdeveniment `~S'"
+
+#: define-event-classes.scm:109
+#, scheme-format
+msgid "Undefined parent event class `~S'"
+msgstr "Classe pare d'esdeveniment no definica `~S'"
+
+#: define-markup-commands.scm:1083
+msgid "no systems found in \\score markup, does it have a \\layout block?"
+msgstr "no s'han trobat sistemes al marcat \\score, té un bloc \\layout?"
+
+#: define-markup-commands.scm:2847
+#, scheme-format
+msgid "Cannot find glyph ~a"
+msgstr "No es pot trobar l'element gràfic ~a"
+
+#: define-markup-commands.scm:3273
+#, scheme-format
+msgid "no brace found for point size ~S "
+msgstr "no s'ha trobat una clau per a la dimensió de punt ~S"
+
+#: define-markup-commands.scm:3274
+#, scheme-format
+msgid "defaulting to ~S pt"
+msgstr "es torna al valor predeterminat de ~S pt"
+
+#: define-markup-commands.scm:3526
+#, scheme-format
+msgid "not a valid duration string: ~a"
+msgstr "no és una cadena de caràcters de duració vàlida: ~a"
+
+#: define-markup-commands.scm:3737
+#, scheme-format
+msgid "not a valid duration string: ~a - ignoring"
+msgstr "no és una cadena de caràcters de duració vàlida: ~a - s'ignorarà"
+
+#: define-music-types.scm:792
+#, scheme-format
+msgid "symbol expected: ~S"
+msgstr "s'esperava un símbol: ~S"
+
+#: define-music-types.scm:795
+#, scheme-format
+msgid "cannot find music object: ~S"
+msgstr "no es pot trobar l'objecte de música: ~S"
+
+#: define-music-types.scm:815
+#, scheme-format
+msgid "bad make-music argument: ~S"
+msgstr "argument de fer música incorrecte: ~S"
+
+#: define-music-types.scm:827
+#, scheme-format
+msgid "unknown repeat type `~S'"
+msgstr "tipus de repetició desconegut `~S'"
+
+#: define-music-types.scm:828
+msgid "See define-music-types.scm for supported repeats"
+msgstr "Vegeu define-music-types.scm per a repeticions suportades"
+
+#: define-note-names.scm:972
+msgid "Select note names language."
+msgstr "Seleccioneu l'idioma dels noms de les notes."
+
+#: define-note-names.scm:978
+#, scheme-format
+msgid "Using `~a' note names..."
+msgstr "S'estan usant els noms de notes `~a'..."
+
+#: define-note-names.scm:981
+#, scheme-format
+msgid "Could not find language `~a'.  Ignoring."
+msgstr "No s'ha pogut trobar l'idioma `~a'. S'ignorarà."
+
+#: document-backend.scm:132
+#, scheme-format
+msgid "pair expected in doc ~s"
+msgstr "s'esperava un parell al document ~s"
+
+#: document-backend.scm:189
+#, scheme-format
+msgid "cannot find interface for property: ~S"
+msgstr "no es pot trobar una interfície per a la propietat: ~S"
+
+#: document-backend.scm:199
+#, scheme-format
+msgid "unknown Grob interface: ~S"
+msgstr "interfície Grob desconeguda: ~S"
+
+#: documentation-lib.scm:59
+#, scheme-format
+msgid "Processing ~S..."
+msgstr "S'està processant ~S..."
+
+#: documentation-lib.scm:176
+#, scheme-format
+msgid "Writing ~S..."
+msgstr "S'està escrivint ~S..."
+
+#: documentation-lib.scm:188
+#, scheme-format
+msgid "cannot find description for property `~S' (~S)"
+msgstr "no es pot trobar una descripció per a la propietat `~S' (~S)"
+
+#: documentation-lib.scm:209
+#, scheme-format
+msgid "cannot find description for property ~S (~S)"
+msgstr "no es pot trobar una descripció per a la propietat ~S (~S)"
+
+#: flag-styles.scm:162
+#, scheme-format
+msgid "flag stroke `~a' or `~a' not found"
+msgstr "no s'ha trobat l'indicador de contorn `~a' o `~a'"
+
+#: framework-eps.scm:108
+#, scheme-format
+msgid "Writing ~a..."
+msgstr "S'està escrivint ~a..."
+
+#: framework-ps.scm:250
+#, scheme-format
+msgid "cannot embed ~S=~S"
+msgstr "no es pot incloure ~S=~S"
+
+#: framework-ps.scm:293
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
+msgstr "no es pot extraure el fitxer que faci coincidir ~a de ~a"
+
+#: framework-ps.scm:311
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
+msgstr "no hi ha prou informació per incloure ~S=~S"
+
+#: framework-ps.scm:336
+#, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
+msgstr "no hi ha prou informació per incloure el tipus de lletra ~s ~s ~s"
+
+#: framework-ps.scm:687
+msgid ""
+"\n"
+"The PostScript backend does not support the\n"
+"system-by-system output.  For that, use the EPS backend instead,\n"
+"\n"
+"  lilypond -dbackend=eps FILE\n"
+"\n"
+"If have cut & pasted a lilypond fragment from a webpage, be sure\n"
+"to only remove anything before\n"
+"\n"
+"  %% ****************************************************************\n"
+"  %% Start cut-&-pastable-section\n"
+"  %% ****************************************************************\n"
+msgstr ""
+"\n"
+"El dorsal PostScript no dóna suport a sortida de\n"
+"sistema per sistema. Per això, useu en canvi el dorsal EPS,\n"
+"\n"
+"  lilypond -dbackend=eps FITXER\n"
+"\n"
+"Si heu tallat i enganxat un fragment d'una pàgina web, assegureu-vos\n"
+"d'eliminar únicament tot abans de\n"
+"\n"
+"  %% ****************************************************************\n"
+"  %% Start cut-&-pastable-section\n"
+"  %% ****************************************************************\n"
+
+#: framework-svg.scm:84
+#, scheme-format
+msgid "Updating font into: ~a"
+msgstr "S'està actualitzant el tipus de lletra a: ~a"
+
+#: graphviz.scm:64
+#, scheme-format
+msgid "Writing graph `~a'..."
+msgstr "S'està escrivint el gràfic `~a'..."
+
+#: layout-beam.scm:40
+#, scheme-format
+msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
+msgstr "Error a quantificació de barres. S'esperava (~S, ~S), s'ha trobat ~S."
+
+#: layout-beam.scm:54
+#, scheme-format
+msgid "Error in beam quanting.  Expected ~S 0, found ~S."
+msgstr "Error a quantificació de barres. S'esperava ~S 0, s'ha trobat ~S."
+
+#: lily-library.scm:333
+msgid "Music unsuitable for context-mod"
+msgstr "La música no és apropiada per a context-mod"
+
+#: lily-library.scm:388
+#, scheme-format
+msgid "Cannot find context-def \\~a"
+msgstr "No es pot trobar el context-def \\~a"
+
+#: lily-library.scm:404
+msgid "Music unsuitable for output-def"
+msgstr "La música no és apropiada per a output-def"
+
+#: lily-library.scm:884
+msgid ""
+"Find the index between @var{start} and @var{end} (an integer)\n"
+"which produces the closest match to @var{target-val} if\n"
+"applied to function @var{getter}."
+msgstr ""
+"Troba l'índex entre @var{start} i @var{end} (un nombre enter)\n"
+"que produeix la coincidència més propera a @var{target-val} si\n"
+"s'aplica a la funció @var{getter}."
+
+#: lily-library.scm:955
+#, scheme-format
+msgid "unknown unit: ~S"
+msgstr "unitat desconeguda: ~S"
+
+#: lily-library.scm:980
+#, scheme-format
+msgid "no \\version statement found, please add~afor future compatibility"
+msgstr "no s'ha trobat la declaració \\version, sisplau afegiu ~a per a compatibilitat futura"
+
+#: lily.scm:75
+msgid "call-after-session used after session start"
+msgstr "s'ha usat call-after-session després de l'inici de la sessió"
+
+#: lily.scm:93
+msgid "define-session used after session start"
+msgstr "s'ha usat define-session després de l'inici de la sessió"
+
+#: lily.scm:393
+msgid "Using (ice-9 curried-definitions) module\n"
+msgstr "Usant el mòdul (ice-9 curried-definitions)\n"
+
+#: lily.scm:396
+msgid "Guile 1.8\n"
+msgstr "Guile 1.8\n"
+
+#: lily.scm:455
+#, scheme-format
+msgid "cannot find: ~A"
+msgstr "no es pot trobar ~A"
+
+#: lily.scm:878
+msgid "Success: compilation successfully completed"
+msgstr "Èxit: s'ha completat amb èxit la compilació"
+
+#: lily.scm:879
+msgid "Compilation completed with warnings or errors"
+msgstr "La compilació s'ha completat amb advertiments i errors"
+
+#: lily.scm:940
+#, scheme-format
+msgid "job ~a terminated with signal: ~a"
+msgstr "la tasca ~a ha acabat amb senyal: ~a"
+
+#: lily.scm:943
+#, scheme-format
+msgid ""
+"logfile ~a (exit ~a):\n"
+"~a"
+msgstr ""
+"fitxer de registre ~a (sortida ~a):\n"
+"~a"
+
+#: lily.scm:965 lily.scm:1054
+#, scheme-format
+msgid "failed files: ~S"
+msgstr "fitxers que han fallat: ~S"
+
+#: lily.scm:1045
+#, scheme-format
+msgid "Redirecting output to ~a..."
+msgstr "S'està redirigint la sortida a ~a..."
+
+#: lily.scm:1064 ps-to-png.scm:66
+#, scheme-format
+msgid "Invoking `~a'...\n"
+msgstr "S'està invocant `~a'...\n"
+
+#: ly-syntax-constructors.scm:66
+#, scheme-format
+msgid "~a function cannot return ~a"
+msgstr "la funció ~a no pot retornar ~a"
+
+#: ly-syntax-constructors.scm:75
+#, scheme-format
+msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
+msgstr "tipus incorrecte per a l'argument ~a. S'esperava ~a, s'ha trobat ~s"
+
+#: ly-syntax-constructors.scm:199
+#, scheme-format
+msgid "Invalid property operation ~a"
+msgstr "Operació de propietat invàlida ~a"
+
+#: markup-macros.scm:331
+#, scheme-format
+msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
+msgstr "Nombre incorrecte d'arguments. S'esperava: ~A, s'ha trobat ~A: ~S"
+
+#: markup-macros.scm:337
+#, scheme-format
+msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
+msgstr "Argument invàlid a la posició ~A. S'esperava: ~A, s'ha trobat: ~S."
+
+#: markup-macros.scm:373
+#, scheme-format
+msgid "Not a markup command: ~A"
+msgstr "No és una ordre de marcat: ~A"
+
+#: modal-transforms.scm:38
+msgid "'from' pitch not in scale; ignoring"
+msgstr "la tonalitat 'from' no està a l'escala; s'ignorarà"
+
+#: modal-transforms.scm:42 modal-transforms.scm:75
+msgid "'to' pitch not in scale; ignoring"
+msgstr "la tonalitat 'to' no està a l'escala; s'ignorarà"
+
+#: modal-transforms.scm:46
+msgid "pitch to be transposed not in scale; ignoring"
+msgstr "la tonalitat a transposar no està a l'escala; s'ignorarà"
+
+#: modal-transforms.scm:71
+msgid "'around' pitch not in scale; ignoring"
+msgstr "la tonalitat 'around' no està a l'escala; s'ignorarà"
+
+#: modal-transforms.scm:79
+msgid "pitch to be inverted not in scale; ignoring"
+msgstr "la tonalitat a invertir no està a l'escala; s'ignorarà"
+
+#: modal-transforms.scm:95
+msgid "negative replication count; ignoring"
+msgstr "nombre negatiu de replicacions; s'ignorarà"
+
+#: music-functions.scm:272
+msgid "More alternatives than repeats.  Junking excess alternatives"
+msgstr "Hi ha més alternatives que repeticions. S'eliminaran les alternatives excessives"
+
+#: music-functions.scm:303
+#, scheme-format
+msgid "invalid tremolo repeat count: ~a"
+msgstr "nombre de repeticions de trèmolo invàlid: ~a"
+
+#: music-functions.scm:459
+#, scheme-format
+msgid "bad grob property path ~a"
+msgstr "Operació de propietat d'element gràfic invàlida ~a"
+
+#: music-functions.scm:753
+msgid "Bad chord repetition"
+msgstr "Repetició d'acord incorrecte"
+
+#: music-functions.scm:788
+#, scheme-format
+msgid "music expected: ~S"
+msgstr "s'esperaven notes: ~S"
+
+#: music-functions.scm:1144
+#, scheme-format
+msgid "cannot find quoted music: `~S'"
+msgstr "no es poden trobar les notes citades: `~S'"
+
+#: music-functions.scm:1282
+msgid "Add @var{octave-shift} to the octave of @var{pitch}."
+msgstr "Afegeix @var{octave-shift} a l'octava de @var{pitch}."
+
+#: music-functions.scm:1342
+#, scheme-format
+msgid "Unknown octaveness type: ~S "
+msgstr "Tipus d'octavació desconegut: ~S "
+
+#: music-functions.scm:1343
+msgid "Defaulting to 'any-octave."
+msgstr "Es revertirà per defecte a 'any-octave'."
+
+#: music-functions.scm:1688
+#, scheme-format
+msgid "unknown accidental style: ~S"
+msgstr "estil desconegut d'accidents: ~S"
+
+#: output-ps.scm:278 output-svg.scm:539
+#, scheme-format
+msgid "unknown line-cap-style: ~S"
+msgstr "line-join-style desconegut: ~S"
+
+#: output-ps.scm:283 output-svg.scm:545
+#, scheme-format
+msgid "unknown line-join-style: ~S"
+msgstr "line-join-style desconegut: ~S"
+
+#: output-svg.scm:148
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
+msgstr "no es pot desxifrar la descripció Pango: ~a"
+
+#: output-svg.scm:228
+msgid "Glyph must have a unicode value"
+msgstr "L'element gràfic ha de tenir un valor unicode"
+
+#: output-svg.scm:280 output-svg.scm:290
+#, scheme-format
+msgid "cannot find SVG font ~S"
+msgstr "No es pot trobar el tipus de lletra SVG ~S"
+
+#: paper.scm:120
+msgid "set-global-staff-size: not in toplevel scope"
+msgstr "set-global-staff-size: no a l'àmbit de nivell superior"
+
+#: paper.scm:320
+#, scheme-format
+msgid "This is not a \\layout {} object, ~S"
+msgstr "Aquest no és un objecte \\layout {}, ~S"
+
+#: paper.scm:328
+#, scheme-format
+msgid "Unknown paper size: ~a"
+msgstr "Dimensió de paper desconegut: ~a"
+
+#. TODO: should raise (generic) exception with throw, and catch
+#. that in parse-scm.cc
+#: paper.scm:347
+msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
+msgstr "S'ha d'usar #(set-paper-size .. ) dins de \\paper { ... }"
+
+#: parser-clef.scm:164
+#, scheme-format
+msgid "unknown clef type `~a'"
+msgstr "tipus de clau desconegut `~a'"
+
+#: parser-clef.scm:165
+#, scheme-format
+msgid "supported clefs: ~a"
+msgstr "claus suportades: ~a"
+
+#: parser-ly-from-scheme.scm:74
+msgid "error in #{ ... #}"
+msgstr "error a #{ ... #}"
+
+#: part-combiner.scm:598
+#, scheme-format
+msgid "quoted music `~a' is empty"
+msgstr "les notes citades `~a' estan buides"
+
+#: ps-to-png.scm:70
+#, scheme-format
+msgid "~a exited with status: ~S"
+msgstr "~a ha sortit amb estat: ~S"
+
+#: to-xml.scm:190
+#, scheme-format
+msgid "assertion failed: ~S"
+msgstr "ha fallat la declaració: ~S"
+
+#: translation-functions.scm:368
+#, scheme-format
+msgid "Negative fret for pitch ~a on string ~a"
+msgstr "Trast negatiu per a la tonalitat ~a a la corda ~a"
+
+#: translation-functions.scm:371
+#, scheme-format
+msgid "Missing fret for pitch ~a on string ~a"
+msgstr "Falta el trast per a la tonalitat ~a a la corda ~a"
+
+#: translation-functions.scm:414
+#, scheme-format
+msgid "No open string for pitch ~a"
+msgstr "No hi ha una corda oberta per a la tonalitat ~a"
+
+#: translation-functions.scm:429 translation-functions.scm:441
+#, scheme-format
+msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
+msgstr "La corda demanada per a la tonalitat requereix un trast negatiu: corda ~a tonalitat ~a"
+
+#: translation-functions.scm:432
+msgid "Ignoring string request and recalculating."
+msgstr "S'està ignorant la corda demanada i s'està recalculant"
+
+#: translation-functions.scm:444
+msgid "Ignoring note in tablature."
+msgstr "S'ignorarà la nota a la tablatura"
+
+#: translation-functions.scm:469
+#, scheme-format
+msgid "No string for pitch ~a (given frets ~a)"
+msgstr "No hi ha una corda per a la tonalitat ~a (donats els frets ~a)"
+
+#: translation-functions.scm:574
+#, scheme-format
+msgid ""
+"No label for fret ~a (on string ~a);\n"
+"only ~a fret labels provided"
+msgstr ""
+"No hi ha una etiqueta per al trast ~a (a la corda ~a);\n"
+"sols s'han proveït ~a etiquetes de trast"
+
+#~ msgid "cannot find start of (de)crescendo"
+#~ msgstr "no es pot trobar l'inici del (de)crescendo"
+
+#~ msgid "already have a decrescendo"
+#~ msgstr "ja hi ha un decrescendo"
+
+#~ msgid "already have a crescendo"
+#~ msgstr "ja hi ha un crescendo"
+
+#~ msgid "cresc starts here"
+#~ msgstr "el crescendo comença aquí"
+
+#~ msgid "unterminated (de)crescendo"
+#~ msgstr "(de)crescendo sense terminar"
+
+#~ msgid "unterminated phrasing slur"
+#~ msgstr "lligadura de frase sense acabar"
+
+#~ msgid "cannot end phrasing slur"
+#~ msgstr "no es pot finalitzar la lligadura de frase"
+
+#~ msgid "already have phrasing slur"
+#~ msgstr "ja hi ha una lligadura de frase"
+
+#~ msgid "unterminated slur"
+#~ msgstr "lligadura sense terminar "
+
+#~ msgid "old relative compatibility not used"
+#~ msgstr "no s'ha usat la compatibilitat relativa antiga"
+
+#~ msgid "undefined: ~S"
+#~ msgstr "sense definir: ~S"
+
+#~ msgid "Line spanner's left point is to the right of its right point."
+#~ msgstr "L'expansor esquerre de línia està a la dreta del seu punt dret."
+
+#~ msgid "Grob name should be alphanumeric"
+#~ msgstr "El nom de l'object gràfic hauria de ser alfanumèric"
+
+#~ msgid "Brace found at end of lyric.  Did you forget a space?"
+#~ msgstr "S'ha trobat una clau al final del marcat. Heu oblidat un espai?"
+
+#~ msgid "Brace found at end of markup.  Did you forget a space?"
+#~ msgstr "S'ha trobat una clau al final del marcat. Heu oblidat un espai?"
index 91e6aff463cacafba5af5aa21f9553e276ab09e0..7abaa3a906421d007d27e35d9be44119dbb7ce40 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -6,10 +6,10 @@
 # Pavel Fric <pavelfric@seznam.cz>, 2009-2010, 2011, 2012.
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.15.37\n"
-"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
+"Project-Id-Version: lilypond 2.15.37.1\n"
+"Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2012-04-21 20:51+0200\n"
-"PO-Revision-Date: 2012-05-28 20:01+0200\n"
+"PO-Revision-Date: 2012-05-28 14:41+0200\n"
 "Last-Translator: Pavel Fric <pavelfric@seznam.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
 "Language: cs\n"
index 81fc38df62692d2287744180fa0820c236d9790f..bc35d60622516a2d82a6291ddcfea47ae2e88e78 100644 (file)
--- a/po/da.po
+++ b/po/da.po
 msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 1.6.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-12-24 10:40+0100\n"
-"PO-Revision-Date: 2006-12-23 16:14+0100\n"
+"POT-Creation-Date: 2002-08-18 17:05+0200\n"
+"PO-Revision-Date: 2003-01-17 21:00+0200\n"
 "Last-Translator: Keld Simonsen <keld@dkuug.dk>\n"
 "Language-Team: Danish <dansk@klid.dk>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: convertrules.py:12
-#, python-format
-msgid "Not smart enough to convert %s"
-msgstr ""
-
-#: convertrules.py:13
-msgid "Please refer to the manual for details, and update manually."
-msgstr ""
-
-#: convertrules.py:14
-#, python-format
-msgid "%s has been replaced by %s"
-msgstr ""
-
-#: convertrules.py:2398
-msgid "LilyPond source must be UTF-8"
-msgstr ""
-
-#: convertrules.py:2401
-msgid "Try the texstrings backend"
-msgstr ""
-
-#: convertrules.py:2404
-#, python-format
-msgid "Do something like: %s"
-msgstr ""
-
-#: convertrules.py:2407
-msgid "Or save as UTF-8 in your editor"
-msgstr ""
-
-#: fontextract.py:26
-#, fuzzy, python-format
-msgid "Scanning %s"
-msgstr "advarsel: %s\n"
-
-#: fontextract.py:71
-#, python-format
-msgid "Extracted %s"
-msgstr ""
-
-#: fontextract.py:86
-#, fuzzy, python-format
-msgid "Writing fonts to %s"
-msgstr "kan ikke oprette katalog: \"%s\""
-
-#: lilylib.py:85 lilylib.py:136
-#, python-format
-msgid "Invoking `%s'"
-msgstr "Starter \"%s\""
-
-#: lilylib.py:87 lilylib.py:138
-#, python-format
+#: lilypond-book.py:1019 ly2dvi.py:458 ly2dvi.py:491
+#, c-format
 msgid "Running %s..."
 msgstr "Kør %s..."
 
-#: lilylib.py:203
-#, fuzzy, python-format
-msgid "Usage: %s"
-msgstr "advarsel: %s\n"
+#: ly2dvi.py:118
+msgid "Distributed under terms of the GNU General Public License.  It comes with NO WARRANTY."
+msgstr "Distribueret under betingelserne i GNU Generelle Offentlige Licens (GLP). Den leveres UDEN NOGEN GARANTIER."
 
-#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
-#, fuzzy, python-format
-msgid "%s [OPTION]... FILE"
-msgstr "Brug: %s [FLAG]... FIL"
+#: ly2dvi.py:125 midi2ly.py:148 mup2ly.py:143 update-lily.py:137 input.cc:87
+msgid "warning: "
+msgstr "advarsel: "
 
-#: abc2ly.py:1351
-#, python-format
-msgid ""
-"abc2ly converts ABC music files (see\n"
-"%s) to LilyPond input."
-msgstr ""
+#: ly2dvi.py:128 ly2dvi.py:143 midi2ly.py:163 midi2ly.py:1012 midi2ly.py:1081
+#: mup2ly.py:146 mup2ly.py:160 update-lily.py:152 update-lily.py:458
+#: input.cc:92
+msgid "error: "
+msgstr "fejl: "
 
-#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "skriv uddata til FIL"
+#: ly2dvi.py:144 midi2ly.py:164 mup2ly.py:161 update-lily.py:153
+msgid "Exiting ... "
+msgstr "Afslutter... "
 
-#: abc2ly.py:1357
-msgid "be strict about succes"
-msgstr ""
+#: ly2dvi.py:202 midi2ly.py:222 mup2ly.py:219 update-lily.py:211
+#, c-format
+msgid "Usage: %s [OPTION]... FILE"
+msgstr "Brug: %s [FLAG]... FIL"
 
-#: abc2ly.py:1359
-msgid "preserve ABC's notion of beams"
-msgstr ""
+#: ly2dvi.py:206 midi2ly.py:226 mup2ly.py:223 update-lily.py:215 main.cc:166
+msgid "Options:"
+msgstr "Flag:"
 
-#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
-#: midi2ly.py:911 musicxml2ly.py:505
-#, fuzzy
-msgid "Report bugs via"
+#: ly2dvi.py:210 midi2ly.py:230 mup2ly.py:227 update-lily.py:219 main.cc:172
+#, c-format
+msgid "Report bugs to %s"
 msgstr ""
 "Rapportér programfejl til %s\n"
-".Rapportér fejl i oversættelsen til <dansk@klid.dk>."
-
-#: convert-ly.py:41
-msgid ""
-"Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version."
-msgstr ""
-
-#: convert-ly.py:43 lilypond-book.py:73
-#, fuzzy
-msgid "Examples:"
-msgstr "Eksempel:"
-
-#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
-#, fuzzy, c-format, python-format
-msgid "warning: %s"
-msgstr "advarsel: %s\n"
-
-#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
-#, fuzzy, c-format, python-format
-msgid "error: %s"
-msgstr "fejl: %s\n"
-
-#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
-msgid "Distributed under terms of the GNU General Public License."
-msgstr ""
+"Rapportér fejl i oversættelsen til <dansk@klid.dk>"
 
-#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
-msgid "It comes with NO WARRANTY."
-msgstr ""
-
-#: convert-ly.py:86 convert-ly.py:106
-msgid "VERSION"
-msgstr ""
-
-#: convert-ly.py:88
-msgid "start from VERSION [default: \\version found in file]"
-msgstr ""
-
-#: convert-ly.py:91
-msgid "edit in place"
-msgstr ""
+#: ly2dvi.py:238 midi2ly.py:258 mup2ly.py:255 update-lily.py:247
+#, c-format
+msgid "Invoking `%s'"
+msgstr "Starter \"%s\""
 
-#: convert-ly.py:94
-msgid "do not add \\version command if missing"
-msgstr ""
+#: ly2dvi.py:243 midi2ly.py:262 mup2ly.py:260 update-lily.py:251
+#, c-format
+msgid "command exited with value %d"
+msgstr "kommandoen afsluttede med værdi %d"
 
-#: convert-ly.py:100
-msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
-msgstr ""
+#: ly2dvi.py:246 midi2ly.py:264 mup2ly.py:263 update-lily.py:253
+msgid "(ignored)"
+msgstr "(ignoreret)"
 
-#: convert-ly.py:105
-msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
-msgstr ""
+# hær er det spørg om rensning af en temporærkatalog
+#: ly2dvi.py:256 midi2ly.py:274 mup2ly.py:273 update-lily.py:263
+#, c-format
+msgid "Cleaning %s..."
+msgstr "Renser %s..."
 
-#: convert-ly.py:153
-msgid "Applying conversion: "
+#: ly2dvi.py:330
+msgid "Run LilyPond using LaTeX for titling"
 msgstr ""
 
-#: convert-ly.py:166
-msgid "Error while converting"
-msgstr ""
+#: ly2dvi.py:334 main.cc:115
+msgid "write Makefile dependencies for every input file"
+msgstr "skriv Makefile-afhængigheder for hver inddatafil"
 
-#: convert-ly.py:168
-msgid "Stopping at last succesful rule"
-msgstr ""
+# forklaring af flag -h
+#: ly2dvi.py:335 midi2ly.py:98 mup2ly.py:74 update-lily.py:87 main.cc:111
+msgid "this help"
+msgstr "denne hjælp"
 
-#: convert-ly.py:190
-#, fuzzy, python-format
-msgid "Processing `%s'... "
-msgstr "Behandler \"%s\"..."
+#: ly2dvi.py:336 main.cc:113 main.cc:118
+msgid "DIR"
+msgstr "KATALOG"
 
-#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
-#, c-format, python-format
-msgid "cannot open file: `%s'"
-msgstr "kan ikke åbne fil: \"%s\""
+#: ly2dvi.py:336
+msgid "add DIR to LilyPond's search path"
+msgstr "tilføj KATALOG til LilyPonds søgesti"
 
-#: convert-ly.py:284
-#, fuzzy, python-format
-msgid "cannot determine version for `%s'.  Skipping"
-msgstr "kan ikke finde standardskrifttype: \"%s\""
+# %s er programmets navn
+#: ly2dvi.py:338
+#, c-format
+msgid "keep all output, output to directory %s.dir"
+msgstr "behold al uddata, udskrivo i kataloget %s.dir"
 
-#: etf2ly.py:1196
-#, fuzzy, python-format
-msgid "%s [OPTION]... ETF-FILE"
-msgstr "Brug: %s [FLAG]... FIL"
+#: ly2dvi.py:339
+msgid "don't run LilyPond"
+msgstr "kør ikke LilyPond"
 
-#: etf2ly.py:1198
-msgid ""
-"Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
-"file."
-msgstr ""
+#: ly2dvi.py:340 main.cc:116
+msgid "produce MIDI output only"
+msgstr "lav kun MIDI-uddata"
 
-#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
+#: ly2dvi.py:341 ly2dvi.py:342 midi2ly.py:100 main.cc:114 main.cc:117
 msgid "FILE"
 msgstr "FIL"
 
-#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
-msgid "show warranty and copyright"
-msgstr "vis garanti og copyright"
-
-#: lilypond-book.py:71
-msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
-msgstr ""
-
-#: lilypond-book.py:78
-msgid "BOOK"
-msgstr ""
-
-#: lilypond-book.py:87
-#, fuzzy, python-format
-msgid "Exiting (%d)..."
-msgstr "Afslutter... "
-
-#: lilypond-book.py:119
-#, python-format
-msgid "Copyright (c) %s by"
-msgstr "Copyright © %s af"
-
-#: lilypond-book.py:129
-#, fuzzy
-msgid "FILTER"
-msgstr "FIL"
+#: ly2dvi.py:341 midi2ly.py:100
+msgid "write ouput to FILE"
+msgstr "skriv uddata til FIL"
 
-#: lilypond-book.py:132
-msgid "pipe snippets through FILTER [convert-ly -n -]"
-msgstr ""
+#: ly2dvi.py:342
+msgid "find pfa fonts used in FILE"
+msgstr "find pfa-skrifttyper brugt i FIL"
 
-#: lilypond-book.py:135
-msgid ""
-"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
+#: ly2dvi.py:344
+msgid "set the resolution of the preview to RES"
 msgstr ""
 
-#: lilypond-book.py:138
-#, fuzzy
-msgid "add DIR to include path"
-msgstr "tilføj KATALOG til søgestien"
-
-#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
-msgid "DIR"
-msgstr "KATALOG"
+#: ly2dvi.py:345
+msgid "generate PostScript output"
+msgstr "lav PostScript-uddata"
 
-#: lilypond-book.py:143
-#, fuzzy
-msgid "write output to DIR"
-msgstr "skriv uddata til FIL"
+#: ly2dvi.py:346
+msgid "generate PDF output"
+msgstr "lav PDF-uddata"
 
-#: lilypond-book.py:147
-msgid "COMMAND"
+#: ly2dvi.py:347
+msgid "use pdflatex to generate a PDF output"
 msgstr ""
 
-#: lilypond-book.py:148
-msgid "process ly_files using COMMAND FILE..."
+#: ly2dvi.py:349
+msgid "make a picture of the first system"
 msgstr ""
 
-#: lilypond-book.py:154
-msgid "Create PDF files for use with PDFTeX"
-msgstr ""
+#: ly2dvi.py:350
+msgid "KEY=VAL"
+msgstr "NØGLE=VÆRDI"
 
-#: lilypond-book.py:157
-msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
-"must use this with dvips -h INPUT.psfonts"
-msgstr ""
+#: ly2dvi.py:350
+msgid "change global setting KEY to VAL"
+msgstr "ændr global indstilling NØGLE til VÆRDI"
 
 # Førklaring til --verbose (borde være længre)
-#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
-msgid "be verbose"
-msgstr "vær udførlig"
+#: ly2dvi.py:351 midi2ly.py:103 mup2ly.py:77 update-lily.py:91 main.cc:126
+msgid "verbose"
+msgstr "udførlig uddata"
 
-#: lilypond-book.py:773
-#, fuzzy, python-format
-msgid "file not found: %s"
-msgstr "Symbol ikke fundet, "
+#: ly2dvi.py:352 midi2ly.py:104 mup2ly.py:78 update-lily.py:92 main.cc:125
+msgid "print version number"
+msgstr "vis versionsnummer"
 
-#: lilypond-book.py:1004
-#, python-format
-msgid "deprecated ly-option used: %s=%s"
-msgstr ""
+#: ly2dvi.py:353 midi2ly.py:105 mup2ly.py:79 update-lily.py:94 main.cc:127
+msgid "show warranty and copyright"
+msgstr "vis garanti og copyright"
 
-#: lilypond-book.py:1007
-#, python-format
-msgid "compatibility mode translation: %s=%s"
-msgstr ""
+#: ly2dvi.py:448
+#, c-format
+msgid "no such setting: `%s'"
+msgstr "indstillingen findes ikke: '%s'"
 
-#: lilypond-book.py:1011
-#, python-format
-msgid "deprecated ly-option used: %s"
-msgstr ""
+#: ly2dvi.py:508
+#, c-format
+msgid "LilyPond crashed (signal %d)."
+msgstr "LilyPond gik ned (signal %d)."
 
-#: lilypond-book.py:1014
-#, python-format
-msgid "compatibility mode translation: %s"
+#: ly2dvi.py:509
+msgid "Please submit a bug report to bug-lilypond@gnu.org"
 msgstr ""
 
-#: lilypond-book.py:1033
-#, python-format
-msgid "ignoring unknown ly option: %s"
+#: ly2dvi.py:513
+#, c-format
+msgid "LilyPond failed on the input file (exit status %d)."
 msgstr ""
 
-#: lilypond-book.py:1388
-#, fuzzy, python-format
-msgid "Opening filter `%s'"
-msgstr "Renser \"%s\"..."
+#: ly2dvi.py:522
+#, c-format
+msgid "Analyzing %s..."
+msgstr "Analyserer %s..."
 
-#: lilypond-book.py:1405
-#, python-format
-msgid "`%s' failed (%d)"
-msgstr ""
+#: ly2dvi.py:578
+#, c-format
+msgid "no LilyPond output found for `%s'"
+msgstr "ingen lilyponduddata fundet for '%s'"
 
-#: lilypond-book.py:1406
-msgid "The error log is as follows:"
-msgstr ""
+#: ly2dvi.py:618
+#, c-format
+msgid "invalid value: `%s'"
+msgstr "ugyldig værdi: '%s'"
 
-#: lilypond-book.py:1476
-msgid "cannot find \\begin{document} in LaTeX document"
+#: ly2dvi.py:724
+msgid "LaTeX failed on the output file."
 msgstr ""
 
-#: lilypond-book.py:1586
-#, fuzzy
-msgid "Writing snippets..."
-msgstr "Skriver \"%s\"..."
-
-#: lilypond-book.py:1591
-#, fuzzy
-msgid "Processing..."
-msgstr "Behandler..."
-
-#: lilypond-book.py:1595
-#, fuzzy
-msgid "All snippets are up to date..."
-msgstr "slap af, %s er seneste version"
-
-#: lilypond-book.py:1605
-#, fuzzy, python-format
-msgid "cannot determine format for: %s"
-msgstr "kan ikke finde standardskrifttype: \"%s\""
-
-#: lilypond-book.py:1616
-#, fuzzy, python-format
-msgid "%s is up to date."
-msgstr "slap af, %s er seneste version"
-
-#: lilypond-book.py:1622
-#, python-format
-msgid "Writing `%s'..."
-msgstr "Skriver \"%s\"..."
-
-#: lilypond-book.py:1677
-msgid "Output would overwrite input file; use --output."
+#: ly2dvi.py:726
+msgid "The error log is as follows:"
 msgstr ""
 
-# hær er det spørg om rensning af en temporærkatalog
-#: lilypond-book.py:1681
-#, fuzzy, python-format
-msgid "Reading %s..."
-msgstr "Renser %s..."
-
-#: lilypond-book.py:1700
-#, fuzzy
-msgid "Dissecting..."
-msgstr "Lister \"%s\"..."
-
-# hær er det spørg om rensning af en temporærkatalog
-#: lilypond-book.py:1716
-#, fuzzy, python-format
-msgid "Compiling %s..."
-msgstr "Renser %s..."
-
-#: lilypond-book.py:1725
-#, fuzzy, python-format
-msgid "Processing include: %s"
-msgstr "Behandler \"%s\"..."
-
-#: lilypond-book.py:1739
-#, fuzzy, python-format
-msgid "Removing `%s'"
-msgstr "Starter \"%s\""
-
-#: lilypond-book.py:1815
-#, fuzzy, python-format
-msgid "Writing fonts to %s..."
-msgstr "kan ikke oprette katalog: \"%s\""
+#: ly2dvi.py:849
+#, c-format
+msgid "not a PostScript file: `%s'"
+msgstr "ikke en PostScript fil: '%s'"
 
-#: lilypond-book.py:1830
-msgid "option --psfonts not used"
-msgstr ""
+#: ly2dvi.py:865 midi2ly.py:1012 update-lily.py:458
+#, c-format
+msgid "getopt says: `%s'"
+msgstr "getopt siger: '%s'"
 
-#: lilypond-book.py:1831
-msgid "processing with dvips will have no fonts"
+#: ly2dvi.py:948
+msgid "pseudo filter"
 msgstr ""
 
-#: lilypond-book.py:1834
-msgid "DVIPS usage:"
+#: ly2dvi.py:951
+msgid "pseudo filter only for single input file"
 msgstr ""
 
-#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
-msgid "warning: "
-msgstr "advarsel: "
+#: ly2dvi.py:980
+#, c-format
+msgid "filename should not contain spaces: `%s'"
+msgstr "filnavn bør ikke indeholde mellemrum: '%s'"
 
-#: midi2ly.py:109 midi2ly.py:924
-msgid "error: "
-msgstr "fejl: "
+# hær er det spørg om skrivning til en fil
+#: ly2dvi.py:1076 input-file-results.cc:67
+#, c-format
+msgid "dependencies output to `%s'..."
+msgstr "afhængigheder udskrevet til \"%s\"..."
 
-#: midi2ly.py:110
-msgid "Exiting ... "
-msgstr "Afslutter... "
+#: ly2dvi.py:1090 ly2dvi.py:1104 includable-lexer.cc:49
+#: input-file-results.cc:187 input-file-results.cc:193 lily-guile.cc:97
+#, c-format
+msgid "can't find file: `%s'"
+msgstr "kan ikke finde fil: \"%s\""
 
 # hær er det spørg om skrivning til en fil (første parametern er t.ex
 # DVI, LATEX, MIDI, TEX)
-#: midi2ly.py:857
-#, python-format
+#: ly2dvi.py:1102 midi2ly.py:996
+#, c-format
 msgid "%s output to `%s'..."
 msgstr "%s udskrevet til \"%s\"..."
 
-#: midi2ly.py:871 musicxml2ly.py:485
-#, fuzzy, python-format
-msgid "Convert %s to LilyPond input."
-msgstr "Konvertér mup til LilyPond-kilde."
+#: ly2dvi.py:1111
+msgid "no files specified on command line"
+msgstr "ingen filer angivne på kommandolinjen."
+
+#: midi2ly.py:92
+msgid "Convert MIDI to LilyPond source"
+msgstr "Konvertér MIDI til LilyPond-klide"
 
-#: midi2ly.py:875
+#: midi2ly.py:95
 msgid "print absolute pitches"
 msgstr ""
 
-#: midi2ly.py:877 midi2ly.py:889
+#: midi2ly.py:96 midi2ly.py:101
 msgid "DUR"
 msgstr "LÆNGDE"
 
-#: midi2ly.py:878
+#: midi2ly.py:96
 msgid "quantise note durations on DUR"
 msgstr ""
 
-#: midi2ly.py:881
+#: midi2ly.py:97
 msgid "print explicit durations"
 msgstr "udskriv eksplicitte længder"
 
-#: midi2ly.py:882
-#, fuzzy
-msgid "set key: ALT=+sharps|-flats; MINOR=1"
-msgstr "sæt toneart: TONE +forhøjelser/-sænkninger; :1 mol"
-
-#: midi2ly.py:883
+#: midi2ly.py:99
 msgid "ALT[:MINOR]"
 msgstr ""
 
-#: midi2ly.py:888
+#: midi2ly.py:99
+msgid "set key: ALT=+sharps|-flats; MINOR=1"
+msgstr "sæt toneart: TONE=+forhøjelser/-sænkninger; mol=1"
+
+#: midi2ly.py:101
 msgid "quantise note starts on DUR"
 msgstr ""
 
-#: midi2ly.py:891
+#: midi2ly.py:102
 msgid "DUR*NUM/DEN"
 msgstr ""
 
-#: midi2ly.py:894
+#: midi2ly.py:102
 msgid "allow tuplet durations DUR*NUM/DEN"
 msgstr ""
 
-#: midi2ly.py:902
+#: midi2ly.py:106
 msgid "treat every text as a lyric"
 msgstr ""
 
-#: midi2ly.py:905
-#, fuzzy
-msgid "Examples"
+#: midi2ly.py:1027
+msgid "Example:"
 msgstr "Eksempel:"
 
-#: midi2ly.py:925
+#: midi2ly.py:1081
 msgid "no files specified on command line."
 msgstr "ingen filer angivne på kommandolinjen."
 
-#: musicxml2ly.py:473
-msgid "musicxml2ly FILE.xml"
-msgstr ""
+#: mup2ly.py:69
+msgid "Convert mup to LilyPond source"
+msgstr "Konvertér mup til LilyPond-kilde"
 
-#: musicxml2ly.py:476
-#, fuzzy, python-format
-msgid ""
-"This program is free software.  It is covered by the GNU General Public\n"
-"License and you are welcome to change it and/or distribute copies of it\n"
-"under certain conditions.  Invoke as `%s --warranty' for more\n"
-"information."
-msgstr ""
-"Dette er frit programmel. Det dækkes af \"GNU General Public License\",\n"
-"og du må ændre og/eller distribuere kopier af det under visse\n"
-"betingelser. Kør \"%s --warranty\" for mere information.\n"
+#: mup2ly.py:72
+msgid "debug"
+msgstr "fejlsøgningsuddata"
 
-#: musicxml2ly.py:495
-msgid "Use lxml.etree; uses less memory and cpu time."
-msgstr ""
+#: mup2ly.py:73
+msgid "define macro NAME [optional expansion EXP]"
+msgstr "definér makro NAVN [valfri makroudvidelse EXP]"
 
-#: musicxml2ly.py:503
-#, fuzzy
-msgid "set output filename to FILE"
+#: mup2ly.py:75 main.cc:117
+msgid "write output to FILE"
 msgstr "skriv uddata til FIL"
 
-#: getopt-long.cc:140
+#: mup2ly.py:76
+msgid "only pre-process"
+msgstr "kun forbehandling"
+
+#: mup2ly.py:1073
+#, c-format
+msgid "no such context: %s"
+msgstr "omgivelse findes ikke: %s"
+
+#: mup2ly.py:1297
+#, c-format
+msgid "Processing `%s'..."
+msgstr "Behandler \"%s\"..."
+
+#: mup2ly.py:1316
+#, c-format
+msgid "Writing `%s'..."
+msgstr "Skriver \"%s\"..."
+
+#: update-lily.py:76
+msgid "Fetch and rebuild from latest source package"
+msgstr "Hent og byg om fra seneste kildekodepakke"
+
+#: update-lily.py:79
+#, c-format
+msgid "unpack and build in DIR [%s]"
+msgstr "udpak og byg i DIR [%s]"
+
+#: update-lily.py:80
+msgid "execute COMMAND, subtitute:"
+msgstr "kør COMMAND, erstat:"
+
+#: update-lily.py:81
+msgid "%b: build root"
+msgstr "%b: rod for opbygning"
+
+#: update-lily.py:82
+#, c-format
+msgid "%n: package name"
+msgstr "%n: pakkenavn"
+
+#: update-lily.py:83
+msgid "%r: release directory"
+msgstr "%r: katalog for programudgivelse"
+
+#: update-lily.py:84
+msgid "%t: tarball"
+msgstr "%t: tarball"
+
+#: update-lily.py:85
+msgid "%v: package version"
+msgstr "%v: pakkeversion"
+
+#: update-lily.py:88
+#, c-format
+msgid "keep all output, and name the directory %s"
+msgstr "behold al uddata, og døb kataloget til %s"
+
+#: update-lily.py:89
+msgid "upon failure notify EMAIL[,EMAIL]"
+msgstr "ved fejl, underret EMAIL[,EMAIL]"
+
+#: update-lily.py:90
+msgid "remove previous build"
+msgstr "fjern foregående bygning"
+
+#: update-lily.py:93
+#, c-format
+msgid "fetch and build URL [%s]"
+msgstr "hent og byg URL [%s]"
+
+#: update-lily.py:429
+#, c-format
+msgid "Listing `%s'..."
+msgstr "Lister \"%s\"..."
+
+#: update-lily.py:497
+#, c-format
+msgid "latest is: %s"
+msgstr "seneste er: %s"
+
+#: update-lily.py:498
+#, c-format
+msgid "relax, %s is up to date"
+msgstr "slap af, %s er seneste version"
+
+#: update-lily.py:507 update-lily.py:520
+#, c-format
+msgid "Fetching `%s'..."
+msgstr "Henter \"%s\"..."
+
+#: update-lily.py:529
+#, c-format
+msgid "Building `%s'..."
+msgstr "Bygger \"%s\"..."
+
+#: getopt-long.cc:146
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "flag \"%s\" kræver et argument"
 
-#: getopt-long.cc:144
-#, fuzzy, c-format
-msgid "option `%s' does not allow an argument"
+#: getopt-long.cc:150
+#, c-format
+msgid "option `%s' doesn't allow an argument"
 msgstr "flag.gan \"%s\" tillader intet argument"
 
-#: getopt-long.cc:148
+#: getopt-long.cc:154
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "ukendt flag: \"%s\""
 
-#: getopt-long.cc:154
+#: getopt-long.cc:161
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "ugyldigt argument \"%s\" til flag \"%s\""
 
-#: warn.cc:68 grob.cc:559 input.cc:82
-#, fuzzy, c-format
-msgid "programming error: %s"
-msgstr "programmeringsfejl: "
+#: warn.cc:24
+#, c-format
+msgid "warning: %s\n"
+msgstr "advarsel: %s\n"
 
-#: warn.cc:69 input.cc:83
-msgid "continuing, cross fingers"
-msgstr ""
+#: warn.cc:30
+#, c-format
+msgid "error: %s\n"
+msgstr "fejl: %s\n"
 
-#: accidental-engraver.cc:240
+#: warn.cc:43
 #, c-format
-msgid "accidental typesetting list must begin with context-name: %s"
-msgstr ""
+msgid "programming error: %s (Continuing; cross thumbs)\n"
+msgstr "programfejl: %s (Fortsætter, kryds fingrene)\n"
 
-#: accidental-engraver.cc:268
+#: accidental-engraver.cc:181 new-accidental-engraver.cc:237
 #, c-format
-msgid "ignoring unknown accidental: %s"
+msgid "Accidental typesetting list must begin with context-name: %s"
 msgstr ""
 
-#: accidental-engraver.cc:284
+#: accidental-engraver.cc:206 new-accidental-engraver.cc:262
 #, c-format
-msgid "pair or context-name expected for accidental rule, found %s"
+msgid "unknown accidental typesetting: %s. Ignored"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:133
+#: accidental-engraver.cc:222 new-accidental-engraver.cc:278
 #, c-format
-msgid "accidental `%s' not found"
+msgid "Symbol is not a parent context: %s. Ignored"
 msgstr ""
 
-#: align-interface.cc:222
-msgid ""
-"vertical alignment called before line-breaking.\n"
-"Only do cross-staff spanners with PianoStaff."
+#: accidental-engraver.cc:225 new-accidental-engraver.cc:281
+#, c-format
+msgid "Accidental typesetting must be pair or context-name: %s"
 msgstr ""
 
-#: align-interface.cc:329
-msgid "tried to get a translation for something that is no child of mine"
-msgstr ""
+#: afm.cc:60
+#, c-format
+msgid "can't find character number: %d"
+msgstr "kan ikke finde tegnnummer: %d"
 
-#: all-font-metrics.cc:173
+#: afm.cc:75
 #, c-format
-msgid "cannot find font: `%s'"
-msgstr "kan ikke finde skrifttype: \"%s\""
+msgid "can't find character called: `%s'"
+msgstr "kan ikke finde tegn som hedder: \"%s\""
 
-#: apply-context-iterator.cc:31
-msgid "\\applycontext argument is not a procedure"
-msgstr ""
+#: afm.cc:125
+#, c-format
+msgid "Error parsing AFM file: `%s'"
+msgstr "Fejl ved tolkning af AFM-fil: \"%s\""
 
-#: auto-change-iterator.cc:63 change-iterator.cc:61
-#, fuzzy, c-format
-msgid "cannot change, already in translator: %s"
-msgstr "kan ikke ændre \"%s\" til \"%s\""
+#: all-font-metrics.cc:95
+#, c-format
+msgid "checksum mismatch for font file: `%s'"
+msgstr "fejlagtig checksum for skrifttypefil: \"%s\""
 
-#: axis-group-engraver.cc:78
-msgid "Axis_group_engraver: vertical group already has a parent"
-msgstr ""
+#: all-font-metrics.cc:97
+#, c-format
+msgid "does not match: `%s'"
+msgstr "matcher ikke: \"%s\""
 
-#: axis-group-engraver.cc:79
-msgid "are there two Axis_group_engravers?"
-msgstr ""
+#: all-font-metrics.cc:102
+msgid " Rebuild all .afm files, and remove all .pk and .tfm files.  Rerun with -V to show font paths."
+msgstr " Genopbyg alle .afm-filer, og fjern alle .pk- og .tfm-filer. Kør igen med -V for at vise skrifttypesøgestier."
 
-#: axis-group-engraver.cc:80
-msgid "removing this vertical group"
-msgstr ""
+#: all-font-metrics.cc:167
+#, c-format
+msgid "can't find font: `%s'"
+msgstr "kan ikke finde skrifttype: \"%s\""
 
-#: axis-group-interface.cc:96
-msgid "tried to calculate pure-height at a non-breakpoint"
-msgstr ""
+#: all-font-metrics.cc:168
+msgid "Loading default font"
+msgstr "Indlæser standardskrifttype"
 
-#: axis-group-interface.cc:370
-msgid "an outside-staff object should have a direction, defaulting to up"
-msgstr ""
+#: all-font-metrics.cc:183
+#, c-format
+msgid "can't find default font: `%s'"
+msgstr "kan ikke finde standardskrifttype: \"%s\""
 
-#: axis-group-interface.cc:383
+#: all-font-metrics.cc:184 includable-lexer.cc:51 input-file-results.cc:188
 #, c-format
-msgid "outside-staff object %s has an empty extent"
-msgstr ""
+msgid "(search path: `%s')"
+msgstr "(søgesti: \"%s\")"
 
-#: bar-check-iterator.cc:73
+#: all-font-metrics.cc:185
+msgid "Giving up"
+msgstr "Giver op"
+
+#: auto-change-iterator.cc:43 change-iterator.cc:60
+#: part-combine-music-iterator.cc:97
+msgid "Can't switch translators, I'm there already"
+msgstr "Kan ikke skifte oversætter, jeg er her allerede"
+
+#: bar-check-iterator.cc:58
 #, c-format
 msgid "barcheck failed at: %s"
 msgstr "taktkontrol mislykkedes ved: %s"
 
-#: beam-engraver.cc:128
+#: beam-engraver.cc:167
 msgid "already have a beam"
 msgstr "har allerede en bjælke"
 
-#: beam-engraver.cc:196
+#: beam-engraver.cc:234
 msgid "unterminated beam"
 msgstr "uafsluttet bjælke"
 
-#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:267 chord-tremolo-engraver.cc:175
 msgid "stem must have Rhythmic structure"
 msgstr "nodehals skal have en rytmisk struktur"
 
-#: beam-engraver.cc:246
-#, fuzzy
-msgid "stem does not fit in beam"
+#: beam-engraver.cc:281
+msgid "stem doesn't fit in beam"
 msgstr "nodehalsen passer ikke i bjælke"
 
-#: beam-engraver.cc:247
+#: beam-engraver.cc:282
 msgid "beam was started here"
 msgstr "bjælken startede her"
 
-#: beam-quanting.cc:307
-#, fuzzy
-msgid "no feasible beam position"
-msgstr "Ingen mulig linjebrydning fandtes"
-
-#: beam.cc:144
-#, fuzzy
-msgid "removing beam with no stems"
+#: beam.cc:134
+msgid "beam has less than two visible stems"
 msgstr "bjælke har mindre end to synlige nodehalse"
 
-#: beam.cc:1007
-msgid "no viable initial configuration found: may not find good beam slope"
-msgstr ""
+#: beam.cc:139
+msgid "Beam has less than two stems. Removing beam."
+msgstr "Bjælke har mindre end to nodehalse. Fjerner bjælke."
+
+#: beam.cc:951
+msgid "Not sure that we can find a nice beam slope (no viable initial configuration found)."
+msgstr "Ikke sikker på at vi kan finde en pæn hældning på bjælken (ingen brugelig initiel konfiguration fundet)."
 
-#: break-alignment-interface.cc:208
+#: break-align-interface.cc:166
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "Ingen mellemrums-indgang fra %s til `%s'"
 
-#: change-iterator.cc:23
-#, fuzzy, c-format
-msgid "cannot change `%s' to `%s'"
+#: change-iterator.cc:22
+#, c-format
+msgid "can't change `%s' to `%s'"
 msgstr "kan ikke ændre \"%s\" til \"%s\""
 
-#. FIXME: constant error message.
-#: change-iterator.cc:82
-#, fuzzy
-msgid "cannot find context to switch to"
-msgstr "kan ikke finde omgivelsen \"%s\""
-
+#.
 #. We could change the current translator's id, but that would make
-#. errors hard to catch.
+#. errors hard to catch
 #.
-#. last->translator_id_string () = get_change
-#. ()->change_to_id_string ();
-#: change-iterator.cc:91
-#, fuzzy, c-format
-msgid "not changing to same context type: %s"
-msgstr "omgivelse findes ikke: %s"
+#. last->translator_id_string_  = get_change ()->change_to_id_string_;
+#.
+#: change-iterator.cc:79
+msgid "I'm one myself"
+msgstr "Jeg er selv én"
 
-#. FIXME: uncomprehensable message
-#: change-iterator.cc:95
+#: change-iterator.cc:82
 msgid "none of these in my family"
 msgstr "ingen af disse i min familie"
 
-#: chord-tremolo-engraver.cc:88
-#, fuzzy
-msgid "No tremolo to end"
-msgstr "Ingen volte-bro at afslutte"
-
-#: chord-tremolo-engraver.cc:110
+#: chord-tremolo-engraver.cc:137 percent-repeat-engraver.cc:182
 msgid "unterminated chord tremolo"
 msgstr "ikke-afsluttet akkordtremolo"
 
-#: chord-tremolo-iterator.cc:33
-#, c-format
-msgid "expect 2 elements for chord tremolo, found %d"
-msgstr ""
-
-#: clef.cc:54
-#, c-format
-msgid "clef `%s' not found"
-msgstr ""
-
-#: cluster.cc:110
-#, fuzzy, c-format
-msgid "unknown cluster style `%s'"
-msgstr "ukendt oversætter: \"%s\""
-
-#: cluster.cc:135
-msgid "junking empty cluster"
-msgstr ""
-
-#: coherent-ligature-engraver.cc:100
-#, c-format
-msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
-msgstr ""
-
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:176 constrained-breaking.cc:193
-#, fuzzy
-msgid "cannot find line breaking that satisfies constraints"
-msgstr "kunne ikke finde nogen skrifttype som opfylder "
-
-#: context-def.cc:130
-#, fuzzy, c-format
-msgid "program has no such type: `%s'"
-msgstr "Programmet har ingen sådan type"
-
-#: context-property.cc:76
-msgid "need symbol arguments for \\override and \\revert"
-msgstr ""
-
-#: context.cc:151
-#, fuzzy, c-format
-msgid "cannot find or create new `%s'"
-msgstr "kan ikke finde eller oprette: \"%s\""
-
-#: context.cc:213
-#, fuzzy, c-format
-msgid "cannot find or create `%s' called `%s'"
-msgstr "kan ikke finde eller oprette \"%s\" kaldet \"%s\""
-
-#: context.cc:276
-#, c-format
-msgid "Invalid CreateContext event: Cannot create %s context"
-msgstr ""
+#: chord-tremolo-iterator.cc:50
+msgid "no one to print a tremolos"
+msgstr "der er ingen som kan skrive en tremolo"
 
-#: context.cc:388
+#: chord.cc:313
 #, c-format
-msgid "cannot find or create: `%s'"
-msgstr "kan ikke finde eller oprette: \"%s\""
+msgid "invalid subtraction: not part of chord: %s"
+msgstr "ugyldig subtraktion: ikke del af akkord: %s"
 
-#: custos.cc:77
+# "pitch" hær skal alltså være en ton i et akkord
+#: chord.cc:342
 #, c-format
-msgid "custos `%s' not found"
-msgstr ""
-
-#: dispatcher.cc:71
-msgid "Event class should be a symbol"
-msgstr ""
-
-#: dispatcher.cc:78
-#, fuzzy, c-format
-msgid "Unknown event class %s"
-msgstr "ukendt oversætter: \"%s\""
+msgid "invalid inversion pitch: not part of chord: %s"
+msgstr "ugyldig tone for inversion: ikke del af en akkord: %s"
 
-#: dots.cc:38
-#, fuzzy, c-format
-msgid "dot `%s' not found"
-msgstr "Symbol ikke fundet, "
+#: dimensions.cc:13
+msgid "NaN"
+msgstr "-"
 
-#: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "cannot find start of (de)crescendo"
+#: dynamic-engraver.cc:187 span-dynamic-performer.cc:82
+msgid "can't find start of (de)crescendo"
 msgstr "kan ikke finde starten på crescendo/diminuendo"
 
-#: dynamic-engraver.cc:195
-msgid "already have a decrescendo"
-msgstr "har allerede et diminuendo"
-
-#: dynamic-engraver.cc:197
+#: dynamic-engraver.cc:211
 msgid "already have a crescendo"
 msgstr "har allerede et crescendo"
 
-#: dynamic-engraver.cc:200
-#, fuzzy
-msgid "cresc starts here"
+#: dynamic-engraver.cc:212
+msgid "already have a decrescendo"
+msgstr "har allerede et diminuendo"
+
+#: dynamic-engraver.cc:215
+msgid "Cresc started here"
 msgstr "Cresc startede her"
 
-#: dynamic-engraver.cc:323
+#: dynamic-engraver.cc:307
 msgid "unterminated (de)crescendo"
 msgstr "uafsluttet crescendo/diminuendo"
 
-#: extender-engraver.cc:131 extender-engraver.cc:140
+#: extender-engraver.cc:96
 msgid "unterminated extender"
 msgstr "uafsluttet udvider"
 
-#: font-config.cc:28
-msgid "Initializing FontConfig..."
-msgstr ""
-
-#: font-config.cc:44
-#, c-format
-msgid "Rebuilding FontConfig cache %s, this may take a while..."
-msgstr ""
-
-#: font-config.cc:55
-#, fuzzy, c-format
-msgid "failed adding font directory: %s"
-msgstr "kan ikke oprette katalog: \"%s\""
+#: extender-engraver.cc:108
+msgid "Nothing to connect extender to on the left.  Ignoring extender request."
+msgstr "Der er ingenting at forbinde udvideren mod til venstre. Ignorerer ønsket om udvider"
 
-#: font-config.cc:57
-#, fuzzy, c-format
-msgid "adding font directory: %s"
-msgstr "kan ikke oprette katalog: \"%s\""
+#: folded-repeat-iterator.cc:78
+msgid "no one to print a repeat brace"
+msgstr "der er ingen som kan skrive et gentagelsestegn"
 
-#: general-scheme.cc:160
-msgid "infinity or NaN encountered while converting Real number"
-msgstr ""
+#: font-interface.cc:238
+msgid "couldn't find any font satisfying "
+msgstr "kunne ikke finde nogen skrifttype som opfylder "
 
-#: general-scheme.cc:161
-msgid "setting to zero"
+#: gourlay-breaking.cc:188
+#, c-format
+msgid "Optimal demerits: %f"
 msgstr ""
 
-#: glissando-engraver.cc:92
-#, fuzzy
-msgid "unterminated glissando"
-msgstr "uafsluttet legatobue"
+#: gourlay-breaking.cc:193
+msgid "No feasible line breaking found"
+msgstr "Ingen mulig linjebrydning fandtes"
 
-#: global-context-scheme.cc:91 global-context-scheme.cc:107
-#, fuzzy
-msgid "no music found in score"
-msgstr "Behøver musik i partitur"
+#: hairpin.cc:98
+msgid "decrescendo too small"
+msgstr "diminuendo for lille"
 
-#: global-context-scheme.cc:97
-#, fuzzy
-msgid "Interpreting music... "
-msgstr "Tolker musik..."
+#: hairpin.cc:99
+msgid "crescendo too small"
+msgstr "crescendo for lille"
 
-#: global-context-scheme.cc:120
-#, c-format
-msgid "elapsed time: %.2f seconds"
-msgstr "tidsforbrug: %.2f sekunder"
+#: hyphen-engraver.cc:89
+msgid "unterminated hyphen"
+msgstr "uafsluttet bindestreg"
 
-#: gregorian-ligature-engraver.cc:59
-#, fuzzy, c-format
-msgid "\\%s ignored"
-msgstr "(ignoreret)"
+#: hyphen-engraver.cc:101
+msgid "Nothing to connect hyphen to on the left.  Ignoring hyphen request."
+msgstr "Der er ingenting at forbinde bindestregen med til venstre. Ignorerer bindestregsforespørgslen."
 
-#: gregorian-ligature-engraver.cc:64
+#: input-file-results.cc:71 source-file.cc:52 streams.cc:38
 #, c-format
-msgid "implied \\%s added"
-msgstr ""
-
-#. ligature may not start with 2nd head of pes or flexa
-#: gregorian-ligature-engraver.cc:212
-#, fuzzy
-msgid "cannot apply `\\~' on first head of ligature"
-msgstr "kan ikke finde start på legatobue"
-
-#. (pitch == prev_pitch)
-#: gregorian-ligature-engraver.cc:224
-msgid "cannot apply `\\~' on heads with identical pitch"
-msgstr ""
+msgid "can't open file: `%s'"
+msgstr "kan ikke åbne fil: \"%s\""
 
-#: grob-interface.cc:57
-#, fuzzy, c-format
-msgid "Unknown interface `%s'"
-msgstr "ukendt oversætter: \"%s\""
+#: input-file-results.cc:131
+msgid "Score contains errors; will not process it"
+msgstr "Partitur indholder fejl; vil ikke behandle det"
 
-#: grob-interface.cc:68
+#: input-file-results.cc:168
 #, c-format
-msgid "Grob `%s' has no interface for property `%s'"
-msgstr ""
+msgid "Now processing: `%s'"
+msgstr "Behandler nu: \"%s\""
 
-#: grob.cc:253
-msgid "Infinity or NaN encountered"
-msgstr ""
-
-#: hairpin.cc:183
-msgid "decrescendo too small"
-msgstr "diminuendo for lille"
+#: input.cc:98
+msgid "non fatal error: "
+msgstr "ikke-fatal fejl: "
 
-#: horizontal-bracket-engraver.cc:59
-msgid "do not have that many brackets"
-msgstr ""
+#: input.cc:106 source-file.cc:147 source-file.cc:240
+msgid "position unknown"
+msgstr "ukendt position"
 
-#: horizontal-bracket-engraver.cc:68
-#, fuzzy
-msgid "conflicting note group events"
+#: key-engraver.cc:91
+msgid "Conflicting key signatures found."
 msgstr "Konfliktende tonartssignaturer fundet."
 
-#: hyphen-engraver.cc:93
-#, fuzzy
-msgid "removing unterminated hyphen"
-msgstr "uafsluttet bindestreg"
-
-#: hyphen-engraver.cc:107
-#, fuzzy
-msgid "unterminated hyphen; removing"
-msgstr "uafsluttet bindestreg"
-
-#: includable-lexer.cc:53
-msgid "include files are not allowed in safe mode"
-msgstr ""
+#: key-engraver.cc:92
+msgid "This was the other key definition."
+msgstr "Dette var den anden tonartsdefinition."
 
-#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
-#, c-format
-msgid "cannot find file: `%s'"
-msgstr "kan ikke finde fil: \"%s\""
+#: key-performer.cc:92
+msgid "FIXME: key change merge"
+msgstr "FIX: tonartsskiftsfletning"
 
-#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#: kpath.cc:64
 #, c-format
-msgid "(search path: `%s')"
-msgstr "(søgesti: \"%s\")"
+msgid "Kpathsea couldn't find TFM file `%s'"
+msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\""
 
-#: input.cc:112 source-file.cc:168 source-file.cc:183
-msgid "position unknown"
-msgstr "ukendt position"
+#: ligature-bracket.cc:105 ligature-bracket.cc:139 ligature-engraver.cc:124
+msgid "no left bound"
+msgstr "Ingen venstrekant"
 
-#: ligature-engraver.cc:93
+#: ligature-engraver.cc:81
 #, fuzzy
-msgid "cannot find start of ligature"
+msgid "can't find start of ligature"
 msgstr "kan ikke finde start på legatobue"
 
-#: ligature-engraver.cc:98
+#: ligature-engraver.cc:86
 msgid "no right bound"
 msgstr "Ingen højrekant"
 
-#: ligature-engraver.cc:120
+#: ligature-engraver.cc:108
 #, fuzzy
 msgid "already have a ligature"
 msgstr "har allerede en bjælke"
 
-#: ligature-engraver.cc:129
-msgid "no left bound"
-msgstr "Ingen venstrekant"
-
-#: ligature-engraver.cc:173
+#: ligature-engraver.cc:166
 #, fuzzy
 msgid "unterminated ligature"
 msgstr "uafsluttet legatobue"
 
-#: ligature-engraver.cc:202
-msgid "ignoring rest: ligature may not contain rest"
+#: ligature-engraver.cc:183
+msgid "ligature may not contain rest; ignoring rest"
 msgstr ""
 
-#: ligature-engraver.cc:203
+#: ligature-engraver.cc:184
 #, fuzzy
 msgid "ligature was started here"
 msgstr "bjælken startede her"
 
-#: lily-guile.cc:92
+#: lily-guile.cc:99
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(indlæsningssøgesti: \"%s\")"
 
-#: lily-guile.cc:518
-#, fuzzy, c-format
-msgid "cannot find property type-check for `%s' (%s)."
+#: lily-guile.cc:582
+#, c-format
+msgid "Can't find property type-check for `%s' (%s)."
 msgstr "Kan ikke finde typetjek for egenskab af '%s' (%s)."
 
-#: lily-guile.cc:521
-#, fuzzy
-msgid "perhaps a typing error?"
+#: lily-guile.cc:585
+msgid "Perhaps you made a typing error?"
 msgstr "Måske lavede du en tastefejl?"
 
-#: lily-guile.cc:527
-#, fuzzy
-msgid "doing assignment anyway"
+#: lily-guile.cc:591
+msgid "Doing assignment anyway."
 msgstr "Laver tildeling aligevel."
 
-#: lily-guile.cc:539
-#, fuzzy, c-format
-msgid "type check for `%s' failed; value `%s' must be of type `%s'"
-msgstr ""
-"Typekontrol for \"%s\" mislykkedes; værdi \"%s\" skal have typen \"%s\""
+#: lily-guile.cc:605
+#, c-format
+msgid "Type check for `%s' failed; value `%s' must be of type `%s'"
+msgstr "Typekontrol for \"%s\" mislykkedes; værdi \"%s\" skal have typen \"%s\""
 
-#: lily-lexer.cc:254
-#, fuzzy, c-format
-msgid "identifier name is a keyword: `%s'"
-msgstr "Identificerernavn er et nøgleord: \"%s\""
+#: lookup.cc:141
+msgid "round filled box horizontal extent smaller than blot; decreasing blot"
+msgstr ""
 
-#: lily-lexer.cc:269
-#, c-format
-msgid "error at EOF: %s"
-msgstr "fejl ved filslutning: %s"
+#: lookup.cc:146
+msgid "round filled box vertical extent smaller than blot; decreasing blot"
+msgstr ""
 
-#: lily-parser-scheme.cc:29
-#, fuzzy, c-format
-msgid "deprecated function called: %s"
-msgstr "kan ikke finde tegn som hedder: \"%s\""
+#: lyric-phrasing-engraver.cc:311
+msgid "lyrics found without any matching notehead"
+msgstr "tekst fundet uden noget tilhørende nodehoved"
 
-#: lily-parser-scheme.cc:88
-#, fuzzy, c-format
-msgid "Changing working directory to: `%s'"
-msgstr "kan ikke oprette katalog: \"%s\""
+#: lyric-phrasing-engraver.cc:317
+msgid "Huh? Melismatic note found to have associated lyrics."
+msgstr "Øh? Melismatisk node har tilhørende tekst."
 
-#: lily-parser-scheme.cc:106
-#, fuzzy, c-format
-msgid "cannot find init file: `%s'"
-msgstr "kan ikke finde fil: \"%s\""
+#: main.cc:106
+msgid "EXPR"
+msgstr "UDTR"
 
-#: lily-parser-scheme.cc:125
-#, fuzzy, c-format
-msgid "Processing `%s'"
-msgstr "Behandler \"%s\"..."
+#: main.cc:107
+msgid "set options, use -e '(ly-option-usage)' for help"
+msgstr "sæt alternativer, brug -e '(ly-option-usage)' for hjælp"
 
-#: lily-parser.cc:99
-msgid "Parsing..."
-msgstr "Tolker..."
+#. another bug in option parser: --output=foe is taken as an abbreviation
+#. for --output-format
+#: main.cc:110
+msgid "EXT"
+msgstr "FMT"
 
-#: lily-parser.cc:127
+#: main.cc:110
 #, fuzzy
-msgid "braces do not match"
-msgstr "Klammer passer ikke"
+msgid "use output format EXT"
+msgstr "brug uddataformat FMT (scm, ps, tex eller as)"
 
-#: lyric-combine-music-iterator.cc:291
-#, fuzzy, c-format
-msgid "cannot find Voice `%s'"
-msgstr "kan ikke finde fil: \"%s\""
+#: main.cc:112
+msgid "FIELD"
+msgstr "FELT"
 
-#: main.cc:116
-#, fuzzy, c-format
+#: main.cc:112
+msgid "write header field to BASENAME.FIELD"
+msgstr "skriv rubrikfelt til BASENAVN.FELT"
+
+#: main.cc:113
+msgid "add DIR to search path"
+msgstr "tilføj KATALOG til søgestien"
+
+#: main.cc:114
+msgid "use FILE as init file"
+msgstr "brug FIL som init-fil"
+
+#: main.cc:118
+msgid "prepend DIR to dependencies"
+msgstr "tilføj KATALOG efter afhængigheder"
+
+#.
+#. should audit again.
+#.
+#: main.cc:123
+msgid "inhibit file output naming and exporting"
+msgstr "hindr navngivning af filuddata og eksportering"
+
+#. No version number or newline here. It confuses help2man.
+#: main.cc:155
+#, c-format
+msgid "Usage: %s [OPTION]... FILE..."
+msgstr "Brug: %s [FLAG]... FIL..."
+
+#: main.cc:157
+msgid "Typeset music and or play MIDI from FILE"
+msgstr "Typesæt musik og/eller afspil MIDI fra FIL"
+
+#: main.cc:160
+msgid ""
+"LilyPond is a music typesetter.  It produces beautiful sheet music\n"
+"using a high level description file as input.  LilyPond is part of \n"
+"the GNU Project.\n"
+msgstr ""
+"LilyPond er en musiktypesætter. Den producerer smukke noder fra en\n"
+"højniveaubeskrivning af musikken i en fil. LilyPond er en del af\n"
+"GNU-projektet.\n"
+
+#: main.cc:182
+#, c-format
 msgid ""
-"This program is free software.  It is covered by the GNU General Public\n"
-"License and you are welcome to change it and/or distribute copies of it\n"
-"under certain conditions.  Invoke as `%s --warranty' for more\n"
-"information.\n"
+"This is free software.  It is covered by the GNU General Public License,\n"
+"and you are welcome to change it and/or distribute copies of it under\n"
+"certain conditions.  Invoke as `%s --warranty' for more information.\n"
 msgstr ""
 "Dette er frit programmel. Det dækkes af \"GNU General Public License\",\n"
 "og du må ændre og/eller distribuere kopier af det under visse\n"
 "betingelser. Kør \"%s --warranty\" for mere information.\n"
 
-#: main.cc:122
-#, fuzzy
+#: main.cc:188 main.cc:200
+#, c-format
+msgid "Copyright (c) %s by"
+msgstr "Copyright © %s af"
+
+#: main.cc:198
+msgid "GNU LilyPond -- The music typesetter"
+msgstr "GNU Lilypond -- Musiktypesætteren"
+
+#: main.cc:206
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -1033,10 +877,10 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy of the\n"
+"    You should have received a copy (refer to the file COPYING) of the\n"
 "GNU General Public License along with this program; if not, write to\n"
-"the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
-"Boston, MA 02111-1307, USA.\n"
+"the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,\n"
+"USA.\n"
 msgstr ""
 "Dette program er frit programmel. Du kan distribuere det og/eller\n"
 "ændre det under betingelserne i GNU General Public License version 2,\n"
@@ -1049,1804 +893,586 @@ msgstr ""
 "\n"
 "Du bør have fået en kopi af GNU General Public License sammen med\n"
 "dette program. Hvis ikke, skriv til Free Software Foundation, Inc., 59\n"
-"Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
-
-#: main.cc:153
-msgid "BACK"
-msgstr ""
-
-#: main.cc:153
-msgid ""
-"use backend BACK (eps, gnome, ps [default],\n"
-"scm, svg, tex, texstr)"
-msgstr ""
-
-#: main.cc:155
-#, fuzzy
-msgid "SYM[=VAL]"
-msgstr "NØGLE=VÆRDI"
-
-#: main.cc:156
-msgid ""
-"set Scheme option SYM to VAL (default: #t)\n"
-"Use -dhelp for help."
-msgstr ""
-
-#: main.cc:159
-msgid "EXPR"
-msgstr "UDTR"
-
-#: main.cc:159
-#, fuzzy
-msgid "evaluate scheme code"
-msgstr "Kan ikke evaluere Scheme i sikker tilstand"
-
-#. Bug in option parser: --output =foe is taken as an abbreviation
-#. for --output-format.
-#: main.cc:162
-msgid "FORMATs"
-msgstr ""
-
-#: main.cc:162
-msgid "dump FORMAT,...  Also as separate options:"
-msgstr ""
-
-#: main.cc:163
-#, fuzzy
-msgid "generate DVI (tex backend only)"
-msgstr "lav PDF-uddata"
-
-#: main.cc:164
-#, fuzzy
-msgid "generate PDF (default)"
-msgstr "lav PDF-uddata"
-
-#: main.cc:165
-#, fuzzy
-msgid "generate PNG"
-msgstr "lav PDF-uddata"
-
-#: main.cc:166
-#, fuzzy
-msgid "generate PostScript"
-msgstr "lav PostScript-uddata"
-
-#: main.cc:167
-msgid "generate TeX (tex backend only)"
-msgstr ""
-
-#: main.cc:168
-msgid "show this help and exit"
-msgstr ""
-
-#: main.cc:169
-msgid "FIELD"
-msgstr "FELT"
-
-#: main.cc:169
-#, fuzzy
-msgid ""
-"dump header field FIELD to file\n"
-"named BASENAME.FIELD"
-msgstr "skriv rubrikfelt til BASENAVN.FELT"
-
-#: main.cc:171
-msgid "add DIR to search path"
-msgstr "tilføj KATALOG til søgestien"
-
-#: main.cc:172
-msgid "use FILE as init file"
-msgstr "brug FIL som init-fil"
-
-#: main.cc:174
-msgid "USER,GROUP,JAIL,DIR"
-msgstr ""
-
-#: main.cc:174
-msgid ""
-"chroot to JAIL, become USER:GROUP\n"
-"and cd into DIR"
-msgstr ""
-
-#: main.cc:177
-#, fuzzy
-msgid "do not generate printed output"
-msgstr "lav PostScript-uddata"
-
-#: main.cc:178
-#, fuzzy
-msgid "write output to FILE (suffix will be added)"
-msgstr "skriv uddata til FIL"
-
-#: main.cc:179
-msgid "generate a preview of the first system"
-msgstr ""
-
-#: main.cc:180
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:181
-msgid ""
-"disallow unsafe Scheme and PostScript\n"
-"operations"
-msgstr ""
-
-#: main.cc:183
-#, fuzzy
-msgid "show version number and exit"
-msgstr "vis versionsnummer"
-
-#: main.cc:224
-#, fuzzy, c-format
-msgid ""
-"Copyright (c) %s by\n"
-"%s  and others."
-msgstr "Copyright © %s af"
-
-#. No version number or newline here.  It confuses help2man.
-#: main.cc:251
-#, fuzzy, c-format
-msgid "Usage: %s [OPTION]... FILE..."
-msgstr "Brug: %s [FLAG]... FIL..."
-
-#: main.cc:253
-#, fuzzy, c-format
-msgid "Typeset music and/or produce MIDI from FILE."
-msgstr "Typesæt musik og/eller afspil MIDI fra FIL."
-
-#: main.cc:255
-#, c-format
-msgid "LilyPond produces beautiful music notation."
-msgstr ""
-
-#: main.cc:257
-#, c-format
-msgid "For more information, see %s"
-msgstr ""
-
-#: main.cc:259
-#, c-format
-msgid "Options:"
-msgstr "Flag:"
-
-#: main.cc:263
-#, fuzzy, c-format
-msgid "Report bugs via %s"
-msgstr ""
-"Rapportér programfejl til %s\n"
-".Rapportér fejl i oversættelsen til <dansk@klid.dk>."
-
-#: main.cc:309
-#, c-format
-msgid "expected %d arguments with jail, found: %u"
-msgstr ""
-
-#: main.cc:323
-#, fuzzy, c-format
-msgid "no such user: %s"
-msgstr "indstillingen findes ikke: '%s'"
-
-#: main.cc:325
-#, c-format
-msgid "cannot get user id from user name: %s: %s"
-msgstr ""
-
-#: main.cc:340
-#, fuzzy, c-format
-msgid "no such group: %s"
-msgstr "omgivelse findes ikke: %s"
-
-#: main.cc:342
-#, fuzzy, c-format
-msgid "cannot get group id from group name: %s: %s"
-msgstr "kan ikke ændre \"%s\" til \"%s\""
-
-#: main.cc:350
-#, fuzzy, c-format
-msgid "cannot chroot to: %s: %s"
-msgstr "kan ikke oprette katalog: \"%s\""
-
-#: main.cc:357
-#, fuzzy, c-format
-msgid "cannot change group id to: %d: %s"
-msgstr "kan ikke ændre \"%s\" til \"%s\""
-
-#: main.cc:363
-#, fuzzy, c-format
-msgid "cannot change user id to: %d: %s"
-msgstr "kan ikke ændre \"%s\" til \"%s\""
-
-#: main.cc:369
-#, fuzzy, c-format
-msgid "cannot change working directory to: %s: %s"
-msgstr "kan ikke oprette katalog: \"%s\""
-
-#: main.cc:415
-#, c-format
-msgid "Evaluating %s"
-msgstr ""
-
-#: main.cc:645
-#, c-format
-msgid "exception caught: %s"
-msgstr ""
-
-#. FIXME: constant error message.
-#: mark-engraver.cc:154
-msgid "rehearsalMark must have integer value"
-msgstr ""
-
-#: mark-engraver.cc:160
-msgid "mark label must be a markup object"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:85
-msgid "ligature with less than 2 heads -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:112
-msgid "cannot determine pitch of ligature primitive -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:126
-msgid "single note ligature - skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:138
-msgid "prime interval within ligature -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:150
-msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:198
-msgid "semibrevis must be followed by another one -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:209
-msgid ""
-"semibreves can only appear at the beginning of a ligature,\n"
-"and there may be only zero or two of them"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:236
-msgid ""
-"invalid ligatura ending:\n"
-"when the last note is a descending brevis,\n"
-"the penultimate note must be another one,\n"
-"or the ligatura must be LB or SSB"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:356
-msgid "unexpected case fall-through"
-msgstr ""
-
-#: mensural-ligature.cc:141
-msgid "Mensural_ligature: unexpected case fall-through"
-msgstr ""
-
-#: mensural-ligature.cc:192
-msgid "Mensural_ligature: (join_right == 0)"
-msgstr ""
-
-#: midi-item.cc:152
-#, fuzzy, c-format
-msgid "no such MIDI instrument: `%s'"
-msgstr "instrumentet findes ikke: \"%s\""
-
-#: midi-item.cc:285
-#, c-format
-msgid "experimental: temporarily fine tuning (of %d cents) a channel."
-msgstr ""
-
-#: midi-stream.cc:28
-#, fuzzy, c-format
-msgid "cannot open for write: %s: %s"
-msgstr "kan ikke åbne fil: \"%s\""
-
-#: midi-stream.cc:44
-#, fuzzy, c-format
-msgid "cannot write to file: `%s'"
-msgstr "kan ikke åbne fil: \"%s\""
-
-#: music-iterator.cc:171
-msgid "Sending non-event to context"
-msgstr ""
-
-#: music.cc:141
-#, c-format
-msgid "octave check failed; expected \"%s\", found: \"%s\""
-msgstr ""
-
-#: music.cc:207
-#, fuzzy, c-format
-msgid "transposition by %s makes alteration larger than double"
-msgstr "Transponering med %s medfører løst fortegn større end to"
-
-#: new-fingering-engraver.cc:96
-msgid "cannot add text scripts to individual note heads"
-msgstr ""
-
-#: new-fingering-engraver.cc:239
-msgid "no placement found for fingerings"
-msgstr ""
-
-#: new-fingering-engraver.cc:240
-msgid "placing below"
-msgstr ""
-
-#: note-collision.cc:457
-#, fuzzy
-msgid "ignoring too many clashing note columns"
-msgstr "For mange overlappende nodekolonner. Ignorerer dem."
-
-#: note-column.cc:124
-msgid "cannot have note heads and rests together on a stem"
-msgstr ""
-
-#: note-head.cc:63
-#, c-format
-msgid "none of note heads `%s' or `%s' found"
-msgstr ""
-
-#: note-heads-engraver.cc:61
-msgid "NoteEvent without pitch"
-msgstr ""
-
-#: open-type-font.cc:33
-#, fuzzy, c-format
-msgid "cannot allocate %lu bytes"
-msgstr "kan ikke åbne fil: \"%s\""
-
-#: open-type-font.cc:37
-#, fuzzy, c-format
-msgid "cannot load font table: %s"
-msgstr "kan ikke finde skrifttype: \"%s\""
-
-#: open-type-font.cc:98
-#, c-format
-msgid "unsupported font format: %s"
-msgstr ""
-
-#: open-type-font.cc:100
-#, c-format
-msgid "unknown error: %d reading font file: %s"
-msgstr ""
-
-#: open-type-font.cc:173 open-type-font.cc:297
-#, c-format
-msgid "FT_Get_Glyph_Name() returned error: %u"
-msgstr ""
-
-#: page-turn-page-breaking.cc:205
-msgid ""
-"cannot fit the first page turn onto a single page.  Consider setting first-"
-"page-number to an even number."
-msgstr ""
-
-#: page-turn-page-breaking.cc:218
-#, c-format
-msgid "Calculating page and line breaks (%d possible page breaks)..."
-msgstr ""
-
-#: page-turn-page-breaking.cc:236 paper-score.cc:154
-#, fuzzy
-msgid "Drawing systems..."
-msgstr "Laver stemmer..."
-
-#: pango-font.cc:181
-#, c-format
-msgid ""
-"Glyph has no name, but font supports glyph naming.\n"
-"Skipping glyph U+%0X, file %s"
-msgstr ""
-
-#: pango-font.cc:224
-#, fuzzy, c-format
-msgid "no PostScript font name for font `%s'"
-msgstr "ikke en PostScript fil: '%s'"
-
-#: pango-font.cc:272
-msgid "FreeType face has no PostScript font name"
-msgstr ""
-
-#: paper-outputter-scheme.cc:33
-#, fuzzy, c-format
-msgid "Layout output to `%s'..."
-msgstr "LY-uddata til \"%s\"..."
-
-#: paper-score.cc:105
-#, fuzzy
-msgid "Calculating line breaks..."
-msgstr "Beregner kolonnepositioner..."
-
-#: paper-score.cc:118
-#, c-format
-msgid "Element count %d (spanners %d) "
-msgstr ""
-
-#: paper-score.cc:122
-#, fuzzy
-msgid "Preprocessing graphical objects..."
-msgstr "Forbehandler element..."
-
-#: parse-scm.cc:83
-#, fuzzy
-msgid "GUILE signaled an error for the expression beginning here"
-msgstr "GUILE signalerede en fejl for udtrykket, der begynder her"
-
-#: percent-repeat-engraver.cc:200
-#, fuzzy
-msgid "unterminated percent repeat"
-msgstr "uafsluttet udvider"
-
-#: performance.cc:45
-#, fuzzy
-msgid "Track..."
-msgstr "Spor... "
-
-#: performance.cc:74
-msgid "MIDI channel wrapped around"
-msgstr ""
-
-#: performance.cc:75
-msgid "remapping modulo 16"
-msgstr ""
-
-#: performance.cc:103
-#, c-format
-msgid "MIDI output to `%s'..."
-msgstr "MIDI-uddata til \"%s\"..."
-
-#: phrasing-slur-engraver.cc:146
-msgid "unterminated phrasing slur"
-msgstr "uafsluttet fraseringsbue"
-
-#: piano-pedal-engraver.cc:286
-#, c-format
-msgid "expect 3 strings for piano pedals, found: %ld"
-msgstr ""
-
-#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
-#: piano-pedal-performer.cc:93
-#, c-format
-msgid "cannot find start of piano pedal: `%s'"
-msgstr "kan ikke finde start på pianopedal: \"%s\""
-
-#: piano-pedal-engraver.cc:347
-#, fuzzy, c-format
-msgid "cannot find start of piano pedal bracket: `%s'"
-msgstr "kan ikke finde start på pianopedal: \"%s\""
-
-#: program-option.cc:205
-#, fuzzy, c-format
-msgid "no such internal option: %s"
-msgstr "instrumentet findes ikke: \"%s\""
-
-#: property-iterator.cc:74
-#, c-format
-msgid "not a grob name, `%s'"
-msgstr ""
-
-#: relative-octave-check.cc:38
-msgid "Failed octave check, got: "
-msgstr ""
-
-#: relocate.cc:44
-#, fuzzy, c-format
-msgid "Setting %s to %s"
-msgstr "kan ikke oprette katalog: \"%s\""
-
-#: relocate.cc:59
-#, fuzzy, c-format
-msgid "no such file: %s for %s"
-msgstr "omgivelse findes ikke: %s"
-
-#: relocate.cc:69 relocate.cc:87
-#, fuzzy, c-format
-msgid "no such directory: %s for %s"
-msgstr "omgivelse findes ikke: %s"
-
-#: relocate.cc:79
-#, c-format
-msgid "%s=%s (prepend)\n"
-msgstr ""
-
-#: relocate.cc:99
-#, c-format
-msgid "Relocation: compile prefix=%s, new prefix=%s"
-msgstr ""
-
-#: relocate.cc:129
-#, c-format
-msgid "Relocation: framework_prefix=%s"
-msgstr ""
-
-#: relocate.cc:169
-#, c-format
-msgid "Relocation: is absolute: argv0=%s"
-msgstr ""
-
-#: relocate.cc:176
-#, c-format
-msgid "Relocation: from cwd: argv0=%s"
-msgstr ""
-
-#: relocate.cc:185
-#, c-format
-msgid ""
-"Relocation: from PATH=%s\n"
-"argv0=%s"
-msgstr ""
-
-#: relocate.cc:354
-#, fuzzy, c-format
-msgid "Relocation file: %s"
-msgstr "kan ikke åbne fil: \"%s\""
-
-#: relocate.cc:390
-#, c-format
-msgid "Unknown relocation command %s"
-msgstr ""
-
-#: rest-collision.cc:151
-msgid "cannot resolve rest collision: rest direction not set"
-msgstr ""
-
-#: rest-collision.cc:165 rest-collision.cc:210
-msgid "too many colliding rests"
-msgstr "for mange kolliderende pauser"
-
-#: rest.cc:144
-#, fuzzy, c-format
-msgid "rest `%s' not found"
-msgstr "Symbol ikke fundet, "
-
-#: score-engraver.cc:67
-#, fuzzy, c-format
-msgid "cannot find `%s'"
-msgstr "kan ikke finde: '%s'"
-
-#: score-engraver.cc:69
-msgid "Music font has not been installed properly."
-msgstr ""
-
-#: score-engraver.cc:71
-#, fuzzy, c-format
-msgid "Search path `%s'"
-msgstr "(søgesti: \"%s\")"
-
-#: score-engraver.cc:73
-msgid "Aborting"
-msgstr ""
-
-#: score.cc:225
-#, fuzzy
-msgid "already have music in score"
-msgstr "Behøver musik i partitur"
-
-#: score.cc:226
-msgid "this is the previous music"
-msgstr ""
-
-#: score.cc:231
-#, fuzzy
-msgid "errors found, ignoring music expression"
-msgstr "Fejl fundne/*, behandler ikke partitur*/"
-
-#. FIXME:
-#: script-engraver.cc:102
-#, fuzzy
-msgid "do not know how to interpret articulation: "
-msgstr "Kan ikke tolke artikulering \"%s\""
-
-#: script-engraver.cc:103
-#, fuzzy
-msgid "scheme encoding: "
-msgstr "Scheme-flag:"
-
-#: simple-spacer.cc:375
-#, c-format
-msgid "No spring between column %d and next one"
-msgstr ""
-
-#: slur-engraver.cc:83 tuplet-engraver.cc:75
-#, c-format
-msgid "direction of %s invalid: %d"
-msgstr ""
-
-#: slur-engraver.cc:157
-msgid "unterminated slur"
-msgstr "uafsluttet legatobue"
-
-#: slur-engraver.cc:166
-#, fuzzy
-msgid "cannot end slur"
-msgstr "kan ikke finde start på legatobue"
-
-#: source-file.cc:74
-#, c-format
-msgid "expected to read %d characters, got %d"
-msgstr ""
-
-#: staff-symbol-engraver.cc:62
-msgid "staff-span event has no direction"
-msgstr ""
-
-#: stem-engraver.cc:92
-msgid "tremolo duration is too long"
-msgstr ""
-
-#. FIXME:
-#: stem-engraver.cc:129
-#, fuzzy, c-format
-msgid "adding note head to incompatible stem (type = %d)"
-msgstr "Tilføjer nodehoved til inkompatibel nodehals (type = %d)"
-
-#: stem-engraver.cc:131
-msgid "maybe input should specify polyphonic voices"
-msgstr ""
-
-#: stem.cc:105
-#, fuzzy
-msgid "weird stem size, check for narrow beams"
-msgstr "Mærkelig nodehalsstørrelse; tjek for smalle bjælker"
-
-#: stem.cc:641
-#, c-format
-msgid "flag `%s' not found"
-msgstr ""
-
-#: stem.cc:652
-#, c-format
-msgid "flag stroke `%s' not found"
-msgstr ""
-
-#: system.cc:180
-#, c-format
-msgid "Element count %d."
-msgstr "Elementantal %d."
-
-#: system.cc:276
-#, fuzzy, c-format
-msgid "Grob count %d"
-msgstr "Elementantal %d "
-
-#: text-spanner-engraver.cc:61
-msgid "cannot find start of text spanner"
-msgstr "kan ikke finde start på tekstbro"
-
-#: text-spanner-engraver.cc:73
-msgid "already have a text spanner"
-msgstr "har allerede en tekstbro"
-
-#: text-spanner-engraver.cc:133
-msgid "unterminated text spanner"
-msgstr "uafsluttet tekstbro"
-
-#: tie-engraver.cc:264
-msgid "lonely tie"
-msgstr "ensom bindebue"
-
-#.
-#. Todo: should make typecheck?
-#.
-#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
-#.
-#: time-signature-engraver.cc:64
-#, c-format
-msgid "strange time signature found: %d/%d"
-msgstr ""
-
-#. If there is no such symbol, we default to the numbered style.
-#. (Here really with a warning!)
-#: time-signature.cc:83
-#, c-format
-msgid "time signature symbol `%s' not found; reverting to numbered style"
-msgstr ""
-
-#: translator-ctors.cc:52
-#, c-format
-msgid "unknown translator: `%s'"
-msgstr "ukendt oversætter: \"%s\""
-
-#: translator-group.cc:151
-#, c-format
-msgid "cannot find: `%s'"
-msgstr "kan ikke finde: \"%s\""
-
-#: translator.cc:332
-#, c-format
-msgid "Two simultaneous %s events, junking this one"
-msgstr ""
-
-#: translator.cc:333
-#, c-format
-msgid "Previous %s event here"
-msgstr ""
-
-#: trill-spanner-engraver.cc:68
-#, fuzzy
-msgid "cannot find start of trill spanner"
-msgstr "kan ikke finde start på tekstbro"
-
-#: trill-spanner-engraver.cc:80
-#, fuzzy
-msgid "already have a trill spanner"
-msgstr "har allerede en tekstbro"
-
-#: vaticana-ligature-engraver.cc:388
-#, c-format
-msgid ""
-"ignored prefix (es) `%s' of this head according to restrictions of the "
-"selected ligature style"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:714
-#, c-format
-msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
-msgstr ""
-
-#: vaticana-ligature.cc:84
-msgid "flexa-height undefined; assuming 0"
-msgstr ""
-
-#: vaticana-ligature.cc:89
-msgid "ascending vaticana style flexa"
-msgstr ""
-
-#: vaticana-ligature.cc:177
-msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
-msgstr ""
-
-#. fixme: be more verbose.
-#: volta-engraver.cc:144
-#, fuzzy
-msgid "cannot end volta spanner"
-msgstr "kan ikke finde start på tekstbro"
-
-#: volta-engraver.cc:154
-#, fuzzy
-msgid "already have a volta spanner, ending that one prematurely"
-msgstr "Har allerede en volte-bro. Stopper denne for tidligt."
-
-#: volta-engraver.cc:158
-#, fuzzy
-msgid "also already have an ended spanner"
-msgstr "har allerede en tekstbro"
-
-#: volta-engraver.cc:159
-#, fuzzy
-msgid "giving up"
-msgstr "Giver op"
-
-#: parser.yy:702
-msgid "\\paper cannot be used in \\score, use \\layout instead"
-msgstr ""
-
-#: parser.yy:726
-msgid "need \\paper for paper block"
-msgstr ""
-
-#: parser.yy:1172
-msgid "Grob name should be alphanumeric"
-msgstr ""
-
-#: parser.yy:1475
-#, fuzzy
-msgid "second argument must be pitch list"
-msgstr "Andet argument skal være et symbol"
-
-#: parser.yy:1502 parser.yy:1507 parser.yy:1972
-#, fuzzy
-msgid "have to be in Lyric mode for lyrics"
-msgstr "Skal være i teksttilstand (Lyric mode) for tekst"
-
-#: parser.yy:1604
-#, fuzzy
-msgid "expecting string as script definition"
-msgstr "Forventer streng som skriptdefinition"
-
-#: parser.yy:1759 parser.yy:1809
-#, c-format
-msgid "not a duration: %d"
-msgstr "ikke en tidslængde: %d"
-
-#: parser.yy:1926
-#, fuzzy
-msgid "have to be in Note mode for notes"
-msgstr "Skal være i nodetilstand (Note mode) for noder"
-
-#: parser.yy:1987
-#, fuzzy
-msgid "have to be in Chord mode for chords"
-msgstr "Skal være i akkordtilstand (Chord mode) for akkord"
-
-#: lexer.ll:176
-msgid "stray UTF-8 BOM encountered"
-msgstr ""
-
-#: lexer.ll:180
-msgid "Skipping UTF-8 BOM"
-msgstr ""
-
-#: lexer.ll:235
-#, fuzzy, c-format
-msgid "Renaming input to: `%s'"
-msgstr "Renser \"%s\"..."
-
-#: lexer.ll:252
-msgid "quoted string expected after \\version"
-msgstr ""
-
-#: lexer.ll:256
-msgid "quoted string expected after \\sourcefilename"
-msgstr ""
-
-#: lexer.ll:260
-msgid "integer expected after \\sourcefileline"
-msgstr ""
-
-#: lexer.ll:273
-msgid "EOF found inside a comment"
-msgstr "filslutning fundet inden i en kommentar"
-
-#: lexer.ll:288
-#, fuzzy
-msgid "\\maininput not allowed outside init files"
-msgstr "\\maininput forbudt udenfor init-filer"
-
-#: lexer.ll:312
-#, c-format
-msgid "wrong or undefined identifier: `%s'"
-msgstr "fejlagtig eller udefineret identificerer: \"%s\""
-
-#. backup rule
-#: lexer.ll:321
-msgid "end quote missing"
-msgstr ""
-
-#: lexer.ll:466
-#, fuzzy
-msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Krølleparentes fundet i slutning af tekst. Glemte du et mellemrum?"
-
-#: lexer.ll:559
-#, fuzzy
-msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Krølleparentes fundet i slutning af tekst. Glemte du et mellemrum?"
-
-#: lexer.ll:659
-#, c-format
-msgid "invalid character: `%c'"
-msgstr "ugyldigt tegn: \"%c\""
-
-#: lexer.ll:774 lexer.ll:775
-#, c-format
-msgid "unknown escaped string: `\\%s'"
-msgstr "ukendt \"escaped\" streng: \"\\%s\""
-
-#: lexer.ll:880 lexer.ll:881
-#, c-format
-msgid "file too old: %s (oldest supported: %s)"
-msgstr ""
-
-#: lexer.ll:881 lexer.ll:882
-#, fuzzy
-msgid "consider updating the input with the convert-ly script"
-msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\""
-
-#: lexer.ll:887 lexer.ll:888
-#, c-format
-msgid "program too old: %s (file requires: %s)"
-msgstr ""
-
-#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
-#, fuzzy, scheme-format
-msgid "Invoking `~a'..."
-msgstr "Starter \"%s\""
-
-#: backend-library.scm:24
-#, scheme-format
-msgid "`~a' failed (~a)"
-msgstr ""
-
-#: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, fuzzy, scheme-format
-msgid "Converting to `~a'..."
-msgstr "Skriver \"%s\"..."
-
-#: backend-library.scm:108
-#, fuzzy, scheme-format
-msgid "Converting to ~a..."
-msgstr "Skriver \"%s\"..."
-
-#: backend-library.scm:145
-#, fuzzy, scheme-format
-msgid "Writing header field `~a' to `~a'..."
-msgstr "skriver rubrikfelt \"%s\" til \"%s\"..."
-
-#: define-context-properties.scm:20 define-grob-properties.scm:10
-#: define-music-properties.scm:10
-#, scheme-format
-msgid "symbol ~S redefined"
-msgstr ""
-
-#: define-event-classes.scm:119
-#, scheme-format
-msgid "event class ~A seems to be unused"
-msgstr ""
-
-#. should be programming-error
-#: define-event-classes.scm:125
-#, scheme-format
-msgid "translator listens to nonexisting event class ~A"
-msgstr ""
-
-#: define-markup-commands.scm:255
-msgid "no systems found in \\score markup, does it have a \\layout block?"
-msgstr ""
-
-#: define-markup-commands.scm:1297
-#, fuzzy, scheme-format
-msgid "not a valid duration string: ~a"
-msgstr "ikke en tidslængde: %d"
-
-#: define-music-types.scm:751
-#, scheme-format
-msgid "symbol expected: ~S"
-msgstr ""
-
-#: define-music-types.scm:754
-#, fuzzy, scheme-format
-msgid "cannot find music object: ~S"
-msgstr "kan ikke finde omgivelsen \"%s\""
-
-#: define-music-types.scm:774
-#, fuzzy, scheme-format
-msgid "unknown repeat type `~S'"
-msgstr "ukendt oversætter: \"%s\""
-
-#: define-music-types.scm:775
-msgid "See music-types.scm for supported repeats"
-msgstr ""
-
-#: document-backend.scm:91
-#, scheme-format
-msgid "pair expected in doc ~s"
-msgstr ""
-
-#: document-backend.scm:135
-#, fuzzy, scheme-format
-msgid "cannot find interface for property: ~S"
-msgstr "kan ikke finde tegnnummer: %d"
-
-#: document-backend.scm:145
-#, fuzzy, scheme-format
-msgid "unknown Grob interface: ~S"
-msgstr "ukendt oversætter: \"%s\""
-
-#: documentation-lib.scm:45
-#, fuzzy, scheme-format
-msgid "Processing ~S..."
-msgstr "Behandler..."
-
-#: documentation-lib.scm:150
-#, fuzzy, scheme-format
-msgid "Writing ~S..."
-msgstr "Skriver \"%s\"..."
-
-#: documentation-lib.scm:172
-#, fuzzy, scheme-format
-msgid "cannot find description for property ~S (~S)"
-msgstr "kan ikke finde tegnnummer: %d"
-
-#: framework-eps.scm:91 framework-eps.scm:92
-#, fuzzy, scheme-format
-msgid "Writing ~a..."
-msgstr "Skriver \"%s\"..."
-
-#: framework-ps.scm:279
-#, scheme-format
-msgid "cannot embed ~S=~S"
-msgstr ""
-
-#: framework-ps.scm:332
-#, scheme-format
-msgid "cannot extract file matching ~a from ~a"
-msgstr ""
-
-#: framework-ps.scm:349
-#, scheme-format
-msgid "do not know how to embed ~S=~S"
-msgstr ""
-
-#: framework-ps.scm:380
-#, fuzzy, scheme-format
-msgid "do not know how to embed font ~s ~s ~s"
-msgstr "Kan ikke tolke artikulering \"%s\""
-
-#: framework-ps.scm:729
-#, scheme-format
-msgid "cannot convert <stdout> to ~S"
-msgstr ""
-
-#: framework-ps.scm:748 framework-ps.scm:751
-#, scheme-format
-msgid "cannot generate ~S using the postscript back-end"
-msgstr ""
-
-#: framework-ps.scm:758
-msgid ""
-"\n"
-"The PostScript backend does not support the 'classic'\n"
-"framework. Use the EPS backend instead,\n"
-"\n"
-"  lilypond -b eps <file>\n"
-"\n"
-"or remove the lilypond-book specific settings from the input.\n"
-msgstr ""
-
-#: framework-tex.scm:360
-#, fuzzy, scheme-format
-msgid "TeX file name must not contain whitespace: `~a'"
-msgstr "filnavn bør ikke indeholde mellemrum: '%s'"
-
-#: layout-beam.scm:29
-#, scheme-format
-msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
-msgstr ""
-
-#: layout-beam.scm:46
-#, scheme-format
-msgid "Error in beam quanting.  Expected ~S 0, found ~S."
-msgstr ""
-
-#: layout-page-layout.scm:357
-#, fuzzy
-msgid "Calculating page breaks..."
-msgstr "Beregner kolonnepositioner..."
-
-#: lily-library.scm:593
-#, fuzzy, scheme-format
-msgid "unknown unit: ~S"
-msgstr "ukendt oversætter: \"%s\""
-
-#: lily-library.scm:626
-#, scheme-format
-msgid "no \\version statement found, please add~afor future compatibility"
-msgstr ""
-
-#: lily-library.scm:633
-msgid "old relative compatibility not used"
-msgstr ""
-
-#: lily.scm:144
-#, fuzzy, scheme-format
-msgid "cannot find: ~A"
-msgstr "kan ikke finde: \"%s\""
-
-#: lily.scm:209
-#, scheme-format
-msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
-msgstr ""
-
-#: lily.scm:525 lily.scm:589
-#, scheme-format
-msgid "failed files: ~S"
-msgstr ""
-
-# hær er det spørg om skrivning til en fil
-#: lily.scm:579
-#, fuzzy, scheme-format
-msgid "Redirecting output to ~a..."
-msgstr "afhængigheder udskrevet til \"%s\"..."
-
-#: ly-syntax-constructors.scm:40
-msgid "Music head function must return Music object"
-msgstr ""
-
-#: ly-syntax-constructors.scm:136
-#, scheme-format
-msgid "Invalid property operation ~a"
-msgstr ""
-
-#: markup.scm:123
-#, scheme-format
-msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
-msgstr ""
-
-#: markup.scm:129
-#, scheme-format
-msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
-msgstr ""
-
-#: music-functions.scm:213
-#, fuzzy
-msgid "More alternatives than repeats.  Junking excess alternatives"
-msgstr ""
-"Flere alternativer end gentagelser. Stryger tiloversblevne alternativer."
-
-#: music-functions.scm:232
-#, scheme-format
-msgid "expecting 2 elements for chord tremolo, found ~a"
-msgstr ""
-
-#: music-functions.scm:538
-#, fuzzy, scheme-format
-msgid "music expected: ~S"
-msgstr "forventede mellemrum"
-
-#. FIXME: uncomprehensable message
-#: music-functions.scm:589
-#, scheme-format
-msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
-msgstr ""
-
-#: music-functions.scm:748
-#, fuzzy, scheme-format
-msgid "cannot find quoted music: `~S'"
-msgstr "kan ikke finde skrifttype: \"%s\""
-
-#: music-functions.scm:942
-#, fuzzy, scheme-format
-msgid "unknown accidental style: ~S"
-msgstr "ukendt oversætter: \"%s\""
-
-#: output-ps.scm:315
-msgid "utf-8-string encountered in PS backend"
-msgstr ""
-
-#: output-svg.scm:42
-#, scheme-format
-msgid "undefined: ~S"
-msgstr ""
-
-#: output-svg.scm:132
-#, scheme-format
-msgid "cannot decypher Pango description: ~a"
-msgstr ""
-
-#: output-tex.scm:98
-#, fuzzy, scheme-format
-msgid "cannot find ~a in ~a"
-msgstr "kan ikke finde start på bjælke"
-
-#: paper.scm:69
-msgid "Not in toplevel scope"
-msgstr ""
-
-#: paper.scm:117
-#, scheme-format
-msgid "This is not a \\layout {} object, ~S"
-msgstr ""
-
-#: paper.scm:129
-#, scheme-format
-msgid "Unknown papersize: ~a"
-msgstr ""
-
-#. TODO: should raise (generic) exception with throw, and catch
-#. that in parse-scm.cc
-#: paper.scm:144
-msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
-msgstr ""
-
-#: parser-clef.scm:126
-#, fuzzy, scheme-format
-msgid "unknown clef type `~a'"
-msgstr "ukendt oversætter: \"%s\""
-
-#: parser-clef.scm:127
-msgid "see scm/clef.scm for supported clefs"
-msgstr ""
-
-#: ps-to-png.scm:88
-#, fuzzy, scheme-format
-msgid "~a exited with status: ~S"
-msgstr "kommandoen afsluttede med værdi %d"
-
-#: to-xml.scm:190
-#, scheme-format
-msgid "assertion failed: ~S"
-msgstr ""
-
-#, fuzzy
-#~ msgid "show warranty"
-#~ msgstr "vis garanti og copyright"
-
-#~ msgid "Convert MIDI to LilyPond source."
-#~ msgstr "Konvertér MIDI til LilyPond-klide."
-
-#, fuzzy
-#~ msgid "example"
-#~ msgstr "Eksempel:"
-
-#, fuzzy
-#~ msgid "loading default font"
-#~ msgstr "Indlæser standardskrifttype"
-
-#~ msgid "cannot find default font: `%s'"
-#~ msgstr "kan ikke finde standardskrifttype: \"%s\""
-
-#~ msgid "crescendo too small"
-#~ msgstr "crescendo for lille"
-
-# forklaring af flag -h
-#~ msgid "print this help"
-#~ msgstr "denne hjælp"
-
-#~ msgid "silly pitch"
-#~ msgstr "tåbelig tone"
-
-#, fuzzy
-#~ msgid "cannot open file %s"
-#~ msgstr "kan ikke åbne fil: \"%s\""
-
-#, fuzzy
-#~ msgid "Incorrect lilypond version: %s (%s, %s)"
-#~ msgstr "fejlagtig lilypond-version: %s (%s, %s)"
-
-#~ msgid "no one to print a tremolos"
-#~ msgstr "der er ingen som kan skrive en tremolo"
-
-#, fuzzy
-#~ msgid "junking event: `%s'"
-#~ msgstr "Stryger forespørgslen: \"%s\""
-
-#~ msgid "no one to print a repeat brace"
-#~ msgstr "der er ingen som kan skrive et gentagelsestegn"
-
-#~ msgid "cannot find `%s' context"
-#~ msgstr "kan ikke finde omgivelsen \"%s\""
-
-#, fuzzy
-#~ msgid "no feasible line breaking found"
-#~ msgstr "Ingen mulig linjebrydning fandtes"
-
-#~ msgid "no one to print a percent"
-#~ msgstr "der er ingen som kan skrive et procent-tegn"
-
-#~ msgid "Creator: "
-#~ msgstr "Skaber: "
-
-#~ msgid "at "
-#~ msgstr "ved "
-
-#, fuzzy
-#~ msgid "in quotation: junking event %s"
-#~ msgstr "Stryger forespørgslen: \"%s\""
-
-#~ msgid "TFM header of `%s' has only %u word (s)"
-#~ msgstr "TFM-rubrik i \"%s\" har kun %u ord"
-
-#~ msgid ""
-#~ "%s: TFM file has %u parameters, which is more than the %u I can handle"
-#~ msgstr ""
-#~ "%s: TFM-fil har %u parametre, hvilket er mere end de %u jeg kan håndtere"
-
-#~ msgid "cannot find ascii character: %d"
-#~ msgstr "kan ikke finde ASCII-tegn: %d"
-
-#~ msgid "no one to print a tuplet start bracket"
-#~ msgstr "der findes ingen som kan skrive en startklamme for tuppel"
-
-#, fuzzy
-#~ msgid "unterminated trill spanner"
-#~ msgstr "uafsluttet tekstbro"
-
-#, fuzzy
-#~ msgid "identifier should have alphabetic characters only"
-#~ msgstr "Identificerer må kun indeholde alfabetiske tegn"
-
-#, fuzzy
-#~ msgid "more alternatives than repeats"
-#~ msgstr ""
-#~ "Flere alternativer end gentagelser. Stryger tiloversblevne alternativer."
-
-#, fuzzy
-#~ msgid "cannot find signature for music function"
-#~ msgstr "kan ikke finde omgivelsen \"%s\""
-
-#, fuzzy
-#~ msgid "Opening pipe `%s'"
-#~ msgstr "Renser \"%s\"..."
-
-#~ msgid "(ignored)"
-#~ msgstr "(ignoreret)"
-
-# hær er det spørg om rensning af en temporærkatalog
-#~ msgid "Cleaning %s..."
-#~ msgstr "Renser %s..."
-
-#, fuzzy
-#~ msgid "Usage: %s [OPTION]... [FILE]..."
-#~ msgstr "Brug: %s [FLAG]... FIL..."
-
-#, fuzzy
-#~ msgid "%s: skipping: `%s'"
-#~ msgstr "indstillingen findes ikke: '%s'"
-
-#, fuzzy
-#~ msgid "print version information"
-#~ msgstr "vis versionsnummer"
-
-#~ msgid "getopt says: `%s'"
-#~ msgstr "getopt siger: '%s'"
-
-#~ msgid "command exited with value %d"
-#~ msgstr "kommandoen afsluttede med værdi %d"
-
-#~ msgid "debug"
-#~ msgstr "fejlsøgningsuddata"
+"Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
 
-#~ msgid "define macro NAME [optional expansion EXP]"
-#~ msgstr "definér makro NAVN [valfri makroudvidelse EXP]"
+#: mensural-ligature-engraver.cc:321 mensural-ligature-engraver.cc:483
+msgid "unexpected case fall-through"
+msgstr ""
 
-#~ msgid "only pre-process"
-#~ msgstr "kun forbehandling"
+#: mensural-ligature-engraver.cc:332
+msgid "ligature with less than 2 heads -> skipping"
+msgstr ""
 
-#~ msgid "no such context: %s"
-#~ msgstr "omgivelse findes ikke: %s"
+#: mensural-ligature-engraver.cc:347
+msgid "can not determine pitch of ligature primitive -> skipping"
+msgstr ""
 
-#~ msgid "Processing `%s'..."
-#~ msgstr "Behandler \"%s\"..."
+#: mensural-ligature-engraver.cc:370
+msgid "prime interval within ligature -> skipping"
+msgstr ""
 
-#, fuzzy
-#~ msgid "Wrote `%s'"
-#~ msgstr "Skriver \"%s\"..."
+#: mensural-ligature-engraver.cc:380
+msgid "mensural ligature: duration none of L, B, S -> skipping"
+msgstr ""
 
-#, fuzzy
-#~ msgid "cannot dlopen: %s: %s"
-#~ msgstr "kan ikke åbne fil: \"%s\""
+#: mensural-ligature.cc:152
+#, c-format
+msgid "Mensural_ligature: thickness undefined on flexa %d; assuming 1.4"
+msgstr ""
 
-#, fuzzy
-#~ msgid "install package: %s or %s"
-#~ msgstr "kan ikke ændre \"%s\" til \"%s\""
+#: mensural-ligature.cc:166
+#, c-format
+msgid "Mensural_ligature: delta-pitch undefined on flexa %d; assuming 0"
+msgstr ""
 
-#, fuzzy
-#~ msgid "parsing AFM file: `%s'"
-#~ msgstr "Fejl ved tolkning af AFM-fil: \"%s\""
+#: mensural-ligature.cc:177
+#, c-format
+msgid "Mensural_ligature: flexa-width undefined on flexa %d; assuming 2.0"
+msgstr ""
 
-#~ msgid "checksum mismatch for font file: `%s'"
-#~ msgstr "fejlagtig checksum for skrifttypefil: \"%s\""
+#: mensural-ligature.cc:208
+msgid "Mensural_ligature: unexpected case fall-through"
+msgstr ""
 
-#~ msgid "does not match: `%s'"
-#~ msgstr "matcher ikke: \"%s\""
+#: mensural-ligature.cc:217
+msgid "Menusral_ligature: (join_left == 0)"
+msgstr ""
 
-#, fuzzy
-#~ msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
-#~ msgstr ""
-#~ " Genopbyg alle .afm-filer, og fjern alle .pk- og .tfm-filer. Kør igen med "
-#~ "-V for at vise skrifttypesøgestier."
+#: midi-item.cc:144
+#, c-format
+msgid "no such instrument: `%s'"
+msgstr "instrumentet findes ikke: \"%s\""
 
-#~ msgid "beam has less than two visible stems"
-#~ msgstr "bjælke har mindre end to synlige nodehalse"
+#: midi-item.cc:234
+msgid "silly duration"
+msgstr "tåbelig længde"
 
-#, fuzzy
-#~ msgid "adding lilypond directory: %s"
-#~ msgstr "kan ikke oprette katalog: \"%s\""
+#: midi-item.cc:247
+msgid "silly pitch"
+msgstr "tåbelig tone"
 
-#, fuzzy
-#~ msgid "cannot handle a percent repeat of length: %s"
-#~ msgstr ""
-#~ "Véd ikke hvordan en procenttegnsgentagelse (percent) af denne længde skal "
-#~ "håndteres."
+#: music-output-def.cc:113
+#, c-format
+msgid "can't find `%s' context"
+msgstr "kan ikke finde omgivelsen \"%s\""
 
-#~ msgid "Separation_item:  I've been drinking too much"
-#~ msgstr "Separation_item: Jeg har drukket for meget"
+#: music.cc:159
+#, c-format
+msgid "Transposition by %s makes accidental larger than two"
+msgstr "Transponering med %s medfører løst fortegn større end to"
 
-#~ msgid "need integer number arg"
-#~ msgstr "behøver heltalsargument"
+#: my-lily-lexer.cc:142
+#, c-format
+msgid "Identifier name is a keyword: `%s'"
+msgstr "Identificerernavn er et nøgleord: \"%s\""
 
-#, fuzzy
-#~ msgid "suspect duration in beam: %s"
-#~ msgstr "ikke en tidslængde: %d"
+#: my-lily-lexer.cc:162
+#, c-format
+msgid "error at EOF: %s"
+msgstr "fejl ved filslutning: %s"
 
-#, fuzzy
-#~ msgid "syntax error: cannot back up"
-#~ msgstr "ikke-fatal fejl: "
+#: my-lily-parser.cc:44
+msgid "Parsing..."
+msgstr "Tolker..."
 
-#, fuzzy
-#~ msgid "Stack now"
-#~ msgstr "spor "
+#: my-lily-parser.cc:54
+msgid "Braces don't match"
+msgstr "Klammer passer ikke"
 
-#, fuzzy
-#~ msgid "Reading a token: "
-#~ msgstr "Renser \"%s\"..."
+#: note-collision.cc:340
+msgid "Too many clashing notecolumns.  Ignoring them."
+msgstr "For mange overlappende nodekolonner. Ignorerer dem."
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s"
-#~ msgstr "ikke-fatal fejl: "
+#: note-head.cc:134
+msgid "Symbol not found, "
+msgstr "Symbol ikke fundet, "
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s"
-#~ msgstr "ikke-fatal fejl: "
+#: output-property-music-iterator.cc:20 request-chord-iterator.cc:76
+#, c-format
+msgid "Junking request: `%s'"
+msgstr "Stryger forespørgslen: \"%s\""
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s or %s"
-#~ msgstr "ikke-fatal fejl: "
+#: paper-def.cc:122
+#, c-format
+msgid "paper output to `%s'..."
+msgstr "papirsuddata til \"%s\"..."
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s"
-#~ msgstr "ikke-fatal fejl: "
+#: paper-outputter.cc:57
+msgid ", at "
+msgstr ", ved "
 
-#, fuzzy
-#~ msgid "syntax error; also memory exhausted"
-#~ msgstr "ikke-fatal fejl: "
+#: paper-score.cc:77
+#, c-format
+msgid "Element count %d (spanners %d) "
+msgstr ""
 
-#, fuzzy
-#~ msgid "syntax error"
-#~ msgstr "ikke-fatal fejl: "
+#: paper-score.cc:82
+msgid "Preprocessing elements..."
+msgstr "Forbehandler element..."
 
-#, fuzzy
-#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
-#~ msgstr "kan ikke finde skrifttype: \"%s\""
+#: paper-score.cc:115
+msgid "Outputting Score, defined at: "
+msgstr "Udskriver partitur, defineret ved: "
 
-#, fuzzy
-#~ msgid "unknown bar glyph: `~S'"
-#~ msgstr "ukendt oversætter: \"%s\""
+#: parse-scm.cc:80
+msgid "GUILE signaled an error for the expression begining here"
+msgstr "GUILE signalerede en fejl for udtrykket, der begynder her"
 
-#, fuzzy
-#~ msgid "Extracting fonts to %s..."
-#~ msgstr "kan ikke oprette katalog: \"%s\""
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_string_  = get_change ()->change_to_id_string_;
+#.
+#: part-combine-music-iterator.cc:116
+#, c-format
+msgid "I'm one myself: `%s'"
+msgstr "Jeg er selv én: \"%s\""
 
-#, fuzzy
-#~ msgid "Writing %s..."
-#~ msgstr "Skriver \"%s\"..."
+#: part-combine-music-iterator.cc:119
+#, c-format
+msgid "none of these in my family: `%s'"
+msgstr "ingen af disse i min familie: \"%s\""
 
-#, fuzzy
-#~ msgid "Second argument must be pitch list."
-#~ msgstr "Andet argument skal være et symbol"
+#: percent-repeat-engraver.cc:116
+msgid "Don't know how to handle a percent repeat of this length."
+msgstr "Véd ikke hvordan en procenttegnsgentagelse (percent) af denne længde skal håndteres."
 
-#~ msgid "Have to be in Lyric mode for lyrics"
-#~ msgstr "Skal være i teksttilstand (Lyric mode) for tekst"
+#: percent-repeat-iterator.cc:53
+msgid "no one to print a percent"
+msgstr "der er ingen som kan skrive et procent-tegn"
 
-#~ msgid "Expecting string as script definition"
-#~ msgstr "Forventer streng som skriptdefinition"
+#: performance.cc:51
+msgid "Track ... "
+msgstr "Spor... "
 
-#~ msgid "Have to be in Note mode for notes"
-#~ msgstr "Skal være i nodetilstand (Note mode) for noder"
+#: performance.cc:83
+msgid "Creator: "
+msgstr "Skaber: "
 
-#~ msgid "Have to be in Chord mode for chords"
-#~ msgstr "Skal være i akkordtilstand (Chord mode) for akkord"
+#: performance.cc:103
+msgid "at "
+msgstr "ved "
 
-#, fuzzy
-#~ msgid "programming error: "
-#~ msgstr "programmeringsfejl: "
+#: performance.cc:114
+#, c-format
+msgid "from musical definition: %s"
+msgstr "fra musikdefinition: %s"
 
-#, fuzzy
-#~ msgid "Programming error: "
-#~ msgstr "programmeringsfejl: "
+#: performance.cc:169
+#, c-format
+msgid "MIDI output to `%s'..."
+msgstr "MIDI-uddata til \"%s\"..."
 
-#~ msgid "I'm one myself"
-#~ msgstr "Jeg er selv én"
+#: phrasing-slur-engraver.cc:117
+msgid "unterminated phrasing slur"
+msgstr "uafsluttet fraseringsbue"
 
-#~ msgid "Huh?  Got %d, expected %d characters"
-#~ msgstr "Øh? Fik %d, forventede %d tegn"
+#: phrasing-slur-engraver.cc:132
+msgid "can't find start of phrasing slur"
+msgstr "kan ikke finde start på fraseringsbue"
 
-#~ msgid "No volta spanner to end"
-#~ msgstr "Ingen volte-bro at afslutte"
+#: piano-pedal-engraver.cc:230 piano-pedal-engraver.cc:245
+#: piano-pedal-engraver.cc:300 piano-pedal-performer.cc:82
+#, c-format
+msgid "can't find start of piano pedal: `%s'"
+msgstr "kan ikke finde start på pianopedal: \"%s\""
 
-#~ msgid "Also have a stopped spanner.  Giving up."
-#~ msgstr "Har også en stoppet bro. Giver op."
+#: piano-pedal-engraver.cc:405
+msgid "unterminated pedal bracket"
+msgstr ""
 
-#~ msgid "Missing end quote"
-#~ msgstr "Mangler slutcitationstegn"
+#: pitch.cc:25
+msgid "Pitch arguments out of range"
+msgstr "Toneargument udenfor intervallet"
 
-#~ msgid "EXT"
-#~ msgstr "FMT"
+#: porrectus.cc:35
+msgid "(left_head == 0)"
+msgstr ""
 
-#~ msgid "FIXME: key change merge"
-#~ msgstr "FIX: tonartsskiftsfletning"
+#: porrectus.cc:46
+msgid "undefined left_head"
+msgstr ""
 
-#, fuzzy
-#~ msgid "kpathsea cannot find %s file: `%s'"
-#~ msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\""
+#: porrectus.cc:65
+msgid "(right_head == 0)"
+msgstr ""
 
-#, fuzzy
-#~ msgid "kpathsea cannot find file: `%s'"
-#~ msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\""
+#: porrectus.cc:76
+msgid "undefined right_head"
+msgstr ""
 
-#, fuzzy
-#~ msgid "set option, use -e '(ly:option-usage)' for help"
-#~ msgstr "sæt alternativer, brug -e '(ly-option-usage)' for hjælp"
+#: porrectus.cc:96
+msgid "junking lonely porrectus"
+msgstr ""
 
-#, fuzzy
-#~ msgid "EXTs"
-#~ msgstr "FMT"
+#: porrectus.cc:106
+msgid "porrectus style undefined; using mensural"
+msgstr ""
 
-#, fuzzy
-#~ msgid "generate DVI"
-#~ msgstr "lav PDF-uddata"
+#: porrectus.cc:251
+msgid "ascending vaticana style porrectus"
+msgstr ""
 
-#, fuzzy
-#~ msgid "generate TeX"
-#~ msgstr "lav PDF-uddata"
+#: property-iterator.cc:64
+#, c-format
+msgid "Not a grob name, `%s'."
+msgstr ""
 
-#, fuzzy
-#~ msgid "kpathsea can not find %s file: `%s'"
-#~ msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\""
+#: rest-collision.cc:186
+msgid "too many colliding rests"
+msgstr "for mange kolliderende pauser"
 
-#, fuzzy
-#~ msgid "kpathsea can not find AFM file `%s'"
-#~ msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\""
+#: scm-option.cc:44
+msgid "lilypond -e EXPR means:"
+msgstr ""
 
-#, fuzzy
-#~ msgid "kpathsea can not find TFM file: `%s'"
-#~ msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\""
+#: scm-option.cc:46
+msgid "  Evalute the Scheme EXPR before parsing any .ly files."
+msgstr ""
 
-#, fuzzy
-#~ msgid "Converting to `~a.ps'..."
-#~ msgstr "Skriver \"%s\"..."
+#: scm-option.cc:48
+msgid "  Multiple -e options may be given, they will be evaluated sequentially."
+msgstr ""
 
-#~ msgid "find pfa fonts used in FILE"
-#~ msgstr "find pfa-skrifttyper brugt i FIL"
+#: scm-option.cc:50
+msgid "  The function ly-set-option allows for access to some internal variables."
+msgstr ""
 
-#~ msgid "add DIR to LilyPond's search path"
-#~ msgstr "tilføj KATALOG til LilyPonds søgesti"
+#: scm-option.cc:52
+msgid "Usage: lilypond -e \"(ly-set-option SYMBOL VAL)\""
+msgstr ""
 
-# %s er programmets navn
-#~ msgid "keep all output, output to directory %s.dir"
-#~ msgstr "behold al uddata, udskrivo i kataloget %s.dir"
+#: scm-option.cc:54
+msgid "Where SYMBOL VAL pair is any of:"
+msgstr ""
 
-#~ msgid "do not run LilyPond"
-#~ msgstr "kør ikke LilyPond"
+#: scm-option.cc:122
+msgid "Unknown internal option!"
+msgstr ""
 
-#~ msgid "produce MIDI output only"
-#~ msgstr "lav kun MIDI-uddata"
+#: score-engraver.cc:102
+#, c-format
+msgid "can't find `%s'"
+msgstr "kan ikke finde: '%s'"
 
-#~ msgid "generate PDF output"
-#~ msgstr "lav PDF-uddata"
+#: score-engraver.cc:103
+msgid "Fonts have not been installed properly.  Aborting"
+msgstr ""
 
-#, fuzzy
-#~ msgid "generate PS.GZ"
-#~ msgstr "lav PDF-uddata"
+#: score-engraver.cc:207
+#, c-format
+msgid "unbound spanner `%s'"
+msgstr "ubunden bro \"%s\""
 
-#~ msgid "change global setting KEY to VAL"
-#~ msgstr "ændr global indstilling NØGLE til VÆRDI"
+#: score.cc:92
+#, c-format
+msgid "stack size cur %d, max %d\n"
+msgstr ""
 
-#~ msgid "LilyPond crashed (signal %d)."
-#~ msgstr "LilyPond gik ned (signal %d)."
+#: score.cc:109
+msgid "Interpreting music..."
+msgstr "Tolker musik..."
 
-#, fuzzy
-#~ msgid "Continuing..."
-#~ msgstr "Kør %s..."
+#: score.cc:122
+msgid "Need music in a score"
+msgstr "Behøver musik i partitur"
 
-#~ msgid "Analyzing %s..."
-#~ msgstr "Analyserer %s..."
+#. should we? hampers debugging.
+#: score.cc:135
+msgid "Errors found/*, not processing score*/"
+msgstr "Fejl fundne/*, behandler ikke partitur*/"
 
-#~ msgid "no LilyPond output found for `%s'"
-#~ msgstr "ingen lilyponduddata fundet for '%s'"
+#: score.cc:142
+#, c-format
+msgid "elapsed time: %.2f seconds"
+msgstr "tidsforbrug: %.2f sekunder"
 
-#~ msgid "no files specified on command line"
-#~ msgstr "ingen filer angivne på kommandolinjen."
+#: script-engraver.cc:66
+#, c-format
+msgid "Don't know how to interpret articulation `%s'"
+msgstr "Kan ikke tolke artikulering \"%s\""
 
-# hær er det spørg om skrivning til en fil (første parametern er t.ex
-# DVI, LATEX, MIDI, TEX)
-#, fuzzy
-#~ msgid "%s output to <stdout>..."
-#~ msgstr "%s udskrevet til \"%s\"..."
+#. this shouldn't happen, but let's continue anyway.
+#: separation-item.cc:53 separation-item.cc:101
+msgid "Separation_item:  I've been drinking too much"
+msgstr "Separation_item: Jeg har drukket for meget"
 
-# hær er det spørg om skrivning til en fil (første parametern er t.ex
-# DVI, LATEX, MIDI, TEX)
-#, fuzzy
-#~ msgid "%s output to %s..."
-#~ msgstr "%s udskrevet til \"%s\"..."
+#: simple-spacer.cc:254
+#, c-format
+msgid "No spring between column %d and next one"
+msgstr ""
 
-#, fuzzy
-#~ msgid "cannot find file: `%s.%s'"
-#~ msgstr "kan ikke finde fil: \"%s\""
+#: slur-engraver.cc:140
+msgid "unterminated slur"
+msgstr "uafsluttet legatobue"
 
-#, fuzzy
-#~ msgid "DIM"
-#~ msgstr "KATALOG"
+#. How to shut up this warning, when Voice_devnull_engraver has
+#. eaten start request?
+#: slur-engraver.cc:157
+msgid "can't find start of slur"
+msgstr "kan ikke finde start på legatobue"
 
-#, fuzzy
-#~ msgid "write dependencies"
-#~ msgstr "tilføj KATALOG efter afhængigheder"
+#: slur.cc:53
+msgid "Putting slur over rest."
+msgstr "Sætter legatobue over pause."
 
-#, fuzzy
-#~ msgid "prepend PREF before each -M dependency"
-#~ msgstr "tilføj KATALOG efter afhængigheder"
+#: slur.cc:424
+msgid "Slur over rest?"
+msgstr "Legatobue over pause?"
 
-#, fuzzy
-#~ msgid "do not run lilypond"
-#~ msgstr "kør ikke LilyPond"
+#: source-file.cc:65
+#, c-format
+msgid "Huh?  Got %d, expected %d characters"
+msgstr "Øh? Fik %d, forventede %d tegn"
 
-#~ msgid "write Makefile dependencies for every input file"
-#~ msgstr "skriv Makefile-afhængigheder for hver inddatafil"
+#: spacing-spanner.cc:379
+#, c-format
+msgid "Global shortest duration is %s\n"
+msgstr ""
 
-#~ msgid "invalid value: `%s'"
-#~ msgstr "ugyldig værdi: '%s'"
+#: spring-smob.cc:32
+#, c-format
+msgid "#<spring smob d= %f>"
+msgstr ""
 
-#, fuzzy
-#~ msgid "Writing HTML menu `%s'"
-#~ msgstr "Skriver \"%s\"..."
+#: staff-symbol.cc:62
+msgid "staff symbol: indentation yields beyond end of line"
+msgstr ""
 
-#~ msgid "programming error: %s (Continuing; cross thumbs)\n"
-#~ msgstr "programfejl: %s (Fortsætter, kryds fingrene)\n"
+#: stem-engraver.cc:117
+#, c-format
+msgid "Adding note head to incompatible stem (type = %d)"
+msgstr "Tilføjer nodehoved til inkompatibel nodehals (type = %d)"
 
-#~ msgid "Beam has less than two stems. Removing beam."
-#~ msgstr "Bjælke har mindre end to nodehalse. Fjerner bjælke."
+#: stem.cc:118
+msgid "Weird stem size; check for narrow beams"
+msgstr "Mærkelig nodehalsstørrelse; tjek for smalle bjælker"
 
-#~ msgid ""
-#~ "Not sure that we can find a nice beam slope (no viable initial "
-#~ "configuration found)."
-#~ msgstr ""
-#~ "Ikke sikker på at vi kan finde en pæn hældning på bjælken (ingen brugelig "
-#~ "initiel konfiguration fundet)."
+#: streams.cc:34
+#, c-format
+msgid "can't create directory: `%s'"
+msgstr "kan ikke oprette katalog: \"%s\""
 
-#~ msgid "NaN"
-#~ msgstr "-"
+#: streams.cc:48
+msgid "Error syncing file (disk full?)"
+msgstr "Fejl ved synkning af fil (disken fuld?)"
 
-#, fuzzy
-#~ msgid ""
-#~ "Nothing to connect extender to on the left.  Ignoring extender event."
-#~ msgstr ""
-#~ "Der er ingenting at forbinde udvideren mod til venstre. Ignorerer ønsket "
-#~ "om udvider"
+#: system.cc:125
+#, c-format
+msgid "Element count %d."
+msgstr "Elementantal %d."
 
-#, fuzzy
-#~ msgid "Nothing to connect hyphen to on the left.  Ignoring hyphen event."
-#~ msgstr ""
-#~ "Der er ingenting at forbinde bindestregen med til venstre. Ignorerer "
-#~ "bindestregsforespørgslen."
+#: system.cc:377
+#, fuzzy, c-format
+msgid "Grob count %d "
+msgstr "Elementantal %d "
 
-#~ msgid "Score contains errors; will not process it"
-#~ msgstr "Partitur indholder fejl; vil ikke behandle det"
+#: system.cc:391
+msgid "Calculating column positions..."
+msgstr "Beregner kolonnepositioner..."
 
-#~ msgid "Now processing: `%s'"
-#~ msgstr "Behandler nu: \"%s\""
+#: text-spanner-engraver.cc:92
+msgid "can't find start of text spanner"
+msgstr "kan ikke finde start på tekstbro"
 
-#~ msgid "lyrics found without any matching notehead"
-#~ msgstr "tekst fundet uden noget tilhørende nodehoved"
+#: text-spanner-engraver.cc:112
+msgid "already have a text spanner"
+msgstr "har allerede en tekstbro"
 
-#~ msgid "Huh? Melismatic note found to have associated lyrics."
-#~ msgstr "Øh? Melismatisk node har tilhørende tekst."
+#: text-spanner-engraver.cc:167
+msgid "unterminated text spanner"
+msgstr "uafsluttet tekstbro"
 
-#, fuzzy
-#~ msgid "use output format EXT"
-#~ msgstr "brug uddataformat FMT (scm, ps, tex eller as)"
+#: text-spanner.cc:130
+msgid "Text_spanner too small"
+msgstr "Tekst_bro for lille"
 
-#~ msgid "prepend DIR to dependencies"
-#~ msgstr "tilføj KATALOG efter afhængigheder"
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#: tfm-reader.cc:108
+#, c-format
+msgid "TFM header of `%s' has only %u word (s)"
+msgstr "TFM-rubrik i \"%s\" har kun %u ord"
 
-#~ msgid "inhibit file output naming and exporting"
-#~ msgstr "hindr navngivning af filuddata og eksportering"
+#: tfm-reader.cc:142
+#, c-format
+msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
+msgstr "%s: TFM-fil har %u parametre, hvilket er mere end de %u jeg kan håndtere"
 
-#~ msgid ""
-#~ "LilyPond is a music typesetter.  It produces beautiful sheet music\n"
-#~ "using a high level description file as input.  LilyPond is part of \n"
-#~ "the GNU Project.\n"
-#~ msgstr ""
-#~ "LilyPond er en musiktypesætter. Den producerer smukke noder fra en\n"
-#~ "højniveaubeskrivning af musikken i en fil. LilyPond er en del af\n"
-#~ "GNU-projektet.\n"
+#: tfm.cc:83
+#, c-format
+msgid "can't find ascii character: %d"
+msgstr "kan ikke finde ASCII-tegn: %d"
 
-#~ msgid "GNU LilyPond -- The music typesetter"
-#~ msgstr "GNU LilyPond -- Musiktypesætteren"
+#: tie-engraver.cc:216
+msgid "lonely tie"
+msgstr "ensom bindebue"
 
-#~ msgid "silly duration"
-#~ msgstr "tåbelig længde"
+#: tie-performer.cc:161
+msgid "No ties were created!"
+msgstr "Ingen bindebuer blev lavet!"
 
-#~ msgid "paper output to `%s'..."
-#~ msgstr "papirsuddata til \"%s\"..."
+#: time-scaled-music-iterator.cc:25
+msgid "no one to print a tuplet start bracket"
+msgstr "der findes ingen som kan skrive en startklamme for tuppel"
 
-#~ msgid "Outputting Score, defined at: "
-#~ msgstr "Udskriver partitur, defineret ved: "
+#: translator-ctors.cc:53
+#, c-format
+msgid "unknown translator: `%s'"
+msgstr "ukendt oversætter: \"%s\""
 
-#~ msgid "I'm one myself: `%s'"
-#~ msgstr "Jeg er selv én: \"%s\""
+#: translator-def.cc:87
+msgid "Program has no such type"
+msgstr "Programmet har ingen sådan type"
 
-#~ msgid "none of these in my family: `%s'"
-#~ msgstr "ingen af disse i min familie: \"%s\""
+#: translator-def.cc:93
+#, c-format
+msgid "Already contains: `%s'"
+msgstr "Indholder allerede: \"%s\""
 
-#~ msgid "from musical definition: %s"
-#~ msgstr "fra musikdefinition: %s"
+#: translator-def.cc:94
+#, c-format
+msgid "Not adding translator: `%s'"
+msgstr "Tilføjer ikke oversætter: \"%s\""
 
-#~ msgid "cannot find start of phrasing slur"
-#~ msgstr "kan ikke finde start på fraseringsbue"
+#: translator-def.cc:209
+#, c-format
+msgid "can't find: `%s'"
+msgstr "kan ikke finde: \"%s\""
 
-#~ msgid "unbound spanner `%s'"
-#~ msgstr "ubunden bro \"%s\""
+#: translator-group.cc:159
+#, c-format
+msgid "can't find or create `%s' called `%s'"
+msgstr "kan ikke finde eller oprette \"%s\" kaldet \"%s\""
 
-#~ msgid "Error syncing file (disk full?)"
-#~ msgstr "Fejl ved synkning af fil (disken fuld?)"
+#: translator-group.cc:244
+#, c-format
+msgid "can't find or create: `%s'"
+msgstr "kan ikke finde eller oprette: \"%s\""
 
-#~ msgid "No ties were created!"
-#~ msgstr "Ingen bindebuer blev lavet!"
+#: volta-engraver.cc:111
+msgid "No volta spanner to end"
+msgstr "Ingen volte-bro at afslutte"
 
-#~ msgid "Already contains: `%s'"
-#~ msgstr "Indholder allerede: \"%s\""
+#: volta-engraver.cc:121
+msgid "Already have a volta spanner.  Stopping that one prematurely."
+msgstr "Har allerede en volte-bro. Stopper denne for tidligt."
 
-#~ msgid "Not adding translator: `%s'"
-#~ msgstr "Tilføjer ikke oversætter: \"%s\""
+#: volta-engraver.cc:125
+msgid "Also have a stopped spanner.  Giving up."
+msgstr "Har også en stoppet bro. Giver op."
 
+#: parser.yy:434
 #, fuzzy
-#~ msgid "First argument must be a procedure taking one argument"
-#~ msgstr "Første argument skal være en procedure som tager 1 argument"
+msgid "Identifier should have alphabetic characters only"
+msgstr "Identificerer må kun indeholde alfabetiske tegn"
 
-#~ msgid "Expecting musical-pitch value"
-#~ msgstr "Forventer nodeværdi"
+#: parser.yy:729
+msgid "More alternatives than repeats.  Junking excess alternatives."
+msgstr "Flere alternativer end gentagelser. Stryger tiloversblevne alternativer."
 
-#~ msgid "Must have duration object"
-#~ msgstr "Skal have tidslængdeobjekt"
-
-#~ msgid "Fetch and rebuild from latest source package"
-#~ msgstr "Hent og byg om fra seneste kildekodepakke"
-
-#~ msgid "unpack and build in DIR [%s]"
-#~ msgstr "udpak og byg i DIR [%s]"
+#: parser.yy:798
+msgid "Second argument must be a symbol"
+msgstr "Andet argument skal være et symbol"
 
-#~ msgid "execute COMMAND, subtitute:"
-#~ msgstr "kør COMMAND, erstat:"
+#: parser.yy:803
+#, fuzzy
+msgid "First argument must be a procedure taking one argument"
+msgstr "Første argument skal være en procedure som tager 1 argument"
 
-#~ msgid "%b: build root"
-#~ msgstr "%b: rod for opbygning"
+#: parser.yy:1380
+msgid "Expecting string as script definition"
+msgstr "Forventer streng som skriptdefinition"
 
-#~ msgid "%n: package name"
-#~ msgstr "%n: pakkenavn"
+#: parser.yy:1390
+msgid "Can't specify direction for this request"
+msgstr "Kan ikke angive retning for denne forespørgsel"
 
-#~ msgid "%r: release directory"
-#~ msgstr "%r: katalog for programudgivelse"
+#: parser.yy:1516
+msgid "Expecting musical-pitch value"
+msgstr "Forventer nodeværdi"
 
-#~ msgid "%t: tarball"
-#~ msgstr "%t: tarball"
+#: parser.yy:1527
+msgid "Must have duration object"
+msgstr "Skal have tidslængdeobjekt"
 
-#~ msgid "%v: package version"
-#~ msgstr "%v: pakkeversion"
+#: parser.yy:1536 parser.yy:1544
+msgid "Have to be in Lyric mode for lyrics"
+msgstr "Skal være i teksttilstand (Lyric mode) for tekst"
 
-#~ msgid "keep all output, and name the directory %s"
-#~ msgstr "behold al uddata, og døb kataloget til %s"
+#: parser.yy:1715 parser.yy:1768
+#, c-format
+msgid "not a duration: %d"
+msgstr "ikke en tidslængde: %d"
 
-#~ msgid "upon failure notify EMAIL[,EMAIL]"
-#~ msgstr "ved fejl, underret EMAIL[,EMAIL]"
+#: parser.yy:1855
+msgid "Have to be in Note mode for notes"
+msgstr "Skal være i nodetilstand (Note mode) for noder"
 
-#~ msgid "remove previous build"
-#~ msgstr "fjern foregående bygning"
+#: parser.yy:1954
+msgid "Have to be in Chord mode for chords"
+msgstr "Skal være i akkordtilstand (Chord mode) for akkord"
 
-#~ msgid "fetch and build URL [%s]"
-#~ msgstr "hent og byg URL [%s]"
+#: parser.yy:2134
+msgid "need integer number arg"
+msgstr "behøver heltalsargument"
 
-#~ msgid "latest is: %s"
-#~ msgstr "seneste er: %s"
+#: parser.yy:2206
+msgid "Suspect duration found following this beam"
+msgstr ""
 
-#~ msgid "Fetching `%s'..."
-#~ msgstr "Henter \"%s\"..."
+#: lexer.ll:178
+msgid "EOF found inside a comment"
+msgstr "filslutning fundet inden i en kommentar"
 
-#~ msgid "Building `%s'..."
-#~ msgstr "Bygger \"%s\"..."
+#: lexer.ll:192
+msgid "\\maininput disallowed outside init files"
+msgstr "\\maininput forbudt udenfor init-filer"
 
-#~ msgid "invalid subtraction: not part of chord: %s"
-#~ msgstr "ugyldig subtraktion: ikke del af akkord: %s"
+#: lexer.ll:216
+#, c-format
+msgid "wrong or undefined identifier: `%s'"
+msgstr "fejlagtig eller udefineret identificerer: \"%s\""
 
-# "pitch" hær skal alltså være en ton i et akkord
-#~ msgid "invalid inversion pitch: not part of chord: %s"
-#~ msgstr "ugyldig tone for inversion: ikke del af en akkord: %s"
+#. backup rule
+#: lexer.ll:225
+msgid "Missing end quote"
+msgstr "Mangler slutcitationstegn"
 
-#~ msgid "This was the other key definition."
-#~ msgstr "Dette var den anden tonartsdefinition."
+#. backup rule
+#: lexer.ll:247 lexer.ll:251
+msgid "white expected"
+msgstr "forventede mellemrum"
 
-#~ msgid ", at "
-#~ msgstr ", ved "
+#: lexer.ll:260
+msgid "Can't evaluate Scheme in safe mode"
+msgstr "Kan ikke evaluere Scheme i sikker tilstand"
 
-#~ msgid "Pitch arguments out of range"
-#~ msgstr "Toneargument udenfor intervallet"
+#: lexer.ll:364
+#, fuzzy
+msgid "Brace found at end of lyric.  Did you forget a space?"
+msgstr "Krølleparentes fundet i slutning af tekst. Glemte du et mellemrum?"
 
-#~ msgid "Putting slur over rest."
-#~ msgstr "Sætter legatobue over pause."
+#: lexer.ll:480
+#, c-format
+msgid "invalid character: `%c'"
+msgstr "ugyldigt tegn: \"%c\""
 
-#~ msgid "Slur over rest?"
-#~ msgstr "Legatobue over pause?"
+#: lexer.ll:566
+#, c-format
+msgid "unknown escaped string: `\\%s'"
+msgstr "ukendt \"escaped\" streng: \"\\%s\""
 
-#~ msgid "Text_spanner too small"
-#~ msgstr "Tekst_bro for lille"
+#: lexer.ll:657
+#, fuzzy, c-format
+msgid "Incorrect lilypond version: %s (%s, %s)"
+msgstr "fejlagtig lilypond-version: %s (%s, %s)"
 
-#~ msgid "Cannot specify direction for this request"
-#~ msgstr "Kan ikke angive retning for denne forespørgsel"
+#: lexer.ll:658
+#, fuzzy
+msgid "Consider updating the input with the convert-ly script"
+msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\""
 
 #~ msgid "Generate .dvi with LaTeX for LilyPond"
 #~ msgstr "Generér .dvi med LaTeX for LilyPond"
@@ -2855,16 +1481,25 @@ msgstr ""
 #~ msgid "%s is far from completed.  Not all constructs are recognised."
 #~ msgstr "%s er langt fra færdig, og kan ikke genkende alle konstruktioner."
 
+#~ msgid "Cleaning `%s'..."
+#~ msgstr "Renser \"%s\"..."
+
 #~ msgid "EOF in a string"
 #~ msgstr "EOF i en streng"
 
 # det handlar om mmap hær
-#~ msgid "cannot map file"
+#~ msgid "can't map file"
 #~ msgstr "kan ikke lave \"mmap\" på filen"
 
 #~ msgid "<stdin>"
 #~ msgstr "<stdin>"
 
+#~ msgid "programming error: "
+#~ msgstr "programmeringsfejl: "
+
+#~ msgid "can't find start of beam"
+#~ msgstr "kan ikke finde start på bjælke"
+
 #~ msgid "weird beam vertical offset"
 #~ msgstr "underlig lodret afstand for bjælke"
 
@@ -2898,6 +1533,9 @@ msgstr ""
 #~ msgid "ly_music_name (): Not a music expression"
 #~ msgstr "ly_music_name (): Ikke et musikudtryk"
 
+#~ msgid "writing header field `%s' to `%s'..."
+#~ msgstr "skriver rubrikfelt \"%s\" til \"%s\"..."
+
 #~ msgid ""
 #~ "`%s' is deprecated.  Use\n"
 #~ " \\property %s.%s \\override #'%s = #%s"
@@ -2911,12 +1549,11 @@ msgstr ""
 #~ msgid "too many notes for rest collision"
 #~ msgstr "for mange noder for pausesammenstød"
 
-#~ msgid ""
-#~ "Cannot find property type-check for `%s'.  Perhaps you made a typing "
-#~ "error? Doing assignment anyway."
-#~ msgstr ""
-#~ "Kan ikke finde egenskabstypekontrol for \"%s\". Måske har du lavet en "
-#~ "tastefejl? Laver tildeling alligevel."
+#~ msgid "Scheme options:"
+#~ msgstr "Scheme-flag:"
+
+#~ msgid "Can't find property type-check for `%s'.  Perhaps you made a typing error? Doing assignment anyway."
+#~ msgstr "Kan ikke finde egenskabstypekontrol for \"%s\". Måske har du lavet en tastefejl? Laver tildeling alligevel."
 
 #~ msgid "ly-get-trans-property: expecting a Translator_group argument"
 #~ msgstr "ly-get-trans-property: forventede et Translator_group-argument"
@@ -2930,9 +1567,21 @@ msgstr ""
 #~ msgid "#32 in quarter: %d"
 #~ msgstr "#32 i fjerdedel: %d"
 
+#~ msgid "LY output to `%s'..."
+#~ msgstr "LY-uddata til \"%s\"..."
+
 #~ msgid "track %d:"
 #~ msgstr "spor %d:"
 
+#~ msgid "Processing..."
+#~ msgstr "Behandler..."
+
+#~ msgid "Creating voices..."
+#~ msgstr "Laver stemmer..."
+
+#~ msgid "track "
+#~ msgstr "spor "
+
 #~ msgid "NOT Filtering tempo..."
 #~ msgstr "Filtrerer IKKE tempo..."
 
@@ -2971,31 +1620,34 @@ msgstr ""
 #~ msgid "enable debugging output"
 #~ msgstr "aktivér fejlsøgningsuddata"
 
-#~ msgid "do not output tuplets, double dots or rests, smallest is 32"
+#~ msgid "don't output tuplets, double dots or rests, smallest is 32"
 #~ msgstr "udskriv ikke tupler, dobbeltpunktninger eller pauser, mindste er 32"
 
 #~ msgid "set FILE as default output"
 #~ msgstr "sæt FIL som standarduddata"
 
-#~ msgid "do not output tuplets"
+#~ msgid "don't output tuplets"
 #~ msgstr "udskriv ikke tupler"
 
 #~ msgid "be quiet"
 #~ msgstr "vær stille"
 
-#~ msgid "do not output rests or skips"
+#~ msgid "don't output rests or skips"
 #~ msgstr "udskriv ikke pauser eller hop"
 
 #~ msgid "set smallest duration"
 #~ msgstr "indstil mindste længde"
 
-#~ msgid "do not timestamp the output"
+#~ msgid "don't timestamp the output"
 #~ msgstr "tidsstempl ikke uddata"
 
+#~ msgid "be verbose"
+#~ msgstr "vær udførlig"
+
 #~ msgid "assume no double dotted notes"
 #~ msgstr "antag ingen dobbeltpunktede noder"
 
-#~ msgid "Usage: %s [OPTIONS]... [FILE]"
+#~ msgid "Usage: %s [OPTION]... [FILE]"
 #~ msgstr "Brug: %s [FLAG]... [FIL]"
 
 #~ msgid "Translate MIDI-file to lilypond"
@@ -3031,7 +1683,7 @@ msgstr ""
 #~ msgid "invalid number of tracks"
 #~ msgstr "ugyldigt antal spor"
 
-#~ msgid "cannot handle non-metrical time"
+#~ msgid "can't handle non-metrical time"
 #~ msgstr "kan ikke håndtere ikke-metrisk tid"
 
 #~ msgid "Junking note-end event: channel = %d, pitch = %d"
index b70463f054ad24cac8fd4b3c662e6191077a63cd..21b0d49c1503a81ac7ca6f27b2607eb5fe0e3a7e 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -1,22 +1,22 @@
 # German Translation of lilypond.
-# Copyright (C) 2003 Han-Wen Nienhuys, Jan Nieuwenhuizen
+# Copyright (C) 2013 Han-Wen Nienhuys, Jan Nieuwenhuizen
 # This file is distributed under the same license as the lilypond package.
 # Erwin Dieterich <bamse@gmx.de>, 1999
 # Roland Stigge <stigge@antcom.de>, 2003, 2004, 2005, 2006, 2007
-# Till Paala <till.rettig@gmx.de>, 2007, 2008, 2009, 2010, 2011, 2012.
-#
+# Till Paala <till.rettig@gmx.de>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.15.95\n"
+"Project-Id-Version: lilypond 2.17.29\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2012-08-11 14:29+0200\n"
-"PO-Revision-Date: 2012-08-15 13:06+0300\n"
+"POT-Creation-Date: 2013-10-20 10:42+0100\n"
+"PO-Revision-Date: 2013-11-26 22:18+0200\n"
 "Last-Translator: Till Paala <till.rettig@gmx.de>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: book_base.py:26
 #, python-format
@@ -27,20 +27,20 @@ msgstr "Datei `%s' nicht gefunden"
 msgid "Output function not implemented"
 msgstr "Ausgabefunktion nicht implementiert"
 
-#: book_latex.py:170
+#: book_latex.py:174
 msgid "cannot find \\begin{document} in LaTeX document"
 msgstr "\\begin{document} im LaTeX-Dokument kann nicht gefunden werden"
 
-#: book_latex.py:188
+#: book_latex.py:190
 #, python-format
 msgid "Running `%s' on file `%s' to detect default page settings.\n"
 msgstr "»%s« für Datei »%s« aufrufen, um Standardseiteneinstellungen zu ermitteln.\n"
 
-#: book_latex.py:209 book_texinfo.py:228
+#: book_latex.py:212 book_texinfo.py:228
 msgid "Unable to auto-detect default settings:\n"
 msgstr "Kann Standardeinstellungen nicht automatisch bestimmen:\n"
 
-#: book_latex.py:221 book_texinfo.py:240
+#: book_latex.py:224 book_texinfo.py:240
 #, python-format
 msgid ""
 "Unable to auto-detect default settings:\n"
@@ -49,61 +49,65 @@ msgstr ""
 "Kann Standardeinstellungen nicht automatisch bestimmen:\n"
 "%s"
 
-#: book_snippets.py:409
+#: book_latex.py:247
+msgid "cannot detect textwidth from LaTeX"
+msgstr "kann die Breite des Textes nicht von LaTeX erkennen"
+
+#: book_snippets.py:406
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "veraltete ly-option verwendet: %s=%s"
 
-#: book_snippets.py:411
+#: book_snippets.py:408
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr "Übersetzung im Kompatibilitätsmodus: %s=%s"
 
-#: book_snippets.py:414
+#: book_snippets.py:411
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "veraltete ly-option verwendet: %s"
 
-#: book_snippets.py:416
+#: book_snippets.py:413
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr "Übersetzung im Kompatibilitätsmodus: %s"
 
-#: book_snippets.py:533
+#: book_snippets.py:530
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "unbekannte Option ignoriert: %s"
 
-#: book_snippets.py:624
+#: book_snippets.py:621
 #, python-format
 msgid "Missing files: %s"
 msgstr "Fehlende Dateien: %s"
 
-#: book_snippets.py:654
+#: book_snippets.py:651
 #, python-format
 msgid "Could not overwrite file %s"
 msgstr "Die Datei kann nicht überschrieben werden: »%s«"
 
-#: book_snippets.py:741
+#: book_snippets.py:738
 #, python-format
 msgid "Running through filter `%s'"
 msgstr "Durch Filter »%s« schicken"
 
-#: book_snippets.py:761
+#: book_snippets.py:759
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "»%s« gescheitert (%d)"
 
-#: book_snippets.py:762
+#: book_snippets.py:760
 msgid "The error log is as follows:"
 msgstr "Das Fehlerprotokoll lautet wie folgt:"
 
-#: book_snippets.py:882
+#: book_snippets.py:880
 #, python-format
 msgid "Converting MusicXML file `%s'...\n"
 msgstr "MusicXML-Datei »%s« konvertieren...\n"
 
-#: book_snippets.py:909
+#: book_snippets.py:907
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of original file,\n"
@@ -112,7 +116,7 @@ msgstr ""
 "%s: Doppelte Dateibezeichnung, aber unterschiedlicher Inhalt der Originaldatei,\n"
 "gebe Diff zur existierenden Datei aus."
 
-#: book_snippets.py:922
+#: book_snippets.py:920
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of converted lilypond file,\n"
@@ -129,129 +133,129 @@ msgstr ""
 msgid "Running texi2pdf on file %s to detect default page settings.\n"
 msgstr "texi2pdf für die Datei %s aufrufen, um Standardseiteneinstellungen zu ermitteln.\n"
 
-#: convertrules.py:12
+#: convertrules.py:13
 #, python-format
 msgid "Not smart enough to convert %s."
 msgstr "%s kann nicht umgewandelt werden."
 
-#: convertrules.py:13
+#: convertrules.py:14
 msgid "Please refer to the manual for details, and update manually."
 msgstr "Für Details Benutzerhandbuch lesen und manuell aktualisieren."
 
-#: convertrules.py:14
+#: convertrules.py:15
 #, python-format
 msgid "%s has been replaced by %s"
 msgstr "%s wurde durch %s ersetzt"
 
-#: convertrules.py:24 lilylib.py:131 warn.cc:223
+#: convertrules.py:25 lilylib.py:136 warn.cc:223
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "Warnung: %s"
 
-#: convertrules.py:49 convertrules.py:94
+#: convertrules.py:50 convertrules.py:95
 msgid "\\header { key = concat + with + operator }"
 msgstr "\\header { Schlüssel = concat + mit + Operator }"
 
-#: convertrules.py:56
+#: convertrules.py:57
 #, python-format
 msgid "deprecated %s"
 msgstr "veraltet %s"
 
-#: convertrules.py:65
+#: convertrules.py:66
 msgid "deprecated \\textstyle, new \\key syntax"
 msgstr "verworfener \\textstyle, neue \\key Syntax"
 
-#: convertrules.py:81 convertrules.py:1855 convertrules.py:2031
-#: convertrules.py:2174 convertrules.py:2505 convertrules.py:2800
-#: convertrules.py:3150
+#: convertrules.py:82 convertrules.py:1856 convertrules.py:2032
+#: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801
+#: convertrules.py:3151 convertrules.py:3385
 msgid "bump version for release"
 msgstr "aktuelle Version ausgeben"
 
-#: convertrules.py:97
+#: convertrules.py:98
 msgid "new \\header format"
 msgstr "neues \\header Format"
 
-#: convertrules.py:124
+#: convertrules.py:125
 msgid "\\translator syntax"
 msgstr "\\translator Syntax"
 
-#: convertrules.py:175
+#: convertrules.py:176
 msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
 msgstr "\\repeat NUM Alternative Noten -> \\repeat FOLDSTR Alternative Noten"
 
-#: convertrules.py:205 convertrules.py:678 convertrules.py:1350
-#: convertrules.py:2317
+#: convertrules.py:206 convertrules.py:679 convertrules.py:1351
+#: convertrules.py:2318
 #, python-format
 msgid "deprecate %s"
 msgstr "lehne %s ab"
 
-#: convertrules.py:279
+#: convertrules.py:280
 #, python-format
 msgid "deprecate %s "
 msgstr "lehne %s ab "
 
-#: convertrules.py:305
+#: convertrules.py:306
 msgid "new \\notenames format"
 msgstr "neues \\notenames"
 
-#: convertrules.py:321
+#: convertrules.py:322
 msgid "new tremolo format"
 msgstr "neues Tremolo-Format"
 
-#: convertrules.py:325
+#: convertrules.py:326
 msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver"
 msgstr "Staff_margin_engraver veraltet, benutze Instrument_name_engraver"
 
-#: convertrules.py:376
+#: convertrules.py:377
 msgid "change property definition case (eg. onevoice -> oneVoice)"
 msgstr "ändere Großschreibung von Eigenschaft (z. B. onevoice -> oneVoice)"
 
-#: convertrules.py:437
+#: convertrules.py:438
 msgid "new \\textscript markup text"
 msgstr "neue \\textscript Beschriftung"
 
-#: convertrules.py:509
+#: convertrules.py:510
 #, python-format
 msgid "identifier names: %s"
 msgstr "Bezeichnernamen: »%s«"
 
-#: convertrules.py:548
+#: convertrules.py:549
 msgid "point-and-click argument changed to procedure."
 msgstr "point-and-click-Argument zu Ablauf verändert"
 
-#: convertrules.py:590
+#: convertrules.py:591
 msgid "semicolons removed"
 msgstr "Semikolons entfernt"
 
 #. 40 ?
-#: convertrules.py:633
+#: convertrules.py:634
 #, python-format
 msgid "%s property names"
 msgstr "%s Eigenschaftsbezeichnungen"
 
-#: convertrules.py:703
+#: convertrules.py:704
 msgid "automaticMelismata turned on by default"
 msgstr "automaticMelismata ist standardmäßig aktiviert"
 
-#: convertrules.py:708
+#: convertrules.py:709
 msgid "automaticMelismata is turned on by default since 1.5.67."
 msgstr "automaticMelismata ist standardmäßig aktiviert seit 1.5.67"
 
-#: convertrules.py:942 convertrules.py:1635 convertrules.py:1889
-#: convertrules.py:2134
+#: convertrules.py:943 convertrules.py:1636 convertrules.py:1890
+#: convertrules.py:2135
 #, python-format
 msgid "remove %s"
 msgstr "»%s« wird gelöscht"
 
-#: convertrules.py:977 convertrules.py:980
+#: convertrules.py:978 convertrules.py:981
 msgid "cluster syntax"
 msgstr "Syntax des Clusters"
 
-#: convertrules.py:987
+#: convertrules.py:988
 msgid "new Pedal style syntax"
 msgstr "neue Syntax für den Pedal-Stil"
 
-#: convertrules.py:1246
+#: convertrules.py:1247
 msgid ""
 "New relative mode,\n"
 "Postfix articulations, new text markup syntax, new chord syntax."
@@ -259,28 +263,28 @@ msgstr ""
 "Neuer relativer Modus,\n"
 "Artikulationen nachgestellt, neue Textbeschriftungssyntax, neue Akkordsyntax."
 
-#: convertrules.py:1259
+#: convertrules.py:1260
 msgid "Remove - before articulation"
 msgstr "- vor Artikulation entfernen"
 
-#: convertrules.py:1294
+#: convertrules.py:1295
 #, python-format
 msgid "%s misspelling"
 msgstr "%s falsch geschrieben"
 
-#: convertrules.py:1313
+#: convertrules.py:1314
 msgid "Swap < > and << >>"
 msgstr "< > und << >> austauschen"
 
-#: convertrules.py:1316
+#: convertrules.py:1317
 msgid "attempting automatic \\figures conversion.  Check results!"
 msgstr "versuche, \\figures automatisch zu konvertieren. Prüfen Sie das Ergebnis!"
 
-#: convertrules.py:1362
+#: convertrules.py:1363
 msgid "Use Scheme code to construct arbitrary note events."
 msgstr "Benutze Scheme-Code, um beliebige Notenereignisse zu erstellen."
 
-#: convertrules.py:1369
+#: convertrules.py:1370
 msgid ""
 "use symbolic constants for alterations,\n"
 "remove \\outputproperty, move ly:verbose into ly:get-option"
@@ -288,7 +292,7 @@ msgstr ""
 "verwende symbolische Konstanten für Alterationen,\n"
 "entferne \\outputproperty, verschiebe ly:verbose nach ly:get-option"
 
-#: convertrules.py:1394
+#: convertrules.py:1395
 #, python-format
 msgid ""
 "\\outputproperty found,\n"
@@ -304,7 +308,7 @@ msgstr ""
 "  \\applyoutput #(outputproperty-compatibility %s '%s <GROB EIGENSCHAFT WERT>)\n"
 "als Ersetzungstext"
 
-#: convertrules.py:1406
+#: convertrules.py:1407
 msgid ""
 "The alteration field of Scheme pitches was multiplied by 2\n"
 "to support quarter tone accidentals.  You must update the following constructs manually:\n"
@@ -319,15 +323,15 @@ msgstr ""
 "* Aufrufe von ly:make-pitch und ly:pitch-alteration\n"
 "* keySignature-Einstellung erstellt mit \\property\n"
 
-#: convertrules.py:1449
+#: convertrules.py:1450
 msgid "removal of automaticMelismata; use melismaBusyProperties instead."
 msgstr "Entfernen von automaticMelismata; benutzen Sie melismaBusyProperties anstatt dessen"
 
-#: convertrules.py:1556
+#: convertrules.py:1557
 msgid "\\partcombine syntax change to \\newpartcombine"
 msgstr "\\partcombine-Syntax zu \\newpartcombine verändern"
 
-#: convertrules.py:1581
+#: convertrules.py:1582
 msgid ""
 "Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
 "Harmonic notes. Thread context removed. Lyrics context removed."
@@ -335,11 +339,11 @@ msgstr ""
 "Schlagzeugnotation verändert, entferne \\chordmodifiers, \\notenames.\n"
 "Flageolett-Noten. Thread-Kontext entfernt. Liedtext-Kontext entfernt."
 
-#: convertrules.py:1585
+#: convertrules.py:1586
 msgid "Drums found. Enclose drum notes in \\drummode"
 msgstr "Schlagzeug gefunden. Schlagzeugnoten in \\drummode-Umgebung einbinden"
 
-#: convertrules.py:1596 convertrules.py:1603 convertrules.py:1614
+#: convertrules.py:1597 convertrules.py:1604 convertrules.py:1615
 #, python-format
 msgid ""
 "\n"
@@ -348,33 +352,33 @@ msgstr ""
 "\n"
 "%s gefunden. Testen Sie die Datei manuell!\n"
 
-#: convertrules.py:1596
+#: convertrules.py:1597
 msgid "Drum notation"
 msgstr "Schlagzeugnotation"
 
-#: convertrules.py:1655
+#: convertrules.py:1656
 msgid "new syntax for property settings:"
 msgstr "neue Syntax für Eigenschaftseinstellungen:"
 
-#: convertrules.py:1681
+#: convertrules.py:1682
 msgid "Property setting syntax in \\translator{ }"
 msgstr "Eigenschaft setzt Syntax in \\translator{ }"
 
-#: convertrules.py:1720
+#: convertrules.py:1721
 msgid "Scheme grob function renaming"
 msgstr "umbenennen der Scheme-grob-Funktion"
 
-#: convertrules.py:1731 convertrules.py:2138 convertrules.py:2142
-#: convertrules.py:2708
+#: convertrules.py:1732 convertrules.py:2139 convertrules.py:2143
+#: convertrules.py:2709
 #, python-format
 msgid "Use %s\n"
 msgstr "Benutze %s\n"
 
-#: convertrules.py:1747
+#: convertrules.py:1748
 msgid "More Scheme function renaming"
 msgstr "benenne weitere Scheme-Funktionen um"
 
-#: convertrules.py:1871
+#: convertrules.py:1872
 msgid ""
 "Page layout has been changed, using paper size and margins.\n"
 "textheight is no longer used.\n"
@@ -382,7 +386,7 @@ msgstr ""
 "Das Seitenlayout hat sich geändert, benutzen Sie paper size (Papiergröße) und margins (Ränder).\n"
 "textheight wird nicht mehr benutzt.\n"
 
-#: convertrules.py:1957
+#: convertrules.py:1958
 msgid ""
 "\\foo -> \\foomode (for chords, notes, etc.)\n"
 "fold \\new FooContext \\foomode into \\foo."
@@ -390,7 +394,7 @@ msgstr ""
 "\\foo -> \\foomode (für Akkorde, Noten usw.)\n"
 "Komprimiere \\new FooContext \\foomode nach \\foo."
 
-#: convertrules.py:1995
+#: convertrules.py:1996
 msgid ""
 "staff size should be changed at top-level\n"
 "with\n"
@@ -404,40 +408,40 @@ msgstr ""
 "  #(set-global-staff-size <SYSTEMHÖHE-IN-PUNKTEN>)\n"
 "\n"
 
-#: convertrules.py:2015
+#: convertrules.py:2016
 msgid "regularize other identifiers"
 msgstr "normiere andere Bezeichner"
 
-#: convertrules.py:2083
+#: convertrules.py:2084
 msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
 msgstr "\\encoding: Konvertiere latin1 zu utf8. Entferne ly:point-and-click"
 
-#: convertrules.py:2094
+#: convertrules.py:2095
 msgid "LilyPond source must be UTF-8"
 msgstr "LilyPond-Quelle muss UTF-8 sein"
 
-#: convertrules.py:2097
+#: convertrules.py:2098
 msgid "Try the texstrings backend"
 msgstr "Das texstrings-Backend probieren"
 
-#: convertrules.py:2100
+#: convertrules.py:2101
 #, python-format
 msgid "Do something like: %s"
 msgstr "Folgendes versuchen: %s"
 
-#: convertrules.py:2103
+#: convertrules.py:2104
 msgid "Or save as UTF-8 in your editor"
 msgstr "Oder als UTF-8 im Editor sichern"
 
-#: convertrules.py:2153
+#: convertrules.py:2154
 msgid "warn about auto beam settings"
 msgstr "Warnung zu den Einstellungen der automatischen Balken"
 
-#: convertrules.py:2157
+#: convertrules.py:2158
 msgid "auto beam settings"
 msgstr "Einstellungen der automatischen Balken"
 
-#: convertrules.py:2158
+#: convertrules.py:2159
 msgid ""
 "\n"
 "Auto beam settings must now specify each interesting moment in a measure\n"
@@ -448,41 +452,41 @@ msgstr ""
 "im Takt, die in Frage kommt, explizit gesetzt werden; 1/4 wird nicht mehr\n"
 "multipliziert, um auch die Positionen von 1/2 und 3/4 zu definieren.\n"
 
-#: convertrules.py:2271
+#: convertrules.py:2272
 msgid "verticalAlignmentChildCallback has been deprecated"
 msgstr "verticalAlignmentChildCallback ist veraltet"
 
-#: convertrules.py:2276
+#: convertrules.py:2277
 msgid "Remove callbacks property, deprecate XY-extent-callback."
 msgstr "Entferne callbacks-Eigenschaft, verwerfe XY-extent-callback."
 
-#: convertrules.py:2297
+#: convertrules.py:2298
 msgid "Use grob closures iso. XY-offset-callbacks."
 msgstr "Benutze grob-Schluss anstelle von XY-offset-callback."
 
-#: convertrules.py:2359
+#: convertrules.py:2360
 msgid "foobar -> foo-bar for \\paper, \\layout"
 msgstr "foobar -> foo-bar für \\paper, \\layout"
 
-#: convertrules.py:2469
+#: convertrules.py:2470
 msgid "deprecate \\tempo in \\midi"
 msgstr "verwerfe \\tempo in \\midi"
 
-#: convertrules.py:2522
+#: convertrules.py:2523
 msgid "deprecate cautionary-style. Use AccidentalCautionary properties"
 msgstr ""
 "verwerfe cautionary-style für warndende Versetzungszeichen.\n"
 "Benutze AccidentalCautionary-Eigenschaften"
 
-#: convertrules.py:2535
+#: convertrules.py:2536
 msgid "Rename accidental glyphs, use glyph-name-alist."
 msgstr "Umbenennen der Versetzungszeichen-Glyphen, benutze glyph-name-alist."
 
-#: convertrules.py:2590
+#: convertrules.py:2591
 msgid "edge-text settings for TextSpanner"
 msgstr "edge-text (Randtext)-Einstellungen für TextSpanner"
 
-#: convertrules.py:2591
+#: convertrules.py:2592
 #, python-format
 msgid ""
 "Use\n"
@@ -493,35 +497,35 @@ msgstr ""
 "\n"
 "%s"
 
-#: convertrules.py:2624
+#: convertrules.py:2625
 msgid "Use the `alignment-offsets' sub-property of\n"
 msgstr "Die Untereigenschaft `alignment-offsets' von\n"
 
-#: convertrules.py:2625
+#: convertrules.py:2626
 msgid "NonMusicalPaperColumn #'line-break-system-details\n"
 msgstr "NonMusicalPaperColumn #'line-break-system-details benutzen,\n"
 
-#: convertrules.py:2626
+#: convertrules.py:2627
 msgid "to set fixed distances between staves.\n"
 msgstr "um feste Abstände zwischen Systemen zu setzen.\n"
 
-#: convertrules.py:2638
+#: convertrules.py:2639
 msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
 msgstr "Benutze #'style anstelle von #'dash-fraction, um durchgehende/gestrichelte Linien zu benutzen."
 
-#: convertrules.py:2644
+#: convertrules.py:2645
 msgid "all settings related to dashed lines"
 msgstr "alle Einstellungen zu gestrichelten Linien"
 
-#: convertrules.py:2645
+#: convertrules.py:2646
 msgid "Use \\override ... #'style = #'line for solid lines and\n"
 msgstr "Benutze \\override ... #'style = #'line für durchgehende Linien und\n"
 
-#: convertrules.py:2646
+#: convertrules.py:2647
 msgid "\t\\override ... #'style = #'dashed-line for dashed lines."
 msgstr "\t\\override ... #'style #'dashed-line für gestrichelte Linien."
 
-#: convertrules.py:2682
+#: convertrules.py:2683
 msgid ""
 "metronomeMarkFormatter uses text markup as second argument,\n"
 "fret diagram properties moved to fret-diagram-details."
@@ -529,11 +533,11 @@ msgstr ""
 "metronomeMarkFormatter benutzt Textbeschriftung as zweites Argument,\n"
 "Bund-Diagramm-Eigenschaften sind nach fret-diagram-details verschoben."
 
-#: convertrules.py:2688
+#: convertrules.py:2689
 msgid "metronomeMarkFormatter got an additional text argument.\n"
 msgstr "metronomeMarkFormatter hat ein zusätzliches Textargument bekommen.\n"
 
-#: convertrules.py:2689
+#: convertrules.py:2690
 #, python-format
 msgid ""
 "The function assigned to Score.metronomeMarkFunction now uses the signature\n"
@@ -542,48 +546,48 @@ msgstr ""
 "Die Funktion, die Score.metronomeMarkFunction zugeschrieben ist, benutzt jetzt\n"
 "die Signatur %s"
 
-#: convertrules.py:2707
+#: convertrules.py:2708
 #, python-format
 msgid "%s in fret-diagram properties"
 msgstr "%s in Bunddiagrammeigenschaften"
 
-#: convertrules.py:2751
+#: convertrules.py:2752
 msgid "\\put-adjacent argument order"
 msgstr "\\put-adjacent Argumentreihenfolge"
 
-#: convertrules.py:2752
+#: convertrules.py:2753
 msgid "Axis and direction now come before markups:\n"
 msgstr "Achse und Richtung jetzt vor die Beschriftung setzen:\n"
 
-#: convertrules.py:2753
+#: convertrules.py:2754
 msgid "\\put-adjacent axis dir markup markup."
 msgstr "\\put-adjacent Achse Richtung Beschriftung Beschriftung."
 
-#: convertrules.py:2784
+#: convertrules.py:2785
 msgid "re-definition of InnerStaffGroup"
 msgstr "Neudefinition von InnerStaffGroup"
 
-#: convertrules.py:2789
+#: convertrules.py:2790
 msgid "re-definition of InnerChoirStaff"
 msgstr "Neudefinition von InnerChoirStaff"
 
-#: convertrules.py:2799
+#: convertrules.py:2800
 msgid "Syntax changes for \\addChordShape and \\chord-shape"
 msgstr "Syntax-Änderungen für \\addChordShape und \\chord-shape"
 
-#: convertrules.py:2804
+#: convertrules.py:2805
 msgid "stringTuning must be added to addChordShape call.\n"
 msgstr "stringTuning·muss zu einem·addChordShape -Aufruf hinzugefügt werden.\n"
 
-#: convertrules.py:2809
+#: convertrules.py:2810
 msgid "stringTuning must be added to chord-shape call.\n"
 msgstr "stringTuning muss zu dem·chord-shape -Aufruf hinzugefügt werden.\n"
 
-#: convertrules.py:2815
+#: convertrules.py:2816
 msgid "Remove oldaddlyrics"
 msgstr "oldaddlyrics entfernen"
 
-#: convertrules.py:2819
+#: convertrules.py:2820
 msgid ""
 "oldaddlyrics is no longer supported. \n"
 "         Use addlyrics or lyrsicsto instead.\n"
@@ -591,7 +595,7 @@ msgstr ""
 "oldaddlyrics wird nicht mehr unterstützt.\n"
 "         Benutzen Sie anstatt dessen addlyrics oder lyricsto.\n"
 
-#: convertrules.py:2825
+#: convertrules.py:2826
 msgid ""
 "keySignature property not reversed any more\n"
 "MIDI 47: orchestral strings -> orchestral harp"
@@ -599,11 +603,11 @@ msgstr ""
 "keySignature-Eigenschaft ist nicht mehr umgedreht\n"
 "MIDI 47: Orchester-Streicher -> Orchester-Harfe"
 
-#: convertrules.py:2830
+#: convertrules.py:2831
 msgid "The alist for Staff.keySignature is no longer in reversed order.\n"
 msgstr "Die Aliste für Staff.keySignature ist nicht mehr in umgekehrter Reihenfolge.\n"
 
-#: convertrules.py:2836
+#: convertrules.py:2837
 msgid ""
 "\\bar \".\" now produces a thick barline\n"
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
@@ -613,15 +617,15 @@ msgstr ""
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
 "Strichelunsparameter für Binde- und Legatobögen sind jetzt in dash-definition"
 
-#: convertrules.py:2842
+#: convertrules.py:2843
 msgid "\\bar \".\" now produces a thick barline.\n"
 msgstr "\\bar  \".\" erstellt jetzt einen dicken Taktstrich.\n"
 
-#: convertrules.py:2848
+#: convertrules.py:2849
 msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
 msgstr "Strichelunsparameter für Binde- und Legatobögen sind jetzt in 'dash-details.\n"
 
-#: convertrules.py:2853
+#: convertrules.py:2854
 msgid ""
 "Autobeaming rules have changed.  override-auto-beam-setting and\n"
 "revert-auto-beam-setting have been eliminated.\n"
@@ -647,15 +651,15 @@ msgstr ""
 "Explizite Definition des Dynamikzeichenkontexts aus der `Piano centered dynamics'\n"
 "Vorlage ersetzt durch neuen `Dynamics'-Kontext."
 
-#: convertrules.py:2867
+#: convertrules.py:2868
 msgid "    Autobeam settings are now overriden with \\overrideBeamSettings.\n"
 msgstr "   Automatische Bebalkungseinstellungen werden jetzt mit \\overrideBeamSettings verändert.\n"
 
-#: convertrules.py:2872
+#: convertrules.py:2873
 msgid "    Autobeam settings are now reverted with \\revertBeamSettings.\n"
 msgstr "   Automatische Bebalkungseinstellungen werden jetzt mit \\revertBeamSettings rückgängig gemacht.\n"
 
-#: convertrules.py:2878
+#: convertrules.py:2879
 msgid ""
 "    beatGrouping with a specified context must now be accomplished with\n"
 "   \\overrideBeamSettings.\n"
@@ -663,11 +667,11 @@ msgstr ""
 "   beatGrouping mit einem angegebenen Kontext muss jetzt mit\n"
 "   \\overrideBeamSettings vorgenommen werden.\n"
 
-#: convertrules.py:2884
+#: convertrules.py:2885
 msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n"
 msgstr "alignment-offsets wurde in alignment-distances geändert: Man muss jetzt die Abstände zwischen Systemen angeben und nicht die Verschiebung der Systeme.\n"
 
-#: convertrules.py:2895
+#: convertrules.py:2896
 msgid ""
 "Remove obsolete engravers/translators: Note_swallow_translator,\n"
 "Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
@@ -679,23 +683,23 @@ msgstr ""
 "Swallow_performer und String_number_engraver.\n"
 "Neue vertikale Abstandsvariablen."
 
-#: convertrules.py:2926
+#: convertrules.py:2927
 msgid "Vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n"
 msgstr "Vertikale Positionierung hängt nicht mehr von Y-extent einer VerticalAxisGroup ab.\n"
 
-#: convertrules.py:2932
+#: convertrules.py:2933
 msgid "Unify fetaNumber and fetaDynamic encodings"
 msgstr "Kodierungen für fetaNumber und fetaDynamic vereinheitlichen"
 
-#: convertrules.py:2937
+#: convertrules.py:2938
 msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 
-#: convertrules.py:2948
+#: convertrules.py:2949
 msgid "\\cresc etc. are now postfix operators"
 msgstr "\\cresc usw. werden jetzt der Note nachgestellt"
 
-#: convertrules.py:2960
+#: convertrules.py:2961
 msgid ""
 "Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
@@ -703,23 +707,23 @@ msgstr ""
 "Entferne beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings und \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
 
-#: convertrules.py:2978
+#: convertrules.py:2979
 msgid "Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"
 msgstr "Benutze \\set beamExceptions oder \\overrideTimeSignatureSettings.\n"
 
-#: convertrules.py:2982
+#: convertrules.py:2983
 msgid "Use \\set beamExceptions or \\revertTimeSignatureSettings.\n"
 msgstr "Benutze \\set beamExceptions oder \\revertTimeSignatureSettings.\n"
 
-#: convertrules.py:2986
+#: convertrules.py:2987
 msgid "Use baseMoment, beatStructure, and beamExceptions.\n"
 msgstr "Benutze baseMoment, beatStructure und beamExceptions.\n"
 
-#: convertrules.py:2990 convertrules.py:2994
+#: convertrules.py:2991 convertrules.py:2995
 msgid "Use baseMoment and beatStructure.\n"
 msgstr "Benutze baseMoment und beatStructure.\n"
 
-#: convertrules.py:2999
+#: convertrules.py:3000
 msgid ""
 "Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n"
 "Deprecate negative dash-period for hidden lines: use #'style = #'none instead."
@@ -727,11 +731,11 @@ msgstr ""
 "Holzbläser-Diagramme: Größe (size), Dicke (thickness) und graphic aus Argumentenliste nach Eigenschaften verschoben.\n"
 "Negatives dash-period für versteckte Linien ist veraltet: #'style = #'none anstellt dessen benutzen."
 
-#: convertrules.py:3004
+#: convertrules.py:3005
 msgid "Move size, thickness, and graphic to properties.  Argument should be just the key list.\n"
 msgstr "Verschiebe size, thickness und graphic in die Eigenschaften.  Argument darf nur die Liste der Schlüssel sein.\n"
 
-#: convertrules.py:3012
+#: convertrules.py:3013
 msgid ""
 "Rename vertical spacing variables.\n"
 "Add fretboard-table argument to savePredefinedFretboard."
@@ -739,23 +743,23 @@ msgstr ""
 "Vertikale Abstandsvariablen umbenennen.\n"
 "fretboard-table-Argument hinzufügen, um PredefinedFretboard zu speichern."
 
-#: convertrules.py:3030
+#: convertrules.py:3031
 msgid "Rename vertical spacing grob properties."
 msgstr "Vertikale Abstands-Grob-Eigenschaften umbenennen."
 
-#: convertrules.py:3046
+#: convertrules.py:3047
 msgid "Remove \\paper variables head-separation and foot-separation."
 msgstr "\\paper-Variablen head-separation und foot-separation entfernen."
 
-#: convertrules.py:3050
+#: convertrules.py:3051
 msgid "Adjust settings for top-system-spacing instead.\n"
 msgstr "Anstelle dessen Einstellungen für top-system-spacing anpassen.\n"
 
-#: convertrules.py:3054
+#: convertrules.py:3055
 msgid "Adjust settings for last-bottom-spacing instead.\n"
 msgstr "Anstelle dessen Einstellungen für last-bottom-spacing anpassen.\n"
 
-#: convertrules.py:3060
+#: convertrules.py:3061
 msgid ""
 "Rename space to basic-distance in various spacing alists.\n"
 "Remove HarmonicParenthesesItem grob."
@@ -763,19 +767,19 @@ msgstr ""
 "Umbennen von Abstand in basic-distance in verschiedenen Positionierungs-Alisten.\n"
 "Entfernen des HarmonicParenthesesItem-Grobs."
 
-#: convertrules.py:3067
+#: convertrules.py:3068
 msgid "HarmonicParenthesesItem has been eliminated.\n"
 msgstr "HarmonicParenthesesItem wurde entfernt.\n"
 
-#: convertrules.py:3068
+#: convertrules.py:3069
 msgid "Harmonic parentheses are part of the TabNoteHead grob.\n"
 msgstr "Harmonische Klammern sind Teil des TabNoteHead-Grobs.\n"
 
-#: convertrules.py:3073
+#: convertrules.py:3074
 msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n"
 msgstr "Entferne Kontext von overrideTimeSignatureSettings und revertTimeSignatureSettings.\n"
 
-#: convertrules.py:3080
+#: convertrules.py:3081
 msgid ""
 "Change stringTunings from a list of semitones to a list of pitches.\n"
 "Change tenor and baritone ukulele names in string tunings.\n"
@@ -785,54 +789,62 @@ msgstr ""
 "Ändere Tenor- und Bariton-Ukulele-Bezeichnungen in Saitenstimmungen.\n"
 "Erstelle Nachrichten für manuelle Konversion von vertikalem Platz, wenn nötig."
 
-#: convertrules.py:3123
+#: convertrules.py:3124
 msgid "Vertical spacing changes might affect user-defined contexts."
 msgstr "Vertikale Positionierungsänderungen können sich auf von Benutzern definierte Kontexte auswirken."
 
-#: convertrules.py:3129
+#: convertrules.py:3130
 msgid "Replace bar-size with bar-extent."
 msgstr "Ersetze bar-size durch bar-extent."
 
-#: convertrules.py:3141
+#: convertrules.py:3142
 msgid "Woodwind diagrams: Changes to the clarinet diagram."
 msgstr "Holsbläserdiagramme: Änderungen im Klarinetten-Diagramm."
 
-#: convertrules.py:3145
+#: convertrules.py:3146
 msgid "Clarinet fingering changed to reflect actual anatomy of instrument.\n"
 msgstr "Klarinetten-Fingersatz verändert, um Anatomie des Instruments wiederzugeben.\n"
 
-#: convertrules.py:3155
+#: convertrules.py:3156
 msgid "Handling of non-automatic footnotes."
 msgstr "Behandlung von nicht-automatischen Fußnoten."
 
-#: convertrules.py:3159
+#: convertrules.py:3160
 msgid "If you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.\n"
 msgstr "Wenn sie nichtautomatische Fußnoten einsetzen, stellen Sie sicher, die Eigenschaft footnote-auto-numbering = ##f in der paper-Umgebund einzustellen.\n"
 
-#: convertrules.py:3164
+#: convertrules.py:3165
 msgid "Change in internal property for MultiMeasureRest"
 msgstr "Änderung in der internen Eigenschaft für MultiMeasureRest"
 
-#: convertrules.py:3168
+#: convertrules.py:3169
 msgid "This internal property has been replaced by round-up-to-longer-rest, round-up-exceptions and usable-duration-logs.\n"
 msgstr "Diese interene Eigenschaft wurde ersetzt durch round-to-longer-rest, round-up-exceptions und usable-duration-logs.\n"
 
-#: convertrules.py:3173
+#: convertrules.py:3174
 msgid "Creation of a Flag grob and moving of certain Stem properties to this grob"
 msgstr "Erstellung eines Fähnchen-Grobs und Verschiebung von bestimmten Halseigenschaften in diesen Grob"
 
-#: convertrules.py:3209
+#: convertrules.py:3210
 msgid "consistent-broken-slope is now handled through the positions callback.\n"
 msgstr "consistent-broken-slope wird jetzt durch einen Positions-Callback gehandhabt.\n"
 
-#: convertrules.py:3210
+#: convertrules.py:3211
 msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n"
 msgstr "input/regression/beam-broken-classic.ly zeigt, wie gebrochene Balken jetzt behandelt werden.\n"
 
-#: convertrules.py:3368
+#: convertrules.py:3369
 msgid "beamExceptions controls whole-measure beaming."
 msgstr "beamExceptions kontrolliert Bebalkung von ganzen Takten."
 
+#: convertrules.py:3606
+msgid "Flag.transparent and Flag.color inherit from Stem"
+msgstr "Flag.transparent (Durchsichtigkeit) und Farbe der Fähnchen werden vom Hals geerbt"
+
+#: convertrules.py:3672
+msgid "Staff-padding now controls the distance to the baseline, not the nearest point."
+msgstr "Staff-padding kontrolliert jetzt den Abstand zur Grundlinie, nicht zum nächsten Punkt."
+
 #: fontextract.py:25
 #, python-format
 msgid "Scanning %s"
@@ -848,37 +860,37 @@ msgstr "%s ausgepackt"
 msgid "Writing fonts to %s"
 msgstr "Schreiben der Schriftarten nach %s"
 
-#: lilylib.py:96
+#: lilylib.py:101
 #, python-format
 msgid "Setting loglevel to %s"
 msgstr "Logstufe wird auf %s gesetzt"
 
-#: lilylib.py:99
+#: lilylib.py:104
 #, python-format
 msgid "Unknown or invalid loglevel '%s'"
 msgstr "Unbekannte oder ungültige Logstufe »%s«"
 
-#: lilylib.py:128 warn.cc:211
+#: lilylib.py:133 warn.cc:211
 #, c-format, python-format
 msgid "error: %s"
 msgstr "Fehler: %s"
 
-#: lilylib.py:185
+#: lilylib.py:190
 #, python-format
 msgid "Processing %s.ly"
 msgstr "»%s.ly« wird verarbeitet"
 
-#: lilylib.py:189 lilylib.py:250
+#: lilylib.py:194 lilylib.py:255
 #, python-format
 msgid "Invoking `%s'"
 msgstr "»%s« wird aufgerufen"
 
-#: lilylib.py:191 lilylib.py:252
+#: lilylib.py:196 lilylib.py:257
 #, python-format
 msgid "Running %s..."
 msgstr "%s wird ausgeführt..."
 
-#: lilylib.py:328
+#: lilylib.py:333
 #, python-format
 msgid "Usage: %s"
 msgstr "Aufruf: %s"
@@ -935,12 +947,12 @@ msgstr "Tonartalterationsoktave für eine nicht existente Alteration Nr. %s ange
 msgid "Unable to find instrument for ID=%s\n"
 msgstr "Kann kein Instrument für ID=%s finden\n"
 
-#: abc2ly.py:1376 convert-ly.py:81 lilypond-book.py:122 midi2ly.py:1044
+#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
 #, python-format
 msgid "%s [OPTION]... FILE"
 msgstr "%s [OPTIONEN]... DATEI"
 
-#: abc2ly.py:1377
+#: abc2ly.py:1387
 #, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
@@ -949,29 +961,29 @@ msgstr ""
 "abc2ly wandelt ABC-Musikdateien in LilyPond-Eingabe um\n"
 "(siehe auch %s).\n"
 
-#: abc2ly.py:1385 convert-ly.py:88 etf2ly.py:1208 lilypond-book.py:231
-#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:174
+#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:181
 msgid "show version number and exit"
 msgstr "Versionsnummer ausgeben und beenden"
 
-#: abc2ly.py:1388 convert-ly.py:92 etf2ly.py:1204 lilypond-book.py:140
-#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:153
+#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:160
 msgid "show this help and exit"
 msgstr "diese Hilfe anzeigen und beenden"
 
-#: abc2ly.py:1391 etf2ly.py:1209 midi2ly.py:1071
+#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071
 msgid "write output to FILE"
 msgstr "Ausgabe in DATEI schreiben"
 
-#: abc2ly.py:1394
+#: abc2ly.py:1404
 msgid "be strict about success"
 msgstr "bzgl. Erfolg streng sein"
 
-#: abc2ly.py:1397
+#: abc2ly.py:1407
 msgid "preserve ABC's notion of beams"
 msgstr "ABCs Prinzip der Balken beibehalten"
 
-#: abc2ly.py:1400
+#: abc2ly.py:1410
 msgid "suppress progress messages"
 msgstr "Fortschrittbenachrichtigung unterdrücken"
 
@@ -979,13 +991,13 @@ msgstr "Fortschrittbenachrichtigung unterdrücken"
 #. "Report bugs in English via %s",
 #. or if there is a LilyPond users list or forum in your language
 #. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: abc2ly.py:1403 convert-ly.py:146 etf2ly.py:1218 lilypond-book.py:258
-#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:285
+#: abc2ly.py:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:315
 #, c-format, python-format
 msgid "Report bugs via %s"
 msgstr "Melden Sie Fehler an %s"
 
-#: convert-ly.py:46
+#: convert-ly.py:47
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
 "version taken from the \\version command, to the current LilyPond version."
@@ -993,100 +1005,108 @@ msgstr ""
 "LilyPond-Eingabe auf neuere Version bringen. Standardmäßig wird von der\n"
 "Version vom Kommando \\version zur aktuellen LilyPond-Version gegangen."
 
-#: convert-ly.py:48 lilypond-book.py:82
+#: convert-ly.py:50
+msgid "If FILE is `-', read from standard input."
+msgstr "Wenn DATEI gleich `-', lese die Standardeingabe"
+
+#: convert-ly.py:52 lilypond-book.py:82
 msgid "Examples:"
 msgstr "Beispiele:"
 
-#: convert-ly.py:75 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
+#: convert-ly.py:79 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s bei"
 
-#: convert-ly.py:77 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
+#: convert-ly.py:81 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Vertrieben unter den Bedingungen der GNU General Public License."
 
-#: convert-ly.py:78 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
+#: convert-ly.py:82 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
 msgid "It comes with NO WARRANTY."
 msgstr "Es wird OHNE GARANTIE ausgeliefert."
 
-#: convert-ly.py:96 convert-ly.py:137
+#: convert-ly.py:100 convert-ly.py:141
 msgid "VERSION"
 msgstr "VERSION"
 
-#: convert-ly.py:98
+#: convert-ly.py:102
 msgid "start from VERSION [default: \\version found in file]"
 msgstr "bei VERSION anfangen [Standard: \\version in Datei gefunden]"
 
-#: convert-ly.py:101
+#: convert-ly.py:105
 msgid "edit in place"
 msgstr "vor Ort ändern"
 
-#: convert-ly.py:105 lilypond-book.py:179 musicxml2ly.py:2627
+#: convert-ly.py:109 lilypond-book.py:179 musicxml2ly.py:2627
 msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)"
 msgstr "Logmeldungen ensprechend LOGLEVEL ((NONE, ERROR, WARNING, PROGRESS (Standard), DEBUG) ausgeben"
 
-#: convert-ly.py:107 lilypond-book.py:163 lilypond-book.py:181
-#: musicxml2ly.py:2629 main.cc:167
+#: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
+#: musicxml2ly.py:2629 main.cc:174
 msgid "LOGLEVEL"
 msgstr "LOGLEVEL"
 
-#: convert-ly.py:113
+#: convert-ly.py:117
 msgid "do not add \\version command if missing"
 msgstr "keinen \\version-Befehl hinzufügen, falls es fehlt"
 
-#: convert-ly.py:119
+#: convert-ly.py:123
 #, python-format
 msgid "force updating \\version number to %s"
 msgstr "erzwinge Aktualisierung von \\version nach %s"
 
-#: convert-ly.py:125
+#: convert-ly.py:129
 msgid "only update \\version number if file is modified"
 msgstr "Aktualisierung von \\version nur, wenn die Datei verändert wurde"
 
-#: convert-ly.py:131
+#: convert-ly.py:135
 #, python-format
 msgid "show rules [default: -f 0, -t %s]"
 msgstr "Regeln anzeigen [Standard: -f 0, -t %s]"
 
-#: convert-ly.py:136
+#: convert-ly.py:140
 #, python-format
 msgid "convert to VERSION [default: %s]"
 msgstr "zu VERSION konvertieren [Standard: %s]"
 
-#: convert-ly.py:141 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
-#: main.cc:176
+#: convert-ly.py:147
+msgid "make a numbered backup [default: filename.ext~]"
+msgstr "erstelle eine nummerierte Sicherung [Standard: Dateibezeichnung.end~]"
+
+#: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
+#: main.cc:183
 msgid "show warranty and copyright"
 msgstr "Informationen zu Gewährleistung und Copyright anzeigen"
 
-#: convert-ly.py:186
+#: convert-ly.py:196
 msgid "Applying conversion: "
 msgstr "Anwenden der Umwandlung: "
 
-#: convert-ly.py:202
+#: convert-ly.py:215
 msgid "Error while converting"
 msgstr "Fehler beim Umwandeln"
 
-#: convert-ly.py:204
+#: convert-ly.py:217
 msgid "Stopping at last successful rule"
 msgstr "Abbruch bei letzter erfolgreicher Regel"
 
-#: convert-ly.py:231
+#: convert-ly.py:256
 #, python-format
 msgid "Processing `%s'... "
 msgstr "»%s« wird verarbeitet..."
 
-#: convert-ly.py:338
+#: convert-ly.py:367
 #, python-format
 msgid "%s: Unable to open file"
 msgstr "%s: Konnte Datei nicht öffnen"
 
-#: convert-ly.py:345
+#: convert-ly.py:373
 #, python-format
 msgid "%s: Unable to determine version.  Skipping"
 msgstr "Version für »%s« kann nicht erkannt werden.  Wird übersprungen"
 
-#: convert-ly.py:350
+#: convert-ly.py:379
 #, python-format
 msgid ""
 "%s: Invalid version string `%s' \n"
@@ -1095,6 +1115,13 @@ msgstr ""
 "%s: Ungültige Versionsangabe `%s' \n"
 "Gültige Versionsangaben bestehen aus drei Zahlen, durch Punkte getrennt; etwa `2.8.12'"
 
+#: convert-ly.py:385
+#, python-format
+msgid "There was %d error."
+msgid_plural "There were %d errors."
+msgstr[0] "Es gab %d Fehler."
+msgstr[1] "Es gab %d Fehler."
+
 #: etf2ly.py:1197
 #, python-format
 msgid "%s [OPTION]... ETF-FILE"
@@ -1110,7 +1137,7 @@ msgstr ""
 "eine von Lilypond verwendbare Datei um.\n"
 
 #: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
-#: main.cc:159 main.cc:171
+#: main.cc:166 main.cc:178
 msgid "FILE"
 msgstr "DATEI"
 
@@ -1148,7 +1175,7 @@ msgid "add DIR to include path"
 msgstr "VERZ zum Einfügepfad hinzufügen"
 
 #: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
-#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:158
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:165
 msgid "DIR"
 msgstr "VERZ"
 
@@ -1236,76 +1263,76 @@ msgstr "benutze ausführbare Datei PROG anstelle von texi2pdf"
 msgid "create PDF files for use with PDFTeX"
 msgstr "PDF-Dateien für Verwendung mit PDFTeX erzeugen"
 
-#: lilypond-book.py:455
+#: lilypond-book.py:460
 msgid "Writing snippets..."
 msgstr "Auszüge werden geschrieben..."
 
-#: lilypond-book.py:460
+#: lilypond-book.py:465
 msgid "Processing..."
 msgstr "Verarbeiten..."
 
-#: lilypond-book.py:465
+#: lilypond-book.py:470
 msgid "All snippets are up to date..."
 msgstr "Alle Auszüge sind auf dem neuesten Stand..."
 
-#: lilypond-book.py:467
+#: lilypond-book.py:472
 msgid "Linking files..."
 msgstr "Dateien verbinden..."
 
-#: lilypond-book.py:487
+#: lilypond-book.py:492
 #, python-format
 msgid "cannot determine format for: %s"
 msgstr "Format für %s kann nicht ermittelt werden"
 
-#: lilypond-book.py:496
+#: lilypond-book.py:501
 #, python-format
 msgid "%s is up to date."
 msgstr "%s ist aktuell."
 
-#: lilypond-book.py:509
+#: lilypond-book.py:514
 #, python-format
 msgid "Writing `%s'..."
 msgstr "»%s« wird geschrieben..."
 
-#: lilypond-book.py:570
+#: lilypond-book.py:577
 msgid "Output would overwrite input file; use --output."
 msgstr "Ausgabe würde Eingabedatei überschreiben; verwenden Sie --output."
 
-#: lilypond-book.py:574
+#: lilypond-book.py:581
 #, python-format
 msgid "Reading %s..."
 msgstr "%s lesen..."
 
-#: lilypond-book.py:581
+#: lilypond-book.py:588
 msgid "Dissecting..."
 msgstr "Zerlegen..."
 
-#: lilypond-book.py:592
+#: lilypond-book.py:599
 #, python-format
 msgid "Compiling %s..."
 msgstr "%s kompilieren..."
 
-#: lilypond-book.py:600
+#: lilypond-book.py:607
 #, python-format
 msgid "Processing include: %s"
 msgstr "Einfügung wird verarbeitet: %s"
 
-#: lilypond-book.py:611
+#: lilypond-book.py:618
 #, python-format
 msgid "Removing `%s'"
 msgstr "»%s« wird gelöscht"
 
-#: lilypond-book.py:704
+#: lilypond-book.py:711
 #, python-format
 msgid "Setting LilyPond's loglevel to %s"
 msgstr "Logstufe von LilyPond wird auf %s gesetzt"
 
-#: lilypond-book.py:708
+#: lilypond-book.py:715
 #, python-format
 msgid "Setting LilyPond's loglevel to %s (from environment variable LILYPOND_LOGLEVEL)"
 msgstr "Logstufe von LilyPond wird auf %s gesetzt (aus Umgebungsvariable LILYPOND_LOGLEVEL)"
 
-#: lilypond-book.py:711
+#: lilypond-book.py:718
 msgid "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
 msgstr "LilyPond-Ausgabe auf --verbose setzen, entsprechend der Einstellungen von lilypond-book"
 
@@ -1616,15 +1643,15 @@ msgstr "Ausgabe nach »%s«"
 msgid "Unable to find input file %s"
 msgstr "Eingabedatei kann nicht gefunden werden %s"
 
-#: website_post.py:123
+#: website_post.py:125
 msgid "English"
 msgstr "Englisch"
 
-#: website_post.py:126
+#: website_post.py:128
 msgid "Other languages"
 msgstr "Andere Sprachen"
 
-#: website_post.py:127
+#: website_post.py:129
 #, python-format
 msgid "About <a href=\"%s\">automatic language selection</a>."
 msgstr "Über die <a href=\"%s\">automatische Sprachauswahl</a>."
@@ -1704,12 +1731,12 @@ msgstr "Versetzungszeichensatzliste muss mit Kontextnamen beginnen: %s"
 msgid "procedure or context-name expected for accidental rule, found %s"
 msgstr "Prozedur oder Kontextname für Versetzungszeichenregel erwartet, %s gefunden"
 
-#: accidental.cc:200
+#: accidental.cc:169
 #, c-format
 msgid "Could not find glyph-name for alteration %s"
 msgstr "Glyph-Name für Versetzungszeichen %s konnte nicht gefunden werden"
 
-#: accidental.cc:215
+#: accidental.cc:184
 msgid "natural alteration glyph not found"
 msgstr "Auflösungszeichen konnte nicht gefunden werden"
 
@@ -1722,7 +1749,7 @@ msgstr "Schriftart kann nicht gefunden werden: »%s«"
 msgid "\\applycontext argument is not a procedure"
 msgstr "Argument für \\applycontext ist keine Prozedur"
 
-#: arpeggio.cc:115
+#: arpeggio.cc:138
 msgid "no heads for arpeggio found?"
 msgstr "keine Notenköpfe für Arpeggio gefunden?"
 
@@ -1731,19 +1758,24 @@ msgstr "keine Notenköpfe für Arpeggio gefunden?"
 msgid "cannot change, already in translator: %s"
 msgstr "kann nicht geändert werden, bereits im Übersetzer: %s"
 
-#: axis-group-engraver.cc:94
+#: axis-group-engraver.cc:147
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver: vertikale Gruppe hat bereits einen Vater"
 
-#: axis-group-engraver.cc:95
+#: axis-group-engraver.cc:148
 msgid "are there two Axis_group_engravers?"
 msgstr "gibt es zwei Axis_group_engravers?"
 
-#: axis-group-engraver.cc:96
+#: axis-group-engraver.cc:149
 msgid "removing this vertical group"
 msgstr "Entfernen dieser vertikalen Gruppe"
 
-#: axis-group-interface.cc:668
+#: axis-group-interface.cc:704
+#, c-format
+msgid "\"%s\" is not a valid outside-staff-placement-directive"
+msgstr "»%s« ist keine gültige outside-staff-placement-directive"
+
+#: axis-group-interface.cc:776
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr "Ein Objekt außerhalb der Notenzeile sollte eine Richtung haben, Vorgabe ist »nach oben«"
 
@@ -1752,23 +1784,23 @@ msgstr "Ein Objekt außerhalb der Notenzeile sollte eine Richtung haben, Vorgabe
 msgid "barcheck failed at: %s"
 msgstr "Taktüberprüfung gescheitert bei: %s"
 
-#: beam-engraver.cc:147
+#: beam-engraver.cc:148
 msgid "already have a beam"
 msgstr "Balken bereits vorhanden"
 
-#: beam-engraver.cc:230
+#: beam-engraver.cc:235
 msgid "unterminated beam"
 msgstr "unbegrenzter Balken"
 
-#: beam-engraver.cc:266 chord-tremolo-engraver.cc:149
+#: beam-engraver.cc:282 chord-tremolo-engraver.cc:149
 msgid "stem must have Rhythmic structure"
 msgstr "Notenhals muss rhythmische Struktur aufweisen"
 
-#: beam-engraver.cc:277
+#: beam-engraver.cc:293
 msgid "stem does not fit in beam"
 msgstr "Notenhals passt nicht in Balken"
 
-#: beam-engraver.cc:278
+#: beam-engraver.cc:294
 msgid "beam was started here"
 msgstr "Balken wurde hier begonnen"
 
@@ -1833,8 +1865,7 @@ msgstr "Leeres Cluster wird verworfen"
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr "Coherent_ligature_engraver: setze »spacing-increment=0.01«: ptr=%ul"
 
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:187 constrained-breaking.cc:205
+#: constrained-breaking.cc:187 constrained-breaking.cc:206
 msgid "cannot find line breaking that satisfies constraints"
 msgstr "es kann kein Zeilenumbruch gefunden werden, der die Bedingungen erfüllen"
 
@@ -1847,35 +1878,40 @@ msgstr "Symbol-Argumente für \\override und \\revert benötigt"
 msgid "cannot find or create new `%s'"
 msgstr "ein neues »%s« kann weder gefunden noch erzeugt werden"
 
-#: context.cc:207
+#: context.cc:228
 #, c-format
 msgid "cannot find or create `%s' called `%s'"
 msgstr "»%s« (»%s« genannt) kann weder gefunden noch erzeugt werden"
 
-#: context.cc:400
+#: context.cc:425
 #, c-format
 msgid "cannot find or create: `%s'"
 msgstr "»%s« kann weder gefunden noch erzeugt werden"
 
+#: context.cc:439
+#, c-format
+msgid "cannot find or create new Bottom = \"%s\""
+msgstr "ein neues Bottom = \"%s\" kann weder gefunden noch erzeugt werden"
+
 #: custos.cc:87
 #, c-format
 msgid "custos `%s' not found"
 msgstr "Custos »%s« nicht gefunden"
 
-#: dispatcher.cc:83
+#: dispatcher.cc:89
 msgid "Event class should be a list"
 msgstr "Ereignisklasse sollte eine Liste sein"
 
-#: dispatcher.cc:166
+#: dispatcher.cc:172
 #, c-format
 msgid "Junking event: %s"
 msgstr "Ereignis wird verworfen: »%s«"
 
-#: dispatcher.cc:262
+#: dispatcher.cc:277
 msgid "Attempting to remove nonexisting listener."
 msgstr "Versuche, nicht existierende listener zu entfernen."
 
-#: dispatcher.cc:284
+#: dispatcher.cc:303
 msgid "Already listening to dispatcher, ignoring request"
 msgstr "Höre schon dem Rechenzeitverteiler zu, Anforderung wird irgnoriert"
 
@@ -1884,25 +1920,19 @@ msgstr "Höre schon dem Rechenzeitverteiler zu, Anforderung wird irgnoriert"
 msgid "dot `%s' not found"
 msgstr "Punkt »%s« nicht gefunden"
 
-#: dynamic-engraver.cc:193
-msgid "cannot find start of (de)crescendo"
-msgstr "Anfang des (De-) Crescendos kann nicht gefunden werden"
-
-#: dynamic-engraver.cc:200
-msgid "already have a decrescendo"
-msgstr "Decrescendo bereits vorhanden"
-
-#: dynamic-engraver.cc:202
-msgid "already have a crescendo"
-msgstr "Crescendo bereits vorhanden"
-
-#: dynamic-engraver.cc:205
-msgid "cresc starts here"
-msgstr "Crescendo beginnt hier"
+#: dynamic-engraver.cc:168
+#, c-format
+msgid ""
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
+msgstr ""
+"unbekannter crescendo-Stil: %s\n"
+"wird als spitze Klammer gesetzt."
 
-#: dynamic-engraver.cc:333
-msgid "unterminated (de)crescendo"
-msgstr "unbegrenztes (De-) Crescendo"
+#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#, c-format
+msgid "unterminated %s"
+msgstr "unbegrenzt: »%s«"
 
 #. No explicit dynamic script events have occurred yet, but there is
 #. nevertheless a dynamic spanner.  Initialize last_volume_ to a
@@ -1927,12 +1957,12 @@ msgstr "unbegrenztes Episema"
 msgid "unterminated extender"
 msgstr "unbegrenzter Textunterstrich"
 
-#: flag.cc:113
+#: flag.cc:134
 #, c-format
 msgid "flag `%s' not found"
 msgstr "Fähnchen »%s« nicht gefunden"
 
-#: flag.cc:133
+#: flag.cc:154
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "Fähnchenstrich »%s« nicht gefunden"
@@ -1965,7 +1995,7 @@ msgstr "FontConfig wird initialisiert..."
 msgid "Building font database..."
 msgstr "Schriftartendatenbank erstellen..."
 
-#: footnote-engraver.cc:110
+#: footnote-engraver.cc:87
 msgid "Must be footnote-event."
 msgstr "Muss ein Fußnoten-Ereignis sein."
 
@@ -1982,15 +2012,15 @@ msgstr "Unendlich oder nan in Ausgabe gefunden. Wird durch 0.0 ersetzt"
 msgid "unterminated glissando"
 msgstr "unbegrenztes Glissando."
 
-#: global-context-scheme.cc:96 global-context-scheme.cc:114
+#: global-context-scheme.cc:95 global-context-scheme.cc:113
 msgid "no music found in score"
 msgstr "keine Musik in der Partitur gefunden"
 
-#: global-context-scheme.cc:104
+#: global-context-scheme.cc:103
 msgid "Interpreting music..."
 msgstr "Interpretation der Musik..."
 
-#: global-context-scheme.cc:126
+#: global-context-scheme.cc:125
 #, c-format
 msgid "elapsed time: %.2f seconds"
 msgstr "verstrichene Zeit: %.2f Sekunden"
@@ -2030,11 +2060,16 @@ msgstr "Grob »%s« hat keine Schnittstelle für Eigenschaft »%s«"
 msgid "%d: %s"
 msgstr "%d: %s"
 
+#: grob.cc:488
+#, c-format
+msgid "ignored infinite %s-offset"
+msgstr "unendliche %s-Verschiebung ignoriert"
+
 #: hairpin.cc:60
 msgid "Asking for broken bound padding at a non-broken bound."
 msgstr ""
 
-#: hairpin.cc:254
+#: hairpin.cc:256
 msgid "decrescendo too small"
 msgstr "Decrescendo zu kurz"
 
@@ -2081,31 +2116,31 @@ msgstr "Kein Glyph für Vorzeichen gefunden: %s"
 msgid "alteration not found"
 msgstr "Alterierung nicht gefunden"
 
-#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:104
+#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:109
 msgid "cannot find start of ligature"
 msgstr "Anfang der Ligatur kann nicht gefunden werden"
 
-#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:131
+#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:136
 msgid "already have a ligature"
 msgstr "habe bereits eine Ligatur"
 
-#: ligature-engraver.cc:109
+#: ligature-engraver.cc:114
 msgid "no right bound"
 msgstr "keine rechte Begrenzung"
 
-#: ligature-engraver.cc:140
+#: ligature-engraver.cc:145
 msgid "no left bound"
 msgstr "keine linke Begrenzung"
 
-#: ligature-engraver.cc:184
+#: ligature-engraver.cc:189
 msgid "unterminated ligature"
 msgstr "unbegrenzte Ligatur"
 
-#: ligature-engraver.cc:211
+#: ligature-engraver.cc:216
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "Pause wird ignoriert: Ligatur darf keine Pause enthalten"
 
-#: ligature-engraver.cc:212
+#: ligature-engraver.cc:217
 msgid "ligature was started here"
 msgstr "Ligatur wurde hier begonnen"
 
@@ -2114,34 +2149,34 @@ msgstr "Ligatur wurde hier begonnen"
 msgid "(load path: `%s')"
 msgstr "(Lade-Pfad: `%s')"
 
-#: lily-guile.cc:416
+#: lily-guile.cc:412
 #, c-format
 msgid "cannot find property type-check for `%s' (%s)."
 msgstr "Eigenschafts-Typprüfung für »%s« (%s) kann nicht gefunden werden."
 
-#: lily-guile.cc:419
+#: lily-guile.cc:415
 msgid "perhaps a typing error?"
 msgstr "vielleicht ein Tippfehler?"
 
-#: lily-guile.cc:426
-msgid "doing assignment anyway"
-msgstr "Zuweisung wird trotzdem durchgeführt"
+#: lily-guile.cc:422
+msgid "skipping assignment"
+msgstr "Zuweisung wird übersprungen"
 
-#: lily-guile.cc:438
+#: lily-guile.cc:442
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "Typprüfung für »%s« gescheitert; Wert »%s« muss vom Typ »%s« sein"
 
-#: lily-lexer.cc:255
+#: lily-lexer.cc:249
 msgid "include files are not allowed in safe mode"
 msgstr "eingefügte Dateien sind im abgesicherten Modus nicht erlaubt"
 
-#: lily-lexer.cc:282
+#: lily-lexer.cc:276
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "Bezeichnername ist ein Schlüsselwort: »%s«"
 
-#: lily-lexer.cc:303 lily-lexer.cc:316
+#: lily-lexer.cc:297 lily-lexer.cc:310
 #, c-format
 msgid "%s:EOF"
 msgstr "%s:EOF"
@@ -2166,21 +2201,22 @@ msgstr "Init-Datei kann nicht gefunden werden: »%s«"
 msgid "Processing `%s'"
 msgstr "»%s« wird verarbeitet"
 
-#: lily-parser-scheme.cc:208
+#: lily-parser-scheme.cc:209
 msgid "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parser-parse-string ist nur mit einem neuen Parser gültig.  Anstelle dessen ly:parser-include-string benutzen."
 
-#: lily-parser-scheme.cc:239
+#: lily-parser-scheme.cc:240
 msgid "ly:parse-string-expression is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parse-string-expression ist nur mit einem neuen Parser gültig.  Anstelle dessen ly:parser-include-string benutzen."
 
-#: lily-parser.cc:109
+#: lily-parser.cc:107
 msgid "Parsing..."
 msgstr "Analysieren..."
 
-#: line-spanner.cc:373
-msgid "Line spanner's left point is to the right of its right point."
-msgstr "Der linke Punkt eines Linienstreckers ist rechts von seinem linken Punkt."
+#: lookup.cc:181
+#, c-format
+msgid "Not drawing a box with negative dimension, %.2f by %.2f."
+msgstr "Kasten mit negativen Ausmaßen wird nicht gezeichnet, %.2f mal %.2f."
 
 #: lyric-combine-music-iterator.cc:199
 msgid "argument of \\lyricsto should contain Lyrics context"
@@ -2195,7 +2231,7 @@ msgstr "Stimme kann nicht gefunden werden: »%s«"
 msgid "Lyric syllable does not have note.  Use \\lyricsto or associatedVoice."
 msgstr "Textsilbe hat keine Note.  \\lyricsto oder associatedVoice verwenden."
 
-#: main.cc:101
+#: main.cc:104
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -2208,7 +2244,7 @@ msgstr ""
 "Bedingungen weitergeben. Rufen Sie »%s --warranty« für weitere\n"
 "Informationen auf.\n"
 
-#: main.cc:107
+#: main.cc:110
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License as \n"
@@ -2240,11 +2276,11 @@ msgstr ""
 "Sie bitte an die Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:141
+#: main.cc:148
 msgid "SYM[=VAL]"
 msgstr "SYM[=WERT]"
 
-#: main.cc:142
+#: main.cc:149
 msgid ""
 "set Scheme option SYM to VAL (default: #t).\n"
 "Use -dhelp for help."
@@ -2252,59 +2288,59 @@ msgstr ""
 "Scheme-Option SYM auf WERT setzen (Vorgabe: #t).\n"
 "-dhelp für Hilfe verwenden."
 
-#: main.cc:146
+#: main.cc:153
 msgid "EXPR"
 msgstr "AUSD"
 
-#: main.cc:146
+#: main.cc:153
 msgid "evaluate scheme code"
 msgstr "Scheme-Code auswerten"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:149
+#: main.cc:156
 msgid "FORMATs"
 msgstr "FORMATe"
 
-#: main.cc:149
+#: main.cc:156
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr "dump FORMAT,... Auch als separate Optionen:"
 
-#: main.cc:150
+#: main.cc:157
 msgid "generate PDF (default)"
 msgstr "PDF erzeugen (Standard)"
 
-#: main.cc:151
+#: main.cc:158
 msgid "generate PNG"
 msgstr "PNG erzeugen"
 
-#: main.cc:152
+#: main.cc:159
 msgid "generate PostScript"
 msgstr "PostScript erzeugen"
 
-#: main.cc:155
+#: main.cc:162
 msgid "FIELD"
 msgstr "FELD"
 
-#: main.cc:155
+#: main.cc:162
 msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
 msgstr "Header-Feld FELD in Datei BASISNAME.FELD schreiben"
 
-#: main.cc:158
+#: main.cc:165
 msgid "add DIR to search path"
 msgstr "VERZ zum Suchpfad hinzufügen"
 
-#: main.cc:159
+#: main.cc:166
 msgid "use FILE as init file"
 msgstr "DATEI als Anfangsdatei verwenden"
 
-#: main.cc:162
+#: main.cc:169
 msgid "USER, GROUP, JAIL, DIR"
 msgstr "BENUTZER,GRUPPE,KERKER,VERZ"
 
-#: main.cc:162
+#: main.cc:169
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
@@ -2312,7 +2348,7 @@ msgstr ""
 "chroot in KERKER, wird BENUTZER:GRUPPE\n"
 "und cd in VERZ"
 
-#: main.cc:167
+#: main.cc:174
 msgid ""
 "print log messages according to LOGLEVEL.  Possible values are:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
@@ -2320,24 +2356,24 @@ msgstr ""
 "Logmeldungen nach LOGLEVEL-Einstellung ausgeben.  Mögliche Werte:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (Standard) und DEBUG."
 
-#: main.cc:171
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
 msgstr "Ausgabe in DATEI schreiben (Endung wird hinzugefügt)"
 
-#: main.cc:172
+#: main.cc:179
 msgid "relocate using directory of lilypond program"
 msgstr "wiederfinden mit Hilfe des Lilypond-Programmverzeichnisses"
 
-#: main.cc:173
+#: main.cc:180
 msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
 msgstr "kein Forschritt, nur Fehlermeldungen (entspricht LOGLEVEL=ERROR)"
 
-#: main.cc:175
+#: main.cc:182
 msgid "be verbose (equivalent to loglevel=DEBUG)"
 msgstr "ausführlich sein (entspricht LOGLEVEL=DEBUG)"
 
 #. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:242
+#: main.cc:261
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -2347,74 +2383,74 @@ msgstr ""
 "%s und anderen."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:269
+#: main.cc:299
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Aufruf: %s [OPTION]... DATEI..."
 
-#: main.cc:271
+#: main.cc:301
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Musiksatz und/oder MIDI aus DATEI erzeugen."
 
-#: main.cc:273
+#: main.cc:303
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond erzeugt ansprechenden Notensatz."
 
-#: main.cc:275
+#: main.cc:305
 #, c-format
 msgid "For more information, see %s"
 msgstr "Für weitere Informationen siehe %s"
 
-#: main.cc:277
+#: main.cc:307
 msgid "Options:"
 msgstr "Optionen:"
 
-#: main.cc:331
+#: main.cc:374
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "%d Argumente mit Kerker erwartet, %u gefunden"
 
-#: main.cc:345
+#: main.cc:388
 #, c-format
 msgid "no such user: %s"
 msgstr "kein solcher Benutzer: %s"
 
-#: main.cc:347
+#: main.cc:390
 #, c-format
 msgid "cannot get user id from user name: %s: %s"
 msgstr "Benutzer-ID von Benutzername kann nicht gefunden werden: %s: %s"
 
-#: main.cc:362
+#: main.cc:405
 #, c-format
 msgid "no such group: %s"
 msgstr "keine solche Gruppe: %s"
 
-#: main.cc:364
+#: main.cc:407
 #, c-format
 msgid "cannot get group id from group name: %s: %s"
 msgstr "Gruppen-ID kann nicht von Gruppenname ermittelt werden: %s: %s"
 
-#: main.cc:372
+#: main.cc:415
 #, c-format
 msgid "cannot chroot to: %s: %s"
 msgstr "kein chroot möglich nach: %s: %s"
 
-#: main.cc:379
+#: main.cc:422
 #, c-format
 msgid "cannot change group id to: %d: %s"
 msgstr "Gruppen-ID kann nicht geändert werden in: %d: %s"
 
-#: main.cc:385
+#: main.cc:428
 #, c-format
 msgid "cannot change user id to: %d: %s"
 msgstr "Benutzer-ID kann nicht geändert werden in: %d: %s"
 
-#: main.cc:391
+#: main.cc:434
 #, c-format
 msgid "cannot change working directory to: %s: %s"
 msgstr "aktuelles Verzeichnis kann nicht geändert werden in: %s: %s"
 
-#: main.cc:639
+#: main.cc:805
 #, c-format
 msgid "exception caught: %s"
 msgstr "Ausnahme gefangen: %s"
@@ -2428,31 +2464,31 @@ msgstr "rehearsalMark muss Ganzzahlwert haben"
 msgid "mark label must be a markup object"
 msgstr "Marke muss ein Textbeschriftungsobjekt sein"
 
-#: mensural-ligature-engraver.cc:96
+#: mensural-ligature-engraver.cc:100
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "Ligatur mit weniger als 2 Notenköpfen -> überspringen"
 
-#: mensural-ligature-engraver.cc:123
+#: mensural-ligature-engraver.cc:127
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "Tonhöhe des Ligaturelements kann nicht ermittelt werden -> überspringen"
 
-#: mensural-ligature-engraver.cc:137
+#: mensural-ligature-engraver.cc:141
 msgid "single note ligature - skipping"
 msgstr "Ligatur mit einer einzelnen Note -> überspringen"
 
-#: mensural-ligature-engraver.cc:148
+#: mensural-ligature-engraver.cc:152
 msgid "prime interval within ligature -> skipping"
 msgstr "Prime in der Ligatur -> überspringen"
 
-#: mensural-ligature-engraver.cc:159
+#: mensural-ligature-engraver.cc:163
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "Mensuralligatur: Dauer weder Mx, L, B noch S -> überspringen"
 
-#: mensural-ligature-engraver.cc:202
+#: mensural-ligature-engraver.cc:206
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr "Semibrevis muss von einem weiteren gefolgt werden -> überspringen"
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:216
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
@@ -2460,7 +2496,7 @@ msgstr ""
 "Semibrevis kann nur am Anfang einer Ligatur auftreten,\n"
 "und es können nur null oder zwei davon auftreten"
 
-#: mensural-ligature-engraver.cc:232
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -2472,25 +2508,30 @@ msgstr ""
 "muss die vorletzte Note eine weitere sein,\n"
 "oder die Ligatur muss LB oder SSB sein"
 
-#: mensural-ligature-engraver.cc:387
+#: mensural-ligature-engraver.cc:396
 msgid "unexpected case fall-through"
 msgstr "unerwarteter case-Ausgang"
 
-#: midi-item.cc:89
+#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#, c-format
+msgid "ignoring out-of-range value change for MIDI property `%s'"
+msgstr "Wertänderung außerhalb der Reichweite für MIDI-Eigenschaft »%s« ignoriert"
+
+#: midi-item.cc:92
 #, c-format
 msgid "no such MIDI instrument: `%s'"
 msgstr "kein MIDI-Instrument: `%s'"
 
-#: midi-item.cc:161
+#: midi-item.cc:178
 msgid "Time signature with more than 255 beats.  Truncating"
 msgstr "Taktart mit mehr als 255 Schlägen.  "
 
-#: midi-stream.cc:39
+#: midi-stream.cc:38
 #, c-format
 msgid "cannot open for write: %s: %s"
 msgstr "Es kann nicht zum Schreiben geöffnet werden: %s: %s"
 
-#: midi-stream.cc:55
+#: midi-stream.cc:54
 #, c-format
 msgid "cannot write to file: `%s'"
 msgstr "Es kann nicht in Datei geschrieben werden: »%s«"
@@ -2503,11 +2544,11 @@ msgstr "Zeilenumbrüche werden berechnet..."
 msgid "Calculating page breaks..."
 msgstr "Zeilenumbrüche werden berechnet..."
 
-#: multi-measure-rest.cc:138
+#: multi-measure-rest.cc:154
 msgid "usable-duration-logs must be a non-empty list.  Falling back to whole rests."
 msgstr "usable-duration-logs muss eine nicht-leere Liste sein.  Falle auf ganze Pausen zurück."
 
-#: multi-measure-rest.cc:328
+#: multi-measure-rest.cc:364
 msgid "Using naive multi measure rest spacing."
 msgstr "Benutze simple Platzierung von Mehrtaktpausen."
 
@@ -2525,20 +2566,6 @@ msgstr "(normalisierte Tonhöhe)"
 msgid "Transposing %s by %s makes alteration larger than double"
 msgstr "Transponieren von %s um %s erzeugt mehr als ein Doppel-Vorzeichen"
 
-#: new-dynamic-engraver.cc:168
-#, c-format
-msgid ""
-"unknown crescendo style: %s\n"
-"defaulting to hairpin."
-msgstr ""
-"unbekannter crescendo-Stil: %s\n"
-"wird als spitze Klammer gesetzt."
-
-#: new-dynamic-engraver.cc:233
-#, c-format
-msgid "unterminated %s"
-msgstr "unbegrenzt: »%s«"
-
 #: new-fingering-engraver.cc:113
 msgid "cannot add text scripts to individual note heads"
 msgstr "es kann kein Text zu einzelnen Notenköpfen hinzugefügt werden"
@@ -2551,7 +2578,7 @@ msgstr "Keine Platzierung für Fingersatz gefunden"
 msgid "placing below"
 msgstr "Platzierung darunter"
 
-#: note-collision.cc:496
+#: note-collision.cc:497
 msgid "ignoring too many clashing note columns"
 msgstr "zu viele kollidierende Notenspalten werden ignoriert"
 
@@ -2568,37 +2595,37 @@ msgstr "Keinen der Notenköpfe »%s« und »%s« gefunden"
 msgid "NoteEvent without pitch"
 msgstr "NoteEvent ohne Tonhöhe"
 
-#: open-type-font.cc:44
+#: open-type-font.cc:45
 #, c-format
 msgid "cannot allocate %lu bytes"
 msgstr "es können keine %lu Bytes angefordert werden"
 
-#: open-type-font.cc:48
+#: open-type-font.cc:49
 #, c-format
 msgid "cannot load font table: %s"
 msgstr "Schriftarttabelle kann nicht geladen werden: %s"
 
-#: open-type-font.cc:53
+#: open-type-font.cc:54
 #, c-format
 msgid "FreeType error: %s"
 msgstr "FreeType-Fehler: %s"
 
-#: open-type-font.cc:110
+#: open-type-font.cc:111
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "nicht unterstütztes Schriftartformat: %s"
 
-#: open-type-font.cc:112
+#: open-type-font.cc:113
 #, c-format
 msgid "error reading font file %s: %s"
 msgstr "Fehler beim Lesen der Schriftartdatei: %s: %s"
 
-#: open-type-font.cc:187
+#: open-type-font.cc:188
 #, c-format
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr "FT_Get_Glyph_Name() Freetype-Fehler: %s"
 
-#: open-type-font.cc:318 pango-font.cc:189
+#: open-type-font.cc:336 pango-font.cc:256
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
 msgstr "FT_Get_Glyph_Name() Fehler: %s"
@@ -2608,35 +2635,35 @@ msgstr "FT_Get_Glyph_Name() Fehler: %s"
 msgid "Finding the ideal number of pages..."
 msgstr "Ideale Seitenanzahl wird gefunden..."
 
-#: optimal-page-breaking.cc:85
+#: optimal-page-breaking.cc:92
 msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page"
 msgstr "konnte nicht systems-per-page und page-count gleichzeitig anwenden, ignoriere systems-per-page"
 
-#: optimal-page-breaking.cc:105
+#: optimal-page-breaking.cc:112
 msgid "Fitting music on 1 page..."
 msgstr "Musik wird auf eine Seite angepasst..."
 
-#: optimal-page-breaking.cc:107
+#: optimal-page-breaking.cc:114
 #, c-format
 msgid "Fitting music on %d pages..."
 msgstr "Musik wird auf %d Seiten angepasst..."
 
-#: optimal-page-breaking.cc:109
+#: optimal-page-breaking.cc:116
 #, c-format
 msgid "Fitting music on %d or %d pages..."
 msgstr "Musik wird auf %d oder %d Seiten angepasst..."
 
-#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:172
+#: optimal-page-breaking.cc:126 optimal-page-breaking.cc:179
 #, c-format
 msgid "trying %d systems"
 msgstr "versuche %d Systeme"
 
-#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:200
+#: optimal-page-breaking.cc:145 optimal-page-breaking.cc:207
 #, c-format
 msgid "best score for this sys-count: %f"
 msgstr "bester Score für dieses sys-count: %f"
 
-#: optimal-page-breaking.cc:207 page-turn-page-breaking.cc:248
+#: optimal-page-breaking.cc:214 page-turn-page-breaking.cc:248
 #: paper-score.cc:162
 msgid "Drawing systems..."
 msgstr "Systeme erstellen..."
@@ -2657,24 +2684,24 @@ msgstr "ignoriere min-systems-per-page und max-systems-per-page weil systems-per
 msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values"
 msgstr "min-systems-per-page ist größer als max-systems-per-page, beide Werte werden ignoriert"
 
-#: page-layout-problem.cc:403
+#: page-layout-problem.cc:402
 msgid "A page layout problem has been initiated that cannot accommodate footnotes."
 msgstr "Ein Seitenlayoutproblem wurde initiiert, das Fußnoten nicht aufnehmen kann."
 
-#: page-layout-problem.cc:732
+#: page-layout-problem.cc:731
 msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed"
 msgstr "Noten passen nicht auf die Seite: ragged-spacing wurde verlangt, aber die Seite wurde komprimiert"
 
-#: page-layout-problem.cc:735
+#: page-layout-problem.cc:734
 #, c-format
 msgid "cannot fit music on page: overflow is %f"
 msgstr "Noten passen nicht auf die Seite: Überhang ist %f"
 
-#: page-layout-problem.cc:737
+#: page-layout-problem.cc:736
 msgid "compressing music to fit"
 msgstr "Noten werden komprimiert um zu passen"
 
-#: page-layout-problem.cc:1197
+#: page-layout-problem.cc:1199
 msgid "staff-affinities should only decrease"
 msgstr "staff-affinities sollten nur abnehmen"
 
@@ -2717,7 +2744,12 @@ msgstr "\tSeitenanzahl: %d"
 msgid "\tprevious break: %d"
 msgstr "\tvorheriger Umbruch: %d"
 
-#: pango-font.cc:205
+#: pango-font.cc:245
+#, c-format
+msgid "no glyph for character U+%0X in font `%s'"
+msgstr "Kein Glyph für Zeichen U+%0X in Schriftart »%s«"
+
+#: pango-font.cc:272
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
@@ -2726,12 +2758,12 @@ msgstr ""
 "Glyph hat keinen Namen, aber Zeichensatz unterstützt Glyphnamen.\n"
 "Glyph U+%0X wird übersprungen, Datei %s"
 
-#: pango-font.cc:242
+#: pango-font.cc:322
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "Kein PostScript-Schriftartname für Schriftart: »%s«"
 
-#: pango-font.cc:291
+#: pango-font.cc:372
 msgid "FreeType face has no PostScript font name"
 msgstr "FreeType-Schriftart hat keinen PostScript-Schriftartnamen"
 
@@ -2745,7 +2777,7 @@ msgstr "Programmoption -dprint-pages nicht von Backend »%s« unterstützt"
 msgid "program option -dpreview not supported by backend `%s'"
 msgstr "Programmoption -dpreview nicht von »%s« unterstützt"
 
-#: paper-column-engraver.cc:261
+#: paper-column-engraver.cc:263
 msgid "forced break was overridden by some other event, should you be using bar checks?"
 msgstr "erzwungener Umbruch war durch anderes Ereignis aufgehoben, sollten Taktüberprüfungen vorgenommen werden?"
 
@@ -2771,7 +2803,7 @@ msgstr "GUILE signalisierte einen Fehler für den hier beginnenden Ausdruck"
 msgid "trying to use \\partial after the start of a piece"
 msgstr "versuche, \\partial nach dem Beginn eines Stückes einzusetzen"
 
-#: pdf-scheme.cc:50
+#: pdf-scheme.cc:65
 #, c-format
 msgid "Conversion of string `%s' to UTF-16be failed: %s"
 msgstr "Konversion der Zeichenkette »%s« nach UTF16be fehlgeschlagen: %s"
@@ -2789,25 +2821,6 @@ msgstr "Spur..."
 msgid "MIDI output to `%s'..."
 msgstr "MIDI-Ausgabe nach »%s«..."
 
-#: phrasing-slur-engraver.cc:101 slur-engraver.cc:102
-#, c-format
-msgid "direction of %s invalid: %d"
-msgstr "Richtung von %s ungültig: %d"
-
-#: phrasing-slur-engraver.cc:175
-msgid "unterminated phrasing slur"
-msgstr "nicht beendeter Phrasierungsbogen"
-
-#: phrasing-slur-engraver.cc:210
-msgid "cannot end phrasing slur"
-msgstr "Phrasierungsbogen kann nicht beendet werden"
-
-#. We already have an old slur, so give a warning
-#. and completely ignore the new slur.
-#: phrasing-slur-engraver.cc:230
-msgid "already have phrasing slur"
-msgstr "habe bereits einen Phrasierungsbogen"
-
 #: piano-pedal-engraver.cc:279
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
@@ -2824,12 +2837,12 @@ msgstr "es kann kein Anfang für Piano-Pedal gefunden werden: »%s«"
 msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "es kann kein Anfang für Piano-Pedal-Klammer gefunden werden: »%s«"
 
-#: program-option-scheme.cc:235
+#: program-option-scheme.cc:223
 #, c-format
 msgid "no such internal option: %s"
 msgstr "keine solche interne Option: %s"
 
-#: property-iterator.cc:93
+#: property-iterator.cc:100
 #, c-format
 msgid "not a grob name, `%s'"
 msgstr "Kein Name für grafische Objekte (grob): »%s«"
@@ -2876,40 +2889,40 @@ msgstr "Verlagerung: Kompilier-Datenverzeichnis=%s, neues Datenverzeichnis=%s"
 msgid "Relocation: framework_prefix=%s"
 msgstr "Verlagerung: framework_prefix=%s"
 
-#: relocate.cc:186
+#: relocate.cc:172
 #, c-format
 msgid "Relocation: is absolute: argv0=%s\n"
 msgstr "Verlagerung: ist absolut: argv0=%s\n"
 
-#: relocate.cc:192
+#: relocate.cc:178
 #, c-format
-msgid "Relocation: from cwd: argv0=%s\n"
+msgid "Relocation : from cwd: argv0=%s\n"
 msgstr "Verlagerung: von cwd: argv0=%s\n"
 
-#: relocate.cc:208
+#: relocate.cc:194
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 msgstr ""
 "Verlagerung: von PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 
-#: relocate.cc:235
+#: relocate.cc:220
 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
 msgstr "LILYPONDPREFIX is veraltet, stattdessen LILYPOND_DATADIR verwenden"
 
-#: relocate.cc:360
+#: relocate.cc:345
 #, c-format
 msgid "Relocation file: %s"
 msgstr "Verlagerungsdatei: %s"
 
-#: relocate.cc:364 source-file.cc:65
+#: relocate.cc:349 source-file.cc:65
 #, c-format
 msgid "cannot open file: `%s'"
 msgstr "Datei kann nicht geöffnet werden: »%s«"
 
-#: relocate.cc:394
+#: relocate.cc:379
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr "Unbekannter Verlagerungsbefehl %s"
@@ -2918,15 +2931,15 @@ msgstr "Unbekannter Verlagerungsbefehl %s"
 msgid "rhythmic head is not part of a rhythmic column"
 msgstr "der rhythmische Kopf gehört nicht zu einer rhythmischen Kolumne"
 
-#: rest-collision.cc:146
+#: rest-collision.cc:150
 msgid "cannot resolve rest collision: rest direction not set"
 msgstr "Zusammenstoß von Pausen kann nicht aufgelöst werden: Richtung von Pausen nicht gesetzt"
 
-#: rest-collision.cc:157 rest-collision.cc:266
+#: rest-collision.cc:161 rest-collision.cc:270
 msgid "too many colliding rests"
 msgstr "zu viele kollidierende Pausen"
 
-#: rest.cc:192
+#: rest.cc:240
 #, c-format
 msgid "rest `%s' not found"
 msgstr "Pause »%s« nicht gefunden"
@@ -2962,33 +2975,41 @@ msgid "errors found, ignoring music expression"
 msgstr "Fehler gefunden, musikalischer Ausdruck wird ignoriert"
 
 #. FIXME:
-#: script-engraver.cc:113
+#: script-engraver.cc:115
 msgid "do not know how to interpret articulation:"
 msgstr "Interpretation für Artikulation unbekannt:"
 
-#: script-engraver.cc:114
+#: script-engraver.cc:116
 msgid " scheme encoding: "
 msgstr " Scheme-Kodierung: "
 
-#: skyline-pair.cc:131
+#: skyline-pair.cc:160
 msgid "direction must not be CENTER in ly:skyline-pair::skyline"
 msgstr "Richtung darf nicht CENTER sein in ly:skyline-pair::skyline"
 
-#: slur-engraver.cc:176
-msgid "unterminated slur"
-msgstr "unbegrenzter Legatobogen"
-
-#: slur-engraver.cc:211
-msgid "cannot end slur"
-msgstr "Legatobogen kann nicht beendet werden"
+#: slur-proto-engraver.cc:51
+#, c-format
+msgid "direction of %s invalid: %d"
+msgstr "Richtung von %s ungültig: %d"
 
 #. We already have an old slur, so give a warning
 #. and completely ignore the new slur.
-#: slur-engraver.cc:231
-msgid "already have slur"
-msgstr "habe bereits einen Bogen"
+#: slur-proto-engraver.cc:166
+#, c-format
+msgid "already have %s"
+msgstr "habe bereits %s"
 
-#: slur.cc:430
+#: slur-proto-engraver.cc:183
+#, c-format
+msgid "%s without a cause"
+msgstr "%s ohne Grund"
+
+#: slur-proto-engraver.cc:244
+#, c-format
+msgid "cannot end %s"
+msgstr "%s kann nicht beendet werden"
+
+#: slur.cc:434
 #, c-format
 msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
 msgstr "Grob für Legatobogen wird ignoriert: %s.  avoid-slur nicht gesetzt?"
@@ -2998,11 +3019,11 @@ msgstr "Grob für Legatobogen wird ignoriert: %s.  avoid-slur nicht gesetzt?"
 msgid "expected to read %d characters, got %d"
 msgstr "%d Zeichen erwartet, %d erhalten"
 
-#: staff-performer.cc:275
+#: staff-performer.cc:301
 msgid "MIDI channel wrapped around"
 msgstr "MIDI-Kanal zurückgesprungen"
 
-#: staff-performer.cc:276
+#: staff-performer.cc:302
 msgid "remapping modulo 16"
 msgstr "modulo 16 neu zuordnen"
 
@@ -3023,12 +3044,12 @@ msgstr "vielleicht sollte die Eingabe mehrere Stimmen erstellen"
 msgid "weird stem size, check for narrow beams"
 msgstr "Eigenartige Notenhalslänge; auf enge Balken überprüfen"
 
-#: system.cc:200
+#: system.cc:201
 #, c-format
 msgid "Element count %d"
 msgstr "Elementanzahl %d."
 
-#: system.cc:480
+#: system.cc:512
 #, c-format
 msgid "Grob count %d"
 msgstr "Anzahl der grafischen Objekte (grob): %d"
@@ -3057,11 +3078,11 @@ msgstr "Textklammer bereits vorhanden"
 msgid "unterminated text spanner"
 msgstr "unbegrenzte Textklammer"
 
-#: tie-engraver.cc:117
+#: tie-engraver.cc:119
 msgid "unterminated tie"
 msgstr "unbegrenzter Bindebogen"
 
-#: tie-engraver.cc:348
+#: tie-engraver.cc:353
 msgid "lonely tie"
 msgstr "einsamer Bindebogen"
 
@@ -3077,7 +3098,7 @@ msgstr "seltsame Taktart gefunden: %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:122
+#: time-signature.cc:89
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr "Taktart-Symbol »%s« nicht gefunden; wird in nummerierten Stil umgewandelt"
@@ -3163,68 +3184,119 @@ msgstr "endende Textklammer auch bereits vorhanden"
 msgid "giving up"
 msgstr "aufgeben"
 
-#: parser.yy:161 parser.yy:175
+#: parser.yy:154 parser.yy:168
 msgid "Too much lookahead"
 msgstr "Zu viel Vorgriff"
 
-#: parser.yy:835 parser.yy:1284
+#: parser.yy:434 parser.yy:744 parser.yy:810
+msgid "bad expression type"
+msgstr "falsche Ausdrucksart"
+
+#: parser.yy:642 parser.yy:1138
 msgid "not a context mod"
 msgstr "kein solcher Kontextmodus"
 
-#: parser.yy:1027
+#: parser.yy:845
+msgid "score expected"
+msgstr "Partitur (score) erwartet"
+
+#: parser.yy:861
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "\\paper kann nicht in \\source verwendet werden; stattdessen \\layout verwenden"
 
-#: parser.yy:1051
+#: parser.yy:885
 msgid "need \\paper for paper block"
 msgstr "Für Papier-Block wird \\paper benötigt"
 
-#: parser.yy:1204
+#: parser.yy:1025 parser.yy:1047
+msgid "unexpected post-event"
+msgstr "unerwarteter post-event"
+
+#: parser.yy:1055
 msgid "Ignoring non-music expression"
 msgstr "Nicht-musikalischer Ausdruck wird ignoriert"
 
-#: parser.yy:2044
+#: parser.yy:1066 parser.yy:2475
+msgid "music expected"
+msgstr "Noten erwartet"
+
+#: parser.yy:1353
+msgid "not a symbol"
+msgstr "kein Symbol"
+
+#: parser.yy:2146 parser.yy:2260 parser.yy:2273 parser.yy:2282
+msgid "bad grob property path"
+msgstr "falscher Pfad für Grob-Eigenschaft"
+
+#: parser.yy:2240
 msgid "only \\consists and \\remove take non-string argument."
 msgstr "nur \\consists und \\remove verstehen ein Nicht-Zeichenketten-Argument."
 
-#: parser.yy:2057
-msgid "Grob name should be alphanumeric"
-msgstr "Grob-Name sollte alphanumerisch sein"
+#: parser.yy:2301
+msgid "bad context property path"
+msgstr "falscher Pfad für Kontexteigenschaft"
+
+#: parser.yy:2402
+msgid "simple string expected"
+msgstr "Einzelne Zeichenkette erwartet"
 
-#: parser.yy:2261
+#: parser.yy:2420
+msgid "symbol expected"
+msgstr "Symbol erwartet"
+
+#: parser.yy:2584
 msgid "not a rhythmic event"
 msgstr "kein rhytmisches Ereignis"
 
-#: parser.yy:2357 parser.yy:2362
+#: parser.yy:2658
+msgid "post-event expected"
+msgstr "post-event erwartet"
+
+#: parser.yy:2667 parser.yy:2672
 msgid "have to be in Lyric mode for lyrics"
 msgstr "muss in Liedtextmodus sein um Liedtext setzen zu können"
 
-#: parser.yy:2477
+#: parser.yy:2740
 msgid "expecting string as script definition"
 msgstr "Zeichenkette als Skriptdefinition erwartet"
 
-#: parser.yy:2637 parser.yy:2681
-#, c-format
-msgid "not a duration: %d"
-msgstr "keine gültige Dauer: %d"
+#: parser.yy:2835
+msgid "not an articulation"
+msgstr "keine Artikulation"
+
+#: parser.yy:2907 parser.yy:2950
+msgid "not a duration"
+msgstr "keine Dauer"
+
+#: parser.yy:2967
+msgid "bass number expected"
+msgstr "Bass-Ziffer erwartet"
 
-#: parser.yy:2800
+#: parser.yy:3066
 msgid "have to be in Note mode for notes"
 msgstr "Muss im Notenmodus sein für Noten"
 
-#: parser.yy:2855
+#: parser.yy:3125
 msgid "have to be in Chord mode for chords"
 msgstr "Muss im Akkordmodus sein für Akkorde"
 
-#: parser.yy:3115
+#: parser.yy:3140
+msgid "markup outside of text script or \\lyricmode"
+msgstr "Beschriftung außerhalb von Textbeschriftung oder \\lyricmode"
+
+#: parser.yy:3145
+msgid "unrecognized string, not in text script or \\lyricmode"
+msgstr "Zeichenkette nicht erkannt, weder Textbeschriftung noch \\lyricmode"
+
+#: parser.yy:3362
 msgid "not a markup"
 msgstr "Keine Textbeschriftung"
 
-#: lexer.ll:218
+#: lexer.ll:224
 msgid "stray UTF-8 BOM encountered"
 msgstr "verirrtes UTF-8 BOM gefunden"
 
-#: lexer.ll:221
+#: lexer.ll:227
 msgid "Skipping UTF-8 BOM"
 msgstr "UTF-8 BOM wird übersprungen"
 
@@ -3245,60 +3317,64 @@ msgstr "zitierte Zeichenkette hinter \\sourcefilename erwartet"
 msgid "integer expected after \\sourcefileline"
 msgstr "Ganzzahl hinter \\sourcefilename erwartet"
 
-#: lexer.ll:327
+#: lexer.ll:331
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput ist außerhalb von Init-Dateien nicht erlaubt"
 
-#: lexer.ll:351
+#: lexer.ll:355
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "falscher oder ungültiger Bezeichner: »%s«"
 
-#: lexer.ll:377
+#: lexer.ll:381
 msgid "string expected after \\include"
 msgstr "Zeichenkette hinter \\include erwartet"
 
-#. backup rule
-#: lexer.ll:387
+#: lexer.ll:391
 msgid "end quote missing"
 msgstr "schließendes Anführungszeichen fehlt"
 
-#: lexer.ll:558
-msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Klammer am Ende von Liedtext gefunden. Haben Sie ein Leerzeichen vergessen?"
-
-#: lexer.ll:672
-msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Klammer am Ende des Auszugs gefunden. Haben Sie ein Leerzeichen vergessen?"
-
-#: lexer.ll:684
+#: lexer.ll:743
 msgid "EOF found inside a comment"
 msgstr "EOF innerhalb eines Kommentares gefunden"
 
-#: lexer.ll:782
+#: lexer.ll:748
+msgid "EOF found inside string"
+msgstr "EOF innerhalb einer Zeichenkette gefunden"
+
+#: lexer.ll:763
+msgid "Unfinished main input"
+msgstr "Haupt-Eingabe nicht beendet"
+
+#: lexer.ll:834
 #, c-format
 msgid "invalid character: `%s'"
 msgstr "Ungültiges Zeichen: »%s«"
 
-#: lexer.ll:903 lexer.ll:904
+#: lexer.ll:963
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "Ungültige Fluchtsequenz: »\\%s«"
 
-#: lexer.ll:1186 lexer.ll:1187
+#: lexer.ll:983
+#, c-format
+msgid "undefined character or shorthand: %s"
+msgstr "Zeichen oder Verweis nicht definiert: `%s'"
+
+#: lexer.ll:1275
 msgid "non-UTF-8 input"
 msgstr "nicht-UTF8-Eingabe"
 
-#: lexer.ll:1230 lexer.ll:1231
+#: lexer.ll:1319
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr "Datei zu alt: %s (älteste unterstützte: %s)"
 
-#: lexer.ll:1231 lexer.ll:1232
+#: lexer.ll:1320
 msgid "consider updating the input with the convert-ly script"
 msgstr "Erwägen Sie die Aktualisierung der Eingabe mit dem Skript convert-ly"
 
-#: lexer.ll:1237 lexer.ll:1238
+#: lexer.ll:1326
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr "Programm zu alt: %s (Datei erfordert: %s)"
@@ -3313,28 +3389,53 @@ msgstr "»~s« wird aufgerufen..."
 msgid "`~a' failed (~a)\n"
 msgstr "»~a« gescheitert (~a)\n"
 
-#: backend-library.scm:90
+#: backend-library.scm:93
 #, scheme-format
 msgid "Converting to `~a'...\n"
 msgstr "Konvertierung nach »~a«...\n"
 
 #. Do not try to guess the name of the png file,
 #. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:99
+#: backend-library.scm:102
 #, scheme-format
 msgid "Converting to ~a..."
 msgstr "Konvertierung nach ~a..."
 
-#: backend-library.scm:137
+#: backend-library.scm:140
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Kopfzeile »~a« wird nach »~a« geschrieben"
 
-#: backend-library.scm:187
+#: backend-library.scm:189
 #, scheme-format
 msgid "missing stencil expression `~S'"
 msgstr "fehlender Stencil-Ausdruck »~S«"
 
+#: bar-line.scm:133
+#, scheme-format
+msgid "Bar glyph ~a not known. Ignoring."
+msgstr "Falscher Glyph ~a nicht bekannt.  Wird ignoriert."
+
+#: bar-line.scm:161
+#, scheme-format
+msgid "Annotation '~a' is allowed in the first argument of a bar line definition only."
+msgstr "Erläuterng »~a« ist nur als erstes Argument einer Taktstrichdefinition erlaubt"
+
+#: bar-line.scm:169
+#, scheme-format
+msgid "Replacement '~a' is allowed in the last argument of a bar line definition only."
+msgstr "Ersetzung »~a« ist nur im letzten Argument einer Taktstrichdefinition erlaubt."
+
+#: bar-line.scm:230
+#, scheme-format
+msgid "add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character."
+msgstr "add-bar-glyph-print-procedure: Glyph »~a« muss ein einzelnes ASCII-Zeichen sein."
+
+#: bar-line.scm:795
+#, scheme-format
+msgid "No span bar glyph defined for bar glyph '~a'; ignoring."
+msgstr "Kein Spanner-Takt-Glyph definiert für den Taktglyph »~a«, wird ignoriert."
+
 #: chord-entry.scm:52
 #, scheme-format
 msgid "Spurious garbage following chord: ~A"
@@ -3346,64 +3447,84 @@ msgstr "Anscheinend sinnloser Text nach Akkord: ~A"
 msgid "symbol ~S redefined"
 msgstr "Symbol ~S redefiniert"
 
-#: define-event-classes.scm:67
+#: define-event-classes.scm:73
 #, scheme-format
 msgid "unknown parent class `~a'"
 msgstr "Unbekannte Elternklasse »~a«"
 
-#: define-markup-commands.scm:887
+#: define-event-classes.scm:107
+#, scheme-format
+msgid "Cannot redefine event class `~S'"
+msgstr "Kann Ereignisklasse »~S« nicht umdefinieren"
+
+#: define-event-classes.scm:109
+#, scheme-format
+msgid "Undefined parent event class `~S'"
+msgstr "Undefinierte Elternereignisklasse »~S«"
+
+#: define-markup-commands.scm:1037
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr "keine Systeme in \\score-Markup gefunden, hat es einen \\layout-Block?"
 
-#: define-markup-commands.scm:2614
+#: define-markup-commands.scm:2856
 #, scheme-format
 msgid "Cannot find glyph ~a"
 msgstr "Kann kein Zeichen ~a finden"
 
-#: define-markup-commands.scm:3040
+#: define-markup-commands.scm:3282
 #, scheme-format
 msgid "no brace found for point size ~S "
 msgstr "Keine Klammer in Größe ~S pt gefunden"
 
-#: define-markup-commands.scm:3041
+#: define-markup-commands.scm:3283
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr "Setze Standard ~S pt"
 
-#: define-markup-commands.scm:3194
+#: define-markup-commands.scm:3535
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "keine gültige Dauer: ~a"
 
-#: define-music-types.scm:765
+#: define-markup-commands.scm:3746
+#, scheme-format
+msgid "not a valid duration string: ~a - ignoring"
+msgstr "keine gültige Dauer: ~a, wird ignoriert"
+
+#: define-music-types.scm:792
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr "Symbol erwartet: ~S"
 
-#: define-music-types.scm:768
+#: define-music-types.scm:795
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr "Musikobjekt kann nicht gefunden werden: ~S"
 
-#: define-music-types.scm:787
+#: define-music-types.scm:815
+#, scheme-format
+msgid "bad make-music argument: ~S"
+msgstr "falsches make-music argument: ~S"
+
+#: define-music-types.scm:827
 #, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "unbekannter Wiederholungstyp »~S«"
 
-#: define-music-types.scm:788
+#: define-music-types.scm:828
 msgid "See define-music-types.scm for supported repeats"
 msgstr "Siehe define-music-types.scm für unterstützte Wiederholungen"
 
-#: define-note-names.scm:962
+#: define-note-names.scm:972
 msgid "Select note names language."
 msgstr "Wählen Sie die Sprache der Notenbezeichnungen."
 
-#: define-note-names.scm:968
+#: define-note-names.scm:978
 #, scheme-format
 msgid "Using `~a' note names..."
 msgstr "Benutze Notenbezeichnung »~a«..."
 
-#: define-note-names.scm:971
+#: define-note-names.scm:981
 #, scheme-format
 msgid "Could not find language `~a'.  Ignoring."
 msgstr "Konnte Sprache »~a« nicht finden.  Wird ignoriert."
@@ -3443,7 +3564,7 @@ msgstr "Beschreibung für Eigenschaft ~S' (~S) kann nicht gefunden werden"
 msgid "cannot find description for property ~S (~S)"
 msgstr "Beschreibung für Eigenschaft ~S (~S) kann nicht gefunden werden"
 
-#: flag-styles.scm:151
+#: flag-styles.scm:162
 #, scheme-format
 msgid "flag stroke `~a' or `~a' not found"
 msgstr "Fähnchenstrich »~a«·or·»~a« nicht gefunden"
@@ -3473,7 +3594,7 @@ msgstr "Unbekannte Einbettung ~S=~S"
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr "Unbekannte Schriftsatzeinbettung ~s ~s ~s"
 
-#: framework-ps.scm:686
+#: framework-ps.scm:687
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
@@ -3522,20 +3643,20 @@ msgstr "Fehler bei Balkenzuschnitt. (~S,~S) erwartet, ~S gefunden."
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr "Fehler bei Balkenzuschnitt. ~S 0 erwartet, ~S gefunden."
 
-#: lily-library.scm:299
+#: lily-library.scm:333
 msgid "Music unsuitable for context-mod"
 msgstr "Musik unpassend für context-mod"
 
-#: lily-library.scm:349
+#: lily-library.scm:388
 #, scheme-format
 msgid "Cannot find context-def \\~a"
 msgstr "Kann contex-def \\~a nicht finden"
 
-#: lily-library.scm:365
+#: lily-library.scm:404
 msgid "Music unsuitable for output-def"
 msgstr "Musik unpassend für output-def"
 
-#: lily-library.scm:892
+#: lily-library.scm:884
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
 "which produces the closest match to @var{target-val} if\n"
@@ -3545,47 +3666,51 @@ msgstr ""
 "die den nächstmöglichen Treffer für @var{target-val} findet,\n"
 "wenn auf die Funktion @var{getter} angewandt."
 
-#: lily-library.scm:966
+#: lily-library.scm:955
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr "unbekannte Einheit: ~S"
 
-#: lily-library.scm:991
+#: lily-library.scm:980
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr "keine \\version-Anweisung gefunden, ~a für zukünftige Kompatibilität hinzufügen"
 
-#: lily-library.scm:997
-msgid "old relative compatibility not used"
-msgstr "alte relative Kompatibilität nicht verwendet"
+#: lily.scm:75
+msgid "call-after-session used after session start"
+msgstr "call-after-session nach Beginn des Abschnitts benutzt"
 
-#: lily.scm:234
+#: lily.scm:93
+msgid "define-session used after session start"
+msgstr "define-session nach Beginn des Abschnitts benutzt"
+
+#: lily.scm:393
 msgid "Using (ice-9 curried-definitions) module\n"
 msgstr "Benutze Modul (ice-9 curried-definitions)\n"
 
-#: lily.scm:237
+#: lily.scm:396
 msgid "Guile 1.8\n"
 msgstr "Guile 1.8\n"
 
-#: lily.scm:297
+#: lily.scm:455
 #, scheme-format
 msgid "cannot find: ~A"
 msgstr "~A kann nicht gefunden werden"
 
-#: lily.scm:708
+#: lily.scm:878
 msgid "Success: compilation successfully completed"
 msgstr "Kompilation erfolgreich beendet"
 
-#: lily.scm:709
+#: lily.scm:879
 msgid "Compilation completed with warnings or errors"
 msgstr "Kompilation mit Warnungen bzw. Fehlermeldungen beendet"
 
-#: lily.scm:771
+#: lily.scm:940
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr "Auftrag ~a mit Signal ~a beendet"
 
-#: lily.scm:774
+#: lily.scm:943
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
@@ -3594,17 +3719,17 @@ msgstr ""
 "Logdatei ~a (Ende ~a):\n"
 "~a"
 
-#: lily.scm:796 lily.scm:882
+#: lily.scm:965 lily.scm:1054
 #, scheme-format
 msgid "failed files: ~S"
 msgstr "gescheiterte Dateien: ~S"
 
-#: lily.scm:873
+#: lily.scm:1045
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Ausgabeumleitung nach ~a..."
 
-#: lily.scm:892 ps-to-png.scm:66
+#: lily.scm:1064 ps-to-png.scm:66
 #, scheme-format
 msgid "Invoking `~a'...\n"
 msgstr "»~a« wird aufgerufen...\n"
@@ -3619,7 +3744,7 @@ msgstr "~a-Funktion kann nicht ~a ausgeben"
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "falscher Typ für Argument ~a; ~a erwartet, ~s gefunden"
 
-#: ly-syntax-constructors.scm:188
+#: ly-syntax-constructors.scm:199
 #, scheme-format
 msgid "Invalid property operation ~a"
 msgstr "Ungültige Eigenschaftsoperation ~a"
@@ -3672,63 +3797,63 @@ msgstr "mehr Alternativen als Wiederholungen. Überschüssige Alternativen werde
 msgid "invalid tremolo repeat count: ~a"
 msgstr "ungültige Tremolo-Wiederholung: ~a"
 
-#: music-functions.scm:689
+#: music-functions.scm:459
+#, scheme-format
+msgid "bad grob property path ~a"
+msgstr "Ungültiger Grob-Eigenschaftspfad ~a"
+
+#: music-functions.scm:753
 msgid "Bad chord repetition"
 msgstr "Falsche Akkordwiederholung"
 
-#: music-functions.scm:724
+#: music-functions.scm:788
 #, scheme-format
 msgid "music expected: ~S"
 msgstr "Musik erwartet: ~S"
 
-#: music-functions.scm:1042
+#: music-functions.scm:1144
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr "zitierte Musik »~S« kann nicht gefunden werden"
 
-#: music-functions.scm:1180
+#: music-functions.scm:1282
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr "Füge @var{octave-shift} zur Oktave von @var{pitch} hinzu."
 
-#: music-functions.scm:1240
+#: music-functions.scm:1342
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr "Unbekannter Oktaven-Typ: »~S«"
 
-#: music-functions.scm:1241
+#: music-functions.scm:1343
 msgid "Defaulting to 'any-octave."
 msgstr "Setze Standard 'any-octave"
 
-#: music-functions.scm:1578
+#: music-functions.scm:1688
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "unbekannter Versetzungszeichenstil: ~S"
 
-#: output-ps.scm:277 output-svg.scm:524
+#: output-ps.scm:278 output-svg.scm:539
 #, scheme-format
 msgid "unknown line-cap-style: ~S"
 msgstr "unbekannter line-cap-style: ~S"
 
-#: output-ps.scm:282 output-svg.scm:530
+#: output-ps.scm:283 output-svg.scm:545
 #, scheme-format
 msgid "unknown line-join-style: ~S"
 msgstr "unbekannter line-join-style: ~S"
 
-#: output-svg.scm:47
-#, scheme-format
-msgid "undefined: ~S"
-msgstr "nicht definiert: ~S"
-
-#: output-svg.scm:157
+#: output-svg.scm:148
 #, scheme-format
 msgid "cannot decypher Pango description: ~a"
 msgstr "Pango-Beschreibung kann nicht entschlüsselt werden: ~a"
 
-#: output-svg.scm:237
+#: output-svg.scm:228
 msgid "Glyph must have a unicode value"
 msgstr "Das Zeichen muss einen Unicode-Wert haben"
 
-#: output-svg.scm:289 output-svg.scm:299
+#: output-svg.scm:280 output-svg.scm:290
 #, scheme-format
 msgid "cannot find SVG font ~S"
 msgstr "SVG-Schriftart ~S kann nicht gefunden werden"
@@ -3737,33 +3862,33 @@ msgstr "SVG-Schriftart ~S kann nicht gefunden werden"
 msgid "set-global-staff-size: not in toplevel scope"
 msgstr "set-global-staff-size: Nicht auf höchster Ebene im Gültigkeitsbereich"
 
-#: paper.scm:315
+#: paper.scm:320
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "Dies ist kein \\layout {} Objekt, ~S"
 
-#: paper.scm:327
+#: paper.scm:328
 #, scheme-format
 msgid "Unknown paper size: ~a"
 msgstr "Unbekannte Papiergröße: ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:342
+#: paper.scm:347
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "#(set-paper-size ..) muss innerhalb von \\paper { ... } verwendet werden"
 
-#: parser-clef.scm:143 parser-clef.scm:183
+#: parser-clef.scm:164
 #, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "unbekannter Notenschlüsseltyp »~a«"
 
-#: parser-clef.scm:144 parser-clef.scm:184
+#: parser-clef.scm:165
 #, scheme-format
 msgid "supported clefs: ~a"
 msgstr "unterstützte Notenschlüssel: ~a"
 
-#: parser-ly-from-scheme.scm:73
+#: parser-ly-from-scheme.scm:74
 msgid "error in #{ ... #}"
 msgstr "Fehler in #{ ... #}"
 
@@ -3777,45 +3902,45 @@ msgstr "Zitierte Noten »~a« sind leer"
 msgid "~a exited with status: ~S"
 msgstr "~a mit Rückgabewert ~S beendet"
 
-#: to-xml.scm:191
+#: to-xml.scm:190
 #, scheme-format
 msgid "assertion failed: ~S"
 msgstr "Behauptung gescheitert: ~S"
 
-#: translation-functions.scm:359
+#: translation-functions.scm:368
 #, scheme-format
 msgid "Negative fret for pitch ~a on string ~a"
 msgstr "Negativer Bund für Tonhöhe ~a auf Saite ~a"
 
-#: translation-functions.scm:362
+#: translation-functions.scm:371
 #, scheme-format
 msgid "Missing fret for pitch ~a on string ~a"
 msgstr "Fehlender Bund für Tonhöhe ~a auf Saite ~a"
 
-#: translation-functions.scm:413
+#: translation-functions.scm:414
 #, scheme-format
 msgid "No open string for pitch ~a"
 msgstr "Keine leere Saite für Tonhöhe ~a"
 
-#: translation-functions.scm:428 translation-functions.scm:440
+#: translation-functions.scm:429 translation-functions.scm:441
 #, scheme-format
 msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
 msgstr "Geforderte Saite für Tonhöhe erfordert negativen Bund: Saite ~a Tonhöhe ~a"
 
-#: translation-functions.scm:431
+#: translation-functions.scm:432
 msgid "Ignoring string request and recalculating."
 msgstr "Saiten-Anforderung wird ignoriert und neu berechnet"
 
-#: translation-functions.scm:443
+#: translation-functions.scm:444
 msgid "Ignoring note in tablature."
 msgstr "Note in der Tabulatur wird ignoriert."
 
-#: translation-functions.scm:466
+#: translation-functions.scm:469
 #, scheme-format
 msgid "No string for pitch ~a (given frets ~a)"
 msgstr "Keine Saite für Tonhöhe ~a (Bund ~a angegeben)"
 
-#: translation-functions.scm:571
+#: translation-functions.scm:574
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
@@ -3824,6 +3949,51 @@ msgstr ""
 "Keine Beschriftung für Bund ~a (auf Saite ~a);\n"
 "nur ~a Bundbeschriftung zur Verfügung"
 
+#~ msgid "cannot find start of (de)crescendo"
+#~ msgstr "Anfang des (De-) Crescendos kann nicht gefunden werden"
+
+#~ msgid "already have a decrescendo"
+#~ msgstr "Decrescendo bereits vorhanden"
+
+#~ msgid "already have a crescendo"
+#~ msgstr "Crescendo bereits vorhanden"
+
+#~ msgid "cresc starts here"
+#~ msgstr "Crescendo beginnt hier"
+
+#~ msgid "unterminated (de)crescendo"
+#~ msgstr "unbegrenztes (De-) Crescendo"
+
+#~ msgid "Line spanner's left point is to the right of its right point."
+#~ msgstr "Der linke Punkt eines Linienstreckers ist rechts von seinem linken Punkt."
+
+#~ msgid "unterminated phrasing slur"
+#~ msgstr "nicht beendeter Phrasierungsbogen"
+
+#~ msgid "cannot end phrasing slur"
+#~ msgstr "Phrasierungsbogen kann nicht beendet werden"
+
+#~ msgid "already have phrasing slur"
+#~ msgstr "habe bereits einen Phrasierungsbogen"
+
+#~ msgid "unterminated slur"
+#~ msgstr "unbegrenzter Legatobogen"
+
+#~ msgid "Grob name should be alphanumeric"
+#~ msgstr "Grob-Name sollte alphanumerisch sein"
+
+#~ msgid "Brace found at end of lyric.  Did you forget a space?"
+#~ msgstr "Klammer am Ende von Liedtext gefunden. Haben Sie ein Leerzeichen vergessen?"
+
+#~ msgid "Brace found at end of markup.  Did you forget a space?"
+#~ msgstr "Klammer am Ende des Auszugs gefunden. Haben Sie ein Leerzeichen vergessen?"
+
+#~ msgid "old relative compatibility not used"
+#~ msgstr "alte relative Kompatibilität nicht verwendet"
+
+#~ msgid "undefined: ~S"
+#~ msgstr "nicht definiert: ~S"
+
 #~ msgid "add midi-block to .ly file"
 #~ msgstr "midi-Umgebung zu .ly-Datei hinzufügen"
 
@@ -4737,9 +4907,6 @@ msgstr ""
 #~ msgid "can't find character number: %d"
 #~ msgstr "Zeichennummer kann nicht gefunden werden: %d"
 
-#~ msgid "can't find character called: `%s'"
-#~ msgstr "Zeichen kann nicht gefunden werden: `%s'"
-
 #~ msgid "Beam has less than two stems. Removing beam."
 #~ msgstr "Balken hat weniger als zwei Notenhälse. Notenhals wird entfernt."
 
index f46e5e34a92a774f47b9a0b5d81a84b3eb483926..62b018a9955413a3cb1506cbc6eb2f36c53de0de 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -1308,12 +1308,12 @@ msgstr ""
 
 #: musicxml2ly.py:2669
 msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2011 by\n"
 "    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
 "    Jan Nieuwenhuizen <janneke@gnu.org> and\n"
 "    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 msgstr ""
-"Copyright (c) 2005--2012 από\n"
+"Copyright (c) 2005--2011 από\n"
 "    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
 "    Jan Nieuwenhuizen <janneke@gnu.org> και\n"
 "    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
index 8315e39da4b8bb40996c78d482a65bec407768b1..f52ed60720fa2f6f05d216c4efc8113ad72c4b3c 100644 (file)
--- a/po/eo.po
+++ b/po/eo.po
@@ -1,20 +1,22 @@
 # Esperanto translation of LilyPond.
-# Copyright (C) 2012 Free Software Foundation, Inc.
+# Copyright (C) 2012, 2013 Free Software Foundation, Inc.
 # This file is distributed under the same license as the lilypond package.
-# Felipe Castro <fefcas@gmail.com>, 2012
+# Felipe Castro <fefcas@gmail.com>, 2012, 2013
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.15.95\n"
+"Project-Id-Version: lilypond 2.17.96\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2012-08-11 14:29+0200\n"
-"PO-Revision-Date: 2012-08-14 08:38-0300\n"
+"POT-Creation-Date: 2013-11-24 12:14+0000\n"
+"PO-Revision-Date: 2013-11-26 13:22-0300\n"
 "Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
 "Language: eo\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Poedit 1.5.4\n"
 
 #: book_base.py:26
 #, python-format
@@ -25,83 +27,87 @@ msgstr "ne trovita dosiero: %s"
 msgid "Output function not implemented"
 msgstr "Eliga funkcio ne estas realigita"
 
-#: book_latex.py:170
+#: book_latex.py:174
 msgid "cannot find \\begin{document} in LaTeX document"
 msgstr "ne eblas trovi \\begin{document} en dokumento LaTeX"
 
-#: book_latex.py:188
+#: book_latex.py:190
 #, python-format
 msgid "Running `%s' on file `%s' to detect default page settings.\n"
-msgstr "Aplikado de '%s' al la dosiero '%s' por detekti originalajn paĝ-agordojn.\n"
+msgstr "Aplikado de '%s' al la dosiero '%s' por detekti apriorajn paĝ-agordojn.\n"
 
-#: book_latex.py:209 book_texinfo.py:228
+#: book_latex.py:212 book_texinfo.py:228
 msgid "Unable to auto-detect default settings:\n"
-msgstr "Ne eblas mem detekti originalajn agordojn:\n"
+msgstr "Ne eblas aŭtomate detekti apriorajn agordojn:\n"
 
-#: book_latex.py:221 book_texinfo.py:240
+#: book_latex.py:224 book_texinfo.py:240
 #, python-format
 msgid ""
 "Unable to auto-detect default settings:\n"
 "%s"
 msgstr ""
-"Ne eblas mem detekti originalajn agordojn:\n"
+"Ne eblas aŭtomate detekti apriorajn agordojn:\n"
 "%s"
 
-#: book_snippets.py:409
+#: book_latex.py:247
+msgid "cannot detect textwidth from LaTeX"
+msgstr "ne eblas detekti 'textwidth' el LaTex"
+
+#: book_snippets.py:406
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
-msgstr "evitinda ly-elektilo estis uzata: %s=%s"
+msgstr "evitinda ly-modifilo estis uzata: %s=%s"
 
-#: book_snippets.py:411
+#: book_snippets.py:408
 #, python-format
 msgid "compatibility mode translation: %s=%s"
-msgstr "tradukado je kongrua reĝimo: %s=%s"
+msgstr "kongru-reĝima traduko: %s=%s"
 
-#: book_snippets.py:414
+#: book_snippets.py:411
 #, python-format
 msgid "deprecated ly-option used: %s"
-msgstr "evitinda ly-elektilo estis uzata: %s"
+msgstr "evitinda ly-modifilo estis uzata: %s"
 
-#: book_snippets.py:416
+#: book_snippets.py:413
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr "tradukado je kongrua reĝimo: %s"
 
-#: book_snippets.py:533
+#: book_snippets.py:530
 #, python-format
 msgid "ignoring unknown ly option: %s"
-msgstr "preterpaso de nekonata ly-elektilo: %s"
+msgstr "preterpaso de nekonata ly-modifilo: %s"
 
-#: book_snippets.py:624
+#: book_snippets.py:621
 #, python-format
 msgid "Missing files: %s"
 msgstr "Mankantaj dosieroj: %s"
 
-#: book_snippets.py:654
+#: book_snippets.py:651
 #, python-format
 msgid "Could not overwrite file %s"
-msgstr "Ne eblis reskribi sur dosiero: %s"
+msgstr "Ne eblis anstataŭigi la dosieron %s"
 
-#: book_snippets.py:741
+#: book_snippets.py:738
 #, python-format
 msgid "Running through filter `%s'"
 msgstr "Rulado tra filtro '%s'"
 
-#: book_snippets.py:761
+#: book_snippets.py:759
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "'%s' fiaskis (%d)"
 
-#: book_snippets.py:762
+#: book_snippets.py:760
 msgid "The error log is as follows:"
 msgstr "La erar-protokolo estas jene:"
 
-#: book_snippets.py:882
+#: book_snippets.py:880
 #, python-format
 msgid "Converting MusicXML file `%s'...\n"
 msgstr "Konvertado de dosiero MusicXML '%s'...\n"
 
-#: book_snippets.py:909
+#: book_snippets.py:907
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of original file,\n"
@@ -110,7 +116,7 @@ msgstr ""
 "%s: duobligita dosiernomo tamen kun malsama enhavo ol la originala\n"
 "dosiero, do ni printas 'diff' kontraŭ la ekzistanta dosiero."
 
-#: book_snippets.py:922
+#: book_snippets.py:920
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of converted lilypond file,\n"
@@ -125,131 +131,131 @@ msgstr ""
 #: book_texinfo.py:206
 #, python-format
 msgid "Running texi2pdf on file %s to detect default page settings.\n"
-msgstr "Aplikado de texi2pdf al la dosiero %s por detekti originalajn paĝ-agordojn.\n"
+msgstr "Aplikado de texi2pdf al la dosiero %s por detekti apriorajn paĝ-agordojn.\n"
 
-#: convertrules.py:12
+#: convertrules.py:13
 #, python-format
 msgid "Not smart enough to convert %s."
 msgstr "Ne sufiĉe lerta por konverti %s."
 
-#: convertrules.py:13
+#: convertrules.py:14
 msgid "Please refer to the manual for details, and update manually."
-msgstr "Bonvolu iri al la gvidlibro por pli da detaloj, kaj ĝisdatigu malaŭtomate."
+msgstr "Bonvole konsultu la gvidlibron por pli da detaloj, kaj ĝisdatigu malaŭtomate."
 
-#: convertrules.py:14
+#: convertrules.py:15
 #, python-format
 msgid "%s has been replaced by %s"
-msgstr "%s estis anstataŭigata per %s"
+msgstr "%s estas anstataŭigita per %s"
 
-#: convertrules.py:24 lilylib.py:131 warn.cc:223
+#: convertrules.py:25 lilylib.py:136 warn.cc:223
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "averto: %s"
 
-#: convertrules.py:49 convertrules.py:94
+#: convertrules.py:50 convertrules.py:95
 msgid "\\header { key = concat + with + operator }"
 msgstr "\\header { klavo = kunmeti + per + ĉi + operatoro }"
 
-#: convertrules.py:56
+#: convertrules.py:57
 #, python-format
 msgid "deprecated %s"
 msgstr "evitinda %s"
 
-#: convertrules.py:65
+#: convertrules.py:66
 msgid "deprecated \\textstyle, new \\key syntax"
 msgstr "evitinda \\textstyle, nova sintakso \\key"
 
-#: convertrules.py:81 convertrules.py:1855 convertrules.py:2031
-#: convertrules.py:2174 convertrules.py:2505 convertrules.py:2800
-#: convertrules.py:3150
+#: convertrules.py:82 convertrules.py:1856 convertrules.py:2032
+#: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801
+#: convertrules.py:3151 convertrules.py:3385
 msgid "bump version for release"
 msgstr "aktualigi la version por eldono"
 
-#: convertrules.py:97
+#: convertrules.py:98
 msgid "new \\header format"
 msgstr "nova formo \\header"
 
-#: convertrules.py:124
+#: convertrules.py:125
 msgid "\\translator syntax"
 msgstr "sintakso \\translator"
 
-#: convertrules.py:175
+#: convertrules.py:176
 msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
 msgstr "\\repeat NUM Muzika Alternativo -> \\repeat FOLDSTR Muzika Alternativo"
 
-#: convertrules.py:205 convertrules.py:678 convertrules.py:1350
-#: convertrules.py:2317
+#: convertrules.py:206 convertrules.py:679 convertrules.py:1351
+#: convertrules.py:2318
 #, python-format
 msgid "deprecate %s"
 msgstr "evitigi %s"
 
-#: convertrules.py:279
+#: convertrules.py:280
 #, python-format
 msgid "deprecate %s "
 msgstr "evitigi %s "
 
-#: convertrules.py:305
+#: convertrules.py:306
 msgid "new \\notenames format"
 msgstr "nova formato \\notenames"
 
-#: convertrules.py:321
+#: convertrules.py:322
 msgid "new tremolo format"
 msgstr "nova tremsona formo"
 
-#: convertrules.py:325
+#: convertrules.py:326
 msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver"
 msgstr "Staff_margin_engraver estas evitinda, uzu Instrument_name_engraver"
 
-#: convertrules.py:376
+#: convertrules.py:377
 msgid "change property definition case (eg. onevoice -> oneVoice)"
 msgstr "ŝanĝi usklecon de eco-difino (ekz. onevoice -> oneVoice)"
 
-#: convertrules.py:437
+#: convertrules.py:438
 msgid "new \\textscript markup text"
 msgstr "nova markad-teksto \\textscript"
 
-#: convertrules.py:509
+#: convertrules.py:510
 #, python-format
 msgid "identifier names: %s"
 msgstr "identigilaj nomoj: %s"
 
-#: convertrules.py:548
+#: convertrules.py:549
 msgid "point-and-click argument changed to procedure."
-msgstr "argumento 'point-and-click' ŝanĝis al 'procedure'."
+msgstr "argumento 'point-and-click' ŝanĝis al proceduro."
 
-#: convertrules.py:590
+#: convertrules.py:591
 msgid "semicolons removed"
-msgstr "komo-punktoj estis forigataj"
+msgstr "komo-punktoj estas forigitaj"
 
 #. 40 ?
-#: convertrules.py:633
+#: convertrules.py:634
 #, python-format
 msgid "%s property names"
 msgstr "%s eco-nomoj"
 
-#: convertrules.py:703
+#: convertrules.py:704
 msgid "automaticMelismata turned on by default"
 msgstr "automaticMelismata estas aktivigita apriore"
 
-#: convertrules.py:708
+#: convertrules.py:709
 msgid "automaticMelismata is turned on by default since 1.5.67."
 msgstr "automaticMelismata estas aktivigita apriore ekde 1.5.67."
 
-#: convertrules.py:942 convertrules.py:1635 convertrules.py:1889
-#: convertrules.py:2134
+#: convertrules.py:943 convertrules.py:1636 convertrules.py:1890
+#: convertrules.py:2135
 #, python-format
 msgid "remove %s"
 msgstr "forigi %s"
 
-#: convertrules.py:977 convertrules.py:980
+#: convertrules.py:978 convertrules.py:981
 msgid "cluster syntax"
 msgstr "faska sintakso"
 
-#: convertrules.py:987
+#: convertrules.py:988
 msgid "new Pedal style syntax"
 msgstr "nova sintakso de la stilo Pedal"
 
-#: convertrules.py:1246
+#: convertrules.py:1247
 msgid ""
 "New relative mode,\n"
 "Postfix articulations, new text markup syntax, new chord syntax."
@@ -257,28 +263,28 @@ msgstr ""
 "Nova relativa reĝimo,\n"
 "artikulacioj Postfix, nova tekst-markada sintakso, nova akorda sintakso."
 
-#: convertrules.py:1259
+#: convertrules.py:1260
 msgid "Remove - before articulation"
 msgstr "Forigi - antaŭ la artikulacio"
 
-#: convertrules.py:1294
+#: convertrules.py:1295
 #, python-format
 msgid "%s misspelling"
 msgstr "%s misliterumado"
 
-#: convertrules.py:1313
+#: convertrules.py:1314
 msgid "Swap < > and << >>"
 msgstr "Permuti < > kaj << >>"
 
-#: convertrules.py:1316
+#: convertrules.py:1317
 msgid "attempting automatic \\figures conversion.  Check results!"
-msgstr "provado aŭtomate konverti \\figures.  Kontrolu la rezultojn!"
+msgstr "ni provas aŭtomatan konverton de \\figures.  Kontrolu la rezultojn!"
 
-#: convertrules.py:1362
+#: convertrules.py:1363
 msgid "Use Scheme code to construct arbitrary note events."
 msgstr "Uzu kodumaĵon Scheme por konstrui ajnajn noto-eventojn."
 
-#: convertrules.py:1369
+#: convertrules.py:1370
 msgid ""
 "use symbolic constants for alterations,\n"
 "remove \\outputproperty, move ly:verbose into ly:get-option"
@@ -286,7 +292,7 @@ msgstr ""
 "uzi simbolajn konstantojn por aliigojn,\n"
 "forigi \\outputproperty, movi ly:verbose al ly:get-option"
 
-#: convertrules.py:1394
+#: convertrules.py:1395
 #, python-format
 msgid ""
 "\\outputproperty found,\n"
@@ -303,7 +309,7 @@ msgstr ""
 "\n"
 "kiel anstataŭigan tekston."
 
-#: convertrules.py:1406
+#: convertrules.py:1407
 msgid ""
 "The alteration field of Scheme pitches was multiplied by 2\n"
 "to support quarter tone accidentals.  You must update the following constructs manually:\n"
@@ -317,15 +323,15 @@ msgstr ""
 "* vokoj al ly:make-pitch kaj ly:pitch-alteration\n"
 "* difinoj de keySignature faritaj kun \\property\n"
 
-#: convertrules.py:1449
+#: convertrules.py:1450
 msgid "removal of automaticMelismata; use melismaBusyProperties instead."
 msgstr "forigo de automaticMelismata; uzu melismaBusyProperties anstataŭe."
 
-#: convertrules.py:1556
+#: convertrules.py:1557
 msgid "\\partcombine syntax change to \\newpartcombine"
 msgstr "sintakso de \\partcombine ŝanĝis al \\newpartcombine"
 
-#: convertrules.py:1581
+#: convertrules.py:1582
 msgid ""
 "Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
 "Harmonic notes. Thread context removed. Lyrics context removed."
@@ -333,11 +339,11 @@ msgstr ""
 "Ŝanĝoj en tambura notado, forigo de \\chordmodifiers, \\notenames.\n"
 "Harmoniaj notoj. Kunteksto Thread forigita. Kunteksto Lyrics forigita."
 
-#: convertrules.py:1585
+#: convertrules.py:1586
 msgid "Drums found. Enclose drum notes in \\drummode"
 msgstr "Tamburoj estis trovataj. Enmetu tamburajn notojn en \\drummode"
 
-#: convertrules.py:1596 convertrules.py:1603 convertrules.py:1614
+#: convertrules.py:1597 convertrules.py:1604 convertrules.py:1615
 #, python-format
 msgid ""
 "\n"
@@ -346,33 +352,33 @@ msgstr ""
 "\n"
 "%s estis trovata. Kontrolu la dosieron per-mane!\n"
 
-#: convertrules.py:1596
+#: convertrules.py:1597
 msgid "Drum notation"
 msgstr "Tambura notado"
 
-#: convertrules.py:1655
+#: convertrules.py:1656
 msgid "new syntax for property settings:"
 msgstr "nova sintakso por ecaj agordoj:"
 
-#: convertrules.py:1681
+#: convertrules.py:1682
 msgid "Property setting syntax in \\translator{ }"
 msgstr "Sintakso de eca agordo en \\translator{ }"
 
-#: convertrules.py:1720
+#: convertrules.py:1721
 msgid "Scheme grob function renaming"
 msgstr "Renomigo de funkcioj grob de Scheme"
 
-#: convertrules.py:1731 convertrules.py:2138 convertrules.py:2142
-#: convertrules.py:2708
+#: convertrules.py:1732 convertrules.py:2139 convertrules.py:2143
+#: convertrules.py:2709
 #, python-format
 msgid "Use %s\n"
 msgstr "Uzi %s\n"
 
-#: convertrules.py:1747
+#: convertrules.py:1748
 msgid "More Scheme function renaming"
 msgstr "Pli da renomigo de funkcioj Scheme"
 
-#: convertrules.py:1871
+#: convertrules.py:1872
 msgid ""
 "Page layout has been changed, using paper size and margins.\n"
 "textheight is no longer used.\n"
@@ -380,7 +386,7 @@ msgstr ""
 "Paĝ-aranĝo estis ŝanĝata, nun ni uzas paper-grandon kaj marĝenojn.\n"
 "'textheight' ne plu estas uzata.\n"
 
-#: convertrules.py:1957
+#: convertrules.py:1958
 msgid ""
 "\\foo -> \\foomode (for chords, notes, etc.)\n"
 "fold \\new FooContext \\foomode into \\foo."
@@ -388,7 +394,7 @@ msgstr ""
 "\\foo -> \\foomode (por akordoj, notoj, ktp.)\n"
 "faldi \\new FooContext \\foomode al \\foo."
 
-#: convertrules.py:1995
+#: convertrules.py:1996
 msgid ""
 "staff size should be changed at top-level\n"
 "with\n"
@@ -402,40 +408,40 @@ msgstr ""
 "  #(set-global-staff-size <LINIARO-ALTO-EN-PUNKTOJ>)\n"
 "\n"
 
-#: convertrules.py:2015
+#: convertrules.py:2016
 msgid "regularize other identifiers"
 msgstr "normigi aliajn identigilojn"
 
-#: convertrules.py:2083
+#: convertrules.py:2084
 msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
 msgstr "\\encoding: lerta rekodigo latin1..utf-8. Forigi ly:point-and-click"
 
-#: convertrules.py:2094
+#: convertrules.py:2095
 msgid "LilyPond source must be UTF-8"
 msgstr "Kodumado de LilyPond devas esti UTF-8"
 
-#: convertrules.py:2097
+#: convertrules.py:2098
 msgid "Try the texstrings backend"
 msgstr "Provu la internan interfacon 'texstrings'"
 
-#: convertrules.py:2100
+#: convertrules.py:2101
 #, python-format
 msgid "Do something like: %s"
-msgstr "Faru ion simila al: %s"
+msgstr "Faru ion similan al: %s"
 
-#: convertrules.py:2103
+#: convertrules.py:2104
 msgid "Or save as UTF-8 in your editor"
 msgstr "Aŭ konservu kiel UTF-8 en via redaktilo"
 
-#: convertrules.py:2153
+#: convertrules.py:2154
 msgid "warn about auto beam settings"
 msgstr "averti pri difinoj de aŭtomata vostligo"
 
-#: convertrules.py:2157
+#: convertrules.py:2158
 msgid "auto beam settings"
 msgstr "aŭtomata vostligaj difinoj"
 
-#: convertrules.py:2158
+#: convertrules.py:2159
 msgid ""
 "\n"
 "Auto beam settings must now specify each interesting moment in a measure\n"
@@ -445,39 +451,39 @@ msgstr ""
 "Aŭtomata vostligaj difinoj devas nun indiki klare ĉiun interesan momenton\n"
 "ene de mezuro; 1/4 ne plu estas obligata por ankaŭ kovri momentojn 1/2 kaj 3/4.\n"
 
-#: convertrules.py:2271
+#: convertrules.py:2272
 msgid "verticalAlignmentChildCallback has been deprecated"
 msgstr "'verticalAlignmentChildCallback' fariĝis evitinda"
 
-#: convertrules.py:2276
+#: convertrules.py:2277
 msgid "Remove callbacks property, deprecate XY-extent-callback."
 msgstr "Forigi atributojn de vokoj, evitigi XY-extent-callback."
 
-#: convertrules.py:2297
+#: convertrules.py:2298
 msgid "Use grob closures iso. XY-offset-callbacks."
 msgstr "Uzi grob-klozurojn iso. XY-offset-callbacks."
 
-#: convertrules.py:2359
+#: convertrules.py:2360
 msgid "foobar -> foo-bar for \\paper, \\layout"
 msgstr "foobar -> foo-bar por \\paper, \\layout"
 
-#: convertrules.py:2469
+#: convertrules.py:2470
 msgid "deprecate \\tempo in \\midi"
 msgstr "evitigi \\tempo en \\midi"
 
-#: convertrules.py:2522
+#: convertrules.py:2523
 msgid "deprecate cautionary-style. Use AccidentalCautionary properties"
 msgstr "evitigi stilon avertecan. Uzi ecojn 'AccidentalCautionary'"
 
-#: convertrules.py:2535
+#: convertrules.py:2536
 msgid "Rename accidental glyphs, use glyph-name-alist."
 msgstr "Renomigi kromsignajn bildetojn, uzi glyph-name-alist."
 
-#: convertrules.py:2590
+#: convertrules.py:2591
 msgid "edge-text settings for TextSpanner"
 msgstr "agordoj de 'edge-text' por TextSpanner"
 
-#: convertrules.py:2591
+#: convertrules.py:2592
 #, python-format
 msgid ""
 "Use\n"
@@ -488,35 +494,35 @@ msgstr ""
 "\n"
 "%s"
 
-#: convertrules.py:2624
+#: convertrules.py:2625
 msgid "Use the `alignment-offsets' sub-property of\n"
 msgstr "Uzi la sub-atributon 'alignment-offsets' de\n"
 
-#: convertrules.py:2625
+#: convertrules.py:2626
 msgid "NonMusicalPaperColumn #'line-break-system-details\n"
 msgstr "NonMusicalPaperColumn #'line-break-system-details\n"
 
-#: convertrules.py:2626
+#: convertrules.py:2627
 msgid "to set fixed distances between staves.\n"
 msgstr "por difini fiksajn distancojn inter liniarojn.\n"
 
-#: convertrules.py:2638
+#: convertrules.py:2639
 msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
 msgstr "Uzi #'style anstataŭ #'dash-fraction por elekti kontinuajn/strekajn liniojn."
 
-#: convertrules.py:2644
+#: convertrules.py:2645
 msgid "all settings related to dashed lines"
 msgstr "ĉiuj agordoj pri strekaj linioj"
 
-#: convertrules.py:2645
+#: convertrules.py:2646
 msgid "Use \\override ... #'style = #'line for solid lines and\n"
 msgstr "Uzi \\override ... #'style = #'line por kontinuaj linioj kaj\n"
 
-#: convertrules.py:2646
+#: convertrules.py:2647
 msgid "\t\\override ... #'style = #'dashed-line for dashed lines."
 msgstr "\t\\override ...#'style = #'dashed-line por strekaj linioj."
 
-#: convertrules.py:2682
+#: convertrules.py:2683
 msgid ""
 "metronomeMarkFormatter uses text markup as second argument,\n"
 "fret diagram properties moved to fret-diagram-details."
@@ -524,11 +530,11 @@ msgstr ""
 "metronomeMarkFormatter uzas tekstan markadon kiel duan argumenton,\n"
 "fret-diagramaj ecoj moviĝis al fret-diagram-details."
 
-#: convertrules.py:2688
+#: convertrules.py:2689
 msgid "metronomeMarkFormatter got an additional text argument.\n"
 msgstr "metronomeMarkFormatter akiris aldonan tekst-argumenton.\n"
 
-#: convertrules.py:2689
+#: convertrules.py:2690
 #, python-format
 msgid ""
 "The function assigned to Score.metronomeMarkFunction now uses the signature\n"
@@ -537,48 +543,48 @@ msgstr ""
 "La funkcio asignita al Score.metronomeMarkFunction nun uzas la subskribon\n"
 "%s"
 
-#: convertrules.py:2707
+#: convertrules.py:2708
 #, python-format
 msgid "%s in fret-diagram properties"
 msgstr "%s en fret-diagramaj ecoj"
 
-#: convertrules.py:2751
+#: convertrules.py:2752
 msgid "\\put-adjacent argument order"
 msgstr "argument-ordo de \\put-adjacent"
 
-#: convertrules.py:2752
+#: convertrules.py:2753
 msgid "Axis and direction now come before markups:\n"
 msgstr "Aksoj kaj direkto nun venas antaŭ la markadoj:\n"
 
-#: convertrules.py:2753
+#: convertrules.py:2754
 msgid "\\put-adjacent axis dir markup markup."
 msgstr "\\put-adjacent akso dir markado markado."
 
-#: convertrules.py:2784
+#: convertrules.py:2785
 msgid "re-definition of InnerStaffGroup"
 msgstr "redifino de InnerStaffGroup"
 
-#: convertrules.py:2789
+#: convertrules.py:2790
 msgid "re-definition of InnerChoirStaff"
 msgstr "redifino de InnerChoirStaff"
 
-#: convertrules.py:2799
+#: convertrules.py:2800
 msgid "Syntax changes for \\addChordShape and \\chord-shape"
 msgstr "Sintaksaj ŝanĝoj por \\addChordShape kaj \\chord-shape"
 
-#: convertrules.py:2804
+#: convertrules.py:2805
 msgid "stringTuning must be added to addChordShape call.\n"
 msgstr "stringTuning devas esti aldonata al la voko addChordShape.\n"
 
-#: convertrules.py:2809
+#: convertrules.py:2810
 msgid "stringTuning must be added to chord-shape call.\n"
 msgstr "stringTuning devas esti aldonata al la voko de chord-shape.\n"
 
-#: convertrules.py:2815
+#: convertrules.py:2816
 msgid "Remove oldaddlyrics"
 msgstr "Forigi oldaddlyrics"
 
-#: convertrules.py:2819
+#: convertrules.py:2820
 msgid ""
 "oldaddlyrics is no longer supported. \n"
 "         Use addlyrics or lyrsicsto instead.\n"
@@ -586,7 +592,7 @@ msgstr ""
 "oldaddlyrics ne plu estas subtenata. \n"
 "        Uzu addlyrics aŭ lyricsto anstataŭe.\n"
 
-#: convertrules.py:2825
+#: convertrules.py:2826
 msgid ""
 "keySignature property not reversed any more\n"
 "MIDI 47: orchestral strings -> orchestral harp"
@@ -594,11 +600,11 @@ msgstr ""
 "La eco keySignature ne plu estas inversigita\n"
 "MIDI 47: orchestral strings -> orchestral harp"
 
-#: convertrules.py:2830
+#: convertrules.py:2831
 msgid "The alist for Staff.keySignature is no longer in reversed order.\n"
 msgstr "La 'alist' por Staff.keySignature ne plu estas en inversa ordo.\n"
 
-#: convertrules.py:2836
+#: convertrules.py:2837
 msgid ""
 "\\bar \".\" now produces a thick barline\n"
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
@@ -608,15 +614,15 @@ msgstr ""
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
 "Strekaj parametroj por ligarkoj kaj ligaturoj estas nun en dash-definition"
 
-#: convertrules.py:2842
+#: convertrules.py:2843
 msgid "\\bar \".\" now produces a thick barline.\n"
 msgstr "\\bar \".\" nun produktas dikan taktostrekon.\n"
 
-#: convertrules.py:2848
+#: convertrules.py:2849
 msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
 msgstr "Strekaj parametroj por ligarkoj kaj ligaturoj estas nun en 'dash-details.\n"
 
-#: convertrules.py:2853
+#: convertrules.py:2854
 msgid ""
 "Autobeaming rules have changed.  override-auto-beam-setting and\n"
 "revert-auto-beam-setting have been eliminated.\n"
@@ -642,15 +648,15 @@ msgstr ""
 "Klaraj difinoj de ŝveligaj kuntekstoj el la ŝablono\n"
 "'Piano centered dynamics' estas nun anstataŭita de kunteksto 'Dynamics'."
 
-#: convertrules.py:2867
+#: convertrules.py:2868
 msgid "    Autobeam settings are now overriden with \\overrideBeamSettings.\n"
 msgstr "    Aŭtomataj vostligaj agordoj nun estas preterpasataj per \\overrideBeamSettings.\n"
 
-#: convertrules.py:2872
+#: convertrules.py:2873
 msgid "    Autobeam settings are now reverted with \\revertBeamSettings.\n"
 msgstr "    Aŭtomataj vostligaj agordoj nun estas restarigataj per \\revertBeamSettings.\n"
 
-#: convertrules.py:2878
+#: convertrules.py:2879
 msgid ""
 "    beatGrouping with a specified context must now be accomplished with\n"
 "   \\overrideBeamSettings.\n"
@@ -658,11 +664,11 @@ msgstr ""
 "    beatGrouping kun specifita kunteksto devas nun esti plenumata per\n"
 "   \\overrideBeamSettings.\n"
 
-#: convertrules.py:2884
+#: convertrules.py:2885
 msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n"
 msgstr "alignment-offsets ŝanĝis al alignment-distances: vi devas nun specifi la distancojn inter liniarojn prefereble ol la deŝovo de la liniaroj.\n"
 
-#: convertrules.py:2895
+#: convertrules.py:2896
 msgid ""
 "Remove obsolete engravers/translators: Note_swallow_translator,\n"
 "Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
@@ -674,23 +680,23 @@ msgstr ""
 "Swallow_performer kaj String_number_engraver.\n"
 "Novaj vertikal-spacigaj variabloj."
 
-#: convertrules.py:2926
+#: convertrules.py:2927
 msgid "Vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n"
 msgstr "Vertikala spacigo ne plu dependas de la Y-etendo de 'VerticalAxisGroup'.\n"
 
-#: convertrules.py:2932
+#: convertrules.py:2933
 msgid "Unify fetaNumber and fetaDynamic encodings"
 msgstr "Unuigi enkodigojn 'fetaNumber' kaj 'fetaDynamic'"
 
-#: convertrules.py:2937
+#: convertrules.py:2938
 msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 
-#: convertrules.py:2948
+#: convertrules.py:2949
 msgid "\\cresc etc. are now postfix operators"
 msgstr "\\cresc ktp. nun estas postmetaj operatoroj"
 
-#: convertrules.py:2960
+#: convertrules.py:2961
 msgid ""
 "Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
@@ -698,23 +704,23 @@ msgstr ""
 "Forigi 'beamSettings', 'beatLength', \\setBeatGrouping, \\overrideBeamSettings kaj \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
 
-#: convertrules.py:2978
+#: convertrules.py:2979
 msgid "Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"
 msgstr "Uzi \\set beamExceptions aŭ \\overrideTimeSignatureSettings.\n"
 
-#: convertrules.py:2982
+#: convertrules.py:2983
 msgid "Use \\set beamExceptions or \\revertTimeSignatureSettings.\n"
 msgstr "Uzi \\set beamExceptions aŭ \\revertTimeSignatureSettings.\n"
 
-#: convertrules.py:2986
+#: convertrules.py:2987
 msgid "Use baseMoment, beatStructure, and beamExceptions.\n"
 msgstr "Uzi 'baseMoment', 'beatStructure', kaj 'beamExceptions'.\n"
 
-#: convertrules.py:2990 convertrules.py:2994
+#: convertrules.py:2991 convertrules.py:2995
 msgid "Use baseMoment and beatStructure.\n"
 msgstr "Uzi 'baseMoment' kaj 'beatStructure'.\n"
 
-#: convertrules.py:2999
+#: convertrules.py:3000
 msgid ""
 "Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n"
 "Deprecate negative dash-period for hidden lines: use #'style = #'none instead."
@@ -722,11 +728,11 @@ msgstr ""
 "Lignoblovaj diagramoj: movigi grandon, dikecon, kaj grafikaĵon de argument-listo al atributoj.\n"
 "Evitigi negativan streko-punkton por kaŝitaj linioj: uzi #'style = #'none anstataŭe."
 
-#: convertrules.py:3004
+#: convertrules.py:3005
 msgid "Move size, thickness, and graphic to properties.  Argument should be just the key list.\n"
 msgstr "Movigi grandon, dikecon, kaj grafikaĵon al atributoj.  Argumento devos esti simple la ŝlosilo-listo.\n"
 
-#: convertrules.py:3012
+#: convertrules.py:3013
 msgid ""
 "Rename vertical spacing variables.\n"
 "Add fretboard-table argument to savePredefinedFretboard."
@@ -734,23 +740,23 @@ msgstr ""
 "Renomigi vertikal-spacigajn variablojn.\n"
 "Aldoni argumenton 'fretboard-table' al 'savePredefinedFretboard'."
 
-#: convertrules.py:3030
+#: convertrules.py:3031
 msgid "Rename vertical spacing grob properties."
 msgstr "Renomigi vertikal-spacigajn grob-atributojn."
 
-#: convertrules.py:3046
+#: convertrules.py:3047
 msgid "Remove \\paper variables head-separation and foot-separation."
 msgstr "Forigi variablojn de \\paper: 'head-separation' kaj 'foot-separation'."
 
-#: convertrules.py:3050
+#: convertrules.py:3051
 msgid "Adjust settings for top-system-spacing instead.\n"
 msgstr "Anstataŭe, alĝustigi difinojn por 'top-system-spacing'.\n"
 
-#: convertrules.py:3054
+#: convertrules.py:3055
 msgid "Adjust settings for last-bottom-spacing instead.\n"
 msgstr "Anstataŭe, alĝustigi difinojn por 'last-bottom-spacing'.\n"
 
-#: convertrules.py:3060
+#: convertrules.py:3061
 msgid ""
 "Rename space to basic-distance in various spacing alists.\n"
 "Remove HarmonicParenthesesItem grob."
@@ -758,19 +764,19 @@ msgstr ""
 "Renomigi 'space' al 'basic-distance' en pluraj 'alist'-oj.\n"
 "Forigi la grob 'HarmonicParenthesesItem'."
 
-#: convertrules.py:3067
+#: convertrules.py:3068
 msgid "HarmonicParenthesesItem has been eliminated.\n"
 msgstr "'HarmonicParenthesesItem' estas forigita.\n"
 
-#: convertrules.py:3068
+#: convertrules.py:3069
 msgid "Harmonic parentheses are part of the TabNoteHead grob.\n"
 msgstr "Harmoniaj rondkrampoj estas parto de la grob TabNoteHead.\n"
 
-#: convertrules.py:3073
+#: convertrules.py:3074
 msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n"
 msgstr "Forigi kuntekston de 'overrideTimeSignatureSettings' kaj 'revertTimeSignatureSettings'.\n"
 
-#: convertrules.py:3080
+#: convertrules.py:3081
 msgid ""
 "Change stringTunings from a list of semitones to a list of pitches.\n"
 "Change tenor and baritone ukulele names in string tunings.\n"
@@ -780,54 +786,62 @@ msgstr ""
 "Ŝanĝi tenoran kaj baritonan ukulel-nomojn en kordaj agordoj.\n"
 "Generi mesaĝojn por per-mana konverto de vertikala spacigo se necese."
 
-#: convertrules.py:3123
+#: convertrules.py:3124
 msgid "Vertical spacing changes might affect user-defined contexts."
 msgstr "Vertikal-spacigaj ŝanĝoj povas influi uzanto-difinitajn kuntekstojn."
 
-#: convertrules.py:3129
+#: convertrules.py:3130
 msgid "Replace bar-size with bar-extent."
 msgstr "Anstataŭigi 'bar-size' per 'bar-extent'."
 
-#: convertrules.py:3141
+#: convertrules.py:3142
 msgid "Woodwind diagrams: Changes to the clarinet diagram."
 msgstr "Lignoblovaj diagramoj: ŝanĝoj por la klarneta diagramo."
 
-#: convertrules.py:3145
+#: convertrules.py:3146
 msgid "Clarinet fingering changed to reflect actual anatomy of instrument.\n"
 msgstr "Klarneta fingrado ŝanĝis por speguli veran anatomion de la instrumento.\n"
 
-#: convertrules.py:3155
+#: convertrules.py:3156
 msgid "Handling of non-automatic footnotes."
 msgstr "Traktado de ne-aŭtomataj piednotoj."
 
-#: convertrules.py:3159
+#: convertrules.py:3160
 msgid "If you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.\n"
 msgstr "Se vi uzas ne-aŭtomatajn piednotojn, certigu ke vi difinis 'footnote-auto-numbering = ##f' en la paper-bloko.\n"
 
-#: convertrules.py:3164
+#: convertrules.py:3165
 msgid "Change in internal property for MultiMeasureRest"
 msgstr "Ŝanĝo en interna atributo por 'MultiMeasureRest'"
 
-#: convertrules.py:3168
+#: convertrules.py:3169
 msgid "This internal property has been replaced by round-up-to-longer-rest, round-up-exceptions and usable-duration-logs.\n"
 msgstr "Tiu ĉi interna atributo estas anstataŭigita per 'round-up-to-longer-rest', 'round-up-exceptions' kaj 'usable-duration-logs'.\n"
 
-#: convertrules.py:3173
+#: convertrules.py:3174
 msgid "Creation of a Flag grob and moving of certain Stem properties to this grob"
 msgstr "Kreado de grob 'Flag' kaj movigado de kelkaj atributoj 'Stem' al tiu ĉi grob"
 
-#: convertrules.py:3209
+#: convertrules.py:3210
 msgid "consistent-broken-slope is now handled through the positions callback.\n"
 msgstr "Nun 'consistent-broken-slope' estas traktata per la voko 'positions'.\n"
 
-#: convertrules.py:3210
+#: convertrules.py:3211
 msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n"
 msgstr "input/regression/beam-broken-classic.ly montras kiel rompitaj vostligoj estas traktataj nun.\n"
 
-#: convertrules.py:3368
+#: convertrules.py:3369
 msgid "beamExceptions controls whole-measure beaming."
 msgstr "beamExceptions regas tut-mezuran vostligadon."
 
+#: convertrules.py:3606
+msgid "Flag.transparent and Flag.color inherit from Stem"
+msgstr "Flag.transparent kaj Flag.color heredas el Stem"
+
+#: convertrules.py:3672
+msgid "Staff-padding now controls the distance to the baseline, not the nearest point."
+msgstr "Liniaro-ŝovo nun regas la distancon al la bazlinio, ne al la plej proksima punkto."
+
 #: fontextract.py:25
 #, python-format
 msgid "Scanning %s"
@@ -843,44 +857,44 @@ msgstr "Eltirite %s"
 msgid "Writing fonts to %s"
 msgstr "Skribado de tiparoj al %s"
 
-#: lilylib.py:96
+#: lilylib.py:101
 #, python-format
 msgid "Setting loglevel to %s"
 msgstr "Difinado de 'loglevel' al %s"
 
-#: lilylib.py:99
+#: lilylib.py:104
 #, python-format
 msgid "Unknown or invalid loglevel '%s'"
 msgstr "Nekonata aŭ malvalida 'loglevel': '%s'"
 
-#: lilylib.py:128 warn.cc:211
+#: lilylib.py:133 warn.cc:211
 #, c-format, python-format
 msgid "error: %s"
 msgstr "eraro: %s"
 
-#: lilylib.py:185
+#: lilylib.py:190
 #, python-format
 msgid "Processing %s.ly"
 msgstr "Procezado de %s.ly"
 
-#: lilylib.py:189 lilylib.py:250
+#: lilylib.py:194 lilylib.py:255
 #, python-format
 msgid "Invoking `%s'"
-msgstr "Alvokado de '%s'"
+msgstr "Alvoko de '%s'"
 
-#: lilylib.py:191 lilylib.py:252
+#: lilylib.py:196 lilylib.py:257
 #, python-format
 msgid "Running %s..."
 msgstr "Aktivigo de %s..."
 
-#: lilylib.py:328
+#: lilylib.py:333
 #, python-format
 msgid "Usage: %s"
 msgstr "Uzado: %s"
 
 #: musicexp.py:224 musicexp.py:229
 msgid "Language does not support microtones contained in the piece"
-msgstr "La lingvo de subtenas la mikrotonojn en la muziko"
+msgstr "La lingvo ne subtenas la mikrotonojn en la muziko"
 
 #: musicexp.py:491
 msgid "Tuplet brackets of curved shape are not correctly implemented"
@@ -930,12 +944,12 @@ msgstr "Antaŭsigna aliiga okto aperas por neekzistanta aliigo n-ro %s, disponeb
 msgid "Unable to find instrument for ID=%s\n"
 msgstr "Ne eblas trovi instrumenton por ID=%s\n"
 
-#: abc2ly.py:1376 convert-ly.py:81 lilypond-book.py:122 midi2ly.py:1044
+#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
 #, python-format
 msgid "%s [OPTION]... FILE"
-msgstr "%s [ELEKTILO]... DOSIERO"
+msgstr "%s [MODIFILO]... DOSIERO"
 
-#: abc2ly.py:1377
+#: abc2ly.py:1387
 #, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
@@ -944,43 +958,43 @@ msgstr ""
 "abc2ly konvertas muzikajn dosierojn ABC (vidu\n"
 "%s) al LilyPond-kodumaro.\n"
 
-#: abc2ly.py:1385 convert-ly.py:88 etf2ly.py:1208 lilypond-book.py:231
-#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:174
+#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:181
 msgid "show version number and exit"
 msgstr "montri versi-numeron kaj eliri"
 
-#: abc2ly.py:1388 convert-ly.py:92 etf2ly.py:1204 lilypond-book.py:140
-#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:153
+#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:160
 msgid "show this help and exit"
 msgstr "montri tiun ĉi helpon kaj eliri"
 
-#: abc2ly.py:1391 etf2ly.py:1209 midi2ly.py:1071
+#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071
 msgid "write output to FILE"
 msgstr "skribi eligon al DOSIERO"
 
-#: abc2ly.py:1394
+#: abc2ly.py:1404
 msgid "be strict about success"
 msgstr "esti severa pri sukceso"
 
-#: abc2ly.py:1397
+#: abc2ly.py:1407
 msgid "preserve ABC's notion of beams"
 msgstr "konservi la nocion de vostligoj de ABC"
 
-#: abc2ly.py:1400
+#: abc2ly.py:1410
 msgid "suppress progress messages"
-msgstr "forigi mesaĝojn pri progreso"
+msgstr "formeti mesaĝojn pri progreso"
 
 #. Translators, please translate this string as
 #. "Report bugs in English via %s",
 #. or if there is a LilyPond users list or forum in your language
 #. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: abc2ly.py:1403 convert-ly.py:146 etf2ly.py:1218 lilypond-book.py:258
-#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:285
+#: abc2ly.py:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:315
 #, c-format, python-format
 msgid "Report bugs via %s"
-msgstr "Raportu misojn per %s (angle)"
+msgstr "Raportu program-misojn per %s (angle)"
 
-#: convert-ly.py:46
+#: convert-ly.py:47
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
 "version taken from the \\version command, to the current LilyPond version."
@@ -988,100 +1002,108 @@ msgstr ""
 "Ĝisdatigi la enigon de LilyPond al nova versio.  Apriore, ĝisdatigi de la\n"
 "versio prenita el la komando \\version, al la nuna versio de LilyPond."
 
-#: convert-ly.py:48 lilypond-book.py:82
+#: convert-ly.py:50
+msgid "If FILE is `-', read from standard input."
+msgstr "Se DOSIERO estas '-', legi el la norma enigo."
+
+#: convert-ly.py:52 lilypond-book.py:82
 msgid "Examples:"
 msgstr "Ekzemploj:"
 
-#: convert-ly.py:75 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
+#: convert-ly.py:79 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Kopirajto (c) %s de"
 
-#: convert-ly.py:77 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
+#: convert-ly.py:81 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Disdonata sub la kondiĉoj de la Ĝenerala Publika Permesilo de GNU."
 
-#: convert-ly.py:78 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
+#: convert-ly.py:82 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
 msgid "It comes with NO WARRANTY."
 msgstr "Ĝi venas SEN iu ajn GARANTIO."
 
-#: convert-ly.py:96 convert-ly.py:137
+#: convert-ly.py:100 convert-ly.py:141
 msgid "VERSION"
 msgstr "VERSIO"
 
-#: convert-ly.py:98
+#: convert-ly.py:102
 msgid "start from VERSION [default: \\version found in file]"
-msgstr "komenci el VERSIO [apriore: \\version estis trovata en dosiero]"
+msgstr "komenci el VERSIO [aprioras \\version, trovita en la dosiero]"
 
-#: convert-ly.py:101
+#: convert-ly.py:105
 msgid "edit in place"
 msgstr "redakti surloke"
 
-#: convert-ly.py:105 lilypond-book.py:179 musicxml2ly.py:2627
+#: convert-ly.py:109 lilypond-book.py:179 musicxml2ly.py:2627
 msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)"
-msgstr "Printi protokolajn mesaĝojn laŭ PROTOKOLNIVELO (NONE, ERROR, WARNING, PROGRESS (apriore), DEBUG)"
+msgstr "Montri protokolajn mesaĝojn laŭ PROTOKOLNIVELO (NONE, ERROR, WARNING, PROGRESS (apriore), DEBUG)"
 
-#: convert-ly.py:107 lilypond-book.py:163 lilypond-book.py:181
-#: musicxml2ly.py:2629 main.cc:167
+#: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
+#: musicxml2ly.py:2629 main.cc:174
 msgid "LOGLEVEL"
 msgstr "PROTOKOLNIVELO"
 
-#: convert-ly.py:113
+#: convert-ly.py:117
 msgid "do not add \\version command if missing"
 msgstr "ne aldoni la komandon \\version se ĝi mankas"
 
-#: convert-ly.py:119
+#: convert-ly.py:123
 #, python-format
 msgid "force updating \\version number to %s"
 msgstr "perforte ĝisdatigi la numeron de \\version al %s"
 
-#: convert-ly.py:125
+#: convert-ly.py:129
 msgid "only update \\version number if file is modified"
-msgstr "nur ĝisdatigi la numeron de \version se la dosiero estas modifita"
+msgstr "nur ĝisdatigi la numeron de \\version se la dosiero estas modifita"
 
-#: convert-ly.py:131
+#: convert-ly.py:135
 #, python-format
 msgid "show rules [default: -f 0, -t %s]"
 msgstr "montri regulojn [apriore: -f 0, -t %s]"
 
-#: convert-ly.py:136
+#: convert-ly.py:140
 #, python-format
 msgid "convert to VERSION [default: %s]"
 msgstr "konverti al VERSIO [apriore: %s]"
 
-#: convert-ly.py:141 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
-#: main.cc:176
+#: convert-ly.py:147
+msgid "make a numbered backup [default: filename.ext~]"
+msgstr "fari numeritan savkopion [aprioras: dosiernomo.suf~]"
+
+#: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
+#: main.cc:183
 msgid "show warranty and copyright"
 msgstr "montri garantion kaj kopirajton"
 
-#: convert-ly.py:186
+#: convert-ly.py:196
 msgid "Applying conversion: "
 msgstr "Aplikado de konverto: "
 
-#: convert-ly.py:202
+#: convert-ly.py:215
 msgid "Error while converting"
 msgstr "Eraro dum la konvertado"
 
-#: convert-ly.py:204
+#: convert-ly.py:217
 msgid "Stopping at last successful rule"
 msgstr "Ĉeso ĉe lasta sukcesa regulo"
 
-#: convert-ly.py:231
+#: convert-ly.py:256
 #, python-format
 msgid "Processing `%s'... "
 msgstr "Procezado de '%s'... "
 
-#: convert-ly.py:338
+#: convert-ly.py:367
 #, python-format
 msgid "%s: Unable to open file"
 msgstr "%s: Ne eblas malfermi dosieron"
 
-#: convert-ly.py:345
+#: convert-ly.py:373
 #, python-format
 msgid "%s: Unable to determine version.  Skipping"
 msgstr "%s: ne eblas determini version.  Preterpase"
 
-#: convert-ly.py:350
+#: convert-ly.py:379
 #, python-format
 msgid ""
 "%s: Invalid version string `%s' \n"
@@ -1090,10 +1112,17 @@ msgstr ""
 "%s: Malvalida versi-ĉeno '%s' \n"
 "Validaj versi-ĉenoj konsistas el tri numeroj, apartitaj per punktoj, t.e. '2.8.12'"
 
+#: convert-ly.py:385
+#, python-format
+msgid "There was %d error."
+msgid_plural "There were %d errors."
+msgstr[0] "Okazis %d eraro."
+msgstr[1] "Okazis %d eraroj."
+
 #: etf2ly.py:1197
 #, python-format
 msgid "%s [OPTION]... ETF-FILE"
-msgstr "%s [ELEKTILO]... ETF-DOSIERO"
+msgstr "%s [MODIFILO]... ETF-DOSIERO"
 
 #: etf2ly.py:1198
 msgid ""
@@ -1104,7 +1133,7 @@ msgstr ""
 "Coda Music Technology.  etf2ly konvertas subaron de ETF al tujuzebla dosiero LilyPond.\n"
 
 #: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
-#: main.cc:159 main.cc:171
+#: main.cc:166 main.cc:178
 msgid "FILE"
 msgstr "DOSIERO"
 
@@ -1127,7 +1156,7 @@ msgstr "FILTRO"
 
 #: lilypond-book.py:130
 msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
-msgstr "dukti kodaĵojn tra FILTRO [apriore: convert-ly -n -]"
+msgstr "dukti kodaĵojn tra FILTRO [apriore: 'convert-ly -n -']"
 
 #: lilypond-book.py:134
 msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
@@ -1139,20 +1168,20 @@ msgstr "FORMO"
 
 #: lilypond-book.py:142
 msgid "add DIR to include path"
-msgstr "aldoni UJO al la inkluziva vojo"
+msgstr "aldoni UJOn al la inkluziva vojo"
 
 #: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
-#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:158
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:165
 msgid "DIR"
 msgstr "UJO"
 
 #: lilypond-book.py:148
 msgid "format Texinfo output so that Info will look for images of music in DIR"
-msgstr "strukturigi eligon Texinfo tiel ke Info serĉos bildojn de muziko en UJO"
+msgstr "strukturigi eligon de Texinfo tiel ke Info serĉos bildojn de muziko en UJO"
 
 #: lilypond-book.py:155
 msgid "PAD"
-msgstr "SHOV"
+msgstr "ŜOVO"
 
 #: lilypond-book.py:157
 msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)"
@@ -1168,7 +1197,7 @@ msgstr "skribi dosierojn lily-XXX al UJO, ligi al la dosierujo de --output"
 
 #: lilypond-book.py:173
 msgid "Load the additional python PACKAGE (containing e.g. a custom output format)"
-msgstr "Ŝargi je la kroma PAKO de python (enhavanta ekz. propran elig-formon)"
+msgstr "Ŝargi je la kroma PAKO de python (enhavanta ekz. personigitan elig-formon)"
 
 #: lilypond-book.py:174
 msgid "PACKAGE"
@@ -1216,7 +1245,7 @@ msgid ""
 "case --pdf option is set instead of pdflatex"
 msgstr ""
 "lanĉi la programon PROG anstataŭ latex, aŭ okaze\n"
-"de elektilo --pdf estos uzata, anstataŭ pdflatex"
+"de modifilo --pdf estos uzata, anstataŭ pdflatex"
 
 #: lilypond-book.py:241 lilypond-book.py:246
 msgid "PROG"
@@ -1230,76 +1259,76 @@ msgstr "lanĉi la programon PROG anstataŭ texi2pdf"
 msgid "create PDF files for use with PDFTeX"
 msgstr "krei dosierojn PDF por uzi kun PDFTeX"
 
-#: lilypond-book.py:455
+#: lilypond-book.py:463
 msgid "Writing snippets..."
 msgstr "Skribado de kodaĵojn..."
 
-#: lilypond-book.py:460
+#: lilypond-book.py:468
 msgid "Processing..."
 msgstr "Procezado..."
 
-#: lilypond-book.py:465
+#: lilypond-book.py:473
 msgid "All snippets are up to date..."
 msgstr "Ĉiuj kodaĵoj estas ĝisdataj..."
 
-#: lilypond-book.py:467
+#: lilypond-book.py:475
 msgid "Linking files..."
 msgstr "Kunligado de dosieroj..."
 
-#: lilypond-book.py:487
+#: lilypond-book.py:495
 #, python-format
 msgid "cannot determine format for: %s"
 msgstr "ne eblas determini la formon por: %s"
 
-#: lilypond-book.py:496
+#: lilypond-book.py:504
 #, python-format
 msgid "%s is up to date."
 msgstr "%s estas ĝisdata."
 
-#: lilypond-book.py:509
+#: lilypond-book.py:517
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Skribado de '%s'..."
 
-#: lilypond-book.py:570
+#: lilypond-book.py:580
 msgid "Output would overwrite input file; use --output."
 msgstr "Eligo povos anstataŭigi enig-dosieron; uzu --output."
 
-#: lilypond-book.py:574
+#: lilypond-book.py:584
 #, python-format
 msgid "Reading %s..."
 msgstr "Legado de %s..."
 
-#: lilypond-book.py:581
+#: lilypond-book.py:591
 msgid "Dissecting..."
 msgstr "Analizado..."
 
-#: lilypond-book.py:592
+#: lilypond-book.py:602
 #, python-format
 msgid "Compiling %s..."
 msgstr "Kompilado %s..."
 
-#: lilypond-book.py:600
+#: lilypond-book.py:610
 #, python-format
 msgid "Processing include: %s"
 msgstr "Procezado de inkluzivigo: %s"
 
-#: lilypond-book.py:611
+#: lilypond-book.py:621
 #, python-format
 msgid "Removing `%s'"
 msgstr "Forigado de '%s'"
 
-#: lilypond-book.py:704
+#: lilypond-book.py:714
 #, python-format
 msgid "Setting LilyPond's loglevel to %s"
 msgstr "Difinado de protokolnivelo de LilyPond al %s"
 
-#: lilypond-book.py:708
+#: lilypond-book.py:718
 #, python-format
 msgid "Setting LilyPond's loglevel to %s (from environment variable LILYPOND_LOGLEVEL)"
 msgstr "Difinado de protokolnivelo de LilyPond al %s (el medi-variablo LILYPOND_LOGLEVEL)"
 
-#: lilypond-book.py:711
+#: lilypond-book.py:721
 msgid "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
 msgstr "Difinado de eligo de LilyPond al --verbose, implicite de la agordoj de lilypond-book"
 
@@ -1313,7 +1342,7 @@ msgstr "eraro: "
 
 #: midi2ly.py:94
 msgid "Exiting... "
-msgstr "Elirado... "
+msgstr "Ni haltas... "
 
 #: midi2ly.py:835
 msgid "found more than 5 voices on a staff, expect bad output"
@@ -1335,11 +1364,11 @@ msgstr "printi absolutajn tonaltojn"
 
 #: midi2ly.py:1052 midi2ly.py:1080
 msgid "DUR"
-msgstr "DUR"
+msgstr "D"
 
 #: midi2ly.py:1053
 msgid "quantise note durations on DUR"
-msgstr "proksimigi noto-daŭroj per DUR"
+msgstr "proksimigi noto-daŭroj per D"
 
 #: midi2ly.py:1056
 msgid "debug printing"
@@ -1367,11 +1396,11 @@ msgstr "antaŭvido de la unuaj 4 mezuroj"
 
 #: midi2ly.py:1078
 msgid "suppress progress messages and warnings about excess voices"
-msgstr "forigi mesaĝojn pri progreso kaj avertojn pri troaj voĉoj"
+msgstr "formeti mesaĝojn pri progreso kaj avertojn pri troaj voĉoj"
 
 #: midi2ly.py:1079
 msgid "quantise note starts on DUR"
-msgstr "proksimigi noto-komencojn je DUR"
+msgstr "proksimigi noto-komencojn je D"
 
 #: midi2ly.py:1083
 msgid "use s instead of r for rests"
@@ -1379,11 +1408,11 @@ msgstr "uzi s anstataŭ r por paŭzoj"
 
 #: midi2ly.py:1085
 msgid "DUR*NUM/DEN"
-msgstr "DUR*NUM/DEN"
+msgstr "D*NUM/DEN"
 
 #: midi2ly.py:1088
 msgid "allow tuplet durations DUR*NUM/DEN"
-msgstr "ebligi opigajn daŭrojn DUR*NUM/DEN"
+msgstr "ebligi opigajn daŭrojn D*NUM/DEN"
 
 #: midi2ly.py:1098
 msgid "treat every text as a lyric"
@@ -1434,12 +1463,12 @@ msgstr "Estis trovata neprocezita markilo %s\n"
 #: musicxml2ly.py:1026
 #, python-format
 msgid "unknown span event %s"
-msgstr "nekonata disig-evento %s"
+msgstr "nekonata etendig-evento %s"
 
 #: musicxml2ly.py:1036
 #, python-format
 msgid "unknown span type %s for %s"
-msgstr "nekonata disig-tipo %s por %s"
+msgstr "nekonata etendig-tipo %s por %s"
 
 #: musicxml2ly.py:1456
 msgid "Unknown metronome mark, ignoring"
@@ -1506,7 +1535,7 @@ msgstr "Konvertado al esprimoj de LilyPond..."
 
 #: musicxml2ly.py:2564
 msgid "musicxml2ly [OPTION]... FILE.xml"
-msgstr "musicxml2ly [ELEKTILO]... DOSIERO.xml"
+msgstr "musicxml2ly [MODIFILO]... DOSIERO.xml"
 
 #: musicxml2ly.py:2566
 msgid ""
@@ -1546,11 +1575,11 @@ msgstr "konverti tonaltojn en absoluta reĝimo"
 
 #: musicxml2ly.py:2622
 msgid "LANG"
-msgstr "LINGVO"
+msgstr "LING"
 
 #: musicxml2ly.py:2624
 msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
-msgstr "uzi LANG por tonalt-nomoj, ekz. 'deutsch' por not-nomoj en la germana"
+msgstr "uzi LING por tonalt-nomoj, ekz. 'deutsch' por not-nomoj en la germana"
 
 #: musicxml2ly.py:2638
 msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
@@ -1609,15 +1638,15 @@ msgstr "Eligo al '%s'"
 msgid "Unable to find input file %s"
 msgstr "Ne eblas trovi la enig-dosieron %s"
 
-#: website_post.py:123
+#: website_post.py:125
 msgid "English"
 msgstr "Angla"
 
-#: website_post.py:126
+#: website_post.py:128
 msgid "Other languages"
 msgstr "Aliaj lingvoj"
 
-#: website_post.py:127
+#: website_post.py:129
 #, python-format
 msgid "About <a href=\"%s\">automatic language selection</a>."
 msgstr "Pri <a href=\"%s\">aŭtomata elekto de lingvo</a>."
@@ -1625,22 +1654,22 @@ msgstr "Pri <a href=\"%s\">aŭtomata elekto de lingvo</a>."
 #: getopt-long.cc:153
 #, c-format
 msgid "option `%s' requires an argument"
-msgstr "la elektilo '%s' postulas argumenton"
+msgstr "la modifilo '%s' postulas argumenton"
 
 #: getopt-long.cc:157
 #, c-format
 msgid "option `%s' does not allow an argument"
-msgstr "la elektilo '%s' ne permesas argumenton"
+msgstr "la modifilo '%s' ne permesas argumenton"
 
 #: getopt-long.cc:161
 #, c-format
 msgid "unrecognized option: `%s'"
-msgstr "nerekonata elektilo: '%s'"
+msgstr "nerekonata modifilo: '%s'"
 
 #: getopt-long.cc:167
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
-msgstr "malvalida argumento '%s' por la elektilo '%s'"
+msgstr "malvalida argumento '%s' por la modifilo '%s'"
 
 #: warn.cc:56
 #, c-format
@@ -1697,12 +1726,12 @@ msgstr "kromsigna kompostada listo devas komenci per kuntekst-nomo': %s"
 msgid "procedure or context-name expected for accidental rule, found %s"
 msgstr "proceduro aŭ kuntekst-nomo estis atendata por kromsigna regulo, trovite %s"
 
-#: accidental.cc:200
+#: accidental.cc:169
 #, c-format
 msgid "Could not find glyph-name for alteration %s"
 msgstr "Ne eblis trovi 'glyph-name' por aliigo %s"
 
-#: accidental.cc:215
+#: accidental.cc:184
 msgid "natural alteration glyph not found"
 msgstr "signobildo de natura aliigo ne estis trovata"
 
@@ -1715,7 +1744,7 @@ msgstr "ne eblas trovi tiparon: '%s'"
 msgid "\\applycontext argument is not a procedure"
 msgstr "argumento de \\applycontext ne estas proceduro"
 
-#: arpeggio.cc:115
+#: arpeggio.cc:138
 msgid "no heads for arpeggio found?"
 msgstr "ĉu neniu kapo por arpeĝo trovite?"
 
@@ -1724,19 +1753,24 @@ msgstr "ĉu neniu kapo por arpeĝo trovite?"
 msgid "cannot change, already in translator: %s"
 msgstr "ne eblas ŝanĝi, jam estas en tradukilo: %s"
 
-#: axis-group-engraver.cc:94
+#: axis-group-engraver.cc:149
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver: vertikala grupo jam havas praulon"
 
-#: axis-group-engraver.cc:95
+#: axis-group-engraver.cc:150
 msgid "are there two Axis_group_engravers?"
 msgstr "ĉu estas du 'Axis_group_engraver'?"
 
-#: axis-group-engraver.cc:96
+#: axis-group-engraver.cc:151
 msgid "removing this vertical group"
 msgstr "forigado de tiu ĉi vertikala grupo"
 
-#: axis-group-interface.cc:668
+#: axis-group-interface.cc:714
+#, c-format
+msgid "\"%s\" is not a valid outside-staff-placement-directive"
+msgstr "\"%s\" ne estas valida 'outside-staff-placement-directive'"
+
+#: axis-group-interface.cc:786
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr "objekto 'outside-staff' devas havi direkton, ni aprioras supren"
 
@@ -1745,23 +1779,23 @@ msgstr "objekto 'outside-staff' devas havi direkton, ni aprioras supren"
 msgid "barcheck failed at: %s"
 msgstr "mezur-kontrolo fiaskis ĉe: %s"
 
-#: beam-engraver.cc:147
+#: beam-engraver.cc:148
 msgid "already have a beam"
 msgstr "jam ekzistas vostligo"
 
-#: beam-engraver.cc:230
+#: beam-engraver.cc:235
 msgid "unterminated beam"
 msgstr "nefinigita vostligo"
 
-#: beam-engraver.cc:266 chord-tremolo-engraver.cc:149
+#: beam-engraver.cc:282 chord-tremolo-engraver.cc:149
 msgid "stem must have Rhythmic structure"
 msgstr "stango devas havi strukturon 'Rhythmic'"
 
-#: beam-engraver.cc:277
+#: beam-engraver.cc:293
 msgid "stem does not fit in beam"
 msgstr "stango ne adaptiĝas en vostligo"
 
-#: beam-engraver.cc:278
+#: beam-engraver.cc:294
 msgid "beam was started here"
 msgstr "vostligo estis ekigata ĉi tie"
 
@@ -1826,8 +1860,7 @@ msgstr "forĵetado de malplena fasko"
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr "Coherent_ligature_engraver: difinado de 'spacing-increment=0.01': ptr=%ul"
 
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:187 constrained-breaking.cc:205
+#: constrained-breaking.cc:187 constrained-breaking.cc:206
 msgid "cannot find line breaking that satisfies constraints"
 msgstr "ne eblas trovi lini-salton kiu kontentigas limigojn"
 
@@ -1840,35 +1873,40 @@ msgstr "necesas simbol-argumentoj por \\override kaj \\revert"
 msgid "cannot find or create new `%s'"
 msgstr "ne eblas trovi aŭ krei novan '%s'"
 
-#: context.cc:207
+#: context.cc:228
 #, c-format
 msgid "cannot find or create `%s' called `%s'"
 msgstr "ne eblas trovi aŭ krei '%s' nomata '%s'"
 
-#: context.cc:400
+#: context.cc:425
 #, c-format
 msgid "cannot find or create: `%s'"
 msgstr "ne eblas trovi aŭ krei: '%s'"
 
+#: context.cc:439
+#, c-format
+msgid "cannot find or create new Bottom = \"%s\""
+msgstr "ne eblas trovi aŭ krei novan Bottom = \"%s\""
+
 #: custos.cc:87
 #, c-format
 msgid "custos `%s' not found"
 msgstr "custos '%s' ne estis trovata"
 
-#: dispatcher.cc:83
+#: dispatcher.cc:89
 msgid "Event class should be a list"
 msgstr "Event-klaso devas esti listo"
 
-#: dispatcher.cc:166
+#: dispatcher.cc:172
 #, c-format
 msgid "Junking event: %s"
 msgstr "Rubaĵa evento: %s"
 
-#: dispatcher.cc:262
+#: dispatcher.cc:277
 msgid "Attempting to remove nonexisting listener."
 msgstr "Provo forigi neekzistantan aŭdanton."
 
-#: dispatcher.cc:284
+#: dispatcher.cc:303
 msgid "Already listening to dispatcher, ignoring request"
 msgstr "Jam aŭdadas la disdonilon, ni preteratentas la peton"
 
@@ -1877,25 +1915,19 @@ msgstr "Jam aŭdadas la disdonilon, ni preteratentas la peton"
 msgid "dot `%s' not found"
 msgstr "punkto '%s' ne estis trovata"
 
-#: dynamic-engraver.cc:193
-msgid "cannot find start of (de)crescendo"
-msgstr "ne eblas trovi komencon de '(de)crescendo'"
-
-#: dynamic-engraver.cc:200
-msgid "already have a decrescendo"
-msgstr "jam ekzistas 'decrescendo'"
-
-#: dynamic-engraver.cc:202
-msgid "already have a crescendo"
-msgstr "jam ekzistas 'crescendo'"
-
-#: dynamic-engraver.cc:205
-msgid "cresc starts here"
-msgstr "'cresc' komenciĝas ĉi tie"
+#: dynamic-engraver.cc:168
+#, c-format
+msgid ""
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
+msgstr ""
+"nekonata tipo de 'crescendo': %s\n"
+"ni uzas apriore pinĉil-forman."
 
-#: dynamic-engraver.cc:333
-msgid "unterminated (de)crescendo"
-msgstr "nefinigita '(de)crescendo'"
+#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#, c-format
+msgid "unterminated %s"
+msgstr "nefinita %s"
 
 #. No explicit dynamic script events have occurred yet, but there is
 #. nevertheless a dynamic spanner.  Initialize last_volume_ to a
@@ -1920,12 +1952,12 @@ msgstr "nefinigita episemo"
 msgid "unterminated extender"
 msgstr "nefinigita etendigilo"
 
-#: flag.cc:113
+#: flag.cc:134
 #, c-format
 msgid "flag `%s' not found"
 msgstr "flago '%s' ne estis trovata"
 
-#: flag.cc:133
+#: flag.cc:154
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "flag-streko '%s' ne estis trovata"
@@ -1958,7 +1990,7 @@ msgstr "Ekigo de FontConfig..."
 msgid "Building font database..."
 msgstr "Konstruado de tipara datumbazo..."
 
-#: footnote-engraver.cc:110
+#: footnote-engraver.cc:87
 msgid "Must be footnote-event."
 msgstr "Devas esti piednota-evento."
 
@@ -1975,15 +2007,15 @@ msgstr "Infinito aŭ NaN estis trovata en eligo.  Anstataŭigo per 0.0"
 msgid "unterminated glissando"
 msgstr "nefinigita glito"
 
-#: global-context-scheme.cc:96 global-context-scheme.cc:114
+#: global-context-scheme.cc:95 global-context-scheme.cc:113
 msgid "no music found in score"
 msgstr "neniu muziko estis trovata en la partituro"
 
-#: global-context-scheme.cc:104
+#: global-context-scheme.cc:103
 msgid "Interpreting music..."
 msgstr "Interpretado de muziko..."
 
-#: global-context-scheme.cc:126
+#: global-context-scheme.cc:125
 #, c-format
 msgid "elapsed time: %.2f seconds"
 msgstr "pasita tempo: %.2f sekundoj"
@@ -2023,11 +2055,16 @@ msgstr "La grob '%s' havas neniun interfacon por la atributo '%s'"
 msgid "%d: %s"
 msgstr "%d: %s"
 
+#: grob.cc:488
+#, c-format
+msgid "ignored infinite %s-offset"
+msgstr "preteratentis senliman %s-deŝovon"
+
 #: hairpin.cc:60
 msgid "Asking for broken bound padding at a non-broken bound."
 msgstr "Peto de rompita limig-ŝtopado ĉe ne-rompita limigo."
 
-#: hairpin.cc:254
+#: hairpin.cc:256
 msgid "decrescendo too small"
 msgstr "tro malgranda 'decrescendo'"
 
@@ -2074,31 +2111,31 @@ msgstr "Neniu signobildo estis trovata por aliigo: %s"
 msgid "alteration not found"
 msgstr "aliigo ne estis trovata"
 
-#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:104
+#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:109
 msgid "cannot find start of ligature"
 msgstr "ne eblas trovi komencon de kantligaturo"
 
-#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:131
+#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:136
 msgid "already have a ligature"
 msgstr "jam estas kantligaturo"
 
-#: ligature-engraver.cc:109
+#: ligature-engraver.cc:114
 msgid "no right bound"
 msgstr "neniu dekstra limo"
 
-#: ligature-engraver.cc:140
+#: ligature-engraver.cc:145
 msgid "no left bound"
 msgstr "neniu maldekstra limo"
 
-#: ligature-engraver.cc:184
+#: ligature-engraver.cc:189
 msgid "unterminated ligature"
 msgstr "nefinigita kantligaturo"
 
-#: ligature-engraver.cc:211
+#: ligature-engraver.cc:216
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "ni preteratentas paŭzon: kantligaturo ne povas enhavi paŭzon"
 
-#: ligature-engraver.cc:212
+#: ligature-engraver.cc:217
 msgid "ligature was started here"
 msgstr "kantligaturo estis komencata ĉi tie"
 
@@ -2107,34 +2144,34 @@ msgstr "kantligaturo estis komencata ĉi tie"
 msgid "(load path: `%s')"
 msgstr "(ŝarg-vojo: '%s')"
 
-#: lily-guile.cc:416
+#: lily-guile.cc:412
 #, c-format
 msgid "cannot find property type-check for `%s' (%s)."
 msgstr "ne eblas trovi la econ 'type-check' por '%s' (%s)."
 
-#: lily-guile.cc:419
+#: lily-guile.cc:415
 msgid "perhaps a typing error?"
 msgstr "eble tajperaro?"
 
-#: lily-guile.cc:426
-msgid "doing assignment anyway"
-msgstr "ni atribuas tamen"
+#: lily-guile.cc:422
+msgid "skipping assignment"
+msgstr "ni preterpasas asignon"
 
-#: lily-guile.cc:438
+#: lily-guile.cc:442
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "kontrolo pri tipo por '%s' fiaskis; valoro '%s' devas esti el tipo '%s'"
 
-#: lily-lexer.cc:255
+#: lily-lexer.cc:249
 msgid "include files are not allowed in safe mode"
 msgstr "inkluziv-dosieroj ne estas permesataj en sekura reĝimo"
 
-#: lily-lexer.cc:282
+#: lily-lexer.cc:276
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "identigila nomo estas ŝlosilvorto: '%s'"
 
-#: lily-lexer.cc:303 lily-lexer.cc:316
+#: lily-lexer.cc:297 lily-lexer.cc:310
 #, c-format
 msgid "%s:EOF"
 msgstr "%s:EOF"
@@ -2159,21 +2196,22 @@ msgstr "ne eblas trovi dosieron init: '%s'"
 msgid "Processing `%s'"
 msgstr "Procezado de '%s'"
 
-#: lily-parser-scheme.cc:208
+#: lily-parser-scheme.cc:209
 msgid "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parser-parse-string nur estas valida kun nova analizilo.  Uzu ly:parser-include-string anstataŭe."
 
-#: lily-parser-scheme.cc:239
+#: lily-parser-scheme.cc:240
 msgid "ly:parse-string-expression is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parser-string-expression nur estas valida kun nova analizilo.  Uzu ly:parser-include-string anstataŭe."
 
-#: lily-parser.cc:109
+#: lily-parser.cc:107
 msgid "Parsing..."
 msgstr "Analizado..."
 
-#: line-spanner.cc:373
-msgid "Line spanner's left point is to the right of its right point."
-msgstr "Maldekstra punkto de lini-etendigilo estas dekstre de ties dekstra punkto."
+#: lookup.cc:181
+#, c-format
+msgid "Not drawing a box with negative dimension, %.2f by %.2f."
+msgstr "Ni ne desegnas skatolon kun negativan dimension, %.2f oble %.2f."
 
 #: lyric-combine-music-iterator.cc:199
 msgid "argument of \\lyricsto should contain Lyrics context"
@@ -2188,7 +2226,7 @@ msgstr "ne eblas trovi Voĉon '%s'"
 msgid "Lyric syllable does not have note.  Use \\lyricsto or associatedVoice."
 msgstr "Teksta silabo ne havas noton. Uzu \\lyricsto aŭ 'associatedVoice'."
 
-#: main.cc:101
+#: main.cc:104
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -2200,7 +2238,7 @@ msgstr ""
 "Publika Permeso kaj vi estas bonvena ŝanĝi ĝin kaj/aŭ re-disdoni kopiojn de ĝi\n"
 "laŭ iaj kondiĉoj.  Lanĉu kiel '%s --warranty' por pli da informo.\n"
 
-#: main.cc:107
+#: main.cc:110
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License as \n"
@@ -2232,53 +2270,53 @@ msgstr ""
 "Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:141
+#: main.cc:148
 msgid "SYM[=VAL]"
 msgstr "SIM[=VAL]"
 
-#: main.cc:142
+#: main.cc:149
 msgid ""
 "set Scheme option SYM to VAL (default: #t).\n"
 "Use -dhelp for help."
 msgstr ""
-"difini elektilon Scheme SIM al VAL (apriore: *t).\n"
+"difini modifilon Scheme SIM al VAL (apriore: *t).\n"
 "Uzu -dhelp por ricevi helpon."
 
-#: main.cc:146
+#: main.cc:153
 msgid "EXPR"
 msgstr "ESPR"
 
-#: main.cc:146
+#: main.cc:153
 msgid "evaluate scheme code"
 msgstr "analizi kodumaron de scheme"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:149
+#: main.cc:156
 msgid "FORMATs"
 msgstr "FORMOj"
 
-#: main.cc:149
+#: main.cc:156
 msgid "dump FORMAT,...  Also as separate options:"
-msgstr "ŝuti FORMOn,...  Ankaŭ kiel apartaj elektebloj:"
+msgstr "ŝuti FORMOn,...  Ankaŭ kiel apartaj modifiloj:"
 
-#: main.cc:150
+#: main.cc:157
 msgid "generate PDF (default)"
 msgstr "generi PDF (apriore)"
 
-#: main.cc:151
+#: main.cc:158
 msgid "generate PNG"
 msgstr "generi PNG"
 
-#: main.cc:152
+#: main.cc:159
 msgid "generate PostScript"
 msgstr "generi PostScript"
 
-#: main.cc:155
+#: main.cc:162
 msgid "FIELD"
 msgstr "KAMPO"
 
-#: main.cc:155
+#: main.cc:162
 msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
@@ -2286,19 +2324,19 @@ msgstr ""
 "ŝuti kap-kampo KAMPO al dosiero\n"
 "nomata BAZNOMO.KAMPO"
 
-#: main.cc:158
+#: main.cc:165
 msgid "add DIR to search path"
 msgstr "aldoni UJOn al la serĉvojo"
 
-#: main.cc:159
+#: main.cc:166
 msgid "use FILE as init file"
 msgstr "uzi DOSIEROn kiel ekig-dosieron"
 
-#: main.cc:162
+#: main.cc:169
 msgid "USER, GROUP, JAIL, DIR"
 msgstr "UZANTO, GRUPO, KAĜO, UJO"
 
-#: main.cc:162
+#: main.cc:169
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
@@ -2306,7 +2344,7 @@ msgstr ""
 "chroot al KAĜO, fariĝi UZANTO:GRUPO\n"
 "kaj cd en UJOn"
 
-#: main.cc:167
+#: main.cc:174
 msgid ""
 "print log messages according to LOGLEVEL.  Possible values are:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
@@ -2314,24 +2352,24 @@ msgstr ""
 "printi protokol-mesaĝojn laŭ PROTOKOLNIVELO.  Eblaj valoroj estas:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (apriore) kaj DEBUG."
 
-#: main.cc:171
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
 msgstr "skribi eligon al DOSIERO (sufikso estos aldonata)"
 
-#: main.cc:172
+#: main.cc:179
 msgid "relocate using directory of lilypond program"
 msgstr "relokigi uzante dosierujon de la programo lilypond"
 
-#: main.cc:173
+#: main.cc:180
 msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
 msgstr "sen progreso, nur eraraj mesaĝoj (egale al loglevel=ERROR)"
 
-#: main.cc:175
+#: main.cc:182
 msgid "be verbose (equivalent to loglevel=DEBUG)"
 msgstr "esti detalema (egale al loglevel=DEBUG)"
 
 #. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:242
+#: main.cc:261
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -2341,74 +2379,74 @@ msgstr ""
 "%s  kaj aliaj."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:269
+#: main.cc:299
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
-msgstr "Uzado: %s [ELEKTILO]... DOSIERO..."
+msgstr "Uzado: %s [MODIFILO]... DOSIERO..."
 
-#: main.cc:271
+#: main.cc:301
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Kompostado de muziko kaj/aŭ produktado de MIDI el DOSIERO."
 
-#: main.cc:273
+#: main.cc:303
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond produktas belan muzikan notadon."
 
-#: main.cc:275
+#: main.cc:305
 #, c-format
 msgid "For more information, see %s"
 msgstr "Por pli da informo, vidu %s"
 
-#: main.cc:277
+#: main.cc:307
 msgid "Options:"
-msgstr "Elektebloj:"
+msgstr "Modifiloj:"
 
-#: main.cc:331
+#: main.cc:374
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "estis atendataj %d argumentoj kun kaĝo, estis trovataj: %u"
 
-#: main.cc:345
+#: main.cc:388
 #, c-format
 msgid "no such user: %s"
 msgstr "neniu tia uzanto: %s"
 
-#: main.cc:347
+#: main.cc:390
 #, c-format
 msgid "cannot get user id from user name: %s: %s"
 msgstr "ne eblas preni uzanto-id el uzant-nomo: %s: %s"
 
-#: main.cc:362
+#: main.cc:405
 #, c-format
 msgid "no such group: %s"
 msgstr "neniu tia grupo: %s"
 
-#: main.cc:364
+#: main.cc:407
 #, c-format
 msgid "cannot get group id from group name: %s: %s"
 msgstr "ne eblas preni grupo-id el grup-nomo: %s: %s"
 
-#: main.cc:372
+#: main.cc:415
 #, c-format
 msgid "cannot chroot to: %s: %s"
 msgstr "ne eblas apliki 'chroot' al: %s: %s"
 
-#: main.cc:379
+#: main.cc:422
 #, c-format
 msgid "cannot change group id to: %d: %s"
 msgstr "ne eblas ŝanĝi grupo-id al: %d: %s"
 
-#: main.cc:385
+#: main.cc:428
 #, c-format
 msgid "cannot change user id to: %d: %s"
 msgstr "ne eblas ŝanĝi uzant-id al: %d: %s"
 
-#: main.cc:391
+#: main.cc:434
 #, c-format
 msgid "cannot change working directory to: %s: %s"
 msgstr "ne eblas ŝanĝi aktualan dosierujon al: %s: %s"
 
-#: main.cc:639
+#: main.cc:805
 #, c-format
 msgid "exception caught: %s"
 msgstr "kaptita krom-okazo: %s"
@@ -2422,31 +2460,31 @@ msgstr "'rehearsalMark' devas havis entjeran valoron"
 msgid "mark label must be a markup object"
 msgstr "mark-etikedo devas estis markada objekto"
 
-#: mensural-ligature-engraver.cc:96
+#: mensural-ligature-engraver.cc:100
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "kantligaturo kun malpli ol 2 kapoj -> ni preterpasas"
 
-#: mensural-ligature-engraver.cc:123
+#: mensural-ligature-engraver.cc:127
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "ne eblas determini tonalton de kantligatura originalaĵo -> ni preterpasas"
 
-#: mensural-ligature-engraver.cc:137
+#: mensural-ligature-engraver.cc:141
 msgid "single note ligature - skipping"
 msgstr "unuopa noto en kantligaturo - ni preterpasas"
 
-#: mensural-ligature-engraver.cc:148
+#: mensural-ligature-engraver.cc:152
 msgid "prime interval within ligature -> skipping"
 msgstr "unuta intervalo ene de kantligaturo -> ni preterpasas"
 
-#: mensural-ligature-engraver.cc:159
+#: mensural-ligature-engraver.cc:163
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "mezurnotacia kantligaturo: daŭro ne estas unu el Mx, L, B, S -> ni preterpasas"
 
-#: mensural-ligature-engraver.cc:202
+#: mensural-ligature-engraver.cc:206
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr "pleno devas esti sekvata de alia plena -> ni preterpasas"
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:216
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
@@ -2454,7 +2492,7 @@ msgstr ""
 "plenoj nur povas aperi ĉe komenco de kantligaturo,\n"
 "kaj devas esti nur \"neniu\" aŭ du el ili"
 
-#: mensural-ligature-engraver.cc:232
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -2466,25 +2504,30 @@ msgstr ""
 "la antaŭlasta noto devas esti alia noto,\n"
 "aŭ la kantligaturo devas esti LB aŭ SSB"
 
-#: mensural-ligature-engraver.cc:387
+#: mensural-ligature-engraver.cc:396
 msgid "unexpected case fall-through"
 msgstr "fiasko pro neatendita okazo"
 
-#: midi-item.cc:89
+#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#, c-format
+msgid "ignoring out-of-range value change for MIDI property `%s'"
+msgstr "ni preteratentas valorajn ŝanĝojn for de intervalo por la atributo de MIDI '%s'"
+
+#: midi-item.cc:93
 #, c-format
 msgid "no such MIDI instrument: `%s'"
 msgstr "neniu tia instrumento MIDI: '%s'"
 
-#: midi-item.cc:161
+#: midi-item.cc:179
 msgid "Time signature with more than 255 beats.  Truncating"
 msgstr "Takt-indiko kun pli ol 255 frapoj. Ni distranĉas"
 
-#: midi-stream.cc:39
+#: midi-stream.cc:38
 #, c-format
 msgid "cannot open for write: %s: %s"
 msgstr "ne eblas malfermi por skribi: %s: %s"
 
-#: midi-stream.cc:55
+#: midi-stream.cc:54
 #, c-format
 msgid "cannot write to file: `%s'"
 msgstr "ne eblas skribi en dosiero: '%s'"
@@ -2497,11 +2540,11 @@ msgstr "Kalkulado de lini-saltoj..."
 msgid "Calculating page breaks..."
 msgstr "Kalkulado de paĝsaltoj..."
 
-#: multi-measure-rest.cc:138
+#: multi-measure-rest.cc:154
 msgid "usable-duration-logs must be a non-empty list.  Falling back to whole rests."
 msgstr "'usable-duration-logs' devas esti ne-malplena listo.  Ni revenas al plenaj paŭzoj."
 
-#: multi-measure-rest.cc:328
+#: multi-measure-rest.cc:364
 msgid "Using naive multi measure rest spacing."
 msgstr "Uzanta naivan plur-mezuran paŭzo-spacadon."
 
@@ -2519,20 +2562,6 @@ msgstr "(normigita tonalto)"
 msgid "Transposing %s by %s makes alteration larger than double"
 msgstr "Transpono de %s per %s igas aliigon pli granda ol duobla"
 
-#: new-dynamic-engraver.cc:168
-#, c-format
-msgid ""
-"unknown crescendo style: %s\n"
-"defaulting to hairpin."
-msgstr ""
-"nekonata tipo de 'crescendo': %s\n"
-"ni uzas apriore pinĉil-forman."
-
-#: new-dynamic-engraver.cc:233
-#, c-format
-msgid "unterminated %s"
-msgstr "nefinita %s"
-
 #: new-fingering-engraver.cc:113
 msgid "cannot add text scripts to individual note heads"
 msgstr "ne eblas aldoni tekstajn skriptojn al individuaj noto-kapoj"
@@ -2545,7 +2574,7 @@ msgstr "neniu loko estis trovata por fingradoj"
 msgid "placing below"
 msgstr "ni metas sube"
 
-#: note-collision.cc:496
+#: note-collision.cc:497
 msgid "ignoring too many clashing note columns"
 msgstr "ni preterpasas tro multajn kolumnojn kun koliziantaj notoj"
 
@@ -2562,37 +2591,37 @@ msgstr "neniu el notkapoj '%s' aŭ '%s' estis trovataj"
 msgid "NoteEvent without pitch"
 msgstr "NoteEvent sen tonalto"
 
-#: open-type-font.cc:44
+#: open-type-font.cc:45
 #, c-format
 msgid "cannot allocate %lu bytes"
 msgstr "ne eblas rezervi %lu bajtojn"
 
-#: open-type-font.cc:48
+#: open-type-font.cc:49
 #, c-format
 msgid "cannot load font table: %s"
 msgstr "ne eblas ŝargi je tipara tabelo: %s"
 
-#: open-type-font.cc:53
+#: open-type-font.cc:54
 #, c-format
 msgid "FreeType error: %s"
 msgstr "Eraro de FreeType: %s"
 
-#: open-type-font.cc:110
+#: open-type-font.cc:111
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "ne subtenata formo de tiparo: %s"
 
-#: open-type-font.cc:112
+#: open-type-font.cc:113
 #, c-format
 msgid "error reading font file %s: %s"
 msgstr "eraro dum legado de tipara dosiero %s: %s"
 
-#: open-type-font.cc:187
+#: open-type-font.cc:188
 #, c-format
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr "Eraro de FT_Get_Glyph_Name () en Freetype: %s"
 
-#: open-type-font.cc:318 pango-font.cc:189
+#: open-type-font.cc:336 pango-font.cc:256
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
 msgstr "Eraro de FT_Get_Glyph_Name (): %s"
@@ -2602,35 +2631,35 @@ msgstr "Eraro de FT_Get_Glyph_Name (): %s"
 msgid "Finding the ideal number of pages..."
 msgstr "Esplorado pri la plej bona nombro da paĝoj..."
 
-#: optimal-page-breaking.cc:85
+#: optimal-page-breaking.cc:94
 msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page"
 msgstr "ne eblis kontentigi kaj 'systems-per-page' kaj 'page-count' samtempe, ni preteratentas 'systems-per-page'"
 
-#: optimal-page-breaking.cc:105
+#: optimal-page-breaking.cc:114
 msgid "Fitting music on 1 page..."
 msgstr "Akomodado de muziko en 1 paĝo..."
 
-#: optimal-page-breaking.cc:107
+#: optimal-page-breaking.cc:116
 #, c-format
 msgid "Fitting music on %d pages..."
 msgstr "Akomodado de muziko en %d paĝoj..."
 
-#: optimal-page-breaking.cc:109
+#: optimal-page-breaking.cc:118
 #, c-format
 msgid "Fitting music on %d or %d pages..."
 msgstr "Akomodado de muziko en %d aŭ %d paĝoj..."
 
-#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:172
+#: optimal-page-breaking.cc:128 optimal-page-breaking.cc:181
 #, c-format
 msgid "trying %d systems"
 msgstr "provado de %d sistemoj"
 
-#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:200
+#: optimal-page-breaking.cc:147 optimal-page-breaking.cc:209
 #, c-format
 msgid "best score for this sys-count: %f"
 msgstr "plej bona poento por tiu ĉi 'sys-count': %f"
 
-#: optimal-page-breaking.cc:207 page-turn-page-breaking.cc:248
+#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248
 #: paper-score.cc:162
 msgid "Drawing systems..."
 msgstr "Desegnado de sistemoj..."
@@ -2651,24 +2680,24 @@ msgstr "ni preteratentas 'min-systems-per-page' kaj 'max-systems-per-page' ĉar
 msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values"
 msgstr "'min-systems-per-page' estas pli granda ol 'max-systems-per-page', ni preteratentas ambaŭ"
 
-#: page-layout-problem.cc:403
+#: page-layout-problem.cc:402
 msgid "A page layout problem has been initiated that cannot accommodate footnotes."
 msgstr "Paĝ-aranĝa problemo estis ekigata, kaj ĝi ne povas enteni piednotojn."
 
-#: page-layout-problem.cc:732
+#: page-layout-problem.cc:731
 msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed"
 msgstr "ne eblas akomodi muzikon sur paĝo: 'ragged-spacing' estis petata, sed la paĝo estis densigata"
 
-#: page-layout-problem.cc:735
+#: page-layout-problem.cc:734
 #, c-format
 msgid "cannot fit music on page: overflow is %f"
 msgstr "ne eblas akomodi muzikon sur paĝo: troo estas %f"
 
-#: page-layout-problem.cc:737
+#: page-layout-problem.cc:736
 msgid "compressing music to fit"
 msgstr "densigado de muziko por akomodi"
 
-#: page-layout-problem.cc:1197
+#: page-layout-problem.cc:1199
 msgid "staff-affinities should only decrease"
 msgstr "'staff-affinities' devus nur malpliigi"
 
@@ -2711,7 +2740,12 @@ msgstr "\tnombro da paĝoj: %d"
 msgid "\tprevious break: %d"
 msgstr "\tantaŭa salto: %d"
 
-#: pango-font.cc:205
+#: pango-font.cc:245
+#, c-format
+msgid "no glyph for character U+%0X in font `%s'"
+msgstr "ne estas signobildo por la signo U+%0X en la tiparo '%s'"
+
+#: pango-font.cc:272
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
@@ -2720,26 +2754,26 @@ msgstr ""
 "Signobildo ne havas nomon, sed la tiparo subtenas nomigon de signobildoj.\n"
 "Ni preterpasas signobildon U+%0X, dosiero %s"
 
-#: pango-font.cc:242
+#: pango-font.cc:322
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "neniu tiparnomo PostScript por la tiparo '%s'"
 
-#: pango-font.cc:291
+#: pango-font.cc:372
 msgid "FreeType face has no PostScript font name"
 msgstr "Tiparo FreeType ne havas tiparnomon PostScript"
 
 #: paper-book.cc:214
 #, c-format
 msgid "program option -dprint-pages not supported by backend `%s'"
-msgstr "programa elektilo -dprint-pages ne estas subtenata de la intern-interfaco '%s'"
+msgstr "programa modifilo -dprint-pages ne estas subtenata de la intern-interfaco '%s'"
 
 #: paper-book.cc:233
 #, c-format
 msgid "program option -dpreview not supported by backend `%s'"
-msgstr "programa elektilo -dpreview ne estas subtenata de la intern-interfaco '%s'"
+msgstr "programa modifilo -dpreview ne estas subtenata de la intern-interfaco '%s'"
 
-#: paper-column-engraver.cc:261
+#: paper-column-engraver.cc:263
 msgid "forced break was overridden by some other event, should you be using bar checks?"
 msgstr "perfortita salto estis preterpasata de iu evento, ĉu vi ne devus uzi kontrolajn mezur-stangojn?"
 
@@ -2765,7 +2799,7 @@ msgstr "GUILE signalis eraron por la esprimo komenciĝanta ĉi tie"
 msgid "trying to use \\partial after the start of a piece"
 msgstr "ni provas uzi \\partial post la komenco de muziko"
 
-#: pdf-scheme.cc:50
+#: pdf-scheme.cc:65
 #, c-format
 msgid "Conversion of string `%s' to UTF-16be failed: %s"
 msgstr "Konvertado de ĉeno '%s' al UTF-16be fiaskis: %s"
@@ -2783,25 +2817,6 @@ msgstr "Sekvado..."
 msgid "MIDI output to `%s'..."
 msgstr "MIDI-eligo al '%s'..."
 
-#: phrasing-slur-engraver.cc:101 slur-engraver.cc:102
-#, c-format
-msgid "direction of %s invalid: %d"
-msgstr "direkto de %s malvalidas: %d"
-
-#: phrasing-slur-engraver.cc:175
-msgid "unterminated phrasing slur"
-msgstr "nefinigita fraza ligarko"
-
-#: phrasing-slur-engraver.cc:210
-msgid "cannot end phrasing slur"
-msgstr "ne eblas finigi frazan ligarkon"
-
-#. We already have an old slur, so give a warning
-#. and completely ignore the new slur.
-#: phrasing-slur-engraver.cc:230
-msgid "already have phrasing slur"
-msgstr "jam estas fraza ligarko"
-
 #: piano-pedal-engraver.cc:279
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
@@ -2818,12 +2833,12 @@ msgstr "ne eblas trovi komencon de piano-pedalo: '%s'"
 msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "ne eblas trovi la komencon de piano-pedala krampo: '%s'"
 
-#: program-option-scheme.cc:235
+#: program-option-scheme.cc:223
 #, c-format
 msgid "no such internal option: %s"
-msgstr "neniu tia interna elektilo: %s"
+msgstr "neniu tia interna modifilo: %s"
 
-#: property-iterator.cc:93
+#: property-iterator.cc:100
 #, c-format
 msgid "not a grob name, `%s'"
 msgstr "ne estas 'grob'-nomo, '%s'"
@@ -2870,40 +2885,40 @@ msgstr "Relokigo: kompila datadir=%s, nova datadir=%s"
 msgid "Relocation: framework_prefix=%s"
 msgstr "Relokigo: framework_prefix=%s"
 
-#: relocate.cc:186
+#: relocate.cc:172
 #, c-format
 msgid "Relocation: is absolute: argv0=%s\n"
 msgstr "Relokigo: estas absoluta: argv0=%s\n"
 
-#: relocate.cc:192
+#: relocate.cc:178
 #, c-format
-msgid "Relocation: from cwd: argv0=%s\n"
-msgstr "Relokigo: de cwd: argv0=%s\n"
+msgid "Relocation : from cwd: argv0=%s\n"
+msgstr "Relokigo : de cwd: argv0=%s\n"
 
-#: relocate.cc:208
+#: relocate.cc:194
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 msgstr ""
 "Relokigo: de VOJO=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 
-#: relocate.cc:235
+#: relocate.cc:220
 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
 msgstr "LILYPONDPREFIX estas malaktuala, uzu LILYPOND_DATADIR"
 
-#: relocate.cc:360
+#: relocate.cc:345
 #, c-format
 msgid "Relocation file: %s"
 msgstr "Relokiga dosiero: %s"
 
-#: relocate.cc:364 source-file.cc:65
+#: relocate.cc:349 source-file.cc:65
 #, c-format
 msgid "cannot open file: `%s'"
 msgstr "ne eblas malfermi dosieron: '%s'"
 
-#: relocate.cc:394
+#: relocate.cc:379
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr "Nekonata relokiga komando %s"
@@ -2912,15 +2927,15 @@ msgstr "Nekonata relokiga komando %s"
 msgid "rhythmic head is not part of a rhythmic column"
 msgstr "ritma kapo ne estas parto de ritma kolumno"
 
-#: rest-collision.cc:146
+#: rest-collision.cc:150
 msgid "cannot resolve rest collision: rest direction not set"
 msgstr "ne eblas solvi paŭzan kolizion: la paŭz-direkto ne estis difinata"
 
-#: rest-collision.cc:157 rest-collision.cc:266
+#: rest-collision.cc:161 rest-collision.cc:270
 msgid "too many colliding rests"
 msgstr "tro multe da koliziantaj paŭzoj"
 
-#: rest.cc:192
+#: rest.cc:240
 #, c-format
 msgid "rest `%s' not found"
 msgstr "paŭzo '%s' ne estis trovata"
@@ -2956,33 +2971,41 @@ msgid "errors found, ignoring music expression"
 msgstr "eraroj trovitaj, ni preterpasas la muzikan esprimon"
 
 #. FIXME:
-#: script-engraver.cc:113
+#: script-engraver.cc:115
 msgid "do not know how to interpret articulation:"
 msgstr "ni ne scias kiel interpreti artikulacion:"
 
-#: script-engraver.cc:114
+#: script-engraver.cc:116
 msgid " scheme encoding: "
 msgstr " enkodado de 'scheme': "
 
-#: skyline-pair.cc:131
+#: skyline-pair.cc:160
 msgid "direction must not be CENTER in ly:skyline-pair::skyline"
 msgstr "direkto ne povas esti CENTER en ly:skyline-pair::skyline"
 
-#: slur-engraver.cc:176
-msgid "unterminated slur"
-msgstr "nefinigita ligarko"
-
-#: slur-engraver.cc:211
-msgid "cannot end slur"
-msgstr "ne eblas finigi ligarkon"
+#: slur-proto-engraver.cc:51
+#, c-format
+msgid "direction of %s invalid: %d"
+msgstr "direkto de %s malvalidas: %d"
 
 #. We already have an old slur, so give a warning
 #. and completely ignore the new slur.
-#: slur-engraver.cc:231
-msgid "already have slur"
-msgstr "jam ekzistas ligarkon"
+#: slur-proto-engraver.cc:166
+#, c-format
+msgid "already have %s"
+msgstr "jam ekzistas %s"
+
+#: slur-proto-engraver.cc:183
+#, c-format
+msgid "%s without a cause"
+msgstr "%s sen kaŭzo"
+
+#: slur-proto-engraver.cc:244
+#, c-format
+msgid "cannot end %s"
+msgstr "ne eblas finigi %s"
 
-#: slur.cc:430
+#: slur.cc:434
 #, c-format
 msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
 msgstr "Preteratento de 'grob' por ligarko: %s. Ĉu 'avoid-slur' ne estas difinita?"
@@ -2992,11 +3015,11 @@ msgstr "Preteratento de 'grob' por ligarko: %s. Ĉu 'avoid-slur' ne estas difini
 msgid "expected to read %d characters, got %d"
 msgstr "atendante legi %d signojn, ni ricevis %d"
 
-#: staff-performer.cc:275
+#: staff-performer.cc:301
 msgid "MIDI channel wrapped around"
 msgstr "MIDI-kanalo estis ĉirkaŭfluigata"
 
-#: staff-performer.cc:276
+#: staff-performer.cc:302
 msgid "remapping modulo 16"
 msgstr "remapado de modulo 16"
 
@@ -3017,12 +3040,12 @@ msgstr "eble la enigo devus indiki polifoniajn voĉojn"
 msgid "weird stem size, check for narrow beams"
 msgstr "stranga grando de stango, kontrolu mallarĝajn vostligojn"
 
-#: system.cc:200
+#: system.cc:201
 #, c-format
 msgid "Element count %d"
 msgstr "Nombro da elementoj: %d"
 
-#: system.cc:480
+#: system.cc:512
 #, c-format
 msgid "Grob count %d"
 msgstr "Nombro da 'grob': %d"
@@ -3051,11 +3074,11 @@ msgstr "jam ekzistas tekst-etendigilo"
 msgid "unterminated text spanner"
 msgstr "nefinigita tekst-etendigilo"
 
-#: tie-engraver.cc:117
+#: tie-engraver.cc:119
 msgid "unterminated tie"
 msgstr "nefinigita ligaturo"
 
-#: tie-engraver.cc:348
+#: tie-engraver.cc:353
 msgid "lonely tie"
 msgstr "sola ligaturo"
 
@@ -3071,7 +3094,7 @@ msgstr "stranga takt-indiko estis trovata: %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:122
+#: time-signature.cc:89
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr "tempindika simbolo '%s' ne estis trovata; ni revenas al numera stilo"
@@ -3140,6 +3163,10 @@ msgstr "'flexa-height' ne difinita; ni uzas 0"
 msgid "ascending vaticana style flexa"
 msgstr "kreskanta vatikana stilo 'flexa'"
 
+#: vertical-align-engraver.cc:95
+msgid "Ignoring Vertical_align_engraver in VerticalAxisGroup"
+msgstr "Ni preteratentas Vertical_align_engraver en VerticalAxisGroup"
+
 #. fixme: be more verbose.
 #: volta-engraver.cc:110
 msgid "cannot end volta spanner"
@@ -3157,68 +3184,123 @@ msgstr "ankaŭ jam ekzistas finigita etendigilo"
 msgid "giving up"
 msgstr "ni rezignas"
 
-#: parser.yy:161 parser.yy:175
+#: parser.yy:158 parser.yy:172
 msgid "Too much lookahead"
 msgstr "Tro da antaŭrigardo"
 
-#: parser.yy:835 parser.yy:1284
+#: parser.yy:441 parser.yy:752 parser.yy:818
+msgid "bad expression type"
+msgstr "malĝusta esprim-tipo"
+
+#: parser.yy:650 parser.yy:1159
 msgid "not a context mod"
 msgstr "ne estas kunteksta 'mod'"
 
-#: parser.yy:1027
+#: parser.yy:853
+msgid "score expected"
+msgstr "estis atendata muzik-skribaĵo"
+
+#: parser.yy:869
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "\\paper ne povas esti uzata en \\score, uzu \\layout anstataŭe"
 
-#: parser.yy:1051
+#: parser.yy:893
 msgid "need \\paper for paper block"
 msgstr "necesas \\paper por papera bloko"
 
-#: parser.yy:1204
+#: parser.yy:1033 parser.yy:1055
+msgid "unexpected post-event"
+msgstr "malatendita post-evento"
+
+#: parser.yy:1063
 msgid "Ignoring non-music expression"
 msgstr "Ni preterpasas ne-muzikan esprimon"
 
-#: parser.yy:2044
+#: parser.yy:1075 parser.yy:2493
+msgid "music expected"
+msgstr "estis atendata muziko"
+
+#: parser.yy:1370
+msgid "not a symbol"
+msgstr "ne estas simbolo"
+
+#: parser.yy:2182 parser.yy:2296 parser.yy:2309 parser.yy:2318
+msgid "bad grob property path"
+msgstr "malĝusta vojo de eco de 'grob'"
+
+#: parser.yy:2276
 msgid "only \\consists and \\remove take non-string argument."
 msgstr "nur \\consists kaj \\remove prenas ne-ĉenan argumenton."
 
-#: parser.yy:2057
-msgid "Grob name should be alphanumeric"
-msgstr "Grob-nomo devas esti alfanumera"
+#: parser.yy:2337
+msgid "bad context property path"
+msgstr "malĝusta vojo de eco de kunteksto"
+
+#: parser.yy:2438
+msgid "simple string expected"
+msgstr "estis atendata simpla ĉeno"
 
-#: parser.yy:2261
+#: parser.yy:2456
+msgid "symbol expected"
+msgstr "simbolo estis atendata"
+
+#: parser.yy:2611
 msgid "not a rhythmic event"
 msgstr "ne estas ritma evento"
 
-#: parser.yy:2357 parser.yy:2362
+#: parser.yy:2685
+msgid "post-event expected"
+msgstr "post-evento estis atendata"
+
+#: parser.yy:2694 parser.yy:2699
 msgid "have to be in Lyric mode for lyrics"
 msgstr "devas esti en reĝimo Lyric por tekstoj"
 
-#: parser.yy:2477
+#: parser.yy:2767
 msgid "expecting string as script definition"
 msgstr "ni atendas ĉeno kiel difino de skripto"
 
-#: parser.yy:2637 parser.yy:2681
-#, c-format
-msgid "not a duration: %d"
-msgstr "ne estas daŭro: %d"
+#: parser.yy:2875
+msgid "not an articulation"
+msgstr "ne estas artikulacio"
+
+#: parser.yy:2947 parser.yy:2990
+msgid "not a duration"
+msgstr "ne estas daŭro"
+
+#: parser.yy:3007
+msgid "bass number expected"
+msgstr "estis atendata bas-simbolo"
 
-#: parser.yy:2800
+#: parser.yy:3106
 msgid "have to be in Note mode for notes"
 msgstr "devas esti en reĝimo Note por notoj"
 
-#: parser.yy:2855
+#: parser.yy:3166
 msgid "have to be in Chord mode for chords"
 msgstr "devas esti en reĝimo Chord por akordoj"
 
-#: parser.yy:3115
+#: parser.yy:3181
+msgid "markup outside of text script or \\lyricmode"
+msgstr "markado for de teksta skripto aŭ \\lyricmode"
+
+#: parser.yy:3186
+msgid "unrecognized string, not in text script or \\lyricmode"
+msgstr "nerekonita ĉeno, ne estas en teksta skripto aŭ \\lyricmode"
+
+#: parser.yy:3347 parser.yy:3356
+msgid "not an unsigned integer"
+msgstr "ne estas sensigna entjero"
+
+#: parser.yy:3424
 msgid "not a markup"
 msgstr "ne estas markado"
 
-#: lexer.ll:218
+#: lexer.ll:224
 msgid "stray UTF-8 BOM encountered"
 msgstr "perdita UTF-8 BOM aperis"
 
-#: lexer.ll:221
+#: lexer.ll:227
 msgid "Skipping UTF-8 BOM"
 msgstr "Preterpasado de UTF-8 BOM"
 
@@ -3239,60 +3321,64 @@ msgstr "citita ĉeno estas atendata post \\sourcefilename"
 msgid "integer expected after \\sourcefileline"
 msgstr "entjero estas atendata post \\sourcefileline"
 
-#: lexer.ll:327
+#: lexer.ll:331
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput ne estas permesata ekstere de dosieroj 'init'"
 
-#: lexer.ll:351
+#: lexer.ll:355
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "malĝusta aŭ nedifinita identigilo: '%s'"
 
-#: lexer.ll:377
+#: lexer.ll:381
 msgid "string expected after \\include"
 msgstr "ĉeno estas atendata post \\include"
 
-#. backup rule
-#: lexer.ll:387
+#: lexer.ll:391
 msgid "end quote missing"
 msgstr "fina citilo mankas"
 
-#: lexer.ll:558
-msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Kurbkrampo estis trovata ĉe fino de muzikteksto.  Ĉu vi forgesis spacon?"
-
-#: lexer.ll:672
-msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Kurbkrampo estis trovata ĉe fino de markado.  Ĉu vi forgesis spacon?"
-
-#: lexer.ll:684
+#: lexer.ll:743
 msgid "EOF found inside a comment"
 msgstr "EOF estis trovata interne de komento"
 
-#: lexer.ll:782
+#: lexer.ll:748
+msgid "EOF found inside string"
+msgstr "EOF estis trovata ene de ĉeno"
+
+#: lexer.ll:763
+msgid "Unfinished main input"
+msgstr "Nefinigita ĉefenigo"
+
+#: lexer.ll:834
 #, c-format
 msgid "invalid character: `%s'"
 msgstr "malvalida signo: '%s'"
 
-#: lexer.ll:903 lexer.ll:904
+#: lexer.ll:963
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "nekonata eskapita ĉeno: '\\%s'"
 
-#: lexer.ll:1186 lexer.ll:1187
+#: lexer.ll:983
+#, c-format
+msgid "undefined character or shorthand: %s"
+msgstr "nedifinita signo aŭ mallongigo: %s"
+
+#: lexer.ll:1275
 msgid "non-UTF-8 input"
 msgstr "ne-unikoda enigo"
 
-#: lexer.ll:1230 lexer.ll:1231
+#: lexer.ll:1319
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr "dosiero tro malnova: %s (pli malnova subtenata: %s)"
 
-#: lexer.ll:1231 lexer.ll:1232
+#: lexer.ll:1320
 msgid "consider updating the input with the convert-ly script"
 msgstr "konsideru ĝisdatigi la enigon per la skripto 'convert-ly'"
 
-#: lexer.ll:1237 lexer.ll:1238
+#: lexer.ll:1326
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr "programo tro malnova: %s (la dosiero postulas: %s)"
@@ -3307,28 +3393,53 @@ msgstr "Alvokado de '~a'..."
 msgid "`~a' failed (~a)\n"
 msgstr "'~a' fiaskis (~a)\n"
 
-#: backend-library.scm:90
+#: backend-library.scm:93
 #, scheme-format
 msgid "Converting to `~a'...\n"
 msgstr "Konvertado al '~a'...\n"
 
 #. Do not try to guess the name of the png file,
 #. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:99
+#: backend-library.scm:102
 #, scheme-format
 msgid "Converting to ~a..."
 msgstr "Konvertado al ~a..."
 
-#: backend-library.scm:137
+#: backend-library.scm:140
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Skribado de kapa kampo '~a' al '~a'..."
 
-#: backend-library.scm:187
+#: backend-library.scm:189
 #, scheme-format
 msgid "missing stencil expression `~S'"
 msgstr "mankas esprimo de 'stencil' '~S'"
 
+#: bar-line.scm:133
+#, scheme-format
+msgid "Bar glyph ~a not known. Ignoring."
+msgstr "Stanga signobildo ~a ne estas konata. Ni preterpasas."
+
+#: bar-line.scm:161
+#, scheme-format
+msgid "Annotation '~a' is allowed in the first argument of a bar line definition only."
+msgstr "Noto '~a' estas permesata nur en la unua argumento de difino de stang-linio."
+
+#: bar-line.scm:169
+#, scheme-format
+msgid "Replacement '~a' is allowed in the last argument of a bar line definition only."
+msgstr "Anstataŭigo '~a' estas permesata nur en la lasta argumento de difino de stang-linio."
+
+#: bar-line.scm:230
+#, scheme-format
+msgid "add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character."
+msgstr "add-bar-glyph-print-procedure: signobildo '~a' devas esti unuopa signo ASCII."
+
+#: bar-line.scm:795
+#, scheme-format
+msgid "No span bar glyph defined for bar glyph '~a'; ignoring."
+msgstr "Neniu etendiga stang-signobildo estis difinata por stang-signobildo '~a'; ni preteratentas."
+
 #: chord-entry.scm:52
 #, scheme-format
 msgid "Spurious garbage following chord: ~A"
@@ -3340,64 +3451,84 @@ msgstr "Eventuala rubaĵo sekvanta akordon: ~A"
 msgid "symbol ~S redefined"
 msgstr "simbolo ~S estis redifinata"
 
-#: define-event-classes.scm:67
+#: define-event-classes.scm:73
 #, scheme-format
 msgid "unknown parent class `~a'"
 msgstr "nekonata event-klaso '~a'"
 
-#: define-markup-commands.scm:887
+#: define-event-classes.scm:107
+#, scheme-format
+msgid "Cannot redefine event class `~S'"
+msgstr "ne eblas redifini event-klason '~S'"
+
+#: define-event-classes.scm:109
+#, scheme-format
+msgid "Undefined parent event class `~S'"
+msgstr "nekonata patra event-klaso '~S'"
+
+#: define-markup-commands.scm:1083
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr "neniu sistemo estis trovata en markado \\score, ĉu ĝi havas blokon \\layout?"
 
-#: define-markup-commands.scm:2614
+#: define-markup-commands.scm:2847
 #, scheme-format
 msgid "Cannot find glyph ~a"
 msgstr "Ne eblas trovi signobildon ~a"
 
-#: define-markup-commands.scm:3040
+#: define-markup-commands.scm:3273
 #, scheme-format
 msgid "no brace found for point size ~S "
 msgstr "neniu kurbkrampo estis trovata por la punkta grando ~S "
 
-#: define-markup-commands.scm:3041
+#: define-markup-commands.scm:3274
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr "apriore al ~S pt"
 
-#: define-markup-commands.scm:3194
+#: define-markup-commands.scm:3526
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "ne estas valida daŭro-ĉeno: ~a"
 
-#: define-music-types.scm:765
+#: define-markup-commands.scm:3737
+#, scheme-format
+msgid "not a valid duration string: ~a - ignoring"
+msgstr "ne estas valida daŭro-ĉeno: ~a - ni preteratentas"
+
+#: define-music-types.scm:792
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr "atendata simbolo: ~S"
 
-#: define-music-types.scm:768
+#: define-music-types.scm:795
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr "ne eblas trovi muzik-objekton: ~S"
 
-#: define-music-types.scm:787
+#: define-music-types.scm:815
+#, scheme-format
+msgid "bad make-music argument: ~S"
+msgstr "malĝusta argumento make-music: ~S"
+
+#: define-music-types.scm:827
 #, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "nekonata ripeto-tipo '~S'"
 
-#: define-music-types.scm:788
+#: define-music-types.scm:828
 msgid "See define-music-types.scm for supported repeats"
 msgstr "Vidu 'define-music-types.scm' por subtenataj ripetoj"
 
-#: define-note-names.scm:962
+#: define-note-names.scm:972
 msgid "Select note names language."
 msgstr "Elekti lingvon de not-nomoj."
 
-#: define-note-names.scm:968
+#: define-note-names.scm:978
 #, scheme-format
 msgid "Using `~a' note names..."
 msgstr "Aplikado de not-nomoj '~a'..."
 
-#: define-note-names.scm:971
+#: define-note-names.scm:981
 #, scheme-format
 msgid "Could not find language `~a'.  Ignoring."
 msgstr "Ne eblis trovi la lingvon '~a'.  Preterpaso."
@@ -3437,7 +3568,7 @@ msgstr "ne eblas trovi priskribon por la atributo '~S' (~S)"
 msgid "cannot find description for property ~S (~S)"
 msgstr "ne eblas trovi priskribon por la atributo ~S (~S)"
 
-#: flag-styles.scm:151
+#: flag-styles.scm:162
 #, scheme-format
 msgid "flag stroke `~a' or `~a' not found"
 msgstr "flag-streko '~a' aŭ '~a' ne estis trovata"
@@ -3467,7 +3598,7 @@ msgstr "ni ne scias kiel enkorpigi ~S=~S"
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr "ni ne scias kiel enkorpigi la tiparon ~s ~s ~s"
 
-#: framework-ps.scm:686
+#: framework-ps.scm:687
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
@@ -3515,20 +3646,20 @@ msgstr "Eraro en kalkulado de vostligo.  Atendante (~S,~S), trovis ~S."
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr "Eraro en kalkulado de vostligo.  Atendante ~S 0, trovis ~S."
 
-#: lily-library.scm:299
+#: lily-library.scm:333
 msgid "Music unsuitable for context-mod"
 msgstr "La muziko ne taŭgas por 'context-mod'"
 
-#: lily-library.scm:349
+#: lily-library.scm:388
 #, scheme-format
 msgid "Cannot find context-def \\~a"
 msgstr "Ne eblas trovi context-def \\~a"
 
-#: lily-library.scm:365
+#: lily-library.scm:404
 msgid "Music unsuitable for output-def"
 msgstr "La muziko ne taŭgas por output-def"
 
-#: lily-library.scm:892
+#: lily-library.scm:884
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
 "which produces the closest match to @var{target-val} if\n"
@@ -3538,47 +3669,51 @@ msgstr ""
 "kiu produktas plej bonan kongruon al @var{target-val} se\n"
 "aplikata al la funkcio @var{getter}."
 
-#: lily-library.scm:966
+#: lily-library.scm:955
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr "nekonata unuo: ~S"
 
-#: lily-library.scm:991
+#: lily-library.scm:980
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr "neniu komando \\version estis trovata, bonvolu aldoni ~a por estonta kongrueco"
 
-#: lily-library.scm:997
-msgid "old relative compatibility not used"
-msgstr "malnova relativa kongruo ne estis uzata"
+#: lily.scm:75
+msgid "call-after-session used after session start"
+msgstr "call-after-session estis uzata post komenco de seanco"
 
-#: lily.scm:234
+#: lily.scm:93
+msgid "define-session used after session start"
+msgstr "define-session estis uzata post komenco de seanco"
+
+#: lily.scm:393
 msgid "Using (ice-9 curried-definitions) module\n"
 msgstr "Ni uzas la modulon (ice-9 curried-definitions)\n"
 
-#: lily.scm:237
+#: lily.scm:396
 msgid "Guile 1.8\n"
 msgstr "Guile 1.8\n"
 
-#: lily.scm:297
+#: lily.scm:455
 #, scheme-format
 msgid "cannot find: ~A"
 msgstr "ne eblas trovi: ~A"
 
-#: lily.scm:708
+#: lily.scm:878
 msgid "Success: compilation successfully completed"
 msgstr "Sukceso: la kompilado sukcese plenumiĝis"
 
-#: lily.scm:709
+#: lily.scm:879
 msgid "Compilation completed with warnings or errors"
 msgstr "La kompilado plenumiĝis kun avertoj aŭ eraroj"
 
-#: lily.scm:771
+#: lily.scm:940
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr "la laboro ~a finis kun signalo: ~a"
 
-#: lily.scm:774
+#: lily.scm:943
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
@@ -3587,17 +3722,17 @@ msgstr ""
 "protokol-dosiero ~a (eliro ~a):\n"
 "~a"
 
-#: lily.scm:796 lily.scm:882
+#: lily.scm:965 lily.scm:1054
 #, scheme-format
 msgid "failed files: ~S"
 msgstr "fiaskintajn dosieroj: ~S"
 
-#: lily.scm:873
+#: lily.scm:1045
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Redirektigo de eligo al ~a..."
 
-#: lily.scm:892 ps-to-png.scm:66
+#: lily.scm:1064 ps-to-png.scm:66
 #, scheme-format
 msgid "Invoking `~a'...\n"
 msgstr "Alvokado de '~a'...\n"
@@ -3612,7 +3747,7 @@ msgstr "funkcio ~a ne povas liveri ~a"
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "malĝusta tipo por argumento ~a.  Atendate ~a, trovite ~s"
 
-#: ly-syntax-constructors.scm:188
+#: ly-syntax-constructors.scm:199
 #, scheme-format
 msgid "Invalid property operation ~a"
 msgstr "Malvalida atribut-operacio ~a"
@@ -3665,63 +3800,63 @@ msgstr "Pli da alternativoj ol ripetoj.  Forĵeto de kromaj alternativoj"
 msgid "invalid tremolo repeat count: ~a"
 msgstr "malvalida tremson-ripeta nombro: ~a"
 
-#: music-functions.scm:689
+#: music-functions.scm:459
+#, scheme-format
+msgid "bad grob property path ~a"
+msgstr "Malĝusta vojo de eco de 'grob' ~a"
+
+#: music-functions.scm:753
 msgid "Bad chord repetition"
 msgstr "Malĝusta ripeto de akordo"
 
-#: music-functions.scm:724
+#: music-functions.scm:788
 #, scheme-format
 msgid "music expected: ~S"
 msgstr "atendita muziko: ~S"
 
-#: music-functions.scm:1042
+#: music-functions.scm:1144
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr "ne eblas trovi la cititan muzikon: '~S'"
 
-#: music-functions.scm:1180
+#: music-functions.scm:1282
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr "Aldoni @var{octave-shift} al la okto de @var{pitch}."
 
-#: music-functions.scm:1240
+#: music-functions.scm:1342
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr "Nekonata okteca tipo: ~S "
 
-#: music-functions.scm:1241
+#: music-functions.scm:1343
 msgid "Defaulting to 'any-octave."
 msgstr "Apriore al 'any-octave."
 
-#: music-functions.scm:1578
+#: music-functions.scm:1688
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "nekonata stilo de aliigo: ~S"
 
-#: output-ps.scm:277 output-svg.scm:524
+#: output-ps.scm:278 output-svg.scm:539
 #, scheme-format
 msgid "unknown line-cap-style: ~S"
 msgstr "nekonata 'line-cap-style': ~S"
 
-#: output-ps.scm:282 output-svg.scm:530
+#: output-ps.scm:283 output-svg.scm:545
 #, scheme-format
 msgid "unknown line-join-style: ~S"
 msgstr "nekonata 'line-join-style': ~S"
 
-#: output-svg.scm:47
-#, scheme-format
-msgid "undefined: ~S"
-msgstr "nedifinita: ~S"
-
-#: output-svg.scm:157
+#: output-svg.scm:148
 #, scheme-format
 msgid "cannot decypher Pango description: ~a"
 msgstr "ne eblas deĉifri priskribon Pango: ~a"
 
-#: output-svg.scm:237
+#: output-svg.scm:228
 msgid "Glyph must have a unicode value"
 msgstr "Signobildo devas havi unikodan valoron"
 
-#: output-svg.scm:289 output-svg.scm:299
+#: output-svg.scm:280 output-svg.scm:290
 #, scheme-format
 msgid "cannot find SVG font ~S"
 msgstr "ne eblas trovi SVG-tiparon ~S"
@@ -3730,33 +3865,33 @@ msgstr "ne eblas trovi SVG-tiparon ~S"
 msgid "set-global-staff-size: not in toplevel scope"
 msgstr "set-global-staff-size: ne en supernivela rango"
 
-#: paper.scm:315
+#: paper.scm:320
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "Tio ĉi ne estas objekto \\layout {}, ~S"
 
-#: paper.scm:327
+#: paper.scm:328
 #, scheme-format
 msgid "Unknown paper size: ~a"
 msgstr "Nekonata paper-grando: ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:342
+#: paper.scm:347
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "Uzendas #(set-paper-size .. ) interne de \\paper { ... }"
 
-#: parser-clef.scm:143 parser-clef.scm:183
+#: parser-clef.scm:164
 #, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "nekonata kleftipo '~a'"
 
-#: parser-clef.scm:144 parser-clef.scm:184
+#: parser-clef.scm:165
 #, scheme-format
 msgid "supported clefs: ~a"
 msgstr "subtenataj klefoj: ~a"
 
-#: parser-ly-from-scheme.scm:73
+#: parser-ly-from-scheme.scm:74
 msgid "error in #{ ... #}"
 msgstr "eraro en #{ ... #}"
 
@@ -3770,45 +3905,45 @@ msgstr "la citita muziko '~a' estas malplena"
 msgid "~a exited with status: ~S"
 msgstr "~a finis kun stato: ~S"
 
-#: to-xml.scm:191
+#: to-xml.scm:190
 #, scheme-format
 msgid "assertion failed: ~S"
 msgstr "aserto fiaskis: ~S"
 
-#: translation-functions.scm:359
+#: translation-functions.scm:368
 #, scheme-format
 msgid "Negative fret for pitch ~a on string ~a"
 msgstr "Negativa freto por tonalto ~a sur kordo ~a"
 
-#: translation-functions.scm:362
+#: translation-functions.scm:371
 #, scheme-format
 msgid "Missing fret for pitch ~a on string ~a"
 msgstr "Mankas freto por tonalto ~a sur kordo ~a"
 
-#: translation-functions.scm:413
+#: translation-functions.scm:414
 #, scheme-format
 msgid "No open string for pitch ~a"
 msgstr "Neniu libera kordo por tonalto ~a"
 
-#: translation-functions.scm:428 translation-functions.scm:440
+#: translation-functions.scm:429 translation-functions.scm:441
 #, scheme-format
 msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
 msgstr "La petita kordo por tonalto postulas negativan freton: kordo ~a tonalto ~a"
 
-#: translation-functions.scm:431
+#: translation-functions.scm:432
 msgid "Ignoring string request and recalculating."
 msgstr "Preterpaso de peto de kordo kaj rekalkulado."
 
-#: translation-functions.scm:443
+#: translation-functions.scm:444
 msgid "Ignoring note in tablature."
 msgstr "Preterpaso de noto en tabulaturo."
 
-#: translation-functions.scm:466
+#: translation-functions.scm:469
 #, scheme-format
 msgid "No string for pitch ~a (given frets ~a)"
 msgstr "Neniu kordo por tonalto ~a (je fretoj ~a)"
 
-#: translation-functions.scm:571
+#: translation-functions.scm:574
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
@@ -3817,6 +3952,51 @@ msgstr ""
 "Neniu etikedo por freto ~a (sur kordo ~a);\n"
 "nur ~a fret-etikedoj estis provizataj"
 
+#~ msgid "cannot find start of (de)crescendo"
+#~ msgstr "ne eblas trovi komencon de '(de)crescendo'"
+
+#~ msgid "already have a decrescendo"
+#~ msgstr "jam ekzistas 'decrescendo'"
+
+#~ msgid "already have a crescendo"
+#~ msgstr "jam ekzistas 'crescendo'"
+
+#~ msgid "cresc starts here"
+#~ msgstr "'cresc' komenciĝas ĉi tie"
+
+#~ msgid "unterminated (de)crescendo"
+#~ msgstr "nefinigita '(de)crescendo'"
+
+#~ msgid "unterminated phrasing slur"
+#~ msgstr "nefinigita fraza ligarko"
+
+#~ msgid "cannot end phrasing slur"
+#~ msgstr "ne eblas finigi frazan ligarkon"
+
+#~ msgid "already have phrasing slur"
+#~ msgstr "jam estas fraza ligarko"
+
+#~ msgid "unterminated slur"
+#~ msgstr "nefinigita ligarko"
+
+#~ msgid "old relative compatibility not used"
+#~ msgstr "malnova relativa kongruo ne estis uzata"
+
+#~ msgid "undefined: ~S"
+#~ msgstr "nedifinita: ~S"
+
+#~ msgid "Line spanner's left point is to the right of its right point."
+#~ msgstr "Maldekstra punkto de lini-etendigilo estas dekstre de ties dekstra punkto."
+
+#~ msgid "Grob name should be alphanumeric"
+#~ msgstr "Grob-nomo devas esti alfanumera"
+
+#~ msgid "Brace found at end of lyric.  Did you forget a space?"
+#~ msgstr "Kurbkrampo estis trovata ĉe fino de muzikteksto.  Ĉu vi forgesis spacon?"
+
+#~ msgid "Brace found at end of markup.  Did you forget a space?"
+#~ msgstr "Kurbkrampo estis trovata ĉe fino de markado.  Ĉu vi forgesis spacon?"
+
 #~ msgid "add midi-block to .ly file"
 #~ msgstr "aldoni midi-blokon al dosiero .ly"
 
index ecaa6adf27ce35daaeb544d8c38ae6a4532d6f49..368931372d4096d250ea6aeda69cf21d5058d11a 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -1,4 +1,4 @@
-# translation of lilypond-2.15.37.1.po to Español
+# translation of lilypond-2.17.96.po to Español
 # Spanish translation of GNU Lilypond - http://lilypond.org
 # Copyright (C) 2002, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 #
@@ -7,15 +7,15 @@
 # Quique <quique@sindominio.net>, 2002, 2004.
 # Daniel Tonda <daniel dot tonda (at) gmail dot com>, 2006.
 # This file is distributed under the same license as the lilypond package.
-# Francisco Vila <francisco.vila@hispalinux.es>, 2007, 2008, 2009, 2010, 2011, 2012.
+# Francisco Vila <paconet.org@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond-2.15.95\n"
+"Project-Id-Version: lilypond-2.17.96\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2012-08-11 14:29+0200\n"
-"PO-Revision-Date: 2012-08-22 12:54+0200\n"
-"Last-Translator: Francisco Vila <francisco.vila@hispalinux.es>\n"
+"POT-Creation-Date: 2013-11-24 12:14+0000\n"
+"PO-Revision-Date: 2013-11-29 10:11+0100\n"
+"Last-Translator: Francisco Vila <paconet.org@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
 "Language: es\n"
 "MIME-Version: 1.0\n"
@@ -33,20 +33,20 @@ msgstr "archivo no encontrado: %s"
 msgid "Output function not implemented"
 msgstr "Función de salida sin implementar"
 
-#: book_latex.py:170
+#: book_latex.py:174
 msgid "cannot find \\begin{document} in LaTeX document"
 msgstr "no se encuentra \\begin{document} en el documento de LaTeX"
 
-#: book_latex.py:188
+#: book_latex.py:190
 #, python-format
 msgid "Running `%s' on file `%s' to detect default page settings.\n"
 msgstr "Ejecutando «%s» sobre el archivo «%s» para detectar los ajustes de página predeterminados.\n"
 
-#: book_latex.py:209 book_texinfo.py:228
+#: book_latex.py:212 book_texinfo.py:228
 msgid "Unable to auto-detect default settings:\n"
 msgstr "No se pudieron detectar automáticamente los ajustes predeterminados:\n"
 
-#: book_latex.py:221 book_texinfo.py:240
+#: book_latex.py:224 book_texinfo.py:240
 #, python-format
 msgid ""
 "Unable to auto-detect default settings:\n"
@@ -55,61 +55,65 @@ msgstr ""
 "No se pudieron detectar automáticamente los ajustes predeterminados:\n"
 "%s"
 
-#: book_snippets.py:409
+#: book_latex.py:247
+msgid "cannot detect textwidth from LaTeX"
+msgstr "no se puede detectar el valor de textwidth a partir de LaTeX"
+
+#: book_snippets.py:406
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "se ha usado una ly-option obsoleta: %s=%s"
 
-#: book_snippets.py:411
+#: book_snippets.py:408
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr "traducción en modo de compatibilidad: %s=%s"
 
-#: book_snippets.py:414
+#: book_snippets.py:411
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "se usó una ly-option obsoleta: %s"
 
-#: book_snippets.py:416
+#: book_snippets.py:413
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr "traducción en modo compatible: %s"
 
-#: book_snippets.py:533
+#: book_snippets.py:530
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "opción ly desconocida e ignorada: %s"
 
-#: book_snippets.py:624
+#: book_snippets.py:621
 #, python-format
 msgid "Missing files: %s"
 msgstr "Archivos que faltan: %s"
 
-#: book_snippets.py:654
+#: book_snippets.py:651
 #, python-format
 msgid "Could not overwrite file %s"
 msgstr "No se puede sobreescribir el archivo %s"
 
-#: book_snippets.py:741
+#: book_snippets.py:738
 #, python-format
 msgid "Running through filter `%s'"
 msgstr "Ejecutando a través del filtro «%s»"
 
-#: book_snippets.py:761
+#: book_snippets.py:759
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "«%s» ha fallado (%d)"
 
-#: book_snippets.py:762
+#: book_snippets.py:760
 msgid "The error log is as follows:"
 msgstr "El registro de errores es como sigue:"
 
-#: book_snippets.py:882
+#: book_snippets.py:880
 #, python-format
 msgid "Converting MusicXML file `%s'...\n"
 msgstr "Conviertiendo archivo MusicXML «%s»...\n"
 
-#: book_snippets.py:909
+#: book_snippets.py:907
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of original file,\n"
@@ -118,7 +122,7 @@ msgstr ""
 "%s: nombre duplicado pero contenido diferente del archivo original,\n"
 "se imprime la diferencia respecto al archivo existente."
 
-#: book_snippets.py:922
+#: book_snippets.py:920
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of converted lilypond file,\n"
@@ -135,129 +139,129 @@ msgstr ""
 msgid "Running texi2pdf on file %s to detect default page settings.\n"
 msgstr "Ejecutando texi2pdf sobre el archivo %s para detectar los ajustes predeterminados de página.\n"
 
-#: convertrules.py:12
+#: convertrules.py:13
 #, python-format
 msgid "Not smart enough to convert %s."
 msgstr "No soy tan listo como para convertir %s."
 
-#: convertrules.py:13
+#: convertrules.py:14
 msgid "Please refer to the manual for details, and update manually."
 msgstr "Consulte el manual para ver los detalles, y efectúe una actualización manual."
 
-#: convertrules.py:14
+#: convertrules.py:15
 #, python-format
 msgid "%s has been replaced by %s"
 msgstr "%s se ha sustituido por %s"
 
-#: convertrules.py:24 lilylib.py:131 warn.cc:223
+#: convertrules.py:25 lilylib.py:136 warn.cc:223
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "advertencia: %s"
 
-#: convertrules.py:49 convertrules.py:94
+#: convertrules.py:50 convertrules.py:95
 msgid "\\header { key = concat + with + operator }"
 msgstr "\\header { clave = concatenar + con + este + operador}"
 
-#: convertrules.py:56
+#: convertrules.py:57
 #, python-format
 msgid "deprecated %s"
 msgstr "%s en desuso"
 
-#: convertrules.py:65
+#: convertrules.py:66
 msgid "deprecated \\textstyle, new \\key syntax"
 msgstr "\\textstyle en desuso, sintaxis nueva para \\key"
 
-#: convertrules.py:81 convertrules.py:1855 convertrules.py:2031
-#: convertrules.py:2174 convertrules.py:2505 convertrules.py:2800
-#: convertrules.py:3150
+#: convertrules.py:82 convertrules.py:1856 convertrules.py:2032
+#: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801
+#: convertrules.py:3151 convertrules.py:3385
 msgid "bump version for release"
 msgstr "actualizar la versión para el lanzamiento"
 
-#: convertrules.py:97
+#: convertrules.py:98
 msgid "new \\header format"
 msgstr "formato nuevo de \\header"
 
-#: convertrules.py:124
+#: convertrules.py:125
 msgid "\\translator syntax"
 msgstr "sintaxis de \\translator"
 
-#: convertrules.py:175
+#: convertrules.py:176
 msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
 msgstr "\\repeat NÚMERO Alternativa de Música -> \\repeat FOLDSTR Alternativa de Música"
 
-#: convertrules.py:205 convertrules.py:678 convertrules.py:1350
-#: convertrules.py:2317
+#: convertrules.py:206 convertrules.py:679 convertrules.py:1351
+#: convertrules.py:2318
 #, python-format
 msgid "deprecate %s"
 msgstr "%s en desuso"
 
-#: convertrules.py:279
+#: convertrules.py:280
 #, python-format
 msgid "deprecate %s "
 msgstr "%s en desuso "
 
-#: convertrules.py:305
+#: convertrules.py:306
 msgid "new \\notenames format"
 msgstr "formato nuevo de \\notenames"
 
-#: convertrules.py:321
+#: convertrules.py:322
 msgid "new tremolo format"
 msgstr "formato nuevo de tremolo"
 
-#: convertrules.py:325
+#: convertrules.py:326
 msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver"
 msgstr "Staff_margin_engraver en desuso, utilice Instrument_name_engraver"
 
-#: convertrules.py:376
+#: convertrules.py:377
 msgid "change property definition case (eg. onevoice -> oneVoice)"
 msgstr "cambiar las mayúsculas de la definición de propiedad (p.ej. onevoice -> oneVoice)"
 
-#: convertrules.py:437
+#: convertrules.py:438
 msgid "new \\textscript markup text"
 msgstr "nuevo texto de marcado \\textscript"
 
-#: convertrules.py:509
+#: convertrules.py:510
 #, python-format
 msgid "identifier names: %s"
 msgstr "nombres de identificador: %s"
 
-#: convertrules.py:548
+#: convertrules.py:549
 msgid "point-and-click argument changed to procedure."
 msgstr "argumento de apuntar-y-pulsar cambiado a procedimiento."
 
-#: convertrules.py:590
+#: convertrules.py:591
 msgid "semicolons removed"
 msgstr "retirado el punto y coma"
 
 #. 40 ?
-#: convertrules.py:633
+#: convertrules.py:634
 #, python-format
 msgid "%s property names"
 msgstr "nombres de propiedad %s"
 
-#: convertrules.py:703
+#: convertrules.py:704
 msgid "automaticMelismata turned on by default"
 msgstr "automaticMelismata activado por omisión"
 
-#: convertrules.py:708
+#: convertrules.py:709
 msgid "automaticMelismata is turned on by default since 1.5.67."
 msgstr "automaticMelismata activado por omisión desde 1.5.67."
 
-#: convertrules.py:942 convertrules.py:1635 convertrules.py:1889
-#: convertrules.py:2134
+#: convertrules.py:943 convertrules.py:1636 convertrules.py:1890
+#: convertrules.py:2135
 #, python-format
 msgid "remove %s"
 msgstr "suprimir %s"
 
-#: convertrules.py:977 convertrules.py:980
+#: convertrules.py:978 convertrules.py:981
 msgid "cluster syntax"
 msgstr "sintaxis de los racimos (clusters)"
 
-#: convertrules.py:987
+#: convertrules.py:988
 msgid "new Pedal style syntax"
 msgstr "sintaxis nueva de estilo de Pedal"
 
-#: convertrules.py:1246
+#: convertrules.py:1247
 msgid ""
 "New relative mode,\n"
 "Postfix articulations, new text markup syntax, new chord syntax."
@@ -265,28 +269,28 @@ msgstr ""
 "Nuevo modo relativo,\n"
 "articulaciones posfijas, sintaxis de marcado de texto nueva, sintaxis de acordes nueva."
 
-#: convertrules.py:1259
+#: convertrules.py:1260
 msgid "Remove - before articulation"
 msgstr "Quitar el guión antes de la articulación"
 
-#: convertrules.py:1294
+#: convertrules.py:1295
 #, python-format
 msgid "%s misspelling"
 msgstr "fallo de escritura en %s"
 
-#: convertrules.py:1313
+#: convertrules.py:1314
 msgid "Swap < > and << >>"
 msgstr "Intercambiar < > y << >>"
 
-#: convertrules.py:1316
+#: convertrules.py:1317
 msgid "attempting automatic \\figures conversion.  Check results!"
 msgstr "intento de conversión automática de \\figures. ¡Compruebe el resultado!"
 
-#: convertrules.py:1362
+#: convertrules.py:1363
 msgid "Use Scheme code to construct arbitrary note events."
 msgstr "Usar código de Scheme para construir eventos arbitrarios de nota."
 
-#: convertrules.py:1369
+#: convertrules.py:1370
 msgid ""
 "use symbolic constants for alterations,\n"
 "remove \\outputproperty, move ly:verbose into ly:get-option"
@@ -294,7 +298,7 @@ msgstr ""
 "usar constantes simbólicas para las alteraciones,\n"
 "eliminar \\outputproperty, cambiar ly:verbose por ly:get-option"
 
-#: convertrules.py:1394
+#: convertrules.py:1395
 #, python-format
 msgid ""
 "\\outputproperty found,\n"
@@ -311,7 +315,7 @@ msgstr ""
 "\n"
 "como texto de sustitución."
 
-#: convertrules.py:1406
+#: convertrules.py:1407
 msgid ""
 "The alteration field of Scheme pitches was multiplied by 2\n"
 "to support quarter tone accidentals.  You must update the following constructs manually:\n"
@@ -325,15 +329,15 @@ msgstr ""
 "* llamadas a ly:make-pitch y a ly:pitch-alteration\n"
 "* ajustes de keySignature hechos con \\property\n"
 
-#: convertrules.py:1449
+#: convertrules.py:1450
 msgid "removal of automaticMelismata; use melismaBusyProperties instead."
 msgstr "eliminación de automaticMelismata; utilice en su lugar melismaBusyProperties."
 
-#: convertrules.py:1556
+#: convertrules.py:1557
 msgid "\\partcombine syntax change to \\newpartcombine"
 msgstr "cambio en la sintaxis de \\partcombine a \\newpartcombine"
 
-#: convertrules.py:1581
+#: convertrules.py:1582
 msgid ""
 "Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
 "Harmonic notes. Thread context removed. Lyrics context removed."
@@ -341,11 +345,11 @@ msgstr ""
 "Cambios en la notación de percusión, eliminación de \\chordmodifiers y \\notenames.\n"
 "Notas armónicas. Eliminado el contexto Thread. Eliminado el contexto Lyrics."
 
-#: convertrules.py:1585
+#: convertrules.py:1586
 msgid "Drums found. Enclose drum notes in \\drummode"
 msgstr "Se han encontrado percusiones. Encierre las notas de percusión dentro de \\drummode"
 
-#: convertrules.py:1596 convertrules.py:1603 convertrules.py:1614
+#: convertrules.py:1597 convertrules.py:1604 convertrules.py:1615
 #, python-format
 msgid ""
 "\n"
@@ -354,33 +358,33 @@ msgstr ""
 "\n"
 "se han encontrado %s. ¡Compruebe el archivo a mano!\n"
 
-#: convertrules.py:1596
+#: convertrules.py:1597
 msgid "Drum notation"
 msgstr "Notación de percusión"
 
-#: convertrules.py:1655
+#: convertrules.py:1656
 msgid "new syntax for property settings:"
 msgstr "sintaxis nueva para los ajustes de propiedades:"
 
-#: convertrules.py:1681
+#: convertrules.py:1682
 msgid "Property setting syntax in \\translator{ }"
 msgstr "sintaxis para el establecimiento de propiedades en \\translator{ }"
 
-#: convertrules.py:1720
+#: convertrules.py:1721
 msgid "Scheme grob function renaming"
 msgstr "renombrado de la función de grob de Scheme"
 
-#: convertrules.py:1731 convertrules.py:2138 convertrules.py:2142
-#: convertrules.py:2708
+#: convertrules.py:1732 convertrules.py:2139 convertrules.py:2143
+#: convertrules.py:2709
 #, python-format
 msgid "Use %s\n"
 msgstr "Utilice %s\n"
 
-#: convertrules.py:1747
+#: convertrules.py:1748
 msgid "More Scheme function renaming"
 msgstr "Más renombrado de funciones de Scheme"
 
-#: convertrules.py:1871
+#: convertrules.py:1872
 msgid ""
 "Page layout has been changed, using paper size and margins.\n"
 "textheight is no longer used.\n"
@@ -388,7 +392,7 @@ msgstr ""
 "La disposición de la página se ha cambiado, utilizando tamaño de página y márgenes.\n"
 "textheight ya no se utiliza.\n"
 
-#: convertrules.py:1957
+#: convertrules.py:1958
 msgid ""
 "\\foo -> \\foomode (for chords, notes, etc.)\n"
 "fold \\new FooContext \\foomode into \\foo."
@@ -396,7 +400,7 @@ msgstr ""
 "\\loquesea -> \\loqueseamode (para acordes, notas, etc.)\n"
 "plegar \\new LoqueseaContext \\loqueseamode en \\loquesea."
 
-#: convertrules.py:1995
+#: convertrules.py:1996
 msgid ""
 "staff size should be changed at top-level\n"
 "with\n"
@@ -410,40 +414,40 @@ msgstr ""
 "  #(set-global-staff-size <ALTURA-DEL-PENTAGRAMA-EN-PUNTOS>)\n"
 "\n"
 
-#: convertrules.py:2015
+#: convertrules.py:2016
 msgid "regularize other identifiers"
 msgstr "regularizar otros identificadores"
 
-#: convertrules.py:2083
+#: convertrules.py:2084
 msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
 msgstr "\\encoding: recodificación inteligente de latin1 a utf-8. Eliminación de ly:point-and-click"
 
-#: convertrules.py:2094
+#: convertrules.py:2095
 msgid "LilyPond source must be UTF-8"
 msgstr "El código de entrada de LilyPond debe ser UTF-8"
 
-#: convertrules.py:2097
+#: convertrules.py:2098
 msgid "Try the texstrings backend"
 msgstr "Pruebe con el 'backend' texstrings"
 
-#: convertrules.py:2100
+#: convertrules.py:2101
 #, python-format
 msgid "Do something like: %s"
 msgstr "Haga algo parecido a %s"
 
-#: convertrules.py:2103
+#: convertrules.py:2104
 msgid "Or save as UTF-8 in your editor"
 msgstr "O guarde como UTF-8 en su editor"
 
-#: convertrules.py:2153
+#: convertrules.py:2154
 msgid "warn about auto beam settings"
 msgstr "advertir acerca de los ajustes de barrado automático"
 
-#: convertrules.py:2157
+#: convertrules.py:2158
 msgid "auto beam settings"
 msgstr "ajustes de barrado automático"
 
-#: convertrules.py:2158
+#: convertrules.py:2159
 msgid ""
 "\n"
 "Auto beam settings must now specify each interesting moment in a measure\n"
@@ -454,39 +458,39 @@ msgstr ""
 "momentos interesantes de un compás explícitamente; 1/4 ya no se multiplica \n"
 "para que cubra también los momentos 1/2 y 3/4.\n"
 
-#: convertrules.py:2271
+#: convertrules.py:2272
 msgid "verticalAlignmentChildCallback has been deprecated"
 msgstr "verticalAlignmentChildCallback ha caído en desuso"
 
-#: convertrules.py:2276
+#: convertrules.py:2277
 msgid "Remove callbacks property, deprecate XY-extent-callback."
 msgstr "Eliminar la propiedad de «callbacks», despreciar XY-extent-callback."
 
-#: convertrules.py:2297
+#: convertrules.py:2298
 msgid "Use grob closures iso. XY-offset-callbacks."
 msgstr "Utilizar cerraduras de grob en lugar de XY-offset-callbacks."
 
-#: convertrules.py:2359
+#: convertrules.py:2360
 msgid "foobar -> foo-bar for \\paper, \\layout"
 msgstr "fulanomengano -> fulano-mengano para \\paper, \\layout"
 
-#: convertrules.py:2469
+#: convertrules.py:2470
 msgid "deprecate \\tempo in \\midi"
 msgstr "despreciar \\tempo dentro de \\midi"
 
-#: convertrules.py:2522
+#: convertrules.py:2523
 msgid "deprecate cautionary-style. Use AccidentalCautionary properties"
 msgstr "despreciar cautionary-style. Utilizar las propiedades AccidentalCautionary"
 
-#: convertrules.py:2535
+#: convertrules.py:2536
 msgid "Rename accidental glyphs, use glyph-name-alist."
 msgstr "Renombrar los glifos de las alteraciones accidentales, usar glyph-name-alist."
 
-#: convertrules.py:2590
+#: convertrules.py:2591
 msgid "edge-text settings for TextSpanner"
 msgstr "ajustes de edge-text para TextSpanner"
 
-#: convertrules.py:2591
+#: convertrules.py:2592
 #, python-format
 msgid ""
 "Use\n"
@@ -497,35 +501,35 @@ msgstr ""
 "\n"
 "%s"
 
-#: convertrules.py:2624
+#: convertrules.py:2625
 msgid "Use the `alignment-offsets' sub-property of\n"
 msgstr "Utilice la sub-propiedad «alignment-offsets» de\n"
 
-#: convertrules.py:2625
+#: convertrules.py:2626
 msgid "NonMusicalPaperColumn #'line-break-system-details\n"
 msgstr "NonMusicalPaperColumn #'line-break-system-details\n"
 
-#: convertrules.py:2626
+#: convertrules.py:2627
 msgid "to set fixed distances between staves.\n"
 msgstr "para establecer distancias fijas entre pautas.\n"
 
-#: convertrules.py:2638
+#: convertrules.py:2639
 msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
 msgstr "Usar #'style en lugar de #'dash-fraction para elegir entre líneas continuas e intermitentes."
 
-#: convertrules.py:2644
+#: convertrules.py:2645
 msgid "all settings related to dashed lines"
 msgstr "todos los ajustes relacionados con líneas intermitentes"
 
-#: convertrules.py:2645
+#: convertrules.py:2646
 msgid "Use \\override ... #'style = #'line for solid lines and\n"
 msgstr "Usar \\override ... #'style = #'line para las líneas continuas y\n"
 
-#: convertrules.py:2646
+#: convertrules.py:2647
 msgid "\t\\override ... #'style = #'dashed-line for dashed lines."
 msgstr "\t\\override ... #'style = #'dashed-line para líneas intermintentes."
 
-#: convertrules.py:2682
+#: convertrules.py:2683
 msgid ""
 "metronomeMarkFormatter uses text markup as second argument,\n"
 "fret diagram properties moved to fret-diagram-details."
@@ -533,11 +537,11 @@ msgstr ""
 "metronomeMarkFormatter utiliza marcas de texto como segundo argumento,\n"
 "propiedades de diagramas de trastes trasladadas a fret-diagram-details."
 
-#: convertrules.py:2688
+#: convertrules.py:2689
 msgid "metronomeMarkFormatter got an additional text argument.\n"
 msgstr "metronomeMarkFormatter ha tomado un argumento adicional de texto.\n"
 
-#: convertrules.py:2689
+#: convertrules.py:2690
 #, python-format
 msgid ""
 "The function assigned to Score.metronomeMarkFunction now uses the signature\n"
@@ -546,48 +550,48 @@ msgstr ""
 "La función asignada a Score.metronomeMarkFunction usa ahora la indicación\n"
 "%s"
 
-#: convertrules.py:2707
+#: convertrules.py:2708
 #, python-format
 msgid "%s in fret-diagram properties"
 msgstr "%s en las propiedades de fret-diagram"
 
-#: convertrules.py:2751
+#: convertrules.py:2752
 msgid "\\put-adjacent argument order"
 msgstr "orden de argumentos de \\put-adjacent"
 
-#: convertrules.py:2752
+#: convertrules.py:2753
 msgid "Axis and direction now come before markups:\n"
 msgstr "El eje y la dirección ahora van antes de los marcados:\n"
 
-#: convertrules.py:2753
+#: convertrules.py:2754
 msgid "\\put-adjacent axis dir markup markup."
 msgstr "\\put-adjacent eje dirección marcado marcado."
 
-#: convertrules.py:2784
+#: convertrules.py:2785
 msgid "re-definition of InnerStaffGroup"
 msgstr "redefinición de InnerStaffGroup"
 
-#: convertrules.py:2789
+#: convertrules.py:2790
 msgid "re-definition of InnerChoirStaff"
 msgstr "redefinición de InnerChoirStaff"
 
-#: convertrules.py:2799
+#: convertrules.py:2800
 msgid "Syntax changes for \\addChordShape and \\chord-shape"
 msgstr "Cambios sintácticos para \\addChordShape y \\chord-shape"
 
-#: convertrules.py:2804
+#: convertrules.py:2805
 msgid "stringTuning must be added to addChordShape call.\n"
 msgstr "stringTuning se debe añadir a la llamada a addChordShape.\n"
 
-#: convertrules.py:2809
+#: convertrules.py:2810
 msgid "stringTuning must be added to chord-shape call.\n"
 msgstr "stringTuning se debe añadir a la llamada a chord-shape.\n"
 
-#: convertrules.py:2815
+#: convertrules.py:2816
 msgid "Remove oldaddlyrics"
 msgstr "Eliminar oldaddlyrics"
 
-#: convertrules.py:2819
+#: convertrules.py:2820
 msgid ""
 "oldaddlyrics is no longer supported. \n"
 "         Use addlyrics or lyrsicsto instead.\n"
@@ -595,7 +599,7 @@ msgstr ""
 "oldaddlyrics ya no está contemplado. \n"
 "         Utilice en su lugar addlyrics o lyrsicsto.\n"
 
-#: convertrules.py:2825
+#: convertrules.py:2826
 msgid ""
 "keySignature property not reversed any more\n"
 "MIDI 47: orchestral strings -> orchestral harp"
@@ -603,11 +607,11 @@ msgstr ""
 "la propiedad keySignature ya no se revierte\n"
 "MIDI 47: orchestral strings -> orchestral harp"
 
-#: convertrules.py:2830
+#: convertrules.py:2831
 msgid "The alist for Staff.keySignature is no longer in reversed order.\n"
 msgstr "La lista-A de Staff.keySignature ya no está en orden inverso.\n"
 
-#: convertrules.py:2836
+#: convertrules.py:2837
 msgid ""
 "\\bar \".\" now produces a thick barline\n"
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
@@ -618,17 +622,17 @@ msgstr ""
 "Los parámetros de discontinuidad para las ligaduras\n"
 "de expresión y de unión ahora están en dash-definition"
 
-#: convertrules.py:2842
+#: convertrules.py:2843
 msgid "\\bar \".\" now produces a thick barline.\n"
 msgstr "\\bar \".\" ahora produce una línea divisoria gruesa.\n"
 
-#: convertrules.py:2848
+#: convertrules.py:2849
 msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
 msgstr ""
 "Los parámetros de discontinuidad para las ligaduras\n"
 "de expresión y de unión ahora están en 'dash-details.\n"
 
-#: convertrules.py:2853
+#: convertrules.py:2854
 msgid ""
 "Autobeaming rules have changed.  override-auto-beam-setting and\n"
 "revert-auto-beam-setting have been eliminated.\n"
@@ -655,15 +659,15 @@ msgstr ""
 "`Piano centered dynamics'\n"
 "por el nuevo contexto `Dynamics'."
 
-#: convertrules.py:2867
+#: convertrules.py:2868
 msgid "    Autobeam settings are now overriden with \\overrideBeamSettings.\n"
 msgstr "   Los ajustes de barrado automático se sobreescriben ahora con \\overrideBeamSettings.\n"
 
-#: convertrules.py:2872
+#: convertrules.py:2873
 msgid "    Autobeam settings are now reverted with \\revertBeamSettings.\n"
 msgstr "   Los ajustes de barrado automático se revierten ahora con \\revertBeamSettings.\n"
 
-#: convertrules.py:2878
+#: convertrules.py:2879
 msgid ""
 "    beatGrouping with a specified context must now be accomplished with\n"
 "   \\overrideBeamSettings.\n"
@@ -671,14 +675,14 @@ msgstr ""
 "   beatGrouping con un contexto especificado se hace ahora con\n"
 "   \\overrideBeamSettings.\n"
 
-#: convertrules.py:2884
+#: convertrules.py:2885
 msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n"
 msgstr ""
 "alignment-offsets ha cambiado a alignment-distances:\n"
 "  ahora se deben especificar las distancias entre pautas\n"
 "  en lugar del desplazamiento de cada pauta.\n"
 
-#: convertrules.py:2895
+#: convertrules.py:2896
 msgid ""
 "Remove obsolete engravers/translators: Note_swallow_translator,\n"
 "Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
@@ -690,23 +694,23 @@ msgstr ""
 "Swallow_performer and String_number_engraver.\n"
 "Nuevas variables de espaciado vertical."
 
-#: convertrules.py:2926
+#: convertrules.py:2927
 msgid "Vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n"
 msgstr "El espaciado vertical ya no depende de la dimensión Y-extent de un VerticalAxisGroup.\n"
 
-#: convertrules.py:2932
+#: convertrules.py:2933
 msgid "Unify fetaNumber and fetaDynamic encodings"
 msgstr "Unificar las codificaciones fetaNumber y fetaDynamic"
 
-#: convertrules.py:2937
+#: convertrules.py:2938
 msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 
-#: convertrules.py:2948
+#: convertrules.py:2949
 msgid "\\cresc etc. are now postfix operators"
 msgstr "\\cresc etc. ahora son operadores posfijos"
 
-#: convertrules.py:2960
+#: convertrules.py:2961
 msgid ""
 "Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
@@ -714,23 +718,23 @@ msgstr ""
 "Eliminar beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings y \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
 
-#: convertrules.py:2978
+#: convertrules.py:2979
 msgid "Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"
 msgstr "Use \\set beamExceptions u \\overrideTimeSignatureSettings.\n"
 
-#: convertrules.py:2982
+#: convertrules.py:2983
 msgid "Use \\set beamExceptions or \\revertTimeSignatureSettings.\n"
 msgstr "Use \\set beamExceptions o \\revertTimeSignatureSettings.\n"
 
-#: convertrules.py:2986
+#: convertrules.py:2987
 msgid "Use baseMoment, beatStructure, and beamExceptions.\n"
 msgstr "Use baseMoment, beatStructure y beamExceptions.\n"
 
-#: convertrules.py:2990 convertrules.py:2994
+#: convertrules.py:2991 convertrules.py:2995
 msgid "Use baseMoment and beatStructure.\n"
 msgstr "Use baseMoment y beatStructure.\n"
 
-#: convertrules.py:2999
+#: convertrules.py:3000
 msgid ""
 "Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n"
 "Deprecate negative dash-period for hidden lines: use #'style = #'none instead."
@@ -739,11 +743,11 @@ msgstr ""
 "Mover el tamaño, grosor y forma gráfica de la lista de argumentos a propiedades.\n"
 "Se desprecia el período de discontinuidad negativo para líneas ocultas: use #'style = #'none en su lugar."
 
-#: convertrules.py:3004
+#: convertrules.py:3005
 msgid "Move size, thickness, and graphic to properties.  Argument should be just the key list.\n"
 msgstr "Mover el tamaño, grosor y forma gráfica a propiedades.  El único argumento debe ser la lista de claves.\n"
 
-#: convertrules.py:3012
+#: convertrules.py:3013
 msgid ""
 "Rename vertical spacing variables.\n"
 "Add fretboard-table argument to savePredefinedFretboard."
@@ -751,23 +755,23 @@ msgstr ""
 "Renombrado de las variables de espaciado vertical.\n"
 "Añadir argumento de tabla de diagramas de posiciones a savePredefinedFretboard."
 
-#: convertrules.py:3030
+#: convertrules.py:3031
 msgid "Rename vertical spacing grob properties."
 msgstr "Renombrado de las propiedades de grob del espaciado vertical."
 
-#: convertrules.py:3046
+#: convertrules.py:3047
 msgid "Remove \\paper variables head-separation and foot-separation."
 msgstr "Eliminación de las variables de \\paper head-separation y foot-separation."
 
-#: convertrules.py:3050
+#: convertrules.py:3051
 msgid "Adjust settings for top-system-spacing instead.\n"
 msgstr "Ajuste los valores para top-system-spacing en su lugar.\n"
 
-#: convertrules.py:3054
+#: convertrules.py:3055
 msgid "Adjust settings for last-bottom-spacing instead.\n"
 msgstr "Ajuste los valores para last-bottom-spacing en su lugar.\n"
 
-#: convertrules.py:3060
+#: convertrules.py:3061
 msgid ""
 "Rename space to basic-distance in various spacing alists.\n"
 "Remove HarmonicParenthesesItem grob."
@@ -775,19 +779,19 @@ msgstr ""
 "Renombrar space a basic-distance en varias listas-A de espaciado.\n"
 "Eliminar el grob HarmonicParenthesesItem."
 
-#: convertrules.py:3067
+#: convertrules.py:3068
 msgid "HarmonicParenthesesItem has been eliminated.\n"
 msgstr "HarmonicParenthesesItem se ha eliminado.\n"
 
-#: convertrules.py:3068
+#: convertrules.py:3069
 msgid "Harmonic parentheses are part of the TabNoteHead grob.\n"
 msgstr "Los paréntesis en los armónicos forman parte del grob TabNoteHead.\n"
 
-#: convertrules.py:3073
+#: convertrules.py:3074
 msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n"
 msgstr "Eliminar el contexto de overrideTimeSignatureSettings y revertTimeSignatureSettings.\n"
 
-#: convertrules.py:3080
+#: convertrules.py:3081
 msgid ""
 "Change stringTunings from a list of semitones to a list of pitches.\n"
 "Change tenor and baritone ukulele names in string tunings.\n"
@@ -797,54 +801,62 @@ msgstr ""
 "Cambiar los nombres tenor y baritone en las afinaciones de cuerdas del ukelele.\n"
 "Generar mensajes para la conversión manual del espaciado vertical si es necesario."
 
-#: convertrules.py:3123
+#: convertrules.py:3124
 msgid "Vertical spacing changes might affect user-defined contexts."
 msgstr "Los cambios en el espaciado vertical pueden afectar a los contextos definidos por el usuario."
 
-#: convertrules.py:3129
+#: convertrules.py:3130
 msgid "Replace bar-size with bar-extent."
 msgstr "Sustituir bar-size con bar-extent."
 
-#: convertrules.py:3141
+#: convertrules.py:3142
 msgid "Woodwind diagrams: Changes to the clarinet diagram."
 msgstr "Diagramas de viento madera: cambios en el diagrama de clarinete."
 
-#: convertrules.py:3145
+#: convertrules.py:3146
 msgid "Clarinet fingering changed to reflect actual anatomy of instrument.\n"
 msgstr "Se cambia la digitación del clarinete para que refleje la anatomía real del instrumento.\n"
 
-#: convertrules.py:3155
+#: convertrules.py:3156
 msgid "Handling of non-automatic footnotes."
 msgstr "Manejo de notas al pie no automáticas."
 
-#: convertrules.py:3159
+#: convertrules.py:3160
 msgid "If you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.\n"
 msgstr "Si está utilizando notas al pie no automáticas, asegúrese de establecer footnote-auto-numbering = ##f en el bloque paper.\n"
 
-#: convertrules.py:3164
+#: convertrules.py:3165
 msgid "Change in internal property for MultiMeasureRest"
 msgstr "Cambio en propiedad interna de MultiMeasureRest"
 
-#: convertrules.py:3168
+#: convertrules.py:3169
 msgid "This internal property has been replaced by round-up-to-longer-rest, round-up-exceptions and usable-duration-logs.\n"
 msgstr "Esta propiedad interna se ha sustituido por round-to-longer-rest,round-up-exceptions y usable-duration-logs.\n"
 
-#: convertrules.py:3173
+#: convertrules.py:3174
 msgid "Creation of a Flag grob and moving of certain Stem properties to this grob"
 msgstr "Creación de un grob de Flag y mover ciertas propiedades de Stem a este grob"
 
-#: convertrules.py:3209
+#: convertrules.py:3210
 msgid "consistent-broken-slope is now handled through the positions callback.\n"
 msgstr "consistent-broken-slope se maneja ahora a través del callback «positions».\n"
 
-#: convertrules.py:3210
+#: convertrules.py:3211
 msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n"
 msgstr "input/regression/beam-broken-classic.ly muestra cómo se manejan ahora las barras divididas.\n"
 
-#: convertrules.py:3368
+#: convertrules.py:3369
 msgid "beamExceptions controls whole-measure beaming."
 msgstr "beamExceptions controla el barrado de compases completos."
 
+#: convertrules.py:3606
+msgid "Flag.transparent and Flag.color inherit from Stem"
+msgstr "Flag.transparent y Flag.color se heredan de Stem"
+
+#: convertrules.py:3672
+msgid "Staff-padding now controls the distance to the baseline, not the nearest point."
+msgstr "Staff-padding ahora controla la distancia a la línea de base, no al punto más próximo."
+
 #: fontextract.py:25
 #, python-format
 msgid "Scanning %s"
@@ -860,37 +872,37 @@ msgstr "Se ha extraído %s"
 msgid "Writing fonts to %s"
 msgstr "Escribiendo las tipografías en %s"
 
-#: lilylib.py:96
+#: lilylib.py:101
 #, python-format
 msgid "Setting loglevel to %s"
 msgstr "Se establece el nivel de registro a %s"
 
-#: lilylib.py:99
+#: lilylib.py:104
 #, python-format
 msgid "Unknown or invalid loglevel '%s'"
 msgstr "Nivel de registro «%s» desconocido o no válido"
 
-#: lilylib.py:128 warn.cc:211
+#: lilylib.py:133 warn.cc:211
 #, c-format, python-format
 msgid "error: %s"
 msgstr "error: %s"
 
-#: lilylib.py:185
+#: lilylib.py:190
 #, python-format
 msgid "Processing %s.ly"
 msgstr "Procesando «%s.ly»"
 
-#: lilylib.py:189 lilylib.py:250
+#: lilylib.py:194 lilylib.py:255
 #, python-format
 msgid "Invoking `%s'"
 msgstr "Invocando «%s»"
 
-#: lilylib.py:191 lilylib.py:252
+#: lilylib.py:196 lilylib.py:257
 #, python-format
 msgid "Running %s..."
 msgstr "Ejecutando %s..."
 
-#: lilylib.py:328
+#: lilylib.py:333
 #, python-format
 msgid "Usage: %s"
 msgstr "uso: %s"
@@ -947,12 +959,12 @@ msgstr "¡Se ha proporcionado una octava de alteración de tonalidad para un nú
 msgid "Unable to find instrument for ID=%s\n"
 msgstr "No se ha podido encontrar el instrumento con el ID=%s\n"
 
-#: abc2ly.py:1376 convert-ly.py:81 lilypond-book.py:122 midi2ly.py:1044
+#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
 #, python-format
 msgid "%s [OPTION]... FILE"
 msgstr "%s [OPCIÓN]... ARCHIVO"
 
-#: abc2ly.py:1377
+#: abc2ly.py:1387
 #, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
@@ -961,29 +973,29 @@ msgstr ""
 "abc2ly convierte archivos de música de ABC\n"
 "(véase %s) en código de entrada de LilyPond.\n"
 
-#: abc2ly.py:1385 convert-ly.py:88 etf2ly.py:1208 lilypond-book.py:231
-#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:174
+#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:181
 msgid "show version number and exit"
 msgstr "mostrar el número de versión y salir"
 
-#: abc2ly.py:1388 convert-ly.py:92 etf2ly.py:1204 lilypond-book.py:140
-#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:153
+#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:160
 msgid "show this help and exit"
 msgstr "mostrar esta ayuda y salir"
 
-#: abc2ly.py:1391 etf2ly.py:1209 midi2ly.py:1071
+#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071
 msgid "write output to FILE"
 msgstr "escribir la salida en el ARCHIVO"
 
-#: abc2ly.py:1394
+#: abc2ly.py:1404
 msgid "be strict about success"
 msgstr "ser estricto respecto al éxito"
 
-#: abc2ly.py:1397
+#: abc2ly.py:1407
 msgid "preserve ABC's notion of beams"
 msgstr "preservar la noción de las barras de ABC"
 
-#: abc2ly.py:1400
+#: abc2ly.py:1410
 msgid "suppress progress messages"
 msgstr "suprimir mensajes de avance"
 
@@ -991,15 +1003,15 @@ msgstr "suprimir mensajes de avance"
 #. "Report bugs in English via %s",
 #. or if there is a LilyPond users list or forum in your language
 #. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: abc2ly.py:1403 convert-ly.py:146 etf2ly.py:1218 lilypond-book.py:258
-#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:285
+#: abc2ly.py:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:315
 #, c-format, python-format
 msgid "Report bugs via %s"
 msgstr ""
 "Informe de los fallos en español a http://lists.gnu.org/mailman/listinfo/lilypond-es\n"
 "o en inglés a %s"
 
-#: convert-ly.py:46
+#: convert-ly.py:47
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
 "version taken from the \\version command, to the current LilyPond version."
@@ -1008,100 +1020,108 @@ msgstr ""
 "De manera predeterminada, actualizarlo desde la versión sacada de\n"
 "la instrucción \\version, a la versión actual de LilyPond."
 
-#: convert-ly.py:48 lilypond-book.py:82
+#: convert-ly.py:50
+msgid "If FILE is `-', read from standard input."
+msgstr "si ARCHIVO es `-', leer de la entrada estándar."
+
+#: convert-ly.py:52 lilypond-book.py:82
 msgid "Examples:"
 msgstr "Ejemplos:"
 
-#: convert-ly.py:75 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
+#: convert-ly.py:79 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s por"
 
-#: convert-ly.py:77 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
+#: convert-ly.py:81 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Distribuido bajo los términos de la Licencia Pública General de GNU."
 
-#: convert-ly.py:78 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
+#: convert-ly.py:82 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
 msgid "It comes with NO WARRANTY."
 msgstr "Se distribuye SIN NINGUNA GARANTÍA."
 
-#: convert-ly.py:96 convert-ly.py:137
+#: convert-ly.py:100 convert-ly.py:141
 msgid "VERSION"
 msgstr "VERSIÓN"
 
-#: convert-ly.py:98
+#: convert-ly.py:102
 msgid "start from VERSION [default: \\version found in file]"
 msgstr "comenzar a partir de VERSIÓN [predeterminado: \\version del archivo]"
 
-#: convert-ly.py:101
+#: convert-ly.py:105
 msgid "edit in place"
 msgstr "editar in situ"
 
-#: convert-ly.py:105 lilypond-book.py:179 musicxml2ly.py:2627
+#: convert-ly.py:109 lilypond-book.py:179 musicxml2ly.py:2627
 msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)"
 msgstr "Imprimir los mensajes de registro según NIVEL_DE_REGISTRO (NONE (ninguno), ERROR (error), WARNING (advertencias), PROGRESS (avance; predeterminado), DEBUG (depuración))"
 
-#: convert-ly.py:107 lilypond-book.py:163 lilypond-book.py:181
-#: musicxml2ly.py:2629 main.cc:167
+#: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
+#: musicxml2ly.py:2629 main.cc:174
 msgid "LOGLEVEL"
 msgstr "NIVEL_DE_REGISTRO"
 
-#: convert-ly.py:113
+#: convert-ly.py:117
 msgid "do not add \\version command if missing"
 msgstr "no añadir la instrucción \\version si no está presente"
 
-#: convert-ly.py:119
+#: convert-ly.py:123
 #, python-format
 msgid "force updating \\version number to %s"
 msgstr "forzar la actualización del número de  \\version a %s"
 
-#: convert-ly.py:125
+#: convert-ly.py:129
 msgid "only update \\version number if file is modified"
 msgstr "actualizar solo el número de \\version si el archivo ha sido modificado"
 
-#: convert-ly.py:131
+#: convert-ly.py:135
 #, python-format
 msgid "show rules [default: -f 0, -t %s]"
 msgstr "mostrar las reglas [predeterminado: -f 0, -t %s]"
 
-#: convert-ly.py:136
+#: convert-ly.py:140
 #, python-format
 msgid "convert to VERSION [default: %s]"
 msgstr "convertir a VERSIÓN [predeterminado: %s]"
 
-#: convert-ly.py:141 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
-#: main.cc:176
+#: convert-ly.py:147
+msgid "make a numbered backup [default: filename.ext~]"
+msgstr "hacer una copia de respaldo numerada [predeterminado: nombre.ext~]"
+
+#: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
+#: main.cc:183
 msgid "show warranty and copyright"
 msgstr "mostrar los avisos de garantía y de copyright"
 
-#: convert-ly.py:186
+#: convert-ly.py:196
 msgid "Applying conversion: "
 msgstr "Aplicando la conversión: "
 
-#: convert-ly.py:202
+#: convert-ly.py:215
 msgid "Error while converting"
 msgstr "Error al convertir"
 
-#: convert-ly.py:204
+#: convert-ly.py:217
 msgid "Stopping at last successful rule"
 msgstr "Detención en la última regla satisfactoria"
 
-#: convert-ly.py:231
+#: convert-ly.py:256
 #, python-format
 msgid "Processing `%s'... "
 msgstr "Procesando «%s»... "
 
-#: convert-ly.py:338
+#: convert-ly.py:367
 #, python-format
 msgid "%s: Unable to open file"
 msgstr "%s: No se pudo abrir el archivo"
 
-#: convert-ly.py:345
+#: convert-ly.py:373
 #, python-format
 msgid "%s: Unable to determine version.  Skipping"
 msgstr "%s: no se puede determinar la versión.  Se salta"
 
-#: convert-ly.py:350
+#: convert-ly.py:379
 #, python-format
 msgid ""
 "%s: Invalid version string `%s' \n"
@@ -1110,6 +1130,13 @@ msgstr ""
 "%s: Cadena de versión no válida `%s' \n"
 "Las cadenas de versión válidas se componen de tres números separados por puntos, p.ej. `2.8.12'"
 
+#: convert-ly.py:385
+#, python-format
+msgid "There was %d error."
+msgid_plural "There were %d errors."
+msgstr[0] "Se ha producido %d error."
+msgstr[1] "Se han producido %d errores."
+
 #: etf2ly.py:1197
 #, python-format
 msgid "%s [OPTION]... ETF-FILE"
@@ -1125,7 +1152,7 @@ msgstr ""
 "archivo de LilyPond listo para usar.\n"
 
 #: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
-#: main.cc:159 main.cc:171
+#: main.cc:166 main.cc:178
 msgid "FILE"
 msgstr "ARCHIVO"
 
@@ -1163,7 +1190,7 @@ msgid "add DIR to include path"
 msgstr "añadir DIRECTORIO a la ruta de inclusión"
 
 #: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
-#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:158
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:165
 msgid "DIR"
 msgstr "DIRECTORIO"
 
@@ -1251,76 +1278,76 @@ msgstr "ejecutar PROG en lugar de texi2pdf"
 msgid "create PDF files for use with PDFTeX"
 msgstr "crear archivos PDF para su utilización con PDFTeX"
 
-#: lilypond-book.py:455
+#: lilypond-book.py:463
 msgid "Writing snippets..."
 msgstr "Escribiendo fragmentos..."
 
-#: lilypond-book.py:460
+#: lilypond-book.py:468
 msgid "Processing..."
 msgstr "Procesando..."
 
-#: lilypond-book.py:465
+#: lilypond-book.py:473
 msgid "All snippets are up to date..."
 msgstr "Todos los fragmentos están actualizados..."
 
-#: lilypond-book.py:467
+#: lilypond-book.py:475
 msgid "Linking files..."
 msgstr "Enlazando los archivos..."
 
-#: lilypond-book.py:487
+#: lilypond-book.py:495
 #, python-format
 msgid "cannot determine format for: %s"
 msgstr "no se puede determinar el formato de: %s"
 
-#: lilypond-book.py:496
+#: lilypond-book.py:504
 #, python-format
 msgid "%s is up to date."
 msgstr "%s está actualizado."
 
-#: lilypond-book.py:509
+#: lilypond-book.py:517
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Escribiendo «%s»..."
 
-#: lilypond-book.py:570
+#: lilypond-book.py:580
 msgid "Output would overwrite input file; use --output."
 msgstr "La salida sobreescribiría el archivo de entrada; utilice --output."
 
-#: lilypond-book.py:574
+#: lilypond-book.py:584
 #, python-format
 msgid "Reading %s..."
 msgstr "Leyendo %s..."
 
-#: lilypond-book.py:581
+#: lilypond-book.py:591
 msgid "Dissecting..."
 msgstr "Diseccionando..."
 
-#: lilypond-book.py:592
+#: lilypond-book.py:602
 #, python-format
 msgid "Compiling %s..."
 msgstr "Compilando %s..."
 
-#: lilypond-book.py:600
+#: lilypond-book.py:610
 #, python-format
 msgid "Processing include: %s"
 msgstr "Procesando el archivo de inclusión: %s"
 
-#: lilypond-book.py:611
+#: lilypond-book.py:621
 #, python-format
 msgid "Removing `%s'"
 msgstr "Suprimiendo «%s»"
 
-#: lilypond-book.py:704
+#: lilypond-book.py:714
 #, python-format
 msgid "Setting LilyPond's loglevel to %s"
 msgstr "Se establece el nivel de registro de LilyPond a %s"
 
-#: lilypond-book.py:708
+#: lilypond-book.py:718
 #, python-format
 msgid "Setting LilyPond's loglevel to %s (from environment variable LILYPOND_LOGLEVEL)"
 msgstr "Se establece el nivel de registro de LilyPond a %s (a partir de la variable de entorno LILYPOND_LOGLEVEL)"
 
-#: lilypond-book.py:711
+#: lilypond-book.py:721
 msgid "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
 msgstr "Se establece la salida de LilyPond a --verbose (prolija), implícita por el ajuste de lilypond-book"
 
@@ -1630,15 +1657,15 @@ msgstr "La salida se dirige hacia `%s'"
 msgid "Unable to find input file %s"
 msgstr "No se encuentra el archivo de entrada %s"
 
-#: website_post.py:123
+#: website_post.py:125
 msgid "English"
 msgstr "Inglés"
 
-#: website_post.py:126
+#: website_post.py:128
 msgid "Other languages"
 msgstr "Otros idiomas"
 
-#: website_post.py:127
+#: website_post.py:129
 #, python-format
 msgid "About <a href=\"%s\">automatic language selection</a>."
 msgstr "Acerca de la <a href=\"%s\">selección automática del idioma</a>."
@@ -1718,12 +1745,12 @@ msgstr "la lista de tippografiado de alteraciones accidentales debe comenzar con
 msgid "procedure or context-name expected for accidental rule, found %s"
 msgstr "se esperaba un procedimiento o un nombre de contexto para la regla de alteración accidental, se ha encontrado %s"
 
-#: accidental.cc:200
+#: accidental.cc:169
 #, c-format
 msgid "Could not find glyph-name for alteration %s"
 msgstr "No se ha encontrado el nombre de glifo para la alteración %s"
 
-#: accidental.cc:215
+#: accidental.cc:184
 msgid "natural alteration glyph not found"
 msgstr "no se encuentra el glifo del símbolo de becuadro"
 
@@ -1736,7 +1763,7 @@ msgstr "no se encuentra la tipografía «%s»"
 msgid "\\applycontext argument is not a procedure"
 msgstr "el argumento de \\applycontext no es un procedimiento"
 
-#: arpeggio.cc:115
+#: arpeggio.cc:138
 msgid "no heads for arpeggio found?"
 msgstr "¿No se han encontrado notas para el arpegio?"
 
@@ -1745,19 +1772,24 @@ msgstr "¿No se han encontrado notas para el arpegio?"
 msgid "cannot change, already in translator: %s"
 msgstr "no se puede cambiar, ya está dentro del traductor: %s"
 
-#: axis-group-engraver.cc:94
+#: axis-group-engraver.cc:149
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver: el grupo vertical ya tiene un ancestro"
 
-#: axis-group-engraver.cc:95
+#: axis-group-engraver.cc:150
 msgid "are there two Axis_group_engravers?"
 msgstr "¿hay dos Axis_group_engravers?"
 
-#: axis-group-engraver.cc:96
+#: axis-group-engraver.cc:151
 msgid "removing this vertical group"
 msgstr "se suprime este grupo vertical"
 
-#: axis-group-interface.cc:668
+#: axis-group-interface.cc:714
+#, c-format
+msgid "\"%s\" is not a valid outside-staff-placement-directive"
+msgstr "«%s» no es una directiva válida de colocación fuera del pentagrama"
+
+#: axis-group-interface.cc:786
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr "un objeto externo a la pauta debe tener una dirección, por omisión se establece hacia arriba"
 
@@ -1766,23 +1798,23 @@ msgstr "un objeto externo a la pauta debe tener una dirección, por omisión se
 msgid "barcheck failed at: %s"
 msgstr "la comprobación de compás ha fallado en: %s"
 
-#: beam-engraver.cc:147
+#: beam-engraver.cc:148
 msgid "already have a beam"
 msgstr "ya tiene una barra"
 
-#: beam-engraver.cc:230
+#: beam-engraver.cc:235
 msgid "unterminated beam"
 msgstr "barra sin terminar"
 
-#: beam-engraver.cc:266 chord-tremolo-engraver.cc:149
+#: beam-engraver.cc:282 chord-tremolo-engraver.cc:149
 msgid "stem must have Rhythmic structure"
 msgstr "la plica debe tener estructura rítmica"
 
-#: beam-engraver.cc:277
+#: beam-engraver.cc:293
 msgid "stem does not fit in beam"
 msgstr "la plica no cabe dentro de la barra"
 
-#: beam-engraver.cc:278
+#: beam-engraver.cc:294
 msgid "beam was started here"
 msgstr "la barra comenzó aquí"
 
@@ -1847,8 +1879,7 @@ msgstr "se recorta el racimo (cluster) vacío"
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr "Coherent_ligature_engraver: se establece `spacing-increment=0.01': ptr=%ul"
 
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:187 constrained-breaking.cc:205
+#: constrained-breaking.cc:187 constrained-breaking.cc:206
 msgid "cannot find line breaking that satisfies constraints"
 msgstr "no se ecnuentra un salto de línea que cumpla las restricciones"
 
@@ -1861,35 +1892,40 @@ msgstr "se necesitan argumentos de símbolo para \\override y \\revert"
 msgid "cannot find or create new `%s'"
 msgstr "no se encuentra o no se puede crear un «%s» nuevo"
 
-#: context.cc:207
+#: context.cc:228
 #, c-format
 msgid "cannot find or create `%s' called `%s'"
 msgstr "no se encuentra o no se puede crear «%s» llamado «%s»"
 
-#: context.cc:400
+#: context.cc:425
 #, c-format
 msgid "cannot find or create: `%s'"
 msgstr "no se encuentra o no se puede crear «%s»"
 
+#: context.cc:439
+#, c-format
+msgid "cannot find or create new Bottom = \"%s\""
+msgstr "no se encuentra o no se puede crear un Bottom = «%s» nuevo"
+
 #: custos.cc:87
 #, c-format
 msgid "custos `%s' not found"
 msgstr "no se encuentran los custos «%s»"
 
-#: dispatcher.cc:83
+#: dispatcher.cc:89
 msgid "Event class should be a list"
 msgstr "La clase del evento debe ser una lista"
 
-#: dispatcher.cc:166
+#: dispatcher.cc:172
 #, c-format
 msgid "Junking event: %s"
 msgstr "se elimina el evento: %s"
 
-#: dispatcher.cc:262
+#: dispatcher.cc:277
 msgid "Attempting to remove nonexisting listener."
 msgstr "Tratando de eliminar un \"listener\" que no existe."
 
-#: dispatcher.cc:284
+#: dispatcher.cc:303
 msgid "Already listening to dispatcher, ignoring request"
 msgstr "Ya se está escuchando al despachador, se ignora la solicitud"
 
@@ -1898,25 +1934,19 @@ msgstr "Ya se está escuchando al despachador, se ignora la solicitud"
 msgid "dot `%s' not found"
 msgstr "no se encuentra el puntillo «%s»"
 
-#: dynamic-engraver.cc:193
-msgid "cannot find start of (de)crescendo"
-msgstr "no se encuentra el comienzo del (de)crescendo"
-
-#: dynamic-engraver.cc:200
-msgid "already have a decrescendo"
-msgstr "ya tiene un decrescendo"
-
-#: dynamic-engraver.cc:202
-msgid "already have a crescendo"
-msgstr "ya tiene un crescendo"
-
-#: dynamic-engraver.cc:205
-msgid "cresc starts here"
-msgstr "el cresc comenzó aquí"
+#: dynamic-engraver.cc:168
+#, c-format
+msgid ""
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
+msgstr ""
+"estilo de crescendo desconocido: %s\n"
+"se toma regulador como predeterminado."
 
-#: dynamic-engraver.cc:333
-msgid "unterminated (de)crescendo"
-msgstr "(de)crescendo sin terminar"
+#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#, c-format
+msgid "unterminated %s"
+msgstr "%s sin terminar"
 
 #. No explicit dynamic script events have occurred yet, but there is
 #. nevertheless a dynamic spanner.  Initialize last_volume_ to a
@@ -1941,12 +1971,12 @@ msgstr "episema sin terminar"
 msgid "unterminated extender"
 msgstr "prolongación sin terminar"
 
-#: flag.cc:113
+#: flag.cc:134
 #, c-format
 msgid "flag `%s' not found"
 msgstr "no se encuentra el indicador «%s»"
 
-#: flag.cc:133
+#: flag.cc:154
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "no se encuentra la forma del glifo del corchete «%s»"
@@ -1979,7 +2009,7 @@ msgstr "Inicializando FontConfig..."
 msgid "Building font database..."
 msgstr "Construyendo la base de datos de fuentes tipográficas..."
 
-#: footnote-engraver.cc:110
+#: footnote-engraver.cc:87
 msgid "Must be footnote-event."
 msgstr "Debe ser un evento de nota al pie."
 
@@ -1996,15 +2026,15 @@ msgstr "Se ha encontrado Infinito o NaN en la salida. Se sustituye por 0.0"
 msgid "unterminated glissando"
 msgstr "glissando sin terminar"
 
-#: global-context-scheme.cc:96 global-context-scheme.cc:114
+#: global-context-scheme.cc:95 global-context-scheme.cc:113
 msgid "no music found in score"
 msgstr "no se ha encontrado música en la partitura"
 
-#: global-context-scheme.cc:104
+#: global-context-scheme.cc:103
 msgid "Interpreting music..."
 msgstr "Interpretando la música..."
 
-#: global-context-scheme.cc:126
+#: global-context-scheme.cc:125
 #, c-format
 msgid "elapsed time: %.2f seconds"
 msgstr "tiempo transcurrido: %.2f segundos"
@@ -2044,11 +2074,16 @@ msgstr "El grob «%s» no tiene interfaz para la propiedad «%s»"
 msgid "%d: %s"
 msgstr "%d: %s"
 
+#: grob.cc:488
+#, c-format
+msgid "ignored infinite %s-offset"
+msgstr "se ignora el desplazamiento infinito de %s"
+
 #: hairpin.cc:60
 msgid "Asking for broken bound padding at a non-broken bound."
 msgstr "Se está solicitando un relleno de límite cortado en un límite que no está cortado."
 
-#: hairpin.cc:254
+#: hairpin.cc:256
 msgid "decrescendo too small"
 msgstr "decrescendo demasiado pequeño"
 
@@ -2095,32 +2130,32 @@ msgstr "No se ha encontrado ningún glifo para la alteración: %s"
 msgid "alteration not found"
 msgstr "no se encuentra la alteración"
 
-#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:104
+#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:109
 msgid "cannot find start of ligature"
 msgstr "no se encuentra el comienzo de la ligadura"
 
-#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:131
+#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:136
 msgid "already have a ligature"
 msgstr "ya tiene una ligadura"
 
-#: ligature-engraver.cc:109
+#: ligature-engraver.cc:114
 msgid "no right bound"
 msgstr "no hay límite derecho"
 
-#: ligature-engraver.cc:140
+#: ligature-engraver.cc:145
 msgid "no left bound"
 msgstr "no hay límite izquierdo"
 
 # ligature...?
-#: ligature-engraver.cc:184
+#: ligature-engraver.cc:189
 msgid "unterminated ligature"
 msgstr "ligadura sin terminar"
 
-#: ligature-engraver.cc:211
+#: ligature-engraver.cc:216
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "se ignora el silencio: la ligadura no puede contener silencios"
 
-#: ligature-engraver.cc:212
+#: ligature-engraver.cc:217
 msgid "ligature was started here"
 msgstr "la ligadura comenzó aquí"
 
@@ -2129,34 +2164,34 @@ msgstr "la ligadura comenzó aquí"
 msgid "(load path: `%s')"
 msgstr "(ruta de carga: «%s»)"
 
-#: lily-guile.cc:416
+#: lily-guile.cc:412
 #, c-format
 msgid "cannot find property type-check for `%s' (%s)."
 msgstr "no se encuentra la comprobación de tipo de propiedad para «%s» (%s)."
 
-#: lily-guile.cc:419
+#: lily-guile.cc:415
 msgid "perhaps a typing error?"
 msgstr "¿quizá es un error de tecleo?"
 
-#: lily-guile.cc:426
-msgid "doing assignment anyway"
-msgstr "se hace la asignación de todas formas"
+#: lily-guile.cc:422
+msgid "skipping assignment"
+msgstr "se salta la asignación"
 
-#: lily-guile.cc:438
+#: lily-guile.cc:442
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "ha fallado la comprobación de tipo para «%s»; el valor «%s» debe ser del tipo «%s»"
 
-#: lily-lexer.cc:255
+#: lily-lexer.cc:249
 msgid "include files are not allowed in safe mode"
 msgstr "no se permiten los archivos de inclusión en el modo seguro"
 
-#: lily-lexer.cc:282
+#: lily-lexer.cc:276
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "el nombre del identificativo es una palabra clave: «%s»"
 
-#: lily-lexer.cc:303 lily-lexer.cc:316
+#: lily-lexer.cc:297 lily-lexer.cc:310
 #, c-format
 msgid "%s:EOF"
 msgstr "%s:EOF"
@@ -2181,21 +2216,22 @@ msgstr "no se encuentra el archivo de inicio: «%s»"
 msgid "Processing `%s'"
 msgstr "Procesando «%s»"
 
-#: lily-parser-scheme.cc:208
+#: lily-parser-scheme.cc:209
 msgid "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parser-parse-string sólo es válido con un analizador nuevo.  Use en su lugar ly:parser-include-string."
 
-#: lily-parser-scheme.cc:239
+#: lily-parser-scheme.cc:240
 msgid "ly:parse-string-expression is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parse-string-expression sólo es válido con un analizador nuevo.  Use en su lugar ly:parser-include-string."
 
-#: lily-parser.cc:109
+#: lily-parser.cc:107
 msgid "Parsing..."
 msgstr "Analizando..."
 
-#: line-spanner.cc:373
-msgid "Line spanner's left point is to the right of its right point."
-msgstr "El extremo izquierdo de la línea extensa está a la derecha del extremo derecho."
+#: lookup.cc:181
+#, c-format
+msgid "Not drawing a box with negative dimension, %.2f by %.2f."
+msgstr "No se dibuja el rectángulo con dimensiones negativas, %.2f por %.2f."
 
 #: lyric-combine-music-iterator.cc:199
 msgid "argument of \\lyricsto should contain Lyrics context"
@@ -2210,7 +2246,7 @@ msgstr "no se encuentra la Voz «%s»"
 msgid "Lyric syllable does not have note.  Use \\lyricsto or associatedVoice."
 msgstr "La sílaba de la letra no tiene nota. Utilice \\lyricsto o associatedVoice."
 
-#: main.cc:101
+#: main.cc:104
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -2223,7 +2259,7 @@ msgstr ""
 "él bajo ciertas condiciones. Invóquelo como `%s --warranty' para obtener\n"
 "más información.\n"
 
-#: main.cc:107
+#: main.cc:110
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License as \n"
@@ -2271,11 +2307,11 @@ msgstr ""
 "escriba a la Free Software Foundation, Inc.,\n"
 "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:141
+#: main.cc:148
 msgid "SYM[=VAL]"
 msgstr "SÍMBOLO[=VALOR]"
 
-#: main.cc:142
+#: main.cc:149
 msgid ""
 "set Scheme option SYM to VAL (default: #t).\n"
 "Use -dhelp for help."
@@ -2283,41 +2319,41 @@ msgstr ""
 "establecer la opción de Scheme SÍMBOLO a VALOR (por omisión: #t).\n"
 "Use -dhelp para obtener ayuda."
 
-#: main.cc:146
+#: main.cc:153
 msgid "EXPR"
 msgstr "EXPRESIÓN"
 
-#: main.cc:146
+#: main.cc:153
 msgid "evaluate scheme code"
 msgstr "evaluar código de Scheme"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:149
+#: main.cc:156
 msgid "FORMATs"
 msgstr "FORMATOs"
 
-#: main.cc:149
+#: main.cc:156
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr "volcar FORMATO,...  También como opciones separadas:"
 
-#: main.cc:150
+#: main.cc:157
 msgid "generate PDF (default)"
 msgstr "generar un PDF (predeterminado)"
 
-#: main.cc:151
+#: main.cc:158
 msgid "generate PNG"
 msgstr "generar un PNG"
 
-#: main.cc:152
+#: main.cc:159
 msgid "generate PostScript"
 msgstr "generar un PostScript"
 
-#: main.cc:155
+#: main.cc:162
 msgid "FIELD"
 msgstr "CAMPO"
 
-#: main.cc:155
+#: main.cc:162
 msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
@@ -2325,19 +2361,19 @@ msgstr ""
 "volcar el campo de cabecera CAMPO a un archivo\n"
 "llamado NOMBRE_BASE.CAMPO"
 
-#: main.cc:158
+#: main.cc:165
 msgid "add DIR to search path"
 msgstr "añadir DIRECTORIO a la ruta de búsqueda"
 
-#: main.cc:159
+#: main.cc:166
 msgid "use FILE as init file"
 msgstr "usar ARCHIVO como archivo de inicialización"
 
-#: main.cc:162
+#: main.cc:169
 msgid "USER, GROUP, JAIL, DIR"
 msgstr "USUARIO, GRUPO, JAULA, DIRECTORIO"
 
-#: main.cc:162
+#: main.cc:169
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
@@ -2345,7 +2381,7 @@ msgstr ""
 "chroot a JAULA, convertirse en USUARIO:GRUPO\n"
 "y cd al DIRECTORIO"
 
-#: main.cc:167
+#: main.cc:174
 msgid ""
 "print log messages according to LOGLEVEL.  Possible values are:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
@@ -2355,24 +2391,24 @@ msgstr ""
 "PROGRESS (mostrar avance), INFO (información; predeterminado)\n"
 "y DEBUG (depuración)."
 
-#: main.cc:171
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
 msgstr "escribir la salida en el ARCHIVO (se añadirá el sufijo)"
 
-#: main.cc:172
+#: main.cc:179
 msgid "relocate using directory of lilypond program"
 msgstr "relocalizar utilizando el directorio del programa lilypond"
 
-#: main.cc:173
+#: main.cc:180
 msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
 msgstr "sin información del avance; sólo mensajes de error (equivale a loglevel=ERROR)"
 
-#: main.cc:175
+#: main.cc:182
 msgid "be verbose (equivalent to loglevel=DEBUG)"
 msgstr "ser prolijo (equivale a loglevel=DEBUG)"
 
 #. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:242
+#: main.cc:261
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -2382,74 +2418,74 @@ msgstr ""
 "%s y otros."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:269
+#: main.cc:299
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Uso: %s [OPCIÓN]... ARCHIVO..."
 
-#: main.cc:271
+#: main.cc:301
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Componer tipográficamente la música y/o producir MIDI a partir de ARCHIVO."
 
-#: main.cc:273
+#: main.cc:303
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond produce una notación musical bella y hermosa."
 
-#: main.cc:275
+#: main.cc:305
 #, c-format
 msgid "For more information, see %s"
 msgstr "Para ver más información, consulte %s"
 
-#: main.cc:277
+#: main.cc:307
 msgid "Options:"
 msgstr "Opciones:"
 
-#: main.cc:331
+#: main.cc:374
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "se esperaban %d argumentos con la jaula, se han encontrado: %u"
 
-#: main.cc:345
+#: main.cc:388
 #, c-format
 msgid "no such user: %s"
 msgstr "no existe el usuario %s"
 
-#: main.cc:347
+#: main.cc:390
 #, c-format
 msgid "cannot get user id from user name: %s: %s"
 msgstr "no se puede obtener el identificador de usuario a partir del nombre: %s: %s"
 
-#: main.cc:362
+#: main.cc:405
 #, c-format
 msgid "no such group: %s"
 msgstr "no existe este grupo: %s"
 
-#: main.cc:364
+#: main.cc:407
 #, c-format
 msgid "cannot get group id from group name: %s: %s"
 msgstr "no se puede obtener el id de grupo a partir del nombre: %s: %s"
 
-#: main.cc:372
+#: main.cc:415
 #, c-format
 msgid "cannot chroot to: %s: %s"
 msgstr "no se puede hacer chroot a: %s: %s"
 
-#: main.cc:379
+#: main.cc:422
 #, c-format
 msgid "cannot change group id to: %d: %s"
 msgstr "no se puede cambiar el grupo del usuario a %d: %s"
 
-#: main.cc:385
+#: main.cc:428
 #, c-format
 msgid "cannot change user id to: %d: %s"
 msgstr "no se puede cambiar el identificador de usuario a %d: %s"
 
-#: main.cc:391
+#: main.cc:434
 #, c-format
 msgid "cannot change working directory to: %s: %s"
 msgstr "no se puede cambiar el directorio de trabajo a: %s: %s"
 
-#: main.cc:639
+#: main.cc:805
 #, c-format
 msgid "exception caught: %s"
 msgstr "se ha capturado una excepción: %s"
@@ -2463,31 +2499,31 @@ msgstr "rehearsalMark debe tener un valor entero"
 msgid "mark label must be a markup object"
 msgstr "la etiqueta de marcado debe ser un objeto de marcado"
 
-#: mensural-ligature-engraver.cc:96
+#: mensural-ligature-engraver.cc:100
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "ligadura con menos de dos cabezas; se salta"
 
-#: mensural-ligature-engraver.cc:123
+#: mensural-ligature-engraver.cc:127
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "no se puede determinar la altura de la primitiva de ligadura; se salta"
 
-#: mensural-ligature-engraver.cc:137
+#: mensural-ligature-engraver.cc:141
 msgid "single note ligature - skipping"
 msgstr "ligadura de una nota; se salta"
 
-#: mensural-ligature-engraver.cc:148
+#: mensural-ligature-engraver.cc:152
 msgid "prime interval within ligature -> skipping"
 msgstr "intervalo primo dentro de una ligadura; se salta"
 
-#: mensural-ligature-engraver.cc:159
+#: mensural-ligature-engraver.cc:163
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "ligadura mensural: la duración no es Mx, L, B ni S; se salta"
 
-#: mensural-ligature-engraver.cc:202
+#: mensural-ligature-engraver.cc:206
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr "la semibreve debe ir seguida por otra -> se salta"
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:216
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
@@ -2495,7 +2531,7 @@ msgstr ""
 "las semibreves sólo pueden aparecer al principio de una ligadura,\n"
 "y sólo puede haber dos o ninguna"
 
-#: mensural-ligature-engraver.cc:232
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -2507,25 +2543,30 @@ msgstr ""
 "la penúltima nota debe ser otra breve,\n"
 "o la ligadura debe ser LB o SSB"
 
-#: mensural-ligature-engraver.cc:387
+#: mensural-ligature-engraver.cc:396
 msgid "unexpected case fall-through"
 msgstr "opción de caso por defecto inesperada"
 
-#: midi-item.cc:89
+#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#, c-format
+msgid "ignoring out-of-range value change for MIDI property `%s'"
+msgstr "se ignora el cambio de valor fuera de rango para la propiedad MIDI «%s»"
+
+#: midi-item.cc:93
 #, c-format
 msgid "no such MIDI instrument: `%s'"
 msgstr "no existe este instrumento MIDI: «%s»"
 
-#: midi-item.cc:161
+#: midi-item.cc:179
 msgid "Time signature with more than 255 beats.  Truncating"
 msgstr "Indicación de compás con más de 255 partes.  Se recorta."
 
-#: midi-stream.cc:39
+#: midi-stream.cc:38
 #, c-format
 msgid "cannot open for write: %s: %s"
 msgstr "no se puede abrir el archivo en modo de escritura: %s: %s"
 
-#: midi-stream.cc:55
+#: midi-stream.cc:54
 #, c-format
 msgid "cannot write to file: `%s'"
 msgstr "no se puede escribir el archivo: «%s»"
@@ -2538,11 +2579,11 @@ msgstr "Calculando los saltos de línea..."
 msgid "Calculating page breaks..."
 msgstr "Calculando saltos de página..."
 
-#: multi-measure-rest.cc:138
+#: multi-measure-rest.cc:154
 msgid "usable-duration-logs must be a non-empty list.  Falling back to whole rests."
 msgstr "usable-duration-logs debe ser una lista no vacía.  Se usan por defecto silencios de redonda."
 
-#: multi-measure-rest.cc:328
+#: multi-measure-rest.cc:364
 msgid "Using naive multi measure rest spacing."
 msgstr "Utilizando espaciado ingenuo de silencios multicompás."
 
@@ -2560,20 +2601,6 @@ msgstr "(altura normalizada)"
 msgid "Transposing %s by %s makes alteration larger than double"
 msgstr "La transposición de %s en %s produce una alteración más que doble"
 
-#: new-dynamic-engraver.cc:168
-#, c-format
-msgid ""
-"unknown crescendo style: %s\n"
-"defaulting to hairpin."
-msgstr ""
-"estilo de crescendo desconocido: %s\n"
-"se toma regulador como predeterminado."
-
-#: new-dynamic-engraver.cc:233
-#, c-format
-msgid "unterminated %s"
-msgstr "%s sin terminar"
-
 #: new-fingering-engraver.cc:113
 msgid "cannot add text scripts to individual note heads"
 msgstr "no se pueden añadir guiones de texto a cabezas de nota individuales"
@@ -2586,7 +2613,7 @@ msgstr "no se ha encontrado ninguna ubicación válida para las digitaciones"
 msgid "placing below"
 msgstr "se coloca debajo"
 
-#: note-collision.cc:496
+#: note-collision.cc:497
 msgid "ignoring too many clashing note columns"
 msgstr "demasiadas columnas de notas que chocan entre sí; se ignoran"
 
@@ -2603,37 +2630,37 @@ msgstr "no se encuentran las cabezas de nota «%s» ni «%s»"
 msgid "NoteEvent without pitch"
 msgstr "NoteEvent sin altura"
 
-#: open-type-font.cc:44
+#: open-type-font.cc:45
 #, c-format
 msgid "cannot allocate %lu bytes"
 msgstr "no se peuden reservar %lu bytes"
 
-#: open-type-font.cc:48
+#: open-type-font.cc:49
 #, c-format
 msgid "cannot load font table: %s"
 msgstr "no se puede cargar la tabla de tipografías: %s"
 
-#: open-type-font.cc:53
+#: open-type-font.cc:54
 #, c-format
 msgid "FreeType error: %s"
 msgstr "error de FreeType: %s"
 
-#: open-type-font.cc:110
+#: open-type-font.cc:111
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "formato de tipografía %s no soportado"
 
-#: open-type-font.cc:112
+#: open-type-font.cc:113
 #, c-format
 msgid "error reading font file %s: %s"
 msgstr "error al leer la tipografía %s: %s"
 
-#: open-type-font.cc:187
+#: open-type-font.cc:188
 #, c-format
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr "error de Freetype en FT_Get_Glyph_Name (): %s"
 
-#: open-type-font.cc:318 pango-font.cc:189
+#: open-type-font.cc:336 pango-font.cc:256
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
 msgstr "error en FT_Get_Glyph_Name (): %s"
@@ -2643,35 +2670,35 @@ msgstr "error en FT_Get_Glyph_Name (): %s"
 msgid "Finding the ideal number of pages..."
 msgstr "Buscando el número de páginas ideal..."
 
-#: optimal-page-breaking.cc:85
+#: optimal-page-breaking.cc:94
 msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page"
 msgstr "no se pueden satisfacer systems-per-page y page-count al mismo tiempo, se ignora systems-per-page"
 
-#: optimal-page-breaking.cc:105
+#: optimal-page-breaking.cc:114
 msgid "Fitting music on 1 page..."
 msgstr "Disponiendo la música en una página..."
 
-#: optimal-page-breaking.cc:107
+#: optimal-page-breaking.cc:116
 #, c-format
 msgid "Fitting music on %d pages..."
 msgstr "Disponiendo la música en %d páginas..."
 
-#: optimal-page-breaking.cc:109
+#: optimal-page-breaking.cc:118
 #, c-format
 msgid "Fitting music on %d or %d pages..."
 msgstr "Disponiendo la música en %d o %d páginas..."
 
-#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:172
+#: optimal-page-breaking.cc:128 optimal-page-breaking.cc:181
 #, c-format
 msgid "trying %d systems"
 msgstr "probando %d sistemas"
 
-#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:200
+#: optimal-page-breaking.cc:147 optimal-page-breaking.cc:209
 #, c-format
 msgid "best score for this sys-count: %f"
 msgstr "mejor puntuación para este número de sistemas: %f"
 
-#: optimal-page-breaking.cc:207 page-turn-page-breaking.cc:248
+#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248
 #: paper-score.cc:162
 msgid "Drawing systems..."
 msgstr "Dibujando los sistemas..."
@@ -2692,24 +2719,24 @@ msgstr "se ignoran min-systems-per-page y max-systems-per-page debido a que se f
 msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values"
 msgstr "min-systems-per-page es mayor que max-systems-per-page, se ignoran los dos valores"
 
-#: page-layout-problem.cc:403
+#: page-layout-problem.cc:402
 msgid "A page layout problem has been initiated that cannot accommodate footnotes."
 msgstr "Ha tenido lugar problema de disposición de página que no puede acomodar notas al pie."
 
-#: page-layout-problem.cc:732
+#: page-layout-problem.cc:731
 msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed"
 msgstr "la música no cabe en la página: se ha solicitado la no justificación del espaciado, pero la página ha resultado comprimida"
 
-#: page-layout-problem.cc:735
+#: page-layout-problem.cc:734
 #, c-format
 msgid "cannot fit music on page: overflow is %f"
 msgstr "la música no cabe en la página: el exceso es %f"
 
-#: page-layout-problem.cc:737
+#: page-layout-problem.cc:736
 msgid "compressing music to fit"
 msgstr "comprimiendo la música para que quepa"
 
-#: page-layout-problem.cc:1197
+#: page-layout-problem.cc:1199
 msgid "staff-affinities should only decrease"
 msgstr "staff-affinities solo debe disminuir"
 
@@ -2752,7 +2779,12 @@ msgstr "número total de \tpáginas: %d"
 msgid "\tprevious break: %d"
 msgstr "\tsalto anterior: %d"
 
-#: pango-font.cc:205
+#: pango-font.cc:245
+#, c-format
+msgid "no glyph for character U+%0X in font `%s'"
+msgstr "no hay ningún glifo para el carácter U+%0X dentro de la tipografía `%s'"
+
+#: pango-font.cc:272
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
@@ -2761,12 +2793,12 @@ msgstr ""
 "El glifo no tiene nombre, pero la tipografía soporta nombres de glifo.\n"
 "Se salta el glifo U+%0X, archivo %s"
 
-#: pango-font.cc:242
+#: pango-font.cc:322
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "no hay un nombre de tipografía PostScript para «%s»"
 
-#: pango-font.cc:291
+#: pango-font.cc:372
 msgid "FreeType face has no PostScript font name"
 msgstr "El tipo FreeType no tiene un nombre de tipografía PostScript"
 
@@ -2780,7 +2812,7 @@ msgstr "la opción de programa -dprint-pages no está contemplada por el backend
 msgid "program option -dpreview not supported by backend `%s'"
 msgstr "la opción de programa -dpreview no está contemplada por el backend `%s'"
 
-#: paper-column-engraver.cc:261
+#: paper-column-engraver.cc:263
 msgid "forced break was overridden by some other event, should you be using bar checks?"
 msgstr "el salto forzado ha sido sobreestablecido por algún otro evento, ¿quizá deba usar comprobaciones de compás?"
 
@@ -2806,7 +2838,7 @@ msgstr "GUILE ha señalado un error para la expresión que comienza aquí"
 msgid "trying to use \\partial after the start of a piece"
 msgstr "intento de utilizar \\partial después del inicio de la pieza"
 
-#: pdf-scheme.cc:50
+#: pdf-scheme.cc:65
 #, c-format
 msgid "Conversion of string `%s' to UTF-16be failed: %s"
 msgstr "La conversión de la cadena `%s' a UTF-16be ha fallado: %s"
@@ -2824,25 +2856,6 @@ msgstr "Pista..."
 msgid "MIDI output to `%s'..."
 msgstr "Salida MIDI hacia «%s»..."
 
-#: phrasing-slur-engraver.cc:101 slur-engraver.cc:102
-#, c-format
-msgid "direction of %s invalid: %d"
-msgstr "dirección inválida de %s: %d"
-
-#: phrasing-slur-engraver.cc:175
-msgid "unterminated phrasing slur"
-msgstr "ligadura de fraseo sin terminar"
-
-#: phrasing-slur-engraver.cc:210
-msgid "cannot end phrasing slur"
-msgstr "no se puede terminar la ligadura de fraseo"
-
-#. We already have an old slur, so give a warning
-#. and completely ignore the new slur.
-#: phrasing-slur-engraver.cc:230
-msgid "already have phrasing slur"
-msgstr "ya tiene una ligadura de fraseo"
-
 #: piano-pedal-engraver.cc:279
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
@@ -2859,12 +2872,12 @@ msgstr "no se encuentra el comienzo del pedal de piano «%s»"
 msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "no se encuentra el comienzo del corchete de pedal de piano «%s»"
 
-#: program-option-scheme.cc:235
+#: program-option-scheme.cc:223
 #, c-format
 msgid "no such internal option: %s"
 msgstr "no existe la opción interna %s"
 
-#: property-iterator.cc:93
+#: property-iterator.cc:100
 #, c-format
 msgid "not a grob name, `%s'"
 msgstr "no es un nombre de objeto gráfico: «%s»"
@@ -2911,40 +2924,40 @@ msgstr "Relocalización: en la compilación datadir=%s, el nuevo datadir=%s"
 msgid "Relocation: framework_prefix=%s"
 msgstr "Relocalización: framework_prefix=%s"
 
-#: relocate.cc:186
+#: relocate.cc:172
 #, c-format
 msgid "Relocation: is absolute: argv0=%s\n"
 msgstr "Relocalización: es absoluto: argv0=%s\n"
 
-#: relocate.cc:192
+#: relocate.cc:178
 #, c-format
-msgid "Relocation: from cwd: argv0=%s\n"
+msgid "Relocation : from cwd: argv0=%s\n"
 msgstr "Relocalización: desde cwd: argv0=%s\n"
 
-#: relocate.cc:208
+#: relocate.cc:194
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 msgstr ""
 "Relocalización: desde PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 
-#: relocate.cc:235
+#: relocate.cc:220
 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
 msgstr "LILYPONDPREFIX está obsoleto, utilice LILYPOND_DATADIR"
 
-#: relocate.cc:360
+#: relocate.cc:345
 #, c-format
 msgid "Relocation file: %s"
 msgstr "Archivo de relocalización: %s"
 
-#: relocate.cc:364 source-file.cc:65
+#: relocate.cc:349 source-file.cc:65
 #, c-format
 msgid "cannot open file: `%s'"
 msgstr "no se puede abrir el archivo: «%s»"
 
-#: relocate.cc:394
+#: relocate.cc:379
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr "instrucción de relocalización %s desconocida"
@@ -2953,15 +2966,15 @@ msgstr "instrucción de relocalización %s desconocida"
 msgid "rhythmic head is not part of a rhythmic column"
 msgstr "la cabeza rítmica no es parte de una columna rítmica"
 
-#: rest-collision.cc:146
+#: rest-collision.cc:150
 msgid "cannot resolve rest collision: rest direction not set"
 msgstr "no se puede resolver la colisión de los silencios: la dirección de los silencios no se ha establecido"
 
-#: rest-collision.cc:157 rest-collision.cc:266
+#: rest-collision.cc:161 rest-collision.cc:270
 msgid "too many colliding rests"
 msgstr "demasiados silencios en colisión"
 
-#: rest.cc:192
+#: rest.cc:240
 #, c-format
 msgid "rest `%s' not found"
 msgstr "no se ha encontrado el silencio «%s»"
@@ -2997,33 +3010,41 @@ msgid "errors found, ignoring music expression"
 msgstr "se han encontrado errores, se ignora la expresión musical"
 
 #. FIXME:
-#: script-engraver.cc:113
+#: script-engraver.cc:115
 msgid "do not know how to interpret articulation:"
 msgstr "no sabemos cómo interpretar la articulación:"
 
-#: script-engraver.cc:114
+#: script-engraver.cc:116
 msgid " scheme encoding: "
 msgstr " codificación de Scheme: "
 
-#: skyline-pair.cc:131
+#: skyline-pair.cc:160
 msgid "direction must not be CENTER in ly:skyline-pair::skyline"
 msgstr "la dirección no puede ser CENTER en ly:skyline-pair::skyline"
 
-#: slur-engraver.cc:176
-msgid "unterminated slur"
-msgstr "ligadura de expresión sin terminar"
-
-#: slur-engraver.cc:211
-msgid "cannot end slur"
-msgstr "no se puede terminar la ligadura de expresión"
+#: slur-proto-engraver.cc:51
+#, c-format
+msgid "direction of %s invalid: %d"
+msgstr "dirección inválida de %s: %d"
 
 #. We already have an old slur, so give a warning
 #. and completely ignore the new slur.
-#: slur-engraver.cc:231
-msgid "already have slur"
-msgstr "ya tiene una ligadura de expresión"
+#: slur-proto-engraver.cc:166
+#, c-format
+msgid "already have %s"
+msgstr "ya tiene una %s"
+
+#: slur-proto-engraver.cc:183
+#, c-format
+msgid "%s without a cause"
+msgstr "%s sin causa"
+
+#: slur-proto-engraver.cc:244
+#, c-format
+msgid "cannot end %s"
+msgstr "no se puede terminar %s"
 
-#: slur.cc:430
+#: slur.cc:434
 #, c-format
 msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
 msgstr "Se ignora el objeto gráfico para la ligadura: %s. ¿No está establecido avoid-slur?"
@@ -3033,11 +3054,11 @@ msgstr "Se ignora el objeto gráfico para la ligadura: %s. ¿No está establecid
 msgid "expected to read %d characters, got %d"
 msgstr "se esperaba leer %d caracteres, se han obtenido %d"
 
-#: staff-performer.cc:275
+#: staff-performer.cc:301
 msgid "MIDI channel wrapped around"
 msgstr "ha dado la vuelta el número de canal MIDI"
 
-#: staff-performer.cc:276
+#: staff-performer.cc:302
 msgid "remapping modulo 16"
 msgstr "se reasigna módulo 16"
 
@@ -3058,12 +3079,12 @@ msgstr "quizá la entrada debiera especificar voces polifónicas"
 msgid "weird stem size, check for narrow beams"
 msgstr "tamaño de plica extraño, compruebe que no haya barras estrechas"
 
-#: system.cc:200
+#: system.cc:201
 #, c-format
 msgid "Element count %d"
 msgstr "Número total de elementos %d"
 
-#: system.cc:480
+#: system.cc:512
 #, c-format
 msgid "Grob count %d"
 msgstr "Número de objetos gráficos: %d"
@@ -3092,11 +3113,11 @@ msgstr "ya hay un trazador de texto"
 msgid "unterminated text spanner"
 msgstr "trazador de texto sin terminar"
 
-#: tie-engraver.cc:117
+#: tie-engraver.cc:119
 msgid "unterminated tie"
 msgstr "ligadura de unión sin terminar"
 
-#: tie-engraver.cc:348
+#: tie-engraver.cc:353
 msgid "lonely tie"
 msgstr "ligadura de unión solitaria"
 
@@ -3112,7 +3133,7 @@ msgstr "se ha encontrado una indicación extraña de compás: %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:122
+#: time-signature.cc:89
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr "no se encuentra el símbolo de compás «%s»; se vuelve al estilo numerado"
@@ -3181,6 +3202,10 @@ msgstr "la altura flexa-height no está definida; se supone que es 0"
 msgid "ascending vaticana style flexa"
 msgstr "flexa ascendente de estilo vaticana"
 
+#: vertical-align-engraver.cc:95
+msgid "Ignoring Vertical_align_engraver in VerticalAxisGroup"
+msgstr "Se ignora el grabador Vertical_align_engraver dentro de VerticalAxisGroup"
+
 #. fixme: be more verbose.
 #: volta-engraver.cc:110
 msgid "cannot end volta spanner"
@@ -3199,69 +3224,124 @@ msgstr "ya hay un trazador finalizado"
 msgid "giving up"
 msgstr "abandonando"
 
-#: parser.yy:161 parser.yy:175
+#: parser.yy:158 parser.yy:172
 msgid "Too much lookahead"
 msgstr "Lectura previa por delante excesiva"
 
-#: parser.yy:835 parser.yy:1284
+#: parser.yy:441 parser.yy:752 parser.yy:818
+msgid "bad expression type"
+msgstr "tipo de expresión incorrecto"
+
+#: parser.yy:650 parser.yy:1159
 msgid "not a context mod"
 msgstr "no es un modificador de contexto"
 
-#: parser.yy:1027
+#: parser.yy:853
+msgid "score expected"
+msgstr "se esperaba «score»"
+
+#: parser.yy:869
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "no se puede usar \\paper dentro de \\score, utilice \\layout en su lugar"
 
-#: parser.yy:1051
+#: parser.yy:893
 msgid "need \\paper for paper block"
 msgstr "es necesario \\paper para el bloque 'paper'"
 
-#: parser.yy:1204
+#: parser.yy:1033 parser.yy:1055
+msgid "unexpected post-event"
+msgstr "post-evento inseperado"
+
+#: parser.yy:1063
 msgid "Ignoring non-music expression"
 msgstr "Se ignora la expresión no musical"
 
-#: parser.yy:2044
+#: parser.yy:1075 parser.yy:2493
+msgid "music expected"
+msgstr "se esperaba algo de música"
+
+#: parser.yy:1370
+msgid "not a symbol"
+msgstr "no es un símbolo"
+
+#: parser.yy:2182 parser.yy:2296 parser.yy:2309 parser.yy:2318
+msgid "bad grob property path"
+msgstr "la ruta de la propiedad del grob no es válida"
+
+#: parser.yy:2276
 msgid "only \\consists and \\remove take non-string argument."
 msgstr "solo \\consists y \\remove admiten un argumento no de cadena."
 
-#: parser.yy:2057
-msgid "Grob name should be alphanumeric"
-msgstr "El nombre del objeto gráfico ha de ser alfanumérico"
+#: parser.yy:2337
+msgid "bad context property path"
+msgstr "la ruta de la propiedad de contexto no es válida"
+
+#: parser.yy:2438
+msgid "simple string expected"
+msgstr "se esperaba una cadena sencilla de caracteres"
 
-#: parser.yy:2261
+#: parser.yy:2456
+msgid "symbol expected"
+msgstr "se esperaba un símbolo"
+
+#: parser.yy:2611
 msgid "not a rhythmic event"
 msgstr "no es un evento rítmico"
 
-#: parser.yy:2357 parser.yy:2362
+#: parser.yy:2685
+msgid "post-event expected"
+msgstr "se esperaba un post-evento"
+
+#: parser.yy:2694 parser.yy:2699
 msgid "have to be in Lyric mode for lyrics"
 msgstr "para la letra se debe estar en el modo Lyric"
 
-#: parser.yy:2477
+#: parser.yy:2767
 msgid "expecting string as script definition"
 msgstr "se espera una cadena como definición del guión"
 
-#: parser.yy:2637 parser.yy:2681
-#, c-format
-msgid "not a duration: %d"
-msgstr "no es una duración: %d"
+#: parser.yy:2875
+msgid "not an articulation"
+msgstr "no es una articulación"
+
+#: parser.yy:2947 parser.yy:2990
+msgid "not a duration"
+msgstr "no es una duración"
+
+#: parser.yy:3007
+msgid "bass number expected"
+msgstr "se esperaba un número de bajo"
 
-#: parser.yy:2800
+#: parser.yy:3106
 msgid "have to be in Note mode for notes"
 msgstr "para las notas se debe estar en el modo Note"
 
-#: parser.yy:2855
+#: parser.yy:3166
 msgid "have to be in Chord mode for chords"
 msgstr "para los acordes se debe estar en el modo Chord"
 
-#: parser.yy:3115
+#: parser.yy:3181
+msgid "markup outside of text script or \\lyricmode"
+msgstr "elemento de marcado fuera de elemento de texto o \\lyricmode"
+
+#: parser.yy:3186
+msgid "unrecognized string, not in text script or \\lyricmode"
+msgstr "cadena no reconocida, no está dentro de un elemento de texto o \\lyricmode"
+
+#: parser.yy:3347 parser.yy:3356
+msgid "not an unsigned integer"
+msgstr "no es un entero sin signo"
+
+#: parser.yy:3424
 msgid "not a markup"
 msgstr "no es una instrucción de marcado"
 
 # stray?
-#: lexer.ll:218
+#: lexer.ll:224
 msgid "stray UTF-8 BOM encountered"
 msgstr "se ha encontrado una marca BOM de UTF-8 extraña"
 
-#: lexer.ll:221
+#: lexer.ll:227
 msgid "Skipping UTF-8 BOM"
 msgstr "Se salta el BOM de UTF-8"
 
@@ -3282,60 +3362,64 @@ msgstr "se esperaba una cadena entre comillas después de \\sourcefilename"
 msgid "integer expected after \\sourcefileline"
 msgstr "se esperaba un entero después de \\sourcefileline"
 
-#: lexer.ll:327
+#: lexer.ll:331
 msgid "\\maininput not allowed outside init files"
 msgstr "no se permite \\maininput fuera de los archivos de inicio"
 
-#: lexer.ll:351
+#: lexer.ll:355
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "identificativo equivocado o no definido: «%s»"
 
-#: lexer.ll:377
+#: lexer.ll:381
 msgid "string expected after \\include"
 msgstr "se esperaba una cadena después de \\include"
 
-#. backup rule
-#: lexer.ll:387
+#: lexer.ll:391
 msgid "end quote missing"
 msgstr "faltan las comillas de cierre"
 
-#: lexer.ll:558
-msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Se ha encontrado una llave al final de la letra. ¿Olvidó un espacio?"
-
-#: lexer.ll:672
-msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Se ha encontrado una llave al final del marcado, ¿Olvidó un espacio?"
-
-#: lexer.ll:684
+#: lexer.ll:743
 msgid "EOF found inside a comment"
 msgstr "se ha encontrado EOF (fin de archivo) dentro de un comentario"
 
-#: lexer.ll:782
+#: lexer.ll:748
+msgid "EOF found inside string"
+msgstr "se ha encontrado EOF (fin de archivo) dentro de una cadena de caracteres"
+
+#: lexer.ll:763
+msgid "Unfinished main input"
+msgstr "el código principal de entrada no ha finalizado"
+
+#: lexer.ll:834
 #, c-format
 msgid "invalid character: `%s'"
 msgstr "carácter no válido: «%s»"
 
-#: lexer.ll:903 lexer.ll:904
+#: lexer.ll:963
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "cadena de escape desconocida: `\\%s'"
 
-#: lexer.ll:1186 lexer.ll:1187
+#: lexer.ll:983
+#, c-format
+msgid "undefined character or shorthand: %s"
+msgstr "carácter o combinación abreviada no definida: %s"
+
+#: lexer.ll:1275
 msgid "non-UTF-8 input"
 msgstr "la entrada no es UTF-8"
 
-#: lexer.ll:1230 lexer.ll:1231
+#: lexer.ll:1319
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr "archivo demasiado antiguo: %s (el más antiguo que se puede tratar es: %s)"
 
-#: lexer.ll:1231 lexer.ll:1232
+#: lexer.ll:1320
 msgid "consider updating the input with the convert-ly script"
 msgstr "considere la actualización de la entrada mediante el guión (script) convert-ly"
 
-#: lexer.ll:1237 lexer.ll:1238
+#: lexer.ll:1326
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr "el programa es demasiado antiguo: %s (el archivo necesita: %s)"
@@ -3350,28 +3434,53 @@ msgstr "Invocando «~a»..."
 msgid "`~a' failed (~a)\n"
 msgstr "«~a» ha fallado (~a)\n"
 
-#: backend-library.scm:90
+#: backend-library.scm:93
 #, scheme-format
 msgid "Converting to `~a'...\n"
 msgstr "Convirtiendo en «~a»...\n"
 
 #. Do not try to guess the name of the png file,
 #. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:99
+#: backend-library.scm:102
 #, scheme-format
 msgid "Converting to ~a..."
 msgstr "Convirtiendo en ~a..."
 
-#: backend-library.scm:137
+#: backend-library.scm:140
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Escribiendo el campo de encabezamiento «~a» en «~a»..."
 
-#: backend-library.scm:187
+#: backend-library.scm:189
 #, scheme-format
 msgid "missing stencil expression `~S'"
 msgstr "falta la expresión del sello `~S'"
 
+#: bar-line.scm:133
+#, scheme-format
+msgid "Bar glyph ~a not known. Ignoring."
+msgstr "El glifo de barra ~a es desconocido. Se ignora."
+
+#: bar-line.scm:161
+#, scheme-format
+msgid "Annotation '~a' is allowed in the first argument of a bar line definition only."
+msgstr "La anotación '~a' solo se permite en el primer argumento de una definición de línea divisoria."
+
+#: bar-line.scm:169
+#, scheme-format
+msgid "Replacement '~a' is allowed in the last argument of a bar line definition only."
+msgstr "La sustitución '~a' solo se permite en el último argumento de una definición de línea divisoria."
+
+#: bar-line.scm:230
+#, scheme-format
+msgid "add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character."
+msgstr "add-bar-glyph-print-procedure: el glifo '~a' tiene que ser un único carácter ASCII."
+
+#: bar-line.scm:795
+#, scheme-format
+msgid "No span bar glyph defined for bar glyph '~a'; ignoring."
+msgstr "No hay ningún glifo de barra conectora definido para el glifo de barra '~a'; se ignora."
+
 #: chord-entry.scm:52
 #, scheme-format
 msgid "Spurious garbage following chord: ~A"
@@ -3383,64 +3492,84 @@ msgstr "Basurilla espúrea después del acorde: ~A"
 msgid "symbol ~S redefined"
 msgstr "redefinido el símbolo ~S"
 
-#: define-event-classes.scm:67
+#: define-event-classes.scm:73
 #, scheme-format
 msgid "unknown parent class `~a'"
 msgstr "Clase del padre «~a» desconocida"
 
-#: define-markup-commands.scm:887
+#: define-event-classes.scm:107
+#, scheme-format
+msgid "Cannot redefine event class `~S'"
+msgstr "No se puede redefinir la clase de evento «~S»"
+
+#: define-event-classes.scm:109
+#, scheme-format
+msgid "Undefined parent event class `~S'"
+msgstr "Clase de evento del padre «~S» no definida"
+
+#: define-markup-commands.scm:1083
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr "no se ha encontrado ningún sistema en el marcado \\score, ¿tiene un bloque \\layout?"
 
-#: define-markup-commands.scm:2614
+#: define-markup-commands.scm:2847
 #, scheme-format
 msgid "Cannot find glyph ~a"
 msgstr "No se encuentra el glifo ~a"
 
-#: define-markup-commands.scm:3040
+#: define-markup-commands.scm:3273
 #, scheme-format
 msgid "no brace found for point size ~S "
 msgstr "no se ha encontrado ninguna llave para el tamaño en puntos ~S "
 
-#: define-markup-commands.scm:3041
+#: define-markup-commands.scm:3274
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr "fijando al valor predeterminado ~S pt"
 
-#: define-markup-commands.scm:3194
+#: define-markup-commands.scm:3526
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "no es una cadena válida de duración: ~a"
 
-#: define-music-types.scm:765
+#: define-markup-commands.scm:3737
+#, scheme-format
+msgid "not a valid duration string: ~a - ignoring"
+msgstr "no es una cadena válida de duración: ~a. Se ignora."
+
+#: define-music-types.scm:792
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr "se esperaba un símbolo: ~S"
 
-#: define-music-types.scm:768
+#: define-music-types.scm:795
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr "no se encuentra el objeto musical ~S"
 
-#: define-music-types.scm:787
+#: define-music-types.scm:815
+#, scheme-format
+msgid "bad make-music argument: ~S"
+msgstr "argumento de make-music erróneo: ~S"
+
+#: define-music-types.scm:827
 #, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "tipo de repetición «~S» desconocido"
 
-#: define-music-types.scm:788
+#: define-music-types.scm:828
 msgid "See define-music-types.scm for supported repeats"
 msgstr "Consulte el archivo define-music-types.scm para ver los tipos de repetición soportados"
 
-#: define-note-names.scm:962
+#: define-note-names.scm:972
 msgid "Select note names language."
 msgstr "Seleccione el idioma para los nombres de las notas."
 
-#: define-note-names.scm:968
+#: define-note-names.scm:978
 #, scheme-format
 msgid "Using `~a' note names..."
 msgstr "Usando los nombres de notas de `~a' ..."
 
-#: define-note-names.scm:971
+#: define-note-names.scm:981
 #, scheme-format
 msgid "Could not find language `~a'.  Ignoring."
 msgstr "No se encuentra el idioma `~a'.  Se ignora."
@@ -3480,7 +3609,7 @@ msgstr "no se encuentra la descripción de la propiedad `~S' (~S)"
 msgid "cannot find description for property ~S (~S)"
 msgstr "no se encuentra la descripción de la propiedad ~S (~S)"
 
-#: flag-styles.scm:151
+#: flag-styles.scm:162
 #, scheme-format
 msgid "flag stroke `~a' or `~a' not found"
 msgstr "no se encuentra el impacto `~a' o `~a' de indicador"
@@ -3510,7 +3639,7 @@ msgstr "no sabemos cómo empotrar ~S=~S"
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr "no sabemos cómo empotrar la tipografía ~s ~s ~s"
 
-#: framework-ps.scm:686
+#: framework-ps.scm:687
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
@@ -3558,20 +3687,20 @@ msgstr "Error en la cuantización de la barra.  Se esperaba (~S,~S), se ha encon
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr "Error en la cuantización de la barra.  Se esperaba ~S 0, se ha encontrado ~S."
 
-#: lily-library.scm:299
+#: lily-library.scm:333
 msgid "Music unsuitable for context-mod"
 msgstr "Música no apta para context-mod"
 
-#: lily-library.scm:349
+#: lily-library.scm:388
 #, scheme-format
 msgid "Cannot find context-def \\~a"
 msgstr "No se encuentra la definición de contexto \\~a"
 
-#: lily-library.scm:365
+#: lily-library.scm:404
 msgid "Music unsuitable for output-def"
 msgstr "Música no apta para output-def"
 
-#: lily-library.scm:892
+#: lily-library.scm:884
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
 "which produces the closest match to @var{target-val} if\n"
@@ -3581,47 +3710,51 @@ msgstr ""
 "que produce la correspondencia más cercana a @var{target-val} cuando\n"
 "se aplica a la función @var{getter}."
 
-#: lily-library.scm:966
+#: lily-library.scm:955
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr "unidad desconocida: ~S "
 
-#: lily-library.scm:991
+#: lily-library.scm:980
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr "no se ha encontrado ninguna instrucción \\version, escriba~apara disponer de compatibilidad en el futuro"
 
-#: lily-library.scm:997
-msgid "old relative compatibility not used"
-msgstr "no se ha usado la compatibilidad con el modo relativo antiguo"
+#: lily.scm:75
+msgid "call-after-session used after session start"
+msgstr "call-after-session utilizado después del comienzo de la sesión"
 
-#: lily.scm:234
+#: lily.scm:93
+msgid "define-session used after session start"
+msgstr "define-session utilizado después del comienzo de la sesión"
+
+#: lily.scm:393
 msgid "Using (ice-9 curried-definitions) module\n"
 msgstr "Utilizando el módulo (ice-9 curried-definitions)\n"
 
-#: lily.scm:237
+#: lily.scm:396
 msgid "Guile 1.8\n"
 msgstr "Guile 1.8\n"
 
-#: lily.scm:297
+#: lily.scm:455
 #, scheme-format
 msgid "cannot find: ~A"
 msgstr "no se encuentra: ~A"
 
-#: lily.scm:708
+#: lily.scm:878
 msgid "Success: compilation successfully completed"
 msgstr "Enhorabuena. La compilación se ha completado satisfactoriamente."
 
-#: lily.scm:709
+#: lily.scm:879
 msgid "Compilation completed with warnings or errors"
 msgstr "Compilación completada con advertencias o errores"
 
-#: lily.scm:771
+#: lily.scm:940
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr "la tarea ~a ha terminado con la señal: ~a"
 
-#: lily.scm:774
+#: lily.scm:943
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
@@ -3630,17 +3763,17 @@ msgstr ""
 "archivo de registro ~a (salida ~a):\n"
 "~a"
 
-#: lily.scm:796 lily.scm:882
+#: lily.scm:965 lily.scm:1054
 #, scheme-format
 msgid "failed files: ~S"
 msgstr "archivos que han fallado: ~S"
 
-#: lily.scm:873
+#: lily.scm:1045
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Redirigiendo la salida hacia ~a..."
 
-#: lily.scm:892 ps-to-png.scm:66
+#: lily.scm:1064 ps-to-png.scm:66
 #, scheme-format
 msgid "Invoking `~a'...\n"
 msgstr "Invocando «~a»...\n"
@@ -3655,7 +3788,7 @@ msgstr "la función ~a no puede devolver ~a"
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "tipo equivocado para el argumento ~a.  Se esperaba ~a, se encontró ~s"
 
-#: ly-syntax-constructors.scm:188
+#: ly-syntax-constructors.scm:199
 #, scheme-format
 msgid "Invalid property operation ~a"
 msgstr "Operación de propiedad ~a inválida"
@@ -3708,63 +3841,63 @@ msgstr "Hay más alternativas que repeticiones.  Se recortan las alternativas ex
 msgid "invalid tremolo repeat count: ~a"
 msgstr "número de repeticiones no válido para el trémolo: ~a"
 
-#: music-functions.scm:689
+#: music-functions.scm:459
+#, scheme-format
+msgid "bad grob property path ~a"
+msgstr "la ruta de propiedad ~a del grob no es válida"
+
+#: music-functions.scm:753
 msgid "Bad chord repetition"
 msgstr "repetición de acorde errónea"
 
-#: music-functions.scm:724
+#: music-functions.scm:788
 #, scheme-format
 msgid "music expected: ~S"
 msgstr "se esperaba algo de música: ~S"
 
-#: music-functions.scm:1042
+#: music-functions.scm:1144
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr "no se encuentra la música citada: «~S»"
 
-#: music-functions.scm:1180
+#: music-functions.scm:1282
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr "Añadir @var{octave-shift} a la octava de @var{pitch}."
 
-#: music-functions.scm:1240
+#: music-functions.scm:1342
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr "Tipo de octavación desconocido: ~S "
 
-#: music-functions.scm:1241
+#: music-functions.scm:1343
 msgid "Defaulting to 'any-octave."
 msgstr "Fijando al valor predeterminado 'any-octave."
 
-#: music-functions.scm:1578
+#: music-functions.scm:1688
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "estilo de alteración ~S desconocido"
 
-#: output-ps.scm:277 output-svg.scm:524
+#: output-ps.scm:278 output-svg.scm:539
 #, scheme-format
 msgid "unknown line-cap-style: ~S"
 msgstr "estilo de extremo de línea line-cap-style desconocido: ~S"
 
-#: output-ps.scm:282 output-svg.scm:530
+#: output-ps.scm:283 output-svg.scm:545
 #, scheme-format
 msgid "unknown line-join-style: ~S"
 msgstr "estilo de unión de líneas line-join-style desconocido: ~S"
 
-#: output-svg.scm:47
-#, scheme-format
-msgid "undefined: ~S"
-msgstr "no definido: ~S"
-
-#: output-svg.scm:157
+#: output-svg.scm:148
 #, scheme-format
 msgid "cannot decypher Pango description: ~a"
 msgstr "no se puede descifrar la descripción de Pango: ~a"
 
-#: output-svg.scm:237
+#: output-svg.scm:228
 msgid "Glyph must have a unicode value"
 msgstr "El glifo debe tener un valor de Unicode"
 
-#: output-svg.scm:289 output-svg.scm:299
+#: output-svg.scm:280 output-svg.scm:290
 #, scheme-format
 msgid "cannot find SVG font ~S"
 msgstr "no se encuentra la fuente tipográfica de SVG ~S"
@@ -3773,33 +3906,33 @@ msgstr "no se encuentra la fuente tipográfica de SVG ~S"
 msgid "set-global-staff-size: not in toplevel scope"
 msgstr "set-global-staff-size: no está en el ámbito de nivel más alto"
 
-#: paper.scm:315
+#: paper.scm:320
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "Esto no es un objeto de \\layout {} , ~S"
 
-#: paper.scm:327
+#: paper.scm:328
 #, scheme-format
 msgid "Unknown paper size: ~a"
 msgstr "Tamaño de papel desconocido: ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:342
+#: paper.scm:347
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "Debe usar #(set-paper-size .. ) dentro de \\paper { ... }"
 
-#: parser-clef.scm:143 parser-clef.scm:183
+#: parser-clef.scm:164
 #, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "tipo de clave desconocido: «~a» "
 
-#: parser-clef.scm:144 parser-clef.scm:184
+#: parser-clef.scm:165
 #, scheme-format
 msgid "supported clefs: ~a"
 msgstr "claves soportadas: ~a"
 
-#: parser-ly-from-scheme.scm:73
+#: parser-ly-from-scheme.scm:74
 msgid "error in #{ ... #}"
 msgstr "error en #{ ... #}"
 
@@ -3813,45 +3946,45 @@ msgstr "la cita musical «~a» está vacía"
 msgid "~a exited with status: ~S"
 msgstr "~a salió con el estado: ~S"
 
-#: to-xml.scm:191
+#: to-xml.scm:190
 #, scheme-format
 msgid "assertion failed: ~S"
 msgstr "el aserto no se cumple: ~S"
 
-#: translation-functions.scm:359
+#: translation-functions.scm:368
 #, scheme-format
 msgid "Negative fret for pitch ~a on string ~a"
 msgstr "Traste negativo para la nota ~a de la cuerda ~a"
 
-#: translation-functions.scm:362
+#: translation-functions.scm:371
 #, scheme-format
 msgid "Missing fret for pitch ~a on string ~a"
 msgstr "Falta el traste para la nota ~a de la cuerda ~a"
 
-#: translation-functions.scm:413
+#: translation-functions.scm:414
 #, scheme-format
 msgid "No open string for pitch ~a"
 msgstr "No hay cuerda al aire para la nota ~a"
 
-#: translation-functions.scm:428 translation-functions.scm:440
+#: translation-functions.scm:429 translation-functions.scm:441
 #, scheme-format
 msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
 msgstr "La cuerda solicitada para la nota requiere un traste negativo: cuerda ~a nota ~a"
 
-#: translation-functions.scm:431
+#: translation-functions.scm:432
 msgid "Ignoring string request and recalculating."
 msgstr "Se ignora la solicitud de cuerda; volviendo a calcular."
 
-#: translation-functions.scm:443
+#: translation-functions.scm:444
 msgid "Ignoring note in tablature."
 msgstr "Se ignora la nota en la tablatura."
 
-#: translation-functions.scm:466
+#: translation-functions.scm:469
 #, scheme-format
 msgid "No string for pitch ~a (given frets ~a)"
 msgstr "No hay ninguna cuerda para la nota ~a (dados los trastes ~a)"
 
-#: translation-functions.scm:571
+#: translation-functions.scm:574
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
@@ -3860,6 +3993,51 @@ msgstr ""
 "No hay ninguna etiqueta para el traste ~a (sobre la cuerda ~a);\n"
 "sólo se proporcionan etiquetas para los trastes ~a"
 
+#~ msgid "cannot find start of (de)crescendo"
+#~ msgstr "no se encuentra el comienzo del (de)crescendo"
+
+#~ msgid "already have a decrescendo"
+#~ msgstr "ya tiene un decrescendo"
+
+#~ msgid "already have a crescendo"
+#~ msgstr "ya tiene un crescendo"
+
+#~ msgid "cresc starts here"
+#~ msgstr "el cresc comenzó aquí"
+
+#~ msgid "unterminated (de)crescendo"
+#~ msgstr "(de)crescendo sin terminar"
+
+#~ msgid "unterminated phrasing slur"
+#~ msgstr "ligadura de fraseo sin terminar"
+
+#~ msgid "cannot end phrasing slur"
+#~ msgstr "no se puede terminar la ligadura de fraseo"
+
+#~ msgid "already have phrasing slur"
+#~ msgstr "ya tiene una ligadura de fraseo"
+
+#~ msgid "unterminated slur"
+#~ msgstr "ligadura de expresión sin terminar"
+
+#~ msgid "old relative compatibility not used"
+#~ msgstr "no se ha usado la compatibilidad con el modo relativo antiguo"
+
+#~ msgid "undefined: ~S"
+#~ msgstr "no definido: ~S"
+
+#~ msgid "Line spanner's left point is to the right of its right point."
+#~ msgstr "El extremo izquierdo de la línea extensa está a la derecha del extremo derecho."
+
+#~ msgid "Grob name should be alphanumeric"
+#~ msgstr "El nombre del objeto gráfico ha de ser alfanumérico"
+
+#~ msgid "Brace found at end of lyric.  Did you forget a space?"
+#~ msgstr "Se ha encontrado una llave al final de la letra. ¿Olvidó un espacio?"
+
+#~ msgid "Brace found at end of markup.  Did you forget a space?"
+#~ msgstr "Se ha encontrado una llave al final del marcado, ¿Olvidó un espacio?"
+
 #~ msgid "add midi-block to .ly file"
 #~ msgstr "añadir bloque midi al archivo .ly"
 
index 6b4b3d9d7344a45ebeeff14f78aa5365bdf2dcb7..a83fbc483f128814e39d3dbd8e0b536b91daf27e 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -1,28 +1,25 @@
-# translation of fi.po to
 # Finnish Translation of lilypond.
 # Copyright (C) 2003 Han-Wen Nienhuys, Jan Nieuwenhuizen
 # This file is distributed under the same license as the lilypond package.
 #
-#
-# First translator: Heikki Johannes Junes <hjunes@gmail.com>, 2003-2008.
+# Heikki Junes <hjunes@cc.hut.fi>, 2003-2006.
 msgid ""
 msgstr ""
-"Project-Id-Version: fi\n"
+"Project-Id-Version: lilypond 2.6.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-12-24 10:40+0100\n"
-"PO-Revision-Date: 2008-10-29 16:19+0200\n"
-"Last-Translator: Heikki Johannes Junes <hjunes@gmail.com>\n"
+"PO-Revision-Date: 2006-11-04 02:19+0200\n"
+"Last-Translator: Heikki Junes <hjunes@cc.hut.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 0.2\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.2\n"
 
 #: convertrules.py:12
 #, python-format
 msgid "Not smart enough to convert %s"
-msgstr "Ei tarpeeksi fiksu muuntaakseen %s"
+msgstr "Ei tarpeeksi fiksu konvertoidakseen %s"
 
 #: convertrules.py:13
 msgid "Please refer to the manual for details, and update manually."
@@ -35,7 +32,7 @@ msgstr "%s on korvattu %s:lla"
 
 #: convertrules.py:2398
 msgid "LilyPond source must be UTF-8"
-msgstr "LilyPond-syötteen on oltava UTF-8 muodossa"
+msgstr "LilyPond lähdekoodin täytyy olla UTF-8 muodossa"
 
 #: convertrules.py:2401
 msgid "Try the texstrings backend"
@@ -48,12 +45,12 @@ msgstr "Tee jotain tällaista: %s"
 
 #: convertrules.py:2407
 msgid "Or save as UTF-8 in your editor"
-msgstr "Tai talleta UTF-8 -muodossa muokkaimessasi"
+msgstr "Tai talleta UTF-8 -muodossa editorissasi"
 
 #: fontextract.py:26
 #, python-format
 msgid "Scanning %s"
-msgstr "Tutkaillaan %s"
+msgstr "Skannataan %s"
 
 #: fontextract.py:71
 #, python-format
@@ -63,7 +60,7 @@ msgstr "Poimittiin %s"
 #: fontextract.py:86
 #, python-format
 msgid "Writing fonts to %s"
-msgstr "Kirjoitetaan fontit kohteeseen %s"
+msgstr "Kirjoitetaan fontit osoitteeseen `%s'"
 
 #: lilylib.py:85 lilylib.py:136
 #, python-format
@@ -76,23 +73,23 @@ msgid "Running %s..."
 msgstr "Ajetaan %s..."
 
 #: lilylib.py:203
-#, python-format
+#, fuzzy, python-format
 msgid "Usage: %s"
-msgstr "Käyttö: %s"
+msgstr "Käyttö: %s\n"
 
 #: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
-#, python-format
+#, fuzzy, python-format
 msgid "%s [OPTION]... FILE"
-msgstr "%s [OPTIO]... TIEDOSTO"
+msgstr "Käyttö: %s [OPTIO]... TIEDOSTO..."
 
 #: abc2ly.py:1351
-#, python-format
+#, fuzzy, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
 "%s) to LilyPond input."
 msgstr ""
-"abc2ly muuntaa ABC-musiikkitiedostoja (katso\n"
-"%s) LilyPond-syötteeksi."
+"Tämä ohjelma kääntää ABC-musiikkitiedostoja (katso\n"
+"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) LilyPond-syötteeksi."
 
 #: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
 msgid "write output to FILE"
@@ -108,20 +105,28 @@ msgstr "säilytä ABC:n palkkimerkinnät"
 
 #: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
 #: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
 msgid "Report bugs via"
-msgstr "Raportoi virheet osoitteeseen"
+msgstr "Raportoi virheet osoitteeseen %s"
 
 #: convert-ly.py:41
+#, fuzzy
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
 "version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 "Päivitä LilyPond syöte uudempaan versioon.  Oletuksena päivittää\n"
-"versiosta joka on annettu \\version komennolla nykyiseksi LilyPond versioksi."
+"versiosta joka on annettu \\version komennolla nykyiseksi LilyPond "
+"versioksi.\n"
+"Esimerkkejä:\n"
+"\n"
+"  convert-ly -e old.ly\n"
+"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
 
 #: convert-ly.py:43 lilypond-book.py:73
+#, fuzzy
 msgid "Examples:"
-msgstr "Esimerkit:"
+msgstr "esimerkki"
 
 #: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, c-format, python-format
@@ -135,7 +140,7 @@ msgstr "virhe: %s"
 
 #: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
-msgstr "Levitettään ehdoilla GNU General Public License."
+msgstr "Levitettävissä ehdoilla GNU General Public License."
 
 #: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
@@ -151,31 +156,33 @@ msgstr "aloita versiosta VERSIO [oletus: \\version joka on tiedostossa]"
 
 #: convert-ly.py:91
 msgid "edit in place"
-msgstr "muokkaa paikassaan"
+msgstr "editoi paikassaan"
 
 #: convert-ly.py:94
 msgid "do not add \\version command if missing"
-msgstr "älä lisää \\version komentoa, jos se puuttuu"
+msgstr "älä lisää \\version komentoa jos se puuttuu"
 
 #: convert-ly.py:100
+#, fuzzy
 msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr "tulosta säännöt [oletus: --from=0, --to=@TOPLEVEL_VERSION@]"
 
 #: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
-msgstr "muunna versioon VERSIO [oletus: @TOPLEVEL_VERSION@]"
+msgstr "muunnaa versioon VERSIO [oletus: @TOPLEVEL_VERSION@]"
 
 #: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr "Toteutetaan muunnos: "
 
 #: convert-ly.py:166
+#, fuzzy
 msgid "Error while converting"
-msgstr "Virhe muunnettaessa"
+msgstr "virhe muunnettaessa"
 
 #: convert-ly.py:168
 msgid "Stopping at last succesful rule"
-msgstr "Lopetetaan viimeisen onnistuneen säännön kohdalla"
+msgstr ""
 
 #: convert-ly.py:190
 #, python-format
@@ -188,23 +195,25 @@ msgid "cannot open file: `%s'"
 msgstr "tiedostoa ei voitu avata: `%s'"
 
 #: convert-ly.py:284
-#, python-format
+#, fuzzy, python-format
 msgid "cannot determine version for `%s'.  Skipping"
 msgstr "ei voitu määrittää `%s':lle versiota. Sivuutetaan"
 
 #: etf2ly.py:1196
-#, python-format
+#, fuzzy, python-format
 msgid "%s [OPTION]... ETF-FILE"
-msgstr "%s [OPTIO]... ETF-TIEDOSTO"
+msgstr "Käyttö: %s [OPTIO]... TIEDOSTO..."
 
 #: etf2ly.py:1198
+#, fuzzy
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
 "Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
 "file."
 msgstr ""
 "Enigma Transport Format on Coda Music Technology:n Finale-tuotteen\n"
-"tallennusmuoto. etf2ly muuntaa ETF-muodon osajoukon LilyPondin käytettäväksi."
+"tallennusmuoto. Tämä ohjelma muuntaa ETF-muodon osajoukon\n"
+"LilyPondilla käytettäväksi."
 
 #: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
@@ -218,12 +227,10 @@ msgstr "näytä takuu ja copyright"
 msgid ""
 "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
 msgstr ""
-"Käsittele LilyPond palaset, jotka on upotettu HTML, LaTeX, texinfo tai "
-"DocBook -tallenteeseen."
 
 #: lilypond-book.py:78
 msgid "BOOK"
-msgstr "KIRJA"
+msgstr ""
 
 #: lilypond-book.py:87
 #, python-format
@@ -268,11 +275,11 @@ msgstr "KOMENTO"
 
 #: lilypond-book.py:148
 msgid "process ly_files using COMMAND FILE..."
-msgstr "prosessoi ly_tiedostot komennolla COMMAND FILE..."
+msgstr "prosessoi ly_tiedostot käyttäen komentoa COMMAND FILE..."
 
 #: lilypond-book.py:154
 msgid "Create PDF files for use with PDFTeX"
-msgstr "Luo PDF-tiedosto PDFTeX-käyttöä varten"
+msgstr ""
 
 #: lilypond-book.py:157
 msgid ""
@@ -289,7 +296,7 @@ msgstr "tulosta runsaasti käsittelytietoa"
 #: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
-msgstr "tiedostoa ei löydy: %s "
+msgstr "tiedostoa %s ei löydy"
 
 #: lilypond-book.py:1004
 #, python-format
@@ -314,12 +321,12 @@ msgstr "yhteensopivuusmuodon käännös: %s"
 #: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
-msgstr "sivuutetaan tuntematon ly -valinta: %s"
+msgstr "sivuutetaan tuntematon ly -optio: %s"
 
 #: lilypond-book.py:1388
 #, python-format
 msgid "Opening filter `%s'"
-msgstr "Avataan suodin `%s'"
+msgstr "Avataan filtteri `%s'"
 
 #: lilypond-book.py:1405
 #, python-format
@@ -331,8 +338,9 @@ msgid "The error log is as follows:"
 msgstr "Virheloki on seuraava:"
 
 #: lilypond-book.py:1476
+#, fuzzy
 msgid "cannot find \\begin{document} in LaTeX document"
-msgstr "Ei löydetty \\begin{document} LaTeX-documentista "
+msgstr "Ei voitu löytää \\begin{document} LaTeX-documentista"
 
 #: lilypond-book.py:1586
 msgid "Writing snippets..."
@@ -340,7 +348,7 @@ msgstr "Kirjoitetaan palasia..."
 
 #: lilypond-book.py:1591
 msgid "Processing..."
-msgstr "Käsitellään..."
+msgstr "Prosessoidaan..."
 
 #: lilypond-book.py:1595
 msgid "All snippets are up to date..."
@@ -349,7 +357,7 @@ msgstr "Kaikki palaset on päivitetty..."
 #: lilypond-book.py:1605
 #, python-format
 msgid "cannot determine format for: %s"
-msgstr "ei löytynyt formaattia kohteelle: %s"
+msgstr "ei löytynyt formaattia: %s"
 
 #: lilypond-book.py:1616
 #, python-format
@@ -382,7 +390,7 @@ msgstr "Kootaan %s..."
 #: lilypond-book.py:1725
 #, python-format
 msgid "Processing include: %s"
-msgstr "Käsitellään sisällytetävä: %s"
+msgstr "Prosessoidaan sisällytetävä: %s"
 
 #: lilypond-book.py:1739
 #, python-format
@@ -392,15 +400,15 @@ msgstr "Poistetaan `%s'"
 #: lilypond-book.py:1815
 #, python-format
 msgid "Writing fonts to %s..."
-msgstr "Kirjoitetaan kirjasimia kohteeseen %s..."
+msgstr "Kirjoitetaan fontteja hakemistoon %s..."
 
 #: lilypond-book.py:1830
 msgid "option --psfonts not used"
-msgstr "valintaa --psfonts ei käytetty"
+msgstr "optiota --psfonts=FILE ei käytetty"
 
 #: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
-msgstr "prosessointi dvips:illä ei sisällä kirjasimia"
+msgstr "prosessointi dvips:illä ei sisällä fontteja"
 
 #: lilypond-book.py:1834
 msgid "DVIPS usage:"
@@ -416,7 +424,7 @@ msgstr "virhe: "
 
 #: midi2ly.py:110
 msgid "Exiting ... "
-msgstr "Lopetetaan ... "
+msgstr "Lopettaa ... "
 
 #: midi2ly.py:857
 #, python-format
@@ -424,9 +432,9 @@ msgid "%s output to `%s'..."
 msgstr "%s tulostetaan paikkaan `%s'..."
 
 #: midi2ly.py:871 musicxml2ly.py:485
-#, python-format
+#, fuzzy, python-format
 msgid "Convert %s to LilyPond input."
-msgstr "Muunna %s LilyPond -syötteeksi."
+msgstr "Muunna MIDI LilyPond -muotoon."
 
 #: midi2ly.py:875
 msgid "print absolute pitches"
@@ -455,7 +463,7 @@ msgstr "ETUMERKIT[:MOLLI]"
 
 #: midi2ly.py:888
 msgid "quantise note starts on DUR"
-msgstr "kvantisoi nuotit aloittaen kohdasta PIT"
+msgstr "nuottien kvantisointi alkukohtana PIT"
 
 #: midi2ly.py:891
 msgid "DUR*NUM/DEN"
@@ -468,22 +476,23 @@ msgstr "salli tupletti -pituudet PIT*OSOITTAJA/NIMITTÄJÄ"
 
 #: midi2ly.py:902
 msgid "treat every text as a lyric"
-msgstr "käsittele kaikki tekstit sanoituksena"
+msgstr "käsittele kaikki tekstit lyriikkana"
 
 #: midi2ly.py:905
+#, fuzzy
 msgid "Examples"
-msgstr "Esimerkit"
+msgstr "esimerkki"
 
 #: midi2ly.py:925
 msgid "no files specified on command line."
-msgstr "ei komentoriviltä määritettyjä tiedostoja."
+msgstr "tiedostoja ei annettu komentorivillä."
 
 #: musicxml2ly.py:473
 msgid "musicxml2ly FILE.xml"
-msgstr "musicxml2ly TIEDOSTO.xml"
+msgstr ""
 
 #: musicxml2ly.py:476
-#, python-format
+#, fuzzy, python-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
 "License and you are welcome to change it and/or distribute copies of it\n"
@@ -492,35 +501,35 @@ msgid ""
 msgstr ""
 "Tämä on ilmaisohjelmisto. Siihen sovelletaan GNU General Public License\n"
 "ja olet tervetullut muuttamaan ohjelmaa ja/tai levittämään siitä kopioita\n"
-"tietyillä ehdoilla. Suorita `%s --warranty' saadaksesi lisää\n
informaatiota."
+"tietyillä ehdoilla. Suorita `%s --warranty' saadaksesi lisäinformaatiota.\n"
 
 #: musicxml2ly.py:495
 msgid "Use lxml.etree; uses less memory and cpu time."
-msgstr "Käytä lxml.etree; se käyttää vähemmän muistia ja prosessoriaikaa."
+msgstr ""
 
 #: musicxml2ly.py:503
 msgid "set output filename to FILE"
-msgstr "ohjaa syöte tiedostoon TIEDOSTO"
+msgstr "tulosta tiedostoon TIEDOSTO"
 
 #: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
-msgstr "valinta `%s' vaatii muuttujan"
+msgstr "optio `%s' vaatii argumentin"
 
 #: getopt-long.cc:144
-#, c-format
+#, fuzzy, c-format
 msgid "option `%s' does not allow an argument"
-msgstr "valinta `%s' ei hyväksy muuttujaa"
+msgstr "optio `%s' ei salli argumenttia"
 
 #: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
-msgstr "tunnistamaton valinta: `%s'"
+msgstr "tunnistamaton optio: `%s'"
 
 #: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
-msgstr "epäkelpo muuttuja `%s' valinnalle `%s'"
+msgstr "epäkelpo argumentti `%s' optiolle `%s'"
 
 #: warn.cc:68 grob.cc:559 input.cc:82
 #, c-format
@@ -539,12 +548,12 @@ msgstr "Korotusmerkkien ladontalista täytyy alkaa konteksti-nimellä: %s"
 #: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
-msgstr "sivutetaan tuntematon etumerkki: %s"
+msgstr "sivutetaan tuntematan etumerkki: %s"
 
 #: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
-msgstr "oletettiin pari tai konteksti-nimi korotusmerkkisäännölle, löytyi %s"
+msgstr "pari tai konteksti-nimi oletettiin korotusmerkkisäännölle, löytyi %s"
 
 #: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
@@ -556,21 +565,22 @@ msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
-"pystysyoraa sijoittelua kutsuttiin ennen rivinkatkaisua.\n"
+"pystysyora sijoittelu kutsuttiin ennen rivinkatkaisua.\n"
 "Viivaston ylittävät ladokkeet tehdään vain PianoStaff:in yhteydessä."
 
 #: align-interface.cc:329
+#, fuzzy
 msgid "tried to get a translation for something that is no child of mine"
-msgstr "yritettiin saada tulkinta jollekin, joka ei ole oma lapseni"
+msgstr "yritettiin saada käännösteksti jollekin, joka ei ole lapseni"
 
 #: all-font-metrics.cc:173
 #, c-format
 msgid "cannot find font: `%s'"
-msgstr "ei löytynyt kirjasinta: `%s'"
+msgstr "ei löytynyt fonttia: `%s'"
 
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
-msgstr "\\applycontext :n muuttuja ei ole menettelytapaohje"
+msgstr "\\applycontext vaatii funktioargumentin"
 
 #: auto-change-iterator.cc:63 change-iterator.cc:61
 #, c-format
@@ -579,7 +589,7 @@ msgstr "ei voitu vaihtaa, oli jo tulkitsijassa: %s"
 
 #: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
-msgstr "Axis_group_engraver: pystysuoralla ryhmällä on jo vanhempi"
+msgstr "Axis_group_engraver: vertikaaliryhmällä on jo vanhempi"
 
 #: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
@@ -587,7 +597,7 @@ msgstr "onko käytössä kaksi Axis_group_engraver:ia?"
 
 #: axis-group-engraver.cc:80
 msgid "removing this vertical group"
-msgstr "poistetaan tämä pystysuora ryhmä"
+msgstr "poistetaan tämä vertikaaliryhmä"
 
 #: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
@@ -596,12 +606,11 @@ msgstr "yritettiin laskea korkeus ei-katkaisukohdassa"
 #: axis-group-interface.cc:370
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr ""
-"viivaston ulkopuolisella kohteella tulee olla suunta, oletetaan ylöspäin"
 
 #: axis-group-interface.cc:383
 #, c-format
 msgid "outside-staff object %s has an empty extent"
-msgstr "viivaston ulkopuolisella kohteella %s on tyhjä ulottuvuus"
+msgstr ""
 
 #: bar-check-iterator.cc:73
 #, c-format
@@ -621,6 +630,7 @@ msgid "stem must have Rhythmic structure"
 msgstr "varrella on oltava Rhytmic -rakenne"
 
 #: beam-engraver.cc:246
+#, fuzzy
 msgid "stem does not fit in beam"
 msgstr "varsi ei sovi palkkiin"
 
@@ -630,11 +640,11 @@ msgstr "palkki aloitettiin täältä"
 
 #: beam-quanting.cc:307
 msgid "no feasible beam position"
-msgstr "ei löytynyt sopivaa paikkaa palkille"
+msgstr "ei löytynyt sopivaa palkin paikkaa"
 
 #: beam.cc:144
 msgid "removing beam with no stems"
-msgstr "poistetaan palkki jolla ei ole varsia"
+msgstr "poistetaan palkki jolla ei ole parrua"
 
 #: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
@@ -643,7 +653,7 @@ msgstr "toimivaa alkuasettelua ei löytynyt: hyvää palkkikaltevuuta ei löytyn
 #: break-alignment-interface.cc:208
 #, c-format
 msgid "No spacing entry from %s to `%s'"
-msgstr "Ei välistyksen syöttöä kohdasta %s kohtaan `%s'"
+msgstr "Ei välistyksen syöttöä paikasta %s paikkaan `%s'"
 
 #: change-iterator.cc:23
 #, c-format
@@ -663,7 +673,7 @@ msgstr "ei löytynyt kontekstia johon vaihtaa"
 #: change-iterator.cc:91
 #, c-format
 msgid "not changing to same context type: %s"
-msgstr "ei vaihdettu samaan konteksti-tyyppiin: %s"
+msgstr "ei vaihdettu samaan konteksti tyyppiin: %s"
 
 #. FIXME: uncomprehensable message
 #: change-iterator.cc:95
@@ -672,7 +682,7 @@ msgstr "ei yksikään näistä perheessäni"
 
 #: chord-tremolo-engraver.cc:88
 msgid "No tremolo to end"
-msgstr "Ei löytynyt tremoloa päätettäväksi"
+msgstr "Ei löytynyt päätettävää tremoloa"
 
 #: chord-tremolo-engraver.cc:110
 msgid "unterminated chord tremolo"
@@ -681,7 +691,7 @@ msgstr "päättämätön sointutremolo"
 #: chord-tremolo-iterator.cc:33
 #, c-format
 msgid "expect 2 elements for chord tremolo, found %d"
-msgstr "odotettiin 2 osaa sointutremololle, löytyi %d"
+msgstr "odotettiin 2 elementtiä sointutremololle, löytyi %d"
 
 #: clef.cc:54
 #, c-format
@@ -705,8 +715,9 @@ msgstr ""
 
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
+#, fuzzy
 msgid "cannot find line breaking that satisfies constraints"
-msgstr "ei löytynyt rivinkatkaisukohtaa, joka täyttäisi ehdot"
+msgstr "ei löytynyt rivinkatkaisukohtaa joka täyttäisi ehdot"
 
 #: context-def.cc:130
 #, c-format
@@ -864,24 +875,25 @@ msgid "decrescendo too small"
 msgstr "liian lyhyt decrescendo"
 
 #: horizontal-bracket-engraver.cc:59
+#, fuzzy
 msgid "do not have that many brackets"
-msgstr "ei niin monia sulkeita ole käytettävissä "
+msgstr "ei ole käytössä niin monia sulkeita"
 
 #: horizontal-bracket-engraver.cc:68
 msgid "conflicting note group events"
-msgstr "ristiriitaisia nuottiryhmä -tapahtumia"
+msgstr "ristiriitainen nuottiryhmä -tapaus"
 
 #: hyphen-engraver.cc:93
 msgid "removing unterminated hyphen"
-msgstr "poistetaan päättämätön tavuviiva"
+msgstr "päättämätön tavuviiva"
 
 #: hyphen-engraver.cc:107
 msgid "unterminated hyphen; removing"
-msgstr "päättämätön tavuviiva; poistetaan"
+msgstr "päättämätön tavuviiva"
 
 #: includable-lexer.cc:53
 msgid "include files are not allowed in safe mode"
-msgstr "tiedostojen sisällyttäminen ei ole sallittua turvatilassa"
+msgstr "sisällytettävät tiedostot eivät ole sallittuja turvatilassa"
 
 #: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
@@ -919,11 +931,11 @@ msgstr "päättämätön ligature"
 
 #: ligature-engraver.cc:202
 msgid "ignoring rest: ligature may not contain rest"
-msgstr "sivuutetaan tauko: ligature ei voi sisältää taukoa"
+msgstr "ligature ei voi sisältää taukoa; sivuutetaan tauko"
 
 #: ligature-engraver.cc:203
 msgid "ligature was started here"
-msgstr "ligature aloitettiin tästä"
+msgstr "ligature alkoi tästä"
 
 #: lily-guile.cc:92
 #, c-format
@@ -937,7 +949,7 @@ msgstr "Ei löytynyt tyyppitarkistusta ominaisuudelle `%s' (%s)."
 
 #: lily-guile.cc:521
 msgid "perhaps a typing error?"
-msgstr "kaiketi näppäilyvirhe?"
+msgstr "ehkä näppäilyvirhe?"
 
 #: lily-guile.cc:527
 msgid "doing assignment anyway"
@@ -964,14 +976,14 @@ msgid "deprecated function called: %s"
 msgstr "vanhentunut funktiokutsu: %s"
 
 #: lily-parser-scheme.cc:88
-#, c-format
+#, fuzzy, c-format
 msgid "Changing working directory to: `%s'"
-msgstr "Vaihdetaan työhakemistoksi: `%s'"
+msgstr "Vaihdetaan työhakemistoksi `%s'"
 
 #: lily-parser-scheme.cc:106
 #, c-format
 msgid "cannot find init file: `%s'"
-msgstr "ei löytynyt alustustiedostoa: `%s'"
+msgstr "tiedostoa ei löydy: `%s'"
 
 #: lily-parser-scheme.cc:125
 #, c-format
@@ -983,13 +995,14 @@ msgid "Parsing..."
 msgstr "Jäsennetään..."
 
 #: lily-parser.cc:127
+#, fuzzy
 msgid "braces do not match"
-msgstr "aaltosulut eivät täsmää"
+msgstr "aaltosulkumerkit eivät täsmää"
 
 #: lyric-combine-music-iterator.cc:291
 #, c-format
 msgid "cannot find Voice `%s'"
-msgstr "ei löytynyt Voice `%s'"
+msgstr "ei löydetty Voice `%s'"
 
 #: main.cc:116
 #, c-format
@@ -1001,8 +1014,7 @@ msgid ""
 msgstr ""
 "Tämä on ilmaisohjelmisto. Siihen sovelletaan GNU General Public License\n"
 "ja olet tervetullut muuttamaan ohjelmaa ja/tai levittämään siitä kopioita\n"
-"tietyillä ehdoilla. Suorita `%s --warranty' saadaksesi lisää\n"
-"
tietoa.\n"
+"tietyillä ehdoilla. Suorita `%s --warranty' saadaksesi lisäinformaatiota.\n"
 
 #: main.cc:122
 msgid ""
@@ -1039,24 +1051,28 @@ msgid "BACK"
 msgstr "PÄÄ"
 
 #: main.cc:153
+#, fuzzy
 msgid ""
 "use backend BACK (eps, gnome, ps [default],\n"
 "scm, svg, tex, texstr)"
 msgstr ""
-"käytä päänä PÄÄ (eps, gnome, ps [oletus],\n"
-"scm, svg, tex, texstr)"
+"käytä päänä PÄÄ (gnome, ps, eps,\n"
+"scm, svg, tex, texstr)\n"
+"default: PS"
 
 #: main.cc:155
+#, fuzzy
 msgid "SYM[=VAL]"
-msgstr "SYM[=VAL]"
+msgstr "SYM=VAL"
 
 #: main.cc:156
+#, fuzzy
 msgid ""
 "set Scheme option SYM to VAL (default: #t)\n"
 "Use -dhelp for help."
 msgstr ""
-"aseta Scheme-valinta SYM arvoon VAL (oletus: #t)\n"
-"Käytä -dhelp saadaksesi lisää apua."
+"aseta Scheme -ohjelman optio. Käyttää #t jos VAL ei ole määritelty\n"
+"Koeta -dhelp saadaksesi lisäapua."
 
 #: main.cc:159
 msgid "EXPR"
@@ -1064,7 +1080,7 @@ msgstr "LAUSEKE"
 
 #: main.cc:159
 msgid "evaluate scheme code"
-msgstr "suorita scheme-koodi"
+msgstr "suorita scheme koodi"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
@@ -1094,21 +1110,22 @@ msgstr "tuota PostScript"
 
 #: main.cc:167
 msgid "generate TeX (tex backend only)"
-msgstr "tuota TeX (vain tex -päätä varten)"
+msgstr "tuota TeX (vain käytettäessä tex -päätä)"
 
 #: main.cc:168
 msgid "show this help and exit"
-msgstr "näytä tämä opastus ja lopeta"
+msgstr ""
 
 #: main.cc:169
 msgid "FIELD"
 msgstr "KENTTÄ"
 
 #: main.cc:169
+#, fuzzy
 msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
-msgstr "kirjoita otsakekenttä KENTTÄ tiedostoon\n
nimeltä PERUSNIMI.KENTTÄ"
+msgstr "kirjoita otsake tiedostoon PERUSNIMI.KENTTÄ"
 
 #: main.cc:171
 msgid "add DIR to search path"
@@ -1116,7 +1133,7 @@ msgstr "lisää HAKEMISTO hakupolkuun"
 
 #: main.cc:172
 msgid "use FILE as init file"
-msgstr "käytä TIEDOSTO alustettaessa"
+msgstr "käytä TIEDOSTO alustustiedostona"
 
 #: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
@@ -1147,14 +1164,16 @@ msgid "relocate using directory of lilypond program"
 msgstr "paikallista käyttäen lilypond ohjelman hakemistoa"
 
 #: main.cc:181
+#, fuzzy
 msgid ""
 "disallow unsafe Scheme and PostScript\n"
 "operations"
-msgstr "älä salli turvattomia Scheme ja PostScript\n
toimenpiteitä"
+msgstr "älä salli turvattomia Scheme ja PostScript -operaatioita"
 
 #: main.cc:183
+#, fuzzy
 msgid "show version number and exit"
-msgstr "tulosta versionumero ja lopeta"
+msgstr "tulosta versionumero"
 
 #: main.cc:224
 #, c-format
@@ -1179,7 +1198,7 @@ msgstr "Lado musiikki ja/tai tuota MIDI tiedostosta TIEDOSTO."
 #: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
-msgstr "LilyPond tuottaa kaunista musiikkinuotinnusta."
+msgstr "LilyPond tuottaa kaunista musiikkinotaatiota."
 
 #: main.cc:257
 #, c-format
@@ -1189,7 +1208,7 @@ msgstr "Lisätietoja varten, katso %s"
 #: main.cc:259
 #, c-format
 msgid "Options:"
-msgstr "Valinnat:"
+msgstr "Optiot:"
 
 #: main.cc:263
 #, c-format
@@ -1199,12 +1218,12 @@ msgstr "Raportoi virheet osoitteeseen %s"
 #: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
-msgstr "odotettiin %d muuttujaa chroot-vankilalle, löytyi: %u"
+msgstr "odotettiin %d argumenttia chroot-vankilalle, löytyi: %u"
 
 #: main.cc:323
 #, c-format
 msgid "no such user: %s"
-msgstr "ei löydy käyttäjää: `%s'"
+msgstr "käyttäjää ei löydy: `%s'"
 
 #: main.cc:325
 #, c-format
@@ -1214,7 +1233,7 @@ msgstr "ei saatu käyttäjä-id:tä käyttäjänimestä: %s: %s"
 #: main.cc:340
 #, c-format
 msgid "no such group: %s"
-msgstr "ei löydy ryhmää: %s"
+msgstr "ryhmää ei ole: %s"
 
 #: main.cc:342
 #, c-format
@@ -1224,7 +1243,7 @@ msgstr "ei voitu saada ryhmä -id:tä ryhmänimestä: %s: %s"
 #: main.cc:350
 #, c-format
 msgid "cannot chroot to: %s: %s"
-msgstr "chroot ei onnistu kohteeseen: %s: %s"
+msgstr "chroot ei onnistunut: %s: %s"
 
 #: main.cc:357
 #, c-format
@@ -1254,11 +1273,11 @@ msgstr "napattiin poikkeus: %s"
 #. FIXME: constant error message.
 #: mark-engraver.cc:154
 msgid "rehearsalMark must have integer value"
-msgstr "rehearsalMark vaatii kokonaisluvun"
+msgstr "rehearsalMark vaatii kokonaislukuargumentin"
 
 #: mark-engraver.cc:160
 msgid "mark label must be a markup object"
-msgstr "merkinnän otsakkeen on oltava markup -kohde"
+msgstr "merkinnän on oltava markup -objekti"
 
 #: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
@@ -1266,11 +1285,11 @@ msgstr "ligatuuri vähemmällä kuin 2:lla nuottipäällä -> ohitetaan"
 
 #: mensural-ligature-engraver.cc:112
 msgid "cannot determine pitch of ligature primitive -> skipping"
-msgstr "ei voitu määrittää nuottikorkeutta ligatuurille -> ohitetaan"
+msgstr "ei voitu määrittää nuottikorkeutta ligatuurin osalle -> ohitetaan"
 
 #: mensural-ligature-engraver.cc:126
 msgid "single note ligature - skipping"
-msgstr "priimi-intervalli ligatuurissa - ohitetaan"
+msgstr "priimi-intervalli ligatuurissa -> ohitetaan"
 
 #: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
@@ -1282,7 +1301,7 @@ msgstr "mensuraaliligatuuri: kesto ei ollut Mx, L, B tai S -> ohitetaan"
 
 #: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
-msgstr "semibrevis vaatii seurakseen samantyyppisen -> ohitetaan"
+msgstr "semibrevis vaatii samantyyppisen seuraavaksi -> ohitetaan"
 
 #: mensural-ligature-engraver.cc:209
 msgid ""
@@ -1299,7 +1318,7 @@ msgid ""
 "the penultimate note must be another one,\n"
 "or the ligatura must be LB or SSB"
 msgstr ""
-"viallinen ligatuurin pääte:\n"
+"viallinen ligatura pääte:\n"
 "kun viimeinen nuottin on aleneva brevis,\n"
 "toiseksi viimeisen nuotin on oltava joku muu,\n"
 "tai ligaturan täytyy olla LB tai SSB"
@@ -1324,35 +1343,35 @@ msgstr "ei löytynyt MIDI-instrumenttia: `%s'"
 #: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
-msgstr "kokeellinen: viritetään väliaikaisesti (%d senttiä) kanavaa."
+msgstr "kokeellinen: viritetään väliaisesti (%d senttiä) kanavaa."
 
 #: midi-stream.cc:28
 #, c-format
 msgid "cannot open for write: %s: %s"
-msgstr "tiedostoa ei voitu avata kirjoitettavaksi: %s: %s"
+msgstr "tiedostoa ei voitu avata kirjoitettavaksi: %s: `%s'"
 
 #: midi-stream.cc:44
 #, c-format
 msgid "cannot write to file: `%s'"
-msgstr "ei voitu kirjoittaa tiedostoon: `%s'"
+msgstr "tiedostoon ei voitu kirjoittaa: `%s'"
 
 #: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr "Lähetetään ei-tapahtuma kontekstille"
 
 #: music.cc:141
-#, c-format
+#, fuzzy, c-format
 msgid "octave check failed; expected \"%s\", found: \"%s\""
-msgstr "oktaavitarkistus epäonnistui; oletettiin \"%s\", löytyi: \"%s\""
+msgstr "oktaavitarkistus epäonnistui; oletettiin \"%s\", löydettiin: %s"
 
 #: music.cc:207
 #, c-format
 msgid "transposition by %s makes alteration larger than double"
-msgstr "transponointi %s:n verran tekee muutokset kaksinkertaista suuremmaksi"
+msgstr "transponointi %s:N verran tekee muutokset suuremmaksi kuin kaksi"
 
 #: new-fingering-engraver.cc:96
 msgid "cannot add text scripts to individual note heads"
-msgstr "ei voitu lisätä tekstinpätkiä yksittäisten nuottien päihin"
+msgstr "ei voitu lisätä tekstinpätkiä yksittäisiin nuotteihin"
 
 #: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
@@ -1368,7 +1387,7 @@ msgstr "liian monta törmäävää nuottisaraketta"
 
 #: note-column.cc:124
 msgid "cannot have note heads and rests together on a stem"
-msgstr "palkissa ei voi olla nuotinpäitä ja taukoja yhtä aikaa"
+msgstr "ei voinut olla nuotinpäitä ja taukoja yhtäaikaa palkissa"
 
 #: note-head.cc:63
 #, c-format
@@ -1387,17 +1406,17 @@ msgstr "ei voitu varata %lu bittiä"
 #: open-type-font.cc:37
 #, c-format
 msgid "cannot load font table: %s"
-msgstr "ei voitu ladata kirjasintaulukkoa: `%s'"
+msgstr "ei voitu ladata fonttitaulukkoa: `%s'"
 
 #: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
-msgstr "ei-tuettu kirjasinmuoto: %s"
+msgstr "tukematon fonttimuoto: %s"
 
 #: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
-msgstr "tuntematon virhe: %d lukee kirjasintiedostoa: %s"
+msgstr "tuntematon virhe: %d lukee fonttitiedostoa: %s"
 
 #: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
@@ -1405,17 +1424,19 @@ msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr "FT_Get_Glyph_Name() palautti virheen: %u"
 
 #: page-turn-page-breaking.cc:205
+#, fuzzy
 msgid ""
 "cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
-"Ei voitu sovittaa ensimmäistä sivunvaihtoa yhdelle sivulle. Harkitse "
+"Ei voitu sovittaa ensimmäistä sivunkääntöä yhdelle sivulle. Harkitse "
 "ensimmäisen sivunumeron (first-page-number) asettamista parittomaksi."
 
 #: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
-msgstr "Lasketaan sivujen ja rivien vaihtoja (%d mahdollista sivunvaihtoa)..."
+msgstr ""
+"Lasketaan sivujen ja rivien katkaisuja (%d mahdollista sivunkatkaisua)..."
 
 #: page-turn-page-breaking.cc:236 paper-score.cc:154
 msgid "Drawing systems..."
@@ -1433,11 +1454,11 @@ msgstr ""
 #: pango-font.cc:224
 #, c-format
 msgid "no PostScript font name for font `%s'"
-msgstr "ei PostScript-kirjasinnimeä kirjasimelle `%s'"
+msgstr "ei PostScript fonttinimeä fontille `%s'"
 
 #: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
-msgstr "FreeType muodolla ei ollut PostScript kirjasinnimeä"
+msgstr "FreeType muodolla ei ollut PostScript fonttinimeä"
 
 #: paper-outputter-scheme.cc:33
 #, c-format
@@ -1451,11 +1472,11 @@ msgstr "Lasketaan rivinvaihtoja..."
 #: paper-score.cc:118
 #, c-format
 msgid "Element count %d (spanners %d) "
-msgstr "Osien määrä: %d (ladokkeita: %d)"
+msgstr "Elementtien määrä: %d (ladokkeita: %d)"
 
 #: paper-score.cc:122
 msgid "Preprocessing graphical objects..."
-msgstr "Esikäsitellään graafisia kohteita..."
+msgstr "Esiprosessoidaan graafisia kohteita..."
 
 #: parse-scm.cc:83
 msgid "GUILE signaled an error for the expression beginning here"
@@ -1471,11 +1492,11 @@ msgstr "Jälki..."
 
 #: performance.cc:74
 msgid "MIDI channel wrapped around"
-msgstr "MIDI-kanava kietaistiin ympäri"
+msgstr "MIDI kanava kietaistiin ympäri"
 
 #: performance.cc:75
 msgid "remapping modulo 16"
-msgstr "kartoitetaan uudelleen modulo 16"
+msgstr "kuvataan uudelleen modulo 16"
 
 #: performance.cc:103
 #, c-format
@@ -1484,7 +1505,7 @@ msgstr "Tehdään MIDI-tuloste `%s'..."
 
 #: phrasing-slur-engraver.cc:146
 msgid "unterminated phrasing slur"
-msgstr "päättämätön muotoilukaari"
+msgstr "päättämätön fraaseerauskaari"
 
 #: piano-pedal-engraver.cc:286
 #, c-format
@@ -1500,12 +1521,12 @@ msgstr "ei löydetty alkua pianopedaalille: `%s'"
 #: piano-pedal-engraver.cc:347
 #, c-format
 msgid "cannot find start of piano pedal bracket: `%s'"
-msgstr "ei löydetty alkua pianopedaalin sulkumerkinnälle: `%s'"
+msgstr "ei löydetty alkua pianopedaalimerkinnälle: `%s'"
 
 #: program-option.cc:205
 #, c-format
 msgid "no such internal option: %s"
-msgstr "tuntematon sisäinen valinta: %s"
+msgstr "tuntematon sisäinen optio: %s"
 
 #: property-iterator.cc:74
 #, c-format
@@ -1517,19 +1538,19 @@ msgid "Failed octave check, got: "
 msgstr "Oktaavitarkistus epäonnistui, saatiin: "
 
 #: relocate.cc:44
-#, c-format
+#, fuzzy, c-format
 msgid "Setting %s to %s"
-msgstr "Asetetaan %s kohtaan %s"
+msgstr "Asetetaan %s kohtaan %s\n"
 
 #: relocate.cc:59
 #, c-format
 msgid "no such file: %s for %s"
-msgstr "ei löytynyt tiedostoa: %s kohteelle %s"
+msgstr "tiedostoa ei löydy: %s kohteelle %s"
 
 #: relocate.cc:69 relocate.cc:87
 #, c-format
 msgid "no such directory: %s for %s"
-msgstr "ei löytynyt hakemistoa: %s kohteelle %s"
+msgstr "hakemistoa ei löydy: %s kohteelle %s"
 
 #: relocate.cc:79
 #, c-format
@@ -1566,9 +1587,9 @@ msgstr ""
 "argv0=%s"
 
 #: relocate.cc:354
-#, c-format
+#, fuzzy, c-format
 msgid "Relocation file: %s"
-msgstr "Paikannustiedosto: %s"
+msgstr "Paikannustiedosto %s\n"
 
 #: relocate.cc:390
 #, c-format
@@ -1586,7 +1607,7 @@ msgstr "liian monta törmäävää taukoa"
 #: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
-msgstr "taukoa `%s' ei löytynyt"
+msgstr "taukoa `%s' ei löytynyt"
 
 #: score-engraver.cc:67
 #, c-format
@@ -1595,7 +1616,7 @@ msgstr "`%s' ei lyötynyt"
 
 #: score-engraver.cc:69
 msgid "Music font has not been installed properly."
-msgstr "Musiikkikirjasimia ei ole asennettu kunnolla."
+msgstr "Fontteja ei oltu asennettu kunnolla."
 
 #: score-engraver.cc:71
 #, c-format
@@ -1616,16 +1637,17 @@ msgstr "tämä on edellinen musiikki"
 
 #: score.cc:231
 msgid "errors found, ignoring music expression"
-msgstr "virheitä löytyi, ohitetaan musiikki-ilmaisu"
+msgstr "virheitä löytyi, sivuutetaan musiikki-ilmaisu"
 
 #. FIXME:
 #: script-engraver.cc:102
+#, fuzzy
 msgid "do not know how to interpret articulation: "
 msgstr "ei tiedetä kuinka tulkita artikulaatio: "
 
 #: script-engraver.cc:103
 msgid "scheme encoding: "
-msgstr "scheme-koodaus: "
+msgstr "scheme koodaus: "
 
 #: simple-spacer.cc:375
 #, c-format
@@ -1635,7 +1657,7 @@ msgstr "Ei jousta sarakkeen %d ja sitä seuraavan välillä"
 #: slur-engraver.cc:83 tuplet-engraver.cc:75
 #, c-format
 msgid "direction of %s invalid: %d"
-msgstr "kohteen %s suunta on epäkelpo: %d"
+msgstr ""
 
 #: slur-engraver.cc:157
 msgid "unterminated slur"
@@ -1670,12 +1692,12 @@ msgstr "ehkä syötteen täytyisi määrittää moniäänisiä ääniä"
 
 #: stem.cc:105
 msgid "weird stem size, check for narrow beams"
-msgstr "outo varren koko, katso lyhyemmät palkit"
+msgstr "outo varren koko, koeta lyhyempiä palkkeja"
 
 #: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
-msgstr "lippua `%s' ei löytynyt"
+msgstr "lippua `%s' ei löydetty"
 
 #: stem.cc:652
 #, c-format
@@ -1685,12 +1707,12 @@ msgstr "lipun piirtoa `%s' ei löytynyt"
 #: system.cc:180
 #, c-format
 msgid "Element count %d."
-msgstr "Elementtien määrä %d."
+msgstr "Elementtien määrä: %d."
 
 #: system.cc:276
 #, c-format
 msgid "Grob count %d"
-msgstr "Graafisien objektien (grob) määrä %d "
+msgstr "Graafisien objektien (grob) määrä: %d "
 
 #: text-spanner-engraver.cc:61
 msgid "cannot find start of text spanner"
@@ -1733,17 +1755,17 @@ msgstr "tuntematon tulkitsija: `%s'"
 #: translator-group.cc:151
 #, c-format
 msgid "cannot find: `%s'"
-msgstr "ei löytynyt: `%s'"
+msgstr "ei löytynyt `%s'"
 
 #: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
-msgstr "Kaksi samanaikaista %s -tapahtumaa, hylätään tämä"
+msgstr "Kaksi samanaikaista %s-tapahtumaa, hylätään tämä"
 
 #: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
-msgstr "Edellinen %s -tapahtuma täällä"
+msgstr "Edellinen %s-tapahtuma täällä"
 
 #: trill-spanner-engraver.cc:68
 msgid "cannot find start of trill spanner"
@@ -1759,7 +1781,7 @@ msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
 "selected ligature style"
 msgstr ""
-"sivuutetaan prefiksi(t) `%s' tälle nuottipäälle valitun ligatuurityylin "
+"sivuutetaan prefiksi (t) `%s' tälle nuottipäälle valitun ligatuurityylin "
 "mukaisesti"
 
 #: vaticana-ligature-engraver.cc:714
@@ -1791,7 +1813,7 @@ msgstr "löytyi ja volta-ladoke, lopetetaan se ennenaikaisesti"
 
 #: volta-engraver.cc:158
 msgid "also already have an ended spanner"
-msgstr "myös jo on päätetty ladoke"
+msgstr "myös tekstileike päätettiin jo"
 
 #: volta-engraver.cc:159
 msgid "giving up"
@@ -1807,19 +1829,19 @@ msgstr "tarvitaan \\paper paperiryhmälle"
 
 #: parser.yy:1172
 msgid "Grob name should be alphanumeric"
-msgstr "Graafisen objektin nimessä voi olla vain kirjaimia tai numeroita"
+msgstr "Graafiseen objectiin täytyy olla kirjain tai numero"
 
 #: parser.yy:1475
 msgid "second argument must be pitch list"
-msgstr "toisen muuttujan on oltava äänenkorkeuslista"
+msgstr "toisen argumentin on oltava äänenkorkeuslista"
 
 #: parser.yy:1502 parser.yy:1507 parser.yy:1972
 msgid "have to be in Lyric mode for lyrics"
-msgstr "täytyy olla Lyrics -tilassa sanoitusta varten"
+msgstr "täytyy olla Lyrics -moodissa lyriikkaa varten"
 
 #: parser.yy:1604
 msgid "expecting string as script definition"
-msgstr "oletetaan merkkijonon olevan skriptimääritys"
+msgstr "oletetaan merkkijonon olevan skriptimäärittely"
 
 #: parser.yy:1759 parser.yy:1809
 #, c-format
@@ -1828,11 +1850,11 @@ msgstr "ei ole kesto: %d"
 
 #: parser.yy:1926
 msgid "have to be in Note mode for notes"
-msgstr "täytyy olla Note -tilassa nuotteja varten"
+msgstr "täytyy olla Note -moodissa nuotteja varten"
 
 #: parser.yy:1987
 msgid "have to be in Chord mode for chords"
-msgstr "täytyy olla Chord -tilassa sointuja varten"
+msgstr "täytyy olla Chord -moodissa sointuja varten"
 
 #: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
@@ -1840,16 +1862,16 @@ msgstr "satunnainen UTF-8 BOM (osaluettelo) havaittu"
 
 #: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
-msgstr "Ohitetaan UTF-8 BOM (osaluettelo)"
+msgstr "Sivuutetaan UTF-8 BOM (osaluettelo)"
 
 #: lexer.ll:235
 #, c-format
 msgid "Renaming input to: `%s'"
-msgstr "Uudelleennimetään syöte kohteeseen: `%s'"
+msgstr "Avataan syöte: `%s'"
 
 #: lexer.ll:252
 msgid "quoted string expected after \\version"
-msgstr "kohteen \\version jälkeen ei löytynyt  lainausmerkittyä merkkijonoa"
+msgstr "lainausmerkittyä merkkijonoa ei löytynyt kohteen \\version jälkeen"
 
 #: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
@@ -1861,11 +1883,11 @@ msgstr "odotettiin kokonaislukua \\sourcefilename:n jälkeen"
 
 #: lexer.ll:273
 msgid "EOF found inside a comment"
-msgstr "EOF (tiedoston loppumerkintä) löytyi kommentin sisältä"
+msgstr "EOF löytyi kommentin sisältä"
 
 #: lexer.ll:288
 msgid "\\maininput not allowed outside init files"
-msgstr "\\maininput ei ole sallittu alustustiedostojen ulkopuolella"
+msgstr "\\maininput ei ole sallittu init-alustustiedoston ulkopuolella"
 
 #: lexer.ll:312
 #, c-format
@@ -1875,15 +1897,15 @@ msgstr "väärä tai määrittämätön tunniste: `%s'"
 #. backup rule
 #: lexer.ll:321
 msgid "end quote missing"
-msgstr "päättävä lainausmerkki puuttuu"
+msgstr "jälkimmäinen lainaismerkki puuttuu"
 
 #: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Sulkumerkki löytyi sanoituksen lopussa.  Unohditko välilyönnin?"
+msgstr "Sulkumerkki löytyi lyriikan lopussa.  Unohditko välilyönnin?"
 
 #: lexer.ll:559
 msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Sulkumerkki löytyi sanoituksen lopussa.  Unohditko välilyönnin?"
+msgstr "Sulkumerkki löytyi lyriikan lopussa.  Unohditko välilyönnin?"
 
 #: lexer.ll:659
 #, c-format
@@ -1893,21 +1915,22 @@ msgstr "epäkelpo merkki: `%c'"
 #: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
-msgstr "tuntematon koodinvaihtomerkillinen merkkijono: `\\%s'"
+msgstr "tuntematon koodinvaihtomerkillinen merkkijono: `\\\\%s'"
 
 #: lexer.ll:880 lexer.ll:881
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
-msgstr "tiedosto liian vanha: %s (vanhin tuettu: %s)"
+msgstr ""
 
 #: lexer.ll:881 lexer.ll:882
+#, fuzzy
 msgid "consider updating the input with the convert-ly script"
-msgstr "harkitse syötteen päivittämistä convert-ly skriptillä"
+msgstr "Harkitse syötteen päivittämistä convert-ly scriptillä"
 
 #: lexer.ll:887 lexer.ll:888
 #, c-format
 msgid "program too old: %s (file requires: %s)"
-msgstr "ohjelma liian vanha: %s (tiedosto vaatii: %s)"
+msgstr ""
 
 #: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
 #, scheme-format
@@ -1927,7 +1950,7 @@ msgstr "Muunnetaan kohteeksi `~a'..."
 #: backend-library.scm:108
 #, scheme-format
 msgid "Converting to ~a..."
-msgstr "Muunnetaan kohteeksi ~a..."
+msgstr "Muunnetaan kohteeksi `~a'..."
 
 #: backend-library.scm:145
 #, scheme-format
@@ -1938,12 +1961,12 @@ msgstr "Kirjoitetaan otsaketietue `~a' kohteeseen `~a'..."
 #: define-music-properties.scm:10
 #, scheme-format
 msgid "symbol ~S redefined"
-msgstr "merkki ~S määriteltiin uudelleen"
+msgstr "symbol ~S määriteltiin uudelleen"
 
 #: define-event-classes.scm:119
 #, scheme-format
 msgid "event class ~A seems to be unused"
-msgstr "tapahtumaluokka ~A näyttää olevan käyttämätön"
+msgstr "tapahtumaluokka ~A näkyy olevan käyttämätön"
 
 #. should be programming-error
 #: define-event-classes.scm:125
@@ -1954,22 +1977,22 @@ msgstr "kääntäjä kuuntelee olematonta tapahtumaluokkaa ~A"
 #: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
-"kokonaisuuksia ei löytynyt \\score -merkinnässä, onko siinä \\layout -lohkoa?"
+"systeemejä ei löytynyt \\score merkinnässä, onko siinä \\layout blokkia?"
 
 #: define-markup-commands.scm:1297
 #, scheme-format
 msgid "not a valid duration string: ~a"
-msgstr "epäkelmo keston merkkijono: ~a"
+msgstr "ei ole sallittu keston merkkijono: ~a"
 
 #: define-music-types.scm:751
 #, scheme-format
 msgid "symbol expected: ~S"
-msgstr "odotettiin merkkiä: ~S"
+msgstr "odotettiin symboli: ~S"
 
 #: define-music-types.scm:754
 #, scheme-format
 msgid "cannot find music object: ~S"
-msgstr "ei löytynyt musiikkikohdetta: ~S"
+msgstr "ei löytynyt musiikkiobjektia: ~S"
 
 #: define-music-types.scm:774
 #, scheme-format
@@ -1983,7 +2006,7 @@ msgstr "Katso tiedostosta music-types.scm tuetut toistotyypit"
 #: document-backend.scm:91
 #, scheme-format
 msgid "pair expected in doc ~s"
-msgstr "odotettiin paria dokumentissa ~s"
+msgstr "pari odotettiin dokumentissa ~s"
 
 #: document-backend.scm:135
 #, scheme-format
@@ -1998,7 +2021,7 @@ msgstr "tuntematon ladoke-rajapinta: ~S"
 #: documentation-lib.scm:45
 #, scheme-format
 msgid "Processing ~S..."
-msgstr "Käsitellään ~S..."
+msgstr "Prosessoidaan ~S..."
 
 #: documentation-lib.scm:150
 #, scheme-format
@@ -2026,26 +2049,27 @@ msgid "cannot extract file matching ~a from ~a"
 msgstr "Ei voitu poimia sopivaa tiedoa ~a:sta ~a:han"
 
 #: framework-ps.scm:349
-#, scheme-format
+#, fuzzy, scheme-format
 msgid "do not know how to embed ~S=~S"
 msgstr "ei tiedetä kuinka upottaa ~S=~S"
 
 #: framework-ps.scm:380
-#, scheme-format
+#, fuzzy, scheme-format
 msgid "do not know how to embed font ~s ~s ~s"
-msgstr "ei tiedetä kuinka upottaa kirjasin ~s ~s ~s"
+msgstr "ei tiedetä kuinka sijoittaa fontti ~s ~s ~s"
 
 #: framework-ps.scm:729
 #, scheme-format
 msgid "cannot convert <stdout> to ~S"
-msgstr "ei voida muuntaa <stdout> kohteeksi ~S"
+msgstr "ei voida konvertoida <stdout> ~S:ksi"
 
 #: framework-ps.scm:748 framework-ps.scm:751
 #, scheme-format
 msgid "cannot generate ~S using the postscript back-end"
-msgstr "ei voida luoda ~S käyttäen PostScript -päätä"
+msgstr "ei voida generoida ~S käyttäen postscript päänä"
 
 #: framework-ps.scm:758
+#, fuzzy
 msgid ""
 "\n"
 "The PostScript backend does not support the 'classic'\n"
@@ -2055,8 +2079,7 @@ msgid ""
 "\n"
 "or remove the lilypond-book specific settings from the input.\n"
 msgstr ""
-"\n
PostScript -pää ei tue 'klassista' kehystä.\n
Käytä EPS -päätä sen "
-"sijaan,\n"
+"nPostScript -pää ei tue 'klassista' kehystä. Käytä EPS -pääätä sensijaan\n"
 " \n"
 "  lilypond -b eps <file>\n"
 "\n"
@@ -2070,7 +2093,7 @@ msgstr "TeX -tiedostoniemessä ei saa olla välilyöntejä: `~a'"
 #: layout-beam.scm:29
 #, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
-msgstr "Virhe palkin laskennassa.  Odotettiin (~S,~S) löytyi ~S."
+msgstr "Virhe palkin laskennassa.  Odotettiin (~S,~S), löytyi ~S."
 
 #: layout-beam.scm:46
 #, scheme-format
@@ -2090,7 +2113,7 @@ msgstr "tuntematon yksikkö: ~S"
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
-"ei löytynyt \\version-määrittelyä, ole hyvä ja lisää ~a yhteensopivuuden "
+"ei löytynyt \\version-määrittelyä, ole hyvä ja lisää~a yhteensopivuuden "
 "varalle"
 
 #: lily-library.scm:633
@@ -2098,45 +2121,46 @@ msgid "old relative compatibility not used"
 msgstr "vanhaa relative -yhteensopivuutta ei käytetty"
 
 #: lily.scm:144
-#, scheme-format
+#, fuzzy, scheme-format
 msgid "cannot find: ~A"
-msgstr "ei löydetty: ~A"
+msgstr "Ei löydetty ~A"
 
 #: lily.scm:209
 #, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
-msgstr "väärä tyyppi muuttujalle ~a.  Odotettiin ~a, löytyi ~s"
+msgstr "väärä tyyppi argumentille ~a.  Odotettiin ~a, löytyi ~s"
 
 #: lily.scm:525 lily.scm:589
 #, scheme-format
 msgid "failed files: ~S"
-msgstr "rikkinäiset tiedostot: ~S"
+msgstr "epäonniset tiedostot: ~S"
 
 #: lily.scm:579
 #, scheme-format
 msgid "Redirecting output to ~a..."
-msgstr "Ohjataan tulosteet kohtaan ~a..."
+msgstr "Ohjataan tulosteet paikkaan ~a..."
 
 #: ly-syntax-constructors.scm:40
 msgid "Music head function must return Music object"
-msgstr "Music-pääfunktion täytyy palauttaa Music-kohde"
+msgstr "Music-pääfunktion täytyy palauttaa Music-objekti"
 
 #: ly-syntax-constructors.scm:136
 #, scheme-format
 msgid "Invalid property operation ~a"
-msgstr "Tuntematon ominaisuuden toiminta ~a"
+msgstr "Tuntematon ominaisuustoiminta ~a"
 
 #: markup.scm:123
 #, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
-msgstr "Väärä muuttujien määrä.  Odotettiin: ~A, löytyi ~A: ~S"
+msgstr "Väärä argumenttin määrä.  Odotettiin: ~A, löytyi ~A: ~S"
 
 #: markup.scm:129
 #, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
-msgstr "Väärä muuttuja paikassa ~A.  Odotettiin: ~A, löytyi: ~S."
+msgstr "Väärä argumentti paikassa ~A.  Odotettiin: ~A, löytyi: ~S."
 
 #: music-functions.scm:213
+#, fuzzy
 msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr ""
 "Enemmän vaihtoehtoja kuin kertauksia. Hylätään ylimääräiset vaihtoehdot"
@@ -2158,18 +2182,18 @@ msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr "Tahtiviivan tarkistus epäonnistui.  Odotettiin: ~a, löytyi: ~a"
 
 #: music-functions.scm:748
-#, scheme-format
+#, fuzzy, scheme-format
 msgid "cannot find quoted music: `~S'"
-msgstr "ei löytynyt lainusmerkittyä musiikkia: `~S'"
+msgstr "ei löytynyt lainusmerkittyä musiikkai `~S'"
 
 #: music-functions.scm:942
 #, scheme-format
 msgid "unknown accidental style: ~S"
-msgstr "tuntematon korotusmerkin tyyli: ~S"
+msgstr "tuntematan kortusmerkkityyli: ~S"
 
 #: output-ps.scm:315
 msgid "utf-8-string encountered in PS backend"
-msgstr "utf8-merkkijono havaittu PS -päässä"
+msgstr "utf8-merkkijono havaittu PS päässä"
 
 #: output-svg.scm:42
 #, scheme-format
@@ -2179,21 +2203,21 @@ msgstr "määrittämätön: ~S"
 #: output-svg.scm:132
 #, scheme-format
 msgid "cannot decypher Pango description: ~a"
-msgstr "ei voitu purkaa Pango-koodia kuvauksessa: ~a"
+msgstr "decypher ei onnistunut Pango kuvauksessa: ~a"
 
 #: output-tex.scm:98
 #, scheme-format
 msgid "cannot find ~a in ~a"
-msgstr "ei löytynyt ~a paikasta ~a"
+msgstr "ei löytynyt ~a paikassa ~a"
 
 #: paper.scm:69
 msgid "Not in toplevel scope"
-msgstr "Ei ylätason piirissä"
+msgstr "Ei huipputason piirissä"
 
 #: paper.scm:117
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
-msgstr "Tämä ei ole \\layout {} -kohde, ~S"
+msgstr "Tämä ei ole \\layout {} objekti, ~S"
 
 #: paper.scm:129
 #, scheme-format
@@ -2218,12 +2242,12 @@ msgstr "katso tiedostosta scm/clef.scm tuetut avaimet"
 #: ps-to-png.scm:88
 #, scheme-format
 msgid "~a exited with status: ~S"
-msgstr "~a loppui tilassa: ~S"
+msgstr "~a komento lopetettiin tilassa: ~S"
 
 #: to-xml.scm:190
-#, scheme-format
+#, fuzzy, scheme-format
 msgid "assertion failed: ~S"
-msgstr "ajaminen epäonnistui: ~S"
+msgstr "ajaminen epäonnistui"
 
 #~ msgid "silly pitch"
 #~ msgstr "sekava äänenkorkeus"
@@ -2279,4 +2303,3 @@ msgstr "ajaminen epäonnistui: ~S"
 
 #~ msgid "Incorrect lilypond version: %s (%s, %s)"
 #~ msgstr "Epäkelpo lilypond versio: %s (%s, %s)"
-
index e76c0f828dd143f0f5cc1a0e5db539a1da8c7fe7..a57aa8f39801faae9fc7e46391e01e3229e7e0e3 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -3,14 +3,14 @@
 # French translation of GNU/lilypond - http//lilypond.org
 # Copyright © 2004 Free Software Foundation, Inc.
 # Michel Robitaille <robitail@IRO.UMontreal.CA>, 1996-2007.
-# Jean-Charles Malahieude <lilyfan@orange.fr>, 2007-2012
+# Jean-Charles Malahieude <lilyfan@orange.fr>, 2007-2013
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.15.95\n"
+"Project-Id-Version: lilypond 2.17.96\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2012-08-11 14:29+0200\n"
-"PO-Revision-Date: 2012-08-14 19:48+0200\n"
+"POT-Creation-Date: 2013-11-24 12:14+0000\n"
+"PO-Revision-Date: 2013-11-27 19:16+0100\n"
 "Last-Translator: Jean-Charles Malahieude <lilyfan@orange.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
@@ -28,22 +28,22 @@ msgstr "fichier non trouvé : %s"
 msgid "Output function not implemented"
 msgstr "Fonction de production non implémentée."
 
-#: book_latex.py:170
+#: book_latex.py:174
 msgid "cannot find \\begin{document} in LaTeX document"
 msgstr "Impossible de trouver \\begin{document} dans le document LaTeX."
 
-#: book_latex.py:188
+#: book_latex.py:190
 #, python-format
 msgid "Running `%s' on file `%s' to detect default page settings.\n"
 msgstr ""
 "Traitement par « %s » du fichier « %s »\n"
-"pour déterminer la mise en page par défaut.\n"
+"  pour déterminer la mise en page par défaut.\n"
 
-#: book_latex.py:209 book_texinfo.py:228
+#: book_latex.py:212 book_texinfo.py:228
 msgid "Unable to auto-detect default settings:\n"
 msgstr "Impossible de détecter automatiquement les réglages par défaut :\n"
 
-#: book_latex.py:221 book_texinfo.py:240
+#: book_latex.py:224 book_texinfo.py:240
 #, python-format
 msgid ""
 "Unable to auto-detect default settings:\n"
@@ -52,77 +52,81 @@ msgstr ""
 "Impossible de détecter automatiquement les réglages par défaut :\n"
 "%s"
 
-#: book_snippets.py:409
+#: book_latex.py:247
+msgid "cannot detect textwidth from LaTeX"
+msgstr "impossible d'extraire la largeur du texte à partir de LaTeX"
+
+#: book_snippets.py:406
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "option ly-option obsolète : %s=%s"
 
-#: book_snippets.py:411
+#: book_snippets.py:408
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr "bascule en mode de compatibilité : %s=%s"
 
-#: book_snippets.py:414
+#: book_snippets.py:411
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "option ly-option obsolète : %s"
 
-#: book_snippets.py:416
+#: book_snippets.py:413
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr "bascule en mode de compatibilité : %s"
 
-#: book_snippets.py:533
+#: book_snippets.py:530
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "option ly inconnue et ignorée : %s"
 
-#: book_snippets.py:624
+#: book_snippets.py:621
 #, python-format
 msgid "Missing files: %s"
 msgstr "Fichier absent : %s"
 
-#: book_snippets.py:654
+#: book_snippets.py:651
 #, python-format
 msgid "Could not overwrite file %s"
 msgstr "Impossible d'écraser le fichier « %s »"
 
-#: book_snippets.py:741
+#: book_snippets.py:738
 #, python-format
 msgid "Running through filter `%s'"
 msgstr "Passage par le filtre « %s »"
 
-#: book_snippets.py:761
+#: book_snippets.py:759
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "« %s » a échoué (%d)"
 
-#: book_snippets.py:762
+#: book_snippets.py:760
 msgid "The error log is as follows:"
 msgstr "Voici le journal d'erreurs :"
 
-#: book_snippets.py:882
+#: book_snippets.py:880
 #, python-format
 msgid "Converting MusicXML file `%s'...\n"
 msgstr "Lecture du fichier MusicXML « %s »...\n"
 
-#: book_snippets.py:909
+#: book_snippets.py:907
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of original file,\n"
 "printing diff against existing file."
 msgstr ""
 "%s : fichier en doublon mais contenu différent de l'original,\n"
-"impression d'un différentiel entre les deux fichiers."
+"  impression d'un différentiel entre les deux fichiers."
 
-#: book_snippets.py:922
+#: book_snippets.py:920
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of converted lilypond file,\n"
 "printing diff against existing file."
 msgstr ""
 "%s : fichier en doublon mais contenu différent du fichier lilypond\n"
-"converti, impression d'un différentiel entre les deux fichiers."
+"  converti ; impression d'un différentiel entre les deux fichiers."
 
 #. Work around a texi2pdf bug: if LANG=C is not given, a broken regexp is
 #. used to detect relative/absolute paths, so the absolute path is not
@@ -130,133 +134,133 @@ msgstr ""
 #: book_texinfo.py:206
 #, python-format
 msgid "Running texi2pdf on file %s to detect default page settings.\n"
-msgstr "Traitement de %s par texi2pdf pour détecter la mise en page par défaut.\n"
+msgstr "Traitement de « %s » par texi2pdf pour détecter la mise en page par défaut.\n"
 
-#: convertrules.py:12
+#: convertrules.py:13
 #, python-format
 msgid "Not smart enough to convert %s."
 msgstr "Pas assez intelligent pour convertir « %s »."
 
-#: convertrules.py:13
+#: convertrules.py:14
 msgid "Please refer to the manual for details, and update manually."
 msgstr ""
 "Consultez le manuel pour plus de détails,\n"
-"et faites la mise à jour manuellement."
+"  et faites la mise à jour manuellement."
 
-#: convertrules.py:14
+#: convertrules.py:15
 #, python-format
 msgid "%s has been replaced by %s"
 msgstr "%s a été remplacé par %s"
 
-#: convertrules.py:24 lilylib.py:131 warn.cc:223
+#: convertrules.py:25 lilylib.py:136 warn.cc:223
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "Avertissement : %s"
 
-#: convertrules.py:49 convertrules.py:94
+#: convertrules.py:50 convertrules.py:95
 msgid "\\header { key = concat + with + operator }"
 msgstr "\\header { clé = concat + avec + opérateur }"
 
-#: convertrules.py:56
+#: convertrules.py:57
 #, python-format
 msgid "deprecated %s"
 msgstr "%s est obsolète"
 
-#: convertrules.py:65
+#: convertrules.py:66
 msgid "deprecated \\textstyle, new \\key syntax"
 msgstr "\\textstyle est obsolète ; utiliser désormais la syntaxe \\key"
 
-#: convertrules.py:81 convertrules.py:1855 convertrules.py:2031
-#: convertrules.py:2174 convertrules.py:2505 convertrules.py:2800
-#: convertrules.py:3150
+#: convertrules.py:82 convertrules.py:1856 convertrules.py:2032
+#: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801
+#: convertrules.py:3151 convertrules.py:3385
 msgid "bump version for release"
 msgstr "sauter de version pour mise à jour"
 
-#: convertrules.py:97
+#: convertrules.py:98
 msgid "new \\header format"
 msgstr "nouveau format de \\header"
 
-#: convertrules.py:124
+#: convertrules.py:125
 msgid "\\translator syntax"
 msgstr "syntaxe de \\translator"
 
-#: convertrules.py:175
+#: convertrules.py:176
 msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
 msgstr "\\repeat NUM Musique Alternative -> \\repeat FOLDSTR Musique Alternative"
 
-#: convertrules.py:205 convertrules.py:678 convertrules.py:1350
-#: convertrules.py:2317
+#: convertrules.py:206 convertrules.py:679 convertrules.py:1351
+#: convertrules.py:2318
 #, python-format
 msgid "deprecate %s"
 msgstr "%s obsolète"
 
-#: convertrules.py:279
+#: convertrules.py:280
 #, python-format
 msgid "deprecate %s "
 msgstr "%s obsolète"
 
-#: convertrules.py:305
+#: convertrules.py:306
 msgid "new \\notenames format"
 msgstr "nouveau format de \\notenames"
 
-#: convertrules.py:321
+#: convertrules.py:322
 msgid "new tremolo format"
 msgstr "nouveau format de tremolo"
 
-#: convertrules.py:325
+#: convertrules.py:326
 msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver"
 msgstr "Staff_margin_engraver est obsolète ; utiliser Instrument_name_engraver"
 
-#: convertrules.py:376
+#: convertrules.py:377
 msgid "change property definition case (eg. onevoice -> oneVoice)"
 msgstr "modifier la casse pour définir une propriété (par ex. onevoice -> oneVoice)"
 
-#: convertrules.py:437
+#: convertrules.py:438
 msgid "new \\textscript markup text"
 msgstr "nouvelle étiquette de texte \\textscript"
 
-#: convertrules.py:509
+#: convertrules.py:510
 #, python-format
 msgid "identifier names: %s"
 msgstr "Nom des identificateurs : %s"
 
-#: convertrules.py:548
+#: convertrules.py:549
 msgid "point-and-click argument changed to procedure."
 msgstr "L'argument de point-and-click a été changé en procédure."
 
-#: convertrules.py:590
+#: convertrules.py:591
 msgid "semicolons removed"
 msgstr "Suppression des points-virgules"
 
 #. 40 ?
-#: convertrules.py:633
+#: convertrules.py:634
 #, python-format
 msgid "%s property names"
 msgstr "%s noms de propriété"
 
-#: convertrules.py:703
+#: convertrules.py:704
 msgid "automaticMelismata turned on by default"
 msgstr "automaticMelismata est activé par défaut."
 
-#: convertrules.py:708
+#: convertrules.py:709
 msgid "automaticMelismata is turned on by default since 1.5.67."
 msgstr "automaticMelismata est activé par défaut depuis la version 1.5.67."
 
-#: convertrules.py:942 convertrules.py:1635 convertrules.py:1889
-#: convertrules.py:2134
+#: convertrules.py:943 convertrules.py:1636 convertrules.py:1890
+#: convertrules.py:2135
 #, python-format
 msgid "remove %s"
 msgstr "Retrait de %s"
 
-#: convertrules.py:977 convertrules.py:980
+#: convertrules.py:978 convertrules.py:981
 msgid "cluster syntax"
 msgstr "Syntaxe de cluster"
 
-#: convertrules.py:987
+#: convertrules.py:988
 msgid "new Pedal style syntax"
 msgstr "Nouvelle syntaxe du style de Pedal"
 
-#: convertrules.py:1246
+#: convertrules.py:1247
 msgid ""
 "New relative mode,\n"
 "Postfix articulations, new text markup syntax, new chord syntax."
@@ -264,30 +268,30 @@ msgstr ""
 "Nouveau mode relatif, articulations Postfix,\n"
 "nouvelle syntaxe des étiquettes de texte, nouvelle syntaxe d'accord."
 
-#: convertrules.py:1259
+#: convertrules.py:1260
 msgid "Remove - before articulation"
 msgstr "Retrait du - précédant l'articulation"
 
-#: convertrules.py:1294
+#: convertrules.py:1295
 #, python-format
 msgid "%s misspelling"
 msgstr "%s mal orthographié"
 
-#: convertrules.py:1313
+#: convertrules.py:1314
 msgid "Swap < > and << >>"
 msgstr "Interchanger < > et << >>"
 
-#: convertrules.py:1316
+#: convertrules.py:1317
 msgid "attempting automatic \\figures conversion.  Check results!"
 msgstr ""
 "tentative de conversion automatique des \\figures.\n"
-"Résultats à vérifier !"
+"  Résultats à vérifier !"
 
-#: convertrules.py:1362
+#: convertrules.py:1363
 msgid "Use Scheme code to construct arbitrary note events."
 msgstr "Utilisation de code Scheme pour construire des événements note arbitraires."
 
-#: convertrules.py:1369
+#: convertrules.py:1370
 msgid ""
 "use symbolic constants for alterations,\n"
 "remove \\outputproperty, move ly:verbose into ly:get-option"
@@ -295,7 +299,7 @@ msgstr ""
 "Utilisation de constantes symboliques pour les altérations,\n"
 "suppression de \\outputproperty, ly:verbose devient ly:get-option"
 
-#: convertrules.py:1394
+#: convertrules.py:1395
 #, python-format
 msgid ""
 "\\outputproperty found,\n"
@@ -312,7 +316,7 @@ msgstr ""
 "\n"
 "comme texte de substitution."
 
-#: convertrules.py:1406
+#: convertrules.py:1407
 msgid ""
 "The alteration field of Scheme pitches was multiplied by 2\n"
 "to support quarter tone accidentals.  You must update the following constructs manually:\n"
@@ -327,15 +331,15 @@ msgstr ""
 "* appels à ly:make-pitch et ly:pitch-alteration\n"
 "* recours à \\property pour définir keySignature\n"
 
-#: convertrules.py:1449
+#: convertrules.py:1450
 msgid "removal of automaticMelismata; use melismaBusyProperties instead."
 msgstr "Suppression de automaticMelismata au profit de melismaBusyProperties."
 
-#: convertrules.py:1556
+#: convertrules.py:1557
 msgid "\\partcombine syntax change to \\newpartcombine"
 msgstr "La syntaxe de \\partcombine évolue avec \\newpartcombine"
 
-#: convertrules.py:1581
+#: convertrules.py:1582
 msgid ""
 "Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
 "Harmonic notes. Thread context removed. Lyrics context removed."
@@ -343,11 +347,11 @@ msgstr ""
 "Changements de notation pour percussions. Suppression de \\chordmodifiers\n"
 "et \\notenames. Notes harmoniques. Contextes Thread et Lyrics supprimés."
 
-#: convertrules.py:1585
+#: convertrules.py:1586
 msgid "Drums found. Enclose drum notes in \\drummode"
 msgstr "Il y a des percussions. Encadrer leurs notes dans un \\drummode."
 
-#: convertrules.py:1596 convertrules.py:1603 convertrules.py:1614
+#: convertrules.py:1597 convertrules.py:1604 convertrules.py:1615
 #, python-format
 msgid ""
 "\n"
@@ -356,33 +360,33 @@ msgstr ""
 "\n"
 "Détection de %s. Vérifier le fichier manuellement !\n"
 
-#: convertrules.py:1596
+#: convertrules.py:1597
 msgid "Drum notation"
 msgstr "Notation de percussions"
 
-#: convertrules.py:1655
+#: convertrules.py:1656
 msgid "new syntax for property settings:"
 msgstr "nouvelle syntaxe des réglages de propriétés :"
 
-#: convertrules.py:1681
+#: convertrules.py:1682
 msgid "Property setting syntax in \\translator{ }"
 msgstr "Syntaxe pour régler une propriété dans \\translator{ }"
 
-#: convertrules.py:1720
+#: convertrules.py:1721
 msgid "Scheme grob function renaming"
 msgstr "Renommage de fonction grob Scheme"
 
-#: convertrules.py:1731 convertrules.py:2138 convertrules.py:2142
-#: convertrules.py:2708
+#: convertrules.py:1732 convertrules.py:2139 convertrules.py:2143
+#: convertrules.py:2709
 #, python-format
 msgid "Use %s\n"
 msgstr "Utilisation de %s\n"
 
-#: convertrules.py:1747
+#: convertrules.py:1748
 msgid "More Scheme function renaming"
 msgstr "Renommage d'autres fonctions Scheme"
 
-#: convertrules.py:1871
+#: convertrules.py:1872
 msgid ""
 "Page layout has been changed, using paper size and margins.\n"
 "textheight is no longer used.\n"
@@ -390,7 +394,7 @@ msgstr ""
 "La mise en page a été modifiée, utilisant la taille du papier et les marges.\n"
 "« textheight » n'est plus utilisé.\n"
 
-#: convertrules.py:1957
+#: convertrules.py:1958
 msgid ""
 "\\foo -> \\foomode (for chords, notes, etc.)\n"
 "fold \\new FooContext \\foomode into \\foo."
@@ -398,7 +402,7 @@ msgstr ""
 "\\toto -> \\totomode (pour accords, notes, etc.)\n"
 "transforme « \\new TotoContext \\totomode » en \\toto."
 
-#: convertrules.py:1995
+#: convertrules.py:1996
 msgid ""
 "staff size should be changed at top-level\n"
 "with\n"
@@ -412,40 +416,42 @@ msgstr ""
 "  #(set-global-staff-size <HAUTEUR-DE-PORTÉE-EN-POINTS>)\n"
 "\n"
 
-#: convertrules.py:2015
+#: convertrules.py:2016
 msgid "regularize other identifiers"
 msgstr "Normalisation d'autres identifiants"
 
-#: convertrules.py:2083
+#: convertrules.py:2084
 msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
-msgstr "\\encoding : recodage latin1..utf-8. Suppression de ly:point-and-click"
+msgstr ""
+"\\encoding : recodage de latin1 à utf-8.\n"
+"Suppression de ly:point-and-click"
 
-#: convertrules.py:2094
+#: convertrules.py:2095
 msgid "LilyPond source must be UTF-8"
 msgstr "Le fichier source LilyPond doit être codé en UTF-8."
 
-#: convertrules.py:2097
+#: convertrules.py:2098
 msgid "Try the texstrings backend"
 msgstr "Essayer le moteur texstrings (texstrings backend)."
 
-#: convertrules.py:2100
+#: convertrules.py:2101
 #, python-format
 msgid "Do something like: %s"
 msgstr "Faites quelque chose comme : %s"
 
-#: convertrules.py:2103
+#: convertrules.py:2104
 msgid "Or save as UTF-8 in your editor"
 msgstr "ou sauvegardez au format UTF-8 à l'aide de votre éditeur"
 
-#: convertrules.py:2153
+#: convertrules.py:2154
 msgid "warn about auto beam settings"
 msgstr "Avertissement au sujet des ligatures automatiques"
 
-#: convertrules.py:2157
+#: convertrules.py:2158
 msgid "auto beam settings"
 msgstr "réglage des ligatures automatiques"
 
-#: convertrules.py:2158
+#: convertrules.py:2159
 msgid ""
 "\n"
 "Auto beam settings must now specify each interesting moment in a measure\n"
@@ -455,39 +461,39 @@ msgstr ""
 "Le réglage des ligatures automatiques doit explicitement spécifier chaque\n"
 "moment de la mesure. 1/4 ne prend désormais plus en charge 1/2 et 3/4.\n"
 
-#: convertrules.py:2271
+#: convertrules.py:2272
 msgid "verticalAlignmentChildCallback has been deprecated"
 msgstr "verticalAlignmentChildCallback est désuet"
 
-#: convertrules.py:2276
+#: convertrules.py:2277
 msgid "Remove callbacks property, deprecate XY-extent-callback."
 msgstr "Suppression des propriétés de rappel, les XY-extent-callback sont obsolètes."
 
-#: convertrules.py:2297
+#: convertrules.py:2298
 msgid "Use grob closures iso. XY-offset-callbacks."
 msgstr "Utilisation des clôtures de grob comme avec XY-offset-callbacks."
 
-#: convertrules.py:2359
+#: convertrules.py:2360
 msgid "foobar -> foo-bar for \\paper, \\layout"
 msgstr "taratata -> tara-tata pour \\paper et \\layout"
 
-#: convertrules.py:2469
+#: convertrules.py:2470
 msgid "deprecate \\tempo in \\midi"
 msgstr "\\tempo au sein d'une section \\midi est obsolète"
 
-#: convertrules.py:2522
+#: convertrules.py:2523
 msgid "deprecate cautionary-style. Use AccidentalCautionary properties"
 msgstr "cautionary-style est désuet. Utilisation des propriétés AccidentalCautionary."
 
-#: convertrules.py:2535
+#: convertrules.py:2536
 msgid "Rename accidental glyphs, use glyph-name-alist."
 msgstr "Renommage des glyphes d'altération, utilisation de glyph-name-alist."
 
-#: convertrules.py:2590
+#: convertrules.py:2591
 msgid "edge-text settings for TextSpanner"
 msgstr "réglages des limites de texte pour TextSpanner"
 
-#: convertrules.py:2591
+#: convertrules.py:2592
 #, python-format
 msgid ""
 "Use\n"
@@ -498,35 +504,35 @@ msgstr ""
 "\n"
 "%s"
 
-#: convertrules.py:2624
+#: convertrules.py:2625
 msgid "Use the `alignment-offsets' sub-property of\n"
 msgstr "Utiliser la sous-propriété « alignment-offsets » de\n"
 
-#: convertrules.py:2625
+#: convertrules.py:2626
 msgid "NonMusicalPaperColumn #'line-break-system-details\n"
 msgstr "NonMusicalPaperColumn #'line-break-system-details\n"
 
-#: convertrules.py:2626
+#: convertrules.py:2627
 msgid "to set fixed distances between staves.\n"
 msgstr "pour définir un espacement fixe des systèmes.\n"
 
-#: convertrules.py:2638
+#: convertrules.py:2639
 msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
 msgstr "Pour des lignes continues ou pointillées, utilisez #'style, pas #'dash-fraction."
 
-#: convertrules.py:2644
+#: convertrules.py:2645
 msgid "all settings related to dashed lines"
 msgstr "tous les réglages concernant les lignes pointillées"
 
-#: convertrules.py:2645
+#: convertrules.py:2646
 msgid "Use \\override ... #'style = #'line for solid lines and\n"
 msgstr "Utiliser \\override ... #'style = #'line pour des lignes pleines, et\n"
 
-#: convertrules.py:2646
+#: convertrules.py:2647
 msgid "\t\\override ... #'style = #'dashed-line for dashed lines."
 msgstr "\t\\override ... #'style = #'dashed-line pour des lignes pointillées."
 
-#: convertrules.py:2682
+#: convertrules.py:2683
 msgid ""
 "metronomeMarkFormatter uses text markup as second argument,\n"
 "fret diagram properties moved to fret-diagram-details."
@@ -534,11 +540,11 @@ msgstr ""
 "metronomeMarkFormatter prend une étiquette en deuxième argument,\n"
 "les propriétés des diagrammes de fret sont désormais dans fret-diagram-details."
 
-#: convertrules.py:2688
+#: convertrules.py:2689
 msgid "metronomeMarkFormatter got an additional text argument.\n"
 msgstr "metronomeMarkFormatter prend un argument textuel suplémentaire.\n"
 
-#: convertrules.py:2689
+#: convertrules.py:2690
 #, python-format
 msgid ""
 "The function assigned to Score.metronomeMarkFunction now uses the signature\n"
@@ -547,48 +553,48 @@ msgstr ""
 "La fonction assignée à Score.metronomeMarkFunction utilise la signature\n"
 "%s"
 
-#: convertrules.py:2707
+#: convertrules.py:2708
 #, python-format
 msgid "%s in fret-diagram properties"
 msgstr "%s va dans les propriétés de fret-diagram"
 
-#: convertrules.py:2751
+#: convertrules.py:2752
 msgid "\\put-adjacent argument order"
 msgstr "ordre de l'argument \\put-adjacent"
 
-#: convertrules.py:2752
+#: convertrules.py:2753
 msgid "Axis and direction now come before markups:\n"
 msgstr "Axe et direction doivent précéder les étiquettes :\n"
 
-#: convertrules.py:2753
+#: convertrules.py:2754
 msgid "\\put-adjacent axis dir markup markup."
 msgstr "\\put-adjacent axe direction étiquette étiquette."
 
-#: convertrules.py:2784
+#: convertrules.py:2785
 msgid "re-definition of InnerStaffGroup"
 msgstr "Redéfinition de InnerStaffGroup"
 
-#: convertrules.py:2789
+#: convertrules.py:2790
 msgid "re-definition of InnerChoirStaff"
 msgstr "Redéfinition de InnerChoirStaff"
 
-#: convertrules.py:2799
+#: convertrules.py:2800
 msgid "Syntax changes for \\addChordShape and \\chord-shape"
 msgstr "Changement de syntaxe pour \\addChordShape et \\chord-shape"
 
-#: convertrules.py:2804
+#: convertrules.py:2805
 msgid "stringTuning must be added to addChordShape call.\n"
 msgstr "stringTuning est requis lors de l'appel à addChordShape.\n"
 
-#: convertrules.py:2809
+#: convertrules.py:2810
 msgid "stringTuning must be added to chord-shape call.\n"
 msgstr "stringTuning est requis lors de l'appel à chord-shape.\n"
 
-#: convertrules.py:2815
+#: convertrules.py:2816
 msgid "Remove oldaddlyrics"
 msgstr "Suppression de oldaddlyrics"
 
-#: convertrules.py:2819
+#: convertrules.py:2820
 msgid ""
 "oldaddlyrics is no longer supported. \n"
 "         Use addlyrics or lyrsicsto instead.\n"
@@ -596,7 +602,7 @@ msgstr ""
 "oldaddlyrics n'est désormais plus pris en charge.\n"
 "         Utilisez maintenant addlyrics ou lyricsto.\n"
 
-#: convertrules.py:2825
+#: convertrules.py:2826
 msgid ""
 "keySignature property not reversed any more\n"
 "MIDI 47: orchestral strings -> orchestral harp"
@@ -604,11 +610,11 @@ msgstr ""
 "La propriété keySignature n'est plus inversée\n"
 "MIDI 47 : orchestral strings -> orchestral harp"
 
-#: convertrules.py:2830
+#: convertrules.py:2831
 msgid "The alist for Staff.keySignature is no longer in reversed order.\n"
 msgstr "La liste associative pour Staff.keySignature n'est plus en ordre inverse.\n"
 
-#: convertrules.py:2836
+#: convertrules.py:2837
 msgid ""
 "\\bar \".\" now produces a thick barline\n"
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
@@ -618,15 +624,15 @@ msgstr ""
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
 "Les paramètres du pointillé des liaisons sont gérés par dash-definition."
 
-#: convertrules.py:2842
+#: convertrules.py:2843
 msgid "\\bar \".\" now produces a thick barline.\n"
 msgstr "\\bar \".\" produit désormais une barre épaisse.\n"
 
-#: convertrules.py:2848
+#: convertrules.py:2849
 msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
 msgstr "Les paramètres du pointillé des liaisons sont gérés par `dash-details.\n"
 
-#: convertrules.py:2853
+#: convertrules.py:2854
 msgid ""
 "Autobeaming rules have changed.  override-auto-beam-setting and\n"
 "revert-auto-beam-setting have been eliminated.\n"
@@ -653,19 +659,19 @@ msgstr ""
 "« Piano et nuances entre les portées » est remplacée par le nouveau\n"
 "contexte « Dynamics »."
 
-#: convertrules.py:2867
+#: convertrules.py:2868
 msgid "    Autobeam settings are now overriden with \\overrideBeamSettings.\n"
 msgstr ""
 "   L'introduction d'une dérogation aux ligatures automatiques se fait\n"
 "désormais avec \\overrideBeamSettings.\n"
 
-#: convertrules.py:2872
+#: convertrules.py:2873
 msgid "    Autobeam settings are now reverted with \\revertBeamSettings.\n"
 msgstr ""
 "   La suppression d'une dérogation aux ligatures automatiques se fait\n"
 "   désormais avec \\revertBeamSettings.\n"
 
-#: convertrules.py:2878
+#: convertrules.py:2879
 msgid ""
 "    beatGrouping with a specified context must now be accomplished with\n"
 "   \\overrideBeamSettings.\n"
@@ -673,13 +679,13 @@ msgstr ""
 "   beatGrouping dans un contexte spécifique s'accomplit désormais avec\n"
 "   \\overrideBeamSettings.\n"
 
-#: convertrules.py:2884
+#: convertrules.py:2885
 msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n"
 msgstr ""
 "alignment-offsets est devenu alignment-distances : il faut désormais\n"
 "spécifier la distance entre les portées au lieu de leur offset.\n"
 
-#: convertrules.py:2895
+#: convertrules.py:2896
 msgid ""
 "Remove obsolete engravers/translators: Note_swallow_translator,\n"
 "Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
@@ -691,23 +697,23 @@ msgstr ""
 "Swallow_performer et String_number_engraver.\n"
 "Apparition de nouvelles variables pour l'espacement vertical."
 
-#: convertrules.py:2926
+#: convertrules.py:2927
 msgid "Vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n"
 msgstr "L'espacement vertical ne dépend plus du Y-extent d'un VerticalAxisGroup.\n"
 
-#: convertrules.py:2932
+#: convertrules.py:2933
 msgid "Unify fetaNumber and fetaDynamic encodings"
 msgstr "Uniformisation des encodages de fetaNumber et fetaDynamic."
 
-#: convertrules.py:2937
+#: convertrules.py:2938
 msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 
-#: convertrules.py:2948
+#: convertrules.py:2949
 msgid "\\cresc etc. are now postfix operators"
 msgstr "\\cresc etc. sont désormais des opérateurs postfix"
 
-#: convertrules.py:2960
+#: convertrules.py:2961
 msgid ""
 "Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
@@ -716,23 +722,23 @@ msgstr ""
 "\\overrideBeamSettings et \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
 
-#: convertrules.py:2978
+#: convertrules.py:2979
 msgid "Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"
 msgstr "Utiliser \\set beamExceptions ou \\overrideTimeSignatureSettings.\n"
 
-#: convertrules.py:2982
+#: convertrules.py:2983
 msgid "Use \\set beamExceptions or \\revertTimeSignatureSettings.\n"
 msgstr "Utiliser \\set beamExceptions ou \\revertTimeSignatureSettings.\n"
 
-#: convertrules.py:2986
+#: convertrules.py:2987
 msgid "Use baseMoment, beatStructure, and beamExceptions.\n"
 msgstr "Utiliser baseMoment, beatStructure et beamExceptions.\n"
 
-#: convertrules.py:2990 convertrules.py:2994
+#: convertrules.py:2991 convertrules.py:2995
 msgid "Use baseMoment and beatStructure.\n"
 msgstr "Utiliser baseMoment et beatStructure.\n"
 
-#: convertrules.py:2999
+#: convertrules.py:3000
 msgid ""
 "Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n"
 "Deprecate negative dash-period for hidden lines: use #'style = #'none instead."
@@ -741,13 +747,13 @@ msgstr ""
 "Dépréciation des longueurs de tiret négatives pour des lignes masquées ;\n"
 "utiliser désormais #'style = #'none"
 
-#: convertrules.py:3004
+#: convertrules.py:3005
 msgid "Move size, thickness, and graphic to properties.  Argument should be just the key list.\n"
 msgstr ""
 "Taille, épaisseur et graphique sont des propriétés.\n"
 "L'argument devrait ne contenir que la liste des clés.\n"
 
-#: convertrules.py:3012
+#: convertrules.py:3013
 msgid ""
 "Rename vertical spacing variables.\n"
 "Add fretboard-table argument to savePredefinedFretboard."
@@ -755,23 +761,23 @@ msgstr ""
 "Renommage des variables d'espacement vertical.\n"
 "Ajout de l'argument fretboard-table à savePredefinedFretboard."
 
-#: convertrules.py:3030
+#: convertrules.py:3031
 msgid "Rename vertical spacing grob properties."
 msgstr "Renommage des propriétés d'objet en matière d'espacement vertical."
 
-#: convertrules.py:3046
+#: convertrules.py:3047
 msgid "Remove \\paper variables head-separation and foot-separation."
 msgstr "Suppression des variables de \\paper head-separation et foot-separation."
 
-#: convertrules.py:3050
+#: convertrules.py:3051
 msgid "Adjust settings for top-system-spacing instead.\n"
 msgstr "Ajustez plutôt le réglage de top-system-spacing.\n"
 
-#: convertrules.py:3054
+#: convertrules.py:3055
 msgid "Adjust settings for last-bottom-spacing instead.\n"
 msgstr "Ajustez plutôt le réglage de last-bottom-spacing.\n"
 
-#: convertrules.py:3060
+#: convertrules.py:3061
 msgid ""
 "Rename space to basic-distance in various spacing alists.\n"
 "Remove HarmonicParenthesesItem grob."
@@ -779,19 +785,19 @@ msgstr ""
 "space est renommé basic-distance dans diverses variables liées à l'espacement.\n"
 "Suppression du grob HarmonicParenthesesItem."
 
-#: convertrules.py:3067
+#: convertrules.py:3068
 msgid "HarmonicParenthesesItem has been eliminated.\n"
 msgstr "Élimination de HarmonicParenthesesItem.\n"
 
-#: convertrules.py:3068
+#: convertrules.py:3069
 msgid "Harmonic parentheses are part of the TabNoteHead grob.\n"
 msgstr "Les parenthèses harmoniques sont attachées au grob TabNoteHead.\n"
 
-#: convertrules.py:3073
+#: convertrules.py:3074
 msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n"
 msgstr "Suppression du contexte dans overrideTimeSignatureSettings et revertTimeSignatureSettings.\n"
 
-#: convertrules.py:3080
+#: convertrules.py:3081
 msgid ""
 "Change stringTunings from a list of semitones to a list of pitches.\n"
 "Change tenor and baritone ukulele names in string tunings.\n"
@@ -801,62 +807,72 @@ msgstr ""
 "Les noms de ukulele tenor et baryton sont modifiés en accordage personnalisé.\n"
 "Génération d'un message au besoin pour les conversions liées à l'espacement vertical."
 
-#: convertrules.py:3123
+#: convertrules.py:3124
 msgid "Vertical spacing changes might affect user-defined contexts."
 msgstr ""
 "Les modifications apportées à l'espacement vertical peuvent mettre en\n"
 "péril certains contextes personnalisés."
 
-#: convertrules.py:3129
+#: convertrules.py:3130
 msgid "Replace bar-size with bar-extent."
 msgstr "bar-size devient bar-extent."
 
-#: convertrules.py:3141
+#: convertrules.py:3142
 msgid "Woodwind diagrams: Changes to the clarinet diagram."
 msgstr "Diagrammes pour vents : modifications touchant la clarinette."
 
-#: convertrules.py:3145
+#: convertrules.py:3146
 msgid "Clarinet fingering changed to reflect actual anatomy of instrument.\n"
 msgstr "Les doigtés pour clarinette sont plus adaptés à l'instrument actuel.\n"
 
-#: convertrules.py:3155
+#: convertrules.py:3156
 msgid "Handling of non-automatic footnotes."
 msgstr "Gestion des notes de bas de page non automatisée."
 
-#: convertrules.py:3159
+#: convertrules.py:3160
 msgid "If you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.\n"
 msgstr ""
 "Pour une gestion non automatisée des notes de bas de page, n'oubliez pas\n"
 "de mentionner footnote-auto-numbering = ##f dans le bloc \\paper.\n"
 
-#: convertrules.py:3164
+#: convertrules.py:3165
 msgid "Change in internal property for MultiMeasureRest"
 msgstr "MultiMeasureRest : modification des propriétés internes."
 
-#: convertrules.py:3168
+#: convertrules.py:3169
 msgid "This internal property has been replaced by round-up-to-longer-rest, round-up-exceptions and usable-duration-logs.\n"
 msgstr ""
 "Cette propriété interne est remplacée par round-up-to-longer-rest,\n"
 "round-up-exceptions et usable-duration-logs.\n"
 
-#: convertrules.py:3173
+#: convertrules.py:3174
 msgid "Creation of a Flag grob and moving of certain Stem properties to this grob"
 msgstr "Déplacement de certaine propriétés de Stem vers le nouvel objet Flag"
 
-#: convertrules.py:3209
+#: convertrules.py:3210
 msgid "consistent-broken-slope is now handled through the positions callback.\n"
 msgstr "consistent-broken-slope est désormais géré par des rappels de position.\n"
 
-#: convertrules.py:3210
+#: convertrules.py:3211
 msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n"
 msgstr ""
 "input/regression/beam-broken-classic.ly indique comment sont désormais\n"
 "gérées les ligatures tronquées.\n"
 
-#: convertrules.py:3368
+#: convertrules.py:3369
 msgid "beamExceptions controls whole-measure beaming."
 msgstr "Une ligature sur la mesure est gérée par beamExceptions"
 
+#: convertrules.py:3606
+msgid "Flag.transparent and Flag.color inherit from Stem"
+msgstr "Flag.transparent et Flag.color héritent de Stem"
+
+#: convertrules.py:3672
+msgid "Staff-padding now controls the distance to the baseline, not the nearest point."
+msgstr ""
+"Staff-padding contrôle désormais la distance par rapport à la ligne de\n"
+"  base, au lieu du point le plus proche."
+
 #: fontextract.py:25
 #, python-format
 msgid "Scanning %s"
@@ -872,37 +888,37 @@ msgstr "Extraction de %s"
 msgid "Writing fonts to %s"
 msgstr "Écriture des fontes vers %s"
 
-#: lilylib.py:96
+#: lilylib.py:101
 #, python-format
 msgid "Setting loglevel to %s"
 msgstr "Niveau de journalisation fixé à %s"
 
-#: lilylib.py:99
+#: lilylib.py:104
 #, python-format
 msgid "Unknown or invalid loglevel '%s'"
 msgstr "« %s » n'est pas un niveau de journalisation reconnu."
 
-#: lilylib.py:128 warn.cc:211
+#: lilylib.py:133 warn.cc:211
 #, c-format, python-format
 msgid "error: %s"
 msgstr "Erreur : %s"
 
-#: lilylib.py:185
+#: lilylib.py:190
 #, python-format
 msgid "Processing %s.ly"
 msgstr "Traitement de « %s.ly »"
 
-#: lilylib.py:189 lilylib.py:250
+#: lilylib.py:194 lilylib.py:255
 #, python-format
 msgid "Invoking `%s'"
 msgstr "Appel de « %s »"
 
-#: lilylib.py:191 lilylib.py:252
+#: lilylib.py:196 lilylib.py:257
 #, python-format
 msgid "Running %s..."
 msgstr "Exécution de %s..."
 
-#: lilylib.py:328
+#: lilylib.py:333
 #, python-format
 msgid "Usage: %s"
 msgstr "Utilisation : %s"
@@ -961,12 +977,12 @@ msgstr ""
 msgid "Unable to find instrument for ID=%s\n"
 msgstr "Aucun instrument ne correspond à l'ID %s\n"
 
-#: abc2ly.py:1376 convert-ly.py:81 lilypond-book.py:122 midi2ly.py:1044
+#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
 #, python-format
 msgid "%s [OPTION]... FILE"
 msgstr "%s [OPTIONS]... FICHIER"
 
-#: abc2ly.py:1377
+#: abc2ly.py:1387
 #, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
@@ -975,29 +991,29 @@ msgstr ""
 "abc2ly convertit les fichiers musicaux ABC (voir\n"
 "%s) au format LilyPond.\n"
 
-#: abc2ly.py:1385 convert-ly.py:88 etf2ly.py:1208 lilypond-book.py:231
-#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:174
+#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:181
 msgid "show version number and exit"
 msgstr "affiche le numéro de version et quitte"
 
-#: abc2ly.py:1388 convert-ly.py:92 etf2ly.py:1204 lilypond-book.py:140
-#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:153
+#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:160
 msgid "show this help and exit"
 msgstr "visualiser cette aide et quitter"
 
-#: abc2ly.py:1391 etf2ly.py:1209 midi2ly.py:1071
+#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071
 msgid "write output to FILE"
 msgstr "produit la sortie dans le FICHIER"
 
-#: abc2ly.py:1394
+#: abc2ly.py:1404
 msgid "be strict about success"
 msgstr "être strict sur la réussite"
 
-#: abc2ly.py:1397
+#: abc2ly.py:1407
 msgid "preserve ABC's notion of beams"
 msgstr "préserver la notion de ligature propre à ABC"
 
-#: abc2ly.py:1400
+#: abc2ly.py:1410
 msgid "suppress progress messages"
 msgstr "n'affiche pas les messages de progression"
 
@@ -1005,8 +1021,8 @@ msgstr "n'affiche pas les messages de progression"
 #. "Report bugs in English via %s",
 #. or if there is a LilyPond users list or forum in your language
 #. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: abc2ly.py:1403 convert-ly.py:146 etf2ly.py:1218 lilypond-book.py:258
-#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:285
+#: abc2ly.py:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:315
 #, c-format, python-format
 msgid "Report bugs via %s"
 msgstr ""
@@ -1015,7 +1031,7 @@ msgstr ""
 "ou en anglais à\n"
 "%s"
 
-#: convert-ly.py:46
+#: convert-ly.py:47
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
 "version taken from the \\version command, to the current LilyPond version."
@@ -1024,104 +1040,112 @@ msgstr ""
 "Par défaut, de la version indiquée par la commande \\version\n"
 "vers la version courante de LilyPond."
 
-#: convert-ly.py:48 lilypond-book.py:82
+#: convert-ly.py:50
+msgid "If FILE is `-', read from standard input."
+msgstr "Lit l'entrée standard si FICHIER égale « - »"
+
+#: convert-ly.py:52 lilypond-book.py:82
 msgid "Examples:"
 msgstr "Exemples :"
 
-#: convert-ly.py:75 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
+#: convert-ly.py:79 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s détenu par"
 
-#: convert-ly.py:77 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
+#: convert-ly.py:81 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Distribué selon les termes de la GNU General Public License."
 
-#: convert-ly.py:78 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
+#: convert-ly.py:82 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
 msgid "It comes with NO WARRANTY."
 msgstr "Le logiciel est distribué SANS GARANTIE."
 
-#: convert-ly.py:96 convert-ly.py:137
+#: convert-ly.py:100 convert-ly.py:141
 msgid "VERSION"
 msgstr "VERSION"
 
-#: convert-ly.py:98
+#: convert-ly.py:102
 msgid "start from VERSION [default: \\version found in file]"
 msgstr "partir de la VERSION [par défaut : \\version trouvée dans le fichier]"
 
-#: convert-ly.py:101
+#: convert-ly.py:105
 msgid "edit in place"
 msgstr "éditer le fichier d'origine"
 
-#: convert-ly.py:105 lilypond-book.py:179 musicxml2ly.py:2627
+#: convert-ly.py:109 lilypond-book.py:179 musicxml2ly.py:2627
 msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)"
 msgstr ""
 "Afficher les informations selon le niveau de LOGLEVEL\n"
 "(NONE, ERROR, WARNING, PROGRESS (par défaut), DEBUG)"
 
-#: convert-ly.py:107 lilypond-book.py:163 lilypond-book.py:181
-#: musicxml2ly.py:2629 main.cc:167
+#: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
+#: musicxml2ly.py:2629 main.cc:174
 msgid "LOGLEVEL"
 msgstr "LOGLEVEL"
 
-#: convert-ly.py:113
+#: convert-ly.py:117
 msgid "do not add \\version command if missing"
 msgstr "ne pas ajouter la commande \\version si elle est absente"
 
-#: convert-ly.py:119
+#: convert-ly.py:123
 #, python-format
 msgid "force updating \\version number to %s"
 msgstr "forcer la mise à jour de \\version à %s"
 
-#: convert-ly.py:125
+#: convert-ly.py:129
 msgid "only update \\version number if file is modified"
 msgstr "ne changer le numéro de \\version que si le fichier est modifié"
 
-#: convert-ly.py:131
+#: convert-ly.py:135
 #, python-format
 msgid "show rules [default: -f 0, -t %s]"
 msgstr "afficher les règles [par défaut : -f 0, -t %s]"
 
-#: convert-ly.py:136
+#: convert-ly.py:140
 #, python-format
 msgid "convert to VERSION [default: %s]"
 msgstr "convertir jusqu'à la VERSION [par défaut : %s]"
 
-#: convert-ly.py:141 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
-#: main.cc:176
+#: convert-ly.py:147
+msgid "make a numbered backup [default: filename.ext~]"
+msgstr "effectue un archivage numéroté [par défaut : nomfichier.etx~]"
+
+#: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
+#: main.cc:183
 msgid "show warranty and copyright"
 msgstr "affiche les notices de garantie et du droit d'auteur"
 
-#: convert-ly.py:186
+#: convert-ly.py:196
 msgid "Applying conversion: "
 msgstr "Conversion en cours : "
 
-#: convert-ly.py:202
+#: convert-ly.py:215
 msgid "Error while converting"
 msgstr "Erreur lors de la conversion"
 
-#: convert-ly.py:204
+#: convert-ly.py:217
 msgid "Stopping at last successful rule"
 msgstr "Arrêt à la dernière règle appliquée avec succès"
 
-#: convert-ly.py:231
+#: convert-ly.py:256
 #, python-format
 msgid "Processing `%s'... "
 msgstr "Traitement de « %s »..."
 
-#: convert-ly.py:338
+#: convert-ly.py:367
 #, python-format
 msgid "%s: Unable to open file"
 msgstr "impossible d'ouvrir le fichier « %s »"
 
-#: convert-ly.py:345
+#: convert-ly.py:373
 #, python-format
 msgid "%s: Unable to determine version.  Skipping"
 msgstr ""
 "impossible de déterminer la version de « %s ».\n"
 " Au suivant !"
 
-#: convert-ly.py:350
+#: convert-ly.py:379
 #, python-format
 msgid ""
 "%s: Invalid version string `%s' \n"
@@ -1131,6 +1155,13 @@ msgstr ""
 "Un numéro de version valide est formé de trois nombres séparés par un point,\n"
 "comme par exemple « 2.8.12 »"
 
+#: convert-ly.py:385
+#, python-format
+msgid "There was %d error."
+msgid_plural "There were %d errors."
+msgstr[0] "Il y a %d erreur."
+msgstr[1] "Il y a %d erreurs."
+
 #: etf2ly.py:1197
 #, python-format
 msgid "%s [OPTION]... ETF-FILE"
@@ -1146,7 +1177,7 @@ msgstr ""
 "exploitable.\n"
 
 #: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
-#: main.cc:159 main.cc:171
+#: main.cc:166 main.cc:178
 msgid "FILE"
 msgstr "FICHIER"
 
@@ -1188,7 +1219,7 @@ msgid "add DIR to include path"
 msgstr "ajoute le RÉP au chemin de recherche des inclusions"
 
 #: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
-#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:158
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:165
 msgid "DIR"
 msgstr "RÉP"
 
@@ -1286,78 +1317,78 @@ msgstr "utilise l'exécutable PROG au lieu de texi2pdf"
 msgid "create PDF files for use with PDFTeX"
 msgstr "crée des fichiers PDF pour utilisation par PDFTeX"
 
-#: lilypond-book.py:455
+#: lilypond-book.py:463
 msgid "Writing snippets..."
 msgstr "Écriture des extraits..."
 
-#: lilypond-book.py:460
+#: lilypond-book.py:468
 msgid "Processing..."
 msgstr "Traitement..."
 
-#: lilypond-book.py:465
+#: lilypond-book.py:473
 msgid "All snippets are up to date..."
 msgstr "Tous les extraits sont à jour..."
 
-#: lilypond-book.py:467
+#: lilypond-book.py:475
 msgid "Linking files..."
 msgstr "Liaison des fichiers..."
 
-#: lilypond-book.py:487
+#: lilypond-book.py:495
 #, python-format
 msgid "cannot determine format for: %s"
 msgstr "format indéterminé pour « %s »"
 
-#: lilypond-book.py:496
+#: lilypond-book.py:504
 #, python-format
 msgid "%s is up to date."
 msgstr "« %s » est à jour."
 
-#: lilypond-book.py:509
+#: lilypond-book.py:517
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Écriture de « %s »..."
 
-#: lilypond-book.py:570
+#: lilypond-book.py:580
 msgid "Output would overwrite input file; use --output."
 msgstr "La sortie va écraser le fichier d'entrée ; utiliser --output"
 
-#: lilypond-book.py:574
+#: lilypond-book.py:584
 #, python-format
 msgid "Reading %s..."
 msgstr "Lecture en cours de « %s »..."
 
-#: lilypond-book.py:581
+#: lilypond-book.py:591
 msgid "Dissecting..."
 msgstr "Dissection en cours..."
 
-#: lilypond-book.py:592
+#: lilypond-book.py:602
 #, python-format
 msgid "Compiling %s..."
 msgstr "Compilation de « %s »..."
 
-#: lilypond-book.py:600
+#: lilypond-book.py:610
 #, python-format
 msgid "Processing include: %s"
 msgstr "Traitement d'inclusion : %s"
 
-#: lilypond-book.py:611
+#: lilypond-book.py:621
 #, python-format
 msgid "Removing `%s'"
 msgstr "Suppression de « %s »"
 
-#: lilypond-book.py:704
+#: lilypond-book.py:714
 #, python-format
 msgid "Setting LilyPond's loglevel to %s"
 msgstr "Niveau de journalisation de LilyPond fixé à %s"
 
-#: lilypond-book.py:708
+#: lilypond-book.py:718
 #, python-format
 msgid "Setting LilyPond's loglevel to %s (from environment variable LILYPOND_LOGLEVEL)"
 msgstr ""
 "Détermination du niveau de journalisation de LilyPond à %s\n"
 "(à partir de la variable d'environnement LILYPOND_LOGLEVEL)"
 
-#: lilypond-book.py:711
+#: lilypond-book.py:721
 msgid "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
 msgstr "Utilisation de l'option LilyPond --verbose (réglage implicite de lilypond-book)"
 
@@ -1692,15 +1723,15 @@ msgstr "Fichier de sortie : « %s »"
 msgid "Unable to find input file %s"
 msgstr "Impossible de trouver le fichier d'entrée « %s »"
 
-#: website_post.py:123
+#: website_post.py:125
 msgid "English"
 msgstr "Anglais"
 
-#: website_post.py:126
+#: website_post.py:128
 msgid "Other languages"
 msgstr "Autres langues"
 
-#: website_post.py:127
+#: website_post.py:129
 #, python-format
 msgid "About <a href=\"%s\">automatic language selection</a>."
 msgstr "À propos de la <a href=\"%s\">sélection automatique de la langue</a>."
@@ -1784,12 +1815,12 @@ msgstr ""
 "procédure ou nom de contexte requis pour la règle d'altération accidentelle,\n"
 "%s trouvé"
 
-#: accidental.cc:200
+#: accidental.cc:169
 #, c-format
 msgid "Could not find glyph-name for alteration %s"
 msgstr "Aucun nom de glyphe ne correspond à l'altération %s"
 
-#: accidental.cc:215
+#: accidental.cc:184
 msgid "natural alteration glyph not found"
 msgstr "pas de glyphe correspondant au bécarre"
 
@@ -1802,7 +1833,7 @@ msgstr "fonte « %s » introuvable"
 msgid "\\applycontext argument is not a procedure"
 msgstr "l'argument \\applycontext n'est pas une procédure"
 
-#: arpeggio.cc:115
+#: arpeggio.cc:138
 msgid "no heads for arpeggio found?"
 msgstr "arpeggio sans tête de note ?"
 
@@ -1811,19 +1842,26 @@ msgstr "arpeggio sans tête de note ?"
 msgid "cannot change, already in translator: %s"
 msgstr "modification impossible, c'est déjà dans le translateur : %s"
 
-#: axis-group-engraver.cc:94
+#: axis-group-engraver.cc:149
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver : le groupe vertical a déjà un parent"
 
-#: axis-group-engraver.cc:95
+#: axis-group-engraver.cc:150
 msgid "are there two Axis_group_engravers?"
 msgstr "Axis_group_engraver redondant"
 
-#: axis-group-engraver.cc:96
+#: axis-group-engraver.cc:151
 msgid "removing this vertical group"
 msgstr "retrait de ce groupe vertical"
 
-#: axis-group-interface.cc:668
+#: axis-group-interface.cc:714
+#, c-format
+msgid "\"%s\" is not a valid outside-staff-placement-directive"
+msgstr ""
+"on ne peut positionner un objet externe à la portée avec \"%s\"\n"
+"  (outside-staff-position-directive)"
+
+#: axis-group-interface.cc:786
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr ""
 "un objet externe à la portée devrait avoir un positionnement.\n"
@@ -1834,23 +1872,23 @@ msgstr ""
 msgid "barcheck failed at: %s"
 msgstr "échec du contrôle de mesure (barcheck) à %s"
 
-#: beam-engraver.cc:147
+#: beam-engraver.cc:148
 msgid "already have a beam"
 msgstr "ligature déjà présente"
 
-#: beam-engraver.cc:230
+#: beam-engraver.cc:235
 msgid "unterminated beam"
 msgstr "ligature non terminée"
 
-#: beam-engraver.cc:266 chord-tremolo-engraver.cc:149
+#: beam-engraver.cc:282 chord-tremolo-engraver.cc:149
 msgid "stem must have Rhythmic structure"
 msgstr "la hampe doit avoir une structure Rythmic"
 
-#: beam-engraver.cc:277
+#: beam-engraver.cc:293
 msgid "stem does not fit in beam"
 msgstr "la hampe ne s'insère pas dans la ligature"
 
-#: beam-engraver.cc:278
+#: beam-engraver.cc:294
 msgid "beam was started here"
 msgstr "la ligature a débuté ici"
 
@@ -1917,8 +1955,7 @@ msgstr "mise au rebut d'un cluster vide"
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr "Coherent_ligature_engraver : initialise « spacing-increment=0.01 » : ptr=%ul"
 
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:187 constrained-breaking.cc:205
+#: constrained-breaking.cc:187 constrained-breaking.cc:206
 msgid "cannot find line breaking that satisfies constraints"
 msgstr "impossible de trouver un saut de ligne qui satisfasse aux contraintes"
 
@@ -1931,35 +1968,40 @@ msgstr "\\override et \\revert requièrent des arguments symboliques"
 msgid "cannot find or create new `%s'"
 msgstr "impossible de trouver ou créer un nouveau « %s »"
 
-#: context.cc:207
+#: context.cc:228
 #, c-format
 msgid "cannot find or create `%s' called `%s'"
 msgstr "impossible de trouver ou créer « %s » dénommé(e) « %s »"
 
-#: context.cc:400
+#: context.cc:425
 #, c-format
 msgid "cannot find or create: `%s'"
 msgstr "impossible de trouver ou créer « %s »"
 
+#: context.cc:439
+#, c-format
+msgid "cannot find or create new Bottom = \"%s\""
+msgstr "impossible de trouver ou créer un nouveau « %s »"
+
 #: custos.cc:87
 #, c-format
 msgid "custos `%s' not found"
 msgstr "custode « %s » introuvable"
 
-#: dispatcher.cc:83
+#: dispatcher.cc:89
 msgid "Event class should be a list"
 msgstr "La classe d'événement devrait être une liste"
 
-#: dispatcher.cc:166
+#: dispatcher.cc:172
 #, c-format
 msgid "Junking event: %s"
 msgstr "Événement escamoté : « %s »"
 
-#: dispatcher.cc:262
+#: dispatcher.cc:277
 msgid "Attempting to remove nonexisting listener."
 msgstr "Tentative de suppression d'un écouteur inexistant."
 
-#: dispatcher.cc:284
+#: dispatcher.cc:303
 msgid "Already listening to dispatcher, ignoring request"
 msgstr "Déjà à l'écoute du dispatcheur ; requête ignorée."
 
@@ -1968,25 +2010,19 @@ msgstr "Déjà à l'écoute du dispatcheur ; requête ignorée."
 msgid "dot `%s' not found"
 msgstr "point « %s » introuvable"
 
-#: dynamic-engraver.cc:193
-msgid "cannot find start of (de)crescendo"
-msgstr "impossible de repérer le début du (de)crescendo"
-
-#: dynamic-engraver.cc:200
-msgid "already have a decrescendo"
-msgstr "decrescendo déjà présent"
-
-#: dynamic-engraver.cc:202
-msgid "already have a crescendo"
-msgstr "crescendo déjà présent"
-
-#: dynamic-engraver.cc:205
-msgid "cresc starts here"
-msgstr "le crescendo débute ici"
+#: dynamic-engraver.cc:168
+#, c-format
+msgid ""
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
+msgstr ""
+"style de crescendo inconnu : %s\n"
+"retour à la valeur par défaut (soufflet)."
 
-#: dynamic-engraver.cc:333
-msgid "unterminated (de)crescendo"
-msgstr "(de)crescendo non terminé"
+#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#, c-format
+msgid "unterminated %s"
+msgstr "%s non terminé(e)"
 
 #. No explicit dynamic script events have occurred yet, but there is
 #. nevertheless a dynamic spanner.  Initialize last_volume_ to a
@@ -2011,12 +2047,12 @@ msgstr "épisème non terminé"
 msgid "unterminated extender"
 msgstr "prolongation ou extenseur non terminé"
 
-#: flag.cc:113
+#: flag.cc:134
 #, c-format
 msgid "flag `%s' not found"
 msgstr "crochet inconnu : « %s »"
 
-#: flag.cc:133
+#: flag.cc:154
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "type de crochet inconnu : « %s »"
@@ -2049,7 +2085,7 @@ msgstr "Initialisation de FontConfig..."
 msgid "Building font database..."
 msgstr "Construction de la base de donnée des fontes..."
 
-#: footnote-engraver.cc:110
+#: footnote-engraver.cc:87
 msgid "Must be footnote-event."
 msgstr "Doit être un événement note de bas de page (footnote-event)."
 
@@ -2066,15 +2102,15 @@ msgstr "Détection d'une valeur infini ou non numérique. Substitution par 0.0"
 msgid "unterminated glissando"
 msgstr "glissando non terminé"
 
-#: global-context-scheme.cc:96 global-context-scheme.cc:114
+#: global-context-scheme.cc:95 global-context-scheme.cc:113
 msgid "no music found in score"
 msgstr "Il n'y a pas de musique dans cette partition"
 
-#: global-context-scheme.cc:104
+#: global-context-scheme.cc:103
 msgid "Interpreting music..."
 msgstr "Interprétation en cours de la musique..."
 
-#: global-context-scheme.cc:126
+#: global-context-scheme.cc:125
 #, c-format
 msgid "elapsed time: %.2f seconds"
 msgstr "temps écoulé : %.2f secondes"
@@ -2116,11 +2152,16 @@ msgstr ""
 msgid "%d: %s"
 msgstr "%d : %s"
 
+#: grob.cc:488
+#, c-format
+msgid "ignored infinite %s-offset"
+msgstr "%s-offset infini ignoré"
+
 #: hairpin.cc:60
 msgid "Asking for broken bound padding at a non-broken bound."
 msgstr "Tentative de décalage d'un fragment de souflet alors qu'il n'est pas rompu."
 
-#: hairpin.cc:254
+#: hairpin.cc:256
 msgid "decrescendo too small"
 msgstr "decrescendo trop petit"
 
@@ -2167,31 +2208,31 @@ msgstr "Pas de glyphe pour l'altération « %s »"
 msgid "alteration not found"
 msgstr "altération non trouvée"
 
-#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:104
+#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:109
 msgid "cannot find start of ligature"
 msgstr "impossible de trouver le début de la ligature"
 
-#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:131
+#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:136
 msgid "already have a ligature"
 msgstr "a déjà une ligature"
 
-#: ligature-engraver.cc:109
+#: ligature-engraver.cc:114
 msgid "no right bound"
 msgstr "pas de borne à droite"
 
-#: ligature-engraver.cc:140
+#: ligature-engraver.cc:145
 msgid "no left bound"
 msgstr "pas de borne à gauche"
 
-#: ligature-engraver.cc:184
+#: ligature-engraver.cc:189
 msgid "unterminated ligature"
 msgstr "ligature non terminée"
 
-#: ligature-engraver.cc:211
+#: ligature-engraver.cc:216
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "le silence est ignoré : une ligature ne peut contenir de silence"
 
-#: ligature-engraver.cc:212
+#: ligature-engraver.cc:217
 msgid "ligature was started here"
 msgstr "la ligature a débuté ici"
 
@@ -2200,36 +2241,36 @@ msgstr "la ligature a débuté ici"
 msgid "(load path: `%s')"
 msgstr "(chemin de chargement : « %s »)"
 
-#: lily-guile.cc:416
+#: lily-guile.cc:412
 #, c-format
 msgid "cannot find property type-check for `%s' (%s)."
 msgstr "vérification du type de propriété pour « %s » (%s) non trouvée"
 
-#: lily-guile.cc:419
+#: lily-guile.cc:415
 msgid "perhaps a typing error?"
 msgstr "Probable faute de frappe"
 
-#: lily-guile.cc:426
-msgid "doing assignment anyway"
-msgstr "affectation faite malgré tout"
+#: lily-guile.cc:422
+msgid "skipping assignment"
+msgstr "affectation ignorée"
 
-#: lily-guile.cc:438
+#: lily-guile.cc:442
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 "la vérification du type de « %s » a échoué ; \n"
 "   la valeur « %s » doit être du type « %s »"
 
-#: lily-lexer.cc:255
+#: lily-lexer.cc:249
 msgid "include files are not allowed in safe mode"
 msgstr "l'inclusion de fichiers n'est pas permise en mode sans échec"
 
-#: lily-lexer.cc:282
+#: lily-lexer.cc:276
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "Le nom de l'identificateur est un mot clé : « %s »"
 
-#: lily-lexer.cc:303 lily-lexer.cc:316
+#: lily-lexer.cc:297 lily-lexer.cc:310
 #, c-format
 msgid "%s:EOF"
 msgstr "%s:EOF"
@@ -2260,25 +2301,26 @@ msgstr ""
 msgid "Processing `%s'"
 msgstr "Traitement de « %s »"
 
-#: lily-parser-scheme.cc:208
+#: lily-parser-scheme.cc:209
 msgid "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr ""
 "ly:parser-parse-string ne peut foncionner qu'avec un nouvel analyseur.\n"
 "Utilisez plutôt ly:parser-include-string"
 
-#: lily-parser-scheme.cc:239
+#: lily-parser-scheme.cc:240
 msgid "ly:parse-string-expression is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr ""
 "ly:parse-string-expression ne peut foncionner qu'avec un nouvel analyseur.\n"
 "Utilisez plutôt ly:parser-include-string"
 
-#: lily-parser.cc:109
+#: lily-parser.cc:107
 msgid "Parsing..."
 msgstr "Analyse..."
 
-#: line-spanner.cc:373
-msgid "Line spanner's left point is to the right of its right point."
-msgstr "L'extrémité gauche de la ligne de prolongation se retrouve après la droite."
+#: lookup.cc:181
+#, c-format
+msgid "Not drawing a box with negative dimension, %.2f by %.2f."
+msgstr "La boîte aux dimensions négatives, %.2f par %.2f, ne sera pas dessinée."
 
 #: lyric-combine-music-iterator.cc:199
 msgid "argument of \\lyricsto should contain Lyrics context"
@@ -2295,7 +2337,7 @@ msgstr ""
 "Syllabe sans note de rattachement.\n"
 " Utiliser \\lyricsto ou associatedVoice."
 
-#: main.cc:101
+#: main.cc:104
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -2308,7 +2350,7 @@ msgstr ""
 "sous certaines conditions.\n"
 "Invoquez « %s --warranty » pour plus d'informations.\n"
 
-#: main.cc:107
+#: main.cc:110
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License as \n"
@@ -2339,11 +2381,11 @@ msgstr ""
 "écrire à la Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:141
+#: main.cc:148
 msgid "SYM[=VAL]"
 msgstr "SYM[=VAL]"
 
-#: main.cc:142
+#: main.cc:149
 msgid ""
 "set Scheme option SYM to VAL (default: #t).\n"
 "Use -dhelp for help."
@@ -2351,43 +2393,43 @@ msgstr ""
 "affecte VAL (par défaut #t) à l'option Scheme SYM.\n"
 "Utiliser -dhelp pour avoir de l'aide."
 
-#: main.cc:146
+#: main.cc:153
 msgid "EXPR"
 msgstr "EXPR"
 
-#: main.cc:146
+#: main.cc:153
 msgid "evaluate scheme code"
 msgstr "évaluation du code Scheme"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:149
+#: main.cc:156
 msgid "FORMATs"
 msgstr "FORMATs"
 
-#: main.cc:149
+#: main.cc:156
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
 "produire FORMAT...\n"
 "Aussi comme options séparées :"
 
-#: main.cc:150
+#: main.cc:157
 msgid "generate PDF (default)"
 msgstr "générer le PDF (par défaut)"
 
-#: main.cc:151
+#: main.cc:158
 msgid "generate PNG"
 msgstr "générer le PNG"
 
-#: main.cc:152
+#: main.cc:159
 msgid "generate PostScript"
 msgstr "générer le PostScript"
 
-#: main.cc:155
+#: main.cc:162
 msgid "FIELD"
 msgstr "CHAMP"
 
-#: main.cc:155
+#: main.cc:162
 msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
@@ -2395,21 +2437,21 @@ msgstr ""
 "écrire le champ d'entête CHAMP dans le\n"
 "fichier nommé RACINE.CHAMP"
 
-#: main.cc:158
+#: main.cc:165
 msgid "add DIR to search path"
 msgstr "ajouter RÉPERTOIRE au chemin de recherche"
 
-#: main.cc:159
+#: main.cc:166
 msgid "use FILE as init file"
 msgstr ""
 "utiliser FICHIER comme\n"
 "fichier d'initialisation"
 
-#: main.cc:162
+#: main.cc:169
 msgid "USER, GROUP, JAIL, DIR"
 msgstr "USER, GROUP, CAGE, RÉP"
 
-#: main.cc:162
+#: main.cc:169
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
@@ -2417,7 +2459,7 @@ msgstr ""
 "chroot dans CAGE, devenir UTILISATEUR:GROUPE\n"
 "et cd dans RÉPERTOIRE"
 
-#: main.cc:167
+#: main.cc:174
 msgid ""
 "print log messages according to LOGLEVEL.  Possible values are:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
@@ -2425,30 +2467,30 @@ msgstr ""
 "affiche les informations selon le niveau de LOGLEVEL :\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (défaut) ou DEBUG."
 
-#: main.cc:171
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
 msgstr ""
 "produire la sortie dans FICHIER \n"
 "(adjonction automatique du suffixe)"
 
-#: main.cc:172
+#: main.cc:179
 msgid "relocate using directory of lilypond program"
 msgstr ""
 "redétermine le chemin d'exécution\n"
 "des composants de LilyPond"
 
-#: main.cc:173
+#: main.cc:180
 msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
 msgstr ""
 "pas de progression, seulement les messages d'erreur\n"
 "(équivalent à loglevel=ERROR)"
 
-#: main.cc:175
+#: main.cc:182
 msgid "be verbose (equivalent to loglevel=DEBUG)"
 msgstr "état verbeux (équivalent à loglevel=DEBUG)"
 
 #. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:242
+#: main.cc:261
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -2458,78 +2500,78 @@ msgstr ""
 "%s et autres."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:269
+#: main.cc:299
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Utilisation : %s [OPTIONS]... FICHIER..."
 
-#: main.cc:271
+#: main.cc:301
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Composer la musique ou jouer en format MIDI à partir du FICHIER"
 
-#: main.cc:273
+#: main.cc:303
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond produit une jolie notation musicale"
 
-#: main.cc:275
+#: main.cc:305
 #, c-format
 msgid "For more information, see %s"
 msgstr "Pour plus d'informations, voir %s"
 
-#: main.cc:277
+#: main.cc:307
 msgid "Options:"
 msgstr "Options :"
 
-#: main.cc:331
+#: main.cc:374
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "une cage requiert %d arguments, il y en a %u"
 
-#: main.cc:345
+#: main.cc:388
 #, c-format
 msgid "no such user: %s"
 msgstr "utilisateur inconnu : « %s »"
 
-#: main.cc:347
+#: main.cc:390
 #, c-format
 msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 "impossible de repérer l'identifiant utilisateur à partir du nom d'utilisateur :\n"
 "%s : %s"
 
-#: main.cc:362
+#: main.cc:405
 #, c-format
 msgid "no such group: %s"
 msgstr "groupe inconnu : %s"
 
-#: main.cc:364
+#: main.cc:407
 #, c-format
 msgid "cannot get group id from group name: %s: %s"
 msgstr ""
 "impossible de repérer l'identifiant groupe à partir du nom de groupe :\n"
 "%s : %s "
 
-#: main.cc:372
+#: main.cc:415
 #, c-format
 msgid "cannot chroot to: %s: %s"
 msgstr "impossible de chrooter vers : %s : %s"
 
-#: main.cc:379
+#: main.cc:422
 #, c-format
 msgid "cannot change group id to: %d: %s"
 msgstr "impossible de changer l'identifiant de groupe en %d : %s"
 
-#: main.cc:385
+#: main.cc:428
 #, c-format
 msgid "cannot change user id to: %d: %s"
 msgstr "impossible de changer l'identifiant utilisateur en %d : %s"
 
-#: main.cc:391
+#: main.cc:434
 #, c-format
 msgid "cannot change working directory to: %s: %s"
 msgstr "impossible de changer le répertoire de travail en %s : %s"
 
-#: main.cc:639
+#: main.cc:805
 #, c-format
 msgid "exception caught: %s"
 msgstr "exception capturée : %s"
@@ -2543,31 +2585,31 @@ msgstr "rehearsalMark doit être un entier"
 msgid "mark label must be a markup object"
 msgstr "les étiquettes de marque doivent être des objets de type « markup »."
 
-#: mensural-ligature-engraver.cc:96
+#: mensural-ligature-engraver.cc:100
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "ligature avec moins de 2 têtes -> escamotage"
 
-#: mensural-ligature-engraver.cc:123
+#: mensural-ligature-engraver.cc:127
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "impossible de déterminer la hauteur de la primitive de ligature -> escamotage"
 
-#: mensural-ligature-engraver.cc:137
+#: mensural-ligature-engraver.cc:141
 msgid "single note ligature - skipping"
 msgstr "ligature sur note unique -> escamotage"
 
-#: mensural-ligature-engraver.cc:148
+#: mensural-ligature-engraver.cc:152
 msgid "prime interval within ligature -> skipping"
 msgstr "intervale de prime dans la ligature -> escamotage"
 
-#: mensural-ligature-engraver.cc:159
+#: mensural-ligature-engraver.cc:163
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "ligature mensurale : aucune durée parmi Mx, L, B, S -> escamotage"
 
-#: mensural-ligature-engraver.cc:202
+#: mensural-ligature-engraver.cc:206
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr "une ronde doit être suivie d'une autre -> escamotage"
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:216
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
@@ -2575,7 +2617,7 @@ msgstr ""
 "les rondes ne peuvent apparaître qu'en début de ligature,\n"
 "et il ne peut y en avoir que zéro ou deux"
 
-#: mensural-ligature-engraver.cc:232
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -2587,27 +2629,32 @@ msgstr ""
 "l'avant dernière note doit en être une autre,\n"
 "sinon la ligature doit être LB ou SSB"
 
-#: mensural-ligature-engraver.cc:387
+#: mensural-ligature-engraver.cc:396
 msgid "unexpected case fall-through"
 msgstr "cas inattendu et non interprétable"
 
-#: midi-item.cc:89
+#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#, c-format
+msgid "ignoring out-of-range value change for MIDI property `%s'"
+msgstr "propriété MIDI « %s » : modification de valeur hors limite donc ignorée"
+
+#: midi-item.cc:93
 #, c-format
 msgid "no such MIDI instrument: `%s'"
 msgstr "instrument MIDI non répertorié : « %s »"
 
-#: midi-item.cc:161
+#: midi-item.cc:179
 msgid "Time signature with more than 255 beats.  Truncating"
 msgstr "Métrique comportant plus de 255 pulsations ; on limite."
 
-#: midi-stream.cc:39
+#: midi-stream.cc:38
 #, c-format
 msgid "cannot open for write: %s: %s"
 msgstr ""
 "impossible d'ouvrir le fichier en écriture : %s :\n"
 "  %s"
 
-#: midi-stream.cc:55
+#: midi-stream.cc:54
 #, c-format
 msgid "cannot write to file: `%s'"
 msgstr "impossible d'écrire dans le fichier « %s »"
@@ -2620,13 +2667,13 @@ msgstr "Calcul des sauts de ligne..."
 msgid "Calculating page breaks..."
 msgstr "Calcul des sauts de page..."
 
-#: multi-measure-rest.cc:138
+#: multi-measure-rest.cc:154
 msgid "usable-duration-logs must be a non-empty list.  Falling back to whole rests."
 msgstr ""
 "usable-duration-logs ne peut être constitué d'une liste vide.\n"
 "Retour à des pauses."
 
-#: multi-measure-rest.cc:328
+#: multi-measure-rest.cc:364
 msgid "Using naive multi measure rest spacing."
 msgstr "Utilisation d'un espacement de type silence multimesure."
 
@@ -2646,20 +2693,6 @@ msgstr "(hauteur normalisée)"
 msgid "Transposing %s by %s makes alteration larger than double"
 msgstr "La transposition de %s à %s crée des altérations supérieures aux doubles"
 
-#: new-dynamic-engraver.cc:168
-#, c-format
-msgid ""
-"unknown crescendo style: %s\n"
-"defaulting to hairpin."
-msgstr ""
-"style de crescendo inconnu : %s\n"
-"retour à la valeur par défaut (soufflet)."
-
-#: new-dynamic-engraver.cc:233
-#, c-format
-msgid "unterminated %s"
-msgstr "%s non terminé(e)"
-
 #: new-fingering-engraver.cc:113
 msgid "cannot add text scripts to individual note heads"
 msgstr "impossible d'ajouter du texte à des têtes de note individuelles"
@@ -2672,7 +2705,7 @@ msgstr "nulle part où positionner des doigtés"
 msgid "placing below"
 msgstr "on les place en dessous"
 
-#: note-collision.cc:496
+#: note-collision.cc:497
 msgid "ignoring too many clashing note columns"
 msgstr "trop d'empilements de notes se chevauchent. On fera au mieux."
 
@@ -2689,37 +2722,37 @@ msgstr "tête de note « %s » ou « %s » non trouvée"
 msgid "NoteEvent without pitch"
 msgstr "NoteEvent sans hauteur"
 
-#: open-type-font.cc:44
+#: open-type-font.cc:45
 #, c-format
 msgid "cannot allocate %lu bytes"
 msgstr "impossible d'allouer %lu octets"
 
-#: open-type-font.cc:48
+#: open-type-font.cc:49
 #, c-format
 msgid "cannot load font table: %s"
 msgstr "impossible de charger la table des fontes : %s"
 
-#: open-type-font.cc:53
+#: open-type-font.cc:54
 #, c-format
 msgid "FreeType error: %s"
 msgstr "Erreur FreeType : %s"
 
-#: open-type-font.cc:110
+#: open-type-font.cc:111
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "format de police non supporté : %s"
 
-#: open-type-font.cc:112
+#: open-type-font.cc:113
 #, c-format
 msgid "error reading font file %s: %s"
 msgstr "erreur de lecture du fichier de fontes %s : %s"
 
-#: open-type-font.cc:187
+#: open-type-font.cc:188
 #, c-format
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr "erreur Freetype FT_Get_Glyph_Name () : %s"
 
-#: open-type-font.cc:318 pango-font.cc:189
+#: open-type-font.cc:336 pango-font.cc:256
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
 msgstr "Erreur FT_Get_Glyph_Name () : %s"
@@ -2729,35 +2762,35 @@ msgstr "Erreur FT_Get_Glyph_Name () : %s"
 msgid "Finding the ideal number of pages..."
 msgstr "Détermination du nombre optimal de pages..."
 
-#: optimal-page-breaking.cc:85
+#: optimal-page-breaking.cc:94
 msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page"
 msgstr "incompatilité entre systems-per-page et page-count ; systems-per-page ignoré"
 
-#: optimal-page-breaking.cc:105
+#: optimal-page-breaking.cc:114
 msgid "Fitting music on 1 page..."
 msgstr "Répartition de la musique sur une page..."
 
-#: optimal-page-breaking.cc:107
+#: optimal-page-breaking.cc:116
 #, c-format
 msgid "Fitting music on %d pages..."
 msgstr "Répartition de la musique sur %d pages..."
 
-#: optimal-page-breaking.cc:109
+#: optimal-page-breaking.cc:118
 #, c-format
 msgid "Fitting music on %d or %d pages..."
 msgstr "Répartition de la musique sur %d à %d pages..."
 
-#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:172
+#: optimal-page-breaking.cc:128 optimal-page-breaking.cc:181
 #, c-format
 msgid "trying %d systems"
 msgstr "tentative pour %d systèmes"
 
-#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:200
+#: optimal-page-breaking.cc:147 optimal-page-breaking.cc:209
 #, c-format
 msgid "best score for this sys-count: %f"
 msgstr "meilleur résultat pour cette configuration « sys-count » : %f"
 
-#: optimal-page-breaking.cc:207 page-turn-page-breaking.cc:248
+#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248
 #: paper-score.cc:162
 msgid "Drawing systems..."
 msgstr "Dessin des systèmes..."
@@ -2786,26 +2819,26 @@ msgstr ""
 "min-systems-per-page supérieur à max-systems-per-page :\n"
 "  tous deux seront ignorés"
 
-#: page-layout-problem.cc:403
+#: page-layout-problem.cc:402
 msgid "A page layout problem has been initiated that cannot accommodate footnotes."
 msgstr "Un défaut de mise en page perturbe la gestion des notes de bas de page."
 
-#: page-layout-problem.cc:732
+#: page-layout-problem.cc:731
 msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed"
 msgstr ""
 "impossible de faire tenir la musique sur la page :\n"
 "  justification demandée, mais page déjà compressée"
 
-#: page-layout-problem.cc:735
+#: page-layout-problem.cc:734
 #, c-format
 msgid "cannot fit music on page: overflow is %f"
 msgstr "impossible de faire tenir la musique sur la page.  Débordement de %f"
 
-#: page-layout-problem.cc:737
+#: page-layout-problem.cc:736
 msgid "compressing music to fit"
 msgstr "compression de la musique pour que cela tienne"
 
-#: page-layout-problem.cc:1197
+#: page-layout-problem.cc:1199
 msgid "staff-affinities should only decrease"
 msgstr "staff-affinities devraient aller en ordre décroissant"
 
@@ -2852,7 +2885,12 @@ msgstr "        nombre de pages : %d"
 msgid "\tprevious break: %d"
 msgstr "        coupure précédente : %d"
 
-#: pango-font.cc:205
+#: pango-font.cc:245
+#, c-format
+msgid "no glyph for character U+%0X in font `%s'"
+msgstr "aucun glyphe ne correspond au caractère U+%0X dans la fonte « %s »"
+
+#: pango-font.cc:272
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
@@ -2861,12 +2899,12 @@ msgstr ""
 "Le glyphe n'a pas de nom alors que la fonte prend en charge leur nommage.\n"
 "Glyphe U+%0X ignoré dans le fichier « %s »"
 
-#: pango-font.cc:242
+#: pango-font.cc:322
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "« %s » n'est pas un fichier de fonte PostScript"
 
-#: pango-font.cc:291
+#: pango-font.cc:372
 msgid "FreeType face has no PostScript font name"
 msgstr "Caractère FreeType sans nom de police PostScript"
 
@@ -2880,7 +2918,7 @@ msgstr "l'option -dprint-pages n'est pas opérationnelle avec le moteur %s"
 msgid "program option -dpreview not supported by backend `%s'"
 msgstr "l'option -dpreview n'est pas opérationnelle avec le moteur %s"
 
-#: paper-column-engraver.cc:261
+#: paper-column-engraver.cc:263
 msgid "forced break was overridden by some other event, should you be using bar checks?"
 msgstr ""
 "Un saut explicite a été outrepassé par un autre événement.\n"
@@ -2908,7 +2946,7 @@ msgstr "GUILE a signalé une erreur pour l'expression débutant ici"
 msgid "trying to use \\partial after the start of a piece"
 msgstr "\\partial ne devrait intervenir qu'en début de morceau"
 
-#: pdf-scheme.cc:50
+#: pdf-scheme.cc:65
 #, c-format
 msgid "Conversion of string `%s' to UTF-16be failed: %s"
 msgstr ""
@@ -2928,25 +2966,6 @@ msgstr "Piste..."
 msgid "MIDI output to `%s'..."
 msgstr "Sortie MIDI vers « %s »..."
 
-#: phrasing-slur-engraver.cc:101 slur-engraver.cc:102
-#, c-format
-msgid "direction of %s invalid: %d"
-msgstr "l'orientation de %s n'est pas valide : %d"
-
-#: phrasing-slur-engraver.cc:175
-msgid "unterminated phrasing slur"
-msgstr "liaison de phrasé non terminée"
-
-#: phrasing-slur-engraver.cc:210
-msgid "cannot end phrasing slur"
-msgstr "impossible de terminer la liaison de phrasé"
-
-#. We already have an old slur, so give a warning
-#. and completely ignore the new slur.
-#: phrasing-slur-engraver.cc:230
-msgid "already have phrasing slur"
-msgstr "il y a déjà une liaison de phrasé"
-
 #: piano-pedal-engraver.cc:279
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
@@ -2963,12 +2982,12 @@ msgstr "début de la pédale de piano indéterminé : « %s »"
 msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "début du crochet de la pédale de piano indéterminé : « %s »"
 
-#: program-option-scheme.cc:235
+#: program-option-scheme.cc:223
 #, c-format
 msgid "no such internal option: %s"
 msgstr "option interne inconnue : %s"
 
-#: property-iterator.cc:93
+#: property-iterator.cc:100
 #, c-format
 msgid "not a grob name, `%s'"
 msgstr "« %s » n'est pas un nom d'objet graphique (grob)"
@@ -3015,40 +3034,40 @@ msgstr "Relocalisation : datadir de compilation = %s, nouveau datadir = %s"
 msgid "Relocation: framework_prefix=%s"
 msgstr "Relocalisation : framework_prefix = %s"
 
-#: relocate.cc:186
+#: relocate.cc:172
 #, c-format
 msgid "Relocation: is absolute: argv0=%s\n"
 msgstr "Relocalisation absolue : argv0=%s\n"
 
-#: relocate.cc:192
+#: relocate.cc:178
 #, c-format
-msgid "Relocation: from cwd: argv0=%s\n"
+msgid "Relocation : from cwd: argv0=%s\n"
 msgstr "Relocalisation à partir du répertoire courant : argv0=%s\n"
 
-#: relocate.cc:208
+#: relocate.cc:194
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 msgstr ""
 "Relocalisation : à partir de PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 
-#: relocate.cc:235
+#: relocate.cc:220
 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
 msgstr "LILYPONDPREFIX est obsolète, utiliser LILYPOND_DATADIR"
 
-#: relocate.cc:360
+#: relocate.cc:345
 #, c-format
 msgid "Relocation file: %s"
 msgstr "Fichier de relocalisation : %s"
 
-#: relocate.cc:364 source-file.cc:65
+#: relocate.cc:349 source-file.cc:65
 #, c-format
 msgid "cannot open file: `%s'"
 msgstr "Impossible d'ouvrir le fichier « %s »"
 
-#: relocate.cc:394
+#: relocate.cc:379
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr "Commande de relocalisation inconnue : %s"
@@ -3057,15 +3076,15 @@ msgstr "Commande de relocalisation inconnue : %s"
 msgid "rhythmic head is not part of a rhythmic column"
 msgstr "tête rythmique non rattachée à un empilement rythmique"
 
-#: rest-collision.cc:146
+#: rest-collision.cc:150
 msgid "cannot resolve rest collision: rest direction not set"
 msgstr "collision de silences insoluble : positionnement du silence indéterminée"
 
-#: rest-collision.cc:157 rest-collision.cc:266
+#: rest-collision.cc:161 rest-collision.cc:270
 msgid "too many colliding rests"
 msgstr "trop de silences se chevauchent"
 
-#: rest.cc:192
+#: rest.cc:240
 #, c-format
 msgid "rest `%s' not found"
 msgstr "silence « %s » inconnu"
@@ -3101,33 +3120,41 @@ msgid "errors found, ignoring music expression"
 msgstr "suite à des erreurs répétées, l'expression musicale sera ignorée"
 
 #. FIXME:
-#: script-engraver.cc:113
+#: script-engraver.cc:115
 msgid "do not know how to interpret articulation:"
 msgstr "ne sait comment interpréter l'articulation"
 
-#: script-engraver.cc:114
+#: script-engraver.cc:116
 msgid " scheme encoding: "
 msgstr "encodage Scheme : "
 
-#: skyline-pair.cc:131
+#: skyline-pair.cc:160
 msgid "direction must not be CENTER in ly:skyline-pair::skyline"
 msgstr "direction ne saurait être CENTER pour ly:skyline-pair::skyline"
 
-#: slur-engraver.cc:176
-msgid "unterminated slur"
-msgstr "liaison non terminée"
-
-#: slur-engraver.cc:211
-msgid "cannot end slur"
-msgstr "impossible de terminer la liaison"
+#: slur-proto-engraver.cc:51
+#, c-format
+msgid "direction of %s invalid: %d"
+msgstr "l'orientation de %s n'est pas valide : %d"
 
 #. We already have an old slur, so give a warning
 #. and completely ignore the new slur.
-#: slur-engraver.cc:231
-msgid "already have slur"
-msgstr "une liaison est déjà en place"
+#: slur-proto-engraver.cc:166
+#, c-format
+msgid "already have %s"
+msgstr "%s déjà en place"
+
+#: slur-proto-engraver.cc:183
+#, c-format
+msgid "%s without a cause"
+msgstr "%s san origine"
+
+#: slur-proto-engraver.cc:244
+#, c-format
+msgid "cannot end %s"
+msgstr "impossible de terminer %s"
 
-#: slur.cc:430
+#: slur.cc:434
 #, c-format
 msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
 msgstr ""
@@ -3139,11 +3166,11 @@ msgstr ""
 msgid "expected to read %d characters, got %d"
 msgstr "au lieu de %d caractères à lire, il y en a %d"
 
-#: staff-performer.cc:275
+#: staff-performer.cc:301
 msgid "MIDI channel wrapped around"
 msgstr "Bouclage du canal MIDI"
 
-#: staff-performer.cc:276
+#: staff-performer.cc:302
 msgid "remapping modulo 16"
 msgstr "réaffectation modulo 16"
 
@@ -3164,12 +3191,12 @@ msgstr "la source devrait spécifier des voix polyphoniques"
 msgid "weird stem size, check for narrow beams"
 msgstr "taille de hampe bizarre ; vérifier la présence de liens étroits"
 
-#: system.cc:200
+#: system.cc:201
 #, c-format
 msgid "Element count %d"
 msgstr "%d éléments dénombrés."
 
-#: system.cc:480
+#: system.cc:512
 #, c-format
 msgid "Grob count %d"
 msgstr "%d objet graphiques (grob) dénombrés."
@@ -3178,15 +3205,15 @@ msgstr "%d objet graphiques (grob) dénombrés."
 #: text-interface.cc:129
 #, c-format
 msgid "Cyclic markup detected: %s"
-msgstr "Markup avec référence circulaire : %s"
+msgstr "« markup » avec référence circulaire : %s"
 
 #. TODO: Also print the arguments of the markup!
 #: text-interface.cc:142
 #, c-format
 msgid "Markup depth exceeds maximal value of %d; Markup: %s"
 msgstr ""
-"Cascade de markups dépassant la valeur maximale de %d ;\n"
-"Markup : %s"
+"Cascade de « markups » dépassant la valeur maximale de %d ;\n"
+"  markup : %s"
 
 #: text-spanner-engraver.cc:72
 msgid "cannot find start of text spanner"
@@ -3200,11 +3227,11 @@ msgstr "extension de texte déjà présente"
 msgid "unterminated text spanner"
 msgstr "extension de texte non terminée"
 
-#: tie-engraver.cc:117
+#: tie-engraver.cc:119
 msgid "unterminated tie"
 msgstr "liaison de prolongation non terminée"
 
-#: tie-engraver.cc:348
+#: tie-engraver.cc:353
 msgid "lonely tie"
 msgstr "liaison de prolongation orpheline"
 
@@ -3220,7 +3247,7 @@ msgstr "Chiffrage de mesure inhabituel : %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:122
+#: time-signature.cc:89
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr ""
@@ -3299,6 +3326,10 @@ msgstr "Vaticana_ligature : décalage en X indéfini ; ramené à 0"
 msgid "ascending vaticana style flexa"
 msgstr "flexe de style vaticana ascendant"
 
+#: vertical-align-engraver.cc:95
+msgid "Ignoring Vertical_align_engraver in VerticalAxisGroup"
+msgstr "Vertical_align_engraver dans le VerticalAxisGroup ignoré"
+
 #. fixme: be more verbose.
 #: volta-engraver.cc:110
 msgid "cannot end volta spanner"
@@ -3316,68 +3347,123 @@ msgstr "a déjà une extension terminée"
 msgid "giving up"
 msgstr "abandon"
 
-#: parser.yy:161 parser.yy:175
+#: parser.yy:158 parser.yy:172
 msgid "Too much lookahead"
 msgstr "Trop d'anticipation"
 
-#: parser.yy:835 parser.yy:1284
+#: parser.yy:441 parser.yy:752 parser.yy:818
+msgid "bad expression type"
+msgstr "type d'expression erroné"
+
+#: parser.yy:650 parser.yy:1159
 msgid "not a context mod"
 msgstr "ceci n'est pas un module de contexte"
 
-#: parser.yy:1027
+#: parser.yy:853
+msgid "score expected"
+msgstr "On attendait une partition"
+
+#: parser.yy:869
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "dans la section \\score, utiliser \\layout au lieu de \\paper"
 
-#: parser.yy:1051
+#: parser.yy:893
 msgid "need \\paper for paper block"
 msgstr "\\paper est nécessaire pour définir les paramètres de la page"
 
-#: parser.yy:1204
+#: parser.yy:1033 parser.yy:1055
+msgid "unexpected post-event"
+msgstr "« post-event » inattendu"
+
+#: parser.yy:1063
 msgid "Ignoring non-music expression"
 msgstr "Expression non musicale ignorée"
 
-#: parser.yy:2044
+#: parser.yy:1075 parser.yy:2493
+msgid "music expected"
+msgstr "On attendait de la musique"
+
+#: parser.yy:1370
+msgid "not a symbol"
+msgstr "n'est pas un symbole"
+
+#: parser.yy:2182 parser.yy:2296 parser.yy:2309 parser.yy:2318
+msgid "bad grob property path"
+msgstr "chemin erroné d'accès à la propriété de « grob »"
+
+#: parser.yy:2276
 msgid "only \\consists and \\remove take non-string argument."
-msgstr "seuls \\consists et \\remove peuvent prendre un argument autre qu'une chaîne"
+msgstr "seuls \\consists et \\remove peuvent prendre un argument autre qu'une chaîne."
 
-#: parser.yy:2057
-msgid "Grob name should be alphanumeric"
-msgstr "Un nom de Grob devrait être alphanumérique"
+#: parser.yy:2337
+msgid "bad context property path"
+msgstr "chemin erroné d'accès à la propriété de contexte"
 
-#: parser.yy:2261
+#: parser.yy:2438
+msgid "simple string expected"
+msgstr "On attendait une chaîne simple"
+
+#: parser.yy:2456
+msgid "symbol expected"
+msgstr "symbole requis"
+
+#: parser.yy:2611
 msgid "not a rhythmic event"
 msgstr "événement non rythmique"
 
-#: parser.yy:2357 parser.yy:2362
+#: parser.yy:2685
+msgid "post-event expected"
+msgstr "On attendait un « post-event »"
+
+#: parser.yy:2694 parser.yy:2699
 msgid "have to be in Lyric mode for lyrics"
 msgstr "Des paroles requièrent d'utiliser le mode Lyric."
 
-#: parser.yy:2477
+#: parser.yy:2767
 msgid "expecting string as script definition"
 msgstr "chaîne requise pour définir un script"
 
-#: parser.yy:2637 parser.yy:2681
-#, c-format
-msgid "not a duration: %d"
-msgstr "%d n'est pas une durée"
+#: parser.yy:2875
+msgid "not an articulation"
+msgstr "n'est pas une articulation"
 
-#: parser.yy:2800
+#: parser.yy:2947 parser.yy:2990
+msgid "not a duration"
+msgstr "ceci n'est pas une durée"
+
+#: parser.yy:3007
+msgid "bass number expected"
+msgstr "On attendait un numéro de basse"
+
+#: parser.yy:3106
 msgid "have to be in Note mode for notes"
 msgstr "Des notes requièrent d'utiliser le mode Note."
 
-#: parser.yy:2855
+#: parser.yy:3166
 msgid "have to be in Chord mode for chords"
 msgstr "Des accords requièrent d'utiliser le mode Chord."
 
-#: parser.yy:3115
+#: parser.yy:3181
+msgid "markup outside of text script or \\lyricmode"
+msgstr "« markup » en dehors d'un script textuel ou de \\lyricmode"
+
+#: parser.yy:3186
+msgid "unrecognized string, not in text script or \\lyricmode"
+msgstr "chaîne non reconnue ; en dehors d'un script textuel ou de \\lyricmode"
+
+#: parser.yy:3347 parser.yy:3356
+msgid "not an unsigned integer"
+msgstr "n'est pas un entier sans signe"
+
+#: parser.yy:3424
 msgid "not a markup"
 msgstr "n'est pas un « markup »"
 
-#: lexer.ll:218
+#: lexer.ll:224
 msgid "stray UTF-8 BOM encountered"
 msgstr "parasitage par UTF-8 BOM"
 
-#: lexer.ll:221
+#: lexer.ll:227
 msgid "Skipping UTF-8 BOM"
 msgstr "Escamotage d'UTF-8 BOM"
 
@@ -3398,62 +3484,66 @@ msgstr "\\sourcefilename doit être suivi d'une chaîne entre guillemets"
 msgid "integer expected after \\sourcefileline"
 msgstr "\\sourcefilename doit être suivi d'un nombre entier"
 
-#: lexer.ll:327
+#: lexer.ll:331
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput n'est pas permis en dehors des fichiers d'initialisation"
 
-#: lexer.ll:351
+#: lexer.ll:355
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "identificateur erroné ou non défini : « %s »"
 
-#: lexer.ll:377
+#: lexer.ll:381
 msgid "string expected after \\include"
 msgstr "\\include doit être suivi d'une chaîne entre guillemets"
 
-#. backup rule
-#: lexer.ll:387
+#: lexer.ll:391
 msgid "end quote missing"
 msgstr "absence de guillemet fermant"
 
-#: lexer.ll:558
-msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Accolade repérée à la fin d'une parole. Manquerait-il une espace ?"
-
-#: lexer.ll:672
-msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Accolade repérée à la fin d'un « markup ». Manquerait-il une espace ?"
-
-#: lexer.ll:684
+#: lexer.ll:743
 msgid "EOF found inside a comment"
 msgstr "Fin de fichier (EOF) à l'intérieur du commentaire"
 
-#: lexer.ll:782
+#: lexer.ll:748
+msgid "EOF found inside string"
+msgstr "Fin de fichier (EOF) à l'intérieur d'une chaîne"
+
+#: lexer.ll:763
+msgid "Unfinished main input"
+msgstr "Fichier principal non fini"
+
+#: lexer.ll:834
 #, c-format
 msgid "invalid character: `%s'"
 msgstr "caractère invalide : « %s »"
 
-#: lexer.ll:903 lexer.ll:904
+#: lexer.ll:963
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "chaîne d'échappement inconnue : « \\%s »"
 
-#: lexer.ll:1186 lexer.ll:1187
+#: lexer.ll:983
+#, c-format
+msgid "undefined character or shorthand: %s"
+msgstr "caractère ou raccourci non défini : %s"
+
+#: lexer.ll:1275
 msgid "non-UTF-8 input"
 msgstr "la source n'est pas en UTF-8"
 
-#: lexer.ll:1230 lexer.ll:1231
+#: lexer.ll:1319
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr ""
 "%s est plus qu'obsolète ;\n"
 "le plus ancien pouvant être supporté est %s"
 
-#: lexer.ll:1231 lexer.ll:1232
+#: lexer.ll:1320
 msgid "consider updating the input with the convert-ly script"
 msgstr "Envisagez la mise à jour de la source à l'aide du script convert-ly"
 
-#: lexer.ll:1237 lexer.ll:1238
+#: lexer.ll:1326
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr "Programme plus qu'obsolète : %s (le fichier requiert %s)"
@@ -3468,28 +3558,61 @@ msgstr "Appel de « ~a »..."
 msgid "`~a' failed (~a)\n"
 msgstr "échec de « ~a » (~a)\n"
 
-#: backend-library.scm:90
+#: backend-library.scm:93
 #, scheme-format
 msgid "Converting to `~a'...\n"
 msgstr "Conversion à « ~a »...\n"
 
 #. Do not try to guess the name of the png file,
 #. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:99
+#: backend-library.scm:102
 #, scheme-format
 msgid "Converting to ~a..."
 msgstr "Conversion à « ~a »..."
 
-#: backend-library.scm:137
+#: backend-library.scm:140
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "écriture du champ d'entête « ~a » dans « ~a »..."
 
-#: backend-library.scm:187
+#: backend-library.scm:189
 #, scheme-format
 msgid "missing stencil expression `~S'"
 msgstr "absence d'expression stencil « ~S »"
 
+#: bar-line.scm:133
+#, scheme-format
+msgid "Bar glyph ~a not known. Ignoring."
+msgstr "~a n'est pas un glyphe de barre connu ; on l'ignore."
+
+#: bar-line.scm:161
+#, scheme-format
+msgid "Annotation '~a' is allowed in the first argument of a bar line definition only."
+msgstr ""
+"L'annotation « ~a » n'est autorisée qu'en premier argument\n"
+"  dans la définition d'une barre de mesure."
+
+#: bar-line.scm:169
+#, scheme-format
+msgid "Replacement '~a' is allowed in the last argument of a bar line definition only."
+msgstr ""
+"Le remplacement « ~a » n'est autorisé qu'en dernier argument\n"
+"  dans la définition d'une barre de mesure."
+
+#: bar-line.scm:230
+#, scheme-format
+msgid "add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character."
+msgstr ""
+"add-bar-glyph-print-procedure : le glyphe « ~a » doit être un caractère\n"
+"  ASCII simple."
+
+#: bar-line.scm:795
+#, scheme-format
+msgid "No span bar glyph defined for bar glyph '~a'; ignoring."
+msgstr ""
+"Le glyphe de barre « ~a » ne comporte pas de glyphe d'extension ;\n"
+"  on l'ignore."
+
 #: chord-entry.scm:52
 #, scheme-format
 msgid "Spurious garbage following chord: ~A"
@@ -3501,66 +3624,88 @@ msgstr "Information incompréhensible à la suite de l'accord « ~A »"
 msgid "symbol ~S redefined"
 msgstr "symbole « ~S » redéfini"
 
-#: define-event-classes.scm:67
+#: define-event-classes.scm:73
 #, scheme-format
 msgid "unknown parent class `~a'"
 msgstr "Classe parente inconnue : « ~a »"
 
-#: define-markup-commands.scm:887
+#: define-event-classes.scm:107
+#, scheme-format
+msgid "Cannot redefine event class `~S'"
+msgstr "Impossible de redéfinir la classe d'événement « ~S »"
+
+#: define-event-classes.scm:109
+#, scheme-format
+msgid "Undefined parent event class `~S'"
+msgstr "Classe d'événement parente « ~a » non définie"
+
+#: define-markup-commands.scm:1083
 msgid "no systems found in \\score markup, does it have a \\layout block?"
-msgstr "pas de système trouvé dans le bloc \\score, contient-il un bloc \\layout ?"
+msgstr ""
+"pas de système trouvé dans le bloc \\score du « markup » ;\n"
+"  contient-il un bloc \\layout ?"
 
-#: define-markup-commands.scm:2614
+#: define-markup-commands.scm:2847
 #, scheme-format
 msgid "Cannot find glyph ~a"
 msgstr "impossible de trouver le glyphe « ~a »"
 
-#: define-markup-commands.scm:3040
+#: define-markup-commands.scm:3273
 #, scheme-format
 msgid "no brace found for point size ~S "
 msgstr "il n'y a pas d'accolade qui fasse ~S points"
 
-#: define-markup-commands.scm:3041
+#: define-markup-commands.scm:3274
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr "application de la taille par défaut (~S pt)"
 
-#: define-markup-commands.scm:3194
+#: define-markup-commands.scm:3526
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "chaîne de durée invalide : ~a"
 
-#: define-music-types.scm:765
+#: define-markup-commands.scm:3737
+#, scheme-format
+msgid "not a valid duration string: ~a - ignoring"
+msgstr "chaîne de durée invalide : ~a -- ignorée"
+
+#: define-music-types.scm:792
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr "symbole requis : ~S"
 
-#: define-music-types.scm:768
+#: define-music-types.scm:795
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr "impossible de trouver l'objet de type musique : ~S"
 
-#: define-music-types.scm:787
+#: define-music-types.scm:815
+#, scheme-format
+msgid "bad make-music argument: ~S"
+msgstr "argument de make-music erronné : ~S"
+
+#: define-music-types.scm:827
 #, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "type de répétition inconnu : « ~S »"
 
-#: define-music-types.scm:788
+#: define-music-types.scm:828
 msgid "See define-music-types.scm for supported repeats"
 msgstr ""
 "Consulter define-music-types.scm pour connaître les répétitions\n"
 " prises en charge"
 
-#: define-note-names.scm:962
+#: define-note-names.scm:972
 msgid "Select note names language."
 msgstr "Sélection de la langue des noms de note."
 
-#: define-note-names.scm:968
+#: define-note-names.scm:978
 #, scheme-format
 msgid "Using `~a' note names..."
 msgstr "Utilisation de « ~a » pour le nom des notes..."
 
-#: define-note-names.scm:971
+#: define-note-names.scm:981
 #, scheme-format
 msgid "Could not find language `~a'.  Ignoring."
 msgstr ""
@@ -3606,7 +3751,7 @@ msgstr ""
 "impossible de trouver une description de la propriété « ~S »\n"
 " (~S)"
 
-#: flag-styles.scm:151
+#: flag-styles.scm:162
 #, scheme-format
 msgid "flag stroke `~a' or `~a' not found"
 msgstr "type de crochet inconnu : « ~a » ou « ~a »"
@@ -3636,7 +3781,7 @@ msgstr "imposible de réaliser l'intégration ~S=~S"
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr "impossible d'intégrer les fontes ~s ~s ~s"
 
-#: framework-ps.scm:686
+#: framework-ps.scm:687
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
@@ -3684,20 +3829,20 @@ msgstr "Erreur de définition de ligature : attendait (~S,~S), ~S trouvé."
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr "Erreur de définition de ligature : attendait ~S 0, repéré ~S."
 
-#: lily-library.scm:299
+#: lily-library.scm:333
 msgid "Music unsuitable for context-mod"
 msgstr "Inadéquation entre la musique et le context-mod"
 
-#: lily-library.scm:349
+#: lily-library.scm:388
 #, scheme-format
 msgid "Cannot find context-def \\~a"
 msgstr "Impossible de repérer un context-def (définition de contexte) \\~a"
 
-#: lily-library.scm:365
+#: lily-library.scm:404
 msgid "Music unsuitable for output-def"
 msgstr "Inadéquation entre la musique et le output-def"
 
-#: lily-library.scm:892
+#: lily-library.scm:884
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
 "which produces the closest match to @var{target-val} if\n"
@@ -3707,49 +3852,53 @@ msgstr ""
 "(nombre entier) qui soit le plus proche de @var{valeur-cible}\n"
 "lorsqu'appliqué à la fonction @var{appelant}."
 
-#: lily-library.scm:966
+#: lily-library.scm:955
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr "unité inconnue : ~S"
 
-#: lily-library.scm:991
+#: lily-library.scm:980
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 "déclaration de \\version absente ;\n"
 "  ajoutez ~a pour une compatibilité future"
 
-#: lily-library.scm:997
-msgid "old relative compatibility not used"
-msgstr "compatibilité avec l'ancien mode relatif non utilisée"
+#: lily.scm:75
+msgid "call-after-session used after session start"
+msgstr "call-after-session utilisé après le début de la session"
+
+#: lily.scm:93
+msgid "define-session used after session start"
+msgstr "define-session utilisé après le début de la session"
 
-#: lily.scm:234
+#: lily.scm:393
 msgid "Using (ice-9 curried-definitions) module\n"
 msgstr "Utilisation du module (ice-9 curried-definitions)\n"
 
-#: lily.scm:237
+#: lily.scm:396
 msgid "Guile 1.8\n"
 msgstr "Guile 1.8\n"
 
-#: lily.scm:297
+#: lily.scm:455
 #, scheme-format
 msgid "cannot find: ~A"
 msgstr "impossible de trouver « ~A »"
 
-#: lily.scm:708
+#: lily.scm:878
 msgid "Success: compilation successfully completed"
 msgstr "Compilation menée à son terme, avec succès."
 
-#: lily.scm:709
+#: lily.scm:879
 msgid "Compilation completed with warnings or errors"
 msgstr "Compilation menée à son terme, avec des avertissements ou erreurs."
 
-#: lily.scm:771
+#: lily.scm:940
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr "le travail « ~a » s'est terminé avec le signal ~a"
 
-#: lily.scm:774
+#: lily.scm:943
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
@@ -3758,17 +3907,17 @@ msgstr ""
 "fichier journal « ~a » (sortie ~a) :\n"
 "~a"
 
-#: lily.scm:796 lily.scm:882
+#: lily.scm:965 lily.scm:1054
 #, scheme-format
 msgid "failed files: ~S"
 msgstr "erreur sur les fichiers ~S"
 
-#: lily.scm:873
+#: lily.scm:1045
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Redirection de la sortie vers « ~a »..."
 
-#: lily.scm:892 ps-to-png.scm:66
+#: lily.scm:1064 ps-to-png.scm:66
 #, scheme-format
 msgid "Invoking `~a'...\n"
 msgstr "Appel de « ~a »...\n"
@@ -3785,7 +3934,7 @@ msgstr ""
 "type d'argument erroné pour ~a.\n"
 " Attendait ~a, ~s trouvé"
 
-#: ly-syntax-constructors.scm:188
+#: ly-syntax-constructors.scm:199
 #, scheme-format
 msgid "Invalid property operation ~a"
 msgstr "Opération de propriété invalide : ~a"
@@ -3802,7 +3951,7 @@ msgstr ""
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr ""
 "Argument invalide à la position ~A.\n"
-" ~A requis, trouvé ~S ."
+" ~A requis, trouvé ~S."
 
 #: markup-macros.scm:373
 #, scheme-format
@@ -3844,63 +3993,63 @@ msgstr ""
 msgid "invalid tremolo repeat count: ~a"
 msgstr "nombre de répétition en trémolo invalide : ~a"
 
-#: music-functions.scm:689
+#: music-functions.scm:459
+#, scheme-format
+msgid "bad grob property path ~a"
+msgstr "chemin d'accès au « grob » erroné : ~a"
+
+#: music-functions.scm:753
 msgid "Bad chord repetition"
 msgstr "Mauvaise répétition d'accord"
 
-#: music-functions.scm:724
+#: music-functions.scm:788
 #, scheme-format
 msgid "music expected: ~S"
 msgstr "~S requiert de la musique"
 
-#: music-functions.scm:1042
+#: music-functions.scm:1144
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr "impossible de trouver la citation de musique « ~S »"
 
-#: music-functions.scm:1180
+#: music-functions.scm:1282
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr "Ajoute @var{octave-shift} à l'octave de @var{hauteur}."
 
-#: music-functions.scm:1240
+#: music-functions.scm:1342
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr "Octave inconnue : « ~S »"
 
-#: music-functions.scm:1241
+#: music-functions.scm:1343
 msgid "Defaulting to 'any-octave."
 msgstr "Application de la valeur par défaut 'any-octave."
 
-#: music-functions.scm:1578
+#: music-functions.scm:1688
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "style d'altération inconnu : ~S"
 
-#: output-ps.scm:277 output-svg.scm:524
+#: output-ps.scm:278 output-svg.scm:539
 #, scheme-format
 msgid "unknown line-cap-style: ~S"
 msgstr "line-cap-style inconnu : ~S"
 
-#: output-ps.scm:282 output-svg.scm:530
+#: output-ps.scm:283 output-svg.scm:545
 #, scheme-format
 msgid "unknown line-join-style: ~S"
 msgstr "line-join-style inconnu : ~S"
 
-#: output-svg.scm:47
-#, scheme-format
-msgid "undefined: ~S"
-msgstr "~S indéfini(e)"
-
-#: output-svg.scm:157
+#: output-svg.scm:148
 #, scheme-format
 msgid "cannot decypher Pango description: ~a"
 msgstr "la description de Pango ne peut être déchiffrée : ~a"
 
-#: output-svg.scm:237
+#: output-svg.scm:228
 msgid "Glyph must have a unicode value"
 msgstr "Un glyphe doit avoir une valeur unicode"
 
-#: output-svg.scm:289 output-svg.scm:299
+#: output-svg.scm:280 output-svg.scm:290
 #, scheme-format
 msgid "cannot find SVG font ~S"
 msgstr "fonte SVG « ~S » introuvable."
@@ -3909,87 +4058,87 @@ msgstr "fonte SVG « ~S » introuvable."
 msgid "set-global-staff-size: not in toplevel scope"
 msgstr "set-global-staff-size n'est pas à un niveau de portée globale"
 
-#: paper.scm:315
+#: paper.scm:320
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "~S n'est pas un objet de \\layout {}"
 
-#: paper.scm:327
+#: paper.scm:328
 #, scheme-format
 msgid "Unknown paper size: ~a"
 msgstr "Format de papier inconnu : ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:342
+#: paper.scm:347
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "#(set-paper-size ..) doit être dans la section \\paper { ... }"
 
-#: parser-clef.scm:143 parser-clef.scm:183
+#: parser-clef.scm:164
 #, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "type de clef inconnu : « ~a »"
 
-#: parser-clef.scm:144 parser-clef.scm:184
+#: parser-clef.scm:165
 #, scheme-format
 msgid "supported clefs: ~a"
 msgstr "clefs reconnues : ~a"
 
-#: parser-ly-from-scheme.scm:73
+#: parser-ly-from-scheme.scm:74
 msgid "error in #{ ... #}"
 msgstr "erreur dans #{ ... #}"
 
 #: part-combiner.scm:598
 #, scheme-format
 msgid "quoted music `~a' is empty"
-msgstr "il n'y a rien à reproduire de « ~a » "
+msgstr "il n'y a rien à reproduire dans « ~a »"
 
 #: ps-to-png.scm:70
 #, scheme-format
 msgid "~a exited with status: ~S"
 msgstr "~a s'est terminé avec le statut ~S"
 
-#: to-xml.scm:191
+#: to-xml.scm:190
 #, scheme-format
 msgid "assertion failed: ~S"
 msgstr "erreur d'assertion : ~S"
 
-#: translation-functions.scm:359
+#: translation-functions.scm:368
 #, scheme-format
 msgid "Negative fret for pitch ~a on string ~a"
 msgstr "La hauteur « ~a » sur la corde « ~a » donne un fret négatif"
 
-#: translation-functions.scm:362
+#: translation-functions.scm:371
 #, scheme-format
 msgid "Missing fret for pitch ~a on string ~a"
 msgstr "Aucun fret pour « ~a » sur la corde « ~a »"
 
-#: translation-functions.scm:413
+#: translation-functions.scm:414
 #, scheme-format
 msgid "No open string for pitch ~a"
 msgstr "Pas de corde à vide pour la hauteur « ~a »"
 
-#: translation-functions.scm:428 translation-functions.scm:440
+#: translation-functions.scm:429 translation-functions.scm:441
 #, scheme-format
 msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
 msgstr ""
 "Hauteur et corde requises demandent un fret négatif :\n"
 " corde « ~a » hauteur « ~a »"
 
-#: translation-functions.scm:431
+#: translation-functions.scm:432
 msgid "Ignoring string request and recalculating."
 msgstr "Cette corde sera ignorée et redéfinie."
 
-#: translation-functions.scm:443
+#: translation-functions.scm:444
 msgid "Ignoring note in tablature."
 msgstr "Cette note sera ignorée dans la tablature."
 
-#: translation-functions.scm:466
+#: translation-functions.scm:469
 #, scheme-format
 msgid "No string for pitch ~a (given frets ~a)"
 msgstr "Aucune corde ne contient la hauteur « ~a » avec un fret « ~a »"
 
-#: translation-functions.scm:571
+#: translation-functions.scm:574
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
index c743596bd0ecff608e5f0aa5ebd4555f2ef0b67f..f427b73c212cc6932b078bc643a1c6374e5c005d 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -4,14 +4,14 @@
 #
 # Tineke de Munnik <jantien@xs4all.nl>, 1998.
 # Maurizio Umberto Puxeddu <umbpux@tin.it>, 1999
-# Federico Bruni <fedelogy@gmail.com>, 2009-2012, 2012.
+# Federico Bruni <fedelogy@gmail.com>, 2009-2012, 2012, 2013.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.15.95\n"
+"Project-Id-Version: lilypond 2.17.96\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2012-08-11 14:29+0200\n"
-"PO-Revision-Date: 2012-08-23 18:46+0200\n"
+"POT-Creation-Date: 2013-11-24 12:14+0000\n"
+"PO-Revision-Date: 2013-11-29 00:27+0100\n"
 "Last-Translator: Federico Bruni <fedelogy@gmail.com>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
 "Language: it\n"
@@ -19,6 +19,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Gtranslator 2.91.6\n"
 
 #: book_base.py:26
 #, python-format
@@ -29,20 +30,20 @@ msgstr "file non trovato: %s"
 msgid "Output function not implemented"
 msgstr "Funzione di output non implementata"
 
-#: book_latex.py:170
+#: book_latex.py:174
 msgid "cannot find \\begin{document} in LaTeX document"
 msgstr "impossibile trovare \\begin{document} nel documento LaTeX"
 
-#: book_latex.py:188
+#: book_latex.py:190
 #, python-format
 msgid "Running `%s' on file `%s' to detect default page settings.\n"
 msgstr "Esecuzione di \"%s\" sul file \"%s\" per individuare le impostazioni predefinite della pagina.\n"
 
-#: book_latex.py:209 book_texinfo.py:228
+#: book_latex.py:212 book_texinfo.py:228
 msgid "Unable to auto-detect default settings:\n"
 msgstr "Impossibile individuare automaticamente le impostazioni predefinite:\n"
 
-#: book_latex.py:221 book_texinfo.py:240
+#: book_latex.py:224 book_texinfo.py:240
 #, python-format
 msgid ""
 "Unable to auto-detect default settings:\n"
@@ -51,61 +52,65 @@ msgstr ""
 "Impossibile individuare le impostazioni predefinite:\n"
 "%s"
 
-#: book_snippets.py:409
+#: book_latex.py:247
+msgid "cannot detect textwidth from LaTeX"
+msgstr "impossibile rilevare la larghezza del testo da LaTeX"
+
+#: book_snippets.py:406
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "opzione ly-option deprecata: %s=%s"
 
-#: book_snippets.py:411
+#: book_snippets.py:408
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr "traduzione in modalità compatibile: %s=%s"
 
-#: book_snippets.py:414
+#: book_snippets.py:411
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "opzione ly-option deprecata: %s"
 
-#: book_snippets.py:416
+#: book_snippets.py:413
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr "traduzione in modalità compatibile: %s"
 
-#: book_snippets.py:533
+#: book_snippets.py:530
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "l'opzione ly sconosciuta viene ignorata: %s"
 
-#: book_snippets.py:624
+#: book_snippets.py:621
 #, python-format
 msgid "Missing files: %s"
 msgstr "File mancanti: %s"
 
-#: book_snippets.py:654
+#: book_snippets.py:651
 #, python-format
 msgid "Could not overwrite file %s"
 msgstr "Impossibile scrivere sul file «%s»"
 
-#: book_snippets.py:741
+#: book_snippets.py:738
 #, python-format
 msgid "Running through filter `%s'"
 msgstr "Esecuzione attraverso il filtro «%s»"
 
-#: book_snippets.py:761
+#: book_snippets.py:759
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "«%s» fallito (%d)"
 
-#: book_snippets.py:762
+#: book_snippets.py:760
 msgid "The error log is as follows:"
 msgstr "Il registro dell'errore è il seguente:"
 
-#: book_snippets.py:882
+#: book_snippets.py:880
 #, python-format
 msgid "Converting MusicXML file `%s'...\n"
 msgstr "Conversione del file MusicXML «%s»...\n"
 
-#: book_snippets.py:909
+#: book_snippets.py:907
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of original file,\n"
@@ -114,7 +119,7 @@ msgstr ""
 "%s: il nome del file è duplicato ma i suoi contenuti sono diversi dal\n"
 "file originale, si mostrano le differenze rispetto al file esistente."
 
-#: book_snippets.py:922
+#: book_snippets.py:920
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of converted lilypond file,\n"
@@ -131,129 +136,129 @@ msgstr ""
 msgid "Running texi2pdf on file %s to detect default page settings.\n"
 msgstr "Si esegue texi2pdf sul file %s per individuare le impostazioni predefinite della pagina.\n"
 
-#: convertrules.py:12
+#: convertrules.py:13
 #, python-format
 msgid "Not smart enough to convert %s."
 msgstr "Non abbastanza intelligente per convertire %s."
 
-#: convertrules.py:13
+#: convertrules.py:14
 msgid "Please refer to the manual for details, and update manually."
 msgstr "Si consulti il manuale per i dettagli e si aggiorni manualmente."
 
-#: convertrules.py:14
+#: convertrules.py:15
 #, python-format
 msgid "%s has been replaced by %s"
 msgstr "%s è stato sostituito da %s"
 
-#: convertrules.py:24 lilylib.py:131 warn.cc:223
+#: convertrules.py:25 lilylib.py:136 warn.cc:223
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "attenzione: %s"
 
-#: convertrules.py:49 convertrules.py:94
+#: convertrules.py:50 convertrules.py:95
 msgid "\\header { key = concat + with + operator }"
 msgstr "\\header { chiave = concat + con + operatore }"
 
-#: convertrules.py:56
+#: convertrules.py:57
 #, python-format
 msgid "deprecated %s"
 msgstr "%s è deprecato"
 
-#: convertrules.py:65
+#: convertrules.py:66
 msgid "deprecated \\textstyle, new \\key syntax"
 msgstr "\\textstyle deprecato, nuova sintassi per \\key"
 
-#: convertrules.py:81 convertrules.py:1855 convertrules.py:2031
-#: convertrules.py:2174 convertrules.py:2505 convertrules.py:2800
-#: convertrules.py:3150
+#: convertrules.py:82 convertrules.py:1856 convertrules.py:2032
+#: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801
+#: convertrules.py:3151 convertrules.py:3385
 msgid "bump version for release"
 msgstr "aumentare il numero di versione per il rilascio"
 
-#: convertrules.py:97
+#: convertrules.py:98
 msgid "new \\header format"
 msgstr "nuovo formato di \\header"
 
-#: convertrules.py:124
+#: convertrules.py:125
 msgid "\\translator syntax"
 msgstr "sintassi di \\translator"
 
-#: convertrules.py:175
+#: convertrules.py:176
 msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
 msgstr "\\repeat NUMERO Alternativa Musicale -> \\repeat FOLDSTR Alternativa Musicale"
 
-#: convertrules.py:205 convertrules.py:678 convertrules.py:1350
-#: convertrules.py:2317
+#: convertrules.py:206 convertrules.py:679 convertrules.py:1351
+#: convertrules.py:2318
 #, python-format
 msgid "deprecate %s"
 msgstr "%s è deprecato"
 
-#: convertrules.py:279
+#: convertrules.py:280
 #, python-format
 msgid "deprecate %s "
 msgstr "%s è deprecato "
 
-#: convertrules.py:305
+#: convertrules.py:306
 msgid "new \\notenames format"
 msgstr "nuovo formato di \\notenames"
 
-#: convertrules.py:321
+#: convertrules.py:322
 msgid "new tremolo format"
 msgstr "nuovo formato di tremolo"
 
-#: convertrules.py:325
+#: convertrules.py:326
 msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver"
 msgstr "Staff_margin_engraver è deprecato, usare Instrument_name_engraver"
 
-#: convertrules.py:376
+#: convertrules.py:377
 msgid "change property definition case (eg. onevoice -> oneVoice)"
 msgstr "cambia le maiuscole della definizione di proprietà (es: onevoice -> oneVoice)"
 
-#: convertrules.py:437
+#: convertrules.py:438
 msgid "new \\textscript markup text"
 msgstr "nuovo testo di marcatura \\textscript"
 
-#: convertrules.py:509
+#: convertrules.py:510
 #, python-format
 msgid "identifier names: %s"
 msgstr "nomi dell'identificatore: %s"
 
-#: convertrules.py:548
+#: convertrules.py:549
 msgid "point-and-click argument changed to procedure."
 msgstr "l'argomento point-and-click è stato cambiato in procedura."
 
-#: convertrules.py:590
+#: convertrules.py:591
 msgid "semicolons removed"
 msgstr "punti e virgola eliminati"
 
 #. 40 ?
-#: convertrules.py:633
+#: convertrules.py:634
 #, python-format
 msgid "%s property names"
 msgstr "nomi della proprietà %s"
 
-#: convertrules.py:703
+#: convertrules.py:704
 msgid "automaticMelismata turned on by default"
 msgstr "automaticMelismata attivato per impostazione predefinita"
 
-#: convertrules.py:708
+#: convertrules.py:709
 msgid "automaticMelismata is turned on by default since 1.5.67."
 msgstr "automaticMelismata attivato per impostazione predefinita dalla versione 1.5.67."
 
-#: convertrules.py:942 convertrules.py:1635 convertrules.py:1889
-#: convertrules.py:2134
+#: convertrules.py:943 convertrules.py:1636 convertrules.py:1890
+#: convertrules.py:2135
 #, python-format
 msgid "remove %s"
 msgstr "elimina %s"
 
-#: convertrules.py:977 convertrules.py:980
+#: convertrules.py:978 convertrules.py:981
 msgid "cluster syntax"
 msgstr "sintassi dei cluster"
 
-#: convertrules.py:987
+#: convertrules.py:988
 msgid "new Pedal style syntax"
 msgstr "nuova sintassi di stile del Pedale"
 
-#: convertrules.py:1246
+#: convertrules.py:1247
 msgid ""
 "New relative mode,\n"
 "Postfix articulations, new text markup syntax, new chord syntax."
@@ -261,28 +266,28 @@ msgstr ""
 "Nuovo modo relativo.\n"
 "Articolazioni suffisse, nuova sintassi di marcatura del testo, nuova sintassi degli accordi."
 
-#: convertrules.py:1259
+#: convertrules.py:1260
 msgid "Remove - before articulation"
 msgstr "Elimina - prima dell'articolazione"
 
-#: convertrules.py:1294
+#: convertrules.py:1295
 #, python-format
 msgid "%s misspelling"
 msgstr "errore di digitazione in %s"
 
-#: convertrules.py:1313
+#: convertrules.py:1314
 msgid "Swap < > and << >>"
 msgstr "Scambia < > e << >>"
 
-#: convertrules.py:1316
+#: convertrules.py:1317
 msgid "attempting automatic \\figures conversion.  Check results!"
 msgstr "tentativo di conversione automatica di \\figures.  Controllare i risultati!"
 
-#: convertrules.py:1362
+#: convertrules.py:1363
 msgid "Use Scheme code to construct arbitrary note events."
 msgstr "Usa il codice di Scheme per costruire eventi arbitrari della nota."
 
-#: convertrules.py:1369
+#: convertrules.py:1370
 msgid ""
 "use symbolic constants for alterations,\n"
 "remove \\outputproperty, move ly:verbose into ly:get-option"
@@ -290,7 +295,7 @@ msgstr ""
 "usa costanti simboliche per le alterazioni,\n"
 "togli \\outproperty, sostituisci ly:verbose con ly:get-option"
 
-#: convertrules.py:1394
+#: convertrules.py:1395
 #, python-format
 msgid ""
 "\\outputproperty found,\n"
@@ -307,7 +312,7 @@ msgstr ""
 "\n"
 "come testo sostitutivo."
 
-#: convertrules.py:1406
+#: convertrules.py:1407
 msgid ""
 "The alteration field of Scheme pitches was multiplied by 2\n"
 "to support quarter tone accidentals.  You must update the following constructs manually:\n"
@@ -321,15 +326,15 @@ msgstr ""
 "* chiamate a ly:make-pitch e ly:pitch-alteration\n"
 "* impostazioni di keySignature fatte con \\property\n"
 
-#: convertrules.py:1449
+#: convertrules.py:1450
 msgid "removal of automaticMelismata; use melismaBusyProperties instead."
 msgstr "eliminazione di automaticMelismata; al suo posto usare melismaBusyProperties."
 
-#: convertrules.py:1556
+#: convertrules.py:1557
 msgid "\\partcombine syntax change to \\newpartcombine"
 msgstr "cambio nella sintassi da \\partcombine a \\newpartcombine"
 
-#: convertrules.py:1581
+#: convertrules.py:1582
 msgid ""
 "Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
 "Harmonic notes. Thread context removed. Lyrics context removed."
@@ -337,11 +342,11 @@ msgstr ""
 "Cambiamenti della notazione per percussioni, eliminati \\chordmodifiers e \\notenames.\n"
 "Note armoniche. Eliminati i contesti Thread e Lyrics."
 
-#: convertrules.py:1585
+#: convertrules.py:1586
 msgid "Drums found. Enclose drum notes in \\drummode"
 msgstr "Trovate percussioni. Inserisci le note delle percussioni in \\drummode"
 
-#: convertrules.py:1596 convertrules.py:1603 convertrules.py:1614
+#: convertrules.py:1597 convertrules.py:1604 convertrules.py:1615
 #, python-format
 msgid ""
 "\n"
@@ -350,33 +355,33 @@ msgstr ""
 "\n"
 "Si è trovato %s. Controlla il file manualmente!\n"
 
-#: convertrules.py:1596
+#: convertrules.py:1597
 msgid "Drum notation"
 msgstr "Notazione delle percussioni"
 
-#: convertrules.py:1655
+#: convertrules.py:1656
 msgid "new syntax for property settings:"
 msgstr "nuova sintassi per le impostazioni delle proprietà:"
 
-#: convertrules.py:1681
+#: convertrules.py:1682
 msgid "Property setting syntax in \\translator{ }"
 msgstr "Sintassi per impostare una proprietà in \\translator{ }"
 
-#: convertrules.py:1720
+#: convertrules.py:1721
 msgid "Scheme grob function renaming"
-msgstr "Rinominare la funzione di grob di Scheme"
+msgstr "Rinominare la funzione grob di Scheme"
 
-#: convertrules.py:1731 convertrules.py:2138 convertrules.py:2142
-#: convertrules.py:2708
+#: convertrules.py:1732 convertrules.py:2139 convertrules.py:2143
+#: convertrules.py:2709
 #, python-format
 msgid "Use %s\n"
 msgstr "Usa %s\n"
 
-#: convertrules.py:1747
+#: convertrules.py:1748
 msgid "More Scheme function renaming"
 msgstr "Rinominare altre funzioni di Scheme"
 
-#: convertrules.py:1871
+#: convertrules.py:1872
 msgid ""
 "Page layout has been changed, using paper size and margins.\n"
 "textheight is no longer used.\n"
@@ -384,7 +389,7 @@ msgstr ""
 "La formattazione di pagina è stata modificata, usando la dimensione del foglio e i margini.\n"
 "textheight non è più usato.\n"
 
-#: convertrules.py:1957
+#: convertrules.py:1958
 msgid ""
 "\\foo -> \\foomode (for chords, notes, etc.)\n"
 "fold \\new FooContext \\foomode into \\foo."
@@ -392,7 +397,7 @@ msgstr ""
 "\\foo -> \\foomode (per accordi, note, etc.)\n"
 "inserire \\new FooContext \\foomode in \\foo."
 
-#: convertrules.py:1995
+#: convertrules.py:1996
 msgid ""
 "staff size should be changed at top-level\n"
 "with\n"
@@ -406,40 +411,40 @@ msgstr ""
 "  #(set-global-staff-size <ALTEZZA-DEL-RIGO-IN-PUNTI>)\n"
 "\n"
 
-#: convertrules.py:2015
+#: convertrules.py:2016
 msgid "regularize other identifiers"
 msgstr "normalizza altri identificatori"
 
-#: convertrules.py:2083
+#: convertrules.py:2084
 msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
 msgstr "\\encoding: ricodifica intelligente da latin1 a utf-8. Eliminazione di ly:point-and-click"
 
-#: convertrules.py:2094
+#: convertrules.py:2095
 msgid "LilyPond source must be UTF-8"
 msgstr "Il sorgente di LilyPond deve avere la codifica UTF-8"
 
-#: convertrules.py:2097
+#: convertrules.py:2098
 msgid "Try the texstrings backend"
 msgstr "Prova il backend textstrings"
 
-#: convertrules.py:2100
+#: convertrules.py:2101
 #, python-format
 msgid "Do something like: %s"
 msgstr "Fai qualcosa come: %s"
 
-#: convertrules.py:2103
+#: convertrules.py:2104
 msgid "Or save as UTF-8 in your editor"
 msgstr "O salva in formato UTF-8 nel tuo editor"
 
-#: convertrules.py:2153
+#: convertrules.py:2154
 msgid "warn about auto beam settings"
 msgstr "attenzione alle impostazioni delle travature automatiche"
 
-#: convertrules.py:2157
+#: convertrules.py:2158
 msgid "auto beam settings"
 msgstr "impostazioni delle travature automatiche"
 
-#: convertrules.py:2158
+#: convertrules.py:2159
 msgid ""
 "\n"
 "Auto beam settings must now specify each interesting moment in a measure\n"
@@ -449,39 +454,39 @@ msgstr ""
 "Le impostazioni di travatura automatica ora devono specificare esplicitamente ogni momento\n"
 "interessante in una misura; 1/4 non viene più moltiplicato per coprire anche i momenti 1/2 e 3/4.\n"
 
-#: convertrules.py:2271
+#: convertrules.py:2272
 msgid "verticalAlignmentChildCallback has been deprecated"
 msgstr "verticalAlignmentChildCallback è deprecato"
 
-#: convertrules.py:2276
+#: convertrules.py:2277
 msgid "Remove callbacks property, deprecate XY-extent-callback."
 msgstr "Togli la proprietà di callback, XY-extent-callback è deprecato."
 
-#: convertrules.py:2297
+#: convertrules.py:2298
 msgid "Use grob closures iso. XY-offset-callbacks."
 msgstr "Usa le chiusure del grob al posto di XY-offset-callbacks."
 
-#: convertrules.py:2359
+#: convertrules.py:2360
 msgid "foobar -> foo-bar for \\paper, \\layout"
 msgstr "foobar -> foo-bar per \\paper, \\layout"
 
-#: convertrules.py:2469
+#: convertrules.py:2470
 msgid "deprecate \\tempo in \\midi"
 msgstr "\\tempo in un blocco \\midi è deprecato"
 
-#: convertrules.py:2522
+#: convertrules.py:2523
 msgid "deprecate cautionary-style. Use AccidentalCautionary properties"
 msgstr "cautionary-style è deprecato. Usa le proprietà di AccidentalCautionary"
 
-#: convertrules.py:2535
+#: convertrules.py:2536
 msgid "Rename accidental glyphs, use glyph-name-alist."
 msgstr "Rinomina i glifi delle alterazioni, usa glyph-name-alist."
 
-#: convertrules.py:2590
+#: convertrules.py:2591
 msgid "edge-text settings for TextSpanner"
 msgstr "Impostazioni di edge-text per TextSpanner"
 
-#: convertrules.py:2591
+#: convertrules.py:2592
 #, python-format
 msgid ""
 "Use\n"
@@ -492,35 +497,35 @@ msgstr ""
 "\n"
 "%s"
 
-#: convertrules.py:2624
+#: convertrules.py:2625
 msgid "Use the `alignment-offsets' sub-property of\n"
 msgstr "Usa «alignment-offsets», sottoproprietà di\n"
 
-#: convertrules.py:2625
+#: convertrules.py:2626
 msgid "NonMusicalPaperColumn #'line-break-system-details\n"
 msgstr "NonMusicalPaperColumn #'line-break-system-details\n"
 
-#: convertrules.py:2626
+#: convertrules.py:2627
 msgid "to set fixed distances between staves.\n"
 msgstr "per impostare distanze fisse tra i righi.\n"
 
-#: convertrules.py:2638
+#: convertrules.py:2639
 msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
 msgstr "Usa #'style e non #'dash-fraction per ottenere linee continue o tratteggiate."
 
-#: convertrules.py:2644
+#: convertrules.py:2645
 msgid "all settings related to dashed lines"
 msgstr "tutte le impostazioni relative alle linee tratteggiate"
 
-#: convertrules.py:2645
+#: convertrules.py:2646
 msgid "Use \\override ... #'style = #'line for solid lines and\n"
 msgstr "Usa \\override ... #'style = #'line per le linee continue e\n"
 
-#: convertrules.py:2646
+#: convertrules.py:2647
 msgid "\t\\override ... #'style = #'dashed-line for dashed lines."
 msgstr "\t\\override ... #'style = #'dashed-line per le linee tratteggiate."
 
-#: convertrules.py:2682
+#: convertrules.py:2683
 msgid ""
 "metronomeMarkFormatter uses text markup as second argument,\n"
 "fret diagram properties moved to fret-diagram-details."
@@ -528,11 +533,11 @@ msgstr ""
 "il secondo argomento di metronomeMarkFormatter deve essere una marcatura di testo,\n"
 "le proprietà del diagramma dei tasti si trovano ora in fret-diagram-details."
 
-#: convertrules.py:2688
+#: convertrules.py:2689
 msgid "metronomeMarkFormatter got an additional text argument.\n"
 msgstr "metronomeMarkFormatter prende un argomento testuale supplementare.\n"
 
-#: convertrules.py:2689
+#: convertrules.py:2690
 #, python-format
 msgid ""
 "The function assigned to Score.metronomeMarkFunction now uses the signature\n"
@@ -541,48 +546,48 @@ msgstr ""
 "La funzione assegnata a Score.metronomeMarkFunction ora usa l'indicazione\n"
 "%s"
 
-#: convertrules.py:2707
+#: convertrules.py:2708
 #, python-format
 msgid "%s in fret-diagram properties"
 msgstr "%s nelle proprietà di fret-diagram"
 
-#: convertrules.py:2751
+#: convertrules.py:2752
 msgid "\\put-adjacent argument order"
 msgstr "ordine degli argomenti di \\put-adjacent"
 
-#: convertrules.py:2752
+#: convertrules.py:2753
 msgid "Axis and direction now come before markups:\n"
 msgstr "Asse e direzione ora devono precedere i marcatori:\n"
 
-#: convertrules.py:2753
+#: convertrules.py:2754
 msgid "\\put-adjacent axis dir markup markup."
 msgstr "\\put-adjacent asse direzione marcatore marcatore."
 
-#: convertrules.py:2784
+#: convertrules.py:2785
 msgid "re-definition of InnerStaffGroup"
 msgstr "ridefinizione di InnerStaffGroup"
 
-#: convertrules.py:2789
+#: convertrules.py:2790
 msgid "re-definition of InnerChoirStaff"
 msgstr "ridefinizione di InnerChoirStaff"
 
-#: convertrules.py:2799
+#: convertrules.py:2800
 msgid "Syntax changes for \\addChordShape and \\chord-shape"
 msgstr "Cambiamenti di sintassi per \\addChordShape e \\chord-shape"
 
-#: convertrules.py:2804
+#: convertrules.py:2805
 msgid "stringTuning must be added to addChordShape call.\n"
 msgstr "stringTuning deve essere aggiunto alla chiamata addChordShape.\n"
 
-#: convertrules.py:2809
+#: convertrules.py:2810
 msgid "stringTuning must be added to chord-shape call.\n"
 msgstr "stringTuning deve essere aggiunto alla chiamata chord-shape.\n"
 
-#: convertrules.py:2815
+#: convertrules.py:2816
 msgid "Remove oldaddlyrics"
 msgstr "Elimina oldaddlyrics"
 
-#: convertrules.py:2819
+#: convertrules.py:2820
 msgid ""
 "oldaddlyrics is no longer supported. \n"
 "         Use addlyrics or lyrsicsto instead.\n"
@@ -590,7 +595,7 @@ msgstr ""
 "oldaddlyrics non è più supportato.\n"
 "         Usa addlyrics o lyrsicsto al suo posto.\n"
 
-#: convertrules.py:2825
+#: convertrules.py:2826
 msgid ""
 "keySignature property not reversed any more\n"
 "MIDI 47: orchestral strings -> orchestral harp"
@@ -598,11 +603,11 @@ msgstr ""
 "la proprietà keySignature property non è più invertita\n"
 "MIDI 47: archi orchestrali -> arpa orchestrale"
 
-#: convertrules.py:2830
+#: convertrules.py:2831
 msgid "The alist for Staff.keySignature is no longer in reversed order.\n"
 msgstr "L'alist (association list) di Staff.keySignature non è più in ordine invertito.\n"
 
-#: convertrules.py:2836
+#: convertrules.py:2837
 msgid ""
 "\\bar \".\" now produces a thick barline\n"
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
@@ -612,15 +617,15 @@ msgstr ""
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
 "I parametri del tratteggiato per le legature di portamento e di valore si trovano ora in dash-definition"
 
-#: convertrules.py:2842
+#: convertrules.py:2843
 msgid "\\bar \".\" now produces a thick barline.\n"
 msgstr "\\bar \".\" ora crea una stanghetta spessa.\n"
 
-#: convertrules.py:2848
+#: convertrules.py:2849
 msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
 msgstr "I parametri del tratteggiato per le legature di portamento e di valore si trovano ora in 'dash-details.\n"
 
-#: convertrules.py:2853
+#: convertrules.py:2854
 msgid ""
 "Autobeaming rules have changed.  override-auto-beam-setting and\n"
 "revert-auto-beam-setting have been eliminated.\n"
@@ -646,15 +651,15 @@ msgstr ""
 "La definizione esplicita del contesto della dinamica presa dal modello «Piano centered dynamics»\n"
 "è stata sostituita dal nuovo contesto «Dynamics»."
 
-#: convertrules.py:2867
+#: convertrules.py:2868
 msgid "    Autobeam settings are now overriden with \\overrideBeamSettings.\n"
 msgstr "    Le impostazioni della disposizione automatica delle travature vengono ora sovrascritte con \\overrideBeamSettings.\n"
 
-#: convertrules.py:2872
+#: convertrules.py:2873
 msgid "    Autobeam settings are now reverted with \\revertBeamSettings.\n"
 msgstr "    Le impostazioni della disposizione automatica delle travature vengono ora ripristinate con \\revertBeamSettings.\n"
 
-#: convertrules.py:2878
+#: convertrules.py:2879
 msgid ""
 "    beatGrouping with a specified context must now be accomplished with\n"
 "   \\overrideBeamSettings.\n"
@@ -662,11 +667,11 @@ msgstr ""
 "    beatGrouping in un contesto specifico ora deve essere ottenuto con\n"
 "   \\overrideBeamSettings.\n"
 
-#: convertrules.py:2884
+#: convertrules.py:2885
 msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n"
 msgstr "alignment-offsets è diventato alignment-distances: ora occorre specificare le distanze tra i righi invece dello slittamento (offset) dei righi.\n"
 
-#: convertrules.py:2895
+#: convertrules.py:2896
 msgid ""
 "Remove obsolete engravers/translators: Note_swallow_translator,\n"
 "Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
@@ -678,23 +683,23 @@ msgstr ""
 "Swallow_performer e String_number_engraver.\n"
 "Nuove variabili per la spaziatura verticale."
 
-#: convertrules.py:2926
+#: convertrules.py:2927
 msgid "Vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n"
 msgstr "La spaziatura verticale non dipende più dall'Y-extent di un VerticalAxisGroup.\n"
 
-#: convertrules.py:2932
+#: convertrules.py:2933
 msgid "Unify fetaNumber and fetaDynamic encodings"
 msgstr "Unifica le codifiche di fetaNumber e fetaDynamic"
 
-#: convertrules.py:2937
+#: convertrules.py:2938
 msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 
-#: convertrules.py:2948
+#: convertrules.py:2949
 msgid "\\cresc etc. are now postfix operators"
 msgstr "\\cresc etc. sono ora operatori suffissi"
 
-#: convertrules.py:2960
+#: convertrules.py:2961
 msgid ""
 "Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
@@ -702,23 +707,23 @@ msgstr ""
 "Elimina beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings e \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
 
-#: convertrules.py:2978
+#: convertrules.py:2979
 msgid "Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"
 msgstr "Usa \\set beamExceptions o \\overrideTimeSignatureSettings.\n"
 
-#: convertrules.py:2982
+#: convertrules.py:2983
 msgid "Use \\set beamExceptions or \\revertTimeSignatureSettings.\n"
 msgstr "Usa \\set beamExceptions o \\revertTimeSignatureSettings.\n"
 
-#: convertrules.py:2986
+#: convertrules.py:2987
 msgid "Use baseMoment, beatStructure, and beamExceptions.\n"
 msgstr "Usa baseMoment, beatStructure, e beamExceptions.\n"
 
-#: convertrules.py:2990 convertrules.py:2994
+#: convertrules.py:2991 convertrules.py:2995
 msgid "Use baseMoment and beatStructure.\n"
 msgstr "Usa baseMoment e beatStructure.\n"
 
-#: convertrules.py:2999
+#: convertrules.py:3000
 msgid ""
 "Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n"
 "Deprecate negative dash-period for hidden lines: use #'style = #'none instead."
@@ -726,11 +731,11 @@ msgstr ""
 "Diagrammi dei legni: Spostare dimensione, spessore e grafico da lista di argomenti a proprietà.\n"
 "L'uso di dash-period con valori negativi per creare linee nascoste è deprecato: al suo posto usare #'style = #'none."
 
-#: convertrules.py:3004
+#: convertrules.py:3005
 msgid "Move size, thickness, and graphic to properties.  Argument should be just the key list.\n"
 msgstr "Sposta dimensione, spessore e grafico in proprietà.  L'unico argomento deve essere la lista di chiavi.\n"
 
-#: convertrules.py:3012
+#: convertrules.py:3013
 msgid ""
 "Rename vertical spacing variables.\n"
 "Add fretboard-table argument to savePredefinedFretboard."
@@ -738,23 +743,23 @@ msgstr ""
 "Rinomina le variabili della spaziatura verticale.\n"
 "Aggiungi l'argomento fretboard-table a savePredefinedFretboard."
 
-#: convertrules.py:3030
+#: convertrules.py:3031
 msgid "Rename vertical spacing grob properties."
 msgstr "Rinomina le proprietà di spaziatura verticale dei grob."
 
-#: convertrules.py:3046
+#: convertrules.py:3047
 msgid "Remove \\paper variables head-separation and foot-separation."
 msgstr "Elimina le variabili di \\paper head-separation e foot-separation."
 
-#: convertrules.py:3050
+#: convertrules.py:3051
 msgid "Adjust settings for top-system-spacing instead.\n"
 msgstr "Regola invece le impostazioni di top-system-spacing.\n"
 
-#: convertrules.py:3054
+#: convertrules.py:3055
 msgid "Adjust settings for last-bottom-spacing instead.\n"
 msgstr "Regola invece le impostazioni di last-bottom-spacing.\n"
 
-#: convertrules.py:3060
+#: convertrules.py:3061
 msgid ""
 "Rename space to basic-distance in various spacing alists.\n"
 "Remove HarmonicParenthesesItem grob."
@@ -762,19 +767,19 @@ msgstr ""
 "Rinomina la spaziatura in basic-distance in diverse variabili di spaziatura.\n"
 "Eliminazione del grob HarmonicParenthesesItem."
 
-#: convertrules.py:3067
+#: convertrules.py:3068
 msgid "HarmonicParenthesesItem has been eliminated.\n"
 msgstr "HarmonicParenthesesItem è stato eliminato.\n"
 
-#: convertrules.py:3068
+#: convertrules.py:3069
 msgid "Harmonic parentheses are part of the TabNoteHead grob.\n"
 msgstr "Le parentesi degli armonici fanno parte del grob TabNoteHead.\n"
 
-#: convertrules.py:3073
+#: convertrules.py:3074
 msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n"
 msgstr "Rimuove il contesto da overrideTimeSignatureSettings e revertTimeSignatureSettings.\n"
 
-#: convertrules.py:3080
+#: convertrules.py:3081
 msgid ""
 "Change stringTunings from a list of semitones to a list of pitches.\n"
 "Change tenor and baritone ukulele names in string tunings.\n"
@@ -784,54 +789,62 @@ msgstr ""
 "Sostituzione dei nomi dell'ukulele tenore e baritono con accordature.\n"
 "Generazione dei messaggi per la conversione manuale della spaziatura verticale se richiesto."
 
-#: convertrules.py:3123
+#: convertrules.py:3124
 msgid "Vertical spacing changes might affect user-defined contexts."
 msgstr "Le modifiche della spaziatura verticale possono influire sui contesti definiti dall'utente."
 
-#: convertrules.py:3129
+#: convertrules.py:3130
 msgid "Replace bar-size with bar-extent."
 msgstr "Sostituzione di bar-size con bar-extent."
 
-#: convertrules.py:3141
+#: convertrules.py:3142
 msgid "Woodwind diagrams: Changes to the clarinet diagram."
 msgstr "Diagrammi dei legni: Modifiche al diagramma del clarinetto."
 
-#: convertrules.py:3145
+#: convertrules.py:3146
 msgid "Clarinet fingering changed to reflect actual anatomy of instrument.\n"
 msgstr "La diteggiatura del clarinetto è stata modificata per riflettere l'effettiva anatomia dello strumento.\n"
 
-#: convertrules.py:3155
+#: convertrules.py:3156
 msgid "Handling of non-automatic footnotes."
 msgstr "Gestione delle note a pié di pagina non automatiche."
 
-#: convertrules.py:3159
+#: convertrules.py:3160
 msgid "If you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.\n"
 msgstr "Se si sta usando note a pié di pagina non automatiche, occorre impostare footnote-auto-numbering = ##f nel blocco paper.\n"
 
-#: convertrules.py:3164
+#: convertrules.py:3165
 msgid "Change in internal property for MultiMeasureRest"
 msgstr "Modifica della proprietà interna di MultiMeasureRest"
 
-#: convertrules.py:3168
+#: convertrules.py:3169
 msgid "This internal property has been replaced by round-up-to-longer-rest, round-up-exceptions and usable-duration-logs.\n"
 msgstr "Questa proprietà interna è stata sostituita da round-up-to-longer-rest, round-up-exceptions e usable-duration-logs.\n"
 
-#: convertrules.py:3173
+#: convertrules.py:3174
 msgid "Creation of a Flag grob and moving of certain Stem properties to this grob"
 msgstr "Creazione del grob Flag e spostamento di alcune proprietà di Stem su questo grob"
 
-#: convertrules.py:3209
+#: convertrules.py:3210
 msgid "consistent-broken-slope is now handled through the positions callback.\n"
 msgstr "consistent-broken-slope viene ora gestito attraverso la callback delle posizioni.\n"
 
-#: convertrules.py:3210
+#: convertrules.py:3211
 msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n"
 msgstr "input/regression/beam-broken-classic.ly mostra come vengono gestite ora le travature spezzate.\n"
 
-#: convertrules.py:3368
+#: convertrules.py:3369
 msgid "beamExceptions controls whole-measure beaming."
 msgstr "beamExceptions controlla la disposizione delle travature sull'intera misura."
 
+#: convertrules.py:3606
+msgid "Flag.transparent and Flag.color inherit from Stem"
+msgstr "Flag.transparent e Flag.color ereditano da Stem"
+
+#: convertrules.py:3672
+msgid "Staff-padding now controls the distance to the baseline, not the nearest point."
+msgstr "La spaziatura del rigo (padding) ora controlla la distanza rispetto alla linea di base, non più rispetto al punto più vicino."
+
 #: fontextract.py:25
 #, python-format
 msgid "Scanning %s"
@@ -847,37 +860,37 @@ msgstr "Estratto %s"
 msgid "Writing fonts to %s"
 msgstr "Scrittura dei tipi di carattere su %s"
 
-#: lilylib.py:96
+#: lilylib.py:101
 #, python-format
 msgid "Setting loglevel to %s"
 msgstr "Si imposta il loglevel su %s"
 
-#: lilylib.py:99
+#: lilylib.py:104
 #, python-format
 msgid "Unknown or invalid loglevel '%s'"
 msgstr "Loglevel sconosciuto o non valido '%s'"
 
-#: lilylib.py:128 warn.cc:211
+#: lilylib.py:133 warn.cc:211
 #, c-format, python-format
 msgid "error: %s"
 msgstr "errore: %s"
 
-#: lilylib.py:185
+#: lilylib.py:190
 #, python-format
 msgid "Processing %s.ly"
 msgstr "Elaborazione di %s.ly"
 
-#: lilylib.py:189 lilylib.py:250
+#: lilylib.py:194 lilylib.py:255
 #, python-format
 msgid "Invoking `%s'"
 msgstr "Invocazione di «%s»"
 
-#: lilylib.py:191 lilylib.py:252
+#: lilylib.py:196 lilylib.py:257
 #, python-format
 msgid "Running %s..."
 msgstr "Esecuzione di %s..."
 
-#: lilylib.py:328
+#: lilylib.py:333
 #, python-format
 msgid "Usage: %s"
 msgstr "Uso: %s"
@@ -934,12 +947,12 @@ msgstr "Si è inserita un'ottava di alterazione di tonalità per un numero di al
 msgid "Unable to find instrument for ID=%s\n"
 msgstr "Impossibile trovare lo strumento con ID=%s\n"
 
-#: abc2ly.py:1376 convert-ly.py:81 lilypond-book.py:122 midi2ly.py:1044
+#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
 #, python-format
 msgid "%s [OPTION]... FILE"
 msgstr "%s [OPZIONE]... FILE"
 
-#: abc2ly.py:1377
+#: abc2ly.py:1387
 #, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
@@ -948,29 +961,29 @@ msgstr ""
 "abc2ly converte file musicali ABC (si veda\n"
 "%s) in input LilyPond.\n"
 
-#: abc2ly.py:1385 convert-ly.py:88 etf2ly.py:1208 lilypond-book.py:231
-#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:174
+#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:181
 msgid "show version number and exit"
 msgstr "mostra il numero di versione ed esce"
 
-#: abc2ly.py:1388 convert-ly.py:92 etf2ly.py:1204 lilypond-book.py:140
-#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:153
+#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:160
 msgid "show this help and exit"
 msgstr "mostra questo messaggio di aiuto ed esce"
 
-#: abc2ly.py:1391 etf2ly.py:1209 midi2ly.py:1071
+#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071
 msgid "write output to FILE"
 msgstr "scrive l'output in FILE"
 
-#: abc2ly.py:1394
+#: abc2ly.py:1404
 msgid "be strict about success"
 msgstr "è severo rispetto all'esito"
 
-#: abc2ly.py:1397
+#: abc2ly.py:1407
 msgid "preserve ABC's notion of beams"
 msgstr "preserva la nozione di travatura di ABC"
 
-#: abc2ly.py:1400
+#: abc2ly.py:1410
 msgid "suppress progress messages"
 msgstr "sopprime i messaggi di avanzamento"
 
@@ -978,13 +991,13 @@ msgstr "sopprime i messaggi di avanzamento"
 #. "Report bugs in English via %s",
 #. or if there is a LilyPond users list or forum in your language
 #. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: abc2ly.py:1403 convert-ly.py:146 etf2ly.py:1218 lilypond-book.py:258
-#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:285
+#: abc2ly.py:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:315
 #, c-format, python-format
 msgid "Report bugs via %s"
 msgstr "Segnalare i bug in inglese attraverso %s"
 
-#: convert-ly.py:46
+#: convert-ly.py:47
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
 "version taken from the \\version command, to the current LilyPond version."
@@ -992,100 +1005,108 @@ msgstr ""
 "Aggiorna l'input LilyPond a una nuova versione.  Per impostazione predefinita aggiorna dalla\n"
 "versione presa dal comando \\version alla versione attuale di LilyPond."
 
-#: convert-ly.py:48 lilypond-book.py:82
+#: convert-ly.py:50
+msgid "If FILE is `-', read from standard input."
+msgstr "Se FILE è \"-\", legge dall'input standard."
+
+#: convert-ly.py:52 lilypond-book.py:82
 msgid "Examples:"
 msgstr "Esempi:"
 
-#: convert-ly.py:75 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
+#: convert-ly.py:79 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s di"
 
-#: convert-ly.py:77 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
+#: convert-ly.py:81 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Distribuito secondo i termini della GNU General Public License."
 
-#: convert-ly.py:78 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
+#: convert-ly.py:82 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
 msgid "It comes with NO WARRANTY."
 msgstr "È distribuito con NESSUNA GARANZIA."
 
-#: convert-ly.py:96 convert-ly.py:137
+#: convert-ly.py:100 convert-ly.py:141
 msgid "VERSION"
 msgstr "VERSIONE"
 
-#: convert-ly.py:98
+#: convert-ly.py:102
 msgid "start from VERSION [default: \\version found in file]"
 msgstr "parte dalla VERSIONE [predefinito: \\version del file]"
 
-#: convert-ly.py:101
+#: convert-ly.py:105
 msgid "edit in place"
 msgstr "modifica il file di input"
 
-#: convert-ly.py:105 lilypond-book.py:179 musicxml2ly.py:2627
+#: convert-ly.py:109 lilypond-book.py:179 musicxml2ly.py:2627
 msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)"
 msgstr "Mostra i messaggi di log in base a LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)"
 
-#: convert-ly.py:107 lilypond-book.py:163 lilypond-book.py:181
-#: musicxml2ly.py:2629 main.cc:167
+#: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
+#: musicxml2ly.py:2629 main.cc:174
 msgid "LOGLEVEL"
 msgstr "LOGLEVEL"
 
-#: convert-ly.py:113
+#: convert-ly.py:117
 msgid "do not add \\version command if missing"
 msgstr "non aggiunge il comando \\version se non è presente"
 
-#: convert-ly.py:119
+#: convert-ly.py:123
 #, python-format
 msgid "force updating \\version number to %s"
 msgstr "forza l'aggiornamento del numero di \\version a %s"
 
-#: convert-ly.py:125
+#: convert-ly.py:129
 msgid "only update \\version number if file is modified"
 msgstr "aggiorna il numero di \\version solo se il file è modificato"
 
-#: convert-ly.py:131
+#: convert-ly.py:135
 #, python-format
 msgid "show rules [default: -f 0, -t %s]"
 msgstr "mostra le regole [predefinito: -f 0, -t %s]"
 
-#: convert-ly.py:136
+#: convert-ly.py:140
 #, python-format
 msgid "convert to VERSION [default: %s]"
 msgstr "converte a VERSIONE [predefinito: %s]"
 
-#: convert-ly.py:141 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
-#: main.cc:176
+#: convert-ly.py:147
+msgid "make a numbered backup [default: filename.ext~]"
+msgstr "crea un file di backup numerato (predefinito: nomefile.est~)"
+
+#: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
+#: main.cc:183
 msgid "show warranty and copyright"
 msgstr "mostra la garanzia e il copyright"
 
-#: convert-ly.py:186
+#: convert-ly.py:196
 msgid "Applying conversion: "
 msgstr "Conversione in corso: "
 
-#: convert-ly.py:202
+#: convert-ly.py:215
 msgid "Error while converting"
 msgstr "Errore durante la conversione"
 
-#: convert-ly.py:204
+#: convert-ly.py:217
 msgid "Stopping at last successful rule"
 msgstr "Fermarsi all'ultima regola riuscita"
 
-#: convert-ly.py:231
+#: convert-ly.py:256
 #, python-format
 msgid "Processing `%s'... "
 msgstr "Elaborazione di «%s»... "
 
-#: convert-ly.py:338
+#: convert-ly.py:367
 #, python-format
 msgid "%s: Unable to open file"
 msgstr "%s: Impossibile aprire il file"
 
-#: convert-ly.py:345
+#: convert-ly.py:373
 #, python-format
 msgid "%s: Unable to determine version.  Skipping"
 msgstr "%s: Impossibile determinare la versione. Tralasciato"
 
-#: convert-ly.py:350
+#: convert-ly.py:379
 #, python-format
 msgid ""
 "%s: Invalid version string `%s' \n"
@@ -1094,6 +1115,13 @@ msgstr ""
 "%s: Stringa di versione non valida `%s' \n"
 "Le stringhe di versione valide sono composte da tre numeri separati da punti, ad esempio «2.8.12»"
 
+#: convert-ly.py:385
+#, python-format
+msgid "There was %d error."
+msgid_plural "There were %d errors."
+msgstr[0] "Si è verificato l'errore %d."
+msgstr[1] "Si sono verificati gli errori %d."
+
 #: etf2ly.py:1197
 #, python-format
 msgid "%s [OPTION]... ETF-FILE"
@@ -1108,7 +1136,7 @@ msgstr ""
 "etf2ly converte un sottoinsieme di ETF in un file LilyPond pronto da usare.\n"
 
 #: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
-#: main.cc:159 main.cc:171
+#: main.cc:166 main.cc:178
 msgid "FILE"
 msgstr "FILE"
 
@@ -1146,7 +1174,7 @@ msgid "add DIR to include path"
 msgstr "aggiunge DIR al percorso di inclusione"
 
 #: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
-#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:158
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:165
 msgid "DIR"
 msgstr "DIR"
 
@@ -1236,76 +1264,76 @@ msgstr "esegue l'eseguibile PROGRAMMA invece di texi2pdf"
 msgid "create PDF files for use with PDFTeX"
 msgstr "creare file PDF per l'utilizzo con PDFTeX"
 
-#: lilypond-book.py:455
+#: lilypond-book.py:463
 msgid "Writing snippets..."
 msgstr "Scrittura dei frammenti di codice..."
 
-#: lilypond-book.py:460
+#: lilypond-book.py:468
 msgid "Processing..."
 msgstr "In elaborazione..."
 
-#: lilypond-book.py:465
+#: lilypond-book.py:473
 msgid "All snippets are up to date..."
 msgstr "Tutti i frammenti di codice sono aggiornati..."
 
-#: lilypond-book.py:467
+#: lilypond-book.py:475
 msgid "Linking files..."
 msgstr "Collegamento dei file..."
 
-#: lilypond-book.py:487
+#: lilypond-book.py:495
 #, python-format
 msgid "cannot determine format for: %s"
 msgstr "impossibile determinare il formato per: %s"
 
-#: lilypond-book.py:496
+#: lilypond-book.py:504
 #, python-format
 msgid "%s is up to date."
 msgstr "%s è aggiornato."
 
-#: lilypond-book.py:509
+#: lilypond-book.py:517
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Scrittura di «%s»..."
 
-#: lilypond-book.py:570
+#: lilypond-book.py:580
 msgid "Output would overwrite input file; use --output."
 msgstr "L'output sovrascriverebbe il file di input; usare --output."
 
-#: lilypond-book.py:574
+#: lilypond-book.py:584
 #, python-format
 msgid "Reading %s..."
 msgstr "Lettura di %s..."
 
-#: lilypond-book.py:581
+#: lilypond-book.py:591
 msgid "Dissecting..."
 msgstr "Dissezione di..."
 
-#: lilypond-book.py:592
+#: lilypond-book.py:602
 #, python-format
 msgid "Compiling %s..."
 msgstr "Compilazione di %s"
 
-#: lilypond-book.py:600
+#: lilypond-book.py:610
 #, python-format
 msgid "Processing include: %s"
 msgstr "Elaborazione di include: %s"
 
-#: lilypond-book.py:611
+#: lilypond-book.py:621
 #, python-format
 msgid "Removing `%s'"
 msgstr "Eliminazione di «%s»"
 
-#: lilypond-book.py:704
+#: lilypond-book.py:714
 #, python-format
 msgid "Setting LilyPond's loglevel to %s"
 msgstr "Si imposta il loglevel di LilyPond su %s"
 
-#: lilypond-book.py:708
+#: lilypond-book.py:718
 #, python-format
 msgid "Setting LilyPond's loglevel to %s (from environment variable LILYPOND_LOGLEVEL)"
 msgstr "Si imposta il loglevel di LilyPond su %s (dalla variabile d'ambiente LILYPOND_LOGLEVEL)"
 
-#: lilypond-book.py:711
+#: lilypond-book.py:721
 msgid "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
 msgstr "Si imposta l'output di LilyPond su --verbose, come implicato dall'impostazione di lilypond-book"
 
@@ -1615,15 +1643,15 @@ msgstr "Output inviato a «%s»"
 msgid "Unable to find input file %s"
 msgstr "Impossibile trovare il file di input %s"
 
-#: website_post.py:123
+#: website_post.py:125
 msgid "English"
 msgstr "Inglese"
 
-#: website_post.py:126
+#: website_post.py:128
 msgid "Other languages"
 msgstr "Altre lingue"
 
-#: website_post.py:127
+#: website_post.py:129
 #, python-format
 msgid "About <a href=\"%s\">automatic language selection</a>."
 msgstr "Informazioni sulla <a href=\"%s\">selezione automatica della lingua</a>."
@@ -1703,12 +1731,12 @@ msgstr "la lista tipografica delle alterazioni deve iniziare con context-name: %
 msgid "procedure or context-name expected for accidental rule, found %s"
 msgstr "si aspettava una procedura o context-name per la regola di alterazione accidentale, si è trovato %s"
 
-#: accidental.cc:200
+#: accidental.cc:169
 #, c-format
 msgid "Could not find glyph-name for alteration %s"
 msgstr "Non si è trovato il nome del glifo per l'alterazione %s"
 
-#: accidental.cc:215
+#: accidental.cc:184
 msgid "natural alteration glyph not found"
 msgstr "alterazione naturale del glifo non trovata"
 
@@ -1721,7 +1749,7 @@ msgstr "impossibile trovare il tipo di carattere: «%s»"
 msgid "\\applycontext argument is not a procedure"
 msgstr "l'argomento di \\applycontext non è una procedura"
 
-#: arpeggio.cc:115
+#: arpeggio.cc:138
 msgid "no heads for arpeggio found?"
 msgstr "non sono state trovate teste per l'arpeggio?"
 
@@ -1730,19 +1758,24 @@ msgstr "non sono state trovate teste per l'arpeggio?"
 msgid "cannot change, already in translator: %s"
 msgstr "impossibile cambiare, già nel traduttore: %s"
 
-#: axis-group-engraver.cc:94
+#: axis-group-engraver.cc:149
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver: il gruppo verticale ha già un genitore"
 
-#: axis-group-engraver.cc:95
+#: axis-group-engraver.cc:150
 msgid "are there two Axis_group_engravers?"
 msgstr "ci sono due Axis_group_engravers?"
 
-#: axis-group-engraver.cc:96
+#: axis-group-engraver.cc:151
 msgid "removing this vertical group"
 msgstr "eliminazione di questo gruppo verticale"
 
-#: axis-group-interface.cc:668
+#: axis-group-interface.cc:714
+#, c-format
+msgid "\"%s\" is not a valid outside-staff-placement-directive"
+msgstr "non si può posizionare un oggetto fuori dal rigo con \"%s\" (outside-staff-placement-directive)"
+
+#: axis-group-interface.cc:786
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr "un oggetto esterno al rigo dovrebbe avere una direzione, si imposta in su come da impostazione predefinita"
 
@@ -1751,23 +1784,23 @@ msgstr "un oggetto esterno al rigo dovrebbe avere una direzione, si imposta in s
 msgid "barcheck failed at: %s"
 msgstr "controllo di battuta fallito a: %s"
 
-#: beam-engraver.cc:147
+#: beam-engraver.cc:148
 msgid "already have a beam"
 msgstr "travatura già presente"
 
-#: beam-engraver.cc:230
+#: beam-engraver.cc:235
 msgid "unterminated beam"
 msgstr "travatura non terminata"
 
-#: beam-engraver.cc:266 chord-tremolo-engraver.cc:149
+#: beam-engraver.cc:282 chord-tremolo-engraver.cc:149
 msgid "stem must have Rhythmic structure"
 msgstr "il gambo deve avere una struttura ritmica"
 
-#: beam-engraver.cc:277
+#: beam-engraver.cc:293
 msgid "stem does not fit in beam"
 msgstr "il gambo non rientra nella travatura"
 
-#: beam-engraver.cc:278
+#: beam-engraver.cc:294
 msgid "beam was started here"
 msgstr "la travatura è iniziata qui"
 
@@ -1832,8 +1865,7 @@ msgstr "eliminazione di cluster vuoti"
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr "Coherent_ligature_engraver: impostare `spacing-increment=0.01': ptr=%ul"
 
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:187 constrained-breaking.cc:205
+#: constrained-breaking.cc:187 constrained-breaking.cc:206
 msgid "cannot find line breaking that satisfies constraints"
 msgstr "impossibile trovare interruzioni di linea che soddisfino i vincoli"
 
@@ -1846,35 +1878,40 @@ msgstr "sono necessari argomenti simbolici per \\override e \\revert"
 msgid "cannot find or create new `%s'"
 msgstr "impossibile trovare o creare un nuovo «%s»"
 
-#: context.cc:207
+#: context.cc:228
 #, c-format
 msgid "cannot find or create `%s' called `%s'"
 msgstr "impossibile trovare o creare «%s» chiamato «%s»"
 
-#: context.cc:400
+#: context.cc:425
 #, c-format
 msgid "cannot find or create: `%s'"
 msgstr "impossibile trovare o creare: «%s»"
 
+#: context.cc:439
+#, c-format
+msgid "cannot find or create new Bottom = \"%s\""
+msgstr "impossibile trovare o creare un nuovo Bottom = «%s»"
+
 #: custos.cc:87
 #, c-format
 msgid "custos `%s' not found"
 msgstr "custos «%s» non trovato"
 
-#: dispatcher.cc:83
+#: dispatcher.cc:89
 msgid "Event class should be a list"
 msgstr "La classe evento dovrebbe essere una lista"
 
-#: dispatcher.cc:166
+#: dispatcher.cc:172
 #, c-format
 msgid "Junking event: %s"
 msgstr "Eliminazione dell'evento: %s"
 
-#: dispatcher.cc:262
+#: dispatcher.cc:277
 msgid "Attempting to remove nonexisting listener."
 msgstr "Tentativo di togliere un ascoltatore non esistente."
 
-#: dispatcher.cc:284
+#: dispatcher.cc:303
 msgid "Already listening to dispatcher, ignoring request"
 msgstr "Già in ascolto del controllore, si ignora la richiesta"
 
@@ -1883,25 +1920,19 @@ msgstr "Già in ascolto del controllore, si ignora la richiesta"
 msgid "dot `%s' not found"
 msgstr "punto «%s» non trovato"
 
-#: dynamic-engraver.cc:193
-msgid "cannot find start of (de)crescendo"
-msgstr "impossibile trovare l'inizio del (de)crescendo"
-
-#: dynamic-engraver.cc:200
-msgid "already have a decrescendo"
-msgstr "decrescendo già presente"
-
-#: dynamic-engraver.cc:202
-msgid "already have a crescendo"
-msgstr "crescendo già presente"
-
-#: dynamic-engraver.cc:205
-msgid "cresc starts here"
-msgstr "cresc inizia qui"
+#: dynamic-engraver.cc:168
+#, c-format
+msgid ""
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
+msgstr ""
+"stile di crescendo sconosciuto: %s\n"
+"si usa la forcella predefinita."
 
-#: dynamic-engraver.cc:333
-msgid "unterminated (de)crescendo"
-msgstr "(de)crescendo non terminato"
+#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#, c-format
+msgid "unterminated %s"
+msgstr "%s non terminato"
 
 #. No explicit dynamic script events have occurred yet, but there is
 #. nevertheless a dynamic spanner.  Initialize last_volume_ to a
@@ -1926,12 +1957,12 @@ msgstr "episema non terminato"
 msgid "unterminated extender"
 msgstr "estensore non terminato"
 
-#: flag.cc:113
+#: flag.cc:134
 #, c-format
 msgid "flag `%s' not found"
 msgstr "non si trova la coda uncinata «%s»"
 
-#: flag.cc:133
+#: flag.cc:154
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "non si trova il tratto «%s» della coda uncinata"
@@ -1964,7 +1995,7 @@ msgstr "Inizializzazione di FontConfig..."
 msgid "Building font database..."
 msgstr "Creazione del database dei tipi di carattere..."
 
-#: footnote-engraver.cc:110
+#: footnote-engraver.cc:87
 msgid "Must be footnote-event."
 msgstr "Deve essere un evento nota a pié di pagina (footnote-event)."
 
@@ -1981,15 +2012,15 @@ msgstr "Trovato infinito o un valore non numerico nell'output.  Sostituito con 0
 msgid "unterminated glissando"
 msgstr "glissando non terminato"
 
-#: global-context-scheme.cc:96 global-context-scheme.cc:114
+#: global-context-scheme.cc:95 global-context-scheme.cc:113
 msgid "no music found in score"
 msgstr "nessuna musica trovata nello spartito"
 
-#: global-context-scheme.cc:104
+#: global-context-scheme.cc:103
 msgid "Interpreting music..."
 msgstr "Interpretazione della musica..."
 
-#: global-context-scheme.cc:126
+#: global-context-scheme.cc:125
 #, c-format
 msgid "elapsed time: %.2f seconds"
 msgstr "tempo trascorso: %.2f secondi"
@@ -2029,11 +2060,16 @@ msgstr "Il grob «%s» non ha un'interfaccia per la proprietà «%s»"
 msgid "%d: %s"
 msgstr "%d: %s"
 
+#: grob.cc:488
+#, c-format
+msgid "ignored infinite %s-offset"
+msgstr "%s-offset infinito ignorato"
+
 #: hairpin.cc:60
 msgid "Asking for broken bound padding at a non-broken bound."
 msgstr "Si chiede la spaziatura per un'estremità spezzata in un'estremità non spezzata."
 
-#: hairpin.cc:254
+#: hairpin.cc:256
 msgid "decrescendo too small"
 msgstr "decrescendo troppo piccolo"
 
@@ -2080,31 +2116,31 @@ msgstr "Nessun glifo trovato per l'alterazione: %s"
 msgid "alteration not found"
 msgstr "alterazione non trovata"
 
-#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:104
+#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:109
 msgid "cannot find start of ligature"
 msgstr "impossibile trovare l'inizio della legatura"
 
-#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:131
+#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:136
 msgid "already have a ligature"
 msgstr "legatura già presente"
 
-#: ligature-engraver.cc:109
+#: ligature-engraver.cc:114
 msgid "no right bound"
 msgstr "manca il limite destro"
 
-#: ligature-engraver.cc:140
+#: ligature-engraver.cc:145
 msgid "no left bound"
 msgstr "manca il limite sinistro"
 
-#: ligature-engraver.cc:184
+#: ligature-engraver.cc:189
 msgid "unterminated ligature"
 msgstr "legatura non terminata"
 
-#: ligature-engraver.cc:211
+#: ligature-engraver.cc:216
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "pausa ignorata: la legatura non può contenere una pausa"
 
-#: ligature-engraver.cc:212
+#: ligature-engraver.cc:217
 msgid "ligature was started here"
 msgstr "la legatura è iniziata qui"
 
@@ -2113,34 +2149,34 @@ msgstr "la legatura è iniziata qui"
 msgid "(load path: `%s')"
 msgstr "(percorso di caricamento: «%s»)"
 
-#: lily-guile.cc:416
+#: lily-guile.cc:412
 #, c-format
 msgid "cannot find property type-check for `%s' (%s)."
 msgstr "impossibile trovare la proprietà type-check per «%s» (%s)."
 
-#: lily-guile.cc:419
+#: lily-guile.cc:415
 msgid "perhaps a typing error?"
 msgstr "forse un errore di digitazione?"
 
-#: lily-guile.cc:426
-msgid "doing assignment anyway"
-msgstr "compito comunque in corso"
+#: lily-guile.cc:422
+msgid "skipping assignment"
+msgstr "assegnazione saltata"
 
-#: lily-guile.cc:438
+#: lily-guile.cc:442
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "controllo del tipo per «%s» fallito; il valore «%s» deve essere del tipo «%s»"
 
-#: lily-lexer.cc:255
+#: lily-lexer.cc:249
 msgid "include files are not allowed in safe mode"
 msgstr "l'inclusione di file non è permessa in modalità sicura"
 
-#: lily-lexer.cc:282
+#: lily-lexer.cc:276
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "Il nome dell'identificatore è una parola chiave: «%s»"
 
-#: lily-lexer.cc:303 lily-lexer.cc:316
+#: lily-lexer.cc:297 lily-lexer.cc:310
 #, c-format
 msgid "%s:EOF"
 msgstr "%s:EOF"
@@ -2165,21 +2201,22 @@ msgstr "impossibile trovare il file di init: «%s»"
 msgid "Processing `%s'"
 msgstr "Elaborazione di «%s»"
 
-#: lily-parser-scheme.cc:208
+#: lily-parser-scheme.cc:209
 msgid "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parser-parse-string è valido solo con un nuovo parser.  Usare ly:parser-include-string al suo posto."
 
-#: lily-parser-scheme.cc:239
+#: lily-parser-scheme.cc:240
 msgid "ly:parse-string-expression is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parse-string-expression è valido solo con un nuovo parser.  Usare ly:parser-include-string al suo posto."
 
-#: lily-parser.cc:109
+#: lily-parser.cc:107
 msgid "Parsing..."
 msgstr "Analisi..."
 
-#: line-spanner.cc:373
-msgid "Line spanner's left point is to the right of its right point."
-msgstr "Il punto sinistro dello spanner della linea si trova alla destra del suo punto destro."
+#: lookup.cc:181
+#, c-format
+msgid "Not drawing a box with negative dimension, %.2f by %.2f."
+msgstr "Il riquadro con dimensioni negative, %.2f per %.2f, non verrà disegnato."
 
 #: lyric-combine-music-iterator.cc:199
 msgid "argument of \\lyricsto should contain Lyrics context"
@@ -2194,7 +2231,7 @@ msgstr "impossibile trovare la voce (Voice) «%s»"
 msgid "Lyric syllable does not have note.  Use \\lyricsto or associatedVoice."
 msgstr "Le sillabe del testo non hanno note.  Usare \\lyricsto o associatedVoice."
 
-#: main.cc:101
+#: main.cc:104
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -2206,7 +2243,7 @@ msgstr ""
 "License che permette di modificarlo o distribuirne copie rispettando certe\n"
 "condizioni. Per maggiori informazioni, invocare «%s --warranty».\n"
 
-#: main.cc:107
+#: main.cc:110
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License as \n"
@@ -2238,11 +2275,11 @@ msgstr ""
 "Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:141
+#: main.cc:148
 msgid "SYM[=VAL]"
 msgstr "SIMBOLO[=VALORE]"
 
-#: main.cc:142
+#: main.cc:149
 msgid ""
 "set Scheme option SYM to VAL (default: #t).\n"
 "Use -dhelp for help."
@@ -2250,41 +2287,41 @@ msgstr ""
 "imposta l'opzione di Scheme SIMBOLO a VALORE (predefinito: #t).\n"
 "Usare -dhelp per ottenere aiuto."
 
-#: main.cc:146
+#: main.cc:153
 msgid "EXPR"
 msgstr "ESPRESSIONE"
 
-#: main.cc:146
+#: main.cc:153
 msgid "evaluate scheme code"
 msgstr "valuta il codice scheme"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:149
+#: main.cc:156
 msgid "FORMATs"
 msgstr "FORMATO"
 
-#: main.cc:149
+#: main.cc:156
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr "scarica FORMATO,...  Anche come opzioni separate:"
 
-#: main.cc:150
+#: main.cc:157
 msgid "generate PDF (default)"
 msgstr "genera PDF (predefinito)"
 
-#: main.cc:151
+#: main.cc:158
 msgid "generate PNG"
 msgstr "genera PNG"
 
-#: main.cc:152
+#: main.cc:159
 msgid "generate PostScript"
 msgstr "genera PostScript"
 
-#: main.cc:155
+#: main.cc:162
 msgid "FIELD"
 msgstr "CAMPO"
 
-#: main.cc:155
+#: main.cc:162
 msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
@@ -2292,19 +2329,19 @@ msgstr ""
 "scrive il campo di intestazione CAMPO sul\n"
 "file chiamato BASENAME.CAMPO"
 
-#: main.cc:158
+#: main.cc:165
 msgid "add DIR to search path"
 msgstr "aggiunge DIRECTORY ai percorsi di ricerca"
 
-#: main.cc:159
+#: main.cc:166
 msgid "use FILE as init file"
 msgstr "usa FILE come file di inizializzazione"
 
-#: main.cc:162
+#: main.cc:169
 msgid "USER, GROUP, JAIL, DIR"
 msgstr "UTENTE, GRUPPO, GABBIA, DIRECTORY"
 
-#: main.cc:162
+#: main.cc:169
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
@@ -2312,7 +2349,7 @@ msgstr ""
 "chroot a GABBIA, diventa UTENTE:GRUPPO\n"
 "ed entra in DIRECTORY"
 
-#: main.cc:167
+#: main.cc:174
 msgid ""
 "print log messages according to LOGLEVEL.  Possible values are:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
@@ -2320,24 +2357,24 @@ msgstr ""
 "mostra i messaggi di log in base a LOGLEVEL.  I valori possibili sono:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) e DEBUG."
 
-#: main.cc:171
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
 msgstr "scrive l'output su FILE (verrà aggiunto un suffisso)"
 
-#: main.cc:172
+#: main.cc:179
 msgid "relocate using directory of lilypond program"
 msgstr "trasferisce alla directory del programma lilypond"
 
-#: main.cc:173
+#: main.cc:180
 msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
 msgstr "nessun progresso, solo messaggi di errore (equivalente al loglevel=ERROR)"
 
-#: main.cc:175
+#: main.cc:182
 msgid "be verbose (equivalent to loglevel=DEBUG)"
 msgstr "output dettagliato (equivalente al loglevel=DEBUG)"
 
 #. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:242
+#: main.cc:261
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -2347,74 +2384,74 @@ msgstr ""
 "%s e altri."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:269
+#: main.cc:299
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Uso: %s [OPZIONE]... [FILE]..."
 
-#: main.cc:271
+#: main.cc:301
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Stampa partitura oppure crea MIDI da FILE."
 
-#: main.cc:273
+#: main.cc:303
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond produce bella notazione musicale."
 
-#: main.cc:275
+#: main.cc:305
 #, c-format
 msgid "For more information, see %s"
 msgstr "Per maggiori informazioni si veda %s"
 
-#: main.cc:277
+#: main.cc:307
 msgid "Options:"
 msgstr "Opzioni:"
 
-#: main.cc:331
+#: main.cc:374
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "previsti gli argomenti %d per la gabbia, trovati: %u"
 
-#: main.cc:345
+#: main.cc:388
 #, c-format
 msgid "no such user: %s"
 msgstr "non esiste questo utente: %s"
 
-#: main.cc:347
+#: main.cc:390
 #, c-format
 msgid "cannot get user id from user name: %s: %s"
 msgstr "impossibile acquisire l'id dell'utente dal nome utente: %s: %s"
 
-#: main.cc:362
+#: main.cc:405
 #, c-format
 msgid "no such group: %s"
 msgstr "non esiste questo gruppo: %s"
 
-#: main.cc:364
+#: main.cc:407
 #, c-format
 msgid "cannot get group id from group name: %s: %s"
 msgstr "impossibile acquisire l'id del gruppo dal nome del gruppo: %s:%s"
 
-#: main.cc:372
+#: main.cc:415
 #, c-format
 msgid "cannot chroot to: %s: %s"
 msgstr "non si può fare il chroot a: %s: %s"
 
-#: main.cc:379
+#: main.cc:422
 #, c-format
 msgid "cannot change group id to: %d: %s"
 msgstr "non si può cambiare l'id del gruppo in: %d: %s"
 
-#: main.cc:385
+#: main.cc:428
 #, c-format
 msgid "cannot change user id to: %d: %s"
 msgstr "non si può cambiare l'id dell'utente in: %d: %s"
 
-#: main.cc:391
+#: main.cc:434
 #, c-format
 msgid "cannot change working directory to: %s: %s"
 msgstr "non si può passare alla directory di lavoro: %s: %s"
 
-#: main.cc:639
+#: main.cc:805
 #, c-format
 msgid "exception caught: %s"
 msgstr "ricevuta un'eccezione: %s"
@@ -2428,31 +2465,31 @@ msgstr "rehearsalMark deve avere un valore intero"
 msgid "mark label must be a markup object"
 msgstr "l'etichetta del segno deve essere un oggetto di markup"
 
-#: mensural-ligature-engraver.cc:96
+#: mensural-ligature-engraver.cc:100
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "legatura con meno di due teste -> si ignora"
 
-#: mensural-ligature-engraver.cc:123
+#: mensural-ligature-engraver.cc:127
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "impossibile determinare l'altezza della legatura primitiva -> si ignora"
 
-#: mensural-ligature-engraver.cc:137
+#: mensural-ligature-engraver.cc:141
 msgid "single note ligature - skipping"
 msgstr "legatura di una nota singola - si ignora"
 
-#: mensural-ligature-engraver.cc:148
+#: mensural-ligature-engraver.cc:152
 msgid "prime interval within ligature -> skipping"
 msgstr "primo intervallo all'interno della legatura -> si ignora"
 
-#: mensural-ligature-engraver.cc:159
+#: mensural-ligature-engraver.cc:163
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "legatura mensurale: nessuna durata per Mx, L, B. S -> si ignora"
 
-#: mensural-ligature-engraver.cc:202
+#: mensural-ligature-engraver.cc:206
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr "una semibreve deve essere seguita da un'altra semibreve -> si ignora"
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:216
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
@@ -2460,7 +2497,7 @@ msgstr ""
 "le semibrevi possono comparire solo all'inizio di una legatura,\n"
 "e ce ne possono essere due o nessuna"
 
-#: mensural-ligature-engraver.cc:232
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -2472,25 +2509,30 @@ msgstr ""
 "lo deve essere anche la penultima nota,\n"
 "oppure la legatura deve essere LB o SSB"
 
-#: mensural-ligature-engraver.cc:387
+#: mensural-ligature-engraver.cc:396
 msgid "unexpected case fall-through"
 msgstr "caso inatteso e non interpretabile"
 
-#: midi-item.cc:89
+#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#, c-format
+msgid "ignoring out-of-range value change for MIDI property `%s'"
+msgstr "si ignora il cambio in un valore fuori dai limiti per la proprietà MIDI «%s»"
+
+#: midi-item.cc:93
 #, c-format
 msgid "no such MIDI instrument: `%s'"
 msgstr "non esiste questo strumento MIDI: «%s»"
 
-#: midi-item.cc:161
+#: midi-item.cc:179
 msgid "Time signature with more than 255 beats.  Truncating"
 msgstr "Segno di tempo con più di 255 tempi.  Si accorcia"
 
-#: midi-stream.cc:39
+#: midi-stream.cc:38
 #, c-format
 msgid "cannot open for write: %s: %s"
 msgstr "impossibile aprire il file con permesso di scrittura: %s: %s"
 
-#: midi-stream.cc:55
+#: midi-stream.cc:54
 #, c-format
 msgid "cannot write to file: `%s'"
 msgstr "impossibile scrivere su file: «%s»"
@@ -2503,11 +2545,11 @@ msgstr "Calcolo delle interruzioni di linea..."
 msgid "Calculating page breaks..."
 msgstr "Calcolo delle interruzioni di pagina..."
 
-#: multi-measure-rest.cc:138
+#: multi-measure-rest.cc:154
 msgid "usable-duration-logs must be a non-empty list.  Falling back to whole rests."
 msgstr "usable-duration-logs deve essere una lista non vuota.  Si ricorre alle pause di semibreve."
 
-#: multi-measure-rest.cc:328
+#: multi-measure-rest.cc:364
 msgid "Using naive multi measure rest spacing."
 msgstr "Si usa una spaziatura semplificata per la pausa multipla"
 
@@ -2525,20 +2567,6 @@ msgstr "(altezza normalizzata)"
 msgid "Transposing %s by %s makes alteration larger than double"
 msgstr "La trasposizione di %s da %s ingrandisce le alterazioni più del doppio"
 
-#: new-dynamic-engraver.cc:168
-#, c-format
-msgid ""
-"unknown crescendo style: %s\n"
-"defaulting to hairpin."
-msgstr ""
-"stile di crescendo sconosciuto: %s\n"
-"si usa la forcella predefinita."
-
-#: new-dynamic-engraver.cc:233
-#, c-format
-msgid "unterminated %s"
-msgstr "%s non terminato"
-
 #: new-fingering-engraver.cc:113
 msgid "cannot add text scripts to individual note heads"
 msgstr "impossibile aggiungere delle scritte testuali alle teste delle note individuali"
@@ -2551,7 +2579,7 @@ msgstr "nessuna posizione trovata per le diteggiature"
 msgid "placing below"
 msgstr "si colloca in basso"
 
-#: note-collision.cc:496
+#: note-collision.cc:497
 msgid "ignoring too many clashing note columns"
 msgstr "troppe collisioni tra colonne di note, ignorate"
 
@@ -2568,37 +2596,37 @@ msgstr "non si è trovata alcuna delle teste delle note «%s» o «%s»"
 msgid "NoteEvent without pitch"
 msgstr "NoteEvent senza altezza"
 
-#: open-type-font.cc:44
+#: open-type-font.cc:45
 #, c-format
 msgid "cannot allocate %lu bytes"
 msgstr "impossibile allocare %lu byte"
 
-#: open-type-font.cc:48
+#: open-type-font.cc:49
 #, c-format
 msgid "cannot load font table: %s"
 msgstr "impossibile caricare la tabella dei tipi di carattere: %s"
 
-#: open-type-font.cc:53
+#: open-type-font.cc:54
 #, c-format
 msgid "FreeType error: %s"
 msgstr "Errore FreeType: %s"
 
-#: open-type-font.cc:110
+#: open-type-font.cc:111
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "formato di tipo di carattere non supportato: %s"
 
-#: open-type-font.cc:112
+#: open-type-font.cc:113
 #, c-format
 msgid "error reading font file %s: %s"
 msgstr "errore nella lettura del file del tipo di carattere %s: %s"
 
-#: open-type-font.cc:187
+#: open-type-font.cc:188
 #, c-format
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr "errore di Freetype in FT_Get_Glyph_Name (): %s"
 
-#: open-type-font.cc:318 pango-font.cc:189
+#: open-type-font.cc:336 pango-font.cc:256
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
 msgstr "errore in FT_Get_Glyph_Name (): %s"
@@ -2608,35 +2636,35 @@ msgstr "errore in FT_Get_Glyph_Name (): %s"
 msgid "Finding the ideal number of pages..."
 msgstr "Determinazione del numero ottimale di pagine..."
 
-#: optimal-page-breaking.cc:85
+#: optimal-page-breaking.cc:94
 msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page"
 msgstr "impossibile soddisfare contemporaneamente systems-per-page e page-count, si ignora systems-per-page"
 
-#: optimal-page-breaking.cc:105
+#: optimal-page-breaking.cc:114
 msgid "Fitting music on 1 page..."
 msgstr "Compressione della musica in una pagina..."
 
-#: optimal-page-breaking.cc:107
+#: optimal-page-breaking.cc:116
 #, c-format
 msgid "Fitting music on %d pages..."
 msgstr "Compressione della musica in %d pagine..."
 
-#: optimal-page-breaking.cc:109
+#: optimal-page-breaking.cc:118
 #, c-format
 msgid "Fitting music on %d or %d pages..."
 msgstr "Compressione della musica in %d o %d pagine..."
 
-#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:172
+#: optimal-page-breaking.cc:128 optimal-page-breaking.cc:181
 #, c-format
 msgid "trying %d systems"
 msgstr "tentando %d sistemi"
 
-#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:200
+#: optimal-page-breaking.cc:147 optimal-page-breaking.cc:209
 #, c-format
 msgid "best score for this sys-count: %f"
 msgstr "miglior punteggio per questo numero di sistemi: %f"
 
-#: optimal-page-breaking.cc:207 page-turn-page-breaking.cc:248
+#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248
 #: paper-score.cc:162
 msgid "Drawing systems..."
 msgstr "Disegno dei sistemi..."
@@ -2657,24 +2685,24 @@ msgstr "si ignorano min-systems-per-page e max-systems-per-page perché è stato
 msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values"
 msgstr "min-systems-per-page è maggiore di max-systems-per-page, si ignorano entrambi i valori"
 
-#: page-layout-problem.cc:403
+#: page-layout-problem.cc:402
 msgid "A page layout problem has been initiated that cannot accommodate footnotes."
 msgstr "Si è creato un problema di formattazione della pagina che impedisce di ospitare le note a pié di pagina."
 
-#: page-layout-problem.cc:732
+#: page-layout-problem.cc:731
 msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed"
 msgstr "impossibile far entrare la musica nella pagina: richiesta la spaziatura ridotta, ma la pagina è già stata compressa"
 
-#: page-layout-problem.cc:735
+#: page-layout-problem.cc:734
 #, c-format
 msgid "cannot fit music on page: overflow is %f"
 msgstr "impossibile far entrare la musica nella pagina: l'eccesso è %f"
 
-#: page-layout-problem.cc:737
+#: page-layout-problem.cc:736
 msgid "compressing music to fit"
 msgstr "si comprime la musica per farla entrare"
 
-#: page-layout-problem.cc:1197
+#: page-layout-problem.cc:1199
 msgid "staff-affinities should only decrease"
 msgstr "staff-affinities deve solo diminuire"
 
@@ -2717,7 +2745,12 @@ msgstr "\tnumero delle pagine: %d"
 msgid "\tprevious break: %d"
 msgstr "\tinterruzione precedente: %d"
 
-#: pango-font.cc:205
+#: pango-font.cc:245
+#, c-format
+msgid "no glyph for character U+%0X in font `%s'"
+msgstr "manca il glifo per il carattere U+%0X del tipo \"%s\""
+
+#: pango-font.cc:272
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
@@ -2726,12 +2759,12 @@ msgstr ""
 "Il glifo non ha un nome, ma il tipo di carattere permette di dare un nome al glifo.\n"
 "Si salta il glifo U+%0X, file %s"
 
-#: pango-font.cc:242
+#: pango-font.cc:322
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "nessun nome di tipo di carattere PostScript per «%s»"
 
-#: pango-font.cc:291
+#: pango-font.cc:372
 msgid "FreeType face has no PostScript font name"
 msgstr "Il tipo FreeType non ha un nome per il tipo di carattere PostScript"
 
@@ -2745,7 +2778,7 @@ msgstr "l'opzione -dprint-pages del programma non è supportata dal backend «%s
 msgid "program option -dpreview not supported by backend `%s'"
 msgstr "l'opzione -dpreview del programma non è supportata dal backend «%s»"
 
-#: paper-column-engraver.cc:261
+#: paper-column-engraver.cc:263
 msgid "forced break was overridden by some other event, should you be using bar checks?"
 msgstr "l'interruzione forzata è stata sovrascritta da qualche altro evento, considerare l'uso dei controlli di battuta"
 
@@ -2771,7 +2804,7 @@ msgstr "GUILE ha segnalato un errore per l'espressione che inizia qui"
 msgid "trying to use \\partial after the start of a piece"
 msgstr "tentativo di usare \\partial all'inizio di un brano"
 
-#: pdf-scheme.cc:50
+#: pdf-scheme.cc:65
 #, c-format
 msgid "Conversion of string `%s' to UTF-16be failed: %s"
 msgstr "Fallita la conversione della stringa \"%s\" in UTF-16be: %s"
@@ -2789,25 +2822,6 @@ msgstr "Traccia..."
 msgid "MIDI output to `%s'..."
 msgstr "L'output MIDI è inviato a «%s»..."
 
-#: phrasing-slur-engraver.cc:101 slur-engraver.cc:102
-#, c-format
-msgid "direction of %s invalid: %d"
-msgstr "direzione di %s non valida: %d"
-
-#: phrasing-slur-engraver.cc:175
-msgid "unterminated phrasing slur"
-msgstr "legatura di frase non terminata"
-
-#: phrasing-slur-engraver.cc:210
-msgid "cannot end phrasing slur"
-msgstr "impossibile chiudere la legatura di frase"
-
-#. We already have an old slur, so give a warning
-#. and completely ignore the new slur.
-#: phrasing-slur-engraver.cc:230
-msgid "already have phrasing slur"
-msgstr "legatura di frase già presente"
-
 #: piano-pedal-engraver.cc:279
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
@@ -2824,12 +2838,12 @@ msgstr "impossibile trovare l'inizio del pedale del pianoforte: «%s»"
 msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "impossibile trovare la parentesi di apertura del pedale del pianoforte: «%s»"
 
-#: program-option-scheme.cc:235
+#: program-option-scheme.cc:223
 #, c-format
 msgid "no such internal option: %s"
 msgstr "opzione interna sconosciuta: %s"
 
-#: property-iterator.cc:93
+#: property-iterator.cc:100
 #, c-format
 msgid "not a grob name, `%s'"
 msgstr "non è il nome di un grob, «%s»"
@@ -2876,40 +2890,40 @@ msgstr "Rilocazione: compilare datadir=%s, nuova datadir=%s"
 msgid "Relocation: framework_prefix=%s"
 msgstr "Rilocazione: framework_prefix=%s"
 
-#: relocate.cc:186
+#: relocate.cc:172
 #, c-format
 msgid "Relocation: is absolute: argv0=%s\n"
 msgstr "Rilocazione: è assoluta: argv0=%s\n"
 
-#: relocate.cc:192
+#: relocate.cc:178
 #, c-format
-msgid "Relocation: from cwd: argv0=%s\n"
+msgid "Relocation : from cwd: argv0=%s\n"
 msgstr "Rilocazione: da cwd: argv0=%s\n"
 
-#: relocate.cc:208
+#: relocate.cc:194
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 msgstr ""
 "Rilocazione: da PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 
-#: relocate.cc:235
+#: relocate.cc:220
 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
 msgstr "LILYPONDPREFIX è obsoleto, usare LILYPOND_DATADIR"
 
-#: relocate.cc:360
+#: relocate.cc:345
 #, c-format
 msgid "Relocation file: %s"
 msgstr "File di rilocazione: %s"
 
-#: relocate.cc:364 source-file.cc:65
+#: relocate.cc:349 source-file.cc:65
 #, c-format
 msgid "cannot open file: `%s'"
 msgstr "impossibile aprire il file: «%s»"
 
-#: relocate.cc:394
+#: relocate.cc:379
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr "Comando di rilocazione sconosciuto %s"
@@ -2918,15 +2932,15 @@ msgstr "Comando di rilocazione sconosciuto %s"
 msgid "rhythmic head is not part of a rhythmic column"
 msgstr "la testa ritmica non fa parte di una colonna ritmica"
 
-#: rest-collision.cc:146
+#: rest-collision.cc:150
 msgid "cannot resolve rest collision: rest direction not set"
 msgstr "impossibile risolvere la collisione di pause: direzione delle pause non impostata"
 
-#: rest-collision.cc:157 rest-collision.cc:266
+#: rest-collision.cc:161 rest-collision.cc:270
 msgid "too many colliding rests"
 msgstr "troppe collisioni tra pause"
 
-#: rest.cc:192
+#: rest.cc:240
 #, c-format
 msgid "rest `%s' not found"
 msgstr "pausa «%s» non trovata"
@@ -2962,33 +2976,41 @@ msgid "errors found, ignoring music expression"
 msgstr "trovati degli errori, si ignora l'espressione musicale"
 
 #. FIXME:
-#: script-engraver.cc:113
+#: script-engraver.cc:115
 msgid "do not know how to interpret articulation:"
 msgstr "non so come interpretare l'articolazione:"
 
-#: script-engraver.cc:114
+#: script-engraver.cc:116
 msgid " scheme encoding: "
 msgstr " codifica di Scheme: "
 
-#: skyline-pair.cc:131
+#: skyline-pair.cc:160
 msgid "direction must not be CENTER in ly:skyline-pair::skyline"
 msgstr "in ly:skyline-pair::skyline la direzione non deve essere CENTER"
 
-#: slur-engraver.cc:176
-msgid "unterminated slur"
-msgstr "legatura di portamento non terminata"
-
-#: slur-engraver.cc:211
-msgid "cannot end slur"
-msgstr "impossibile terminare la legatura di portamento"
+#: slur-proto-engraver.cc:51
+#, c-format
+msgid "direction of %s invalid: %d"
+msgstr "direzione di %s non valida: %d"
 
 #. We already have an old slur, so give a warning
 #. and completely ignore the new slur.
-#: slur-engraver.cc:231
-msgid "already have slur"
-msgstr "legatura già presente"
+#: slur-proto-engraver.cc:166
+#, c-format
+msgid "already have %s"
+msgstr "%s già presente"
 
-#: slur.cc:430
+#: slur-proto-engraver.cc:183
+#, c-format
+msgid "%s without a cause"
+msgstr "%s senza una causa"
+
+#: slur-proto-engraver.cc:244
+#, c-format
+msgid "cannot end %s"
+msgstr "impossibile terminare %s"
+
+#: slur.cc:434
 #, c-format
 msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
 msgstr "Si ignora il grob per la legatura di portamento: %s. Non si è impostato avoid-slur?"
@@ -2998,11 +3020,11 @@ msgstr "Si ignora il grob per la legatura di portamento: %s. Non si è impostato
 msgid "expected to read %d characters, got %d"
 msgstr "si prevedeva di leggere %d caratteri, se ne sono ottenuti %d"
 
-#: staff-performer.cc:275
+#: staff-performer.cc:301
 msgid "MIDI channel wrapped around"
 msgstr "Numerazione canale MIDI ricominciata"
 
-#: staff-performer.cc:276
+#: staff-performer.cc:302
 msgid "remapping modulo 16"
 msgstr "riassegnata con modulo 16"
 
@@ -3023,12 +3045,12 @@ msgstr "forse l'input dovrebbe specificare le voci polifoniche"
 msgid "weird stem size, check for narrow beams"
 msgstr "strana dimensione del gambo, controllare di non avere travature strette"
 
-#: system.cc:200
+#: system.cc:201
 #, c-format
 msgid "Element count %d"
 msgstr "Numero degli elementi %d"
 
-#: system.cc:480
+#: system.cc:512
 #, c-format
 msgid "Grob count %d"
 msgstr "Numero degli oggetti grafici %d"
@@ -3057,11 +3079,11 @@ msgstr "spanner testuale già presente"
 msgid "unterminated text spanner"
 msgstr "spanner testuale non terminato"
 
-#: tie-engraver.cc:117
+#: tie-engraver.cc:119
 msgid "unterminated tie"
 msgstr "legatura di valore non terminata"
 
-#: tie-engraver.cc:348
+#: tie-engraver.cc:353
 msgid "lonely tie"
 msgstr "legatura di valore solitaria"
 
@@ -3077,7 +3099,7 @@ msgstr "si è incontrato uno strano segno di tempo: %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:122
+#: time-signature.cc:89
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr "non si è trovato il simbolo di tempo «%s»: si ritorna allo stile numerato"
@@ -3146,6 +3168,10 @@ msgstr "flexa-height non definito; si assume 0"
 msgid "ascending vaticana style flexa"
 msgstr "flexa ascendente in stile vaticana"
 
+#: vertical-align-engraver.cc:95
+msgid "Ignoring Vertical_align_engraver in VerticalAxisGroup"
+msgstr "Ignorato l'incisore Vertical_align_engraver in VerticalAxisGroup"
+
 #. fixme: be more verbose.
 #: volta-engraver.cc:110
 msgid "cannot end volta spanner"
@@ -3163,68 +3189,123 @@ msgstr "è già presente uno spanner terminato"
 msgid "giving up"
 msgstr "rinuncia"
 
-#: parser.yy:161 parser.yy:175
+#: parser.yy:158 parser.yy:172
 msgid "Too much lookahead"
 msgstr "Troppa ricerca in avanti (lookahead)"
 
-#: parser.yy:835 parser.yy:1284
+#: parser.yy:441 parser.yy:752 parser.yy:818
+msgid "bad expression type"
+msgstr "tipo d'espressione non corretto"
+
+#: parser.yy:650 parser.yy:1159
 msgid "not a context mod"
 msgstr "non è una modalità di contesto"
 
-#: parser.yy:1027
+#: parser.yy:853
+msgid "score expected"
+msgstr "attesa una partitura"
+
+#: parser.yy:869
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "non si può usare \\paper dentro \\score, usare \\layout al suo posto"
 
-#: parser.yy:1051
+#: parser.yy:893
 msgid "need \\paper for paper block"
 msgstr "è necessario \\paper per il blocco \"paper\""
 
-#: parser.yy:1204
+#: parser.yy:1033 parser.yy:1055
+msgid "unexpected post-event"
+msgstr "«post-event» inatteso"
+
+#: parser.yy:1063
 msgid "Ignoring non-music expression"
 msgstr "Si ignora l'espressione non musicale"
 
-#: parser.yy:2044
+#: parser.yy:1075 parser.yy:2493
+msgid "music expected"
+msgstr "attesa la musica"
+
+#: parser.yy:1370
+msgid "not a symbol"
+msgstr "non è un simbolo"
+
+#: parser.yy:2182 parser.yy:2296 parser.yy:2309 parser.yy:2318
+msgid "bad grob property path"
+msgstr "percorso sbagliato alla proprietà del «grob»"
+
+#: parser.yy:2276
 msgid "only \\consists and \\remove take non-string argument."
 msgstr "solo \\consists e \\remove prendono un argomento diverso da una stringa"
 
-#: parser.yy:2057
-msgid "Grob name should be alphanumeric"
-msgstr "Il nome del grob deve essere alfanumerico"
+#: parser.yy:2337
+msgid "bad context property path"
+msgstr "percorso sbagliato alla proprietà di contesto"
 
-#: parser.yy:2261
+#: parser.yy:2438
+msgid "simple string expected"
+msgstr "attesa una stringa semplice"
+
+#: parser.yy:2456
+msgid "symbol expected"
+msgstr "simbolo atteso"
+
+#: parser.yy:2611
 msgid "not a rhythmic event"
 msgstr "non è un evento ritmico"
 
-#: parser.yy:2357 parser.yy:2362
+#: parser.yy:2685
+msgid "post-event expected"
+msgstr "atteso un post-event"
+
+#: parser.yy:2694 parser.yy:2699
 msgid "have to be in Lyric mode for lyrics"
 msgstr "bisogna essere in modo \"Lyric\" per i testi"
 
-#: parser.yy:2477
+#: parser.yy:2767
 msgid "expecting string as script definition"
 msgstr "ci si aspetta una stringa come definizione dello script"
 
-#: parser.yy:2637 parser.yy:2681
-#, c-format
-msgid "not a duration: %d"
-msgstr "non è una durata: %d"
+#: parser.yy:2875
+msgid "not an articulation"
+msgstr "non è un'articolazione"
+
+#: parser.yy:2947 parser.yy:2990
+msgid "not a duration"
+msgstr "non è una durata"
 
-#: parser.yy:2800
+#: parser.yy:3007
+msgid "bass number expected"
+msgstr "atteso un numero di basso"
+
+#: parser.yy:3106
 msgid "have to be in Note mode for notes"
 msgstr "bisogna essere in modo \"Note\" per le note"
 
-#: parser.yy:2855
+#: parser.yy:3166
 msgid "have to be in Chord mode for chords"
 msgstr "bisogna essere in modo \"Chord\" per gli accordi"
 
-#: parser.yy:3115
+#: parser.yy:3181
+msgid "markup outside of text script or \\lyricmode"
+msgstr "testo fuori da una scritta testuale o da \\lyricmode"
+
+#: parser.yy:3186
+msgid "unrecognized string, not in text script or \\lyricmode"
+msgstr "stringa non riconosciuta, non si trova in una scritta testuale o in \\lyricmode"
+
+#: parser.yy:3347 parser.yy:3356
+msgid "not an unsigned integer"
+msgstr "non è un intero non negativo"
+
+#: parser.yy:3424
 msgid "not a markup"
 msgstr "non è un markup"
 
-#: lexer.ll:218
+#: lexer.ll:224
 msgid "stray UTF-8 BOM encountered"
 msgstr "si è incontrato un segno BOM UTF-8 isolato"
 
-#: lexer.ll:221
+#: lexer.ll:227
 msgid "Skipping UTF-8 BOM"
 msgstr "Si ignora il BOM UTF-8"
 
@@ -3245,60 +3326,64 @@ msgstr "\\sourcefilename deve essere seguito da una stringa compresa tra virgole
 msgid "integer expected after \\sourcefileline"
 msgstr "\\sourcefileline deve essere seguito da un intero"
 
-#: lexer.ll:327
+#: lexer.ll:331
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput non permesso fuori dai file di inizializzazione"
 
-#: lexer.ll:351
+#: lexer.ll:355
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "indentificatore errato o non definito: «%s»"
 
-#: lexer.ll:377
+#: lexer.ll:381
 msgid "string expected after \\include"
 msgstr "stringa prevista dopo \\include"
 
-#. backup rule
-#: lexer.ll:387
+#: lexer.ll:391
 msgid "end quote missing"
 msgstr "mancano le virgolette di chiusura"
 
-#: lexer.ll:558
-msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Trovata una parentesi alla fine del testo.  È stato dimenticato uno spazio?"
-
-#: lexer.ll:672
-msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Trovata una parentesi alla fine della marcatura.  È stato dimenticato uno spazio?"
-
-#: lexer.ll:684
+#: lexer.ll:743
 msgid "EOF found inside a comment"
 msgstr "fine del file (EOF) trovata in un commento"
 
-#: lexer.ll:782
+#: lexer.ll:748
+msgid "EOF found inside string"
+msgstr "fine del file (EOF) trovata in una stringa"
+
+#: lexer.ll:763
+msgid "Unfinished main input"
+msgstr "Input principale non finito"
+
+#: lexer.ll:834
 #, c-format
 msgid "invalid character: `%s'"
 msgstr "carattere non valido: «%s»"
 
-#: lexer.ll:903 lexer.ll:904
+#: lexer.ll:963
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "stringa di escape sconosciuta: «\\%s»"
 
-#: lexer.ll:1186 lexer.ll:1187
+#: lexer.ll:983
+#, c-format
+msgid "undefined character or shorthand: %s"
+msgstr "carattere o abbreviazione non riconosciuti: %s"
+
+#: lexer.ll:1275
 msgid "non-UTF-8 input"
 msgstr "input non UTF-8"
 
-#: lexer.ll:1230 lexer.ll:1231
+#: lexer.ll:1319
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr "file troppo vecchio: %s (il più vecchio che si può gestire è: %s)"
 
-#: lexer.ll:1231 lexer.ll:1232
+#: lexer.ll:1320
 msgid "consider updating the input with the convert-ly script"
 msgstr "si consideri di aggiornare l'input con lo script convert-ly"
 
-#: lexer.ll:1237 lexer.ll:1238
+#: lexer.ll:1326
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr "programma troppo vecchio: %s (il file richiede: %s)"
@@ -3313,28 +3398,53 @@ msgstr "Invocazione di «~a»..."
 msgid "`~a' failed (~a)\n"
 msgstr "«~a» fallito (~a)\n"
 
-#: backend-library.scm:90
+#: backend-library.scm:93
 #, scheme-format
 msgid "Converting to `~a'...\n"
 msgstr "Conversione a «~a»...\n"
 
 #. Do not try to guess the name of the png file,
 #. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:99
+#: backend-library.scm:102
 #, scheme-format
 msgid "Converting to ~a..."
 msgstr "Conversione a ~a..."
 
-#: backend-library.scm:137
+#: backend-library.scm:140
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Scrittura del campo di intestazione «~a» in «~a»..."
 
-#: backend-library.scm:187
+#: backend-library.scm:189
 #, scheme-format
 msgid "missing stencil expression `~S'"
 msgstr "manca l'espressione di stencil «~S»"
 
+#: bar-line.scm:133
+#, scheme-format
+msgid "Bar glyph ~a not known. Ignoring."
+msgstr "Il glifo di battuta ~a non è conosciuto. Si ignora."
+
+#: bar-line.scm:161
+#, scheme-format
+msgid "Annotation '~a' is allowed in the first argument of a bar line definition only."
+msgstr "L'annotazione «~a» è consentita soltanto come primo argomento della definizione di stanghetta."
+
+#: bar-line.scm:169
+#, scheme-format
+msgid "Replacement '~a' is allowed in the last argument of a bar line definition only."
+msgstr "La sostituzione «~a» è consentita solo come ultimo argomento della definizione di stanghetta"
+
+#: bar-line.scm:230
+#, scheme-format
+msgid "add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character."
+msgstr "add-bar-glyph-print-procedure: il glifo «~a» deve essere un solo carattere ASCII."
+
+#: bar-line.scm:795
+#, scheme-format
+msgid "No span bar glyph defined for bar glyph '~a'; ignoring."
+msgstr "Il glifo di battuta «~a» non ha un glifo d'estensione; si ignora."
+
 #: chord-entry.scm:52
 #, scheme-format
 msgid "Spurious garbage following chord: ~A"
@@ -3346,64 +3456,84 @@ msgstr "Informazione incomprensibile dopo l'accordo: ~A"
 msgid "symbol ~S redefined"
 msgstr "simbolo ~S ridefinito"
 
-#: define-event-classes.scm:67
+#: define-event-classes.scm:73
 #, scheme-format
 msgid "unknown parent class `~a'"
 msgstr "Classe di evento «~a» sconosciuta"
 
-#: define-markup-commands.scm:887
+#: define-event-classes.scm:107
+#, scheme-format
+msgid "Cannot redefine event class `~S'"
+msgstr "Impossibile ridefinire la classe di evento «~S»"
+
+#: define-event-classes.scm:109
+#, scheme-format
+msgid "Undefined parent event class `~S'"
+msgstr "Classe di evento genitore «~S» sconosciuta"
+
+#: define-markup-commands.scm:1083
 msgid "no systems found in \\score markup, does it have a \\layout block?"
-msgstr "non si è trovato alcun sistema nella marcatura \\score, contiene un blocco \\layout?"
+msgstr "non si è trovato alcun sistema nell'oggetto markup in cui è inserito \\score: contiene un blocco \\layout?"
 
-#: define-markup-commands.scm:2614
+#: define-markup-commands.scm:2847
 #, scheme-format
 msgid "Cannot find glyph ~a"
 msgstr "Impossibile trovare il glifo ~a"
 
-#: define-markup-commands.scm:3040
+#: define-markup-commands.scm:3273
 #, scheme-format
 msgid "no brace found for point size ~S "
 msgstr "non c'è una graffa che abbia una dimensione di ~S punti"
 
-#: define-markup-commands.scm:3041
+#: define-markup-commands.scm:3274
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr "si applica la dimensione predefinita ~S pt"
 
-#: define-markup-commands.scm:3194
+#: define-markup-commands.scm:3526
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "non è una durata valida per la stringa: ~a"
 
-#: define-music-types.scm:765
+#: define-markup-commands.scm:3737
+#, scheme-format
+msgid "not a valid duration string: ~a - ignoring"
+msgstr "non è una durata valida per la stringa: ~a -- si ignora"
+
+#: define-music-types.scm:792
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr "simbolo atteso: ~S"
 
-#: define-music-types.scm:768
+#: define-music-types.scm:795
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr "impossibile trovare l'oggetto musicale: ~S"
 
-#: define-music-types.scm:787
+#: define-music-types.scm:815
+#, scheme-format
+msgid "bad make-music argument: ~S"
+msgstr "argomento di make-music non valido: ~S"
+
+#: define-music-types.scm:827
 #, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "tipo di ripetizione sconosciuto «~S»"
 
-#: define-music-types.scm:788
+#: define-music-types.scm:828
 msgid "See define-music-types.scm for supported repeats"
 msgstr "Si veda define-music-types.scm per le ripetizioni supportate"
 
-#: define-note-names.scm:962
+#: define-note-names.scm:972
 msgid "Select note names language."
 msgstr "Selezione della lingua dei nomi delle note."
 
-#: define-note-names.scm:968
+#: define-note-names.scm:978
 #, scheme-format
 msgid "Using `~a' note names..."
 msgstr "Utilizzo di \"~a\" per i nomi delle note..."
 
-#: define-note-names.scm:971
+#: define-note-names.scm:981
 #, scheme-format
 msgid "Could not find language `~a'.  Ignoring."
 msgstr "Impossibile trovare il linguaggio \"~a\".  Si ignora."
@@ -3443,7 +3573,7 @@ msgstr "impossibile trovare la descrizione per la proprietà \"~S\" (~S)"
 msgid "cannot find description for property ~S (~S)"
 msgstr "impossibile trovare la descrizione per la proprietà ~S (~S)"
 
-#: flag-styles.scm:151
+#: flag-styles.scm:162
 #, scheme-format
 msgid "flag stroke `~a' or `~a' not found"
 msgstr "tipo di coda uncinata sconosciuto: «~a» o «~a»"
@@ -3473,7 +3603,7 @@ msgstr "impossibile realizzare l'integrazione ~S=~S"
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr "non so come inserire il tipo di carattere ~s ~s ~s"
 
-#: framework-ps.scm:686
+#: framework-ps.scm:687
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
@@ -3521,20 +3651,20 @@ msgstr "Errore nella definizione delle travature. Previste (~S,~S), trovate ~S."
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr "Errore nella definizione delle travature.  Previste ~S 0, trovate ~S."
 
-#: lily-library.scm:299
+#: lily-library.scm:333
 msgid "Music unsuitable for context-mod"
 msgstr "Musica non adatta per context-mod"
 
-#: lily-library.scm:349
+#: lily-library.scm:388
 #, scheme-format
 msgid "Cannot find context-def \\~a"
 msgstr "Impossibile trovare context-def \\~a"
 
-#: lily-library.scm:365
+#: lily-library.scm:404
 msgid "Music unsuitable for output-def"
 msgstr "Musica non adatta per output-def"
 
-#: lily-library.scm:892
+#: lily-library.scm:884
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
 "which produces the closest match to @var{target-val} if\n"
@@ -3544,47 +3674,51 @@ msgstr ""
 "che produca l'abbinamento più vicino al @var{target-val} quando\n"
 "applicato alla funzione @var{getter}."
 
-#: lily-library.scm:966
+#: lily-library.scm:955
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr "unità sconosciuta: ~S"
 
-#: lily-library.scm:991
+#: lily-library.scm:980
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr "dichiarazione di \\version assente; si aggiunga ~a per compatibilità futura"
 
-#: lily-library.scm:997
-msgid "old relative compatibility not used"
-msgstr "compatibilità col vecchio modo relativo non utilizzata"
+#: lily.scm:75
+msgid "call-after-session used after session start"
+msgstr "call-after-session usato dopo l'inizio di una sessione"
+
+#: lily.scm:93
+msgid "define-session used after session start"
+msgstr "define-session usato dopo l'inizio di una sessione"
 
-#: lily.scm:234
+#: lily.scm:393
 msgid "Using (ice-9 curried-definitions) module\n"
 msgstr "Utilizzazione del modulo (ice-9 curried-definitions)\n"
 
-#: lily.scm:237
+#: lily.scm:396
 msgid "Guile 1.8\n"
 msgstr "Guile 1.8\n"
 
-#: lily.scm:297
+#: lily.scm:455
 #, scheme-format
 msgid "cannot find: ~A"
 msgstr "impossibile trovare ~A"
 
-#: lily.scm:708
+#: lily.scm:878
 msgid "Success: compilation successfully completed"
 msgstr "Successo: compilazione completata con successo"
 
-#: lily.scm:709
+#: lily.scm:879
 msgid "Compilation completed with warnings or errors"
 msgstr "Compilazione completata con avvertimenti o errori"
 
-#: lily.scm:771
+#: lily.scm:940
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr "il lavoro ~a è terminato col segnale ~a"
 
-#: lily.scm:774
+#: lily.scm:943
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
@@ -3593,17 +3727,17 @@ msgstr ""
 "file di registro ~a (uscita ~a):\n"
 "~a"
 
-#: lily.scm:796 lily.scm:882
+#: lily.scm:965 lily.scm:1054
 #, scheme-format
 msgid "failed files: ~S"
 msgstr "errore nei file: ~S"
 
-#: lily.scm:873
+#: lily.scm:1045
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Redirezione dell'output verso ~a..."
 
-#: lily.scm:892 ps-to-png.scm:66
+#: lily.scm:1064 ps-to-png.scm:66
 #, scheme-format
 msgid "Invoking `~a'...\n"
 msgstr "Chiamata di «~a»...\n"
@@ -3618,7 +3752,7 @@ msgstr "la funzione ~a non può restituire ~a"
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "tipo di argomento errato per ~a. Previsto ~a, trovato ~s"
 
-#: ly-syntax-constructors.scm:188
+#: ly-syntax-constructors.scm:199
 #, scheme-format
 msgid "Invalid property operation ~a"
 msgstr "Operazione di proprietà non valida: ~a"
@@ -3671,63 +3805,63 @@ msgstr "Più alternative che ripetizioni.  Vengono tralasciate le alternative in
 msgid "invalid tremolo repeat count: ~a"
 msgstr "numero di ripetizioni di tremolo non valido: ~a"
 
-#: music-functions.scm:689
+#: music-functions.scm:459
+#, scheme-format
+msgid "bad grob property path ~a"
+msgstr "percorso sbagliato alla proprietà del «grob»: ~a"
+
+#: music-functions.scm:753
 msgid "Bad chord repetition"
 msgstr "Ripetizione di accordi sbagliata"
 
-#: music-functions.scm:724
+#: music-functions.scm:788
 #, scheme-format
 msgid "music expected: ~S"
 msgstr "musica attesa: ~S"
 
-#: music-functions.scm:1042
+#: music-functions.scm:1144
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr "impossibile trovare la musica citata: «~S»"
 
-#: music-functions.scm:1180
+#: music-functions.scm:1282
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr "Aggiungere @var{octave-shift} all'ottava di @var{altezza}."
 
-#: music-functions.scm:1240
+#: music-functions.scm:1342
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr "Tipo di ottava sconosciuto: ~S "
 
-#: music-functions.scm:1241
+#: music-functions.scm:1343
 msgid "Defaulting to 'any-octave."
 msgstr "Applicazione del valore predefinito 'any-octave."
 
-#: music-functions.scm:1578
+#: music-functions.scm:1688
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "stile di alterazione sconosciuto: ~S"
 
-#: output-ps.scm:277 output-svg.scm:524
+#: output-ps.scm:278 output-svg.scm:539
 #, scheme-format
 msgid "unknown line-cap-style: ~S"
 msgstr "line-cap-style sconosciuto: ~S"
 
-#: output-ps.scm:282 output-svg.scm:530
+#: output-ps.scm:283 output-svg.scm:545
 #, scheme-format
 msgid "unknown line-join-style: ~S"
 msgstr "line-join-style sconosciuto: ~S"
 
-#: output-svg.scm:47
-#, scheme-format
-msgid "undefined: ~S"
-msgstr "~S indefinito"
-
-#: output-svg.scm:157
+#: output-svg.scm:148
 #, scheme-format
 msgid "cannot decypher Pango description: ~a"
 msgstr "impossibile decifrare la descrizione di Pango: ~a"
 
-#: output-svg.scm:237
+#: output-svg.scm:228
 msgid "Glyph must have a unicode value"
 msgstr "Un glifo deve avere un valore unicode"
 
-#: output-svg.scm:289 output-svg.scm:299
+#: output-svg.scm:280 output-svg.scm:290
 #, scheme-format
 msgid "cannot find SVG font ~S"
 msgstr "impossibile trovare il tipo di carattere SVG ~S"
@@ -3736,33 +3870,33 @@ msgstr "impossibile trovare il tipo di carattere SVG ~S"
 msgid "set-global-staff-size: not in toplevel scope"
 msgstr "set-global-staff-size: non è nell'ambito di livello più alto"
 
-#: paper.scm:315
+#: paper.scm:320
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "Questo non è un oggetto \\layout {}, ~S"
 
-#: paper.scm:327
+#: paper.scm:328
 #, scheme-format
 msgid "Unknown paper size: ~a"
 msgstr "Dimensione del foglio sconosciuta: ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:342
+#: paper.scm:347
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "Si deve usare #(set-paper-size .. ) all'interno di \\paper { ... }"
 
-#: parser-clef.scm:143 parser-clef.scm:183
+#: parser-clef.scm:164
 #, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "tipo di chiave sconosciuto «~a»"
 
-#: parser-clef.scm:144 parser-clef.scm:184
+#: parser-clef.scm:165
 #, scheme-format
 msgid "supported clefs: ~a"
 msgstr "chiavi supportate: ~a"
 
-#: parser-ly-from-scheme.scm:73
+#: parser-ly-from-scheme.scm:74
 msgid "error in #{ ... #}"
 msgstr "errore in #{ ... #}"
 
@@ -3776,45 +3910,45 @@ msgstr "la musica quotata «~a» è vuota"
 msgid "~a exited with status: ~S"
 msgstr "~a è terminato con stato ~S"
 
-#: to-xml.scm:191
+#: to-xml.scm:190
 #, scheme-format
 msgid "assertion failed: ~S"
 msgstr "errore di asserzione: ~S"
 
-#: translation-functions.scm:359
+#: translation-functions.scm:368
 #, scheme-format
 msgid "Negative fret for pitch ~a on string ~a"
 msgstr "Tasto negativo per l'altezza ~a sulla corda ~a"
 
-#: translation-functions.scm:362
+#: translation-functions.scm:371
 #, scheme-format
 msgid "Missing fret for pitch ~a on string ~a"
 msgstr "Manca il tasto per l'altezza ~a sulla corda ~a"
 
-#: translation-functions.scm:413
+#: translation-functions.scm:414
 #, scheme-format
 msgid "No open string for pitch ~a"
 msgstr "Nessuna corda a vuoto per l'altezza ~a"
 
-#: translation-functions.scm:428 translation-functions.scm:440
+#: translation-functions.scm:429 translation-functions.scm:441
 #, scheme-format
 msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
 msgstr "La corda richiesta per questa altezza necessita un tasto negativo: corda ~a altezza ~a"
 
-#: translation-functions.scm:431
+#: translation-functions.scm:432
 msgid "Ignoring string request and recalculating."
 msgstr "Ignorata la richiesta di questa corda, viene ricalcolata."
 
-#: translation-functions.scm:443
+#: translation-functions.scm:444
 msgid "Ignoring note in tablature."
 msgstr "Ignorata la nota nell'intavolatura."
 
-#: translation-functions.scm:466
+#: translation-functions.scm:469
 #, scheme-format
 msgid "No string for pitch ~a (given frets ~a)"
 msgstr "Nessuna corda per l'altezza ~a (se i tasti sono ~a)"
 
-#: translation-functions.scm:571
+#: translation-functions.scm:574
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
@@ -3823,6 +3957,51 @@ msgstr ""
 "Nessuna etichetta per il tasto ~a (sulla corda ~a);\n"
 "disponibili solo le etichette del tasto ~a"
 
+#~ msgid "cannot find start of (de)crescendo"
+#~ msgstr "impossibile trovare l'inizio del (de)crescendo"
+
+#~ msgid "already have a decrescendo"
+#~ msgstr "decrescendo già presente"
+
+#~ msgid "already have a crescendo"
+#~ msgstr "crescendo già presente"
+
+#~ msgid "cresc starts here"
+#~ msgstr "cresc inizia qui"
+
+#~ msgid "unterminated (de)crescendo"
+#~ msgstr "(de)crescendo non terminato"
+
+#~ msgid "unterminated phrasing slur"
+#~ msgstr "legatura di frase non terminata"
+
+#~ msgid "cannot end phrasing slur"
+#~ msgstr "impossibile chiudere la legatura di frase"
+
+#~ msgid "already have phrasing slur"
+#~ msgstr "legatura di frase già presente"
+
+#~ msgid "unterminated slur"
+#~ msgstr "legatura di portamento non terminata"
+
+#~ msgid "old relative compatibility not used"
+#~ msgstr "compatibilità col vecchio modo relativo non utilizzata"
+
+#~ msgid "undefined: ~S"
+#~ msgstr "~S indefinito"
+
+#~ msgid "Line spanner's left point is to the right of its right point."
+#~ msgstr "Il punto sinistro dello spanner della linea si trova alla destra del suo punto destro."
+
+#~ msgid "Grob name should be alphanumeric"
+#~ msgstr "Il nome del grob deve essere alfanumerico"
+
+#~ msgid "Brace found at end of lyric.  Did you forget a space?"
+#~ msgstr "Trovata una parentesi alla fine del testo.  È stato dimenticato uno spazio?"
+
+#~ msgid "Brace found at end of markup.  Did you forget a space?"
+#~ msgstr "Trovata una parentesi alla fine della marcatura.  È stato dimenticato uno spazio?"
+
 #~ msgid "add midi-block to .ly file"
 #~ msgstr "aggiunge il blocco midi al file .ly"
 
@@ -4243,9 +4422,6 @@ msgstr ""
 #~ msgid "Must have duration object"
 #~ msgstr "indicazione durata priva di senso"
 
-#~ msgid "white expected"
-#~ msgstr "aspettavo uno spazio bianco"
-
 #, fuzzy
 #~ msgid "%r: release directory"
 #~ msgstr "non trovo e non posso creare `%s'"
@@ -4370,9 +4546,6 @@ msgstr ""
 #~ msgid "invalid running status"
 #~ msgstr "stato di eseguzione non valido"
 
-#~ msgid "unimplemented MIDI meta-event"
-#~ msgstr "meta-evento MIDI non implementato"
-
 #~ msgid "invalid MIDI event"
 #~ msgstr "evento MIDI non valido"
 
index f8cd484df008fe16eb5f4586c534f565bd079ff0..c267d7f93cf63a0b7adb1339a2cbfd63c2bd9c5c 100644 (file)
@@ -6,16 +6,17 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.16.2\n"
+"Project-Id-Version: lilypond 2.17.98\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
 "lilypond.bugs\n"
-"POT-Creation-Date: 2013-01-04 13:31+0000\n"
+"POT-Creation-Date: 2013-12-29 15:29+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
 #: book_base.py:26
 #, python-format
@@ -26,88 +27,92 @@ msgstr ""
 msgid "Output function not implemented"
 msgstr ""
 
-#: book_latex.py:170
+#: book_latex.py:174
 msgid "cannot find \\begin{document} in LaTeX document"
 msgstr ""
 
-#: book_latex.py:188
+#: book_latex.py:190
 #, python-format
 msgid "Running `%s' on file `%s' to detect default page settings.\n"
 msgstr ""
 
-#: book_latex.py:209 book_texinfo.py:228
+#: book_latex.py:212 book_texinfo.py:228
 msgid "Unable to auto-detect default settings:\n"
 msgstr ""
 
-#: book_latex.py:221 book_texinfo.py:240
+#: book_latex.py:224 book_texinfo.py:240
 #, python-format
 msgid ""
 "Unable to auto-detect default settings:\n"
 "%s"
 msgstr ""
 
-#: book_snippets.py:409
+#: book_latex.py:247
+msgid "cannot detect textwidth from LaTeX"
+msgstr ""
+
+#: book_snippets.py:406
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr ""
 
-#: book_snippets.py:411
+#: book_snippets.py:408
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr ""
 
-#: book_snippets.py:414
+#: book_snippets.py:411
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr ""
 
-#: book_snippets.py:416
+#: book_snippets.py:413
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr ""
 
-#: book_snippets.py:533
+#: book_snippets.py:530
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr ""
 
-#: book_snippets.py:624
+#: book_snippets.py:621
 #, python-format
 msgid "Missing files: %s"
 msgstr ""
 
-#: book_snippets.py:654
+#: book_snippets.py:651
 #, python-format
 msgid "Could not overwrite file %s"
 msgstr ""
 
-#: book_snippets.py:741
+#: book_snippets.py:738
 #, python-format
 msgid "Running through filter `%s'"
 msgstr ""
 
-#: book_snippets.py:761
+#: book_snippets.py:759
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr ""
 
-#: book_snippets.py:762
+#: book_snippets.py:760
 msgid "The error log is as follows:"
 msgstr ""
 
-#: book_snippets.py:882
+#: book_snippets.py:880
 #, python-format
 msgid "Converting MusicXML file `%s'...\n"
 msgstr ""
 
-#: book_snippets.py:909
+#: book_snippets.py:907
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of original file,\n"
 "printing diff against existing file."
 msgstr ""
 
-#: book_snippets.py:922
+#: book_snippets.py:920
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of converted lilypond file,\n"
@@ -122,162 +127,162 @@ msgstr ""
 msgid "Running texi2pdf on file %s to detect default page settings.\n"
 msgstr ""
 
-#: convertrules.py:12
+#: convertrules.py:13
 #, python-format
 msgid "Not smart enough to convert %s."
 msgstr ""
 
-#: convertrules.py:13
+#: convertrules.py:14
 msgid "Please refer to the manual for details, and update manually."
 msgstr ""
 
-#: convertrules.py:14
+#: convertrules.py:15
 #, python-format
 msgid "%s has been replaced by %s"
 msgstr ""
 
-#: convertrules.py:24 lilylib.py:131 warn.cc:223
+#: convertrules.py:25 lilylib.py:136 warn.cc:223
 #, c-format, python-format
 msgid "warning: %s"
 msgstr ""
 
-#: convertrules.py:49 convertrules.py:94
+#: convertrules.py:50 convertrules.py:95
 msgid "\\header { key = concat + with + operator }"
 msgstr ""
 
-#: convertrules.py:56
+#: convertrules.py:57
 #, python-format
 msgid "deprecated %s"
 msgstr ""
 
-#: convertrules.py:65
+#: convertrules.py:66
 msgid "deprecated \\textstyle, new \\key syntax"
 msgstr ""
 
-#: convertrules.py:81 convertrules.py:1855 convertrules.py:2031
-#: convertrules.py:2174 convertrules.py:2505 convertrules.py:2800
-#: convertrules.py:3150 convertrules.py:3384
+#: convertrules.py:82 convertrules.py:1856 convertrules.py:2032
+#: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801
+#: convertrules.py:3151 convertrules.py:3385
 msgid "bump version for release"
 msgstr ""
 
-#: convertrules.py:97
+#: convertrules.py:98
 msgid "new \\header format"
 msgstr ""
 
-#: convertrules.py:124
+#: convertrules.py:125
 msgid "\\translator syntax"
 msgstr ""
 
-#: convertrules.py:175
+#: convertrules.py:176
 msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
 msgstr ""
 
-#: convertrules.py:205 convertrules.py:678 convertrules.py:1350
-#: convertrules.py:2317
+#: convertrules.py:206 convertrules.py:679 convertrules.py:1351
+#: convertrules.py:2318
 #, python-format
 msgid "deprecate %s"
 msgstr ""
 
-#: convertrules.py:279
+#: convertrules.py:280
 #, python-format
 msgid "deprecate %s "
 msgstr ""
 
-#: convertrules.py:305
+#: convertrules.py:306
 msgid "new \\notenames format"
 msgstr ""
 
-#: convertrules.py:321
+#: convertrules.py:322
 msgid "new tremolo format"
 msgstr ""
 
-#: convertrules.py:325
+#: convertrules.py:326
 msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver"
 msgstr ""
 
-#: convertrules.py:376
+#: convertrules.py:377
 msgid "change property definition case (eg. onevoice -> oneVoice)"
 msgstr ""
 
-#: convertrules.py:437
+#: convertrules.py:438
 msgid "new \\textscript markup text"
 msgstr ""
 
-#: convertrules.py:509
+#: convertrules.py:510
 #, python-format
 msgid "identifier names: %s"
 msgstr ""
 
-#: convertrules.py:548
+#: convertrules.py:549
 msgid "point-and-click argument changed to procedure."
 msgstr ""
 
-#: convertrules.py:590
+#: convertrules.py:591
 msgid "semicolons removed"
 msgstr ""
 
 #. 40 ?
-#: convertrules.py:633
+#: convertrules.py:634
 #, python-format
 msgid "%s property names"
 msgstr ""
 
-#: convertrules.py:703
+#: convertrules.py:704
 msgid "automaticMelismata turned on by default"
 msgstr ""
 
-#: convertrules.py:708
+#: convertrules.py:709
 msgid "automaticMelismata is turned on by default since 1.5.67."
 msgstr ""
 
-#: convertrules.py:942 convertrules.py:1635 convertrules.py:1889
-#: convertrules.py:2134
+#: convertrules.py:943 convertrules.py:1636 convertrules.py:1890
+#: convertrules.py:2135
 #, python-format
 msgid "remove %s"
 msgstr ""
 
-#: convertrules.py:977 convertrules.py:980
+#: convertrules.py:978 convertrules.py:981
 msgid "cluster syntax"
 msgstr ""
 
-#: convertrules.py:987
+#: convertrules.py:988
 msgid "new Pedal style syntax"
 msgstr ""
 
-#: convertrules.py:1246
+#: convertrules.py:1247
 msgid ""
 "New relative mode,\n"
 "Postfix articulations, new text markup syntax, new chord syntax."
 msgstr ""
 
-#: convertrules.py:1259
+#: convertrules.py:1260
 msgid "Remove - before articulation"
 msgstr ""
 
-#: convertrules.py:1294
+#: convertrules.py:1295
 #, python-format
 msgid "%s misspelling"
 msgstr ""
 
-#: convertrules.py:1313
+#: convertrules.py:1314
 msgid "Swap < > and << >>"
 msgstr ""
 
-#: convertrules.py:1316
+#: convertrules.py:1317
 msgid "attempting automatic \\figures conversion.  Check results!"
 msgstr ""
 
-#: convertrules.py:1362
+#: convertrules.py:1363
 msgid "Use Scheme code to construct arbitrary note events."
 msgstr ""
 
-#: convertrules.py:1369
+#: convertrules.py:1370
 msgid ""
 "use symbolic constants for alterations,\n"
 "remove \\outputproperty, move ly:verbose into ly:get-option"
 msgstr ""
 
-#: convertrules.py:1394
+#: convertrules.py:1395
 #, python-format
 msgid ""
 "\\outputproperty found,\n"
@@ -289,7 +294,7 @@ msgid ""
 "as a substitution text."
 msgstr ""
 
-#: convertrules.py:1406
+#: convertrules.py:1407
 msgid ""
 "The alteration field of Scheme pitches was multiplied by 2\n"
 "to support quarter tone accidentals.  You must update the following "
@@ -299,70 +304,70 @@ msgid ""
 "* keySignature settings made with \\property\n"
 msgstr ""
 
-#: convertrules.py:1449
+#: convertrules.py:1450
 msgid "removal of automaticMelismata; use melismaBusyProperties instead."
 msgstr ""
 
-#: convertrules.py:1556
+#: convertrules.py:1557
 msgid "\\partcombine syntax change to \\newpartcombine"
 msgstr ""
 
-#: convertrules.py:1581
+#: convertrules.py:1582
 msgid ""
 "Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
 "Harmonic notes. Thread context removed. Lyrics context removed."
 msgstr ""
 
-#: convertrules.py:1585
+#: convertrules.py:1586
 msgid "Drums found. Enclose drum notes in \\drummode"
 msgstr ""
 
-#: convertrules.py:1596 convertrules.py:1603 convertrules.py:1614
+#: convertrules.py:1597 convertrules.py:1604 convertrules.py:1615
 #, python-format
 msgid ""
 "\n"
 "%s found. Check file manually!\n"
 msgstr ""
 
-#: convertrules.py:1596
+#: convertrules.py:1597
 msgid "Drum notation"
 msgstr ""
 
-#: convertrules.py:1655
+#: convertrules.py:1656
 msgid "new syntax for property settings:"
 msgstr ""
 
-#: convertrules.py:1681
+#: convertrules.py:1682
 msgid "Property setting syntax in \\translator{ }"
 msgstr ""
 
-#: convertrules.py:1720
+#: convertrules.py:1721
 msgid "Scheme grob function renaming"
 msgstr ""
 
-#: convertrules.py:1731 convertrules.py:2138 convertrules.py:2142
-#: convertrules.py:2708
+#: convertrules.py:1732 convertrules.py:2139 convertrules.py:2143
+#: convertrules.py:2709
 #, python-format
 msgid "Use %s\n"
 msgstr ""
 
-#: convertrules.py:1747
+#: convertrules.py:1748
 msgid "More Scheme function renaming"
 msgstr ""
 
-#: convertrules.py:1871
+#: convertrules.py:1872
 msgid ""
 "Page layout has been changed, using paper size and margins.\n"
 "textheight is no longer used.\n"
 msgstr ""
 
-#: convertrules.py:1957
+#: convertrules.py:1958
 msgid ""
 "\\foo -> \\foomode (for chords, notes, etc.)\n"
 "fold \\new FooContext \\foomode into \\foo."
 msgstr ""
 
-#: convertrules.py:1995
+#: convertrules.py:1996
 msgid ""
 "staff size should be changed at top-level\n"
 "with\n"
@@ -371,79 +376,79 @@ msgid ""
 "\n"
 msgstr ""
 
-#: convertrules.py:2015
+#: convertrules.py:2016
 msgid "regularize other identifiers"
 msgstr ""
 
-#: convertrules.py:2083
+#: convertrules.py:2084
 msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
 msgstr ""
 
-#: convertrules.py:2094
+#: convertrules.py:2095
 msgid "LilyPond source must be UTF-8"
 msgstr ""
 
-#: convertrules.py:2097
+#: convertrules.py:2098
 msgid "Try the texstrings backend"
 msgstr ""
 
-#: convertrules.py:2100
+#: convertrules.py:2101
 #, python-format
 msgid "Do something like: %s"
 msgstr ""
 
-#: convertrules.py:2103
+#: convertrules.py:2104
 msgid "Or save as UTF-8 in your editor"
 msgstr ""
 
-#: convertrules.py:2153
+#: convertrules.py:2154
 msgid "warn about auto beam settings"
 msgstr ""
 
-#: convertrules.py:2157
+#: convertrules.py:2158
 msgid "auto beam settings"
 msgstr ""
 
-#: convertrules.py:2158
+#: convertrules.py:2159
 msgid ""
 "\n"
 "Auto beam settings must now specify each interesting moment in a measure\n"
 "explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n"
 msgstr ""
 
-#: convertrules.py:2271
+#: convertrules.py:2272
 msgid "verticalAlignmentChildCallback has been deprecated"
 msgstr ""
 
-#: convertrules.py:2276
+#: convertrules.py:2277
 msgid "Remove callbacks property, deprecate XY-extent-callback."
 msgstr ""
 
-#: convertrules.py:2297
+#: convertrules.py:2298
 msgid "Use grob closures iso. XY-offset-callbacks."
 msgstr ""
 
-#: convertrules.py:2359
+#: convertrules.py:2360
 msgid "foobar -> foo-bar for \\paper, \\layout"
 msgstr ""
 
-#: convertrules.py:2469
+#: convertrules.py:2470
 msgid "deprecate \\tempo in \\midi"
 msgstr ""
 
-#: convertrules.py:2522
+#: convertrules.py:2523
 msgid "deprecate cautionary-style. Use AccidentalCautionary properties"
 msgstr ""
 
-#: convertrules.py:2535
+#: convertrules.py:2536
 msgid "Rename accidental glyphs, use glyph-name-alist."
 msgstr ""
 
-#: convertrules.py:2590
+#: convertrules.py:2591
 msgid "edge-text settings for TextSpanner"
 msgstr ""
 
-#: convertrules.py:2591
+#: convertrules.py:2592
 #, python-format
 msgid ""
 "Use\n"
@@ -451,124 +456,124 @@ msgid ""
 "%s"
 msgstr ""
 
-#: convertrules.py:2624
+#: convertrules.py:2625
 msgid "Use the `alignment-offsets' sub-property of\n"
 msgstr ""
 
-#: convertrules.py:2625
+#: convertrules.py:2626
 msgid "NonMusicalPaperColumn #'line-break-system-details\n"
 msgstr ""
 
-#: convertrules.py:2626
+#: convertrules.py:2627
 msgid "to set fixed distances between staves.\n"
 msgstr ""
 
-#: convertrules.py:2638
+#: convertrules.py:2639
 msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
 msgstr ""
 
-#: convertrules.py:2644
+#: convertrules.py:2645
 msgid "all settings related to dashed lines"
 msgstr ""
 
-#: convertrules.py:2645
+#: convertrules.py:2646
 msgid "Use \\override ... #'style = #'line for solid lines and\n"
 msgstr ""
 
-#: convertrules.py:2646
+#: convertrules.py:2647
 msgid "\t\\override ... #'style = #'dashed-line for dashed lines."
 msgstr ""
 
-#: convertrules.py:2682
+#: convertrules.py:2683
 msgid ""
 "metronomeMarkFormatter uses text markup as second argument,\n"
 "fret diagram properties moved to fret-diagram-details."
 msgstr ""
 
-#: convertrules.py:2688
+#: convertrules.py:2689
 msgid "metronomeMarkFormatter got an additional text argument.\n"
 msgstr ""
 
-#: convertrules.py:2689
+#: convertrules.py:2690
 #, python-format
 msgid ""
 "The function assigned to Score.metronomeMarkFunction now uses the signature\n"
 "%s"
 msgstr ""
 
-#: convertrules.py:2707
+#: convertrules.py:2708
 #, python-format
 msgid "%s in fret-diagram properties"
 msgstr ""
 
-#: convertrules.py:2751
+#: convertrules.py:2752
 msgid "\\put-adjacent argument order"
 msgstr ""
 
-#: convertrules.py:2752
+#: convertrules.py:2753
 msgid "Axis and direction now come before markups:\n"
 msgstr ""
 
-#: convertrules.py:2753
+#: convertrules.py:2754
 msgid "\\put-adjacent axis dir markup markup."
 msgstr ""
 
-#: convertrules.py:2784
+#: convertrules.py:2785
 msgid "re-definition of InnerStaffGroup"
 msgstr ""
 
-#: convertrules.py:2789
+#: convertrules.py:2790
 msgid "re-definition of InnerChoirStaff"
 msgstr ""
 
-#: convertrules.py:2799
+#: convertrules.py:2800
 msgid "Syntax changes for \\addChordShape and \\chord-shape"
 msgstr ""
 
-#: convertrules.py:2804
+#: convertrules.py:2805
 msgid "stringTuning must be added to addChordShape call.\n"
 msgstr ""
 
-#: convertrules.py:2809
+#: convertrules.py:2810
 msgid "stringTuning must be added to chord-shape call.\n"
 msgstr ""
 
-#: convertrules.py:2815
+#: convertrules.py:2816
 msgid "Remove oldaddlyrics"
 msgstr ""
 
-#: convertrules.py:2819
+#: convertrules.py:2820
 msgid ""
 "oldaddlyrics is no longer supported. \n"
 "         Use addlyrics or lyrsicsto instead.\n"
 msgstr ""
 
-#: convertrules.py:2825
+#: convertrules.py:2826
 msgid ""
 "keySignature property not reversed any more\n"
 "MIDI 47: orchestral strings -> orchestral harp"
 msgstr ""
 
-#: convertrules.py:2830
+#: convertrules.py:2831
 msgid "The alist for Staff.keySignature is no longer in reversed order.\n"
 msgstr ""
 
-#: convertrules.py:2836
+#: convertrules.py:2837
 msgid ""
 "\\bar \".\" now produces a thick barline\n"
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
 "Dash parameters for slurs and ties are now in dash-definition"
 msgstr ""
 
-#: convertrules.py:2842
+#: convertrules.py:2843
 msgid "\\bar \".\" now produces a thick barline.\n"
 msgstr ""
 
-#: convertrules.py:2848
+#: convertrules.py:2849
 msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
 msgstr ""
 
-#: convertrules.py:2853
+#: convertrules.py:2854
 msgid ""
 "Autobeaming rules have changed.  override-auto-beam-setting and\n"
 "revert-auto-beam-setting have been eliminated.\n"
@@ -583,27 +588,27 @@ msgid ""
 "template replaced by new `Dynamics' context."
 msgstr ""
 
-#: convertrules.py:2867
+#: convertrules.py:2868
 msgid "    Autobeam settings are now overriden with \\overrideBeamSettings.\n"
 msgstr ""
 
-#: convertrules.py:2872
+#: convertrules.py:2873
 msgid "    Autobeam settings are now reverted with \\revertBeamSettings.\n"
 msgstr ""
 
-#: convertrules.py:2878
+#: convertrules.py:2879
 msgid ""
 "    beatGrouping with a specified context must now be accomplished with\n"
 "   \\overrideBeamSettings.\n"
 msgstr ""
 
-#: convertrules.py:2884
+#: convertrules.py:2885
 msgid ""
 "alignment-offsets has been changed to alignment-distances: you must now "
 "specify the distances between staves rather than the offset of staves.\n"
 msgstr ""
 
-#: convertrules.py:2895
+#: convertrules.py:2896
 msgid ""
 "Remove obsolete engravers/translators: Note_swallow_translator,\n"
 "Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
@@ -611,47 +616,47 @@ msgid ""
 "New vertical spacing variables."
 msgstr ""
 
-#: convertrules.py:2926
+#: convertrules.py:2927
 msgid ""
 "Vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n"
 msgstr ""
 
-#: convertrules.py:2932
+#: convertrules.py:2933
 msgid "Unify fetaNumber and fetaDynamic encodings"
 msgstr ""
 
-#: convertrules.py:2937
+#: convertrules.py:2938
 msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 msgstr ""
 
-#: convertrules.py:2948
+#: convertrules.py:2949
 msgid "\\cresc etc. are now postfix operators"
 msgstr ""
 
-#: convertrules.py:2960
+#: convertrules.py:2961
 msgid ""
 "Eliminate beamSettings, beatLength, \\setBeatGrouping, "
 "\\overrideBeamSettings and \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
 msgstr ""
 
-#: convertrules.py:2978
+#: convertrules.py:2979
 msgid "Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"
 msgstr ""
 
-#: convertrules.py:2982
+#: convertrules.py:2983
 msgid "Use \\set beamExceptions or \\revertTimeSignatureSettings.\n"
 msgstr ""
 
-#: convertrules.py:2986
+#: convertrules.py:2987
 msgid "Use baseMoment, beatStructure, and beamExceptions.\n"
 msgstr ""
 
-#: convertrules.py:2990 convertrules.py:2994
+#: convertrules.py:2991 convertrules.py:2995
 msgid "Use baseMoment and beatStructure.\n"
 msgstr ""
 
-#: convertrules.py:2999
+#: convertrules.py:3000
 msgid ""
 "Woodwind diagrams: Move size, thickness, and graphic from argument list to "
 "properties.\n"
@@ -659,117 +664,127 @@ msgid ""
 "instead."
 msgstr ""
 
-#: convertrules.py:3004
+#: convertrules.py:3005
 msgid ""
 "Move size, thickness, and graphic to properties.  Argument should be just "
 "the key list.\n"
 msgstr ""
 
-#: convertrules.py:3012
+#: convertrules.py:3013
 msgid ""
 "Rename vertical spacing variables.\n"
 "Add fretboard-table argument to savePredefinedFretboard."
 msgstr ""
 
-#: convertrules.py:3030
+#: convertrules.py:3031
 msgid "Rename vertical spacing grob properties."
 msgstr ""
 
-#: convertrules.py:3046
+#: convertrules.py:3047
 msgid "Remove \\paper variables head-separation and foot-separation."
 msgstr ""
 
-#: convertrules.py:3050
+#: convertrules.py:3051
 msgid "Adjust settings for top-system-spacing instead.\n"
 msgstr ""
 
-#: convertrules.py:3054
+#: convertrules.py:3055
 msgid "Adjust settings for last-bottom-spacing instead.\n"
 msgstr ""
 
-#: convertrules.py:3060
+#: convertrules.py:3061
 msgid ""
 "Rename space to basic-distance in various spacing alists.\n"
 "Remove HarmonicParenthesesItem grob."
 msgstr ""
 
-#: convertrules.py:3067
+#: convertrules.py:3068
 msgid "HarmonicParenthesesItem has been eliminated.\n"
 msgstr ""
 
-#: convertrules.py:3068
+#: convertrules.py:3069
 msgid "Harmonic parentheses are part of the TabNoteHead grob.\n"
 msgstr ""
 
-#: convertrules.py:3073
+#: convertrules.py:3074
 msgid ""
 "Remove context from overrideTimeSignatureSettings and "
 "revertTimeSignatureSettings.\n"
 msgstr ""
 
-#: convertrules.py:3080
+#: convertrules.py:3081
 msgid ""
 "Change stringTunings from a list of semitones to a list of pitches.\n"
 "Change tenor and baritone ukulele names in string tunings.\n"
 "Generate messages for manual conversion of vertical spacing if required."
 msgstr ""
 
-#: convertrules.py:3123
+#: convertrules.py:3124
 msgid "Vertical spacing changes might affect user-defined contexts."
 msgstr ""
 
-#: convertrules.py:3129
+#: convertrules.py:3130
 msgid "Replace bar-size with bar-extent."
 msgstr ""
 
-#: convertrules.py:3141
+#: convertrules.py:3142
 msgid "Woodwind diagrams: Changes to the clarinet diagram."
 msgstr ""
 
-#: convertrules.py:3145
+#: convertrules.py:3146
 msgid "Clarinet fingering changed to reflect actual anatomy of instrument.\n"
 msgstr ""
 
-#: convertrules.py:3155
+#: convertrules.py:3156
 msgid "Handling of non-automatic footnotes."
 msgstr ""
 
-#: convertrules.py:3159
+#: convertrules.py:3160
 msgid ""
 "If you are using non-automatic footnotes, make sure to set footnote-auto-"
 "numbering = ##f in the paper block.\n"
 msgstr ""
 
-#: convertrules.py:3164
+#: convertrules.py:3165
 msgid "Change in internal property for MultiMeasureRest"
 msgstr ""
 
-#: convertrules.py:3168
+#: convertrules.py:3169
 msgid ""
 "This internal property has been replaced by round-up-to-longer-rest, round-"
 "up-exceptions and usable-duration-logs.\n"
 msgstr ""
 
-#: convertrules.py:3173
+#: convertrules.py:3174
 msgid ""
 "Creation of a Flag grob and moving of certain Stem properties to this grob"
 msgstr ""
 
-#: convertrules.py:3209
+#: convertrules.py:3210
 msgid ""
 "consistent-broken-slope is now handled through the positions callback.\n"
 msgstr ""
 
-#: convertrules.py:3210
+#: convertrules.py:3211
 msgid ""
 "input/regression/beam-broken-classic.ly shows how broken beams are now "
 "handled.\n"
 msgstr ""
 
-#: convertrules.py:3368
+#: convertrules.py:3369
 msgid "beamExceptions controls whole-measure beaming."
 msgstr ""
 
+#: convertrules.py:3606
+msgid "Flag.transparent and Flag.color inherit from Stem"
+msgstr ""
+
+#: convertrules.py:3672
+msgid ""
+"Staff-padding now controls the distance to the baseline, not the nearest "
+"point."
+msgstr ""
+
 #: fontextract.py:25
 #, python-format
 msgid "Scanning %s"
@@ -785,37 +800,37 @@ msgstr ""
 msgid "Writing fonts to %s"
 msgstr ""
 
-#: lilylib.py:96
+#: lilylib.py:101
 #, python-format
 msgid "Setting loglevel to %s"
 msgstr ""
 
-#: lilylib.py:99
+#: lilylib.py:104
 #, python-format
 msgid "Unknown or invalid loglevel '%s'"
 msgstr ""
 
-#: lilylib.py:128 warn.cc:211
+#: lilylib.py:133 warn.cc:211
 #, c-format, python-format
 msgid "error: %s"
 msgstr ""
 
-#: lilylib.py:185
+#: lilylib.py:190
 #, python-format
 msgid "Processing %s.ly"
 msgstr ""
 
-#: lilylib.py:189 lilylib.py:250
+#: lilylib.py:194 lilylib.py:255
 #, python-format
 msgid "Invoking `%s'"
 msgstr ""
 
-#: lilylib.py:191 lilylib.py:252
+#: lilylib.py:196 lilylib.py:257
 #, python-format
 msgid "Running %s..."
 msgstr ""
 
-#: lilylib.py:328
+#: lilylib.py:333
 #, python-format
 msgid "Usage: %s"
 msgstr ""
@@ -874,7 +889,7 @@ msgstr ""
 msgid "Unable to find instrument for ID=%s\n"
 msgstr ""
 
-#: abc2ly.py:1386 convert-ly.py:81 lilypond-book.py:122 midi2ly.py:1044
+#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
 #, python-format
 msgid "%s [OPTION]... FILE"
 msgstr ""
@@ -886,13 +901,13 @@ msgid ""
 "%s) to LilyPond input.\n"
 msgstr ""
 
-#: abc2ly.py:1395 convert-ly.py:88 etf2ly.py:1208 lilypond-book.py:231
-#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:174
+#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:181
 msgid "show version number and exit"
 msgstr ""
 
-#: abc2ly.py:1398 convert-ly.py:92 etf2ly.py:1204 lilypond-book.py:140
-#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:153
+#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:160
 msgid "show this help and exit"
 msgstr ""
 
@@ -916,114 +931,122 @@ msgstr ""
 #. "Report bugs in English via %s",
 #. or if there is a LilyPond users list or forum in your language
 #. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: abc2ly.py:1413 convert-ly.py:146 etf2ly.py:1218 lilypond-book.py:258
-#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:285
+#: abc2ly.py:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:315
 #, c-format, python-format
 msgid "Report bugs via %s"
 msgstr ""
 
-#: convert-ly.py:46
+#: convert-ly.py:47
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
 "version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 
-#: convert-ly.py:48 lilypond-book.py:82
+#: convert-ly.py:50
+msgid "If FILE is `-', read from standard input."
+msgstr ""
+
+#: convert-ly.py:52 lilypond-book.py:82
 msgid "Examples:"
 msgstr ""
 
-#: convert-ly.py:75 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
+#: convert-ly.py:79 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr ""
 
-#: convert-ly.py:77 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
+#: convert-ly.py:81 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
 msgid "Distributed under terms of the GNU General Public License."
 msgstr ""
 
-#: convert-ly.py:78 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
+#: convert-ly.py:82 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
 msgid "It comes with NO WARRANTY."
 msgstr ""
 
-#: convert-ly.py:96 convert-ly.py:137
+#: convert-ly.py:100 convert-ly.py:141
 msgid "VERSION"
 msgstr ""
 
-#: convert-ly.py:98
+#: convert-ly.py:102
 msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#: convert-ly.py:101
+#: convert-ly.py:105
 msgid "edit in place"
 msgstr ""
 
-#: convert-ly.py:105 lilypond-book.py:179 musicxml2ly.py:2627
+#: convert-ly.py:109 lilypond-book.py:179 musicxml2ly.py:2627
 msgid ""
 "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS "
 "(default), DEBUG)"
 msgstr ""
 
-#: convert-ly.py:107 lilypond-book.py:163 lilypond-book.py:181
-#: musicxml2ly.py:2629 main.cc:167
+#: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
+#: musicxml2ly.py:2629 main.cc:174
 msgid "LOGLEVEL"
 msgstr ""
 
-#: convert-ly.py:113
+#: convert-ly.py:117
 msgid "do not add \\version command if missing"
 msgstr ""
 
-#: convert-ly.py:119
+#: convert-ly.py:123
 #, python-format
 msgid "force updating \\version number to %s"
 msgstr ""
 
-#: convert-ly.py:125
+#: convert-ly.py:129
 msgid "only update \\version number if file is modified"
 msgstr ""
 
-#: convert-ly.py:131
+#: convert-ly.py:135
 #, python-format
 msgid "show rules [default: -f 0, -t %s]"
 msgstr ""
 
-#: convert-ly.py:136
+#: convert-ly.py:140
 #, python-format
 msgid "convert to VERSION [default: %s]"
 msgstr ""
 
-#: convert-ly.py:141 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
-#: main.cc:176
+#: convert-ly.py:147
+msgid "make a numbered backup [default: filename.ext~]"
+msgstr ""
+
+#: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
+#: main.cc:183
 msgid "show warranty and copyright"
 msgstr ""
 
-#: convert-ly.py:186
+#: convert-ly.py:196
 msgid "Applying conversion: "
 msgstr ""
 
-#: convert-ly.py:202
+#: convert-ly.py:215
 msgid "Error while converting"
 msgstr ""
 
-#: convert-ly.py:204
+#: convert-ly.py:217
 msgid "Stopping at last successful rule"
 msgstr ""
 
-#: convert-ly.py:231
+#: convert-ly.py:256
 #, python-format
 msgid "Processing `%s'... "
 msgstr ""
 
-#: convert-ly.py:338
+#: convert-ly.py:368
 #, python-format
 msgid "%s: Unable to open file"
 msgstr ""
 
-#: convert-ly.py:345
+#: convert-ly.py:374
 #, python-format
 msgid "%s: Unable to determine version.  Skipping"
 msgstr ""
 
-#: convert-ly.py:350
+#: convert-ly.py:380
 #, python-format
 msgid ""
 "%s: Invalid version string `%s' \n"
@@ -1031,6 +1054,13 @@ msgid ""
 "`2.8.12'"
 msgstr ""
 
+#: convert-ly.py:386
+#, python-format
+msgid "There was %d error."
+msgid_plural "There were %d errors."
+msgstr[0] ""
+msgstr[1] ""
+
 #: etf2ly.py:1197
 #, python-format
 msgid "%s [OPTION]... ETF-FILE"
@@ -1044,7 +1074,7 @@ msgid ""
 msgstr ""
 
 #: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
-#: main.cc:159 main.cc:171
+#: main.cc:166 main.cc:178
 msgid "FILE"
 msgstr ""
 
@@ -1084,7 +1114,7 @@ msgid "add DIR to include path"
 msgstr ""
 
 #: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
-#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:158
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:165
 msgid "DIR"
 msgstr ""
 
@@ -1172,78 +1202,78 @@ msgstr ""
 msgid "create PDF files for use with PDFTeX"
 msgstr ""
 
-#: lilypond-book.py:455
+#: lilypond-book.py:463
 msgid "Writing snippets..."
 msgstr ""
 
-#: lilypond-book.py:460
+#: lilypond-book.py:468
 msgid "Processing..."
 msgstr ""
 
-#: lilypond-book.py:465
+#: lilypond-book.py:473
 msgid "All snippets are up to date..."
 msgstr ""
 
-#: lilypond-book.py:467
+#: lilypond-book.py:475
 msgid "Linking files..."
 msgstr ""
 
-#: lilypond-book.py:487
+#: lilypond-book.py:495
 #, python-format
 msgid "cannot determine format for: %s"
 msgstr ""
 
-#: lilypond-book.py:496
+#: lilypond-book.py:504
 #, python-format
 msgid "%s is up to date."
 msgstr ""
 
-#: lilypond-book.py:509
+#: lilypond-book.py:517
 #, python-format
 msgid "Writing `%s'..."
 msgstr ""
 
-#: lilypond-book.py:570
+#: lilypond-book.py:580
 msgid "Output would overwrite input file; use --output."
 msgstr ""
 
-#: lilypond-book.py:574
+#: lilypond-book.py:584
 #, python-format
 msgid "Reading %s..."
 msgstr ""
 
-#: lilypond-book.py:581
+#: lilypond-book.py:591
 msgid "Dissecting..."
 msgstr ""
 
-#: lilypond-book.py:592
+#: lilypond-book.py:602
 #, python-format
 msgid "Compiling %s..."
 msgstr ""
 
-#: lilypond-book.py:600
+#: lilypond-book.py:610
 #, python-format
 msgid "Processing include: %s"
 msgstr ""
 
-#: lilypond-book.py:611
+#: lilypond-book.py:621
 #, python-format
 msgid "Removing `%s'"
 msgstr ""
 
-#: lilypond-book.py:704
+#: lilypond-book.py:714
 #, python-format
 msgid "Setting LilyPond's loglevel to %s"
 msgstr ""
 
-#: lilypond-book.py:708
+#: lilypond-book.py:718
 #, python-format
 msgid ""
 "Setting LilyPond's loglevel to %s (from environment variable "
 "LILYPOND_LOGLEVEL)"
 msgstr ""
 
-#: lilypond-book.py:711
+#: lilypond-book.py:721
 msgid ""
 "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
 msgstr ""
@@ -1643,12 +1673,12 @@ msgstr ""
 msgid "procedure or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:200
+#: accidental.cc:169
 #, c-format
 msgid "Could not find glyph-name for alteration %s"
 msgstr ""
 
-#: accidental.cc:215
+#: accidental.cc:184
 msgid "natural alteration glyph not found"
 msgstr ""
 
@@ -1661,7 +1691,7 @@ msgstr ""
 msgid "\\applycontext argument is not a procedure"
 msgstr ""
 
-#: arpeggio.cc:115
+#: arpeggio.cc:138
 msgid "no heads for arpeggio found?"
 msgstr ""
 
@@ -1670,19 +1700,24 @@ msgstr ""
 msgid "cannot change, already in translator: %s"
 msgstr ""
 
-#: axis-group-engraver.cc:94
+#: axis-group-engraver.cc:149
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:95
+#: axis-group-engraver.cc:150
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:96
+#: axis-group-engraver.cc:151
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:668
+#: axis-group-interface.cc:714
+#, c-format
+msgid "\"%s\" is not a valid outside-staff-placement-directive"
+msgstr ""
+
+#: axis-group-interface.cc:786
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr ""
 
@@ -1691,23 +1726,23 @@ msgstr ""
 msgid "barcheck failed at: %s"
 msgstr ""
 
-#: beam-engraver.cc:147
+#: beam-engraver.cc:148
 msgid "already have a beam"
 msgstr ""
 
-#: beam-engraver.cc:230
+#: beam-engraver.cc:235
 msgid "unterminated beam"
 msgstr ""
 
-#: beam-engraver.cc:266 chord-tremolo-engraver.cc:149
+#: beam-engraver.cc:282 chord-tremolo-engraver.cc:149
 msgid "stem must have Rhythmic structure"
 msgstr ""
 
-#: beam-engraver.cc:277
+#: beam-engraver.cc:293
 msgid "stem does not fit in beam"
 msgstr ""
 
-#: beam-engraver.cc:278
+#: beam-engraver.cc:294
 msgid "beam was started here"
 msgstr ""
 
@@ -1772,8 +1807,7 @@ msgstr ""
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
 
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:187 constrained-breaking.cc:205
+#: constrained-breaking.cc:187 constrained-breaking.cc:206
 msgid "cannot find line breaking that satisfies constraints"
 msgstr ""
 
@@ -1786,35 +1820,40 @@ msgstr ""
 msgid "cannot find or create new `%s'"
 msgstr ""
 
-#: context.cc:207
+#: context.cc:228
 #, c-format
 msgid "cannot find or create `%s' called `%s'"
 msgstr ""
 
-#: context.cc:400
+#: context.cc:425
 #, c-format
 msgid "cannot find or create: `%s'"
 msgstr ""
 
+#: context.cc:439
+#, c-format
+msgid "cannot find or create new Bottom = \"%s\""
+msgstr ""
+
 #: custos.cc:87
 #, c-format
 msgid "custos `%s' not found"
 msgstr ""
 
-#: dispatcher.cc:83
+#: dispatcher.cc:89
 msgid "Event class should be a list"
 msgstr ""
 
-#: dispatcher.cc:166
+#: dispatcher.cc:172
 #, c-format
 msgid "Junking event: %s"
 msgstr ""
 
-#: dispatcher.cc:262
+#: dispatcher.cc:277
 msgid "Attempting to remove nonexisting listener."
 msgstr ""
 
-#: dispatcher.cc:284
+#: dispatcher.cc:303
 msgid "Already listening to dispatcher, ignoring request"
 msgstr ""
 
@@ -1823,24 +1862,16 @@ msgstr ""
 msgid "dot `%s' not found"
 msgstr ""
 
-#: dynamic-engraver.cc:193
-msgid "cannot find start of (de)crescendo"
-msgstr ""
-
-#: dynamic-engraver.cc:200
-msgid "already have a decrescendo"
-msgstr ""
-
-#: dynamic-engraver.cc:202
-msgid "already have a crescendo"
-msgstr ""
-
-#: dynamic-engraver.cc:205
-msgid "cresc starts here"
+#: dynamic-engraver.cc:168
+#, c-format
+msgid ""
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
 msgstr ""
 
-#: dynamic-engraver.cc:333
-msgid "unterminated (de)crescendo"
+#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#, c-format
+msgid "unterminated %s"
 msgstr ""
 
 #. No explicit dynamic script events have occurred yet, but there is
@@ -1866,12 +1897,12 @@ msgstr ""
 msgid "unterminated extender"
 msgstr ""
 
-#: flag.cc:113
+#: flag.cc:134
 #, c-format
 msgid "flag `%s' not found"
 msgstr ""
 
-#: flag.cc:133
+#: flag.cc:154
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr ""
@@ -1904,7 +1935,7 @@ msgstr ""
 msgid "Building font database..."
 msgstr ""
 
-#: footnote-engraver.cc:110
+#: footnote-engraver.cc:87
 msgid "Must be footnote-event."
 msgstr ""
 
@@ -1921,15 +1952,15 @@ msgstr ""
 msgid "unterminated glissando"
 msgstr ""
 
-#: global-context-scheme.cc:96 global-context-scheme.cc:114
+#: global-context-scheme.cc:95 global-context-scheme.cc:113
 msgid "no music found in score"
 msgstr ""
 
-#: global-context-scheme.cc:104
+#: global-context-scheme.cc:103
 msgid "Interpreting music..."
 msgstr ""
 
-#: global-context-scheme.cc:126
+#: global-context-scheme.cc:125
 #, c-format
 msgid "elapsed time: %.2f seconds"
 msgstr ""
@@ -1969,11 +2000,16 @@ msgstr ""
 msgid "%d: %s"
 msgstr ""
 
+#: grob.cc:488
+#, c-format
+msgid "ignored infinite %s-offset"
+msgstr ""
+
 #: hairpin.cc:60
 msgid "Asking for broken bound padding at a non-broken bound."
 msgstr ""
 
-#: hairpin.cc:254
+#: hairpin.cc:256
 msgid "decrescendo too small"
 msgstr ""
 
@@ -2020,31 +2056,31 @@ msgstr ""
 msgid "alteration not found"
 msgstr ""
 
-#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:104
+#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:109
 msgid "cannot find start of ligature"
 msgstr ""
 
-#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:131
+#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:136
 msgid "already have a ligature"
 msgstr ""
 
-#: ligature-engraver.cc:109
+#: ligature-engraver.cc:114
 msgid "no right bound"
 msgstr ""
 
-#: ligature-engraver.cc:140
+#: ligature-engraver.cc:145
 msgid "no left bound"
 msgstr ""
 
-#: ligature-engraver.cc:184
+#: ligature-engraver.cc:189
 msgid "unterminated ligature"
 msgstr ""
 
-#: ligature-engraver.cc:211
+#: ligature-engraver.cc:216
 msgid "ignoring rest: ligature may not contain rest"
 msgstr ""
 
-#: ligature-engraver.cc:212
+#: ligature-engraver.cc:217
 msgid "ligature was started here"
 msgstr ""
 
@@ -2053,34 +2089,34 @@ msgstr ""
 msgid "(load path: `%s')"
 msgstr ""
 
-#: lily-guile.cc:416
+#: lily-guile.cc:412
 #, c-format
 msgid "cannot find property type-check for `%s' (%s)."
 msgstr ""
 
-#: lily-guile.cc:419
+#: lily-guile.cc:415
 msgid "perhaps a typing error?"
 msgstr ""
 
-#: lily-guile.cc:426
-msgid "doing assignment anyway"
+#: lily-guile.cc:422
+msgid "skipping assignment"
 msgstr ""
 
-#: lily-guile.cc:438
+#: lily-guile.cc:442
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 
-#: lily-lexer.cc:244
+#: lily-lexer.cc:249
 msgid "include files are not allowed in safe mode"
 msgstr ""
 
-#: lily-lexer.cc:271
+#: lily-lexer.cc:276
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr ""
 
-#: lily-lexer.cc:292 lily-lexer.cc:305
+#: lily-lexer.cc:297 lily-lexer.cc:310
 #, c-format
 msgid "%s:EOF"
 msgstr ""
@@ -2105,22 +2141,27 @@ msgstr ""
 msgid "Processing `%s'"
 msgstr ""
 
-#: lily-parser-scheme.cc:208
+#: lily-parser-scheme.cc:209
 msgid ""
 "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-"
 "include-string instead."
 msgstr ""
 
-#: lily-parser-scheme.cc:239
+#: lily-parser-scheme.cc:240
 msgid ""
 "ly:parse-string-expression is only valid with a new parser.  Use ly:parser-"
 "include-string instead."
 msgstr ""
 
-#: lily-parser.cc:108
+#: lily-parser.cc:107
 msgid "Parsing..."
 msgstr ""
 
+#: lookup.cc:181
+#, c-format
+msgid "Not drawing a box with negative dimension, %.2f by %.2f."
+msgstr ""
+
 #: lyric-combine-music-iterator.cc:199
 msgid "argument of \\lyricsto should contain Lyrics context"
 msgstr ""
@@ -2134,7 +2175,7 @@ msgstr ""
 msgid "Lyric syllable does not have note.  Use \\lyricsto or associatedVoice."
 msgstr ""
 
-#: main.cc:101
+#: main.cc:104
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -2143,7 +2184,7 @@ msgid ""
 "information.\n"
 msgstr ""
 
-#: main.cc:107
+#: main.cc:110
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License as \n"
@@ -2161,98 +2202,98 @@ msgid ""
 "Boston, MA 02111-1307, USA.\n"
 msgstr ""
 
-#: main.cc:141
+#: main.cc:148
 msgid "SYM[=VAL]"
 msgstr ""
 
-#: main.cc:142
+#: main.cc:149
 msgid ""
 "set Scheme option SYM to VAL (default: #t).\n"
 "Use -dhelp for help."
 msgstr ""
 
-#: main.cc:146
+#: main.cc:153
 msgid "EXPR"
 msgstr ""
 
-#: main.cc:146
+#: main.cc:153
 msgid "evaluate scheme code"
 msgstr ""
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:149
+#: main.cc:156
 msgid "FORMATs"
 msgstr ""
 
-#: main.cc:149
+#: main.cc:156
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
 
-#: main.cc:150
+#: main.cc:157
 msgid "generate PDF (default)"
 msgstr ""
 
-#: main.cc:151
+#: main.cc:158
 msgid "generate PNG"
 msgstr ""
 
-#: main.cc:152
+#: main.cc:159
 msgid "generate PostScript"
 msgstr ""
 
-#: main.cc:155
+#: main.cc:162
 msgid "FIELD"
 msgstr ""
 
-#: main.cc:155
+#: main.cc:162
 msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
 msgstr ""
 
-#: main.cc:158
+#: main.cc:165
 msgid "add DIR to search path"
 msgstr ""
 
-#: main.cc:159
+#: main.cc:166
 msgid "use FILE as init file"
 msgstr ""
 
-#: main.cc:162
+#: main.cc:169
 msgid "USER, GROUP, JAIL, DIR"
 msgstr ""
 
-#: main.cc:162
+#: main.cc:169
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 
-#: main.cc:167
+#: main.cc:174
 msgid ""
 "print log messages according to LOGLEVEL.  Possible values are:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
 msgstr ""
 
-#: main.cc:171
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
 msgstr ""
 
-#: main.cc:172
+#: main.cc:179
 msgid "relocate using directory of lilypond program"
 msgstr ""
 
-#: main.cc:173
+#: main.cc:180
 msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:182
 msgid "be verbose (equivalent to loglevel=DEBUG)"
 msgstr ""
 
 #. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:242
+#: main.cc:261
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -2260,74 +2301,74 @@ msgid ""
 msgstr ""
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:269
+#: main.cc:299
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr ""
 
-#: main.cc:271
+#: main.cc:301
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr ""
 
-#: main.cc:273
+#: main.cc:303
 msgid "LilyPond produces beautiful music notation."
 msgstr ""
 
-#: main.cc:275
+#: main.cc:305
 #, c-format
 msgid "For more information, see %s"
 msgstr ""
 
-#: main.cc:277
+#: main.cc:307
 msgid "Options:"
 msgstr ""
 
-#: main.cc:331
+#: main.cc:374
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr ""
 
-#: main.cc:345
+#: main.cc:388
 #, c-format
 msgid "no such user: %s"
 msgstr ""
 
-#: main.cc:347
+#: main.cc:390
 #, c-format
 msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 
-#: main.cc:362
+#: main.cc:405
 #, c-format
 msgid "no such group: %s"
 msgstr ""
 
-#: main.cc:364
+#: main.cc:407
 #, c-format
 msgid "cannot get group id from group name: %s: %s"
 msgstr ""
 
-#: main.cc:372
+#: main.cc:415
 #, c-format
 msgid "cannot chroot to: %s: %s"
 msgstr ""
 
-#: main.cc:379
+#: main.cc:422
 #, c-format
 msgid "cannot change group id to: %d: %s"
 msgstr ""
 
-#: main.cc:385
+#: main.cc:428
 #, c-format
 msgid "cannot change user id to: %d: %s"
 msgstr ""
 
-#: main.cc:391
+#: main.cc:434
 #, c-format
 msgid "cannot change working directory to: %s: %s"
 msgstr ""
 
-#: main.cc:639
+#: main.cc:805
 #, c-format
 msgid "exception caught: %s"
 msgstr ""
@@ -2341,37 +2382,37 @@ msgstr ""
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:96
+#: mensural-ligature-engraver.cc:100
 msgid "ligature with less than 2 heads -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:123
+#: mensural-ligature-engraver.cc:127
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:137
+#: mensural-ligature-engraver.cc:141
 msgid "single note ligature - skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:148
+#: mensural-ligature-engraver.cc:152
 msgid "prime interval within ligature -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:159
+#: mensural-ligature-engraver.cc:163
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:202
+#: mensural-ligature-engraver.cc:206
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:216
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:232
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -2379,25 +2420,30 @@ msgid ""
 "or the ligatura must be LB or SSB"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:387
+#: mensural-ligature-engraver.cc:396
 msgid "unexpected case fall-through"
 msgstr ""
 
-#: midi-item.cc:89
+#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#, c-format
+msgid "ignoring out-of-range value change for MIDI property `%s'"
+msgstr ""
+
+#: midi-item.cc:93
 #, c-format
 msgid "no such MIDI instrument: `%s'"
 msgstr ""
 
-#: midi-item.cc:161
+#: midi-item.cc:179
 msgid "Time signature with more than 255 beats.  Truncating"
 msgstr ""
 
-#: midi-stream.cc:39
+#: midi-stream.cc:38
 #, c-format
 msgid "cannot open for write: %s: %s"
 msgstr ""
 
-#: midi-stream.cc:55
+#: midi-stream.cc:54
 #, c-format
 msgid "cannot write to file: `%s'"
 msgstr ""
@@ -2410,12 +2456,12 @@ msgstr ""
 msgid "Calculating page breaks..."
 msgstr ""
 
-#: multi-measure-rest.cc:138
+#: multi-measure-rest.cc:154
 msgid ""
 "usable-duration-logs must be a non-empty list.  Falling back to whole rests."
 msgstr ""
 
-#: multi-measure-rest.cc:328
+#: multi-measure-rest.cc:364
 msgid "Using naive multi measure rest spacing."
 msgstr ""
 
@@ -2433,18 +2479,6 @@ msgstr ""
 msgid "Transposing %s by %s makes alteration larger than double"
 msgstr ""
 
-#: new-dynamic-engraver.cc:168
-#, c-format
-msgid ""
-"unknown crescendo style: %s\n"
-"defaulting to hairpin."
-msgstr ""
-
-#: new-dynamic-engraver.cc:233
-#, c-format
-msgid "unterminated %s"
-msgstr ""
-
 #: new-fingering-engraver.cc:113
 msgid "cannot add text scripts to individual note heads"
 msgstr ""
@@ -2457,7 +2491,7 @@ msgstr ""
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:496
+#: note-collision.cc:497
 msgid "ignoring too many clashing note columns"
 msgstr ""
 
@@ -2474,37 +2508,37 @@ msgstr ""
 msgid "NoteEvent without pitch"
 msgstr ""
 
-#: open-type-font.cc:44
+#: open-type-font.cc:46
 #, c-format
 msgid "cannot allocate %lu bytes"
 msgstr ""
 
-#: open-type-font.cc:48
+#: open-type-font.cc:50
 #, c-format
 msgid "cannot load font table: %s"
 msgstr ""
 
-#: open-type-font.cc:53
+#: open-type-font.cc:55
 #, c-format
 msgid "FreeType error: %s"
 msgstr ""
 
-#: open-type-font.cc:110
+#: open-type-font.cc:112
 #, c-format
 msgid "unsupported font format: %s"
 msgstr ""
 
-#: open-type-font.cc:112
+#: open-type-font.cc:114
 #, c-format
 msgid "error reading font file %s: %s"
 msgstr ""
 
-#: open-type-font.cc:187
+#: open-type-font.cc:189
 #, c-format
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr ""
 
-#: open-type-font.cc:318 pango-font.cc:196
+#: open-type-font.cc:337 pango-font.cc:257
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
 msgstr ""
@@ -2514,37 +2548,37 @@ msgstr ""
 msgid "Finding the ideal number of pages..."
 msgstr ""
 
-#: optimal-page-breaking.cc:85
+#: optimal-page-breaking.cc:94
 msgid ""
 "could not satisfy systems-per-page and page-count at the same time, ignoring "
 "systems-per-page"
 msgstr ""
 
-#: optimal-page-breaking.cc:105
+#: optimal-page-breaking.cc:114
 msgid "Fitting music on 1 page..."
 msgstr ""
 
-#: optimal-page-breaking.cc:107
+#: optimal-page-breaking.cc:116
 #, c-format
 msgid "Fitting music on %d pages..."
 msgstr ""
 
-#: optimal-page-breaking.cc:109
+#: optimal-page-breaking.cc:118
 #, c-format
 msgid "Fitting music on %d or %d pages..."
 msgstr ""
 
-#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:172
+#: optimal-page-breaking.cc:128 optimal-page-breaking.cc:181
 #, c-format
 msgid "trying %d systems"
 msgstr ""
 
-#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:200
+#: optimal-page-breaking.cc:147 optimal-page-breaking.cc:209
 #, c-format
 msgid "best score for this sys-count: %f"
 msgstr ""
 
-#: optimal-page-breaking.cc:207 page-turn-page-breaking.cc:248
+#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248
 #: paper-score.cc:162
 msgid "Drawing systems..."
 msgstr ""
@@ -2571,27 +2605,27 @@ msgid ""
 "values"
 msgstr ""
 
-#: page-layout-problem.cc:403
+#: page-layout-problem.cc:402
 msgid ""
 "A page layout problem has been initiated that cannot accommodate footnotes."
 msgstr ""
 
-#: page-layout-problem.cc:732
+#: page-layout-problem.cc:731
 msgid ""
 "cannot fit music on page: ragged-spacing was requested, but page was "
 "compressed"
 msgstr ""
 
-#: page-layout-problem.cc:735
+#: page-layout-problem.cc:734
 #, c-format
 msgid "cannot fit music on page: overflow is %f"
 msgstr ""
 
-#: page-layout-problem.cc:737
+#: page-layout-problem.cc:736
 msgid "compressing music to fit"
 msgstr ""
 
-#: page-layout-problem.cc:1197
+#: page-layout-problem.cc:1199
 msgid "staff-affinities should only decrease"
 msgstr ""
 
@@ -2636,24 +2670,24 @@ msgstr ""
 msgid "\tprevious break: %d"
 msgstr ""
 
-#: pango-font.cc:185
+#: pango-font.cc:246
 #, c-format
 msgid "no glyph for character U+%0X in font `%s'"
 msgstr ""
 
-#: pango-font.cc:212
+#: pango-font.cc:273
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
 "Skipping glyph U+%0X, file %s"
 msgstr ""
 
-#: pango-font.cc:249
+#: pango-font.cc:323
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr ""
 
-#: pango-font.cc:298
+#: pango-font.cc:373
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
@@ -2667,7 +2701,7 @@ msgstr ""
 msgid "program option -dpreview not supported by backend `%s'"
 msgstr ""
 
-#: paper-column-engraver.cc:261
+#: paper-column-engraver.cc:263
 msgid ""
 "forced break was overridden by some other event, should you be using bar "
 "checks?"
@@ -2695,7 +2729,7 @@ msgstr ""
 msgid "trying to use \\partial after the start of a piece"
 msgstr ""
 
-#: pdf-scheme.cc:50
+#: pdf-scheme.cc:65
 #, c-format
 msgid "Conversion of string `%s' to UTF-16be failed: %s"
 msgstr ""
@@ -2713,25 +2747,6 @@ msgstr ""
 msgid "MIDI output to `%s'..."
 msgstr ""
 
-#: phrasing-slur-engraver.cc:101 slur-engraver.cc:102
-#, c-format
-msgid "direction of %s invalid: %d"
-msgstr ""
-
-#: phrasing-slur-engraver.cc:175
-msgid "unterminated phrasing slur"
-msgstr ""
-
-#: phrasing-slur-engraver.cc:210
-msgid "cannot end phrasing slur"
-msgstr ""
-
-#. We already have an old slur, so give a warning
-#. and completely ignore the new slur.
-#: phrasing-slur-engraver.cc:230
-msgid "already have phrasing slur"
-msgstr ""
-
 #: piano-pedal-engraver.cc:279
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
@@ -2748,12 +2763,12 @@ msgstr ""
 msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr ""
 
-#: program-option-scheme.cc:235
+#: program-option-scheme.cc:223
 #, c-format
 msgid "no such internal option: %s"
 msgstr ""
 
-#: property-iterator.cc:93
+#: property-iterator.cc:100
 #, c-format
 msgid "not a grob name, `%s'"
 msgstr ""
@@ -2800,38 +2815,38 @@ msgstr ""
 msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: relocate.cc:186
+#: relocate.cc:172
 #, c-format
 msgid "Relocation: is absolute: argv0=%s\n"
 msgstr ""
 
-#: relocate.cc:192
+#: relocate.cc:178
 #, c-format
-msgid "Relocation: from cwd: argv0=%s\n"
+msgid "Relocation : from cwd: argv0=%s\n"
 msgstr ""
 
-#: relocate.cc:208
+#: relocate.cc:194
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 msgstr ""
 
-#: relocate.cc:235
+#: relocate.cc:220
 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
 msgstr ""
 
-#: relocate.cc:360
+#: relocate.cc:345
 #, c-format
 msgid "Relocation file: %s"
 msgstr ""
 
-#: relocate.cc:364 source-file.cc:65
+#: relocate.cc:349 source-file.cc:65
 #, c-format
 msgid "cannot open file: `%s'"
 msgstr ""
 
-#: relocate.cc:394
+#: relocate.cc:379
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr ""
@@ -2840,15 +2855,15 @@ msgstr ""
 msgid "rhythmic head is not part of a rhythmic column"
 msgstr ""
 
-#: rest-collision.cc:146
+#: rest-collision.cc:150
 msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:157 rest-collision.cc:266
+#: rest-collision.cc:161 rest-collision.cc:270
 msgid "too many colliding rests"
 msgstr ""
 
-#: rest.cc:192
+#: rest.cc:240
 #, c-format
 msgid "rest `%s' not found"
 msgstr ""
@@ -2884,33 +2899,41 @@ msgid "errors found, ignoring music expression"
 msgstr ""
 
 #. FIXME:
-#: script-engraver.cc:113
+#: script-engraver.cc:115
 msgid "do not know how to interpret articulation:"
 msgstr ""
 
-#: script-engraver.cc:114
+#: script-engraver.cc:116
 msgid " scheme encoding: "
 msgstr ""
 
-#: skyline-pair.cc:131
+#: skyline-pair.cc:160
 msgid "direction must not be CENTER in ly:skyline-pair::skyline"
 msgstr ""
 
-#: slur-engraver.cc:176
-msgid "unterminated slur"
-msgstr ""
-
-#: slur-engraver.cc:211
-msgid "cannot end slur"
+#: slur-proto-engraver.cc:51
+#, c-format
+msgid "direction of %s invalid: %d"
 msgstr ""
 
 #. We already have an old slur, so give a warning
 #. and completely ignore the new slur.
-#: slur-engraver.cc:231
-msgid "already have slur"
+#: slur-proto-engraver.cc:166
+#, c-format
+msgid "already have %s"
+msgstr ""
+
+#: slur-proto-engraver.cc:183
+#, c-format
+msgid "%s without a cause"
 msgstr ""
 
-#: slur.cc:430
+#: slur-proto-engraver.cc:244
+#, c-format
+msgid "cannot end %s"
+msgstr ""
+
+#: slur.cc:434
 #, c-format
 msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
 msgstr ""
@@ -2920,11 +2943,11 @@ msgstr ""
 msgid "expected to read %d characters, got %d"
 msgstr ""
 
-#: staff-performer.cc:275
+#: staff-performer.cc:301
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: staff-performer.cc:276
+#: staff-performer.cc:302
 msgid "remapping modulo 16"
 msgstr ""
 
@@ -2945,12 +2968,12 @@ msgstr ""
 msgid "weird stem size, check for narrow beams"
 msgstr ""
 
-#: system.cc:200
+#: system.cc:201
 #, c-format
 msgid "Element count %d"
 msgstr ""
 
-#: system.cc:480
+#: system.cc:512
 #, c-format
 msgid "Grob count %d"
 msgstr ""
@@ -2979,11 +3002,11 @@ msgstr ""
 msgid "unterminated text spanner"
 msgstr ""
 
-#: tie-engraver.cc:117
+#: tie-engraver.cc:119
 msgid "unterminated tie"
 msgstr ""
 
-#: tie-engraver.cc:348
+#: tie-engraver.cc:353
 msgid "lonely tie"
 msgstr ""
 
@@ -3074,6 +3097,10 @@ msgstr ""
 msgid "ascending vaticana style flexa"
 msgstr ""
 
+#: vertical-align-engraver.cc:95
+msgid "Ignoring Vertical_align_engraver in VerticalAxisGroup"
+msgstr ""
+
 #. fixme: be more verbose.
 #: volta-engraver.cc:110
 msgid "cannot end volta spanner"
@@ -3091,146 +3118,201 @@ msgstr ""
 msgid "giving up"
 msgstr ""
 
-#: parser.yy:161 parser.yy:175 /home/phil/lilypond-git/lily/parser.yy:161
-#: /home/phil/lilypond-git/lily/parser.yy:175
+#: parser.yy:158 parser.yy:172
 msgid "Too much lookahead"
 msgstr ""
 
-#: parser.yy:836 parser.yy:1285 /home/phil/lilypond-git/lily/parser.yy:836
-#: /home/phil/lilypond-git/lily/parser.yy:1285
+#: parser.yy:441 parser.yy:757 parser.yy:823
+msgid "bad expression type"
+msgstr ""
+
+#: parser.yy:655 parser.yy:1164
 msgid "not a context mod"
 msgstr ""
 
-#: parser.yy:1028 /home/phil/lilypond-git/lily/parser.yy:1028
+#: parser.yy:858
+msgid "score expected"
+msgstr ""
+
+#: parser.yy:874
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:1052 /home/phil/lilypond-git/lily/parser.yy:1052
+#: parser.yy:898
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1205 /home/phil/lilypond-git/lily/parser.yy:1205
+#: parser.yy:1038 parser.yy:1060
+msgid "unexpected post-event"
+msgstr ""
+
+#: parser.yy:1068
 msgid "Ignoring non-music expression"
 msgstr ""
 
-#: parser.yy:2046 /home/phil/lilypond-git/lily/parser.yy:2046
+#: parser.yy:1080 parser.yy:2498
+msgid "music expected"
+msgstr ""
+
+#: parser.yy:1375
+msgid "not a symbol"
+msgstr ""
+
+#: parser.yy:2187 parser.yy:2301 parser.yy:2314 parser.yy:2323
+msgid "bad grob property path"
+msgstr ""
+
+#: parser.yy:2281
 msgid "only \\consists and \\remove take non-string argument."
 msgstr ""
 
-#: parser.yy:2059 /home/phil/lilypond-git/lily/parser.yy:2059
-msgid "Grob name should be alphanumeric"
+#: parser.yy:2342
+msgid "bad context property path"
+msgstr ""
+
+#: parser.yy:2443
+msgid "simple string expected"
+msgstr ""
+
+#: parser.yy:2461
+msgid "symbol expected"
 msgstr ""
 
-#: parser.yy:2263 /home/phil/lilypond-git/lily/parser.yy:2263
+#: parser.yy:2616
 msgid "not a rhythmic event"
 msgstr ""
 
-#: parser.yy:2359 parser.yy:2364 /home/phil/lilypond-git/lily/parser.yy:2359
-#: /home/phil/lilypond-git/lily/parser.yy:2364
+#: parser.yy:2690
+msgid "post-event expected"
+msgstr ""
+
+#: parser.yy:2699 parser.yy:2704
 msgid "have to be in Lyric mode for lyrics"
 msgstr ""
 
-#: parser.yy:2479 /home/phil/lilypond-git/lily/parser.yy:2479
+#: parser.yy:2772
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:2639 parser.yy:2683 /home/phil/lilypond-git/lily/parser.yy:2639
-#: /home/phil/lilypond-git/lily/parser.yy:2683
-#, c-format
-msgid "not a duration: %d"
+#: parser.yy:2880
+msgid "not an articulation"
 msgstr ""
 
-#: parser.yy:2802 /home/phil/lilypond-git/lily/parser.yy:2802
+#: parser.yy:2952 parser.yy:2995
+msgid "not a duration"
+msgstr ""
+
+#: parser.yy:3012
+msgid "bass number expected"
+msgstr ""
+
+#: parser.yy:3111
 msgid "have to be in Note mode for notes"
 msgstr ""
 
-#: parser.yy:2857 /home/phil/lilypond-git/lily/parser.yy:2857
+#: parser.yy:3171
 msgid "have to be in Chord mode for chords"
 msgstr ""
 
-#: parser.yy:3117 /home/phil/lilypond-git/lily/parser.yy:3117
+#: parser.yy:3186
+msgid "markup outside of text script or \\lyricmode"
+msgstr ""
+
+#: parser.yy:3191
+msgid "unrecognized string, not in text script or \\lyricmode"
+msgstr ""
+
+#: parser.yy:3352 parser.yy:3361
+msgid "not an unsigned integer"
+msgstr ""
+
+#: parser.yy:3429
 msgid "not a markup"
 msgstr ""
 
-#: lexer.ll:218 /home/phil/lilypond-git/lily/lexer.ll:218
+#: lexer.ll:224
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:221 /home/phil/lilypond-git/lily/lexer.ll:221
+#: lexer.ll:227
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:279 /home/phil/lilypond-git/lily/lexer.ll:279
+#: lexer.ll:279
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr ""
 
-#: lexer.ll:296 /home/phil/lilypond-git/lily/lexer.ll:296
+#: lexer.ll:296
 msgid "quoted string expected after \\version"
 msgstr ""
 
-#: lexer.ll:300 /home/phil/lilypond-git/lily/lexer.ll:300
+#: lexer.ll:300
 msgid "quoted string expected after \\sourcefilename"
 msgstr ""
 
-#: lexer.ll:304 /home/phil/lilypond-git/lily/lexer.ll:304
+#: lexer.ll:304
 msgid "integer expected after \\sourcefileline"
 msgstr ""
 
-#: lexer.ll:327 /home/phil/lilypond-git/lily/lexer.ll:327
+#: lexer.ll:331
 msgid "\\maininput not allowed outside init files"
 msgstr ""
 
-#: lexer.ll:351 /home/phil/lilypond-git/lily/lexer.ll:351
+#: lexer.ll:355
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr ""
 
-#: lexer.ll:377 /home/phil/lilypond-git/lily/lexer.ll:377
+#: lexer.ll:381
 msgid "string expected after \\include"
 msgstr ""
 
-#. backup rule
-#: lexer.ll:387 /home/phil/lilypond-git/lily/lexer.ll:387
+#: lexer.ll:391
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:558 /home/phil/lilypond-git/lily/lexer.ll:558
-msgid "Brace found at end of lyric.  Did you forget a space?"
+#: lexer.ll:743
+msgid "EOF found inside a comment"
 msgstr ""
 
-#: lexer.ll:672 /home/phil/lilypond-git/lily/lexer.ll:672
-msgid "Brace found at end of markup.  Did you forget a space?"
+#: lexer.ll:748
+msgid "EOF found inside string"
 msgstr ""
 
-#: lexer.ll:684 /home/phil/lilypond-git/lily/lexer.ll:684
-msgid "EOF found inside a comment"
+#: lexer.ll:763
+msgid "Unfinished main input"
 msgstr ""
 
-#: lexer.ll:782 /home/phil/lilypond-git/lily/lexer.ll:782
+#: lexer.ll:834
 #, c-format
 msgid "invalid character: `%s'"
 msgstr ""
 
-#: lexer.ll:903 /home/phil/lilypond-git/lily/lexer.ll:904
+#: lexer.ll:963
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr ""
 
-#: lexer.ll:1186 /home/phil/lilypond-git/lily/lexer.ll:1187
+#: lexer.ll:983
+#, c-format
+msgid "undefined character or shorthand: %s"
+msgstr ""
+
+#: lexer.ll:1275
 msgid "non-UTF-8 input"
 msgstr ""
 
-#: lexer.ll:1230 /home/phil/lilypond-git/lily/lexer.ll:1231
+#: lexer.ll:1319
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr ""
 
-#: lexer.ll:1231 /home/phil/lilypond-git/lily/lexer.ll:1232
+#: lexer.ll:1320
 msgid "consider updating the input with the convert-ly script"
 msgstr ""
 
-#: lexer.ll:1237 /home/phil/lilypond-git/lily/lexer.ll:1238
+#: lexer.ll:1326
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr ""
@@ -3245,28 +3327,58 @@ msgstr ""
 msgid "`~a' failed (~a)\n"
 msgstr ""
 
-#: backend-library.scm:90
+#: backend-library.scm:93
 #, scheme-format
 msgid "Converting to `~a'...\n"
 msgstr ""
 
 #. Do not try to guess the name of the png file,
 #. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:99
+#: backend-library.scm:102
 #, scheme-format
 msgid "Converting to ~a..."
 msgstr ""
 
-#: backend-library.scm:137
+#: backend-library.scm:140
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr ""
 
-#: backend-library.scm:187
+#: backend-library.scm:189
 #, scheme-format
 msgid "missing stencil expression `~S'"
 msgstr ""
 
+#: bar-line.scm:133
+#, scheme-format
+msgid "Bar glyph ~a not known. Ignoring."
+msgstr ""
+
+#: bar-line.scm:161
+#, scheme-format
+msgid ""
+"Annotation '~a' is allowed in the first argument of a bar line definition "
+"only."
+msgstr ""
+
+#: bar-line.scm:169
+#, scheme-format
+msgid ""
+"Replacement '~a' is allowed in the last argument of a bar line definition "
+"only."
+msgstr ""
+
+#: bar-line.scm:230
+#, scheme-format
+msgid ""
+"add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character."
+msgstr ""
+
+#: bar-line.scm:795
+#, scheme-format
+msgid "No span bar glyph defined for bar glyph '~a'; ignoring."
+msgstr ""
+
 #: chord-entry.scm:52
 #, scheme-format
 msgid "Spurious garbage following chord: ~A"
@@ -3278,64 +3390,84 @@ msgstr ""
 msgid "symbol ~S redefined"
 msgstr ""
 
-#: define-event-classes.scm:67
+#: define-event-classes.scm:73
 #, scheme-format
 msgid "unknown parent class `~a'"
 msgstr ""
 
-#: define-markup-commands.scm:887
+#: define-event-classes.scm:107
+#, scheme-format
+msgid "Cannot redefine event class `~S'"
+msgstr ""
+
+#: define-event-classes.scm:109
+#, scheme-format
+msgid "Undefined parent event class `~S'"
+msgstr ""
+
+#: define-markup-commands.scm:1083
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:2614
+#: define-markup-commands.scm:2847
 #, scheme-format
 msgid "Cannot find glyph ~a"
 msgstr ""
 
-#: define-markup-commands.scm:3040
+#: define-markup-commands.scm:3273
 #, scheme-format
 msgid "no brace found for point size ~S "
 msgstr ""
 
-#: define-markup-commands.scm:3041
+#: define-markup-commands.scm:3274
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr ""
 
-#: define-markup-commands.scm:3194
+#: define-markup-commands.scm:3526
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr ""
 
-#: define-music-types.scm:765
+#: define-markup-commands.scm:3737
+#, scheme-format
+msgid "not a valid duration string: ~a - ignoring"
+msgstr ""
+
+#: define-music-types.scm:792
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:768
+#: define-music-types.scm:795
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr ""
 
-#: define-music-types.scm:787
+#: define-music-types.scm:815
+#, scheme-format
+msgid "bad make-music argument: ~S"
+msgstr ""
+
+#: define-music-types.scm:827
 #, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr ""
 
-#: define-music-types.scm:788
+#: define-music-types.scm:828
 msgid "See define-music-types.scm for supported repeats"
 msgstr ""
 
-#: define-note-names.scm:962
+#: define-note-names.scm:972
 msgid "Select note names language."
 msgstr ""
 
-#: define-note-names.scm:968
+#: define-note-names.scm:978
 #, scheme-format
 msgid "Using `~a' note names..."
 msgstr ""
 
-#: define-note-names.scm:971
+#: define-note-names.scm:981
 #, scheme-format
 msgid "Could not find language `~a'.  Ignoring."
 msgstr ""
@@ -3375,7 +3507,7 @@ msgstr ""
 msgid "cannot find description for property ~S (~S)"
 msgstr ""
 
-#: flag-styles.scm:151
+#: flag-styles.scm:162
 #, scheme-format
 msgid "flag stroke `~a' or `~a' not found"
 msgstr ""
@@ -3405,7 +3537,7 @@ msgstr ""
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr ""
 
-#: framework-ps.scm:686
+#: framework-ps.scm:687
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
@@ -3441,84 +3573,88 @@ msgstr ""
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: lily-library.scm:305
+#: lily-library.scm:333
 msgid "Music unsuitable for context-mod"
 msgstr ""
 
-#: lily-library.scm:361
+#: lily-library.scm:388
 #, scheme-format
 msgid "Cannot find context-def \\~a"
 msgstr ""
 
-#: lily-library.scm:377
+#: lily-library.scm:404
 msgid "Music unsuitable for output-def"
 msgstr ""
 
-#: lily-library.scm:904
+#: lily-library.scm:884
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
 "which produces the closest match to @var{target-val} if\n"
 "applied to function @var{getter}."
 msgstr ""
 
-#: lily-library.scm:978
+#: lily-library.scm:955
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr ""
 
-#: lily-library.scm:1003
+#: lily-library.scm:980
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:1009
-msgid "old relative compatibility not used"
+#: lily.scm:75
+msgid "call-after-session used after session start"
 msgstr ""
 
-#: lily.scm:234
+#: lily.scm:93
+msgid "define-session used after session start"
+msgstr ""
+
+#: lily.scm:393
 msgid "Using (ice-9 curried-definitions) module\n"
 msgstr ""
 
-#: lily.scm:237
+#: lily.scm:396
 msgid "Guile 1.8\n"
 msgstr ""
 
-#: lily.scm:297
+#: lily.scm:455
 #, scheme-format
 msgid "cannot find: ~A"
 msgstr ""
 
-#: lily.scm:708
+#: lily.scm:878
 msgid "Success: compilation successfully completed"
 msgstr ""
 
-#: lily.scm:709
+#: lily.scm:879
 msgid "Compilation completed with warnings or errors"
 msgstr ""
 
-#: lily.scm:771
+#: lily.scm:940
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr ""
 
-#: lily.scm:774
+#: lily.scm:943
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
 "~a"
 msgstr ""
 
-#: lily.scm:796 lily.scm:883
+#: lily.scm:965 lily.scm:1054
 #, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:874
+#: lily.scm:1045
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr ""
 
-#: lily.scm:893 ps-to-png.scm:66
+#: lily.scm:1064 ps-to-png.scm:66
 #, scheme-format
 msgid "Invoking `~a'...\n"
 msgstr ""
@@ -3533,7 +3669,7 @@ msgstr ""
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: ly-syntax-constructors.scm:188
+#: ly-syntax-constructors.scm:199
 #, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
@@ -3586,63 +3722,63 @@ msgstr ""
 msgid "invalid tremolo repeat count: ~a"
 msgstr ""
 
-#: music-functions.scm:689
+#: music-functions.scm:459
+#, scheme-format
+msgid "bad grob property path ~a"
+msgstr ""
+
+#: music-functions.scm:753
 msgid "Bad chord repetition"
 msgstr ""
 
-#: music-functions.scm:724
+#: music-functions.scm:788
 #, scheme-format
 msgid "music expected: ~S"
 msgstr ""
 
-#: music-functions.scm:1042
+#: music-functions.scm:1144
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr ""
 
-#: music-functions.scm:1180
+#: music-functions.scm:1282
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr ""
 
-#: music-functions.scm:1240
+#: music-functions.scm:1342
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr ""
 
-#: music-functions.scm:1241
+#: music-functions.scm:1343
 msgid "Defaulting to 'any-octave."
 msgstr ""
 
-#: music-functions.scm:1576
+#: music-functions.scm:1688
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr ""
 
-#: output-ps.scm:277 output-svg.scm:524
+#: output-ps.scm:278 output-svg.scm:539
 #, scheme-format
 msgid "unknown line-cap-style: ~S"
 msgstr ""
 
-#: output-ps.scm:282 output-svg.scm:530
+#: output-ps.scm:283 output-svg.scm:545
 #, scheme-format
 msgid "unknown line-join-style: ~S"
 msgstr ""
 
-#: output-svg.scm:47
-#, scheme-format
-msgid "undefined: ~S"
-msgstr ""
-
-#: output-svg.scm:157
+#: output-svg.scm:148
 #, scheme-format
 msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
-#: output-svg.scm:237
+#: output-svg.scm:228
 msgid "Glyph must have a unicode value"
 msgstr ""
 
-#: output-svg.scm:289 output-svg.scm:299
+#: output-svg.scm:280 output-svg.scm:290
 #, scheme-format
 msgid "cannot find SVG font ~S"
 msgstr ""
@@ -3651,12 +3787,12 @@ msgstr ""
 msgid "set-global-staff-size: not in toplevel scope"
 msgstr ""
 
-#: paper.scm:321
+#: paper.scm:320
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:332
+#: paper.scm:328
 #, scheme-format
 msgid "Unknown paper size: ~a"
 msgstr ""
@@ -3667,17 +3803,17 @@ msgstr ""
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
-#: parser-clef.scm:143 parser-clef.scm:183
+#: parser-clef.scm:164
 #, scheme-format
 msgid "unknown clef type `~a'"
 msgstr ""
 
-#: parser-clef.scm:144 parser-clef.scm:184
+#: parser-clef.scm:165
 #, scheme-format
 msgid "supported clefs: ~a"
 msgstr ""
 
-#: parser-ly-from-scheme.scm:73
+#: parser-ly-from-scheme.scm:74
 msgid "error in #{ ... #}"
 msgstr ""
 
@@ -3691,45 +3827,45 @@ msgstr ""
 msgid "~a exited with status: ~S"
 msgstr ""
 
-#: to-xml.scm:191
+#: to-xml.scm:190
 #, scheme-format
 msgid "assertion failed: ~S"
 msgstr ""
 
-#: translation-functions.scm:359
+#: translation-functions.scm:368
 #, scheme-format
 msgid "Negative fret for pitch ~a on string ~a"
 msgstr ""
 
-#: translation-functions.scm:362
+#: translation-functions.scm:371
 #, scheme-format
 msgid "Missing fret for pitch ~a on string ~a"
 msgstr ""
 
-#: translation-functions.scm:413
+#: translation-functions.scm:414
 #, scheme-format
 msgid "No open string for pitch ~a"
 msgstr ""
 
-#: translation-functions.scm:428 translation-functions.scm:440
+#: translation-functions.scm:429 translation-functions.scm:441
 #, scheme-format
 msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
 msgstr ""
 
-#: translation-functions.scm:431
+#: translation-functions.scm:432
 msgid "Ignoring string request and recalculating."
 msgstr ""
 
-#: translation-functions.scm:443
+#: translation-functions.scm:444
 msgid "Ignoring note in tablature."
 msgstr ""
 
-#: translation-functions.scm:466
+#: translation-functions.scm:469
 #, scheme-format
 msgid "No string for pitch ~a (given frets ~a)"
 msgstr ""
 
-#: translation-functions.scm:571
+#: translation-functions.scm:574
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
index c80bfaa63bd42d3d1b6090070ba237d77ec434ad..0f1f35fa7c48aa1fe635899df8c2b83083723f2c 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
-# nl.po -- GNU LilyPond's dutch language file
-# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Jan Nieuwenhuizen <janneke@gnu.org>, Han-Wen Nienhuys <hanwen@xs4all.nl>.
+# Dutch translations for GNU Lilypond.
+# Copyright (C) 2013 Free Software Foundation, Inc.
 # This file is distributed under the same license as the lilypond package.
-# Jan Nieuwenhuizen <janneke@gnu.org>, 1998.
-# Han-Wen Nienhuys <hanwen@cs.uu.nl>, 1998.
 #
-# Donnot change the format of the first three lines,
-# the TP robot needs them to be like this.
-# Of course, Han-Wen <hanwen@xs4all.nl> also is FIRST AUTHOR.
+# "Occasionally it troubles me just how far one strays
+# from the normal measures of civility."
 #
+# Han-Wen Nienhuys <hanwen@cs.uu.nl>, 1998.
+# Jan Nieuwenhuizen <janneke@gnu.org>, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007.
+# Benno Schulenberg <benno@vertaalt.nl>, 2013.
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.13.10\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-03-01 14:40+0100\n"
-"PO-Revision-Date: 2011-03-01 22:52+0100\n"
-"Last-Translator: Jan Nieuwenhuizen <janneke@gnu.org>\n"
+"Project-Id-Version: lilypond 2.17.96\n"
+"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
+"POT-Creation-Date: 2013-11-24 12:14+0000\n"
+"PO-Revision-Date: 2013-11-27 22:28+0100\n"
+"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "Language: nl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Date: 2001-05-09 23:29+0200\n"
-"From:  <janneke@gnu.org>\n"
-"Xgettext-Options: --c++ --default-domain=lilypond --join --output-dir=../po "
-"--add-comments --keyword=_\n"
-"Files: bow.cc int.cc\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: book_base.py:24
+#: book_base.py:26
 #, python-format
 msgid "file not found: %s"
 msgstr "bestand niet gevonden: %s"
 
-#: book_base.py:161
+#: book_base.py:164
 msgid "Output function not implemented"
-msgstr ""
+msgstr "Uitvoerfunctie is niet geïmplementeerd."
 
-#: book_latex.py:156
+#: book_latex.py:174
 msgid "cannot find \\begin{document} in LaTeX document"
-msgstr "kan \\begin{document} niet vinden in LaTeX dokument"
+msgstr "kan \\begin{document} niet vinden in LaTeX-document"
+
+#: book_latex.py:190
+#, python-format
+msgid "Running `%s' on file `%s' to detect default page settings.\n"
+msgstr ""
+
+#: book_latex.py:212 book_texinfo.py:228
+msgid "Unable to auto-detect default settings:\n"
+msgstr ""
 
-#: book_snippets.py:519
+#: book_latex.py:224 book_texinfo.py:240
+#, python-format
+msgid ""
+"Unable to auto-detect default settings:\n"
+"%s"
+msgstr ""
+
+#: book_latex.py:247
+msgid "cannot detect textwidth from LaTeX"
+msgstr ""
+
+#: book_snippets.py:406
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "verouderde ly-optie gebruikt: %s=%s"
 
-#: book_snippets.py:521
+#: book_snippets.py:408
 #, python-format
 msgid "compatibility mode translation: %s=%s"
-msgstr "compatibiliteitsmodus vertaling: %s=%s"
+msgstr "compatibiliteitsmodus-vertaling: %s=%s"
 
-#: book_snippets.py:524
+#: book_snippets.py:411
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "verouderde ly-optie gebruikt: %s"
 
-#: book_snippets.py:526
+#: book_snippets.py:413
 #, python-format
 msgid "compatibility mode translation: %s"
-msgstr "compatibiliteitsmodus vertaling: %s"
+msgstr "compatibiliteitsmodus-vertaling: %s"
 
-#: book_snippets.py:544
+#: book_snippets.py:530
 #, python-format
 msgid "ignoring unknown ly option: %s"
-msgstr "negeren van onbekende ly optie: %s"
+msgstr "negeren van onbekende ly-optie: %s"
+
+#: book_snippets.py:621
+#, python-format
+msgid "Missing files: %s"
+msgstr "Ontbrekende bestanden: %s"
+
+#: book_snippets.py:651
+#, python-format
+msgid "Could not overwrite file %s"
+msgstr "Kan bestand %s  niet overschrijven"
 
-#: book_snippets.py:736
+#: book_snippets.py:738
 #, python-format
-msgid "Opening filter `%s'\n"
-msgstr "Open filter `%s'\n"
+msgid "Running through filter `%s'"
+msgstr ""
 
-#: book_snippets.py:756
+#: book_snippets.py:759
 #, python-format
 msgid "`%s' failed (%d)"
-msgstr "`%s' gefaald (%d)"
+msgstr "'%s' is mislukt (%d)"
 
-#: book_snippets.py:757
+#: book_snippets.py:760
 msgid "The error log is as follows:"
 msgstr "De foutlog is als volgt:"
 
-#: convertrules.py:12
+# lisp-format
+#: book_snippets.py:880
+#, python-format
+msgid "Converting MusicXML file `%s'...\n"
+msgstr "Converteren van MusicXML-bestand '%s'...\n"
+
+#: book_snippets.py:907
+#, python-format
+msgid ""
+"%s: duplicate filename but different contents of original file,\n"
+"printing diff against existing file."
+msgstr ""
+
+#: book_snippets.py:920
+#, python-format
+msgid ""
+"%s: duplicate filename but different contents of converted lilypond file,\n"
+"printing diff against existing file."
+msgstr ""
+
+#. Work around a texi2pdf bug: if LANG=C is not given, a broken regexp is
+#. used to detect relative/absolute paths, so the absolute path is not
+#. detected as such and this command fails:
+#: book_texinfo.py:206
 #, python-format
-msgid "Not smart enough to convert %s"
-msgstr "Niet slim genoeg om %s te converteren"
+msgid "Running texi2pdf on file %s to detect default page settings.\n"
+msgstr ""
 
 #: convertrules.py:13
+#, python-format
+msgid "Not smart enough to convert %s."
+msgstr "Niet slim genoeg om %s te converteren."
+
+#: convertrules.py:14
 msgid "Please refer to the manual for details, and update manually."
 msgstr "Zie de handleiding voor de details, en actualiseer handmatig."
 
-#: convertrules.py:14
+#: convertrules.py:15
 #, python-format
 msgid "%s has been replaced by %s"
 msgstr "%s is vervangen door %s"
 
-#: convertrules.py:24 lilylib.py:78 musicexp.py:17 convert-ly.py:64 warn.cc:66
-#: input.cc:109
+#: convertrules.py:25 lilylib.py:136 warn.cc:223
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "waarschuwing: %s"
 
-#: convertrules.py:49 convertrules.py:99
+#: convertrules.py:50 convertrules.py:95
 msgid "\\header { key = concat + with + operator }"
 msgstr ""
 
-#: convertrules.py:58
+#: convertrules.py:57
 #, python-format
 msgid "deprecated %s"
-msgstr "verouderd %s"
+msgstr "verouderde %s"
 
-#: convertrules.py:70
+#: convertrules.py:66
 msgid "deprecated \\textstyle, new \\key syntax"
 msgstr ""
 
-#: convertrules.py:86 convertrules.py:1905 convertrules.py:2084
-#: convertrules.py:2236 convertrules.py:2566 convertrules.py:2862
+#: convertrules.py:82 convertrules.py:1856 convertrules.py:2032
+#: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801
+#: convertrules.py:3151 convertrules.py:3385
 msgid "bump version for release"
 msgstr ""
 
-#: convertrules.py:103
+#: convertrules.py:98
 msgid "new \\header format"
 msgstr ""
 
-#: convertrules.py:132
+#: convertrules.py:125
 msgid "\\translator syntax"
-msgstr ""
+msgstr "syntax van \\translator"
 
-#: convertrules.py:184
+#: convertrules.py:176
 msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
 msgstr ""
 
-#: convertrules.py:216 convertrules.py:699 convertrules.py:1383
-#: convertrules.py:2378
+#: convertrules.py:206 convertrules.py:679 convertrules.py:1351
+#: convertrules.py:2318
 #, python-format
 msgid "deprecate %s"
 msgstr ""
 
-#: convertrules.py:290
+#: convertrules.py:280
 #, python-format
 msgid "deprecate %s "
 msgstr ""
 
-#: convertrules.py:319
+#: convertrules.py:306
 msgid "new \\notenames format"
 msgstr ""
 
-#: convertrules.py:337
+#: convertrules.py:322
 msgid "new tremolo format"
 msgstr ""
 
-#: convertrules.py:342
+#: convertrules.py:326
 msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver"
 msgstr ""
 
-#: convertrules.py:395
-msgid "change property definiton case (eg. onevoice -> oneVoice)"
+#: convertrules.py:377
+msgid "change property definition case (eg. onevoice -> oneVoice)"
 msgstr ""
 
-#: convertrules.py:457
+#: convertrules.py:438
 msgid "new \\textscript markup text"
 msgstr ""
 
-#: convertrules.py:530
+#: convertrules.py:510
 #, python-format
 msgid "identifier names: %s"
-msgstr "identifier namen: `%s'"
+msgstr "identifier-namen: %s"
 
-#: convertrules.py:569
+#: convertrules.py:549
 msgid "point-and-click argument changed to procedure."
 msgstr ""
 
-#: convertrules.py:611
+#: convertrules.py:591
 msgid "semicolons removed"
-msgstr ""
+msgstr "puntkomma's verwijderd"
 
 #. 40 ?
-#: convertrules.py:654
+#: convertrules.py:634
 #, python-format
 msgid "%s property names"
 msgstr ""
 
-#: convertrules.py:724
+#: convertrules.py:704
 msgid "automaticMelismata turned on by default"
 msgstr ""
 
-#: convertrules.py:963 convertrules.py:1682 convertrules.py:1942
-#: convertrules.py:2189
+#: convertrules.py:709
+msgid "automaticMelismata is turned on by default since 1.5.67."
+msgstr ""
+
+#: convertrules.py:943 convertrules.py:1636 convertrules.py:1890
+#: convertrules.py:2135
 #, python-format
 msgid "remove %s"
 msgstr "verwijder %s"
 
-#: convertrules.py:1001 convertrules.py:1005
+#: convertrules.py:978 convertrules.py:981
 msgid "cluster syntax"
-msgstr ""
+msgstr "cluster-syntax"
 
-#: convertrules.py:1014
+#: convertrules.py:988
 msgid "new Pedal style syntax"
 msgstr ""
 
-#: convertrules.py:1273
+#: convertrules.py:1247
 msgid ""
 "New relative mode,\n"
 "Postfix articulations, new text markup syntax, new chord syntax."
 msgstr ""
 
-#: convertrules.py:1286
+#: convertrules.py:1260
 msgid "Remove - before articulation"
 msgstr ""
 
-#: convertrules.py:1324
+#: convertrules.py:1295
 #, python-format
 msgid "%s misspelling"
 msgstr ""
 
-#: convertrules.py:1346
+#: convertrules.py:1314
 msgid "Swap < > and << >>"
 msgstr ""
 
-#: convertrules.py:1349
+#: convertrules.py:1317
 msgid "attempting automatic \\figures conversion.  Check results!"
 msgstr ""
 
-#: convertrules.py:1400
+#: convertrules.py:1363
 msgid "Use Scheme code to construct arbitrary note events."
 msgstr ""
 
-#: convertrules.py:1407
+#: convertrules.py:1370
 msgid ""
 "use symbolic constants for alterations,\n"
 "remove \\outputproperty, move ly:verbose into ly:get-option"
 msgstr ""
 
-#: convertrules.py:1432
+#: convertrules.py:1395
 #, python-format
 msgid ""
 "\\outputproperty found,\n"
 "Please hand-edit, using\n"
 "\n"
-"  \\applyoutput #(outputproperty-compatibility %s '%s <GROB PROPERTY "
-"VALUE>)\n"
+"  \\applyoutput #(outputproperty-compatibility %s '%s <GROB PROPERTY VALUE>)\n"
 "\n"
 "as a substitution text."
 msgstr ""
 
-#: convertrules.py:1446
+#: convertrules.py:1407
 msgid ""
 "The alteration field of Scheme pitches was multiplied by 2\n"
-"to support quarter tone accidentals.  You must update the following "
-"constructs manually:\n"
+"to support quarter tone accidentals.  You must update the following constructs manually:\n"
 "\n"
 "* calls of ly:make-pitch and ly:pitch-alteration\n"
 "* keySignature settings made with \\property\n"
 msgstr ""
 
-#: convertrules.py:1493
+#: convertrules.py:1450
 msgid "removal of automaticMelismata; use melismaBusyProperties instead."
 msgstr ""
 
-#: convertrules.py:1600
+#: convertrules.py:1557
 msgid "\\partcombine syntax change to \\newpartcombine"
 msgstr ""
 
-#: convertrules.py:1628
+#: convertrules.py:1582
 msgid ""
 "Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
 "Harmonic notes. Thread context removed. Lyrics context removed."
 msgstr ""
 
-#: convertrules.py:1632
+#: convertrules.py:1586
 msgid "Drums found. Enclose drum notes in \\drummode"
 msgstr ""
 
-#: convertrules.py:1643 convertrules.py:1650 convertrules.py:1661
+#: convertrules.py:1597 convertrules.py:1604 convertrules.py:1615
 #, python-format
 msgid ""
 "\n"
 "%s found. Check file manually!\n"
 msgstr ""
 
-#: convertrules.py:1643
+#: convertrules.py:1597
 msgid "Drum notation"
 msgstr ""
 
-#: convertrules.py:1702
+#: convertrules.py:1656
 msgid "new syntax for property settings:"
 msgstr ""
 
-#: convertrules.py:1728
+#: convertrules.py:1682
 msgid "Property setting syntax in \\translator{ }"
 msgstr ""
 
-#: convertrules.py:1767
+#: convertrules.py:1721
 msgid "Scheme grob function renaming"
 msgstr ""
 
-#: convertrules.py:1780
+#: convertrules.py:1732 convertrules.py:2139 convertrules.py:2143
+#: convertrules.py:2709
 #, python-format
-msgid "use %s"
-msgstr "gebruik %s"
+msgid "Use %s\n"
+msgstr "Gebruik %s\n"
 
-#: convertrules.py:1797
+#: convertrules.py:1748
 msgid "More Scheme function renaming"
 msgstr ""
 
-#: convertrules.py:1924
+#: convertrules.py:1872
 msgid ""
 "Page layout has been changed, using paper size and margins.\n"
 "textheight is no longer used.\n"
 msgstr ""
 
-#: convertrules.py:2010
+#: convertrules.py:1958
 msgid ""
 "\\foo -> \\foomode (for chords, notes, etc.)\n"
 "fold \\new FooContext \\foomode into \\foo."
 msgstr ""
 
-#: convertrules.py:2048
+#: convertrules.py:1996
 msgid ""
 "staff size should be changed at top-level\n"
 "with\n"
@@ -322,202 +380,206 @@ msgid ""
 "\n"
 msgstr ""
 
-#: convertrules.py:2068
+#: convertrules.py:2016
 msgid "regularize other identifiers"
 msgstr ""
 
-#: convertrules.py:2136
+#: convertrules.py:2084
 msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
 msgstr ""
 
-#: convertrules.py:2149
+#: convertrules.py:2095
 msgid "LilyPond source must be UTF-8"
-msgstr "LilyPond bron moet UTF-8 zijn"
+msgstr "LilyPond-brontekst moet UTF-8 zijn"
 
-#: convertrules.py:2152
+#: convertrules.py:2098
 msgid "Try the texstrings backend"
-msgstr "Probeer het textstring backend"
+msgstr "Probeer de textstrings-backend."
 
-#: convertrules.py:2155
+#: convertrules.py:2101
 #, python-format
 msgid "Do something like: %s"
 msgstr "Doe iets als: %s"
 
-#: convertrules.py:2158
+#: convertrules.py:2104
 msgid "Or save as UTF-8 in your editor"
-msgstr "Of bewaar als UTF-8 in je editor"
+msgstr "Of sla het op als UTF-8 in uw editor."
 
-#: convertrules.py:2212
+#: convertrules.py:2154
 msgid "warn about auto beam settings"
 msgstr ""
 
-#: convertrules.py:2217
+#: convertrules.py:2158
 msgid "auto beam settings"
 msgstr ""
 
-#: convertrules.py:2219
+#: convertrules.py:2159
 msgid ""
 "\n"
 "Auto beam settings must now specify each interesting moment in a measure\n"
 "explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n"
 msgstr ""
 
-#: convertrules.py:2333
+#: convertrules.py:2272
 msgid "verticalAlignmentChildCallback has been deprecated"
 msgstr ""
 
-#: convertrules.py:2337
+#: convertrules.py:2277
 msgid "Remove callbacks property, deprecate XY-extent-callback."
 msgstr ""
 
-#: convertrules.py:2358
+#: convertrules.py:2298
 msgid "Use grob closures iso. XY-offset-callbacks."
 msgstr ""
 
-#: convertrules.py:2420
+#: convertrules.py:2360
 msgid "foobar -> foo-bar for \\paper, \\layout"
 msgstr ""
 
-#: convertrules.py:2530
+#: convertrules.py:2470
 msgid "deprecate \\tempo in \\midi"
 msgstr ""
 
-#: convertrules.py:2583
+#: convertrules.py:2523
 msgid "deprecate cautionary-style. Use AccidentalCautionary properties"
 msgstr ""
 
-#: convertrules.py:2596
+#: convertrules.py:2536
 msgid "Rename accidental glyphs, use glyph-name-alist."
 msgstr ""
 
-#: convertrules.py:2651
-msgid "edge-text settings for TextSpanner."
+#: convertrules.py:2591
+msgid "edge-text settings for TextSpanner"
 msgstr ""
 
-#: convertrules.py:2652
+#: convertrules.py:2592
 #, python-format
 msgid ""
 "Use\n"
 "\n"
 "%s"
 msgstr ""
-"Gebruik:\n"
-"\n"
-"%s"
 
-#: convertrules.py:2685
+# XXX this and next two should be one
+#: convertrules.py:2625
 msgid "Use the `alignment-offsets' sub-property of\n"
 msgstr ""
 
-#: convertrules.py:2686
+#: convertrules.py:2626
 msgid "NonMusicalPaperColumn #'line-break-system-details\n"
 msgstr ""
 
-#: convertrules.py:2687
+#: convertrules.py:2627
 msgid "to set fixed distances between staves.\n"
 msgstr ""
 
-#: convertrules.py:2699
+#: convertrules.py:2639
 msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
 msgstr ""
 
-#: convertrules.py:2705
-msgid "all settings related to dashed lines.\n"
+#: convertrules.py:2645
+msgid "all settings related to dashed lines"
 msgstr ""
 
-#: convertrules.py:2706
+# XXX this and next should be one
+#: convertrules.py:2646
 msgid "Use \\override ... #'style = #'line for solid lines and\n"
 msgstr ""
 
-#: convertrules.py:2707
+#: convertrules.py:2647
 msgid "\t\\override ... #'style = #'dashed-line for dashed lines."
 msgstr ""
 
-#: convertrules.py:2743
+#: convertrules.py:2683
 msgid ""
 "metronomeMarkFormatter uses text markup as second argument,\n"
 "fret diagram properties moved to fret-diagram-details."
 msgstr ""
 
-#: convertrules.py:2748
+#: convertrules.py:2689
 msgid "metronomeMarkFormatter got an additional text argument.\n"
 msgstr ""
 
-#: convertrules.py:2749
+#: convertrules.py:2690
 #, python-format
 msgid ""
 "The function assigned to Score.metronomeMarkFunction now uses the signature\n"
 "%s"
 msgstr ""
 
-#: convertrules.py:2812
-msgid "\\put-adjacent argument order.\n"
+#: convertrules.py:2708
+#, python-format
+msgid "%s in fret-diagram properties"
+msgstr ""
+
+#: convertrules.py:2752
+msgid "\\put-adjacent argument order"
 msgstr ""
 
-#: convertrules.py:2813
+#: convertrules.py:2753
 msgid "Axis and direction now come before markups:\n"
 msgstr ""
 
-#: convertrules.py:2814
+#: convertrules.py:2754
 msgid "\\put-adjacent axis dir markup markup."
 msgstr ""
 
-#: convertrules.py:2845
-msgid "re-definition of InnerStaffGroup.\n"
+#: convertrules.py:2785
+msgid "re-definition of InnerStaffGroup"
 msgstr ""
 
-#: convertrules.py:2851
-msgid "re-definition of InnerChoirStaff.\n"
+#: convertrules.py:2790
+msgid "re-definition of InnerChoirStaff"
 msgstr ""
 
-#: convertrules.py:2861
+#: convertrules.py:2800
 msgid "Syntax changes for \\addChordShape and \\chord-shape"
 msgstr ""
 
-#: convertrules.py:2866
+#: convertrules.py:2805
 msgid "stringTuning must be added to addChordShape call.\n"
 msgstr ""
 
-#: convertrules.py:2872
+#: convertrules.py:2810
 msgid "stringTuning must be added to chord-shape call.\n"
 msgstr ""
 
-#: convertrules.py:2879
+#: convertrules.py:2816
 msgid "Remove oldaddlyrics"
 msgstr ""
 
-#: convertrules.py:2883
+#: convertrules.py:2820
 msgid ""
 "oldaddlyrics is no longer supported. \n"
 "         Use addlyrics or lyrsicsto instead.\n"
 msgstr ""
 
-#: convertrules.py:2889
+#: convertrules.py:2826
 msgid ""
 "keySignature property not reversed any more\n"
 "MIDI 47: orchestral strings -> orchestral harp"
 msgstr ""
 
-#: convertrules.py:2894
+#: convertrules.py:2831
 msgid "The alist for Staff.keySignature is no longer in reversed order.\n"
 msgstr ""
 
-#: convertrules.py:2900
+#: convertrules.py:2837
 msgid ""
 "\\bar \".\" now produces a thick barline\n"
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
 "Dash parameters for slurs and ties are now in dash-definition"
 msgstr ""
 
-#: convertrules.py:2906
+#: convertrules.py:2843
 msgid "\\bar \".\" now produces a thick barline.\n"
 msgstr ""
 
-#: convertrules.py:2912
+#: convertrules.py:2849
 msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
 msgstr ""
 
-#: convertrules.py:2917
+#: convertrules.py:2854
 msgid ""
 "Autobeaming rules have changed.  override-auto-beam-setting and\n"
 "revert-auto-beam-setting have been eliminated.\n"
@@ -532,32 +594,25 @@ msgid ""
 "template replaced by new `Dynamics' context."
 msgstr ""
 
-#: convertrules.py:2931
-msgid ""
-"override-auto-beam-setting.\n"
-"   Autobeam settings are now overriden with \\overrideBeamSettings.\n"
+#: convertrules.py:2868
+msgid "    Autobeam settings are now overriden with \\overrideBeamSettings.\n"
 msgstr ""
 
-#: convertrules.py:2936
-msgid ""
-"override-auto-beam-setting.\n"
-"   Autobeam settings are now reverted with \\revertBeamSettings.\n"
+#: convertrules.py:2873
+msgid "    Autobeam settings are now reverted with \\revertBeamSettings.\n"
 msgstr ""
 
-#: convertrules.py:2941
+#: convertrules.py:2879
 msgid ""
-"beatGrouping. \n"
-"   beatGrouping with a specified context must now be accomplished with\n"
+"    beatGrouping with a specified context must now be accomplished with\n"
 "   \\overrideBeamSettings.\n"
 msgstr ""
 
-#: convertrules.py:2947
-msgid ""
-"alignment-offsets has been changed to alignment-distances: you must now "
-"specify the distances between staves rather than the offset of staves.\n"
+#: convertrules.py:2885
+msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n"
 msgstr ""
 
-#: convertrules.py:2958
+#: convertrules.py:2896
 msgid ""
 "Remove obsolete engravers/translators: Note_swallow_translator,\n"
 "Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
@@ -565,134 +620,155 @@ msgid ""
 "New vertical spacing variables."
 msgstr ""
 
-#: convertrules.py:2989
-msgid ""
-"minimum-Y-extent; vertical spacing no longer depends on the Y-extent of a "
-"VerticalAxisGroup.\n"
+#: convertrules.py:2927
+msgid "Vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n"
 msgstr ""
 
-#: convertrules.py:2995
+#: convertrules.py:2933
 msgid "Unify fetaNumber and fetaDynamic encodings"
 msgstr ""
 
-#: convertrules.py:3000
+#: convertrules.py:2938
 msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
 msgstr ""
 
-#: convertrules.py:3011
+#: convertrules.py:2949
 msgid "\\cresc etc. are now postfix operators"
 msgstr ""
 
-#: convertrules.py:3017
+#: convertrules.py:2961
 msgid ""
-"Eliminate beamSettings, beatLength, \\setBeatGrouping, "
-"\\overrideBeamSettings and \\revertBeamSettings.\n"
+"Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n"
 "\"accordion.accEtcbase\" -> \"accordion.etcbass\""
 msgstr ""
 
-#: convertrules.py:3035
-msgid ""
-"\\overrideBeamSettings.  Use \\set beamExceptions or "
-"\\overrideTimeSignatureSettings.\n"
-msgstr ""
-
-#: convertrules.py:3039
-msgid ""
-"\\revertBeamSettings. Use \\set beamExceptions or "
-"\\revertTimeSignatureSettings.\n"
+#: convertrules.py:2979
+msgid "Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"
 msgstr ""
 
-#: convertrules.py:3043
-msgid "beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n"
+#: convertrules.py:2983
+msgid "Use \\set beamExceptions or \\revertTimeSignatureSettings.\n"
 msgstr ""
 
-#: convertrules.py:3047
-msgid "beatLength. Use baseMoment and beatStructure.\n"
+#: convertrules.py:2987
+msgid "Use baseMoment, beatStructure, and beamExceptions.\n"
 msgstr ""
 
-#: convertrules.py:3051
-msgid "setbeatGrouping. Use baseMoment and beatStructure.\n"
+#: convertrules.py:2991 convertrules.py:2995
+msgid "Use baseMoment and beatStructure.\n"
 msgstr ""
 
-#: convertrules.py:3056
+#: convertrules.py:3000
 msgid ""
-"Woodwind diagrams: Move size, thickness, and graphic from argument list to "
-"properties.\n"
-"Deprecate negative dash-period for hidden lines: use #'style = #'none "
-"instead."
+"Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n"
+"Deprecate negative dash-period for hidden lines: use #'style = #'none instead."
 msgstr ""
 
-#: convertrules.py:3061
-msgid ""
-"woodwind-diagrams.  Move size, thickness, and graphic to properties.  "
-"Argument should be just the key list.\n"
+#: convertrules.py:3005
+msgid "Move size, thickness, and graphic to properties.  Argument should be just the key list.\n"
 msgstr ""
 
-#: convertrules.py:3069
+#: convertrules.py:3013
 msgid ""
 "Rename vertical spacing variables.\n"
 "Add fretboard-table argument to savePredefinedFretboard."
 msgstr ""
 
-#: convertrules.py:3087
+#: convertrules.py:3031
 msgid "Rename vertical spacing grob properties."
 msgstr ""
 
-#: convertrules.py:3103
+#: convertrules.py:3047
 msgid "Remove \\paper variables head-separation and foot-separation."
 msgstr ""
 
-#: convertrules.py:3108
+#: convertrules.py:3051
 msgid "Adjust settings for top-system-spacing instead.\n"
 msgstr ""
 
-#: convertrules.py:3113
+#: convertrules.py:3055
 msgid "Adjust settings for last-bottom-spacing instead.\n"
 msgstr ""
 
-#: convertrules.py:3119
+#: convertrules.py:3061
 msgid ""
 "Rename space to basic-distance in various spacing alists.\n"
 "Remove HarmonicParenthesesItem grob."
 msgstr ""
 
-#: convertrules.py:3127
+#: convertrules.py:3068
 msgid "HarmonicParenthesesItem has been eliminated.\n"
 msgstr ""
 
-#: convertrules.py:3128
+#: convertrules.py:3069
 msgid "Harmonic parentheses are part of the TabNoteHead grob.\n"
 msgstr ""
 
-#: convertrules.py:3133
-msgid ""
-"Remove context from overrideTimeSignatureSettings and "
-"revertTimeSignatureSettings.\n"
+#: convertrules.py:3074
+msgid "Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.\n"
 msgstr ""
 
-#: convertrules.py:3140
+#: convertrules.py:3081
 msgid ""
 "Change stringTunings from a list of semitones to a list of pitches.\n"
 "Change tenor and baritone ukulele names in string tunings.\n"
 "Generate messages for manual conversion of vertical spacing if required."
 msgstr ""
 
-#: convertrules.py:3180
-msgid "Vertical spacing changes might affect user-defined contexts.  "
+#: convertrules.py:3124
+msgid "Vertical spacing changes might affect user-defined contexts."
 msgstr ""
 
-#: convertrules.py:3185
+#: convertrules.py:3130
 msgid "Replace bar-size with bar-extent."
 msgstr ""
 
-#: convertrules.py:3197
+#: convertrules.py:3142
 msgid "Woodwind diagrams: Changes to the clarinet diagram."
 msgstr ""
 
-#: convertrules.py:3201
-msgid ""
-"woodwind-diagrams.  Clarinet fingering changed to reflect actual anatomy of "
-"instrument.\n"
+#: convertrules.py:3146
+msgid "Clarinet fingering changed to reflect actual anatomy of instrument.\n"
+msgstr ""
+
+#: convertrules.py:3156
+msgid "Handling of non-automatic footnotes."
+msgstr ""
+
+#: convertrules.py:3160
+msgid "If you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.\n"
+msgstr ""
+
+#: convertrules.py:3165
+msgid "Change in internal property for MultiMeasureRest"
+msgstr ""
+
+#: convertrules.py:3169
+msgid "This internal property has been replaced by round-up-to-longer-rest, round-up-exceptions and usable-duration-logs.\n"
+msgstr ""
+
+#: convertrules.py:3174
+msgid "Creation of a Flag grob and moving of certain Stem properties to this grob"
+msgstr ""
+
+#: convertrules.py:3210
+msgid "consistent-broken-slope is now handled through the positions callback.\n"
+msgstr ""
+
+#: convertrules.py:3211
+msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n"
+msgstr ""
+
+#: convertrules.py:3369
+msgid "beamExceptions controls whole-measure beaming."
+msgstr ""
+
+#: convertrules.py:3606
+msgid "Flag.transparent and Flag.color inherit from Stem"
+msgstr ""
+
+#: convertrules.py:3672
+msgid "Staff-padding now controls the distance to the baseline, not the nearest point."
 msgstr ""
 
 #: fontextract.py:25
@@ -710,255 +786,291 @@ msgstr "Geëxtraheerd %s"
 msgid "Writing fonts to %s"
 msgstr "Schrijven van fonts naar %s"
 
-#: lilylib.py:81 musicxml.py:13 convert-ly.py:67 warn.cc:72 input.cc:115
-#: input.cc:123
+#: lilylib.py:101
+#, python-format
+msgid "Setting loglevel to %s"
+msgstr "Instellen van log-niveau op %s"
+
+#: lilylib.py:104
+#, python-format
+msgid "Unknown or invalid loglevel '%s'"
+msgstr "Onbekend of ongeldig log-niveau '%s'"
+
+#: lilylib.py:133 warn.cc:211
 #, c-format, python-format
 msgid "error: %s"
 msgstr "fout: %s"
 
-#: lilylib.py:124 lilylib.py:175
+#: lilylib.py:190
+#, python-format
+msgid "Processing %s.ly"
+msgstr "Verwerken van %s.ly"
+
+#: lilylib.py:194 lilylib.py:255
 #, python-format
 msgid "Invoking `%s'"
-msgstr "Aanroepen van `%s'"
+msgstr "Aanroepen van '%s'"
 
-#: lilylib.py:126 lilylib.py:177
+#: lilylib.py:196 lilylib.py:257
 #, python-format
 msgid "Running %s..."
 msgstr "Draaien van %s..."
 
-#: lilylib.py:253
+#: lilylib.py:333
 #, python-format
 msgid "Usage: %s"
-msgstr "Gebruik: %s"
+msgstr "Gebruik:  %s"
 
-#: musicexp.py:216 musicexp.py:221
+#: musicexp.py:224 musicexp.py:229
 msgid "Language does not support microtones contained in the piece"
 msgstr ""
 
-#: musicexp.py:483
+#: musicexp.py:491
 msgid "Tuplet brackets of curved shape are not correctly implemented"
 msgstr ""
 
-#: musicexp.py:669
+#: musicexp.py:677
 #, python-format
 msgid "unable to set the music %(music)s for the repeat %(repeat)s"
 msgstr ""
 
-#: musicexp.py:678
+#: musicexp.py:686
 msgid "encountered repeat without body"
-msgstr ""
+msgstr "herhaling gevonden zonder inhoud"
 
 #. no self.elements!
-#: musicexp.py:848
+#: musicexp.py:856
 #, python-format
 msgid "Grace note with no following music: %s"
 msgstr ""
 
-#: musicexp.py:1010
+#: musicexp.py:1018
 #, python-format
 msgid "Invalid octave shift size found: %s. Using no shift."
 msgstr ""
 
-#: musicexp.py:1468
+#: musicexp.py:1476
 #, python-format
 msgid "Unable to convert alteration %s to a lilypond expression"
-msgstr ""
+msgstr "Kan verandering %s niet naar een Lilypond-expressie converteren"
 
 #. TODO: Handle pieces without a time signature!
-#: musicxml.py:358
+#: musicxml.py:361
 msgid "Senza-misura time signatures are not yet supported!"
-msgstr ""
+msgstr "Senza-misura-maatsoorten worden nog niet ondersteund."
 
-#: musicxml.py:376
+#: musicxml.py:379
 msgid "Unable to interpret time signature! Falling back to 4/4."
-msgstr ""
+msgstr "Kan maatsoort niet begrijpen.  Teruggevallen op 4/4."
 
-#: musicxml.py:432
+#: musicxml.py:435
 #, python-format
-msgid ""
-"Key alteration octave given for a non-existing alteration nr. %s, available "
-"numbers: %s!"
+msgid "Key alteration octave given for a non-existing alteration nr. %s, available numbers: %s!"
 msgstr ""
 
-#: musicxml.py:520
+#: musicxml.py:523
 #, python-format
 msgid "Unable to find instrument for ID=%s\n"
-msgstr ""
+msgstr "Kan instrument voor ID=%s niet vinden\n"
 
-#: abc2ly.py:1373 convert-ly.py:87 lilypond-book.py:122 midi2ly.py:969
+#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
 #, python-format
 msgid "%s [OPTION]... FILE"
-msgstr "%s [OPTIE]... BESTAND"
+msgstr "%s [OPTIE...] BESTAND"
 
-#: abc2ly.py:1374
+#: abc2ly.py:1387
 #, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
 "%s) to LilyPond input.\n"
 msgstr ""
-"abc2ly converteert ABC muziekbestanden (zie\n"
-"%s) naar LilyPond invoer.\n"
+"'abc2ly' converteert ABC-muziekbestanden\n"
+"(zie %s) naar LilyPond-invoer.\n"
 
-#: abc2ly.py:1382 convert-ly.py:94 etf2ly.py:1206 lilypond-book.py:212
-#: midi2ly.py:1011 musicxml2ly.py:2580 main.cc:168
+#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:181
 msgid "show version number and exit"
-msgstr "toon versienummer en sluit af"
+msgstr "programmaversie tonen en stoppen"
 
-#: abc2ly.py:1386 convert-ly.py:98 etf2ly.py:1202 lilypond-book.py:140
-#: midi2ly.py:984 musicxml2ly.py:2562 main.cc:157
+#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:160
 msgid "show this help and exit"
-msgstr "toon deze hulp en sluit af"
+msgstr "deze hulptekst tonen en stoppen"
 
-#: abc2ly.py:1388 etf2ly.py:1207 midi2ly.py:992
+#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071
 msgid "write output to FILE"
-msgstr "schrijf uitvoer naar BESTAND"
+msgstr "uitvoer naar BESTAND schrijven"
 
-#: abc2ly.py:1390
+#: abc2ly.py:1404
 msgid "be strict about success"
-msgstr "wees strikt over succes"
+msgstr "strikt zijn wat betreft succes"
 
-#: abc2ly.py:1392
+#: abc2ly.py:1407
 msgid "preserve ABC's notion of beams"
-msgstr "behoud ABC's notie van waardestrepen"
+msgstr "ABC's notie van waardestrepen behouden"
+
+#: abc2ly.py:1410
+msgid "suppress progress messages"
+msgstr "voortgangsberichten onderdrukken"
 
 #. Translators, please translate this string as
 #. "Report bugs in English via %s",
 #. or if there is a LilyPond users list or forum in your language
 #. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: abc2ly.py:1395 convert-ly.py:144 etf2ly.py:1216 lilypond-book.py:234
-#: midi2ly.py:1024 musicxml2ly.py:2648 main.cc:281
+#: abc2ly.py:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:315
 #, c-format, python-format
 msgid "Report bugs via %s"
 msgstr ""
-"Meld fouten in het programma aan %s;\n"
-"meld onjuistheden in de vertaling aan <janneke@gnu.org> of <hanwen@cs.uu.nl>."
+"Rapporteer gebreken in het programma aan <%s>;\n"
+"meld vertaalfouten aan <vertaling@vrijschrift.org>."
 
-#: convert-ly.py:44
+#: convert-ly.py:47
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
 "version taken from the \\version command, to the current LilyPond version."
 msgstr ""
-"Actualiseer LilyPond invoer naar nieuwere versie.  Standaard, actualiseer\n"
-"vanaf versie uit het \\version commando, naar de huidige LilyPond versie."
+"Actualiseert LilyPond-invoer naar nieuwere versie.  Standaard actualiseert het\n"
+"vanaf de versie uit de \\version opdracht, naar de huidige LilyPond-versie."
 
-#: convert-ly.py:46 lilypond-book.py:82
+#: convert-ly.py:50
+msgid "If FILE is `-', read from standard input."
+msgstr "Als BESTAND '-' is, wordt er van standaardinvoer gelezen."
+
+#: convert-ly.py:52 lilypond-book.py:82
 msgid "Examples:"
 msgstr "Voorbeelden:"
 
-#: convert-ly.py:81 etf2ly.py:1189 lilypond-book.py:116 midi2ly.py:90
+#: convert-ly.py:79 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
 #, python-format
 msgid "Copyright (c) %s by"
-msgstr "Copyright (c) %s"
+msgstr "Copyright (C) %s"
 
-#: convert-ly.py:83 etf2ly.py:1191 lilypond-book.py:118 midi2ly.py:92
+#: convert-ly.py:81 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
 msgid "Distributed under terms of the GNU General Public License."
-msgstr "Verspreid onder de voorwaarden van de GNU General Public License."
+msgstr "Uitgegeven onder de voorwaarden van de GNU General Public License."
 
-#: convert-ly.py:84 etf2ly.py:1192 lilypond-book.py:119 midi2ly.py:93
+#: convert-ly.py:82 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
 msgid "It comes with NO WARRANTY."
 msgstr "Er is GEEN GARANTIE."
 
-#: convert-ly.py:102 convert-ly.py:135
+#: convert-ly.py:100 convert-ly.py:141
 msgid "VERSION"
 msgstr "VERSIE"
 
-#: convert-ly.py:104
+#: convert-ly.py:102
 msgid "start from VERSION [default: \\version found in file]"
-msgstr "begin bij VERSIE [standaard: \\version gevonden in bestand]"
+msgstr "beginnen bij VERSIE (standaard: de \\version gevonden in bestand)"
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "edit in place"
-msgstr "bewerk bestand ter plekke"
+msgstr "bestand ter plekke bewerken"
 
-#: convert-ly.py:111
-msgid "do not add \\version command if missing"
-msgstr "voeg geen \\version commando toe als het niet aanwezig is"
+#: convert-ly.py:109 lilypond-book.py:179 musicxml2ly.py:2627
+msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)"
+msgstr "Print log-berichten volgens LOG-NIVEAU (NONE, ERROR, WARNING, PROGRESS (standaard), DEBUG)."
+
+#: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
+#: musicxml2ly.py:2629 main.cc:174
+msgid "LOGLEVEL"
+msgstr "LOG-NIVEAU"
 
 #: convert-ly.py:117
+msgid "do not add \\version command if missing"
+msgstr "geen commando \\version toevoegen als deze ontbreekt"
+
+#: convert-ly.py:123
 #, python-format
 msgid "force updating \\version number to %s"
-msgstr ""
+msgstr "bijwerken van \\version number naar %s afdwingen"
 
-#: convert-ly.py:123
+#: convert-ly.py:129
 msgid "only update \\version number if file is modified"
-msgstr ""
+msgstr "\\version number alleen bijwerken wanneer bestand gewijzigd is"
 
-#: convert-ly.py:129
+#: convert-ly.py:135
 #, python-format
 msgid "show rules [default: -f 0, -t %s]"
-msgstr "toon regels [standaard: - 0, -t %s]"
+msgstr "regels tonen (standaard: -f 0, -t %s)"
 
-#: convert-ly.py:134
+#: convert-ly.py:140
 #, python-format
 msgid "convert to VERSION [default: %s]"
-msgstr "converteer naar VERSIE [standaard: %s]"
+msgstr "converteren naar VERSIE (standaard: %s)"
+
+#: convert-ly.py:147
+msgid "make a numbered backup [default: filename.ext~]"
+msgstr "een genummerde reservekopie maken (standaard: bestandsnaam.ext~)"
 
-#: convert-ly.py:139 etf2ly.py:1210 lilypond-book.py:215 midi2ly.py:1012
-#: main.cc:170
+#: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
+#: main.cc:183
 msgid "show warranty and copyright"
-msgstr "toon garantie en auteursrechten"
+msgstr "garantie en auteursrechten tonen"
 
-#: convert-ly.py:184
+#: convert-ly.py:196
 msgid "Applying conversion: "
-msgstr "toepassen van conversie: "
+msgstr "Toepassen van conversie: "
 
-#: convert-ly.py:197
+#: convert-ly.py:215
 msgid "Error while converting"
-msgstr "%s: fout tijdens converteren"
+msgstr "Fout tijdens converteren"
 
-#: convert-ly.py:199
+#: convert-ly.py:217
 msgid "Stopping at last successful rule"
-msgstr "Stop na de laatste succesvolle regel"
+msgstr "Gestopt bij laatste succesvolle regel"
 
-#: convert-ly.py:224
+# XXX trailing space?
+#: convert-ly.py:256
 #, python-format
 msgid "Processing `%s'... "
-msgstr "Verwerken van `%s'..."
+msgstr "Verwerken van '%s'... "
 
-#: convert-ly.py:332
+#: convert-ly.py:367
 #, python-format
 msgid "%s: Unable to open file"
 msgstr "%s: Kan bestand niet openen"
 
-#: convert-ly.py:339
+#: convert-ly.py:373
 #, python-format
 msgid "%s: Unable to determine version.  Skipping"
-msgstr "%s: Kan versie niet bepalen voor.  Overslaan"
+msgstr "%s: Kan versie niet bepalen.  Overgeslagen."
 
-#: convert-ly.py:344
+#: convert-ly.py:379
 #, python-format
 msgid ""
 "%s: Invalid version string `%s' \n"
-"Valid version strings consist of three numbers, separated by dots, e.g. "
-"`2.8.12'"
+"Valid version strings consist of three numbers, separated by dots, e.g. `2.8.12'"
 msgstr ""
 
-#: etf2ly.py:1195
+#: convert-ly.py:385
+#, python-format
+msgid "There was %d error."
+msgid_plural "There were %d errors."
+msgstr[0] ""
+msgstr[1] ""
+
+#: etf2ly.py:1197
 #, python-format
 msgid "%s [OPTION]... ETF-FILE"
 msgstr "%s [OPTIE]... ETF-BESTAND"
 
-#: etf2ly.py:1196
+#: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
-"file.\n"
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n"
 msgstr ""
-"Enigma Transport Format is een format dat wordt gebruikt door Coda\n"
-"Music Technology's Finale product.  Dit programma converteert een\n"
-"subset van ETF naar een gebruiksklaar LilyPond-bestand.\n"
+"'Enigma Transport Format' is een opmaak die wordt gebruikt door 'Finale',\n"
+"een product van 'Coda Music Technology'.  'etf2ly' converteert een subset\n"
+"van 'ETF' naar een gebruiksklaar Lilypond-bestand.\n"
 
-#: etf2ly.py:1208 midi2ly.py:988 midi2ly.py:993 musicxml2ly.py:2640
-#: main.cc:161 main.cc:166
+#: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
+#: main.cc:166 main.cc:178
 msgid "FILE"
 msgstr "BESTAND"
 
 #: lilypond-book.py:80
-msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
-msgstr ""
-"Verwerk LilyPond snippers in hybride HTML, LaTeX, texinfo of DocBook "
-"document."
+msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr "Verwerk LilyPond snippers in hybride HTML, LaTeX, texinfo of DocBook dokument."
 
 #: lilypond-book.py:87
 msgid "BOOK"
@@ -975,25 +1087,22 @@ msgstr "FILTER"
 
 #: lilypond-book.py:130
 msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
-msgstr "pijp snippers door FILTER [default: `convert-ly -n -']"
+msgstr "snippers door FILTER sluizen (standaard: 'convert-ly -n -')"
 
 #: lilypond-book.py:134
-msgid ""
-"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
-msgstr ""
-"gebruik uitvoerformat FORMAT (texi [standaard], texi-html, latex, html, "
-"docbook)"
+msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
+msgstr "deze uitvoeropmaak gebruiken (texi [standaard], texi-html, latex, html, docbook)"
 
 #: lilypond-book.py:135
 msgid "FORMAT"
-msgstr "FORMAAT"
+msgstr "OPMAAK"
 
 #: lilypond-book.py:142
 msgid "add DIR to include path"
-msgstr "voeg MAP toe aan zoekpad"
+msgstr "deze MAP toevoegen aan zoekpad"
 
-#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:163
-#: lilypond-book.py:173 lilypond-book.py:189 lilypond-book.py:195 main.cc:160
+#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:165
 msgid "DIR"
 msgstr "MAP"
 
@@ -1003,329 +1112,372 @@ msgstr ""
 
 #: lilypond-book.py:155
 msgid "PAD"
-msgstr "VUL"
+msgstr ""
 
 #: lilypond-book.py:157
-msgid ""
-"pad left side of music to align music inspite of uneven bar numbers (in mm)"
+msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)"
 msgstr ""
 
 #: lilypond-book.py:162
+msgid "Print lilypond log messages according to LOGLEVEL"
+msgstr "Print Lilypond-log-berichten volgens LOG-NIVEAU."
+
+#: lilypond-book.py:168
 msgid "write lily-XXX files to DIR, link into --output dir"
 msgstr ""
 
-#: lilypond-book.py:167
-msgid ""
-"Load the additional python PACKAGE (containing e.g. a custom output format)"
+#: lilypond-book.py:173
+msgid "Load the additional python PACKAGE (containing e.g. a custom output format)"
 msgstr ""
 
-#: lilypond-book.py:168
+#: lilypond-book.py:174
 msgid "PACKAGE"
 msgstr ""
 
-#: lilypond-book.py:172
+#: lilypond-book.py:186
 msgid "write output to DIR"
-msgstr "schrijf uitvoer naar MAP"
+msgstr "uitvoer naar MAP schrijven"
 
-#: lilypond-book.py:177
+#: lilypond-book.py:191
 msgid "COMMAND"
 msgstr "OPDRACHT"
 
-#: lilypond-book.py:178
+#: lilypond-book.py:192
 msgid "process ly_files using COMMAND FILE..."
-msgstr "verwerk ly_bestanden met OPDRACHT BESTAND..."
+msgstr "ly-bestanden verwerken met 'OPDRACHT BESTAND...'"
+
+# lisp-format
+#: lilypond-book.py:197
+msgid "Redirect the lilypond output"
+msgstr "Omleiden van Lilypond-uitvoer"
 
-#: lilypond-book.py:182
+#: lilypond-book.py:201
 msgid "Compile snippets in safe mode"
-msgstr "Samenstellen van snippers in veilige modus"
+msgstr "Snippers compileren in veilige modus"
 
-#: lilypond-book.py:188
+#: lilypond-book.py:207
 msgid "do not fail if no lilypond output is found"
 msgstr ""
 
-#: lilypond-book.py:194
+#: lilypond-book.py:213
 msgid "do not fail if no PNG images are found for EPS files"
 msgstr ""
 
-#: lilypond-book.py:200
+#: lilypond-book.py:219
 msgid "write snippet output files with the same base name as their source file"
 msgstr ""
 
-#: lilypond-book.py:204 midi2ly.py:1005 musicxml2ly.py:2585 main.cc:169
+#: lilypond-book.py:223 midi2ly.py:1090 musicxml2ly.py:2596
 msgid "be verbose"
-msgstr "wees breedsprakig"
+msgstr "gedetailleerde uitvoer produceren"
 
-#: lilypond-book.py:220
+#: lilypond-book.py:239
 msgid ""
 "run executable PROG instead of latex, or in\n"
 "case --pdf option is set instead of pdflatex"
 msgstr ""
 
-#: lilypond-book.py:222
+#: lilypond-book.py:241 lilypond-book.py:246
 msgid "PROG"
 msgstr ""
 
-#: lilypond-book.py:228
+#: lilypond-book.py:245
+msgid "run executable PROG instead of texi2pdf"
+msgstr ""
+
+#: lilypond-book.py:252
 msgid "create PDF files for use with PDFTeX"
-msgstr "maak PDF-bestanden voor gebruik met PDFTeX"
+msgstr "PDF-bestanden maken voor gebruik met PDFTeX"
 
-#: lilypond-book.py:419
+#: lilypond-book.py:463
 msgid "Writing snippets..."
 msgstr "Schrijven van snippers..."
 
-#: lilypond-book.py:425
+#: lilypond-book.py:468
 msgid "Processing..."
 msgstr "Verwerken..."
 
-#: lilypond-book.py:431
+#: lilypond-book.py:473
 msgid "All snippets are up to date..."
-msgstr "Alle snippers zijn actueel..."
+msgstr "Alle snippers zijn up-to-date..."
+
+#: lilypond-book.py:475
+msgid "Linking files..."
+msgstr "Linken van bestanden..."
 
-#: lilypond-book.py:452
+#: lilypond-book.py:495
 #, python-format
 msgid "cannot determine format for: %s"
 msgstr "kan formaat niet bepalen voor: %s"
 
-#: lilypond-book.py:461
+#: lilypond-book.py:504
 #, python-format
 msgid "%s is up to date."
-msgstr "%s is actueel."
+msgstr "%s is up-to-date."
 
-#: lilypond-book.py:475
+#: lilypond-book.py:517
 #, python-format
 msgid "Writing `%s'..."
-msgstr "Schrijven van `%s'..."
+msgstr "Schrijven van '%s'..."
 
-#: lilypond-book.py:537
+#: lilypond-book.py:580
 msgid "Output would overwrite input file; use --output."
-msgstr "Uitvoer zou invoerbestand overschrijven; gebruik --output."
+msgstr "Uitvoer zou invoerbestand overschrijven;  gebruik '--output'."
 
-#: lilypond-book.py:541
+#: lilypond-book.py:584
 #, python-format
 msgid "Reading %s..."
-msgstr "Lezen %s..."
+msgstr "Lezen van %s..."
 
-#: lilypond-book.py:549
+#: lilypond-book.py:591
 msgid "Dissecting..."
 msgstr "Ontleden..."
 
-#: lilypond-book.py:561
+#: lilypond-book.py:602
 #, python-format
 msgid "Compiling %s..."
-msgstr "Samenstellen %s..."
+msgstr "Samenstellen van %s..."
 
-#: lilypond-book.py:570
+#: lilypond-book.py:610
 #, python-format
 msgid "Processing include: %s"
 msgstr "Verwerken van invoegsel: %s"
 
-#: lilypond-book.py:582
+#: lilypond-book.py:621
 #, python-format
 msgid "Removing `%s'"
-msgstr "Verwijderen van `%s'"
+msgstr "Verwijderen van '%s'"
+
+#: lilypond-book.py:714
+#, python-format
+msgid "Setting LilyPond's loglevel to %s"
+msgstr "Instellen van Lilypond-log-niveau op %s"
+
+#: lilypond-book.py:718
+#, python-format
+msgid "Setting LilyPond's loglevel to %s (from environment variable LILYPOND_LOGLEVEL)"
+msgstr "Instellen van Lilypond-log-niveau op %s (uit omgevingsvariabele LILYPOND_LOGLEVEL)"
+
+#: lilypond-book.py:721
+msgid "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
+msgstr "Instellen van Lilyponds uitvoer op '--verbose', geïmpliceerd door Lilypond-books instelling"
 
-#: midi2ly.py:99
+#: midi2ly.py:90
 msgid "warning: "
 msgstr "waarschuwing: "
 
-#: midi2ly.py:102 midi2ly.py:1037
+#: midi2ly.py:93 midi2ly.py:1124
 msgid "error: "
 msgstr "fout: "
 
-#: midi2ly.py:103
+#: midi2ly.py:94
 msgid "Exiting... "
-msgstr "Beëindigen..."
+msgstr "Beëindigen... "
 
-#: midi2ly.py:957
+#: midi2ly.py:835
+msgid "found more than 5 voices on a staff, expect bad output"
+msgstr "meer dan vijf stemmen gevonden op een notenbalk;  houd rekening met slechte uitvoer"
+
+#: midi2ly.py:1032
 #, python-format
 msgid "%s output to `%s'..."
-msgstr "%s uitvoer naar `%s'..."
+msgstr "%s uitvoer naar '%s'..."
 
-#: midi2ly.py:970
+#: midi2ly.py:1045
 #, python-format
 msgid "Convert %s to LilyPond input.\n"
-msgstr "Converteer %s naar LilyPond-invoer.\n"
+msgstr "Converteren van %s naar LilyPond-invoer.\n"
 
-#: midi2ly.py:975
+#: midi2ly.py:1050
 msgid "print absolute pitches"
-msgstr "schrijf absolute toonhoogten"
+msgstr "absolute toonhoogten printen"
 
-#: midi2ly.py:977 midi2ly.py:998
+#: midi2ly.py:1052 midi2ly.py:1080
 msgid "DUR"
 msgstr "DUUR"
 
-#: midi2ly.py:978
+#: midi2ly.py:1053
 msgid "quantise note durations on DUR"
-msgstr "kwantiseer nootlengtes op DUUR"
+msgstr "nootlengtes op DUUR kwantiseren"
+
+#: midi2ly.py:1056
+msgid "debug printing"
+msgstr ""
 
-#: midi2ly.py:981
+#: midi2ly.py:1059
 msgid "print explicit durations"
-msgstr "schrijf expliciete nootlengtes"
+msgstr "expliciete nootlengtes printen"
 
-#: midi2ly.py:986
+#: midi2ly.py:1064
 msgid "prepend FILE to output"
-msgstr "plak BESTAND aan begin van uitvoer"
+msgstr "BESTAND voorvoegen aan uitvoer"
 
-#: midi2ly.py:989
+#: midi2ly.py:1068
 msgid "set key: ALT=+sharps|-flats; MINOR=1"
-msgstr "zet toonsoort: VER=+kruizen|-mollen; MINEUR=1"
+msgstr "toonsoort zetten: VER=+kruizen|-mollen; MINEUR=1"
 
-#: midi2ly.py:990
+#: midi2ly.py:1069
 msgid "ALT[:MINOR]"
 msgstr "VER[:MINEUR]"
 
-#: midi2ly.py:995
+#: midi2ly.py:1074
 msgid "preview of first 4 bars"
-msgstr ""
+msgstr "voorproefje van eerste vier maten"
 
-#: midi2ly.py:997
+#: midi2ly.py:1078
+msgid "suppress progress messages and warnings about excess voices"
+msgstr "voortgangsberichten en waarschuwingen over te veel stemmen onderdrukken"
+
+#: midi2ly.py:1079
 msgid "quantise note starts on DUR"
-msgstr "kwantiseer begin van noten op DUUR"
+msgstr "het begin van noten op DUUR kwantiseren"
+
+#: midi2ly.py:1083
+msgid "use s instead of r for rests"
+msgstr "voor rusten s in plaats van r gebruiken"
 
-#: midi2ly.py:1000
+#: midi2ly.py:1085
 msgid "DUR*NUM/DEN"
 msgstr "DUUR*NOEM/TEL"
 
-#: midi2ly.py:1003
+#: midi2ly.py:1088
 msgid "allow tuplet durations DUR*NUM/DEN"
-msgstr "sta tuplet lengtes DUUR*NOEM/TEL toe"
+msgstr "tuplet-lengtes van DUUR*NOEM/TEL toestaan"
 
-#: midi2ly.py:1015
+#: midi2ly.py:1098
 msgid "treat every text as a lyric"
-msgstr "behandel elke tekst als liedtekst"
+msgstr "elke tekst als liedtekst behandelen"
 
-#: midi2ly.py:1018
+#: midi2ly.py:1101
 msgid "Examples"
 msgstr "Voorbeelden"
 
-#: midi2ly.py:1038
+#: midi2ly.py:1125
 msgid "no files specified on command line."
-msgstr "geen bestanden gespecificeerd op de commandoregel."
+msgstr "geen bestanden gegeven op de opdrachtregel"
 
-#: musicxml2ly.py:223
+#: musicxml2ly.py:228
 #, python-format
-msgid ""
-"Encountered file created by %s, containing wrong beaming information. All "
-"beaming information in the MusicXML file will be ignored"
+msgid "Encountered file created by %s, containing wrong beaming information. All beaming information in the MusicXML file will be ignored"
 msgstr ""
 
-#: musicxml2ly.py:239 musicxml2ly.py:241
+#: musicxml2ly.py:247 musicxml2ly.py:249
 #, python-format
 msgid "Unprocessed PartGroupInfo %s encountered"
 msgstr ""
 
-#: musicxml2ly.py:494
+#: musicxml2ly.py:500
 #, python-format
 msgid "Encountered note at %s without type and duration (=%s)"
 msgstr ""
 
-#: musicxml2ly.py:514
+#: musicxml2ly.py:520
 #, python-format
-msgid ""
-"Encountered rational duration with denominator %s, unable to convert to "
-"lilypond duration"
+msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration"
 msgstr ""
 
-#: musicxml2ly.py:761
+#: musicxml2ly.py:767
 msgid "Unable to extract key signature!"
 msgstr ""
 
-#: musicxml2ly.py:788
+#: musicxml2ly.py:794
 #, python-format
 msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!"
 msgstr ""
 
-#: musicxml2ly.py:926
+#: musicxml2ly.py:932
 #, python-format
 msgid "Encountered unprocessed marker %s\n"
 msgstr ""
 
-#: musicxml2ly.py:1020
+#: musicxml2ly.py:1026
 #, python-format
 msgid "unknown span event %s"
-msgstr "onbekende span gebeurtenis %s"
+msgstr "onbekende span-gebeurtenis %s"
 
-#: musicxml2ly.py:1030
+#: musicxml2ly.py:1036
 #, python-format
 msgid "unknown span type %s for %s"
 msgstr "onbekend span-type %s voor %s"
 
-#: musicxml2ly.py:1450
+#: musicxml2ly.py:1456
 msgid "Unknown metronome mark, ignoring"
-msgstr ""
+msgstr "Onbekende metronoommarkering;  genegeerd"
 
 #. TODO: Implement the other (more complex) way for tempo marks!
-#: musicxml2ly.py:1455
-msgid ""
-"Metronome marks with complex relations (<metronome-note> in MusicXML) are "
-"not yet implemented."
+#: musicxml2ly.py:1461
+msgid "Metronome marks with complex relations (<metronome-note> in MusicXML) are not yet implemented."
 msgstr ""
 
-#: musicxml2ly.py:1657
+#: musicxml2ly.py:1663
 #, python-format
 msgid "Unable to convert chord type %s to lilypond."
 msgstr ""
 
-#: musicxml2ly.py:1806
+#: musicxml2ly.py:1816
 #, python-format
 msgid "drum %s type unknown, please add to instrument_drumtype_dict"
 msgstr ""
 
-#: musicxml2ly.py:1810
+#: musicxml2ly.py:1820
 msgid "cannot find suitable event"
-msgstr "kan geen passende gebeurtenis vinden"
+msgstr "kan geen geschikte gebeurtenis vinden"
 
-#: musicxml2ly.py:1958
+#: musicxml2ly.py:1968
 #, python-format
 msgid "Negative skip %s (from position %s to %s)"
 msgstr ""
 
-#: musicxml2ly.py:2099
+#: musicxml2ly.py:2109
 #, python-format
 msgid "Negative skip found: from %s to %s, difference is %s"
 msgstr ""
 
-#: musicxml2ly.py:2180
+#: musicxml2ly.py:2190
 #, python-format
 msgid "unexpected %s; expected %s or %s or %s"
-msgstr ""
+msgstr "onverwachte %s;  verwachtte %s of %s of %s"
 
-#: musicxml2ly.py:2286
+#: musicxml2ly.py:2296
 msgid "Encountered closing slur, but no slur is open"
 msgstr ""
 
-#: musicxml2ly.py:2289
+#: musicxml2ly.py:2299
 msgid "Cannot have two simultaneous (closing) slurs"
 msgstr ""
 
-#: musicxml2ly.py:2298
+#: musicxml2ly.py:2308
 msgid "Cannot have a slur inside another slur"
 msgstr ""
 
-#: musicxml2ly.py:2301
+#: musicxml2ly.py:2311
 msgid "Cannot have two simultaneous slurs"
 msgstr ""
 
-#: musicxml2ly.py:2435
+#: musicxml2ly.py:2445
 #, python-format
 msgid "cannot simultaneously have more than one mode: %s"
 msgstr ""
 
-#: musicxml2ly.py:2543
+#: musicxml2ly.py:2553
 msgid "Converting to LilyPond expressions..."
 msgstr "Converteren naar LilyPond-expressies..."
 
-#: musicxml2ly.py:2554
+#: musicxml2ly.py:2564
 msgid "musicxml2ly [OPTION]... FILE.xml"
-msgstr "musicxml2ly [OPTIE]... BESTAND.xml"
+msgstr "musicxml2ly [OPTIE...] BESTAND.xml"
 
-#: musicxml2ly.py:2556
+# XXX command line >> standard input
+# XXX use the existing standard phrase instead
+#: musicxml2ly.py:2566
 msgid ""
 "Convert MusicXML from FILE.xml to LilyPond input.\n"
 "If the given filename is -, musicxml2ly reads from the command line.\n"
 msgstr ""
+"Converteert MusicXML uit BESTAND.xml naar LilyPond-invoer.\n"
+"Als BESTAND.xml '-' is, wordt standaardinvoer gelezen.\n"
 
-#: musicxml2ly.py:2566
+#: musicxml2ly.py:2576
 msgid ""
 "Copyright (c) 2005--2012 by\n"
 "    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
@@ -1333,125 +1485,165 @@ msgid ""
 "    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 msgstr ""
 
-#: musicxml2ly.py:2591
+#: musicxml2ly.py:2602
 msgid "use lxml.etree; uses less memory and cpu time"
-msgstr "gebruik lxml.etree; gebruikt minder geheugen en processortijd"
+msgstr "'lxml.etree' gebruiken;  gebruikt minder geheugen en processortijd"
 
-#: musicxml2ly.py:2597
+#: musicxml2ly.py:2608
 msgid "input file is a zip-compressed MusicXML file"
-msgstr ""
+msgstr "invoerbestand is een zip-gecomprimeerd MusicXML-bestand"
 
-#: musicxml2ly.py:2603
+#: musicxml2ly.py:2614
 msgid "convert pitches in relative mode (default)"
-msgstr ""
+msgstr "toonhoogtes converteren in relatieve modus (standaard)"
 
-#: musicxml2ly.py:2608
+#: musicxml2ly.py:2619
 msgid "convert pitches in absolute mode"
-msgstr ""
+msgstr "toonhoogtes converteren in absolute modus"
 
-#: musicxml2ly.py:2611
+#: musicxml2ly.py:2622
 msgid "LANG"
-msgstr ""
+msgstr "TAAL"
 
-#: musicxml2ly.py:2613
+#: musicxml2ly.py:2624
 msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
-msgstr ""
+msgstr "deze TAAL gebruiken voor toonhoogtenamen; b.v. 'deutsch' voor nootnamen in het Duits"
 
-#: musicxml2ly.py:2619
+#: musicxml2ly.py:2638
 msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
 msgstr ""
 
-#: musicxml2ly.py:2625
+#: musicxml2ly.py:2644
 msgid "do not convert exact vertical positions of rests"
 msgstr ""
 
-#: musicxml2ly.py:2631
+#: musicxml2ly.py:2650
 msgid "do not convert the exact page layout and breaks"
 msgstr ""
 
-#: musicxml2ly.py:2637
-msgid ""
-"do not convert beaming information, use lilypond's automatic beaming instead"
+#: musicxml2ly.py:2656
+msgid "do not convert beaming information, use lilypond's automatic beaming instead"
 msgstr ""
 
-#: musicxml2ly.py:2645
+#: musicxml2ly.py:2664
 msgid "set output filename to FILE, stdout if -"
-msgstr "zet uitvoerbestandnaam op BESTAND, stdout indien -"
+msgstr "uitvoer opslaan in BESTAND (standaarduitvoer indien '-')"
+
+#: musicxml2ly.py:2670
+msgid "activate midi-block"
+msgstr ""
 
-#: musicxml2ly.py:2728
+#: musicxml2ly.py:2754
 #, python-format
 msgid "unknown part in part-list: %s"
-msgstr "onbekend deel in deel-lijst: %s"
+msgstr ""
 
-#: musicxml2ly.py:2790
+#: musicxml2ly.py:2816
 msgid "Input is compressed, extracting raw MusicXML data from stdin"
 msgstr ""
 
-#: musicxml2ly.py:2793
+#: musicxml2ly.py:2829
 #, python-format
 msgid "Input file %s is compressed, extracting raw MusicXML data"
 msgstr ""
 
-#: musicxml2ly.py:2823
+# XXX uncapitalize Standard
+#: musicxml2ly.py:2859
 msgid "Reading MusicXML from Standard input ..."
-msgstr ""
+msgstr "Lezen van MusicXML van standaardinvoer..."
 
-#: musicxml2ly.py:2825
+#: musicxml2ly.py:2861
 #, python-format
 msgid "Reading MusicXML from %s ..."
-msgstr "MusicXML lezen van %s ..."
+msgstr "Lezen van MusicXML uit %s ..."
 
-#: musicxml2ly.py:2858
+#: musicxml2ly.py:2894
 #, python-format
 msgid "Output to `%s'"
-msgstr "Uitvoer naar `%s'"
+msgstr "Uitvoer naar '%s'"
 
-#: musicxml2ly.py:2925
+#: musicxml2ly.py:2964
 #, python-format
 msgid "Unable to find input file %s"
-msgstr "Kan invoer-bestand niet vinden %s"
+msgstr "Kan invoerbestand %s niet vinden"
 
-#: website_post.py:123
+#: website_post.py:125
 msgid "English"
 msgstr "Engels"
 
-#: website_post.py:126
+#: website_post.py:128
 msgid "Other languages"
 msgstr "Andere talen"
 
+#: website_post.py:129
+#, python-format
+msgid "About <a href=\"%s\">automatic language selection</a>."
+msgstr "Gebruik van <a href=\"%s\">automatische taalkeuze</a>."
+
 #: getopt-long.cc:153
 #, c-format
 msgid "option `%s' requires an argument"
-msgstr "optie `%s' vereist een argument"
+msgstr "optie '%s' vereist een argument"
 
 #: getopt-long.cc:157
 #, c-format
 msgid "option `%s' does not allow an argument"
-msgstr "optie `%s' staat geen argument toe"
+msgstr "optie '%s' staat geen argument toe"
 
 #: getopt-long.cc:161
 #, c-format
 msgid "unrecognized option: `%s'"
-msgstr "onbekende optie: `%s'"
+msgstr "onbekende optie: '%s'"
 
 #: getopt-long.cc:167
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
-msgstr "onjuist argument: `%s' voor optie `%s'"
+msgstr "onjuist argument '%s' voor optie '%s'"
+
+#: warn.cc:56
+#, c-format
+msgid "Log level set to %d\n"
+msgstr "Log-niveau is ingesteld op %d\n"
+
+#: warn.cc:89
+#, c-format
+msgid "unknown log level `%s', using default (INFO)"
+msgstr "onbekend log-niveau '%s';  standaard wordt gebruikt (INFO)"
+
+#. Some expected warning was not triggered, so print out a warning.
+#: warn.cc:112
+#, c-format
+msgid "%d expected warning(s) not encountered: "
+msgstr ""
+
+#: warn.cc:183
+#, c-format
+msgid "fatal error: %s"
+msgstr "fatale fout: %s"
 
-#: warn.cc:59
+#: warn.cc:192
 #, c-format
-msgid "success: %s"
-msgstr "succes: %s"
+msgid "suppressed programming error: %s"
+msgstr "**programmafout** wordt onderdrukt: %s"
 
-#: warn.cc:86 grob.cc:617 input.cc:97
+#: warn.cc:197
 #, c-format
 msgid "programming error: %s"
-msgstr "programmeerfout: %s"
+msgstr "**programmafout**: %s"
 
-#: warn.cc:87 input.cc:98
+#: warn.cc:198
 msgid "continuing, cross fingers"
-msgstr "ga verder; duim maar"
+msgstr "doorgegaan;  duim maar"
+
+#: warn.cc:207
+#, c-format
+msgid "suppressed error: %s"
+msgstr "fout wordt onderdrukt: %s"
+
+#: warn.cc:219
+#, c-format
+msgid "suppressed warning: %s"
+msgstr "waarschuwing wordt onderdrukt: %s"
 
 #: accidental-engraver.cc:180
 #, c-format
@@ -1461,99 +1653,100 @@ msgstr "voorteken zetlijst moet beginnen met context-naam: %s"
 #: accidental-engraver.cc:210
 #, c-format
 msgid "procedure or context-name expected for accidental rule, found %s"
-msgstr "procedure of context-naam verwacht voor voorteken regel, gevonden: %s"
+msgstr "procedure of context-naam werd verwacht voor toevallige regel, gevonden: %s"
 
-#: accidental.cc:200
+#: accidental.cc:169
 #, c-format
 msgid "Could not find glyph-name for alteration %s"
-msgstr "Kan vorm naam niet vinden voor verandering %s"
+msgstr "Kan gliefnaam niet vinden voor verandering %s"
 
-#: accidental.cc:215
+#: accidental.cc:184
+#, fuzzy
 msgid "natural alteration glyph not found"
-msgstr "herstellingsteken vorm niet gevonden"
+msgstr "glief voor herstelteken niet gevonden"
 
-#: all-font-metrics.cc:156
+#: all-font-metrics.cc:149
 #, c-format
 msgid "cannot find font: `%s'"
-msgstr "kan font niet vinden: `%s'"
+msgstr "kan font niet vinden: '%s'"
 
 #: apply-context-iterator.cc:42
 msgid "\\applycontext argument is not a procedure"
-msgstr "\\applycontext argument is geen procedure"
+msgstr "argument van \\applycontext is geen procedure"
+
+#: arpeggio.cc:138
+msgid "no heads for arpeggio found?"
+msgstr ""
 
 #: auto-change-iterator.cc:74 change-iterator.cc:72
 #, c-format
 msgid "cannot change, already in translator: %s"
 msgstr "kan niet wisselen, al in vertaler: %s"
 
-#: axis-group-engraver.cc:94
+#: axis-group-engraver.cc:149
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver: verticale groep heeft al een ouder"
 
-#: axis-group-engraver.cc:95
+#: axis-group-engraver.cc:150
 msgid "are there two Axis_group_engravers?"
 msgstr "zijn er twee Axis_group_engravers?"
 
-#: axis-group-engraver.cc:96
+#: axis-group-engraver.cc:151
 msgid "removing this vertical group"
-msgstr "verwijder deze verticale groep"
+msgstr "verwijderen van deze verticale groep"
 
-#: axis-group-interface.cc:631
-msgid "an outside-staff object should have a direction, defaulting to up"
+#: axis-group-interface.cc:714
+#, c-format
+msgid "\"%s\" is not a valid outside-staff-placement-directive"
 msgstr ""
-"een buiten-notenbalk object moet een richting hebben, gebruik "
-"standaardwaarde omhoog"
+
+#: axis-group-interface.cc:786
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr "een buiten-notenbalk object moet een richting hebben, gebruik standaardwaarde omhoog"
 
 #: bar-check-iterator.cc:84
 #, c-format
 msgid "barcheck failed at: %s"
-msgstr "maatstreep controle gefaald op: %s"
+msgstr "maatstreepcontrole is mislukt bij: %s"
 
-#: beam-engraver.cc:147
+#: beam-engraver.cc:148
 msgid "already have a beam"
 msgstr "heb al een waardestreep"
 
-#: beam-engraver.cc:230
+#: beam-engraver.cc:235
 msgid "unterminated beam"
 msgstr "onbeëindigde waardestreep"
 
-#: beam-engraver.cc:266 chord-tremolo-engraver.cc:150
+#: beam-engraver.cc:282 chord-tremolo-engraver.cc:149
 msgid "stem must have Rhythmic structure"
 msgstr "stok moet Ritmische structuur hebben"
 
-#: beam-engraver.cc:274
+#: beam-engraver.cc:293
 msgid "stem does not fit in beam"
 msgstr "stok past niet in waardestreep"
 
-#: beam-engraver.cc:275
+#: beam-engraver.cc:294
 msgid "beam was started here"
 msgstr "waardestreep werd hier gestart"
 
-#: beam.cc:180
-msgid "removing beam with no stems"
-msgstr "verwijderen van waardestreep zonder stokken"
-
 #. We are completely screwed.
-#: beam.cc:1274
+#: beam-quanting.cc:839
 msgid "no viable initial configuration found: may not find good beam slope"
-msgstr ""
-"geen werkbare initiële configuratie gevonden: kan wellicht geen goede "
-"waardestreephelling vinden"
+msgstr "geen werkbare initiële configuratie gevonden: kan wellicht geen goede waardestreephelling vinden"
 
-#: break-alignment-interface.cc:206
-#, c-format
-msgid "No spacing entry from %s to `%s'"
-msgstr "Geen spatiëringswaarde van %s naar`%s'"
+#: beam.cc:181
+msgid "removing beam with no stems"
+msgstr "verwijderen van waardestreep zonder stokken"
 
 #: change-iterator.cc:34
 #, c-format
 msgid "cannot change `%s' to `%s'"
-msgstr "kan `%s' niet in `%s' veranderen"
+msgstr "kan '%s' niet in '%s' veranderen"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:93
 msgid "cannot find context to switch to"
-msgstr "kan `%s' niet wisselen in `%s'"
+msgstr "kan context om naar over te schakelen niet vinden"
 
 #. We could change the current translator's id, but that would make
 #. errors hard to catch.
@@ -1581,159 +1774,182 @@ msgstr "onbeëindigd akkoordtremolo"
 #: clef.cc:65
 #, c-format
 msgid "clef `%s' not found"
-msgstr "sleutel `%s' niet gevonden"
+msgstr "sleutel '%s' is niet gevonden"
 
 #: cluster.cc:120
 #, c-format
 msgid "unknown cluster style `%s'"
-msgstr "onbekende clusterstijl `%s'"
+msgstr "onbekende clusterstijl '%s'"
 
 #: cluster.cc:157
 msgid "junking empty cluster"
-msgstr "verschroot lege cluster"
+msgstr "lege cluster wordt weggegooid"
 
-#: coherent-ligature-engraver.cc:111
+#: coherent-ligature-engraver.cc:110
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr "Coherent_ligature_engraver: zet `spacing-increment=0.01': ptr=%ul"
 
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:189 constrained-breaking.cc:207
+#: constrained-breaking.cc:187 constrained-breaking.cc:206
 msgid "cannot find line breaking that satisfies constraints"
 msgstr "kan geen regelbreuk vinden die aan voorwaarden voldoet"
 
-#: context-property.cc:42
+#: context-property.cc:43
 msgid "need symbol arguments for \\override and \\revert"
 msgstr "heb symbool-argumenten nodig voor \\override en \\revert"
 
 #: context.cc:149
 #, c-format
 msgid "cannot find or create new `%s'"
-msgstr "kan niet vinden of nieuw maken `%s'"
+msgstr "kan '%s' niet vinden of nieuw maken"
 
-#: context.cc:207
+#: context.cc:228
 #, c-format
 msgid "cannot find or create `%s' called `%s'"
-msgstr "kan niet vinden of maken `%s' genaamd `%s'"
-
-#: context.cc:269
-#, c-format
-msgid "Invalid CreateContext event: Cannot create %s context"
-msgstr "Ongeldig CreateContext gebeurtenis: Kan %s context niet maken"
+msgstr "kan '%s' genaamd '%s' niet vinden of aanmaken"
 
-#: context.cc:400
+#: context.cc:425
 #, c-format
 msgid "cannot find or create: `%s'"
-msgstr "kan niet vinden of scheppen: `%s'"
+msgstr "kan '%s' niet vinden of aanmaken"
+
+#: context.cc:439
+#, fuzzy, c-format
+msgid "cannot find or create new Bottom = \"%s\""
+msgstr "kan niet vinden of nieuw maken `%s'"
 
-#: custos.cc:88
+#: custos.cc:87
 #, c-format
 msgid "custos `%s' not found"
 msgstr "custode `%s' niet gevonden"
 
-#: dispatcher.cc:82
-msgid "Event class should be a symbol"
-msgstr "Gebeurtenis klasse hoort een symbool te zijn"
-
 #: dispatcher.cc:89
+#, fuzzy
+msgid "Event class should be a list"
+msgstr "Gebeurtenis klasse zou hoort een symbool te zijn"
+
+#: dispatcher.cc:172
 #, c-format
-msgid "Unknown event class %s"
-msgstr "Onbekende gebeurtenis klasse `%s'"
+msgid "Junking event: %s"
+msgstr "Gebeurtenis %s wordt weggegooid"
+
+#: dispatcher.cc:277
+msgid "Attempting to remove nonexisting listener."
+msgstr ""
+
+#: dispatcher.cc:303
+msgid "Already listening to dispatcher, ignoring request"
+msgstr ""
 
 #: dots.cc:48
 #, c-format
 msgid "dot `%s' not found"
-msgstr "punt `%s' niet gevonden"
-
-#: dynamic-engraver.cc:197
-msgid "cannot find start of (de)crescendo"
-msgstr "kan start van (de)crescendo niet vinden"
-
-#: dynamic-engraver.cc:206
-msgid "already have a decrescendo"
-msgstr "heb al een decrescendo"
+msgstr "punt '%s' is niet gevonden"
 
-#: dynamic-engraver.cc:208
-msgid "already have a crescendo"
-msgstr "heb al een crescendo"
+#: dynamic-engraver.cc:168
+#, c-format
+msgid ""
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
+msgstr ""
 
-#: dynamic-engraver.cc:211
-msgid "cresc starts here"
-msgstr "cresc is hier gestart"
+#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#, fuzzy, c-format
+msgid "unterminated %s"
+msgstr "onbeëindigde bindingsboog"
 
-#: dynamic-engraver.cc:339
-msgid "unterminated (de)crescendo"
-msgstr "onbeëindigd (de)crescendo"
+#. No explicit dynamic script events have occurred yet, but there is
+#. nevertheless a dynamic spanner.  Initialize last_volume_ to a
+#. value within the available range.
+#: dynamic-performer.cc:129
+msgid "(De)crescendo with unspecified starting volume in MIDI."
+msgstr ""
 
 #: episema-engraver.cc:75
+#, fuzzy
 msgid "already have an episema"
-msgstr "heb al een episema"
+msgstr "heb al een waardestreep"
 
 #: episema-engraver.cc:88
+#, fuzzy
 msgid "cannot find start of episema"
-msgstr "kan begin van episema niet vinden"
+msgstr "kan begin van ligatuur niet vinden"
 
 #: episema-engraver.cc:137
+#, fuzzy
 msgid "unterminated episema"
-msgstr "onbeëindigde episema"
+msgstr "onbeëindigde waardestreep"
 
-#: extender-engraver.cc:170 extender-engraver.cc:179
+#: extender-engraver.cc:169 extender-engraver.cc:178
 msgid "unterminated extender"
 msgstr "onbeëindigde extender"
 
-#: font-config-scheme.cc:152 font-config.cc:55
+#: flag.cc:134
+#, c-format
+msgid "flag `%s' not found"
+msgstr "vlag '%s' is niet gevonden"
+
+#: flag.cc:154
+#, c-format
+msgid "flag stroke `%s' not found"
+msgstr "vlagstreep '%s' is niet gevonden"
+
+#: font-config-scheme.cc:151 font-config.cc:53
 #, c-format
 msgid "failed adding font directory: %s"
-msgstr "toevoegen van font map-gefaald: %s"
+msgstr "toevoegen van font-map is mislukt: %s"
 
-#: font-config-scheme.cc:154 font-config.cc:57
+#: font-config-scheme.cc:153 font-config.cc:55
 #, c-format
-msgid "adding font directory: %s"
-msgstr "toevoegen van font-map: %s"
+msgid "Adding font directory: %s"
+msgstr "Toevoegen van font-map: %s"
 
-#: font-config-scheme.cc:168
+#: font-config-scheme.cc:167
 #, c-format
 msgid "failed adding font file: %s"
-msgstr "toevoegen van font-bestand gefaald: %s"
+msgstr "toevoegen van font-bestand is mislukt: %s"
 
-#: font-config-scheme.cc:170
+#: font-config-scheme.cc:169
 #, c-format
-msgid "adding font file: %s"
-msgstr "toevoegen van font-bestand: %s"
+msgid "Adding font file: %s"
+msgstr "Toevoegen van font-bestand: %s"
 
-#: font-config.cc:40
+#: font-config.cc:38
 msgid "Initializing FontConfig..."
 msgstr "Initialiseren van FontConfig..."
 
-#: font-config.cc:61
+#: font-config.cc:58
 msgid "Building font database..."
-msgstr "Bouwen van font-database..."
+msgstr "Opbouwen van font-gegevensbank..."
 
-#: general-scheme.cc:306
-msgid "infinity or NaN encountered while converting Real number"
-msgstr "oneindig of NaN tegengekomen tijdens converteren van Reëel getal"
+#: footnote-engraver.cc:87
+msgid "Must be footnote-event."
+msgstr ""
 
-#: general-scheme.cc:307
-msgid "setting to zero"
-msgstr "zet op nul"
+#: general-scheme.cc:390
+#, c-format
+msgid "failed redirecting stderr to `%s'"
+msgstr "omleiden van standaardfoutuitvoer naar '%s' is mislukt"
 
-#: general-scheme.cc:543
-msgid "Found infinity or nan in output. Substituting 0.0"
+#: general-scheme.cc:469 output-ps.scm:48
+#, fuzzy
+msgid "Found infinity or nan in output.  Substituting 0.0"
 msgstr "Oneindig of nan gevonden in uitvoer.  Vervangen door 0.0"
 
-#: glissando-engraver.cc:105
+#: glissando-engraver.cc:158
 msgid "unterminated glissando"
-msgstr "onbeëindigd glissando"
+msgstr "onbeëindigde glissando"
 
-#: global-context-scheme.cc:96 global-context-scheme.cc:114
+#: global-context-scheme.cc:95 global-context-scheme.cc:113
 msgid "no music found in score"
-msgstr "geen muziek gevonden in score"
+msgstr "geen muziek gevonden in partituur"
 
-#: global-context-scheme.cc:104
-msgid "Interpreting music... "
+#: global-context-scheme.cc:103
+#, fuzzy
+msgid "Interpreting music..."
 msgstr "Vertolken van muziek..."
 
-#: global-context-scheme.cc:127
+#: global-context-scheme.cc:125
 #, c-format
 msgid "elapsed time: %.2f seconds"
 msgstr "duur: %.2f seconden"
@@ -1746,7 +1962,7 @@ msgstr "\\%s genegeerd"
 #: gregorian-ligature-engraver.cc:75
 #, c-format
 msgid "implied \\%s added"
-msgstr "impliciete \\%s toegevoegd"
+msgstr "impliciede \\%s toegevoeg"
 
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:224
@@ -1761,38 +1977,36 @@ msgstr "kan `\\~' niet toepassen op noten met identieke toonhoogte"
 #: grob-interface.cc:68
 #, c-format
 msgid "Unknown interface `%s'"
-msgstr "onbekende interface `%s'"
+msgstr "onbekende interface '%s'"
 
 #: grob-interface.cc:79
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
-msgstr "Grob `%s' heeft geen interface voor eigenschap `%s'"
+msgstr "Grob '%s' heeft geen interface voor eigenschap '%s'"
 
-#: grob-property.cc:34
+#: grob-property.cc:35
 #, c-format
 msgid "%d: %s"
 msgstr "%d: %s"
 
-#: grob-property.cc:173
+#: grob.cc:488
 #, c-format
-msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)"
+msgid "ignored infinite %s-offset"
 msgstr ""
-"circulaire afhankelijkheid: calculation-in-progress tegengekomen voor #'%s "
-"(%s)"
 
-#: grob.cc:286
-msgid "Infinity or NaN encountered"
-msgstr "Oneindig of NaN tegengekomen"
+#: hairpin.cc:60
+msgid "Asking for broken bound padding at a non-broken bound."
+msgstr ""
 
-#: hairpin.cc:186
+#: hairpin.cc:256
 msgid "decrescendo too small"
 msgstr "decrescendo te klein"
 
-#: horizontal-bracket-engraver.cc:78
+#: horizontal-bracket-engraver.cc:62
 msgid "do not have that many brackets"
 msgstr "zoveel haken heb ik niet"
 
-#: horizontal-bracket-engraver.cc:87
+#: horizontal-bracket-engraver.cc:71
 msgid "conflicting note group events"
 msgstr "Tegenstrijdige nootgroeperingsgebeurtenissen"
 
@@ -1804,135 +2018,150 @@ msgstr "verwijderen van onafgesloten streepje"
 msgid "unterminated hyphen; removing"
 msgstr "verwijderen van onafgesloten streepje"
 
-#: includable-lexer.cc:71 lily-guile.cc:87 lily-parser-scheme.cc:109
+#: includable-lexer.cc:71 lily-guile.cc:91 lily-parser-scheme.cc:108
 #, c-format
 msgid "cannot find file: `%s'"
-msgstr "kan bestand niet vinden: `%s'"
+msgstr "kan bestand '%s' niet vinden"
 
 #: includable-lexer.cc:73 lily-parser-scheme.cc:100
 #, c-format
 msgid "(search path: `%s')"
-msgstr "(zoekpad: `%s')"
+msgstr "(zoekpad: '%s')"
 
-#: input.cc:131 source-file.cc:179 source-file.cc:194
+#: input.cc:138 source-file.cc:178 source-file.cc:193
 msgid "position unknown"
 msgstr "positie onbekend"
 
-#: key-signature-interface.cc:78
+#: key-engraver.cc:198
+msgid "Incomplete keyAlterationOrder for key signature"
+msgstr ""
+
+#: key-signature-interface.cc:77
 #, c-format
 msgid "No glyph found for alteration: %s"
-msgstr "Geen vorm gevonden voor verandering: %s"
+msgstr "Geen glief gevonden voor verandering: %s"
 
-#: key-signature-interface.cc:88
+#: key-signature-interface.cc:87
 msgid "alteration not found"
 msgstr "verandering niet gevonden"
 
-#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:104
+#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:109
 msgid "cannot find start of ligature"
 msgstr "kan begin van ligatuur niet vinden"
 
-#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:131
+#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:136
 msgid "already have a ligature"
 msgstr "heb al een ligatuur"
 
-#: ligature-engraver.cc:109
+#: ligature-engraver.cc:114
 msgid "no right bound"
 msgstr "geen rechterkant"
 
-#: ligature-engraver.cc:140
+#: ligature-engraver.cc:145
 msgid "no left bound"
 msgstr "geen linkerkant"
 
-#: ligature-engraver.cc:185
+#: ligature-engraver.cc:189
 msgid "unterminated ligature"
 msgstr "onbeëindigde ligatuur"
 
-#: ligature-engraver.cc:214
+#: ligature-engraver.cc:216
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "negeer rust: ligatuur mag geen rust bevatten"
 
-#: ligature-engraver.cc:215
+#: ligature-engraver.cc:217
 msgid "ligature was started here"
 msgstr "ligatuur werd hier gestart"
 
-#: lily-guile.cc:89
+#: lily-guile.cc:93
 #, c-format
 msgid "(load path: `%s')"
-msgstr "(zoekpad: `%s')"
+msgstr "(laadpad: '%s')"
 
-#: lily-guile.cc:437
+#: lily-guile.cc:412
 #, c-format
 msgid "cannot find property type-check for `%s' (%s)."
-msgstr "kan geen type-controle vinden voor property `%s' (%s)"
+msgstr "kan geen typecontrole vinden voor eigenschap '%s' (%s)"
 
-#: lily-guile.cc:440
+#: lily-guile.cc:415
 msgid "perhaps a typing error?"
 msgstr "misschien een typefout?"
 
-#: lily-guile.cc:447
-msgid "doing assignment anyway"
+#: lily-guile.cc:422
+#, fuzzy
+msgid "skipping assignment"
 msgstr "voer toewijzing toch door"
 
-#: lily-guile.cc:459
+#: lily-guile.cc:442
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
-msgstr "type controle gefaald voor `%s'; waarde `%s' moet type hebben: `%s'"
+msgstr "typecontrole is mislukt voor '%s'; waarde '%s' moet van type '%s' zijn"
 
-#: lily-lexer.cc:264
+#: lily-lexer.cc:249
 msgid "include files are not allowed in safe mode"
 msgstr "invoegbestanden zijn niet toegestaan in veilige modus"
 
-#: lily-lexer.cc:291
+#: lily-lexer.cc:276
 #, c-format
 msgid "identifier name is a keyword: `%s'"
-msgstr "identifier naam is een sleutelwoord: `%s'"
+msgstr "identifier-naam is een sleutelwoord: '%s'"
 
-#: lily-lexer.cc:312
+#: lily-lexer.cc:297 lily-lexer.cc:310
 #, c-format
-msgid "error at EOF: %s"
-msgstr "fout bij EOF: %s"
+msgid "%s:EOF"
+msgstr ""
 
-#: lily-parser-scheme.cc:82
+#: lily-parser-scheme.cc:80
 #, c-format
 msgid "Changing working directory to: `%s'"
-msgstr "Veranderen van werkmap naar: `%s'"
+msgstr "Veranderen van werkmap naar '%s'"
+
+#: lily-parser-scheme.cc:84
+#, c-format
+msgid "unable to change directory to: `%s'"
+msgstr "kan huidige map niet wijzigen naar '%s'"
 
 #: lily-parser-scheme.cc:99
 #, c-format
 msgid "cannot find init file: `%s'"
-msgstr "kan init bestand niet vinden: `%s'"
+msgstr "kan init-bestand '%s' niet vinden"
 
-#: lily-parser-scheme.cc:118
+#: lily-parser-scheme.cc:117
 #, c-format
 msgid "Processing `%s'"
-msgstr "Verwerken van `%s'"
+msgstr "Verwerken van '%s'"
 
-#: lily-parser-scheme.cc:204
-msgid ""
-"ly:parser-parse-string is only valid with a new parser.  Use ly:parser-"
-"include-string instead."
+#: lily-parser-scheme.cc:209
+msgid "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-include-string instead."
+msgstr ""
+
+#: lily-parser-scheme.cc:240
+msgid "ly:parse-string-expression is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr ""
 
-#: lily-parser.cc:106
+#: lily-parser.cc:107
 msgid "Parsing..."
 msgstr "Ontleden..."
 
-#: lily-parser.cc:134
-msgid "braces do not match"
-msgstr "haakjes paren niet"
+#: lookup.cc:181
+#, c-format
+msgid "Not drawing a box with negative dimension, %.2f by %.2f."
+msgstr ""
+
+#: lyric-combine-music-iterator.cc:199
+msgid "argument of \\lyricsto should contain Lyrics context"
+msgstr ""
 
 #: lyric-combine-music-iterator.cc:337
 #, c-format
 msgid "cannot find Voice `%s'"
-msgstr "kan Voice niet vinden: `%s'"
+msgstr "kan Voice '%s' niet vinden"
 
-#: lyric-engraver.cc:176
-msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice."
-msgstr ""
-"Liedtekst lettergreep heeft geen noot.  Gebruik \\lyricsto of "
-"associatedVoice."
+#: lyric-engraver.cc:186
+msgid "Lyric syllable does not have note.  Use \\lyricsto or associatedVoice."
+msgstr "Liedtekst-lettergreep heeft geen noot.  Gebruik \\lyricsto of associatedVoice."
 
-#: main.cc:109
+#: main.cc:104
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -1940,16 +2169,17 @@ msgid ""
 "under certain conditions.  Invoke as `%s --warranty' for more\n"
 "information.\n"
 msgstr ""
-"Dit is vrije programmatuur.  Het valt onder de GNU Algemene Openbare\n"
-"Licentie (General Public Licence), en u wordt uitgenodigd het te\n"
-"veranderen en/of te verspreiden onder bepaalde voorwaarden.  Roep aan\n"
-"als `%s --warranty' voor meer informatie.\n"
+"Dit is vrije programmatuur.  Het valt onder de GNU General Public License;\n"
+"u mag het onder zeer vrije voorwaarden wijzigen en verder verspreiden.\n"
+"Typ '%s --warranty' voor meer informatie.\n"
 
-#: main.cc:115
+#: main.cc:110
+#, fuzzy
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
-"modify it under the terms of the GNU General Public License version 2\n"
-"as published by the Free Software Foundation.\n"
+"modify it under the terms of the GNU General Public License as \n"
+"published by the Free Software Foundation, either version 3 of\n"
+"the License, or (at your option) any later version.\n"
 "\n"
 "    This program is distributed in the hope that it will be useful,\n"
 "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -1976,11 +2206,11 @@ msgstr ""
 "zoniet, schrijf dan naar de Free Software Foundation, Inc.,\n"
 "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:146
+#: main.cc:148
 msgid "SYM[=VAL]"
 msgstr "SYM[=WAARDE]"
 
-#: main.cc:147
+#: main.cc:149
 msgid ""
 "set Scheme option SYM to VAL (default: #t).\n"
 "Use -dhelp for help."
@@ -1988,41 +2218,41 @@ msgstr ""
 "zet Scheme optie SYM to WAARDE (standaard: #t)\n"
 "Gebruik -dhelp voor hulp."
 
-#: main.cc:150
+#: main.cc:153
 msgid "EXPR"
 msgstr "EXPR"
 
-#: main.cc:150
+#: main.cc:153
 msgid "evaluate scheme code"
 msgstr "evalueer scheme code"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:153
+#: main.cc:156
 msgid "FORMATs"
 msgstr "FORMAATen"
 
-#: main.cc:153
+#: main.cc:156
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr "dump FORMAAT,...  Ook als separate opties:"
 
-#: main.cc:154
+#: main.cc:157
 msgid "generate PDF (default)"
 msgstr "genereer PDF (standaard)"
 
-#: main.cc:155
+#: main.cc:158
 msgid "generate PNG"
 msgstr "genereer PNG"
 
-#: main.cc:156
+#: main.cc:159
 msgid "generate PostScript"
 msgstr "genereer PostScipt"
 
-#: main.cc:158
+#: main.cc:162
 msgid "FIELD"
 msgstr "VELD"
 
-#: main.cc:158
+#: main.cc:162
 msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
@@ -2030,19 +2260,19 @@ msgstr ""
 "schrijf kopveld VELD naar bestand\n"
 "genaamd BASISNAAM.VELD"
 
-#: main.cc:160
+#: main.cc:165
 msgid "add DIR to search path"
 msgstr "voeg DIR toe aan zoekpad"
 
-#: main.cc:161
+#: main.cc:166
 msgid "use FILE as init file"
 msgstr "gebruik BESTAND als initialisatiebestand"
 
-#: main.cc:163
+#: main.cc:169
 msgid "USER, GROUP, JAIL, DIR"
 msgstr "GEBR, GROEP, GEVANG, DIR"
 
-#: main.cc:163
+#: main.cc:169
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
@@ -2050,16 +2280,34 @@ msgstr ""
 "chroot naar GEVANG, word GEBR:GROEP\n"
 "en cd naar MAP"
 
-#: main.cc:166
+#: main.cc:174
+msgid ""
+"print log messages according to LOGLEVEL.  Possible values are:\n"
+"NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
+msgstr ""
+
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
-msgstr "schrijf uitvoer naar BESTAND (extensie wordt toegevoegd)"
+msgstr ""
+"schrijf uitvoer naar BESTAND\n"
+"(extensie wordt toegevoegd)"
 
-#: main.cc:167
+#: main.cc:179
 msgid "relocate using directory of lilypond program"
-msgstr "verhuis aan de hand van de map van het lilypond programma"
+msgstr ""
+"verhuis aan de hand van de map van het\n"
+"lilypond programma"
+
+#: main.cc:180
+msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
+msgstr ""
+
+#: main.cc:182
+msgid "be verbose (equivalent to loglevel=DEBUG)"
+msgstr ""
 
 #. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:238
+#: main.cc:261
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -2069,112 +2317,112 @@ msgstr ""
 "%s  en anderen."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:265
+#: main.cc:299
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Gebruik: %s [OPTIE]... BESTAND..."
 
-#: main.cc:267
+#: main.cc:301
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Zet muziek en of produceer MIDI van BESTAND."
 
-#: main.cc:269
+#: main.cc:303
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond produceert prachtige muzieknotatie."
 
-#: main.cc:271
+#: main.cc:305
 #, c-format
 msgid "For more information, see %s"
 msgstr "Voor meer informatie, zie %s"
 
-#: main.cc:273
+#: main.cc:307
 msgid "Options:"
 msgstr "Opties:"
 
-#: main.cc:327
+#: main.cc:374
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "verwachtte %d argumenten voor gevang, gevonden: %u"
 
-#: main.cc:341
+#: main.cc:388
 #, c-format
 msgid "no such user: %s"
 msgstr "onbekende gebruiker: %s"
 
-#: main.cc:343
+#: main.cc:390
 #, c-format
 msgid "cannot get user id from user name: %s: %s"
 msgstr "kan gebruikers id niet krijgen van gebruikersnaam: %s: %s"
 
-#: main.cc:358
+#: main.cc:405
 #, c-format
 msgid "no such group: %s"
 msgstr "onbekende groep: %s"
 
-#: main.cc:360
+#: main.cc:407
 #, c-format
 msgid "cannot get group id from group name: %s: %s"
 msgstr "kan groep id niet krijgen van groepnaam: %s: %s"
 
-#: main.cc:368
+#: main.cc:415
 #, c-format
 msgid "cannot chroot to: %s: %s"
 msgstr "kan niet chrooten naar: %s: %s"
 
-#: main.cc:375
+#: main.cc:422
 #, c-format
 msgid "cannot change group id to: %d: %s"
 msgstr "kan groep id niet veranderen in: %d: %s"
 
-#: main.cc:381
+#: main.cc:428
 #, c-format
 msgid "cannot change user id to: %d: %s"
-msgstr "kan gebruiker id niet veranderen in: %d: %s"
+msgstr "kan kan gebruiker id niet veranderen in: %d: %s"
 
-#: main.cc:387
+#: main.cc:434
 #, c-format
 msgid "cannot change working directory to: %s: %s"
 msgstr "kan werkmap niet veranderen in: %s: %s"
 
-#: main.cc:628
+#: main.cc:805
 #, c-format
 msgid "exception caught: %s"
 msgstr "exceptie gevangen: %s"
 
 #. FIXME: constant error message.
-#: mark-engraver.cc:157
+#: mark-engraver.cc:156
 msgid "rehearsalMark must have integer value"
 msgstr "rehearsalMark moet een natuurlijk getal zijn"
 
-#: mark-engraver.cc:163
+#: mark-engraver.cc:162
 msgid "mark label must be a markup object"
 msgstr "mark etiket moet een markup zijn"
 
-#: mensural-ligature-engraver.cc:96
+#: mensural-ligature-engraver.cc:100
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "ligatuur met minder dan 2 bolletjes -> overslaan"
 
-#: mensural-ligature-engraver.cc:123
+#: mensural-ligature-engraver.cc:127
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "kan toonhoogte van primitieve ligatuur niet bepalen -> overslaan"
 
-#: mensural-ligature-engraver.cc:137
+#: mensural-ligature-engraver.cc:141
 msgid "single note ligature - skipping"
 msgstr "enkelnootse ligatuur - overslaan"
 
-#: mensural-ligature-engraver.cc:148
+#: mensural-ligature-engraver.cc:152
 msgid "prime interval within ligature -> skipping"
 msgstr "prieminterval binnen ligatuur -> overslaan"
 
-#: mensural-ligature-engraver.cc:159
+#: mensural-ligature-engraver.cc:163
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
-msgstr "mensurale ligatuur: lengte geen van Mx, L, S -> overslaan"
+msgstr "mensural ligature: lengte geen van Mx, L, S -> overslaan"
 
-#: mensural-ligature-engraver.cc:202
+#: mensural-ligature-engraver.cc:206
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr "semibrevis moet worden gevolgd door een andere -> overslaan"
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:216
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
@@ -2182,7 +2430,7 @@ msgstr ""
 "semibrevi kunnen alleen aan het begin van een ligatuur voorkomen,\n"
 "en het mogen er uitsluitend een of twee zijn"
 
-#: mensural-ligature-engraver.cc:232
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -2191,140 +2439,127 @@ msgid ""
 msgstr ""
 "ongeldig ligatuur einde:\n"
 "als de laatste noot een dalende brevis is,\n"
-"moet de voorlaatste noot een andere zijn,\n"
+"moet de penultimate note een andere zijn,\n"
 "of de ligatuur moet LB of SSB zijn"
 
-#: mensural-ligature-engraver.cc:386
+#: mensural-ligature-engraver.cc:396
 msgid "unexpected case fall-through"
 msgstr "onverwachte zaakdoorval"
 
-#: mensural-ligature.cc:171
-msgid "Mensural_ligature: unexpected case fall-through"
-msgstr "Mensural_ligature: onverwachte zaakdoorval"
-
-#: mensural-ligature.cc:233
-msgid "Mensural_ligature: (join_right == 0)"
-msgstr "Mensural_ligature: (join_right) == 0)"
+#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#, c-format
+msgid "ignoring out-of-range value change for MIDI property `%s'"
+msgstr ""
 
-#: midi-item.cc:92
+#: midi-item.cc:93
 #, c-format
 msgid "no such MIDI instrument: `%s'"
 msgstr "onbekend MIDI instrument: `%s'"
 
-#: midi-stream.cc:39
+#: midi-item.cc:179
+msgid "Time signature with more than 255 beats.  Truncating"
+msgstr ""
+
+#: midi-stream.cc:38
 #, c-format
 msgid "cannot open for write: %s: %s"
 msgstr "kan bestand niet openen om te schrijven: %s: %s"
 
-#: midi-stream.cc:55
+#: midi-stream.cc:54
 #, c-format
 msgid "cannot write to file: `%s'"
-msgstr "kan niet naar bestand schrijven: `%s'"
+msgstr "kon niet naar bestand schrijven: `%s'"
 
 #: minimal-page-breaking.cc:40 paper-score.cc:122
 msgid "Calculating line breaks..."
-msgstr "Berekenen van regelafbreuken..."
+msgstr "Berekenen van regelbreuken..."
 
 #: minimal-page-breaking.cc:44
 msgid "Calculating page breaks..."
-msgstr "Berekenen van pagina-afbreuken..."
+msgstr "Berekenen van paginabreuken..."
 
-#: music-iterator.cc:182
-msgid "Sending non-event to context"
-msgstr "Zenden van niet-gebeurtenis naar context"
+#: multi-measure-rest.cc:154
+msgid "usable-duration-logs must be a non-empty list.  Falling back to whole rests."
+msgstr ""
 
-#: music.cc:151
+#: multi-measure-rest.cc:364
+msgid "Using naive multi measure rest spacing."
+msgstr ""
+
+#: music.cc:150
 #, c-format
 msgid "octave check failed; expected \"%s\", found: \"%s\""
-msgstr "octaafcontrole gefaald; verwachtte \"%s\", vond: \"%s\""
+msgstr "octaafcontrole is mislukt; verwachtte \"%s\", vond \"%s\""
 
 #: music.cc:219
 msgid "(normalized pitch)"
-msgstr ""
+msgstr "(genormaliseerde toonhoogte)"
 
 #: music.cc:223
 #, c-format
 msgid "Transposing %s by %s makes alteration larger than double"
-msgstr "Transponeren van %s met %s maakt voorteken groter dan dubbel"
+msgstr "Transponeren van %s met %s maakt verandering groter dan dubbel"
 
-#: new-dynamic-engraver.cc:142
-#, c-format
-msgid ""
-"unknown crescendo style: %s\n"
-"defaulting to hairpin."
-msgstr ""
-"onbekende crescendo stijl: %s\n"
-"standaard haarspeld wordt gebruikt"
-
-#: new-dynamic-engraver.cc:200
-#, c-format
-msgid "unterminated %s"
-msgstr "onbeëindigd %s"
-
-#: new-fingering-engraver.cc:106
+#: new-fingering-engraver.cc:113
 msgid "cannot add text scripts to individual note heads"
-msgstr "kan tekstscripts niet toevoegen aan individuele notenbolletjes"
+msgstr "can tekstscripts niet toevoegen aan individuele notenbolletjes"
 
-#: new-fingering-engraver.cc:250
+#: new-fingering-engraver.cc:269
 msgid "no placement found for fingerings"
-msgstr "geen plaatsing gevonden voor vingerzetting"
+msgstr "geen plaatsing gevonden voor vingers"
 
-#: new-fingering-engraver.cc:251
+#: new-fingering-engraver.cc:270
 msgid "placing below"
-msgstr "plaats onder"
+msgstr "onderplaatsing"
 
 #: note-collision.cc:497
 msgid "ignoring too many clashing note columns"
-msgstr "negeren van te veel botsende nootkolommen."
+msgstr "negeren van te veel botsende nootkolommen"
 
-#: note-column.cc:135
+#: note-column.cc:147
 msgid "cannot have note heads and rests together on a stem"
 msgstr "kan notenbolletjes en rusten niet samen op een stok zetten"
 
-#: note-head.cc:76
+#: note-head.cc:95
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
-msgstr "geen van notenbolletjes `%s' of `%s' gevonden"
+msgstr "geen van de notenbolletjes '%s' of '%s' is gevonden"
 
 #: note-heads-engraver.cc:76
 msgid "NoteEvent without pitch"
 msgstr "NootGebeurtenis zonder toonhoogte"
 
-#: open-type-font.cc:44
+#: open-type-font.cc:45
 #, c-format
 msgid "cannot allocate %lu bytes"
-msgstr "kan geen %lu bytes toewijzen"
+msgstr "kan geen %lu bytes reserveren"
 
-#: open-type-font.cc:48
+#: open-type-font.cc:49
 #, c-format
 msgid "cannot load font table: %s"
-msgstr "kan fonttabel niet laden: %s"
+msgstr "kan font-tabel niet laden: %s"
 
-#: open-type-font.cc:53
+#: open-type-font.cc:54
 #, c-format
 msgid "FreeType error: %s"
-msgstr "FreeType fout: %s"
+msgstr "FreeType-fout: %s"
 
 #: open-type-font.cc:111
 #, c-format
 msgid "unsupported font format: %s"
-msgstr "niet-ondersteund font formaat: %s"
+msgstr "niet-ondersteund font-formaat: %s"
 
 #: open-type-font.cc:113
 #, c-format
 msgid "error reading font file %s: %s"
-msgstr "fout bij lezen van font bestand %s: %s"
+msgstr "fout bij lezen van font-bestand %s: %s"
 
 #: open-type-font.cc:188
 #, c-format
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr "FT_Get_Glyph_Name () Freetype fout: %s"
 
-#: open-type-font.cc:250
-msgid "Invalid index for character"
-msgstr "Ongeldige index voor teken"
-
-#: open-type-font.cc:319 pango-font.cc:187
+#: open-type-font.cc:336 pango-font.cc:256
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
 msgstr "FT_Get_Glyph_Name () fout: %s"
@@ -2334,82 +2569,73 @@ msgstr "FT_Get_Glyph_Name () fout: %s"
 msgid "Finding the ideal number of pages..."
 msgstr "Zoeken naar het ideale aantal pagina's..."
 
-#: optimal-page-breaking.cc:85
-msgid ""
-"could not satisfy systems-per-page and page-count at the same time, ignoring "
-"systems-per-page"
+#: optimal-page-breaking.cc:94
+msgid "could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page"
 msgstr ""
 
-#: optimal-page-breaking.cc:105
+#: optimal-page-breaking.cc:114
 msgid "Fitting music on 1 page..."
 msgstr "Muziek passend maken op 1 pagina..."
 
-#: optimal-page-breaking.cc:107
+#: optimal-page-breaking.cc:116
 #, c-format
 msgid "Fitting music on %d pages..."
 msgstr "Muziek passend maken op %d pagina's..."
 
-#: optimal-page-breaking.cc:109
+#: optimal-page-breaking.cc:118
 #, c-format
 msgid "Fitting music on %d or %d pages..."
 msgstr "Muziek passend maken op %d of %d pagina's..."
 
-#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:173
+#: optimal-page-breaking.cc:128 optimal-page-breaking.cc:181
 #, c-format
 msgid "trying %d systems"
 msgstr "proberen van %d systemen"
 
-#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:201
+#: optimal-page-breaking.cc:147 optimal-page-breaking.cc:209
 #, c-format
 msgid "best score for this sys-count: %f"
 msgstr ""
 
-#: optimal-page-breaking.cc:208 page-turn-page-breaking.cc:248
-#: paper-score.cc:163
+#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248
+#: paper-score.cc:162
 msgid "Drawing systems..."
 msgstr "Tekenen van systemen..."
 
 #: output-def.cc:235
 msgid "margins do not fit with line-width, setting default values"
 msgstr ""
-"kantlijnen passen niet met regellengte, standaardwaarden worden ingesteld"
 
 #: output-def.cc:242
-msgid ""
-"systems run off the page due to improper paper settings, setting default "
-"values"
+msgid "systems run off the page due to improper paper settings, setting default values"
 msgstr ""
 
-#: page-breaking.cc:248
-msgid ""
-"ignoring min-systems-per-page and max-systems-per-page because systems-per-"
-"page was set"
+#: page-breaking.cc:277
+msgid "ignoring min-systems-per-page and max-systems-per-page because systems-per-page was set"
 msgstr ""
 
-#: page-breaking.cc:253
-msgid ""
-"min-systems-per-page is larger than max-systems-per-page, ignoring both "
-"values"
+#: page-breaking.cc:282
+msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values"
 msgstr ""
 
-#: page-layout-problem.cc:322
-msgid ""
-"couldn't fit music on page: ragged-spacing was requested, but page was "
-"compressed"
+#: page-layout-problem.cc:402
+msgid "A page layout problem has been initiated that cannot accommodate footnotes."
 msgstr ""
-"kan muziek niet op pagina passen: ragged-spatiëring was gevraagd,\n"
-"maar pagina was gecomprimeerd"
 
-#: page-layout-problem.cc:325
+#: page-layout-problem.cc:731
+msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed"
+msgstr ""
+
+#: page-layout-problem.cc:734
 #, c-format
-msgid "couldn't fit music on page: overflow is %f"
-msgstr "kan muziek niet passend maken op 1 pagina: overflow is %f"
+msgid "cannot fit music on page: overflow is %f"
+msgstr ""
 
-#: page-layout-problem.cc:327
+#: page-layout-problem.cc:736
 msgid "compressing music to fit"
 msgstr ""
 
-#: page-layout-problem.cc:765
+#: page-layout-problem.cc:1199
 msgid "staff-affinities should only decrease"
 msgstr ""
 
@@ -2419,17 +2645,15 @@ msgid "page-turn-page-breaking: breaking from %d to %d"
 msgstr "page-turn-page-breaking: afbreken van %d naar %d"
 
 #: page-turn-page-breaking.cc:217
-msgid ""
-"cannot fit the first page turn onto a single page.  Consider setting first-"
-"page-number to an even number."
+msgid "cannot fit the first page turn onto a single page.  Consider setting first-page-number to an even number."
 msgstr ""
-"kan de eerste paginaomslag niet op eerste pagina gepast krijgen.  Overweeg\n"
-"first-page-number op een even getal te zetten."
+"Kan de eerste paginaomslag niet op eerste pagina gepast krijgen.\n"
+"Overweeg om 'first-page-number' een even getal te maken."
 
 #: page-turn-page-breaking.cc:230
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
-msgstr "Berekenen van pagina en regelbreuken (%d mogelijke pagina breuken)..."
+msgstr "Berekenen van pagina- en regelbreuken (%d mogelijke paginabreuken)..."
 
 #: page-turn-page-breaking.cc:300
 #, c-format
@@ -2456,23 +2680,28 @@ msgstr "\taantal bladzijden: %d"
 msgid "\tprevious break: %d"
 msgstr "\tvorige breuk: %d"
 
-#: pango-font.cc:204
+#: pango-font.cc:245
+#, c-format
+msgid "no glyph for character U+%0X in font `%s'"
+msgstr "geen glief voor teken U+%0X in font '%s'"
+
+#: pango-font.cc:272
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
 "Skipping glyph U+%0X, file %s"
 msgstr ""
-"Vorm heeft geen naam, terwijl het font vormnamen ondersteunt<\n"
-"Overslaan van vorm U+%0X, bestand %s"
+"Glief heeft geen naam, terwijl het font gliefnamen ondersteunt.\n"
+"Glief U+%0X, bestand %s, wordt overgeslagen."
 
-#: pango-font.cc:241
+#: pango-font.cc:322
 #, c-format
 msgid "no PostScript font name for font `%s'"
-msgstr "geen PostScript fontnaam voor font: `%s'"
+msgstr "geen PostScript-font-naam voor font '%s'"
 
-#: pango-font.cc:290
+#: pango-font.cc:372
 msgid "FreeType face has no PostScript font name"
-msgstr "FreeType gezicht heeft geen PostScript fontnaam"
+msgstr "FreeType-lettertype heeft geen PostScript-font-naam"
 
 #: paper-book.cc:214
 #, c-format
@@ -2484,29 +2713,25 @@ msgstr ""
 msgid "program option -dpreview not supported by backend `%s'"
 msgstr ""
 
-#: paper-column-engraver.cc:245
-msgid ""
-"forced break was overridden by some other event, should you be using bar "
-"checks?"
-msgstr ""
-"geforceerde breuk werd opgeheven door andere gebeurtenis, misschien moet je "
-"maatcontrole gebruiken?"
+#: paper-column-engraver.cc:263
+msgid "forced break was overridden by some other event, should you be using bar checks?"
+msgstr "geforceerde breuk werd opgeheven door andere gebeurtenis; dient u maatcontroles te gebruiken?"
 
 #: paper-outputter-scheme.cc:41
 #, c-format
 msgid "Layout output to `%s'..."
 msgstr "Opmaakuitvoer naar `%s'..."
 
-#: paper-score.cc:135
+#: paper-score.cc:134
 #, c-format
 msgid "Element count %d (spanners %d) "
 msgstr "Aantal elementen %d (spanners %d)"
 
-#: paper-score.cc:139
+#: paper-score.cc:138
 msgid "Preprocessing graphical objects..."
 msgstr "Voorbewerken van grafische objecten..."
 
-#: parse-scm.cc:101
+#: parse-scm.cc:121
 msgid "GUILE signaled an error for the expression beginning here"
 msgstr "GUILE signaleerde een fout voor de expressie beginnend alhier"
 
@@ -2514,7 +2739,12 @@ msgstr "GUILE signaleerde een fout voor de expressie beginnend alhier"
 msgid "trying to use \\partial after the start of a piece"
 msgstr ""
 
-#: percent-repeat-engraver.cc:148
+#: pdf-scheme.cc:65
+#, c-format
+msgid "Conversion of string `%s' to UTF-16be failed: %s"
+msgstr ""
+
+#: percent-repeat-engraver.cc:147
 msgid "unterminated percent repeat"
 msgstr "onbeëindigde procentherhaling"
 
@@ -2522,69 +2752,60 @@ msgstr "onbeëindigde procentherhaling"
 msgid "Track..."
 msgstr "Spoor... "
 
-#: performance.cc:83
-msgid "MIDI channel wrapped around"
-msgstr "MIDI kanaal is klokje rond"
-
-#: performance.cc:84
-msgid "remapping modulo 16"
-msgstr "herafbeelden modulo 16"
-
-#: performance.cc:111
+#: performance.cc:82
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "MIDI uitvoer naar %s..."
 
-#: phrasing-slur-engraver.cc:157
-msgid "unterminated phrasing slur"
-msgstr "onbeëindigde fraseringsboog"
-
-#: piano-pedal-engraver.cc:298
+#: piano-pedal-engraver.cc:279
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr "verwacht 3 teksten voor pianopedalen, gevonden: %ld"
 
-#: piano-pedal-engraver.cc:313 piano-pedal-engraver.cc:324
+#: piano-pedal-engraver.cc:294 piano-pedal-engraver.cc:305
 #: piano-pedal-performer.cc:104
 #, c-format
 msgid "cannot find start of piano pedal: `%s'"
 msgstr "kan start van piano pedaal niet vinden: `%s'"
 
-#: piano-pedal-engraver.cc:359
+#: piano-pedal-engraver.cc:340
 #, c-format
 msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "kan start van piano pedaal haak niet vinden: `%s'"
 
-#: program-option-scheme.cc:237
+#: program-option-scheme.cc:223
 #, c-format
 msgid "no such internal option: %s"
 msgstr "onbekende interne optie: %s"
 
-#: property-iterator.cc:85
+#: property-iterator.cc:100
 #, c-format
 msgid "not a grob name, `%s'"
 msgstr "geen grobnaam, `%s'"
 
 #: relative-octave-check.cc:49
 msgid "Failed octave check, got: "
-msgstr "Octaafcontrole gefaald, heb:"
+msgstr "Octaafcontrole is mislukt; kreeg:"
 
-#: relocate.cc:54
+#: relocate.cc:52
 #, c-format
 msgid "Setting %s to %s"
 msgstr "Zetten van %s op %s"
 
-#: relocate.cc:74
+#. this warning should only be printed in debug mode!
+#: relocate.cc:73
 #, c-format
 msgid "no such file: %s for %s"
 msgstr "onbekend bestand: %s voor %s"
 
+#. this warning should only be printed in debug mode!
+#. this warning should only be printed in debug mode
 #: relocate.cc:84 relocate.cc:102
 #, c-format
 msgid "no such directory: %s for %s"
 msgstr "onbekende map: %s voor %s"
 
-#: relocate.cc:94
+#: relocate.cc:93
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr "%s=%s (voorvoegen)\n"
@@ -2594,50 +2815,50 @@ msgstr "%s=%s (voorvoegen)\n"
 msgid "not relocating, no %s/ or current/ found under %s"
 msgstr "niet verhuizen, geen %s/ of current/ gevonden onder %s"
 
-#: relocate.cc:135
+#: relocate.cc:134
 #, c-format
 msgid "Relocation: compile datadir=%s, new datadir=%s"
 msgstr "Verhuizing: samenstel datamap=%s, nieuwe datamap=%s"
 
-#: relocate.cc:148
+#: relocate.cc:146
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr "Verhuizing: draadwerk_voorvoegel=%s"
 
-#: relocate.cc:189
+#: relocate.cc:172
 #, c-format
-msgid "Relocation: is absolute: argv0=%s"
-msgstr "Verhuizing: is absoluut: argv0=%s"
+msgid "Relocation: is absolute: argv0=%s\n"
+msgstr "Verhuizing: is absoluut: argv0=%s\n"
 
-#: relocate.cc:196
+#: relocate.cc:178
 #, c-format
-msgid "Relocation: from cwd: argv0=%s"
-msgstr "Verhuizing: van cwd: argv0=%s"
+msgid "Relocation : from cwd: argv0=%s\n"
+msgstr "Verhuizing: van cwd: argv0=%s\n"
 
-#: relocate.cc:213
+#: relocate.cc:194
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 msgstr ""
 "Verhuizing: van PATH=%s\n"
-"argv0=%s"
+"argv0=%s\n"
 
-#: relocate.cc:240
+#: relocate.cc:220
 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
 msgstr "LILYPONDPREFIX is verouderd, gebruik LILYPOND_DATADIR"
 
-#: relocate.cc:367
+#: relocate.cc:345
 #, c-format
 msgid "Relocation file: %s"
 msgstr "Verhuisbestand: %s"
 
-#: relocate.cc:373 source-file.cc:65
+#: relocate.cc:349 source-file.cc:65
 #, c-format
 msgid "cannot open file: `%s'"
-msgstr "kan bestand niet openen: `%s'"
+msgstr "kan bestand niet openen: '%s'"
 
-#: relocate.cc:403
+#: relocate.cc:379
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr "Onbekend verhuizingscommando %s"
@@ -2646,141 +2867,161 @@ msgstr "Onbekend verhuizingscommando %s"
 msgid "rhythmic head is not part of a rhythmic column"
 msgstr ""
 
-#: rest-collision.cc:146
+#: rest-collision.cc:150
 msgid "cannot resolve rest collision: rest direction not set"
-msgstr "kan rust botsing niet oplossen: richting van de rust is niet gezet"
+msgstr "kan rusten-botsing niet oplossen: richting van de rust is niet ingesteld"
 
-#: rest-collision.cc:160 rest-collision.cc:205
+#: rest-collision.cc:161 rest-collision.cc:270
 msgid "too many colliding rests"
 msgstr "te veel botsende rusten"
 
-#: rest.cc:159
+#: rest.cc:240
 #, c-format
 msgid "rest `%s' not found"
-msgstr "rust `%s' niet gevonden"
+msgstr "rust '%s' is niet gevonden"
 
 #: score-engraver.cc:78
 #, c-format
 msgid "cannot find `%s'"
-msgstr "kan niet vinden `%s'"
+msgstr "kan '%s' niet vinden"
 
 #: score-engraver.cc:80
 msgid "Music font has not been installed properly."
-msgstr "Muziekfont is niet correct geïnstalleerd."
+msgstr "Muziek-font is niet correct geïnstalleerd."
 
 #: score-engraver.cc:82
 #, c-format
 msgid "Search path `%s'"
-msgstr "Zoekpad: `%s'"
+msgstr "Zoekpad: '%s'"
 
 #: score-engraver.cc:84
 msgid "Aborting"
 msgstr "Afbreken"
 
-#: score.cc:178
+#: score.cc:172
 msgid "already have music in score"
-msgstr "heb al muziek in score"
+msgstr "heb al muziek in partituur"
 
-#: score.cc:179
+#: score.cc:173
 msgid "this is the previous music"
 msgstr "dit is de vorige muziek"
 
-#: score.cc:184
+#: score.cc:178
 msgid "errors found, ignoring music expression"
 msgstr "fouten gevonden, negeer muziekexpressie"
 
 #. FIXME:
-#: script-engraver.cc:113
+#: script-engraver.cc:115
+#, fuzzy
 msgid "do not know how to interpret articulation:"
 msgstr "weet niet hoe articulatie te vertolken: "
 
-#: script-engraver.cc:114
+#: script-engraver.cc:116
+#, fuzzy
 msgid " scheme encoding: "
 msgstr "scheme codering: "
 
-#: slur-engraver.cc:93
+#: skyline-pair.cc:160
+msgid "direction must not be CENTER in ly:skyline-pair::skyline"
+msgstr ""
+
+#: slur-proto-engraver.cc:51
 #, c-format
 msgid "direction of %s invalid: %d"
-msgstr "richting van %s ongeldig: %d"
+msgstr "richting van %s is ongeldig: %d"
 
-#: slur-engraver.cc:162
-msgid "unterminated slur"
-msgstr "onbeëindigde bindingsboog"
+#. We already have an old slur, so give a warning
+#. and completely ignore the new slur.
+#: slur-proto-engraver.cc:166
+#, c-format
+msgid "already have %s"
+msgstr "heb al een %s"
 
-#: slur-engraver.cc:174
-msgid "cannot end slur"
-msgstr "kan legatoboog niet beëindigen"
+#: slur-proto-engraver.cc:183
+#, c-format
+msgid "%s without a cause"
+msgstr ""
 
-#: slur.cc:362
+#: slur-proto-engraver.cc:244
 #, c-format
-msgid "Ignoring grob for slur: %s. avoid-slur not set?"
+msgid "cannot end %s"
+msgstr "kan %s niet beëindigen"
+
+#: slur.cc:434
+#, fuzzy, c-format
+msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
 msgstr "Negeren van grob voor boogje: %s.  avoid-slur niet gezet?"
 
 #: source-file.cc:85
 #, c-format
 msgid "expected to read %d characters, got %d"
-msgstr "verwacht %d karakters te lezen, kreeg %d"
+msgstr "verwachtte %d tekens te lezen, kreeg %d"
 
-#: spaceable-grob.cc:94
-#, c-format
-msgid "No spring between column %d and next one"
-msgstr "Geen veer tussen kolom %d en de volgende"
+#: staff-performer.cc:301
+msgid "MIDI channel wrapped around"
+msgstr "MIDI-kanaal is klokje rond"
+
+#: staff-performer.cc:302
+msgid "remapping modulo 16"
+msgstr "herafbeelden modulo 16"
 
-#: stem-engraver.cc:103
+#: stem-engraver.cc:110
 msgid "tremolo duration is too long"
 msgstr "tremololengte is te lang"
 
-#. FIXME:
-#: stem-engraver.cc:140
+#: stem-engraver.cc:162
 #, c-format
-msgid "adding note head to incompatible stem (type = %d)"
-msgstr "voeg nootbolletje toe aan onverenigbare stok (type = %d)"
+msgid "adding note head to incompatible stem (type = %d/%d)"
+msgstr "toevoegen van nootbolletje aan incompatibele stok (type = %d/%d)"
 
-#: stem-engraver.cc:142
+#: stem-engraver.cc:165
 msgid "maybe input should specify polyphonic voices"
 msgstr "misschien moet invoer polyfonische stemmen specificeren"
 
-#: stem.cc:116
+#: stem.cc:128
 msgid "weird stem size, check for narrow beams"
 msgstr "vreemde stoklengte; controleer op krappe waardestrepen"
 
-#: stem.cc:657
+#: system.cc:201
 #, c-format
-msgid "flag `%s' not found"
-msgstr "vlag `%s' niet gevonden"
+msgid "Element count %d"
+msgstr "Aantal elementen: %d"
 
-#: stem.cc:673
+#: system.cc:512
 #, c-format
-msgid "flag stroke `%s' not found"
-msgstr "vlag streep `%s' niet gevonden"
+msgid "Grob count %d"
+msgstr "Aantal grobs: %d"
 
-#: system.cc:197
+#. TODO: Also print the arguments of the markup!
+#: text-interface.cc:129
 #, c-format
-msgid "Element count %d"
-msgstr "Aantal elementen %d"
+msgid "Cyclic markup detected: %s"
+msgstr ""
 
-#: system.cc:303
+#. TODO: Also print the arguments of the markup!
+#: text-interface.cc:142
 #, c-format
-msgid "Grob count %d"
-msgstr "Aantal grobs %d"
+msgid "Markup depth exceeds maximal value of %d; Markup: %s"
+msgstr ""
 
-#: text-spanner-engraver.cc:73
+#: text-spanner-engraver.cc:72
 msgid "cannot find start of text spanner"
-msgstr "kan start van tekst spanner niet vinden"
+msgstr "kan start van tekst-spanner niet vinden"
 
-#: text-spanner-engraver.cc:86
+#: text-spanner-engraver.cc:85
 msgid "already have a text spanner"
-msgstr "heb al een tekst spanner"
+msgstr "heb al een tekst-spanner"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:130
 msgid "unterminated text spanner"
 msgstr "onbeëindigde tekst spanner"
 
-#: tie-engraver.cc:116
+#: tie-engraver.cc:119
+#, fuzzy
 msgid "unterminated tie"
-msgstr "onbeëindigde overbinding"
+msgstr "onbeëindigde waardestreep"
 
-#: tie-engraver.cc:312
+#: tie-engraver.cc:353
 msgid "lonely tie"
 msgstr "eenzame overbinding"
 
@@ -2796,328 +3037,449 @@ msgstr "vreemde maatsoort gevonden: %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:94
+#: time-signature.cc:89
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
-msgstr "maatsoortsymbool `%s' niet gevonden; val terug op numerieke stijl"
+msgstr "maatsoort-symbool '%s' niet gevonden;  teruggevallen op numerieke stijl"
 
 #: translator-ctors.cc:65
 #, c-format
 msgid "unknown translator: `%s'"
-msgstr "onbekende translator: `%s'"
+msgstr "onbekende vertaler: '%s'"
 
 #: translator-group-ctors.cc:40
 #, c-format
-msgid "fatal error. Couldn't find type: %s"
-msgstr "fatale fout.  Kan type niet vinden: %s"
+msgid "fatal error.  Couldn't find type: %s"
+msgstr "Fatale fout.  Kan type niet vinden: %s"
 
 #: translator-group.cc:188
 #, c-format
 msgid "cannot find: `%s'"
-msgstr "kan niet vinden: `%s'"
+msgstr "kan niet vinden: '%s'"
 
-#: translator.cc:359
+#: translator.cc:326
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
-msgstr "Twee gelijktijdige %s gebeurtenissen, verschroot deze"
+msgstr "Twee gelijktijdige %s-gebeurtenissen;  deze ene wordt weggegooid"
 
-#: translator.cc:360
+#: translator.cc:327
 #, c-format
 msgid "Previous %s event here"
-msgstr "Vorige %s gebeurtenis hier"
+msgstr "Vorige %s-gebeurtenis hier"
 
-#: ttf.cc:481 ttf.cc:530
+#: ttf.cc:480 ttf.cc:528
 #, c-format
 msgid "font index %d too large for font `%s', using index 0"
-msgstr ""
+msgstr "font-index %d is te groot voor font '%s';  index 0 wordt gebruikt"
 
-#: ttf.cc:513 ttf.cc:565
+#: ttf.cc:512 ttf.cc:562
 msgid "font index must be non-negative, using index 0"
-msgstr ""
+msgstr "font-index mag niet negatief zijn;  index 0 wordt gebruikt"
 
-#: tuplet-engraver.cc:107
+#: tuplet-engraver.cc:110
 msgid "No tuplet to end"
 msgstr "Geen tuplet om te beëindigen"
 
 #: vaticana-ligature-engraver.cc:400
 #, c-format
-msgid ""
-"ignored prefix(es) `%s' of this head according to restrictions of the "
-"selected ligature style"
+msgid "ignored prefix(es) `%s' of this head according to restrictions of the selected ligature style"
+msgstr "voorvoegsel(s) '%s' van dit bolletje worden genegeerd volgens restricties van degeselecteerde ligatuurstijl"
+
+#: vaticana-ligature-engraver.cc:466
+msgid "Ambiguous use of dots in ligature: there are multiple dotted notes with the same pitch.  The ligature should be split."
+msgstr ""
+
+#: vaticana-ligature-engraver.cc:524
+msgid "This ligature has a dotted head followed by a non-dotted head.  The ligature should be split after the last dotted head before this head."
 msgstr ""
-"negeren van voorvoegsel(s) `%s' van dit bolletje volgens restricties van de\n"
-"geselecteerde ligatuurstijl"
 
 #: vaticana-ligature-engraver.cc:736
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
-msgstr ""
-"Vaticana_ligature_engraver: instelling `spacing-increment = %f': ptr=%ul"
+msgstr "Vaticana_ligature_engraver: instelling `spacing-increment = %f': ptr=%ul"
 
-#: vaticana-ligature.cc:95
+#: vaticana-ligature.cc:94
 msgid "flexa-height undefined; assuming 0"
-msgstr "flexa-hoogte ongedefiniëerd; uitgaan van 0"
+msgstr "flexa-hoogte is ongedefinieerd; uitgegaan van 0"
 
-#: vaticana-ligature.cc:100
+#: vaticana-ligature.cc:99
 msgid "ascending vaticana style flexa"
-msgstr "stijgende vaticana stijl flexa"
+msgstr "stijgende vaticana-stijl flexa"
 
-#: vaticana-ligature.cc:188
-msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
-msgstr "Vaticana_ligature: nulsamenvoeging (delta_pitch == 0)"
+#: vertical-align-engraver.cc:95
+msgid "Ignoring Vertical_align_engraver in VerticalAxisGroup"
+msgstr ""
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:111
+#: volta-engraver.cc:110
 msgid "cannot end volta spanner"
 msgstr "kan volta spanner niet beëindigen"
 
-#: volta-engraver.cc:121
+#: volta-engraver.cc:120
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr "heb al een volta spanner, beëindig die voortijdig"
 
-#: volta-engraver.cc:125
+#: volta-engraver.cc:124
 msgid "also already have an ended spanner"
 msgstr "heb ook al een beëindigde spanner"
 
-#: volta-engraver.cc:126
+#: volta-engraver.cc:125
 msgid "giving up"
-msgstr "geef op"
+msgstr "opgegeven"
+
+#: parser.yy:158 parser.yy:172
+#, fuzzy
+msgid "Too much lookahead"
+msgstr "Te veel vooruitkijk"
+
+#: parser.yy:441 parser.yy:752 parser.yy:818
+msgid "bad expression type"
+msgstr "ongeldig expressietype"
 
-#: parser.yy:820
+#: parser.yy:650 parser.yy:1159
+msgid "not a context mod"
+msgstr ""
+
+#: parser.yy:853
+msgid "score expected"
+msgstr "partituur werd verwacht"
+
+#: parser.yy:869
 msgid "\\paper cannot be used in \\score, use \\layout instead"
-msgstr "\\paper kan niet worden gebruikt in \\score, gebruik \\layout"
+msgstr "\\paper kan niet gebruikt worden in \\score;  gebruik \\layout"
 
-#: parser.yy:844
+#: parser.yy:893
 msgid "need \\paper for paper block"
 msgstr "heb \\paper nodig voor paper blok"
 
-#: parser.yy:1363
-msgid "only \\consists takes non-string argument."
-msgstr "alleen \\consists neem een niet-string functieargument."
+#: parser.yy:1033 parser.yy:1055
+msgid "unexpected post-event"
+msgstr "onverwachte na-gebeurtenis"
+
+#: parser.yy:1063
+msgid "Ignoring non-music expression"
+msgstr "Negeren van non-muziekexpressie"
+
+#: parser.yy:1075 parser.yy:2493
+msgid "music expected"
+msgstr "muziek verwacht"
 
-#: parser.yy:1376
-msgid "Grob name should be alphanumeric"
-msgstr "Grob naam zou alfanumeriek moeten zijn"
+#: parser.yy:1370
+msgid "not a symbol"
+msgstr "is geen symbool"
 
-#: parser.yy:1685
-msgid "second argument must be pitch list"
-msgstr "tweede argument moet een toonhoogtelijst zijn"
+#: parser.yy:2182 parser.yy:2296 parser.yy:2309 parser.yy:2318
+msgid "bad grob property path"
+msgstr ""
+
+#: parser.yy:2276
+msgid "only \\consists and \\remove take non-string argument."
+msgstr ""
+
+#: parser.yy:2337
+msgid "bad context property path"
+msgstr ""
 
-#: parser.yy:1716 parser.yy:1721 parser.yy:2194
+#: parser.yy:2438
+msgid "simple string expected"
+msgstr "eenvoudige tekenreeks verwacht"
+
+#: parser.yy:2456
+msgid "symbol expected"
+msgstr "symbool verwacht"
+
+#: parser.yy:2611
+msgid "not a rhythmic event"
+msgstr "is geen ritmische gebeurtenis"
+
+#: parser.yy:2685
+msgid "post-event expected"
+msgstr ""
+
+#: parser.yy:2694 parser.yy:2699
 msgid "have to be in Lyric mode for lyrics"
-msgstr "moet in Lyric modus zijn voor liedteksten"
+msgstr "moet in Lyric-modus zijn voor liedteksten"
 
-#: parser.yy:1818
+#: parser.yy:2767
 msgid "expecting string as script definition"
-msgstr "verwacht string voor script definitie"
+msgstr "verwacht tekenreeks voor scriptdefinitie"
 
-#: parser.yy:1973 parser.yy:2024
-#, c-format
-msgid "not a duration: %d"
+#: parser.yy:2875
+msgid "not an articulation"
+msgstr "is geen articulatie"
+
+#: parser.yy:2947 parser.yy:2990
+#, fuzzy
+msgid "not a duration"
 msgstr "geen duur: %d"
 
-#: parser.yy:2148
+#: parser.yy:3007
+#, fuzzy
+msgid "bass number expected"
+msgstr "symbool verwacht: ~S"
+
+#: parser.yy:3106
 msgid "have to be in Note mode for notes"
 msgstr "moet in Note modus zijn voor noten"
 
-#: parser.yy:2209
+#: parser.yy:3166
 msgid "have to be in Chord mode for chords"
-msgstr "moet in Chord modus zijn voor akkoorden"
+msgstr "moet in Chord modus zijn voor accoorden"
 
-#: lexer.ll:190
+#: parser.yy:3181
+msgid "markup outside of text script or \\lyricmode"
+msgstr ""
+
+#: parser.yy:3186
+msgid "unrecognized string, not in text script or \\lyricmode"
+msgstr ""
+
+#: parser.yy:3347 parser.yy:3356
+msgid "not an unsigned integer"
+msgstr ""
+
+#: parser.yy:3424
+msgid "not a markup"
+msgstr ""
+
+#: lexer.ll:224
 msgid "stray UTF-8 BOM encountered"
 msgstr "losse UTF-8 BOM tegengekomen"
 
-#: lexer.ll:194
+#: lexer.ll:227
 msgid "Skipping UTF-8 BOM"
 msgstr "Overslaan van UTF-8 BOM"
 
-#: lexer.ll:249
+#: lexer.ll:279
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Hernoem invoer naar: `%s'"
 
-#: lexer.ll:266
+#: lexer.ll:296
 msgid "quoted string expected after \\version"
 msgstr "tekst tussen aanhalingstekens verwacht na \\version"
 
-#: lexer.ll:270
+#: lexer.ll:300
 msgid "quoted string expected after \\sourcefilename"
 msgstr "tekst tussen aanhalingstekens verwacht na \\sourcefilename"
 
-#: lexer.ll:274
+#: lexer.ll:304
 msgid "integer expected after \\sourcefileline"
 msgstr "geheel getal verwacht na \\sourcefileline"
 
-#: lexer.ll:287
-msgid "EOF found inside a comment"
-msgstr "EOF gevonden in een commentaar"
-
-#: lexer.ll:302
+#: lexer.ll:331
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput niet toegestaan buiten init bestanden"
 
-#: lexer.ll:326
+#: lexer.ll:355
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "verkeerde of ongedefiniëerde identifier: `%s'"
 
-#. backup rule
-#: lexer.ll:335
+#: lexer.ll:381
+#, fuzzy
+msgid "string expected after \\include"
+msgstr "tekst tussen aanhalingstekens verwacht na \\version"
+
+#: lexer.ll:391
 msgid "end quote missing"
-msgstr "aanhalingstekens sluiten ontbreekt"
+msgstr "aanhalingstekens sluite mist"
 
-#: lexer.ll:485
-msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Accolade gevonden aan het eind van liedtekst.  Een spatie vergeten?"
+#: lexer.ll:743
+msgid "EOF found inside a comment"
+msgstr "EOF gevonden in een kommentaar"
 
-#: lexer.ll:595
-msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Accolade gevonden aan het eind van een opmaak.  Een spatie vergeten?"
+#: lexer.ll:748
+#, fuzzy
+msgid "EOF found inside string"
+msgstr "EOF gevonden in een kommentaar"
 
-#: lexer.ll:699
-#, c-format
-msgid "invalid character: `%c'"
+#: lexer.ll:763
+msgid "Unfinished main input"
+msgstr ""
+
+#: lexer.ll:834
+#, fuzzy, c-format
+msgid "invalid character: `%s'"
 msgstr "ongeldig teken: `%c'"
 
-#: lexer.ll:814 lexer.ll:815
+#: lexer.ll:963
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "onbekende ontsnapte string: `\\%s'"
 
-#: lexer.ll:924 lexer.ll:925
+#: lexer.ll:983
+#, c-format
+msgid "undefined character or shorthand: %s"
+msgstr ""
+
+#: lexer.ll:1275
+msgid "non-UTF-8 input"
+msgstr ""
+
+#: lexer.ll:1319
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr "bestand te oud: %s (oudste ondersteund: %s)"
 
-#: lexer.ll:925 lexer.ll:926
+#: lexer.ll:1320
 msgid "consider updating the input with the convert-ly script"
 msgstr "overweeg het actualiseren van de invoer met het convert-ly script"
 
-#: lexer.ll:931 lexer.ll:932
+#: lexer.ll:1326
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr "programma te oud: %s (bestand vereist: %s)"
 
-#: backend-library.scm:29 ps-to-png.scm:68
+#: backend-library.scm:27
 #, scheme-format
 msgid "Invoking `~a'..."
-msgstr "Inroepen van `~a'..."
+msgstr "Aanroepen van '~a'..."
 
-#: backend-library.scm:34
+#: backend-library.scm:31
 #, scheme-format
-msgid "`~a' failed (~a)"
-msgstr "`~a' gefaald (~a)"
+msgid "`~a' failed (~a)\n"
+msgstr "'~a' is mislukt (~a)\n"
 
 # lisp-format
-#: backend-library.scm:94
-#, scheme-format
-msgid "Converting to `~a'..."
+#: backend-library.scm:93
+#, fuzzy, scheme-format
+msgid "Converting to `~a'...\n"
 msgstr "Converteren naar `~a'..."
 
 # lisp-format
 #. Do not try to guess the name of the png file,
 #. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:104
+#: backend-library.scm:102
 #, scheme-format
 msgid "Converting to ~a..."
 msgstr "Converteren naar ~a..."
 
-#: backend-library.scm:142
+#: backend-library.scm:140
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Schrijven van header veld `~a' naar `~a'..."
 
-#: backend-library.scm:192
+#: backend-library.scm:189
 #, scheme-format
 msgid "missing stencil expression `~S'"
 msgstr ""
 
-#: chord-entry.scm:49
+#: bar-line.scm:133
 #, scheme-format
-msgid "Spurious garbage following chord: ~A"
+msgid "Bar glyph ~a not known. Ignoring."
+msgstr "Maatglief ~a is onbekend.  Genegeerd."
+
+#: bar-line.scm:161
+#, scheme-format
+msgid "Annotation '~a' is allowed in the first argument of a bar line definition only."
 msgstr ""
 
-#: define-context-properties.scm:31 define-grob-properties.scm:21
-#: define-music-properties.scm:21
+#: bar-line.scm:169
 #, scheme-format
-msgid "symbol ~S redefined"
-msgstr "symbool ~S hergedefiniëerd"
+msgid "Replacement '~a' is allowed in the last argument of a bar line definition only."
+msgstr ""
 
-#: define-event-classes.scm:79
-msgid "All classes must be the last in their matrilineal line."
+#: bar-line.scm:230
+#, scheme-format
+msgid "add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character."
 msgstr ""
 
-#: define-event-classes.scm:83
-msgid ""
-"All classes must have a well-defined pedigree in the existing class "
-"hierarchy."
+#: bar-line.scm:795
+#, scheme-format
+msgid "No span bar glyph defined for bar glyph '~a'; ignoring."
 msgstr ""
 
-#: define-event-classes.scm:149
+#: chord-entry.scm:52
 #, scheme-format
-msgid "event class ~A seems to be unused"
-msgstr "gebeurtenisklasse ~A schijnt ongebruikt te zijn"
+msgid "Spurious garbage following chord: ~A"
+msgstr ""
 
-#. should be programming-error
-#: define-event-classes.scm:155
+#: define-context-properties.scm:31 define-grob-properties.scm:21
+#: define-music-properties.scm:21
 #, scheme-format
-msgid "translator listens to nonexisting event class ~A"
-msgstr "vertaler luistert naar nietbestaande gebeurtenisklasse ~A"
+msgid "symbol ~S redefined"
+msgstr "symbool ~S hergedefiniëerd"
 
-#: define-markup-commands.scm:803
+#: define-event-classes.scm:73
+#, fuzzy, scheme-format
+msgid "unknown parent class `~a'"
+msgstr "Onbekende gebeurtenis klasse `%s'"
+
+#: define-event-classes.scm:107
+#, fuzzy, scheme-format
+msgid "Cannot redefine event class `~S'"
+msgstr "Onbekende gebeurtenis klasse `%s'"
+
+#: define-event-classes.scm:109
+#, fuzzy, scheme-format
+msgid "Undefined parent event class `~S'"
+msgstr "Onbekende gebeurtenis klasse `%s'"
+
+#: define-markup-commands.scm:1083
 msgid "no systems found in \\score markup, does it have a \\layout block?"
-msgstr "geen systemen gevonden in \\score markup, heeft het een \\layout blok?"
+msgstr "geen systemen gevonden in \\score markup; heeft het een \\layout blok?"
 
-#: define-markup-commands.scm:2404
+#: define-markup-commands.scm:2847
 #, scheme-format
 msgid "Cannot find glyph ~a"
-msgstr "Kan glyph ~a niet vinden"
+msgstr "Kan glief ~a niet vinden"
 
-#: define-markup-commands.scm:2830
-#, scheme-format
+#: define-markup-commands.scm:3273
+#, fuzzy, scheme-format
 msgid "no brace found for point size ~S "
-msgstr "geen accolade gevonden voor puntgrootte ~S"
+msgstr "geen plaatsing gevonden voor vingers"
 
-#: define-markup-commands.scm:2831
+#: define-markup-commands.scm:3274
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr ""
 
-#: define-markup-commands.scm:2984
+#: define-markup-commands.scm:3526
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "geen geldige duurtekst: ~a"
 
-#: define-music-types.scm:740
+#: define-markup-commands.scm:3737
+#, fuzzy, scheme-format
+msgid "not a valid duration string: ~a - ignoring"
+msgstr "geen geldige duurtekst: ~a"
+
+#: define-music-types.scm:792
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr "symbool verwacht: ~S"
 
-#: define-music-types.scm:743
+#: define-music-types.scm:795
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr "kan muziekobject niet vinden: ~S"
 
-#: define-music-types.scm:762
+#: define-music-types.scm:815
+#, scheme-format
+msgid "bad make-music argument: ~S"
+msgstr ""
+
+#: define-music-types.scm:827
 #, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "onbekend herhaaltype `~S'"
 
-#: define-music-types.scm:763
+#: define-music-types.scm:828
+#, fuzzy
 msgid "See define-music-types.scm for supported repeats"
-msgstr "Zie define-music-types.scm voor ondersteunde herhalingen"
+msgstr "Zie music-types.scm voor ondersteunde herhalingen"
 
-#: define-note-names.scm:962
+#: define-note-names.scm:972
 msgid "Select note names language."
 msgstr ""
 
-#: define-note-names.scm:969
+#: define-note-names.scm:978
 #, scheme-format
 msgid "Using `~a' note names..."
 msgstr ""
 
-#: define-note-names.scm:972
+#: define-note-names.scm:981
 #, scheme-format
 msgid "Could not find language `~a'.  Ignoring."
 msgstr ""
@@ -3147,15 +3509,20 @@ msgstr "Verwerken van ~S..."
 msgid "Writing ~S..."
 msgstr "Schrijven van ~S..."
 
-#: documentation-lib.scm:198
+#: documentation-lib.scm:188
+#, fuzzy, scheme-format
+msgid "cannot find description for property `~S' (~S)"
+msgstr "kan beschrijving voor eigenschap niet vinden ~S (~S)"
+
+#: documentation-lib.scm:209
 #, scheme-format
 msgid "cannot find description for property ~S (~S)"
 msgstr "kan beschrijving voor eigenschap niet vinden ~S (~S)"
 
-#: flag-styles.scm:148
-#, scheme-format
+#: flag-styles.scm:162
+#, fuzzy, scheme-format
 msgid "flag stroke `~a' or `~a' not found"
-msgstr "vlag streep `~a' of `~a' niet gevonden"
+msgstr "vlag streep `%s' niet gevonden"
 
 #: framework-eps.scm:108
 #, scheme-format
@@ -3182,7 +3549,8 @@ msgstr "weet niet hoe ~S=~S in te bedden"
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr "weet niet hoe font in te bedden: ~s ~s ~s"
 
-#: framework-ps.scm:669
+#: framework-ps.scm:687
+#, fuzzy
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
@@ -3201,10 +3569,10 @@ msgstr ""
 "Het PostScript backend ondersteund geen system-by-system uitvoer.\n"
 "Gebruik daarvoor het EPS backend\n"
 "\n"
-"  lilypond -dbackend=eps BESTAND\n"
+"  lilypond -eps BESTAND\n"
 "\n"
-"Als LilyPond fragment van een webpagina is gekopiëerd, ga na dat\n"
-"alleen alles voorafgaand aan\n"
+"Als LilyPond fragment van een webpagina is gecopiëerd, weet zeker\n"
+"dat alleen alles voorafgaand aan\n"
 "\n"
 "  %% ****************************************************************\n"
 "  %% Start cut-&-pastable-section\n"
@@ -3215,7 +3583,7 @@ msgstr ""
 #: framework-svg.scm:84
 #, scheme-format
 msgid "Updating font into: ~a"
-msgstr "actualiseren van font naar: ~a"
+msgstr ""
 
 #: graphviz.scm:64
 #, scheme-format
@@ -3232,65 +3600,71 @@ msgstr "Fout in waardestreep kwantisering.  Verwacht (~S,~S) gevonden ~S."
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr "Fout in waardestreep kwantisering.  Verwacht ~S 0, gevonden ~S."
 
-#: lily-library.scm:758
+#: lily-library.scm:333
+msgid "Music unsuitable for context-mod"
+msgstr ""
+
+#: lily-library.scm:388
+#, fuzzy, scheme-format
+msgid "Cannot find context-def \\~a"
+msgstr "kan `%s' niet wisselen in `%s'"
+
+#: lily-library.scm:404
+msgid "Music unsuitable for output-def"
+msgstr ""
+
+#: lily-library.scm:884
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
 "which produces the closest match to @var{target-val} if\n"
 "applied to function @var{getter}."
 msgstr ""
 
-#: lily-library.scm:832
+#: lily-library.scm:955
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr "onbekende eenheid: ~S"
 
-#: lily-library.scm:858 lily-library.scm:867
-msgid "warning:"
-msgstr "waarschuwing: "
-
-#: lily-library.scm:860
+#: lily-library.scm:980
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
+msgstr "geen \\version uitdrukking gevonden, voeg~atoe voor toekomstige compatibiliteit"
+
+#: lily.scm:75
+msgid "call-after-session used after session start"
 msgstr ""
-"geen \\version uitdrukking gevonden, voeg~atoe voor toekomstige "
-"compatibiliteit"
 
-#: lily-library.scm:868
-msgid "old relative compatibility not used"
-msgstr "oude relative compatibiliteit niet gebruikt"
+#: lily.scm:93
+msgid "define-session used after session start"
+msgstr ""
 
-#: lily.scm:225
+#: lily.scm:393
 msgid "Using (ice-9 curried-definitions) module\n"
 msgstr ""
 
-#: lily.scm:230
+#: lily.scm:396
 msgid "Guile 1.8\n"
 msgstr ""
 
-#: lily.scm:290
+#: lily.scm:455
 #, scheme-format
 msgid "cannot find: ~A"
 msgstr "kan niet vinden: ~A"
 
-#: lily.scm:350
-#, scheme-format
-msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
-msgstr "verkeerd type voor argument ~a.  Verwacht ~a, gevonden ~s"
-
-#: lily.scm:716
-msgid "Compilation successfully completed"
-msgstr "Samenstellen met succes voltooid"
+#: lily.scm:878
+msgid "Success: compilation successfully completed"
+msgstr ""
 
-#: lily.scm:717
+#: lily.scm:879
 msgid "Compilation completed with warnings or errors"
 msgstr ""
 
-#: lily.scm:779
+#: lily.scm:940
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr "taak ~a beëindigd met met signaal: ~a"
 
-#: lily.scm:782
+#: lily.scm:943
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
@@ -3299,42 +3673,48 @@ msgstr ""
 "logfile ~a (exit ~a):\n"
 "~a"
 
-#: lily.scm:804 lily.scm:882
+#: lily.scm:965 lily.scm:1054
 #, scheme-format
 msgid "failed files: ~S"
 msgstr "gefaalde bestanden: ~S"
 
 # lisp-format
-#: lily.scm:873
+#: lily.scm:1045
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Omleiden van uitvoer naar ~a..."
 
-#: lily.scm:892
+#: lily.scm:1064 ps-to-png.scm:66
 #, scheme-format
 msgid "Invoking `~a'...\n"
-msgstr "Inroepen van `~a'...\n"
+msgstr "Aanroepen van '~a'...\n"
+
+#: ly-syntax-constructors.scm:66
+#, scheme-format
+msgid "~a function cannot return ~a"
+msgstr ""
 
-#: ly-syntax-constructors.scm:51
-msgid "Music head function must return Music object"
-msgstr "Muziek hoofd functie moet Muziek object teruggeven"
+#: ly-syntax-constructors.scm:75
+#, scheme-format
+msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
+msgstr "verkeert type voor argument ~a.  Verwacht ~a, gevonden ~s"
 
-#: ly-syntax-constructors.scm:177
+#: ly-syntax-constructors.scm:199
 #, scheme-format
 msgid "Invalid property operation ~a"
 msgstr "Ongeldige eigenschap operatie ~a"
 
-#: markup.scm:223
+#: markup-macros.scm:331
 #, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr "verkeerd aantal argumenten.  Verwacht: ~A, gevonden ~A: ~S"
 
-#: markup.scm:229
+#: markup-macros.scm:337
 #, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
-msgstr "Ongeldig argument in positie ~A.  Verwacht: ~A, gevonden: ~S."
+msgstr "Ongeldig argument in positie ~A.  Verwach: ~A, gevonden: ~S."
 
-#: markup.scm:292
+#: markup-macros.scm:373
 #, scheme-format
 msgid "Not a markup command: ~A"
 msgstr ""
@@ -3363,190 +3743,175 @@ msgstr ""
 msgid "negative replication count; ignoring"
 msgstr ""
 
-#: music-functions.scm:268
+#: music-functions.scm:272
 msgid "More alternatives than repeats.  Junking excess alternatives"
-msgstr ""
-"Meer alternatieven dan herhalingen.  Verschroten van overtollige "
-"alternatieven"
+msgstr "Meer alternatieven dan herhalingen.  Overtollige alternatieven worden weggegooid."
 
-#: music-functions.scm:297
+#: music-functions.scm:303
 #, scheme-format
 msgid "invalid tremolo repeat count: ~a"
-msgstr "ongeldige tremolo herhaal teller: ~a"
+msgstr "ongeldig tremolo-herhalingsaantal: ~a"
 
-#: music-functions.scm:618
+#: music-functions.scm:459
 #, scheme-format
-msgid "music expected: ~S"
-msgstr "muziek verwacht: ~S"
+msgid "bad grob property path ~a"
+msgstr "ongeldig grob-eigenschappad ~a"
 
-#. FIXME: uncomprehensable message
-#: music-functions.scm:662
+#: music-functions.scm:753
+msgid "Bad chord repetition"
+msgstr "Ongeldige akkoordherhaling"
+
+#: music-functions.scm:788
 #, scheme-format
-msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
-msgstr "Maat controle gefaald.  Verwacht bij ~a te zijn, maar ben bij ~a"
+msgid "music expected: ~S"
+msgstr "muziek verwacht: ~S"
 
-#: music-functions.scm:846
+#: music-functions.scm:1144
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
-msgstr "kan aangehaalde muziek niet vinden: `~S'"
+msgstr "kan aangehaalde muziek niet vinden: '~S'"
 
-#: music-functions.scm:982
+#: music-functions.scm:1282
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr ""
 
-#: music-functions.scm:1037
+# XXX trailing space
+#: music-functions.scm:1342
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
-msgstr "Onbekend octaviëertype: ~S"
+msgstr "onbekend octaafheidstype: ~S "
 
-#: music-functions.scm:1038
+# XXX stray apostrophe
+#: music-functions.scm:1343
 msgid "Defaulting to 'any-octave."
 msgstr ""
 
-#: music-functions.scm:1378
-#, scheme-format
+# XXX what does accidental mean?
+#: music-functions.scm:1688
+#, fuzzy, scheme-format
 msgid "unknown accidental style: ~S"
-msgstr "onbekende toevallig teken stijl: ~S"
+msgstr "onbekende toevallige stijl: ~S"
 
-#: output-ps.scm:48
-msgid "Found infinity or nan in output.  Substituting 0.0"
-msgstr "Oneindig of nan gevonden in uitvoer.  Vervangen door 0.0"
-
-#: output-ps.scm:289 output-svg.scm:550
+#: output-ps.scm:278 output-svg.scm:539
 #, scheme-format
 msgid "unknown line-cap-style: ~S"
-msgstr "onbekende line-cap-stijl: ~S"
+msgstr "onbekende lijnkopstijl: ~S"
 
-#: output-ps.scm:294 output-svg.scm:556
+#: output-ps.scm:283 output-svg.scm:545
 #, scheme-format
 msgid "unknown line-join-style: ~S"
-msgstr "onbekende line-join-stijl: ~S"
+msgstr "onbekende lijnverbindingsstijl: ~S"
 
-#: output-svg.scm:47
-#, scheme-format
-msgid "undefined: ~S"
-msgstr "ongedefiniëerd: ~S"
-
-#: output-svg.scm:151
+#: output-svg.scm:148
 #, scheme-format
 msgid "cannot decypher Pango description: ~a"
-msgstr "kan Pango fontbeschrijving niet ontcijferen: ~a"
+msgstr "kan Pango-font-omschrijving niet ontcijferen: ~a"
 
-#: output-svg.scm:231
+# XXX capitalize Unicode
+#: output-svg.scm:228
 msgid "Glyph must have a unicode value"
-msgstr ""
+msgstr "Glief moet een Unicode-waarde hebben"
 
-#: output-svg.scm:283 output-svg.scm:293
+#: output-svg.scm:280 output-svg.scm:290
 #, scheme-format
 msgid "cannot find SVG font ~S"
-msgstr "kan SVG-font niet vinden: ~S"
+msgstr "kan SVG-font ~S niet vinden"
 
-#: paper.scm:115
+#: paper.scm:120
 msgid "set-global-staff-size: not in toplevel scope"
 msgstr "set-global-staff-size: niet op topniveau"
 
-#: paper.scm:296
+#: paper.scm:320
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "Dit is geen \\layout {} object, ~S"
 
-#: paper.scm:308
+#: paper.scm:328
 #, scheme-format
 msgid "Unknown paper size: ~a"
 msgstr "Onbekende papiergrootte: ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:323
+#: paper.scm:347
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "Moet #(set-paper-size .. ) gebruiken in \\paper { ... }"
 
-#: parser-clef.scm:141 parser-clef.scm:181
+#: parser-clef.scm:164
 #, scheme-format
 msgid "unknown clef type `~a'"
-msgstr "onbekend sleuteltype `~a'"
+msgstr "onbekend sleuteltype '~a'"
 
-#: parser-clef.scm:142 parser-clef.scm:182
+#: parser-clef.scm:165
 #, scheme-format
 msgid "supported clefs: ~a"
 msgstr "ondersteunde sleutels: ~a"
 
-#: ps-to-png.scm:74
+#: parser-ly-from-scheme.scm:74
+msgid "error in #{ ... #}"
+msgstr "fout in #{ ... #}"
+
+#: part-combiner.scm:598
+#, scheme-format
+msgid "quoted music `~a' is empty"
+msgstr "aangehaalde muziek '~a' is leeg"
+
+#: ps-to-png.scm:70
 #, scheme-format
 msgid "~a exited with status: ~S"
-msgstr "~a sloot af met status: ~S"
+msgstr "~a sloot af met status ~S"
 
-#: to-xml.scm:191
+#: to-xml.scm:190
 #, scheme-format
 msgid "assertion failed: ~S"
-msgstr "assertie gefaald: ~S"
+msgstr "controletest is mislukt: ~S"
 
-#: translation-functions.scm:341
+#: translation-functions.scm:368
 #, scheme-format
 msgid "Negative fret for pitch ~a on string ~a"
-msgstr ""
+msgstr "Negatieve fret voor toonhoogte ~a op snaar ~a"
 
-#: translation-functions.scm:385
+#: translation-functions.scm:371
+#, scheme-format
+msgid "Missing fret for pitch ~a on string ~a"
+msgstr "Ontbrekende fret voor toonhoogte ~a op snaar ~a"
+
+#: translation-functions.scm:414
 #, scheme-format
 msgid "No open string for pitch ~a"
-msgstr ""
+msgstr "Geen vrije snaar voor toonhoogte ~a"
 
-#: translation-functions.scm:400
+#: translation-functions.scm:429 translation-functions.scm:441
 #, scheme-format
 msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
-msgstr ""
+msgstr "Gevraagde snaar voor toonhoogte vereist negatieve fret: snaar ~a, toonhoogte ~a"
+
+#: translation-functions.scm:432
+msgid "Ignoring string request and recalculating."
+msgstr "Snaarverzoek wordt genegeerd; er wordt herberekend."
 
-#: translation-functions.scm:401
-msgid "Ignoring string request."
+#: translation-functions.scm:444
+msgid "Ignoring note in tablature."
 msgstr ""
 
-#: translation-functions.scm:414
+#: translation-functions.scm:469
 #, scheme-format
 msgid "No string for pitch ~a (given frets ~a)"
-msgstr ""
+msgstr "Geen snaar voor toonhoogte ~a (gegeven de frets ~a)"
 
-#: translation-functions.scm:515
+#: translation-functions.scm:574
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
 "only ~a fret labels provided"
 msgstr ""
-
-#~ msgid "no feasible beam position"
-#~ msgstr "geen werkbare waardestreeppositie gevonden"
-
-#~ msgid "expect 2 elements for chord tremolo, found %d"
-#~ msgstr "verwacht 2 elementen voor akkoordtremolo, %d gevonden"
-
-#~ msgid "program has no such type: `%s'"
-#~ msgstr "programma heeft geen dergelijk type: `%s'"
-
-#~ msgid "Rebuilding FontConfig cache %s, this may take a while..."
-#~ msgstr "Herbouwen van FontConfig cache %s, dit kan wel even duren..."
-
-#~ msgid "[%d: %d pages]"
-#~ msgstr "[%d: %d pagina's]"
-
-#~ msgid "[%d: %d or %d pages]"
-#~ msgstr "[%d: %d of %d pagina's]"
-
-#~ msgid "Solving %d page-breaking chunks..."
-#~ msgstr "Berekenen van %d pagina-afbreek brokken..."
-
-#~ msgid "staff-span event has no direction"
-#~ msgstr "notenbalk-span gebeurtenis heeft geen richting"
-
-#~ msgid "cannot convert <stdout> to ~S"
-#~ msgstr "kan <stduit> niet converteren naar ~S"
-
-#~ msgid "expecting 2 elements for chord tremolo, found ~a"
-#~ msgstr "verwacht 2 elementen voor akkoordtremolo, ~a gevonden"
+"Geen label voor fret ~a (op snaar ~a);\n"
+"slechts ~a fret-labels gegeven"
 
 #~ msgid "Report bugs via"
 #~ msgstr ""
 #~ "Meld fouten in het programma via %;\n"
-#~ "meld onjuistheden in de vertaling aan <janneke@gnu.org> of <hanwen@xs4all."
-#~ "nl>."
+#~ "meld onjuistheden in de vertaling aan <janneke@gnu.org> of <hanwen@xs4all.nl>."
 
 #~ msgid ""
 #~ "extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
@@ -3579,31 +3944,122 @@ msgstr ""
 #~ msgstr "negeren van onbekende voorteken regel: %s"
 
 #~ msgid "tried to get a translation for something that is no child of mine"
-#~ msgstr ""
-#~ "probeerde een verplaatsing te verkrijgen voor iets wat geen kind van mij "
-#~ "is"
+#~ msgstr "probeerde een verplaatsing te verkrijgen voor iets wat geen kind van mij is"
 
 #~ msgid "tried to calculate pure-height at a non-breakpoint"
 #~ msgstr "probeerde pure-hoogte te berekenen op een niet-breekpunt"
 
+#~ msgid "no feasible beam position"
+#~ msgstr "geen werkbare waardestreeppositie gevonden"
+
+#~ msgid "No spacing entry from %s to `%s'"
+#~ msgstr "Geen spatiëringswaarde van %s naar`%s'"
+
+#~ msgid "expect 2 elements for chord tremolo, found %d"
+#~ msgstr "verwacht 2 elementen voor akkoordtremolo, %d gevonden"
+
+#~ msgid "program has no such type: `%s'"
+#~ msgstr "programma heeft geen dergelijk type: `%s'"
+
+#~ msgid "Invalid CreateContext event: Cannot create %s context"
+#~ msgstr "Ongeldig CreateContext gebeurtenis: Kan %s context niet maken"
+
+#~ msgid "cannot find start of (de)crescendo"
+#~ msgstr "kan start van (de)crescendo niet vinden"
+
+#~ msgid "already have a decrescendo"
+#~ msgstr "heb al een decrescendo"
+
+#~ msgid "already have a crescendo"
+#~ msgstr "heb al een crescendo"
+
+#~ msgid "cresc starts here"
+#~ msgstr "cresc is hier gestart"
+
+#~ msgid "unterminated (de)crescendo"
+#~ msgstr "onbeëindigd (de)crescendo"
+
+#~ msgid "Rebuilding FontConfig cache %s, this may take a while..."
+#~ msgstr "Herbouwen van FontConfig cache %s, dit kan wel even duren..."
+
+#~ msgid "infinity or NaN encountered while converting Real number"
+#~ msgstr "oneindig of NaN tegengekomen tijdens converteren van Reëel getal"
+
+#~ msgid "setting to zero"
+#~ msgstr "zet op nul"
+
+#~ msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)"
+#~ msgstr "circulaire afhankelijkheid: calculation-in-progress tegengekomen voor #'%s (%s)"
+
+#~ msgid "Infinity or NaN encountered"
+#~ msgstr "Oneindig of NaN tegengekomen"
+
 #~ msgid "crescendo too small"
 #~ msgstr "crescendo te klein"
 
+#~ msgid "error at EOF: %s"
+#~ msgstr "fout bij EOF: %s"
+
 #~ msgid "deprecated function called: %s"
 #~ msgstr "verouderde functie aangeroepen: %s"
 
+#~ msgid "braces do not match"
+#~ msgstr "haakjes paren niet"
+
 #~ msgid "generate DVI (tex backend only)"
 #~ msgstr "genereer DVI (alleen tex backend)"
 
 #~ msgid "generate TeX (tex backend only)"
 #~ msgstr "genereer TeX (alleen tex backend)"
 
+#~ msgid "Mensural_ligature: unexpected case fall-through"
+#~ msgstr "Mensural_ligature: onverwachte zaakdoorval"
+
+#~ msgid "Mensural_ligature: (join_right == 0)"
+#~ msgstr "Mensural_ligature: (join_right) == 0)"
+
+#~ msgid "Sending non-event to context"
+#~ msgstr "Zenden van niet-gebeurtenis naar context"
+
+#~ msgid "unterminated phrasing slur"
+#~ msgstr "onbeëindigde fraseringsboog"
+
+#~ msgid "No spring between column %d and next one"
+#~ msgstr "Geen veer tussen kolom %d en de volgende"
+
+#~ msgid "staff-span event has no direction"
+#~ msgstr "notenbalk-span gebeurtenis heeft geen richting"
+
 #~ msgid "cannot find start of trill spanner"
 #~ msgstr "kan start van triller spanner niet vinden"
 
 #~ msgid "already have a trill spanner"
 #~ msgstr "heb al een tekst spanner"
 
+#~ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
+#~ msgstr "Vaticana_ligature: nulsamenvoeging (delta_pitch == 0)"
+
+#~ msgid "Grob name should be alphanumeric"
+#~ msgstr "Grob naam zou alfanumeriek moeten zijn"
+
+#~ msgid "second argument must be pitch list"
+#~ msgstr "tweede argument moet een toonhoogtelijst zijn"
+
+#~ msgid "Brace found at end of lyric.  Did you forget a space?"
+#~ msgstr "Accolade gevonden aan het eind van liedtektst.  Een spatie vergeten?"
+
+#~ msgid "Brace found at end of markup.  Did you forget a space?"
+#~ msgstr "Accolade gevonden aan het eind van een opmaak.  Een spatie vergeten?"
+
+#~ msgid "event class ~A seems to be unused"
+#~ msgstr "gebeurtenisklasse ~A schijnt ongebruikt te zijn"
+
+#~ msgid "translator listens to nonexisting event class ~A"
+#~ msgstr "vertaler luistert naar nietbestaande gebeurtenisklasse ~A"
+
+#~ msgid "cannot convert <stdout> to ~S"
+#~ msgstr "kan <stduit> niet converteren naar ~S"
+
 #~ msgid "cannot generate ~S using the postscript back-end"
 #~ msgstr "kan ~S niet genereren, gebruikmakend van de postscript achterkant"
 
@@ -3611,12 +4067,25 @@ msgstr ""
 #~ msgstr "TeX bestandsnaam mag geen spaties bevatten: `~a'"
 
 #~ msgid "Can't fit systems on page -- ignoring between-system-padding"
-#~ msgstr ""
-#~ "Kan systemen niet op pagina gepast krijgen -- negeren van between-system-"
-#~ "padding"
+#~ msgstr "Kan systemen niet op pagina gepast krijgen -- negeren van between-system-padding"
+
+#~ msgid "old relative compatibility not used"
+#~ msgstr "oude relative compatibiliteit niet gebruikt"
+
+#~ msgid "Music head function must return Music object"
+#~ msgstr "Muziek hoofd functie moet Muziek object teruggeven"
+
+#~ msgid "expecting 2 elements for chord tremolo, found ~a"
+#~ msgstr "verwacht 2 elementen voor akkoordtremolo, ~a gevonden"
+
+#~ msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
+#~ msgstr "Maat controle gefaald.  Verwacht bij ~a te zijn, maar ben bij ~a"
 
 #~ msgid "utf-8-string encountered in PS backend"
-#~ msgstr "utf-8-string tegengekomen in in PS backend"
+#~ msgstr "utf-8-string tegengekomen in in PS achtereinde"
+
+#~ msgid "undefined: ~S"
+#~ msgstr "ongedefiniëerd: ~S"
 
 #~ msgid "lilylib module"
 #~ msgstr "lilylib module"
@@ -3644,21 +4113,16 @@ msgstr ""
 #~ "Example usage:\n"
 #~ "\n"
 #~ "   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-#~ "   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" "
-#~ "BOOK\n"
+#~ "   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
 #~ "   lilypond-book --process='lilypond-bin -I include' BOOK\n"
 #~ "\n"
 #~ msgstr ""
 #~ "Verwerk LilyPond snippers in hybride HTML, LaTeX of texinfo dokument.\n"
 #~ "Gebruiksvoorbeeld:\n"
 #~ "   lilypond-book --filter=\\\"tr '[a-z]' '[A-Z]'\\\" BOEK\\n\"\n"
-#~ "   lilypond-book --filter=\\\"convert-ly --no-version --from=2.0.0 -\\\" "
-#~ "BOEK\\n\n"
+#~ "   lilypond-book --filter=\\\"convert-ly --no-version --from=2.0.0 -\\\" BOEK\\n\n"
 #~ "   lilypond-book --process='lilypond-bin -I invoeging' BOEK\\n\"\n"
 
-#~ msgid "EXT"
-#~ msgstr "EXT"
-
 #~ msgid "print version information"
 #~ msgstr "toon versie informatie"
 
@@ -3689,9 +4153,6 @@ msgstr ""
 #~ msgid "produce MIDI output only"
 #~ msgstr "produceer alleen MIDI uitvoer"
 
-#~ msgid "RES"
-#~ msgstr "RES"
-
 #~ msgid "set the resolution of the preview to RES"
 #~ msgstr "zet de resolutie voor het testbeeld op RES"
 
@@ -3750,9 +4211,6 @@ msgstr ""
 #~ msgid "Writing HTML menu `%s'"
 #~ msgstr "Schrijven van HTML menu `%s'"
 
-#~ msgid "pseudo filter"
-#~ msgstr "pseudo filter"
-
 #~ msgid "pseudo filter only for single input file"
 #~ msgstr "pseudo filter alleen voor enkel invoerbestand"
 
@@ -3760,18 +4218,13 @@ msgstr ""
 #~ msgstr "geen bestanden gespecificeerd op de commandoregel"
 
 #~ msgid "Running LilyPond failed. Rerun with --verbose for a trace."
-#~ msgstr ""
-#~ "Draaien van LilyPond gefaald. Draai opnieuw met --verbose voor een "
-#~ "foutpad."
+#~ msgstr "Draaien van LilyPond gefaald. Draai opnieuw met --verbose voor een foutpad."
 
 #~ msgid "Failed to make PS file. Rerun with --verbose for a trace."
-#~ msgstr ""
-#~ "Gefaald in het maken van een PS bestand.  Draai opnieuw met --verbose "
-#~ "voor een foutpad."
+#~ msgstr "Gefaald in het maken van een PS bestand.  Draai opnieuw met --verbose voor een foutpad."
 
 #~ msgid "Running LaTeX failed. Rerun with --verbose for a trace."
-#~ msgstr ""
-#~ "Draaien van LaTeX gefaald.  Draai opnieuw met --verbose voor een foutpad."
+#~ msgstr "Draaien van LaTeX gefaald.  Draai opnieuw met --verbose voor een foutpad."
 
 #~ msgid "%s output to <stdout>..."
 #~ msgstr "%s uitvoer naar <stdout>..."
@@ -3785,18 +4238,12 @@ msgstr ""
 #~ msgid "Convert MIDI to LilyPond source."
 #~ msgstr "Converteer MIDI naar LilyPond invoer."
 
-#~ msgid "debug"
-#~ msgstr "debug"
-
 #~ msgid "define macro NAME [optional expansion EXP]"
 #~ msgstr "definieer macro NAAM [optionele expansie EXP]"
 
 #~ msgid "only pre-process"
 #~ msgstr "alleen pre-processen"
 
-#~ msgid "DIM"
-#~ msgstr "DIM"
-
 #~ msgid "write dependencies"
 #~ msgstr "schrijf afhankelijkheden"
 
@@ -3822,16 +4269,13 @@ msgstr ""
 #~ msgstr "komt niet overeen: `%s'"
 
 #~ msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
-#~ msgstr ""
-#~ "Herbouw alle .afm bestanden en verwijder alle .pk en .tfm bestanden."
+#~ msgstr "Herbouw alle .afm bestanden en verwijder alle .pk en .tfm bestanden."
 
 #~ msgid "Rerun with -V to show font paths."
 #~ msgstr "Draai opnieuw met -V voor het tonen van fontpaden."
 
 #~ msgid "A script for removing font-files is delivered with the source-code:"
-#~ msgstr ""
-#~ "Een script ter verwijdering van fontbestanden is meegeleverd bij de bron-"
-#~ "code:"
+#~ msgstr "Een script ter verwijdering van fontbestanden is meegeleverd bij de bron-code:"
 
 #~ msgid "Loading default font"
 #~ msgstr "Laad verstek font"
@@ -3863,15 +4307,9 @@ msgstr ""
 #~ msgid "NaN"
 #~ msgstr "NaN"
 
-#~ msgid "Junking event: `%s'"
-#~ msgstr "Verschrooten van gebeurtenis: `%s'"
-
 #~ msgid "no one to print a repeat brace"
 #~ msgstr "niemand om een herhalings haak af te drukken"
 
-#~ msgid "non fatal error: "
-#~ msgstr "niet noodlottige fout: "
-
 #~ msgid "Now processing `%s'"
 #~ msgstr "Verwerken van `%s'"
 
@@ -3881,16 +4319,11 @@ msgstr ""
 #~ msgid "kpathsea can not find TFM file: `%s'"
 #~ msgstr "kpathsea kan TFM bestand niet vinden: `%s'"
 
-#~ msgid ""
-#~ "round filled box horizontal extent smaller than blot; decreasing blot"
-#~ msgstr ""
-#~ "rond gevulde doos horizontale afmetingen kleiner dan blot; verkleinen van "
-#~ "blot"
+#~ msgid "round filled box horizontal extent smaller than blot; decreasing blot"
+#~ msgstr "rond gevulde doos horizontale afmetingen kleiner dan blot; verkleinen van blot"
 
 #~ msgid "round filled box vertical extent smaller than blot; decreasing blot"
-#~ msgstr ""
-#~ "rond gevulde doos vertikale afmetingen kleiner dan blot; verkleinen van "
-#~ "blot"
+#~ msgstr "rond gevulde doos vertikale afmetingen kleiner dan blot; verkleinen van blot"
 
 #~ msgid "set options, use -e '(ly-option-usage)' for help"
 #~ msgstr "zet opties, gebruik -e '(ly-option-usage)' voor hulp"
@@ -3952,17 +4385,11 @@ msgstr ""
 #~ msgid "  Evalute the Scheme EXPR before parsing any .ly files."
 #~ msgstr "  Evalueer de Scheme EXPR alvorens enig .ly bestand te ontleden."
 
-#~ msgid ""
-#~ "  Multiple -e options may be given, they will be evaluated sequentially."
-#~ msgstr ""
-#~ "  Verscheidene -e opties mogen worden gegeven, deze zullen sequentieel "
-#~ "worden geëvalueerd."
+#~ msgid "  Multiple -e options may be given, they will be evaluated sequentially."
+#~ msgstr "  Verscheidene -e opties mogen worden gegeven, deze zullen sequentieel worden geëvalueerd."
 
-#~ msgid ""
-#~ "  The function ly-set-option allows for access to some internal variables."
-#~ msgstr ""
-#~ "  De functie ly-set-option verschaft toegang tot bepaalde interne "
-#~ "variabelen."
+#~ msgid "  The function ly-set-option allows for access to some internal variables."
+#~ msgstr "  De functie ly-set-option verschaft toegang tot bepaalde interne variabelen."
 
 #~ msgid "Usage: lilypond-bin -e \"(ly-set-option SYMBOL VAL)\""
 #~ msgstr "Gebruik: lilypond-bin -e \"(ly-set-option SYMBOOL WAARDE)\""
@@ -3997,10 +4424,8 @@ msgstr ""
 #~ msgid "TFM header of `%s' has only %u word (s)"
 #~ msgstr "TFM kop van `%s' heeft slechts %u woord(en)"
 
-#~ msgid ""
-#~ "%s: TFM file has %u parameters, which is more than the %u I can handle"
-#~ msgstr ""
-#~ "%s: TFM bestand heeft %u parameters, wat meer is dan de %u die ik aan kan"
+#~ msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
+#~ msgstr "%s: TFM bestand heeft %u parameters, wat meer is dan de %u die ik aan kan"
 
 #~ msgid "no one to print a tuplet start bracket"
 #~ msgstr "niemand om een x-ool start haak af te drukken"
@@ -4017,6 +4442,9 @@ msgstr ""
 #~ msgid "Identifier should have alphabetic characters only"
 #~ msgstr "Identifier mag uitsluitend alfabetische tekens hebben"
 
+#~ msgid "\\apply takes function argument"
+#~ msgstr "\\apply neemt een functieargument"
+
 #~ msgid "Can't find music"
 #~ msgstr "Kan geen muziek vinden"
 
@@ -4035,19 +4463,11 @@ msgstr ""
 #~ msgid "Incorrect lilypond version: %s (%s, %s)"
 #~ msgstr "Verkeerde lilypond versie: %s (%s, %s)"
 
-#~ msgid ""
-#~ "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)."
-#~ msgstr ""
-#~ "Deze pagina is voor %(package_name)s-%(package_version)s (%(branch_str)s)."
-
-#~ msgid ""
-#~ "Report errors to <a href=\"%(mail_address_url)s\">%(mail_address)s</a>."
-#~ msgstr ""
-#~ "Meld fouten naar <a href=\\\"%(mail_address_url)s\\\">%(mail_address)s</"
-#~ "a>."
+#~ msgid "This page is for %(package_name)s-%(package_version)s (%(branch_str)s)."
+#~ msgstr "Deze pagina is voor %(package_name)s-%(package_version)s (%(branch_str)s)."
 
-#~ msgid "About <A HREF=\"%s\">automatic language selection</A>."
-#~ msgstr "Gebruik van <A HREF=\\\"%s\\\">automatische taalkeuze</A>.\n"
+#~ msgid "Report errors to <a href=\"%(mail_address_url)s\">%(mail_address)s</a>."
+#~ msgstr "Meld fouten naar <a href=\\\"%(mail_address_url)s\\\">%(mail_address)s</a>."
 
 #~ msgid "stable-branch"
 #~ msgstr "stabiele tak"
index cf49539a671a7f2b1a3bff109f7168848a545f80..404e80c88e5834ef51dca42dba2fe487029a89f5 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -1,19 +1,18 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Free Software Foundation, Inc.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# Russian translation for Lilypond.
+# Copyright (C) 2006 Free Software Foundation, Inc.
+# August S. Sigov <august@infran.ru>, 2006
 #
-#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: lilypond 1.6.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-12-24 10:40+0100\n"
 "PO-Revision-Date: 2006-12-23 16:16+0100\n"
-"Last-Translator: August S.Sigov <august@infran.ru>\n"
-"Language-Team: Russian <ru@li.org>\n"
+"Last-Translator: August S. Sigov <august@infran.ru>\n"
+"Language-Team: Russian <gnu@mx.ru>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=koi8-r\n"
-"Content-Transfer-Encoding: ENCODING\n"
+"Content-Transfer-Encoding: 8bit\n"
 
 #: convertrules.py:12
 #, python-format
index 95774a1e74b838191e959200c33096584f49c682..98e061332cf4c0a4f835b6e46f77aa9717767342 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
 msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 1.7.26\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-12-24 10:40+0100\n"
-"PO-Revision-Date: 2006-12-23 16:16+0100\n"
+"POT-Creation-Date: 2003-07-18 14:45+0200\n"
+"PO-Revision-Date: 2003-08-23 13:30+0200\n"
 "Last-Translator: Martin Norbäck <d95mback@dtek.chalmers.se>\n"
 "Language-Team: Swedish <sv@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: convertrules.py:12
-#, python-format
-msgid "Not smart enough to convert %s"
-msgstr ""
+#. this is where special info is often stored
+#. ###############################################################
+#. lilylib.py -- options and stuff
+#.
+#. source file of the GNU LilyPond music typesetter
+#.
+#. (c)  1998--2003  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+#. Jan Nieuwenhuizen <janneke@gnu.org>
+#. ##  subst:\(^\|[^._a-z]\)\(abspath\|identify\|warranty\|progress\|warning\|error\|exit\|getopt_args\|option_help_str\|options_help_str\|help\|setup_temp\|read_pipe\|system\|cleanup_temp\|strip_extension\|cp_to_dir\|mkdir_p\|init\) *(
+#. ##  replace:\1ly.\2 (
+#. ## subst: \(help_summary\|keep_temp_dir_p\|option_definitions\|original_dir\|program_name\|pseudo_filter_p\|temp_dir\|verbose_p\)
+#. ###############################################################
+#. Users of python modules should include this snippet
+#. and customize variables below.
+#. We'll suffer this path init stuff as long as we don't install our
+#. python packages in <prefix>/lib/pythonx.y (and don't kludge around
+#. it as we do with teTeX on Red Hat Linux: set some environment var
+#. (PYTHONPATH) in profile)
+#. If set, LILYPONDPREFIX must take prevalence
+#. if datadir is not set, we're doing a build and LILYPONDPREFIX
+#. Customize these
+#. lilylib globals
+#: lilylib.py:60
+msgid "lilylib module"
+msgstr "lilylib-modul"
 
-#: convertrules.py:13
-msgid "Please refer to the manual for details, and update manually."
-msgstr ""
+# förklaring av flaggan -h
+#: lilylib.py:63 lilypond-book.py:131 ly2dvi.py:128 midi2ly.py:100
+#: mup2ly.py:75 main.cc:111
+msgid "this help"
+msgstr "denna hjälp"
 
-#: convertrules.py:14
-#, python-format
-msgid "%s has been replaced by %s"
-msgstr ""
+#. ###############################################################
+#. Handle bug in Python 1.6-2.1
+#.
+#. there are recursion limits for some patterns in Python 1.6 til 2.1.
+#. fix this by importing pre instead. Fix by Mats.
+#. Attempt to fix problems with limited stack size set by Python!
+#. Sets unlimited stack size. Note that the resource module only
+#. is available on UNIX.
+#: lilylib.py:114 midi2ly.py:136 mup2ly.py:130 main.cc:188 main.cc:200
+#, c-format, python-format
+msgid "Copyright (c) %s by"
+msgstr "Copyright © %s av"
 
-#: convertrules.py:2398
-msgid "LilyPond source must be UTF-8"
-msgstr ""
+#: lilylib.py:114
+msgid " 1998--2003"
+msgstr " 1998-2003"
 
-#: convertrules.py:2401
-msgid "Try the texstrings backend"
-msgstr ""
+#: lilylib.py:118
+msgid "Distributed under terms of the GNU General Public License."
+msgstr "Distribueras under GNU General Public License."
 
-#: convertrules.py:2404
+#: lilylib.py:120
+msgid "It comes with NO WARRANTY."
+msgstr "INGEN GARANTI ges för programmet."
+
+#: lilylib.py:127 midi2ly.py:150 mup2ly.py:144 input.cc:88
+msgid "warning: "
+msgstr "varning: "
+
+#. lots of midi files use plain text for lyric events
+#. FIXME: read from stdin when files[0] = '-'
+#: lilylib.py:130 midi2ly.py:165 midi2ly.py:1018 midi2ly.py:1083 mup2ly.py:147
+#: mup2ly.py:161 input.cc:93
+msgid "error: "
+msgstr "fel: "
+
+#: lilylib.py:134
 #, python-format
-msgid "Do something like: %s"
-msgstr ""
+msgid "Exiting (%d)..."
+msgstr "Avslutar (%d)... "
+
+#: lilylib.py:194 midi2ly.py:224 mup2ly.py:220
+#, python-format
+msgid "Usage: %s [OPTION]... FILE"
+msgstr "Användning: %s [FLAGGA]... FIL"
+
+#: lilylib.py:198 midi2ly.py:228 mup2ly.py:224 main.cc:166
+msgid "Options:"
+msgstr "Flaggor:"
 
-#: convertrules.py:2407
-msgid "Or save as UTF-8 in your editor"
+#: lilylib.py:202 midi2ly.py:232 mup2ly.py:228 main.cc:172
+#, c-format, python-format
+msgid "Report bugs to %s"
 msgstr ""
+"Rapportera programfel till %s\n"
+"Rapportera fel i översättningen till <sv@li.org>"
 
-#: fontextract.py:26
-#, fuzzy, python-format
-msgid "Scanning %s"
-msgstr "varning: %s\n"
+#: lilylib.py:228
+#, python-format
+msgid "Opening pipe `%s'"
+msgstr "Öppnar rör \"%s\"..."
 
-#: fontextract.py:71
+#. successful pipe close returns 'None'
+#: lilylib.py:240
 #, python-format
-msgid "Extracted %s"
-msgstr ""
+msgid "`%s' failed (%d)"
+msgstr "\"%s\" misslyckades (%d)"
 
-#: fontextract.py:86
-#, fuzzy, python-format
-msgid "Writing fonts to %s"
-msgstr "kan inte skapa katalog: \"%s\""
+#: lilylib.py:242 lilylib.py:289 lilypond-book.py:231 ly2dvi.py:512
+msgid "The error log is as follows:"
+msgstr "Felloggen är följande:"
 
-#: lilylib.py:85 lilylib.py:136
+#: lilylib.py:262 midi2ly.py:260 mup2ly.py:256
 #, python-format
 msgid "Invoking `%s'"
 msgstr "Startar \"%s\""
 
-#: lilylib.py:87 lilylib.py:138
+#: lilylib.py:264
 #, python-format
 msgid "Running %s..."
 msgstr "Kör %s..."
 
-#: lilylib.py:203
-#, fuzzy, python-format
-msgid "Usage: %s"
-msgstr "varning: %s\n"
-
-#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
-#, fuzzy, python-format
-msgid "%s [OPTION]... FILE"
-msgstr "Användning: %s [FLAGGA]... FIL"
-
-#: abc2ly.py:1351
+#: lilylib.py:282
 #, python-format
-msgid ""
-"abc2ly converts ABC music files (see\n"
-"%s) to LilyPond input."
-msgstr ""
+msgid "`%s' failed (%s)"
+msgstr "\"%s\" misslyckades (%s)"
 
-#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "skriv utdata till FIL"
+#: lilylib.py:285 midi2ly.py:266 mup2ly.py:264
+msgid "(ignored)"
+msgstr "(ignorerat)"
 
-#: abc2ly.py:1357
-msgid "be strict about succes"
-msgstr ""
+# här är det fråga om rensning av en temporärkatalog
+#: lilylib.py:299 midi2ly.py:276 mup2ly.py:274
+#, python-format
+msgid "Cleaning %s..."
+msgstr "Rensar %s..."
 
-#: abc2ly.py:1359
-msgid "preserve ABC's notion of beams"
-msgstr ""
+#. Duh.  Python style portable: cp *.EXT OUTDIR
+#. system ('cp *.%s %s' % (ext, outdir), 1)
+#. Python < 1.5.2 compatibility
+#.
+#. On most platforms, this is equivalent to
+#. `normpath(join(os.getcwd()), PATH)'.  *Added in Python version 1.5.2*
+#. tex needs lots of memory, more than it gets by default on Debian
+#. TODO: * prevent multiple addition.
+#. * clean TEXINPUTS, MFINPUTS, TFMFONTS,
+#. as these take prevalence over $TEXMF
+#. and thus may break tex run?
+#. $TEXMF is special, previous value is already taken care of
+#. # -sOutputFile does not work with bbox?
+#. # todo:
+#. # have better algorithm for deciding when to crop page,
+#. # and when to show full page
+#: lilylib.py:458
+msgid "Removing output file"
+msgstr "Tar bort utdatafilen"
+
+#. !@PYTHON@
+#. once upon a rainy monday afternoon.
+#.
+#. ...
+#.
+#. (not finished.)
+#. ABC standard v1.6:  http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt
+#.
+#. Enhancements  (Roy R. Rankin)
+#.
+#. Header section moved to top of lilypond file
+#. handle treble, treble-8, alto, and bass clef
+#. Handle voices (V: headers) with clef and part names, multiple voices
+#. Handle w: lyrics with multiple verses
+#. Handle key mode names for minor, major, phrygian, ionian, locrian, aeolian,
+#. mixolydian, lydian, dorian
+#. Handle part names from V: header
+#. Tuplets handling fixed up
+#. Lines starting with |: not discarded as header lines
+#. Multiple T: and C: header entries handled
+#. Accidental maintained until next bar check
+#. Silent rests supported
+#. articulations fermata, upbow, downbow, ltoe, accent, tenuto supported
+#. Chord strings([-^]"string") can contain a '#'
+#. Header fields enclosed by [] in notes string processed
+#. W: words output after tune as abc2ps does it (they failed before)
+#. Enhancements (Laura Conrad)
+#.
+#. Barring now preserved between ABC and lilypond
+#. the default placement for text in abc is above the staff.
+#. %%LY now supported.
+#. \breve and \longa supported.
+#. M:none doesn't crash lily.
+#. Limitations
+#.
+#. Multiple tunes in single file not supported
+#. Blank T: header lines should write score and open a new score
+#. Not all header fields supported
+#. ABC line breaks are ignored
+#. Block comments generate error and are ignored
+#. Postscript commands are ignored
+#. lyrics not resynchronized by line breaks (lyrics must fully match notes)
+#. %%LY slyrics can't be directly before a w: line.
+#. ???
+#. TODO:
+#.
+#. Convert to new chord styles.
+#.
+#. UNDEF -> None
+#.
+#. uGUHGUHGHGUGH
+#. UGH
+#. treble8 is used by abctab2ps; -8va is used by barfly,
+#. and by my patch to abc2ps. If there's ever a standard
+#. about this we'll support that.
+#. find keywork
+#. assume that Q takes the form "Q:1/4=120"
+#. There are other possibilities, but they are deprecated
+#. outf.write ("\t\t\\consists Staff_margin_engraver\n")
+#. pitch manipulation. Tuples are (name, alteration).
+#. 0 is (central) C. Alteration -1 is a flat, Alteration +1 is a sharp
+#. pitch in semitones.
+#. abc to lilypond key mode names
+#. semitone shifts for key mode names
+#. latex does not like naked #'s
+#. latex does not like naked "'s
+#. break lyrics to words and put "'s around words containing numbers and '"'s
+#. escape "
+#. _ causes probs inside ""
+#. _ to ' _ '
+#. split words with -
+#. unless \-
+#. ~ to space('_')
+#. * to to space
+#. latex does not like naked #'s
+#. put numbers and " and ( into quoted string
+#. insure space between lines
+#. title
+#. strip trailing blanks
+#. Meter
+#. KEY
+#. seperate clef info
+#. there may or may not be a space
+#. between the key letter and the mode
+#. ugh.
+#. ugh.
+#. Notes
+#. Origin
+#. Reference Number
+#. Area
+#. History
+#. Book
+#. Composer
+#. Default note length
+#. Voice
+#. Words
+#. vocals
+#. tempo
+#. we use in this order specified accidental, active accidental for bar,
+#. active accidental for key
+#. (num /  den)  / defaultlen < 1/base
+#. return (str, num,den,dots)
+#. ignore slide
+#. ignore roll
+#. s7m2 input doesnt care about spaces
+#.
+#. remember accidental for rest of bar
+#.
+#. get accidental set in this bar or UNDEF if not set
+#. WAT IS ABC EEN ONTZETTENDE PROGRAMMEERPOEP  !
+#. failed; not a note!
+#. escape '#'s
+#.
+#. |] thin-thick double bar line
+#. || thin-thin double bar line
+#. [| thick-thin double bar line
+#. :| left repeat
+#. |: right repeat
+#. :: left-right repeat
+#. |1 volta 1
+#. |2 volta 2
+#. first try the longer one
+#. bracket escape
+#. the nobarlines option is necessary for an abc to lilypond translator for
+#. exactly the same reason abc2midi needs it: abc requires the user to enter
+#. the note that will be printed, and MIDI and lilypond expect entry of the
+#. pitch that will be played.
+#.
+#. In standard 19th century musical notation, the algorithm for translating
+#. between printed note and pitch involves using the barlines to determine
+#. the scope of the accidentals.
+#.
+#. Since ABC is frequently used for music in styles that do not use this
+#. convention, such as most music written before 1700, or ethnic music in
+#. non-western scales, it is necessary to be able to tell a translator that
+#. the barlines should not affect its interpretation of the pitch.
+#. write other kinds of appending  if we ever need them.
+#. add comments to current voice
+#. Try nibbling characters off until the line doesn't change.
+#. dump_global (outf)
+#. !@PYTHON@
+#.
+#. convert-ly.py -- Update old LilyPond input files (fix name?)
+#.
+#. source file of the GNU LilyPond music typesetter
+#.
+#. (c)  1998--2003  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+#. Jan Nieuwenhuizen <janneke@gnu.org>
+#. TODO
+#. use -f and -t for -s output
+#. NEWS
+#. 0.2
+#. - rewrite in python
+#. Did we ever have \mudela-version?  I doubt it.
+#. lilypond_version_re_str = '\\\\version *\"(.*)\"'
+#. ###########################
+#. need new a namespace
+#. raise FatalConversionError()
+#. need new a namespace
+#. harmful to current .lys
+#. str = re.sub ('\\\\key([^;]+);', '\\\\accidentals \\1;', str)
+#. raise FatalConversionError()
+#. raise FatalConversionError()
+#. raise FatalConversionError()
+#. TODO: lots of other syntax change should be done here as well
+#. Ugh, but meaning of \stemup changed too
+#. maybe we should do \stemup -> \stemUp\slurUp\tieUp ?
+#. I don't know exactly when these happened...
+#. ugh, we loose context setting here...
+#. (lacks capitalisation slur -> Slur)
+#. # dynamic..
+#. TODO: add lots of these
+#. ugh
+#. old fix
+#. Make sure groups of more than one ; have space before
+#. them, so that non of them gets removed by next rule
+#. Only remove ; that are not after spaces, # or ;
+#. Otherwise  we interfere with Scheme comments,
+#. which is badbadbad.
+#. 40 ?
+#. ###############################
+#. END OF CONVERSIONS
+#. ###############################
+#. !@PYTHON@
+#. info mostly taken from looking at files. See also
+#. http://lilypond.org/wiki/?EnigmaTransportFormat
+#. This supports
+#.
+#. * notes
+#. * rests
+#. * ties
+#. * slurs
+#. * lyrics
+#. * articulation
+#. * grace notes
+#. * tuplets
+#.
+#. todo:
+#. * slur/stem directions
+#. * voices (2nd half of frame?)
+#. * more intelligent lyrics
+#. * beams (better use autobeam?)
+#. * more robust: try entertainer.etf (freenote)
+#. * dynamics
+#. * empty measures (eg. twopt03.etf from freenote)
+#.
+#. uGUHGUHGHGUGH
+#. notename 0 == central C
+#. represent pitches as (notename, alteration), relative to C-major scale
+#. a fifth up
+#. should cache this.
+#. flag1 isn't all that interesting.
+#. 3: '>',
+#. 18: '\arpeggio' ,
+#. do grace notes.
+#. ugh.
+#. we don't attempt voltas since they fail easily.
+#. and g.repeat_bar == '|:' or g.repeat_bar == ':|:' or g.bracket:
+#. 4 layers.
+#. let's not do this: this really confuses when eE happens to be before  a ^text.
+#. if last_tag and last_indices:
+#. etf_file_dict[last_tag][last_indices].append (l)
+#. # do it
+#. staff-spec
+#. should use \addlyrics ?
+#. !@PYTHON@
+#. vim: set noexpandtab:
+#. This is was the idea for handling of comments:
+#. Multiline comments, @ignore .. @end ignore is scanned for
+#. in read_doc_file, and the chunks are marked as 'ignore', so
+#. lilypond-book will not touch them any more. The content of the
+#. chunks are written to the output file. Also 'include' and 'input'
+#. regex has to check if they are commented out.
+#.
+#. Then it is scanned for 'lilypond', 'lilypond-file' and 'lilypond-block'.
+#. These three regex's has to check if they are on a commented line,
+#. % for latex, @c for texinfo.
+#.
+#. Then lines that are commented out with % (latex) and @c (Texinfo)
+#. are put into chunks marked 'ignore'. This cannot be done before
+#. searching for the lilypond-blocks because % is also the comment character
+#. for lilypond.
+#.
+#. The the rest of the rexeces are searched for. They don't have to test
+#. if they are on a commented out line.
+#. ###############################################################
+#. Users of python modules should include this snippet
+#. and customize variables below.
+#. We'll suffer this path init stuff as long as we don't install our
+#. python packages in <prefix>/lib/pythonx.y (and don't kludge around
+#. it as we do with teTeX on Red Hat Linux: set some environment var
+#. (PYTHONPATH) in profile)
+#. If set, LILYPONDPREFIX must take prevalence
+#. if datadir is not set, we're doing a build and LILYPONDPREFIX
+#. Customize these
+#. if __name__ == '__main__':
+#. lilylib globals
+#. temp_dir = os.path.join (original_dir,  '%s.dir' % program_name)
+#. urg
+#. # FIXME
+#. # ly2dvi: silly name?
+#. # do -P or -p by default?
+#. #help_summary = _ ("Run LilyPond using LaTeX for titling")
+#: lilypond-book.py:120
+msgid "Process LilyPond snippets in hybrid html, LaTeX or texinfo document"
+msgstr "Bearbeta LilyPond-stycken i ett hybriddokument i html, LaTex eller texinfo"
+
+#. another bug in option parser: --output=foe is taken as an abbreviation
+#. for --output-format
+#: lilypond-book.py:125 main.cc:110
+msgid "EXT"
+msgstr "FMT"
+
+#: lilypond-book.py:125
+msgid "use output format EXT (texi [default], texi-html, latex, html)"
+msgstr "använd utdataformat FMT (texi [standard], texi-html, latex, html)"
 
-#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
-#: midi2ly.py:911 musicxml2ly.py:505
-#, fuzzy
-msgid "Report bugs via"
-msgstr ""
-"Rapportera programfel till %s\n"
-"Rapportera fel i översättningen till <sv@li.org>"
+#: lilypond-book.py:126 lilypond-book.py:127 lilypond-book.py:129
+#: lilypond-book.py:130
+msgid "DIM"
+msgstr "DIM"
 
-#: convert-ly.py:41
-msgid ""
-"Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version."
-msgstr ""
+#: lilypond-book.py:126
+msgid "default fontsize for music.  DIM is assumed to be in points"
+msgstr "standardtypsnittsstorlek för musik. DIM anges i punkter"
 
-#: convert-ly.py:43 lilypond-book.py:73
-#, fuzzy
-msgid "Examples:"
-msgstr "Exempel:"
+#: lilypond-book.py:127
+msgid "deprecated, use --default-music-fontsize"
+msgstr "föråldrad, använd --default-music-fontsize"
 
-#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
-#, fuzzy, c-format, python-format
-msgid "warning: %s"
-msgstr "varning: %s\n"
+#: lilypond-book.py:128
+msgid "OPT"
+msgstr "OPT"
 
-#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
-#, fuzzy, c-format, python-format
-msgid "error: %s"
-msgstr "fel: %s\n"
+#: lilypond-book.py:128
+msgid "pass OPT quoted to the lilypond command line"
+msgstr "skicka OPT till lilyponds kommandorad"
 
-#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
-msgid "Distributed under terms of the GNU General Public License."
-msgstr "Distribueras under GNU General Public License."
+#: lilypond-book.py:129
+msgid "force fontsize for all inline lilypond. DIM is assumed be to in points"
+msgstr "tvinga typsnittsstorlek för all inbäddad lilypond. DIM anger i punkter"
 
-#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
-msgid "It comes with NO WARRANTY."
-msgstr "INGEN GARANTI ges för programmet."
+#: lilypond-book.py:130
+msgid "deprecated, use --force-music-fontsize"
+msgstr "föråldrad, använd --force-music-fontsize"
 
-#: convert-ly.py:86 convert-ly.py:106
-msgid "VERSION"
-msgstr ""
+#: lilypond-book.py:132 ly2dvi.py:130 main.cc:113 main.cc:118
+msgid "DIR"
+msgstr "KATALOG"
 
-#: convert-ly.py:88
-msgid "start from VERSION [default: \\version found in file]"
-msgstr ""
+#: lilypond-book.py:132
+msgid "include path"
+msgstr "sökväg för inkluderade filer"
 
-#: convert-ly.py:91
-msgid "edit in place"
-msgstr ""
+#: lilypond-book.py:133
+msgid "write dependencies"
+msgstr "skriv beroenden"
 
-#: convert-ly.py:94
-msgid "do not add \\version command if missing"
-msgstr ""
+#: lilypond-book.py:134
+msgid "PREF"
+msgstr "PREF"
 
-#: convert-ly.py:100
-msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
-msgstr ""
+#: lilypond-book.py:134
+msgid "prepend PREF before each -M dependency"
+msgstr "lägg till PREF före varje beroende angett med -M"
 
-#: convert-ly.py:105
-msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
-msgstr ""
+#: lilypond-book.py:135
+msgid "don't run lilypond"
+msgstr "kör inte lilypond"
 
-#: convert-ly.py:153
-msgid "Applying conversion: "
-msgstr ""
+#: lilypond-book.py:136
+msgid "don't generate pictures"
+msgstr "skapa inte bilder"
 
-#: convert-ly.py:166
-msgid "Error while converting"
-msgstr ""
+#: lilypond-book.py:137
+msgid "strip all lilypond blocks from output"
+msgstr "ta bort alla lilypond-block från utdata"
 
-#: convert-ly.py:168
-msgid "Stopping at last succesful rule"
-msgstr ""
+#: lilypond-book.py:138 lilypond-book.py:139 ly2dvi.py:135 ly2dvi.py:136
+#: midi2ly.py:102 main.cc:114 main.cc:117
+msgid "FILE"
+msgstr "FIL"
 
-#: convert-ly.py:190
-#, fuzzy, python-format
-msgid "Processing `%s'... "
-msgstr "Behandlar \"%s\"..."
+#: lilypond-book.py:138
+msgid "filename main output file"
+msgstr "filnamn på huvudutdatafilen"
 
-#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
-#, c-format, python-format
-msgid "cannot open file: `%s'"
-msgstr "kan inte öppna fil: \"%s\""
+#: lilypond-book.py:139
+msgid "where to place generated files"
+msgstr "var genererade filer ska läggas"
 
-#: convert-ly.py:284
-#, fuzzy, python-format
-msgid "cannot determine version for `%s'.  Skipping"
-msgstr "kan inte hitta standardtypsnitt: \"%s\""
+#: lilypond-book.py:140 ly2dvi.py:137
+msgid "RES"
+msgstr "RES"
 
-#: etf2ly.py:1196
-#, fuzzy, python-format
-msgid "%s [OPTION]... ETF-FILE"
-msgstr "Användning: %s [FLAGGA]... FIL"
+#: lilypond-book.py:141 ly2dvi.py:138
+msgid "set the resolution of the preview to RES"
+msgstr "sätt resolutionen för förhandsgranskningen till RES"
 
-#: etf2ly.py:1198
-msgid ""
-"Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
-"file."
-msgstr ""
+# Förklaring till --verbose (borde vara längre)
+#: lilypond-book.py:142 ly2dvi.py:148 midi2ly.py:105 mup2ly.py:78 main.cc:126
+msgid "verbose"
+msgstr "utförlig utdata"
 
-#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
-msgid "FILE"
-msgstr "FIL"
+#: lilypond-book.py:143
+msgid "print version information"
+msgstr "visa versionsinformation"
 
-#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+#: lilypond-book.py:144 ly2dvi.py:150 midi2ly.py:107 mup2ly.py:80 main.cc:127
 msgid "show warranty and copyright"
 msgstr "visa garanti och copyright"
 
-#: lilypond-book.py:71
-#, fuzzy
-msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
-msgstr ""
-"Bearbeta LilyPond-stycken i ett hybriddokument i html, LaTex eller texinfo"
-
-#: lilypond-book.py:78
-msgid "BOOK"
-msgstr ""
-
-#: lilypond-book.py:87
-#, python-format
-msgid "Exiting (%d)..."
-msgstr "Avslutar (%d)... "
+#. format specific strings, ie. regex-es for input, and % strings for output
+#. global variables
+#. lilypond_binary = 'valgrind --suppressions=/home/hanwen/usr/src/guile-1.6.supp  --num-callers=10 /home/hanwen/usr/src/lilypond/lily/out/lilypond'
+#. only use installed binary  when we're installed too.
+#. only use installed binary  when we're installed too.
+#. ###############################################################
+#. Dimension handling for LaTeX.
+#.
+#. Ugh.  (La)TeX writes progress and error messages on stdout
+#. Redirect to stderr
+#: lilypond-book.py:230
+msgid "LaTeX failed."
+msgstr "LaTeX misslyckades."
 
-#: lilypond-book.py:119
+#. URG see ly2dvi
+#. Convert numeric values, with or without specific dimension, to floats.
+#. Keep other strings
+#. ###############################################################
+#. How to output various structures.
+#. # maybe <hr> ?
+#. Verbatim text is always finished with \n.  FIXME: For HTML,
+#. this newline should be removed.
+#. Verbatim text is always finished with \n.  FIXME: For HTML,
+#. this newline should be removed.
+#. # Ugh we need to differentiate on origin:
+#. # lilypond-block origin wants an extra <p>, but
+#. # inline music doesn't.
+#. # possibly other center options?
+#. verbatim text is always finished with \n
+#. verbatim text is always finished with \n
+#. verbatim text is always finished with \n
+#. verbatim text is always finished with \n
+#. do some tweaking: @ is needed in some ps stuff.
+#.
+#. ugh, the <p> below breaks inline images...
+#. clumsy workaround for python 2.2 pre bug.
+#. ###############################################################
+#. Recognize special sequences in the input
+#. Warning: This uses extended regular expressions.  Tread with care.
+#.
+#. legenda
+#.
+#. (?P<name>regex) -- assign result of REGEX to NAME
+#. *? -- match non-greedily.
+#. (?m) -- multiline regex: make ^ and $ match at each line
+#. (?s) -- make the dot match all characters including newline
+#. why do we have distinction between @mbinclude and @include?
+#. # we'd like to catch and reraise a more
+#. # detailed error, but alas, the exceptions
+#. # changed across the 1.5/2.1 boundary.
+#. ughUGH not original options
+#. First we want to scan the \documentclass line
+#. it should be the first non-comment line.
+#. The only thing we really need to know about the \documentclass line
+#. is if there are one or two columns to begin with.
+#. Then we add everything before \begin{document} to
+#. paperguru.m_document_preamble so that we can later write this header
+#. to a temporary file in find_latex_dims() to find textwidth.
+#. this is not bulletproof..., it checks the first 10 chunks
+#. newchunks.extend (func (m))
+#. python 1.5 compatible:
+#. we have to check for verbatim before doing include,
+#. because we don't want to include files that are mentioned
+#. inside a verbatim environment
+#. ugh fix input
+#. # Hmm, we should hash only lilypond source, and skip the
+#. # %options are ...
+#. # comment line
+#. # todo: include path, but strip
+#. # first part of the path.
+#. format == 'html'
+#. ugh rename
+#. Count sections/chapters.
+#. # TODO: do something like
+#. # this for texinfo/latex as well ?
+#. ugh
+#. fixme: be sys-independent.
+#.
+#. Ugh, fixing up dependencies for .tex generation
+#.
+#. Ugh.  (La)TeX writes progress and error messages on stdout
+#. Redirect to stderr
+#. # There used to be code to write .tex dependencies, but
+#. # that is silly: lilypond-book has its own dependency scheme
+#. # to ensure that all lily-XXX.tex files are there
+#. # TODO: put file name in front of texidoc.
+#. #
+#. # what's this? Docme --hwn
+#. #
+#. #docme: why global?
+#. Do It.
+#. should chmod -w
+#: lilypond-book.py:1557 ly2dvi.py:673 midi2ly.py:1018
 #, python-format
-msgid "Copyright (c) %s by"
-msgstr "Copyright © %s av"
+msgid "getopt says: `%s'"
+msgstr "getopt säger: \"%s\""
 
-#: lilypond-book.py:129
-#, fuzzy
-msgid "FILTER"
-msgstr "FIL"
+#. HACK
+#. status = os.system ('lilypond -w')
+#: lilypond-book.py:1630 ly2dvi.py:777
+msgid "no files specified on command line"
+msgstr "inga filer angivna på kommandoraden"
 
-#: lilypond-book.py:132
-msgid "pipe snippets through FILTER [convert-ly -n -]"
-msgstr ""
+#.
+#. Petr, ik zou willen dat ik iets zinvoller deed,
+#. maar wat ik kan ik doen, het verandert toch niets?
+#. --hwn 20/aug/99
+#. !@PYTHON@
+#.
+#. ly2dvi.py -- Run LilyPond, add titles to bare score, generate printable
+#. document
+#. Invokes: lilypond, latex (or pdflatex), dvips, ps2pdf, gs
+#.
+#. source file of the GNU LilyPond music typesetter
+#.
+#. (c)  1998--2003  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+#. Jan Nieuwenhuizen <janneke@gnu.org>
+#. This is the third incarnation of ly2dvi.
+#.
+#. Earlier incarnations of ly2dvi were written by
+#. Jeffrey B. Reed<daboys@austin.rr.com> (Python version)
+#. Jan Arne Fagertun <Jan.A.Fagertun@@energy.sintef.no> (Bourne shell script)
+#.
+#. Note: gettext work best if we use ' for docstrings and "
+#. for gettextable strings.
+#. --> DO NOT USE ''' for docstrings.
+#. ###############################################################
+#. Users of python modules should include this snippet
+#. and customize variables below.
+#. We'll suffer this path init stuff as long as we don't install our
+#. python packages in <prefix>/lib/pythonx.y (and don't kludge around
+#. it as we do with teTeX on Red Hat Linux: set some environment var
+#. (PYTHONPATH) in profile)
+#. If set, LILYPONDPREFIX must take prevalence
+#. if datadir is not set, we're doing a build and LILYPONDPREFIX
+#. Customize these
+#. if __name__ == '__main__':
+#. lilylib globals
+#. # FIXME
+#. # ly2dvi: silly name?
+#. # do -P or -p by default?
+#. #help_summary = _ ("Run LilyPond using LaTeX for titling")
+#: ly2dvi.py:121
+msgid "Run LilyPond, add titles, generate printable document"
+msgstr "Kör LilyPond, lägg till titlar, skapa utskrivbart dokument"
+
+#: ly2dvi.py:127 main.cc:115
+msgid "write Makefile dependencies for every input file"
+msgstr "skriv Makefile-beroenden för varje indatafil"
+
+#: ly2dvi.py:129
+msgid "print even more output"
+msgstr "skriv ännu mer utdata"
+
+#: ly2dvi.py:130
+msgid "add DIR to LilyPond's search path"
+msgstr "lägg till KATALOG till LilyPonds sökväg"
 
-#: lilypond-book.py:135
-#, fuzzy
-msgid ""
-"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
-msgstr "använd utdataformat FMT (texi [standard], texi-html, latex, html)"
+# %s är programmets namn
+#: ly2dvi.py:132
+#, python-format
+msgid "keep all output, output to directory %s.dir"
+msgstr "behåll all utdata, utdata till katalogen %s.dir"
 
-#: lilypond-book.py:138
-#, fuzzy
-msgid "add DIR to include path"
-msgstr "lägg till KATALOG till sökvägen"
+#: ly2dvi.py:133
+msgid "don't run LilyPond"
+msgstr "kör inte LilyPond"
 
-#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
-msgid "DIR"
-msgstr "KATALOG"
+#: ly2dvi.py:134 main.cc:116
+msgid "produce MIDI output only"
+msgstr "skapa enbart MIDI-utdata"
 
-#: lilypond-book.py:143
-#, fuzzy
-msgid "write output to DIR"
+#: ly2dvi.py:135 midi2ly.py:102
+msgid "write ouput to FILE"
 msgstr "skriv utdata till FIL"
 
-#: lilypond-book.py:147
-msgid "COMMAND"
-msgstr ""
-
-#: lilypond-book.py:148
-msgid "process ly_files using COMMAND FILE..."
-msgstr ""
+#: ly2dvi.py:136
+msgid "find pfa fonts used in FILE"
+msgstr "hitta pfa-typsnitt som används i FIL"
 
-#: lilypond-book.py:154
-msgid "Create PDF files for use with PDFTeX"
-msgstr ""
+#: ly2dvi.py:139
+msgid "generate PostScript output"
+msgstr "skapa PostScript-utdata"
 
-#: lilypond-book.py:157
-msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
-"must use this with dvips -h INPUT.psfonts"
-msgstr ""
+#: ly2dvi.py:140
+msgid "generate PNG page images"
+msgstr "skapa PNG-sidbilder"
 
-#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
-msgid "be verbose"
-msgstr "var utförlig"
+#: ly2dvi.py:141
+msgid "generate PS.GZ"
+msgstr "skapa PS.GZ"
 
-#: lilypond-book.py:773
-#, fuzzy, python-format
-msgid "file not found: %s"
-msgstr "klav \"%s\" hittades inte"
+#: ly2dvi.py:142
+msgid "generate PDF output"
+msgstr "skapa PDF-utdata"
 
-#: lilypond-book.py:1004
-#, python-format
-msgid "deprecated ly-option used: %s=%s"
-msgstr ""
+#: ly2dvi.py:143
+msgid "use pdflatex to generate a PDF output"
+msgstr "använd pdflatex för att generera PDF-utdata"
 
-#: lilypond-book.py:1007
-#, python-format
-msgid "compatibility mode translation: %s=%s"
-msgstr ""
+#. FIXME: preview, picture; to indicate creation of a PNG?
+#: ly2dvi.py:145
+msgid "make a picture of the first system"
+msgstr "skapa en bild av det första systemet"
 
-#: lilypond-book.py:1011
-#, python-format
-msgid "deprecated ly-option used: %s"
-msgstr ""
+#: ly2dvi.py:146
+msgid "make HTML file with links to all output"
+msgstr "skapa en HTML-fil som länkar till all utdata"
 
-#: lilypond-book.py:1014
-#, python-format
-msgid "compatibility mode translation: %s"
-msgstr ""
+#: ly2dvi.py:147
+msgid "KEY=VAL"
+msgstr "NYCKEL=VÄRDE"
 
-#: lilypond-book.py:1033
-#, python-format
-msgid "ignoring unknown ly option: %s"
-msgstr ""
+#: ly2dvi.py:147
+msgid "change global setting KEY to VAL"
+msgstr "ändra global inställning NYCKEL till VÄRDE"
 
-#: lilypond-book.py:1388
-#, fuzzy, python-format
-msgid "Opening filter `%s'"
-msgstr "Öppnar rör \"%s\"..."
+#: ly2dvi.py:149 midi2ly.py:106 mup2ly.py:79 main.cc:125
+msgid "print version number"
+msgstr "visa versionsnummer"
 
-#: lilypond-book.py:1405
+#. other globals
+#. Pdftex support
+#. # yuk.
+#. lilypond_binary = 'valgrind --suppressions=%(home)s/usr/src/guile-1.6.supp --num-callers=10 %(home)s/usr/src/lilypond/lily/out/lilypond '% { 'home' : '/home/hanwen' }
+#. only use installed binary  when we're installed too.
+#. init to empty; values here take precedence over values in the file
+#. # TODO: change name.
+#. for geometry v3
+#. Output formats that ly2dvi should create
+#. what a name.
+#. ly.warning (_ ("invalid value: %s") % `val`)
+#. ly.warning (_ ("invalid value: %s") % `val`)
+#: ly2dvi.py:232
 #, python-format
-msgid "`%s' failed (%d)"
-msgstr "\"%s\" misslyckades (%d)"
-
-#: lilypond-book.py:1406
-msgid "The error log is as follows:"
-msgstr "Felloggen är följande:"
+msgid "no such setting: `%s'"
+msgstr "inställningen finns inte: \"%s\""
 
-#: lilypond-book.py:1476
-msgid "cannot find \\begin{document} in LaTeX document"
-msgstr ""
+#. 2 == user interrupt.
+#: ly2dvi.py:274
+#, python-format
+msgid "LilyPond crashed (signal %d)."
+msgstr "LilyPond kraschade (signal %d)."
 
-#: lilypond-book.py:1586
-#, fuzzy
-msgid "Writing snippets..."
-msgstr "Skriver \"%s\"..."
+#: ly2dvi.py:275
+msgid "Please submit a bug report to bug-lilypond@gnu.org"
+msgstr "Skicka en buggrapport till bug-lilypond@gnu.org"
 
-#: lilypond-book.py:1591
-#, fuzzy
-msgid "Processing..."
-msgstr "Behandlar..."
+#: ly2dvi.py:281
+#, python-format
+msgid "LilyPond failed on input file %s (exit status %d)"
+msgstr "LilyPond misslyckades på indatafilen \"%s\" (slutstatus %d)"
 
-#: lilypond-book.py:1595
-#, fuzzy
-msgid "All snippets are up to date..."
-msgstr "lugn, %s är senaste versionen"
+#: ly2dvi.py:284
+#, python-format
+msgid "LilyPond failed on an input file (exit status %d)"
+msgstr "LilyPond misslyckades på en indatafil (slutstatus %d)"
 
-#: lilypond-book.py:1605
-#, fuzzy, python-format
-msgid "cannot determine format for: %s"
-msgstr "kan inte hitta standardtypsnitt: \"%s\""
+#: ly2dvi.py:285
+msgid "Continuing..."
+msgstr "Fortsätter..."
 
-#: lilypond-book.py:1616
-#, fuzzy, python-format
-msgid "%s is up to date."
-msgstr "lugn, %s är senaste versionen"
+#. urg
+#: ly2dvi.py:296
+#, python-format
+msgid "Analyzing %s..."
+msgstr "Analyserar %s..."
 
-#: lilypond-book.py:1622
+#. search only the first 10k
+#: ly2dvi.py:354
 #, python-format
-msgid "Writing `%s'..."
-msgstr "Skriver \"%s\"..."
+msgid "no LilyPond output found for `%s'"
+msgstr "ingen LilyPond-utdata funnen för \"%s\""
 
-#: lilypond-book.py:1677
-msgid "Output would overwrite input file; use --output."
+#. The final \n seems important here. It ensures that the footers and taglines end up on the right page.
+#. TODO: should set textheight (enlarge) depending on papersize.
+#: ly2dvi.py:397
+#, python-format
+msgid "invalid value: `%s'"
+msgstr "ogiltigt värde: \"%s\""
+
+#. set sane geometry width (a4-width) for linewidth = -1.
+#. who the hell is 597 ?
+#. Ugh.  (La)TeX writes progress and error messages on stdout
+#. Redirect to stderr
+#: ly2dvi.py:511
+msgid "LaTeX failed on the output file."
+msgstr "LaTeX misslyckades på utdatafilen."
+
+#. make a preview by rendering only the 1st line
+#. of each score
+#: ly2dvi.py:568
+msgid ""
+"Trying create PDF, but no PFA fonts found.\n"
+"Using bitmap fonts instead. This will look bad."
 msgstr ""
+"Försöker skapa PDF, men inga PFA-typsnitt hittades.\n"
+"Använder punkttypsnitt istället. Det kommer att se dåligt ut."
 
-# här är det fråga om rensning av en temporärkatalog
-#: lilypond-book.py:1681
-#, fuzzy, python-format
-msgid "Reading %s..."
-msgstr "Rensar %s..."
-
-#: lilypond-book.py:1700
-#, fuzzy
-msgid "Dissecting..."
-msgstr "Listar \"%s\"..."
-
-# här är det fråga om rensning av en temporärkatalog
-#: lilypond-book.py:1716
-#, fuzzy, python-format
-msgid "Compiling %s..."
-msgstr "Rensar %s..."
-
-#: lilypond-book.py:1725
-#, fuzzy, python-format
-msgid "Processing include: %s"
-msgstr "Behandlar \"%s\"..."
-
-#: lilypond-book.py:1739
-#, fuzzy, python-format
-msgid "Removing `%s'"
-msgstr "Startar \"%s\""
-
-#: lilypond-book.py:1815
-#, fuzzy, python-format
-msgid "Writing fonts to %s..."
-msgstr "kan inte skapa katalog: \"%s\""
-
-#: lilypond-book.py:1830
-msgid "option --psfonts not used"
-msgstr ""
+#. ugh. Different targets?
+#. Added as functionality to ly2dvi, because ly2dvi may well need to do this
+#. in future too.
+#. no ps header?
+#: ly2dvi.py:615
+#, python-format
+msgid "not a PostScript file: `%s'"
+msgstr "inte en PostScript-fil: \"%s\""
 
-#: lilypond-book.py:1831
-msgid "processing with dvips will have no fonts"
-msgstr ""
+#. todo
+#: ly2dvi.py:660
+#, python-format
+msgid "Writing HTML menu `%s'"
+msgstr "Skriver HTML-meny \"%s\""
+
+#. signal programming error
+#. Don't convert input files to abspath, rather prepend '.' to include
+#. path.
+#. As a neat trick, add directory part of first input file
+#. to include path.  That way you can do without the clumsy -I in:
+#. ly2dvi -I foe/bar/baz foo/bar/baz/baz.ly
+#: ly2dvi.py:769
+msgid "pseudo filter"
+msgstr "pseudofilter"
+
+#: ly2dvi.py:772
+msgid "pseudo filter only for single input file"
+msgstr "pseudofilter bara för enstaka indatafil"
+
+#. Ugh, maybe make a setup () function
+#. hmmm. Wish I'd 've written comments when I wrote this.
+#. now it looks complicated.
+#: ly2dvi.py:806
+#, python-format
+msgid "filename should not contain spaces: `%s'"
+msgstr "filnamnet får inte innehålla mellanslag: \"%s\""
 
-#: lilypond-book.py:1834
-msgid "DVIPS usage:"
-msgstr ""
+#. to be sure, add tmpdir *in front* of inclusion path.
+#. os.environ['TEXINPUTS'] =  tmpdir + ':' + os.environ['TEXINPUTS']
+#. We catch all exceptions, because we need to do stuff at exit:
+#. * copy any successfully generated stuff from tempdir and
+#. notify user of that
+#. * cleanout tempdir
+#. ## ARGH. This also catches python programming errors.
+#. ## this should only catch lilypond nonzero exit  status
+#. ## --hwn
+#. TODO: friendly message about LilyPond setup/failing?
+#.
+#: ly2dvi.py:845
+msgid "Running LilyPond failed. Rerun with --verbose for a trace."
+msgstr "Misslyckades med att köra LilyPond. Kör igen med --verbose för spår."
+
+#. Our LilyPond pseudo filter always outputs to 'lelie'
+#. have subsequent stages and use 'lelie' output.
+#. unless: add --tex, or --latex?
+#. TODO: friendly message about TeX/LaTeX setup,
+#. trying to run tex/latex by hand
+#: ly2dvi.py:886
+msgid "Failed to make PS file. Rerun with --verbose for a trace."
+msgstr "Misslyckades med att skapa PS-fil. Kör med --verbose för spår."
+
+#. unless: add --tex, or --latex?
+#. TODO: friendly message about TeX/LaTeX setup,
+#. trying to run tex/latex by hand
+#: ly2dvi.py:916
+msgid "Running LaTeX falied. Rerun with --verbose for a trace."
+msgstr "Misslyckades med att köra LaTeX. Kör med --verbose för spår."
 
-#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
-msgid "warning: "
-msgstr "varning: "
+# här är det fråga om skrivning till en fil
+#. add DEP to targets?
+#: ly2dvi.py:926 input-file-results.cc:68
+#, c-format, python-format
+msgid "dependencies output to `%s'..."
+msgstr "beroenden skrivna till \"%s\"..."
 
-#: midi2ly.py:109 midi2ly.py:924
-msgid "error: "
-msgstr "fel: "
+# här är det fråga om skrivning till en fil (första parametern är t.ex
+# DVI, LATEX, MIDI, TEX)
+#: ly2dvi.py:937
+#, python-format
+msgid "%s output to <stdout>..."
+msgstr "%s skrivet till <stdout>..."
 
-#: midi2ly.py:110
-msgid "Exiting ... "
-msgstr "Avslutar... "
+#: ly2dvi.py:942 ly2dvi.py:968 includable-lexer.cc:57
+#: input-file-results.cc:191 input-file-results.cc:197 lily-guile.cc:86
+#, c-format, python-format
+msgid "can't find file: `%s'"
+msgstr "kan inte hitta fil: \"%s\""
 
 # här är det fråga om skrivning till en fil (första parametern är t.ex
 # DVI, LATEX, MIDI, TEX)
-#: midi2ly.py:857
+#. Hmm, if this were a function, we could call it the except: clauses
+#: ly2dvi.py:965
 #, python-format
-msgid "%s output to `%s'..."
+msgid "%s output to %s..."
 msgstr "%s skrivet till \"%s\"..."
 
-#: midi2ly.py:871 musicxml2ly.py:485
-#, fuzzy, python-format
-msgid "Convert %s to LilyPond input."
-msgstr "Konvertera mup till LilyPond"
-
-#: midi2ly.py:875
+#. !@PYTHON@
+#.
+#. midi2ly.py -- LilyPond midi import script
+#.
+#. source file of the GNU LilyPond music typesetter
+#.
+#. (c)  1998--2003  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+#. Jan Nieuwenhuizen <janneke@gnu.org>
+#. ###############################################################
+#. Users of python modules should include this snippet.
+#.
+#. This soon to be removed for: import lilypond.lilylib as ly
+#. ###############################################################
+#. ###############################################################
+#. ############### CONSTANTS
+#. ###############################################################
+#. temp_dir = os.path.join (original_dir,  '%s.dir' % program_name)
+#. original_dir = os.getcwd ()
+#. keep_temp_dir_p = 0
+#: midi2ly.py:94
+msgid "Convert MIDI to LilyPond source"
+msgstr "Konvertera MIDI till LilyPond"
+
+#: midi2ly.py:97
 msgid "print absolute pitches"
 msgstr "skriv absoluta tonhöjder"
 
-#: midi2ly.py:877 midi2ly.py:889
+#: midi2ly.py:98 midi2ly.py:103
 msgid "DUR"
 msgstr "LÄNGD"
 
-#: midi2ly.py:878
+#: midi2ly.py:98
 msgid "quantise note durations on DUR"
 msgstr "kvantisera notlängder med LÄNGD"
 
-#: midi2ly.py:881
+#: midi2ly.py:99
 msgid "print explicit durations"
 msgstr "skriv explicita notlängder"
 
-#: midi2ly.py:882
-msgid "set key: ALT=+sharps|-flats; MINOR=1"
-msgstr "sätt tonart: TON=+höjningar|-sänkningar; MOLL=1"
-
-#: midi2ly.py:883
+#: midi2ly.py:101
 msgid "ALT[:MINOR]"
 msgstr "TON[:MOLL]"
 
-#: midi2ly.py:888
+#: midi2ly.py:101
+msgid "set key: ALT=+sharps|-flats; MINOR=1"
+msgstr "sätt tonart: TON=+höjningar|-sänkningar; MOLL=1"
+
+#: midi2ly.py:103
 msgid "quantise note starts on DUR"
 msgstr "kvantiser notstarter på LÄNGD"
 
-#: midi2ly.py:891
+#: midi2ly.py:104
 msgid "DUR*NUM/DEN"
 msgstr "LÄNGD*TÄL/NÄM"
 
-#: midi2ly.py:894
-msgid "allow tuplet durations DUR*NUM/DEN"
-msgstr "tillåt tupellängder LÄNGD*TÄL/DEN"
-
-#: midi2ly.py:902
-msgid "treat every text as a lyric"
-msgstr "tolka all text som lyrik"
-
-#: midi2ly.py:905
-#, fuzzy
-msgid "Examples"
-msgstr "Exempel:"
-
-#: midi2ly.py:925
-msgid "no files specified on command line."
-msgstr "inga filer angivna på kommandoraden."
-
-#: musicxml2ly.py:473
-msgid "musicxml2ly FILE.xml"
-msgstr ""
-
-#: musicxml2ly.py:476
-#, fuzzy, python-format
-msgid ""
-"This program is free software.  It is covered by the GNU General Public\n"
-"License and you are welcome to change it and/or distribute copies of it\n"
-"under certain conditions.  Invoke as `%s --warranty' for more\n"
-"information."
-msgstr ""
-"Det här är fri programvara. Den täcks av \"GNU General Public License\",\n"
-"och du får ändra och/eller distribuera kopior av den under vissa\n"
-"villkor. Kör \"%s --warranty\" för mer information.\n"
-
-#: musicxml2ly.py:495
-msgid "Use lxml.etree; uses less memory and cpu time."
-msgstr ""
-
-#: musicxml2ly.py:503
-#, fuzzy
-msgid "set output filename to FILE"
-msgstr "skriv utdata till FIL"
-
-#: getopt-long.cc:140
-#, c-format
-msgid "option `%s' requires an argument"
-msgstr "flaggan \"%s\" kräver ett argument"
-
-#: getopt-long.cc:144
-#, fuzzy, c-format
-msgid "option `%s' does not allow an argument"
-msgstr "flaggan \"%s\" tillåter inget argument"
-
-#: getopt-long.cc:148
-#, c-format
-msgid "unrecognized option: `%s'"
-msgstr "okänd flagga: \"%s\""
-
-#: getopt-long.cc:154
-#, c-format
-msgid "invalid argument `%s' to option `%s'"
-msgstr "ogiltigt argument \"%s\" till flaggan \"%s\""
-
-#: warn.cc:68 grob.cc:559 input.cc:82
-#, fuzzy, c-format
-msgid "programming error: %s"
-msgstr "programmeringsfel: "
-
-#: warn.cc:69 input.cc:83
-msgid "continuing, cross fingers"
-msgstr ""
-
-#: accidental-engraver.cc:240
-#, fuzzy, c-format
-msgid "accidental typesetting list must begin with context-name: %s"
-msgstr "Lista av höjningar/säkningar måste börja med context-name: %s"
-
-#: accidental-engraver.cc:268
-#, c-format
-msgid "ignoring unknown accidental: %s"
-msgstr ""
-
-#: accidental-engraver.cc:284
-#, c-format
-msgid "pair or context-name expected for accidental rule, found %s"
-msgstr ""
-
-#: accidental.cc:243 key-signature-interface.cc:133
-#, c-format
-msgid "accidental `%s' not found"
-msgstr "höjning/säkning \"%s\" hittades inte"
-
-#: align-interface.cc:222
-msgid ""
-"vertical alignment called before line-breaking.\n"
-"Only do cross-staff spanners with PianoStaff."
-msgstr ""
-
-#: align-interface.cc:329
-msgid "tried to get a translation for something that is no child of mine"
-msgstr ""
-
-#: all-font-metrics.cc:173
-#, c-format
-msgid "cannot find font: `%s'"
-msgstr "kan inte hitta typsnitt: \"%s\""
-
-#: apply-context-iterator.cc:31
-msgid "\\applycontext argument is not a procedure"
-msgstr ""
-
-#: auto-change-iterator.cc:63 change-iterator.cc:61
-#, fuzzy, c-format
-msgid "cannot change, already in translator: %s"
-msgstr "kan inte ändra \"%s\" till \"%s\""
-
-#: axis-group-engraver.cc:78
-msgid "Axis_group_engraver: vertical group already has a parent"
-msgstr ""
-
-#: axis-group-engraver.cc:79
-msgid "are there two Axis_group_engravers?"
-msgstr ""
-
-#: axis-group-engraver.cc:80
-msgid "removing this vertical group"
-msgstr ""
-
-#: axis-group-interface.cc:96
-msgid "tried to calculate pure-height at a non-breakpoint"
-msgstr ""
-
-#: axis-group-interface.cc:370
-msgid "an outside-staff object should have a direction, defaulting to up"
-msgstr ""
-
-#: axis-group-interface.cc:383
-#, c-format
-msgid "outside-staff object %s has an empty extent"
-msgstr ""
-
-#: bar-check-iterator.cc:73
-#, c-format
-msgid "barcheck failed at: %s"
-msgstr "taktkontroll misslyckades vid: %s"
-
-#: beam-engraver.cc:128
-msgid "already have a beam"
-msgstr "har redan en balk"
-
-#: beam-engraver.cc:196
-msgid "unterminated beam"
-msgstr "oavslutad balk"
-
-#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
-msgid "stem must have Rhythmic structure"
-msgstr "skaft måste ha en rytmisk struktur"
-
-#: beam-engraver.cc:246
-#, fuzzy
-msgid "stem does not fit in beam"
-msgstr "skaftet passar inte i balken"
-
-#: beam-engraver.cc:247
-msgid "beam was started here"
-msgstr "balken startade här"
-
-#: beam-quanting.cc:307
-#, fuzzy
-msgid "no feasible beam position"
-msgstr "Ingen lämplig radbrytning hittades"
-
-#: beam.cc:144
-#, fuzzy
-msgid "removing beam with no stems"
-msgstr "balk har mindre än två synliga skaft"
-
-#: beam.cc:1007
-msgid "no viable initial configuration found: may not find good beam slope"
-msgstr ""
-
-#: break-alignment-interface.cc:208
-#, c-format
-msgid "No spacing entry from %s to `%s'"
-msgstr "Ingen avståndsdata från %s till \"%s\""
-
-#: change-iterator.cc:23
-#, fuzzy, c-format
-msgid "cannot change `%s' to `%s'"
-msgstr "kan inte ändra \"%s\" till \"%s\""
-
-#. FIXME: constant error message.
-#: change-iterator.cc:82
-#, fuzzy
-msgid "cannot find context to switch to"
-msgstr "kan inte hitta omgivningen \"%s\""
-
-#. We could change the current translator's id, but that would make
-#. errors hard to catch.
-#.
-#. last->translator_id_string () = get_change
-#. ()->change_to_id_string ();
-#: change-iterator.cc:91
-#, fuzzy, c-format
-msgid "not changing to same context type: %s"
-msgstr "omgivning finns inte: %s"
-
-#. FIXME: uncomprehensable message
-#: change-iterator.cc:95
-msgid "none of these in my family"
-msgstr "ingen av dessa i min familj"
-
-#: chord-tremolo-engraver.cc:88
-#, fuzzy
-msgid "No tremolo to end"
-msgstr "Ingen reprisbryggare till slutet"
-
-#: chord-tremolo-engraver.cc:110
-msgid "unterminated chord tremolo"
-msgstr "icke avslutat ackordtremolo"
-
-#: chord-tremolo-iterator.cc:33
-#, c-format
-msgid "expect 2 elements for chord tremolo, found %d"
-msgstr ""
-
-#: clef.cc:54
-#, c-format
-msgid "clef `%s' not found"
-msgstr "klav \"%s\" hittades inte"
-
-#: cluster.cc:110
-#, c-format
-msgid "unknown cluster style `%s'"
-msgstr "okänd klusterstil: \"%s\""
-
-#: cluster.cc:135
-msgid "junking empty cluster"
-msgstr ""
-
-#: coherent-ligature-engraver.cc:100
-#, fuzzy, c-format
-msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
-msgstr ""
-"Coherent_ligature_engraver: sätter \"spacing-increment = 0.01\": ptr=%ul"
-
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:176 constrained-breaking.cc:193
-#, fuzzy
-msgid "cannot find line breaking that satisfies constraints"
-msgstr "kunde inte hitta något typsnitt som uppfyller "
-
-#: context-def.cc:130
-#, fuzzy, c-format
-msgid "program has no such type: `%s'"
-msgstr "Programmet har ingen sådan typ"
-
-#: context-property.cc:76
-msgid "need symbol arguments for \\override and \\revert"
-msgstr ""
-
-#: context.cc:151
-#, fuzzy, c-format
-msgid "cannot find or create new `%s'"
-msgstr "kan inte hitta eller skapa: \"%s\""
-
-#: context.cc:213
-#, fuzzy, c-format
-msgid "cannot find or create `%s' called `%s'"
-msgstr "kan inte hitta eller skapa \"%s\" kallad \"%s\""
-
-#: context.cc:276
-#, c-format
-msgid "Invalid CreateContext event: Cannot create %s context"
-msgstr ""
-
-#: context.cc:388
-#, c-format
-msgid "cannot find or create: `%s'"
-msgstr "kan inte hitta eller skapa: \"%s\""
-
-#: custos.cc:77
-#, c-format
-msgid "custos `%s' not found"
-msgstr "custos \"%s\" hittades inte"
-
-#: dispatcher.cc:71
-msgid "Event class should be a symbol"
-msgstr ""
-
-#: dispatcher.cc:78
-#, fuzzy, c-format
-msgid "Unknown event class %s"
-msgstr "okänd klusterstil: \"%s\""
-
-#: dots.cc:38
-#, fuzzy, c-format
-msgid "dot `%s' not found"
-msgstr "paus \"%s\" hittades inte, "
-
-#: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "cannot find start of (de)crescendo"
-msgstr "kan inte hitta start på crescendo/diminuendo"
-
-#: dynamic-engraver.cc:195
-msgid "already have a decrescendo"
-msgstr "har redan ett diminuendo"
-
-#: dynamic-engraver.cc:197
-msgid "already have a crescendo"
-msgstr "har redan ett crescendo"
-
-#: dynamic-engraver.cc:200
-#, fuzzy
-msgid "cresc starts here"
-msgstr "Cresc startade här"
-
-#: dynamic-engraver.cc:323
-msgid "unterminated (de)crescendo"
-msgstr "oavslutat crescendo/diminuendo"
-
-#: extender-engraver.cc:131 extender-engraver.cc:140
-msgid "unterminated extender"
-msgstr "oavslutad utökare"
-
-#: font-config.cc:28
-msgid "Initializing FontConfig..."
-msgstr ""
-
-#: font-config.cc:44
-#, c-format
-msgid "Rebuilding FontConfig cache %s, this may take a while..."
-msgstr ""
-
-#: font-config.cc:55
-#, fuzzy, c-format
-msgid "failed adding font directory: %s"
-msgstr "kan inte skapa katalog: \"%s\""
-
-#: font-config.cc:57
-#, fuzzy, c-format
-msgid "adding font directory: %s"
-msgstr "kan inte skapa katalog: \"%s\""
-
-#: general-scheme.cc:160
-msgid "infinity or NaN encountered while converting Real number"
-msgstr ""
-
-#: general-scheme.cc:161
-msgid "setting to zero"
-msgstr ""
-
-#: glissando-engraver.cc:92
-#, fuzzy
-msgid "unterminated glissando"
-msgstr "Oavslutat glissando."
-
-#: global-context-scheme.cc:91 global-context-scheme.cc:107
-#, fuzzy
-msgid "no music found in score"
-msgstr "Behöver musik i partitur"
-
-#: global-context-scheme.cc:97
-#, fuzzy
-msgid "Interpreting music... "
-msgstr "Tolkar musik..."
-
-#: global-context-scheme.cc:120
-#, c-format
-msgid "elapsed time: %.2f seconds"
-msgstr "tidsåtgång: %.2f sekunder"
-
-#: gregorian-ligature-engraver.cc:59
-#, c-format
-msgid "\\%s ignored"
-msgstr "\\%s ignorerat"
-
-#: gregorian-ligature-engraver.cc:64
-#, c-format
-msgid "implied \\%s added"
-msgstr "implicit \\%s tillagt"
-
-#. ligature may not start with 2nd head of pes or flexa
-#: gregorian-ligature-engraver.cc:212
-#, fuzzy
-msgid "cannot apply `\\~' on first head of ligature"
-msgstr "kan inte hitta start på ligatur"
-
-#. (pitch == prev_pitch)
-#: gregorian-ligature-engraver.cc:224
-msgid "cannot apply `\\~' on heads with identical pitch"
-msgstr ""
-
-#: grob-interface.cc:57
-#, fuzzy, c-format
-msgid "Unknown interface `%s'"
-msgstr "okänd klusterstil: \"%s\""
-
-#: grob-interface.cc:68
-#, c-format
-msgid "Grob `%s' has no interface for property `%s'"
-msgstr ""
-
-#: grob.cc:253
-msgid "Infinity or NaN encountered"
-msgstr ""
-
-#: hairpin.cc:183
-msgid "decrescendo too small"
-msgstr "diminuendo för litet"
-
-#: horizontal-bracket-engraver.cc:59
-#, fuzzy
-msgid "do not have that many brackets"
-msgstr "Har inte så många klamrar"
-
-#: horizontal-bracket-engraver.cc:68
-#, fuzzy
-msgid "conflicting note group events"
-msgstr "Motsägande notgrupphändelser."
-
-#: hyphen-engraver.cc:93
-#, fuzzy
-msgid "removing unterminated hyphen"
-msgstr "oavslutat bindestreck"
-
-#: hyphen-engraver.cc:107
-#, fuzzy
-msgid "unterminated hyphen; removing"
-msgstr "oavslutat bindestreck"
-
-#: includable-lexer.cc:53
-msgid "include files are not allowed in safe mode"
-msgstr ""
-
-#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
-#, c-format
-msgid "cannot find file: `%s'"
-msgstr "kan inte hitta fil: \"%s\""
-
-#: includable-lexer.cc:62 lily-parser-scheme.cc:107
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(sökväg: \"%s\")"
-
-#: input.cc:112 source-file.cc:168 source-file.cc:183
-msgid "position unknown"
-msgstr "okänd position"
-
-#: ligature-engraver.cc:93
-msgid "cannot find start of ligature"
-msgstr "kan inte hitta start på ligatur"
-
-#: ligature-engraver.cc:98
-msgid "no right bound"
-msgstr "ingen högergräns"
-
-#: ligature-engraver.cc:120
-msgid "already have a ligature"
-msgstr "har redan en ligatur"
-
-#: ligature-engraver.cc:129
-msgid "no left bound"
-msgstr "ingen vänstergräns"
-
-#: ligature-engraver.cc:173
-msgid "unterminated ligature"
-msgstr "oavslutad ligatur"
-
-#: ligature-engraver.cc:202
-#, fuzzy
-msgid "ignoring rest: ligature may not contain rest"
-msgstr "ligatur får inte innehålla paus; ignorerar paus"
-
-#: ligature-engraver.cc:203
-msgid "ligature was started here"
-msgstr "ligaturen startade här"
-
-#: lily-guile.cc:92
-#, c-format
-msgid "(load path: `%s')"
-msgstr "(inläsningssökväg: \"%s\""
-
-#: lily-guile.cc:518
-#, fuzzy, c-format
-msgid "cannot find property type-check for `%s' (%s)."
-msgstr "Kan inte hitta egenskapstypkontroll för \"%s\" (%s)"
-
-#: lily-guile.cc:521
-#, fuzzy
-msgid "perhaps a typing error?"
-msgstr "Kanske har du gjort ett skrivfel?"
-
-#: lily-guile.cc:527
-#, fuzzy
-msgid "doing assignment anyway"
-msgstr "Gör tilldelningen ändå."
-
-#: lily-guile.cc:539
-#, fuzzy, c-format
-msgid "type check for `%s' failed; value `%s' must be of type `%s'"
-msgstr ""
-"Typkontroll för \"%s\" misslyckades. Värde \"%s\" måste ha typen \"%s\""
-
-#: lily-lexer.cc:254
-#, fuzzy, c-format
-msgid "identifier name is a keyword: `%s'"
-msgstr "Identifierarnamn är ett nyckelord: \"%s\""
-
-#: lily-lexer.cc:269
-#, c-format
-msgid "error at EOF: %s"
-msgstr "fel vid filslut: %s"
-
-#: lily-parser-scheme.cc:29
-#, fuzzy, c-format
-msgid "deprecated function called: %s"
-msgstr "kan inte hitta tecken som heter: \"%s\""
-
-#: lily-parser-scheme.cc:88
-#, fuzzy, c-format
-msgid "Changing working directory to: `%s'"
-msgstr "kan inte skapa katalog: \"%s\""
-
-#: lily-parser-scheme.cc:106
-#, fuzzy, c-format
-msgid "cannot find init file: `%s'"
-msgstr "kan inte hitta fil: \"%s\""
-
-#: lily-parser-scheme.cc:125
-#, fuzzy, c-format
-msgid "Processing `%s'"
-msgstr "Behandlar \"%s\"..."
-
-#: lily-parser.cc:99
-msgid "Parsing..."
-msgstr "Tolkar..."
-
-#: lily-parser.cc:127
-#, fuzzy
-msgid "braces do not match"
-msgstr "Krullparenteser matchar inte"
-
-#: lyric-combine-music-iterator.cc:291
-#, fuzzy, c-format
-msgid "cannot find Voice `%s'"
-msgstr "kan inte hitta fil: \"%s\""
-
-#: main.cc:116
-#, fuzzy, c-format
-msgid ""
-"This program is free software.  It is covered by the GNU General Public\n"
-"License and you are welcome to change it and/or distribute copies of it\n"
-"under certain conditions.  Invoke as `%s --warranty' for more\n"
-"information.\n"
-msgstr ""
-"Det här är fri programvara. Den täcks av \"GNU General Public License\",\n"
-"och du får ändra och/eller distribuera kopior av den under vissa\n"
-"villkor. Kör \"%s --warranty\" för mer information.\n"
-
-#: main.cc:122
-#, fuzzy
-msgid ""
-"    This program is free software; you can redistribute it and/or\n"
-"modify it under the terms of the GNU General Public License version 2\n"
-"as published by the Free Software Foundation.\n"
-"\n"
-"    This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
-"General Public License for more details.\n"
-"\n"
-"    You should have received a copy of the\n"
-"GNU General Public License along with this program; if not, write to\n"
-"the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
-"Boston, MA 02111-1307, USA.\n"
-msgstr ""
-"Detta program är fri programvara. Du kan distribuera det och/eller\n"
-"modifiera det under villkoren i GNU General Public License version 2\n"
-"publicerad av Free Software Foundation.\n"
-"\n"
-"Detta program distribueras i hopp om att det ska vara användbart, men\n"
-"UTAN NÅGON SOM HELST GARANTI, även utan underförstådd garanti om\n"
-"SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT ÄNDAMÅL. Se GNU General\n"
-"Public License för ytterligare information.\n"
-"\n"
-"Du bör ha fått en kopia av GNU General Public License tillsammans med\n"
-"detta program. Om inte, skriv till Free Software Foundation, Inc.,\n"
-"59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
-
-#: main.cc:153
-msgid "BACK"
-msgstr ""
-
-#: main.cc:153
-msgid ""
-"use backend BACK (eps, gnome, ps [default],\n"
-"scm, svg, tex, texstr)"
-msgstr ""
-
-#: main.cc:155
-#, fuzzy
-msgid "SYM[=VAL]"
-msgstr "NYCKEL=VÄRDE"
-
-#: main.cc:156
-msgid ""
-"set Scheme option SYM to VAL (default: #t)\n"
-"Use -dhelp for help."
-msgstr ""
-
-#: main.cc:159
-msgid "EXPR"
-msgstr "UTTR"
-
-#: main.cc:159
-#, fuzzy
-msgid "evaluate scheme code"
-msgstr "Kan inte evaluera Scheme i säkert läge"
-
-#. Bug in option parser: --output =foe is taken as an abbreviation
-#. for --output-format.
-#: main.cc:162
-msgid "FORMATs"
-msgstr ""
-
-#: main.cc:162
-msgid "dump FORMAT,...  Also as separate options:"
-msgstr ""
-
-#: main.cc:163
-#, fuzzy
-msgid "generate DVI (tex backend only)"
-msgstr "skapa PDF-utdata"
-
-#: main.cc:164
-#, fuzzy
-msgid "generate PDF (default)"
-msgstr "skapa PDF-utdata"
-
-#: main.cc:165
-#, fuzzy
-msgid "generate PNG"
-msgstr "skapa PS.GZ"
-
-#: main.cc:166
-#, fuzzy
-msgid "generate PostScript"
-msgstr "skapa PostScript-utdata"
-
-#: main.cc:167
-msgid "generate TeX (tex backend only)"
-msgstr ""
-
-#: main.cc:168
-msgid "show this help and exit"
-msgstr ""
-
-#: main.cc:169
-msgid "FIELD"
-msgstr "FÄLT"
-
-#: main.cc:169
-#, fuzzy
-msgid ""
-"dump header field FIELD to file\n"
-"named BASENAME.FIELD"
-msgstr "skriv rubrikfält till BASNAMN.FÄLT"
-
-#: main.cc:171
-msgid "add DIR to search path"
-msgstr "lägg till KATALOG till sökvägen"
-
-#: main.cc:172
-msgid "use FILE as init file"
-msgstr "använd FIL som init-fil"
-
-#: main.cc:174
-msgid "USER,GROUP,JAIL,DIR"
-msgstr ""
-
-#: main.cc:174
-msgid ""
-"chroot to JAIL, become USER:GROUP\n"
-"and cd into DIR"
-msgstr ""
-
-#: main.cc:177
-#, fuzzy
-msgid "do not generate printed output"
-msgstr "skapa PostScript-utdata"
-
-#: main.cc:178
-#, fuzzy
-msgid "write output to FILE (suffix will be added)"
-msgstr "skriv utdata till FIL"
-
-#: main.cc:179
-#, fuzzy
-msgid "generate a preview of the first system"
-msgstr "skapa en bild av det första systemet"
-
-#: main.cc:180
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:181
-msgid ""
-"disallow unsafe Scheme and PostScript\n"
-"operations"
-msgstr ""
-
-#: main.cc:183
-#, fuzzy
-msgid "show version number and exit"
-msgstr "visa versionsnummer"
-
-#: main.cc:224
-#, fuzzy, c-format
-msgid ""
-"Copyright (c) %s by\n"
-"%s  and others."
-msgstr "Copyright © %s av"
-
-#. No version number or newline here.  It confuses help2man.
-#: main.cc:251
-#, c-format
-msgid "Usage: %s [OPTION]... FILE..."
-msgstr "Användning: %s [FLAGGA]... FIL..."
-
-#: main.cc:253
-#, fuzzy, c-format
-msgid "Typeset music and/or produce MIDI from FILE."
-msgstr "Typsätt musik och/eller spela MIDI från FIL"
-
-#: main.cc:255
-#, c-format
-msgid "LilyPond produces beautiful music notation."
-msgstr ""
-
-#: main.cc:257
-#, c-format
-msgid "For more information, see %s"
-msgstr ""
-
-#: main.cc:259
-#, c-format
-msgid "Options:"
-msgstr "Flaggor:"
-
-#: main.cc:263
-#, fuzzy, c-format
-msgid "Report bugs via %s"
-msgstr ""
-"Rapportera programfel till %s\n"
-"Rapportera fel i översättningen till <sv@li.org>"
-
-#: main.cc:309
-#, c-format
-msgid "expected %d arguments with jail, found: %u"
-msgstr ""
-
-#: main.cc:323
-#, fuzzy, c-format
-msgid "no such user: %s"
-msgstr "inställningen finns inte: \"%s\""
-
-#: main.cc:325
-#, c-format
-msgid "cannot get user id from user name: %s: %s"
-msgstr ""
-
-#: main.cc:340
-#, fuzzy, c-format
-msgid "no such group: %s"
-msgstr "omgivning finns inte: %s"
-
-#: main.cc:342
-#, fuzzy, c-format
-msgid "cannot get group id from group name: %s: %s"
-msgstr "kan inte ändra \"%s\" till \"%s\""
-
-#: main.cc:350
-#, fuzzy, c-format
-msgid "cannot chroot to: %s: %s"
-msgstr "kan inte skapa katalog: \"%s\""
-
-#: main.cc:357
-#, fuzzy, c-format
-msgid "cannot change group id to: %d: %s"
-msgstr "kan inte ändra \"%s\" till \"%s\""
-
-#: main.cc:363
-#, fuzzy, c-format
-msgid "cannot change user id to: %d: %s"
-msgstr "kan inte ändra \"%s\" till \"%s\""
-
-#: main.cc:369
-#, fuzzy, c-format
-msgid "cannot change working directory to: %s: %s"
-msgstr "kan inte skapa katalog: \"%s\""
-
-#: main.cc:415
-#, c-format
-msgid "Evaluating %s"
-msgstr ""
-
-#: main.cc:645
-#, c-format
-msgid "exception caught: %s"
-msgstr ""
-
-#. FIXME: constant error message.
-#: mark-engraver.cc:154
-msgid "rehearsalMark must have integer value"
-msgstr ""
-
-#: mark-engraver.cc:160
-msgid "mark label must be a markup object"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:85
-msgid "ligature with less than 2 heads -> skipping"
-msgstr "ligature med mindre än 2 huvuden -> skippar"
-
-#: mensural-ligature-engraver.cc:112
-#, fuzzy
-msgid "cannot determine pitch of ligature primitive -> skipping"
-msgstr "kan inte bestämma tonhöjd för ligaturprimitiv -> skippar"
-
-#: mensural-ligature-engraver.cc:126
-#, fuzzy
-msgid "single note ligature - skipping"
-msgstr "primintervall inom ligatur -> skippar"
-
-#: mensural-ligature-engraver.cc:138
-msgid "prime interval within ligature -> skipping"
-msgstr "primintervall inom ligatur -> skippar"
-
-#: mensural-ligature-engraver.cc:150
-#, fuzzy
-msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
-msgstr "mensural ligature: längd ingen av L, B, S -> skippar"
-
-#: mensural-ligature-engraver.cc:198
-msgid "semibrevis must be followed by another one -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:209
-msgid ""
-"semibreves can only appear at the beginning of a ligature,\n"
-"and there may be only zero or two of them"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:236
-msgid ""
-"invalid ligatura ending:\n"
-"when the last note is a descending brevis,\n"
-"the penultimate note must be another one,\n"
-"or the ligatura must be LB or SSB"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:356
-msgid "unexpected case fall-through"
-msgstr "föll igenom case oväntat"
-
-#: mensural-ligature.cc:141
-#, fuzzy
-msgid "Mensural_ligature: unexpected case fall-through"
-msgstr "Menural_ligature:föll igenom case oväntat"
-
-#: mensural-ligature.cc:192
-#, fuzzy
-msgid "Mensural_ligature: (join_right == 0)"
-msgstr "Mensural_ligature: (join_left == 0)"
-
-#: midi-item.cc:152
-#, fuzzy, c-format
-msgid "no such MIDI instrument: `%s'"
-msgstr "instrumentet finns inte: \"%s\""
-
-#: midi-item.cc:285
-#, c-format
-msgid "experimental: temporarily fine tuning (of %d cents) a channel."
-msgstr ""
-
-#: midi-stream.cc:28
-#, fuzzy, c-format
-msgid "cannot open for write: %s: %s"
-msgstr "kan inte öppna fil: \"%s\""
-
-#: midi-stream.cc:44
-#, fuzzy, c-format
-msgid "cannot write to file: `%s'"
-msgstr "kan inte öppna fil: \"%s\""
-
-#: music-iterator.cc:171
-msgid "Sending non-event to context"
-msgstr ""
-
-#: music.cc:141
-#, c-format
-msgid "octave check failed; expected \"%s\", found: \"%s\""
-msgstr ""
-
-#: music.cc:207
-#, fuzzy, c-format
-msgid "transposition by %s makes alteration larger than double"
-msgstr "Transponering med %s gör ändring större än två"
-
-#: new-fingering-engraver.cc:96
-msgid "cannot add text scripts to individual note heads"
-msgstr ""
-
-#: new-fingering-engraver.cc:239
-msgid "no placement found for fingerings"
-msgstr ""
-
-#: new-fingering-engraver.cc:240
-msgid "placing below"
-msgstr ""
-
-#: note-collision.cc:457
-#, fuzzy
-msgid "ignoring too many clashing note columns"
-msgstr "För många krockande notkolumner. Ignorerar dem."
-
-#: note-column.cc:124
-msgid "cannot have note heads and rests together on a stem"
-msgstr ""
-
-#: note-head.cc:63
-#, fuzzy, c-format
-msgid "none of note heads `%s' or `%s' found"
-msgstr "nothuvud \"%s\" ej funnet"
-
-#: note-heads-engraver.cc:61
-msgid "NoteEvent without pitch"
-msgstr ""
-
-#: open-type-font.cc:33
-#, fuzzy, c-format
-msgid "cannot allocate %lu bytes"
-msgstr "kan inte öppna fil: \"%s\""
-
-#: open-type-font.cc:37
-#, fuzzy, c-format
-msgid "cannot load font table: %s"
-msgstr "kan inte hitta typsnitt: \"%s\""
-
-#: open-type-font.cc:98
-#, c-format
-msgid "unsupported font format: %s"
-msgstr ""
-
-#: open-type-font.cc:100
-#, c-format
-msgid "unknown error: %d reading font file: %s"
-msgstr ""
-
-#: open-type-font.cc:173 open-type-font.cc:297
-#, c-format
-msgid "FT_Get_Glyph_Name() returned error: %u"
-msgstr ""
-
-#: page-turn-page-breaking.cc:205
-msgid ""
-"cannot fit the first page turn onto a single page.  Consider setting first-"
-"page-number to an even number."
-msgstr ""
-
-#: page-turn-page-breaking.cc:218
-#, c-format
-msgid "Calculating page and line breaks (%d possible page breaks)..."
-msgstr ""
-
-#: page-turn-page-breaking.cc:236 paper-score.cc:154
-#, fuzzy
-msgid "Drawing systems..."
-msgstr "Skapar stämmor..."
-
-#: pango-font.cc:181
-#, c-format
-msgid ""
-"Glyph has no name, but font supports glyph naming.\n"
-"Skipping glyph U+%0X, file %s"
-msgstr ""
-
-#: pango-font.cc:224
-#, fuzzy, c-format
-msgid "no PostScript font name for font `%s'"
-msgstr "inte en PostScript-fil: \"%s\""
-
-#: pango-font.cc:272
-msgid "FreeType face has no PostScript font name"
-msgstr ""
-
-#: paper-outputter-scheme.cc:33
-#, fuzzy, c-format
-msgid "Layout output to `%s'..."
-msgstr "LY-utdata till \"%s\"..."
-
-#: paper-score.cc:105
-msgid "Calculating line breaks..."
-msgstr "Beräknar radbrytningar..."
-
-#: paper-score.cc:118
-#, c-format
-msgid "Element count %d (spanners %d) "
-msgstr "Elementantal %d (bryggare %d) "
-
-#: paper-score.cc:122
-msgid "Preprocessing graphical objects..."
-msgstr "Förbehandlar grafiska objekt..."
-
-#: parse-scm.cc:83
-#, fuzzy
-msgid "GUILE signaled an error for the expression beginning here"
-msgstr "GUILE gave ett fel för uttrycket som börjar här"
-
-#: percent-repeat-engraver.cc:200
-msgid "unterminated percent repeat"
-msgstr "oavslutad procentrepris"
-
-#: performance.cc:45
-#, fuzzy
-msgid "Track..."
-msgstr "Spår... "
-
-#: performance.cc:74
-msgid "MIDI channel wrapped around"
-msgstr ""
-
-#: performance.cc:75
-msgid "remapping modulo 16"
-msgstr ""
-
-#: performance.cc:103
-#, c-format
-msgid "MIDI output to `%s'..."
-msgstr "MIDI-utdata till \"%s\"..."
-
-#: phrasing-slur-engraver.cc:146
-msgid "unterminated phrasing slur"
-msgstr "oavslutad fraseringsbåge"
-
-#: piano-pedal-engraver.cc:286
-#, c-format
-msgid "expect 3 strings for piano pedals, found: %ld"
-msgstr ""
-
-#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
-#: piano-pedal-performer.cc:93
-#, c-format
-msgid "cannot find start of piano pedal: `%s'"
-msgstr "kan inte hitta start på pianopedal: \"%s\""
-
-#: piano-pedal-engraver.cc:347
-#, fuzzy, c-format
-msgid "cannot find start of piano pedal bracket: `%s'"
-msgstr "kan inte hitta start på pianopedal: \"%s\""
-
-#: program-option.cc:205
-#, fuzzy, c-format
-msgid "no such internal option: %s"
-msgstr "Okänd internt alternativ!"
-
-#: property-iterator.cc:74
-#, fuzzy, c-format
-msgid "not a grob name, `%s'"
-msgstr "Inte ett grob-namn, \"%s\"."
-
-#: relative-octave-check.cc:38
-msgid "Failed octave check, got: "
-msgstr ""
-
-#: relocate.cc:44
-#, fuzzy, c-format
-msgid "Setting %s to %s"
-msgstr "kan inte skapa katalog: \"%s\""
-
-#: relocate.cc:59
-#, fuzzy, c-format
-msgid "no such file: %s for %s"
-msgstr "omgivning finns inte: %s"
-
-#: relocate.cc:69 relocate.cc:87
-#, fuzzy, c-format
-msgid "no such directory: %s for %s"
-msgstr "omgivning finns inte: %s"
-
-#: relocate.cc:79
-#, c-format
-msgid "%s=%s (prepend)\n"
-msgstr ""
-
-#: relocate.cc:99
-#, c-format
-msgid "Relocation: compile prefix=%s, new prefix=%s"
-msgstr ""
-
-#: relocate.cc:129
-#, c-format
-msgid "Relocation: framework_prefix=%s"
-msgstr ""
-
-#: relocate.cc:169
-#, c-format
-msgid "Relocation: is absolute: argv0=%s"
-msgstr ""
-
-#: relocate.cc:176
-#, c-format
-msgid "Relocation: from cwd: argv0=%s"
-msgstr ""
-
-#: relocate.cc:185
-#, c-format
-msgid ""
-"Relocation: from PATH=%s\n"
-"argv0=%s"
-msgstr ""
-
-#: relocate.cc:354
-#, fuzzy, c-format
-msgid "Relocation file: %s"
-msgstr "kan inte öppna fil: \"%s\""
-
-#: relocate.cc:390
-#, c-format
-msgid "Unknown relocation command %s"
-msgstr ""
-
-#: rest-collision.cc:151
-msgid "cannot resolve rest collision: rest direction not set"
-msgstr ""
-
-#: rest-collision.cc:165 rest-collision.cc:210
-msgid "too many colliding rests"
-msgstr "för många krockande pauser"
-
-#: rest.cc:144
-#, fuzzy, c-format
-msgid "rest `%s' not found"
-msgstr "paus \"%s\" hittades inte, "
-
-#: score-engraver.cc:67
-#, fuzzy, c-format
-msgid "cannot find `%s'"
-msgstr "kan inte hitta \"%s\""
-
-#: score-engraver.cc:69
-#, fuzzy
-msgid "Music font has not been installed properly."
-msgstr "Typsnitten är inte korrekt installerade. Avbryter"
-
-#: score-engraver.cc:71
-#, fuzzy, c-format
-msgid "Search path `%s'"
-msgstr "(sökväg: \"%s\")"
-
-#: score-engraver.cc:73
-msgid "Aborting"
-msgstr ""
-
-#: score.cc:225
-#, fuzzy
-msgid "already have music in score"
-msgstr "Behöver musik i partitur"
-
-#: score.cc:226
-msgid "this is the previous music"
-msgstr ""
-
-#: score.cc:231
-#, fuzzy
-msgid "errors found, ignoring music expression"
-msgstr "Fel funna/*, behandlar inte partitur*/"
-
-#. FIXME:
-#: script-engraver.cc:102
-#, fuzzy
-msgid "do not know how to interpret articulation: "
-msgstr "Kan inte tolka artikulering \"%s\""
-
-#: script-engraver.cc:103
-#, fuzzy
-msgid "scheme encoding: "
-msgstr "Scheme-alternativ:"
-
-#: simple-spacer.cc:375
-#, c-format
-msgid "No spring between column %d and next one"
-msgstr "Ingen fjäder mellan kolumn %d och nästa"
-
-#: slur-engraver.cc:83 tuplet-engraver.cc:75
-#, c-format
-msgid "direction of %s invalid: %d"
-msgstr ""
-
-#: slur-engraver.cc:157
-msgid "unterminated slur"
-msgstr "oavslutad båge"
-
-#: slur-engraver.cc:166
-#, fuzzy
-msgid "cannot end slur"
-msgstr "kan inte hitta start på båge"
-
-#: source-file.cc:74
-#, c-format
-msgid "expected to read %d characters, got %d"
-msgstr ""
-
-#: staff-symbol-engraver.cc:62
-msgid "staff-span event has no direction"
-msgstr ""
-
-#: stem-engraver.cc:92
-msgid "tremolo duration is too long"
-msgstr "tremololängd är för lång"
-
-#. FIXME:
-#: stem-engraver.cc:129
-#, fuzzy, c-format
-msgid "adding note head to incompatible stem (type = %d)"
-msgstr "Lägger till nothuvud till inkompatibel båge (typ = %d)"
-
-#: stem-engraver.cc:131
-msgid "maybe input should specify polyphonic voices"
-msgstr ""
-
-#: stem.cc:105
-#, fuzzy
-msgid "weird stem size, check for narrow beams"
-msgstr "Konstig skaftstorlek; kolla efter smala balkar"
-
-#: stem.cc:641
-#, c-format
-msgid "flag `%s' not found"
-msgstr "flaggan \"%s\" hittades ej"
-
-#: stem.cc:652
-#, c-format
-msgid "flag stroke `%s' not found"
-msgstr "flaggstrecket \"%s\" hittades inte"
-
-#: system.cc:180
-#, c-format
-msgid "Element count %d."
-msgstr "Elementantal %d."
-
-#: system.cc:276
-#, fuzzy, c-format
-msgid "Grob count %d"
-msgstr "Elementantal %d "
-
-#: text-spanner-engraver.cc:61
-msgid "cannot find start of text spanner"
-msgstr "kan inte hitta start på textbryggare"
-
-#: text-spanner-engraver.cc:73
-msgid "already have a text spanner"
-msgstr "har redan en textbryggare"
-
-#: text-spanner-engraver.cc:133
-msgid "unterminated text spanner"
-msgstr "oavslutad textbryggare"
-
-#: tie-engraver.cc:264
-msgid "lonely tie"
-msgstr "ensam båge"
-
-#.
-#. Todo: should make typecheck?
-#.
-#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
-#.
-#: time-signature-engraver.cc:64
-#, fuzzy, c-format
-msgid "strange time signature found: %d/%d"
-msgstr "Hittade underlig tidssignatur %d/%d"
-
-#. If there is no such symbol, we default to the numbered style.
-#. (Here really with a warning!)
-#: time-signature.cc:83
-#, c-format
-msgid "time signature symbol `%s' not found; reverting to numbered style"
-msgstr "tidssignatursymbol \"%s\" hittades inte: återgår till numrerad stil"
-
-#: translator-ctors.cc:52
-#, c-format
-msgid "unknown translator: `%s'"
-msgstr "okänd översättare: \"%s\""
-
-#: translator-group.cc:151
-#, c-format
-msgid "cannot find: `%s'"
-msgstr "kan inte hitta: \"%s\""
-
-#: translator.cc:332
-#, c-format
-msgid "Two simultaneous %s events, junking this one"
-msgstr ""
-
-#: translator.cc:333
-#, c-format
-msgid "Previous %s event here"
-msgstr ""
-
-#: trill-spanner-engraver.cc:68
-#, fuzzy
-msgid "cannot find start of trill spanner"
-msgstr "kan inte hitta start på textbryggare"
-
-#: trill-spanner-engraver.cc:80
-#, fuzzy
-msgid "already have a trill spanner"
-msgstr "har redan en textbryggare"
-
-#: vaticana-ligature-engraver.cc:388
-#, c-format
-msgid ""
-"ignored prefix (es) `%s' of this head according to restrictions of the "
-"selected ligature style"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:714
-#, fuzzy, c-format
-msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
-msgstr "Vaticana_ligature_engraver: sätter `spacing-increment = %f': ptr=%ul"
-
-#: vaticana-ligature.cc:84
-#, fuzzy
-msgid "flexa-height undefined; assuming 0"
-msgstr "Vaticana_ligature:x-offset odefinierad; antar 0.0"
-
-#: vaticana-ligature.cc:89
-msgid "ascending vaticana style flexa"
-msgstr "ökande vatikan-stil-flexa"
-
-#: vaticana-ligature.cc:177
-#, fuzzy
-msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
-msgstr "Vaticana_ligature: (delta_pitch == 0)"
-
-#. fixme: be more verbose.
-#: volta-engraver.cc:144
-#, fuzzy
-msgid "cannot end volta spanner"
-msgstr "kan inte hitta start på textbryggare"
-
-#: volta-engraver.cc:154
-#, fuzzy
-msgid "already have a volta spanner, ending that one prematurely"
-msgstr "Har redan en reprisbryggare. Stoppar den tidigare."
-
-#: volta-engraver.cc:158
-#, fuzzy
-msgid "also already have an ended spanner"
-msgstr "har redan en textbryggare"
-
-#: volta-engraver.cc:159
-#, fuzzy
-msgid "giving up"
-msgstr "Ger upp"
-
-#: parser.yy:702
-msgid "\\paper cannot be used in \\score, use \\layout instead"
-msgstr ""
-
-#: parser.yy:726
-msgid "need \\paper for paper block"
-msgstr ""
-
-#: parser.yy:1172
-msgid "Grob name should be alphanumeric"
-msgstr ""
-
-#: parser.yy:1475
-#, fuzzy
-msgid "second argument must be pitch list"
-msgstr "Andra argumentet måste vara en symbol"
-
-#: parser.yy:1502 parser.yy:1507 parser.yy:1972
-#, fuzzy
-msgid "have to be in Lyric mode for lyrics"
-msgstr "Måste vara i textläge (Lyric mode) för sångtext"
-
-#: parser.yy:1604
-#, fuzzy
-msgid "expecting string as script definition"
-msgstr "Väntade sträng som skriptdefinition"
-
-#: parser.yy:1759 parser.yy:1809
-#, c-format
-msgid "not a duration: %d"
-msgstr "inte en längd: %d"
-
-#: parser.yy:1926
-#, fuzzy
-msgid "have to be in Note mode for notes"
-msgstr "Måste vara i notläge (Note mode) för noter"
-
-#: parser.yy:1987
-#, fuzzy
-msgid "have to be in Chord mode for chords"
-msgstr "Måste vara i ackordläge (Chord mode) för ackord"
-
-#: lexer.ll:176
-msgid "stray UTF-8 BOM encountered"
-msgstr ""
-
-#: lexer.ll:180
-msgid "Skipping UTF-8 BOM"
-msgstr ""
-
-#: lexer.ll:235
-#, fuzzy, c-format
-msgid "Renaming input to: `%s'"
-msgstr "Öppnar rör \"%s\"..."
-
-#: lexer.ll:252
-msgid "quoted string expected after \\version"
-msgstr ""
-
-#: lexer.ll:256
-msgid "quoted string expected after \\sourcefilename"
-msgstr ""
-
-#: lexer.ll:260
-msgid "integer expected after \\sourcefileline"
-msgstr ""
-
-#: lexer.ll:273
-msgid "EOF found inside a comment"
-msgstr "filslut hittat inuti en kommentar"
-
-#: lexer.ll:288
-#, fuzzy
-msgid "\\maininput not allowed outside init files"
-msgstr "\\maininput förbjudet utanför init-filer"
-
-#: lexer.ll:312
-#, c-format
-msgid "wrong or undefined identifier: `%s'"
-msgstr "felaktig eller odefinierad identifierare: \"%s\""
-
-#. backup rule
-#: lexer.ll:321
-msgid "end quote missing"
-msgstr ""
-
-#: lexer.ll:466
-msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Krullparentes funnen i slutet på sångtext. Glömde du ett mellanslag?"
-
-#: lexer.ll:559
-#, fuzzy
-msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Krullparentes funnen i slutet på sångtext. Glömde du ett mellanslag?"
-
-#: lexer.ll:659
-#, c-format
-msgid "invalid character: `%c'"
-msgstr "ogiltigt tecken: \"%c\""
-
-#: lexer.ll:774 lexer.ll:775
-#, c-format
-msgid "unknown escaped string: `\\%s'"
-msgstr "okänd \"escaped\" sträng: \"\\%s\""
-
-#: lexer.ll:880 lexer.ll:881
-#, c-format
-msgid "file too old: %s (oldest supported: %s)"
-msgstr ""
-
-#: lexer.ll:881 lexer.ll:882
-#, fuzzy
-msgid "consider updating the input with the convert-ly script"
-msgstr "Fundera på att uppdatera indata med skriptet \"convert-ly\""
-
-#: lexer.ll:887 lexer.ll:888
-#, c-format
-msgid "program too old: %s (file requires: %s)"
-msgstr ""
-
-#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
-#, fuzzy, scheme-format
-msgid "Invoking `~a'..."
-msgstr "Startar \"%s\""
-
-#: backend-library.scm:24
-#, fuzzy, scheme-format
-msgid "`~a' failed (~a)"
-msgstr "\"%s\" misslyckades (%d)"
-
-#: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, fuzzy, scheme-format
-msgid "Converting to `~a'..."
-msgstr "Skriver \"%s\"..."
-
-#: backend-library.scm:108
-#, fuzzy, scheme-format
-msgid "Converting to ~a..."
-msgstr "Skriver \"%s\"..."
-
-#: backend-library.scm:145
-#, fuzzy, scheme-format
-msgid "Writing header field `~a' to `~a'..."
-msgstr "skriver rubrikfält \"%s\" till \"%s\"..."
-
-#: define-context-properties.scm:20 define-grob-properties.scm:10
-#: define-music-properties.scm:10
-#, scheme-format
-msgid "symbol ~S redefined"
-msgstr ""
-
-#: define-event-classes.scm:119
-#, scheme-format
-msgid "event class ~A seems to be unused"
-msgstr ""
-
-#. should be programming-error
-#: define-event-classes.scm:125
-#, scheme-format
-msgid "translator listens to nonexisting event class ~A"
-msgstr ""
-
-#: define-markup-commands.scm:255
-msgid "no systems found in \\score markup, does it have a \\layout block?"
-msgstr ""
-
-#: define-markup-commands.scm:1297
-#, fuzzy, scheme-format
-msgid "not a valid duration string: ~a"
-msgstr "inte en längd: %d"
-
-#: define-music-types.scm:751
-#, scheme-format
-msgid "symbol expected: ~S"
-msgstr ""
-
-#: define-music-types.scm:754
-#, fuzzy, scheme-format
-msgid "cannot find music object: ~S"
-msgstr "kan inte hitta omgivningen \"%s\""
+#: midi2ly.py:104
+msgid "allow tuplet durations DUR*NUM/DEN"
+msgstr "tillåt tupellängder LÄNGD*TÄL/DEN"
 
-#: define-music-types.scm:774
-#, fuzzy, scheme-format
-msgid "unknown repeat type `~S'"
-msgstr "okänd klusterstil: \"%s\""
+#: midi2ly.py:108
+msgid "treat every text as a lyric"
+msgstr "tolka all text som lyrik"
 
-#: define-music-types.scm:775
-msgid "See music-types.scm for supported repeats"
-msgstr ""
+#: midi2ly.py:136 mup2ly.py:130
+msgid " 2001--2003"
+msgstr " 2001-2003"
 
-#: document-backend.scm:91
-#, scheme-format
-msgid "pair expected in doc ~s"
+#: midi2ly.py:141 mup2ly.py:135
+msgid ""
+"\n"
+"Distributed under terms of the GNU General Public License. It comes with\n"
+"NO WARRANTY."
 msgstr ""
+"\n"
+"Distribueras under GNU General Public License.\n"
+"INGEN GARANTI ges för programmet."
 
-#: document-backend.scm:135
-#, fuzzy, scheme-format
-msgid "cannot find interface for property: ~S"
-msgstr "kan inte hitta teckennummer: %d"
+#: midi2ly.py:166 mup2ly.py:162
+msgid "Exiting ... "
+msgstr "Avslutar... "
 
-#: document-backend.scm:145
-#, fuzzy, scheme-format
-msgid "unknown Grob interface: ~S"
-msgstr "okänd klusterstil: \"%s\""
+#: midi2ly.py:264 mup2ly.py:261
+#, python-format
+msgid "command exited with value %d"
+msgstr "kommandot avslutade med värde %d"
 
-#: documentation-lib.scm:45
-#, fuzzy, scheme-format
-msgid "Processing ~S..."
-msgstr "Behandlar..."
+# här är det fråga om skrivning till en fil (första parametern är t.ex
+# DVI, LATEX, MIDI, TEX)
+#. ###############################################################
+#. END Library
+#. ###############################################################
+#. hmm
+#. major scale: do-do
+#. minor scale: la-la  (= + 5) '''
+#. By tradition, all scales now consist of a sequence
+#. of 7 notes each with a distinct name, from amongst
+#. a b c d e f g.  But, minor scales have a wide
+#. second interval at the top - the 'leading note' is
+#. sharped. (Why? it just works that way! Anything
+#. else doesn't sound as good and isn't as flexible at
+#. saying things. In medieval times, scales only had 6
+#. notes to avoid this problem - the hexachords.)
+#. So, the d minor scale is d e f g a b-flat c-sharp d
+#. - using d-flat for the leading note would skip the
+#. name c and duplicate the name d.  Why isn't c-sharp
+#. put in the key signature? Tradition. (It's also
+#. supposedly based on the Pythagorean theory of the
+#. cycle of fifths, but that really only applies to
+#. major scales...)  Anyway, g minor is g a b-flat c d
+#. e-flat f-sharp g, and all the other flat minor keys
+#. end up with a natural leading note. And there you
+#. have it.
+#. John Sankey <bf250@freenet.carleton.ca>
+#.
+#. Let's also do a-minor: a b c d e f gis a
+#.
+#. --jcn
+#. as -> gis
+#. des -> cis
+#. ges -> fis
+#. g -> fisis
+#. d -> cisis
+#. a -> gisis
+#. b -> ces
+#. e -> fes
+#. f -> eis
+#. c -> bis
+#. # FIXME: compile fix --jcn
+#. TODO: move space
+#. fis cis gis dis ais eis bis
+#. bes es as des ges ces fes
+#. urg, we should be sure that we're in a lyrics staff
+#. all include ALL_NOTES_OFF
+#. ugh, must set key while parsing
+#. because Note init uses key
+#. Better do Note.calc () at dump time?
+#. last_lyric.clocks = t - last_time
+#. hmm
+#. urg, this will barf at meter changes
+#. urg LilyPond doesn't start at c4, but
+#. remembers from previous tracks!
+#. reference_note = Note (clocks_per_4, 4*12, 0)
+#. must be in \notes mode for parsing \skip
+#: midi2ly.py:1002
+#, python-format
+msgid "%s output to `%s'..."
+msgstr "%s skrivet till \"%s\"..."
 
-#: documentation-lib.scm:150
-#, fuzzy, scheme-format
-msgid "Writing ~S..."
-msgstr "Skriver \"%s\"..."
+#: midi2ly.py:1033
+msgid "Example:"
+msgstr "Exempel:"
 
-#: documentation-lib.scm:172
-#, fuzzy, scheme-format
-msgid "cannot find description for property ~S (~S)"
-msgstr "kan inte hitta teckennummer: %d"
+#: midi2ly.py:1083
+msgid "no files specified on command line."
+msgstr "inga filer angivna på kommandoraden."
 
-#: framework-eps.scm:91 framework-eps.scm:92
-#, fuzzy, scheme-format
-msgid "Writing ~a..."
-msgstr "Skriver \"%s\"..."
+#. !@PYTHON@
+#. mup2ly.py -- mup input converter
+#.
+#. source file of the GNU LilyPond music typesetter
+#.
+#. (c) 2001
+#. if set, LILYPONDPREFIX must take prevalence
+#. if datadir is not set, we're doing a build and LILYPONDPREFIX
+#: mup2ly.py:70
+msgid "Convert mup to LilyPond source"
+msgstr "Konvertera mup till LilyPond"
 
-#: framework-ps.scm:279
-#, scheme-format
-msgid "cannot embed ~S=~S"
-msgstr ""
+#: mup2ly.py:73
+msgid "debug"
+msgstr "felsökningsutdata"
 
-#: framework-ps.scm:332
-#, scheme-format
-msgid "cannot extract file matching ~a from ~a"
-msgstr ""
+#: mup2ly.py:74
+msgid "define macro NAME [optional expansion EXP]"
+msgstr "definiera makro NAME [valfri makroersättning EXP]"
 
-#: framework-ps.scm:349
-#, scheme-format
-msgid "do not know how to embed ~S=~S"
-msgstr ""
+#: mup2ly.py:76 main.cc:117
+msgid "write output to FILE"
+msgstr "skriv utdata till FIL"
 
-#: framework-ps.scm:380
-#, fuzzy, scheme-format
-msgid "do not know how to embed font ~s ~s ~s"
-msgstr "Kan inte tolka artikulering \"%s\""
+#: mup2ly.py:77
+msgid "only pre-process"
+msgstr "förbehandla enbart"
 
-#: framework-ps.scm:729
-#, scheme-format
-msgid "cannot convert <stdout> to ~S"
-msgstr ""
+#. Duh.  Python style portable: cp *.EXT OUTDIR
+#. system ('cp *.%s %s' % (ext, outdir), 1)
+#. Python < 1.5.2 compatibility
+#.
+#. On most platforms, this is equivalent to
+#. `normpath(join(os.getcwd()), PATH)'.  *Added in Python version 1.5.2*
+#. if set, LILYPONDPREFIX must take prevalence
+#. if datadir is not set, we're doing a build and LILYPONDPREFIX
+#. ###############################################################
+#. END Library
+#.
+#. PMX cut and paste
+#.
+#. if not self.entries:
+#. #return '\n'
+#. #ugh ugh
+#. return '\n%s = {}\n\n' % self.idstring ()
+#. ugh
+#. def set_clef (self, letter):
+#. clstr = clef_table[letter]
+#. self.voices[0].add_nonchord (Clef (clstr))
+#. urg
+#. maybe use import copy?
+#. for i in self.pitches:
+#. ch.pitches.append (i)
+#. for i in self.scripts:
+#. ch.scripts.append (i)
+#. http://www.arkkra.com/doc/uguide/contexts.html
+#. #self.current_staffs = []
+#. duh
+#. FIXME: 1?
+#. FIXME: does key play any role in this?
+#. ch = self.current_voices[0].last_chord ()
+#. ch.basic_duration = self.current_voices[0].last_chord ().basic_duration
+#. ugh
+#. ch = self.current_voices[0].last_chord ()
+#. `;' is not a separator, chords end with ';'
+#. mup resets default duration and pitch each bar
+#. ugh: these (and lots more) should also be parsed in
+#. context staff.  we should have a class Staff_properties
+#. and parse/set all those.
+#. shortcut: set to official mup maximum (duh)
+#. self.set_staffs (40)
+#: mup2ly.py:1076
+#, python-format
+msgid "no such context: %s"
+msgstr "omgivning finns inte: %s"
 
-#: framework-ps.scm:748 framework-ps.scm:751
-#, scheme-format
-msgid "cannot generate ~S using the postscript back-end"
-msgstr ""
+#. hmm
+#. dig this: mup allows ifdefs inside macro bodies
+#. don't do nested multi-line defines
+#. duh: mup is strictly line-based, except for `define',
+#. which is `@' terminated and may span several lines
+#. don't define new macros in unactive areas
+#. To support nested multi-line define's
+#. process_function and macro_name, macro_body
+#. should become lists (stacks)
+#. The mup manual is undetermined on this
+#. and I haven't seen examples doing it.
+#.
+#. don't do nested multi-line define's
+#. writes to stdout for help2man
+#. don't call
+#. identify ()
+#. sys.stdout.flush ()
+#. handy emacs testing
+#. if not files:
+#. files = ['template.mup']
+#: mup2ly.py:1300
+#, python-format
+msgid "Processing `%s'..."
+msgstr "Behandlar \"%s\"..."
 
-#: framework-ps.scm:758
-msgid ""
-"\n"
-"The PostScript backend does not support the 'classic'\n"
-"framework. Use the EPS backend instead,\n"
-"\n"
-"  lilypond -b eps <file>\n"
-"\n"
-"or remove the lilypond-book specific settings from the input.\n"
-msgstr ""
+#: mup2ly.py:1319
+#, python-format
+msgid "Writing `%s'..."
+msgstr "Skriver \"%s\"..."
 
-#: framework-tex.scm:360
-#, fuzzy, scheme-format
-msgid "TeX file name must not contain whitespace: `~a'"
-msgstr "filnamnet får inte innehålla mellanslag: \"%s\""
+#: getopt-long.cc:146
+#, c-format
+msgid "option `%s' requires an argument"
+msgstr "flaggan \"%s\" kräver ett argument"
 
-#: layout-beam.scm:29
-#, scheme-format
-msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
-msgstr ""
+#: getopt-long.cc:150
+#, c-format
+msgid "option `%s' doesn't allow an argument"
+msgstr "flaggan \"%s\" tillåter inget argument"
 
-#: layout-beam.scm:46
-#, scheme-format
-msgid "Error in beam quanting.  Expected ~S 0, found ~S."
-msgstr ""
+#: getopt-long.cc:154
+#, c-format
+msgid "unrecognized option: `%s'"
+msgstr "okänd flagga: \"%s\""
 
-#: layout-page-layout.scm:357
-#, fuzzy
-msgid "Calculating page breaks..."
-msgstr "Beräknar radbrytningar..."
+#: getopt-long.cc:161
+#, c-format
+msgid "invalid argument `%s' to option `%s'"
+msgstr "ogiltigt argument \"%s\" till flaggan \"%s\""
 
-#: lily-library.scm:593
-#, fuzzy, scheme-format
-msgid "unknown unit: ~S"
-msgstr "okänd översättare: \"%s\""
+#: warn.cc:25
+#, c-format
+msgid "warning: %s\n"
+msgstr "varning: %s\n"
 
-#: lily-library.scm:626
-#, scheme-format
-msgid "no \\version statement found, please add~afor future compatibility"
-msgstr ""
+#: warn.cc:31
+#, c-format
+msgid "error: %s\n"
+msgstr "fel: %s\n"
 
-#: lily-library.scm:633
-msgid "old relative compatibility not used"
-msgstr ""
+#: warn.cc:44
+#, c-format
+msgid "programming error: %s (Continuing; cross thumbs)\n"
+msgstr " programmeringsfel: %s (Fortsätter, håll tummarna)\n"
 
-#: lily.scm:144
-#, fuzzy, scheme-format
-msgid "cannot find: ~A"
-msgstr "kan inte hitta: \"%s\""
+#: accidental.cc:202 key-signature-interface.cc:137
+#, c-format
+msgid "accidental `%s' not found"
+msgstr "höjning/säkning \"%s\" hittades inte"
 
-#: lily.scm:209
-#, scheme-format
-msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
-msgstr ""
+#: accidental-engraver.cc:171 new-accidental-engraver.cc:238
+#, c-format
+msgid "Accidental typesetting list must begin with context-name: %s"
+msgstr "Lista av höjningar/säkningar måste börja med context-name: %s"
 
-#: lily.scm:525 lily.scm:589
-#, scheme-format
-msgid "failed files: ~S"
-msgstr ""
+#: accidental-engraver.cc:196 new-accidental-engraver.cc:263
+#, c-format
+msgid "unknown accidental typesetting: %s. Ignored"
+msgstr "okänd typsättning av höjning/sänkning: %s. Ignorered"
 
-# här är det fråga om skrivning till en fil
-#: lily.scm:579
-#, fuzzy, scheme-format
-msgid "Redirecting output to ~a..."
-msgstr "beroenden skrivna till \"%s\"..."
+#: accidental-engraver.cc:212 new-accidental-engraver.cc:279
+#, c-format
+msgid "Symbol is not a parent context: %s. Ignored"
+msgstr "Symbol är inte en föräldraomgivning: %s. Ignoreread"
 
-#: ly-syntax-constructors.scm:40
-msgid "Music head function must return Music object"
-msgstr ""
+#: accidental-engraver.cc:215 new-accidental-engraver.cc:282
+#, c-format
+msgid "Accidental typesetting must be pair or context-name: %s"
+msgstr "Typsättning av höjning/sänkning måste vara par eller context-name: %s"
 
-#: ly-syntax-constructors.scm:136
-#, scheme-format
-msgid "Invalid property operation ~a"
-msgstr ""
+#: afm.cc:66
+#, c-format
+msgid "can't find character number: %d"
+msgstr "kan inte hitta teckennummer: %d"
 
-#: markup.scm:123
-#, scheme-format
-msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
-msgstr ""
+#: afm.cc:81
+#, c-format
+msgid "can't find character called: `%s'"
+msgstr "kan inte hitta tecken som heter: \"%s\""
 
-#: markup.scm:129
-#, scheme-format
-msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
-msgstr ""
+#: afm.cc:142
+#, c-format
+msgid "Error parsing AFM file: `%s'"
+msgstr "Fel vid tolkning av AFM-fil: \"%s\""
 
-#: music-functions.scm:213
-#, fuzzy
-msgid "More alternatives than repeats.  Junking excess alternatives"
-msgstr "Fler alternativ än repriser. Slänger överblivna alternativ."
+#: all-font-metrics.cc:95
+#, c-format
+msgid "checksum mismatch for font file: `%s'"
+msgstr "felaktig checksumma för typsnittsfil: \"%s\""
 
-#: music-functions.scm:232
-#, scheme-format
-msgid "expecting 2 elements for chord tremolo, found ~a"
-msgstr ""
+#: all-font-metrics.cc:97
+#, c-format
+msgid "does not match: `%s'"
+msgstr "matchar inte: \"%s\""
 
-#: music-functions.scm:538
-#, fuzzy, scheme-format
-msgid "music expected: ~S"
-msgstr "väntade tomrum"
+#: all-font-metrics.cc:102
+msgid " Rebuild all .afm files, and remove all .pk and .tfm files.  Rerun with -V to show font paths."
+msgstr " Bygg om alla .afm-filer, och ta bort alla .pk- och .tfm-filer. Kör igen med -V för att visa typsnittssökvägar."
 
-#. FIXME: uncomprehensable message
-#: music-functions.scm:589
-#, scheme-format
-msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
+#: all-font-metrics.cc:103
+msgid ""
+"A script for removing font-files is delivered with the source-code,\n"
+"in buildscripts/clean-fonts.sh"
 msgstr ""
+"Ett skript för att ta bort typsnittsfiler levereras med källkoden,\n"
+"i buildscripts/clean-fonts.sh"
 
-#: music-functions.scm:748
-#, fuzzy, scheme-format
-msgid "cannot find quoted music: `~S'"
+#: all-font-metrics.cc:169
+#, c-format
+msgid "can't find font: `%s'"
 msgstr "kan inte hitta typsnitt: \"%s\""
 
-#: music-functions.scm:942
-#, fuzzy, scheme-format
-msgid "unknown accidental style: ~S"
-msgstr "okänd typsättning av höjning/sänkning: %s. Ignorered"
-
-#: output-ps.scm:315
-msgid "utf-8-string encountered in PS backend"
-msgstr ""
-
-#: output-svg.scm:42
-#, scheme-format
-msgid "undefined: ~S"
-msgstr ""
-
-#: output-svg.scm:132
-#, scheme-format
-msgid "cannot decypher Pango description: ~a"
-msgstr ""
-
-#: output-tex.scm:98
-#, fuzzy, scheme-format
-msgid "cannot find ~a in ~a"
-msgstr "kan inte hitta start på balk"
+#: all-font-metrics.cc:170
+msgid "Loading default font"
+msgstr "Läser in standardtypsnitt"
 
-#: paper.scm:69
-msgid "Not in toplevel scope"
-msgstr ""
+#: all-font-metrics.cc:185
+#, c-format
+msgid "can't find default font: `%s'"
+msgstr "kan inte hitta standardtypsnitt: \"%s\""
 
-#: paper.scm:117
-#, scheme-format
-msgid "This is not a \\layout {} object, ~S"
-msgstr ""
+#: all-font-metrics.cc:186 includable-lexer.cc:59 input-file-results.cc:192
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(sökväg: \"%s\")"
 
-#: paper.scm:129
-#, scheme-format
-msgid "Unknown papersize: ~a"
-msgstr ""
+#: all-font-metrics.cc:187
+msgid "Giving up"
+msgstr "Ger upp"
 
-#. TODO: should raise (generic) exception with throw, and catch
-#. that in parse-scm.cc
-#: paper.scm:144
-msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
-msgstr ""
+#: auto-change-iterator.cc:43 change-iterator.cc:60
+#: part-combine-music-iterator.cc:120
+msgid "Can't switch translators, I'm there already"
+msgstr "Kan inte byta översättare, jag är redan där"
 
-#: parser-clef.scm:126
-#, fuzzy, scheme-format
-msgid "unknown clef type `~a'"
-msgstr "okänd klusterstil: \"%s\""
+#: bar-check-iterator.cc:51
+#, c-format
+msgid "barcheck failed at: %s"
+msgstr "taktkontroll misslyckades vid: %s"
 
-#: parser-clef.scm:127
-msgid "see scm/clef.scm for supported clefs"
-msgstr ""
+#: beam.cc:146
+msgid "beam has less than two visible stems"
+msgstr "balk har mindre än två synliga skaft"
 
-#: ps-to-png.scm:88
-#, fuzzy, scheme-format
-msgid "~a exited with status: ~S"
-msgstr "kommandot avslutade med värde %d"
+#: beam.cc:151
+msgid "Beam has less than two stems. Removing beam."
+msgstr "Balk har mindre än två skaft. Tar bort balk."
 
-#: to-xml.scm:190
-#, fuzzy, scheme-format
-msgid "assertion failed: ~S"
-msgstr "LaTeX misslyckades."
+#: beam.cc:976
+msgid "Not sure that we can find a nice beam slope (no viable initial configuration found)."
+msgstr "Inte säker på att vi kan hitta en bra balklutning (ingen passande initialkonfiguration funnen)."
 
-#, fuzzy
-#~ msgid "show warranty"
-#~ msgstr "visa garanti och copyright"
+#: beam-engraver.cc:176
+msgid "already have a beam"
+msgstr "har redan en balk"
 
-#, fuzzy
-#~ msgid "Convert MIDI to LilyPond source."
-#~ msgstr "Konvertera MIDI till LilyPond"
+#: beam-engraver.cc:259
+msgid "unterminated beam"
+msgstr "oavslutad balk"
 
-#, fuzzy
-#~ msgid "example"
-#~ msgstr "Exempel:"
+#: beam-engraver.cc:292 chord-tremolo-engraver.cc:197
+msgid "stem must have Rhythmic structure"
+msgstr "skaft måste ha en rytmisk struktur"
 
-#, fuzzy
-#~ msgid "loading default font"
-#~ msgstr "Läser in standardtypsnitt"
+#: beam-engraver.cc:306
+msgid "stem doesn't fit in beam"
+msgstr "skaftet passar inte i balken"
 
-#~ msgid "cannot find default font: `%s'"
-#~ msgstr "kan inte hitta standardtypsnitt: \"%s\""
+#: beam-engraver.cc:307
+msgid "beam was started here"
+msgstr "balken startade här"
 
-#~ msgid "crescendo too small"
-#~ msgstr "crescendo för litet"
+#: break-align-interface.cc:173
+#, c-format
+msgid "No spacing entry from %s to `%s'"
+msgstr "Ingen avståndsdata från %s till \"%s\""
 
-# förklaring av flaggan -h
-#, fuzzy
-#~ msgid "print this help"
-#~ msgstr "denna hjälp"
+#: change-iterator.cc:22
+#, c-format
+msgid "can't change `%s' to `%s'"
+msgstr "kan inte ändra \"%s\" till \"%s\""
 
-#~ msgid "silly pitch"
-#~ msgstr "tokig ton"
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_string_  = get_change ()->change_to_id_string_;
+#.
+#: change-iterator.cc:79
+msgid "I'm one myself"
+msgstr "Jag är en själv"
 
-#, fuzzy
-#~ msgid "cannot open file %s"
-#~ msgstr "kan inte öppna fil: \"%s\""
+#: change-iterator.cc:82
+msgid "none of these in my family"
+msgstr "ingen av dessa i min familj"
 
-#~ msgid "Incorrect lilypond version: %s (%s, %s)"
-#~ msgstr "Felaktig lilypond-version: %s (%s, %s)"
+#: chord-tremolo-engraver.cc:98
+#, c-format
+msgid "Chord tremolo with %d elements. Must have two elements."
+msgstr "Ackordtremolo med %d element. Måste ha två element."
 
-#~ msgid "no one to print a tremolos"
-#~ msgstr "det finns ingen som kan skriva tremolon"
+#: chord-tremolo-engraver.cc:157
+msgid "unterminated chord tremolo"
+msgstr "icke avslutat ackordtremolo"
 
-#, fuzzy
-#~ msgid "gotcha: ptr=%ul"
-#~ msgstr "fick dig: ptr=%ul"
+#: chord-tremolo-iterator.cc:69
+msgid "no one to print a tremolos"
+msgstr "det finns ingen som kan skriva tremolon"
 
-#, fuzzy
-#~ msgid "distance undefined, assuming 0.1"
-#~ msgstr "Vaticana_ligature:x-offset odefinierad; antar 0.0"
+#: clef.cc:64
+#, c-format
+msgid "clef `%s' not found"
+msgstr "klav \"%s\" hittades inte"
 
-#, fuzzy
-#~ msgid "distance=%f"
-#~ msgstr "avstånd=%f"
+#: cluster.cc:131
+#, c-format
+msgid "unknown cluster style `%s'"
+msgstr "okänd klusterstil: \"%s\""
 
-#, fuzzy
-#~ msgid "junking event: `%s'"
-#~ msgstr "Slänger händelse: \"%s\""
+#: coherent-ligature-engraver.cc:84
+#, c-format
+msgid "gotcha: ptr=%ul"
+msgstr "fick dig: ptr=%ul"
 
-#~ msgid "no one to print a repeat brace"
-#~ msgstr "det finns ingen som kan skriva ett repristecken"
+#: coherent-ligature-engraver.cc:96
+#, c-format
+msgid "distance=%f"
+msgstr "avstånd=%f"
 
-#~ msgid "cannot find `%s' context"
-#~ msgstr "kan inte hitta omgivningen \"%s\""
+#: coherent-ligature-engraver.cc:139
+#, c-format
+msgid "Coherent_ligature_engraver: setting `spacing-increment = 0.01': ptr=%ul"
+msgstr "Coherent_ligature_engraver: sätter \"spacing-increment = 0.01\": ptr=%ul"
 
-#~ msgid "Optimal demerits: %f"
-#~ msgstr "Optimal demerit: %f"
+#: custos.cc:92
+#, c-format
+msgid "custos `%s' not found"
+msgstr "custos \"%s\" hittades inte"
 
-#, fuzzy
-#~ msgid "no feasible line breaking found"
-#~ msgstr "Ingen lämplig radbrytning hittades"
+#: dimensions.cc:13
+msgid "NaN"
+msgstr "-"
 
-#~ msgid "music for the martians."
-#~ msgstr "musik för marsianerna."
+#: dynamic-engraver.cc:204 span-dynamic-performer.cc:82
+msgid "can't find start of (de)crescendo"
+msgstr "kan inte hitta start på crescendo/diminuendo"
 
-#~ msgid "no one to print a percent"
-#~ msgstr "det finns ingen som kan skriva procent"
+#: dynamic-engraver.cc:216
+msgid "already have a crescendo"
+msgstr "har redan ett crescendo"
 
-#~ msgid "Creator: "
-#~ msgstr "Skapare: "
+#: dynamic-engraver.cc:217
+msgid "already have a decrescendo"
+msgstr "har redan ett diminuendo"
 
-#~ msgid "at "
-#~ msgstr "vid "
+#: dynamic-engraver.cc:220
+msgid "Cresc started here"
+msgstr "Cresc startade här"
 
-#, fuzzy
-#~ msgid "in quotation: junking event %s"
-#~ msgstr "Slänger händelse: \"%s\""
+#: dynamic-engraver.cc:323
+msgid "unterminated (de)crescendo"
+msgstr "oavslutat crescendo/diminuendo"
 
-#, fuzzy
-#~ msgid "Global shortest duration is %s"
-#~ msgstr "Globalt kortaste längd är %s\n"
+#: event.cc:49
+#, c-format
+msgid "Transposition by %s makes alteration larger than two"
+msgstr "Transponering med %s gör ändring större än två"
 
-#~ msgid "TFM header of `%s' has only %u word (s)"
-#~ msgstr "TFM-rubrik i \"%s\" har bara %u ord"
+#: event-chord-iterator.cc:76 output-property-music-iterator.cc:27
+#, c-format
+msgid "Junking event: `%s'"
+msgstr "Slänger händelse: \"%s\""
 
-#~ msgid ""
-#~ "%s: TFM file has %u parameters, which is more than the %u I can handle"
-#~ msgstr ""
-#~ "%s: TFM-fil har %u parametrar, vilket är mer än de %u jag kan hantera"
+#: extender-engraver.cc:94
+msgid "unterminated extender"
+msgstr "oavslutad utökare"
 
-#~ msgid "cannot find ascii character: %d"
-#~ msgstr "kan inte hitta ASCII-tecken: %d"
+#: extender-engraver.cc:106
+msgid "Nothing to connect extender to on the left.  Ignoring extender event."
+msgstr "Det finns inget att koppla utökaren mot till vänster. Ignorerar utökarhändelse."
 
-#~ msgid "no one to print a tuplet start bracket"
-#~ msgstr "det finns ingen som kan skriva en starthake för tupel"
+#: folded-repeat-iterator.cc:88
+msgid "no one to print a repeat brace"
+msgstr "det finns ingen som kan skriva ett repristecken"
 
-#, fuzzy
-#~ msgid "unterminated trill spanner"
-#~ msgstr "oavslutad textbryggare"
+#: font-interface.cc:239
+msgid "couldn't find any font satisfying "
+msgstr "kunde inte hitta något typsnitt som uppfyller "
 
-#, fuzzy
-#~ msgid "identifier should have alphabetic characters only"
-#~ msgstr "Identifierare ska bara innehålla alfabetiska tecken"
+#: glissando-engraver.cc:100
+msgid "Unterminated glissando."
+msgstr "Oavslutat glissando."
 
-#, fuzzy
-#~ msgid "more alternatives than repeats"
-#~ msgstr "Fler alternativ än repriser. Slänger överblivna alternativ."
+#: gourlay-breaking.cc:188
+#, c-format
+msgid "Optimal demerits: %f"
+msgstr "Optimal demerit: %f"
 
-#, fuzzy
-#~ msgid "cannot find signature for music function"
-#~ msgstr "kan inte hitta omgivningen \"%s\""
+#: gourlay-breaking.cc:193
+msgid "No feasible line breaking found"
+msgstr "Ingen lämplig radbrytning hittades"
 
-#~ msgid "lilylib module"
-#~ msgstr "lilylib-modul"
+#: gregorian-ligature-engraver.cc:59
+#, c-format
+msgid "\\%s ignored"
+msgstr "\\%s ignorerat"
 
-#~ msgid "Opening pipe `%s'"
-#~ msgstr "Öppnar rör \"%s\"..."
+#: gregorian-ligature-engraver.cc:64
+#, c-format
+msgid "implied \\%s added"
+msgstr "implicit \\%s tillagt"
 
-#~ msgid "`%s' failed (%s)"
-#~ msgstr "\"%s\" misslyckades (%s)"
+#.
+#. Todo: do something sensible. The grob-pq-engraver is not water
+#. tight, and stuff like tupletSpannerDuration confuses it.
+#.
+#: grob-pq-engraver.cc:130
+#, c-format
+msgid ""
+"Skipped something?\n"
+"Grob %s ended before I expected it to end."
+msgstr ""
+"Skippade något?\n"
+"Grob %s slutade innan jag förväntade det."
 
-#~ msgid "(ignored)"
-#~ msgstr "(ignorerat)"
+#: hairpin.cc:98
+msgid "decrescendo too small"
+msgstr "diminuendo för litet"
 
-# här är det fråga om rensning av en temporärkatalog
-#~ msgid "Cleaning %s..."
-#~ msgstr "Rensar %s..."
+#: hairpin.cc:99
+msgid "crescendo too small"
+msgstr "crescendo för litet"
 
-#, fuzzy
-#~ msgid "Usage: %s [OPTION]... [FILE]..."
-#~ msgstr "Användning: %s [FLAGGA]... FIL..."
+#: horizontal-bracket-engraver.cc:64
+msgid "Don't have that many brackets."
+msgstr "Har inte så många klamrar"
 
-#, fuzzy
-#~ msgid "%s: skipping: `%s'"
-#~ msgstr "inställningen finns inte: \"%s\""
+#: horizontal-bracket-engraver.cc:73
+msgid "Conflicting note group events."
+msgstr "Motsägande notgrupphändelser."
 
-#~ msgid "print version information"
-#~ msgstr "visa versionsinformation"
+#: hyphen-engraver.cc:87
+msgid "unterminated hyphen"
+msgstr "oavslutat bindestreck"
 
-#~ msgid "getopt says: `%s'"
-#~ msgstr "getopt säger: \"%s\""
+#: hyphen-engraver.cc:99
+msgid "Nothing to connect hyphen to on the left.  Ignoring hyphen event."
+msgstr "Det finns inget att koppla bindestrecket mot till vänster.  Ignorerar bindestreckshändelse."
 
-#, fuzzy
-#~ msgid "Command failed: `%s' (status %d)"
-#~ msgstr "LilyPond misslyckades på indatafilen \"%s\" (slutstatus %d)"
+#: input.cc:99
+msgid "non fatal error: "
+msgstr "icke-fatalt fel: "
 
-#~ msgid "command exited with value %d"
-#~ msgstr "kommandot avslutade med värde %d"
+#: input.cc:107 source-file.cc:146 source-file.cc:239
+msgid "position unknown"
+msgstr "okänd position"
 
-#~ msgid "debug"
-#~ msgstr "felsökningsutdata"
+#: input-file-results.cc:72 source-file.cc:54 streams.cc:38
+#, c-format
+msgid "can't open file: `%s'"
+msgstr "kan inte öppna fil: \"%s\""
 
-#~ msgid "define macro NAME [optional expansion EXP]"
-#~ msgstr "definiera makro NAME [valfri makroersättning EXP]"
+#: input-file-results.cc:132
+msgid "Score contains errors; will not process it"
+msgstr "Partitur innehåller fel; kommer inte behandla det"
 
-#~ msgid "only pre-process"
-#~ msgstr "förbehandla enbart"
+#: input-file-results.cc:172
+#, c-format
+msgid "Now processing: `%s'"
+msgstr "Behandlar nu: \"%s\""
 
-#~ msgid "no such context: %s"
-#~ msgstr "omgivning finns inte: %s"
+#: key-performer.cc:96
+msgid "FIXME: key change merge"
+msgstr "FIXA: tonartsbytessammanslagning"
 
-#~ msgid "Processing `%s'..."
-#~ msgstr "Behandlar \"%s\"..."
+#: kpath.cc:76
+#, c-format
+msgid "Kpathsea couldn't find TFM file `%s'"
+msgstr "Kpathsea kan inte hitta TFML-fil \"%s\""
 
-#~ msgid "RES"
-#~ msgstr "RES"
+#: ligature-engraver.cc:159
+msgid "can't find start of ligature"
+msgstr "kan inte hitta start på ligatur"
 
-#~ msgid "set the resolution of the preview to RES"
-#~ msgstr "sätt resolutionen för förhandsgranskningen till RES"
+#: ligature-engraver.cc:165
+msgid "no right bound"
+msgstr "ingen högergräns"
 
-#, fuzzy
-#~ msgid "Wrote `%s'"
-#~ msgstr "Skriver \"%s\"..."
+#: ligature-engraver.cc:191
+msgid "already have a ligature"
+msgstr "har redan en ligatur"
 
-#, fuzzy
-#~ msgid "cannot dlopen: %s: %s"
-#~ msgstr "kan inte öppna fil: \"%s\""
+#: ligature-engraver.cc:207
+msgid "no left bound"
+msgstr "ingen vänstergräns"
 
-#, fuzzy
-#~ msgid "install package: %s or %s"
-#~ msgstr "kan inte ändra \"%s\" till \"%s\""
+#: ligature-engraver.cc:258
+msgid "unterminated ligature"
+msgstr "oavslutad ligatur"
 
-#, fuzzy
-#~ msgid "parsing AFM file: `%s'"
-#~ msgstr "Fel vid tolkning av AFM-fil: \"%s\""
+#: ligature-engraver.cc:282
+msgid "ligature may not contain rest; ignoring rest"
+msgstr "ligatur får inte innehålla paus; ignorerar paus"
 
-#~ msgid "checksum mismatch for font file: `%s'"
-#~ msgstr "felaktig checksumma för typsnittsfil: \"%s\""
+#: ligature-engraver.cc:283
+msgid "ligature was started here"
+msgstr "ligaturen startade här"
 
-#~ msgid "does not match: `%s'"
-#~ msgstr "matchar inte: \"%s\""
+#: lily-guile.cc:88
+#, c-format
+msgid "(load path: `%s')"
+msgstr "(inläsningssökväg: \"%s\""
 
-#, fuzzy
-#~ msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
-#~ msgstr ""
-#~ " Bygg om alla .afm-filer, och ta bort alla .pk- och .tfm-filer. Kör igen "
-#~ "med -V för att visa typsnittssökvägar."
+#: lily-guile.cc:576
+#, c-format
+msgid "Can't find property type-check for `%s' (%s)."
+msgstr "Kan inte hitta egenskapstypkontroll för \"%s\" (%s)"
 
-#, fuzzy
-#~ msgid "A script for removing font-files is delivered with the source-code:"
-#~ msgstr ""
-#~ "Ett skript för att ta bort typsnittsfiler levereras med källkoden,\n"
-#~ "i buildscripts/clean-fonts.sh"
+#: lily-guile.cc:579
+msgid "Perhaps you made a typing error?"
+msgstr "Kanske har du gjort ett skrivfel?"
 
-#~ msgid "beam has less than two visible stems"
-#~ msgstr "balk har mindre än två synliga skaft"
+#: lily-guile.cc:585
+msgid "Doing assignment anyway."
+msgstr "Gör tilldelningen ändå."
 
-#, fuzzy
-#~ msgid "adding lilypond directory: %s"
-#~ msgstr "kan inte skapa katalog: \"%s\""
+#: lily-guile.cc:599
+#, c-format
+msgid "Type check for `%s' failed; value `%s' must be of type `%s'"
+msgstr "Typkontroll för \"%s\" misslyckades. Värde \"%s\" måste ha typen \"%s\""
 
-#, fuzzy
-#~ msgid "cannot handle a percent repeat of length: %s"
-#~ msgstr "Vet inte hur en procentrepris av denna längd ska hanteras."
+#: lookup.cc:173
+msgid "round filled box horizontal extent smaller than blot; decreasing blot"
+msgstr "horisontell utbredning för rund fylld box mindre än blot; minskar blot"
 
-#~ msgid "lilypond -e EXPR means:"
-#~ msgstr "lilypond -e UTTR betyder:"
+#: lookup.cc:178
+msgid "round filled box vertical extent smaller than blot; decreasing blot"
+msgstr "vertikal utbredning för rund fylld box mindre än blot; minskar blot"
 
-#~ msgid "  Evalute the Scheme EXPR before parsing any .ly files."
-#~ msgstr "  Evaluera Scheme-uttrycket UTTR innan någon .ly-fil läses in."
+#: lyric-phrasing-engraver.cc:311
+msgid "lyrics found without any matching notehead"
+msgstr "sångtext hittad utan något matchande nothuvud"
 
-#~ msgid ""
-#~ "  Multiple -e options may be given, they will be evaluated sequentially."
-#~ msgstr "  Flera -e kan ges, de kommer att evalueras i tur och ordning."
+#: lyric-phrasing-engraver.cc:317
+msgid "Huh? Melismatic note found to have associated lyrics."
+msgstr "Öh? Melismatisk not har tillhörande sångtext."
 
-#, fuzzy
-#~ msgid ""
-#~ "  The function ly:set-option allows for access to some internal variables."
-#~ msgstr ""
-#~ "  Funktionen ly-set-option ger åtkomst till några interna variabler."
+#: main.cc:106
+msgid "EXPR"
+msgstr "UTTR"
 
-#, fuzzy
-#~ msgid "Usage: lilypond -e \"(ly:set-option SYMBOL VAL)\""
-#~ msgstr "Användning: lilpond -e \"(ly-set-option SYMBOL VÄRDE)\""
+#: main.cc:107
+msgid "set options, use -e '(ly-option-usage)' for help"
+msgstr "sätt inställningar, använd -e '(ly-option-usage)' för hjälp"
 
-#~ msgid "Separation_item:  I've been drinking too much"
-#~ msgstr "Separation_item: Jag har druckit för mycket"
+#: main.cc:110
+msgid "use output format EXT"
+msgstr "använd utdataformat FMT"
 
-#~ msgid "need integer number arg"
-#~ msgstr "behöver heltalsargument"
+#: main.cc:112
+msgid "FIELD"
+msgstr "FÄLT"
 
-#, fuzzy
-#~ msgid "suspect duration in beam: %s"
-#~ msgstr "Misstänkt längd hittad efter denna balk"
+#: main.cc:112
+msgid "write header field to BASENAME.FIELD"
+msgstr "skriv rubrikfält till BASNAMN.FÄLT"
 
-#, fuzzy
-#~ msgid "syntax error: cannot back up"
-#~ msgstr "icke-fatalt fel: "
+#: main.cc:113
+msgid "add DIR to search path"
+msgstr "lägg till KATALOG till sökvägen"
 
-#, fuzzy
-#~ msgid "Stack now"
-#~ msgstr "spår "
+#: main.cc:114
+msgid "use FILE as init file"
+msgstr "använd FIL som init-fil"
 
-#, fuzzy
-#~ msgid "Reading a token: "
-#~ msgstr "Öppnar rör \"%s\"..."
+#: main.cc:118
+msgid "prepend DIR to dependencies"
+msgstr "lägg till KATALOG efter beroenden"
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s"
-#~ msgstr "icke-fatalt fel: "
+#.
+#. should audit again.
+#.
+#: main.cc:123
+msgid "inhibit file output naming and exporting"
+msgstr "hindra namngivning av filutdata och exportering"
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s"
-#~ msgstr "icke-fatalt fel: "
+#. No version number or newline here. It confuses help2man.
+#: main.cc:155
+#, c-format
+msgid "Usage: %s [OPTION]... FILE..."
+msgstr "Användning: %s [FLAGGA]... FIL..."
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s or %s"
-#~ msgstr "icke-fatalt fel: "
+#: main.cc:157
+msgid "Typeset music and or play MIDI from FILE"
+msgstr "Typsätt musik och/eller spela MIDI från FIL"
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s"
-#~ msgstr "icke-fatalt fel: "
+#: main.cc:160
+msgid ""
+"LilyPond is a music typesetter.  It produces beautiful sheet music\n"
+"using a high level description file as input.  LilyPond is part of \n"
+"the GNU Project.\n"
+msgstr ""
+"LilyPond är en musiktypsättare. Den producerar vackra noter från en\n"
+"högnivåbeskrivning av musiken i en fil. LilyPond är en del av\n"
+"GNU-projektet.\n"
 
-#, fuzzy
-#~ msgid "syntax error; also memory exhausted"
-#~ msgstr "icke-fatalt fel: "
+#: main.cc:182
+#, c-format
+msgid ""
+"This is free software.  It is covered by the GNU General Public License,\n"
+"and you are welcome to change it and/or distribute copies of it under\n"
+"certain conditions.  Invoke as `%s --warranty' for more information.\n"
+msgstr ""
+"Det här är fri programvara. Den täcks av \"GNU General Public License\",\n"
+"och du får ändra och/eller distribuera kopior av den under vissa\n"
+"villkor. Kör \"%s --warranty\" för mer information.\n"
 
-#, fuzzy
-#~ msgid "syntax error"
-#~ msgstr "icke-fatalt fel: "
+#: main.cc:198
+msgid "GNU LilyPond -- The music typesetter"
+msgstr "GNU Lilypond -- Musiktypsättaren"
 
-#, fuzzy
-#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
-#~ msgstr "kan inte hitta typsnitt: \"%s\""
+#: main.cc:206
+msgid ""
+"    This program is free software; you can redistribute it and/or\n"
+"modify it under the terms of the GNU General Public License version 2\n"
+"as published by the Free Software Foundation.\n"
+"\n"
+"    This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
+"General Public License for more details.\n"
+"\n"
+"    You should have received a copy (refer to the file COPYING) of the\n"
+"GNU General Public License along with this program; if not, write to\n"
+"the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+msgstr ""
+"Detta program är fri programvara. Du kan distribuera det och/eller\n"
+"modifiera det under villkoren i GNU General Public License version 2\n"
+"publicerad av Free Software Foundation.\n"
+"\n"
+"Detta program distribueras i hopp om att det ska vara användbart, men\n"
+"UTAN NÅGON SOM HELST GARANTI, även utan underförstådd garanti om\n"
+"SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT ÄNDAMÅL. Se GNU General\n"
+"Public License för ytterligare information.\n"
+"\n"
+"Du bör ha fått en kopia av GNU General Public License tillsammans med\n"
+"detta program. Om inte, skriv till Free Software Foundation, Inc.,\n"
+"59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
 
-#, fuzzy
-#~ msgid "unknown bar glyph: `~S'"
-#~ msgstr "okänd klusterstil: \"%s\""
+#: mensural-ligature.cc:153
+#, c-format
+msgid "Mensural_ligature:thickness undefined on flexa %d; assuming 1.4"
+msgstr "Menural_ligature:thickness odefinierad för flexa %d; antar 1.4"
 
-#, fuzzy
-#~ msgid "Extracting fonts to %s..."
-#~ msgstr "kan inte skapa katalog: \"%s\""
+#: mensural-ligature.cc:169
+#, c-format
+msgid "Mensural_ligature:delta-pitch undefined on flexa %d; assuming 0"
+msgstr "Menural_ligature:delta-pitch odefinierad för flexa %d; antar 0"
 
-#, fuzzy
-#~ msgid "Writing %s..."
-#~ msgstr "Skriver \"%s\"..."
+#: mensural-ligature.cc:182
+#, c-format
+msgid "Mensural_ligature:flexa-width undefined on flexa %d; assuming 2.0"
+msgstr "Menural_ligature:flexa-width odefinierad för flexa %d; antar 2.0"
 
-#, fuzzy
-#~ msgid "Writing output file."
-#~ msgstr "Tar bort utdatafilen"
+#: mensural-ligature.cc:215
+msgid "Mensural_ligature:unexpected case fall-through"
+msgstr "Menural_ligature:föll igenom case oväntat"
 
-#, fuzzy
-#~ msgid "Second argument must be pitch list."
-#~ msgstr "Andra argumentet måste vara en symbol"
+#: mensural-ligature.cc:225
+msgid "Mensural_ligature: (join_left == 0)"
+msgstr "Mensural_ligature: (join_left == 0)"
 
-#~ msgid "Have to be in Lyric mode for lyrics"
-#~ msgstr "Måste vara i textläge (Lyric mode) för sångtext"
+#: mensural-ligature-engraver.cc:248 mensural-ligature-engraver.cc:397
+msgid "unexpected case fall-through"
+msgstr "föll igenom case oväntat"
 
-#~ msgid "Expecting string as script definition"
-#~ msgstr "Väntade sträng som skriptdefinition"
+#: mensural-ligature-engraver.cc:259
+msgid "ligature with less than 2 heads -> skipping"
+msgstr "ligature med mindre än 2 huvuden -> skippar"
 
-#~ msgid "Have to be in Note mode for notes"
-#~ msgstr "Måste vara i notläge (Note mode) för noter"
+#: mensural-ligature-engraver.cc:279
+msgid "can not determine pitch of ligature primitive -> skipping"
+msgstr "kan inte bestämma tonhöjd för ligaturprimitiv -> skippar"
 
-#~ msgid "Have to be in Chord mode for chords"
-#~ msgstr "Måste vara i ackordläge (Chord mode) för ackord"
+#: mensural-ligature-engraver.cc:302
+msgid "prime interval within ligature -> skipping"
+msgstr "primintervall inom ligatur -> skippar"
 
-#, fuzzy
-#~ msgid "programming error: "
-#~ msgstr "programmeringsfel: "
+#: mensural-ligature-engraver.cc:312
+msgid "mensural ligature: duration none of L, B, S -> skipping"
+msgstr "mensural ligature: längd ingen av L, B, S -> skippar"
 
-#, fuzzy
-#~ msgid "Programming error: "
-#~ msgstr "programmeringsfel: "
+#: midi-item.cc:148
+#, c-format
+msgid "no such instrument: `%s'"
+msgstr "instrumentet finns inte: \"%s\""
 
-#~ msgid "Cannot switch translators, I'm there already"
-#~ msgstr "Kan inte byta översättare, jag är redan där"
+#: midi-item.cc:238
+msgid "silly duration"
+msgstr "tokig längd"
 
-#, fuzzy
-#~ msgid "Accidental rule must be pair or context-name; Found %s"
-#~ msgstr ""
-#~ "Typsättning av höjning/sänkning måste vara par eller context-name: %s"
+#: midi-item.cc:251
+msgid "silly pitch"
+msgstr "tokig ton"
 
-#~ msgid "I'm one myself"
-#~ msgstr "Jag är en själv"
+#: music-output-def.cc:111
+#, c-format
+msgid "can't find `%s' context"
+msgstr "kan inte hitta omgivningen \"%s\""
 
-#~ msgid "Chord tremolo with %d elements. Must have two elements."
-#~ msgstr "Ackordtremolo med %d element. Måste ha två element."
+#: my-lily-lexer.cc:169
+#, c-format
+msgid "Identifier name is a keyword: `%s'"
+msgstr "Identifierarnamn är ett nyckelord: \"%s\""
 
-#~ msgid "Huh?  Got %d, expected %d characters"
-#~ msgstr "Öh? Fick %d, väntade %d tecken"
+#: my-lily-lexer.cc:191
+#, c-format
+msgid "error at EOF: %s"
+msgstr "fel vid filslut: %s"
 
-#~ msgid "Donnot you want polyphonic voices instead?"
-#~ msgstr "Vill du ha polyfoniska stämmor istället?"
+#: my-lily-parser.cc:44
+msgid "Parsing..."
+msgstr "Tolkar..."
 
-#~ msgid "No volta spanner to end"
-#~ msgstr "Ingen reprisbryggare till slutet"
+#: my-lily-parser.cc:54
+msgid "Braces don't match"
+msgstr "Krullparenteser matchar inte"
 
-#~ msgid "Also have a stopped spanner.  Giving up."
-#~ msgstr "Har också en stoppad bryggare. Ger upp."
+#.
+#. music for the softenon children?
+#.
+#: new-fingering-engraver.cc:143
+msgid "music for the martians."
+msgstr "musik för marsianerna."
 
-#~ msgid "Missing end quote"
-#~ msgstr "Saknat slutcitationstecken"
+#: new-tie-engraver.cc:166 tie-engraver.cc:217
+msgid "lonely tie"
+msgstr "ensam båge"
 
-#~ msgid "EXT"
-#~ msgstr "FMT"
+#: note-collision.cc:340
+msgid "Too many clashing notecolumns.  Ignoring them."
+msgstr "För många krockande notkolumner. Ignorerar dem."
 
-#~ msgid "FIXME: key change merge"
-#~ msgstr "FIXA: tonartsbytessammanslagning"
+#: note-head.cc:127
+#, c-format
+msgid "note head `%s' not found"
+msgstr "nothuvud \"%s\" ej funnet"
 
-#, fuzzy
-#~ msgid "kpathsea cannot find %s file: `%s'"
-#~ msgstr "Kpathsea kan inte hitta TFML-fil \"%s\""
+#: paper-def.cc:96
+#, c-format
+msgid "paper output to `%s'..."
+msgstr "pappersutdata till \"%s\"..."
 
-#, fuzzy
-#~ msgid "kpathsea cannot find file: `%s'"
-#~ msgstr "Kpathsea kan inte hitta TFML-fil \"%s\""
+#: paper-score.cc:78
+#, c-format
+msgid "Element count %d (spanners %d) "
+msgstr "Elementantal %d (bryggare %d) "
 
-#, fuzzy
-#~ msgid "set option, use -e '(ly:option-usage)' for help"
-#~ msgstr "sätt inställningar, använd -e '(ly-option-usage)' för hjälp"
+#: paper-score.cc:83
+msgid "Preprocessing graphical objects..."
+msgstr "Förbehandlar grafiska objekt..."
 
-#, fuzzy
-#~ msgid "EXTs"
-#~ msgstr "FMT"
+#: paper-score.cc:116
+msgid "Outputting Score, defined at: "
+msgstr "Matar ut partitur, definierade vid: "
 
-#, fuzzy
-#~ msgid "generate a preview"
-#~ msgstr "skapa PNG-sidbilder"
+#: parse-scm.cc:79
+msgid "GUILE signaled an error for the expression begining here"
+msgstr "GUILE gave ett fel för uttrycket som börjar här"
 
-#, fuzzy
-#~ msgid "do not generate full pages"
-#~ msgstr "skapa inte bilder"
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_string_  = get_change ()->change_to_id_string_;
+#.
+#: part-combine-music-iterator.cc:139
+#, c-format
+msgid "I'm one myself: `%s'"
+msgstr "Jag är en själv: \"%s\""
 
-#, fuzzy
-#~ msgid "generate DVI"
-#~ msgstr "skapa PS.GZ"
+#: part-combine-music-iterator.cc:142
+#, c-format
+msgid "none of these in my family: `%s'"
+msgstr "ingen av dessa i min familj: \"%s\""
 
-#, fuzzy
-#~ msgid "generate TeX"
-#~ msgstr "skapa PS.GZ"
+#: percent-repeat-engraver.cc:109
+msgid "Don't know how to handle a percent repeat of this length."
+msgstr "Vet inte hur en procentrepris av denna längd ska hanteras."
 
-#, fuzzy
-#~ msgid "kpathsea can not find %s file: `%s'"
-#~ msgstr "Kpathsea kan inte hitta TFML-fil \"%s\""
+#: percent-repeat-engraver.cc:163
+msgid "unterminated percent repeat"
+msgstr "oavslutad procentrepris"
 
-#, fuzzy
-#~ msgid "kpathsea can not find AFM file `%s'"
-#~ msgstr "Kpathsea kan inte hitta TFML-fil \"%s\""
+#: percent-repeat-iterator.cc:65
+msgid "no one to print a percent"
+msgstr "det finns ingen som kan skriva procent"
 
-#, fuzzy
-#~ msgid "kpathsea can not find TFM file: `%s'"
-#~ msgstr "Kpathsea kan inte hitta TFML-fil \"%s\""
+#: performance.cc:51
+msgid "Track ... "
+msgstr "Spår... "
 
-#, fuzzy
-#~ msgid "Converting to `~a.ps'..."
-#~ msgstr "Skriver \"%s\"..."
+#: performance.cc:83
+msgid "Creator: "
+msgstr "Skapare: "
 
-#, fuzzy
-#~ msgid "Run LilyPond, generate printable document."
-#~ msgstr "Kör LilyPond, lägg till titlar, skapa utskrivbart dokument"
+#: performance.cc:103
+msgid "at "
+msgstr "vid "
 
-#~ msgid "print even more output"
-#~ msgstr "skriv ännu mer utdata"
+#: performance.cc:114
+#, c-format
+msgid "from musical definition: %s"
+msgstr "från musikdefinition: %s"
 
-#~ msgid "find pfa fonts used in FILE"
-#~ msgstr "hitta pfa-typsnitt som används i FIL"
+#: performance.cc:169
+#, c-format
+msgid "MIDI output to `%s'..."
+msgstr "MIDI-utdata till \"%s\"..."
 
-#~ msgid "add DIR to LilyPond's search path"
-#~ msgstr "lägg till KATALOG till LilyPonds sökväg"
+#: phrasing-slur-engraver.cc:123
+msgid "unterminated phrasing slur"
+msgstr "oavslutad fraseringsbåge"
 
-# %s är programmets namn
-#~ msgid "keep all output, output to directory %s.dir"
-#~ msgstr "behåll all utdata, utdata till katalogen %s.dir"
+#: phrasing-slur-engraver.cc:141
+msgid "can't find start of phrasing slur"
+msgstr "kan inte hitta start på fraseringsbåge"
 
-#~ msgid "do not run LilyPond"
-#~ msgstr "kör inte LilyPond"
+#: piano-pedal-engraver.cc:235 piano-pedal-engraver.cc:250
+#: piano-pedal-engraver.cc:305 piano-pedal-performer.cc:82
+#, c-format
+msgid "can't find start of piano pedal: `%s'"
+msgstr "kan inte hitta start på pianopedal: \"%s\""
 
-#~ msgid "produce MIDI output only"
-#~ msgstr "skapa enbart MIDI-utdata"
+#: piano-pedal-engraver.cc:410
+msgid "unterminated pedal bracket"
+msgstr "oavslutad pedalklammer"
 
-#~ msgid "generate PDF output"
-#~ msgstr "skapa PDF-utdata"
+#: property-iterator.cc:97
+#, c-format
+msgid "Not a grob name, `%s'."
+msgstr "Inte ett grob-namn, \"%s\"."
 
-#~ msgid "generate PNG page images"
-#~ msgstr "skapa PNG-sidbilder"
+#: rest.cc:139
+#, c-format
+msgid "rest `%s' not found, "
+msgstr "paus \"%s\" hittades inte, "
 
-#~ msgid "generate PS.GZ"
-#~ msgstr "skapa PS.GZ"
+#: rest-collision.cc:199
+msgid "too many colliding rests"
+msgstr "för många krockande pauser"
 
-#~ msgid "change global setting KEY to VAL"
-#~ msgstr "ändra global inställning NYCKEL till VÄRDE"
+#: scm-option.cc:45
+msgid "lilypond -e EXPR means:"
+msgstr "lilypond -e UTTR betyder:"
 
-#~ msgid "LilyPond crashed (signal %d)."
-#~ msgstr "LilyPond kraschade (signal %d)."
+#: scm-option.cc:47
+msgid "  Evalute the Scheme EXPR before parsing any .ly files."
+msgstr "  Evaluera Scheme-uttrycket UTTR innan någon .ly-fil läses in."
 
-#~ msgid "Please submit a bug report to bug-lilypond@gnu.org"
-#~ msgstr "Skicka en buggrapport till bug-lilypond@gnu.org"
+#: scm-option.cc:49
+msgid "  Multiple -e options may be given, they will be evaluated sequentially."
+msgstr "  Flera -e kan ges, de kommer att evalueras i tur och ordning."
 
-#~ msgid "LilyPond failed on an input file (exit status %d)"
-#~ msgstr "LilyPond misslyckades på en indatafil (slutstatus %d)"
+#: scm-option.cc:51
+msgid "  The function ly-set-option allows for access to some internal variables."
+msgstr "  Funktionen ly-set-option ger åtkomst till några interna variabler."
 
-#~ msgid "Continuing..."
-#~ msgstr "Fortsätter..."
+#: scm-option.cc:53
+msgid "Usage: lilypond -e \"(ly-set-option SYMBOL VAL)\""
+msgstr "Användning: lilpond -e \"(ly-set-option SYMBOL VÄRDE)\""
 
-#~ msgid "Analyzing %s..."
-#~ msgstr "Analyserar %s..."
+#: scm-option.cc:55
+msgid "Where SYMBOL VAL pair is any of:"
+msgstr "Där paret SYMBOL VÄRDE är något av:"
 
-#~ msgid "no LilyPond output found for `%s'"
-#~ msgstr "ingen LilyPond-utdata funnen för \"%s\""
+#: scm-option.cc:128
+msgid "Unknown internal option!"
+msgstr "Okänd internt alternativ!"
 
-#~ msgid "LaTeX failed on the output file."
-#~ msgstr "LaTeX misslyckades på utdatafilen."
+#: score.cc:85
+msgid "Interpreting music..."
+msgstr "Tolkar musik..."
 
-#~ msgid ""
-#~ "Trying create PDF, but no PFA fonts found.\n"
-#~ "Using bitmap fonts instead. This will look bad."
-#~ msgstr ""
-#~ "Försöker skapa PDF, men inga PFA-typsnitt hittades.\n"
-#~ "Använder punkttypsnitt istället. Det kommer att se dåligt ut."
+#: score.cc:97
+msgid "Need music in a score"
+msgstr "Behöver musik i partitur"
 
-#~ msgid "pseudo filter"
-#~ msgstr "pseudofilter"
+#. should we? hampers debugging.
+#: score.cc:111
+msgid "Errors found/*, not processing score*/"
+msgstr "Fel funna/*, behandlar inte partitur*/"
 
-#~ msgid "pseudo filter only for single input file"
-#~ msgstr "pseudofilter bara för enstaka indatafil"
+#: score.cc:118
+#, c-format
+msgid "elapsed time: %.2f seconds"
+msgstr "tidsåtgång: %.2f sekunder"
 
-#~ msgid "no files specified on command line"
-#~ msgstr "inga filer angivna på kommandoraden"
+#: score-engraver.cc:99
+#, c-format
+msgid "can't find `%s'"
+msgstr "kan inte hitta \"%s\""
 
-#~ msgid "Running LilyPond failed. Rerun with --verbose for a trace."
-#~ msgstr ""
-#~ "Misslyckades med att köra LilyPond. Kör igen med --verbose för spår."
+#: score-engraver.cc:100
+msgid "Fonts have not been installed properly.  Aborting"
+msgstr "Typsnitten är inte korrekt installerade. Avbryter"
 
-#~ msgid "Failed to make PS file. Rerun with --verbose for a trace."
-#~ msgstr "Misslyckades med att skapa PS-fil. Kör med --verbose för spår."
+#: score-engraver.cc:205
+#, c-format
+msgid "unbound spanner `%s'"
+msgstr "obunden bryggare \"%s\""
 
-# här är det fråga om skrivning till en fil (första parametern är t.ex
-# DVI, LATEX, MIDI, TEX)
-#~ msgid "%s output to <stdout>..."
-#~ msgstr "%s skrivet till <stdout>..."
+#: script-engraver.cc:90
+#, c-format
+msgid "Don't know how to interpret articulation `%s'"
+msgstr "Kan inte tolka artikulering \"%s\""
 
-# här är det fråga om skrivning till en fil (första parametern är t.ex
-# DVI, LATEX, MIDI, TEX)
-#~ msgid "%s output to %s..."
-#~ msgstr "%s skrivet till \"%s\"..."
+#. this shouldn't happen, but let's continue anyway.
+#: separation-item.cc:53 separation-item.cc:101
+msgid "Separation_item:  I've been drinking too much"
+msgstr "Separation_item: Jag har druckit för mycket"
 
-#, fuzzy
-#~ msgid "cannot find file: `%s.%s'"
-#~ msgstr "kan inte hitta fil: \"%s\""
+#: simple-spacer.cc:248
+#, c-format
+msgid "No spring between column %d and next one"
+msgstr "Ingen fjäder mellan kolumn %d och nästa"
 
-#~ msgid " 1998--2005"
-#~ msgstr " 1998-2003"
+#: slur-engraver.cc:141
+msgid "unterminated slur"
+msgstr "oavslutad båge"
 
-#~ msgid "DIM"
-#~ msgstr "DIM"
+#. How to shut up this warning, when Voice_devnull_engraver has
+#. eaten start event?
+#: slur-engraver.cc:159
+msgid "can't find start of slur"
+msgstr "kan inte hitta start på båge"
 
-#~ msgid "default fontsize for music.  DIM is assumed to be in points"
-#~ msgstr "standardtypsnittsstorlek för musik. DIM anges i punkter"
+#: source-file.cc:67
+#, c-format
+msgid "Huh?  Got %d, expected %d characters"
+msgstr "Öh? Fick %d, väntade %d tecken"
 
-#~ msgid "deprecated, use --default-music-fontsize"
-#~ msgstr "föråldrad, använd --default-music-fontsize"
+#: spacing-spanner.cc:379
+#, c-format
+msgid "Global shortest duration is %s\n"
+msgstr "Globalt kortaste längd är %s\n"
 
-#~ msgid "OPT"
-#~ msgstr "OPT"
+#: spring-smob.cc:32
+#, c-format
+msgid "#<spring smob d= %f>"
+msgstr "#<spring smob d= %f>"
 
-#~ msgid "pass OPT quoted to the lilypond command line"
-#~ msgstr "skicka OPT till lilyponds kommandorad"
+#: staff-symbol.cc:61
+msgid "staff symbol: indentation yields beyond end of line"
+msgstr "staff symbol: indentering ger vika innan radslut"
 
-#~ msgid ""
-#~ "force fontsize for all inline lilypond. DIM is assumed be to in points"
-#~ msgstr ""
-#~ "tvinga typsnittsstorlek för all inbäddad lilypond. DIM anger i punkter"
+#: stem.cc:118
+msgid "Weird stem size; check for narrow beams"
+msgstr "Konstig skaftstorlek; kolla efter smala balkar"
 
-#~ msgid "deprecated, use --force-music-fontsize"
-#~ msgstr "föråldrad, använd --force-music-fontsize"
+#: stem.cc:611
+#, c-format
+msgid "flag `%s' not found"
+msgstr "flaggan \"%s\" hittades ej"
 
-#~ msgid "include path"
-#~ msgstr "sökväg för inkluderade filer"
+#: stem.cc:624
+#, c-format
+msgid "flag stroke `%s' not found"
+msgstr "flaggstrecket \"%s\" hittades inte"
 
-#~ msgid "write dependencies"
-#~ msgstr "skriv beroenden"
+#: stem-engraver.cc:96
+msgid "tremolo duration is too long"
+msgstr "tremololängd är för lång"
 
-#~ msgid "PREF"
-#~ msgstr "PREF"
+#: stem-engraver.cc:124
+#, c-format
+msgid "Adding note head to incompatible stem (type = %d)"
+msgstr "Lägger till nothuvud till inkompatibel båge (typ = %d)"
 
-#~ msgid "prepend PREF before each -M dependency"
-#~ msgstr "lägg till PREF före varje beroende angett med -M"
+#: stem-engraver.cc:125
+msgid "Don't you want polyphonic voices instead?"
+msgstr "Vill du ha polyfoniska stämmor istället?"
 
-#~ msgid "do not run lilypond"
-#~ msgstr "kör inte lilypond"
+#: streams.cc:34
+#, c-format
+msgid "can't create directory: `%s'"
+msgstr "kan inte skapa katalog: \"%s\""
 
-#~ msgid "strip all lilypond blocks from output"
-#~ msgstr "ta bort alla lilypond-block från utdata"
+#: streams.cc:48
+msgid "Error syncing file (disk full?)"
+msgstr "Fel vid synkning av fil (disken full?)"
 
-#~ msgid "filename main output file"
-#~ msgstr "filnamn på huvudutdatafilen"
+#: system.cc:125
+#, c-format
+msgid "Element count %d."
+msgstr "Elementantal %d."
 
-#~ msgid "where to place generated files"
-#~ msgstr "var genererade filer ska läggas"
+#: system.cc:372
+#, c-format
+msgid "Grob count %d "
+msgstr "Elementantal %d "
 
-# Förklaring till --verbose (borde vara längre)
-#~ msgid "verbose"
-#~ msgstr "utförlig utdata"
+#: system.cc:386
+msgid "Calculating line breaks..."
+msgstr "Beräknar radbrytningar..."
 
-#~ msgid "write Makefile dependencies for every input file"
-#~ msgstr "skriv Makefile-beroenden för varje indatafil"
+#: text-spanner-engraver.cc:81
+msgid "can't find start of text spanner"
+msgstr "kan inte hitta start på textbryggare"
 
-#~ msgid "write ouput to FILE"
-#~ msgstr "skriv utdata till FIL"
+#: text-spanner-engraver.cc:95
+msgid "already have a text spanner"
+msgstr "har redan en textbryggare"
 
-#~ msgid "use pdflatex to generate a PDF output"
-#~ msgstr "använd pdflatex för att generera PDF-utdata"
+#: text-spanner-engraver.cc:164
+msgid "unterminated text spanner"
+msgstr "oavslutad textbryggare"
 
-#~ msgid "make HTML file with links to all output"
-#~ msgstr "skapa en HTML-fil som länkar till all utdata"
+#: tfm.cc:83
+#, c-format
+msgid "can't find ascii character: %d"
+msgstr "kan inte hitta ASCII-tecken: %d"
 
-#~ msgid "invalid value: `%s'"
-#~ msgstr "ogiltigt värde: \"%s\""
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#: tfm-reader.cc:108
+#, c-format
+msgid "TFM header of `%s' has only %u word (s)"
+msgstr "TFM-rubrik i \"%s\" har bara %u ord"
 
-#~ msgid "Writing HTML menu `%s'"
-#~ msgstr "Skriver HTML-meny \"%s\""
+#: tfm-reader.cc:142
+#, c-format
+msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
+msgstr "%s: TFM-fil har %u parametrar, vilket är mer än de %u jag kan hantera"
 
-#~ msgid "Running LaTeX falied. Rerun with --verbose for a trace."
-#~ msgstr "Misslyckades med att köra LaTeX. Kör med --verbose för spår."
+#: tie-performer.cc:159
+msgid "No ties were created!"
+msgstr "Inga bågar skapades!"
 
-#~ msgid " 2001--2003"
-#~ msgstr " 2001-2003"
+#: time-scaled-music-iterator.cc:25
+msgid "no one to print a tuplet start bracket"
+msgstr "det finns ingen som kan skriva en starthake för tupel"
 
-#~ msgid ""
-#~ "\n"
-#~ "Distributed under terms of the GNU General Public License. It comes with\n"
-#~ "NO WARRANTY."
-#~ msgstr ""
-#~ "\n"
-#~ "Distribueras under GNU General Public License.\n"
-#~ "INGEN GARANTI ges för programmet."
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#: time-signature.cc:87
+#, c-format
+msgid "time signature symbol `%s' not found; reverting to numbered style"
+msgstr "tidssignatursymbol \"%s\" hittades inte: återgår till numrerad stil"
 
-#~ msgid "programming error: %s (Continuing; cross thumbs)\n"
-#~ msgstr " programmeringsfel: %s (Fortsätter, håll tummarna)\n"
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#: time-signature-engraver.cc:57
+#, c-format
+msgid "Found strange time signature %d/%d."
+msgstr "Hittade underlig tidssignatur %d/%d"
 
-#~ msgid "Symbol is not a parent context: %s. Ignored"
-#~ msgstr "Symbol är inte en föräldraomgivning: %s. Ignoreread"
+#: translator-ctors.cc:53
+#, c-format
+msgid "unknown translator: `%s'"
+msgstr "okänd översättare: \"%s\""
 
-#~ msgid "Beam has less than two stems. Removing beam."
-#~ msgstr "Balk har mindre än två skaft. Tar bort balk."
+#: translator-def.cc:105
+msgid "Program has no such type"
+msgstr "Programmet har ingen sådan typ"
 
-#~ msgid ""
-#~ "Not sure that we can find a nice beam slope (no viable initial "
-#~ "configuration found)."
-#~ msgstr ""
-#~ "Inte säker på att vi kan hitta en bra balklutning (ingen passande "
-#~ "initialkonfiguration funnen)."
+#: translator-def.cc:111
+#, c-format
+msgid "Already contains: `%s'"
+msgstr "Innehåller redan: \"%s\""
 
-#~ msgid "NaN"
-#~ msgstr "-"
+#: translator-def.cc:112
+#, c-format
+msgid "Not adding translator: `%s'"
+msgstr "Lägger inte till översättare: \"%s\""
 
-#~ msgid ""
-#~ "Nothing to connect extender to on the left.  Ignoring extender event."
-#~ msgstr ""
-#~ "Det finns inget att koppla utökaren mot till vänster. Ignorerar "
-#~ "utökarhändelse."
+#: translator-def.cc:229
+#, c-format
+msgid "can't find: `%s'"
+msgstr "kan inte hitta: \"%s\""
 
-#~ msgid ""
-#~ "Skipped something?\n"
-#~ "Grob %s ended before I expected it to end."
-#~ msgstr ""
-#~ "Skippade något?\n"
-#~ "Grob %s slutade innan jag förväntade det."
+#: translator-group.cc:158
+#, c-format
+msgid "can't find or create `%s' called `%s'"
+msgstr "kan inte hitta eller skapa \"%s\" kallad \"%s\""
 
-#~ msgid "Nothing to connect hyphen to on the left.  Ignoring hyphen event."
-#~ msgstr ""
-#~ "Det finns inget att koppla bindestrecket mot till vänster.  Ignorerar "
-#~ "bindestreckshändelse."
+#: translator-group.cc:230
+#, c-format
+msgid "can't find or create: `%s'"
+msgstr "kan inte hitta eller skapa: \"%s\""
 
-#~ msgid "Score contains errors; will not process it"
-#~ msgstr "Partitur innehåller fel; kommer inte behandla det"
+#: vaticana-ligature.cc:49
+msgid "ascending vaticana style flexa"
+msgstr "ökande vatikan-stil-flexa"
 
-#~ msgid "Now processing: `%s'"
-#~ msgstr "Behandlar nu: \"%s\""
+#: vaticana-ligature.cc:219
+msgid "Vaticana_ligature:thickness undefined; assuming 1.4"
+msgstr "Vaticana_ligature:thickness odefinierad; antar 1.4"
 
-#~ msgid ""
-#~ "round filled box horizontal extent smaller than blot; decreasing blot"
-#~ msgstr ""
-#~ "horisontell utbredning för rund fylld box mindre än blot; minskar blot"
+#: vaticana-ligature.cc:233
+msgid "Vaticana_ligature:x-offset undefined; assuming 0.0"
+msgstr "Vaticana_ligature:x-offset odefinierad; antar 0.0"
 
-#~ msgid "round filled box vertical extent smaller than blot; decreasing blot"
-#~ msgstr "vertikal utbredning för rund fylld box mindre än blot; minskar blot"
+#: vaticana-ligature.cc:258
+msgid "Vaticana_ligature: (delta_pitch == 0)"
+msgstr "Vaticana_ligature: (delta_pitch == 0)"
 
-#~ msgid "lyrics found without any matching notehead"
-#~ msgstr "sångtext hittad utan något matchande nothuvud"
+#: vaticana-ligature.cc:271
+msgid "Vaticana_ligature:delta-pitch -> ignoring join"
+msgstr "Vaticana_ligature:delta_pitch -> ignorerar join"
 
-#~ msgid "Huh? Melismatic note found to have associated lyrics."
-#~ msgstr "Öh? Melismatisk not har tillhörande sångtext."
+#: vaticana-ligature-engraver.cc:477
+#, c-format
+msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr=%ul"
+msgstr "Vaticana_ligature_engraver: sätter `spacing-increment = %f': ptr=%ul"
 
-#~ msgid "use output format EXT"
-#~ msgstr "använd utdataformat FMT"
+#: volta-engraver.cc:112
+msgid "No volta spanner to end"
+msgstr "Ingen reprisbryggare till slutet"
 
-#~ msgid "prepend DIR to dependencies"
-#~ msgstr "lägg till KATALOG efter beroenden"
+#: volta-engraver.cc:123
+msgid "Already have a volta spanner.  Stopping that one prematurely."
+msgstr "Har redan en reprisbryggare. Stoppar den tidigare."
 
-#~ msgid "inhibit file output naming and exporting"
-#~ msgstr "hindra namngivning av filutdata och exportering"
+#: volta-engraver.cc:127
+msgid "Also have a stopped spanner.  Giving up."
+msgstr "Har också en stoppad bryggare. Ger upp."
 
-#~ msgid ""
-#~ "LilyPond is a music typesetter.  It produces beautiful sheet music\n"
-#~ "using a high level description file as input.  LilyPond is part of \n"
-#~ "the GNU Project.\n"
-#~ msgstr ""
-#~ "LilyPond är en musiktypsättare. Den producerar vackra noter från en\n"
-#~ "högnivåbeskrivning av musiken i en fil. LilyPond är en del av\n"
-#~ "GNU-projektet.\n"
+#: parser.yy:480
+msgid "Identifier should have alphabetic characters only"
+msgstr "Identifierare ska bara innehålla alfabetiska tecken"
 
-#~ msgid "GNU LilyPond -- The music typesetter"
-#~ msgstr "GNU Lilypond -- Musiktypsättaren"
+#: parser.yy:779
+msgid "More alternatives than repeats.  Junking excess alternatives."
+msgstr "Fler alternativ än repriser. Slänger överblivna alternativ."
 
-#~ msgid "Mensural_ligature:thickness undefined on flexa %d; assuming 1.4"
-#~ msgstr "Menural_ligature:thickness odefinierad för flexa %d; antar 1.4"
+#: parser.yy:861 parser.yy:868
+msgid "\applycontext takes function argument"
+msgstr ""
 
-#~ msgid "Mensural_ligature:delta-pitch undefined on flexa %d; assuming 0"
-#~ msgstr "Menural_ligature:delta-pitch odefinierad för flexa %d; antar 0"
+#: parser.yy:877
+msgid "Second argument must be a symbol"
+msgstr "Andra argumentet måste vara en symbol"
 
-#~ msgid "Mensural_ligature:flexa-width undefined on flexa %d; assuming 2.0"
-#~ msgstr "Menural_ligature:flexa-width odefinierad för flexa %d; antar 2.0"
+#: parser.yy:882
+msgid "First argument must be a procedure taking one argument"
+msgstr "Första argumentet måste vara en procedur som tar 1 argument"
 
-#~ msgid "silly duration"
-#~ msgstr "tokig längd"
+#: parser.yy:1009
+msgid "\apply takes function argument"
+msgstr ""
 
-#~ msgid "paper output to `%s'..."
-#~ msgstr "pappersutdata till \"%s\"..."
+#: parser.yy:1501
+msgid "Expecting string as script definition"
+msgstr "Väntade sträng som skriptdefinition"
 
-#~ msgid "Outputting Score, defined at: "
-#~ msgstr "Matar ut partitur, definierade vid: "
+#: parser.yy:1598
+msgid "Expecting musical-pitch value"
+msgstr "Väntade notvärde"
 
-#~ msgid "I'm one myself: `%s'"
-#~ msgstr "Jag är en själv: \"%s\""
+#: parser.yy:1609
+msgid "Must have duration object"
+msgstr "Måste ha längdobjekt"
 
-#~ msgid "none of these in my family: `%s'"
-#~ msgstr "ingen av dessa i min familj: \"%s\""
+#: parser.yy:1618 parser.yy:1626
+msgid "Have to be in Lyric mode for lyrics"
+msgstr "Måste vara i textläge (Lyric mode) för sångtext"
 
-#~ msgid "from musical definition: %s"
-#~ msgstr "från musikdefinition: %s"
+#: parser.yy:1798 parser.yy:1853
+#, c-format
+msgid "not a duration: %d"
+msgstr "inte en längd: %d"
 
-#~ msgid "cannot find start of phrasing slur"
-#~ msgstr "kan inte hitta start på fraseringsbåge"
+#: parser.yy:1949
+msgid "Have to be in Note mode for notes"
+msgstr "Måste vara i notläge (Note mode) för noter"
 
-#~ msgid "unterminated pedal bracket"
-#~ msgstr "oavslutad pedalklammer"
+#: parser.yy:2032
+msgid "Have to be in Chord mode for chords"
+msgstr "Måste vara i ackordläge (Chord mode) för ackord"
 
-#~ msgid "Where SYMBOL VAL pair is any of:"
-#~ msgstr "Där paret SYMBOL VÄRDE är något av:"
+#: parser.yy:2171
+msgid "need integer number arg"
+msgstr "behöver heltalsargument"
 
-#~ msgid "unbound spanner `%s'"
-#~ msgstr "obunden bryggare \"%s\""
+#: parser.yy:2316
+msgid "Suspect duration found following this beam"
+msgstr "Misstänkt längd hittad efter denna balk"
 
-#~ msgid "#<spring smob d= %f>"
-#~ msgstr "#<spring smob d= %f>"
+#: lexer.ll:186
+msgid "EOF found inside a comment"
+msgstr "filslut hittat inuti en kommentar"
 
-#~ msgid "staff symbol: indentation yields beyond end of line"
-#~ msgstr "staff symbol: indentering ger vika innan radslut"
+#: lexer.ll:200
+msgid "\\maininput disallowed outside init files"
+msgstr "\\maininput förbjudet utanför init-filer"
 
-#~ msgid "Error syncing file (disk full?)"
-#~ msgstr "Fel vid synkning av fil (disken full?)"
+#: lexer.ll:224
+#, c-format
+msgid "wrong or undefined identifier: `%s'"
+msgstr "felaktig eller odefinierad identifierare: \"%s\""
 
-#~ msgid "No ties were created!"
-#~ msgstr "Inga bågar skapades!"
+#. backup rule
+#: lexer.ll:233
+msgid "Missing end quote"
+msgstr "Saknat slutcitationstecken"
 
-#~ msgid "Already contains: `%s'"
-#~ msgstr "Innehåller redan: \"%s\""
+#. backup rule
+#: lexer.ll:255 lexer.ll:259
+msgid "white expected"
+msgstr "väntade tomrum"
 
-#~ msgid "Not adding translator: `%s'"
-#~ msgstr "Lägger inte till översättare: \"%s\""
+#: lexer.ll:268
+msgid "Can't evaluate Scheme in safe mode"
+msgstr "Kan inte evaluera Scheme i säkert läge"
 
-#~ msgid "Vaticana_ligature:thickness undefined; assuming 1.4"
-#~ msgstr "Vaticana_ligature:thickness odefinierad; antar 1.4"
+#: lexer.ll:397 lexer.ll:487
+msgid "Brace found at end of lyric.  Did you forget a space?"
+msgstr "Krullparentes funnen i slutet på sångtext. Glömde du ett mellanslag?"
 
-#~ msgid "Vaticana_ligature:delta-pitch -> ignoring join"
-#~ msgstr "Vaticana_ligature:delta_pitch -> ignorerar join"
+#: lexer.ll:574
+#, c-format
+msgid "invalid character: `%c'"
+msgstr "ogiltigt tecken: \"%c\""
 
-#~ msgid "First argument must be a procedure taking one argument"
-#~ msgstr "Första argumentet måste vara en procedur som tar 1 argument"
+#: lexer.ll:651
+#, c-format
+msgid "unknown escaped string: `\\%s'"
+msgstr "okänd \"escaped\" sträng: \"\\%s\""
 
-#~ msgid "Expecting musical-pitch value"
-#~ msgstr "Väntade notvärde"
+#: lexer.ll:742
+#, c-format
+msgid "Incorrect lilypond version: %s (%s, %s)"
+msgstr "Felaktig lilypond-version: %s (%s, %s)"
 
-#~ msgid "Must have duration object"
-#~ msgstr "Måste ha längdobjekt"
+#: lexer.ll:743
+msgid "Consider updating the input with the convert-ly script"
+msgstr "Fundera på att uppdatera indata med skriptet \"convert-ly\""
 
 #~ msgid "Generate .dvi with LaTeX for LilyPond"
 #~ msgstr "Generera .dvi med LaTeX för LilyPond"
@@ -3044,9 +2367,15 @@ msgstr "LaTeX misslyckades."
 #~ msgid "fetch and build URL [%s]"
 #~ msgstr "hämta och bygg URL [%s]"
 
+#~ msgid "Listing `%s'..."
+#~ msgstr "Listar \"%s\"..."
+
 #~ msgid "latest is: %s"
 #~ msgstr "senaste är: %s"
 
+#~ msgid "relax, %s is up to date"
+#~ msgstr "lugn, %s är senaste versionen"
+
 #~ msgid "Fetching `%s'..."
 #~ msgstr "Hämtar \"%s\"..."
 
@@ -3057,12 +2386,18 @@ msgstr "LaTeX misslyckades."
 #~ msgstr "EOF i en sträng"
 
 # det handlar om mmap här
-#~ msgid "cannot map file"
+#~ msgid "can't map file"
 #~ msgstr "kan inte göra \"mmap\" på filen"
 
 #~ msgid "<stdin>"
 #~ msgstr "<stdin>"
 
+#~ msgid "programming error: "
+#~ msgstr "programmeringsfel: "
+
+#~ msgid "can't find start of beam"
+#~ msgstr "kan inte hitta start på balk"
+
 #~ msgid "weird beam vertical offset"
 #~ msgstr "underligt vertikalt avstånd för balk"
 
@@ -3106,6 +2441,9 @@ msgstr "LaTeX misslyckades."
 #~ msgid "ly_music_name (): Not a music expression"
 #~ msgstr "ly_music_name (): Inte ett musikuttryck"
 
+#~ msgid "writing header field `%s' to `%s'..."
+#~ msgstr "skriver rubrikfält \"%s\" till \"%s\"..."
+
 #~ msgid "Pitch arguments out of range"
 #~ msgstr "Tonargument utanför intervallet"
 
@@ -3122,6 +2460,9 @@ msgstr "LaTeX misslyckades."
 #~ msgid "too many notes for rest collision"
 #~ msgstr "för många toner för pauskrock"
 
+#~ msgid "Scheme options:"
+#~ msgstr "Scheme-alternativ:"
+
 #~ msgid "Putting slur over rest.  Ignoring."
 #~ msgstr "Sätter båge över paus. Ignorerar."
 
@@ -3131,12 +2472,8 @@ msgstr "LaTeX misslyckades."
 #~ msgid "Text_spanner too small"
 #~ msgstr "Textbryggare för liten"
 
-#~ msgid ""
-#~ "Cannot find property type-check for `%s'.  Perhaps you made a typing "
-#~ "error? Doing assignment anyway."
-#~ msgstr ""
-#~ "Kan inte hitta egenskapstypkontroll för \"%s\". Kanske har du gjort ett "
-#~ "typfel? Gör tilldelning i alla fall."
+#~ msgid "Can't find property type-check for `%s'.  Perhaps you made a typing error? Doing assignment anyway."
+#~ msgstr "Kan inte hitta egenskapstypkontroll för \"%s\". Kanske har du gjort ett typfel? Gör tilldelning i alla fall."
 
 #~ msgid "ly-get-trans-property: expecting a Translator_group argument"
 #~ msgstr "ly-get-trans-property: väntade ett Translator_group-argument"
@@ -3144,7 +2481,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "Expecting %d arguments"
 #~ msgstr "Väntade %d argument"
 
-#~ msgid "Cannot specify direction for this request"
+#~ msgid "Can't specify direction for this request"
 #~ msgstr "Kan inte ange riktning för denna förfrågan"
 
 #~ msgid "Oldest supported input version: %s"
@@ -3153,9 +2490,21 @@ msgstr "LaTeX misslyckades."
 #~ msgid "#32 in quarter: %d"
 #~ msgstr "#32 i fjärdedel: %d"
 
+#~ msgid "LY output to `%s'..."
+#~ msgstr "LY-utdata till \"%s\"..."
+
 #~ msgid "track %d:"
 #~ msgstr "spår %d:"
 
+#~ msgid "Processing..."
+#~ msgstr "Behandlar..."
+
+#~ msgid "Creating voices..."
+#~ msgstr "Skapar stämmor..."
+
+#~ msgid "track "
+#~ msgstr "spår "
+
 #~ msgid "NOT Filtering tempo..."
 #~ msgstr "Filtrerar INTE tempo..."
 
@@ -3194,7 +2543,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "enable debugging output"
 #~ msgstr "slå på felsökningsutdata"
 
-#~ msgid "do not output tuplets, double dots or rests, smallest is 32"
+#~ msgid "don't output tuplets, double dots or rests, smallest is 32"
 #~ msgstr "mata inte ut tupler, dubbelpunkteringar eller pauser, minsta är 32"
 
 #~ msgid "set FILE as default output"
@@ -3203,15 +2552,18 @@ msgstr "LaTeX misslyckades."
 #~ msgid "be quiet"
 #~ msgstr "var tyst"
 
-#~ msgid "do not output rests or skips"
+#~ msgid "don't output rests or skips"
 #~ msgstr "mata inte ut pauser eller hopp"
 
 #~ msgid "set smallest duration"
 #~ msgstr "ställ in minsta längd"
 
-#~ msgid "do not timestamp the output"
+#~ msgid "don't timestamp the output"
 #~ msgstr "tidsstämpla inte utdata"
 
+#~ msgid "be verbose"
+#~ msgstr "var utförlig"
+
 #~ msgid "assume no double dotted notes"
 #~ msgstr "anta inga dubbelpunkterade noter"
 
@@ -3251,7 +2603,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "invalid number of tracks"
 #~ msgstr "ogiltigt antal spår"
 
-#~ msgid "cannot handle non-metrical time"
+#~ msgid "can't handle non-metrical time"
 #~ msgstr "kan inte hantera icke-metrisk tid"
 
 #~ msgid "Junking note-end event: channel = %d, pitch = %d"
index 127059a46807a6eef80bd35960b9bf2ba073727c..4d1e4f1490bb9f9bec8f6a935155c40f3c76972b 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 2.3.21\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-12-24 10:40+0100\n"
+"POT-Creation-Date: 2004-10-09 03:01+0200\n"
 "PO-Revision-Date: 2005-03-14 04:59+0200\n"
 "Last-Translator: Olcay Yıldırım <olcayyildirim2003@yahoo.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -16,1000 +16,1124 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.9.1\n"
 
-#: convertrules.py:12
-#, python-format
-msgid "Not smart enough to convert %s"
-msgstr ""
-
-#: convertrules.py:13
-msgid "Please refer to the manual for details, and update manually."
-msgstr ""
-
-#: convertrules.py:14
-#, python-format
-msgid "%s has been replaced by %s"
-msgstr ""
-
-#: convertrules.py:2398
-msgid "LilyPond source must be UTF-8"
-msgstr ""
-
-#: convertrules.py:2401
-msgid "Try the texstrings backend"
-msgstr ""
-
-#: convertrules.py:2404
-#, python-format
-msgid "Do something like: %s"
-msgstr ""
-
-#: convertrules.py:2407
-msgid "Or save as UTF-8 in your editor"
-msgstr ""
-
-#: fontextract.py:26
-#, fuzzy, python-format
-msgid "Scanning %s"
-msgstr "uyarı: %s"
-
-#: fontextract.py:71
-#, python-format
-msgid "Extracted %s"
-msgstr ""
-
-#: fontextract.py:86
-#, python-format
-msgid "Writing fonts to %s"
-msgstr ""
-
-#: lilylib.py:85 lilylib.py:136
-#, python-format
-msgid "Invoking `%s'"
-msgstr "`%s' çağrılıyor"
-
-#: lilylib.py:87 lilylib.py:138
-#, python-format
-msgid "Running %s..."
-msgstr "%s çalıştırılıyor..."
+#: lilylib.py:62
+msgid "lilylib module"
+msgstr "lilylib birimi"
 
-#: lilylib.py:203
-#, fuzzy, python-format
-msgid "Usage: %s"
-msgstr "uyarı: %s"
-
-#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
-#, fuzzy, python-format
-msgid "%s [OPTION]... FILE"
-msgstr "Kullanım: %s (SEÇENEKLER)... DOSYA"
+#: lilylib.py:65 lilypond-book.py:91 lilypond-latex.py:109 midi2ly.py:100
+#: mup2ly.py:75 ps2png.py:40 main.cc:131 lily/main.cc:131
+msgid "print this help"
+msgstr "bu yardımı yazdır"
 
-#: abc2ly.py:1351
+#: lilylib.py:112 midi2ly.py:136 mup2ly.py:130
 #, python-format
-msgid ""
-"abc2ly converts ABC music files (see\n"
-"%s) to LilyPond input."
-msgstr ""
-
-#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "çıktıyı DOSYAya yaz"
-
-#: abc2ly.py:1357
-msgid "be strict about succes"
-msgstr ""
-
-#: abc2ly.py:1359
-msgid "preserve ABC's notion of beams"
-msgstr ""
-
-#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
-#: midi2ly.py:911 musicxml2ly.py:505
-#, fuzzy
-msgid "Report bugs via"
-msgstr ""
-"Yazılım hatalarını %s adresine,\n"
-"çeviri hatalarını <gnu-tr@belgeler.org> adresine bildirin."
+msgid "Copyright (c) %s by"
+msgstr "Telif hakkı (c) %s tarafından"
 
-#: convert-ly.py:41
-msgid ""
-"Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version."
-msgstr ""
+#: lilylib.py:116 midi2ly.py:141 mup2ly.py:135
+msgid "Distributed under terms of the GNU General Public License."
+msgstr "GNU Genel Kamu Lisansı şartları uyarınca dağıtılır."
 
-#: convert-ly.py:43 lilypond-book.py:73
-#, fuzzy
-msgid "Examples:"
-msgstr "Örnek:"
+#: lilylib.py:118 midi2ly.py:142 mup2ly.py:136
+msgid "It comes with NO WARRANTY."
+msgstr "HİÇBİR GARANTİ  ile gelmez."
 
-#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
+#: lilylib.py:125 warn.cc:24
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "uyarı: %s"
 
-#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
+#: lilylib.py:128 warn.cc:30
 #, c-format, python-format
 msgid "error: %s"
 msgstr "hata: %s"
 
-#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
-msgid "Distributed under terms of the GNU General Public License."
-msgstr "GNU Genel Kamu Lisansı şartları uyarınca dağıtılır."
-
-#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
-msgid "It comes with NO WARRANTY."
-msgstr "HİÇBİR GARANTİ  ile gelmez."
-
-#: convert-ly.py:86 convert-ly.py:106
-msgid "VERSION"
-msgstr ""
-
-#: convert-ly.py:88
-msgid "start from VERSION [default: \\version found in file]"
-msgstr ""
-
-#: convert-ly.py:91
-msgid "edit in place"
-msgstr ""
+#: lilylib.py:132
+#, python-format
+msgid "Exiting (%d)..."
+msgstr "Mevcut (%d)..."
 
-#: convert-ly.py:94
-msgid "do not add \\version command if missing"
-msgstr ""
+#: lilylib.py:192 midi2ly.py:223 mup2ly.py:219
+#, python-format
+msgid "Usage: %s [OPTIONS]... FILE"
+msgstr "Kullanım: %s (SEÇENEKLER)... DOSYA"
 
-#: convert-ly.py:100
-msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
-msgstr ""
+#: lilylib.py:196 midi2ly.py:227 mup2ly.py:223 main.cc:200 lily/main.cc:200
+#, c-format
+msgid "Options:"
+msgstr "Seçenekler:"
 
-#: convert-ly.py:105
-msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
+#: lilylib.py:200 midi2ly.py:231 mup2ly.py:227 main.cc:204 lily/main.cc:204
+#, c-format, python-format
+msgid "Report bugs to %s."
 msgstr ""
+"Yazılım hatalarını %s adresine,\n"
+"çeviri hatalarını <gnu-tr@belgeler.org> adresine bildirin."
 
-#: convert-ly.py:153
-msgid "Applying conversion: "
-msgstr ""
+#: lilylib.py:220
+#, python-format
+msgid "Binary %s has version %s, looking for version %s"
+msgstr " %s ikilisi,  %s sürümünde, %s sürümü aranıyor"
 
-#: convert-ly.py:166
-msgid "Error while converting"
-msgstr ""
+#: lilylib.py:254
+#, python-format
+msgid "Opening pipe `%s'"
+msgstr "`%s' veri yolu açılıyor"
 
-#: convert-ly.py:168
-msgid "Stopping at last succesful rule"
-msgstr ""
+#: lilylib.py:269 lilypond-book.py:812
+#, python-format
+msgid "`%s' failed (%d)"
+msgstr "`%s' başarısız (%d)"
 
-#: convert-ly.py:190
-#, fuzzy, python-format
-msgid "Processing `%s'... "
-msgstr "`%s' işleniyor..."
+#: lilylib.py:274 lilylib.py:333 lilypond-book.py:813 lilypond-latex.py:466
+msgid "The error log is as follows:"
+msgstr "Hata günlüğü aşağıdaki gibidir:"
 
-#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
-#, c-format, python-format
-msgid "cannot open file: `%s'"
-msgstr "dosya açılamıyor: `%s'"
+#: lilylib.py:305 midi2ly.py:259 mup2ly.py:255
+#, python-format
+msgid "Invoking `%s'"
+msgstr "`%s' çağrılıyor"
 
-#: convert-ly.py:284
-#, fuzzy, python-format
-msgid "cannot determine version for `%s'.  Skipping"
-msgstr "%s için biçem saptanamıyor"
+#: lilylib.py:307
+#, python-format
+msgid "Running %s..."
+msgstr "%s çalıştırılıyor..."
 
-#: etf2ly.py:1196
-#, fuzzy, python-format
-msgid "%s [OPTION]... ETF-FILE"
-msgstr "Kullanım: %s (SEÇENEKLER)... DOSYA"
+#: lilylib.py:326
+#, python-format
+msgid "`%s' failed (%s)"
+msgstr "`%s' başarısız (%s)"
 
-#: etf2ly.py:1198
-msgid ""
-"Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
-"file."
-msgstr ""
+#: lilylib.py:329 midi2ly.py:265 mup2ly.py:263
+msgid "(ignored)"
+msgstr "(yok sayıldı)"
 
-#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
-msgid "FILE"
-msgstr "DOSYA"
+#: lilylib.py:347 midi2ly.py:275 mup2ly.py:273
+#, python-format
+msgid "Cleaning %s..."
+msgstr "%s temizleniyor..."
 
-#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
-msgid "show warranty and copyright"
-msgstr "garantiyi ve telif hakkını göster"
+#: lilylib.py:518
+msgid "Removing output file"
+msgstr "Çıktı dosyası kaldırılıyor"
 
-#  # FIXME
-#  # do -P or -p by default?
-#  #help_summary = _ ("Run LilyPond using LaTeX for titling")
-#: lilypond-book.py:71
-#, fuzzy
+#: lilypond-book.py:76
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
-msgstr ""
-"LilyPond'un küçük parçalarını karma HTML, LaTeX ya da texinfo belgesinde işle"
-
-#: lilypond-book.py:78
-msgid "BOOK"
+"Process LilyPond snippets in hybrid HTML, LaTeX or texinfo document.\n"
+"Example usage:\n"
+"\n"
+"   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
+"   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
+"   lilypond-book --process='lilypond -I include' BOOK\n"
+"\n"
 msgstr ""
+"LilyPond'un küçük  parçalarını karma HTML, LaTeX ya da texinfo belgelerinde\n"
+"çalıştırır. \n"
+" Örnek kullanım:\n"
+"\n"
+"    lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" KİTAP\n"
+"    lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\"KİTAP\n"
+"    lilypond-book --process='lilypond -I include' KİTAP\n"
+"\n"
 
-#: lilypond-book.py:87
-#, python-format
-msgid "Exiting (%d)..."
-msgstr "Mevcut (%d)..."
+#  Bug in option parser: --output=foe is taken as an abbreviation
+#  for --output-format.
+#. Bug in option parser: --output=foe is taken as an abbreviation
+#. for --output-format.
+#. Bug in option parser: --output=foe is taken as an abbreviation
+#. for --output-format.
+#. Bug in option parser: --output=foe is taken as an abbreviation
+#. for --output-format.
+#. Bug in option parser: --output=foe is taken as an abbreviation
+#. for --output-format.
+#. Bug in option parser: --output=foe is taken as an abbreviation
+#. for --output-format.
+#. Bug in option parser: --output=foe is taken as an abbreviation
+#. for --output-format.
+#. Bug in option parser: --output=foe is taken as an abbreviation
+#. for --output-format.
+#. Bug in option parser: --output=foe is taken as an abbreviation
+#. for --output-format.
+#: lilypond-book.py:89 main.cc:130 lily/main.cc:130
+msgid "EXT"
+msgstr "EXT"
 
-#: lilypond-book.py:119
-#, python-format
-msgid "Copyright (c) %s by"
-msgstr "Telif hakkı (c) %s tarafından"
+#: lilypond-book.py:89
+msgid "use output format EXT (texi [default], texi-html, latex, html)"
+msgstr "EXT (texi [öntanımlı], texi-html, latex, html) çıktı biçemini kullan"
 
-#: lilypond-book.py:129
+#: lilypond-book.py:90
 msgid "FILTER"
 msgstr "SÜZGEÇ"
 
-#: lilypond-book.py:132
+#: lilypond-book.py:90
 msgid "pipe snippets through FILTER [convert-ly -n -]"
 msgstr "küçük parçaları [convert-ly -n -] SÜZGEÇi aracılığıyla borular"
 
-#: lilypond-book.py:135
-#, fuzzy
-msgid ""
-"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
-msgstr "EXT (texi [öntanımlı], texi-html, latex, html) çıktı biçemini kullan"
-
-#: lilypond-book.py:138
-msgid "add DIR to include path"
-msgstr "içerim yollarına DIR'ı (DİZİN) ekle"
-
-#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+#: lilypond-book.py:92 lilypond-book.py:94 lilypond-latex.py:114 main.cc:133
+#: lily/main.cc:133
 msgid "DIR"
 msgstr "DIR (DİZİN)"
 
-#: lilypond-book.py:143
-msgid "write output to DIR"
-msgstr "çıktıyı DIR'a (DİZİN) yaz"
+#: lilypond-book.py:92
+msgid "add DIR to include path"
+msgstr "içerim yollarına DIR'ı (DİZİN) ekle"
 
-#: lilypond-book.py:147
+#: lilypond-book.py:93
 msgid "COMMAND"
 msgstr "KOMUT"
 
-#: lilypond-book.py:148
+#: lilypond-book.py:93
 msgid "process ly_files using COMMAND FILE..."
 msgstr "KOMUT DOSYASInı kullanarak ly_files'ı işle..."
 
-#: lilypond-book.py:154
-msgid "Create PDF files for use with PDFTeX"
-msgstr ""
-
-#: lilypond-book.py:157
-msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
-"must use this with dvips -h INPUT.psfonts"
-msgstr ""
+#: lilypond-book.py:94
+msgid "write output to DIR"
+msgstr "çıktıyı DIR'a (DİZİN) yaz"
 
-#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
+#: lilypond-book.py:95 lilypond-latex.py:133 midi2ly.py:105 mup2ly.py:78
+#: ps2png.py:41 main.cc:145 lily/main.cc:145
 msgid "be verbose"
 msgstr "daha fazla bilgi ver"
 
-#: lilypond-book.py:773
-#, python-format
-msgid "file not found: %s"
-msgstr "dosya bulunamadı: %s"
-
-#: lilypond-book.py:1004
-#, fuzzy, python-format
-msgid "deprecated ly-option used: %s=%s"
-msgstr "artık kullanılmayan ly-seçeneği kullanıldı: %s"
+#: lilypond-book.py:96
+msgid "print version information"
+msgstr "sürüm bilgisini yazdır"
 
-#: lilypond-book.py:1007
-#, fuzzy, python-format
-msgid "compatibility mode translation: %s=%s"
-msgstr "uyumluluk kipi çevirisi: %s"
+#: lilypond-book.py:97 lilypond-latex.py:135 midi2ly.py:107 mup2ly.py:80
+#: main.cc:146 lily/main.cc:146
+msgid "show warranty and copyright"
+msgstr "garantiyi ve telif hakkını göster"
 
-#: lilypond-book.py:1011
+#: lilypond-book.py:400
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "artık kullanılmayan ly-seçeneği kullanıldı: %s"
 
-#: lilypond-book.py:1014
+#: lilypond-book.py:401
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr "uyumluluk kipi çevirisi: %s"
 
-#: lilypond-book.py:1033
+#: lilypond-book.py:423
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "bilinmeyen ly seçeneği yok sayılıyor: %s"
 
-#: lilypond-book.py:1388
+#: lilypond-book.py:480
+#, python-format
+msgid "file not found: %s"
+msgstr "dosya bulunamadı: %s"
+
+#: lilypond-book.py:795
 #, python-format
 msgid "Opening filter `%s'"
 msgstr "`%s' süzgeci açılıyor"
 
-#: lilypond-book.py:1405
+#: lilypond-book.py:913
 #, python-format
-msgid "`%s' failed (%d)"
-msgstr "`%s' başarısız (%d)"
-
-#: lilypond-book.py:1406
-msgid "The error log is as follows:"
-msgstr "Hata günlüğü aşağıdaki gibidir:"
-
-#: lilypond-book.py:1476
-msgid "cannot find \\begin{document} in LaTeX document"
-msgstr ""
-
-#: lilypond-book.py:1586
-msgid "Writing snippets..."
-msgstr "Küçük parçalar yazılıyor..."
-
-#: lilypond-book.py:1591
-msgid "Processing..."
-msgstr "İşleniyor..."
-
-#: lilypond-book.py:1595
-msgid "All snippets are up to date..."
-msgstr "Bütün küçük parçalar güncellenmiştir..."
-
-#: lilypond-book.py:1605
-#, fuzzy, python-format
 msgid "cannot determine format for: %s"
 msgstr "%s için biçem saptanamıyor"
 
-#: lilypond-book.py:1616
-#, fuzzy, python-format
-msgid "%s is up to date."
-msgstr "Bütün küçük parçalar güncellenmiştir..."
-
-#: lilypond-book.py:1622
-#, python-format
-msgid "Writing `%s'..."
-msgstr "`%s' yazılıyor..."
-
-#: lilypond-book.py:1677
+#: lilypond-book.py:954
 msgid "Output would overwrite input file; use --output."
 msgstr "Çıktı girdi dosyasının üzerine yazılacak; --output'u kullan."
 
-#: lilypond-book.py:1681
+#: lilypond-book.py:961
 #, python-format
 msgid "Reading %s..."
 msgstr "%s okunuyor..."
 
-#: lilypond-book.py:1700
+#: lilypond-book.py:975
 msgid "Dissecting..."
 msgstr "Açımlanıyor..."
 
-#: lilypond-book.py:1716
+#: lilypond-book.py:1006
+msgid "Writing snippets..."
+msgstr "Küçük parçalar yazılıyor..."
+
+#: lilypond-book.py:1011
+msgid "Processing..."
+msgstr "İşleniyor..."
+
+#: lilypond-book.py:1014
+msgid "All snippets are up to date..."
+msgstr "Bütün küçük parçalar güncellenmiştir..."
+
+#: lilypond-book.py:1017
 #, python-format
 msgid "Compiling %s..."
 msgstr "%s derleniyor..."
 
-#: lilypond-book.py:1725
+#: lilypond-book.py:1025
 #, python-format
 msgid "Processing include: %s"
 msgstr "İçerim işleniyor: %s"
 
-#: lilypond-book.py:1739
-#, fuzzy, python-format
-msgid "Removing `%s'"
-msgstr "`%s' çağrılıyor"
+#: lilypond-book.py:1041 lilypond-latex.py:576 midi2ly.py:1017 ps2png.py:51
+#, python-format
+msgid "getopt says: `%s'"
+msgstr "getopt çıktısı: `%s'"
 
-#: lilypond-book.py:1815
-#, fuzzy, python-format
-msgid "Writing fonts to %s..."
-msgstr "`%s' yazılıyor..."
+#  # FIXME
+#  # do -P or -p by default?
+#  #help_summary = _ ("Run LilyPond using LaTeX for titling")
+#. # FIXME
+#. # do -P or -p by default?
+#. #help_summary = _ ("Run LilyPond using LaTeX for titling")
+#: lilypond-latex.py:104
+msgid "Run LilyPond, generate printable document."
+msgstr "LilyPond'u çalıştır, yazdırılabilir belge üret."
+
+#: lilypond-latex.py:110
+msgid "use LaTeX for formatting"
+msgstr "biçemleme için LaTeX kullanır"
+
+#: lilypond-latex.py:111
+msgid "print even more output"
+msgstr "daha da fazla çıktı yazdır"
+
+#: lilypond-latex.py:112 lilypond-latex.py:123 midi2ly.py:102 main.cc:134
+#: main.cc:136 lily/main.cc:134 lily/main.cc:136
+msgid "FILE"
+msgstr "DOSYA"
 
-#: lilypond-book.py:1830
-msgid "option --psfonts not used"
-msgstr ""
+#: lilypond-latex.py:112
+msgid "find pfa fonts used in FILE"
+msgstr "DOSYAda kullanılan pfa yazı tiplerini bul"
 
-#: lilypond-book.py:1831
-msgid "processing with dvips will have no fonts"
-msgstr ""
+#: lilypond-latex.py:114
+msgid "add DIR to LilyPond's search path"
+msgstr "DIR'ı (DİZİN) LilyPond'un arama yoluna ekle"
 
-#: lilypond-book.py:1834
-msgid "DVIPS usage:"
-msgstr ""
+#: lilypond-latex.py:116
+#, python-format
+msgid "keep all output, output to directory %s.dir"
+msgstr "bütün çıktıyı sakla, çıktıyı %s dizinine yönlendir"
 
-#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
-msgid "warning: "
-msgstr "uyarı:"
+#. junkme?
+#: lilypond-latex.py:119
+msgid "don't run LilyPond"
+msgstr "LilyPond'u çalıştırma"
 
-#: midi2ly.py:109 midi2ly.py:924
-msgid "error: "
-msgstr "hata: "
+#. junkme?
+#: lilypond-latex.py:121 main.cc:135 lily/main.cc:135
+msgid "produce MIDI output only"
+msgstr "sadece MIDI çıktısı üret"
 
-#: midi2ly.py:110
-msgid "Exiting ... "
-msgstr "Mevcut ..."
+#: lilypond-latex.py:123 midi2ly.py:102 mup2ly.py:76 main.cc:136
+#: lily/main.cc:136
+msgid "write output to FILE"
+msgstr "çıktıyı DOSYAya yaz"
 
-#: midi2ly.py:857
-#, python-format
-msgid "%s output to `%s'..."
-msgstr "`%s' çıktısı`%s'ye..."
+#: lilypond-latex.py:124 ps2png.py:42
+msgid "RES"
+msgstr "RES"
 
-#: midi2ly.py:871 musicxml2ly.py:485
-#, fuzzy, python-format
-msgid "Convert %s to LilyPond input."
-msgstr "mup'ı Lilypond kaynağına dönüştür."
+#: lilypond-latex.py:125 ps2png.py:43
+msgid "set the resolution of the preview to RES"
+msgstr "önizlemenin çözünürlüğünü RES'e ayarla"
 
-#: midi2ly.py:875
-msgid "print absolute pitches"
-msgstr "kesin sesleri yazdır"
+#: lilypond-latex.py:126
+msgid "generate PDF output"
+msgstr "PDF çıktısı üret"
 
-#: midi2ly.py:877 midi2ly.py:889
-msgid "DUR"
-msgstr "DUR"
+#: lilypond-latex.py:127
+msgid "generate PostScript output"
+msgstr "PostScript çıktısı üret"
 
-#: midi2ly.py:878
-msgid "quantise note durations on DUR"
-msgstr "DUR üzerindeki nota sürelerini rakamlandır"
+#: lilypond-latex.py:128
+msgid "generate PNG page images"
+msgstr "PNG sayfa görüntülerini  üret"
 
-#: midi2ly.py:881
-msgid "print explicit durations"
-msgstr "belirtilmiş süreler yazdır"
+#: lilypond-latex.py:129
+msgid "make a picture of the first system"
+msgstr "ilk sistemin bir resmini yap"
 
-#: midi2ly.py:882
-msgid "set key: ALT=+sharps|-flats; MINOR=1"
-msgstr ""
-"anahtarı ayarla: ALT=+sharps (diyezler) veya -flats (bemoller); MINOR=1"
+#: lilypond-latex.py:130
+msgid "generate PS.GZ"
+msgstr "PS.GZ üret"
 
-#: midi2ly.py:883
-msgid "ALT[:MINOR]"
-msgstr "ALT[:MINOR]"
+#: lilypond-latex.py:131
+msgid "run in safe-mode"
+msgstr "emniyetli kipte çalıştır"
 
-#: midi2ly.py:888
-msgid "quantise note starts on DUR"
-msgstr "DUR üzerindeki nota başlangıçlarını rakamlandır"
+#: lilypond-latex.py:132
+msgid "KEY=VAL"
+msgstr "KEY=VAL"
 
-#: midi2ly.py:891
-msgid "DUR*NUM/DEN"
-msgstr "DUR*NUM/DEN"
+#: lilypond-latex.py:132
+msgid "change global setting KEY to VAL"
+msgstr "genel ayar KEY'e VAL değerini ata"
 
-#: midi2ly.py:894
-msgid "allow tuplet durations DUR*NUM/DEN"
-msgstr "DUR*NUM/DEN tuplet sürelerine izin ver"
+#: lilypond-latex.py:134 midi2ly.py:106 mup2ly.py:79 main.cc:144
+#: lily/main.cc:144
+msgid "print version number"
+msgstr "sürüm numarasını yazdır"
 
-#: midi2ly.py:902
-msgid "treat every text as a lyric"
-msgstr "her metne şarkı sözü muamelesi yap"
+#: lilypond-latex.py:203
+#, python-format
+msgid "no such setting: `%s'"
+msgstr "böyle bir ayar yok: `%s'"
 
-#: midi2ly.py:905
-#, fuzzy
-msgid "Examples"
-msgstr "Örnek:"
+#: lilypond-latex.py:247
+#, python-format
+msgid "LilyPond crashed (signal %d)."
+msgstr "LilyPond çöktü (%d sinyali)."
 
-#: midi2ly.py:925
-msgid "no files specified on command line."
-msgstr "komut satırında hiçbir dosya belirtilmedi."
+#: lilypond-latex.py:248
+msgid "Please submit a bug report to bug-lilypond@gnu.org"
+msgstr "Lütfen bug-lilypond@gnu.org adresine bir yazılım hatası raporu gönderin"
 
-#: musicxml2ly.py:473
-msgid "musicxml2ly FILE.xml"
-msgstr ""
+#: lilypond-latex.py:255
+#, python-format
+msgid "LilyPond failed on input file %s (exit status %d)"
+msgstr "LilyPond %s girdi dosyasında başarısız oldu (çıkış durumu %d)"
+
+#: lilypond-latex.py:259
+#, python-format
+msgid "LilyPond failed on an input file (exit status %d)"
+msgstr "LilyPond bir girdi dosyasında başarısız oldu (çıkış durumu %d)"
+
+#: lilypond-latex.py:260
+msgid "Continuing..."
+msgstr "Devam ediliyor..."
 
-#: musicxml2ly.py:476
-#, fuzzy, python-format
+#: lilypond-latex.py:270
+#, python-format
+msgid "Analyzing %s..."
+msgstr "%s çözümleniyor..."
+
+#: lilypond-latex.py:324
+#, python-format
+msgid "no LilyPond output found for `%s'"
+msgstr "`%s' için hiçbir LilyPond çıktısı bulunamadı"
+
+#: lilypond-latex.py:465
+msgid "LaTeX failed on the output file."
+msgstr "LaTeX çıktı dosyasında başarısız oldu."
+
+#: lilypond-latex.py:513
 msgid ""
-"This program is free software.  It is covered by the GNU General Public\n"
-"License and you are welcome to change it and/or distribute copies of it\n"
-"under certain conditions.  Invoke as `%s --warranty' for more\n"
-"information."
+"Trying create PDF, but no PFA fonts found.\n"
+"Using bitmap fonts instead. This will look bad."
 msgstr ""
-"Bu program serbest yazılımdır. GNU Genel Kamu Lisansı tarafından\n"
-"korunmakta olan bu yazılımı belli şartlar altında değiştirebilir\n"
-"ve/veya kopyalarını dağıtabilirsiniz.  Daha fazla\n"
-"bilgi için 'lilypond --warranty' komutunu çalıştırın.\n"
+"PDF oluşturulmaya çalışılıyor, ancak hiçbir PFA yazı tipi bulunamadı. \n"
+"Bunun yerine bitmap yazı tipi kullanılıyor. Bu kötü görünecek."
+
+#  no ps header?
+#. no ps header?
+#: lilypond-latex.py:556
+#, python-format
+msgid "not a PostScript file: `%s'"
+msgstr "bir PostScript dosyası değil: `%s'"
+
+#: lilypond-latex.py:666
+msgid "pseudo filter"
+msgstr "sahte süzgeç"
 
-#: musicxml2ly.py:495
-msgid "Use lxml.etree; uses less memory and cpu time."
+#: lilypond-latex.py:669
+msgid "pseudo filter only for single input file"
+msgstr "sadece tek girdi dosyası için sahte süzgeç"
+
+#: lilypond-latex.py:674
+msgid "no files specified on command line"
+msgstr "komut satırında hiçbir dosya belirtilmedi"
+
+#: lilypond-latex.py:706
+#, python-format
+msgid "filename should not contain spaces: `%s'"
+msgstr "dosyaadı boşluk içermemeli: `%s'"
+
+#: lilypond-latex.py:744
+msgid "Running LilyPond failed. Rerun with --verbose for a trace."
 msgstr ""
+"LilyPond'un çalıştırılması başarısız. İzlemek için\n"
+"--verbose seçeneği ile yeniden çalıştırın."
 
-#: musicxml2ly.py:503
-#, fuzzy
-msgid "set output filename to FILE"
-msgstr "çıktıyı DOSYAya yaz"
+#: lilypond-latex.py:786
+msgid "Failed to make PS file. Rerun with --verbose for a trace."
+msgstr ""
+"PS dosyası oluşturulamadı. İzlemek için\n"
+"--verbose seçeneği ile yeniden çalıştırın."
+
+#: lilypond-latex.py:815
+#, python-format
+msgid "%s output to <stdout>..."
+msgstr "%s çıktısı <stdout>a..."
+
+#: lilypond-latex.py:820 includable-lexer.cc:57 kpath.cc:134 lily-guile.cc:89
+#: lily-parser.cc:275 lily/includable-lexer.cc:57 lily/kpath.cc:134
+#: lily/lily-guile.cc:89 lily/lily-parser.cc:275
+#, c-format, python-format
+msgid "can't find file: `%s'"
+msgstr "dosya bulunamıyor: `%s'"
+
+#: lilypond-latex.py:843
+#, python-format
+msgid "%s output to %s..."
+msgstr "%s çıktısı %s'ye..."
+
+#: lilypond-latex.py:846
+#, python-format
+msgid "can't find file: `%s.%s'"
+msgstr "dosya bulunamıyor: `%s.%s'"
+
+#  temp_dir = os.path.join (original_dir,  '%s.dir' % program_name)
+#  original_dir = os.getcwd ()
+#  keep_temp_dir_p = 0
+#. temp_dir = os.path.join (original_dir,  '%s.dir' % program_name)
+#. original_dir = os.getcwd ()
+#. keep_temp_dir_p = 0
+#: midi2ly.py:94
+msgid "Convert MIDI to LilyPond source."
+msgstr "MIDI'yi LilyPond kaynağına dönüştür."
+
+#: midi2ly.py:97
+msgid "print absolute pitches"
+msgstr "kesin sesleri yazdır"
+
+#: midi2ly.py:98 midi2ly.py:103
+msgid "DUR"
+msgstr "DUR"
+
+#: midi2ly.py:98
+msgid "quantise note durations on DUR"
+msgstr "DUR üzerindeki nota sürelerini rakamlandır"
+
+#: midi2ly.py:99
+msgid "print explicit durations"
+msgstr "belirtilmiş süreler yazdır"
+
+#: midi2ly.py:101
+msgid "ALT[:MINOR]"
+msgstr "ALT[:MINOR]"
+
+#: midi2ly.py:101
+msgid "set key: ALT=+sharps|-flats; MINOR=1"
+msgstr "anahtarı ayarla: ALT=+sharps (diyezler) veya -flats (bemoller); MINOR=1"
+
+#: midi2ly.py:103
+msgid "quantise note starts on DUR"
+msgstr "DUR üzerindeki nota başlangıçlarını rakamlandır"
 
-#: getopt-long.cc:140
+#: midi2ly.py:104
+msgid "DUR*NUM/DEN"
+msgstr "DUR*NUM/DEN"
+
+#: midi2ly.py:104
+msgid "allow tuplet durations DUR*NUM/DEN"
+msgstr "DUR*NUM/DEN tuplet sürelerine izin ver"
+
+#: midi2ly.py:108
+msgid "treat every text as a lyric"
+msgstr "her metne şarkı sözü muamelesi yap"
+
+#: midi2ly.py:149 mup2ly.py:143 input.cc:88 lily/input.cc:88
+msgid "warning: "
+msgstr "uyarı:"
+
+#: midi2ly.py:164 midi2ly.py:1017 midi2ly.py:1082 mup2ly.py:146 mup2ly.py:160
+#: input.cc:93 lily/input.cc:93
+msgid "error: "
+msgstr "hata: "
+
+#: midi2ly.py:165 mup2ly.py:161
+msgid "Exiting ... "
+msgstr "Mevcut ..."
+
+#: midi2ly.py:263 mup2ly.py:260
+#, python-format
+msgid "command exited with value %d"
+msgstr "komut %d değeriyle sonlandı"
+
+#: midi2ly.py:1001
+#, python-format
+msgid "%s output to `%s'..."
+msgstr "`%s' çıktısı`%s'ye..."
+
+#: midi2ly.py:1032
+msgid "Example:"
+msgstr "Örnek:"
+
+#: midi2ly.py:1082
+msgid "no files specified on command line."
+msgstr "komut satırında hiçbir dosya belirtilmedi."
+
+#: mup2ly.py:70
+msgid "Convert mup to LilyPond source."
+msgstr "mup'ı Lilypond kaynağına dönüştür."
+
+#: mup2ly.py:73
+msgid "debug"
+msgstr "hata ayıklama"
+
+#: mup2ly.py:74
+msgid "define macro NAME [optional expansion EXP]"
+msgstr "makro ADını [seçimli genişletme EXP] tanımla"
+
+#: mup2ly.py:77
+msgid "only pre-process"
+msgstr "sadece önişleme yap"
+
+#: mup2ly.py:1075
+#, python-format
+msgid "no such context: %s"
+msgstr "böyle bir bağlam yok: %s"
+
+#: mup2ly.py:1299
+#, python-format
+msgid "Processing `%s'..."
+msgstr "`%s' işleniyor..."
+
+#: mup2ly.py:1318
+#, python-format
+msgid "Writing `%s'..."
+msgstr "`%s' yazılıyor..."
+
+#. ugr.
+#: ps2png.py:35
+msgid "Convert PostScript to PNG image."
+msgstr "PostScript'i PNG grafiğine dönüştürür."
+
+#. # FIXME: silly message containing %d
+#: ps2png.py:71
+#, python-format
+msgid "Wrote `%s'"
+msgstr "`%s' yazıldı"
+
+#: getopt-long.cc:146
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "`%s' seçeneği bir argüman gerektirir"
 
-#: getopt-long.cc:144
-#, fuzzy, c-format
-msgid "option `%s' does not allow an argument"
+#: getopt-long.cc:150
+#, c-format
+msgid "option `%s' doesn't allow an argument"
 msgstr "`%s' seçeneği argüman kabul etmez"
 
-#: getopt-long.cc:148
+#: getopt-long.cc:154
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "tanınmayan seçenek: `%s'"
 
-#: getopt-long.cc:154
+#: getopt-long.cc:161
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "`%s' seçeneğine `%s' geçersiz argümanı"
 
-#: warn.cc:68 grob.cc:559 input.cc:82
+#: warn.cc:43
 #, c-format
 msgid "programming error: %s"
 msgstr "programlama hatası: %s"
 
-#: warn.cc:69 input.cc:83
-#, fuzzy
-msgid "continuing, cross fingers"
+#: warn.cc:44
+msgid "Continuing; crossing fingers"
 msgstr "Devam ediliyor; parmaklar çaprazlanıyor"
 
-#: accidental-engraver.cc:240
-#, fuzzy, c-format
-msgid "accidental typesetting list must begin with context-name: %s"
+#: accidental-engraver.cc:194 lily/accidental-engraver.cc:201
+#: lily/accidental-engraver.cc:243
+#, c-format
+msgid "Accidental typesetting list must begin with context-name: %s"
 msgstr "Rastlantı dizme listesi context-name (bağlam adı) ile başlamalıdır: %s"
 
-#: accidental-engraver.cc:268
+#: accidental-engraver.cc:222 lily/accidental-engraver.cc:229
+#: lily/accidental-engraver.cc:271
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr "bilinmeyen rastlantı yok sayılıyor: %s"
 
-#: accidental-engraver.cc:284
+#: accidental-engraver.cc:239 lily/accidental-engraver.cc:246
+#: lily/accidental-engraver.cc:288
 #, c-format
-msgid "pair or context-name expected for accidental rule, found %s"
-msgstr ""
+msgid "Accidental rule must be pair or context-name; Found %s"
+msgstr "Raslantı kuralı çift ya da bağlam-adı olmak zorundadır; %s bulundu"
 
-#: accidental.cc:243 key-signature-interface.cc:133
+#: accidental.cc:221 key-signature-interface.cc:137 lily/accidental.cc:221
+#: lily/key-signature-interface.cc:137 lily/accidental.cc:222
 #, c-format
 msgid "accidental `%s' not found"
 msgstr "rastlantısal `%s' bulunamadı"
 
-#: align-interface.cc:222
-msgid ""
-"vertical alignment called before line-breaking.\n"
-"Only do cross-staff spanners with PianoStaff."
-msgstr ""
-
-#: align-interface.cc:329
-msgid "tried to get a translation for something that is no child of mine"
-msgstr ""
+#: afm.cc:143 lily/afm.cc:143
+#, c-format
+msgid "Error parsing AFM file: `%s'"
+msgstr "AFM dosyasının ayrıştırılmasında hata: `%s' "
 
-#: all-font-metrics.cc:173
+#. FIXME: broken sentence
+#. FIXME: broken sentence
+#. FIXME: broken sentence
+#. FIXME: broken sentence
+#. FIXME: broken sentence
+#. FIXME: broken sentence
+#. FIXME: broken sentence
+#. FIXME: broken sentence
+#: all-font-metrics.cc:95 lily/all-font-metrics.cc:95
 #, c-format
-msgid "cannot find font: `%s'"
-msgstr "yazı tipi bulunamıyor: `%s'"
+msgid "checksum mismatch for font file: `%s'"
+msgstr "yazı tipi dosyası için hatalı sağlama toplamı: `%s' "
 
-#: apply-context-iterator.cc:31
-msgid "\\applycontext argument is not a procedure"
-msgstr "\\applycontext (uygulamabağlamı) argümanı bir işlev değil"
+#: all-font-metrics.cc:97 lily/all-font-metrics.cc:97
+#, c-format
+msgid "does not match: `%s'"
+msgstr "eşleşmiyor: `%s'"
 
-#: auto-change-iterator.cc:63 change-iterator.cc:61
-#, fuzzy, c-format
-msgid "cannot change, already in translator: %s"
-msgstr "`%s' `%s'ye dönüştürülemiyor "
+#: all-font-metrics.cc:103 lily/all-font-metrics.cc:103
+msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
+msgstr ".afm dosyalarınrın hepsini yeniden kurgula, ve .pk ve .tfm dosyalarının hepsini kaldır."
 
-#: axis-group-engraver.cc:78
-msgid "Axis_group_engraver: vertical group already has a parent"
-msgstr ""
+#: all-font-metrics.cc:105 lily/all-font-metrics.cc:105
+msgid "Rerun with -V to show font paths."
+msgstr "Yazı tipi yollarını göstermek için -V ile yeniden çalıştır. "
 
-#: axis-group-engraver.cc:79
-msgid "are there two Axis_group_engravers?"
-msgstr ""
+#: all-font-metrics.cc:107 lily/all-font-metrics.cc:107
+msgid "A script for removing font-files is delivered with the source-code:"
+msgstr "Yazı tipi-dosyalarının kaldırılması için kaynak-kodu ile birlikte bir betik verildi:"
 
-#: axis-group-engraver.cc:80
-msgid "removing this vertical group"
-msgstr ""
+#: all-font-metrics.cc:184 lily/all-font-metrics.cc:184
+#, c-format
+msgid "can't find font: `%s'"
+msgstr "yazı tipi bulunamıyor: `%s'"
 
-#: axis-group-interface.cc:96
-msgid "tried to calculate pure-height at a non-breakpoint"
-msgstr ""
+#: all-font-metrics.cc:185 lily/all-font-metrics.cc:185
+msgid "Loading default font"
+msgstr "Öntanımlı yazı tipi yükleniyor "
 
-#: axis-group-interface.cc:370
-msgid "an outside-staff object should have a direction, defaulting to up"
-msgstr ""
+#: all-font-metrics.cc:200 lily/all-font-metrics.cc:200
+#, c-format
+msgid "can't find default font: `%s'"
+msgstr "öntanımlı yazı tipi bulunamıyor: `%s'"
 
-#: axis-group-interface.cc:383
+#: all-font-metrics.cc:201 includable-lexer.cc:59 lily-parser.cc:268
+#: lily/all-font-metrics.cc:201 lily/includable-lexer.cc:59
+#: lily/lily-parser.cc:268
 #, c-format
-msgid "outside-staff object %s has an empty extent"
+msgid "(search path: `%s')"
+msgstr "(arama yolu: `%s')"
+
+#: all-font-metrics.cc:202 lily/all-font-metrics.cc:202
+msgid "Giving up"
+msgstr "Vazgeçiliyor"
+
+#: apply-context-iterator.cc:35 lily/apply-context-iterator.cc:35
+msgid "\\applycontext argument is not a procedure"
+msgstr "\\applycontext (uygulamabağlamı) argümanı bir işlev değil"
+
+#: auto-change-iterator.cc:67 change-iterator.cc:61
+#: lily/auto-change-iterator.cc:67 lily/change-iterator.cc:61
+msgid "Can't switch translators, I'm there already"
+msgstr "Çevirmenler değiştirilemiyor, zaten oradayım"
+
+#: axis-group-engraver.cc:117 lily/axis-group-engraver.cc:117
+msgid ""
+"Axis_group_engraver: vertical group already has a parent.\n"
+"Do you have two Axis_group_engravers?\n"
+"Killing this vertical group."
 msgstr ""
 
-#: bar-check-iterator.cc:73
+#: bar-check-iterator.cc:68 lily/bar-check-iterator.cc:68
 #, c-format
 msgid "barcheck failed at: %s"
 msgstr "çubukdenetimi başarısız oldu: %s"
 
-#: beam-engraver.cc:128
+#: beam-engraver.cc:139 lily/beam-engraver.cc:139
 msgid "already have a beam"
 msgstr "zaten bir ışın var"
 
-#: beam-engraver.cc:196
+#: beam-engraver.cc:211 lily/beam-engraver.cc:211
 msgid "unterminated beam"
 msgstr "sonlandırılmamış ışın"
 
-#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:244 chord-tremolo-engraver.cc:174
+#: lily/beam-engraver.cc:244 lily/chord-tremolo-engraver.cc:174
 msgid "stem must have Rhythmic structure"
 msgstr "gövdenin Rhythmic yapısı olmalı"
 
-#: beam-engraver.cc:246
-#, fuzzy
-msgid "stem does not fit in beam"
+#: beam-engraver.cc:258 lily/beam-engraver.cc:258
+msgid "stem doesn't fit in beam"
 msgstr "gövde ışınla uyumlu değil"
 
-#: beam-engraver.cc:247
+#: beam-engraver.cc:259 lily/beam-engraver.cc:259
 msgid "beam was started here"
 msgstr "ışın burada başlatıldı"
 
-#: beam-quanting.cc:307
-#, fuzzy
-msgid "no feasible beam position"
-msgstr "Hiçbir uygulanabilir satır bölünmesi bulunamadı"
+#: beam.cc:149 lily/beam.cc:149 lily/beam.cc:150
+msgid "beam has less than two visible stems"
+msgstr "ışının ikiden az gövdesi var"
 
-#: beam.cc:144
-#, fuzzy
-msgid "removing beam with no stems"
+#: beam.cc:154 lily/beam.cc:154 lily/beam.cc:155
+msgid "removing beam with less than two stems"
 msgstr "ikiden az gövdesi olan ışın kaldırılıyor"
 
-#: beam.cc:1007
+#: beam.cc:1038 lily/beam.cc:1038 lily/beam.cc:1063 lily/beam.cc:1065
+#: lily/beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
-msgstr ""
-"hiçbir geçerli başlangıç yapılandırması bulunamadı: uygun ışın eğimi "
-"bulunamayabilir"
+msgstr "hiçbir geçerli başlangıç yapılandırması bulunamadı: uygun ışın eğimi bulunamayabilir"
 
-#: break-alignment-interface.cc:208
+#: break-align-interface.cc:214 lily/break-align-interface.cc:214
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "%s'den `%sy'e kadar hiçbir boşluk girişi yok"
 
-#: change-iterator.cc:23
+#: change-iterator.cc:22 lily/change-iterator.cc:22
 #, c-format
-msgid "cannot change `%s' to `%s'"
+msgid "can't change `%s' to `%s'"
 msgstr "`%s' `%s'ye dönüştürülemiyor "
 
-#. FIXME: constant error message.
-#: change-iterator.cc:82
-#, fuzzy
-msgid "cannot find context to switch to"
-msgstr "`%s'nin bağlamı bulunamıyor"
-
+#  We could change the current translator's id, but that would make
+#  errors hard to catch
+#  last->translator_id_string_  = get_change ()->change_to_id_string_;
+#.
 #. We could change the current translator's id, but that would make
-#. errors hard to catch.
+#. errors hard to catch
 #.
-#. last->translator_id_string () = get_change
-#. ()->change_to_id_string ();
-#: change-iterator.cc:91
-#, fuzzy, c-format
-msgid "not changing to same context type: %s"
-msgstr "böyle bir bağlam yok: %s"
+#. last->translator_id_string ()  = get_change ()->change_to_id_string ();
+#.
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_string ()  = get_change ()->change_to_id_string ();
+#.
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_string ()  = get_change ()->change_to_id_string ();
+#.
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_string ()  = get_change ()->change_to_id_string ();
+#.
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_string ()  = get_change ()->change_to_id_string ();
+#.
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_string ()  = get_change ()->change_to_id_string ();
+#.
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_string ()  = get_change ()->change_to_id_string ();
+#.
+#.
+#. We could change the current translator's id, but that would make
+#. errors hard to catch
+#.
+#. last->translator_id_string ()  = get_change ()->change_to_id_string ();
+#.
+#: change-iterator.cc:93 lily/change-iterator.cc:93
+msgid "I'm one myself"
+msgstr "Ben tek başımayım"
 
-#. FIXME: uncomprehensable message
-#: change-iterator.cc:95
+#: change-iterator.cc:96 lily/change-iterator.cc:96
 msgid "none of these in my family"
 msgstr "bunların hiçbiri ailemde yok"
 
-#: chord-tremolo-engraver.cc:88
-#, fuzzy
-msgid "No tremolo to end"
-msgstr "Bitirmek için volta anahtarı yok"
+#: chord-tremolo-engraver.cc:100 lily/chord-tremolo-engraver.cc:100
+#, c-format
+msgid "Chord tremolo with %d elements. Must have two elements."
+msgstr "%d öğeli akort tremolosu. İki öğesi olmalı."
 
-#: chord-tremolo-engraver.cc:110
+#: chord-tremolo-engraver.cc:140 lily/chord-tremolo-engraver.cc:140
 msgid "unterminated chord tremolo"
 msgstr "sonlandırılmamış akort tremolosu"
 
-#: chord-tremolo-iterator.cc:33
-#, c-format
-msgid "expect 2 elements for chord tremolo, found %d"
-msgstr ""
+#: chord-tremolo-iterator.cc:64 lily/chord-tremolo-iterator.cc:64
+msgid "no one to print a tremolos"
+msgstr "bir tremolo yazdıracak kimse yok"
 
-#: clef.cc:54
+#: clef.cc:64 lily/clef.cc:64
 #, c-format
 msgid "clef `%s' not found"
 msgstr "`%s' anahtarı bulunamadı"
 
-#: cluster.cc:110
+#: cluster.cc:123 lily/cluster.cc:123
 #, c-format
 msgid "unknown cluster style `%s'"
 msgstr "bilinmeyen küme tarzı `%s'"
 
-#: cluster.cc:135
-msgid "junking empty cluster"
-msgstr ""
+#: coherent-ligature-engraver.cc:84 lily/coherent-ligature-engraver.cc:84
+#, c-format
+msgid "gotcha: ptr=%ul"
+msgstr "hata: ptr=%ul"
 
-#: coherent-ligature-engraver.cc:100
-#, fuzzy, c-format
-msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
+#: coherent-ligature-engraver.cc:96 lily/coherent-ligature-engraver.cc:96
+#, c-format
+msgid "distance=%f"
+msgstr "uzaklık=%f"
+
+#: coherent-ligature-engraver.cc:139 lily/coherent-ligature-engraver.cc:139
+#, c-format
+msgid "Coherent_ligature_engraver: setting `spacing-increment = 0.01': ptr=%ul"
 msgstr ""
 "Tutarlı_bağ_nakkaş: boşluk bırakma artışı 0,01'e ayarlanıyor\n"
 "(spacing-increment=0.01): ptr=%ul"
 
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:176 constrained-breaking.cc:193
-msgid "cannot find line breaking that satisfies constraints"
-msgstr ""
-
-#: context-def.cc:130
-#, fuzzy, c-format
-msgid "program has no such type: `%s'"
+#: context-def.cc:111 lily/context-def.cc:111
+#, c-format
+msgid "Program has no such type: `%s'"
 msgstr "Programın böyle bir türü yok: `%s'"
 
-#: context-property.cc:76
-msgid "need symbol arguments for \\override and \\revert"
-msgstr ""
-
-#: context.cc:151
-#, fuzzy, c-format
-msgid "cannot find or create new `%s'"
-msgstr "`%2$s' adlı`%1$s' bulunamıyor ya da oluşturulamıyor"
-
-#: context.cc:213
-#, fuzzy, c-format
-msgid "cannot find or create `%s' called `%s'"
-msgstr "`%2$s' adlı`%1$s' bulunamıyor ya da oluşturulamıyor"
+#: context-def.cc:285 lily/context-def.cc:286
+#, c-format
+msgid "can't find: `%s'"
+msgstr "bulunamıyor: `%s'"
 
-#: context.cc:276
+#: context.cc:164 lily/context.cc:164 lily/context.cc:163
 #, c-format
-msgid "Invalid CreateContext event: Cannot create %s context"
-msgstr ""
+msgid "Cannot find or create `%s' called `%s'"
+msgstr "`%2$s' adlı`%1$s' bulunamıyor ya da oluşturulamıyor"
 
-#: context.cc:388
+#: context.cc:201 lily/context.cc:201 lily/context.cc:200
 #, c-format
-msgid "cannot find or create: `%s'"
+msgid "can't find or create: `%s'"
 msgstr "bulunamıyor ya da oluşturulamıyor: `%s'"
 
-#: custos.cc:77
+#: custos.cc:85 lily/custos.cc:85
 #, c-format
 msgid "custos `%s' not found"
 msgstr "`%s'nin custosu bulunamadı"
 
-#: dispatcher.cc:71
-msgid "Event class should be a symbol"
-msgstr ""
-
-#: dispatcher.cc:78
-#, fuzzy, c-format
-msgid "Unknown event class %s"
-msgstr "Bilinmeyen arabirim `%s'"
-
-#: dots.cc:38
-#, fuzzy, c-format
-msgid "dot `%s' not found"
-msgstr "`%s' durağı bulunamadı"
+#: dimensions.cc:13 lily/dimensions.cc:13
+msgid "NaN"
+msgstr "NaN"
 
-#: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "cannot find start of (de)crescendo"
+#: dynamic-engraver.cc:186 span-dynamic-performer.cc:86
+#: lily/dynamic-engraver.cc:186 lily/span-dynamic-performer.cc:86
+#: lily/dynamic-engraver.cc:185
+msgid "can't find start of (de)crescendo"
 msgstr "(de)kreşendonun başlangıcı bulunamıyor"
 
-#: dynamic-engraver.cc:195
+#: dynamic-engraver.cc:196 lily/dynamic-engraver.cc:196
+#: lily/dynamic-engraver.cc:195
 msgid "already have a decrescendo"
 msgstr "zaten bir dekreşendo var"
 
-#: dynamic-engraver.cc:197
+#: dynamic-engraver.cc:198 lily/dynamic-engraver.cc:198
+#: lily/dynamic-engraver.cc:197
 msgid "already have a crescendo"
 msgstr "zaten bir kreşendo var"
 
-#: dynamic-engraver.cc:200
-#, fuzzy
-msgid "cresc starts here"
+#: dynamic-engraver.cc:201 lily/dynamic-engraver.cc:201
+#: lily/dynamic-engraver.cc:200
+msgid "Cresc started here"
 msgstr "Cresc buradan başlatıldı"
 
-#: dynamic-engraver.cc:323
+#: dynamic-engraver.cc:307 lily/dynamic-engraver.cc:317
+#: lily/dynamic-engraver.cc:321
 msgid "unterminated (de)crescendo"
 msgstr "sonlandırılmamış (de)kreşendo"
 
-#: extender-engraver.cc:131 extender-engraver.cc:140
-msgid "unterminated extender"
-msgstr "sonlandırılmamış genişletici"
-
-#: font-config.cc:28
-msgid "Initializing FontConfig..."
-msgstr ""
-
-#: font-config.cc:44
+#: event-chord-iterator.cc:56 output-property-music-iterator.cc:29
+#: lily/event-chord-iterator.cc:56 lily/output-property-music-iterator.cc:29
 #, c-format
-msgid "Rebuilding FontConfig cache %s, this may take a while..."
-msgstr ""
+msgid "Junking event: `%s'"
+msgstr "Kullanılmayan olay: `%s'"
 
-#: font-config.cc:55
-#, fuzzy, c-format
-msgid "failed adding font directory: %s"
-msgstr "dosya bulunamadı: %s"
+#: event.cc:49 lily/event.cc:49 lily/music.cc:184
+#, c-format
+msgid "Transposition by %s makes alteration larger than two"
+msgstr "%s ile transpozisyon ikiden büyük değişikliğe yol açar"
 
-#: font-config.cc:57
+#: event.cc:72 lily/event.cc:72 lily/event.cc:50
 #, c-format
-msgid "adding font directory: %s"
-msgstr ""
+msgid "octave check failed; expected %s, found: %s"
+msgstr "oktav denetimi başarısız; beklenen %s, elde edilen: %s"
 
-#: general-scheme.cc:160
-msgid "infinity or NaN encountered while converting Real number"
-msgstr ""
+#: extender-engraver.cc:141 extender-engraver.cc:150
+#: lily/extender-engraver.cc:141 lily/extender-engraver.cc:150
+#: lily/extender-engraver.cc:140 lily/extender-engraver.cc:149
+msgid "unterminated extender"
+msgstr "sonlandırılmamış genişletici"
 
-#: general-scheme.cc:161
-msgid "setting to zero"
-msgstr ""
+#: folded-repeat-iterator.cc:65 lily/folded-repeat-iterator.cc:65
+msgid "no one to print a repeat brace"
+msgstr "bir tekrar ayracını yazdıracak kimse yok"
 
-#: glissando-engraver.cc:92
-#, fuzzy
-msgid "unterminated glissando"
+#: glissando-engraver.cc:100 lily/glissando-engraver.cc:100
+msgid "Unterminated glissando."
 msgstr "Sonlandırılmamaış glissando."
 
-#: global-context-scheme.cc:91 global-context-scheme.cc:107
-#, fuzzy
-msgid "no music found in score"
-msgstr "Bir çizgide müziğe ihtiyaç duyar"
-
-#: global-context-scheme.cc:97
-msgid "Interpreting music... "
-msgstr "Müzik yorumlanıyor..."
+#: global-context.cc:150 lily/global-context.cc:150 lily/global-context.cc:157
+#, c-format
+msgid "can't find `%s' context"
+msgstr "`%s'nin bağlamı bulunamıyor"
 
-#: global-context-scheme.cc:120
+#: gourlay-breaking.cc:199 lily/gourlay-breaking.cc:199
 #, c-format
-msgid "elapsed time: %.2f seconds"
-msgstr "geçen zaman: %.2f saniye"
+msgid "Optimal demerits: %f"
+msgstr "İdeal kusurlar: %f"
+
+#: gourlay-breaking.cc:204 lily/gourlay-breaking.cc:204
+msgid "No feasible line breaking found"
+msgstr "Hiçbir uygulanabilir satır bölünmesi bulunamadı"
 
-#: gregorian-ligature-engraver.cc:59
+#: gregorian-ligature-engraver.cc:59 lily/gregorian-ligature-engraver.cc:59
 #, c-format
 msgid "\\%s ignored"
 msgstr "\\%s yok sayıldı"
 
-#: gregorian-ligature-engraver.cc:64
+#: gregorian-ligature-engraver.cc:64 lily/gregorian-ligature-engraver.cc:64
 #, c-format
 msgid "implied \\%s added"
 msgstr "örtük \\%s eklendi"
 
-#. ligature may not start with 2nd head of pes or flexa
-#: gregorian-ligature-engraver.cc:212
-#, fuzzy
-msgid "cannot apply `\\~' on first head of ligature"
-msgstr "bağın başlangıcı bulunamıyor"
-
-#. (pitch == prev_pitch)
-#: gregorian-ligature-engraver.cc:224
-msgid "cannot apply `\\~' on heads with identical pitch"
-msgstr ""
-
-#: grob-interface.cc:57
+#: grob-interface.cc:73 lily/grob-interface.cc:73
 #, c-format
 msgid "Unknown interface `%s'"
 msgstr "Bilinmeyen arabirim `%s'"
 
-#: grob-interface.cc:68
+#: grob-interface.cc:84 lily/grob-interface.cc:84
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob.cc:253
-msgid "Infinity or NaN encountered"
-msgstr ""
-
-#: hairpin.cc:183
+#: hairpin.cc:92 lily/hairpin.cc:107 lily/hairpin.cc:106
 msgid "decrescendo too small"
 msgstr "dekreşendo çok küçük"
 
-#: horizontal-bracket-engraver.cc:59
-#, fuzzy
-msgid "do not have that many brackets"
+#: hairpin.cc:93 lily/hairpin.cc:108 lily/hairpin.cc:107
+msgid "crescendo too small"
+msgstr "kreşendo çok küçük"
+
+#: horizontal-bracket-engraver.cc:57 lily/horizontal-bracket-engraver.cc:57
+msgid "Don't have that many brackets."
 msgstr "O kadar çok köşeli ayraç yok"
 
-#: horizontal-bracket-engraver.cc:68
-#, fuzzy
-msgid "conflicting note group events"
+#: horizontal-bracket-engraver.cc:66 lily/horizontal-bracket-engraver.cc:66
+msgid "Conflicting note group events."
 msgstr "Uyuşmayan nota grubu olayları."
 
-#: hyphen-engraver.cc:93
+#: hyphen-engraver.cc:96 lily/hyphen-engraver.cc:96
 msgid "removing unterminated hyphen"
 msgstr "sonlandırılmamış kısa çizgi kaldırılıyor"
 
-#: hyphen-engraver.cc:107
+#: hyphen-engraver.cc:109 lily/hyphen-engraver.cc:109
 msgid "unterminated hyphen; removing"
 msgstr "sonlandırılmamış kısa çizgi; kaldırılıyor"
 
-#: includable-lexer.cc:53
-msgid "include files are not allowed in safe mode"
-msgstr "güvenli kipte dosyaların içerilmesine izin verilmiyor"
+#: includable-lexer.cc:50 lily/includable-lexer.cc:50
+msgid "include files are not allowed"
+msgstr "dosyaların içerilmesine izin verilmiyor"
 
-#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
-#, c-format
-msgid "cannot find file: `%s'"
-msgstr "dosya bulunamıyor: `%s'"
-
-#: includable-lexer.cc:62 lily-parser-scheme.cc:107
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(arama yolu: `%s')"
+#: input.cc:99 lily/input.cc:99
+msgid "non fatal error: "
+msgstr "hiçbir onulmaz hata yok: "
 
-#: input.cc:112 source-file.cc:168 source-file.cc:183
+#: input.cc:107 source-file.cc:135 source-file.cc:228 lily/input.cc:107
+#: lily/source-file.cc:135 lily/source-file.cc:228
 msgid "position unknown"
 msgstr "konum bilinmiyor"
 
-#: ligature-engraver.cc:93
-msgid "cannot find start of ligature"
+#: key-performer.cc:90 lily/key-performer.cc:90
+msgid "FIXME: key change merge"
+msgstr "FIXME: anahtar değişim birleşimi"
+
+#: kpath.cc:83 lily/kpath.cc:83
+#, c-format
+msgid "kpathsea can not find TFM file: `%s'"
+msgstr "kpathsea TMF dosyasını bulamıyor: `%s'"
+
+#: kpath.cc:129 lily/kpath.cc:129
+#, c-format
+msgid "kpathsea can not find file: `%s'"
+msgstr "kpathsea dosyayı bulamıyor: `%s'"
+
+#: ligature-engraver.cc:152 lily/ligature-engraver.cc:152
+msgid "can't find start of ligature"
 msgstr "bağın başlangıcı bulunamıyor"
 
-#: ligature-engraver.cc:98
+#: ligature-engraver.cc:158 lily/ligature-engraver.cc:158
 msgid "no right bound"
 msgstr "hiçbir doğru bağ yok"
 
-#: ligature-engraver.cc:120
+#: ligature-engraver.cc:184 lily/ligature-engraver.cc:184
 msgid "already have a ligature"
 msgstr "zaten bir bağ var"
 
-#: ligature-engraver.cc:129
+#: ligature-engraver.cc:200 lily/ligature-engraver.cc:200
 msgid "no left bound"
 msgstr "arta kalan bağ yok"
 
-#: ligature-engraver.cc:173
+#: ligature-engraver.cc:256 lily/ligature-engraver.cc:256
 msgid "unterminated ligature"
 msgstr "sonlandırılmamış bağ"
 
-#: ligature-engraver.cc:202
+#: ligature-engraver.cc:280 lily/ligature-engraver.cc:280
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "gerisini yok sayıyor: bağ gerisini içermeyebilir"
 
-#: ligature-engraver.cc:203
+#: ligature-engraver.cc:281 lily/ligature-engraver.cc:281
 msgid "ligature was started here"
 msgstr "bağ buradan başlatıldı"
 
-#: lily-guile.cc:92
+#: lily-guile.cc:91 lily/lily-guile.cc:91
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(yolu yükle: `%s')"
 
-#: lily-guile.cc:518
-#, fuzzy, c-format
-msgid "cannot find property type-check for `%s' (%s)."
+#: lily-guile.cc:559 lily/lily-guile.cc:559 lily/lily-guile.cc:575
+#, c-format
+msgid "Can't find property type-check for `%s' (%s)."
 msgstr "`%s' (%s) için nitelik tür-denetimi bulunamıyor."
 
-#: lily-guile.cc:521
-#, fuzzy
-msgid "perhaps a typing error?"
+#: lily-guile.cc:562 lily/lily-guile.cc:562 lily/lily-guile.cc:578
+msgid "Perhaps you made a typing error?"
 msgstr "Galiba bir daktilo hatası yaptınız?"
 
-#: lily-guile.cc:527
-#, fuzzy
-msgid "doing assignment anyway"
+#: lily-guile.cc:568 lily/lily-guile.cc:568 lily/lily-guile.cc:584
+msgid "Doing assignment anyway."
 msgstr "Görev yine de yapılıyor."
 
-#: lily-guile.cc:539
-#, fuzzy, c-format
-msgid "type check for `%s' failed; value `%s' must be of type `%s'"
-msgstr ""
-"`%s'  için yapılan tür denetimi başarısız oldu; `%s'nin değeri `%s' türünden "
-"olmalı"
+#: lily-guile.cc:582 lily/lily-guile.cc:582 lily/lily-guile.cc:598
+#, c-format
+msgid "Type check for `%s' failed; value `%s' must be of type `%s'"
+msgstr "`%s'  için yapılan tür denetimi başarısız oldu; `%s'nin değeri `%s' türünden olmalı"
 
-#: lily-lexer.cc:254
-#, fuzzy, c-format
-msgid "identifier name is a keyword: `%s'"
+#: lily-lexer.cc:220 lily/lily-lexer.cc:220 lily/lily-lexer.cc:224
+#, c-format
+msgid "Identifier name is a keyword: `%s'"
 msgstr "Tanıtıcı adı bir anahtar kelime: `%s' "
 
-#: lily-lexer.cc:269
+#: lily-lexer.cc:237 lily/lily-lexer.cc:237 lily/lily-lexer.cc:241
 #, c-format
 msgid "error at EOF: %s"
 msgstr "EOF'ta hata: %s"
 
-#: lily-parser-scheme.cc:29
-#, fuzzy, c-format
-msgid "deprecated function called: %s"
-msgstr "artık kullanılmayan ly-seçeneği kullanıldı: %s"
-
-#: lily-parser-scheme.cc:88
-#, fuzzy, c-format
-msgid "Changing working directory to: `%s'"
-msgstr "dosya bulunamadı: %s"
-
-#: lily-parser-scheme.cc:106
-#, c-format
-msgid "cannot find init file: `%s'"
-msgstr "init dosyası bulunamıyor: `%s'"
-
-#: lily-parser-scheme.cc:125
-#, fuzzy, c-format
-msgid "Processing `%s'"
-msgstr "`%s' işleniyor..."
-
-#: lily-parser.cc:99
+#: lily-parser.cc:97 lily/lily-parser.cc:97
 msgid "Parsing..."
 msgstr "Ayrıştırılıyor..."
 
-#: lily-parser.cc:127
-#, fuzzy
-msgid "braces do not match"
+#: lily-parser.cc:110 lily-parser.cc:143 lily/lily-parser.cc:110
+#: lily/lily-parser.cc:143
+msgid "Braces don't match"
 msgstr "Ayraçlar eşleşmiyor"
 
-#: lyric-combine-music-iterator.cc:291
+#: lily-parser.cc:267 lily/lily-parser.cc:267
 #, c-format
-msgid "cannot find Voice `%s'"
-msgstr "`%s' Sesi bulunamıyor"
+msgid "can't find init file: `%s'"
+msgstr "init dosyası bulunamıyor: `%s'"
+
+#: lily-parser.cc:284 lily/lily-parser.cc:284
+#, c-format
+msgid "Now processing `%s'"
+msgstr "`%s' şu an işleniyor"
 
-#: main.cc:116
-#, fuzzy, c-format
+#: main.cc:91 lily/main.cc:91
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
 "License and you are welcome to change it and/or distribute copies of it\n"
-"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"under certain conditions.  Invoke as `lilypond --warranty' for more\n"
 "information.\n"
 msgstr ""
 "Bu program serbest yazılımdır. GNU Genel Kamu Lisansı tarafından\n"
@@ -1017,8 +1141,7 @@ msgstr ""
 "ve/veya kopyalarını dağıtabilirsiniz.  Daha fazla\n"
 "bilgi için 'lilypond --warranty' komutunu çalıştırın.\n"
 
-#: main.cc:122
-#, fuzzy
+#: main.cc:97 lily/main.cc:97
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -1029,13 +1152,12 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy of the\n"
+"    You should have received a copy (refer to the file COPYING) of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
 msgstr ""
-"    Bu yazılım, serbest yazılımdır; bu yazılımı yeniden dağıtabilir ve/ya "
-"da\n"
+"    Bu yazılım, serbest yazılımdır; bu yazılımı yeniden dağıtabilir ve/ya da\n"
 "Free Software Foundation tarafından basılan GNU Genel Kamu Lisansı 2. sürüm\n"
 "şartları altında değiştirebilirsiniz. \n"
 "\n"
@@ -1049,130 +1171,63 @@ msgstr ""
 "Free Software Foundation, Inc., 59 Temple Place - 330Suite \n"
 "Boston, MA 02111 - 1307 , USA adresine yazın. \n"
 
-#: main.cc:153
-msgid "BACK"
-msgstr ""
-
-#: main.cc:153
-msgid ""
-"use backend BACK (eps, gnome, ps [default],\n"
-"scm, svg, tex, texstr)"
-msgstr ""
-
-#: main.cc:155
-#, fuzzy
-msgid "SYM[=VAL]"
-msgstr "KEY=VAL"
-
-#: main.cc:156
-msgid ""
-"set Scheme option SYM to VAL (default: #t)\n"
-"Use -dhelp for help."
-msgstr ""
-
-#: main.cc:159
+#: main.cc:126 lily/main.cc:126
 msgid "EXPR"
 msgstr "EXPR"
 
-#: main.cc:159
-msgid "evaluate scheme code"
-msgstr ""
-
-#. Bug in option parser: --output =foe is taken as an abbreviation
-#. for --output-format.
-#: main.cc:162
-msgid "FORMATs"
-msgstr ""
-
-#: main.cc:162
-msgid "dump FORMAT,...  Also as separate options:"
-msgstr ""
-
-#: main.cc:163
-#, fuzzy
-msgid "generate DVI (tex backend only)"
-msgstr "PDF üretir (öntanımlı)"
-
-#: main.cc:164
-msgid "generate PDF (default)"
-msgstr "PDF üretir (öntanımlı)"
-
-#: main.cc:165
-msgid "generate PNG"
-msgstr "PNG üretir"
-
-#: main.cc:166
-msgid "generate PostScript"
-msgstr "PostScript üretir"
-
-#: main.cc:167
-msgid "generate TeX (tex backend only)"
-msgstr ""
+#: main.cc:127 lily/main.cc:127
+msgid "set options, use -e '(ly:option-usage)' for help"
+msgstr "seçenekleri ayarlar, yardım için -e '(ly:option-usage)' seçeneğini kullanır"
 
-#: main.cc:168
-msgid "show this help and exit"
+#: main.cc:130 lily/main.cc:130
+msgid "select back-end to use"
 msgstr ""
 
-#: main.cc:169
+#: main.cc:132 lily/main.cc:132
 msgid "FIELD"
 msgstr "ALAN"
 
-#: main.cc:169
-#, fuzzy
-msgid ""
-"dump header field FIELD to file\n"
-"named BASENAME.FIELD"
+#: main.cc:132 lily/main.cc:132
+msgid "write header field to BASENAME.FIELD"
 msgstr "başlık alanını TEMELAD.ALANa yaz"
 
-#: main.cc:171
+#: main.cc:133 lily/main.cc:133
 msgid "add DIR to search path"
 msgstr "arama yoluna DİZİN'i ekle"
 
-#: main.cc:172
+#: main.cc:134 lily/main.cc:134
 msgid "use FILE as init file"
 msgstr "DOSYAyı init dosyası olarak kullanır"
 
-#: main.cc:174
-msgid "USER,GROUP,JAIL,DIR"
-msgstr ""
-
-#: main.cc:174
-msgid ""
-"chroot to JAIL, become USER:GROUP\n"
-"and cd into DIR"
-msgstr ""
+#: main.cc:137 lily/main.cc:137
+msgid "generate a preview"
+msgstr "önizleme üretir"
 
-#: main.cc:177
-#, fuzzy
-msgid "do not generate printed output"
-msgstr "PostScript çıktısı üretme"
+#: main.cc:138 lily/main.cc:138
+msgid "generate PNG"
+msgstr "PNG üretir"
 
-#: main.cc:178
-#, fuzzy
-msgid "write output to FILE (suffix will be added)"
-msgstr "çıktıyı DOSYAya yaz"
+#: main.cc:139 lily/main.cc:139
+msgid "generate PostScript"
+msgstr "PostScript üretir"
 
-#: main.cc:179
-#, fuzzy
-msgid "generate a preview of the first system"
-msgstr "ilk sistemin bir resmini yap"
+#: main.cc:140 lily/main.cc:140
+msgid "generate DVI"
+msgstr "DVI üretir"
 
-#: main.cc:180
-msgid "relocate using directory of lilypond program"
-msgstr ""
+#: main.cc:141 lily/main.cc:141
+msgid "generate PDF (default)"
+msgstr "PDF üretir (öntanımlı)"
 
-#: main.cc:181
-msgid ""
-"disallow unsafe Scheme and PostScript\n"
-"operations"
-msgstr ""
+#: main.cc:142 lily/main.cc:142
+msgid "generate TeX"
+msgstr "TeX üretir"
 
-#: main.cc:183
-#, fuzzy
-msgid "show version number and exit"
-msgstr "sürüm numarasını yazdır"
+#: main.cc:143 lily/main.cc:143
+msgid "run in safe mode"
+msgstr "emniyetli kipte çalıştır"
 
-#: main.cc:224
+#: main.cc:166 lily/main.cc:166
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1183,1620 +1238,746 @@ msgstr ""
 
 #  No version number or newline here.  It confuses help2man.
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:251
-#, fuzzy, c-format
-msgid "Usage: %s [OPTION]... FILE..."
+#. No version number or newline here.  It confuses help2man.
+#. No version number or newline here.  It confuses help2man.
+#. No version number or newline here.  It confuses help2man.
+#. No version number or newline here.  It confuses help2man.
+#. No version number or newline here.  It confuses help2man.
+#. No version number or newline here.  It confuses help2man.
+#. No version number or newline here.  It confuses help2man.
+#: main.cc:192 lily/main.cc:192
+#, c-format
+msgid "Usage: %s [OPTIONS]... FILE..."
 msgstr "Kullanım: %s [SEÇENEKLER]... DOSYA..."
 
-#: main.cc:253
+#: main.cc:194 lily/main.cc:194
 #, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Müziği diz ve/ya da DOSYAdan MIDIyi üret."
 
-#: main.cc:255
+#: main.cc:196 lily/main.cc:196
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond güzel müzik notasyonları üretir."
 
-#: main.cc:257
+#: main.cc:198 lily/main.cc:198
 #, c-format
 msgid "For more information, see %s"
 msgstr "Daha fazla bilgi için, %s'e bakın"
 
-#: main.cc:259
-#, c-format
-msgid "Options:"
-msgstr "Seçenekler:"
-
-#: main.cc:263
-#, fuzzy, c-format
-msgid "Report bugs via %s"
-msgstr ""
-"Yazılım hatalarını %s adresine,\n"
-"çeviri hatalarını <gnu-tr@belgeler.org> adresine bildirin."
-
-#: main.cc:309
-#, fuzzy, c-format
-msgid "expected %d arguments with jail, found: %u"
-msgstr "Piano pedalları için 3 dizgeye ihtiyaç duyar. Hiç pedal yapılmadı."
-
-#: main.cc:323
-#, fuzzy, c-format
-msgid "no such user: %s"
-msgstr "böyle bir ayar yok: `%s'"
-
-#: main.cc:325
-#, c-format
-msgid "cannot get user id from user name: %s: %s"
-msgstr ""
-
-#: main.cc:340
-#, fuzzy, c-format
-msgid "no such group: %s"
-msgstr "böyle bir bağlam yok: %s"
-
-#: main.cc:342
-#, fuzzy, c-format
-msgid "cannot get group id from group name: %s: %s"
-msgstr "`%s' `%s'ye dönüştürülemiyor "
-
-#: main.cc:350
-#, c-format
-msgid "cannot chroot to: %s: %s"
-msgstr ""
-
-#: main.cc:357
-#, fuzzy, c-format
-msgid "cannot change group id to: %d: %s"
-msgstr "`%s' `%s'ye dönüştürülemiyor "
-
-#: main.cc:363
-#, fuzzy, c-format
-msgid "cannot change user id to: %d: %s"
-msgstr "`%s' `%s'ye dönüştürülemiyor "
-
-#: main.cc:369
+#: main.cc:410 lily/main.cc:410 lily/main.cc:412
 #, c-format
-msgid "cannot change working directory to: %s: %s"
-msgstr ""
-
-#: main.cc:415
-#, c-format
-msgid "Evaluating %s"
-msgstr ""
+msgid "This option is for developers only."
+msgstr "Bu seçenek sadece  geliştiriciler içindir."
 
-#: main.cc:645
+#: main.cc:411 lily/main.cc:411 lily/main.cc:413
 #, c-format
-msgid "exception caught: %s"
-msgstr ""
-
-#. FIXME: constant error message.
-#: mark-engraver.cc:154
-msgid "rehearsalMark must have integer value"
-msgstr ""
+msgid "Read the sources for more information."
+msgstr "Daha fazla bilgi için kaynakları okuyun."
 
-#: mark-engraver.cc:160
-msgid "mark label must be a markup object"
-msgstr ""
+#: mensural-ligature-engraver.cc:248 mensural-ligature-engraver.cc:383
+#: lily/mensural-ligature-engraver.cc:248
+#: lily/mensural-ligature-engraver.cc:383
+msgid "unexpected case fall-through"
+msgstr "beklenmedik durum başarısızlığı"
 
-#: mensural-ligature-engraver.cc:85
+#: mensural-ligature-engraver.cc:259 lily/mensural-ligature-engraver.cc:259
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "2 taneden az kafalı bağ -> atlanıyor"
 
-#: mensural-ligature-engraver.cc:112
-#, fuzzy
-msgid "cannot determine pitch of ligature primitive -> skipping"
+#: mensural-ligature-engraver.cc:279 lily/mensural-ligature-engraver.cc:279
+msgid "can not determine pitch of ligature primitive -> skipping"
 msgstr "ilkel bağın perdesi saptanamıyor -> atlanıyor"
 
-#: mensural-ligature-engraver.cc:126
-#, fuzzy
-msgid "single note ligature - skipping"
-msgstr "bağ içinde ana duruş -> atlanıyor"
-
-#: mensural-ligature-engraver.cc:138
+#: mensural-ligature-engraver.cc:302 lily/mensural-ligature-engraver.cc:302
 msgid "prime interval within ligature -> skipping"
 msgstr "bağ içinde ana duruş -> atlanıyor"
 
-#: mensural-ligature-engraver.cc:150
-#, fuzzy
-msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
+#: mensural-ligature-engraver.cc:312 lily/mensural-ligature-engraver.cc:312
+msgid "mensural ligature: duration none of L, B, S -> skipping"
 msgstr "mensural bağ: süre L, B, S' den hiçbiri değil -> atlanıyor"
 
-#: mensural-ligature-engraver.cc:198
-msgid "semibrevis must be followed by another one -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:209
-msgid ""
-"semibreves can only appear at the beginning of a ligature,\n"
-"and there may be only zero or two of them"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:236
-msgid ""
-"invalid ligatura ending:\n"
-"when the last note is a descending brevis,\n"
-"the penultimate note must be another one,\n"
-"or the ligatura must be LB or SSB"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:356
-msgid "unexpected case fall-through"
-msgstr "beklenmedik durum başarısızlığı"
-
-#: mensural-ligature.cc:141
-#, fuzzy
-msgid "Mensural_ligature: unexpected case fall-through"
+#: mensural-ligature.cc:161 lily/mensural-ligature.cc:161
+msgid "Mensural_ligature:unexpected case fall-through"
 msgstr "Mensural_bağ:beklenmedik durum başarısızlığı"
 
-#: mensural-ligature.cc:192
-#, fuzzy
-msgid "Mensural_ligature: (join_right == 0)"
+#: mensural-ligature.cc:171 lily/mensural-ligature.cc:171
+msgid "Mensural_ligature: (join_left == 0)"
 msgstr "Mensural_bağ: [katılma_sol == 0]"
 
-#: midi-item.cc:152
+#: midi-item.cc:153 lily/midi-item.cc:153
 #, c-format
 msgid "no such MIDI instrument: `%s'"
 msgstr "böyle bir MIDI aracı yok: `%s'"
 
-#: midi-item.cc:285
-#, fuzzy, c-format
-msgid "experimental: temporarily fine tuning (of %d cents) a channel."
-msgstr "Deneysel: geçici olarak bir kanala ince akort yapılıyor (%d cents)."
-
-#: midi-stream.cc:28
-#, fuzzy, c-format
-msgid "cannot open for write: %s: %s"
-msgstr "dosya açılamıyor: `%s'"
-
-#: midi-stream.cc:44
-#, fuzzy, c-format
-msgid "cannot write to file: `%s'"
-msgstr "dosya yazılamıyor. `%s'"
-
-#: music-iterator.cc:171
-msgid "Sending non-event to context"
-msgstr ""
-
-#: music.cc:141
-#, fuzzy, c-format
-msgid "octave check failed; expected \"%s\", found: \"%s\""
-msgstr "oktav denetimi başarısız; beklenen %s, elde edilen: %s"
-
-#: music.cc:207
-#, fuzzy, c-format
-msgid "transposition by %s makes alteration larger than double"
-msgstr "%s ile transpozisyon ikiden büyük değişikliğe yol açar"
-
-#: new-fingering-engraver.cc:96
-msgid "cannot add text scripts to individual note heads"
-msgstr ""
-
-#: new-fingering-engraver.cc:239
-msgid "no placement found for fingerings"
-msgstr ""
-
-#: new-fingering-engraver.cc:240
-msgid "placing below"
-msgstr ""
-
-#: note-collision.cc:457
-#, fuzzy
-msgid "ignoring too many clashing note columns"
-msgstr "Çatışan notasütunları çok fazla. Yok sayılıyor."
-
-#: note-column.cc:124
-msgid "cannot have note heads and rests together on a stem"
-msgstr ""
-
-#: note-head.cc:63
-#, fuzzy, c-format
-msgid "none of note heads `%s' or `%s' found"
-msgstr "'%s'nin nota kafası bulunamadı"
-
-#: note-heads-engraver.cc:61
-msgid "NoteEvent without pitch"
-msgstr ""
-
-#: open-type-font.cc:33
-#, fuzzy, c-format
-msgid "cannot allocate %lu bytes"
-msgstr "dosya açılamıyor: `%s'"
+#: midi-item.cc:257 lily/midi-item.cc:257
+msgid "silly pitch"
+msgstr "saçma perde"
 
-#: open-type-font.cc:37
-#, fuzzy, c-format
-msgid "cannot load font table: %s"
-msgstr "yazı tipi bulunamıyor: `%s'"
-
-#: open-type-font.cc:98
+#: midi-item.cc:273 lily/midi-item.cc:273
 #, c-format
-msgid "unsupported font format: %s"
-msgstr ""
+msgid "Experimental: temporarily fine tuning (of %d cents) a channel."
+msgstr "Deneysel: geçici olarak bir kanala ince akort yapılıyor (%d cents)."
 
-#: open-type-font.cc:100
+#: midi-stream.cc:40 lily/midi-stream.cc:40
 #, c-format
-msgid "unknown error: %d reading font file: %s"
-msgstr ""
+msgid "could not write file: `%s'"
+msgstr "dosya yazılamıyor. `%s'"
 
-#: open-type-font.cc:173 open-type-font.cc:297
-#, c-format
-msgid "FT_Get_Glyph_Name() returned error: %u"
-msgstr ""
+#  music for the softenon children?
+#.
+#. music for the softenon children?
+#.
+#.
+#. music for the softenon children?
+#.
+#.
+#. music for the softenon children?
+#.
+#.
+#. music for the softenon children?
+#.
+#.
+#. music for the softenon children?
+#.
+#.
+#. music for the softenon children?
+#.
+#.
+#. music for the softenon children?
+#.
+#.
+#. music for the softenon children?
+#.
+#: new-fingering-engraver.cc:155 lily/new-fingering-engraver.cc:155
+msgid "music for the martians."
+msgstr "merihliler için müzik."
 
-#: page-turn-page-breaking.cc:205
-msgid ""
-"cannot fit the first page turn onto a single page.  Consider setting first-"
-"page-number to an even number."
-msgstr ""
+#: new-fingering-engraver.cc:235 lily/new-fingering-engraver.cc:235
+msgid "Fingerings are also not down?! Putting them down anyway."
+msgstr "Parmaklaçalmalar da yüklenmedi?! Yine de yükleniyor."
 
-#: page-turn-page-breaking.cc:218
+#: new-lyric-combine-music-iterator.cc:245
+#: lily/new-lyric-combine-music-iterator.cc:245
 #, c-format
-msgid "Calculating page and line breaks (%d possible page breaks)..."
-msgstr ""
+msgid "cannot find Voice `%s'"
+msgstr "`%s' Sesi bulunamıyor"
 
-#: page-turn-page-breaking.cc:236 paper-score.cc:154
-msgid "Drawing systems..."
-msgstr ""
+#: note-collision.cc:413 lily/note-collision.cc:413
+msgid "Too many clashing notecolumns.  Ignoring them."
+msgstr "Çatışan notasütunları çok fazla. Yok sayılıyor."
 
-#: pango-font.cc:181
+#: note-head.cc:45 lily/note-head.cc:45
 #, c-format
-msgid ""
-"Glyph has no name, but font supports glyph naming.\n"
-"Skipping glyph U+%0X, file %s"
-msgstr ""
-
-#  no ps header?
-#: pango-font.cc:224
-#, fuzzy, c-format
-msgid "no PostScript font name for font `%s'"
-msgstr "bir PostScript dosyası değil: `%s'"
-
-#: pango-font.cc:272
-msgid "FreeType face has no PostScript font name"
-msgstr ""
-
-#: paper-outputter-scheme.cc:33
-#, fuzzy, c-format
-msgid "Layout output to `%s'..."
-msgstr "`%s' çıktısı`%s'ye..."
+msgid "note head `%s' not found"
+msgstr "'%s'nin nota kafası bulunamadı"
 
-#: paper-score.cc:105
-msgid "Calculating line breaks..."
-msgstr "Satır bölünmeleri sayılıyor..."
+#: paper-outputter.cc:116 lily/paper-outputter.cc:116
+#, c-format
+msgid "Paper output to `%s'..."
+msgstr "Kağıt çıktısı `%s'ye..."
 
-#: paper-score.cc:118
+#: paper-score.cc:68 lily/paper-score.cc:68
 #, c-format
 msgid "Element count %d (spanners %d) "
 msgstr "Öğe sayısı %d (anahtarlar %d)"
 
-#: paper-score.cc:122
+#: paper-score.cc:72 lily/paper-score.cc:72
 msgid "Preprocessing graphical objects..."
 msgstr "Grafik nesneler önişleme tabi tutuluyor..."
 
-#: parse-scm.cc:83
+#: parse-scm.cc:77 lily/parse-scm.cc:77 lily/parse-scm.cc:84
 msgid "GUILE signaled an error for the expression beginning here"
 msgstr "GULIE burada başlayan ifadede bir hata olduğunu bildiriyor"
 
-#: percent-repeat-engraver.cc:200
+#: percent-repeat-engraver.cc:110 lily/percent-repeat-engraver.cc:110
+msgid "Don't know how to handle a percent repeat of this length."
+msgstr "Bu uzunluktaki bir yüzde tekrarıyla nasıl baş edeceğini bilmiyor."
+
+#: percent-repeat-engraver.cc:170 lily/percent-repeat-engraver.cc:170
 msgid "unterminated percent repeat"
 msgstr "sonlandırılmamaış yüzde tekrarı"
 
-#: performance.cc:45
-#, fuzzy
-msgid "Track..."
+#: percent-repeat-iterator.cc:53 lily/percent-repeat-iterator.cc:53
+msgid "no one to print a percent"
+msgstr "bir yüzde yazdıracak kimse yok"
+
+#: performance.cc:50 lily/performance.cc:50
+msgid "Track ... "
 msgstr "İz... "
 
-#: performance.cc:74
-msgid "MIDI channel wrapped around"
-msgstr ""
+#: performance.cc:93 lily/performance.cc:93
+msgid "Creator: "
+msgstr "Oluşturucu: "
 
-#: performance.cc:75
-msgid "remapping modulo 16"
-msgstr ""
+#: performance.cc:113 lily/performance.cc:113
+msgid "at "
+msgstr "-de"
 
-#: performance.cc:103
+#: performance.cc:167 lily/performance.cc:167
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "MIDI çıktısı `%s'ye..."
 
-#: phrasing-slur-engraver.cc:146
-msgid "unterminated phrasing slur"
-msgstr "sonlandırılmamış, melodiyi ayrıştırarak çalan ses kaydırma imi"
+#: phrasing-slur-engraver.cc:99 slur-engraver.cc:114
+#: lily/phrasing-slur-engraver.cc:99 lily/slur-engraver.cc:114
+msgid "unterminated slur"
+msgstr "sonlandırılmamış ses kaydırma imi"
 
-#: piano-pedal-engraver.cc:286
-#, fuzzy, c-format
-msgid "expect 3 strings for piano pedals, found: %ld"
+#: piano-pedal-engraver.cc:237 lily/piano-pedal-engraver.cc:237
+msgid "Need 3 strings for piano pedals. No pedal made. "
 msgstr "Piano pedalları için 3 dizgeye ihtiyaç duyar. Hiç pedal yapılmadı."
 
-#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
-#: piano-pedal-performer.cc:93
+#: piano-pedal-engraver.cc:252 piano-pedal-engraver.cc:267
+#: piano-pedal-performer.cc:82 lily/piano-pedal-engraver.cc:252
+#: lily/piano-pedal-engraver.cc:267 lily/piano-pedal-performer.cc:82
 #, c-format
-msgid "cannot find start of piano pedal: `%s'"
+msgid "can't find start of piano pedal: `%s'"
 msgstr "piano pedalının başlangıcı bulunamıyor: `%s'"
 
-#: piano-pedal-engraver.cc:347
+#: piano-pedal-engraver.cc:318 lily/piano-pedal-engraver.cc:318
 #, c-format
-msgid "cannot find start of piano pedal bracket: `%s'"
+msgid "can't find start of piano pedal bracket: `%s'"
 msgstr "piyano pedalı köşeli ayracının başlangıcı bulunamıyor: '%s'"
 
-#: program-option.cc:205
-#, fuzzy, c-format
-msgid "no such internal option: %s"
-msgstr "Bilinmeyen iç seçenek: %s"
-
-#: property-iterator.cc:74
-#, fuzzy, c-format
-msgid "not a grob name, `%s'"
+#: property-iterator.cc:94 lily/property-iterator.cc:94
+#, c-format
+msgid "Not a grob name, `%s'."
 msgstr "Bir grob adı değil, '%s'."
 
-#: relative-octave-check.cc:38
-msgid "Failed octave check, got: "
-msgstr "Oktav denetimi başarısız, alındı: "
+#: quote-iterator.cc:108 lily/quote-iterator.cc:124 lily/quote-iterator.cc:125
+msgid "No events found for \\quote"
+msgstr ""
 
-#: relocate.cc:44
-#, fuzzy, c-format
-msgid "Setting %s to %s"
-msgstr "`%s' yazılıyor..."
+#: quote-iterator.cc:183 lily/quote-iterator.cc:199 lily/quote-iterator.cc:204
+#, c-format
+msgid "In quotation: junking event %s"
+msgstr "Tırnak içinde: kullanılmayan olay %s"
 
-#: relocate.cc:59
-#, fuzzy, c-format
-msgid "no such file: %s for %s"
-msgstr "böyle bir bağlam yok: %s"
+#: relative-octave-check.cc:25 lily/relative-octave-check.cc:25
+msgid "Failed octave check, got: "
+msgstr "Oktav denetimi başarısız, alındı: "
 
-#: relocate.cc:69 relocate.cc:87
-#, fuzzy, c-format
-msgid "no such directory: %s for %s"
-msgstr "böyle bir bağlam yok: %s"
+#: rest-collision.cc:132 lily/rest-collision.cc:132
+msgid "rest direction not set.  Cannot resolve collision."
+msgstr "durak yönü ayarlı değil. Çatışma çözülemiyor."
 
-#: relocate.cc:79
-#, c-format
-msgid "%s=%s (prepend)\n"
-msgstr ""
+#: rest-collision.cc:144 rest-collision.cc:187 lily/rest-collision.cc:144
+#: lily/rest-collision.cc:187
+msgid "too many colliding rests"
+msgstr "çatışan duraklar çok fazla"
 
-#: relocate.cc:99
+#: rest.cc:136 lily/rest.cc:136
 #, c-format
-msgid "Relocation: compile prefix=%s, new prefix=%s"
-msgstr ""
+msgid "rest `%s' not found"
+msgstr "`%s' durağı bulunamadı"
 
-#: relocate.cc:129
+#: scm-option.cc:56 lily/scm-option.cc:56
 #, c-format
-msgid "Relocation: framework_prefix=%s"
-msgstr ""
+msgid "lilypond -e EXPR means:"
+msgstr "lilypond -e EXPR anlamı:"
 
-#: relocate.cc:169
+#: scm-option.cc:58 lily/scm-option.cc:58
 #, c-format
-msgid "Relocation: is absolute: argv0=%s"
-msgstr ""
+msgid "  Evalute the Scheme EXPR before parsing any .ly files."
+msgstr "  Herhangi bir .ly dosyasını ayrıştırmadan önce Scheme EXPR işlenir."
 
-#: relocate.cc:176
+#: scm-option.cc:60 lily/scm-option.cc:60
 #, c-format
-msgid "Relocation: from cwd: argv0=%s"
-msgstr ""
+msgid "  Multiple -e options may be given, they will be evaluated sequentially."
+msgstr "  Çok sayıda -e seçeneği verilebilir, bunlar sırayla değerlendirilir."
 
-#: relocate.cc:185
+#: scm-option.cc:62 lily/scm-option.cc:62
 #, c-format
-msgid ""
-"Relocation: from PATH=%s\n"
-"argv0=%s"
-msgstr ""
-
-#: relocate.cc:354
-#, fuzzy, c-format
-msgid "Relocation file: %s"
-msgstr "dosya açılamıyor: `%s'"
-
-#: relocate.cc:390
-#, c-format
-msgid "Unknown relocation command %s"
-msgstr ""
-
-#: rest-collision.cc:151
-msgid "cannot resolve rest collision: rest direction not set"
-msgstr ""
-
-#: rest-collision.cc:165 rest-collision.cc:210
-msgid "too many colliding rests"
-msgstr "çatışan duraklar çok fazla"
-
-#: rest.cc:144
-#, c-format
-msgid "rest `%s' not found"
-msgstr "`%s' durağı bulunamadı"
-
-#: score-engraver.cc:67
-#, fuzzy, c-format
-msgid "cannot find `%s'"
-msgstr "`%s' bulunamıyor"
-
-#: score-engraver.cc:69
-#, fuzzy
-msgid "Music font has not been installed properly."
-msgstr "Müzik yazıtipi uygun biçimde yüklenmedi.  Durduruluyor"
-
-#: score-engraver.cc:71
-#, fuzzy, c-format
-msgid "Search path `%s'"
-msgstr "(arama yolu: `%s')"
-
-#: score-engraver.cc:73
-msgid "Aborting"
-msgstr ""
-
-#: score.cc:225
-#, fuzzy
-msgid "already have music in score"
-msgstr "Notada zaten müzik var"
-
-#: score.cc:226
-msgid "this is the previous music"
-msgstr ""
-
-#: score.cc:231
-msgid "errors found, ignoring music expression"
-msgstr ""
-
-#. FIXME:
-#: script-engraver.cc:102
-#, fuzzy
-msgid "do not know how to interpret articulation: "
-msgstr "Sesletimin nasıl yorumlanacağı bilinmiyor: "
-
-#: script-engraver.cc:103
-#, fuzzy
-msgid "scheme encoding: "
-msgstr "Program kodlaması: "
-
-#: simple-spacer.cc:375
-#, c-format
-msgid "No spring between column %d and next one"
-msgstr "%d sütunu ve sonraki sütun arasında kaynak yok."
-
-#: slur-engraver.cc:83 tuplet-engraver.cc:75
-#, c-format
-msgid "direction of %s invalid: %d"
-msgstr ""
-
-#: slur-engraver.cc:157
-msgid "unterminated slur"
-msgstr "sonlandırılmamış ses kaydırma imi"
-
-#: slur-engraver.cc:166
-#, fuzzy
-msgid "cannot end slur"
-msgstr "bulunamıyor: `%s'"
-
-#: source-file.cc:74
-#, c-format
-msgid "expected to read %d characters, got %d"
-msgstr ""
-
-#: staff-symbol-engraver.cc:62
-msgid "staff-span event has no direction"
-msgstr ""
-
-#: stem-engraver.cc:92
-msgid "tremolo duration is too long"
-msgstr "tremolo süresi fazla uzun"
-
-#. FIXME:
-#: stem-engraver.cc:129
-#, fuzzy, c-format
-msgid "adding note head to incompatible stem (type = %d)"
-msgstr "uyuşmayan [tür= %d] köküne nota kafası ekleniyor"
-
-#: stem-engraver.cc:131
-msgid "maybe input should specify polyphonic voices"
-msgstr ""
-
-#: stem.cc:105
-#, fuzzy
-msgid "weird stem size, check for narrow beams"
-msgstr "Garip kök boyutu; dar ışınları denetler"
-
-#: stem.cc:641
-#, c-format
-msgid "flag `%s' not found"
-msgstr "`%s' bayrağı bulunamadı"
-
-#: stem.cc:652
-#, c-format
-msgid "flag stroke `%s' not found"
-msgstr "'%s'nin bayrak vuruşu bulunamadı "
-
-#: system.cc:180
-#, c-format
-msgid "Element count %d."
-msgstr "Öğe sayısı %d."
-
-#: system.cc:276
-#, c-format
-msgid "Grob count %d"
-msgstr "Grob sayısı %d"
-
-#: text-spanner-engraver.cc:61
-msgid "cannot find start of text spanner"
-msgstr "metin anahtarının başlangıcı bulunamıyor"
-
-#: text-spanner-engraver.cc:73
-msgid "already have a text spanner"
-msgstr "zaten bir metin anahtarı var"
-
-#: text-spanner-engraver.cc:133
-msgid "unterminated text spanner"
-msgstr "sonlandırılmamış metin anahtarı"
-
-#: tie-engraver.cc:264
-msgid "lonely tie"
-msgstr "yalnız bağ"
-
-#  Todo: should make typecheck?
-#  OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
-#.
-#. Todo: should make typecheck?
-#.
-#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
-#.
-#: time-signature-engraver.cc:64
-#, fuzzy, c-format
-msgid "strange time signature found: %d/%d"
-msgstr "garip zaman imzası bulundu %d/%d."
-
-#  If there is no such symbol, we default to the numbered style.
-#  (Here really with a warning!)
-#. If there is no such symbol, we default to the numbered style.
-#. (Here really with a warning!)
-#: time-signature.cc:83
-#, c-format
-msgid "time signature symbol `%s' not found; reverting to numbered style"
-msgstr ""
-"'%s'nin zaman imza işareti bulunamadı: numaralı biçime yeniden dönülüyor "
-
-#: translator-ctors.cc:52
-#, c-format
-msgid "unknown translator: `%s'"
-msgstr "bilinmeyen çevirmen: `%s'"
-
-#: translator-group.cc:151
-#, c-format
-msgid "cannot find: `%s'"
-msgstr "bulunamıyor: `%s'"
-
-#: translator.cc:332
-#, c-format
-msgid "Two simultaneous %s events, junking this one"
-msgstr ""
-
-#: translator.cc:333
-#, c-format
-msgid "Previous %s event here"
-msgstr ""
-
-#: trill-spanner-engraver.cc:68
-#, fuzzy
-msgid "cannot find start of trill spanner"
-msgstr "metin anahtarının başlangıcı bulunamıyor"
-
-#: trill-spanner-engraver.cc:80
-#, fuzzy
-msgid "already have a trill spanner"
-msgstr "zaten bir metin anahtarı var"
-
-#: vaticana-ligature-engraver.cc:388
-#, c-format
-msgid ""
-"ignored prefix (es) `%s' of this head according to restrictions of the "
-"selected ligature style"
-msgstr ""
-"seçilen bağ biçiminin kısıtlamalarına göre bu kafanın [es] '%s' öneki yok "
-"sayıldı"
-
-#: vaticana-ligature-engraver.cc:714
-#, fuzzy, c-format
-msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
-msgstr "Vaticana_bağ_nakkaş: ayar boşlukbırakma-artırma = %f': ptr=%ul"
-
-#: vaticana-ligature.cc:84
-msgid "flexa-height undefined; assuming 0"
-msgstr ""
-
-#: vaticana-ligature.cc:89
-msgid "ascending vaticana style flexa"
-msgstr "vaticana biçimini flexaya yükseltiyor"
-
-#: vaticana-ligature.cc:177
-msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
-msgstr "Vaticana_bağ: sıfır bağlantı [delta_perde == 0]"
-
-#. fixme: be more verbose.
-#: volta-engraver.cc:144
-#, fuzzy
-msgid "cannot end volta spanner"
-msgstr "metin anahtarının başlangıcı bulunamıyor"
-
-#: volta-engraver.cc:154
-#, fuzzy
-msgid "already have a volta spanner, ending that one prematurely"
-msgstr "Zaten bir volta anahtarı var. Vakitsiz durduruluyor."
-
-#: volta-engraver.cc:158
-#, fuzzy
-msgid "also already have an ended spanner"
-msgstr "zaten bir metin anahtarı var"
-
-#: volta-engraver.cc:159
-#, fuzzy
-msgid "giving up"
-msgstr "Vazgeçiliyor"
-
-#: parser.yy:702
-msgid "\\paper cannot be used in \\score, use \\layout instead"
-msgstr ""
-
-#: parser.yy:726
-msgid "need \\paper for paper block"
-msgstr ""
-
-#: parser.yy:1172
-msgid "Grob name should be alphanumeric"
-msgstr ""
-
-#: parser.yy:1475
-#, fuzzy
-msgid "second argument must be pitch list"
-msgstr "İkinci argüman perde listesi olmalı."
-
-#: parser.yy:1502 parser.yy:1507 parser.yy:1972
-#, fuzzy
-msgid "have to be in Lyric mode for lyrics"
-msgstr "Güfteler için Lyric kipinde olunmalı"
-
-#: parser.yy:1604
-#, fuzzy
-msgid "expecting string as script definition"
-msgstr "Betik tanımı olarak dizge bekleniyor"
-
-#: parser.yy:1759 parser.yy:1809
-#, c-format
-msgid "not a duration: %d"
-msgstr "bir süre değil: %d"
-
-#: parser.yy:1926
-#, fuzzy
-msgid "have to be in Note mode for notes"
-msgstr "Notalar için Nota kipinde olmalıdır"
-
-#: parser.yy:1987
-#, fuzzy
-msgid "have to be in Chord mode for chords"
-msgstr "Akortlar için Akort kipinde olmalıdır"
-
-#: lexer.ll:176
-msgid "stray UTF-8 BOM encountered"
-msgstr ""
-
-#: lexer.ll:180
-msgid "Skipping UTF-8 BOM"
-msgstr ""
-
-#: lexer.ll:235
-#, fuzzy, c-format
-msgid "Renaming input to: `%s'"
-msgstr "`%s' veri yolu açılıyor"
-
-#: lexer.ll:252
-msgid "quoted string expected after \\version"
-msgstr ""
-
-#: lexer.ll:256
-msgid "quoted string expected after \\sourcefilename"
-msgstr ""
-
-#: lexer.ll:260
-msgid "integer expected after \\sourcefileline"
-msgstr ""
-
-#: lexer.ll:273
-msgid "EOF found inside a comment"
-msgstr "EOF bir açıklamanın içinde bulundu"
-
-#: lexer.ll:288
-msgid "\\maininput not allowed outside init files"
-msgstr "\\anagirdi init dosyları dışında kabul edilmez"
-
-#: lexer.ll:312
-#, c-format
-msgid "wrong or undefined identifier: `%s'"
-msgstr "yanlış ya da tanımlanmamış tanıtıcı: `%s' "
-
-#. backup rule
-#: lexer.ll:321
-msgid "end quote missing"
-msgstr ""
-
-#: lexer.ll:466
-msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Şarkı sözü sonunda ayraç bulundu. Bir boşluk mu unuttunuz?"
-
-#: lexer.ll:559
-msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Biçimlemenin sonunda ayraç bulundu. Bir boşluk bırakmayı mı unuttunuz?"
-
-#: lexer.ll:659
-#, c-format
-msgid "invalid character: `%c'"
-msgstr "geçersiz karakter: `%c'"
-
-#: lexer.ll:774 lexer.ll:775
-#, c-format
-msgid "unknown escaped string: `\\%s'"
-msgstr "bilinmeyen kaçmış dizge: '\\%s'"
-
-#: lexer.ll:880 lexer.ll:881
-#, c-format
-msgid "file too old: %s (oldest supported: %s)"
-msgstr ""
-
-#: lexer.ll:881 lexer.ll:882
-#, fuzzy
-msgid "consider updating the input with the convert-ly script"
-msgstr "Girdiyi convert-ly betiği ile güncellemeyi dikkate alınız"
-
-#: lexer.ll:887 lexer.ll:888
-#, c-format
-msgid "program too old: %s (file requires: %s)"
-msgstr ""
-
-#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
-#, scheme-format
-msgid "Invoking `~a'..."
-msgstr "`~a' çağrılıyor..."
-
-#: backend-library.scm:24
-#, fuzzy, scheme-format
-msgid "`~a' failed (~a)"
-msgstr "`%s' başarısız (%d)"
-
-#: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, scheme-format
-msgid "Converting to `~a'..."
-msgstr "`~a'ya değiştiriliyor..."
-
-#: backend-library.scm:108
-#, fuzzy, scheme-format
-msgid "Converting to ~a..."
-msgstr "`~a'ya değiştiriliyor..."
-
-#: backend-library.scm:145
-#, scheme-format
-msgid "Writing header field `~a' to `~a'..."
-msgstr ""
-
-#: define-context-properties.scm:20 define-grob-properties.scm:10
-#: define-music-properties.scm:10
-#, scheme-format
-msgid "symbol ~S redefined"
-msgstr ""
-
-#: define-event-classes.scm:119
-#, scheme-format
-msgid "event class ~A seems to be unused"
-msgstr ""
-
-#. should be programming-error
-#: define-event-classes.scm:125
-#, scheme-format
-msgid "translator listens to nonexisting event class ~A"
-msgstr ""
-
-#: define-markup-commands.scm:255
-msgid "no systems found in \\score markup, does it have a \\layout block?"
-msgstr ""
-
-#: define-markup-commands.scm:1297
-#, fuzzy, scheme-format
-msgid "not a valid duration string: ~a"
-msgstr "bir süre değil: %d"
-
-#: define-music-types.scm:751
-#, scheme-format
-msgid "symbol expected: ~S"
-msgstr ""
-
-#: define-music-types.scm:754
-#, fuzzy, scheme-format
-msgid "cannot find music object: ~S"
-msgstr "Müzik bulunamıyor"
-
-#: define-music-types.scm:774
-#, fuzzy, scheme-format
-msgid "unknown repeat type `~S'"
-msgstr "bilinmeyen küme tarzı `%s'"
-
-#: define-music-types.scm:775
-msgid "See music-types.scm for supported repeats"
-msgstr ""
-
-#: document-backend.scm:91
-#, scheme-format
-msgid "pair expected in doc ~s"
-msgstr ""
-
-#: document-backend.scm:135
-#, fuzzy, scheme-format
-msgid "cannot find interface for property: ~S"
-msgstr "öntanımlı yazı tipi bulunamıyor: `%s'"
-
-#: document-backend.scm:145
-#, fuzzy, scheme-format
-msgid "unknown Grob interface: ~S"
-msgstr "Bilinmeyen arabirim `%s'"
-
-#: documentation-lib.scm:45
-#, fuzzy, scheme-format
-msgid "Processing ~S..."
-msgstr "İşleniyor..."
-
-#: documentation-lib.scm:150
-#, fuzzy, scheme-format
-msgid "Writing ~S..."
-msgstr "`%s' yazılıyor..."
-
-#: documentation-lib.scm:172
-#, fuzzy, scheme-format
-msgid "cannot find description for property ~S (~S)"
-msgstr "öntanımlı yazı tipi bulunamıyor: `%s'"
-
-#: framework-eps.scm:91 framework-eps.scm:92
-#, fuzzy, scheme-format
-msgid "Writing ~a..."
-msgstr "`%s' yazılıyor..."
-
-#: framework-ps.scm:279
-#, scheme-format
-msgid "cannot embed ~S=~S"
-msgstr ""
-
-#: framework-ps.scm:332
-#, scheme-format
-msgid "cannot extract file matching ~a from ~a"
-msgstr ""
-
-#: framework-ps.scm:349
-#, fuzzy, scheme-format
-msgid "do not know how to embed ~S=~S"
-msgstr "Sesletimin nasıl yorumlanacağı bilinmiyor: "
-
-#: framework-ps.scm:380
-#, fuzzy, scheme-format
-msgid "do not know how to embed font ~s ~s ~s"
-msgstr "Sesletimin nasıl yorumlanacağı bilinmiyor: "
-
-#: framework-ps.scm:729
-#, scheme-format
-msgid "cannot convert <stdout> to ~S"
-msgstr ""
-
-#: framework-ps.scm:748 framework-ps.scm:751
-#, scheme-format
-msgid "cannot generate ~S using the postscript back-end"
-msgstr ""
-
-#: framework-ps.scm:758
-msgid ""
-"\n"
-"The PostScript backend does not support the 'classic'\n"
-"framework. Use the EPS backend instead,\n"
-"\n"
-"  lilypond -b eps <file>\n"
-"\n"
-"or remove the lilypond-book specific settings from the input.\n"
-msgstr ""
-
-#: framework-tex.scm:360
-#, fuzzy, scheme-format
-msgid "TeX file name must not contain whitespace: `~a'"
-msgstr "dosyaadı boşluk içermemeli: `%s'"
-
-#: layout-beam.scm:29
-#, scheme-format
-msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
-msgstr ""
-
-#: layout-beam.scm:46
-#, scheme-format
-msgid "Error in beam quanting.  Expected ~S 0, found ~S."
-msgstr ""
-
-#: layout-page-layout.scm:357
-#, fuzzy
-msgid "Calculating page breaks..."
-msgstr "Satır bölünmeleri sayılıyor..."
-
-#: lily-library.scm:593
-#, fuzzy, scheme-format
-msgid "unknown unit: ~S"
-msgstr "bilinmeyen çevirmen: `%s'"
-
-#: lily-library.scm:626
-#, scheme-format
-msgid "no \\version statement found, please add~afor future compatibility"
-msgstr ""
-
-#: lily-library.scm:633
-msgid "old relative compatibility not used"
-msgstr ""
-
-#: lily.scm:144
-#, fuzzy, scheme-format
-msgid "cannot find: ~A"
-msgstr "bulunamıyor: `%s'"
-
-#: lily.scm:209
-#, scheme-format
-msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
-msgstr ""
-
-#: lily.scm:525 lily.scm:589
-#, scheme-format
-msgid "failed files: ~S"
-msgstr ""
-
-#: lily.scm:579
-#, fuzzy, scheme-format
-msgid "Redirecting output to ~a..."
-msgstr "bağımlılıklar `%s'ye çıktılanıyor..."
-
-#: ly-syntax-constructors.scm:40
-msgid "Music head function must return Music object"
-msgstr ""
-
-#: ly-syntax-constructors.scm:136
-#, scheme-format
-msgid "Invalid property operation ~a"
-msgstr ""
-
-#: markup.scm:123
-#, scheme-format
-msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
-msgstr ""
-
-#: markup.scm:129
-#, scheme-format
-msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
-msgstr ""
-
-#: music-functions.scm:213
-#, fuzzy
-msgid "More alternatives than repeats.  Junking excess alternatives"
-msgstr "Tekrarlardan çok seçenek. Kullanılmayan fazla seşenekler. "
-
-#: music-functions.scm:232
-#, scheme-format
-msgid "expecting 2 elements for chord tremolo, found ~a"
-msgstr ""
-
-#: music-functions.scm:538
-#, scheme-format
-msgid "music expected: ~S"
-msgstr ""
-
-#. FIXME: uncomprehensable message
-#: music-functions.scm:589
-#, scheme-format
-msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
-msgstr ""
-
-#: music-functions.scm:748
-#, fuzzy, scheme-format
-msgid "cannot find quoted music: `~S'"
-msgstr "Müzik bulunamıyor"
-
-#: music-functions.scm:942
-#, fuzzy, scheme-format
-msgid "unknown accidental style: ~S"
-msgstr "bilinmeyen rastlantı yok sayılıyor: %s"
-
-#: output-ps.scm:315
-msgid "utf-8-string encountered in PS backend"
-msgstr ""
-
-#: output-svg.scm:42
-#, scheme-format
-msgid "undefined: ~S"
-msgstr ""
-
-#: output-svg.scm:132
-#, scheme-format
-msgid "cannot decypher Pango description: ~a"
-msgstr ""
-
-#  How to shut up this warning, when Voice_devnull_engraver has
-#  eaten start event?
-#: output-tex.scm:98
-#, fuzzy, scheme-format
-msgid "cannot find ~a in ~a"
-msgstr "ses kaydırma iminin başlangıcı bulunamıyor"
-
-#: paper.scm:69
-msgid "Not in toplevel scope"
-msgstr ""
-
-#: paper.scm:117
-#, scheme-format
-msgid "This is not a \\layout {} object, ~S"
-msgstr ""
-
-#: paper.scm:129
-#, scheme-format
-msgid "Unknown papersize: ~a"
-msgstr ""
-
-#. TODO: should raise (generic) exception with throw, and catch
-#. that in parse-scm.cc
-#: paper.scm:144
-msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
-msgstr ""
-
-#: parser-clef.scm:126
-#, fuzzy, scheme-format
-msgid "unknown clef type `~a'"
-msgstr "bilinmeyen küme tarzı `%s'"
-
-#: parser-clef.scm:127
-msgid "see scm/clef.scm for supported clefs"
-msgstr ""
-
-#: ps-to-png.scm:88
-#, fuzzy, scheme-format
-msgid "~a exited with status: ~S"
-msgstr "komut %d değeriyle sonlandı"
-
-#: to-xml.scm:190
-#, fuzzy, scheme-format
-msgid "assertion failed: ~S"
-msgstr "LaTeX başarısız oldu."
-
-#~ msgid "silly pitch"
-#~ msgstr "saçma perde"
-
-#, fuzzy
-#~ msgid "show warranty"
-#~ msgstr "garantiyi ve telif hakkını göster"
-
-#, fuzzy
-#~ msgid ""
-#~ "Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-#~ "\n"
-#~ "Example usage:\n"
-#~ "\n"
-#~ " lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-#~ " lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-#~ " lilypond-book --process='lilypond -I include' BOOK\n"
-#~ msgstr ""
-#~ "LilyPond'un küçük  parçalarını karma HTML, LaTeX ya da texinfo "
-#~ "belgelerinde\n"
-#~ "çalıştırır. \n"
-#~ " Örnek kullanım:\n"
-#~ "\n"
-#~ "    lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" KİTAP\n"
-#~ "    lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -"
-#~ "\"KİTAP\n"
-#~ "    lilypond-book --process='lilypond -I include' KİTAP\n"
-#~ "\n"
-
-#  temp_dir = os.path.join (original_dir,  '%s.dir' % program_name)
-#  original_dir = os.getcwd ()
-#  keep_temp_dir_p = 0
-#~ msgid "Convert MIDI to LilyPond source."
-#~ msgstr "MIDI'yi LilyPond kaynağına dönüştür."
-
-#, fuzzy
-#~ msgid "example"
-#~ msgstr "Örnek:"
-
-#, fuzzy
-#~ msgid "loading default font"
-#~ msgstr "Öntanımlı yazı tipi yükleniyor "
-
-#~ msgid "cannot find default font: `%s'"
-#~ msgstr "öntanımlı yazı tipi bulunamıyor: `%s'"
-
-#~ msgid "crescendo too small"
-#~ msgstr "kreşendo çok küçük"
-
-#~ msgid "print this help"
-#~ msgstr "bu yardımı yazdır"
-
-#, fuzzy
-#~ msgid "cannot open file %s"
-#~ msgstr "dosya açılamıyor: `%s'"
-
-#~ msgid "Incorrect lilypond version: %s (%s, %s)"
-#~ msgstr "Hatalı lilypond sürümü: %s (%s, %s)"
-
-#~ msgid "no one to print a tremolos"
-#~ msgstr "bir tremolo yazdıracak kimse yok"
-
-#~ msgid "gotcha: ptr=%ul"
-#~ msgstr "hata: ptr=%ul"
-
-#~ msgid "distance=%f"
-#~ msgstr "uzaklık=%f"
-
-#, fuzzy
-#~ msgid "junking event: `%s'"
-#~ msgstr "Kullanılmayan olay: `%s'"
-
-#~ msgid "no one to print a repeat brace"
-#~ msgstr "bir tekrar ayracını yazdıracak kimse yok"
-
-#~ msgid "cannot find `%s' context"
-#~ msgstr "`%s'nin bağlamı bulunamıyor"
-
-#~ msgid "Optimal demerits: %f"
-#~ msgstr "İdeal kusurlar: %f"
-
-#, fuzzy
-#~ msgid "no feasible line breaking found"
-#~ msgstr "Hiçbir uygulanabilir satır bölünmesi bulunamadı"
-
-#  music for the softenon children?
-#~ msgid "music for the martians."
-#~ msgstr "merihliler için müzik."
-
-#~ msgid "no one to print a percent"
-#~ msgstr "bir yüzde yazdıracak kimse yok"
-
-#~ msgid "Creator: "
-#~ msgstr "Oluşturucu: "
-
-#~ msgid "at "
-#~ msgstr "-de"
-
-#, fuzzy
-#~ msgid "in quotation: junking event %s"
-#~ msgstr "Tırnak içinde: kullanılmayan olay %s"
-
-#~ msgid "Global shortest duration is %s"
-#~ msgstr "En kısa genel süre %sdir"
-
-#  Not using ngettext's plural feature here, as this message is
-#  more of a programming error.
-#~ msgid "TFM header of `%s' has only %u word (s)"
-#~ msgstr "'%s'nin TFM kafasının sadece %u kelimesi var [s]"
-
-#~ msgid ""
-#~ "%s: TFM file has %u parameters, which is more than the %u I can handle"
-#~ msgstr ""
-#~ "%s: TFM dosyası %u değiştirgeye sahip ve bu başa çıkabileceğim %u'dan "
-#~ "fazla."
-
-#~ msgid "cannot find ascii character: %d"
-#~ msgstr "ascii karakteri bulunamıyor: %d"
-
-#~ msgid "no one to print a tuplet start bracket"
-#~ msgstr "bir tuplet başlangıç köşeli ayracı yazdıracak kimse yok"
-
-#, fuzzy
-#~ msgid "unterminated trill spanner"
-#~ msgstr "sonlandırılmamış metin anahtarı"
-
-#, fuzzy
-#~ msgid "identifier should have alphabetic characters only"
-#~ msgstr "Tanıtıcı yalnızca alfabetik karakterlerden oluşmalıdır"
-
-#, fuzzy
-#~ msgid "more alternatives than repeats"
-#~ msgstr "Tekrarlardan çok seçenek. Kullanılmayan fazla seşenekler. "
-
-#, fuzzy
-#~ msgid "cannot find signature for music function"
-#~ msgstr "`%s'nin bağlamı bulunamıyor"
-
-#~ msgid "lilylib module"
-#~ msgstr "lilylib birimi"
-
-#~ msgid "Binary %s has version %s, looking for version %s"
-#~ msgstr " %s ikilisi,  %s sürümünde, %s sürümü aranıyor"
-
-#~ msgid "Opening pipe `%s'"
-#~ msgstr "`%s' veri yolu açılıyor"
-
-#~ msgid "`%s' failed (%s)"
-#~ msgstr "`%s' başarısız (%s)"
-
-#~ msgid "(ignored)"
-#~ msgstr "(yok sayıldı)"
-
-#~ msgid "Cleaning %s..."
-#~ msgstr "%s temizleniyor..."
-
-#  No version number or newline here.  It confuses help2man.
-#, fuzzy
-#~ msgid "Usage: %s [OPTION]... [FILE]..."
-#~ msgstr "Kullanım: %s [SEÇENEKLER]... DOSYA..."
-
-#, fuzzy
-#~ msgid "%s: skipping: `%s'"
-#~ msgstr "böyle bir ayar yok: `%s'"
-
-#~ msgid "print version information"
-#~ msgstr "sürüm bilgisini yazdır"
-
-#~ msgid "getopt says: `%s'"
-#~ msgstr "getopt çıktısı: `%s'"
-
-#, fuzzy
-#~ msgid "Command failed: `%s' (status %d)"
-#~ msgstr "LilyPond %s girdi dosyasında başarısız oldu (çıkış durumu %d)"
-
-#~ msgid "command exited with value %d"
-#~ msgstr "komut %d değeriyle sonlandı"
-
-#~ msgid "debug"
-#~ msgstr "hata ayıklama"
-
-#~ msgid "define macro NAME [optional expansion EXP]"
-#~ msgstr "makro ADını [seçimli genişletme EXP] tanımla"
-
-#~ msgid "only pre-process"
-#~ msgstr "sadece önişleme yap"
-
-#~ msgid "no such context: %s"
-#~ msgstr "böyle bir bağlam yok: %s"
-
-#~ msgid "Processing `%s'..."
-#~ msgstr "`%s' işleniyor..."
-
-#~ msgid "Convert PostScript to PNG image."
-#~ msgstr "PostScript'i PNG grafiğine dönüştürür."
-
-#~ msgid "RES"
-#~ msgstr "RES"
-
-#~ msgid "set the resolution of the preview to RES"
-#~ msgstr "önizlemenin çözünürlüğünü RES'e ayarla"
-
-#~ msgid "Wrote `%s'"
-#~ msgstr "`%s' yazıldı"
-
-#, fuzzy
-#~ msgid "cannot dlopen: %s: %s"
-#~ msgstr "dosya açılamıyor: `%s'"
-
-#, fuzzy
-#~ msgid "install package: %s or %s"
-#~ msgstr "`%s' `%s'ye dönüştürülemiyor "
-
-#, fuzzy
-#~ msgid "parsing AFM file: `%s'"
-#~ msgstr "AFM dosyasının ayrıştırılmasında hata: `%s' "
-
-#~ msgid "checksum mismatch for font file: `%s'"
-#~ msgstr "yazı tipi dosyası için hatalı sağlama toplamı: `%s' "
-
-#~ msgid "does not match: `%s'"
-#~ msgstr "eşleşmiyor: `%s'"
-
-#~ msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
-#~ msgstr ""
-#~ ".afm dosyalarınrın hepsini yeniden kurgula, ve .pk ve .tfm dosyalarının "
-#~ "hepsini kaldır."
-
-#~ msgid "Rerun with -V to show font paths."
-#~ msgstr "Yazı tipi yollarını göstermek için -V ile yeniden çalıştır. "
-
-#~ msgid "A script for removing font-files is delivered with the source-code:"
-#~ msgstr ""
-#~ "Yazı tipi-dosyalarının kaldırılması için kaynak-kodu ile birlikte bir "
-#~ "betik verildi:"
-
-#~ msgid "beam has less than two visible stems"
-#~ msgstr "ışının ikiden az gövdesi var"
-
-#~ msgid "run in safe mode"
-#~ msgstr "emniyetli kipte çalıştır"
-
-#, fuzzy
-#~ msgid "cannot handle a percent repeat of length: %s"
-#~ msgstr "Bu uzunluktaki bir yüzde tekrarıyla nasıl baş edeceğini bilmiyor."
-
-#~ msgid "rest direction not set.  Cannot resolve collision."
-#~ msgstr "durak yönü ayarlı değil. Çatışma çözülemiyor."
-
-#~ msgid "lilypond -e EXPR means:"
-#~ msgstr "lilypond -e EXPR anlamı:"
-
-#~ msgid "  Evalute the Scheme EXPR before parsing any .ly files."
-#~ msgstr ""
-#~ "  Herhangi bir .ly dosyasını ayrıştırmadan önce Scheme EXPR işlenir."
+msgid "  The function ly:set-option allows for access to some internal variables."
+msgstr ""
+"  ly-set-option (seçenek ayarla) işlevi bazı iç değişkenlere erişime izin\n"
+"  verir."
 
-#~ msgid ""
-#~ "  Multiple -e options may be given, they will be evaluated sequentially."
-#~ msgstr ""
-#~ "  Çok sayıda -e seçeneği verilebilir, bunlar sırayla değerlendirilir."
+#: scm-option.cc:64 lily/scm-option.cc:64
+#, c-format
+msgid "Usage: lilypond -e \"(ly:set-option SYMBOL VAL)\""
+msgstr "Kullanım: lilypond-bin -e \"(ly:set-option SEMBOL DEĞER)\""
 
-#~ msgid ""
-#~ "  The function ly:set-option allows for access to some internal variables."
-#~ msgstr ""
-#~ "  ly-set-option (seçenek ayarla) işlevi bazı iç değişkenlere erişime "
-#~ "izin\n"
-#~ "  verir."
+#: scm-option.cc:66 lily/scm-option.cc:66
+#, c-format
+msgid "Use help as  SYMBOL to get online help."
+msgstr ""
 
-#, fuzzy
-#~ msgid "Usage: lilypond -e \"(ly:set-option SYMBOL VAL)\""
-#~ msgstr "Kullanım: lilypond-bin -e \"(ly:set-option SEMBOL DEĞER)\""
+#: scm-option.cc:132 scm-option.cc:160 lily/scm-option.cc:132
+#: lily/scm-option.cc:160
+#, c-format
+msgid "No such internal option: %s"
+msgstr "Bilinmeyen iç seçenek: %s"
 
-#  this shouldnnot happen, but let's continue anyway.
-#~ msgid "Separation_item:  I've been drinking too much"
-#~ msgstr "Ayırma_öğe: Çok fazla içmişim"
+#: score-engraver.cc:103 score-engraver.cc:108 lily/score-engraver.cc:103
+#: lily/score-engraver.cc:108
+#, c-format
+msgid "can't find `%s'"
+msgstr "`%s' bulunamıyor"
 
-#, fuzzy
-#~ msgid "removing tuplet bracket across linebreak"
-#~ msgstr "Satırkesmesi boyunca tuplet köşeli ayracı yok ediliyor."
+#: score-engraver.cc:104 lily/score-engraver.cc:104
+msgid "Music font has not been installed properly.  Aborting"
+msgstr "Müzik yazıtipi uygun biçimde yüklenmedi.  Durduruluyor"
 
-#, fuzzy
-#~ msgid "tag must be symbol or list of symbols"
-#~ msgstr "Biçim imi sembol ya da sembol listesi olmalı."
+#: score-engraver.cc:109 lily/score-engraver.cc:109
+#, c-format
+msgid "Install the ec-mftraced package from %s. Aborting"
+msgstr ""
 
-#~ msgid "need integer number arg"
-#~ msgstr "tamsayı  arga ihtiyaç duyar"
+#: score.cc:100 score.cc:126 lily/score.cc:100 lily/score.cc:126
+#: lily/score.cc:102 lily/score.cc:128
+msgid "Need music in a score"
+msgstr "Bir çizgide müziğe ihtiyaç duyar"
 
-#, fuzzy
-#~ msgid "suspect duration in beam: %s"
-#~ msgstr "Bu ışının devamında tahmini süre bulundu"
+#: score.cc:116 lily/score.cc:116 lily/score.cc:118
+msgid "Interpreting music... "
+msgstr "Müzik yorumlanıyor..."
 
-#, fuzzy
-#~ msgid "syntax error: cannot back up"
-#~ msgstr "hiçbir onulmaz hata yok: "
+#: score.cc:137 lily/score.cc:137 lily/score.cc:139
+#, c-format
+msgid "elapsed time: %.2f seconds"
+msgstr "geçen zaman: %.2f saniye"
 
-#, fuzzy
-#~ msgid "Reading a token: "
-#~ msgstr "`%s' veri yolu açılıyor"
+#: score.cc:312 lily/score.cc:312 lily/score.cc:322
+msgid "Already have music in score"
+msgstr "Notada zaten müzik var"
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s"
-#~ msgstr "hiçbir onulmaz hata yok: "
+#: score.cc:313 lily/score.cc:313 lily/score.cc:323
+msgid "This is the previous music"
+msgstr ""
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s"
-#~ msgstr "hiçbir onulmaz hata yok: "
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#: script-engraver.cc:102 lily/script-engraver.cc:102
+msgid "Do not know how to interpret articulation: "
+msgstr "Sesletimin nasıl yorumlanacağı bilinmiyor: "
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s or %s"
-#~ msgstr "hiçbir onulmaz hata yok: "
+#: script-engraver.cc:103 lily/script-engraver.cc:103
+msgid "Scheme encoding: "
+msgstr "Program kodlaması: "
 
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s"
-#~ msgstr "hiçbir onulmaz hata yok: "
+#  this shouldn't happen, but let's continue anyway.
+#. this shouldn't happen, but let's continue anyway.
+#. this shouldn't happen, but let's continue anyway.
+#. this shouldn't happen, but let's continue anyway.
+#. this shouldn't happen, but let's continue anyway.
+#. this shouldn't happen, but let's continue anyway.
+#. this shouldn't happen, but let's continue anyway.
+#. this shouldn't happen, but let's continue anyway.
+#. this shouldn't happen, but let's continue anyway.
+#: separation-item.cc:53 separation-item.cc:97 lily/separation-item.cc:53
+#: lily/separation-item.cc:97
+msgid "Separation_item:  I've been drinking too much"
+msgstr "Ayırma_öğe: Çok fazla içmişim"
+
+#: simple-spacer.cc:489 lily/simple-spacer.cc:489 lily/simple-spacer.cc:484
+#, c-format
+msgid "No spring between column %d and next one"
+msgstr "%d sütunu ve sonraki sütun arasında kaynak yok."
 
+#: slur-engraver.cc:124 lily/slur-engraver.cc:124
 #, fuzzy
-#~ msgid "syntax error; also memory exhausted"
-#~ msgstr "hiçbir onulmaz hata yok: "
+msgid "No slur to end"
+msgstr "Bitirmek için volta anahtarı yok"
 
-#, fuzzy
-#~ msgid "syntax error"
-#~ msgstr "hiçbir onulmaz hata yok: "
+#: source-file.cc:50 lily/source-file.cc:50
+#, c-format
+msgid "can't open file: `%s'"
+msgstr "dosya açılamıyor: `%s'"
 
-#, fuzzy
-#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
-#~ msgstr "yazı tipi bulunamıyor: `%s'"
+#: source-file.cc:63 lily/source-file.cc:63
+#, c-format
+msgid "Huh?  Got %d, expected %d characters"
+msgstr "Ha? %2$d karakter beklenirken, %1$d alındı"
 
-#, fuzzy
-#~ msgid "unknown bar glyph: `~S'"
-#~ msgstr "bilinmeyen küme tarzı `%s'"
+#: spacing-spanner.cc:388 lily/spacing-spanner.cc:388
+#, c-format
+msgid "Global shortest duration is %s"
+msgstr "En kısa genel süre %sdir"
 
-#, fuzzy
-#~ msgid "Writing output file."
-#~ msgstr "Çıktı dosyası kaldırılıyor"
+#: stem-engraver.cc:88 lily/stem-engraver.cc:88
+msgid "tremolo duration is too long"
+msgstr "tremolo süresi fazla uzun"
 
-#~ msgid "Second argument must be pitch list."
-#~ msgstr "İkinci argüman perde listesi olmalı."
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#. FIXME:
+#: stem-engraver.cc:125 lily/stem-engraver.cc:125
+#, c-format
+msgid "Adding note head to incompatible stem (type = %d)"
+msgstr "uyuşmayan [tür= %d] köküne nota kafası ekleniyor"
 
-#~ msgid "Have to be in Lyric mode for lyrics"
-#~ msgstr "Güfteler için Lyric kipinde olunmalı"
+#: stem-engraver.cc:127 lily/stem-engraver.cc:127
+msgid "Don't you want polyphonic voices instead?"
+msgstr "Bunun yerine polifonik sesler istemez misiniz?"
 
-#~ msgid "Expecting string as script definition"
-#~ msgstr "Betik tanımı olarak dizge bekleniyor"
+#: stem.cc:126 lily/stem.cc:126
+msgid "Weird stem size; check for narrow beams"
+msgstr "Garip kök boyutu; dar ışınları denetler"
 
-#~ msgid "Have to be in Note mode for notes"
-#~ msgstr "Notalar için Nota kipinde olmalıdır"
+#: stem.cc:575 lily/stem.cc:575 lily/stem.cc:574
+#, c-format
+msgid "flag `%s' not found"
+msgstr "`%s' bayrağı bulunamadı"
 
-#~ msgid "Have to be in Chord mode for chords"
-#~ msgstr "Akortlar için Akort kipinde olmalıdır"
+#: stem.cc:586 lily/stem.cc:586 lily/stem.cc:585
+#, c-format
+msgid "flag stroke `%s' not found"
+msgstr "'%s'nin bayrak vuruşu bulunamadı "
 
-#, fuzzy
-#~ msgid "programming error: "
-#~ msgstr "programlama hatası: %s"
+#: system.cc:134 lily/system.cc:134
+#, c-format
+msgid "Element count %d."
+msgstr "Öğe sayısı %d."
 
-#, fuzzy
-#~ msgid "Programming error: "
-#~ msgstr "programlama hatası: %s"
+#: system.cc:272 lily/system.cc:272
+#, c-format
+msgid "Grob count %d"
+msgstr "Grob sayısı %d"
 
-#~ msgid "Cannot switch translators, I'm there already"
-#~ msgstr "Çevirmenler değiştirilemiyor, zaten oradayım"
+#: system.cc:286 lily/system.cc:286
+msgid "Calculating line breaks..."
+msgstr "Satır bölünmeleri sayılıyor..."
 
-#~ msgid "Accidental rule must be pair or context-name; Found %s"
-#~ msgstr "Raslantı kuralı çift ya da bağlam-adı olmak zorundadır; %s bulundu"
+#: text-spanner-engraver.cc:63 lily/text-spanner-engraver.cc:63
+msgid "can't find start of text spanner"
+msgstr "metin anahtarının başlangıcı bulunamıyor"
 
-#  We could change the current translator's id, but that would make
-#  errors hard to catch
-#  last->translator_id_string_  = get_change ()->change_to_id_string_;
-#~ msgid "I'm one myself"
-#~ msgstr "Ben tek başımayım"
+#: text-spanner-engraver.cc:77 lily/text-spanner-engraver.cc:77
+msgid "already have a text spanner"
+msgstr "zaten bir metin anahtarı var"
 
-#~ msgid "Chord tremolo with %d elements. Must have two elements."
-#~ msgstr "%d öğeli akort tremolosu. İki öğesi olmalı."
+#: text-spanner-engraver.cc:139 lily/text-spanner-engraver.cc:139
+msgid "unterminated text spanner"
+msgstr "sonlandırılmamış metin anahtarı"
 
-#~ msgid "Fingerings are also not down?! Putting them down anyway."
-#~ msgstr "Parmaklaçalmalar da yüklenmedi?! Yine de yükleniyor."
+#  Not using ngettext's plural feature here, as this message is
+#  more of a programming error.
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#: tfm-reader.cc:108 lily/tfm-reader.cc:108
+#, c-format
+msgid "TFM header of `%s' has only %u word (s)"
+msgstr "'%s'nin TFM kafasının sadece %u kelimesi var [s]"
+
+#: tfm-reader.cc:142 lily/tfm-reader.cc:142
+#, c-format
+msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
+msgstr "%s: TFM dosyası %u değiştirgeye sahip ve bu başa çıkabileceğim %u'dan fazla."
+
+#: tfm.cc:73 lily/tfm.cc:73
+#, c-format
+msgid "can't find ascii character: %d"
+msgstr "ascii karakteri bulunamıyor: %d"
+
+#: tie-engraver.cc:165 lily/tie-engraver.cc:173
+msgid "lonely tie"
+msgstr "yalnız bağ"
 
-#~ msgid "Huh?  Got %d, expected %d characters"
-#~ msgstr "Ha? %2$d karakter beklenirken, %1$d alındı"
+#: time-scaled-music-iterator.cc:24 lily/time-scaled-music-iterator.cc:24
+msgid "no one to print a tuplet start bracket"
+msgstr "bir tuplet başlangıç köşeli ayracı yazdıracak kimse yok"
 
-#~ msgid "Donnot you want polyphonic voices instead?"
-#~ msgstr "Bunun yerine polifonik sesler istemez misiniz?"
+#  Todo: should make typecheck?
+#  OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#: time-signature-engraver.cc:57 lily/time-signature-engraver.cc:57
+#, c-format
+msgid "Found strange time signature %d/%d."
+msgstr "garip zaman imzası bulundu %d/%d."
 
-#~ msgid "No volta spanner to end"
-#~ msgstr "Bitirmek için volta anahtarı yok"
+#  If there is no such symbol, we default to the numbered style.
+#  (Here really with a warning!)
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#: time-signature.cc:91 lily/time-signature.cc:91
+#, c-format
+msgid "time signature symbol `%s' not found; reverting to numbered style"
+msgstr "'%s'nin zaman imza işareti bulunamadı: numaralı biçime yeniden dönülüyor "
 
-#~ msgid "Also have a stopped spanner.  Giving up."
-#~ msgstr "Durdurulmuş anahtarı da var. Vazgeçiliyor."
+#: translator-ctors.cc:53 lily/translator-ctors.cc:53
+#, c-format
+msgid "unknown translator: `%s'"
+msgstr "bilinmeyen çevirmen: `%s'"
 
-#  backup rule
-#~ msgid "Missing end quote"
-#~ msgstr "Sondaki tırnak işareti eksik"
+#: trill-spanner-engraver.cc:71 lily/trill-spanner-engraver.cc:71
+#, fuzzy
+msgid "can't find start of trill spanner"
+msgstr "metin anahtarının başlangıcı bulunamıyor"
 
-#  Bug in option parser: --output=foe is taken as an abbreviation
-#  for --output-format.
-#~ msgid "EXT"
-#~ msgstr "EXT"
+#: trill-spanner-engraver.cc:85 lily/trill-spanner-engraver.cc:85
+#, fuzzy
+msgid "already have a trill spanner"
+msgstr "zaten bir metin anahtarı var"
 
-#  # FIXME
-#  # do -P or -p by default?
-#  #help_summary = _ ("Run LilyPond using LaTeX for titling")
-#~ msgid "Run LilyPond, generate printable document."
-#~ msgstr "LilyPond'u çalıştır, yazdırılabilir belge üret."
+#: trill-spanner-engraver.cc:145 lily/trill-spanner-engraver.cc:145
+#, fuzzy
+msgid "unterminated trill spanner"
+msgstr "sonlandırılmamış metin anahtarı"
 
-#~ msgid "use LaTeX for formatting"
-#~ msgstr "biçemleme için LaTeX kullanır"
+#: tuplet-bracket.cc:448 lily/tuplet-bracket.cc:447
+msgid "Killing tuplet bracket across linebreak."
+msgstr "Satırkesmesi boyunca tuplet köşeli ayracı yok ediliyor."
 
-#~ msgid "print even more output"
-#~ msgstr "daha da fazla çıktı yazdır"
+#: vaticana-ligature-engraver.cc:342 lily/vaticana-ligature-engraver.cc:342
+#, c-format
+msgid "ignored prefix (es) `%s' of this head according to restrictions of the selected ligature style"
+msgstr "seçilen bağ biçiminin kısıtlamalarına göre bu kafanın [es] '%s' öneki yok sayıldı"
 
-#~ msgid "find pfa fonts used in FILE"
-#~ msgstr "DOSYAda kullanılan pfa yazı tiplerini bul"
+#: vaticana-ligature-engraver.cc:572 lily/vaticana-ligature-engraver.cc:572
+#, c-format
+msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr=%ul"
+msgstr "Vaticana_bağ_nakkaş: ayar boşlukbırakma-artırma = %f': ptr=%ul"
 
-#~ msgid "add DIR to LilyPond's search path"
-#~ msgstr "DIR'ı (DİZİN) LilyPond'un arama yoluna ekle"
+#: vaticana-ligature.cc:92 lily/vaticana-ligature.cc:92
+msgid "ascending vaticana style flexa"
+msgstr "vaticana biçimini flexaya yükseltiyor"
 
-#~ msgid "keep all output, output to directory %s.dir"
-#~ msgstr "bütün çıktıyı sakla, çıktıyı %s dizinine yönlendir"
+#: vaticana-ligature.cc:181 lily/vaticana-ligature.cc:181
+msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
+msgstr "Vaticana_bağ: sıfır bağlantı [delta_perde == 0]"
 
-#~ msgid "do not run LilyPond"
-#~ msgstr "LilyPond'u çalıştırma"
+#: volta-engraver.cc:141 lily/volta-engraver.cc:141
+msgid "No volta spanner to end"
+msgstr "Bitirmek için volta anahtarı yok"
 
-#~ msgid "produce MIDI output only"
-#~ msgstr "sadece MIDI çıktısı üret"
+#: volta-engraver.cc:152 lily/volta-engraver.cc:152
+msgid "Already have a volta spanner.  Stopping that one prematurely."
+msgstr "Zaten bir volta anahtarı var. Vakitsiz durduruluyor."
 
-#~ msgid "generate PDF output"
-#~ msgstr "PDF çıktısı üret"
+#: volta-engraver.cc:156 lily/volta-engraver.cc:156
+msgid "Also have a stopped spanner.  Giving up."
+msgstr "Durdurulmuş anahtarı da var. Vazgeçiliyor."
 
-#~ msgid "generate PostScript output"
-#~ msgstr "PostScript çıktısı üret"
+#: parser.yy:79
+msgid "Tag must be symbol or list of symbols."
+msgstr "Biçim imi sembol ya da sembol listesi olmalı."
 
-#~ msgid "generate PNG page images"
-#~ msgstr "PNG sayfa görüntülerini  üret"
+#: parser.yy:534
+msgid "Identifier should have alphabetic characters only"
+msgstr "Tanıtıcı yalnızca alfabetik karakterlerden oluşmalıdır"
 
-#~ msgid "generate PS.GZ"
-#~ msgstr "PS.GZ üret"
+#: parser.yy:707
+msgid "Need \\bookpaper for bookpaper block."
+msgstr ""
 
-#~ msgid "run in safe-mode"
-#~ msgstr "emniyetli kipte çalıştır"
+#: parser.yy:844
+msgid "More alternatives than repeats.  Junking excess alternatives."
+msgstr "Tekrarlardan çok seçenek. Kullanılmayan fazla seşenekler. "
 
-#~ msgid "change global setting KEY to VAL"
-#~ msgstr "genel ayar KEY'e VAL değerini ata"
+#: parser.yy:1016
+#, c-format
+msgid "Argument %d failed typecheck"
+msgstr ""
 
-#~ msgid "LilyPond crashed (signal %d)."
-#~ msgstr "LilyPond çöktü (%d sinyali)."
+#: parser.yy:1032
+msgid "Music head function should return Music object."
+msgstr ""
 
-#~ msgid "Please submit a bug report to bug-lilypond@gnu.org"
-#~ msgstr ""
-#~ "Lütfen bug-lilypond@gnu.org adresine bir yazılım hatası raporu gönderin"
+#: parser.yy:1278
+msgid "Grob name should be alphanumeric"
+msgstr ""
 
-#~ msgid "LilyPond failed on an input file (exit status %d)"
-#~ msgstr "LilyPond bir girdi dosyasında başarısız oldu (çıkış durumu %d)"
+#: parser.yy:1639
+msgid "Second argument must be pitch list."
+msgstr "İkinci argüman perde listesi olmalı."
 
-#~ msgid "Continuing..."
-#~ msgstr "Devam ediliyor..."
+#: parser.yy:1676 parser.yy:1681 parser.yy:2210
+msgid "Have to be in Lyric mode for lyrics"
+msgstr "Güfteler için Lyric kipinde olunmalı"
 
-#~ msgid "Analyzing %s..."
-#~ msgstr "%s çözümleniyor..."
+#: parser.yy:1766
+msgid "Expecting string as script definition"
+msgstr "Betik tanımı olarak dizge bekleniyor"
 
-#~ msgid "no LilyPond output found for `%s'"
-#~ msgstr "`%s' için hiçbir LilyPond çıktısı bulunamadı"
+#: parser.yy:1975 parser.yy:2025
+#, c-format
+msgid "not a duration: %d"
+msgstr "bir süre değil: %d"
 
-#~ msgid "LaTeX failed on the output file."
-#~ msgstr "LaTeX çıktı dosyasında başarısız oldu."
+#: parser.yy:2120
+msgid "Have to be in Note mode for notes"
+msgstr "Notalar için Nota kipinde olmalıdır"
 
-#~ msgid ""
-#~ "Trying create PDF, but no PFA fonts found.\n"
-#~ "Using bitmap fonts instead. This will look bad."
-#~ msgstr ""
-#~ "PDF oluşturulmaya çalışılıyor, ancak hiçbir PFA yazı tipi bulunamadı. \n"
-#~ "Bunun yerine bitmap yazı tipi kullanılıyor. Bu kötü görünecek."
+#: parser.yy:2225
+msgid "Have to be in Chord mode for chords"
+msgstr "Akortlar için Akort kipinde olmalıdır"
 
-#~ msgid "pseudo filter"
-#~ msgstr "sahte süzgeç"
+#: parser.yy:2377
+msgid "need integer number arg"
+msgstr "tamsayı  arga ihtiyaç duyar"
 
-#~ msgid "pseudo filter only for single input file"
-#~ msgstr "sadece tek girdi dosyası için sahte süzgeç"
+#: parser.yy:2520
+msgid "Suspect duration found following this beam"
+msgstr "Bu ışının devamında tahmini süre bulundu"
 
-#~ msgid "no files specified on command line"
-#~ msgstr "komut satırında hiçbir dosya belirtilmedi"
+#: lexer.ll:194
+#, c-format
+msgid "input renamed to: `%s'"
+msgstr "girdi `%s' olarak yenden adlandırıldı"
 
-#~ msgid "Running LilyPond failed. Rerun with --verbose for a trace."
-#~ msgstr ""
-#~ "LilyPond'un çalıştırılması başarısız. İzlemek için\n"
-#~ "--verbose seçeneği ile yeniden çalıştırın."
+#: lexer.ll:202
+msgid "No quoted string found after \\encoding"
+msgstr ""
 
-#~ msgid "Failed to make PS file. Rerun with --verbose for a trace."
-#~ msgstr ""
-#~ "PS dosyası oluşturulamadı. İzlemek için\n"
-#~ "--verbose seçeneği ile yeniden çalıştırın."
+#: lexer.ll:206
+msgid "No quoted string found after \\version"
+msgstr ""
 
-#~ msgid "%s output to <stdout>..."
-#~ msgstr "%s çıktısı <stdout>a..."
+#: lexer.ll:210
+msgid "No quoted string found after \\renameinput"
+msgstr ""
 
-#~ msgid "%s output to %s..."
-#~ msgstr "%s çıktısı %s'ye..."
+#: lexer.ll:223
+msgid "EOF found inside a comment"
+msgstr "EOF bir açıklamanın içinde bulundu"
 
-#~ msgid "cannot find file: `%s.%s'"
-#~ msgstr "dosya bulunamıyor: `%s.%s'"
+#: lexer.ll:238
+msgid "\\maininput not allowed outside init files"
+msgstr "\\anagirdi init dosyları dışında kabul edilmez"
 
-#~ msgid "NaN"
-#~ msgstr "NaN"
+#: lexer.ll:264
+#, c-format
+msgid "wrong or undefined identifier: `%s'"
+msgstr "yanlış ya da tanımlanmamış tanıtıcı: `%s' "
 
-#~ msgid "include files are not allowed"
-#~ msgstr "dosyaların içerilmesine izin verilmiyor"
+#  backup rule
+#. backup rule
+#: lexer.ll:273
+msgid "Missing end quote"
+msgstr "Sondaki tırnak işareti eksik"
 
-#~ msgid "FIXME: key change merge"
-#~ msgstr "FIXME: anahtar değişim birleşimi"
+#: lexer.ll:436
+msgid "Brace found at end of lyric.  Did you forget a space?"
+msgstr "Şarkı sözü sonunda ayraç bulundu. Bir boşluk mu unuttunuz?"
 
-#~ msgid "kpathsea can not find TFM file: `%s'"
-#~ msgstr "kpathsea TMF dosyasını bulamıyor: `%s'"
+#: lexer.ll:541
+msgid "Brace found at end of markup.  Did you forget a space?"
+msgstr "Biçimlemenin sonunda ayraç bulundu. Bir boşluk bırakmayı mı unuttunuz?"
 
-#~ msgid "kpathsea can not find file: `%s'"
-#~ msgstr "kpathsea dosyayı bulamıyor: `%s'"
+#: lexer.ll:630
+#, c-format
+msgid "invalid character: `%c'"
+msgstr "geçersiz karakter: `%c'"
 
-#~ msgid "Now processing `%s'"
-#~ msgstr "`%s' şu an işleniyor"
+#: lexer.ll:716 lexer.ll:717
+#, c-format
+msgid "unknown escaped string: `\\%s'"
+msgstr "bilinmeyen kaçmış dizge: '\\%s'"
 
-#~ msgid "set options, use -e '(ly:option-usage)' for help"
-#~ msgstr ""
-#~ "seçenekleri ayarlar, yardım için -e '(ly:option-usage)' seçeneğini "
-#~ "kullanır"
+#: lexer.ll:814 lexer.ll:815
+#, c-format
+msgid "Incorrect lilypond version: %s (%s, %s)"
+msgstr "Hatalı lilypond sürümü: %s (%s, %s)"
 
-#~ msgid "generate a preview"
-#~ msgstr "önizleme üretir"
+#: lexer.ll:815 lexer.ll:816
+msgid "Consider updating the input with the convert-ly script"
+msgstr "Girdiyi convert-ly betiği ile güncellemeyi dikkate alınız"
 
-#~ msgid "generate DVI"
-#~ msgstr "DVI üretir"
+#: lily.scm:574
+#, lisp-format
+msgid "Converting to `~a'..."
+msgstr "`~a'ya değiştiriliyor..."
 
-#~ msgid "generate TeX"
-#~ msgstr "TeX üretir"
+#: lily.scm:596
+#, lisp-format
+msgid "Invoking `~a'..."
+msgstr "`~a' çağrılıyor..."
 
-#~ msgid "This option is for developers only."
-#~ msgstr "Bu seçenek sadece  geliştiriciler içindir."
+#: lily.scm:614
+msgid "error: failed files: "
+msgstr ""
 
-#~ msgid "Read the sources for more information."
-#~ msgstr "Daha fazla bilgi için kaynakları okuyun."
+#: lily/includable-lexer.cc:50
+msgid "include files are not allowed in safe mode"
+msgstr "güvenli kipte dosyaların içerilmesine izin verilmiyor"
 
-#~ msgid "Paper output to `%s'..."
-#~ msgstr "Kağıt çıktısı `%s'ye..."
+#: lily/phrasing-slur-engraver.cc:116
+msgid "unterminated phrasing slur"
+msgstr "sonlandırılmamış, melodiyi ayrıştırarak çalan ses kaydırma imi"
 
-#~ msgid "input renamed to: `%s'"
-#~ msgstr "girdi `%s' olarak yenden adlandırıldı"
+#: lily/score.cc:328
+msgid "Error found in this music expression. Ignoring it"
+msgstr ""
 
 #~ msgid "write Makefile dependencies for every input file"
 #~ msgstr "her girdi dosyası için Makefile bağımlılıklarını yaz"
@@ -2807,6 +1988,9 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "do not generate PDF output"
 #~ msgstr "PDF çıktısı üretme"
 
+#~ msgid "do not generate PostScript output"
+#~ msgstr "PostScript çıktısı üretme"
+
 #~ msgid "use pdflatex to generate PDF output"
 #~ msgstr "PDF çıktısı üretmek için pdflatex'i kullan"
 
@@ -2821,6 +2005,15 @@ msgstr "LaTeX başarısız oldu."
 #~ "LaTeX'in çalıştırılması başarısız. İzlemek için\n"
 #~ "--verbose seçeneği ile yeniden çalıştırın."
 
+#~ msgid "dependencies output to `%s'..."
+#~ msgstr "bağımlılıklar `%s'ye çıktılanıyor..."
+
+#  # FIXME
+#  # do -P or -p by default?
+#  #help_summary = _ ("Run LilyPond using LaTeX for titling")
+#~ msgid "Process LilyPond snippets in hybrid HTML, LaTeX or texinfo document"
+#~ msgstr "LilyPond'un küçük parçalarını karma HTML, LaTeX ya da texinfo belgesinde işle"
+
 #~ msgid "DIM"
 #~ msgstr "DIM"
 
@@ -2828,9 +2021,7 @@ msgstr "LaTeX başarısız oldu."
 #~ msgstr "müzik için öntanımlı  yazı tipi. DIM'in uygun olduğu varsayılıyor "
 
 #~ msgid "deprecated, use --default-music-fontsize"
-#~ msgstr ""
-#~ "uygun görülmedi, --default-music-fontsize (öntanımlı müzik yazıtipi) "
-#~ "kullanın"
+#~ msgstr "uygun görülmedi, --default-music-fontsize (öntanımlı müzik yazıtipi) kullanın"
 
 #~ msgid "OPT"
 #~ msgstr "OPT"
@@ -2838,16 +2029,11 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "pass OPT quoted to the lilypond command line"
 #~ msgstr "lilypond komut satırına aktarılmış OPT'u geçir"
 
-#~ msgid ""
-#~ "force fontsize for all inline lilypond. DIM is assumed to be in points"
-#~ msgstr ""
-#~ "bütün satıriçi lilypond için yazı tipini kullan. DIM'in uygun olduğu "
-#~ "varsayılıyor."
+#~ msgid "force fontsize for all inline lilypond. DIM is assumed to be in points"
+#~ msgstr "bütün satıriçi lilypond için yazı tipini kullan. DIM'in uygun olduğu varsayılıyor."
 
 #~ msgid "deprecated, use --force-music-fontsize"
-#~ msgstr ""
-#~ "uygun görülmedi, --force-music-fontsize (müzik yazı tipi boyunu kullan) "
-#~ "kullanın"
+#~ msgstr "uygun görülmedi, --force-music-fontsize (müzik yazı tipi boyunu kullan) kullanın"
 
 #~ msgid "include path"
 #~ msgstr "yolu içer"
@@ -2861,10 +2047,10 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "prepend PREF before each -M dependency"
 #~ msgstr "her bir -M bağımlılığının başına PREF ekle"
 
-#~ msgid "do not run lilypond"
+#~ msgid "don't run lilypond"
 #~ msgstr "lilypond'u çalıştırma"
 
-#~ msgid "do not generate pictures"
+#~ msgid "don't generate pictures"
 #~ msgstr "resim üretme"
 
 #~ msgid "strip all lilypond blocks from output"
@@ -2876,8 +2062,10 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "where to place generated files"
 #~ msgstr "üretilmiş dosyaların konulacağı yer"
 
-#~ msgid ""
-#~ "round filled box horizontal extent smaller than blot; decreasing blot"
+#~ msgid "LaTeX failed."
+#~ msgstr "LaTeX başarısız oldu."
+
+#~ msgid "round filled box horizontal extent smaller than blot; decreasing blot"
 #~ msgstr "yuvarlak dolu kutu lekeden küçük yatay genişlik; leke azaltılıyor "
 
 #~ msgid "round filled box vertical extent smaller than blot; decreasing blot"
@@ -2892,9 +2080,8 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "prepend DIR to dependencies"
 #~ msgstr "bağımlılıkların başına DİZİN ekle"
 
-#~ msgid "cannot find start of phrasing slur"
-#~ msgstr ""
-#~ "melodiyi ayrıştırarak çalan ses kaydırma iminin başlangıcı bulunamıyor"
+#~ msgid "can't find start of phrasing slur"
+#~ msgstr "melodiyi ayrıştırarak çalan ses kaydırma iminin başlangıcı bulunamıyor"
 
 #~ msgid "Where SYMBOL VAL pair is any of:"
 #~ msgstr "SEMBOL DEĞER çiftinin şunlardan biri olduğu yerde:"
@@ -2902,8 +2089,16 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "unbound spanner `%s'"
 #~ msgstr "`%s' bağsız anahtarı"
 
+#  How to shut up this warning, when Voice_devnull_engraver has
+#  eaten start event?
+#~ msgid "can't find start of slur"
+#~ msgstr "ses kaydırma iminin başlangıcı bulunamıyor"
+
 #~ msgid "#<spring smob d= %f>"
 #~ msgstr "#<yay smob d= %f>"
 
 #~ msgid "\\apply takes function argument"
 #~ msgstr "\\uygulama argüman işlevi alır"
+
+#~ msgid "Can't find music"
+#~ msgstr "Müzik bulunamıyor"
index fa19302fe0298ad5d6bc9e107f44a8a93469a7e1..3eaa1a535db4ca49e13960c07ad8c283f38beedd 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -1,6 +1,6 @@
 # Ukrainian translations for lilypond package
 # Переклад українською для пакету lilypond.
-# Copyright (C) 2007--2012 THE PACKAGE'S COPYRIGHT HOLDER
+# Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # Youri Bulka <jblk@icmail.net>, 2007.
 #
index f8b94d2f58f9a2a9f1628557968052c90b26fbe2..d63ee3f90aae0f04280db4c2026d772ae0690eeb 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -1,14 +1,14 @@
 # Vietnamese translation for Lilypond.
-# Copyright © 2009 Free Software Foundation, Inc.
+# Copyright © 2010 Free Software Foundation, Inc.
 # This file is distributed under the same license as the lilypond package.
-# Clytie Siddall <clytie@riverland.net.au>, 2007-2009.
+# Clytie Siddall <clytie@riverland.net.au>, 2007-2010.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.12.0\n"
+"Project-Id-Version: lilypond 2.13.7\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
 "POT-Creation-Date: 2008-12-20 11:58+0100\n"
-"PO-Revision-Date: 2009-01-27 00:20+1030\n"
+"PO-Revision-Date: 2010-03-07 18:59+1030\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
@@ -1073,12 +1073,12 @@ msgstr ""
 
 #: musicxml2ly.py:2576
 msgid ""
-"Copyright (c) 2005--2012 by\n"
+"Copyright (c) 2005--2009 by\n"
 "    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
 "    Jan Nieuwenhuizen <janneke@gnu.org> and\n"
 "    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 msgstr ""
-"Tác quyền © năm 2005--2008 của\n"
+"Tác quyền © năm 2005--2009 của\n"
 "    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
 "    Jan Nieuwenhuizen <janneke@gnu.org>\n"
 "    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
index b1138edd0bdbb55033400853f43a0793a52d0978..fd6445d85c93a5976bc3a1b774230e8ed23d2a74 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 2.6.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-12-24 10:40+0100\n"
+"POT-Creation-Date: 2005-04-19 22:41+0200\n"
 "PO-Revision-Date: 2005-06-29 05:00+0800\n"
 "Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
@@ -14,99 +14,142 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: convertrules.py:12
+#: fontextract.py:25
 #, python-format
-msgid "Not smart enough to convert %s"
-msgstr ""
+msgid "Scanning %s"
+msgstr "正在掃描 %s"
 
-#: convertrules.py:13
-msgid "Please refer to the manual for details, and update manually."
-msgstr "請參考手冊,依照當中的內容自行更新。"
+#: fontextract.py:70
+#, python-format
+msgid "Extracted %s"
+msgstr ""
 
-#: convertrules.py:14
+#: fontextract.py:86
 #, python-format
-msgid "%s has been replaced by %s"
-msgstr "%s 已被 %s 取代"
+msgid "Writing fonts to %s"
+msgstr "正在將字型寫入 %s"
 
-#: convertrules.py:2398
-msgid "LilyPond source must be UTF-8"
-msgstr "LilyPond 來源檔必須使用 UTF-8 編碼"
+#: lilylib.py:62
+msgid "lilylib module"
+msgstr "lilylib 模組"
 
-#: convertrules.py:2401
-msgid "Try the texstrings backend"
-msgstr ""
+#: lilylib.py:65 lilypond-book.py:89 midi2ly.py:100 mup2ly.py:75 ps2png.py:41
+#: main.cc:145
+msgid "print this help"
+msgstr "印出這段說明訊息"
 
-#: convertrules.py:2404
-#, python-format
-msgid "Do something like: %s"
-msgstr ""
+#: lilylib.py:112 midi2ly.py:136 mup2ly.py:130
+#, fuzzy, python-format
+msgid "Copyright (c) %s by"
+msgstr "版權所有 (c) %s"
 
-#: convertrules.py:2407
-msgid "Or save as UTF-8 in your editor"
-msgstr "或者在編輯器中指定使用 UTF-8 編碼儲存內容"
+#: lilylib.py:116 midi2ly.py:141 mup2ly.py:135
+msgid "Distributed under terms of the GNU General Public License."
+msgstr "根據 GNU 公共授權條款發佈。"
+
+#: lilylib.py:118 midi2ly.py:142 mup2ly.py:136
+msgid "It comes with NO WARRANTY."
+msgstr "本程式沒有任何使用保證。"
+
+#: lilylib.py:125 warn.cc:44 input.cc:79
+#, c-format, python-format
+msgid "warning: %s"
+msgstr "警告: %s"
 
-#: fontextract.py:26
+#: lilylib.py:128 warn.cc:50 input.cc:85 input.cc:93
+#, c-format, python-format
+msgid "error: %s"
+msgstr "錯誤: %s"
+
+#: lilylib.py:132
 #, python-format
-msgid "Scanning %s"
-msgstr "正在掃描 %s"
+msgid "Exiting (%d)..."
+msgstr "正在結束 (%d)..."
 
-#: fontextract.py:71
+#: lilylib.py:200 midi2ly.py:223 mup2ly.py:219
 #, python-format
-msgid "Extracted %s"
+msgid "Usage: %s [OPTIONS]... FILE"
+msgstr "用法: %s [選項]... 檔案"
+
+#: lilylib.py:204 convert-ly.py:57 midi2ly.py:227 mup2ly.py:223 main.cc:211
+#, c-format
+msgid "Options:"
+msgstr "選項:"
+
+#: lilylib.py:208 convert-ly.py:74 lilypond-pdfpc-helper.py:28 midi2ly.py:231
+#: mup2ly.py:227 main.cc:215
+#, c-format, python-format
+msgid "Report bugs to %s."
+msgstr "請向 %s 匯報錯誤。"
+
+#: lilylib.py:228
+#, python-format
+msgid "Binary %s has version %s, looking for version %s"
 msgstr ""
 
-#: fontextract.py:86
+#: lilylib.py:262
 #, python-format
-msgid "Writing fonts to %s"
-msgstr "正在將字型寫入 %s"
+msgid "Opening pipe `%s'"
+msgstr "開啟管線 ‘%s’"
+
+#: lilylib.py:277 lilypond-book.py:1163
+#, python-format
+msgid "`%s' failed (%d)"
+msgstr "‘%s’ 發生錯誤 (%d)"
 
-#: lilylib.py:85 lilylib.py:136
+#: lilylib.py:282 lilylib.py:341 lilypond-book.py:1164
+msgid "The error log is as follows:"
+msgstr "以下是錯誤紀錄的內容:"
+
+#: lilylib.py:313 midi2ly.py:259 mup2ly.py:255
 #, python-format
 msgid "Invoking `%s'"
 msgstr "正在啟動 ‘%s’"
 
-#: lilylib.py:87 lilylib.py:138
+#: lilylib.py:315
 #, python-format
 msgid "Running %s..."
 msgstr "正在執行 %s..."
 
-#: lilylib.py:203
-#, fuzzy, python-format
-msgid "Usage: %s"
-msgstr "警告: %s"
+#: lilylib.py:334
+#, python-format
+msgid "`%s' failed (%s)"
+msgstr "‘%s’ 發生錯誤 (%s)"
 
-#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
-#, fuzzy, python-format
-msgid "%s [OPTION]... FILE"
-msgstr "用法: %s [選項]... 檔案"
+#: lilylib.py:337 midi2ly.py:265 mup2ly.py:263
+msgid "(ignored)"
+msgstr "(忽略)"
 
-#: abc2ly.py:1351
+#: lilylib.py:355 midi2ly.py:275 mup2ly.py:273
 #, python-format
-msgid ""
-"abc2ly converts ABC music files (see\n"
-"%s) to LilyPond input."
-msgstr ""
+msgid "Cleaning %s..."
+msgstr "正在清理 %s..."
 
-#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "將輸出資料寫入 <檔案>"
+#: lilylib.py:518
+#, python-format
+msgid "%s exited with status: %d"
+msgstr "%s 結束,回傳值為: %d"
 
-#: abc2ly.py:1357
-msgid "be strict about succes"
-msgstr ""
+#: convert-ly.py:32
+#, python-format
+msgid "%s has been replaced by %s"
+msgstr "%s 已被 %s 取代"
 
-#: abc2ly.py:1359
-msgid "preserve ABC's notion of beams"
+#: convert-ly.py:33
+#, python-format
+msgid "Not smart enough to convert %s"
 msgstr ""
 
-#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
-#: midi2ly.py:911 musicxml2ly.py:505
-#, fuzzy
-msgid "Report bugs via"
-msgstr "請向 %s 匯報錯誤。"
+#: convert-ly.py:34
+msgid "Please refer to the manual for details, and update manually."
+msgstr "請參考手冊,依照當中的內容自行更新。"
 
-#: convert-ly.py:41
-#, fuzzy
+#: convert-ly.py:50
+#, python-format
+msgid "Usage: %s [OPTION]... [FILE]..."
+msgstr "用法: %s [選項]... [檔案]..."
+
+#: convert-ly.py:53
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
 "version taken from the \\version command, to the current LilyPond version."
@@ -114,533 +157,613 @@ msgstr ""
 "更新 LilyPond 輸入檔的版本。在預設模式中,它會讀取原來檔案中的 \\version\n"
 "指令來決定其版本,並將之更新至最新的版本。"
 
-#: convert-ly.py:43 lilypond-book.py:73
-#, fuzzy
-msgid "Examples:"
-msgstr "例子:"
-
-#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
-#, c-format, python-format
-msgid "warning: %s"
-msgstr "警告: %s"
+#: convert-ly.py:59
+msgid ""
+"  -e, --edit             edit in place\n"
+"  -f, --from=VERSION     start from VERSION [default: \\version found in file]\n"
+"  -h, --help             print this help\n"
+"  -n, --no-version       do not add \\version command if missing\n"
+"  -s, --show-rules       print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]\n"
+"  -t, --to=VERSION       convert to VERSION [default: @TOPLEVEL_VERSION@]\n"
+"  -v, --version          print program version"
+msgstr ""
+"  -e, --edit             不備份\n"
+"  -f, --from=VERSION     由 VERSION 開始計算\n"
+"                         [預設是檔案中 \\version 所指定的版本]\n"
+"  -h, --help             顯示本說明訊息\n"
+"  -n, --no-version       如何內容本身沒有 \\version 的話不會自動加上去\n"
+"  -s, --show-rules       顯示轉換規則\n"
+"                         [預設是 --from=0, --to=@TOPLEVEL_VERSION@]\n"
+"  -t, --to=VERSION       轉換至指定的 VERSION [預設是 @TOPLEVEL_VERSION@]\n"
+"  -v, --version          顯示程式版本"
+
+#: convert-ly.py:68
+msgid "Examples"
+msgstr "例子"
 
-#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:81 lilypond-pdfpc-helper.py:34 main.cc:98
 #, c-format, python-format
-msgid "error: %s"
-msgstr "錯誤: %s"
-
-#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
-msgid "Distributed under terms of the GNU General Public License."
-msgstr "根據 GNU 公共授權條款發佈。"
-
-#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
-msgid "It comes with NO WARRANTY."
-msgstr "本程式沒有任何使用保證。"
-
-#: convert-ly.py:86 convert-ly.py:106
-msgid "VERSION"
-msgstr ""
-
-#: convert-ly.py:88
-msgid "start from VERSION [default: \\version found in file]"
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information.\n"
 msgstr ""
 
-#: convert-ly.py:91
-msgid "edit in place"
-msgstr ""
+#: convert-ly.py:2415
+msgid "LilyPond source must be UTF-8"
+msgstr "LilyPond 來源檔必須使用 UTF-8 編碼"
 
-#: convert-ly.py:94
-msgid "do not add \\version command if missing"
+#: convert-ly.py:2418
+msgid "Try the texstrings backend"
 msgstr ""
 
-#: convert-ly.py:100
-msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:2421
+#, python-format
+msgid "Do something like: %s"
 msgstr ""
 
-#: convert-ly.py:105
-msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
-msgstr ""
+#: convert-ly.py:2424
+msgid "Or save as UTF-8 in your editor"
+msgstr "或者在編輯器中指定使用 UTF-8 編碼儲存內容"
 
-#: convert-ly.py:153
+#: convert-ly.py:2502
 msgid "Applying conversion: "
 msgstr "進行轉換:"
 
-#: convert-ly.py:166
-#, fuzzy
-msgid "Error while converting"
+#: convert-ly.py:2514
+#, python-format
+msgid "%s: error while converting"
 msgstr "%s: 轉換時發生錯誤"
 
-#: convert-ly.py:168
-msgid "Stopping at last succesful rule"
-msgstr ""
+#: convert-ly.py:2517 score-engraver.cc:111
+msgid "Aborting"
+msgstr "終止"
 
-#: convert-ly.py:190
+#: convert-ly.py:2538
 #, python-format
 msgid "Processing `%s'... "
 msgstr "正在處理 ‘%s’..."
 
-#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
-#, c-format, python-format
-msgid "cannot open file: `%s'"
-msgstr "無法開啟檔案: ‘%s’"
-
-#: convert-ly.py:284
-#, fuzzy, python-format
-msgid "cannot determine version for `%s'.  Skipping"
+#: convert-ly.py:2645
+#, python-format
+msgid "%s: can't determine version for `%s'"
 msgstr "%s: 無法決定 ‘%s’ 的版本"
 
-#: etf2ly.py:1196
-#, fuzzy, python-format
-msgid "%s [OPTION]... ETF-FILE"
-msgstr "用法: %s [選項]... 檔案"
-
-#: etf2ly.py:1198
-msgid ""
-"Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
-"file."
+#: convert-ly.py:2654
+#, python-format
+msgid "%s: skipping: `%s'"
 msgstr ""
 
-#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
-msgid "FILE"
-msgstr "檔案"
-
-#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
-msgid "show warranty and copyright"
-msgstr "顯示保證條款及版權資訊"
-
 #: lilypond-book.py:71
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
-msgstr ""
-
-#: lilypond-book.py:78
-msgid "BOOK"
+"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
+"Example usage:\n"
+"\n"
+"   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
+"   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
+"   lilypond-book --process='lilypond -I include' BOOK\n"
 msgstr ""
 
-#: lilypond-book.py:87
-#, python-format
-msgid "Exiting (%d)..."
-msgstr "正在結束 (%d)..."
+#: lilypond-book.py:83
+msgid "FMT"
+msgstr "格式"
 
-#: lilypond-book.py:119
-#, fuzzy, python-format
-msgid "Copyright (c) %s by"
-msgstr "版權所有 (c) %s"
+#: lilypond-book.py:84
+msgid ""
+"use output format FMT (texi [default], texi-html,\n"
+"\t\tlatex, html)"
+msgstr ""
+"使用指定輸出 <格式> (texi [預設值]、texi-html、\n"
+"latex 或 html)"
 
-#: lilypond-book.py:129
+#: lilypond-book.py:86
 msgid "FILTER"
 msgstr "過濾程序"
 
-#: lilypond-book.py:132
+#: lilypond-book.py:87
 msgid "pipe snippets through FILTER [convert-ly -n -]"
 msgstr ""
 
-#: lilypond-book.py:135
-#, fuzzy
-msgid ""
-"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
-msgstr ""
-"使用指定輸出 <格式> (texi [預設值]、texi-html、\n"
-"latex 或 html)"
+#: lilypond-book.py:90 lilypond-book.py:92 main.cc:147
+msgid "DIR"
+msgstr "目錄"
 
-#: lilypond-book.py:138
+#: lilypond-book.py:91
 msgid "add DIR to include path"
 msgstr "將 <目錄> 加入搜尋目錄中"
 
-#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
-msgid "DIR"
-msgstr "目錄"
-
-#: lilypond-book.py:143
+#: lilypond-book.py:93
 msgid "write output to DIR"
 msgstr "將輸出結果寫入至 <目錄> 中"
 
-#: lilypond-book.py:147
+#: lilypond-book.py:94
 msgid "COMMAND"
 msgstr "指令"
 
-#: lilypond-book.py:148
+#: lilypond-book.py:95
 msgid "process ly_files using COMMAND FILE..."
 msgstr ""
 
-#: lilypond-book.py:154
-msgid "Create PDF files for use with PDFTeX"
-msgstr ""
+#: lilypond-book.py:96 midi2ly.py:102 main.cc:148 main.cc:149
+msgid "FILE"
+msgstr "檔案"
 
-#: lilypond-book.py:157
+#: lilypond-book.py:97
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
-"must use this with dvips -h INPUT.psfonts"
+"extract all PostScript fonts into FILE for LaTeX\n"
+"\t must use this with dvips -h FILE"
 msgstr ""
 
-#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
+#: lilypond-book.py:100 midi2ly.py:105 mup2ly.py:78 ps2png.py:42 main.cc:155
 msgid "be verbose"
 msgstr "顯示詳細訊息"
 
-#: lilypond-book.py:773
+#: lilypond-book.py:102
+msgid "print version information"
+msgstr "印出程式版本"
+
+#: lilypond-book.py:104 midi2ly.py:107 mup2ly.py:80 main.cc:156
+msgid "show warranty and copyright"
+msgstr "顯示保證條款及版權資訊"
+
+#: lilypond-book.py:610
 #, python-format
 msgid "file not found: %s"
 msgstr "找不到檔案: %s"
 
-#: lilypond-book.py:1004
+#: lilypond-book.py:808
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "使用了過時的 ly-option: %s=%s"
 
-#: lilypond-book.py:1007
+#: lilypond-book.py:811
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:1011
+#: lilypond-book.py:815
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "使用了過時的 ly-option: %s"
 
-#: lilypond-book.py:1014
+#: lilypond-book.py:818
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr ""
 
-#: lilypond-book.py:1033
+#: lilypond-book.py:837
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "不理會不明的 ly 選項:%s"
 
-#: lilypond-book.py:1388
+#: lilypond-book.py:1146
 #, python-format
 msgid "Opening filter `%s'"
 msgstr ""
 
-#: lilypond-book.py:1405
-#, python-format
-msgid "`%s' failed (%d)"
-msgstr "‘%s’ 發生錯誤 (%d)"
-
-#: lilypond-book.py:1406
-msgid "The error log is as follows:"
-msgstr "以下是錯誤紀錄的內容:"
-
-#: lilypond-book.py:1476
-msgid "cannot find \\begin{document} in LaTeX document"
-msgstr ""
-
-#: lilypond-book.py:1586
+#: lilypond-book.py:1309
 msgid "Writing snippets..."
 msgstr ""
 
-#: lilypond-book.py:1591
+#: lilypond-book.py:1314
 msgid "Processing..."
 msgstr "處理中..."
 
-#: lilypond-book.py:1595
+#: lilypond-book.py:1318
 msgid "All snippets are up to date..."
 msgstr ""
 
-#: lilypond-book.py:1605
+#: lilypond-book.py:1328
 #, python-format
-msgid "cannot determine format for: %s"
+msgid "can't determine format for: %s"
 msgstr "無法決定 %s 的格式"
 
-#: lilypond-book.py:1616
+#: lilypond-book.py:1339
 #, python-format
 msgid "%s is up to date."
 msgstr ""
 
-#: lilypond-book.py:1622
+#: lilypond-book.py:1345 mup2ly.py:1319
 #, python-format
 msgid "Writing `%s'..."
 msgstr "正在寫入 ‘%s’..."
 
-#: lilypond-book.py:1677
+#: lilypond-book.py:1386
 msgid "Output would overwrite input file; use --output."
 msgstr "這樣輸出檔會覆寫輸入檔;請使用 --output 選項。"
 
-#: lilypond-book.py:1681
+#: lilypond-book.py:1390
 #, python-format
 msgid "Reading %s..."
 msgstr "正在讀取 %s..."
 
-#: lilypond-book.py:1700
+#: lilypond-book.py:1406
 msgid "Dissecting..."
 msgstr ""
 
-#: lilypond-book.py:1716
+#: lilypond-book.py:1436
 #, python-format
 msgid "Compiling %s..."
 msgstr "正在編譯 %s ..."
 
-#: lilypond-book.py:1725
+#: lilypond-book.py:1445
 #, python-format
 msgid "Processing include: %s"
 msgstr ""
 
-#: lilypond-book.py:1739
+#: lilypond-book.py:1459
 #, python-format
 msgid "Removing `%s'"
 msgstr "正在移除 ‘%s’"
 
-#: lilypond-book.py:1815
+#: lilypond-book.py:1472 midi2ly.py:1016 ps2png.py:52
+#, python-format
+msgid "getopt says: `%s'"
+msgstr ""
+
+#: lilypond-book.py:1549
 #, python-format
 msgid "Writing fonts to %s..."
 msgstr "正在將字型寫入 %s..."
 
-#: lilypond-book.py:1830
-msgid "option --psfonts not used"
+#: lilypond-book.py:1565
+msgid "option --psfonts=FILE not used"
 msgstr ""
 
-#: lilypond-book.py:1831
+#: lilypond-book.py:1566
 msgid "processing with dvips will have no fonts"
 msgstr ""
 
-#: lilypond-book.py:1834
+#: lilypond-book.py:1569
 msgid "DVIPS usage:"
 msgstr "DVIPS 用法:"
 
-#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
-msgid "warning: "
-msgstr "警告:"
+#: lilypond-pdfpc-helper.py:72
+msgid "Not in FILE:LINE:COL format: "
+msgstr "不符合「檔案:行號:字數」格式:"
 
-#: midi2ly.py:109 midi2ly.py:924
-msgid "error: "
-msgstr "錯誤:"
-
-#: midi2ly.py:110
-msgid "Exiting ... "
-msgstr "結束 ... "
-
-#: midi2ly.py:857
+#: lilypond-pdfpc-helper.py:100
 #, python-format
-msgid "%s output to `%s'..."
-msgstr "%s 輸出至 ‘%s’..."
+msgid "Command failed: `%s' (status %d)"
+msgstr ""
 
-#: midi2ly.py:871 musicxml2ly.py:485
-#, fuzzy, python-format
-msgid "Convert %s to LilyPond input."
-msgstr "將 mup 格式轉換至 LilyPond 格式。"
+#. temp_dir = os.path.join (original_dir,  '%s.dir' % program_name)
+#. original_dir = os.getcwd ()
+#. keep_temp_dir_p = 0
+#: midi2ly.py:94
+msgid "Convert MIDI to LilyPond source."
+msgstr "將 MIDI 轉換為 LilyPond 來源檔。"
 
-#: midi2ly.py:875
+#: midi2ly.py:97
 msgid "print absolute pitches"
 msgstr ""
 
-#: midi2ly.py:877 midi2ly.py:889
+#: midi2ly.py:98 midi2ly.py:103
 msgid "DUR"
 msgstr ""
 
-#: midi2ly.py:878
+#: midi2ly.py:98
 msgid "quantise note durations on DUR"
 msgstr ""
 
-#: midi2ly.py:881
+#: midi2ly.py:99
 msgid "print explicit durations"
 msgstr ""
 
-#: midi2ly.py:882
-msgid "set key: ALT=+sharps|-flats; MINOR=1"
+#: midi2ly.py:101
+msgid "ALT[:MINOR]"
 msgstr ""
 
-#: midi2ly.py:883
-msgid "ALT[:MINOR]"
+#: midi2ly.py:101
+msgid "set key: ALT=+sharps|-flats; MINOR=1"
 msgstr ""
 
-#: midi2ly.py:888
+#: midi2ly.py:102 mup2ly.py:76
+msgid "write output to FILE"
+msgstr "將輸出資料寫入 <檔案>"
+
+#: midi2ly.py:103
 msgid "quantise note starts on DUR"
 msgstr ""
 
-#: midi2ly.py:891
+#: midi2ly.py:104
 msgid "DUR*NUM/DEN"
 msgstr ""
 
-#: midi2ly.py:894
+#: midi2ly.py:104
 msgid "allow tuplet durations DUR*NUM/DEN"
 msgstr ""
 
-#: midi2ly.py:902
+#: midi2ly.py:106 mup2ly.py:79 main.cc:154
+msgid "print version number"
+msgstr "顯示版本"
+
+#: midi2ly.py:108
 msgid "treat every text as a lyric"
 msgstr "將所有文字當作歌詞處理"
 
-#: midi2ly.py:905
-#, fuzzy
-msgid "Examples"
+#: midi2ly.py:149 mup2ly.py:143 lily-library.scm:345 lily-library.scm:353
+msgid "warning: "
+msgstr "警告:"
+
+#: midi2ly.py:164 midi2ly.py:1016 midi2ly.py:1081 mup2ly.py:146 mup2ly.py:160
+msgid "error: "
+msgstr "錯誤:"
+
+#: midi2ly.py:165 mup2ly.py:161
+msgid "Exiting ... "
+msgstr "結束 ... "
+
+#: midi2ly.py:263 mup2ly.py:260
+#, python-format
+msgid "command exited with value %d"
+msgstr "指令結束,回傳值為 %d"
+
+#: midi2ly.py:1000
+#, python-format
+msgid "%s output to `%s'..."
+msgstr "%s 輸出至 ‘%s’..."
+
+#: midi2ly.py:1031
+msgid "Example:"
 msgstr "例子:"
 
-#: midi2ly.py:925
+#: midi2ly.py:1081
 msgid "no files specified on command line."
 msgstr "指令參數中未指定任何檔案。"
 
-#: musicxml2ly.py:473
-msgid "musicxml2ly FILE.xml"
+#: mup2ly.py:70
+msgid "Convert mup to LilyPond source."
+msgstr "將 mup 格式轉換至 LilyPond 格式。"
+
+#: mup2ly.py:73
+msgid "debug"
+msgstr "偵錯"
+
+#: mup2ly.py:74
+msgid "define macro NAME [optional expansion EXP]"
 msgstr ""
 
-#: musicxml2ly.py:476
-#, python-format
-msgid ""
-"This program is free software.  It is covered by the GNU General Public\n"
-"License and you are welcome to change it and/or distribute copies of it\n"
-"under certain conditions.  Invoke as `%s --warranty' for more\n"
-"information."
+#: mup2ly.py:77
+msgid "only pre-process"
 msgstr ""
 
-#: musicxml2ly.py:495
-msgid "Use lxml.etree; uses less memory and cpu time."
+#: mup2ly.py:1075
+#, python-format
+msgid "no such context: %s"
 msgstr ""
 
-#: musicxml2ly.py:503
-#, fuzzy
-msgid "set output filename to FILE"
-msgstr "將輸出資料寫入 <檔案>"
+#: mup2ly.py:1300
+#, python-format
+msgid "Processing `%s'..."
+msgstr "正在處理 ‘%s’..."
+
+#. ugr.
+#: ps2png.py:36
+msgid "Convert PostScript to PNG image."
+msgstr "將 PostScript 轉換為 PNG 圖片。"
+
+#: ps2png.py:43
+msgid "PAPER"
+msgstr "尺寸"
+
+#: ps2png.py:43
+msgid "use papersize PAPER"
+msgstr "使用指定 <尺寸> 的紙張"
+
+#: ps2png.py:44
+msgid "RES"
+msgstr "RES"
+
+#: ps2png.py:44
+msgid "set the resolution of the preview to RES"
+msgstr "將預覽圖解析度設定為 RES"
+
+#: ps2png.py:76
+#, python-format
+msgid "Wrote `%s'"
+msgstr "寫入‘%s’"
 
-#: getopt-long.cc:140
+#: getopt-long.cc:143
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "選項 ‘%s’ 需要參數"
 
-#: getopt-long.cc:144
-#, fuzzy, c-format
-msgid "option `%s' does not allow an argument"
+#: getopt-long.cc:147
+#, c-format
+msgid "option `%s' doesn't allow an argument"
 msgstr "選項 ‘%s’ 不可配合參數使用"
 
-#: getopt-long.cc:148
+#: getopt-long.cc:151
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "無法識別的選項: ‘%s’"
 
-#: getopt-long.cc:154
+#: getopt-long.cc:158
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "選項 ‘%s’ 的參數 ‘%s’ 無效"
 
-#: warn.cc:68 grob.cc:559 input.cc:82
+#: warn.cc:64 grob.cc:632
 #, c-format
 msgid "programming error: %s"
 msgstr "程式錯誤:%s"
 
-#: warn.cc:69 input.cc:83
+#: warn.cc:65
 msgid "continuing, cross fingers"
 msgstr ""
 
-#: accidental-engraver.cc:240
+#.
+#. todo i18n.
+#.
+#: kpath.c:142
+#, c-format
+msgid "can't dlopen: %s: %s"
+msgstr "無法 dlopen: %s: %s"
+
+#: kpath.c:143
+#, c-format
+msgid "install package: %s or %s"
+msgstr ""
+
+#: kpath.c:156
+#, c-format
+msgid "no such symbol: %s: %s"
+msgstr ""
+
+#: kpath.c:179
+#, c-format
+msgid "error opening kpathsea library"
+msgstr "開啟 kpathsea 函式庫時發生錯誤"
+
+#: kpath.c:180
+#, c-format
+msgid "aborting"
+msgstr "終止"
+
+#: accidental-engraver.cc:235
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr ""
 
-#: accidental-engraver.cc:268
+#: accidental-engraver.cc:263
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr "忽略不明的升降符號:%s"
 
-#: accidental-engraver.cc:284
+#: accidental-engraver.cc:279
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:133
+#: accidental.cc:233 key-signature-interface.cc:127
 #, c-format
 msgid "accidental `%s' not found"
 msgstr "找不到升降符號 ‘%s’"
 
-#: align-interface.cc:222
-msgid ""
-"vertical alignment called before line-breaking.\n"
-"Only do cross-staff spanners with PianoStaff."
-msgstr ""
+#: afm.cc:142
+#, c-format
+msgid "parsing AFM file: `%s'"
+msgstr "解析 AFM 檔內容: ‘%s’"
 
-#: align-interface.cc:329
-msgid "tried to get a translation for something that is no child of mine"
-msgstr ""
+#. FIXME: broken sentence
+#: all-font-metrics.cc:176
+#, c-format
+msgid "checksum mismatch for font file: `%s'"
+msgstr "字型檔的檢查碼出現錯誤: ‘%s’"
+
+#: all-font-metrics.cc:178
+#, c-format
+msgid "does not match: `%s'"
+msgstr "不符合: ‘%s’"
+
+#: all-font-metrics.cc:184
+msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
+msgstr "重新產生所有 .afm 檔,並移除所有 .pk 和 .tfm 檔。"
+
+#: all-font-metrics.cc:186
+msgid "Rerun with -V to show font paths."
+msgstr "請加上 -V 選項重新執行,以顯示字型搜尋路徑。"
+
+#: all-font-metrics.cc:188
+msgid "A script for removing font-files is delivered with the source-code:"
+msgstr "程式碼中已經附有命令稿用來移除暫存字型檔:"
 
-#: all-font-metrics.cc:173
+#: all-font-metrics.cc:297
 #, c-format
-msgid "cannot find font: `%s'"
+msgid "can't find font: `%s'"
 msgstr "找不到字型:‘%s’"
 
-#: apply-context-iterator.cc:31
+#: all-font-metrics.cc:298
+msgid "loading default font"
+msgstr "正在載入預設字型"
+
+#: all-font-metrics.cc:313
+#, c-format
+msgid "can't find default font: `%s'"
+msgstr "找不到預設字型:‘%s’"
+
+#: all-font-metrics.cc:314 includable-lexer.cc:59 lily-parser-scheme.cc:70
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(搜尋路徑:‘%s’)"
+
+#: all-font-metrics.cc:315 volta-engraver.cc:142
+msgid "giving up"
+msgstr "放棄"
+
+#: apply-context-iterator.cc:33
 msgid "\\applycontext argument is not a procedure"
 msgstr ""
 
-#: auto-change-iterator.cc:63 change-iterator.cc:61
+#: auto-change-iterator.cc:62 change-iterator.cc:60
 #, c-format
-msgid "cannot change, already in translator: %s"
+msgid "can't change, already in translator: %s"
 msgstr ""
 
-#: axis-group-engraver.cc:78
+#: axis-group-engraver.cc:112
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:79
+#: axis-group-engraver.cc:113
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:80
+#: axis-group-engraver.cc:114
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:96
-msgid "tried to calculate pure-height at a non-breakpoint"
-msgstr ""
-
-#: axis-group-interface.cc:370
-msgid "an outside-staff object should have a direction, defaulting to up"
-msgstr ""
-
-#: axis-group-interface.cc:383
-#, c-format
-msgid "outside-staff object %s has an empty extent"
-msgstr ""
-
-#: bar-check-iterator.cc:73
+#: bar-check-iterator.cc:70
 #, c-format
 msgid "barcheck failed at: %s"
 msgstr "barcheck 失敗,位置在:%s"
 
-#: beam-engraver.cc:128
+#: beam-engraver.cc:136
 msgid "already have a beam"
 msgstr "已經有了連桁 (beam)"
 
-#: beam-engraver.cc:196
+#: beam-engraver.cc:205
 msgid "unterminated beam"
 msgstr "連桁沒有終點"
 
-#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:165
 msgid "stem must have Rhythmic structure"
 msgstr ""
 
-#: beam-engraver.cc:246
-msgid "stem does not fit in beam"
+#: beam-engraver.cc:251
+msgid "stem doesn't fit in beam"
 msgstr ""
 
-#: beam-engraver.cc:247
+#: beam-engraver.cc:252
 msgid "beam was started here"
 msgstr ""
 
-#: beam-quanting.cc:307
-#, fuzzy
-msgid "no feasible beam position"
-msgstr "無法找出適當斷行位置"
+#: beam.cc:142
+msgid "beam has less than two visible stems"
+msgstr "連桁連接的符桿中,真正顯示出來的少於兩條"
 
-#: beam.cc:144
-#, fuzzy
-msgid "removing beam with no stems"
+#: beam.cc:147
+msgid "removing beam with less than two stems"
 msgstr "移除少於兩條符桿的連桁"
 
-#: beam.cc:1007
+#: beam.cc:988
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 
-#: break-alignment-interface.cc:208
+#: break-align-interface.cc:205
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr ""
 
-#: change-iterator.cc:23
+#: change-iterator.cc:22
 #, c-format
-msgid "cannot change `%s' to `%s'"
+msgid "can't change `%s' to `%s'"
 msgstr "無法將 ‘%s’ 更改為 ‘%s’"
 
 #. FIXME: constant error message.
-#: change-iterator.cc:82
-msgid "cannot find context to switch to"
+#: change-iterator.cc:81
+msgid "can't find context to switch to"
 msgstr ""
 
 #. We could change the current translator's id, but that would make
@@ -648,169 +771,190 @@ msgstr ""
 #.
 #. last->translator_id_string () = get_change
 #. ()->change_to_id_string ();
-#: change-iterator.cc:91
+#: change-iterator.cc:90
 #, c-format
 msgid "not changing to same context type: %s"
 msgstr ""
 
 #. FIXME: uncomprehensable message
-#: change-iterator.cc:95
+#: change-iterator.cc:94
 msgid "none of these in my family"
 msgstr ""
 
-#: chord-tremolo-engraver.cc:88
-msgid "No tremolo to end"
-msgstr ""
+#: chord-tremolo-engraver.cc:94
+#, c-format
+msgid "expect 2 elements for chord tremolo, found %d"
+msgstr "顫音和弦需要 2 個元素,但實際上找到 %d 個"
 
-#: chord-tremolo-engraver.cc:110
+#: chord-tremolo-engraver.cc:131
 msgid "unterminated chord tremolo"
 msgstr "顫音和弦沒有終結"
 
-#: chord-tremolo-iterator.cc:33
-#, c-format
-msgid "expect 2 elements for chord tremolo, found %d"
-msgstr "顫音和弦需要 2 個元素,但實際上找到 %d 個"
+#: chord-tremolo-iterator.cc:64
+msgid "no one to print a tremolos"
+msgstr ""
 
-#: clef.cc:54
+#: clef.cc:57
 #, c-format
 msgid "clef `%s' not found"
 msgstr "找不到譜號 ‘%s’"
 
-#: cluster.cc:110
+#: cluster.cc:118
 #, c-format
 msgid "unknown cluster style `%s'"
 msgstr ""
 
-#: cluster.cc:135
+#: cluster.cc:144
 msgid "junking empty cluster"
 msgstr ""
 
-#: coherent-ligature-engraver.cc:100
+#: coherent-ligature-engraver.cc:84
 #, c-format
-msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
+msgid "gotcha: ptr=%ul"
 msgstr ""
 
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:176 constrained-breaking.cc:193
-msgid "cannot find line breaking that satisfies constraints"
-msgstr "找不到符合指定條件的斷行位置"
+#: coherent-ligature-engraver.cc:93
+msgid "distance undefined, assuming 0.1"
+msgstr "未定義距離,假設為 0.1"
 
-#: context-def.cc:130
+#: coherent-ligature-engraver.cc:96
 #, c-format
-msgid "program has no such type: `%s'"
+msgid "distance=%f"
 msgstr ""
 
-#: context-property.cc:76
-msgid "need symbol arguments for \\override and \\revert"
-msgstr ""
-
-#: context.cc:151
+#: coherent-ligature-engraver.cc:139
 #, c-format
-msgid "cannot find or create new `%s'"
+msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
 
-#: context.cc:213
+#: context-def.cc:111
 #, c-format
-msgid "cannot find or create `%s' called `%s'"
+msgid "program has no such type: `%s'"
 msgstr ""
 
-#: context.cc:276
+#: context-def.cc:285
 #, c-format
-msgid "Invalid CreateContext event: Cannot create %s context"
+msgid "can't find: `%s'"
+msgstr "找不到: ‘%s’"
+
+#: context-property.cc:111
+msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
-#: context.cc:388
+#: context.cc:146
 #, c-format
-msgid "cannot find or create: `%s'"
+msgid "can't find or create new `%s'"
 msgstr ""
 
-#: custos.cc:77
+#: context.cc:210
 #, c-format
-msgid "custos `%s' not found"
+msgid "can't find or create `%s' called `%s'"
 msgstr ""
 
-#: dispatcher.cc:71
-msgid "Event class should be a symbol"
+#: context.cc:301
+#, c-format
+msgid "can't find or create: `%s'"
 msgstr ""
 
-#: dispatcher.cc:78
+#: custos.cc:83
 #, c-format
-msgid "Unknown event class %s"
+msgid "custos `%s' not found"
 msgstr ""
 
-#: dots.cc:38
-#, fuzzy, c-format
-msgid "dot `%s' not found"
-msgstr "找不到休止符 ‘%s’"
-
-#: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "cannot find start of (de)crescendo"
+#: dynamic-engraver.cc:171 span-dynamic-performer.cc:83
+msgid "can't find start of (de)crescendo"
 msgstr "漸強/漸弱符號沒有起點"
 
-#: dynamic-engraver.cc:195
+#: dynamic-engraver.cc:180
 msgid "already have a decrescendo"
 msgstr "已經有漸弱符號"
 
-#: dynamic-engraver.cc:197
+#: dynamic-engraver.cc:182
 msgid "already have a crescendo"
 msgstr "已經有漸強符號"
 
-#: dynamic-engraver.cc:200
+#: dynamic-engraver.cc:185
 msgid "cresc starts here"
 msgstr "漸強符號在這裡開始"
 
-#: dynamic-engraver.cc:323
+#: dynamic-engraver.cc:304
 msgid "unterminated (de)crescendo"
 msgstr "漸強/漸弱符號沒有終點"
 
-#: extender-engraver.cc:131 extender-engraver.cc:140
+#: event-chord-iterator.cc:55 output-property-music-iterator.cc:29
+#, c-format
+msgid "junking event: `%s'"
+msgstr ""
+
+#: extender-engraver.cc:139 extender-engraver.cc:148
 msgid "unterminated extender"
 msgstr ""
 
-#: font-config.cc:28
+#: folded-repeat-iterator.cc:64
+msgid "no one to print a repeat brace"
+msgstr ""
+
+#: font-config.cc:23
 msgid "Initializing FontConfig..."
 msgstr "正在初始化 FontConfig..."
 
-#: font-config.cc:44
-#, c-format
-msgid "Rebuilding FontConfig cache %s, this may take a while..."
-msgstr ""
+#: font-config.cc:26
+msgid "initializing FontConfig"
+msgstr "正在初始化 FontConfig"
 
-#: font-config.cc:55
-#, fuzzy, c-format
-msgid "failed adding font directory: %s"
-msgstr "加入字型目錄:%s"
+#: font-config.cc:47
+#, c-format
+msgid "adding lilypond directory: %s"
+msgstr "加入 lilypond 目錄:%s"
 
-#: font-config.cc:57
+#: font-config.cc:49
 #, c-format
 msgid "adding font directory: %s"
 msgstr "加入字型目錄:%s"
 
-#: general-scheme.cc:160
+#: general-scheme.cc:172
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 
-#: general-scheme.cc:161
+#: general-scheme.cc:173
 msgid "setting to zero"
 msgstr ""
 
-#: glissando-engraver.cc:92
+#: glissando-engraver.cc:97
 msgid "unterminated glissando"
 msgstr "滑奏沒有終結"
 
-#: global-context-scheme.cc:91 global-context-scheme.cc:107
+#: global-context-scheme.cc:49 global-context-scheme.cc:76
 msgid "no music found in score"
 msgstr "樂譜中沒有任何音符存在"
 
-#: global-context-scheme.cc:97
+#: global-context-scheme.cc:66
 msgid "Interpreting music... "
 msgstr ""
 
-#: global-context-scheme.cc:120
+#: global-context-scheme.cc:87
 #, c-format
 msgid "elapsed time: %.2f seconds"
 msgstr ""
 
+#: global-context.cc:160
+#, c-format
+msgid "can't find `%s' context"
+msgstr ""
+
+#: gourlay-breaking.cc:199
+#, c-format
+msgid "Optimal demerits: %f"
+msgstr ""
+
+#: gourlay-breaking.cc:204
+msgid "no feasible line breaking found"
+msgstr "無法找出適當斷行位置"
+
+#: gourlay-breaking.cc:212
+msgid "can't find line breaking that satisfies constraints"
+msgstr "找不到符合指定條件的斷行位置"
+
 #: gregorian-ligature-engraver.cc:59
 #, c-format
 msgid "\\%s ignored"
@@ -821,94 +965,86 @@ msgstr "不理會 \\%s"
 msgid "implied \\%s added"
 msgstr ""
 
-#. ligature may not start with 2nd head of pes or flexa
-#: gregorian-ligature-engraver.cc:212
-#, fuzzy
-msgid "cannot apply `\\~' on first head of ligature"
-msgstr "找不到樂句線的起點"
+#: gregorian-ligature-engraver.cc:213
+msgid "Cannot apply `\\~' on first head of ligature; ignoring `\\~'"
+msgstr ""
 
-#. (pitch == prev_pitch)
-#: gregorian-ligature-engraver.cc:224
-msgid "cannot apply `\\~' on heads with identical pitch"
+#: gregorian-ligature-engraver.cc:227
+msgid "can't apply `\\~' on heads with identical pitch; ignoring `\\~'"
 msgstr ""
 
-#: grob-interface.cc:57
+#: grob-interface.cc:45
 #, c-format
 msgid "Unknown interface `%s'"
 msgstr ""
 
-#: grob-interface.cc:68
+#: grob-interface.cc:56
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob.cc:253
-msgid "Infinity or NaN encountered"
-msgstr ""
-
-#: hairpin.cc:183
+#: hairpin.cc:131
 msgid "decrescendo too small"
 msgstr "漸弱符號太小"
 
-#: horizontal-bracket-engraver.cc:59
-msgid "do not have that many brackets"
+#: hairpin.cc:132
+msgid "crescendo too small"
+msgstr "漸強符號太小"
+
+#: horizontal-bracket-engraver.cc:55
+msgid "don't have that many brackets"
 msgstr ""
 
-#: horizontal-bracket-engraver.cc:68
+#: horizontal-bracket-engraver.cc:64
 msgid "conflicting note group events"
 msgstr ""
 
-#: hyphen-engraver.cc:93
+#: hyphen-engraver.cc:89
 msgid "removing unterminated hyphen"
 msgstr ""
 
-#: hyphen-engraver.cc:107
+#: hyphen-engraver.cc:102
 msgid "unterminated hyphen; removing"
 msgstr ""
 
-#: includable-lexer.cc:53
+#: includable-lexer.cc:50
 msgid "include files are not allowed in safe mode"
 msgstr "安全模式中不允許再包含另一個檔案的內容"
 
-#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
+#: includable-lexer.cc:57 lily-guile.cc:90 lily-parser-scheme.cc:77
 #, c-format
-msgid "cannot find file: `%s'"
+msgid "can't find file: `%s'"
 msgstr "找不到檔案: ‘%s’"
 
-#: includable-lexer.cc:62 lily-parser-scheme.cc:107
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(搜尋路徑:‘%s’)"
-
-#: input.cc:112 source-file.cc:168 source-file.cc:183
+#: input.cc:101 source-file.cc:144 source-file.cc:266
 msgid "position unknown"
 msgstr "位置不明"
 
-#: ligature-engraver.cc:93
-msgid "cannot find start of ligature"
+#: ligature-engraver.cc:152
+msgid "can't find start of ligature"
 msgstr "找不到樂句線的起點"
 
-#: ligature-engraver.cc:98
+#: ligature-engraver.cc:158
 msgid "no right bound"
 msgstr "沒有右邊邊界"
 
-#: ligature-engraver.cc:120
+#: ligature-engraver.cc:184
 msgid "already have a ligature"
 msgstr "已經有樂句線"
 
-#: ligature-engraver.cc:129
+#: ligature-engraver.cc:200
 msgid "no left bound"
 msgstr "沒有左邊邊界"
 
-#: ligature-engraver.cc:173
+#: ligature-engraver.cc:256
 msgid "unterminated ligature"
 msgstr "樂句線沒有終點"
 
-#: ligature-engraver.cc:202
+#: ligature-engraver.cc:280
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "忽略休止符;樂句中不可含有休止符"
 
-#: ligature-engraver.cc:203
+#: ligature-engraver.cc:281
 msgid "ligature was started here"
 msgstr "樂句在這裡開始"
 
@@ -917,79 +1053,58 @@ msgstr "樂句在這裡開始"
 msgid "(load path: `%s')"
 msgstr "(載入路徑:‘%s’)"
 
-#: lily-guile.cc:518
+#: lily-guile.cc:484
 #, c-format
-msgid "cannot find property type-check for `%s' (%s)."
+msgid "can't find property type-check for `%s' (%s)."
 msgstr ""
 
-#: lily-guile.cc:521
+#: lily-guile.cc:487
 msgid "perhaps a typing error?"
 msgstr "是否打錯字?"
 
-#: lily-guile.cc:527
+#: lily-guile.cc:493
 msgid "doing assignment anyway"
 msgstr ""
 
-#: lily-guile.cc:539
+#: lily-guile.cc:505
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 
-#: lily-lexer.cc:254
+#: lily-lexer.cc:210
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr ""
 
-#: lily-lexer.cc:269
+#: lily-lexer.cc:225
 #, c-format
 msgid "error at EOF: %s"
 msgstr "檔案結束的位置發生錯誤: %s"
 
-#: lily-parser-scheme.cc:29
+#: lily-parser-scheme.cc:30
 #, c-format
 msgid "deprecated function called: %s"
 msgstr "調用已過時的函式: %s"
 
-#: lily-parser-scheme.cc:88
-#, fuzzy, c-format
-msgid "Changing working directory to: `%s'"
-msgstr "無法將工作目錄切換至: %s: %s"
-
-#: lily-parser-scheme.cc:106
+#: lily-parser-scheme.cc:69
 #, c-format
-msgid "cannot find init file: `%s'"
+msgid "can't find init file: `%s'"
 msgstr ""
 
-#: lily-parser-scheme.cc:125
+#: lily-parser-scheme.cc:87
 #, c-format
 msgid "Processing `%s'"
 msgstr "正在處理 ‘%s’"
 
-#: lily-parser.cc:99
+#: lily-parser.cc:101
 msgid "Parsing..."
 msgstr "分析中..."
 
-#: lily-parser.cc:127
-#, fuzzy
-msgid "braces do not match"
-msgstr "不符合: ‘%s’"
-
-#: lyric-combine-music-iterator.cc:291
-#, c-format
-msgid "cannot find Voice `%s'"
+#: lily-parser.cc:119
+msgid "braces don't match"
 msgstr ""
 
-#: main.cc:116
-#, c-format
-msgid ""
-"This program is free software.  It is covered by the GNU General Public\n"
-"License and you are welcome to change it and/or distribute copies of it\n"
-"under certain conditions.  Invoke as `%s --warranty' for more\n"
-"information.\n"
-msgstr ""
-
-#: main.cc:122
-#, fuzzy
+#: main.cc:104
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -1000,7 +1115,7 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy of the\n"
+"    You should have received a copy (refer to the file COPYING) of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
@@ -1014,127 +1129,103 @@ msgstr ""
 "您應已收到附隨於本程式的 GNU 通用公共授權的副本;如無,請寫信至自由\n"
 "軟體基金會:59 Temple Place – Suite 330, Boston, Ma 02111-1307, USA\n"
 
-#: main.cc:153
+#: main.cc:135
 msgid "BACK"
 msgstr "背景模組"
 
-#: main.cc:153
-#, fuzzy
+#: main.cc:135
 msgid ""
-"use backend BACK (eps, gnome, ps [default],\n"
-"scm, svg, tex, texstr)"
+"use backend BACK (gnome, ps [default],\n"
+"                                       scm, svg, tex, texstr)"
 msgstr ""
 "使用指定的背景模組 (gnome, ps [預設],\n"
 "                                       scm, svg, tex, texstr)"
 
-#: main.cc:155
-msgid "SYM[=VAL]"
-msgstr ""
-
-#: main.cc:156
-msgid ""
-"set Scheme option SYM to VAL (default: #t)\n"
-"Use -dhelp for help."
-msgstr ""
-
-#: main.cc:159
+#: main.cc:136
 msgid "EXPR"
 msgstr "表示式"
 
-#: main.cc:159
-msgid "evaluate scheme code"
+#: main.cc:136
+msgid ""
+"set scheme option, for help use\n"
+"                                       -e '(ly:option-usage)'"
 msgstr ""
+"設定 scheme 的選項,如果需要說明文件\n"
+"                                       請用 -e '(ly:option-usage)'"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:162
+#: main.cc:139
 msgid "FORMATs"
 msgstr "格式"
 
-#: main.cc:162
+#: main.cc:139
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr "輸出為指定 <格式>。也可以使用下列選項:"
 
-#: main.cc:163
+#: main.cc:140
 msgid "generate DVI (tex backend only)"
 msgstr "產生 DVI (只適用於 tex 背景模組)"
 
-#: main.cc:164
+#: main.cc:141
 msgid "generate PDF (default)"
 msgstr "產生 PDF (預設)"
 
-#: main.cc:165
+#: main.cc:142
 msgid "generate PNG"
 msgstr "產生 PNG"
 
-#: main.cc:166
+#: main.cc:143
 msgid "generate PostScript"
 msgstr "產生 PostScript"
 
-#: main.cc:167
+#: main.cc:144
 msgid "generate TeX (tex backend only)"
 msgstr "產生 TeX (只適用於 tex 背景模組)"
 
-#: main.cc:168
-msgid "show this help and exit"
-msgstr ""
-
-#: main.cc:169
+#: main.cc:146
 msgid "FIELD"
 msgstr "欄位"
 
-#: main.cc:169
-msgid ""
-"dump header field FIELD to file\n"
-"named BASENAME.FIELD"
+#: main.cc:146
+msgid "write header field to BASENAME.FIELD"
 msgstr ""
 
-#: main.cc:171
+#: main.cc:147
 msgid "add DIR to search path"
 msgstr "將 <目錄> 加入搜尋目錄中"
 
-#: main.cc:172
+#: main.cc:148
 msgid "use FILE as init file"
 msgstr ""
 
-#: main.cc:174
+#: main.cc:149
+msgid "write output to FILE (suffix will be added)"
+msgstr "將輸出內容寫入 <檔案> (會自動加上延伸檔名)"
+
+#: main.cc:150
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:174
+#: main.cc:150
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
-"and cd into DIR"
+"                                       and cd into DIR"
 msgstr ""
 
-#: main.cc:177
+#: main.cc:151
 msgid "do not generate printed output"
 msgstr ""
 
-#: main.cc:178
-msgid "write output to FILE (suffix will be added)"
-msgstr "將輸出內容寫入 <檔案> (會自動加上延伸檔名)"
-
-#: main.cc:179
+#: main.cc:152
 msgid "generate a preview of the first system"
 msgstr ""
 
-#: main.cc:180
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:181
-msgid ""
-"disallow unsafe Scheme and PostScript\n"
-"operations"
-msgstr ""
-
-#: main.cc:183
-#, fuzzy
-msgid "show version number and exit"
-msgstr "顯示版本"
+#: main.cc:153
+msgid "run in safe mode"
+msgstr "使用安全模式"
 
-#: main.cc:224
+#: main.cc:177
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1144,131 +1235,111 @@ msgstr ""
 "%s  等等。"
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:251
+#: main.cc:203
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "用法: %s [選項]... 檔案..."
 
-#: main.cc:253
+#: main.cc:205
 #, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "排列樂譜,並且/或者由檔案產生 MIDI。"
 
-#: main.cc:255
+#: main.cc:207
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond 是用來排列樂譜的軟體。"
 
-#: main.cc:257
+#: main.cc:209
 #, c-format
 msgid "For more information, see %s"
 msgstr "如果想獲取更多資訊,請瀏覽 %s"
 
-#: main.cc:259
+#: main.cc:299
 #, c-format
-msgid "Options:"
-msgstr "選項:"
-
-#: main.cc:263
-#, fuzzy, c-format
-msgid "Report bugs via %s"
-msgstr "請向 %s 匯報錯誤。"
-
-#: main.cc:309
-#, fuzzy, c-format
-msgid "expected %d arguments with jail, found: %u"
-msgstr "鋼琴踏板記號後要跟隨 3 個字串,但只找到 %d 個"
+msgid "expected %d arguments with jail, found: %d"
+msgstr ""
 
-#: main.cc:323
+#: main.cc:313
 #, c-format
 msgid "no such user: %s"
 msgstr "%s 用戶不存在"
 
-#: main.cc:325
+#: main.cc:315
 #, c-format
-msgid "cannot get user id from user name: %s: %s"
+msgid "can't get user id from user name: %s: %s"
 msgstr "無法從用戶名稱獲得 UID: %s: %s"
 
-#: main.cc:340
+#: main.cc:330
 #, c-format
 msgid "no such group: %s"
 msgstr "%s 群組不存在"
 
-#: main.cc:342
+#: main.cc:332
 #, c-format
-msgid "cannot get group id from group name: %s: %s"
+msgid "can't get group id from group name: %s: %s"
 msgstr "無法從群組名稱獲得 GID: %s: %s"
 
-#: main.cc:350
+#: main.cc:340
 #, c-format
-msgid "cannot chroot to: %s: %s"
+msgid "can't chroot to: %s: %s"
 msgstr ""
 
-#: main.cc:357
+#: main.cc:347
 #, c-format
-msgid "cannot change group id to: %d: %s"
+msgid "can't change group id to: %d: %s"
 msgstr "無法將 GID 更改為 %d: %s"
 
-#: main.cc:363
+#: main.cc:353
 #, c-format
-msgid "cannot change user id to: %d: %s"
+msgid "can't change user id to: %d: %s"
 msgstr "無法將 UID 更改為 %d: %s"
 
-#: main.cc:369
+#: main.cc:359
 #, c-format
-msgid "cannot change working directory to: %s: %s"
+msgid "can't change working directory to: %s: %s"
 msgstr "無法將工作目錄切換至: %s: %s"
 
-#: main.cc:415
-#, c-format
-msgid "Evaluating %s"
-msgstr ""
-
-#: main.cc:645
-#, c-format
-msgid "exception caught: %s"
-msgstr ""
-
 #. FIXME: constant error message.
-#: mark-engraver.cc:154
+#: mark-engraver.cc:123
 msgid "rehearsalMark must have integer value"
 msgstr "rehearsalMark 必須是整數"
 
-#: mark-engraver.cc:160
+#: mark-engraver.cc:129
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:85
+#: mensural-ligature-engraver.cc:74
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "圓滑線包含的音符符頭少於 2 個,因此忽略之"
 
-#: mensural-ligature-engraver.cc:112
+#: mensural-ligature-engraver.cc:101
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:126
+#: mensural-ligature-engraver.cc:115
 msgid "single note ligature - skipping"
 msgstr "忽略單音符的圓滑線"
 
-#: mensural-ligature-engraver.cc:138
+#: mensural-ligature-engraver.cc:127
 msgid "prime interval within ligature -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:150
+#: mensural-ligature-engraver.cc:139
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:198
+#: mensural-ligature-engraver.cc:187
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:209
+#: mensural-ligature-engraver.cc:198
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:236
+#: mensural-ligature-engraver.cc:225
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -1276,410 +1347,414 @@ msgid ""
 "or the ligatura must be LB or SSB"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:356
+#: mensural-ligature-engraver.cc:345
 msgid "unexpected case fall-through"
 msgstr ""
 
-#: mensural-ligature.cc:141
+#: mensural-ligature.cc:131
 msgid "Mensural_ligature: unexpected case fall-through"
 msgstr ""
 
-#: mensural-ligature.cc:192
+#: mensural-ligature.cc:183
 msgid "Mensural_ligature: (join_right == 0)"
 msgstr "Mensural_ligature: (join_right == 0)"
 
-#: midi-item.cc:152
+#: midi-item.cc:150
 #, c-format
 msgid "no such MIDI instrument: `%s'"
 msgstr "MIDI 樂器不存在: ‘%s’"
 
-#: midi-item.cc:285
+#: midi-item.cc:254
+msgid "silly pitch"
+msgstr ""
+
+#: midi-item.cc:270
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr ""
 
-#: midi-stream.cc:28
+#: midi-stream.cc:27
 #, c-format
-msgid "cannot open for write: %s: %s"
+msgid "can't open for write: %s: %s"
 msgstr "無法開啟檔案來寫入內容: %s: %s"
 
 #: midi-stream.cc:44
 #, c-format
-msgid "cannot write to file: `%s'"
+msgid "can't write to file: `%s'"
 msgstr "無法寫入檔案: ‘%s’"
 
-#: music-iterator.cc:171
-msgid "Sending non-event to context"
-msgstr ""
-
-#: music.cc:141
+#: music.cc:176
 #, c-format
-msgid "octave check failed; expected \"%s\", found: \"%s\""
+msgid "octave check failed; expected %s, found: %s"
 msgstr ""
 
-#: music.cc:207
+#: music.cc:239
 #, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr ""
 
-#: new-fingering-engraver.cc:96
-msgid "cannot add text scripts to individual note heads"
+#: new-fingering-engraver.cc:84
+msgid "can't add text scripts to individual note heads"
 msgstr ""
 
-#: new-fingering-engraver.cc:239
+#.
+#. music for the softenon children?
+#.
+#: new-fingering-engraver.cc:158
+msgid "music for the martians."
+msgstr ""
+
+#: new-fingering-engraver.cc:266
 msgid "no placement found for fingerings"
 msgstr ""
 
-#: new-fingering-engraver.cc:240
+#: new-fingering-engraver.cc:267
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:457
+#: new-lyric-combine-music-iterator.cc:240
+#, c-format
+msgid "cannot find Voice `%s'"
+msgstr ""
+
+#: note-collision.cc:404
 msgid "ignoring too many clashing note columns"
 msgstr ""
 
-#: note-column.cc:124
-msgid "cannot have note heads and rests together on a stem"
+#: note-column.cc:115
+msgid "can't have note heads and rests together on a stem"
 msgstr "一條符桿上不可以同時有符頭和休止符"
 
-#: note-head.cc:63
-#, fuzzy, c-format
-msgid "none of note heads `%s' or `%s' found"
+#: note-head.cc:66
+#, c-format
+msgid "note head `%s' not found"
 msgstr "找不到符頭 ‘%s’"
 
-#: note-heads-engraver.cc:61
-msgid "NoteEvent without pitch"
-msgstr ""
-
-#: open-type-font.cc:33
-#, fuzzy, c-format
-msgid "cannot allocate %lu bytes"
+#: open-type-font.cc:29
+#, c-format
+msgid "can't allocate %d bytes"
 msgstr "無法分配 %d 位元組"
 
-#: open-type-font.cc:37
+#: open-type-font.cc:33
 #, c-format
-msgid "cannot load font table: %s"
+msgid "can't load font table: %s"
 msgstr "無法載入字型表: %s"
 
-#: open-type-font.cc:98
+#: open-type-font.cc:84
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "不支援字型格式: %s"
 
-#: open-type-font.cc:100
+#: open-type-font.cc:86
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr ""
 
-#: open-type-font.cc:173 open-type-font.cc:297
-#, fuzzy, c-format
-msgid "FT_Get_Glyph_Name() returned error: %u"
-msgstr "FT_Get_Glyph_Name() 回傳錯誤代碼: %d"
-
-#: page-turn-page-breaking.cc:205
-msgid ""
-"cannot fit the first page turn onto a single page.  Consider setting first-"
-"page-number to an even number."
-msgstr ""
-
-#: page-turn-page-breaking.cc:218
+#: open-type-font.cc:140
 #, c-format
-msgid "Calculating page and line breaks (%d possible page breaks)..."
-msgstr ""
-
-#: page-turn-page-breaking.cc:236 paper-score.cc:154
-msgid "Drawing systems..."
-msgstr ""
-
-#: pango-font.cc:181
-#, c-format
-msgid ""
-"Glyph has no name, but font supports glyph naming.\n"
-"Skipping glyph U+%0X, file %s"
-msgstr ""
+msgid "FT_Get_Glyph_Name() returned error: %d"
+msgstr "FT_Get_Glyph_Name() 回傳錯誤代碼: %d"
 
-#: pango-font.cc:224
+#: pango-font.cc:130
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "字型 ‘%s’ 沒有 PostScript 字型名稱"
 
-#: pango-font.cc:272
+#: pango-font.cc:177
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
-#: paper-outputter-scheme.cc:33
+#: paper-outputter-scheme.cc:26
 #, c-format
 msgid "Layout output to `%s'..."
 msgstr ""
 
-#: paper-score.cc:105
-msgid "Calculating line breaks..."
-msgstr ""
-
-#: paper-score.cc:118
+#: paper-score.cc:76
 #, c-format
 msgid "Element count %d (spanners %d) "
 msgstr ""
 
-#: paper-score.cc:122
+#: paper-score.cc:80
 msgid "Preprocessing graphical objects..."
 msgstr ""
 
-#: parse-scm.cc:83
+#: parse-scm.cc:81
 msgid "GUILE signaled an error for the expression beginning here"
 msgstr ""
 
-#: percent-repeat-engraver.cc:200
+#: percent-repeat-engraver.cc:99
+#, c-format
+msgid "can't handle a percent repeat of length: %s"
+msgstr ""
+
+#: percent-repeat-engraver.cc:161
 msgid "unterminated percent repeat"
 msgstr ""
 
-#: performance.cc:45
+#: percent-repeat-iterator.cc:51
+msgid "no one to print a percent"
+msgstr ""
+
+#: performance.cc:47
 msgid "Track..."
 msgstr ""
 
-#: performance.cc:74
+#: performance.cc:71
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: performance.cc:75
+#: performance.cc:72
 msgid "remapping modulo 16"
 msgstr ""
 
-#: performance.cc:103
+#: performance.cc:91
+msgid "Creator: "
+msgstr ""
+
+#: performance.cc:111
+msgid "at "
+msgstr ""
+
+#: performance.cc:165
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "將 MIDI 輸出至 ‘%s’..."
 
-#: phrasing-slur-engraver.cc:146
+#: phrasing-slur-engraver.cc:115
 msgid "unterminated phrasing slur"
 msgstr "樂句線沒有終點"
 
-#: piano-pedal-engraver.cc:286
-#, fuzzy, c-format
-msgid "expect 3 strings for piano pedals, found: %ld"
+#: piano-pedal-engraver.cc:224
+#, c-format
+msgid "expect 3 strings for piano pedals, found: %d"
 msgstr "鋼琴踏板記號後要跟隨 3 個字串,但只找到 %d 個"
 
-#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
-#: piano-pedal-performer.cc:93
+#: piano-pedal-engraver.cc:240 piano-pedal-engraver.cc:255
+#: piano-pedal-performer.cc:80
 #, c-format
-msgid "cannot find start of piano pedal: `%s'"
+msgid "can't find start of piano pedal: `%s'"
 msgstr "找不到鋼琴踏板記號的開始位置: ‘%s’"
 
-#: piano-pedal-engraver.cc:347
+#: piano-pedal-engraver.cc:305
 #, c-format
-msgid "cannot find start of piano pedal bracket: `%s'"
+msgid "can't find start of piano pedal bracket: `%s'"
 msgstr "找不到鋼琴踏板記號的開始位置: ‘%s’"
 
-#: program-option.cc:205
+#: property-iterator.cc:90
 #, c-format
-msgid "no such internal option: %s"
+msgid "not a grob name, `%s'"
 msgstr ""
 
-#: property-iterator.cc:74
+#: quote-iterator.cc:254
 #, c-format
-msgid "not a grob name, `%s'"
+msgid "in quotation: junking event %s"
 msgstr ""
 
 #: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr ""
 
-#: relocate.cc:44
-#, fuzzy, c-format
-msgid "Setting %s to %s"
-msgstr "正在將字型寫入 %s"
-
-#: relocate.cc:59
-#, fuzzy, c-format
-msgid "no such file: %s for %s"
-msgstr "%s 用戶不存在"
-
-#: relocate.cc:69 relocate.cc:87
-#, fuzzy, c-format
-msgid "no such directory: %s for %s"
-msgstr "%s 用戶不存在"
-
-#: relocate.cc:79
-#, c-format
-msgid "%s=%s (prepend)\n"
+#: rest-collision.cc:147
+msgid "rest direction not set.  Cannot resolve collision."
 msgstr ""
 
-#: relocate.cc:99
-#, c-format
-msgid "Relocation: compile prefix=%s, new prefix=%s"
+#: rest-collision.cc:162 rest-collision.cc:208
+msgid "too many colliding rests"
 msgstr ""
 
-#: relocate.cc:129
+#: rest.cc:140
 #, c-format
-msgid "Relocation: framework_prefix=%s"
-msgstr ""
+msgid "rest `%s' not found"
+msgstr "找不到休止符 ‘%s’"
 
-#: relocate.cc:169
+#: scm-option.cc:54
 #, c-format
-msgid "Relocation: is absolute: argv0=%s"
-msgstr ""
+msgid "lilypond -e EXPR means:"
+msgstr "lilypond -e EXPR 的意義是:"
 
-#: relocate.cc:176
+#: scm-option.cc:56
 #, c-format
-msgid "Relocation: from cwd: argv0=%s"
+msgid "  Evalute the Scheme EXPR before parsing any .ly files."
 msgstr ""
 
-#: relocate.cc:185
+#: scm-option.cc:58
 #, c-format
-msgid ""
-"Relocation: from PATH=%s\n"
-"argv0=%s"
+msgid "  Multiple -e options may be given, they will be evaluated sequentially."
 msgstr ""
 
-#: relocate.cc:354
-#, fuzzy, c-format
-msgid "Relocation file: %s"
-msgstr "無法開啟檔案: ‘%s’"
-
-#: relocate.cc:390
+#: scm-option.cc:60
 #, c-format
-msgid "Unknown relocation command %s"
-msgstr ""
+msgid "  The function ly:set-option allows for access to some internal variables."
+msgstr "透過 ly:set-option 函式可以使用一些內部變數。"
 
-#: rest-collision.cc:151
-msgid "cannot resolve rest collision: rest direction not set"
-msgstr ""
+#: scm-option.cc:62
+#, c-format
+msgid "Usage: lilypond -e \"(ly:set-option SYMBOL VAL)\""
+msgstr "用法: lilypond -e \"(ly:set-option SYMBOL VAL)\""
 
-#: rest-collision.cc:165 rest-collision.cc:210
-msgid "too many colliding rests"
+#: scm-option.cc:64
+#, c-format
+msgid "Use help as SYMBOL to get online help."
 msgstr ""
 
-#: rest.cc:144
+#: scm-option.cc:135 scm-option.cc:175
 #, c-format
-msgid "rest `%s' not found"
-msgstr "找不到休止符 ‘%s’"
+msgid "no such internal option: %s"
+msgstr ""
 
-#: score-engraver.cc:67
+#: score-engraver.cc:105
 #, c-format
 msgid "cannot find `%s'"
 msgstr "找不到 ‘%s’"
 
-#: score-engraver.cc:69
+#: score-engraver.cc:107
 msgid "Music font has not been installed properly."
 msgstr "樂譜字型沒有正確地安裝。"
 
-#: score-engraver.cc:71
+#: score-engraver.cc:109
 #, c-format
 msgid "Search path `%s'"
 msgstr "搜尋路徑 ‘%s’"
 
-#: score-engraver.cc:73
-msgid "Aborting"
-msgstr "終止"
-
-#: score.cc:225
+#: score.cc:212
 msgid "already have music in score"
 msgstr ""
 
-#: score.cc:226
+#: score.cc:213
 msgid "this is the previous music"
 msgstr ""
 
-#: score.cc:231
+#: score.cc:218
 msgid "errors found, ignoring music expression"
 msgstr ""
 
 #. FIXME:
-#: script-engraver.cc:102
-msgid "do not know how to interpret articulation: "
+#: script-engraver.cc:100
+msgid "don't know how to interpret articulation: "
 msgstr ""
 
-#: script-engraver.cc:103
+#: script-engraver.cc:101
 msgid "scheme encoding: "
 msgstr ""
 
-#: simple-spacer.cc:375
-#, c-format
-msgid "No spring between column %d and next one"
+#. this shouldn't happen, but let's continue anyway.
+#: separation-item.cc:52 separation-item.cc:96
+msgid "Separation_item:  I've been drinking too much"
 msgstr ""
 
-#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#: simple-spacer.cc:410
 #, c-format
-msgid "direction of %s invalid: %d"
+msgid "No spring between column %d and next one"
 msgstr ""
 
-#: slur-engraver.cc:157
+#: slur-engraver.cc:113
 msgid "unterminated slur"
 msgstr "圓滑線沒有終點"
 
-#: slur-engraver.cc:166
-msgid "cannot end slur"
+#: slur-engraver.cc:122
+msgid "can't end slur"
 msgstr "無法結束圓滑線"
 
-#: source-file.cc:74
+#: source-file.cc:55
+#, c-format
+msgid "can't open file: `%s'"
+msgstr "無法開啟檔案: ‘%s’"
+
+#: source-file.cc:68
 #, c-format
 msgid "expected to read %d characters, got %d"
 msgstr "本來應該讀入 %d 個字元,但實際上是 %d 個"
 
-#: staff-symbol-engraver.cc:62
-msgid "staff-span event has no direction"
+#: spacing-spanner.cc:377
+#, c-format
+msgid "Global shortest duration is %s"
 msgstr ""
 
-#: stem-engraver.cc:92
+#: stem-engraver.cc:88
 msgid "tremolo duration is too long"
 msgstr ""
 
 #. FIXME:
-#: stem-engraver.cc:129
+#: stem-engraver.cc:125
 #, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "將符頭加入不兼容的符桿 (type = %d)"
 
-#: stem-engraver.cc:131
+#: stem-engraver.cc:126
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#: stem.cc:105
+#: stem.cc:124
 msgid "weird stem size, check for narrow beams"
 msgstr ""
 
-#: stem.cc:641
+#: stem.cc:577
 #, c-format
 msgid "flag `%s' not found"
 msgstr ""
 
-#: stem.cc:652
+#: stem.cc:588
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr ""
 
-#: system.cc:180
+#: system.cc:145
 #, c-format
 msgid "Element count %d."
 msgstr ""
 
-#: system.cc:276
+#: system.cc:224
 #, c-format
 msgid "Grob count %d"
 msgstr ""
 
+#: system.cc:240
+msgid "Calculating line breaks..."
+msgstr ""
+
 #: text-spanner-engraver.cc:61
-msgid "cannot find start of text spanner"
+msgid "can't find start of text spanner"
 msgstr ""
 
-#: text-spanner-engraver.cc:73
+#: text-spanner-engraver.cc:75
 msgid "already have a text spanner"
 msgstr ""
 
-#: text-spanner-engraver.cc:133
+#: text-spanner-engraver.cc:136
 msgid "unterminated text spanner"
 msgstr ""
 
-#: tie-engraver.cc:264
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#: tfm-reader.cc:106
+#, c-format
+msgid "TFM header of `%s' has only %u word (s)"
+msgstr ""
+
+#: tfm-reader.cc:139
+#, c-format
+msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
+msgstr "%s: TFM 檔案有 %u 個參數,多於目前能夠處理的 %u 個"
+
+#: tfm.cc:70
+#, c-format
+msgid "can't find ascii character: %d"
+msgstr "找不到 ascii 字元: %d"
+
+#: tie-engraver.cc:194
 msgid "lonely tie"
 msgstr "單邊連結線"
 
+#: time-scaled-music-iterator.cc:22
+msgid "no one to print a tuplet start bracket"
+msgstr ""
+
 #.
 #. Todo: should make typecheck?
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:64
+#: time-signature-engraver.cc:54
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr "出現不正常的拍號: %d/%d"
@@ -1696,688 +1771,523 @@ msgstr "找不到拍號 ‘%s’,還原為數字形式"
 msgid "unknown translator: `%s'"
 msgstr ""
 
-#: translator-group.cc:151
-#, c-format
-msgid "cannot find: `%s'"
-msgstr "找不到: ‘%s’"
-
-#: translator.cc:332
-#, c-format
-msgid "Two simultaneous %s events, junking this one"
-msgstr ""
-
-#: translator.cc:333
-#, c-format
-msgid "Previous %s event here"
-msgstr ""
-
 #: trill-spanner-engraver.cc:68
-msgid "cannot find start of trill spanner"
+msgid "can't find start of trill spanner"
 msgstr "找不到震音的起點"
 
-#: trill-spanner-engraver.cc:80
+#: trill-spanner-engraver.cc:82
 msgid "already have a trill spanner"
 msgstr "震音已經有起點"
 
-#: vaticana-ligature-engraver.cc:388
+#: trill-spanner-engraver.cc:142
+msgid "unterminated trill spanner"
+msgstr "震音沒有終點"
+
+#: tuplet-bracket.cc:438
+msgid "removing tuplet bracket across linebreak"
+msgstr ""
+
+#: vaticana-ligature-engraver.cc:341
 #, c-format
-msgid ""
-"ignored prefix (es) `%s' of this head according to restrictions of the "
-"selected ligature style"
+msgid "ignored prefix (es) `%s' of this head according to restrictions of the selected ligature style"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:714
+#: vaticana-ligature-engraver.cc:568
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr "Vaticana_ligature_engraver: 設定 `spacing-increment = %f': ptr =%ul"
 
-#: vaticana-ligature.cc:84
+#: vaticana-ligature.cc:87
 msgid "flexa-height undefined; assuming 0"
 msgstr "未定義 flexa-height,假設為 0"
 
-#: vaticana-ligature.cc:89
+#: vaticana-ligature.cc:93
 msgid "ascending vaticana style flexa"
 msgstr ""
 
-#: vaticana-ligature.cc:177
+#: vaticana-ligature.cc:182
 msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr ""
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:144
-msgid "cannot end volta spanner"
+#: volta-engraver.cc:127
+msgid "can't end volta spanner"
 msgstr ""
 
-#: volta-engraver.cc:154
+#: volta-engraver.cc:137
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr ""
 
-#: volta-engraver.cc:158
+#: volta-engraver.cc:141
 msgid "also already have an ended spanner"
 msgstr ""
 
-#: volta-engraver.cc:159
-msgid "giving up"
-msgstr "放棄"
+#: parser.yy:90
+msgid "tag must be symbol or list of symbols"
+msgstr ""
+
+#: parser.yy:654
+msgid "identifier should have alphabetic characters only"
+msgstr "識別字應該只使用英文字母"
 
-#: parser.yy:702
+#: parser.yy:812
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "\\paper 不可以在 \\score 中使用,請改用 \\layout"
 
-#: parser.yy:726
+#: parser.yy:836
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1172
+#: parser.yy:981
+msgid "more alternatives than repeats"
+msgstr ""
+
+#: parser.yy:1018
+#, c-format
+msgid "expect 2 elements for Chord tremolo, found %d"
+msgstr ""
+
+#: parser.yy:1173
+msgid "music head function must return Music object"
+msgstr ""
+
+#: parser.yy:1445
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1475
+#: parser.yy:1805
 msgid "second argument must be pitch list"
 msgstr ""
 
-#: parser.yy:1502 parser.yy:1507 parser.yy:1972
+#: parser.yy:1844 parser.yy:1849 parser.yy:2330
 msgid "have to be in Lyric mode for lyrics"
 msgstr ""
 
-#: parser.yy:1604
+#: parser.yy:1942
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:1759 parser.yy:1809
+#: parser.yy:2105 parser.yy:2155
 #, c-format
 msgid "not a duration: %d"
 msgstr "不是音符長度: %d"
 
-#: parser.yy:1926
+#: parser.yy:2249
 msgid "have to be in Note mode for notes"
 msgstr ""
 
-#: parser.yy:1987
+#: parser.yy:2343
 msgid "have to be in Chord mode for chords"
 msgstr ""
 
-#: lexer.ll:176
-msgid "stray UTF-8 BOM encountered"
-msgstr ""
+#: parser.yy:2494
+msgid "need integer number arg"
+msgstr "需要整數作為參數"
 
-#: lexer.ll:180
-msgid "Skipping UTF-8 BOM"
+#: parser.yy:2690
+#, c-format
+msgid "suspect duration in beam: %s"
 msgstr ""
 
-#: lexer.ll:235
+#: lexer.ll:193
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr ""
 
-#: lexer.ll:252
+#: lexer.ll:201
 msgid "quoted string expected after \\version"
 msgstr "\\version 後應該是加上引號的字串"
 
-#: lexer.ll:256
-msgid "quoted string expected after \\sourcefilename"
-msgstr "\\sourcefilename 後應該是加上引號的字串"
-
-#: lexer.ll:260
-#, fuzzy
-msgid "integer expected after \\sourcefileline"
-msgstr "\\sourcefilename 後應該是加上引號的字串"
+#: lexer.ll:205
+msgid "quoted string expected after \\renameinput"
+msgstr "\\renameinput 後應該是加上引號的字串"
 
-#: lexer.ll:273
+#: lexer.ll:218
 msgid "EOF found inside a comment"
 msgstr "檔案突然在註釋內結束"
 
-#: lexer.ll:288
+#: lexer.ll:233
 msgid "\\maininput not allowed outside init files"
 msgstr ""
 
-#: lexer.ll:312
+#: lexer.ll:257
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "錯誤或仍未定義的識別字: ‘%s’"
 
 #. backup rule
-#: lexer.ll:321
+#: lexer.ll:266
 msgid "end quote missing"
 msgstr "缺少了右引號"
 
-#: lexer.ll:466
+#: lexer.ll:428
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:559
+#: lexer.ll:527
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:659
+#: lexer.ll:616
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "字元無效: ‘%c’"
 
-#: lexer.ll:774 lexer.ll:775
+#: lexer.ll:703 lexer.ll:704
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr ""
 
-#: lexer.ll:880 lexer.ll:881
+#: lexer.ll:801 lexer.ll:802
 #, c-format
-msgid "file too old: %s (oldest supported: %s)"
-msgstr ""
+msgid "Incorrect lilypond version: %s (%s, %s)"
+msgstr "lilypond 版本不正確: %s (%s, %s)"
 
-#: lexer.ll:881 lexer.ll:882
-#, fuzzy
-msgid "consider updating the input with the convert-ly script"
+#: lexer.ll:802 lexer.ll:803
+msgid "Consider updating the input with the convert-ly script"
 msgstr "請考慮使用 convert-ly 命令稿來轉換輸入的內容"
 
-#: lexer.ll:887 lexer.ll:888
+#. TODO: print location
+#: lexer.ll:939 lexer.ll:940
+msgid "can't find signature for music function"
+msgstr ""
+
+#: out/parser.cc:1887
+msgid "syntax error: cannot back up"
+msgstr ""
+
+#: out/parser.cc:1987
+msgid "Stack now"
+msgstr ""
+
+#: out/parser.cc:2015
+#, c-format
+msgid "Reducing stack by rule %d (line %u), "
+msgstr ""
+
+#. Each stack pointer address is followed by the size of the
+#. data in use in that stack, in bytes.  This used to be a
+#. conditional around just the two extra args, but that might
+#. be undefined if yyoverflow is a macro.
+#: out/parser.cc:2345 out/parser.cc:5818
+msgid "parser stack overflow"
+msgstr "分析程序出現堆叠溢位"
+
+#: out/parser.cc:2385
+#, c-format
+msgid "Stack size increased to %lu\n"
+msgstr "堆叠大小增加至 %lu\n"
+
+#: out/parser.cc:2392
+#, c-format
+msgid "Entering state %d\n"
+msgstr ""
+
+#: out/parser.cc:2416
+msgid "Reading a token: "
+msgstr ""
+
+#: out/parser.cc:2423
+msgid "Now at end of input.\n"
+msgstr ""
+
+#: out/parser.cc:2428
+msgid "Next token is"
+msgstr ""
+
+#. Shift the look-ahead token.
+#. Shift the error token.
+#: out/parser.cc:2449 out/parser.cc:5790
+msgid "Shifting"
+msgstr ""
+
+#. This is so xgettext sees the translatable formats that are
+#. constructed on the fly.
+#: out/parser.cc:5609
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr ""
+
+#: out/parser.cc:5610
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr ""
+
+#: out/parser.cc:5611
 #, c-format
-msgid "program too old: %s (file requires: %s)"
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr ""
+
+#: out/parser.cc:5612
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr ""
+
+#: out/parser.cc:5613
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+
+#: out/parser.cc:5687
+msgid "syntax error; also memory exhausted"
+msgstr "語法錯誤,同時記憶體耗盡"
+
+#: out/parser.cc:5691
+msgid "syntax error"
+msgstr "語法錯誤"
+
+#: out/parser.cc:5712 out/parser.cc:5772
+msgid "Error: popping"
+msgstr ""
+
+#: out/parser.cc:5718
+msgid "Error: discarding"
 msgstr ""
 
-#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
-#, scheme-format
+#: out/parser.cc:5807
+msgid "Error: discarding lookahead"
+msgstr ""
+
+#: backend-library.scm:18
+#, lisp-format
 msgid "Invoking `~a'..."
 msgstr ""
 
-#: backend-library.scm:24
-#, scheme-format
+#: backend-library.scm:23
+#, lisp-format
 msgid "`~a' failed (~a)"
 msgstr "‘~a’ 發生錯誤 (~a)"
 
-#: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, scheme-format
+#: backend-library.scm:42 framework-tex.scm:332 framework-tex.scm:357
+#, lisp-format
 msgid "Converting to `~a'..."
 msgstr "轉換為 ‘~a’..."
 
-#: backend-library.scm:108
-#, scheme-format
+#. Do not try to guess the name of the png file,
+#. GS produces PNG files like BASE-page%d.png.
+#. (ly:message (_ "Converting to `~a'...")
+#. (string-append (basename name ".ps") "-page1.png" )))
+#: backend-library.scm:65
+#, lisp-format
 msgid "Converting to ~a..."
 msgstr "轉換為 ~a..."
 
-#: backend-library.scm:145
-#, scheme-format
+#: backend-library.scm:95
+#, lisp-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr ""
 
-#: define-context-properties.scm:20 define-grob-properties.scm:10
+#: beam.scm:79
+#, lisp-format
+msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
+msgstr ""
+
+#: beam.scm:93
+#, lisp-format
+msgid "Error in beam quanting.  Expected ~S 0, found ~S."
+msgstr ""
+
+#: clef.scm:124
+#, lisp-format
+msgid "unknown clef type `~a'"
+msgstr "出現不明譜號 ‘~a’"
+
+#: clef.scm:125
+msgid "see scm/clef.scm for supported clefs"
+msgstr "請在 scm/clef.scm 內參考目前支援的譜號"
+
+#: define-context-properties.scm:13 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, scheme-format
+#, lisp-format
 msgid "symbol ~S redefined"
 msgstr "符號 ~S 被重複定義"
 
-#: define-event-classes.scm:119
-#, scheme-format
-msgid "event class ~A seems to be unused"
-msgstr ""
-
-#. should be programming-error
-#: define-event-classes.scm:125
-#, scheme-format
-msgid "translator listens to nonexisting event class ~A"
+#: define-markup-commands.scm:79
+#, lisp-format
+msgid "Could not find bounding box of `~a'"
 msgstr ""
 
-#: define-markup-commands.scm:255
+#: define-markup-commands.scm:112
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:1297
-#, scheme-format
+#: define-markup-commands.scm:658
+#, lisp-format
 msgid "not a valid duration string: ~a"
 msgstr "音符長度無效: ~a"
 
-#: define-music-types.scm:751
-#, scheme-format
+#: define-music-types.scm:802
+#, lisp-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:754
-#, scheme-format
-msgid "cannot find music object: ~S"
+#: define-music-types.scm:805
+#, lisp-format
+msgid "can't find music object: ~S"
 msgstr ""
 
-#: define-music-types.scm:774
-#, scheme-format
+#: define-music-types.scm:825
+#, lisp-format
 msgid "unknown repeat type `~S'"
 msgstr ""
 
-#: define-music-types.scm:775
+#: define-music-types.scm:826
 msgid "See music-types.scm for supported repeats"
 msgstr ""
 
 #: document-backend.scm:91
-#, scheme-format
+#, lisp-format
 msgid "pair expected in doc ~s"
 msgstr ""
 
 #: document-backend.scm:135
-#, scheme-format
-msgid "cannot find interface for property: ~S"
+#, lisp-format
+msgid "can't find interface for property: ~S"
 msgstr ""
 
-#: document-backend.scm:145
-#, scheme-format
-msgid "unknown Grob interface: ~S"
+#: document-backend.scm:144
+#, lisp-format
+msgid "unknown interface: ~S"
 msgstr ""
 
 #: documentation-lib.scm:45
-#, scheme-format
+#, lisp-format
 msgid "Processing ~S..."
 msgstr "正在處理 ~S..."
 
-#: documentation-lib.scm:150
-#, scheme-format
+#: documentation-lib.scm:160
+#, lisp-format
 msgid "Writing ~S..."
 msgstr "正在寫入 ~S..."
 
-#: documentation-lib.scm:172
-#, scheme-format
-msgid "cannot find description for property ~S (~S)"
+#: documentation-lib.scm:182
+#, lisp-format
+msgid "can't find description for property ~S"
 msgstr ""
 
-#: framework-eps.scm:91 framework-eps.scm:92
-#, scheme-format
+#: framework-eps.scm:45 framework-eps.scm:46
+#, lisp-format
 msgid "Writing ~a..."
 msgstr "正在寫入 ~a..."
 
-#: framework-ps.scm:279
-#, scheme-format
-msgid "cannot embed ~S=~S"
-msgstr ""
-
-#: framework-ps.scm:332
-#, scheme-format
-msgid "cannot extract file matching ~a from ~a"
-msgstr ""
-
-#: framework-ps.scm:349
-#, scheme-format
-msgid "do not know how to embed ~S=~S"
-msgstr ""
-
-#: framework-ps.scm:380
-#, scheme-format
-msgid "do not know how to embed font ~s ~s ~s"
-msgstr ""
+#: framework-ps.scm:236
+#, lisp-format
+msgid "can't find CFF/PFA/PFB font ~S=~S"
+msgstr "找不到 CFF/PFA/PFB 字型 ~S=~S"
 
-#: framework-ps.scm:729
-#, scheme-format
-msgid "cannot convert <stdout> to ~S"
+#: framework-ps.scm:368
+#, lisp-format
+msgid "can't convert <stdout> to ~S"
 msgstr "無法將 <標準輸出> 轉換為 ~S"
 
-#: framework-ps.scm:748 framework-ps.scm:751
-#, scheme-format
-msgid "cannot generate ~S using the postscript back-end"
+#: framework-ps.scm:383 framework-ps.scm:386
+#, lisp-format
+msgid "can't generate ~S using the postscript back-end"
 msgstr "無法使用 postscript 背景模組來產生 ~S"
 
-#: framework-ps.scm:758
-msgid ""
-"\n"
-"The PostScript backend does not support the 'classic'\n"
-"framework. Use the EPS backend instead,\n"
-"\n"
-"  lilypond -b eps <file>\n"
-"\n"
-"or remove the lilypond-book specific settings from the input.\n"
-msgstr ""
-
-#: framework-tex.scm:360
-#, scheme-format
+#: framework-tex.scm:349
+#, lisp-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "TeX 檔案名稱不可以有空格: ‘~a’"
 
-#: layout-beam.scm:29
-#, scheme-format
-msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
-msgstr ""
-
-#: layout-beam.scm:46
-#, scheme-format
-msgid "Error in beam quanting.  Expected ~S 0, found ~S."
-msgstr ""
-
-#: layout-page-layout.scm:357
-msgid "Calculating page breaks..."
-msgstr "正在計算頁面分割位置..."
-
-#: lily-library.scm:593
-#, scheme-format
+#: lily-library.scm:314
+#, lisp-format
 msgid "unknown unit: ~S"
 msgstr ""
 
-#: lily-library.scm:626
-#, scheme-format
-msgid "no \\version statement found, please add~afor future compatibility"
+#: lily-library.scm:347
+#, lisp-format
+msgid "no \\version statement found,  add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:633
+#: lily-library.scm:354
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: lily.scm:144
-#, fuzzy, scheme-format
-msgid "cannot find: ~A"
-msgstr "找不到: ‘%s’"
-
-#: lily.scm:209
-#, scheme-format
+#: lily.scm:97
+#, lisp-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "參數 ~a 類型不正確。應該是 ~a,但實際是 ~s。"
 
-#: lily.scm:525 lily.scm:589
-#, scheme-format
+#: lily.scm:319
+#, lisp-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:579
-#, fuzzy, scheme-format
-msgid "Redirecting output to ~a..."
-msgstr "轉換為 ~a..."
-
-#: ly-syntax-constructors.scm:40
-msgid "Music head function must return Music object"
-msgstr ""
-
-#: ly-syntax-constructors.scm:136
-#, scheme-format
-msgid "Invalid property operation ~a"
-msgstr ""
-
-#: markup.scm:123
-#, scheme-format
+#: markup.scm:88
+#, lisp-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr "參數數目不正確。應該是 ~A,但實際是 ~A: ~S。"
 
-#: markup.scm:129
-#, scheme-format
+#: markup.scm:94
+#, lisp-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr "位置 ~A 出現無效的參數。應該是 ~A,但實際是 ~S。"
 
-#: music-functions.scm:213
-msgid "More alternatives than repeats.  Junking excess alternatives"
-msgstr ""
-
-#: music-functions.scm:232
-#, fuzzy, scheme-format
-msgid "expecting 2 elements for chord tremolo, found ~a"
-msgstr "顫音和弦需要 2 個元素,但實際上找到 %d 個"
-
-#: music-functions.scm:538
-#, scheme-format
+#: music-functions.scm:506
+#, lisp-format
 msgid "music expected: ~S"
 msgstr ""
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:589
-#, scheme-format
+#: music-functions.scm:557
+#, lisp-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:748
-#, fuzzy, scheme-format
-msgid "cannot find quoted music: `~S'"
-msgstr "找不到字型:‘%s’"
+#: music-functions.scm:701
+#, lisp-format
+msgid "can't find quoted music `~S'"
+msgstr ""
 
-#: music-functions.scm:942
-#, scheme-format
+#: music-functions.scm:874
+#, lisp-format
 msgid "unknown accidental style: ~S"
 msgstr ""
 
-#: output-ps.scm:315
-#, fuzzy
-msgid "utf-8-string encountered in PS backend"
+#: output-lib.scm:246
+#, lisp-format
+msgid "unknown bar glyph: `~S'"
+msgstr ""
+
+#: output-ps.scm:314
+msgid "utf8-string encountered in PS backend"
 msgstr "PS 背景模組遇到 UTF-8 字串"
 
-#: output-svg.scm:42
-#, scheme-format
+#: output-svg.scm:41
+#, lisp-format
 msgid "undefined: ~S"
 msgstr "未定義: ~S"
 
-#: output-svg.scm:132
-#, scheme-format
-msgid "cannot decypher Pango description: ~a"
+#: output-svg.scm:119
+#, lisp-format
+msgid "can't decypher Pango description: ~a"
 msgstr ""
 
-#: output-tex.scm:98
-#, scheme-format
-msgid "cannot find ~a in ~a"
+#: output-tex.scm:114
+#, lisp-format
+msgid "can't find ~a in ~a"
 msgstr ""
 
-#: paper.scm:69
+#: page-layout.scm:425
+msgid "Calculating page breaks..."
+msgstr "正在計算頁面分割位置..."
+
+#: paper.scm:68
 msgid "Not in toplevel scope"
 msgstr ""
 
-#: paper.scm:117
-#, scheme-format
+#: paper.scm:113
+#, lisp-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:129
-#, scheme-format
-msgid "Unknown papersize: ~a"
-msgstr ""
-
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:144
+#: paper.scm:141
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "\\paper { ... } 內必須使用 #(set-paper-size .. )"
 
-#: parser-clef.scm:126
-#, scheme-format
-msgid "unknown clef type `~a'"
-msgstr "出現不明譜號 ‘~a’"
-
-#: parser-clef.scm:127
-msgid "see scm/clef.scm for supported clefs"
-msgstr "請在 scm/clef.scm 內參考目前支援的譜號"
-
-#: ps-to-png.scm:88
-#, fuzzy, scheme-format
-msgid "~a exited with status: ~S"
-msgstr "%s 結束,回傳值為: %d"
-
 #: to-xml.scm:190
-#, scheme-format
-msgid "assertion failed: ~S"
+msgid "assertion failed"
 msgstr ""
-
-#, fuzzy
-#~ msgid "show warranty"
-#~ msgstr "顯示保證條款及版權資訊"
-
-#~ msgid "Convert MIDI to LilyPond source."
-#~ msgstr "將 MIDI 轉換為 LilyPond 來源檔。"
-
-#, fuzzy
-#~ msgid "example"
-#~ msgstr "例子"
-
-#~ msgid "loading default font"
-#~ msgstr "正在載入預設字型"
-
-#~ msgid "cannot find default font: `%s'"
-#~ msgstr "找不到預設字型:‘%s’"
-
-#, fuzzy
-#~ msgid "couldnnot find line breaking that satisfies constraints"
-#~ msgstr "找不到符合指定條件的斷行位置"
-
-#~ msgid "crescendo too small"
-#~ msgstr "漸強符號太小"
-
-#~ msgid "print this help"
-#~ msgstr "印出這段說明訊息"
-
-#, fuzzy
-#~ msgid "cannot open file %s"
-#~ msgstr "無法開啟檔案: ‘%s’"
-
-#~ msgid "Incorrect lilypond version: %s (%s, %s)"
-#~ msgstr "lilypond 版本不正確: %s (%s, %s)"
-
-#~ msgid "distance undefined, assuming 0.1"
-#~ msgstr "未定義距離,假設為 0.1"
-
-#~ msgid "no feasible line breaking found"
-#~ msgstr "無法找出適當斷行位置"
-
-#~ msgid ""
-#~ "%s: TFM file has %u parameters, which is more than the %u I can handle"
-#~ msgstr "%s: TFM 檔案有 %u 個參數,多於目前能夠處理的 %u 個"
-
-#~ msgid "cannot find ascii character: %d"
-#~ msgstr "找不到 ascii 字元: %d"
-
-#~ msgid "unterminated trill spanner"
-#~ msgstr "震音沒有終點"
-
-#~ msgid "identifier should have alphabetic characters only"
-#~ msgstr "識別字應該只使用英文字母"
-
-#~ msgid "lilylib module"
-#~ msgstr "lilylib 模組"
-
-#~ msgid "Opening pipe `%s'"
-#~ msgstr "開啟管線 ‘%s’"
-
-#~ msgid "`%s' failed (%s)"
-#~ msgstr "‘%s’ 發生錯誤 (%s)"
-
-#~ msgid "(ignored)"
-#~ msgstr "(忽略)"
-
-#~ msgid "Cleaning %s..."
-#~ msgstr "正在清理 %s..."
-
-#~ msgid "Usage: %s [OPTION]... [FILE]..."
-#~ msgstr "用法: %s [選項]... [檔案]..."
-
-#~ msgid ""
-#~ "  -e, --edit             edit in place\n"
-#~ "  -f, --from=VERSION     start from VERSION [default: \\version found in "
-#~ "file]\n"
-#~ "  -h, --help             print this help\n"
-#~ "  -n, --no-version       do not add \\version command if missing\n"
-#~ "  -s, --show-rules       print rules [default: --from=0, --"
-#~ "to=@TOPLEVEL_VERSION@]\n"
-#~ "  -t, --to=VERSION       convert to VERSION [default: "
-#~ "@TOPLEVEL_VERSION@]\n"
-#~ "  -v, --version          print program version"
-#~ msgstr ""
-#~ "  -e, --edit             不備份\n"
-#~ "  -f, --from=VERSION     由 VERSION 開始計算\n"
-#~ "                         [預設是檔案中 \\version 所指定的版本]\n"
-#~ "  -h, --help             顯示本說明訊息\n"
-#~ "  -n, --no-version       如何內容本身沒有 \\version 的話不會自動加上去\n"
-#~ "  -s, --show-rules       顯示轉換規則\n"
-#~ "                         [預設是 --from=0, --to=@TOPLEVEL_VERSION@]\n"
-#~ "  -t, --to=VERSION       轉換至指定的 VERSION [預設是 "
-#~ "@TOPLEVEL_VERSION@]\n"
-#~ "  -v, --version          顯示程式版本"
-
-#~ msgid "FMT"
-#~ msgstr "格式"
-
-#~ msgid "print version information"
-#~ msgstr "印出程式版本"
-
-#~ msgid "Not in FILE:LINE:COL format: "
-#~ msgstr "不符合「檔案:行號:字數」格式:"
-
-#~ msgid "command exited with value %d"
-#~ msgstr "指令結束,回傳值為 %d"
-
-#~ msgid "debug"
-#~ msgstr "偵錯"
-
-#~ msgid "Processing `%s'..."
-#~ msgstr "正在處理 ‘%s’..."
-
-#~ msgid "Convert PostScript to PNG image."
-#~ msgstr "將 PostScript 轉換為 PNG 圖片。"
-
-#~ msgid "PAPER"
-#~ msgstr "尺寸"
-
-#~ msgid "use papersize PAPER"
-#~ msgstr "使用指定 <尺寸> 的紙張"
-
-#~ msgid "RES"
-#~ msgstr "RES"
-
-#~ msgid "set the resolution of the preview to RES"
-#~ msgstr "將預覽圖解析度設定為 RES"
-
-#~ msgid "Wrote `%s'"
-#~ msgstr "寫入‘%s’"
-
-#~ msgid "cannot dlopen: %s: %s"
-#~ msgstr "無法 dlopen: %s: %s"
-
-#~ msgid "error opening kpathsea library"
-#~ msgstr "開啟 kpathsea 函式庫時發生錯誤"
-
-#~ msgid "aborting"
-#~ msgstr "終止"
-
-#~ msgid "parsing AFM file: `%s'"
-#~ msgstr "解析 AFM 檔內容: ‘%s’"
-
-#~ msgid "checksum mismatch for font file: `%s'"
-#~ msgstr "字型檔的檢查碼出現錯誤: ‘%s’"
-
-#~ msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
-#~ msgstr "重新產生所有 .afm 檔,並移除所有 .pk 和 .tfm 檔。"
-
-#~ msgid "Rerun with -V to show font paths."
-#~ msgstr "請加上 -V 選項重新執行,以顯示字型搜尋路徑。"
-
-#~ msgid "A script for removing font-files is delivered with the source-code:"
-#~ msgstr "程式碼中已經附有命令稿用來移除暫存字型檔:"
-
-#~ msgid "beam has less than two visible stems"
-#~ msgstr "連桁連接的符桿中,真正顯示出來的少於兩條"
-
-#~ msgid "initializing FontConfig"
-#~ msgstr "正在初始化 FontConfig"
-
-#~ msgid "adding lilypond directory: %s"
-#~ msgstr "加入 lilypond 目錄:%s"
-
-#~ msgid ""
-#~ "set scheme option, for help use\n"
-#~ "                                       -e '(ly:option-usage)'"
-#~ msgstr ""
-#~ "設定 scheme 的選項,如果需要說明文件\n"
-#~ "                                       請用 -e '(ly:option-usage)'"
-
-#~ msgid "run in safe mode"
-#~ msgstr "使用安全模式"
-
-#~ msgid "lilypond -e EXPR means:"
-#~ msgstr "lilypond -e EXPR 的意義是:"
-
-#~ msgid ""
-#~ "  The function ly:set-option allows for access to some internal variables."
-#~ msgstr "透過 ly:set-option 函式可以使用一些內部變數。"
-
-#~ msgid "Usage: lilypond -e \"(ly:set-option SYMBOL VAL)\""
-#~ msgstr "用法: lilypond -e \"(ly:set-option SYMBOL VAL)\""
-
-#~ msgid "need integer number arg"
-#~ msgstr "需要整數作為參數"
-
-#~ msgid "parser stack overflow"
-#~ msgstr "分析程序出現堆叠溢位"
-
-#~ msgid "Stack size increased to %lu\n"
-#~ msgstr "堆叠大小增加至 %lu\n"
-
-#~ msgid "syntax error; also memory exhausted"
-#~ msgstr "語法錯誤,同時記憶體耗盡"
-
-#~ msgid "syntax error"
-#~ msgstr "語法錯誤"
-
-#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
-#~ msgstr "找不到 CFF/PFA/PFB 字型 ~S=~S"
index 665812d00fd79c88ab0d1dc6e5e978ac86afdac4..b8f5edecf57128af65f89e5d455fb7dea901bbd7 100644 (file)
@@ -1,7 +1,5 @@
 depth=../..
 
-EXTRA_DIST_FILES = $(call src-wildcard,*.py)
-
 include $(depth)/make/stepmake.make
 
 default:
index 8453c147b2d80a6b1b328adff5d18eba4597d80d..7e379dcbb8018c77dd000ec5ed235900a150398e 100644 (file)
@@ -27,7 +27,6 @@ non_copied_pages = ['Documentation/out-www/notation-big-page',
                     'out-www/examples',
                     'Documentation/topdocs',
                     'Documentation/bibliography',
-                    'Documentation/out-www/THANKS',
                     'Documentation/out-www/DEDICATION',
                     'input/']
 
@@ -58,6 +57,7 @@ web_footer = '''
 footer_name_version = _doc ('This page is for %(package_name)s-%(package_version)s (%(branch_str)s).')
 # ugh, must not have "_doc" in strings because it is naively replaced with "_" in hacked gettext process
 footer_report_links = _doc ('We welcome your aid; please <a href="%(help_us_url)s">help us</a> by reporting errors to our <a href="%(mail_address_url)s">bug list</a>.')
+sidebar_version = _doc (' v%(package_version)s (%(branch_str)s).')
 
 
 mail_address = 'http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs'
@@ -365,6 +365,9 @@ def process_html_files (package_name = '',
                 s = hack_urls (s, prefix, target, bool (int (versiontup[1]) %  2))
                 s = add_header (s, prefix)
 
+                ### add sidebar information
+                s = s.replace ('<!-- Sidebar Version Tag  -->', sidebar_version)
+
                 ### add footer
                 if footer_tag_re.search (s) == None:
                     if 'web' in file_name:
index f2aa5e36cf6106e2c427fe30465bf9c1d446be6f..a47c950e248152e2f01158880e58d52cab835265 100644 (file)
@@ -13,6 +13,7 @@ global _;_=ly._
 progress = ly.progress
 warning = ly.warning
 error = ly.error
+debug = ly.debug_output
 
 # Recognize special sequences in the input.
 #
@@ -165,12 +166,13 @@ LATEX_INSPECTION_DOCUMENT = r'''
 
 # Do we need anything else besides `textwidth'?
 def get_latex_textwidth (source, global_options):
+    # default value
+    textwidth = 550.0
+
     m = re.search (r'''(?P<preamble>\\begin\s*{document})''', source)
     if m == None:
         warning (_ ("cannot find \\begin{document} in LaTeX document"))
-
-        ## what's a sensible default?
-        return 550.0
+        return textwidth
 
     preamble = source[:m.start (0)]
     latex_document = LATEX_INSPECTION_DOCUMENT % {'preamble': preamble}
@@ -186,9 +188,10 @@ def get_latex_textwidth (source, global_options):
     tmp_handle.close ()
 
     progress (_ ("Running `%s' on file `%s' to detect default page settings.\n")
-              % (global_options.latex_program, tmpfile));
-    cmd = '%s %s' % (global_options.latex_program, tmpfile);
-    ly.debug_output ("Executing: %s\n" % cmd);
+              % (global_options.latex_program, tmpfile))
+    cmd = 'TEXINPUTS="%s:$TEXINPUTS" %s %s' \
+        % (global_options.input_dir, global_options.latex_program, tmpfile)
+    debug ("Executing: %s\n" % cmd)
     run_env = os.environ.copy()
     run_env['LC_ALL'] = 'C'
 
@@ -237,12 +240,22 @@ def get_latex_textwidth (source, global_options):
     if m:
         columnsep = float (m.group (1))
 
-    textwidth = 0
     m = re.search ('textwidth=([0-9.]+)pt', parameter_string)
     if m:
         textwidth = float (m.group (1))
-        if columns:
-            textwidth = (textwidth - columnsep) / columns
+    else:
+        warning (_ ("cannot detect textwidth from LaTeX"))
+        return textwidth
+
+    debug ('Detected values:')
+    debug ('  columns = %s' % columns)
+    debug ('  columnsep = %s' % columnsep)
+    debug ('  textwidth = %s' % textwidth)
+
+    if m and columns:
+        textwidth = (textwidth - columnsep) / columns
+        debug ('Adjusted value:')
+        debug ('  textwidth = %s' % textwidth)
 
     return textwidth
 
@@ -283,9 +296,10 @@ class BookLatexOutputFormat (BookBase.BookOutputFormat):
     def input_fullname (self, input_filename):
         # Use kpsewhich if available, otherwise fall back to the default:
         if ly.search_exe_path ('kpsewhich'):
-            return os.popen ('kpsewhich ' + input_filename).read()[:-1]
-        else:
-            return BookBase.BookOutputFormat.input_fullname (self, input_filename)
+            trial = os.popen ('kpsewhich ' + input_filename).read()[:-1]
+            if trial:
+                return trial
+        return BookBase.BookOutputFormat.input_fullname (self, input_filename)
 
     def process_chunks (self, chunks):
         for c in chunks:
index f3a11ccca94fa97d5967fb286de53290ab1e604f..69fdc4fa6867401cdcd40fecbf16b4e6324ed4b7 100644 (file)
@@ -7,11 +7,8 @@ import re
 import os
 import copy
 import shutil
-# TODO: We are using os.popen3, which has been deprecated since python 2.6. The
-# suggested replacement is the Popen function of the subprocess module.
-# Unfortunately, on windows this needs the msvcrt module, which doesn't seem
-# to be available in GUB?!?!?!
-# from subprocess import Popen, PIPE
+import subprocess
+import sys
 
 progress = ly.progress
 warning = ly.warning
@@ -740,10 +737,11 @@ printing diff against existing file." % filename)
 
         debug (_ ("Running through filter `%s'") % cmd, True)
 
-        # TODO: Use Popen once we resolve the problem with msvcrt in Windows:
-        (stdin, stdout, stderr) = os.popen3 (cmd)
-        # p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
-        # (stdin, stdout, stderr) = (p.stdin, p.stdout, p.stderr)
+        closefds = True
+        if (sys.platform == "mingw32"):
+            closefds = False
+        p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=closefds)
+        (stdin, stdout, stderr) = (p.stdin, p.stdout, p.stderr)
         stdin.write (input)
         status = stdin.close ()
 
index 78512310c30c35d6bd9513852423a3f14858fc18..28c27fb8b892f3859d9877f2f2e3c24421f1cdd8 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 # (setq py-indent-offset 4)
 
 
@@ -3174,7 +3175,7 @@ def conv (str):
 def conv (str):
     str = re.sub (r"Stem\s+#'flag-style", r"Flag #'style", str)
     str = re.sub (r"Stem\s+#'stroke-style", r"Flag #'stroke-style", str)
-    str = re.sub (r"Stem\s+#'flag", r"Flag #'print", str)
+    str = re.sub (r"Stem\s+#'flag", r"Flag #'stencil", str)
     str = re.sub (r"(\s+(?:\\once\s*)?)\\override\s+Stem\s+#'transparent\s*=\s*##t", r"\g<1>\\override Stem #'transparent = ##t\g<1>\\override Flag #'transparent = ##t", str)
     str = re.sub (r"(\s+(?:\\once\s*)?)\\revert\s*Stem\s+#'transparent", r"\g<1>\\revert Stem #'transparent\g<1>\\revert Flag #'transparent", str)
     str = re.sub (r"(\s+(?:\\once\s*)?)\\override\s+Stem\s+#'stencil\s*=\s*##f", r"\g<1>\\override Stem #'stencil = ##f\g<1>\\override Flag #'stencil = ##f", str)
@@ -3385,6 +3386,313 @@ def conv (str):
 def conv (str):
     return str
 
+@rule ((2, 17, 0), r"blank-*-force -> blank-*-penalty")
+def conv (str):
+    str = re.sub ('blank-page-force', 'blank-page-penalty', str)
+    str = re.sub ('blank-last-page-force', 'blank-last-page-penalty', str)
+    str = re.sub ('blank-after-score-page-force', 'blank-after-score-page-penalty', str)
+    return str
+
+
+@rule ((2, 17, 4), r"\shape Grob #offsets -> \shape #offsets Grob")
+def conv (str):
+    str = re.sub (r"\\shape(\s+(?:[a-zA-Z]+|" + matchstring + "))(" +
+                  matcharg + ")", r"\\shape\2\1", str)
+    return str
+
+barstring=r"(\\bar|whichBar|defaultBarType|segnoType|doubleRepeatType|startRepeatType|endRepeatType|doubleRepeatSegnoType|startRepeatSegnoType|endRepeatSegnoType)(\s*[=]?\s*[#]?)"
+
+@rule ((2, 17, 5), r"New bar line interface")
+def conv(str):
+    str = re.sub (barstring + r'"\|:"', '\\1\\2".|:"', str)
+    str = re.sub (barstring + r'":\|"', '\\1\\2":|."', str)
+    str = re.sub (barstring + r'"\|\|:"', '\\1\\2".|:-||"', str)
+    str = re.sub (barstring + r'":\|:"', '\\1\\2":..:"', str)
+    str = re.sub (barstring + r'"\.\|\."', '\\1\\2".."', str)
+    str = re.sub (barstring + r'"\|S"', '\\1\\2"S-|"', str)
+    str = re.sub (barstring + r'"S\|"', '\\1\\2"S-S"', str)
+    str = re.sub (barstring + r'":\|S"', '\\1\\2":|.S"', str)
+    str = re.sub (barstring + r'":\|S\."', '\\1\\2":|.S-S"', str)
+    str = re.sub (barstring + r'"S\|:"', '\\1\\2"S.|:-S"', str)
+    str = re.sub (barstring + r'"\.S\|:"', '\\1\\2"S.|:"', str)
+    str = re.sub (barstring + r'":\|S\|:"', '\\1\\2":|.S.|:"', str)
+    str = re.sub (barstring + r'":\|S\.\|:"', '\\1\\2":|.S.|:-S"', str)
+    str = re.sub (barstring + r'":"', '\\1\\2";"', str)
+    str = re.sub (barstring + r'"\|s"', '\\1\\2"|-s"', str)
+    str = re.sub (barstring + r'"dashed"', '\\1\\2"!"', str)
+    str = re.sub (barstring + r'"kievan"', '\\1\\2"k"', str)
+    str = re.sub (barstring + r'"empty"', '\\1\\2"-"', str)
+    return str
+
+symbol_list = (r"#'(?:" + wordsyntax + r"|\(\s*(?:" + wordsyntax + r"\s+)*"
+               + wordsyntax + r"\s*\))")
+
+grob_path = r"(?:" + symbol_list + r"\s+)*" + symbol_list
+
+grob_spec = wordsyntax + r"(?:\s*\.\s*" + wordsyntax + r")?"
+
+def path_replace (m):
+    return m.group (1) + string.join (re.findall (wordsyntax, m.group (2)), ".")
+
+@rule ((2, 17, 6), r"""\accidentalStyle #'Context "style" -> \accidentalStyle Context.style
+\alterBroken "Context.grob" -> \alterBroken Context.grob
+\overrideProperty "Context.grob" -> \overrideProperty Context.grob
+\tweak Grob #'symbol -> \tweak Grob.symbol""")
+def conv (str):
+    def patrep (m):
+        def fn_path_replace (m):
+            x = string.join (re.findall (wordsyntax, m.group (2)), ".")
+            if x in ["TimeSignature", "KeySignature", "BarLine",
+                     "Clef", "StaffSymbol", "OttavaBracket",
+                     "LedgerLineSpanner"]:
+                x = "Staff." + x
+            return m.group (1) + x
+        if m.group (1):
+            return m.group (0)
+        x = m.group (2) + m.group (4)
+        
+        if m.group (3):
+            x = x + re.sub (r"(\s*)(" + symbol_list + ")", fn_path_replace,
+                            m.group (3))
+
+            if not m.group (5):
+                x = r"\single" + x
+        return x
+
+    str = re.sub (r'''(\\accidentalStyle\s+)#?"([-A-Za-z]+)"''',
+                  r"\1\2", str)
+    str = re.sub (r'''(\\accidentalStyle\s+)#'([A-Za-z]+)\s+#?"?([-A-Za-z]+)"?''',
+                  r"\1\2.\3", str)
+    str = re.sub (r'''(\\(?:alterBroken|overrideProperty)\s+)#?"([A-Za-z]+)\s*\.\s*([A-Za-z]+)"''',
+                  r"\1\2.\3", str)
+    str = re.sub (r'''(\\tweak\s+)#?"?([A-Za-z]+)"?\s+?#'([-A-Za-z]+)''',
+                  r"\1\2.\3", str)
+    str = re.sub (r'''(\\tweak\s+)#'([-A-Za-z]+)''',
+                  r"\1\2", str)
+    str = re.sub ("(" + matchmarkup + ")|"
+                  + r"(\\footnote(?:\s*"
+                  + matchmarkup + ")?" + matcharg + ")(" + matcharg
+                  + r")?(\s+" + matchmarkup + r")(\s+\\default)?",
+                  patrep, str)
+    str = re.sub (r'''(\\alterBroken)(\s+[A-Za-z.]+)(''' + matcharg
+                  + matcharg + ")", r"\1\3\2", str)
+    str = re.sub (r"(\\overrideProperty\s+)(" + grob_spec + r"\s+" + grob_path + ")",
+                  path_replace, str)
+    str = re.sub (r"(\\(?:override|revert)\s+)(" + grob_spec + r"\s+" + grob_path + ")",
+                  path_replace, str)
+    return str
+
+@rule ((2, 17, 11), r"""\times -> \tuplet, \set tupletSpannerDuration -> \tupletSpan
+(ly:make-moment 1 4) -> (ly:make-moment 1/4)
+(ly:make-duration 0 0 1 2) -> (ly:make-duration 0 0 1/2)""")
+def conv(str):
+    def sub_dur (m):
+        num = int (m.group (1))
+        den = int (m.group (2))
+
+# if den is no power of 2, don't even try to use an unscaled duration
+        if (den & (den - 1)) != 0 :
+            return (r"\tupletSpan 1*%d/%d" % (num, den))
+
+        if den >= 4 and num == 7 :
+            return (r"\tupletSpan %d.." % (den/4))
+
+        if den >= 2 and num == 3 :
+            return (r"\tupletSpan %d." % (den/2))
+
+        if num == 1 :
+            return (r"\tupletSpan %d" % den)
+
+        return (r"\tupletSpan 1*%d/%d" % (num, den))
+
+    str = re.sub (r"\\set\s+tupletSpannerDuration\s*=\s*" +
+                  r"#\(ly:make-moment\s+([0-9]+)\s+([0-9]+)\s*\)",
+                  sub_dur, str)
+    str = re.sub (r"\\unset tupletSpannerDuration",
+                  r"\\tupletSpan \\default", str)
+    str = re.sub (r"\\times(\s*)([0-9]+)/([0-9]+)",
+                  r"\\tuplet\1\3/\2", str)
+
+    str = re.sub (r"(\(ly:make-moment\s+-?[0-9]+)\s+([1-9][0-9]*\))",
+                  r"\1/\2", str)
+    str = re.sub (r"(\(ly:make-moment\s+-?[0-9]+)\s+([0-9]+\s+-?[0-9]+)\s([0-9]+\))",
+                  r"\1/\2/\3", str)
+    str = re.sub (r"(\(ly:make-duration\s+-?[0-9]+\s+[0-9]+\s+[0-9]+)\s+([0-9]+\))",
+                  r"\1/\2", str)
+    return str
+
+@rule((2, 17, 14), r"\accepts ... -> \accepts ... \defaultchild ...")
+def conv(str):
+    def matchaccepts(m):
+        # First weed out definitions starting from an existing
+        # definition: we assume that the inherited \defaultchild is
+        # good enough for our purposes.  Heuristic: starts with a
+        # backslash and an uppercase letter.
+        if re.match (r"\s*\\[A-Z]", m.group (1)):
+            return m.group (0)
+        # existing defaultchild obviously trumps all
+        if re.search (r"\\defaultchild[^-_a-zA-Z]", m.group (1)):
+            return m.group (0)
+        # take the first \\accepts if any and replicate it
+        return re.sub ("(\r?\n[ \t]*|[ \t]+)"
+                       + r"""\\accepts(\s+(?:#?".*?"|[-_a-zA-Z]+))""",
+                       r"\g<0>\1\\defaultchild\2",
+                       m.group (0), 1)
+
+    str = re.sub (r"\\context\s*@?\{(" + brace_matcher (20) + ")\}",
+                  matchaccepts, str)
+    return str
+
+@rule((2, 17, 15), r"""#(ly:set-option 'old-relative)
+\relative -> \relative c'""")
+def conv(str):
+    if re.search (r"[#$]\(ly:set-option\s+'old-relative", str):
+        stderr_write (NOT_SMART % "#(ly:set-option 'old-relative)")
+        stderr_write (UPDATE_MANUALLY)
+        raise FatalConversionError ();
+    # If the file contains a language switch to a language where the
+    # name of c is not "c", we can't reliably know which parts of the
+    # file will need "c" and which need "do".
+    m = re.search (r'\\language\s(?!\s*#?"(?:nederlands|deutsch|english|norsk|suomi|svenska))"', str)
+    if m:
+        # Heuristic: if there is a non-commented { before the language
+        # selection, we can't be sure.
+        # Also if there is any selection of a non-do language.
+        if (re.search ("^[^%\n]*\\{", m.string[:m.start()], re.M)
+            or re.search ('\\language\s(?!\s*#?"(?:catalan|espanol|español|italiano|français|portugues|vlaams))"', str)):
+            do = "$(ly:make-pitch 0 0)"
+        else:
+            do = "do'"
+    else:
+        do = "c'"
+    str = re.sub (r"(\\relative)(\s+(\{|[\\<]))",
+                  r"\1 " + do + r"\2", str)
+    return str
+
+@rule ((2, 17, 18),
+    "Rename OctavateEight to ClefModifier, rename related properties.")
+def conv(str):
+    str = re.sub ('OctavateEight',               'ClefModifier',                   str)
+    str = re.sub ('octavate-eight-interface',    'clef-modifier-interface',        str)
+    str = re.sub ('clefOctavation',              'clefTransposition',              str)
+    str = re.sub ('clefOctavationFormatter',     'clefTranspositionFormatter',     str)
+    str = re.sub ('clefOctavationStyle',         'clefTranspositionStyle',         str)
+    str = re.sub ('cueClefOctavation',           'cueClefTransposition',           str)
+    str = re.sub ('cueClefOctavationFormatter',  'cueClefTranspositionFormatter',  str)
+    str = re.sub ('cueClefOctavationStyle',      'cueClefTranspositionStyle',      str)
+    return str
+
+@rule((2, 17, 19), r"\column { \vspace #2 } -> \column { \combine \null \vspace #2 }")
+def conv(str):
+    def vspace_replace(m):
+
+# vspace now always adds space and does not, for example, change the
+# impact of either baselineskip or descenders on the line above.
+#
+# We can't simulate the old behavior in a simpler manner.  A command
+# of its own is not really warranted since this behavior combines
+# badly enough with other spacing considerations (like baselineskip
+# and descenders) as to make it not all that useful.  So this
+# conversion rule is here more for compatibility's sake rather than
+# preserving desirable behavior.
+
+        str = re.sub (r"(\\\\?)vspace(\s)", r"\1combine \1null \1vspace\2", m.group(0))
+        return str
+
+    str = re.sub (r"\\(?:left-|right-|center-|)column\s*\{" + brace_matcher (20) + r"\}",
+                  vspace_replace, str)
+    return str
+
+@rule((2, 17, 20), _(r"Flag.transparent and Flag.color inherit from Stem"))
+def conv(str):
+    str = re.sub (r"(((?:\\once\s*)?)\\override\s+((?:\w+\.)?)Stem\.(transparent|color)\s*=\s*(#\S+))\s+\2\\override\s+\3Flag\.\4\s*=\s*\5",
+                  r"\1", str)
+    str = re.sub (r"(((?:\\once\s*)?)\\revert\s+((?:\w+\.)?)Stem\.(transparent|color))\s+\2\\revert\s+\3Flag\.\4",
+                  r"\1", str)
+    str = re.sub (r"(\\tweak\s+((?:\w+\.)?)Stem\.(transparent|color)\s+(#\S+))\s+\\tweak\s+\2Flag\.\3\s+\4",
+                  r"\1", str)
+    return str
+
+@rule((2, 17, 25), r'''\tempo 4. = 50~60 -> \tempo 4. = 50-60
+-| -> -!
+pipeSymbol, escapedParenthesisOpenSymbol ... -> "|", "\\(" ...''')
+def conv(str):
+#  This goes for \tempo commands ending with a range, like
+#  = 50 ~ 60
+#  and uses - instead.  We don't explicitly look for \tempo since the
+#  complete syntax has a large number of variants, and this is quite
+#  unlikely to occur in other contexts
+    str = re.sub (r"(=\s*[0-9]+\s*)~(\s*[0-9]+\s)", r"\1-\2", str)
+# Match strings, and articulation shorthands that end in -^_
+# so that we leave alone -| in quoted strings and c4--|
+    def subnonstring(m):
+        if m.group (1):
+            return m.group (1)+"!"
+        return m.group (0)
+    str = re.sub (r"([-^_])\||" + matchstring + r"|[-^_][-^_]", subnonstring, str)
+    str = re.sub (r"\bdashBar\b", "dashBang", str)
+    orig = [ "pipeSymbol",
+             "bracketOpenSymbol",
+             "bracketCloseSymbol",
+             "tildeSymbol",
+             "parenthesisOpenSymbol",
+             "parenthesisCloseSymbol",
+             "escapedExclamationSymbol",
+             "escapedParenthesisOpenSymbol",
+             "escapedParenthesisCloseSymbol",
+             "escapedBiggerSymbol",
+             "escapedSmallerSymbol" ]
+    repl = [ r'"|"',
+             r'"["',
+             r'"]"',
+             r'"~"',
+             r'"("',
+             r'")"',
+             r'"\\!"',
+             r'"\\("',
+             r'"\\)"',
+             r'"\\>"',
+             r'"\\<"']
+    words = r"\b(?:(" + ")|(".join (orig) + r"))\b"
+    def wordreplace(m):
+        def instring(m):
+            return re.sub (r'["\\]',r'\\\g<0>',repl[m.lastindex-1])
+        if m.lastindex:
+            return repl[m.lastindex-1]
+        return '"' + re.sub (words, instring, m.group(0)[1:-1]) + '"'
+    str = re.sub (words + "|" + matchstring, wordreplace, str)
+    return str
+
+@rule((2, 17, 27), r'''\stringTuning \notemode -> \stringTuning''')
+def conv(str):
+    str = re.sub (r"\\stringTuning\s*\\notemode(\s*)@?\{\s*(.*?)\s*@?}",
+                  r"\\stringTuning\1\2", str)
+    if re.search (r'[^-\w]staff-padding[^-\w]', str):
+        stderr_write (NOT_SMART % "staff-padding")
+        stderr_write (_ ("Staff-padding now controls the distance to the baseline, not the nearest point."))
+    return str
+
+@rule((2, 17, 29), r'''Dynamic_engraver -> New_dynamic_engraver+Dynamic_align_engraver
+New_dynamic_engraver -> Dynamic_engraver''')
+def conv(str):
+    str = re.sub ("(\r?\n?[ \t]*\\\\(?:consists|remove)\\s*)(\"?)Dynamic_engraver\\2",
+                  r"\1\2New_dynamic_engraver\2\1\2Dynamic_align_engraver\2",
+                  str)
+# Should we warn about any remaining Dynamic_engraver?  Possibly it
+# will do the job just fine.
+    str = re.sub ("New_dynamic_engraver", "Dynamic_engraver", str)
+    return str
+
+@rule ((2, 17, 97), r'''(make-relative (a b) b ...) -> make-relative (a b) #{ a b #}...''')
+def conv (str):
+    str = re.sub (r"(\(make-relative\s+\(\s*(([A-Za-z][-_A-Za-z0-9]*)" +
+                  r"(?:\s+[A-Za-z][-_A-Za-z0-9]*)*)\s*\)\s*)\3(?=\s)",
+                  r"\1(make-event-chord (list \2))", str)
+    str = re.sub (r"(\(make-relative\s+\(\s*([A-Za-z][-_A-Za-z0-9]*" +
+                  r"(?:\s+([A-Za-z][-_A-Za-z0-9]*))+)\s*\)\s*)\3(?=\s)",
+                  r"\1(make-sequential-music (list \2))", str)
+    return str
+
 
 # Guidelines to write rules (please keep this at the end of this file)
 #
index 7e3eb410bdec1014c61f95bf58f4318b40463862..647061f4c710d46066b9e1aa20134bbd52fef291 100644 (file)
@@ -40,9 +40,14 @@ try:
     import gettext
     t = gettext.translation ('lilypond', localedir)
     _ = t.ugettext
+    ungettext = t.ungettext
 except:
     def _ (s):
         return s
+    def ungettext (s, p, n):
+        if n == 1:
+            return s
+        return p
 underscore = _
 
 # Urg, Python 2.4 does not define stderr/stdout encoding
diff --git a/scm/accreg.scm b/scm/accreg.scm
new file mode 100644 (file)
index 0000000..eba1bb4
--- /dev/null
@@ -0,0 +1,551 @@
+;; Accordion registration is tricky, partly because no two instruments
+;; offer the same registers.  In particular bass registers are not
+;; standardized at all and often left unspecified (orchestra scores
+;; don't use bass notes anyway).
+;;
+;; registration is indicated by using a control sequence name
+;; indicating the register set as either a markup function or a music
+;; function, taking a string as argument.  The music function is a
+;; standalone music event since register changes usually occur before
+;; note onset.  It is currently implemented as a text superscript on
+;; an empty chord but could conceivably become some kind of per-staff
+;; rehearsal mark at one point of time.
+
+(define-module (scm accreg))
+
+(use-modules (lily) (srfi srfi-1) (ice-9 optargs))
+
+(defmacro* define-register-set (set-symbol doc #:optional definition)
+  "Defines markup command named with @var{set-symbol} for creating
+accordion register markups as well as a music function of the same
+name.
+
+@var{doc} is the optional documentation string followed by the actual
+@var{definition}.  See existing definitions in @file{scm/accreg.scm}
+for examples."
+  `(begin
+     (define-markup-command (,set-symbol layout props name) (string?)
+       #:properties (translate-scaled-markup)
+       #:category accordion-registers
+       ;; It would be nice to generate the documentation string
+       ;; automatically containing all possible registrations but this
+       ;; is a hen-and-egg problem.  When the macro is being executed,
+       ;; the register definition has not yet been evaluated.  It
+       ;; would be feasible to not ever evaluate it and consider it
+       ;; final.  But that seems like a somewhat unfriendly interface.
+       ,(if definition doc "Undocumented.")
+       (let* ((instrument ,(or definition doc))
+              (register
+               (ly:assoc-get name (ly:assoc-get 'register instrument)))
+              (reedbanks (ly:assoc-get 'reedbank instrument)))
+         (interpret-markup
+          layout props
+          (make-general-align-markup
+           Y DOWN
+           (fold (lambda (d m)
+                   (markup #:combine m
+                           #:translate-scaled d
+                           #:musicglyph "accordion.dot"))
+                 (markup #:musicglyph
+                         (ly:assoc-get 'glyph instrument))
+                 (or (ly:assoc-get 'dots register)
+                     (append-map (lambda (x)
+                                   (ly:assoc-get 'dots
+                                                 (ly:assoc-get x reedbanks)))
+                                 (ly:assoc-get 'reedbanks register))))))))
+
+     (define-public ,set-symbol
+       (define-music-function (parser position register)
+         (string?)
+         ,(format #f "Equivalent to @code{<>^\\markup \\~a@var{REGISTER}}."
+                  set-symbol)
+         (make-event-chord
+          (list
+           (make-music
+            'TextScriptEvent
+            'direction
+            1
+            'text
+            (markup ,(symbol->keyword set-symbol) register))))))))
+
+
+(define-register-set discant
+  "@code{\\discant @var{name}} generates a discant accordion register
+symbol.
+
+To make it available,
+@example
+#(use-modules (scm accreg))
+@end example
+is required near the top of your input file.
+
+The register names in the default @code{\\discant} register set have
+modeled after numeric Swiss notation like depicted in
+@uref{http://de.wikipedia.org/wiki/Register_%28Akkordeon%29}, omitting
+the slashes and dropping leading zeros.
+
+The string @var{name} is basically a three-digit number with the
+lowest digit specifying the number of 16' reeds, the tens the number
+of 8' reeds, and the hundreds specifying the number of 4' reeds.
+Without modification, the specified number of reeds in 8' is centered
+in the symbol.  Newer instruments may have registrations where 8' can
+be used either within or without a tone chamber, @q{cassotto}.
+Notationally, the central dot then indicates use of cassotto.  One can
+suffix the tens' digits @samp{1} and @samp{2} with @samp{+} or
+@samp{-} to indicate clustering the dots at the right or left
+respectively rather than centered.
+
+Some examples are
+
+@lilypond[quote]
+#(use-modules (scm accreg))
+\\markup {
+  \\center-column {
+     \\discant #\"1\"
+     \"\\\\discant #\\\"1\\\"\"
+     \\vspace #1
+     \\discant #\"120\"
+     \"\\\\discant #\\\"120\\\"\"
+  } \\hspace #3
+  \\center-column {
+     \\discant #\"1+0\"
+     \"\\\\discant #\\\"1+0\\\"\"
+     \\vspace #1
+     \\discant #\"131\"
+     \"\\\\discant #\\\"131\\\"\"
+  }
+}
+@end lilypond
+"
+  '((glyph . "accordion.discant")
+    (reedbank
+     (L (dots (0 . 0.5)))
+     (M (dots (0 . 1.5)))
+     (MM (dots (1 . 1.5)))
+     (MMM (dots (-1 . 1.5)))
+     (H (dots (0 . 2.5))))
+    (register
+     ("1" (reedbanks L))
+     ("10" (reedbanks M))
+     ("11" (reedbanks L M))
+     ("1+0" (reedbanks MM))
+     ("1+1" (reedbanks MM L))
+     ("1-0" (reedbanks MMM))
+     ("1-1" (reedbanks MMM L))
+     ("20" (reedbanks MMM MM))
+     ("21" (reedbanks MMM MM L))
+     ("2+0" (reedbanks MM M))
+     ("2+1" (reedbanks MM M L))
+     ("2-0" (reedbanks MMM M))
+     ("2-1" (reedbanks MMM M L))
+     ("30" (reedbanks MMM MM M))
+     ("31" (reedbanks MMM MM M L))
+     ("100" (reedbanks H))
+     ("101" (reedbanks H L))
+     ("110" (reedbanks H M))
+     ("111" (reedbanks H L M))
+     ("11+0" (reedbanks H MM))
+     ("11+1" (reedbanks H MM L))
+     ("11-0" (reedbanks H MMM))
+     ("11-1" (reedbanks H MMM L))
+     ("120" (reedbanks H MMM MM))
+     ("121" (reedbanks H MMM MM L))
+     ("12+0" (reedbanks H MM M))
+     ("12+1" (reedbanks H MM M L))
+     ("12-0" (reedbanks H MMM M))
+     ("12-1" (reedbanks H MMM M L))
+     ("130" (reedbanks H MMM MM M))
+     ("131" (reedbanks H MMM MM M L)))))
+
+(define-register-set stdBass
+  "@code{\\stdBass @var{name}} generates a standard bass accordion
+register symbol.
+
+To make it available,
+@example
+#(use-modules (scm accreg))
+@end example
+is required near the top of your input file.
+
+The default bass register definitions have been modeled after the
+article @uref{http://www.accordions.com/index/art/stradella.shtml}
+originally appearing in Accord Magazine.
+
+The underlying register model is
+
+@lilypond[quote]
+\\new PianoStaff
+<<
+  \\new Staff \\with { \\omit TimeSignature }
+  { <c' c' c''>\\glissando <f' f' f''>
+    <fis fis' fis''>\\glissando <b b'b''> }
+  \\new Staff \\with { \\omit TimeSignature }
+  { \\clef bass
+    <c, c>\\glissando <f, f>
+    <fis, fis>\\glissando <b, b>
+  }
+>>
+@end lilypond
+
+This kind of overlapping arrangement is common for Italian instruments
+though the exact location of the octave breaks differ.
+
+When not composing for a particular target instrument, using the five
+reed definitions makes more sense than using a four reed layout: in
+that manner, the @samp{Master} register is unambiguous.  This is
+rather the rule in literature bothering about bass registrations at
+all.
+
+Available registrations are
+
+@lilypond[quote]
+#(use-modules (scm accreg))
+\\markup {
+  \\center-column {
+     \\stdBass #\"Soprano\"
+     \"\\\\stdBass #\\\"Soprano\\\"\"
+     \\vspace #1
+     \\stdBass #\"Alto\"
+     \"\\\\stdBass #\\\"Alto\\\"\"
+     \\vspace #1
+     \\stdBass #\"Tenor\"
+     \"\\\\stdBass #\\\"Tenor\\\"\"
+     \\vspace #1
+     \\stdBass #\"Master\"
+     \"\\\\stdBass #\\\"Master\\\"\"
+  } \\hspace #3
+  \\center-column {
+     \\stdBass #\"Soft Bass\"
+     \"\\\\stdBass #\\\"Soft Bass\\\"\"
+     \\vspace #1
+     \\stdBass #\"Soft Tenor\"
+     \"\\\\stdBass #\\\"Soft Tenor\\\"\"
+     \\vspace #1
+     \\stdBass #\"Bass/Alto\"
+     \"\\\\stdBass #\\\"Bass/Alto\\\"\"
+  }
+}
+@end lilypond
+"
+  '((glyph . "accordion.stdbass")
+    (register
+     ("Soprano" (reedbanks Soprano))
+     ("Alto" (reedbanks Alto Soprano))
+     ("Tenor" (reedbanks Tenor Alto Soprano))
+     ("Master" (reedbanks Bass Tenor Contralto Alto Soprano))
+     ("Soft Bass" (reedbanks Bass Tenor Contralto))
+     ("Soft Tenor" (reedbanks Tenor Alto))
+     ("Bass/Alto" (reedbanks Bass Alto Soprano)))
+    (reedbank
+     (Soprano (dots (0 . 3.5)))
+     (Alto (dots (0 . 2.5)))
+     (Contralto (dots (1 . 2)))
+     (Tenor (dots (0 . 1.5)))
+     (Bass (dots (0 . 0.5))))))
+
+
+(define-register-set stdBassIV
+"@code{\\stdBassIV @var{name}} generates a standard bass accordion
+register symbol.
+
+To make it available,
+@example
+#(use-modules (scm accreg))
+@end example
+is required near the top of your input file.
+
+The main use is for four-reed standard bass instruments with reedbank
+layout
+
+@lilypond[quote]
+\\new PianoStaff
+<<
+  \\new Staff \\with { \\omit TimeSignature }
+  { <e e'>2\\glissando <dis' dis''> }
+  \\new Staff \\with { \\omit TimeSignature }
+  { \\clef bass
+    <e,, e,>\\glissando <dis, dis>
+  }
+>>
+@end lilypond
+
+Notable instruments are Morino models with MIII (the others are
+five-reed instead) and the Atlantic@tie{}IV.  Most of those models
+have three register switches.  Some newer Morinos with MIII might have
+five or even seven.
+
+The prevalent three-register layout uses the middle three switches
+@samp{Tenor}, @samp{Master}, @samp{Soft Bass}.  Note that the sound is
+quite darker than the same registrations of @samp{c,}-based
+instruments.
+
+Available registrations are
+
+@lilypond[quote]
+#(use-modules (scm accreg))
+\\markup {
+  \\center-column {
+     \\stdBassIV #\"Soprano\"
+     \"\\\\stdBassIV #\\\"Soprano\\\"\"
+     \\vspace #1
+     \\stdBassIV #\"Alto\"
+     \"\\\\stdBassIV #\\\"Alto\\\"\"
+     \\vspace #1
+     \\stdBassIV #\"Tenor\"
+     \"\\\\stdBassIV #\\\"Tenor\\\"\"
+     \\vspace #1
+     \\stdBassIV #\"Master\"
+     \"\\\\stdBassIV #\\\"Master\\\"\"
+  } \\hspace #3
+  \\center-column {
+     \\stdBassIV #\"Soft Bass\"
+     \"\\\\stdBassIV #\\\"Soft Bass\\\"\"
+     \\vspace #1
+     \\stdBassIV #\"Bass/Alto\"
+     \"\\\\stdBassIV #\\\"Bass/Alto\\\"\"
+     \\vspace #1
+     \\stdBassIV #\"Soft Bass/Alto\"
+     \"\\\\stdBassIV #\\\"Soft Bass/Alto\\\"\"
+     \\vspace #1
+     \\stdBassIV #\"Soft Tenor\"
+     \"\\\\stdBassIV #\\\"Soft Tenor\\\"\"
+  }
+}
+@end lilypond
+"
+  '((glyph . "accordion.stdbass")
+    (reedbank
+     (Soprano (dots (0 . 3.5)))
+     (Alto (dots (0 . 2.5)))
+     (Tenor (dots (0 . 1.5)))
+     (Bass (dots (0 . 0.5))))
+    (register
+     ("Soprano" (reedbanks Soprano))
+     ("Alto" (reedbanks Alto Soprano))
+     ("Tenor" (reedbanks Tenor Soprano))
+     ("Master" (reedbanks Bass Tenor Alto Soprano))
+     ("Soft Bass" (reedbanks Bass Tenor Alto))
+     ("Bass/Alto" (reedbanks Bass Alto Soprano))
+     ("Soft Bass/Alto" (reedbanks Bass Alto))
+     ("Soft Tenor" (reedbanks Tenor Alto)))))
+
+(define-register-set stdBassV
+  "@code{\\stdBassV @var{name}} generates a standard bass accordion
+register symbol.
+
+To make it available,
+@example
+#(use-modules (scm accreg))
+@end example
+is required near the top of your input file.
+
+The main use is for five-reed standard bass instruments with reedbank
+layout
+
+@lilypond[quote]
+\\new PianoStaff
+<<
+  \\new Staff \\with { \\omit TimeSignature }
+  { <e e' e''>2\\glissando <dis' dis'' dis'''> }
+  \\new Staff \\with { \\omit TimeSignature }
+  { \\clef bass
+    <e,, e,>\\glissando <dis, dis>
+  }
+>>
+@end lilypond
+
+This tends to be the bass layout for Hohner's Morino series without
+convertor or MIII manual.
+
+With the exception of the rather new 7-register layout, the highest
+two chord reeds are usually sounded together.  The  Older instruments offer
+5 or 3 bass registers.  The Tango@tie{}VM offers an additional
+@samp{Solo Bass} setting that mutes the chord reeds.  The symbol on
+the register buttons of the Tango@tie{}VM would actually match the
+physical five-octave layout reflected here, but it is not used in
+literature.
+
+Composers should likely prefer the five-reed versions of these
+symbols.  The mismatch of a four-reed instrument with five-reed
+symbols is easier to resolve for the player than the other way round.
+
+Available registrations are
+
+@lilypond[quote]
+#(use-modules (scm accreg))
+\\markuplist \\justified-lines {
+  \\center-column {
+     \\stdBassV #\"Bass/Alto\"
+     \"\\\\stdBassV #\\\"Bass/Alto\\\"\"
+     \\vspace #1
+     \\stdBassV #\"Soft Bass/Alto\"
+     \"\\\\stdBassV #\\\"Soft Bass/Alto\\\"\"
+     \\vspace #1
+     \\stdBassV #\"Alto\"
+     \"\\\\stdBassV #\\\"Alto\\\"\"
+     \\vspace #1
+     \\stdBassV #\"Tenor\"
+     \"\\\\stdBassV #\\\"Tenor\\\"\"
+     \\vspace #1
+     \\stdBassV #\"Master\"
+     \"\\\\stdBassV #\\\"Master\\\"\"
+ } \\hspace #3
+  \\center-column {
+     \\stdBassV #\"Soft Bass\"
+     \"\\\\stdBassV #\\\"Soft Bass\\\"\"
+     \\vspace #1
+     \\stdBassV #\"Soft Tenor\"
+     \"\\\\stdBassV #\\\"Soft Tenor\\\"\"
+     \\vspace #1
+     \\stdBassV #\"Soprano\"
+     \"\\\\stdBassV #\\\"Soprano\\\"\"
+     \\vspace #1
+     \\stdBassV #\"Sopranos\"
+     \"\\\\stdBassV #\\\"Sopranos\\\"\"
+     \\vspace #1
+     \\stdBassV #\"Solo Bass\"
+     \"\\\\stdBassV #\\\"Solo Bass\\\"\"
+  }
+}
+@end lilypond
+"
+'((glyph . "accordion.stdbass")
+    (reedbank
+     (Sopranos (dots (-0.5 . 3.5) (0.5 . 3.5)))
+     (Soprano (dots (0 . 3.5)))
+     (Alto (dots (0 . 2.5)))
+     (Tenor (dots (0 . 1.5)))
+     (Bass (dots (0 . 0.5))))
+    (register
+     ("Bass/Alto" (reedbanks Bass Alto Soprano))
+     ("Soft Bass/Alto" (reedbanks Bass Alto))
+     ("Alto" (reedbanks Alto Sopranos))
+     ("Tenor" (reedbanks Tenor Sopranos))
+     ("Master" (reedbanks Bass Tenor Alto Sopranos))
+     ("Soft Bass" (reedbanks Bass Tenor Alto))
+     ("Soft Tenor" (reedbanks Tenor Alto))
+     ("Soprano" (reedbanks Soprano))
+     ("Sopranos" (reedbanks Sopranos))
+     ("Solo Bass" (reedbanks Bass)))))
+
+(define-register-set stdBassVI
+  "@code{\\stdBassVI @var{name}} generates a standard bass accordion
+register symbol for six reed basses.
+
+To make it available,
+@example
+#(use-modules (scm accreg))
+@end example
+is required near the top of your input file.
+
+This is primarily the register layout for the Hohner @qq{Gola} model.
+The layout is
+
+@lilypond[quote]
+\\new PianoStaff
+<<
+  \\new Staff \\with { \\omit TimeSignature }
+  { <c' c' c''>\\glissando <f' f' f''>
+    <fis fis' fis''>\\glissando <b b'b''> }
+  \\new Staff \\with { \\omit TimeSignature }
+  { \\clef bass
+    <c, c c'>\\glissando <f, f f'>
+    <fis, fis fis>\\glissando <b, b b>
+  }
+>>
+@end lilypond
+
+The registers are effectively quite similar to that of
+@code{\\stdBass}.  An additional bass reed at alto pitch is omitted
+for esthetical reasons from the @samp{Master} setting, so the symbols
+are almost the same except for the @samp{Alto/Soprano} register with
+bass notes at Alto pitch and chords at Soprano pitch.
+
+Available registrations are
+
+@lilypond[quote]
+#(use-modules (scm accreg))
+\\markup {
+  \\center-column {
+     \\stdBassVI #\"Soprano\"
+     \"\\\\stdBassVI #\\\"Soprano\\\"\"
+     \\vspace #1
+     \\stdBassVI #\"Alto\"
+     \"\\\\stdBassVI #\\\"Alto\\\"\"
+     \\vspace #1
+     \\stdBassVI #\"Soft Tenor\"
+     \"\\\\stdBassVI #\\\"Soft Tenor\\\"\"
+     \\vspace #1
+     \\stdBassVI #\"Master\"
+     \"\\\\stdBassVI #\\\"Master\\\"\"
+  } \\hspace #3
+  \\center-column {
+     \\stdBassVI #\"Alto/Soprano\"
+     \"\\\\stdBassVI #\\\"Alto/Soprano\\\"\"
+     \\vspace #1
+     \\stdBassVI #\"Bass/Alto\"
+     \"\\\\stdBassVI #\\\"Bass/Alto\\\"\"
+     \\vspace #1
+     \\stdBassVI #\"Soft Bass\"
+     \"\\\\stdBassVI #\\\"Soft Bass\\\"\"
+  }
+}
+@end lilypond
+"
+  '((glyph . "accordion.stdbass")
+    (register
+     ("Soprano" (reedbanks Soprano))
+     ("Alto" (reedbanks Alto))
+     ("Soft Tenor" (reedbanks Tenor Alto))
+     ("Master" (reedbanks Bass Tenor Contralto Alto Soprano))
+     ("Alto/Soprano" (reedbanks Contratenor Soprano))
+     ("Bass/Alto" (reedbanks Bass Alto Soprano))
+     ("Soft Bass" (reedbanks Bass Tenor Contralto)))
+    (reedbank
+     (Soprano (dots (0 . 3.5)))
+     (Alto (dots (0 . 2.5)))
+     (Contralto (dots (1 . 2)))
+     (Contratenor (dots (-1 . 2.5)))
+     (Tenor (dots (0 . 1.5)))
+     (Bass (dots (0 . 0.5))))))
+
+;; The default FreeBass is modeled after the default Discant register
+;; description.  Being a default, we just provide the normal 2 reed
+;; registrations.
+(define-register-set freeBass
+  "@code{\\freeBass @var{name}} generates a free bass/@/converter
+accordion register symbol for the usual two-reed layout.
+
+To make it available,
+@example
+#(use-modules (scm accreg))
+@end example
+is required near the top of your input file.
+
+Available registrations are
+
+@lilypond[quote]
+#(use-modules (scm accreg))
+\\markup {
+  \\center-column {
+     \\freeBass #\"1\"
+     \"\\\\freeBass #\\\"1\\\"\"
+     \\vspace #1
+     \\freeBass #\"10\"
+     \"\\\\freeBass #\\\"10\\\"\"
+  } \\hspace #3
+  \\center-column {
+     \\freeBass #\"11\"
+     \"\\\\freeBass #\\\"11\\\"\"
+  }
+}
+@end lilypond
+"
+  '((glyph . "accordion.freebass")
+    (reedbank
+     (L (dots (0 . 0.5)))
+     (M (dots (0 . 1.5))))
+    (register
+     ("1" (reedbanks L))
+     ("10" (reedbanks M))
+     ("11" (reedbanks L M)))))
index b77022f2fca1cb2e24a164cdf4e2f7e8d1628f87..14e0209675d02c1b220745d39c14c46271625b2b 100644 (file)
                 (ending-moments (cdr group-list) new-start base-moment)))))
 
   (define (larger-setting test-beam sorted-alist)
-   (if (null? sorted-alist)
-       '()
-       (let* ((first-key (caar sorted-alist))
-              (first-moment (fraction->moment first-key)))
-         (if (moment<=? test-beam first-moment)
-             (car sorted-alist)
-             (larger-setting test-beam (cdr sorted-alist))))))
+    (if (null? sorted-alist)
+        '()
+        (let* ((first-key (caar sorted-alist))
+               (first-moment (fraction->moment first-key)))
+          (if (moment<=? test-beam first-moment)
+              (car sorted-alist)
+              (larger-setting test-beam (cdr sorted-alist))))))
 
   (define (beat-end? moment beat-structure)
     (pair? (member moment beat-structure)))  ;; member returns a list if found, not #t
@@ -71,7 +71,7 @@
       (let* ((base-moment (get 'baseMoment (ly:make-moment 1 4)))
              (measure-length (get 'measureLength (ly:make-moment 1 1)))
              (time-signature-fraction
-               (get 'timeSignatureFraction '(4 . 4)))
+              (get 'timeSignatureFraction '(4 . 4)))
              (beat-structure (get 'beatStructure '(1 1 1 1)))
              (beat-endings (ending-moments beat-structure 0 base-moment))
              (exceptions (sort (assoc-get 'end
@@ -82,8 +82,8 @@
              (beam-half-measure (get 'beamHalfMeasure #t))
              (type (moment->fraction test-beam))
              (non-grace (ly:make-moment
-                          (ly:moment-main-numerator measure-pos)
-                          (ly:moment-main-denominator measure-pos)))
+                         (ly:moment-main-numerator measure-pos)
+                         (ly:moment-main-denominator measure-pos)))
              (pos (if (ly:moment<? non-grace ZERO-MOMENT)
                       (ly:moment-add measure-length non-grace)
                       non-grace))
                                       (car default-rule)
                                       '()))
              (exception-grouping (if (null? type-grouping)
-                                default-grouping
-                                type-grouping))
+                                     default-grouping
+                                     type-grouping))
              (grouping-moment (if (null? type-grouping)
                                   (fraction->moment default-beat-length)
                                   test-beam))
              (exception-moments (ending-moments
-                                  exception-grouping 0 grouping-moment)))
+                                 exception-grouping 0 grouping-moment)))
 
-       (if (= dir START)
+        (if (= dir START)
             ;; Start rules -- #t if beam is allowed to start
             (or beam-half-measure ;; Start anywhere, but option for mid-measure
                 (not (equal? (ly:moment-add pos pos) measure-length))
                 (if (null? exception-grouping)
                     (beat-end? pos beat-endings) ;; no exception, so check beat ending
                     (member pos exception-moments))))))) ;; check exception rule
-
index 14252e4b1db607a22c3df8fb1f6306a1e2b12742..b358c22b53dd0a610abcb28266601d42a645ee3e 100644 (file)
@@ -6,41 +6,41 @@
 (define-public (make-autochange-music parser music)
   (define (generate-split-list change-moment event-list acc)
     (if (null? event-list)
-       acc
-       (let* ((now-tun (caar event-list))
-              (evs (map car (cdar event-list)))
-              (now (car now-tun))
-              (notes (filter (lambda (x)
-                               (ly:in-event-class? x 'note-event))
-                             evs))
-              (pitch (if (pair? notes)
-                         (ly:event-property (car notes) 'pitch)
-                         #f)))
-         ;; tail recursive.
-         (if (and pitch (not (= (ly:pitch-steps pitch) 0)))
-             (generate-split-list #f
-                                  (cdr event-list)
-                                  (cons (cons
+        acc
+        (let* ((now-tun (caar event-list))
+               (evs (map car (cdar event-list)))
+               (now (car now-tun))
+               (notes (filter (lambda (x)
+                                (ly:in-event-class? x 'note-event))
+                              evs))
+               (pitch (if (pair? notes)
+                          (ly:event-property (car notes) 'pitch)
+                          #f)))
+          ;; tail recursive.
+          (if (and pitch (not (= (ly:pitch-steps pitch) 0)))
+              (generate-split-list #f
+                                   (cdr event-list)
+                                   (cons (cons
+
+                                          (if change-moment
+                                              change-moment
+                                              now)
+                                          (sign (ly:pitch-steps pitch))) acc))
+              (generate-split-list
+               (if pitch #f now)
+               (cdr event-list) acc)))))
 
-                                         (if change-moment
-                                             change-moment
-                                             now)
-                                         (sign (ly:pitch-steps pitch))) acc))
-             (generate-split-list
-              (if pitch #f now)
-              (cdr event-list) acc)))))
-  
   (let* ((m (make-music 'AutoChangeMusic))
-       (m1 (make-non-relative-music (context-spec-music music 'Voice "one")))
-        (context-list (recording-group-emulate music
-                                               (ly:parser-lookup parser 'partCombineListener)))
-        (evs (car context-list))
+         (m1 (make-non-relative-music (context-spec-music music 'Voice "one")))
+         (context-list (recording-group-emulate music
+                                                (ly:parser-lookup parser 'partCombineListener)))
+         (evs (car context-list))
          (rev (reverse! (cdar context-list)))
-        (split (reverse! (generate-split-list
-                          #f
-                          rev
-                          '())
-                         '())))
+         (split (reverse! (generate-split-list
+                           #f
+                           rev
+                           '())
+                          '())))
     (set! (ly:music-property m 'element) music)
     (set! (ly:music-property m 'split-list) split)
     m))
index 0734a1a83427339603fd641ff19488ccac5073b0..a16771818722a57e24cabbba1bc25ea5ef452357 100644 (file)
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; backend helpers.
 
 (use-modules (scm ps-to-png)
-            (scm paper-system)
-            (ice-9 optargs))
+             (scm paper-system)
+             (ice-9 optargs))
 
 (define-public (ly:system command)
   (ly:debug (_ "Invoking `~a'...") (string-join command))
   (let ((status (apply ly:spawn command)))
     (if (> status 0)
-       (begin
-         (ly:warning (_ "`~a' failed (~a)\n") command status)
-         ;; hmmm.  what's the best failure option? 
-         (throw 'ly-file-failed)))))
+        (begin
+          (ly:warning (_ "`~a' failed (~a)\n") command status)
+          ;; hmmm.  what's the best failure option?
+          (throw 'ly-file-failed)))))
 
 (define-public (sanitize-command-option str)
   "Kill dubious shell quoting."
-  
+
   (string-append
    "\""
    (regexp-substitute/global #f "[^-_ 0-9,.a-zA-Z'\"\\]" str 'pre 'post)
 (define-public (search-executable names)
   (define (helper path lst)
     (if (null? (cdr lst))
-       (car lst)
-       (if (search-path path (car lst)) (car lst)
-           (helper path (cdr lst)))))
+        (car lst)
+        (if (search-path path (car lst)) (car lst)
+            (helper path (cdr lst)))))
 
   (let ((path (parse-path (getenv "PATH"))))
     (helper path names)))
 
 (define-public (search-gs)
-  
+
   ;; must be sure that we don't catch stuff from old GUBs.
   (search-executable '("gs")))
-  
+
 (define-public (postscript->pdf paper-width paper-height name)
   (let* ((pdf-name (string-append
-                   (dir-basename name ".ps" ".eps")
-                   ".pdf"))
-        (is-eps (string-match "\\.eps$" name))
-        (*unspecified* (if #f #f))
-        (cmd
-         (remove (lambda (x) (eq? x *unspecified*))
-         (list
-              (search-gs)
-              (if (ly:get-option 'verbose) *unspecified* "-q")
-              (if (or (ly:get-option 'gs-load-fonts)
-                      (ly:get-option 'gs-load-lily-fonts)
-                      (eq? PLATFORM 'windows))
-                  "-dNOSAFER"
-                  "-dSAFER")
-
-              (if is-eps
-                  "-dEPSCrop"
-                  (ly:format "-dDEVICEWIDTHPOINTS=~$" paper-width))
-              (if is-eps
-                  *unspecified*
-                  (ly:format "-dDEVICEHEIGHTPOINTS=~$" paper-height))
-              "-dCompatibilityLevel=1.4"
-              "-dNOPAUSE"
-              "-dBATCH"
-              "-r1200"
-              "-sDEVICE=pdfwrite"
-              (string-append "-sOutputFile=" pdf-name)
-              "-c.setpdfwrite"
-              (string-append "-f" name)))))
+                    (dir-basename name ".ps" ".eps")
+                    ".pdf"))
+         (is-eps (string-match "\\.eps$" name))
+         (*unspecified* (if #f #f))
+         (cmd
+          (remove (lambda (x) (eq? x *unspecified*))
+                  (list
+                   (search-gs)
+                   (if (ly:get-option 'verbose) *unspecified* "-q")
+                   (if (or (ly:get-option 'gs-load-fonts)
+                           (ly:get-option 'gs-load-lily-fonts)
+                           (eq? PLATFORM 'windows))
+                       "-dNOSAFER"
+                       "-dSAFER")
+
+                   (if is-eps
+                       "-dEPSCrop"
+                       (ly:format "-dDEVICEWIDTHPOINTS=~$" paper-width))
+                   (if is-eps
+                       *unspecified*
+                       (ly:format "-dDEVICEHEIGHTPOINTS=~$" paper-height))
+                   "-dCompatibilityLevel=1.4"
+                   "-dNOPAUSE"
+                   "-dBATCH"
+                   "-r1200"
+                   "-sDEVICE=pdfwrite"
+                   (string-append "-sOutputFile="
+                                  (string-join
+                                   (string-split pdf-name #\%)
+                                   "%%"))
+                   "-c.setpdfwrite"
+                   (string-append "-f" name)))))
 
     (ly:message (_ "Converting to `~a'...\n") pdf-name)
     (ly:system cmd)))
 
 (define-public (postscript->png resolution paper-width paper-height name)
   (let* ((verbose (ly:get-option 'verbose))
-        (rename-page-1 #f))
+         (rename-page-1 #f))
 
     ;; Do not try to guess the name of the png file,
     ;; GS produces PNG files like BASE-page%d.png.
     (ly:message (_ "Converting to ~a...") "PNG")
     (make-ps-images name
-                   #:resolution resolution
-                   #:page-width paper-width
-                   #:page-height paper-height
-                   #:rename-page-1 rename-page-1
-                   #:be-verbose verbose
-                   #:anti-alias-factor (ly:get-option 'anti-alias-factor)
-                   #:pixmap-format (ly:get-option 'pixmap-format))
+                    #:resolution resolution
+                    #:page-width paper-width
+                    #:page-height paper-height
+                    #:rename-page-1 rename-page-1
+                    #:be-verbose verbose
+                    #:anti-alias-factor (ly:get-option 'anti-alias-factor)
+                    #:pixmap-format (ly:get-option 'pixmap-format))
     (ly:progress "\n")))
 
 (define-public (postprocess-output paper-book module filename formats)
   (let* ((completed (completize-formats formats))
-        (base (dir-basename filename ".ps" ".eps"))
-        (intermediate (remove (lambda (x) (member x formats)) completed)))
+         (base (dir-basename filename ".ps" ".eps"))
+         (intermediate (remove (lambda (x) (member x formats)) completed)))
     (for-each (lambda (f)
-               ((eval (string->symbol (format #f "convert-to-~a" f))
-                      module) paper-book filename)) completed)
+                ((eval (string->symbol (format #f "convert-to-~a" f))
+                       module) paper-book filename)) completed)
     (if (ly:get-option 'delete-intermediate-files)
-       (for-each (lambda (f)
-                   (if (file-exists? f) (delete-file f)))
-                 (map (lambda (x) (string-append base "." x)) intermediate)))))
+        (for-each (lambda (f)
+                    (if (file-exists? f) (delete-file f)))
+                  (map (lambda (x) (string-append base "." x)) intermediate)))))
 
 (define-public (completize-formats formats)
   (define new-fmts '())
   (if (member "pdf" formats)
       (set! formats (cons "ps" formats)))
   (for-each (lambda (x)
-             (if (member x formats) (set! new-fmts (cons x new-fmts))))
-           '("ps" "pdf" "png"))
+              (if (member x formats) (set! new-fmts (cons x new-fmts))))
+            '("ps" "pdf" "png"))
   (uniq-list (reverse new-fmts)))
 
 (define (header-to-file file-name key value)
   (if (not (equal? "-" file-name))
       (set! file-name (string-append file-name "." key)))
   (ly:message (_ "Writing header field `~a' to `~a'...")
-             key
-             (if (equal? "-" file-name) "<stdout>" file-name))
+              key
+              (if (equal? "-" file-name) "<stdout>" file-name))
   (if (equal? file-name "-")
       (display value)
       (let ((port (open-file file-name "w")))
-       (display value port)
-       (close-port port)))
+        (display value port)
+        (close-port port)))
 
   (ly:progress "\n")
   "")
 
 (define-public (output-scopes scopes fields basename)
   (define (output-scope scope)
-    (apply
-     string-append
+    (string-concatenate
      (module-map
       (lambda (sym var)
-       (let ((val (if (variable-bound? var) (variable-ref var) "")))
-         (if (and (memq sym fields) (string? val))
-             (header-to-file basename sym val))
-         ""))
+        (let ((val (if (variable-bound? var) (variable-ref var) "")))
+          (if (and (memq sym fields) (string? val))
+              (header-to-file basename sym val))
+          ""))
       scope)))
-  (apply string-append (map output-scope scopes)))
+  (string-concatenate (map output-scope scopes)))
 
 (define-public (relevant-book-systems book)
   (let ((systems (ly:paper-book-systems book)))
     ;; skip booktitles.
     (if (and (not (ly:get-option 'include-book-title-preview))
-            (pair? systems)
-            (ly:prob-property (car systems) 'is-book-title #f))
-       (cdr systems)
-       systems)))
+             (pair? systems)
+             (ly:prob-property (car systems) 'is-book-title #f))
+        (cdr systems)
+        systems)))
 
 (define-public (relevant-dump-systems systems)
   (let ((to-dump-systems '()))
     (for-each
-      (lambda (sys)
-       (if (or (paper-system-title? sys)
-               (not (pair? to-dump-systems))
-               (paper-system-title? (car to-dump-systems)))
-           (set! to-dump-systems (cons sys to-dump-systems))))
-      systems)
+     (lambda (sys)
+       (if (or (paper-system-title? sys)
+               (not (pair? to-dump-systems))
+               (paper-system-title? (car to-dump-systems)))
+           (set! to-dump-systems (cons sys to-dump-systems))))
+     systems)
     to-dump-systems))
 
 (define missing-stencil-list '())
       (ly:warning (_ "missing stencil expression `~S'") name)
       ""))
 
-  (map (lambda (x)
-        (if (not (module-defined? output-module x))
-            (begin
-              (module-define! output-module x
-                              (lambda* (#:optional y . z)
-                                (missing-stencil-expression x)))
-              (set! missing-stencil-list (append (list x)
-                                                 missing-stencil-list)))))
-       (ly:all-stencil-commands)))
+  (for-each (lambda (x)
+              (if (not (module-defined? output-module x))
+                  (begin
+                    (module-define! output-module x
+                                    (lambda* (#:optional y . z)
+                                             (missing-stencil-expression x)))
+                    (set! missing-stencil-list (cons x missing-stencil-list)))))
+            (ly:all-stencil-commands)))
 
 (define-public (remove-stencil-warnings output-module)
   (for-each
-    (lambda (x)
-      (module-remove! output-module x))
-    missing-stencil-list))
+   (lambda (x)
+     (module-remove! output-module x))
+   missing-stencil-list))
 
 (define (filter-out pred? lst)
   (filter (lambda (x) (not (pred? x))) lst))
 or @code{#f}."
   (let ((match (regexp-exec (make-regexp "(.*)-([0-9]*)") font-name)))
     (if (regexp-match? match)
-       (cons (match:substring match 1) (match:substring match 2))
-       (cons font-name-designsize #f))))
+        (cons (match:substring match 1) (match:substring match 2))
+        (cons font-name-designsize #f))))
 
 ;; Example of a pango-physical-font
 ;; ("Emmentaler-11" "/home/janneke/vc/lilypond/out/share/lilypond/current/fonts/otf/emmentaler-11.otf" 0)
@@ -229,8 +230,8 @@ or @code{#f}."
 (define (pango-font-name pango-font)
   (let ((pf-fonts (ly:pango-font-physical-fonts pango-font)))
     (if (pair? pf-fonts)
-       (pango-pf-font-name (car pf-fonts))
-       "")))
+        (pango-pf-font-name (car pf-fonts))
+        "")))
 
 (define-public (define-fonts paper define-font define-pango-pf)
   "Return a string of all fonts used in @var{paper}, invoking the functions
@@ -238,33 +239,33 @@ or @code{#f}."
 definition."
 
   (let* ((font-list (ly:paper-fonts paper))
-        (pango-fonts (filter ly:pango-font? font-list))
-        (other-fonts (filter-out ly:pango-font? font-list))
-        (other-font-names (map ly:font-name other-fonts))
-        (pango-only-fonts
-         (filter-out (lambda (x)
-                       (member (pango-font-name x) other-font-names))
-                     pango-fonts)))
-
-  (define (font-load-command font)
-    (let* ((font-name (ly:font-name font))
-          (designsize (ly:font-design-size font))
-          (magnification (* (ly:font-magnification font)))
-          (ops (ly:output-def-lookup paper 'output-scale))
-          (scaling (* ops magnification designsize)))
-      (if (equal? font-name "unknown")
-         (display (list font font-name)))
-      (define-font font font-name scaling)))
-
-  (define (pango-font-load-command pango-font)
-    (let* ((pf-fonts (ly:pango-font-physical-fonts pango-font))
-          (pango-pf (if (pair? pf-fonts) (car pf-fonts) '("" "" 0)))
-          (font-name (pango-pf-font-name pango-pf))
-          (scaling (ly:output-def-lookup paper 'output-scale)))
-      (if (equal? font-name "unknown")
-         (display (list pango-font font-name)))
-      (define-pango-pf pango-pf font-name scaling)))
+         (pango-fonts (filter ly:pango-font? font-list))
+         (other-fonts (filter-out ly:pango-font? font-list))
+         (other-font-names (map ly:font-name other-fonts))
+         (pango-only-fonts
+          (filter-out (lambda (x)
+                        (member (pango-font-name x) other-font-names))
+                      pango-fonts)))
 
-  (string-append
-   (apply string-append (map font-load-command other-fonts))
-   (apply string-append (map pango-font-load-command pango-only-fonts)))))
+    (define (font-load-command font)
+      (let* ((font-name (ly:font-name font))
+             (designsize (ly:font-design-size font))
+             (magnification (* (ly:font-magnification font)))
+             (ops (ly:output-def-lookup paper 'output-scale))
+             (scaling (* ops magnification designsize)))
+        (if (equal? font-name "unknown")
+            (display (list font font-name)))
+        (define-font font font-name scaling)))
+
+    (define (pango-font-load-command pango-font)
+      (let* ((pf-fonts (ly:pango-font-physical-fonts pango-font))
+             (pango-pf (if (pair? pf-fonts) (car pf-fonts) '("" "" 0)))
+             (font-name (pango-pf-font-name pango-pf))
+             (scaling (ly:output-def-lookup paper 'output-scale)))
+        (if (equal? font-name "unknown")
+            (display (list pango-font font-name)))
+        (define-pango-pf pango-pf font-name scaling)))
+
+    (string-append
+     (string-concatenate (map font-load-command other-fonts))
+     (string-concatenate (map pango-font-load-command pango-only-fonts)))))
index 25cf20ea27f13cf8bb9934a3f0417678dc8f9bc7..302936e49cf1ae8b55d285ae57de20f865e22270 100644 (file)
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-;; helper functions
+
+
+;; TODO:
+;; (1) Dashed bar lines may stick out above and below the staff lines
+;;
+;; (2) Dashed and dotted lines look ugly in combination with span bars
+;;
+;; (This was the case in the c++-version of (span) bar stuff)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; helper functions for staff and layout properties
+
+(define (calc-blot thickness extent grob)
+  "Calculate the blot diameter by taking @code{'rounded}
+and the dimensions of the extent into account."
+  (let* ((rounded (ly:grob-property grob 'rounded #f))
+         (blot (if rounded
+                   (let ((blot-diameter (layout-blot-diameter grob))
+                         (height (interval-length extent)))
+
+                     (cond ((< thickness blot-diameter) thickness)
+                           ((< height blot-diameter) height)
+                           (else blot-diameter)))
+                   0)))
+
+    blot))
+
+(define (get-span-glyph bar-glyph)
+  "Get the corresponding span glyph from the @code{span-glyph-bar-alist}.
+Pad the string with @code{annotation-char}s to the length of the
+@var{bar-glyph} string."
+  (let ((span-glyph (assoc-get bar-glyph span-bar-glyph-alist bar-glyph)))
+
+    (if (string? span-glyph)
+        (set! span-glyph (string-pad-right
+                          span-glyph
+                          (string-length bar-glyph)
+                          replacement-char)))
+    span-glyph))
 
 (define (get-staff-symbol grob)
+  "Return the staff symbol corresponding to Grob @var{grob}."
   (if (grob::has-interface grob 'staff-symbol-interface)
       grob
       (ly:grob-object grob 'staff-symbol)))
 
 (define (layout-blot-diameter grob)
+  "Get the blot diameter of the @var{grob}'s corresponding layout."
   (let* ((layout (ly:grob-layout grob))
-         (blot (ly:output-def-lookup layout 'blot-diameter)))
-
-        blot))
+         (blot-diameter (ly:output-def-lookup layout 'blot-diameter)))
 
-(define (layout-line-thickness grob)
-  (let* ((layout (ly:grob-layout grob))
-         (line-thickness (ly:output-def-lookup layout 'line-thickness)))
+    blot-diameter))
 
-        line-thickness))
-
-(define (staff-symbol-line-count grob)
+(define (staff-symbol-line-count staff)
+  "Get or compute the number of lines of staff @var{staff}."
   (let ((line-count 0))
 
-       (if (ly:grob? grob)
-           (let ((line-pos (ly:grob-property grob 'line-positions '())))
+    (if (ly:grob? staff)
+        (let ((line-pos (ly:grob-property staff 'line-positions '())))
 
-                (set! line-count (if (pair? line-pos)
-                                     (length line-pos)
-                                     (ly:grob-property grob 'line-count 0)))))
+          (set! line-count (if (pair? line-pos)
+                               (length line-pos)
+                               (ly:grob-property staff 'line-count 0)))))
 
-         line-count))
+    line-count))
 
 (define (staff-symbol-line-span grob)
   (let ((line-pos (ly:grob-property grob 'line-positions '()))
         (iv (cons 0.0 0.0)))
 
-       (if (pair? line-pos)
-           (begin
-             (set! iv (cons (car line-pos) (car line-pos)))
-             (map (lambda (x)
-                    (set! iv (cons (min (car iv) x)
-                                   (max (cdr iv) x))))
-                  (cdr line-pos)))
+    (if (pair? line-pos)
+        (begin
+          (set! iv (cons (car line-pos) (car line-pos)))
+          (for-each (lambda (x)
+                      (set! iv (cons (min (car iv) x)
+                                     (max (cdr iv) x))))
+                    (cdr line-pos)))
 
-           (let ((line-count (ly:grob-property grob 'line-count 0)))
+        (let ((line-count (ly:grob-property grob 'line-count 0)))
 
-                (set! iv (cons (- 1 line-count)
-                               (- line-count 1)))))
-       iv))
+          (set! iv (cons (- 1 line-count)
+                         (- line-count 1)))))
+    iv))
 
 (define (staff-symbol-line-positions grob)
+  "Get or compute the @code{'line-positions} list from @var{grob}."
   (let ((line-pos (ly:grob-property grob 'line-positions '())))
 
-       (if (not (pair? line-pos))
-           (let* ((line-count (ly:grob-property grob 'line-count 0))
-                  (height (- line-count 1.0)))
-
-                 (set! line-pos (map (lambda (x)
-                                             (- height (* x 2)))
-                                     (iota line-count)))))
-       line-pos))
-
+    (if (not (pair? line-pos))
+        (let* ((line-count (ly:grob-property grob 'line-count 0))
+               (height (- line-count 1.0)))
+
+          (set! line-pos (map (lambda (x)
+                                (- height (* x 2)))
+                              (iota line-count)))))
+    line-pos))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; internal helper functions
+
+(define annotation-char #\-)
+(define replacement-char #\ )
+
+(define dummy-extent (cons -1 1))
+
+
+(define (glyph->stencil glyph grob extent)
+  "Return a stencil computed by the procedure associated with
+glyph @var{glyph}. The arguments @var{grob} and @var{extent} are
+mandatory to the procedures stored in @code{bar-glyph-print-procedures}."
+  (let ((proc (assoc-get glyph bar-glyph-print-procedures))
+        (stencil empty-stencil))
+
+    (if (procedure? proc)
+        (set! stencil (proc grob extent))
+        (ly:warning (_ "Bar glyph ~a not known. Ignoring.") glyph))
+    stencil))
+
+(define (string->string-list str)
+  "Convert a string into a list of strings with length 1.
+@code{\"aBc\"} will be converted to @code{(\"a\" \"B\" \"c\")}.
+An empty string will be converted to a list containing @code{\"\"}."
+  (if (and (string? str)
+           (not (zero? (string-length str))))
+      (map (lambda (s)
+             (string s))
+           (string->list str))
+      (list "")))
+
+(define (strip-string-annotation str)
+  "Strip annotations starting with and including the
+annotation char from string @var{str}."
+  (let ((pos (string-index str annotation-char)))
+
+    (if pos
+        (substring str 0 pos)
+        str)))
+
+(define (check-for-annotation str)
+  "Check whether the annotation char is present in string @var{str}."
+  (if (string? str)
+      (if (string-index str annotation-char)
+          (ly:warning
+           (_ "Annotation '~a' is allowed in the first argument of a bar line definition only.")
+           str))))
+
+(define (check-for-replacement str)
+  "Check whether the replacement char is present in string @var{str}."
+  (if (string? str)
+      (if (string-index str replacement-char)
+          (ly:warning
+           (_ "Replacement '~a' is allowed in the last argument of a bar line definition only.")
+           str))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; functions used by external routines
 
 (define-public (span-bar::notify-grobs-of-my-existence grob)
+  "Set the @code{'has-span-bar} property for all elements of Grob @var{grob}."
   (let* ((elts (ly:grob-array->list (ly:grob-object grob 'elements)))
          (sorted-elts (sort elts ly:grob-vertical<?))
          (last-pos (1- (length sorted-elts)))
          (idx 0))
 
-        (map (lambda (g)
-                     (ly:grob-set-property!
-                       g
-                       'has-span-bar
-                       (cons (if (eq? idx last-pos)
-                                 #f
-                                 grob)
-                             (if (zero? idx)
-                                 #f
-                                 grob)))
-                      (set! idx (1+ idx)))
-             sorted-elts)))
-
-;; How should a bar line behave at a break?
-;; the following alist has the form
-;; ( unbroken-bar-glyph . ( bar-glyph-at-end-of-line . bar-glyph-at-begin-of-line ))
-
-(define bar-glyph-alist
-  '((":|:" . (":|" . "|:"))
-    (":|.|:" . (":|" . "|:"))
-    (":|.:" . (":|" . "|:"))
-    ("||:" . ("||" . "|:"))
-    ("dashed" . ("dashed" . '()))
-    ("|" . ("|" . ()))
-    ("|s" . (() . "|"))
-    ("|:" . ("|" . "|:"))
-    ("|." . ("|." . ()))
-
-    ;; hmm... should we end with a bar line here?
-    (".|" . ("|" . ".|"))
-    (":|" . (":|" . ()))
-    ("||" . ("||" . ()))
-    (".|." . (".|." . ()))
-    ("|.|" . ("|.|" . ()))
-    ("" . ("" . ""))
-    (":" . (":" . ""))
-    ("." . ("." . ()))
-    ("'" . ("'" . ()))
-    ("empty" . (() . ()))
-    ("brace" . (() . "brace"))
-    ("bracket" . (() . "bracket"))
-
-    ;; segno bar lines
-    ("S" . ("||" . "S"))
-    ("|S" . ("|" . "S"))
-    ("S|" . ("S" . ()))
-    (":|S" . (":|" . "S"))
-    (":|S." . (":|S" . ()))
-    ("S|:" . ("S" . "|:"))
-    (".S|:" . ("|" . "S|:"))
-    (":|S|:" . (":|" . "S|:"))
-    (":|S.|:" . (":|S" . "|:"))
-
-    ;; ancient bar lines
-    ("kievan" . ("kievan" . ""))))
-
+    (for-each (lambda (g)
+                (ly:grob-set-property!
+                 g
+                 'has-span-bar
+                 (cons (if (eq? idx last-pos)
+                           #f
+                           grob)
+                       (if (zero? idx)
+                           #f
+                           grob)))
+                (set! idx (1+ idx)))
+              sorted-elts)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Line break decisions.
+
+(define-public (define-bar-line bar-glyph eol-glyph bol-glyph span-glyph)
+  "Define a bar glyph @var{bar-glyph} and its substitute at the end of
+a line (@var{eol-glyph}), at the beginning of a new line (@var{bol-glyph})
+and as a span bar (@var{span-glyph}) respectively."
+  ;; the last argument may not include annotations
+  (check-for-annotation span-glyph)
+  ;; only the last argument may call for replacements
+  (for-each (lambda (s)
+              (check-for-replacement s))
+            (list bar-glyph eol-glyph bol-glyph))
+  ;; the bar-glyph-alist has entries like
+  ;; (bar-glyph . ( eol-glyph . bol-glyph))
+  (set! bar-glyph-alist
+        (acons bar-glyph (cons eol-glyph bol-glyph) bar-glyph-alist))
+
+  ;; the span-bar-glyph-alist has entries like
+  ;; (bar-glyph . span-glyph)
+  (set! span-bar-glyph-alist
+        (acons bar-glyph span-glyph span-bar-glyph-alist)))
+
+(define-session bar-glyph-alist '())
+
+(define-session span-bar-glyph-alist '())
+
+(define-public (add-bar-glyph-print-procedure glyph proc)
+  "Specify the single glyph @var{glyph} that calls print procedure @var{proc}.
+The procedure @var{proc} has to be defined in the form
+@code{(make-...-bar-line grob extent)} even if the @var{extent}
+is not used within the routine."
+  (if (or (not (string? glyph))
+          (> (string-length glyph) 1))
+      (ly:warning
+       (_ "add-bar-glyph-print-procedure: glyph '~a' has to be a single ASCII character.")
+       glyph)
+      (set! bar-glyph-print-procedures
+            (acons glyph proc bar-glyph-print-procedures))))
+
+(define-session bar-glyph-print-procedures `())
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; drawing functions for various bar line types
+;; to include them and other user-defined functions,
+;; all of them have the form
+;; (make-...-bar-line grob extent)
+;; even if the extent is not used.
 
 (define (make-empty-bar-line grob extent)
+  "Draw an empty bar line."
   (ly:make-stencil "" (cons 0 0) extent))
 
-(define (make-simple-bar-line grob width extent rounded)
-  (let ((blot (if rounded
-                  (layout-blot-diameter grob)
-                  0)))
-
-        (ly:round-filled-box (cons 0 width)
-                             extent
-                             blot)))
-
-(define (make-tick-bar-line grob height rounded)
-  (let ((half-staff (* 1/2 (ly:staff-symbol-staff-space grob)))
-        (staff-line-thickness (ly:staff-symbol-line-thickness grob))
-        (blot (if rounded
-                  (layout-blot-diameter grob)
-                  0)))
+(define (make-simple-bar-line grob extent)
+  "Draw a simple bar line."
+  (let* ((line-thickness (layout-line-thickness grob))
+         (thickness (* (ly:grob-property grob 'hair-thickness 1)
+                       line-thickness))
+         (blot (calc-blot thickness extent grob))
+         (extent (bar-line::widen-bar-extent-on-span grob extent)))
 
-       (ly:round-filled-box (cons 0 staff-line-thickness)
-                            (cons (- height half-staff) (+ height half-staff))
-                            blot)))
+    (ly:round-filled-box (cons 0 thickness)
+                         extent
+                         blot)))
 
-(define (make-colon-bar-line grob)
+(define (make-thick-bar-line grob extent)
+  "Draw a thick bar line."
+  (let* ((line-thickness (layout-line-thickness grob))
+         (thickness (* (ly:grob-property grob 'thick-thickness 1)
+                       line-thickness))
+         (blot (calc-blot thickness extent grob))
+         (extent (bar-line::widen-bar-extent-on-span grob extent)))
+
+    (ly:round-filled-box (cons 0 thickness)
+                         extent
+                         blot)))
+
+(define (make-tick-bar-line grob extent)
+  "Draw a tick bar line."
+  (let* ((half-staff (* 1/2 (ly:staff-symbol-staff-space grob)))
+         (staff-line-thickness (ly:staff-symbol-line-thickness grob))
+         (height (interval-end extent))
+         (blot (calc-blot staff-line-thickness extent grob)))
+
+    (ly:round-filled-box (cons 0 staff-line-thickness)
+                         (cons (- height half-staff) (+ height half-staff))
+                         blot)))
+
+(define (make-colon-bar-line grob extent)
+  "Draw repeat dots."
   (let* ((staff-space (ly:staff-symbol-staff-space grob))
          (line-thickness (ly:staff-symbol-line-thickness grob))
          (dot (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
                                            line-pos) <))
                                (gap-to-find (/ (+ dot-y-length line-thickness)
                                                (/ staff-space 2)))
-                               (first (car folded-staff))
-                               (found #f))
+                               (first (car folded-staff)))
 
                           ;; find the first space big enough
                           ;; to hold a dot and a staff line
                           ;; (a space in the folded staff may be
                           ;; narrower but can't be wider than the
                           ;; corresponding original spaces)
-                          (reduce (lambda (x y) (if (and (> (- x y) gap-to-find)
-                                                         (not found))
-                                                    (begin
-                                                      (set! found #t)
-                                                      (set! dist (+ x y))))
-                                          x)
-                                  ""
-                                  folded-staff)
-
-                          (if (not found)
-                              (set! dist (if (< gap-to-find first)
-                                             ;; there's a central space big
-                                             ;; enough to hold both dots
-                                             first
-
-                                             ;; dots should go outside
-                                             (+ (* 2 (car
-                                                      (reverse folded-staff)))
-                                                (/ (* 4 dot-y-length)
-                                                   staff-space))))))))))))
+                          (set! dist
+                                (or
+                                 (any (lambda (x y)
+                                        (and (> (- y x) gap-to-find)
+                                             (+ x y)))
+                                      folded-staff (cdr folded-staff))
+                                 (if (< gap-to-find first)
+                                     ;; there's a central space big
+                                     ;; enough to hold both dots
+                                     first
+
+                                     ;; dots should go outside
+                                     (+ (* 2 (last folded-staff))
+                                        (/ (* 4 dot-y-length)
+                                           staff-space))))))))))))
         (set! staff-space 1.0))
 
     (let* ((stencil empty-stencil)
                                 (/ staff-space 2)) Y)))
       stencil)))
 
+
 (define (make-dotted-bar-line grob extent)
+  "Draw a dotted bar line."
   (let* ((position (round (* (interval-end extent) 2)))
          (correction (if (even? position) 0.5 0.0))
          (dot (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
                       (- 0.5 correction))))
          (counting (interval-length (cons i e)))
          (stil-list (map
-                      (lambda (x)
-                              (ly:stencil-translate-axis
-                                dot (+ x correction) Y))
-                      (iota counting i 1))))
-
-        (define (add-stencils! stil l)
-          (if (null? l)
-              stil
-              (if (null? (cdr l))
-                  (ly:stencil-add stil (car l))
-                  (add-stencils! (ly:stencil-add stil (car l)) (cdr l)))))
-
-        (add-stencils! empty-stencil stil-list)))
-
-(define (make-dashed-bar-line grob extent thickness)
+                     (lambda (x)
+                       (ly:stencil-translate-axis
+                        dot (+ x correction) Y))
+                     (iota counting i 1))))
+
+    (define (add-stencils! stil l)
+      (if (null? l)
+          stil
+          (if (null? (cdr l))
+              (ly:stencil-add stil (car l))
+              (add-stencils! (ly:stencil-add stil (car l)) (cdr l)))))
+
+    (add-stencils! empty-stencil stil-list)))
+
+(define (make-dashed-bar-line grob extent)
+  "Draw a dashed bar line."
   (let* ((height (interval-length extent))
          (staff-symbol (get-staff-symbol grob))
          (staff-space (ly:staff-symbol-staff-space grob))
          (line-thickness (layout-line-thickness grob))
+         (thickness (* (ly:grob-property grob 'hair-thickness 1)
+                       line-thickness))
          (dash-size (- 1.0 (ly:grob-property grob 'gap 0.3)))
          (line-count (staff-symbol-line-count staff-symbol)))
 
-        (if (< (abs (+ line-thickness
-                       (* (1- line-count) staff-space)
-                       (- height)))
-               0.1)
-            (let ((blot (layout-blot-diameter grob))
-                  (half-space (/ staff-space 2.0))
-                  (half-thick (/ line-thickness 2.0))
-                  (stencil empty-stencil))
+    (if (< (abs (+ line-thickness
+                   (* (1- line-count) staff-space)
+                   (- height)))
+           0.1)
+        (let ((blot (layout-blot-diameter grob))
+              (half-space (/ staff-space 2.0))
+              (half-thick (/ line-thickness 2.0))
+              (stencil empty-stencil))
 
-                 (map (lambda (i)
+          (for-each (lambda (i)
                       (let ((top-y (min (* (+ i dash-size) half-space)
                                         (+ (* (1- line-count) half-space)
                                            half-thick)))
                                         (- 0 (* (1- line-count) half-space)
                                            half-thick))))
 
-                           (set! stencil
-                                 (ly:stencil-add
-                                   stencil
-                                   (ly:round-filled-box (cons 0 thickness)
-                                                        (cons bot-y top-y)
-                                                        blot)))))
-                      (iota line-count (1- line-count) (- 2)))
-            stencil)
-            (let* ((dashes (/ height staff-space))
-                   (total-dash-size (/ height dashes))
-                   (factor (/ (- dash-size thickness) staff-space)))
-
-                  (ly:stencil-translate-axis
-                    (ly:make-stencil (list 'dashed-line
-                                           thickness
-                                           (* factor total-dash-size)
-                                           (* (- 1 factor) total-dash-size)
-                                           0
-                                           height
-                                           (* factor total-dash-size 0.5))
-                                           (cons 0 thickness)
-                                           (cons 0 height))
-                                           (interval-start extent)
-                                           Y)))))
-
-(define (make-segno-bar-line grob glyph extent rounded)
+                        (set! stencil
+                              (ly:stencil-add
+                               stencil
+                               (ly:round-filled-box (cons 0 thickness)
+                                                    (cons bot-y top-y)
+                                                    blot)))))
+                    (iota line-count (1- line-count) (- 2)))
+          stencil)
+        (let* ((dashes (/ height staff-space))
+               (total-dash-size (/ height dashes))
+               (factor (/ (- dash-size thickness) staff-space))
+               (stencil (ly:stencil-translate-axis
+                         (ly:make-stencil (list 'dashed-line
+                                                thickness
+                                                (* factor total-dash-size)
+                                                (* (- 1 factor) total-dash-size)
+                                                0
+                                                height
+                                                (* factor total-dash-size 0.5))
+                                          (cons (/ thickness -2) (/ thickness 2))
+                                          (cons 0 height))
+                         (interval-start extent)
+                         Y)))
+
+          (ly:stencil-translate-axis stencil (/ thickness 2) X)))))
+
+
+(define ((make-segno-bar-line show-segno) grob extent)
+  "Draw a segno bar line. If @var{show-segno} is set to @code{#t},
+the segno sign is drawn over the double bar line; otherwise, it
+draws the span bar variant, i.e. without the segno sign."
   (let* ((line-thickness (layout-line-thickness grob))
-         (kern (* (ly:grob-property grob 'kern 1) line-thickness))
          (thinkern (* (ly:grob-property grob 'thin-kern 1) line-thickness))
-         (hair (* (ly:grob-property grob 'hair-thickness 1) line-thickness))
-         (fatline (* (ly:grob-property grob 'thick-thickness 1) line-thickness))
-         (thin-stil (make-simple-bar-line grob hair extent rounded))
-         (thick-stil (make-simple-bar-line grob fatline extent rounded))
-         (colon-stil (make-colon-bar-line grob))
-         (segno-stil (ly:stencil-add
-                       (ly:stencil-combine-at-edge
-                         (ly:stencil-combine-at-edge
-                           '() X LEFT thin-stil thinkern)
-                         X RIGHT thin-stil thinkern)
-                       (ly:font-get-glyph (ly:grob-default-font grob) "scripts.varsegno")))
-         (glyph (cond
-                  ((string=? glyph "|S") "S")
-                  ((string=? glyph "S|") "S")
-                  (else glyph)))
-         (stencil (cond
-                    ((or (string=? glyph "S|:")
-                         (string=? glyph ".S|:"))
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         (ly:stencil-combine-at-edge
-                           thick-stil X RIGHT thin-stil kern)
-                         X RIGHT colon-stil kern)
-                       X LEFT segno-stil thinkern))
-                    ((or (string=? glyph ":|S")
-                         (string=? glyph ":|S."))
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         (ly:stencil-combine-at-edge
-                           thick-stil X LEFT thin-stil kern)
-                         X LEFT colon-stil kern)
-                       X RIGHT segno-stil thinkern))
-                    ((or (string=? glyph ":|S|:")
-                         (string=? glyph ":|S.|:"))
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         (ly:stencil-combine-at-edge
-                           (ly:stencil-combine-at-edge
-                             (ly:stencil-combine-at-edge
-                               (ly:stencil-combine-at-edge
-                                 thick-stil X LEFT thin-stil kern)
-                               X LEFT colon-stil kern)
-                             X RIGHT segno-stil thinkern)
-                           X RIGHT thick-stil thinkern)
-                         X RIGHT thin-stil kern)
-                       X RIGHT colon-stil kern))
-                    ((string=? glyph "|._.|")
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         (ly:stencil-combine-at-edge
-                           thick-stil X LEFT thin-stil kern)
-                         X RIGHT thick-stil (+ (interval-length
-                                                 (ly:stencil-extent segno-stil X))
-                                               (* 2 thinkern)))
-                       X RIGHT thin-stil kern))
-                    (else segno-stil))))
-
-       stencil))
-
-(define (make-kievan-bar-line grob)
+         (thin-stil (make-simple-bar-line grob extent))
+         (double-line-stil (ly:stencil-combine-at-edge
+                            thin-stil
+                            X
+                            LEFT
+                            thin-stil
+                            thinkern))
+         (segno (ly:font-get-glyph (ly:grob-default-font grob)
+                                   "scripts.varsegno"))
+         (stencil (ly:stencil-add
+                   (if show-segno
+                       segno
+                       (ly:make-stencil
+                        ""
+                        (ly:stencil-extent segno X)
+                        (cons 0 0)))
+                   (ly:stencil-translate-axis
+                    double-line-stil
+                    (* 1/2 thinkern)
+                    X))))
+
+    stencil))
+
+(define (make-kievan-bar-line grob extent)
+  "Draw a kievan bar line."
   (let* ((font (ly:grob-default-font grob))
          (stencil (stencil-whiteout
-                    (ly:font-get-glyph font "scripts.barline.kievan"))))
-
-        ;; the kievan bar line has mo staff lines underneath,
-        ;; so we whiteout them and move ithe grob to a higher layer
-        (ly:grob-set-property! grob 'layer 1)
-        stencil))
-
+                   (ly:font-get-glyph font "scripts.barline.kievan"))))
+
+    ;; the kievan bar line has no staff lines underneath,
+    ;; so we whiteout them and move the grob to a higher layer
+    (ly:grob-set-property! grob 'layer 1)
+    stencil))
+
+(define ((make-bracket-bar-line dir) grob extent)
+  "Draw a bracket-style bar line. If @var{dir} is set to @code{LEFT}, the
+opening bracket will be drawn, for @code{RIGHT} we get the closing bracket."
+  (let* ((thick-stil (make-thick-bar-line grob extent))
+         (brackettips-up (ly:font-get-glyph (ly:grob-default-font grob)
+                                            "brackettips.up"))
+         (brackettips-down (ly:font-get-glyph (ly:grob-default-font grob)
+                                              "brackettips.down"))
+         ;; the x-extent of the brackettips must not be taken into account
+         ;; for bar line constructs like "[|:", so we set new bounds:
+         (tip-up-stil (ly:make-stencil (ly:stencil-expr brackettips-up)
+                                       (cons 0 0)
+                                       (ly:stencil-extent brackettips-up Y)))
+         (tip-down-stil (ly:make-stencil (ly:stencil-expr brackettips-down)
+                                         (cons 0 0)
+                                         (ly:stencil-extent brackettips-down Y)))
+         (stencil (ly:stencil-add
+                   thick-stil
+                   (ly:stencil-translate-axis tip-up-stil
+                                              (interval-end extent)
+                                              Y)
+                   (ly:stencil-translate-axis tip-down-stil
+                                              (interval-start extent)
+                                              Y))))
+
+    (if (eq? dir LEFT)
+        stencil
+        (ly:stencil-scale stencil -1 1))))
+
+(define ((make-spacer-bar-line glyph) grob extent)
+  "Draw an invisible bar line which has the same dimensions as the one
+drawn by the procedure associated with glyph @var{glyph}."
+  (let* ((stil (glyph->stencil glyph grob extent))
+         (stil-x-extent (ly:stencil-extent stil X)))
+
+    (ly:make-stencil "" stil-x-extent extent)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; bar line callbacks
 
 (define-public (ly:bar-line::calc-bar-extent grob)
   (let ((staff-symbol (get-staff-symbol grob))
         (staff-extent (cons 0 0)))
 
-       (if (ly:grob? staff-symbol)
-           (let* ((bar-line-color (ly:grob-property grob 'color))
-                  (staff-color (ly:grob-property staff-symbol 'color))
-                  (staff-line-thickness (ly:staff-symbol-line-thickness grob))
-                  (staff-space (ly:staff-symbol-staff-space grob)))
-
-                 (set! staff-extent (ly:staff-symbol::height staff-symbol))
-
-                 (if (zero? staff-space)
-                     (set! staff-space 1.0))
-
-                 (if (< (interval-length staff-extent) staff-space)
-                     ;; staff is too small (perhaps consists of a single line);
-                     ;; extend the bar line to make it visible
-                     (set! staff-extent
-                           (interval-widen staff-extent staff-space))
-                     ;; Due to rounding problems, bar lines extending to the outermost edges
-                     ;; of the staff lines appear wrongly in on-screen display
-                     ;; (and, to a lesser extent, in print) - they stick out a pixel.
-                     ;; The solution is to extend bar lines only to the middle
-                     ;; of the staff line - unless they have different colors,
-                     ;; when it would be undesirable.
-                     ;;
-                     ;; This reduction should not influence whether bar is to be
-                     ;; expanded later, so length is not updated on purpose.
-                     (if (eq? bar-line-color staff-color)
-                         (set! staff-extent
-                               (interval-widen staff-extent
-                                               (* -1/2 staff-line-thickness)))))))
-       staff-extent))
+    (if (ly:grob? staff-symbol)
+        (let ((bar-line-color (ly:grob-property grob 'color))
+              (staff-color (ly:grob-property staff-symbol 'color))
+              (half-staff-line-thickness (/ (ly:staff-symbol-line-thickness grob) 2))
+              (staff-space (ly:staff-symbol-staff-space grob)))
+
+          (set! staff-extent (ly:staff-symbol::height staff-symbol))
+
+          (if (zero? staff-space)
+              (set! staff-space 1.0))
+
+          (if (< (interval-length staff-extent) staff-space)
+              ;; staff is too small (perhaps consists of a single line);
+              ;; extend the bar line to make it visible
+              (set! staff-extent
+                    (interval-widen staff-extent staff-space))
+              ;; Due to rounding problems, bar lines extending to the outermost edges
+              ;; of the staff lines appear wrongly in on-screen display
+              ;; (and, to a lesser extent, in print) - they stick out a pixel.
+              ;; The solution is to extend bar lines only to the middle
+              ;; of the staff line - unless they have different colors,
+              ;; when it would be undesirable.
+              ;;
+              ;; This reduction should not influence whether the bar is to be
+              ;; expanded later, so length is not updated on purpose.
+              (if (eq? bar-line-color staff-color)
+                  (set! staff-extent
+                        (interval-widen staff-extent
+                                        (- half-staff-line-thickness)))))))
+    staff-extent))
+
+;; this function may come in handy when defining new bar line glyphs, so
+;; we make it public.
+;; This code should not be included in ly:bar-line::calc-bar-extent, because
+;; this may confuse the drawing functions for dashed and dotted bar lines.
+(define-public (bar-line::widen-bar-extent-on-span grob extent)
+  "Widens the bar line @var{extent} towards span bars adjacent to grob @var{grob}."
+  (let ((staff-symbol (get-staff-symbol grob))
+        (has-span-bar (ly:grob-property grob 'has-span-bar #f)))
+
+    (if (and (ly:grob? staff-symbol)
+             (pair? has-span-bar))
+        (let ((bar-line-color (ly:grob-property grob 'color))
+              (staff-color (ly:grob-property staff-symbol 'color))
+              (half-staff-line-thickness (/ (ly:staff-symbol-line-thickness grob) 2)))
+          (if (eq? bar-line-color staff-color)
+              ;; if the colors are equal, ly:bar-line::calc-bar-extent has
+              ;; shortened the bar line extent by a half-staff-line-thickness
+              ;; this is reverted on the interval bounds where span bars appear:
+              (begin
+                (and (ly:grob? (car has-span-bar))
+                     (set! extent (cons (- (car extent) half-staff-line-thickness)
+                                        (cdr extent))))
+                (and (ly:grob? (cdr has-span-bar))
+                     (set! extent (cons (car extent)
+                                        (+ (cdr extent) half-staff-line-thickness))))))))
+    extent))
 
 (define (bar-line::bar-y-extent grob refpoint)
+  "Compute the y-extent of the bar line relative to @var{refpoint}."
   (let* ((extent (ly:grob-property grob 'bar-extent '(0 . 0)))
          (rel-y (ly:grob-relative-coordinate grob refpoint Y))
          (y-extent (coord-translate extent rel-y)))
 
-        y-extent))
+    y-extent))
 
 (define-public (ly:bar-line::print grob)
-  (let ((glyph (ly:grob-property grob 'glyph-name))
+  "The print routine for bar lines."
+  (let ((glyph-name (ly:grob-property grob 'glyph-name))
         (extent (ly:grob-property grob 'bar-extent '(0 . 0))))
 
-       (if (and (not (eq? glyph '()))
-                (> (interval-length extent) 0))
-           (bar-line::compound-bar-line grob glyph extent #f)
-           #f)))
+    (if (and glyph-name
+             (> (interval-length extent) 0))
+        (bar-line::compound-bar-line grob glyph-name extent)
+        #f)))
 
-(define-public (bar-line::compound-bar-line grob glyph extent rounded)
+(define-public (bar-line::compound-bar-line grob bar-glyph extent)
+  "Build the bar line stencil."
   (let* ((line-thickness (layout-line-thickness grob))
-         (height (interval-length extent))
          (kern (* (ly:grob-property grob 'kern 1) line-thickness))
-         (thinkern (* (ly:grob-property grob 'thin-kern 1) line-thickness))
-         (hair (* (ly:grob-property grob 'hair-thickness 1) line-thickness))
-         (fatline (* (ly:grob-property grob 'thick-thickness 1) line-thickness))
-         (thin-stil (make-simple-bar-line grob hair extent rounded))
-         (thick-stil (make-simple-bar-line grob fatline extent rounded))
-         (colon-stil (make-colon-bar-line grob))
-         (glyph (cond
-                  ((not glyph) "")
-                  ((string=? glyph "||:") "|:")
-                  ;; bar-line::compound-bar-line is called only if
-                  ;; height > 0, but just in case ...
-                  ((and (string=? glyph ":|")
-                        (zero? height)) "|.")
-                  ((and (string=? glyph "|:")
-                        (zero? height)) ".|")
-                  (else glyph)))
-         (stencil (cond
-                    ((string=? glyph "|") thin-stil)
-                    ((string=? glyph ".") thick-stil)
-                    ((string=? glyph "||")
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         '() X LEFT thin-stil thinkern)
-                       X RIGHT thin-stil thinkern))
-                    ((string=? glyph "|.")
-                     (ly:stencil-combine-at-edge
-                       thick-stil X LEFT thin-stil kern))
-                    ((string=? glyph ".|")
-                     (ly:stencil-combine-at-edge
-                       thick-stil X RIGHT thin-stil kern))
-                    ((string=? glyph "|:")
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         thick-stil X RIGHT thin-stil kern)
-                       X RIGHT colon-stil kern))
-                    ((string=? glyph ":|")
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         thick-stil X LEFT thin-stil kern)
-                       X LEFT colon-stil kern))
-                    ((string=? glyph ":|:")
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         (ly:stencil-combine-at-edge
-                           (ly:stencil-combine-at-edge
-                             '() X LEFT thick-stil thinkern)
-                           X LEFT colon-stil kern)
-                         X RIGHT thick-stil kern)
-                       X RIGHT colon-stil kern))
-                    ((string=? glyph ":|.|:")
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         (ly:stencil-combine-at-edge
-                           (ly:stencil-combine-at-edge
-                             thick-stil X LEFT thin-stil kern)
-                           X LEFT colon-stil kern)
-                         X RIGHT thin-stil kern)
-                       X RIGHT colon-stil kern))
-                    ((string=? glyph ":|.:")
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         (ly:stencil-combine-at-edge
-                           thick-stil X LEFT thin-stil kern)
-                         X LEFT colon-stil kern)
-                       X RIGHT colon-stil kern))
-                    ((string=? glyph ".|.")
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         '() X LEFT thick-stil thinkern)
-                       X RIGHT thick-stil kern))
-                    ((string=? glyph "|.|")
-                     (ly:stencil-combine-at-edge
-                       (ly:stencil-combine-at-edge
-                         thick-stil X LEFT thin-stil kern)
-                       X RIGHT thin-stil kern))
-                    ((string=? glyph ":")
-                     (make-dotted-bar-line grob extent))
-                    ((or (string=? glyph "|._.|")
-                         (string-contains glyph "S"))
-                     (make-segno-bar-line grob glyph extent rounded))
-                    ((string=? glyph "'")
-                     (make-tick-bar-line grob (interval-end extent) rounded))
-                    ((string=? glyph "dashed")
-                     (make-dashed-bar-line grob extent hair))
-                    ((string=? glyph "kievan")
-                     (make-kievan-bar-line grob))
-                    (else (make-empty-bar-line grob extent)))))
-         stencil))
+         (bar-glyph-list (string->string-list
+                          (strip-string-annotation bar-glyph)))
+         (span-glyph (get-span-glyph bar-glyph))
+         (span-glyph-list (string->string-list span-glyph))
+         (neg-stencil empty-stencil)
+         (stencil empty-stencil)
+         (is-first-neg-stencil #t)
+         (is-first-stencil #t))
+
+    ;; We build up two separate stencils first:
+    ;; (1) the neg-stencil is built from all glyphs that have
+    ;;     a replacement-char in the span bar
+    ;; (2) the main stencil is built from all remaining glyphs
+    ;;
+    ;; Afterwards the neg-stencil is attached left to the
+    ;; stencil; this ensures that the main stencil starts
+    ;; at x = 0.
+    ;;
+    ;; For both routines holds:
+    ;; we stack the stencils obtained by the corresponding
+    ;; single glyphs with spacing 'kern' except for the
+    ;; first stencil
+    ;; (Thanks to Harm who came up with this idea!)
+    (for-each (lambda (bar span)
+                (if (and (string=? span (string replacement-char))
+                         is-first-stencil)
+                    (begin
+                      (set! neg-stencil
+                            (ly:stencil-combine-at-edge
+                             neg-stencil
+                             X
+                             RIGHT
+                             (glyph->stencil bar grob extent)
+                             (if is-first-neg-stencil 0 kern)))
+                      (set! is-first-neg-stencil #f))
+                    (begin
+                      (set! stencil
+                            (ly:stencil-combine-at-edge
+                             stencil
+                             X
+                             RIGHT
+                             (glyph->stencil bar grob extent)
+                             (if is-first-stencil 0 kern)))
+                      (set! is-first-stencil #f))))
+              bar-glyph-list span-glyph-list)
+    ;; if we have a non-empty neg-stencil,
+    ;; we attach it to the left side of the stencil
+    (and (not is-first-neg-stencil)
+         (set! stencil
+               (ly:stencil-combine-at-edge
+                stencil
+                X
+                LEFT
+                neg-stencil
+                kern)))
+    stencil))
 
 (define-public (ly:bar-line::calc-anchor grob)
-  (let* ((line-thickness (layout-line-thickness grob))
-         (kern (* (ly:grob-property grob 'kern 1) line-thickness))
-         (glyph (ly:grob-property grob 'glyph-name ""))
+  "Calculate the anchor position of a bar line. The anchor is used for
+the correct placement of bar numbers etc."
+  (let* ((bar-glyph (ly:grob-property grob 'glyph-name ""))
+         (bar-glyph-list (string->string-list (strip-string-annotation bar-glyph)))
+         (span-glyph (assoc-get bar-glyph span-bar-glyph-alist bar-glyph))
          (x-extent (ly:grob-extent grob grob X))
-         (dot-width (+ (interval-length
-                         (ly:stencil-extent
-                           (ly:font-get-glyph
-                             (ly:grob-default-font grob)
-                             "dots.dot")
-                           X))
-                       kern))
          (anchor 0.0))
 
-        (if (> (interval-length x-extent) 0)
-            (begin
-              (set! anchor (interval-center x-extent))
-              (cond ((string=? glyph "|:")
-                     (set! anchor (+ anchor (/ dot-width -2.0))))
-                    ((string=? glyph ":|")
-                     (set! anchor (+ anchor (/ dot-width 2.0)))))))
-        anchor))
+    (and (> (interval-length x-extent) 0)
+         (if (or (= (length bar-glyph-list) 1)
+                 (string=? bar-glyph span-glyph)
+                 (string=? span-glyph ""))
+             ;; We use the x-extent of the stencil if either
+             ;; - we have a single bar-glyph
+             ;; - bar-glyph and span-glyph are identical
+             ;; - we have no span-glyph
+             (set! anchor (interval-center x-extent))
+             ;; If the conditions above do not hold,the anchor is the
+             ;; center of the corresponding span bar stencil extent
+             (set! anchor (interval-center
+                           (ly:stencil-extent
+                            (span-bar::compound-bar-line grob bar-glyph dummy-extent)
+                            X)))))
+    anchor))
 
 (define-public (bar-line::calc-glyph-name grob)
+  "Determine the @code{glyph-name} of the bar line depending on the
+line break status."
   (let* ((glyph (ly:grob-property grob 'glyph))
          (dir (ly:item-break-dir grob))
          (result (assoc-get glyph bar-glyph-alist))
                          glyph
                          (if (and result
                                   (string? (index-cell result dir)))
-                            (index-cell result dir)
-                            #f))))
-        glyph-name))
+                             (index-cell result dir)
+                             #f))))
+    glyph-name))
 
 (define-public (bar-line::calc-break-visibility grob)
+  "Calculate the visibility of a bar line at line breaks."
   (let* ((glyph (ly:grob-property grob 'glyph))
          (result (assoc-get glyph bar-glyph-alist)))
 
         (vector (string? (car result)) #t (string? (cdr result)))
         all-invisible)))
 
-;; which span bar belongs to a bar line?
-
-(define-public span-bar-glyph-alist
-  '(("|:" . ".|")
-    ("||:" . ".|")
-    (":|" . "|.")
-    (":|.:" . "|.")
-    (":|:" . ".|.")
-    (":|.|:" . "|.|")
-    (":|.|" . "|.")
-    ("S" . "||" )
-    ("S|" . "||")
-    ("|S" . "||")
-    ("S|:" . ".|")
-    (".S|:" . ".|")
-    (":|S" . "|.")
-    (":|S." . "|.")
-    (":|S|:" . "|._.|")
-    (":|S.|:" . "|._.|")
-    ("kievan" . "")
-    ("'" . "")))
-
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; span bar callbacks
 
 (define-public (ly:span-bar::calc-glyph-name grob)
+  "Return the @code{'glyph-name} of the corresponding BarLine grob.
+The corresponding SpanBar glyph is computed within
+@code{span-bar::compound-bar-line}."
   (let* ((elts (ly:grob-object grob 'elements))
          (pos (1- (ly:grob-array-length elts)))
-         (glyph '()))
-
-        (while (and (eq? glyph '())
-                    (> pos -1))
-               (begin (set! glyph (ly:grob-property (ly:grob-array-ref elts pos)
-                                                    'glyph-name))
-                      (set! pos (1- pos))))
-         (if (eq? glyph '())
-             (begin (ly:grob-suicide! grob)
-                    (set! glyph "")))
-        (assoc-get glyph span-bar-glyph-alist glyph)))
+         (glyph-name '()))
+
+    (while (and (eq? glyph-name '())
+                (> pos -1))
+           (begin (set! glyph-name
+                        (ly:grob-property (ly:grob-array-ref elts pos)
+                                          'glyph-name))
+                  (set! pos (1- pos))))
+    (if (eq? glyph-name '())
+        (begin (ly:grob-suicide! grob)
+               (set! glyph-name "")))
+    glyph-name))
 
 (define-public (ly:span-bar::width grob)
+  "Compute the width of the SpanBar stencil."
   (let ((width (cons 0 0)))
 
-       (if (grob::is-live? grob)
-           (let* ((glyph (ly:grob-property grob 'glyph-name))
-                  (stencil (bar-line::compound-bar-line grob glyph (cons -1 1) #f)))
+    (if (grob::is-live? grob)
+        (let* ((glyph-name (ly:grob-property grob 'glyph-name))
+               (stencil (span-bar::compound-bar-line grob
+                                                     glyph-name
+                                                     dummy-extent)))
 
-                 (set! width (ly:stencil-extent stencil X))))
-       width))
+          (set! width (ly:stencil-extent stencil X))))
+    width))
 
 (define-public (ly:span-bar::before-line-breaking grob)
+  "A dummy callback that kills the Grob @var{grob} if it contains
+no elements."
   (let ((elts (ly:grob-object grob 'elements)))
 
-       (if (zero? (ly:grob-array-length elts))
-           (ly:grob-suicide! grob))))
+    (if (zero? (ly:grob-array-length elts))
+        (ly:grob-suicide! grob))))
+
+(define-public (span-bar::compound-bar-line grob bar-glyph extent)
+  "Build the stencil of the span bar."
+  (let* ((line-thickness (layout-line-thickness grob))
+         (kern (* (ly:grob-property grob 'kern 1) line-thickness))
+         (bar-glyph-list (string->string-list
+                          (strip-string-annotation bar-glyph)))
+         (span-glyph (assoc-get bar-glyph span-bar-glyph-alist 'undefined))
+         (stencil empty-stencil))
+
+    (if (string? span-glyph)
+        (let ((span-glyph-list (string->string-list span-glyph))
+              (is-first-stencil #t))
+
+          (for-each (lambda (bar span)
+                      ;; the stencil stack routine is similar to the one
+                      ;; used in bar-line::compound-bar-line, but here,
+                      ;; leading replacement-chars are discarded.
+                      (if (not (and (string=? span (string replacement-char))
+                                    is-first-stencil))
+                          (begin
+                            (set! stencil
+                                  (ly:stencil-combine-at-edge
+                                   stencil
+                                   X
+                                   RIGHT
+                                   ;; if the current glyph is the replacement-char,
+                                   ;; we take the corresponding glyph from the
+                                   ;; bar-glyph-list and insert an empty stencil
+                                   ;; with the appropriate width.
+                                   ;; (this method would fail if the bar-glyph-list
+                                   ;; were shorter than the span-glyph-list,
+                                   ;; but this makes hardly any sense from a
+                                   ;; typographical point of view
+                                   (if (string=? span (string replacement-char))
+                                       ((make-spacer-bar-line bar) grob extent)
+                                       (glyph->stencil span grob extent))
+                                   (if is-first-stencil 0 kern)))
+                            (set! is-first-stencil #f))))
+                    bar-glyph-list span-glyph-list))
+        ;; if span-glyph is not a string, it may be #f or 'undefined;
+        ;; the latter signals that the span bar for the current bar-glyph
+        ;; is undefined, so we raise a warning.
+        (if (eq? span-glyph 'undefined)
+            (ly:warning
+             (_ "No span bar glyph defined for bar glyph '~a'; ignoring.")
+             bar-glyph)))
+    stencil))
 
 ;; The method used in the following routine depends on bar_engraver
 ;; not being removed from staff context.  If bar_engraver is removed,
 ;; the size of the staff lines is evaluated as 0, which results in a
 ;; solid span bar line with faulty y coordinate.
 ;;
-;; This routine was originally by Juergen Reuter, but it was on the
+;; This routine was originally by Juergen Reuter, but it was on the
 ;; bulky side. Rewritten by Han-Wen. Ported from c++ to Scheme by Marc Hohl.
 (define-public (ly:span-bar::print grob)
+  "The print routine for span bars."
   (let* ((elts-array (ly:grob-object grob 'elements))
          (refp (ly:grob-common-refpoint-of-array grob elts-array Y))
          (elts (reverse (sort (ly:grob-array->list elts-array)
          ;; Elements must be ordered according to their y coordinates
          ;; relative to their common axis group parent.
          ;; Otherwise, the computation goes mad.
-         (glyph (ly:grob-property grob 'glyph-name))
+         (bar-glyph (ly:grob-property grob 'glyph-name))
          (span-bar empty-stencil))
 
-        (if (string? glyph)
-            (let* ((extents '())
-                   (make-span-bars '())
-                   (model-bar #f))
-
-                  ;; we compute the extents of each system and store them
-                  ;; in a list; dito for the 'allow-span-bar property.
-                  ;; model-bar takes the bar grob, if given.
-                  (map (lambda (bar)
-                       (let* ((ext (bar-line::bar-y-extent bar refp))
-                              (staff-symbol (ly:grob-object bar 'staff-symbol)))
-
-                             (if (ly:grob? staff-symbol)
-                                 (let ((refp-extent (ly:grob-extent staff-symbol refp Y)))
-
-                                      (set! ext (interval-union ext refp-extent))
-
-                                      (if (> (interval-length ext) 0)
-                                          (begin
-                                            (set! extents (append extents (list ext)))
-                                            (set! model-bar bar)
-                                            (set! make-span-bars
-                                              (append make-span-bars
-                                                      (list (ly:grob-property bar 'allow-span-bar #t))))))))))
-                       elts)
-                  ;; if there is no bar grob, we use the callback argument
-                  (if (not model-bar)
-                      (set! model-bar grob))
-                  ;; we discard the first entry in make-span-bars, because its corresponding
-                  ;; bar line is the uppermost and therefore not connected to another bar line
-                  (if (pair? make-span-bars)
-                      (set! make-span-bars (cdr make-span-bars)))
-                  ;; the span bar reaches from the lower end of the upper staff
-                  ;; to the upper end of the lower staff - when allow-span-bar is #t
-                  (reduce (lambda (curr prev)
-                                  (let ((l (cons 0 0))
-                                        (allow-span-bar (car make-span-bars)))
-
-                                       (set! make-span-bars (cdr make-span-bars))
-                                       (if (> (interval-length prev) 0)
-                                           (begin
-                                             (set! l (cons (cdr prev) (car curr)))
-                                             (if (or (zero? (interval-length l))
-                                                     (not allow-span-bar))
-                                                 (begin
-                                                   ;; there is overlap between the bar lines
-                                                   ;; or 'allow-span-bar = #f.
-                                                   ;; Do nothing.
-                                                 )
-                                                 (set! span-bar
-                                                       (ly:stencil-add span-bar
-                                                                       (bar-line::compound-bar-line
-                                                                         model-bar
-                                                                         glyph
-                                                                         l
-                                                                         #f))))))
-                                       curr))
-                          "" extents)
-                  (set! span-bar (ly:stencil-translate-axis
-                                   span-bar
-                                   (- (ly:grob-relative-coordinate grob refp Y))
-                                   Y))))
-        span-bar))
+    (if (string? bar-glyph)
+        (let ((extents '())
+              (make-span-bars '())
+              (model-bar #f))
+
+          ;; we compute the extents of each system and store them
+          ;; in a list; dito for the 'allow-span-bar property.
+          ;; model-bar takes the bar grob, if given.
+          (for-each (lambda (bar)
+                      (let ((ext (bar-line::bar-y-extent bar refp))
+                            (staff-symbol (ly:grob-object bar 'staff-symbol)))
+
+                        (if (ly:grob? staff-symbol)
+                            (let ((refp-extent (ly:grob-extent staff-symbol refp Y)))
+
+                              (set! ext (interval-union ext refp-extent))
+
+                              (if (> (interval-length ext) 0)
+                                  (begin
+                                    (set! extents (append extents (list ext)))
+                                    (set! model-bar bar)
+                                    (set! make-span-bars
+                                          (append make-span-bars
+                                                  (list (ly:grob-property
+                                                         bar
+                                                         'allow-span-bar
+                                                         #t))))))))))
+                    elts)
+          ;; if there is no bar grob, we use the callback argument
+          (if (not model-bar)
+              (set! model-bar grob))
+          ;; we discard the first entry in make-span-bars,
+          ;; because its corresponding bar line is the
+          ;; uppermost and therefore not connected to
+          ;; another bar line
+          (if (pair? make-span-bars)
+              (set! make-span-bars (cdr make-span-bars)))
+          ;; the span bar reaches from the lower end of the upper staff
+          ;; to the upper end of the lower staff - when allow-span-bar is #t
+          (reduce (lambda (curr prev)
+                    (let ((span-extent (cons 0 0))
+                          (allow-span-bar (car make-span-bars)))
+
+                      (set! make-span-bars (cdr make-span-bars))
+                      (if (> (interval-length prev) 0)
+                          (begin
+                            (set! span-extent (cons (cdr prev)
+                                                    (car curr)))
+                            ;; draw the span bar only when the staff lines
+                            ;; don't overlap and allow-span-bar is #t:
+                            (and (> (interval-length span-extent) 0)
+                                 allow-span-bar
+                                 (set! span-bar
+                                       (ly:stencil-add
+                                        span-bar
+                                        (span-bar::compound-bar-line
+                                         model-bar
+                                         bar-glyph
+                                         span-extent))))))
+                      curr))
+                  "" extents)
+          (set! span-bar (ly:stencil-translate-axis
+                          span-bar
+                          (- (ly:grob-relative-coordinate grob refp Y))
+                          Y))))
+    span-bar))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; volta bracket functions
+
+(define-public (allow-volta-hook bar-glyph)
+  "Allow the volta bracket hook being drawn over bar line @var{bar-glyph}."
+  (if (string? bar-glyph)
+      (set! volta-bracket-allow-volta-hook-list
+            (append volta-bracket-allow-volta-hook-list
+                    (list bar-glyph)))
+      (ly:warning (_ ("Volta hook bar line must be a string; ignoring '~a'.")
+                     bar-glyph))))
+
+(define-session volta-bracket-allow-volta-hook-list '())
+
+(define-public (volta-bracket::calc-hook-visibility bar-glyph)
+  "Determine the visibility of the volta bracket hook. It is called in
+@code{lily/volta-bracket.cc} and returns @code{#t} if @emph{no} hook
+should be drawn."
+  (not (member bar-glyph volta-bracket-allow-volta-hook-list)))
+
+(define-public (ly:volta-bracket::calc-shorten-pair grob)
+  "Calculate the @code{shorten-pair} values for an ideal placement
+of the volta brackets relative to the bar lines."
+  (let* ((line-thickness (layout-line-thickness grob))
+         (volta-half-line-thickness (* (ly:grob-property grob 'thickness 1.6)
+                                       line-thickness
+                                       1/2))
+         (bar-array (ly:grob-object grob 'bars))
+         ;; the bar-array starts with the uppermost bar line grob that is
+         ;; covered by the left edge of the volta bracket; more (span)
+         ;; bar line grobs from other staves may follow
+         (left-bar-line (and (ly:grob-array? bar-array)
+                             (positive? (ly:grob-array-length bar-array))
+                             (ly:grob-array-ref bar-array 0)))
+         ;; we need the vertical-axis-group-index of the left-bar-line
+         ;; to find the corresponding right-bar-line
+         (vag-index (and left-bar-line
+                         (ly:grob-get-vertical-axis-group-index left-bar-line)))
+         ;; the bar line corresponding to the right edge of the volta bracket
+         ;; is the last entry with the same vag-index, so we transform the array to a list,
+         ;; reverse it and search for the first suitable entry from
+         ;; the back
+         (right-bar-line (and left-bar-line
+                              (find (lambda (e)
+                                      (eqv? (ly:grob-get-vertical-axis-group-index e)
+                                            vag-index))
+                                    (reverse (ly:grob-array->list bar-array)))))
+         ;; the left-bar-line may be a #'<Grob Item >,
+         ;; so we add "" as a fallback return value
+         (left-bar-glyph-name (if left-bar-line
+                                  (ly:grob-property left-bar-line 'glyph-name "")
+                                  (string annotation-char)))
+         (right-bar-glyph-name (if right-bar-line
+                                   (ly:grob-property right-bar-line 'glyph-name "")
+                                   (string annotation-char)))
+         ;; This is the original logic.  It flags left-bar-broken if
+         ;; there is no left-bar-line.  That seems strange.
+         (left-bar-broken (not (and left-bar-line
+                                    (zero? (ly:item-break-dir left-bar-line)))))
+         (right-bar-broken (not (and right-bar-line
+                                     (zero? (ly:item-break-dir
+                                             right-bar-line)))))
+         ;; Revert to current grob for getting layout info if no
+         ;; left-bar-line available
+         (left-span-stencil-extent (ly:stencil-extent
+                                    (span-bar::compound-bar-line
+                                     (or left-bar-line grob)
+                                     left-bar-glyph-name
+                                     dummy-extent)
+                                    X))
+         (right-span-stencil-extent (ly:stencil-extent
+                                     (span-bar::compound-bar-line
+                                      (or right-bar-line grob)
+                                      right-bar-glyph-name
+                                      dummy-extent)
+                                     X))
+         (left-shorten 0.0)
+         (right-shorten 0.0))
+
+    ;; since "empty" intervals may look like (1.0 . -1.0), we use the
+    ;; min/max functions to make sure that the placement is not corrupted
+    ;; in case of empty bar lines
+    (set! left-shorten
+          (if left-bar-broken
+              (- (max 0 (interval-end left-span-stencil-extent))
+                 (max 0 (interval-end (ly:stencil-extent
+                                       (bar-line::compound-bar-line
+                                        (or left-bar-line grob)
+                                        left-bar-glyph-name
+                                        dummy-extent)
+                                       X)))
+                 volta-half-line-thickness)
+              (- (max 0 (interval-end left-span-stencil-extent))
+                 volta-half-line-thickness)))
+
+    (set! right-shorten
+          (if right-bar-broken
+              (+ (- (max 0 (interval-end right-span-stencil-extent)))
+                 volta-half-line-thickness)
+              (- (min 0 (interval-start right-span-stencil-extent))
+                 volta-half-line-thickness)))
+
+    (cons left-shorten right-shorten)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; predefined bar glyph print procedures
+
+(add-bar-glyph-print-procedure "" make-empty-bar-line)
+(add-bar-glyph-print-procedure "|" make-simple-bar-line)
+(add-bar-glyph-print-procedure "." make-thick-bar-line)
+(add-bar-glyph-print-procedure "!" make-dashed-bar-line)
+(add-bar-glyph-print-procedure "'" make-tick-bar-line)
+(add-bar-glyph-print-procedure ":" make-colon-bar-line)
+(add-bar-glyph-print-procedure ";" make-dotted-bar-line)
+(add-bar-glyph-print-procedure "k" make-kievan-bar-line)
+(add-bar-glyph-print-procedure "S" (make-segno-bar-line #t))
+(add-bar-glyph-print-procedure "=" (make-segno-bar-line #f))
+(add-bar-glyph-print-procedure "[" (make-bracket-bar-line LEFT))
+(add-bar-glyph-print-procedure "]" (make-bracket-bar-line RIGHT))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; predefined bar lines
+;;
+;; definition of bar lines goes as follows:
+;;
+;; (define-bar-line "normal bar[-annotation]" "end of line" "start of line" "span bar")
+;;
+;; each entry has to be a string or #f.
+;; The empty string "" is allowed and yields in an invisible bar line,
+;; whereas #f reads 'no stencil'.
+;;
+;; Convention: if two bar lines would be identical in their
+;; unbroken bar glyph, we use annotations to make them distinct;
+;; as a general rule of thumb the main difference in their
+;; behavior at the end of a line is used as annotation, cf.
+;;
+;; (define-bar-line ".|:" "|" ".|:" ".|")
+;; (define-bar-line ".|:-||" "||" ".|:" ".|")
+;;
+;; or
+;;
+;; (define-bar-line "S-|" "|" "S" "=")
+;; (define-bar-line "S-S" "S" "" "=")
+
+;; common bar lines
+(define-bar-line "" "" "" #f)
+(define-bar-line "-" #f #f #f)
+(define-bar-line "|" "|" #f "|")
+(define-bar-line "|-s" #f "|" "|")
+(define-bar-line "." "." #f ".")
+(define-bar-line ".|" "|" ".|" ".|")
+(define-bar-line "|." "|." #f "|.")
+(define-bar-line "||" "||" #f "||")
+(define-bar-line ".." ".." #f "..")
+(define-bar-line "|.|" "|.|" #f "|.|")
+(define-bar-line "!" "!" #f "!")
+(define-bar-line ";" ";" #f ";")
+(define-bar-line "'" "'" #f #f)
+
+;; repeats
+(define-bar-line ":|.:" ":|." ".|:"  " |.")
+(define-bar-line ":..:" ":|." ".|:" " ..")
+(define-bar-line ":|.|:" ":|." ".|:" " |.|")
+(define-bar-line ":.|.:" ":|." ".|:" " .|.")
+(define-bar-line ":|." ":|." #f " |.")
+(define-bar-line ".|:" "|" ".|:" ".|")
+(define-bar-line "[|:" "|" "[|:" " |")
+(define-bar-line ":|]" ":|]" #f " |")
+(define-bar-line ":|][|:" ":|]" "[|:" " |  |")
+(define-bar-line ".|:-||" "||" ".|:" ".|")
+
+;; segno bar lines
+(define-bar-line "S" "||" "S" "=")
+(define-bar-line "S-|" "|" "S" "=")
+(define-bar-line "S-S" "S" #f "=")
+(define-bar-line ":|.S" ":|." "S" " |.")
+(define-bar-line ":|.S-S" ":|.S" "" " |.")
+(define-bar-line "S.|:" "|" "S.|:" " .|")
+(define-bar-line "S.|:-S" "S" ".|:" " .|")
+(define-bar-line ":|.S.|:" ":|." "S.|:" " |. .|")
+(define-bar-line ":|.S.|:-S" ":|.S" ".|:" " |. .|")
+
+;; ancient bar lines
+(define-bar-line "k" "k" #f #f) ;; kievan style
+
+;; volta hook settings
+(allow-volta-hook ":|.")
+(allow-volta-hook ".|:")
+(allow-volta-hook "|.")
+(allow-volta-hook ":..:")
+(allow-volta-hook ":|.|:")
+(allow-volta-hook ":|.:")
+(allow-volta-hook ".|")
+(allow-volta-hook ":|.S")
+(allow-volta-hook ":|.S-S")
+(allow-volta-hook ":|.S.|:")
+(allow-volta-hook ":|.S.|:-S")
+(allow-volta-hook ":|]")
+(allow-volta-hook ":|][|:")
index 04859d03bb265b144e0e159c46dfedb6560bc507..defefc7bc445375ff9142203a1f7c4a67fdee69f 100644 (file)
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
 (define (make-coord x-value y-value)
- "Make a coordinate pair from @var{x-valye} and @var{y-value}."
- (cons x-value y-value))
 "Make a coordinate pair from @var{x-valye} and @var{y-value}."
 (cons x-value y-value))
 
 (define (coord+ coord1 coord2)
- "Add @var{coord1} to @var{coord2}, returning a coordinate."
- (cons (+ (car coord1) (car coord2))
-       (+ (cdr coord1) (cdr coord2))))
 "Add @var{coord1} to @var{coord2}, returning a coordinate."
 (cons (+ (car coord1) (car coord2))
+        (+ (cdr coord1) (cdr coord2))))
 
 (define (coord- coord1 coord2)
- "Subtract @var{coord2} from @var{coord1}."
- (cons (- (car coord1) (car coord2))
-       (- (cdr coord1) (cdr coord2))))
 "Subtract @var{coord2} from @var{coord1}."
 (cons (- (car coord1) (car coord2))
+        (- (cdr coord1) (cdr coord2))))
 
 (define (coord* scalar coord)
- "Multiply each component of @var{coord} by @var{scalar}."
- (cons (* (car coord) scalar)
-       (* (cdr coord) scalar)))
 "Multiply each component of @var{coord} by @var{scalar}."
 (cons (* (car coord) scalar)
+        (* (cdr coord) scalar)))
 
 (define (make-bezier point-0 point-1 point-2 point-3)
- "Create a cubic bezier from the four control points."
- (list point-0 point-1 point-2 point-3))
 "Create a cubic bezier from the four control points."
 (list point-0 point-1 point-2 point-3))
 
 (define (interpolated-control-points control-points split-value)
- "Interpolate @var{control-points} at @var{split-value}.  Return a
 "Interpolate @var{control-points} at @var{split-value}.  Return a
 set of control points that is one degree less than @var{control-points}."
   (if (null? (cdr control-points))
       '()
       (let ((first (car control-points))
             (second (cadr control-points)))
-       (cons* (coord+ first (coord* split-value (coord- second first)))
-             (interpolated-control-points
-              (cdr control-points)
-              split-value)))))
+        (cons* (coord+ first (coord* split-value (coord- second first)))
+               (interpolated-control-points
+                (cdr control-points)
+                split-value)))))
 
 (define (split-bezier bezier split-value)
- "Split a cubic bezier defined by @var{bezier} at the value
 "Split a cubic bezier defined by @var{bezier} at the value
 @var{split-value}.  @var{bezier} is a list of pairs; each pair is
 is the coordinates of a control point.  Returns a list of beziers.
 The first element is the LHS spline; the second
 element is the RHS spline."
-   (let* ((quad-points (interpolated-control-points
+  (let* ((quad-points (interpolated-control-points
                        bezier
                        split-value))
-          (lin-points (interpolated-control-points
-                       quad-points
+         (lin-points (interpolated-control-points
+                      quad-points
+                      split-value))
+         (const-point (interpolated-control-points
+                       lin-points
                        split-value))
-          (const-point (interpolated-control-points
-                        lin-points
-                        split-value))
-          (left-side (list (car bezier)
-                           (car quad-points)
-                           (car lin-points)
-                           (car const-point)))
-          (right-side (list (car const-point)
-                            (list-ref lin-points 1)
-                            (list-ref quad-points 2)
-                            (list-ref bezier 3))))
-   (cons left-side right-side)))
+         (left-side (list (car bezier)
+                          (car quad-points)
+                          (car lin-points)
+                          (car const-point)))
+         (right-side (list (car const-point)
+                           (list-ref lin-points 1)
+                           (list-ref quad-points 2)
+                           (list-ref bezier 3))))
+    (cons left-side right-side)))
 
 (define (multi-split-bezier bezier start-t split-list)
- "Split @var{bezier} at all the points listed in @var{split-list}.
 "Split @var{bezier} at all the points listed in @var{split-list}.
 @var{bezier} has a parameter value that goes from @var{start-t} to 1.
 Returns a list of @var{(1+ (length split-list))} beziers."
   (let* ((bezier-split (split-bezier bezier
@@ -93,13 +93,13 @@ Returns a list of @var{(1+ (length split-list))} beziers."
 
 
 (define (bezier-sandwich-list top-bezier bottom-bezier)
- "create the list of control points for a bezier sandwich consisting
 "create the list of control points for a bezier sandwich consisting
 of @var{top-bezier} and @var{bottom-bezier}."
- (list (list-ref bottom-bezier 1)
-       (list-ref bottom-bezier 2)
-       (list-ref bottom-bezier 3)
-       (list-ref bottom-bezier 0)
-       (list-ref top-bezier 2)
-       (list-ref top-bezier 1)
-       (list-ref top-bezier 0)
-       (list-ref top-bezier 3)))
 (list (list-ref bottom-bezier 1)
+        (list-ref bottom-bezier 2)
+        (list-ref bottom-bezier 3)
+        (list-ref bottom-bezier 0)
+        (list-ref top-bezier 2)
+        (list-ref top-bezier 1)
+        (list-ref top-bezier 0)
+        (list-ref top-bezier 3)))
index ded5e9b1209bc0c0be4627db018962d7196eb0f1..a131e7f3428d95870bcc3ec05b1643fe7d899552 100644 (file)
   (and (pair? x)
        (number? (car x)) (number? (cdr x))))
 
+(define-public (number-pair-list? x)
+  (and (list? x)
+       (every number-pair? x)))
+
 (define-public (fraction? x)
   (and (pair? x)
        (index? (car x)) (index? (cdr x))))
 (define-public (boolean-or-symbol? x)
   (or (boolean? x) (symbol? x)))
 
+(define-public (symbol-list? x)
+  (and (list? x) (every symbol? x)))
+
+(define-public (symbol-list-or-music? x)
+  (if (list? x)
+      (every symbol? x)
+      (ly:music? x)))
+
 (define-public (string-or-symbol? x)
   (or (string? x) (symbol? x)))
 
 (define-public (number-or-string? x)
   (or (number? x) (string? x)))
 
+(define-public (number-or-markup? x)
+  (or (number? x) (markup? x)))
+
 (define-public (string-or-pair? x)
   (or (string? x) (pair? x)))
 
+(define-public (string-or-music? x)
+  (or (string? x) (ly:music? x)))
+
 (define-public (number-or-pair? x)
   (or (number? x) (pair? x)))
 
 (define-public (cheap-list? x)
   (or (pair? x) (null? x)))
 
-(define-public (list-or-symbol? x)
-  (or (cheap-list? x) (symbol? x)))
+(define-public (symbol-list-or-symbol? x)
+  (if (list? x)
+      (every symbol? x)
+      (symbol? x)))
 
 (define-public (scheme? x) #t)
 
   (if (null? alist)
       "Unknown type"
       (if (apply (caar alist) obj)
-         (cdar alist)
-         (match-predicate obj (cdr alist)))))
+          (cdar alist)
+          (match-predicate obj (cdr alist)))))
 
 (define-public (object-type obj)
   (match-predicate obj type-p-name-alist))
index d8587dcf839cefc843f734c9abf97ed6af6b993c..009887bf678dbb35bfedab1f6cd351fc5c550905 100644 (file)
@@ -15,7 +15,7 @@
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-; for define-safe-public when byte-compiling using Guile V2
+;; for define-safe-public when byte-compiling using Guile V2
 (use-modules (scm safe-utility-defs))
 
 (define-public (construct-chord-elements root duration modifications)
@@ -26,63 +26,63 @@ Notes: Natural 11 is left from chord if not explicitly specified.
 
 Entry point for the parser."
   (let* ((flat-mods (flatten-list modifications))
-        (base-chord (stack-thirds (ly:make-pitch 0 4 0) the-canonical-chord))
-        (complete-chord '())
-        (bass #f)
-        (inversion #f)
-        (lead-mod #f)
-        (explicit-11 #f)
-        (start-additions #t))
+         (base-chord (stack-thirds (ly:make-pitch 0 4 0) the-canonical-chord))
+         (complete-chord '())
+         (bass #f)
+         (inversion #f)
+         (lead-mod #f)
+         (explicit-11 #f)
+         (start-additions #t))
 
     (define (interpret-inversion chord mods)
       "Read /FOO part.  Side effect: INVERSION is set."
       (if (and (> (length mods) 1) (eq? (car mods) 'chord-slash))
-         (begin
-           (set! inversion (cadr mods))
-           (set! mods (cddr mods))))
+          (begin
+            (set! inversion (cadr mods))
+            (set! mods (cddr mods))))
       (interpret-bass chord mods))
 
     (define (interpret-bass chord mods)
       "Read /+FOO part.  Side effect: BASS is set."
       (if (and (> (length mods) 1) (eq? (car mods) 'chord-bass))
-         (begin
-           (set! bass (cadr mods))
-           (set! mods (cddr mods))))
+          (begin
+            (set! bass (cadr mods))
+            (set! mods (cddr mods))))
       (if (pair? mods)
-         (ly:warning (_ "Spurious garbage following chord: ~A") mods))
+          (ly:warning (_ "Spurious garbage following chord: ~A") mods))
       chord)
 
-    (define (interpret-removals         chord mods)
+    (define (interpret-removals  chord mods)
       (define (inner-interpret chord mods)
-       (if (and (pair? mods) (ly:pitch? (car mods)))
-           (inner-interpret (remove-step (+ 1  (ly:pitch-steps (car mods))) chord)
-                            (cdr mods))
-           (interpret-inversion chord mods)))
+        (if (and (pair? mods) (ly:pitch? (car mods)))
+            (inner-interpret (remove-step (+ 1  (ly:pitch-steps (car mods))) chord)
+                             (cdr mods))
+            (interpret-inversion chord mods)))
       (if (and (pair? mods) (eq? (car mods) 'chord-caret))
-         (inner-interpret chord (cdr mods))
-         (interpret-inversion chord mods)))
+          (inner-interpret chord (cdr mods))
+          (interpret-inversion chord mods)))
 
     (define (interpret-additions chord mods)
       "Interpret additions.  TODO: should restrict modifier use?"
       (cond ((null? mods) chord)
-           ((ly:pitch? (car mods))
-            (if (= (pitch-step (car mods)) 11)
-                (set! explicit-11 #t))
-            (interpret-additions (cons (car mods) (remove-step (pitch-step (car mods)) chord))
-                                 (cdr mods)))
-           ((procedure? (car mods))
-            (interpret-additions ((car mods) chord)
-                                 (cdr mods)))
-           (else (interpret-removals chord mods))))
+            ((ly:pitch? (car mods))
+             (if (= (pitch-step (car mods)) 11)
+                 (set! explicit-11 #t))
+             (interpret-additions (cons (car mods) (remove-step (pitch-step (car mods)) chord))
+                                  (cdr mods)))
+            ((procedure? (car mods))
+             (interpret-additions ((car mods) chord)
+                                  (cdr mods)))
+            (else (interpret-removals chord mods))))
 
     (define (pitch-octavated-strictly-below p root)
-      "return P, but octavated, so it is below ROOT"
+      "return P, but octavated, so it is below ROOT"
       (ly:make-pitch (+ (ly:pitch-octave root)
-                       (if (> (ly:pitch-notename root)
-                              (ly:pitch-notename p))
-                           0 -1))
-                    (ly:pitch-notename p)
-                    (ly:pitch-alteration p)))
+                        (if (> (ly:pitch-notename root)
+                               (ly:pitch-notename p))
+                            0 -1))
+                     (ly:pitch-notename p)
+                     (ly:pitch-alteration p)))
 
     (define (process-inversion complete-chord)
       "Take out inversion from COMPLETE-CHORD, and put it at the bottom.
@@ -94,82 +94,82 @@ the bass specified.
 
 "
       (let* ((root (car complete-chord))
-            (inv? (lambda (y)
-                    (and (= (ly:pitch-notename y)
-                            (ly:pitch-notename inversion))
-                         (= (ly:pitch-alteration y)
-                            (ly:pitch-alteration inversion)))))
-            (rest-of-chord (remove inv? complete-chord))
-            (inversion-candidates (filter inv? complete-chord))
-            (down-inversion (pitch-octavated-strictly-below inversion root)))
-       (if (pair? inversion-candidates)
-           (set! inversion (car inversion-candidates))
-           (begin
-             (set! bass inversion)
-             (set! inversion #f)))
-       (if inversion
-           (cons down-inversion rest-of-chord)
-           rest-of-chord)))
+             (inv? (lambda (y)
+                     (and (= (ly:pitch-notename y)
+                             (ly:pitch-notename inversion))
+                          (= (ly:pitch-alteration y)
+                             (ly:pitch-alteration inversion)))))
+             (rest-of-chord (remove inv? complete-chord))
+             (inversion-candidates (filter inv? complete-chord))
+             (down-inversion (pitch-octavated-strictly-below inversion root)))
+        (if (pair? inversion-candidates)
+            (set! inversion (car inversion-candidates))
+            (begin
+              (set! bass inversion)
+              (set! inversion #f)))
+        (if inversion
+            (cons down-inversion rest-of-chord)
+            rest-of-chord)))
     ;; root is always one octave too low.
     ;; something weird happens when this is removed,
     ;; every other chord is octavated. --hwn... hmmm.
     (set! root (ly:pitch-transpose root (ly:make-pitch 1 0 0)))
     ;; skip the leading : , we need some of the stuff following it.
     (if (pair? flat-mods)
-       (if (eq? (car flat-mods) 'chord-colon)
-           (set! flat-mods (cdr flat-mods))
-           (set! start-additions #f)))
+        (if (eq? (car flat-mods) 'chord-colon)
+            (set! flat-mods (cdr flat-mods))
+            (set! start-additions #f)))
     ;; remember modifier
     (if (and (pair? flat-mods) (procedure? (car flat-mods)))
-       (begin
-         (set! lead-mod (car flat-mods))
-         (set! flat-mods (cdr flat-mods))))
+        (begin
+          (set! lead-mod (car flat-mods))
+          (set! flat-mods (cdr flat-mods))))
     ;; extract first number if present, and build pitch list.
     (if (and (pair? flat-mods)
-            (ly:pitch?  (car flat-mods))
-            (not (eq? lead-mod sus-modifier)))
-       (begin
-         (if (= (pitch-step (car flat-mods)) 11)
-             (set! explicit-11 #t))
-         (set! base-chord
-               (stack-thirds (car flat-mods) the-canonical-chord))
-         (set! flat-mods (cdr flat-mods))))
+             (ly:pitch?  (car flat-mods))
+             (not (eq? lead-mod sus-modifier)))
+        (begin
+          (if (= (pitch-step (car flat-mods)) 11)
+              (set! explicit-11 #t))
+          (set! base-chord
+                (stack-thirds (car flat-mods) the-canonical-chord))
+          (set! flat-mods (cdr flat-mods))))
     ;; apply modifier
     (if (procedure? lead-mod)
-       (set! base-chord (lead-mod base-chord)))
+        (set! base-chord (lead-mod base-chord)))
     (set! complete-chord
-         (if start-additions
-             (interpret-additions base-chord flat-mods)
-             (interpret-removals base-chord flat-mods)))
+          (if start-additions
+              (interpret-additions base-chord flat-mods)
+              (interpret-removals base-chord flat-mods)))
     (set! complete-chord (sort complete-chord ly:pitch<?))
     ;; If natural 11 + natural 3 is present, but not given explicitly,
     ;; we remove the 11.
     (if (and (not explicit-11)
-            (get-step 11 complete-chord)
-            (get-step 3 complete-chord)
-            (= 0 (ly:pitch-alteration (get-step 11 complete-chord)))
-            (= 0 (ly:pitch-alteration (get-step 3 complete-chord))))
-       (set! complete-chord (remove-step 11 complete-chord)))
+             (get-step 11 complete-chord)
+             (get-step 3 complete-chord)
+             (= 0 (ly:pitch-alteration (get-step 11 complete-chord)))
+             (= 0 (ly:pitch-alteration (get-step 3 complete-chord))))
+        (set! complete-chord (remove-step 11 complete-chord)))
     ;; must do before processing inversion/bass, since they are
     ;; not relative to the root.
     (set! complete-chord (map (lambda (x) (ly:pitch-transpose x root))
-                             complete-chord))
+                              complete-chord))
     (if inversion
-       (set! complete-chord (process-inversion complete-chord)))
+        (set! complete-chord (process-inversion complete-chord)))
     (if bass
-       (set! bass (pitch-octavated-strictly-below bass root)))
+        (set! bass (pitch-octavated-strictly-below bass root)))
     (if #f
-       (begin
-         (write-me "\n*******\n" flat-mods)
-         (write-me "root: " root)
-         (write-me "base chord: " base-chord)
-         (write-me "complete chord: " complete-chord)
-         (write-me "inversion: " inversion)
-         (write-me "bass: " bass)))
+        (begin
+          (write-me "\n*******\n" flat-mods)
+          (write-me "root: " root)
+          (write-me "base chord: " base-chord)
+          (write-me "complete chord: " complete-chord)
+          (write-me "inversion: " inversion)
+          (write-me "bass: " bass)))
     (if inversion
-       (make-chord-elements (cdr complete-chord) bass duration (car complete-chord)
-                   inversion)
-       (make-chord-elements complete-chord bass duration #f #f))))
+        (make-chord-elements (cdr complete-chord) bass duration (car complete-chord)
+                             inversion)
+        (make-chord-elements complete-chord bass duration #f #f))))
 
 
 (define (make-chord-elements pitches bass duration inversion original-inv-pitch)
@@ -180,23 +180,23 @@ DURATION, and INVERSION."
                 'duration duration
                 'pitch pitch))
   (let ((nots (map make-note-ev pitches))
-       (bass-note (if bass (make-note-ev bass) #f))
-       (inv-note (if inversion (make-note-ev inversion) #f)))
+        (bass-note (if bass (make-note-ev bass) #f))
+        (inv-note (if inversion (make-note-ev inversion) #f)))
     (if bass-note
-       (begin
-         (set! (ly:music-property bass-note 'bass) #t)
-         (set! nots (cons bass-note nots))))
+        (begin
+          (set! (ly:music-property bass-note 'bass) #t)
+          (set! nots (cons bass-note nots))))
     (if inv-note
-       (begin
-         (set! (ly:music-property inv-note 'inversion) #t)
-         (set! (ly:music-property inv-note 'octavation)
-               (- (ly:pitch-octave inversion)
-                  (ly:pitch-octave original-inv-pitch)))
-         (set! nots (cons inv-note nots))))
+        (begin
+          (set! (ly:music-property inv-note 'inversion) #t)
+          (set! (ly:music-property inv-note 'octavation)
+                (- (ly:pitch-octave inversion)
+                   (ly:pitch-octave original-inv-pitch)))
+          (set! nots (cons inv-note nots))))
     nots))
 
 ;;;;;;;;;;;;;;;;
-; chord modifiers change the pitch list.
+;; chord modifiers change the pitch list.
 
 (define (aug-modifier pitches)
   (set! pitches (replace-step (ly:make-pitch 0 4 SHARP) pitches))
@@ -229,20 +229,20 @@ DURATION, and INVERSION."
 ;; canonical 13 chord.
 (define the-canonical-chord
   (map (lambda (n)
-        (define (nca x)
-          (if (= x 7) FLAT 0))
-        
-        (if (>= n 8)
-            (ly:make-pitch 1 (- n 8) (nca n))
-            (ly:make-pitch 0 (- n 1) (nca n))))
+         (define (nca x)
+           (if (= x 7) FLAT 0))
+
+         (if (>= n 8)
+             (ly:make-pitch 1 (- n 8) (nca n))
+             (ly:make-pitch 0 (- n 1) (nca n))))
        '(1 3 5 7 9 11 13)))
 
 (define (stack-thirds upper-step base)
   "Stack thirds listed in BASE until we reach UPPER-STEP.  Add
 UPPER-STEP separately."
   (cond ((null? base) '())
-       ((> (ly:pitch-steps upper-step) (ly:pitch-steps (car base)))
-        (cons (car base) (stack-thirds upper-step (cdr base))))
-       ((<= (ly:pitch-steps upper-step) (ly:pitch-steps (car base)))
-        (list upper-step))
-       (else '())))
+        ((> (ly:pitch-steps upper-step) (ly:pitch-steps (car base)))
+         (cons (car base) (stack-thirds upper-step (cdr base))))
+        ((<= (ly:pitch-steps upper-step) (ly:pitch-steps (car base)))
+         (list upper-step))
+        (else '())))
index abc39e3518dd44332b53707b1ca6a5bc8f775067..f7ba6b4edf220fb931428d0c967a7493ffd3c178 100644 (file)
@@ -23,7 +23,7 @@
 
 
 (define (default-note-namer pitch)
- (note-name->markup pitch #f))
 (note-name->markup pitch #f))
 
 (define (markup-or-empty-markup markup)
   "Return MARKUP if markup, else empty-markup"
@@ -34,7 +34,7 @@
   (if bool
       (make-line-markup
        (list (make-hspace-markup amount)
-            markup))
+             markup))
       markup))
 
 (define-public (banter-chord-names pitches bass inversion context)
@@ -46,7 +46,7 @@
    'jazz pitches bass inversion context '()))
 
 (define-public (ugh-compat-double-plus-new-chord->markup
-               style pitches bass inversion context options)
+                style pitches bass inversion context options)
   "Entry point for @code{New_chord_name_engraver}.
 
 FIXME: func, options/context have changed
@@ -57,35 +57,35 @@ See @file{double-plus-new-chord-name.scm} for the signature of @var{style}.
 
   (define (step-nr pitch)
     (let* ((pitch-nr (+ (* 7 (ly:pitch-octave pitch))
-                       (ly:pitch-notename pitch)))
-          (root-nr (+ (* 7 (ly:pitch-octave (car pitches)))
-                       (ly:pitch-notename (car pitches)))))
+                        (ly:pitch-notename pitch)))
+           (root-nr (+ (* 7 (ly:pitch-octave (car pitches)))
+                       (ly:pitch-notename (car pitches)))))
       (+ 1 (- pitch-nr root-nr))))
 
   (define (next-third pitch)
     (ly:pitch-transpose pitch
-                       (ly:make-pitch 0 2 (if (or (= (step-nr pitch) 3)
-                                                  (= (step-nr pitch) 5))
-                                              FLAT 0))))
+                        (ly:make-pitch 0 2 (if (or (= (step-nr pitch) 3)
+                                                   (= (step-nr pitch) 5))
+                                               FLAT 0))))
 
   (define (step-alteration pitch)
     (let* ((diff (ly:pitch-diff (ly:make-pitch 0 0 0) (car pitches)))
-          (normalized-pitch (ly:pitch-transpose pitch diff))
-          (alteration (ly:pitch-alteration normalized-pitch)))
+           (normalized-pitch (ly:pitch-transpose pitch diff))
+           (alteration (ly:pitch-alteration normalized-pitch)))
       (if (= (step-nr pitch) 7) (+ alteration SEMI-TONE) alteration)))
 
   (define (pitch-unalter pitch)
     (let ((alteration (step-alteration pitch)))
       (if (= alteration 0)
-         pitch
-         (ly:make-pitch (ly:pitch-octave pitch) (ly:pitch-notename pitch)
-                        (- (ly:pitch-alteration pitch) alteration)))))
+          pitch
+          (ly:make-pitch (ly:pitch-octave pitch) (ly:pitch-notename pitch)
+                         (- (ly:pitch-alteration pitch) alteration)))))
 
   (define (step-even-or-altered? pitch)
     (let ((nr (step-nr pitch)))
       (if (!= (modulo nr 2) 0)
-         (!= (step-alteration pitch) 0)
-         #t)))
+          (!= (step-alteration pitch) 0)
+          #t)))
 
   (define (step->markup-plusminus pitch)
     (make-line-markup
@@ -93,111 +93,111 @@ See @file{double-plus-new-chord-name.scm} for the signature of @var{style}.
       (make-simple-markup (number->string (step-nr pitch)))
       (make-simple-markup
        (case (step-alteration pitch)
-        ((DOUBLE-FLAT) "--")
-        ((FLAT) "-")
-        ((NATURAL) "")
-        ((SHARP) "+")
-        ((DOUBLE-SHARP) "++"))))))
+         ((DOUBLE-FLAT) "--")
+         ((FLAT) "-")
+         ((NATURAL) "")
+         ((SHARP) "+")
+         ((DOUBLE-SHARP) "++"))))))
 
   (define (step->markup-accidental pitch)
     (make-line-markup
      (list (accidental->markup (step-alteration pitch))
-          (make-simple-markup (number->string (step-nr pitch))))))
+           (make-simple-markup (number->string (step-nr pitch))))))
 
   (define (step->markup-ignatzek pitch)
     (make-line-markup
      (if (and (= (step-nr pitch) 7)
-             (= (step-alteration pitch) 1))
-        (list (ly:context-property context 'majorSevenSymbol))
-        (list (accidental->markup (step-alteration pitch))
-              (make-simple-markup (number->string (step-nr pitch)))))))
+              (= (step-alteration pitch) 1))
+         (list (ly:context-property context 'majorSevenSymbol))
+         (list (accidental->markup (step-alteration pitch))
+               (make-simple-markup (number->string (step-nr pitch)))))))
 
   ;; tja, kennok
   (define (make-sub->markup step->markup)
     (lambda (pitch)
       (make-line-markup (list (make-simple-markup "no")
-                             (step->markup pitch)))))
+                              (step->markup pitch)))))
 
   (define (step-based-sub->markup step->markup pitch)
     (make-line-markup (list (make-simple-markup "no") (step->markup pitch))))
 
   (define (get-full-list pitch)
     (if (<= (step-nr pitch) (step-nr (last pitches)))
-       (cons pitch (get-full-list (next-third pitch)))
-       '()))
+        (cons pitch (get-full-list (next-third pitch)))
+        '()))
 
   (define (get-consecutive nr pitches)
     (if (pair? pitches)
-       (let* ((pitch-nr (step-nr (car pitches)))
-              (next-nr (if (!= (modulo pitch-nr 2) 0) (+ pitch-nr 2) nr)))
-         (if (<= pitch-nr nr)
-             (cons (car pitches) (get-consecutive next-nr (cdr pitches)))
-             '()))
-       '()))
+        (let* ((pitch-nr (step-nr (car pitches)))
+               (next-nr (if (!= (modulo pitch-nr 2) 0) (+ pitch-nr 2) nr)))
+          (if (<= pitch-nr nr)
+              (cons (car pitches) (get-consecutive next-nr (cdr pitches)))
+              '()))
+        '()))
 
   (define (full-match exceptions)
     (if (pair? exceptions)
-       (let* ((e (car exceptions))
-              (e-pitches (car e)))
-         (if (equal? e-pitches pitches)
-             e
-             (full-match (cdr exceptions))))
-       #f))
+        (let* ((e (car exceptions))
+               (e-pitches (car e)))
+          (if (equal? e-pitches pitches)
+              e
+              (full-match (cdr exceptions))))
+        #f))
 
   (define (partial-match exceptions)
     (if (pair? exceptions)
-       (let* ((e (car exceptions))
-              (e-pitches (car e)))
-         (if (equal? e-pitches (take pitches (length e-pitches)))
-             e
-             (partial-match (cdr exceptions))))
-       #f))
+        (let* ((e (car exceptions))
+               (e-pitches (car e)))
+          (if (equal? e-pitches (take pitches (length e-pitches)))
+              e
+              (partial-match (cdr exceptions))))
+        #f))
 
   (if #f (begin
-          (write-me "pitches: " pitches)))
+           (write-me "pitches: " pitches)))
   (let* ((full-exceptions
-         (ly:context-property context 'chordNameExceptionsFull))
-        (full-exception (full-match full-exceptions))
-        (full-markup (if full-exception (cadr full-exception) '()))
-        (partial-exceptions
-         (ly:context-property context 'chordNameExceptionsPartial))
-        (partial-exception (partial-match partial-exceptions))
-        (partial-pitches (if partial-exception (car partial-exception) '()))
-        (partial-markup-prefix
-         (if partial-exception (markup-or-empty-markup
-                                (cadr partial-exception)) empty-markup))
-        (partial-markup-suffix
-         (if (and partial-exception (pair? (cddr partial-exception)))
-             (markup-or-empty-markup (caddr partial-exception)) empty-markup))
-        (root (car pitches))
-        (full (get-full-list root))
-        ;; kludge alert: replace partial matched lower part of all with
-        ;; 'normal' pitches from full
-        ;; (all pitches)
-        (all (append (take full (length partial-pitches))
-                     (drop pitches (length partial-pitches))))
-
-        (highest (last all))
-        (missing (list-minus full (map pitch-unalter all)))
-        (consecutive (get-consecutive 1 all))
-        (rest (list-minus all consecutive))
-        (altered (filter step-even-or-altered? all))
-        (cons-alt (filter step-even-or-altered? consecutive))
-        (base (list-minus consecutive altered)))
+          (ly:context-property context 'chordNameExceptionsFull))
+         (full-exception (full-match full-exceptions))
+         (full-markup (if full-exception (cadr full-exception) '()))
+         (partial-exceptions
+          (ly:context-property context 'chordNameExceptionsPartial))
+         (partial-exception (partial-match partial-exceptions))
+         (partial-pitches (if partial-exception (car partial-exception) '()))
+         (partial-markup-prefix
+          (if partial-exception (markup-or-empty-markup
+                                 (cadr partial-exception)) empty-markup))
+         (partial-markup-suffix
+          (if (and partial-exception (pair? (cddr partial-exception)))
+              (markup-or-empty-markup (caddr partial-exception)) empty-markup))
+         (root (car pitches))
+         (full (get-full-list root))
+         ;; kludge alert: replace partial matched lower part of all with
+         ;; 'normal' pitches from full
+         ;; (all pitches)
+         (all (append (take full (length partial-pitches))
+                      (drop pitches (length partial-pitches))))
+
+         (highest (last all))
+         (missing (list-minus full (map pitch-unalter all)))
+         (consecutive (get-consecutive 1 all))
+         (rest (list-minus all consecutive))
+         (altered (filter step-even-or-altered? all))
+         (cons-alt (filter step-even-or-altered? consecutive))
+         (base (list-minus consecutive altered)))
 
 
     (if #f (begin
-            (write-me "full:" full)
-             ;; (write-me "partial-pitches:" partial-pitches)
-             (write-me "full-markup:" full-markup)
-             (write-me "partial-markup-perfix:" partial-markup-prefix)
-             (write-me "partial-markup-suffix:" partial-markup-suffix)
-             (write-me "all:" all)
-             (write-me "altered:" altered)
-             (write-me "missing:" missing)
-             (write-me "consecutive:" consecutive)
-             (write-me "rest:" rest)
-             (write-me "base:" base)))
+             (write-me "full:" full)
+             ;; (write-me "partial-pitches:" partial-pitches)
+             (write-me "full-markup:" full-markup)
+             (write-me "partial-markup-perfix:" partial-markup-prefix)
+             (write-me "partial-markup-suffix:" partial-markup-suffix)
+             (write-me "all:" all)
+             (write-me "altered:" altered)
+             (write-me "missing:" missing)
+             (write-me "consecutive:" consecutive)
+             (write-me "rest:" rest)
+             (write-me "base:" base)))
 
     (case style
       ((banter)
@@ -206,36 +206,36 @@ See @file{double-plus-new-chord-name.scm} for the signature of @var{style}.
        ;;    + subs:missing
 
        (let* ((root->markup (assoc-get
-                             'root->markup options default-note-namer))
-             (step->markup (assoc-get
-                            'step->markup options step->markup-plusminus))
-             (sub->markup (assoc-get
-                           'sub->markup options
-                           (lambda (x)
-                             (step-based-sub->markup step->markup x))))
-             (sep (assoc-get
-                   'separator options (make-simple-markup "/"))))
-
-        (if
-         (pair? full-markup)
-         (make-line-markup (list (root->markup root) full-markup))
-
-         (make-line-markup
-          (list
-           (root->markup root)
-           partial-markup-prefix
-           (make-normal-size-super-markup
-            (markup-join
-             (apply append
-                    (map step->markup
-                         (append altered
-                                 (if (and (> (step-nr highest) 5)
-                                          (not
-                                           (step-even-or-altered? highest)))
-                                     (list highest) '())))
-                     (list partial-markup-suffix)
-                    (list (map sub->markup missing)))
-             sep)))))))
+                             'root->markup options default-note-namer))
+              (step->markup (assoc-get
+                             'step->markup options step->markup-plusminus))
+              (sub->markup (assoc-get
+                            'sub->markup options
+                            (lambda (x)
+                              (step-based-sub->markup step->markup x))))
+              (sep (assoc-get
+                    'separator options (make-simple-markup "/"))))
+
+         (if
+          (pair? full-markup)
+          (make-line-markup (list (root->markup root) full-markup))
+
+          (make-line-markup
+           (list
+            (root->markup root)
+            partial-markup-prefix
+            (make-normal-size-super-markup
+             (markup-join
+              (append
+               (map step->markup
+                    (append altered
+                            (if (and (> (step-nr highest) 5)
+                                     (not
+                                      (step-even-or-altered? highest)))
+                                (list highest) '())))
+               (list partial-markup-suffix)
+               (map sub->markup missing))
+              sep)))))))
 
 
       ((jazz)
@@ -244,49 +244,49 @@ See @file{double-plus-new-chord-name.scm} for the signature of @var{style}.
        ;;    + 'add'
        ;;    + steps:rest
        (let* ((root->markup (assoc-get
-                             'root->markup options default-note-namer))
-             (step->markup
-              (assoc-get
-               ;; FIXME: ignatzek
-               ;;'step->markup options step->markup-accidental))
-               'step->markup options step->markup-ignatzek))
-             (sep (assoc-get
-                   'separator options (make-simple-markup " ")))
-             (add-prefix (assoc-get 'add-prefix options
-                                            (make-simple-markup " add"))))
-
-        (if
-         (pair? full-markup)
-         (make-line-markup (list (root->markup root) full-markup))
-
-         (make-line-markup
-          (list
-           (root->markup root)
-           partial-markup-prefix
-           (make-normal-size-super-markup
-            (make-line-markup
-             (list
-
-              ;; kludge alert: omit <= 5
-              ;;(markup-join (map step->markup
-              ;;                        (cons (last base) cons-alt)) sep)
-
-              ;; This fixes:
-              ;;  c     C5       -> C
-              ;;  c:2   C5 2     -> C2
-              ;;  c:3-  Cm5      -> Cm
-              ;;  c:6.9 C5 6add9 -> C6 add 9 (add?)
-              ;;  ch = \chords { c c:2 c:3- c:6.9^7 }
-              (markup-join (map step->markup
-                                (let ((tb (last base)))
-                                  (if (> (step-nr tb) 5)
-                                      (cons tb cons-alt)
-                                      cons-alt))) sep)
-
-              (if (pair? rest)
-                  add-prefix
-                  empty-markup)
-              (markup-join (map step->markup rest) sep)
-              partial-markup-suffix))))))))
-
-       (else empty-markup))))
+                             'root->markup options default-note-namer))
+              (step->markup
+               (assoc-get
+                ;; FIXME: ignatzek
+                ;;'step->markup options step->markup-accidental))
+                'step->markup options step->markup-ignatzek))
+              (sep (assoc-get
+                    'separator options (make-simple-markup " ")))
+              (add-prefix (assoc-get 'add-prefix options
+                                     (make-simple-markup " add"))))
+
+         (if
+          (pair? full-markup)
+          (make-line-markup (list (root->markup root) full-markup))
+
+          (make-line-markup
+           (list
+            (root->markup root)
+            partial-markup-prefix
+            (make-normal-size-super-markup
+             (make-line-markup
+              (list
+
+               ;; kludge alert: omit <= 5
+               ;;(markup-join (map step->markup
+               ;;                        (cons (last base) cons-alt)) sep)
+
+               ;; This fixes:
+               ;;  c     C5       -> C
+               ;;  c:2   C5 2     -> C2
+               ;;  c:3-  Cm5      -> Cm
+               ;;  c:6.9 C5 6add9 -> C6 add 9 (add?)
+               ;;  ch = \chords { c c:2 c:3- c:6.9^7 }
+               (markup-join (map step->markup
+                                 (let ((tb (last base)))
+                                   (if (> (step-nr tb) 5)
+                                       (cons tb cons-alt)
+                                       cons-alt))) sep)
+
+               (if (pair? rest)
+                   add-prefix
+                   empty-markup)
+               (markup-join (map step->markup rest) sep)
+               partial-markup-suffix))))))))
+
+      (else empty-markup))))
index 69381836a751107318fd4a457f523958fafa9dc6..fc32e6ba759dce9d447b3193a2121b06fc64dad1 100644 (file)
@@ -242,7 +242,7 @@ work than classifying the pitches."
           ;; no exception.
           ;; handle sus4 and sus2 suffix: if there is a 3 together with
           ;; sus2 or sus4, then we explicitly say add3.
-          (map
+          (for-each
            (lambda (j)
              (if (get-step j pitches)
                  (begin
@@ -284,8 +284,7 @@ work than classifying the pitches."
                  (= 7 (pitch-step main-name))
                  (is-natural-alteration? main-name)
                  (pair? (remove-uptil-step 7 alterations))
-                 (reduce (lambda (x y) (and x y)) #t
-                         (map is-natural-alteration? alterations)))
+                 (every is-natural-alteration? alterations))
                 (begin
                   (set! main-name (last alterations))
                   (set! alterations '())))
index 9823d8a08b4e8ba6a5399b2c69c8bd58c216295b..a80d4e2b6eb9cfd4c052fb9ec533f1e579a3a328 100644 (file)
@@ -35,8 +35,8 @@
   (make-smaller-markup
    (make-raise-markup
     (if (= alteration FLAT)
-       0.3
-       0.6)
+        0.3
+        0.6)
     (make-musicglyph-markup
      (assoc-get alteration standard-alteration-glyph-name-alist "")))))
 
@@ -46,7 +46,7 @@
       (make-line-markup (list empty-markup))
       (conditional-kern-before
        (alteration->text-accidental-markup alteration)
-       (= alteration FLAT) 0.2)))
+       (= alteration FLAT) 0.094725)))
 
 (define (accidental->markup-italian alteration)
   "Return accidental markup for ALTERATION, for use after an italian chord root name."
       (make-hspace-markup 0.2)
       (make-line-markup
        (list
-        (make-hspace-markup (if (= alteration FLAT) 0.7 0.5))
-       (make-raise-markup 0.7 (alteration->text-accidental-markup alteration))
-       (make-hspace-markup (if (= alteration SHARP) 0.2 0.1))
-       ))))
+        (make-hspace-markup (if (= alteration FLAT) 0.57285385 0.5))
+        (make-raise-markup 0.7 (alteration->text-accidental-markup alteration))
+        (make-hspace-markup (if (= alteration SHARP) 0.2 0.1))
+        ))))
 
 (define-public (note-name->markup pitch lowercase?)
   "Return pitch markup for @var{pitch}."
   (inexact->exact (round (* (ly:pitch-alteration pitch) 2))))
 
 (define-safe-public ((chord-name->german-markup B-instead-of-Bb)
-                    pitch lowercase?)
+                     pitch lowercase?)
   "Return pitch markup for PITCH, using german note names.
    If B-instead-of-Bb is set to #t real german names are returned.
    Otherwise semi-german names (with Bb and below keeping the british names)
 "
   (let* ((name (ly:pitch-notename pitch))
          (alt-semitones  (pitch-alteration-semitones pitch))
-        (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
-                 (cons 7 (+ (if B-instead-of-Bb 1 0) alt-semitones))
-                 (cons name alt-semitones))))
+         (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
+                  (cons 7 (+ (if B-instead-of-Bb 1 0) alt-semitones))
+                  (cons name alt-semitones))))
     (make-line-markup
      (list
       (make-simple-markup
        (conditional-string-downcase
-               (vector-ref #("C" "D" "E" "F" "G" "A" "H" "B") (car n-a))
-               lowercase?))
+        (vector-ref #("C" "D" "E" "F" "G" "A" "H" "B") (car n-a))
+        lowercase?))
       (make-normal-size-super-markup
        (accidental->markup (/ (cdr n-a) 2)))))))
 
 (define-safe-public (note-name->german-markup pitch lowercase?)
   (let* ((name (ly:pitch-notename pitch))
-        (alt-semitones (pitch-alteration-semitones pitch))
-        (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
-                 (cons 7 (+ 1 alt-semitones))
-                 (cons name alt-semitones))))
+         (alt-semitones (pitch-alteration-semitones pitch))
+         (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
+                  (cons 7 (+ 1 alt-semitones))
+                  (cons name alt-semitones))))
     (make-line-markup
      (list
       (string-append
        (list-ref '("c" "d" "e" "f" "g" "a" "h" "b") (car n-a))
        (if (or (equal? (car n-a) 2) (equal? (car n-a) 5))
-          (list-ref '( "ses" "s" "" "is" "isis") (+ 2 (cdr n-a)))
-          (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cdr n-a)))))))))
+           (list-ref '( "ses" "s" "" "is" "isis") (+ 2 (cdr n-a)))
+           (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cdr n-a)))))))))
 
 (define-public ((chord-name->italian-markup re-with-eacute) pitch lowercase?)
   "Return pitch markup for @var{pitch}, using Italian/@/French note names.
@@ -117,12 +117,12 @@ pitch@tie{}D instead of `re'."
      (list
       (make-simple-markup
        (conditional-string-downcase
-               (vector-ref
-                (if re-with-eacute
-                    #("Do" "Ré" "Mi" "Fa" "Sol" "La" "Si")
-                    #("Do" "Re" "Mi" "Fa" "Sol" "La" "Si"))
-                name)
-               lowercase?))
+        (vector-ref
+         (if re-with-eacute
+             #("Do" "Ré" "Mi" "Fa" "Sol" "La" "Si")
+             #("Do" "Re" "Mi" "Fa" "Sol" "La" "Si"))
+         name)
+        lowercase?))
       (accidental->markup-italian alt)
       ))))
 
@@ -136,29 +136,29 @@ FOOBAR-MARKUP) if OMIT-ROOT is given and non-false.
 
   (define (chord-to-exception-entry m)
     (let* ((elts (ly:music-property m 'elements))
-          (omit-root (and (pair? rest) (car rest)))
-          (pitches (map (lambda (x) (ly:music-property x 'pitch))
-                        (filter
-                         (lambda (y) (memq 'note-event
-                                           (ly:music-property y 'types)))
-                         elts)))
-          (sorted (sort pitches ly:pitch<?))
-          (root (car sorted))
-
-          ;; ugh?
-          ;;(diff (ly:pitch-diff root (ly:make-pitch -1 0 0)))
-          ;; FIXME.  This results in #<Pitch c> ...,
-          ;; but that is what we need because default octave for
-          ;; \chords has changed to c' too?
-          (diff (ly:pitch-diff root (ly:make-pitch 0 0 0)))
-          (normalized (map (lambda (x) (ly:pitch-diff x diff)) sorted))
-          (texts (map (lambda (x) (ly:music-property x 'text))
-                      (filter
-                       (lambda (y) (memq 'text-script-event
-                                         (ly:music-property y 'types)))
-                       elts)))
-
-          (text (if (null? texts) #f (if omit-root (car texts) texts))))
+           (omit-root (and (pair? rest) (car rest)))
+           (pitches (map (lambda (x) (ly:music-property x 'pitch))
+                         (filter
+                          (lambda (y) (memq 'note-event
+                                            (ly:music-property y 'types)))
+                          elts)))
+           (sorted (sort pitches ly:pitch<?))
+           (root (car sorted))
+
+           ;; ugh?
+           ;;(diff (ly:pitch-diff root (ly:make-pitch -1 0 0)))
+           ;; FIXME.  This results in #<Pitch c> ...,
+           ;; but that is what we need because default octave for
+           ;; \chords has changed to c' too?
+           (diff (ly:pitch-diff root (ly:make-pitch 0 0 0)))
+           (normalized (map (lambda (x) (ly:pitch-diff x diff)) sorted))
+           (texts (map (lambda (x) (ly:music-property x 'text))
+                       (filter
+                        (lambda (y) (memq 'text-script-event
+                                          (ly:music-property y 'types)))
+                        elts)))
+
+           (text (if (null? texts) #f (if omit-root (car texts) texts))))
       (cons (if omit-root (cdr normalized) normalized) text)))
 
   (define (is-event-chord? m)
@@ -167,6 +167,5 @@ FOOBAR-MARKUP) if OMIT-ROOT is given and non-false.
      (not (equal? ZERO-MOMENT (ly:music-length m)))))
 
   (let* ((elts (filter is-event-chord? (ly:music-property seq 'elements)))
-        (alist (map chord-to-exception-entry elts)))
+         (alist (map chord-to-exception-entry elts)))
     (filter (lambda (x) (cdr x)) alist)))
-
index 3585a12bc3805b4c1cfd9e8a1d4cbd96cc2c7658..5cfc4449e7941d123429f9ae6f1a115e02106877 100644 (file)
 ;; scm/output-lib.scm
 ;;
 ;;
-;;     (define-public (make-rhythmic-location bar-num num den)
-;:     (define-public (rhythmic-location? a)
-;;     (define-public (make-graceless-rhythmic-location loc)
-;;     (define-public rhythmic-location-measure-position cdr)
-;;     (define-public rhythmic-location-bar-number car)
-;;     (define-public (rhythmic-location<? a b)
-;:     (define-public (rhythmic-location<=? a b)
-;:     (define-public (rhythmic-location>=? a b)
-;;     (define-public (rhythmic-location>? a b)
-;:     (define-public (rhythmic-location=? a b)
-;;     (define-public (rhythmic-location->file-string a)
-;;     (define-public (rhythmic-location->string a)
+;;      (define-public (make-rhythmic-location bar-num num den)
+;     (define-public (rhythmic-location? a)
+;;      (define-public (make-graceless-rhythmic-location loc)
+;;      (define-public rhythmic-location-measure-position cdr)
+;;      (define-public rhythmic-location-bar-number car)
+;;      (define-public (rhythmic-location<? a b)
+;     (define-public (rhythmic-location<=? a b)
+;     (define-public (rhythmic-location>=? a b)
+;;      (define-public (rhythmic-location>? a b)
+;     (define-public (rhythmic-location=? a b)
+;;      (define-public (rhythmic-location->file-string a)
+;;      (define-public (rhythmic-location->string a)
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; the total of this will be
 ;; O(#systems * #regions)
-;; 
+;;
 ;; we can actually do better by sorting the regions as well,
 ;; but let's leave that for future extensions.
 ;;
 (define-public (system-clipped-x-extent system-grob clip-region)
   "Return the X-extent of @var{system-grob} when clipped with
 @var{clip-region}.  Return @code{#f} if not appropriate."
-  
+
   (let*
       ((region-start (car clip-region))
        (columns (ly:grob-object system-grob 'columns))
        (region-end (cdr clip-region))
        (found-grace-end  #f)
-       (candidate-columns 
-       (filter
-        (lambda (j)
-          (let*
-              ((column (ly:grob-array-ref columns j))
-               (loc (ly:grob-property column 'rhythmic-location))
-               (grace-less (make-graceless-rhythmic-location loc))
-               )
-               
-            (and (rhythmic-location? loc)
-                 (rhythmic-location<=? region-start loc)
-                 (or (rhythmic-location<? grace-less region-end)
-                     (and (rhythmic-location=? grace-less region-end)
-                          (eq? #t (ly:grob-property column 'non-musical))
-
-                          )))
-
-            ))
-        
-        (iota (ly:grob-array-length columns))))
-       
+       (candidate-columns
+        (filter
+         (lambda (j)
+           (let*
+               ((column (ly:grob-array-ref columns j))
+                (loc (ly:grob-property column 'rhythmic-location))
+                (grace-less (make-graceless-rhythmic-location loc))
+                )
+
+             (and (rhythmic-location? loc)
+                  (rhythmic-location<=? region-start loc)
+                  (or (rhythmic-location<? grace-less region-end)
+                      (and (rhythmic-location=? grace-less region-end)
+                           (eq? #t (ly:grob-property column 'non-musical))
+
+                           )))
+
+             ))
+
+         (iota (ly:grob-array-length columns))))
+
        (column-range
-       (if (>= 1 (length candidate-columns))
-           #f
-           (cons (car candidate-columns)
-                 (car (last-pair candidate-columns)))))
+        (if (>= 1 (length candidate-columns))
+            #f
+            (cons (car candidate-columns)
+                  (car (last-pair candidate-columns)))))
 
        (clipped-x-interval
-       (if column-range
-           (cons
-
-            (interval-start
-             (ly:grob-robust-relative-extent
-              (if (= 0 (car column-range))
-                  system-grob
-                  (ly:grob-array-ref columns (car column-range)))
-              system-grob X))
-            
-            (interval-end
-             (ly:grob-robust-relative-extent
-             (if (= (1- (ly:grob-array-length columns)) (cdr column-range))
-                 system-grob
-                 (ly:grob-array-ref columns (cdr column-range)))
-             system-grob X)))
-           
-           
-           #f
-           )))
-    
+        (if column-range
+            (cons
+
+             (interval-start
+              (ly:grob-robust-relative-extent
+               (if (= 0 (car column-range))
+                   system-grob
+                   (ly:grob-array-ref columns (car column-range)))
+               system-grob X))
+
+             (interval-end
+              (ly:grob-robust-relative-extent
+               (if (= (1- (ly:grob-array-length columns)) (cdr column-range))
+                   system-grob
+                   (ly:grob-array-ref columns (cdr column-range)))
+               system-grob X)))
+
+
+            #f
+            )))
+
     clipped-x-interval))
index 3c210555ae102bc2f67621e87610d8fa27441818..0f1ae319ad627bf2f79eee457b13785d3ba41646 100644 (file)
@@ -3,28 +3,28 @@
 (define-module (scm coverage))
 
 (use-modules (lily)
-            (ice-9 rdelim)
-            (ice-9 regex)
-            (ice-9 format) ;; needed for ~8@ 
-            )
+             (ice-9 rdelim)
+             (ice-9 regex)
+             (ice-9 format) ;; needed for ~8@
+             )
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (define-public (coverage:show-all filter?)
   (let*
       ((keys
-       (filter filter?
-               (sort (map car (hash-table->alist coverage-table)) string<? ))))
-    
-  (newline)
-  (for-each
-   (lambda (k)
+        (filter filter?
+                (sort (map car (hash-table->alist coverage-table)) string<? ))))
 
-     (format #t "Coverage for file: ~a\n" k)
-     (display-coverage
-      k (hash-ref coverage-table k)
-      (format #f "~a.cov" (basename k))))
-   keys)))
+    (newline)
+    (for-each
+     (lambda (k)
+
+       (format #t "Coverage for file: ~a\n" k)
+       (display-coverage
+        k (hash-ref coverage-table k)
+        (format #f "~a.cov" (basename k))))
+     keys)))
 
 
 (define-public (coverage:enable)
@@ -32,7 +32,7 @@
   (trap-enable 'memoize-symbol)
   (trap-enable 'traps))
 
-     
+
 (define-public (coverage:disable)
   (trap-set! memoize-symbol-handler #f)
   (trap-disable 'memoize-symbol))
       ((lines (read-lines (open-file file "r")))
        (format-str "~8@a: ~5@a:~a\n")
        (out (if out-file (open-output-file out-file)
-               (current-output-port))))
+                (current-output-port))))
 
     (format out format-str "-" 0 (format #f "Source:~a" file))
     (do
-       ((i 0 (1+ i))
-        (l lines (cdr l)))
-       ((or (null? l) ))
+        ((i 0 (1+ i))
+         (l lines (cdr l)))
+        ((or (null? l) ))
 
       (format out format-str
-                      (cond
-                       ((and (< i (vector-length vec)) (vector-ref vec i)) "1")
-                       ((and (string-contains file ".ly") (string-match "^[ \t]*%.*$" (car l)))
-                        "-")
-                       ((string-match  "^[ \t]*[()'`,]*$" (car l))
-                        "-")
-                       ((string-match  "^[ \t]*;.*$" (car l))
-
-                        "-")
-                       (else "0"))
-                      (1+ i)
-                      (car l)))))
+              (cond
+               ((and (< i (vector-length vec)) (vector-ref vec i)) "1")
+               ((and (string-contains file ".ly") (string-match "^[ \t]*%.*$" (car l)))
+                "-")
+               ((string-match  "^[ \t]*[()'`,]*$" (car l))
+                "-")
+               ((string-match  "^[ \t]*;.*$" (car l))
+
+                "-")
+               (else "0"))
+              (1+ i)
+              (car l)))))
 
 (define (record-coverage key cont exp env)
   (let*
        (vec (and name (hash-ref coverage-table name #f)))
        (veclen (and vec (vector-length vec)))
        (veccopy (lambda (src dst)
-                 (vector-move-left! src 0 (vector-length src)
-                                    dst 0)
-                 dst)))
+                  (vector-move-left! src 0 (vector-length src)
+                                     dst 0)
+                  dst)))
     (if (and line name)
-       (begin
-         (if (or (not vec) (>= line (vector-length vec)))
-             (set! vec
-                   (hash-set! coverage-table name
-                               (if vec
-                                   (veccopy vec (make-vector (1+ line) #f))
-                                   (make-vector (1+ line) #f)))))
-
-         (vector-set! vec line #t))
-    )))
-
-
-
-
-
+        (begin
+          (if (or (not vec) (>= line (vector-length vec)))
+              (set! vec
+                    (hash-set! coverage-table name
+                               (if vec
+                                   (veccopy vec (make-vector (1+ line) #f))
+                                   (make-vector (1+ line) #f)))))
+
+          (vector-set! vec line #t))
+        )))
index 16a1b21b1ead90d461c8671c8ee9716d47819b71..20d77ea72f5d100dbc5705f64b27a5023e74e057 100644 (file)
@@ -21,9 +21,9 @@
 
 (define (translator-property-description symbol type? description)
   (if (not (and
-           (symbol? symbol)
-           (procedure? type?)
-           (string? description)))
+            (symbol? symbol)
+            (procedure? type?)
+            (string? description)))
       (throw 'init-format-error))
 
 
@@ -44,6 +44,9 @@
 
      ;; TODO FIXME
 
+     (accidentalGrouping ,symbol? "If set to @code{'voice}, accidentals
+on the same note in different octaves may be horizontally staggered
+if in different voices.")
      (aDueText ,markup? "Text to print at a unisono passage.")
      (additionalPitchPrefix ,string? "Text with which to prefix
 additional pitches within a chord name.")
@@ -129,7 +132,38 @@ number, measure position, and alternative number and returns a markup
 of the bar number to print.")
      (barNumberVisibility ,procedure? "A procedure that takes a bar
 number and a measure position and returns whether the corresponding
-bar number should be printed.")
+bar number should be printed.  Note that the actual print-out of
+bar numbers is controlled with the @code{break-visibility} property.
+
+The following procedures are predefined:
+
+@table @code
+@item all-bar-numbers-visible
+Enable bar numbers for all bars, including the first one and broken
+bars (which get bar numbers in parentheses).
+
+@item first-bar-number-invisible
+Enable bar numbers for all bars (including broken bars) except the
+first one.  If the first bar is broken, it doesn't get a bar number
+either.
+
+@item first-bar-number-invisible-save-broken-bars
+Enable bar numbers for all bars (including broken bars) except the
+first one.  A broken first bar gets a bar number.
+
+@item first-bar-number-invisible-and-no-parenthesized-bar-numbers
+Enable bar numbers for all bars except the first bar and broken bars.
+This is the default.
+
+@item (every-nth-bar-number-visible @var{n})
+Assuming @var{n} is value@tie{}2, for example, this enables bar numbers
+for bars 2, 4, 6, etc.
+
+@item (modulo-bar-number-visible @var{n} @var{m})
+If bar numbers 1, 4, 7, etc., should be enabled, @var{n}@tie{}(the modulo)
+must be set to@tie{}3 and @var{m}@tie{}(the division remainder) to@tie{}1.
+@end table")
+
      (baseMoment ,ly:moment? "Smallest unit of time that will stand on its
 own as a subdivided section.")
      (bassFigureFormatFunction ,procedure? "A procedure that is
@@ -169,8 +203,14 @@ symbol and the prefix of a chord name.")
      (chordRootNamer ,procedure? "A function that converts from a pitch
 object to a text markup.  Used for chords.")
      (clefGlyph ,string? "Name of the symbol within the music font.")
-     (clefOctavation ,integer? "Add this much extra octavation.
+     (clefTransposition ,integer? "Add this much extra transposition.
 Values of 7 and -7 are common.")
+     (clefTranspositionFormatter ,procedure? "A procedure that takes the
+Transposition number as a string and the style as a symbol and returns a
+markup.")
+     (clefTranspositionStyle ,symbol? "Determines the way the ClefModifier
+grob is displayed.  Possible values are @samp{default}, @samp{parenthesized}
+and @samp{bracketed}.")
      (clefPosition ,number? "Where should the center of the clef
 symbol go, measured in half staff spaces from the center of the
 staff.")
@@ -190,8 +230,14 @@ a hairpin crescendo is used.")
      (crescendoText ,markup? "The text to print at start of non-hairpin
 crescendo, i.e., @samp{cresc.}.")
      (cueClefGlyph ,string? "Name of the symbol within the music font.")
-     (cueClefOctavation ,integer? "Add this much extra octavation.
+     (cueClefTransposition ,integer? "Add this much extra transposition.
 Values of 7 and -7 are common.")
+     (cueClefTranspositionFormatter ,procedure? "A procedure that
+takes the Transposition number as a string and the style as a symbol
+and returns a markup.")
+     (cueClefTranspositionStyle ,symbol? "Determines the way the ClefModifier
+grob is displayed.  Possible values are @samp{default}, @samp{parenthesized}
+and @samp{bracketed}.")
      (cueClefPosition ,number? "Where should the center of the clef
 symbol go, measured in half staff spaces from the center of the
 staff.")
@@ -213,7 +259,7 @@ This variable is read by @rinternals{Timing_translator} at
 frets for tablatures and fretboards if no strings are provided in
 the notes for the current moment.")
      (doubleRepeatSegnoType ,string? "Set the default bar line for
-the combinations double repeat with segno. Default is @samp{:|S|:}.")
+the combinations double repeat with segno. Default is @samp{:|.S.|:}.")
      (doubleRepeatType ,string? "Set the default bar line for double
 repeats.")
      (doubleSlurs ,boolean? "If set, two slurs are created for every
@@ -231,7 +277,7 @@ the symbol @samp{hihat}) as keys, and a list
 values.")
 
      (endRepeatSegnoType ,string? "Set the default bar line for the
-combinations ending of repeat with segno. Default is @samp{:|S}.")
+combinations ending of repeat with segno. Default is @samp{:|.S}.")
      (endRepeatType ,string? "Set the default bar line for the ending
 of repeats.")
      (explicitClefVisibility ,vector? "@samp{break-visibility}
@@ -240,8 +286,8 @@ function for clef changes.")
 function for cue clef changes.")
      (explicitKeySignatureVisibility ,vector? "@samp{break-visibility}
 function for explicit key changes.  @samp{\\override} of the
-@code{break-visibility} property will set the visibility for normal
-(i.e., at the start of the line) key signatures.")
+@code{break-visibility} property will set the visibility for
+normal (i.e., at the start of the line) key signatures.")
      (extendersOverRests ,boolean? "Whether to continue extenders as
 they cross a rest.")
      (extraNatural ,boolean? "Whether to typeset an extra natural sign
@@ -276,10 +322,12 @@ containing, in the correct order, the labels to be used for lettered
 frets in tablature.")
 
 
-     (glissandoMap ,list? "A map in the form of '((source1 . target1)
-(source2 . target2) (sourcen . targetn)) showing the glissandi to
-be drawn for note columns.  The value '() will default to '((0 . 0)
-(1 . 1) (n . n)), where n is the minimal number of note-heads in
+     (glissandoMap ,list? "A map in the form of
+'((source1 . target1) (source2 . target2) (sourcen . targetn))
+showing the glissandi to be drawn for note columns.
+The value '() will default to
+'((0 . 0) (1 . 1) (n . n)),
+where n is the minimal number of note-heads in
 the two note columns between which the glissandi occur.")
      (gridInterval ,ly:moment? "Interval for which to generate
 @code{GridPoint}s.")
@@ -311,17 +359,16 @@ the default time signature.")
 @rinternals{Lyrics}.")
      (instrumentCueName ,markup? "The name to print if another
 instrument is to be taken.")
-     (instrumentEqualizer ,procedure? "A function taking a string
-(instrument name), and returning a @code{(@var{min} . @var{max})} pair
-of numbers for the loudness range of the instrument.")
+     (instrumentEqualizer ,procedure? "A function taking a
+string (instrument name), and returning a @code{(@var{min} . @var{max})}
+pair of numbers for the loudness range of the instrument.")
      (instrumentName ,markup? "The name to print left of a staff.  The
 @code{instrumentName} property labels the staff in the first system, and
 the @code{shortInstrumentName} property labels following lines.")
-     ;; the definition is reversed wrt traditional transposition
-     ;; otherwise \transpose { \transposition .. } won't work
      (instrumentTransposition ,ly:pitch? "Define the transposition of
-the instrument.  Its value is the pitch that sounds like middle@tie{}C.
-This is used to transpose the MIDI output, and @code{\\quote}s.")
+the instrument. Its value is the pitch that sounds when the instrument
+plays written middle C.  This is used to transpose the MIDI output,
+and @code{\\quote}s.")
      (internalBarNumber ,integer? "Contains the current barnumber.
 This property is used for internal timekeeping, among others by the
 @code{Accidental_engraver}.")
@@ -331,14 +378,16 @@ This property is used for internal timekeeping, among others by the
 interfaces that are worth keeping a staff with @code{remove-empty} set
 around for.")
      (keyAlterationOrder ,list? "An alist that defines in what order
-alterations should be printed.  The format is @code{(@var{step}
-. @var{alter})}, where @var{step} is a number from 0 to@tie{}6 and
+alterations should be printed.  The format is
+@code{(@var{step} . @var{alter})},
+where @var{step} is a number from 0 to@tie{}6 and
 @var{alter} from -2 (sharp) to 2 (flat).")
      (keySignature ,list? "The current key signature.  This is an alist
-containing @code{(@var{step} . @var{alter})} or @code{((@var{octave} .
-@var{step}) . @var{alter})},  where @var{step} is a number in the range
-0 to@tie{}6 and @var{alter} a fraction, denoting alteration.  For
-alterations, use symbols, e.g. @code{keySignature = #`((6 . ,FLAT))}.")
+containing @code{(@var{step} . @var{alter})} or
+@code{((@var{octave} . @var{step}) . @var{alter})}, where @var{step}
+is a number in the range 0 to@tie{}6 and @var{alter} a fraction,
+denoting alteration.  For alterations, use symbols, e.g.
+@code{keySignature = #`((6 . ,FLAT))}.")
 
 
      (lyricMelismaAlignment ,number? "Alignment to use for a melisma syllable.")
@@ -383,7 +432,24 @@ event when notes with the same pitch, in the same MIDI-file track, overlap.")
 @code{midiMinimumVolume}.")
      (midiMinimumVolume ,number? "Set the minimum loudness for MIDI.
 Ranges from 0 to@tie{}1.")
-     (midiChannelMapping ,symbol? "How to map MIDI channels: per @code{instrument} (default), @code{staff} or @code{voice}.")
+     (midiChannelMapping ,symbol? "How to map MIDI channels: per
+@code{staff} (default), @code{instrument} or @code{voice}.")
+     (midiBalance ,number? "Stereo balance for the MIDI channel
+associated with the current context.  Ranges from@tie{}@w{-1} to@tie{}1,
+where the values@tie{}@w{-1} (@code{#LEFT}),@tie{}0 (@code{#CENTER})
+and@tie{}1 (@code{#RIGHT}) correspond to leftmost emphasis, center
+balance, and rightmost emphasis, respectively.")
+     (midiPanPosition ,number? "Pan position for the MIDI channel
+associated with the current context.  Ranges from@tie{}@w{-1} to@tie{}1,
+where the values@tie{}@w{-1} (@code{#LEFT}),@tie{}0 (@code{#CENTER})
+and@tie{}1 (@code{#RIGHT}) correspond to hard left, center, and hard
+right, respectively.")
+     (midiReverbLevel ,number? "Reverb effect level for the MIDI channel
+associated with the current context.  Ranges from 0 to@tie{}1
+(0=off,@tie{}1=full effect).")
+     (midiChorusLevel ,number? "Chorus effect level for the MIDI channel
+associated with the current context.  Ranges from 0 to@tie{}1
+(0=off,@tie{}1=full effect).")
      (minimumFret ,number? "The tablature auto string-selecting
 mechanism selects the highest string with a fret at least
 @code{minimumFret}.")
@@ -485,7 +551,7 @@ part-combining.")
      (stanza ,markup? "Stanza @q{number} to print before the start of a
 verse.  Use in @code{Lyrics} context.")
      (startRepeatSegnoType ,string? "Set the default bar line for the
-combinations beginning of repeat with segno. Default is @samp{.S|:}.")
+combinations beginning of repeat with segno. Default is @samp{S.|:}.")
      (startRepeatType ,string? "Set the default bar line for the beginning
 of repeats.")
      (stemLeftBeamCount ,integer? "Specify the number of beams to draw
@@ -576,12 +642,12 @@ of bar line to create.
 Example:
 
 @example
-\\set Staff.whichBar = \"|:\"
+\\set Staff.whichBar = \".|:\"
 @end example
 
 @noindent
 This will create a start-repeat bar in this staff only.  Valid values
-are described in @rinternals{bar-line-interface}.")
+are described in @file{scm/bar-line.scm}.")
      )))
 
 
@@ -592,7 +658,6 @@ are described in @rinternals{bar-line-interface}.")
      (apply translator-property-description x))
 
    `(
-     (EventClasses ,cheap-list? "The initial list of event classes.")
 
      (associatedVoiceContext ,ly:context? "The context object of the
 @code{Voice} that has the melody for this @code{Lyrics}.")
@@ -626,6 +691,8 @@ proceeding to next time step.  This is an internal variable.")
 should be manipulated through the @code{add-grace-property} function.")
 
 
+     (hasAxisGroup ,boolean? "True if the current context is contained
+in an axis group.")
      (hasStaffSpacing ,boolean? "True if the current
 @code{CommandColumn} contains items that will affect spacing.")
 
@@ -666,7 +733,7 @@ and subscripts.  See @file{scm/@/script.scm} for more information.")
 
 (define-public all-translation-properties
   (append all-user-translation-properties
-         all-internal-translation-properties))
+          all-internal-translation-properties))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
index 2beabeeff7e6756e1e1f2874d7b12ed069397dfb..dd6405a73e657984b842e4f7b384dc4051e45292 100644 (file)
 (define event-classes
   '((() . (StreamEvent))
     (StreamEvent .
-                (RemoveContext ChangeParent Override Revert UnsetProperty
-                               SetProperty music-event OldMusicEvent CreateContext Prepare
-                               OneTimeStep Finish))
-    (music-event . (annotate-output-event footnote-event
-                   arpeggio-event breathing-event extender-event span-event
-      rhythmic-event dynamic-event break-event label-event percent-event
-      key-change-event string-number-event stroke-finger-event tie-event
-      part-combine-event part-combine-force-event
-      beam-forbid-event script-event tempo-change-event
-      tremolo-event bend-after-event fingering-event glissando-event
-      harmonic-event hyphen-event laissez-vibrer-event mark-event
-      multi-measure-text-event note-grouping-event
-      pes-or-flexa-event repeat-tie-event spacing-section-event
-      layout-instruction-event completize-extender-event break-span-event
-      alternative-event))
+                 (RemoveContext
+                  ChangeParent Override Revert UnsetProperty SetProperty
+                  music-event OldMusicEvent CreateContext Prepare
+                  OneTimeStep Finish))
+    (music-event . (annotate-output-event
+                    footnote-event arpeggio-event breathing-event
+                    extender-event span-event rhythmic-event dynamic-event
+                    break-event label-event percent-event key-change-event
+                    string-number-event stroke-finger-event tie-event
+                    part-combine-event part-combine-force-event
+                    beam-forbid-event script-event tempo-change-event
+                    tremolo-event bend-after-event fingering-event
+                    glissando-event harmonic-event hyphen-event
+                    laissez-vibrer-event mark-event multi-measure-text-event
+                    note-grouping-event pes-or-flexa-event repeat-tie-event
+                    spacing-section-event layout-instruction-event
+                    completize-extender-event break-span-event alternative-event))
 
     (layout-instruction-event . (apply-output-event))
     (script-event . (articulation-event text-script-event))
     (part-combine-event . (solo-one-event solo-two-event unisono-event))
     (break-event . (line-break-event page-break-event page-turn-event))
     (dynamic-event . (absolute-dynamic-event))
-    (span-event . (span-dynamic-event beam-event episema-event ligature-event
-                        pedal-event phrasing-slur-event slur-event staff-span-event
-                        text-span-event trill-span-event tremolo-span-event
-                        tuplet-span-event))
+    (span-event . (span-dynamic-event
+                   beam-event episema-event ligature-event
+                   measure-counter-event pedal-event
+                   phrasing-slur-event slur-event
+                   staff-span-event text-span-event
+                   trill-span-event tremolo-span-event
+                   tuplet-span-event))
     (span-dynamic-event . (decrescendo-event crescendo-event))
     (break-span-event . (break-dynamic-span-event))
     (pedal-event . (sostenuto-event sustain-event una-corda-event))
-    (rhythmic-event . (lyric-event melodic-event multi-measure-rest-event
-                                  double-percent-event percent-event
-                                  repeat-slash-event rest-event
-                                  skip-event bass-figure-event))
+    (rhythmic-event . (lyric-event
+                       melodic-event multi-measure-rest-event
+                       double-percent-event percent-event
+                       repeat-slash-event rest-event
+                       skip-event bass-figure-event))
     (melodic-event . (cluster-note-event note-event))
     (() . (Announcement))
     (Announcement . (AnnounceNewContext))
 (define-public (event-class-cons class parent classlist)
   (let ((lineage (assq parent classlist)))
     (if (not lineage)
-       (begin
-         (if (not (null? parent))
-             (ly:warning (_ "unknown parent class `~a'") parent))
-         (set! lineage '())))
+        (begin
+          (if (not (null? parent))
+              (ly:warning (_ "unknown parent class `~a'") parent))
+          (set! lineage '())))
     (if (symbol? class)
-       (acons class lineage classlist)
-       (fold (lambda (elt alist)
-               (acons elt lineage alist))
-             classlist class))))
+        (acons class lineage classlist)
+        (fold (lambda (elt alist)
+                (acons elt lineage alist))
+              classlist class))))
+
+(define all-event-classes
+  (fold (lambda (elt classlist)
+          (event-class-cons (cdr elt) (car elt) classlist))
+        '() event-classes))
+
+;; Maps event-class to a list of ancestors (inclusive)
+(define ancestor-lookup (make-hash-table (length all-event-classes)))
+
+(define (ancestor-lookup-initialize)
+  (hash-clear! ancestor-lookup)
+  (for-each (lambda (ent) (hashq-set! ancestor-lookup (car ent) ent))
+            all-event-classes))
+
+(ancestor-lookup-initialize)
+(call-after-session ancestor-lookup-initialize)
 
 ;; Each class will be defined as
 ;; (class parent grandparent .. )
 ;; so that (eq? (cdr class) parent) holds.
 
+(define-public (define-event-class class parent)
+  "Defines a new event @code{class} derived from @code{parent}, a
+previously defined event class."
+  (let ((parentclass (ly:make-event-class parent)))
+    (cond
+     ((ly:make-event-class class)
+      (ly:error (_ "Cannot redefine event class `~S'") class))
+     ((not parentclass)
+      (ly:error (_ "Undefined parent event class `~S'" parentclass)))
+     (else
+      (hashq-set! ancestor-lookup
+                  class
+                  (cons class parentclass))))
+    *unspecified*))
+
+;; TODO: Allow entering more complex classes, by taking unions.
+(define-public (ly:make-event-class leaf)
+  (hashq-ref ancestor-lookup leaf))
+
 (define-public (ly:in-event-class? ev cl)
   "Does event @var{ev} belong to event class @var{cl}?"
   (memq cl (ly:event-property ev 'class)))
 
-(define-public all-event-classes
-  (fold (lambda (elt classlist)
-         (event-class-cons (cdr elt) (car elt) classlist))
-       '() event-classes))
-
 ;; does this exist in guile already?
 (define (map-tree f t)
   (cond
 (define (expand-event-tree root)
   (let ((children (assq root event-classes)))
     (if children
-       (cons root (map expand-event-tree (cdr children)))
-       root)))
+        (cons root (map expand-event-tree (cdr children)))
+        root)))
 
 ;; produce neater representation of music event tree.
 ;; TODO: switch to this representation for the event-classes list?
 (define music-event-tree (expand-event-tree 'music-event))
 (define (sort-tree t)
   (define (stringify el)
-             (if (symbol? el)
-                 (symbol->string el)
-                 (symbol->string (first el))))
+    (if (symbol? el)
+        (symbol->string el)
+        (symbol->string (first el))))
   (if (list? t)
       (sort (map (lambda (el)
-                  (if (list? el)
-                      (cons (car el) (sort-tree (cdr el)))
-                      el))
-                t)
-           (lambda (a b) (string<? (stringify a) (stringify b))))
+                   (if (list? el)
+                       (cons (car el) (sort-tree (cdr el)))
+                       el))
+                 t)
+            (lambda (a b) (string<? (stringify a) (stringify b))))
       t))
 
 ;;(use-modules (ice-9 pretty-print))
    ;; Special case for lists reduces stack consumption.
    ((list? e) (map simplify e))
    ((pair? e) (cons (simplify (car e))
-                   (simplify (cdr e))))
+                    (simplify (cdr e))))
    ((ly:stream-event? e)
     (list 'unquote (list 'make-stream-event (simplify (Stream_event::dump e)))))
    ((ly:music? e)
     (list 'unquote (music->make-music e)))
    ((ly:moment? e)
     (list 'unquote `(ly:make-moment
-                    ,(ly:moment-main-numerator e)
-                    ,(ly:moment-main-denominator e)
-                    . ,(if (eq? 0 (ly:moment-grace-numerator e))
-                           '()
-                           (list (ly:moment-grace-numerator e)
-                                 (ly:moment-grace-denominator e))))))
+                     ,(ly:moment-main-numerator e)
+                     ,(ly:moment-main-denominator e)
+                     . ,(if (zero? (ly:moment-grace-numerator e))
+                            '()
+                            (list (ly:moment-grace-numerator e)
+                                  (ly:moment-grace-denominator e))))))
    ((ly:duration? e)
     (list 'unquote `(ly:make-duration
-                    ,(ly:duration-log e)
-                    ,(ly:duration-dot-count e)
-                    ,(ly:duration-scale))))
+                     ,(ly:duration-log e)
+                     ,(ly:duration-dot-count e)
+                     ,(ly:duration-scale))))
    ((ly:pitch? e)
     (list 'unquote `(ly:make-pitch
-                    ,(ly:pitch-octave e)
-                    ,(ly:pitch-notename e)
-                    ,(ly:pitch-alteration e))))
+                     ,(ly:pitch-octave e)
+                     ,(ly:pitch-notename e)
+                     ,(ly:pitch-alteration e))))
    ((ly:input-location? e)
     (list 'unquote '(ly:dummy-input-location)))
    (#t e)))
index 8d9c457037538c4bddd95e8d44ecaad4ee1c6105..59a97b69670867c6c85ed0dd4d8aae976374c9b7 100644 (file)
@@ -34,51 +34,33 @@ note)."
 (ly:add-interface
  'ambitus-interface
  "The line between note heads for a pitch range."
- '(gap note-heads thickness))
+ '(gap
+   length-fraction
+   maximum-gap
+   note-heads
+   thickness))
 
 (ly:add-interface
  'bar-line-interface
  "Print a special bar symbol.  It replaces the regular bar
 symbol with a special symbol.  The argument @var{bartype}
 is a string which specifies the kind of bar line to print.
-Options are @code{|}, @code{:|}, @code{|:}, @code{:|:}, @code{:|.|:},
-@code{:|.:}, @code{.}, @code{||}, @code{|.}, @code{.|}, @code{.|.},
-@code{|.|}, @code{:}, @code{dashed}, @code{'} and @code{S}.
-
-These produce, respectively, a normal bar line, a right repeat, a left repeat,
-a thick double repeat, a thin-thick-thin double repeat,
-a thin-thick double repeat, a thick bar, a double bar, a start bar,
-an end bar, a thick double bar, a thin-thick-thin bar,
-a dotted bar, a dashed bar, a tick as bar line and a segno bar.
-
-In addition, there is an option
-@code{||:} which is equivalent to @code{|:} except at line
-breaks, where it produces a double bar (@code{||}) at the
-end of the line and a repeat sign (@code{|:}) at the
-beginning of the new line.
-
-For segno, @code{S} produces a segno sign except at line breaks,
-where it produces a double bar (@code{||}) at the
-end of the line and a segno sign at the beginning of the new line.
-@code{|S} is equivalent to @code{S} but produces a simple bar line
-(@code{|}) instead of a double bar line (@code{||}) at line breaks.
-@code{S|} produces the segno sign at line breaks and starts the following
-line without special bar lines.
-
-@code{S|:} and @code{:|S} are used for repeat/segno combinations that are
-separated at line breaks.  Alternatively, @code{.S|:} and @code{:|S.}
-may be used which combine repeat signs and segno at the same line in
-case of a line break.  @code{:|S|:} is a combination of a left repeat
-(@code{:|}), a segno (@code{S}) and a right repeat @code{|:} which
-splits before the segno at line breaks; @code{:|S.|:} splits after
-the segno sign.
-
-If @var{bartype} is set to @code{empty} then nothing is
-printed, but a line break is allowed at that spot.
+
+The list of allowed glyphs and predefined bar lines can be
+found in @file{scm/bar-line.scm}.
 
 @code{gap} is used for the gaps in dashed bar lines."
- '(allow-span-bar bar-extent gap glyph glyph-name has-span-bar
-   hair-thickness kern thin-kern thick-thickness))
+ '(allow-span-bar
+   bar-extent
+   gap
+   glyph
+   glyph-name
+   hair-thickness
+   has-span-bar
+   kern
+   rounded
+   thin-kern
+   thick-thickness))
 
 (ly:add-interface
  'bass-figure-interface
@@ -93,7 +75,15 @@ printed, but a line break is allowed at that spot.
 (ly:add-interface
  'bend-after-interface
  "A doit or drop."
- '(thickness delta-position))
+ '(delta-position
+   thickness))
+
+(ly:add-interface
+ 'clef-modifier-interface
+ "The number describing transposition of the clef, placed below
+or above clef sign. Usually this is 8 (octave transposition)
+or 15 (two octaves), but LilyPond allows any integer here."
+ '())
 
 (ly:add-interface
  'dynamic-interface
@@ -136,23 +126,28 @@ printed, but a line break is allowed at that spot.
 (ly:add-interface
  'footnote-spanner-interface
  "Make a footnote spanner."
- '(footnote-text spanner-placement))
+ '(footnote-text
+   spanner-placement))
 
 (ly:add-interface
  'fret-diagram-interface
  "A fret diagram"
- '(align-dir fret-diagram-details size dot-placement-list
+ '(align-dir
+   dot-placement-list
+   fret-diagram-details
+   size
    thickness))
 
 (ly:add-interface
 'glissando-interface
 "A glissando."
 '(glissando-index))
+ 'glissando-interface
+ "A glissando."
+ '(glissando-index))
 
 (ly:add-interface
  'grace-spacing-interface
  "Keep track of durations in a run of grace notes."
- '(columns common-shortest-duration))
+ '(columns
+   common-shortest-duration))
 
 (ly:add-interface
  'inline-accidental-interface
@@ -200,6 +195,12 @@ accidentals)."
  "A rehearsal mark."
  '())
 
+(ly:add-interface
+ 'measure-counter-interface
+ "A counter for numbering measures."
+ '(columns
+   count-from))
+
 (ly:add-interface
  'metronome-mark-interface
  "A metronome mark."
@@ -223,12 +224,16 @@ accidentals)."
 (ly:add-interface
  'parentheses-interface
  "Parentheses for other objects."
- '(padding stencils))
+ '(padding
+   stencils))
 
 (ly:add-interface
  'percent-repeat-interface
  "Beat, Double and single measure repeats."
- '(dot-negative-kern slash-negative-kern slope thickness))
+ '(dot-negative-kern
+   slash-negative-kern
+   slope
+   thickness))
 
 (ly:add-interface
  'piano-pedal-interface
@@ -254,15 +259,20 @@ interesting enough to maintain a hara-kiri staff."
 (ly:add-interface
  'spacing-options-interface
  "Supports setting of spacing variables."
- '(spacing-increment shortest-duration-space))
+ '(spacing-increment
+   shortest-duration-space))
 
 (ly:add-interface
  'span-bar-interface
  "A bar line that is spanned between other barlines.
   This interface is used for bar lines that connect different
   staves."
- '(glyph-name elements pure-Y-common pure-relevant-grobs
-   pure-relevant-items pure-relevant-spanners))
+ '(glyph-name
+   elements
+   pure-Y-common
+   pure-relevant-grobs
+   pure-relevant-items
+   pure-relevant-spanners))
 
 (ly:add-interface
  'stanza-number-interface
@@ -282,7 +292,10 @@ interesting enough to maintain a hara-kiri staff."
 (ly:add-interface
  'system-start-text-interface
  "Text in front of the system."
- '(long-text self-alignment-X self-alignment-Y text))
+ '(long-text
+   self-alignment-X
+   self-alignment-Y
+   text))
 
 (ly:add-interface
  'tab-note-head-interface
index 6502dd9d722a4b94d3f5641101e925a86b3d4b17..00cbaeb55c67c33cce65e628a8a07050c10f02d9 100644 (file)
@@ -31,9 +31,9 @@
      (apply define-grob-property x))
 
    `(
-;;
-;; a
-;;
+;;;
+;;; a
+;;;
      (add-stem-support ,boolean? "If set, the @code{Stem} object is
 included in this script's support.")
      (after-line-breaking ,boolean? "Dummy property, used to trigger
@@ -79,9 +79,9 @@ and @code{around} behave like @code{ignore}.")
 grobs, this should contain only one number.")
 
 
-;;
-;; b
-;;
+;;;
+;;; b
+;;;
      (bar-extent ,number-pair? "The Y-extent of the actual bar line.
 This may differ from @code{Y-extent} because it does not include the
 dots in a repeat bar line.")
@@ -167,11 +167,9 @@ stick out of its bounds?")
      (broken-bound-padding ,number? "The amount of padding to insert
 when a spanner is broken at a line break.")
 
-;;
-;; c
-;;
-     (c0-position ,integer? "An integer indicating the position of
-middle@tie{}C.")
+;;;
+;;; c
+;;;
      (circled-tip ,boolean? "Put a circle at start/@/end of
 hairpins (al/@/del niente).")
      (clip-edges ,boolean? "Allow outward pointing beamlets at the
@@ -200,10 +198,13 @@ this grob looks as a continued break.")
      (control-points ,list? "List of offsets (number pairs) that form
 control points for the tie, slur, or bracket shape.  For B@'eziers,
 this should list the control points of a third-order B@'ezier curve.")
+     (count-from ,integer? "The first measure in a measure count
+receives this number.  The following measures are numbered in
+increments from this initial value.")
 
-;;
-;; d
-;;
+;;;
+;;; d
+;;;
      (damping ,number? "Amount of beam slope damping.")
      (dash-definition ,pair? "List of @code{dash-elements} defining the
 dash structure.  Each @code{dash-element} has a starting t value,
@@ -244,9 +245,9 @@ elements closer together.")
 i.e., @code{0} = whole note, @code{1} = half note, etc.")
 
 
-;;
-;; e
-;;
+;;;
+;;; e
+;;;
      (eccentricity ,number? "How asymmetrical to make a slur.
 Positive means move the center to the right.")
      (edge-height ,pair? "A pair of numbers specifying the heights of
@@ -276,16 +277,20 @@ problem, we pad each item by this amount (by adding the @q{car} on the
 left side of the item and adding the @q{cdr} on the right side of the
 item).  In order to make a grob take up no horizontal space at all,
 set this to @code{(+inf.0 . -inf.0)}.")
-     (extra-X-extent ,number-pair? "A grob is enlarged in
-X@tie{}dimension by this much.")
-     (extra-Y-extent ,number-pair? "A grob is enlarged in
-Y@tie{}dimension by this much.")
 
 
-;;
-;; f
-;;
+;;;
+;;; f
+;;;
      (flag-count ,number? "The number of tremolo beams.")
+     (flat-positions ,list? "Flats in key signatures are placed
+within the specified ranges of staff-positions.  The general form
+is a list of pairs, with one pair for each type of clef, in order
+of the staff-position at which each clef places C:
+@code{(alto treble tenor soprano baritone mezzosoprano bass)}.
+If the list contains a single element it applies for all clefs.
+A single number in place of a pair sets accidentals within the octave
+ending at that staff-position.")
      (font-encoding ,symbol? "The font encoding is the broadest
 category for selecting a font.  Currently, only lilypond's system
 fonts (Emmentaler) are using this property.  Available
@@ -415,25 +420,32 @@ read from the NonMusicalPaperColumn that begins the measure.")
      (full-size-change ,boolean? "Don't make a change clef smaller.")
 
 
-;;
-;; g
-;;
+;;;
+;;; g
+;;;
      (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.")
-     (glyph-name ,string? "The glyph name within the font.")
+property.
+
+In combination with (span) bar lines, it is a string resembling the
+bar line appearance in ASCII form.")
+     (glyph-name ,string? "The glyph name within the font.
+
+In the context of (span) bar lines, @var{glyph-name} represents
+a processed form of @code{glyph}, where decisions about line breaking
+etc. are already taken.")
      (glyph-name-alist ,list? "An alist of key-string pairs.")
      (graphical ,boolean? "Display in graphical (vs. text) form.")
      (grow-direction ,ly:dir? "Crescendo or decrescendo?")
 
 
-;;
-;; h
-;;
+;;;
+;;; h
+;;;
      (hair-thickness ,number? "Thickness of the thin line in a bar
 line.")
      (harp-pedal-details ,list? "An alist of detailed grob properties
@@ -474,6 +486,9 @@ units.")
 slur, the closer it is to this height.")
      (hide-tied-accidental-after-break ,boolean? "If set, an accidental
 that appears on a tied note after a line break will not be displayed.")
+     (horizon-padding ,number? "The amount to pad the axis
+along which a @code{Skyline} is built for the
+@code{side-position-interface}.")
      (horizontal-shift ,integer? "An integer that identifies ranking
 of @code{NoteColumn}s for horizontal shifting.  This is used by
 @rinternals{note-collision-interface}.")
@@ -481,9 +496,9 @@ of @code{NoteColumn}s for horizontal shifting.  This is used by
 left and one to the right of this grob.")
 
 
-;;
-;; i
-;;
+;;;
+;;; i
+;;;
      (id ,string? "An id string for the grob.  Depending on the typestting
 backend being used, this id will be assigned to a group containing all of
 the stencils that comprise a given grob.  For example, in the svg backend,
@@ -500,9 +515,9 @@ configuration to this index, and print the respective scores.")
 slur quants to this position, and print the respective scores.")
 
 
-;;
-;; k
-;;
+;;;
+;;; k
+;;;
      (keep-inside-line ,boolean? "If set, this column cannot have
 objects sticking into the margin.")
      (kern ,ly:dimension? "Amount of extra white space to add.  For
@@ -513,9 +528,9 @@ correction amount for kneed beams.  Set between @code{0} for no
 correction and @code{1} for full correction.")
 
 
-;;
-;; l
-;;
+;;;
+;;; l
+;;;
      (labels ,list? "List of labels (symbols) placed on a column.")
      (layer ,integer? "An integer which determines the order of printing
 objects.  Objects with the lowest value of layer are drawn first, then
@@ -554,14 +569,16 @@ contour.")
      (long-text ,markup? "Text markup.  See @ruser{Formatting text}.")
 
 
-;;
-;; m
-;;
+;;;
+;;; m
+;;;
      (max-beam-connect ,integer? "Maximum number of beams to connect
 to beams from this stem.  Further beams are typeset as beamlets.")
      (max-stretch ,number? "The maximum amount that this
 @code{VerticalAxisGroup} can be vertically stretched (for example, in
 order to better fill a page).")
+     (maximum-gap ,number? "Maximum value allowed for @code{gap}
+property.")
      (measure-count ,integer? "The number of measures for a
 multi-measure rest.")
      (measure-length ,ly:moment? "Length of a measure.  Used in some
@@ -597,9 +614,9 @@ X@tie{}dimension, measured in @code{staff-space} units.")
 Y@tie{}dimension, measured in @code{staff-space} units.")
 
 
-;;
-;; n
-;;
+;;;
+;;; n
+;;;
      (neutral-direction ,ly:dir? "Which direction to take in the
 center of the staff.")
      (neutral-position ,number? "Position (in half staff spaces) where
@@ -650,25 +667,44 @@ between 0 and 1.")
 easy-notation note heads.")
 
 
-;;
-;; o
-;;
+;;;
+;;; o
+;;;
      (outside-staff-horizontal-padding ,number? "By default, an
 outside-staff-object can be placed so that is it very close to another
 grob horizontally.  If this property is set, the outside-staff-object
 is raised so that it is not so close to its neighbor.")
      (outside-staff-padding ,number? "The padding to place between
-this grob and the staff when spacing according to
-@code{outside-staff-priority}.")
+grobs when spacing according to @code{outside-staff-priority}.
+Two grobs with different @code{outside-staff-padding} values have
+the larger value of padding between them.")
+     (outside-staff-placement-directive ,symbol? "One of four directives
+telling how outside staff objects should be placed.
+@itemize @bullet
+@item
+@code{left-to-right-greedy} -- Place each successive grob from left to
+right.
+@item
+@code{left-to-right-polite} -- Place a grob from left to right only if
+it does not potentially overlap with another grob that has been placed
+on a pass through a grob array. If there is overlap, do another pass to
+determine placement.
+@item
+@code{right-to-left-greedy} -- Same as @code{left-to-right-greedy}, but
+from right to left.
+@item
+@code{right-to-left-polite} -- Same as @code{left-to-right-polite}, but
+from right to left.
+@end itemize")
      (outside-staff-priority ,number? "If set, the grob is positioned
 outside the staff in such a way as to avoid all collisions.  In case
 of a potential collision, the grob with the smaller
 @code{outside-staff-priority} is closer to the staff.")
 
 
-;;
-;; p
-;;
+;;;
+;;; p
+;;;
      (packed-spacing ,boolean? "If set, the notes are spaced as
 tightly as possible.")
      (padding ,ly:dimension? "Add this much extra space between
@@ -698,10 +734,12 @@ positions are requested, the closest one is taken.")
      (prefer-dotted-right ,boolean? "For note collisions, prefer to
 shift dotted up-note to the right, rather than shifting just the
 dot.")
+     (protrusion ,number? "In an arpeggio bracket, the length of the
+horizontal edges.")
 
-;;
-;; r
-;;
+;;;
+;;; r
+;;;
      (ratio ,number? "Parameter for slur shape.  The higher this
 number, the quicker the slur attains its @code{height-limit}.")
      (remove-empty ,boolean? "If set, remove group if it contains no
@@ -722,27 +760,38 @@ of an object (e.g., between note and its accidentals).")
      (rotation ,list? "Number of degrees to rotate this object, and
 what point to rotate around.  For example, @code{'(45 0 0)} rotates
 by 45 degrees around the center of this object.")
+     (rounded ,boolean? "Decide whether lines should be drawn rounded or not.")
      (round-up-to-longer-rest ,boolean? "Displays the longer multi-measure
 rest when the length of a measure is between two values of
 @code{usable-duration-logs}.  For example, displays a breve instead of a whole
 in a 3/2 measure.")
 
 
-;;
-;; s
-;;
+;;;
+;;; s
+;;;
      (same-direction-correction ,number? "Optical correction amount
 for stems that are placed in tight configurations.  This amount is
 used for stems with the same direction to compensate for note head to
 stem distance.")
-     (script-priority ,number? "A sorting key that determines in what
-order a script is within a stack of scripts.")
+     (script-priority ,number? "A key for determining the order of
+scripts in a stack, by being added to the position of the script in
+the user input, the sum being the overall priority.  Smaller means
+closer to the head.")
      (self-alignment-X ,number? "Specify alignment of an object.  The
 value @w{@code{-1}} means left aligned, @code{0}@tie{}centered, and
 @code{1}@tie{}right-aligned in X@tie{}direction.  Other numerical
 values may also be specified.")
      (self-alignment-Y ,number? "Like @code{self-alignment-X} but for
 the Y@tie{}axis.")
+     (sharp-positions ,list? "Sharps in key signatures are placed
+within the specified ranges of staff-positions.  The general form
+is a list of pairs, with one pair for each type of clef, in order
+of the staff-position at which each clef places C:
+@code{(alto treble tenor soprano baritone mezzosoprano bass)}.
+If the list contains a single element it applies for all clefs.
+A single number in place of a pair sets accidentals within the octave
+ending at that staff-position.")
      (shorten-pair ,number-pair? "The lengths to shorten a
 text-spanner on both sides, for example a pedal bracket.  Positive
 values shorten the text-spanner, while negative values lengthen it.")
@@ -780,6 +829,8 @@ slashes in percent repeat glyphs.  Larger values bring the two
 elements closer together.")
      (slope ,number? "The slope of this object.")
      (slur-padding ,number? "Extra distance between slur and script.")
+     (snap-radius ,number? "The maximum distance between two objects that
+will cause them to snap to alignment along an axis.")
      (space-alist ,list? "A table that specifies distances between
 prefatory items, like clef and time-signature.  The format is an alist
 of spacing tuples: @code{(@var{break-align-symbol} @var{type}
@@ -894,11 +945,11 @@ typeset.  Valid choices depend on the @code{stencil} callback reading
 this property.")
 
 
-;;
-;; t
-;;
+;;;
+;;; t
+;;;
      (text ,markup? "Text markup.  See @ruser{Formatting text}.")
-;;FIXME -- Should both be the same?
+     ;;FIXME -- Should both be the same?
      (text-direction ,ly:dir? "This controls the ordering of the
 words.  The default @code{RIGHT} is for roman text.  Arabic or Hebrew
 should use @code{LEFT}.")
@@ -910,8 +961,8 @@ should use @code{LEFT}.")
      (tie-configuration ,list? "List of @code{(@var{position} .
 @var{dir})} pairs, indicating the desired tie configuration, where
 @var{position} is the offset from the center of the staff in staff
-space and @var{dir} indicates the direction of the tie
-(@code{1}=>up, @w{@code{-1}}=>down, @code{0}=>center).  A non-pair entry
+space and @var{dir} indicates the direction of the tie (@code{1}=>up,
+@w{@code{-1}}=>down, @code{0}=>center).  A non-pair entry
 in the list causes the corresponding tie to be formatted
 automatically.")
      (to-barline ,boolean? "If true, the spanner will stop at the bar
@@ -924,9 +975,9 @@ possible.")
      (transparent ,boolean? "This makes the grob invisible.")
 
 
-;;
-;; u
-;;
+;;;
+;;; u
+;;;
      (uniform-stretching ,boolean? "If set, items stretch
 proportionally to their durations.  This looks better in complex
 polyphonic patterns.")
@@ -937,16 +988,15 @@ can be used in typesetting the grob.")
      (use-skylines ,boolean? "Should skylines be used for side
 positioning?")
 
-;;
-;; v
-;;
+;;;
+;;; v
+;;;
      (vertical-skylines ,ly:skyline-pair? "Two skylines, one above and
 one below this grob.")
 
-
-;;
-;; w
-;;
+;;;
+;;; w
+;;;
      (when ,ly:moment? "Global time step associated with this column
 happen?")
      (whiteout ,boolean? "If true, the grob is printed over a white
@@ -958,9 +1008,9 @@ space.")
 texts.")
 
 
-;;
-;; x
-;;
+;;;
+;;; x
+;;;
      (X-extent ,number-pair? "Hard coded extent in X@tie{}direction.")
      (X-offset ,number? "The horizontal amount that this object is
 moved relative to its X-parent.")
@@ -969,16 +1019,16 @@ in the form @code{(@var{left} . @var{right})}, where both @var{left} and
 @var{right} are in @code{staff-space} units of the current staff.")
 
 
-;;
-;; y
-;;
+;;;
+;;; y
+;;;
      (Y-extent ,number-pair? "Hard coded extent in Y@tie{}direction.")
      (Y-offset ,number? "The vertical amount that this object is moved
 relative to its Y-parent.")
 
-;;
-;; z
-;;
+;;;
+;;; z
+;;;
      (zigzag-length ,ly:dimension? "The length of the lines of a
 zigzag, relative to @code{zigzag-width}.  A value of@tie{}@code{1}
 gives 60-degree zigzags.")
@@ -1014,7 +1064,6 @@ constructed from a whole number of squiggles.")
 dynamic spanners.")
      (all-elements ,ly:grob-array? "An array of all grobs in this line.  Its
 function is to protect objects from being garbage collected.")
-     (arpeggio ,ly:grob? "A pointer to an @code{Arpeggio} object.")
      (axis-group-parent-X ,ly:grob? "Containing X@tie{}axis group.")
      (axis-group-parent-Y ,ly:grob? "Containing Y@tie{}axis group.")
 
@@ -1028,6 +1077,8 @@ column as start/@/begin point.  Only columns that have grobs or act as
 bounds are spaced.")
      (bracket ,ly:grob? "The bracket for a number.")
 
+     (c0-position ,integer? "An integer indicating the position of
+middle@tie{}C.")
      (columns ,ly:grob-array? "An array of grobs, typically containing
 @code{PaperColumn} or @code{NoteColumn} objects.")
      (concurrent-hairpins ,ly:grob-array? "All concurrent hairpins.")
@@ -1053,8 +1104,6 @@ in addition to notes and stems.")
 a whole system.")
      (footnotes-after-line-breaking ,ly:grob-array? "Footnote grobs of
 a broken system.")
-     (full-score-pure-minimum-translations ,list? "A list of translations
-for a full score's worth of grobs.")
 
      (glissando-index ,integer? "The index of a glissando in its note
 column.")
@@ -1079,6 +1128,8 @@ empty in a particular staff, then that staff is erased.")
 for this column.")
 
      (melody-spanner ,ly:grob? "The @code{MelodyItem} object for a stem.")
+     (minimum-translations-alist ,list? "An list of translations for a given
+start and end point.")
 
      (neighbors ,ly:grob-array? "The X-axis neighbors of a grob. Used by the
 pure-from-neighbor-interface to determine various grob heights.")
@@ -1108,8 +1159,6 @@ relevant for finding the @code{pure-Y-extent}.")
 
      (side-support-elements ,ly:grob-array? "The side support, an array of
 grobs.")
-     (skyline-quantizing ,index? "The number of boxes to break a
-slur into when calculating its skyline.")
      (slur ,ly:grob? "A pointer to a @code{Slur} object.")
      (spacing ,ly:grob? "The spacing spanner governing this section.")
      (spacing-wishes ,ly:grob-array? "An array of note spacing or staff spacing
@@ -1134,6 +1183,11 @@ results, use @code{LEFT} and @code{RIGHT}.")
      (tuplet-number ,ly:grob? "The number for a bracket.")
      (tuplet-start ,boolean? "Is stem at the start of a tuplet?")
      (tuplets ,ly:grob-array? "An array of smaller tuplet brackets.")
+
+     (vertical-alignment ,ly:grob? "The VerticalAlignment in a System.")
+     (vertical-skyline-elements ,ly:grob-array? "An array of grobs
+used to create vertical skylines.")
+
      (X-colliding-grobs ,ly:grob-array? "Grobs that can collide
 with a self-aligned grob on the X-axis.")
      (Y-colliding-grobs ,ly:grob-array? "Grobs that can collide
@@ -1153,8 +1207,15 @@ chord changes.")
 
      (cause ,scheme? "Any kind of causation objects (i.e., music, or perhaps
 translator) that was the cause for this grob.")
-     (cross-staff ,boolean? "For a beam or a stem, this is true if we
-depend on inter-staff spacing.")
+     (cross-staff ,boolean? "True for grobs whose @code{Y-extent} depends on
+inter-staff spacing.  The extent is measured relative to the grobs's parent
+staff (more generally, its @code{VerticalAxisGroup}) so this boolean flags
+grobs that are not rigidly fixed to their parent staff.
+Beams that join notes from two staves are @code{cross-staff}.
+Grobs that are positioned around such beams are also @code{cross-staff}.
+Grobs that are grouping objects, however, like @code{VerticalAxisGroups}
+will not in general be marked @code{cross-staff} when some of the members
+of the group are @code{cross-staff}.")
 
      (delta-position ,number? "The vertical position difference.")
 
index 76f578ab4a2a1f0e106da4931fad1540238d8a04..af69d6697160a128f2ae0c7afc46e24db7cbcf20 100644 (file)
 
 ;; TODO: junk the meta field in favor of something more compact?
 
-(define-public all-grob-descriptions
+
+(define-session-public all-grob-descriptions
   `(
     (Accidental
      . (
-       (alteration . ,accidental-interface::calc-alteration)
-       (avoid-slur . inside)
-       (glyph-name-alist . ,standard-alteration-glyph-name-alist)
-       (stencil . ,ly:accidental-interface::print)
-       (X-extent . ,ly:accidental-interface::width)
-       (Y-extent . ,ly:accidental-interface::height)
-       (meta . ((class . Item)
-                (interfaces . (accidental-interface
-                               inline-accidental-interface
-                               font-interface))))))
+        (alteration . ,accidental-interface::calc-alteration)
+        (avoid-slur . inside)
+        (glyph-name . ,accidental-interface::glyph-name)
+        (glyph-name-alist . ,standard-alteration-glyph-name-alist)
+        (stencil . ,ly:accidental-interface::print)
+        (horizontal-skylines . ,(ly:make-unpure-pure-container ly:accidental-interface::horizontal-skylines))
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (X-extent . ,ly:accidental-interface::width)
+        (Y-extent . ,accidental-interface::height)
+        (meta . ((class . Item)
+                 (interfaces . (accidental-interface
+                                inline-accidental-interface
+                                font-interface))))))
 
     (AccidentalCautionary
      . (
-       (alteration . ,accidental-interface::calc-alteration)
-       (avoid-slur . inside)
-       (glyph-name-alist . ,standard-alteration-glyph-name-alist)
-       (parenthesized . #t)
-       (stencil . ,ly:accidental-interface::print)
-       (Y-extent . ,ly:accidental-interface::height)
-       (meta . ((class . Item)
-                (interfaces . (accidental-interface
-                               inline-accidental-interface
-                               font-interface))))))
+        (alteration . ,accidental-interface::calc-alteration)
+        (avoid-slur . inside)
+        (glyph-name-alist . ,standard-alteration-glyph-name-alist)
+        (parenthesized . #t)
+        (stencil . ,ly:accidental-interface::print)
+        (Y-extent . ,accidental-interface::height)
+        (meta . ((class . Item)
+                 (interfaces . (accidental-interface
+                                inline-accidental-interface
+                                font-interface))))))
 
     (AccidentalPlacement
      . (
-       (direction .  ,LEFT)
-       (positioning-done . ,ly:accidental-placement::calc-positioning-done)
+        (direction .  ,LEFT)
+        (positioning-done . ,ly:accidental-placement::calc-positioning-done)
 
-       ;; this is quite small, but it is very ugly to have
-       ;; accs closer to the previous note than to the next one.
-       (right-padding . 0.15)
+        ;; this is quite small, but it is very ugly to have
+        ;; accs closer to the previous note than to the next one.
+        (right-padding . 0.15)
 
-       ;; for horizontally stacked scripts.
-       (script-priority .  -100)
+        ;; for horizontally stacked scripts.
+        (script-priority .  -100)
 
-       (X-extent . ,ly:axis-group-interface::width)
-       (meta . ((class . Item)
-                (interfaces . (accidental-placement-interface))))))
+        (X-extent . ,ly:axis-group-interface::width)
+        (meta . ((class . Item)
+                 (interfaces . (accidental-placement-interface))))))
 
     (AccidentalSuggestion
      . (
-       (alteration . ,accidental-interface::calc-alteration)
-       (direction . ,UP)
-       (font-size . -2)
-       (glyph-name-alist . ,standard-alteration-glyph-name-alist)
-       (outside-staff-priority . 0)
-       (script-priority . 0)
-       (self-alignment-X . ,CENTER)
-       (side-axis . ,Y)
-       (staff-padding . 0.25)
-       (stencil . ,ly:accidental-interface::print)
-       (use-skylines . #t)
-       (X-extent . ,ly:accidental-interface::width)
-       (X-offset . ,(ly:make-simple-closure
-                     `(,+
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::centered-on-x-parent))
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-aligned-on-self)))))
-       (Y-extent . ,ly:accidental-interface::height)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Item)
-                (interfaces . (accidental-interface
-                               accidental-suggestion-interface
-                               font-interface
-                               script-interface
-                               self-alignment-interface
-                               side-position-interface))))))
+        (alteration . ,accidental-interface::calc-alteration)
+        (direction . ,UP)
+        (font-size . -2)
+        (glyph-name-alist . ,standard-alteration-glyph-name-alist)
+        (outside-staff-priority . 0)
+        (script-priority . 0)
+        (self-alignment-X . ,CENTER)
+        (side-axis . ,Y)
+        (staff-padding . 0.25)
+        (stencil . ,ly:accidental-interface::print)
+        (X-extent . ,ly:accidental-interface::width)
+        (X-offset . ,(ly:make-simple-closure
+                      `(,+
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::centered-on-x-parent))
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-aligned-on-self)))))
+        (Y-extent . ,accidental-interface::height)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Item)
+                 (interfaces . (accidental-interface
+                                accidental-suggestion-interface
+                                font-interface
+                                script-interface
+                                self-alignment-interface
+                                side-position-interface))))))
 
     (Ambitus
      . (
-       (axes . (,X ,Y))
-       (break-align-symbol . ambitus)
-       (break-visibility . ,begin-of-line-visible)
-       (non-musical . #t)
-       (space-alist . (
-                       (cue-end-clef . (extra-space . 0.5))
-                       (clef . (extra-space . 0.5))
-                       (cue-clef . (extra-space . 0.5))
-                       (key-signature . (extra-space . 0.0))
-                       (staff-bar . (extra-space . 0.0))
-                       (time-signature . (extra-space . 0.0))
-                       (first-note . (fixed-space . 0.0))))
-       (X-extent . ,ly:axis-group-interface::width)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (meta . ((class . Item)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (ambitus-interface
-                               axis-group-interface
-                               break-aligned-interface))))))
+        (axes . (,X ,Y))
+        (break-align-symbol . ambitus)
+        (break-visibility . ,begin-of-line-visible)
+        (non-musical . #t)
+        (space-alist . (
+                        (cue-end-clef . (extra-space . 0.5))
+                        (clef . (extra-space . 0.5))
+                        (cue-clef . (extra-space . 0.5))
+                        (key-signature . (extra-space . 0.0))
+                        (staff-bar . (extra-space . 0.0))
+                        (time-signature . (extra-space . 0.0))
+                        (first-note . (fixed-space . 0.0))))
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (meta . ((class . Item)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (ambitus-interface
+                                axis-group-interface
+                                break-aligned-interface))))))
 
     (AmbitusAccidental
      . (
-       (direction . ,LEFT)
-       (glyph-name-alist . ,standard-alteration-glyph-name-alist)
-       (padding . 0.5)
-       (side-axis . ,X)
-       (stencil . ,ly:accidental-interface::print)
-       (X-offset . ,ly:side-position-interface::x-aligned-side)
-       (Y-extent . ,ly:accidental-interface::height)
-       (meta . ((class . Item)
-                (interfaces . (accidental-interface
-                               break-aligned-interface
-                               font-interface
-                               side-position-interface))))))
+        (direction . ,LEFT)
+        (glyph-name-alist . ,standard-alteration-glyph-name-alist)
+        (padding . 0.5)
+        (side-axis . ,X)
+        (stencil . ,ly:accidental-interface::print)
+        (X-offset . ,ly:side-position-interface::x-aligned-side)
+        (Y-extent . ,accidental-interface::height)
+        (meta . ((class . Item)
+                 (interfaces . (accidental-interface
+                                break-aligned-interface
+                                font-interface
+                                side-position-interface))))))
 
     (AmbitusLine
      . (
-       (gap . 0.35)
-       (stencil . ,ambitus::print)
-       (thickness . 2)
-       (X-offset . ,ly:self-alignment-interface::centered-on-x-parent)
-       (meta . ((class . Item)
-                (interfaces . (ambitus-interface
-                               font-interface))))))
+        (gap . ,ambitus-line::calc-gap)
+        (length-fraction . 0.7)
+        (maximum-gap . 0.45)
+        (stencil . ,ambitus::print)
+        (thickness . 2)
+        (X-offset . ,ly:self-alignment-interface::centered-on-x-parent)
+        (meta . ((class . Item)
+                 (interfaces . (ambitus-interface
+                                font-interface))))))
 
     (AmbitusNoteHead
      . (
-       (duration-log . 2)
-       (glyph-name . ,note-head::calc-glyph-name)
-       (stencil . ,ly:note-head::print)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
-                (interfaces . (ambitus-interface
-                               font-interface
-                               ledgered-interface
-                               note-head-interface
-                               rhythmic-head-interface
-                               staff-symbol-referencer-interface))))))
+        (duration-log . 2)
+        (glyph-name . ,note-head::calc-glyph-name)
+        (stencil . ,ly:note-head::print)
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (ambitus-interface
+                                font-interface
+                                ledgered-interface
+                                note-head-interface
+                                rhythmic-head-interface
+                                staff-symbol-referencer-interface))))))
 
     (Arpeggio
      . (
-       (direction . ,LEFT)
-       (padding . 0.5)
-       (positions . ,ly:arpeggio::calc-positions)
-       (script-priority . 0)
-       (side-axis . ,X)
-       (staff-position . 0.0)
-       (stencil . ,ly:arpeggio::print)
-       (X-extent . ,ly:arpeggio::width)
-       (X-offset . ,ly:side-position-interface::x-aligned-side)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
-                (interfaces . (arpeggio-interface
-                               font-interface
-                               side-position-interface
-                               staff-symbol-referencer-interface))))))
+       (cross-staff . ,ly:arpeggio::calc-cross-staff)
+        (direction . ,LEFT)
+        (padding . 0.5)
+        (positions . ,ly:arpeggio::calc-positions)
+        (protrusion . 0.4)
+        (script-priority . 0)
+        (side-axis . ,X)
+        (staff-position . 0.0)
+        (stencil . ,ly:arpeggio::print)
+        (X-extent . ,ly:arpeggio::width)
+        (Y-extent . ,(grob::unpure-Y-extent-from-stencil ly:arpeggio::pure-height))
+        (X-offset . ,ly:side-position-interface::x-aligned-side)
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (meta . ((class . Item)
+                 (interfaces . (arpeggio-interface
+                                font-interface
+                                side-position-interface
+                                staff-symbol-referencer-interface))))))
 
     (BalloonTextItem
      . (
-       (annotation-balloon . #t)
-       (annotation-line . #t)
-       (stencil . ,ly:balloon-interface::print)
-       (text . ,(grob::calc-property-by-copy 'text))
-       (X-offset . ,(grob::calc-property-by-copy 'X-offset))
-       (Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
-       (meta . ((class . Item)
-                (interfaces . (balloon-interface
-                               font-interface
-                               text-interface))))))
+        (annotation-balloon . #t)
+        (annotation-line . #t)
+        (extra-spacing-width . (+inf.0 . -inf.0))
+        (stencil . ,ly:balloon-interface::print)
+        (text . ,(grob::calc-property-by-copy 'text))
+        (X-offset . ,(grob::calc-property-by-copy 'X-offset))
+        (Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (balloon-interface
+                                font-interface
+                                text-interface))))))
 
     (BarLine
      . (
-       (allow-span-bar . #t)
-       (bar-extent . ,ly:bar-line::calc-bar-extent)
-       (break-align-anchor . ,ly:bar-line::calc-anchor)
-       (break-align-symbol . staff-bar)
-       (break-visibility . ,bar-line::calc-break-visibility)
-       (extra-spacing-height . ,pure-from-neighbor-interface::account-for-span-bar)
-       (gap . 0.4)
-       (glyph . "|")
-       (glyph-name . ,bar-line::calc-glyph-name)
-
-       ;;
-       ;; Ross. page 151 lists other values, we opt for a leaner look
-       ;;
-       ;; TODO:
-       ;; kern should scale with line-thickness too.
-       (kern . 3.0)
-       (thin-kern . 3.0)
-       (hair-thickness . 1.9)
-       (thick-thickness . 6.0)
-
-       (layer . 0)
-       (non-musical . #t)
-       (space-alist . (
-                       (time-signature . (extra-space . 0.75))
-                       (custos . (minimum-space . 2.0))
-                       (clef . (minimum-space . 1.0))
-                       (key-signature . (extra-space . 1.0))
-                       (key-cancellation . (extra-space . 1.0))
-                       (first-note . (fixed-space . 1.3))
-                       (next-note . (semi-fixed-space . 0.9))
-                       (right-edge . (extra-space . 0.0))))
-       (stencil . ,ly:bar-line::print)
-       (meta . ((class . Item)
+        (allow-span-bar . #t)
+        (bar-extent . ,ly:bar-line::calc-bar-extent)
+        (break-align-anchor . ,ly:bar-line::calc-anchor)
+        (break-align-symbol . staff-bar)
+        (break-visibility . ,bar-line::calc-break-visibility)
+        (extra-spacing-height . ,pure-from-neighbor-interface::account-for-span-bar)
+        (gap . 0.4)
+        (glyph . "|")
+        (glyph-name . ,bar-line::calc-glyph-name)
+
+        ;;
+        ;; Ross. page 151 lists other values, we opt for a leaner look
+        ;;
+        ;; TODO:
+        ;; kern should scale with line-thickness too.
+        (kern . 3.0)
+        (thin-kern . 3.0)
+        (hair-thickness . 1.9)
+        (thick-thickness . 6.0)
+
+        (layer . 0)
+        (non-musical . #t)
+        (rounded . #f)
+        (space-alist . (
+                        (time-signature . (extra-space . 0.75))
+                        (custos . (minimum-space . 2.0))
+                        (clef . (minimum-space . 1.0))
+                        (key-signature . (extra-space . 1.0))
+                        (key-cancellation . (extra-space . 1.0))
+                        (first-note . (fixed-space . 1.3))
+                        (next-note . (semi-fixed-space . 0.9))
+                        (right-edge . (extra-space . 0.0))))
+        (stencil . ,ly:bar-line::print)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
-                (interfaces . (bar-line-interface
-                               break-aligned-interface
-                               font-interface
-                               pure-from-neighbor-interface))))))
+                 (interfaces . (bar-line-interface
+                                break-aligned-interface
+                                font-interface
+                                pure-from-neighbor-interface))))))
 
     (BarNumber
      . (
-       (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
-       ;; want the bar number before the clef at line start.
-       (break-align-symbols . (left-edge staff-bar))
-
-       (break-visibility . ,begin-of-line-visible)
-       (direction . ,UP)
-       (extra-spacing-width . (+inf.0 . -inf.0))
-       (font-family . roman)
-       (font-size . -2)
-       (non-musical . #t)
-       (outside-staff-priority . 100)
-       (padding . 1.0)
-       (self-alignment-X . ,RIGHT)
-       (side-axis . ,Y)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,(ly:make-simple-closure
-                     `(,+
-                       ,(ly:make-simple-closure
-                         (list ly:break-alignable-interface::self-align-callback))
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-aligned-on-self)))))
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta .
-             ((class . Item)
-              (interfaces . (break-alignable-interface
-                             font-interface
-                             self-alignment-interface
-                             side-position-interface
-                             text-interface))))))
+        (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
+        ;; want the bar number before the clef at line start.
+        (break-align-symbols . (left-edge staff-bar))
+
+        (break-visibility . ,begin-of-line-visible)
+        (direction . ,UP)
+        (extra-spacing-width . (+inf.0 . -inf.0))
+        (font-family . roman)
+        (font-size . -2)
+        (non-musical . #t)
+        ;; w/o padding, bars numbers are not positioned over the staff as
+        ;; they are slightly to the left. so we add just a bit.
+        (horizon-padding . 0.05)
+        (outside-staff-priority . 100)
+        (padding . 1.0)
+        (self-alignment-X . ,RIGHT)
+        (side-axis . ,Y)
+        (stencil . ,ly:text-interface::print)
+        (X-offset . ,(ly:make-simple-closure
+                      `(,+
+                        ,(ly:make-simple-closure
+                          (list ly:break-alignable-interface::self-align-callback))
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-aligned-on-self)))))
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta .
+              ((class . Item)
+               (interfaces . (break-alignable-interface
+                              font-interface
+                              self-alignment-interface
+                              side-position-interface
+                              text-interface))))))
 
     (BassFigure
      . (
-       (stencil . ,ly:text-interface::print)
-       (meta . ((class . Item)
-                (interfaces . (bass-figure-interface
-                               font-interface
-                               rhythmic-grob-interface
-                               text-interface))))))
+        (stencil . ,ly:text-interface::print)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (bass-figure-interface
+                                font-interface
+                                rhythmic-grob-interface
+                                text-interface))))))
 
     (BassFigureAlignment
      . (
-       (axes . (,Y))
-       (padding . 0.2)
-       (positioning-done . ,ly:align-interface::align-to-minimum-distances)
-       (stacking-dir . ,DOWN)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (meta . ((class . Spanner)
-                (object-callbacks . ((full-score-pure-minimum-translations . ,ly:align-interface::full-score-pure-minimum-translations)
-                                     (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (align-interface
-                               axis-group-interface
-                               bass-figure-alignment-interface))))))
+        (axes . (,Y))
+        (padding . 0.2)
+        (positioning-done . ,ly:align-interface::align-to-minimum-distances)
+        (stacking-dir . ,DOWN)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (meta . ((class . Spanner)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (align-interface
+                                axis-group-interface
+                                bass-figure-alignment-interface))))))
 
     (BassFigureAlignmentPositioning
      . (
-       (axes . (,Y))
-       (direction . ,UP)
-       (padding . 0.5)
-       (side-axis . ,Y)
-       (staff-padding . 1.0)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (axis-group-interface
-                               side-position-interface))))))
+        (axes . (,Y))
+        (direction . ,UP)
+        (padding . 0.5)
+        (side-axis . ,Y)
+        (staff-padding . 1.0)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Spanner)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (axis-group-interface
+                                side-position-interface))))))
 
     (BassFigureBracket
      . (
-       (edge-height . (0.2 . 0.2))
-       (stencil . ,ly:enclosing-bracket::print)
-       (X-extent . ,ly:enclosing-bracket::width)
-       (meta . ((class . Item)
-                (interfaces . (enclosing-bracket-interface))))))
+        (edge-height . (0.2 . 0.2))
+        (stencil . ,ly:enclosing-bracket::print)
+        (X-extent . ,ly:enclosing-bracket::width)
+        (meta . ((class . Item)
+                 (interfaces . (enclosing-bracket-interface))))))
 
     (BassFigureContinuation
      . (
-       (stencil . ,ly:figured-bass-continuation::print)
-       (Y-offset . ,ly:figured-bass-continuation::center-on-figures)
-       (meta . ((class . Spanner)
-                (interfaces . (figured-bass-continuation-interface))))))
+        (stencil . ,ly:figured-bass-continuation::print)
+        (Y-offset . ,ly:figured-bass-continuation::center-on-figures)
+        (meta . ((class . Spanner)
+                 (interfaces . (figured-bass-continuation-interface))))))
 
     (BassFigureLine
      . (
-       (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
-       (axes . (,Y))
-       (vertical-skylines . ,ly:axis-group-interface::calc-skylines)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (meta . ((class . Spanner)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (axis-group-interface))))))
+        (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
+        (axes . (,Y))
+        (vertical-skylines . ,ly:axis-group-interface::calc-skylines)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (meta . ((class . Spanner)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (axis-group-interface))))))
 
 
     (Beam
      . (
-       ;; todo: clean this up a bit: the list is getting
-       ;; rather long.
-       (auto-knee-gap . 5.5)
-       (beam-segments . ,ly:beam::calc-beam-segments)
-       (beam-thickness . 0.48) ; in staff-space
-
-       ;; We have some unreferenced problems here.
-       ;;
-       ;; If we shorten beamed stems less than normal stems (1 staff-space),
-       ;; or high order less than 8th beams, patterns like
-       ;;     c''4 [c''8 c''] c''4 [c''16 c]
-       ;; are ugly (different stem lengths).
-       ;;
-       ;; But if we shorten 16th beams as much as 8th beams, a single
-       ;; forced 16th beam looks *very* short.
-
-       ;; We choose to shorten 8th beams the same as single stems,
-       ;; and high order beams less than 8th beams, so that all
-       ;; isolated shortened beams look nice and a bit shortened,
-       ;; sadly possibly breaking patterns with high order beams.
-       (beamed-stem-shorten . (1.0 0.5 0.25))
-
-       (beaming . ,ly:beam::calc-beaming)
-       (clip-edges . #t)
-       (collision-interfaces . (beam-interface
-                                clef-interface
-                                flag-interface
-                                inline-accidental-interface
-                                key-signature-interface
-                                note-head-interface
-                                stem-interface
-                                time-signature-interface))
-       (cross-staff . ,ly:beam::calc-cross-staff)
-       (damping . 1)
-       (details
+        ;; todo: clean this up a bit: the list is getting
+        ;; rather long.
+        (auto-knee-gap . 5.5)
+        (beam-segments . ,ly:beam::calc-beam-segments)
+        (beam-thickness . 0.48) ; in staff-space
+
+        ;; We have some unreferenced problems here.
+        ;;
+        ;; If we shorten beamed stems less than normal stems (1 staff-space),
+        ;; or high order less than 8th beams, patterns like
+        ;;     c''4 [c''8 c''] c''4 [c''16 c]
+        ;; are ugly (different stem lengths).
+        ;;
+        ;; But if we shorten 16th beams as much as 8th beams, a single
+        ;; forced 16th beam looks *very* short.
+
+        ;; We choose to shorten 8th beams the same as single stems,
+        ;; and high order beams less than 8th beams, so that all
+        ;; isolated shortened beams look nice and a bit shortened,
+        ;; sadly possibly breaking patterns with high order beams.
+        (beamed-stem-shorten . (1.0 0.5 0.25))
+
+        (beaming . ,ly:beam::calc-beaming)
+        (clip-edges . #t)
+        (collision-interfaces . (beam-interface
+                                 clef-interface
+                                 clef-modifier-interface
+                                 flag-interface
+                                 inline-accidental-interface
+                                 key-signature-interface
+                                 note-head-interface
+                                 stem-interface
+                                 time-signature-interface))
+        (cross-staff . ,ly:beam::calc-cross-staff)
+        (damping . 1)
+        (details
          .(
            (secondary-beam-demerit . 10)
            (stem-length-demerit-factor . 5)
            (hint-direction-penalty . 20)
            (musical-direction-factor . 400)
            (ideal-slope-factor . 10)
-          (collision-penalty . 500)
-          (collision-padding . 0.35)
+           (collision-penalty . 500)
+           (collision-padding . 0.35)
            (round-to-zero-slope . 0.02)))
-       (direction . ,ly:beam::calc-direction)
+        (direction . ,ly:beam::calc-direction)
 
-       (normalized-endpoints . ,ly:spanner::calc-normalized-endpoints)
-       ;; only for debugging.
-       (font-family . roman)
+        (normalized-endpoints . ,ly:spanner::calc-normalized-endpoints)
+        ;; only for debugging.
+        (font-family . roman)
 
-       (gap . 0.8)
-       (neutral-direction . ,DOWN)
-       (positions . ,beam::place-broken-parts-individually)
-       (X-positions . ,ly:beam::calc-x-positions)
+        (gap . 0.8)
+        (neutral-direction . ,DOWN)
+        (positions . ,beam::place-broken-parts-individually)
+        (X-positions . ,ly:beam::calc-x-positions)
+        (transparent . ,(grob::inherit-parent-property
+                         X 'transparent))
 
-       ;; this is a hack to set stem lengths, if positions is set.
-       (quantized-positions . ,ly:beam::set-stem-lengths)
+        ;; this is a hack to set stem lengths, if positions is set.
+        (quantized-positions . ,ly:beam::set-stem-lengths)
 
-       (shorten . ,ly:beam::calc-stem-shorten)
-       (stencil . ,ly:beam::print)
+        (shorten . ,ly:beam::calc-stem-shorten)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (stencil . ,ly:beam::print)
 
-       (meta . ((class . Spanner)
-                (object-callbacks . ((normal-stems . ,ly:beam::calc-normal-stems)))
-                (interfaces . (beam-interface
-                               font-interface
-                               staff-symbol-referencer-interface
-                               unbreakable-spanner-interface))))))
+        (meta . ((class . Spanner)
+                 (object-callbacks . ((normal-stems . ,ly:beam::calc-normal-stems)))
+                 (interfaces . (beam-interface
+                                font-interface
+                                staff-symbol-referencer-interface
+                                unbreakable-spanner-interface))))))
 
     (BendAfter
      . (
-       (minimum-length . 0.5)
-       (stencil . ,bend::print)
-       (thickness . 2.0)
-       (meta . ((class . Spanner)
-                (interfaces . (bend-after-interface
-                               spanner-interface))))))
+        (minimum-length . 0.5)
+        (stencil . ,bend::print)
+        (thickness . 2.0)
+        (meta . ((class . Spanner)
+                 (interfaces . (bend-after-interface
+                                spanner-interface))))))
 
     (BreakAlignGroup
      . (
-       (axes . (,X))
-       (break-align-anchor . ,ly:break-aligned-interface::calc-average-anchor)
-       (break-visibility . ,ly:break-aligned-interface::calc-break-visibility)
-       (X-extent . ,ly:axis-group-interface::width)
-       (meta . ((class . Item)
-                (interfaces . (axis-group-interface
-                               break-aligned-interface))))))
+        (axes . (,X))
+        (break-align-anchor . ,ly:break-aligned-interface::calc-average-anchor)
+        (break-visibility . ,ly:break-aligned-interface::calc-break-visibility)
+        (X-extent . ,ly:axis-group-interface::width)
+        (meta . ((class . Item)
+                 (interfaces . (axis-group-interface
+                                break-aligned-interface))))))
 
     (BreakAlignment
      . (
-       (axes . (,X))
-       (break-align-orders . ;; end of line
-                           #((
-                              left-edge
-                              cue-end-clef
-                              ambitus
-                              breathing-sign
-                              clef
-                              cue-clef
-                              staff-bar
-                              key-cancellation
-                              key-signature
-                              time-signature
-                              custos)
-
-                             ;; unbroken
-                             (
-                              left-edge
-                              cue-end-clef
-                              ambitus
-                              breathing-sign
-                              clef
-                              cue-clef
-                              staff-bar
-                              key-cancellation
-                              key-signature
-                              time-signature
-                              custos)
-
-                             ;; begin of line
-                             (
-                              left-edge
-                              ambitus
-                              breathing-sign
-                              clef
-                              key-cancellation
-                              key-signature
-                              staff-bar
-                              time-signature
-                              cue-clef
-                              custos)))
-       (non-musical . #t)
-       (positioning-done . ,ly:break-alignment-interface::calc-positioning-done)
-       (stacking-dir . 1)
-       (X-extent . ,ly:axis-group-interface::width)
-       (meta . ((class . Item)
-                (interfaces . (axis-group-interface
-                               break-alignment-interface))))))
+        (axes . (,X))
+        (break-align-orders . ;; end of line
+                            #((
+                               left-edge
+                               cue-end-clef
+                               ambitus
+                               breathing-sign
+                               clef
+                               cue-clef
+                               staff-bar
+                               key-cancellation
+                               key-signature
+                               time-signature
+                               custos)
+
+                              ;; unbroken
+                              (
+                               left-edge
+                               cue-end-clef
+                               ambitus
+                               breathing-sign
+                               clef
+                               cue-clef
+                               staff-bar
+                               key-cancellation
+                               key-signature
+                               time-signature
+                               custos)
+
+                              ;; begin of line
+                              (
+                               left-edge
+                               ambitus
+                               breathing-sign
+                               clef
+                               key-cancellation
+                               key-signature
+                               time-signature
+                               staff-bar
+                               cue-clef
+                               custos)))
+        (non-musical . #t)
+        (positioning-done . ,ly:break-alignment-interface::calc-positioning-done)
+        (stacking-dir . 1)
+        (X-extent . ,ly:axis-group-interface::width)
+        (meta . ((class . Item)
+                 (interfaces . (axis-group-interface
+                                break-alignment-interface))))))
 
     (BreathingSign
      . (
-       (break-align-symbol . breathing-sign)
-       (break-visibility . ,begin-of-line-invisible)
-       (non-musical . #t)
-       (space-alist . (
-                       (ambitus . (extra-space . 2.0))
-                       (custos . (minimum-space . 1.0))
-                       (key-signature . (minimum-space . 1.5))
-                       (time-signature . (minimum-space . 1.5))
-                       (staff-bar . (minimum-space . 1.5))
-                       (clef . (minimum-space . 2.0))
-                       (cue-clef . (minimum-space . 2.0))
-                       (cue-end-clef . (minimum-space . 2.0))
-                       (first-note . (fixed-space . 1.0)) ;huh?
-                       (right-edge . (extra-space . 0.1))))
-       (stencil . ,ly:text-interface::print)
-       (text . ,(make-musicglyph-markup "scripts.rcomma"))
-       (Y-offset . ,ly:breathing-sign::offset-callback)
-       (meta . ((class . Item)
-                (interfaces . (break-aligned-interface
-                               breathing-sign-interface
-                               font-interface
-                               text-interface))))))
+        (break-align-symbol . breathing-sign)
+        (break-visibility . ,begin-of-line-invisible)
+        (non-musical . #t)
+        (space-alist . (
+                        (ambitus . (extra-space . 2.0))
+                        (custos . (minimum-space . 1.0))
+                        (key-signature . (minimum-space . 1.5))
+                        (time-signature . (minimum-space . 1.5))
+                        (staff-bar . (minimum-space . 1.5))
+                        (clef . (minimum-space . 2.0))
+                        (cue-clef . (minimum-space . 2.0))
+                        (cue-end-clef . (minimum-space . 2.0))
+                        (first-note . (fixed-space . 1.0)) ;huh?
+                        (right-edge . (extra-space . 0.1))))
+        (stencil . ,ly:text-interface::print)
+        (text . ,(make-musicglyph-markup "scripts.rcomma"))
+        (Y-offset . ,ly:breathing-sign::offset-callback)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (break-aligned-interface
+                                breathing-sign-interface
+                                font-interface
+                                text-interface))))))
 
     (ChordName
      . (
-       (after-line-breaking . ,ly:chord-name::after-line-breaking)
-       (font-family . sans)
-       (font-size . 1.5)
-       (stencil . ,ly:text-interface::print)
-       (extra-spacing-height . (0.2 . -0.2))
-       (extra-spacing-width . (-0.5 . 0.5))
-       (word-space . 0.0)
-       (meta . ((class . Item)
-                (interfaces . (chord-name-interface
-                               font-interface
-                               rhythmic-grob-interface
-                               text-interface))))))
+        (after-line-breaking . ,ly:chord-name::after-line-breaking)
+        (font-family . sans)
+        (font-size . 1.5)
+        (stencil . ,ly:text-interface::print)
+        (extra-spacing-height . (0.2 . -0.2))
+        (extra-spacing-width . (-0.5 . 0.5))
+        (word-space . 0.0)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (chord-name-interface
+                                font-interface
+                                rhythmic-grob-interface
+                                text-interface))))))
 
     (Clef
      . (
-       (avoid-slur . inside)
-       (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
-       (break-align-symbol . clef)
-       (break-visibility . ,begin-of-line-visible)
-       (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-at-beginning-of-line)
-       (glyph-name . ,ly:clef::calc-glyph-name)
-       (non-musical . #t)
-       (space-alist . ((cue-clef . (extra-space . 2.0))
-                       (staff-bar . (extra-space . 0.7))
-                       (key-cancellation . (minimum-space . 3.5))
-                       (key-signature . (minimum-space . 3.5))
-                       (time-signature . (minimum-space . 4.2))
-                       (first-note . (minimum-fixed-space . 5.0))
-                       (next-note . (extra-space . 1.0))
-                       (right-edge . (extra-space . 0.5))))
-       (stencil . ,ly:clef::print)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
+        (avoid-slur . inside)
+        (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
+        (break-align-anchor-alignment . ,RIGHT)
+        (break-align-symbol . clef)
+        (break-visibility . ,begin-of-line-visible)
+        (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-at-beginning-of-line)
+        (glyph-name . ,ly:clef::calc-glyph-name)
+        (non-musical . #t)
+        (space-alist . ((cue-clef . (extra-space . 2.0))
+                        (staff-bar . (extra-space . 0.7))
+                        (key-cancellation . (minimum-space . 3.5))
+                        (key-signature . (minimum-space . 3.5))
+                        (time-signature . (minimum-space . 4.2))
+                        (first-note . (minimum-fixed-space . 5.0))
+                        (next-note . (extra-space . 1.0))
+                        (right-edge . (extra-space . 0.5))))
+        (stencil . ,ly:clef::print)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
-                (interfaces . (break-aligned-interface
-                               clef-interface
-                               font-interface
-                               pure-from-neighbor-interface
-                               staff-symbol-referencer-interface))))))
+                 (interfaces . (break-aligned-interface
+                                clef-interface
+                                font-interface
+                                pure-from-neighbor-interface
+                                staff-symbol-referencer-interface))))))
+
+    (ClefModifier
+     . (
+        (break-visibility . ,(grob::inherit-parent-property
+                              X 'break-visibility))
+        (font-shape . italic)
+        (font-size . -4)
+        (transparent . ,(grob::inherit-parent-property
+                         X 'transparent))
+        (color . ,(grob::inherit-parent-property
+                   X 'color))
+        (self-alignment-X . ,CENTER)
+        (staff-padding . 0.7)
+        (stencil . ,ly:text-interface::print)
+        (X-offset . ,(ly:make-simple-closure
+                      `(,+
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-aligned-on-self))
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::centered-on-x-parent)))))
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (clef-modifier-interface
+                                font-interface
+                                self-alignment-interface
+                                side-position-interface
+                                text-interface))))))
 
     (ClusterSpanner
      . (
-       (cross-staff . ,ly:cluster::calc-cross-staff)
-       (minimum-length . 0.0)
-       (padding . 0.25)
-       (springs-and-rods . ,ly:spanner::set-spacing-rods)
-       (stencil . ,ly:cluster::print)
-       (style . ramp)
-       (meta . ((class . Spanner)
-                (interfaces . (cluster-interface))))))
+        (cross-staff . ,ly:cluster::calc-cross-staff)
+        (minimum-length . 0.0)
+        (padding . 0.25)
+        (springs-and-rods . ,ly:spanner::set-spacing-rods)
+        (stencil . ,ly:cluster::print)
+        (style . ramp)
+        (meta . ((class . Spanner)
+                 (interfaces . (cluster-interface))))))
 
     (ClusterSpannerBeacon
      . (
-       (Y-extent . ,ly:cluster-beacon::height)
-       (meta . ((class . Item)
-                (interfaces . (cluster-beacon-interface
-                               rhythmic-grob-interface))))))
+        (Y-extent . ,ly:cluster-beacon::height)
+        (meta . ((class . Item)
+                 (interfaces . (cluster-beacon-interface
+                                rhythmic-grob-interface))))))
 
     (CombineTextScript
      . (
-       (avoid-slur . outside)
-       (baseline-skip . 2)
-       (direction . ,UP)
-       (extra-spacing-width . (+inf.0 . -inf.0))
-       (font-series . bold)
-       (outside-staff-priority . 450)
-       (padding . 0.5)
-       (script-priority . 200)
-       (side-axis . ,Y)
-       (staff-padding . 0.5)
-       ;; todo: add X self alignment?
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               side-position-interface
-                               text-interface
-                               text-script-interface))))))
+        (avoid-slur . outside)
+        (baseline-skip . 2)
+        (direction . ,UP)
+        (extra-spacing-width . (+inf.0 . -inf.0))
+        (font-series . bold)
+        (outside-staff-priority . 450)
+        (padding . 0.5)
+        (script-priority . 200)
+        (side-axis . ,Y)
+        (staff-padding . 0.5)
+        ;; todo: add X self alignment?
+        (stencil . ,ly:text-interface::print)
+        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                side-position-interface
+                                text-interface
+                                text-script-interface))))))
 
     (CueClef
      . (
-       (avoid-slur . inside)
-       (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
-       (break-align-symbol . cue-clef)
-       (break-visibility . ,begin-of-line-visible)
-       (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-at-beginning-of-line)
-       (font-size . -4)
-       (glyph-name . ,ly:clef::calc-glyph-name)
-       (non-musical . #t)
-       (full-size-change . #t)
-       (space-alist . ((staff-bar . (minimum-space . 2.7))
-                       (key-cancellation . (minimum-space . 3.5))
-                       (key-signature . (minimum-space . 3.5))
-                       (time-signature . (minimum-space . 4.2))
-                       (custos . (minimum-space . 0.0))
-                       (first-note . (minimum-fixed-space . 3.0))
-                       (next-note . (extra-space . 1.0))
-                       (right-edge . (extra-space . 0.5))))
-       (stencil . ,ly:clef::print)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
+        (avoid-slur . inside)
+        (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
+        (break-align-symbol . cue-clef)
+        (break-visibility . ,begin-of-line-visible)
+        (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-at-beginning-of-line)
+        (font-size . -4)
+        (glyph-name . ,ly:clef::calc-glyph-name)
+        (non-musical . #t)
+        (full-size-change . #t)
+        (space-alist . ((staff-bar . (minimum-space . 2.7))
+                        (key-cancellation . (minimum-space . 3.5))
+                        (key-signature . (minimum-space . 3.5))
+                        (time-signature . (minimum-space . 4.2))
+                        (custos . (minimum-space . 0.0))
+                        (first-note . (minimum-fixed-space . 3.0))
+                        (next-note . (extra-space . 1.0))
+                        (right-edge . (extra-space . 0.5))))
+        (stencil . ,ly:clef::print)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
-                (interfaces . (break-aligned-interface
-                               clef-interface
-                               font-interface
-                               pure-from-neighbor-interface
-                               staff-symbol-referencer-interface))))))
+                 (interfaces . (break-aligned-interface
+                                clef-interface
+                                font-interface
+                                pure-from-neighbor-interface
+                                staff-symbol-referencer-interface))))))
 
     (CueEndClef
      . (
-       (avoid-slur . inside)
-       (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
-       (break-align-symbol . cue-end-clef)
-       (break-visibility . ,begin-of-line-invisible)
-       (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-at-beginning-of-line)
-       (font-size . -4)
-       (glyph-name . ,ly:clef::calc-glyph-name)
-       (non-musical . #t)
-       (full-size-change . #t)
-       (space-alist . ((clef . (extra-space . 0.7))
-                       (cue-clef . (extra-space . 0.7))
-                       (staff-bar . (extra-space . 0.7))
-                       (key-cancellation . (minimum-space . 3.5))
-                       (key-signature . (minimum-space . 3.5))
-                       (time-signature . (minimum-space . 4.2))
-                       (first-note . (minimum-fixed-space . 5.0))
-                       (next-note . (extra-space . 1.0))
-                       (right-edge . (extra-space . 0.5))))
-       (stencil . ,ly:clef::print)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
+        (avoid-slur . inside)
+        (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
+        (break-align-symbol . cue-end-clef)
+        (break-visibility . ,begin-of-line-invisible)
+        (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-at-beginning-of-line)
+        (font-size . -4)
+        (glyph-name . ,ly:clef::calc-glyph-name)
+        (non-musical . #t)
+        (full-size-change . #t)
+        (space-alist . ((clef . (extra-space . 0.7))
+                        (cue-clef . (extra-space . 0.7))
+                        (staff-bar . (extra-space . 0.7))
+                        (key-cancellation . (minimum-space . 3.5))
+                        (key-signature . (minimum-space . 3.5))
+                        (time-signature . (minimum-space . 4.2))
+                        (first-note . (minimum-fixed-space . 5.0))
+                        (next-note . (extra-space . 1.0))
+                        (right-edge . (extra-space . 0.5))))
+        (stencil . ,ly:clef::print)
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
-                (interfaces . (break-aligned-interface
-                               clef-interface
-                               font-interface
-                               pure-from-neighbor-interface
-                               staff-symbol-referencer-interface))))))
+                 (interfaces . (break-aligned-interface
+                                clef-interface
+                                font-interface
+                                pure-from-neighbor-interface
+                                staff-symbol-referencer-interface))))))
 
     (Custos
      . (
-       (break-align-symbol . custos)
-       (break-visibility . ,end-of-line-visible)
-       (neutral-direction . ,DOWN)
-       (non-musical . #t)
-       (space-alist . (
-                       (first-note . (minimum-fixed-space . 0.0))
-                       (right-edge . (extra-space . 0.1))))
-       (stencil . ,ly:custos::print)
-       (style . vaticana)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
-                (interfaces  . (break-aligned-interface
-                                custos-interface
-                                font-interface
-                                staff-symbol-referencer-interface))))))
+        (break-align-symbol . custos)
+        (break-visibility . ,end-of-line-visible)
+        (neutral-direction . ,DOWN)
+        (non-musical . #t)
+        (space-alist . (
+                        (first-note . (minimum-fixed-space . 0.0))
+                        (right-edge . (extra-space . 0.1))))
+        (stencil . ,ly:custos::print)
+        (style . vaticana)
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (meta . ((class . Item)
+                 (interfaces  . (break-aligned-interface
+                                 custos-interface
+                                 font-interface
+                                 staff-symbol-referencer-interface))))))
 
     (DotColumn
      . (
-       (axes . (,X))
-       (direction . ,RIGHT)
-       (positioning-done . ,ly:dot-column::calc-positioning-done)
-       (X-extent . ,ly:axis-group-interface::width)
-       (meta . ((class . Item)
-                (interfaces . (axis-group-interface
-                               dot-column-interface))))))
+        (axes . (,X))
+        (direction . ,RIGHT)
+        (positioning-done . ,ly:dot-column::calc-positioning-done)
+        (X-extent . ,ly:axis-group-interface::width)
+        (meta . ((class . Item)
+                 (interfaces . (axis-group-interface
+                                dot-column-interface))))))
 
     (Dots
      . (
-       (avoid-slur . inside)
-       (dot-count . ,dots::calc-dot-count)
-       (staff-position . ,dots::calc-staff-position)
-       (stencil . ,ly:dots::print)
-       (extra-spacing-height . (-0.5 . 0.5))
-       (meta . ((class . Item)
-                (interfaces . (dots-interface
-                               font-interface
-                               staff-symbol-referencer-interface))))))
+        (avoid-slur . inside)
+        (dot-count . ,dots::calc-dot-count)
+        (staff-position . ,dots::calc-staff-position)
+        (stencil . ,ly:dots::print)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (extra-spacing-height . (-0.5 . 0.5))
+        (meta . ((class . Item)
+                 (interfaces . (dots-interface
+                                font-interface
+                                staff-symbol-referencer-interface))))))
 
     (DoublePercentRepeat
      . (
-       (break-align-symbol . staff-bar)
-       (break-visibility . ,begin-of-line-invisible)
-       (dot-negative-kern . 0.75)
-       (font-encoding . fetaMusic)
-       (non-musical . #t)
-       (slash-negative-kern . 1.6)
-       (slope . 1.0)
-       (stencil . ,ly:percent-repeat-item-interface::double-percent)
-       (thickness . 0.48)
-       (meta . ((class . Item)
-                (interfaces . (break-aligned-interface
-                               font-interface
-                               percent-repeat-interface
-                               percent-repeat-item-interface))))))
+        (break-align-symbol . staff-bar)
+        (break-visibility . ,begin-of-line-invisible)
+        (dot-negative-kern . 0.75)
+        (font-encoding . fetaMusic)
+        (non-musical . #t)
+        (slash-negative-kern . 1.6)
+        (slope . 1.0)
+        (stencil . ,ly:percent-repeat-item-interface::double-percent)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (thickness . 0.48)
+        (meta . ((class . Item)
+                 (interfaces . (break-aligned-interface
+                                font-interface
+                                percent-repeat-interface
+                                percent-repeat-item-interface))))))
 
     (DoublePercentRepeatCounter
      . (
-       (direction . ,UP)
-       (font-encoding . fetaText)
-       (font-size . -2)
-       (padding . 0.2)
-       (self-alignment-X . ,CENTER)
-       (side-axis . ,Y)
-       (staff-padding . 0.25)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,(ly:make-simple-closure
-                     `(,+
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::centered-on-y-parent))
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-aligned-on-self)))))
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               percent-repeat-interface
-                               percent-repeat-item-interface
-                               self-alignment-interface
-                               side-position-interface
-                               text-interface))))))
+        (direction . ,UP)
+        (font-encoding . fetaText)
+        (font-size . -2)
+        (padding . 0.2)
+        (self-alignment-X . ,CENTER)
+        (side-axis . ,Y)
+        (staff-padding . 0.25)
+        (stencil . ,ly:text-interface::print)
+        (X-offset . ,(ly:make-simple-closure
+                      `(,+
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::centered-on-y-parent))
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-aligned-on-self)))))
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                percent-repeat-interface
+                                percent-repeat-item-interface
+                                self-alignment-interface
+                                side-position-interface
+                                text-interface))))))
 
     (DoubleRepeatSlash
      . (
-       (dot-negative-kern . 0.75)
-       (font-encoding . fetaMusic)
-       (slash-negative-kern . 1.6)
-       (slope . 1.0)
-       (stencil . ,ly:percent-repeat-item-interface::beat-slash)
-       (thickness . 0.48)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               percent-repeat-interface
-                               percent-repeat-item-interface
-                               rhythmic-grob-interface))))))
+        (dot-negative-kern . 0.75)
+        (font-encoding . fetaMusic)
+        (slash-negative-kern . 1.6)
+        (slope . 1.0)
+        (stencil . ,ly:percent-repeat-item-interface::beat-slash)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (thickness . 0.48)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                percent-repeat-interface
+                                percent-repeat-item-interface
+                                rhythmic-grob-interface))))))
 
     (DynamicLineSpanner
      . (
-       (axes . (,Y))
-       (cross-staff . ,ly:side-position-interface::calc-cross-staff)
-       (direction . ,DOWN)
-       (minimum-space . 1.2)
-       (outside-staff-priority . 250)
-       (padding . 0.6)
-       (side-axis . ,Y)
-       (slur-padding . 0.3)
-       (staff-padding . 0.1)
-       (X-extent . ,ly:axis-group-interface::width)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (axis-group-interface
-                               dynamic-interface
-                               dynamic-line-spanner-interface
-                               side-position-interface))))))
+        (axes . (,Y))
+        (cross-staff . ,ly:side-position-interface::calc-cross-staff)
+        (direction . ,DOWN)
+        (minimum-space . 1.2)
+        (outside-staff-priority . 250)
+        (padding . 0.6)
+        (side-axis . ,Y)
+        (slur-padding . 0.3)
+        (staff-padding . 0.1)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Spanner)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (axis-group-interface
+                                dynamic-interface
+                                dynamic-line-spanner-interface
+                                side-position-interface))))))
 
     (DynamicText
      . (
 
-       ;; todo.
-
-       (collision-bias . -2.0)
-       (collision-padding . 0.5)
-       (direction . ,ly:script-interface::calc-direction)
-       (extra-spacing-width . (+inf.0 . -inf.0))
-       (font-encoding . fetaText)
-       (font-series . bold)
-       (font-shape . italic)
-       (outside-staff-priority . 250)
-       (positioning-done . ,ly:script-interface::calc-positioning-done)
-       (right-padding . 0.5)
-       (self-alignment-X . ,CENTER)
-       (self-alignment-Y . ,CENTER)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
-       (Y-offset . ,ly:self-alignment-interface::y-aligned-on-self)
-       (meta . ((class . Item)
-                (object-callbacks . ((X-colliding-grobs . ,ly:self-alignment-interface::x-colliding-grobs)))
-                (interfaces . (dynamic-interface
-                               dynamic-text-interface
-                               font-interface
-                               script-interface
-                               self-alignment-interface
-                               text-interface))))))
+        ;; todo.
+
+        (collision-bias . -2.0)
+        (collision-padding . 0.5)
+        (direction . ,ly:script-interface::calc-direction)
+        (extra-spacing-width . (+inf.0 . -inf.0))
+        (font-encoding . fetaText)
+        (font-series . bold)
+        (font-shape . italic)
+        (positioning-done . ,ly:script-interface::calc-positioning-done)
+        (right-padding . 0.5)
+        (self-alignment-X . ,CENTER)
+        (stencil . ,ly:text-interface::print)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+        (Y-offset . ,(scale-by-font-size -0.6)) ; center on an 'm'
+        (meta . ((class . Item)
+                 (interfaces . (dynamic-interface
+                                dynamic-text-interface
+                                font-interface
+                                script-interface
+                                self-alignment-interface
+                                text-interface))))))
 
     (DynamicTextSpanner
      . (
-       (before-line-breaking . ,dynamic-text-spanner::before-line-breaking)
-       (bound-details . ((right . ((attach-dir .  ,LEFT)
-                                   (Y . 0)
-                                   (padding . 0.75)
-                                   ))
-                         (right-broken . ((attach-dir .  ,RIGHT)
-                                   (padding . 0.0)
-                                   ))
-
-                         (left . ((attach-dir .  ,LEFT)
-                                  (Y . 0)
-                                  (stencil-offset . (-0.75 . -0.5))
-                                  (padding . 0.75)
-                                  ))
-                         (left-broken . ((attach-dir .  ,RIGHT)
-                                  ))
-                         ))
-       (dash-fraction . 0.2)
-       (dash-period . 3.0)
-
-       ;; rather ugh with NCSB
-       ;; (font-series . bold)
-       (font-shape . italic)
-
-       ;; need to blend with dynamic texts.
-       (font-size . 1)
-
-       (left-bound-info . ,ly:line-spanner::calc-left-bound-info-and-text)
-
-       (minimum-length . 2.0)
-       ;; make sure the spanner doesn't get too close to notes
-       (minimum-Y-extent . (-1 . 1))
-
-       (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
-       (springs-and-rods . ,ly:spanner::set-spacing-rods)
-       (stencil . ,ly:line-spanner::print)
-       (style . dashed-line)
-       (meta . ((class . Spanner)
-                (interfaces . (dynamic-interface
-                               dynamic-text-spanner-interface
-                               font-interface
-                               line-interface
-                               line-spanner-interface
-                               spanner-interface
-                               text-interface))))))
+        (before-line-breaking . ,dynamic-text-spanner::before-line-breaking)
+        (bound-details . ((right . ((attach-dir .  ,LEFT)
+                                    (Y . 0)
+                                    (padding . 0.75)
+                                    ))
+                          (right-broken . ((attach-dir .  ,RIGHT)
+                                           (padding . 0.0)
+                                           ))
+
+                          (left . ((attach-dir .  ,LEFT)
+                                   (Y . 0)
+                                   (stencil-offset . (-0.75 . -0.5))
+                                   (padding . 0.75)
+                                   ))
+                          (left-broken . ((attach-dir .  ,RIGHT)
+                                          ))
+                          ))
+        (dash-fraction . 0.2)
+        (dash-period . 3.0)
+
+        ;; rather ugh with NCSB
+        ;; (font-series . bold)
+        (font-shape . italic)
+
+        ;; need to blend with dynamic texts.
+        (font-size . 1)
+
+        (left-bound-info . ,ly:line-spanner::calc-left-bound-info-and-text)
+
+        (minimum-length . 2.0)
+        ;; make sure the spanner doesn't get too close to notes
+        (minimum-Y-extent . (-1 . 1))
+
+        (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
+        (skyline-horizontal-padding . 0.2)
+        (springs-and-rods . ,ly:spanner::set-spacing-rods)
+        (stencil . ,ly:line-spanner::print)
+        (style . dashed-line)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (meta . ((class . Spanner)
+                 (interfaces . (dynamic-interface
+                                dynamic-text-spanner-interface
+                                font-interface
+                                line-interface
+                                line-spanner-interface
+                                spanner-interface
+                                text-interface))))))
 
 
     (Episema
      . (
-       (bound-details . ((left . ((Y . 0)
-                                  (padding . 0)
-                                  (attach-dir . ,LEFT)
-                                  ))
-                         (right . ((Y . 0)
-                                   (padding . 0)
-                                   (attach-dir . ,RIGHT)
-                                   ))
-                         ))
-       (direction . ,UP)
-       (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
-       (quantize-position . #t)
-       (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
-       (side-axis . ,Y)
-       (stencil . ,ly:line-spanner::print)
-       (style . line)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (interfaces . (episema-interface
-                               font-interface
-                               line-interface
-                               line-spanner-interface
-                               side-position-interface))))))
+        (bound-details . ((left . ((Y . 0)
+                                   (padding . 0)
+                                   (attach-dir . ,LEFT)
+                                   ))
+                          (right . ((Y . 0)
+                                    (padding . 0)
+                                    (attach-dir . ,RIGHT)
+                                    ))
+                          ))
+        (direction . ,UP)
+        (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
+        (quantize-position . #t)
+        (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
+        (side-axis . ,Y)
+        (stencil . ,ly:line-spanner::print)
+        (style . line)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Spanner)
+                 (interfaces . (episema-interface
+                                font-interface
+                                line-interface
+                                line-spanner-interface
+                                side-position-interface))))))
 
 
     (Fingering
      . (
 
-       ;; sync with TextScript (?)
-
-       (avoid-slur . around)
-       (cross-staff . ,script-or-side-position-cross-staff)
-       (direction . ,ly:script-interface::calc-direction)
-       (font-encoding . fetaText)
-       (font-size . -5)                ; don't overlap when next to heads.
-       (padding . 0.5)
-       (positioning-done . ,ly:script-interface::calc-positioning-done)
-       (script-priority . 100)
-       (self-alignment-X . ,CENTER)
-       (self-alignment-Y . ,CENTER)
-       (slur-padding . 0.2)
-       (staff-padding . 0.5)
-       (stencil . ,ly:text-interface::print)
-       (text . ,fingering::calc-text)
-       (meta . ((class . Item)
-                (interfaces . (finger-interface
-                               font-interface
-                               self-alignment-interface
-                               side-position-interface
-                               text-interface
-                               text-script-interface))))))
+        ;; sync with TextScript (?)
+        (add-stem-support . ,only-if-beamed)
+        (avoid-slur . around)
+        (cross-staff . ,script-or-side-position-cross-staff)
+        (direction . ,ly:script-interface::calc-direction)
+        (font-encoding . fetaText)
+        (font-size . -5)                ; don't overlap when next to heads.
+        (padding . 0.5)
+        (positioning-done . ,ly:script-interface::calc-positioning-done)
+        (script-priority . 100)
+        (self-alignment-X . ,CENTER)
+        (self-alignment-Y . ,CENTER)
+        (slur-padding . 0.2)
+        (staff-padding . 0.5)
+        (stencil . ,ly:text-interface::print)
+        (text . ,fingering::calc-text)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (finger-interface
+                                font-interface
+                                self-alignment-interface
+                                side-position-interface
+                                text-interface
+                                text-script-interface))))))
+
+    (FingeringColumn
+     . (
+        (padding . 0.2)
+        (positioning-done . ,ly:fingering-column::calc-positioning-done)
+        (snap-radius . 0.3)
+        (meta . ((class . Item)
+                 (interfaces . (fingering-column-interface))))))
 
     (Flag
      . (
-       (stencil . ,ly:flag::print)
-       (X-extent . ,ly:flag::width)
-       (X-offset . ,ly:flag::calc-x-offset)
-       (Y-offset . ,ly:flag::calc-y-offset)
-       (meta . ((class . Item)
-                (interfaces . (flag-interface
+        (glyph-name . ,ly:flag::glyph-name)
+        (stencil . ,ly:flag::print)
+        (transparent . ,(grob::inherit-parent-property
+                         X 'transparent))
+        (color . ,(grob::inherit-parent-property
+                   X 'color))
+        (X-extent . ,ly:flag::width)
+        (X-offset . ,ly:flag::calc-x-offset)
+        (Y-offset . ,(ly:make-unpure-pure-container ly:flag::calc-y-offset ly:flag::pure-calc-y-offset))
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (flag-interface
                                 font-interface))))))
 
     (FootnoteItem
      . (
-       (annotation-balloon . #f)
-       (annotation-line . #t)
-       (automatically-numbered . ,(grob::calc-property-by-copy 'automatically-numbered))
-       (break-visibility . ,inherit-y-parent-visibility)
-       (footnote . #t)
-       (footnote-text . ,(grob::calc-property-by-copy 'footnote-text))
-       (stencil . ,ly:balloon-interface::print)
-       (text . ,(grob::calc-property-by-copy 'text))
-       (X-extent . #f)
-       (Y-extent . #f)
-       (X-offset . ,(grob::calc-property-by-copy 'X-offset))
-       (Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
-       (meta . ((class . Item)
-                (interfaces . (balloon-interface
-                               footnote-interface
-                               font-interface
-                               text-interface))))))
+        (annotation-balloon . #f)
+        (annotation-line . #t)
+        (automatically-numbered . ,(grob::calc-property-by-copy 'automatically-numbered))
+        (break-visibility . ,(grob::inherit-parent-property
+                              X 'break-visibility))
+        (footnote . #t)
+        (footnote-text . ,(grob::calc-property-by-copy 'footnote-text))
+        (stencil . ,ly:balloon-interface::print)
+        (text . ,(grob::calc-property-by-copy 'text))
+        (X-extent . #f)
+        (Y-extent . #f)
+        (X-offset . ,(grob::calc-property-by-copy 'X-offset))
+        (Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
+        (meta . ((class . Item)
+                 (interfaces . (balloon-interface
+                                footnote-interface
+                                font-interface
+                                text-interface))))))
 
     (FootnoteSpanner
      . (
-       (annotation-balloon . #f)
-       (annotation-line . #t)
-       (automatically-numbered . ,(grob::calc-property-by-copy 'automatically-numbered))
-       (footnote . #t)
-       (footnote-text . ,(grob::calc-property-by-copy 'footnote-text))
-       (spanner-placement . ,LEFT)
-       (stencil . ,ly:balloon-interface::print-spanner)
-       (text . ,(grob::calc-property-by-copy 'text))
-       (X-extent . #f)
-       (Y-extent . #f)
-       (X-offset . ,(grob::calc-property-by-copy 'X-offset))
-       (Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
-       (meta . ((class . Spanner)
-                (interfaces . (balloon-interface
+        (annotation-balloon . #f)
+        (annotation-line . #t)
+        (automatically-numbered . ,(grob::calc-property-by-copy 'automatically-numbered))
+        (footnote . #t)
+        (footnote-text . ,(grob::calc-property-by-copy 'footnote-text))
+        (spanner-placement . ,LEFT)
+        (stencil . ,ly:balloon-interface::print-spanner)
+        (text . ,(grob::calc-property-by-copy 'text))
+        (X-extent . #f)
+        (Y-extent . #f)
+        (X-offset . ,(grob::calc-property-by-copy 'X-offset))
+        (Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
+        (meta . ((class . Spanner)
+                 (interfaces . (balloon-interface
                                 footnote-interface
-                               footnote-spanner-interface
-                               font-interface
-                               text-interface))))))
+                                footnote-spanner-interface
+                                font-interface
+                                text-interface))))))
 
     (FretBoard
      . (
-       (after-line-breaking . ,ly:chord-name::after-line-breaking)
-       (fret-diagram-details . ((finger-code . below-string)))
-       (stencil . ,fret-board::calc-stencil)
-       (extra-spacing-height . (0.2 . -0.2))
-       (extra-spacing-width . (-0.5 . 0.5))
-       (meta . ((class . Item)
-                (interfaces . (chord-name-interface
-                               font-interface
-                               fret-diagram-interface
-                               rhythmic-grob-interface))))))
+        (after-line-breaking . ,ly:chord-name::after-line-breaking)
+        (fret-diagram-details . ((finger-code . below-string)))
+        (stencil . ,fret-board::calc-stencil)
+        (extra-spacing-height . (0.2 . -0.2))
+        (extra-spacing-width . (-0.5 . 0.5))
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (chord-name-interface
+                                font-interface
+                                fret-diagram-interface
+                                rhythmic-grob-interface))))))
 
 
     (Glissando
      . (
-       (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
-       (bound-details . ((right . ((attach-dir .  ,LEFT)
-                                   (end-on-accidental . #t)
-                                   (padding . 0.5)
-                                     ))
-                         (left . ((attach-dir .  ,RIGHT)
-                                  (padding . 0.5)
-                                     ))
-                         ))
-       (cross-staff . ,ly:line-spanner::calc-cross-staff)
-       (gap . 0.5)
-       (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
-       (normalized-endpoints . ,ly:spanner::calc-normalized-endpoints)
-       (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
-       (simple-Y . #t)
-       (stencil . ,ly:line-spanner::print)
-       (style . line)
-       (X-extent . #f)
-       (Y-extent . #f)
-       (zigzag-width . 0.75)
-       (meta . ((class . Spanner)
-                (interfaces . (glissando-interface
-                               line-interface
-                               line-spanner-interface
-                               unbreakable-spanner-interface))))))
+        (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
+        (bound-details . ((right . ((attach-dir .  ,LEFT)
+                                    (end-on-accidental . #t)
+                                    (padding . 0.5)
+                                    ))
+                          (left . ((attach-dir .  ,RIGHT)
+                                   (padding . 0.5)
+                                   ))
+                          ))
+        (cross-staff . ,ly:line-spanner::calc-cross-staff)
+        (gap . 0.5)
+        (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
+        (normalized-endpoints . ,ly:spanner::calc-normalized-endpoints)
+        (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
+        (simple-Y . #t)
+        (stencil . ,ly:line-spanner::print)
+        (style . line)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (X-extent . #f)
+        (Y-extent . #f)
+        (zigzag-width . 0.75)
+        (meta . ((class . Spanner)
+                 (interfaces . (glissando-interface
+                                line-interface
+                                line-spanner-interface
+                                unbreakable-spanner-interface))))))
 
     (GraceSpacing
      . (
-       (common-shortest-duration . ,grace-spacing::calc-shortest-duration)
-       (shortest-duration-space . 1.6)
-       (spacing-increment . 0.8)
-       (meta . ((class . Spanner)
-                (interfaces . (grace-spacing-interface
-                               spacing-options-interface
-                               spanner-interface))))))
+        (common-shortest-duration . ,grace-spacing::calc-shortest-duration)
+        (shortest-duration-space . 1.6)
+        (spacing-increment . 0.8)
+        (meta . ((class . Spanner)
+                 (interfaces . (grace-spacing-interface
+                                spacing-options-interface
+                                spanner-interface))))))
 
     (GridLine
      . (
-       (layer . 0)
-       (self-alignment-X . ,CENTER)
-       (stencil . ,ly:grid-line-interface::print)
-       (X-extent  . ,ly:grid-line-interface::width)
-       (X-offset . ,(ly:make-simple-closure
-                     `(,+
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::centered-on-x-parent))
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-aligned-on-self)))))
-       (meta . ((class . Item)
-                (interfaces . (grid-line-interface
-                               self-alignment-interface))))))
+        (layer . 0)
+        (self-alignment-X . ,CENTER)
+        (stencil . ,ly:grid-line-interface::print)
+        (X-extent  . ,ly:grid-line-interface::width)
+        (X-offset . ,(ly:make-simple-closure
+                      `(,+
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::centered-on-x-parent))
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-aligned-on-self)))))
+        (meta . ((class . Item)
+                 (interfaces . (grid-line-interface
+                                self-alignment-interface))))))
 
     (GridPoint
      . (
-       (X-extent . (0 . 0))
-       (Y-extent . (0 . 0))
-       (meta . ((class . Item)
-                (interfaces . (grid-point-interface))))))
+        (X-extent . (0 . 0))
+        (Y-extent . (0 . 0))
+        (meta . ((class . Item)
+                 (interfaces . (grid-point-interface))))))
 
 
     (Hairpin
      . (
-       (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
-       (bound-padding . 1.0)
-       (broken-bound-padding . ,ly:hairpin::broken-bound-padding)
-       (circled-tip . #f)
-       (grow-direction . ,hairpin::calc-grow-direction)
-       (height . 0.6666)
-       (minimum-length . 2.0)
-       (self-alignment-Y . ,CENTER)
-       (springs-and-rods . ,ly:spanner::set-spacing-rods)
-       (stencil . ,ly:hairpin::print)
-       (thickness . 1.0)
-       (to-barline . #t)
-       (Y-offset . ,ly:self-alignment-interface::y-aligned-on-self)
-       (meta . ((class . Spanner)
-                (interfaces . (dynamic-interface
-                               hairpin-interface
-                               line-interface
-                               self-alignment-interface
-                               spanner-interface))))))
+        (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
+        (bound-padding . 1.0)
+        (broken-bound-padding . ,ly:hairpin::broken-bound-padding)
+        (circled-tip . #f)
+        (grow-direction . ,hairpin::calc-grow-direction)
+        (height . 0.6666)
+        (minimum-length . 2.0)
+        (self-alignment-Y . ,CENTER)
+        (springs-and-rods . ,ly:spanner::set-spacing-rods)
+        (stencil . ,ly:hairpin::print)
+        (thickness . 1.0)
+        (to-barline . #t)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (Y-extent . ,(grob::unpure-Y-extent-from-stencil ly:hairpin::pure-height))
+        (Y-offset . ,self-alignment-interface::y-aligned-on-self)
+        (meta . ((class . Spanner)
+                 (interfaces . (dynamic-interface
+                                hairpin-interface
+                                line-interface
+                                self-alignment-interface
+                                spanner-interface))))))
 
     (HorizontalBracket
      . (
-       (bracket-flare . (0.5 . 0.5))
-       (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
-       (direction . ,DOWN)
-       (padding . 0.2)
-       (side-axis . ,Y)
-       (staff-padding . 0.2)
-       (stencil . ,ly:horizontal-bracket::print)
-       (thickness . 1.0)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (interfaces . (horizontal-bracket-interface
-                               line-interface
-                               side-position-interface
-                               spanner-interface))))))
+        (bracket-flare . (0.5 . 0.5))
+        (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
+        (direction . ,DOWN)
+        (padding . 0.2)
+        (side-axis . ,Y)
+        (staff-padding . 0.2)
+        (stencil . ,ly:horizontal-bracket::print)
+        (thickness . 1.0)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Spanner)
+                 (interfaces . (horizontal-bracket-interface
+                                line-interface
+                                side-position-interface
+                                spanner-interface))))))
 
 
     (InstrumentName
      . (
-       (direction . ,LEFT)
-       (padding . 0.3)
-       (self-alignment-X . ,CENTER)
-       (self-alignment-Y . ,CENTER)
-       (stencil . ,system-start-text::print)
-       (X-offset . ,system-start-text::calc-x-offset)
-       (Y-offset . ,system-start-text::calc-y-offset)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               self-alignment-interface
-                               side-position-interface
-                               system-start-text-interface))))))
+        (direction . ,LEFT)
+        (padding . 0.3)
+        (self-alignment-X . ,CENTER)
+        (self-alignment-Y . ,CENTER)
+        (stencil . ,system-start-text::print)
+        (X-offset . ,system-start-text::calc-x-offset)
+        (Y-offset . ,system-start-text::calc-y-offset)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                self-alignment-interface
+                                side-position-interface
+                                system-start-text-interface))))))
 
     (InstrumentSwitch
      . (
-       (direction . ,UP)
-       (extra-spacing-width . (+inf.0 . -inf.0))
-       (outside-staff-priority . 500)
-       (padding . 0.5)
-       (self-alignment-X . ,LEFT)
-       (side-axis . ,Y)
-       (staff-padding . 0.5)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               self-alignment-interface
-                               side-position-interface
-                               text-interface))))))
+        (direction . ,UP)
+        (extra-spacing-width . (+inf.0 . -inf.0))
+        (outside-staff-priority . 500)
+        (padding . 0.5)
+        (self-alignment-X . ,LEFT)
+        (side-axis . ,Y)
+        (staff-padding . 0.5)
+        (stencil . ,ly:text-interface::print)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                self-alignment-interface
+                                side-position-interface
+                                text-interface))))))
 
 
     (KeyCancellation
      . (
-       (break-align-symbol . key-cancellation)
-       (break-visibility . ,begin-of-line-invisible)
-       (glyph-name-alist . ,cancellation-glyph-name-alist)
-       (non-musical . #t)
-       (space-alist . (
-                       (time-signature . (extra-space . 1.25))
-                       (staff-bar . (extra-space . 0.6))
-                       (key-signature . (extra-space . 0.5))
-                       (cue-clef . (extra-space . 0.5))
-                       (right-edge . (extra-space . 0.5))
-                       (first-note . (fixed-space . 2.5))))
-       (stencil . ,ly:key-signature-interface::print)
-       (extra-spacing-width . (0.0 . 1.0))
-       (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
+        (break-align-symbol . key-cancellation)
+        (break-visibility . ,begin-of-line-invisible)
+        (glyph-name-alist . ,cancellation-glyph-name-alist)
+        (non-musical . #t)
+        (flat-positions . (2 3 4 2 1 2 1))
+        (sharp-positions . (4 5 4 2 3 2 3))
+        (space-alist . (
+                        (time-signature . (extra-space . 1.25))
+                        (staff-bar . (extra-space . 0.6))
+                        (key-signature . (extra-space . 0.5))
+                        (cue-clef . (extra-space . 0.5))
+                        (right-edge . (extra-space . 0.5))
+                        (first-note . (fixed-space . 2.5))))
+        (stencil . ,ly:key-signature-interface::print)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (extra-spacing-width . (0.0 . 1.0))
+        (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (meta . ((class . Item)
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
-                (interfaces . (break-aligned-interface
-                               font-interface
-                               key-cancellation-interface
-                               key-signature-interface
-                               pure-from-neighbor-interface
-                               staff-symbol-referencer-interface))))))
+                 (interfaces . (break-aligned-interface
+                                font-interface
+                                key-cancellation-interface
+                                key-signature-interface
+                                pure-from-neighbor-interface
+                                staff-symbol-referencer-interface))))))
 
     (KeySignature
      . (
-       (avoid-slur . inside)
-       (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
-       (break-align-symbol . key-signature)
-       (break-visibility . ,begin-of-line-visible)
-       (glyph-name-alist . ,standard-alteration-glyph-name-alist)
-       (non-musical . #t)
-       (space-alist . (
-                       (time-signature . (extra-space . 1.15))
-                       (staff-bar . (extra-space . 1.1))
-                       (cue-clef . (extra-space . 0.5))
-                       (right-edge . (extra-space . 0.5))
-                       (first-note . (fixed-space . 2.5))))
-       (stencil . ,ly:key-signature-interface::print)
-       (extra-spacing-width . (0.0 . 1.0))
-       (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
+        (avoid-slur . inside)
+        (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
+        (break-align-anchor-alignment . ,RIGHT)
+        (break-align-symbol . key-signature)
+        (break-visibility . ,begin-of-line-visible)
+        (glyph-name-alist . ,standard-alteration-glyph-name-alist)
+        (non-musical . #t)
+        (flat-positions . (2 3 4 2 1 2 1))
+        (sharp-positions . (4 5 4 2 3 2 3))
+        (space-alist . (
+                        (time-signature . (extra-space . 1.15))
+                        (staff-bar . (extra-space . 1.1))
+                        (cue-clef . (extra-space . 0.5))
+                        (right-edge . (extra-space . 0.5))
+                        (first-note . (fixed-space . 2.5))))
+        (stencil . ,ly:key-signature-interface::print)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (extra-spacing-width . (0.0 . 1.0))
+        (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (meta . ((class . Item)
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
-                (interfaces . (break-aligned-interface
-                               font-interface
-                               key-signature-interface
-                               pure-from-neighbor-interface
-                               staff-symbol-referencer-interface))))))
-
-
-   (LaissezVibrerTie
-     . (
-       (control-points . ,ly:semi-tie::calc-control-points)
-       (details . ((ratio . 0.333)
-                   (height-limit . 1.0)))
-       (direction . ,ly:tie::calc-direction)
-       (head-direction . ,LEFT)
-       (stencil  . ,laissez-vibrer::print)
-       (thickness . 1.0)
-       (extra-spacing-height . (-0.5 . 0.5))
-       (meta . ((class . Item)
-                (interfaces . (semi-tie-interface))))))
+                 (interfaces . (break-aligned-interface
+                                font-interface
+                                key-signature-interface
+                                pure-from-neighbor-interface
+                                staff-symbol-referencer-interface))))))
+
+    (KievanLigature
+     . (
+        (springs-and-rods . ,ly:spanner::set-spacing-rods)
+        (stencil . ,ly:kievan-ligature::print)
+        (padding . 0.5)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                kievan-ligature-interface))))))
+
+    (LaissezVibrerTie
+     . (
+        (control-points . ,ly:semi-tie::calc-control-points)
+        (cross-staff . ,semi-tie::calc-cross-staff)
+        (details . ((ratio . 0.333)
+                    (height-limit . 1.0)))
+        (direction . ,ly:tie::calc-direction)
+        (head-direction . ,LEFT)
+        (stencil  . ,laissez-vibrer::print)
+        (thickness . 1.0)
+        (extra-spacing-height . (-0.5 . 0.5))
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (semi-tie-interface))))))
 
     (LaissezVibrerTieColumn
      . (
-       (head-direction . ,ly:semi-tie-column::calc-head-direction)
-       (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
-       (X-extent . #f)
-       (Y-extent . #f)
-       (meta . ((class . Item)
-                (interfaces . (semi-tie-column-interface))))))
+        (head-direction . ,ly:semi-tie-column::calc-head-direction)
+        (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
+        (X-extent . #f)
+        (Y-extent . #f)
+        (meta . ((class . Item)
+                 (interfaces . (semi-tie-column-interface))))))
 
     (LedgerLineSpanner
      . (
-       (layer . 0)
-       (length-fraction . 0.25)
-       (minimum-length-fraction . 0.25)
-       (springs-and-rods . ,ly:ledger-line-spanner::set-spacing-rods)
-       (stencil . ,ly:ledger-line-spanner::print)
-       (X-extent . #f)
-       (Y-extent . #f)
-       (meta . ((class . Spanner)
-                (interfaces . (ledger-line-spanner-interface))))))
+        (layer . 0)
+        (length-fraction . 0.25)
+        (minimum-length-fraction . 0.25)
+        (springs-and-rods . ,ly:ledger-line-spanner::set-spacing-rods)
+        (stencil . ,ly:ledger-line-spanner::print)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (X-extent . #f)
+        (Y-extent . #f)
+        (meta . ((class . Spanner)
+                 (interfaces . (ledger-line-spanner-interface))))))
 
     (LeftEdge
      . (
-       (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
-       (break-align-symbol . left-edge)
-       (break-visibility . ,center-invisible)
-       (non-musical . #t)
-       (extra-spacing-height . (+inf.0 . -inf.0))
-       (space-alist . (
-                       (ambitus . (extra-space . 2.0))
-                       (breathing-sign . (minimum-space . 0.0))
-                       (cue-end-clef . (extra-space . 0.8))
-                       (clef . (extra-space . 0.8))
-                       (cue-clef . (extra-space . 0.8))
-                       (staff-bar . (extra-space . 0.0))
-                       (key-cancellation . (extra-space . 0.0))
-                       (key-signature . (extra-space . 0.8))
-                       (time-signature . (extra-space . 1.0))
-                       (custos . (extra-space . 0.0))
-                       (first-note . (fixed-space . 2.0))
-                       (right-edge . (extra-space . 0.0))
-                       ))
-       (X-extent . (0 . 0))
-       (meta . ((class . Item)
-                (interfaces . (break-aligned-interface))))))
+        (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
+        (break-align-symbol . left-edge)
+        (break-visibility . ,center-invisible)
+        (non-musical . #t)
+        (extra-spacing-height . (+inf.0 . -inf.0))
+        (space-alist . (
+                        (ambitus . (extra-space . 2.0))
+                        (breathing-sign . (minimum-space . 0.0))
+                        (cue-end-clef . (extra-space . 0.8))
+                        (clef . (extra-space . 0.8))
+                        (cue-clef . (extra-space . 0.8))
+                        (staff-bar . (extra-space . 0.0))
+                        (key-cancellation . (extra-space . 0.0))
+                        (key-signature . (extra-space . 0.8))
+                        (time-signature . (extra-space . 1.0))
+                        (custos . (extra-space . 0.0))
+                        (first-note . (fixed-space . 2.0))
+                        (right-edge . (extra-space . 0.0))
+                        ))
+        (X-extent . (0 . 0))
+        (meta . ((class . Item)
+                 (interfaces . (break-aligned-interface))))))
 
     (LigatureBracket
      . (
-       ;; ugh.  A ligature bracket is totally different from
-       ;; a tuplet bracket.
-
-       (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
-       (direction . ,UP)
-       (edge-height . (0.7 . 0.7))
-       (padding . 2.0)
-       (positions . ,ly:tuplet-bracket::calc-positions)
-       (shorten-pair . (-0.2 . -0.2))
-       (staff-padding . 0.25)
-       (stencil . ,ly:tuplet-bracket::print)
-       (thickness . 1.6)
-       (X-positions . ,ly:tuplet-bracket::calc-x-positions)
-       (meta . ((class . Spanner)
-                (interfaces . (line-interface
-                               tuplet-bracket-interface))))))
+        ;; ugh.  A ligature bracket is totally different from
+        ;; a tuplet bracket.
+
+        (bracket-visibility . #t)
+        (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
+        (direction . ,UP)
+        (edge-height . (0.7 . 0.7))
+        (padding . 2.0)
+        (positions . ,ly:tuplet-bracket::calc-positions)
+        (shorten-pair . (-0.2 . -0.2))
+        (staff-padding . 0.25)
+        (stencil . ,ly:tuplet-bracket::print)
+        (thickness . 1.6)
+        (X-positions . ,ly:tuplet-bracket::calc-x-positions)
+        (meta . ((class . Spanner)
+                 (interfaces . (line-interface
+                                tuplet-bracket-interface))))))
 
     (LyricExtender
      . (
-       (minimum-length . 1.5)
-       (stencil . ,ly:lyric-extender::print)
-       (thickness . 0.8) ; line-thickness
-       (Y-extent . (0 . 0))
-       (meta . ((class . Spanner)
-                (interfaces . (lyric-extender-interface
-                               lyric-interface))))))
+        (minimum-length . 1.5)
+        (stencil . ,ly:lyric-extender::print)
+        (thickness . 0.8) ; line-thickness
+        (Y-extent . (0 . 0))
+        (meta . ((class . Spanner)
+                 (interfaces . (lyric-extender-interface
+                                lyric-interface))))))
 
     (LyricHyphen
      . (
-       (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
-       (dash-period . 10.0)
-       (height . 0.42)
-       (length . 0.66)
-       (minimum-distance . 0.1)
-       (minimum-length . 0.3)
-       (padding . 0.07)
-       (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods)
-       (stencil . ,ly:lyric-hyphen::print)
-       (thickness . 1.3)
-       (Y-extent . (0 . 0))
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               lyric-hyphen-interface
-                               lyric-interface
-                               spanner-interface))))))
+        (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
+        (dash-period . 10.0)
+        (height . 0.42)
+        (length . 0.66)
+        (minimum-distance . 0.1)
+        (minimum-length . 0.3)
+        (padding . 0.07)
+        (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods)
+        (stencil . ,ly:lyric-hyphen::print)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (thickness . 1.3)
+        (Y-extent . (0 . 0))
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                lyric-hyphen-interface
+                                lyric-interface
+                                spanner-interface))))))
 
     (LyricSpace
      . (
-       (minimum-distance . 0.45)
-       (padding . 0.0)
-       (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods)
-       (X-extent . #f)
-       (Y-extent . #f)
-       (meta . ((class . Spanner)
-                (interfaces . (lyric-hyphen-interface
-                               spanner-interface))))))
+        (minimum-distance . 0.45)
+        (padding . 0.0)
+        (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods)
+        (X-extent . #f)
+        (Y-extent . #f)
+        (meta . ((class . Spanner)
+                 (interfaces . (lyric-hyphen-interface
+                                spanner-interface))))))
 
     (LyricText
      . (
-       (extra-spacing-width . (0.0 . 0.0))
-       ;; Recede in height for purposes of note spacing,
-       ;; so notes in melismata can be freely spaced above lyrics
-       (extra-spacing-height . (0.2 . -0.2))
-       (font-series . medium)
-       (font-size . 1.0)
-       (self-alignment-X . ,CENTER)
-       (stencil . ,lyric-text::print)
-       (text . ,(grob::calc-property-by-copy 'text))
-       (word-space . 0.6)
-       (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               lyric-syllable-interface
-                               rhythmic-grob-interface
-                               self-alignment-interface
-                               text-interface))))))
-
+        (extra-spacing-width . (0.0 . 0.0))
+        ;; Recede in height for purposes of note spacing,
+        ;; so notes in melismata can be freely spaced above lyrics
+        (extra-spacing-height . (0.2 . -0.2))
+        (font-series . medium)
+        (font-size . 1.0)
+        (self-alignment-X . ,CENTER)
+        (stencil . ,lyric-text::print)
+        (text . ,(grob::calc-property-by-copy 'text))
+        (word-space . 0.6)
+        (skyline-horizontal-padding . 0.1)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                lyric-syllable-interface
+                                rhythmic-grob-interface
+                                self-alignment-interface
+                                text-interface))))))
+
+    (MeasureCounter
+     . (
+        (count-from . 1)
+        (direction . ,UP)
+        (font-encoding . fetaText)
+        (font-size . -2)
+        (outside-staff-horizontal-padding . 0.5)
+        (outside-staff-priority . 750)
+        (self-alignment-X . ,CENTER)
+        (side-axis . ,Y)
+        (staff-padding . 0.5)
+        (stencil . ,measure-counter-stencil)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                measure-counter-interface
+                                self-alignment-interface
+                                side-position-interface
+                                text-interface))))))
 
     (MeasureGrouping
      . (
-       (direction . ,UP)
-       (height . 2.0)
-       (padding . 2)
-       (side-axis . ,Y)
-       (staff-padding . 3)
-       (stencil . ,ly:measure-grouping::print)
-       (thickness . 1)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (interfaces . (measure-grouping-interface
-                               side-position-interface))))))
+        (direction . ,UP)
+        (height . 2.0)
+        (padding . 2)
+        (side-axis . ,Y)
+        (staff-padding . 3)
+        (stencil . ,ly:measure-grouping::print)
+        (thickness . 1)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Spanner)
+                 (interfaces . (measure-grouping-interface
+                                side-position-interface))))))
 
     (MelodyItem
      . (
-       (neutral-direction . ,DOWN)
-       (meta . ((class . Item)
-                (interfaces . (melody-spanner-interface))))))
+        (neutral-direction . ,DOWN)
+        (meta . ((class . Item)
+                 (interfaces . (melody-spanner-interface))))))
 
     (MensuralLigature
      . (
-       (stencil . ,ly:mensural-ligature::print)
-       (thickness . 1.3)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               mensural-ligature-interface))))))
+        (springs-and-rods . ,ly:spanner::set-spacing-rods)
+        (stencil . ,ly:mensural-ligature::print)
+        (thickness . 1.3)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                mensural-ligature-interface))))))
 
     (MetronomeMark
      . (
-       (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
-       (break-visibility . ,end-of-line-invisible)
-       (direction . ,UP)
-       (extra-spacing-width . (+inf.0 . -inf.0))
-       (outside-staff-priority . 1000)
-       (padding . 0.8)
-       (side-axis . ,Y)
-       (stencil . ,ly:text-interface::print)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (X-offset . ,(ly:make-simple-closure
-                     `(,+
-                       ,(ly:make-simple-closure
-                         (list ly:break-alignable-interface::self-align-callback))
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-aligned-on-self)))))
-       (self-alignment-X . ,LEFT)
-       (break-align-symbols . (time-signature))
-       (non-break-align-symbols . (multi-measure-rest-interface))
-       (meta . ((class . Item)
-                (interfaces . (break-alignable-interface
-                               font-interface
-                               metronome-mark-interface
-                               self-alignment-interface
-                               side-position-interface
-                               text-interface))))))
+        (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
+        (break-visibility . ,end-of-line-invisible)
+        (direction . ,UP)
+        (extra-spacing-width . (+inf.0 . -inf.0))
+        (outside-staff-horizontal-padding . 0.2)
+        (outside-staff-priority . 1000)
+        (padding . 0.8)
+        (side-axis . ,Y)
+        (stencil . ,ly:text-interface::print)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (X-offset . ,(ly:make-simple-closure
+                      `(,+
+                        ,(ly:make-simple-closure
+                          (list ly:break-alignable-interface::self-align-callback))
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-aligned-on-self)))))
+        (self-alignment-X . ,LEFT)
+        (break-align-symbols . (time-signature))
+        (non-break-align-symbols . (paper-column-interface))
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (break-alignable-interface
+                                font-interface
+                                metronome-mark-interface
+                                self-alignment-interface
+                                side-position-interface
+                                text-interface))))))
 
     (MultiMeasureRest
      . (
-       (expand-limit . 10)
-       (hair-thickness . 2.0)
-       (round-up-exceptions . ())
-       (padding . 1)
-       (spacing-pair . (break-alignment . break-alignment))
-       (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
-       (stencil . ,ly:multi-measure-rest::print)
-       (thick-thickness . 6.6)
-       ;; See Wanske pp. 125
-       (usable-duration-logs . ,(iota 4 -3))
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               multi-measure-interface
-                               multi-measure-rest-interface
-                               rest-interface
-                               staff-symbol-referencer-interface))))))
+        (expand-limit . 10)
+        (hair-thickness . 2.0)
+        (round-up-exceptions . ())
+        (padding . 1)
+        (spacing-pair . (break-alignment . break-alignment))
+        (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
+        (stencil . ,ly:multi-measure-rest::print)
+        (thick-thickness . 6.6)
+        ;; See Wanske pp. 125
+        (usable-duration-logs . ,(iota 4 -3))
+        (Y-extent . ,(ly:make-unpure-pure-container ly:multi-measure-rest::height))
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                multi-measure-interface
+                                multi-measure-rest-interface
+                                rest-interface
+                                staff-symbol-referencer-interface))))))
 
     (MultiMeasureRestNumber
      . (
-       (bound-padding  . 2.0)
-       (direction . ,UP)
-       (font-encoding . fetaText)
-       (padding . 0.4)
-       (self-alignment-X . ,CENTER)
-       (side-axis . ,Y)
-       (springs-and-rods . ,ly:multi-measure-rest::set-text-rods)
-       (staff-padding . 0.4)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,(ly:make-simple-closure
-                     `(,+
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-aligned-on-self))
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-centered-on-y-parent)))))
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               multi-measure-interface
-                               self-alignment-interface
-                               side-position-interface
-                               text-interface))))))
+        (bound-padding  . 2.0)
+        (direction . ,UP)
+        (font-encoding . fetaText)
+        (padding . 0.4)
+        (self-alignment-X . ,CENTER)
+        (side-axis . ,Y)
+        (springs-and-rods . ,ly:multi-measure-rest::set-text-rods)
+        (staff-padding . 0.4)
+        (stencil . ,ly:text-interface::print)
+        (X-offset . ,(ly:make-simple-closure
+                      `(,+
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-aligned-on-self))
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-centered-on-y-parent)))))
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                multi-measure-interface
+                                self-alignment-interface
+                                side-position-interface
+                                text-interface))))))
 
     (MultiMeasureRestText
      . (
-       (direction . ,UP)
-       (outside-staff-priority . 450)
-       (padding . 0.2)
-       (self-alignment-X . ,CENTER)
-       (staff-padding . 0.25)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,(ly:make-simple-closure
-                     `(,+
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-centered-on-y-parent))
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-aligned-on-self)))))
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               multi-measure-interface
-                               self-alignment-interface
-                               side-position-interface
-                               text-interface))))))
+        (direction . ,UP)
+        (outside-staff-priority . 450)
+        (padding . 0.2)
+        (self-alignment-X . ,CENTER)
+        (skyline-horizontal-padding . 0.2)
+        (staff-padding . 0.25)
+        (stencil . ,ly:text-interface::print)
+        (X-offset . ,(ly:make-simple-closure
+                      `(,+
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-centered-on-y-parent))
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-aligned-on-self)))))
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                multi-measure-interface
+                                self-alignment-interface
+                                side-position-interface
+                                text-interface))))))
 
 
     (NonMusicalPaperColumn
      . (
-       (allow-loose-spacing . #t)
-       (axes . (,X))
-       (before-line-breaking . ,ly:paper-column::before-line-breaking)
-       (bound-alignment-interfaces . (break-alignment-interface))
-       (full-measure-extra-space . 1.0)
-       (horizontal-skylines . ,ly:separation-item::calc-skylines)
-       ;;                    (stencil . ,ly:paper-column::print)
-
-       (keep-inside-line . #t)
-       (line-break-permission . allow)
-       (non-musical . #t)
-       (page-break-permission . allow)
-
-       ;; debugging stuff: print column number.
-       ;;               (font-size . -6) (font-name . "sans")  (Y-extent . #f)
-
-       (X-extent . ,ly:axis-group-interface::width)
-       (meta . ((class . Paper_column)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (axis-group-interface
-                               font-interface
-                               paper-column-interface
-                               separation-item-interface
-                               spaceable-grob-interface))))))
+        (allow-loose-spacing . #t)
+        (axes . (,X))
+        (before-line-breaking . ,ly:paper-column::before-line-breaking)
+        (bound-alignment-interfaces . (break-alignment-interface))
+        ;; used by Paper_column::print when debugging columns:
+        (font-size . -7.5)
+        (full-measure-extra-space . 1.0)
+        (horizontal-skylines . ,ly:separation-item::calc-skylines)
+        ;;                    (stencil . ,ly:paper-column::print)
+
+        (keep-inside-line . #t)
+        ;; used by Paper_column::print when debugging columns:
+        (layer . 1000)
+        (line-break-permission . allow)
+        (non-musical . #t)
+        (page-break-permission . allow)
+        (X-extent . ,ly:axis-group-interface::width)
+        (meta . ((class . Paper_column)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (axis-group-interface
+                                font-interface
+                                paper-column-interface
+                                separation-item-interface
+                                spaceable-grob-interface))))))
 
     (NoteCollision
      . (
-       (axes . (,X ,Y))
-       (positioning-done . ,ly:note-collision-interface::calc-positioning-done)
-       (prefer-dotted-right . #t)
-       (X-extent . ,ly:axis-group-interface::width)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (meta . ((class . Item)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (axis-group-interface
-                               note-collision-interface))))))
+        (axes . (,X ,Y))
+        (positioning-done . ,ly:note-collision-interface::calc-positioning-done)
+        (prefer-dotted-right . #t)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (meta . ((class . Item)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (axis-group-interface
+                                note-collision-interface))))))
 
     (NoteColumn
      . (
-       (axes . (,X ,Y))
-       (bound-alignment-interfaces . (rhythmic-head-interface stem-interface))
-       (horizontal-skylines . ,ly:separation-item::calc-skylines)
-       (skyline-vertical-padding . 0.15)
-       (X-extent . ,ly:axis-group-interface::width)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (meta . ((class . Item)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (axis-group-interface
-                               note-column-interface
-                               separation-item-interface))))))
+        (axes . (,X ,Y))
+        (bound-alignment-interfaces . (rhythmic-head-interface stem-interface))
+        (horizontal-skylines . ,ly:separation-item::calc-skylines)
+        (skyline-vertical-padding . 0.15)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (meta . ((class . Item)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (axis-group-interface
+                                note-column-interface
+                                separation-item-interface))))))
 
     (NoteHead
      . (
-       (flexa-width . 2.0)
-       (duration-log . ,note-head::calc-duration-log)
-       (extra-spacing-height . ,ly:note-head::include-ledger-line-height)
-       (glyph-name . ,note-head::calc-glyph-name)
-       (ligature-flexa . #f)
-       (stem-attachment . ,ly:note-head::calc-stem-attachment)
-       (stencil . ,ly:note-head::print)
-       (X-offset . ,ly:note-head::stem-x-shift)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               gregorian-ligature-interface
-                               ledgered-interface
+        (flexa-width . 2.0)
+        (duration-log . ,note-head::calc-duration-log)
+        (extra-spacing-height . ,ly:note-head::include-ledger-line-height)
+        (glyph-name . ,note-head::calc-glyph-name)
+        (ligature-flexa . #f)
+        (stem-attachment . ,ly:note-head::calc-stem-attachment)
+        (stencil . ,ly:note-head::print)
+        (X-offset . ,ly:note-head::stem-x-shift)
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                gregorian-ligature-interface
+                                ledgered-interface
                                 ligature-head-interface
-                               mensural-ligature-interface
-                               note-head-interface
-                               rhythmic-grob-interface
-                               rhythmic-head-interface
-                               staff-symbol-referencer-interface
-                               vaticana-ligature-interface))))))
+                                mensural-ligature-interface
+                                note-head-interface
+                                rhythmic-grob-interface
+                                rhythmic-head-interface
+                                staff-symbol-referencer-interface
+                                vaticana-ligature-interface))))))
 
     (NoteName
      . (
-       (stencil . ,ly:text-interface::print)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               note-name-interface
-                               text-interface))))))
+        (stencil . ,ly:text-interface::print)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                note-name-interface
+                                text-interface))))))
 
     (NoteSpacing
      . (
-       ;; Changed this from 0.75.
-       ;; If you ever change this back, please document! --hwn
-       (knee-spacing-correction . 1.0)
-       (same-direction-correction . 0.25)
-       (space-to-barline . #t)
-       (stem-spacing-correction . 0.5)
-       (meta . ((class . Item)
-                (interfaces . (note-spacing-interface
-                               spacing-interface))))))
-
-
-    (OctavateEight
-     . (
-       (break-visibility . ,inherit-x-parent-visibility)
-       (font-shape . italic)
-       (font-size . -4)
-       (self-alignment-X . ,CENTER)
-       (staff-padding . 0.2)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,(ly:make-simple-closure
-                     `(,+
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-aligned-on-self))
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::centered-on-x-parent)))))
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               self-alignment-interface
-                               side-position-interface
-                               text-interface))))))
+        ;; Changed this from 0.75.
+        ;; If you ever change this back, please document! --hwn
+        (knee-spacing-correction . 1.0)
+        (same-direction-correction . 0.25)
+        (space-to-barline . #t)
+        (stem-spacing-correction . 0.5)
+        (meta . ((class . Item)
+                 (interfaces . (note-spacing-interface
+                                spacing-interface))))))
 
     (OttavaBracket
      . (
-       (dash-fraction . 0.3)
-       (direction . ,UP)
-       (edge-height . (0 . 1.2))
-       (font-shape . italic)
-       (minimum-length . 1.0)
-       (outside-staff-priority . 400)
-       (padding . 0.5)
-       (shorten-pair . (0.0 . -0.6))
-       (staff-padding . 1.0)
-       (stencil . ,ly:ottava-bracket::print)
-       (style . dashed-line)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               horizontal-bracket-interface
-                               line-interface
-                               ottava-bracket-interface
-                               side-position-interface
-                               text-interface))))))
+        (dash-fraction . 0.3)
+        (direction . ,UP)
+        (edge-height . (0 . 1.2))
+        (font-shape . italic)
+        (minimum-length . 1.0)
+        (outside-staff-priority . 400)
+        (padding . 0.5)
+        (shorten-pair . (0.0 . -0.6))
+        (staff-padding . 2.0)
+        (stencil . ,ly:ottava-bracket::print)
+        (style . dashed-line)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                horizontal-bracket-interface
+                                line-interface
+                                ottava-bracket-interface
+                                side-position-interface
+                                text-interface))))))
 
 
     (PaperColumn
      . (
-       (allow-loose-spacing . #t)
-       (axes . (,X))
-       (before-line-breaking . ,ly:paper-column::before-line-breaking)
-       (bound-alignment-interfaces . (note-column-interface))
-       (horizontal-skylines . ,ly:separation-item::calc-skylines)
-       (keep-inside-line . #t)
-       ;; (stencil . ,ly:paper-column::print)
-       (X-extent . ,ly:axis-group-interface::width)
-
-       ;; debugging
-       ;;                       (font-size . -6) (font-name . "sans") (Y-extent . #f)
-       (meta . ((class . Paper_column)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (axis-group-interface
-                               font-interface
-                               paper-column-interface
-                               separation-item-interface
-                               spaceable-grob-interface))))))
+        (allow-loose-spacing . #t)
+        (axes . (,X))
+        (before-line-breaking . ,ly:paper-column::before-line-breaking)
+        (bound-alignment-interfaces . (note-column-interface))
+        ;; used by Paper_column::print when debugging columns:
+        (font-size . -7.5)
+        (horizontal-skylines . ,ly:separation-item::calc-skylines)
+        (keep-inside-line . #t)
+        ;; used by Paper_column::print when debugging columns:
+        (layer . 1000)
+        ;; 0.08 comes from spacing-horizontal-skyline.ly
+        ;; allows double flat of F to be nestled over dots of C
+        (skyline-vertical-padding . 0.08)
+        ;; (stencil . ,ly:paper-column::print)
+        (X-extent . ,ly:axis-group-interface::width)
+        (meta . ((class . Paper_column)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (axis-group-interface
+                                font-interface
+                                paper-column-interface
+                                separation-item-interface
+                                spaceable-grob-interface))))))
 
     (ParenthesesItem
      . (
-       (font-size . -6)
-       (padding . 0.2)
-       (stencil . ,parentheses-item::print)
-       (stencils . ,parentheses-item::calc-parenthesis-stencils)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               parentheses-interface))))))
+        (font-size . -6)
+        (padding . 0.2)
+        (stencil . ,parentheses-item::print)
+        (stencils . ,parentheses-item::calc-parenthesis-stencils)
+        ;; X-extent needs to be non-empty in order to allow proper
+        ;; horizontal attachment.  ParenthesesItem does not reserve
+        ;; space of its own, however.
+        (X-extent . (0 . 0))
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                parentheses-interface))))))
 
     (PercentRepeat
      . (
-       (dot-negative-kern . 0.75)
-       (font-encoding . fetaMusic)
-       (slope . 1.0)
-       (spacing-pair . (break-alignment . staff-bar))
-       (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
-       (stencil . ,ly:multi-measure-rest::percent)
-       (thickness . 0.48)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               multi-measure-rest-interface
-                               percent-repeat-interface))))))
+        (dot-negative-kern . 0.75)
+        (font-encoding . fetaMusic)
+        (slope . 1.0)
+        (spacing-pair . (break-alignment . staff-bar))
+        (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
+        (stencil . ,ly:multi-measure-rest::percent)
+        (thickness . 0.48)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                multi-measure-rest-interface
+                                percent-repeat-interface))))))
 
     (PercentRepeatCounter
      . (
-       (direction . ,UP)
-       (font-encoding . fetaText)
-       (font-size . -2)
-       (padding . 0.2)
-       (self-alignment-X . ,CENTER)
-       (staff-padding . 0.25)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,(ly:make-simple-closure
-                     `(,+
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-centered-on-y-parent))
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-aligned-on-self)))))
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               percent-repeat-interface
-                               self-alignment-interface
-                               side-position-interface
-                               text-interface))))))
+        (direction . ,UP)
+        (font-encoding . fetaText)
+        (font-size . -2)
+        (padding . 0.2)
+        (self-alignment-X . ,CENTER)
+        (staff-padding . 0.25)
+        (stencil . ,ly:text-interface::print)
+        (X-offset . ,(ly:make-simple-closure
+                      `(,+
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-centered-on-y-parent))
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-aligned-on-self)))))
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                percent-repeat-interface
+                                self-alignment-interface
+                                side-position-interface
+                                text-interface))))))
 
     (PhrasingSlur
      . (
-       (control-points . ,ly:slur::calc-control-points)
-       (cross-staff . ,ly:slur::calc-cross-staff)
-       (details . ,default-slur-details)
-       (direction . ,ly:slur::calc-direction)
-       (height-limit . 2.0)
-       (minimum-length . 1.5)
-       (ratio . 0.333)
-       (spanner-id . "")
-       (springs-and-rods . ,ly:spanner::set-spacing-rods)
-       (stencil . ,ly:slur::print)
-       (thickness . 1.1)
-       (vertical-skylines . ,ly:slur::vertical-skylines)
-       (Y-extent . ,ly:slur::height)
-       (meta . ((class . Spanner)
-                (interfaces . (slur-interface))))))
+        (control-points . ,ly:slur::calc-control-points)
+        (cross-staff . ,ly:slur::calc-cross-staff)
+        (details . ,default-slur-details)
+        (direction . ,ly:slur::calc-direction)
+        (height-limit . 2.0)
+        (minimum-length . 1.5)
+        (ratio . 0.333)
+        (spanner-id . "")
+        (springs-and-rods . ,ly:spanner::set-spacing-rods)
+        (stencil . ,ly:slur::print)
+        (thickness . 1.1)
+        (vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
+        (Y-extent . ,slur::height)
+        (meta . ((class . Spanner)
+                 (interfaces . (slur-interface))))))
 
     ;; an example of a text spanner
     (PianoPedalBracket
      . (
-       (bound-padding . 1.0)
-       (bracket-flare . (0.5 . 0.5))
-       (direction . ,DOWN)
-       (edge-height . (1.0 . 1.0))
-       (shorten-pair . (0.0 . 0.0))
-       (stencil . ,ly:piano-pedal-bracket::print)
-       (style . line)
-       (thickness .  1.0)
-       (meta . ((class . Spanner)
-                (interfaces . (line-interface
-                               piano-pedal-bracket-interface
-                               piano-pedal-interface))))))
+        (bound-padding . 1.0)
+        (bracket-flare . (0.5 . 0.5))
+        (direction . ,DOWN)
+        (edge-height . (1.0 . 1.0))
+        (shorten-pair . (0.0 . 0.0))
+        (stencil . ,ly:piano-pedal-bracket::print)
+        (style . line)
+        (thickness .  1.0)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (meta . ((class . Spanner)
+                 (interfaces . (line-interface
+                                piano-pedal-bracket-interface
+                                piano-pedal-interface))))))
 
 
     (RehearsalMark
      . (
-       (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
-       (baseline-skip . 2)
-       (break-align-symbols . (staff-bar clef))
-       (break-visibility . ,end-of-line-invisible)
-       (direction . ,UP)
-       (extra-spacing-width . (+inf.0 . -inf.0))
-       (font-size . 2)
-       (non-musical . #t)
-       (outside-staff-priority . 1500)
-       (padding . 0.8)
-       (self-alignment-X . ,CENTER)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,(ly:make-simple-closure
-                     `(,+
-                       ,(ly:make-simple-closure
-                         (list ly:break-alignable-interface::self-align-callback))
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-aligned-on-self)))))
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Item)
-                (interfaces . (break-alignable-interface
-                               font-interface
-                               mark-interface
-                               self-alignment-interface
-                               side-position-interface
-                               text-interface))))))
+        (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
+        (baseline-skip . 2)
+        (break-align-symbols . (staff-bar key-signature clef))
+        (break-visibility . ,end-of-line-invisible)
+        (direction . ,UP)
+        (extra-spacing-width . (+inf.0 . -inf.0))
+        (font-size . 2)
+        (non-musical . #t)
+        (outside-staff-horizontal-padding . 0.2)
+        (outside-staff-priority . 1500)
+        (padding . 0.8)
+        (self-alignment-X . ,CENTER)
+        (stencil . ,ly:text-interface::print)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (X-offset . ,(ly:make-simple-closure
+                      `(,+
+                        ,(ly:make-simple-closure
+                          (list ly:break-alignable-interface::self-align-callback))
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-aligned-on-self)))))
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (break-alignable-interface
+                                font-interface
+                                mark-interface
+                                self-alignment-interface
+                                side-position-interface
+                                text-interface))))))
 
     (RepeatSlash
      . (
-       (slash-negative-kern . 0.85)
-       (slope . 1.7)
-       (stencil . ,ly:percent-repeat-item-interface::beat-slash)
-       (thickness . 0.48)
-       (meta . ((class . Item)
-                (interfaces . (percent-repeat-interface
-                               percent-repeat-item-interface
-                               rhythmic-grob-interface))))))
+        (slash-negative-kern . 0.85)
+        (slope . 1.7)
+        (stencil . ,ly:percent-repeat-item-interface::beat-slash)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (thickness . 0.48)
+        (meta . ((class . Item)
+                 (interfaces . (percent-repeat-interface
+                                percent-repeat-item-interface
+                                rhythmic-grob-interface))))))
 
     (RepeatTie
      . (
-       (control-points . ,ly:semi-tie::calc-control-points)
-       (details . ((ratio . 0.333)
-                   (height-limit . 1.0)))
-       (direction . ,ly:tie::calc-direction)
-       (head-direction . ,RIGHT)
-       (stencil  . ,ly:tie::print)
-       (thickness . 1.0)
-       (extra-spacing-height . (-0.5 . 0.5))
-       (meta . ((class . Item)
-                (interfaces . (semi-tie-interface))))))
+        (cross-staff . ,semi-tie::calc-cross-staff)
+        (control-points . ,ly:semi-tie::calc-control-points)
+        (details . ((ratio . 0.333)
+                    (height-limit . 1.0)))
+        (direction . ,ly:tie::calc-direction)
+        (head-direction . ,RIGHT)
+        (stencil  . ,ly:tie::print)
+        (thickness . 1.0)
+        (extra-spacing-height . (-0.5 . 0.5))
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (semi-tie-interface))))))
 
     (RepeatTieColumn
      . (
-       (direction . ,ly:tie::calc-direction)
-       (head-direction . ,ly:semi-tie-column::calc-head-direction)
-       (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
-       (X-extent . #f)
-       (Y-extent . #f)
-       (meta . ((class . Item)
-                (interfaces . (semi-tie-column-interface))))))
+        (direction . ,ly:tie::calc-direction)
+        (head-direction . ,ly:semi-tie-column::calc-head-direction)
+        (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
+        (X-extent . #f)
+        (Y-extent . #f)
+        (meta . ((class . Item)
+                 (interfaces . (semi-tie-column-interface))))))
 
     (Rest
      . (
-       (cross-staff . ,ly:rest::calc-cross-staff)
-       (duration-log . ,stem::calc-duration-log)
-       (minimum-distance . 0.25)
-       (stencil . ,ly:rest::print)
-       (X-extent . ,ly:rest::width)
-       (Y-extent . ,ly:rest::height)
-       (Y-offset . ,ly:rest::y-offset-callback)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               rest-interface
-                               rhythmic-grob-interface
-                               rhythmic-head-interface
-                               staff-symbol-referencer-interface))))))
+        (cross-staff . ,ly:rest::calc-cross-staff)
+        (duration-log . ,stem::calc-duration-log)
+        (minimum-distance . 0.25)
+        (stencil . ,ly:rest::print)
+        (X-extent . ,ly:rest::width)
+        (Y-extent . ,(ly:make-unpure-pure-container ly:rest::height ly:rest::pure-height))
+        (Y-offset . ,(ly:make-unpure-pure-container ly:rest::y-offset-callback))
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                rest-interface
+                                rhythmic-grob-interface
+                                rhythmic-head-interface
+                                staff-symbol-referencer-interface))))))
 
     (RestCollision
      . (
-       (minimum-distance . 0.75)
-       (positioning-done . ,ly:rest-collision::calc-positioning-done)
-       (meta . ((class . Item)
-                (interfaces . (rest-collision-interface))))))
+        (minimum-distance . 0.75)
+        (positioning-done . ,ly:rest-collision::calc-positioning-done)
+        (meta . ((class . Item)
+                 (interfaces . (rest-collision-interface))))))
 
 
     (Script
      . (
-       (add-stem-support . #t)
-       (cross-staff . ,ly:script-interface::calc-cross-staff)
-       (direction . ,ly:script-interface::calc-direction)
-       (font-encoding . fetaMusic)
-       (positioning-done . ,ly:script-interface::calc-positioning-done)
-       (side-axis . ,Y)
-
-       ;; padding set in script definitions.
-       (slur-padding . 0.2)
-       (staff-padding . 0.25)
-
-       (stencil . ,ly:script-interface::print)
-       (use-skylines . #t)
-       (X-offset . ,script-interface::calc-x-offset)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               script-interface
-                               side-position-interface))))))
+        (add-stem-support . #t)
+        (cross-staff . ,ly:script-interface::calc-cross-staff)
+        (direction . ,ly:script-interface::calc-direction)
+        (font-encoding . fetaMusic)
+        (horizon-padding . 0.1) ; to avoid interleaving with accidentals
+        (positioning-done . ,ly:script-interface::calc-positioning-done)
+        (side-axis . ,Y)
+
+        ;; padding set in script definitions.
+        (slur-padding . 0.2)
+        (staff-padding . 0.25)
+
+        (stencil . ,ly:script-interface::print)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (X-offset . ,script-interface::calc-x-offset)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                script-interface
+                                side-position-interface))))))
 
     (ScriptColumn
      . (
-       (before-line-breaking . ,ly:script-column::before-line-breaking)
-       (meta . ((class . Item)
-                (interfaces . (script-column-interface))))))
+        (before-line-breaking . ,ly:script-column::before-line-breaking)
+        (meta . ((class . Item)
+                 (interfaces . (script-column-interface))))))
 
     (ScriptRow
      . (
-       (before-line-breaking . ,ly:script-column::row-before-line-breaking)
-       (meta . ((class . Item)
-                (interfaces . (script-column-interface))))))
+        (before-line-breaking . ,ly:script-column::row-before-line-breaking)
+        (meta . ((class . Item)
+                 (interfaces . (script-column-interface))))))
 
     (Slur
      . (
-       (avoid-slur . inside)
-       (control-points . ,ly:slur::calc-control-points)
-       (cross-staff . ,ly:slur::calc-cross-staff)
-       (details . ,default-slur-details)
-       (direction . ,ly:slur::calc-direction)
-       (height-limit . 2.0)
-       (line-thickness . 0.8)
-       (minimum-length . 1.5)
-       (ratio . 0.25)
-       (spanner-id . "")
-       (springs-and-rods . ,ly:spanner::set-spacing-rods)
-       (stencil . ,ly:slur::print)
-       (thickness . 1.2)
-       (vertical-skylines . ,ly:slur::vertical-skylines)
-       (Y-extent . ,ly:slur::height)
-       (meta . ((class . Spanner)
-                (interfaces . (slur-interface))))))
+        (avoid-slur . inside)
+        (control-points . ,ly:slur::calc-control-points)
+        (cross-staff . ,ly:slur::calc-cross-staff)
+        (details . ,default-slur-details)
+        (direction . ,ly:slur::calc-direction)
+        (height-limit . 2.0)
+        (line-thickness . 0.8)
+        (minimum-length . 1.5)
+        (ratio . 0.25)
+        (spanner-id . "")
+        (springs-and-rods . ,ly:spanner::set-spacing-rods)
+        (stencil . ,ly:slur::print)
+        (thickness . 1.2)
+        (vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
+        (Y-extent . ,slur::height)
+        (meta . ((class . Spanner)
+                 (interfaces . (slur-interface))))))
 
     (SostenutoPedal
      . (
-       (direction . ,RIGHT)
-       (extra-spacing-width . (+inf.0 . -inf.0))
-       (font-shape . italic)
-       (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner
-       (self-alignment-X . ,CENTER)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               piano-pedal-script-interface
-                               self-alignment-interface
-                               text-interface))))))
+        (direction . ,RIGHT)
+        (extra-spacing-width . (+inf.0 . -inf.0))
+        (font-shape . italic)
+        (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner
+        (self-alignment-X . ,CENTER)
+        (stencil . ,ly:text-interface::print)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                piano-pedal-script-interface
+                                self-alignment-interface
+                                text-interface))))))
 
     (SostenutoPedalLineSpanner
      . (
-       (axes . (,Y))
-       (direction . ,DOWN)
-       (minimum-space . 1.0)
-       (outside-staff-priority . 1000)
-       (padding . 1.2)
-       (side-axis . ,Y)
-       (staff-padding . 1.0)
-       (X-extent . ,ly:axis-group-interface::width)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (axis-group-interface
-                               piano-pedal-interface
-                               side-position-interface))))))
+        (axes . (,Y))
+        (direction . ,DOWN)
+        (minimum-space . 1.0)
+        (outside-staff-priority . 1000)
+        (padding . 1.2)
+        (side-axis . ,Y)
+        (staff-padding . 1.0)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Spanner)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (axis-group-interface
+                                piano-pedal-interface
+                                side-position-interface))))))
 
     (SpacingSpanner
      . (
-       (average-spacing-wishes . #t)
-       (base-shortest-duration . ,(ly:make-moment 3 16))
-       (common-shortest-duration . ,ly:spacing-spanner::calc-common-shortest-duration)
-       (shortest-duration-space . 2.0)
-       (spacing-increment . 1.2)
-       (springs-and-rods . ,ly:spacing-spanner::set-springs)
-       (meta . ((class . Spanner)
-                (interfaces . (spacing-options-interface
-                               spacing-spanner-interface))))))
+        (average-spacing-wishes . #t)
+        (base-shortest-duration . ,(ly:make-moment 3 16))
+        (common-shortest-duration . ,ly:spacing-spanner::calc-common-shortest-duration)
+        (shortest-duration-space . 2.0)
+        (spacing-increment . 1.2)
+        (springs-and-rods . ,ly:spacing-spanner::set-springs)
+        (meta . ((class . Spanner)
+                 (interfaces . (spacing-options-interface
+                                spacing-spanner-interface))))))
 
     (SpanBar
      . (
-       (allow-span-bar . #t)
-       (bar-extent . ,ly:axis-group-interface::height)
-       (before-line-breaking . ,ly:span-bar::before-line-breaking)
-       (break-align-symbol . staff-bar)
-       (cross-staff . #t)
-       (glyph-name . ,ly:span-bar::calc-glyph-name)
-
-       ;; ugh duplication! (these 4 properties were copied from Barline)
-       ;;
-       ;; Ross. page 151 lists other values, we opt for a leaner look
-       ;;
-       (kern . 3.0)
-       (thin-kern . 3.0)
-       (hair-thickness . 1.6)
-       (thick-thickness . 6.0)
-
-       (layer . 0)
-       (non-musical . #t)
-       (stencil . ,ly:span-bar::print)
-       (X-extent . ,ly:span-bar::width)
-       (Y-extent . (+inf.0 . -inf.0))
-       (meta . ((class . Item)
-                (interfaces . (bar-line-interface
-                               font-interface
-                               span-bar-interface))))))
+        (allow-span-bar . #t)
+        (bar-extent . ,axis-group-interface::height)
+        (before-line-breaking . ,ly:span-bar::before-line-breaking)
+        (break-align-symbol . staff-bar)
+        (cross-staff . #t)
+        (glyph-name . ,ly:span-bar::calc-glyph-name)
+        (layer . 0)
+        (non-musical . #t)
+        (stencil . ,ly:span-bar::print)
+        (X-extent . ,ly:span-bar::width)
+        (Y-extent . (+inf.0 . -inf.0))
+        (meta . ((class . Item)
+                 (interfaces . (bar-line-interface
+                                font-interface
+                                span-bar-interface))))))
 
     (SpanBarStub
      . (
-        (X-extent . ,grob::x-parent-width)
-       (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height)
-       (Y-extent . #f)
-       (meta . ((class . Item)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
-                (interfaces . (pure-from-neighbor-interface))))))
+        (X-extent . ,(grob::inherit-parent-property
+                      X 'X-extent))
+        (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height)
+        ;; we want this to be ignored, so empty, but the extra spacing height
+        ;; should preserve the span bar's presence for horizontal spacing
+        (Y-extent . ,pure-from-neighbor-interface::height-if-pure)
+        (meta . ((class . Item)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (pure-from-neighbor-interface))))))
 
     (StaffGrouper
      . (
-       (staff-staff-spacing . ((basic-distance . 9)
-                               (minimum-distance . 7)
-                               (padding . 1)
+        (staff-staff-spacing . ((basic-distance . 9)
+                                (minimum-distance . 7)
+                                (padding . 1)
                                 (stretchability . 5)))
-       (staffgroup-staff-spacing . ((basic-distance . 10.5)
-                                    (minimum-distance . 8)
-                                    (padding . 1)
+        (staffgroup-staff-spacing . ((basic-distance . 10.5)
+                                     (minimum-distance . 8)
+                                     (padding . 1)
                                      (stretchability . 9)))
-       (meta . ((class . Spanner)
-                (interfaces . (staff-grouper-interface))))))
+        (meta . ((class . Spanner)
+                 (interfaces . (staff-grouper-interface))))))
 
     (StaffSpacing
      . (
-       (non-musical . #t)
-       (stem-spacing-correction . 0.4)
-       (meta . ((class . Item)
-                (interfaces . (spacing-interface
-                               staff-spacing-interface))))))
+        (non-musical . #t)
+        (stem-spacing-correction . 0.4)
+        (meta . ((class . Item)
+                 (interfaces . (spacing-interface
+                                staff-spacing-interface))))))
 
     (StaffSymbol
      . (
-       (layer . 0)
-       (ledger-line-thickness . (1.0 . 0.1))
-       (line-count . 5)
-       (stencil . ,ly:staff-symbol::print)
-       (Y-extent . ,ly:staff-symbol::height)
-       (meta . ((class . Spanner)
-                (interfaces . (staff-symbol-interface))))))
+        (layer . 0)
+        (ledger-line-thickness . (1.0 . 0.1))
+        (line-count . 5)
+        (stencil . ,ly:staff-symbol::print)
+        (Y-extent . ,(ly:make-unpure-pure-container ly:staff-symbol::height))
+        (meta . ((class . Spanner)
+                 (interfaces . (staff-symbol-interface))))))
 
     (StanzaNumber
      . (
-       (direction . ,LEFT)
-       (font-series . bold)
-       (padding . 1.0)
-       (side-axis . ,X)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,ly:side-position-interface::x-aligned-side)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               side-position-interface
-                               stanza-number-interface
-                               text-interface))))))
+        (direction . ,LEFT)
+        (font-series . bold)
+        (padding . 1.0)
+        (side-axis . ,X)
+        (stencil . ,ly:text-interface::print)
+        (X-offset . ,ly:side-position-interface::x-aligned-side)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                side-position-interface
+                                stanza-number-interface
+                                text-interface))))))
 
     (Stem
      . (
-       (beamlet-default-length . (1.1 . 1.1))
-       (beamlet-max-length-proportion . (0.75 . 0.75))
-       (cross-staff . ,ly:stem::calc-cross-staff)
-       (default-direction . ,ly:stem::calc-default-direction)
-       (details
-        . (
-           ;; 3.5 (or 3 measured from note head) is standard length
-           ;; 32nd, 64th, 128th flagged stems should be longer
-           (lengths . (3.5 3.5 3.5 4.25 5.0 6.0))
-
-           ;; FIXME.  3.5 yields too long beams (according to Ross and
-           ;; looking at Baerenreiter examples) for a number of common
-           ;; boundary cases.  Subtracting half a beam thickness fixes
-           ;; this, but the bug may well be somewhere else.
-
-           ;; FIXME this should come from 'lengths
-           (beamed-lengths . (3.26 3.5 3.6))
-
-           ;; The 'normal' minima
-           (beamed-minimum-free-lengths . (1.83 1.5 1.25))
-                                       ;(beamed-minimum-free-lengths . (2.0 1.83 1.25))
-
-           ;; The 'extreme case' minima
-           (beamed-extreme-minimum-free-lengths . (2.0 1.25))
-
-           ;; Stems in unnatural (forced) direction should be shortened by
-           ;; one staff space, according to [Roush & Gourlay].
-           ;; Flagged stems we shorten only half a staff space.
-           (stem-shorten . (1.0 0.5))
-
-           ))
-
-       ;; We use the normal minima as minimum for the ideal lengths,
-       ;; and the extreme minima as abolute minimum length.
-
-       (direction . ,ly:stem::calc-direction)
-       (duration-log . ,stem::calc-duration-log)
-        (length . ,stem::length)
-       (neutral-direction . ,DOWN)
-       (positioning-done . ,ly:stem::calc-positioning-done)
-       (stem-info . ,ly:stem::calc-stem-info)
-       (stem-begin-position . ,ly:stem::calc-stem-begin-position)
-       (stencil . ,ly:stem::print)
-       (thickness . 1.3)
-       (X-extent . ,ly:stem::width)
-       (X-offset . ,ly:stem::offset-callback)
-       (Y-extent . ,ly:stem::height)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
-                (interfaces . (stem-interface))))))
+        (beamlet-default-length . (1.1 . 1.1))
+        (beamlet-max-length-proportion . (0.75 . 0.75))
+        (cross-staff . ,ly:stem::calc-cross-staff)
+        (default-direction . ,ly:stem::calc-default-direction)
+        (details
+         . (
+            ;; 3.5 (or 3 measured from note head) is standard length
+            ;; 32nd, 64th, 128th flagged stems should be longer
+            (lengths . (3.5 3.5 3.5 4.25 5.0 6.0))
+
+            ;; FIXME.  3.5 yields too long beams (according to Ross and
+            ;; looking at Baerenreiter examples) for a number of common
+            ;; boundary cases.  Subtracting half a beam thickness fixes
+            ;; this, but the bug may well be somewhere else.
+
+            ;; FIXME this should come from 'lengths
+            (beamed-lengths . (3.26 3.5 3.6))
+
+            ;; The 'normal' minima
+            (beamed-minimum-free-lengths . (1.83 1.5 1.25))
+            ;;(beamed-minimum-free-lengths . (2.0 1.83 1.25))
+
+            ;; The 'extreme case' minima
+            (beamed-extreme-minimum-free-lengths . (2.0 1.25))
+
+            ;; Stems in unnatural (forced) direction should be shortened by
+            ;; one staff space, according to [Roush & Gourlay].
+            ;; Flagged stems we shorten only half a staff space.
+            (stem-shorten . (1.0 0.5))
+
+            ))
+
+        ;; We use the normal minima as minimum for the ideal lengths,
+        ;; and the extreme minima as abolute minimum length.
+
+        (direction . ,ly:stem::calc-direction)
+        (duration-log . ,stem::calc-duration-log)
+        (length . ,(ly:make-unpure-pure-container ly:stem::calc-length ly:stem::pure-calc-length))
+        (neutral-direction . ,DOWN)
+        (positioning-done . ,ly:stem::calc-positioning-done)
+        (stem-info . ,ly:stem::calc-stem-info)
+        (stem-begin-position . ,(ly:make-unpure-pure-container ly:stem::calc-stem-begin-position ly:stem::pure-calc-stem-begin-position))
+        (stencil . ,ly:stem::print)
+        (thickness . 1.3)
+        (X-extent . ,ly:stem::width)
+        (X-offset . ,ly:stem::offset-callback)
+        (Y-extent . ,(ly:make-unpure-pure-container ly:stem::height ly:stem::pure-height))
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (meta . ((class . Item)
+                 (interfaces . (stem-interface))))))
 
     (StemStub
      . (
         (X-extent . ,stem-stub::width)
-       (extra-spacing-height . ,stem-stub::extra-spacing-height)
-       (Y-extent . ,(ly:make-unpure-pure-container #f stem-stub::pure-height))
-       (meta . ((class . Item)
-                (interfaces . ())))))
+        (extra-spacing-height . ,stem-stub::extra-spacing-height)
+        (Y-extent . ,(ly:make-unpure-pure-container #f stem-stub::pure-height))
+        (meta . ((class . Item)
+                 (interfaces . ())))))
 
     (StemTremolo
      . (
-       (beam-thickness . 0.48) ; staff-space
-       (beam-width . ,ly:stem-tremolo::calc-width) ; staff-space
-       (slope . ,ly:stem-tremolo::calc-slope)
-       (stencil . ,ly:stem-tremolo::print)
-       (style . ,ly:stem-tremolo::calc-style)
-       (X-extent . ,ly:stem-tremolo::width)
-       (X-offset . ,(ly:make-simple-closure
-                     `(,+
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::centered-on-x-parent))
-                       ,(ly:make-simple-closure
-                         (list ly:self-alignment-interface::x-aligned-on-self)))))
-       (Y-offset . ,ly:stem-tremolo::calc-y-offset)
-       (meta . ((class . Item)
-                (interfaces . (self-alignment-interface
+        (beam-thickness . 0.48) ; staff-space
+        (beam-width . ,ly:stem-tremolo::calc-width) ; staff-space
+        (direction . ,ly:stem-tremolo::calc-direction)
+        (slope . ,ly:stem-tremolo::calc-slope)
+        (stencil . ,ly:stem-tremolo::print)
+        (style . ,ly:stem-tremolo::calc-style)
+        (X-extent . ,ly:stem-tremolo::width)
+        (Y-extent . ,(grob::unpure-Y-extent-from-stencil ly:stem-tremolo::pure-height))
+        (X-offset . ,(ly:make-simple-closure
+                      `(,+
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::centered-on-x-parent))
+                        ,(ly:make-simple-closure
+                          (list ly:self-alignment-interface::x-aligned-on-self)))))
+        (Y-offset . ,(ly:make-unpure-pure-container ly:stem-tremolo::calc-y-offset ly:stem-tremolo::pure-calc-y-offset))
+        (meta . ((class . Item)
+                 (interfaces . (self-alignment-interface
                                 stem-tremolo-interface))))))
 
     (StringNumber
      . (
-       (avoid-slur . around)
-       (cross-staff . ,script-or-side-position-cross-staff)
-       (font-encoding . fetaText)
-       (font-size . -5)                ; don't overlap when next to heads.
-       (padding . 0.5)
-       (script-priority . 100)
-       (self-alignment-X . ,CENTER)
-       (self-alignment-Y . ,CENTER)
-       (staff-padding . 0.5)
-       (stencil . ,print-circled-text-callback)
-       (text . ,string-number::calc-text)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               self-alignment-interface
-                               side-position-interface
-                               string-number-interface
-                               text-interface
-                               text-script-interface))))))
+        (avoid-slur . around)
+        (cross-staff . ,script-or-side-position-cross-staff)
+        (font-encoding . fetaText)
+        (font-size . -5)                ; don't overlap when next to heads.
+        (padding . 0.5)
+        (script-priority . 100)
+        (self-alignment-X . ,CENTER)
+        (self-alignment-Y . ,CENTER)
+        (staff-padding . 0.5)
+        (stencil . ,print-circled-text-callback)
+        (text . ,string-number::calc-text)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                self-alignment-interface
+                                side-position-interface
+                                string-number-interface
+                                text-interface
+                                text-script-interface))))))
 
     (StrokeFinger
      . (
-       (digit-names . #("p" "i" "m" "a" "x"))
-       (font-shape . italic)
-       (font-size . -4)                ; don't overlap when next to heads.
-       (padding . 0.5)
-       (script-priority . 100)
-       (self-alignment-X . ,CENTER)
-       (self-alignment-Y . ,CENTER)
-       (staff-padding . 0.5)
-       (stencil . ,ly:text-interface::print)
-       (text . ,stroke-finger::calc-text)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               self-alignment-interface
-                               side-position-interface
-                               stroke-finger-interface
-                               text-interface
-                               text-script-interface))))))
+        (digit-names . #("p" "i" "m" "a" "x"))
+        (font-shape . italic)
+        (font-size . -4)                ; don't overlap when next to heads.
+        (padding . 0.5)
+        (script-priority . 100)
+        (self-alignment-X . ,CENTER)
+        (self-alignment-Y . ,CENTER)
+        (staff-padding . 0.5)
+        (stencil . ,ly:text-interface::print)
+        (text . ,stroke-finger::calc-text)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                self-alignment-interface
+                                side-position-interface
+                                stroke-finger-interface
+                                text-interface
+                                text-script-interface))))))
 
     (SustainPedal
      . (
-       (direction . ,RIGHT)
-       (extra-spacing-width . (+inf.0 . -inf.0))
-       (padding . 0.0)  ;; padding relative to SustainPedalLineSpanner
-       (self-alignment-X . ,CENTER)
-       (stencil . ,ly:sustain-pedal::print)
-       (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               piano-pedal-interface
-                               piano-pedal-script-interface
-                               self-alignment-interface
-                               text-interface))))))
+        (extra-spacing-width . (+inf.0 . -inf.0))
+        (padding . 0.0)  ;; padding relative to SustainPedalLineSpanner
+        (self-alignment-X . ,CENTER)
+        (stencil . ,ly:sustain-pedal::print)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                piano-pedal-interface
+                                piano-pedal-script-interface
+                                self-alignment-interface
+                                text-interface))))))
 
     (SustainPedalLineSpanner
      . (
-       (axes . (,Y))
-       (direction . ,DOWN)
-       (minimum-space . 1.0)
-       (outside-staff-priority . 1000)
-       (padding . 1.2)
-       (side-axis . ,Y)
-       (staff-padding . 1.2)
-       (X-extent . ,ly:axis-group-interface::width)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (axis-group-interface
-                               piano-pedal-interface
-                               side-position-interface))))))
+        (axes . (,Y))
+        (direction . ,DOWN)
+        (minimum-space . 1.0)
+        (outside-staff-priority . 1000)
+        (padding . 1.2)
+        (side-axis . ,Y)
+        (staff-padding . 1.2)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Spanner)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (axis-group-interface
+                                piano-pedal-interface
+                                side-position-interface))))))
 
     (System
      . (
-       (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
-       (axes . (,X ,Y))
-       (skyline-horizontal-padding . 0.5)
-       (vertical-skylines . ,ly:axis-group-interface::calc-skylines)
-       (X-extent . ,ly:axis-group-interface::width)
-       (Y-extent . ,ly:system::height)
-       (meta . ((class . System)
-                (object-callbacks . ((footnotes-before-line-breaking . ,ly:system::footnotes-before-line-breaking)
-                                     (footnotes-after-line-breaking . ,ly:system::footnotes-after-line-breaking)
-                                     (pure-relevant-grobs . ,ly:system::calc-pure-relevant-grobs)
-                                     (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)))
-                (interfaces . (axis-group-interface
-                               system-interface))))))
+        (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
+        (axes . (,X ,Y))
+        (outside-staff-placement-directive . left-to-right-polite)
+        (skyline-horizontal-padding . 1.0)
+        (vertical-skylines . ,ly:axis-group-interface::calc-skylines)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,(ly:make-unpure-pure-container ly:system::height ly:system::calc-pure-height))
+        (meta . ((class . System)
+                 (object-callbacks . ((footnotes-before-line-breaking . ,ly:system::footnotes-before-line-breaking)
+                                      (footnotes-after-line-breaking . ,ly:system::footnotes-after-line-breaking)
+                                      (pure-relevant-grobs . ,ly:system::calc-pure-relevant-grobs)
+                                      (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (vertical-skyline-elements . ,ly:system::vertical-skyline-elements)
+                                      (vertical-alignment . ,ly:system::get-vertical-alignment)))
+                 (interfaces . (axis-group-interface
+                                system-interface))))))
 
     (SystemStartBar
      . (
-       (collapse-height . 5.0)
-       (direction . ,LEFT)
+        (collapse-height . 5.0)
+        (direction . ,LEFT)
 
-       ;; ugh--hardcoded.
-       (padding . -0.1)  ;; bar must cover rounded ending of staff line.
-       (stencil . ,ly:system-start-delimiter::print)
-       (style . bar-line)
-       (thickness . 1.6)
-       (X-offset . ,ly:side-position-interface::x-aligned-side)
-       (Y-extent . #f)
-       (meta . ((class . Spanner)
-                (interfaces . (side-position-interface
-                               system-start-delimiter-interface))))))
+        ;; ugh--hardcoded.
+        (padding . -0.1)  ;; bar must cover rounded ending of staff line.
+        (stencil . ,ly:system-start-delimiter::print)
+        (style . bar-line)
+        (thickness . 1.6)
+        (X-offset . ,ly:side-position-interface::x-aligned-side)
+        (meta . ((class . Spanner)
+                 (interfaces . (side-position-interface
+                                system-start-delimiter-interface))))))
 
     (SystemStartBrace
      . (
-       (collapse-height . 5.0)
-       (direction . ,LEFT)
-       (font-encoding . fetaBraces)
-       (padding . 0.3)
-       (stencil . ,ly:system-start-delimiter::print)
-       (style . brace)
-       (X-offset . ,ly:side-position-interface::x-aligned-side)
-       (Y-extent . #f)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               side-position-interface
-                               system-start-delimiter-interface))))))
+        (collapse-height . 5.0)
+        (direction . ,LEFT)
+        (font-encoding . fetaBraces)
+        (padding . 0.3)
+        (stencil . ,ly:system-start-delimiter::print)
+        (style . brace)
+        (X-offset . ,ly:side-position-interface::x-aligned-side)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                side-position-interface
+                                system-start-delimiter-interface))))))
 
     (SystemStartBracket
      . (
-       (collapse-height . 5.0)
-       (direction . ,LEFT)
-       (padding . 0.8)
-       (stencil . ,ly:system-start-delimiter::print)
-       (style . bracket)
-       (thickness . 0.45)
-       (X-offset . ,ly:side-position-interface::x-aligned-side)
-       (Y-extent . #f)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               side-position-interface
-                               system-start-delimiter-interface))))))
+        (collapse-height . 5.0)
+        (direction . ,LEFT)
+        (padding . 0.8)
+        (stencil . ,ly:system-start-delimiter::print)
+        (style . bracket)
+        (thickness . 0.45)
+        (X-offset . ,ly:side-position-interface::x-aligned-side)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                side-position-interface
+                                system-start-delimiter-interface))))))
 
     (SystemStartSquare
      . (
-       (direction . ,LEFT)
-       (stencil . ,ly:system-start-delimiter::print)
-       (style . line-bracket)
-       (thickness . 1.0)
-       (X-offset . ,ly:side-position-interface::x-aligned-side)
-       (Y-extent . #f)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               side-position-interface
-                               system-start-delimiter-interface))))))
+        (direction . ,LEFT)
+        (stencil . ,ly:system-start-delimiter::print)
+        (style . line-bracket)
+        (thickness . 1.0)
+        (X-offset . ,ly:side-position-interface::x-aligned-side)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                side-position-interface
+                                system-start-delimiter-interface))))))
 
 
     (TabNoteHead
      . (
-       (details . ((cautionary-properties . ((angularity . 0.4)
-                                             (half-thickness . 0.075)
-                                             (padding . 0)
-                                             (procedure . ,parenthesize-stencil)
-                                             (width . 0.25)))
-                   (head-offset . 3/5)
-                   (harmonic-properties . ((angularity . 2)
-                                           (half-thickness . 0.075)
-                                           (padding . 0)
-                                           (procedure . ,parenthesize-stencil)
-                                           (width . 0.25)))
-                   (repeat-tied-properties . ((note-head-visible . #t)
-                                              (parenthesize . #t)))
-                   (tied-properties . ((break-visibility . ,begin-of-line-visible)
-                                       (parenthesize . #t)))))
-
-       (direction . ,CENTER)
-       (duration-log . ,note-head::calc-duration-log)
-       (font-series . bold)
-       (font-size . -2)
-       (stem-attachment . (0.0 . 1.35))
-       (stencil . ,tab-note-head::print)
-       (whiteout . #t)
-       (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
-                (interfaces  . (font-interface
-                                note-head-interface
-                                rhythmic-grob-interface
-                                rhythmic-head-interface
-                                staff-symbol-referencer-interface
-                                tab-note-head-interface
-                                text-interface))))))
+        (details . ((cautionary-properties . ((angularity . 0.4)
+                                              (half-thickness . 0.075)
+                                              (padding . 0)
+                                              (procedure . ,parenthesize-stencil)
+                                              (width . 0.25)))
+                    (head-offset . 3/5)
+                    (harmonic-properties . ((angularity . 2)
+                                            (half-thickness . 0.075)
+                                            (padding . 0)
+                                            (procedure . ,parenthesize-stencil)
+                                            (width . 0.25)))
+                    (repeat-tied-properties . ((note-head-visible . #t)
+                                               (parenthesize . #t)))
+                    (tied-properties . ((break-visibility . ,begin-of-line-visible)
+                                        (parenthesize . #t)))))
+
+        (direction . ,CENTER)
+        (duration-log . ,note-head::calc-duration-log)
+        (font-series . bold)
+        (font-size . -2)
+        (stem-attachment . (0.0 . 1.35))
+        (stencil . ,tab-note-head::print)
+        (whiteout . #t)
+        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces  . (font-interface
+                                 note-head-interface
+                                 rhythmic-grob-interface
+                                 rhythmic-head-interface
+                                 staff-symbol-referencer-interface
+                                 tab-note-head-interface
+                                 text-interface))))))
 
     (TextScript
      . (
-       (avoid-slur . around)
-       (cross-staff . ,script-or-side-position-cross-staff)
-       (direction . ,DOWN)
-       (extra-spacing-width . (+inf.0 . -inf.0))
-       (outside-staff-priority . 450)
-
-       ;; sync with Fingering ?
-       (padding . 0.5)
-
-       (script-priority . 200)
-       (side-axis . ,Y)
-       (slur-padding . 0.5)
-       (staff-padding . 0.5)
-       (stencil . ,ly:text-interface::print)
-       ;; todo: add X self alignment?
-       (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               instrument-specific-markup-interface
-                               self-alignment-interface
-                               side-position-interface
-                               text-interface
-                               text-script-interface))))))
+        (avoid-slur . around)
+        (cross-staff . ,script-or-side-position-cross-staff)
+        (direction . ,DOWN)
+        (extra-spacing-width . (+inf.0 . -inf.0))
+        (outside-staff-horizontal-padding . 0.2)
+        (outside-staff-priority . 450)
+
+        ;; sync with Fingering ?
+        (padding . 0.3)
+
+        (script-priority . 200)
+        (side-axis . ,Y)
+        (slur-padding . 0.5)
+        (staff-padding . 0.5)
+        (stencil . ,ly:text-interface::print)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        ;; todo: add X self alignment?
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                instrument-specific-markup-interface
+                                self-alignment-interface
+                                side-position-interface
+                                text-interface
+                                text-script-interface))))))
 
     (TextSpanner
      . (
-       (bound-details . ((left . ((Y . 0)
-                                  (padding . 0.25)
-                                  (attach-dir . ,LEFT)
-                                  ))
-                         (left-broken . ((attach-dir . ,RIGHT)))
-                         (right . ((Y . 0)
-                                   (padding . 0.25)
-                                   ))
-                         ))
-       (dash-fraction . 0.2)
-       (dash-period . 3.0)
-       (direction . ,UP)
-       (font-shape . italic)
-       (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
-       (outside-staff-priority . 350)
-       (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
-       (side-axis . ,Y)
-       (staff-padding . 0.8)
-       (stencil . ,ly:line-spanner::print)
-       (style . dashed-line)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               line-interface
-                               line-spanner-interface
-                               side-position-interface))))))
+        (bound-details . ((left . ((Y . 0)
+                                   (padding . 0.25)
+                                   (attach-dir . ,LEFT)
+                                   ))
+                          (left-broken . ((attach-dir . ,RIGHT)))
+                          (right . ((Y . 0)
+                                    (padding . 0.25)
+                                    ))
+                          ))
+        (dash-fraction . 0.2)
+        (dash-period . 3.0)
+        (direction . ,UP)
+        (font-shape . italic)
+        (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
+        (outside-staff-priority . 350)
+        (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
+        (side-axis . ,Y)
+        (staff-padding . 0.8)
+        (stencil . ,ly:line-spanner::print)
+        (style . dashed-line)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                line-interface
+                                line-spanner-interface
+                                side-position-interface))))))
 
     (Tie
      . (
-       (avoid-slur . inside)
-       (control-points . ,ly:tie::calc-control-points)
-       (details . (
-                   ;; for a full list, see tie-details.cc
-                   (ratio . 0.333)
-                   (center-staff-line-clearance . 0.6)
-                   (tip-staff-line-clearance . 0.45)
-                   (note-head-gap . 0.2)
-                   (stem-gap . 0.35)
-                   (height-limit . 1.0)
-                   (horizontal-distance-penalty-factor . 10)
-                   (same-dir-as-stem-penalty . 8)
-                   (min-length-penalty-factor . 26)
-                   (tie-tie-collision-distance . 0.45)
-                   (tie-tie-collision-penalty . 25.0)
-                   (intra-space-threshold . 1.25)
-                   (outer-tie-vertical-distance-symmetry-penalty-factor . 10)
-                   (outer-tie-length-symmetry-penalty-factor . 10)
-                   (vertical-distance-penalty-factor . 7)
-                   (outer-tie-vertical-gap . 0.25)
-                   (multi-tie-region-size . 3)
-                   (single-tie-region-size . 4)
-                   (between-length-limit . 1.0)))
-
-       (direction . ,ly:tie::calc-direction)
-       (font-size . -6)
-       (line-thickness . 0.8)
-       (neutral-direction . ,UP)
-       (springs-and-rods . ,ly:spanner::set-spacing-rods)
-       (stencil . ,ly:tie::print)
-       (thickness . 1.2)
-       (meta . ((class . Spanner)
-                (interfaces . (tie-interface))))))
+        (avoid-slur . inside)
+        (control-points . ,ly:tie::calc-control-points)
+        (details . (
+                    ;; for a full list, see tie-details.cc
+                    (ratio . 0.333)
+                    (center-staff-line-clearance . 0.6)
+                    (tip-staff-line-clearance . 0.45)
+                    (note-head-gap . 0.2)
+                    (stem-gap . 0.35)
+                    (height-limit . 1.0)
+                    (horizontal-distance-penalty-factor . 10)
+                    (same-dir-as-stem-penalty . 8)
+                    (min-length-penalty-factor . 26)
+                    (tie-tie-collision-distance . 0.45)
+                    (tie-tie-collision-penalty . 25.0)
+                    (intra-space-threshold . 1.25)
+                    (outer-tie-vertical-distance-symmetry-penalty-factor . 10)
+                    (outer-tie-length-symmetry-penalty-factor . 10)
+                    (vertical-distance-penalty-factor . 7)
+                    (outer-tie-vertical-gap . 0.25)
+                    (multi-tie-region-size . 3)
+                    (single-tie-region-size . 4)
+                    (between-length-limit . 1.0)))
+
+        (direction . ,ly:tie::calc-direction)
+        (font-size . -6)
+        (line-thickness . 0.8)
+        (neutral-direction . ,UP)
+        (springs-and-rods . ,ly:spanner::set-spacing-rods)
+        (stencil . ,ly:tie::print)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (thickness . 1.2)
+        (meta . ((class . Spanner)
+                 (interfaces . (tie-interface))))))
 
     (TieColumn
      . (
-       (before-line-breaking . ,ly:tie-column::before-line-breaking)
-       (positioning-done . ,ly:tie-column::calc-positioning-done)
-       (X-extent . #f)
-       (Y-extent . #f)
-       (meta . ((class . Spanner)
-                (interfaces . (tie-column-interface))))))
+        (before-line-breaking . ,ly:tie-column::before-line-breaking)
+        (positioning-done . ,ly:tie-column::calc-positioning-done)
+        (X-extent . #f)
+        (Y-extent . #f)
+        (meta . ((class . Spanner)
+                 (interfaces . (tie-column-interface))))))
 
     (TimeSignature
      . (
-       (avoid-slur . inside)
-       (break-align-anchor
-        . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
-       (break-align-symbol . time-signature)
-       (break-align-anchor-alignment . ,LEFT)
-       (break-visibility . ,all-visible)
-       (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
-       (extra-spacing-width . (0.0 . 0.8))
-       (non-musical . #t)
-       (space-alist . (
-                       (cue-clef . (extra-space . 1.5))
-                       (first-note . (fixed-space . 2.0))
-                       (right-edge . (extra-space . 0.5))
-                       (staff-bar . (minimum-space . 2.0))))
-       (stencil . ,ly:time-signature::print)
-       (style . C)
-       (meta . ((class . Item)
+        (avoid-slur . inside)
+        (break-align-anchor
+         . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
+        (break-align-symbol . time-signature)
+        (break-align-anchor-alignment . ,LEFT)
+        (break-visibility . ,all-visible)
+        (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
+        (extra-spacing-width . (0.0 . 0.8))
+        (non-musical . #t)
+        (space-alist . (
+                        (cue-clef . (extra-space . 1.5))
+                        (first-note . (fixed-space . 2.0))
+                        (right-edge . (extra-space . 0.5))
+                        (staff-bar . (extra-space . 1.0))))
+        (stencil . ,ly:time-signature::print)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (style . C)
+        (meta . ((class . Item)
                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
-                (interfaces . (break-aligned-interface
-                               font-interface
-                               pure-from-neighbor-interface
-                               time-signature-interface))))))
+                 (interfaces . (break-aligned-interface
+                                font-interface
+                                pure-from-neighbor-interface
+                                time-signature-interface))))))
 
     (TrillPitchAccidental
      . (
-       (direction . ,LEFT)
-       (font-size . -4)
-       (glyph-name-alist . ,standard-alteration-glyph-name-alist)
-       (padding . 0.2)
-       (side-axis . ,X)
-       (stencil . ,ly:accidental-interface::print)
-       (X-offset . ,ly:side-position-interface::x-aligned-side)
-       (Y-extent . ,ly:accidental-interface::height)
-       (meta . ((class . Item)
-                (interfaces . (accidental-interface
-                               font-interface
-                               inline-accidental-interface
-                               side-position-interface
-                               trill-pitch-accidental-interface))))))
+        (direction . ,LEFT)
+        (font-size . -4)
+        (glyph-name-alist . ,standard-alteration-glyph-name-alist)
+        (padding . 0.2)
+        (side-axis . ,X)
+        (stencil . ,ly:accidental-interface::print)
+        (X-offset . ,ly:side-position-interface::x-aligned-side)
+        (Y-extent . ,accidental-interface::height)
+        (meta . ((class . Item)
+                 (interfaces . (accidental-interface
+                                font-interface
+                                inline-accidental-interface
+                                side-position-interface
+                                trill-pitch-accidental-interface))))))
 
     (TrillPitchGroup
      . (
-       (axes . (,X))
-       (direction . ,RIGHT)
-       (font-size . -4)
-       (padding . 0.3)
-       (side-axis . ,X)
-       (stencil . ,parenthesize-elements)
-       (stencils . ,parentheses-item::calc-parenthesis-stencils)
-       (X-offset . ,ly:side-position-interface::x-aligned-side)
-       (meta . ((class . Item)
-                (interfaces . (axis-group-interface
-                               font-interface
-                               note-head-interface
-                               parentheses-interface
-                               side-position-interface))))))
+        (axes . (,X))
+        (direction . ,RIGHT)
+        (font-size . -4)
+        (horizon-padding . 0.1) ; to avoid interleaving with augmentation dots
+        (padding . 0.3)
+        (side-axis . ,X)
+        (stencil . ,parenthesize-elements)
+        (stencils . ,parentheses-item::calc-parenthesis-stencils)
+        ;; offset a bit to the right, further if needed to clear the main note
+        (X-offset . ,(lambda (grob)
+                       (ly:side-position-interface::x-aligned-side grob 2.5)))
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (axis-group-interface
+                                font-interface
+                                note-head-interface
+                                parentheses-interface
+                                side-position-interface))))))
 
     (TrillPitchHead
      . (
-       (duration-log . 2)
-       (font-size . -4)
-       (stencil . ,ly:note-head::print)
-       (Y-offset . ,ly:staff-symbol-referencer::callback)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               ledgered-interface
-                               pitched-trill-interface
-                               rhythmic-head-interface
-                               staff-symbol-referencer-interface))))))
+        (duration-log . 2)
+        (font-size . -4)
+        (stencil . ,ly:note-head::print)
+        (Y-offset . ,staff-symbol-referencer::callback)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                ledgered-interface
+                                pitched-trill-interface
+                                rhythmic-head-interface
+                                staff-symbol-referencer-interface))))))
 
     (TrillSpanner
      . (
-       (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
-       (bound-details . ((left . ((text . ,(make-musicglyph-markup "scripts.trill"))
-                                  (Y . 0)
-                                  (stencil-offset . (-0.5 . -1))
-                                  (padding . 0.5)
-                                  (attach-dir . ,CENTER)
-                                  ))
-                         (left-broken . ((end-on-note . #t)))
-                         (right . ((Y . 0)))
-                         ))
-       (direction . ,UP)
-       (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
-       (outside-staff-priority . 50)
-       (padding . 0.5)
-       (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
-       (side-axis . ,Y)
-       (staff-padding . 1.0)
-       (stencil . ,ly:line-spanner::print)
-       (style . trill)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               line-interface
-                               line-spanner-interface
-                               side-position-interface
-                               trill-spanner-interface))))))
+        (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
+        (bound-details . ((left . ((text . ,(make-musicglyph-markup "scripts.trill"))
+                                   (Y . 0)
+                                   (stencil-offset . (-0.5 . -1))
+                                   (padding . 0.5)
+                                   (attach-dir . ,CENTER)
+                                   ))
+                          (left-broken . ((end-on-note . #t)))
+                          (right . ((Y . 0)))
+                          ))
+        (direction . ,UP)
+        (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
+        (outside-staff-priority . 50)
+        (padding . 0.5)
+        (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
+        (side-axis . ,Y)
+        (staff-padding . 1.0)
+        (stencil . ,ly:line-spanner::print)
+        (style . trill)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                line-interface
+                                line-spanner-interface
+                                side-position-interface
+                                trill-spanner-interface))))))
 
     (TupletBracket
      . (
-       (avoid-scripts . #t)
-       (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
-       (cross-staff . ,ly:tuplet-bracket::calc-cross-staff)
-       (direction  . ,ly:tuplet-bracket::calc-direction)
-       (edge-height . (0.7 . 0.7))
-       (full-length-to-extent . #t)
-       (padding . 1.1)
-       (positions . ,ly:tuplet-bracket::calc-positions)
-       (shorten-pair . (-0.2 . -0.2))
-       (staff-padding . 0.25)
-       (stencil . ,ly:tuplet-bracket::print)
-       (thickness . 1.6)
-       (X-positions . ,ly:tuplet-bracket::calc-x-positions)
-
-       (meta . ((class . Spanner)
-                (interfaces . (line-interface
-                               tuplet-bracket-interface))))))
+        (avoid-scripts . #t)
+        (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
+        (cross-staff . ,ly:tuplet-bracket::calc-cross-staff)
+        (direction  . ,ly:tuplet-bracket::calc-direction)
+        (edge-height . (0.7 . 0.7))
+        (full-length-to-extent . #t)
+        (padding . 1.1)
+        (positions . ,ly:tuplet-bracket::calc-positions)
+        (shorten-pair . (-0.2 . -0.2))
+        (staff-padding . 0.25)
+        (stencil . ,ly:tuplet-bracket::print)
+        (thickness . 1.6)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (X-positions . ,ly:tuplet-bracket::calc-x-positions)
+
+        (meta . ((class . Spanner)
+                 (interfaces . (line-interface
+                                tuplet-bracket-interface))))))
 
     (TupletNumber
      . (
-       (avoid-slur . inside)
-       (cross-staff . ,ly:tuplet-number::calc-cross-staff)
-       (direction . ,tuplet-number::calc-direction)
-       (font-shape . italic)
-       (font-size . -2)
-       (stencil . ,ly:tuplet-number::print)
-       (text . ,tuplet-number::calc-denominator-text)
-       (X-offset . ,ly:tuplet-number::calc-x-offset)
-       (Y-offset . ,ly:tuplet-number::calc-y-offset)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               text-interface
-                               tuplet-number-interface))))))
+        (avoid-slur . inside)
+        (cross-staff . ,ly:tuplet-number::calc-cross-staff)
+        (direction . ,tuplet-number::calc-direction)
+        (font-shape . italic)
+        (font-size . -2)
+        (stencil . ,ly:tuplet-number::print)
+        (text . ,tuplet-number::calc-denominator-text)
+        (X-offset . ,ly:tuplet-number::calc-x-offset)
+        (Y-offset . ,ly:tuplet-number::calc-y-offset)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                text-interface
+                                tuplet-number-interface))))))
 
 
     (UnaCordaPedal
      . (
-       (direction . ,RIGHT)
-       (extra-spacing-width . (+inf.0 . -inf.0))
-       (font-shape . italic)
-       (padding . 0.0)  ;; padding relative to UnaCordaPedalLineSpanner
-       (self-alignment-X . ,CENTER)
-       (stencil . ,ly:text-interface::print)
-       (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
-       (meta . ((class . Item)
-                (interfaces . (font-interface
-                               piano-pedal-script-interface
-                               self-alignment-interface
-                               text-interface))))))
+        (direction . ,RIGHT)
+        (extra-spacing-width . (+inf.0 . -inf.0))
+        (font-shape . italic)
+        (padding . 0.0)  ;; padding relative to UnaCordaPedalLineSpanner
+        (self-alignment-X . ,CENTER)
+        (stencil . ,ly:text-interface::print)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+        (Y-extent . ,grob::always-Y-extent-from-stencil)
+        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+        (meta . ((class . Item)
+                 (interfaces . (font-interface
+                                piano-pedal-script-interface
+                                self-alignment-interface
+                                text-interface))))))
 
     (UnaCordaPedalLineSpanner
      . (
-       (axes . (,Y))
-       (direction . ,DOWN)
-       (minimum-space . 1.0)
-       (outside-staff-priority . 1000)
-       (padding . 1.2)
-       (side-axis . ,Y)
-       (staff-padding . 1.2)
-       (X-extent . ,ly:axis-group-interface::width)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (axis-group-interface
-                               piano-pedal-interface
-                               side-position-interface))))))
+        (axes . (,Y))
+        (direction . ,DOWN)
+        (minimum-space . 1.0)
+        (outside-staff-priority . 1000)
+        (padding . 1.2)
+        (side-axis . ,Y)
+        (staff-padding . 1.2)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Spanner)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (axis-group-interface
+                                piano-pedal-interface
+                                side-position-interface))))))
 
 
     (VaticanaLigature
      . (
-       (flexa-width . 2.0)
-       (stencil . ,ly:vaticana-ligature::print)
-       (thickness . 0.6)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               vaticana-ligature-interface))))))
+        (flexa-width . 2.0)
+        (stencil . ,ly:vaticana-ligature::print)
+        (thickness . 0.6)
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                vaticana-ligature-interface))))))
 
     (VerticalAlignment
      . (
-       (axes . (,Y))
-       (positioning-done . ,ly:align-interface::align-to-ideal-distances)
-       (stacking-dir . -1)
-       (vertical-skylines . ,ly:axis-group-interface::combine-skylines)
-       (X-extent . ,ly:axis-group-interface::width)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (meta . ((class . Spanner)
-                (object-callbacks . ((full-score-pure-minimum-translations . ,ly:align-interface::full-score-pure-minimum-translations)
-                                     (Y-common . ,ly:axis-group-interface::calc-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)
-                                     (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)))
-                (interfaces . (align-interface
-                               axis-group-interface))))))
+        (axes . (,Y))
+        (positioning-done . ,ly:align-interface::align-to-ideal-distances)
+        (stacking-dir . -1)
+        (vertical-skylines . ,ly:axis-group-interface::combine-skylines)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (meta . ((class . Spanner)
+                 (object-callbacks . ((Y-common . ,ly:axis-group-interface::calc-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)
+                                      (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)))
+                 (interfaces . (align-interface
+                                axis-group-interface))))))
 
     (VerticalAxisGroup
      . (
-       (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
-       (axes . (,Y))
-       (default-staff-staff-spacing . ((basic-distance . 9)
-                                       (minimum-distance . 8)
-                                       (padding . 1)))
-       (nonstaff-unrelatedstaff-spacing . ((padding . 0.5)))
-       (staff-staff-spacing . ,ly:axis-group-interface::calc-staff-staff-spacing)
-       (stencil . ,ly:axis-group-interface::print)
-       (vertical-skylines . ,ly:hara-kiri-group-spanner::calc-skylines)
-       (X-extent . ,ly:axis-group-interface::width)
-       (Y-extent . ,ly:hara-kiri-group-spanner::y-extent)
-       (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback)
-       (meta . ((class . Spanner)
-                (object-callbacks . (
-                                     (X-common . ,ly:axis-group-interface::calc-x-common)
-                                     (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-
-                (interfaces . (axis-group-interface
-                               hara-kiri-group-spanner-interface))))))
+        (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
+        (axes . (,Y))
+        (default-staff-staff-spacing . ((basic-distance . 9)
+                                        (minimum-distance . 8)
+                                        (padding . 1)))
+        (nonstaff-unrelatedstaff-spacing . ((padding . 0.5)))
+        (outside-staff-placement-directive . left-to-right-polite)
+        (staff-staff-spacing . ,(ly:make-unpure-pure-container ly:axis-group-interface::calc-staff-staff-spacing ly:axis-group-interface::calc-pure-staff-staff-spacing))
+        (stencil . ,ly:axis-group-interface::print)
+        (skyline-horizontal-padding . 0.1)
+        (vertical-skylines . ,ly:hara-kiri-group-spanner::calc-skylines)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,(ly:make-unpure-pure-container ly:hara-kiri-group-spanner::y-extent ly:hara-kiri-group-spanner::pure-height))
+        (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback)
+        (meta . ((class . Spanner)
+                 (object-callbacks . (
+                                      (X-common . ,ly:axis-group-interface::calc-x-common)
+                                      (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+
+                 (interfaces . (axis-group-interface
+                                hara-kiri-group-spanner-interface))))))
 
     (VoiceFollower
      . (
-       (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
-       (bound-details . ((right . ((attach-dir .  ,CENTER)
-                                   (padding . 1.5)
-                                     ))
-                         (left . ((attach-dir .  ,CENTER)
-                                  (padding . 1.5)
-                                     ))
-                         ))
-       (gap . 0.5)
-       (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
-       (non-musical . #t)
-       (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
-       (stencil . ,ly:line-spanner::print)
-       (style . line)
-       (X-extent . #f)
-       (Y-extent . #f)
-       (meta . ((class . Spanner)
-                (interfaces . (line-interface
-                               line-spanner-interface))))))
+        (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
+        (bound-details . ((right . ((attach-dir .  ,CENTER)
+                                    (padding . 1.5)
+                                    ))
+                          (left . ((attach-dir .  ,CENTER)
+                                   (padding . 1.5)
+                                   ))
+                          ))
+        (cross-staff . #t)
+        (gap . 0.5)
+        (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
+        (non-musical . #t)
+        (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
+        (stencil . ,ly:line-spanner::print)
+        (style . line)
+        (X-extent . #f)
+        (Y-extent . #f)
+        (meta . ((class . Spanner)
+                 (interfaces . (line-interface
+                                line-spanner-interface))))))
 
     (VoltaBracket
      . (
-       (direction . ,UP)
-       (edge-height . (2.0 . 2.0)) ;; staff-space;
-       (font-encoding . fetaText)
-       (font-size . -4)
-       (stencil . ,ly:volta-bracket-interface::print)
-       (thickness . 1.6) ;; line-thickness
-       (word-space . 0.6)
-       (meta . ((class . Spanner)
-                (interfaces . (font-interface
-                               horizontal-bracket-interface
-                               line-interface
-                               side-position-interface
-                               text-interface
-                               volta-bracket-interface
-                               volta-interface))))))
+        (baseline-skip . 1.7)
+        (direction . ,UP)
+        (edge-height . (2.0 . 2.0)) ;; staff-space;
+        (font-encoding . fetaText)
+        (font-size . -4)
+        (shorten-pair . ,ly:volta-bracket::calc-shorten-pair)
+        (stencil . ,ly:volta-bracket-interface::print)
+        (thickness . 1.6) ;; line-thickness
+        (word-space . 0.6)
+        (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+        (Y-extent . ,(grob::unpure-Y-extent-from-stencil volta-bracket-interface::pure-height))
+        (meta . ((class . Spanner)
+                 (interfaces . (font-interface
+                                horizontal-bracket-interface
+                                line-interface
+                                side-position-interface
+                                text-interface
+                                volta-bracket-interface
+                                volta-interface))))))
 
     (VoltaBracketSpanner
      . (
-       (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
-       (axes . (,Y))
-       (direction . ,UP)
-       (no-alignment . #t)
-       (outside-staff-priority . 600)
-       (padding . 1)
-       (side-axis . ,Y)
-       (X-extent . ,ly:axis-group-interface::width)
-       (Y-extent . ,ly:axis-group-interface::height)
-       (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (meta . ((class . Spanner)
-                (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
-                                     (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
-                (interfaces . (axis-group-interface
-                               side-position-interface
-                               volta-interface))))))
-
-))
+        (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
+        (axes . (,Y))
+        (direction . ,UP)
+        (no-alignment . #t)
+        (outside-staff-priority . 600)
+        (padding . 1)
+        (side-axis . ,Y)
+        (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
+        (X-extent . ,ly:axis-group-interface::width)
+        (Y-extent . ,axis-group-interface::height)
+        (Y-offset . ,side-position-interface::y-aligned-side)
+        (meta . ((class . Spanner)
+                 (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
+                                      (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
+                 (interfaces . (axis-group-interface
+                                side-position-interface
+                                volta-interface))))))
+
+    ))
 
 (define (completize-grob-entry x)
   "Transplant assoc key into 'name entry of 'meta of X.  Set interfaces for Item, Spanner etc.
   ;;  (display (car x))
   ;;  (newline)
   (let* ((name-sym  (car x))
-        (grob-entry (cdr x))
-        (meta-entry (assoc-get 'meta grob-entry))
-        (class (assoc-get 'class meta-entry))
-        (ifaces-entry
-         (assoc-get 'interfaces meta-entry)))
+         (grob-entry (cdr x))
+         (meta-entry (assoc-get 'meta grob-entry))
+         (class (assoc-get 'class meta-entry))
+         (ifaces-entry
+          (assoc-get 'interfaces meta-entry)))
 
     (cond
      ((eq? 'Item class)
       (set! ifaces-entry (cons 'spanner-interface ifaces-entry)))
      ((eq? 'Paper_column class)
       (set! ifaces-entry (cons 'item-interface
-                              (cons 'paper-column-interface ifaces-entry))))
+                               (cons 'paper-column-interface ifaces-entry))))
      ((eq? 'System class)
       (set! ifaces-entry (cons 'system-interface
-                              (cons 'spanner-interface ifaces-entry))))
+                               (cons 'spanner-interface ifaces-entry))))
      (else
       (ly:warning "Unknown class ~a" class)))
 
 
     (set! meta-entry (assoc-set! meta-entry 'name name-sym))
     (set! meta-entry (assoc-set! meta-entry 'interfaces
-                                ifaces-entry))
+                                 ifaces-entry))
     (set! grob-entry (assoc-set! grob-entry 'meta meta-entry))
     (cons name-sym grob-entry)))
 
 
 ;; make sure that \property Foo.Bar =\turnOff doesn't complain
 
-(map (lambda (x)
-       ;; (display (car x)) (newline)
+(for-each (lambda (x)
+            ;; (display (car x)) (newline)
 
-       (set-object-property! (car x) 'translation-type? list?)
-       (set-object-property! (car x) 'is-grob? #t))
-     all-grob-descriptions)
+            (set-object-property! (car x) 'translation-type? list?)
+            (set-object-property! (car x) 'is-grob? #t))
+          all-grob-descriptions)
 
 (set! all-grob-descriptions (sort all-grob-descriptions alist<?))
-
-(define (volta-bracket-interface::pure-height grob start end)
-  (let ((edge-height (ly:grob-property grob 'edge-height)))
-    (if (number-pair? edge-height)
-       (let ((smaller (min (car edge-height) (cdr edge-height)))
-             (larger (max (car edge-height) (cdr edge-height))))
-         (interval-union '(0 . 0) (cons smaller larger)))
-       '(0 . 0))))
-
-(define pure-print-callbacks
-  (list
-   fret-board::calc-stencil
-   note-head::brew-ez-stencil
-   print-circled-text-callback
-   laissez-vibrer::print
-   lyric-text::print
-   ly:bar-line::print
-   ly:mensural-ligature::brew-ligature-primitive
-   ly:note-head::print
-   ly:dots::print
-   ly:clef::print
-   ly:flag::print
-   ly:time-signature::print
-   default-flag
-   normal-flag
-   mensural-flag
-   no-flag
-   modern-straight-flag
-   old-straight-flag
-   ly:key-signature-interface::print
-   ly:percent-repeat-item-interface::beat-slash
-   ly:text-interface::print
-   ly:script-interface::print
-   ly:sustain-pedal::print))
-
-;; Sometimes we have grobs with (Y-extent . ,ly:grob::stencil-height)
-;; and the print function is not pure, but there is a easy way to
-;; figure out the Y-extent from the print function.
-(define pure-print-to-height-conversions
-  `(
-    (,ly:arpeggio::print . ,ly:arpeggio::pure-height)
-    (,ly:arpeggio::brew-chord-bracket . ,ly:arpeggio::pure-height)
-    (,ly:arpeggio::brew-chord-slur . ,ly:arpeggio::pure-height)
-    (,ly:hairpin::print . ,ly:hairpin::pure-height)
-    (,ly:stem-tremolo::print . ,ly:stem-tremolo::pure-height)
-    (,ly:volta-bracket-interface::print . ,volta-bracket-interface::pure-height)))
-
-;; ly:grob::stencil-extent is safe if the print callback is safe too
-(define (pure-stencil-height grob start stop)
-  (let* ((sten (ly:grob-property-data grob 'stencil))
-        (pure-height-callback (assoc-get sten pure-print-to-height-conversions)))
-    (cond ((or
-           (ly:stencil? sten)
-           (memq sten pure-print-callbacks))
-          (ly:grob::stencil-height grob))
-         ((procedure? pure-height-callback)
-          (pure-height-callback grob start stop))
-         (else
-          '(0 . 0)))))
-
-;; Sometimes, a pure callback will be chained to a non-pure callback via
-;; chain_offset_callback, in which case this provides a default by simply
-;; passing through the value from the pure callback.
-(define (pure-chain-offset-callback grob start end prev-offset) prev-offset)
-
-(define pure-conversions-alist
-  `(
-    (,ly:accidental-interface::height . ,ly:accidental-interface::pure-height)
-    (,ly:axis-group-interface::calc-staff-staff-spacing . ,ly:axis-group-interface::calc-pure-staff-staff-spacing)
-    (,ly:axis-group-interface::height . ,ly:axis-group-interface::pure-height)
-    (,ly:beam::rest-collision-callback . ,ly:beam::pure-rest-collision-callback)
-    (,ly:flag::calc-y-offset . ,ly:flag::pure-calc-y-offset)
-    (,ly:grob::stencil-height . ,pure-stencil-height)
-    (,ly:hara-kiri-group-spanner::y-extent . ,ly:hara-kiri-group-spanner::pure-height)
-    (,ly:rest-collision::force-shift-callback-rest . ,pure-chain-offset-callback)
-    (,ly:rest::height . ,ly:rest::pure-height)
-    (,ly:self-alignment-interface::y-aligned-on-self . ,ly:self-alignment-interface::pure-y-aligned-on-self)
-    (,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side)
-    (,ly:slur::height . ,ly:slur::pure-height)
-    (,ly:slur::outside-slur-callback . ,ly:slur::pure-outside-slur-callback)
-    (,ly:stem::calc-stem-begin-position . ,ly:stem::pure-calc-stem-begin-position)
-    (,ly:stem::calc-stem-end-position . ,ly:stem::pure-calc-stem-end-position)
-    (,stem::length . ,stem::pure-length)
-    (,ly:stem::height . ,ly:stem::pure-height)
-    (,ly:stem-tremolo::calc-y-offset . ,ly:stem-tremolo::pure-calc-y-offset)
-    (,ly:system::height . ,ly:system::calc-pure-height)))
-
-(define pure-functions
-  (list
-   parenthesize-elements
-   laissez-vibrer::print
-   ly:rest::y-offset-callback
-   ly:staff-symbol-referencer::callback
-   ly:staff-symbol::height))
-
-(define-public (pure-relevant? grob)
-  (let ((extent-callback (ly:grob-property-data grob 'Y-extent)))
-    (not (eq? #f
-             (or
-               (ly:unpure-pure-container? extent-callback)
-              (pair? extent-callback)
-              (memq extent-callback pure-functions)
-              (and
-               (pair? (assq extent-callback pure-conversions-alist))
-               (let ((stencil (ly:grob-property-data grob 'stencil)))
-                 (or
-                  (not (eq? extent-callback ly:grob::stencil-height))
-                  (memq stencil pure-print-callbacks)
-                  (assq stencil pure-print-to-height-conversions)
-                  (ly:stencil? stencil)))))))))
-
-;; hideous code dup below - to be cleaned up when call pure functino
-;; is eliminated and lilypond works entirely from unpure-pure-containers
-
-(define-public (call-pure-function unpure args start end)
-  (if (ly:unpure-pure-container? unpure)
-      (let ((unpure (ly:unpure-pure-container-pure-part unpure)))
-        (if (ly:simple-closure? unpure)
-          (ly:eval-simple-closure (car args) unpure start end)
-          (if (not (procedure? unpure))
-              unpure
-              (apply unpure
-                     (append
-                       (list (car args) start end)
-                       (cdr args))))))
-      (if (ly:simple-closure? unpure)
-          (ly:eval-simple-closure (car args) unpure start end)
-          (if (not (procedure? unpure))
-              unpure
-              (if (memq unpure pure-functions)
-                  (apply unpure args)
-                  (let ((pure (assq unpure pure-conversions-alist)))
-                    (if pure
-                        (apply (cdr pure)
-                               (append
-                                (list (car args) start end)
-                                (cdr args))))))))))
index 0f5329658430ebd23b7efb41f20e81348126b6f4..1ea06e5f1d4b93d4113d27f17f1ef60b5ff6e0e8 100644 (file)
 ;; utility functions
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(define-public empty-stencil (ly:make-stencil '() '(1 . -1) '(1 . -1)))
+(define-public empty-stencil (ly:make-stencil '()
+                                              empty-interval empty-interval))
 (define-public point-stencil (ly:make-stencil "" '(0 . 0) '(0 . 0)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -139,6 +140,147 @@ A simple line.
         (y (cdr dest)))
     (make-line-stencil th 0 0 x y)))
 
+(define-markup-command (draw-dashed-line layout props dest)
+  (number-pair?)
+  #:category graphic
+  #:properties ((thickness 1)
+                (on 1)
+                (off 1)
+                (phase 0)
+                (full-length #t))
+  "
+@cindex drawing dashed lines within text
+
+A dashed line.
+
+If @code{full-length} is set to #t (default) the dashed-line extends to the
+whole length given by @var{dest}, without white space at beginning or end.
+@code{off} will then be altered to fit.
+To insist on the given (or default) values of @code{on}, @code{off} use
+@code{\\override #'(full-length . #f)}
+Manual settings for @code{on},@code{off} and @code{phase} are possible.
+@lilypond[verbatim,quote]
+\\markup {
+  \\draw-dashed-line #'(5.1 . 2.3)
+  \\override #'(on . 0.3)
+  \\override #'(off . 0.5)
+  \\draw-dashed-line #'(5.1 . 2.3)
+}
+@end lilypond"
+  (let* ((line-thickness (ly:output-def-lookup layout 'line-thickness))
+         ;; Calculate the thickness to be used.
+         (th (* line-thickness thickness))
+         (half-thick (/ th 2))
+         ;; Get the extensions in x- and y-direction.
+         (x (car dest))
+         (y (cdr dest))
+         ;; Calculate the length of the dashed line.
+         (line-length (sqrt (+ (expt x 2) (expt y 2)))))
+
+    (if (and full-length (not (= (+ on off) 0)))
+        (begin
+          ;; Add double-thickness to avoid overlapping.
+          (set! off (+ (* 2 th) off))
+          (let* (;; Make a guess how often the off/on-pair should be printed
+                 ;; after the initial `on´.
+                 ;; Assume a minimum of 1 to avoid division by zero.
+                 (guess (max 1 (round (/ (- line-length on) (+ off on)))))
+                 ;; Not sure about the value or why corr is necessary at all,
+                 ;; but it seems to be necessary.
+                 (corr (if (= on 0)
+                           (/ line-thickness 10)
+                           0))
+                 ;; Calculate a new value for off to fit the
+                 ;; line-length.
+                 (new-off (/ (- line-length corr (* (1+ guess) on)) guess))
+                 )
+            (cond
+
+             ;; Settings for (= on 0). Resulting in a dotted line.
+
+             ;; If line-length isn't shorter than `th´, change the given
+             ;; value for `off´ to fit the line-length.
+             ((and (= on 0) (< th line-length))
+              (set! off new-off))
+
+             ;; If the line-length is shorter than `th´, it makes no
+             ;; sense to adjust `off´. The rounded edges of the lines
+             ;; would prevent any nice output.
+             ;; Do nothing.
+             ;; This will result in a single dot for very short lines.
+             ((and (= on 0) (>= th line-length))
+              #f)
+
+             ;; Settings for (not (= on 0)). Resulting in a dashed line.
+
+             ;; If line-length isn't shorter than one go of on-off-on,
+             ;; change the given value for `off´ to fit the line-length.
+             ((< (+ (* 2 on) off) line-length)
+              (set! off new-off))
+             ;; If the line-length is too short, but greater than
+             ;; (* 4 th) set on/off to (/ line-length 3)
+             ((< (* 4 th) line-length)
+              (set! on (/ line-length 3))
+              (set! off (/ line-length 3)))
+             ;; If the line-length is shorter than (* 4 th), it makes
+             ;; no sense trying to adjust on/off. The rounded edges of
+             ;; the lines would prevent any nice output.
+             ;; Simply set `on´ to line-length.
+             (else
+              (set! on line-length))))))
+
+    ;; If `on´ or `off´ is negative, or the sum of `on' and `off' equals zero a
+    ;; ghostscript-error occurs while calling
+    ;; (ly:make-stencil (list 'dashed-line th on off x y phase) x-ext y-ext)
+    ;; Better be paranoid.
+    (if (or (= (+ on off) 0)
+            (negative? on)
+            (negative? off))
+        (begin
+          (ly:warning "Can't print a line - setting on/off to default")
+          (set! on 1)
+          (set! off 1)))
+
+    ;; To give the lines produced by \draw-line and \draw-dashed-line the same
+    ;; length, half-thick has to be added to the stencil-extensions.
+    (ly:make-stencil
+     (list 'dashed-line th on off x y phase)
+     (interval-widen (ordered-cons 0 x) half-thick)
+     (interval-widen (ordered-cons 0 y) half-thick))))
+
+(define-markup-command (draw-dotted-line layout props dest)
+  (number-pair?)
+  #:category graphic
+  #:properties ((thickness 1)
+                (off 1)
+                (phase 0))
+  "
+@cindex drawing dotted lines within text
+
+A dotted line.
+
+The dotted-line always extends to the whole length given by @var{dest}, without
+white space at beginning or end.
+Manual settings for @code{off} are possible to get larger or smaller space
+between the dots.
+The given (or default) value of @code{off} will be altered to fit the
+line-length.
+@lilypond[verbatim,quote]
+\\markup {
+  \\draw-dotted-line #'(5.1 . 2.3)
+  \\override #'(thickness . 2)
+  \\override #'(off . 0.2)
+  \\draw-dotted-line #'(5.1 . 2.3)
+}
+@end lilypond"
+
+  (let ((new-props (prepend-alist-chain 'on 0
+                                        (prepend-alist-chain 'full-length #t props))))
+
+    (interpret-markup layout
+                      new-props
+                      (markup #:draw-dashed-line dest))))
+
 (define-markup-command (draw-hline layout props)
   ()
   #:category graphic
@@ -162,8 +304,8 @@ controls what fraction of the page is taken up.
   (interpret-markup layout
                     props
                     (markup #:draw-line (cons (* line-width
-                                                  span-factor)
-                                               0))))
+                                                 span-factor)
+                                              0))))
 
 (define-markup-command (draw-circle layout props radius thickness filled)
   (number? number? boolean?)
@@ -187,8 +329,8 @@ optionally filled.
   (boolean?)
   #:category graphic
   #:properties ((thickness 0.1)
-               (font-size 0)
-               (baseline-skip 2))
+                (font-size 0)
+                (baseline-skip 2))
   "
 @cindex drawing triangles within text
 
@@ -207,8 +349,8 @@ A triangle, either filled or empty.
                      ,ex 0.0
                      ,(* 0.5 ex)
                      ,(* 0.86 ex))
-           ,thickness
-           ,filled)
+               ,thickness
+               ,filled)
      (cons 0 ex)
      (cons 0 (* .86 ex)))))
 
@@ -216,8 +358,8 @@ A triangle, either filled or empty.
   (markup?)
   #:category graphic
   #:properties ((thickness 1)
-               (font-size 0)
-               (circle-padding 0.2))
+                (font-size 0)
+                (circle-padding 0.2))
   "
 @cindex circling text
 
@@ -234,10 +376,66 @@ thickness and padding around the markup.
 @end lilypond"
   (let ((th (* (ly:output-def-lookup layout 'line-thickness)
                thickness))
-         (pad (* (magstep font-size) circle-padding))
-         (m (interpret-markup layout props arg)))
+        (pad (* (magstep font-size) circle-padding))
+        (m (interpret-markup layout props arg)))
     (circle-stencil m th pad)))
 
+(define-markup-command (ellipse layout props arg)
+  (markup?)
+  #:category graphic
+  #:properties ((thickness 1)
+                (font-size 0)
+                (x-padding 0.2)
+                (y-padding 0.2))
+  "
+@cindex drawing ellipse around text
+
+Draw an ellipse around @var{arg}.  Use @code{thickness},
+@code{x-padding}, @code{y-padding} and @code{font-size} properties to determine
+line thickness and padding around the markup.
+
+@lilypond[verbatim,quote]
+\\markup {
+  \\ellipse {
+    Hi
+  }
+}
+@end lilypond"
+  (let ((th (* (ly:output-def-lookup layout 'line-thickness)
+               thickness))
+        (pad-x (* (magstep font-size) x-padding))
+        (pad-y (* (magstep font-size) y-padding))
+        (m (interpret-markup layout props arg)))
+    (ellipse-stencil m th pad-x pad-y)))
+
+(define-markup-command (oval layout props arg)
+  (markup?)
+  #:category graphic
+  #:properties ((thickness 1)
+                (font-size 0)
+                (x-padding 0.75)
+                (y-padding 0.75))
+  "
+@cindex drawing oval around text
+
+Draw an oval around @var{arg}.  Use @code{thickness},
+@code{x-padding}, @code{x-padding} and @code{font-size} properties to determine
+line thickness and padding around the markup.
+
+@lilypond[verbatim,quote]
+\\markup {
+  \\oval {
+    Hi
+  }
+}
+@end lilypond"
+  (let ((th (* (ly:output-def-lookup layout 'line-thickness)
+               thickness))
+        (pad-x (* (magstep font-size) x-padding))
+        (pad-y (* (magstep font-size) y-padding))
+        (m (interpret-markup layout props arg)))
+    (oval-stencil m th pad-x pad-y)))
+
 (define-markup-command (with-url layout props url arg)
   (string? markup?)
   #:category graphic
@@ -257,10 +455,10 @@ the PDF backend.
 }
 @end lilypond"
   (let* ((stil (interpret-markup layout props arg))
-        (xextent (ly:stencil-extent stil X))
-        (yextent (ly:stencil-extent stil Y))
-        (old-expr (ly:stencil-expr stil))
-        (url-expr (list 'url-link url `(quote ,xextent) `(quote ,yextent))))
+         (xextent (ly:stencil-extent stil X))
+         (yextent (ly:stencil-extent stil Y))
+         (old-expr (ly:stencil-expr stil))
+         (url-expr (list 'url-link url `(quote ,xextent) `(quote ,yextent))))
 
     (ly:stencil-add (ly:make-stencil url-expr xextent yextent) stil)))
 
@@ -279,10 +477,10 @@ in the PDF backend.
 }
 @end lilypond"
   (let* ((stil (interpret-markup layout props arg))
-        (xextent (ly:stencil-extent stil X))
-        (yextent (ly:stencil-extent stil Y))
-        (old-expr (ly:stencil-expr stil))
-        (link-expr (list 'page-link page-number `(quote ,xextent) `(quote ,yextent))))
+         (xextent (ly:stencil-extent stil X))
+         (yextent (ly:stencil-extent stil Y))
+         (old-expr (ly:stencil-expr stil))
+         (link-expr (list 'page-link page-number `(quote ,xextent) `(quote ,yextent))))
 
     (ly:stencil-add (ly:make-stencil link-expr xextent yextent) stil)))
 
@@ -305,19 +503,18 @@ only works in the PDF backend.
   (let* ((arg-stencil (interpret-markup layout props arg))
          (x-ext (ly:stencil-extent arg-stencil X))
          (y-ext (ly:stencil-extent arg-stencil Y)))
-    (ly:make-stencil
-     `(delay-stencil-evaluation
-       ,(delay (ly:stencil-expr
-                (let* ((table (ly:output-def-lookup layout 'label-page-table))
+    (ly:stencil-add
+     (ly:make-stencil
+      `(delay-stencil-evaluation
+        ,(delay (let* ((table (ly:output-def-lookup layout 'label-page-table))
                        (page-number (if (list? table)
                                         (assoc-get label table)
-                                        #f))
-                       (link-expr (list 'page-link page-number
-                                        `(quote ,x-ext) `(quote ,y-ext))))
-                  (ly:stencil-add (ly:make-stencil link-expr x-ext y-ext)
-arg-stencil)))))
-     x-ext
-     y-ext)))
+                                        #f)))
+                  (list 'page-link page-number
+                        `(quote ,x-ext) `(quote ,y-ext)))))
+      x-ext
+      y-ext)
+     arg-stencil)))
 
 
 (define-markup-command (beam layout props width slope thickness)
@@ -333,20 +530,20 @@ Create a beam with the specified parameters.
 }
 @end lilypond"
   (let* ((y (* slope width))
-        (yext (cons (min 0 y) (max 0 y)))
-        (half (/ thickness 2)))
+         (yext (cons (min 0 y) (max 0 y)))
+         (half (/ thickness 2)))
 
     (ly:make-stencil
      `(polygon ',(list
-                 0 (/ thickness -2)
-                   width (+ (* width slope)  (/ thickness -2))
-                   width (+ (* width slope)  (/ thickness 2))
-                   0 (/ thickness 2))
-              ,(ly:output-def-lookup layout 'blot-diameter)
-              #t)
+                  0 (/ thickness -2)
+                  width (+ (* width slope)  (/ thickness -2))
+                  width (+ (* width slope)  (/ thickness 2))
+                  0 (/ thickness 2))
+               ,(ly:output-def-lookup layout 'blot-diameter)
+               #t)
      (cons 0 width)
      (cons (+ (- half) (car yext))
-          (+ half (cdr yext))))))
+           (+ half (cdr yext))))))
 
 (define-markup-command (underline layout props arg)
   (markup?)
@@ -382,8 +579,8 @@ thickness, and @code{offset} to determine line y-offset.
   (markup?)
   #:category font
   #:properties ((thickness 1)
-               (font-size 0)
-               (box-padding 0.2))
+                (font-size 0)
+                (box-padding 0.2))
   "
 @cindex enclosing text within a box
 
@@ -436,9 +633,9 @@ circle of diameter@tie{}0 (i.e., sharp corners).
   (markup?)
   #:category graphic
   #:properties ((thickness 1)
-               (corner-radius 1)
-               (font-size 0)
-               (box-padding 0.5))
+                (corner-radius 1)
+                (font-size 0)
+                (box-padding 0.5))
   "@cindex enclosing text in a box with rounded corners
    @cindex drawing boxes with rounded corners around text
 Draw a box with rounded corners around @var{arg}.  Looks at @code{thickness},
@@ -507,6 +704,7 @@ Provide a white background for @var{arg}.
 @cindex putting space around text
 
 Add space around a markup object.
+Identical to @code{pad-around}.
 
 @lilypond[verbatim,quote]
 \\markup {
@@ -521,15 +719,11 @@ Add space around a markup object.
   }
 }
 @end lilypond"
-  (let*
-      ((stil (interpret-markup layout props arg))
-       (xext (ly:stencil-extent stil X))
-       (yext (ly:stencil-extent stil Y)))
-
-    (ly:make-stencil
-     (ly:stencil-expr stil)
-     (interval-widen xext amount)
-     (interval-widen yext amount))))
+  (let* ((m (interpret-markup layout props arg))
+         (x (interval-widen (ly:stencil-extent m X) amount))
+         (y (interval-widen (ly:stencil-extent m Y) amount)))
+    (ly:stencil-add (make-transparent-box-stencil x y)
+                    m)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; space
@@ -544,15 +738,13 @@ Add space around a markup object.
 Create a box of the same height as the space in the current font."
   (let ((m (ly:text-interface::interpret-markup layout props " ")))
     (ly:make-stencil (ly:stencil-expr m)
-                    '(0 . 0)
-                    (ly:stencil-extent m X)
-                    )))
+                     '(0 . 0)
+                     (ly:stencil-extent m X)
+                     )))
 
-;; todo: fix negative space
 (define-markup-command (hspace layout props amount)
   (number?)
   #:category align
-  #:properties ((word-space))
   "
 @cindex creating horizontal spaces in text
 
@@ -567,16 +759,12 @@ Create an invisible object taking up horizontal space @var{amount}.
   three
 }
 @end lilypond"
-  (let ((corrected-space (- amount word-space)))
-    (if (> corrected-space 0)
-       (ly:make-stencil "" (cons 0 corrected-space) '(0 . 0))
-       (ly:make-stencil "" (cons corrected-space corrected-space) '(0 . 0)))))
+  (ly:make-stencil "" (cons 0 amount) empty-interval))
 
-;; todo: fix negative space
 (define-markup-command (vspace layout props amount)
- (number?)
- #:category align
- "
 (number?)
 #:category align
 "
 @cindex creating vertical spaces in text
 
 Create an invisible object taking up vertical space
@@ -594,9 +782,7 @@ of @var{amount} multiplied by 3.
 }
 @end lilypond"
   (let ((amount (* amount 3.0)))
-    (if (> amount 0)
-        (ly:make-stencil "" (cons 0 0) (cons 0 amount))
-        (ly:make-stencil "" (cons 0 0) (cons amount amount)))))
+    (ly:make-stencil "" empty-interval (cons 0 amount))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -627,11 +813,11 @@ Use a stencil as markup.
       ((match (regexp-exec bbox-regexp string)))
 
     (if match
-       (map (lambda (x)
-              (string->number (match:substring match x)))
-            (cdr (iota 5)))
+        (map (lambda (x)
+               (string->number (match:substring match x)))
+             (cdr (iota 5)))
 
-       #f)))
+        #f)))
 
 (define-markup-command (epsfile layout props axis size file-name)
   (number? number? string?)
@@ -686,20 +872,20 @@ rings = \\markup {
   ;; FIXME
   (ly:make-stencil
    (list 'embedded-ps
-        (format #f "
+         (format #f "
 gsave currentpoint translate
 0.1 setlinewidth
  ~a
 grestore
 "
-                str))
+                 str))
    '(0 . 0) '(0 . 0)))
 
 (define-markup-command (path layout props thickness commands) (number? list?)
   #:category graphic
   #:properties ((line-cap-style 'round)
-               (line-join-style 'round)
-               (filled #f))
+                (line-join-style 'round)
+                (filled #f))
   "
 @cindex paths, drawing
 @cindex drawing paths
@@ -754,77 +940,77 @@ samplePath =
 }
 @end lilypond"
   (let* ((half-thickness (/ thickness 2))
-        (current-point '(0 . 0))
-        (set-point (lambda (lst) (set! current-point lst)))
-        (relative? (lambda (x)
-                     (string-prefix? "r" (symbol->string (car x)))))
-        ;; For calculating extents, we want to modify the command
-        ;; list so that all coordinates are absolute.
-        (new-commands (map (lambda (x)
-                             (cond
-                               ;; for rmoveto, rlineto
-                               ((and (relative? x) (eq? 3 (length x)))
-                                (let ((cp (cons
-                                            (+ (car current-point)
-                                               (second x))
-                                            (+ (cdr current-point)
-                                               (third x)))))
-                                  (set-point cp)
-                                  (list (car cp)
-                                        (cdr cp))))
-                               ;; for rcurveto
-                               ((and (relative? x) (eq? 7 (length x)))
-                                (let* ((old-cp current-point)
-                                       (cp (cons
-                                             (+ (car old-cp)
-                                                (sixth x))
-                                             (+ (cdr old-cp)
-                                                (seventh x)))))
-                                  (set-point cp)
-                                  (list (+ (car old-cp) (second x))
-                                        (+ (cdr old-cp) (third x))
-                                        (+ (car old-cp) (fourth x))
-                                        (+ (cdr old-cp) (fifth x))
-                                        (car cp)
-                                        (cdr cp))))
-                               ;; for moveto, lineto
-                               ((eq? 3 (length x))
-                                (set-point (cons (second x)
-                                                 (third x)))
-                                (drop x 1))
-                               ;; for curveto
-                               ((eq? 7 (length x))
-                                (set-point (cons (sixth x)
-                                                 (seventh x)))
-                                (drop x 1))
-                               ;; keep closepath for filtering;
-                               ;; see `without-closepath'.
-                               (else x)))
-                           commands))
-        ;; path-min-max does not accept 0-arg lists,
-        ;; and since closepath does not affect extents, filter
-        ;; out those commands here.
-        (without-closepath (filter (lambda (x)
-                                     (not (equal? 'closepath (car x))))
-                                   new-commands))
-        (extents (path-min-max
-                   ;; set the origin to the first moveto
-                   (list (list-ref (car without-closepath) 0)
-                         (list-ref (car without-closepath) 1))
-                   without-closepath))
-        (X-extent (cons (list-ref extents 0) (list-ref extents 1)))
-        (Y-extent (cons (list-ref extents 2) (list-ref extents 3)))
-        (command-list (fold-right append '() commands)))
+         (current-point '(0 . 0))
+         (set-point (lambda (lst) (set! current-point lst)))
+         (relative? (lambda (x)
+                      (string-prefix? "r" (symbol->string (car x)))))
+         ;; For calculating extents, we want to modify the command
+         ;; list so that all coordinates are absolute.
+         (new-commands (map (lambda (x)
+                              (cond
+                               ;; for rmoveto, rlineto
+                               ((and (relative? x) (= 3 (length x)))
+                                (let ((cp (cons
+                                           (+ (car current-point)
+                                              (second x))
+                                           (+ (cdr current-point)
+                                              (third x)))))
+                                  (set-point cp)
+                                  (list (car cp)
+                                        (cdr cp))))
+                               ;; for rcurveto
+                               ((and (relative? x) (= 7 (length x)))
+                                (let* ((old-cp current-point)
+                                       (cp (cons
+                                            (+ (car old-cp)
+                                               (sixth x))
+                                            (+ (cdr old-cp)
+                                               (seventh x)))))
+                                  (set-point cp)
+                                  (list (+ (car old-cp) (second x))
+                                        (+ (cdr old-cp) (third x))
+                                        (+ (car old-cp) (fourth x))
+                                        (+ (cdr old-cp) (fifth x))
+                                        (car cp)
+                                        (cdr cp))))
+                               ;; for moveto, lineto
+                               ((= 3 (length x))
+                                (set-point (cons (second x)
+                                                 (third x)))
+                                (drop x 1))
+                               ;; for curveto
+                               ((= 7 (length x))
+                                (set-point (cons (sixth x)
+                                                 (seventh x)))
+                                (drop x 1))
+                               ;; keep closepath for filtering;
+                               ;; see `without-closepath'.
+                               (else x)))
+                            commands))
+         ;; path-min-max does not accept 0-arg lists,
+         ;; and since closepath does not affect extents, filter
+         ;; out those commands here.
+         (without-closepath (filter (lambda (x)
+                                      (not (equal? 'closepath (car x))))
+                                    new-commands))
+         (extents (path-min-max
+                   ;; set the origin to the first moveto
+                   (list (list-ref (car without-closepath) 0)
+                         (list-ref (car without-closepath) 1))
+                   without-closepath))
+         (X-extent (cons (list-ref extents 0) (list-ref extents 1)))
+         (Y-extent (cons (list-ref extents 2) (list-ref extents 3)))
+         (command-list (fold-right append '() commands)))
 
     ;; account for line thickness
     (set! X-extent (interval-widen X-extent half-thickness))
     (set! Y-extent (interval-widen Y-extent half-thickness))
 
     (ly:make-stencil
-      `(path ,thickness `(,@',command-list)
-            ',line-cap-style ',line-join-style ,filled)
-      X-extent
-      Y-extent)))
+     `(path ,thickness `(,@',command-list)
+            ',line-cap-style ',line-join-style ,filled)
+     X-extent
+     Y-extent)))
 
 (define-markup-command (score layout props score)
   (ly:score?)
@@ -833,7 +1019,9 @@ samplePath =
   "
 @cindex inserting music into text
 
-Inline an image of music.
+Inline an image of music.  The reference point (usually the middle
+staff line) of the lowest staff in the top system is placed on the
+baseline.
 
 @lilypond[verbatim,quote]
 \\markup {
@@ -879,10 +1067,18 @@ Inline an image of music.
   (let ((output (ly:score-embedded-format score layout)))
 
     (if (ly:music-output? output)
-       (stack-stencils Y DOWN baseline-skip
-                       (map paper-system-stencil
-                            (vector->list
-                             (ly:paper-score-paper-systems output))))
+        (let ((paper-systems
+               (vector->list
+                (ly:paper-score-paper-systems output))))
+          (if (pair? paper-systems)
+              ;; shift such that the refpoint of the bottom staff of
+              ;; the first system is the baseline of the score
+              (ly:stencil-translate-axis
+               (stack-stencils Y DOWN baseline-skip
+                               (map paper-system-stencil paper-systems))
+               (- (car (paper-system-staff-extents (car paper-systems))))
+               Y)
+              empty-stencil))
        (begin
          (ly:warning (_"no systems found in \\score markup, does it have a \\layout block?"))
          empty-stencil))))
@@ -946,12 +1142,12 @@ Like simple-markup, but use tie characters for @q{~} tilde symbols.
   (define (replace-ties tie str)
     (if (string-contains str "~")
         (let*
-          ((half-space (/ word-space 2))
-           (parts (string-split str #\~))
-           (tie-str (markup #:hspace half-space
-                            #:musicglyph tie
-                            #:hspace half-space))
-           (joined  (list-join parts tie-str)))
+            ((half-space (/ word-space 2))
+             (parts (string-split str #\~))
+             (tie-str (markup #:hspace half-space
+                              #:musicglyph tie
+                              #:hspace half-space))
+             (joined  (list-join parts tie-str)))
           (make-concat-markup joined))
         str))
 
@@ -962,16 +1158,16 @@ Like simple-markup, but use tie characters for @q{~} tilde symbols.
     (let ((match (match-short str)))
       (if (not match)
           (make-concat-markup (list
-            mkp
-            (replace-ties "ties.lyric.default" str)))
+                               mkp
+                               (replace-ties "ties.lyric.default" str)))
           (let ((new-str (match:suffix match))
                 (new-mkp (make-concat-markup (list
-                          mkp
-                          (replace-ties "ties.lyric.default"
-                                        (match:prefix match))
-                          (replace-ties "ties.lyric.short"
-                                        (match:substring match))))))
-              (replace-short new-str new-mkp)))))
+                                              mkp
+                                              (replace-ties "ties.lyric.default"
+                                                            (match:prefix match))
+                                              (replace-ties "ties.lyric.short"
+                                                            (match:substring match))))))
+            (replace-short new-str new-mkp)))))
 
   (interpret-markup layout
                     props
@@ -998,12 +1194,12 @@ Like simple-markup, but use tie characters for @q{~} tilde symbols.
    ((= (length text-widths) word-count)
     (cons
      (- (- (/ line-width (1- word-count)) (car text-widths))
-       (/ (car (cdr text-widths)) 2))
+        (/ (car (cdr text-widths)) 2))
      (get-fill-space word-count line-width word-space (cdr text-widths))))
    ;; special case last padding
    ((= (length text-widths) 2)
     (list (- (/ line-width (1- word-count))
-            (+ (/ (car text-widths) 2) (car (cdr text-widths)))) 0))
+             (+ (/ (car text-widths) 2) (car (cdr text-widths)))) 0))
    (else
     (let ((default-padding
             (- (/ line-width (1- word-count))
@@ -1099,7 +1295,7 @@ If there are no arguments, return an empty stencil.
   (markup-list?)
   #:category align
   #:properties ((word-space)
-               (text-direction RIGHT))
+                (text-direction RIGHT))
   "Put @var{args} in a horizontal line.  The property @code{word-space}
 determines the space between markups in @var{args}.
 
@@ -1113,9 +1309,7 @@ determines the space between markups in @var{args}.
   (let ((stencils (interpret-markup-list layout props args)))
     (if (= text-direction LEFT)
         (set! stencils (reverse stencils)))
-    (stack-stencil-line
-     word-space
-     (remove ly:stencil-empty? stencils))))
+    (stack-stencil-line word-space stencils)))
 
 (define-markup-command (concat layout props args)
   (markup-list?)
@@ -1142,83 +1336,125 @@ equivalent to @code{\"fi\"}.
     (fold-right (lambda (arg result-list)
                   (let ((result (if (pair? result-list)
                                     (car result-list)
-                                  '())))
+                                    '())))
                     (if (and (pair? arg) (eqv? (car arg) simple-markup))
-                      (set! arg (cadr arg)))
+                        (set! arg (cadr arg)))
                     (if (and (string? result) (string? arg))
                         (cons (string-append arg result) (cdr result-list))
-                      (cons arg result-list))))
+                        (cons arg result-list))))
                 '()
                 arg-list))
 
   (interpret-markup layout
                     (prepend-alist-chain 'word-space 0 props)
-                    (make-line-markup (if (markup-command-list? args)
-                                         args
-                                         (concat-string-args args)))))
+                    (make-line-markup
+                     (make-override-lines-markup-list
+                      (cons 'word-space
+                            (chain-assoc-get 'word-space props))
+                      (if (markup-command-list? args)
+                          args
+                          (concat-string-args args))))))
 
 (define (wordwrap-stencils stencils
-                          justify base-space line-width text-dir)
+                           justify base-space line-width text-dir)
   "Perform simple wordwrap, return stencil of each line."
   (define space (if justify
                     ;; justify only stretches lines.
                    (* 0.7 base-space)
                    base-space))
-  (define (take-list width space stencils
-                    accumulator accumulated-width)
-    "Return (head-list . tail) pair, with head-list fitting into width"
-    (if (null? stencils)
-       (cons accumulator stencils)
-       (let* ((first (car stencils))
-               (first-wid (cdr (ly:stencil-extent (car stencils) X)))
-               (newwid (+ space first-wid accumulated-width)))
-         (if (or (null? accumulator)
-                  (< newwid width))
-              (take-list width space
-                         (cdr stencils)
-                         (cons first accumulator)
-                         newwid)
-              (cons accumulator stencils)))))
-  (let loop ((lines '())
-             (todo stencils))
-    (let* ((line-break (take-list line-width space todo
-                                  '() 0.0))
-          (line-stencils (car line-break))
-          (space-left (- line-width
-                          (apply + (map (lambda (x) (cdr (ly:stencil-extent x X)))
-                                        line-stencils))))
-          (line-word-space (cond ((not justify) space)
-                                  ;; don't stretch last line of paragraph.
-                                  ;; hmmm . bug - will overstretch the last line in some case.
-                                  ((null? (cdr line-break))
-                                   base-space)
-                                  ((null? line-stencils) 0.0)
-                                  ((null? (cdr line-stencils)) 0.0)
-                                  (else (/ space-left (1- (length line-stencils))))))
-          (line (stack-stencil-line line-word-space
-                                     (if (= text-dir RIGHT)
-                                         (reverse line-stencils)
-                                         line-stencils))))
-      (if (pair? (cdr line-break))
-          (loop (cons line lines)
-                (cdr line-break))
-          (begin
-            (if (= text-dir LEFT)
-                (set! line
-                      (ly:stencil-translate-axis
-                       line
-                       (- line-width (interval-end (ly:stencil-extent line X)))
-                       X)))
-            (reverse (cons line lines)))))))
+  (define (stencil-len s)
+    (interval-end (ly:stencil-extent s X)))
+  (define (maybe-shift line)
+    (if (= text-dir LEFT)
+        (ly:stencil-translate-axis
+         line
+         (- line-width (stencil-len line))
+         X)
+        line))
+  (if (null? stencils)
+      '()
+      (let loop ((lines '())
+                 (todo stencils))
+        (let word-loop
+            ((line (first todo))
+             (todo (cdr todo))
+             (word-list (list (first todo))))
+          (cond
+           ((pair? todo)
+            (let ((new (if (= text-dir LEFT)
+                           (ly:stencil-stack (car todo) X RIGHT line space)
+                           (ly:stencil-stack line X RIGHT (car todo) space))))
+              (cond
+               ((<= (stencil-len new) line-width)
+                (word-loop new (cdr todo)
+                           (cons (car todo) word-list)))
+               (justify
+                (let* ((word-list
+                        ;; This depends on stencil stacking being
+                        ;; associative so that stacking
+                        ;; left-to-right and right-to-left leads to
+                        ;; the same result
+                        (if (= text-dir LEFT)
+                            word-list
+                            (reverse! word-list)))
+                       (len (stencil-len line))
+                       (stretch (- line-width len))
+                       (spaces
+                        (- (stencil-len
+                            (stack-stencils X RIGHT (1+ space) word-list))
+                           len)))
+                  (if (zero? spaces)
+                      ;; Uh oh, nothing to fill.
+                      (loop (cons (maybe-shift line) lines) todo)
+                      (loop (cons
+                             (stack-stencils X RIGHT
+                                             (+ space (/ stretch spaces))
+                                             word-list)
+                             lines)
+                            todo))))
+               (else ;; not justify
+                (loop (cons (maybe-shift line) lines) todo)))))
+           ;; todo is null
+           (justify
+            ;; Now we have the last line assembled with space
+            ;; which is compressed.  We want to use the
+            ;; uncompressed version instead if it fits, and the
+            ;; justified version if it doesn't.
+            (let* ((word-list
+                    ;; This depends on stencil stacking being
+                    ;; associative so that stacking
+                    ;; left-to-right and right-to-left leads to
+                    ;; the same result
+                    (if (= text-dir LEFT)
+                        word-list
+                        (reverse! word-list)))
+                   (big-line (stack-stencils X RIGHT base-space word-list))
+                   (big-len (stencil-len big-line))
+                   (len (stencil-len line)))
+              (reverse! lines
+                        (list
+                         (if (> big-len line-width)
+                             (stack-stencils X RIGHT
+                                             (/
+                                              (+
+                                               (* (- big-len line-width)
+                                                  space)
+                                               (* (- line-width len)
+                                                  base-space))
+                                              (- big-len len))
+                                             word-list)
+                             (maybe-shift big-line))))))
+           (else ;; not justify
+            (reverse! lines (list (maybe-shift line)))))))))
+
 
 (define-markup-list-command (wordwrap-internal layout props justify args)
   (boolean? markup-list?)
   #:properties ((line-width #f)
-               (word-space)
-               (text-direction RIGHT))
+                (word-space)
+                (text-direction RIGHT))
   "Internal markup list command used to define @code{\\justify} and @code{\\wordwrap}."
-  (wordwrap-stencils (remove ly:stencil-empty?
-                             (interpret-markup-list layout props args))
+  (wordwrap-stencils (interpret-markup-list layout props args)
                      justify
                      word-space
                      (or line-width
@@ -1229,7 +1465,7 @@ equivalent to @code{\"fi\"}.
   (markup-list?)
   #:category align
   #:properties ((baseline-skip)
-               wordwrap-internal-markup-list)
+                wordwrap-internal-markup-list)
   "
 @cindex justifying text
 
@@ -1254,7 +1490,7 @@ Use @code{\\override #'(line-width . @var{X})} to set the line width;
   (markup-list?)
   #:category align
   #:properties ((baseline-skip)
-               wordwrap-internal-markup-list)
+                wordwrap-internal-markup-list)
   "Simple wordwrap.  Use @code{\\override #'(line-width . @var{X})} to set
 the line width, where @var{X} is the number of staff spaces.
 
@@ -1269,13 +1505,13 @@ the line width, where @var{X} is the number of staff spaces.
 }
 @end lilypond"
   (stack-lines DOWN 0.0 baseline-skip
-              (wordwrap-internal-markup-list layout props #f args)))
+               (wordwrap-internal-markup-list layout props #f args)))
 
 (define-markup-list-command (wordwrap-string-internal layout props justify arg)
   (boolean? string?)
   #:properties ((line-width)
-               (word-space)
-               (text-direction RIGHT))
+                (word-space)
+                (text-direction RIGHT))
   "Internal markup list command used to define @code{\\justify-string} and
 @code{\\wordwrap-string}."
   (let* ((para-strings (regexp-split
@@ -1288,21 +1524,20 @@ the line width, where @var{X} is the number of staff spaces.
                                para-strings))
          (para-lines (map (lambda (words)
                             (let* ((stencils
-                                    (remove ly:stencil-empty?
-                                            (map (lambda (x)
-                                                   (interpret-markup layout props x))
-                                                 words))))
+                                    (map (lambda (x)
+                                           (interpret-markup layout props x))
+                                         words)))
                               (wordwrap-stencils stencils
                                                  justify word-space
                                                  line-width text-direction)))
                           list-para-words)))
-    (apply append para-lines)))
+    (concatenate para-lines)))
 
 (define-markup-command (wordwrap-string layout props arg)
   (string?)
   #:category align
   #:properties ((baseline-skip)
-               wordwrap-string-internal-markup-list)
+                wordwrap-string-internal-markup-list)
   "Wordwrap a string.  Paragraphs may be separated with double newlines.
 
 @lilypond[verbatim,quote]
@@ -1328,7 +1563,7 @@ the line width, where @var{X} is the number of staff spaces.
   (string?)
   #:category align
   #:properties ((baseline-skip)
-               wordwrap-string-internal-markup-list)
+                wordwrap-string-internal-markup-list)
   "Justify a string.  Paragraphs may be separated with double newlines
 
 @lilypond[verbatim,quote]
@@ -1442,7 +1677,7 @@ curly braces as an argument; the follow example will not compile:
 }
 @end lilypond"
   (let* ((s1 (interpret-markup layout props arg1))
-        (s2 (interpret-markup layout props arg2)))
+         (s2 (interpret-markup layout props arg2)))
     (ly:stencil-add s1 s2)))
 
 ;;
@@ -1469,14 +1704,13 @@ in @var{args}.
 }
 @end lilypond"
   (let ((arg-stencils (interpret-markup-list layout props args)))
-    (stack-lines -1 0.0 baseline-skip
-                 (remove ly:stencil-empty? arg-stencils))))
+    (stack-lines -1 0.0 baseline-skip arg-stencils)))
 
 (define-markup-command (dir-column layout props args)
   (markup-list?)
   #:category align
   #:properties ((direction)
-               (baseline-skip))
+                (baseline-skip))
   "
 @cindex changing direction of text columns
 
@@ -1539,7 +1773,7 @@ Put @code{args} in a centered column.
   (markup-list?)
   #:category align
   #:properties ((baseline-skip))
- "
 "
 @cindex text columns, left-aligned
 
 Put @code{args} in a left-aligned column.
@@ -1559,7 +1793,7 @@ Put @code{args} in a left-aligned column.
   (markup-list?)
   #:category align
   #:properties ((baseline-skip))
- "
 "
 @cindex text columns, right-aligned
 
 Put @code{args} in a right-aligned column.
@@ -1742,8 +1976,12 @@ alignment accordingly.
 @cindex setting extent of text objects
 
 Set the dimensions of @var{arg} to @var{x} and@tie{}@var{y}."
-  (let* ((m (interpret-markup layout props arg)))
-    (ly:make-stencil (ly:stencil-expr m) x y)))
+  (let* ((expr (ly:stencil-expr (interpret-markup layout props arg))))
+    (ly:stencil-add
+     (make-transparent-box-stencil x y)
+     (ly:make-stencil
+      `(delay-stencil-evaluation ,(delay expr))
+      x y))))
 
 (define-markup-command (pad-around layout props amount arg)
   (number? markup?)
@@ -1764,11 +2002,10 @@ Set the dimensions of @var{arg} to @var{x} and@tie{}@var{y}."
 }
 @end lilypond"
   (let* ((m (interpret-markup layout props arg))
-         (x (ly:stencil-extent m X))
-         (y (ly:stencil-extent m Y)))
-    (ly:make-stencil (ly:stencil-expr m)
-                     (interval-widen x amount)
-                     (interval-widen y amount))))
+         (x (interval-widen (ly:stencil-extent m X) amount))
+         (y (interval-widen (ly:stencil-extent m Y) amount)))
+    (ly:stencil-add (make-transparent-box-stencil x y)
+                    m)))
 
 (define-markup-command (pad-x layout props amount arg)
   (number? markup?)
@@ -1821,7 +2058,7 @@ Add padding @var{amount} around @var{arg} in the X@tie{}direction.
   (let* ((m (interpret-markup layout props arg))
          (x (ly:stencil-extent m X))
          (y (ly:stencil-extent m Y)))
-    (ly:make-stencil "" x y)))
+    (ly:make-stencil (list 'transparent-stencil (ly:stencil-expr m)) x y)))
 
 (define-markup-command (pad-to-box layout props x-ext y-ext arg)
   (number-pair? number-pair? markup?)
@@ -1841,12 +2078,8 @@ Add padding @var{amount} around @var{arg} in the X@tie{}direction.
   }
 }
 @end lilypond"
-  (let* ((m (interpret-markup layout props arg))
-         (x (ly:stencil-extent m X))
-         (y (ly:stencil-extent m Y)))
-    (ly:make-stencil (ly:stencil-expr m)
-                     (interval-union x-ext x)
-                     (interval-union y-ext y))))
+  (ly:stencil-add (make-transparent-box-stencil x-ext y-ext)
+                  (interpret-markup layout props arg)))
 
 (define-markup-command (hcenter-in layout props length arg)
   (number? markup?)
@@ -1924,8 +2157,8 @@ returns an empty markup.
 @var{procedure} should take a single argument."
   (let ((anonymous-with-signature (lambda (layout props arg) (procedure layout props arg))))
     (set-object-property! anonymous-with-signature
-                         'markup-signature
-                         (list markup?))
+                          'markup-signature
+                          (list markup?))
     (interpret-markup layout props (list anonymous-with-signature arg))))
 
 (define-markup-command (footnote layout props mkup note)
@@ -1942,14 +2175,14 @@ returns an empty markup.
 @end lilypond
 The footnote will not be annotated automatically."
   (ly:stencil-combine-at-edge
-    (interpret-markup layout props mkup)
-    X
-    RIGHT
-    (ly:make-stencil
-      `(footnote (gensym "footnote") #f ,(interpret-markup layout props note))
-      '(0 . 0)
-      '(0 . 0))
-    0.0))
+   (interpret-markup layout props mkup)
+   X
+   RIGHT
+   (ly:make-stencil
+    `(footnote (gensym "footnote") #f ,(interpret-markup layout props note))
+    '(0 . 0)
+    '(0 . 0))
+   0.0))
 
 (define-markup-command (auto-footnote layout props mkup note)
   (markup? markup?)
@@ -1970,49 +2203,49 @@ The footnote will be annotated automatically."
          (footnote-hash (gensym "footnote"))
          (stencil-seed 0)
          (gauge-stencil (interpret-markup
+                         layout
+                         props
+                         ((ly:output-def-lookup
                            layout
-                           props
-                           ((ly:output-def-lookup
-                               layout
-                               'footnote-numbering-function)
-                              stencil-seed)))
+                           'footnote-numbering-function)
+                          stencil-seed)))
          (x-ext (ly:stencil-extent gauge-stencil X))
-        (y-ext (ly:stencil-extent gauge-stencil Y))
+         (y-ext (ly:stencil-extent gauge-stencil Y))
          (footnote-number
-           `(delay-stencil-evaluation
-              ,(delay
-                (ly:stencil-expr
-                  (let* ((table
-                          (ly:output-def-lookup layout
-                                                'number-footnote-table))
-                         (footnote-stencil (if (list? table)
-                                               (assoc-get footnote-hash
-                                                          table)
-                                               empty-stencil))
-                         (footnote-stencil (if (ly:stencil? footnote-stencil)
-                                               footnote-stencil
-                                               (begin
-                                                 (ly:programming-error
-"Cannot find correct footnote for a markup object.")
-                                                 empty-stencil)))
-                         (gap (- (interval-length x-ext)
-                                 (interval-length
-                                   (ly:stencil-extent footnote-stencil X))))
-                         (y-trans (- (+ (cdr y-ext)
-                                        raise)
-                                     (cdr (ly:stencil-extent footnote-stencil
-                                                             Y)))))
-                    (ly:stencil-translate footnote-stencil
-                                          (cons gap y-trans)))))))
+          `(delay-stencil-evaluation
+            ,(delay
+               (ly:stencil-expr
+                (let* ((table
+                        (ly:output-def-lookup layout
+                                              'number-footnote-table))
+                       (footnote-stencil (if (list? table)
+                                             (assoc-get footnote-hash
+                                                        table)
+                                             empty-stencil))
+                       (footnote-stencil (if (ly:stencil? footnote-stencil)
+                                             footnote-stencil
+                                             (begin
+                                               (ly:programming-error
+                                                "Cannot find correct footnote for a markup object.")
+                                               empty-stencil)))
+                       (gap (- (interval-length x-ext)
+                               (interval-length
+                                (ly:stencil-extent footnote-stencil X))))
+                       (y-trans (- (+ (cdr y-ext)
+                                      raise)
+                                   (cdr (ly:stencil-extent footnote-stencil
+                                                           Y)))))
+                  (ly:stencil-translate footnote-stencil
+                                        (cons gap y-trans)))))))
          (main-stencil (ly:stencil-combine-at-edge
-                         markup-stencil
-                         X
-                         RIGHT
-                         (ly:make-stencil footnote-number x-ext y-ext)
-                         padding)))
-  (ly:stencil-add
-    main-stencil
-    (ly:make-stencil
+                        markup-stencil
+                        X
+                        RIGHT
+                        (ly:make-stencil footnote-number x-ext y-ext)
+                        padding)))
+    (ly:stencil-add
+     main-stencil
+     (ly:make-stencil
       `(footnote ,footnote-hash #t ,(interpret-markup layout props note))
       '(0 . 0)
       '(0 . 0)))))
@@ -2093,7 +2326,7 @@ may be any property supported by @rinternals{font-interface},
 }
 @end lilypond"
   (interpret-markup layout props
-   `(,fontsize-markup -1 ,arg)))
+                    `(,fontsize-markup -1 ,arg)))
 
 (define-markup-command (larger layout props arg)
   (markup?)
@@ -2109,7 +2342,7 @@ may be any property supported by @rinternals{font-interface},
 }
 @end lilypond"
   (interpret-markup layout props
-   `(,fontsize-markup 1 ,arg)))
+                    `(,fontsize-markup 1 ,arg)))
 
 (define-markup-command (finger layout props arg)
   (markup?)
@@ -2147,21 +2380,21 @@ Adjusts @code{baseline-skip} and @code{word-space} accordingly.
          (ref-word-space (chain-assoc-get 'word-space text-props 0.6))
          (ref-baseline (chain-assoc-get 'baseline-skip text-props 3))
          (magnification (/ size ref-size)))
-     (interpret-markup
-      layout
-      (cons
-       `((baseline-skip . ,(* magnification ref-baseline))
-         (word-space . ,(* magnification ref-word-space))
-         (font-size . ,(magnification->font-size magnification)))
-       props)
-      arg)))
+    (interpret-markup
+     layout
+     (cons
+      `((baseline-skip . ,(* magnification ref-baseline))
+        (word-space . ,(* magnification ref-word-space))
+        (font-size . ,(magnification->font-size magnification)))
+      props)
+     arg)))
 
 (define-markup-command (fontsize layout props increment arg)
   (number? markup?)
   #:category font
   #:properties ((font-size 0)
-               (word-space 1)
-               (baseline-skip 2))
+                (word-space 1)
+                (baseline-skip 2))
   "Add @var{increment} to the font-size.  Adjusts @code{baseline-skip}
 accordingly.
 
@@ -2403,33 +2636,33 @@ Note: @code{\\smallCaps} does not support accented characters.
   (define (char-list->markup chars lower)
     (let ((final-string (string-upcase (reverse-list->string chars))))
       (if lower
-         (markup #:fontsize -2 final-string)
-         final-string)))
+          (markup #:fontsize -2 final-string)
+          final-string)))
   (define (make-small-caps rest-chars currents current-is-lower prev-result)
     (if (null? rest-chars)
-       (make-concat-markup
-         (reverse! (cons (char-list->markup currents current-is-lower)
-                         prev-result)))
-       (let* ((ch (car rest-chars))
-              (is-lower (char-lower-case? ch)))
-         (if (or (and current-is-lower is-lower)
-                 (and (not current-is-lower) (not is-lower)))
-             (make-small-caps (cdr rest-chars)
-                              (cons ch currents)
-                              is-lower
-                              prev-result)
-             (make-small-caps (cdr rest-chars)
-                              (list ch)
-                              is-lower
-                              (if (null? currents)
-                                  prev-result
-                                  (cons (char-list->markup
-                                           currents current-is-lower)
-                                        prev-result)))))))
+        (make-concat-markup
+         (reverse! (cons (char-list->markup currents current-is-lower)
+                         prev-result)))
+        (let* ((ch (car rest-chars))
+               (is-lower (char-lower-case? ch)))
+          (if (or (and current-is-lower is-lower)
+                  (and (not current-is-lower) (not is-lower)))
+              (make-small-caps (cdr rest-chars)
+                               (cons ch currents)
+                               is-lower
+                               prev-result)
+              (make-small-caps (cdr rest-chars)
+                               (list ch)
+                               is-lower
+                               (if (null? currents)
+                                   prev-result
+                                   (cons (char-list->markup
+                                          currents current-is-lower)
+                                         prev-result)))))))
   (interpret-markup layout props
-    (if (string? arg)
-       (make-small-caps (string->list arg) (list) #f (list))
-       arg)))
+                    (if (string? arg)
+                        (make-small-caps (string->list arg) (list) #f (list))
+                        arg)))
 
 (define-markup-command (caps layout props arg)
   (markup?)
@@ -2483,7 +2716,7 @@ done in a different font.  The recommended font for this is bold and italic.
 
   ;; ugh - latin1
   (interpret-markup layout (prepend-alist-chain 'font-encoding 'latin1 props)
-                   arg))
+                    arg))
 
 (define-markup-command (italic layout props arg)
   (markup?)
@@ -2557,7 +2790,7 @@ of @code{italic}.
 }
 @end lilypond"
   (interpret-markup layout (prepend-alist-chain 'font-series 'medium props)
-                   arg))
+                    arg))
 
 (define-markup-command (normal-text layout props arg)
   (markup?)
@@ -2581,8 +2814,8 @@ normal text font, no matter what font was used earlier.
   ;; ugh - latin1
   (interpret-markup layout
                     (cons '((font-family . roman) (font-shape . upright)
-                           (font-series . medium) (font-encoding . latin1))
-                         props)
+                            (font-series . medium) (font-encoding . latin1))
+                          props)
                     arg))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2605,13 +2838,13 @@ the possible glyphs.
 }
 @end lilypond"
   (let* ((font (ly:paper-get-font layout
-                                 (cons '((font-encoding . fetaMusic)
-                                         (font-name . #f))
+                                  (cons '((font-encoding . fetaMusic)
+                                          (font-name . #f))
 
-                                                props)))
-        (glyph (ly:font-get-glyph font glyph-name)))
+                                        props)))
+         (glyph (ly:font-get-glyph font glyph-name)))
     (if (null? (ly:stencil-expr glyph))
-       (ly:warning (_ "Cannot find glyph ~a") glyph-name))
+        (ly:warning (_ "Cannot find glyph ~a") glyph-name))
 
     glyph))
 
@@ -2745,8 +2978,8 @@ Draw @var{arg} in color specified by @var{color}.
 @end lilypond"
   (let ((stil (interpret-markup layout props arg)))
     (ly:make-stencil (list 'color color (ly:stencil-expr stil))
-                    (ly:stencil-extent stil X)
-                    (ly:stencil-extent stil Y))))
+                     (ly:stencil-extent stil X)
+                     (ly:stencil-extent stil Y))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; glyphs
@@ -2772,14 +3005,14 @@ Use the filled head if @var{filled} is specified.
 @end lilypond"
   (let*
       ((name (format #f "arrowheads.~a.~a~a"
-                    (if filled
-                        "close"
-                        "open")
-                    axis
-                    dir)))
+                     (if filled
+                         "close"
+                         "open")
+                     axis
+                     dir)))
     (ly:font-get-glyph
      (ly:paper-get-font layout (cons '((font-encoding . fetaMusic))
-                                    props))
+                                     props))
      name)))
 
 (define-markup-command (lookup layout props glyph-name)
@@ -2798,7 +3031,7 @@ Use the filled head if @var{filled} is specified.
 }
 @end lilypond"
   (ly:font-get-glyph (ly:paper-get-font layout props)
-                    glyph-name))
+                     glyph-name))
 
 (define-markup-command (char layout props num)
   (integer?)
@@ -2824,22 +3057,22 @@ format require the prefix @code{#x}.
                (integer->char (+ i (char->integer #\A)))))
 
 (define number->mark-alphabet-vector (list->vector
-  (map (lambda (i) (integer->char (+ i (char->integer #\A)))) (iota 26))))
+                                      (map (lambda (i) (integer->char (+ i (char->integer #\A)))) (iota 26))))
 
 (define (number->markletter-string vec n)
   "Double letters for big marks."
   (let* ((lst (vector-length vec)))
 
     (if (>= n lst)
-       (string-append (number->markletter-string vec (1- (quotient n lst)))
-                      (number->markletter-string vec (remainder n lst)))
-       (make-string 1 (vector-ref vec n)))))
+        (string-append (number->markletter-string vec (1- (quotient n lst)))
+                       (number->markletter-string vec (remainder n lst)))
+        (make-string 1 (vector-ref vec n)))))
 
 (define-markup-command (markletter layout props num)
   (integer?)
   #:category other
-  "Make a markup letter for @var{num}.  The letters start with A to@tie{}Z
-(skipping letter@tie{}I), and continue with double letters.
+  "Make a markup letter for @var{num}.  The letters start with A
+to@tie{}Z (skipping letter@tie{}I), and continue with double letters.
 
 @lilypond[verbatim,quote]
 \\markup {
@@ -2849,12 +3082,12 @@ format require the prefix @code{#x}.
 }
 @end lilypond"
   (ly:text-interface::interpret-markup layout props
-    (number->markletter-string number->mark-letter-vector num)))
+                                       (number->markletter-string number->mark-letter-vector num)))
 
 (define-markup-command (markalphabet layout props num)
   (integer?)
   #:category other
-   "Make a markup letter for @var{num}.  The letters start with A to@tie{}Z
+  "Make a markup letter for @var{num}.  The letters start with A to@tie{}Z
 and continue with double letters.
 
 @lilypond[verbatim,quote]
@@ -2864,67 +3097,67 @@ and continue with double letters.
   \\markalphabet #26
 }
 @end lilypond"
-   (ly:text-interface::interpret-markup layout props
-     (number->markletter-string number->mark-alphabet-vector num)))
+  (ly:text-interface::interpret-markup layout props
+                                       (number->markletter-string number->mark-alphabet-vector num)))
 
 (define-public (horizontal-slash-interval num forward number-interval mag)
   (if forward
-    (cond ;((= num 6) (interval-widen number-interval (* mag 0.5)))
-          ;((= num 5) (interval-widen number-interval (* mag 0.5)))
-          (else (interval-widen number-interval (* mag 0.25))))
-    (cond ((= num 6) (interval-widen number-interval (* mag 0.5)))
-          ;((= num 5) (interval-widen number-interval (* mag 0.5)))
-          (else (interval-widen number-interval (* mag 0.25))))
-  ))
+      (cond ;; ((= num 6) (interval-widen number-interval (* mag 0.5)))
+       ;; ((= num 5) (interval-widen number-interval (* mag 0.5)))
+       (else (interval-widen number-interval (* mag 0.25))))
+      (cond ((= num 6) (interval-widen number-interval (* mag 0.5)))
+            ;; ((= num 5) (interval-widen number-interval (* mag 0.5)))
+            (else (interval-widen number-interval (* mag 0.25))))
+      ))
 
 (define-public (adjust-slash-stencil num forward stencil mag)
   (if forward
-    (cond ((= num 2)
-              (ly:stencil-translate stencil (cons (* mag -0.00) (* mag 0.2))))
-          ((= num 3)
-              (ly:stencil-translate stencil (cons (* mag -0.00) (* mag 0.2))))
-          ;((= num 5)
-              ;(ly:stencil-translate stencil (cons (* mag -0.00) (* mag -0.07))))
-          ;((= num 7)
-          ;    (ly:stencil-translate stencil (cons (* mag -0.00) (* mag -0.15))))
-          (else stencil))
-    (cond ((= num 6)
-              (ly:stencil-translate stencil (cons (* mag -0.00) (* mag 0.15))))
-          ;((= num 8)
-          ;    (ly:stencil-translate stencil (cons (* mag -0.00) (* mag -0.15))))
-          (else stencil))
+      (cond ((= num 2)
+             (ly:stencil-translate stencil (cons (* mag -0.00) (* mag 0.2))))
+            ((= num 3)
+             (ly:stencil-translate stencil (cons (* mag -0.00) (* mag 0.2))))
+            ;; ((= num 5)
+            ;;     (ly:stencil-translate stencil (cons (* mag -0.00) (* mag -0.07))))
+            ;; ((= num 7)
+            ;;     (ly:stencil-translate stencil (cons (* mag -0.00) (* mag -0.15))))
+            (else stencil))
+      (cond ((= num 6)
+             (ly:stencil-translate stencil (cons (* mag -0.00) (* mag 0.15))))
+            ;; ((= num 8)
+            ;;     (ly:stencil-translate stencil (cons (* mag -0.00) (* mag -0.15))))
+            (else stencil))
+      )
   )
-)
 
 (define (slashed-digit-internal layout props num forward font-size thickness)
   (let* ((mag (magstep font-size))
          (thickness (* mag
                        (ly:output-def-lookup layout 'line-thickness)
                        thickness))
-         ; backward slashes might use slope and point in the other direction!
+         ;; backward slashes might use slope and point in the other direction!
          (dy (* mag (if forward 0.4 -0.4)))
          (number-stencil (interpret-markup layout
                                            (prepend-alist-chain 'font-encoding 'fetaText props)
                                            (number->string num)))
          (num-x (horizontal-slash-interval num forward (ly:stencil-extent number-stencil X) mag))
          (center (interval-center (ly:stencil-extent number-stencil Y)))
-         ; Use the real extents of the slash, not the whole number, because we
-         ; might translate the slash later on!
+         ;; Use the real extents of the slash, not the whole number,
+         ;; because we might translate the slash later on!
          (num-y (interval-widen (cons center center) (abs dy)))
          (is-sane (and (interval-sane? num-x) (interval-sane? num-y)))
          (slash-stencil (if is-sane
                             (make-line-stencil thickness
-                                         (car num-x) (- (interval-center num-y) dy)
-                                         (cdr num-x) (+ (interval-center num-y) dy))
+                                               (car num-x) (- (interval-center num-y) dy)
+                                               (cdr num-x) (+ (interval-center num-y) dy))
                             #f)))
     (if (ly:stencil? slash-stencil)
-      (begin
-        ; for some numbers we need to shift the slash/backslash up or down to make
-        ; the slashed digit look better
-        (set! slash-stencil (adjust-slash-stencil num forward slash-stencil mag))
-        (set! number-stencil
-          (ly:stencil-add number-stencil slash-stencil)))
-      (ly:warning "Unable to create slashed digit ~a" num))
+        (begin
+          ;; for some numbers we need to shift the slash/backslash up or
+          ;; down to make the slashed digit look better
+          (set! slash-stencil (adjust-slash-stencil num forward slash-stencil mag))
+          (set! number-stencil
+                (ly:stencil-add number-stencil slash-stencil)))
+        (ly:warning "Unable to create slashed digit ~a" num))
     number-stencil))
 
 
@@ -2932,7 +3165,7 @@ and continue with double letters.
   (integer?)
   #:category other
   #:properties ((font-size 0)
-               (thickness 1.6))
+                (thickness 1.6))
   "
 @cindex slashed digits
 
@@ -2952,7 +3185,7 @@ figured bass notation.
   (integer?)
   #:category other
   #:properties ((font-size 0)
-               (thickness 1.6))
+                (thickness 1.6))
   "
 @cindex backslashed digits
 
@@ -3000,8 +3233,8 @@ figured bass notation.
 \\markup { \\eyeglasses }
 @end lilypond"
   (interpret-markup layout props
-    (make-override-markup '(line-cap-style . butt)
-      (make-path-markup 0.15 eyeglassespath))))
+                    (make-override-markup '(line-cap-style . butt)
+                                          (make-path-markup 0.15 eyeglassespath))))
 
 (define-markup-command (left-brace layout props size)
   (number?)
@@ -3020,28 +3253,28 @@ A feta brace in point size @var{size}.
                                   (cons '((font-encoding . fetaBraces)
                                           (font-name . #f))
                                         props)))
-        (glyph-count (1- (ly:otf-glyph-count font)))
+         (glyph-count (1- (ly:otf-glyph-count font)))
          (scale (ly:output-def-lookup layout 'output-scale))
          (scaled-size (/ (ly:pt size) scale))
          (glyph (lambda (n)
                   (ly:font-get-glyph font (string-append "brace"
-                                                        (number->string n)))))
-        (get-y-from-brace (lambda (brace)
-                            (interval-length
-                             (ly:stencil-extent (glyph brace) Y))))
+                                                         (number->string n)))))
+         (get-y-from-brace (lambda (brace)
+                             (interval-length
+                              (ly:stencil-extent (glyph brace) Y))))
          (find-brace (binary-search 0 glyph-count get-y-from-brace scaled-size))
          (glyph-found (glyph find-brace)))
 
     (if (or (null? (ly:stencil-expr glyph-found))
-           (< scaled-size (interval-length (ly:stencil-extent (glyph 0) Y)))
-           (> scaled-size (interval-length
-                           (ly:stencil-extent (glyph glyph-count) Y))))
+            (< scaled-size (interval-length (ly:stencil-extent (glyph 0) Y)))
+            (> scaled-size (interval-length
+                            (ly:stencil-extent (glyph glyph-count) Y))))
         (begin
           (ly:warning (_ "no brace found for point size ~S ") size)
           (ly:warning (_ "defaulting to ~S pt")
-                     (/ (* scale (interval-length
-                                  (ly:stencil-extent glyph-found Y)))
-                        (ly:pt 1)))))
+                      (/ (* scale (interval-length
+                                   (ly:stencil-extent glyph-found Y)))
+                         (ly:pt 1)))))
     glyph-found))
 
 (define-markup-command (right-brace layout props size)
@@ -3069,12 +3302,16 @@ A feta brace in point size @var{size}, rotated 180 degrees.
   (number? number? number?)
   #:category music
   #:properties ((font-size 0)
-               (style '()))
+                (flag-style '())
+                (style '()))
   "
 @cindex notes within text by log and dot-count
 
-Construct a note symbol, with stem.  By using fractional values for
+Construct a note symbol, with stem and flag.  By using fractional values for
 @var{dir}, longer or shorter stems can be obtained.
+Supports all note-head-styles.
+Supported flag-styles are @code{default}, @code{old-straight-flag},
+@code{modern-straight-flag} and @code{flat-flag}.
 
 @lilypond[verbatim,quote]
 \\markup {
@@ -3085,56 +3322,124 @@ Construct a note symbol, with stem.  By using fractional values for
 @end lilypond"
   (define (get-glyph-name-candidates dir log style)
     (map (lambda (dir-name)
-          (format #f "noteheads.~a~a" dir-name
-                  (if (and (symbol? style)
-                           (not (equal? 'default style)))
-                      (select-head-glyph style (min log 2))
-                      (min log 2))))
-        (list (if (= dir UP) "u" "d")
-              "s")))
+           (format #f "noteheads.~a~a" dir-name
+                   (if (and (symbol? style)
+                            (not (equal? 'default style)))
+                       (select-head-glyph style (min log 2))
+                       (min log 2))))
+         (list (if (= dir UP) "u" "d")
+               "s")))
 
   (define (get-glyph-name font cands)
     (if (null? cands)
-       ""
-       (if (ly:stencil-empty? (ly:font-get-glyph font (car cands)))
-           (get-glyph-name font (cdr cands))
-           (car cands))))
+        ""
+        (if (ly:stencil-empty? (ly:font-get-glyph font (car cands)))
+            (get-glyph-name font (cdr cands))
+            (car cands))))
+
+  (define (buildflags flag-stencil remain curr-stencil spacing)
+    ;; Function to recursively create a stencil with @code{remain} flags
+    ;; from the single-flag stencil @code{curr-stencil}, which is already
+    ;; translated to the position of the previous flag position.
+    ;;
+    ;; Copy and paste from /scm/flag-styles.scm
+    (if (> remain 0)
+        (let* ((translated-stencil
+                (ly:stencil-translate-axis curr-stencil spacing Y))
+               (new-stencil (ly:stencil-add flag-stencil translated-stencil)))
+          (buildflags new-stencil (- remain 1) translated-stencil spacing))
+        flag-stencil))
+
+  (define (straight-flag-mrkp flag-thickness flag-spacing
+                              upflag-angle upflag-length
+                              downflag-angle downflag-length
+                              dir)
+    ;; Create a stencil for a straight flag.  @var{flag-thickness} and
+    ;; @var{flag-spacing} are given in staff spaces, @var{upflag-angle} and
+    ;; @var{downflag-angle} are given in degrees, and @var{upflag-length} and
+    ;; @var{downflag-length} are given in staff spaces.
+    ;;
+    ;; All lengths are scaled according to the font size of the note.
+    ;;
+    ;; From /scm/flag-styles.scm, modified to fit here.
+
+    (let* ((stem-up (> dir 0))
+           ;; scale with the note size
+           (factor (magstep font-size))
+           (stem-thickness (* factor 0.1))
+           (line-thickness (ly:output-def-lookup layout 'line-thickness))
+           (half-stem-thickness (/ (* stem-thickness line-thickness) 2))
+           (raw-length (if stem-up upflag-length downflag-length))
+           (angle (if stem-up upflag-angle downflag-angle))
+           (flag-length (+ (* raw-length factor) half-stem-thickness))
+           (flag-end (if (= angle 0)
+                         (cons flag-length (* half-stem-thickness dir))
+                         (polar->rectangular flag-length angle)))
+           (thickness (* flag-thickness factor))
+           (thickness-offset (cons 0 (* -1 thickness dir)))
+           (spacing (* -1 flag-spacing factor dir))
+           (start (cons (- half-stem-thickness) (* half-stem-thickness dir)))
+           ;; The points of a round-filled-polygon need to be given in
+           ;; clockwise order, otherwise the polygon will be enlarged by
+           ;; blot-size*2!
+           (points (if stem-up
+                       (list start
+                             flag-end
+                             (offset-add flag-end thickness-offset)
+                             (offset-add start thickness-offset))
+                       (list start
+                             (offset-add start thickness-offset)
+                             (offset-add flag-end thickness-offset)
+                             flag-end)))
+           (stencil (ly:round-filled-polygon points half-stem-thickness))
+           ;; Log for 1/8 is 3, so we need to subtract 3
+           (flag-stencil (buildflags stencil (- log 3) stencil spacing)))
+      flag-stencil))
 
   (let* ((font (ly:paper-get-font layout (cons '((font-encoding . fetaMusic))
-                                              props)))
-        (size-factor (magstep font-size))
-         (stem-length (* size-factor (max 3 (- log 1))))
+                                               props)))
+         (size-factor (magstep font-size))
+         (blot (ly:output-def-lookup layout 'blot-diameter))
          (head-glyph-name
-         (let ((result (get-glyph-name font (get-glyph-name-candidates
-                                             (sign dir) log style))))
-           (if (string-null? result)
-               ;; If no glyph name can be found, select default heads.  Though
-               ;; this usually means an unsupported style has been chosen, it
-               ;; also prevents unrelated 'style settings from other grobs
-               ;; (e.g., TextSpanner and TimeSignature) leaking into markup.
-               (get-glyph-name font (get-glyph-name-candidates
-                                     (sign dir) log 'default))
-               result)))
+          (let ((result (get-glyph-name font
+                                        (get-glyph-name-candidates
+                                         (sign dir) log style))))
+            (if (string-null? result)
+                ;; If no glyph name can be found, select default heads.
+                ;; Though this usually means an unsupported style has been
+                ;; chosen, it also prevents unrelated 'style settings from
+                ;; other grobs (e.g., TextSpanner and TimeSignature) leaking
+                ;; into markup.
+                (get-glyph-name font
+                                (get-glyph-name-candidates
+                                 (sign dir) log 'default))
+                result)))
          (head-glyph (ly:font-get-glyph font head-glyph-name))
-        (attach-indices (ly:note-head::stem-attachment font head-glyph-name))
-         (stem-thickness (* size-factor 0.13))
+         (ancient-flags? (or (eq? style 'mensural) (eq? style 'neomensural)))
+         (attach-indices (ly:note-head::stem-attachment font head-glyph-name))
+         (stem-length (* size-factor (max 3 (- log 1))))
+         ;; With ancient-flags we want a tighter stem
+         (stem-thickness (* size-factor (if ancient-flags? 0.1 0.13)))
          (stemy (* dir stem-length))
          (attach-off (cons (interval-index
-                           (ly:stencil-extent head-glyph X)
-                           (* (sign dir) (car attach-indices)))
-                          (* (sign dir) ; fixme, this is inconsistent between X & Y.
-                             (interval-index
-                              (ly:stencil-extent head-glyph Y)
-                              (cdr attach-indices)))))
+                            (ly:stencil-extent head-glyph X)
+                            (* (sign dir) (car attach-indices)))
+                           ;; fixme, this is inconsistent between X & Y.
+                           (* (sign dir)
+                              (interval-index
+                               (ly:stencil-extent head-glyph Y)
+                               (cdr attach-indices)))))
+         ;; For a tighter stem (with ancient-flags) the stem-width has to be
+         ;; adjusted.
+         (stem-X-corr (if ancient-flags? (* 0.5 dir stem-thickness) 0))
          (stem-glyph (and (> log 0)
-                         (ly:round-filled-box
-                          (ordered-cons (car attach-off)
-                                        (+ (car attach-off)
-                                           (* (- (sign dir)) stem-thickness)))
-                          (cons (min stemy (cdr attach-off))
-                                (max stemy (cdr attach-off)))
-                          (/ stem-thickness 3))))
-
+                          (ly:round-filled-box
+                           (ordered-cons (+ stem-X-corr (car attach-off))
+                                         (+ stem-X-corr (car attach-off)
+                                            (* (- (sign dir)) stem-thickness)))
+                           (cons (min stemy (cdr attach-off))
+                                 (max stemy (cdr attach-off)))
+                           (/ stem-thickness 3))))
          (dot (ly:font-get-glyph font "dots.dot"))
          (dotwid (interval-length (ly:stencil-extent dot X)))
          (dots (and (> dot-count 0)
@@ -3143,22 +3448,49 @@ Construct a note symbol, with stem.  By using fractional values for
                                   (ly:stencil-translate-axis
                                    dot (* 2 x dotwid) X))
                                 (iota dot-count)))))
+         ;; Straight-flags. Values taken from /scm/flag-style.scm
+         (modern-straight-flag (straight-flag-mrkp 0.55 1 -18 1.1 22 1.2 dir))
+         (old-straight-flag (straight-flag-mrkp 0.55 1 -45 1.2 45 1.4 dir))
+         (flat-flag (straight-flag-mrkp 0.55 1.0 0 1.0 0 1.0 dir))
+         ;; Calculate a corrective to avoid a gap between
+         ;; straight-flags and the stem.
+         (flag-style-Y-corr (if (or (eq? flag-style 'modern-straight-flag)
+                                    (eq? flag-style 'old-straight-flag)
+                                    (eq? flag-style 'flat-flag))
+                                (/ blot 10 (* -1 dir))
+                                0))
          (flaggl (and (> log 2)
                       (ly:stencil-translate
-                       (ly:font-get-glyph font
-                                         (string-append "flags."
-                                                        (if (> dir 0) "u" "d")
-                                                        (number->string log)))
-                       (cons (+ (car attach-off) (if (< dir 0)
-                                                    stem-thickness 0))
-                            stemy)))))
+                       (cond ((eq? flag-style 'modern-straight-flag)
+                              modern-straight-flag)
+                             ((eq? flag-style 'old-straight-flag)
+                              old-straight-flag)
+                             ((eq? flag-style 'flat-flag)
+                              flat-flag)
+                             (else
+                              (ly:font-get-glyph font
+                                                 (format #f (if ancient-flags?
+                                                                "flags.mensural~a2~a"
+                                                                "flags.~a~a")
+                                                         (if (> dir 0) "u" "d")
+                                                         log))))
+                       (cons (+ (car attach-off)
+                                ;; For tighter stems (with ancient-flags) the
+                                ;; flag has to be adjusted different.
+                                (if (and (not ancient-flags?) (< dir 0))
+                                    stem-thickness
+                                    0))
+                             (+ stemy flag-style-Y-corr))))))
 
     ;; If there is a flag on an upstem and the stem is short, move the dots
     ;; to avoid the flag.  16th notes get a special case because their flags
     ;; hang lower than any other flags.
+    ;; Not with ancient flags or straight-flags.
     (if (and dots (> dir 0) (> log 2)
-            (or (< dir 1.15) (and (= log 4) (< dir 1.3))))
-       (set! dots (ly:stencil-translate-axis dots 0.5 X)))
+             (or (eq? flag-style 'default) (null? flag-style))
+             (not ancient-flags?)
+             (or (< dir 1.15) (and (= log 4) (< dir 1.3))))
+        (set! dots (ly:stencil-translate-axis dots 0.5 X)))
     (if flaggl
         (set! stem-glyph (ly:stencil-add flaggl stem-glyph)))
     (if (ly:stencil? stem-glyph)
@@ -3168,9 +3500,9 @@ Construct a note symbol, with stem.  By using fractional values for
         (set! stem-glyph
               (ly:stencil-add
                (ly:stencil-translate-axis
-               dots
-               (+ (cdr (ly:stencil-extent head-glyph X)) dotwid)
-               X)
+                dots
+                (+ (cdr (ly:stencil-extent head-glyph X)) dotwid)
+                X)
                stem-glyph)))
     stem-glyph))
 
@@ -3182,7 +3514,7 @@ Construct a note symbol, with stem.  By using fractional values for
   "Parse the `duration-string', e.g. ''4..'' or ''breve.'',
 and return a (log dots) list."
   (let ((match (regexp-exec (make-regexp "(breve|longa|maxima|[0-9]+)(\\.*)")
-                           duration-string)))
+                            duration-string)))
     (if (and match (string=? duration-string (match:substring match 0)))
         (let ((len (match:substring match 1))
               (dots (match:substring match 2)))
@@ -3217,6 +3549,287 @@ a shortened down stem.
   (let ((parsed (parse-simple-duration duration)))
     (note-by-number-markup layout props (car parsed) (cadr parsed) dir)))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; the rest command.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(define-markup-command (rest-by-number layout props log dot-count)
+  (number? number?)
+  #:category music
+  #:properties ((font-size 0)
+                (style '())
+                (multi-measure-rest #f))
+  "
+@cindex rests or multi-measure-rests within text by log and dot-count
+
+A rest or multi-measure-rest symbol.
+
+@lilypond[verbatim,quote]
+\\markup {
+  \\rest-by-number #3 #2
+  \\hspace #2
+  \\rest-by-number #0 #1
+  \\hspace #2
+  \\override #'(multi-measure-rest . #t)
+  \\rest-by-number #0 #0
+}
+@end lilypond"
+
+  (define (get-glyph-name-candidates log style)
+    (let* (;; Choose the style-string to be added.
+           ;; If no glyph exists, select others for the specified styles
+           ;; otherwise defaulting.
+           (style-strg
+            (cond (
+                   ;; 'baroque needs to be special-cased, otherwise
+                   ;; `select-head-glyph´ would catch neomensural-glyphs for
+                   ;; this style, if (< log 0).
+                   (eq? style 'baroque)
+                   (string-append (number->string log) ""))
+                  ((eq? style 'petrucci)
+                   (string-append (number->string log) "mensural"))
+                  ;; In other cases `select-head-glyph´ from output-lib.scm
+                  ;; works for rest-glyphs, too.
+                  ((and (symbol? style) (not (eq? style 'default)))
+                   (select-head-glyph style log))
+                  (else log)))
+           ;; Choose ledgered glyphs for whole and half rest.
+           ;; Except for the specified styles, logs and MultiMeasureRests.
+           (ledger-style-rests
+            (if (and (or (list? style)
+                         (not (member style
+                                      '(neomensural mensural petrucci))))
+                     (not multi-measure-rest)
+                     (or (= log 0) (= log 1)))
+                "o"
+                "")))
+      (format #f "rests.~a~a" style-strg ledger-style-rests)))
+
+  (define (get-glyph-name font cands)
+    (if (ly:stencil-empty? (ly:font-get-glyph font cands))
+        ""
+        cands))
+
+  (let* ((font
+          (ly:paper-get-font layout
+                             (cons '((font-encoding . fetaMusic)) props)))
+         (rest-glyph-name
+          (let ((result
+                 (get-glyph-name font
+                                 (get-glyph-name-candidates log style))))
+            (if (string-null? result)
+                ;; If no glyph name can be found, select default rests.  Though
+                ;; this usually means an unsupported style has been chosen, it
+                ;; also prevents unrelated 'style settings from other grobs
+                ;; (e.g., TextSpanner and TimeSignature) leaking into markup.
+                (get-glyph-name font (get-glyph-name-candidates log 'default))
+                result)))
+         (rest-glyph (ly:font-get-glyph font rest-glyph-name))
+         (dot (ly:font-get-glyph font "dots.dot"))
+         (dot-width (interval-length (ly:stencil-extent dot X)))
+         (dots (and (> dot-count 0)
+                    (apply ly:stencil-add
+                           (map (lambda (x)
+                                  (ly:stencil-translate-axis
+                                   dot (* 2 x dot-width) X))
+                                (iota dot-count))))))
+
+    ;; Apart from mensural-, neomensural- and petrucci-style ledgered
+    ;; glyphs are taken for whole and half rests.
+    ;; If they are dotted, move the dots in X-direction to avoid collision.
+    (if (and dots
+             (< log 2)
+             (>= log 0)
+             (not (member style '(neomensural mensural petrucci))))
+        (set! dots (ly:stencil-translate-axis dots dot-width X)))
+
+    ;; Add dots to the rest-glyph.
+    ;;
+    ;; Not sure how to vertical align dots.
+    ;; For now the dots are centered for half, whole or longer rests.
+    ;; Otherwise placed near the top of the rest.
+    ;;
+    ;; Dots for rests with (< log 0) dots are allowed, but not
+    ;; if multi-measure-rest is set #t.
+    (if (and (not multi-measure-rest) dots)
+        (set! rest-glyph
+              (ly:stencil-add
+               (ly:stencil-translate
+                dots
+                (cons
+                 (+ (cdr (ly:stencil-extent rest-glyph X)) dot-width)
+                 (if (< log 2)
+                     (interval-center (ly:stencil-extent rest-glyph Y))
+                     (- (interval-end (ly:stencil-extent rest-glyph Y))
+                        (/ (* 2 dot-width) 3)))))
+               rest-glyph)))
+    rest-glyph))
+
+(define-markup-command (rest layout props duration)
+  (string?)
+  #:category music
+  #:properties ((style '())
+                (multi-measure-rest #f)
+                (multi-measure-rest-number #t)
+                (word-space 0.6))
+  "
+@cindex rests or multi-measure-rests within text by string
+
+This produces a rest, with the @var{duration} for the rest type and
+augmentation dots.
+@code{\"breve\"}, @code{\"longa\"} and @code{\"maxima\"} are valid
+input-strings.
+
+Printing MultiMeasureRests could be enabled with
+@code{\\override #'(multi-measure-rest . #t)}
+If MultiMeasureRests are taken, the MultiMeasureRestNumber is printed above.
+This is enabled for all styles using default-glyphs.
+Could be disabled with @code{\\override #'(multi-measure-rest-number . #f)}
+
+@lilypond[verbatim,quote]
+\\markup {
+  \\rest #\"4..\"
+  \\hspace #2
+  \\rest #\"breve\"
+  \\hspace #2
+  \\override #'(multi-measure-rest . #t)
+  {
+  \\rest #\"7\"
+  \\hspace #2
+  \\override #'(multi-measure-rest-number . #f)
+  \\rest #\"7\"
+  }
+}
+@end lilypond"
+  ;; Get the number of mmr-glyphs.
+  ;; Store them in a list.
+  ;; example: (mmr-numbers 25) -> '(3 0 0 1)
+  (define (mmr-numbers nmbr)
+    (let* ((8-bar-glyph (floor (/ nmbr 8)))
+           (8-remainder (remainder nmbr 8))
+           (4-bar-glyph (floor (/ 8-remainder 4)))
+           (4-remainder (remainder nmbr 4))
+           (2-bar-glyph (floor (/ 4-remainder 2)))
+           (2-remainder (remainder 4-remainder 2))
+           (1-bar-glyph (floor (/ 2-remainder 1))))
+      (list 8-bar-glyph 4-bar-glyph 2-bar-glyph 1-bar-glyph)))
+
+  ;; Get the correct mmr-glyphs.
+  ;; Store them in a list.
+  ;; example:
+  ;; (get-mmr-glyphs '(1 0 1 0) '("rests.M3" "rests.M2" "rests.M1" "rests.0"))
+  ;; -> ("rests.M3" "rests.M1")
+  (define (get-mmr-glyphs lst1 lst2)
+    (define (helper l1 l2 l3)
+      (if (null? l1)
+          (reverse l3)
+          (helper (cdr l1)
+                  (cdr l2)
+                  (append (make-list (car l1) (car l2)) l3))))
+    (helper lst1 lst2 '()))
+
+  ;; If duration is not valid, print a warning and return empty-stencil
+  (if (or (and (not (integer? (car (parse-simple-duration duration))))
+               (not multi-measure-rest))
+          (and (= (string-length (car (string-split duration #\. ))) 1)
+               (= (string->number (car (string-split duration #\. ))) 0)))
+      (begin
+        (ly:warning (_ "not a valid duration string: ~a - ignoring") duration)
+        empty-stencil)
+      (let* (
+             ;; For simple rests:
+             ;; Get a (log dots) list.
+             (parsed (parse-simple-duration duration))
+             ;; Create the rest-stencil
+             (stil
+              (rest-by-number-markup layout props (car parsed) (cadr parsed)))
+             ;; For MultiMeasureRests:
+             ;; Get the duration-part of duration
+             (dur-part-string (car (string-split duration #\. )))
+             ;; Get the duration of MMR:
+             ;; If not a number (eg. "maxima") calculate it.
+             (mmr-duration
+              (or (string->number dur-part-string) (expt 2 (abs (car parsed)))))
+             ;; Get a list of the correct number of each mmr-glyph.
+             (count-mmr-glyphs-list (mmr-numbers mmr-duration))
+             ;; Create a list of mmr-stencils,
+             ;; translating the glyph for a whole rest.
+             (mmr-stils-list
+              (map
+               (lambda (x)
+                 (let ((single-mmr-stil
+                        (rest-by-number-markup layout props (* -1 x) 0)))
+                   (if (= x 0)
+                       (ly:stencil-translate-axis
+                        single-mmr-stil
+                        ;; Ugh, hard-coded, why 1?
+                        1
+                        Y)
+                       single-mmr-stil)))
+               (get-mmr-glyphs count-mmr-glyphs-list (reverse (iota 4)))))
+             ;; Adjust the space between the mmr-glyphs,
+             ;; if not default-glyphs are used.
+             (word-space (if (member style
+                                     '(neomensural mensural petrucci))
+                             (/ (* word-space 2) 3)
+                             word-space))
+             ;; Create the final mmr-stencil
+             ;; via `stack-stencil-line´ from /scm/markup.scm
+             (mmr-stil (stack-stencil-line word-space mmr-stils-list)))
+
+        ;; Print the number above a multi-measure-rest
+        ;; Depends on duration, style and multi-measure-rest-number set #t
+        (if (and multi-measure-rest
+                 multi-measure-rest-number
+                 (> mmr-duration 1)
+                 (not (member style '(neomensural mensural petrucci))))
+            (let* ((mmr-stil-x-center
+                    (interval-center (ly:stencil-extent mmr-stil X)))
+                   (duration-markup
+                    (markup
+                     #:fontsize -2
+                     #:override '(font-encoding . fetaText)
+                     (number->string mmr-duration)))
+                   (mmr-number-stil
+                    (interpret-markup layout props duration-markup))
+                   (mmr-number-stil-x-center
+                    (interval-center (ly:stencil-extent mmr-number-stil X))))
+
+              (set! mmr-stil (ly:stencil-combine-at-edge
+                              mmr-stil
+                              Y UP
+                              (ly:stencil-translate-axis
+                               mmr-number-stil
+                               (- mmr-stil-x-center mmr-number-stil-x-center)
+                               X)
+                              ;; Ugh, hardcoded
+                              0.8))))
+        (if multi-measure-rest
+            mmr-stil
+            stil))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; fermata markup
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(define-markup-command (fermata layout props) ()
+  #:category music
+  #:properties ((direction UP))
+  "Create a fermata glyph.  When @var{direction} is @code{DOWN}, use
+an inverted glyph.  Note that within music, one would usually use the
+@code{\\fermata} articulation instead of a markup.
+
+@lilypond[verbatim,quote]
+ { c1^\\markup \\fermata d1_\\markup \\fermata }
+
+\\markup { \\fermata \\override #`(direction . ,DOWN) \\fermata }
+@end lilypond
+"
+  (interpret-markup layout props
+                    (if (eqv? direction DOWN)
+                        (markup #:musicglyph "scripts.dfermata")
+                        (markup #:musicglyph "scripts.ufermata"))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; translating.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -3239,7 +3852,7 @@ A negative @var{amount} indicates raising; see also @code{\\raise}.
 }
 @end lilypond"
   (ly:stencil-translate-axis (interpret-markup layout props arg)
-                            (- amount) Y))
+                             (- amount) Y))
 
 (define-markup-command (translate-scaled layout props offset arg)
   (number-pair? markup?)
@@ -3326,9 +3939,9 @@ Make a fraction of two markups.
            ;; should stack mols separately, to maintain LINE on baseline
            (stack (stack-lines DOWN padding baseline (list m1 line m2))))
       (set! stack
-           (ly:stencil-aligned-to stack Y CENTER))
+            (ly:stencil-aligned-to stack Y CENTER))
       (set! stack
-           (ly:stencil-aligned-to stack X LEFT))
+            (ly:stencil-aligned-to stack X LEFT))
       ;; should have EX dimension
       ;; empirical anyway
       (ly:stencil-translate-axis stack offset Y))))
@@ -3358,7 +3971,7 @@ Set @var{arg} in superscript with a normal font size.
   (markup?)
   #:category font
   #:properties ((font-size 0)
-               (baseline-skip))
+                (baseline-skip))
   "
 @cindex superscript text
 
@@ -3399,13 +4012,13 @@ is a pair of numbers representing the displacement in the X and Y axis.
 }
 @end lilypond"
   (ly:stencil-translate (interpret-markup layout props arg)
-                       offset))
+                        offset))
 
 (define-markup-command (sub layout props arg)
   (markup?)
   #:category font
   #:properties ((font-size 0)
-               (baseline-skip))
+                (baseline-skip))
   "
 @cindex subscript text
 
@@ -3500,10 +4113,10 @@ Draw vertical brackets around @var{arg}.
   (markup?)
   #:category graphic
   #:properties ((angularity 0)
-               (padding)
-               (size 1)
-               (thickness 1)
-               (width 0.25))
+                (padding)
+                (size 1)
+                (thickness 1)
+                (width 0.25))
   "
 @cindex placing parentheses around text
 
@@ -3531,14 +4144,14 @@ a column containing several lines of text.
 }
 @end lilypond"
   (let* ((markup (interpret-markup layout props arg))
-        (scaled-width (* size width))
-        (scaled-thickness
-         (* (chain-assoc-get 'line-thickness props 0.1)
-            thickness))
-        (half-thickness
-         (min (* size 0.5 scaled-thickness)
-              (* (/ 4 3.0) scaled-width)))
-        (padding (chain-assoc-get 'padding props half-thickness)))
+         (scaled-width (* size width))
+         (scaled-thickness
+          (* (chain-assoc-get 'line-thickness props 0.1)
+             thickness))
+         (half-thickness
+          (min (* size 0.5 scaled-thickness)
+               (* (/ 4 3.0) scaled-width)))
+         (padding (chain-assoc-get 'padding props half-thickness)))
     (parenthesize-stencil
      markup half-thickness scaled-width angularity padding)))
 
@@ -3558,21 +4171,23 @@ page (using the @code{\\label} command), @var{gauge} a markup used to estimate
 the maximum width of the page number, and @var{default} the value to display
 when @var{label} is not found."
   (let* ((gauge-stencil (interpret-markup layout props gauge))
-        (x-ext (ly:stencil-extent gauge-stencil X))
-        (y-ext (ly:stencil-extent gauge-stencil Y)))
+         (x-ext (ly:stencil-extent gauge-stencil X))
+         (y-ext (ly:stencil-extent gauge-stencil Y)))
+   (ly:stencil-add
+    (make-transparent-box-stencil x-ext y-ext))
     (ly:make-stencil
      `(delay-stencil-evaluation
        ,(delay (ly:stencil-expr
-               (let* ((table (ly:output-def-lookup layout 'label-page-table))
-                      (page-number (if (list? table)
-                                       (assoc-get label table)
-                                       #f))
-                      (page-markup (if page-number (format #f "~a" page-number) default))
-                      (page-stencil (interpret-markup layout props page-markup))
-                      (gap (- (interval-length x-ext)
-                              (interval-length (ly:stencil-extent page-stencil X)))))
-                 (interpret-markup layout props
-                                   (markup #:concat (#:hspace gap page-markup)))))))
+                (let* ((table (ly:output-def-lookup layout 'label-page-table))
+                       (page-number (if (list? table)
+                                        (assoc-get label table)
+                                        #f))
+                       (page-markup (if page-number (format #f "~a" page-number) default))
+                       (page-stencil (interpret-markup layout props page-markup))
+                       (gap (- (interval-length x-ext)
+                               (interval-length (ly:stencil-extent page-stencil X)))))
+                  (interpret-markup layout props
+                                    (markup #:hspace gap page-markup))))))
      x-ext
      y-ext)))
 
@@ -3602,8 +4217,8 @@ Negative values may be used to produce mirror images.
 }
 @end lilypond"
   (let ((stil (interpret-markup layout props arg))
-       (sx (car factor-pair))
-       (sy (cdr factor-pair)))
+        (sx (car factor-pair))
+        (sy (cdr factor-pair)))
     (ly:stencil-scale stil sx sy)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -3628,20 +4243,20 @@ Patterns are distributed on @var{axis}.
 }
 @end lilypond"
   (let ((pattern-width (interval-length
-                         (ly:stencil-extent (interpret-markup layout props pattern) X)))
+                        (ly:stencil-extent (interpret-markup layout props pattern) X)))
         (new-props (prepend-alist-chain 'word-space 0 (prepend-alist-chain 'baseline-skip 0 props))))
     (let loop ((i (1- count)) (patterns (markup)))
       (if (zero? i)
           (interpret-markup
-            layout
-            new-props
-            (if (= axis X)
-                (markup patterns pattern)
-                (markup #:column (patterns pattern))))
+           layout
+           new-props
+           (if (= axis X)
+               (markup patterns pattern)
+               (markup #:column (patterns pattern))))
           (loop (1- i)
-            (if (= axis X)
-                (markup patterns pattern #:hspace space)
-                (markup #:column (patterns pattern #:vspace space))))))))
+                (if (= axis X)
+                    (markup patterns pattern #:hspace space)
+                    (markup #:column (patterns pattern #:vspace space))))))))
 
 (define-markup-command (fill-with-pattern layout props space dir pattern left right)
   (number? ly:dir? markup? markup? markup?)
@@ -3713,29 +4328,29 @@ The @code{key} is the string to be replaced by the @code{value} string.
 
 (define-public (space-lines baseline stils)
   (let space-stil ((stils stils)
-                  (result (list)))
+                   (result (list)))
     (if (null? stils)
-       (reverse! result)
-       (let* ((stil (car stils))
-              (dy-top (max (- (/ baseline 1.5)
-                              (interval-bound (ly:stencil-extent stil Y) UP))
-                           0.0))
-              (dy-bottom (max (+ (/ baseline 3.0)
-                                 (interval-bound (ly:stencil-extent stil Y) DOWN))
-                              0.0))
-              (new-stil (ly:make-stencil
-                         (ly:stencil-expr stil)
-                         (ly:stencil-extent stil X)
-                         (cons (- (interval-bound (ly:stencil-extent stil Y) DOWN)
-                                  dy-bottom)
-                               (+ (interval-bound (ly:stencil-extent stil Y) UP)
-                                  dy-top)))))
-         (space-stil (cdr stils) (cons new-stil result))))))
+        (reverse! result)
+        (let* ((stil (car stils))
+               (dy-top (max (- (/ baseline 1.5)
+                               (interval-bound (ly:stencil-extent stil Y) UP))
+                            0.0))
+               (dy-bottom (max (+ (/ baseline 3.0)
+                                  (interval-bound (ly:stencil-extent stil Y) DOWN))
+                               0.0))
+               (new-stil (ly:make-stencil
+                          (ly:stencil-expr stil)
+                          (ly:stencil-extent stil X)
+                          (cons (- (interval-bound (ly:stencil-extent stil Y) DOWN)
+                                   dy-bottom)
+                                (+ (interval-bound (ly:stencil-extent stil Y) UP)
+                                   dy-top)))))
+          (space-stil (cdr stils) (cons new-stil result))))))
 
 (define-markup-list-command (justified-lines layout props args)
   (markup-list?)
   #:properties ((baseline-skip)
-               wordwrap-internal-markup-list)
+                wordwrap-internal-markup-list)
   "
 @cindex justifying lines of text
 
@@ -3749,7 +4364,7 @@ Use @code{\\override-lines #'(line-width . @var{X})} to set the line width;
 (define-markup-list-command (wordwrap-lines layout props args)
   (markup-list?)
   #:properties ((baseline-skip)
-               wordwrap-internal-markup-list)
+                wordwrap-internal-markup-list)
   "Like @code{\\wordwrap}, but return a list of lines instead of a single markup.
 Use @code{\\override-lines #'(line-width . @var{X})} to set the line width,
 where @var{X} is the number of staff spaces."
@@ -3763,9 +4378,46 @@ where @var{X} is the number of staff spaces."
   "Like @code{\\column}, but return a list of lines instead of a single markup.
 @code{baseline-skip} determines the space between each markup in @var{args}."
   (space-lines baseline-skip
-              (interpret-markup-list layout props args)))
+               (interpret-markup-list layout props args)))
 
 (define-markup-list-command (override-lines layout props new-prop args)
   (pair? markup-list?)
   "Like @code{\\override}, for markup lists."
   (interpret-markup-list layout (cons (list new-prop) props) args))
+
+(define-markup-list-command (map-markup-commands layout props compose args)
+  (procedure? markup-list?)
+  "This applies the function @var{compose} to every markup in
+@var{args} (including elements of markup list command calls) in order
+to produce a new markup list.  Since the return value from a markup
+list command call is not a markup list but rather a list of stencils,
+this requires passing those stencils off as the results of individual
+markup calls.  That way, the results should work out as long as no
+markups rely on side effects."
+  (let ((key (make-symbol "key")))
+    (catch
+     key
+     (lambda ()
+       ;; if `compose' does not actually interpret its markup
+       ;; argument, we still need to return a list of stencils,
+       ;; created from the single returned stencil
+       (list
+        (interpret-markup layout props
+                          (compose
+                           (make-on-the-fly-markup
+                            (lambda (layout props m)
+                              ;; here all effects of `compose' on the
+                              ;; properties should be visible, so we
+                              ;; call interpret-markup-list at this
+                              ;; point of time and harvest its
+                              ;; stencils
+                              (throw key
+                                     (interpret-markup-list
+                                      layout props args)))
+                            (make-null-markup))))))
+     (lambda (key stencils)
+       (map
+        (lambda (sten)
+          (interpret-markup layout props
+                            (compose (make-stencil-markup sten))))
+        stencils)))))
index de442ba6d643ff9832f6c879b2eb81b0030169ed..42aaf58ace30842dc9029a51c40cf3b21911f8b9 100644 (file)
@@ -1,7 +1,7 @@
 ;;;; This file is part of LilyPond, the GNU music typesetter.
 ;;;;
 ;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-;;;;                Jan Nieuwenhuizen <janneke@gnu.org>
+;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;;                 Neil Puttock <n.puttock@gmail.com>
 ;;;;                 Carl Sorensen <c_sorensen@byu.edu>
 ;;;;
   "Generate events for multimeasure rests,
 to be used by the sequential-iterator"
   (let ((location (ly:music-property music 'origin))
-       (duration (ly:music-property music 'duration)))
+        (duration (ly:music-property music 'duration)))
     (list (make-music 'BarCheck
-                     'origin location)
-         (make-event-chord (cons (make-music 'MultiMeasureRestEvent
-                                             'origin location
-                                             'duration duration)
-                                 (ly:music-property music 'articulations)))
-         (make-music 'BarCheck
-                     'origin location))))
+                      'origin location)
+          (make-event-chord (cons (make-music 'MultiMeasureRestEvent
+                                              'origin location
+                                              'duration duration)
+                                  (ly:music-property music 'articulations)))
+          (make-music 'BarCheck
+                      'origin location))))
 
 (define (make-volta-set music)
   (let* ((alts (ly:music-property music 'elements))
@@ -40,25 +40,25 @@ to be used by the sequential-iterator"
          (times (ly:music-property music 'repeat-count)))
     (map (lambda (x y)
            (make-music
-             'SequentialMusic
-             'elements
-               ;; set properties for proper bar numbering
-               (append
+            'SequentialMusic
+            'elements
+            ;; set properties for proper bar numbering
+            (append
+             (list (make-music 'AlternativeEvent
+                               'alternative-dir (if (= y 0)
+                                                    -1
+                                                    0)
+                               'alternative-increment
+                               (if (= 0 y)
+                                   (1+ (- times
+                                          lalts))
+                                   1)))
+             (list x)
+             (if (= y (1- lalts))
                  (list (make-music 'AlternativeEvent
-                                   'alternative-dir (if (= y 0)
-                                                        -1
-                                                        0)
-                                   'alternative-increment
-                                     (if (= 0 y)
-                                         (1+ (- times
-                                                lalts))
-                                             1)))
-                       (list x)
-                       (if (= y (1- lalts))
-                           (list (make-music 'AlternativeEvent
-                                             'alternative-dir 1
-                                             'alternative-increment 0))
-                           '()))))
+                                   'alternative-dir 1
+                                   'alternative-increment 0))
+                 '()))))
          alts
          (iota lalts))))
 
@@ -67,18 +67,18 @@ to be used by the sequential-iterator"
   (let ((octavation (ly:music-property music 'ottava-number)))
 
     (list (context-spec-music
-          (make-apply-context
-           (lambda (context)
-             (let ((offset (* -7 octavation))
-                   (string (assoc-get octavation '((2 . "15ma")
-                                                   (1 . "8va")
-                                                   (0 . #f)
-                                                   (-1 . "8vb")
-                                                   (-2 . "15mb")))))
-               (set! (ly:context-property context 'middleCOffset) offset)
-               (set! (ly:context-property context 'ottavation) string)
-               (ly:set-middle-C! context))))
-          'Staff))))
+           (make-apply-context
+            (lambda (context)
+              (let ((offset (* -7 octavation))
+                    (string (assoc-get octavation '((2 . "15ma")
+                                                    (1 . "8va")
+                                                    (0 . #f)
+                                                    (-1 . "8vb")
+                                                    (-2 . "15mb")))))
+                (set! (ly:context-property context 'middleCOffset) offset)
+                (set! (ly:context-property context 'ottavation) string)
+                (ly:set-middle-C! context))))
+           'Staff))))
 
 (define (make-time-signature-set music)
   "Set context properties for a time signature."
@@ -87,31 +87,31 @@ to be used by the sequential-iterator"
          (structure (ly:music-property music 'beat-structure))
          (fraction (cons num den)))
     (list (descend-to-context
-            (context-spec-music
-              (make-apply-context
-                (lambda (context)
-                  (let* ((time-signature-settings
-                          (ly:context-property context 'timeSignatureSettings))
-                         (my-base-fraction
-                           (base-fraction fraction time-signature-settings))
-                         (my-beat-structure
-                           (if (null? structure)
-                               (beat-structure my-base-fraction
-                                               fraction
-                                               time-signature-settings)
-                               structure))
-                         (beaming-exception
-                           (beam-exceptions fraction time-signature-settings))
-                         (new-measure-length (ly:make-moment num den)))
-                     (ly:context-set-property!
-                       context 'timeSignatureFraction fraction)
-                     (ly:context-set-property!
-                       context 'baseMoment (fraction->moment my-base-fraction))
-                     (ly:context-set-property!
-                       context 'beatStructure my-beat-structure)
-                     (ly:context-set-property!
-                       context 'beamExceptions beaming-exception)
-                     (ly:context-set-property!
-                       context 'measureLength new-measure-length))))
-                'Timing)
-            'Score))))
+           (context-spec-music
+            (make-apply-context
+             (lambda (context)
+               (let* ((time-signature-settings
+                       (ly:context-property context 'timeSignatureSettings))
+                      (my-base-length
+                       (base-length fraction time-signature-settings))
+                      (my-beat-structure
+                       (if (null? structure)
+                           (beat-structure my-base-length
+                                           fraction
+                                           time-signature-settings)
+                           structure))
+                      (beaming-exception
+                       (beam-exceptions fraction time-signature-settings))
+                      (new-measure-length (ly:make-moment num den)))
+                 (ly:context-set-property!
+                  context 'timeSignatureFraction fraction)
+                 (ly:context-set-property!
+                  context 'baseMoment (ly:make-moment my-base-length))
+                 (ly:context-set-property!
+                  context 'beatStructure my-beat-structure)
+                 (ly:context-set-property!
+                  context 'beamExceptions beaming-exception)
+                 (ly:context-set-property!
+                  context 'measureLength new-measure-length))))
+            'Timing)
+           'Score))))
index 9631da734ddd6ad0d6e3389ec2fb5683b9b5a10f..fd759d52d154cae4c76e326fe09f7ea3303bcc77 100644 (file)
   (cond ((or (number? scm-arg)
              (string? scm-arg)
              (boolean? scm-arg))
-        (format #f "~s" scm-arg))
-       ((or (symbol? scm-arg)
-            (list? scm-arg))
-        (format #f "'~s" scm-arg))
-       ((procedure? scm-arg)
-        (format #f "~a"
-                (or (procedure-name scm-arg)
-                    (with-output-to-string
-                      (lambda ()
-                        (pretty-print (procedure-source scm-arg)))))))
-       (else
-        (format #f "~a"
-                (with-output-to-string
-                  (lambda ()
-                    (display-scheme-music scm-arg)))))))
+         (format #f "~s" scm-arg))
+        ((or (symbol? scm-arg)
+             (list? scm-arg))
+         (format #f "'~s" scm-arg))
+        ((procedure? scm-arg)
+         (format #f "~a"
+                 (or (procedure-name scm-arg)
+                     (with-output-to-string
+                       (lambda ()
+                         (pretty-print (procedure-source scm-arg)))))))
+        (else
+         (format #f "~a"
+                 (with-output-to-string
+                   (lambda ()
+                     (display-scheme-music scm-arg)))))))
 ;;;
 ;;; Markups
 ;;;
@@ -43,33 +43,33 @@ expression."
   (define (proc->command proc)
     (let ((cmd-markup (symbol->string (procedure-name proc))))
       (substring cmd-markup 0 (- (string-length cmd-markup)
-                                (string-length "-markup")))))
+                                 (string-length "-markup")))))
   (define (arg->string arg)
     (cond ((string? arg)
-          (format #f "~s" arg))
-         ((markup? arg) ;; a markup
-          (markup->lily-string-aux arg))
-         ((and (pair? arg) (every markup? arg)) ;; a markup list
-          (format #f "{~{ ~a~}}" (map-in-order markup->lily-string-aux arg)))
-         (else          ;; a scheme argument
-          (format #f "#~a" (scheme-expr->lily-string arg)))))
+           (format #f "~s" arg))
+          ((markup? arg) ;; a markup
+           (markup->lily-string-aux arg))
+          ((and (pair? arg) (every markup? arg)) ;; a markup list
+           (format #f "{~{ ~a~}}" (map-in-order markup->lily-string-aux arg)))
+          (else          ;; a scheme argument
+           (format #f "#~a" (scheme-expr->lily-string arg)))))
   (define (markup->lily-string-aux expr)
     (if (string? expr)
-       (format #f "~s" expr)
-       (let ((cmd (car expr))
-             (args (cdr expr)))
-         (if (eqv? cmd simple-markup) ;; a simple markup
-             (format #f "~s" (car args))
-             (format #f "\\~a~{ ~a~}"
-                     (proc->command cmd)
-                     (map-in-order arg->string args))))))
+        (format #f "~s" expr)
+        (let ((cmd (car expr))
+              (args (cdr expr)))
+          (if (eqv? cmd simple-markup) ;; a simple markup
+              (format #f "~s" (car args))
+              (format #f "\\~a~{ ~a~}"
+                      (proc->command cmd)
+                      (map-in-order arg->string args))))))
   (cond ((string? markup-expr)
-        (format #f "~s" markup-expr))
-       ((eqv? (car markup-expr) simple-markup)
-        (format #f "~s" (second markup-expr)))
-       (else
-        (format #f "\\markup ~a"
-                (markup->lily-string-aux markup-expr)))))
+         (format #f "~s" markup-expr))
+        ((eqv? (car markup-expr) simple-markup)
+         (format #f "~s" (second markup-expr)))
+        (else
+         (format #f "\\markup ~a"
+                 (markup->lily-string-aux markup-expr)))))
 
 ;;;
 ;;; pitch names
@@ -81,49 +81,49 @@ expression."
        (result #f result))
       ((or result (null? alist)) result)
     (if (and (car alist) (test item (cdar alist)))
-       (set! result (car alist)))))
+        (set! result (car alist)))))
 
 (define-public (note-name->lily-string ly-pitch parser)
   ;; here we define a custom pitch= function, since we do not want to
   ;; test whether octaves are also equal. (otherwise, we would be using equal?)
   (define (pitch= pitch1 pitch2)
     (and (= (ly:pitch-notename pitch1) (ly:pitch-notename pitch2))
-        (= (ly:pitch-alteration pitch1) (ly:pitch-alteration pitch2))))
+         (= (ly:pitch-alteration pitch1) (ly:pitch-alteration pitch2))))
   (let ((result (rassoc ly-pitch (ly:parser-lookup parser 'pitchnames) pitch=)))
     (if result
-       (car result)
-       #f)))
+        (car result)
+        #f)))
 
 (define-public (octave->lily-string pitch)
   (let ((octave (ly:pitch-octave pitch)))
     (cond ((>= octave 0)
-          (make-string (1+ octave) #\'))
-         ((< octave -1)
-          (make-string (1- (* -1 octave)) #\,))
-         (else ""))))
+           (make-string (1+ octave) #\'))
+          ((< octave -1)
+           (make-string (1- (* -1 octave)) #\,))
+          (else ""))))
 
 ;;;
 ;;; durations
 ;;;
 (define*-public (duration->lily-string ly-duration #:key (prev-duration (*previous-duration*))
-                       (force-duration (*force-duration*))
-                       (time-scale (*time-scale*))
-                       remember)
+                                       (force-duration (*force-duration*))
+                                       (time-scale (*time-scale*))
+                                       remember)
   (if remember (*previous-duration* ly-duration))
-  (let ((log2   (ly:duration-log ly-duration))
-       (dots    (ly:duration-dot-count ly-duration))
-       (scale (ly:duration-scale ly-duration)))
+  (let ((log2    (ly:duration-log ly-duration))
+        (dots    (ly:duration-dot-count ly-duration))
+        (scale (ly:duration-scale ly-duration)))
     (if (or force-duration (not prev-duration) (not (equal? ly-duration prev-duration)))
-       (string-append (case log2
-                        ((-1) "\\breve")
-                        ((-2) "\\longa")
-                        ((-3) "\\maxima")
-                        (else (number->string (expt 2 log2))))
-                      (make-string dots #\.)
-                      (let ((end-scale (/ scale time-scale)))
-                        (if (= end-scale 1) ""
-                            (format #f "*~a" end-scale))))
-       "")))
+        (string-append (case log2
+                         ((-1) "\\breve")
+                         ((-2) "\\longa")
+                         ((-3) "\\maxima")
+                         (else (number->string (expt 2 log2))))
+                       (make-string dots #\.)
+                       (let ((end-scale (/ scale time-scale)))
+                         (if (= end-scale 1) ""
+                             (format #f "*~a" end-scale))))
+        "")))
 
 ;;;
 ;;; post events
@@ -135,24 +135,24 @@ expression."
 (define* (event-direction->lily-string event #:optional (required #t))
   (let ((direction (ly:music-property event 'direction)))
     (cond ((or (not direction) (null? direction) (= CENTER direction))
-          (if required "-" ""))
-         ((= UP direction) "^")
-         ((= DOWN direction) "_")
-         (else ""))))
+           (if required "-" ""))
+          ((= UP direction) "^")
+          ((= DOWN direction) "_")
+          (else ""))))
 
 (define-macro (define-post-event-display-method type vars direction-required str)
   `(define-display-method ,type ,vars
      (format #f "~a~a"
-            (event-direction->lily-string ,(car vars) ,direction-required)
-            ,str)))
+             (event-direction->lily-string ,(car vars) ,direction-required)
+             ,str)))
 
 (define-macro (define-span-event-display-method type vars direction-required str-start str-stop)
   `(define-display-method ,type ,vars
      (format #f "~a~a"
-            (event-direction->lily-string ,(car vars) ,direction-required)
-            (if (= START (ly:music-property ,(car vars) 'span-direction))
-                ,str-start
-                ,str-stop))))
+             (event-direction->lily-string ,(car vars) ,direction-required)
+             (if (= START (ly:music-property ,(car vars) 'span-direction))
+                 ,str-start
+                 ,str-stop))))
 
 (define-display-method HyphenEvent (event parser)
   " --")
@@ -169,25 +169,25 @@ expression."
 (define-display-method TremoloEvent (event parser)
   (let ((tremolo-type (ly:music-property event 'tremolo-type)))
     (format #f ":~a" (if (= 0 tremolo-type)
-                        ""
-                        tremolo-type))))
+                         ""
+                         tremolo-type))))
 
 (define-display-method ArticulationEvent (event parser) #t
   (let* ((articulation  (ly:music-property event 'articulation-type))
-        (shorthand
-         (case (string->symbol articulation)
-           ((marcato) "^")
-           ((stopped) "+")
-           ((tenuto)    "-")
-           ((staccatissimo) "|")
-           ((accent) ">")
-           ((staccato) ".")
-           ((portato) "_")
-           (else #f))))
+         (shorthand
+          (case (string->symbol articulation)
+            ((marcato) "^")
+            ((stopped) "+")
+            ((tenuto)    "-")
+            ((staccatissimo) "!")
+            ((accent) ">")
+            ((staccato) ".")
+            ((portato) "_")
+            (else #f))))
     (format #f "~a~:[\\~;~]~a"
-           (event-direction->lily-string event shorthand)
-           shorthand
-           (or shorthand articulation))))
+            (event-direction->lily-string event shorthand)
+            shorthand
+            (or shorthand articulation))))
 
 (define-post-event-display-method FingeringEvent (event parser) #t
   (ly:music-property event 'digit))
@@ -199,7 +199,7 @@ expression."
   (markup->lily-string (ly:music-property event 'text)))
 
 (define-post-event-display-method BendAfterEvent (event parser) #f
-  (format #f "\\bendAfter #~a" (ly:music-property event 'delta-step)))
+  (format #f "\\bendAfter #~a " (ly:music-property event 'delta-step)))
 
 (define-post-event-display-method HarmonicEvent (event parser) #f "\\harmonic")
 (define-post-event-display-method GlissandoEvent (event parser) #f "\\glissando")
@@ -208,7 +208,7 @@ expression."
   (format #f "\\~a" (ly:music-property event 'text)))
 
 (define-post-event-display-method StrokeFingerEvent (event parser) #f
-  (format #f "\\rightHandFinger #~a" (ly:music-property event 'digit)))
+  (format #f "\\rightHandFinger #~a " (ly:music-property event 'digit)))
 
 (define-span-event-display-method BeamEvent (event parser) #f "[" "]")
 (define-span-event-display-method SlurEvent (event parser) #f "(" ")")
@@ -230,7 +230,7 @@ expression."
 
 (define-display-method GraceMusic (expr parser)
   (format #f "\\grace ~a"
-         (music->lily-string (ly:music-property expr 'element) parser)))
+          (music->lily-string (ly:music-property expr 'element) parser)))
 
 ;; \acciaccatura \appoggiatura \grace
 ;; TODO: it would be better to compare ?start and ?stop
@@ -239,92 +239,92 @@ expression."
 (define-extra-display-method GraceMusic (expr parser)
   "Display method for appoggiatura."
   (with-music-match (expr (music
-                          'GraceMusic
-                          element (music
-                                   'SequentialMusic
-                                   elements (?start
-                                             ?music
-                                             ?stop))))
-    ;; we check whether ?start and ?stop look like
-    ;; startAppoggiaturaMusic stopAppoggiaturaMusic
-    (and (with-music-match (?start (music
-                                   'SequentialMusic
-                                   elements ((music
-                                              'EventChord
-                                              elements
-                                              ((music
-                                                'SlurEvent
-                                                span-direction START))))))
-           #t)
-        (with-music-match (?stop (music
-                                  'SequentialMusic
-                                  elements ((music
-                                             'EventChord
-                                             elements
-                                             ((music
-                                               'SlurEvent
-                                               span-direction STOP))))))
-           (format #f "\\appoggiatura ~a" (music->lily-string ?music parser))))))
+                           'GraceMusic
+                           element (music
+                                    'SequentialMusic
+                                    elements (?start
+                                              ?music
+                                              ?stop))))
+                    ;; we check whether ?start and ?stop look like
+                    ;; startAppoggiaturaMusic stopAppoggiaturaMusic
+                    (and (with-music-match (?start (music
+                                                    'SequentialMusic
+                                                    elements ((music
+                                                               'EventChord
+                                                               elements
+                                                               ((music
+                                                                 'SlurEvent
+                                                                 span-direction START))))))
+                                           #t)
+                         (with-music-match (?stop (music
+                                                   'SequentialMusic
+                                                   elements ((music
+                                                              'EventChord
+                                                              elements
+                                                              ((music
+                                                                'SlurEvent
+                                                                span-direction STOP))))))
+                                           (format #f "\\appoggiatura ~a" (music->lily-string ?music parser))))))
 
 
 (define-extra-display-method GraceMusic (expr parser)
   "Display method for acciaccatura."
   (with-music-match (expr (music
-                          'GraceMusic
-                          element (music
-                                   'SequentialMusic
-                                   elements (?start
-                                             ?music
-                                             ?stop))))
-    ;; we check whether ?start and ?stop look like
-    ;; startAcciaccaturaMusic stopAcciaccaturaMusic
-    (and (with-music-match (?start (music
-                                   'SequentialMusic
-                                   elements ((music
-                                              'EventChord
-                                              elements
-                                              ((music
-                                                'SlurEvent
-                                                span-direction START)))
-                                             (music
-                                              'ContextSpeccedMusic
-                                              element (music
-                                                       'OverrideProperty
-                                                       grob-property-path '(stroke-style)
-                                                       grob-value "grace"
-                                                       symbol 'Flag)))))
-          #t)
-        (with-music-match (?stop (music
-                                  'SequentialMusic
-                                  elements ((music
-                                             'ContextSpeccedMusic
-                                             element (music
-                                                      'RevertProperty
-                                                      grob-property-path '(stroke-style)
-                                                      symbol 'Flag))
-
-                                            (music
-                                             'EventChord
-                                             elements
-                                             ((music
-                                               'SlurEvent
-                                               span-direction STOP))))))
-          (format #f "\\acciaccatura ~a" (music->lily-string ?music parser))))))
+                           'GraceMusic
+                           element (music
+                                    'SequentialMusic
+                                    elements (?start
+                                              ?music
+                                              ?stop))))
+                    ;; we check whether ?start and ?stop look like
+                    ;; startAcciaccaturaMusic stopAcciaccaturaMusic
+                    (and (with-music-match (?start (music
+                                                    'SequentialMusic
+                                                    elements ((music
+                                                               'EventChord
+                                                               elements
+                                                               ((music
+                                                                 'SlurEvent
+                                                                 span-direction START)))
+                                                              (music
+                                                               'ContextSpeccedMusic
+                                                               element (music
+                                                                        'OverrideProperty
+                                                                        grob-property-path '(stroke-style)
+                                                                        grob-value "grace"
+                                                                        symbol 'Flag)))))
+                                           #t)
+                         (with-music-match (?stop (music
+                                                   'SequentialMusic
+                                                   elements ((music
+                                                              'ContextSpeccedMusic
+                                                              element (music
+                                                                       'RevertProperty
+                                                                       grob-property-path '(stroke-style)
+                                                                       symbol 'Flag))
+
+                                                             (music
+                                                              'EventChord
+                                                              elements
+                                                              ((music
+                                                                'SlurEvent
+                                                                span-direction STOP))))))
+                                           (format #f "\\acciaccatura ~a" (music->lily-string ?music parser))))))
 
 (define-extra-display-method GraceMusic (expr parser)
   "Display method for grace."
   (with-music-match (expr (music
-                          'GraceMusic
-                          element (music
-                                   'SequentialMusic
-                                   elements (?start
-                                             ?music
-                                             ?stop))))
-    ;; we check whether ?start and ?stop look like
-    ;; startGraceMusic stopGraceMusic
-    (and (null? (ly:music-property ?start 'elements))
-        (null? (ly:music-property ?stop 'elements))
-        (format #f "\\grace ~a" (music->lily-string ?music parser)))))
+                           'GraceMusic
+                           element (music
+                                    'SequentialMusic
+                                    elements (?start
+                                              ?music
+                                              ?stop))))
+                    ;; we check whether ?start and ?stop look like
+                    ;; startGraceMusic stopGraceMusic
+                    (and (null? (ly:music-property ?start 'elements))
+                         (null? (ly:music-property ?stop 'elements))
+                         (format #f "\\grace ~a" (music->lily-string ?music parser)))))
 
 ;;;
 ;;; Music sequences
@@ -332,79 +332,79 @@ expression."
 
 (define-display-method SequentialMusic (seq parser)
   (let ((force-line-break (and (*force-line-break*)
-                              ;; hm
-                              (> (length (ly:music-property seq 'elements))
-                                 (*max-element-number-before-break*))))
-       (elements (ly:music-property seq 'elements))
-       (chord? (make-music-type-predicate 'EventChord))
-       (note-or-chord? (make-music-type-predicate 'EventChord 'NoteEvent
-                                                  'LyricEvent 'RestEvent
-                                                  'ClusterNoteEvent))
-       (cluster? (make-music-type-predicate 'ClusterNoteEvent))
-       (note? (make-music-type-predicate 'NoteEvent)))
+                               ;; hm
+                               (> (length (ly:music-property seq 'elements))
+                                  (*max-element-number-before-break*))))
+        (elements (ly:music-property seq 'elements))
+        (chord? (make-music-type-predicate 'EventChord))
+        (note-or-chord? (make-music-type-predicate 'EventChord 'NoteEvent
+                                                   'LyricEvent 'RestEvent
+                                                   'ClusterNoteEvent))
+        (cluster? (make-music-type-predicate 'ClusterNoteEvent))
+        (note? (make-music-type-predicate 'NoteEvent)))
     (format #f "~a~a{~v%~v_~{~a~^ ~}~v%~v_}"
-           (if (any (lambda (e)
-                      (or (cluster? e)
-                          (and (chord? e)
-                               (any cluster? (ly:music-property e 'elements)))))
-                    elements)
-               "\\makeClusters "
-               "")
-           (if (*explicit-mode*)
-               ;; if the sequence contains EventChord which contains figures ==> figuremode
-               ;; if the sequence contains EventChord which contains lyrics ==> lyricmode
-               ;; if the sequence contains EventChord which contains drum notes ==> drummode
-               (cond ((any (lambda (chord)
-                             (any (make-music-type-predicate 'BassFigureEvent)
-                                  (ly:music-property chord 'elements)))
-                           (filter chord? elements))
-                      "\\figuremode ")
-                     ((any (lambda (chord)
-                             (any (make-music-type-predicate 'LyricEvent)
-                                  (cons chord
-                                        (ly:music-property chord 'elements))))
-                           (filter note-or-chord? elements))
-                      "\\lyricmode ")
-                     ((any (lambda (chord)
-                             (any (lambda (event)
-                                    (and (note? event)
-                                         (not (null? (ly:music-property event 'drum-type)))))
-                                  (cons chord
-                                        (ly:music-property chord 'elements))))
-                           (filter note-or-chord? elements))
-                      "\\drummode ")
-                     (else ;; TODO: other modes?
-                      ""))
-               "")
-           (if force-line-break 1 0)
-           (if force-line-break (+ 2 (*indent*)) 1)
-           (parameterize ((*indent* (+ 2 (*indent*))))
-                         (map-in-order (lambda (music)
-                                         (music->lily-string music parser))
-                                       elements))
-           (if force-line-break 1 0)
-           (if force-line-break (*indent*) 1))))
+            (if (any (lambda (e)
+                       (or (cluster? e)
+                           (and (chord? e)
+                                (any cluster? (ly:music-property e 'elements)))))
+                     elements)
+                "\\makeClusters "
+                "")
+            (if (*explicit-mode*)
+                ;; if the sequence contains EventChord which contains figures ==> figuremode
+                ;; if the sequence contains EventChord which contains lyrics ==> lyricmode
+                ;; if the sequence contains EventChord which contains drum notes ==> drummode
+                (cond ((any (lambda (chord)
+                              (any (make-music-type-predicate 'BassFigureEvent)
+                                   (ly:music-property chord 'elements)))
+                            (filter chord? elements))
+                       "\\figuremode ")
+                      ((any (lambda (chord)
+                              (any (make-music-type-predicate 'LyricEvent)
+                                   (cons chord
+                                         (ly:music-property chord 'elements))))
+                            (filter note-or-chord? elements))
+                       "\\lyricmode ")
+                      ((any (lambda (chord)
+                              (any (lambda (event)
+                                     (and (note? event)
+                                          (not (null? (ly:music-property event 'drum-type)))))
+                                   (cons chord
+                                         (ly:music-property chord 'elements))))
+                            (filter note-or-chord? elements))
+                       "\\drummode ")
+                      (else ;; TODO: other modes?
+                       ""))
+                "")
+            (if force-line-break 1 0)
+            (if force-line-break (+ 2 (*indent*)) 1)
+            (parameterize ((*indent* (+ 2 (*indent*))))
+                          (map-in-order (lambda (music)
+                                          (music->lily-string music parser))
+                                        elements))
+            (if force-line-break 1 0)
+            (if force-line-break (*indent*) 1))))
 
 (define-display-method SimultaneousMusic (sim parser)
   (parameterize ((*indent* (+ 3 (*indent*))))
-    (format #f "<< ~{~a ~}>>"
-           (map-in-order (lambda (music)
-                           (music->lily-string music parser))
-                         (ly:music-property sim 'elements)))))
+                (format #f "<< ~{~a ~}>>"
+                        (map-in-order (lambda (music)
+                                        (music->lily-string music parser))
+                                      (ly:music-property sim 'elements)))))
 
 (define-extra-display-method SimultaneousMusic (expr parser)
   "If `sim' is an \afterGrace expression, return \"\\afterGrace ...\".
 Otherwise, return #f."
   ;; TODO: do something with afterGraceFraction?
   (with-music-match (expr (music 'SimultaneousMusic
-                                elements (?before-grace
-                                          (music 'SequentialMusic
-                                                 elements ((music 'SkipMusic)
-                                                           (music 'GraceMusic
-                                                                  element ?grace))))))
-    (format #f "\\afterGrace ~a ~a"
-           (music->lily-string ?before-grace parser)
-           (music->lily-string ?grace parser))))
+                                 elements (?before-grace
+                                           (music 'SequentialMusic
+                                                  elements ((music 'SkipMusic)
+                                                            (music 'GraceMusic
+                                                                   element ?grace))))))
+                    (format #f "\\afterGrace ~a ~a"
+                            (music->lily-string ?before-grace parser)
+                            (music->lily-string ?grace parser))))
 
 ;;;
 ;;; Chords
@@ -412,68 +412,68 @@ Otherwise, return #f."
 
 (define-display-method EventChord (chord parser)
   ;; event_chord : command_element
-  ;;              | note_chord_element
+  ;;               | note_chord_element
 
   ;; TODO : tagged post_events
   ;; post_events : ( post_event | tagged_post_event )*
   ;; tagged_post_event: '-' \tag embedded_scm post_event
 
   (let* ((elements (append (ly:music-property chord 'elements)
-                          (ly:music-property chord 'articulations)))
-        (chord-repeat (ly:music-property chord 'duration)))
+                           (ly:music-property chord 'articulations)))
+         (chord-repeat (ly:music-property chord 'duration)))
     (call-with-values
-       (lambda ()
-         (partition (lambda (m) (music-is-of-type? m 'rhythmic-event))
-                    elements))
+        (lambda ()
+          (partition (lambda (m) (music-is-of-type? m 'rhythmic-event))
+                     elements))
       (lambda (chord-elements other-elements)
-       (cond ((pair? chord-elements)
-              ;; note_chord_element :
-              ;; '<' (notepitch | drumpitch)* '>" duration post_events
-              (let ((duration (duration->lily-string (ly:music-property
-                                                      (car chord-elements)
-                                                      'duration)
-                                                     #:remember #t)))
-                ;; Format duration first so that it does not appear on
-                ;; chord elements
-                (format #f "< ~{~a ~}>~a~:{~:[-~;~]~a~^ ~}"
-                        (map-in-order (lambda (music)
-                                        (music->lily-string music parser))
-                                      chord-elements)
-                        duration
-                        (map-in-order (lambda (music)
-                                        (list
-                                         (post-event? music)
-                                         (music->lily-string music parser)))
-                                      other-elements))))
-             ((ly:duration? chord-repeat)
-              (let ((duration (duration->lily-string chord-repeat
-                                                     #:remember #t)))
-                (format #f "q~a~:{~:[-~;~]~a~^ ~}"
-                        duration
-                        (map-in-order (lambda (music)
-                                        (list
-                                         (post-event? music)
-                                         (music->lily-string music parser)))
-                                      other-elements))))
-
-             ((and (= 1 (length other-elements))
-                   (not (post-event? (car other-elements))))
-              (format #f (music->lily-string (car other-elements) parser)))
-             (else
-              (format #f "< >~:{~:[-~;~]~a~^ ~}"
-                      (map-in-order (lambda (music)
-                                      (list
-                                       (post-event? music)
-                                       (music->lily-string music parser)))
-                                    other-elements))))))))
+        (cond ((pair? chord-elements)
+               ;; note_chord_element :
+               ;; '<' (notepitch | drumpitch)* '>" duration post_events
+               (let ((duration (duration->lily-string (ly:music-property
+                                                       (car chord-elements)
+                                                       'duration)
+                                                      #:remember #t)))
+                 ;; Format duration first so that it does not appear on
+                 ;; chord elements
+                 (format #f "< ~{~a ~}>~a~:{~:[-~;~]~a~^ ~}"
+                         (map-in-order (lambda (music)
+                                         (music->lily-string music parser))
+                                       chord-elements)
+                         duration
+                         (map-in-order (lambda (music)
+                                         (list
+                                          (post-event? music)
+                                          (music->lily-string music parser)))
+                                       other-elements))))
+              ((ly:duration? chord-repeat)
+               (let ((duration (duration->lily-string chord-repeat
+                                                      #:remember #t)))
+                 (format #f "q~a~:{~:[-~;~]~a~^ ~}"
+                         duration
+                         (map-in-order (lambda (music)
+                                         (list
+                                          (post-event? music)
+                                          (music->lily-string music parser)))
+                                       other-elements))))
+
+              ((and (= 1 (length other-elements))
+                    (not (post-event? (car other-elements))))
+               (format #f (music->lily-string (car other-elements) parser)))
+              (else
+               (format #f "< >~:{~:[-~;~]~a~^ ~}"
+                       (map-in-order (lambda (music)
+                                       (list
+                                        (post-event? music)
+                                        (music->lily-string music parser)))
+                                     other-elements))))))))
 
 (define-display-method MultiMeasureRestMusic (mmrest parser)
   (format #f "R~a~{~a~^ ~}"
-         (duration->lily-string (ly:music-property mmrest 'duration)
-                                #:remember #t)
-         (map-in-order (lambda (music)
-                         (music->lily-string music parser))
-                       (ly:music-property mmrest 'articulations))))
+          (duration->lily-string (ly:music-property mmrest 'duration)
+                                 #:remember #t)
+          (map-in-order (lambda (music)
+                          (music->lily-string music parser))
+                        (ly:music-property mmrest 'articulations))))
 
 (define-display-method SkipMusic (skip parser)
   (format #f "\\skip ~a" (duration->lily-string (ly:music-property skip 'duration) #:force-duration #t)))
@@ -487,47 +487,47 @@ Otherwise, return #f."
 
 (define (simple-note->lily-string event parser)
   (format #f "~a~a~a~a~a~a~:{~:[-~;~]~a~}" ; pitchname octave !? octave-check duration optional_rest articulations
-         (note-name->lily-string (ly:music-property event 'pitch) parser)
-         (octave->lily-string (ly:music-property event 'pitch))
-         (let ((forced (ly:music-property event 'force-accidental))
-               (cautionary (ly:music-property event 'cautionary)))
-           (cond ((and (not (null? forced))
-                       forced
-                       (not (null? cautionary))
-                       cautionary)
-                  "?")
-                 ((and (not (null? forced)) forced) "!")
-                 (else "")))
-         (let ((octave-check (ly:music-property event 'absolute-octave)))
-           (if (not (null? octave-check))
-               (format #f "=~a" (cond ((>= octave-check 0)
-                                       (make-string (1+ octave-check) #\'))
-                                      ((< octave-check -1)
-                                       (make-string (1- (* -1 octave-check)) #\,))
-                                      (else "")))
-               ""))
-         (duration->lily-string (ly:music-property event 'duration)
-                                #:remember #t)
-         (if ((make-music-type-predicate 'RestEvent) event)
-             "\\rest" "")
-         (map-in-order (lambda (event)
-                         (list
-                          (post-event? event)
-                          (music->lily-string event parser)))
-                       (ly:music-property event 'articulations))))
+          (note-name->lily-string (ly:music-property event 'pitch) parser)
+          (octave->lily-string (ly:music-property event 'pitch))
+          (let ((forced (ly:music-property event 'force-accidental))
+                (cautionary (ly:music-property event 'cautionary)))
+            (cond ((and (not (null? forced))
+                        forced
+                        (not (null? cautionary))
+                        cautionary)
+                   "?")
+                  ((and (not (null? forced)) forced) "!")
+                  (else "")))
+          (let ((octave-check (ly:music-property event 'absolute-octave)))
+            (if (not (null? octave-check))
+                (format #f "=~a" (cond ((>= octave-check 0)
+                                        (make-string (1+ octave-check) #\'))
+                                       ((< octave-check -1)
+                                        (make-string (1- (* -1 octave-check)) #\,))
+                                       (else "")))
+                ""))
+          (duration->lily-string (ly:music-property event 'duration)
+                                 #:remember #t)
+          (if ((make-music-type-predicate 'RestEvent) event)
+              "\\rest" "")
+          (map-in-order (lambda (event)
+                          (list
+                           (post-event? event)
+                           (music->lily-string event parser)))
+                        (ly:music-property event 'articulations))))
 
 (define-display-method NoteEvent (note parser)
   (cond ((not (null? (ly:music-property note 'pitch))) ;; note
-        (simple-note->lily-string note parser))
-       ((not (null? (ly:music-property note 'drum-type))) ;; drum
-        (format #f "~a~a~{~a~}" (ly:music-property note 'drum-type)
-                (duration->lily-string (ly:music-property note 'duration)
-                                       #:remember #t)
-                (map-in-order (lambda (event)
-                                (music->lily-string event parser))
-                              (ly:music-property note 'articulations))))
-       (else ;; unknown?
-        "")))
+         (simple-note->lily-string note parser))
+        ((not (null? (ly:music-property note 'drum-type))) ;; drum
+         (format #f "~a~a~{~a~}" (ly:music-property note 'drum-type)
+                 (duration->lily-string (ly:music-property note 'duration)
+                                        #:remember #t)
+                 (map-in-order (lambda (event)
+                                 (music->lily-string event parser))
+                               (ly:music-property note 'articulations))))
+        (else ;; unknown?
+         "")))
 
 (define-display-method ClusterNoteEvent (note parser)
   (simple-note->lily-string note parser))
@@ -536,23 +536,23 @@ Otherwise, return #f."
   (if (not (null? (ly:music-property rest 'pitch)))
       (simple-note->lily-string rest parser)
       (format #f "r~a~{~a~}"
-             (duration->lily-string (ly:music-property rest 'duration)
-                                    #:remember #t)
-             (map-in-order (lambda (event)
-                             (music->lily-string event parser))
-                           (ly:music-property rest 'articulations)))))
+              (duration->lily-string (ly:music-property rest 'duration)
+                                     #:remember #t)
+              (map-in-order (lambda (event)
+                              (music->lily-string event parser))
+                            (ly:music-property rest 'articulations)))))
 
 (define-display-method MultiMeasureRestEvent (rest parser)
   (string-append "R" (duration->lily-string (ly:music-property rest 'duration)
-                                           #:remember #t)))
+                                            #:remember #t)))
 
 (define-display-method SkipEvent (rest parser)
   (format #f "s~a~{~a~}"
-         (duration->lily-string (ly:music-property rest 'duration)
-                                #:remember #t)
-         (map-in-order (lambda (event)
-                         (music->lily-string event parser))
-                       (ly:music-property rest 'articulations))))
+          (duration->lily-string (ly:music-property rest 'duration)
+                                 #:remember #t)
+          (map-in-order (lambda (event)
+                          (music->lily-string event parser))
+                        (ly:music-property rest 'articulations))))
 
 (define-display-method RepeatedChord (chord parser)
   (music->lily-string (ly:music-property chord 'element) parser))
@@ -560,32 +560,32 @@ Otherwise, return #f."
 (define-display-method MarkEvent (mark parser)
   (let ((label (ly:music-property mark 'label)))
     (if (null? label)
-       "\\mark \\default"
-       (format #f "\\mark ~a" (markup->lily-string label)))))
+        "\\mark \\default"
+        (format #f "\\mark ~a" (markup->lily-string label)))))
 
 (define-display-method KeyChangeEvent (key parser)
   (let ((pitch-alist (ly:music-property key 'pitch-alist))
-       (tonic (ly:music-property key 'tonic)))
+        (tonic (ly:music-property key 'tonic)))
     (if (or (null? pitch-alist)
-           (null? tonic))
-       "\\key \\default"
-       (let ((c-pitch-alist (ly:transpose-key-alist pitch-alist
-                                                    (ly:pitch-diff (ly:make-pitch 0 0 0) tonic))))
-         (format #f "\\key ~a \\~a~a"
-                 (note-name->lily-string (ly:music-property key 'tonic) parser)
-                 (any (lambda (mode)
-                        (if (and parser
-                                 (equal? (ly:parser-lookup parser mode) c-pitch-alist))
-                            (symbol->string mode)
-                            #f))
-                      '(major minor ionian locrian aeolian mixolydian lydian phrygian dorian))
-                 (new-line->lily-string))))))
+            (null? tonic))
+        "\\key \\default"
+        (let ((c-pitch-alist (ly:transpose-key-alist pitch-alist
+                                                     (ly:pitch-diff (ly:make-pitch 0 0 0) tonic))))
+          (format #f "\\key ~a \\~a~a"
+                  (note-name->lily-string (ly:music-property key 'tonic) parser)
+                  (any (lambda (mode)
+                         (if (and parser
+                                  (equal? (ly:parser-lookup parser mode) c-pitch-alist))
+                             (symbol->string mode)
+                             #f))
+                       '(major minor ionian locrian aeolian mixolydian lydian phrygian dorian))
+                  (new-line->lily-string))))))
 
 (define-display-method RelativeOctaveCheck (octave parser)
   (let ((pitch (ly:music-property octave 'pitch)))
     (format #f "\\octaveCheck ~a~a"
-           (note-name->lily-string pitch parser)
-           (octave->lily-string pitch))))
+            (note-name->lily-string pitch parser)
+            (octave->lily-string pitch))))
 
 (define-display-method VoiceSeparator (sep parser)
   "\\\\")
@@ -603,42 +603,42 @@ Otherwise, return #f."
 
 (define-display-method BassFigureEvent (figure parser)
   (let ((alteration (ly:music-property figure 'alteration))
-       (fig (ly:music-property figure 'figure))
-       (bracket-start (ly:music-property figure 'bracket-start))
-       (bracket-stop (ly:music-property figure 'bracket-stop)))
+        (fig (ly:music-property figure 'figure))
+        (bracket-start (ly:music-property figure 'bracket-start))
+        (bracket-stop (ly:music-property figure 'bracket-stop)))
 
     (format #f "~a~a~a~a"
-           (if (null? bracket-start) "" "[")
-           (cond ((null? fig) "_")
-                 ((markup? fig) (second fig)) ;; fig: (<number-markup> "number")
-                 (else fig))
-           (if (null? alteration)
-               ""
-               (cond
-                 ((= alteration DOUBLE-FLAT) "--")
-                 ((= alteration FLAT) "-")
-                 ((= alteration NATURAL) "!")
-                 ((= alteration SHARP) "+")
-                 ((= alteration DOUBLE-SHARP) "++")
-                 (else "")))
-           (if (null? bracket-stop) "" "]"))))
+            (if (null? bracket-start) "" "[")
+            (cond ((null? fig) "_")
+                  ((markup? fig) (second fig)) ;; fig: (<number-markup> "number")
+                  (else fig))
+            (if (null? alteration)
+                ""
+                (cond
+                 ((= alteration DOUBLE-FLAT) "--")
+                 ((= alteration FLAT) "-")
+                 ((= alteration NATURAL) "!")
+                 ((= alteration SHARP) "+")
+                 ((= alteration DOUBLE-SHARP) "++")
+                 (else "")))
+            (if (null? bracket-stop) "" "]"))))
 
 (define-display-method LyricEvent (lyric parser)
   (format "~a~{~a~^ ~}"
-         (let ((text (ly:music-property lyric 'text)))
-           (if (or (string? text)
-                   (eqv? (first text) simple-markup))
-               ;; a string or a simple markup
-               (let ((string (if (string? text)
-                                 text
-                                 (second text))))
-                 (if (string-match "(\"| |[0-9])" string)
-                     ;; TODO check exactly in which cases double quotes should be used
-                     (format #f "~s" string)
-                     string))
-               (markup->lily-string text)))
-         (map-in-order (lambda (m) (music->lily-string m parser))
-                       (ly:music-property lyric 'articulations))))
+          (let ((text (ly:music-property lyric 'text)))
+            (if (or (string? text)
+                    (eqv? (first text) simple-markup))
+                ;; a string or a simple markup
+                (let ((string (if (string? text)
+                                  text
+                                  (second text))))
+                  (if (string-match "(\"| |[0-9])" string)
+                      ;; TODO check exactly in which cases double quotes should be used
+                      (format #f "~s" string)
+                      string))
+                (markup->lily-string text)))
+          (map-in-order (lambda (m) (music->lily-string m parser))
+                        (ly:music-property lyric 'articulations))))
 
 (define-display-method BreathingEvent (event parser)
   "\\breathe")
@@ -649,33 +649,35 @@ Otherwise, return #f."
 
 (define-display-method AutoChangeMusic (m parser)
   (format #f "\\autochange ~a"
-         (music->lily-string (ly:music-property m 'element) parser)))
+          (music->lily-string (ly:music-property m 'element) parser)))
 
 (define-display-method ContextChange (m parser)
   (format #f "\\change ~a = \"~a\""
-         (ly:music-property m 'change-to-type)
-         (ly:music-property m 'change-to-id)))
+          (ly:music-property m 'change-to-type)
+          (ly:music-property m 'change-to-id)))
 
 ;;;
 
 (define-display-method TimeScaledMusic (times parser)
   (let* ((num (ly:music-property times 'numerator))
-        (den (ly:music-property times 'denominator))
-        (scale (/ num den))
-        (dur (*previous-duration*))
-        (time-scale (*time-scale*)))
-
-    (parameterize ((*force-line-break* #f)
-                  (*previous-duration*
-                   (ly:make-duration (ly:duration-log dur)
-                                     (ly:duration-dot-count dur)
-                                     (* (ly:duration-scale dur)
-                                        scale)))
-                  (*time-scale* (* time-scale scale)))
-      (format #f "\\times ~a/~a ~a"
-             num
-             den
-             (music->lily-string (ly:music-property times 'element) parser)))))
+         (den (ly:music-property times 'denominator))
+         (span (ly:music-property times 'duration #f))
+         ;; need to format before changing time scale
+         (formatted-span
+          (and span (duration->lily-string span #:force-duration #t)))
+         (scale (/ num den))
+         (time-scale (*time-scale*)))
+    (*previous-duration* #f)
+    (let ((result
+           (parameterize ((*force-line-break* #f)
+                          (*time-scale* (* time-scale scale)))
+                         (format #f "\\tuplet ~a/~a ~@[~a ~]~a"
+                                 den
+                                 num
+                                 formatted-span
+                                 (music->lily-string (ly:music-property times 'element) parser)))))
+      (*previous-duration* #f)
+      result)))
 
 (define-display-method RelativeOctaveMusic (m parser)
   (music->lily-string (ly:music-property m 'element) parser))
@@ -692,16 +694,16 @@ Otherwise, return #f."
 (define (repeat->lily-string expr repeat-type parser)
   (let* ((main (music->lily-string (ly:music-property expr 'element) parser)))
     (format #f "\\repeat ~a ~a ~a ~a"
-           repeat-type
-           (ly:music-property expr 'repeat-count)
-           main
-           (let ((alternatives (ly:music-property expr 'elements)))
-             (if (null? alternatives)
-                 ""
-                 (format #f "\\alternative { ~{~a ~}}"
-                         (map-in-order (lambda (music)
-                                         (music->lily-string music parser))
-                                       alternatives)))))))
+            repeat-type
+            (ly:music-property expr 'repeat-count)
+            main
+            (let ((alternatives (ly:music-property expr 'elements)))
+              (if (null? alternatives)
+                  ""
+                  (format #f "\\alternative { ~{~a ~}}"
+                          (map-in-order (lambda (music)
+                                          (music->lily-string music parser))
+                                        alternatives)))))))
 
 (define-display-method VoltaRepeatedMusic (expr parser)
   (repeat->lily-string expr "volta" parser))
@@ -714,28 +716,28 @@ Otherwise, return #f."
 
 (define-display-method TremoloRepeatedMusic (expr parser)
   (let* ((main (ly:music-property expr 'element))
-        (children (if (music-is-of-type? main 'sequential-music)
-                      ;; \repeat tremolo n { ... }
-                      (length (extract-named-music main '(EventChord
-                                                          NoteEvent)))
-                      ;; \repeat tremolo n c4
-                      1))
-        (times (ly:music-property expr 'repeat-count))
-
-        ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
-        (dots (1- (logcount (* times children))))
-        ;; The remaining missing multiplicator to scale the notes by
-        ;; times * children
-        (mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
-        (shift (- (ly:intlog2 (floor mult)))))
+         (children (if (music-is-of-type? main 'sequential-music)
+                       ;; \repeat tremolo n { ... }
+                       (length (extract-named-music main '(EventChord
+                                                           NoteEvent)))
+                       ;; \repeat tremolo n c4
+                       1))
+         (times (ly:music-property expr 'repeat-count))
+
+         ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
+         (dots (1- (logcount (* times children))))
+         ;; The remaining missing multiplicator to scale the notes by
+         ;; times * children
+         (mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
+         (shift (- (ly:intlog2 (floor mult)))))
     (set! main (ly:music-deep-copy main))
     ;; Adjust the time of the notes
     (ly:music-compress main (ly:make-moment children 1))
     ;; Adjust the displayed note durations
     (shift-duration-log main (- shift) (- dots))
     (format #f "\\repeat tremolo ~a ~a"
-           times
-           (music->lily-string main parser))))
+            times
+            (music->lily-string main parser))))
 
 ;;;
 ;;; Contexts
@@ -743,139 +745,131 @@ Otherwise, return #f."
 
 (define-display-method ContextSpeccedMusic (expr parser)
   (let ((id    (ly:music-property expr 'context-id))
-       (create-new (ly:music-property expr 'create-new))
-       (music (ly:music-property expr 'element))
-       (operations (ly:music-property expr 'property-operations))
-       (ctype (ly:music-property expr 'context-type)))
+        (create-new (ly:music-property expr 'create-new))
+        (music (ly:music-property expr 'element))
+        (operations (ly:music-property expr 'property-operations))
+        (ctype (ly:music-property expr 'context-type)))
     (format #f "~a ~a~a~a ~a"
-           (if (and (not (null? create-new)) create-new)
-               "\\new"
-               "\\context")
-           ctype
-           (if (null? id)
-               ""
-               (format #f " = ~s" id))
-           (if (null? operations)
-               ""
-               (format #f " \\with {~{~a~}~%~v_}"
-                       (parameterize ((*indent* (+ (*indent*) 2)))
-                         (map (lambda (op)
-                                (format #f "~%~v_\\~a ~s"
-                                        (*indent*)
-                                        (first op)
-                                        (second op)))
-                              operations))
-                       (*indent*)))
-           (parameterize ((*current-context* ctype))
-             (music->lily-string music parser)))))
+            (if (and (not (null? create-new)) create-new)
+                "\\new"
+                "\\context")
+            ctype
+            (if (null? id)
+                ""
+                (format #f " = ~s" id))
+            (if (null? operations)
+                ""
+                (format #f " \\with {~{~a~}~%~v_}"
+                        (parameterize ((*indent* (+ (*indent*) 2)))
+                                      (map (lambda (op)
+                                             (format #f "~%~v_\\~a ~s"
+                                                     (*indent*)
+                                                     (first op)
+                                                     (second op)))
+                                           operations))
+                        (*indent*)))
+            (parameterize ((*current-context* ctype))
+                          (music->lily-string music parser)))))
 
 ;; special cases: \figures \lyrics \drums
 (define-extra-display-method ContextSpeccedMusic (expr parser)
   (with-music-match (expr (music 'ContextSpeccedMusic
-                                create-new #t
-                                property-operations ?op
-                                context-type ?context-type
-                                element ?sequence))
-    (if (null? ?op)
-       (parameterize ((*explicit-mode* #f))
-         (case ?context-type
-           ((FiguredBass)
-            (format #f "\\figures ~a" (music->lily-string ?sequence parser)))
-           ((Lyrics)
-            (format #f "\\lyrics ~a" (music->lily-string ?sequence parser)))
-           ((DrumStaff)
-            (format #f "\\drums ~a" (music->lily-string ?sequence parser)))
-           (else
-            #f)))
-       #f)))
+                                 create-new #t
+                                 property-operations ?op
+                                 context-type ?context-type
+                                 element ?sequence))
+                    (if (null? ?op)
+                        (parameterize ((*explicit-mode* #f))
+                                      (case ?context-type
+                                        ((FiguredBass)
+                                         (format #f "\\figures ~a" (music->lily-string ?sequence parser)))
+                                        ((Lyrics)
+                                         (format #f "\\lyrics ~a" (music->lily-string ?sequence parser)))
+                                        ((DrumStaff)
+                                         (format #f "\\drums ~a" (music->lily-string ?sequence parser)))
+                                        (else
+                                         #f)))
+                        #f)))
 
 ;;; Context properties
 
 (define-extra-display-method ContextSpeccedMusic (expr parser)
   (let ((element (ly:music-property expr 'element))
-       (property-tuning? (make-music-type-predicate 'PropertySet
-                                                    'PropertyUnset
-                                                    'OverrideProperty
-                                                    'RevertProperty))
-       (sequence? (make-music-type-predicate 'SequentialMusic)))
+        (property-tuning? (make-music-type-predicate 'PropertySet
+                                                     'PropertyUnset
+                                                     'OverrideProperty
+                                                     'RevertProperty))
+        (sequence? (make-music-type-predicate 'SequentialMusic)))
     (if (and (ly:music? element)
-            (or (property-tuning? element)
-                (and (sequence? element)
-                     (every property-tuning? (ly:music-property element 'elements)))))
-       (parameterize ((*current-context* (ly:music-property expr 'context-type)))
-         (music->lily-string element parser))
-       #f)))
+             (or (property-tuning? element)
+                 (and (sequence? element)
+                      (every property-tuning? (ly:music-property element 'elements)))))
+        (parameterize ((*current-context* (ly:music-property expr 'context-type)))
+                      (music->lily-string element parser))
+        #f)))
 
 (define (property-value->lily-string arg parser)
   (cond ((ly:music? arg)
-        (music->lily-string arg parser))
-       ((string? arg)
-        (format #f "#~s" arg))
-       ((markup? arg)
-        (markup->lily-string arg))
-       (else
-        (format #f "#~a" (scheme-expr->lily-string arg)))))
+         (music->lily-string arg parser))
+        ((string? arg)
+         (format #f "#~s" arg))
+        ((markup? arg)
+         (markup->lily-string arg))
+        (else
+         (format #f "#~a" (scheme-expr->lily-string arg)))))
 
 (define-display-method PropertySet (expr parser)
   (let ((property (ly:music-property expr 'symbol))
-       (value (ly:music-property expr 'value))
-       (once (ly:music-property expr 'once)))
+        (value (ly:music-property expr 'value))
+        (once (ly:music-property expr 'once)))
     (format #f "~a\\set ~a~a = ~a~a"
-           (if (and (not (null? once)))
-               "\\once "
-               "")
-           (if (eqv? (*current-context*) 'Bottom)
-               ""
-               (format #f "~a . " (*current-context*)))
-           property
-           (property-value->lily-string value parser)
-           (new-line->lily-string))))
+            (if (and (not (null? once)))
+                "\\once "
+                "")
+            (if (eqv? (*current-context*) 'Bottom)
+                ""
+                (format #f "~a . " (*current-context*)))
+            property
+            (property-value->lily-string value parser)
+            (new-line->lily-string))))
 
 (define-display-method PropertyUnset (expr parser)
   (format #f "\\unset ~a~a~a"
-         (if (eqv? (*current-context*) 'Bottom)
-             ""
-             (format #f "~a . " (*current-context*)))
-         (ly:music-property expr 'symbol)
-         (new-line->lily-string)))
+          (if (eqv? (*current-context*) 'Bottom)
+              ""
+              (format #f "~a . " (*current-context*)))
+          (ly:music-property expr 'symbol)
+          (new-line->lily-string)))
 
 ;;; Layout properties
 
 (define-display-method OverrideProperty (expr parser)
-  (let* ((symbol         (ly:music-property expr 'symbol))
-        (properties   (ly:music-property expr 'grob-property-path
-                                             (list (ly:music-property expr 'grob-property))))
-        (value   (ly:music-property expr 'grob-value))
-        (once    (ly:music-property expr 'once)))
-
-    (format #f "~a\\override ~a~a #'~a = ~a~a"
-           (if (or (null? once)
-                   (not once))
-               ""
-               "\\once ")
-           (if (eqv? (*current-context*) 'Bottom)
-               ""
-               (format #f "~a . " (*current-context*)))
-           symbol
-           (if (null? (cdr properties))
-               (car properties)
-               properties)
-           (property-value->lily-string value parser)
-           (new-line->lily-string))))
+  (let* ((symbol          (ly:music-property expr 'symbol))
+         (properties   (ly:music-property expr 'grob-property-path
+                                          (list (ly:music-property expr 'grob-property))))
+         (value   (ly:music-property expr 'grob-value))
+         (once    (ly:music-property expr 'once)))
+
+    (format #f "~a\\override ~{~a~^.~} = ~a~a"
+            (if (or (null? once)
+                    (not once))
+                ""
+                "\\once ")
+            (if (eqv? (*current-context*) 'Bottom)
+                (cons symbol properties)
+                (cons* (*current-context*) symbol properties))
+            (property-value->lily-string value parser)
+            (new-line->lily-string))))
 
 (define-display-method RevertProperty (expr parser)
   (let* ((symbol (ly:music-property expr 'symbol))
          (properties (ly:music-property expr 'grob-property-path
-                                             (list (ly:music-property expr 'grob-property)))))
-    (format #f "\\revert ~a~a #'~a~a"
-           (if (eqv? (*current-context*) 'Bottom)
-               ""
-               (format #f "~a . " (*current-context*)))
-           symbol
-           (if (null? (cdr properties))
-               (car properties)
-               properties)
-           (new-line->lily-string))))
+                                        (list (ly:music-property expr 'grob-property)))))
+    (format #f "\\revert ~{~a~^.~}~a"
+            (if (eqv? (*current-context*) 'Bottom)
+                (cons symbol properties)
+                (cons* (*current-context*) symbol properties))
+            (new-line->lily-string))))
 
 (define-display-method TimeSignatureMusic (expr parser)
   (let* ((num (ly:music-property expr 'numerator))
@@ -887,7 +881,7 @@ Otherwise, return #f."
                 num den
                 (new-line->lily-string))
         (format #f
-                "\\time #'~a ~a/~a~a" 
+                "\\time #'~a ~a/~a~a"
                 structure num den
                 (new-line->lily-string)))))
 
@@ -895,43 +889,43 @@ Otherwise, return #f."
 (define-extra-display-method ContextSpeccedMusic (expr parser)
   "If expr is a melisma, return \"\\melisma\", otherwise, return #f."
   (with-music-match (expr (music 'ContextSpeccedMusic
-                                element (music 'PropertySet
-                                               value #t
-                                               symbol 'melismaBusy)))
-    "\\melisma"))
+                                 element (music 'PropertySet
+                                                value #t
+                                                symbol 'melismaBusy)))
+                    "\\melisma"))
 
 (define-extra-display-method ContextSpeccedMusic (expr parser)
   "If expr is a melisma end, return \"\\melismaEnd\", otherwise, return #f."
   (with-music-match (expr (music 'ContextSpeccedMusic
-                                element (music 'PropertyUnset
-                                               symbol 'melismaBusy)))
-    "\\melismaEnd"))
+                                 element (music 'PropertyUnset
+                                                symbol 'melismaBusy)))
+                    "\\melismaEnd"))
 
 ;;; \tempo
 (define-extra-display-method SequentialMusic (expr parser)
   (with-music-match (expr (music 'SequentialMusic
-                                elements ((music 'TempoChangeEvent
-                                                 text ?text
-                                                 tempo-unit ?unit
-                                                 metronome-count ?count)
-                                          (music 'ContextSpeccedMusic
-                                                 element (music 'PropertySet
-                                                                symbol 'tempoWholesPerMinute)))))
-    (format #f "\\tempo ~{~a~a~}~a = ~a~a"
-           (if (markup? ?text)
-               (list (markup->lily-string ?text) " ")
-               '())
-           (duration->lily-string ?unit #:force-duration #t)
-           (if (pair? ?count)
-               (format #f "~a ~~ ~a" (car ?count) (cdr ?count))
-               ?count)
-           (new-line->lily-string))))
+                                 elements ((music 'TempoChangeEvent
+                                                  text ?text
+                                                  tempo-unit ?unit
+                                                  metronome-count ?count)
+                                           (music 'ContextSpeccedMusic
+                                                  element (music 'PropertySet
+                                                                 symbol 'tempoWholesPerMinute)))))
+                    (format #f "\\tempo ~{~a~a~}~a = ~a~a"
+                            (if (markup? ?text)
+                                (list (markup->lily-string ?text) " ")
+                                '())
+                            (duration->lily-string ?unit #:force-duration #t)
+                            (if (pair? ?count)
+                                (format #f "~a - ~a" (car ?count) (cdr ?count))
+                                ?count)
+                            (new-line->lily-string))))
 
 (define-display-method TempoChangeEvent (expr parser)
   (let ((text (ly:music-property expr 'text)))
     (format #f "\\tempo ~a~a"
-           (markup->lily-string text)
-           (new-line->lily-string))))
+            (markup->lily-string text)
+            (new-line->lily-string))))
 
 ;;; \clef
 (define clef-name-alist #f)
@@ -948,107 +942,107 @@ Otherwise, return #f."
   "If @var{expr} is a clef change, return \"\\clef ...\".
 Otherwise, return @code{#f}."
   (with-music-match (expr (music 'ContextSpeccedMusic
-                                context-type 'Staff
-                                element (music 'SequentialMusic
-                                               elements ((music 'PropertySet
-                                                                value ?clef-glyph
-                                                                symbol 'clefGlyph)
-                                                         (music 'PropertySet
-                                                                symbol 'middleCClefPosition)
-                                                         (music 'PropertySet
-                                                                value ?clef-position
-                                                                symbol 'clefPosition)
-                                                         (music 'PropertySet
-                                                                value ?clef-octavation
-                                                                symbol 'clefOctavation)
-                                                         (music 'ApplyContext
-                                                                procedure ly:set-middle-C!)))))
-    (let ((clef-name (assoc-get (list ?clef-glyph ?clef-position 0)
-                               clef-name-alist)))
-      (if clef-name
-         (format #f "\\clef \"~a~{~a~a~}\"~a"
-                 clef-name
-                 (cond ((= 0 ?clef-octavation)
-                        (list "" ""))
-                       ((> ?clef-octavation 0)
-                        (list "^" (1+ ?clef-octavation)))
-                       (else
-                        (list "_" (- 1 ?clef-octavation))))
-                 (new-line->lily-string))
-         #f))))
+                                 context-type 'Staff
+                                 element (music 'SequentialMusic
+                                                elements ((music 'PropertySet
+                                                                 value ?clef-glyph
+                                                                 symbol 'clefGlyph)
+                                                          (music 'PropertySet
+                                                                 symbol 'middleCClefPosition)
+                                                          (music 'PropertySet
+                                                                 value ?clef-position
+                                                                 symbol 'clefPosition)
+                                                          (music 'PropertySet
+                                                                 value ?clef-transposition
+                                                                 symbol 'clefTransposition)
+                                                          (music 'ApplyContext
+                                                                 procedure ly:set-middle-C!)))))
+                    (let ((clef-name (assoc-get (list ?clef-glyph ?clef-position 0)
+                                                clef-name-alist)))
+                      (if clef-name
+                          (format #f "\\clef \"~a~{~a~a~}\"~a"
+                                  clef-name
+                                  (cond ((= 0 ?clef-transposition)
+                                         (list "" ""))
+                                        ((> ?clef-transposition 0)
+                                         (list "^" (1+ ?clef-transposition)))
+                                        (else
+                                         (list "_" (- 1 ?clef-transposition))))
+                                  (new-line->lily-string))
+                          #f))))
 
 ;;; \bar
 (define-extra-display-method ContextSpeccedMusic (expr parser)
   "If `expr' is a bar, return \"\\bar ...\".
 Otherwise, return #f."
   (with-music-match (expr (music 'ContextSpeccedMusic
-                                context-type 'Timing
-                                element (music 'PropertySet
-                                               value ?bar-type
-                                               symbol 'whichBar)))
-    (format #f "\\bar \"~a\"~a" ?bar-type (new-line->lily-string))))
+                                 context-type 'Timing
+                                 element (music 'PropertySet
+                                                value ?bar-type
+                                                symbol 'whichBar)))
+                    (format #f "\\bar \"~a\"~a" ?bar-type (new-line->lily-string))))
 
 ;;; \partial
 (define-extra-display-method ContextSpeccedMusic (expr parser)
   "If `expr' is a partial measure, return \"\\partial ...\".
 Otherwise, return #f."
   (with-music-match (expr (music
-                          'ContextSpeccedMusic
-                          element (music
-                                   'ContextSpeccedMusic
-                                   context-type 'Timing
-                                   element (music
-                                            'PartialSet
-                                            partial-duration ?duration))))
-
-    (and ?duration
-        (format #f "\\partial ~a"
-                (duration->lily-string ?duration #:force-duration #t)))))
+                           'ContextSpeccedMusic
+                           element (music
+                                    'ContextSpeccedMusic
+                                    context-type 'Timing
+                                    element (music
+                                             'PartialSet
+                                             duration ?duration))))
+
+                    (and ?duration
+                         (format #f "\\partial ~a"
+                                 (duration->lily-string ?duration #:force-duration #t)))))
 
 ;;;
 ;;;
 
 (define-display-method ApplyOutputEvent (applyoutput parser)
   (let ((proc (ly:music-property applyoutput 'procedure))
-       (ctx  (ly:music-property applyoutput 'context-type)))
+        (ctx  (ly:music-property applyoutput 'context-type)))
     (format #f "\\applyOutput #'~a #~a"
-           ctx
-           (or (procedure-name proc)
-               (with-output-to-string
-                 (lambda ()
-                   (pretty-print (procedure-source proc))))))))
+            ctx
+            (or (procedure-name proc)
+                (with-output-to-string
+                  (lambda ()
+                    (pretty-print (procedure-source proc))))))))
 
 (define-display-method ApplyContext (applycontext parser)
   (let ((proc (ly:music-property applycontext 'procedure)))
     (format #f "\\applyContext #~a"
-           (or (procedure-name proc)
-               (with-output-to-string
-                 (lambda ()
-                   (pretty-print (procedure-source proc))))))))
+            (or (procedure-name proc)
+                (with-output-to-string
+                  (lambda ()
+                    (pretty-print (procedure-source proc))))))))
 
 ;;; \partcombine
 (define-display-method PartCombineMusic (expr parser)
   (format #f "\\partcombine ~{~a ~}"
-         (map-in-order (lambda (music)
-                         (music->lily-string music parser))
-                       (ly:music-property expr 'elements))))
+          (map-in-order (lambda (music)
+                          (music->lily-string music parser))
+                        (ly:music-property expr 'elements))))
 
 (define-extra-display-method PartCombineMusic (expr parser)
   (with-music-match (expr (music 'PartCombineMusic
-                                elements ((music 'UnrelativableMusic
-                                                 element (music 'ContextSpeccedMusic
-                                                                context-id "one"
-                                                                context-type 'Voice
-                                                                element ?sequence1))
-                                          (music 'UnrelativableMusic
-                                                 element (music 'ContextSpeccedMusic
-                                                                context-id "two"
-                                                                context-type 'Voice
-                                                                element ?sequence2)))))
-    (format #f "\\partcombine ~a~a~a"
-           (music->lily-string ?sequence1 parser)
-           (new-line->lily-string)
-           (music->lily-string ?sequence2 parser))))
+                                 elements ((music 'UnrelativableMusic
+                                                  element (music 'ContextSpeccedMusic
+                                                                 context-id "one"
+                                                                 context-type 'Voice
+                                                                 element ?sequence1))
+                                           (music 'UnrelativableMusic
+                                                  element (music 'ContextSpeccedMusic
+                                                                 context-id "two"
+                                                                 context-type 'Voice
+                                                                 element ?sequence2)))))
+                    (format #f "\\partcombine ~a~a~a"
+                            (music->lily-string ?sequence1 parser)
+                            (new-line->lily-string)
+                            (music->lily-string ?sequence2 parser))))
 
 (define-display-method UnrelativableMusic (expr parser)
   (music->lily-string (ly:music-property expr 'element) parser))
@@ -1056,19 +1050,19 @@ Otherwise, return #f."
 ;;; Cue notes
 (define-display-method QuoteMusic (expr parser)
   (or (with-music-match (expr (music
-                              'QuoteMusic
-                              quoted-voice-direction ?quoted-voice-direction
-                              quoted-music-name ?quoted-music-name
-                              quoted-context-id "cue"
-                              quoted-context-type 'Voice
-                              element ?music))
-       (format #f "\\cueDuring #~s #~a ~a"
-               ?quoted-music-name
-               ?quoted-voice-direction
-               (music->lily-string ?music parser)))
+                               'QuoteMusic
+                               quoted-voice-direction ?quoted-voice-direction
+                               quoted-music-name ?quoted-music-name
+                               quoted-context-id "cue"
+                               quoted-context-type 'CueVoice
+                               element ?music))
+                        (format #f "\\cueDuring #~s #~a ~a"
+                                ?quoted-music-name
+                                ?quoted-voice-direction
+                                (music->lily-string ?music parser)))
       (format #f "\\quoteDuring #~s ~a"
-             (ly:music-property expr 'quoted-music-name)
-             (music->lily-string (ly:music-property expr 'element) parser))))
+              (ly:music-property expr 'quoted-music-name)
+              (music->lily-string (ly:music-property expr 'element) parser))))
 
 ;;;
 ;;; Breaks
@@ -1090,21 +1084,21 @@ Otherwise, return #f."
 
 (define-extra-display-method EventChord (expr parser)
   (with-music-match (expr (music 'EventChord
-                           elements ((music 'LineBreakEvent
-                                            break-permission 'force)
-                                     (music 'PageBreakEvent
-                                            break-permission 'force))))
-    "\\pageBreak"))
+                                 elements ((music 'LineBreakEvent
+                                                  break-permission 'force)
+                                           (music 'PageBreakEvent
+                                                  break-permission 'force))))
+                    "\\pageBreak"))
 
 (define-extra-display-method EventChord (expr parser)
   (with-music-match (expr (music 'EventChord
-                           elements ((music 'LineBreakEvent
-                                            break-permission 'force)
-                                     (music 'PageBreakEvent
-                                            break-permission 'force)
-                                     (music 'PageTurnEvent
-                                            break-permission 'force))))
-    "\\pageTurn"))
+                                 elements ((music 'LineBreakEvent
+                                                  break-permission 'force)
+                                           (music 'PageBreakEvent
+                                                  break-permission 'force)
+                                           (music 'PageTurnEvent
+                                                  break-permission 'force))))
+                    "\\pageTurn"))
 
 ;;;
 ;;; Lyrics
@@ -1113,30 +1107,30 @@ Otherwise, return #f."
 ;;; \lyricsto
 (define-display-method LyricCombineMusic (expr parser)
   (format #f "\\lyricsto ~s ~a"
-         (ly:music-property expr 'associated-context)
-         (parameterize ((*explicit-mode* #f))
-           (music->lily-string (ly:music-property expr 'element) parser))))
+          (ly:music-property expr 'associated-context)
+          (parameterize ((*explicit-mode* #f))
+                        (music->lily-string (ly:music-property expr 'element) parser))))
 
 ;; \addlyrics
 (define-extra-display-method SimultaneousMusic (expr parser)
   (with-music-match (expr (music 'SimultaneousMusic
-                                elements ((music 'ContextSpeccedMusic
-                                                 context-id ?id
-                                                 context-type 'Voice
-                                                 element ?note-sequence)
-                                          (music 'ContextSpeccedMusic
-                                                 context-type 'Lyrics
-                                                 create-new #t
-                                                 element (music 'LyricCombineMusic
-                                                                associated-context ?associated-id
-                                                                element ?lyric-sequence)))))
-    (if (string=? ?id ?associated-id)
-       (format #f "~a~a \\addlyrics ~a"
-               (music->lily-string ?note-sequence parser)
-               (new-line->lily-string)
-               (parameterize ((*explicit-mode* #f))
-                 (music->lily-string ?lyric-sequence parser)))
-       #f)))
+                                 elements ((music 'ContextSpeccedMusic
+                                                  context-id ?id
+                                                  context-type 'Voice
+                                                  element ?note-sequence)
+                                           (music 'ContextSpeccedMusic
+                                                  context-type 'Lyrics
+                                                  create-new #t
+                                                  element (music 'LyricCombineMusic
+                                                                 associated-context ?associated-id
+                                                                 element ?lyric-sequence)))))
+                    (if (string=? ?id ?associated-id)
+                        (format #f "~a~a \\addlyrics ~a"
+                                (music->lily-string ?note-sequence parser)
+                                (new-line->lily-string)
+                                (parameterize ((*explicit-mode* #f))
+                                              (music->lily-string ?lyric-sequence parser)))
+                        #f)))
 
 ;; Silence internal event sent at end of each lyrics block
 (define-display-method CompletizeExtenderEvent (expr parser)
index 42aa0e023812dd51c30ec6e0342216dab33594a4..5c9c12538e03b761798e17122d5ac807ac84ce4b 100644 (file)
@@ -28,7 +28,7 @@
    (lambda (x) (apply music-property-description x))
    `(
      (absolute-octave ,integer?
-                     "The absolute octave for a octave check note.")
+                      "The absolute octave for an octave check note.")
      (alteration ,number? "Alteration for figured bass.")
      (alternative-dir ,ly:dir? "Indicates if an AlternativeMusic is the
 First (-1), Middle (0), or Last (1) of group of alternate endings.")
@@ -38,13 +38,13 @@ lettering should be incremented.")
 
 TODO: Consider making type into symbol.")
      (articulations ,ly:music-list?
-                   "Articulation events specifically for this note.")
+                    "Articulation events specifically for this note.")
      (associated-context ,string? "Name of the Voice context associated with
 this @code{\\lyricsto} section.")
-     (augmented ,boolean? "This figure is for an augmented figured bass
-(with @code{+} sign).")
-     (augmented-slash ,boolean? "This figure is for an augmented figured bass
-(back-slashed number).")
+     (augmented ,boolean? "This figure is for an augmented figured
+bass (with @code{+} sign).")
+     (augmented-slash ,boolean? "This figure is for an augmented
+figured bass (back-slashed number).")
      (automatically-numbered ,boolean? "Should a footnote be automatically
 numbered?")
      (autosplit-end ,boolean? "Duration of event was truncated by automatic
@@ -58,7 +58,7 @@ TODO: Use SpanEvents?")
      (bracket-stop ,boolean? "Stop a bracket here.")
      (break-penalty ,number? "Penalty for line break hint.")
      (break-permission ,symbol?
-                      "Whether to allow, forbid or force a line break.")
+                       "Whether to allow, forbid or force a line break.")
 
      (cautionary ,boolean? "If set, this alteration needs a
 cautionary accidental.")
@@ -89,7 +89,7 @@ simultaneous music, or the alternatives of repeated music.")
      (elements-callback ,procedure? "Return a list of children, for use by
 a sequential iterator.  Takes a single music parameter.")
      (error-found ,boolean?
-                 "If true, a parsing error was found in this expression.")
+                  "If true, a parsing error was found in this expression.")
      (events ,list? "A list of events contained in this event.")
 
      (figure ,integer? "A bass figure.")
@@ -133,8 +133,6 @@ For chord inversions, this is negative.")
      (ops ,scheme? "The operations to apply during the creation of a
 context.")
      (origin ,ly:input-location? "Where was this piece of music defined?")
-     (original-chord ,ly:music? "Original chord of a repeated chord.
-Used by repeated chords in \\relative mode, to determine the first note octave")
      (ottava-number ,integer? "The octavation for @code{\\ottava}.")
 
      (page-break-permission ,symbol? "When the music is at top-level,
@@ -145,14 +143,12 @@ top-level, a page marker object is instanciated instead of a score.")
      (page-turn-permission ,symbol? "When the music is at top-level,
 whether to allow, forbid or force a page turn.")
      (parenthesize ,boolean? "Enclose resulting objects in parentheses?")
-     (partial-duration ,ly:duration? "The length of a partial measure as a
-duration.")
      (part-combine-status ,symbol? "Change to what kind of state?
 Options are @code{solo1}, @code{solo2} and @code{unisono}.")
      (pitch ,ly:pitch? "The pitch of this note.")
      (pitch-alist ,list? "A list of pitches jointly forming the scale
 of a key signature.")
-     (pop-first ,boolean? "Do a revert before we try to do a override
+     (pop-first ,boolean? "Do a revert before we try to do an override
 on some grob property.")
      (prob-property ,symbol? "The symbol of the prob property to set.")
      (procedure ,procedure? "The function to run with @code{\\applycontext}.
@@ -181,8 +177,8 @@ If zero, signals a beat containing varying durations.")
      (span-direction ,ly:dir? "Does this start or stop a spanner?")
      (span-type ,symbol? "What kind of dynamic spanner should be created?
 Options are @code{'text} and @code{'hairpin}.")
-     (span-text ,markup? "The displayed text for dynamic text spanners
-(e.g., cresc.)")
+     (span-text ,markup? "The displayed text for dynamic text
+spanners (e.g., cresc.)")
      (spanner-id ,string? "Identifier to distinguish concurrent spanners.")
      (split-list ,list? "Splitting moments for part combiner.")
      (start-callback ,procedure? "Function to compute the negative length
@@ -222,8 +218,8 @@ repeat element list.")
 FIXME: Naming.")
 
      (X-offset ,number?
-              "Offset of resulting grob; only used for balloon texts.")
+               "Offset of resulting grob; only used for balloon texts.")
 
      (Y-offset ,number?
-              "Offset of resulting grob; only used for balloon texts.")
-    )))
+               "Offset of resulting grob; only used for balloon texts.")
+     )))
index 0b828c1516c161f78e1a98d67b37954d629b64a5..184b4e54850ad3eb911120d05a40fc71c60ffd5a 100644 (file)
@@ -1,7 +1,7 @@
 ;;;; This file is part of LilyPond, the GNU music typesetter.
 ;;;;
 ;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-;;;;                Jan Nieuwenhuizen <janneke@gnu.org>
+;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;;
 ;;;; LilyPond is free software: you can redistribute it and/or modify
 ;;;; it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-; for define-safe-public when byte-compiling using Guile V2
+;; for define-safe-public when byte-compiling using Guile V2
 (use-modules (scm safe-utility-defs))
 
 ;; TODO: should link back into user manual.
 Syntax: @var{note}@code{\\x}, where @code{\\x} is a dynamic mark like
 @code{\\ppp} or @code{\\sfz}.  A complete list is in file
 @file{ly/@/dynamic-scripts-init.ly}.")
-       (types . (general-music post-event event dynamic-event absolute-dynamic-event))
-       ))
+        (types . (general-music post-event event dynamic-event absolute-dynamic-event))
+        ))
 
     (AlternativeEvent
-     . ((description . "Create a alternative event.")
+     . ((description . "Create an alternative event.")
         (types . (general-music event alternative-event))
-       ))
+        ))
 
     (AnnotateOutputEvent
      . ((description . "Print an annotation of an output element.")
-       (types . (general-music event annotate-output-event))
-       ))
+        (types . (general-music event annotate-output-event post-event))
+        ))
 
     (ApplyContext
      . ((description . "Call the argument with the current context during
 interpreting phase.")
-       (types . (general-music apply-context))
-       (iterator-ctor . ,ly:apply-context-iterator::constructor)
-       ))
+        (types . (general-music apply-context))
+        (iterator-ctor . ,ly:apply-context-iterator::constructor)
+        ))
 
     (ApplyOutputEvent
      . ((description . "Call the argument with all current grobs during
@@ -57,110 +57,110 @@ Syntax: @code{\\applyOutput #'@var{context} @var{func}}
 
 Arguments to @var{func} are 1.@tie{}the grob, 2.@tie{}the originating
 context, and 3.@tie{}the context where @var{func} is called.")
-       (types . (general-music event apply-output-event))
-       ))
+        (types . (general-music event apply-output-event))
+        ))
 
     (ArpeggioEvent
      . ((description . "Make an arpeggio on this note.
 
 Syntax: @w{@var{note}@code{-\\arpeggio}}")
-       (types . (general-music post-event arpeggio-event event))
-       ))
+        (types . (general-music post-event arpeggio-event event))
+        ))
 
     ;; todo: use articulation-event for slur as well.
     ;; separate non articulation scripts
     (ArticulationEvent
      . ((description . "Add an articulation marking to a note.
 
-Syntax: @var{note}@code{x}@code{y}, where @code{x} is a direction
-(@code{^} for up or @code{_} for down), or LilyPond's choice
-(no direction specified), and where @code{y} is an articulation
-(such as @w{@code{-.}}, @w{@code{->}}, @code{\\tenuto}, @code{\\downbow}).
+Syntax: @var{note}@code{x}@code{y}, where @code{x} is a direction\
+\n(@code{^} for up or @code{_} for down), or LilyPond's choice\
+\n(no direction specified), and where @code{y} is an articulation\
+\n(such as @w{@code{-.}}, @w{@code{->}}, @code{\\tenuto}, @code{\\downbow}).
 See the Notation Reference for details.")
-       (types . (general-music post-event event articulation-event script-event))
-       ))
+        (types . (general-music post-event event articulation-event script-event))
+        ))
 
     (AutoChangeMusic
      . ((description . "Used for making voices that switch between
 piano staves automatically.")
-       (iterator-ctor . ,ly:auto-change-iterator::constructor)
-       (start-callback . ,ly:music-wrapper::start-callback)
-       (length-callback . ,ly:music-wrapper::length-callback)
-       (types . (general-music music-wrapper-music auto-change-instruction))
-       ))
+        (iterator-ctor . ,ly:auto-change-iterator::constructor)
+        (start-callback . ,ly:music-wrapper::start-callback)
+        (length-callback . ,ly:music-wrapper::length-callback)
+        (types . (general-music music-wrapper-music auto-change-instruction))
+        ))
 
     (BarCheck
      . ((description . "Check whether this music coincides with
 the start of the measure.")
-       (types . (general-music bar-check))
-       (iterator-ctor . ,ly:bar-check-iterator::constructor)
-       ))
+        (types . (general-music bar-check))
+        (iterator-ctor . ,ly:bar-check-iterator::constructor)
+        ))
 
     (BassFigureEvent
      . ((description . "Print a bass-figure text.")
-       (types . (general-music event rhythmic-event bass-figure-event))
-       ))
+        (types . (general-music event rhythmic-event bass-figure-event))
+        ))
 
     (BeamEvent
      . ((description . "Start or stop a beam.
 
 Syntax for manual control: @code{c8-[ c c-] c8}")
-       (types . (general-music post-event event beam-event span-event))
-       ))
+        (types . (general-music post-event event beam-event span-event))
+        ))
 
     (BeamForbidEvent
      . ((description . "Specify that a note may not auto-beamed.")
-       (types . (general-music post-event event beam-forbid-event))
-       ))
+        (types . (general-music post-event event beam-forbid-event))
+        ))
 
     (BreakDynamicSpanEvent
      . ((description . "End an alignment spanner for dynamics here.")
-       (types . (general-music post-event break-span-event break-dynamic-span-event event))
-       ))
+        (types . (general-music post-event break-span-event break-dynamic-span-event event))
+        ))
 
     (BendAfterEvent
      . ((description . "A drop/@/fall/@/doit jazz articulation.")
-       (types . (general-music post-event bend-after-event event))))
+        (types . (general-music post-event bend-after-event event))))
 
     (BreathingEvent
      . ((description . "Create a @q{breath mark} or @q{comma}.
 
 Syntax: @var{note}@code{\\breathe}")
 
-       (types . (general-music event breathing-event))
-       ))
+        (types . (general-music event breathing-event))
+        ))
 
     (ClusterNoteEvent
      . ((description . "A note that is part of a cluster.")
-       ;; not a note-event, to ensure that Note_heads_engraver doesn't eat it.
-       (iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
-       (types . (general-music cluster-note-event melodic-event
-                 rhythmic-event event))
-       ))
+        ;; not a note-event, to ensure that Note_heads_engraver doesn't eat it.
+        (iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
+        (types . (general-music cluster-note-event melodic-event
+                                rhythmic-event event))
+        ))
 
     (CompletizeExtenderEvent
      . ((description . "Used internally to signal the end of a lyrics block to
 ensure extenders are completed correctly when a @code{Lyrics} context ends
 before its associated @code{Voice} context.")
-       (types . (general-music completize-extender-event event))
-       ))
+        (types . (general-music completize-extender-event event))
+        ))
 
     (ContextChange
      . ((description . "Change staves in Piano staff.
 
 Syntax: @code{\\change Staff = @var{new-id}}")
-       (iterator-ctor . ,ly:change-iterator::constructor)
-       (types . (general-music translator-change-instruction))
-       ))
+        (iterator-ctor . ,ly:change-iterator::constructor)
+        (types . (general-music translator-change-instruction))
+        ))
 
     (ContextSpeccedMusic
      . ((description . "Interpret the argument music within a
 specific context.")
-       (iterator-ctor . ,ly:context-specced-music-iterator::constructor)
-       (length-callback . ,ly:music-wrapper::length-callback)
-       (start-callback . ,ly:music-wrapper::start-callback)
-       (types . (context-specification general-music music-wrapper-music))
-       ))
+        (iterator-ctor . ,ly:context-specced-music-iterator::constructor)
+        (length-callback . ,ly:music-wrapper::length-callback)
+        (start-callback . ,ly:music-wrapper::start-callback)
+        (types . (context-specification general-music music-wrapper-music))
+        ))
 
     (CrescendoEvent
      . ((description . "Begin or end a crescendo.
@@ -169,9 +169,9 @@ Syntax: @var{note}@code{\\<} @dots{} @var{note}@code{\\!}
 
 An alternative syntax is @var{note}@code{\\cr} @dots{}
 @var{note}@code{\\endcr}.")
-       (types . (general-music post-event span-event span-dynamic-event crescendo-event
-                 event))
-       ))
+        (types . (general-music post-event span-event span-dynamic-event crescendo-event
+                                event))
+        ))
 
     (DecrescendoEvent
      . ((description . "Begin or end a decrescendo.
@@ -180,24 +180,24 @@ Syntax: @var{note}@code{\\>} @dots{} @var{note}@code{\\!}
 
 An alternative syntax is @var{note}@code{\\decr} @dots{}
 @var{note}@code{\\enddecr}.")
-       (types . (general-music post-event span-event span-dynamic-event decrescendo-event
-                 event))
-       ))
+        (types . (general-music post-event span-event span-dynamic-event decrescendo-event
+                                event))
+        ))
 
     (DoublePercentEvent
      . ((description . "Used internally to signal double percent repeats.")
-       (types . (general-music event double-percent-event rhythmic-event))
-       ))
+        (types . (general-music event double-percent-event rhythmic-event))
+        ))
 
     (EpisemaEvent
      . ((description . "Begin or end an episema.")
-       (types . (general-music post-event span-event event episema-event))
-       ))
+        (types . (general-music post-event span-event event episema-event))
+        ))
 
     (Event
      . ((description . "Atomic music event.")
-       (types . (general-music event))
-       ))
+        (types . (general-music event))
+        ))
 
     (EventChord
      . ((description . "Explicitly entered chords.
@@ -209,96 +209,96 @@ attached by the parser just follow any rhythmic events in
 
 An unexpanded chord repetition @samp{q} is recognizable by having its
 duration stored in @code{duration}.")
-       (iterator-ctor . ,ly:event-chord-iterator::constructor)
-       (length-callback . ,ly:music-sequence::event-chord-length-callback)
-       (to-relative-callback .
-        ,ly:music-sequence::event-chord-relative-callback)
-       (types . (general-music event-chord simultaneous-music))
-       ))
+        (iterator-ctor . ,ly:event-chord-iterator::constructor)
+        (length-callback . ,ly:music-sequence::event-chord-length-callback)
+        (to-relative-callback .
+                              ,ly:music-sequence::event-chord-relative-callback)
+        (types . (general-music event-chord simultaneous-music))
+        ))
 
     (ExtenderEvent
      . ((description . "Extend lyrics.")
-       (types . (general-music post-event extender-event event))
-       ))
+        (types . (general-music post-event extender-event event))
+        ))
 
     (FingeringEvent
      . ((description . "Specify what finger to use for this note.")
-       (types . (general-music post-event fingering-event event))
-       ))
+        (types . (general-music post-event fingering-event event))
+        ))
 
     (FootnoteEvent
      . ((description . "Footnote a grob.")
-       (types . (general-music event footnote-event))
-       ))
+        (types . (general-music event footnote-event))
+        ))
 
     (GlissandoEvent
      . ((description . "Start a glissando on this note.")
-       (types . (general-music post-event glissando-event event))
-       ))
+        (types . (general-music post-event glissando-event event))
+        ))
 
     (GraceMusic
      . ((description . "Interpret the argument as grace notes.")
-       (start-callback . ,ly:grace-music::start-callback)
-       (length . ,ZERO-MOMENT)
-       (iterator-ctor . ,ly:grace-iterator::constructor)
-       (types . (grace-music music-wrapper-music general-music))
-       ))
+        (start-callback . ,ly:grace-music::start-callback)
+        (length . ,ZERO-MOMENT)
+        (iterator-ctor . ,ly:grace-iterator::constructor)
+        (types . (grace-music music-wrapper-music general-music))
+        ))
 
     (HarmonicEvent
      . ((description . "Mark a note as harmonic.")
-       (types . (general-music post-event event harmonic-event))
-       ))
+        (types . (general-music post-event event harmonic-event))
+        ))
 
     (HyphenEvent
      . ((description . "A hyphen between lyric syllables.")
-       (types . (general-music post-event hyphen-event event))
-       ))
+        (types . (general-music post-event hyphen-event event))
+        ))
 
     (KeyChangeEvent
      . ((description . "Change the key signature.
 
 Syntax: @code{\\key} @var{name} @var{scale}")
-       (to-relative-callback . ,(lambda (x p) p))
-       (types . (general-music key-change-event event))
-       ))
+        (to-relative-callback . ,(lambda (x p) p))
+        (types . (general-music key-change-event event))
+        ))
 
     (LabelEvent
      . ((description . "Place a bookmarking label.")
-       (types . (general-music label-event event))
-       ))
+        (types . (general-music label-event event))
+        ))
 
     (LaissezVibrerEvent
      . ((description . "Don't damp this chord.
 
 Syntax: @var{note}@code{\\laissezVibrer}")
-       (types . (general-music post-event event laissez-vibrer-event))
-       ))
+        (types . (general-music post-event event laissez-vibrer-event))
+        ))
 
     (LigatureEvent
      . ((description . "Start or end a ligature.")
-       (types . (general-music span-event ligature-event event))
-       ))
+        (types . (general-music span-event ligature-event event))
+        ))
 
     (LineBreakEvent
      . ((description . "Allow, forbid or force a line break.")
-       (types . (general-music line-break-event break-event event))
-       ))
+        (types . (general-music line-break-event break-event event))
+        ))
 
     (LyricCombineMusic
      . ((description . "Align lyrics to the start of notes.
 
 Syntax: @code{\\lyricsto} @var{voicename} @var{lyrics}")
-       (length . ,ZERO-MOMENT)
-       (types . (general-music lyric-combine-music))
-       (iterator-ctor . ,ly:lyric-combine-music-iterator::constructor)
-       ))
+        (length . ,ZERO-MOMENT)
+        (types . (general-music lyric-combine-music))
+        (iterator-ctor . ,ly:lyric-combine-music-iterator::constructor)
+        ))
 
     (LyricEvent
      . ((description . "A lyric syllable.  Must be entered in lyrics mode,
 i.e., @code{\\lyrics @{ twinkle4 twinkle4 @} }.")
-       (iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
-       (types . (general-music rhythmic-event lyric-event event))
-       ))
+        (iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
+        (types . (general-music rhythmic-event lyric-event event))
+        ))
 
     (MarkEvent
      . ((description . "Insert a rehearsal mark.
@@ -306,24 +306,29 @@ i.e., @code{\\lyrics @{ twinkle4 twinkle4 @} }.")
 Syntax: @code{\\mark} @var{marker}
 
 Example: @code{\\mark \"A\"}")
-       (types . (general-music mark-event event))
-       ))
+        (types . (general-music mark-event event))
+        ))
+
+    (MeasureCounterEvent
+     . ((description . "Used to signal the start and end of a measure count.")
+        (types . (general-music measure-counter-event span-event event))
+        ))
 
     (MultiMeasureRestEvent
      . ((description . "Used internally by @code{MultiMeasureRestMusic}
 to signal rests.")
-       (types . (general-music event rhythmic-event
-                 multi-measure-rest-event))
-       ))
+        (types . (general-music event rhythmic-event
+                                multi-measure-rest-event))
+        ))
 
     (MultiMeasureRestMusic
      . ((description . "Rests that may be compressed into Multi rests.
 
 Syntax: @code{R2.*4} for 4 measures in 3/4 time.")
-       (iterator-ctor . ,ly:sequential-iterator::constructor)
-       (elements-callback . ,mm-rest-child-list)
-       (types . (general-music multi-measure-rest))
-       ))
+        (iterator-ctor . ,ly:sequential-iterator::constructor)
+        (elements-callback . ,mm-rest-child-list)
+        (types . (general-music multi-measure-rest))
+        ))
 
     (MultiMeasureTextEvent
      . ((description . "Texts on multi measure rests.
@@ -331,13 +336,13 @@ Syntax: @code{R2.*4} for 4 measures in 3/4 time.")
 Syntax: @code{R-\\markup @{ \\roman \"bla\" @}}
 
 Note the explicit font switch.")
-       (types . (general-music post-event event multi-measure-text-event))
-       ))
+        (types . (general-music post-event event multi-measure-text-event))
+        ))
 
     (Music
      . ((description . "Generic type for music expressions.")
-       (types . (general-music))
-       ))
+        (types . (general-music))
+        ))
 
     (NoteEvent
      . ((description . "A note.
@@ -346,300 +351,313 @@ Outside of chords, any events in @code{articulations} with a listener
 are broadcast like chord articulations, the others are retained.
 
 For iteration inside of chords, @xref{EventChord}.")
-       (iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
-       (types . (general-music event note-event rhythmic-event
-                 melodic-event))
-       ))
+        (iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
+        (types . (general-music event note-event rhythmic-event
+                                melodic-event))
+        ))
 
     (NoteGroupingEvent
      . ((description . "Start or stop grouping brackets.")
-       (types . (general-music post-event event note-grouping-event))
-       ))
+        (types . (general-music post-event event note-grouping-event))
+        ))
 
     (OttavaMusic
      . ((description . "Start or stop an ottava bracket.")
-       (iterator-ctor . ,ly:sequential-iterator::constructor)
-       (elements-callback . ,make-ottava-set)
-       (types . (general-music ottava-music))
-       ))
+        (iterator-ctor . ,ly:sequential-iterator::constructor)
+        (elements-callback . ,make-ottava-set)
+        (types . (general-music ottava-music))
+        ))
 
     (OverrideProperty
      . ((description . "Extend the definition of a graphical object.
 
 Syntax: @code{\\override} [ @var{context} @code{.} ]
 @var{object} @var{property} @code{=} @var{value}")
-       (types . (general-music layout-instruction-event
-                 override-property-event))
-       (iterator-ctor . ,ly:push-property-iterator::constructor)
-       ))
+        (types . (general-music layout-instruction-event
+                                override-property-event))
+        (iterator-ctor . ,ly:push-property-iterator::constructor)
+        (untransposable . #t)
+        ))
 
     (PageBreakEvent
      . ((description . "Allow, forbid or force a page break.")
-       (types . (general-music break-event page-break-event event))
-       ))
+        (types . (general-music break-event page-break-event event))
+        ))
 
     (PageTurnEvent
      . ((description . "Allow, forbid or force a page turn.")
-       (types . (general-music break-event page-turn-event event))
-       ))
+        (types . (general-music break-event page-turn-event event))
+        ))
 
     (PartCombineForceEvent
      . ((description . "Override the part-combiner's strategy.")
-       (types . (general-music part-combine-force-event event))
-       ))
+        (types . (general-music part-combine-force-event event))
+        ))
 
     (PartialSet
      . ((description . "Create an anacrusis or upbeat (partial measure).")
-       (iterator-ctor . ,ly:partial-iterator::constructor)
-       (types . (general-music partial-set))
+        (iterator-ctor . ,ly:partial-iterator::constructor)
+        ;; The length-callback is kind of cheesy since 'elements is
+        ;; empty.  We just use that in order to get a zero length
+        ;; for the overall timing in spite of having a non-zero
+        ;; duration field.
+        (length-callback . ,ly:music-sequence::cumulative-length-callback)
+        (types . (general-music partial-set))
         ))
 
     (PartCombineMusic
      . ((description . "Combine two parts on a staff, either merged or
 as separate voices.")
-       (length-callback . ,ly:music-sequence::maximum-length-callback)
-       (start-callback . ,ly:music-sequence::minimum-start-callback)
-       (types . (general-music part-combine-music))
-       (iterator-ctor . ,ly:part-combine-iterator::constructor)
-       ))
+        (length-callback . ,ly:music-sequence::maximum-length-callback)
+        (start-callback . ,ly:music-sequence::minimum-start-callback)
+        (types . (general-music part-combine-music))
+        (iterator-ctor . ,ly:part-combine-iterator::constructor)
+        ))
 
     (PercentEvent
      . ((description . "Used internally to signal percent repeats.")
-       (types . (general-music event percent-event rhythmic-event))
-       ))
+        (types . (general-music event percent-event rhythmic-event))
+        ))
 
     (PercentRepeatedMusic
      . ((description . "Repeats encoded by percents and slashes.")
-       (iterator-ctor . ,ly:percent-repeat-iterator::constructor)
-       (start-callback .  ,ly:repeated-music::first-start)
-       (length-callback . ,ly:repeated-music::unfolded-music-length)
-       (types . (general-music repeated-music percent-repeated-music))
-       ))
+        (iterator-ctor . ,ly:percent-repeat-iterator::constructor)
+        (start-callback .  ,ly:repeated-music::first-start)
+        (length-callback . ,ly:repeated-music::unfolded-music-length)
+        (types . (general-music repeated-music percent-repeated-music))
+        ))
 
     (PesOrFlexaEvent
      . ((description . "Within a ligature, mark the previous and the
 following note to form a pes (if melody goes up) or a flexa (if melody
 goes down).")
-       (types . (general-music pes-or-flexa-event event))
-       ))
+        (types . (general-music pes-or-flexa-event event))
+        ))
 
     (PhrasingSlurEvent
      . ((description . "Start or end phrasing slur.
 
 Syntax: @var{note}@code{\\(} and @var{note}@code{\\)}")
         (spanner-id . "")
-       (types . (general-music post-event span-event event phrasing-slur-event))
-       ))
+        (types . (general-music post-event span-event event phrasing-slur-event))
+        ))
+
+    (PostEvents
+     . ((description . "Container for several postevents.
+
+This can be used to package several events into a single one.  Should not be seen outside of the parser.")
+        (types . (post-event post-event-wrapper))))
 
     (PropertySet
      . ((description . "Set a context property.
 
 Syntax: @code{\\set @var{context}.@var{prop} = @var{scheme-val}}")
-       (types . (layout-instruction-event general-music))
-       (iterator-ctor . ,ly:property-iterator::constructor)
-       ))
+        (types . (layout-instruction-event general-music))
+        (iterator-ctor . ,ly:property-iterator::constructor)
+        (untransposable . #t)
+        ))
 
     (PropertyUnset
      . ((description . "Restore the default setting for a context
 property.  See @ref{PropertySet}.
 
 Syntax: @code{\\unset @var{context}.@var{prop}}")
-       (types . (layout-instruction-event general-music))
-       (iterator-ctor . ,ly:property-unset-iterator::constructor)
-       ))
+        (types . (layout-instruction-event general-music))
+        (iterator-ctor . ,ly:property-unset-iterator::constructor)
+        ))
 
     (QuoteMusic
      . ((description . "Quote preprocessed snippets of music.")
-       (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
-       (length-callback . ,ly:music-wrapper::length-callback)
-       (start-callback . ,ly:music-wrapper::start-callback)
-       (types . (general-music music-wrapper-music))
-       ))
+        (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
+        (length-callback . ,ly:music-wrapper::length-callback)
+        (start-callback . ,ly:music-wrapper::start-callback)
+        (types . (general-music music-wrapper-music))
+        ))
 
     (RelativeOctaveCheck
      . ((description . "Check if a pitch is in the correct octave.")
-       (to-relative-callback . ,ly:relative-octave-check::relative-callback)
-       (types . (general-music relative-octave-check))
-       ))
+        (to-relative-callback . ,ly:relative-octave-check::relative-callback)
+        (types . (general-music relative-octave-check))
+        ))
 
     (RelativeOctaveMusic
      . ((description . "Music that was entered in relative octave notation.")
-       (to-relative-callback . ,ly:relative-octave-music::relative-callback)
-       (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
-       (length-callback . ,ly:music-wrapper::length-callback)
-       (start-callback . ,ly:music-wrapper::start-callback)
-       (types . (music-wrapper-music general-music relative-octave-music))
-       ))
+        (to-relative-callback . ,ly:relative-octave-music::relative-callback)
+        (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
+        (length-callback . ,ly:music-wrapper::length-callback)
+        (start-callback . ,ly:music-wrapper::start-callback)
+        (types . (music-wrapper-music general-music relative-octave-music))
+        ))
 
     (RepeatedMusic
      . ((description . "Repeat music in different ways.")
-       (types . (general-music repeated-music))
-       ))
+        (types . (general-music repeated-music))
+        ))
 
     (RepeatSlashEvent
      . ((description . "Used internally to signal beat repeats.")
-       (types . (general-music event repeat-slash-event rhythmic-event))
-       ))
+        (types . (general-music event repeat-slash-event rhythmic-event))
+        ))
 
     (RepeatTieEvent
      . ((description . "Ties for starting a second volta bracket.")
-       (types . (general-music post-event event repeat-tie-event))
-       ))
+        (types . (general-music post-event event repeat-tie-event))
+        ))
 
     (RestEvent
      . ((description . "A Rest.
 
 Syntax: @code{r4} for a quarter rest.")
-       (iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
-       (types . (general-music event rhythmic-event rest-event))
-       ))
+        (iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
+        (types . (general-music event rhythmic-event rest-event))
+        ))
 
     (RevertProperty
      . ((description . "The opposite of @ref{OverrideProperty}: remove a
 previously added property from a graphical object definition.")
-       (types . (general-music layout-instruction-event))
-       (iterator-ctor . ,ly:pop-property-iterator::constructor)
-       ))
+        (types . (general-music layout-instruction-event))
+        (iterator-ctor . ,ly:pop-property-iterator::constructor)
+        ))
 
     (ScriptEvent
      . ((description . "Add an articulation mark to a note.")
-       (types . (general-music event))
-       ))
+        (types . (general-music event))
+        ))
 
     (SequentialMusic
      . ((description . "Music expressions concatenated.
 
 Syntax: @code{\\sequential @{ @dots{} @}} or simply @code{@{ @dots{} @}}")
-       (length-callback . ,ly:music-sequence::cumulative-length-callback)
-       (start-callback . ,ly:music-sequence::first-start-callback)
-       (elements-callback . ,(lambda (m) (ly:music-property m 'elements)))
-       (iterator-ctor . ,ly:sequential-iterator::constructor)
-       (types . (general-music sequential-music))
-       ))
+        (length-callback . ,ly:music-sequence::cumulative-length-callback)
+        (start-callback . ,ly:music-sequence::first-start-callback)
+        (elements-callback . ,(lambda (m) (ly:music-property m 'elements)))
+        (iterator-ctor . ,ly:sequential-iterator::constructor)
+        (types . (general-music sequential-music))
+        ))
 
     (SimultaneousMusic
      . ((description . "Music playing together.
 
 Syntax: @code{\\simultaneous @{ @dots{} @}} or @code{<< @dots{} >>}")
-       (iterator-ctor . ,ly:simultaneous-music-iterator::constructor)
-       (start-callback . ,ly:music-sequence::minimum-start-callback)
-       (length-callback . ,ly:music-sequence::maximum-length-callback)
-       (to-relative-callback .
-        ,ly:music-sequence::simultaneous-relative-callback)
-       (types . (general-music simultaneous-music))
-       ))
+        (iterator-ctor . ,ly:simultaneous-music-iterator::constructor)
+        (start-callback . ,ly:music-sequence::minimum-start-callback)
+        (length-callback . ,ly:music-sequence::maximum-length-callback)
+        (to-relative-callback .
+                              ,ly:music-sequence::simultaneous-relative-callback)
+        (types . (general-music simultaneous-music))
+        ))
 
     (SkipEvent
      . ((description . "Filler that takes up duration, but does not
 print anything.
 
 Syntax: @code{s4} for a skip equivalent to a quarter rest.")
-       (iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
-       (types . (general-music event rhythmic-event skip-event))
-       ))
+        (iterator-ctor . ,ly:rhythmic-music-iterator::constructor)
+        (types . (general-music event rhythmic-event skip-event))
+        ))
 
     (SkipMusic
      . ((description . "Filler that takes up duration, does not
 print anything, and also does not create staves or voices implicitly.
 
 Syntax: @code{\\skip} @var{duration}")
-       (length-callback . ,ly:music-duration-length)
-       (iterator-ctor . ,ly:simple-music-iterator::constructor)
-       (types . (general-music event skip-event))
-       ))
+        (length-callback . ,ly:music-duration-length)
+        (iterator-ctor . ,ly:simple-music-iterator::constructor)
+        (types . (general-music event skip-event))
+        ))
 
     (SlurEvent
      . ((description . "Start or end slur.
 
 Syntax: @var{note}@code{(} and @var{note}@code{)}")
         (spanner-id . "")
-       (types . (general-music post-event span-event event slur-event))
-       ))
+        (types . (general-music post-event span-event event slur-event))
+        ))
 
     (SoloOneEvent
      . ((description . "Print @q{Solo@tie{}1}.")
-       (part-combine-status . solo1)
-       (types . (general-music event part-combine-event solo-one-event))
-       ))
+        (part-combine-status . solo1)
+        (types . (general-music event part-combine-event solo-one-event))
+        ))
 
     (SoloTwoEvent
      . ((description . "Print @q{Solo@tie{}2}.")
-       (part-combine-status . solo2)
-       (types . (general-music event part-combine-event solo-two-event))
-       ))
+        (part-combine-status . solo2)
+        (types . (general-music event part-combine-event solo-two-event))
+        ))
 
     (SostenutoEvent
      . ((description . "Depress or release sostenuto pedal.")
-       (types . (general-music post-event event pedal-event sostenuto-event))
-       ))
+        (types . (general-music post-event event pedal-event sostenuto-event))
+        ))
 
     (SpacingSectionEvent
      . ((description . "Start a new spacing section.")
-       (types . (general-music event spacing-section-event))))
+        (types . (general-music event spacing-section-event))))
 
     (SpanEvent
      . ((description . "Event for anything that is started at a
 different time than stopped.")
-       (types . (general-music event))
-       ))
+        (types . (general-music event))
+        ))
 
     (StaffSpanEvent
      . ((description . "Start or stop a staff symbol.")
-       (types . (general-music event span-event staff-span-event))
-     ))
+        (types . (general-music event span-event staff-span-event))
+        ))
 
     (StringNumberEvent
      . ((description . "Specify on which string to play this note.
 
 Syntax: @code{\\@var{number}}")
-       (types . (general-music post-event string-number-event event))
-       ))
+        (types . (general-music post-event string-number-event event))
+        ))
 
     (StrokeFingerEvent
      . ((description . "Specify with which finger to pluck a string.
 
 Syntax: @code{\\rightHandFinger @var{text}}")
-       (types . (general-music post-event stroke-finger-event event))
-       ))
+        (types . (general-music post-event stroke-finger-event event))
+        ))
 
     (SustainEvent
      . ((description . "Depress or release sustain pedal.")
-       (types . (general-music post-event event pedal-event sustain-event))
-       ))
+        (types . (general-music post-event event pedal-event sustain-event))
+        ))
 
     (TempoChangeEvent
      . ((description . "A metronome mark or tempo indication.")
-       (types . (general-music event tempo-change-event))
-       ))
+        (types . (general-music event tempo-change-event))
+        ))
 
     (TextScriptEvent
      . ((description . "Print text.")
-       (types . (general-music post-event script-event text-script-event event))
-       ))
+        (types . (general-music post-event script-event text-script-event event))
+        ))
 
     (TextSpanEvent
      . ((description . "Start a text spanner, for example, an
 octavation.")
-       (types . (general-music post-event span-event event text-span-event))
-       ))
+        (types . (general-music post-event span-event event text-span-event))
+        ))
 
     (TieEvent
      . ((description . "A tie.
 
 Syntax: @w{@var{note}@code{-~}}")
-       (types . (general-music post-event tie-event event))
-       ))
+        (types . (general-music post-event tie-event event))
+        ))
 
     (TimeScaledMusic
      . ((description . "Multiply durations, as in tuplets.
 
 Syntax: @code{\\times @var{fraction} @var{music}}, e.g.,
 @code{\\times 2/3 @{ @dots{} @}} for triplets.")
-       (length-callback . ,ly:music-wrapper::length-callback)
-       (start-callback . ,ly:music-wrapper::start-callback)
-       (iterator-ctor . ,ly:tuplet-iterator::constructor)
-       (types . (time-scaled-music music-wrapper-music general-music))
-       ))
+        (length-callback . ,ly:music-wrapper::length-callback)
+        (start-callback . ,ly:music-wrapper::start-callback)
+        (iterator-ctor . ,ly:tuplet-iterator::constructor)
+        (types . (time-scaled-music music-wrapper-music general-music))
+        ))
 
     (TimeSignatureMusic
      . ((description . "Set a new time signature")
@@ -650,87 +668,87 @@ Syntax: @code{\\times @var{fraction} @var{music}}, e.g.,
 
     (TransposedMusic
      . ((description . "Music that has been transposed.")
-       (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
-       (start-callback . ,ly:music-wrapper::start-callback)
-       (length-callback . ,ly:music-wrapper::length-callback)
-       (to-relative-callback .
-        ,ly:relative-octave-music::no-relative-callback)
-       (types . (music-wrapper-music general-music transposed-music))
-       ))
+        (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
+        (start-callback . ,ly:music-wrapper::start-callback)
+        (length-callback . ,ly:music-wrapper::length-callback)
+        (to-relative-callback .
+                              ,ly:relative-octave-music::no-relative-callback)
+        (types . (music-wrapper-music general-music transposed-music))
+        ))
 
     (TremoloEvent
      . ((description . "Unmeasured tremolo.")
-       (types . (general-music post-event event tremolo-event))
-       ))
+        (types . (general-music post-event event tremolo-event))
+        ))
 
     (TremoloRepeatedMusic
      . ((description . "Repeated notes denoted by tremolo beams.")
-       (iterator-ctor . ,ly:chord-tremolo-iterator::constructor)
-       (start-callback .  ,ly:repeated-music::first-start)
-       ;; the length of the repeat is handled by shifting the note logs
-       (length-callback . ,ly:repeated-music::folded-music-length)
-       (types . (general-music repeated-music tremolo-repeated-music))
-       ))
+        (iterator-ctor . ,ly:chord-tremolo-iterator::constructor)
+        (start-callback .  ,ly:repeated-music::first-start)
+        ;; the length of the repeat is handled by shifting the note logs
+        (length-callback . ,ly:repeated-music::folded-music-length)
+        (types . (general-music repeated-music tremolo-repeated-music))
+        ))
 
     (TremoloSpanEvent
      . ((description . "Tremolo over two stems.")
-       (types . (general-music event span-event tremolo-span-event))
-       ))
+        (types . (general-music event span-event tremolo-span-event))
+        ))
 
     (TrillSpanEvent
      . ((description . "Start a trill spanner.")
-       (types . (general-music post-event span-event event trill-span-event))
-       ))
+        (types . (general-music post-event span-event event trill-span-event))
+        ))
 
     (TupletSpanEvent
      . ((description . "Used internally to signal where tuplet
 brackets start and stop.")
-       (types . (tuplet-span-event span-event event general-music post-event))
-       ))
+        (types . (tuplet-span-event span-event event general-music post-event))
+        ))
 
     (UnaCordaEvent
      . ((description . "Depress or release una-corda pedal.")
-       (types . (general-music post-event event pedal-event una-corda-event))
-       ))
+        (types . (general-music post-event event pedal-event una-corda-event))
+        ))
 
     (UnfoldedRepeatedMusic
-     . ((description . "Repeated music which is fully written
-(and played) out.")
-       (iterator-ctor . ,ly:unfolded-repeat-iterator::constructor)
-       (start-callback .  ,ly:repeated-music::first-start)
-       (types . (general-music repeated-music unfolded-repeated-music))
-       (length-callback . ,ly:repeated-music::unfolded-music-length)
-       ))
+     . ((description . "Repeated music which is fully written (and
+played) out.")
+        (iterator-ctor . ,ly:unfolded-repeat-iterator::constructor)
+        (start-callback .  ,ly:repeated-music::first-start)
+        (types . (general-music repeated-music unfolded-repeated-music))
+        (length-callback . ,ly:repeated-music::unfolded-music-length)
+        ))
 
     (UnisonoEvent
      . ((description . "Print @q{a@tie{}2}.")
-       (part-combine-status . unisono)
-       (types . (general-music event part-combine-event unisono-event))))
+        (part-combine-status . unisono)
+        (types . (general-music event part-combine-event unisono-event))))
 
     (UnrelativableMusic
      . ((description . "Music that cannot be converted from relative
 to absolute notation.  For example, transposed music.")
-       (to-relative-callback . ,ly:relative-octave-music::no-relative-callback)
-       (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
-       (length-callback . ,ly:music-wrapper::length-callback)
-       (types . (music-wrapper-music general-music unrelativable-music))
-       ))
+        (to-relative-callback . ,ly:relative-octave-music::no-relative-callback)
+        (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
+        (length-callback . ,ly:music-wrapper::length-callback)
+        (types . (music-wrapper-music general-music unrelativable-music))
+        ))
 
     (VoiceSeparator
      . ((description . "Separate polyphonic voices in simultaneous music.
 
 Syntax: @code{\\\\}")
-       (types . (separator general-music))
-       ))
+        (types . (separator general-music))
+        ))
 
     (VoltaRepeatedMusic
      . ((description . "Repeats with alternatives placed sequentially.")
-       (iterator-ctor . ,ly:volta-repeat-iterator::constructor)
-       (elements-callback . ,make-volta-set)
-       (start-callback .  ,ly:repeated-music::first-start)
-       (length-callback . ,ly:repeated-music::volta-music-length)
-       (types . (general-music repeated-music volta-repeated-music))
-       ))
+        (iterator-ctor . ,ly:volta-repeat-iterator::constructor)
+        (elements-callback . ,make-volta-set)
+        (start-callback .  ,ly:repeated-music::first-start)
+        (length-callback . ,ly:repeated-music::volta-music-length)
+        (types . (general-music repeated-music volta-repeated-music))
+        ))
     ))
 
 (set! music-descriptions
@@ -743,48 +761,70 @@ Syntax: @code{\\\\}")
 (set!
  music-descriptions
  (map (lambda (x)
-       (set-object-property! (car x)
-                             'music-description
-                             (cdr (assq 'description (cdr x))))
-       (let ((lst (cdr x)))
-         (set! lst (assoc-set! lst 'name (car x)))
-         (set! lst (assq-remove! lst 'description))
-         (hashq-set! music-name-to-property-table (car x) lst)
-         (cons (car x) lst)))
+        (set-object-property! (car x)
+                              'music-description
+                              (cdr (assq 'description (cdr x))))
+        (let ((lst (cdr x)))
+          (set! lst (assoc-set! lst 'name (car x)))
+          (set! lst (assq-remove! lst 'description))
+          (hashq-set! music-name-to-property-table (car x) lst)
+          (cons (car x) lst)))
       music-descriptions))
 
 (define-safe-public (make-music name . music-properties)
   "Create a music object of given name, and set its properties
 according to @code{music-properties}, a list of alternating property symbols
 and values. E.g:
+@example
   (make-music 'OverrideProperty
-             'symbol 'Stem
-             'grob-property 'thickness
-             'grob-value (* 2 1.5))"
+              'symbol 'Stem
+              'grob-property 'thickness
+              'grob-value (* 2 1.5))
+@end example
+Instead of a successive symbol and value, an entry in the list may
+also be an alist or a music object in which case its elements,
+respectively its @emph{mutable} property list (properties not inherent
+to the type of the music object) will get taken.
+
+The argument list will be interpreted left-to-right, so later entries
+override earlier ones."
   (if (not (symbol? name))
       (ly:error (_ "symbol expected: ~S") name))
   (let ((props (hashq-ref music-name-to-property-table name '())))
     (if (not (pair? props))
-       (ly:error (_ "cannot find music object: ~S") name))
+        (ly:error (_ "cannot find music object: ~S") name))
     (let ((m (ly:make-music props)))
+      (define (alist-set-props lst)
+        (for-each (lambda (e)
+                    (set! (ly:music-property m (car e)) (cdr e)))
+                  (reverse lst)))
       (define (set-props mus-props)
-       (if (and (not (null? mus-props))
-                (not (null? (cdr mus-props))))
-           (begin
-             (set! (ly:music-property m (car mus-props)) (cadr mus-props))
-             (set-props (cddr mus-props)))))
+        (if (pair? mus-props)
+            (let ((e (car mus-props))
+                  (mus-props (cdr mus-props)))
+              (cond ((symbol? e)
+                     (set! (ly:music-property m e) (car mus-props))
+                     (set-props (cdr mus-props)))
+                    ((ly:music? e)
+                     (alist-set-props (ly:music-mutable-properties e))
+                     (set-props mus-props))
+                    ((cheap-list? e)
+                     (alist-set-props e)
+                     (set-props mus-props))
+                    (else
+                     (ly:error (_ "bad make-music argument: ~S") e))))))
       (set-props music-properties)
       m)))
 
 (define-public (make-repeated-music name)
   (let* ((repeated-music (assoc-get name '(("volta" . VoltaRepeatedMusic)
-                                          ("unfold" . UnfoldedRepeatedMusic)
-                                          ("percent" . PercentRepeatedMusic)
-                                          ("tremolo" . TremoloRepeatedMusic))))
-        (repeated-music-name (if repeated-music
-                                 repeated-music
-                                 (begin
-                                   (ly:warning (_ "unknown repeat type `~S'") name)
-                                   (ly:warning (_ "See define-music-types.scm for supported repeats"))
-                                   'VoltaRepeatedMusic))))
+                                           ("unfold" . UnfoldedRepeatedMusic)
+                                           ("percent" . PercentRepeatedMusic)
+                                           ("tremolo" . TremoloRepeatedMusic))))
+         (repeated-music-name (if repeated-music
+                                  repeated-music
+                                  (begin
+                                    (ly:warning (_ "unknown repeat type `~S'") name)
+                                    (ly:warning (_ "See define-music-types.scm for supported repeats"))
+                                    'VoltaRepeatedMusic))))
     (make-music repeated-music-name)))
index fbef9183f8eb9f285b249c26f211367c86c71a72..62ef21a72c2b4b9e183bdb6ac67214acae3dd138 100644 (file)
     ;;    Dutch: c  d  e  f  g  a  b  h
 
     (nederlands . (
-                  (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-                  (ceh . ,(ly:make-pitch -1 0 SEMI-FLAT))
-                  (ces . ,(ly:make-pitch -1 0 FLAT))
-                  (ceseh . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
-                  (c . ,(ly:make-pitch -1 0 NATURAL))
-                  (cis . ,(ly:make-pitch -1 0 SHARP))
-                  (cih . ,(ly:make-pitch -1 0 SEMI-SHARP))
-                  (cisih . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
-                  (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-                  (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-
-                  (deh . ,(ly:make-pitch -1 1 SEMI-FLAT))
-                  (des . ,(ly:make-pitch -1 1 FLAT))
-                  (deseh . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
-                  (d . ,(ly:make-pitch -1 1 NATURAL))
-                  (dis . ,(ly:make-pitch -1 1 SHARP))
-                  (dih . ,(ly:make-pitch -1 1 SEMI-SHARP))
-                  (disih . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
-                  (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-                  (eeses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-                  (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-
-                  (eeh . ,(ly:make-pitch -1 2 SEMI-FLAT))
-                  (ees . ,(ly:make-pitch -1 2 FLAT))
-                  (eeseh . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
-                  (es . ,(ly:make-pitch -1 2 FLAT))
-                  (e . ,(ly:make-pitch -1 2 NATURAL))
-                  (eis . ,(ly:make-pitch -1 2 SHARP))
-                  (eih . ,(ly:make-pitch -1 2 SEMI-SHARP))
-                  (eisih . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
-                  (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-                  (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-
-                  (feh . ,(ly:make-pitch -1 3 SEMI-FLAT))
-                  (fes . ,(ly:make-pitch -1 3 FLAT))
-                  (feseh . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
-                  (f . ,(ly:make-pitch -1 3 NATURAL))
-                  (fis . ,(ly:make-pitch -1 3 SHARP))
-                  (fih . ,(ly:make-pitch -1 3 SEMI-SHARP))
-                  (fisih . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
-                  (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-                  (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-
-                  (geh . ,(ly:make-pitch -1 4 SEMI-FLAT))
-                  (ges . ,(ly:make-pitch -1 4 FLAT))
-                  (geseh . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
-                  (g . ,(ly:make-pitch -1 4 NATURAL))
-                  (gis . ,(ly:make-pitch -1 4 SHARP))
-                  (gih . ,(ly:make-pitch -1 4 SEMI-SHARP))
-                  (gisih . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
-                  (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-                  (aeses . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-                  (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-
-                  (aeh . ,(ly:make-pitch -1 5 SEMI-FLAT))
-                  (aes . ,(ly:make-pitch -1 5 FLAT))
-                  (aeseh . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
-                  (as . ,(ly:make-pitch -1 5 FLAT))
-                  (a . ,(ly:make-pitch -1 5 NATURAL))
-                  (ais . ,(ly:make-pitch -1 5 SHARP))
-                  (aih . ,(ly:make-pitch -1 5 SEMI-SHARP))
-                  (aisih . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
-                  (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-                  (beses . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-
-                  (beh . ,(ly:make-pitch -1 6 SEMI-FLAT))
-                  (bes . ,(ly:make-pitch -1 6 FLAT))
-                  (beseh . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
-                  (b . ,(ly:make-pitch -1 6 NATURAL))
-                  (bis . ,(ly:make-pitch -1 6 SHARP))
-                  (bih . ,(ly:make-pitch -1 6 SEMI-SHARP))
-                  (bisih . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
-                  (bisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-                  ))
+                   (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+                   (ceh . ,(ly:make-pitch -1 0 SEMI-FLAT))
+                   (ces . ,(ly:make-pitch -1 0 FLAT))
+                   (ceseh . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
+                   (c . ,(ly:make-pitch -1 0 NATURAL))
+                   (cis . ,(ly:make-pitch -1 0 SHARP))
+                   (cih . ,(ly:make-pitch -1 0 SEMI-SHARP))
+                   (cisih . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
+                   (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+                   (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+
+                   (deh . ,(ly:make-pitch -1 1 SEMI-FLAT))
+                   (des . ,(ly:make-pitch -1 1 FLAT))
+                   (deseh . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
+                   (d . ,(ly:make-pitch -1 1 NATURAL))
+                   (dis . ,(ly:make-pitch -1 1 SHARP))
+                   (dih . ,(ly:make-pitch -1 1 SEMI-SHARP))
+                   (disih . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
+                   (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+                   (eeses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+                   (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+
+                   (eeh . ,(ly:make-pitch -1 2 SEMI-FLAT))
+                   (ees . ,(ly:make-pitch -1 2 FLAT))
+                   (eeseh . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
+                   (es . ,(ly:make-pitch -1 2 FLAT))
+                   (e . ,(ly:make-pitch -1 2 NATURAL))
+                   (eis . ,(ly:make-pitch -1 2 SHARP))
+                   (eih . ,(ly:make-pitch -1 2 SEMI-SHARP))
+                   (eisih . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
+                   (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+                   (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+
+                   (feh . ,(ly:make-pitch -1 3 SEMI-FLAT))
+                   (fes . ,(ly:make-pitch -1 3 FLAT))
+                   (feseh . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
+                   (f . ,(ly:make-pitch -1 3 NATURAL))
+                   (fis . ,(ly:make-pitch -1 3 SHARP))
+                   (fih . ,(ly:make-pitch -1 3 SEMI-SHARP))
+                   (fisih . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
+                   (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+                   (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+
+                   (geh . ,(ly:make-pitch -1 4 SEMI-FLAT))
+                   (ges . ,(ly:make-pitch -1 4 FLAT))
+                   (geseh . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
+                   (g . ,(ly:make-pitch -1 4 NATURAL))
+                   (gis . ,(ly:make-pitch -1 4 SHARP))
+                   (gih . ,(ly:make-pitch -1 4 SEMI-SHARP))
+                   (gisih . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
+                   (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+                   (aeses . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+                   (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+
+                   (aeh . ,(ly:make-pitch -1 5 SEMI-FLAT))
+                   (aes . ,(ly:make-pitch -1 5 FLAT))
+                   (aeseh . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
+                   (as . ,(ly:make-pitch -1 5 FLAT))
+                   (a . ,(ly:make-pitch -1 5 NATURAL))
+                   (ais . ,(ly:make-pitch -1 5 SHARP))
+                   (aih . ,(ly:make-pitch -1 5 SEMI-SHARP))
+                   (aisih . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
+                   (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+                   (beses . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+
+                   (beh . ,(ly:make-pitch -1 6 SEMI-FLAT))
+                   (bes . ,(ly:make-pitch -1 6 FLAT))
+                   (beseh . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
+                   (b . ,(ly:make-pitch -1 6 NATURAL))
+                   (bis . ,(ly:make-pitch -1 6 SHARP))
+                   (bih . ,(ly:make-pitch -1 6 SEMI-SHARP))
+                   (bisih . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
+                   (bisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+                   ))
 
 
     ;; Language: Catalan -----------------------------------------------;
     ;;  Catalan: do  re  mi  fa  sol la  si
 
     (catalan . (
-               (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-               (dob . ,(ly:make-pitch -1 0 FLAT))
-               (do . ,(ly:make-pitch -1 0 NATURAL))
-               (dod . ,(ly:make-pitch -1 0 SHARP))
-               (dodd . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-               (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-               (reb . ,(ly:make-pitch -1 1 FLAT))
-               (re . ,(ly:make-pitch -1 1 NATURAL))
-               (red . ,(ly:make-pitch -1 1 SHARP))
-               (redd . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-               (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-               (mib . ,(ly:make-pitch -1 2 FLAT))
-               (mi . ,(ly:make-pitch -1 2 NATURAL))
-               (mid . ,(ly:make-pitch -1 2 SHARP))
-               (midd . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-               (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-               (fab . ,(ly:make-pitch -1 3 FLAT))
-               (fa . ,(ly:make-pitch -1 3 NATURAL))
-               (fad . ,(ly:make-pitch -1 3 SHARP))
-               (fadd . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-               (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-               (solb . ,(ly:make-pitch -1 4 FLAT))
-               (sol . ,(ly:make-pitch -1 4 NATURAL))
-               (sold . ,(ly:make-pitch -1 4 SHARP))
-               (soldd . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-               (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-               (lab . ,(ly:make-pitch -1 5 FLAT))
-               (la . ,(ly:make-pitch -1 5 NATURAL))
-               (lad . ,(ly:make-pitch -1 5 SHARP))
-               (ladd . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-               (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-               (sib . ,(ly:make-pitch -1 6 FLAT))
-               (si . ,(ly:make-pitch -1 6 NATURAL))
-               (sid . ,(ly:make-pitch -1 6 SHARP))
-               (sidd . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-
-               ;; Now that we have espanol.ly, should these be junked? --jcn
-               (dos . ,(ly:make-pitch -1 0 SHARP))
-               (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-               (res . ,(ly:make-pitch -1 1 SHARP))
-               (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-               (mis . ,(ly:make-pitch -1 2 SHARP))
-               (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-               (fas . ,(ly:make-pitch -1 3 SHARP))
-               (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-               (sols . ,(ly:make-pitch -1 4 SHARP))
-               (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-               (las . ,(ly:make-pitch -1 5 SHARP))
-               (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-               (sis . ,(ly:make-pitch -1 6 SHARP))
-               (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-               ))
+                (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+                (dob . ,(ly:make-pitch -1 0 FLAT))
+                (do . ,(ly:make-pitch -1 0 NATURAL))
+                (dod . ,(ly:make-pitch -1 0 SHARP))
+                (dodd . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+                (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+                (reb . ,(ly:make-pitch -1 1 FLAT))
+                (re . ,(ly:make-pitch -1 1 NATURAL))
+                (red . ,(ly:make-pitch -1 1 SHARP))
+                (redd . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+                (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+                (mib . ,(ly:make-pitch -1 2 FLAT))
+                (mi . ,(ly:make-pitch -1 2 NATURAL))
+                (mid . ,(ly:make-pitch -1 2 SHARP))
+                (midd . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+                (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+                (fab . ,(ly:make-pitch -1 3 FLAT))
+                (fa . ,(ly:make-pitch -1 3 NATURAL))
+                (fad . ,(ly:make-pitch -1 3 SHARP))
+                (fadd . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+                (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+                (solb . ,(ly:make-pitch -1 4 FLAT))
+                (sol . ,(ly:make-pitch -1 4 NATURAL))
+                (sold . ,(ly:make-pitch -1 4 SHARP))
+                (soldd . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+                (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+                (lab . ,(ly:make-pitch -1 5 FLAT))
+                (la . ,(ly:make-pitch -1 5 NATURAL))
+                (lad . ,(ly:make-pitch -1 5 SHARP))
+                (ladd . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+                (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+                (sib . ,(ly:make-pitch -1 6 FLAT))
+                (si . ,(ly:make-pitch -1 6 NATURAL))
+                (sid . ,(ly:make-pitch -1 6 SHARP))
+                (sidd . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+
+                ;; Now that we have espanol.ly, should these be junked? --jcn
+                (dos . ,(ly:make-pitch -1 0 SHARP))
+                (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+                (res . ,(ly:make-pitch -1 1 SHARP))
+                (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+                (mis . ,(ly:make-pitch -1 2 SHARP))
+                (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+                (fas . ,(ly:make-pitch -1 3 SHARP))
+                (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+                (sols . ,(ly:make-pitch -1 4 SHARP))
+                (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+                (las . ,(ly:make-pitch -1 5 SHARP))
+                (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+                (sis . ,(ly:make-pitch -1 6 SHARP))
+                (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+                ))
 
 
     ;; Language: Deutsch -----------------------------------------------;
     ;;   German: c  d  e  f  g  a  b  h
 
     (deutsch . (
-               (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-               (ceseh . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
-               (ces . ,(ly:make-pitch -1 0 FLAT))
-               (ceh . ,(ly:make-pitch -1 0 SEMI-FLAT))
-               (c . ,(ly:make-pitch -1 0 NATURAL))
-               (cih . ,(ly:make-pitch -1 0 SEMI-SHARP))
-               (cis . ,(ly:make-pitch -1 0 SHARP))
-               (cisih . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
-               (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-
-               (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-               (deseh . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
-               (des . ,(ly:make-pitch -1 1 FLAT))
-               (deh . ,(ly:make-pitch -1 1 SEMI-FLAT))
-               (d . ,(ly:make-pitch -1 1 NATURAL))
-               (dih . ,(ly:make-pitch -1 1 SEMI-SHARP))
-               (dis . ,(ly:make-pitch -1 1 SHARP))
-               (disih . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
-               (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-
-               (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-               (eseh . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
-               (es . ,(ly:make-pitch -1 2 FLAT))
-               (eeh . ,(ly:make-pitch -1 2 SEMI-FLAT))
-               (e . ,(ly:make-pitch -1 2 NATURAL))
-               (eih . ,(ly:make-pitch -1 2 SEMI-SHARP))
-               (eis . ,(ly:make-pitch -1 2 SHARP))
-               (eisih . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
-               (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-
-               (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-               (feseh . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
-               (fes . ,(ly:make-pitch -1 3 FLAT))
-               (feh . ,(ly:make-pitch -1 3 SEMI-FLAT))
-               (f . ,(ly:make-pitch -1 3 NATURAL))
-               (fih . ,(ly:make-pitch -1 3 SEMI-SHARP))
-               (fis . ,(ly:make-pitch -1 3 SHARP))
-               (fisih . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
-               (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-
-               (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-               (geseh . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
-               (ges . ,(ly:make-pitch -1 4 FLAT))
-               (geh . ,(ly:make-pitch -1 4 SEMI-FLAT))
-               (g . ,(ly:make-pitch -1 4 NATURAL))
-               (gih . ,(ly:make-pitch -1 4 SEMI-SHARP))
-               (gis . ,(ly:make-pitch -1 4 SHARP))
-               (gisih . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
-               (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-
-               (asas . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-               (asah . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
-               (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT))   ;;non-standard name for asas
-               (aseh . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
-               (as . ,(ly:make-pitch -1 5 FLAT))
-               (aeh . ,(ly:make-pitch -1 5 SEMI-FLAT))
-               (a . ,(ly:make-pitch -1 5 NATURAL))
-               (aih . ,(ly:make-pitch -1 5 SEMI-SHARP))
-               (ais . ,(ly:make-pitch -1 5 SHARP))
-               (aisih . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
-               (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-
-               (heses . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-               (heseh . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
-               (b . ,(ly:make-pitch -1 6 FLAT))
-               (beh . ,(ly:make-pitch -1 6 SEMI-FLAT))
-               (h . ,(ly:make-pitch -1 6 NATURAL))
-               (hih . ,(ly:make-pitch -1 6 SEMI-SHARP))
-               (his . ,(ly:make-pitch -1 6 SHARP))
-               (hisih . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
-               (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-               ))
+                (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+                (ceseh . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
+                (ces . ,(ly:make-pitch -1 0 FLAT))
+                (ceh . ,(ly:make-pitch -1 0 SEMI-FLAT))
+                (c . ,(ly:make-pitch -1 0 NATURAL))
+                (cih . ,(ly:make-pitch -1 0 SEMI-SHARP))
+                (cis . ,(ly:make-pitch -1 0 SHARP))
+                (cisih . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
+                (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+
+                (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+                (deseh . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
+                (des . ,(ly:make-pitch -1 1 FLAT))
+                (deh . ,(ly:make-pitch -1 1 SEMI-FLAT))
+                (d . ,(ly:make-pitch -1 1 NATURAL))
+                (dih . ,(ly:make-pitch -1 1 SEMI-SHARP))
+                (dis . ,(ly:make-pitch -1 1 SHARP))
+                (disih . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
+                (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+
+                (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+                (eseh . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
+                (es . ,(ly:make-pitch -1 2 FLAT))
+                (eeh . ,(ly:make-pitch -1 2 SEMI-FLAT))
+                (e . ,(ly:make-pitch -1 2 NATURAL))
+                (eih . ,(ly:make-pitch -1 2 SEMI-SHARP))
+                (eis . ,(ly:make-pitch -1 2 SHARP))
+                (eisih . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
+                (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+
+                (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+                (feseh . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
+                (fes . ,(ly:make-pitch -1 3 FLAT))
+                (feh . ,(ly:make-pitch -1 3 SEMI-FLAT))
+                (f . ,(ly:make-pitch -1 3 NATURAL))
+                (fih . ,(ly:make-pitch -1 3 SEMI-SHARP))
+                (fis . ,(ly:make-pitch -1 3 SHARP))
+                (fisih . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
+                (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+
+                (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+                (geseh . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
+                (ges . ,(ly:make-pitch -1 4 FLAT))
+                (geh . ,(ly:make-pitch -1 4 SEMI-FLAT))
+                (g . ,(ly:make-pitch -1 4 NATURAL))
+                (gih . ,(ly:make-pitch -1 4 SEMI-SHARP))
+                (gis . ,(ly:make-pitch -1 4 SHARP))
+                (gisih . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
+                (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+
+                (asas . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+                (asah . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
+                (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT))   ;;non-standard name for asas
+                (aseh . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
+                (as . ,(ly:make-pitch -1 5 FLAT))
+                (aeh . ,(ly:make-pitch -1 5 SEMI-FLAT))
+                (a . ,(ly:make-pitch -1 5 NATURAL))
+                (aih . ,(ly:make-pitch -1 5 SEMI-SHARP))
+                (ais . ,(ly:make-pitch -1 5 SHARP))
+                (aisih . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
+                (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+
+                (heses . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+                (heseh . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
+                (b . ,(ly:make-pitch -1 6 FLAT))
+                (beh . ,(ly:make-pitch -1 6 SEMI-FLAT))
+                (h . ,(ly:make-pitch -1 6 NATURAL))
+                (hih . ,(ly:make-pitch -1 6 SEMI-SHARP))
+                (his . ,(ly:make-pitch -1 6 SHARP))
+                (hisih . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
+                (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+                ))
 
 
     ;; Language: English -----------------------------------------------;
     ;;  tqs = three-quarter[-tones] sharp
 
     (english . (
-               (cflatflat . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-               (cflat . ,(ly:make-pitch -1 0 FLAT))
-               (c . ,(ly:make-pitch -1 0 NATURAL))
-               (csharp . ,(ly:make-pitch -1 0 SHARP))
-               (csharpsharp . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-               (dflatflat . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-               (dflat . ,(ly:make-pitch -1 1 FLAT))
-               (d . ,(ly:make-pitch -1 1 NATURAL))
-               (dsharp . ,(ly:make-pitch -1 1 SHARP))
-               (dsharpsharp . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-               (eflatflat . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-               (eflat . ,(ly:make-pitch -1 2 FLAT))
-               (e . ,(ly:make-pitch -1 2 NATURAL))
-               (esharp . ,(ly:make-pitch -1 2 SHARP))
-               (esharpsharp . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-               (fflatflat . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-               (fflat . ,(ly:make-pitch -1 3 FLAT))
-               (f . ,(ly:make-pitch -1 3 NATURAL))
-               (fsharp . ,(ly:make-pitch -1 3 SHARP))
-               (fsharpsharp . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-               (gflatflat . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-               (gflat . ,(ly:make-pitch -1 4 FLAT))
-               (g . ,(ly:make-pitch -1 4 NATURAL))
-               (gsharp . ,(ly:make-pitch -1 4 SHARP))
-               (gsharpsharp . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-               (aflatflat . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-               (aflat . ,(ly:make-pitch -1 5 FLAT))
-               (a . ,(ly:make-pitch -1 5 NATURAL))
-               (asharp . ,(ly:make-pitch -1 5 SHARP))
-               (asharpsharp . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-               (bflatflat . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-               (bflat . ,(ly:make-pitch -1 6 FLAT))
-               (b . ,(ly:make-pitch -1 6 NATURAL))
-               (bsharp . ,(ly:make-pitch -1 6 SHARP))
-               (bsharpsharp . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-
-               (cff . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-               (ctqf . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
-               (cf . ,(ly:make-pitch -1 0 FLAT))
-               (cqf . ,(ly:make-pitch -1 0 SEMI-FLAT))
-               (c . ,(ly:make-pitch -1 0 NATURAL))
-               (cqs . ,(ly:make-pitch -1 0 SEMI-SHARP))
-               (cs . ,(ly:make-pitch -1 0 SHARP))
-               (ctqs . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
-               (css . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-               (cx . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-
-               (dff . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-               (dtqf . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
-               (df . ,(ly:make-pitch -1 1 FLAT))
-               (dqf . ,(ly:make-pitch -1 1 SEMI-FLAT))
-               (d . ,(ly:make-pitch -1 1 NATURAL))
-               (dqs . ,(ly:make-pitch -1 1 SEMI-SHARP))
-               (ds . ,(ly:make-pitch -1 1 SHARP))
-               (dtqs . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
-               (dss . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-               (dx . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-
-               (eff . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-               (etqf . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
-               (ef . ,(ly:make-pitch -1 2 FLAT))
-               (eqf . ,(ly:make-pitch -1 2 SEMI-FLAT))
-               (e . ,(ly:make-pitch -1 2 NATURAL))
-               (eqs . ,(ly:make-pitch -1 2 SEMI-SHARP))
-               (es . ,(ly:make-pitch -1 2 SHARP))
-               (etqs . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
-               (ess . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-               (ex . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-
-               (fff . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-               (ftqf . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
-               (ff . ,(ly:make-pitch -1 3 FLAT))
-               (fqf . ,(ly:make-pitch -1 3 SEMI-FLAT))
-               (f . ,(ly:make-pitch -1 3 NATURAL))
-               (fqs . ,(ly:make-pitch -1 3 SEMI-SHARP))
-               (fs . ,(ly:make-pitch -1 3 SHARP))
-               (ftqs . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
-               (fss . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-               (fx . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-
-               (gff . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-               (gtqf . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
-               (gf . ,(ly:make-pitch -1 4 FLAT))
-               (gqf . ,(ly:make-pitch -1 4 SEMI-FLAT))
-               (g . ,(ly:make-pitch -1 4 NATURAL))
-               (gqs . ,(ly:make-pitch -1 4 SEMI-SHARP))
-               (gs . ,(ly:make-pitch -1 4 SHARP))
-               (gtqs . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
-               (gss . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-               (gx . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-
-               (aff . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-               (atqf . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
-               (af . ,(ly:make-pitch -1 5 FLAT))
-               (aqf . ,(ly:make-pitch -1 5 SEMI-FLAT))
-               (a . ,(ly:make-pitch -1 5 NATURAL))
-               (aqs . ,(ly:make-pitch -1 5 SEMI-SHARP))
-               (as . ,(ly:make-pitch -1 5 SHARP))
-               (atqs . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
-               (ass . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-               (ax . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-
-               (bff . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-               (btqf . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
-               (bf . ,(ly:make-pitch -1 6 FLAT))
-               (bqf . ,(ly:make-pitch -1 6 SEMI-FLAT))
-               (b . ,(ly:make-pitch -1 6 NATURAL))
-               (bqs . ,(ly:make-pitch -1 6 SEMI-SHARP))
-               (bs . ,(ly:make-pitch -1 6 SHARP))
-               (btqs . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
-               (bss . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-               (bx . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-               ))
+                (cflatflat . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+                (cflat . ,(ly:make-pitch -1 0 FLAT))
+                (c . ,(ly:make-pitch -1 0 NATURAL))
+                (csharp . ,(ly:make-pitch -1 0 SHARP))
+                (csharpsharp . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+                (dflatflat . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+                (dflat . ,(ly:make-pitch -1 1 FLAT))
+                (d . ,(ly:make-pitch -1 1 NATURAL))
+                (dsharp . ,(ly:make-pitch -1 1 SHARP))
+                (dsharpsharp . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+                (eflatflat . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+                (eflat . ,(ly:make-pitch -1 2 FLAT))
+                (e . ,(ly:make-pitch -1 2 NATURAL))
+                (esharp . ,(ly:make-pitch -1 2 SHARP))
+                (esharpsharp . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+                (fflatflat . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+                (fflat . ,(ly:make-pitch -1 3 FLAT))
+                (f . ,(ly:make-pitch -1 3 NATURAL))
+                (fsharp . ,(ly:make-pitch -1 3 SHARP))
+                (fsharpsharp . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+                (gflatflat . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+                (gflat . ,(ly:make-pitch -1 4 FLAT))
+                (g . ,(ly:make-pitch -1 4 NATURAL))
+                (gsharp . ,(ly:make-pitch -1 4 SHARP))
+                (gsharpsharp . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+                (aflatflat . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+                (aflat . ,(ly:make-pitch -1 5 FLAT))
+                (a . ,(ly:make-pitch -1 5 NATURAL))
+                (asharp . ,(ly:make-pitch -1 5 SHARP))
+                (asharpsharp . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+                (bflatflat . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+                (bflat . ,(ly:make-pitch -1 6 FLAT))
+                (b . ,(ly:make-pitch -1 6 NATURAL))
+                (bsharp . ,(ly:make-pitch -1 6 SHARP))
+                (bsharpsharp . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+
+                (cff . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+                (ctqf . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
+                (cf . ,(ly:make-pitch -1 0 FLAT))
+                (cqf . ,(ly:make-pitch -1 0 SEMI-FLAT))
+                (c . ,(ly:make-pitch -1 0 NATURAL))
+                (cqs . ,(ly:make-pitch -1 0 SEMI-SHARP))
+                (cs . ,(ly:make-pitch -1 0 SHARP))
+                (ctqs . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
+                (css . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+                (cx . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+
+                (dff . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+                (dtqf . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
+                (df . ,(ly:make-pitch -1 1 FLAT))
+                (dqf . ,(ly:make-pitch -1 1 SEMI-FLAT))
+                (d . ,(ly:make-pitch -1 1 NATURAL))
+                (dqs . ,(ly:make-pitch -1 1 SEMI-SHARP))
+                (ds . ,(ly:make-pitch -1 1 SHARP))
+                (dtqs . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
+                (dss . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+                (dx . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+
+                (eff . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+                (etqf . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
+                (ef . ,(ly:make-pitch -1 2 FLAT))
+                (eqf . ,(ly:make-pitch -1 2 SEMI-FLAT))
+                (e . ,(ly:make-pitch -1 2 NATURAL))
+                (eqs . ,(ly:make-pitch -1 2 SEMI-SHARP))
+                (es . ,(ly:make-pitch -1 2 SHARP))
+                (etqs . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
+                (ess . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+                (ex . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+
+                (fff . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+                (ftqf . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
+                (ff . ,(ly:make-pitch -1 3 FLAT))
+                (fqf . ,(ly:make-pitch -1 3 SEMI-FLAT))
+                (f . ,(ly:make-pitch -1 3 NATURAL))
+                (fqs . ,(ly:make-pitch -1 3 SEMI-SHARP))
+                (fs . ,(ly:make-pitch -1 3 SHARP))
+                (ftqs . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
+                (fss . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+                (fx . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+
+                (gff . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+                (gtqf . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
+                (gf . ,(ly:make-pitch -1 4 FLAT))
+                (gqf . ,(ly:make-pitch -1 4 SEMI-FLAT))
+                (g . ,(ly:make-pitch -1 4 NATURAL))
+                (gqs . ,(ly:make-pitch -1 4 SEMI-SHARP))
+                (gs . ,(ly:make-pitch -1 4 SHARP))
+                (gtqs . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
+                (gss . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+                (gx . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+
+                (aff . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+                (atqf . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
+                (af . ,(ly:make-pitch -1 5 FLAT))
+                (aqf . ,(ly:make-pitch -1 5 SEMI-FLAT))
+                (a . ,(ly:make-pitch -1 5 NATURAL))
+                (aqs . ,(ly:make-pitch -1 5 SEMI-SHARP))
+                (as . ,(ly:make-pitch -1 5 SHARP))
+                (atqs . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
+                (ass . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+                (ax . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+
+                (bff . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+                (btqf . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
+                (bf . ,(ly:make-pitch -1 6 FLAT))
+                (bqf . ,(ly:make-pitch -1 6 SEMI-FLAT))
+                (b . ,(ly:make-pitch -1 6 NATURAL))
+                (bqs . ,(ly:make-pitch -1 6 SEMI-SHARP))
+                (bs . ,(ly:make-pitch -1 6 SHARP))
+                (btqs . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
+                (bss . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+                (bx . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+                ))
 
 
     ;; Language: Espanol -----------------------------------------------;
     ;;  Spanish: do  re  mi  fa  sol la  si
 
     (espanol . (
-               (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-               (dotcb . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
-               (dob . ,(ly:make-pitch -1 0 FLAT))
-               (docb . ,(ly:make-pitch -1 0 SEMI-FLAT))
-               (do . ,(ly:make-pitch -1 0 NATURAL))
-               (docs . ,(ly:make-pitch -1 0 SEMI-SHARP))
-               (dos . ,(ly:make-pitch -1 0 SHARP))
-               (dotcs . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
-               (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-               (dox . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-
-               (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-               (retcb . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
-               (reb . ,(ly:make-pitch -1 1 FLAT))
-               (recb . ,(ly:make-pitch -1 1 SEMI-FLAT))
-               (re . ,(ly:make-pitch -1 1 NATURAL))
-               (recs . ,(ly:make-pitch -1 1 SEMI-SHARP))
-               (res . ,(ly:make-pitch -1 1 SHARP))
-               (retcs . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
-               (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-               (rex . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-
-               (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-               (mitcb . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
-               (mib . ,(ly:make-pitch -1 2 FLAT))
-               (micb . ,(ly:make-pitch -1 2 SEMI-FLAT))
-               (mi . ,(ly:make-pitch -1 2 NATURAL))
-               (mics . ,(ly:make-pitch -1 2 SEMI-SHARP))
-               (mis . ,(ly:make-pitch -1 2 SHARP))
-               (mitcs . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
-               (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-               (mix . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-
-               (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-               (fatcb . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
-               (fab . ,(ly:make-pitch -1 3 FLAT))
-               (facb . ,(ly:make-pitch -1 3 SEMI-FLAT))
-               (fa . ,(ly:make-pitch -1 3 NATURAL))
-               (facs . ,(ly:make-pitch -1 3 SEMI-SHARP))
-               (fas . ,(ly:make-pitch -1 3 SHARP))
-               (fatcs . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
-               (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-               (fax . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-
-               (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-               (soltcb . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
-               (solb . ,(ly:make-pitch -1 4 FLAT))
-               (solcb . ,(ly:make-pitch -1 4 SEMI-FLAT))
-               (sol . ,(ly:make-pitch -1 4 NATURAL))
-               (solcs . ,(ly:make-pitch -1 4 SEMI-SHARP))
-               (sols . ,(ly:make-pitch -1 4 SHARP))
-               (soltcs . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
-               (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-               (solx . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-
-               (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-               (latcb . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
-               (lab . ,(ly:make-pitch -1 5 FLAT))
-               (lacb . ,(ly:make-pitch -1 5 SEMI-FLAT))
-               (la . ,(ly:make-pitch -1 5 NATURAL))
-               (lacs . ,(ly:make-pitch -1 5 SEMI-SHARP))
-               (las . ,(ly:make-pitch -1 5 SHARP))
-               (latcs . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
-               (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-               (lax . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-
-               (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-               (sitcb . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
-               (sib . ,(ly:make-pitch -1 6 FLAT))
-               (sicb . ,(ly:make-pitch -1 6 SEMI-FLAT))
-               (si . ,(ly:make-pitch -1 6 NATURAL))
-               (sics . ,(ly:make-pitch -1 6 SEMI-SHARP))
-               (sis . ,(ly:make-pitch -1 6 SHARP))
-               (sitcs . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
-               (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-               (six . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-               ))
+                (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+                (dotcb . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
+                (dob . ,(ly:make-pitch -1 0 FLAT))
+                (docb . ,(ly:make-pitch -1 0 SEMI-FLAT))
+                (do . ,(ly:make-pitch -1 0 NATURAL))
+                (docs . ,(ly:make-pitch -1 0 SEMI-SHARP))
+                (dos . ,(ly:make-pitch -1 0 SHARP))
+                (dotcs . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
+                (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+                (dox . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+
+                (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+                (retcb . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
+                (reb . ,(ly:make-pitch -1 1 FLAT))
+                (recb . ,(ly:make-pitch -1 1 SEMI-FLAT))
+                (re . ,(ly:make-pitch -1 1 NATURAL))
+                (recs . ,(ly:make-pitch -1 1 SEMI-SHARP))
+                (res . ,(ly:make-pitch -1 1 SHARP))
+                (retcs . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
+                (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+                (rex . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+
+                (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+                (mitcb . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
+                (mib . ,(ly:make-pitch -1 2 FLAT))
+                (micb . ,(ly:make-pitch -1 2 SEMI-FLAT))
+                (mi . ,(ly:make-pitch -1 2 NATURAL))
+                (mics . ,(ly:make-pitch -1 2 SEMI-SHARP))
+                (mis . ,(ly:make-pitch -1 2 SHARP))
+                (mitcs . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
+                (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+                (mix . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+
+                (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+                (fatcb . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
+                (fab . ,(ly:make-pitch -1 3 FLAT))
+                (facb . ,(ly:make-pitch -1 3 SEMI-FLAT))
+                (fa . ,(ly:make-pitch -1 3 NATURAL))
+                (facs . ,(ly:make-pitch -1 3 SEMI-SHARP))
+                (fas . ,(ly:make-pitch -1 3 SHARP))
+                (fatcs . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
+                (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+                (fax . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+
+                (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+                (soltcb . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
+                (solb . ,(ly:make-pitch -1 4 FLAT))
+                (solcb . ,(ly:make-pitch -1 4 SEMI-FLAT))
+                (sol . ,(ly:make-pitch -1 4 NATURAL))
+                (solcs . ,(ly:make-pitch -1 4 SEMI-SHARP))
+                (sols . ,(ly:make-pitch -1 4 SHARP))
+                (soltcs . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
+                (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+                (solx . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+
+                (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+                (latcb . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
+                (lab . ,(ly:make-pitch -1 5 FLAT))
+                (lacb . ,(ly:make-pitch -1 5 SEMI-FLAT))
+                (la . ,(ly:make-pitch -1 5 NATURAL))
+                (lacs . ,(ly:make-pitch -1 5 SEMI-SHARP))
+                (las . ,(ly:make-pitch -1 5 SHARP))
+                (latcs . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
+                (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+                (lax . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+
+                (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+                (sitcb . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
+                (sib . ,(ly:make-pitch -1 6 FLAT))
+                (sicb . ,(ly:make-pitch -1 6 SEMI-FLAT))
+                (si . ,(ly:make-pitch -1 6 NATURAL))
+                (sics . ,(ly:make-pitch -1 6 SEMI-SHARP))
+                (sis . ,(ly:make-pitch -1 6 SHARP))
+                (sitcs . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
+                (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+                (six . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+                ))
 
 
     ;; Language: Italiano ----------------------------------------------;
     ;;  Italian: do  re  mi  fa  sol la  si
 
     (italiano . (
-                (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-                (dobsb . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
-                (dob . ,(ly:make-pitch -1 0 FLAT))
-                (dosb . ,(ly:make-pitch -1 0 SEMI-FLAT))
-                (do . ,(ly:make-pitch -1 0 NATURAL))
-                (dosd . ,(ly:make-pitch -1 0 SEMI-SHARP))
-                (dod . ,(ly:make-pitch -1 0 SHARP))
-                (dodsd . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
-                (dodd . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-
-                (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-                (rebsb . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
-                (reb . ,(ly:make-pitch -1 1 FLAT))
-                (resb . ,(ly:make-pitch -1 1 SEMI-FLAT))
-                (re . ,(ly:make-pitch -1 1 NATURAL))
-                (resd . ,(ly:make-pitch -1 1 SEMI-SHARP))
-                (red . ,(ly:make-pitch -1 1 SHARP))
-                (redsd . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
-                (redd . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-
-                (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-                (mibsb . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
-                (mib . ,(ly:make-pitch -1 2 FLAT))
-                (misb . ,(ly:make-pitch -1 2 SEMI-FLAT))
-                (mi . ,(ly:make-pitch -1 2 NATURAL))
-                (misd . ,(ly:make-pitch -1 2 SEMI-SHARP))
-                (mid . ,(ly:make-pitch -1 2 SHARP))
-                (midsd . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
-                (midd . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-
-                (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-                (fabsb . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
-                (fab . ,(ly:make-pitch -1 3 FLAT))
-                (fasb . ,(ly:make-pitch -1 3 SEMI-FLAT))
-                (fa . ,(ly:make-pitch -1 3 NATURAL))
-                (fasd . ,(ly:make-pitch -1 3 SEMI-SHARP))
-                (fad . ,(ly:make-pitch -1 3 SHARP))
-                (fadsd . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
-                (fadd . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-
-                (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-                (solbsb . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
-                (solb . ,(ly:make-pitch -1 4 FLAT))
-                (solsb . ,(ly:make-pitch -1 4 SEMI-FLAT))
-                (sol . ,(ly:make-pitch -1 4 NATURAL))
-                (solsd . ,(ly:make-pitch -1 4 SEMI-SHARP))
-                (sold . ,(ly:make-pitch -1 4 SHARP))
-                (soldsd . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
-                (soldd . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-
-                (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-                (labsb . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
-                (lab . ,(ly:make-pitch -1 5 FLAT))
-                (lasb . ,(ly:make-pitch -1 5 SEMI-FLAT))
-                (la . ,(ly:make-pitch -1 5 NATURAL))
-                (lasd . ,(ly:make-pitch -1 5 SEMI-SHARP))
-                (lad . ,(ly:make-pitch -1 5 SHARP))
-                (ladsd . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
-                (ladd . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-
-                (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-                (sibsb . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
-                (sib . ,(ly:make-pitch -1 6 FLAT))
-                (sisb . ,(ly:make-pitch -1 6 SEMI-FLAT))
-                (si . ,(ly:make-pitch -1 6 NATURAL))
-                (sisd . ,(ly:make-pitch -1 6 SEMI-SHARP))
-                (sid . ,(ly:make-pitch -1 6 SHARP))
-                (sidsd . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
-                (sidd . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-
-                ))
+                 (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+                 (dobsb . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
+                 (dob . ,(ly:make-pitch -1 0 FLAT))
+                 (dosb . ,(ly:make-pitch -1 0 SEMI-FLAT))
+                 (do . ,(ly:make-pitch -1 0 NATURAL))
+                 (dosd . ,(ly:make-pitch -1 0 SEMI-SHARP))
+                 (dod . ,(ly:make-pitch -1 0 SHARP))
+                 (dodsd . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
+                 (dodd . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+
+                 (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+                 (rebsb . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
+                 (reb . ,(ly:make-pitch -1 1 FLAT))
+                 (resb . ,(ly:make-pitch -1 1 SEMI-FLAT))
+                 (re . ,(ly:make-pitch -1 1 NATURAL))
+                 (resd . ,(ly:make-pitch -1 1 SEMI-SHARP))
+                 (red . ,(ly:make-pitch -1 1 SHARP))
+                 (redsd . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
+                 (redd . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+
+                 (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+                 (mibsb . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
+                 (mib . ,(ly:make-pitch -1 2 FLAT))
+                 (misb . ,(ly:make-pitch -1 2 SEMI-FLAT))
+                 (mi . ,(ly:make-pitch -1 2 NATURAL))
+                 (misd . ,(ly:make-pitch -1 2 SEMI-SHARP))
+                 (mid . ,(ly:make-pitch -1 2 SHARP))
+                 (midsd . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
+                 (midd . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+
+                 (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+                 (fabsb . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
+                 (fab . ,(ly:make-pitch -1 3 FLAT))
+                 (fasb . ,(ly:make-pitch -1 3 SEMI-FLAT))
+                 (fa . ,(ly:make-pitch -1 3 NATURAL))
+                 (fasd . ,(ly:make-pitch -1 3 SEMI-SHARP))
+                 (fad . ,(ly:make-pitch -1 3 SHARP))
+                 (fadsd . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
+                 (fadd . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+
+                 (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+                 (solbsb . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
+                 (solb . ,(ly:make-pitch -1 4 FLAT))
+                 (solsb . ,(ly:make-pitch -1 4 SEMI-FLAT))
+                 (sol . ,(ly:make-pitch -1 4 NATURAL))
+                 (solsd . ,(ly:make-pitch -1 4 SEMI-SHARP))
+                 (sold . ,(ly:make-pitch -1 4 SHARP))
+                 (soldsd . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
+                 (soldd . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+
+                 (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+                 (labsb . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
+                 (lab . ,(ly:make-pitch -1 5 FLAT))
+                 (lasb . ,(ly:make-pitch -1 5 SEMI-FLAT))
+                 (la . ,(ly:make-pitch -1 5 NATURAL))
+                 (lasd . ,(ly:make-pitch -1 5 SEMI-SHARP))
+                 (lad . ,(ly:make-pitch -1 5 SHARP))
+                 (ladsd . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
+                 (ladd . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+
+                 (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+                 (sibsb . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
+                 (sib . ,(ly:make-pitch -1 6 FLAT))
+                 (sisb . ,(ly:make-pitch -1 6 SEMI-FLAT))
+                 (si . ,(ly:make-pitch -1 6 NATURAL))
+                 (sisd . ,(ly:make-pitch -1 6 SEMI-SHARP))
+                 (sid . ,(ly:make-pitch -1 6 SHARP))
+                 (sidsd . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
+                 (sidd . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+
+                 ))
 
 
     ;; Language: Norsk -------------------------------------------------;
     ;;  Norwegian: c  d  e  f  g  a  b  h
 
     (norsk . (
-             (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-             (cessess . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-             (ces . ,(ly:make-pitch -1 0 FLAT))
-             (cess . ,(ly:make-pitch -1 0 FLAT))
-             (c . ,(ly:make-pitch -1 0 NATURAL))
-             (cis . ,(ly:make-pitch -1 0 SHARP))
-             (ciss . ,(ly:make-pitch -1 0 SHARP))
-             (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-             (cississ . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-             (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-             (dessess . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-             (des . ,(ly:make-pitch -1 1 FLAT))
-             (dess . ,(ly:make-pitch -1 1 FLAT))
-             (d . ,(ly:make-pitch -1 1 NATURAL))
-             (dis . ,(ly:make-pitch -1 1 SHARP))
-             (diss . ,(ly:make-pitch -1 1 SHARP))
-             (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-             (dississ . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-             (eeses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-             (eessess . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-             (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-             (essess . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-             (ees . ,(ly:make-pitch -1 2 FLAT))
-             (eess . ,(ly:make-pitch -1 2 FLAT))
-             (es . ,(ly:make-pitch -1 2 FLAT))
-             (ess . ,(ly:make-pitch -1 2 FLAT))
-             (e . ,(ly:make-pitch -1 2 NATURAL))
-             (eis . ,(ly:make-pitch -1 2 SHARP))
-             (eiss . ,(ly:make-pitch -1 2 SHARP))
-             (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-             (eississ . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-             (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-             (fessess . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-             (fes . ,(ly:make-pitch -1 3 FLAT))
-             (fess . ,(ly:make-pitch -1 3 FLAT))
-             (f . ,(ly:make-pitch -1 3 NATURAL))
-             (fis . ,(ly:make-pitch -1 3 SHARP))
-             (fiss . ,(ly:make-pitch -1 3 SHARP))
-             (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-             (fississ . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-             (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-             (gessess . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-             (ges . ,(ly:make-pitch -1 4 FLAT))
-             (gess . ,(ly:make-pitch -1 4 FLAT))
-             (g . ,(ly:make-pitch -1 4 NATURAL))
-             (g . ,(ly:make-pitch -1 4 NATURAL))
-             (gis . ,(ly:make-pitch -1 4 SHARP))
-             (giss . ,(ly:make-pitch -1 4 SHARP))
-             (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-             (gississ . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-             (aeses . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-             (aessess . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-             (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-             (assess . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-             (aes . ,(ly:make-pitch -1 5 FLAT))
-             (aess . ,(ly:make-pitch -1 5 FLAT))
-             (as . ,(ly:make-pitch -1 5 FLAT))
-             (ass . ,(ly:make-pitch -1 5 FLAT))
-             (a . ,(ly:make-pitch -1 5 NATURAL))
-             (ais . ,(ly:make-pitch -1 5 SHARP))
-             (aiss . ,(ly:make-pitch -1 5 SHARP))
-             (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-             (aississ . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-             (bes . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-             (bess . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-             (b . ,(ly:make-pitch -1 6 FLAT))
-             (b . ,(ly:make-pitch -1 6 FLAT))
-             (h . ,(ly:make-pitch -1 6 NATURAL))
-             (his . ,(ly:make-pitch -1 6 SHARP))
-             (hiss . ,(ly:make-pitch -1 6 SHARP))
-             (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-             (hississ . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-             ))
+              (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+              (cessess . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+              (ces . ,(ly:make-pitch -1 0 FLAT))
+              (cess . ,(ly:make-pitch -1 0 FLAT))
+              (c . ,(ly:make-pitch -1 0 NATURAL))
+              (cis . ,(ly:make-pitch -1 0 SHARP))
+              (ciss . ,(ly:make-pitch -1 0 SHARP))
+              (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+              (cississ . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+              (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+              (dessess . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+              (des . ,(ly:make-pitch -1 1 FLAT))
+              (dess . ,(ly:make-pitch -1 1 FLAT))
+              (d . ,(ly:make-pitch -1 1 NATURAL))
+              (dis . ,(ly:make-pitch -1 1 SHARP))
+              (diss . ,(ly:make-pitch -1 1 SHARP))
+              (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+              (dississ . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+              (eeses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+              (eessess . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+              (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+              (essess . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+              (ees . ,(ly:make-pitch -1 2 FLAT))
+              (eess . ,(ly:make-pitch -1 2 FLAT))
+              (es . ,(ly:make-pitch -1 2 FLAT))
+              (ess . ,(ly:make-pitch -1 2 FLAT))
+              (e . ,(ly:make-pitch -1 2 NATURAL))
+              (eis . ,(ly:make-pitch -1 2 SHARP))
+              (eiss . ,(ly:make-pitch -1 2 SHARP))
+              (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+              (eississ . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+              (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+              (fessess . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+              (fes . ,(ly:make-pitch -1 3 FLAT))
+              (fess . ,(ly:make-pitch -1 3 FLAT))
+              (f . ,(ly:make-pitch -1 3 NATURAL))
+              (fis . ,(ly:make-pitch -1 3 SHARP))
+              (fiss . ,(ly:make-pitch -1 3 SHARP))
+              (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+              (fississ . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+              (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+              (gessess . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+              (ges . ,(ly:make-pitch -1 4 FLAT))
+              (gess . ,(ly:make-pitch -1 4 FLAT))
+              (g . ,(ly:make-pitch -1 4 NATURAL))
+              (g . ,(ly:make-pitch -1 4 NATURAL))
+              (gis . ,(ly:make-pitch -1 4 SHARP))
+              (giss . ,(ly:make-pitch -1 4 SHARP))
+              (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+              (gississ . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+              (aeses . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+              (aessess . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+              (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+              (assess . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+              (aes . ,(ly:make-pitch -1 5 FLAT))
+              (aess . ,(ly:make-pitch -1 5 FLAT))
+              (as . ,(ly:make-pitch -1 5 FLAT))
+              (ass . ,(ly:make-pitch -1 5 FLAT))
+              (a . ,(ly:make-pitch -1 5 NATURAL))
+              (ais . ,(ly:make-pitch -1 5 SHARP))
+              (aiss . ,(ly:make-pitch -1 5 SHARP))
+              (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+              (aississ . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+              (bes . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+              (bess . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+              (b . ,(ly:make-pitch -1 6 FLAT))
+              (b . ,(ly:make-pitch -1 6 FLAT))
+              (h . ,(ly:make-pitch -1 6 NATURAL))
+              (his . ,(ly:make-pitch -1 6 SHARP))
+              (hiss . ,(ly:make-pitch -1 6 SHARP))
+              (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+              (hississ . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+              ))
 
 
     ;; Language: Portugues ---------------------------------------------;
     ;;  Portuguese: do  re  mi  fa  sol la  si
 
     (portugues . (
-                 (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-                 (dobtqt . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
-                 (dob . ,(ly:make-pitch -1 0 FLAT))
-                 (dobqt . ,(ly:make-pitch -1 0 SEMI-FLAT))
-                 (do . ,(ly:make-pitch -1 0 NATURAL))
-                 (dosqt . ,(ly:make-pitch -1 0 SEMI-SHARP))
-                 (dos . ,(ly:make-pitch -1 0 SHARP))
-                 (dostqt . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
-                 (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-
-                 (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-                 (rebtqt . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
-                 (reb . ,(ly:make-pitch -1 1 FLAT))
-                 (rebqt . ,(ly:make-pitch -1 1 SEMI-FLAT))
-                 (re . ,(ly:make-pitch -1 1 NATURAL))
-                 (resqt . ,(ly:make-pitch -1 1 SEMI-SHARP))
-                 (res . ,(ly:make-pitch -1 1 SHARP))
-                 (restqt . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
-                 (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-
-                 (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-                 (mibtqt . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
-                 (mib . ,(ly:make-pitch -1 2 FLAT))
-                 (mibqt . ,(ly:make-pitch -1 2 SEMI-FLAT))
-                 (mi . ,(ly:make-pitch -1 2 NATURAL))
-                 (misqt . ,(ly:make-pitch -1 2 SEMI-SHARP))
-                 (mis . ,(ly:make-pitch -1 2 SHARP))
-                 (mistqt . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
-                 (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-
-                 (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-                 (fabtqt . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
-                 (fab . ,(ly:make-pitch -1 3 FLAT))
-                 (fabqt . ,(ly:make-pitch -1 3 SEMI-FLAT))
-                 (fa . ,(ly:make-pitch -1 3 NATURAL))
-                 (fasqt . ,(ly:make-pitch -1 3 SEMI-SHARP))
-                 (fas . ,(ly:make-pitch -1 3 SHARP))
-                 (fastqt . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
-                 (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-
-                 (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-                 (solbtqt . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
-                 (solb . ,(ly:make-pitch -1 4 FLAT))
-                 (solbqt . ,(ly:make-pitch -1 4 SEMI-FLAT))
-                 (sol . ,(ly:make-pitch -1 4 NATURAL))
-                 (solsqt . ,(ly:make-pitch -1 4 SEMI-SHARP))
-                 (sols . ,(ly:make-pitch -1 4 SHARP))
-                 (solstqt . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
-                 (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-
-                 (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-                 (labtqt . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
-                 (lab . ,(ly:make-pitch -1 5 FLAT))
-                 (labqt . ,(ly:make-pitch -1 5 SEMI-FLAT))
-                 (la . ,(ly:make-pitch -1 5 NATURAL))
-                 (lasqt . ,(ly:make-pitch -1 5 SEMI-SHARP))
-                 (las . ,(ly:make-pitch -1 5 SHARP))
-                 (lastqt . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
-                 (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-
-                 (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-                 (sibtqt . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
-                 (sib . ,(ly:make-pitch -1 6 FLAT))
-                 (sibqt . ,(ly:make-pitch -1 6 SEMI-FLAT))
-                 (si . ,(ly:make-pitch -1 6 NATURAL))
-                 (sisqt . ,(ly:make-pitch -1 6 SEMI-SHARP))
-                 (sis . ,(ly:make-pitch -1 6 SHARP))
-                 (sistqt . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
-                 (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-
-                 ))
+                  (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+                  (dobtqt . ,(ly:make-pitch -1 0 THREE-Q-FLAT))
+                  (dob . ,(ly:make-pitch -1 0 FLAT))
+                  (dobqt . ,(ly:make-pitch -1 0 SEMI-FLAT))
+                  (do . ,(ly:make-pitch -1 0 NATURAL))
+                  (dosqt . ,(ly:make-pitch -1 0 SEMI-SHARP))
+                  (dos . ,(ly:make-pitch -1 0 SHARP))
+                  (dostqt . ,(ly:make-pitch -1 0 THREE-Q-SHARP))
+                  (doss . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+
+                  (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+                  (rebtqt . ,(ly:make-pitch -1 1 THREE-Q-FLAT))
+                  (reb . ,(ly:make-pitch -1 1 FLAT))
+                  (rebqt . ,(ly:make-pitch -1 1 SEMI-FLAT))
+                  (re . ,(ly:make-pitch -1 1 NATURAL))
+                  (resqt . ,(ly:make-pitch -1 1 SEMI-SHARP))
+                  (res . ,(ly:make-pitch -1 1 SHARP))
+                  (restqt . ,(ly:make-pitch -1 1 THREE-Q-SHARP))
+                  (ress . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+
+                  (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+                  (mibtqt . ,(ly:make-pitch -1 2 THREE-Q-FLAT))
+                  (mib . ,(ly:make-pitch -1 2 FLAT))
+                  (mibqt . ,(ly:make-pitch -1 2 SEMI-FLAT))
+                  (mi . ,(ly:make-pitch -1 2 NATURAL))
+                  (misqt . ,(ly:make-pitch -1 2 SEMI-SHARP))
+                  (mis . ,(ly:make-pitch -1 2 SHARP))
+                  (mistqt . ,(ly:make-pitch -1 2 THREE-Q-SHARP))
+                  (miss . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+
+                  (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+                  (fabtqt . ,(ly:make-pitch -1 3 THREE-Q-FLAT))
+                  (fab . ,(ly:make-pitch -1 3 FLAT))
+                  (fabqt . ,(ly:make-pitch -1 3 SEMI-FLAT))
+                  (fa . ,(ly:make-pitch -1 3 NATURAL))
+                  (fasqt . ,(ly:make-pitch -1 3 SEMI-SHARP))
+                  (fas . ,(ly:make-pitch -1 3 SHARP))
+                  (fastqt . ,(ly:make-pitch -1 3 THREE-Q-SHARP))
+                  (fass . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+
+                  (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+                  (solbtqt . ,(ly:make-pitch -1 4 THREE-Q-FLAT))
+                  (solb . ,(ly:make-pitch -1 4 FLAT))
+                  (solbqt . ,(ly:make-pitch -1 4 SEMI-FLAT))
+                  (sol . ,(ly:make-pitch -1 4 NATURAL))
+                  (solsqt . ,(ly:make-pitch -1 4 SEMI-SHARP))
+                  (sols . ,(ly:make-pitch -1 4 SHARP))
+                  (solstqt . ,(ly:make-pitch -1 4 THREE-Q-SHARP))
+                  (solss . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+
+                  (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+                  (labtqt . ,(ly:make-pitch -1 5 THREE-Q-FLAT))
+                  (lab . ,(ly:make-pitch -1 5 FLAT))
+                  (labqt . ,(ly:make-pitch -1 5 SEMI-FLAT))
+                  (la . ,(ly:make-pitch -1 5 NATURAL))
+                  (lasqt . ,(ly:make-pitch -1 5 SEMI-SHARP))
+                  (las . ,(ly:make-pitch -1 5 SHARP))
+                  (lastqt . ,(ly:make-pitch -1 5 THREE-Q-SHARP))
+                  (lass . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+
+                  (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+                  (sibtqt . ,(ly:make-pitch -1 6 THREE-Q-FLAT))
+                  (sib . ,(ly:make-pitch -1 6 FLAT))
+                  (sibqt . ,(ly:make-pitch -1 6 SEMI-FLAT))
+                  (si . ,(ly:make-pitch -1 6 NATURAL))
+                  (sisqt . ,(ly:make-pitch -1 6 SEMI-SHARP))
+                  (sis . ,(ly:make-pitch -1 6 SHARP))
+                  (sistqt . ,(ly:make-pitch -1 6 THREE-Q-SHARP))
+                  (siss . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+
+                  ))
 
 
     ;; Language: Suomi -------------------------------------------------;
     ;;  Finnish: c  d  e  f  g  a  b  h
 
     (suomi . (
-             (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-             (ces . ,(ly:make-pitch -1 0 FLAT))
-             (c . ,(ly:make-pitch -1 0 NATURAL))
-             (cis . ,(ly:make-pitch -1 0 SHARP))
-             (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-             (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-             (des . ,(ly:make-pitch -1 1 FLAT))
-             (d . ,(ly:make-pitch -1 1 NATURAL))
-             (dis . ,(ly:make-pitch -1 1 SHARP))
-             (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-             (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-             (es . ,(ly:make-pitch -1 2 FLAT))
-             (e . ,(ly:make-pitch -1 2 NATURAL))
-             (eis . ,(ly:make-pitch -1 2 SHARP))
-             (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-             (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-             (fes . ,(ly:make-pitch -1 3 FLAT))
-             (f . ,(ly:make-pitch -1 3 NATURAL))
-             (fis . ,(ly:make-pitch -1 3 SHARP))
-             (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-             (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-             (ges . ,(ly:make-pitch -1 4 FLAT))
-             (g . ,(ly:make-pitch -1 4 NATURAL))
-             (gis . ,(ly:make-pitch -1 4 SHARP))
-             (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-             (asas . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-             (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT))   ;;non-standard name for asas
-             (as . ,(ly:make-pitch -1 5 FLAT))
-             (a . ,(ly:make-pitch -1 5 NATURAL))
-             (ais . ,(ly:make-pitch -1 5 SHARP))
-             (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-             (bb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) ;; should be bes. Kept for downwards compatibility
-             (bes . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-             (heses . ,(ly:make-pitch -1 6 DOUBLE-FLAT))  ;;non-standard name for bb
-             (b . ,(ly:make-pitch -1 6 FLAT))
-             (h . ,(ly:make-pitch -1 6 NATURAL))
-             (his . ,(ly:make-pitch -1 6 SHARP))
-             (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-             ))
+              (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+              (ces . ,(ly:make-pitch -1 0 FLAT))
+              (c . ,(ly:make-pitch -1 0 NATURAL))
+              (cis . ,(ly:make-pitch -1 0 SHARP))
+              (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+              (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+              (des . ,(ly:make-pitch -1 1 FLAT))
+              (d . ,(ly:make-pitch -1 1 NATURAL))
+              (dis . ,(ly:make-pitch -1 1 SHARP))
+              (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+              (eses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+              (es . ,(ly:make-pitch -1 2 FLAT))
+              (e . ,(ly:make-pitch -1 2 NATURAL))
+              (eis . ,(ly:make-pitch -1 2 SHARP))
+              (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+              (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+              (fes . ,(ly:make-pitch -1 3 FLAT))
+              (f . ,(ly:make-pitch -1 3 NATURAL))
+              (fis . ,(ly:make-pitch -1 3 SHARP))
+              (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+              (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+              (ges . ,(ly:make-pitch -1 4 FLAT))
+              (g . ,(ly:make-pitch -1 4 NATURAL))
+              (gis . ,(ly:make-pitch -1 4 SHARP))
+              (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+              (asas . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+              (ases . ,(ly:make-pitch -1 5 DOUBLE-FLAT))   ;;non-standard name for asas
+              (as . ,(ly:make-pitch -1 5 FLAT))
+              (a . ,(ly:make-pitch -1 5 NATURAL))
+              (ais . ,(ly:make-pitch -1 5 SHARP))
+              (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+              (bb . ,(ly:make-pitch -1 6 DOUBLE-FLAT)) ;; should be bes. Kept for downwards compatibility
+              (bes . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+              (heses . ,(ly:make-pitch -1 6 DOUBLE-FLAT))  ;;non-standard name for bb
+              (b . ,(ly:make-pitch -1 6 FLAT))
+              (h . ,(ly:make-pitch -1 6 NATURAL))
+              (his . ,(ly:make-pitch -1 6 SHARP))
+              (hisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+              ))
 
 
     ;; Language: Svenska -----------------------------------------------;
     ;;  Swedish: c  d  e  f  g  a  b  h
 
     (svenska . (
-               (cessess . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-               (cess . ,(ly:make-pitch -1 0 FLAT))
-               (c . ,(ly:make-pitch -1 0 NATURAL))
-               (ciss . ,(ly:make-pitch -1 0 SHARP))
-               (cississ . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-               (dessess . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-               (dess . ,(ly:make-pitch -1 1 FLAT))
-               (d . ,(ly:make-pitch -1 1 NATURAL))
-               (diss . ,(ly:make-pitch -1 1 SHARP))
-               (dississ . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-               (essess . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-               (ess . ,(ly:make-pitch -1 2 FLAT))
-               (e . ,(ly:make-pitch -1 2 NATURAL))
-               (eiss . ,(ly:make-pitch -1 2 SHARP))
-               (eississ . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-               (fessess . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-               (fess . ,(ly:make-pitch -1 3 FLAT))
-               (f . ,(ly:make-pitch -1 3 NATURAL))
-               (fiss . ,(ly:make-pitch -1 3 SHARP))
-               (fississ . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-               (gessess . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-               (gess . ,(ly:make-pitch -1 4 FLAT))
-               (g . ,(ly:make-pitch -1 4 NATURAL))
-               (giss . ,(ly:make-pitch -1 4 SHARP))
-               (gississ . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-               (assess . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-               (ass . ,(ly:make-pitch -1 5 FLAT))
-               (a . ,(ly:make-pitch -1 5 NATURAL))
-               (aiss . ,(ly:make-pitch -1 5 SHARP))
-               (aississ . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-               (hessess . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-               (b . ,(ly:make-pitch -1 6 FLAT))
-               (h . ,(ly:make-pitch -1 6 NATURAL))
-               (hiss . ,(ly:make-pitch -1 6 SHARP))
-               (hississ . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-               ))
+                (cessess . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+                (cess . ,(ly:make-pitch -1 0 FLAT))
+                (c . ,(ly:make-pitch -1 0 NATURAL))
+                (ciss . ,(ly:make-pitch -1 0 SHARP))
+                (cississ . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+                (dessess . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+                (dess . ,(ly:make-pitch -1 1 FLAT))
+                (d . ,(ly:make-pitch -1 1 NATURAL))
+                (diss . ,(ly:make-pitch -1 1 SHARP))
+                (dississ . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+                (essess . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+                (ess . ,(ly:make-pitch -1 2 FLAT))
+                (e . ,(ly:make-pitch -1 2 NATURAL))
+                (eiss . ,(ly:make-pitch -1 2 SHARP))
+                (eississ . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+                (fessess . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+                (fess . ,(ly:make-pitch -1 3 FLAT))
+                (f . ,(ly:make-pitch -1 3 NATURAL))
+                (fiss . ,(ly:make-pitch -1 3 SHARP))
+                (fississ . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+                (gessess . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+                (gess . ,(ly:make-pitch -1 4 FLAT))
+                (g . ,(ly:make-pitch -1 4 NATURAL))
+                (giss . ,(ly:make-pitch -1 4 SHARP))
+                (gississ . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+                (assess . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+                (ass . ,(ly:make-pitch -1 5 FLAT))
+                (a . ,(ly:make-pitch -1 5 NATURAL))
+                (aiss . ,(ly:make-pitch -1 5 SHARP))
+                (aississ . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+                (hessess . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+                (b . ,(ly:make-pitch -1 6 FLAT))
+                (h . ,(ly:make-pitch -1 6 NATURAL))
+                (hiss . ,(ly:make-pitch -1 6 SHARP))
+                (hississ . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+                ))
 
 
     ;; Language: Vlaams ------------------------------------------------;
     ;;  Flemish: do  re  mi  fa  sol la  si
 
     (vlaams . (
-              (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
-              (dob . ,(ly:make-pitch -1 0 FLAT))
-              (do . ,(ly:make-pitch -1 0 NATURAL))
-              (dok . ,(ly:make-pitch -1 0 SHARP))
-              (dokk . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
-
-              (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
-              (reb . ,(ly:make-pitch -1 1 FLAT))
-              (re . ,(ly:make-pitch -1 1 NATURAL))
-              (rek . ,(ly:make-pitch -1 1 SHARP))
-              (rekk . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
-
-              (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
-              (mib . ,(ly:make-pitch -1 2 FLAT))
-              (mi . ,(ly:make-pitch -1 2 NATURAL))
-              (mik . ,(ly:make-pitch -1 2 SHARP))
-              (mikk . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
-
-              (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
-              (fab . ,(ly:make-pitch -1 3 FLAT))
-              (fa . ,(ly:make-pitch -1 3 NATURAL))
-              (fak . ,(ly:make-pitch -1 3 SHARP))
-              (fakk . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
-
-              (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
-              (solb . ,(ly:make-pitch -1 4 FLAT))
-              (sol . ,(ly:make-pitch -1 4 NATURAL))
-              (solk . ,(ly:make-pitch -1 4 SHARP))
-              (solkk . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
-
-              (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
-              (lab . ,(ly:make-pitch -1 5 FLAT))
-              (la . ,(ly:make-pitch -1 5 NATURAL))
-              (lak . ,(ly:make-pitch -1 5 SHARP))
-              (lakk . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
-
-              (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
-              (sib . ,(ly:make-pitch -1 6 FLAT))
-              (si . ,(ly:make-pitch -1 6 NATURAL))
-              (sik . ,(ly:make-pitch -1 6 SHARP))
-              (sikk . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
-              ))
+               (dobb . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
+               (dob . ,(ly:make-pitch -1 0 FLAT))
+               (do . ,(ly:make-pitch -1 0 NATURAL))
+               (dok . ,(ly:make-pitch -1 0 SHARP))
+               (dokk . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
+
+               (rebb . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
+               (reb . ,(ly:make-pitch -1 1 FLAT))
+               (re . ,(ly:make-pitch -1 1 NATURAL))
+               (rek . ,(ly:make-pitch -1 1 SHARP))
+               (rekk . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
+
+               (mibb . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
+               (mib . ,(ly:make-pitch -1 2 FLAT))
+               (mi . ,(ly:make-pitch -1 2 NATURAL))
+               (mik . ,(ly:make-pitch -1 2 SHARP))
+               (mikk . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
+
+               (fabb . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
+               (fab . ,(ly:make-pitch -1 3 FLAT))
+               (fa . ,(ly:make-pitch -1 3 NATURAL))
+               (fak . ,(ly:make-pitch -1 3 SHARP))
+               (fakk . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
+
+               (solbb . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
+               (solb . ,(ly:make-pitch -1 4 FLAT))
+               (sol . ,(ly:make-pitch -1 4 NATURAL))
+               (solk . ,(ly:make-pitch -1 4 SHARP))
+               (solkk . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
+
+               (labb . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
+               (lab . ,(ly:make-pitch -1 5 FLAT))
+               (la . ,(ly:make-pitch -1 5 NATURAL))
+               (lak . ,(ly:make-pitch -1 5 SHARP))
+               (lakk . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
+
+               (sibb . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
+               (sib . ,(ly:make-pitch -1 6 FLAT))
+               (si . ,(ly:make-pitch -1 6 NATURAL))
+               (sik . ,(ly:make-pitch -1 6 SHARP))
+               (sikk . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
+               ))
     ))
 
+;; add two native utf-8 aliases. Pairs obey cp-like order: '(old new)
+(for-each
+ (lambda (pair)
+   (set! language-pitch-names
+         (append language-pitch-names
+                 (list (cons (cadr pair)
+                             (cdr (assoc (car pair) language-pitch-names)))))))
+ '((espanol español)
+   (italiano français)))
+
 (define-public (note-names-language parser str)
   (_ "Select note names language.")
   (let ((alist (assoc-get (string->symbol str)
-                         language-pitch-names
-                         '())))
+                          language-pitch-names
+                          '())))
     (if (pair? alist)
-       (begin
-         (ly:debug (_ "Using `~a' note names...") str)
-         (set! pitchnames alist)
-         (ly:parser-set-note-names parser alist))
-       (ly:warning (_ "Could not find language `~a'.  Ignoring.") str))))
+        (begin
+          (ly:debug (_ "Using `~a' note names...") str)
+          (set! pitchnames alist)
+          (ly:parser-set-note-names parser alist))
+        (ly:warning (_ "Could not find language `~a'.  Ignoring.") str))))
index fddd6855b2f0a2b22a99527ae89e28be060a9237..4c834591a392bc90d2b7fdaa49515b7518c677a0 100644 (file)
@@ -67,8 +67,9 @@ are used internally in @file{lily/@/stencil-interpret.cc}."
     rotate-stencil
     scale-stencil
     translate-stencil
+    transparent-stencil
     ))
 
-(map ly:register-stencil-expression
-  (append (ly:all-stencil-commands)
-         (ly:all-output-backend-commands)))
+(for-each ly:register-stencil-expression
+          (append (ly:all-stencil-commands)
+                  (ly:all-output-backend-commands)))
index f60ba5a43b10a26ae4a9833492fe5e88c9ae83bd..0847d4c93f84ac32eea90f067c63f55a1660169d 100644 (file)
@@ -23,7 +23,7 @@
 
 (define-public (symbol-concatenate . names)
   "Like @code{string-concatenate}, but for symbols."
-  (string->symbol (apply string-append (map symbol->string names))))
+  (string->symbol (string-concatenate (map symbol->string names))))
 
 (define-public (function-chain arg function-list)
   "Applies a list of functions in @var{function-list} to @var{arg}.
@@ -33,34 +33,18 @@ are provided in @var{function-list}.
 
 Example: Executing @samp{(function-chain 1 `((,+ 1) (,- 2) (,+ 3) (,/)))}
 returns @samp{1/3}."
-  (if (null? function-list)
-    arg
-    (function-chain
-      (apply (caar function-list) (append `(,arg) (cdar function-list)))
-      (cdr function-list))))
-
-(define (rotunda-map function inlist rotunda)
-  "Like map, but with a rotating last argument to function.
-   For example:
-   @code{guile> (rotunda-map + '(1 2 3 4) '(1 -10))}
-   @code{(2 -8 4 -6)}"
-  (define (rotunda-map-chain function inlist outlist rotunda)
-    (if (null? inlist)
-      outlist
-     (rotunda-map-chain
-       function
-       (cdr inlist)
-       (append outlist (list (function (car inlist) (car rotunda))))
-       (append (cdr rotunda) (list (car rotunda))))))
-  (rotunda-map-chain function inlist '() rotunda))
+  (fold
+   (lambda (fun arg) (apply (car fun) arg (cdr fun)))
+   arg
+   function-list))
 
 (define (assoc-keys alist)
   "Gets the keys of an alist."
-  (map (lambda (x) (car x)) alist))
+  (map car alist))
 
 (define (assoc-values alist)
   "Gets the values of an alist."
-  (map (lambda (x) (cdr x)) alist))
+  (map cdr alist))
 
 (define (get-slope-offset p1 p2)
   "Gets the slope and offset for p1 and p2.
@@ -68,38 +52,25 @@ returns @samp{1/3}."
    @code{(get-slope-offset '(1 . 2) '(3 . -5.1))}
    @code{(-3.55 . 5.55)}"
   (let*
-    ((slope (/ (- (cdr p1) (cdr p2)) (- (car p1) (car p2))))
-    (offset (- (cdr p1) (* slope (car p1)))))
-   `(,slope . ,offset)))
+      ((slope (/ (- (cdr p1) (cdr p2)) (- (car p1) (car p2))))
+       (offset (- (cdr p1) (* slope (car p1)))))
+    `(,slope . ,offset)))
 
 (define (is-square? x input-list)
   "Returns true if x is the square of a value in input-list."
   (pair? (memv (inexact->exact (sqrt x)) input-list)))
 
-(define (satisfies-function? function input-list)
-  "Returns true if an element in @code{input-list} is true
-   when @code{function} is applied to it.
-   For example:
-   @code{guile> (satisfies-function? null? '((1 2) ()))}
-   @code{#t}
-   @code{guile> (satisfies-function? null? '((1 2) (3)))}
-   @code{#f}"
-  (if (null?  input-list)
-    #f
-    (or (function (car input-list))
-      (satisfies-function? function (cdr input-list)))))
-
 (define (true-entry? input-list)
   "Is there a true entry in @code{input-list}?"
-  (satisfies-function? identity input-list))
+  (any identity input-list))
 
 (define (entry-greater-than-x? input-list x)
   "Is there an entry greater than @code{x} in @code{input-list}?"
-  (satisfies-function? (lambda (y) (> y x)) input-list))
+  (member x input-list <))
 
 (define (n-true-entries input-list)
   "Returns number of true entries in @code{input-list}."
-  (reduce + 0 (map (lambda (x) (if x 1 0)) input-list)))
+  (count identity input-list))
 
 (define (bezier-head-for-stencil bezier cut-point)
   "Prepares a split-bezier to be used in a connected path stencil."
@@ -107,246 +78,240 @@ returns @samp{1/3}."
 
 ;; Translators for keys
 
-; Translates a "normal" key (open, closed, trill)
+;; Translates a "normal" key (open, closed, trill)
 (define (key-fill-translate fill)
   (cond
-    ((= fill 1) #f)
-    ((= fill 2) #f)
-    ((= fill (expt (assoc-get 'F HOLE-FILL-LIST) 2)) 0.5)
-    ((= fill (assoc-get 'F HOLE-FILL-LIST)) #t)))
+   ((= fill 1) #f)
+   ((= fill 2) #f)
+   ((= fill (expt (assoc-get 'F HOLE-FILL-LIST) 2)) 0.5)
+   ((= fill (assoc-get 'F HOLE-FILL-LIST)) #t)))
 
-; Similar to above, but trans vs opaque doesn't matter
+;; Similar to above, but trans vs opaque doesn't matter
 (define (text-fill-translate fill)
   (cond
-    ((< fill 3) 1.0)
-    ((= fill (expt (assoc-get 'F HOLE-FILL-LIST) 2)) 0.5)
-    ((= fill (assoc-get 'F HOLE-FILL-LIST)) 0.0)))
-
-; Emits a list for the central-column-hole maker
-; (not-full?, 1-quarter-full?, 1-half-full?, 3-quarters-full?, full?)
-; Multiple values, such as (#t #f #f #t #f), mean a trill between
-; not-full and 3-quarters-full
+   ((< fill 3) 1.0)
+   ((= fill (expt (assoc-get 'F HOLE-FILL-LIST) 2)) 0.5)
+   ((= fill (assoc-get 'F HOLE-FILL-LIST)) 0.0)))
+
+;; Emits a list for the central-column-hole maker
+;; (not-full?, 1-quarter-full?, 1-half-full?, 3-quarters-full?, full?)
+;; Multiple values, such as (#t #f #f #t #f), mean a trill between
+;; not-full and 3-quarters-full
 (define (process-fill-value fill)
   (let* ((avals (list-tail (assoc-values HOLE-FILL-LIST) 1)))
-  (append `(,(or (< fill 3) (is-square? fill avals)))
-    (map (lambda (x) (= 0 (remainder fill x))) avals))))
+    (append `(,(or (< fill 3) (is-square? fill avals)))
+            (map (lambda (x) (= 0 (remainder fill x))) avals))))
 
-; Color a stencil gray
+;; Color a stencil gray
 (define (gray-colorize stencil)
-  (apply ly:stencil-in-color (cons stencil (x11-color 'grey))))
+  (apply ly:stencil-in-color stencil (x11-color 'grey)))
 
-; A connected path stencil that is surrounded by proc
+;; A connected path stencil that is surrounded by proc
 (define (rich-path-stencil ls x-stretch y-stretch proc)
   (lambda (radius thick fill layout props)
     (let*
-      ((fill-translate (key-fill-translate fill))
-       (gray? (eqv? fill-translate 0.5)))
-     (ly:stencil-add
-      ((if gray? gray-colorize identity)
-      (proc
-        (make-connected-path-stencil
-        ls
-        thick
-        (* x-stretch radius)
-        (* y-stretch radius)
-        #f
-        (if gray? #t fill-translate))))
-      (if (not gray?)
-          empty-stencil
-          ((rich-path-stencil ls x-stretch y-stretch proc)
-           radius
-           thick
-           1
-           layout
-           props))))))
-
-; A connected path stencil without a surrounding proc
+        ((fill-translate (key-fill-translate fill))
+         (gray? (eqv? fill-translate 0.5)))
+      (ly:stencil-add
+       ((if gray? gray-colorize identity)
+        (proc
+         (make-connected-path-stencil
+          ls
+          thick
+          (* x-stretch radius)
+          (* y-stretch radius)
+          #f
+          (if gray? #t fill-translate))))
+       (if (not gray?)
+           empty-stencil
+           ((rich-path-stencil ls x-stretch y-stretch proc)
+            radius
+            thick
+            1
+            layout
+            props))))))
+
+;; A connected path stencil without a surrounding proc
 (define (standard-path-stencil ls x-stretch y-stretch)
   (rich-path-stencil ls x-stretch y-stretch identity))
 
-; An ellipse stencil that is surrounded by a proc
+;; An ellipse stencil that is surrounded by a proc
 (define (rich-pe-stencil x-stretch y-stretch start end proc)
   (lambda (radius thick fill layout props)
     (let*
-      ((fill-translate (key-fill-translate fill))
-       (gray? (eqv? fill-translate 0.5)))
-     (ly:stencil-add
-      ((if gray? gray-colorize identity)
-      (proc
-        (make-partial-ellipse-stencil
-        (* x-stretch radius)
-        (* y-stretch radius)
-        start
-        end
-        thick
-        #t
-        (if gray? #t fill-translate))))
-      (if (not gray?)
-          empty-stencil
-          ((rich-pe-stencil x-stretch y-stretch start end proc)
-           radius
-           thick
-           1
-           layout
-           props))))))
+        ((fill-translate (key-fill-translate fill))
+         (gray? (eqv? fill-translate 0.5)))
+      (ly:stencil-add
+       ((if gray? gray-colorize identity)
+        (proc
+         (make-partial-ellipse-stencil
+          (* x-stretch radius)
+          (* y-stretch radius)
+          start
+          end
+          thick
+          #t
+          (if gray? #t fill-translate))))
+       (if (not gray?)
+           empty-stencil
+           ((rich-pe-stencil x-stretch y-stretch start end proc)
+            radius
+            thick
+            1
+            layout
+            props))))))
 
 (define (rich-e-stencil x-stretch y-stretch proc)
   (lambda (radius thick fill layout props)
     (let*
-      ((fill-translate (key-fill-translate fill))
-       (gray? (eqv? fill-translate 0.5)))
-     (ly:stencil-add
-      ((if gray? gray-colorize identity)
-      (proc
-        (make-ellipse-stencil
+        ((fill-translate (key-fill-translate fill))
+         (gray? (eqv? fill-translate 0.5)))
+      (ly:stencil-add
+       ((if gray? gray-colorize identity)
+        (proc
+         (make-ellipse-stencil
           (* x-stretch radius)
           (* y-stretch radius)
           thick
           (if gray? #t fill-translate))))
-      (if (not gray?)
-        empty-stencil
-        ((rich-e-stencil x-stretch y-stretch proc)
-          radius
-          thick
-          1
-          layout
-          props))))))
+       (if (not gray?)
+           empty-stencil
+           ((rich-e-stencil x-stretch y-stretch proc)
+            radius
+            thick
+            1
+            layout
+            props))))))
 
-; An ellipse stencil without a surrounding proc
+;; An ellipse stencil without a surrounding proc
 (define (standard-e-stencil x-stretch y-stretch)
   (rich-e-stencil x-stretch y-stretch identity))
 
-; Translates all possible representations of symbol.
-; If simple? then the only representations are open, closed, and trill.
-; Otherwise, there can be various levels of "closure" on the holes
-; ring? allows for a ring around the holes as well
+;; Translates all possible representations of symbol.
+;; If simple? then the only representations are open, closed, and trill.
+;; Otherwise, there can be various levels of "closure" on the holes
+;; ring? allows for a ring around the holes as well
 (define (make-symbol-alist symbol simple? ring?)
-  (filter (lambda (x)
-            (not
-              (equal?
-                x
-                `(,(symbol-concatenate symbol 'T 'F) .
-                 ,(expt (assoc-get 'F HOLE-FILL-LIST) 2)))))
-          (append
-            `((,symbol . ,(assoc-get 'F HOLE-FILL-LIST))
-              (,(symbol-concatenate symbol 'T) .
-               ,(expt (assoc-get 'F HOLE-FILL-LIST) 2)))
-            (if simple?
-                '()
-                (apply append
-                  (map (lambda (x)
-                         (append
-                           `((,(symbol-concatenate symbol (car x) 'T)
-                              . ,(expt (cdr x) 2))
-                             (,(symbol-concatenate symbol 'T (car x))
-                              . ,(* (cdr x) (assoc-get 'F HOLE-FILL-LIST)))
-                             (,(symbol-concatenate symbol (car x))
-                              . ,(cdr x)))
-                             (apply append
-                               (map (lambda (y)
-                                      (map (lambda (a b)
-                                             `(,(symbol-concatenate symbol
-                                                                    (car a)
-                                                                    'T
-                                                                    (car b))
-                                               . ,(* (cdr a) (cdr b))))
-                                           `(,x ,y) `(,y ,x)))
-                                    (cdr (member x HOLE-FILL-LIST))))))
-                       (if ring? HOLE-FILL-LIST (cdr HOLE-FILL-LIST))))))))
+  (delete `(,(symbol-concatenate symbol 'T 'F) .
+            ,(expt (assoc-get 'F HOLE-FILL-LIST) 2))
+          `((,symbol . ,(assoc-get 'F HOLE-FILL-LIST))
+            (,(symbol-concatenate symbol 'T) .
+             ,(expt (assoc-get 'F HOLE-FILL-LIST) 2))
+            ,@(if simple?
+                  '()
+                  (append-map
+                   (lambda (x)
+                     `((,(symbol-concatenate symbol (car x) 'T)
+                        . ,(expt (cdr x) 2))
+                       (,(symbol-concatenate symbol 'T (car x))
+                        . ,(* (cdr x) (assoc-get 'F HOLE-FILL-LIST)))
+                       (,(symbol-concatenate symbol (car x))
+                        . ,(cdr x))
+                       ,@(append-map
+                          (lambda (y)
+                            (map (lambda (a b)
+                                   `(,(symbol-concatenate symbol
+                                                          (car a)
+                                                          'T
+                                                          (car b))
+                                     . ,(* (cdr a) (cdr b))))
+                                 `(,x ,y) `(,y ,x)))
+                          (cdr (member x HOLE-FILL-LIST)))))
+                   (if ring? HOLE-FILL-LIST (cdr HOLE-FILL-LIST)))))))
 
 ;;; Commands for text layout
 
-; Draws a circle around markup if (= trigger 0.5)
+;; Draws a circle around markup if (= trigger 0.5)
 (define-markup-command
   (conditional-circle-markup layout props trigger in-markup)
   (number? markup?)
   (interpret-markup layout props
-    (if (eqv? trigger 0.5)
-      (markup #:circle (markup in-markup))
-      (markup in-markup))))
+                    (if (eqv? trigger 0.5)
+                        (markup #:circle (markup in-markup))
+                        (markup in-markup))))
 
-; Makes a list of named-keys
+;; Makes a list of named-keys
 (define (make-name-keylist input-list key-list font-size)
   (map (lambda (x y)
          (if (< x 1)
-           (markup #:conditional-circle-markup
-             x
-             (make-concat-markup
-               (list
-                 (markup #:abs-fontsize font-size (car y))
-                 (if (and (< x 1) (cdr y))
-                   (if (eqv? (cdr y) 1)
-                     (markup
-                       #:abs-fontsize
-                       font-size
-                       #:raise
-                       1
-                       #:fontsize
-                       -2
-                       #:sharp)
-                     (markup
-                       #:abs-fontsize
-                       font-size
-                       #:raise
-                       1
-                       #:fontsize
-                       -2
-                       #:flat))
-                 (markup #:null)))))
-           (markup #:null)))
-         input-list key-list))
-
-; Makes a list of number-keys
+             (markup #:conditional-circle-markup
+                     x
+                     (make-concat-markup
+                      (list
+                       (markup #:abs-fontsize font-size (car y))
+                       (if (and (< x 1) (cdr y))
+                           (if (eqv? (cdr y) 1)
+                               (markup
+                                #:abs-fontsize
+                                font-size
+                                #:raise
+                                1
+                                #:fontsize
+                                -2
+                                #:sharp)
+                               (markup
+                                #:abs-fontsize
+                                font-size
+                                #:raise
+                                1
+                                #:fontsize
+                                -2
+                                #:flat))
+                           (markup #:null)))))
+             (markup #:null)))
+       input-list key-list))
+
+;; Makes a list of number-keys
 (define (make-number-keylist input-list key-list font-size)
   (map (lambda (x y)
          (if (< x 1)
-           (markup
-             #:conditional-circle-markup
-             x
-             (markup #:abs-fontsize font-size #:number y))
-           (markup #:null)))
+             (markup
+              #:conditional-circle-markup
+              x
+              (markup #:abs-fontsize font-size #:number y))
+             (markup #:null)))
        input-list
        key-list))
 
-; Creates a named-key list with a certain alignment
+;; Creates a named-key list with a certain alignment
 (define (aligned-text-stencil-function dir hv)
   (lambda (key-name-list radius fill-list layout props)
     (interpret-markup
-      layout
-      props
-      (make-general-align-markup
-        X
-        dir
-        ((if hv make-concat-markup make-center-column-markup)
-          (make-name-keylist
-            (map text-fill-translate fill-list)
-            key-name-list
-            (* 12 radius)))))))
+     layout
+     props
+     (make-general-align-markup
+      X
+      dir
+      ((if hv make-concat-markup make-center-column-markup)
+       (make-name-keylist
+        (map text-fill-translate fill-list)
+        key-name-list
+        (* 12 radius)))))))
 
 (define number-column-stencil
   (lambda (key-name-list radius fill-list layout props)
     (interpret-markup
-      layout
-      props
+     layout
+     props
+     (make-general-align-markup
+      Y
+      CENTER
       (make-general-align-markup
-        Y
-        CENTER
-        (make-general-align-markup
-          X
-          RIGHT
-          (make-override-markup
-            '(baseline-skip . 0)
-            (make-column-markup
-              (make-number-keylist
-                (map text-fill-translate fill-list)
-                key-name-list
-                (* radius 8)))))))))
-
-; Utility function for the left-hand keys
+       X
+       RIGHT
+       (make-override-markup
+        '(baseline-skip . 0)
+        (make-column-markup
+         (make-number-keylist
+          (map text-fill-translate fill-list)
+          key-name-list
+          (* radius 8)))))))))
+
+;; Utility function for the left-hand keys
 (define lh-woodwind-text-stencil
   (aligned-text-stencil-function LEFT #t))
 
-; Utility function for the right-hand keys
+;; Utility function for the right-hand keys
 (define rh-woodwind-text-stencil
   (aligned-text-stencil-function RIGHT #t))
 
@@ -357,17 +322,17 @@ returns @samp{1/3}."
 
 (define (rich-group-draw-rule alist target-part change-part)
   (if
-    (entry-greater-than-x?
-      (map (lambda (key) (assoc-get key alist)) target-part) 3)
-    (map-selected-alist-keys (lambda (x) (if (= x 0) 1 x)) change-part alist)
-    alist))
+   (entry-greater-than-x?
+    (map (lambda (key) (assoc-get key alist)) target-part) 3)
+   (map-selected-alist-keys (lambda (x) (if (= x 0) 1 x)) change-part alist)
+   alist))
 
 (define (bassoon-midline-rule alist target-part)
   (if
-    (entry-greater-than-x?
-      (map (lambda (key) (assoc-get key alist)) target-part) 0)
-    (map-selected-alist-keys (lambda (x) 1) '((hidden . long-midline)) alist)
-    (map-selected-alist-keys (lambda (x) 1) '((hidden . midline)) alist)))
+   (entry-greater-than-x?
+    (map (lambda (key) (assoc-get key alist)) target-part) 0)
+   (map-selected-alist-keys (lambda (x) 1) '((hidden . long-midline)) alist)
+   (map-selected-alist-keys (lambda (x) 1) '((hidden . midline)) alist)))
 
 (define (group-draw-rule alist target-part)
   (rich-group-draw-rule alist target-part target-part))
@@ -377,213 +342,213 @@ returns @samp{1/3}."
 
 (define (apply-group-draw-rule-series alist target-part-list)
   (if (null? target-part-list)
-    alist
-    (apply-group-draw-rule-series
-      (group-draw-rule alist (car target-part-list))
-      (cdr target-part-list))))
+      alist
+      (apply-group-draw-rule-series
+       (group-draw-rule alist (car target-part-list))
+       (cdr target-part-list))))
 
 ;; Extra-offset rules
 
 (define (rich-group-extra-offset-rule alist target-part change-part eos)
   (if
-    (entry-greater-than-x?
-      (map (lambda (key) (assoc-get key alist)) target-part) 0)
-    (map-selected-alist-keys (lambda (x) eos) change-part alist)
-    alist))
+   (entry-greater-than-x?
+    (map (lambda (key) (assoc-get key alist)) target-part) 0)
+   (map-selected-alist-keys (lambda (x) eos) change-part alist)
+   alist))
 
 (define (group-extra-offset-rule alist target-part eos)
   (rich-group-extra-offset-rule alist target-part target-part eos))
 
 (define (uniform-extra-offset-rule alist eos)
   (map-selected-alist-keys
-    (lambda (x) (if (pair? x) x eos))
-    (assoc-keys alist)
-    alist))
+   (lambda (x) (if (pair? x) x eos))
+   (assoc-keys alist)
+   alist))
 
 ;;; General drawing commands
 
-; Used all the time for a dividing line
+;; Used all the time for a dividing line
 (define (midline-stencil radius thick fill layout props)
   (make-line-stencil (* thick 2) (* -0.80 radius) 0 (* 0.80 radius) 0))
 
 (define (long-midline-stencil radius thick fill layout props)
   (make-line-stencil (* thick 2) (* -5.75 radius) 0 (* 0.75 radius) 0))
 
-; Used all the time for a small, between-hole key
+;; Used all the time for a small, between-hole key
 (define little-elliptical-key-stencil (standard-e-stencil 0.75 0.2))
 
-; Used for several upper keys in the clarinet and sax
+;; Used for several upper keys in the clarinet and sax
 (define (upper-key-stencil tailw tailh bodyw bodyh)
   (let*
-   ((xmove (lambda (x) (+ tailw (+ 0.2 (* bodyw (- x 0.2))))))
-    (ymove (lambda (x) (+ (- tailh) (+ -0.05 (* bodyh (+ x 0.05)))))))
-  (standard-path-stencil
-    `((,(xmove 0.7)
-       ,(ymove -0.2)
-       ,(xmove 1.0)
-       ,(ymove -1.0)
-       ,(xmove 0.5)
-       ,(ymove -1.0))
-      (,(xmove 0.2)
-       ,(ymove -1.0)
-       ,(xmove 0.2)
-       ,(ymove -0.2)
-       ,(xmove 0.3)
-       ,(ymove -0.1))
-      (,(+ 0.2 tailw)
-       ,(- -0.05 tailh)
-       ,(+ 0.1 (/ tailw 2))
-       ,(- -0.025 (/ tailh 2))
-       0.0
-       0.0))
-    1.0
-    1.0)))
-
-; Utility function for the column-hole maker.
-; Returns the left and right degrees for the drawing of a given
-; fill level (1-quarter, 1-half, etc...)
+      ((xmove (lambda (x) (+ tailw (+ 0.2 (* bodyw (- x 0.2))))))
+       (ymove (lambda (x) (+ (- tailh) (+ -0.05 (* bodyh (+ x 0.05)))))))
+    (standard-path-stencil
+     `((,(xmove 0.7)
+        ,(ymove -0.2)
+        ,(xmove 1.0)
+        ,(ymove -1.0)
+        ,(xmove 0.5)
+        ,(ymove -1.0))
+       (,(xmove 0.2)
+        ,(ymove -1.0)
+        ,(xmove 0.2)
+        ,(ymove -0.2)
+        ,(xmove 0.3)
+        ,(ymove -0.1))
+       (,(+ 0.2 tailw)
+        ,(- -0.05 tailh)
+        ,(+ 0.1 (/ tailw 2))
+        ,(- -0.025 (/ tailh 2))
+        0.0
+        0.0))
+     1.0
+     1.0)))
+
+;; Utility function for the column-hole maker.
+;; Returns the left and right degrees for the drawing of a given
+;; fill level (1-quarter, 1-half, etc...)
 (define (degree-first-true fill-list left? reverse?)
   (define (dfl-crawler fill-list os-list left?)
     (if (car fill-list)
-      ((if left? car cdr) (car os-list))
-      (dfl-crawler (cdr fill-list) (cdr os-list) left?)))
+        ((if left? car cdr) (car os-list))
+        (dfl-crawler (cdr fill-list) (cdr os-list) left?)))
   (dfl-crawler
-    ((if reverse? reverse identity) fill-list)
-    ((if reverse? reverse identity)
-      '((0 . 0) (215 . 325) (180 . 0) (145 . 35) (90 . 90)))
-    left?))
+   ((if reverse? reverse identity) fill-list)
+   ((if reverse? reverse identity)
+    '((0 . 0) (215 . 325) (180 . 0) (145 . 35) (90 . 90)))
+   left?))
 
-; Gets the position of the first (or last if reverse?) element of a list.
+;; Gets the position of the first (or last if reverse?) element of a list.
 (define (position-true-endpoint in-list reverse?)
   (define (pte-crawler in-list n)
     (if (car in-list)
-      n
-      (pte-crawler (cdr in-list) (+ n 1))))
+        n
+        (pte-crawler (cdr in-list) (+ n 1))))
   ((if reverse? - +)
-    (if reverse? (length in-list) 0)
-    (pte-crawler ((if reverse? reverse identity) in-list) 0)))
+   (if reverse? (length in-list) 0)
+   (pte-crawler ((if reverse? reverse identity) in-list) 0)))
 
-; Huge, kind-of-ugly maker of a circle in a column.
-; I think this is the clearest way to write it, though...
+;; Huge, kind-of-ugly maker of a circle in a column.
+;; I think this is the clearest way to write it, though...
 
 (define (column-circle-stencil radius thick fill layout props)
   (let* ((fill-list (process-fill-value fill)))
     (cond
-      ((and
-        (list-ref fill-list 0)
-        (not (true-entry? (list-tail fill-list 1)))) ; is it empty?
-       ((standard-e-stencil 1.0 1.0) radius thick fill layout props))
-      ((and
-        (list-ref fill-list 4)
-        (not (true-entry? (list-head fill-list 4)))) ; is it full?
-       ((standard-e-stencil 1.0 1.0) radius thick fill layout props))
-      ((and
-        (list-ref fill-list 0)
-        (list-ref fill-list 4)) ; is it a trill between empty and full?
-       ((standard-e-stencil 1.0 1.0) radius thick fill layout props))
-      (else  ;If none of these, it is partially full.
-        (ly:stencil-add
-          ((rich-pe-stencil 1.0 1.0 0 360 identity)
-            radius
-            thick
-            (if (list-ref fill-list 4)
-              (expt (assoc-get 'F HOLE-FILL-LIST) 2)
-              1)
-            layout
-            props)
-          ((rich-pe-stencil
-            1.0
-            1.0
-            (degree-first-true fill-list #t #t)
-            (degree-first-true fill-list #f #t)
-            identity)
-            radius
-            thick
-            (if
-              (true-entry?
-                (list-head fill-list (position-true-endpoint fill-list #t)))
-              (expt (assoc-get 'F HOLE-FILL-LIST) 2)
-              (assoc-get 'F HOLE-FILL-LIST))
-            layout
-            props)
-          (if
-            (= 2 (n-true-entries (list-tail fill-list 1))) ; trill?
-            ((rich-pe-stencil
-              1.0
-              1.0
-              (degree-first-true fill-list #t #f)
-              (degree-first-true fill-list #f #f)
-              identity)
-              radius
-              thick
-              (assoc-get 'F HOLE-FILL-LIST)
-              layout
-              props)
-            empty-stencil))))))
+     ((and
+       (list-ref fill-list 0)
+       (not (true-entry? (list-tail fill-list 1)))) ; is it empty?
+      ((standard-e-stencil 1.0 1.0) radius thick fill layout props))
+     ((and
+       (list-ref fill-list 4)
+       (not (true-entry? (list-head fill-list 4)))) ; is it full?
+      ((standard-e-stencil 1.0 1.0) radius thick fill layout props))
+     ((and
+       (list-ref fill-list 0)
+       (list-ref fill-list 4)) ; is it a trill between empty and full?
+      ((standard-e-stencil 1.0 1.0) radius thick fill layout props))
+     (else  ;If none of these, it is partially full.
+      (ly:stencil-add
+       ((rich-pe-stencil 1.0 1.0 0 360 identity)
+        radius
+        thick
+        (if (list-ref fill-list 4)
+            (expt (assoc-get 'F HOLE-FILL-LIST) 2)
+            1)
+        layout
+        props)
+       ((rich-pe-stencil
+         1.0
+         1.0
+         (degree-first-true fill-list #t #t)
+         (degree-first-true fill-list #f #t)
+         identity)
+        radius
+        thick
+        (if
+         (true-entry?
+          (list-head fill-list (position-true-endpoint fill-list #t)))
+         (expt (assoc-get 'F HOLE-FILL-LIST) 2)
+         (assoc-get 'F HOLE-FILL-LIST))
+        layout
+        props)
+       (if
+        (= 2 (n-true-entries (list-tail fill-list 1))) ; trill?
+        ((rich-pe-stencil
+          1.0
+          1.0
+          (degree-first-true fill-list #t #f)
+          (degree-first-true fill-list #f #f)
+          identity)
+         radius
+         thick
+         (assoc-get 'F HOLE-FILL-LIST)
+         layout
+         props)
+        empty-stencil))))))
 
 (define (variable-column-circle-stencil scaler)
   (lambda (radius thick fill layout props)
     (column-circle-stencil (* radius scaler) thick fill layout props)))
 
-; A stencil for ring-column circles that combines two of the above
+;; A stencil for ring-column circles that combines two of the above
 (define (ring-column-circle-stencil radius thick fill layout props)
   (if (= 0 (remainder fill (assoc-get 'R HOLE-FILL-LIST)))
-    (ly:stencil-add
-      ((if
-        (= fill (expt (assoc-get 'R HOLE-FILL-LIST) 2))
-        gray-colorize
-        identity)
+      (ly:stencil-add
+       ((if
+         (= fill (expt (assoc-get 'R HOLE-FILL-LIST) 2))
+         gray-colorize
+         identity)
         ((standard-e-stencil
-            (* (+ (- 1.0 (* 2 thick)) (/ thick 2)))
-            (* (+ (- 1.0 (* 2 thick)) (/ thick 2))))
-          radius
-          (* (* 4 radius) thick)
-          1
-          layout
-          props))
-      ((standard-e-stencil 1.0 1.0) radius thick 1 layout props)
-      (column-circle-stencil
+          (* (+ (- 1.0 (* 2 thick)) (/ thick 2)))
+          (* (+ (- 1.0 (* 2 thick)) (/ thick 2))))
+         radius
+         (* (* 4 radius) thick)
+         1
+         layout
+         props))
+       ((standard-e-stencil 1.0 1.0) radius thick 1 layout props)
+       (column-circle-stencil
         (+ (* (- 1.0 (* 4 thick)) radius) (/ thick 2))
         thick
         (*
-          (if (= 0 (remainder fill (assoc-get 'F HOLE-FILL-LIST)))
-            (assoc-get 'F HOLE-FILL-LIST)
-            1)
-          (if (= fill (expt (assoc-get 'R HOLE-FILL-LIST) 2))
-            (/ fill (expt (assoc-get 'R HOLE-FILL-LIST) 2))
-            (/ fill (assoc-get 'R HOLE-FILL-LIST))))
+         (if (= 0 (remainder fill (assoc-get 'F HOLE-FILL-LIST)))
+             (assoc-get 'F HOLE-FILL-LIST)
+             1)
+         (if (= fill (expt (assoc-get 'R HOLE-FILL-LIST) 2))
+             (/ fill (expt (assoc-get 'R HOLE-FILL-LIST) 2))
+             (/ fill (assoc-get 'R HOLE-FILL-LIST))))
         layout
         props))
-    (column-circle-stencil radius thick fill layout props)))
+      (column-circle-stencil radius thick fill layout props)))
 
 ;;; Flute family stencils
 
 (define flute-lh-b-key-stencil
   (standard-path-stencil
-    '((0 1.3)
-      (0 1.625 -0.125 1.75 -0.25 1.75)
-      (-0.55 1.75 -0.55 0.95 -0.25 0.7)
-      (0 0.4 0 0.125 0 0))
-    2
-    1.55))
+   '((0 1.3)
+     (0 1.625 -0.125 1.75 -0.25 1.75)
+     (-0.55 1.75 -0.55 0.95 -0.25 0.7)
+     (0 0.4 0 0.125 0 0))
+   2
+   1.55))
 
 (define flute-lh-bes-key-stencil
   (standard-path-stencil
-    '((0 1.3)
-      (0 1.625 -0.125 1.75 -0.25 1.75)
-      (-0.55 1.75 -0.55 0.95 -0.25 0.7)
-      (0 0.4 0 0.125 0 0))
-    2.0
-    1.3))
+   '((0 1.3)
+     (0 1.625 -0.125 1.75 -0.25 1.75)
+     (-0.55 1.75 -0.55 0.95 -0.25 0.7)
+     (0 0.4 0 0.125 0 0))
+   2.0
+   1.3))
 
 (define (flute-lh-gis-rh-bes-key-stencil deg)
   (rich-path-stencil
-    '((0.1 0.1 0.2 0.4 0.3 0.6)
-      (0.3 1.0 0.8 1.0 0.8 0.7)
-      (0.8 0.3 0.5 0.3 0 0))
-    1.0
-    1.0
-    (lambda (stencil) (ly:stencil-rotate stencil deg 0 0))))
+   '((0.1 0.1 0.2 0.4 0.3 0.6)
+     (0.3 1.0 0.8 1.0 0.8 0.7)
+     (0.8 0.3 0.5 0.3 0 0))
+   1.0
+   1.0
+   (lambda (stencil) (ly:stencil-rotate stencil deg 0 0))))
 
 (define flute-lh-gis-key-stencil (flute-lh-gis-rh-bes-key-stencil 0))
 
@@ -595,97 +560,97 @@ returns @samp{1/3}."
 
 (define flute-rh-ees-key-stencil
   (standard-path-stencil
-    '((0.8 0) (1.1 0 1.1 0.75 0.7 0.75) (0.5 0.75) (0.15 0.75 0.1 0.2 0 0))
-    -2.38
-    1.4))
+   '((0.8 0) (1.1 0 1.1 0.75 0.7 0.75) (0.5 0.75) (0.15 0.75 0.1 0.2 0 0))
+   -2.38
+   1.4))
 
 (define (piccolo-rh-x-key-stencil radius thick fill layout props)
   (interpret-markup
-    layout
-    props
-    (make-general-align-markup
-      Y
-      DOWN
-      (make-concat-markup
-        (make-name-keylist
-          `(,(text-fill-translate fill))
-          '(("X" . #f))
-          (* 9 radius))))))
+   layout
+   props
+   (make-general-align-markup
+    Y
+    DOWN
+    (make-concat-markup
+     (make-name-keylist
+      `(,(text-fill-translate fill))
+      '(("X" . #f))
+      (* 9 radius))))))
 
 (define flute-lower-row-stretch 1.4)
 
 (define flute-rh-cis-key-stencil
   (standard-path-stencil
-    '((0 0.75) (-0.8 0.75 -0.8 0 0 0))
-    flute-lower-row-stretch
-    flute-lower-row-stretch))
+   '((0 0.75) (-0.8 0.75 -0.8 0 0 0))
+   flute-lower-row-stretch
+   flute-lower-row-stretch))
 
 (define flute-rh-c-key-stencil
   (standard-path-stencil
-    '((0 0.75) (0.4 0.75) (0.4 0) (0 0))
-    flute-lower-row-stretch
-    flute-lower-row-stretch))
+   '((0 0.75) (0.4 0.75) (0.4 0) (0 0))
+   flute-lower-row-stretch
+   flute-lower-row-stretch))
 
 (define flute-rh-b-key-stencil
   (standard-path-stencil
-    '((0 0.75) (0.25 0.75) (0.25 0) (0 0))
-    flute-lower-row-stretch
-    flute-lower-row-stretch))
+   '((0 0.75) (0.25 0.75) (0.25 0) (0 0))
+   flute-lower-row-stretch
+   flute-lower-row-stretch))
 
 (define flute-rh-gz-key-stencil
   (rich-path-stencil
-      '((0.1 0.1 0.4 0.2 0.6 0.3)
-        (1.0 0.3 1.0 0.8 0.7 0.8)
-        (0.3 0.8 0.3 0.5 0 0))
-      flute-lower-row-stretch
-      flute-lower-row-stretch
-      (lambda (stencil) (ly:stencil-rotate stencil 160 0 0))))
+   '((0.1 0.1 0.4 0.2 0.6 0.3)
+     (1.0 0.3 1.0 0.8 0.7 0.8)
+     (0.3 0.8 0.3 0.5 0 0))
+   flute-lower-row-stretch
+   flute-lower-row-stretch
+   (lambda (stencil) (ly:stencil-rotate stencil 160 0 0))))
 
 ;;; Shared oboe/clarinet stencils
 
 (define (oboe-lh-gis-lh-low-b-key-stencil gis?)
   (let*
-    ((x 1.2)
-     (y 0.4)
-     (scaling-factor 1.7)
-     (up-part
-       (car
+      ((x 1.2)
+       (y 0.4)
+       (scaling-factor 1.7)
+       (up-part
+        (car
          (split-bezier
-           `((0.0 . 0.0) (0.0 . ,y) (,x . ,y) (,x . 0.0))
-           0.8)))
-     (down-part
-       (cdr
+          `((0.0 . 0.0) (0.0 . ,y) (,x . ,y) (,x . 0.0))
+          0.8)))
+       (down-part
+        (cdr
          (split-bezier
-           `((,x . 0.0) (,x . ,(- y)) (0.0 . ,(- y)) (0.0 . 0.0))
-           0.2))))
+          `((,x . 0.0) (,x . ,(- y)) (0.0 . ,(- y)) (0.0 . 0.0))
+          0.2))))
     (if gis?
-      (standard-path-stencil
-        (append
+        (standard-path-stencil
+         (append
           (append
-            `((0.25 ,(/ y -2) 0.75 ,(/ y -2) 1.0 0.0))
-            (map (lambda (l)
-                   (flatten-list
-                     (map (lambda (x)
-                            (coord-translate
-                              (coord-rotate x (atan (/ y (* 2 0.25))))
-                              '(1.0 . 0)))
-                          l)))
-                 `(((0 . ,y) (,x . ,y) (,x . 0))
-                   ((,x . ,(- y)) (0 . ,(- y)) (0 . 0)))))
+           `((0.25 ,(/ y -2) 0.75 ,(/ y -2) 1.0 0.0))
+           (map (lambda (l)
+                  (flatten-list
+                   (map (lambda (x)
+                          (coord-translate
+                           (coord-rotate x (atan (/ y (* 2 0.25))))
+                           '(1.0 . 0)))
+                        l)))
+                `(((0 . ,y) (,x . ,y) (,x . 0))
+                  ((,x . ,(- y)) (0 . ,(- y)) (0 . 0)))))
           `((0.75 ,(/ y -2) 0.25 ,(/ y -2) 0.0 0.0)))
-        scaling-factor
-        scaling-factor)
-      (standard-path-stencil
-        (map (lambda (l)
-               (flatten-list
+         scaling-factor
+         scaling-factor)
+        (standard-path-stencil
+         (map (lambda (l)
+                (flatten-list
                  (map (lambda (x)
                         (coord-rotate x (atan (/ y (* 2 0.25)))))
                       l)))
-             `(,(list-tail up-part 1)
-               ,(list-head down-part 1)
-               ,(list-tail down-part 1)))
-        (- scaling-factor)
-        (- scaling-factor)))))
+              `(,(list-tail up-part 1)
+                ,(list-head down-part 1)
+                ,(list-tail down-part 1)))
+         (- scaling-factor)
+         (- scaling-factor)))))
 
 (define oboe-lh-gis-key-stencil (oboe-lh-gis-lh-low-b-key-stencil #t))
 
@@ -693,13 +658,13 @@ returns @samp{1/3}."
 
 (define (oboe-lh-ees-lh-bes-key-stencil ees?)
   (standard-path-stencil
-    `((0 1.5)
-      (0 1.625 -0.125 1.75 -0.25 1.75)
-      (-0.5 1.75 -0.5 0.816 -0.25 0.5)
-      (0 0.25 0 0.125 0 0)
-      (0 ,(if ees? -0.6 -0.3)))
-    (* (if ees? -1.0 1.0) -1.8)
-    1.8))
+   `((0 1.5)
+     (0 1.625 -0.125 1.75 -0.25 1.75)
+     (-0.5 1.75 -0.5 0.816 -0.25 0.5)
+     (0 0.25 0 0.125 0 0)
+     (0 ,(if ees? -0.6 -0.3)))
+   (* (if ees? -1.0 1.0) -1.8)
+   1.8))
 
 (define oboe-lh-ees-key-stencil (oboe-lh-ees-lh-bes-key-stencil #t))
 
@@ -710,13 +675,13 @@ returns @samp{1/3}."
 (define (oboe-lh-octave-key-stencil long?)
   (let* ((h (if long? 1.4 1.2)))
     (standard-path-stencil
-    `((-0.4 0 -0.4 1.0 -0.1 1.0)
-      (-0.1 ,h)
-      (0.1 ,h)
-      (0.1 1.0)
-      (0.4 1.0 0.4 0 0 0))
-    2.0
-    2.0)))
+     `((-0.4 0 -0.4 1.0 -0.1 1.0)
+       (-0.1 ,h)
+       (0.1 ,h)
+       (0.1 1.0)
+       (0.4 1.0 0.4 0 0 0))
+     2.0
+     2.0)))
 
 (define oboe-lh-I-key-stencil (oboe-lh-octave-key-stencil #f))
 
@@ -742,13 +707,13 @@ returns @samp{1/3}."
 
 (define (oboe-rh-c-rh-ees-key-stencil c?)
   (rich-path-stencil
-    '((1.0 0.0 1.0 0.70 1.5 0.70)
-      (2.25 0.70 2.25 -0.4 1.5 -0.4)
-      (1.0 -0.4 1.0 0 0 0)
-      (-0.15 0))
-    2.0
-    1.4
-    (lambda (stencil) (ly:stencil-rotate stencil (if c? 170 180) 0 0))))
+   '((1.0 0.0 1.0 0.70 1.5 0.70)
+     (2.25 0.70 2.25 -0.4 1.5 -0.4)
+     (1.0 -0.4 1.0 0 0 0)
+     (-0.15 0))
+   2.0
+   1.4
+   (lambda (stencil) (ly:stencil-rotate stencil (if c? 170 180) 0 0))))
 
 (define oboe-rh-banana-key-stencil oboe-rh-gis-key-stencil)
 
@@ -756,12 +721,12 @@ returns @samp{1/3}."
 
 (define oboe-rh-cis-key-stencil
   (rich-path-stencil
-    '((0.6 0.0 0.6 0.50 1.25 0.50)
-      (2.25 0.50 2.25 -0.4 1.25 -0.4)
-      (0.6 -0.4 0.6 0 0 0))
-    -0.9
-    1.0
-    (lambda (stencil) (ly:stencil-rotate stencil 0 0 0))))
+   '((0.6 0.0 0.6 0.50 1.25 0.50)
+     (2.25 0.50 2.25 -0.4 1.25 -0.4)
+     (0.6 -0.4 0.6 0 0 0))
+   -0.9
+   1.0
+   (lambda (stencil) (ly:stencil-rotate stencil 0 0 0))))
 
 (define oboe-rh-ees-key-stencil (oboe-rh-c-rh-ees-key-stencil #f))
 
@@ -772,22 +737,22 @@ returns @samp{1/3}."
 
 (define clarinet-lh-R-key-stencil
   (let* ((halfbase (cos (/ PI 10)))
-    (height (*
-      halfbase
-      (/ (sin (/ (* 4 PI) 10)) (cos (/ (* 4 PI) 10))))))
-   (standard-path-stencil
-      `(
-        (0 ,(/ -4.0 3.0) -2.0 ,(/ -4.0 3.0) -2.0 0.0)
-        (-1.5 ,(* 0.5 height) -1.25 ,(* 0.75 height) -1.0 ,height)
-        (-0.75 ,(* 0.75 height) -0.5 ,(* 0.5 height) 0.0 0.0))
-      0.9
-      0.9)))
+         (height (*
+                  halfbase
+                  (/ (sin (/ (* 4 PI) 10)) (cos (/ (* 4 PI) 10))))))
+    (standard-path-stencil
+     `(
+       (0 ,(/ -4.0 3.0) -2.0 ,(/ -4.0 3.0) -2.0 0.0)
+       (-1.5 ,(* 0.5 height) -1.25 ,(* 0.75 height) -1.0 ,height)
+       (-0.75 ,(* 0.75 height) -0.5 ,(* 0.5 height) 0.0 0.0))
+     0.9
+     0.9)))
 
 (define (clarinet-lh-a-key-stencil radius thick fill layout props)
   (let* ((width 0.4) (height 0.75) (linelen 0.45))
-  (ly:stencil-add
-    ((standard-e-stencil width height) radius thick fill layout props)
-    (ly:stencil-translate
+    (ly:stencil-add
+     ((standard-e-stencil width height) radius thick fill layout props)
+     (ly:stencil-translate
       (make-line-stencil thick 0 0 0 (* linelen radius))
       (cons 0 (* height radius))))))
 
@@ -807,30 +772,30 @@ returns @samp{1/3}."
 
 (define clarinet-rh-low-c-key-stencil
   (standard-path-stencil
-    '((0.0 1.5)
-      (0.0 2.5 -1.0 2.5 -1.0 0.75)
-      (-1.0 0.1 0.0 0.25 0.0 0.3)
-      (0.0 0.0))
-    0.8
-    0.8))
+   '((0.0 1.5)
+     (0.0 2.5 -1.0 2.5 -1.0 0.75)
+     (-1.0 0.1 0.0 0.25 0.0 0.3)
+     (0.0 0.0))
+   0.8
+   0.8))
 
 (define clarinet-rh-low-cis-key-stencil
   (standard-path-stencil
-    '((0.0 1.17)
-      (0.0 1.67 -1.0 1.67 -1.0 0.92)
-      (-1.0 0.47 0.0 0.52 0.0 0.62)
-      (0.0 0.0))
-    0.8
-    0.8))
+   '((0.0 1.17)
+     (0.0 1.67 -1.0 1.67 -1.0 0.92)
+     (-1.0 0.47 0.0 0.52 0.0 0.62)
+     (0.0 0.0))
+   0.8
+   0.8))
 
 (define clarinet-rh-low-d-key-stencil
   (standard-path-stencil
-    '((0.0 1.05)
-      (0.0 1.55 -1.0 1.55 -1.0 0.8)
-      (-1.0 0.35 0.0 0.4 0.0 0.5)
-      (0.0 0.0))
-    0.8
-    0.8))
+   '((0.0 1.05)
+     (0.0 1.55 -1.0 1.55 -1.0 0.8)
+     (-1.0 0.35 0.0 0.4 0.0 0.5)
+     (0.0 0.0))
+   0.8
+   0.8))
 
 (define clarinet-rh-one-key-stencil (standard-e-stencil 0.5 0.25))
 
@@ -842,64 +807,64 @@ returns @samp{1/3}."
 
 (define clarinet-rh-b-key-stencil little-elliptical-key-stencil)
 
-; cl low-rh values
+;; cl low-rh values
 (define CL-RH-HAIR 0.09)
 (define CL-RH-H-STRETCH 2.7)
 (define CL-RH-V-STRETCH 0.9)
 
-; TODO
-; there is some unnecessary information duplication here.
-; need a way to control all of the below stencils so that if one
-; changes, all change...
+;; TODO
+;; there is some unnecessary information duplication here.
+;; need a way to control all of the below stencils so that if one
+;; changes, all change...
 
 (define clarinet-rh-fis-key-stencil
   (standard-path-stencil
-    `(,(bezier-head-for-stencil
-        '((0.0 . 0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0))
-        0.5)
-      ,(bezier-head-for-stencil
-        '((0.5 . -0.75) (0.5 . 0.25) (1.5 . 0.25) (1.5 . -0.75))
-        0.5)
-      (1.0 1.0 0.0 1.0 0.0 0.0))
-      CL-RH-H-STRETCH
-      CL-RH-V-STRETCH))
+   `(,(bezier-head-for-stencil
+       '((0.0 . 0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0))
+       0.5)
+     ,(bezier-head-for-stencil
+       '((0.5 . -0.75) (0.5 . 0.25) (1.5 . 0.25) (1.5 . -0.75))
+       0.5)
+     (1.0 1.0 0.0 1.0 0.0 0.0))
+   CL-RH-H-STRETCH
+   CL-RH-V-STRETCH))
 
 (define clarinet-rh-gis-key-stencil
   (standard-path-stencil
-    '((0.0 1.0 1.0 1.0 1.0 0.0) (1.0 -1.0 0.0 -1.0 0.0 0.0))
-    CL-RH-H-STRETCH
-    CL-RH-V-STRETCH))
+   '((0.0 1.0 1.0 1.0 1.0 0.0) (1.0 -1.0 0.0 -1.0 0.0 0.0))
+   CL-RH-H-STRETCH
+   CL-RH-V-STRETCH))
 
 (define clarinet-rh-e-key-stencil
   (standard-path-stencil
-    `(,(bezier-head-for-stencil
-        '((0.0 .  0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0))
-        0.5)
-      ,(bezier-head-for-stencil
-        '((0.5 . -0.75) (0.5 . 0.25) (1.5 . 0.25) (1.5 . -0.75))
-        0.5)
-      ,(bezier-head-for-stencil
-        `((1.0 . 0.0) (,(/ 1 3) . 0.0) (,(/ 1 3) . 1.5) (1.0 .  1.5))
-        0.5)
-       ,(bezier-head-for-stencil
-        `((0.5 . 0.75) (,(/ -1 6) . 0.75) (,(/ -1 6) . -0.75) (0.5 . -0.75))
-        0.5))
-    CL-RH-H-STRETCH
-    CL-RH-V-STRETCH))
+   `(,(bezier-head-for-stencil
+       '((0.0 .  0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0))
+       0.5)
+     ,(bezier-head-for-stencil
+       '((0.5 . -0.75) (0.5 . 0.25) (1.5 . 0.25) (1.5 . -0.75))
+       0.5)
+     ,(bezier-head-for-stencil
+       `((1.0 . 0.0) (,(/ 1 3) . 0.0) (,(/ 1 3) . 1.5) (1.0 .  1.5))
+       0.5)
+     ,(bezier-head-for-stencil
+       `((0.5 . 0.75) (,(/ -1 6) . 0.75) (,(/ -1 6) . -0.75) (0.5 . -0.75))
+       0.5))
+   CL-RH-H-STRETCH
+   CL-RH-V-STRETCH))
 
 (define clarinet-rh-f-key-stencil clarinet-rh-gis-key-stencil)
 
 (define bass-clarinet-rh-ees-key-stencil
   (standard-path-stencil
-    `(,(bezier-head-for-stencil
-        '((0.0 . 0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0))
-        0.5)
-      ,(bezier-head-for-stencil
-        '((0.5 . -0.75) (0.5 . 0.25) (1.5 . 0.25) (1.5 . -0.75))
-        0.5)
-      (1.0 1.0 0.0 1.0 0.0 0.0))
-    CL-RH-H-STRETCH
-    (- CL-RH-V-STRETCH)))
+   `(,(bezier-head-for-stencil
+       '((0.0 . 0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0))
+       0.5)
+     ,(bezier-head-for-stencil
+       '((0.5 . -0.75) (0.5 . 0.25) (1.5 . 0.25) (1.5 . -0.75))
+       0.5)
+     (1.0 1.0 0.0 1.0 0.0 0.0))
+   CL-RH-H-STRETCH
+   (- CL-RH-V-STRETCH)))
 
 (define low-bass-clarinet-rh-ees-key-stencil clarinet-rh-e-key-stencil)
 
@@ -921,21 +886,21 @@ returns @samp{1/3}."
 
 (define saxophone-lh-gis-key-stencil
   (standard-path-stencil
-    '((0.0 0.4)
-      (0.0 0.8 3.0 0.8 3.0 0.4)
-      (3.0 0.0)
-      (3.0 -0.4 0.0 -0.4 0.0 0.0))
-    0.8
-    0.8))
+   '((0.0 0.4)
+     (0.0 0.8 3.0 0.8 3.0 0.4)
+     (3.0 0.0)
+     (3.0 -0.4 0.0 -0.4 0.0 0.0))
+   0.8
+   0.8))
 
 (define (saxophone-lh-b-cis-key-stencil flip?)
   (standard-path-stencil
-    '((0.0 1.0)
-      (0.4 1.0 0.8 0.9 1.35 0.8)
-      (1.35 0.0)
-      (0.0 0.0))
-    (* (if flip? -1 1) 0.8)
-    0.8))
+   '((0.0 1.0)
+     (0.4 1.0 0.8 0.9 1.35 0.8)
+     (1.35 0.0)
+     (0.0 0.0))
+   (* (if flip? -1 1) 0.8)
+   0.8))
 
 (define saxophone-lh-cis-key-stencil (saxophone-lh-b-cis-key-stencil #t))
 
@@ -943,27 +908,27 @@ returns @samp{1/3}."
 
 (define saxophone-lh-low-bes-key-stencil
   (standard-path-stencil
-    '((3.0 0.0) (3.0 -1.5 0.0 -1.5 0.0 0.0))
-    0.8
-    0.8))
+   '((3.0 0.0) (3.0 -1.5 0.0 -1.5 0.0 0.0))
+   0.8
+   0.8))
 
 (define (saxophone-rh-side-key-stencil width height)
   (standard-path-stencil
-    `((0.0 ,height)
-    (0.05 ,(+ height 0.05) 0.1 ,(+ height 0.1) 0.15 ,(+ height 0.15))
-    (,(- width 0.15) ,(+ height 0.15))
-    (,(- width 0.1)
-     ,(+ height 0.1)
-     ,(- width 0.05)
-     ,(+ height 0.05)
-     ,width
-     ,height)
-    (,width 0.0)
-    (,(- width 0.05) -0.05 ,(- width 0.1) -0.1 ,(- width 0.15) -0.15)
-    (0.15 -0.15)
-    (0.1 -0.1 0.05 -0.05 0.0 0.0))
-    1.0
-    1.0))
+   `((0.0 ,height)
+     (0.05 ,(+ height 0.05) 0.1 ,(+ height 0.1) 0.15 ,(+ height 0.15))
+     (,(- width 0.15) ,(+ height 0.15))
+     (,(- width 0.1)
+      ,(+ height 0.1)
+      ,(- width 0.05)
+      ,(+ height 0.05)
+      ,width
+      ,height)
+     (,width 0.0)
+     (,(- width 0.05) -0.05 ,(- width 0.1) -0.1 ,(- width 0.15) -0.15)
+     (0.15 -0.15)
+     (0.1 -0.1 0.05 -0.05 0.0 0.0))
+   1.0
+   1.0))
 
 (define saxophone-rh-e-key-stencil (saxophone-rh-side-key-stencil 0.9 1.2))
 
@@ -973,18 +938,18 @@ returns @samp{1/3}."
 
 (define saxophone-rh-high-fis-key-stencil
   (standard-path-stencil
-    (append
-      '((0.0 1.0) (0.0 1.4 0.6 1.4 0.6 1.0) (0.6 0.0))
-      (map (lambda (l)
-             (flatten-list
-               (map (lambda (x)
-                      (coord-rotate x (atan (* -1 (/ PI 6)))))
-                    l)))
-           '(((0.6 . -1.0))
-             ((0.6 . -1.4) (0.0 . -1.4) (0.0 . -1.0))
-             ((0.0 . 0.0)))))
-       0.75
-       0.75))
+   (append
+    '((0.0 1.0) (0.0 1.4 0.6 1.4 0.6 1.0) (0.6 0.0))
+    (map (lambda (l)
+           (flatten-list
+            (map (lambda (x)
+                   (coord-rotate x (atan (* -1 (/ PI 6)))))
+                 l)))
+         '(((0.6 . -1.0))
+           ((0.6 . -1.4) (0.0 . -1.4) (0.0 . -1.0))
+           ((0.0 . 0.0)))))
+   0.75
+   0.75))
 
 (define saxophone-rh-fis-key-stencil (standard-e-stencil 1.0 0.5))
 
@@ -992,112 +957,112 @@ returns @samp{1/3}."
 
 (define saxophone-rh-low-c-key-stencil
   (standard-path-stencil
-    '((3.0 0.0) (3.0 -1.5 0.0 -1.5 0.0 0.0))
-    0.8
-    0.8))
+   '((3.0 0.0) (3.0 -1.5 0.0 -1.5 0.0 0.0))
+   0.8
+   0.8))
 
 (define (saxophone-lh-low-a-key-stencil radius thick fill layout props)
   (interpret-markup
-    layout
-    props
-    (make-general-align-markup
-      Y
-      DOWN
-      (make-concat-markup
-        (make-name-keylist
-          `(,(text-fill-translate fill))
-          '(("lowA" . #f))
-          (* 9 radius))))))
+   layout
+   props
+   (make-general-align-markup
+    Y
+    DOWN
+    (make-concat-markup
+     (make-name-keylist
+      `(,(text-fill-translate fill))
+      '(("lowA" . #f))
+      (* 9 radius))))))
 
 ;;; Bassoon family stencils
 
 (define (bassoon-bend-info-maker height gap cut)
   (let* (
-    (first-bezier
-      (flatten-list
-        (car
-          (split-bezier
-            `((0.0 . ,(+ height gap))
-             (0.0 . ,(+ height (+ gap 1.0)))
-             (1.0 . ,(+ height (+ gap 2.0)))
-             (2.0 . ,(+ height (+ gap 2.0))))
-             cut))))
-    (second-bezier
-      (flatten-list
-        (reverse
-          (car
+         (first-bezier
+          (flatten-list
+           (car
             (split-bezier
+             `((0.0 . ,(+ height gap))
+               (0.0 . ,(+ height (+ gap 1.0)))
+               (1.0 . ,(+ height (+ gap 2.0)))
+               (2.0 . ,(+ height (+ gap 2.0))))
+             cut))))
+         (second-bezier
+          (flatten-list
+           (reverse
+            (car
+             (split-bezier
               `((1.0 . ,height)
-               (1.0 . ,(+ 0.5 height))
-               (1.5 . ,(+ 1.0 height))
-               (2.0 . ,(+ 1.0 height)))
+                (1.0 . ,(+ 0.5 height))
+                (1.5 . ,(+ 1.0 height))
+                (2.0 . ,(+ 1.0 height)))
               cut)))))
-    (slope-offset1
-      (get-slope-offset
-        `(,(list-ref first-bezier 4) . ,(list-ref first-bezier 5))
-        `(,(list-ref first-bezier 6) . ,(list-ref first-bezier 7))))
-    (slope-offset2
-      (get-slope-offset
-        `(,(list-ref second-bezier 0) . ,(list-ref second-bezier 1))
-        `(,(list-ref second-bezier 2) . ,(list-ref second-bezier 3)))))
-   (list first-bezier second-bezier slope-offset1 slope-offset2)))
+         (slope-offset1
+          (get-slope-offset
+           `(,(list-ref first-bezier 4) . ,(list-ref first-bezier 5))
+           `(,(list-ref first-bezier 6) . ,(list-ref first-bezier 7))))
+         (slope-offset2
+          (get-slope-offset
+           `(,(list-ref second-bezier 0) . ,(list-ref second-bezier 1))
+           `(,(list-ref second-bezier 2) . ,(list-ref second-bezier 3)))))
+    (list first-bezier second-bezier slope-offset1 slope-offset2)))
 
 (define
   (make-tilted-portion
-    first-bezier
-    second-bezier
-    slope-offset1
-    slope-offset2
-    keylen
-    bezier?)
+   first-bezier
+   second-bezier
+   slope-offset1
+   slope-offset2
+   keylen
+   bezier?)
   (append
-    `((,(+ keylen (list-ref first-bezier 6))
-     ,(+
+   `((,(+ keylen (list-ref first-bezier 6))
+      ,(+
         (*
+         (car slope-offset1)
+         (+ keylen (list-ref first-bezier 6))) (cdr slope-offset1))))
+   ((if bezier? (lambda (x) `(,(concatenate x))) identity)
+    `((,(+ (+ keylen 1.75) (list-ref first-bezier 6))
+       ,(+
+         (*
           (car slope-offset1)
-          (+ keylen (list-ref first-bezier 6))) (cdr slope-offset1))))
-    ((if bezier? (lambda (x) `(,(apply append x))) identity)
-     `((,(+ (+ keylen 1.75) (list-ref first-bezier 6))
+          (+ (+ keylen 1.75) (list-ref first-bezier 6)))
+         (cdr slope-offset1)))
+      (,(+ (+ keylen 1.75) (list-ref second-bezier 0))
        ,(+
-          (*
-            (car slope-offset1)
-            (+ (+ keylen 1.75) (list-ref first-bezier 6)))
-          (cdr slope-offset1)))
-       (,(+ (+ keylen 1.75) (list-ref second-bezier 0))
+         (*
+          (car slope-offset2)
+          (+ (+ keylen 1.75) (list-ref second-bezier 0)))
+         (cdr slope-offset2)))
+      (,(+ keylen (list-ref second-bezier 0))
        ,(+
-          (*
-            (car slope-offset2)
-            (+ (+ keylen 1.75) (list-ref second-bezier 0)))
-          (cdr slope-offset2)))
-       (,(+ keylen (list-ref second-bezier 0))
-        ,(+
-          (* (car slope-offset2)  (+ keylen (list-ref second-bezier 0)))
-          (cdr slope-offset2)))))
-    `(,(list-head second-bezier 2))))
+         (* (car slope-offset2)  (+ keylen (list-ref second-bezier 0)))
+         (cdr slope-offset2)))))
+   `(,(list-head second-bezier 2))))
 
 (define (rich-bassoon-uber-key-stencil height gap cut keylen d1 d2 proc bezier?)
   (let* ((info-list (bassoon-bend-info-maker height gap cut))
-   (first-bezier (car info-list))
-   (second-bezier (cadr info-list))
-   (slope-offset1 (caddr info-list))
-   (slope-offset2 (cadddr info-list)))
-  (rich-path-stencil
-    (append
+         (first-bezier (car info-list))
+         (second-bezier (cadr info-list))
+         (slope-offset1 (caddr info-list))
+         (slope-offset2 (cadddr info-list)))
+    (rich-path-stencil
+     (append
       `((0.0 ,(+ height gap))
-      ,(list-tail first-bezier 2))
+        ,(list-tail first-bezier 2))
       (make-tilted-portion
-        first-bezier
-        second-bezier
-        slope-offset1
-        slope-offset2
-        keylen
-        bezier?)
+       first-bezier
+       second-bezier
+       slope-offset1
+       slope-offset2
+       keylen
+       bezier?)
       `(,(list-tail second-bezier 2)
-      (1.0 0.0)
-      (0.0 0.0)))
-    d1
-    d2
-    proc)))
+        (1.0 0.0)
+        (0.0 0.0)))
+     d1
+     d2
+     proc)))
 
 (define (bassoon-uber-key-stencil height gap cut keylen d1 d2)
   (rich-bassoon-uber-key-stencil height gap cut keylen d1 d2 identity #t))
@@ -1110,15 +1075,15 @@ returns @samp{1/3}."
 
 (define bassoon-lh-ees-key-stencil
   (rich-e-stencil
-    1.2
-    0.6
+   1.2
+   0.6
    (lambda (stencil) (ly:stencil-rotate stencil 30 0 0))))
 
 (define bassoon-lh-cis-key-stencil
   (rich-e-stencil
-    1.0
-    0.5
-    (lambda (stencil) (ly:stencil-rotate stencil 30 0 0))))
+   1.0
+   0.5
+   (lambda (stencil) (ly:stencil-rotate stencil 30 0 0))))
 
 (define bassoon-lh-lbes-key-stencil
   (bassoon-uber-key-stencil 1.0 0.5 0.7 0.5 0.6 -0.6))
@@ -1131,40 +1096,40 @@ returns @samp{1/3}."
 
 (define bassoon-lh-ld-key-stencil
   (standard-path-stencil
-    '((-0.8 4.0 1.4 4.0 0.6 0.0)
-      (0.5 -0.5 0.5 -0.8 0.6 -1.0)
-      (0.7 -1.2 0.8 -1.3 0.8 -1.8)
-      (0.5 -1.8)
-      (0.5 -1.4 0.4 -1.2 0.3 -1.1)
-      (0.2 -1.0 0.1 -0.5 0.0 0.0))
-    1.0
-    1.0))
+   '((-0.8 4.0 1.4 4.0 0.6 0.0)
+     (0.5 -0.5 0.5 -0.8 0.6 -1.0)
+     (0.7 -1.2 0.8 -1.3 0.8 -1.8)
+     (0.5 -1.8)
+     (0.5 -1.4 0.4 -1.2 0.3 -1.1)
+     (0.2 -1.0 0.1 -0.5 0.0 0.0))
+   1.0
+   1.0))
 
 (define bassoon-lh-d-flick-key-stencil
   (let ((height 3.0))
     (standard-path-stencil
-      `((0.0 ,height)
+     `((0.0 ,height)
        (0.2 ,(+ height 1.6) 0.8 ,(+ height 1.8) 1.0 ,(+ height 1.8))
        (1.4 ,(+ height 1.8) 1.9 ,(+ height 1.3) 1.9 ,(+ height 1.0))
        (1.9 ,(+ height 0.7) 1.0 ,(+ height 0.4) 0.8 ,(+ height 0.3))
        (0.6 ,(+ height 0.2) 0.4 ,(+ height 0.1) 0.4 ,(- height 0.1))
        (0.4 0.0)
        (0.0 0.0))
-      -1.0
-      -1.0)))
+     -1.0
+     -1.0)))
 
 (define bassoon-lh-c-flick-key-stencil
   (let ((height 3.0))
     (standard-path-stencil
-      `((0.0 ,height)
-         (0.0 ,(+ height 1.6) 0.4 ,(+ height 1.8) 0.5 ,(+ height 1.8))
-         (0.7 ,(+ height 1.8) 0.9 ,(+ height 1.3) 0.9 ,(+ height 1.0))
-         (0.9 ,(+ height 0.5) 0.7 ,(+ height 0.4) 0.6 ,(+ height 0.3))
-         (0.5 ,(+ height 0.2) 0.4 ,(+ height 0.1) 0.4 ,(- height 0.1))
-         (0.4 0.0)
-         (0.0 0.0))
-      -1.0
-      -1.0)))
+     `((0.0 ,height)
+       (0.0 ,(+ height 1.6) 0.4 ,(+ height 1.8) 0.5 ,(+ height 1.8))
+       (0.7 ,(+ height 1.8) 0.9 ,(+ height 1.3) 0.9 ,(+ height 1.0))
+       (0.9 ,(+ height 0.5) 0.7 ,(+ height 0.4) 0.6 ,(+ height 0.3))
+       (0.5 ,(+ height 0.2) 0.4 ,(+ height 0.1) 0.4 ,(- height 0.1))
+       (0.4 0.0)
+       (0.0 0.0))
+     -1.0
+     -1.0)))
 
 (define bassoon-lh-a-flick-key-stencil
   (bassoon-uber-key-stencil 5.0 1.0 0.3 0.6 -0.5 -0.5))
@@ -1176,14 +1141,14 @@ returns @samp{1/3}."
 
 (define bassoon-rh-cis-key-stencil
   (rich-bassoon-uber-key-stencil
-    1.1
-    1.5
-    0.9
-    0.3
-    0.5
-    0.5
-    (lambda (stencil) (ly:stencil-rotate stencil -76 0 0))
-    #t))
+   1.1
+   1.5
+   0.9
+   0.3
+   0.5
+   0.5
+   (lambda (stencil) (ly:stencil-rotate stencil -76 0 0))
+   #t))
 
 (define bassoon-rh-bes-key-stencil little-elliptical-key-stencil)
 
@@ -1192,29 +1157,29 @@ returns @samp{1/3}."
 
 (define bassoon-rh-f-key-stencil
   (let* ((height 0.5) (gap 1.0) (cut 0.8) (keylen 1.5)
-    (info-list (bassoon-bend-info-maker height gap cut))
-    (first-bezier (car info-list))
-    (second-bezier (cadr info-list))
-    (slope-offset1 (caddr info-list))
-    (slope-offset2 (cadddr info-list)))
-  (standard-path-stencil
-    (append
+         (info-list (bassoon-bend-info-maker height gap cut))
+         (first-bezier (car info-list))
+         (second-bezier (cadr info-list))
+         (slope-offset1 (caddr info-list))
+         (slope-offset2 (cadddr info-list)))
+    (standard-path-stencil
+     (append
       (map
-        (lambda (l)
-          (rotunda-map
-            -
-            l
-            (list-tail first-bezier 6)))
-        (make-tilted-portion
-          first-bezier
-          second-bezier
-          slope-offset1
-          slope-offset2
-          keylen
-          #t))
+       (lambda (l)
+         (map
+          -
+          l
+          (apply circular-list (list-tail first-bezier 6))))
+       (make-tilted-portion
+        first-bezier
+        second-bezier
+        slope-offset1
+        slope-offset2
+        keylen
+        #t))
       '((0.0 0.0)))
-    -0.7
-    0.7)))
+     -0.7
+     0.7)))
 
 (define bassoon-rh-gis-key-stencil
   (bassoon-uber-key-stencil 0.3 1.0 0.8 1.0 -0.7 0.7))
index 16f809fc8bca2306e6c71d57cc5722bdfdc009fc..f67125337b574bf0a3ffe0614ceb4dac836ac3b9 100644 (file)
   "Define a display method for a music type and store it in the
 `display-methods' property of the music type entry found in the
 `music-name-to-property-table' hash table.  Print methods previously
-defined for that music type are lost. 
+defined for that music type are lost.
 Syntax: (define-display-method MusicType (expression parser)
-         ...body...))"
+          ...body...))"
   `(let ((type-props (hashq-ref music-name-to-property-table
-                               ',music-type '()))
-        (method (lambda ,vars
-                  ,@body)))
+                                ',music-type '()))
+         (method (lambda ,vars
+                   ,@body)))
      (set! type-props
-          (assoc-set! type-props 'display-methods (list method)))
+           (assoc-set! type-props 'display-methods (list method)))
      (hashq-set! music-name-to-property-table
-                ',music-type
-                type-props)
+                 ',music-type
+                 type-props)
      method))
 
 (define-macro (define-extra-display-method music-type vars . body)
@@ -60,60 +60,68 @@ is supposed to have been previously defined with `define-display-method'.
 This new method should return a string or #f.  If #f is returned, the next
 display method will be called."
   `(let* ((type-props (hashq-ref music-name-to-property-table
-                                ',music-type '()))
-         (methods (assoc-ref type-props 'display-methods))
-         (new-method (lambda ,vars
-                       ,@body)))
+                                 ',music-type '()))
+          (methods (assoc-ref type-props 'display-methods))
+          (new-method (lambda ,vars
+                        ,@body)))
      (set! type-props
-          (assoc-set! type-props
-                      'display-methods
-                      (cons new-method methods)))
+           (assoc-set! type-props
+                       'display-methods
+                       (cons new-method methods)))
      (hashq-set! music-name-to-property-table
-                ',music-type
-                type-props)
+                 ',music-type
+                 type-props)
      new-method))
 
 (define* (tag->lily-string expr #:optional (post-event? #f))
   (format #f "~{~a ~}"
-         (map (lambda (tag)
-                (format #f "~a\\tag #'~a" (if post-event? "-" "") tag))
-              (ly:music-property expr 'tags))))
+          (map (lambda (tag)
+                 (format #f "~a\\tag #'~a" (if post-event? "-" "") tag))
+               (ly:music-property expr 'tags))))
 
 (define* (tweaks->lily-string expr #:optional (post-event? #f))
   (format #f "~{~a ~}"
           (map (lambda (tweak)
-                 (format #f "~a\\tweak ~a #~a"
-                         (if post-event? "-" "")
-                        (if (pair? (car tweak))
-                            (format #f "~a #'~a"
-                                    (caar tweak) (cdar tweak))
-                            (format #f "#'~a" (car tweak)))
-                         (scheme-expr->lily-string (cdr tweak))))
+                 (let ((addr (car tweak))
+                       (val (cdr tweak)))
+                   (format #f "~a\\tweak ~a #~a"
+                           (if post-event? "-" "")
+                           (cond
+                            ((symbol? addr)
+                             (format #f "~a" addr))
+                            ((symbol? (cdr addr))
+                             (format #f "~a.~a" (car addr) (cdr addr)))
+                            (else
+                             (format #f "~{~a~^.~}"
+                                     (if (symbol? (car addr))
+                                         addr
+                                         (cdr addr)))))
+                           (scheme-expr->lily-string val))))
                (ly:music-property expr 'tweaks))))
 
 (define-public (music->lily-string expr parser)
   "Print @var{expr}, a music expression, in LilyPond syntax."
   (if (ly:music? expr)
       (let* ((music-type (ly:music-property expr 'name))
-            (procs (assoc-ref (hashq-ref music-name-to-property-table
-                                         music-type '())
-                              'display-methods))
-            (result-string (and procs (any (lambda (proc)
-                                             (proc expr parser))
-                                           procs))))
-       (if result-string
-           (format #f "~a~a~a"
+             (procs (assoc-ref (hashq-ref music-name-to-property-table
+                                          music-type '())
+                               'display-methods))
+             (result-string (and procs (any (lambda (proc)
+                                              (proc expr parser))
+                                            procs))))
+        (if result-string
+            (format #f "~a~a~a"
                     (tag->lily-string expr (post-event? expr))
                     (tweaks->lily-string expr (post-event? expr))
-                   result-string)
-           (format #f "%{ Print method not implemented for music type ~a %}"
-                   music-type)))
+                    result-string)
+            (format #f "%{ Print method not implemented for music type ~a %}"
+                    music-type)))
       (format #f "%{ expecting a music expression: ~a %}" expr)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;
 ;;; Music pattern matching
-;;; 
+;;;
 
 (define (var? x)
   (and (symbol? x) (char=? #\? (string-ref (symbol->string x) 0))))
@@ -128,16 +136,16 @@ display method will be called."
 (define (music-or-var-list? x)
   (and (pair? x)
        (every (lambda (e)
-               (or (music? e) (var? e)))
-             x)))
+                (or (music? e) (var? e)))
+              x)))
 
 (define (key-val-list->alist lst)
   (define (key-val-list->alist-aux lst prev-result)
     (if (null? lst)
-       prev-result
-       (key-val-list->alist-aux (cddr lst)
-                                (cons (cons (first lst) (second lst))
-                                      prev-result))))
+        prev-result
+        (key-val-list->alist-aux (cddr lst)
+                                 (cons (cons (first lst) (second lst))
+                                       prev-result))))
   (reverse! (key-val-list->alist-aux lst (list))))
 
 (define (gen-condition expr pattern)
@@ -145,100 +153,100 @@ display method will be called."
 Generate an form that checks if the properties of `expr'
 match thoses described in `pattern'."
   (let* (;; all (property . value) found at the first depth in pattern,
-        ;; including a (name . <Musictype>) pair.
-        (pat-all-props (cons (cons 'name (second pattern))
-                             (key-val-list->alist (cddr pattern))))
-        ;; all (property . value) pairs found in pattern, where value is not
-        ;; a ?var, a music expression or a music list.
-        (prop-vals (remove (lambda (kons)
-                            (or (var? (cdr kons))
-                                (music? (cdr kons))
-                                (music-or-var-list? (cdr kons))))
-                           pat-all-props))
-        ;; list of (property . element) pairs, where element is a music expression
-        (element-list (filter (lambda (kons) (music? (cdr kons)))
-                              pat-all-props))
-        ;; list of (property . (e1 e2 ..)) pairs, where (e1 e2 ...) is a 
-        ;; list a music expressions
-        (elements-list (filter (lambda (kons) (music-or-var-list? (cdr kons)))
-                               pat-all-props)))
-    `(and 
+         ;; including a (name . <Musictype>) pair.
+         (pat-all-props (cons (cons 'name (second pattern))
+                              (key-val-list->alist (cddr pattern))))
+         ;; all (property . value) pairs found in pattern, where value is not
+         ;; a ?var, a music expression or a music list.
+         (prop-vals (remove (lambda (kons)
+                              (or (var? (cdr kons))
+                                  (music? (cdr kons))
+                                  (music-or-var-list? (cdr kons))))
+                            pat-all-props))
+         ;; list of (property . element) pairs, where element is a music expression
+         (element-list (filter (lambda (kons) (music? (cdr kons)))
+                               pat-all-props))
+         ;; list of (property . (e1 e2 ..)) pairs, where (e1 e2 ...) is a
+         ;; list a music expressions
+         (elements-list (filter (lambda (kons) (music-or-var-list? (cdr kons)))
+                                pat-all-props)))
+    `(and
       ;; a form that checks that `expr' is a music expression
       ;; before actually accessing its properties...
       (ly:music? ,expr)
       ;; a form that checks that `expr' properties have the same
       ;; values as those given in `pattern'
       ,@(map (lambda (prop-val)
-              (let ((prop (car prop-val))
-                    (val (cdr prop-val)))
-                `(and (not (null? (ly:music-property ,expr ',prop)))
-                      (equal? (ly:music-property ,expr ',prop) ,val))))
-            prop-vals)
+               (let ((prop (car prop-val))
+                     (val (cdr prop-val)))
+                 `(and (not (null? (ly:music-property ,expr ',prop)))
+                       (equal? (ly:music-property ,expr ',prop) ,val))))
+             prop-vals)
       ;; build the test condition for each element found in a (property . element) pair.
       ;; (typically, property will be 'element)
       ,@(map (lambda (prop-element)
-              (gen-condition `(ly:music-property ,expr ',(car prop-element)) (cdr prop-element)))
-            element-list)
+               (gen-condition `(ly:music-property ,expr ',(car prop-element)) (cdr prop-element)))
+             element-list)
       ;; build the test conditions for each element found in a (property . (e1 e2 ...)) pair.
       ;; this requires accessing to an element of a list, hence the index.
       ;; (typically, property will be 'elements)
       ,@(map (lambda (prop-elements)
-              (let ((ges (gensym))
-                    (index -1))
-                `(and ,@(map (lambda (e)
-                               (set! index (1+ index))
-                               (if (music? e)
-                                   (gen-condition `(and (> (length (ly:music-property ,expr ',(car prop-elements)))
-                                                           ,index)
-                                                        (list-ref (ly:music-property ,expr ',(car prop-elements)) 
-                                                                  ,index))
-                                                  e)
-                                   #t))
-                             (cdr prop-elements)))))
-            elements-list))))
+               (let ((ges (gensym))
+                     (index -1))
+                 `(and ,@(map (lambda (e)
+                                (set! index (1+ index))
+                                (if (music? e)
+                                    (gen-condition `(and (> (length (ly:music-property ,expr ',(car prop-elements)))
+                                                            ,index)
+                                                         (list-ref (ly:music-property ,expr ',(car prop-elements))
+                                                                   ,index))
+                                                   e)
+                                    #t))
+                              (cdr prop-elements)))))
+             elements-list))))
 
 (define (gen-bindings expr pattern)
   "Helper function for `with-music-match'.
 Generate binding forms by looking for ?var symbol in pattern."
   (let* (;; all (property . value) found at the first depth of pattern,
-        ;; including a (name . <Musictype>) pair.
-        (pat-all-props (cons (cons 'name (second pattern))
-                             (key-val-list->alist (cddr pattern))))
-        ;; all (property . ?var) pairs
-        (prop-vars (filter (lambda (kons) (var? (cdr kons)))
-                           pat-all-props))
-        ;; list of (property . element) pairs, where element is a music expression
-        (element-list (filter (lambda (kons) (music? (cdr kons)))
-                              pat-all-props))
-        ;; list of (property . (e1 e2 ..)) pairs, where (e1 e2 ...) is a 
-        ;; list a music expressions
-        (elements-list (filter (lambda (kons) (music-or-var-list? (cdr kons)))
-                               pat-all-props)))
-    (append 
+         ;; including a (name . <Musictype>) pair.
+         (pat-all-props (cons (cons 'name (second pattern))
+                              (key-val-list->alist (cddr pattern))))
+         ;; all (property . ?var) pairs
+         (prop-vars (filter (lambda (kons) (var? (cdr kons)))
+                            pat-all-props))
+         ;; list of (property . element) pairs, where element is a music expression
+         (element-list (filter (lambda (kons) (music? (cdr kons)))
+                               pat-all-props))
+         ;; list of (property . (e1 e2 ..)) pairs, where (e1 e2 ...) is a
+         ;; list a music expressions
+         (elements-list (filter (lambda (kons) (music-or-var-list? (cdr kons)))
+                                pat-all-props)))
+    (append
      ;; the binding form for the ?var variable found in pattern (first depth).
      ;; ?var is bound to the value of `expr' property
      (map (lambda (prop-var)
-           `(,(cdr prop-var) (ly:music-property ,expr ',(car prop-var))))
-         prop-vars)
+            `(,(cdr prop-var) (ly:music-property ,expr ',(car prop-var))))
+          prop-vars)
      ;; generate bindings for each element found in a (property . element) pair.
      ;; (typically, property will be 'element)
      (append-map (lambda (prop-element)
-                  (gen-bindings `(ly:music-property ,expr ',(car prop-element))
-                                (cdr prop-element)))
-                element-list)
+                   (gen-bindings `(ly:music-property ,expr ',(car prop-element))
+                                 (cdr prop-element)))
+                 element-list)
      ;; generate bindings for each element found in a (property . (e1 e2 ...)) pair
      ;; (typically, property will be 'elements)
-           (append-map (lambda (prop-elements)
-                         (let ((index -1))
-                           (append-map (lambda (e)
-                                         (set! index (1+ index))
-                                         (if (var? e)
-                                             `((,e (list-ref (ly:music-property ,expr ',(car prop-elements)) ,index)))
-                                             (gen-bindings `(list-ref (ly:music-property ,expr ',(car prop-elements))
-                                                                      ,index)
-                                                           e)))
-                                       (cdr prop-elements))))
-                       elements-list))))
+     (append-map (lambda (prop-elements)
+                   (let ((index -1))
+                     (append-map (lambda (e)
+                                   (set! index (1+ index))
+                                   (if (var? e)
+                                       `((,e (list-ref (ly:music-property ,expr ',(car prop-elements)) ,index)))
+                                       (gen-bindings `(list-ref (ly:music-property ,expr ',(car prop-elements))
+                                                                ,index)
+                                                     e)))
+                                 (cdr prop-elements))))
+                 elements-list))))
 
 (define-macro (with-music-match music-expr+pattern . body)
   "If `music-expr' matches `pattern', call `body'.  `pattern' should look like:
@@ -247,24 +255,24 @@ Generate binding forms by looking for ?var symbol in pattern."
      property ?var1
      element (music <MusicType> ...)
      elements ((music <MusicType> ...)
-              ?var2
-              (music <MusicType> ...)))
+               ?var2
+               (music <MusicType> ...)))
 The properties of `music-expr' are checked against the values given in the
 pattern (the name property being the <MusicType> symbol after the `music'
 keyword), then all music expression found in its properties (such as 'element
 or 'elements).
 When ?var is found instead of a property value, ?var is bound that property value,
-as read inside `music-expr'.  ?var may also be used to refere to a whole music 
-expression inside an elements list for instance.  These bindings are accessible 
+as read inside `music-expr'.  ?var may also be used to refere to a whole music
+expression inside an elements list for instance.  These bindings are accessible
 inside body."
   (let ((music-expr (first music-expr+pattern))
-       (pattern (second music-expr+pattern))
-       (expr-sym (gensym)))
+        (pattern (second music-expr+pattern))
+        (expr-sym (gensym)))
     `(let ((,expr-sym ,music-expr))
        (if ,(gen-condition expr-sym pattern)
-          (let ,(gen-bindings expr-sym pattern)
-            ,@body)
-          #f))))
+           (let ,(gen-bindings expr-sym pattern)
+             ,@body)
+           #f))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;
@@ -302,11 +310,10 @@ inside body."
   (define make-music-type-predicate-aux
     (lambda (mtypes)
       (lambda (expr)
-       (if (null? mtypes)
-           #f
-           (or (eqv? (car mtypes) (ly:music-property expr 'name))
-               ((make-music-type-predicate-aux (cdr mtypes)) expr))))))
-      (make-music-type-predicate-aux music-types))
+        (if (null? mtypes)
+            #f
+            (or (eqv? (car mtypes) (ly:music-property expr 'name))
+                ((make-music-type-predicate-aux (cdr mtypes)) expr))))))
+  (make-music-type-predicate-aux music-types))
 
 (ly:load "define-music-display-methods.scm")
-
index 1737890f5f70088e9228eb026d81c56be4009409..5b34ac94fcda7212551236f542c52d85996f74e6 100644 (file)
   (lambda (ls)
     (map (lambda (list-to-translate)
            `(,(list-ref list-to-translate 0)
-            . ,(map (lambda (name element)
-                      `(,name . ,element))
-                    parameter-list
-                    (list-tail list-to-translate 1))))
+             . ,(map (lambda (name element)
+                       `(,name . ,element))
+                     parameter-list
+                     (list-tail list-to-translate 1))))
          ls)))
 
 (define (get-named-spreadsheet-column column spreadsheet)
@@ -77,8 +77,8 @@
    @code{guile> (get-spreadsheet-column 'bar ((make-named-spreadsheet '(foo bar)) '((x . (1 2)) (y . (3 4)) (z . (5 6)))))}
    @code{((x . 2) (y . 4) (z . 6))}"
   (map
-    (lambda (row) (cons (car row) (assoc-get column (cdr row))))
-    spreadsheet))
+   (lambda (row) (cons (car row) (assoc-get column (cdr row))))
+   spreadsheet))
 
 (define make-key-alist
   (make-named-spreadsheet '(name offset graphical textual)))
@@ -94,8 +94,8 @@
 (define (make-central-column-hole-addresses keys)
   "Takes @code{keys} and ascribes them to the central column."
   (map
-    (lambda (key) `(central-column . ,key))
-    keys))
+   (lambda (key) `(central-column . ,key))
+   keys))
 
 (define (make-key-symbols hand)
   "Takes @code{hand} and ascribes @code{key} to it."
 
 (define flute-change-points
   ((make-named-spreadsheet '(piccolo flute flute-b-extension))
-    `((bottom-group-key-names
-       . (((x
-            . ((offset . (-0.45 . -1.05))
-               (stencil . ,piccolo-rh-x-key-stencil)
-               (text? . ("X" . #f))
-               (complexity . trill))))
-        ((cis
-          . ((offset . (0.0 . 0.0))
-            (stencil . ,flute-rh-cis-key-stencil)
-            (text? . ("C" . 1))
-            (complexity . trill)))
-         (c
-          . ((offset . (0.3 . 0.0))
-             (stencil . ,flute-rh-c-key-stencil)
-             (text? . ("C" . #f))
-             (complexity . trill)))
-         (gz
-          . ((offset . (0.0 . -1.2))
-             (stencil . ,flute-rh-gz-key-stencil)
-             (text? . ("gz" . #f))
-             (complexity . trill))))
-        ((cis
-          . ((offset . (0.0 . 0.0))
-            (stencil . ,flute-rh-cis-key-stencil)
-            (text? . ("C" . 1))
-            (complexity . trill)))
-         (c
-          . ((offset . (0.3 . 0.0))
-             (stencil . ,flute-rh-c-key-stencil)
-             (text? . ("C" . #f))
-             (complexity . trill)))
-         (b
-          . ((offset . (1.0 . 0.0))
-             (stencil . ,flute-rh-b-key-stencil)
-             (text? . ("B" . #f))
-             (complexity . trill)))
-         (gz
-          . ((offset . (0.0 . -1.2))
-             (stencil . ,flute-rh-gz-key-stencil)
-             (text? . ("gz" . #f))
-             (complexity . trill))))))
-      (bottom-group-graphical-stencil
-       . (((right-hand . ees) (right-hand . x))
-          ,(make-right-hand-key-addresses '(ees cis c gz))
-          ,(make-right-hand-key-addresses '(ees cis c b gz))))
+   `((bottom-group-key-names
+      . (((x
+           . ((offset . (-0.45 . -1.05))
+              (stencil . ,piccolo-rh-x-key-stencil)
+              (text? . ("X" . #f))
+              (complexity . trill))))
+         ((cis
+           . ((offset . (0.0 . 0.0))
+              (stencil . ,flute-rh-cis-key-stencil)
+              (text? . ("C" . 1))
+              (complexity . trill)))
+          (c
+           . ((offset . (0.3 . 0.0))
+              (stencil . ,flute-rh-c-key-stencil)
+              (text? . ("C" . #f))
+              (complexity . trill)))
+          (gz
+           . ((offset . (0.0 . -1.2))
+              (stencil . ,flute-rh-gz-key-stencil)
+              (text? . ("gz" . #f))
+              (complexity . trill))))
+         ((cis
+           . ((offset . (0.0 . 0.0))
+              (stencil . ,flute-rh-cis-key-stencil)
+              (text? . ("C" . 1))
+              (complexity . trill)))
+          (c
+           . ((offset . (0.3 . 0.0))
+              (stencil . ,flute-rh-c-key-stencil)
+              (text? . ("C" . #f))
+              (complexity . trill)))
+          (b
+           . ((offset . (1.0 . 0.0))
+              (stencil . ,flute-rh-b-key-stencil)
+              (text? . ("B" . #f))
+              (complexity . trill)))
+          (gz
+           . ((offset . (0.0 . -1.2))
+              (stencil . ,flute-rh-gz-key-stencil)
+              (text? . ("gz" . #f))
+              (complexity . trill))))))
+     (bottom-group-graphical-stencil
+      . (((right-hand . ees) (right-hand . x))
+         ,(make-right-hand-key-addresses '(ees cis c gz))
+         ,(make-right-hand-key-addresses '(ees cis c b gz))))
      (bottom-group-graphical-draw-instruction
-       . (((right-hand . ees))
-          ,(make-right-hand-key-addresses '(ees cis c))
-          ,(make-right-hand-key-addresses '(ees cis c b))))
+      . (((right-hand . ees))
+         ,(make-right-hand-key-addresses '(ees cis c))
+         ,(make-right-hand-key-addresses '(ees cis c b))))
      (bottom-group-special-key-instruction
       . ((,rich-group-draw-rule ((right-hand . x)) ((right-hand . ees)))
          (,rich-group-draw-rule ((right-hand . gz))
                                 ,(make-right-hand-key-addresses
-                                    '(ees cis c)))
+                                  '(ees cis c)))
          (,rich-group-draw-rule ((right-hand . gz))
                                 ,(make-right-hand-key-addresses
-                                    '(ees cis c b)))))
+                                  '(ees cis c b)))))
      (bottom-group-text-stencil
       . (,(make-right-hand-key-addresses '(bes d dis ees x))
          ,(make-right-hand-key-addresses '(bes d dis ees cis c gz))
   (let*
       ((change-points
         (get-named-spreadsheet-column
-          flute-name
-          flute-change-points)))
-  `(,flute-name
-    . ((keys
-        . ((hidden
-            . ((midline
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,midline-stencil)
-                   (text? . #f)
-                   (complexity . basic)))))
-           (central-column
-            . ((one
-                . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (two
-                . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (three
-                . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (four
-                . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (five
-                . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (six
-                . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))))
-           (left-hand
-            . ((bes
-                . ((offset . (0.5 . 1.8))
-                   (stencil . ,flute-lh-bes-key-stencil)
-                   (text? . ("B" . 0))
-                   (complexity . trill)))
-               (b
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,flute-lh-b-key-stencil)
-                   (text? . ("B" . #f))
-                   (complexity . trill)))
-               (gis
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,flute-lh-gis-key-stencil)
-                   (text? . ("G" . 1))
-                   (complexity . trill)))))
-           (right-hand
-            . ,(append `((bes
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,flute-rh-bes-key-stencil)
-                             (text? . ("B" . 0))
-                             (complexity . trill)))
-                         (d
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,flute-rh-d-key-stencil)
-                             (text? . ("D" . #f))
-                             (complexity . trill)))
-                         (dis
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,flute-rh-dis-key-stencil)
-                             (text? . ("D" . 1))
-                             (complexity . trill)))
-                         (ees
-                          . ((offset . (1.5 . 1.3))
-                             (stencil . ,flute-rh-ees-key-stencil)
-                             (text? . ("E" . 0))
-                             (complexity . trill))))
-                       (assoc-get 'bottom-group-key-names change-points)))))
-       (graphical-commands
-        . ((stencil-alist
-            . ((stencils
-                . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
-                   ((stencils
-                     . ,(make-central-column-hole-addresses
+         flute-name
+         flute-change-points)))
+    `(,flute-name
+      . ((keys
+          . ((hidden
+              . ((midline
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,midline-stencil)
+                     (text? . #f)
+                     (complexity . basic)))))
+             (central-column
+              . ((one
+                  . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (two
+                  . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (three
+                  . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (four
+                  . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (five
+                  . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (six
+                  . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))))
+             (left-hand
+              . ((bes
+                  . ((offset . (0.5 . 1.8))
+                     (stencil . ,flute-lh-bes-key-stencil)
+                     (text? . ("B" . 0))
+                     (complexity . trill)))
+                 (b
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,flute-lh-b-key-stencil)
+                     (text? . ("B" . #f))
+                     (complexity . trill)))
+                 (gis
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,flute-lh-gis-key-stencil)
+                     (text? . ("G" . 1))
+                     (complexity . trill)))))
+             (right-hand
+              . ,(append `((bes
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,flute-rh-bes-key-stencil)
+                               (text? . ("B" . 0))
+                               (complexity . trill)))
+                           (d
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,flute-rh-d-key-stencil)
+                               (text? . ("D" . #f))
+                               (complexity . trill)))
+                           (dis
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,flute-rh-dis-key-stencil)
+                               (text? . ("D" . 1))
+                               (complexity . trill)))
+                           (ees
+                            . ((offset . (1.5 . 1.3))
+                               (stencil . ,flute-rh-ees-key-stencil)
+                               (text? . ("E" . 0))
+                               (complexity . trill))))
+                         (assoc-get 'bottom-group-key-names change-points)))))
+         (graphical-commands
+          . ((stencil-alist
+              . ((stencils
+                  . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
+                     ((stencils
+                       . ,(make-central-column-hole-addresses
                            CENTRAL-COLUMN-HOLE-LIST))
-                    (xy-scale-function . (,identity . ,identity))
-                    (textual? . #f)
-                    (offset . (0.0 . 0.0)))
-                   ((stencils . ((left-hand . bes) (left-hand . b)))
-                    (xy-scale-function . (,return-1 . ,return-1))
-                    (textual? . #f)
-                    (offset . (-1.5 . 6.5)))
-                   ,(simple-stencil-alist '(left-hand . gis) '(1.0 . 4.0))
-                   ,(simple-stencil-alist '(right-hand . bes)  '(-1.75 . 3.05))
-                   ,(simple-stencil-alist '(right-hand . d)  '(-1.0 . 2.5))
-                   ,(simple-stencil-alist '(right-hand . dis)  '(-1.0 . 1.5))
-                   ((stencils
-                     . ,(assoc-get 'bottom-group-graphical-stencil
-                                   change-points))
-                    (xy-scale-function . (,return-1 . ,return-1))
-                    (textual? . #f)
-                    (offset . (0.0 . -0.6)))))
-               (xy-scale-function . (,identity . ,identity))
-               (textual? . #f)
-               (offset . (0.0 . 0.0))))
-           (draw-instructions
-            . ((,apply-group-draw-rule-series
-                (((left-hand . bes) (left-hand . b))
-                 ,(assoc-get 'bottom-group-graphical-draw-instruction
-                             change-points)))
-               ,(assoc-get 'bottom-group-special-key-instruction
-                           change-points)
-               (,group-automate-rule
-                ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
-               (,group-automate-rule ((hidden . midline)))))
-           (extra-offset-instructions
-            . ((,uniform-extra-offset-rule (0.0 . 0.0))))))
-       (text-commands
-        . ((stencil-alist
-            . ((stencils
-                . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
-                   ((stencils
-                     . ,(make-central-column-hole-addresses
+                      (xy-scale-function . (,identity . ,identity))
+                      (textual? . #f)
+                      (offset . (0.0 . 0.0)))
+                     ((stencils . ((left-hand . bes) (left-hand . b)))
+                      (xy-scale-function . (,return-1 . ,return-1))
+                      (textual? . #f)
+                      (offset . (-1.5 . 6.5)))
+                     ,(simple-stencil-alist '(left-hand . gis) '(1.0 . 4.0))
+                     ,(simple-stencil-alist '(right-hand . bes)  '(-1.75 . 3.05))
+                     ,(simple-stencil-alist '(right-hand . d)  '(-1.0 . 2.5))
+                     ,(simple-stencil-alist '(right-hand . dis)  '(-1.0 . 1.5))
+                     ((stencils
+                       . ,(assoc-get 'bottom-group-graphical-stencil
+                                     change-points))
+                      (xy-scale-function . (,return-1 . ,return-1))
+                      (textual? . #f)
+                      (offset . (0.0 . -0.6)))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ((,apply-group-draw-rule-series
+                  (((left-hand . bes) (left-hand . b))
+                   ,(assoc-get 'bottom-group-graphical-draw-instruction
+                               change-points)))
+                 ,(assoc-get 'bottom-group-special-key-instruction
+                             change-points)
+                 (,group-automate-rule
+                  ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
+                 (,group-automate-rule ((hidden . midline)))))
+             (extra-offset-instructions
+              . ((,uniform-extra-offset-rule (0.0 . 0.0))))))
+         (text-commands
+          . ((stencil-alist
+              . ((stencils
+                  . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
+                     ((stencils
+                       . ,(make-central-column-hole-addresses
                            CENTRAL-COLUMN-HOLE-LIST))
-                    (xy-scale-function . (,identity . ,identity))
-                    (textual? . #f)
-                    (offset . (0.0 . 0.0)))
-                   ((stencils . ,(make-left-hand-key-addresses '(bes b gis)))
-                    (textual? . ,lh-woodwind-text-stencil)
-                    (offset . (1.5 . 3.75)))
-                   ((stencils . ,(assoc-get 'bottom-group-text-stencil
-                                            change-points))
-                    (textual? . ,rh-woodwind-text-stencil)
-                    (offset . (-1.25 . 0.0)))))
-               (xy-scale-function . (,identity . ,identity))
-               (textual? . #f)
-               (offset . (0.0 . 0.0))))
-           (draw-instructions
-            . ((,apply-group-draw-rule-series
-                 (,(make-left-hand-key-addresses '(bes b gis))
-                  ,(assoc-get 'bottom-group-text-stencil change-points)))
-               (,group-automate-rule
-                ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
-               (,group-automate-rule ((hidden . midline)))))
-           (extra-offset-instructions
-            . ((,uniform-extra-offset-rule (0.0 . 0.0))))))))))
+                      (xy-scale-function . (,identity . ,identity))
+                      (textual? . #f)
+                      (offset . (0.0 . 0.0)))
+                     ((stencils . ,(make-left-hand-key-addresses '(bes b gis)))
+                      (textual? . ,lh-woodwind-text-stencil)
+                      (offset . (1.5 . 3.75)))
+                     ((stencils . ,(assoc-get 'bottom-group-text-stencil
+                                              change-points))
+                      (textual? . ,rh-woodwind-text-stencil)
+                      (offset . (-1.25 . 0.0)))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ((,apply-group-draw-rule-series
+                  (,(make-left-hand-key-addresses '(bes b gis))
+                   ,(assoc-get 'bottom-group-text-stencil change-points)))
+                 (,group-automate-rule
+                  ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
+                 (,group-automate-rule ((hidden . midline)))))
+             (extra-offset-instructions
+              . ((,uniform-extra-offset-rule (0.0 . 0.0))))))))))
 
 ;;; Tin whistle assembly instructions
 
 
 (define (generate-tin-whistle-family-entry tin-whistle-name)
   (let*
-    ((change-points
-     (get-named-spreadsheet-column tin-whistle-name tin-whistle-change-points)))
-  `(,tin-whistle-name
-    . ((keys
-        . ((hidden
-            . ((midline
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,midline-stencil)
-                   (text? . #f)
-                   (complexity . basic)))))
-           (central-column
-            . ((one
-                . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))
-               (two
-                . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))
-               (three
-                . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))
-               (four
-                . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))
-               (five
-                . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))
-               (six
-                . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))))
-           (left-hand . ())
-           (right-hand . ())))
-       (graphical-commands
-        . ((stencil-alist
-            . ((stencils
-                . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
-                   ((stencils
-                     . ,(make-central-column-hole-addresses
-                          CENTRAL-COLUMN-HOLE-LIST))
-                    (xy-scale-function . (,identity . ,identity))
-                    (textual? . #f)
-                    (offset . (0.0 . 0.0)))))
-               (xy-scale-function . (,identity . ,identity))
-               (textual? . #f)
-               (offset . (0.0 . 0.0))))
-           (draw-instructions
-            . ((,group-automate-rule
-                 ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
-               (,group-automate-rule ((hidden . midline)))))
-           (extra-offset-instructions
-            . ((,uniform-extra-offset-rule (0.0 . 0.0))))))
-    (text-commands
-     . ((stencil-alist
-         . ((stencils .
-             (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
-              ((stencils
-                . ,(make-central-column-hole-addresses
-                      CENTRAL-COLUMN-HOLE-H-LIST))
-               (xy-scale-function . (,identity . ,identity))
-               (textual? . #f)
-               (offset . (0.0 . 0.0)))))
-            (xy-scale-function . (,identity . ,identity))
-            (textual? . #f)
-            (offset . (0.0 . 0.0))))
-        (draw-instructions
-         . ((,group-automate-rule
-              ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
-            (,group-automate-rule ((hidden . midline)))))
-        (extra-offset-instructions
-         . ((,uniform-extra-offset-rule (0.0 . 0.0))))))))))
+      ((change-points
+        (get-named-spreadsheet-column tin-whistle-name tin-whistle-change-points)))
+    `(,tin-whistle-name
+      . ((keys
+          . ((hidden
+              . ((midline
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,midline-stencil)
+                     (text? . #f)
+                     (complexity . basic)))))
+             (central-column
+              . ((one
+                  . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))
+                 (two
+                  . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))
+                 (three
+                  . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))
+                 (four
+                  . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))
+                 (five
+                  . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))
+                 (six
+                  . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))))
+             (left-hand . ())
+             (right-hand . ())))
+         (graphical-commands
+          . ((stencil-alist
+              . ((stencils
+                  . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
+                     ((stencils
+                       . ,(make-central-column-hole-addresses
+                           CENTRAL-COLUMN-HOLE-LIST))
+                      (xy-scale-function . (,identity . ,identity))
+                      (textual? . #f)
+                      (offset . (0.0 . 0.0)))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ((,group-automate-rule
+                  ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
+                 (,group-automate-rule ((hidden . midline)))))
+             (extra-offset-instructions
+              . ((,uniform-extra-offset-rule (0.0 . 0.0))))))
+         (text-commands
+          . ((stencil-alist
+              . ((stencils .
+                           (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
+                            ((stencils
+                              . ,(make-central-column-hole-addresses
+                                  CENTRAL-COLUMN-HOLE-H-LIST))
+                             (xy-scale-function . (,identity . ,identity))
+                             (textual? . #f)
+                             (offset . (0.0 . 0.0)))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ((,group-automate-rule
+                  ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
+                 (,group-automate-rule ((hidden . midline)))))
+             (extra-offset-instructions
+              . ((,uniform-extra-offset-rule (0.0 . 0.0))))))))))
 
 ;;; Oboe assembly instructions
 
 
 (define (generate-oboe-family-entry oboe-name)
   (let*
-    ((change-points
-     (get-named-spreadsheet-column oboe-name oboe-change-points)))
-  `(,oboe-name
-    . ((keys
-        . ((hidden
-            . ((midline
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,midline-stencil)
-                   (text? . #f)
-                   (complexity . basic)))))
-           (central-column
-            . ((one
-                . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (two
-                . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (three
-                . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (four
-                . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (five
-                . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (six
-                . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (h
-                . ((offset . (0.0 . 6.25))
-                   (stencil . ,(variable-column-circle-stencil 0.4))
-                   (text? . #f)
-                   (complexity . trill)))))
-           (left-hand
-            . ((I
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,oboe-lh-I-key-stencil)
-                   (text? . ("I" . #f))
-                   (complexity . trill)))
-               (III
-                . ((offset . (0.0 . 2.6))
-                   (stencil . ,oboe-lh-III-key-stencil)
-                   (text? . ("III" . #f))
-                   (complexity . trill)))
-               (II
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,oboe-lh-II-key-stencil)
-                   (text? . ("II" . #f))
-                   (complexity . trill)))
-               (b
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,oboe-lh-b-key-stencil)
-                   (text? . ("B" . #f))
-                   (complexity . trill)))
-               (d
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,oboe-lh-d-key-stencil)
-                   (text? . ("D" . #f))
-                   (complexity . trill)))
-               (cis
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,oboe-lh-cis-key-stencil)
-                   (text? . ("C" . 1))
-                   (complexity . trill)))
-               (gis
-                . ((offset . (-0.85 . 0.2))
-                   (stencil . ,oboe-lh-gis-key-stencil)
-                   (text? . ("G" . 1))
-                   (complexity . trill)))
-               (ees
-                . ((offset . (2.05 . -3.65))
-                   (stencil . ,oboe-lh-ees-key-stencil)
-                   (text? . ("E" . 0))
-                   (complexity . trill)))
-               (low-b
-                . ((offset . (3.6 . 0.5))
-                   (stencil . ,oboe-lh-low-b-key-stencil)
-                   (text? . ("b" . #f))
-                   (complexity . trill)))
-               (bes
-                . ((offset . (2.25 . -4.15))
-                   (stencil . ,oboe-lh-bes-key-stencil)
-                   (text? . ("B" . 0))
-                   (complexity . trill)))
-               (f
-                . ((offset . (2.15 . -3.85))
-                   (stencil . ,oboe-lh-f-key-stencil)
-                   (text? . ("F" . #f))
-                   (complexity . trill)))))
-           (right-hand
-            . ((a
-                . ((offset . (1.5 . 1.2))
-                   (stencil . ,oboe-rh-a-key-stencil)
-                   (text? . ("A" . #f))
-                   (complexity . trill)))
-               (gis
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,oboe-rh-gis-key-stencil)
-                   (text? . ("G" . 1))
-                   (complexity . trill)))
-               (d
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,oboe-rh-d-key-stencil)
-                   (text? . ("D" . #f))
-                   (complexity . trill)))
-               (f
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,oboe-rh-f-key-stencil)
-                   (text? . ("F" . #f))
-                   (complexity . trill)))
-               (banana
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,oboe-rh-banana-key-stencil)
-                   (text? . ("ban" . #f))
-                   (complexity . trill)))
-               (c
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,oboe-rh-c-key-stencil)
-                   (text? . ("C" . #f))
-                   (complexity . trill)))
-               (cis
-                . ((offset . (3.8 . -0.6))
-                   (stencil . ,oboe-rh-cis-key-stencil)
-                   (text? . ("C" . 1))
-                   (complexity . trill)))
-               (ees
-                . ((offset . (0.0 . -1.8))
-                   (stencil . ,oboe-rh-ees-key-stencil)
-                   (text? . ("E" . 0))
-                   (complexity . trill)))))))
-       (graphical-commands
-        . ((stencil-alist
-            . ((stencils
-                . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
-                   ((stencils
-                     . ,(make-central-column-hole-addresses
-                          CENTRAL-COLUMN-HOLE-H-LIST))
-                    (xy-scale-function . (,identity . ,identity))
-                    (textual? . #f)
-                    (offset . (0.0 . 0.0)))
-                   ((stencils . ((left-hand . I) (left-hand . III)))
-                    (xy-scale-function . (,return-1 . ,return-1))
-                    (textual? . #f)
-                    (offset . (-2.5 . 6.5)))
-                   ,(simple-stencil-alist '(left-hand . II) '(2.5 . 6.0))
-                   ,(simple-stencil-alist '(left-hand . b) '(-1.35 . 6.0))
-                   ,(simple-stencil-alist '(left-hand . d) '(1.0 . 6.0))
-                   ,(simple-stencil-alist '(left-hand . cis) '(1.0 . 5.0))
-                   ((stencils
-                     . ,(make-left-hand-key-addresses '(gis bes low-b ees f)))
-                    (xy-scale-function . (,return-1 . ,return-1))
-                    (textual? . #f)
-                    (offset . (0.0 . 3.9)))
-                   ((stencils .
-                    ,(make-right-hand-key-addresses '(a gis)))
-                    (xy-scale-function . (,return-1 . ,return-1))
-                    (textual? . #f)
-                    (offset . (-3.5 . 3.5)))
-                   ,(simple-stencil-alist '(right-hand . d) '(1.0 . 2.5))
-                   ,(simple-stencil-alist '(right-hand . f)  '(-1.0 . 1.5))
-                   ,(simple-stencil-alist '(right-hand . banana)  '(1.7 . 1.0))
-                   ((stencils . ,(make-right-hand-key-addresses '(c cis ees)))
-                    (xy-scale-function . (,return-1 . ,return-1))
-                    (textual? . #f)
-                    (offset . (-3.4 . 0.3)))))
-               (xy-scale-function . (,identity . ,identity))
-               (textual? . #f)
-               (offset . (0.0 . 0.0))))
-           (draw-instructions
-            . ((,apply-group-draw-rule-series
-                 (((right-hand . a) (right-hand . gis))
-                  ,(make-left-hand-key-addresses '(gis bes low-b ees))
-                  ,(make-right-hand-key-addresses '(cis c ees))))
-               (,rich-group-draw-rule
-                 ((left-hand . III))
-                 ((left-hand . I)))
-               (,rich-group-draw-rule
-                 ((left-hand . f))
-                 ,(make-left-hand-key-addresses '(gis bes low-b ees)))
-               (,group-automate-rule
-                 ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
-               (,group-automate-rule ((hidden . midline)))))
-           (extra-offset-instructions
-            . ((,rich-group-extra-offset-rule
-                 ((central-column . h)) ((central-column . one)) (0.0 . 0.8))
-               (,uniform-extra-offset-rule (0.0 . 0.0))))))
-    (text-commands
-     . ((stencil-alist
-         . ((stencils .
-             (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
-              ((stencils
-                . ,(make-central-column-hole-addresses
-                      CENTRAL-COLUMN-HOLE-H-LIST))
-               (xy-scale-function . (,identity . ,identity))
-               (textual? . #f)
-               (offset . (0.0 . 0.0)))
-              ((stencils . ,(make-left-hand-key-addresses '(III I)))
-               (textual? . ,lh-woodwind-text-stencil)
-               (offset . (-2.8 . 7.0)))
-              ((stencils . ,(make-left-hand-key-addresses '(II)))
-               (textual? . ,lh-woodwind-text-stencil)
-               (offset . (2.2 . 7.0)))
-              ((stencils
-                .  ,(make-left-hand-key-addresses
-                      '(b d cis gis ees low-b bes f)))
-               (textual? . ,lh-woodwind-text-stencil)
-               (offset . (1.5 . 3.75)))
-              ((stencils
-                . ,(make-right-hand-key-addresses
-                      '(a gis d f banana c cis ees)))
-               (textual? . ,rh-woodwind-text-stencil)
-               (offset . (-1.25 . 0.0)))))
-            (xy-scale-function . (,identity . ,identity))
-            (textual? . #f)
-            (offset . (0.0 . 0.0))))
-        (draw-instructions
-         . ((,apply-group-draw-rule-series
-              (,(make-left-hand-key-addresses '(b d cis gis ees low-b bes f))
-             ,(make-left-hand-key-addresses '(III I))
-             ,(make-right-hand-key-addresses '(a gis d f banana c cis ees))))
-            (,group-automate-rule
-              ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
-            (,group-automate-rule ((hidden . midline)))))
-        (extra-offset-instructions
-         . ((,rich-group-extra-offset-rule
-              ((central-column . h))
-              ((central-column . one))
-              (0.0 . 0.8))
-            (,uniform-extra-offset-rule (0.0 . 0.0))))))))))
+      ((change-points
+        (get-named-spreadsheet-column oboe-name oboe-change-points)))
+    `(,oboe-name
+      . ((keys
+          . ((hidden
+              . ((midline
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,midline-stencil)
+                     (text? . #f)
+                     (complexity . basic)))))
+             (central-column
+              . ((one
+                  . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (two
+                  . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (three
+                  . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (four
+                  . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (five
+                  . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (six
+                  . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (h
+                  . ((offset . (0.0 . 6.25))
+                     (stencil . ,(variable-column-circle-stencil 0.4))
+                     (text? . #f)
+                     (complexity . trill)))))
+             (left-hand
+              . ((I
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,oboe-lh-I-key-stencil)
+                     (text? . ("I" . #f))
+                     (complexity . trill)))
+                 (III
+                  . ((offset . (0.0 . 2.6))
+                     (stencil . ,oboe-lh-III-key-stencil)
+                     (text? . ("III" . #f))
+                     (complexity . trill)))
+                 (II
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,oboe-lh-II-key-stencil)
+                     (text? . ("II" . #f))
+                     (complexity . trill)))
+                 (b
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,oboe-lh-b-key-stencil)
+                     (text? . ("B" . #f))
+                     (complexity . trill)))
+                 (d
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,oboe-lh-d-key-stencil)
+                     (text? . ("D" . #f))
+                     (complexity . trill)))
+                 (cis
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,oboe-lh-cis-key-stencil)
+                     (text? . ("C" . 1))
+                     (complexity . trill)))
+                 (gis
+                  . ((offset . (-0.85 . 0.2))
+                     (stencil . ,oboe-lh-gis-key-stencil)
+                     (text? . ("G" . 1))
+                     (complexity . trill)))
+                 (ees
+                  . ((offset . (2.05 . -3.65))
+                     (stencil . ,oboe-lh-ees-key-stencil)
+                     (text? . ("E" . 0))
+                     (complexity . trill)))
+                 (low-b
+                  . ((offset . (3.6 . 0.5))
+                     (stencil . ,oboe-lh-low-b-key-stencil)
+                     (text? . ("b" . #f))
+                     (complexity . trill)))
+                 (bes
+                  . ((offset . (2.25 . -4.15))
+                     (stencil . ,oboe-lh-bes-key-stencil)
+                     (text? . ("B" . 0))
+                     (complexity . trill)))
+                 (f
+                  . ((offset . (2.15 . -3.85))
+                     (stencil . ,oboe-lh-f-key-stencil)
+                     (text? . ("F" . #f))
+                     (complexity . trill)))))
+             (right-hand
+              . ((a
+                  . ((offset . (1.5 . 1.2))
+                     (stencil . ,oboe-rh-a-key-stencil)
+                     (text? . ("A" . #f))
+                     (complexity . trill)))
+                 (gis
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,oboe-rh-gis-key-stencil)
+                     (text? . ("G" . 1))
+                     (complexity . trill)))
+                 (d
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,oboe-rh-d-key-stencil)
+                     (text? . ("D" . #f))
+                     (complexity . trill)))
+                 (f
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,oboe-rh-f-key-stencil)
+                     (text? . ("F" . #f))
+                     (complexity . trill)))
+                 (banana
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,oboe-rh-banana-key-stencil)
+                     (text? . ("ban" . #f))
+                     (complexity . trill)))
+                 (c
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,oboe-rh-c-key-stencil)
+                     (text? . ("C" . #f))
+                     (complexity . trill)))
+                 (cis
+                  . ((offset . (3.8 . -0.6))
+                     (stencil . ,oboe-rh-cis-key-stencil)
+                     (text? . ("C" . 1))
+                     (complexity . trill)))
+                 (ees
+                  . ((offset . (0.0 . -1.8))
+                     (stencil . ,oboe-rh-ees-key-stencil)
+                     (text? . ("E" . 0))
+                     (complexity . trill)))))))
+         (graphical-commands
+          . ((stencil-alist
+              . ((stencils
+                  . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
+                     ((stencils
+                       . ,(make-central-column-hole-addresses
+                           CENTRAL-COLUMN-HOLE-H-LIST))
+                      (xy-scale-function . (,identity . ,identity))
+                      (textual? . #f)
+                      (offset . (0.0 . 0.0)))
+                     ((stencils . ((left-hand . I) (left-hand . III)))
+                      (xy-scale-function . (,return-1 . ,return-1))
+                      (textual? . #f)
+                      (offset . (-2.5 . 6.5)))
+                     ,(simple-stencil-alist '(left-hand . II) '(2.5 . 6.0))
+                     ,(simple-stencil-alist '(left-hand . b) '(-1.35 . 6.0))
+                     ,(simple-stencil-alist '(left-hand . d) '(1.0 . 6.0))
+                     ,(simple-stencil-alist '(left-hand . cis) '(1.0 . 5.0))
+                     ((stencils
+                       . ,(make-left-hand-key-addresses '(gis bes low-b ees f)))
+                      (xy-scale-function . (,return-1 . ,return-1))
+                      (textual? . #f)
+                      (offset . (0.0 . 3.9)))
+                     ((stencils .
+                                ,(make-right-hand-key-addresses '(a gis)))
+                      (xy-scale-function . (,return-1 . ,return-1))
+                      (textual? . #f)
+                      (offset . (-3.5 . 3.5)))
+                     ,(simple-stencil-alist '(right-hand . d) '(1.0 . 2.5))
+                     ,(simple-stencil-alist '(right-hand . f)  '(-1.0 . 1.5))
+                     ,(simple-stencil-alist '(right-hand . banana)  '(1.7 . 1.0))
+                     ((stencils . ,(make-right-hand-key-addresses '(c cis ees)))
+                      (xy-scale-function . (,return-1 . ,return-1))
+                      (textual? . #f)
+                      (offset . (-3.4 . 0.3)))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ((,apply-group-draw-rule-series
+                  (((right-hand . a) (right-hand . gis))
+                   ,(make-left-hand-key-addresses '(gis bes low-b ees))
+                   ,(make-right-hand-key-addresses '(cis c ees))))
+                 (,rich-group-draw-rule
+                  ((left-hand . III))
+                  ((left-hand . I)))
+                 (,rich-group-draw-rule
+                  ((left-hand . f))
+                  ,(make-left-hand-key-addresses '(gis bes low-b ees)))
+                 (,group-automate-rule
+                  ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
+                 (,group-automate-rule ((hidden . midline)))))
+             (extra-offset-instructions
+              . ((,rich-group-extra-offset-rule
+                  ((central-column . h)) ((central-column . one)) (0.0 . 0.8))
+                 (,uniform-extra-offset-rule (0.0 . 0.0))))))
+         (text-commands
+          . ((stencil-alist
+              . ((stencils .
+                           (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
+                            ((stencils
+                              . ,(make-central-column-hole-addresses
+                                  CENTRAL-COLUMN-HOLE-H-LIST))
+                             (xy-scale-function . (,identity . ,identity))
+                             (textual? . #f)
+                             (offset . (0.0 . 0.0)))
+                            ((stencils . ,(make-left-hand-key-addresses '(III I)))
+                             (textual? . ,lh-woodwind-text-stencil)
+                             (offset . (-2.8 . 7.0)))
+                            ((stencils . ,(make-left-hand-key-addresses '(II)))
+                             (textual? . ,lh-woodwind-text-stencil)
+                             (offset . (2.2 . 7.0)))
+                            ((stencils
+                              .  ,(make-left-hand-key-addresses
+                                   '(b d cis gis ees low-b bes f)))
+                             (textual? . ,lh-woodwind-text-stencil)
+                             (offset . (1.5 . 3.75)))
+                            ((stencils
+                              . ,(make-right-hand-key-addresses
+                                  '(a gis d f banana c cis ees)))
+                             (textual? . ,rh-woodwind-text-stencil)
+                             (offset . (-1.25 . 0.0)))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ((,apply-group-draw-rule-series
+                  (,(make-left-hand-key-addresses '(b d cis gis ees low-b bes f))
+                   ,(make-left-hand-key-addresses '(III I))
+                   ,(make-right-hand-key-addresses '(a gis d f banana c cis ees))))
+                 (,group-automate-rule
+                  ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
+                 (,group-automate-rule ((hidden . midline)))))
+             (extra-offset-instructions
+              . ((,rich-group-extra-offset-rule
+                  ((central-column . h))
+                  ((central-column . one))
+                  (0.0 . 0.8))
+                 (,uniform-extra-offset-rule (0.0 . 0.0))))))))))
 
 ;; Clarinet assembly instructions
 
 (define clarinet-change-points
   ((make-named-spreadsheet '(clarinet bass-clarinet low-bass-clarinet))
-    `((bottom-group-key-names
-       . (()
-          ((ees
-            . ((offset . (0.0 . ,(* 0 (+ 0.75 CL-RH-HAIR))))
-               (stencil . ,bass-clarinet-rh-ees-key-stencil)
-               (text? . ("E" . 0))
-               (complexity . trill))))
-          ((ees
-            . ((offset . (0.0 . ,(* 0 (+ 0.75 CL-RH-HAIR))))
-               (stencil . ,low-bass-clarinet-rh-ees-key-stencil)
-               (text? . ("E" . 0))
-               (complexity . trill)))
-           (d
-            . ((offset . (,(+ 1.5 CL-RH-HAIR) . ,(* -1 (+ 0.75 CL-RH-HAIR))))
-               (stencil . ,clarinet-rh-d-key-stencil)
-               (text? . ("d" . #f))
-               (complexity . trill)))
-           (low-cis
-            . ((offset . (0.0 . 1.4))
-               (stencil . ,clarinet-rh-low-cis-key-stencil)
-               (text? . ("c" . 1))
-               (complexity . trill)))
-           (low-d
-            . ((offset . (0.0 . 2.4))
-               (stencil . ,clarinet-rh-low-d-key-stencil)
-               (text? . ("d" . #f))
-               (complexity . trill)))
-           (low-c
-            . ((offset . (0.0 . 0.0))
-               (stencil . ,clarinet-rh-low-c-key-stencil)
-               (text? . ("c" . #f))
-               (complexity . trill))))))
-      (left-extra-key-names
-       . (()
-          ()
-          ((d
-            . ((offset . (4.0 . -0.8))
-               (stencil . ,clarinet-lh-d-key-stencil)
-               (text? . ("D" . #f))
-               (complexity . trill))))))
-      (right-thumb-group
-       . (()
-          ()
-          (((stencils
+   `((bottom-group-key-names
+      . (()
+         ((ees
+           . ((offset . (0.0 . ,(* 0 (+ 0.75 CL-RH-HAIR))))
+              (stencil . ,bass-clarinet-rh-ees-key-stencil)
+              (text? . ("E" . 0))
+              (complexity . trill))))
+         ((ees
+           . ((offset . (0.0 . ,(* 0 (+ 0.75 CL-RH-HAIR))))
+              (stencil . ,low-bass-clarinet-rh-ees-key-stencil)
+              (text? . ("E" . 0))
+              (complexity . trill)))
+          (d
+           . ((offset . (,(+ 1.5 CL-RH-HAIR) . ,(* -1 (+ 0.75 CL-RH-HAIR))))
+              (stencil . ,clarinet-rh-d-key-stencil)
+              (text? . ("d" . #f))
+              (complexity . trill)))
+          (low-cis
+           . ((offset . (0.0 . 1.4))
+              (stencil . ,clarinet-rh-low-cis-key-stencil)
+              (text? . ("c" . 1))
+              (complexity . trill)))
+          (low-d
+           . ((offset . (0.0 . 2.4))
+              (stencil . ,clarinet-rh-low-d-key-stencil)
+              (text? . ("d" . #f))
+              (complexity . trill)))
+          (low-c
+           . ((offset . (0.0 . 0.0))
+              (stencil . ,clarinet-rh-low-c-key-stencil)
+              (text? . ("c" . #f))
+              (complexity . trill))))))
+     (left-extra-key-names
+      . (()
+         ()
+         ((d
+           . ((offset . (4.0 . -0.8))
+              (stencil . ,clarinet-lh-d-key-stencil)
+              (text? . ("D" . #f))
+              (complexity . trill))))))
+     (right-thumb-group
+      . (()
+         ()
+         (((stencils
             . ,(make-right-hand-key-addresses '(low-c low-cis)))
            (xy-scale-function . (,return-1 . ,return-1))
            (textual? . #f)
            (offset . (-1.3 . 4.0))))))
-      (low-left-hand-key-addresses
-       . (,(make-left-hand-key-addresses '(cis f e fis))
-          ,(make-left-hand-key-addresses '(cis f e fis))
-          ,(make-left-hand-key-addresses '(cis f e fis d))))
-      (all-left-hand-key-addresses
-       . (,(make-left-hand-key-addresses '(a gis ees cis f e fis))
-          ,(make-left-hand-key-addresses '(a gis ees cis f e fis))
-          ,(make-left-hand-key-addresses '(a gis ees cis f e fis d))))
-      (low-key-group
-       . (()
-          ()
-          (,(make-right-hand-key-addresses '(low-c low-cis)))))
-      (low-rich-draw-rules
-       . (()
-          ()
-          ((,rich-group-draw-rule
-                  ((left-hand . d))
-                  ,(make-left-hand-key-addresses '(cis f e fis)))
-           (,rich-group-draw-rule
-                  ((right-hand . low-d))
-                  ((right-hand . low-cis) (right-hand . low-c))))))
-      (low-extra-offset-rule
-       . (()
-          ()
-          ((,rich-group-extra-offset-rule
-                 ,(make-right-hand-key-addresses '(low-c low-d low-cis))
-                 ,(make-right-hand-key-addresses '(one two three four))
-                 (-0.5 . -0.7)))))
-      (bottom-right-group-key-addresses
-       . (,(make-right-hand-key-addresses '(fis e f gis))
-          ,(make-right-hand-key-addresses '(fis e ees gis f))
-          ,(make-right-hand-key-addresses '(fis e ees gis f d))))
-      (right-hand-key-addresses
-       . (,(make-right-hand-key-addresses '(fis e f gis))
-          ,(make-right-hand-key-addresses '(fis e ees gis f))
-          ,(make-right-hand-key-addresses
-              '(low-d low-cis low-c fis e ees gis f d)))))))
+     (low-left-hand-key-addresses
+      . (,(make-left-hand-key-addresses '(cis f e fis))
+         ,(make-left-hand-key-addresses '(cis f e fis))
+         ,(make-left-hand-key-addresses '(cis f e fis d))))
+     (all-left-hand-key-addresses
+      . (,(make-left-hand-key-addresses '(a gis ees cis f e fis))
+         ,(make-left-hand-key-addresses '(a gis ees cis f e fis))
+         ,(make-left-hand-key-addresses '(a gis ees cis f e fis d))))
+     (low-key-group
+      . (()
+         ()
+         (,(make-right-hand-key-addresses '(low-c low-cis)))))
+     (low-rich-draw-rules
+      . (()
+         ()
+         ((,rich-group-draw-rule
+           ((left-hand . d))
+           ,(make-left-hand-key-addresses '(cis f e fis)))
+          (,rich-group-draw-rule
+           ((right-hand . low-d))
+           ((right-hand . low-cis) (right-hand . low-c))))))
+     (low-extra-offset-rule
+      . (()
+         ()
+         ((,rich-group-extra-offset-rule
+           ,(make-right-hand-key-addresses '(low-c low-d low-cis))
+           ,(make-right-hand-key-addresses '(one two three four))
+           (-0.5 . -0.7)))))
+     (bottom-right-group-key-addresses
+      . (,(make-right-hand-key-addresses '(fis e f gis))
+         ,(make-right-hand-key-addresses '(fis e ees gis f))
+         ,(make-right-hand-key-addresses '(fis e ees gis f d))))
+     (right-hand-key-addresses
+      . (,(make-right-hand-key-addresses '(fis e f gis))
+         ,(make-right-hand-key-addresses '(fis e ees gis f))
+         ,(make-right-hand-key-addresses
+           '(low-d low-cis low-c fis e ees gis f d)))))))
 
 (define (generate-clarinet-family-entry clarinet-name)
   (let*
-    ((change-points
-      (get-named-spreadsheet-column clarinet-name clarinet-change-points)))
-  `(,clarinet-name
-    . ((keys
-        . ((hidden
-            . ((midline
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,midline-stencil)
-                   (text? . #f)
-                   (complexity . basic)))))
-           (central-column
-            . ((one
-                . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))
-               (two
-                . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))
-               (three
-                . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))
-               (four
-                . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))
-               (five
-                . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))
-               (six
-                . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . covered)))
-               (h
-                . ((offset . (0.0 . 6.25))
-                   (stencil . ,(variable-column-circle-stencil 0.4))
-                   (text? . #f)
-                   (complexity . covered)))))
-           (left-hand
-            . ,(append `((thumb
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,clarinet-lh-thumb-key-stencil)
-                             (text? . #f)
-                             (complexity . trill)))
-                         (R
-                          . ((offset . (1.0 . 1.0))
-                             (stencil . ,clarinet-lh-R-key-stencil)
-                             (text? . #f)
-                             (complexity . trill)))
-                         (a
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,clarinet-lh-a-key-stencil)
-                             (text? . ("A" . #f))
-                             (complexity . trill)))
-                         (gis
-                          . ((offset . (0.8 . 1.0))
-                             (stencil . ,clarinet-lh-gis-key-stencil)
-                             (text? . ("G" . 1))
-                             (complexity . trill)))
-                         (ees
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,clarinet-lh-ees-key-stencil)
-                             (text? . ("E" . 0))
-                             (complexity . trill)))
-                         (cis
-                          . ((offset . (-0.85 . 0.2))
-                             (stencil . ,clarinet-lh-cis-key-stencil)
-                             (text? . ("C" . 1))
-                             (complexity . trill)))
-                         (f
-                          . ((offset . (3.6 . 0.5))
-                             (stencil . ,clarinet-lh-f-key-stencil)
-                             (text? . ("F" . #f))
-                             (complexity . trill)))
-                         (e
-                          . ((offset . (2.05 . -3.65))
-                             (stencil . ,clarinet-lh-e-key-stencil)
-                             (text? . ("E" . #f))
-                             (complexity . trill)))
-                         (fis
-                          . ((offset . (2.25 . -4.15))
-                             (stencil . ,clarinet-lh-fis-key-stencil)
-                             (text? . ("F" . 1))
-                             (complexity . trill))))
-                        (assoc-get 'left-extra-key-names change-points)))
-           (right-hand
-            . ,(append `((one
-                          . ((offset . (0.0 . 0.75))
-                             (stencil . ,clarinet-rh-one-key-stencil)
-                             (text? . "1")
-                             (complexity . trill)))
-                         (two
-                          . ((offset . (0.0 . 0.25))
-                             (stencil . ,clarinet-rh-two-key-stencil)
-                             (text? . "2")
-                             (complexity . trill)))
-                         (three
-                          . ((offset . (0.0 . -0.25))
-                             (stencil . ,clarinet-rh-three-key-stencil)
-                             (text? . "3")
-                             (complexity . trill)))
-                         (four
-                          . ((offset . (0.0 . -0.75))
-                             (stencil . ,clarinet-rh-four-key-stencil)
-                             (text? . "4")
-                             (complexity . trill)))
-                         (b
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,clarinet-rh-b-key-stencil)
-                             (text? . ("B" . #f))
-                             (complexity . trill)))
-                         (fis
-                          . ((offset . (0.0 . ,(* 4 (+ 0.75 CL-RH-HAIR))))
-                             (stencil . ,clarinet-rh-fis-key-stencil)
-                             (text? . ("F" . 1))
-                             (complexity . trill)))
-                         (gis
-                          . ((offset . (,(+ 1.5 CL-RH-HAIR)
-                                        . ,(* 3 (+ 0.75 CL-RH-HAIR))))
-                             (stencil . ,clarinet-rh-gis-key-stencil)
-                             (text? . ("G" . 1))
-                             (complexity . trill)))
-                         (e
-                          . ((offset . (0.0 . ,(* 2 (+ 0.75 CL-RH-HAIR))))
-                             (stencil . ,clarinet-rh-e-key-stencil)
-                             (text? . ("E" . #f))
-                             (complexity . trill)))
-                         (f
-                          . ((offset . (,(+ 1.5 CL-RH-HAIR)
-                                        . ,(* 1 (+ 0.75 CL-RH-HAIR))))
-                             (stencil . ,clarinet-rh-f-key-stencil)
-                             (text? . ("F" . #f))
-                             (complexity . trill))))
-                       (assoc-get 'bottom-group-key-names change-points)))))
-       (graphical-commands
-        . ((stencil-alist
-            . ((stencils
-                . ,(append (assoc-get 'right-thumb-group change-points)
-                           `(,(simple-stencil-alist '(hidden . midline)
-                                                    '(0.0 . 3.75))
-                            ((stencils
-                              . ,(make-central-column-hole-addresses
-                                   CENTRAL-COLUMN-HOLE-H-LIST))
-                             (xy-scale-function . (,identity . ,identity))
-                             (textual? . #f)
-                             (offset . (0.0 . 0.0)))
-                            ((stencils
-                              . ,(make-left-hand-key-addresses '(thumb R)))
-                             (xy-scale-function . (,identity . ,identity))
-                             (textual? . #f)
-                             (offset . (-2.5 . 6.5)))
-                            ((stencils
-                              . ((left-hand . a) (left-hand . gis)))
-                             (xy-scale-function . (,return-1 . ,return-1))
-                             (textual? . #f)
-                             (offset . (0.0 . 7.5)))
-                            ,(simple-stencil-alist '(left-hand . ees)
-                                                   '(1.0 . 5.0))
-                            ((stencils
-                              . ,(make-left-hand-key-addresses '(cis f e fis)))
-                             (xy-scale-function . (,return-1 . ,return-1))
-                             (textual? . #f)
-                             (offset . (0.0 . 3.9)))
-                            ((stencils
-                              . ,(make-right-hand-key-addresses
-                                    '(one two three four)))
-                             (xy-scale-function . (,return-1 . ,return-1))
-                             (textual? . #f)
-                             (offset . (-1.25 . 3.75)))
-                            ,(simple-stencil-alist '(right-hand . b)
-                                                   '(-1.0 . 1.5))
-                            ((stencils
-                              . ,(assoc-get 'bottom-right-group-key-addresses
-                                            change-points))
-                             (xy-scale-function . (,return-1 . ,return-1))
-                             (textual? . #f)
-                             (offset . (-4.0 . -0.75))))))
-               (xy-scale-function . (,identity . ,identity))
-               (textual? . #f)
-               (offset . (0.0 . 0.0))))
-           (draw-instructions
-            . ,(append (assoc-get 'low-rich-draw-rules change-points)
-                       `((,apply-group-draw-rule-series
-                          ,(append (assoc-get 'low-key-group change-points)
-                                   `(((left-hand . a) (left-hand . gis))
-                                     ,(make-right-hand-key-addresses
+      ((change-points
+        (get-named-spreadsheet-column clarinet-name clarinet-change-points)))
+    `(,clarinet-name
+      . ((keys
+          . ((hidden
+              . ((midline
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,midline-stencil)
+                     (text? . #f)
+                     (complexity . basic)))))
+             (central-column
+              . ((one
+                  . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))
+                 (two
+                  . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))
+                 (three
+                  . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))
+                 (four
+                  . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))
+                 (five
+                  . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))
+                 (six
+                  . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . covered)))
+                 (h
+                  . ((offset . (0.0 . 6.25))
+                     (stencil . ,(variable-column-circle-stencil 0.4))
+                     (text? . #f)
+                     (complexity . covered)))))
+             (left-hand
+              . ,(append `((thumb
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,clarinet-lh-thumb-key-stencil)
+                               (text? . #f)
+                               (complexity . trill)))
+                           (R
+                            . ((offset . (1.0 . 1.0))
+                               (stencil . ,clarinet-lh-R-key-stencil)
+                               (text? . #f)
+                               (complexity . trill)))
+                           (a
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,clarinet-lh-a-key-stencil)
+                               (text? . ("A" . #f))
+                               (complexity . trill)))
+                           (gis
+                            . ((offset . (0.8 . 1.0))
+                               (stencil . ,clarinet-lh-gis-key-stencil)
+                               (text? . ("G" . 1))
+                               (complexity . trill)))
+                           (ees
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,clarinet-lh-ees-key-stencil)
+                               (text? . ("E" . 0))
+                               (complexity . trill)))
+                           (cis
+                            . ((offset . (-0.85 . 0.2))
+                               (stencil . ,clarinet-lh-cis-key-stencil)
+                               (text? . ("C" . 1))
+                               (complexity . trill)))
+                           (f
+                            . ((offset . (3.6 . 0.5))
+                               (stencil . ,clarinet-lh-f-key-stencil)
+                               (text? . ("F" . #f))
+                               (complexity . trill)))
+                           (e
+                            . ((offset . (2.05 . -3.65))
+                               (stencil . ,clarinet-lh-e-key-stencil)
+                               (text? . ("E" . #f))
+                               (complexity . trill)))
+                           (fis
+                            . ((offset . (2.25 . -4.15))
+                               (stencil . ,clarinet-lh-fis-key-stencil)
+                               (text? . ("F" . 1))
+                               (complexity . trill))))
+                         (assoc-get 'left-extra-key-names change-points)))
+             (right-hand
+              . ,(append `((one
+                            . ((offset . (0.0 . 0.75))
+                               (stencil . ,clarinet-rh-one-key-stencil)
+                               (text? . "1")
+                               (complexity . trill)))
+                           (two
+                            . ((offset . (0.0 . 0.25))
+                               (stencil . ,clarinet-rh-two-key-stencil)
+                               (text? . "2")
+                               (complexity . trill)))
+                           (three
+                            . ((offset . (0.0 . -0.25))
+                               (stencil . ,clarinet-rh-three-key-stencil)
+                               (text? . "3")
+                               (complexity . trill)))
+                           (four
+                            . ((offset . (0.0 . -0.75))
+                               (stencil . ,clarinet-rh-four-key-stencil)
+                               (text? . "4")
+                               (complexity . trill)))
+                           (b
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,clarinet-rh-b-key-stencil)
+                               (text? . ("B" . #f))
+                               (complexity . trill)))
+                           (fis
+                            . ((offset . (0.0 . ,(* 4 (+ 0.75 CL-RH-HAIR))))
+                               (stencil . ,clarinet-rh-fis-key-stencil)
+                               (text? . ("F" . 1))
+                               (complexity . trill)))
+                           (gis
+                            . ((offset . (,(+ 1.5 CL-RH-HAIR)
+                                          . ,(* 3 (+ 0.75 CL-RH-HAIR))))
+                               (stencil . ,clarinet-rh-gis-key-stencil)
+                               (text? . ("G" . 1))
+                               (complexity . trill)))
+                           (e
+                            . ((offset . (0.0 . ,(* 2 (+ 0.75 CL-RH-HAIR))))
+                               (stencil . ,clarinet-rh-e-key-stencil)
+                               (text? . ("E" . #f))
+                               (complexity . trill)))
+                           (f
+                            . ((offset . (,(+ 1.5 CL-RH-HAIR)
+                                          . ,(* 1 (+ 0.75 CL-RH-HAIR))))
+                               (stencil . ,clarinet-rh-f-key-stencil)
+                               (text? . ("F" . #f))
+                               (complexity . trill))))
+                         (assoc-get 'bottom-group-key-names change-points)))))
+         (graphical-commands
+          . ((stencil-alist
+              . ((stencils
+                  . ,(append (assoc-get 'right-thumb-group change-points)
+                             `(,(simple-stencil-alist '(hidden . midline)
+                                                      '(0.0 . 3.75))
+                               ((stencils
+                                 . ,(make-central-column-hole-addresses
+                                     CENTRAL-COLUMN-HOLE-H-LIST))
+                                (xy-scale-function . (,identity . ,identity))
+                                (textual? . #f)
+                                (offset . (0.0 . 0.0)))
+                               ((stencils
+                                 . ,(make-left-hand-key-addresses '(thumb R)))
+                                (xy-scale-function . (,identity . ,identity))
+                                (textual? . #f)
+                                (offset . (-2.5 . 6.5)))
+                               ((stencils
+                                 . ((left-hand . a) (left-hand . gis)))
+                                (xy-scale-function . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (0.0 . 7.5)))
+                               ,(simple-stencil-alist '(left-hand . ees)
+                                                      '(1.0 . 5.0))
+                               ((stencils
+                                 . ,(make-left-hand-key-addresses '(cis f e fis)))
+                                (xy-scale-function . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (0.0 . 3.9)))
+                               ((stencils
+                                 . ,(make-right-hand-key-addresses
+                                     '(one two three four)))
+                                (xy-scale-function . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (-1.25 . 3.75)))
+                               ,(simple-stencil-alist '(right-hand . b)
+                                                      '(-1.0 . 1.5))
+                               ((stencils
+                                 . ,(assoc-get 'bottom-right-group-key-addresses
+                                               change-points))
+                                (xy-scale-function . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (-4.0 . -0.75))))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ,(append (assoc-get 'low-rich-draw-rules change-points)
+                         `((,apply-group-draw-rule-series
+                            ,(append (assoc-get 'low-key-group change-points)
+                                     `(((left-hand . a) (left-hand . gis))
+                                       ,(make-right-hand-key-addresses
                                          '(one two three four))
-                                     ,(assoc-get 'low-left-hand-key-addresses
-                                                 change-points)
-                                     ,(assoc-get 'right-hand-key-addresses
-                                                 change-points))))
-                        (,rich-group-draw-rule
-                           ((left-hand . R))
-                           ((left-hand . thumb)))
-                        (,group-automate-rule
-                           ,(make-central-column-hole-addresses
-                               CENTRAL-COLUMN-HOLE-LIST))
-                        (,group-automate-rule ((hidden . midline))))))
-           (extra-offset-instructions
-            . ,(append (assoc-get 'low-extra-offset-rule change-points)
-                       `((,rich-group-extra-offset-rule
-                          ((central-column . h))
-                          ((central-column . one)
-                           (left-hand . a)
-                           (left-hand . gis))
-                          (0.0 . 0.8))
-                         (,uniform-extra-offset-rule (0.0 . 0.0)))))))
-       (text-commands
-        . ((stencil-alist
-            . ((stencils
-                . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
-                   ((stencils
-                     . ,(make-central-column-hole-addresses
+                                       ,(assoc-get 'low-left-hand-key-addresses
+                                                   change-points)
+                                       ,(assoc-get 'right-hand-key-addresses
+                                                   change-points))))
+                           (,rich-group-draw-rule
+                            ((left-hand . R))
+                            ((left-hand . thumb)))
+                           (,group-automate-rule
+                            ,(make-central-column-hole-addresses
+                              CENTRAL-COLUMN-HOLE-LIST))
+                           (,group-automate-rule ((hidden . midline))))))
+             (extra-offset-instructions
+              . ,(append (assoc-get 'low-extra-offset-rule change-points)
+                         `((,rich-group-extra-offset-rule
+                            ((central-column . h))
+                            ((central-column . one)
+                             (left-hand . a)
+                             (left-hand . gis))
+                            (0.0 . 0.8))
+                           (,uniform-extra-offset-rule (0.0 . 0.0)))))))
+         (text-commands
+          . ((stencil-alist
+              . ((stencils
+                  . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
+                     ((stencils
+                       . ,(make-central-column-hole-addresses
                            CENTRAL-COLUMN-HOLE-LIST))
-                    (xy-scale-function . (,identity . ,identity))
-                    (textual? . #f)
-                    (offset . (0.0 . 0.0)))
-                   ((stencils . ((left-hand . thumb) (left-hand . R)))
-                    (xy-scale-function . (,identity . ,identity))
-                    (textual? . #f)
-                    (offset . (-2.5 . 6.5)))
-                   ((stencils
-                     . ,(assoc-get 'all-left-hand-key-addresses change-points))
-                    (textual? . ,lh-woodwind-text-stencil)
-                    (offset . (1.5 . 3.75)))
-                   ((stencils
-                     . ,(make-right-hand-key-addresses '(one two three four)))
-                    (textual? . ,number-column-stencil)
-                    (offset . (-1.25 . 3.75)))
-                   ((stencils . ,(assoc-get 'right-hand-key-addresses
-                                            change-points))
-                    (textual? . ,rh-woodwind-text-stencil)
-                    (offset . (-1.25 . 0.0)))))
-               (xy-scale-function . (,identity . ,identity))
-               (textual? . #f)
-               (offset . (0.0 . 0.0))))
-           (draw-instructions
-            . ((,apply-group-draw-rule-series
-                 (,(assoc-get 'all-left-hand-key-addresses change-points)
-                  ,(make-right-hand-key-addresses '(one two three four))
-                  ,(assoc-get 'right-hand-key-addresses change-points)))
-               (,group-automate-rule
-                 ,(make-central-column-hole-addresses
-                     CENTRAL-COLUMN-HOLE-LIST))
-               (,group-automate-rule ((hidden . midline)))))
-           (extra-offset-instructions
-            . ((,rich-group-extra-offset-rule
+                      (xy-scale-function . (,identity . ,identity))
+                      (textual? . #f)
+                      (offset . (0.0 . 0.0)))
+                     ((stencils . ((left-hand . thumb) (left-hand . R)))
+                      (xy-scale-function . (,identity . ,identity))
+                      (textual? . #f)
+                      (offset . (-2.5 . 6.5)))
+                     ((stencils
+                       . ,(assoc-get 'all-left-hand-key-addresses change-points))
+                      (textual? . ,lh-woodwind-text-stencil)
+                      (offset . (1.5 . 3.75)))
+                     ((stencils
+                       . ,(make-right-hand-key-addresses '(one two three four)))
+                      (textual? . ,number-column-stencil)
+                      (offset . (-1.25 . 3.75)))
+                     ((stencils . ,(assoc-get 'right-hand-key-addresses
+                                              change-points))
+                      (textual? . ,rh-woodwind-text-stencil)
+                      (offset . (-1.25 . 0.0)))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ((,apply-group-draw-rule-series
+                  (,(assoc-get 'all-left-hand-key-addresses change-points)
+                   ,(make-right-hand-key-addresses '(one two three four))
+                   ,(assoc-get 'right-hand-key-addresses change-points)))
+                 (,group-automate-rule
+                  ,(make-central-column-hole-addresses
+                    CENTRAL-COLUMN-HOLE-LIST))
+                 (,group-automate-rule ((hidden . midline)))))
+             (extra-offset-instructions
+              . ((,rich-group-extra-offset-rule
                   ((central-column . h))
                   ((central-column . one) (left-hand . a) (left-hand . gis))
                   (0.0 . 0.8))
-               (,uniform-extra-offset-rule (0.0 . 0.0))))))))))
+                 (,uniform-extra-offset-rule (0.0 . 0.0))))))))))
 
 ;; Saxophone assembly instructions
 
 
 (define saxophone-change-points
   ((make-named-spreadsheet '(saxophone baritone-saxophone))
-    `((low-a-key-definition
-       . (()
-          ((low-a
-            . ((offset . (0.0 . 0.0))
-               (stencil . ,saxophone-lh-low-a-key-stencil)
-               (text? . #f)
-               (complexity . trill))))))
+   `((low-a-key-definition
+      . (()
+         ((low-a
+           . ((offset . (0.0 . 0.0))
+              (stencil . ,saxophone-lh-low-a-key-stencil)
+              (text? . #f)
+              (complexity . trill))))))
      (low-a-key-group
-       . (()
-          (,(simple-stencil-alist '(left-hand . low-a) '(-5.0 . 7.0)))))
+      . (()
+         (,(simple-stencil-alist '(left-hand . low-a) '(-5.0 . 7.0)))))
      (low-a-presence
-       . (()
-          ((left-hand . low-a))))
+      . (()
+         ((left-hand . low-a))))
      (left-hand-key-names
-       . (,(make-right-hand-key-addresses
-              '(ees d f front-f bes gis cis b low-bes))
-          ,(make-right-hand-key-addresses
-              '(ees d f front-f bes gis cis b low-bes low-a)))))))
+      . (,(make-right-hand-key-addresses
+           '(ees d f front-f bes gis cis b low-bes))
+         ,(make-right-hand-key-addresses
+           '(ees d f front-f bes gis cis b low-bes low-a)))))))
 
 (define (generate-saxophone-family-entry saxophone-name)
   (let*
-    ((change-points
-     (get-named-spreadsheet-column
-       (saxophone-name-passerelle saxophone-name) saxophone-change-points)))
-  `(,saxophone-name
-    . ((keys
-        . ((hidden
-            . ((midline
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,midline-stencil)
-                   (text? . #f)
-                   (complexity . basic)))))
-           (central-column
-            . ((one
-                . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . trill)))
-               (two
-                . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . trill)))
-               (three
-                . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . trill)))
-               (four
-                . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . trill)))
-               (five
-                . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . trill)))
-               (six
-                . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,column-circle-stencil)
-                   (text? . #f)
-                   (complexity . trill)))))
-           (left-hand
-            . ,(append (assoc-get 'low-a-key-definition change-points)
-                       `((T
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,saxophone-lh-T-key-stencil)
-                             (text? . ("T" . #f))
-                             (complexity . trill)))
-                         (ees
-                          . ((offset . (0.4 . 1.6))
-                             (stencil . ,saxophone-lh-ees-key-stencil)
-                             (text? . ("E" . 0))
-                             (complexity . trill)))
-                         (d
-                          . ((offset . (1.5 . 0.5))
-                             (stencil . ,saxophone-lh-d-key-stencil)
-                             (text? . ("D" . #f))
-                             (complexity . trill)))
-                         (f
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,saxophone-lh-f-key-stencil)
-                             (text? . ("F" . #f))
-                             (complexity . trill)))
-                         (front-f
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,saxophone-lh-front-f-key-stencil)
-                             (text? . ("f" . #f))
-                             (complexity . trill)))
-                         (bes
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,saxophone-lh-bes-key-stencil)
-                             (text? . ("B" . 0))
-                             (complexity . trill)))
-                         (gis
-                          . ((offset . (0.0 . 1.1))
-                             (stencil . ,saxophone-lh-gis-key-stencil)
-                             (text? . ("G" . 1))
-                             (complexity . trill)))
-                         (cis
-                          . ((offset . (2.4 . 0.0))
-                             (stencil . ,saxophone-lh-cis-key-stencil)
-                             (text? . ("C" . 1))
-                             (complexity . trill)))
-                         (b
-                          . ((offset . (0.0 . 0.0))
-                            (stencil . ,saxophone-lh-b-key-stencil)
-                            (text? . ("B" . #f))
-                            (complexity . trill)))
-                         (low-bes
-                          . ((offset . (0.0 . -0.2))
-                             (stencil . ,saxophone-lh-low-bes-key-stencil)
-                             (text? . ("b" . 0))
-                             (complexity . trill))))))
-           (right-hand
-            . ((e
-                . ((offset . (0.0 . 2.0))
-                   (stencil . ,saxophone-rh-e-key-stencil)
-                   (text? . ("E" . #f))
-                   (complexity . trill)))
-               (c
-                . ((offset . (0.0 . 0.9))
-                   (stencil . ,saxophone-rh-c-key-stencil)
-                   (text? . ("C" . #f))
-                   (complexity . trill)))
-               (bes
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,saxophone-rh-bes-key-stencil)
-                   (text? . ("B" . 0))
-                   (complexity . trill)))
-               (high-fis
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,saxophone-rh-high-fis-key-stencil)
-                   (text? . ("hF" . 1))
-                   (complexity . trill)))
-               (fis
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,saxophone-rh-fis-key-stencil)
-                   (text? . ("F" . 1))
-                   (complexity . trill)))
-               (ees
-                . ((offset . (0.0 . 0.7))
-                   (stencil . ,saxophone-rh-ees-key-stencil)
-                   (text? . ("E" . 0))
-                   (complexity . trill)))
-               (low-c
-                . ((offset . (-1.2 . -0.1))
-                   (stencil . ,saxophone-rh-low-c-key-stencil)
-                   (text? . ("c" . #f))
-                   (complexity . trill)))))))
-      (graphical-commands
-       . ((stencil-alist
-           . ((stencils
-               . ,(append (assoc-get 'low-a-key-group change-points)
-                          `(,(simple-stencil-alist '(hidden . midline)
-                                                   '(0.0 . 3.75))
-                            ((stencils
-                              . ,(make-central-column-hole-addresses
-                                    CENTRAL-COLUMN-HOLE-LIST))
-                             (xy-scale-function . (,identity . ,identity))
-                             (textual? . #f)
-                             (offset . (0.0 . 0.0)))
-                            ((stencils
-                              . ,(make-left-hand-key-addresses '(ees d f)))
-                             (xy-scale-function . (,return-1 . ,return-1))
-                             (textual? . #f)
-                             (offset . (1.5 . 6.8)))
-                            ,(simple-stencil-alist '(left-hand . front-f)
-                                                   '(0.0 . 7.35))
-                            ,(simple-stencil-alist '(left-hand . T)
-                                                   '(-2.2 . 6.5))
-                            ,(simple-stencil-alist '(left-hand . bes)
-                                                   '(0.0 . 6.2))
-                            ((stencils
-                              . ,(make-left-hand-key-addresses
-                                    '(gis cis b low-bes)))
-                             (xy-scale-function . (,return-1 . ,return-1))
-                             (textual? . #f)
-                             (offset . (1.2 . 3.5)))
-                            ((stencils
-                              . ,(make-right-hand-key-addresses '(e c bes)))
-                             (xy-scale-function . (,return-1 . ,return-1))
-                             (textual? . #f)
-                             (offset . (-2.3 . 3.4)))
-                            ,(simple-stencil-alist '(right-hand . high-fis)
-                                                   '(-1.8 . 2.5))
-                            ,(simple-stencil-alist '(right-hand . fis)
-                                                   '(-1.5 . 1.5))
-                            ((stencils
-                              . ,(make-right-hand-key-addresses '(ees low-c)))
-                             (xy-scale-function . (,return-1 . ,return-1))
-                             (textual? . #f)
-                             (offset . (-2.0 . 0.3))))))
-              (xy-scale-function . (,identity . ,identity))
-              (textual? . #f)
-              (offset . (0.0 . 0.0))))
-          (draw-instructions
-           . ((,apply-group-draw-rule-series
-                (,(make-left-hand-key-addresses '(ees d f))
-                 ,(make-left-hand-key-addresses '(gis cis b low-bes))
-                 ,(make-right-hand-key-addresses '(e c bes))
-                 ,(make-right-hand-key-addresses '(ees low-c))))
-              (,group-automate-rule
-                ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
-              (,group-automate-rule ((hidden . midline)))))
-          (extra-offset-instructions
-           . ((,rich-group-extra-offset-rule
-                ((left-hand . bes))
-                ,(append (assoc-get 'low-a-presence change-points)
-                         '((central-column . one)
-                           (left-hand . front-f)
-                           (left-hand . T)
-                           (left-hand . ees)
-                           (left-hand . d)
-                           (left-hand . f)))
-                (0.0 . 1.0))
-              (,uniform-extra-offset-rule (0.0 . 0.0))))))
-      (text-commands
-       . ((stencil-alist
-           . ((stencils
-               . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
-                  ((stencils
-                    . ,(make-central-column-hole-addresses
-                          CENTRAL-COLUMN-HOLE-LIST))
-                   (xy-scale-function . (,identity . ,identity))
-                   (textual? . #f)
-                   (offset . (0.0 . 0.0)))
-                  ,(simple-stencil-alist '(left-hand . T) '(-1.0 . 7.0))
-                  ((stencils
-                    . ,(assoc-get 'left-hand-key-names change-points))
-                   (textual? . ,lh-woodwind-text-stencil)
-                   (offset . (1.5 . 3.75)))
-                  ((stencils
-                    . ,(make-right-hand-key-addresses
-                          '(e c bes high-fis fis ees low-c)))
-                   (textual? . ,rh-woodwind-text-stencil)
-                   (offset . (-1.25 . 0.0)))))
-              (xy-scale-function . (,identity . ,identity))
-              (textual? . #f)
-              (offset . (0.0 . 0.0))))
-          (draw-instructions
-           . ((,apply-group-draw-rule-series
-                (,(make-left-hand-key-addresses
-                    '(ees d f front-f bes gis cis b low-bes))
-                 ,(make-right-hand-key-addresses
-                    '(e c bes high-fis fis ees low-c))))
-              (,group-automate-rule
-                 ,(make-central-column-hole-addresses
+      ((change-points
+        (get-named-spreadsheet-column
+         (saxophone-name-passerelle saxophone-name) saxophone-change-points)))
+    `(,saxophone-name
+      . ((keys
+          . ((hidden
+              . ((midline
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,midline-stencil)
+                     (text? . #f)
+                     (complexity . basic)))))
+             (central-column
+              . ((one
+                  . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . trill)))
+                 (two
+                  . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . trill)))
+                 (three
+                  . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . trill)))
+                 (four
+                  . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . trill)))
+                 (five
+                  . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . trill)))
+                 (six
+                  . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,column-circle-stencil)
+                     (text? . #f)
+                     (complexity . trill)))))
+             (left-hand
+              . ,(append (assoc-get 'low-a-key-definition change-points)
+                         `((T
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,saxophone-lh-T-key-stencil)
+                               (text? . ("T" . #f))
+                               (complexity . trill)))
+                           (ees
+                            . ((offset . (0.4 . 1.6))
+                               (stencil . ,saxophone-lh-ees-key-stencil)
+                               (text? . ("E" . 0))
+                               (complexity . trill)))
+                           (d
+                            . ((offset . (1.5 . 0.5))
+                               (stencil . ,saxophone-lh-d-key-stencil)
+                               (text? . ("D" . #f))
+                               (complexity . trill)))
+                           (f
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,saxophone-lh-f-key-stencil)
+                               (text? . ("F" . #f))
+                               (complexity . trill)))
+                           (front-f
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,saxophone-lh-front-f-key-stencil)
+                               (text? . ("f" . #f))
+                               (complexity . trill)))
+                           (bes
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,saxophone-lh-bes-key-stencil)
+                               (text? . ("B" . 0))
+                               (complexity . trill)))
+                           (gis
+                            . ((offset . (0.0 . 1.1))
+                               (stencil . ,saxophone-lh-gis-key-stencil)
+                               (text? . ("G" . 1))
+                               (complexity . trill)))
+                           (cis
+                            . ((offset . (2.4 . 0.0))
+                               (stencil . ,saxophone-lh-cis-key-stencil)
+                               (text? . ("C" . 1))
+                               (complexity . trill)))
+                           (b
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,saxophone-lh-b-key-stencil)
+                               (text? . ("B" . #f))
+                               (complexity . trill)))
+                           (low-bes
+                            . ((offset . (0.0 . -0.2))
+                               (stencil . ,saxophone-lh-low-bes-key-stencil)
+                               (text? . ("b" . 0))
+                               (complexity . trill))))))
+             (right-hand
+              . ((e
+                  . ((offset . (0.0 . 2.0))
+                     (stencil . ,saxophone-rh-e-key-stencil)
+                     (text? . ("E" . #f))
+                     (complexity . trill)))
+                 (c
+                  . ((offset . (0.0 . 0.9))
+                     (stencil . ,saxophone-rh-c-key-stencil)
+                     (text? . ("C" . #f))
+                     (complexity . trill)))
+                 (bes
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,saxophone-rh-bes-key-stencil)
+                     (text? . ("B" . 0))
+                     (complexity . trill)))
+                 (high-fis
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,saxophone-rh-high-fis-key-stencil)
+                     (text? . ("hF" . 1))
+                     (complexity . trill)))
+                 (fis
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,saxophone-rh-fis-key-stencil)
+                     (text? . ("F" . 1))
+                     (complexity . trill)))
+                 (ees
+                  . ((offset . (0.0 . 0.7))
+                     (stencil . ,saxophone-rh-ees-key-stencil)
+                     (text? . ("E" . 0))
+                     (complexity . trill)))
+                 (low-c
+                  . ((offset . (-1.2 . -0.1))
+                     (stencil . ,saxophone-rh-low-c-key-stencil)
+                     (text? . ("c" . #f))
+                     (complexity . trill)))))))
+         (graphical-commands
+          . ((stencil-alist
+              . ((stencils
+                  . ,(append (assoc-get 'low-a-key-group change-points)
+                             `(,(simple-stencil-alist '(hidden . midline)
+                                                      '(0.0 . 3.75))
+                               ((stencils
+                                 . ,(make-central-column-hole-addresses
+                                     CENTRAL-COLUMN-HOLE-LIST))
+                                (xy-scale-function . (,identity . ,identity))
+                                (textual? . #f)
+                                (offset . (0.0 . 0.0)))
+                               ((stencils
+                                 . ,(make-left-hand-key-addresses '(ees d f)))
+                                (xy-scale-function . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (1.5 . 6.8)))
+                               ,(simple-stencil-alist '(left-hand . front-f)
+                                                      '(0.0 . 7.35))
+                               ,(simple-stencil-alist '(left-hand . T)
+                                                      '(-2.2 . 6.5))
+                               ,(simple-stencil-alist '(left-hand . bes)
+                                                      '(0.0 . 6.2))
+                               ((stencils
+                                 . ,(make-left-hand-key-addresses
+                                     '(gis cis b low-bes)))
+                                (xy-scale-function . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (1.2 . 3.5)))
+                               ((stencils
+                                 . ,(make-right-hand-key-addresses '(e c bes)))
+                                (xy-scale-function . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (-2.3 . 3.4)))
+                               ,(simple-stencil-alist '(right-hand . high-fis)
+                                                      '(-1.8 . 2.5))
+                               ,(simple-stencil-alist '(right-hand . fis)
+                                                      '(-1.5 . 1.5))
+                               ((stencils
+                                 . ,(make-right-hand-key-addresses '(ees low-c)))
+                                (xy-scale-function . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (-2.0 . 0.3))))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ((,apply-group-draw-rule-series
+                  (,(make-left-hand-key-addresses '(ees d f))
+                   ,(make-left-hand-key-addresses '(gis cis b low-bes))
+                   ,(make-right-hand-key-addresses '(e c bes))
+                   ,(make-right-hand-key-addresses '(ees low-c))))
+                 (,group-automate-rule
+                  ,(make-central-column-hole-addresses CENTRAL-COLUMN-HOLE-LIST))
+                 (,group-automate-rule ((hidden . midline)))))
+             (extra-offset-instructions
+              . ((,rich-group-extra-offset-rule
+                  ((left-hand . bes))
+                  ,(append (assoc-get 'low-a-presence change-points)
+                           '((central-column . one)
+                             (left-hand . front-f)
+                             (left-hand . T)
+                             (left-hand . ees)
+                             (left-hand . d)
+                             (left-hand . f)))
+                  (0.0 . 1.0))
+                 (,uniform-extra-offset-rule (0.0 . 0.0))))))
+         (text-commands
+          . ((stencil-alist
+              . ((stencils
+                  . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
+                     ((stencils
+                       . ,(make-central-column-hole-addresses
+                           CENTRAL-COLUMN-HOLE-LIST))
+                      (xy-scale-function . (,identity . ,identity))
+                      (textual? . #f)
+                      (offset . (0.0 . 0.0)))
+                     ,(simple-stencil-alist '(left-hand . T) '(-1.0 . 7.0))
+                     ((stencils
+                       . ,(assoc-get 'left-hand-key-names change-points))
+                      (textual? . ,lh-woodwind-text-stencil)
+                      (offset . (1.5 . 3.75)))
+                     ((stencils
+                       . ,(make-right-hand-key-addresses
+                           '(e c bes high-fis fis ees low-c)))
+                      (textual? . ,rh-woodwind-text-stencil)
+                      (offset . (-1.25 . 0.0)))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ((,apply-group-draw-rule-series
+                  (,(make-left-hand-key-addresses
+                     '(ees d f front-f bes gis cis b low-bes))
+                   ,(make-right-hand-key-addresses
+                     '(e c bes high-fis fis ees low-c))))
+                 (,group-automate-rule
+                  ,(make-central-column-hole-addresses
                     CENTRAL-COLUMN-HOLE-LIST))
-              (,group-automate-rule ((hidden . midline)))))
-          (extra-offset-instructions
-           . ((,uniform-extra-offset-rule (0.0 . 0.0))))))))))
+                 (,group-automate-rule ((hidden . midline)))))
+             (extra-offset-instructions
+              . ((,uniform-extra-offset-rule (0.0 . 0.0))))))))))
 
 ;; Bassoon assembly instructions
 
 (define bassoon-change-points
   ((make-named-spreadsheet '(bassoon contrabassoon))
-    `((left-hand-additional-keys .
-      (((a .
-         ((offset . (0.0 . -0.3))
-         (stencil . ,bassoon-lh-a-flick-key-stencil)
-         (text? . ("A" . #f))
-         (complexity . trill)))
-        (w .
-         ((offset . (0.0 . 0.0))
-         (stencil . ,bassoon-lh-whisper-key-stencil)
-         (text? . ("w" . #f))
-         (complexity . trill))))
-        ()))
-      (right-hand-additional-keys .
-      (((cis .
-          ((offset . (0.0 . 0.0))
-          (stencil . ,bassoon-rh-cis-key-stencil)
-          (text? . ("C" . 1))
-          (complexity . trill)))
-        (thumb-gis .
-          ((offset . (0.0 . 0.0))
-          (stencil . ,bassoon-rh-thumb-gis-key-stencil)
-          (text? . ("G" . 1))
-          (complexity . trill))))
-        ()))
+   `((left-hand-additional-keys .
+                                (((a .
+                                     ((offset . (0.0 . -0.3))
+                                      (stencil . ,bassoon-lh-a-flick-key-stencil)
+                                      (text? . ("A" . #f))
+                                      (complexity . trill)))
+                                  (w .
+                                     ((offset . (0.0 . 0.0))
+                                      (stencil . ,bassoon-lh-whisper-key-stencil)
+                                      (text? . ("w" . #f))
+                                      (complexity . trill))))
+                                 ()))
+     (right-hand-additional-keys .
+                                 (((cis .
+                                        ((offset . (0.0 . 0.0))
+                                         (stencil . ,bassoon-rh-cis-key-stencil)
+                                         (text? . ("C" . 1))
+                                         (complexity . trill)))
+                                   (thumb-gis .
+                                              ((offset . (0.0 . 0.0))
+                                               (stencil . ,bassoon-rh-thumb-gis-key-stencil)
+                                               (text? . ("G" . 1))
+                                               (complexity . trill))))
+                                  ()))
      (left-hand-flick-group .
-       (((left-hand . d) (left-hand . c) (left-hand . a))
-         ((left-hand . d) (left-hand . c))))
+                            (((left-hand . d) (left-hand . c) (left-hand . a))
+                             ((left-hand . d) (left-hand . c))))
      (left-hand-thumb-group .
-       (((left-hand . w) (left-hand . thumb-cis))
-         ((left-hand . thumb-cis))))
+                            (((left-hand . w) (left-hand . thumb-cis))
+                             ((left-hand . thumb-cis))))
      (cis-offset-instruction .
-       (((,rich-group-extra-offset-rule
-         ((right-hand . cis))
-         ,(append
-           '((hidden . midline) (hidden . long-midline))
-           (make-central-column-hole-addresses '(three two one))
-           (make-left-hand-key-addresses
-            '(low-b low-bes low-c low-d d a c w thumb-cis
-              high-ees high-e cis ees)))
-         (0.0 . 0.9)))
-        ()))
+                             (((,rich-group-extra-offset-rule
+                                ((right-hand . cis))
+                                ,(append
+                                  '((hidden . midline) (hidden . long-midline))
+                                  (make-central-column-hole-addresses '(three two one))
+                                  (make-left-hand-key-addresses
+                                   '(low-b low-bes low-c low-d d a c w thumb-cis
+                                           high-ees high-e cis ees)))
+                                (0.0 . 0.9)))
+                              ()))
      (right-hand-lower-thumb-group .
-       (((right-hand . thumb-gis) (right-hand . thumb-fis))
-         ((right-hand . thumb-fis))))
+                                   (((right-hand . thumb-gis) (right-hand . thumb-fis))
+                                    ((right-hand . thumb-fis))))
      (right-hand-cis-key .
-       ((,(simple-stencil-alist '(right-hand . cis) '(-2.3 . 3.22)))
-         ()))
+                         ((,(simple-stencil-alist '(right-hand . cis) '(-2.3 . 3.22)))
+                          ()))
      (back-left-hand-key-addresses .
-      ((low-b low-bes low-c low-d d a c w thumb-cis)
-       (low-b low-bes low-c low-d d c thumb-cis)))
+                                   ((low-b low-bes low-c low-d d a c w thumb-cis)
+                                    (low-b low-bes low-c low-d d c thumb-cis)))
      (front-right-hand-key-addresses .
-      ((cis bes fis f gis) (bes fis f gis)))
+                                     ((cis bes fis f gis) (bes fis f gis)))
      (back-right-hand-key-addresses .
-      ((thumb-bes thumb-gis thumb-e thumb-fis)
-       (thumb-bes thumb-e thumb-fis))))))
+                                    ((thumb-bes thumb-gis thumb-e thumb-fis)
+                                     (thumb-bes thumb-e thumb-fis))))))
 
 (define (generate-bassoon-family-entry bassoon-name)
   (let*
-    ((change-points
-     (get-named-spreadsheet-column bassoon-name bassoon-change-points)))
-  `(,bassoon-name
-    . ((keys
-        . ((hidden
-            . ((midline
-                .  ((offset . (0.0 . 0.0))
-                    (stencil . ,midline-stencil)
-                    (text? . #f)
-                    (complexity . basic)))
-               (long-midline
-                . ((offset . (0.0 . 0.0))
-                   (stencil . ,long-midline-stencil)
-                   (text? . #f)
-                   (complexity . basic)))))
-           (central-column
-            . ((one
-                . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,bassoon-cc-one-key-stencil)
-                   (text? . #f)
-                   (complexity . trill)))
-               (two
-                . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (three
-                . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (four
-                . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (five
-                . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))
-               (six
-                . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
-                   (stencil . ,ring-column-circle-stencil)
-                   (text? . #f)
-                   (complexity . ring)))))
-           (left-hand
-            . ,(append (assoc-get 'left-hand-additional-keys
-                                  change-points)
-                       `((high-e
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,bassoon-lh-he-key-stencil)
-                             (text? . ("hE" . #f))
-                             (complexity . trill)))
-                         (high-ees
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,bassoon-lh-hees-key-stencil)
-                             (text? . ("hE" . 0))
-                             (complexity . trill)))
-                         (ees
-                          . ((offset . (-1.0 . 1.0))
-                             (stencil . ,bassoon-lh-ees-key-stencil)
-                             (text? . ("E" . 0))
-                             (complexity . trill)))
-                         (cis
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,bassoon-lh-cis-key-stencil)
-                             (text? . ("C" . 1))
-                             (complexity . trill)))
-                         (low-bes
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,bassoon-lh-lbes-key-stencil)
-                             (text? . ("b" . 0))
-                             (complexity . trill)))
-                         (low-b
-                          . ((offset . (-1.0 . -0.7))
-                             (stencil . ,bassoon-lh-lb-key-stencil)
-                             (text? . ("b" . #f))
-                             (complexity . trill)))
-                         (low-c
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,bassoon-lh-lc-key-stencil)
-                             (text? . ("c" . #f))
-                             (complexity . trill)))
-                         (low-d
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,bassoon-lh-ld-key-stencil)
-                             (text? . ("d" . #f))
-                             (complexity . trill)))
-                         (d
-                          . ((offset . (-1.5 . 2.0))
-                             (stencil . ,bassoon-lh-d-flick-key-stencil)
-                             (text? . ("D" . #f))
-                             (complexity . trill)))
-                         (c
-                          . ((offset . (-0.8 . 1.1))
-                             (stencil . ,bassoon-lh-c-flick-key-stencil)
-                             (text? . ("C" . #f))
-                             (complexity . trill)))
-                         (thumb-cis
-                          . ((offset . (2.0 . -1.0))
-                             (stencil . ,bassoon-lh-thumb-cis-key-stencil)
-                             (text? . ("C" . 1))
-                             (complexity . trill))))))
-           (right-hand
-            . ,(append (assoc-get 'right-hand-additional-keys
-                                  change-points)
-                       `((bes
-                          . ((offset . (0.0 . 0.8))
-                             (stencil . ,bassoon-rh-bes-key-stencil)
-                             (text? . ("B" . 0))
-                             (complexity . trill)))
-                         (f
-                          . ((offset . (-2.2 . 4.35))
-                             (stencil . ,bassoon-rh-f-key-stencil)
-                             (text? . ("F" . #f))
-                             (complexity . trill)))
-                         (fis
-                          . ((offset . (1.5 . 1.0))
-                             (stencil . ,bassoon-rh-fis-key-stencil)
-                             (text? . ("F" . 1))
-                             (complexity . trill)))
-                         (gis
-                          . ((offset . (0.0 . -0.15))
-                             (stencil . ,bassoon-rh-gis-key-stencil)
-                             (text? . ("G" . 1))
-                             (complexity . trill)))
-                         (thumb-bes
-                          . ((offset . (0.0 . 0.0))
-                             (stencil . ,bassoon-rh-thumb-bes-key-stencil)
-                             (text? . ("B" . 0))
-                             (complexity . trill)))
-                         (thumb-e
-                          . ((offset . (1.75 . 0.4))
-                             (stencil . ,bassoon-rh-thumb-e-key-stencil)
-                             (text? . ("E" . #f))
-                             (complexity . trill)))
-                         (thumb-fis
-                          . ((offset . (-1.0 . 1.6))
-                             (stencil . ,bassoon-rh-thumb-fis-key-stencil)
-                             (text? . ("F" . 1))
-                             (complexity . trill))))))))
-       (graphical-commands
-        . ((stencil-alist
-            . ((stencils
-                . ,(append (assoc-get 'right-hand-cis-key change-points)
-                           `(,(simple-stencil-alist '(hidden . midline)
-                                                    '(0.0 . 3.75))
-                             ,(simple-stencil-alist '(hidden . long-midline)
-                                                    '(0.0 . 3.80))
-                             ((stencils
-                               . ,(make-central-column-hole-addresses
+      ((change-points
+        (get-named-spreadsheet-column bassoon-name bassoon-change-points)))
+    `(,bassoon-name
+      . ((keys
+          . ((hidden
+              . ((midline
+                  .  ((offset . (0.0 . 0.0))
+                      (stencil . ,midline-stencil)
+                      (text? . #f)
+                      (complexity . basic)))
+                 (long-midline
+                  . ((offset . (0.0 . 0.0))
+                     (stencil . ,long-midline-stencil)
+                     (text? . #f)
+                     (complexity . basic)))))
+             (central-column
+              . ((one
+                  . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,bassoon-cc-one-key-stencil)
+                     (text? . #f)
+                     (complexity . trill)))
+                 (two
+                  . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (three
+                  . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (four
+                  . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (five
+                  . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))
+                 (six
+                  . ((offset . ,(assoc-get 'six CENTRAL-COLUMN-HOLE-PLACEMENTS))
+                     (stencil . ,ring-column-circle-stencil)
+                     (text? . #f)
+                     (complexity . ring)))))
+             (left-hand
+              . ,(append (assoc-get 'left-hand-additional-keys
+                                    change-points)
+                         `((high-e
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,bassoon-lh-he-key-stencil)
+                               (text? . ("hE" . #f))
+                               (complexity . trill)))
+                           (high-ees
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,bassoon-lh-hees-key-stencil)
+                               (text? . ("hE" . 0))
+                               (complexity . trill)))
+                           (ees
+                            . ((offset . (-1.0 . 1.0))
+                               (stencil . ,bassoon-lh-ees-key-stencil)
+                               (text? . ("E" . 0))
+                               (complexity . trill)))
+                           (cis
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,bassoon-lh-cis-key-stencil)
+                               (text? . ("C" . 1))
+                               (complexity . trill)))
+                           (low-bes
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,bassoon-lh-lbes-key-stencil)
+                               (text? . ("b" . 0))
+                               (complexity . trill)))
+                           (low-b
+                            . ((offset . (-1.0 . -0.7))
+                               (stencil . ,bassoon-lh-lb-key-stencil)
+                               (text? . ("b" . #f))
+                               (complexity . trill)))
+                           (low-c
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,bassoon-lh-lc-key-stencil)
+                               (text? . ("c" . #f))
+                               (complexity . trill)))
+                           (low-d
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,bassoon-lh-ld-key-stencil)
+                               (text? . ("d" . #f))
+                               (complexity . trill)))
+                           (d
+                            . ((offset . (-1.5 . 2.0))
+                               (stencil . ,bassoon-lh-d-flick-key-stencil)
+                               (text? . ("D" . #f))
+                               (complexity . trill)))
+                           (c
+                            . ((offset . (-0.8 . 1.1))
+                               (stencil . ,bassoon-lh-c-flick-key-stencil)
+                               (text? . ("C" . #f))
+                               (complexity . trill)))
+                           (thumb-cis
+                            . ((offset . (2.0 . -1.0))
+                               (stencil . ,bassoon-lh-thumb-cis-key-stencil)
+                               (text? . ("C" . 1))
+                               (complexity . trill))))))
+             (right-hand
+              . ,(append (assoc-get 'right-hand-additional-keys
+                                    change-points)
+                         `((bes
+                            . ((offset . (0.0 . 0.8))
+                               (stencil . ,bassoon-rh-bes-key-stencil)
+                               (text? . ("B" . 0))
+                               (complexity . trill)))
+                           (f
+                            . ((offset . (-2.2 . 4.35))
+                               (stencil . ,bassoon-rh-f-key-stencil)
+                               (text? . ("F" . #f))
+                               (complexity . trill)))
+                           (fis
+                            . ((offset . (1.5 . 1.0))
+                               (stencil . ,bassoon-rh-fis-key-stencil)
+                               (text? . ("F" . 1))
+                               (complexity . trill)))
+                           (gis
+                            . ((offset . (0.0 . -0.15))
+                               (stencil . ,bassoon-rh-gis-key-stencil)
+                               (text? . ("G" . 1))
+                               (complexity . trill)))
+                           (thumb-bes
+                            . ((offset . (0.0 . 0.0))
+                               (stencil . ,bassoon-rh-thumb-bes-key-stencil)
+                               (text? . ("B" . 0))
+                               (complexity . trill)))
+                           (thumb-e
+                            . ((offset . (1.75 . 0.4))
+                               (stencil . ,bassoon-rh-thumb-e-key-stencil)
+                               (text? . ("E" . #f))
+                               (complexity . trill)))
+                           (thumb-fis
+                            . ((offset . (-1.0 . 1.6))
+                               (stencil . ,bassoon-rh-thumb-fis-key-stencil)
+                               (text? . ("F" . 1))
+                               (complexity . trill))))))))
+         (graphical-commands
+          . ((stencil-alist
+              . ((stencils
+                  . ,(append (assoc-get 'right-hand-cis-key change-points)
+                             `(,(simple-stencil-alist '(hidden . midline)
+                                                      '(0.0 . 3.75))
+                               ,(simple-stencil-alist '(hidden . long-midline)
+                                                      '(0.0 . 3.80))
+                               ((stencils
+                                 . ,(make-central-column-hole-addresses
                                      CENTRAL-COLUMN-HOLE-LIST))
-                              (xy-scale-function . (,identity . ,identity))
-                              (textual? . #f)
-                              (offset . (0.0 . 0.0)))
-                             ,(simple-stencil-alist '(left-hand . high-e)
-                                                    '(-1.0 . 7.0))
-                             ,(simple-stencil-alist '(left-hand . high-ees)
-                                                    '(-1.0 . 6.0))
-                             ((stencils
-                               . ((left-hand . ees) (left-hand . cis)))
-                              (xy-scale-function . (,return-1 . ,return-1))
-                              (textual? . #f)
-                              (offset . (3.0 . 3.75)))
-                             ((stencils
-                               . (((stencils
-                                    . ((left-hand . low-b)
-                                       (left-hand . low-bes)))
-                                   (xy-scale-function
-                                    . (,return-1 . ,return-1))
-                                   (textual? . #f)
-                                   (offset . (-2.0 . 9.0)))
-                                  ((stencils
-                                    . ,(assoc-get 'left-hand-flick-group
-                                                  change-points))
-                                   (xy-scale-function
-                                    . (,return-1 . ,return-1))
-                                   (textual? . #f)
-                                   (offset . (3.0 . 7.0)))
-                                  ,(simple-stencil-alist '(left-hand . low-c)
-                                                         '(-1.0 . 4.5))
-                                  ,(simple-stencil-alist '(left-hand . low-d)
-                                                         '(-1.0 . 0.1))
-                                  ((stencils
-                                    . ,(assoc-get 'left-hand-thumb-group
-                                                  change-points))
-                                   (xy-scale-function
-                                    . (,return-1 . ,return-1))
-                                   (textual? . #f)
-                                   (offset . (1.5 . -0.6)))))
-                              (xy-scale-function . (,return-1 . ,return-1))
-                              (textual? . #f)
-                              (offset . (-5.5 . 4.7)))
-                             ,(simple-stencil-alist '(right-hand . bes)
-                                                    '(1.0 . 1.2))
-                             ((stencils
-                               . ,(make-right-hand-key-addresses '(gis f fis)))
-                              (xy-scale-function . (,return-1 . ,return-1))
-                              (textual? . #f)
-                              (offset . (2.0 . -1.25)))
-                             ((stencils
-                               . (((stencils
-                                    . ((right-hand . thumb-bes)
-                                       (right-hand . thumb-e)))
-                                   (xy-scale-function
-                                    . (,return-1 . ,return-1))
-                                   (textual? . #f)
-                                   (offset . (-1.22 . 5.25)))
-                                  ((stencils
-                                    . ,(assoc-get 'right-hand-lower-thumb-group
-                                                  change-points))
-                                   (xy-scale-function
-                                    . (,return-1 . ,return-1))
-                                   (textual? . #f)
-                                   (offset . (0.0 . 0.0)))))
-                              (xy-scale-function
-                               . (,return-1 . ,return-1))
-                              (textual? . #f)
-                              (offset . (-5.0 . 0.0))))))
-               (xy-scale-function . (,identity . ,identity))
-               (textual? . #f)
-               (offset . (0.0 . 0.0))))
-           (draw-instructions
-            . ((,apply-group-draw-rule-series
-                (,(make-left-hand-key-addresses '(ees cis))
-                 ,(make-left-hand-key-addresses
-                 (assoc-get 'back-left-hand-key-addresses change-points))
-                 ,(make-right-hand-key-addresses '(f fis gis))
-                 ,(make-right-hand-key-addresses
-                 (assoc-get 'back-right-hand-key-addresses change-points))))
-               (,group-automate-rule
-                ,(make-central-column-hole-addresses
-                  CENTRAL-COLUMN-HOLE-LIST))
-               (,bassoon-midline-rule
+                                (xy-scale-function . (,identity . ,identity))
+                                (textual? . #f)
+                                (offset . (0.0 . 0.0)))
+                               ,(simple-stencil-alist '(left-hand . high-e)
+                                                      '(-1.0 . 7.0))
+                               ,(simple-stencil-alist '(left-hand . high-ees)
+                                                      '(-1.0 . 6.0))
+                               ((stencils
+                                 . ((left-hand . ees) (left-hand . cis)))
+                                (xy-scale-function . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (3.0 . 3.75)))
+                               ((stencils
+                                 . (((stencils
+                                      . ((left-hand . low-b)
+                                         (left-hand . low-bes)))
+                                     (xy-scale-function
+                                      . (,return-1 . ,return-1))
+                                     (textual? . #f)
+                                     (offset . (-2.0 . 9.0)))
+                                    ((stencils
+                                      . ,(assoc-get 'left-hand-flick-group
+                                                    change-points))
+                                     (xy-scale-function
+                                      . (,return-1 . ,return-1))
+                                     (textual? . #f)
+                                     (offset . (3.0 . 7.0)))
+                                    ,(simple-stencil-alist '(left-hand . low-c)
+                                                           '(-1.0 . 4.5))
+                                    ,(simple-stencil-alist '(left-hand . low-d)
+                                                           '(-1.0 . 0.1))
+                                    ((stencils
+                                      . ,(assoc-get 'left-hand-thumb-group
+                                                    change-points))
+                                     (xy-scale-function
+                                      . (,return-1 . ,return-1))
+                                     (textual? . #f)
+                                     (offset . (1.5 . -0.6)))))
+                                (xy-scale-function . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (-5.5 . 4.7)))
+                               ,(simple-stencil-alist '(right-hand . bes)
+                                                      '(1.0 . 1.2))
+                               ((stencils
+                                 . ,(make-right-hand-key-addresses '(gis f fis)))
+                                (xy-scale-function . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (2.0 . -1.25)))
+                               ((stencils
+                                 . (((stencils
+                                      . ((right-hand . thumb-bes)
+                                         (right-hand . thumb-e)))
+                                     (xy-scale-function
+                                      . (,return-1 . ,return-1))
+                                     (textual? . #f)
+                                     (offset . (-1.22 . 5.25)))
+                                    ((stencils
+                                      . ,(assoc-get 'right-hand-lower-thumb-group
+                                                    change-points))
+                                     (xy-scale-function
+                                      . (,return-1 . ,return-1))
+                                     (textual? . #f)
+                                     (offset . (0.0 . 0.0)))))
+                                (xy-scale-function
+                                 . (,return-1 . ,return-1))
+                                (textual? . #f)
+                                (offset . (-5.0 . 0.0))))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ((,apply-group-draw-rule-series
+                  (,(make-left-hand-key-addresses '(ees cis))
+                   ,(make-left-hand-key-addresses
+                     (assoc-get 'back-left-hand-key-addresses change-points))
+                   ,(make-right-hand-key-addresses '(f fis gis))
+                   ,(make-right-hand-key-addresses
+                     (assoc-get 'back-right-hand-key-addresses change-points))))
+                 (,group-automate-rule
+                  ,(make-central-column-hole-addresses
+                    CENTRAL-COLUMN-HOLE-LIST))
+                 (,bassoon-midline-rule
                   ,(append
-                     (make-left-hand-key-addresses
-                       (assoc-get 'back-left-hand-key-addresses change-points))
-                     (make-right-hand-key-addresses
-                        (assoc-get 'back-right-hand-key-addresses
-                                   change-points))))))
-           (extra-offset-instructions
-            . ,(append
-                 (assoc-get 'cis-offset-instruction change-points)
-                 `((,uniform-extra-offset-rule (0.0 . 0.0)))))))
-       (text-commands
-        . ((stencil-alist
-            . ((stencils
-                . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
-                   ((stencils
-                     . ,(make-central-column-hole-addresses
-                         CENTRAL-COLUMN-HOLE-LIST))
-                    (xy-scale-function . (,identity . ,identity))
-                    (textual? . #f)
-                    (offset . (0.0 . 0.0)))
-                   ((stencils
-                     . ,(make-left-hand-key-addresses
+                    (make-left-hand-key-addresses
+                     (assoc-get 'back-left-hand-key-addresses change-points))
+                    (make-right-hand-key-addresses
+                     (assoc-get 'back-right-hand-key-addresses
+                                change-points))))))
+             (extra-offset-instructions
+              . ,(append
+                  (assoc-get 'cis-offset-instruction change-points)
+                  `((,uniform-extra-offset-rule (0.0 . 0.0)))))))
+         (text-commands
+          . ((stencil-alist
+              . ((stencils
+                  . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
+                     ((stencils
+                       . ,(make-central-column-hole-addresses
+                           CENTRAL-COLUMN-HOLE-LIST))
+                      (xy-scale-function . (,identity . ,identity))
+                      (textual? . #f)
+                      (offset . (0.0 . 0.0)))
+                     ((stencils
+                       . ,(make-left-hand-key-addresses
                            '(high-e high-ees ees cis)))
-                    (textual? . ,lh-woodwind-text-stencil)
-                    (offset . (1.5 . 3.75)))
-                   ((stencils
-                     . ,(make-left-hand-key-addresses
-                          (assoc-get 'back-left-hand-key-addresses
-                                     change-points)))
-                    (textual? . ,rh-woodwind-text-stencil)
-                    (offset . (-1.25 . 3.75)))
-                   ((stencils
-                     . ,(make-right-hand-key-addresses
-                          (assoc-get 'front-right-hand-key-addresses
-                                     change-points)))
-                    (textual? . ,lh-woodwind-text-stencil)
-                    (offset . (1.5 . 0.0)))
-                   ((stencils .
-                     ,(make-right-hand-key-addresses
-                       (assoc-get 'back-right-hand-key-addresses
-                                  change-points)))
-                    (textual? . ,rh-woodwind-text-stencil)
-                    (offset . (-1.25 . 0.0)))))
-               (xy-scale-function . (,identity . ,identity))
-               (textual? . #f)
-               (offset . (0.0 . 0.0))))
-           (draw-instructions
-            . ((,apply-group-draw-rule-series
-                 (,(make-left-hand-key-addresses
+                      (textual? . ,lh-woodwind-text-stencil)
+                      (offset . (1.5 . 3.75)))
+                     ((stencils
+                       . ,(make-left-hand-key-addresses
+                           (assoc-get 'back-left-hand-key-addresses
+                                      change-points)))
+                      (textual? . ,rh-woodwind-text-stencil)
+                      (offset . (-1.25 . 3.75)))
+                     ((stencils
+                       . ,(make-right-hand-key-addresses
+                           (assoc-get 'front-right-hand-key-addresses
+                                      change-points)))
+                      (textual? . ,lh-woodwind-text-stencil)
+                      (offset . (1.5 . 0.0)))
+                     ((stencils .
+                                ,(make-right-hand-key-addresses
+                                  (assoc-get 'back-right-hand-key-addresses
+                                             change-points)))
+                      (textual? . ,rh-woodwind-text-stencil)
+                      (offset . (-1.25 . 0.0)))))
+                 (xy-scale-function . (,identity . ,identity))
+                 (textual? . #f)
+                 (offset . (0.0 . 0.0))))
+             (draw-instructions
+              . ((,apply-group-draw-rule-series
+                  (,(make-left-hand-key-addresses
                      (assoc-get 'back-left-hand-key-addresses change-points))
-                  ,(make-right-hand-key-addresses
+                   ,(make-right-hand-key-addresses
                      (assoc-get 'front-right-hand-key-addresses change-points))
-                  ,(make-right-hand-key-addresses
-                      (assoc-get 'back-right-hand-key-addresses change-points))
-                  ,(make-left-hand-key-addresses '(high-e high-ees ees cis))))
-               (,group-automate-rule
-                 ,(make-central-column-hole-addresses
-                     CENTRAL-COLUMN-HOLE-LIST))
-               (,group-automate-rule ((hidden . midline)))))
-           (extra-offset-instructions
-            . ((,uniform-extra-offset-rule (0.0 . 0.0))))))))))
+                   ,(make-right-hand-key-addresses
+                     (assoc-get 'back-right-hand-key-addresses change-points))
+                   ,(make-left-hand-key-addresses '(high-e high-ees ees cis))))
+                 (,group-automate-rule
+                  ,(make-central-column-hole-addresses
+                    CENTRAL-COLUMN-HOLE-LIST))
+                 (,group-automate-rule ((hidden . midline)))))
+             (extra-offset-instructions
+              . ((,uniform-extra-offset-rule (0.0 . 0.0))))))))))
 
 ;; Assembly functions
 
-; Scans a bank for name.
-; for example, '(left-hand . bes) will return bes in the left-hand
-; of a given bank
+;; Scans a bank for name.
+;; for example, '(left-hand . bes) will return bes in the left-hand
+;; of a given bank
 (define (get-key name bank)
   (assoc-get (cdr name) (assoc-get (car name) bank)))
 
 (define (translate-key-instruction key-instruction)
   (let*
-    ((key-name (car key-instruction))
-    (key-complexity (assoc-get 'complexity (cdr key-instruction))))
-   (cond
-    ((eqv? key-complexity 'basic)
+      ((key-name (car key-instruction))
+       (key-complexity (assoc-get 'complexity (cdr key-instruction))))
+    (cond
+     ((eqv? key-complexity 'basic)
       `((,key-name . ,(assoc-get 'F HOLE-FILL-LIST))))
-    ((eqv? key-complexity 'trill)
-       (make-symbol-alist key-name #t #f))
-    ((eqv? key-complexity 'covered)
-       (make-symbol-alist key-name #f #f))
-    ((eqv? key-complexity 'ring)
-       (make-symbol-alist key-name #f #t)))))
+     ((eqv? key-complexity 'trill)
+      (make-symbol-alist key-name #t #f))
+     ((eqv? key-complexity 'covered)
+      (make-symbol-alist key-name #f #f))
+     ((eqv? key-complexity 'ring)
+      (make-symbol-alist key-name #f #t)))))
 
 (define (update-possb-list input-key possibility-list canonic-list)
   (if (null? possibility-list)
-    (ly:error "woodwind markup error - invalid key or hole requested")
-    (if
-      (assoc-get input-key (cdar possibility-list))
-      (append
+      (ly:error "woodwind markup error - invalid key or hole requested")
+      (if
+       (assoc-get input-key (cdar possibility-list))
+       (append
         `(((,(caaar possibility-list) .
             ,(assoc-get input-key (cdar possibility-list))) .
-           ,(assoc-get (caar possibility-list) canonic-list)))
-          (assoc-remove (caar possibility-list) canonic-list))
-      (update-possb-list input-key (cdr possibility-list) canonic-list))))
+            ,(assoc-get (caar possibility-list) canonic-list)))
+        (alist-delete (caar possibility-list) canonic-list))
+       (update-possb-list input-key (cdr possibility-list) canonic-list))))
 
 (define (key-crawler input-list possibility-list)
   (if (null? input-list)
-    (map car possibility-list)
-    (key-crawler
-      (cdr input-list)
-      (update-possb-list
+      (map car possibility-list)
+      (key-crawler
+       (cdr input-list)
+       (update-possb-list
         (car input-list)
         possibility-list
         possibility-list))))
 
 (define (translate-draw-instructions input-alist key-name-alist)
-  (apply append
-    (map (lambda (short long)
-           (let*
-             ((key-instructions
-               (map (lambda (instr)
-                      `(((,long . ,(car instr)) . 0)
-                        . ,(translate-key-instruction instr)))
-                    (assoc-get long key-name-alist))))
-            (key-crawler (assoc-get short input-alist) key-instructions)))
-         '(hd cc lh rh)
-         '(hidden central-column left-hand right-hand))))
+  (append-map (lambda (short long)
+                (let*
+                    ((key-instructions
+                      (map (lambda (instr)
+                             `(((,long . ,(car instr)) . 0)
+                               . ,(translate-key-instruction instr)))
+                           (assoc-get long key-name-alist))))
+                  (key-crawler (assoc-get short input-alist) key-instructions)))
+              '(hd cc lh rh)
+              '(hidden central-column left-hand right-hand)))
 
 (define (uniform-draw-instructions key-name-alist)
-    (apply append
-      (map (lambda (long)
-             (map (lambda (key-instructions)
-                    `((,long . ,(car key-instructions)) . 1))
-                  (assoc-get long key-name-alist)))
-           '(hidden central-column left-hand right-hand))))
+  (append-map (lambda (long)
+                (map (lambda (key-instructions)
+                       `((,long . ,(car key-instructions)) . 1))
+                     (assoc-get long key-name-alist)))
+              '(hidden central-column left-hand right-hand)))
 
 (define (list-all-possible-keys key-name-alist)
   (map (lambda (short long)
 
 (define
   (assemble-stencils
-    stencil-alist
-    key-bank
-    draw-instructions
-    extra-offset-instructions
-    radius
-    thick
-    xy-stretch
-    layout
-    props)
+   stencil-alist
+   key-bank
+   draw-instructions
+   extra-offset-instructions
+   radius
+   thick
+   xy-stretch
+   layout
+   props)
   (apply
-    ly:stencil-add
-    (map (lambda (node)
-           (ly:stencil-translate
-             (if (pair? (cdr node))
-                 (if (assoc-get 'textual? node)
-                     ((assoc-get 'textual? node) (map (lambda (key)
-                                                        (assoc-get 'text? key))
-                                                      (map (lambda (instr)
-                                                             (get-key
-                                                               instr
-                                                               key-bank))
-                                                 (assoc-get 'stencils node)))
-                                                 radius
-                                                 (map (lambda (key)
-                                                        (assoc-get
-                                                          key
-                                                          draw-instructions))
-                                                      (assoc-get 'stencils
-                                                                 node))
-                                                 layout
-                                                 props)
-                     (assemble-stencils
-                       node
-                       key-bank
-                       draw-instructions
-                       extra-offset-instructions
-                       radius
-                       thick
-                       (coord-apply (assoc-get 'xy-scale-function stencil-alist)
-                                    xy-stretch)
-                       layout
-                       props))
+   ly:stencil-add
+   (map (lambda (node)
+          (ly:stencil-translate
+           (if (pair? (cdr node))
+               (if (assoc-get 'textual? node)
+                   ((assoc-get 'textual? node) (map (lambda (key)
+                                                      (assoc-get 'text? key))
+                                                    (map (lambda (instr)
+                                                           (get-key
+                                                            instr
+                                                            key-bank))
+                                                         (assoc-get 'stencils node)))
+                    radius
+                    (map (lambda (key)
+                           (assoc-get
+                            key
+                            draw-instructions))
+                         (assoc-get 'stencils
+                                    node))
+                    layout
+                    props)
+                   (assemble-stencils
+                    node
+                    key-bank
+                    draw-instructions
+                    extra-offset-instructions
+                    radius
+                    thick
+                    (coord-apply (assoc-get 'xy-scale-function stencil-alist)
+                                 xy-stretch)
+                    layout
+                    props))
                (if (= 0 (assoc-get node draw-instructions))
                    empty-stencil
                    ((assoc-get 'stencil (get-key node key-bank))
-                     radius
-                     thick
-                     (assoc-get node draw-instructions)
-                     layout
-                     props)))
+                    radius
+                    thick
+                    (assoc-get node draw-instructions)
+                    layout
+                    props)))
+           (coord-scale
+            (coord-translate
              (coord-scale
-               (coord-translate
-                 (coord-scale
-                   (assoc-get
-                     'offset
-                     (if (pair? (cdr node))
-                       node
-                       (get-key node key-bank)))
-                   (coord-apply
-                     (assoc-get 'xy-scale-function stencil-alist)
-                     xy-stretch))
-                 (if
-                   (assoc-get node extra-offset-instructions)
-                   (assoc-get node extra-offset-instructions)
-                   '(0.0 . 0.0)))
-               radius)))
-         (assoc-get 'stencils stencil-alist))))
+              (assoc-get
+               'offset
+               (if (pair? (cdr node))
+                   node
+                   (get-key node key-bank)))
+              (coord-apply
+               (assoc-get 'xy-scale-function stencil-alist)
+               xy-stretch))
+             (if
+              (assoc-get node extra-offset-instructions)
+              (assoc-get node extra-offset-instructions)
+              '(0.0 . 0.0)))
+            radius)))
+        (assoc-get 'stencils stencil-alist))))
 
 (define*-public (print-keys instrument #:optional (port (current-output-port)))
   (format port "\nPrinting keys for: ~a\n" instrument)
   (let ((chosen-instrument (assoc-get instrument woodwind-data-alist)))
-    (do        ((key-list
-         (list-all-possible-keys (assoc-get 'keys chosen-instrument))
-         (cdr key-list)))
-       ((null? key-list))
+    (do ((key-list
+          (list-all-possible-keys (assoc-get 'keys chosen-instrument))
+          (cdr key-list)))
+        ((null? key-list))
       (format port "~a\n   ~a\n" (caar key-list) (cdar key-list)))))
 
 (define-public (get-woodwind-key-list instrument)
   (list-all-possible-keys-verbose
-    (assoc-get
-      'keys
-      (assoc-get instrument woodwind-data-alist))))
+   (assoc-get
+    'keys
+    (assoc-get instrument woodwind-data-alist))))
 
 (define*-public (print-keys-verbose instrument
-                                   #:optional (port (current-output-port)))
+                                    #:optional (port (current-output-port)))
   (format port "\nPrinting keys in verbose mode for: ~a\n" instrument)
   (do ((key-list (get-woodwind-key-list instrument)
-                (cdr key-list)))
+                 (cdr key-list)))
       ((null? key-list))
     (format port "~a\n" (caar key-list))
     (for-each
@@ -1945,35 +1943,35 @@ a diagram with all of the keys drawn but none filled, for example:
           (xy-stretch `(1.0 . 2.5))
           (chosen-instrument (assoc-get instrument woodwind-data-alist))
           (chosen-instrument
-            (if (not chosen-instrument)
-                (ly:error "~a is not a valid woodwind instrument."
-                          instrument)
-                chosen-instrument))
+           (if (not chosen-instrument)
+               (ly:error "~a is not a valid woodwind instrument."
+                         instrument)
+               chosen-instrument))
           (stencil-info
-            (assoc-get
-              (if display-graphic 'graphical-commands 'text-commands)
-              chosen-instrument))
+           (assoc-get
+            (if display-graphic 'graphical-commands 'text-commands)
+            chosen-instrument))
           (pressed-info
-            (if (null? user-draw-commands)
-                (uniform-draw-instructions (assoc-get 'keys chosen-instrument))
-                (translate-draw-instructions
-                  (append '((hd . ())) user-draw-commands)
-                  (assoc-get 'keys chosen-instrument))))
+           (if (null? user-draw-commands)
+               (uniform-draw-instructions (assoc-get 'keys chosen-instrument))
+               (translate-draw-instructions
+                (append '((hd . ())) user-draw-commands)
+                (assoc-get 'keys chosen-instrument))))
           (draw-info
-            (function-chain
-              pressed-info
-              (assoc-get 'draw-instructions stencil-info)))
+           (function-chain
+            pressed-info
+            (assoc-get 'draw-instructions stencil-info)))
           (extra-offset-info
-            (function-chain
-              pressed-info
-              (assoc-get 'extra-offset-instructions stencil-info))))
+           (function-chain
+            pressed-info
+            (assoc-get 'extra-offset-instructions stencil-info))))
     (assemble-stencils
-      (assoc-get 'stencil-alist stencil-info)
-      (assoc-get 'keys chosen-instrument)
-      draw-info
-      extra-offset-info
-      radius
-      thick
-      xy-stretch
-      layout
-      props)))
+     (assoc-get 'stencil-alist stencil-info)
+     (assoc-get 'keys chosen-instrument)
+     draw-info
+     extra-offset-info
+     radius
+     thick
+     xy-stretch
+     layout
+     props)))
index 71ba5a274fa616c3bbf111fab909af2f0eab4657..c1288deff52bc03e8bfad40e62de628bdd8d23c1 100644 (file)
 
 ;; properly sort all grobs, properties, and interfaces
 ;; within the all-grob-descriptions alist
-(map
 (lambda (x)
-    (let* ((props      (assoc-ref all-grob-descriptions (car x)))
-           (meta       (assoc-ref props 'meta))
-           (interfaces (assoc-ref meta 'interfaces)))
-      (set! all-grob-descriptions
-        (sort (assoc-set! all-grob-descriptions (car x)
-               (sort-grob-properties
-                (assoc-set! props 'meta
-                 (assoc-set! meta 'interfaces
-                  (sort interfaces ly:symbol-ci<?)))))
-              ly:alist-ci<?))))
 all-grob-descriptions)
+(for-each
+ (lambda (x)
+   (let* ((props      (assoc-ref all-grob-descriptions (car x)))
+          (meta       (assoc-ref props 'meta))
+          (interfaces (assoc-ref meta 'interfaces)))
+     (set! all-grob-descriptions
+           (sort (assoc-set! all-grob-descriptions (car x)
+                             (sort-grob-properties
+                              (assoc-set! props 'meta
+                                          (assoc-set! meta 'interfaces
+                                                      (sort interfaces ly:symbol-ci<?)))))
+                 ly:alist-ci<?))))
+ all-grob-descriptions)
 
 (define (interface-doc-string interface grob-description)
   (let* ((name (car interface))
-        (desc (cadr interface))
-        (props (caddr interface))
-        (docfunc (lambda (pr)
-                   (property->texi
-                    'backend pr grob-description)))
-        (iprops (filter (lambda (x) (object-property x 'backend-internal))
-                        props))
-        (uprops (filter
-                 (lambda (x) (not (object-property x 'backend-internal)))
-                 props))
-        (user-propdocs (map docfunc uprops))
-        (internal-propdocs (map docfunc iprops)))
+         (desc (cadr interface))
+         (props (caddr interface))
+         (docfunc (lambda (pr)
+                    (property->texi
+                     'backend pr grob-description)))
+         (iprops (filter (lambda (x) (object-property x 'backend-internal))
+                         props))
+         (uprops (filter
+                  (lambda (x) (not (object-property x 'backend-internal)))
+                  props))
+         (user-propdocs (map docfunc uprops))
+         (internal-propdocs (map docfunc iprops)))
 
     (string-append
      desc
 
      (if (pair? uprops)
-        (string-append
-         "\n\n@subsubheading User settable properties:\n"
-         (description-list->texi user-propdocs #t))
-        "")
+         (string-append
+          "\n\n@subsubheading User settable properties:\n"
+          (description-list->texi user-propdocs #t))
+         "")
 
      (if (pair? iprops)
-        (string-append
-         "\n\n@subsubheading Internal properties:\n"
-         (description-list->texi internal-propdocs #t))
-        ""))))
+         (string-append
+          "\n\n@subsubheading Internal properties:\n"
+          (description-list->texi internal-propdocs #t))
+         ""))))
 
 (define iface->grob-table (make-hash-table 61))
 ;; extract ifaces, and put grob into the hash table.
-(map
+(for-each
  (lambda (x)
    (let* ((meta (assoc-get 'meta (cdr x)))
-         (ifaces (assoc-get 'interfaces meta)))
-
-     (map (lambda (iface)
-           (hashq-set!
-            iface->grob-table iface
-            (cons (car x)
-                  (hashq-ref iface->grob-table iface '()))))
-         ifaces)))
+          (ifaces (assoc-get 'interfaces meta)))
+
+     (for-each (lambda (iface)
+                 (hashq-set!
+                  iface->grob-table iface
+                  (cons (car x)
+                        (hashq-ref iface->grob-table iface '()))))
+               ifaces)))
  all-grob-descriptions)
 
 ;; First level Interface description
 (define (interface-doc interface)
   (let* ((name (symbol->string (car interface)))
-        (interface-list (human-listify
-                         (map ref-ify
-                              (sort
-                               (map symbol->string
-                                    (hashq-ref iface->grob-table
-                                               (car interface)
-                                               '()))
-                               ly:string-ci<?)))))
+         (interface-list (human-listify
+                          (map ref-ify
+                               (sort
+                                (map symbol->string
+                                     (hashq-ref iface->grob-table
+                                                (car interface)
+                                                '()))
+                                ly:string-ci<?)))))
     (make <texi-node>
       #:name name
       #:text (string-append
-             (interface-doc-string (cdr interface) '())
-             "\n\n"
-             "This grob interface "
-             (if (equal? interface-list "none")
-                 "is not used in any graphical object"
-                 (string-append
-                  "is used in the following graphical object(s): "
-                  interface-list))
-             "."))))
+              (interface-doc-string (cdr interface) '())
+              "\n\n"
+              "This grob interface "
+              (if (equal? interface-list "none")
+                  "is not used in any graphical object"
+                  (string-append
+                   "is used in the following graphical object(s): "
+                   interface-list))
+              "."))))
 
 (define (grob-alist->texi alist)
   (let* ((uprops (filter (lambda (x) (not (object-property x 'backend-internal)))
-                        (map car alist))))
+                         (map car alist))))
 
     (description-list->texi
      (map (lambda (y) (property->texi 'backend y alist))
-         uprops)
+          uprops)
      #t)))
 
 (define (grob-doc description)
 node."
 
   (let* ((meta (assoc-get 'meta description))
-        (name (assoc-get 'name meta))
-        ;;       (bla (display name))
-        (ifaces (map lookup-interface (assoc-get 'interfaces meta)))
-        (ifacedoc (map ref-ify
-                       (sort
-                        (map (lambda (iface)
-                               (if (pair? iface)
-                                   (symbol->string (car iface))
-                                   (ly:error (_ "pair expected in doc ~s") name)))
-                             ifaces)
-                        ly:string-ci<?)))
-        (engravers (filter
-                    (lambda (x) (engraver-makes-grob? name x))
-                    all-engravers-list))
-        (namestr (symbol->string name))
-        (engraver-names (map symbol->string
-                             (map ly:translator-name engravers)))
-        (engraver-list (human-listify
-                        (map ref-ify
-                             (map engraver-name engraver-names)))))
+         (name (assoc-get 'name meta))
+         ;;       (bla (display name))
+         (ifaces (map lookup-interface (assoc-get 'interfaces meta)))
+         (ifacedoc (map ref-ify
+                        (sort
+                         (map (lambda (iface)
+                                (if (pair? iface)
+                                    (symbol->string (car iface))
+                                    (ly:error (_ "pair expected in doc ~s") name)))
+                              ifaces)
+                         ly:string-ci<?)))
+         (engravers (filter
+                     (lambda (x) (engraver-makes-grob? name x))
+                     all-engravers-list))
+         (namestr (symbol->string name))
+         (engraver-names (map symbol->string
+                              (map ly:translator-name engravers)))
+         (engraver-list (human-listify
+                         (map ref-ify
+                              (map engraver-name engraver-names)))))
 
     (make <texi-node>
       #:name namestr
@@ -148,10 +148,10 @@ node."
       (string-append
        namestr " objects "
        (if (equal? engraver-list "none")
-          "are not created by any engraver"
-          (string-append
-           "are created by: "
-           engraver-list))
+           "are not created by any engraver"
+           (string-append
+            "are created by: "
+            engraver-list))
        "."
 
        "\n\nStandard settings:\n\n"
@@ -174,29 +174,29 @@ node."
    '() (ly:all-grob-interfaces)))
 
 (set! interface-description-alist
-  (sort interface-description-alist ly:alist-ci<?))
+      (sort interface-description-alist ly:alist-ci<?))
 
 ;;;;;;;;;; check for dangling backend properties.
 (define (mark-interface-properties entry)
-  (map (lambda (x) (set-object-property! x 'iface-marked #t))
-       (caddr (cdr entry))))
+  (for-each (lambda (x) (set-object-property! x 'iface-marked #t))
+            (caddr (cdr entry))))
 
-(map mark-interface-properties interface-description-alist)
+(for-each mark-interface-properties interface-description-alist)
 
 (define (check-dangling-properties prop)
   (if (not (object-property prop 'iface-marked))
       (ly:error (string-append "define-grob-properties.scm: "
-               (_ "cannot find interface for property: ~S")) prop)))
+                               (_ "cannot find interface for property: ~S")) prop)))
 
-(map check-dangling-properties all-backend-properties)
+(for-each check-dangling-properties all-backend-properties)
 
 ;;;;;;;;;;;;;;;;
 
 (define (lookup-interface name)
   (let* ((entry (hashq-ref (ly:all-grob-interfaces) name #f)))
     (if entry
-       entry
-       (ly:error (_ "unknown Grob interface: ~S") name))))
+        entry
+        (ly:error (_ "unknown Grob interface: ~S") name))))
 
 (define (all-interfaces-doc)
   (make <texi-node>
@@ -207,9 +207,9 @@ node."
 
 (define (backend-properties-doc-string lst)
   (let* ((ps (sort (map symbol->string lst) ly:string-ci<?))
-        (descs (map (lambda (prop)
-                      (property->texi 'backend (string->symbol prop) '())) ps))
-        (texi (description-list->texi descs #f)))
+         (descs (map (lambda (prop)
+                       (property->texi 'backend (string->symbol prop) '())) ps))
+         (texi (description-list->texi descs #f)))
     texi))
 
 ;;(dump-node (grob-doc (cdadr all-grob-descriptions)) (current-output-port) 0 )
index d115389a1f9329c84487d2d3f2bae6d6306c8ade..f5034d2ecc10129e8603ea52eeaf94157234bc41 100644 (file)
 "
      name-sym
      name-sym
-     (if (pair? docstring) 
-         (cadar docstring) 
+     (if (pair? docstring)
+         (cadar docstring)
          (begin
            (ly:warning "context modification `~a' not documented." name-sym)
            "(undocumented; fixme)"))
      (map document-mod-list mod-list))))
 
 (define (document-mod obj-pair)
-  (cond
-   ((ly:context-mod? (cdr obj-pair))
-    (document-context-mod obj-pair))
-   (else
-    #f)))
+  (and (ly:context-mod? (cdr obj-pair))
+       (document-context-mod obj-pair)))
 
 (define context-mods-doc-string
   (format
 @end table
 "
    (string-join
-    (filter
-     identity
-     (map
-      document-mod
-      (sort
-       (ly:module->alist (current-module))
-       identifier<?)))
-    "")))
+    (filter-map
+     document-mod
+     (sort
+      (ly:module->alist (current-module))
+      identifier<?)))
+   ""))
index 1fdabaeacf2dc90ab5cbea8c64de6e1b91b7ad6e..2102f640e0f80ad6255be2c5a0e5fffd1c7ada86 100644 (file)
  (ice-9 regex))
 
 (define (dashify-underscores str)
-   (regexp-substitute/global #f "_" str 'pre "-" 'post))
+  (regexp-substitute/global #f "_" str 'pre "-" 'post))
 
 (define (format-c-header c-h)
   (regexp-substitute/global
-   #f "," 
+   #f ","
    (regexp-substitute/global #f "(SCM|\\)|\\() *" (dashify-underscores c-h)
-                            'pre "" 'post)
+                             'pre "" 'post)
    'pre " " 'post))
 
 (define (document-scheme-function name c-header doc-string)
    "\n@end defun\n\n"))
 
 (define all-scheme-functions
-   (hash-fold
-    (lambda (key val prior)
-      (cons (cons key val)  prior))
-    '() (ly:get-all-function-documentation)))
+  (hash-fold
+   (lambda (key val prior)
+     (cons (cons key val)  prior))
+   '() (ly:get-all-function-documentation)))
 
 (define (all-scheme-functions-doc)
   (let* ((fdocs (map (lambda (x)
-                      (document-scheme-function (car x) (cadr x) (cddr x)))
-                    all-scheme-functions))
-        (sfdocs (sort fdocs ly:string-ci<?)))
+                       (document-scheme-function (car x) (cadr x) (cddr x)))
+                     all-scheme-functions))
+         (sfdocs (sort fdocs ly:string-ci<?)))
     (make <texi-node>
       #:name "Scheme functions"
       #:desc "Primitive functions exported by LilyPond."
       #:text
-      (apply string-append sfdocs))))
+      (string-concatenate sfdocs))))
 
 ;; (dump-node (all-scheme-functions-doc)  (current-output-port) 0 )
index fcd8f932146181b6dc016eac3d1b9d04fbbd1796..22088605d70f7fbaa1df1d9c27ccc4fb21d51b58 100644 (file)
        (music-func (cdr music-func-pair))
        (func (ly:music-function-extract music-func))
        (arg-names
-       (map symbol->string
-            (cddr (cadr (procedure-source func)))))
+        (map symbol->string
+             (cddr (cadr (procedure-source func)))))
        (doc (procedure-documentation func))
        (sign (ly:music-function-signature music-func))
        (type-names (map (lambda (pred)
-                         (if (pair? pred)
-                             (format #f "[~a]" (type-name (car pred)))
-                             (format #f "(~a)" (type-name pred))))
-                       sign))
+                          (if (pair? pred)
+                              (format #f "[~a]" (type-name (car pred)))
+                              (format #f "(~a)" (type-name pred))))
+                        sign))
        (signature-str
-       (string-join
-        (map (lambda (arg type) (format #f "@var{~a} ~a" arg type))
-             arg-names (cdr type-names)))))
+        (string-join
+         (map (lambda (arg type) (format #f "@var{~a} ~a" arg type))
+              arg-names (cdr type-names)))))
     (format #f
-     "@item @code{~a} ~a ~a~a
+            "@item @code{~a} ~a ~a~a
 @funindex ~a
 ~a
 "
-     name-sym (car type-names)
-     (if (equal? "" signature-str) "" " - ") signature-str
-     name-sym
-     (if doc
-         doc
-         (begin
-           (ly:warning "music function `~a' not documented." name-sym)
-           "(undocumented; fixme)")))))
+            name-sym (car type-names)
+            (if (string-null? signature-str) "" " - ") signature-str
+            name-sym
+            (if doc
+                doc
+                (begin
+                  (ly:warning "music function `~a' not documented." name-sym)
+                  "(undocumented; fixme)")))))
 
 
 (define (document-object obj-pair)
-  (cond
-   ((ly:music-function? (cdr obj-pair))
-    (document-music-function obj-pair))
-   (else
-    #f)))
+  (and (ly:music-function? (cdr obj-pair))
+       (document-music-function obj-pair)))
 
 (define-public (identifiers-doc-string)
   (format #f
-   "@table @asis
+          "@table @asis
 ~a
 @end table
 "
-   (string-join
-    (filter
-     identity
-     (map
-      document-object
-      (sort
-       (ly:module->alist (current-module))
-       identifier<?)))
-    "")))
+          (string-join
+           (filter-map
+            document-object
+            (sort
+             (ly:module->alist (current-module))
+             identifier<?)))
+          ""))
index 41b6f61f1baca92695c01187cce0d748016f51f7..54c987b9bbdb6aa0c8b4fc89890c24647468c591 100644 (file)
                              "@var{" (car x) "} ("  (cadr x) ")" ))
                 (zip arg-names  sig-type-names))
            " " )))
-    
+
     (string-append
      "\n\n@item @code{\\" c-name "} " signature-str
      "\n@funindex \\" c-name "\n"
-     "\n@cindex \\" c-name "\n"    
+     "\n@cindex \\" c-name "\n"
      (if (string? doc-str)
          doc-str
          "")
        (if (null? prop-strings)
            "\n"
            (string-append "\n\n\nUsed properties:\n@itemize\n"
-                          (apply string-append prop-strings)
+                          (string-concatenate prop-strings)
                           "@end itemize\n"))))))
 
 (define (markup-function<? a b)
   (ly:string-ci<? (symbol->string (procedure-name a)) (symbol->string (procedure-name b))))
+
 (define (markup-category-doc-node category)
   (let* ((category-string (symbol->string category))
-         (category-name (string-capitalize (regexp-substitute/global #f
-                                        "-" category-string 'pre " " 'post)))
-        (markup-functions (hash-fold (lambda (markup-function dummy functions)
-                                      (cons markup-function functions))
-                                    '()
-                                    (hashq-ref markup-functions-by-category
-                                               category))))
+         (category-name (string-capitalize
+                         (regexp-substitute/global
+                          #f "-" category-string 'pre " " 'post)))
+         (markup-functions (hash-fold (lambda (markup-function dummy functions)
+                                        (cons markup-function functions))
+                                      '()
+                                      (hashq-ref markup-functions-by-category
+                                                 category))))
     (make <texi-node>
       #:appendix #t
       #:name category-name
       #:desc ""
       #:text (string-append
               "@table @asis"
-              (apply string-append
-                     (map doc-markup-function
-                          (sort markup-functions markup-function<?)))
+              (string-concatenate
+               (map doc-markup-function
+                    (sort markup-functions markup-function<?)))
               "\n@end table"))))
 
 (define (markup-doc-node)
     #:desc ""
     #:text "The following commands can all be used inside @code{\\markup @{ @}}."
     #:children (let* (;; when a new category is defined, update `ordered-categories'
-                      (ordered-categories '(font align graphic music instrument-specific-markup other))
+                      (ordered-categories '(font align graphic music instrument-specific-markup accordion-registers other))
                       (raw-categories (hash-fold (lambda (category functions categories)
                                                    (cons category categories))
                                                  (list)
 (define (markup-list-doc-string)
   (string-append
    "@table @asis"
-   (apply string-append
-         (map doc-markup-function
-              (sort (hash-fold (lambda (markup-list-function dummy functions)
-                                 (cons markup-list-function functions))
-                               '()
-                               markup-list-functions)
-                    markup-function<?)))
+   (string-concatenate
+    (map doc-markup-function
+         (sort (hash-fold (lambda (markup-list-function dummy functions)
+                            (cons markup-list-function functions))
+                          '()
+                          markup-list-functions)
+               markup-function<?)))
    "\n@end table"))
-
-
index 7d7e2a9942b974169b722eb2ec39b2e33200c390..0badbf899e14880b59b93ae85be57dc1ea6b060a 100644 (file)
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-(define doc-context (ly:make-global-context $defaultlayout))
-
 (define (music-props-doc)
   (make <texi-node>
     #:name "Music properties"
     #:desc "All music properties, including descriptions."
     #:text
     (let* ((ps (sort (map symbol->string all-music-properties) ly:string-ci<?))
-          (descs (map (lambda (prop)
-                        (property->texi 'music (string->symbol prop)))
-                      ps))
-          (texi (description-list->texi descs #f)))
+           (descs (map (lambda (prop)
+                         (property->texi 'music (string->symbol prop)))
+                       ps))
+           (texi (description-list->texi descs #f)))
       texi)))
 
 (define music-types->names (make-hash-table 61))
-(filter-map (lambda (entry)
-             (let* ((class (ly:camel-case->lisp-identifier (car entry)))
-                    (classes (ly:make-event-class doc-context class)))
-               (if classes
-                   (map
-                    (lambda (cl)
-                      (hashq-set! music-types->names cl
-                                  (cons (car entry)
-                                        (hashq-ref music-types->names cl '()))))
-                    classes)
-                   #f)))
-       
-           music-descriptions)
+
+(for-each (lambda (entry)
+            (let* ((class (ly:camel-case->lisp-identifier (car entry)))
+                   (classes (ly:make-event-class class)))
+              (if classes
+                  (for-each
+                   (lambda (cl)
+                     (hashq-set! music-types->names cl
+                                 (cons (car entry)
+                                       (hashq-ref music-types->names cl '()))))
+                   classes))))
+          music-descriptions)
 
 (define (strip-description x)
   (cons (symbol->string (car x))
-       ""))
+        ""))
 
 (define (music-type-doc entry)
   (let* ((accept-list (human-listify
-                      (map ref-ify
-                           (map symbol->string
-                                (map ly:translator-name
-                                     (filter
-                                      (lambda (x)
-                                        (engraver-accepts-music-type? (car entry) x))
-                                      all-engravers-list)))))))
+                       (map ref-ify
+                            (map symbol->string
+                                 (map ly:translator-name
+                                      (filter
+                                       (lambda (x)
+                                         (engraver-accepts-music-type? (car entry) x))
+                                       all-engravers-list)))))))
     (make <texi-node>
       #:name (symbol->string (car entry))
       #:text
        (symbol->string (car entry))
        "} is in music objects of type "
        (human-listify
-       (map ref-ify (sort (map symbol->string (cdr entry))
-                          ly:string-ci<?)))
+        (map ref-ify (sort (map symbol->string (cdr entry))
+                           ly:string-ci<?)))
        "."
 
        "\n\n"
        (if (equal? accept-list "none")
-          "Not accepted by any engraver or performer"
-          (string-append
-           "Accepted by: "
-           accept-list))
+           "Not accepted by any engraver or performer"
+           (string-append
+            "Accepted by: "
+            accept-list))
        "."))))
 
 (define (music-types-doc)
     #:name "Music classes"
     #:children
     (map music-type-doc
-        (sort
-         (hash-table->alist music-types->names) ly:alist-ci<?))))
+         (sort
+          (hash-table->alist music-types->names) ly:alist-ci<?))))
 
 (define (music-doc-str obj)
   (let* ((namesym  (car obj))
-        (props (cdr obj))
-        (class (ly:camel-case->lisp-identifier namesym))
-        (classes (ly:make-event-class doc-context class))
-        (accept-list (if classes
-                         (human-listify
-                          (map ref-ify
-                               (map symbol->string
-                                    (map ly:translator-name
-                                         (filter
-                                          (lambda (x)
-                                            (engraver-accepts-music-types? classes x))
-                                          all-engravers-list)))))
-                         ""))
-        (event-texi (if classes
-                        (string-append
-                         "\n\nEvent classes:\n"
-                         (human-listify
-                          (map ref-ify (sort (map symbol->string classes)
-                                             ly:string-ci<?)))
-                         "."
+         (props (cdr obj))
+         (class (ly:camel-case->lisp-identifier namesym))
+         (classes (ly:make-event-class class))
+         (accept-list (if classes
+                          (human-listify
+                           (map ref-ify
+                                (map symbol->string
+                                     (map ly:translator-name
+                                          (filter
+                                           (lambda (x)
+                                             (engraver-accepts-music-types? classes x))
+                                           all-engravers-list)))))
+                          ""))
+         (event-texi (if classes
+                         (string-append
+                          "\n\nEvent classes:\n"
+                          (human-listify
+                           (map ref-ify (sort (map symbol->string classes)
+                                              ly:string-ci<?)))
+                          "."
 
-                         "\n\n"
-                         (if (equal? accept-list "none")
-                             "Not accepted by any engraver or performer"
-                             (string-append
-                              "Accepted by: "
-                              accept-list))
-                         ".")
-                        "")))
+                          "\n\n"
+                          (if (equal? accept-list "none")
+                              "Not accepted by any engraver or performer"
+                              (string-append
+                               "Accepted by: "
+                               accept-list))
+                          ".")
+                         "")))
 
     (string-append
      (object-property namesym 'music-description)
index 00b22be7a31ebc0640486a95653c2e7df610ae31..5e867bb4c24bfc84193a90a41ca300522043d689 100644 (file)
 
 (define (engraver-doc-string engraver in-which-contexts)
   (let* ((propsr (assoc-get 'properties-read (ly:translator-description engraver)))
-        (propsw (assoc-get 'properties-written (ly:translator-description engraver)))
-        (accepted  (assoc-get 'events-accepted (ly:translator-description engraver)))
-        (name-sym  (ly:translator-name engraver))
-        (name-str (symbol->string name-sym))
-        (desc (assoc-get 'description (ly:translator-description engraver)))
-        (grobs (engraver-grobs engraver)))
+         (propsw (assoc-get 'properties-written (ly:translator-description engraver)))
+         (accepted  (assoc-get 'events-accepted (ly:translator-description engraver)))
+         (name-sym  (ly:translator-name engraver))
+         (name-str (symbol->string name-sym))
+         (desc (assoc-get 'description (ly:translator-description engraver)))
+         (grobs (engraver-grobs engraver)))
 
     (string-append
      desc
      "\n\n"
      (if (pair? accepted)
-        (string-append
-         "Music types accepted:\n\n"
-         (human-listify
-          (map ref-ify (sort (map symbol->string accepted) ly:string-ci<?))))
-        "")
+         (string-append
+          "Music types accepted:\n\n"
+          (human-listify
+           (map ref-ify (sort (map symbol->string accepted) ly:string-ci<?))))
+         "")
      "\n\n"
      (if (pair? propsr)
-        (string-append
-         "Properties (read)"
-         (description-list->texi
-          (map (lambda (x) (property->texi 'translation x '()))
-               (sort propsr ly:symbol-ci<?))
-          #t))
-        "")
+         (string-append
+          "Properties (read)"
+          (description-list->texi
+           (map (lambda (x) (property->texi 'translation x '()))
+                (sort propsr ly:symbol-ci<?))
+           #t))
+         "")
 
      (if (null? propsw)
-        ""
-        (string-append
-         "Properties (write)"
-         (description-list->texi
-          (map (lambda (x) (property->texi 'translation x '()))
-               (sort propsw ly:symbol-ci<?))
-          #t)))
+         ""
+         (string-append
+          "Properties (write)"
+          (description-list->texi
+           (map (lambda (x) (property->texi 'translation x '()))
+                (sort propsw ly:symbol-ci<?))
+           #t)))
      (if  (null? grobs)
-         ""
-         (string-append
-          "\n\nThis engraver creates the following layout object(s):\n\n"
-          (human-listify (map ref-ify (uniq-list (sort grobs ly:string-ci<?))))
-          "."))
+          ""
+          (string-append
+           "\n\nThis engraver creates the following layout object(s):\n\n"
+           (human-listify (map ref-ify (uniq-list (sort grobs ly:string-ci<?))))
+           "."))
 
      "\n\n"
 
      (if in-which-contexts
-        (let* ((layout-alist (ly:output-description $defaultlayout))
-               (context-description-alist (map cdr layout-alist))
-               (contexts
-                (apply append
-                       (map
-                        (lambda (x)
-                          (let* ((context (assoc-get 'context-name x))
-                                 (group (assq-ref x 'group-type))
-                                 (consists (append
-                                            (if group
-                                                (list group)
-                                                '())
-                                            (assoc-get 'consists x))))
-                            (if (member name-sym consists)
-                                (list context)
-                                '())))
-                        context-description-alist)))
-               (context-list (human-listify (map ref-ify
-                                                 (sort
-                                                  (map symbol->string contexts)
-                                                  ly:string-ci<?)))))
-          (string-append
-           "@code{" name-str "} "
-           (if (equal? context-list "none")
-               "is not part of any context"
-               (string-append
-                "is part of the following context(s): "
-                context-list))
-           "."))
-        ""))))
+         (let* ((layout-alist (ly:output-description $defaultlayout))
+                (context-description-alist (map cdr layout-alist))
+                (contexts
+                 (append-map
+                  (lambda (x)
+                    (let* ((context (assoc-get 'context-name x))
+                           (group (assq-ref x 'group-type))
+                           (consists (append
+                                      (if group
+                                          (list group)
+                                          '())
+                                      (assoc-get 'consists x))))
+                      (if (member name-sym consists)
+                          (list context)
+                          '())))
+                  context-description-alist))
+                (context-list (human-listify (map ref-ify
+                                                  (sort
+                                                   (map symbol->string contexts)
+                                                   ly:string-ci<?)))))
+           (string-append
+            "@code{" name-str "} "
+            (if (equal? context-list "none")
+                "is not part of any context"
+                (string-append
+                 "is part of the following context(s): "
+                 context-list))
+            "."))
+         ""))))
 
 ;; First level Engraver description
 (define (engraver-doc grav)
 
 ;; Second level, part of Context description
 (define name->engraver-table (make-hash-table 61))
-(map
+(for-each
  (lambda (x)
    (hash-set! name->engraver-table (ly:translator-name x) x))
  (ly:get-all-translators))
   (let* ((eg (find-engraver-by-name name)))
 
     (cons (string-append "@code{" (ref-ify (symbol->string name)) "}")
-         (engraver-doc-string eg #f))))
+          (engraver-doc-string eg #f))))
 
 (define (document-property-operation op)
   (let ((tag (car op))
-       (context-sym (cadr op))
-       (args (cddr op))
-       )
+        (context-sym (cadr op))
+        (args (cddr op))
+        )
 
     (cond
      ((equal?  tag 'push)
       (let*
-         ((value (car args))
-          (path (cdr args)))
-
-      (string-append
-       "@item Set "
-       (format #f "grob-property @code{~a} "
-              (string-join (map symbol->string path) " "))
-       (format #f "in @ref{~a} to ~a."
-              context-sym (scm->texi value))
-       "\n")))
+          ((value (car args))
+           (path (cdr args)))
+
+        (string-append
+         "@item Set "
+         (format #f "grob-property @code{~a} "
+                 (string-join (map symbol->string path) " "))
+         (format #f "in @ref{~a} to ~a."
+                 context-sym (scm->texi value))
+         "\n")))
      ((equal? (object-property context-sym 'is-grob?) #t) "")
      ((equal? tag 'assign)
       (format #f "@item Set translator property @code{~a} to ~a.\n"
-             context-sym
-             (scm->texi (car args))))
+              context-sym
+              (scm->texi (car args))))
      )))
 
 
 (define (context-doc context-desc)
   (let* ((name-sym (assoc-get 'context-name context-desc))
-        (name (symbol->string name-sym))
-        (aliases (map symbol->string (assoc-get 'aliases context-desc)))
-        (desc (assoc-get 'description context-desc "(not documented"))
-        (accepts (assoc-get 'accepts context-desc))
-        (consists (assoc-get 'consists context-desc))
-        (props (assoc-get 'property-ops context-desc))
-        (grobs  (context-grobs context-desc))
-        (grob-refs (map ref-ify (sort grobs ly:string-ci<?))))
+         (name (symbol->string name-sym))
+         (aliases (map symbol->string (assoc-get 'aliases context-desc)))
+         (desc (assoc-get 'description context-desc "(not documented"))
+         (accepts (assoc-get 'accepts context-desc))
+         (consists (assoc-get 'consists context-desc))
+         (props (assoc-get 'property-ops context-desc))
+         (grobs  (context-grobs context-desc))
+         (grob-refs (map ref-ify (sort grobs ly:string-ci<?))))
 
     (make <texi-node>
       #:name name
       (string-append
        desc
        (if (pair? aliases)
-          (string-append
-           "\n\nThis context also accepts commands for the following context(s):\n\n"
-           (human-listify (sort aliases ly:string-ci<?))
-           ".")
-          "")
+           (string-append
+            "\n\nThis context also accepts commands for the following context(s):\n\n"
+            (human-listify (sort aliases ly:string-ci<?))
+            ".")
+           "")
 
        "\n\nThis context creates the following layout object(s):\n\n"
        (human-listify (uniq-list grob-refs))
        "."
 
        (if (and (pair? props) (not (null? props)))
-          (let ((str (apply string-append
-                            (sort (map document-property-operation props)
-                                  ly:string-ci<?))))
-            (if (string-null? str)
-                ""
-                (string-append
-                 "\n\nThis context sets the following properties:\n\n"
-                 "@itemize @bullet\n"
-                 str
-                 "@end itemize\n")))
-          "")
+           (let ((str (string-concatenate
+                       (sort (map document-property-operation props)
+                             ly:string-ci<?))))
+             (if (string-null? str)
+                 ""
+                 (string-append
+                  "\n\nThis context sets the following properties:\n\n"
+                  "@itemize @bullet\n"
+                  str
+                  "@end itemize\n")))
+           "")
 
        (if (null? accepts)
-          "\n\nThis context is a `bottom' context; it cannot contain other contexts."
-          (string-append
-           "\n\nContext "
-           name
-           " can contain\n"
-           (human-listify (map ref-ify (sort (map symbol->string accepts)
-                                             ly:string-ci<?)))
-           "."))
+           "\n\nThis context is a `bottom' context; it cannot contain other contexts."
+           (string-append
+            "\n\nContext "
+            name
+            " can contain\n"
+            (human-listify (map ref-ify (sort (map symbol->string accepts)
+                                              ly:string-ci<?)))
+            "."))
 
        (if (null? consists)
-          ""
-          (string-append
-           "\n\nThis context is built from the following engraver(s):"
-           (description-list->texi
-            (map document-engraver-by-name (sort consists ly:symbol-ci<?))
-            #t)))))))
+           ""
+           (string-append
+            "\n\nThis context is built from the following engraver(s):"
+            (description-list->texi
+             (map document-engraver-by-name (sort consists ly:symbol-ci<?))
+             #t)))))))
 
 (define (engraver-grobs grav)
   (let* ((eg (if (symbol? grav)
-                (find-engraver-by-name grav)
-                grav)))
+                 (find-engraver-by-name grav)
+                 grav)))
     (if (eq? eg #f)
-       '()
-       (map symbol->string (assoc-get 'grobs-created (ly:translator-description eg))))))
+        '()
+        (map symbol->string (assoc-get 'grobs-created (ly:translator-description eg))))))
 
 (define (context-grobs context-desc)
   (let* ((group (assq-ref context-desc 'group-type))
-        (consists (append
-                   (if group
-                       (list group)
-                       '())
-                   (assoc-get 'consists context-desc)))
-        (grobs  (apply append
-                       (map engraver-grobs consists))))
+         (consists (append
+                    (if group
+                        (list group)
+                        '())
+                    (assoc-get 'consists context-desc)))
+         (grobs (append-map engraver-grobs consists)))
     grobs))
 
 (define (all-contexts-doc)
   (let* ((layout-alist
-         (sort (ly:output-description $defaultlayout)
-               (lambda (x y) (ly:symbol-ci<? (car x) (car y)))))
-        (names (sort (map symbol->string (map car layout-alist)) ly:string-ci<?))
-        (contexts (map cdr layout-alist)))
+          (sort (ly:output-description $defaultlayout)
+                (lambda (x y) (ly:symbol-ci<? (car x) (car y)))))
+         (names (sort (map symbol->string (map car layout-alist)) ly:string-ci<?))
+         (contexts (map cdr layout-alist)))
 
     (make <texi-node>
       #:name "Contexts"
 (define all-engravers-list  (ly:get-all-translators))
 (set! all-engravers-list
       (sort all-engravers-list
-           (lambda (a b) (ly:string-ci<? (symbol->string (ly:translator-name a))
-                                   (symbol->string (ly:translator-name b))))))
+            (lambda (a b) (ly:string-ci<? (symbol->string (ly:translator-name a))
+                                          (symbol->string (ly:translator-name b))))))
 
 (define (all-engravers-doc)
   (make <texi-node>
 
 (define (translation-properties-doc-string lst)
   (let* ((ps (sort (map symbol->string lst) ly:string-ci<?))
-        (sortedsyms (map string->symbol ps))
-        (propdescs
-         (map
-          (lambda (x) (property->texi 'translation  x '()))
-          sortedsyms))
-        (texi (description-list->texi propdescs #f)))
+         (sortedsyms (map string->symbol ps))
+         (propdescs
+          (map
+           (lambda (x) (property->texi 'translation  x '()))
+           sortedsyms))
+         (texi (description-list->texi propdescs #f)))
     texi))
 
 (define (translation-doc-node)
        #:name "Tunable context properties"
        #:desc "All tunable context properties."
        #:text (translation-properties-doc-string
-              all-user-translation-properties))
+               all-user-translation-properties))
 
      (make <texi-node>
        #:name "Internal context properties"
        #:desc "All internal context properties."
        #:text (translation-properties-doc-string
-              all-internal-translation-properties)))))
+               all-internal-translation-properties)))))
index e6cff904c3ab95890ff54010d4acbddc369227c4..2e94f2c3f869ed35f13bc53ea102306999fcf6e5 100644 (file)
@@ -40,9 +40,9 @@
    "\n"
    "@multitable @columnfractions .33 .66\n"
    "@headitem Type predicate @tab Description\n"
-   (apply string-append
-          (sort (map document-type-predicate alist)
-                ly:string-ci<?))
+   (string-concatenate
+    (sort (map document-type-predicate alist)
+          ly:string-ci<?))
    "@end multitable\n"
    "\n"))
 
@@ -56,8 +56,7 @@
    "* LilyPond exported predicates::\n"
    "@end menu\n"
    "\n"
-   (apply
-    string-append
+   (string-concatenate
     (map
      (lambda (alist-nodename-list)
        (apply document-type-predicate-category
index 88016c92ae3a95a84cde8211a35a18384fb8044a..d65d0edab7ad7fc969aa99b477c1a0dd9427c763 100644 (file)
 
 ;; todo: naming: grob vs. layout property
 
-(map ly:load '("documentation-lib.scm"
-              "lily-sort.scm"
-              "document-functions.scm"
-              "document-translation.scm"
-              "document-music.scm"
-              "document-type-predicates.scm"
-              "document-identifiers.scm"
-              "document-context-mods.scm"
-              "document-backend.scm"
-              "document-markup.scm"))
+(use-modules (scm accreg))
+
+(for-each ly:load '("documentation-lib.scm"
+                    "lily-sort.scm"
+                    "document-functions.scm"
+                    "document-translation.scm"
+                    "document-music.scm"
+                    "document-type-predicates.scm"
+                    "document-identifiers.scm"
+                    "document-context-mods.scm"
+                    "document-backend.scm"
+                    "document-markup.scm"))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
@@ -97,7 +99,7 @@
 (display
  (string-append
   (texi-file-head "LilyPond Internals Reference" file-name
-                 "(lilypond-internals.info)")
+                  "(lilypond-internals.info)")
   "
 
 @include macros.itexi
@@ -156,8 +158,8 @@ This document is also available as a
 @end ifhtml
 
 This is the Internals Reference (IR) for version "
-                   (lilypond-version)
-                   " of LilyPond, the GNU music typesetter.")
+                    (lilypond-version)
+                    " of LilyPond, the GNU music typesetter.")
 
     #:children
     (list
index 182f5812721f34be60a59df1a74bb966fa5f64cc..a0981945869823034d5c09434231923cde62d3db 100644 (file)
@@ -17,8 +17,8 @@
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
 (use-modules (oop goops)
-            (srfi srfi-13)
-            (srfi srfi-1))
+             (srfi srfi-13)
+             (srfi srfi-1))
 
 (define-class <texi-node> ()
   (appendix #:init-value #f #:accessor appendix? #:init-keyword #:appendix)
     (node-text node)
     "\n\n"
     (if (pair? (node-children node))
-       (texi-menu
-        (map (lambda (x) (menu-entry x))
-             (node-children node)))
-       ""))
+        (texi-menu
+         (map (lambda (x) (menu-entry x))
+              (node-children node)))
+        ""))
    port)
-  (map (lambda (x) (dump-node x port (+ 1 level)))
-       (node-children node)))
+  (for-each (lambda (x) (dump-node x port (+ 1 level)))
+            (node-children node)))
 
 (define (processing name)
   (ly:basic-progress (_ "Processing ~S...") name))
 
 (define (texi-section-command level)
   (assoc-get level '(
-                    ;; Hmm, texinfo doesn't have ``part''
-                    (0 . "@top")
-                    (1 . "@chapter")
-                    (2 . "@section")
-                    (3 . "@subsection")
-                    (4 . "@unnumberedsubsubsec")
-                    (5 . "@unnumberedsubsubsec"))))
+                     ;; Hmm, texinfo doesn't have ``part''
+                     (0 . "@top")
+                     (1 . "@chapter")
+                     (2 . "@section")
+                     (3 . "@subsection")
+                     (4 . "@unnumberedsubsubsec")
+                     (5 . "@unnumberedsubsubsec"))))
 
 (define (texi-appendix-section-command level)
   (assoc-get level '((0 . "@top")
-                    (1 . "@appendix")
-                    (2 . "@appendixsec")
-                    (3 . "@appendixsubsec")
-                    (4 . "@appendixsubsubsec")
-                    (5 . "@appendixsubsubsec"))))
+                     (1 . "@appendix")
+                     (2 . "@appendixsec")
+                     (3 . "@appendixsubsec")
+                     (4 . "@appendixsubsubsec")
+                     (5 . "@appendixsubsubsec"))))
 
 (define (one-item->texi label-desc-pair)
   "Document one (LABEL . DESC); return empty string if LABEL is empty string."
@@ -101,7 +101,7 @@ string-to-use).  If QUOTE? is #t, embed table in a @quotation environment."
    "\n"
    (if quote? "@quotation\n" "")
    "@table @asis\n"
-   (apply string-append (map one-item->texi items-alist))
+   (string-concatenate (map one-item->texi items-alist))
    "\n"
    "@end table\n"
    (if quote? "@end quotation\n" "")))
@@ -109,25 +109,25 @@ string-to-use).  If QUOTE? is #t, embed table in a @quotation environment."
 (define (texi-menu items-alist)
   "Generate what is between @menu and @end menu."
   (let ((maxwid
-        (apply max (map (lambda (x) (string-length (car x))) items-alist))))
+         (apply max (map (lambda (x) (string-length (car x))) items-alist))))
 
     (string-append
      "\n@menu"
-     (apply string-append
-           (map (lambda (x)
-                  (string-append
-                   (string-pad-right
-                    (string-append "\n* " (car x) ":: ")
-                    (+ maxwid 8))
-                   (cdr x)))
-                items-alist))
+     (string-concatenate
+      (map (lambda (x)
+             (string-append
+              (string-pad-right
+               (string-append "\n* " (car x) ":: ")
+               (+ maxwid 8))
+              (cdr x)))
+           items-alist))
      "\n@end menu\n"
      ;; Menus don't appear in html, so we make a list ourselves
      "\n@ignore\n"
      "\n@ifhtml\n"
      (description-list->texi (map (lambda (x) (cons (ref-ify (car x)) (cdr x)))
-                                 items-alist)
-                            #t)
+                                  items-alist)
+                             #t)
      "\n@end ifhtml\n"
      "\n@end ignore\n")))
 
@@ -195,27 +195,26 @@ string-to-use).  If QUOTE? is #t, embed table in a @quotation environment."
 with init values from ALIST (1st optional argument)
 "
   (let* ((name (symbol->string sym))
-        (alist (if (pair? rest) (car rest) '()))
-        (type?-name (string->symbol
-                     (string-append (symbol->string where) "-type?")))
-        (doc-name (string->symbol
-                   (string-append (symbol->string where) "-doc")))
-        (type (object-property sym type?-name))
-        (typename (verify-type-name where sym type))
-        (desc (object-property sym doc-name))
-        (init-value (assoc-get sym alist)))
+         (alist (if (pair? rest) (car rest) '()))
+         (type?-name (string->symbol
+                      (string-append (symbol->string where) "-type?")))
+         (doc-name (string->symbol
+                    (string-append (symbol->string where) "-doc")))
+         (type (object-property sym type?-name))
+         (typename (verify-type-name where sym type))
+         (desc (object-property sym doc-name))
+         (init-value (assoc-get sym alist)))
 
     (if (eq? desc #f)
-       (ly:error (_ "cannot find description for property ~S (~S)") sym where))
+        (ly:error (_ "cannot find description for property ~S (~S)") sym where))
 
     (cons
      (string-append "@code{" name "} "
-                   "(" typename ")"
-                   (if init-value
-                       (string-append
-                        ":\n\n"
-                        (scm->texi init-value)
-                        "\n\n")
-                       ""))
+                    "(" typename ")"
+                    (if init-value
+                        (string-append
+                         ":\n\n"
+                         (scm->texi init-value)
+                         "\n\n")
+                        ""))
      desc)))
-
index 66c3709fb2b2bdedf6337226470aa385aba14ad3..e474a557e5fa494d16c958801f14f509cd510be4 100644 (file)
@@ -36,9 +36,9 @@
       ;; FIXME: how are default/preferred editors specified on
       ;; different platforms?
       (case PLATFORM
-       ((windows) "lilypad")
-       (else
-        "emacs"))))
+        ((windows) "lilypad")
+        (else
+         "emacs"))))
 
 (define editor-command-template-alist
   '(("emacs" .  "emacsclient --no-wait +%(line)s:%(column)s %(file)s || (emacs +%(line)s:%(column)s %(file)s&)")
 (define (get-command-template alist editor)
   (define (get-command-template-helper)
     (if (null? alist)
-       (if (string-match "%\\(file\\)s" editor)
-           editor
-           (string-append editor " %(file)s"))
-       (if (string-match (caar alist) editor)
-           (cdar alist)
-           (get-command-template (cdr alist) editor))))
+        (if (string-match "%\\(file\\)s" editor)
+            editor
+            (string-append editor " %(file)s"))
+        (if (string-match (caar alist) editor)
+            (cdar alist)
+            (get-command-template (cdr alist) editor))))
   (if (string-match "%\\(file\\)s" editor)
       editor
       (get-command-template-helper)))
   (regexp-substitute/global #f re string 'pre sub 'post))
 
 (define (slashify x)
- (if (string-index x #\/)
-     x
-     (re-sub "\\\\" "/" x)))
 (if (string-index x #\/)
+      x
+      (re-sub "\\\\" "/" x)))
 
 (define-public (get-editor-command file-name line char column)
   (let* ((editor (get-editor))
-        (template (get-command-template editor-command-template-alist editor))
-        (command
-         (re-sub "%\\(file\\)s" (format #f "~S" file-name)
-                 (re-sub "%\\(line\\)s" (format #f "~a" line)
-                         (re-sub "%\\(char\\)s" (format #f "~a" char)
-                                 (re-sub
-                                  "%\\(column\\)s" (format #f "~a" column)
-                                  (slashify template)))))))
+         (template (get-command-template editor-command-template-alist editor))
+         (command
+          (re-sub "%\\(file\\)s" (format #f "~S" file-name)
+                  (re-sub "%\\(line\\)s" (format #f "~a" line)
+                          (re-sub "%\\(char\\)s" (format #f "~a" char)
+                                  (re-sub
+                                   "%\\(column\\)s" (format #f "~a" column)
+                                   (slashify template)))))))
     command))
index 1868e7600f03b8fefce121ca759e927f2bff05a3..aaeed727b18f493297b2c63dd1b39a515a743904 100644 (file)
 
 (define-public latin1-coding-vector
   #(.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef
-    .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef
-    .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef
-    .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef
-    %% 0x20
-    space exclam quotedbl numbersign dollar percent ampersand quoteright
-    parenleft parenright asterisk plus comma hyphen period slash
-    zero one two three four five six seven
-    eight nine colon semicolon less equal greater question
-    %% 0x40
-    at A B C D E F G
-    H I J K L M N O
-    P Q R S T U V W
-    X Y Z bracketleft backslash bracketright asciicircum underscore
-    %% 0x60
-    `quoteleft a b c d e f g
-    h i j k l m n o
-    p q r s t u v w
-    x y z braceleft bar braceright asciitilde .notdef
-    %% 0x80
-    .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef
-    .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef
-    dotlessi grave acute circumflex tilde macron breve dotaccent
-    dieresis .notdef ring cedilla .notdef hungarumlaut ogonek caron
-    %% 0xA0
-    space exclamdown cent sterling currency yen brokenbar section
-    dieresis copyright ordfeminine guillemotleft logicalnot hyphen registered macron
-    degree plusminus twosuperior threesuperior acute mu paragraph periodcentered
-    cedilla onesuperior ordmasculine guillemotright onequarter onehalf threequarters questiondown
-    %% 0xC0
-    Agrave Aacute Acircumflex Atilde Adieresis Aring AE Ccedilla
-    Egrave Eacute Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis
-    Eth Ntilde Ograve Oacute Ocircumflex Otilde Odieresis multiply
-    Oslash Ugrave Uacute Ucircumflex Udieresis Yacute Thorn germandbls
-    %% 0xE0
-    agrave aacute acircumflex atilde adieresis aring ae ccedilla
-    egrave eacute ecircumflex edieresis igrave iacute icircumflex idieresis
-    eth ntilde ograve oacute ocircumflex otilde odieresis divide
-    oslash ugrave uacute ucircumflex udieresis yacute thorn ydieresis))
+            .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef
+            .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef
+            .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef
+            %% 0x20
+            space exclam quotedbl numbersign dollar percent ampersand quoteright
+            parenleft parenright asterisk plus comma hyphen period slash
+            zero one two three four five six seven
+            eight nine colon semicolon less equal greater question
+            %% 0x40
+            at A B C D E F G
+            H I J K L M N O
+            P Q R S T U V W
+            X Y Z bracketleft backslash bracketright asciicircum underscore
+            %% 0x60
+            `quoteleft a b c d e f g
+            h i j k l m n o
+            p q r s t u v w
+            x y z braceleft bar braceright asciitilde .notdef
+            %% 0x80
+            .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef
+            .notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef
+            dotlessi grave acute circumflex tilde macron breve dotaccent
+            dieresis .notdef ring cedilla .notdef hungarumlaut ogonek caron
+            %% 0xA0
+            space exclamdown cent sterling currency yen brokenbar section
+            dieresis copyright ordfeminine guillemotleft logicalnot hyphen registered macron
+            degree plusminus twosuperior threesuperior acute mu paragraph periodcentered
+            cedilla onesuperior ordmasculine guillemotright onequarter onehalf threequarters questiondown
+            %% 0xC0
+            Agrave Aacute Acircumflex Atilde Adieresis Aring AE Ccedilla
+            Egrave Eacute Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis
+            Eth Ntilde Ograve Oacute Ocircumflex Otilde Odieresis multiply
+            Oslash Ugrave Uacute Ucircumflex Udieresis Yacute Thorn germandbls
+            %% 0xE0
+            agrave aacute acircumflex atilde adieresis aring ae ccedilla
+            egrave eacute ecircumflex edieresis igrave iacute icircumflex idieresis
+            eth ntilde ograve oacute ocircumflex otilde odieresis divide
+            oslash ugrave uacute ucircumflex udieresis yacute thorn ydieresis))
 
 
 (define-public (decode-byte-string str)
 assuming that @var{str} is byte-coded using latin-1 encoding."
 
   (let* ((len (string-length str))
-        (output-vector (make-vector len '.notdef)))
+         (output-vector (make-vector len '.notdef)))
     (do
-       ((idx 0 (1+ idx)))
-       ((>= idx len) output-vector)
+        ((idx 0 (1+ idx)))
+        ((>= idx len) output-vector)
       (vector-set! output-vector idx
-                  (vector-ref latin1-coding-vector
-                              (char->integer (string-ref str idx)))))))
+                   (vector-ref latin1-coding-vector
+                               (char->integer (string-ref str idx)))))))
index 221a6e28379f76670499aef9e40731c653c1c2ee..21db866eb83f15a4153f603270319cdadfbecc0a 100644 (file)
@@ -22,7 +22,7 @@
       ((contents (hash-ref cache-hash-tab filename #f)))
 
     (if (not (string? contents))
-       (begin
-         (set! contents (ly:gulp-file filename))
-         (hash-set! cache-hash-tab filename contents)))
+        (begin
+          (set! contents (ly:gulp-file filename))
+          (hash-set! cache-hash-tab filename contents)))
     contents))
index 23ff235201fb1f20920b48022adc925123758906..59495ba40b884f33968a7f526f592a42bb590dc9 100644 (file)
@@ -16,7 +16,8 @@
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;;;  This file implements different flag styles in Scheme / GUILE, most
-;;;;  notably the old-straight-flag and the modern-straight-flag styles.
+;;;;  notably the old-straight-flag, the modern-straight-flag and the flat-flag
+;;;;  styles.
 
 
 (define-public (no-flag grob)
@@ -33,8 +34,8 @@
                                     offset length thickness stroke-thickness)
   "Add the stroke for acciaccatura to the given flag stencil.
 The stroke starts for up-flags at `upper-end-of-flag + (0,length/2)'
-and ends at `(0, vertical-center-of-flag-end) -
-(flag-x-width/2, flag-x-width + flag-thickness)'.  Here `length' is the
+and ends at `(0, vertical-center-of-flag-end) - (flag-x-width/2,
+flag-x-width + flag-thickness)'.  Here `length' is the
 whole length, while `flag-x-width' is just the x-extent and thus depends on
 the angle!  Other combinations don't look as good.
 
@@ -44,7 +45,7 @@ For down-stems the y-coordinates are simply mirrored."
          (end (offset-add (cons 0 (cdr offset))
                           (cons (- (/ (car offset) 2)) (* (- (+ thickness (car offset))) dir))))
          (stroke (make-line-stencil stroke-thickness (car start) (cdr start) (car end) (cdr end))))
-  (ly:stencil-add stencil stroke)))
+    (ly:stencil-add stencil stroke)))
 
 (define (buildflag flag-stencil remain curr-stencil spacing)
   "Internal function to recursively create a stencil with @code{remain} flags
@@ -72,7 +73,7 @@ All lengths are scaled according to the font size of the note."
            (dir (ly:grob-property stem-grob 'direction))
            (stem-up (eqv? dir UP))
            (layout (ly:grob-layout grob))
-           ; scale with the note size (e.g. for grace notes)
+           ;; scale with the note size (e.g. for grace notes)
            (factor (magstep (ly:grob-property grob 'font-size 0)))
            (grob-stem-thickness (ly:grob-property stem-grob 'thickness))
            (line-thickness (ly:output-def-lookup layout 'line-thickness))
@@ -80,32 +81,38 @@ All lengths are scaled according to the font size of the note."
            (raw-length (if stem-up upflag-length downflag-length))
            (angle (if stem-up upflag-angle downflag-angle))
            (flag-length (+ (* raw-length factor) half-stem-thickness))
-           (flag-end (polar->rectangular flag-length angle))
+           ;; For flat flags the points to create the stencil using
+           ;; ly:round-filled-polygon need to be different concerning flag-end
+           (flag-end (if (= angle 0)
+                         (cons flag-length (* half-stem-thickness dir))
+                         (polar->rectangular flag-length angle)))
            (thickness (* flag-thickness factor))
            (thickness-offset (cons 0 (* -1 thickness dir)))
            (spacing (* -1 flag-spacing factor dir ))
            (start (cons (- half-stem-thickness) (* half-stem-thickness dir)))
-           ; The points of a round-filled-polygon need to be given in clockwise
-           ; order, otherwise the polygon will be enlarged by blot-size*2!
-           (points (if stem-up (list start flag-end
-                                     (offset-add flag-end thickness-offset)
-                                     (offset-add start thickness-offset))
-                               (list start
-                                     (offset-add start thickness-offset)
-                                     (offset-add flag-end thickness-offset)
-                                     flag-end)))
+           ;; The points of a round-filled-polygon need to be given in clockwise
+           ;; order, otherwise the polygon will be enlarged by blot-size*2!
+           (points (if stem-up
+                       (list start
+                             flag-end
+                             (offset-add flag-end thickness-offset)
+                             (offset-add start thickness-offset))
+                       (list start
+                             (offset-add start thickness-offset)
+                             (offset-add flag-end thickness-offset)
+                             flag-end)))
            (stencil (ly:round-filled-polygon points half-stem-thickness))
-           ; Log for 1/8 is 3, so we need to subtract 3
+           ;; Log for 1/8 is 3, so we need to subtract 3
            (flag-stencil (buildflag stencil (- log 3) stencil spacing))
            (stroke-style (ly:grob-property grob 'stroke-style)))
-    (if (equal? stroke-style "grace")
-      (add-stroke-straight flag-stencil grob
-                           dir log
-                           stroke-style
-                           flag-end flag-length
-                           thickness
-                           (* half-stem-thickness 2))
-      flag-stencil))))
+      (if (equal? stroke-style "grace")
+          (add-stroke-straight flag-stencil grob
+                               dir log
+                               stroke-style
+                               flag-end flag-length
+                               thickness
+                               (* half-stem-thickness 2))
+          flag-stencil))))
 
 (define-public (modern-straight-flag grob)
   "Modern straight flag style (for composers like Stockhausen, Boulez, etc.).
@@ -118,39 +125,43 @@ of Bach, etc."
 flags are both 45 degrees."
   ((straight-flag 0.55 1 -45 1.2 45 1.4) grob))
 
+(define-public (flat-flag grob)
+  "Flat flag style.  The angles of the flags are both 0 degrees"
+  ((straight-flag 0.55 1.0 0 1.0 0 1.0) grob))
+
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;  Flags created from feta glyphs (normal and mensural flags)
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
-; NOTE: By default, lilypond uses the C++ method Flag::stencil
-; (ly:flag::stencil is the corresponding Scheme interface) to generate the
-; flag stencil. The following functions are simply a reimplementation in
-; Scheme, so that one has that functionality available in Scheme, if one
-; wants to write a flag style, which modifies one of the standard flags
-; by some stencil operations.
+;; NOTE: By default, lilypond uses the C++ method Flag::stencil
+;; (ly:flag::stencil is the corresponding Scheme interface) to generate the
+;; flag stencil. The following functions are simply a reimplementation in
+;; Scheme, so that one has that functionality available in Scheme, if one
+;; wants to write a flag style, which modifies one of the standard flags
+;; by some stencil operations.
 
 
 (define-public (add-stroke-glyph stencil grob dir stroke-style flag-style)
   "Load and add a stroke (represented by a glyph in the font) to the given
 flag stencil."
   (if (not (string? stroke-style))
-    stencil
-    ; Otherwise: look up the stroke glyph and combine it with the flag
-    (let* ((stem-grob (ly:grob-parent grob X))
-           (font-char (string-append "flags." flag-style dir stroke-style))
-           (alt-font-char (string-append "flags." dir stroke-style))
-           (font (ly:grob-default-font grob))
-           (tmpstencil (ly:font-get-glyph font font-char))
-           (stroke-stencil (if (ly:stencil-empty? tmpstencil)
-                               (ly:font-get-glyph font alt-font-char)
-                               tmpstencil)))
-      (if (ly:stencil-empty? stroke-stencil)
-        (begin
-          (ly:warning (_ "flag stroke `~a' or `~a' not found") font-char alt-font-char)
-          stencil)
-        (ly:stencil-add stencil stroke-stencil)))))
+      stencil
+      ;; Otherwise: look up the stroke glyph and combine it with the flag
+      (let* ((stem-grob (ly:grob-parent grob X))
+             (font-char (string-append "flags." flag-style dir stroke-style))
+             (alt-font-char (string-append "flags." dir stroke-style))
+             (font (ly:grob-default-font grob))
+             (tmpstencil (ly:font-get-glyph font font-char))
+             (stroke-stencil (if (ly:stencil-empty? tmpstencil)
+                                 (ly:font-get-glyph font alt-font-char)
+                                 tmpstencil)))
+        (if (ly:stencil-empty? stroke-stencil)
+            (begin
+              (ly:warning (_ "flag stroke `~a' or `~a' not found") font-char alt-font-char)
+              stencil)
+            (ly:stencil-add stencil stroke-stencil)))))
 
 
 (define-public (retrieve-glyph-flag flag-style dir dir-modifier grob)
@@ -161,7 +172,7 @@ flag stencil."
          (font-char (string-append "flags." flag-style dir dir-modifier (number->string log)))
          (flag (ly:font-get-glyph font font-char)))
     (if (ly:stencil-empty? flag)
-      (ly:warning "flag ~a not found" font-char))
+        (ly:warning "flag ~a not found" font-char))
     flag))
 
 
@@ -172,8 +183,8 @@ flag stencil."
          (flag (retrieve-glyph-flag flag-style dir dir-modifier grob))
          (stroke-style (ly:grob-property grob 'stroke-style)))
     (if (null? stroke-style)
-      flag
-      (add-stroke-glyph flag grob dir stroke-style flag-style))))
+        flag
+        (add-stroke-glyph flag grob dir stroke-style flag-style))))
 
 
 
@@ -191,12 +202,12 @@ a flag always touches a staff line."
          (d (ly:grob-property stem-grob 'direction))
          (ss (ly:staff-symbol-staff-space stem-grob))
          (stem-end (inexact->exact (round (* (index-cell
-                                               (ly:grob-extent stem-grob
-                                                               stem-grob
-                                                               Y)
-                                               d)
+                                              (ly:grob-extent stem-grob
+                                                              stem-grob
+                                                              Y)
+                                              d)
                                              (/ 2 ss)))))
-         ; For some reason the stem-end is a real instead of an integer...
+         ;; For some reason the stem-end is a real instead of an integer...
          (dir-modifier (if (ly:position-on-line? stem-grob stem-end) "1" "0"))
          (modifier (if adjust dir-modifier "2")))
     (create-glyph-flag "mensural" modifier grob)))
@@ -236,7 +247,7 @@ at will.  The correct way to do this is:
                          (symbol->string flag-style-symbol)
                          "")))
     (cond
-        ((equal? flag-style "") (normal-flag grob))
-        ((equal? flag-style "mensural") (mensural-flag grob))
-        ((equal? flag-style "no-flag") (no-flag grob))
-        (else ((glyph-flag flag-style) grob)))))
+     ((equal? flag-style "") (normal-flag grob))
+     ((equal? flag-style "mensural") (mensural-flag grob))
+     ((equal? flag-style "no-flag") (no-flag grob))
+     (else ((glyph-flag flag-style) grob)))))
index d759d60934590614bfb3c070d064d67e82760515..45a54b5f8d6ec9a5e202c23381d76ca9697eee6a 100644 (file)
   (make <Font-tree-leaf> #:default-size size #:size-vector size-font-vector))
 
 (define (make-font-tree-node
-        qualifier default)
+         qualifier default)
   (make <Font-tree-node>
     #:qualifier qualifier
     #:default default
     #:children (make-hash-table 11)))
 
 (define-method (display (leaf <Font-tree-leaf>) port)
-  (map (lambda (x) (display x port))
-       (list
-       "#<Font-size-family:\n"
-       (slot-ref leaf 'default-size)
-       (slot-ref leaf 'size-vector)
-       "#>"
-       )))
+  (for-each (lambda (x) (display x port))
+            (list
+             "#<Font-size-family:\n"
+             (slot-ref leaf 'default-size)
+             (slot-ref leaf 'size-vector)
+             "#>"
+             )))
 
 (define-method (display (node <Font-tree-node>) port)
-  (map
+  (for-each
    (lambda (x)
      (display x port))
    (list
 
   (define (make-node fprops size-family)
     (if (null? fprops)
-       (make-font-tree-leaf (car size-family) (cdr size-family))
-       (let* ((qual (next-qualifier default-qualifier-order fprops)))
-         (make-font-tree-node qual
-                              (assoc-get qual fprops)))))
+        (make-font-tree-leaf (car size-family) (cdr size-family))
+        (let* ((qual (next-qualifier default-qualifier-order fprops)))
+          (make-font-tree-node qual
+                               (assoc-get qual fprops)))))
 
   (define (next-qualifier order props)
     (cond
      ((null? order) (caar props))
      (else
       (if (assoc-get (car order) props)
-         (car order)
-         (next-qualifier (cdr order) props)))))
+          (car order)
+          (next-qualifier (cdr order) props)))))
 
   (let* ((q (font-qualifier node))
-        (d (font-default node))
-        (v (assoc-get q fprops d))
-        (new-fprops (assoc-delete q fprops))
-        (child (hashq-ref (slot-ref node 'children)
-                          v #f)))
+         (d (font-default node))
+         (v (assoc-get q fprops d))
+         (new-fprops (assoc-delete q fprops))
+         (child (hashq-ref (slot-ref node 'children)
+                           v #f)))
     (if (not child)
-       (begin
-         (set! child (make-node new-fprops size-family))
-         (hashq-set! (slot-ref node 'children) v child)))
+        (begin
+          (set! child (make-node new-fprops size-family))
+          (hashq-set! (slot-ref node 'children) v child)))
     (if (pair? new-fprops)
-       (add-font child new-fprops size-family))))
+        (add-font child new-fprops size-family))))
 
 (define-method (add-font (node <Font-tree-leaf>) fprops size-family)
   (throw "must add to node, not leaf"))
 
 (define-method (g-lookup-font (node <Font-tree-node>) alist-chain)
   (let* ((qual (font-qualifier node))
-        (def (font-default node))
-        (val (chain-assoc-get qual alist-chain def))
-        (desired-child (hashq-ref (font-children node) val)))
+         (def (font-default node))
+         (val (chain-assoc-get qual alist-chain def))
+         (desired-child (hashq-ref (font-children node) val)))
 
     (if desired-child
-       (g-lookup-font desired-child alist-chain)
-       (g-lookup-font (hashq-ref (font-children node) def) alist-chain))))
+        (g-lookup-font desired-child alist-chain)
+        (g-lookup-font (hashq-ref (font-children node) def) alist-chain))))
 
 (define-method (g-lookup-font (node <Font-tree-leaf>) alist-chain)
   node)
@@ -176,32 +176,32 @@ used.  This is used to select the proper design size for the text fonts.
   (for-each
    (lambda (x)
      (add-font node
-              (list (cons 'font-encoding (car x))
-                    (cons 'font-family family))
-              (cons (* factor (cadr x))
-                    (caddr x))))
-   
+               (list (cons 'font-encoding (car x))
+                     (cons 'font-family family))
+               (cons (* factor (cadr x))
+                     (caddr x))))
+
    `((fetaText ,(ly:pt 20.0)
-              ,(list->vector
-                (map (lambda (tup)
-                       (cons (ly:pt (cdr tup))
-                             (format #f "~a-~a ~a"
-                                     name
-                                     (car tup)
-                                     (ly:pt (cdr tup)))))
-                     design-size-alist)))
+               ,(list->vector
+                 (map (lambda (tup)
+                        (cons (ly:pt (cdr tup))
+                              (format #f "~a-~a ~a"
+                                      name
+                                      (car tup)
+                                      (ly:pt (cdr tup)))))
+                      design-size-alist)))
      (fetaMusic ,(ly:pt 20.0)
-               ,(list->vector
-                 (map (lambda (size-tup)
-                        (delay (ly:system-font-load
-                                (format #f "~a-~a" name (car size-tup)))))
-                      design-size-alist
-                      )))
+                ,(list->vector
+                  (map (lambda (size-tup)
+                         (delay (ly:system-font-load
+                                 (format #f "~a-~a" name (car size-tup)))))
+                       design-size-alist
+                       )))
      (fetaBraces ,(ly:pt 20.0)
-                #(,(delay (ly:system-font-load
-                           (format #f "~a-brace" name)))))
+                 #(,(delay (ly:system-font-load
+                            (format #f "~a-brace" name)))))
      )))
-                
+
 (define-public (add-pango-fonts node lily-family family factor)
   ;; Synchronized with the `text-font-size' variable in
   ;; layout-set-absolute-staff-size-in-module (see paper.scm).
@@ -209,19 +209,19 @@ used.  This is used to select the proper design size for the text fonts.
 
   (define (add-node shape series)
     (add-font node
-             `((font-family . ,lily-family)
-               (font-shape . ,shape)
-               (font-series . ,series)
-               (font-encoding . latin1) ;; ugh.
-               )
-             `(,text-font-size
-               . #(,(cons
-                    (ly:pt 12)
-                    (ly:make-pango-description-string
-                      `(((font-family . ,family)
-                         (font-series . ,series)
-                         (font-shape . ,shape)))
-                      (ly:pt 12)))))))
+              `((font-family . ,lily-family)
+                (font-shape . ,shape)
+                (font-series . ,series)
+                (font-encoding . latin1) ;; ugh.
+                )
+              `(,text-font-size
+                . #(,(cons
+                      (ly:pt 12)
+                      (ly:make-pango-description-string
+                       `(((font-family . ,family)
+                          (font-series . ,series)
+                          (font-shape . ,shape)))
+                       (ly:pt 12)))))))
 
   (add-node 'upright 'normal)
   (add-node 'caps 'normal)
@@ -239,8 +239,8 @@ used.  This is used to select the proper design size for the text fonts.
 
 (define-public (make-century-schoolbook-tree factor)
   (make-pango-font-tree
-    "Century Schoolbook L"
-    "sans-serif" "monospace" factor))
+   "Century Schoolbook L"
+   "sans-serif" "monospace" factor))
 
 (define-public all-text-font-encodings
   '(latin1))
index 697073642df07ab515c26833d56636ccce4e5c77..4028a42468ad02e4b2ebfd1b4a8a06dfeca4d6a6 100644 (file)
 ;;; this is still too big a mess.
 
 (use-modules (ice-9 regex)
-            (ice-9 string-fun)
-            (guile)
-            (scm framework-ps)
-            (scm paper-system)
-            (scm page)
-            (scm output-ps)
-            (srfi srfi-1)
-            (srfi srfi-13)
-            (lily))
+             (ice-9 string-fun)
+             (guile)
+             (scm framework-ps)
+             (scm paper-system)
+             (scm page)
+             (scm output-ps)
+             (srfi srfi-1)
+             (srfi srfi-13)
+             (lily))
 
 (define format
   ergonomic-simple-format)
@@ -42,18 +42,18 @@ stencil so that LaTeX's \\includegraphics command doesn't modify the
 alignment."
   (define left
     (if (pair? stencils)
-       (apply min
-              (map (lambda (stc)
-                     (interval-start (ly:stencil-extent stc X)))
-                   stencils))
-       0.0))
+        (apply min
+               (map (lambda (stc)
+                      (interval-start (ly:stencil-extent stc X)))
+                    stencils))
+        0.0))
 
   (map (lambda (stil)
-        (ly:make-stencil
-         (ly:stencil-expr stil)
-         (cons left
-               (cdr (ly:stencil-extent stil X)))
-         (ly:stencil-extent stil Y)))
+         (ly:make-stencil
+          (ly:stencil-expr stil)
+          (cons left
+                (cdr (ly:stencil-extent stil X)))
+          (ly:stencil-extent stil Y)))
        stencils))
 
 (define (dump-stencils-as-EPSes stencils book basename)
@@ -62,7 +62,7 @@ alignment."
 
   (define paper
     (ly:paper-book-paper book))
-    
+
   (define create-aux-files
     (ly:get-option 'aux-files))
 
@@ -73,86 +73,86 @@ alignment."
   (define (dump-counted-stencil stencil-count-pair)
     "Return EPS filename."
     (let* ((stencil (car stencil-count-pair))
-          (number (cdr stencil-count-pair))
-          (name (format #f "~a-~a" basename number)))
+           (number (cdr stencil-count-pair))
+           (name (format #f "~a-~a" basename number)))
       (dump-stencil-as-EPS paper stencil name
-                          (ly:get-option 'include-eps-fonts))
+                           (ly:get-option 'include-eps-fonts))
       (string-append name ".eps")))
 
   ;; main body
-  ;; First, create the output, then if necessary, individual staves and 
+  ;; First, create the output, then if necessary, individual staves and
   ;; finally write some auxiliary files if desired
   (dump-infinite-stack-EPS stencils)
   (postprocess-output book framework-eps-module
-                       (format #f "~a.eps" basename) (ly:output-formats))
+                      (format #f "~a.eps" basename) (ly:output-formats))
 
   ;; individual staves (*-1.eps etc.); only print if more than one stencil
   ;; Otherwise the .eps and the -1.eps file will be identical and waste space
   ;; Also always create if aux-files=##t
   (if (or create-aux-files (< 1 (length stencils)))
-    (let* ((widened-stencils (widen-left-stencil-edges stencils))
-          (counted-systems  (count-list widened-stencils))
-          (eps-files (map dump-counted-stencil counted-systems)))
-      (if do-pdf
-         ;; par-for-each: a bit faster ...
-         (for-each (lambda (y) (postscript->pdf 0 0 y))
-                   eps-files))))
+      (let* ((widened-stencils (widen-left-stencil-edges stencils))
+             (counted-systems  (count-list widened-stencils))
+             (eps-files (map dump-counted-stencil counted-systems)))
+        (if do-pdf
+            ;; par-for-each: a bit faster ...
+            (for-each (lambda (y) (postscript->pdf 0 0 y))
+                      eps-files))))
 
   ;; Now, write some aux files if requested: .texi, .tex and .count
   ;; for direct inclusion into latex and texinfo
   (if create-aux-files
-    (let* ((write-file (lambda (str-port ext)
-                        (if create-aux-files
-                          (let* ((name (format #f "~a-systems.~a" basename ext))
-                                 (port (open-output-file name)))
-                            (ly:message (_ "Writing ~a...") name)
-                            (display (get-output-string str-port) port)
-                            (close-output-port port)))))
-          (tex-system-port (open-output-string))
-          (texi-system-port (open-output-string))
-          (count-system-port (open-output-string)))
-      (for-each (lambda (c)
-                 (if (< 0 c)
-                     (format tex-system-port
-                               "\\ifx\\betweenLilyPondSystem \\undefined
+      (let* ((write-file (lambda (str-port ext)
+                           (if create-aux-files
+                               (let* ((name (format #f "~a-systems.~a" basename ext))
+                                      (port (open-output-file name)))
+                                 (ly:message (_ "Writing ~a...") name)
+                                 (display (get-output-string str-port) port)
+                                 (close-output-port port)))))
+             (tex-system-port (open-output-string))
+             (texi-system-port (open-output-string))
+             (count-system-port (open-output-string)))
+        (for-each (lambda (c)
+                    (if (< 0 c)
+                        (format tex-system-port
+                                "\\ifx\\betweenLilyPondSystem \\undefined
   \\linebreak
 \\else
   \\expandafter\\betweenLilyPondSystem{~a}%
 \\fi
 " c))
-                 (format tex-system-port "\\includegraphics{~a-~a}%\n"
-                                  basename (1+ c))
-                 (format texi-system-port "@image{~a-~a}\n"
-                                  basename (1+ c)))
-               (iota (length stencils)))
-      (display "@c eof\n" texi-system-port)
-      (display "% eof\n" tex-system-port)
-      (format count-system-port "~a" (length stencils))
-      (write-file texi-system-port "texi")
-      (write-file tex-system-port "tex")
-      ;; do this as the last action so we know the rest is complete if
-      ;; this file is present.
-      (write-file count-system-port "count"))))
+                    (format tex-system-port "\\includegraphics{~a-~a}%\n"
+                            basename (1+ c))
+                    (format texi-system-port "@image{~a-~a}\n"
+                            basename (1+ c)))
+                  (iota (length stencils)))
+        (display "@c eof\n" texi-system-port)
+        (display "% eof\n" tex-system-port)
+        (format count-system-port "~a" (length stencils))
+        (write-file texi-system-port "texi")
+        (write-file tex-system-port "tex")
+        ;; do this as the last action so we know the rest is complete if
+        ;; this file is present.
+        (write-file count-system-port "count"))))
 
 (define-public (output-classic-framework basename book scopes fields)
   (output-scopes scopes fields basename)
   (if (ly:get-option 'dump-signatures)
       (write-system-signatures basename (ly:paper-book-systems book) 1))
   (dump-stencils-as-EPSes (map paper-system-stencil
-                              (ly:paper-book-systems book))
-                         book
-                         basename))
+                               (ly:paper-book-systems book))
+                          book
+                          basename))
 
 (define-public (output-framework basename book scopes fields)
   (output-scopes scopes fields basename)
   (if (ly:get-option 'clip-systems)
       (clip-system-EPSes basename book))
   (dump-stencils-as-EPSes (map page-stencil
-                              (ly:paper-book-pages book))
-                         book
-                         basename))
+                               (ly:paper-book-pages book))
+                          book
+                          basename))
 
-; redefine to imports from framework-ps
+;; redefine to imports from framework-ps
 (define convert-to-pdf
   convert-to-pdf)
 
index bcc58142e5c776e8bdb09b3c7fe7bffa16d22ee9..96715271852b45d675353d63717ee68a0dc40f61 100644 (file)
@@ -5,16 +5,16 @@
   )
 
 (use-modules (ice-9 regex)
-            (ice-9 string-fun)
-            (guile)
-            (srfi srfi-1)
-            (ice-9 pretty-print)
-            (srfi srfi-13)
-            (lily))
+             (ice-9 string-fun)
+             (guile)
+             (srfi srfi-1)
+             (ice-9 pretty-print)
+             (srfi srfi-13)
+             (lily))
 
 (define-public (output-framework channel book scopes fields)
 
-  
+
   #t)
 
 (define-public output-classic-framework output-framework)
index b412ab3269412a5a4809a10ea855b4c0b1adba1d..d92affb11ccad4c45953c36a81ab8128af576335 100644 (file)
 ;;; this is still too big a mess.
 
 (use-modules (ice-9 string-fun)
-            (guile)
-            (scm page)
-            (scm paper-system)
-            (srfi srfi-1)
-            (srfi srfi-13)
-            (scm clip-region)
-            (lily))
+             (guile)
+             (scm page)
+             (scm paper-system)
+             (srfi srfi-1)
+             (srfi srfi-13)
+             (scm clip-region)
+             (lily))
 
 (define format ergonomic-simple-format)
 
@@ -37,7 +37,7 @@
 
 (define-public (ps-font-command font)
   (let* ((name (ly:font-file-name font))
-        (magnify (ly:font-magnification font)))
+         (magnify (ly:font-magnification font)))
     (string-append
      "magfont"
      (ly:string-substitute
@@ -45,7 +45,7 @@
       (ly:string-substitute
        "/" "_"
        (ly:string-substitute
-       "%" "_" name)))
+        "%" "_" name)))
      "m" (string-encode-integer (inexact->exact (round (* 1000 magnify)))))))
 
 (define (ps-define-pango-pf pango-pf font-name scaling)
 
   (string-append
    "/lily-output-units "
-     (number->string (/ (ly:bp 1))) " def %% millimeter\n"
+   (number->string (/ (ly:bp 1))) " def %% millimeter\n"
    (output-entry "staff-line-thickness" 'line-thickness)
    (output-entry "line-width" 'line-width)
    (output-entry "paper-size" 'papersizename)
-   (output-entry "staff-height" 'staff-height) ;junkme.
+   (output-entry "staff-height" 'staff-height)  ;junkme.
    "/output-scale "
-     (number->string (ly:output-def-lookup layout 'output-scale)) " def\n"
+   (number->string (ly:output-def-lookup layout 'output-scale)) " def\n"
    (output-entry "page-height" 'paper-height)
    (output-entry "page-width" 'paper-width)))
 
@@ -93,8 +93,8 @@
     (format #f "%%Page: ~a ~a\n" page-number page-number)
     "%%BeginPageSetup\n"
     (if landscape?
-       "page-width output-scale lily-output-units mul mul 0 translate 90 rotate\n"
-       "")
+        "page-width output-scale lily-output-units mul mul 0 translate 90 rotate\n"
+        "")
     "%%EndPageSetup\n"
     "\n"
     "true setstrokeadjust\n"
 (define (supplies-or-needs paper load-fonts?)
   (define (extract-names font)
     (if (ly:pango-font? font)
-       (map car (ly:pango-font-physical-fonts font))
-       (list (ly:font-name font))))
+        (map car (ly:pango-font-physical-fonts font))
+        (list (ly:font-name font))))
 
   (let* ((fonts (ly:paper-fonts paper))
-        (names (apply append (map extract-names fonts))))
-    (apply string-append
-          (map (lambda (f)
-                 (format #f
-                  (if load-fonts?
-                      "%%DocumentSuppliedResources: font ~a\n"
-                      "%%DocumentNeededResources: font ~a\n")
-                  f))
-               (uniq-list (sort names string<?))))))
+         (names (append-map extract-names fonts)))
+    (string-concatenate
+     (map (lambda (f)
+            (format #f
+                    (if load-fonts?
+                        "%%DocumentSuppliedResources: font ~a\n"
+                        "%%DocumentNeededResources: font ~a\n")
+                    f))
+          (uniq-list (sort names string<?))))))
 
 (define (eps-header paper bbox load-fonts?)
   (string-append "%!PS-Adobe-2.0 EPSF-2.0\n"
-                "%%Creator: LilyPond " (lilypond-version) "\n"
-                "%%BoundingBox: "
-                  (string-join (map ly:number->string bbox) " ") "\n"
-                "%%Orientation: "
-                  (if (eq? (ly:output-def-lookup paper 'landscape) #t)
-                      "Landscape\n"
-                      "Portrait\n")
-                (supplies-or-needs paper load-fonts?)
-                "%%EndComments\n"))
+                 "%%Creator: LilyPond " (lilypond-version) "\n"
+                 "%%BoundingBox: "
+                 (string-join (map ly:number->string bbox) " ") "\n"
+                 "%%Orientation: "
+                 (if (eq? (ly:output-def-lookup paper 'landscape) #t)
+                     "Landscape\n"
+                     "Portrait\n")
+                 (supplies-or-needs paper load-fonts?)
+                 "%%EndComments\n"))
 
 (define (ps-document-media paper)
   (let* ((w (/ (*
-               (ly:output-def-lookup paper 'output-scale)
-               (ly:output-def-lookup paper 'paper-width)) (ly:bp 1)))
-        (h (/ (*
-               (ly:output-def-lookup paper 'paper-height)
-               (ly:output-def-lookup paper 'output-scale))
-              (ly:bp 1)))
-        (landscape? (eq? (ly:output-def-lookup paper 'landscape) #t)))
+                (ly:output-def-lookup paper 'output-scale)
+                (ly:output-def-lookup paper 'paper-width)) (ly:bp 1)))
+         (h (/ (*
+                (ly:output-def-lookup paper 'paper-height)
+                (ly:output-def-lookup paper 'output-scale))
+               (ly:bp 1)))
+         (landscape? (eq? (ly:output-def-lookup paper 'landscape) #t)))
     (ly:format "%%DocumentMedia: ~a ~2f ~2f ~a ~a ~a\n"
-              (ly:output-def-lookup paper 'papersizename)
-              (if landscape? h w)
-              (if landscape? w h)
-              80   ;; weight
-              "()" ;; color
-              "()" ;; type
-    )))
+               (ly:output-def-lookup paper 'papersizename)
+               (if landscape? h w)
+               (if landscape? w h)
+               80   ;; weight
+               "()" ;; color
+               "()" ;; type
+               )))
 
 (define (file-header paper page-count load-fonts?)
   (string-append "%!PS-Adobe-3.0\n"
-                "%%Creator: LilyPond " (lilypond-version) "\n"
-                "%%Pages: " (number->string page-count) "\n"
-                "%%PageOrder: Ascend\n"
-                "%%Orientation: "
-                  (if (eq? (ly:output-def-lookup paper 'landscape) #t)
-                      "Landscape\n"
-                      "Portrait\n")
-                (ps-document-media paper)
-                (supplies-or-needs paper load-fonts?)
-                "%%EndComments\n"))
+                 "%%Creator: LilyPond " (lilypond-version) "\n"
+                 "%%Pages: " (number->string page-count) "\n"
+                 "%%PageOrder: Ascend\n"
+                 "%%Orientation: "
+                 (if (eq? (ly:output-def-lookup paper 'landscape) #t)
+                     "Landscape\n"
+                     "Portrait\n")
+                 (ps-document-media paper)
+                 (supplies-or-needs paper load-fonts?)
+                 "%%EndComments\n"))
 
 (define (procset file-name)
   (format #f
-   "%%BeginResource: procset (~a) 1 0
+          "%%BeginResource: procset (~a) 1 0
 ~a
 %%EndResource
 "
-   file-name (cached-file-contents file-name)))
+          file-name (cached-file-contents file-name)))
 
 (define (embed-document file-name)
   (format #f "%%BeginDocument: ~a
 ~a
 %%EndDocument
 "
-   file-name (cached-file-contents file-name)))
+          file-name (cached-file-contents file-name)))
 
 (define (setup-variables paper)
   (string-append
 
 (define-public (ps-embed-cff body font-set-name version)
   (let* ((binary-data
-         (string-append
-          (format #f "/~a ~s StartData " font-set-name (string-length body))
-          body))
-        (header
-         (format #f
-          "%%BeginResource: font ~a
+          (string-append
+           (format #f "/~a ~s StartData " font-set-name (string-length body))
+           body))
+         (header
+          (format #f
+                  "%%BeginResource: font ~a
 %!PS-Adobe-3.0 Resource-FontSet
 %%DocumentNeededResources: ProcSet (FontSetInit)
 %%Title: (FontSet/~a)
 /FontSetInit /ProcSet findresource begin
 %%BeginData: ~s Binary Bytes
 "
-          font-set-name font-set-name version font-set-name
-          (string-length binary-data)))
-        (footer "\n%%EndData
+                  font-set-name font-set-name version font-set-name
+                  (string-length binary-data)))
+         (footer "\n%%EndData
 %%EndResource
 %%EndResource\n"))
     (string-append header
-                  binary-data
-                  footer)))
+                   binary-data
+                   footer)))
 
 (define (write-preamble paper load-fonts? port)
   (define (internal-font? file-name)
     (or (string-startswith file-name "Emmentaler")
-       (string-startswith file-name "emmentaler")
-       ))
+        (string-startswith file-name "emmentaler")
+        ))
 
   (define (load-font-via-GS font-name-filename)
     (define (ps-load-file file-name)
       (if (string? file-name)
-         (if (string-contains file-name (ly:get-option 'datadir))
-             (begin
-               (set! file-name (ly:string-substitute (ly:get-option 'datadir)
-                                                     "" file-name))
-               (format #f
-                "lilypond-datadir (~a) concatstrings (r) file .loadfont\n"
-                file-name))
-             (format #f "(~a) (r) file .loadfont\n" file-name))
-         (format #f "% cannot find font file: ~a\n" file-name)))
+          (if (string-contains file-name (ly:get-option 'datadir))
+              (begin
+                (set! file-name (ly:string-substitute (ly:get-option 'datadir)
+                                                      "" file-name))
+                (format #f
+                        "lilypond-datadir (~a) concatstrings (r) file .loadfont\n"
+                        file-name))
+              (format #f "(~a) (r) file .loadfont\n" file-name))
+          (format #f "% cannot find font file: ~a\n" file-name)))
 
     (let* ((font (car font-name-filename))
-          (name (cadr font-name-filename))
-          (file-name (caddr font-name-filename))
-          (bare-file-name (ly:find-file file-name)))
+           (name (cadr font-name-filename))
+           (file-name (caddr font-name-filename))
+           (bare-file-name (ly:find-file file-name)))
       (cons name
-           (if (mac-font? bare-file-name)
-               (handle-mac-font name bare-file-name)
-               (cond
-                ((internal-font? file-name)
-                 (ps-load-file (ly:find-file
-                                (format #f "~a.otf" file-name))))
-                ((string? bare-file-name)
-                 (ps-load-file file-name))
-                (else
-                 (ly:warning (_ "cannot embed ~S=~S") name file-name)
-                 ""))))))
+            (if (mac-font? bare-file-name)
+                (handle-mac-font name bare-file-name)
+                (cond
+                 ((internal-font? file-name)
+                  (ps-load-file (ly:find-file
+                                 (format #f "~a.otf" file-name))))
+                 ((string? bare-file-name)
+                  (ps-load-file file-name))
+                 (else
+                  (ly:warning (_ "cannot embed ~S=~S") name file-name)
+                  ""))))))
 
   (define (dir-join a b)
     (if (equal? a "")
-       b
-       (string-append a "/" b)))
+        b
+        (string-append a "/" b)))
 
   (define (dir-listing dir-name)
     (define (dir-helper dir lst)
       (let ((e (readdir dir)))
-       (if (eof-object? e)
-           lst
-           (dir-helper dir (cons e lst)))))
+        (if (eof-object? e)
+            lst
+            (dir-helper dir (cons e lst)))))
     (reverse (dir-helper (opendir dir-name) '())))
 
   (define (handle-mac-font name file-name)
     (let* ((dir-name (tmpnam))
-          (files '())
-          (status 0)
-          (embed #f)
-          (cwd (getcwd)))
+           (files '())
+           (status 0)
+           (embed #f)
+           (cwd (getcwd)))
       (mkdir dir-name #o700)
       (chdir dir-name)
       (set! status (ly:system (list "fondu" "-force" file-name)))
       (set! files (dir-listing dir-name))
       (for-each
        (lambda (f)
-        (let* ((full-name (dir-join dir-name f)))
-          (if (and (not embed)
-                   (equal? 'regular (stat:type (stat full-name)))
-                   (equal? name (ly:ttf-ps-name full-name)))
-              (set! embed (font-file-as-ps-string name full-name 0)))
-          (if (or (equal? "." f)
-                  (equal? ".." f))
-              #t
-              (delete-file full-name))))
+         (let* ((full-name (dir-join dir-name f)))
+           (if (and (not embed)
+                    (equal? 'regular (stat:type (stat full-name)))
+                    (equal? name (ly:ttf-ps-name full-name)))
+               (set! embed (font-file-as-ps-string name full-name 0)))
+           (if (or (equal? "." f)
+                   (equal? ".." f))
+               #t
+               (delete-file full-name))))
        files)
       (rmdir dir-name)
       (if (not embed)
-         (begin
-           (set! embed "% failed\n")
-           (ly:warning (_ "cannot extract file matching ~a from ~a")
-                       name file-name)))
+          (begin
+            (set! embed "% failed\n")
+            (ly:warning (_ "cannot extract file matching ~a from ~a")
+                        name file-name)))
       embed))
 
   (define (font-file-as-ps-string name file-name font-index)
     (let* ((downcase-file-name (string-downcase file-name)))
       (cond
        ((and file-name (string-endswith downcase-file-name ".pfa"))
-       (embed-document file-name))
+        (embed-document file-name))
        ((and file-name (string-endswith downcase-file-name ".pfb"))
-       (ly:pfb->pfa file-name))
+        (ly:pfb->pfa file-name))
        ((and file-name (string-endswith downcase-file-name ".ttf"))
-       (ly:ttf->pfa file-name))
+        (ly:ttf->pfa file-name))
        ((and file-name (string-endswith downcase-file-name ".ttc"))
-       (ly:ttf->pfa file-name font-index))
+        (ly:ttf->pfa file-name font-index))
        ((and file-name (string-endswith downcase-file-name ".otf"))
-       (ps-embed-cff (ly:otf->cff file-name) name 0))
+        (ps-embed-cff (ly:otf->cff file-name) name 0))
        (else
-       (ly:warning (_ "do not know how to embed ~S=~S") name file-name)
-       ""))))
+        (ly:warning (_ "do not know how to embed ~S=~S") name file-name)
+        ""))))
 
   (define (mac-font? bare-file-name)
     (and (eq? PLATFORM 'darwin)
-        bare-file-name
-        (or (string-endswith bare-file-name ".dfont")
-            (= (stat:size (stat bare-file-name)) 0))))
+         bare-file-name
+         (or (string-endswith bare-file-name ".dfont")
+             (= (stat:size (stat bare-file-name)) 0))))
 
   (define (load-font font-psname-filename-fontindex)
     (let* ((font (list-ref font-psname-filename-fontindex 0))
-          (name (list-ref font-psname-filename-fontindex 1))
-          (file-name (list-ref font-psname-filename-fontindex 2))
-          (font-index (list-ref font-psname-filename-fontindex 3))
-          (bare-file-name (ly:find-file file-name)))
+           (name (list-ref font-psname-filename-fontindex 1))
+           (file-name (list-ref font-psname-filename-fontindex 2))
+           (font-index (list-ref font-psname-filename-fontindex 3))
+           (bare-file-name (ly:find-file file-name)))
       (cons name
-           (cond ((mac-font? bare-file-name)
-                  (handle-mac-font name bare-file-name))
-                 ((and font (cff-font? font))
-                  (ps-embed-cff (ly:otf-font-table-data font "CFF ")
-                                name
-                                0))
-                 (bare-file-name (font-file-as-ps-string
-                                  name bare-file-name font-index))
-                 (else
-                  (ly:warning (_ "do not know how to embed font ~s ~s ~s")
-                              name file-name font))))))
+            (cond ((mac-font? bare-file-name)
+                   (handle-mac-font name bare-file-name))
+                  ((and font (cff-font? font))
+                   (ps-embed-cff (ly:otf-font-table-data font "CFF ")
+                                 name
+                                 0))
+                  (bare-file-name (font-file-as-ps-string
+                                   name bare-file-name font-index))
+                  (else
+                   (ly:warning (_ "do not know how to embed font ~s ~s ~s")
+                               name file-name font))))))
 
   (define (load-fonts paper)
     (let* ((fonts (ly:paper-fonts paper))
 
-          ;; todo - doc format of list.
-          (all-font-names
-           (map
-            (lambda (font)
-              (cond ((string? (ly:font-file-name font))
-                     (list (list font
-                                 (ly:font-name font)
-                                 (ly:font-file-name font)
-                                 #f)))
-                    ((ly:pango-font? font)
-                     (map (lambda (psname-filename-fontindex)
-                            (list #f
-                                  (list-ref psname-filename-fontindex 0)
-                                  (list-ref psname-filename-fontindex 1)
-                                  (list-ref psname-filename-fontindex 2)))
-                          (ly:pango-font-physical-fonts font)))
-                    (else
-                     (ly:font-sub-fonts font))))
-            fonts))
-          (font-names (uniq-list
-                       (sort (apply append all-font-names)
-                             (lambda (x y) (string<? (cadr x) (cadr y))))))
-
-          ;; slightly spaghetti-ish: deciding what to load where
-          ;; is smeared out.
-          (font-loader
-           (lambda (name)
-             (cond ((ly:get-option 'gs-load-fonts)
-                    (load-font-via-GS name))
-                   ((ly:get-option 'gs-load-lily-fonts)
-                    (if (or (string-contains (caddr name)
-                                             (ly:get-option 'datadir))
-                            (internal-font? (caddr name)))
-                        (load-font-via-GS name)
-                        (load-font name)))
-                   (else
-                    (load-font name)))))
-          (pfas (map font-loader font-names)))
+           ;; todo - doc format of list.
+           (all-font-names
+            (map
+             (lambda (font)
+               (cond ((string? (ly:font-file-name font))
+                      (list (list font
+                                  (ly:font-name font)
+                                  (ly:font-file-name font)
+                                  #f)))
+                     ((ly:pango-font? font)
+                      (map (lambda (psname-filename-fontindex)
+                             (list #f
+                                   (list-ref psname-filename-fontindex 0)
+                                   (list-ref psname-filename-fontindex 1)
+                                   (list-ref psname-filename-fontindex 2)))
+                           (ly:pango-font-physical-fonts font)))
+                     (else
+                      (ly:font-sub-fonts font))))
+             fonts))
+           (font-names (uniq-list
+                        (sort (concatenate all-font-names)
+                              (lambda (x y) (string<? (cadr x) (cadr y))))))
+
+           ;; slightly spaghetti-ish: deciding what to load where
+           ;; is smeared out.
+           (font-loader
+            (lambda (name)
+              (cond ((ly:get-option 'gs-load-fonts)
+                     (load-font-via-GS name))
+                    ((ly:get-option 'gs-load-lily-fonts)
+                     (if (or (string-contains (caddr name)
+                                              (ly:get-option 'datadir))
+                             (internal-font? (caddr name)))
+                         (load-font-via-GS name)
+                         (load-font name)))
+                    (else
+                     (load-font name)))))
+           (pfas (map font-loader font-names)))
       pfas))
 
 
    (ly:get-option 'datadir))
   (if load-fonts?
       (for-each (lambda (f)
-                 (format port "\n%%BeginFont: ~a\n" (car f))
-                 (display (cdr f) port)
-                 (display "%%EndFont\n" port))
-               (load-fonts paper)))
+                  (format port "\n%%BeginFont: ~a\n" (car f))
+                  (display (cdr f) port)
+                  (display "%%EndFont\n" port))
+                (load-fonts paper)))
   (display (setup-variables paper) port)
 
   ;; adobe note 5002: should initialize variables before loading routines.
   (display "%%BeginSetup\ninit-lilypond-parameters\n%%EndSetup\n\n" port))
 
 (define (ps-quote str)
-        (fold
-          (lambda (replacement-list result)
-                  (string-join
-                    (string-split
-                      result
-                      (car replacement-list))
-                    (cadr replacement-list)))
-          str
-          '((#\\ "\\\\") (#\( "\\(") (#\) "\\)"))))
+  (fold
+   (lambda (replacement-list result)
+     (string-join
+      (string-split
+       result
+       (car replacement-list))
+      (cadr replacement-list)))
+   str
+   '((#\\ "\\\\") (#\( "\\(") (#\) "\\)"))))
 
 ;;; Create DOCINFO pdfmark containing metadata
 ;;; header fields with pdf prefix override those without the prefix
     (ps-quote (ly:encode-string-for-pdf val)))
   (define (metadata-lookup-output overridevar fallbackvar field)
     (let* ((overrideval (ly:modules-lookup (list header) overridevar))
-          (fallbackval (ly:modules-lookup (list header) fallbackvar))
-          (val (if overrideval overrideval fallbackval)))
+           (fallbackval (ly:modules-lookup (list header) fallbackvar))
+           (val (if overrideval overrideval fallbackval)))
       (if val
-         (format port "/~a (~a)\n" field (metadata-encode (markup->string val (list header)))))))
+          (format port "/~a (~a)\n" field (metadata-encode (markup->string val (list header)))))))
   (display "[ " port)
   (metadata-lookup-output 'pdfcomposer 'composer "Author")
   (format port "/Creator (LilyPond ~a)\n" (lilypond-version))
 
 (define-public (output-framework basename book scopes fields)
   (let* ((filename (format #f "~a.ps" basename))
-        (outputter (ly:make-paper-outputter
-                    ;; FIXME: better wrap open/open-file,
-                    ;; content-mangling is always bad.
-                    ;; MINGW hack: need to have "b"inary for embedding CFFs
-                    (open-file filename "wb")
-                    'ps))
-        (paper (ly:paper-book-paper book))
-        (header (ly:paper-book-header book))
-        (systems (ly:paper-book-systems book))
-        (page-stencils (map page-stencil (ly:paper-book-pages book)))
-        (landscape? (eq? (ly:output-def-lookup paper 'landscape) #t))
-        (page-number (1- (ly:output-def-lookup paper 'first-page-number)))
-        (page-count (length page-stencils))
-        (port (ly:outputter-port outputter)))
+         (outputter (ly:make-paper-outputter
+                     ;; FIXME: better wrap open/open-file,
+                     ;; content-mangling is always bad.
+                     ;; MINGW hack: need to have "b"inary for embedding CFFs
+                     (open-file filename "wb")
+                     'ps))
+         (paper (ly:paper-book-paper book))
+         (header (ly:paper-book-header book))
+         (systems (ly:paper-book-systems book))
+         (page-stencils (map page-stencil (ly:paper-book-pages book)))
+         (landscape? (eq? (ly:output-def-lookup paper 'landscape) #t))
+         (page-number (1- (ly:output-def-lookup paper 'first-page-number)))
+         (page-count (length page-stencils))
+         (port (ly:outputter-port outputter)))
     (if (ly:get-option 'clip-systems)
-       (clip-system-EPSes basename book))
+        (clip-system-EPSes basename book))
     (if (ly:get-option 'dump-signatures)
-       (write-system-signatures basename (ly:paper-book-systems book) 1))
+        (write-system-signatures basename (ly:paper-book-systems book) 1))
     (output-scopes scopes fields basename)
     (display (file-header paper page-count #t) port)
     ;; don't do BeginDefaults PageMedia: A4
     ;; not necessary and wrong
     (write-preamble paper #t port)
     (if (module? header)
-       (handle-metadata header port))
+        (handle-metadata header port))
     (for-each
      (lambda (page)
        (set! page-number (1+ page-number))
     (display "%%Trailer\n%%EOF\n" port)
     (ly:outputter-close outputter)
     (postprocess-output book framework-ps-module filename
-                       (ly:output-formats))))
+                        (ly:output-formats))))
 
 (define-public (dump-stencil-as-EPS paper dump-me filename
-                                   load-fonts)
+                                    load-fonts)
   (let* ((xext (ly:stencil-extent dump-me X))
-        (yext (ly:stencil-extent dump-me Y))
-        (padding (ly:get-option 'eps-box-padding))
-        (left-overshoot (if (number? padding)
-                            (* -1 padding (ly:output-def-lookup paper 'mm))
-                            #f))
-        (bbox
-         (map
-          (lambda (x)
-            (if (or (nan? x) (inf? x)
-                    ;; FIXME: huh?
-                    (equal? (format #f "~S" x) "+#.#")
-                    (equal? (format #f "~S" x) "-#.#"))
-                0.0 x))
-
-          ;; the left-overshoot is to make sure that
-          ;; bar numbers stick out of margin uniformly.
-          ;;
-          (list
-           (if (number? left-overshoot)
-               (min left-overshoot (car xext))
-               (car xext))
-           (car yext) (cdr xext) (cdr yext)))))
+         (yext (ly:stencil-extent dump-me Y))
+         (padding (ly:get-option 'eps-box-padding))
+         (left-overshoot (if (number? padding)
+                             (* -1 padding (ly:output-def-lookup paper 'mm))
+                             #f))
+         (bbox
+          (map
+           (lambda (x)
+             (if (or (nan? x) (inf? x)
+                     ;; FIXME: huh?
+                     (equal? (format #f "~S" x) "+#.#")
+                     (equal? (format #f "~S" x) "-#.#"))
+                 0.0 x))
+
+           ;; the left-overshoot is to make sure that
+           ;; bar numbers stick out of margin uniformly.
+           ;;
+           (list
+            (if (number? left-overshoot)
+                (min left-overshoot (car xext))
+                (car xext))
+            (car yext) (cdr xext) (cdr yext)))))
     (dump-stencil-as-EPS-with-bbox paper dump-me filename load-fonts bbox)))
 
 (define-public (dump-stencil-as-EPS-with-bbox paper dump-me filename
-                                             load-fonts
-                                             bbox)
+                                              load-fonts
+                                              bbox)
   "Create an EPS file from stencil @var{dump-me} to @var{filename}.
 @var{bbox} has format @code{(left-x, lower-y, right-x, upper-y)}.  If
 @var{load-fonts} set, include fonts inline."
   (define (to-rounded-bp-box box)
     "Convert box to 1/72 inch with rounding to enlarge the box."
     (let* ((scale (ly:output-def-lookup paper 'output-scale))
-          (strip-non-number (lambda (x)
-                              (if (or (nan? x)
-                                      (inf? x))
-                                  0.0
-                                  x)))
-          (directed-round (lambda (x rounder)
-                            (inexact->exact
-                             (rounder (/ (* (strip-non-number x) scale)
-                                         (ly:bp 1)))))))
+           (strip-non-number (lambda (x)
+                               (if (or (nan? x)
+                                       (inf? x))
+                                   0.0
+                                   x)))
+           (directed-round (lambda (x rounder)
+                             (inexact->exact
+                              (rounder (/ (* (strip-non-number x) scale)
+                                          (ly:bp 1)))))))
       (list (directed-round (car box) floor)
-           (directed-round (cadr box) floor)
-           (directed-round (max (1+ (car box)) (caddr box)) ceiling)
-           (directed-round (max (1+ (cadr box)) (cadddr box)) ceiling))))
+            (directed-round (cadr box) floor)
+            (directed-round (max (1+ (car box)) (caddr box)) ceiling)
+            (directed-round (max (1+ (cadr box)) (cadddr box)) ceiling))))
 
   (let* ((outputter (ly:make-paper-outputter
-                    ;; FIXME: better wrap open/open-file,
-                    ;; content-mangling is always bad.
-                    ;; MINGW hack: need to have "b"inary for embedding CFFs
-                    (open-file (format #f "~a.eps" filename) "wb")
-                    'ps))
-        (port (ly:outputter-port outputter))
-        (rounded-bbox (to-rounded-bp-box bbox))
-        (port (ly:outputter-port outputter))
-        (header (eps-header paper rounded-bbox load-fonts)))
+                     ;; FIXME: better wrap open/open-file,
+                     ;; content-mangling is always bad.
+                     ;; MINGW hack: need to have "b"inary for embedding CFFs
+                     (open-file (format #f "~a.eps" filename) "wb")
+                     'ps))
+         (port (ly:outputter-port outputter))
+         (rounded-bbox (to-rounded-bp-box bbox))
+         (port (ly:outputter-port outputter))
+         (header (eps-header paper rounded-bbox load-fonts)))
     (display header port)
     (write-preamble paper load-fonts port)
+    (display "/mark_page_link { pop pop pop pop pop } bind def\n" port)
     (display "gsave set-ps-scale-to-lily-scale\n" port)
     (ly:outputter-dump-stencil outputter dump-me)
     (display "stroke grestore\n%%Trailer\n%%EOF\n" port)
 
 (define (clip-systems-to-region basename paper systems region do-pdf do-png)
   (let* ((extents-system-pairs
-         (filtered-map (lambda (paper-system)
-                         (let* ((x-ext (system-clipped-x-extent
-                                        (paper-system-system-grob paper-system)
-                                        region)))
-                           (if x-ext
-                               (cons x-ext paper-system)
-                               #f)))
-                       systems))
-        (count 0))
+          (filtered-map (lambda (paper-system)
+                          (let* ((x-ext (system-clipped-x-extent
+                                         (paper-system-system-grob paper-system)
+                                         region)))
+                            (if x-ext
+                                (cons x-ext paper-system)
+                                #f)))
+                        systems))
+         (count 0))
     (for-each
      (lambda (ext-system-pair)
        (let* ((xext (car ext-system-pair))
-             (paper-system (cdr ext-system-pair))
-             (yext (paper-system-extent paper-system Y))
-             (bbox (list (car xext) (car yext)
-                         (cdr xext) (cdr yext)))
-             (filename (if (< 0 count)
-                           (format #f "~a-~a" basename count)
-                           basename)))
-        (set! count (1+ count))
-        (dump-stencil-as-EPS-with-bbox paper
-                                       (paper-system-stencil paper-system)
-                                       filename
-                                       (ly:get-option 'include-eps-fonts)
-                                       bbox)
-        (if do-pdf
-            (postscript->pdf 0 0 (format #f "~a.eps" filename)))
-        (if do-png
-            (postscript->png (ly:get-option 'resolution) 0 0
-                             (format #f "~a.eps" filename)))))
+              (paper-system (cdr ext-system-pair))
+              (yext (paper-system-extent paper-system Y))
+              (bbox (list (car xext) (car yext)
+                          (cdr xext) (cdr yext)))
+              (filename (if (< 0 count)
+                            (format #f "~a-~a" basename count)
+                            basename)))
+         (set! count (1+ count))
+         (dump-stencil-as-EPS-with-bbox paper
+                                        (paper-system-stencil paper-system)
+                                        filename
+                                        (ly:get-option 'include-eps-fonts)
+                                        bbox)
+         (if do-pdf
+             (postscript->pdf 0 0 (format #f "~a.eps" filename)))
+         (if do-png
+             (postscript->png (ly:get-option 'resolution) 0 0
+                              (format #f "~a.eps" filename)))))
      extents-system-pairs)))
 
 (define-public (clip-system-EPSes basename paper-book)
 
   (define (clip-score-systems basename systems)
     (let* ((layout (ly:grob-layout (paper-system-system-grob (car systems))))
-          (regions (ly:output-def-lookup layout 'clip-regions)))
+           (regions (ly:output-def-lookup layout 'clip-regions)))
       (for-each
        (lambda (region)
-        (clip-systems-to-region
-         (format #f "~a-from-~a-to-~a-clip"
-                 basename
-                 (rhythmic-location->file-string (car region))
-                 (rhythmic-location->file-string (cdr region)))
-         layout systems region
-         do-pdf do-png))
+         (clip-systems-to-region
+          (format #f "~a-from-~a-to-~a-clip"
+                  basename
+                  (rhythmic-location->file-string (car region))
+                  (rhythmic-location->file-string (cdr region)))
+          layout systems region
+          do-pdf do-png))
        regions)))
 
   ;; partition in system lists sharing their layout blocks
   (let* ((systems (ly:paper-book-systems paper-book))
-        (count 0)
-        (score-system-list '()))
+         (count 0)
+         (score-system-list '()))
     (fold
      (lambda (system last-system)
        (if (not (and last-system
-                    (equal? (paper-system-layout last-system)
-                            (paper-system-layout system))))
-          (set! score-system-list (cons '() score-system-list)))
+                     (equal? (paper-system-layout last-system)
+                             (paper-system-layout system))))
+           (set! score-system-list (cons '() score-system-list)))
        (if (paper-system-layout system)
-          (set-car! score-system-list (cons system (car score-system-list))))
+           (set-car! score-system-list (cons system (car score-system-list))))
        ;; pass value.
        system)
      #f
      systems)
     (for-each (lambda (system-list)
-               ;; filter out headers and top-level markup
-               (if (pair? system-list)
-                   (clip-score-systems
-                    (if (> count 0)
-                        (format #f "~a-~a" basename count)
-                        basename)
-                    system-list)))
-             score-system-list)))
+                ;; filter out headers and top-level markup
+                (if (pair? system-list)
+                    (clip-score-systems
+                     (if (> count 0)
+                         (format #f "~a-~a" basename count)
+                         basename)
+                     system-list)))
+              score-system-list)))
 
 (define-public (output-preview-framework basename book scopes fields)
   (let* ((paper (ly:paper-book-paper book))
-        (systems (relevant-book-systems book))
-        (to-dump-systems (relevant-dump-systems systems)))
+         (systems (relevant-book-systems book))
+         (to-dump-systems (relevant-dump-systems systems)))
     (dump-stencil-as-EPS paper
-                        (stack-stencils Y DOWN 0.0
-                                        (map paper-system-stencil
-                                             (reverse to-dump-systems)))
-                        (format #f "~a.preview" basename)
-                        #t)
+                         (stack-stencils Y DOWN 0.0
+                                         (map paper-system-stencil
+                                              (reverse to-dump-systems)))
+                         (format #f "~a.preview" basename)
+                         #t)
     (postprocess-output book framework-ps-module
-                       (format #f "~a.preview.eps" basename)
-                       (cons "png" (ly:output-formats)))))
+                        (format #f "~a.preview.eps" basename)
+                        (cons "png" (ly:output-formats)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (define (output-width-height defs)
   (let* ((landscape (ly:output-def-lookup defs 'landscape))
-        (output-scale (ly:output-def-lookup defs 'output-scale))
-        (convert (lambda (x)
-                   (* x output-scale (/ (ly:bp 1)))))
-        (paper-width (convert (ly:output-def-lookup defs 'paper-width)))
-        (paper-height (convert (ly:output-def-lookup defs 'paper-height)))
-        (w (if landscape paper-height paper-width))
-        (h (if landscape paper-width paper-height)))
+         (output-scale (ly:output-def-lookup defs 'output-scale))
+         (convert (lambda (x)
+                    (* x output-scale (/ (ly:bp 1)))))
+         (paper-width (convert (ly:output-def-lookup defs 'paper-width)))
+         (paper-height (convert (ly:output-def-lookup defs 'paper-height)))
+         (w (if landscape paper-height paper-width))
+         (h (if landscape paper-width paper-height)))
     (cons w h)))
 
 (define (output-resolution defs)
   (let ((defs-resolution (ly:output-def-lookup defs 'pngresolution)))
     (if (number? defs-resolution)
-       defs-resolution
-       (ly:get-option 'resolution))))
+        defs-resolution
+        (ly:get-option 'resolution))))
 
 (define (output-filename name)
   (if (equal? (basename name ".ps") "-")
 
 (define-public (convert-to-pdf book name)
   (let* ((defs (ly:paper-book-paper book))
-        (width-height (output-width-height defs))
-        (width (car width-height))
-        (height (cdr width-height))
-        (filename (output-filename name)))
+         (width-height (output-width-height defs))
+         (width (car width-height))
+         (height (cdr width-height))
+         (filename (output-filename name)))
     (postscript->pdf width height filename)))
 
 (define-public (convert-to-png book name)
   (let* ((defs (ly:paper-book-paper book))
-        (resolution (output-resolution defs))
-        (width-height (output-width-height defs))
-        (width (car width-height))
-        (height (cdr width-height))
-        (filename (output-filename name)))
+         (resolution (output-resolution defs))
+         (width-height (output-width-height defs))
+         (width (car width-height))
+         (height (cdr width-height))
+         (filename (output-filename name)))
     (postscript->png resolution width height filename)))
 
 (define-public (convert-to-ps book name)
index a47eb185fd602112956fff3bf14e4f5caf5d30d4..915e97ded39ae23b439b7d7319c0cf0cc83e9161 100644 (file)
@@ -3,31 +3,31 @@
 (define-module (scm framework-scm))
 
 (use-modules
 (ice-9 regex)
 (ice-9 string-fun)
 (guile)
 (srfi srfi-1)
 (ice-9 pretty-print)
 (srfi srfi-13)
 (scm page)
 (lily))
+ (ice-9 regex)
+ (ice-9 string-fun)
+ (guile)
+ (srfi srfi-1)
+ (ice-9 pretty-print)
+ (srfi srfi-13)
+ (scm page)
+ (lily))
 
 (define format ergonomic-simple-format)
 
 (define-public (output-framework basename book scopes fields)
   (let* ((file (open-output-file (format #f "~a.scm" basename))))
-    
+
     (display ";;Creator: LilyPond\n" file)
     (display ";; raw SCM output\n" file)
-    
+
     (for-each
-      (lambda (page)
-       (display ";;;;;;;;;;;;;;;;;;;;;;;;;;\n;;;PAGE\n" file)
-       ;; The following two lines are alternates
-       ;(pretty-print (ly:stencil-expr page) file)
-       (write (ly:stencil-expr page) file)
-       )
-      (map page-stencil (ly:paper-book-pages book)))))
+     (lambda (page)
+       (display ";;;;;;;;;;;;;;;;;;;;;;;;;;\n;;;PAGE\n" file)
+       ;; The following two lines are alternates
+       ;;(pretty-print (ly:stencil-expr page) file)
+       (write (ly:stencil-expr page) file)
+       )
+     (map page-stencil (ly:paper-book-pages book)))))
 
 (define-public output-classic-framework output-framework)
 
index dd542935555cfb61e62d91cf27b8843998817cda..3eaf4710d1873bd38ab877897720cad06398fb5b 100644 (file)
@@ -5,72 +5,72 @@
   )
 
 (use-modules (ice-9 regex)
-            (ice-9 string-fun)
-            (scm paper-system)
-            (ice-9 format)
-            (guile)
-            (srfi srfi-1)
-            (ice-9 pretty-print)
-            (srfi srfi-13)
-            (lily))
+             (ice-9 string-fun)
+             (scm paper-system)
+             (ice-9 format)
+             (guile)
+             (srfi srfi-1)
+             (ice-9 pretty-print)
+             (srfi srfi-13)
+             (lily))
 
 (define (get-page-dimensions paper)
   (let* ((landscape (ly:output-def-lookup paper 'landscape))
-        (output-scale (ly:output-def-lookup paper 'output-scale))
-        (paper-width (ly:output-def-lookup paper 'paper-width))
-        (paper-height (ly:output-def-lookup paper 'paper-height))
-        (indent (ly:output-def-lookup paper 'indent))
-        (line-width (ly:output-def-lookup paper 'line-width))
-        (plain-left-margin (ly:output-def-lookup paper 'left-margin))
-        (top-margin (ly:output-def-lookup paper 'top-margin))
-        (w (if landscape paper-height paper-width))
-        (h (if landscape paper-width paper-height))
-        (left-margin (if (null? plain-left-margin)
-                         (/ (- w line-width) 2)
-                         plain-left-margin))
-;;      (list w h left-margin top-margin indent line-width)))
-;;      (convert (lambda (x) (* x output-scale (/ (ly:bp 1))))))
-        (unit-length (ly:output-def-lookup paper 'output-scale))
-        (convert (lambda (x) (* x lily-unit->mm-factor unit-length))))
+         (output-scale (ly:output-def-lookup paper 'output-scale))
+         (paper-width (ly:output-def-lookup paper 'paper-width))
+         (paper-height (ly:output-def-lookup paper 'paper-height))
+         (indent (ly:output-def-lookup paper 'indent))
+         (line-width (ly:output-def-lookup paper 'line-width))
+         (plain-left-margin (ly:output-def-lookup paper 'left-margin))
+         (top-margin (ly:output-def-lookup paper 'top-margin))
+         (w (if landscape paper-height paper-width))
+         (h (if landscape paper-width paper-height))
+         (left-margin (if (null? plain-left-margin)
+                          (/ (- w line-width) 2)
+                          plain-left-margin))
+         ;;      (list w h left-margin top-margin indent line-width)))
+         ;;      (convert (lambda (x) (* x output-scale (/ (ly:bp 1))))))
+         (unit-length (ly:output-def-lookup paper 'output-scale))
+         (convert (lambda (x) (* x lily-unit->mm-factor unit-length))))
     (map convert (list w h left-margin top-margin indent line-width))))
 
 (define-public (output-framework channel book scopes fields)
   (let* ((ctor-arg (if (string? channel)
-                      (open-output-file (format #f "~a.socket" channel))
-                      channel))
-        (outputter (ly:make-paper-outputter
-                    ctor-arg
-                    'socket))
-        (systems (ly:paper-book-systems book))
-        (paper (ly:paper-book-paper book))
-        (pages (ly:paper-book-pages book)))
+                       (open-output-file (format #f "~a.socket" channel))
+                       channel))
+         (outputter (ly:make-paper-outputter
+                     ctor-arg
+                     'socket))
+         (systems (ly:paper-book-systems book))
+         (paper (ly:paper-book-paper book))
+         (pages (ly:paper-book-pages book)))
     (for-each (lambda (x)
-               (let* ((system-stencil (paper-system-stencil x))
-                      (x-extent (ly:stencil-extent system-stencil X))
-                      (y-extent (ly:stencil-extent system-stencil Y)))
-                 (display (ly:format "system ~4l ~4l ~4l ~4l\n"
-                         (car x-extent) (car y-extent) (cdr x-extent) (cdr y-extent)) ctor-arg)
-                 (ly:outputter-dump-stencil outputter system-stencil)))
-             systems)))
+                (let* ((system-stencil (paper-system-stencil x))
+                       (x-extent (ly:stencil-extent system-stencil X))
+                       (y-extent (ly:stencil-extent system-stencil Y)))
+                  (display (ly:format "system ~4l ~4l ~4l ~4l\n"
+                                      (car x-extent) (car y-extent) (cdr x-extent) (cdr y-extent)) ctor-arg)
+                  (ly:outputter-dump-stencil outputter system-stencil)))
+              systems)))
 
 (define-public (output-classic-framework channel book scopes fields)
   (let* ((ctor-arg (if (string? channel)
-                      (open-output-file (format #f "~a.socket" channel))
-                      channel))
-        (outputter (ly:make-paper-outputter
-                    ctor-arg
-                    'socket))
-        (systems (ly:paper-book-systems book))
-        (paper (ly:paper-book-paper book)))
+                       (open-output-file (format #f "~a.socket" channel))
+                       channel))
+         (outputter (ly:make-paper-outputter
+                     ctor-arg
+                     'socket))
+         (systems (ly:paper-book-systems book))
+         (paper (ly:paper-book-paper book)))
     (display (ly:format "paper ~4l\n" (get-page-dimensions paper)) ctor-arg)
     (for-each (lambda (x)
-               (let* ((system-stencil (paper-system-stencil x))
-                      (x-extent (ly:stencil-extent system-stencil X))
-                      (y-extent (ly:stencil-extent system-stencil Y)))
-                 (display (ly:format "system ~4l ~4l ~4l ~4l\n"
-                         (car x-extent) (car y-extent) (cdr x-extent) (cdr y-extent)) ctor-arg)
-                 (ly:outputter-dump-stencil outputter system-stencil)))
-             systems)))
+                (let* ((system-stencil (paper-system-stencil x))
+                       (x-extent (ly:stencil-extent system-stencil X))
+                       (y-extent (ly:stencil-extent system-stencil Y)))
+                  (display (ly:format "system ~4l ~4l ~4l ~4l\n"
+                                      (car x-extent) (car y-extent) (cdr x-extent) (cdr y-extent)) ctor-arg)
+                  (ly:outputter-dump-stencil outputter system-stencil)))
+              systems)))
 
 (define-public (convert-to-ps . args) #t)
 (define-public (convert-to-pdf . args) #t)
index 84deff1b5f267150751ffd9f87692a7fc9e73a67..dad8bfa0f7b674eeb0fded7e19201e191e5be461 100644 (file)
 (define-module (scm framework-svg))
 
 (use-modules
 (guile)
 (lily)
 (scm page)
 (scm paper-system)
 (scm output-svg)
 (srfi srfi-1)
 (srfi srfi-2)
 (srfi srfi-13)
 (ice-9 regex))
+ (guile)
+ (lily)
+ (scm page)
+ (scm paper-system)
+ (scm output-svg)
+ (srfi srfi-1)
+ (srfi srfi-2)
+ (srfi srfi-13)
+ (ice-9 regex))
 
 (define format ergonomic-simple-format)
 
@@ -52,8 +52,8 @@
       `(width . ,(ly:format "~2fmm" (first rest)))
       `(height . ,(ly:format "~2fmm" (second rest)))
       `(viewBox . ,(ly:format "~4f ~4f ~4f ~4f"
-                             (third rest) (fourth rest)
-                             (fifth rest) (sixth rest)))))
+                              (third rest) (fourth rest)
+                              (fifth rest) (sixth rest)))))
 
 (define (svg-end)
   (ec 'svg))
 (define (mkdirs dir-name mode)
   (let loop ((dir-name (string-split dir-name #\/)) (root ""))
     (if (pair? dir-name)
-       (let ((dir (string-append root (car dir-name))))
-         (if (not (file-exists? dir))
-             (mkdir dir mode))
-         (loop (cdr dir-name) (string-append dir "/"))))))
-   
+        (let ((dir (string-append root (car dir-name))))
+          (if (not (file-exists? dir))
+              (mkdir dir mode))
+          (loop (cdr dir-name) (string-append dir "/"))))))
+
 (define output-dir #f)
 
 (define (svg-define-font font font-name scaling)
   (let* ((base-file-name (basename (if (list? font) (pango-pf-file-name font)
-                                      (ly:font-file-name font)) ".otf"))
-        (woff-file-name (string-regexp-substitute "([.]otf)?$" ".woff"
-                                                   base-file-name))
-        (woff-file (or (ly:find-file woff-file-name) "/no-such-file.woff"))
-        (url (string-append output-dir "/fonts/" (lilypond-version) "/"
-                            (basename woff-file-name)))
-        (lower-name (string-downcase font-name)))
+                                       (ly:font-file-name font)) ".otf"))
+         (woff-file-name (string-regexp-substitute "([.]otf)?$" ".woff"
+                                                   base-file-name))
+         (woff-file (or (ly:find-file woff-file-name) "/no-such-file.woff"))
+         (url (string-append output-dir "/fonts/" (lilypond-version) "/"
+                             (basename woff-file-name)))
+         (lower-name (string-downcase font-name)))
     (if (file-exists? woff-file)
-       (begin
-         (if (not (file-exists? url))
-             (begin
-               (ly:message (_ "Updating font into: ~a") url)
-               (mkdirs (string-append output-dir "/" (dirname url)) #o700)
-               (copy-file woff-file url)
-               (ly:progress "\n")))
-         (ly:format
-          "@font-face {
+        (begin
+          (if (not (file-exists? url))
+              (begin
+                (ly:message (_ "Updating font into: ~a") url)
+                (mkdirs (string-append output-dir "/" (dirname url)) #o700)
+                (copy-file woff-file url)
+                (ly:progress "\n")))
+          (ly:format
+           "@font-face {
 font-family: '~a';
 font-weight: normal;
 font-style: normal;
 src: url('~a');
 }
 "
-          font-name url))
-       "")))
+           font-name url))
+        "")))
 
 (define (woff-header paper dir)
   "TODO:
@@ -115,57 +115,57 @@ src: url('~a');
 
 (define (dump-page paper filename page page-number page-count)
   (let* ((outputter (ly:make-paper-outputter (open-file filename "wb") 'svg))
-        (dump (lambda (str) (display str (ly:outputter-port outputter))))
-        (lookup (lambda (x) (ly:output-def-lookup paper x)))
-        (unit-length (lookup 'output-scale))
-        (output-scale (* lily-unit->mm-factor unit-length))
-        (device-width (lookup 'paper-width))
-        (device-height (lookup 'paper-height))
-        (page-width (* output-scale device-width))
-        (page-height (* output-scale device-height)))
+         (dump (lambda (str) (display str (ly:outputter-port outputter))))
+         (lookup (lambda (x) (ly:output-def-lookup paper x)))
+         (unit-length (lookup 'output-scale))
+         (output-scale (* lily-unit->mm-factor unit-length))
+         (device-width (lookup 'paper-width))
+         (device-height (lookup 'paper-height))
+         (page-width (* output-scale device-width))
+         (page-height (* output-scale device-height)))
 
     (if (ly:get-option 'svg-woff)
-       (module-define! (ly:outputter-module outputter) 'paper paper))
+        (module-define! (ly:outputter-module outputter) 'paper paper))
     (dump (svg-begin page-width page-height
-                    0 0 device-width device-height))
+                     0 0 device-width device-height))
     (if (ly:get-option 'svg-woff)
-       (module-remove! (ly:outputter-module outputter) 'paper))
+        (module-remove! (ly:outputter-module outputter) 'paper))
     (if (ly:get-option 'svg-woff)
-       (dump (woff-header paper (dirname filename))))
+        (dump (woff-header paper (dirname filename))))
     (dump (comment (format #f "Page: ~S/~S" page-number page-count)))
     (ly:outputter-output-scheme outputter
-                               `(begin (set! lily-unit-length ,unit-length)
-                                       ""))
+                                `(begin (set! lily-unit-length ,unit-length)
+                                        ""))
     (ly:outputter-dump-stencil outputter page)
     (dump (svg-end))
     (ly:outputter-close outputter)))
 
 (define (dump-preview paper stencil filename)
   (let* ((outputter (ly:make-paper-outputter (open-file filename "wb") 'svg))
-        (dump (lambda (str) (display str (ly:outputter-port outputter))))
-        (lookup (lambda (x) (ly:output-def-lookup paper x)))
-        (unit-length (lookup 'output-scale))
-        (x-extent (ly:stencil-extent stencil X))
-        (y-extent (ly:stencil-extent stencil Y))
-        (left-x (car x-extent))
-        (top-y (cdr y-extent))
-        (device-width (interval-length x-extent))
-        (device-height (interval-length y-extent))
-        (output-scale (* lily-unit->mm-factor unit-length))
-        (svg-width (* output-scale device-width))
-        (svg-height (* output-scale device-height)))
+         (dump (lambda (str) (display str (ly:outputter-port outputter))))
+         (lookup (lambda (x) (ly:output-def-lookup paper x)))
+         (unit-length (lookup 'output-scale))
+         (x-extent (ly:stencil-extent stencil X))
+         (y-extent (ly:stencil-extent stencil Y))
+         (left-x (car x-extent))
+         (top-y (cdr y-extent))
+         (device-width (interval-length x-extent))
+         (device-height (interval-length y-extent))
+         (output-scale (* lily-unit->mm-factor unit-length))
+         (svg-width (* output-scale device-width))
+         (svg-height (* output-scale device-height)))
 
     (if (ly:get-option 'svg-woff)
-       (module-define! (ly:outputter-module outputter) 'paper paper))
+        (module-define! (ly:outputter-module outputter) 'paper paper))
     (dump (svg-begin svg-width svg-height
-                    left-x (- top-y) device-width device-height))
+                     left-x (- top-y) device-width device-height))
     (if (ly:get-option 'svg-woff)
-       (module-remove! (ly:outputter-module outputter) 'paper))
+        (module-remove! (ly:outputter-module outputter) 'paper))
     (if (ly:get-option 'svg-woff)
-       (dump (woff-header paper (dirname filename))))
+        (dump (woff-header paper (dirname filename))))
     (ly:outputter-output-scheme outputter
-                               `(begin (set! lily-unit-length ,unit-length)
-                                       ""))
+                                `(begin (set! lily-unit-length ,unit-length)
+                                        ""))
     (ly:outputter-dump-stencil outputter stencil)
     (dump (svg-end))
     (ly:outputter-close outputter)))
@@ -173,27 +173,27 @@ src: url('~a');
 
 (define (output-framework basename book scopes fields)
   (let* ((paper (ly:paper-book-paper book))
-        (page-stencils (map page-stencil (ly:paper-book-pages book)))
-        (page-number (1- (ly:output-def-lookup paper 'first-page-number)))
-        (page-count (length page-stencils))
-        (filename "")
-        (file-suffix (lambda (num)
-                       (if (= page-count 1) "" (format #f "-page-~a" num)))))
+         (page-stencils (map page-stencil (ly:paper-book-pages book)))
+         (page-number (1- (ly:output-def-lookup paper 'first-page-number)))
+         (page-count (length page-stencils))
+         (filename "")
+         (file-suffix (lambda (num)
+                        (if (= page-count 1) "" (format #f "-page-~a" num)))))
     (for-each
-      (lambda (page)
-       (set! page-number (1+ page-number))
-       (set! filename (format #f "~a~a.svg"
-                              basename
-                              (file-suffix page-number)))
-       (dump-page paper filename page page-number page-count))
-      page-stencils)))
+     (lambda (page)
+       (set! page-number (1+ page-number))
+       (set! filename (format #f "~a~a.svg"
+                              basename
+                              (file-suffix page-number)))
+       (dump-page paper filename page page-number page-count))
+     page-stencils)))
 
 (define (output-preview-framework basename book scopes fields)
   (let* ((paper (ly:paper-book-paper book))
-        (systems (relevant-book-systems book))
-        (to-dump-systems (relevant-dump-systems systems)))
+         (systems (relevant-book-systems book))
+         (to-dump-systems (relevant-dump-systems systems)))
     (dump-preview paper
-                 (stack-stencils Y DOWN 0.0
-                                 (map paper-system-stencil
-                                      (reverse to-dump-systems)))
-                 (format #f "~a.preview.svg" basename))))
+                  (stack-stencils Y DOWN 0.0
+                                  (map paper-system-stencil
+                                       (reverse to-dump-systems)))
+                  (format #f "~a.preview.svg" basename))))
index a6645dc762d61024ae9cfeca770b9c03970a64de..3359608345dbbe082a20494ff85924f82d9065f6 100644 (file)
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-;
-;  Utility functions
-;
-;
+;;  Utility functions
 
 (define (string-x-extent start-point end-point)
   "Return the x-extent of a string that goes from start-point
 to end-point."
   (let ((x1 (car start-point))
-         (x2 (car end-point)))
+        (x2 (car end-point)))
     (if (> x1 x2)
         (cons x2 x1)
         (cons x1 x2))))
@@ -33,7 +30,7 @@ to end-point."
   "Return the y-extent of a string that goes from start-point
 to end-point."
   (let ((y1 (cdr start-point))
-         (y2 (cdr end-point)))
+        (y2 (cdr end-point)))
     (if (> y1 y2)
         (cons y2 y1)
         (cons y1 y2))))
@@ -64,8 +61,8 @@ to end-point."
   (* 6 (/ (log mag) (log 2))))
 
 (define (fret-count fret-range)
- "Calculate the fret count for the diagram given the range of frets in the diagram."
- (1+ (- (cdr fret-range) (car fret-range))))
 "Calculate the fret count for the diagram given the range of frets in the diagram."
 (1+ (- (cdr fret-range) (car fret-range))))
 
 (define (subtract-base-fret base-fret dot-list)
   "Subtract @var{base-fret} from every fret in @var{dot-list}"
@@ -130,57 +127,53 @@ found."
   (helper key alist-list
           (if (pair? default) (car default) #f)))
 
-;
-;  Conversions between fret/string coordinate system and x-y coordinate
-;  system.
-;
-;  Fret coordinates are measured down the fretboard from the nut,
-;   starting at 0.
-;
-; String coordinates are measured from the lowest string, starting at 0.
-;
-; The x-y origin is at the intersection of the nut and the lowest string.
-;
-; X coordinates are positive to the right.
-; Y coordinates are positive up.
-;
+;;  Conversions between fret/string coordinate system and x-y coordinate
+;;  system.
+;;
+;;  Fret coordinates are measured down the fretboard from the nut,
+;;   starting at 0.
+;;
+;; String coordinates are measured from the lowest string, starting at 0.
+;;
+;; The x-y origin is at the intersection of the nut and the lowest string.
+;;
+;; X coordinates are positive to the right.
+;; Y coordinates are positive up.
 
 (define (negate-extent extent)
   "Return the extent in an axis opposite to the axis of @code{extent}."
-   (cons (- (cdr extent)) (- (car extent))))
+  (cons (- (cdr extent)) (- (car extent))))
 
 (define (stencil-fretboard-extent stencil fretboard-axis orientation)
   "Return the extent of @code{stencil} in the @code{fretboard-axis}
 direction."
   (if (eq? fretboard-axis 'fret)
-  (cond ((eq? orientation 'landscape)
-         (ly:stencil-extent stencil X))
-        ((eq? orientation 'opposing-landscape)
-         (negate-extent (ly:stencil-extent stencil X)))
-        (else
-         (negate-extent (ly:stencil-extent stencil Y))))
-        ; else -- eq? fretboard-axis 'string
-  (cond ((eq? orientation 'landscape)
-         (ly:stencil-extent stencil Y))
-        ((eq? orientation 'opposing-landscape)
-         (negate-extent (ly:stencil-extent stencil Y)))
-        (else
-         (ly:stencil-extent stencil Y)))))
+      (cond ((eq? orientation 'landscape)
+             (ly:stencil-extent stencil X))
+            ((eq? orientation 'opposing-landscape)
+             (negate-extent (ly:stencil-extent stencil X)))
+            (else
+             (negate-extent (ly:stencil-extent stencil Y))))
+      ;; else -- eq? fretboard-axis 'string
+      (cond ((eq? orientation 'landscape)
+             (ly:stencil-extent stencil Y))
+            ((eq? orientation 'opposing-landscape)
+             (negate-extent (ly:stencil-extent stencil Y)))
+            (else
+             (ly:stencil-extent stencil Y)))))
 
 
 (define (stencil-fretboard-offset stencil fretboard-axis orientation)
- "Return a the stencil coordinates of the center of @code{stencil}
 "Return a the stencil coordinates of the center of @code{stencil}
 in the @code{fretboard-axis} direction."
   (* 0.5 (interval-length
-           (stencil-fretboard-extent stencil fretboard-axis orientation))))
+          (stencil-fretboard-extent stencil fretboard-axis orientation))))
 
 
 (define (string-thickness string thickness-factor)
   (expt (1+ thickness-factor) (1- string)))
 
-;
-;  Functions that create stencils used in the fret diagram
-;
+;;  Functions that create stencils used in the fret diagram
 
 (define (sans-serif-stencil layout props mag text)
   "Create a stencil in sans-serif font based on @var{layout} and @var{props}
@@ -191,16 +184,11 @@ with magnification @var{mag} of the string @var{text}."
            (prepend-alist-chain 'font-family 'sans props))))
     (interpret-markup layout my-props text)))
 
-;;
-;;
 ;;  markup commands and associated functions
-;;
-;;
-;;
 
 (define (fret-parse-marking-list marking-list my-fret-count)
- "Parse a fret-diagram-verbose marking list into component sublists"
- (let* ((fret-range (cons 1 my-fret-count))
 "Parse a fret-diagram-verbose marking list into component sublists"
 (let* ((fret-range (cons 1 my-fret-count))
          (capo-fret 0)
          (barre-list '())
          (dot-list '())
@@ -215,7 +203,7 @@ with magnification @var{mag} of the string @var{text}."
              ((eq? my-code 'barre)
               (set! barre-list (cons* (cdr my-item) barre-list)))
              ((eq? my-code 'capo)
-               (set! capo-fret (cadr my-item)))
+              (set! capo-fret (cadr my-item)))
              ((eq? my-code 'place-fret)
               (set! dot-list (cons* (cdr my-item) dot-list))))
             (parse-item (cdr mylist)))))
@@ -229,13 +217,13 @@ with magnification @var{mag} of the string @var{text}."
               (if (> fretval maxfret) (set! maxfret fretval))
               (if (< fretval minfret) (set! minfret fretval))
               (updatemax (cdr fret-list)))))
-      (if (> maxfret my-fret-count)
+      (if (or (> maxfret my-fret-count) (> capo-fret 1))
           (set! fret-range
                 (cons minfret
                       (let ((upfret (- (+ minfret my-fret-count) 1)))
                         (if (> maxfret upfret) maxfret upfret)))))
       (set! capo-fret (1+ (- capo-fret minfret)))
-      ; subtract fret from dots
+      ;; subtract fret from dots
       (set! dot-list (subtract-base-fret (- (car fret-range) 1) dot-list)))
     (acons 'fret-range fret-range
            (acons 'barre-list barre-list
@@ -246,46 +234,46 @@ with magnification @var{mag} of the string @var{text}."
 (define (make-fret-diagram layout props marking-list)
   "Make a fret diagram markup"
   (let* (
-         ; note: here we get items from props that are needed in this routine,
-         ; or that are needed in more than one of the procedures
-         ; called from this routine.  If they're only used in one of the
-         ; sub-procedure, they're obtained in that procedure
+         ;; note: here we get items from props that are needed in this routine,
+         ;; or that are needed in more than one of the procedures
+         ;; called from this routine.  If they're only used in one of the
+         ;; sub-procedure, they're obtained in that procedure
          (size (chain-assoc-get 'size props 1.0)) ; needed for everything
-         ;TODO -- get string-count directly from length of stringTunings;
-         ;         from FretBoard engraver, but not from markup call
+         ;;TODO -- get string-count directly from length of stringTunings;
+         ;;         from FretBoard engraver, but not from markup call
          (details (merge-details 'fret-diagram-details props '()))
          (string-count
-           (assoc-get 'string-count details 6)) ; needed for everything
+          (assoc-get 'string-count details 6)) ;; needed for everything
          (my-fret-count
-           (assoc-get 'fret-count details 4)) ; needed for everything
+          (assoc-get 'fret-count details 4)) ;; needed for everything
          (orientation
-           (assoc-get 'orientation details 'normal)) ; needed for everything
+          (assoc-get 'orientation details 'normal)) ;; needed for everything
          (finger-code
-           (assoc-get
-             'finger-code details 'none)) ; needed for draw-dots and draw-barre
+          (assoc-get
+           'finger-code details 'none)) ;; needed for draw-dots and draw-barre
          (default-dot-radius
-           (if (eq? finger-code 'in-dot) 0.425 0.25)) ; bigger dots if labeled
+           (if (eq? finger-code 'in-dot) 0.425 0.25)) ;; bigger dots if labeled
          (default-dot-position
            (if (eq? finger-code 'in-dot)
                (- 0.95 default-dot-radius)
                0.6)) ; move up to make room for bigger dot if labeled
          (dot-radius
-           (assoc-get
-             'dot-radius details default-dot-radius))  ; needed for draw-dots
-                                                       ; and draw-barre
+          (assoc-get
+           'dot-radius details default-dot-radius))
+         ;; needed for draw-dots and draw-barre
          (dot-position
-           (assoc-get
-             'dot-position details default-dot-position)) ; needed for
-                                                    ; draw-dots and draw-barre
+          (assoc-get
+           'dot-position details default-dot-position))
+         ;; needed for draw-dots and draw-barre
          (th
-           (* (ly:output-def-lookup layout 'line-thickness)
-              (chain-assoc-get 'thickness props 0.5))) ; needed for draw-frets
-                                                       ; and draw-strings
+          (* (ly:output-def-lookup layout 'line-thickness)
+             (chain-assoc-get 'thickness props 0.5)))
+         ;; needed for draw-frets and draw-strings
          (sth (* size th))
          (thickness-factor (assoc-get 'string-thickness-factor details 0))
          (alignment
-           (chain-assoc-get 'align-dir props -0.4)) ; needed only here
-         (xo-padding (assoc-get 'xo-padding details 0.2)) ; needed only here
+          (chain-assoc-get 'align-dir props -0.4)) ;; needed only here
+         (xo-padding (assoc-get 'xo-padding details 0.2)) ;; needed only here
          (parameters (fret-parse-marking-list marking-list my-fret-count))
          (capo-fret (assoc-get 'capo-fret parameters 0))
          (dot-list (assoc-get 'dot-list parameters))
@@ -294,9 +282,9 @@ with magnification @var{mag} of the string @var{text}."
          (my-fret-count (fret-count fret-range))
          (barre-list (assoc-get 'barre-list parameters))
          (barre-type
-           (assoc-get 'barre-type details 'curved))
+          (assoc-get 'barre-type details 'curved))
          (fret-diagram-stencil '()))
-    ;
+
     ;;  Here are the fret diagram helper functions that depend on the
     ;;  fret diagram parameters.  The functions are here because the
     ;;  diagram parameters are part of the lexical scope here.
@@ -305,24 +293,24 @@ with magnification @var{mag} of the string @var{text}."
       "Return a pair @code{(x-coordinate . y-coordinate)}
       in stencil coordinate system."
       (cond
-        ((eq? orientation 'landscape)
-         (cons fret-coordinate
-               (- string-coordinate (1- string-count))))
-        ((eq? orientation 'opposing-landscape)
-         (cons (- fret-coordinate) (- string-coordinate)))
-        (else
-          (cons string-coordinate (- fret-coordinate)))))
+       ((eq? orientation 'landscape)
+        (cons fret-coordinate
+              (- string-coordinate (1- string-count))))
+       ((eq? orientation 'opposing-landscape)
+        (cons (- fret-coordinate) (- string-coordinate)))
+       (else
+        (cons string-coordinate (- fret-coordinate)))))
 
     (define (stencil-coordinate-offset fret-offset string-offset)
       "Return a pair @code{(x-offset . y-offset)}
       for translation in stencil coordinate system."
       (cond
-        ((eq? orientation 'landscape)
-         (cons fret-offset (- string-offset)))
-        ((eq? orientation 'opposing-landscape)
-         (cons (- fret-offset) string-offset))
-        (else
-          (cons string-offset (- fret-offset)))))
+       ((eq? orientation 'landscape)
+        (cons fret-offset (- string-offset)))
+       ((eq? orientation 'opposing-landscape)
+        (cons (- fret-offset) string-offset))
+       (else
+        (cons string-offset (- fret-offset)))))
 
 
 
@@ -332,41 +320,42 @@ with magnification @var{mag} of the string @var{text}."
 string coordinate @var{start} to string-coordinate @var{stop} with a
 baseline at fret coordinate @var{base}, a height of
 @var{height}, and a half thickness of @var{half-thickness}."
-     (let* ((width (+ (- stop start) 1))
-           (cp-left-width (+ (* width half-thickness) start))
-           (cp-right-width (- stop (* width half-thickness)))
-           (bottom-control-point-height
-             (- base (- height half-thickness)))
-           (top-control-point-height
-             (- base height))
-           (left-end-point
-             (stencil-coordinates base start))
-           (right-end-point
-             (stencil-coordinates base stop))
-           (left-upper-control-point
-             (stencil-coordinates
+      (let* ((width (+ (- stop start) 1))
+             (cp-left-width (+ (* width half-thickness) start))
+             (cp-right-width (- stop (* width half-thickness)))
+             (bottom-control-point-height
+              (- base (- height half-thickness)))
+             (top-control-point-height
+              (- base height))
+             (left-end-point
+              (stencil-coordinates base start))
+             (right-end-point
+              (stencil-coordinates base stop))
+             (left-upper-control-point
+              (stencil-coordinates
                top-control-point-height cp-left-width))
-           (left-lower-control-point
-             (stencil-coordinates
+             (left-lower-control-point
+              (stencil-coordinates
                bottom-control-point-height cp-left-width))
-           (right-upper-control-point
-             (stencil-coordinates
+             (right-upper-control-point
+              (stencil-coordinates
                top-control-point-height cp-right-width))
-           (right-lower-control-point
-             (stencil-coordinates
+             (right-lower-control-point
+              (stencil-coordinates
                bottom-control-point-height cp-right-width)))
-      ; order of bezier control points is:
-      ;    left cp low, right cp low, right end low, left end low
-      ;    right cp high, left cp high, left end high, right end high.
-      ;
-      (list left-lower-control-point
-            right-lower-control-point
-            right-end-point
-            left-end-point
-            right-upper-control-point
-            left-upper-control-point
-            left-end-point
-            right-end-point)))
+
+        ;; order of bezier control points is:
+        ;;    left cp low, right cp low, right end low, left end low
+        ;;   right cp high, left cp high, left end high, right end high.
+
+        (list left-lower-control-point
+              right-lower-control-point
+              right-end-point
+              left-end-point
+              right-upper-control-point
+              left-upper-control-point
+              left-end-point
+              right-end-point)))
 
     (define (draw-strings)
       "Draw the string lines for a fret diagram with
@@ -376,10 +365,10 @@ Line thickness is given by @var{th}, fret & string spacing by
 
       (define (helper x)
         (if (null? (cdr x))
-          (string-stencil (car x))
-          (ly:stencil-add
             (string-stencil (car x))
-            (helper (cdr x)))))
+            (ly:stencil-add
+             (string-stencil (car x))
+             (helper (cdr x)))))
 
       (let* ( (string-list (map 1+ (iota string-count))))
         (helper string-list)))
@@ -389,17 +378,17 @@ Line thickness is given by @var{th}, fret & string spacing by
       overall parameters."
       (let* ((string-coordinate (- string-count string))
              (current-string-thickness
-               (* th size (string-thickness string thickness-factor)))
+              (* th size (string-thickness string thickness-factor)))
              (fret-half-thickness (* size th 0.5))
              (half-string (* current-string-thickness 0.5))
              (start-coordinates
-               (stencil-coordinates
-                 (- fret-half-thickness)
-                 (- (* size string-coordinate) half-string)))
+              (stencil-coordinates
+               (- fret-half-thickness)
+               (- (* size string-coordinate) half-string)))
              (end-coordinates
-               (stencil-coordinates
-                 (+ fret-half-thickness (* size (1+ (fret-count fret-range))))
-                 (+ half-string (* size string-coordinate)))))
+              (stencil-coordinates
+               (+ fret-half-thickness (* size (1+ (fret-count fret-range))))
+               (+ half-string (* size string-coordinate)))))
         (ly:round-filled-box
          (string-x-extent start-coordinates end-coordinates)
          (string-y-extent start-coordinates end-coordinates)
@@ -412,146 +401,146 @@ Line thickness is given by @var{th}, fret & string spacing by
 @var{size}.  Orientation is given by @var{orientation}."
       (define (helper x)
         (if (null? (cdr x))
-          (fret-stencil (car x))
-          (ly:stencil-add
             (fret-stencil (car x))
-            (helper (cdr x)))))
+            (ly:stencil-add
+             (fret-stencil (car x))
+             (helper (cdr x)))))
 
       (let ((fret-list (iota (1+ my-fret-count))))
         (helper fret-list)))
 
-     (define (fret-stencil fret)
-        "Make a stencil for @code{fret}, given the
+    (define (fret-stencil fret)
+      "Make a stencil for @code{fret}, given the
 fret-diagram overall parameters."
-       (let* ((low-string-half-thickness
-                (* 0.5
-                   size
-                   th
-                   (string-thickness string-count thickness-factor)))
-              (fret-half-thickness (* 0.5 size th))
-              (start-coordinates
-                (stencil-coordinates
-                  (* size fret)
-                  (- fret-half-thickness low-string-half-thickness)))
-              (end-coordinates
-                (stencil-coordinates
-                  (* size fret)
-                  (* size (1- string-count)))))
-         (make-line-stencil
-           (* size th)
-           (car start-coordinates) (cdr start-coordinates)
-           (car end-coordinates) (cdr end-coordinates))))
-
-     (define (draw-barre barre-list)
-       "Create barre indications for a fret diagram"
-       (if (not (null? barre-list))
-         (let* ((string1 (caar barre-list))
-                (string2 (cadar barre-list))
-                (barre-fret (caddar barre-list))
-                (top-fret (cdr fret-range))
-                (low-fret (car fret-range))
-                (fret (1+ (- barre-fret low-fret)))
-                (barre-vertical-offset 0.5)
-                (dot-center-fret-coordinate (+ (1- fret) dot-position))
-                (barre-fret-coordinate
+      (let* ((low-string-half-thickness
+              (* 0.5
+                 size
+                 th
+                 (string-thickness string-count thickness-factor)))
+             (fret-half-thickness (* 0.5 size th))
+             (start-coordinates
+              (stencil-coordinates
+               (* size fret)
+               (- fret-half-thickness low-string-half-thickness)))
+             (end-coordinates
+              (stencil-coordinates
+               (* size fret)
+               (* size (1- string-count)))))
+        (make-line-stencil
+         (* size th)
+         (car start-coordinates) (cdr start-coordinates)
+         (car end-coordinates) (cdr end-coordinates))))
+
+    (define (draw-barre barre-list)
+      "Create barre indications for a fret diagram"
+      (if (not (null? barre-list))
+          (let* ((string1 (caar barre-list))
+                 (string2 (cadar barre-list))
+                 (barre-fret (caddar barre-list))
+                 (top-fret (cdr fret-range))
+                 (low-fret (car fret-range))
+                 (fret (1+ (- barre-fret low-fret)))
+                 (barre-vertical-offset 0.5)
+                 (dot-center-fret-coordinate (+ (1- fret) dot-position))
+                 (barre-fret-coordinate
                   (+ dot-center-fret-coordinate
                      (* (- barre-vertical-offset 0.5) dot-radius)))
-                (barre-start-string-coordinate (- string-count string1))
-                (barre-end-string-coordinate (- string-count string2))
-                (scale-dot-radius (* size dot-radius))
-                (barre-type (assoc-get 'barre-type details 'curved))
-                (barre-stencil
+                 (barre-start-string-coordinate (- string-count string1))
+                 (barre-end-string-coordinate (- string-count string2))
+                 (scale-dot-radius (* size dot-radius))
+                 (barre-type (assoc-get 'barre-type details 'curved))
+                 (barre-stencil
                   (cond
-                    ((eq? barre-type 'straight)
-                     (make-straight-barre-stencil
-                       barre-fret-coordinate
-                       barre-start-string-coordinate
-                       barre-end-string-coordinate
-                       scale-dot-radius))
-                    ((eq? barre-type 'curved)
-                     (make-curved-barre-stencil
-                       barre-fret-coordinate
-                       barre-start-string-coordinate
-                       barre-end-string-coordinate
-                       scale-dot-radius)))))
-           (if (not (null? (cdr barre-list)))
-             (ly:stencil-add
-               barre-stencil
-               (draw-barre (cdr barre-list)))
-             barre-stencil ))))
-
-     (define (make-straight-barre-stencil
-               fret-coordinate
-               start-string-coordinate
-               end-string-coordinate
-               half-thickness)
-       "Create a straight barre stencil."
-       (let ((start-point
-               (stencil-coordinates
-                 (* size fret-coordinate)
-                 (* size start-string-coordinate)))
-             (end-point
-               (stencil-coordinates
-                 (* size fret-coordinate)
-                 (* size end-string-coordinate))))
-         (make-line-stencil
-           half-thickness
-           (car start-point)
-           (cdr start-point)
-           (car end-point)
-           (cdr end-point))))
-
-     (define (make-curved-barre-stencil
-               fret-coordinate
-               start-string-coordinate
-               end-string-coordinate
-               half-thickness)
-       "Create a curved barre stencil."
-       (let* ((bezier-thick 0.1)
-              (bezier-height 0.5)
-              (bezier-list
-                (make-bezier-sandwich-list
-                  (* size start-string-coordinate)
-                  (* size end-string-coordinate)
-                  (* size fret-coordinate)
+                   ((eq? barre-type 'straight)
+                    (make-straight-barre-stencil
+                     barre-fret-coordinate
+                     barre-start-string-coordinate
+                     barre-end-string-coordinate
+                     scale-dot-radius))
+                   ((eq? barre-type 'curved)
+                    (make-curved-barre-stencil
+                     barre-fret-coordinate
+                     barre-start-string-coordinate
+                     barre-end-string-coordinate
+                     scale-dot-radius)))))
+            (if (not (null? (cdr barre-list)))
+                (ly:stencil-add
+                 barre-stencil
+                 (draw-barre (cdr barre-list)))
+                barre-stencil ))))
+
+    (define (make-straight-barre-stencil
+             fret-coordinate
+             start-string-coordinate
+             end-string-coordinate
+             half-thickness)
+      "Create a straight barre stencil."
+      (let ((start-point
+             (stencil-coordinates
+              (* size fret-coordinate)
+              (* size start-string-coordinate)))
+            (end-point
+             (stencil-coordinates
+              (* size fret-coordinate)
+              (* size end-string-coordinate))))
+        (make-line-stencil
+         half-thickness
+         (car start-point)
+         (cdr start-point)
+         (car end-point)
+         (cdr end-point))))
+
+    (define (make-curved-barre-stencil
+             fret-coordinate
+             start-string-coordinate
+             end-string-coordinate
+             half-thickness)
+      "Create a curved barre stencil."
+      (let* ((bezier-thick 0.1)
+             (bezier-height 0.5)
+             (bezier-list
+              (make-bezier-sandwich-list
+               (* size start-string-coordinate)
+               (* size end-string-coordinate)
+               (* size fret-coordinate)
+               (* size bezier-height)
+               (* size bezier-thick)))
+             (box-lower-left
+              (stencil-coordinates
+               (+ (* size fret-coordinate) half-thickness)
+               (- (* size start-string-coordinate) half-thickness)))
+             (box-upper-right
+              (stencil-coordinates
+               (- (* size fret-coordinate)
                   (* size bezier-height)
-                  (* size bezier-thick)))
-              (box-lower-left
-                (stencil-coordinates
-                  (+ (* size fret-coordinate) half-thickness)
-                  (- (* size start-string-coordinate) half-thickness)))
-              (box-upper-right
-                (stencil-coordinates
-                  (- (* size fret-coordinate)
-                     (* size bezier-height)
-                     half-thickness)
-                  (+ (* size end-string-coordinate) half-thickness)))
-              (x-extent (cons (car box-lower-left) (car box-upper-right)))
-              (y-extent (cons (cdr box-lower-left) (cdr box-upper-right))))
-         (make-bezier-sandwich-stencil
-           bezier-list
-           (* size bezier-thick)
-           x-extent
-           y-extent)))
-
-     (define (draw-dots dot-list)
-       "Make dots for fret diagram."
-
-       (let* ( (scale-dot-radius (* size dot-radius))
+                  half-thickness)
+               (+ (* size end-string-coordinate) half-thickness)))
+             (x-extent (cons (car box-lower-left) (car box-upper-right)))
+             (y-extent (cons (cdr box-lower-left) (cdr box-upper-right))))
+        (make-bezier-sandwich-stencil
+         bezier-list
+         (* size bezier-thick)
+         x-extent
+         y-extent)))
+
+    (define (draw-dots dot-list)
+      "Make dots for fret diagram."
+
+      (let* ( (scale-dot-radius (* size dot-radius))
               (scale-dot-thick (* size th))
               (default-dot-color (assoc-get 'dot-color details 'black))
               (finger-label-padding 0.3)
               (dot-label-font-mag
-                (* scale-dot-radius
-                   (assoc-get 'dot-label-font-mag details 1.0)))
+               (* scale-dot-radius
+                  (assoc-get 'dot-label-font-mag details 1.0)))
               (string-label-font-mag
-                (* size
-                   (assoc-get
-                     'string-label-font-mag details
-                     (cond ((or (eq? orientation 'landscape)
-                                (eq? orientation 'opposing-landscape))
-                            0.5)
-                           (else  0.6)))))
+               (* size
+                  (assoc-get
+                   'string-label-font-mag details
+                   (cond ((or (eq? orientation 'landscape)
+                              (eq? orientation 'opposing-landscape))
+                          0.5)
+                         (else  0.6)))))
               (mypair (car dot-list))
               (restlist (cdr dot-list))
               (string (car mypair))
@@ -559,7 +548,7 @@ fret-diagram overall parameters."
               (fret-coordinate (* size (+ (1- fret) dot-position)))
               (string-coordinate (* size (- string-count string)))
               (dot-coordinates
-                (stencil-coordinates fret-coordinate string-coordinate))
+               (stencil-coordinates fret-coordinate string-coordinate))
               (extent (cons (- scale-dot-radius) scale-dot-radius))
               (finger (caddr mypair))
               (finger (if (number? finger) (number->string finger) finger))
@@ -569,307 +558,306 @@ fret-diagram overall parameters."
                              'white
                              'black))
               (dot-stencil (if (eq? dot-color 'white)
-                             (ly:stencil-add
-                               (make-circle-stencil
+                               (ly:stencil-add
+                                (make-circle-stencil
                                  scale-dot-radius scale-dot-thick #t)
-                               (ly:stencil-in-color
+                                (ly:stencil-in-color
                                  (make-circle-stencil
-                                   (- scale-dot-radius (* 0.5 scale-dot-thick))
-                                   0  #t)
+                                  (- scale-dot-radius (* 0.5 scale-dot-thick))
+                                  0  #t)
                                  1 1 1))
-                             (make-circle-stencil
-                               scale-dot-radius scale-dot-thick #t)))
+                               (make-circle-stencil
+                                scale-dot-radius scale-dot-thick #t)))
               (positioned-dot
-                (ly:stencil-translate dot-stencil dot-coordinates))
+               (ly:stencil-translate dot-stencil dot-coordinates))
               (labeled-dot-stencil
-                (cond
-                  ((or (eq? finger '())(eq? finger-code 'none))
-                   positioned-dot)
-                  ((eq? finger-code 'in-dot)
-                   (let ((finger-label
-                           (centered-stencil
-                             (sans-serif-stencil
-                               layout props dot-label-font-mag finger))))
-                     (ly:stencil-translate
-                       (ly:stencil-add
-                         dot-stencil
-                         (if (eq? dot-color 'white)
-                           finger-label
-                           (ly:stencil-in-color finger-label 1 1 1)))
-                       dot-coordinates)))
-                  ((eq? finger-code 'below-string)
-                   (let* ((label-stencil
-                            (centered-stencil
-                              (sans-serif-stencil
-                                layout props string-label-font-mag
-                                finger)))
-                          (label-fret-offset
-                            (stencil-fretboard-offset
-                              label-stencil 'fret orientation))
-                          (label-fret-coordinate
-                            (+ (* size
-                                  (+ 1 my-fret-count finger-label-padding))
-                               label-fret-offset))
-                          (label-string-coordinate string-coordinate)
-                          (label-translation
-                            (stencil-coordinates
-                              label-fret-coordinate
-                              label-string-coordinate)))
-                     (ly:stencil-add
-                       positioned-dot
-                       (ly:stencil-translate
-                         label-stencil
-                         label-translation))))
-                  (else ;unknown finger-code
-                    positioned-dot))))
-         (if (null? restlist)
-           labeled-dot-stencil
-           (ly:stencil-add
+               (cond
+                ((or (eq? finger '())(eq? finger-code 'none))
+                 positioned-dot)
+                ((eq? finger-code 'in-dot)
+                 (let ((finger-label
+                        (centered-stencil
+                         (sans-serif-stencil
+                          layout props dot-label-font-mag finger))))
+                   (ly:stencil-translate
+                    (ly:stencil-add
+                     dot-stencil
+                     (if (eq? dot-color 'white)
+                         finger-label
+                         (ly:stencil-in-color finger-label 1 1 1)))
+                    dot-coordinates)))
+                ((eq? finger-code 'below-string)
+                 (let* ((label-stencil
+                         (centered-stencil
+                          (sans-serif-stencil
+                           layout props string-label-font-mag
+                           finger)))
+                        (label-fret-offset
+                         (stencil-fretboard-offset
+                          label-stencil 'fret orientation))
+                        (label-fret-coordinate
+                         (+ (* size
+                               (+ 1 my-fret-count finger-label-padding))
+                            label-fret-offset))
+                        (label-string-coordinate string-coordinate)
+                        (label-translation
+                         (stencil-coordinates
+                          label-fret-coordinate
+                          label-string-coordinate)))
+                   (ly:stencil-add
+                    positioned-dot
+                    (ly:stencil-translate
+                     label-stencil
+                     label-translation))))
+                (else ;unknown finger-code
+                 positioned-dot))))
+        (if (null? restlist)
+            labeled-dot-stencil
+            (ly:stencil-add
              (draw-dots restlist)
              labeled-dot-stencil))))
 
-     (define (draw-thick-zero-fret)
-       "Draw a thick zeroth fret for a fret diagram whose base fret is 1."
-       (let* ((half-lowest-string-thickness
-                (* 0.5 th (string-thickness string-count thickness-factor)))
-              (half-thick (* 0.5 sth))
-              (top-fret-thick
-                (* sth (assoc-get 'top-fret-thickness details 3.0)))
-              (start-string-coordinate (- half-lowest-string-thickness))
-              (end-string-coordinate (+ (* size (1- string-count)) half-thick))
-              (start-fret-coordinate half-thick)
-              (end-fret-coordinate (- half-thick top-fret-thick))
-              (lower-left
-                (stencil-coordinates
-                  start-fret-coordinate start-string-coordinate))
-              (upper-right
-                (stencil-coordinates
-                  end-fret-coordinate end-string-coordinate)))
-         (ly:round-filled-box
-           (cons (car lower-left) (car upper-right))
-           (cons (cdr lower-left) (cdr upper-right))
-           sth)))
-
-     (define (draw-xo xo-list)
-       "Put open and mute string indications on diagram, as contained in
+    (define (draw-thick-zero-fret)
+      "Draw a thick zeroth fret for a fret diagram whose base fret is 1."
+      (let* ((half-lowest-string-thickness
+              (* 0.5 th (string-thickness string-count thickness-factor)))
+             (half-thick (* 0.5 sth))
+             (top-fret-thick
+              (* sth (assoc-get 'top-fret-thickness details 3.0)))
+             (start-string-coordinate (- half-lowest-string-thickness))
+             (end-string-coordinate (+ (* size (1- string-count)) half-thick))
+             (start-fret-coordinate half-thick)
+             (end-fret-coordinate (- half-thick top-fret-thick))
+             (lower-left
+              (stencil-coordinates
+               start-fret-coordinate start-string-coordinate))
+             (upper-right
+              (stencil-coordinates
+               end-fret-coordinate end-string-coordinate)))
+        (ly:round-filled-box
+         ;; Put limits in order, or else the intervals are considered empty
+         (ordered-cons (car lower-left) (car upper-right))
+         (ordered-cons (cdr lower-left) (cdr upper-right))
+         sth)))
+
+    (define (draw-xo xo-list)
+      "Put open and mute string indications on diagram, as contained in
 @var{xo-list}."
-       (let* ((xo-font-mag
-               (assoc-get 'xo-font-magnification details
-                          (cond ((or (eq? orientation 'landscape)
-                                     (eq? orientation 'opposing-landscape))
-                                 0.4)
-                                (else 0.4))))
-              (mypair (car xo-list))
-              (restlist (cdr xo-list))
-              (glyph-string (if (eq? (car mypair) 'mute)
-                              (assoc-get 'mute-string details "X")
-                              (assoc-get 'open-string details "O")))
-              (glyph-string-coordinate (* (- string-count (cadr mypair)) size))
-              (glyph-stencil
-                (centered-stencil
-                  (sans-serif-stencil
-                    layout props (* size xo-font-mag) glyph-string)))
-              (glyph-stencil-coordinates
-                (stencil-coordinates 0 glyph-string-coordinate))
-              (positioned-glyph
-                (ly:stencil-translate
-                  glyph-stencil
-                  glyph-stencil-coordinates)))
-         (if (null? restlist)
-           positioned-glyph
-           (ly:stencil-add
+      (let* ((xo-font-mag
+              (assoc-get 'xo-font-magnification details
+                         (cond ((or (eq? orientation 'landscape)
+                                    (eq? orientation 'opposing-landscape))
+                                0.4)
+                               (else 0.4))))
+             (mypair (car xo-list))
+             (restlist (cdr xo-list))
+             (glyph-string (if (eq? (car mypair) 'mute)
+                               (assoc-get 'mute-string details "X")
+                               (assoc-get 'open-string details "O")))
+             (glyph-string-coordinate (* (- string-count (cadr mypair)) size))
+             (glyph-stencil
+              (centered-stencil
+               (sans-serif-stencil
+                layout props (* size xo-font-mag) glyph-string)))
+             (glyph-stencil-coordinates
+              (stencil-coordinates 0 glyph-string-coordinate))
+             (positioned-glyph
+              (ly:stencil-translate
+               glyph-stencil
+               glyph-stencil-coordinates)))
+        (if (null? restlist)
+            positioned-glyph
+            (ly:stencil-add
              positioned-glyph
              (draw-xo restlist)))))
 
-       (define (draw-capo fret)
-         "Draw a capo indicator across the full width of the fret-board
+    (define (draw-capo fret)
+      "Draw a capo indicator across the full width of the fret-board
 at @var{fret}."
-         (let* ((capo-thick
-                  (* size (assoc-get 'capo-thickness details 0.5)))
-                (half-thick (* capo-thick 0.5))
-                (last-string-position 0)
-                (first-string-position (* size (- string-count 1)))
-                (fret-position ( * size (1- (+ dot-position fret))))
-                (start-point
-                  (stencil-coordinates
-                    fret-position
-                    first-string-position))
-                (end-point
-                  (stencil-coordinates
-                    fret-position
-                    last-string-position)))
-           (make-line-stencil
-             capo-thick
-             (car start-point) (cdr start-point)
-             (car end-point) (cdr end-point))))
-
-        (define (label-fret fret-range)
-          "Label the base fret on a fret diagram"
-          (let* ((base-fret (car fret-range))
-                 (label-font-mag (assoc-get 'fret-label-font-mag details 0.5))
-                 (label-space (* 0.5 size))
-                 (label-dir (assoc-get 'label-dir details RIGHT))
-                 (label-vertical-offset
-                   (assoc-get 'fret-label-vertical-offset details 0))
-                 (number-type
-                   (assoc-get 'number-type details 'roman-lower))
-                 (label-text
-                   (cond
-                     ((equal? number-type 'roman-lower)
-                      (fancy-format #f "~(~@r~)" base-fret))
-                     ((equal? number-type 'roman-upper)
-                      (fancy-format #f "~@r" base-fret))
-                     ((equal? 'arabic number-type)
-                      (fancy-format #f "~d" base-fret))
-                     ((equal? 'custom number-type)
-                      (fancy-format #f
-                                    (assoc-get 'fret-label-custom-format
-                                               details "~a")
-                                    base-fret))
-                     (else (fancy-format #f "~(~@r~)" base-fret))))
-                 (label-stencil
-                   (centered-stencil
-                     (sans-serif-stencil
-                       layout props (* size label-font-mag) label-text)))
-                 (label-half-width
-                   (stencil-fretboard-offset
-                     label-stencil
-                     'string
-                     orientation))
-                 (label-outside-diagram (+ label-space label-half-width)))
-            (ly:stencil-translate
-              label-stencil
+      (let* ((capo-thick
+              (* size (assoc-get 'capo-thickness details 0.5)))
+             (half-thick (* capo-thick 0.5))
+             (last-string-position 0)
+             (first-string-position (* size (- string-count 1)))
+             (fret-position ( * size (1- (+ dot-position fret))))
+             (start-point
               (stencil-coordinates
-                (* size (+ 1.0 label-vertical-offset))
-                (if (eq? label-dir LEFT)
-                  (- label-outside-diagram)
-                  (+ (* size (1- string-count)) label-outside-diagram))))))
-
-
-              ; Here is the body of make-fret-diagram
-              ;
+               fret-position
+               first-string-position))
+             (end-point
+              (stencil-coordinates
+               fret-position
+               last-string-position)))
+        (make-line-stencil
+         capo-thick
+         (car start-point) (cdr start-point)
+         (car end-point) (cdr end-point))))
+
+    (define (label-fret fret-range)
+      "Label the base fret on a fret diagram"
+      (let* ((base-fret (car fret-range))
+             (label-font-mag (assoc-get 'fret-label-font-mag details 0.5))
+             (label-space (* 0.5 size))
+             (label-dir (assoc-get 'label-dir details RIGHT))
+             (label-vertical-offset
+              (assoc-get 'fret-label-vertical-offset details 0))
+             (number-type
+              (assoc-get 'number-type details 'roman-lower))
+             (label-text
+              (cond
+               ((equal? number-type 'roman-lower)
+                (fancy-format #f "~(~@r~)" base-fret))
+               ((equal? number-type 'roman-upper)
+                (fancy-format #f "~@r" base-fret))
+               ((equal? 'arabic number-type)
+                (fancy-format #f "~d" base-fret))
+               ((equal? 'custom number-type)
+                (fancy-format #f
+                              (assoc-get 'fret-label-custom-format
+                                         details "~a")
+                              base-fret))
+               (else (fancy-format #f "~(~@r~)" base-fret))))
+             (label-stencil
+              (centered-stencil
+               (sans-serif-stencil
+                layout props (* size label-font-mag) label-text)))
+             (label-half-width
+              (stencil-fretboard-offset
+               label-stencil
+               'string
+               orientation))
+             (label-outside-diagram (+ label-space label-half-width)))
+        (ly:stencil-translate
+         label-stencil
+         (stencil-coordinates
+          (* size (+ 1.0 label-vertical-offset))
+          (if (eq? label-dir LEFT)
+              (- label-outside-diagram)
+              (+ (* size (1- string-count)) label-outside-diagram))))))
+
+    ;; Here is the body of make-fret-diagram
 
     (set! fret-diagram-stencil
-      (ly:stencil-add (draw-strings) (draw-frets)))
+          (ly:stencil-add (draw-strings) (draw-frets)))
     (if (and (not (null? barre-list))
              (not (eq? 'none barre-type)))
-      (set! fret-diagram-stencil
-        (ly:stencil-add
-          (draw-barre barre-list)
-          fret-diagram-stencil)))
+        (set! fret-diagram-stencil
+              (ly:stencil-add
+               (draw-barre barre-list)
+               fret-diagram-stencil)))
     (if (not (null? dot-list))
-      (set! fret-diagram-stencil
-        (ly:stencil-add
-          fret-diagram-stencil
-          (draw-dots dot-list))))
+        (set! fret-diagram-stencil
+              (ly:stencil-add
+               fret-diagram-stencil
+               (draw-dots dot-list))))
     (if (= (car fret-range) 1)
-      (set! fret-diagram-stencil
-        (ly:stencil-add
-          fret-diagram-stencil
-          (draw-thick-zero-fret))))
+        (set! fret-diagram-stencil
+              (ly:stencil-add
+               fret-diagram-stencil
+               (draw-thick-zero-fret))))
     (if (not (null? xo-list))
-      (let* ((diagram-fret-top
-               (car (stencil-fretboard-extent
+        (let* ((diagram-fret-top
+                (car (stencil-fretboard-extent
                       fret-diagram-stencil
                       'fret
                       orientation)))
-             (xo-stencil (draw-xo xo-list))
-             (xo-fret-offset
-               (stencil-fretboard-offset
+               (xo-stencil (draw-xo xo-list))
+               (xo-fret-offset
+                (stencil-fretboard-offset
                  xo-stencil 'fret orientation))
-             (xo-stencil-offset
-              (stencil-coordinate-offset
-               (- diagram-fret-top
-                  xo-fret-offset
-                  (* size xo-padding))
-               0)))
-        (set! fret-diagram-stencil
-          (ly:stencil-add
-            fret-diagram-stencil
-            (ly:stencil-translate
-              xo-stencil
-              xo-stencil-offset)))))
+               (xo-stencil-offset
+                (stencil-coordinate-offset
+                 (- diagram-fret-top
+                    xo-fret-offset
+                    (* size xo-padding))
+                 0)))
+          (set! fret-diagram-stencil
+                (ly:stencil-add
+                 fret-diagram-stencil
+                 (ly:stencil-translate
+                  xo-stencil
+                  xo-stencil-offset)))))
     (if (> capo-fret 0)
-      (set! fret-diagram-stencil
-        (ly:stencil-add
-          fret-diagram-stencil
-          (draw-capo capo-fret))))
+        (set! fret-diagram-stencil
+              (ly:stencil-add
+               fret-diagram-stencil
+               (draw-capo capo-fret))))
     (if (> (car fret-range) 1)
-      (set! fret-diagram-stencil
-        (ly:stencil-add
-          fret-diagram-stencil
-          (label-fret fret-range))))
+        (set! fret-diagram-stencil
+              (ly:stencil-add
+               fret-diagram-stencil
+               (label-fret fret-range))))
     (ly:stencil-aligned-to fret-diagram-stencil X alignment)))
 
 (define (fret-parse-definition-string props definition-string)
- "Parse a fret diagram string and return a pair containing:
 "Parse a fret diagram string and return a pair containing:
 @var{props}, modified as necessary by the definition-string
 a fret-indication list with the appropriate values"
- (let* ((fret-count 4)
-        (string-count 6)
-        (fret-range (cons 1 fret-count))
-        (barre-list '())
-        (dot-list '())
-        (xo-list '())
-        (output-list '())
-        (new-props '())
-        (details (merge-details 'fret-diagram-details props '()))
-        (items (string-split definition-string #\;)))
-   (let parse-item ((myitems items))
-     (if (not (null? (cdr myitems)))
-         (let ((test-string (car myitems)))
-           (case (car (string->list (substring test-string 0 1)))
-             ((#\s) (let ((size (get-numeric-from-key test-string)))
-                      (set! props (prepend-alist-chain 'size size props))))
-             ((#\t) (let ((th (get-numeric-from-key test-string)))
-                      (set! props (prepend-alist-chain 'thickness th props))))
-             ((#\f) (let* ((finger-code (get-numeric-from-key test-string))
-                           (finger-id (case finger-code
-                                        ((0) 'none)
-                                        ((1) 'in-dot)
-                                        ((2) 'below-string))))
-                      (set! details
-                            (acons 'finger-code finger-id details))))
-             ((#\c) (set! output-list
-                          (cons-fret
-                           (cons
-                            'barre
-                            (numerify
-                             (string-split (substring test-string 2) #\-)))
-                           output-list)))
-             ((#\h) (let ((fret-count (get-numeric-from-key test-string)))
-                      (set! details
-                            (acons 'fret-count fret-count details))))
-             ((#\w) (let ((string-count (get-numeric-from-key test-string)))
-                      (set! details
-                            (acons 'string-count string-count details))))
-             ((#\d) (let ((dot-size (get-numeric-from-key test-string)))
-                      (set! details
-                            (acons 'dot-radius dot-size details))))
-             ((#\p) (let ((dot-position (get-numeric-from-key test-string)))
-                      (set! details
-                            (acons 'dot-position dot-position details))))
-             (else
-              (let ((this-list (string-split test-string #\-)))
-                (if (string->number (cadr this-list))
-                    (set! output-list
-                          (cons-fret
-                           (cons 'place-fret (numerify this-list))
-                           output-list))
-                    (if (equal? (cadr this-list) "x" )
-                        (set! output-list
-                              (cons-fret
-                               (list 'mute (string->number (car this-list)))
-                               output-list))
-                        (set! output-list
-                              (cons-fret
-                               (list 'open (string->number (car this-list)))
-                               output-list)))))))
-           (parse-item (cdr myitems)))))
-    add the modified details
-   (set! props
-         (prepend-alist-chain 'fret-diagram-details details props))
-   `(,props . ,output-list))) ;ugh -- hard-coded spell -- procedure better
 (let* ((fret-count 4)
+         (string-count 6)
+         (fret-range (cons 1 fret-count))
+         (barre-list '())
+         (dot-list '())
+         (xo-list '())
+         (output-list '())
+         (new-props '())
+         (details (merge-details 'fret-diagram-details props '()))
+         (items (string-split definition-string #\;)))
+    (let parse-item ((myitems items))
+      (if (not (null? (cdr myitems)))
+          (let ((test-string (car myitems)))
+            (case (car (string->list (substring test-string 0 1)))
+              ((#\s) (let ((size (get-numeric-from-key test-string)))
+                       (set! props (prepend-alist-chain 'size size props))))
+              ((#\t) (let ((th (get-numeric-from-key test-string)))
+                       (set! props (prepend-alist-chain 'thickness th props))))
+              ((#\f) (let* ((finger-code (get-numeric-from-key test-string))
+                            (finger-id (case finger-code
+                                         ((0) 'none)
+                                         ((1) 'in-dot)
+                                         ((2) 'below-string))))
+                       (set! details
+                             (acons 'finger-code finger-id details))))
+              ((#\c) (set! output-list
+                           (cons-fret
+                            (cons
+                             'barre
+                             (numerify
+                              (string-split (substring test-string 2) #\-)))
+                            output-list)))
+              ((#\h) (let ((fret-count (get-numeric-from-key test-string)))
+                       (set! details
+                             (acons 'fret-count fret-count details))))
+              ((#\w) (let ((string-count (get-numeric-from-key test-string)))
+                       (set! details
+                             (acons 'string-count string-count details))))
+              ((#\d) (let ((dot-size (get-numeric-from-key test-string)))
+                       (set! details
+                             (acons 'dot-radius dot-size details))))
+              ((#\p) (let ((dot-position (get-numeric-from-key test-string)))
+                       (set! details
+                             (acons 'dot-position dot-position details))))
+              (else
+               (let ((this-list (string-split test-string #\-)))
+                 (if (string->number (cadr this-list))
+                     (set! output-list
+                           (cons-fret
+                            (cons 'place-fret (numerify this-list))
+                            output-list))
+                     (if (equal? (cadr this-list) "x" )
+                         (set! output-list
+                               (cons-fret
+                                (list 'mute (string->number (car this-list)))
+                                output-list))
+                         (set! output-list
+                               (cons-fret
+                                (list 'open (string->number (car this-list)))
+                                output-list)))))))
+            (parse-item (cdr myitems)))))
+    ;; add the modified details
+    (set! props
+          (prepend-alist-chain 'fret-diagram-details details props))
+    `(,props . ,output-list))) ;ugh -- hard-coded spell -- procedure better
 
 (define-public
   (fret-parse-terse-definition-string props definition-string)
@@ -878,7 +866,7 @@ return a pair containing:
 @var{props}, modified to include the string-count determined by the
 definition-string, and
 a fret-indication list with the appropriate values"
-;TODO -- change syntax to fret\string-finger
+  ;; TODO -- change syntax to fret\string-finger
 
   (let* ((details (merge-details 'fret-diagram-details props '()))
          (barre-start-list '())
@@ -951,9 +939,9 @@ a fret-indication list with the appropriate values"
   (pair?) ; argument type (list, but use pair? for speed)
   #:category instrument-specific-markup ; markup type
   #:properties ((align-dir -0.4) ; properties and defaults
-               (size 1.0)
-               (fret-diagram-details)
-               (thickness 0.5))
+                (size 1.0)
+                (fret-diagram-details)
+                (thickness 0.5))
   "Make a fret diagram containing the symbols indicated in @var{marking-list}.
 
   For example,
@@ -1133,5 +1121,3 @@ with @w{@code{-(}} to start a barre and @w{@code{-)}} to end the barre.
     (fret-diagram-verbose-markup layout
                                  (car definition-list)
                                  (cdr definition-list))))
-
-
index 247d30c4a7fc1bba8ede9e56965ed57de2532f6c..fc2076be24c9624cf262d6bf0f3edff4d0d00403 100644 (file)
@@ -20,8 +20,8 @@
   #:use-module (lily)
   #:export
   (make-empty-graph add-node add-edge add-cluster
-                   graph-write
-                   ))
+                    graph-write
+                    ))
 
 (define graph-type (make-record-type "graph" '(nodes edges clusters name)))
 
 
 (define (add-cluster graph node-id cluster-name)
   (let* ((cs (clusters graph))
-        (cluster (assoc cluster-name cs))
-        (already-in-cluster (if cluster
-                                (cdr cluster)
-                                '())))
+         (cluster (assoc cluster-name cs))
+         (already-in-cluster (if cluster
+                                 (cdr cluster)
+                                 '())))
     (set-clusters! graph (assoc-set! cs
-                                   cluster-name
-                                   (cons node-id already-in-cluster)))))
+                                     cluster-name
+                                     (cons node-id already-in-cluster)))))
 
 (define (add-node graph label . cluster-name)
   (let* ((ns (nodes graph))
          (id (length ns)))
     (set-nodes! graph (assv-set! ns id label))
     (if (and (not (null? cluster-name))
-            (string? (car cluster-name)))
-       (add-cluster graph id (car cluster-name)))
+             (string? (car cluster-name)))
+        (add-cluster graph id (car cluster-name)))
     id))
 
 (define (add-edge graph node1 node2)
 
 (define (graph-write graph out)
   (let ((ns (nodes graph))
-       (es (edges graph))
-       (cs (clusters graph)))
+        (es (edges graph))
+        (cs (clusters graph)))
     (ly:message (format #f (_ "Writing graph `~a'...") (port-filename out)))
     (display "digraph G {\nrankdir=\"LR\"\nnode [shape=rectangle]\n" out)
     (for-each (lambda (n) (format out "~a [label=\"~a\"]\n" (car n) (cdr n)))
-             ns)
+              ns)
     (for-each (lambda (e) (format out "~a -> ~a\n" (car e) (cdr e)))
-             es)
+              es)
     (for-each (lambda (c)
-               (format out "subgraph cluster_~a {\nlabel= \"~a\"\ncolor=blue\n"
-                       (string-filter (car c) char-alphabetic?)
-                       (car c))
-               (for-each (lambda (n) (format out "~a\n" n)) (cdr c))
-               (display "}\n" out))
-             cs)
+                (format out "subgraph cluster_~a {\nlabel= \"~a\"\ncolor=blue\n"
+                        (string-filter (car c) char-alphabetic?)
+                        (car c))
+                (for-each (lambda (n) (format out "~a\n" n)) (cdr c))
+                (display "}\n" out))
+              cs)
     (display "}" out)))
index 8027b4f9558f38e1f9e0385d660f2016d1f13583..defd663317d7da243e7a8f30f9ed7179a631f49f 100644 (file)
@@ -18,7 +18,7 @@
 ;;; Commentary:
 
 ;;; This file provides the support routines for a guile debugger called
-;;; from a environment controlled by LilyPond.  It works in conjunction
+;;; from an environment controlled by LilyPond.  It works in conjunction
 ;;; with file guile-debugger.ly.
 
 ;;; Code:
   #:use-module (ice-9 debugging ice-9-debugger-extensions)
   #:use-module (ice-9 readline)
   #:export (set-break!
-           clear-break!
-           set-trace-call!
-           clear-trace-call!
-           set-trace-subtree!
-           clear-trace-subtree!
-           debug-help))
+            clear-break!
+            set-trace-call!
+            clear-trace-call!
+            set-trace-subtree!
+            clear-trace-subtree!
+            debug-help))
 
 (define (set-break! proc)
   (install-trap (make <procedure-trap>
-                 #:procedure proc
-                 #:behaviour debug-trap)))
+                  #:procedure proc
+                  #:behaviour debug-trap)))
 (define (clear-break! proc)
   (uninstall-trap (make <procedure-trap>
-                   #:procedure proc
-                   #:behaviour debug-trap)))
+                    #:procedure proc
+                    #:behaviour debug-trap)))
 
 
 (define (set-trace-call! proc)
   (install-trap (make <procedure-trap>
-                 #:procedure proc
-                 #:behaviour (list trace-trap
-                                   trace-at-exit))))
+                  #:procedure proc
+                  #:behaviour (list trace-trap
+                                    trace-at-exit))))
 (define (clear-trace-call! proc)
   (uninstall-trap (make <procedure-trap>
-                   #:procedure proc
-                   #:behaviour (list trace-trap
-                                     trace-at-exit))))
+                    #:procedure proc
+                    #:behaviour (list trace-trap
+                                      trace-at-exit))))
 
 (define (set-trace-subtree! proc)
   (install-trap (make <procedure-trap>
-                 #:procedure proc
-                 #:behaviour (list trace-trap
-                                   trace-until-exit))))
+                  #:procedure proc
+                  #:behaviour (list trace-trap
+                                    trace-until-exit))))
 
 (define (clear-trace-subtree! proc)
   (uninstall-trap (make <procedure-trap>
-                   #:procedure proc
-                   #:behaviour (list trace-trap
-                                     trace-until-exit))))
+                    #:procedure proc
+                    #:behaviour (list trace-trap
+                                      trace-until-exit))))
 
 (define (debug-help )
   (display "\nYou may add the following commands as debugging statements in your source file\n")
index 8fa02fb5a041204f62bfa8f6be81bd06cc2f0247..ea5db93f181befecdcbe970f3c9432f15b7cd19d 100644 (file)
@@ -20,8 +20,8 @@
 (define-markup-command (harp-pedal layout props definition-string) (string?)
   #:category instrument-specific-markup ; markup type for the documentation!
   #:properties ((size 1.2)
-               (harp-pedal-details '())
-               (thickness 0.5))
+                (harp-pedal-details '())
+                (thickness 0.5))
   "Make a harp pedal diagram.
 
 Possible elements in @var{definition-string}:
@@ -42,101 +42,106 @@ the following pedal should be circled (indicating a change)
 The function also checks if the string has the typical form of three
 pedals, then the divider and then the remaining four pedals.  If not it
 prints out a warning.  However, in any case, it will also print each symbol
-in the order as given.  This means you can place the divider (even multiple
-dividers) anywhere you want, but you'll have to live with the warnings.
+in the order as given.  This means you can place the divider (even
+multiple dividers) anywhere you want, but you'll have to live with the
+warnings.
 
 The appearance of the diagram can be tweaked inter alia using the size property
 of the TextScript grob (@code{\\override Voice.TextScript #'size = #0.3}) for
-the overall, the thickness property
-(@code{\\override Voice.TextScript #'thickness = #3}) for the line thickness of
-the horizontal line and the divider.  The remaining configuration (box sizes,
-offsets and spaces) is done by the harp-pedal-details  list of properties
-(@code{\\override Voice.TextScript #'harp-pedal-details #'box-width = #1}).
-It contains the following settings: @code{box-offset} (vertical shift of the
-box center for up/down pedals), @code{box-width}, @code{box-height},
-@code{space-before-divider} (the spacing between two boxes before the
-divider) and @code{space-after-divider} (box spacing after the divider).
+the overall, the thickness property (@code{\\override Voice.TextScript
+#'thickness = #3}) for the line thickness of
+the horizontal line and the divider.  The remaining configuration (box
+sizes, offsets and spaces) is done by the harp-pedal-details list of
+properties (@code{\\override Voice.TextScript #'harp-pedal-details
+#'box-width = #1}).
+It contains the following settings: @code{box-offset} (vertical shift
+of the box center for up/down pedals), @code{box-width},
+@code{box-height}, @code{space-before-divider} (the spacing between
+two boxes before the divider) and @code{space-after-divider} (box
+spacing after the divider).
 
 @lilypond[verbatim,quote]
 \\markup \\harp-pedal #\"^-v|--ov^\"
 @end lilypond
 "
   (let* ((pedal-list (harp-pedals-parse-string definition-string))
-        (details (begin (harp-pedal-check pedal-list) harp-pedal-details))
-        (dy (* size (assoc-get 'box-offset details 0.8))) ; offset of the box center from the line
-        (line-width (* (ly:output-def-lookup layout 'line-thickness)
-                       (chain-assoc-get 'thickness props 0.5)))
-        (box-width (* size (assoc-get 'box-width details 0.4)))
-        (box-hheight (* size (/ (assoc-get 'box-height details 1.0) 2))) ; half the box-height, saves some divisions by 2
-        (spacebeforedivider (* size (assoc-get 'space-before-divider details 0.8))) ; full space between boxes before the first divider
-        (spaceafterdivider (* size (assoc-get 'space-after-divider details 0.8))) ; full space between boxes
-        (circle-thickness (* (ly:output-def-lookup layout 'line-thickness)
-                       (assoc-get 'circle-thickness details 0.5)))
-        (circle-x-padding (* size (assoc-get 'circle-x-padding details 0.15)))
-        (circle-y-padding (* size (assoc-get 'circle-y-padding details 0.2)))
-        (box-x-dimensions (lambda (prev-x p space) (cons (+ prev-x space)
-                                                   (+ prev-x space box-width))))
-        (box-y-dimensions (lambda (prev-x p space) (cons (- (* p dy) box-hheight)
-                                                         (+ (* p dy) box-hheight))))
-        (divider-stencil (lambda (xpos) (make-line-stencil line-width
-                                                     xpos (- 0 dy box-hheight)
-                                                     xpos (+ dy box-hheight))))
-        (result (let process-pedal  ((remaining pedal-list)
-                                     (prev-x 0)
-                                     (stencils '())
-                                     (circled #f)
-                                     (space spacebeforedivider))
-          ; Terminal condition of the recursion, return (final-x . stencil-list)
-          (if (null? remaining)
-            (cons (+ prev-x space) (reverse stencils))
+         (details (begin (harp-pedal-check pedal-list) harp-pedal-details))
+         (dy (* size (assoc-get 'box-offset details 0.8))) ; offset of the box center from the line
+         (line-width (* (ly:output-def-lookup layout 'line-thickness)
+                        (chain-assoc-get 'thickness props 0.5)))
+         (box-width (* size (assoc-get 'box-width details 0.4)))
+         (box-hheight (* size (/ (assoc-get 'box-height details 1.0) 2))) ; half the box-height, saves some divisions by 2
+         (spacebeforedivider (* size (assoc-get 'space-before-divider details 0.8))) ; full space between boxes before the first divider
+         (spaceafterdivider (* size (assoc-get 'space-after-divider details 0.8))) ; full space between boxes
+         (circle-thickness (* (ly:output-def-lookup layout 'line-thickness)
+                              (assoc-get 'circle-thickness details 0.5)))
+         (circle-x-padding (* size (assoc-get 'circle-x-padding details 0.15)))
+         (circle-y-padding (* size (assoc-get 'circle-y-padding details 0.2)))
+         (box-x-dimensions (lambda (prev-x p space) (cons (+ prev-x space)
+                                                          (+ prev-x space box-width))))
+         (box-y-dimensions (lambda (prev-x p space) (cons (- (* p dy) box-hheight)
+                                                          (+ (* p dy) box-hheight))))
+         (divider-stencil (lambda (xpos) (make-line-stencil line-width
+                                                            xpos (- 0 dy box-hheight)
+                                                            xpos (+ dy box-hheight))))
+         (result (let process-pedal  ((remaining pedal-list)
+                                      (prev-x 0)
+                                      (stencils '())
+                                      (circled #f)
+                                      (space spacebeforedivider))
+                   ;; Terminal condition of the recursion, return (final-x . stencil-list)
+                   (if (null? remaining)
+                       (cons (+ prev-x space) (reverse stencils))
 
-            (case (car remaining)
-              ((1 0 -1)  ; Pedal up/neutral/down
-                  (let* ((p (car remaining))
-                        (stencil (make-filled-box-stencil
-                                   (box-x-dimensions prev-x p space)
-                                   (box-y-dimensions prev-x p space)))
-                        (pedal-stencil 
-                          (if circled 
-                              (oval-stencil stencil circle-thickness 
-                                            circle-x-padding circle-y-padding)
-                              stencil))
-                        (new-prev-x (+ prev-x space box-width)))
-                    (process-pedal (cdr remaining) new-prev-x 
-                                   (cons pedal-stencil stencils) #f space)))
-              ((#\|)  ; Divider line
-                  (let* ((xpos (+ prev-x space))
-                         (stencil (divider-stencil xpos))
-                         (new-prev-x (+ prev-x space)))
-                    (process-pedal (cdr remaining) new-prev-x 
-                                   (cons stencil stencils) 
-                                   circled spaceafterdivider)))
-              ((#\o)  ; Next pedal should be circled
-                  (process-pedal (cdr remaining) prev-x stencils #t space))
-              (else
-                  (ly:warning "Unhandled entry in harp-pedal: ~a" 
-                              (car remaining))
-                  (process-pedal (cdr remaining) 
-                                 prev-x stencils circled space))))))
-        (final-x (car result))
-        (stencils (cdr result)))
-    ; Add the horizontal line and combine all stencils:
+                       (case (car remaining)
+                         ((1 0 -1)  ; Pedal up/neutral/down
+                          (let* ((p (car remaining))
+                                 (stencil (make-filled-box-stencil
+                                           (box-x-dimensions prev-x p space)
+                                           (box-y-dimensions prev-x p space)))
+                                 (pedal-stencil
+                                  (if circled
+                                      (oval-stencil stencil circle-thickness
+                                                    circle-x-padding circle-y-padding)
+                                      stencil))
+                                 (new-prev-x (+ prev-x space box-width)))
+                            (process-pedal (cdr remaining) new-prev-x
+                                           (cons pedal-stencil stencils) #f space)))
+                         ((#\|)  ; Divider line
+                          (let* ((xpos (+ prev-x space))
+                                 (stencil (divider-stencil xpos))
+                                 (new-prev-x (+ prev-x space)))
+                            (process-pedal (cdr remaining) new-prev-x
+                                           (cons stencil stencils)
+                                           circled spaceafterdivider)))
+                         ((#\o)  ; Next pedal should be circled
+                          (process-pedal (cdr remaining) prev-x stencils #t space))
+                         (else
+                          (ly:warning "Unhandled entry in harp-pedal: ~a"
+                                      (car remaining))
+                          (process-pedal (cdr remaining)
+                                         prev-x stencils circled space))))))
+         (final-x (car result))
+         (stencils (cdr result)))
+    ;; Add the horizontal line and combine all stencils:
     (apply ly:stencil-add
-      (cons
-        (make-line-stencil line-width 0 0 final-x 0)
-        stencils))))
+           (make-line-stencil line-width 0 0 final-x 0) ; the horizontal line
+           (make-transparent-box-stencil ; space for absent boxes
+             (cons 0 final-x)
+             (interval-widen '(0 . 0) (+ box-hheight dy)))
+           stencils)))
 
 ;; Parse the harp pedal definition string into list of directions (-1/0/1), #\o and #\|
 (define (harp-pedals-parse-string definition-string)
- "Parse a harp pedals diagram string and return a list containing 1, 0, -1, #\\o or #\\|"
 "Parse a harp pedals diagram string and return a list containing 1, 0, -1, #\\o or #\\|"
   (map (lambda (c)
-    (case c
-      ((#\^) 1)
-      ((#\v) -1)
-      ((#\-) 0)
-      ((#\| #\o) c)
-      (else c)))
-    (string->list definition-string)))
+         (case c
+           ((#\^) 1)
+           ((#\v) -1)
+           ((#\-) 0)
+           ((#\| #\o) c)
+           (else c)))
+       (string->list definition-string)))
 
 
 ;; Analyze the pedal-list: Return (pedalcount . (divider positions))
@@ -145,23 +150,23 @@ divider) and @code{space-after-divider} (box spacing after the divider).
               (pedalcount 0)
               (dividerpositions '()))
     (if (null? pedals)
-      (cons pedalcount (reverse dividerpositions))
+        (cons pedalcount (reverse dividerpositions))
 
-      (case (car pedals)
-        ((-1 0 1) (check (cdr pedals) (+ pedalcount 1) dividerpositions))
-        ((#\|)    (check (cdr pedals) pedalcount (cons pedalcount dividerpositions)))
-        (else     (check (cdr pedals) pedalcount dividerpositions))))))
+        (case (car pedals)
+          ((-1 0 1) (check (cdr pedals) (+ pedalcount 1) dividerpositions))
+          ((#\|)    (check (cdr pedals) pedalcount (cons pedalcount dividerpositions)))
+          (else     (check (cdr pedals) pedalcount dividerpositions))))))
 
 
 ;; Sanity checks, spit out warning if pedal-list violates the conventions
 (define (harp-pedal-check pedal-list)
   "Perform some sanity checks for harp pedals (7 pedals, divider after third)"
   (let ((info (harp-pedal-info pedal-list)))
-    ; 7 pedals:
+    ;; 7 pedals:
     (if (not (equal? (car info) 7))
-      (ly:warning "Harp pedal diagram contains ~a pedals rather than the usual 7." (car info)))
-    ; One divider after third pedal:
+        (ly:warning "Harp pedal diagram contains ~a pedals rather than the usual 7." (car info)))
+    ;; One divider after third pedal:
     (if (null? (cdr info))
-      (ly:warning "Harp pedal diagram does not contain a divider (usually after third pedal).")
-      (if (not (equal? (cdr info) '(3)))
-        (ly:warning "Harp pedal diagram contains dividers at positions ~a.  Normally, there is only one divider after the third pedal." (cdr info))))))
+        (ly:warning "Harp pedal diagram does not contain a divider (usually after third pedal).")
+        (if (not (equal? (cdr info) '(3)))
+            (ly:warning "Harp pedal diagram contains dividers at positions ~a.  Normally, there is only one divider after the third pedal." (cdr info))))))
index f72afacf0dd1c8ffbcc5972ff760a40e375906e7..fb39a4e784055496bae221e845c75f6d263d8c3a 100644 (file)
 (define check-beam-quant
   (lambda (posl posr)
     (lambda (beam posns)
-  "Check whether BEAM has POSL and POSR quants.  POSL are (POSITION
-. QUANT) pairs, where QUANT is -1 (hang), 0 (center), 1 (sit) or -2/ 2 (inter) 
+      "Check whether BEAM has POSL and POSR quants.  POSL are (POSITION
+. QUANT) pairs, where QUANT is -1 (hang), 0 (center), 1 (sit) or -2/ 2 (inter)
 
 "
-  (let* ((thick (ly:grob-property beam 'beam-thickness))
-        (layout (ly:grob-layout beam))
-        (lthick (ly:output-def-lookup layout 'line-thickness))
-        (staff-thick lthick) ; fixme.
-        (quant->coord (lambda (p q)
-                        (if (= 2 (abs q))
-                            (+ p (/ q 4.0))
-                            (+ p (- (* 0.5 q thick) (* 0.5 q lthick))))))
-        (want-l (quant->coord (car posl) (cdr posl))) 
-        (want-r (quant->coord (car posr) (cdr posr)))
-        (almost-equal (lambda (x y) (< (abs (- x y)) 1e-3))))
-    
-    (if (or (not (almost-equal want-l (car posns)))
-           (not (almost-equal want-r (cdr posns))))
-       (begin
-         (ly:warning (_ "Error in beam quanting.  Expected (~S,~S) found ~S.")
-                     want-l want-r posns)
-         (set! (ly:grob-property beam 'annotation)
-               (format #f "(~S,~S)" want-l want-r))))
-    posns))))
+      (let* ((thick (ly:grob-property beam 'beam-thickness))
+             (layout (ly:grob-layout beam))
+             (lthick (ly:output-def-lookup layout 'line-thickness))
+             (staff-thick lthick) ; fixme.
+             (quant->coord (lambda (p q)
+                             (if (= 2 (abs q))
+                                 (+ p (/ q 4.0))
+                                 (+ p (- (* 0.5 q thick) (* 0.5 q lthick))))))
+             (want-l (quant->coord (car posl) (cdr posl)))
+             (want-r (quant->coord (car posr) (cdr posr)))
+             (almost-equal (lambda (x y) (< (abs (- x y)) 1e-3))))
+
+        (if (or (not (almost-equal want-l (car posns)))
+                (not (almost-equal want-r (cdr posns))))
+            (begin
+              (ly:warning (_ "Error in beam quanting.  Expected (~S,~S) found ~S.")
+                          want-l want-r posns)
+              (set! (ly:grob-property beam 'annotation)
+                    (format #f "(~S,~S)" want-l want-r))))
+        posns))))
 
 (define check-beam-slope-sign
   (lambda (comparison)
     (lambda (beam posns)
-  "Check whether the slope of BEAM is correct wrt. COMPARISON."
-  (let* ((slope-sign (- (cdr posns) (car posns)))
-        (correct (comparison slope-sign 0)))
-    (if (not correct)
-       (begin
-         (ly:warning (_ "Error in beam quanting.  Expected ~S 0, found ~S.")
-                     (procedure-name comparison) slope-sign)
-         (set! (ly:grob-property beam 'annotation)
-               (format #f "~S 0" (procedure-name comparison))))
-       (set! (ly:grob-property beam 'annotation) ""))
-    posns))))
+      "Check whether the slope of BEAM is correct wrt. COMPARISON."
+      (let* ((slope-sign (- (cdr posns) (car posns)))
+             (correct (comparison slope-sign 0)))
+        (if (not correct)
+            (begin
+              (ly:warning (_ "Error in beam quanting.  Expected ~S 0, found ~S.")
+                          (procedure-name comparison) slope-sign)
+              (set! (ly:grob-property beam 'annotation)
+                    (format #f "~S 0" (procedure-name comparison))))
+            (set! (ly:grob-property beam 'annotation) ""))
+        posns))))
 
 
 (define-public (check-quant-callbacks l r)
   (lambda (grob)
     ((check-beam-quant l r)
-       grob
-       (beam::place-broken-parts-individually grob))))
+     grob
+     (beam::place-broken-parts-individually grob))))
 
 
 (define-public (check-slope-callbacks comparison)
   (lambda (grob)
     ((check-beam-slope-sign comparison)
-       grob
-       (beam::place-broken-parts-individually grob))))
-
+     grob
+     (beam::place-broken-parts-individually grob))))
index ff47dbb93826c263854d668dadea12be773f204d..7e5ab5858cb4750fba15b5f22d8b092c678fe810 100644 (file)
@@ -14,8 +14,8 @@
 ;;;;
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
-                               ;
-; this is put into the slur-details property of Slur and PhrasingSlur
+
+;; this is put into the slur-details property of Slur and PhrasingSlur
 (define default-slur-details
   '((region-size . 4)
     (head-encompass-penalty . 1000.0)
index 854980012cea5d3da40df5b955bfde86c4e87a97..43b05e57c20d8fa6b5b9e784d434cb5c564d1c58 100644 (file)
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-; for take, drop, take-while, list-index, and find-tail:
+;; for take, drop, take-while, list-index, and find-tail:
 (use-modules (srfi srfi-1))
 
-; for define-safe-public when byte-compiling using Guile V2
+;; for define-safe-public when byte-compiling using Guile V2
 (use-modules (scm safe-utility-defs))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -57,6 +57,8 @@
 (define-safe-public DOUBLE-SHARP 1)
 (define-safe-public SEMI-TONE 1/2)
 
+(define-safe-public INFINITY-INT 1000000)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; moments
 
   (cons (ly:moment-main-numerator moment)
         (ly:moment-main-denominator moment)))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; durations
+
+(define-public (duration-log-factor lognum)
+  "Given a logarithmic duration number, return the length of the duration,
+as a number of whole notes."
+  (or (and (exact? lognum) (integer? lognum))
+      (scm-error 'wrong-type-arg "duration-log-factor" "Not an integer: ~S" (list lognum) #f))
+  (if (<= lognum 0)
+      (ash 1 (- lognum))
+      (/ (ash 1 lognum))))
+
+(define-public (duration-dot-factor dotcount)
+  "Given a count of the dots used to extend a musical duration, return
+the numeric factor by which they increase the duration."
+  (or (and (exact? dotcount) (integer? dotcount) (>= dotcount 0))
+      (scm-error 'wrong-type-arg "duration-dot-factor" "Not a count: ~S" (list dotcount) #f))
+  (- 2 (/ (ash 1 dotcount))))
+
+(define-public (duration-length dur)
+  "Return the overall length of a duration, as a number of whole
+notes.  (Not to be confused with ly:duration-length, which returns a
+less-useful moment object.)"
+  (ly:moment-main (ly:duration-length dur)))
+
+(define-public (duration-visual dur)
+  "Given a duration object, return the visual part of the duration (base
+note length and dot count), in the form of a duration object with
+non-visual scale factor 1."
+  (ly:make-duration (ly:duration-log dur) (ly:duration-dot-count dur) 1))
+
+(define-public (duration-visual-length dur)
+  "Given a duration object, return the length of the visual part of the
+duration (base note length and dot count), as a number of whole notes."
+  (duration-length (duration-visual dur)))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; arithmetic
 (define-public (average x . lst)
   "Toplevel book-part handler."
   (define (add-bookpart book-part)
     (ly:parser-define!
-       parser 'toplevel-bookparts
-       (cons book-part (ly:parser-lookup parser 'toplevel-bookparts))))
+     parser 'toplevel-bookparts
+     (cons book-part (ly:parser-lookup parser 'toplevel-bookparts))))
   ;; If toplevel scores have been found before this \bookpart,
   ;; add them first to a dedicated bookpart
   (if (pair? (ly:parser-lookup parser 'toplevel-scores))
       (begin
-       (add-bookpart (ly:make-book-part
-                      (ly:parser-lookup parser 'toplevel-scores)))
-       (ly:parser-define! parser 'toplevel-scores (list))))
+        (add-bookpart (ly:make-book-part
+                       (ly:parser-lookup parser 'toplevel-scores)))
+        (ly:parser-define! parser 'toplevel-scores (list))))
   (add-bookpart book-part))
 
 (define-public (collect-scores-for-book parser score)
 
 (define-public (collect-music-aux score-handler parser music)
   (define (music-property symbol)
-    (let ((value (ly:music-property music symbol)))
-      (if (not (null? value))
-         value
-         #f)))
+    (ly:music-property music symbol #f))
   (cond ((music-property 'page-marker)
-        ;; a page marker: set page break/turn permissions or label
-        (begin
-          (let ((label (music-property 'page-label)))
-            (if (symbol? label)
-                (score-handler (ly:make-page-label-marker label))))
-          (for-each (lambda (symbol)
-                      (let ((permission (music-property symbol)))
-                        (if (symbol? permission)
-                            (score-handler
-                             (ly:make-page-permission-marker symbol
-                                                             (if (eqv? 'forbid permission)
-                                                                 '()
-                                                                 permission))))))
-                    (list 'line-break-permission 'page-break-permission
-                          'page-turn-permission))))
-       ((not (music-property 'void))
-        ;; a regular music expression: make a score with this music
-        ;; void music is discarded
-        (score-handler (scorify-music music parser)))))
+         ;; a page marker: set page break/turn permissions or label
+         (let ((label (music-property 'page-label)))
+           (if (symbol? label)
+               (score-handler (ly:make-page-label-marker label))))
+         (for-each (lambda (symbol)
+                     (let ((permission (music-property symbol)))
+                       (if (symbol? permission)
+                           (score-handler
+                            (ly:make-page-permission-marker symbol
+                                                            (if (eq? 'forbid permission)
+                                                                '()
+                                                                permission))))))
+                   '(line-break-permission page-break-permission
+                                           page-turn-permission)))
+        ((not (music-property 'void))
+         ;; a regular music expression: make a score with this music
+         ;; void music is discarded
+         (score-handler (scorify-music music parser)))))
 
 (define-public (collect-music-for-book parser music)
   "Top-level music handler."
   (collect-music-aux (lambda (score)
-                      (collect-scores-for-book parser score))
+                       (collect-scores-for-book parser score))
                      parser
-                    music))
+                     music))
 
 (define-public (collect-book-music-for-book parser book music)
   "Book music handler."
   (collect-music-aux (lambda (score)
-                      (ly:book-add-score! book score))
+                       (ly:book-add-score! book score))
                      parser
-                    music))
+                     music))
 
 (define-public (scorify-music music parser)
   "Preprocess @var{music}."
-
-  (for-each (lambda (func)
-             (set! music (func music parser)))
-           toplevel-music-functions)
-
-  (ly:make-score music))
-
+  (ly:make-score
+   (fold (lambda (f m) (f m parser))
+         music
+         toplevel-music-functions)))
 
 (define (get-current-filename parser book)
   "return any suffix value for output filename allowing for settings by
 calls to bookOutputName function"
-  (let ((book-filename (paper-variable parser book 'output-filename)))
-    (if (not book-filename)
-       (ly:parser-output-name parser)
-       book-filename)))
+  (or (paper-variable parser book 'output-filename)
+      (ly:parser-output-name parser)))
 
 (define (get-current-suffix parser book)
   "return any suffix value for output filename allowing for settings by calls to
 bookoutput function"
   (let ((book-output-suffix (paper-variable parser book 'output-suffix)))
     (if (not (string? book-output-suffix))
-       (ly:parser-lookup parser 'output-suffix)
-       book-output-suffix)))
+        (ly:parser-lookup parser 'output-suffix)
+        book-output-suffix)))
 
 (define-public current-outfile-name #f)  ; for use by regression tests
 
@@ -181,11 +210,11 @@ bookoutput function"
   ;; the file-name concatenated with any potential output-suffix value
   ;; as the key to out internal a-list
   (let* ((base-name (get-current-filename parser book))
-        (output-suffix (get-current-suffix parser book))
-        (alist-key (format #f "~a~a" base-name output-suffix))
-        (counter-alist (ly:parser-lookup parser 'counter-alist))
-        (output-count (assoc-get alist-key counter-alist 0))
-        (result base-name))
+         (output-suffix (get-current-suffix parser book))
+         (alist-key (format #f "~a~a" base-name output-suffix))
+         (counter-alist (ly:parser-lookup parser 'counter-alist))
+         (output-count (assoc-get alist-key counter-alist 0))
+         (result base-name))
     ;; Allow all ASCII alphanumerics, including accents
     (if (string? output-suffix)
         (set! result
@@ -208,8 +237,8 @@ bookoutput function"
 
 (define (print-book-with parser book process-procedure)
   (let* ((paper (ly:parser-lookup parser '$defaultpaper))
-        (layout (ly:parser-lookup parser '$defaultlayout))
-        (outfile-name (get-outfile-name parser book)))
+         (layout (ly:parser-lookup parser '$defaultlayout))
+         (outfile-name (get-outfile-name parser book)))
     (process-procedure book paper layout outfile-name)))
 
 (define-public (print-book-with-defaults parser book)
@@ -220,91 +249,89 @@ bookoutput function"
 
 ;; Add a score to the current bookpart, book or toplevel
 (define-public (add-score parser score)
-    (cond
-      ((ly:parser-lookup parser '$current-bookpart)
-          ((ly:parser-lookup parser 'bookpart-score-handler)
-               (ly:parser-lookup parser '$current-bookpart) score))
-      ((ly:parser-lookup parser '$current-book)
-          ((ly:parser-lookup parser 'book-score-handler)
-               (ly:parser-lookup parser '$current-book) score))
-      (else
-          ((ly:parser-lookup parser 'toplevel-score-handler) parser score))))
+  (cond
+   ((ly:parser-lookup parser '$current-bookpart)
+    ((ly:parser-lookup parser 'bookpart-score-handler)
+     (ly:parser-lookup parser '$current-bookpart) score))
+   ((ly:parser-lookup parser '$current-book)
+    ((ly:parser-lookup parser 'book-score-handler)
+     (ly:parser-lookup parser '$current-book) score))
+   (else
+    ((ly:parser-lookup parser 'toplevel-score-handler) parser score))))
 
 (define-public paper-variable
   (let
       ((get-papers
-       (lambda (parser book)
-         (append (if (and book (ly:output-def? (ly:book-paper book)))
-                     (list (ly:book-paper book))
-                     '())
-                 (ly:parser-lookup parser '$papers)
-                 (list (ly:parser-lookup parser '$defaultpaper))))))
+        (lambda (parser book)
+          (append (if (and book (ly:output-def? (ly:book-paper book)))
+                      (list (ly:book-paper book))
+                      '())
+                  (ly:parser-lookup parser '$papers)
+                  (list (ly:parser-lookup parser '$defaultpaper))))))
     (make-procedure-with-setter
      (lambda (parser book symbol)
        (any (lambda (p) (ly:output-def-lookup p symbol #f))
-           (get-papers parser book)))
+            (get-papers parser book)))
      (lambda (parser book symbol value)
        (ly:output-def-set-variable!
-       (car (get-papers parser book))
-       symbol value)))))
+        (car (get-papers parser book))
+        symbol value)))))
 
 (define-public (add-text parser text)
   (add-score parser (list text)))
 
 (define-public (add-music parser music)
   (collect-music-aux (lambda (score)
-                      (add-score parser score))
+                       (add-score parser score))
                      parser
-                    music))
+                     music))
 
 (define-public (context-mod-from-music parser music)
   (let ((warn #t) (mods (ly:make-context-mod)))
-    (let loop ((m music) (context #f))
+    (let loop ((m music))
       (if (music-is-of-type? m 'layout-instruction-event)
-         (let ((symbol (cons context (ly:music-property m 'symbol))))
-           (ly:add-context-mod
-            mods
-            (case (ly:music-property m 'name)
-              ((PropertySet)
-               (list 'assign
-                     symbol
-                     (ly:music-property m 'value)))
-              ((PropertyUnset)
-               (list 'unset symbol))
-              ((OverrideProperty)
-               (cons* 'push
-                      symbol
-                      (ly:music-property m 'grob-value)
+          (let ((symbol (ly:music-property m 'symbol)))
+            (ly:add-context-mod
+             mods
+             (case (ly:music-property m 'name)
+               ((PropertySet)
+                (list 'assign
+                      symbol
+                      (ly:music-property m 'value)))
+               ((PropertyUnset)
+                (list 'unset symbol))
+               ((OverrideProperty)
+                (cons* 'push
+                       symbol
+                       (ly:music-property m 'grob-value)
                        (cond
                         ((ly:music-property m 'grob-property #f) => list)
                         (else
                          (ly:music-property m 'grob-property-path)))))
                ((RevertProperty)
-               (cons* 'pop
-                      symbol
+                (cons* 'pop
+                       symbol
                        (cond
                         ((ly:music-property m 'grob-property #f) => list)
                         (else
                          (ly:music-property m 'grob-property-path))))))))
-         (case (ly:music-property m 'name)
-           ((ApplyContext)
-            (ly:add-context-mod mods
-                                (list 'apply
-                                      (ly:music-property m 'procedure))))
-           ((ContextSpeccedMusic)
-            (loop (ly:music-property m 'element)
-                  (ly:music-property m 'context-type)))
-           (else
-            (let ((callback (ly:music-property m 'elements-callback)))
-              (if (procedure? callback)
-                  (fold loop context (callback m))
-                  (if (and warn (ly:duration? (ly:music-property m 'duration)))
-                      (begin
-                        (ly:music-warning
-                         music
-                         (_ "Music unsuitable for context-mod"))
-                        (set! warn #f))))))))
-      context)
+          (case (ly:music-property m 'name)
+            ((ApplyContext)
+             (ly:add-context-mod mods
+                                 (list 'apply
+                                       (ly:music-property m 'procedure))))
+            ((ContextSpeccedMusic)
+             (loop (ly:music-property m 'element)))
+            (else
+             (let ((callback (ly:music-property m 'elements-callback)))
+               (if (procedure? callback)
+                   (for-each loop (callback m))
+                   (if (and warn (ly:duration? (ly:music-property m 'duration)))
+                       (begin
+                         (ly:music-warning
+                          music
+                          (_ "Music unsuitable for context-mod"))
+                         (set! warn #f)))))))))
     mods))
 
 (define-public (context-defs-from-music parser output-def music)
@@ -318,64 +345,64 @@ bookoutput function"
       ;; context modification results in a reasonably recognizable
       ;; error.
       (if (music-is-of-type? m 'layout-instruction-event)
-         (ly:add-context-mod
-          mods
-          (case (ly:music-property m 'name)
-            ((PropertySet)
-             (list 'assign
-                   (ly:music-property m 'symbol)
-                   (ly:music-property m 'value)))
-            ((PropertyUnset)
-             (list 'unset
-                   (ly:music-property m 'symbol)))
-            ((OverrideProperty)
-             (cons* 'push
-                    (ly:music-property m 'symbol)
-                    (ly:music-property m 'grob-value)
+          (ly:add-context-mod
+           mods
+           (case (ly:music-property m 'name)
+             ((PropertySet)
+              (list 'assign
+                    (ly:music-property m 'symbol)
+                    (ly:music-property m 'value)))
+             ((PropertyUnset)
+              (list 'unset
+                    (ly:music-property m 'symbol)))
+             ((OverrideProperty)
+              (cons* 'push
+                     (ly:music-property m 'symbol)
+                     (ly:music-property m 'grob-value)
                      (cond
                       ((ly:music-property m 'grob-property #f) => list)
                       (else
                        (ly:music-property m 'grob-property-path)))))
-            ((RevertProperty)
-             (cons* 'pop
-                    (ly:music-property m 'symbol)
+             ((RevertProperty)
+              (cons* 'pop
+                     (ly:music-property m 'symbol)
                      (cond
                       ((ly:music-property m 'grob-property #f) => list)
                       (else
                        (ly:music-property m 'grob-property-path)))))))
-         (case (ly:music-property m 'name)
-           ((ApplyContext)
-            (ly:add-context-mod mods
-                                (list 'apply
-                                      (ly:music-property m 'procedure))))
-           ((ContextSpeccedMusic)
-            ;; Use let* here to let defs catch up with modifications
-            ;; to the context defs made in the recursion
-            (let* ((mods (loop (ly:music-property m 'element)
-                               (ly:make-context-mod)))
-                   (defs (ly:output-find-context-def
-                          output-def (ly:music-property m 'context-type))))
-              (if (null? defs)
-                  (ly:music-warning
-                   music
-                   (ly:format (_ "Cannot find context-def \\~a")
-                              (ly:music-property m 'context-type)))
-                  (for-each
-                   (lambda (entry)
-                     (ly:output-def-set-variable!
-                      output-def (car entry)
-                      (ly:context-def-modify (cdr entry) mods)))
-                   defs))))
-           (else
-            (let ((callback (ly:music-property m 'elements-callback)))
-              (if (procedure? callback)
-                  (fold loop mods (callback m))
-                  (if (and warn (ly:duration? (ly:music-property m 'duration)))
-                      (begin
-                        (ly:music-warning
-                         music
-                         (_ "Music unsuitable for output-def"))
-                        (set! warn #f))))))))
+          (case (ly:music-property m 'name)
+            ((ApplyContext)
+             (ly:add-context-mod mods
+                                 (list 'apply
+                                       (ly:music-property m 'procedure))))
+            ((ContextSpeccedMusic)
+             ;; Use let* here to let defs catch up with modifications
+             ;; to the context defs made in the recursion
+             (let* ((mods (loop (ly:music-property m 'element)
+                                (ly:make-context-mod)))
+                    (defs (ly:output-find-context-def
+                           output-def (ly:music-property m 'context-type))))
+               (if (null? defs)
+                   (ly:music-warning
+                    music
+                    (ly:format (_ "Cannot find context-def \\~a")
+                               (ly:music-property m 'context-type)))
+                   (for-each
+                    (lambda (entry)
+                      (ly:output-def-set-variable!
+                       output-def (car entry)
+                       (ly:context-def-modify (cdr entry) mods)))
+                    defs))))
+            (else
+             (let ((callback (ly:music-property m 'elements-callback)))
+               (if (procedure? callback)
+                   (fold loop mods (callback m))
+                   (if (and warn (ly:duration? (ly:music-property m 'duration)))
+                       (begin
+                         (ly:music-warning
+                          music
+                          (_ "Music unsuitable for output-def"))
+                         (set! warn #f))))))))
       mods)))
 
 
@@ -389,59 +416,42 @@ bookoutput function"
 (define-public (uniqued-alist alist acc)
   (if (null? alist) acc
       (if (assoc (caar alist) acc)
-         (uniqued-alist (cdr alist) acc)
-         (uniqued-alist (cdr alist) (cons (car alist) acc)))))
+          (uniqued-alist (cdr alist) acc)
+          (uniqued-alist (cdr alist) (cons (car alist) acc)))))
 
 (define-public (alist<? x y)
   (string<? (symbol->string (car x))
-           (symbol->string (car y))))
+            (symbol->string (car y))))
 
 (define (map-alist-vals func list)
-  "map FUNC over the vals of  LIST, leaving the keys."
+  "map FUNC over the vals of LIST, leaving the keys."
   (if (null?  list)
       '()
       (cons (cons  (caar list) (func (cdar list)))
-           (map-alist-vals func (cdr list)))))
+            (map-alist-vals func (cdr list)))))
 
 (define (map-alist-keys func list)
   "map FUNC over the keys of an alist LIST, leaving the vals."
   (if (null?  list)
       '()
       (cons (cons (func (caar list)) (cdar list))
-           (map-alist-keys func (cdr list)))))
+            (map-alist-keys func (cdr list)))))
 
 (define-public (first-member members lst)
   "Return first successful member (of member) from @var{members} in
 @var{lst}."
-  (if (null? members)
-      #f
-      (let ((m (member (car members) lst)))
-       (if m m (first-member (cdr members) lst)))))
+  (any (lambda (m) (member m lst)) members))
 
 (define-public (first-assoc keys lst)
   "Return first successful assoc of key from @var{keys} in @var{lst}."
-  (if (null? keys)
-      #f
-      (let ((k (assoc (car keys) lst)))
-       (if k k (first-assoc (cdr keys) lst)))))
+  (any (lambda (k) (assoc k lst)) keys))
 
 (define-public (flatten-alist alist)
   (if (null? alist)
       '()
       (cons (caar alist)
-           (cons (cdar alist)
-                 (flatten-alist (cdr alist))))))
-
-(define (assoc-remove key alist)
-  "Remove key (and its corresponding value) from an alist.
-   Different than assoc-remove! because it is non-destructive."
-  (define (assoc-crawler key l r)
-    (if (null? r)
-        l
-        (if (equal? (caar r) key)
-            (append l (cdr r))
-            (assoc-crawler key (append l `(,(car r))) (cdr r)))))
-  (assoc-crawler key '() alist))
+            (cons (cdar alist)
+                  (flatten-alist (cdr alist))))))
 
 (define-public (map-selected-alist-keys function keys alist)
   "Return @var{alist} with @var{function} applied to all of the values
@@ -452,19 +462,14 @@ For example:
 @code{guile> (map-selected-alist-keys - '(a b) '((a . 1) (b . -2) (c . 3) (d . 4)))}
 @code{((a . -1) (b . 2) (c . 3) (d . 4)}
 @end example"
-   (define (map-selected-alist-keys-helper function key alist)
-     (map
+  (define (map-selected-alist-keys-helper key alist)
+    (map
      (lambda (pair)
        (if (equal? key (car pair))
            (cons key (function (cdr pair)))
            pair))
      alist))
-   (if (null? keys)
-       alist
-       (map-selected-alist-keys
-         function
-         (cdr keys)
-         (map-selected-alist-keys-helper function (car keys) alist))))
+  (fold map-selected-alist-keys-helper alist keys))
 
 ;;;;;;;;;;;;;;;;
 ;; vector
@@ -479,89 +484,65 @@ For example:
 ;; hash
 
 (define-public (hash-table->alist t)
-  (hash-fold (lambda (k v acc) (acons  k v  acc))
-            '() t))
+  (hash-fold acons '() t))
 
 ;; todo: code dup with C++.
 (define-safe-public (alist->hash-table lst)
   "Convert alist to table"
   (let ((m (make-hash-table (length lst))))
-    (map (lambda (k-v) (hashq-set! m (car k-v) (cdr k-v))) lst)
+    (for-each (lambda (k-v) (hashq-set! m (car k-v) (cdr k-v))) lst)
     m))
 
 ;;;;;;;;;;;;;;;;
 ;; list
 
 (define (functional-or . rest)
-  (if (pair? rest)
-      (or (car rest)
-          (apply functional-or (cdr rest)))
-      #f))
+  (any identity rest))
 
 (define (functional-and . rest)
-  (if (pair? rest)
-      (and (car rest)
-          (apply functional-and (cdr rest)))
-      #t))
+  (every identity rest))
 
 (define (split-list lst n)
   "Split LST in N equal sized parts"
 
   (define (helper todo acc-vector k)
     (if (null? todo)
-       acc-vector
-       (begin
-         (if (< k 0)
-             (set! k (+ n k)))
+        acc-vector
+        (begin
+          (if (< k 0)
+              (set! k (+ n k)))
 
-         (vector-set! acc-vector k (cons (car todo) (vector-ref acc-vector k)))
-         (helper (cdr todo) acc-vector (1- k)))))
+          (vector-set! acc-vector k (cons (car todo) (vector-ref acc-vector k)))
+          (helper (cdr todo) acc-vector (1- k)))))
 
   (helper lst (make-vector n '()) (1- n)))
 
 (define (list-element-index lst x)
-  (define (helper todo k)
-    (cond
-     ((null? todo) #f)
-     ((equal? (car todo) x) k)
-     (else
-      (helper (cdr todo) (1+ k)))))
-
-  (helper lst 0))
+  (list-index (lambda (m) (equal? m x)) lst))
 
 (define-public (count-list lst)
   "Given @var{lst} as @code{(E1 E2 .. )}, return
 @code{((E1 . 1) (E2 . 2) ... )}."
-
-  (define (helper l acc count)
-    (if (pair? l)
-       (helper (cdr l) (cons (cons (car l) count) acc) (1+ count))
-       acc))
-
-
-  (reverse (helper lst '() 1)))
+  (map cons lst (iota (length lst) 1)))
 
 (define-public (list-join lst intermediate)
   "Put @var{intermediate} between all elts of @var{lst}."
 
   (fold-right
    (lambda (elem prev)
-           (if (pair? prev)
-               (cons  elem (cons intermediate prev))
-               (list elem)))
-         '() lst))
+     (if (pair? prev)
+         (cons  elem (cons intermediate prev))
+         (list elem)))
+   '() lst))
 
-(define-public (filtered-map proc lst)
-  (filter
-   (lambda (x) x)
-   (map proc lst)))
+(define-public filtered-map filter-map)
 
 (define-public (flatten-list x)
   "Unnest list."
-  (cond ((null? x) '())
-        ((not (pair? x)) (list x))
-        (else (append (flatten-list (car x))
-                      (flatten-list (cdr x))))))
+  (let loop ((x x) (tail '()))
+    (cond ((list? x) (fold-right loop tail x))
+          ((not (pair? x)) (cons x tail))
+          (else (loop (car x) (loop (cdr x) tail))))))
 
 (define (list-minus a b)
   "Return list of elements in A that are not in B."
@@ -573,56 +554,55 @@ for comparisons."
 
   (reverse!
    (fold (lambda (x acc)
-          (if (null? acc)
-              (list x)
-              (if (equal? x (car acc))
-                  acc
-                  (cons x acc))))
-        '() lst) '()))
+           (if (null? acc)
+               (list x)
+               (if (equal? x (car acc))
+                   acc
+                   (cons x acc))))
+         '() lst) '()))
 
 (define (split-at-predicate pred lst)
   "Split LST into two lists at the first element that returns #f for
   (PRED previous_element element).  Return the two parts as a pair.
   Example: (split-at-predicate < '(1 2 3 2 1)) ==> ((1 2 3) . (2 1))"
-  (if (null? lst)
-      (list lst)
-      (let ((i (list-index (lambda (x y) (not (pred x y)))
-                          lst
-                          (cdr lst))))
-        (if i
-            (cons (take lst (1+ i)) (drop lst (1+ i)))
-            (list lst)))))
+  (let ((i (and (pair? lst)
+                (list-index (lambda (x y) (not (pred x y)))
+                            lst
+                            (cdr lst)))))
+    (if i
+        (call-with-values
+            (lambda () (split-at lst (1+ i)))
+          cons)
+        (list lst))))
 
 (define-public (split-list-by-separator lst pred)
   "Split @var{lst} at each element that satisfies @var{pred}, and return
 the parts (with the separators removed) as a list of lists.  For example,
 executing @samp{(split-list-by-separator '(a 0 b c 1 d) number?)} returns
 @samp{((a) (b c) (d))}."
-  (let loop ((result '()) (lst lst))
-    (if (and lst (not (null? lst)))
-        (loop
-          (append result
-                  (list (take-while (lambda (x) (not (pred x))) lst)))
-          (let ((tail (find-tail pred lst)))
-            (if tail (cdr tail) #f)))
-       result)))
+  (call-with-values (lambda () (break pred lst))
+    (lambda (head tail)
+      (cons head
+            (if (null? tail)
+                tail
+                (split-list-by-separator (cdr tail) pred))))))
 
 (define-public (offset-add a b)
   (cons (+ (car a) (car b))
-       (+ (cdr a) (cdr b))))
+        (+ (cdr a) (cdr b))))
 
 (define-public (offset-flip-y o)
   (cons (car o) (- (cdr o))))
 
 (define-public (offset-scale o scale)
   (cons (* (car o) scale)
-       (* (cdr o) scale)))
+        (* (cdr o) scale)))
 
 (define-public (ly:list->offsets accum coords)
   (if (null? coords)
       accum
       (cons (cons (car coords) (cadr coords))
-           (ly:list->offsets accum (cddr coords)))))
+            (ly:list->offsets accum (cddr coords)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; intervals
@@ -638,7 +618,7 @@ executing @samp{(split-list-by-separator '(a 0 b c 1 d) number?)} returns
 
 (define-public (ordered-cons a b)
   (cons (min a b)
-       (max a b)))
+        (max a b)))
 
 (define-public (interval-bound interval dir)
   ((if (= dir RIGHT) cdr car) interval))
@@ -648,7 +628,7 @@ executing @samp{(split-list-by-separator '(a 0 b c 1 d) number?)} returns
 right (@var{dir}=+1)."
 
   (* (+  (interval-start interval) (interval-end interval)
-        (* dir (- (interval-end interval) (interval-start interval))))
+         (* dir (- (interval-end interval) (interval-start interval))))
      0.5))
 
 (define-public (interval-center x)
@@ -666,31 +646,31 @@ right (@var{dir}=+1)."
 
 (define-public (interval-scale iv factor)
   (cons (* (car iv) factor)
-    (* (cdr iv) factor)))
+        (* (cdr iv) factor)))
 
 (define-public (interval-widen iv amount)
   (cons (- (car iv) amount)
-    (+ (cdr iv) amount)))
+        (+ (cdr iv) amount)))
 
 (define-public (interval-empty? iv)
-   (> (car iv) (cdr iv)))
+  (> (car iv) (cdr iv)))
 
 (define-public (interval-union i1 i2)
   (cons
-    (min (car i1) (car i2))
-    (max (cdr i1) (cdr i2))))
+   (min (car i1) (car i2))
+   (max (cdr i1) (cdr i2))))
 
 (define-public (interval-intersection i1 i2)
-   (cons
-     (max (car i1) (car i2))
-     (min (cdr i1) (cdr i2))))
+  (cons
+   (max (car i1) (car i2))
+   (min (cdr i1) (cdr i2))))
 
 (define-public (interval-sane? i)
   (not (or  (nan? (car i))
-           (inf? (car i))
-           (nan? (cdr i))
-           (inf? (cdr i))
-           (> (car i) (cdr i)))))
+            (inf? (car i))
+            (nan? (cdr i))
+            (inf? (cdr i))
+            (> (car i) (cdr i)))))
 
 (define-public (add-point interval p)
   (cons (min (interval-start interval) p)
@@ -707,19 +687,19 @@ right (@var{dir}=+1)."
 
 (define (coord-operation operator operand coordinate)
   (if (pair? operand)
-    (cons (operator (coord-x operand) (coord-x coordinate))
-          (operator (coord-y operand) (coord-y coordinate)))
-    (cons (operator operand (coord-x coordinate))
-          (operator operand (coord-y coordinate)))))
+      (cons (operator (coord-x operand) (coord-x coordinate))
+            (operator (coord-y operand) (coord-y coordinate)))
+      (cons (operator operand (coord-x coordinate))
+            (operator operand (coord-y coordinate)))))
 
 (define (coord-apply function coordinate)
   (if (pair? function)
-    (cons
-      ((coord-x function) (coord-x coordinate))
-      ((coord-y function) (coord-y coordinate)))
-    (cons
-      (function (coord-x coordinate))
-      (function (coord-y coordinate)))))
+      (cons
+       ((coord-x function) (coord-x coordinate))
+       ((coord-y function) (coord-y coordinate)))
+      (cons
+       (function (coord-x coordinate))
+       (function (coord-y coordinate)))))
 
 (define-public (coord-translate coordinate amount)
   (coord-operation + amount coordinate))
@@ -729,16 +709,16 @@ right (@var{dir}=+1)."
 
 (define-public (coord-rotate coordinate degrees-in-radians)
   (let*
-    ((coordinate
-      (cons
-        (exact->inexact (coord-x coordinate))
-        (exact->inexact (coord-y coordinate))))
-     (radius
-      (sqrt
-        (+ (* (coord-x coordinate) (coord-x coordinate))
-           (* (coord-y coordinate) (coord-y coordinate)))))
-    (angle (angle-0-2pi (atan (coord-y coordinate) (coord-x coordinate)))))
-   (cons
+      ((coordinate
+        (cons
+         (exact->inexact (coord-x coordinate))
+         (exact->inexact (coord-y coordinate))))
+       (radius
+        (sqrt
+         (+ (* (coord-x coordinate) (coord-x coordinate))
+            (* (coord-y coordinate) (coord-y coordinate)))))
+       (angle (angle-0-2pi (atan (coord-y coordinate) (coord-x coordinate)))))
+    (cons
      (* radius (cos (+ angle degrees-in-radians)))
      (* radius (sin (+ angle degrees-in-radians))))))
 
@@ -777,31 +757,31 @@ right (@var{dir}=+1)."
 
 (define-public (ellipse-radius x-radius y-radius angle)
   (/
-    (* x-radius y-radius)
-    (sqrt
-      (+ (* (expt y-radius 2)
-            (* (cos angle) (cos angle)))
-        (* (expt x-radius 2)
-           (* (sin angle) (sin angle)))))))
+   (* x-radius y-radius)
+   (sqrt
+    (+ (* (expt y-radius 2)
+          (* (cos angle) (cos angle)))
+       (* (expt x-radius 2)
+          (* (sin angle) (sin angle)))))))
 
 (define-public (polar->rectangular radius angle-in-degrees)
   "Return polar coordinates (@var{radius}, @var{angle-in-degrees})
 as rectangular coordinates @ode{(x-length . y-length)}."
 
   (let ((complex (make-polar
-                    radius
-                    (degrees->radians angle-in-degrees))))
-     (cons
-       (real-part complex)
-       (imag-part complex))))
+                  radius
+                  (degrees->radians angle-in-degrees))))
+    (cons
+     (real-part complex)
+     (imag-part complex))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; string
 
 (define-public (string-endswith s suffix)
   (equal? suffix (substring s
-                           (max 0 (- (string-length s) (string-length suffix)))
-                           (string-length s))))
+                            (max 0 (- (string-length s) (string-length suffix)))
+                            (string-length s))))
 
 (define-public (string-startswith s prefix)
   (equal? prefix (substring s 0 (min (string-length s) (string-length prefix)))))
@@ -811,8 +791,8 @@ as rectangular coordinates @ode{(x-length . y-length)}."
    ((= i  0) "o")
    ((< i 0)   (string-append "n" (string-encode-integer (- i))))
    (else (string-append
-         (make-string 1 (integer->char (+ 65 (modulo i 26))))
-         (string-encode-integer (quotient i 26))))))
+          (make-string 1 (integer->char (+ 65 (modulo i 26))))
+          (string-encode-integer (quotient i 26))))))
 
 (define (number->octal-string x)
   (let* ((n (inexact->exact x))
@@ -829,14 +809,14 @@ as rectangular coordinates @ode{(x-length . y-length)}."
 
 (define-public (ly:number-pair->string c)
   (string-append (ly:number->string (car c)) " "
-                (ly:number->string (cdr c))))
+                 (ly:number->string (cdr c))))
 
 (define-public (dir-basename file . rest)
   "Strip suffixes in @var{rest}, but leave directory component for
 @var{file}."
   (define (inverse-basename x y) (basename y x))
   (simple-format #f "~a/~a" (dirname file)
-                (fold inverse-basename file rest)))
+                 (fold inverse-basename file rest)))
 
 (define-public (write-me message x)
   "Return @var{x}.  Display @var{message} and write @var{x}.
@@ -865,8 +845,8 @@ Handy for debugging, possibly turned off."
   "Create new list, inserting @var{between} between elements of @var{lst}."
   (define (conc x y )
     (if (eq? y #f)
-       (list x)
-       (cons x  (cons between y))))
+        (list x)
+        (cons x  (cons between y))))
   (fold-right conc #f lst))
 
 (define-public (string-regexp-substitute a b str)
@@ -878,9 +858,9 @@ Handy for debugging, possibly turned off."
   (define (notice match)
 
     (set! matches (cons (substring (match:string match)
-                                  end-of-prev-match
-                                  (match:start match))
-                       matches))
+                                   end-of-prev-match
+                                   (match:start match))
+                        matches))
     (set! end-of-prev-match (match:end match)))
 
   (regexp-substitute/global #f regex str notice 'post)
@@ -890,7 +870,7 @@ Handy for debugging, possibly turned off."
        matches
        (cons (substring str end-of-prev-match (string-length str)) matches)))
 
-   (reverse matches))
+  (reverse matches))
 
 ;;;;;;;;;;;;;;;;
 ;; other
@@ -907,13 +887,13 @@ applied to function @var{getter}.")
   (if (<= end start)
       start
       (let* ((compare (quotient (+ start end) 2))
-            (get-val (getter compare)))
-       (cond
-        ((< target-val get-val)
-         (set! end (1- compare)))
-        ((< get-val target-val)
-         (set! start (1+ compare))))
-       (binary-search start end getter target-val))))
+             (get-val (getter compare)))
+        (cond
+         ((< target-val get-val)
+          (set! end (1- compare)))
+         ((< get-val target-val)
+          (set! start (1+ compare))))
+        (binary-search start end getter target-val))))
 
 (define-public (car< a b)
   (< (car a) (car b)))
@@ -933,21 +913,18 @@ in module @var{module}.  In that case evaluate, otherwise
 print a warning and set an optional @var{default}."
   (let* ((unavailable? (lambda (sym)
                          (not (module-defined? module sym))))
-        (sym-unavailable (if (pair? symbol)
-                             (filter
-                               unavailable?
-                               (filter symbol? (flatten-list symbol)))
-                             (if (unavailable? symbol)
-                                  #t
-                                  '()))))
+         (sym-unavailable
+          (filter
+           unavailable?
+           (filter symbol? (flatten-list symbol)))))
     (if (null? sym-unavailable)
         (eval symbol module)
         (let* ((def (and (pair? default) (car default))))
           (ly:programming-error
-            "cannot evaluate ~S in module ~S, setting to ~S"
-            (object->string symbol)
-            (object->string module)
-            (object->string def))
+           "cannot evaluate ~S in module ~S, setting to ~S"
+           (object->string symbol)
+           (object->string module)
+           (object->string def))
           def))))
 
 ;;
@@ -955,18 +932,18 @@ print a warning and set an optional @var{default}."
 ;;
 (define-public (scm->string val)
   (if (and (procedure? val)
-          (symbol? (procedure-name val)))
+           (symbol? (procedure-name val)))
       (symbol->string (procedure-name val))
       (string-append
        (if (self-evaluating? val)
-          (if (string? val)
-              "\""
-              "")
-          "'")
+           (if (string? val)
+               "\""
+               "")
+           "'")
        (call-with-output-string (lambda (port) (display val port)))
        (if (string? val)
-          "\""
-          ""))))
+           "\""
+           ""))))
 
 (define-public (!= lst r)
   (not (= lst r)))
@@ -985,13 +962,13 @@ print a warning and set an optional @var{default}."
   (if (string? font)
       (string-downcase font)
       (let* ((font-name (ly:font-name font))
-            (full-name (if font-name font-name (ly:font-file-name font))))
-         (string-downcase full-name))))
+             (full-name (if font-name font-name (ly:font-file-name font))))
+        (string-downcase full-name))))
 
 (define-public (modified-font-metric-font-scaling font)
   (let* ((designsize (ly:font-design-size font))
-        (magnification (* (ly:font-magnification font)))
-        (scaling (* magnification designsize)))
+         (magnification (* (ly:font-magnification font)))
+         (scaling (* magnification designsize)))
     (debugf "scaling:~S\n" scaling)
     (debugf "magnification:~S\n" magnification)
     (debugf "design:~S\n" designsize)
@@ -999,11 +976,6 @@ print a warning and set an optional @var{default}."
 
 (define-public (version-not-seen-message input-file-name)
   (ly:warning-located
-    (ly:format "~a:0" input-file-name)
-    (_ "no \\version statement found, please add~afor future compatibility")
-    (format #f "\n\n\\version ~s\n\n" (lilypond-version))))
-
-(define-public (old-relative-not-used-message input-file-name)
-  (ly:warning-located
-    (ly:format "~a:0" input-file-name)
-    (_ "old relative compatibility not used")))
+   (ly:format "~a:1" input-file-name)
+   (_ "no \\version statement found, please add~afor future compatibility")
+   (format #f "\n\n\\version ~s\n\n" (lilypond-version))))
index 19fba423d42e398b80336014d4982eccdbafa68e..95d3e33ffbe163c75f5a67d26df1d9acfc5b8fb9 100644 (file)
           ((null? a) (cons #f (car b)))
           ((null? b) (cons (car a) #f))
           ((not ((if ci char-ci=? char=?) (car a) (car b)))
-              (cons (car a) (car b)))
+           (cons (car a) (car b)))
           (else (find-mismatch (cdr a) (cdr b))))))
 
 (define (ly:string-generic-<? a b ci)
   (let ((mismatch (first-diff-chars a b ci)))
     (cond ((and mismatch (car mismatch) (cdr mismatch))
-             ((if ci ly:char-ci<? ly:char<?)
-                   (car mismatch) (cdr mismatch)))
+           ((if ci ly:char-ci<? ly:char<?)
+            (car mismatch) (cdr mismatch)))
           ((and mismatch (cdr mismatch)) #t)
           (else #f))))
 
index b0b8173161ff46201c09f147e0eaa6c3ca52aa8e..9e47fc0df7548dcdc55d049f7afbfa7997a882c0 100644 (file)
    (string-downcase
     (car (string-tokenize (utsname:sysname (uname)))))))
 
+;;
+;; Session-handling variables and procedures.
+;;
+;;  A "session" corresponds to one .ly file processed on a LilyPond
+;;  command line.  Every session gets to see a reasonably fresh state
+;;  of LilyPond and should work independently from previous files.
+;;
+;;  Session management relies on cooperation, namely the user not
+;;  trying to change variables and data structures internal to
+;;  LilyPond.  It is not proof against in-place modification of data
+;;  structures (as they are just reinitialized with the original
+;;  identities), and it is not proof against tampering with internals.
+;;
+;;  As a consequence, session management is not sufficient for
+;;  separating multiple independent .ly files in "-dsafe" mode: you
+;;  should give each its own LilyPond process when reliable separation
+;;  is mandatory.
+;;
+;;  For standard tasks and programming practices, multiple sessions in
+;;  the same LilyPond job should work reasonably independently and
+;;  without "bleed-over" while still loading and compiling the
+;;  relevant .scm and .ly files only once.
+;;
+
+(define lilypond-declarations '())
+(define after-session-hook (make-hook))
+
+(define-public (call-after-session thunk)
+  (if (ly:undead? lilypond-declarations)
+      (ly:error (_ "call-after-session used after session start")))
+  (add-hook! after-session-hook thunk #t))
+
+(defmacro-public define-session (name value)
+  "This defines a variable @var{name} with the starting value
+@var{value} that is reinitialized at the start of each session.
+A@tie{}session basically corresponds to one LilyPond file on the
+command line.  The value is recorded at the start of the first session
+after loading all initialization files and before loading the user
+file and is reinstated for all of the following sessions.  This
+happens just by replacing the value, not by copying structures, so you
+should not destructively modify them.  For example, lists defined in
+this manner should be changed within a session only be adding material
+to their front or replacing them altogether, not by modifying parts of
+them.  It is an error to call @code{define-session} after the first
+session has started."
+  (define (add-session-variable name value)
+    (if (ly:undead? lilypond-declarations)
+        (ly:error (_ "define-session used after session start")))
+    (let ((var (make-variable value)))
+      (module-add! (current-module) name var)
+      (set! lilypond-declarations (cons var lilypond-declarations))))
+  `(,add-session-variable ',name ,value))
+
+(defmacro-public define-session-public (name value)
+  "Like @code{define-session}, but also exports @var{name}."
+  `(begin
+     (define-session ,name ,value)
+     (export ,name)))
+
+(define (session-terminate)
+  (if (ly:undead? lilypond-declarations)
+      (begin
+        (for-each
+         (lambda (p) (variable-set! (cadr p) (cddr p)))
+         (ly:get-undead lilypond-declarations))
+        (run-hook after-session-hook))))
+
+(define lilypond-interfaces #f)
+
+(define-public (session-initialize thunk)
+  "Initialize this session.  The first session in a LilyPond run is
+initialized by calling @var{thunk}, then recording the values of all
+variables in the current module as well as those defined with
+@code{define-session}.  Subsequent calls of @code{session-initialize}
+ignore @var{thunk} and instead just reinitialize all recorded
+variables to their value after the initial call of @var{thunk}."
+
+  ;; We need to save the variables of the current module along with
+  ;; their values: functions defined in the module might refer to the
+  ;; variables.
+
+  ;; The entries in lilypond-declarations consist of a cons* consisting
+  ;; of symbol, variable, and value.  Variables defined with
+  ;; define-session have the symbol set to #f.
+
+  (if (ly:undead? lilypond-declarations)
+      (begin
+        (module-use-interfaces! (current-module) (reverse lilypond-interfaces))
+        (for-each
+         (lambda (p)
+           (let ((var (cadr p))
+                 (val (cddr p)))
+             (variable-set! var val)
+             (if (car p)
+                 (module-add! (current-module) (car p) var))))
+         (ly:get-undead lilypond-declarations)))
+      (begin
+        (thunk)
+        (set! lilypond-interfaces
+              (filter (lambda (m) (eq? 'interface (module-kind m)))
+                      (module-uses (current-module))))
+        (let ((decl (map! (lambda (v)
+                            (cons* #f v (variable-ref v)))
+                          lilypond-declarations)))
+          (module-for-each
+           (lambda (s v)
+             (let ((val (variable-ref v)))
+               (if (not (ly:lily-parser? val))
+                   (set! decl
+                         (cons
+                          (cons* s v val)
+                          decl)))))
+           (current-module))
+          (set! lilypond-declarations (ly:make-undead decl))))))
+
 (define scheme-options-definitions
   `(
     ;; NAMING: either
     ;; be longer than 48 characters per line.
 
     (anti-alias-factor 1
-"Render at higher resolution (using given factor)
+                       "Render at higher resolution (using given factor)
 and scale down result to prevent jaggies in
 PNG images.")
-    (aux-files #t
-"Create .tex, .texi, .count files in the
+    (aux-files
+     #t
+     "Create .tex, .texi, .count files in the
 EPS backend.")
-    (backend ps
-"Select backend.  Possible values: 'eps, 'null,
+    (backend
+     ps
+     "Select backend.  Possible values: 'eps, 'null,
 'ps, 'scm, 'socket, 'svg.")
-    (check-internal-types #f
-"Check every property assignment for types.")
-    (clip-systems #f
-"Generate cut-out snippets of a score.")
-    (datadir #f
-"LilyPond prefix for data files (read-only).")
-    (debug-gc #f
-"Dump memory debugging statistics.")
-    (debug-gc-assert-parsed-dead #f
-"For memory debugging: Ensure that all
+    (check-internal-types
+     #f
+     "Check every property assignment for types.")
+    (clip-systems
+     #f
+     "Generate cut-out snippets of a score.")
+    (datadir
+     #f
+     "LilyPond prefix for data files (read-only).")
+    (debug-gc
+     #f
+     "Dump memory debugging statistics.")
+    (debug-gc-assert-parsed-dead
+     #f
+     "For memory debugging: Ensure that all
 references to parsed objects are dead.  This is
 an internal option, and is switched on
 automatically for `-ddebug-gc'.")
-    (debug-lexer #f
-"Debug the flex lexer.")
-    (debug-page-breaking-scoring #f
-"Dump scores for many different page breaking
+    (debug-lexer
+     #f
+     "Debug the flex lexer.")
+    (debug-page-breaking-scoring
+     #f
+     "Dump scores for many different page breaking
 configurations.")
-    (debug-parser #f
-"Debug the bison parser.")
-    (debug-property-callbacks #f
-"Debug cyclic callback chains.")
-    (debug-skylines #f
-"Debug skylines.")
-    (delete-intermediate-files #t
-"Delete unusable, intermediate PostScript files.")
-    (dump-profile #f
-"Dump memory and time information for each file.")
-    (dump-cpu-profile #f
-"Dump timing information (system-dependent).")
-    (dump-signatures #f
-"Dump output signatures of each system.  Used for
+    (debug-parser
+     #f
+     "Debug the bison parser.")
+    (debug-property-callbacks
+     #f
+     "Debug cyclic callback chains.")
+    (debug-skylines
+     #f
+     "Debug skylines.")
+    (delete-intermediate-files
+     #t
+     "Delete unusable, intermediate PostScript files.")
+    (dump-profile
+     #f
+     "Dump memory and time information for each file.")
+    (dump-cpu-profile
+     #f
+     "Dump timing information (system-dependent).")
+    (dump-signatures
+     #f
+     "Dump output signatures of each system.  Used for
 regression testing.")
-    (eps-box-padding #f
-"Pad left edge of the output EPS bounding box by
+    (eps-box-padding
+     #f
+     "Pad left edge of the output EPS bounding box by
 given amount (in mm).")
-    (gs-load-fonts #f
-"Load fonts via Ghostscript.")
-    (gs-load-lily-fonts #f
-"Load only LilyPond fonts via Ghostscript.")
-    (gui #f
-"Run LilyPond from a GUI and redirect stderr to
+    (gs-load-fonts
+     #f
+     "Load fonts via Ghostscript.")
+    (gs-load-lily-fonts
+     #f
+     "Load only LilyPond fonts via Ghostscript.")
+    (gui
+     #f
+     "Run LilyPond from a GUI and redirect stderr to
 a log file.")
-    (help #f
-"Show this help.")
-    (include-book-title-preview #t
-"Include book titles in preview images.")
-    (include-eps-fonts #t
-"Include fonts in separate-system EPS files.")
-    (include-settings #f
-"Include file for global settings, included before the score is processed.")
-    (job-count #f
-"Process in parallel, using the given number of
+    (help
+     #f
+     "Show this help.")
+    (include-book-title-preview
+     #t
+     "Include book titles in preview images.")
+    (include-eps-fonts
+     #t
+     "Include fonts in separate-system EPS files.")
+    (include-settings
+     #f
+     "Include file for global settings, included before the score is processed.")
+    (job-count
+     #f
+     "Process in parallel, using the given number of
 jobs.")
-    (log-file #f
-"If string FOO is given as argument, redirect
+    (log-file
+     #f
+     "If string FOO is given as argument, redirect
 output to log file `FOO.log'.")
-    (max-markup-depth 1024
-"Maximum depth for the markup tree. If a markup has more levels,
+    (max-markup-depth
+     1024
+     "Maximum depth for the markup tree. If a markup has more levels,
 assume it will not terminate on its own, print a warning and return a
 null markup instead.")
     (midi-extension ,(if (eq? PLATFORM 'windows)
                          "mid"
                          "midi")
-"Set the default file extension for MIDI output
+                    "Set the default file extension for MIDI output
 file to given string.")
-    (music-strings-to-paths #f
-"Convert text strings to paths when glyphs belong
+    (music-strings-to-paths
+     #f
+     "Convert text strings to paths when glyphs belong
 to a music font.")
-    (old-relative #f
-"Make \\relative mode for simultaneous music work
-similar to chord syntax.")
-    (point-and-click #t
-"Add point & click links to PDF output.")
-    (paper-size "a4"
-"Set default paper size.")
-    (pixmap-format "png16m"
-"Set GhostScript's output format for pixel images.")
-    (preview #f
-"Create preview images also.")
-    (print-pages #t
-"Print pages in the normal way.")
-    (protected-scheme-parsing #t
-"Continue when errors in inline scheme are caught
+    (point-and-click
+     #t
+     "Add point & click links to PDF output.")
+    (paper-size
+     "a4"
+     "Set default paper size.")
+    (pixmap-format
+     "png16m"
+     "Set GhostScript's output format for pixel images.")
+    (preview
+     #f
+     "Create preview images also.")
+    (print-pages
+     #t
+     "Print pages in the normal way.")
+    (protected-scheme-parsing
+     #t
+     "Continue when errors in inline scheme are caught
 in the parser.  If #f, halt on errors and print
 a stack trace.")
-    (profile-property-accesses #f
-"Keep statistics of get_property() calls.")
-    (resolution 101
-"Set resolution for generating PNG pixmaps to
+    (profile-property-accesses
+     #f
+     "Keep statistics of get_property() calls.")
+    (resolution
+     101
+     "Set resolution for generating PNG pixmaps to
 given value (in dpi).")
-    (read-file-list #f
-"Specify name of a file which contains a list of
+    (read-file-list
+     #f
+     "Specify name of a file which contains a list of
 input files to be processed.")
-    (relative-includes #f
-"When processing an \\include command, look for
-the included file relative to the current file
-(instead of the root file)")
-    (safe #f
-"Run in safer mode.")
-    (separate-log-files #f
-"For input files `FILE1.ly', `FILE2.ly', ...
+    (relative-includes
+     #f
+     "When processing an \\include command, look for
+the included file relative to the current file\
+\n(instead of the root file)")
+    (safe
+     #f
+     "Run in safer mode.")
+    (separate-log-files
+     #f
+     "For input files `FILE1.ly', `FILE2.ly', ...
 output log data to files `FILE1.log',
 `FILE2.log', ...")
-    (show-available-fonts #f
-"List available font names.")
-    (strict-infinity-checking #f
-"Force a crash on encountering Inf and NaN
+    (show-available-fonts
+     #f
+     "List available font names.")
+    (strict-infinity-checking
+     #f
+     "Force a crash on encountering Inf and NaN
 floating point exceptions.")
-    (strip-output-dir #t
-"Don't use directories from input files while
+    (strip-output-dir
+     #t
+     "Don't use directories from input files while
 constructing output file names.")
-    (svg-woff #f
-"Use woff font files in SVG backend.")
-    (trace-memory-frequency #f
-"Record Scheme cell usage this many times per
+    (svg-woff
+     #f
+     "Use woff font files in SVG backend.")
+    (trace-memory-frequency
+     #f
+     "Record Scheme cell usage this many times per
 second.  Dump results to `FILE.stacks' and
 `FILE.graph'.")
-    (trace-scheme-coverage #f
-"Record coverage of Scheme files in `FILE.cov'.")
+    (trace-scheme-coverage
+     #f
+     "Record coverage of Scheme files in `FILE.cov'.")
     (verbose ,(ly:verbose-output?)
-"Verbose output, i.e. loglevel at least DEBUG (read-only).")
-    (warning-as-error #f
-"Change all warning and programming_error
+             "Verbose output, i.e. loglevel at least DEBUG (read-only).")
+    (warning-as-error
+     #f
+     "Change all warning and programming_error
 messages into errors.")
     ))
 
@@ -220,7 +379,7 @@ messages into errors.")
              (scm clip-region)
              (scm memory-trace)
              (scm coverage)
-            (scm safe-utility-defs))
+             (scm safe-utility-defs))
 
 (define-public _ gettext)
 ;;; There are new modules defined in Guile V2.0 which we need to use.
@@ -230,11 +389,11 @@ messages into errors.")
 ;;
 
 (cond
 ((guile-v2)
-   (ly:debug (_ "Using (ice-9 curried-definitions) module\n"))
-   (use-modules (ice-9 curried-definitions)))
 (else
-    (ly:debug (_ "Guile 1.8\n"))))
+ ((guile-v2)
+  (ly:debug (_ "Using (ice-9 curried-definitions) module\n"))
+  (use-modules (ice-9 curried-definitions)))
+ (else
+  (ly:debug (_ "Guile 1.8\n"))))
 
 ;; TODO add in modules for V1.8.7 deprecated in V2.0 and integrated
 ;; into Guile base code, like (ice-9 syncase).
@@ -289,7 +448,6 @@ messages into errors.")
 (if (memq (ly:get-option 'backend) music-string-to-path-backends)
     (ly:set-option 'music-strings-to-paths #t))
 
-
 (define-public (ly:load x)
   (let* ((file-name (%search-load-path x)))
     (ly:debug "[~A" file-name)
@@ -311,8 +469,8 @@ messages into errors.")
   (if (string-index x #\\)
       x
       (string-regexp-substitute
-        "//*" "/"
-        (string-regexp-substitute "\\\\" "/" x))))
+       "//*" "/"
+       (string-regexp-substitute "\\\\" "/" x))))
 
 (define-public (ly-getcwd)
   (if (eq? PLATFORM 'windows)
@@ -382,6 +540,7 @@ messages into errors.")
     "define-note-names.scm"
     "c++.scm"
     "chord-entry.scm"
+    "skyline.scm"
     "stencil.scm"
     "define-markup-commands.scm"
     "markup.scm"
@@ -420,6 +579,7 @@ messages into errors.")
     "define-grobs.scm"
     "define-grob-interfaces.scm"
     "define-stencil-commands.scm"
+    "scheme-engravers.scm"
     "titling.scm"
     "text.scm"
 
@@ -428,7 +588,7 @@ messages into errors.")
     "x11-color.scm"))
 ;;  - Files to be loaded last
 (define init-scheme-files-tail
-;;  - must be after everything has been defined
+  ;;  - must be after everything has been defined
   '("safe-lily.scm"))
 ;;
 ;; Now construct the load list
@@ -483,7 +643,7 @@ messages into errors.")
 
 (define-public guile-predicates
   `((,hash-table? . "hash table")
-  ))
+    ))
 
 (define-public lilypond-scheme-predicates
   `((,boolean-or-symbol? . "boolean or symbol")
@@ -492,21 +652,25 @@ messages into errors.")
     (,fraction? . "fraction, as pair")
     (,grob-list? . "list of grobs")
     (,index? . "non-negative integer")
-    ;; this is built on cheap-list
-    (,list-or-symbol? . "list or symbol")
     (,markup? . "markup")
     (,markup-command-list? . "markup command list")
     (,markup-list? . "markup list")
     (,moment-pair? . "pair of moment objects")
     (,number-list? . "number list")
     (,number-or-grob? . "number or grob")
+    (,number-or-markup? . "number or markup")
     (,number-or-pair? . "number or pair")
     (,number-or-string? . "number or string")
     (,number-pair? . "pair of numbers")
+    (,number-pair-list? . "list of number pairs")
     (,rhythmic-location? . "rhythmic location")
     (,scheme? . "any type")
     (,string-or-pair? . "string or pair")
+    (,string-or-music? . "string or music")
     (,string-or-symbol? . "string or symbol")
+    (,symbol-list? . "symbol list")
+    (,symbol-list-or-music? . "symbol list or music")
+    (,symbol-list-or-symbol? . "symbol list or symbol")
     (,void? . "void")
     ))
 
@@ -597,6 +761,10 @@ messages into errors.")
 (define gc-protect-stat-count
   0)
 
+;; Undead objects that should be ignored after the first time round
+(define gc-zombies
+  (make-weak-key-hash-table 0))
+
 (define-public (dump-live-object-stats outfile)
   (for-each (lambda (x)
               (format outfile "~a: ~a\n" (car x) (cdr x)))
@@ -610,10 +778,10 @@ messages into errors.")
                          (lambda (a b)
                            (< (object-address (car a))
                               (object-address (car b))))))
-        (out-file-name (string-append
-                       "gcstat-" (number->string gc-protect-stat-count)
-                       ".scm"))
-        (outfile (open-file out-file-name "w")))
+         (out-file-name (string-append
+                         "gcstat-" (number->string gc-protect-stat-count)
+                         ".scm"))
+         (outfile (open-file out-file-name "w")))
     (set! gc-dumping #t)
     (ly:progress "Dumping GC statistics ~a...\n" out-file-name)
     (for-each (lambda (y)
@@ -643,10 +811,13 @@ messages into errors.")
           (ly:set-option 'debug-gc-assert-parsed-dead #t)
           (gc)
           (ly:set-option 'debug-gc-assert-parsed-dead #f)
-         (for-each
-          (lambda (x)
-            (ly:programming-error "Parsed object should be dead: ~a" x))
-          (ly:parsed-undead-list!))
+          (for-each
+           (lambda (x)
+             (if (not (hashq-ref gc-zombies x))
+                 (begin
+                   (ly:programming-error "Parsed object should be dead: ~a" x)
+                   (hashq-set! gc-zombies x #t))))
+           (ly:parsed-undead-list!))
           (set! stats (gc-live-object-stats))
           (ly:progress "Dumping live object statistics.\n")
           (dump-live-object-stats outfile)))
@@ -671,11 +842,10 @@ messages into errors.")
 
   (let* ((stat (gulp-file "/proc/self/status"))
          (lines (string-split stat #\newline))
-         (interesting (filter identity
-                              (map
-                               (lambda (l)
-                                 (string-match "^VmData:[ \t]*([0-9]*) kB" l))
-                               lines)))
+         (interesting (filter-map
+                       (lambda (l)
+                         (string-match "^VmData:[ \t]*([0-9]*) kB" l))
+                       lines))
          (mem (string->number (match:substring (car interesting) 1))))
     (format #t "VMDATA: ~a\n" mem)
     (display (gc-stats))
@@ -692,9 +862,9 @@ PIDs or the number of the process."
   (define (helper count acc)
     (if (> count 0)
         (let* ((pid (primitive-fork)))
-              (if (= pid 0)
-                  (1- count)
-                  (helper (1- count) (cons pid acc))))
+          (if (= pid 0)
+              (1- count)
+              (helper (1- count) (cons pid acc))))
         acc))
 
   (helper count '()))
@@ -728,12 +898,11 @@ PIDs or the number of the process."
              (ly:exit 2 #t)))
   (if (ly:get-option 'read-file-list)
       (set! files
-            (filter (lambda (s)
-                      (> (string-length s) 0))
-                    (apply append
-                           (map (lambda (f)
-                                  (string-split (string-delete (ly:gulp-file f) #\cr) #\nl))
-                                files)))))
+            (remove string-null?
+                    (append-map
+                     (lambda (f)
+                       (string-split (string-delete (ly:gulp-file f) #\cr) #\nl))
+                     files))))
   (if (and (number? (ly:get-option 'job-count))
            (>= (length files) (ly:get-option 'job-count)))
       (let* ((count (ly:get-option 'job-count))
@@ -746,7 +915,7 @@ PIDs or the number of the process."
             (begin (ly:set-option
                     'log-file (format #f "~a-~a"
                                       (ly:get-option 'log-file) joblist))
-                    (set! files (vector-ref split-todo joblist)))
+                   (set! files (vector-ref split-todo joblist)))
             (begin (ly:progress "\nForking into jobs:  ~a\n" joblist)
                    (for-each
                     (lambda (pid)
@@ -754,7 +923,7 @@ PIDs or the number of the process."
                         (if (not (= stat 0))
                             (set! errors
                                   (acons (list-element-index joblist pid)
-                                 stat errors)))))
+                                         stat errors)))))
                     joblist)
                    (for-each
                     (lambda (x)
@@ -773,17 +942,17 @@ PIDs or the number of the process."
                             (ly:message
                              (_ "logfile ~a (exit ~a):\n~a")
                              logfile (status:exit-val state) tail))))
-                      errors)
-                     (if (pair? errors)
-                         (ly:error "Children ~a exited with errors."
-                                   (map car errors)))
-                     ;; must overwrite individual entries
-                     (if (ly:get-option 'dump-profile)
-                         (dump-profile "lily-run-total"
-                                       '(0 0) (profile-measurements)))
-                     (if (null? errors)
-                         (ly:exit 0 #f)
-                         (ly:exit 1 #f))))))
+                    errors)
+                   (if (pair? errors)
+                       (ly:error "Children ~a exited with errors."
+                                 (map car errors)))
+                   ;; must overwrite individual entries
+                   (if (ly:get-option 'dump-profile)
+                       (dump-profile "lily-run-total"
+                                     '(0 0) (profile-measurements)))
+                   (if (null? errors)
+                       (ly:exit 0 #f)
+                       (ly:exit 1 #f))))))
 
   (if (string-or-symbol? (ly:get-option 'log-file))
       (ly:stderr-redirect (format #f "~a.log" (ly:get-option 'log-file)) "w"))
@@ -827,6 +996,7 @@ PIDs or the number of the process."
              (mtrace:start-trace  (ly:get-option 'trace-memory-frequency)))
          (lilypond-file handler x)
          (ly:check-expected-warnings)
+         (session-terminate)
          (if start-measurements
              (dump-profile x start-measurements (profile-measurements)))
          (if (ly:get-option 'trace-memory-frequency)
@@ -838,10 +1008,13 @@ PIDs or the number of the process."
          (ly:set-option 'debug-gc-assert-parsed-dead #t)
          (gc)
          (ly:set-option 'debug-gc-assert-parsed-dead #f)
-        (for-each
-         (lambda (x)
-           (ly:programming-error "Parsed object should be dead: ~a" x))
-         (ly:parsed-undead-list!))
+         (for-each
+          (lambda (x)
+            (if (not (hashq-ref gc-zombies x))
+                (begin
+                  (ly:programming-error "Parsed object should be dead: ~a" x)
+                  (hashq-set! gc-zombies x #t))))
+          (ly:parsed-undead-list!))
          (if (ly:get-option 'debug-gc)
              (dump-gc-protects)
              (ly:reset-all-fonts))
@@ -855,8 +1028,6 @@ PIDs or the number of the process."
         (dump-profile "lily-run-total" '(0 0) (profile-measurements)))
     failed))
 
-(define-public lilypond-declarations '())
-
 (define (lilypond-file handler file-name)
   (catch 'ly-file-failed
          (lambda () (ly:parse-file file-name))
index 9cbec5fc4f55f61c6b28f17e558109da84e0a4b4..b3d7f3f0f01cf942ef71f7db0caa19fd47db742f 100644 (file)
@@ -18,7 +18,7 @@
 ;; TODO: use separate module for syntax
 ;; constructors. Also create wrapper around the constructor?
 (defmacro define-ly-syntax (args . body)
-  `(define-public ,args ,(cons 'begin body)))
+  `(define-public ,args ,@body))
 
 ;; A ly-syntax constructor takes two extra parameters, parser and
 ;; location. These are mainly used for reporting errors and
@@ -35,9 +35,9 @@
 ;; report errors.
 (defmacro define-ly-syntax-simple (args . body)
   `(define-public ,(cons* (car args)
-                         'parser
-                         'location
-                         (cdr args))
+                          'parser
+                          'location
+                          (cdr args))
      (let ((m ,(cons 'begin body)))
        (set! (ly:music-property m 'origin) location)
        m)))
 ;; fallback.
 (define-ly-syntax (music-function parser loc fun args . rest)
   (let* ((sig (ly:music-function-signature fun))
-        (pred (if (pair? (car sig)) (caar sig) (car sig)))
-        (good (proper-list? args))
-        (m (and good (apply (ly:music-function-extract fun)
-                            parser loc (reverse! args rest)))))
+         (pred (if (pair? (car sig)) (caar sig) (car sig)))
+         (good (proper-list? args))
+         (m (and good (apply (ly:music-function-extract fun)
+                             parser loc (reverse! args rest)))))
     (if (and good (pred m))
-       (begin
-         (if (ly:music? m)
-             (set! (ly:music-property m 'origin) loc))
-         m)
-       (begin
-         (if good
-             (ly:parser-error parser
-                              (format #f (_ "~a function cannot return ~a")
-                                      (type-name pred) m)
-                              loc))
-         (and (pair? (car sig)) (cdar sig))))))
+        (begin
+          (if (ly:music? m)
+              (set! (ly:music-property m 'origin) loc))
+          m)
+        (begin
+          (if good
+              (ly:parser-error parser
+                               (format #f (_ "~a function cannot return ~a")
+                                       (type-name pred) m)
+                               loc))
+          (and (pair? (car sig)) (cdar sig))))))
 
 (define-ly-syntax (argument-error parser location n pred arg)
   (ly:parser-error
    parser
    (format #f
-          (_ "wrong type for argument ~a.  Expecting ~a, found ~s")
-          n (type-name pred) arg)
+           (_ "wrong type for argument ~a.  Expecting ~a, found ~s")
+           n (type-name pred) arg)
    location))
 
 (define-ly-syntax-simple (void-music)
 
 (define-ly-syntax-simple (event-chord mlist)
   (make-music 'EventChord
-             'elements mlist))
+              'elements mlist))
 
 (define-ly-syntax-simple (unrelativable-music mus)
   (make-music 'UnrelativableMusic
-             'element mus))
+              'element mus))
 
 (define-ly-syntax-simple (context-change type id)
   (make-music 'ContextChange
-             'change-to-type type
-             'change-to-id id))
-
-(define-ly-syntax-simple (voice-separator)
-  (make-music 'VoiceSeparator))
-
-(define-ly-syntax-simple (bar-check)
-  (make-music 'BarCheck))
+              'change-to-type type
+              'change-to-id id))
 
 (define-ly-syntax (tempo parser location text . rest)
   (let* ((unit (and (pair? rest)
-                   (car rest)))
-        (count (and unit
-                    (cadr rest)))
-        (range-tempo? (pair? count))
-        (tempo-change (make-music 'TempoChangeEvent
-                                  'origin location
-                                  'text text
-                                  'tempo-unit unit
-                                  'metronome-count count))
-        (tempo-set
-         (and unit
-              (context-spec-music
-               (make-property-set 'tempoWholesPerMinute
-                                  (ly:moment-mul
-                                   (ly:make-moment
-                                    (if range-tempo?
-                                        (round (/ (+ (car count) (cdr count))
-                                                  2))
-                                        count)
-                                    1)
-                                   (ly:duration-length unit)))
-               'Score))))
+                    (car rest)))
+         (count (and unit
+                     (cadr rest)))
+         (range-tempo? (pair? count))
+         (tempo-change (make-music 'TempoChangeEvent
+                                   'origin location
+                                   'text text
+                                   'tempo-unit unit
+                                   'metronome-count count))
+         (tempo-set
+          (and unit
+               (context-spec-music
+                (make-property-set 'tempoWholesPerMinute
+                                   (ly:moment-mul
+                                    (ly:make-moment
+                                     (if range-tempo?
+                                         (round (/ (+ (car count) (cdr count))
+                                                   2))
+                                         count)
+                                     1)
+                                    (ly:duration-length unit)))
+                'Score))))
 
     (if tempo-set
-       (make-sequential-music (list tempo-change tempo-set))
-       tempo-change)))
+        (make-sequential-music (list tempo-change tempo-set))
+        tempo-change)))
 
 (define-ly-syntax-simple (repeat type num body alts)
   (make-repeat type num body alts))
   "Extract @code{'direction} and @code{'text} from @var{music}, and transform
 into a @code{MultiMeasureTextEvent}."
 
-  (if (memq 'script-event (ly:music-property music 'types))
-      (let* ((location (ly:music-property music 'origin))
-            (dir (ly:music-property music 'direction))
-            (tags (ly:music-property music 'tags))
-            (p (make-music 'MultiMeasureTextEvent
-                           'origin location
-                           'tags tags
-                           'text (ly:music-property music 'text))))
-       (if (ly:dir? dir)
-           (set! (ly:music-property p 'direction) dir))
-       p)
+  (if (music-is-of-type? music 'script-event)
+      (make-music 'MultiMeasureTextEvent music)
       music))
 
 (define-ly-syntax (multi-measure-rest parser location duration articulations)
   (make-music 'MultiMeasureRestMusic
-             'articulations (map script-to-mmrest-text articulations)
-             'duration duration
-             'origin location))
+              'articulations (map script-to-mmrest-text articulations)
+              'duration duration
+              'origin location))
 
 (define-ly-syntax (repetition-chord parser location duration articulations)
   (make-music 'EventChord
-             'duration duration
-             'elements articulations
-             'origin location))
+              'duration duration
+              'elements articulations
+              'origin location))
 
 (define-ly-syntax-simple (context-specification type id ops create-new mus)
-  (let* ((type-sym (if (symbol? type) type (string->symbol type)))
-        (csm (context-spec-music mus type-sym id)))
+  (let ((csm (context-spec-music mus type id)))
     (set! (ly:music-property csm 'property-operations) ops)
     (if create-new (set! (ly:music-property csm 'create-new) #t))
     csm))
 
+(define-ly-syntax (composed-markup-list parser location commands markups)
+  ;; `markups' being a list of markups, eg (markup1 markup2 markup3),
+  ;; and `commands' a list of commands with their scheme arguments, in reverse order,
+  ;; eg: ((italic) (raise 4) (bold)), maps the commands on each markup argument, eg:
+  ;;  ((bold (raise 4 (italic markup1)))
+  ;;   (bold (raise 4 (italic markup2)))
+  ;;   (bold (raise 4 (italic markup3))))
+
+  (define (compose arg)
+    (fold
+     (lambda (cmd prev) (append cmd (list prev)))
+     arg
+     commands))
+  (let loop ((markups markups) (completed '()))
+    (cond ((null? markups) (reverse! completed))
+          ((markup? (car markups))
+           (loop (cdr markups)
+                 (cons (compose (car markups)) completed)))
+          (else
+           (call-with-values
+               (lambda () (break! markup? markups))
+             (lambda (complex rest)
+               (loop rest
+                     (reverse!
+                      (make-map-markup-commands-markup-list
+                       compose complex) completed))))))))
+
 (define-ly-syntax (property-operation parser location ctx music-type symbol . args)
   (let* ((props (case music-type
-                 ((PropertySet) (list 'value (car args)))
-                 ((PropertyUnset) '())
-                 ((OverrideProperty) (list 'grob-value (car args)
-                                           'grob-property-path (if (list? (cadr args))
-                                                                   (cadr args)
-                                                                   (cdr args))
-                                           'pop-first #t))
-                 ((RevertProperty)
-                  (if (list? (car args))
-                      (list 'grob-property-path (car args))
-                      (list 'grob-property-path args)))
-                 (else (ly:error (_ "Invalid property operation ~a") music-type))))
-        (m (apply make-music music-type
-                  'symbol symbol
-                  'origin location
-                  props)))
+                  ((PropertySet) (list 'value (car args)))
+                  ((PropertyUnset) '())
+                  ((OverrideProperty) (list 'grob-value (car args)
+                                            'grob-property-path (if (list? (cadr args))
+                                                                    (cadr args)
+                                                                    (cdr args))
+                                            'pop-first #t))
+                  ((RevertProperty)
+                   (if (list? (car args))
+                       (list 'grob-property-path (car args))
+                       (list 'grob-property-path args)))
+                  (else (ly:error (_ "Invalid property operation ~a") music-type))))
+         (m (apply make-music music-type
+                   'symbol symbol
+                   'origin location
+                   props)))
     (make-music 'ContextSpeccedMusic
-               'element m
-               'context-type ctx
-               'origin location)))
+                'element m
+                'context-type ctx
+                'origin location)))
 
 ;; TODO: It seems that this function rarely returns anything useful.
 (define (get-first-context-id type mus)
   "Find the name of a ContextSpeccedMusic with given type"
   (let ((id (ly:music-property mus 'context-id)))
     (if (and (eq? (ly:music-property mus 'type) 'ContextSpeccedMusic)
-            (eq? (ly:music-property mus 'context-type) type)
-            (string? id)
-            (not (string-null? id)))
-       id
-       '())))
+             (eq? (ly:music-property mus 'context-type) type)
+             (string? id)
+             (not (string-null? id)))
+        id
+        '())))
 
 (define unique-counter -1)
 (define (get-next-unique-voice-name)
@@ -219,34 +230,34 @@ into a @code{MultiMeasureTextEvent}."
   ;; to signal to the Extender_engraver that any pending extender should
   ;; be completed if the lyrics end before the associated voice.
   (append! (ly:music-property music 'elements)
-          (list (make-music 'CompletizeExtenderEvent)))
+           (list (make-music 'CompletizeExtenderEvent)))
   (make-music 'LyricCombineMusic
-             'element music
-             'associated-context sync
-             'origin loc))
+              'element music
+              'associated-context sync
+              'origin loc))
 
 (define-ly-syntax (lyric-combine parser location voice music)
   (lyric-combine-music voice music location))
 
 (define-ly-syntax (add-lyrics parser location music addlyrics-list)
   (let* ((existing-voice-name (get-first-context-id 'Voice music))
-        (voice-name (if (string? existing-voice-name)
-                        existing-voice-name
-                        (get-next-unique-voice-name)))
-        (voice (if (string? existing-voice-name)
-                   (music)
-                   (make-music 'ContextSpeccedMusic
-                               'element music
-                               'context-type 'Voice
-                               'context-id voice-name
-                               'origin (ly:music-property music 'origin))))
-        (lyricstos (map (lambda (mus)
-                          (let* ((loc (ly:music-property mus 'origin))
-                                 (lyr (lyric-combine-music voice-name mus loc)))
-                            (make-music 'ContextSpeccedMusic
-                                        'create-new #t
-                                        'context-type 'Lyrics
-                                        'element lyr
-                                        'origin loc)))
-                        addlyrics-list)))
+         (voice-name (if (string? existing-voice-name)
+                         existing-voice-name
+                         (get-next-unique-voice-name)))
+         (voice (if (string? existing-voice-name)
+                    (music)
+                    (make-music 'ContextSpeccedMusic
+                                'element music
+                                'context-type 'Voice
+                                'context-id voice-name
+                                'origin (ly:music-property music 'origin))))
+         (lyricstos (map (lambda (mus)
+                           (let* ((loc (ly:music-property mus 'origin))
+                                  (lyr (lyric-combine-music voice-name mus loc)))
+                             (make-music 'ContextSpeccedMusic
+                                         'create-new #t
+                                         'context-type 'Lyrics
+                                         'element lyr
+                                         'origin loc)))
+                         addlyrics-list)))
     (make-simultaneous-music (cons voice lyricstos))))
index 26390a6bd7e3ddb51675ba3edb5ef789c86e7d7b..72b107f8468a83261d38c31209f0d29235534115 100644 (file)
@@ -147,7 +147,7 @@ command.  There is no protection against circular definitions.
                                         ((not (null? (cdr prop-spec)))
                                          `(list ',(car prop-spec) ,(cadr prop-spec)))
                                         (else
-                                          `(list ',(car prop-spec)))))
+                                         `(list ',(car prop-spec)))))
                                 (if (pair? args)
                                     properties
                                     (list)))))
@@ -197,7 +197,7 @@ interpreted, returns a list of stencils instead of a single one"
                                         ((not (null? (cdr prop-spec)))
                                          `(list ',(car prop-spec) ,(cadr prop-spec)))
                                         (else
-                                          `(list ',(car prop-spec)))))
+                                         `(list ',(car prop-spec)))))
                                 (if (pair? args)
                                     properties
                                     (list)))))
@@ -384,10 +384,10 @@ against SIGNATURE, reporting MAKE-NAME as the user-invoked function.
                       (set! args (cons `(list ,@(compile-all-markup-expressions (car rest))) args))
                       (set! rest (cdr rest)))
                      (else
-                       ;; pick up one arg in `rest'
-                       (receive (a r) (compile-markup-arg rest)
-                                (set! args (cons a args))
-                                (set! rest r))))))))
+                      ;; pick up one arg in `rest'
+                      (receive (a r) (compile-markup-arg rest)
+                               (set! args (cons a args))
+                               (set! rest r))))))))
         ((and (pair? expr)
               (pair? (car expr))
               (keyword? (caar expr)))
@@ -398,9 +398,9 @@ against SIGNATURE, reporting MAKE-NAME as the user-invoked function.
               (string? (car expr))) ;; expr === ("string" ...)
          (values `(make-simple-markup ,(car expr)) (cdr expr)))
         (else
-          ;; expr === (symbol ...) or ((funcall ...) ...)
-          (values (car expr)
-                  (cdr expr)))))
+         ;; expr === (symbol ...) or ((funcall ...) ...)
+         (values (car expr)
+                 (cdr expr)))))
 
 (define (compile-all-markup-args expr)
   "Transform `expr' into markup arguments"
@@ -454,21 +454,3 @@ against SIGNATURE, reporting MAKE-NAME as the user-invoked function.
                (string->symbol (format #f "~a-markup-list" code)))))
     (and proc (markup-list-function? proc)
          (cons proc (markup-command-signature proc)))))
-
-;;;;;;;;;;;;;;;;;;;;;;
-;;; used in parser.yy to map a list of markup commands on markup arguments
-(define-public (map-markup-command-list commands markups)
-  "`markups' being a list of markups, eg (markup1 markup2 markup3),
-and `commands' a list of commands with their scheme arguments, in reverse order,
-eg: ((italic) (raise 4) (bold)), maps the commands on each markup argument, eg:
- ((bold (raise 4 (italic markup1)))
-  (bold (raise 4 (italic markup2)))
-  (bold (raise 4 (italic markup3))))
-"
-  (map-in-order (lambda (arg)
-                  (let ((result arg))
-                    (for-each (lambda (cmd)
-                                (set! result (append cmd (list result))))
-                              commands)
-                    result))
-                markups))
index 31bbaeeb420bb2d76373fb7d3a0551e40e9739eb..64a113973880e2f11e4b157aba24b6b368b5469b 100644 (file)
@@ -48,104 +48,93 @@ Example:
 (define-public interpret-markup ly:text-interface::interpret-markup)
 
 (define-public (interpret-markup-list layout props markup-list)
-  (let ((stencils (list)))
-    (for-each (lambda (m)
-                (set! stencils
-                      (if (markup-command-list? m)
-                          (append! (reverse! (apply (car m) layout props (cdr m)))
-                                   stencils)
-                          (cons (interpret-markup layout props m) stencils))))
-              markup-list)
-    (reverse! stencils)))
+  (fold-right
+   (lambda (m prev)
+     (if (markup-command-list? m)
+         (append (apply (car m) layout props (cdr m)) prev)
+         (cons (interpret-markup layout props m) prev)))
+   '()
+   markup-list))
 
 (define-public (prepend-alist-chain key val chain)
   (cons (acons key val (car chain)) (cdr chain)))
 
 (define-public (stack-stencil-line space stencils)
-  "DOCME"
-  (if (and (pair? stencils)
-           (ly:stencil? (car stencils)))
-
-      (if (and (pair? (cdr stencils))
-               (ly:stencil? (cadr stencils)))
-          (let* ((tail (stack-stencil-line space (cdr stencils)))
-                 (head (car stencils))
-                 (xoff (+ space (interval-length (ly:stencil-extent head X)))))
-            (ly:stencil-add head
-                            (ly:stencil-translate-axis tail xoff X)))
-          (car stencils))
-      (ly:make-stencil '() '(0 . 0) '(0 . 0))))
-
+  "Adjoin a list of @var{stencils} along the X axis, leaving
+@var{space} between the end of each stencil and the beginning of the
+following stencil.  Stencils with empty Y extent are not given
+@var{space} before them and don't avoid overlapping other stencils."
+  (stack-stencils X RIGHT space (filter ly:stencil? stencils)))
 
 ;;; convert a full markup object to an approximate pure string representation
 
 (define-public (markup->string m . argscopes)
-(let* ((scopes (if (pair? argscopes) (car argscopes) '())))
-  ;; markup commands with one markup argument, formatting ignored
-  (define markups-first-argument '(list
-                                   bold-markup box-markup caps-markup dynamic-markup finger-markup
-                                   fontCaps-markup huge-markup italic-markup large-markup larger-markup
-                                   medium-markup normal-size-sub-markup normal-size-super-markup
-                                   normal-text-markup normalsize-markup number-markup roman-markup
-                                   sans-markup simple-markup small-markup smallCaps-markup smaller-markup
-                                   sub-markup super-markup teeny-markup text-markup tiny-markup
-                                   typewriter-markup underline-markup upright-markup bracket-markup
-                                   circle-markup hbracket-markup parenthesize-markup rounded-box-markup
-
-                                   center-align-markup center-column-markup column-markup dir-column-markup
-                                   fill-line-markup justify-markup justify-string-markup left-align-markup
-                                   left-column-markup line-markup right-align-markup right-column-markup
-                                   vcenter-markup wordwrap-markup wordwrap-string-markup ))
-
-  ;; markup commands with markup as second argument, first argument
-  ;; specifies some formatting and is ignored
-  (define markups-second-argument '(list
-                                    abs-fontsize-markup fontsize-markup magnify-markup lower-markup
-                                    pad-around-markup pad-markup-markup pad-x-markup raise-markup
-                                    halign-markup hcenter-in-markup rotate-markup translate-markup
-                                    translate-scaled-markup with-url-markup scale-markup ))
-
-  ;; helper functions to handle string cons like string lists
-  (define (markup-cons->string-cons c scopes)
-    (if (not (pair? c)) (markup->string c scopes)
-        (cons (markup->string (car c) scopes) (markup-cons->string-cons (cdr c) scopes))))
-  (define (string-cons-join c)
-    (if (not (pair? c)) c
-        (string-join (list (car c) (string-cons-join (cdr c))) "")))
-
-  (cond
-   ((string? m) m)
-   ((null? m) "")
-   ((not (pair? m)) "")
-
-   ;; handle \concat (string-join without spaces)
-   ((and (pair? m) (equal? (car m) concat-markup))
-    (string-cons-join (markup-cons->string-cons (cadr m) scopes)) )
-
-   ;; markup functions with the markup as first arg
-   ((member (car m) (primitive-eval markups-first-argument))
-    (markup->string (cadr m) scopes))
-
-   ;; markup functions with markup as second arg
-   ((member (car m) (primitive-eval markups-second-argument))
-    (markup->string (cddr m) scopes))
-
-   ;; fromproperty-markup reads property values from the header block:
-   ((equal? (car m) fromproperty-markup)
-    (let* ((varname (symbol->string (cadr m)))
-           ;; cut off the header: prefix from the variable name:
-           (newvarname (if (string-prefix? "header:" varname) (substring varname 7) varname))
-           (var (string->symbol newvarname))
-           (mod (make-module 1)))
-      ;; Prevent loops by temporarily clearing the variable we have just looked up
-      (module-define! mod var "")
-      (markup->string (ly:modules-lookup scopes var) (cons mod scopes))))
-
-   ;; ignore all other markup functions
-   ((markup-function? (car m)) "")
-
-   ;; handle markup lists
-   ((list? m)
-    (string-join (map (lambda (mm) (markup->string mm scopes)) m) " "))
-
-   (else "ERROR, unable to extract string from markup"))))
+  (let* ((scopes (if (pair? argscopes) (car argscopes) '())))
+    ;; markup commands with one markup argument, formatting ignored
+    (define markups-first-argument '(list
+                                     bold-markup box-markup caps-markup dynamic-markup finger-markup
+                                     fontCaps-markup huge-markup italic-markup large-markup larger-markup
+                                     medium-markup normal-size-sub-markup normal-size-super-markup
+                                     normal-text-markup normalsize-markup number-markup roman-markup
+                                     sans-markup simple-markup small-markup smallCaps-markup smaller-markup
+                                     sub-markup super-markup teeny-markup text-markup tiny-markup
+                                     typewriter-markup underline-markup upright-markup bracket-markup
+                                     circle-markup hbracket-markup parenthesize-markup rounded-box-markup
+
+                                     center-align-markup center-column-markup column-markup dir-column-markup
+                                     fill-line-markup justify-markup justify-string-markup left-align-markup
+                                     left-column-markup line-markup right-align-markup right-column-markup
+                                     vcenter-markup wordwrap-markup wordwrap-string-markup ))
+
+    ;; markup commands with markup as second argument, first argument
+    ;; specifies some formatting and is ignored
+    (define markups-second-argument '(list
+                                      abs-fontsize-markup fontsize-markup magnify-markup lower-markup
+                                      pad-around-markup pad-markup-markup pad-x-markup raise-markup
+                                      halign-markup hcenter-in-markup rotate-markup translate-markup
+                                      translate-scaled-markup with-url-markup scale-markup ))
+
+    ;; helper functions to handle string cons like string lists
+    (define (markup-cons->string-cons c scopes)
+      (if (not (pair? c)) (markup->string c scopes)
+          (cons (markup->string (car c) scopes) (markup-cons->string-cons (cdr c) scopes))))
+    (define (string-cons-join c)
+      (if (not (pair? c)) c
+          (string-join (list (car c) (string-cons-join (cdr c))) "")))
+
+    (cond
+     ((string? m) m)
+     ((null? m) "")
+     ((not (pair? m)) "")
+
+     ;; handle \concat (string-join without spaces)
+     ((and (pair? m) (equal? (car m) concat-markup))
+      (string-cons-join (markup-cons->string-cons (cadr m) scopes)) )
+
+     ;; markup functions with the markup as first arg
+     ((member (car m) (primitive-eval markups-first-argument))
+      (markup->string (cadr m) scopes))
+
+     ;; markup functions with markup as second arg
+     ((member (car m) (primitive-eval markups-second-argument))
+      (markup->string (cddr m) scopes))
+
+     ;; fromproperty-markup reads property values from the header block:
+     ((equal? (car m) fromproperty-markup)
+      (let* ((varname (symbol->string (cadr m)))
+             ;; cut off the header: prefix from the variable name:
+             (newvarname (if (string-prefix? "header:" varname) (substring varname 7) varname))
+             (var (string->symbol newvarname))
+             (mod (make-module 1)))
+        ;; Prevent loops by temporarily clearing the variable we have just looked up
+        (module-define! mod var "")
+        (markup->string (ly:modules-lookup scopes var) (cons mod scopes))))
+
+     ;; ignore all other markup functions
+     ((markup-function? (car m)) "")
+
+     ;; handle markup lists
+     ((list? m)
+      (string-join (map (lambda (mm) (markup->string mm scopes)) m) " "))
+
+     (else "ERROR, unable to extract string from markup"))))
index 345d1327f0f47f4ca4cdebe350b577f2fa077172..d8ffeb93cf20b3eff3195ceeb9e6ee83e4255679 100644 (file)
@@ -2,7 +2,7 @@
 
 (define-module (scm memory-trace))
 (use-modules (lily)
-            (ice-9 format))
+             (ice-9 format))
 
 (define-public (mtrace:start-trace freq)
   (set! usecond-interval (inexact->exact (/ 1000000 freq)))
 (define usecond-interval 100000)
 (define (arg-procedure args)
   (if (and (pair? args)
-          (pair? (cdr args))
-          (pair? (cadr args)))
+           (pair? (cdr args))
+           (pair? (cadr args)))
       (caadr args) #f))
 (define last-count 0)
 (define (record-stack key continuation . args)
   (if (eq? (current-thread) trace-thread)
       #t ;; do nothing.
       (let*
-         ((cells (assoc-get 'total-cells-allocated (gc-stats)))
-          (proc (arg-procedure args))
-          (time (tms:utime (times)))
-          (stack (extract-trace continuation)))
-       
-       (set! busy-tracing #t)
-       (trap-disable 'traps)
-       (trap-disable 'enter-frame)
-
-       (set! trace-count (1+ trace-count))
-       (ly:progress "<~a: ~a/~a>\n"
-                    trace-count
-                    (- time start-time)
-                    (- cells last-count))
-
-       (set! last-count cells)
-       (set! trace-points
-             (cons (list
-                    (cons 'cells cells)
-                    (cons 'proc proc)
-                    (cons 'stack stack)
-                    (cons 'time time)
-                    )
-                   
-                   trace-points))
-
-       (set! busy-tracing #f))))
+          ((cells (assoc-get 'total-cells-allocated (gc-stats)))
+           (proc (arg-procedure args))
+           (time (tms:utime (times)))
+           (stack (extract-trace continuation)))
+
+        (set! busy-tracing #t)
+        (trap-disable 'traps)
+        (trap-disable 'enter-frame)
+
+        (set! trace-count (1+ trace-count))
+        (ly:progress "<~a: ~a/~a>\n"
+                     trace-count
+                     (- time start-time)
+                     (- cells last-count))
+
+        (set! last-count cells)
+        (set! trace-points
+              (cons (list
+                     (cons 'cells cells)
+                     (cons 'proc proc)
+                     (cons 'stack stack)
+                     (cons 'time time)
+                     )
+
+                    trace-points))
+
+        (set! busy-tracing #f))))
 
 (define (start-install-tracepoint)
   (set! trace-thread (current-thread))
   (set! trace-count 0)
   (set! start-memory (assoc-get 'total-cells-allocated (gc-stats)))
   (set! start-time (tms:utime (times)))
-  
+
   (install-tracepoint))
 
 (define (install-tracepoint)
   (if busy-tracing
       (display "last trace not finished yet\n" (current-error-port))
       (begin
-       (trap-set! enter-frame-handler record-stack)
-       (trap-enable 'enter-frame)
-       (trap-enable 'traps)))
-  
+        (trap-set! enter-frame-handler record-stack)
+        (trap-enable 'enter-frame)
+        (trap-enable 'traps)))
+
   (usleep usecond-interval)
   (if continue-tracing
       (install-tracepoint)))
        )
 
     (ly:progress "Memory statistics to ~a and ~a..."
-                stacks-name graph-name)
+                 stacks-name graph-name)
     (format graph-out "# memory trace with ~a points\n" (length trace-points))
     (for-each
      (lambda (r)
        (let*
-          ((mem (- (assoc-get 'cells r) start-memory))
-           (proc (assoc-get 'proc r))
-           (stack (assoc-get 'stack r))
-           (time (- (assoc-get 'time r) start-time)))
-        
-        (format graph-out "~a ~a\n" time mem)
-        (if stack
-            (begin
-              (format stacks-out "~5a t = ~5a - delta-mem: ~15a - ~a\n" i
-                      time
-                      (- mem last-mem) proc)
-              (do
-                  ((j 0 (1+ j))
-                   (stack (assoc-get 'stack r) stack))
-                  ((>= j (vector-length stack)))
-                
-                (format stacks-out "\t~a\n"
-                        (vector-ref stack j)))))
-        
-        (set! i (1+ i))
-        (set! last-mem mem)
-        ))
+           ((mem (- (assoc-get 'cells r) start-memory))
+            (proc (assoc-get 'proc r))
+            (stack (assoc-get 'stack r))
+            (time (- (assoc-get 'time r) start-time)))
+
+         (format graph-out "~a ~a\n" time mem)
+         (if stack
+             (begin
+               (format stacks-out "~5a t = ~5a - delta-mem: ~15a - ~a\n" i
+                       time
+                       (- mem last-mem) proc)
+               (do
+                   ((j 0 (1+ j))
+                    (stack (assoc-get 'stack r) stack))
+                   ((>= j (vector-length stack)))
+
+                 (format stacks-out "\t~a\n"
+                         (vector-ref stack j)))))
+
+         (set! i (1+ i))
+         (set! last-mem mem)
+         ))
      (reverse trace-points))))
 
 
        (trace (make-vector depth #f)))
 
     (do
-       ((i 0 (1+ i)))
-       ((>= i depth))
+        ((i 0 (1+ i)))
+        ((>= i depth))
 
       (vector-set!
        trace i
        (let*
-          ((source (frame-source (stack-ref stack i))))
+           ((source (frame-source (stack-ref stack i))))
 
-          (and source
-               (cons (source-property source 'filename)
-                     (source-property source 'line))))))
+         (and source
+              (cons (source-property source 'filename)
+                    (source-property source 'line))))))
 
     trace))
-
-
-       
-       
index 4888ee3a81ed49712e32d293f046b892d7bc5079..e673555d932b1c715fe1660b18fd6b1ea8d04e3f 100644 (file)
 ;; this is broken: we should not ever export variables from Scheme.
 
 ;; define factor of total volume per dynamic marking
-(define-public absolute-volume-alist '())
+(define-session-public absolute-volume-alist '())
 (set! absolute-volume-alist
       (append
        '(
-        ("sf" . 1.00)
-        ("fffff" . 0.95)
-        ("ffff" . 0.92)
-        ("fff" . 0.85)
-        ("ff" . 0.80)
-        ("f" . 0.75)
-        ("mf" . 0.68)
-        ("mp" . 0.61)
-        ("p" . 0.55)
-        ("pp" . 0.49)
-        ("ppp" . 0.42)
-        ("pppp" . 0.34)
-        ("ppppp" . 0.25)
-        )
+         ("sf" . 1.00)
+         ("fffff" . 0.95)
+         ("ffff" . 0.92)
+         ("fff" . 0.85)
+         ("ff" . 0.80)
+         ("f" . 0.75)
+         ("mf" . 0.68)
+         ("mp" . 0.61)
+         ("p" . 0.55)
+         ("pp" . 0.49)
+         ("ppp" . 0.42)
+         ("pppp" . 0.34)
+         ("ppppp" . 0.25)
+         )
        absolute-volume-alist))
 
 (define-public (default-dynamic-absolute-volume s)
   (assoc-get s absolute-volume-alist))
 
 ;; define factors of total volume of minimum and maximum volume
-(define-public instrument-equalizer-alist '())
+(define-session-public instrument-equalizer-alist '())
 (set! instrument-equalizer-alist
       (append
        '(
-        ("flute" . (0 . 0.7))
-        ("oboe" . (0 . 0.7))
-        ("clarinet" . (0 . 0.7))
-        ("bassoon" . (0 . 0.6))
-        ("french horn" . (0.1 . 0.7))
-        ("trumpet" . (0.1 . 0.8))
-        ("timpani" . (0.2 . 0.9))
-        ("violin" . (0.2 . 1.0))
-        ("viola" . (0.1 . 0.7))
-        ("cello" . (0.2 . 0.8))
-        ("contrabass" . (0.2 . 0.8))
-        )
+         ("flute" . (0 . 0.7))
+         ("oboe" . (0 . 0.7))
+         ("clarinet" . (0 . 0.7))
+         ("bassoon" . (0 . 0.6))
+         ("french horn" . (0.1 . 0.7))
+         ("trumpet" . (0.1 . 0.8))
+         ("timpani" . (0.2 . 0.9))
+         ("violin" . (0.2 . 1.0))
+         ("viola" . (0.1 . 0.7))
+         ("cello" . (0.2 . 0.8))
+         ("contrabass" . (0.2 . 0.8))
+         )
        instrument-equalizer-alist))
 
 (define-public (default-instrument-equalizer s)
 (set! instrument-names-alist
       (append
        `(
-        ("acoustic grand" . ,(- 1 1))
-        ("bright acoustic" . ,(- 2 1))
-        ("electric grand" . ,(- 3 1))
-        ("honky-tonk" . ,(- 4 1))
-        ("electric piano 1" . ,(- 5 1))
-        ("electric piano 2" . ,(- 6 1))
-        ("harpsichord" . ,(- 7 1))
-        ("clav" . ,(- 8 1))
-
-        ;; (9-16 chrom percussion)
-        ("celesta" . ,(- 9 1))
-        ("glockenspiel" . ,(- 10 1))
-        ("music box" . ,(- 11 1))
-        ("vibraphone" . ,(- 12 1))
-        ("marimba" . ,(- 13 1))
-        ("xylophone" . ,(- 14 1))
-        ("tubular bells" . ,(- 15 1))
-        ("dulcimer" . ,(- 16 1))
-
-        ;; (17-24 organ)
-        ("drawbar organ" . ,(- 17 1))
-        ("percussive organ" . ,(- 18 1))
-        ("rock organ" . ,(- 19 1))
-        ("church organ" . ,(- 20 1))
-        ("reed organ" . ,(- 21 1))
-        ("accordion" . ,(- 22 1))
-        ("harmonica" . ,(- 23 1))
-        ("concertina" . ,(- 24 1))
-
-        ;; (25-32 guitar)
-        ("acoustic guitar (nylon)" . ,(- 25 1))
-        ("acoustic guitar (steel)" . ,(- 26 1))
-        ("electric guitar (jazz)" . ,(- 27 1))
-        ("electric guitar (clean)" . ,(- 28 1))
-        ("electric guitar (muted)" . ,(- 29 1))
-        ("overdriven guitar" . ,(- 30 1))
-        ("distorted guitar" . ,(- 31 1))
-        ("guitar harmonics" . ,(- 32 1))
-
-        ;; (33-40 bass)
-        ("acoustic bass" . ,(- 33 1))
-        ("electric bass (finger)" . ,(- 34 1))
-        ("electric bass (pick)" . ,(- 35 1))
-        ("fretless bass" . ,(- 36 1))
-        ("slap bass 1" . ,(- 37 1))
-        ("slap bass 2" . ,(- 38 1))
-        ("synth bass 1" . ,(- 39 1))
-        ("synth bass 2" . ,(- 40 1))
-
-        ;; (41-48 strings)
-        ("violin" . ,(- 41 1))
-        ("viola" . ,(- 42 1))
-        ("cello" . ,(- 43 1))
-        ("contrabass" . ,(- 44 1))
-        ("tremolo strings" . ,(- 45 1))
-        ("pizzicato strings" . ,(- 46 1))
-        ("orchestral harp" . ,(- 47 1))
-        ("timpani" . ,(- 48 1))
-
-        ;; (49-56 ensemble)
-        ("string ensemble 1" . ,(- 49 1))
-        ("string ensemble 2" . ,(- 50 1))
-        ("synthstrings 1" . ,(- 51 1))
-        ("synthstrings 2" . ,(- 52 1))
-        ("choir aahs" . ,(- 53 1))
-        ("voice oohs" . ,(- 54 1))
-        ("synth voice" . ,(- 55 1))
-        ("orchestra hit" . ,(- 56 1))
-
-        ;; (57-64 brass)
-        ("trumpet" . ,(- 57 1))
-        ("trombone" . ,(- 58 1))
-        ("tuba" . ,(- 59 1))
-        ("muted trumpet" . ,(- 60 1))
-        ("french horn" . ,(- 61 1))
-        ("brass section" . ,(- 62 1))
-        ("synthbrass 1" . ,(- 63 1))
-        ("synthbrass 2" . ,(- 64 1))
-
-        ;; (65-72 reed)
-        ("soprano sax" . ,(- 65 1))
-        ("alto sax" . ,(- 66 1))
-        ("tenor sax" . ,(- 67 1))
-        ("baritone sax" . ,(- 68 1))
-        ("oboe" . ,(- 69 1))
-        ("english horn" . ,(- 70 1))
-        ("bassoon" . ,(- 71 1))
-        ("clarinet" . ,(- 72 1))
-
-        ;; (73-80 pipe)
-        ("piccolo" . ,(- 73 1))
-        ("flute" . ,(- 74 1))
-        ("recorder" . ,(- 75 1))
-        ("pan flute" . ,(- 76 1))
-        ("blown bottle" . ,(- 77 1))
-        ("shakuhachi" . ,(- 78 1))
-        ("whistle" . ,(- 79 1))
-        ("ocarina" . ,(- 80 1))
-
-        ;; (81-88 synth lead)
-        ("lead 1 (square)" . ,(- 81 1))
-        ("lead 2 (sawtooth)" . ,(- 82 1))
-        ("lead 3 (calliope)" . ,(- 83 1))
-        ("lead 4 (chiff)" . ,(- 84 1))
-        ("lead 5 (charang)" . ,(- 85 1))
-        ("lead 6 (voice)" . ,(- 86 1))
-        ("lead 7 (fifths)" . ,(- 87 1))
-        ("lead 8 (bass+lead)" . ,(- 88 1))
-
-        ;; (89-96 synth pad)
-        ("pad 1 (new age)" . ,(- 89 1))
-        ("pad 2 (warm)" . ,(- 90 1))
-        ("pad 3 (polysynth)" . ,(- 91 1))
-        ("pad 4 (choir)" . ,(- 92 1))
-        ("pad 5 (bowed)" . ,(- 93 1))
-        ("pad 6 (metallic)" . ,(- 94 1))
-        ("pad 7 (halo)" . ,(- 95 1))
-        ("pad 8 (sweep)" . ,(- 96 1))
-
-        ;; (97-104 synth effects)
-        ("fx 1 (rain)" . ,(- 97 1))
-        ("fx 2 (soundtrack)" . ,(- 98 1))
-        ("fx 3 (crystal)" . ,(- 99 1))
-        ("fx 4 (atmosphere)" . ,(- 100 1))
-        ("fx 5 (brightness)" . ,(- 101 1))
-        ("fx 6 (goblins)" . ,(- 102 1))
-        ("fx 7 (echoes)" . ,(- 103 1))
-        ("fx 8 (sci-fi)" . ,(- 104 1))
-
-        ;; (105-112 ethnic)
-        ("sitar" . ,(- 105 1))
-        ("banjo" . ,(- 106 1))
-        ("shamisen" . ,(- 107 1))
-        ("koto" . ,(- 108 1))
-        ("kalimba" . ,(- 109 1))
-        ("bagpipe" . ,(- 110 1))
-        ("fiddle" . ,(- 111 1))
-        ("shanai" . ,(- 112 1))
-
-        ;; (113-120 percussive)
-        ("tinkle bell" . ,(- 113 1))
-        ("agogo" . ,(- 114 1))
-        ("steel drums" . ,(- 115 1))
-        ("woodblock" . ,(- 116 1))
-        ("taiko drum" . ,(- 117 1))
-        ("melodic tom" . ,(- 118 1))
-        ("synth drum" . ,(- 119 1))
-        ("reverse cymbal" . ,(- 120 1))
-
-        ;; (121-128 sound effects)
-        ("guitar fret noise" . ,(- 121 1))
-        ("breath noise" . ,(- 122 1))
-        ("seashore" . ,(- 123 1))
-        ("bird tweet" . ,(- 124 1))
-        ("telephone ring" . ,(- 125 1))
-        ("helicopter" . ,(- 126 1))
-        ("applause" . ,(- 127 1))
-        ("gunshot" . ,(- 128 1))
-
-        ;; (channel 10 drum-kits - subtract 32768 to get program no.)
-        ("standard kit" .     ,(+ 32768 0))
-        ("standard drums" .   ,(+ 32768 0))
-        ("drums" .            ,(+ 32768 0))
-        ("room kit" .         ,(+ 32768 8))
-        ("room drums" .       ,(+ 32768 8))
-        ("power kit" .        ,(+ 32768 16))
-        ("power drums" .      ,(+ 32768 16))
-        ("rock drums" .       ,(+ 32768 16))
-        ("electronic kit" .   ,(+ 32768 24))
-        ("electronic drums" . ,(+ 32768 24))
-        ("tr-808 kit" .       ,(+ 32768 25))
-        ("tr-808 drums" .     ,(+ 32768 25))
-        ("jazz kit" .         ,(+ 32768 32))
-        ("jazz drums" .       ,(+ 32768 32))
-        ("brush kit" .        ,(+ 32768 40))
-        ("brush drums" .      ,(+ 32768 40))
-        ("orchestra kit" .    ,(+ 32768 48))
-        ("orchestra drums" .  ,(+ 32768 48))
-        ("classical drums" .  ,(+ 32768 48))
-        ("sfx kit" .          ,(+ 32768 56))
-        ("sfx drums" .        ,(+ 32768 56))
-        ("mt-32 kit" .        ,(+ 32768 127))
-        ("mt-32 drums" .      ,(+ 32768 127))
-        ("cm-64 kit" .        ,(+ 32768 127))
-        ("cm-64 drums" .      ,(+ 32768 127))
-        )
+         ("acoustic grand" . ,(- 1 1))
+         ("bright acoustic" . ,(- 2 1))
+         ("electric grand" . ,(- 3 1))
+         ("honky-tonk" . ,(- 4 1))
+         ("electric piano 1" . ,(- 5 1))
+         ("electric piano 2" . ,(- 6 1))
+         ("harpsichord" . ,(- 7 1))
+         ("clav" . ,(- 8 1))
+
+         ;; (9-16 chrom percussion)
+         ("celesta" . ,(- 9 1))
+         ("glockenspiel" . ,(- 10 1))
+         ("music box" . ,(- 11 1))
+         ("vibraphone" . ,(- 12 1))
+         ("marimba" . ,(- 13 1))
+         ("xylophone" . ,(- 14 1))
+         ("tubular bells" . ,(- 15 1))
+         ("dulcimer" . ,(- 16 1))
+
+         ;; (17-24 organ)
+         ("drawbar organ" . ,(- 17 1))
+         ("percussive organ" . ,(- 18 1))
+         ("rock organ" . ,(- 19 1))
+         ("church organ" . ,(- 20 1))
+         ("reed organ" . ,(- 21 1))
+         ("accordion" . ,(- 22 1))
+         ("harmonica" . ,(- 23 1))
+         ("concertina" . ,(- 24 1))
+
+         ;; (25-32 guitar)
+         ("acoustic guitar (nylon)" . ,(- 25 1))
+         ("acoustic guitar (steel)" . ,(- 26 1))
+         ("electric guitar (jazz)" . ,(- 27 1))
+         ("electric guitar (clean)" . ,(- 28 1))
+         ("electric guitar (muted)" . ,(- 29 1))
+         ("overdriven guitar" . ,(- 30 1))
+         ("distorted guitar" . ,(- 31 1))
+         ("guitar harmonics" . ,(- 32 1))
+
+         ;; (33-40 bass)
+         ("acoustic bass" . ,(- 33 1))
+         ("electric bass (finger)" . ,(- 34 1))
+         ("electric bass (pick)" . ,(- 35 1))
+         ("fretless bass" . ,(- 36 1))
+         ("slap bass 1" . ,(- 37 1))
+         ("slap bass 2" . ,(- 38 1))
+         ("synth bass 1" . ,(- 39 1))
+         ("synth bass 2" . ,(- 40 1))
+
+         ;; (41-48 strings)
+         ("violin" . ,(- 41 1))
+         ("viola" . ,(- 42 1))
+         ("cello" . ,(- 43 1))
+         ("contrabass" . ,(- 44 1))
+         ("tremolo strings" . ,(- 45 1))
+         ("pizzicato strings" . ,(- 46 1))
+         ("orchestral harp" . ,(- 47 1))
+         ("timpani" . ,(- 48 1))
+
+         ;; (49-56 ensemble)
+         ("string ensemble 1" . ,(- 49 1))
+         ("string ensemble 2" . ,(- 50 1))
+         ("synthstrings 1" . ,(- 51 1))
+         ("synthstrings 2" . ,(- 52 1))
+         ("choir aahs" . ,(- 53 1))
+         ("voice oohs" . ,(- 54 1))
+         ("synth voice" . ,(- 55 1))
+         ("orchestra hit" . ,(- 56 1))
+
+         ;; (57-64 brass)
+         ("trumpet" . ,(- 57 1))
+         ("trombone" . ,(- 58 1))
+         ("tuba" . ,(- 59 1))
+         ("muted trumpet" . ,(- 60 1))
+         ("french horn" . ,(- 61 1))
+         ("brass section" . ,(- 62 1))
+         ("synthbrass 1" . ,(- 63 1))
+         ("synthbrass 2" . ,(- 64 1))
+
+         ;; (65-72 reed)
+         ("soprano sax" . ,(- 65 1))
+         ("alto sax" . ,(- 66 1))
+         ("tenor sax" . ,(- 67 1))
+         ("baritone sax" . ,(- 68 1))
+         ("oboe" . ,(- 69 1))
+         ("english horn" . ,(- 70 1))
+         ("bassoon" . ,(- 71 1))
+         ("clarinet" . ,(- 72 1))
+
+         ;; (73-80 pipe)
+         ("piccolo" . ,(- 73 1))
+         ("flute" . ,(- 74 1))
+         ("recorder" . ,(- 75 1))
+         ("pan flute" . ,(- 76 1))
+         ("blown bottle" . ,(- 77 1))
+         ("shakuhachi" . ,(- 78 1))
+         ("whistle" . ,(- 79 1))
+         ("ocarina" . ,(- 80 1))
+
+         ;; (81-88 synth lead)
+         ("lead 1 (square)" . ,(- 81 1))
+         ("lead 2 (sawtooth)" . ,(- 82 1))
+         ("lead 3 (calliope)" . ,(- 83 1))
+         ("lead 4 (chiff)" . ,(- 84 1))
+         ("lead 5 (charang)" . ,(- 85 1))
+         ("lead 6 (voice)" . ,(- 86 1))
+         ("lead 7 (fifths)" . ,(- 87 1))
+         ("lead 8 (bass+lead)" . ,(- 88 1))
+
+         ;; (89-96 synth pad)
+         ("pad 1 (new age)" . ,(- 89 1))
+         ("pad 2 (warm)" . ,(- 90 1))
+         ("pad 3 (polysynth)" . ,(- 91 1))
+         ("pad 4 (choir)" . ,(- 92 1))
+         ("pad 5 (bowed)" . ,(- 93 1))
+         ("pad 6 (metallic)" . ,(- 94 1))
+         ("pad 7 (halo)" . ,(- 95 1))
+         ("pad 8 (sweep)" . ,(- 96 1))
+
+         ;; (97-104 synth effects)
+         ("fx 1 (rain)" . ,(- 97 1))
+         ("fx 2 (soundtrack)" . ,(- 98 1))
+         ("fx 3 (crystal)" . ,(- 99 1))
+         ("fx 4 (atmosphere)" . ,(- 100 1))
+         ("fx 5 (brightness)" . ,(- 101 1))
+         ("fx 6 (goblins)" . ,(- 102 1))
+         ("fx 7 (echoes)" . ,(- 103 1))
+         ("fx 8 (sci-fi)" . ,(- 104 1))
+
+         ;; (105-112 ethnic)
+         ("sitar" . ,(- 105 1))
+         ("banjo" . ,(- 106 1))
+         ("shamisen" . ,(- 107 1))
+         ("koto" . ,(- 108 1))
+         ("kalimba" . ,(- 109 1))
+         ("bagpipe" . ,(- 110 1))
+         ("fiddle" . ,(- 111 1))
+         ("shanai" . ,(- 112 1))
+
+         ;; (113-120 percussive)
+         ("tinkle bell" . ,(- 113 1))
+         ("agogo" . ,(- 114 1))
+         ("steel drums" . ,(- 115 1))
+         ("woodblock" . ,(- 116 1))
+         ("taiko drum" . ,(- 117 1))
+         ("melodic tom" . ,(- 118 1))
+         ("synth drum" . ,(- 119 1))
+         ("reverse cymbal" . ,(- 120 1))
+
+         ;; (121-128 sound effects)
+         ("guitar fret noise" . ,(- 121 1))
+         ("breath noise" . ,(- 122 1))
+         ("seashore" . ,(- 123 1))
+         ("bird tweet" . ,(- 124 1))
+         ("telephone ring" . ,(- 125 1))
+         ("helicopter" . ,(- 126 1))
+         ("applause" . ,(- 127 1))
+         ("gunshot" . ,(- 128 1))
+
+         ;; (channel 10 drum-kits - subtract 32768 to get program no.)
+         ("standard kit" .     ,(+ 32768 0))
+         ("standard drums" .   ,(+ 32768 0))
+         ("drums" .            ,(+ 32768 0))
+         ("room kit" .         ,(+ 32768 8))
+         ("room drums" .       ,(+ 32768 8))
+         ("power kit" .        ,(+ 32768 16))
+         ("power drums" .      ,(+ 32768 16))
+         ("rock drums" .       ,(+ 32768 16))
+         ("electronic kit" .   ,(+ 32768 24))
+         ("electronic drums" . ,(+ 32768 24))
+         ("tr-808 kit" .       ,(+ 32768 25))
+         ("tr-808 drums" .     ,(+ 32768 25))
+         ("jazz kit" .         ,(+ 32768 32))
+         ("jazz drums" .       ,(+ 32768 32))
+         ("brush kit" .        ,(+ 32768 40))
+         ("brush drums" .      ,(+ 32768 40))
+         ("orchestra kit" .    ,(+ 32768 48))
+         ("orchestra drums" .  ,(+ 32768 48))
+         ("classical drums" .  ,(+ 32768 48))
+         ("sfx kit" .          ,(+ 32768 56))
+         ("sfx drums" .        ,(+ 32768 56))
+         ("mt-32 kit" .        ,(+ 32768 127))
+         ("mt-32 drums" .      ,(+ 32768 127))
+         ("cm-64 kit" .        ,(+ 32768 127))
+         ("cm-64 drums" .      ,(+ 32768 127))
+         )
        instrument-names-alist))
 
 (define-public (percussion? instrument)
          (entry (assoc-get inst instrument-names-alist)))
     (if entry
         (modulo entry 32768)
-       #f)))
+        #f)))
 
 ;; 90 == 90/127 == 0.71 is supposed to be the default value
 ;; urg: we should set this at start of track
 (define-public (write-performances-midis performances basename . rest)
   (let ((midi-ext (ly:get-option 'midi-extension)))
     (let
-       loop
+        loop
       ((perfs performances)
        (count (if (null? rest) 0 (car rest))))
       (if (pair? perfs)
-         (begin
-           (ly:performance-write
-            (car perfs)
-            (if (> count 0)
-                (format #f "~a-~a.~a" basename count midi-ext)
-                (format #f "~a.~a" basename midi-ext)))
-           (loop (cdr perfs) (1+ count)))))))
+          (begin
+            (ly:performance-write
+             (car perfs)
+             (if (> count 0)
+                 (format #f "~a-~a.~a" basename count midi-ext)
+                 (format #f "~a.~a" basename midi-ext)))
+            (loop (cdr perfs) (1+ count)))))))
index 9617329d77843a4e13777046cc86908be1edd44a..71892bde65e5d1a0eab09f7f1db2d3813d2e3e59 100644 (file)
@@ -48,11 +48,11 @@ pitches as members of a scale.
 
      (else
       (list-ref scale
-               (modulo
-                (+ (index pitch scale)
-                   (- (index to-pitch scale)
-                      (index from-pitch scale)))
-                (length scale)))))))
+                (modulo
+                 (+ (index pitch scale)
+                    (- (index to-pitch scale)
+                       (index from-pitch scale)))
+                 (length scale)))))))
 
 (define (inverter-factory scale)
   "Returns an inverter for the specified @var{scale}.
@@ -81,11 +81,11 @@ arbitrary items and pitches as members of a scale.
 
      (else
       (list-ref scale
-               (modulo
-                (+ (index to-pitch scale)
-                   (- (index around-pitch scale)
-                      (index pitch scale)))
-                (length scale)))))))
+                (modulo
+                 (+ (index to-pitch scale)
+                    (- (index around-pitch scale)
+                       (index pitch scale)))
+                 (length scale)))))))
 
 (define (replicate-modify lis n mod-proc)
   "Apply @code{(mod-proc lis n)} to each element of a list and
@@ -112,15 +112,15 @@ a single pitch as its argument and return a new pitch.  These are
 LilyPond scheme pitches, e.g. @code{(ly:make-pitch 0 2 0)}
 "
   (let ((elements (ly:music-property music 'elements))
-       (element (ly:music-property music 'element))
-       (pitch (ly:music-property music 'pitch)))
+        (element (ly:music-property music 'element))
+        (pitch (ly:music-property music 'pitch)))
 
     (cond
      ((ly:pitch? pitch)
       (ly:music-set-property! music 'pitch (converter pitch)))
 
      ((pair? elements)
-      (map (lambda (x) (change-pitches x converter)) elements))
+      (for-each (lambda (x) (change-pitches x converter)) elements))
 
      ((ly:music? element)
       (change-pitches element converter)))))
@@ -135,8 +135,8 @@ Typically used to construct a scale for input to transposer-factory
 "
 
   (let ((elements (ly:music-property music 'elements))
-       (element (ly:music-property music 'element))
-       (pitch (ly:music-property music 'pitch)))
+        (element (ly:music-property music 'element))
+        (pitch (ly:music-property music 'pitch)))
 
     (cond
      ((ly:pitch? pitch)
@@ -159,10 +159,10 @@ Typically used to construct a scale for input to transposer-factory
     (lambda (lis n)
       (map
        (lambda (i)
-        (ly:make-pitch
-         (+ (- n 6) (ly:pitch-octave i))
-         (ly:pitch-notename i)
-         (ly:pitch-alteration i)))
+         (ly:make-pitch
+          (+ (- n 6) (ly:pitch-octave i))
+          (ly:pitch-notename i)
+          (ly:pitch-alteration i)))
        lis)))
 
   (let ((scale (make-scale music)))
@@ -206,7 +206,7 @@ Typically used to construct a scale for input to transposer-factory
     (if (ly:dir? span-dir)
         (ly:music-set-property! music 'span-direction (- span-dir)))
 
-    (map retrograde-music reversed)
+    (for-each retrograde-music reversed)
 
     music))
 
@@ -215,11 +215,11 @@ Typically used to construct a scale for input to transposer-factory
 and transposes from @var{around} to @var{to}."
   (let ((p (ly:music-property music 'pitch)))
     (if (ly:pitch? p)
-       (ly:music-set-property!
-        music 'pitch
-        (ly:pitch-transpose to (ly:pitch-diff around p))))
+        (ly:music-set-property!
+         music 'pitch
+         (ly:pitch-transpose to (ly:pitch-diff around p))))
     music))
 
 (define-public (music-invert around to music)
   "Applies pitch-invert to all pitches in @var{music}."
-     (music-map (lambda (x) (pitch-invert around to x)) music))
+  (music-map (lambda (x) (pitch-invert around to x)) music))
index e231299bf0888e0a8261fd33c14550c3b61442af..4329e1c400fce5da4c4edf59be467f257b4f4056 100644 (file)
@@ -16,7 +16,7 @@
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-; for define-safe-public when byte-compiling using Guile V2
+;; for define-safe-public when byte-compiling using Guile V2
 (use-modules (scm safe-utility-defs))
 
 (use-modules (ice-9 optargs))
@@ -28,7 +28,7 @@
 ;;;   ==> set the 'elements property and return it
 (define-public ly:music-property
   (make-procedure-with-setter ly:music-property
-                             ly:music-set-property!))
+                              ly:music-set-property!))
 
 (define-safe-public (music-is-of-type? mus type)
   "Does @code{mus} belong to the music class @code{type}?"
 ;; TODO move this
 (define-public ly:grob-property
   (make-procedure-with-setter ly:grob-property
-                             ly:grob-set-property!))
+                              ly:grob-set-property!))
 
 (define-public ly:grob-object
   (make-procedure-with-setter ly:grob-object
-                             ly:grob-set-object!))
+                              ly:grob-set-object!))
 
 (define-public ly:grob-parent
   (make-procedure-with-setter ly:grob-parent
-                             ly:grob-set-parent!))
+                              ly:grob-set-parent!))
 
 (define-public ly:prob-property
   (make-procedure-with-setter ly:prob-property
-                             ly:prob-set-property!))
+                              ly:prob-set-property!))
 
 (define-public ly:context-property
   (make-procedure-with-setter ly:context-property
-                             ly:context-set-property!))
+                              ly:context-set-property!))
 
 (define-public (music-map function music)
   "Apply @var{function} to @var{music} and all of the music it contains.
 First it recurses over the children, then the function is applied to
 @var{music}."
   (let ((es (ly:music-property music 'elements))
-       (e (ly:music-property music 'element)))
+        (e (ly:music-property music 'element)))
     (if (pair? es)
-       (set! (ly:music-property music 'elements)
-             (map (lambda (y) (music-map function y)) es)))
+        (set! (ly:music-property music 'elements)
+              (map (lambda (y) (music-map function y)) es)))
     (if (ly:music? e)
-       (set! (ly:music-property music 'element)
-             (music-map function  e)))
+        (set! (ly:music-property music 'element)
+              (music-map function  e)))
     (function music)))
 
 (define-public (music-filter pred? music)
@@ -76,31 +76,31 @@ First it recurses over the children, then the function is applied to
   (define (inner-music-filter pred? music)
     "Recursive function."
     (let* ((es (ly:music-property music 'elements))
-          (e (ly:music-property music 'element))
-          (as (ly:music-property music 'articulations))
-          (filtered-as (filter ly:music? (map (lambda (y) (inner-music-filter pred? y)) as)))
-          (filtered-e (if (ly:music? e)
-                          (inner-music-filter pred? e)
-                          e))
-          (filtered-es (filter ly:music? (map (lambda (y) (inner-music-filter pred? y)) es))))
+           (e (ly:music-property music 'element))
+           (as (ly:music-property music 'articulations))
+           (filtered-as (filter ly:music? (map (lambda (y) (inner-music-filter pred? y)) as)))
+           (filtered-e (if (ly:music? e)
+                           (inner-music-filter pred? e)
+                           e))
+           (filtered-es (filter ly:music? (map (lambda (y) (inner-music-filter pred? y)) es))))
       (if (not (null? e))
-         (set! (ly:music-property music 'element) filtered-e))
+          (set! (ly:music-property music 'element) filtered-e))
       (if (not (null? es))
-         (set! (ly:music-property music 'elements) filtered-es))
+          (set! (ly:music-property music 'elements) filtered-es))
       (if (not (null? as))
-         (set! (ly:music-property music 'articulations) filtered-as))
+          (set! (ly:music-property music 'articulations) filtered-as))
       ;; if filtering emptied the expression, we remove it completely.
       (if (or (not (pred? music))
-             (and (eq? filtered-es '()) (not (ly:music? e))
-                  (or (not (eq? es '()))
-                      (ly:music? e))))
-         (set! music '()))
+              (and (eq? filtered-es '()) (not (ly:music? e))
+                   (or (not (eq? es '()))
+                       (ly:music? e))))
+          (set! music '()))
       music))
 
   (set! music (inner-music-filter pred? music))
   (if (ly:music? music)
       music
-      (make-music 'Music)))      ;must return music.
+      (make-music 'Music)))       ;must return music.
 
 (define*-public (display-music music #:optional (port (current-output-port)))
   "Display music, not done with @code{music-map} for clarity of
@@ -108,16 +108,16 @@ presentation."
   (display music port)
   (display ": { " port)
   (let ((es (ly:music-property music 'elements))
-       (e (ly:music-property music 'element)))
+        (e (ly:music-property music 'element)))
     (display (ly:music-mutable-properties music) port)
     (if (pair? es)
-       (begin (display "\nElements: {\n" port)
-              (for-each (lambda (m) (display-music m port)) es)
-              (display "}\n" port)))
+        (begin (display "\nElements: {\n" port)
+               (for-each (lambda (m) (display-music m port)) es)
+               (display "}\n" port)))
     (if (ly:music? e)
-       (begin
-         (display "\nChild:" port)
-         (display-music e port))))
+        (begin
+          (display "\nChild:" port)
+          (display-music e port))))
   (display " }\n" port)
   music)
 
@@ -134,20 +134,20 @@ For instance,
     "Return a keyword, eg. `#:bold', from the `proc' function, eg. #<procedure bold-markup (layout props arg)>"
     (let ((cmd-markup (symbol->string (procedure-name proc))))
       (symbol->keyword (string->symbol (substring cmd-markup 0 (- (string-length cmd-markup)
-                                                                 (string-length "-markup")))))))
+                                                                  (string-length "-markup")))))))
   (define (transform-arg arg)
     (cond ((and (pair? arg) (markup? (car arg))) ;; a markup list
-          (apply append (map inner-markup->make-markup arg)))
-         ((and (not (string? arg)) (markup? arg)) ;; a markup
-          (inner-markup->make-markup arg))
-         (else                                  ;; scheme arg
-          (music->make-music arg))))
+           (append-map inner-markup->make-markup arg))
+          ((and (not (string? arg)) (markup? arg)) ;; a markup
+           (inner-markup->make-markup arg))
+          (else                                  ;; scheme arg
+           (music->make-music arg))))
   (define (inner-markup->make-markup mrkup)
     (if (string? mrkup)
-       `(#:simple ,mrkup)
-       (let ((cmd (proc->command-keyword (car mrkup)))
-             (args (map transform-arg (cdr mrkup))))
-         `(,cmd ,@args))))
+        `(#:simple ,mrkup)
+        (let ((cmd (proc->command-keyword (car mrkup)))
+              (args (map transform-arg (cdr mrkup))))
+          `(,cmd ,@args))))
   ;; body:
   (if (string? markup-expression)
       markup-expression
@@ -158,52 +158,52 @@ For instance,
 equivalent to @var{obj}, that is, for a music expression, a
 @code{(make-music ...)} form."
   (cond (;; markup expression
-        (markup? obj)
-        (markup-expression->make-markup obj))
-       (;; music expression
-        (ly:music? obj)
-        `(make-music
-          ',(ly:music-property obj 'name)
-          ,@(apply append (map (lambda (prop)
-                                  `(',(car prop)
-                                   ,(music->make-music (cdr prop))))
-                                (remove (lambda (prop)
-                                          (eqv? (car prop) 'origin))
-                                        (ly:music-mutable-properties obj))))))
-       (;; moment
-        (ly:moment? obj)
-        `(ly:make-moment ,(ly:moment-main-numerator obj)
-                         ,(ly:moment-main-denominator obj)
-                         ,(ly:moment-grace-numerator obj)
-                         ,(ly:moment-grace-denominator obj)))
-       (;; note duration
-        (ly:duration? obj)
-        `(ly:make-duration ,(ly:duration-log obj)
-                           ,(ly:duration-dot-count obj)
-                           ,(ly:duration-scale obj)))
-       (;; note pitch
-        (ly:pitch? obj)
-        `(ly:make-pitch ,(ly:pitch-octave obj)
-                        ,(ly:pitch-notename obj)
-                        ,(ly:pitch-alteration obj)))
-       (;; scheme procedure
-        (procedure? obj)
-        (or (procedure-name obj) obj))
-       (;; a symbol (avoid having an unquoted symbol)
-        (symbol? obj)
-        `',obj)
-       (;; an empty list (avoid having an unquoted empty list)
-        (null? obj)
-        `'())
-       (;; a proper list
-        (list? obj)
-        `(list ,@(map music->make-music obj)))
-       (;; a pair
-        (pair? obj)
-        `(cons ,(music->make-music (car obj))
-               ,(music->make-music (cdr obj))))
-       (else
-        obj)))
+         (markup? obj)
+         (markup-expression->make-markup obj))
+        (;; music expression
+         (ly:music? obj)
+         `(make-music
+           ',(ly:music-property obj 'name)
+           ,@(append-map (lambda (prop)
+                           `(',(car prop)
+                             ,(music->make-music (cdr prop))))
+                         (remove (lambda (prop)
+                                   (eqv? (car prop) 'origin))
+                                 (ly:music-mutable-properties obj)))))
+        (;; moment
+         (ly:moment? obj)
+         `(ly:make-moment ,(ly:moment-main-numerator obj)
+                          ,(ly:moment-main-denominator obj)
+                          ,(ly:moment-grace-numerator obj)
+                          ,(ly:moment-grace-denominator obj)))
+        (;; note duration
+         (ly:duration? obj)
+         `(ly:make-duration ,(ly:duration-log obj)
+                            ,(ly:duration-dot-count obj)
+                            ,(ly:duration-scale obj)))
+        (;; note pitch
+         (ly:pitch? obj)
+         `(ly:make-pitch ,(ly:pitch-octave obj)
+                         ,(ly:pitch-notename obj)
+                         ,(ly:pitch-alteration obj)))
+        (;; scheme procedure
+         (procedure? obj)
+         (or (procedure-name obj) obj))
+        (;; a symbol (avoid having an unquoted symbol)
+         (symbol? obj)
+         `',obj)
+        (;; an empty list (avoid having an unquoted empty list)
+         (null? obj)
+         `'())
+        (;; a proper list
+         (list? obj)
+         `(list ,@(map music->make-music obj)))
+        (;; a pair
+         (pair? obj)
+         `(cons ,(music->make-music (car obj))
+                ,(music->make-music (cdr obj))))
+        (else
+         obj)))
 
 (use-modules (ice-9 pretty-print))
 (define*-public (display-scheme-music obj #:optional (port (current-output-port)))
@@ -219,14 +219,14 @@ which often can be read back in order to generate an equivalent expression."
              (scm display-lily))
 
 (define*-public (display-lily-music expr parser #:optional (port (current-output-port))
-                                   #:key force-duration)
+                                    #:key force-duration)
   "Display the music expression using LilyPond syntax"
   (memoize-clef-names supported-clefs)
   (parameterize ((*indent* 0)
-                (*previous-duration* (ly:make-duration 2))
-                (*force-duration* force-duration))
-    (display (music->lily-string expr parser) port)
-    (newline port)))
+                 (*previous-duration* (ly:make-duration 2))
+                 (*force-duration* force-duration))
+                (display (music->lily-string expr parser) port)
+                (newline port)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
@@ -236,17 +236,17 @@ which often can be read back in order to generate an equivalent expression."
 The number of dots in the shifted music may not be less than zero."
   (let ((d (ly:music-property music 'duration)))
     (if (ly:duration? d)
-       (let* ((cp (ly:duration-scale d))
-              (nd (ly:make-duration
+        (let* ((cp (ly:duration-scale d))
+               (nd (ly:make-duration
                     (+ shift (ly:duration-log d))
                     (max 0 (+ dot (ly:duration-dot-count d)))
-                   cp)))
-         (set! (ly:music-property music 'duration) nd)))
+                    cp)))
+          (set! (ly:music-property music 'duration) nd)))
     music))
 
 (define-public (shift-duration-log music shift dot)
   (music-map (lambda (x) (shift-one-duration-log x shift dot))
-            music))
+             music))
 
 (define-public (make-repeat name times main alts)
   "Create a repeat music expression, with all properties initialized
@@ -257,55 +257,55 @@ through MUSIC."
     ;; NoteEvent or a non-expanded chord-repetition
     ;; We just take anything that actually sports an announced duration.
     (if (ly:duration? (ly:music-property music 'duration))
-       (ly:music-property music 'duration)
-       (let loop ((elts (if (ly:music? (ly:music-property music 'element))
-                            (list (ly:music-property music 'element))
-                            (ly:music-property music 'elements))))
-         (and (pair? elts)
-              (let ((dur (first-note-duration (car elts))))
-                (if (ly:duration? dur)
-                    dur
-                    (loop (cdr elts))))))))
+        (ly:music-property music 'duration)
+        (let loop ((elts (if (ly:music? (ly:music-property music 'element))
+                             (list (ly:music-property music 'element))
+                             (ly:music-property music 'elements))))
+          (and (pair? elts)
+               (let ((dur (first-note-duration (car elts))))
+                 (if (ly:duration? dur)
+                     dur
+                     (loop (cdr elts))))))))
 
   (let ((talts (if (< times (length alts))
-                  (begin
-                    (ly:warning (_ "More alternatives than repeats.  Junking excess alternatives"))
-                    (take alts times))
-                  alts))
-       (r (make-repeated-music name)))
+                   (begin
+                     (ly:warning (_ "More alternatives than repeats.  Junking excess alternatives"))
+                     (take alts times))
+                   alts))
+        (r (make-repeated-music name)))
     (set! (ly:music-property r 'element) main)
     (set! (ly:music-property r 'repeat-count) (max times 1))
     (set! (ly:music-property r 'elements) talts)
     (if (and (equal? name "tremolo")
-            (pair? (extract-named-music main '(EventChord NoteEvent))))
-       ;; This works for single-note and multi-note tremolos!
-       (let* ((children (if (music-is-of-type? main 'sequential-music)
-                            ;; \repeat tremolo n { ... }
-                            (length (extract-named-music main '(EventChord
-                                                                NoteEvent)))
-                            ;; \repeat tremolo n c4
-                            1))
-              ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
-              (dots (1- (logcount (* times children))))
-              ;; The remaining missing multiplicator to scale the notes by
-              ;; times * children
-              (mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
-              (shift (- (ly:intlog2 (floor mult))))
-              (note-duration (first-note-duration r))
-              (duration-log (if (ly:duration? note-duration)
-                                (ly:duration-log note-duration)
-                                1))
-              (tremolo-type (ash 1 duration-log)))
-         (set! (ly:music-property r 'tremolo-type) tremolo-type)
-         (if (not (and (integer? mult) (= (logcount mult) 1)))
-             (ly:music-warning
-              main
-              (ly:format (_ "invalid tremolo repeat count: ~a") times)))
-         ;; Adjust the time of the notes
-         (ly:music-compress r (ly:make-moment 1 children))
-         ;; Adjust the displayed note durations
-         (shift-duration-log r shift dots))
-       r)))
+             (pair? (extract-named-music main '(EventChord NoteEvent))))
+        ;; This works for single-note and multi-note tremolos!
+        (let* ((children (if (music-is-of-type? main 'sequential-music)
+                             ;; \repeat tremolo n { ... }
+                             (length (extract-named-music main '(EventChord
+                                                                 NoteEvent)))
+                             ;; \repeat tremolo n c4
+                             1))
+               ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
+               (dots (1- (logcount (* times children))))
+               ;; The remaining missing multiplicator to scale the notes by
+               ;; times * children
+               (mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
+               (shift (- (ly:intlog2 (floor mult))))
+               (note-duration (first-note-duration r))
+               (duration-log (if (ly:duration? note-duration)
+                                 (ly:duration-log note-duration)
+                                 1))
+               (tremolo-type (ash 1 duration-log)))
+          (set! (ly:music-property r 'tremolo-type) tremolo-type)
+          (if (not (and (integer? mult) (= (logcount mult) 1)))
+              (ly:music-warning
+               main
+               (ly:format (_ "invalid tremolo repeat count: ~a") times)))
+          ;; Adjust the time of the notes
+          (ly:music-compress r (ly:make-moment 1 children))
+          ;; Adjust the displayed note durations
+          (shift-duration-log r shift dots))
+        r)))
 
 (define (calc-repeat-slash-count music)
   "Given the child-list @var{music} in @code{PercentRepeatMusic},
@@ -313,13 +313,13 @@ calculate the number of slashes based on the durations.  Returns @code{0}
 if durations in @var{music} vary, allowing slash beats and double-percent
 beats to be distinguished."
   (let* ((durs (map duration-of-note
-                   (extract-named-music music '(EventChord NoteEvent
-                                                RestEvent SkipEvent))))
-        (first-dur (car durs)))
+                    (extract-named-music music '(EventChord NoteEvent
+                                                            RestEvent SkipEvent))))
+         (first-dur (car durs)))
 
     (if (every (lambda (d) (equal? d first-dur)) durs)
-       (max (- (ly:duration-log first-dur) 2) 1)
-       0)))
+        (max (- (ly:duration-log first-dur) 2) 1)
+        0)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; clusters.
@@ -328,8 +328,8 @@ beats to be distinguished."
   "Replace @code{NoteEvents} by @code{ClusterNoteEvents}."
   (if (eq? (ly:music-property music 'name) 'NoteEvent)
       (make-music 'ClusterNoteEvent
-                 'pitch (ly:music-property music 'pitch)
-                 'duration (ly:music-property music 'duration))
+                  'pitch (ly:music-property music 'pitch)
+                  'duration (ly:music-property music 'duration))
       music))
 
 (define-public (notes-to-clusters music)
@@ -342,71 +342,147 @@ beats to be distinguished."
   "Replace all repeats with unfolded repeats."
 
   (let ((es (ly:music-property music 'elements))
-       (e (ly:music-property music 'element)))
+        (e (ly:music-property music 'element)))
 
     (if (music-is-of-type? music 'repeated-music)
-       (let* ((props (ly:music-mutable-properties music))
-              (old-name (ly:music-property music 'name))
-              (flattened (flatten-alist props)))
-         (set! music (apply make-music (cons 'UnfoldedRepeatedMusic
-                                             flattened)))
-
-         (if (and (equal? old-name 'TremoloRepeatedMusic)
-                  (pair? (extract-named-music e '(EventChord NoteEvent))))
-             ;; This works for single-note and multi-note tremolos!
-             (let* ((children (if (music-is-of-type? e 'sequential-music)
-                                  ;; \repeat tremolo n { ... }
-                                  (length (extract-named-music e '(EventChord
-                                                                      NoteEvent)))
-                                  ;; \repeat tremolo n c4
-                                  1))
-                    (times (ly:music-property music 'repeat-count))
-
-                    ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
-                    (dots (1- (logcount (* times children))))
-                    ;; The remaining missing multiplicator to scale the notes by
-                    ;; times * children
-                    (mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
-                    (shift (- (ly:intlog2 (floor mult)))))
-
-               ;; Adjust the time of the notes
-               (ly:music-compress music (ly:make-moment children 1))
-               ;; Adjust the displayed note durations
-               (shift-duration-log music (- shift) (- dots))))))
+        (let* ((props (ly:music-mutable-properties music))
+               (old-name (ly:music-property music 'name))
+               (flattened (flatten-alist props)))
+          (set! music (apply make-music (cons 'UnfoldedRepeatedMusic
+                                              flattened)))
+
+          (if (and (equal? old-name 'TremoloRepeatedMusic)
+                   (pair? (extract-named-music e '(EventChord NoteEvent))))
+              ;; This works for single-note and multi-note tremolos!
+              (let* ((children (if (music-is-of-type? e 'sequential-music)
+                                   ;; \repeat tremolo n { ... }
+                                   (length (extract-named-music e '(EventChord
+                                                                    NoteEvent)))
+                                   ;; \repeat tremolo n c4
+                                   1))
+                     (times (ly:music-property music 'repeat-count))
+
+                     ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
+                     (dots (1- (logcount (* times children))))
+                     ;; The remaining missing multiplicator to scale the notes by
+                     ;; times * children
+                     (mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
+                     (shift (- (ly:intlog2 (floor mult)))))
+
+                ;; Adjust the time of the notes
+                (ly:music-compress music (ly:make-moment children 1))
+                ;; Adjust the displayed note durations
+                (shift-duration-log music (- shift) (- dots))))))
 
     (if (pair? es)
-       (set! (ly:music-property music 'elements)
-             (map unfold-repeats es)))
+        (set! (ly:music-property music 'elements)
+              (map unfold-repeats es)))
     (if (ly:music? e)
-       (set! (ly:music-property music 'element)
-             (unfold-repeats e)))
+        (set! (ly:music-property music 'element)
+              (unfold-repeats e)))
     music))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; property setting music objs.
 
+(define-safe-public (check-grob-path path #:optional parser location
+                                     #:key
+                                     (start 0)
+                                     default
+                                     (min 1)
+                                     max)
+  "Check a grob path specification @var{path}, a symbol list (or a
+single symbol), for validity and possibly complete it.  Returns the
+completed specification, or @code{#f} if invalid.  If optional
+@var{parser} is given, a syntax error is raised in that case,
+optionally using @var{location}.  If an optional keyword argument
+@code{#:start @var{start}} is given, the parsing starts at the given
+index in the sequence @samp{Context.Grob.property.sub-property...},
+with the default of @samp{0} implying the full path.
+
+If there is no valid first element of @var{path} fitting at the given
+path location, an optionally given @code{#:default @var{default}} is
+used as the respective element instead without checking it for
+validity at this position.
+
+The resulting path after possibly prepending @var{default} can be
+constrained in length by optional arguments @code{#:min @var{min}} and
+@code{#:max @var{max}}, defaulting to @samp{1} and unlimited,
+respectively."
+  (let ((path (if (symbol? path) (list path) path)))
+    ;; A Guile 1.x bug specific to optargs precludes moving the
+    ;; defines out of the let
+    (define (unspecial? s)
+      (not (or (object-property s 'is-grob?)
+               (object-property s 'backend-type?))))
+    (define (grob? s)
+      (object-property s 'is-grob?))
+    (define (property? s)
+      (object-property s 'backend-type?))
+    (define (check c p) (c p))
+
+    (let* ((checkers
+            (and (< start 3)
+                 (drop (list unspecial? grob? property?) start)))
+           (res
+            (cond
+             ((null? path)
+              ;; tricky.  Should we make use of the default when the
+              ;; list is empty?  In most cases, this question should be
+              ;; academical as an empty list can only be generated by
+              ;; Scheme and is likely an error.  We consider this a case
+              ;; of "no valid first element, and default given".
+              ;; Usually, invalid use cases should be caught later using
+              ;; the #:min argument, and if the user explicitly does not
+              ;; catch this, we just follow through.
+              (if default (list default) '()))
+             ((not checkers)
+              ;; no checkers, so we have a valid first element and just
+              ;; take the path as-is.
+              path)
+             (default
+               (if ((car checkers) (car path))
+                   (and (every check (cdr checkers) (cdr path))
+                        path)
+                   (and (every check (cdr checkers) path)
+                        (cons default path))))
+             (else
+              (and (every check checkers path)
+                   path)))))
+      (if (and res
+               (if max (<= min (length res) max)
+                   (<= min (length res))))
+          res
+          (begin
+            (if parser
+                (ly:parser-error parser
+                                 (format #f (_ "bad grob property path ~a")
+                                         path)
+                                 location))
+            #f)))))
+
 (define-public (make-grob-property-set grob gprop val)
   "Make a @code{Music} expression that sets @var{gprop} to @var{val} in
 @var{grob}.  Does a pop first, i.e., this is not an override."
   (make-music 'OverrideProperty
-             'symbol grob
-             'grob-property gprop
-             'grob-value val
-             'pop-first #t))
+              'symbol grob
+              'grob-property gprop
+              'grob-value val
+              'pop-first #t))
 
 (define-public (make-grob-property-override grob gprop val)
   "Make a @code{Music} expression that overrides @var{gprop} to @var{val}
 in @var{grob}."
   (make-music 'OverrideProperty
-             'symbol grob
-             'grob-property gprop
-             'grob-value val))
+              'symbol grob
+              'grob-property gprop
+              'grob-value val))
 
 (define-public (make-grob-property-revert grob gprop)
   "Revert the grob property @var{gprop} for @var{grob}."
   (make-music 'RevertProperty
-             'symbol grob
-             'grob-property gprop))
+              'symbol grob
+              'grob-property gprop))
 
 (define direction-polyphonic-grobs
   '(AccidentalSuggestion
@@ -415,6 +491,7 @@ in @var{grob}."
     Fingering
     LaissezVibrerTie
     LigatureBracket
+    MultiMeasureRest
     PhrasingSlur
     RepeatTie
     Rest
@@ -426,77 +503,64 @@ in @var{grob}."
     TupletBracket
     TrillSpanner))
 
+(define general-grace-settings
+  `((Voice Stem font-size -3)
+    (Voice Flag font-size -3)
+    (Voice NoteHead font-size -3)
+    (Voice TabNoteHead font-size -4)
+    (Voice Dots font-size -3)
+    (Voice Stem length-fraction 0.8)
+    (Voice Stem no-stem-extend #t)
+    (Voice Beam beam-thickness 0.384)
+    (Voice Beam length-fraction 0.8)
+    (Voice Accidental font-size -4)
+    (Voice AccidentalCautionary font-size -4)
+    (Voice Script font-size -3)
+    (Voice Fingering font-size -8)
+    (Voice StringNumber font-size -8)))
+
+(define-public score-grace-settings
+  (append
+    `((Voice Stem direction ,UP)
+      (Voice Slur direction ,DOWN))
+    general-grace-settings))
+
 (define-safe-public (make-voice-props-set n)
   (make-sequential-music
    (append
     (map (lambda (x) (make-grob-property-set x 'direction
-                                                 (if (odd? n) -1 1)))
-        direction-polyphonic-grobs)
+                                             (if (odd? n) -1 1)))
+         direction-polyphonic-grobs)
     (list
-     (make-property-set 'graceSettings
-                       ;; TODO: take this from voicedGraceSettings or similar.
-                       '((Voice Stem font-size -3)
-                         (Voice Flag font-size -3)
-                         (Voice NoteHead font-size -3)
-                         (Voice TabNoteHead font-size -4)
-                         (Voice Dots font-size -3)
-                         (Voice Stem length-fraction 0.8)
-                         (Voice Stem no-stem-extend #t)
-                         (Voice Beam beam-thickness 0.384)
-                         (Voice Beam length-fraction 0.8)
-                         (Voice Accidental font-size -4)
-                         (Voice AccidentalCautionary font-size -4)
-                         (Voice Script font-size -3)
-                         (Voice Fingering font-size -8)
-                         (Voice StringNumber font-size -8)))
-
-     (make-grob-property-set 'NoteColumn 'horizontal-shift (quotient n 2))
-     (make-grob-property-set 'MultiMeasureRest 'staff-position (if (odd? n) -4 4))))))
+     (make-property-set 'graceSettings general-grace-settings)
+     (make-grob-property-set 'NoteColumn 'horizontal-shift (quotient n 2))))))
 
 (define-safe-public (make-voice-props-override n)
   (make-sequential-music
    (append
     (map (lambda (x) (make-grob-property-override x 'direction
-                                                 (if (odd? n) -1 1)))
-        direction-polyphonic-grobs)
+                                                  (if (odd? n) -1 1)))
+         direction-polyphonic-grobs)
     (list
-     (make-property-set 'graceSettings
-                       ;; TODO: take this from voicedGraceSettings or similar.
-                       '((Voice Stem font-size -3)
-                         (Voice Flag font-size -3)
-                         (Voice NoteHead font-size -3)
-                         (Voice TabNoteHead font-size -4)
-                         (Voice Dots font-size -3)
-                         (Voice Stem length-fraction 0.8)
-                         (Voice Stem no-stem-extend #t)
-                         (Voice Beam beam-thickness 0.384)
-                         (Voice Beam length-fraction 0.8)
-                         (Voice Accidental font-size -4)
-                         (Voice AccidentalCautionary font-size -4)
-                         (Voice Script font-size -3)
-                         (Voice Fingering font-size -8)
-                         (Voice StringNumber font-size -8)))
-
-     (make-grob-property-override 'NoteColumn 'horizontal-shift (quotient n 2))
-     (make-grob-property-override 'MultiMeasureRest 'staff-position (if (odd? n) -4 4))))))
+     (make-property-set 'graceSettings general-grace-settings)
+     (make-grob-property-override 'NoteColumn 'horizontal-shift (quotient n 2))))))
 
 (define-safe-public (make-voice-props-revert)
   (make-sequential-music
    (append
     (map (lambda (x) (make-grob-property-revert x 'direction))
-        direction-polyphonic-grobs)
+         direction-polyphonic-grobs)
     (list (make-property-unset 'graceSettings)
-         (make-grob-property-revert 'NoteColumn 'horizontal-shift)
-         (make-grob-property-revert 'MultiMeasureRest 'staff-position)))))
+          (make-grob-property-revert 'NoteColumn 'horizontal-shift)))))
 
 
 (define-safe-public (context-spec-music m context #:optional id)
   "Add \\context CONTEXT = ID to M."
   (let ((cm (make-music 'ContextSpeccedMusic
-                       'element m
-                       'context-type context)))
+                        'element m
+                        'context-type context)))
     (if (string? id)
-       (set! (ly:music-property cm 'context-id) id))
+        (set! (ly:music-property cm 'context-id) id))
     cm))
 
 (define-public (descend-to-context m context)
@@ -507,82 +571,82 @@ in @var{grob}."
 
 (define-public (make-non-relative-music mus)
   (make-music 'UnrelativableMusic
-             'element mus))
+              'element mus))
 
 (define-public (make-apply-context func)
   (make-music 'ApplyContext
-             'procedure func))
+              'procedure func))
 
 (define-public (make-sequential-music elts)
   (make-music 'SequentialMusic
-             'elements elts))
+              'elements elts))
 
 (define-public (make-simultaneous-music elts)
   (make-music 'SimultaneousMusic
-             'elements elts))
+              'elements elts))
 
 (define-safe-public (make-event-chord elts)
   (make-music 'EventChord
-             'elements elts))
+              'elements elts))
 
 (define-public (make-skip-music dur)
   (make-music 'SkipMusic
-             'duration dur))
+              'duration dur))
 
 (define-public (make-grace-music music)
   (make-music 'GraceMusic
-             'element music))
+              'element music))
 
 ;;;;;;;;;;;;;;;;
 
 ;; mmrest
 (define-public (make-multi-measure-rest duration location)
   (make-music 'MultiMeasureRestMusic
-             'origin location
-             'duration duration))
+              'origin location
+              'duration duration))
 
 (define-public (make-property-set sym val)
   (make-music 'PropertySet
-             'symbol sym
-             'value val))
+              'symbol sym
+              'value val))
 
 (define-public (make-property-unset sym)
   (make-music 'PropertyUnset
-             'symbol sym))
+              'symbol sym))
 
 (define-safe-public (make-articulation name)
   (make-music 'ArticulationEvent
-             'articulation-type name))
+              'articulation-type name))
 
 (define-public (make-lyric-event string duration)
   (make-music 'LyricEvent
-             'duration duration
-             'text string))
+              'duration duration
+              'text string))
 
 (define-safe-public (make-span-event type span-dir)
   (make-music type
-             'span-direction span-dir))
+              'span-direction span-dir))
 
 (define-public (override-head-style heads style)
   "Override style for @var{heads} to @var{style}."
   (make-sequential-music
-    (if (pair? heads)
-        (map (lambda (h)
+   (if (pair? heads)
+       (map (lambda (h)
               (make-grob-property-override h 'style style))
-         heads)
-        (list (make-grob-property-override heads 'style style)))))
+            heads)
+       (list (make-grob-property-override heads 'style style)))))
 
 (define-public (revert-head-style heads)
   "Revert style for @var{heads}."
   (make-sequential-music
-    (if (pair? heads)
-        (map (lambda (h)
+   (if (pair? heads)
+       (map (lambda (h)
               (make-grob-property-revert h 'style))
-         heads)
-        (list (make-grob-property-revert heads 'style)))))
+            heads)
+       (list (make-grob-property-revert heads 'style)))))
 
 (define-public (style-note-heads heads style music)
- "Set @var{style} for all @var{heads} in @var{music}.  Works both
 "Set @var{style} for all @var{heads} in @var{music}.  Works both
 inside of and outside of chord construct."
   ;; are we inside a <...>?
   (if (eq? (ly:music-property music 'name) 'NoteEvent)
@@ -593,17 +657,17 @@ inside of and outside of chord construct."
         music)
       ;; not in <...>, so use overrides
       (make-sequential-music
-        (list
-          (override-head-style heads style)
-          music
-          (revert-head-style heads)))))
+       (list
+        (override-head-style heads style)
+        music
+        (revert-head-style heads)))))
 
- (define-public (set-mus-properties! m alist)
+(define-public (set-mus-properties! m alist)
   "Set all of @var{alist} as properties of @var{m}."
   (if (pair? alist)
       (begin
-       (set! (ly:music-property m (caar alist)) (cdar alist))
-       (set-mus-properties! m (cdr alist)))))
+        (set! (ly:music-property m (caar alist)) (cdar alist))
+        (set-mus-properties! m (cdr alist)))))
 
 (define-public (music-separator? m)
   "Is @var{m} a separator?"
@@ -612,7 +676,7 @@ inside of and outside of chord construct."
 
 ;;; expanding repeat chords
 (define-public (copy-repeat-chord original-chord repeat-chord duration
-                                 event-types)
+                                  event-types)
   "Copies all events in @var{event-types} (be sure to include
 @code{rhythmic-events}) from @var{original-chord} over to
 @var{repeat-chord} with their articulations filtered as well.  Any
@@ -624,47 +688,47 @@ duration is replaced with the specified @var{duration}."
 
   (define (keep-element? m)
     (any (lambda (t) (music-is-of-type? m t))
-        event-types))
+         event-types))
   (define origin (ly:music-property repeat-chord 'origin #f))
   (define (set-origin! l)
     (if origin
-       (for-each (lambda (m) (set! (ly:music-property m 'origin) origin)) l))
+        (for-each (lambda (m) (set! (ly:music-property m 'origin) origin)) l))
     l)
 
   (for-each
    (lambda (field)
      (for-each (lambda (e)
-                (for-each (lambda (x)
-                            (set! event-types (delq x event-types)))
-                          (ly:music-property e 'types)))
-              (ly:music-property repeat-chord field)))
+                 (for-each (lambda (x)
+                             (set! event-types (delq x event-types)))
+                           (ly:music-property e 'types)))
+               (ly:music-property repeat-chord field)))
    '(elements articulations))
 
   ;; now treat the elements
   (set! (ly:music-property repeat-chord 'elements)
-       (let ((elts
-              (set-origin! (ly:music-deep-copy
-                            (filter keep-element?
-                                    (ly:music-property original-chord
-                                                       'elements))))))
-         (for-each
-          (lambda (m)
-            (let ((arts (ly:music-property m 'articulations)))
-              (if (pair? arts)
-                  (set! (ly:music-property m 'articulations)
-                        (set-origin! (filter! keep-element? arts))))
-              (if (ly:duration? (ly:music-property m 'duration))
-                  (set! (ly:music-property m 'duration) duration))))
-          elts)
-         (append! elts (ly:music-property repeat-chord 'elements))))
+        (let ((elts
+               (set-origin! (ly:music-deep-copy
+                             (filter keep-element?
+                                     (ly:music-property original-chord
+                                                        'elements))))))
+          (for-each
+           (lambda (m)
+             (let ((arts (ly:music-property m 'articulations)))
+               (if (pair? arts)
+                   (set! (ly:music-property m 'articulations)
+                         (set-origin! (filter! keep-element? arts))))
+               (if (ly:duration? (ly:music-property m 'duration))
+                   (set! (ly:music-property m 'duration) duration))))
+           elts)
+          (append! elts (ly:music-property repeat-chord 'elements))))
   (let ((arts (filter keep-element?
-                     (ly:music-property original-chord
-                                        'articulations))))
+                      (ly:music-property original-chord
+                                         'articulations))))
     (if (pair? arts)
-       (set! (ly:music-property repeat-chord 'articulations)
-             (append!
-              (set-origin! (ly:music-deep-copy arts))
-              (ly:music-property repeat-chord 'articulations))))))
+        (set! (ly:music-property repeat-chord 'articulations)
+              (append!
+               (set-origin! (ly:music-deep-copy arts))
+               (ly:music-property repeat-chord 'articulations))))))
 
 
 (define-public (expand-repeat-chords! event-types music)
@@ -673,24 +737,24 @@ having a duration in @code{duration}) with the notes from their
 respective predecessor chord."
   (let loop ((music music) (last-chord #f))
     (if (music-is-of-type? music 'event-chord)
-       (let ((chord-repeat (ly:music-property music 'duration)))
-         (cond
-          ((not (ly:duration? chord-repeat))
-           (if (any (lambda (m) (ly:duration?
-                                 (ly:music-property m 'duration)))
-                    (ly:music-property music 'elements))
-               music
-               last-chord))
-          (last-chord
-           (set! (ly:music-property music 'duration) '())
-           (copy-repeat-chord last-chord music chord-repeat event-types)
-           music)
-          (else
-           (ly:music-warning music (_ "Bad chord repetition"))
-           #f)))
-       (let ((elt (ly:music-property music 'element)))
-         (fold loop (if (ly:music? elt) (loop elt last-chord) last-chord)
-               (ly:music-property music 'elements)))))
+        (let ((chord-repeat (ly:music-property music 'duration)))
+          (cond
+           ((not (ly:duration? chord-repeat))
+            (if (any (lambda (m) (ly:duration?
+                                  (ly:music-property m 'duration)))
+                     (ly:music-property music 'elements))
+                music
+                last-chord))
+           (last-chord
+            (set! (ly:music-property music 'duration) '())
+            (copy-repeat-chord last-chord music chord-repeat event-types)
+            music)
+           (else
+            (ly:music-warning music (_ "Bad chord repetition"))
+            #f)))
+        (let ((elt (ly:music-property music 'element)))
+          (fold loop (if (ly:music? elt) (loop elt last-chord) last-chord)
+                (ly:music-property music 'elements)))))
   music)
 
 ;;; splitting chords into voices.
@@ -705,17 +769,17 @@ NUMBER is 0-base, i.e., Voice=1 (upstems) has number 0.
   (if (null? lst)
       '()
       (cons (context-spec-music
-            (make-sequential-music
-             (list (make-voice-props-set number)
-                   (make-simultaneous-music (car lst))))
-            'Bottom  (number->string (1+ number)))
-           (voicify-list (cdr lst) (1+ number)))))
+             (make-sequential-music
+              (list (make-voice-props-set number)
+                    (make-simultaneous-music (car lst))))
+             'Bottom  (number->string (1+ number)))
+            (voicify-list (cdr lst) (1+ number)))))
 
 (define (voicify-chord ch)
   "Split the parts of a chord into different Voices using separator"
   (let ((es (ly:music-property ch 'elements)))
     (set! (ly:music-property  ch 'elements)
-         (voicify-list (split-list-by-separator es music-separator?) 0))
+          (voicify-list (split-list-by-separator es music-separator?) 0))
     ch))
 
 (define-public (voicify-music m)
@@ -723,15 +787,15 @@ NUMBER is 0-base, i.e., Voice=1 (upstems) has number 0.
   (if (not (ly:music? m))
       (ly:error (_ "music expected: ~S") m))
   (let ((es (ly:music-property m 'elements))
-       (e (ly:music-property m 'element)))
+        (e (ly:music-property m 'element)))
 
     (if (pair? es)
-       (set! (ly:music-property m 'elements) (map voicify-music es)))
+        (set! (ly:music-property m 'elements) (map voicify-music es)))
     (if (ly:music? e)
-       (set! (ly:music-property m 'element)  (voicify-music e)))
+        (set! (ly:music-property m 'element)  (voicify-music e)))
     (if (and (equal? (ly:music-property m 'name) 'SimultaneousMusic)
-            (reduce (lambda (x y ) (or x y)) #f (map music-separator? es)))
-       (set! m (context-spec-music (voicify-chord m) 'Staff)))
+             (any music-separator? es))
+        (set! m (context-spec-music (voicify-chord m) 'Staff)))
     m))
 
 (define-public (empty-music)
@@ -752,7 +816,7 @@ NUMBER is 0-base, i.e., Voice=1 (upstems) has number 0.
 @code{\\applyoutput #(set-output-property 'Clef 'extra-offset '(0 . 1))}"
   (let ((meta (ly:grob-property grob 'meta)))
     (if (equal? (assoc-get 'name meta) grob-name)
-       (set! (ly:grob-property grob symbol) val))))
+        (set! (ly:grob-property grob symbol) val))))
 
 
 (define-public (skip->rest mus)
@@ -760,39 +824,65 @@ NUMBER is 0-base, i.e., Voice=1 (upstems) has number 0.
 @code{SkipEvent}.  Useful for extracting parts from crowded scores."
 
   (if  (memq (ly:music-property mus 'name) '(SkipEvent SkipMusic))
-   (make-music 'RestEvent 'duration (ly:music-property mus 'duration))
-   mus))
+       (make-music 'RestEvent 'duration (ly:music-property mus 'duration))
+       mus))
 
 
 (define-public (music-has-type music type)
   (memq type (ly:music-property music 'types)))
 
-(define-public (music-clone music)
-  (define (alist->args alist acc)
-    (if (null? alist)
-       acc
-       (alist->args (cdr alist)
-                    (cons (caar alist) (cons (cdar alist) acc)))))
-
-  (apply
-   make-music
-   (ly:music-property music 'name)
-   (alist->args (ly:music-mutable-properties music) '())))
+(define-public (music-clone music . music-properties)
+  "Clone @var{music} and set properties according to
+@var{music-properties}, a list of alternating property symbols and
+values:
+@example\n(music-clone start-span 'span-direction STOP)
+@end example
+Only properties that are not overriden by @var{music-properties} are
+actually fully cloned."
+  (let ((old-props (list-copy (ly:music-mutable-properties music)))
+        (new-props '())
+        (m (ly:make-music (ly:prob-immutable-properties music))))
+    (define (set-props mus-props)
+      (if (and (not (null? mus-props))
+               (not (null? (cdr mus-props))))
+          (begin
+            (set! old-props (assq-remove! old-props (car mus-props)))
+            (set! new-props
+                  (assq-set! new-props
+                             (car mus-props) (cadr mus-props)))
+            (set-props (cddr mus-props)))))
+    (set-props music-properties)
+    (for-each
+     (lambda (pair)
+       (set! (ly:music-property m (car pair))
+             (ly:music-deep-copy (cdr pair))))
+     old-props)
+    (for-each
+     (lambda (pair)
+       (set! (ly:music-property m (car pair)) (cdr pair)))
+     new-props)
+    m))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; warn for bare chords at start.
 
-(define-public (ly:music-message music msg)
+(define-public (ly:music-message music msg . rest)
   (let ((ip (ly:music-property music 'origin)))
     (if (ly:input-location? ip)
-        (ly:input-message ip msg)
-        (ly:message msg))))
+        (apply ly:input-message ip msg rest)
+        (apply ly:message msg rest))))
 
-(define-public (ly:music-warning music msg)
+(define-public (ly:music-warning music msg . rest)
   (let ((ip (ly:music-property music 'origin)))
     (if (ly:input-location? ip)
-        (ly:input-warning ip msg)
-        (ly:warning msg))))
+        (apply ly:input-warning ip msg rest)
+        (apply ly:warning msg rest))))
+
+(define-public (ly:event-warning event msg . rest)
+  (let ((ip (ly:event-property event 'origin)))
+    (if (ly:input-location? ip)
+        (apply ly:input-warning ip msg rest)
+        (apply ly:warning msg rest))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
@@ -802,7 +892,7 @@ NUMBER is 0-base, i.e., Voice=1 (upstems) has number 0.
 (define (vector-extend v x)
   "Make a new vector consisting of V, with X added to the end."
   (let* ((n (vector-length v))
-        (nv (make-vector (+ n 1) '())))
+         (nv (make-vector (+ n 1) '())))
     (vector-move-left! v 0 n nv 0)
     (vector-set! nv n x)
     nv))
@@ -823,12 +913,12 @@ NUMBER is 0-base, i.e., Voice=1 (upstems) has number 0.
 (define-public (add-grace-property context-name grob sym val)
   "Set @var{sym}=@var{val} for @var{grob} in @var{context-name}."
   (define (set-prop context)
-    (let* ((where (ly:context-property-where-defined context 'graceSettings))
-          (current (ly:context-property where 'graceSettings))
-          (new-settings (append current
-                                (list (list context-name grob sym val)))))
+    (let* ((where (or (ly:context-find context context-name) context))
+           (current (ly:context-property where 'graceSettings))
+           (new-settings (append current
+                                 (list (list context-name grob sym val)))))
       (ly:context-set-property! where 'graceSettings new-settings)))
-  (context-spec-music (make-apply-context set-prop) 'Voice))
+  (make-apply-context set-prop))
 
 (define-public (remove-grace-property context-name grob sym)
   "Remove all @var{sym} for @var{grob} in @var{context-name}."
@@ -837,18 +927,17 @@ NUMBER is 0-base, i.e., Voice=1 (upstems) has number 0.
          (eq? (cadr property) grob)
          (eq? (caddr property) sym)))
   (define (delete-prop context)
-    (let* ((where (ly:context-property-where-defined context 'graceSettings))
-          (current (ly:context-property where 'graceSettings))
+    (let* ((where (or (ly:context-find context context-name) context))
+           (current (ly:context-property where 'graceSettings))
            (prop-settings (filter
-                            (lambda(x) (sym-grob-context? x sym grob context-name))
-                            current))
-          (new-settings current))
+                           (lambda(x) (sym-grob-context? x sym grob context-name))
+                           current))
+           (new-settings current))
       (for-each (lambda(x)
-                 (set! new-settings (delete x new-settings)))
-               prop-settings)
+                  (set! new-settings (delete x new-settings)))
+                prop-settings)
       (ly:context-set-property! where 'graceSettings new-settings)))
-  (context-spec-music (make-apply-context delete-prop) 'Voice))
-
+  (make-apply-context delete-prop))
 
 
 (defmacro-public def-grace-function (start stop . docstring)
@@ -856,11 +945,11 @@ NUMBER is 0-base, i.e., Voice=1 (upstems) has number 0.
   `(define-music-function (parser location music) (ly:music?)
      ,@docstring
      (make-music 'GraceMusic
-                'origin location
-                'element (make-music 'SequentialMusic
-                                     'elements (list (ly:music-deep-copy ,start)
-                                                     music
-                                                     (ly:music-deep-copy ,stop))))))
+                 'origin location
+                 'element (make-music 'SequentialMusic
+                                      'elements (list (ly:music-deep-copy ,start)
+                                                      music
+                                                      (ly:music-deep-copy ,stop))))))
 
 (defmacro-public define-syntax-function (type args signature . body)
   "Helper macro for `ly:make-music-function'.
@@ -884,24 +973,37 @@ predicates require the parameter to be entered as Scheme expression.
 predicates, to be used in case of a type error in arguments or
 result."
 
+  (define (currying-lambda args doc-string? body)
+    (if (and (pair? args)
+             (pair? (car args)))
+        (currying-lambda (car args) doc-string?
+                         `((lambda ,(cdr args) ,@body)))
+        (if doc-string?
+            `(lambda ,args ,doc-string? ,@body)
+            `(lambda ,args ,@body))))
+
   (set! signature (map (lambda (pred)
-                        (if (pair? pred)
-                            `(cons ,(car pred)
-                                   ,(and (pair? (cdr pred)) (cadr pred)))
-                            pred))
-                      (cons type signature)))
-  (if (and (pair? body) (pair? (car body)) (eqv? '_i (caar body)))
-      ;; When the music function definition contains a i10n doc string,
-      ;; (_i "doc string"), keep the literal string only
-      (let ((docstring (cadar body))
-           (body (cdr body)))
-       `(ly:make-music-function (list ,@signature)
-                                (lambda ,args
-                                  ,docstring
-                                  ,@body)))
-      `(ly:make-music-function (list ,@signature)
-                              (lambda ,args
-                                ,@body))))
+                         (if (pair? pred)
+                             `(cons ,(car pred)
+                                    ,(and (pair? (cdr pred)) (cadr pred)))
+                             pred))
+                       (cons type signature)))
+
+  (let ((docstring
+         (and (pair? body) (pair? (cdr body))
+              (if (string? (car body))
+                  (car body)
+                  (and (pair? (car body))
+                       (eq? '_i (caar body))
+                       (pair? (cdar body))
+                       (string? (cadar body))
+                       (null? (cddar body))
+                       (cadar body))))))
+    ;; When the music function definition contains an i10n doc string,
+    ;; (_i "doc string"), keep the literal string only
+    `(ly:make-music-function
+      (list ,@signature)
+      ,(currying-lambda args docstring (if docstring (cdr body) body)))))
 
 (defmacro-public define-music-function rest
   "Defining macro returning music functions.
@@ -989,57 +1091,57 @@ set to the @code{location} parameter."
 
   (if (vector? (ly:music-property quote-music 'quoted-events))
       (let* ((dir (ly:music-property quote-music 'quoted-voice-direction))
-            (clef (ly:music-property quote-music 'quoted-music-clef #f))
-            (main-voice (case dir ((1) 1) ((-1) 0) (else #f)))
-            (cue-voice (and main-voice (- 1 main-voice)))
-            (main-music (ly:music-property quote-music 'element))
-            (return-value quote-music))
-
-       (if main-voice
-           (set! (ly:music-property quote-music 'element)
-                 (make-sequential-music
-                  (list
-                   (make-voice-props-override main-voice)
-                   main-music
-                   (make-voice-props-revert)))))
-
-       ;; if we have stem dirs, change both quoted and main music
-       ;; to have opposite stems.
-
-       ;; cannot context-spec Quote-music, since context
-       ;; for the quotes is determined in the iterator.
-
-       (make-sequential-music
-        (delq! #f
-               (list
-                (and clef (make-cue-clef-set clef))
-
-                ;; Need to establish CueVoice context even in #CENTER case
-                (context-spec-music
-                 (if cue-voice
-                     (make-voice-props-override cue-voice)
-                     (make-music 'Music))
-                 'CueVoice "cue")
-                quote-music
-                (and cue-voice
-                     (context-spec-music
-                      (make-voice-props-revert) 'CueVoice "cue"))
-                (and clef (make-cue-clef-unset))))))
+             (clef (ly:music-property quote-music 'quoted-music-clef #f))
+             (main-voice (case dir ((1) 1) ((-1) 0) (else #f)))
+             (cue-voice (and main-voice (- 1 main-voice)))
+             (cue-type (ly:music-property quote-music 'quoted-context-type #f))
+             (cue-id (ly:music-property quote-music 'quoted-context-id))
+             (main-music (ly:music-property quote-music 'element))
+             (return-value quote-music))
+
+        (if main-voice
+            (set! (ly:music-property quote-music 'element)
+                  (make-sequential-music
+                   (list
+                    (make-voice-props-override main-voice)
+                    main-music
+                    (make-voice-props-revert)))))
+
+        ;; if we have stem dirs, change both quoted and main music
+        ;; to have opposite stems.
+
+        ;; cannot context-spec Quote-music, since context
+        ;; for the quotes is determined in the iterator.
+
+        (make-sequential-music
+         (delq! #f
+                (list
+                 (and clef (make-cue-clef-set clef))
+                 (and cue-type cue-voice
+                      (context-spec-music
+                       (make-voice-props-override cue-voice)
+                       cue-type cue-id))
+                 quote-music
+                 (and cue-type cue-voice
+                      (context-spec-music
+                       (make-voice-props-revert)
+                       cue-type cue-id))
+                 (and clef (make-cue-clef-unset))))))
       quote-music))
 
 (define-public ((quote-substitute quote-tab) music)
   (let* ((quoted-name (ly:music-property music 'quoted-music-name))
-        (quoted-vector (and (string? quoted-name)
-                            (hash-ref quote-tab quoted-name #f))))
+         (quoted-vector (and (string? quoted-name)
+                             (hash-ref quote-tab quoted-name #f))))
 
 
     (if (string? quoted-name)
-       (if (vector? quoted-vector)
-           (begin
-             (set! (ly:music-property music 'quoted-events) quoted-vector)
-             (set! (ly:music-property music 'iterator-ctor)
-                   ly:quote-iterator::constructor))
-           (ly:music-warning music (ly:format (_ "cannot find quoted music: `~S'") quoted-name))))
+        (if (vector? quoted-vector)
+            (begin
+              (set! (ly:music-property music 'quoted-events) quoted-vector)
+              (set! (ly:music-property music 'iterator-ctor)
+                    ly:quote-iterator::constructor))
+            (ly:music-warning music (ly:format (_ "cannot find quoted music: `~S'") quoted-name))))
     music))
 
 
@@ -1057,8 +1159,8 @@ set to the @code{location} parameter."
   (define found #f)
   (define (signal m)
     (if (and (ly:music? m)
-            (eq? (ly:music-property m 'error-found) #t))
-       (set! found #t)))
+             (eq? (ly:music-property m 'error-found) #t))
+        (set! found #t)))
 
   (for-each signal (ly:music-property music 'elements))
   (signal (ly:music-property music 'element))
@@ -1069,27 +1171,27 @@ set to the @code{location} parameter."
 
 (define (precompute-music-length music)
   (set! (ly:music-property music 'length)
-       (ly:music-length music))
+        (ly:music-length music))
   music)
 
 (define-public (make-duration-of-length moment)
- "Make duration of the given @code{moment} length."
- (ly:make-duration 0 0
-  (ly:moment-main-numerator moment)
-  (ly:moment-main-denominator moment)))
 "Make duration of the given @code{moment} length."
 (ly:make-duration 0 0
+                    (ly:moment-main-numerator moment)
+                    (ly:moment-main-denominator moment)))
 
 (define (make-skipped moment bool)
- "Depending on BOOL, set or unset skipTypesetting,
 "Depending on BOOL, set or unset skipTypesetting,
 then make SkipMusic of the given MOMENT length, and
 then revert skipTypesetting."
- (make-sequential-music
-  (list
-   (context-spec-music (make-property-set 'skipTypesetting bool)
-    'Score)
-   (make-music 'SkipMusic 'duration
-    (make-duration-of-length moment))
-   (context-spec-music (make-property-set 'skipTypesetting (not bool))
-    'Score))))
 (make-sequential-music
+   (list
+    (context-spec-music (make-property-set 'skipTypesetting bool)
+                        'Score)
+    (make-music 'SkipMusic 'duration
+                (make-duration-of-length moment))
+    (context-spec-music (make-property-set 'skipTypesetting (not bool))
+                        'Score))))
 
 (define (skip-as-needed music parser)
   "Replace MUSIC by
@@ -1107,9 +1209,9 @@ then revert skipTypesetting."
       ((show-last (ly:parser-lookup parser 'showLastLength))
        (show-first (ly:parser-lookup parser 'showFirstLength))
        (show-last-length (and (ly:music? show-last)
-                             (ly:music-length show-last)))
+                              (ly:music-length show-last)))
        (show-first-length (and (ly:music? show-first)
-                              (ly:music-length show-first)))
+                               (ly:music-length show-first)))
        (orig-length (ly:music-length music)))
 
     ;;FIXME: if using either showFirst- or showLastLength,
@@ -1153,12 +1255,12 @@ then revert skipTypesetting."
      (else music))))
 
 
-(define-public toplevel-music-functions
+(define-session-public toplevel-music-functions
   (list
    (lambda (music parser) (expand-repeat-chords!
-                          (cons 'rhythmic-event
-                                (ly:parser-lookup parser '$chord-repeat-events))
-                          music))
+                           (cons 'rhythmic-event
+                                 (ly:parser-lookup parser '$chord-repeat-events))
+                           music))
    (lambda (music parser) (voicify-music music))
    (lambda (x parser) (music-map music-check-error x))
    (lambda (x parser) (music-map precompute-music-length x))
@@ -1171,7 +1273,7 @@ then revert skipTypesetting."
 
    (lambda (x parser)
      (skip-as-needed x parser)
-   )))
+     )))
 
 ;;;;;;;;;;
 ;;; general purpose music functions
@@ -1179,9 +1281,9 @@ then revert skipTypesetting."
 (define (shift-octave pitch octave-shift)
   (_i "Add @var{octave-shift} to the octave of @var{pitch}.")
   (ly:make-pitch
-     (+ (ly:pitch-octave pitch) octave-shift)
-     (ly:pitch-notename pitch)
-     (ly:pitch-alteration pitch)))
+   (+ (ly:pitch-octave pitch) octave-shift)
+   (ly:pitch-notename pitch)
+   (ly:pitch-alteration pitch)))
 
 
 ;;;;;;;;;;;;;;;;;
@@ -1190,10 +1292,10 @@ then revert skipTypesetting."
 (define (apply-durations lyric-music durations)
   (define (apply-duration music)
     (if (and (not (equal? (ly:music-length music) ZERO-MOMENT))
-            (ly:duration?  (ly:music-property music 'duration)))
-       (begin
-         (set! (ly:music-property music 'duration) (car durations))
-         (set! durations (cdr durations)))))
+             (ly:duration?  (ly:music-property music 'duration)))
+        (begin
+          (set! (ly:music-property music 'duration) (car durations))
+          (set! durations (cdr durations)))))
 
   (music-map apply-duration lyric-music))
 
@@ -1215,16 +1317,16 @@ can be omitted when the same note occurs again.
 
 Returns @code{#f} or the reason for the invalidation, a symbol."
   (let* ((def (if (pair? alteration-def)
-                 (car alteration-def)
-                 alteration-def)))
+                  (car alteration-def)
+                  alteration-def)))
     (and (symbol? def) def)))
 
 (define (extract-alteration alteration-def)
   (cond ((number? alteration-def)
-        alteration-def)
-       ((pair? alteration-def)
-        (car alteration-def))
-       (else 0)))
+         alteration-def)
+        ((pair? alteration-def)
+         (car alteration-def))
+        (else 0)))
 
 (define (check-pitch-against-signature context pitch barnum laziness octaveness)
   "Checks the need for an accidental and a @q{restore} accidental against
@@ -1235,50 +1337,50 @@ we cancel accidentals up to three measures after they first appear.
 @var{octaveness} is either @code{'same-octave} or @code{'any-octave} and
 specifies whether accidentals should be canceled in different octaves."
   (let* ((ignore-octave (cond ((equal? octaveness 'any-octave) #t)
-                             ((equal? octaveness 'same-octave) #f)
-                             (else
-                              (ly:warning (_ "Unknown octaveness type: ~S ") octaveness)
-                              (ly:warning (_ "Defaulting to 'any-octave."))
-                              #t)))
-        (key-sig (ly:context-property context 'keySignature))
-        (local-key-sig (ly:context-property context 'localKeySignature))
-        (notename (ly:pitch-notename pitch))
-        (octave (ly:pitch-octave pitch))
-        (pitch-handle (cons octave notename))
-        (need-restore #f)
-        (need-accidental #f)
-        (previous-alteration #f)
-        (from-other-octaves #f)
-        (from-same-octave (assoc-get pitch-handle local-key-sig))
-        (from-key-sig (or (assoc-get notename local-key-sig)
-
-    ;; If no key signature match is found from localKeySignature, we may have a custom
-    ;; type with octave-specific entries of the form ((octave . pitch) alteration)
-    ;; instead of (pitch . alteration).  Since this type cannot coexist with entries in
-    ;; localKeySignature, try extracting from keySignature instead.
-                          (assoc-get pitch-handle key-sig))))
+                              ((equal? octaveness 'same-octave) #f)
+                              (else
+                               (ly:warning (_ "Unknown octaveness type: ~S ") octaveness)
+                               (ly:warning (_ "Defaulting to 'any-octave."))
+                               #t)))
+         (key-sig (ly:context-property context 'keySignature))
+         (local-key-sig (ly:context-property context 'localKeySignature))
+         (notename (ly:pitch-notename pitch))
+         (octave (ly:pitch-octave pitch))
+         (pitch-handle (cons octave notename))
+         (need-restore #f)
+         (need-accidental #f)
+         (previous-alteration #f)
+         (from-other-octaves #f)
+         (from-same-octave (assoc-get pitch-handle local-key-sig))
+         (from-key-sig (or (assoc-get notename local-key-sig)
+
+                           ;; If no key signature match is found from localKeySignature, we may have a custom
+                           ;; type with octave-specific entries of the form ((octave . pitch) alteration)
+                           ;; instead of (pitch . alteration).  Since this type cannot coexist with entries in
+                           ;; localKeySignature, try extracting from keySignature instead.
+                           (assoc-get pitch-handle key-sig))))
 
     ;; loop through localKeySignature to search for a notename match from other octaves
     (let loop ((l local-key-sig))
       (if (pair? l)
-         (let ((entry (car l)))
-           (if (and (pair? (car entry))
-                    (= (cdar entry) notename))
-               (set! from-other-octaves (cdr entry))
-               (loop (cdr l))))))
+          (let ((entry (car l)))
+            (if (and (pair? (car entry))
+                     (= (cdar entry) notename))
+                (set! from-other-octaves (cdr entry))
+                (loop (cdr l))))))
 
     ;; find previous alteration-def for comparison with pitch
     (cond
      ;; from same octave?
      ((and (not ignore-octave)
-          from-same-octave
-          (recent-enough? barnum from-same-octave laziness))
+           from-same-octave
+           (recent-enough? barnum from-same-octave laziness))
       (set! previous-alteration from-same-octave))
 
      ;; from any octave?
      ((and ignore-octave
-          from-other-octaves
-          (recent-enough? barnum from-other-octaves laziness))
+           from-other-octaves
+           (recent-enough? barnum from-other-octaves laziness))
       (set! previous-alteration from-other-octaves))
 
      ;; not recent enough, extract from key signature/local key signature
@@ -1286,18 +1388,18 @@ specifies whether accidentals should be canceled in different octaves."
       (set! previous-alteration from-key-sig)))
 
     (if (accidental-invalid? previous-alteration)
-       (set! need-accidental #t)
+        (set! need-accidental #t)
 
-       (let* ((prev-alt (extract-alteration previous-alteration))
-              (this-alt (ly:pitch-alteration pitch)))
+        (let* ((prev-alt (extract-alteration previous-alteration))
+               (this-alt (ly:pitch-alteration pitch)))
 
-         (if (not (= this-alt prev-alt))
-             (begin
-               (set! need-accidental #t)
-               (if (and (not (= this-alt 0))
-                        (and (< (abs this-alt) (abs prev-alt))
-                            (> (* prev-alt this-alt) 0)))
-                   (set! need-restore #t))))))
+          (if (not (= this-alt prev-alt))
+              (begin
+                (set! need-accidental #t)
+                (if (and (not (= this-alt 0))
+                         (and (< (abs this-alt) (abs prev-alt))
+                              (> (* prev-alt this-alt) 0)))
+                    (set! need-restore #t))))))
 
     (cons need-restore need-accidental)))
 
@@ -1321,35 +1423,45 @@ immediately', that is, only look at key signature.  @code{#t} is `forever'."
   (check-pitch-against-signature context pitch barnum laziness octaveness))
 
 (define (key-entry-notename entry)
-  "Return the pitch of an entry in localKeySignature.  The entry is either of the form
-  '(notename . alter) or '((octave . notename) . (alter barnum . measurepos))."
-  (if (number? (car entry))
-      (car entry)
-      (cdar entry)))
+  "Return the pitch of an @var{entry} in @code{localKeySignature}.
+The @samp{car} of the entry is either of the form @code{notename} or
+of the form @code{(octave . notename)}.  The latter form is used for special
+key signatures or to indicate an explicit accidental.
+
+The @samp{cdr} of the entry is either a rational @code{alter} indicating
+a key signature alteration, or of the form
+@code{(alter . (barnum . measurepos))} indicating an alteration caused by
+an accidental in music."
+  (if (pair? (car entry))
+      (cdar entry)
+      (car entry)))
 
 (define (key-entry-octave entry)
-  "Return the octave of an entry in localKeySignature (or #f if the entry does not have
-  an octave)."
+  "Return the octave of an entry in @code{localKeySignature}
+or @code{#f} if the entry does not have an octave.
+See @code{key-entry-notename} for details."
   (and (pair? (car entry)) (caar entry)))
 
 (define (key-entry-bar-number entry)
-  "Return the bar number of an entry in localKeySignature (or #f if the entry does not
-  have a bar number)."
-  (and (pair? (car entry)) (caddr entry)))
+  "Return the bar number of an entry in @code{localKeySignature}
+or @code {#f} if the entry does not have a bar number.
+See @code{key-entry-notename} for details."
+  (and (pair? (cdr entry)) (caddr entry)))
 
 (define (key-entry-measure-position entry)
-  "Return the measure position of an entry in localKeySignature (or #f if the entry does
-  not have a measure position)."
-  (and (pair? (car entry)) (cdddr entry)))
+  "Return the measure position of an entry in @code{localKeySignature}
+or @code {#f} if the entry does not have a measure position.
+See @code{key-entry-notename} for details."
+  (and (pair? (cdr entry)) (cdddr entry)))
 
 (define (key-entry-alteration entry)
   "Return the alteration of an entry in localKeySignature.
 
 For convenience, returns @code{0} if entry is @code{#f}."
   (if entry
-      (if (number? (car entry))
-         (cdr entry)
-         (cadr entry))
+      (if (number? (cdr entry))
+          (cdr entry)
+          (cadr entry))
       0))
 
 (define-public (find-pitch-entry keysig pitch accept-global accept-local)
@@ -1359,17 +1471,17 @@ For convenience, returns @code{0} if entry is @code{#f}."
 If no matching entry is found, @var{#f} is returned."
   (and (pair? keysig)
        (let* ((entry (car keysig))
-             (entryoct (key-entry-octave entry))
-             (entrynn (key-entry-notename entry))
-             (nn (ly:pitch-notename pitch)))
-        (if (and (equal? nn entrynn)
-                 (or (not entryoct)
-                     (= entryoct (ly:pitch-octave pitch)))
-                 (if (key-entry-bar-number entry)
-                     accept-local
-                     accept-global))
-            entry
-            (find-pitch-entry (cdr keysig) pitch accept-global accept-local)))))
+              (entryoct (key-entry-octave entry))
+              (entrynn (key-entry-notename entry))
+              (nn (ly:pitch-notename pitch)))
+         (if (and (equal? nn entrynn)
+                  (or (not entryoct)
+                      (= entryoct (ly:pitch-octave pitch)))
+                  (if (key-entry-bar-number entry)
+                      accept-local
+                      accept-global))
+             entry
+             (find-pitch-entry (cdr keysig) pitch accept-global accept-local)))))
 
 (define-public (neo-modern-accidental-rule context pitch barnum measurepos)
   "An accidental rule that typesets an accidental if it differs from the
@@ -1377,39 +1489,39 @@ key signature @emph{and} does not directly follow a note on the same
 staff line.  This rule should not be used alone because it does neither
 look at bar lines nor different accidentals at the same note name."
   (let* ((keysig (ly:context-property context 'localKeySignature))
-        (entry (find-pitch-entry keysig pitch #t #t)))
+         (entry (find-pitch-entry keysig pitch #t #t)))
     (if (not entry)
-       (cons #f #f)
-       (let* ((global-entry (find-pitch-entry keysig pitch #t #f))
-              (key-acc (key-entry-alteration global-entry))
-              (acc (ly:pitch-alteration pitch))
-              (entrymp (key-entry-measure-position entry))
-              (entrybn (key-entry-bar-number entry)))
-         (cons #f (not (or (equal? acc key-acc)
-                           (and (equal? entrybn barnum) (equal? entrymp measurepos)))))))))
+        (cons #f #f)
+        (let* ((global-entry (find-pitch-entry keysig pitch #t #f))
+               (key-acc (key-entry-alteration global-entry))
+               (acc (ly:pitch-alteration pitch))
+               (entrymp (key-entry-measure-position entry))
+               (entrybn (key-entry-bar-number entry)))
+          (cons #f (not (or (equal? acc key-acc)
+                            (and (equal? entrybn barnum) (equal? entrymp measurepos)))))))))
 
 (define-public (teaching-accidental-rule context pitch barnum measurepos)
   "An accidental rule that typesets a cautionary accidental if it is
 included in the key signature @emph{and} does not directly follow a note
 on the same staff line."
   (let* ((keysig (ly:context-property context 'localKeySignature))
-        (entry (find-pitch-entry keysig pitch #t #t)))
+         (entry (find-pitch-entry keysig pitch #t #t)))
     (if (not entry)
-       (cons #f #f)
-       (let* ((entrymp (key-entry-measure-position entry))
-              (entrybn (key-entry-bar-number entry)))
-         (cons #f (not (and (equal? entrybn barnum) (equal? entrymp measurepos))))))))
+        (cons #f #f)
+        (let* ((entrymp (key-entry-measure-position entry))
+               (entrybn (key-entry-bar-number entry)))
+          (cons #f (not (and (equal? entrybn barnum) (equal? entrymp measurepos))))))))
 
 (define-public (set-accidentals-properties extra-natural
-                                          auto-accs auto-cauts
-                                          context)
+                                           auto-accs auto-cauts
+                                           context)
   (context-spec-music
    (make-sequential-music
     (append (if (boolean? extra-natural)
-               (list (make-property-set 'extraNatural extra-natural))
-               '())
-           (list (make-property-set 'autoAccidentals auto-accs)
-                 (make-property-set 'autoCautionaries auto-cauts))))
+                (list (make-property-set 'extraNatural extra-natural))
+                '())
+            (list (make-property-set 'autoAccidentals auto-accs)
+                  (make-property-set 'autoCautionaries auto-cauts))))
    context))
 
 (define-public (set-accidental-style style . rest)
@@ -1418,163 +1530,163 @@ argument, e.g. @code{'Staff} or @code{'Voice}.  The context defaults
 to @code{Staff}, except for piano styles, which use @code{GrandStaff}
 as a context."
   (let ((context (if (pair? rest)
-                    (car rest) 'Staff))
-       (pcontext (if (pair? rest)
-                     (car rest) 'GrandStaff)))
+                     (car rest) 'Staff))
+        (pcontext (if (pair? rest)
+                      (car rest) 'GrandStaff)))
     (cond
-      ;; accidentals as they were common in the 18th century.
-      ((equal? style 'default)
-       (set-accidentals-properties #t
-                                  `(Staff ,(make-accidental-rule 'same-octave 0))
-                                  '()
-                                  context))
-      ;; accidentals from one voice do NOT get canceled in other voices
-      ((equal? style 'voice)
-       (set-accidentals-properties #t
-                                  `(Voice ,(make-accidental-rule 'same-octave 0))
-                                  '()
-                                  context))
-      ;; accidentals as suggested by Kurt Stone, Music Notation in the 20th century.
-      ;; This includes all the default accidentals, but accidentals also needs canceling
-      ;; in other octaves and in the next measure.
-      ((equal? style 'modern)
-       (set-accidentals-properties #f
-                                  `(Staff ,(make-accidental-rule 'same-octave 0)
-                                          ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1))
-                                  '()
-                                  context))
-      ;; the accidentals that Stone adds to the old standard as cautionaries
-      ((equal? style 'modern-cautionary)
-       (set-accidentals-properties #f
-                                  `(Staff ,(make-accidental-rule 'same-octave 0))
-                                  `(Staff ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1))
-                                  context))
-      ;; same as modern, but accidentals different from the key signature are always
-      ;; typeset - unless they directly follow a note of the same pitch.
-      ((equal? style 'neo-modern)
-       (set-accidentals-properties #f
-                                  `(Staff ,(make-accidental-rule 'same-octave 0)
-                                          ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1)
-                                          ,neo-modern-accidental-rule)
-                                  '()
-                                  context))
-      ((equal? style 'neo-modern-cautionary)
-       (set-accidentals-properties #f
-                                  `(Staff ,(make-accidental-rule 'same-octave 0))
-                                  `(Staff ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1)
-                                          ,neo-modern-accidental-rule)
-                                  context))
-      ((equal? style 'neo-modern-voice)
-       (set-accidentals-properties #f
-                                  `(Voice ,(make-accidental-rule 'same-octave 0)
-                                          ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1)
-                                          ,neo-modern-accidental-rule
-                                    Staff ,(make-accidental-rule 'same-octave 0)
-                                          ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1)
-                                     ,neo-modern-accidental-rule)
-                                  '()
-                                  context))
-      ((equal? style 'neo-modern-voice-cautionary)
-       (set-accidentals-properties #f
-                                  `(Voice ,(make-accidental-rule 'same-octave 0))
-                                  `(Voice ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1)
-                                          ,neo-modern-accidental-rule
-                                    Staff ,(make-accidental-rule 'same-octave 0)
-                                          ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1)
-                                          ,neo-modern-accidental-rule)
-                                  context))
-      ;; Accidentals as they were common in dodecaphonic music with no tonality.
-      ;; Each note gets one accidental.
-      ((equal? style 'dodecaphonic)
-       (set-accidentals-properties #f
-                                  `(Staff ,(lambda (c p bn mp) '(#f . #t)))
-                                  '()
-                                  context))
-      ;; Multivoice accidentals to be read both by musicians playing one voice
-      ;; and musicians playing all voices.
-      ;; Accidentals are typeset for each voice, but they ARE canceled across voices.
-      ((equal? style 'modern-voice)
-       (set-accidentals-properties  #f
-                                   `(Voice ,(make-accidental-rule 'same-octave 0)
-                                           ,(make-accidental-rule 'any-octave 0)
-                                           ,(make-accidental-rule 'same-octave 1)
-                                     Staff ,(make-accidental-rule 'same-octave 0)
-                                           ,(make-accidental-rule 'any-octave 0)
-                                           ,(make-accidental-rule 'same-octave 1))
-                                   '()
-                                   context))
-      ;; same as modernVoiceAccidental eccept that all special accidentals are typeset
-      ;; as cautionaries
-      ((equal? style 'modern-voice-cautionary)
-       (set-accidentals-properties #f
-                                  `(Voice ,(make-accidental-rule 'same-octave 0))
-                                  `(Voice ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1)
-                                    Staff ,(make-accidental-rule 'same-octave 0)
-                                          ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1))
-                                  context))
-      ;; stone's suggestions for accidentals on grand staff.
-      ;; Accidentals are canceled across the staves in the same grand staff as well
-      ((equal? style 'piano)
-       (set-accidentals-properties #f
-                                  `(Staff ,(make-accidental-rule 'same-octave 0)
-                                          ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1)
-                                    GrandStaff
-                                          ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1))
-                                  '()
-                                  pcontext))
-      ((equal? style 'piano-cautionary)
-       (set-accidentals-properties #f
-                                  `(Staff ,(make-accidental-rule 'same-octave 0))
-                                  `(Staff ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1)
-                                    GrandStaff
-                                          ,(make-accidental-rule 'any-octave 0)
-                                          ,(make-accidental-rule 'same-octave 1))
-                                  pcontext))
-
-      ;; same as modern, but cautionary accidentals are printed for all sharp or flat
-      ;; tones specified by the key signature.
-       ((equal? style 'teaching)
-       (set-accidentals-properties #f
-                                   `(Staff ,(make-accidental-rule 'same-octave 0))
-                                   `(Staff ,(make-accidental-rule 'same-octave 1)
-                                          ,teaching-accidental-rule)
-                                  context))
-
-      ;; do not set localKeySignature when a note alterated differently from
-      ;; localKeySignature is found.
-      ;; Causes accidentals to be printed at every note instead of
-      ;; remembered for the duration of a measure.
-      ;; accidentals not being remembered, causing accidentals always to
-      ;; be typeset relative to the time signature
-      ((equal? style 'forget)
-       (set-accidentals-properties '()
-                                  `(Staff ,(make-accidental-rule 'same-octave -1))
-                                  '()
-                                  context))
-      ;; Do not reset the key at the start of a measure.  Accidentals will be
-      ;; printed only once and are in effect until overridden, possibly many
-      ;; measures later.
-      ((equal? style 'no-reset)
-       (set-accidentals-properties '()
-                                  `(Staff ,(make-accidental-rule 'same-octave #t))
-                                  '()
-                                  context))
-      (else
-       (ly:warning (_ "unknown accidental style: ~S") style)
-       (make-sequential-music '())))))
+     ;; accidentals as they were common in the 18th century.
+     ((equal? style 'default)
+      (set-accidentals-properties #t
+                                  `(Staff ,(make-accidental-rule 'same-octave 0))
+                                  '()
+                                  context))
+     ;; accidentals from one voice do NOT get canceled in other voices
+     ((equal? style 'voice)
+      (set-accidentals-properties #t
+                                  `(Voice ,(make-accidental-rule 'same-octave 0))
+                                  '()
+                                  context))
+     ;; accidentals as suggested by Kurt Stone, Music Notation in the 20th century.
+     ;; This includes all the default accidentals, but accidentals also needs canceling
+     ;; in other octaves and in the next measure.
+     ((equal? style 'modern)
+      (set-accidentals-properties #f
+                                  `(Staff ,(make-accidental-rule 'same-octave 0)
+                                          ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1))
+                                  '()
+                                  context))
+     ;; the accidentals that Stone adds to the old standard as cautionaries
+     ((equal? style 'modern-cautionary)
+      (set-accidentals-properties #f
+                                  `(Staff ,(make-accidental-rule 'same-octave 0))
+                                  `(Staff ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1))
+                                  context))
+     ;; same as modern, but accidentals different from the key signature are always
+     ;; typeset - unless they directly follow a note of the same pitch.
+     ((equal? style 'neo-modern)
+      (set-accidentals-properties #f
+                                  `(Staff ,(make-accidental-rule 'same-octave 0)
+                                          ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1)
+                                          ,neo-modern-accidental-rule)
+                                  '()
+                                  context))
+     ((equal? style 'neo-modern-cautionary)
+      (set-accidentals-properties #f
+                                  `(Staff ,(make-accidental-rule 'same-octave 0))
+                                  `(Staff ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1)
+                                          ,neo-modern-accidental-rule)
+                                  context))
+     ((equal? style 'neo-modern-voice)
+      (set-accidentals-properties #f
+                                  `(Voice ,(make-accidental-rule 'same-octave 0)
+                                          ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1)
+                                          ,neo-modern-accidental-rule
+                                          Staff ,(make-accidental-rule 'same-octave 0)
+                                          ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1)
+                                          ,neo-modern-accidental-rule)
+                                  '()
+                                  context))
+     ((equal? style 'neo-modern-voice-cautionary)
+      (set-accidentals-properties #f
+                                  `(Voice ,(make-accidental-rule 'same-octave 0))
+                                  `(Voice ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1)
+                                          ,neo-modern-accidental-rule
+                                          Staff ,(make-accidental-rule 'same-octave 0)
+                                          ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1)
+                                          ,neo-modern-accidental-rule)
+                                  context))
+     ;; Accidentals as they were common in dodecaphonic music with no tonality.
+     ;; Each note gets one accidental.
+     ((equal? style 'dodecaphonic)
+      (set-accidentals-properties #f
+                                  `(Staff ,(lambda (c p bn mp) '(#f . #t)))
+                                  '()
+                                  context))
+     ;; Multivoice accidentals to be read both by musicians playing one voice
+     ;; and musicians playing all voices.
+     ;; Accidentals are typeset for each voice, but they ARE canceled across voices.
+     ((equal? style 'modern-voice)
+      (set-accidentals-properties  #f
+                                   `(Voice ,(make-accidental-rule 'same-octave 0)
+                                           ,(make-accidental-rule 'any-octave 0)
+                                           ,(make-accidental-rule 'same-octave 1)
+                                           Staff ,(make-accidental-rule 'same-octave 0)
+                                           ,(make-accidental-rule 'any-octave 0)
+                                           ,(make-accidental-rule 'same-octave 1))
+                                   '()
+                                   context))
+     ;; same as modernVoiceAccidental eccept that all special accidentals are typeset
+     ;; as cautionaries
+     ((equal? style 'modern-voice-cautionary)
+      (set-accidentals-properties #f
+                                  `(Voice ,(make-accidental-rule 'same-octave 0))
+                                  `(Voice ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1)
+                                          Staff ,(make-accidental-rule 'same-octave 0)
+                                          ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1))
+                                  context))
+     ;; stone's suggestions for accidentals on grand staff.
+     ;; Accidentals are canceled across the staves in the same grand staff as well
+     ((equal? style 'piano)
+      (set-accidentals-properties #f
+                                  `(Staff ,(make-accidental-rule 'same-octave 0)
+                                          ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1)
+                                          GrandStaff
+                                          ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1))
+                                  '()
+                                  pcontext))
+     ((equal? style 'piano-cautionary)
+      (set-accidentals-properties #f
+                                  `(Staff ,(make-accidental-rule 'same-octave 0))
+                                  `(Staff ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1)
+                                          GrandStaff
+                                          ,(make-accidental-rule 'any-octave 0)
+                                          ,(make-accidental-rule 'same-octave 1))
+                                  pcontext))
+
+     ;; same as modern, but cautionary accidentals are printed for all sharp or flat
+     ;; tones specified by the key signature.
+     ((equal? style 'teaching)
+      (set-accidentals-properties #f
+                                  `(Staff ,(make-accidental-rule 'same-octave 0))
+                                  `(Staff ,(make-accidental-rule 'same-octave 1)
+                                          ,teaching-accidental-rule)
+                                  context))
+
+     ;; do not set localKeySignature when a note alterated differently from
+     ;; localKeySignature is found.
+     ;; Causes accidentals to be printed at every note instead of
+     ;; remembered for the duration of a measure.
+     ;; accidentals not being remembered, causing accidentals always to
+     ;; be typeset relative to the time signature
+     ((equal? style 'forget)
+      (set-accidentals-properties '()
+                                  `(Staff ,(make-accidental-rule 'same-octave -1))
+                                  '()
+                                  context))
+     ;; Do not reset the key at the start of a measure.  Accidentals will be
+     ;; printed only once and are in effect until overridden, possibly many
+     ;; measures later.
+     ((equal? style 'no-reset)
+      (set-accidentals-properties '()
+                                  `(Staff ,(make-accidental-rule 'same-octave #t))
+                                  '()
+                                  context))
+     (else
+      (ly:warning (_ "unknown accidental style: ~S") style)
+      (make-sequential-music '())))))
 
 (define-public (invalidate-alterations context)
   "Invalidate alterations in @var{context}.
@@ -1588,32 +1700,31 @@ to force a repetition of accidentals.
 Entries that conform with the current key signature are not invalidated."
   (let* ((keysig (ly:context-property context 'keySignature)))
     (set! (ly:context-property context 'localKeySignature)
-         (map-in-order
-          (lambda (entry)
-            (let* ((localalt (key-entry-alteration entry))
-                   (localoct (key-entry-octave entry)))
-              (if (or (accidental-invalid? localalt)
-                      (not localoct)
-                      (= localalt
-                         (key-entry-alteration
-                          (find-pitch-entry
-                           keysig
-                           (ly:make-pitch localoct
-                                          (key-entry-notename entry)
-                                          0)
-                           #t #t))))
-                  entry
-                  (cons (car entry) (cons 'clef (cddr entry))))))
-          (ly:context-property context 'localKeySignature)))))
+          (map-in-order
+           (lambda (entry)
+             (let* ((localalt (key-entry-alteration entry)))
+               (if (or (accidental-invalid? localalt)
+                       (not (key-entry-bar-number entry))
+                       (= localalt
+                          (key-entry-alteration
+                           (find-pitch-entry
+                            keysig
+                            (ly:make-pitch (key-entry-octave entry)
+                                           (key-entry-notename entry)
+                                           0)
+                            #t #t))))
+                   entry
+                   (cons (car entry) (cons 'clef (cddr entry))))))
+           (ly:context-property context 'localKeySignature)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (define-public (skip-of-length mus)
   "Create a skip of exactly the same length as @var{mus}."
   (let* ((skip
-         (make-music
-          'SkipEvent
-          'duration (ly:make-duration 0 0))))
+          (make-music
+           'SkipEvent
+           'duration (ly:make-duration 0 0))))
 
     (make-event-chord (list (ly:music-compress skip (ly:music-length mus))))))
 
@@ -1621,62 +1732,66 @@ Entries that conform with the current key signature are not invalidated."
   "Create a multi-measure rest of exactly the same length as @var{mus}."
 
   (let* ((skip
-         (make-multi-measure-rest
-          (ly:make-duration 0 0) '())))
+          (make-multi-measure-rest
+           (ly:make-duration 0 0) '())))
     (ly:music-compress skip (ly:music-length mus))
     skip))
 
 (define-public (pitch-of-note event-chord)
   (let ((evs (filter (lambda (x)
-                      (music-has-type x 'note-event))
-                    (ly:music-property event-chord 'elements))))
+                       (music-has-type x 'note-event))
+                     (ly:music-property event-chord 'elements))))
 
     (and (pair? evs)
-        (ly:music-property (car evs) 'pitch))))
+         (ly:music-property (car evs) 'pitch))))
 
 (define-public (duration-of-note event-chord)
   (cond
    ((pair? event-chord)
     (or (duration-of-note (car event-chord))
-       (duration-of-note (cdr event-chord))))
+        (duration-of-note (cdr event-chord))))
    ((ly:music? event-chord)
     (let ((dur (ly:music-property event-chord 'duration)))
       (if (ly:duration? dur)
-         dur
-         (duration-of-note (ly:music-property event-chord 'elements)))))
+          dur
+          (duration-of-note (ly:music-property event-chord 'elements)))))
    (else #f)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (define-public (map-some-music map? music)
   "Walk through @var{music}, transform all elements calling @var{map?}
-and only recurse if this returns @code{#f}."
+and only recurse if this returns @code{#f}.  @code{elements} or
+@code{articulations} that are not music expressions are discarded:
+this allows some amount of filtering.
+
+@code{map-some-music} may overwrite the original @var{music}."
   (let loop ((music music))
     (or (map? music)
-       (let ((elt (ly:music-property music 'element))
-             (elts (ly:music-property music 'elements))
-             (arts (ly:music-property music 'articulations)))
-         (if (ly:music? elt)
-             (set! (ly:music-property music 'element)
-                   (loop elt)))
-         (if (pair? elts)
-             (set! (ly:music-property music 'elements)
-                   (map loop elts)))
-         (if (pair? arts)
-             (set! (ly:music-property music 'articulations)
-                   (map loop arts)))
-         music))))
+        (let ((elt (ly:music-property music 'element))
+              (elts (ly:music-property music 'elements))
+              (arts (ly:music-property music 'articulations)))
+          (if (ly:music? elt)
+              (set! (ly:music-property music 'element)
+                    (loop elt)))
+          (if (pair? elts)
+              (set! (ly:music-property music 'elements)
+                    (filter! ly:music? (map! loop elts))))
+          (if (pair? arts)
+              (set! (ly:music-property music 'articulations)
+                    (filter! ly:music? (map! loop arts))))
+          music))))
 
 (define-public (for-some-music stop? music)
   "Walk through @var{music}, process all elements calling @var{stop?}
 and only recurse if this returns @code{#f}."
   (let loop ((music music))
     (if (not (stop? music))
-       (let ((elt (ly:music-property music 'element)))
-         (if (ly:music? elt)
-             (loop elt))
-         (for-each loop (ly:music-property music 'elements))
-         (for-each loop (ly:music-property music 'articulations))))))
+        (let ((elt (ly:music-property music 'element)))
+          (if (ly:music? elt)
+              (loop elt))
+          (for-each loop (ly:music-property music 'elements))
+          (for-each loop (ly:music-property music 'articulations))))))
 
 (define-public (fold-some-music pred? proc init music)
   "This works recursively on music like @code{fold} does on a list,
@@ -1688,15 +1803,15 @@ and no recursion happens.
 The top @var{music} is processed using @var{init} for @samp{previous}."
   (let loop ((music music) (previous init))
     (if (pred? music)
-       (proc music previous)
-       (fold loop
-             (fold loop
-                   (let ((elt (ly:music-property music 'element)))
-                     (if (null? elt)
-                         previous
-                         (loop elt previous)))
-                   (ly:music-property music 'elements))
-             (ly:music-property music 'articulations)))))
+        (proc music previous)
+        (fold loop
+              (fold loop
+                    (let ((elt (ly:music-property music 'element)))
+                      (if (null? elt)
+                          previous
+                          (loop elt previous)))
+                    (ly:music-property music 'elements))
+              (ly:music-property music 'articulations)))))
 
 (define-public (extract-music music pred?)
   "Return a flat list of all music matching @var{pred?} inside of
@@ -1721,7 +1836,7 @@ recursing into matches themselves."
    music
    (if (cheap-list? type)
        (lambda (m)
-        (any (lambda (t) (music-is-of-type? m t)) type))
+         (any (lambda (t) (music-is-of-type? m t)) type))
        (lambda (m) (music-is-of-type? m type)))))
 
 (define*-public (event-chord-wrap! music #:optional parser)
@@ -1733,44 +1848,120 @@ yourself."
   (map-some-music
    (lambda (m)
      (cond ((music-is-of-type? m 'event-chord)
-           (if (pair? (ly:music-property m 'articulations))
-               (begin
-                 (set! (ly:music-property m 'elements)
-                       (append (ly:music-property m 'elements)
-                               (ly:music-property m 'articulations)))
-                 (set! (ly:music-property m 'articulations) '())))
-           m)
-          ((music-is-of-type? m 'rhythmic-event)
-           (let ((arts (ly:music-property m 'articulations)))
-             (if (pair? arts)
-                 (set! (ly:music-property m 'articulations) '()))
-             (make-event-chord (cons m arts))))
-          (else #f)))
+            (if (pair? (ly:music-property m 'articulations))
+                (begin
+                  (set! (ly:music-property m 'elements)
+                        (append (ly:music-property m 'elements)
+                                (ly:music-property m 'articulations)))
+                  (set! (ly:music-property m 'articulations) '())))
+            m)
+           ((music-is-of-type? m 'rhythmic-event)
+            (let ((arts (ly:music-property m 'articulations)))
+              (if (pair? arts)
+                  (set! (ly:music-property m 'articulations) '()))
+              (make-event-chord (cons m arts))))
+           (else #f)))
    (if parser
        (expand-repeat-chords!
-       (cons 'rhythmic-event
-             (ly:parser-lookup parser '$chord-repeat-events))
-       music)
+        (cons 'rhythmic-event
+              (ly:parser-lookup parser '$chord-repeat-events))
+        music)
        music)))
 
 (define-public (event-chord-notes event-chord)
   "Return a list of all notes from @var{event-chord}."
   (filter
-    (lambda (m) (eq? 'NoteEvent (ly:music-property m 'name)))
-    (ly:music-property event-chord 'elements)))
+   (lambda (m) (eq? 'NoteEvent (ly:music-property m 'name)))
+   (ly:music-property event-chord 'elements)))
 
 (define-public (event-chord-pitches event-chord)
   "Return a list of all pitches from @var{event-chord}."
   (map (lambda (x) (ly:music-property x 'pitch))
        (event-chord-notes event-chord)))
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; The following functions are all associated with the crossStaff
-;  function
+(defmacro-public make-relative (variables reference music)
+  "The list of pitch or music variables in @var{variables} is used as
+a sequence for creating relativable music from @var{music}.
+
+When the constructed music is used outside of @code{\\relative}, it
+just reflects plugging in the @var{variables} into @var{music}.
+
+The action inside of @code{\\relative}, however, is determined by
+first relativizing the surrogate @var{reference} with the variables
+plugged in and then using the variables relativized as a side effect
+of relativizing @var{reference} for evaluating @var{music}.
+
+Since pitches don't have the object identity required for tracing the
+effect of the reference call, they are replaced @emph{only} for the
+purpose of evaluating @var{reference} with simple pitched note events.
+
+The surrogate @var{reference} expression has to be written with that
+in mind.  In addition, it must @emph{not} contain @emph{copies} of
+music that is supposed to be relativized but rather the
+@emph{originals}.  This @emph{includes} the pitch expressions.  As a
+rule, inside of @code{#@{@dots{}#@}} variables must @emph{only} be
+introduced using @code{#}, never via the copying construct @code{$}.
+The reference expression will usually just be a sequential or chord
+expression naming all variables in sequence, implying that following
+music will be relativized according to the resulting pitch of the last
+or first variable, respectively.
+
+Since the usual purpose is to create more complex music from general
+arguments and since music expression parts must not occur more than
+once, one @emph{does} generally need to use copying operators in the
+@emph{replacement} expression @var{music} when using an argument more
+than once there.  Using an argument more than once in @var{reference},
+in contrast, does not make sense.
+
+There is another fine point to mind: @var{music} must @emph{only}
+contain freshly constructed elements or copied constructs.  This will
+be the case anyway for regular LilyPond code inside of
+@code{#@{@dots{}#@}}, but any other elements (apart from the
+@var{variables} themselves which are already copied) must be created
+or copied as well.
+
+The reason is that it is usually permitted to change music in-place as
+long as one does a @var{ly:music-deep-copy} on it, and such a copy of
+the whole resulting expression will @emph{not} be able to copy
+variables/values inside of closures where the information for
+relativization is being stored.
+"
+
+  ;; pitch and music generator might be stored instead in music
+  ;; properties, and it might make sense to create a music type of its
+  ;; own for this kind of construct rather than using
+  ;; RelativeOctaveMusic
+  (define ((make-relative::to-relative-callback variables music-call ref-call)
+           music pitch)
+    (let* ((ref-vars (map (lambda (v)
+                            (if (ly:pitch? v)
+                                (make-music 'NoteEvent 'pitch v)
+                                (ly:music-deep-copy v)))
+                          variables))
+           (after-pitch (ly:make-music-relative! (apply ref-call ref-vars) pitch))
+           (actual-vars (map (lambda (v r)
+                               (if (ly:pitch? v)
+                                   (ly:music-property r 'pitch)
+                                   r))
+                             variables ref-vars))
+           (rel-music (apply music-call actual-vars)))
+      (set! (ly:music-property music 'element) rel-music)
+      after-pitch))
+  `(make-music 'RelativeOctaveMusic
+               'to-relative-callback
+               (,make-relative::to-relative-callback
+                (list ,@variables)
+                (lambda ,variables ,music)
+                (lambda ,variables ,reference))
+               'element ,music))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; The following functions are all associated with the crossStaff
+;;  function
 
 (define (close-enough? x y)
   "Values are close enough to ignore the difference"
-   (< (abs (- x y)) 0.0001))
+  (< (abs (- x y)) 0.0001))
 
 (define (extent-combine extents)
   "Combine a list of extents"
@@ -1780,51 +1971,51 @@ yourself."
 
 (define ((stem-connectable? ref root) stem)
   "Check if the stem is connectable to the root"
-  ; The root is always connectable to itself
+  ;; The root is always connectable to itself
   (or (eq? root stem)
       (and
-      ; Horizontal positions of the stems must be almost the same
-        (close-enough? (car (ly:grob-extent root ref X))
-          (car (ly:grob-extent stem ref X)))
-        ; The stem must be in the direction away from the root's notehead
-        (positive? (* (ly:grob-property root 'direction)
+       ;; Horizontal positions of the stems must be almost the same
+       (close-enough? (car (ly:grob-extent root ref X))
+                      (car (ly:grob-extent stem ref X)))
+       ;; The stem must be in the direction away from the root's notehead
+       (positive? (* (ly:grob-property root 'direction)
                      (- (car (ly:grob-extent stem ref Y))
-                       (car (ly:grob-extent root ref Y))))))))
+                        (car (ly:grob-extent root ref Y))))))))
 
 (define (stem-span-stencil span)
   "Connect stems if we have at least one stem connectable to the root"
   (let* ((system (ly:grob-system span))
-          (root (ly:grob-parent span X))
-          (stems (filter (stem-connectable? system root)
-                         (ly:grob-object span 'stems))))
-     (if (<= 2 (length stems))
-         (let* ((yextents (map (lambda (st)
-                                 (ly:grob-extent st system Y)) stems))
-                (yextent (extent-combine yextents))
-                (layout (ly:grob-layout root))
-                (blot (ly:output-def-lookup layout 'blot-diameter)))
-           ; Hide spanned stems
-           (map (lambda (st)
-                  (set! (ly:grob-property st 'transparent) #t))
-             stems)
-           ; Draw a nice looking stem with rounded corners
-           (ly:round-filled-box (ly:grob-extent root root X) yextent blot))
-         ; Nothing to connect, don't draw the span
-         #f)))
+         (root (ly:grob-parent span X))
+         (stems (filter (stem-connectable? system root)
+                        (ly:grob-object span 'stems))))
+    (if (<= 2 (length stems))
+        (let* ((yextents (map (lambda (st)
+                                (ly:grob-extent st system Y)) stems))
+               (yextent (extent-combine yextents))
+               (layout (ly:grob-layout root))
+               (blot (ly:output-def-lookup layout 'blot-diameter)))
+          ;; Hide spanned stems
+          (for-each (lambda (st)
+                      (set! (ly:grob-property st 'stencil) #f))
+                    stems)
+          ;; Draw a nice looking stem with rounded corners
+          (ly:round-filled-box (ly:grob-extent root root X) yextent blot))
+        ;; Nothing to connect, don't draw the span
+        #f)))
 
 (define ((make-stem-span! stems trans) root)
   "Create a stem span as a child of the cross-staff stem (the root)"
   (let ((span (ly:engraver-make-grob trans 'Stem '())))
     (ly:grob-set-parent! span X root)
     (set! (ly:grob-object span 'stems) stems)
-    ; Suppress positioning, the stem code is confused by this weird stem
+    ;; Suppress positioning, the stem code is confused by this weird stem
     (set! (ly:grob-property span 'X-offset) 0)
     (set! (ly:grob-property span 'stencil) stem-span-stencil)))
 
 (define-public (cross-staff-connect stem)
   "Set cross-staff property of the stem to this function to connect it to
 other stems automatically"
-   #t)
+  #t)
 
 (define (stem-is-root? stem)
   "Check if automatic connecting of the stem was requested.  Stems connected
@@ -1834,24 +2025,24 @@ other stems just because of that."
 
 (define (make-stem-spans! ctx stems trans)
   "Create stem spans for cross-staff stems"
-  ; Cannot do extensive checks here, just make sure there are at least
-  ; two stems at this musical moment
+  ;; Cannot do extensive checks here, just make sure there are at least
+  ;; two stems at this musical moment
   (if (<= 2 (length stems))
-    (let ((roots (filter stem-is-root? stems)))
-    (map (make-stem-span! stems trans) roots))))
+      (let ((roots (filter stem-is-root? stems)))
+        (for-each (make-stem-span! stems trans) roots))))
 
 (define-public (Span_stem_engraver ctx)
   "Connect cross-staff stems to the stems above in the system"
   (let ((stems '()))
     (make-engraver
-      ; Record all stems for the given moment
-      (acknowledgers
-        ((stem-interface trans grob source)
-        (set! stems (cons grob stems))))
-      ; Process stems and reset the stem list to empty
-      ((process-acknowledged trans)
-        (make-stem-spans! ctx stems trans)
-        (set! stems '())))))
+     ;; Record all stems for the given moment
+     (acknowledgers
+      ((stem-interface trans grob source)
+       (set! stems (cons grob stems))))
+     ;; Process stems and reset the stem list to empty
+     ((process-acknowledged trans)
+      (make-stem-spans! ctx stems trans)
+      (set! stems '())))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; The following is used by the alterBroken function.
@@ -1862,13 +2053,166 @@ of list @var{arg}."
   (let* ((orig (ly:grob-original grob))
          (siblings (ly:spanner-broken-into orig)))
 
-   (define (helper sibs arg)
-     (if (null? arg)
-         arg
-         (if (eq? (car sibs) grob)
-             (car arg)
-             (helper (cdr sibs) (cdr arg)))))
+    (define (helper sibs arg)
+      (if (null? arg)
+          arg
+          (if (eq? (car sibs) grob)
+              (car arg)
+              (helper (cdr sibs) (cdr arg)))))
+
+    (if (>= (length siblings) 2)
+        (helper siblings arg)
+        (car arg))))
 
-   (if (>= (length siblings) 2)
-       (helper siblings arg)
-       (car arg))))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; measure counter
+
+(define (measure-counter-stencil grob)
+  "Print a number for a measure count.  The number is centered using
+the extents of @code{BreakAlignment} grobs associated with
+@code{NonMusicalPaperColumn} grobs.  In the case of an unbroken measure, these
+columns are the left and right bounds of a @code{MeasureCounter} spanner.
+Broken measures are numbered in parentheses."
+  (let* ((orig (ly:grob-original grob))
+         (siblings (ly:spanner-broken-into orig)) ; have we been split?
+         (bounds (ly:grob-array->list (ly:grob-object grob 'columns)))
+         (refp (ly:grob-system grob))
+         ;; we use the first and/or last NonMusicalPaperColumn grob(s) of
+         ;; a system in the event that a MeasureCounter spanner is broken
+         (all-cols (ly:grob-array->list (ly:grob-object refp 'columns)))
+         (all-cols
+          (filter
+           (lambda (col) (eq? #t (ly:grob-property col 'non-musical)))
+           all-cols))
+         (left-bound
+          (if (or (null? siblings) ; spanner is unbroken
+                  (eq? grob (car siblings))) ; or the first piece
+              (car bounds)
+              (car all-cols)))
+         (right-bound
+          (if (or (null? siblings)
+                  (eq? grob (car (reverse siblings))))
+              (car (reverse bounds))
+              (car (reverse all-cols))))
+         (elts-L (ly:grob-array->list (ly:grob-object left-bound 'elements)))
+         (elts-R (ly:grob-array->list (ly:grob-object right-bound 'elements)))
+         (break-alignment-L
+          (filter
+           (lambda (elt) (grob::has-interface elt 'break-alignment-interface))
+           elts-L))
+         (break-alignment-R
+          (filter
+           (lambda (elt) (grob::has-interface elt 'break-alignment-interface))
+           elts-R))
+         (break-alignment-L-ext (ly:grob-extent (car break-alignment-L) refp X))
+         (break-alignment-R-ext (ly:grob-extent (car break-alignment-R) refp X))
+         (num (markup (number->string (ly:grob-property grob 'count-from))))
+         (num
+          (if (or (null? siblings)
+                  (eq? grob (car siblings)))
+              num
+              (make-parenthesize-markup num)))
+         (num (grob-interpret-markup grob num))
+         (num (ly:stencil-aligned-to num X (ly:grob-property grob 'self-alignment-X)))
+         (num
+          (ly:stencil-translate-axis
+           num
+           (+ (interval-length break-alignment-L-ext)
+              (* 0.5
+                 (- (car break-alignment-R-ext)
+                    (cdr break-alignment-L-ext))))
+           X)))
+    num))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; The following are used by the \offset function
+
+(define (find-value-to-offset prop self alist)
+  "Return the first value of the property @var{prop} in the property
+alist @var{alist} -- after having found @var{self}.  If @var{self} is
+not found, return the first value of @var{prop}."
+  (let ((segment (member (cons prop self) alist)))
+    (if (not segment)
+        (assoc-get prop alist)
+        (assoc-get prop (cdr segment)))))
+
+(define (offset-multiple-types arg offsets)
+  "Displace @var{arg} by @var{offsets} if @var{arg} is a number, a
+number pair, or a list of number pairs.  If @var{offsets} is an empty
+list or if there is a type-mismatch, @var{arg} will be returned."
+  (cond
+    ((and (number? arg) (number? offsets))
+     (+ arg offsets))
+    ((and (number-pair? arg)
+          (or (number? offsets)
+              (number-pair? offsets)))
+     (coord-translate arg offsets))
+    ((and (number-pair-list? arg) (number-pair-list? offsets))
+     (map
+       (lambda (x y) (coord-translate x y))
+       arg offsets))
+    (else arg)))
+
+(define-public (offsetter property offsets)
+  "Apply @var{offsets} to the default values of @var{property} of @var{grob}.
+Offsets are restricted to immutable properties and values of type @code{number},
+@code{number-pair}, or @code{number-pair-list}."
+  (define (self grob)
+    (let* ((immutable (ly:grob-basic-properties grob))
+           ; We need to search the basic-properties alist for our property to
+           ; obtain values to offset.  Our search is complicated by the fact that
+           ; calling the music function `offset' as an override conses a pair to
+           ; the head of the alist.  This pair must be discounted.  The closure it
+           ; contains is named `self' so it can be easily recognized.  If `offset'
+           ; is called as a tweak, the basic-property alist is unaffected.
+           (target (find-value-to-offset property self immutable))
+           ; if target is a procedure, we need to apply it to our grob to calculate
+           ; values to offset.
+           (vals
+             (if (procedure? target)
+                 (target grob)
+                 target))
+           (can-type-be-offset?
+             (or (number? vals)
+                 (number-pair? vals)
+                 (number-pair-list? vals))))
+
+      (if can-type-be-offset?
+          ; '(+inf.0 . -inf.0) would offset to itself.  This will be confusing to a
+          ; user unaware of the default value of the property, so issue a warning.
+          (if (equal? empty-interval vals)
+              (ly:warning "default '~a of ~a is ~a and can't be offset"
+                property grob vals)
+              (let* ((orig (ly:grob-original grob))
+                     (siblings
+                       (if (ly:spanner? grob)
+                           (ly:spanner-broken-into orig)
+                           '()))
+                     (total-found (length siblings))
+                     ; Since there is some flexibility in input syntax,
+                     ; structure of `offsets' is normalized.
+                     (offsets
+                       (if (or (not (pair? offsets))
+                               (number-pair? offsets)
+                               (and (number-pair-list? offsets)
+                                    (number-pair-list? vals)))
+                           (list offsets)
+                           offsets)))
+
+                (define (helper sibs offs)
+                  ; apply offsets to the siblings of broken spanners
+                  (if (pair? offs)
+                      (if (eq? (car sibs) grob)
+                          (offset-multiple-types vals (car offs))
+                          (helper (cdr sibs) (cdr offs)))
+                      vals))
+
+                (if (>= total-found 2)
+                    (helper siblings offsets)
+                    (offset-multiple-types vals (car offsets)))))
+
+              (begin
+                (ly:warning "the property '~a of ~a cannot be offset" property grob)
+                vals))))
+    ; return the closure named `self'
+    self)
index af55cc8fde11557f70c010b2f827e073278275e8..02170918a1bec6af6e72481c9f7256c59ba651fc 100644 (file)
@@ -26,9 +26,6 @@
 (define-public (grob::is-live? grob)
   (pair? (ly:grob-basic-properties grob)))
 
-(define-public (grob::x-parent-width grob)
-  (ly:grob-property (ly:grob-parent grob X) 'X-extent))
-
 (define-public (make-stencil-boxer thickness padding callback)
   "Return function that adds a box around the grob passed as argument."
   (lambda (grob)
@@ -41,7 +38,7 @@
 
 (define-public (print-circled-text-callback grob)
   (grob-interpret-markup grob (make-circle-markup
-                              (ly:grob-property grob 'text))))
+                               (ly:grob-property grob 'text))))
 
 (define-public (event-cause grob)
   (let ((cause (ly:grob-property  grob 'cause)))
 
 (define-public (grob-interpret-markup grob text)
   (let* ((layout (ly:grob-layout grob))
-        (defs (ly:output-def-lookup layout 'text-font-defaults))
-        (props (ly:grob-alist-chain grob defs)))
+         (defs (ly:output-def-lookup layout 'text-font-defaults))
+         (props (ly:grob-alist-chain grob defs)))
 
     (ly:text-interface::interpret-markup layout props text)))
 
+(define-public (grob::unpure-Y-extent-from-stencil pure-function)
+  "The unpure height will come from a stencil whereas the pure
+   height will come from @code{pure-function}."
+  (ly:make-unpure-pure-container ly:grob::stencil-height pure-function))
+
+(define-public grob::unpure-horizontal-skylines-from-stencil
+  (ly:make-unpure-pure-container
+   ly:grob::horizontal-skylines-from-stencil
+   ly:grob::pure-simple-horizontal-skylines-from-extents))
+
+(define-public grob::always-horizontal-skylines-from-stencil
+  (ly:make-unpure-pure-container
+   ly:grob::horizontal-skylines-from-stencil))
+
+(define-public grob::unpure-vertical-skylines-from-stencil
+  (ly:make-unpure-pure-container
+   ly:grob::vertical-skylines-from-stencil
+   ly:grob::pure-simple-vertical-skylines-from-extents))
+
+(define-public grob::always-vertical-skylines-from-stencil
+  (ly:make-unpure-pure-container
+   ly:grob::vertical-skylines-from-stencil))
+
+(define-public grob::always-vertical-skylines-from-element-stencils
+  (ly:make-unpure-pure-container
+   ly:grob::vertical-skylines-from-element-stencils
+   ly:grob::pure-vertical-skylines-from-element-stencils))
+
+(define-public grob::always-horizontal-skylines-from-element-stencils
+  (ly:make-unpure-pure-container
+   ly:grob::horizontal-skylines-from-element-stencils
+   ly:grob::pure-horizontal-skylines-from-element-stencils))
+
+;; Using this as a callback for a grob's Y-extent promises
+;; that the grob's stencil does not depend on line-spacing.
+;; We use this promise to figure the space required by Clefs
+;; and such at the note-spacing stage.
+
+(define-public grob::always-Y-extent-from-stencil
+  (ly:make-unpure-pure-container ly:grob::stencil-height))
+
+(define-public (layout-line-thickness grob)
+  "Get the line thickness of the @var{grob}'s corresponding layout."
+  (let* ((layout (ly:grob-layout grob))
+         (line-thickness (ly:output-def-lookup layout 'line-thickness)))
+
+    line-thickness))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; beam slope
 
+;; even though kievan noteheads do not have stems, their
+;; invisible stems help with beam placement
+;; this assures that invisible stems for kievan notes are aligned
+;; to the center of kievan noteheads. that is thus where the beams'
+;; x extrema will fall
+(define-public (stem::kievan-offset-callback grob)
+  (let* ((note-heads (ly:grob-object grob 'note-heads))
+         (note-heads-grobs (if (not (null? note-heads))
+                               (ly:grob-array->list note-heads)
+                               '()))
+         (first-note-head (if (not (null? note-heads-grobs))
+                              (car note-heads-grobs)
+                              '()))
+         (note-head-w (if (not (null? first-note-head))
+                          (ly:grob-extent first-note-head first-note-head X)
+                          '(0 . 0))))
+    (interval-center note-head-w)))
+
+
+;; sets position of beams for Kievan notation
+(define-public (beam::get-kievan-positions grob)
+  (let* ((stems (ly:grob-object grob 'stems))
+         (stems-grobs (if (not (null? stems))
+                          (ly:grob-array->list stems)
+                          '()))
+         (first-stem (if (not (null? stems-grobs))
+                         (car stems-grobs)
+                         '()))
+         (note-heads (if (not (null? first-stem))
+                         (ly:grob-object first-stem 'note-heads)
+                         '()))
+         (note-heads-grobs (if (not (null? note-heads))
+                               (ly:grob-array->list note-heads)
+                               '()))
+         (first-note-head (if (not (null? note-heads-grobs))
+                              (car note-heads-grobs)
+                              '()))
+         (next-stem (if (not (null? stems))
+                        (cadr stems-grobs)
+                        '()))
+         (next-note-heads (if (not (null? next-stem))
+                              (ly:grob-object next-stem 'note-heads)
+                              '()))
+         (next-note-heads-grobs (if (not (null? next-note-heads))
+                                    (ly:grob-array->list next-note-heads)
+                                    '()))
+         (next-note-head (if (not (null? next-note-heads-grobs))
+                             (car next-note-heads-grobs)
+                             '()))
+         (left-pos (ly:grob-property first-note-head 'Y-offset))
+         (right-pos (ly:grob-property next-note-head 'Y-offset))
+         (direction (ly:grob-property grob 'direction))
+         (first-nh-height (ly:grob::stencil-height first-note-head))
+         (next-nh-height (ly:grob::stencil-height next-note-head))
+         (left-height (if (= direction DOWN)
+                          (+ (car first-nh-height) 0.75)
+                          (- (cdr first-nh-height) 0.75)))
+         (right-height (if (= direction DOWN)
+                           (+ (car next-nh-height) 0.75)
+                           (- (cdr next-nh-height) 0.75))))
+    (cons (+ left-pos left-height) (+ right-pos right-height))))
+
+(define-public (beam::get-kievan-quantized-positions grob)
+  (let* ((pos (ly:grob-property grob 'positions))
+         (stems (ly:grob-object grob 'stems))
+         (stems-grobs (if (not (null? stems))
+                          (ly:grob-array->list stems)
+                          '())))
+    (for-each
+     (lambda (g)
+       (ly:grob-set-property! g 'stem-begin-position 0)
+       (ly:grob-set-property! g 'length 0))
+     stems-grobs)
+    pos))
+
 ;; calculates each slope of a broken beam individually
 (define-public (beam::place-broken-parts-individually grob)
   (ly:beam::quanting grob '(+inf.0 . -inf.0) #f))
                            quant2))
                (factor (/ (atan (abs slope1)) PI-OVER-TWO))
                (base (cons-map
-                       (lambda (x)
-                         (+ (* (x quant1) (- 1 factor))
-                            (* (x quant2) factor)))
-                       (cons car cdr))))
+                      (lambda (x)
+                        (+ (* (x quant1) (- 1 factor))
+                           (* (x quant2) factor)))
+                      (cons car cdr))))
           (ly:beam::quanting grob base #f)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (ly:side-position-interface::calc-cross-staff g)))
 
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; side-position stuff
+
+(define-public (only-if-beamed g)
+  (any (lambda (x) (ly:grob? (ly:grob-object x 'beam)))
+       (ly:grob-array->list (ly:grob-object g 'side-support-elements))))
+
+(define-public side-position-interface::y-aligned-side
+  (ly:make-unpure-pure-container
+   ly:side-position-interface::y-aligned-side
+   ly:side-position-interface::pure-y-aligned-side))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; self-alignment stuff
+
+(define-public self-alignment-interface::y-aligned-on-self
+  (ly:make-unpure-pure-container
+   ly:self-alignment-interface::y-aligned-on-self
+   ly:self-alignment-interface::pure-y-aligned-on-self))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; staff symbol
+
+(define staff-symbol-referencer::callback
+  (ly:make-unpure-pure-container ly:staff-symbol-referencer::callback))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; note heads
 
   (ly:duration-log
    (ly:event-property (event-cause grob) 'duration)))
 
-(define-public (stem::length grob)
-  (let* ((ss (ly:staff-symbol-staff-space grob))
-         (beg (ly:grob-property grob 'stem-begin-position))
-         (beam (ly:grob-object grob 'beam)))
-    (if (null? beam)
-        (abs (- (ly:stem::calc-stem-end-position grob) beg))
-        (begin
-          (ly:programming-error
-            "stem::length called but will not be used for beamed stem.")
-          0.0))))
-
-(define-public (stem::pure-length grob beg end)
-  (let* ((ss (ly:staff-symbol-staff-space grob))
-         (beg (ly:grob-pure-property grob 'stem-begin-position 0 1000)))
-    (abs (- (ly:stem::pure-calc-stem-end-position grob 0 2147483646) beg))))
-
 (define (stem-stub::do-calculations grob)
   (and (ly:grob-property (ly:grob-parent grob X) 'cross-staff)
        (not (ly:grob-property (ly:grob-parent grob X) 'transparent))))
   (if (stem-stub::do-calculations grob)
       (let* ((dad (ly:grob-parent grob X))
              (refp (ly:grob-common-refpoint grob dad Y))
-             (stem_ph (ly:grob-pure-height dad refp 0 1000000))
-             (my_ph (ly:grob-pure-height grob refp 0 1000000))
+             (stem_ph (ly:grob-pure-height dad refp 0 INFINITY-INT))
+             (my_ph (ly:grob-pure-height grob refp 0 INFINITY-INT))
              ;; only account for distance if stem is on different staff than stub
              (dist (if (grob::has-interface refp 'hara-kiri-group-spanner-interface)
                        0
         (if (interval-empty? (interval-intersection stem_ph my_ph)) #f (coord-translate stem_ph dist)))
       #f))
 
-;; FIXME: NEED TO FIND A BETTER WAY TO HANDLE KIEVAN NOTATION
+(define-public (note-head::calc-kievan-duration-log grob)
+  (min 3
+       (ly:duration-log
+        (ly:event-property (event-cause grob) 'duration))))
+
 (define-public (note-head::calc-duration-log grob)
-  (let ((style (ly:grob-property grob 'style)))
-    (if (and (symbol? style) (string-match "kievan*" (symbol->string style)))
-      (min 3
-        (ly:duration-log
-       (ly:event-property (event-cause grob) 'duration)))
-      (min 2
-       (ly:duration-log
-       (ly:event-property (event-cause grob) 'duration))))))
+  (min 2
+       (ly:duration-log
+        (ly:event-property (event-cause grob) 'duration))))
 
 (define-public (dots::calc-dot-count grob)
   (ly:duration-dot-count
 
 (define-public (dots::calc-staff-position grob)
   (let* ((head (ly:grob-parent grob Y))
-        (log (ly:grob-property head 'duration-log)))
+         (log (ly:grob-property head 'duration-log)))
 
     (cond
      ((or (not (grob::has-interface head 'rest-interface))
-         (not (integer? log))) 0)
+          (not (integer? log))) 0)
      ((= log 7) 4)
      ((> log 4) 3)
      ((= log 0) -1)
@@ -202,87 +331,87 @@ and duration-log @var{log}."
     ((harmonic) "0harmonic")
     ((harmonic-black) "2harmonic")
     ((harmonic-mixed) (if (<= log 1) "0harmonic"
-                         "2harmonic"))
+                          "2harmonic"))
     ((baroque)
      ;; Oops, I actually would not call this "baroque", but, for
      ;; backwards compatibility to 1.4, this is supposed to take
      ;; brevis, longa and maxima from the neo-mensural font and all
      ;; other note heads from the default font.  -- jr
      (if (< log 0)
-        (string-append (number->string log) "neomensural")
-        (number->string log)))
+         (string-append (number->string log) "neomensural")
+         (number->string log)))
     ((altdefault)
      ;; Like default, but brevis is drawn with double vertical lines
      (if (= log -1)
-        (string-append (number->string log) "double")
-        (number->string log)))
+         (string-append (number->string log) "double")
+         (number->string log)))
     ((mensural)
      (string-append (number->string log) (symbol->string style)))
     ((petrucci)
      (if (< log 0)
-        (string-append (number->string log) "mensural")
-        (string-append (number->string log) (symbol->string style))))
+         (string-append (number->string log) "mensural")
+         (string-append (number->string log) (symbol->string style))))
     ((blackpetrucci)
      (if (< log 0)
-        (string-append (number->string log) "blackmensural")
-        (string-append (number->string log) (symbol->string style))))
+         (string-append (number->string log) "blackmensural")
+         (string-append (number->string log) (symbol->string style))))
     ((semipetrucci)
      (if (< log 0)
-        (string-append (number->string log) "semimensural")
-        (string-append (number->string log) "petrucci")))
+         (string-append (number->string log) "semimensural")
+         (string-append (number->string log) "petrucci")))
     ((neomensural)
      (string-append (number->string log) (symbol->string style)))
     ((kievan)
      (string-append (number->string log) "kievan"))
     (else
      (if (string-match "vaticana*|hufnagel*|medicaea*" (symbol->string style))
-        (symbol->string style)
-        (string-append (number->string (max 0 log))
-                       (symbol->string style))))))
+         (symbol->string style)
+         (string-append (number->string (max 0 log))
+                        (symbol->string style))))))
 
 (define-public (note-head::calc-glyph-name grob)
   (let* ((style (ly:grob-property grob 'style))
-        (log (if (string-match "kievan*" (symbol->string style))
-                 (min 3 (ly:grob-property grob 'duration-log))
-                 (min 2 (ly:grob-property grob 'duration-log)))))
+         (log (if (string-match "kievan*" (symbol->string style))
+                  (min 3 (ly:grob-property grob 'duration-log))
+                  (min 2 (ly:grob-property grob 'duration-log)))))
     (select-head-glyph style log)))
 
 (define-public (note-head::brew-ez-stencil grob)
   (let* ((log (ly:grob-property grob 'duration-log))
-        (pitch (ly:event-property (event-cause grob) 'pitch))
-        (pitch-index (ly:pitch-notename pitch))
-        (note-names (ly:grob-property grob 'note-names))
-        (pitch-string (if (and (vector? note-names)
-                               (> (vector-length note-names) pitch-index))
-                          (vector-ref note-names pitch-index)
-                          (string
-                           (integer->char
-                            (+ (modulo (+ pitch-index 2) 7)
-                               (char->integer #\A))))))
-        (staff-space (ly:staff-symbol-staff-space grob))
-        (line-thickness (ly:staff-symbol-line-thickness grob))
-        (stem (ly:grob-object grob 'stem))
-        (stem-thickness (* (if (ly:grob? stem)
-                               (ly:grob-property stem 'thickness)
-                               1.3)
-                           line-thickness))
-        (radius (/ (+ staff-space line-thickness) 2))
-        (letter (markup #:center-align #:vcenter pitch-string))
-        (filled-circle (markup #:draw-circle radius 0 #t)))
+         (pitch (ly:event-property (event-cause grob) 'pitch))
+         (pitch-index (ly:pitch-notename pitch))
+         (note-names (ly:grob-property grob 'note-names))
+         (pitch-string (if (and (vector? note-names)
+                                (> (vector-length note-names) pitch-index))
+                           (vector-ref note-names pitch-index)
+                           (string
+                            (integer->char
+                             (+ (modulo (+ pitch-index 2) 7)
+                                (char->integer #\A))))))
+         (staff-space (ly:staff-symbol-staff-space grob))
+         (line-thickness (ly:staff-symbol-line-thickness grob))
+         (stem (ly:grob-object grob 'stem))
+         (stem-thickness (* (if (ly:grob? stem)
+                                (ly:grob-property stem 'thickness)
+                                1.3)
+                            line-thickness))
+         (radius (/ (+ staff-space line-thickness) 2))
+         (letter (markup #:center-align #:vcenter pitch-string))
+         (filled-circle (markup #:draw-circle radius 0 #t)))
 
     (ly:stencil-translate-axis
      (grob-interpret-markup
       grob
       (if (>= log 2)
-         (make-combine-markup
-          filled-circle
-          (make-with-color-markup white letter))
-         (make-combine-markup
-          (make-combine-markup
-           filled-circle
-           (make-with-color-markup white (make-draw-circle-markup
-                                          (- radius stem-thickness) 0 #t)))
-          letter)))
+          (make-combine-markup
+           filled-circle
+           (make-with-color-markup white letter))
+          (make-combine-markup
+           (make-combine-markup
+            filled-circle
+            (make-with-color-markup white (make-draw-circle-markup
+                                           (- radius stem-thickness) 0 #t)))
+           letter)))
      radius X)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -326,14 +455,14 @@ and duration-log @var{log}."
 
 (define-public (rhythmic-location->file-string a)
   (ly:format "~a.~a.~a"
-            (car a)
-            (ly:moment-main-numerator (cdr a))
-            (ly:moment-main-denominator (cdr a))))
+             (car a)
+             (ly:moment-main-numerator (cdr a))
+             (ly:moment-main-denominator (cdr a))))
 
 (define-public (rhythmic-location->string a)
   (ly:format "bar ~a ~a"
-            (car a)
-            (ly:moment->string (cdr a))))
+             (car a)
+             (ly:moment->string (cdr a))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; break visibility
@@ -346,16 +475,6 @@ and duration-log @var{log}."
 (define-public center-visible          #(#f #t #f))
 (define-public end-of-line-visible     #(#t #f #f))
 (define-public all-invisible           #(#f #f #f))
-(define-public (inherit-x-parent-visibility grob)
-  (let ((parent (ly:grob-parent grob X)))
-    (ly:grob-property parent 'break-visibility all-invisible)))
-(define-public (inherit-y-parent-visibility grob)
-  (let ((parent (ly:grob-parent grob X)))
-    (ly:grob-property parent 'break-visibility)))
-
-
-(define-public spanbar-begin-of-line-invisible #(#t #f #f))
-
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; neighbor-interface routines
@@ -364,7 +483,7 @@ and duration-log @var{log}."
 (define-public (shift-right-at-line-begin g)
   "Shift an item to the right, but only at the start of the line."
   (if (and (ly:item? g)
-          (equal? (ly:item-break-dir g) RIGHT))
+           (equal? (ly:item-break-dir g) RIGHT))
       (ly:grob-translate-axis! g 3.5 X)))
 
 (define-public (pure-from-neighbor-interface::extra-spacing-height-at-beginning-of-line grob)
@@ -373,22 +492,43 @@ and duration-log @var{log}."
       (cons -0.1 0.1)))
 
 (define-public (pure-from-neighbor-interface::extra-spacing-height grob)
-  (let* ((height (ly:grob-pure-height grob grob 0 10000000))
+  (let* ((height (ly:grob-pure-height grob grob 0 INFINITY-INT))
          (from-neighbors (interval-union
-                            height
-                            (ly:axis-group-interface::pure-height
-                              grob
-                              0
-                              10000000))))
+                          height
+                          (ly:axis-group-interface::pure-height
+                           grob
+                           0
+                           INFINITY-INT))))
     (coord-operation - from-neighbors height)))
 
+;; If there are neighbors, we place the height at their midpoint
+;; to avoid protrusion of this pure height out of the vertical
+;; axis group on either side.  This will minimize the impact of the
+;; grob on pure minimum translations.
+
+;; TODO - there is a double call to axis-group-interface::pure-height
+;; here and then in the extra-spacing-height function above. Can/should this
+;; be rolled into one?
+(define-public (pure-from-neighbor-interface::pure-height grob beg end)
+  (let* ((height (ly:axis-group-interface::pure-height
+                  grob
+                  0
+                  INFINITY-INT))
+         (c (interval-center height)))
+    (if (interval-empty? height) empty-interval (cons c c))))
+
+;; Minimizes the impact of the height on vertical spacing while allowing
+;; it to appear in horizontal skylines of paper columns if necessary.
+(define-public pure-from-neighbor-interface::height-if-pure
+  (ly:make-unpure-pure-container #f pure-from-neighbor-interface::pure-height))
+
 (define-public (pure-from-neighbor-interface::account-for-span-bar grob)
   (let* ((esh (pure-from-neighbor-interface::extra-spacing-height grob))
          (hsb (ly:grob-property grob 'has-span-bar))
          (ii (interval-intersection esh (cons -1.01 1.01))))
     (if (pair? hsb)
         (cons (car (if (and (car hsb)
-                       (ly:grob-property grob 'allow-span-bar))
+                            (ly:grob-property grob 'allow-span-bar))
                        esh ii))
               (cdr (if (cdr hsb) esh ii)))
         ii)))
@@ -397,8 +537,8 @@ and duration-log @var{log}."
   (let ((esh (pure-from-neighbor-interface::extra-spacing-height grob))
         (to-staff (coord-operation -
                                    (interval-widen
-                                     '(0 . 0)
-                                     (ly:staff-symbol-staff-radius grob))
+                                    '(0 . 0)
+                                    (ly:staff-symbol-staff-radius grob))
                                    (ly:grob::stencil-height grob))))
     (interval-union esh to-staff)))
 
@@ -416,8 +556,8 @@ and duration-log @var{log}."
   (let ((ev (event-cause grob)))
 
     (format #f "~a:~a"
-           (ly:event-property ev 'denominator)
-           (ly:event-property ev 'numerator))))
+            (ly:event-property ev 'denominator)
+            (ly:event-property ev 'numerator))))
 
 ;; a formatter function, which is simply a wrapper around an existing
 ;; tuplet formatter function. It takes the value returned by the given
@@ -426,21 +566,21 @@ and duration-log @var{log}."
   (let ((txt (if function (function grob) #f)))
 
     (if txt
-       (markup txt #:fontsize -5 #:note note UP)
-       (markup #:fontsize -5 #:note note UP))))
+        (markup txt #:fontsize -5 #:note note UP)
+        (markup #:fontsize -5 #:note note UP))))
 
 ;; Print a tuplet denominator with a different number than the one derived from
 ;; the actual tuplet fraction
 (define-public ((tuplet-number::non-default-tuplet-denominator-text denominator)
-               grob)
+                grob)
   (number->string (if denominator
-                     denominator
-                     (ly:event-property (event-cause grob) 'denominator))))
+                      denominator
+                      (ly:event-property (event-cause grob) 'denominator))))
 
 ;; Print a tuplet fraction with different numbers than the ones derived from
 ;; the actual tuplet fraction
 (define-public ((tuplet-number::non-default-tuplet-fraction-text
-                denominator numerator) grob)
+                 denominator numerator) grob)
   (let* ((ev (event-cause grob))
          (den (if denominator denominator (ly:event-property ev 'denominator)))
          (num (if numerator numerator (ly:event-property ev 'numerator))))
@@ -450,7 +590,7 @@ and duration-log @var{log}."
 ;; Print a tuplet fraction with note durations appended to the numerator and the
 ;; denominator
 (define-public ((tuplet-number::fraction-with-notes
-                denominatornote numeratornote) grob)
+                 denominatornote numeratornote) grob)
   (let* ((ev (event-cause grob))
          (denominator (ly:event-property ev 'denominator))
          (numerator (ly:event-property ev 'numerator)))
@@ -461,17 +601,17 @@ and duration-log @var{log}."
 ;; Print a tuplet fraction with note durations appended to the numerator and the
 ;; denominator
 (define-public ((tuplet-number::non-default-fraction-with-notes
-                denominator denominatornote numerator numeratornote) grob)
+                 denominator denominatornote numerator numeratornote) grob)
   (let* ((ev (event-cause grob))
          (den (if denominator denominator (ly:event-property ev 'denominator)))
          (num (if numerator numerator (ly:event-property ev 'numerator))))
 
     (make-concat-markup (list
-                        (make-simple-markup (format #f "~a" den))
-                        (markup #:fontsize -5 #:note denominatornote UP)
-                        (make-simple-markup " : ")
-                        (make-simple-markup (format #f "~a" num))
-                        (markup #:fontsize -5 #:note numeratornote UP)))))
+                         (make-simple-markup (format #f "~a" den))
+                         (markup #:fontsize -5 #:note denominatornote UP)
+                         (make-simple-markup " : ")
+                         (make-simple-markup (format #f "~a" num))
+                         (markup #:fontsize -5 #:note numeratornote UP)))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -480,12 +620,12 @@ and duration-log @var{log}."
 (define-public (color? x)
   (and (list? x)
        (= 3 (length x))
-       (apply eq? #t (map number? x))
-       (apply eq? #t (map (lambda (y) (<= 0 y 1)) x))))
+       (every number? x)
+       (every (lambda (y) (<= 0 y 1)) x)))
 
 (define-public (rgb-color r g b) (list r g b))
 
-; predefined colors
+;; predefined colors
 (define-public black       '(0.0 0.0 0.0))
 (define-public white       '(1.0 1.0 1.0))
 (define-public red         '(1.0 0.0 0.0))
@@ -507,47 +647,45 @@ and duration-log @var{log}."
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; key signature
 
-(define-public (key-signature-interface::alteration-position step alter
-                                                            c0-position)
-  ;; TODO: memoize - this is mostly constant.
-
-  ;; fes, ges, as and bes typeset in lower octave
-  (define FLAT_TOP_PITCH 2)
-
-  ;; ais and bis typeset in lower octave
-  (define SHARP_TOP_PITCH 4)
-
+(define-public (key-signature-interface::alteration-positions
+                entry c0-position grob)
+  (let ((step (car entry))
+        (alter (cdr entry)))
+    (if (pair? step)
+        (list (+ (cdr step) (* (car step) 7) c0-position))
+        (let* ((c-position (modulo c0-position 7))
+               (positions
+                (if (< alter 0)
+                    ;; See (flat|sharp)-positions in define-grob-properties.scm
+                    (ly:grob-property grob 'flat-positions '(3))
+                    (ly:grob-property grob 'sharp-positions '(3))))
+               (p (list-ref positions
+                            (if (< c-position (length positions))
+                                c-position 0)))
+               (max-position (if (pair? p) (cdr p) p))
+               (min-position (if (pair? p) (car p) (- max-position 6)))
+               (first-position (+ (modulo (- (+ c-position step)
+                                             min-position)
+                                          7)
+                                  min-position)))
+          (define (prepend x l) (if (> x max-position)
+                                    l
+                                    (prepend (+ x 7) (cons x l))))
+          (prepend first-position '())))))
+
+(define-public (key-signature-interface::alteration-position
+                step alter c0-position)
+;; Deprecated.  Not a documented interface, and no longer used in LilyPond,
+;; but needed for a popular file, LilyJAZZ.ily for version 2.16
   (if (pair? step)
-      (+ (cdr step) (* (car step) 7) c0-position)
-      (let* ((from-bottom-pos (modulo (+ 4 49 c0-position) 7))
-            (p step)
-            (c0 (- from-bottom-pos 4)))
-
-       (if
-        (or (and (< alter 0)
-                 (or (> p FLAT_TOP_PITCH) (> (+ p c0) 4)) (> (+ p c0) 1))
-            (and (> alter 0)
-                 (or (> p SHARP_TOP_PITCH) (> (+ p c0) 5)) (> (+ p c0) 2)))
-
-        ;; Typeset below c_position
-        (set! p (- p 7)))
-
-       ;; Provide for the four cases in which there's a glitch
-       ;; it's a hack, but probably not worth
-       ;; the effort of finding a nicer solution.
-       ;; --dl.
-       (cond
-        ((and (= c0 2) (= p 3) (> alter 0))
-         (set! p (- p 7)))
-        ((and (= c0 -3) (= p -1) (> alter 0))
-         (set! p (+ p 7)))
-        ((and (= c0 -4) (= p -1) (< alter 0))
-         (set! p (+ p 7)))
-        ((and (= c0 -2) (= p -3) (< alter 0))
-         (set! p (+ p 7))))
-
-       (+ c0 p))))
-
+    (+ (cdr step) (* (car step) 7) c0-position)
+    (let* ((c-pos (modulo c0-position 7))
+           (hi (list-ref
+                 (if (< alter 0)
+                   '(2 3 4 2 1 2 1) ; position of highest flat
+                   '(4 5 4 2 3 2 3)); position of highest sharp
+                 c-pos)))
+      (- hi (modulo (- hi (+ c-pos step)) 7)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; annotations
@@ -564,9 +702,9 @@ and duration-log @var{log}."
                 idx
                 (- n 1))))
   (markup #:tiny (helper '("*" "†" "‡" "§" "¶")
-                          ""
-                          (remainder int 5)
-                          (+ 1 (quotient int 5)))))
+                         ""
+                         (remainder int 5)
+                         (+ 1 (quotient int 5)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; accidentals
@@ -574,6 +712,15 @@ and duration-log @var{log}."
 (define-public (accidental-interface::calc-alteration grob)
   (ly:pitch-alteration (ly:event-property (event-cause grob) 'pitch)))
 
+(define-public (accidental-interface::glyph-name grob)
+  (assoc-get (ly:grob-property grob 'alteration)
+             standard-alteration-glyph-name-alist))
+
+(define-public accidental-interface::height
+  (ly:make-unpure-pure-container
+   ly:accidental-interface::height
+   ly:accidental-interface::pure-height))
+
 (define-public cancellation-glyph-name-alist
   '((0 . "accidentals.natural")))
 
@@ -630,8 +777,8 @@ and duration-log @var{log}."
     (1/2 . "accidentals.mensural1")))
 
 (define-public alteration-kievan-glyph-name-alist
- '((-1/2 . "accidentals.kievanM1")
-   (1/2 . "accidentals.kievan1")))
 '((-1/2 . "accidentals.kievanM1")
+    (1/2 . "accidentals.kievan1")))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; * Pitch Trill Heads
@@ -639,8 +786,8 @@ and duration-log @var{log}."
 
 (define-public (parentheses-item::calc-parenthesis-stencils grob)
   (let* ((font (ly:grob-default-font grob))
-        (lp (ly:font-get-glyph font "accidentals.leftparen"))
-        (rp (ly:font-get-glyph font "accidentals.rightparen")))
+         (lp (ly:font-get-glyph font "accidentals.leftparen"))
+         (rp (ly:font-get-glyph font "accidentals.rightparen")))
 
     (list lp rp)))
 
@@ -651,26 +798,26 @@ and duration-log @var{log}."
          (width 0.5) ; should it be a property?
          (angularity 1.5)  ; makes angle brackets
          (white-padding 0.1) ; should it be a property?
-        (lp (ly:stencil-aligned-to
-                 (ly:stencil-aligned-to
-                   (make-parenthesis-stencil y-extent
-                                             half-thickness
-                                             (- width)
-                                             angularity)
-                   Y CENTER)
-                 X RIGHT))
+         (lp (ly:stencil-aligned-to
+              (ly:stencil-aligned-to
+               (make-parenthesis-stencil y-extent
+                                         half-thickness
+                                         (- width)
+                                         angularity)
+               Y CENTER)
+              X RIGHT))
          (lp-x-extent
-           (interval-widen (ly:stencil-extent lp X) white-padding))
-        (rp (ly:stencil-aligned-to
-                 (ly:stencil-aligned-to
-                   (make-parenthesis-stencil y-extent
-                                             half-thickness
-                                             width
-                                             angularity)
-                   Y CENTER)
-                 X LEFT))
-          (rp-x-extent
-            (interval-widen (ly:stencil-extent rp X) white-padding)))
+          (interval-widen (ly:stencil-extent lp X) white-padding))
+         (rp (ly:stencil-aligned-to
+              (ly:stencil-aligned-to
+               (make-parenthesis-stencil y-extent
+                                         half-thickness
+                                         width
+                                         angularity)
+               Y CENTER)
+              X LEFT))
+         (rp-x-extent
+          (interval-widen (ly:stencil-extent rp X) white-padding)))
     (set! lp (ly:make-stencil (ly:stencil-expr lp)
                               lp-x-extent
                               (ly:stencil-extent lp Y)))
@@ -682,14 +829,14 @@ and duration-log @var{log}."
 
 (define (parenthesize-elements grob . rest)
   (let* ((refp (if (null? rest)
-                  grob
-                  (car rest)))
-        (elts (ly:grob-object grob 'elements))
-        (x-ext (ly:relative-group-extent elts refp X))
-        (stencils (ly:grob-property grob 'stencils))
-        (lp (car stencils))
-        (rp (cadr stencils))
-        (padding (ly:grob-property grob 'padding 0.1)))
+                   grob
+                   (car rest)))
+         (elts (ly:grob-object grob 'elements))
+         (x-ext (ly:relative-group-extent elts refp X))
+         (stencils (ly:grob-property grob 'stencils))
+         (lp (car stencils))
+         (rp (cadr stencils))
+         (padding (ly:grob-property grob 'padding 0.1)))
 
     (ly:stencil-add
      (ly:stencil-translate-axis lp (- (car x-ext) padding) X)
@@ -698,11 +845,11 @@ and duration-log @var{log}."
 
 (define-public (parentheses-item::print me)
   (let* ((elts (ly:grob-object me 'elements))
-        (y-ref (ly:grob-common-refpoint-of-array me elts Y))
-        (x-ref (ly:grob-common-refpoint-of-array me elts X))
-        (stencil (parenthesize-elements me x-ref))
-        (elt-y-ext (ly:relative-group-extent elts y-ref Y))
-        (y-center (interval-center elt-y-ext)))
+         (y-ref (ly:grob-common-refpoint-of-array me elts Y))
+         (x-ref (ly:grob-common-refpoint-of-array me elts X))
+         (stencil (parenthesize-elements me x-ref))
+         (elt-y-ext (ly:relative-group-extent elts y-ref Y))
+         (y-center (interval-center elt-y-ext)))
 
     (ly:stencil-translate
      stencil
@@ -711,6 +858,20 @@ and duration-log @var{log}."
       (- y-center (ly:grob-relative-coordinate me y-ref Y))))))
 
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; offset callbacks
+
+(define-public (pure-chain-offset-callback grob start end prev-offset)
+  "Sometimes, a chained offset callback is unpure and there is
+   no way to write a pure function that estimates its behavior.
+   In this case, we use a pure equivalent that will simply pass
+   the previous calculated offset value."
+  prev-offset)
+
+(define-public (scale-by-font-size x)
+  (ly:make-unpure-pure-container
+    (lambda (grob)
+      (* x (magstep (ly:grob-property grob 'font-size 0))))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
@@ -732,58 +893,57 @@ and duration-log @var{log}."
     (< (abs (- a b)) 0.01))
 
   (let* ((delta-y (* 0.5 (ly:grob-property spanner 'delta-position)))
-        (left-span (ly:spanner-bound spanner LEFT))
-        (dots (if (and (grob::has-interface left-span 'note-head-interface)
-                       (ly:grob? (ly:grob-object left-span 'dot)))
-                  (ly:grob-object left-span 'dot) #f))
-
-        (right-span (ly:spanner-bound spanner RIGHT))
-        (thickness (* (ly:grob-property spanner 'thickness)
-                      (ly:output-def-lookup (ly:grob-layout spanner)
-                                            'line-thickness)))
-        (padding (ly:grob-property spanner 'padding 0.5))
-        (common (ly:grob-common-refpoint right-span
-                                         (ly:grob-common-refpoint spanner
-                                                                  left-span X)
-                                         X))
-        (common-y (ly:grob-common-refpoint spanner left-span Y))
-        (minimum-length (ly:grob-property spanner 'minimum-length 0.5))
-
-        (left-x (+ padding
-                   (max
-                    (interval-end (ly:grob-robust-relative-extent
-                                   left-span common X))
-                    (if
-                     (and dots
-                          (close
-                           (ly:grob-relative-coordinate dots common-y Y)
-                           (ly:grob-relative-coordinate spanner common-y Y)))
-                     (interval-end
-                      (ly:grob-robust-relative-extent dots common X))
-                     ;; TODO: use real infinity constant.
-                     -10000))))
-        (right-x (max (- (interval-start
-                          (ly:grob-robust-relative-extent right-span common X))
-                         padding)
-                      (+ left-x minimum-length)))
-        (self-x (ly:grob-relative-coordinate spanner common X))
-        (dx (- right-x left-x))
-        (exp (list 'path thickness
-                   `(quote
-                     (rmoveto
-                      ,(- left-x self-x) 0
-
-                      rcurveto
-                      ,(/ dx 3)
-                      0
-                      ,dx ,(* 0.66 delta-y)
-                      ,dx ,delta-y)))))
+         (left-span (ly:spanner-bound spanner LEFT))
+         (dots (if (and (grob::has-interface left-span 'note-head-interface)
+                        (ly:grob? (ly:grob-object left-span 'dot)))
+                   (ly:grob-object left-span 'dot) #f))
+
+         (right-span (ly:spanner-bound spanner RIGHT))
+         (thickness (* (ly:grob-property spanner 'thickness)
+                       (ly:output-def-lookup (ly:grob-layout spanner)
+                                             'line-thickness)))
+         (padding (ly:grob-property spanner 'padding 0.5))
+         (common (ly:grob-common-refpoint right-span
+                                          (ly:grob-common-refpoint spanner
+                                                                   left-span X)
+                                          X))
+         (common-y (ly:grob-common-refpoint spanner left-span Y))
+         (minimum-length (ly:grob-property spanner 'minimum-length 0.5))
+
+         (left-x (+ padding
+                    (max
+                     (interval-end (ly:grob-robust-relative-extent
+                                    left-span common X))
+                     (if
+                      (and dots
+                           (close
+                            (ly:grob-relative-coordinate dots common-y Y)
+                            (ly:grob-relative-coordinate spanner common-y Y)))
+                      (interval-end
+                       (ly:grob-robust-relative-extent dots common X))
+                      (- INFINITY-INT)))))
+         (right-x (max (- (interval-start
+                           (ly:grob-robust-relative-extent right-span common X))
+                          padding)
+                       (+ left-x minimum-length)))
+         (self-x (ly:grob-relative-coordinate spanner common X))
+         (dx (- right-x left-x))
+         (exp (list 'path thickness
+                    `(quote
+                      (rmoveto
+                       ,(- left-x self-x) 0
+
+                       rcurveto
+                       ,(/ dx 3)
+                       0
+                       ,dx ,(* 0.66 delta-y)
+                       ,dx ,delta-y)))))
 
     (ly:make-stencil
      exp
      (cons (- left-x self-x) (- right-x self-x))
      (cons (min 0 delta-y)
-          (max 0 delta-y)))))
+           (max 0 delta-y)))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -791,48 +951,45 @@ and duration-log @var{log}."
 
 (define-public (grace-spacing::calc-shortest-duration grob)
   (let* ((cols (ly:grob-object grob 'columns))
-        (get-difference
-         (lambda (idx)
-           (ly:moment-sub (ly:grob-property
-                           (ly:grob-array-ref cols (1+ idx)) 'when)
-                          (ly:grob-property
-                           (ly:grob-array-ref cols idx) 'when))))
-
-        (moment-min (lambda (x y)
-                      (cond
-                       ((and x y)
-                        (if (ly:moment<? x y)
-                            x
-                            y))
-                       (x x)
-                       (y y)))))
+         (get-difference
+          (lambda (idx)
+            (ly:moment-sub (ly:grob-property
+                            (ly:grob-array-ref cols (1+ idx)) 'when)
+                           (ly:grob-property
+                            (ly:grob-array-ref cols idx) 'when))))
+
+         (moment-min (lambda (x y)
+                       (cond
+                        ((and x y)
+                         (if (ly:moment<? x y)
+                             x
+                             y))
+                        (x x)
+                        (y y)))))
 
     (fold moment-min #f (map get-difference
-                            (iota (1- (ly:grob-array-length cols)))))))
+                             (iota (1- (ly:grob-array-length cols)))))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; fingering
 
 (define-public (fingering::calc-text grob)
-  (let* ((event (event-cause grob))
-        (digit (ly:event-property event 'digit)))
-
-    (number->string digit 10)))
+  (let ((event (event-cause grob)))
+    (or (ly:event-property event 'text #f)
+        (number->string (ly:event-property event 'digit) 10))))
 
 (define-public (string-number::calc-text grob)
-  (let ((digit (ly:event-property (event-cause grob) 'string-number)))
-
-    (number->string digit 10)))
+  (let ((event (event-cause grob)))
+    (or (ly:event-property event 'text #f)
+        (number->string (ly:event-property event 'string-number) 10))))
 
 (define-public (stroke-finger::calc-text grob)
-  (let* ((digit (ly:event-property (event-cause grob) 'digit))
-        (text (ly:event-property (event-cause grob) 'text)))
-
-    (if (string? text)
-       text
-       (vector-ref (ly:grob-property grob 'digit-names)
-                   (1- (max (min 5 digit) 1))))))
+  (let ((event (event-cause grob)))
+    (or (ly:event-property event 'text #f)
+        (vector-ref (ly:grob-property grob 'digit-names)
+                    (1- (max 1
+                             (min 5 (ly:event-property event 'digit))))))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -851,19 +1008,84 @@ changing @code{'attach-dir} and @code{'padding}.  Reads the
 between the two text elements."
   (let ((left-bound (ly:spanner-bound grob LEFT)))
     (if (grob::has-interface left-bound 'dynamic-text-interface)
-       (let* ((details (ly:grob-property grob 'bound-details))
-              (left-details (ly:assoc-get 'left details))
-              (my-padding (ly:assoc-get 'padding left-details))
-              (script-padding (ly:grob-property left-bound 'right-padding 0)))
-
-         (and (number? my-padding)
-              (ly:grob-set-nested-property! grob
-                                            '(bound-details left attach-dir)
-                                            RIGHT)
-              (ly:grob-set-nested-property! grob
-                                            '(bound-details left padding)
-                                            (+ my-padding script-padding)))))))
-
+        (let* ((details (ly:grob-property grob 'bound-details))
+               (left-details (ly:assoc-get 'left details))
+               (my-padding (ly:assoc-get 'padding left-details))
+               (script-padding (ly:grob-property left-bound 'right-padding 0)))
+
+          (and (number? my-padding)
+               (ly:grob-set-nested-property! grob
+                                             '(bound-details left attach-dir)
+                                             RIGHT)
+               (ly:grob-set-nested-property! grob
+                                             '(bound-details left padding)
+                                             (+ my-padding script-padding)))))))
+
+(define-public ((elbowed-hairpin coords mirrored?) grob)
+  "Create hairpin based on a list of @var{coords} in @code{(cons x y)}
+form.  @code{x} is the portion of the width consumed for a given line
+and @code{y} is the portion of the height.  For example,
+@code{'((0.3 . 0.7) (0.8 . 0.9) (1.0 . 1.0))} means that at the point
+where the hairpin has consumed 30% of its width, it must
+be at 70% of its height.  Once it is to 80% width, it
+must be at 90% height.  It finishes at
+100% width and 100% height.  @var{mirrored?} indicates if the hairpin
+is mirrored over the Y-axis or if just the upper part is drawn.
+Returns a function that accepts a hairpin grob as an argument
+and draws the stencil based on its coordinates.
+@lilypond[verbatim,quote]
+#(define simple-hairpin
+  (elbowed-hairpin '((1.0 . 1.0)) #t))
+
+\\relative c' {
+  \\override Hairpin #'stencil = #simple-hairpin
+  a\\p\\< a a a\\f
+}
+@end lilypond
+"
+  (define (pair-to-list pair)
+    (list (car pair) (cdr pair)))
+  (define (normalize-coords goods x y)
+    (map
+     (lambda (coord)
+       (cons (* x (car coord)) (* y (cdr coord))))
+     goods))
+  (define (my-c-p-s points thick decresc?)
+    (make-connected-path-stencil
+     points
+     thick
+     (if decresc? -1.0 1.0)
+     1.0
+     #f
+     #f))
+  ;; outer let to trigger suicide
+  (let ((sten (ly:hairpin::print grob)))
+    (if (grob::is-live? grob)
+        (let* ((decresc? (eq? (ly:grob-property grob 'grow-direction) LEFT))
+               (thick (ly:grob-property grob 'thickness 0.1))
+               (thick (* thick (layout-line-thickness grob)))
+               (xex (ly:stencil-extent sten X))
+               (lenx (interval-length xex))
+               (yex (ly:stencil-extent sten Y))
+               (leny (interval-length yex))
+               (xtrans (+ (car xex) (if decresc? lenx 0)))
+               (ytrans (car yex))
+               (uplist (map pair-to-list
+                            (normalize-coords coords lenx (/ leny 2))))
+               (downlist (map pair-to-list
+                              (normalize-coords coords lenx (/ leny -2)))))
+          (ly:stencil-translate
+           (ly:stencil-add
+            (my-c-p-s uplist thick decresc?)
+            (if mirrored? (my-c-p-s downlist thick decresc?) empty-stencil))
+           (cons xtrans ytrans)))
+        '())))
+
+(define-public flared-hairpin
+  (elbowed-hairpin '((0.95 . 0.4) (1.0 . 1.0)) #t))
+
+(define-public constante-hairpin
+  (elbowed-hairpin '((1.0 . 0.0) (1.0 . 1.0)) #f))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; lyrics
@@ -874,12 +1096,25 @@ between the two text elements."
   (let ((text (ly:grob-property grob 'text)))
 
     (grob-interpret-markup grob (if (string? text)
-                                   (make-tied-lyric-markup text)
-                                   text))))
+                                    (make-tied-lyric-markup text)
+                                    text))))
 
 (define-public ((grob::calc-property-by-copy prop) grob)
   (ly:event-property (event-cause grob) prop))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; general inheritance
+
+(define-public ((grob::inherit-parent-property axis property . default) grob)
+  "@var{grob} callback generator for inheriting a @var{property} from
+an @var{axis} parent, defaulting to @var{default} if there is no
+parent or the parent has no setting."
+  (let ((parent (ly:grob-parent grob axis)))
+    (cond
+     ((ly:grob? parent)
+      (apply ly:grob-property parent property default))
+     ((pair? default) (car default))
+     (else '()))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; fret boards
@@ -891,16 +1126,24 @@ between the two text elements."
     (ly:grob-property grob 'dot-placement-list))))
 
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; slurs
+
+(define-public slur::height
+  (ly:make-unpure-pure-container
+   ly:slur::height
+   ly:slur::pure-height))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; scripts
 
 (define-public (script-interface::calc-x-offset grob)
   (ly:grob-property grob 'positioning-done)
   (let* ((shift (ly:grob-property grob 'toward-stem-shift 0.0))
-        (note-head-location
-         (ly:self-alignment-interface::centered-on-x-parent grob))
-        (note-head-grob (ly:grob-parent grob X))
-        (stem-grob (ly:grob-object note-head-grob 'stem)))
+         (note-head-location
+          (ly:self-alignment-interface::centered-on-x-parent grob))
+         (note-head-grob (ly:grob-parent grob X))
+         (stem-grob (ly:grob-object note-head-grob 'stem)))
 
     (+ note-head-location
        ;; If the property 'toward-stem-shift is defined and the script
@@ -908,15 +1151,15 @@ between the two text elements."
        ;; Since scripts can also be over skips, we need to check whether
        ;; the grob has a stem at all.
        (if (ly:grob? stem-grob)
-          (let ((dir1 (ly:grob-property grob 'direction))
-                (dir2 (ly:grob-property stem-grob 'direction)))
-            (if (equal? dir1 dir2)
-                (let* ((common-refp (ly:grob-common-refpoint grob stem-grob X))
-                       (stem-location
-                        (ly:grob-relative-coordinate stem-grob common-refp X)))
-                  (* shift (- stem-location note-head-location)))
-                0.0))
-          0.0))))
+           (let ((dir1 (ly:grob-property grob 'direction))
+                 (dir2 (ly:grob-property stem-grob 'direction)))
+             (if (equal? dir1 dir2)
+                 (let* ((common-refp (ly:grob-common-refpoint grob stem-grob X))
+                        (stem-location
+                         (ly:grob-relative-coordinate stem-grob common-refp X)))
+                   (* shift (- stem-location note-head-location)))
+                 0.0))
+           0.0))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -924,48 +1167,48 @@ between the two text elements."
 
 (define-public (system-start-text::print grob)
   (let* ((left-bound (ly:spanner-bound grob LEFT))
-        (left-mom (ly:grob-property left-bound 'when))
-        (name (if (moment<=? left-mom ZERO-MOMENT)
-                  (ly:grob-property grob 'long-text)
-                  (ly:grob-property grob 'text))))
+         (left-mom (ly:grob-property left-bound 'when))
+         (name (if (moment<=? left-mom ZERO-MOMENT)
+                   (ly:grob-property grob 'long-text)
+                   (ly:grob-property grob 'text))))
 
     (if (and (markup? name)
-            (!= (ly:item-break-dir left-bound) CENTER))
+             (!= (ly:item-break-dir left-bound) CENTER))
 
-       (grob-interpret-markup grob name)
-       (ly:grob-suicide! grob))))
+        (grob-interpret-markup grob name)
+        (ly:grob-suicide! grob))))
 
 (define-public (system-start-text::calc-x-offset grob)
   (let* ((left-bound (ly:spanner-bound grob LEFT))
-        (left-mom (ly:grob-property left-bound 'when))
-        (layout (ly:grob-layout grob))
-        (indent (ly:output-def-lookup layout
-                                      (if (moment<=? left-mom ZERO-MOMENT)
-                                          'indent
-                                          'short-indent)
-                                      0.0))
-        (system (ly:grob-system grob))
-        (my-extent (ly:grob-extent grob system X))
-        (elements (ly:grob-object system 'elements))
-        (common (ly:grob-common-refpoint-of-array system elements X))
-        (total-ext empty-interval)
-        (align-x (ly:grob-property grob 'self-alignment-X 0))
-        (padding (min 0 (- (interval-length my-extent) indent)))
-        (right-padding (- padding
-                          (/ (* padding (1+ align-x)) 2))))
+         (left-mom (ly:grob-property left-bound 'when))
+         (layout (ly:grob-layout grob))
+         (indent (ly:output-def-lookup layout
+                                       (if (moment<=? left-mom ZERO-MOMENT)
+                                           'indent
+                                           'short-indent)
+                                       0.0))
+         (system (ly:grob-system grob))
+         (my-extent (ly:grob-extent grob system X))
+         (elements (ly:grob-object system 'elements))
+         (common (ly:grob-common-refpoint-of-array system elements X))
+         (total-ext empty-interval)
+         (align-x (ly:grob-property grob 'self-alignment-X 0))
+         (padding (min 0 (- (interval-length my-extent) indent)))
+         (right-padding (- padding
+                           (/ (* padding (1+ align-x)) 2))))
 
     ;; compensate for the variation in delimiter extents by
     ;; calculating an X-offset correction based on united extents
     ;; of all delimiters in this system
     (let unite-delims ((l (ly:grob-array-length elements)))
       (if (> l 0)
-         (let ((elt (ly:grob-array-ref elements (1- l))))
+          (let ((elt (ly:grob-array-ref elements (1- l))))
 
-           (if (grob::has-interface elt 'system-start-delimiter-interface)
-               (let ((dims (ly:grob-extent elt common X)))
-                 (if (interval-sane? dims)
-                     (set! total-ext (interval-union total-ext dims)))))
-           (unite-delims (1- l)))))
+            (if (grob::has-interface elt 'system-start-delimiter-interface)
+                (let ((dims (ly:grob-extent elt common X)))
+                  (if (interval-sane? dims)
+                      (set! total-ext (interval-union total-ext dims)))))
+            (unite-delims (1- l)))))
 
     (+
      (ly:side-position-interface::x-aligned-side grob)
@@ -981,64 +1224,99 @@ between the two text elements."
                (ly:grob-array->list elements))))
 
   (let* ((left-bound (ly:spanner-bound grob LEFT))
-        (live-elts (live-elements-list grob))
-        (system (ly:grob-system grob))
-        (extent empty-interval))
+         (live-elts (live-elements-list grob))
+         (system (ly:grob-system grob))
+         (extent empty-interval))
 
     (if (and (pair? live-elts)
-            (interval-sane? (ly:grob-extent grob system Y)))
-       (let get-extent ((lst live-elts))
-         (if (pair? lst)
-             (let ((axis-group (car lst)))
-
-               (if (and (ly:spanner? axis-group)
-                        (equal? (ly:spanner-bound axis-group LEFT)
-                                left-bound))
-                   (set! extent (add-point extent
-                                           (ly:grob-relative-coordinate
-                                            axis-group system Y))))
-               (get-extent (cdr lst)))))
-       ;; no live axis group(s) for this instrument name -> remove from system
-       (ly:grob-suicide! grob))
+             (interval-sane? (ly:grob-extent grob system Y)))
+        (let get-extent ((lst live-elts))
+          (if (pair? lst)
+              (let ((axis-group (car lst)))
+
+                (if (and (ly:spanner? axis-group)
+                         (equal? (ly:spanner-bound axis-group LEFT)
+                                 left-bound))
+                    (set! extent (add-point extent
+                                            (ly:grob-relative-coordinate
+                                             axis-group system Y))))
+                (get-extent (cdr lst)))))
+        ;; no live axis group(s) for this instrument name -> remove from system
+        (ly:grob-suicide! grob))
 
     (+
      (ly:self-alignment-interface::y-aligned-on-self grob)
      (interval-center extent))))
 
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; axis group interface
+
+(define-public axis-group-interface::height
+  (ly:make-unpure-pure-container
+   ly:axis-group-interface::height
+   ly:axis-group-interface::pure-height))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; ambitus
 
+;; Calculate the gaps between ambitus heads and ends of ambitus line.
+;; Start by determining desired length of the ambitus line (based on
+;; length-fraction property), calc gap from that and make sure that
+;; it doesn't exceed maximum allowed value.
+
+(define-public (ambitus-line::calc-gap grob)
+  (let ((heads (ly:grob-object grob 'note-heads)))
+
+  (if (and (ly:grob-array? heads)
+             (= (ly:grob-array-length heads) 2))
+      (let* ((common (ly:grob-common-refpoint-of-array grob heads Y))
+              (head-down (ly:grob-array-ref heads 0))
+              (head-up (ly:grob-array-ref heads 1))
+              (fraction (ly:grob-property grob 'length-fraction 0.7))
+              (max-gap (ly:grob-property grob 'maximum-gap 0.45))
+              ;; distance between noteheads:
+              (distance (- (interval-start (ly:grob-extent head-up common Y))
+                          (interval-end (ly:grob-extent head-down common Y))))
+              (gap (* 0.5 distance (- 1 fraction))))
+
+         (min gap max-gap))
+      0)))
+
+;; Print a line connecting ambitus heads:
+
 (define-public (ambitus::print grob)
   (let ((heads (ly:grob-object grob 'note-heads)))
 
     (if (and (ly:grob-array? heads)
-            (= (ly:grob-array-length heads) 2))
-       (let* ((common (ly:grob-common-refpoint-of-array grob heads Y))
-              (head-down (ly:grob-array-ref heads 0))
-              (head-up (ly:grob-array-ref heads 1))
-              (gap (ly:grob-property grob 'gap 0.35))
-              (point-min (+ (interval-end (ly:grob-extent head-down common Y))
-                            gap))
-              (point-max (- (interval-start (ly:grob-extent head-up common Y))
-                            gap)))
-
-         (if (< point-min point-max)
-             (let* ((layout (ly:grob-layout grob))
-                    (line-thick (ly:output-def-lookup layout 'line-thickness))
-                    (blot (ly:output-def-lookup layout 'blot-diameter))
-                    (grob-thick (ly:grob-property grob 'thickness 2))
-                    (width (* line-thick grob-thick))
-                    (x-ext (symmetric-interval (/ width 2)))
-                    (y-ext (cons point-min point-max))
-                    (line (ly:round-filled-box x-ext y-ext blot))
-                    (y-coord (ly:grob-relative-coordinate grob common Y)))
-
-               (ly:stencil-translate-axis line (- y-coord) Y))
-             empty-stencil))
-       (begin
-         (ly:grob-suicide! grob)
-         (list)))))
+             (= (ly:grob-array-length heads) 2))
+        (let* ((common (ly:grob-common-refpoint-of-array grob heads Y))
+               (head-down (ly:grob-array-ref heads 0))
+               (head-up (ly:grob-array-ref heads 1))
+               ;; The value used when 'gap' property cannot be read is small
+               ;; to make sure that ambitus of a fifth will have a visible line.
+               (gap (ly:grob-property grob 'gap 0.25))
+               (point-min (+ (interval-end (ly:grob-extent head-down common Y))
+                             gap))
+               (point-max (- (interval-start (ly:grob-extent head-up common Y))
+                             gap)))
+
+          (if (< (+ point-min 0.1) point-max) ; don't print lines shorter than 0.1ss
+              (let* ((layout (ly:grob-layout grob))
+                     (line-thick (ly:output-def-lookup layout 'line-thickness))
+                     (blot (ly:output-def-lookup layout 'blot-diameter))
+                     (grob-thick (ly:grob-property grob 'thickness 2))
+                     (width (* line-thick grob-thick))
+                     (x-ext (symmetric-interval (/ width 2)))
+                     (y-ext (cons point-min point-max))
+                     (line (ly:round-filled-box x-ext y-ext blot))
+                     (y-coord (ly:grob-relative-coordinate grob common Y)))
+
+                (ly:stencil-translate-axis line (- y-coord) Y))
+              empty-stencil))
+        (begin
+          (ly:grob-suicide! grob)
+          (list)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;  laissez-vibrer tie
@@ -1046,5 +1324,21 @@ between the two text elements."
 ;;  needed so we can make laissez-vibrer a pure print
 ;;
 (define-public (laissez-vibrer::print grob)
- (ly:tie::print grob))
+  (ly:tie::print grob))
+
+(define-public (semi-tie::calc-cross-staff grob)
+  (let* ((note-head (ly:grob-object grob 'note-head))
+         (stem (ly:grob-object note-head 'stem)))
+    (and (ly:grob? stem)
+         (ly:grob-property stem 'cross-staff #f))))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; volta-bracket
+
+(define-public (volta-bracket-interface::pure-height grob start end)
+  (let ((edge-height (ly:grob-property grob 'edge-height)))
+    (if (number-pair? edge-height)
+        (let ((smaller (min (car edge-height) (cdr edge-height)))
+              (larger (max (car edge-height) (cdr edge-height))))
+          (interval-union '(0 . 0) (cons smaller larger)))
+        '(0 . 0))))
index 7c8a6ed39474fa5560002fb71f3744d4bf614047..813211f060d175833ba0b0cb45e72ae16dbb4b22 100644 (file)
   #:re-export (quote))
 
 (use-modules (guile)
-            (ice-9 regex)
-            (ice-9 optargs)
-            (srfi srfi-1)
-            (srfi srfi-13)
-            (scm framework-ps)
-            (lily))
+             (ice-9 regex)
+             (ice-9 optargs)
+             (srfi srfi-1)
+             (srfi srfi-13)
+             (scm framework-ps)
+             (lily))
 
 ;;; helper functions, not part of output interface
 ;;;
 (define (str4 num)
   (if (or (nan? num) (inf? num))
       (begin
-       (ly:warning (_ "Found infinity or nan in output.  Substituting 0.0"))
-       (if (ly:get-option 'strict-infinity-checking)
-           (exit 1))
-       "0.0")
+        (ly:warning (_ "Found infinity or nan in output.  Substituting 0.0"))
+        (if (ly:get-option 'strict-infinity-checking)
+            (exit 1))
+        "0.0")
       (ly:number->string num)))
 
 (define (number-pair->string4 numpair)
 
 (define (char font i)
   (ly:format "~a (\\~a) show"
-   (ps-font-command font)
-   (ly:inexact->string i 8)))
+             (ps-font-command font)
+             (ly:inexact->string i 8)))
 
 (define (circle radius thick fill)
   (ly:format
    "~a ~4f ~4f draw_circle"
    (if fill
-     "true"
-     "false")
+       "true"
+       "false")
    radius thick))
 
 (define (start-enclosing-id-node s)
 
 (define (dashed-line thick on off dx dy phase)
   (ly:format "~4f ~4f ~4f [ ~4f ~4f ] ~4f draw_dashed_line"
-   dx
-   dy
-   thick
-   on
-   off
-   phase))
+             dx
+             dy
+             thick
+             on
+             off
+             phase))
 
 (define (draw-line thick x1 y1 x2 y2)
   (ly:format "~4f ~4f ~4f ~4f ~4f draw_line"
-         (- x2 x1) (- y2 y1)
-         x1 y1 thick))
+             (- x2 x1) (- y2 y1)
+             x1 y1 thick))
 
 (define (partial-ellipse x-radius y-radius start-angle end-angle thick connect fill)
   (ly:format "~a ~a ~4f ~4f ~4f ~4f ~4f draw_partial_ellipse"
-        (if fill "true" "false")
-       (if connect "true" "false")
-       x-radius
-       y-radius
-       start-angle
-       end-angle
-       thick))
+             (if fill "true" "false")
+             (if connect "true" "false")
+             x-radius
+             y-radius
+             start-angle
+             end-angle
+             thick))
 
 (define (ellipse x-radius y-radius thick fill)
   (ly:format
    "~a ~4f ~4f ~4f draw_ellipse"
    (if fill
-     "true"
-     "false")
+       "true"
+       "false")
    x-radius y-radius thick))
 
 (define (embedded-ps string)
   string)
 
-(define (glyph-string postscript-font-name
-                     size
-                     cid?
-                     w-x-y-named-glyphs)
+(define (glyph-string pango-font
+                      postscript-font-name
+                      size
+                      cid?
+                      w-x-y-named-glyphs)
 
-  (define (glyph-spec w x y g)
+  (define (glyph-spec w h x y g) ; h not used
     (let ((prefix (if (string? g) "/" "")))
       (ly:format "~4f ~4f ~4f ~a~a"
-                w x y
-                prefix g)))
+                 w x y
+                 prefix g)))
 
   (ly:format
    (if cid?
-"/~a /CIDFont findresource ~a output-scale div scalefont setfont
+       "/~a /CIDFont findresource ~a output-scale div scalefont setfont
 ~a
 ~a print_glyphs"
 
-"/~a ~a output-scale div selectfont
+       "/~a ~a output-scale div selectfont
 ~a
 ~a print_glyphs")
-         postscript-font-name
-         size
-         (string-join (map (lambda (x) (apply glyph-spec x))
-                           (reverse w-x-y-named-glyphs)) "\n")
-         (length w-x-y-named-glyphs)))
+   postscript-font-name
+   size
+   (string-join (map (lambda (x) (apply glyph-spec x))
+                     (reverse w-x-y-named-glyphs)) "\n")
+   (length w-x-y-named-glyphs)))
 
 
 (define (grob-cause offset grob)
   (if (ly:get-option 'point-and-click)
       (let* ((cause (ly:grob-property grob 'cause))
-            (music-origin (if (ly:stream-event? cause)
-                              (ly:event-property cause 'origin)))
-            (point-and-click (ly:get-option 'point-and-click)))
-       (if (and
-            (ly:input-location? music-origin)
-            (cond ((boolean? point-and-click) point-and-click)
-                  ((symbol? point-and-click)
-                   (ly:in-event-class? cause point-and-click))
-                  (else (any (lambda (t)
-                               (ly:in-event-class? cause t))
-                             point-and-click))))
-           (let* ((location (ly:input-file-line-char-column music-origin))
-                  (raw-file (car location))
-                  (file (if (is-absolute? raw-file)
-                            raw-file
-                            (string-append (ly-getcwd) "/" raw-file)))
-                  (x-ext (ly:grob-extent grob grob X))
-                  (y-ext (ly:grob-extent grob grob Y)))
-
-             (if (and (< 0 (interval-length x-ext))
-                      (< 0 (interval-length y-ext)))
-                 (ly:format "~4f ~4f ~4f ~4f (textedit://~a:~a:~a:~a) mark_URI\n"
-                            (+ (car offset) (car x-ext))
-                            (+ (cdr offset) (car y-ext))
-                            (+ (car offset) (cdr x-ext))
-                            (+ (cdr offset) (cdr y-ext))
-
-                            ;; Backslashes are not valid
-                            ;; file URI path separators.
-                            (ly:string-percent-encode
-                              (ly:string-substitute "\\" "/" file))
-
-                            (cadr location)
-                            (caddr location)
-                            (cadddr location))
-                 ""))
-           ""))
+             (music-origin (if (ly:stream-event? cause)
+                               (ly:event-property cause 'origin)))
+             (point-and-click (ly:get-option 'point-and-click)))
+        (if (and
+             (ly:input-location? music-origin)
+             (cond ((boolean? point-and-click) point-and-click)
+                   ((symbol? point-and-click)
+                    (ly:in-event-class? cause point-and-click))
+                   (else (any (lambda (t)
+                                (ly:in-event-class? cause t))
+                              point-and-click))))
+            (let* ((location (ly:input-file-line-char-column music-origin))
+                   (raw-file (car location))
+                   (file (if (is-absolute? raw-file)
+                             raw-file
+                             (string-append (ly-getcwd) "/" raw-file)))
+                   (x-ext (ly:grob-extent grob grob X))
+                   (y-ext (ly:grob-extent grob grob Y)))
+
+              (if (and (< 0 (interval-length x-ext))
+                       (< 0 (interval-length y-ext)))
+                  (ly:format "~4f ~4f ~4f ~4f (textedit://~a:~a:~a:~a) mark_URI\n"
+                             (+ (car offset) (car x-ext))
+                             (+ (cdr offset) (car y-ext))
+                             (+ (car offset) (cdr x-ext))
+                             (+ (cdr offset) (cdr y-ext))
+
+                             ;; Backslashes are not valid
+                             ;; file URI path separators.
+                             (ly:string-percent-encode
+                              (ly:string-substitute "\\" "/" file))
+
+                             (cadr location)
+                             (caddr location)
+                             (1+ (cadddr location)))
+                  ""))
+            ""))
       ""))
 
 (define (named-glyph font glyph)
   (ly:format "~a /~a glyphshow " ;;Why is there a space at the end?
-            (ps-font-command font)
-            glyph))
+             (ps-font-command font)
+             glyph))
 
 (define (no-origin)
   "")
 
 (define (polygon points blot-diameter filled?)
   (ly:format "~a ~4l ~a ~4f draw_polygon"
-            (if filled? "true" "false")
-            points
-            (- (/ (length points) 2) 1)
-            blot-diameter))
+             (if filled? "true" "false")
+             points
+             (- (/ (length points) 2) 1)
+             blot-diameter))
 
 (define (round-filled-box left right bottom top blotdiam)
   (let* ((halfblot (/ blotdiam 2))
-        (x (- halfblot left))
-        (width (- right (+ halfblot x)))
-        (y (- halfblot bottom))
-        (height (- top (+ halfblot y))))
+         (x (- halfblot left))
+         (width (- right (+ halfblot x)))
+         (y (- halfblot bottom))
+         (height (- top (+ halfblot y))))
     (ly:format  "~4l draw_round_box"
-               (list width height x y blotdiam))))
+                (list width height x y blotdiam))))
 
 ;; save current color on stack and set new color
 (define (setcolor r g b)
   (ly:format "gsave ~4l setrgbcolor\n"
-             (list r g b)))
+             (list r g b)))
 
 ;; restore color from stack
 (define (resetcolor) "grestore\n")
 ;; rotation around given point
 (define (setrotation ang x y)
   (ly:format "gsave ~4l translate ~a rotate ~4l translate\n"
-            (list x y)
-            ang
-            (list (* -1 x) (* -1 y))))
+             (list x y)
+             ang
+             (list (* -1 x) (* -1 y))))
 
 (define (resetrotation ang x y)
   "grestore  ")
 
 (define (url-link url x y)
   (ly:format "~a ~a currentpoint vector_add  ~a ~a currentpoint vector_add (~a) mark_URI"
-            (car x)
-            (car y)
-            (cdr x)
-            (cdr y)
-            url))
+             (car x)
+             (car y)
+             (cdr x)
+             (cdr y)
+             url))
 
 (define (page-link page-no x y)
   (if (number? page-no)
-    (ly:format "~a ~a currentpoint vector_add  ~a ~a currentpoint vector_add ~a mark_page_link"
-              (car x)
-              (car y)
-              (cdr x)
-              (cdr y)
-              page-no)
-    ""))
+      (ly:format "~a ~a currentpoint vector_add  ~a ~a currentpoint vector_add ~a mark_page_link"
+                 (car x)
+                 (car y)
+                 (cdr x)
+                 (cdr y)
+                 page-no)
+      ""))
 
 (define* (path thickness exps #:optional (cap 'round) (join 'round) (fill? #f))
   (define (convert-path-exps exps)
     (if (pair? exps)
-       (let*
-           ((head (car exps))
-            (rest (cdr exps))
-            (arity
-             (cond
-              ((memq head '(rmoveto rlineto lineto moveto)) 2)
-              ((memq head '(rcurveto curveto)) 6)
-              ((eq? head 'closepath) 0)
-              (else 1)))
-            (args (take rest arity))
-            )
-
-         ;; WARNING: this is a vulnerability: a user can output arbitrary PS code here.
-         (cons (ly:format
-                       "~l ~a "
-                       args
-                       head)
-               (convert-path-exps (drop rest arity))))
-       '()))
+        (let*
+            ((head (car exps))
+             (rest (cdr exps))
+             (arity
+              (cond
+               ((memq head '(rmoveto rlineto lineto moveto)) 2)
+               ((memq head '(rcurveto curveto)) 6)
+               ((eq? head 'closepath) 0)
+               (else 1)))
+             (args (take rest arity))
+             )
+
+          ;; WARNING: this is a vulnerability: a user can output arbitrary PS code here.
+          (cons (ly:format
+                 "~l ~a "
+                 args
+                 head)
+                (convert-path-exps (drop rest arity))))
+        '()))
 
   (let ((cap-numeric (case cap ((butt) 0) ((round) 1) ((square) 2)
-                      (else (begin
-                              (ly:warning (_ "unknown line-cap-style: ~S")
-                                          (symbol->string cap))
-                              1))))
-       (join-numeric (case join ((miter) 0) ((round) 1) ((bevel) 2)
-                       (else (begin
-                               (ly:warning (_ "unknown line-join-style: ~S")
-                                           (symbol->string join))
-                               1)))))
+                           (else (begin
+                                   (ly:warning (_ "unknown line-cap-style: ~S")
+                                               (symbol->string cap))
+                                   1))))
+        (join-numeric (case join ((miter) 0) ((round) 1) ((bevel) 2)
+                            (else (begin
+                                    (ly:warning (_ "unknown line-join-style: ~S")
+                                                (symbol->string join))
+                                    1)))))
     (ly:format
      "gsave currentpoint translate
 ~a setlinecap ~a setlinejoin ~a setlinewidth
 
 (define (setscale x y)
   (ly:format "gsave ~4l scale\n"
-             (list x y)))
+             (list x y)))
 
 (define (resetscale)
   "grestore\n")
index 352ff2989dfbbed5ee8d02245d48d94972e322fd..3532fc97325728e0e843ccbd5667d429083ee14a 100644 (file)
@@ -6,43 +6,43 @@
   #:re-export (quote))
 
 (use-modules (guile)
-            (srfi srfi-1)
-            (srfi srfi-13)
-            (lily))
+             (srfi srfi-1)
+             (srfi srfi-13)
+             (lily))
 
 
 (define format ergonomic-simple-format)
 
 (define (event-cause grob)
   (let*
-    ((cause (ly:grob-property grob 'cause)))
+      ((cause (ly:grob-property grob 'cause)))
 
     (if (ly:stream-event? cause)
-       cause
-       #f)))
+        cause
+        #f)))
 
 (define (grob-bbox grob offset)
   (let*
-    ((x-ext (ly:grob-extent grob grob X))
-     (y-ext (ly:grob-extent grob grob Y))
-     (x (car offset))
-     (y (cdr offset)))
+      ((x-ext (ly:grob-extent grob grob X))
+       (y-ext (ly:grob-extent grob grob Y))
+       (x (car offset))
+       (y (cdr offset)))
 
     (if (interval-empty? x-ext)
-       (set! x-ext '(0 . 0)))
+        (set! x-ext '(0 . 0)))
 
     (if (interval-empty? y-ext)
-       (set! y-ext '(0 . 0)))
+        (set! y-ext '(0 . 0)))
 
     (list (+ x (car x-ext))
-         (+ y (car y-ext))
-         (+ x (cdr x-ext))
-         (+ y (cdr y-ext)))))
+          (+ y (car y-ext))
+          (+ x (cdr x-ext))
+          (+ y (cdr y-ext)))))
 
 (define (escape-string str)
   (string-regexp-substitute
-    " " "\\040"
-    (string-regexp-substitute "\"" "\\\"" str)))
+   " " "\\040"
+   (string-regexp-substitute "\"" "\\\"" str)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; stencil commands
 
 (define (draw-line thick x1 y1 x2 y2)
   (format #f "drawline ~a ~a ~a ~a ~a"
-         thick x1 y2 x2 y2))
+          thick x1 y2 x2 y2))
 
 (define (grob-cause offset grob)
   (let*
-    ((cause (event-cause grob))
-     (tag (if (and cause (integer? (ly:event-property cause 'input-tag)))
-             (ly:event-property cause 'input-tag)
-             -1))
-     (name (assoc-get 'name (ly:grob-property grob 'meta))))
+      ((cause (event-cause grob))
+       (tag (if (and cause (integer? (ly:event-property cause 'input-tag)))
+                (ly:event-property cause 'input-tag)
+                -1))
+       (name (assoc-get 'name (ly:grob-property grob 'meta))))
 
     (apply format #f
-          "cause ~a \"~a\" ~a ~a ~a ~a\n" tag name
-          (grob-bbox grob offset))))
+           "cause ~a \"~a\" ~a ~a ~a ~a\n" tag name
+           (grob-bbox grob offset))))
 
 (define (named-glyph font glyph)
   (format #f "glyphshow ~a \"~a\" ~a \"~a\""
-         (ly:font-glyph-name-to-charcode font glyph)
-         (ly:font-name font)
-         (modified-font-metric-font-scaling font)
-         glyph))
+          (ly:font-glyph-name-to-charcode font glyph)
+          (ly:font-name font)
+          (modified-font-metric-font-scaling font)
+          glyph))
 
 (define (no-origin)
   "nocause\n")
 
 (define (polygon xy-coords blot do-fill)
   (format #f "polygon ~a ~a ~a"
-         blot
-         (if do-fill "True" "False")
-         (string-join (map number->string xy-coords))))
+          blot
+          (if do-fill "True" "False")
+          (string-join (map number->string xy-coords))))
 
 (define (round-filled-box breapth width depth height blot-diameter)
   (format #f "draw_round_box ~a ~a ~a ~a ~a"
-         breapth width depth height blot-diameter))
+          breapth width depth height blot-diameter))
 
 (define (utf-8-string descr string)
   (format #f "utf-8 \"~a\" \"~a\""
-         (escape-string descr)
-         ;; don't want unescaped spaces.
-         (escape-string string)))
+          (escape-string descr)
+          ;; don't want unescaped spaces.
+          (escape-string string)))
index 9f10629eacf7a6f2a3f4fc913aaa5ff3ee9a65a3..cb9f598d3f0b71cc7ca261a77f17abd2c63df87e 100644 (file)
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (scm output-svg))
-(define this-module (current-module))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; globals
 
 ;;; set by framework-gnome.scm
 (define paper #f)
-  
+
 (use-modules
 (guile)
 (ice-9 regex)
 (ice-9 format)
 (ice-9 optargs)
 (lily)
 (srfi srfi-1)
 (srfi srfi-13))
+ (guile)
+ (ice-9 regex)
+ (ice-9 format)
+ (ice-9 optargs)
+ (lily)
+ (srfi srfi-1)
+ (srfi srfi-13))
 
 (define fancy-format format)
 (define format ergonomic-simple-format)
 
 (define lily-unit-length 1.7573)
 
-(define (dispatch expr)
-  (let ((keyword (car expr)))
-    (cond ((eq? keyword 'some-func) "")
-         (else (if (module-defined? this-module keyword)
-                   (apply (eval keyword this-module) (cdr expr))
-                   (begin (ly:warning (_ "undefined: ~S") keyword)
-                          ""))))))
-
 ;; Helper functions
 (define-public (attributes attributes-alist)
-  (apply string-append
-        (map (lambda (x)
-               (let ((attr (car x))
-                     (value (cdr x)))
-                 (if (number? value)
-                     (set! value (ly:format "~4f" value)))
-                 (format #f " ~s=\"~a\"" attr value)))
-             attributes-alist)))
+  (string-concatenate
+   (map (lambda (x)
+          (let ((attr (car x))
+                (value (cdr x)))
+            (if (number? value)
+                (set! value (ly:format "~4f" value)))
+            (format #f " ~s=\"~a\"" attr value)))
+        attributes-alist)))
 
 (define-public (eo entity . attributes-alist)
   "o = open"
@@ -83,7 +74,7 @@
   (if (equal? string "")
       (apply eoc entity attributes-alist)
       (string-append
-       (apply eo (cons entity attributes-alist)) string (ec entity))))
+       (apply eo (cons entity attributes-alist)) string (ec entity))))
 
 (define (offset->point o)
   (ly:format "~4f ~4f" (car o) (- (cdr o))))
 (define (number-list->point lst)
   (define (helper lst)
     (if (null? lst)
-       '()
-       (cons (format #f "~S ~S" (car lst) (- (cadr lst)))
-             (helper (cddr lst)))))
+        '()
+        (cons (format #f "~S ~S" (car lst) (- (cadr lst)))
+              (helper (cddr lst)))))
 
   (string-join (helper lst) " "))
 
 
 (define (svg-bezier lst close)
   (let* ((c0 (car (list-tail lst 3)))
-        (c123 (list-head lst 3)))
+         (c123 (list-head lst 3)))
     (string-append
-      (if (not close) "M" "L")
-      (offset->point c0)
-      "C" (string-join (map offset->point c123) " ")
-      (if (not close) "" "z"))))
+     (if (not close) "M" "L")
+     (offset->point c0)
+     "C" (string-join (map offset->point c123) " ")
+     (if (not close) "" "z"))))
 
 (define (sqr x)
   (* x x))
   (integer->entity (char->integer char)))
 
 (define (string->entities string)
-  (apply string-append
-        (map (lambda (x) (char->entity x)) (string->list string))))
+  (string-concatenate
+   (map char->entity (string->list string))))
 
 (define svg-element-regexp
   (make-regexp "^(<[a-z]+) ?(.*>)"))
   (define (set-attribute attr val)
     (set! alist (assoc-set! alist attr val)))
   (let* ((match-1 (regexp-exec pango-description-regexp-comma str))
-        (match-2 (regexp-exec pango-description-regexp-nocomma str))
-        (match (if match-1 match-1 match-2)))
+         (match-2 (regexp-exec pango-description-regexp-nocomma str))
+         (match (if match-1 match-1 match-2)))
 
     (if (regexp-match? match)
-       (begin
-         (set-attribute 'font-family (match:prefix match))
-         (if (string? (match:substring match 1))
-             (set-attribute 'font-weight "bold"))
-         (if (string? (match:substring match 2))
-             (set-attribute 'font-style "italic"))
-         (if (string? (match:substring match 3))
-             (set-attribute 'font-variant "small-caps"))
-         (set-attribute 'font-size
-                        (/ (string->number (match:substring match 4))
-                           lily-unit-length))
-         (set-attribute 'text-anchor "start")
-         (set-attribute 'fill "currentColor"))
-       (ly:warning (_ "cannot decypher Pango description: ~a") str))
+        (begin
+          (set-attribute 'font-family (match:prefix match))
+          (if (string? (match:substring match 1))
+              (set-attribute 'font-weight "bold"))
+          (if (string? (match:substring match 2))
+              (set-attribute 'font-style "italic"))
+          (if (string? (match:substring match 3))
+              (set-attribute 'font-variant "small-caps"))
+          (set-attribute 'font-size
+                         (/ (string->number (match:substring match 4))
+                            lily-unit-length))
+          (set-attribute 'text-anchor "start")
+          (set-attribute 'fill "currentColor"))
+        (ly:warning (_ "cannot decypher Pango description: ~a") str))
 
     (apply entity 'text expr (reverse! alist))))
 
     (set! alist (assoc-set! alist attr val)))
   (if (not (null? rest))
       (let* ((dx (car rest))
-            (dy (cadr rest))
-            (total-x (+ dx next-horiz-adv)))
-       (if (or (not (zero? total-x))
-               (not (zero? dy)))
-           (let ((x (ly:format "~4f" total-x))
-                 (y (ly:format "~4f" dy)))
-             (set-attribute 'transform
-                            (string-append
-                              "translate(" x ", " y ") "
-                              "scale(" scale ", -" scale ")")))
-           (set-attribute 'transform
-                          (string-append
-                            "scale(" scale ", -" scale ")"))))
+             (dy (cadr rest))
+             (total-x (+ dx next-horiz-adv)))
+        (if (or (not (zero? total-x))
+                (not (zero? dy)))
+            (let ((x (ly:format "~4f" total-x))
+                  (y (ly:format "~4f" dy)))
+              (set-attribute 'transform
+                             (string-append
+                              "translate(" x ", " y ") "
+                              "scale(" scale ", -" scale ")")))
+            (set-attribute 'transform
+                           (string-append
+                            "scale(" scale ", -" scale ")"))))
       (set-attribute 'transform (string-append
-                                 "scale(" scale ", -" scale ")")))
+                                 "scale(" scale ", -" scale ")")))
 
   (set-attribute 'd path)
   (set-attribute 'fill "currentColor")
 ;;
 (define (glyph-element-regexp name)
   (make-regexp (string-append "<glyph"
-                             "(([[:space:]]+[-a-z]+=\"[^\"]*\")+)?"
-                             "[[:space:]]+glyph-name=\"("
-                             name
-                             ")\""
-                             "(([[:space:]]+[-a-z]+=\"[^\"]*\")+)?"
-                             "([[:space:]]+)?"
-                             "/>")))
+                              "(([[:space:]]+[-a-z]+=\"[^\"]*\")+)?"
+                              "[[:space:]]+glyph-name=\"("
+                              name
+                              ")\""
+                              "(([[:space:]]+[-a-z]+=\"[^\"]*\")+)?"
+                              "([[:space:]]+)?"
+                              "/>")))
 
 (define (extract-glyph all-glyphs name size . rest)
   (let* ((new-name (regexp-quote name))
-        (regexp (regexp-exec (glyph-element-regexp new-name) all-glyphs))
-        (glyph (match:substring regexp))
-        (unicode-attr (regexp-exec glyph-unicode-value-regexp glyph))
-        (unicode-attr-value (match:substring unicode-attr 1))
-        (unicode-attr? (regexp-match? unicode-attr))
-        (d-attr (regexp-exec glyph-path-regexp glyph))
-        (d-attr-value "")
-        (d-attr? (regexp-match? d-attr))
-        ;; TODO: not urgent, but do not hardcode this value
-        (units-per-em 1000)
-        (font-scale (ly:format "~4f" (/ size units-per-em)))
-        (path ""))
+         (regexp (regexp-exec (glyph-element-regexp new-name) all-glyphs))
+         (glyph (match:substring regexp))
+         (unicode-attr (regexp-exec glyph-unicode-value-regexp glyph))
+         (unicode-attr-value (match:substring unicode-attr 1))
+         (unicode-attr? (regexp-match? unicode-attr))
+         (d-attr (regexp-exec glyph-path-regexp glyph))
+         (d-attr-value "")
+         (d-attr? (regexp-match? d-attr))
+         ;; TODO: not urgent, but do not hardcode this value
+         (units-per-em 1000)
+         (font-scale (ly:format "~4f" (/ size units-per-em)))
+         (path ""))
 
     (if (and unicode-attr? (not unicode-attr-value))
-       (ly:warning (_ "Glyph must have a unicode value")))
+        (ly:warning (_ "Glyph must have a unicode value")))
 
     (if d-attr? (set! d-attr-value (match:substring d-attr 1)))
 
     (cond (
-          ;; Glyph-strings with path data
-          (and d-attr? (not (null? rest)))
-          (begin
-            (set! path (apply dump-path d-attr-value
-                                        font-scale
-                                        (list (cadr rest) (caddr rest))))
-            (set! next-horiz-adv (+ next-horiz-adv
-                                    (car rest)))
-            path))
-         ;; Glyph-strings without path data ("space")
-         ((and (not d-attr?) (not (null? rest)))
-          (begin
-            (set! next-horiz-adv (+ next-horiz-adv
-                                    (car rest)))
-            ""))
-         ;; Font smobs with path data
-         ((and d-attr? (null? rest))
-           (set! path (dump-path d-attr-value font-scale))
-           path)
-         ;; Font smobs without path data ("space")
-         (else
-           ""))))
+           ;; Glyph-strings with path data
+           (and d-attr? (not (null? rest)))
+           (begin
+             (set! path (apply dump-path d-attr-value
+                               font-scale
+                               (list (caddr rest) (cadddr rest))))
+             (set! next-horiz-adv (+ next-horiz-adv
+                                     (car rest)))
+             path))
+          ;; Glyph-strings without path data ("space")
+          ((and (not d-attr?) (not (null? rest)))
+           (begin
+             (set! next-horiz-adv (+ next-horiz-adv
+                                     (car rest)))
+             ""))
+          ;; Font smobs with path data
+          ((and d-attr? (null? rest))
+           (set! path (dump-path d-attr-value font-scale))
+           path)
+          ;; Font smobs without path data ("space")
+          (else
+           ""))))
 
 (define (extract-glyph-info all-glyphs glyph size)
-  (let* ((offsets (list-head glyph 3))
-        (glyph-name (car (reverse glyph))))
+  (let* ((offsets (list-head glyph 4))
+         (glyph-name (car (reverse glyph))))
     (apply extract-glyph all-glyphs glyph-name size offsets)))
 
 (define (svg-defs svg-font)
   (let ((start (string-contains svg-font "<defs>"))
-       (end (string-contains svg-font "</defs>")))
+        (end (string-contains svg-font "</defs>")))
     (substring svg-font (+ start 7) (- end 1))))
 
 (define (cache-font svg-font size glyph)
   (let ((all-glyphs (svg-defs (cached-file-contents svg-font))))
     (if (list? glyph)
-       (extract-glyph-info all-glyphs glyph size)
-       (extract-glyph all-glyphs glyph size))))
+        (extract-glyph-info all-glyphs glyph size)
+        (extract-glyph all-glyphs glyph size))))
 
 
 (define (music-string-to-path font size glyph)
   (let* ((name-style (font-name-style font))
-        (scaled-size (/ size lily-unit-length))
-        (font-file (ly:find-file (string-append name-style ".svg"))))
+         (scaled-size (/ size lily-unit-length))
+         (font-file (ly:find-file (string-append name-style ".svg"))))
 
     (if font-file
-       (cache-font font-file scaled-size glyph)
-       (ly:warning (_ "cannot find SVG font ~S") font-file))))
+        (cache-font font-file scaled-size glyph)
+        (ly:warning (_ "cannot find SVG font ~S") font-file))))
 
 
 (define (font-smob-to-path font glyph)
   (let* ((name-style (font-name-style font))
-        (scaled-size (modified-font-metric-font-scaling font))
-        (font-file (ly:find-file (string-append name-style ".svg"))))
+         (scaled-size (modified-font-metric-font-scaling font))
+         (font-file (ly:find-file (string-append name-style ".svg"))))
 
     (if font-file
-       (cache-font font-file scaled-size glyph)
-       (ly:warning (_ "cannot find SVG font ~S") font-file))))
+        (cache-font font-file scaled-size glyph)
+        (ly:warning (_ "cannot find SVG font ~S") font-file))))
 
 (define (woff-font-smob-to-text font expr)
   (let* ((name-style (font-name-style font))
-        (scaled-size (modified-font-metric-font-scaling font))
-        (font-file (ly:find-file (string-append name-style ".woff")))
-        (charcode (ly:font-glyph-name-to-charcode font expr))
-        (char-lookup (format #f "&#~S;" charcode))
-        (glyph-by-name (eoc 'altglyph `(glyphname . ,expr)))
-        (apparently-broken
-         (comment "FIXME: how to select glyph by name, altglyph is broken?"))
-        (text (string-regexp-substitute "\n" ""
-               (string-append glyph-by-name apparently-broken char-lookup))))
-  (define alist '())
-  (define (set-attribute attr val)
-    (set! alist (assoc-set! alist attr val)))
-  (set-attribute 'font-family name-style)
-  (set-attribute 'font-size scaled-size)
-  (apply entity 'text text (reverse! alist))))
-  
+         (scaled-size (modified-font-metric-font-scaling font))
+         (font-file (ly:find-file (string-append name-style ".woff")))
+         (charcode (ly:font-glyph-name-to-charcode font expr))
+         (char-lookup (format #f "&#~S;" charcode))
+         (glyph-by-name (eoc 'altglyph `(glyphname . ,expr)))
+         (apparently-broken
+          (comment "FIXME: how to select glyph by name, altglyph is broken?"))
+         (text (string-regexp-substitute "\n" ""
+                                         (string-append glyph-by-name apparently-broken char-lookup))))
+    (define alist '())
+    (define (set-attribute attr val)
+      (set! alist (assoc-set! alist attr val)))
+    (set-attribute 'font-family name-style)
+    (set-attribute 'font-size scaled-size)
+    (apply entity 'text text (reverse! alist))))
+
 (define font-smob-to-text
   (if (not (ly:get-option 'svg-woff))
       font-smob-to-path woff-font-smob-to-text))
 ;;;
 
 (define (char font i)
-  (dispatch
-   `(fontify ,font ,(entity 'tspan (char->entity (integer->char i))))))
+  (fontify font (entity 'tspan (char->entity (integer->char i)))))
 
 (define (circle radius thick is-filled)
   (entity
-    'circle ""
-    '(stroke-linejoin . "round")
-    '(stroke-linecap . "round")
-    `(fill . ,(if is-filled "currentColor" "none"))
-    `(stroke . "currentColor")
-    `(stroke-width . ,thick)
-    `(r . ,radius)))
+   'circle ""
+   '(stroke-linejoin . "round")
+   '(stroke-linecap . "round")
+   `(fill . ,(if is-filled "currentColor" "none"))
+   `(stroke . "currentColor")
+   `(stroke-width . ,thick)
+   `(r . ,radius)))
 
 (define (dashed-line thick on off dx dy phase)
   (draw-line thick 0 0 dx dy
-            `(stroke-dasharray . ,(format #f "~a,~a" on off))))
+             `(stroke-dasharray . ,(format #f "~a,~a" on off))))
 
 (define (draw-line thick x1 y1 x2 y2 . alist)
   (apply entity 'line ""
-        (append
-          `((stroke-linejoin . "round")
-            (stroke-linecap . "round")
-            (stroke-width . ,thick)
-            (stroke . "currentColor")
-            (x1 . ,x1)
-            (y1 . ,(- y1))
-            (x2 . ,x2)
-            (y2 . ,(- y2)))
-          alist)))
+         (append
+          `((stroke-linejoin . "round")
+            (stroke-linecap . "round")
+            (stroke-width . ,thick)
+            (stroke . "currentColor")
+            (x1 . ,x1)
+            (y1 . ,(- y1))
+            (x2 . ,x2)
+            (y2 . ,(- y2)))
+          alist)))
 
 (define (ellipse x-radius y-radius thick is-filled)
   (entity
-    'ellipse ""
-    '(stroke-linejoin . "round")
-    '(stroke-linecap . "round")
-    `(fill . ,(if is-filled "currentColor" "none"))
-    `(stroke . "currentColor")
-    `(stroke-width . ,thick)
-    `(rx . ,x-radius)
-    `(ry . ,y-radius)))
+   'ellipse ""
+   '(stroke-linejoin . "round")
+   '(stroke-linecap . "round")
+   `(fill . ,(if is-filled "currentColor" "none"))
+   `(stroke . "currentColor")
+   `(stroke-width . ,thick)
+   `(rx . ,x-radius)
+   `(ry . ,y-radius)))
 
 (define (partial-ellipse x-radius y-radius start-angle end-angle thick connect fill)
   (define (make-ellipse-radius x-radius y-radius angle)
                 (* (* x-radius x-radius)
                    (* (sin angle) (sin angle)))))))
   (let*
-    ((new-start-angle (* PI-OVER-180 (angle-0-360 start-angle)))
-     (start-radius (make-ellipse-radius x-radius y-radius new-start-angle))
-     (new-end-angle (* PI-OVER-180 (angle-0-360 end-angle)))
-     (end-radius (make-ellipse-radius x-radius y-radius new-end-angle))
-     (epsilon 1.5e-3)
-     (x-end (- (* end-radius (cos new-end-angle))
-               (* start-radius (cos new-start-angle))))
-     (y-end (- (* end-radius (sin new-end-angle))
-               (* start-radius (sin new-start-angle)))))
-   (if (and (< (abs x-end) epsilon) (< (abs y-end) epsilon))
-    (entity
-      'ellipse ""
-      `(fill . ,(if fill "currentColor" "none"))
-      `(stroke . "currentColor")
-      `(stroke-width . ,thick)
-      '(stroke-linejoin . "round")
-      '(stroke-linecap . "round")
-      '(cx . 0)
-      '(cy . 0)
-      `(rx . ,x-radius)
-      `(ry . ,y-radius))
-    (entity
-      'path ""
-      `(fill . ,(if fill "currentColor" "none"))
-      `(stroke . "currentColor")
-      `(stroke-width . ,thick)
-      '(stroke-linejoin . "round")
-      '(stroke-linecap . "round")
-      (cons
-        'd
-        (string-append
-          (ly:format
+      ((new-start-angle (* PI-OVER-180 (angle-0-360 start-angle)))
+       (start-radius (make-ellipse-radius x-radius y-radius new-start-angle))
+       (new-end-angle (* PI-OVER-180 (angle-0-360 end-angle)))
+       (end-radius (make-ellipse-radius x-radius y-radius new-end-angle))
+       (epsilon 1.5e-3)
+       (x-end (- (* end-radius (cos new-end-angle))
+                 (* start-radius (cos new-start-angle))))
+       (y-end (- (* end-radius (sin new-end-angle))
+                 (* start-radius (sin new-start-angle)))))
+    (if (and (< (abs x-end) epsilon) (< (abs y-end) epsilon))
+        (entity
+         'ellipse ""
+         `(fill . ,(if fill "currentColor" "none"))
+         `(stroke . "currentColor")
+         `(stroke-width . ,thick)
+         '(stroke-linejoin . "round")
+         '(stroke-linecap . "round")
+         '(cx . 0)
+         '(cy . 0)
+         `(rx . ,x-radius)
+         `(ry . ,y-radius))
+        (entity
+         'path ""
+         `(fill . ,(if fill "currentColor" "none"))
+         `(stroke . "currentColor")
+         `(stroke-width . ,thick)
+         '(stroke-linejoin . "round")
+         '(stroke-linecap . "round")
+         (cons
+          'd
+          (string-append
+           (ly:format
             "M~4f ~4fA~4f ~4f 0 ~4f 0 ~4f ~4f"
             (* start-radius (cos new-start-angle))
             (- (* start-radius (sin new-start-angle)))
             (if (> 0 (- new-start-angle new-end-angle)) 0 1)
             (* end-radius (cos new-end-angle))
             (- (* end-radius (sin new-end-angle))))
-            (if connect
-                (ly:format "L~4f,~4f"
-                           (* start-radius (cos new-start-angle))
-                           (- (* start-radius (sin new-start-angle))))
-                "")))))))
+           (if connect
+               (ly:format "L~4f,~4f"
+                          (* start-radius (cos new-start-angle))
+                          (- (* start-radius (sin new-start-angle))))
+               "")))))))
 
 (define (embedded-svg string)
   string)
 
-(define (embedded-glyph-string font size cid glyphs)
+(define (embedded-glyph-string pango-font font size cid glyphs)
   (define path "")
   (if (= 1 (length glyphs))
       (set! path (music-string-to-path font size (car glyphs)))
       (begin
-       (set! path
-             (string-append (eo 'g)
-                            (string-join
-                              (map (lambda (x)
-                                     (music-string-to-path font size x))
-                                   glyphs)
-                              "\n")
-                            (ec 'g)))))
+        (set! path
+              (string-append (eo 'g)
+                             (string-join
+                              (map (lambda (x)
+                                     (music-string-to-path font size x))
+                                   glyphs)
+                              "\n")
+                             (ec 'g)))))
   (set! next-horiz-adv 0.0)
   path)
 
-(define (woff-glyph-string font-name size cid? w-x-y-named-glyphs)
+(define (woff-glyph-string pango-font font-name size cid? w-h-x-y-named-glyphs)
   (let* ((name-style (font-name-style font-name))
-        (family-designsize (regexp-exec (make-regexp "(.*)-([0-9]*)")
-                                        font-name))
-        (family (if (regexp-match? family-designsize)
-                    (match:substring family-designsize 1)
-                    font-name))
-        (design-size (if (regexp-match? family-designsize)
-                         (match:substring family-designsize 2)
-                         #f))
-        (scaled-size (/ size lily-unit-length))
-        (font (ly:paper-get-font paper `(((font-family . ,family)
-                                          ,(if design-size
-                                               `(design-size . design-size)))))))
-    (define (glyph-spec w x y g)
+         (family-designsize (regexp-exec (make-regexp "(.*)-([0-9]*)")
+                                         font-name))
+         (family (if (regexp-match? family-designsize)
+                     (match:substring family-designsize 1)
+                     font-name))
+         (design-size (if (regexp-match? family-designsize)
+                          (match:substring family-designsize 2)
+                          #f))
+         (scaled-size (/ size lily-unit-length))
+         (font (ly:paper-get-font paper `(((font-family . ,family)
+                                           ,(if design-size
+                                                `(design-size . design-size)))))))
+    (define (glyph-spec w h x y g) ; h not used
       (let* ((charcode (ly:font-glyph-name-to-charcode font g))
-            (char-lookup (format #f "&#~S;" charcode))
-            (glyph-by-name (eoc 'altglyph `(glyphname . ,g)))
-            (apparently-broken
-             (comment "XFIXME: how to select glyph by name, altglyph is broken?")))
-       ;; what is W?
-       (ly:format
-        "<text~a font-family=\"~a\" font-size=\"~a\">~a</text>"
-        (if (or (> (abs x) 0.00001)
-                (> (abs y) 0.00001))
-            (ly:format " transform=\"translate(~4f,~4f)\"" x y)
-            " ")
-        name-style scaled-size
-        (string-regexp-substitute
-         "\n" ""
-         (string-append glyph-by-name apparently-broken char-lookup)))))
+             (char-lookup (format #f "&#~S;" charcode))
+             (glyph-by-name (eoc 'altglyph `(glyphname . ,g)))
+             (apparently-broken
+              (comment "XFIXME: how to select glyph by name, altglyph is broken?")))
+        ;; what is W?
+        (ly:format
+         "<text~a font-family=\"~a\" font-size=\"~a\">~a</text>"
+         (if (or (> (abs x) 0.00001)
+                 (> (abs y) 0.00001))
+             (ly:format " transform=\"translate(~4f,~4f)\"" x y)
+             " ")
+         name-style scaled-size
+         (string-regexp-substitute
+          "\n" ""
+          (string-append glyph-by-name apparently-broken char-lookup)))))
 
     (string-join (map (lambda (x) (apply glyph-spec x))
-                     (reverse w-x-y-named-glyphs)) "\n")))
+                      (reverse w-h-x-y-named-glyphs)) "\n")))
 
 (define glyph-string
   (if (not (ly:get-option 'svg-woff)) embedded-glyph-string woff-glyph-string))
 
 (define (grob-cause offset grob)
-  "")
+  (and (ly:get-option 'point-and-click)
+       (let* ((cause (ly:grob-property grob 'cause))
+              (music-origin (if (ly:stream-event? cause)
+                                (ly:event-property cause 'origin)))
+              (point-and-click (ly:get-option 'point-and-click)))
+         (and (ly:input-location? music-origin)
+              (cond ((boolean? point-and-click) point-and-click)
+                    ((symbol? point-and-click)
+                     (ly:in-event-class? cause point-and-click))
+                    (else (any (lambda (t)
+                                 (ly:in-event-class? cause t))
+                               point-and-click)))
+              (let* ((location (ly:input-file-line-char-column music-origin))
+                     (raw-file (car location))
+                     (file (if (is-absolute? raw-file)
+                               raw-file
+                               (string-append (ly-getcwd) "/" raw-file))))
+                
+                (ly:format "<a style=\"color:inherit;\" xlink:href=\"textedit://~a:~a:~a:~a\">\n"
+                           ;; Backslashes are not valid
+                           ;; file URI path separators.
+                           (ly:string-percent-encode
+                            (ly:string-substitute "\\" "/" file))
+                           
+                           (cadr location)
+                           (caddr location)
+                           (1+ (cadddr location))))))))
 
 (define (named-glyph font name)
-  (dispatch `(fontify ,font ,name)))
+  (fontify font name))
 
-(define (no-origin)
-  "")
+(define (no-origin) "</a>\n")
 
 (define* (path thick commands #:optional (cap 'round) (join 'round) (fill? #f))
   (define (convert-path-exps exps)
     (if (pair? exps)
-       (let*
-         ((head (car exps))
-          (rest (cdr exps))
-          (arity
-            (cond ((memq head '(rmoveto rlineto lineto moveto)) 2)
-                  ((memq head '(rcurveto curveto)) 6)
-                  ((eq? head 'closepath) 0)
-                  (else 1)))
-          (args (take rest arity))
-          (svg-head (assoc-get head
-                               '((rmoveto . m)
-                                 (rcurveto . c)
-                                 (curveto . C)
-                                 (moveto . M)
-                                 (lineto . L)
-                                 (rlineto . l)
-                                 (closepath . z))
-                               "")))
-
-         (cons (format #f "~a~a" svg-head (number-list->point args))
-               (convert-path-exps (drop rest arity))))
-       '()))
+        (let*
+            ((head (car exps))
+             (rest (cdr exps))
+             (arity
+              (cond ((memq head '(rmoveto rlineto lineto moveto)) 2)
+                    ((memq head '(rcurveto curveto)) 6)
+                    ((eq? head 'closepath) 0)
+                    (else 1)))
+             (args (take rest arity))
+             (svg-head (assoc-get head
+                                  '((rmoveto . m)
+                                    (rcurveto . c)
+                                    (curveto . C)
+                                    (moveto . M)
+                                    (lineto . L)
+                                    (rlineto . l)
+                                    (closepath . z))
+                                  "")))
+
+          (cons (format #f "~a~a" svg-head (number-list->point args))
+                (convert-path-exps (drop rest arity))))
+        '()))
 
   (let* ((line-cap-styles '(butt round square))
-        (line-join-styles '(miter round bevel))
-        (cap-style (if (not (memv cap line-cap-styles))
-                       (begin
-                         (ly:warning (_ "unknown line-cap-style: ~S")
-                                     (symbol->string cap))
-                         'round)
-                       cap))
-        (join-style (if (not (memv join line-join-styles))
-                        (begin
-                          (ly:warning (_ "unknown line-join-style: ~S")
-                                      (symbol->string join))
-                          'round)
-                        join)))
+         (line-join-styles '(miter round bevel))
+         (cap-style (if (not (memv cap line-cap-styles))
+                        (begin
+                          (ly:warning (_ "unknown line-cap-style: ~S")
+                                      (symbol->string cap))
+                          'round)
+                        cap))
+         (join-style (if (not (memv join line-join-styles))
+                         (begin
+                           (ly:warning (_ "unknown line-join-style: ~S")
+                                       (symbol->string join))
+                           'round)
+                         join)))
     (entity 'path ""
-           `(stroke-width . ,thick)
-           `(stroke-linejoin . ,(symbol->string join-style))
-           `(stroke-linecap . ,(symbol->string cap-style))
-           '(stroke . "currentColor")
-           `(fill . ,(if fill? "currentColor" "none"))
-           `(d . ,(apply string-append (convert-path-exps commands))))))
+            `(stroke-width . ,thick)
+            `(stroke-linejoin . ,(symbol->string join-style))
+            `(stroke-linecap . ,(symbol->string cap-style))
+            '(stroke . "currentColor")
+            `(fill . ,(if fill? "currentColor" "none"))
+            `(d . ,(string-concatenate (convert-path-exps commands))))))
 
 (define (placebox x y expr)
   (if (string-null? expr)
       ""
       (let*
-       ((normal-element (regexp-exec svg-element-regexp expr))
-        (scaled-element (regexp-exec scaled-element-regexp expr))
-        (scaled? (if scaled-element #t #f))
-        (match (if scaled? scaled-element normal-element))
-        (string1 (match:substring match 1))
-        (string2 (match:substring match 2)))
-
-       (if scaled?
-           (string-append string1
-                          (ly:format "translate(~4f, ~4f) " x (- y))
-                          string2
-                          "\n")
-           (string-append string1
-                          (ly:format " transform=\"translate(~4f, ~4f)\" "
-                                     x (- y))
-                          string2
-                          "\n")))))
+          ((normal-element (regexp-exec svg-element-regexp expr))
+           (scaled-element (regexp-exec scaled-element-regexp expr))
+           (scaled? (if scaled-element #t #f))
+           (match (if scaled? scaled-element normal-element))
+           (string1 (match:substring match 1))
+           (string2 (match:substring match 2)))
+
+        (if scaled?
+            (string-append string1
+                           (ly:format "translate(~4f, ~4f) " x (- y))
+                           string2
+                           "\n")
+            (string-append string1
+                           (ly:format " transform=\"translate(~4f, ~4f)\" "
+                                      x (- y))
+                           string2
+                           "\n")))))
 
 (define (polygon coords blot-diameter is-filled)
   (entity
-    'polygon ""
-    '(stroke-linejoin . "round")
-    '(stroke-linecap . "round")
-    `(stroke-width . ,blot-diameter)
-    `(fill . ,(if is-filled "currentColor" "none"))
-    '(stroke . "currentColor")
-    `(points . ,(string-join
-                 (map offset->point (ly:list->offsets '() coords))))))
+   'polygon ""
+   '(stroke-linejoin . "round")
+   '(stroke-linecap . "round")
+   `(stroke-width . ,blot-diameter)
+   `(fill . ,(if is-filled "currentColor" "none"))
+   '(stroke . "currentColor")
+   `(points . ,(string-join
+                (map offset->point (ly:list->offsets '() coords))))))
 
 (define (resetcolor)
   "</g>\n")
 
 (define (round-filled-box breapth width depth height blot-diameter)
   (entity
-    'rect ""
-    ;; The stroke will stick out.  To use stroke,
-    ;; the stroke-width must be subtracted from all other dimensions.
-    ;;'(stroke-linejoin . "round")
-    ;;'(stroke-linecap . "round")
-    ;;`(stroke-width . ,blot)
-    ;;'(stroke . "red")
-    ;;'(fill . "orange")
-
-    `(x . ,(- breapth))
-    `(y . ,(- height))
-    `(width . ,(+ breapth width))
-    `(height . ,(+ depth height))
-    `(ry . ,(/ blot-diameter 2))
-    '(fill . "currentColor")))
+   'rect ""
+   ;; The stroke will stick out.  To use stroke,
+   ;; the stroke-width must be subtracted from all other dimensions.
+   ;;'(stroke-linejoin . "round")
+   ;;'(stroke-linecap . "round")
+   ;;`(stroke-width . ,blot)
+   ;;'(stroke . "red")
+   ;;'(fill . "orange")
+
+   `(x . ,(- breapth))
+   `(y . ,(- height))
+   `(width . ,(+ breapth width))
+   `(height . ,(+ depth height))
+   `(ry . ,(/ blot-diameter 2))
+   '(fill . "currentColor")))
 
 (define (setcolor r g b)
   (format #f "<g color=\"rgb(~a%, ~a%, ~a%)\">\n"
-         (* 100 r) (* 100 g) (* 100 b)))
+          (* 100 r) (* 100 g) (* 100 b)))
 
 ;; rotate around given point
 (define (setrotation ang x y)
   (ly:format "<g transform=\"rotate(~4f, ~4f, ~4f)\">\n"
-            (- ang) x (- y)))
+             (- ang) x (- y)))
 
 (define (setscale x y)
   (ly:format "<g transform=\"scale(~4f, ~4f)\">\n"
-            x y))
+             x y))
 
 (define (text font string)
-  (dispatch `(fontify ,font ,(entity 'tspan (string->entities string)))))
+  (fontify font (entity 'tspan (string->entities string))))
 
 (define (url-link url x y)
   (string-append
    (eo 'a `(xlink:href . ,url))
    (eoc 'rect
-       `(x . ,(car x))
-       `(y . ,(car y))
-       `(width . ,(- (cdr x) (car x)))
-       `(height . ,(- (cdr y) (car y)))
-       '(fill . "none")
-       '(stroke . "none")
-       '(stroke-width . "0.0"))
+        `(x . ,(car x))
+        `(y . ,(car y))
+        `(width . ,(- (cdr x) (car x)))
+        `(height . ,(- (cdr y) (car y)))
+        '(fill . "none")
+        '(stroke . "none")
+        '(stroke-width . "0.0"))
    (ec 'a)))
 
 (define (utf-8-string pango-font-description string)
   (let ((escaped-string (string-regexp-substitute
-                         "<" "&lt;"
-                         (string-regexp-substitute "&" "&amp;" string))))
-    (dispatch `(fontify ,pango-font-description
-                       ,(entity 'tspan escaped-string)))))
+                         "<" "&lt;"
+                         (string-regexp-substitute "&" "&amp;" string))))
+    (fontify pango-font-description
+             (entity 'tspan escaped-string))))
index ada4a890f971038302815402eb77582cdd303024..f6bb29d701be0c331fadf51fe6b4410a570de06d 100644 (file)
 (define-module (scm page)
 
   #:export (make-page
-           page-property
-           page-set-property!
-           page-prev
-           page-printable-height
-           layout->page-init
-           page-force
-           page-penalty
-           page-configuration
-           page-lines
-           page-page-number
-           page-system-numbers
-           page-stencil
-           page-free-height
-           page?
-           ))
+            page-property
+            page-set-property!
+            page-prev
+            page-printable-height
+            layout->page-init
+            page-force
+            page-penalty
+            page-configuration
+            page-lines
+            page-page-number
+            page-system-numbers
+            page-stencil
+            page-free-height
+            page?
+            ))
 
 (use-modules (lily)
-            (scm paper-system)
-            (srfi srfi-1))
+             (scm paper-system)
+             (srfi srfi-1))
 
 
 (define (annotate? layout)
@@ -48,9 +48,9 @@
 (define (make-page paper-book  . args)
   (let*
       ((p (apply ly:make-prob (append
-                              (list 'page (layout->page-init (ly:paper-book-paper paper-book))
-                                    'paper-book paper-book)
-                              args))))
+                               (list 'page (layout->page-init (ly:paper-book-paper paper-book))
+                                     'paper-book paper-book)
+                               args))))
 
     (page-set-property! p 'head-stencil (page-header p))
     (page-set-property! p 'foot-stencil (page-footer p))
 
    (lambda (sys-off)
      (let*
-        ((sys (car sys-off))
-         (off (cadr sys-off)))
+         ((sys (car sys-off))
+          (off (cadr sys-off)))
 
        (if (not (number? (ly:prob-property sys 'Y-offset)))
-          (ly:prob-set-property! sys 'Y-offset off))))
+           (ly:prob-set-property! sys 'Y-offset off))))
 
    (zip (page-property page 'lines)
-       (page-property page 'configuration))))
+        (page-property page 'configuration))))
 
 (define (annotate-top-space first-system layout header-stencil stencil)
   (let* ((top-margin (ly:output-def-lookup layout 'top-margin))
-        (sym (if (paper-system-title? first-system)
-                 'top-markup-spacing
-                 'top-system-spacing))
-        (spacing-spec (ly:output-def-lookup layout sym))
-        (X-offset (ly:prob-property first-system 'X-offset 5))
-        (header-extent (ly:stencil-extent header-stencil Y)))
+         (sym (if (paper-system-title? first-system)
+                  'top-markup-spacing
+                  'top-system-spacing))
+         (spacing-spec (ly:output-def-lookup layout sym))
+         (X-offset (ly:prob-property first-system 'X-offset 5))
+         (header-extent (ly:stencil-extent header-stencil Y)))
 
     (set! stencil
-         (ly:stencil-add stencil
-                         (ly:stencil-translate-axis
-                          (annotate-spacing-spec layout
-                                                 spacing-spec
-                                                 (- top-margin)
-                                                 (car header-extent)
-                                                 #:base-color red)
-                          X-offset X)))
+          (ly:stencil-add stencil
+                          (ly:stencil-translate-axis
+                           (annotate-spacing-spec layout
+                                                  spacing-spec
+                                                  (- top-margin)
+                                                  (car header-extent)
+                                                  #:base-color red)
+                           X-offset X)))
     stencil))
 
 
 (define (annotate-page layout stencil)
   (let ((top-margin (ly:output-def-lookup layout 'top-margin))
-       (paper-height (ly:output-def-lookup layout 'paper-height))
-       (bottom-margin (ly:output-def-lookup layout 'bottom-margin))
-       (add-stencil (lambda (y)
-                      (set! stencil
-                            (ly:stencil-add stencil
-                                            (ly:stencil-translate-axis y 6 X))))))
+        (paper-height (ly:output-def-lookup layout 'paper-height))
+        (bottom-margin (ly:output-def-lookup layout 'bottom-margin))
+        (add-stencil (lambda (y)
+                       (set! stencil
+                             (ly:stencil-add stencil
+                                             (ly:stencil-translate-axis y 6 X))))))
     (add-stencil
      (ly:stencil-translate-axis
       (annotate-y-interval layout "paper-height"
-                          (cons (- paper-height) 0)
-                          #t)
+                           (cons (- paper-height) 0)
+                           #t)
       1 X))
     (add-stencil
      (ly:stencil-translate-axis
       (annotate-y-interval layout "top-margin"
-                          (cons (- top-margin) 0)
-                          #t)
+                           (cons (- top-margin) 0)
+                           #t)
       2 X))
     (add-stencil
      (ly:stencil-translate-axis
       (annotate-y-interval layout "bottom-margin"
-                          (cons (- paper-height) (- bottom-margin paper-height))
-                          #t)
+                           (cons (- paper-height) (- bottom-margin paper-height))
+                           #t)
       2 X))
     stencil))
 
       ((paper-book (page-property page 'paper-book))
        (layout (ly:paper-book-paper paper-book))
        (arrow (annotate-y-interval layout
-                                  "space left"
-                                  (cons (- 0.0
-                                           (page-property page 'bottom-edge)
-                                           (let ((foot (page-property page 'foot-stencil)))
-                                             (if (and (ly:stencil? foot)
-                                                      (not (ly:stencil-empty? foot)))
-                                                 (car (ly:stencil-extent foot Y))
-                                                 0.0)))
-                                        (page-property page  'bottom-system-edge))
-                                  #t)))
+                                   "space left"
+                                   (cons (- 0.0
+                                            (page-property page 'bottom-edge)
+                                            (let ((foot (page-property page 'foot-stencil)))
+                                              (if (and (ly:stencil? foot)
+                                                       (not (ly:stencil-empty? foot)))
+                                                  (car (ly:stencil-extent foot Y))
+                                                  0.0)))
+                                         (page-property page  'bottom-system-edge))
+                                   #t)))
 
     (set! arrow (ly:stencil-translate-axis arrow 8 X))
 
        (is-last-bookpart (page-property page 'is-last-bookpart))
        (is-bookpart-last-page (page-property page 'is-bookpart-last-page))
        (sym (if (= dir UP)
-               'make-header
-               'make-footer))
+                'make-header
+                'make-footer))
        (header-proc (ly:output-def-lookup layout sym)))
 
     (if (procedure? header-proc)
-       (header-proc layout scopes number is-last-bookpart is-bookpart-last-page)
-       #f)))
+        (header-proc layout scopes number is-last-bookpart is-bookpart-last-page)
+        #f)))
 
 
 (define (page-header page)
        (left-margin (ly:output-def-lookup layout 'left-margin))
        (right-margin (ly:output-def-lookup layout 'right-margin))
        (bottom-edge (- paper-height
-                      (ly:output-def-lookup layout 'bottom-margin)) )
+                       (ly:output-def-lookup layout 'bottom-margin)) )
        (top-margin (ly:output-def-lookup layout 'top-margin))
        )
 
        (system-xoffset (ly:output-def-lookup layout 'horizontal-shift 0.0))
        (system-separator-markup (ly:output-def-lookup layout 'system-separator-markup))
        (system-separator-stencil (if (markup? system-separator-markup)
-                                    (interpret-markup layout
-                                                      (layout-extract-page-properties layout)
-                                                      system-separator-markup)
-                                    #f))
+                                     (interpret-markup layout
+                                                       (layout-extract-page-properties layout)
+                                                       system-separator-markup)
+                                     #f))
 
        (page-stencil (ly:make-stencil '()))
 
        (last-system #f)
        (last-y 0.0)
        (add-to-page (lambda (stencil x y)
-                     (set! page-stencil
-                           (ly:stencil-add page-stencil
-                                           (ly:stencil-translate stencil
-                                                                 (cons
-                                                                  (+ system-xoffset x)
-                                                                  (- 0 y (prop 'top-margin)))
-
-                                                                 )))))
+                      (set! page-stencil
+                            (ly:stencil-add page-stencil
+                                            (ly:stencil-translate stencil
+                                                                  (cons
+                                                                   (+ system-xoffset x)
+                                                                   (- 0 y (prop 'top-margin)))
+
+                                                                  )))))
        (add-system
-       (lambda (system)
-         (let* ((stencil (paper-system-stencil system))
-                (y (ly:prob-property system 'Y-offset 0))
-                (is-title (paper-system-title?
-                           system)))
-           (add-to-page stencil
-                        (ly:prob-property system 'X-offset 0.0)
-                        y)
-           (if (and (ly:stencil? system-separator-stencil)
-                    last-system
-                    (not (paper-system-title? system))
-                    (not (paper-system-title? last-system)))
-               (add-to-page
-                system-separator-stencil
-                0
-                (average (- last-y
-                            (car (paper-system-staff-extents last-system)))
-                         (- y
-                            (cdr (paper-system-staff-extents system))))))
-           (set! last-system system)
-           (set! last-y y))))
+        (lambda (system)
+          (let* ((stencil (paper-system-stencil system))
+                 (y (ly:prob-property system 'Y-offset 0))
+                 (is-title (paper-system-title?
+                            system)))
+            (add-to-page stencil
+                         (ly:prob-property system 'X-offset 0.0)
+                         y)
+            (if (and (ly:stencil? system-separator-stencil)
+                     last-system
+                     (not (paper-system-title? system))
+                     (not (paper-system-title? last-system)))
+                (add-to-page
+                 system-separator-stencil
+                 0
+                 (average (- last-y
+                             (car (paper-system-staff-extents last-system)))
+                          (- y
+                             (cdr (paper-system-staff-extents system))))))
+            (set! last-system system)
+            (set! last-y y))))
        (head (prop 'head-stencil))
        (foot (prop 'foot-stencil))
        )
 
     (if (and
-        (ly:stencil? head)
-        (not (ly:stencil-empty? head)))
-       (begin
-         ;; Ensure that the top of the header just touches the top margin.
-         (set! head (ly:stencil-translate-axis head
-                                               (- 0 (cdr (ly:stencil-extent head Y)) (prop 'top-margin)) Y))
-         (set! page-stencil (ly:stencil-add page-stencil head))))
+         (ly:stencil? head)
+         (not (ly:stencil-empty? head)))
+        (begin
+          ;; Ensure that the top of the header just touches the top margin.
+          (set! head (ly:stencil-translate-axis head
+                                                (- 0 (cdr (ly:stencil-extent head Y)) (prop 'top-margin)) Y))
+          (set! page-stencil (ly:stencil-add page-stencil head))))
 
     (if (and
-        (annotate? layout)
-        (pair? lines))
+         (annotate? layout)
+         (pair? lines))
 
-       (begin
-         (set! page-stencil (annotate-top-space (car lines) layout head page-stencil))
+        (begin
+          (set! page-stencil (annotate-top-space (car lines) layout head page-stencil))
 
-         (for-each (lambda (sys next-sys)
-                     (paper-system-annotate sys next-sys layout))
-                   lines
-                   (append (cdr lines) (list #f)))
-         (paper-system-annotate-last (car (last-pair lines)) layout)))
+          (for-each (lambda (sys next-sys)
+                      (paper-system-annotate sys next-sys layout))
+                    lines
+                    (append (cdr lines) (list #f)))
+          (paper-system-annotate-last (car (last-pair lines)) layout)))
 
-    (map add-system lines)
+    (for-each add-system lines)
 
 
     (ly:prob-set-property! page 'bottom-system-edge
-                          (car (ly:stencil-extent page-stencil Y)))
+                           (car (ly:stencil-extent page-stencil Y)))
     (ly:prob-set-property! page 'space-left
-                          (+ (prop 'bottom-edge)
-                             (prop 'bottom-system-edge)
-                             (if (and (ly:stencil? foot)
-                                      (not (ly:stencil-empty? foot)))
-                                 (car (ly:stencil-extent foot Y))
-                                 0.0)))
+                           (+ (prop 'bottom-edge)
+                              (prop 'bottom-system-edge)
+                              (if (and (ly:stencil? foot)
+                                       (not (ly:stencil-empty? foot)))
+                                  (car (ly:stencil-extent foot Y))
+                                  0.0)))
 
     (if (annotate? layout)
-       (set! page-stencil
-             (ly:stencil-add page-stencil
-                             (annotate-space-left page))))
+        (set! page-stencil
+              (ly:stencil-add page-stencil
+                              (annotate-space-left page))))
 
     (if (and (ly:stencil? foot)
-            (not (ly:stencil-empty? foot)))
-       (set! page-stencil
-             (ly:stencil-add
-              page-stencil
-              (ly:stencil-translate
-               foot
-               (cons 0
-                     (+ (- (prop 'bottom-edge))
-                        (- (car (ly:stencil-extent foot Y)))))))))
+             (not (ly:stencil-empty? foot)))
+        (set! page-stencil
+              (ly:stencil-add
+               page-stencil
+               (ly:stencil-translate
+                foot
+                (cons 0
+                      (+ (- (prop 'bottom-edge))
+                         (- (car (ly:stencil-extent foot Y)))))))))
 
     (if (ly:output-def-lookup layout 'two-sided #f)
-       (set! page-stencil
-             (ly:stencil-translate page-stencil
-                                   (cons (prop (if (even? number)
-                                                   'left-margin
-                                                   'right-margin))
-                                         0)))
-       (set! page-stencil
-             (ly:stencil-translate page-stencil (cons (prop 'left-margin) 0))))
+        (set! page-stencil
+              (ly:stencil-translate page-stencil
+                                    (cons (prop (if (even? number)
+                                                    'left-margin
+                                                    'right-margin))
+                                          0)))
+        (set! page-stencil
+              (ly:stencil-translate page-stencil (cons (prop 'left-margin) 0))))
 
     ;; annotation.
     (if (annotate? layout)
-       (set! page-stencil (annotate-page layout page-stencil)))
+        (set! page-stencil (annotate-page layout page-stencil)))
 
     page-stencil))
 
       ((paper-book (page-property page 'paper-book))
        (layout (ly:paper-book-paper paper-book))
        (h (- (ly:output-def-lookup layout 'paper-height)
-            (ly:output-def-lookup layout 'top-margin)
-            (ly:output-def-lookup layout 'bottom-margin)))
+             (ly:output-def-lookup layout 'top-margin)
+             (ly:output-def-lookup layout 'bottom-margin)))
 
        (head (page-property page 'head-stencil))
        (foot (page-property page 'foot-stencil))
        (available
-       (- h (if (ly:stencil? head)
-                (interval-length (ly:stencil-extent head Y))
-                0)
-          (if (ly:stencil? foot)
-              (interval-length (ly:stencil-extent foot Y))
-              0))))
+        (- h (if (ly:stencil? head)
+                 (interval-length (ly:stencil-extent head Y))
+                 0)
+           (if (ly:stencil? foot)
+               (interval-length (ly:stencil-extent foot Y))
+               0))))
 
     ;; (display (list "\n available" available head foot))
     available))
       (page-set-property! page 'printable-height (calc-printable-height page)))
 
   (page-property page 'printable-height))
-
index 5a368dbe623b6bc772a623841ee88d4b4c91ae77..e75440b968256bc77157f739178568f424dbb78c 100644 (file)
 (define-module (scm paper-system))
 
 (use-modules (lily)
-            (srfi srfi-1)
-            (ice-9 optargs))
+             (srfi srfi-1)
+             (ice-9 optargs))
 
 (define-public (paper-system-title? system)
   (equal? #t (ly:prob-property system 'is-title)
-         ))
+          ))
 
 (define (system-stencil system-grob main-stencil)
   (let* ((padding (ly:grob-property system-grob 'in-note-padding #f))
@@ -31,8 +31,8 @@
          (in-notes (if in-notes in-notes empty-stencil))
          (direction (if padding (ly:grob-property system-grob 'in-note-direction) UP)))
     (if padding
-       (ly:stencil-combine-at-edge main-stencil Y direction in-notes padding)
-       main-stencil)))
+        (ly:stencil-combine-at-edge main-stencil Y direction in-notes padding)
+        main-stencil)))
 
 (define-public (paper-system-stencil system)
   (let ((main-stencil (ly:prob-property system 'stencil))
@@ -46,8 +46,8 @@
       ((g (paper-system-system-grob system)))
 
     (if (ly:grob? g)
-       (ly:grob-layout  g)
-       #f)))
+        (ly:grob-layout  g)
+        #f)))
 
 (define-public (paper-system-system-grob paper-system)
   (ly:prob-property paper-system 'system-grob))
        (y-extent (paper-system-extent system Y))
        (x-extent (paper-system-extent system X))
        (stencil (ly:prob-property system 'stencil))
-     
+
        (arrow (if (number? bottomspace)
-              (annotate-y-interval layout
-                                   "bottom-space"
-                                   (cons (- (car y-extent) bottomspace)
-                                         (car y-extent))
-                                   #t)
-              #f)))
-    
+                  (annotate-y-interval layout
+                                       "bottom-space"
+                                       (cons (- (car y-extent) bottomspace)
+                                             (car y-extent))
+                                       #t)
+                  #f)))
+
     (if arrow
-       (set! stencil
-             (ly:stencil-add stencil arrow)))
+        (set! stencil
+              (ly:stencil-add stencil arrow)))
 
     (set! (ly:prob-property system 'stencil)
-         stencil)
-  ))
+          stencil)
+    ))
 
 
 ;; 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))
+                                  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)))
+         (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)))
+        annotation
+        empty-stencil)))
+
 
-        
 (define-public (paper-system-annotate system next-system layout)
   "Add arrows and texts to indicate which lengths are set."
 
   (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))))
+         (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-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))
+         (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))
 
-        (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))))
+         (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))
+         (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 (skyline-pair-and-non-empty? 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))))))
+         (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 5.5
-                             (list annotations
-                                   estimate-extent))))
+    (if estimate-extent
+        (set! annotations
+              (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 ccbfe50176a11866589e8ef5ab9a83fc7b1bfac2..454371fa34b935ee37ba28fc9af9c15c049c2ff4 100644 (file)
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-; for define-safe-public when byte-compiling using Guile V2
+;; for define-safe-public when byte-compiling using Guile V2
 (use-modules (scm safe-utility-defs))
 
 (define-public (set-paper-dimension-variables mod)
   (module-define! mod 'dimension-variables
-                 '(blot-diameter
-                   bottom-margin
-                   cm
-                   footnote-footer-padding
-                   footnote-padding
-                   horizontal-shift
-                   in
-                   indent
-                   inner-margin
-                   inner-margin-default-scaled
-                   ledger-line-thickness
-                   left-margin
+                  '(blot-diameter
+                    bottom-margin
+                    cm
+                    footnote-footer-padding
+                    footnote-padding
+                    horizontal-shift
+                    in
+                    indent
+                    inner-margin
+                    inner-margin-default-scaled
+                    ledger-line-thickness
+                    left-margin
                     left-margin-default-scaled
-                   line-thickness
-                   line-width
-                   mm
-                   outer-margin
-                   outer-margin-default-scaled
-                   paper-height
-                   paper-width
-                   pt
-                   right-margin
+                    line-thickness
+                    line-width
+                    mm
+                    outer-margin
+                    outer-margin-default-scaled
+                    paper-height
+                    paper-width
+                    pt
+                    right-margin
                     right-margin-default-scaled
-                   short-indent
-                   staff-height
-                   staff-space
-                   top-margin)))
+                    short-indent
+                    staff-height
+                    staff-space
+                    top-margin)))
 
 (define (calc-line-thickness staff-space pt)
   ;; linear interpolation.
@@ -70,7 +70,7 @@
        (ss (/ staff-height 4))
        (factor (/ staff-height (* 20 pt)))
        (setm! (lambda (sym val)
-               (module-define! module sym val))))
+                (module-define! module sym val))))
 
     ;; Synchronized with the `text-font-size'
     ;; binding in add-pango-fonts (see font.scm).
 (define-safe-public (set-global-staff-size sz)
   "Set the default staff size, where SZ is thought to be in PT."
   (let* ((current-mod (current-module))
-        (parser (eval 'parser current-mod))
-        (pap (ly:parser-lookup parser '$defaultpaper))
-        (in-layout? (or (module-defined? current-mod 'is-paper)
-                        (module-defined? current-mod 'is-layout)))
+         (parser (eval 'parser current-mod))
+         (pap (ly:parser-lookup parser '$defaultpaper))
+         (in-layout? (or (module-defined? current-mod 'is-paper)
+                         (module-defined? current-mod 'is-layout)))
 
-        ;; maybe not necessary.
-        ;; but let's be paranoid. Maybe someone still refers to the
-        ;; old one.
-        (new-paper (ly:output-def-clone pap))
+         ;; maybe not necessary.
+         ;; but let's be paranoid. Maybe someone still refers to the
+         ;; old one.
+         (new-paper (ly:output-def-clone pap))
 
-        (new-scope (ly:output-def-scope new-paper)))
+         (new-scope (ly:output-def-scope new-paper)))
 
     (if in-layout?
-       (ly:warning (_ "set-global-staff-size: not in toplevel scope")))
+        (ly:warning (_ "set-global-staff-size: not in toplevel scope")))
 
     (layout-set-absolute-staff-size-in-module new-scope
-                                             (* sz (eval 'pt new-scope)))
+                                              (* sz (eval 'pt new-scope)))
     (module-define! current-mod '$defaultpaper new-paper)))
 
 (define-public paper-alist
     ))
 
 ;; todo: take dimension arguments.
-
-(define (set-paper-dimensions m w h)
+(define (lookup-paper-name module name landscape?)
+  "Look up @var{name} and return a number pair of width and height,
+where @var{landscape?} specifies whether the dimensions should be swapped
+unless explicitly overriden in the name."
+  (let* ((swapped?
+          (cond ((string-suffix? "landscape" name)
+                 (set! name
+                       (string-trim-right (string-drop-right name 9)))
+                 #t)
+                ((string-suffix? "portrait" name)
+                 (set! name
+                       (string-trim-right (string-drop-right name 8)))
+                 #f)
+                (else landscape?)))
+         (is-paper? (module-defined? module 'is-paper))
+         (entry (and is-paper?
+                     (eval-carefully (assoc-get name paper-alist)
+                                     module
+                                     #f))))
+    (and entry is-paper?
+         (if swapped? (cons (cdr entry) (car entry)) entry))))
+
+(define (set-paper-dimensions m w h landscape?)
   "M is a module (i.e. layout->scope_ )"
   (let*
       ;; page layout - what to do with (printer specific!) margin settings?
-      ((paper-default (eval-carefully
-                      (assoc-get
-                       (ly:get-option 'paper-size)
-                       paper-alist
-                       #f
-                       #t)
-                      m
-                      (cons w h)))
-       ;; Horizontal margins, marked with 'preserve, are stored
+      ((paper-default (or (lookup-paper-name
+                           m (ly:get-option 'paper-size) landscape?)
+                          (cons w h)))
+       ;; Horizontal margins, marked with #t in the cddr, are stored
        ;; in renamed variables because they must not be overwritten.
+       ;; The cadr indicates whether a value is a vertical dimension.
        ;; Output_def::normalize () needs to know
        ;; whether the user set the value or not.
-       (scaleable-values `((("left-margin" . ,w) . preserve)
-                          (("right-margin" . ,w) . preserve)
-                          (("inner-margin" . ,w) . preserve)
-                          (("outer-margin" . ,w) . preserve)
-                          (("binding-offset" . ,w) . '())
-                          (("top-margin" . ,h) . '())
-                          (("bottom-margin" . ,h) . '())
-                          (("indent" . ,w) . '())
-                          (("short-indent" . ,w) . '())))
+       (scaleable-values '(("left-margin" #f . #t)
+                           ("right-margin" #f . #t)
+                           ("inner-margin" #f . #t)
+                           ("outer-margin" #f . #t)
+                           ("binding-offset" #f . #f)
+                           ("top-margin" #t . #f)
+                           ("bottom-margin" #t . #f)
+                           ("indent" #f . #f)
+                           ("short-indent" #f . #f)))
        (scaled-values
-       (map
+        (map
          (lambda (entry)
            (let ((entry-symbol
-                 (string->symbol
-                  (string-append (caar entry) "-default")))
-                (orientation (cdar entry)))
-            (if paper-default
-                (cons (if (eq? (cdr entry) 'preserve)
-                          (string-append (caar entry) "-default-scaled")
-                          (caar entry))
-                      (round (* orientation
-                                (/ (eval-carefully entry-symbol m 0)
-                                   (if (= orientation w)
-                                       (car paper-default)
-                                       (cdr paper-default))))))
-                entry)))
-        scaleable-values)))
+                  (string->symbol
+                   (string-append (car entry) "-default")))
+                 (vertical? (cadr entry)))
+             (cons (if (cddr entry)
+                       (string-append (car entry) "-default-scaled")
+                       (car entry))
+                   (round (* (if vertical? h w)
+                             (/ (eval-carefully entry-symbol m 0)
+                                ((if vertical? cdr car)
+                                 paper-default)))))))
+         scaleable-values)))
 
     (module-define! m 'paper-width w)
     (module-define! m 'paper-height h)
     (for-each
      (lambda (value)
        (let ((value-symbol (string->symbol (car value)))
-            (number (cdr value)))
-        (module-define! m value-symbol number)))
+             (number (cdr value)))
+         (module-define! m value-symbol number)))
      scaled-values)))
 
 (define (internal-set-paper-size module name landscape?)
-  (let* ((entry-name name)
-        (swapped?
-         (cond ((string-suffix? "landscape" name)
-                (set! entry-name
-                      (string-trim-right (string-drop-right name 9)))
-                #t)
-               ((string-suffix? "portrait" name)
-                (set! entry-name
-                      (string-trim-right (string-drop-right name 8)))
-                #f)
-               (else landscape?)))
-        (entry (assoc-get entry-name paper-alist))
-        (is-paper? (module-defined? module 'is-paper))
-        (mm (eval 'mm module)))
-    (define (swap x)
-      (cons (cdr x) (car x)))
-
+  (let* ((entry (lookup-paper-name module name landscape?))
+         (is-paper? (module-defined? module 'is-paper)))
     (cond
      ((not is-paper?)
       (ly:warning (_ "This is not a \\layout {} object, ~S") module))
      (entry
-      (set! entry (eval entry module))
-      (if swapped?
-         (set! entry (swap entry)))
-      (set-paper-dimensions module (car entry) (cdr entry))
-      
+      (set-paper-dimensions module (car entry) (cdr entry) landscape?)
+
       (module-define! module 'papersizename name)
       (module-define! module 'landscape
-                     (if landscape? #t #f)))
+                      (if landscape? #t #f)))
      (else
       (ly:warning (_ "Unknown paper size: ~a") name)))))
 
 (define-safe-public (set-default-paper-size name . rest)
-  (internal-set-paper-size
-   (ly:output-def-scope (eval '$defaultpaper (current-module)))
-   name
-   (memq 'landscape rest)))
+  (let* ((pap (module-ref (current-module) '$defaultpaper))
+         (new-paper (ly:output-def-clone pap))
+         (new-scope (ly:output-def-scope new-paper)))
+    (internal-set-paper-size
+     new-scope
+     name
+     (memq 'landscape rest))
+    (module-set! (current-module) '$defaultpaper new-paper)))
 
 (define-public (set-paper-size name . rest)
   (if (module-defined? (current-module) 'is-paper)
       (internal-set-paper-size (current-module) name
-                              (memq 'landscape rest))
+                               (memq 'landscape rest))
 
       ;;; TODO: should raise (generic) exception with throw, and catch
       ;;; that in parse-scm.cc
 (define-public (scale-layout paper scale)
   "Return a clone of the paper, scaled by the given scale factor."
   (let* ((new-paper (ly:output-def-clone paper))
-        (dim-vars (ly:output-def-lookup paper 'dimension-variables))
-        (old-scope (ly:output-def-scope paper))
-        (scope (ly:output-def-scope new-paper)))
+         (dim-vars (ly:output-def-lookup paper 'dimension-variables))
+         (old-scope (ly:output-def-scope paper))
+         (scope (ly:output-def-scope new-paper)))
 
     (for-each
      (lambda (v)
        (let* ((var (module-variable old-scope v))
-             (val (if (variable? var) (variable-ref var) #f)))
+              (val (if (variable? var) (variable-ref var) #f)))
 
-        (if (number? val)
-            (module-define! scope v (/ val scale))
-            ;; Cannot warn for non-numbers, eg. for paper-width, paper-height.
-            )))
+         (if (number? val)
+             (module-define! scope v (/ val scale))
+             ;; Cannot warn for non-numbers, eg. for paper-width, paper-height.
+             )))
      dim-vars)
     ;; Mark the clone.
     (ly:output-def-set-variable! new-paper 'cloned #t)
index 6d46cc626cc8df1cc64743af3428bed24fc665d7..6ba1261ca726846bf4093a9f11fc748d21e66766 100644 (file)
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
 
-;; (name . (glyph clef-position octavation))
+;; (name . (glyph clef-position transposition))
 ;;
-;; -- the name clefOctavation is misleading. The value 7 is 1 octave,
-;; not 7 Octaves.
+;; -- the name clefTransposition is a bit misleading. Value 7 means
+;; a transposition of an octave, not a seventh.
 (define-public supported-clefs
   '(("treble" . ("clefs.G" -2 0))
     ("violin" . ("clefs.G" -2 0))
     ("hufnagel-fa1" . ("clefs.hufnagel.fa" -1 0))
     ("hufnagel-fa2" . ("clefs.hufnagel.fa" 1 0))
     ("hufnagel-do-fa" . ("clefs.hufnagel.do.fa" 4 0))
-    ("mensural-c1" . ("clefs.mensural.c" -2 0))
-    ("mensural-c2" . ("clefs.mensural.c" 0 0))
-    ("mensural-c3" . ("clefs.mensural.c" 2 0))
-    ("mensural-c4" . ("clefs.mensural.c" 4 0))
+    ("mensural-c1" . ("clefs.mensural.c" -4 0))
+    ("mensural-c2" . ("clefs.mensural.c" -2 0))
+    ("mensural-c3" . ("clefs.mensural.c" 0 0))
+    ("mensural-c4" . ("clefs.mensural.c" 2 0))
+    ("mensural-c5" . ("clefs.mensural.c" 4 0))
+    ("blackmensural-c1" . ("clefs.blackmensural.c" -4 0))
+    ("blackmensural-c2" . ("clefs.blackmensural.c" -2 0))
+    ("blackmensural-c3" . ("clefs.blackmensural.c" 0 0))
+    ("blackmensural-c4" . ("clefs.blackmensural.c" 2 0))
+    ("blackmensural-c5" . ("clefs.blackmensural.c" 4 0))
     ("mensural-f" . ("clefs.mensural.f" 2 0))
     ("mensural-g" . ("clefs.mensural.g" -2 0))
     ("neomensural-c1" . ("clefs.neomensural.c" -4 0))
     ("neomensural-c2" . ("clefs.neomensural.c" -2 0))
     ("neomensural-c3" . ("clefs.neomensural.c" 0 0))
     ("neomensural-c4" . ("clefs.neomensural.c" 2 0))
+    ("neomensural-c5" . ("clefs.neomensural.c" 4 0))
     ("petrucci-c1" . ("clefs.petrucci.c1" -4 0))
     ("petrucci-c2" . ("clefs.petrucci.c2" -2 0))
     ("petrucci-c3" . ("clefs.petrucci.c3" 0 0))
     ("clefs.mensural.c" . 0)
     ("clefs.mensural.f" . 4)
     ("clefs.mensural.g" . -4)
+    ("clefs.blackmensural.c" . 0)
     ("clefs.neomensural.c" . 0)
     ("clefs.petrucci.c1" . 0)
     ("clefs.petrucci.c2" . 0)
   "Generate the clef setting commands for a clef with name @var{clef-name}."
   (define (make-prop-set props)
     (let ((m (make-music 'PropertySet)))
-      (map (lambda (x) (set! (ly:music-property m (car x)) (cdr x))) props)
+      (for-each (lambda (x) (set! (ly:music-property m (car x)) (cdr x))) props)
       m))
   (let ((e '())
-       (c0 0)
-       (oct 0)
-       (match (string-match "^(.*)([_^])([1-9][0-9]*)$" clef-name)))
+        (c0 0)
+        (oct 0)
+        (style 'default)
+        (match (string-match "^(.*)([_^])([^0-9a-zA-Z]*)([1-9][0-9]*)([^0-9a-zA-Z]*)$" clef-name)))
     (if match
-       (begin
-         (set! clef-name (match:substring match 1))
-         (set! oct
-               (* (if (equal? (match:substring match 2) "^") -1 1)
-                  (- (string->number (match:substring match 3)) 1)))))
+        (begin
+          (set! clef-name (match:substring match 1))
+          (set! oct
+                (* (if (equal? (match:substring match 2) "^") -1 1)
+                   (- (string->number (match:substring match 4)) 1)))
+          (set! style
+                (cond ((equal? (match:substring match 3) "(") 'parenthesized)
+                      ((equal? (match:substring match 3) "[") 'bracketed)
+                      (else style)))))
     (set! e (assoc-get clef-name supported-clefs))
     (if e
-       (let* ((musics (map make-prop-set
-                           `(((symbol . clefGlyph) (value . ,(car e)))
-                             ((symbol . middleCClefPosition)
-                              (value . ,(+ oct
-                                           (cadr e)
-                                           (assoc-get (car e) c0-pitch-alist))))
-                             ((symbol . clefPosition) (value . ,(cadr e)))
-                             ((symbol . clefOctavation) (value . ,(- oct))))))
-              (recalc-mid-C (make-music 'ApplyContext))
-              (seq (make-music 'SequentialMusic
-                               'elements (append musics (list recalc-mid-C))))
-              (csp (make-music 'ContextSpeccedMusic)))
-         (set! (ly:music-property recalc-mid-C 'procedure) ly:set-middle-C!)
-         (context-spec-music seq 'Staff))
-       (begin
-         (ly:warning (_ "unknown clef type `~a'") clef-name)
-         (ly:warning (_ "supported clefs: ~a")
-                     (string-join
-                      (sort (map car supported-clefs) string<?)))
-         (make-music 'Music)))))
+        (let* ((prop-list `(((symbol . clefGlyph) (value . ,(car e)))
+                            ((symbol . middleCClefPosition)
+                             (value . ,(+ oct
+                                          (cadr e)
+                                          (assoc-get (car e) c0-pitch-alist))))
+                            ((symbol . clefPosition) (value . ,(cadr e)))
+                            ((symbol . clefTransposition) (value . ,(- oct)))))
+               ;; the clefTranspositionStyle property is set only when
+               ;; not 'default to calm display-lily-tests.scm
+               (prop-list (if (eq? style 'default)
+                              prop-list
+                              (append
+                               prop-list
+                               `(((symbol . clefTranspositionStyle)
+                                  (value . ,style))))))
+               (musics (map make-prop-set prop-list))
+               (recalc-mid-C (make-music 'ApplyContext))
+               (seq (make-music 'SequentialMusic
+                                'elements (append musics (list recalc-mid-C))))
+               (csp (make-music 'ContextSpeccedMusic)))
+          (set! (ly:music-property recalc-mid-C 'procedure) ly:set-middle-C!)
+          (context-spec-music seq 'Staff))
+        (begin
+          (ly:warning (_ "unknown clef type `~a'") clef-name)
+          (ly:warning (_ "supported clefs: ~a")
+                      (string-join
+                       (sort (map car supported-clefs) string<?)))
+          (make-music 'Music)))))
 
 (define-public (make-cue-clef-set clef-name)
   "Generate the clef setting commands for a cue clef with name
 @var{clef-name}."
-  (define (make-prop-set props)
-    (let ((m (make-music 'PropertySet)))
-      (map (lambda (x) (set! (ly:music-property m (car x)) (cdr x))) props)
-      m))
-  (let ((e '())
-       (c0 0)
-       (oct 0)
-       (match (string-match "^(.*)([_^])([1-9][0-9]*)$" clef-name)))
-    (if match
-       (begin
-         (set! clef-name (match:substring match 1))
-         (set! oct
-               (* (if (equal? (match:substring match 2) "^") -1 1)
-                  (- (string->number (match:substring match 3)) 1)))))
-    (set! e (assoc-get clef-name supported-clefs))
-    (if e
-       (let* ((musics (map make-prop-set
-                           `(((symbol . cueClefGlyph) (value . ,(car e)))
-                             ((symbol . middleCCuePosition)
-                              (value . ,(+ oct
-                                           (cadr e)
-                                           (assoc-get (car e) c0-pitch-alist))))
-                             ((symbol . cueClefPosition) (value . ,(cadr e)))
-                             ((symbol . cueClefOctavation) (value . ,(- oct))))))
-              (recalc-mid-C (make-music 'ApplyContext))
-              (seq (make-music 'SequentialMusic
-                               'elements (append musics (list recalc-mid-C))))
-              (csp (make-music 'ContextSpeccedMusic)))
-         (set! (ly:music-property recalc-mid-C 'procedure) ly:set-middle-C!)
-         (context-spec-music seq 'Staff))
-       (begin
-         (ly:warning (_ "unknown clef type `~a'") clef-name)
-         (ly:warning (_ "supported clefs: ~a")
-                     (string-join
-                      (sort (map car supported-clefs) string<?)))
-         (make-music 'Music)))))
-
+  (define cue-clef-map
+    '((clefGlyph . cueClefGlyph)
+      (middleCClefPosition . middleCCuePosition)
+      (clefPosition . cueClefPosition)
+      (clefTransposition . cueClefTransposition)
+      (clefTranspositionStyle . cueClefTranspositionStyle)))
+  (let ((clef (make-clef-set clef-name)))
+    (for-each
+     (lambda (m)
+       (let ((mapped (assq-ref cue-clef-map
+                               (ly:music-property m 'symbol))))
+         (if mapped
+             (set! (ly:music-property m 'symbol) mapped))))
+     (extract-named-music clef 'PropertySet))
+    clef))
 
 (define-public (make-cue-clef-unset)
   "Reset the clef settings for a cue clef."
-  (define (make-prop-unset props)
-    (let ((m (make-music 'PropertyUnset)))
-      (set! (ly:music-property m (car props)) (cdr props))
-      m))
-  (let* ((musics (map make-prop-unset
-                       `((symbol . cueClefGlyph)
-                         (symbol . middleCCuePosition)
-                         (symbol . cueClefPosition)
-                         (symbol . cueClefOctavation))))
-        (recalc-mid-C (make-music 'ApplyContext))
-        (seq (make-music 'SequentialMusic
-                         'elements (append musics (list recalc-mid-C))))
-        (csp (make-music 'ContextSpeccedMusic)))
-    (set! (ly:music-property recalc-mid-C 'procedure) ly:set-middle-C!)
-    (context-spec-music seq 'Staff)))
-
+  (map-some-music
+   (lambda (m)
+     (and (eq? (ly:music-property m 'name) 'PropertySet)
+          (make-music 'PropertyUnset
+                      'symbol (ly:music-property m 'symbol))))
+   (make-cue-clef-set "treble_(8)")))
 
 ;; a function to add new clefs at runtime
-(define-public (add-new-clef clef-name clef-glyph clef-position octavation c0-position)
+(define-public (add-new-clef clef-name clef-glyph clef-position transposition c0-position)
   "Append the entries for a clef symbol to supported clefs and
 @code{c0-pitch-alist}."
   (set! supported-clefs
-        (acons clef-name (list clef-glyph clef-position octavation) supported-clefs))
+        (acons clef-name (list clef-glyph clef-position transposition) supported-clefs))
   (set! c0-pitch-alist
         (acons clef-glyph c0-position c0-pitch-alist)))
index ad95a16d24d2f74ebc70e793b6d485f09a67d2e4..7d72a25e8769959e422b591ee06e3603d9eac906 100644 (file)
 from @var{port} and return the corresponding Scheme music expression.
 @samp{$} and @samp{#} introduce immediate and normal Scheme forms."
   (let* ((closures '())
-        (filename (port-filename port))
-        (line (port-line port))
-        (lily-string (call-with-output-string
-                      (lambda (out)
-                        (let ((copycat 
-                               (make-soft-port
-                                (vector #f #f #f
-                                        (lambda ()
-                                          (let ((x (read-char port)))
-                                            (write-char x out)
-                                            x)) #f)
-                                "r")))
-                          (set-port-filename! copycat filename)
-                          (do ((c (read-char port) (read-char port)))
-                              ((and (char=? c #\#)
-                                    (char=? (peek-char port) #\}))
-                               ;; we stop when #} is encountered
-                               (read-char port))
-                            (write-char c out)
-                            ;; a #scheme or $scheme expression
-                            (if (or (char=? c #\#) (char=? c #\$))
-                                (let* ((p (ftell out))
-                                       (expr
-                                        (begin
-                                          (set-port-line! copycat
-                                                          (port-line port))
-                                          (set-port-column! copycat
-                                                            (port-column port))
-                                          (if (char=? (peek-char port) #\@)
-                                              (read-char copycat))
-                                          (read copycat))))
-                                  ;; kill unused lookahead, it has been
-                                  ;; written out already
-                                  (drain-input copycat)
-                                  ;; only put symbols and non-quote
-                                  ;; lists into closures -- constants
-                                  ;; don't need lexical environments
-                                  ;; for evaluation.
-                                  (if (or (symbol? expr)
-                                          (and (pair? expr)
-                                               (not (eq? 'quote (car expr)))))
-                                      (set! closures
-                                            (cons `(cons ,p (lambda () ,expr))
-                                                  closures)))))))))))
-    (define (embedded-lilypond parser lily-string filename line closures)
-      (let* ((clone (ly:parser-clone parser closures))
-            (result (ly:parse-string-expression clone lily-string
-                                                filename line)))
-       (if (ly:parser-has-error? clone)
-           (ly:parser-error parser (_ "error in #{ ... #}")))
-       result))
-    (list embedded-lilypond 'parser lily-string filename line (cons 'list (reverse! closures)))))
+         (filename (port-filename port))
+         (line (port-line port))
+         (lily-string (call-with-output-string
+                       (lambda (out)
+                         (let ((copycat
+                                (make-soft-port
+                                 (vector #f #f #f
+                                         (lambda ()
+                                           (let ((x (read-char port)))
+                                             (write-char x out)
+                                             x)) #f)
+                                 "r")))
+                           (set-port-filename! copycat filename)
+                           (do ((c (read-char port) (read-char port)))
+                               ((and (char=? c #\#)
+                                     (char=? (peek-char port) #\}))
+                                ;; we stop when #} is encountered
+                                (read-char port))
+                             (write-char c out)
+                             ;; a #scheme or $scheme expression
+                             (if (or (char=? c #\#) (char=? c #\$))
+                                 (let* ((p (ftell out))
+                                        (expr
+                                         (begin
+                                           (set-port-line! copycat
+                                                           (port-line port))
+                                           (set-port-column! copycat
+                                                             (port-column port))
+                                           (if (char=? (peek-char port) #\@)
+                                               (read-char copycat))
+                                           (read copycat))))
+                                   ;; kill unused lookahead, it has been
+                                   ;; written out already
+                                   (drain-input copycat)
+                                   ;; only put symbols and non-quote
+                                   ;; lists into closures -- constants
+                                   ;; don't need lexical environments
+                                   ;; for evaluation.
+                                   (if (or (symbol? expr)
+                                           (and (pair? expr)
+                                                (not (eq? 'quote (car expr)))))
+                                       (set! closures
+                                             (cons `(cons ,p (lambda () ,expr))
+                                                   closures)))))))))))
+    (define (embedded-lilypond parser lily-string filename line
+                               closures location)
+      (let* ((clone (ly:parser-clone parser closures location))
+             (result (ly:parse-string-expression clone lily-string
+                                                 filename line)))
+        (if (ly:parser-has-error? clone)
+            (ly:parser-error parser (_ "error in #{ ... #}")))
+        result))
+    (list embedded-lilypond
+          'parser lily-string filename line
+          (cons 'list (reverse! closures))
+          'location)))
 
 (read-hash-extend #\{ read-lily-expression)
index 7deeeeb4815615f4ffb5e9ff48b1dcda321a716a..4e3e4b66031c178316ecb7a340fe0f32600842b6 100644 (file)
@@ -20,7 +20,7 @@
 
 (define-class <Voice-state> ()
   (event-list #:init-value '() #:accessor events #:init-keyword #:events)
-  (when-moment #:accessor when #:init-keyword #:when)
+  (when-moment #:accessor moment #:init-keyword #:moment)
   (tuning #:accessor tuning #:init-keyword #:tuning)
   (split-index #:accessor split-index)
   (vector-index)
@@ -32,7 +32,7 @@
   (spanner-state #:init-value '() #:accessor span-state))
 
 (define-method (write (x <Voice-state> ) file)
-  (display (when x) file)
+  (display (moment x) file)
   (display " evs = " file)
   (display (events x) file)
   (display " active = " file)
 
 (define-method (previous-voice-state (vs <Voice-state>))
   (let ((i (slot-ref vs 'vector-index))
-       (v (slot-ref vs 'state-vector)))
+        (v (slot-ref vs 'state-vector)))
     (if (< 0 i)
-       (vector-ref v (1- i))
-       #f)))
+        (vector-ref v (1- i))
+        #f)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
   (configuration #:init-value '() #:accessor configuration)
   ;; Allow overriding split configuration, takes precedence over configuration
   (forced-configuration #:init-value #f #:accessor forced-configuration)
-  (when-moment #:accessor when #:init-keyword #:when)
+  (when-moment #:accessor moment #:init-keyword #:moment)
   ;; voice-states are states starting with the Split-state or later
   ;;
   (is #:init-keyword #:voice-states #:accessor voice-states)
-  (synced  #:init-keyword #:synced #:init-value         #f #:getter synced?))
+  (synced  #:init-keyword #:synced #:init-value  #f #:getter synced?))
 
 
 (define-method (write (x <Split-state> ) f)
-  (display (when x) f)
+  (display (moment x) f)
   (display " = " f)
   (display (configuration x) f)
   (if (synced? x)
 
 (define (make-voice-states evl)
   (let ((vec (list->vector (map (lambda (v)
-                                 (make <Voice-state>
-                                   #:when (caar v)
-                                   #:tuning (cdar v)
-                                   #:events (map car (cdr v))))
-                               evl))))
+                                  (make <Voice-state>
+                                    #:moment (caar v)
+                                    #:tuning (cdar v)
+                                    #:events (map car (cdr v))))
+                                evl))))
     (do ((i 0 (1+ i)))
-       ((= i (vector-length vec)) vec)
+        ((= i (vector-length vec)) vec)
       (slot-set! (vector-ref vec i) 'vector-index i)
       (slot-set! (vector-ref vec i) 'state-vector vec))))
 
@@ -99,29 +99,29 @@ Voice-state objects
 "
   (define (helper ss-idx ss-list idx1 idx2)
     (let* ((state1 (if (< idx1 (vector-length vs1)) (vector-ref vs1 idx1) #f))
-          (state2 (if (< idx2 (vector-length vs2)) (vector-ref vs2 idx2) #f))
-          (min (cond ((and state1 state2) (moment-min (when state1) (when state2)))
-                     (state1 (when state1))
-                     (state2 (when state2))
-                     (else #f)))
-          (inc1 (if (and state1 (equal? min (when state1))) 1 0))
-          (inc2 (if (and state2 (equal? min (when state2))) 1 0))
-          (ss-object (if min
-                         (make <Split-state>
-                           #:when min
-                           #:voice-states (cons state1 state2)
-                           #:synced (= inc1 inc2))
-                         #f)))
+           (state2 (if (< idx2 (vector-length vs2)) (vector-ref vs2 idx2) #f))
+           (min (cond ((and state1 state2) (moment-min (moment state1) (moment state2)))
+                      (state1 (moment state1))
+                      (state2 (moment state2))
+                      (else #f)))
+           (inc1 (if (and state1 (equal? min (moment state1))) 1 0))
+           (inc2 (if (and state2 (equal? min (moment state2))) 1 0))
+           (ss-object (if min
+                          (make <Split-state>
+                            #:moment min
+                            #:voice-states (cons state1 state2)
+                            #:synced (= inc1 inc2))
+                          #f)))
       (if state1
-         (set! (split-index state1) ss-idx))
+          (set! (split-index state1) ss-idx))
       (if state2
-         (set! (split-index state2) ss-idx))
+          (set! (split-index state2) ss-idx))
       (if min
-         (helper (1+ ss-idx)
-                 (cons ss-object ss-list)
-                 (+ idx1 inc1)
-                 (+ idx2 inc2))
-         ss-list)))
+          (helper (1+ ss-idx)
+                  (cons ss-object ss-list)
+                  (+ idx1 inc1)
+                  (+ idx2 inc2))
+          ss-list)))
   (list->vector (reverse! (helper 0 '() 0  0) '())))
 
 (define (analyse-spanner-states voice-state-vec)
@@ -131,70 +131,70 @@ Voice-state objects
 
     (define (analyse-tie-start active ev)
       (if (ly:in-event-class? ev 'tie-event)
-         (acons 'tie (split-index (vector-ref voice-state-vec index))
-                active)
-         active))
+          (acons 'tie (split-index (vector-ref voice-state-vec index))
+                 active)
+          active))
 
     (define (analyse-tie-end active ev)
       (if (ly:in-event-class? ev 'note-event)
-         (assoc-remove! active 'tie)
-         active))
+          (assoc-remove! active 'tie)
+          active))
 
     (define (analyse-absdyn-end active ev)
       (if (or (ly:in-event-class? ev 'absolute-dynamic-event)
-             (and (ly:in-event-class? ev 'span-dynamic-event)
-                  (equal? STOP (ly:event-property ev 'span-direction))))
-         (assoc-remove! (assoc-remove! active 'cresc) 'decr)
-         active))
+              (and (ly:in-event-class? ev 'span-dynamic-event)
+                   (equal? STOP (ly:event-property ev 'span-direction))))
+          (assoc-remove! (assoc-remove! active 'cresc) 'decr)
+          active))
 
     (define (active<? a b)
       (cond ((symbol<? (car a) (car b)) #t)
-           ((symbol<? (car b) (car a)) #f)
-           (else (< (cdr a) (cdr b)))))
+            ((symbol<? (car b) (car a)) #f)
+            (else (< (cdr a) (cdr b)))))
 
     (define (analyse-span-event active ev)
       (let* ((name (car (ly:event-property ev 'class)))
-            (key (cond ((equal? name 'slur-event) 'slur)
-                       ((equal? name 'phrasing-slur-event) 'tie)
-                       ((equal? name 'beam-event) 'beam)
-                       ((equal? name 'crescendo-event) 'cresc)
-                       ((equal? name 'decrescendo-event) 'decr)
-                       (else #f)))
-            (sp (ly:event-property ev 'span-direction)))
-       (if (and (symbol? key) (ly:dir? sp))
-           (if (= sp STOP)
-               (assoc-remove! active key)
-               (acons key
-                      (split-index (vector-ref voice-state-vec index))
-                      active))
-           active)))
+             (key (cond ((equal? name 'slur-event) 'slur)
+                        ((equal? name 'phrasing-slur-event) 'tie)
+                        ((equal? name 'beam-event) 'beam)
+                        ((equal? name 'crescendo-event) 'cresc)
+                        ((equal? name 'decrescendo-event) 'decr)
+                        (else #f)))
+             (sp (ly:event-property ev 'span-direction)))
+        (if (and (symbol? key) (ly:dir? sp))
+            (if (= sp STOP)
+                (assoc-remove! active key)
+                (acons key
+                       (split-index (vector-ref voice-state-vec index))
+                       active))
+            active)))
 
     (define (analyse-events active evs)
       "Run all analyzers on ACTIVE and EVS"
       (define (run-analyzer analyzer active evs)
-       (if (pair? evs)
-           (run-analyzer analyzer (analyzer active (car evs)) (cdr evs))
-           active))
+        (if (pair? evs)
+            (run-analyzer analyzer (analyzer active (car evs)) (cdr evs))
+            active))
       (define (run-analyzers analyzers active evs)
-       (if (pair? analyzers)
-           (run-analyzers (cdr analyzers)
-                          (run-analyzer (car analyzers) active evs)
-                          evs)
-           active))
+        (if (pair? analyzers)
+            (run-analyzers (cdr analyzers)
+                           (run-analyzer (car analyzers) active evs)
+                           evs)
+            active))
       (sort ;; todo: use fold or somesuch.
        (run-analyzers (list analyse-absdyn-end analyse-span-event
-                           ;; note: tie-start/span comes after tie-end/absdyn.
-                           analyse-tie-end analyse-tie-start)
-                     active evs)
+                            ;; note: tie-start/span comes after tie-end/absdyn.
+                            analyse-tie-end analyse-tie-start)
+                      active evs)
        active<?))
 
     ;; must copy, since we use assoc-remove!
     (if (< index (vector-length voice-state-vec))
-       (begin
-         (set! active (analyse-events active (events (vector-ref voice-state-vec index))))
-         (set! (span-state (vector-ref voice-state-vec index))
-               (list-copy active))
-         (helper (1+ index) active))))
+        (begin
+          (set! active (analyse-events active (events (vector-ref voice-state-vec index))))
+          (set! (span-state (vector-ref voice-state-vec index))
+                (list-copy active))
+          (helper (1+ index) active))))
 
   (helper 0 '()))
 
@@ -204,69 +204,69 @@ Voice-state objects
 in a chronological list, similar to the @code{Recording_group_engraver} in
 LilyPond version 2.8 and earlier."
   (let*
-     ((context-list '())
-      (now-mom (ly:make-moment 0 0))
-      (global (ly:make-global-context odef))
-      (mom-listener (ly:make-listener
-             (lambda (tev) (set! now-mom (ly:event-property tev 'moment)))))
-      (new-context-listener
-       (ly:make-listener
-        (lambda (sev)
-          (let*
-             ((child (ly:event-property sev 'context))
-              (this-moment-list (cons (ly:context-id child) '()))
-              (dummy (set! context-list (cons this-moment-list context-list)))
-              (acc '())
-              (accumulate-event-listener
-                  (ly:make-listener (lambda (ev)
-                                       (set! acc (cons (cons ev #t) acc)))))
-              (save-acc-listener
-                  (ly:make-listener (lambda (tev)
-                      (if (pair? acc)
-                        (let ((this-moment
-                              (cons (cons now-mom
-                                (ly:context-property child 'instrumentTransposition))
-                                ;; The accumulate-event-listener above creates
-                                ;; the list of events in reverse order, so we
-                                ;; have to revert it to the original order again
-                                (reverse acc))))
-                          (set-cdr! this-moment-list
-                                (cons this-moment (cdr this-moment-list)))
-                          (set! acc '())))))))
-            (ly:add-listener accumulate-event-listener
-                (ly:context-event-source child) 'StreamEvent)
-            (ly:add-listener save-acc-listener
-                (ly:context-event-source global) 'OneTimeStep))))))
+      ((context-list '())
+       (now-mom (ly:make-moment 0 0))
+       (global (ly:make-global-context odef))
+       (mom-listener (ly:make-listener
+                      (lambda (tev) (set! now-mom (ly:event-property tev 'moment)))))
+       (new-context-listener
+        (ly:make-listener
+         (lambda (sev)
+           (let*
+               ((child (ly:event-property sev 'context))
+                (this-moment-list (cons (ly:context-id child) '()))
+                (dummy (set! context-list (cons this-moment-list context-list)))
+                (acc '())
+                (accumulate-event-listener
+                 (ly:make-listener (lambda (ev)
+                                     (set! acc (cons (cons ev #t) acc)))))
+                (save-acc-listener
+                 (ly:make-listener (lambda (tev)
+                                     (if (pair? acc)
+                                         (let ((this-moment
+                                                (cons (cons now-mom
+                                                            (ly:context-property child 'instrumentTransposition))
+                                                      ;; The accumulate-event-listener above creates
+                                                      ;; the list of events in reverse order, so we
+                                                      ;; have to revert it to the original order again
+                                                      (reverse acc))))
+                                           (set-cdr! this-moment-list
+                                                     (cons this-moment (cdr this-moment-list)))
+                                           (set! acc '())))))))
+             (ly:add-listener accumulate-event-listener
+                              (ly:context-event-source child) 'StreamEvent)
+             (ly:add-listener save-acc-listener
+                              (ly:context-event-source global) 'OneTimeStep))))))
     (ly:add-listener new-context-listener
-        (ly:context-events-below global) 'AnnounceNewContext)
+                     (ly:context-events-below global) 'AnnounceNewContext)
     (ly:add-listener mom-listener (ly:context-event-source global) 'Prepare)
     (ly:interpret-music-expression (make-non-relative-music music) global)
     context-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")))
-        (listener (ly:parser-lookup parser 'partCombineListener))
-        (evs2 (recording-group-emulate m2 listener))
-        (evs1 (recording-group-emulate m1 listener)))
+         (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")))
+         (listener (ly:parser-lookup parser 'partCombineListener))
+         (evs2 (recording-group-emulate m2 listener))
+         (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) '())
-                                   (reverse! (assoc-get "two" evs2) '()))
-             '()))
+          (if (and (assoc "one" evs1) (assoc "two" evs2))
+              (determine-split-list (reverse! (assoc-get "one" evs1) '())
+                                    (reverse! (assoc-get "two" evs2) '()))
+              '()))
     m))
 
 (define-public (determine-split-list evl1 evl2)
   "@var{evl1} and @var{evl2} should be ascending."
   (let* ((pc-debug #f)
-        (chord-threshold 8)
-        (voice-state-vec1 (make-voice-states evl1))
-        (voice-state-vec2 (make-voice-states evl2))
-        (result (make-split-state voice-state-vec1 voice-state-vec2)))
+         (chord-threshold 8)
+         (voice-state-vec1 (make-voice-states evl1))
+         (voice-state-vec2 (make-voice-states evl2))
+         (result (make-split-state voice-state-vec1 voice-state-vec2)))
 
     ;; Go through all moments recursively and check if the events of that
     ;; moment contain a part-combine-force-event override. If so, store its
@@ -275,274 +275,274 @@ LilyPond version 2.8 and earlier."
     (define (analyse-forced-combine result-idx prev-res)
 
       (define (get-forced-event x)
-       (if (ly:in-event-class? x 'part-combine-force-event)
-           (cons (ly:event-property x 'forced-type) (ly:event-property x 'once))
-           #f))
+        (and (ly:in-event-class? x 'part-combine-force-event)
+             (cons (ly:event-property x 'forced-type)
+                   (ly:event-property x 'once))))
       (define (part-combine-events vs)
-       (if (not vs)
-           '()
-           (filter-map get-forced-event (events vs))))
+        (if (not vs)
+            '()
+            (filter-map get-forced-event (events vs))))
       ;; end part-combine-events
 
       ;; forced-result: Take the previous config and analyse whether
       ;; any change happened.... Return new once and permanent config
       (define (forced-result evt state)
-       ;; sanity check, evt should always be (new-state . once)
-       (if (not (and (pair? evt) (pair? state)))
-           state
-           (if (cdr evt)
-               ;; Once-event, leave permanent state unchanged
-               (cons (car evt) (cdr state))
-               ;; permanent change, leave once state unchanged
-               (cons (car state) (car evt)))))
+        ;; sanity check, evt should always be (new-state . once)
+        (if (not (and (pair? evt) (pair? state)))
+            state
+            (if (cdr evt)
+                ;; Once-event, leave permanent state unchanged
+                (cons (car evt) (cdr state))
+                ;; permanent change, leave once state unchanged
+                (cons (car state) (car evt)))))
       ;; end forced-combine-result
 
       ;; body of analyse-forced-combine:
       (if (< result-idx (vector-length result))
-         (let* ((now-state (vector-ref result result-idx)) ; current result
-                ;; Extract all part-combine force events
-                (ev1 (part-combine-events (car (voice-states now-state))))
-                (ev2 (part-combine-events (cdr (voice-states now-state))))
-                (evts (append ev1 ev2))
-                ;; result is (once-state permament-state):
-                (state (fold forced-result (cons 'automatic prev-res) evts))
-                ;; Now let once override permanent changes:
-                (force-state (if (equal? (car state) 'automatic)
-                                 (cdr state)
-                                 (car state))))
-           (set! (forced-configuration (vector-ref result result-idx))
-                 force-state)
-           ;; For the next moment, ignore the once override (car stat)
-           ;; and pass on the permanent override, stored as (cdr state)
-           (analyse-forced-combine (1+ result-idx) (cdr state)))))
+          (let* ((now-state (vector-ref result result-idx)) ; current result
+                 ;; Extract all part-combine force events
+                 (ev1 (part-combine-events (car (voice-states now-state))))
+                 (ev2 (part-combine-events (cdr (voice-states now-state))))
+                 (evts (append ev1 ev2))
+                 ;; result is (once-state permament-state):
+                 (state (fold forced-result (cons 'automatic prev-res) evts))
+                 ;; Now let once override permanent changes:
+                 (force-state (if (equal? (car state) 'automatic)
+                                  (cdr state)
+                                  (car state))))
+            (set! (forced-configuration (vector-ref result result-idx))
+                  force-state)
+            ;; For the next moment, ignore the once override (car stat)
+            ;; and pass on the permanent override, stored as (cdr state)
+            (analyse-forced-combine (1+ result-idx) (cdr state)))))
     ;; end analyse-forced-combine
 
 
     (define (analyse-time-step result-idx)
       (define (put x . index)
-       "Put the result to X, starting from INDEX backwards.
+        "Put the result to X, starting from INDEX backwards.
 
 Only set if not set previously.
 "
-       (let ((i (if (pair? index) (car index) result-idx)))
-         (if (and (<= 0 i)
-                  (not (symbol? (configuration (vector-ref result i)))))
-             (begin
-               (set! (configuration (vector-ref result i)) x)
-               (put x (1- i))))))
+        (let ((i (if (pair? index) (car index) result-idx)))
+          (if (and (<= 0 i)
+                   (not (symbol? (configuration (vector-ref result i)))))
+              (begin
+                (set! (configuration (vector-ref result i)) x)
+                (put x (1- i))))))
 
       (define (copy-state-from state-vec vs)
-       (define (copy-one-state key-idx)
-         (let* ((idx (cdr key-idx))
-                (prev-ss (vector-ref result idx))
-                (prev (configuration prev-ss)))
-           (if (symbol? prev)
-               (put prev))))
-       (map copy-one-state (span-state vs)))
+        (define (copy-one-state key-idx)
+          (let* ((idx (cdr key-idx))
+                 (prev-ss (vector-ref result idx))
+                 (prev (configuration prev-ss)))
+            (if (symbol? prev)
+                (put prev))))
+        (for-each copy-one-state (span-state vs)))
 
       (define (analyse-notes now-state)
-       (let* ((vs1 (car (voice-states now-state)))
-              (vs2 (cdr (voice-states now-state)))
-              (notes1 (note-events vs1))
-              (durs1 (sort (map (lambda (x) (ly:event-property x 'duration))
-                                notes1)
-                           ly:duration<?))
-              (pitches1 (sort (map (lambda (x) (ly:event-property x 'pitch))
-                                   notes1)
-                              ly:pitch<?))
-              (notes2 (note-events vs2))
-              (durs2 (sort (map (lambda (x) (ly:event-property x 'duration))
-                                notes2)
-                           ly:duration<?))
-              (pitches2 (sort (map (lambda (x) (ly:event-property x 'pitch))
-                                   notes2)
-                              ly:pitch<?)))
-         (cond ((> (length notes1) 1) (put 'apart))
-               ((> (length notes2) 1) (put 'apart))
-               ((= 1 (+ (length notes2) (length notes1))) (put 'apart))
-               ((and (= (length durs1) 1)
-                     (= (length durs2) 1)
-                     (not (equal? (car durs1) (car durs2))))
-                (put 'apart))
-               (else
-                (if (and (= (length pitches1) (length pitches2)))
-                    (if (and (pair? pitches1)
-                             (pair? pitches2)
-                             (or
-                              (< chord-threshold (ly:pitch-steps
-                                                  (ly:pitch-diff (car pitches1)
-                                                                 (car pitches2))))
-
-                              ;; voice crossings:
-                              (> 0 (ly:pitch-steps (ly:pitch-diff (car pitches1)
-                                                                  (car pitches2))))
-                              ))
-                        (put 'apart)
-                        ;; copy previous split state from spanner state
-                        (begin
-                          (if (previous-voice-state vs1)
-                              (copy-state-from voice-state-vec1
-                                               (previous-voice-state vs1)))
-                          (if (previous-voice-state vs2)
-                              (copy-state-from voice-state-vec2
-                                               (previous-voice-state vs2)))
-                          (if (and (null? (span-state vs1)) (null? (span-state vs2)))
-                              (put 'chords)))))))))
+        (let* ((vs1 (car (voice-states now-state)))
+               (vs2 (cdr (voice-states now-state)))
+               (notes1 (note-events vs1))
+               (durs1 (sort (map (lambda (x) (ly:event-property x 'duration))
+                                 notes1)
+                            ly:duration<?))
+               (pitches1 (sort (map (lambda (x) (ly:event-property x 'pitch))
+                                    notes1)
+                               ly:pitch<?))
+               (notes2 (note-events vs2))
+               (durs2 (sort (map (lambda (x) (ly:event-property x 'duration))
+                                 notes2)
+                            ly:duration<?))
+               (pitches2 (sort (map (lambda (x) (ly:event-property x 'pitch))
+                                    notes2)
+                               ly:pitch<?)))
+          (cond ((> (length notes1) 1) (put 'apart))
+                ((> (length notes2) 1) (put 'apart))
+                ((= 1 (+ (length notes2) (length notes1))) (put 'apart))
+                ((and (= (length durs1) 1)
+                      (= (length durs2) 1)
+                      (not (equal? (car durs1) (car durs2))))
+                 (put 'apart))
+                (else
+                 (if (and (= (length pitches1) (length pitches2)))
+                     (if (and (pair? pitches1)
+                              (pair? pitches2)
+                              (or
+                               (< chord-threshold (ly:pitch-steps
+                                                   (ly:pitch-diff (car pitches1)
+                                                                  (car pitches2))))
+
+                               ;; voice crossings:
+                               (> 0 (ly:pitch-steps (ly:pitch-diff (car pitches1)
+                                                                   (car pitches2))))
+                               ))
+                         (put 'apart)
+                         ;; copy previous split state from spanner state
+                         (begin
+                           (if (previous-voice-state vs1)
+                               (copy-state-from voice-state-vec1
+                                                (previous-voice-state vs1)))
+                           (if (previous-voice-state vs2)
+                               (copy-state-from voice-state-vec2
+                                                (previous-voice-state vs2)))
+                           (if (and (null? (span-state vs1)) (null? (span-state vs2)))
+                               (put 'chords)))))))))
 
       (if (< result-idx (vector-length result))
-         (let* ((now-state (vector-ref result result-idx))
-                (vs1 (car (voice-states now-state)))
-                (vs2 (cdr (voice-states now-state))))
-
-           (cond ((not vs1) (put 'apart))
-                 ((not vs2) (put 'apart))
-                 (else
-                  (let ((active1 (previous-span-state vs1))
-                        (active2 (previous-span-state vs2))
-                        (new-active1 (span-state vs1))
-                        (new-active2 (span-state vs2)))
-                    (if #f ; debug
-                        (display (list (when now-state) result-idx
-                                       active1 "->" new-active1
-                                       active2 "->" new-active2
-                                       "\n")))
-                    (if (and (synced? now-state)
-                             (equal? active1 active2)
-                             (equal? new-active1 new-active2))
-                        (analyse-notes now-state)
-
-                        ;; active states different:
-                        (put 'apart)))
-
-                  ;; go to the next one, if it exists.
-                  (analyse-time-step (1+ result-idx)))))))
+          (let* ((now-state (vector-ref result result-idx))
+                 (vs1 (car (voice-states now-state)))
+                 (vs2 (cdr (voice-states now-state))))
+
+            (cond ((not vs1) (put 'apart))
+                  ((not vs2) (put 'apart))
+                  (else
+                   (let ((active1 (previous-span-state vs1))
+                         (active2 (previous-span-state vs2))
+                         (new-active1 (span-state vs1))
+                         (new-active2 (span-state vs2)))
+                     (if #f ; debug
+                         (display (list (moment now-state) result-idx
+                                        active1 "->" new-active1
+                                        active2 "->" new-active2
+                                        "\n")))
+                     (if (and (synced? now-state)
+                              (equal? active1 active2)
+                              (equal? new-active1 new-active2))
+                         (analyse-notes now-state)
+
+                         ;; active states different:
+                         (put 'apart)))
+
+                   ;; go to the next one, if it exists.
+                   (analyse-time-step (1+ result-idx)))))))
 
     (define (analyse-a2 result-idx)
       (if (< result-idx (vector-length result))
-         (let* ((now-state (vector-ref result result-idx))
-                (vs1 (car (voice-states now-state)))
-                (vs2 (cdr (voice-states now-state))))
-           (if (and (equal? (configuration now-state) 'chords)
-                    vs1 vs2)
-               (let ((notes1 (note-events vs1))
-                     (notes2 (note-events vs2)))
-                 (cond ((and (= 1 (length notes1))
-                             (= 1 (length notes2))
-                             (equal? (ly:event-property (car notes1) 'pitch)
-                                     (ly:event-property (car notes2) 'pitch)))
-                        (set! (configuration now-state) 'unisono))
-                       ((and (= 0 (length notes1))
-                             (= 0 (length notes2)))
-                        (set! (configuration now-state) 'unisilence)))))
-           (analyse-a2 (1+ result-idx)))))
+          (let* ((now-state (vector-ref result result-idx))
+                 (vs1 (car (voice-states now-state)))
+                 (vs2 (cdr (voice-states now-state))))
+            (if (and (equal? (configuration now-state) 'chords)
+                     vs1 vs2)
+                (let ((notes1 (note-events vs1))
+                      (notes2 (note-events vs2)))
+                  (cond ((and (= 1 (length notes1))
+                              (= 1 (length notes2))
+                              (equal? (ly:event-property (car notes1) 'pitch)
+                                      (ly:event-property (car notes2) 'pitch)))
+                         (set! (configuration now-state) 'unisono))
+                        ((and (= 0 (length notes1))
+                              (= 0 (length notes2)))
+                         (set! (configuration now-state) 'unisilence)))))
+            (analyse-a2 (1+ result-idx)))))
 
     (define (analyse-solo12 result-idx)
 
       (define (previous-config vs)
-       (let* ((pvs (previous-voice-state vs))
-              (spi (if pvs (split-index pvs) #f))
-              (prev-split (if spi (vector-ref result spi) #f)))
-         (if prev-split
-             (configuration prev-split)
-             'apart)))
+        (let* ((pvs (previous-voice-state vs))
+               (spi (if pvs (split-index pvs) #f))
+               (prev-split (if spi (vector-ref result spi) #f)))
+          (if prev-split
+              (configuration prev-split)
+              'apart)))
 
       (define (put-range x a b)
-       ;; (display (list "put range "  x a b "\n"))
-       (do ((i a (1+ i)))
-           ((> i b) b)
-         (set! (configuration (vector-ref result i)) x)))
+        ;; (display (list "put range "  x a b "\n"))
+        (do ((i a (1+ i)))
+            ((> i b) b)
+          (set! (configuration (vector-ref result i)) x)))
 
       (define (put x)
-       ;; (display (list "putting "  x "\n"))
-       (set! (configuration (vector-ref result result-idx)) x))
+        ;; (display (list "putting "  x "\n"))
+        (set! (configuration (vector-ref result result-idx)) x))
 
       (define (current-voice-state now-state voice-num)
-       (define vs ((if (= 1 voice-num) car cdr)
-                   (voice-states now-state)))
-       (if (or (not vs) (equal? (when now-state) (when vs)))
-           vs
-           (previous-voice-state vs)))
+        (define vs ((if (= 1 voice-num) car cdr)
+                    (voice-states now-state)))
+        (if (or (not vs) (equal? (moment now-state) (moment vs)))
+            vs
+            (previous-voice-state vs)))
 
       (define (try-solo type start-idx current-idx)
-       "Find a maximum stretch that can be marked as solo.  Only set
+        "Find a maximum stretch that can be marked as solo.  Only set
 the mark when there are no spanners active.
 
       return next idx to analyse.
 "
-       (if (< current-idx (vector-length result))
-           (let* ((now-state (vector-ref result current-idx))
-                  (solo-state (current-voice-state now-state (if (equal? type 'solo1) 1 2)))
-                  (silent-state (current-voice-state now-state (if (equal? type 'solo1) 2 1)))
-                  (silent-notes (if silent-state (note-events silent-state) '()))
-                  (solo-notes (if solo-state (note-events solo-state) '())))
-             ;; (display (list "trying " type " at "  (when now-state) solo-state silent-state  "\n"))
-             (cond ((not (equal? (configuration now-state) 'apart))
-                    current-idx)
-                   ((> (length silent-notes) 0) start-idx)
-                   ((not solo-state)
-                    (put-range type start-idx current-idx)
-                    current-idx)
-                   ((and
-                     (null? (span-state solo-state)))
-
-                    ;;
-                    ;; This includes rests. This isn't a problem: long rests
-                    ;; will be shared with the silent voice, and be marked
-                    ;; as unisilence. Therefore, long rests won't
-                    ;;  accidentally be part of a solo.
-                    ;;
-                    (put-range type start-idx current-idx)
-                    (try-solo type (1+ current-idx) (1+  current-idx)))
-                   (else
-                    (try-solo type start-idx (1+ current-idx)))))
-           ;; try-solo
-           start-idx))
+        (if (< current-idx (vector-length result))
+            (let* ((now-state (vector-ref result current-idx))
+                   (solo-state (current-voice-state now-state (if (equal? type 'solo1) 1 2)))
+                   (silent-state (current-voice-state now-state (if (equal? type 'solo1) 2 1)))
+                   (silent-notes (if silent-state (note-events silent-state) '()))
+                   (solo-notes (if solo-state (note-events solo-state) '())))
+              ;; (display (list "trying " type " at "  (moment now-state) solo-state silent-state        "\n"))
+              (cond ((not (equal? (configuration now-state) 'apart))
+                     current-idx)
+                    ((> (length silent-notes) 0) start-idx)
+                    ((not solo-state)
+                     (put-range type start-idx current-idx)
+                     current-idx)
+                    ((and
+                      (null? (span-state solo-state)))
+
+                     ;;
+                     ;; This includes rests. This isn't a problem: long rests
+                     ;; will be shared with the silent voice, and be marked
+                     ;; as unisilence. Therefore, long rests won't
+                     ;;  accidentally be part of a solo.
+                     ;;
+                     (put-range type start-idx current-idx)
+                     (try-solo type (1+ current-idx) (1+  current-idx)))
+                    (else
+                     (try-solo type start-idx (1+ current-idx)))))
+            ;; try-solo
+            start-idx))
 
       (define (analyse-moment result-idx)
-       "Analyse 'apart starting at RESULT-IDX.  Return next index."
-       (let* ((now-state (vector-ref result result-idx))
-              (vs1 (current-voice-state now-state 1))
-              (vs2 (current-voice-state now-state 2))
-              ;; (vs1 (car (voice-states now-state)))
-              ;; (vs2 (cdr (voice-states now-state)))
-              (notes1 (if vs1 (note-events vs1) '()))
-              (notes2 (if vs2 (note-events vs2) '()))
-              (n1 (length notes1))
-              (n2 (length notes2)))
-         ;; (display (list "analyzing step " result-idx "  moment " (when now-state) vs1 vs2  "\n"))
-         (max
-          ;; we should always increase.
-          (cond ((and (= n1 0) (= n2 0))
-                 (put 'apart-silence)
-                 (1+ result-idx))
-                ((and (= n2 0)
-                      (equal? (when vs1) (when now-state))
-                      (null? (previous-span-state vs1)))
-                 (try-solo 'solo1 result-idx result-idx))
-                ((and (= n1 0)
-                      (equal? (when vs2) (when now-state))
-                      (null? (previous-span-state vs2)))
-                 (try-solo 'solo2 result-idx result-idx))
-
-                (else (1+ result-idx)))
-          ;; analyse-moment
-          (1+ result-idx))))
+        "Analyse 'apart starting at RESULT-IDX.  Return next index."
+        (let* ((now-state (vector-ref result result-idx))
+               (vs1 (current-voice-state now-state 1))
+               (vs2 (current-voice-state now-state 2))
+               ;; (vs1 (car (voice-states now-state)))
+               ;; (vs2 (cdr (voice-states now-state)))
+               (notes1 (if vs1 (note-events vs1) '()))
+               (notes2 (if vs2 (note-events vs2) '()))
+               (n1 (length notes1))
+               (n2 (length notes2)))
+          ;; (display (list "analyzing step " result-idx "  moment " (moment now-state) vs1 vs2  "\n"))
+          (max
+           ;; we should always increase.
+           (cond ((and (= n1 0) (= n2 0))
+                  (put 'apart-silence)
+                  (1+ result-idx))
+                 ((and (= n2 0)
+                       (equal? (moment vs1) (moment now-state))
+                       (null? (previous-span-state vs1)))
+                  (try-solo 'solo1 result-idx result-idx))
+                 ((and (= n1 0)
+                       (equal? (moment vs2) (moment now-state))
+                       (null? (previous-span-state vs2)))
+                  (try-solo 'solo2 result-idx result-idx))
+
+                 (else (1+ result-idx)))
+           ;; analyse-moment
+           (1+ result-idx))))
 
       (if (< result-idx (vector-length result))
-         (if (equal? (configuration (vector-ref result result-idx)) 'apart)
-             (analyse-solo12 (analyse-moment result-idx))
-             (analyse-solo12 (1+ result-idx))))) ; analyse-solo12
+          (if (equal? (configuration (vector-ref result result-idx)) 'apart)
+              (analyse-solo12 (analyse-moment result-idx))
+              (analyse-solo12 (1+ result-idx))))) ; analyse-solo12
 
     (analyse-spanner-states voice-state-vec1)
     (analyse-spanner-states voice-state-vec2)
     (if #f
-       (begin
-         (display voice-state-vec1)
-         (display "***\n")
-         (display voice-state-vec2)
-         (display "***\n")
-         (display result)
-         (display "***\n")))
+        (begin
+          (display voice-state-vec1)
+          (display "***\n")
+          (display voice-state-vec2)
+          (display "***\n")
+          (display result)
+          (display "***\n")))
 
     ;; Extract all forced combine strategies, i.e. events inserted by
     ;; \partcombine(Apart|Automatic|SoloI|SoloII|Chords)[Once]
@@ -560,11 +560,11 @@ the mark when there are no spanners active.
     (analyse-solo12 0)
     ;; (display result)
     (set! result (map
-                 ;; forced-configuration overrides, if it is set
-                 (lambda (x) (cons (when x) (or (forced-configuration x) (configuration x))))
-                 (vector->list result)))
+                  ;; forced-configuration overrides, if it is set
+                  (lambda (x) (cons (moment x) (or (forced-configuration x) (configuration x))))
+                  (vector->list result)))
     (if #f ;; pc-debug
-        (display result))
+        (display result))
     result))
 
 
index d3286c45d15d972cdf8593e9760e91c12a0087ec..5140ae6e91093e0a7f8a92ba94a76b7bcba8330e 100644 (file)
 (define-public (parse-terse-string terse-definition)
   "Parse a @code{fret-diagram-terse} definition string @var{terse-definition}
 and return a marking list, which can be used with a fretboard grob."
-   (cdr (fret-parse-terse-definition-string (list '()) terse-definition)))
+  (cdr (fret-parse-terse-definition-string (list '()) terse-definition)))
 
 (define-public (get-chord-shape shape-code tuning base-chord-shapes)
   "Return the chord shape associated with @var{shape-code} and
 @var{tuning} in the hash-table @var{base-chord-shapes}."
   (let ((hash-handle (hash-get-handle base-chord-shapes
-                                       (cons shape-code tuning))))
-     (if hash-handle
-         (cdr hash-handle)
-         '())))
+                                      (cons shape-code tuning))))
+    (if hash-handle
+        (cdr hash-handle)
+        '())))
 
 (define-public (offset-fret fret-offset diagram-definition)
   "Add @var{fret-offset} to each fret indication in
 @var{diagram-definition} and return the resulting verbose
 @code{fret-diagram-definition}."
-   (let ((verbose-definition 
-           (if (string? diagram-definition)
-               (parse-terse-string diagram-definition)
-               diagram-definition)))
-     (map (lambda(item) 
-            (let ((code (car item)))
-              (cond
-                ((eq? code 'barre)
-                  (list-set! item 3
-                     (+ fret-offset (list-ref item 3)))
-                  item)
-                ((eq? code 'capo)
-                  (list-set! item 1
-                     (+ fret-offset (list-ref item 1)))
-                  item)
-                ((eq? code 'place-fret)
-                  (list-set! item 2
-                     (+ fret-offset (list-ref item 2)))
-                  item)
-                (else item))))
-            verbose-definition)))
-
+  (let ((verbose-definition
+         (if (string? diagram-definition)
+             (parse-terse-string diagram-definition)
+             diagram-definition)))
+    (map (lambda(item)
+           (let ((code (car item)))
+             (cond
+              ((eq? code 'barre)
+               (list-set! item 3
+                          (+ fret-offset (list-ref item 3)))
+               item)
+              ((eq? code 'capo)
+               (list-set! item 1
+                          (+ fret-offset (list-ref item 1)))
+               item)
+              ((eq? code 'place-fret)
+               (list-set! item 2
+                          (+ fret-offset (list-ref item 2)))
+               item)
+              (else item))))
+         verbose-definition)))
index 5e78d0c7c0d3997267972f5d11053a3cc0d8bbb5..948e56e145a5a4ea7a12f5e988c49cc2ef848afd 100644 (file)
@@ -42,9 +42,9 @@
 (define (search-executable names)
   (define (helper path lst)
     (if (null? (cdr lst))
-       (car lst)
-       (if (search-path path (car lst)) (car lst)
-           (helper path (cdr lst)))))
+        (car lst)
+        (if (search-path path (car lst)) (car lst)
+            (helper path (cdr lst)))))
 
   (let ((path (parse-path (getenv "PATH"))))
     (helper path names)))
   (set! status (system cmd))
   (if (not (= status 0))
       (begin
-       (ly:error (_ "~a exited with status: ~S") "GS" status)
-       (if exit-on-error (exit 1))))
+        (ly:error (_ "~a exited with status: ~S") "GS" status)
+        (if exit-on-error (exit 1))))
   status)
 
 (define (scale-down-image be-verbose factor file)
   (define (with-pbm)
     (let* ((status 0)
-          (old (string-append file ".old")))
-      
+           (old (string-append file ".old")))
+
       (rename-file file old)
       (my-system
        be-verbose #t
        (format #f
-              "pngtopnm \"~a\" | pnmscale -reduce ~a 2>/dev/null | pnmtopng -compression 9 2>/dev/null > \"~a\""
-              old factor file))
+               "pngtopnm \"~a\" | pnmscale -reduce ~a 2>/dev/null | pnmtopng -compression 9 2>/dev/null > \"~a\""
+               old factor file))
       (delete-file old)))
 
   (with-pbm))
 
 (define-public (ps-page-count ps-name)
   (let* ((byte-count 10240)
-        (header (gulp-file ps-name byte-count))
-        (first-null (string-index header #\nul))
-        (match (string-match "%%Pages: ([0-9]+)"
-                             (if (number? first-null)
-                                 (substring header 0 first-null)
-                                 header))))
+         (header (gulp-file ps-name byte-count))
+         (first-null (string-index header #\nul))
+         (match (string-match "%%Pages: ([0-9]+)"
+                              (if (number? first-null)
+                                  (substring header 0 first-null)
+                                  header))))
     (if match (string->number (match:substring match 1)) 0)))
 
 (define-public (make-ps-images ps-name . rest)
     (anti-alias-factor 1))
 
    (let* ((format-str (format #f "~a" pixmap-format))
-         (extension (cond
-                     ((string-contains format-str "png") "png")
-                     ((string-contains format-str "jpg") "jpeg")
-                     ((string-contains format-str "jpeg") "jpeg")
-                     (else
-                      (ly:error "Unknown pixmap format ~a" pixmap-format))))
-         (base (dir-basename ps-name ".ps" ".eps"))
-         (png1 (format #f "~a.~a" base extension))
-         (pngn (format #f "~a-page%d.~a" base extension))
-         (page-count (ps-page-count ps-name))
-         (multi-page? (> page-count 1))
-         (output-file (if multi-page? pngn png1))
-
-         (gs-variable-options
-           (if (string-suffix-ci? ".eps" ps-name)
-               "-dEPSCrop"
-               (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f"
-                       page-width page-height)))
-         (cmd (ly:format "~a\
+          (extension (cond
+                      ((string-contains format-str "png") "png")
+                      ((string-contains format-str "jpg") "jpeg")
+                      ((string-contains format-str "jpeg") "jpeg")
+                      (else
+                       (ly:error "Unknown pixmap format ~a" pixmap-format))))
+          (base (string-join
+                 (string-split (dir-basename ps-name ".ps" ".eps") #\%)
+                 "%%"))
+          (png1 (format #f "~a.~a" base extension))
+          (pngn (format #f "~a-page%d.~a" base extension))
+          (page-count (ps-page-count ps-name))
+          (multi-page? (> page-count 1))
+          (output-file (if multi-page? pngn png1))
+
+          (gs-variable-options
+           (if (string-suffix-ci? ".eps" ps-name)
+               "-dEPSCrop"
+               (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f"
+                       page-width page-height)))
+          (cmd (ly:format "~a\
  ~a\
  ~a\
  -dGraphicsAlphaBits=4\
  -r~a\
  ~S\
  -c quit"
-                      (search-gs)
-                      (if be-verbose "" "-q")
-                      gs-variable-options
-                      pixmap-format
-                      output-file 
-                      (* anti-alias-factor resolution) ps-name))
-         (status 0)
-         (files '()))
+                          (search-gs)
+                          (if be-verbose "" "-q")
+                          gs-variable-options
+                          pixmap-format
+                          output-file
+                          (* anti-alias-factor resolution) ps-name))
+          (status 0)
+          (files '()))
 
      ;; The wrapper on windows cannot handle `=' signs,
      ;; gs has a workaround with #.
      (if (eq? PLATFORM 'windows)
-        (begin
-          (set! cmd (re-sub "=" "#" cmd))
-          (set! cmd (re-sub "-dSAFER " "" cmd))))
+         (begin
+           (set! cmd (re-sub "=" "#" cmd))
+           (set! cmd (re-sub "-dSAFER " "" cmd))))
 
      (set! status (my-system be-verbose #f cmd))
 
      (set! files
-          (if multi-page?
-              (map
-               (lambda (n)
-                 (format #f "~a-page~a.png" base (1+ n)))
-               (iota page-count))
-              (list (format #f "~a.png" base))))
-     
+           (if multi-page?
+               (map
+                (lambda (n)
+                  (format #f "~a-page~a.png" base (1+ n)))
+                (iota page-count))
+               (list (format #f "~a.png" base))))
+
      (if (not (= 0 status))
-        (begin
-          (map delete-file files)
-          (exit 1)))
+         (begin
+           (for-each delete-file files)
+           (exit 1)))
 
      (if (and rename-page-1 multi-page?)
-        (begin
-          (rename-file (re-sub "%d" "1" pngn) png1)
-          (set! files
-                (cons png1
-                      (cdr files)))
-          ))
+         (begin
+           (rename-file (re-sub "%d" "1" pngn) png1)
+           (set! files
+                 (cons png1
+                       (cdr files)))
+           ))
 
      (if (not (= 1 anti-alias-factor))
-        (for-each
-         (lambda (f) (scale-down-image be-verbose anti-alias-factor f)) files))
+         (for-each
+          (lambda (f) (scale-down-image be-verbose anti-alias-factor f)) files))
      files)))
index 202cad688375bf8dab64daf971a2abd0e661f295..25209e5a0b698e412ac53220851b0f12d7a6adb0 100644 (file)
@@ -15,7 +15,7 @@
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-(map
+(for-each
  (lambda (sym)
    (set! safe-objects (cons (cons sym (primitive-eval sym))
                             safe-objects)))
    ly:stencil-combine-at-edge
    ly:stencil-expr
    ly:stencil-extent
+   ly:stencil-stack
    ly:stencil-translate
    ly:stencil-translate-axis
    ly:stencil?
index 57941b2b9ab5ec3b2b77e1a96282736ea6c90642..057639d7faba03c56158ad864d5f41ff4f061dd8 100644 (file)
 ;;;      Author Ian Hulin
 ;;;      Date   16 October 2011
 ;;;
+
 (define-module (scm safe-utility-defs)
-#:use-module (ice-9 optargs)
-#:export (safe-objects)
-#:export-syntax (define-safe-public)
-#:re-export-syntax (define*-public))
+  #:use-module (ice-9 optargs)
+  #:export (safe-objects)
+  #:export-syntax (define-safe-public)
+  #:re-export-syntax (define*-public))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Safe definitions utility
diff --git a/scm/scheme-engravers.scm b/scm/scheme-engravers.scm
new file mode 100644 (file)
index 0000000..0766cbc
--- /dev/null
@@ -0,0 +1,103 @@
+;;;; This file is part of LilyPond, the GNU music typesetter.
+;;;;
+;;;; Copyright (C) 2012 David Nalesnik <david.nalesnik@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/>.
+
+
+(define-public (Measure_counter_engraver context)
+  "This engraver numbers ranges of measures, which is useful in parts as an
+aid for counting repeated measures.  There is no requirement that the
+affected measures be repeated, however.  The user delimits the area to
+receive a count with @code{\\startMeasureCount} and
+@code{\\stopMeasureCount}.
+
+Each element of a count is a spanner, and a count is thus a series of
+spanners.  Each spanner is bounded by the first @code{CommandColumn} of
+successive measures, and boundaries are shared by adjoining spanners."
+  (let ((count-spanner '()) ; a single element of the count
+        (go? #f) ; is the count in progress?
+        (stop? #f) ; do we end the count?
+        (last-measure-seen 0)
+        (new-measure? #f)
+        (elapsed 0))
+
+    (make-engraver
+     (listeners ((measure-counter-event engraver event)
+                 (set! last-measure-seen (ly:context-property context 'currentBarNumber))
+                 (set! new-measure? #t)
+                 (cond
+                  ((and (= START (ly:event-property event 'span-direction))
+                        go?)
+                   (begin
+                     (set! stop? #t)
+                     (ly:input-warning
+                      (ly:event-property event 'origin)
+                      "count not ended before another begun")))
+                  ((= START (ly:event-property event 'span-direction))
+                   (set! go? #t))
+                  ((= STOP (ly:event-property event 'span-direction))
+                   (begin
+                     (set! stop? #t)
+                     (set! go? #f))))))
+
+     ((process-music trans)
+      (let ((col (ly:context-property context 'currentCommandColumn))
+            (now (ly:context-property context 'measurePosition))
+            (current-bar (ly:context-property context 'currentBarNumber)))
+        ;; If the counter has been started, make sure we're in a new bar
+        ;; before finishing a count-spanner and starting a new one.
+        ;; Since we consider all CommandColumns encountered, we need this
+        ;; check so that a count-spanner is not created for each pair.
+        (if (and (ly:grob? count-spanner)
+                 (> current-bar last-measure-seen))
+            (set! new-measure? #t))
+        (if new-measure?
+            (begin
+              ;; Check if we have the first column of the measure.
+              ;; The possibility of initial grace notes is considered.
+              (if (moment<=? now ZERO-MOMENT)
+                  (begin
+                    ;; If we have the first column, finish the previous
+                    ;; counter-spanner (if there is one).
+                    (if (ly:grob? count-spanner)
+                        (begin
+                          (ly:spanner-set-bound! count-spanner RIGHT col)
+                          (ly:pointer-group-interface::add-grob count-spanner 'columns col)
+                          (ly:engraver-announce-end-grob trans count-spanner col)
+                          (set! count-spanner '())))
+                    ;; if count is over, reset variables
+                    (if stop?
+                        (begin
+                          (set! elapsed 0)
+                          (set! stop? #f)))
+                    ;; if count is in progress, begin a counter object
+                    (if go?
+                        (let* ((c (ly:engraver-make-grob trans 'MeasureCounter col))
+                               (counter (ly:grob-property c 'count-from)))
+                          (ly:spanner-set-bound! c LEFT col)
+                          (ly:pointer-group-interface::add-grob c 'columns col)
+                          (set! (ly:grob-property c 'count-from) (+ counter elapsed))
+                          (set! count-spanner c)
+                          (set! elapsed (1+ elapsed))))
+                    (set! new-measure? #f)))))
+        (set! last-measure-seen current-bar)))
+
+     ((finalize trans)
+      (if go?
+          (begin
+            (set! go? #f)
+            (ly:grob-suicide! count-spanner)
+            (set! count-spanner '())
+            (ly:warning "measure count left unfinished")))))))
index 905a9f5a623b70079193d6fdb7b70c4a2ad7d37f..6564d5f2d4ce6b32bf18f1769e3d93be4c80b2a3 100644 (file)
   `(
     ("accent"
      . (
-       (avoid-slur . around)
-       (padding . 0.20)
-       (script-stencil . (feta . ("sforzato" . "sforzato")))
-       (side-relative-direction . ,DOWN)))
+        (avoid-slur . around)
+        (padding . 0.20)
+        (script-stencil . (feta . ("sforzato" . "sforzato")))
+        (side-relative-direction . ,DOWN)))
     ("accentus"
      . (
-       (script-stencil . (feta . ("uaccentus" . "uaccentus")))
-       (side-relative-direction . ,DOWN)
-       (avoid-slur . ignore)
-       (padding . 0.20)
-       (quantize-position . #t)
-       (script-priority . -100)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("uaccentus" . "uaccentus")))
+        (side-relative-direction . ,DOWN)
+        (avoid-slur . ignore)
+        (padding . 0.20)
+        (quantize-position . #t)
+        (script-priority . -100)
+        (direction . ,UP)))
 
 
     ("circulus"
      . (
-       (script-stencil . (feta . ("circulus" . "circulus")))
-       (side-relative-direction . ,DOWN)
-       (avoid-slur . ignore)
-       (padding . 0.20)
-       (quantize-position . #t)
-       (script-priority . -100)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("circulus" . "circulus")))
+        (side-relative-direction . ,DOWN)
+        (avoid-slur . ignore)
+        (padding . 0.20)
+        (quantize-position . #t)
+        (script-priority . -100)
+        (direction . ,UP)))
     ("coda"
      . (
-       (script-stencil . (feta . ("coda" . "coda")))
-       (padding . 0.20)
-       (avoid-slur . outside)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("coda" . "coda")))
+        (padding . 0.20)
+        (avoid-slur . outside)
+        (direction . ,UP)))
     ("comma"
      . (
-       (script-stencil . (feta . ("lcomma" . "rcomma")))
-       (quantize-position . #t)
-       (padding . 0.20)
-       (avoid-slur . ignore)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("lcomma" . "rcomma")))
+        (quantize-position . #t)
+        (padding . 0.20)
+        (avoid-slur . ignore)
+        (direction . ,UP)))
 
 
     ("downbow"
      . (
-       (script-stencil . (feta . ("downbow" . "downbow")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)
-       (script-priority . 150)))
+        (script-stencil . (feta . ("downbow" . "downbow")))
+        (padding . 0.20)
+        (skyline-horizontal-padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)
+        (script-priority . 150)))
     ("downmordent"
      . (
-       (script-stencil . (feta . ("downmordent" . "downmordent")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("downmordent" . "downmordent")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
     ("downprall"
      . (
-       (script-stencil . (feta . ("downprall" . "downprall")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("downprall" . "downprall")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
 
 
     ("espressivo"
      . (
-       (avoid-slur . around)
-       (padding . 0.20)
-       (script-stencil . (feta . ("espr" .  "espr")))
-       (side-relative-direction . ,DOWN)))
+        (avoid-slur . around)
+        (padding . 0.20)
+        (script-stencil . (feta . ("espr" .  "espr")))
+        (side-relative-direction . ,DOWN)))
 
 
     ("fermata"
      . (
-       (script-stencil . (feta . ("dfermata" . "ufermata")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (script-priority . 4000)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("dfermata" . "ufermata")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (script-priority . 4000)
+        (direction . ,UP)))
     ("flageolet"
      . (
-       (script-stencil . (feta . ("flageolet" . "flageolet")))
-       (padding . 0.20)
-       (avoid-slur . around) ;guessing?
-       (direction . ,UP)))
+        (script-stencil . (feta . ("flageolet" . "flageolet")))
+        (padding . 0.20)
+        (avoid-slur . around) ;guessing?
+        (direction . ,UP)))
 
 
     ("halfopen"
      . (
-       (avoid-slur . outside)
-       (padding . 0.20)
-       (script-stencil . (feta . ("halfopen" . "halfopen")))
-       (direction . ,UP)))
+        (avoid-slur . outside)
+        (padding . 0.20)
+        (script-stencil . (feta . ("halfopen" . "halfopen")))
+        (direction . ,UP)))
 
 
     ("ictus"
      . (
-       (script-stencil . (feta . ("ictus" . "ictus")))
-       (side-relative-direction . ,DOWN)
-       (quantize-position . #t)
-       (avoid-slur . ignore)
-       (padding . 0.20)
-       (script-priority . -100)
-       (direction . ,DOWN)))
+        (script-stencil . (feta . ("ictus" . "ictus")))
+        (side-relative-direction . ,DOWN)
+        (quantize-position . #t)
+        (avoid-slur . ignore)
+        (padding . 0.20)
+        (script-priority . -100)
+        (direction . ,DOWN)))
 
 
     ("lheel"
      . (
-       (script-stencil . (feta . ("upedalheel" . "upedalheel")))
-       (padding . 0.20)
-       (avoid-slur . around) ;guessing?
-       (direction . ,DOWN)))
+        (script-stencil . (feta . ("upedalheel" . "upedalheel")))
+        (padding . 0.20)
+        (avoid-slur . around) ;guessing?
+        (direction . ,DOWN)))
     ("lineprall"
      . (
-       (script-stencil . (feta . ("lineprall" . "lineprall")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("lineprall" . "lineprall")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
     ("longfermata"
      . (
-       (script-stencil . (feta . ("dlongfermata" . "ulongfermata")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("dlongfermata" . "ulongfermata")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
     ("ltoe"
      . (
-       (script-stencil . (feta . ("upedaltoe" . "upedaltoe")))
-       (padding . 0.20)
-       (avoid-slur . around) ;guessing?
-       (direction . ,DOWN)))
+        (script-stencil . (feta . ("upedaltoe" . "upedaltoe")))
+        (padding . 0.20)
+        (avoid-slur . around) ;guessing?
+        (direction . ,DOWN)))
 
 
     ("marcato"
      . (
-       (script-stencil . (feta . ("dmarcato" . "umarcato")))
-       (padding . 0.20)
-       (avoid-slur . inside)
+        (script-stencil . (feta . ("dmarcato" . "umarcato")))
+        (padding . 0.20)
+        (avoid-slur . inside)
         ;;(staff-padding . ())
-       (quantize-position . #t)
-       (side-relative-direction . ,DOWN)))
+        (quantize-position . #t)
+        (side-relative-direction . ,DOWN)))
     ("mordent"
      . (
-       (script-stencil . (feta . ("mordent" . "mordent")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("mordent" . "mordent")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
 
 
     ("open"
      . (
-       (avoid-slur . outside)
-       (padding . 0.20)
-       (script-stencil . (feta . ("open" . "open")))
-       (direction . ,UP)))
+        (avoid-slur . outside)
+        (padding . 0.20)
+        (script-stencil . (feta . ("open" . "open")))
+        (direction . ,UP)))
 
 
     ("portato"
      . (
-       (script-stencil . (feta . ("uportato" . "dportato")))
-       (avoid-slur . around)
-       (padding . 0.45)
-       (side-relative-direction . ,DOWN)))
+        (script-stencil . (feta . ("uportato" . "dportato")))
+        (avoid-slur . around)
+        (padding . 0.45)
+        (side-relative-direction . ,DOWN)))
     ("prall"
      . (
-       (script-stencil . (feta . ("prall" . "prall")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("prall" . "prall")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
     ("pralldown"
      . (
-       (script-stencil . (feta . ("pralldown" . "pralldown")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("pralldown" . "pralldown")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
     ("prallmordent"
      . (
-       (script-stencil . (feta . ("prallmordent" . "prallmordent")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("prallmordent" . "prallmordent")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
     ("prallprall"
      . (
-       (script-stencil . (feta . ("prallprall" . "prallprall")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("prallprall" . "prallprall")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
     ("prallup"
      . (
-       (script-stencil . (feta . ("prallup" . "prallup")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("prallup" . "prallup")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
 
 
     ("reverseturn"
      . (
-       (script-stencil . (feta . ("reverseturn" . "reverseturn")))
-       (padding . 0.20)
-       (avoid-slur . inside)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("reverseturn" . "reverseturn")))
+        (padding . 0.20)
+        (avoid-slur . inside)
+        (direction . ,UP)))
     ("rheel"
      . (
-       (script-stencil . (feta . ("dpedalheel" . "dpedalheel")))
-       (padding . 0.20)
-       (avoid-slur . around) ;guessing?
-       (direction . ,UP)))
+        (script-stencil . (feta . ("dpedalheel" . "dpedalheel")))
+        (padding . 0.20)
+        (avoid-slur . around) ;guessing?
+        (direction . ,UP)))
     ("rtoe"
      . (
-       (script-stencil . (feta . ("dpedaltoe" . "dpedaltoe")))
-       (padding . 0.20)
-       (avoid-slur . around) ;guessing?
-       (direction . ,UP)))
+        (script-stencil . (feta . ("dpedaltoe" . "dpedaltoe")))
+        (padding . 0.20)
+        (avoid-slur . around) ;guessing?
+        (direction . ,UP)))
 
 
     ("segno"
      . (
-       (script-stencil . (feta . ("segno" . "segno")))
-       (padding . 0.20)
-       (avoid-slur . outside)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("segno" . "segno")))
+        (padding . 0.20)
+        (avoid-slur . outside)
+        (direction . ,UP)))
     ("semicirculus"
      . (
-       (script-stencil . (feta . ("dsemicirculus" . "dsemicirculus")))
-       (side-relative-direction . ,DOWN)
-       (quantize-position . #t)
-       (avoid-slur . ignore)
-       (padding . 0.20)
-       (script-priority . -100)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("dsemicirculus" . "dsemicirculus")))
+        (side-relative-direction . ,DOWN)
+        (quantize-position . #t)
+        (avoid-slur . ignore)
+        (padding . 0.20)
+        (script-priority . -100)
+        (direction . ,UP)))
     ("shortfermata"
      . (
-       (script-stencil . (feta . ("dshortfermata" . "ushortfermata")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("dshortfermata" . "ushortfermata")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
     ("signumcongruentiae"
      . (
-       (script-stencil . (feta . ("dsignumcongruentiae" . "usignumcongruentiae")))
-       (padding . 0.20)
-       (avoid-slur . outside)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("dsignumcongruentiae" . "usignumcongruentiae")))
+        (padding . 0.20)
+        (avoid-slur . outside)
+        (direction . ,UP)))
     ("snappizzicato"
      . (
-       (script-stencil . (feta . ("snappizzicato" . "snappizzicato")))
-       (padding . 0.20)
-       (avoid-slur . outside)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("snappizzicato" . "snappizzicato")))
+        (padding . 0.20)
+        (avoid-slur . outside)
+        (direction . ,UP)))
     ("staccatissimo"
      . (
-       (avoid-slur . inside)
-       (quantize-position . #t)
-       (script-stencil . (feta . ("dstaccatissimo" . "ustaccatissimo")))
-       (padding . 0.20)
-       (side-relative-direction . ,DOWN)))
+        (avoid-slur . inside)
+        (quantize-position . #t)
+        (script-stencil . (feta . ("dstaccatissimo" . "ustaccatissimo")))
+        (padding . 0.20)
+        (skyline-horizontal-padding . 0.10)
+        (side-relative-direction . ,DOWN)))
     ("staccato"
      . (
-       (script-stencil . (feta . ("staccato" . "staccato")))
-       (side-relative-direction . ,DOWN)
-       (quantize-position . #t)
-       (avoid-slur . inside)
-       (toward-stem-shift . 0.5)
-       (padding . 0.20)
-       (script-priority . -100)))
+        (script-stencil . (feta . ("staccato" . "staccato")))
+        (side-relative-direction . ,DOWN)
+        (quantize-position . #t)
+        (avoid-slur . inside)
+        (toward-stem-shift . 0.5)
+        (padding . 0.20)
+        (skyline-horizontal-padding . 0.10)
+        (script-priority . -100)))
     ("stopped"
      . (
-       (script-stencil . (feta . ("stopped" . "stopped")))
-       (avoid-slur . inside)
-       (padding . 0.20)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("stopped" . "stopped")))
+        (avoid-slur . inside)
+        (padding . 0.20)
+        (direction . ,UP)))
 
 
     ("tenuto"
      . (
-       (script-stencil . (feta . ("tenuto" . "tenuto")))
-       (quantize-position . #t)
-       (avoid-slur . inside)
-       (padding . 0.20)
-       (side-relative-direction . ,DOWN)))
-    ("thumb"
-     . (
-       (script-stencil . (feta . ("thumb"  . "thumb")))
-       (avoid-slur . around)
-       (padding . 0.50)
-       (direction . ,UP)
-       (staff-padding . 0.5)))
+        (script-stencil . (feta . ("tenuto" . "tenuto")))
+        (quantize-position . #t)
+        (avoid-slur . inside)
+        (padding . 0.20)
+        (side-relative-direction . ,DOWN)))
     ("trill"
      . (
-       (script-stencil . (feta . ("trill" . "trill")))
-       (direction . ,UP)
-       (padding . 0.20)
-       (avoid-slur . outside)
-       (script-priority . 2000)))
+        (script-stencil . (feta . ("trill" . "trill")))
+        (direction . ,UP)
+        (padding . 0.20)
+        (avoid-slur . outside)
+        (script-priority . 2000)))
     ("turn"
      . (
-       (script-stencil . (feta . ("turn" . "turn")))
-       (avoid-slur . inside)
-       (padding . 0.20)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("turn" . "turn")))
+        (avoid-slur . inside)
+        (padding . 0.20)
+        (direction . ,UP)))
 
 
     ("upbow"
      . (
-       (script-stencil . (feta . ("upbow" . "upbow")))
-       (avoid-slur . around)
-       (padding . 0.20)
-       (direction . ,UP)
-       (script-priority . 150)))
+        (script-stencil . (feta . ("upbow" . "upbow")))
+        (avoid-slur . around)
+        (padding . 0.20)
+        (direction . ,UP)
+        (script-priority . 150)))
     ("upmordent"
      . (
-       (script-stencil . (feta . ("upmordent" . "upmordent")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("upmordent" . "upmordent")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
     ("upprall"
      . (
-       (script-stencil . (feta . ("upprall" . "upprall")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("upprall" . "upprall")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
 
 
     ("varcoda"
      . (
-       (script-stencil . (feta . ("varcoda" . "varcoda")))
-       (padding . 0.20)
-       (avoid-slur . outside)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("varcoda" . "varcoda")))
+        (padding . 0.20)
+        (avoid-slur . outside)
+        (direction . ,UP)))
     ("varcomma"
      . (
-       (script-stencil . (feta . ("lvarcomma" . "rvarcomma")))
-       (quantize-position . #t)
-       (padding . 0.20)
-       (avoid-slur . ignore)
-       (direction . ,UP)))
+        (script-stencil . (feta . ("lvarcomma" . "rvarcomma")))
+        (quantize-position . #t)
+        (padding . 0.20)
+        (avoid-slur . ignore)
+        (direction . ,UP)))
     ("verylongfermata"
      . (
-       (script-stencil . (feta . ("dverylongfermata" . "uverylongfermata")))
-       (padding . 0.20)
-       (avoid-slur . around)
-       (direction . ,UP)))
-      ))
+        (script-stencil . (feta . ("dverylongfermata" . "uverylongfermata")))
+        (padding . 0.20)
+        (avoid-slur . around)
+        (direction . ,UP)))
+    ))
diff --git a/scm/skyline.scm b/scm/skyline.scm
new file mode 100644 (file)
index 0000000..0889414
--- /dev/null
@@ -0,0 +1,25 @@
+;;;; This file is part of LilyPond, the GNU music typesetter.
+;;;;
+;;;; Copyright (C) 2013 Mike Solomon <mike@mikesolomon.org>
+;;;;
+;;;; 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/>.
+
+(define-public (skyline-pair::empty? skyp)
+  (and (ly:skyline-empty? (ly:skyline-pair::skyline skyp UP))
+       (ly:skyline-empty? (ly:skyline-pair::skyline skyp DOWN))))
+
+;; checks if the pair is not null, and then if not empty
+(define-public (skyline-pair-and-non-empty? skyp)
+  (and (ly:skyline-pair? skyp)
+       (not (skyline-pair::empty? skyp))))
index 5eec46fdd69a34db7b00ce24f8aac3f6a95f2059..31cb1e8d48c2d35565127a0117d9d77e4ae0f0d7 100644 (file)
                (lambda (record) ((record-predicate ,record) record)))
          (set! ,$make-record
                (lambda* (#:key ,@slots)
-                 ((record-constructor ,record) ,@(map car slots*))))
+                        ((record-constructor ,record) ,@(map car slots*))))
          (set! ,$copy-record
                (lambda (record)
-                 (,$make-record ,@(apply
-                                   append
-                                   (map (lambda (slot)
-                                          (list (symbol->keyword slot)
-                                                (list (make-symbol reader-format slot) 'record)))
-                                        (map car slots*))))))
+                 (,$make-record ,@(append-map
+                                   (lambda (slot)
+                                     (list (symbol->keyword slot)
+                                           (list (make-symbol reader-format slot) 'record)))
+                                   (map car slots*)))))
          ,@(map (lambda (s)
                   `(set! ,(make-symbol reader-format (car s))
                          (record-accessor ,record (quote ,(car s)))))
@@ -160,11 +159,11 @@ If it unsets the property, return @code{#f}."
   "Return list of all @var{music}'s top-level children."
   (let ((elt (ly:music-property music 'element))
         (elts (ly:music-property music 'elements))
-       (arts (ly:music-property music 'articulations)))
+        (arts (ly:music-property music 'articulations)))
     (if (pair? arts)
-       (set! elts (append elts arts)))
+        (set! elts (append elts arts)))
     (if (null? elt)
-       elts
+        elts
         (cons elt elts))))
 
 (define-public (find-child music predicate)
@@ -193,9 +192,9 @@ If a non-boolean is returned, it is considered the material to recurse."
         (let* ((elt (car queue))
                (stop (function elt)))
           (process-music (if (boolean? stop)
-                            (if stop
-                                (cdr queue)
-                                (append (music-elements elt) (cdr queue)))
-                            ((if (cheap-list? stop) append cons)
-                             stop (cdr queue)))))))
+                             (if stop
+                                 (cdr queue)
+                                 (append (music-elements elt) (cdr queue)))
+                             ((if (cheap-list? stop) append cons)
+                              stop (cdr queue)))))))
   (process-music (list music)))
index 171ef6e191d3c4d685124d0e9e2a3ed087e0adf8..db7a8ee6797fdfe68b6c3988b7604b3afe9e8289 100644 (file)
@@ -45,7 +45,7 @@
 ;; The resulting base octave is sum of *base-octave* and
 ;; *base-octave-shift*.  This is done to work around a Festival bug
 ;; causing Festival to segfault or produce invalid pitch on higher pitches.
-;(define *base-octave-shift* -2)
+;(define *base-octave-shift* -2)
 (define *base-octave-shift* (make-parameter 0))
 
 ;; The coeficient by which the notes just before \breath are shortened.
 (define (tempo->beats music)
   (let* ((tempo-spec (find-child-named music 'SequentialMusic))
          (tempo (cond
-                (tempo-spec
-                 (let ((tempo-event (find-child-named tempo-spec
-                                                      'TempoChangeEvent)))
-                   (and tempo-event
-                        (let ((count (ly:music-property tempo-event
-                                                        'metronome-count)))
-                          (* (if (pair? count)
-                                 (round (/ (+ (car count) (cdr count)) 2))
-                                 count)
-                             (duration->number
-                              (ly:music-property tempo-event 'tempo-unit)))))))
-                (else
+                 (tempo-spec
+                  (let ((tempo-event (find-child-named tempo-spec
+                                                       'TempoChangeEvent)))
+                    (and tempo-event
+                         (let ((count (ly:music-property tempo-event
+                                                         'metronome-count)))
+                           (* (if (pair? count)
+                                  (round (/ (+ (car count) (cdr count)) 2))
+                                  count)
+                              (duration->number
+                               (ly:music-property tempo-event 'tempo-unit)))))))
+                 (else
                   (format #t "Programming error (tempo->beats): ~a~%"
-                         tempo-spec)))))
+                          tempo-spec)))))
     (debug-enable 'backtrace)
     (and tempo
-        (set! *default-tempo* (property-value
-                               (find-child tempo-spec (lambda (elt)
-                                                        (music-property? elt 'tempoWholesPerMinute)))))
-        (round (* tempo (expt 2 (+ 2 (*base-octave-shift*))))))))
+         (set! *default-tempo* (property-value
+                                (find-child tempo-spec (lambda (elt)
+                                                         (music-property? elt 'tempoWholesPerMinute)))))
+         (round (* tempo (expt 2 (+ 2 (*base-octave-shift*))))))))
 
 (defstruct music-context
   music
        (cond
         ((music-name? music* 'LyricCombineMusic)
          (push! (make-music-context #:music music*
-                                              #:context (ly:music-property music* 'associated-context))
-                     music-context-list)
+                                    #:context (ly:music-property music* 'associated-context))
+                music-context-list)
          #t)
         ((and (music-name? music* 'ContextSpeccedMusic)
               (music-property-value? music* 'context-type 'Lyrics)
          (let ((name-node (find-child music* (lambda (node) (music-property? node 'associatedVoice)))))
            (if name-node
                (push! (make-music-context #:music music* #:context (property-value name-node))
-                           music-context-list)))
+                      music-context-list)))
          #t)
         (else
          #f))))
         ((music-name? music '(EventChord LyricEvent))
          (let ((lyric-event (find-child-named music 'LyricEvent)))
            (push! (make-lyrics
-                        #:text (ly:music-property lyric-event 'text)
-                        #:duration (* (duration->number (ly:music-property lyric-event 'duration)) 4)
-                        #:unfinished (and (not (*syllabify*)) (find-child-named music 'HyphenEvent))
-                        #:ignore-melismata ignore-melismata
-                        #:context current-voice)
-                       lyrics-list))
+                   #:text (ly:music-property lyric-event 'text)
+                   #:duration (* (duration->number (ly:music-property lyric-event 'duration)) 4)
+                   #:unfinished (and (not (*syllabify*)) (find-child-named music 'HyphenEvent))
+                   #:ignore-melismata ignore-melismata
+                   #:context current-voice)
+                  lyrics-list))
          ;; LilyPond delays applying settings
          (set! ignore-melismata next-ignore-melismata)
          (set! current-voice next-current-voice)
         ;; skipping
         ((music-name? music 'SkipMusic)
          (push! (make-skip
-                      #:duration (* (duration->number (ly:music-property music 'duration)) 4)
-                      #:context current-voice)
-                     lyrics-list)
+                 #:duration (* (duration->number (ly:music-property music 'duration)) 4)
+                 #:context current-voice)
+                lyrics-list)
          #t)
         ;; parameter change
         ((music-property? music 'ignoreMelismata)
   )
 
 (defstruct score-notes
-  note/rest-list ; list of note and rest instances
-  (verse-block-list '()) ; lyrics attached to notes -- multiple elements are
-                         ; possible for multiple stanzas
+  note/rest-list                        ; list of note and rest instances
+  (verse-block-list '())                ; lyrics attached to notes -- multiple
+                                        ; elements are possible for
+                                        ; multiple stanzas
   )
 
 (defstruct note
          (let ((context (ly:music-property music 'context-id))
                (children (music-elements music)))
            (add! (make-score-voice #:context (debug "Changing context" context)
-                                             #:elements (append-map (lambda (elt)
-                                                                      (get-notes* elt autobeaming))
-                                                                    children))
-                      result-list))
+                                   #:elements (append-map (lambda (elt)
+                                                            (get-notes* elt autobeaming))
+                                                          children))
+                 result-list))
          #t)
         ;; timing change
         ((music-property? music 'timeSignatureFraction)
          (let ((repeat-count (ly:music-property music 'repeat-count))
                (children (music-elements music)))
            (add! (make-score-repetice #:count repeat-count
-                                                #:elements (append-map
-                                                            (lambda (elt) (get-notes* elt autobeaming))
-                                                            children))
-                      result-list))
+                                      #:elements (append-map
+                                                  (lambda (elt) (get-notes* elt autobeaming))
+                                                  children))
+                 result-list))
          #t)
         ;; a note or rest
         ((or (music-name? music 'EventChord)
                                               events))))
                (set! in-slur (+ in-slur slur-start (- slur-end)))
                (let ((note-spec (make-note #:pitch pitch #:duration duration #:joined in-slur
-                                                #:origin (ly:music-property note 'origin)))
+                                           #:origin (ly:music-property note 'origin)))
                      (last-result (and (not (null? result-list)) (last result-list))))
                  (set! last-note-spec note-spec)
                  (if (and last-result
              (debug "Rest" rest)
              (let* ((duration (* (duration->number (ly:music-property rest 'duration)) 4))
                     (rest-spec (make-rest #:duration duration
-                                               #:origin (ly:music-property rest 'origin)))
+                                          #:origin (ly:music-property rest 'origin)))
                     (last-result (and (not (null? result-list)) (last result-list))))
                (if (and last-result
                         (score-notes? last-result))
                    (set-score-notes-note/rest-list! last-result
-                                                         (append (score-notes-note/rest-list last-result)
-                                                                 (list rest-spec)))
+                                                    (append (score-notes-note/rest-list last-result)
+                                                            (list rest-spec)))
                    (add! (make-score-notes #:note/rest-list (list rest-spec)) result-list))))))
-        (filter
-         (lambda (m)
-           (not (music-name? m '(RestEvent
-                                 NoteEvent
-                                 LyricEvent
-                                 MultiMeasureRestEvent))))
-         (ly:music-property music 'elements)))
-       ((music-name? music '(RestEvent
-                             NoteEvent
-                             LyricEvent
-                             MultiMeasureRestEvent))
-        (make-music 'EventChord
-                    'elements
-                    (cons music
-                          (ly:music-property music 'articulations))))
+         (filter
+          (lambda (m)
+            (not (music-name? m '(RestEvent
+                                  NoteEvent
+                                  LyricEvent
+                                  MultiMeasureRestEvent))))
+          (ly:music-property music 'elements)))
+        ((music-name? music '(RestEvent
+                              NoteEvent
+                              LyricEvent
+                              MultiMeasureRestEvent))
+         (make-music 'EventChord
+                     'elements
+                     (cons music
+                           (ly:music-property music 'articulations))))
         ;; autobeaming change
         ((music-property? music 'autoBeaming)
          (set! autobeaming (property-value music))
            (set! in-slur (+ in-slur change))
            (if last-note-spec
                (set-note-joined! last-note-spec (+ (note-joined last-note-spec) change))))
-        #t)
+         #t)
         ;; tempo change
         ((music-property? music 'tempoWholesPerMinute)
          (set! *tempo-compression* (ly:moment-div *default-tempo* (property-value music)))
-        #t)
+         #t)
         ;; breathe
         ((music-name? music 'BreathingEvent)
          (if last-note-spec
              (let* ((note-duration (note-duration last-note-spec))
                     (rest-spec (make-rest #:duration (* note-duration (- 1 (*breathe-shortage*)))
-                                               #:origin (ly:music-property music 'origin))))
+                                          #:origin (ly:music-property music 'origin))))
                (set-note-duration! last-note-spec (* note-duration (*breathe-shortage*)))
                (add! (make-score-notes #:note/rest-list (list rest-spec)) result-list))
              (warning music "\\\\breathe without previous note known"))
-        #t)
+         #t)
         ;; anything else
         (else
          #f))))
         (let ((new-context (score-voice-context score)))
           (if (equal? new-context lyrics-context)
               (insert-lyrics*! lyrics/skip-list
-                                    (append (score-voice-elements score)
-                                            (if (null? (cdr score-list))
-                                                '()
-                                                (list (make-score-voice #:context context
-                                                                             #:elements (cdr score-list)))))
-                                    new-context)
+                               (append (score-voice-elements score)
+                                       (if (null? (cdr score-list))
+                                           '()
+                                           (list (make-score-voice #:context context
+                                                                   #:elements (cdr score-list)))))
+                               new-context)
               (insert-lyrics*! lyrics/skip-list (cdr score-list) context))))
        ((score-choice? score)
         (let* ((lists* (score-choice-lists score))
                (score* #f))
           (while (and (not score*)
                       (not (null? lists)))
-            (set! score* (find-lyrics-score (car lists) lyrics-context allow-default))
-            (set! lists (cdr lists))
-            (if (not score*)
-                (set! n (+ n 1)))
-            (if (and (null? lists)
-                     (not allow-default)
-                     (equal? lyrics-context context))
-                (begin
-                  (set! allow-default #t)
-                  (set! n 0)
-                  (set! lists (score-choice-lists score)))))
+                 (set! score* (find-lyrics-score (car lists) lyrics-context allow-default))
+                 (set! lists (cdr lists))
+                 (if (not score*)
+                     (set! n (+ n 1)))
+                 (if (and (null? lists)
+                          (not allow-default)
+                          (equal? lyrics-context context))
+                     (begin
+                       (set! allow-default #t)
+                       (set! n 0)
+                       (set! lists (score-choice-lists score)))))
           (debug "Selected score" score*)
           (if (and score*
                    (>= n n-assigned))
               (begin
                 (if (> n n-assigned)
                     (receive (assigned-elts unassigned-elts) (split-at lists* n-assigned)
-                      (set-score-choice-lists! score (append assigned-elts
-                                                                  (list (list-ref lists* n))
-                                                                  (take unassigned-elts (- n n-assigned))
-                                                                  lists))))
+                             (set-score-choice-lists! score (append assigned-elts
+                                                                    (list (list-ref lists* n))
+                                                                    (take unassigned-elts (- n n-assigned))
+                                                                    lists))))
                 (set-score-choice-n-assigned! score (+ n-assigned 1))))
           (insert-lyrics*! lyrics/skip-list (append (if score* (list score*) '()) (cdr score-list)) context)))
        ((score-repetice? score)
         (insert-lyrics*! lyrics/skip-list
-                              (append (score-repetice-elements score) (cdr score-list)) context))
+                         (append (score-repetice-elements score) (cdr score-list)) context))
        ((score-notes? score)
         ;; This is the only part which actually attaches the processed lyrics.
         ;; The subsequent calls return verses which we collect into a verse block.
         (unfinished-verse #f)
         (verse-list '()))
     (while (not (null? note-list))
-      (if (null? lyrics/skip-list)
-          (let ((final-rests '()))
-            (while (and (not (null? note-list))
-                        (rest? (car note-list)))
-              (push! (car note-list) final-rests)
-              (set! note-list (cdr note-list)))
-            (if (not (null? final-rests))
-                (set! verse-list (append verse-list
-                                         (list (make-verse #:text ""
+           (if (null? lyrics/skip-list)
+               (let ((final-rests '()))
+                 (while (and (not (null? note-list))
+                             (rest? (car note-list)))
+                        (push! (car note-list) final-rests)
+                        (set! note-list (cdr note-list)))
+                 (if (not (null? final-rests))
+                     (set! verse-list (append verse-list
+                                              (list (make-verse #:text ""
                                                                 #:notelist/rests (reverse! final-rests))))))
-            (if (not (null? note-list))
-                (begin
-                  (warning (car note-list) "Missing lyrics: ~a ~a" context note-list)
-                  (set! note-list '()))))
-          (let ((lyrics/skip (car lyrics/skip-list)))
-            (receive (notelist/rest note-list*) (if (lyrics? lyrics/skip)
-                                                    (consume-lyrics-notes lyrics/skip note-list context)
-                                                    (consume-skip-notes lyrics/skip note-list context))
-              (debug "Consumed notes" (list lyrics/skip notelist/rest))
-              (set! note-list note-list*)
-              (cond
-               ((null? notelist/rest)
-                #f)
-               ;; Lyrics
-               ((and (lyrics? lyrics/skip)
-                     unfinished-verse)
-                (set-verse-text!
-                 unfinished-verse
-                 (string-append (verse-text unfinished-verse) (lyrics-text lyrics/skip)))
-                (set-verse-notelist/rests!
-                 unfinished-verse
-                 (append (verse-notelist/rests unfinished-verse) (list notelist/rest)))
-                (if (not (lyrics-unfinished lyrics/skip))
-                    (set! unfinished-verse #f)))
-               ((lyrics? lyrics/skip)
-                (let ((verse (make-verse #:text (if (rest? notelist/rest)
-                                                         ""
-                                                         (lyrics-text lyrics/skip))
-                                              #:notelist/rests (list notelist/rest))))
-                  (add! verse verse-list)
-                  (set! unfinished-verse (if (lyrics-unfinished lyrics/skip) verse #f))))
-               ;; Skip
-               ((skip? lyrics/skip)
-                (cond
-                 ((rest? notelist/rest)
-                  (if (null? verse-list)
-                      (set! verse-list (list (make-verse #:text ""
-                                                              #:notelist/rests (list notelist/rest))))
-                      (let ((last-verse (last verse-list)))
-                        (set-verse-notelist/rests!
-                         last-verse
-                         (append (verse-notelist/rests last-verse) (list notelist/rest))))))
-                 ((pair? notelist/rest)
-                  (add! (make-verse #:text (*skip-word*) #:notelist/rests (list notelist/rest))
-                             verse-list))
-                 (else
-                  (error "Unreachable branch reached")))
-                (set! unfinished-verse #f)))
-              (if (not (rest? notelist/rest))
-                  (set! lyrics/skip-list (cdr lyrics/skip-list)))))))
+                 (if (not (null? note-list))
+                     (begin
+                       (warning (car note-list) "Missing lyrics: ~a ~a" context note-list)
+                       (set! note-list '()))))
+               (let ((lyrics/skip (car lyrics/skip-list)))
+                 (receive (notelist/rest note-list*) (if (lyrics? lyrics/skip)
+                                                         (consume-lyrics-notes lyrics/skip note-list context)
+                                                         (consume-skip-notes lyrics/skip note-list context))
+                          (debug "Consumed notes" (list lyrics/skip notelist/rest))
+                          (set! note-list note-list*)
+                          (cond
+                           ((null? notelist/rest)
+                            #f)
+                           ;; Lyrics
+                           ((and (lyrics? lyrics/skip)
+                                 unfinished-verse)
+                            (set-verse-text!
+                             unfinished-verse
+                             (string-append (verse-text unfinished-verse) (lyrics-text lyrics/skip)))
+                            (set-verse-notelist/rests!
+                             unfinished-verse
+                             (append (verse-notelist/rests unfinished-verse) (list notelist/rest)))
+                            (if (not (lyrics-unfinished lyrics/skip))
+                                (set! unfinished-verse #f)))
+                           ((lyrics? lyrics/skip)
+                            (let ((verse (make-verse #:text (if (rest? notelist/rest)
+                                                                ""
+                                                                (lyrics-text lyrics/skip))
+                                                     #:notelist/rests (list notelist/rest))))
+                              (add! verse verse-list)
+                              (set! unfinished-verse (if (lyrics-unfinished lyrics/skip) verse #f))))
+                           ;; Skip
+                           ((skip? lyrics/skip)
+                            (cond
+                             ((rest? notelist/rest)
+                              (if (null? verse-list)
+                                  (set! verse-list (list (make-verse #:text ""
+                                                                     #:notelist/rests (list notelist/rest))))
+                                  (let ((last-verse (last verse-list)))
+                                    (set-verse-notelist/rests!
+                                     last-verse
+                                     (append (verse-notelist/rests last-verse) (list notelist/rest))))))
+                             ((pair? notelist/rest)
+                              (add! (make-verse #:text (*skip-word*) #:notelist/rests (list notelist/rest))
+                                    verse-list))
+                             (else
+                              (error "Unreachable branch reached")))
+                            (set! unfinished-verse #f)))
+                          (if (not (rest? notelist/rest))
+                              (set! lyrics/skip-list (cdr lyrics/skip-list)))))))
     (if unfinished-verse
         (set-verse-unfinished! unfinished-verse #t))
     (set-score-notes-verse-block-list!
             (consumed '()))
         (while (and join
                     (not (null? note-list)))
-          (let ((note (car note-list)))
-            (push! note consumed)
-            (let ((note-slur (note-joined note)))
-              (if (< note-slur 0)
-                  (warning note "Slur underrun"))
-              (set! join (and (not ignore-melismata) (> note-slur 0)))))
-          (set! note-list (cdr note-list)))
+               (let ((note (car note-list)))
+                 (push! note consumed)
+                 (let ((note-slur (note-joined note)))
+                   (if (< note-slur 0)
+                       (warning note "Slur underrun"))
+                   (set! join (and (not ignore-melismata) (> note-slur 0)))))
+               (set! note-list (cdr note-list)))
         (if join
             (warning (safe-car (if (null? note-list) consumed note-list))
                      "Unfinished slur: ~a ~a" context consumed))
         (consumed '()))
     (while (and (> duration epsilon)
                 (not (null? note-list)))
-      (let ((note (car note-list)))
-        (assert (note? note))
-        (push! note consumed)
-        (set! duration (- duration (note-duration note))))
-      (set! note-list (cdr note-list)))
+           (let ((note (car note-list)))
+             (assert (note? note))
+             (push! note consumed)
+             (set! duration (- duration (note-duration note))))
+           (set! note-list (cdr note-list)))
     (set! consumed (reverse! consumed))
     (cond
      ((> duration epsilon)
       (warning (if (null? note-list) (safe-last consumed) (safe-car note-list))
-                    "Excessive skip: ~a ~a ~a ~a" context skip duration consumed))
+               "Excessive skip: ~a ~a ~a ~a" context skip duration consumed))
      ((< duration (- epsilon))
       (warning (if (null? note-list) (safe-last consumed) (safe-car note-list))
-                    "Skip misalignment: ~a ~a ~a ~a" context skip duration consumed)))
+               "Skip misalignment: ~a ~a ~a ~a" context skip duration consumed)))
     (values (if (*skip-word*)
                 consumed
                 '())
                              (score-choice-lists score)))))
    ((score-repetice? score)
     (list (make-repeated-blocks #:count (score-repetice-count score)
-                                     #:block-list (append-map extract-verse-blocks
-                                                              (score-repetice-elements score)))))
+                                #:block-list (append-map extract-verse-blocks
+                                                         (score-repetice-elements score)))))
    ((score-notes? score)
     (list (make-parallel-blocks #:block-list (score-notes-verse-block-list score))))
    (else
   (debug "Final score list" score-list)
   (let ((verse-block-list (debug "Verse blocks" (append-map extract-verse-blocks score-list))))
     (letrec ((combine (lambda (lst-1 lst-2)
-                         (debug "Combining lists" (list lst-1 lst-2))
-                         (if (null? lst-2)
-                             lst-1
-                             (let ((diff (- (length lst-1) (length lst-2))))
-                               (if (< diff 0)
-                                   (let ((last-elt (last lst-1)))
-                                     (while (< diff 0)
-                                       (add! last-elt lst-1)
-                                       (set! diff (+ diff 1))))
-                                   (let ((last-elt (last lst-2)))
-                                     (while (> diff 0)
-                                       (add! last-elt lst-2)
-                                       (set! diff (- diff 1)))))
-                               (debug "Combined" (map append lst-1 lst-2))))))
+                        (debug "Combining lists" (list lst-1 lst-2))
+                        (if (null? lst-2)
+                            lst-1
+                            (let ((diff (- (length lst-1) (length lst-2))))
+                              (if (< diff 0)
+                                  (let ((last-elt (last lst-1)))
+                                    (while (< diff 0)
+                                           (add! last-elt lst-1)
+                                           (set! diff (+ diff 1))))
+                                  (let ((last-elt (last lst-2)))
+                                    (while (> diff 0)
+                                           (add! last-elt lst-2)
+                                           (set! diff (- diff 1)))))
+                              (debug "Combined" (map append lst-1 lst-2))))))
              (expand* (lambda (block)
                         (cond
                          ((parallel-blocks? block)
                                 (expanded (expand (repeated-blocks-block-list block)))
                                 (expanded* '()))
                             (while (not (null? expanded))
-                              (let ((count* count)
-                                    (item '()))
-                                (while (and (> count* 0) (not (null? expanded)))
-                                  (set! item (append item (car expanded)))
-                                  (set! expanded (cdr expanded))
-                                  (set! count* (- count* 1)))
-                                (push! item expanded*)))
+                                   (let ((count* count)
+                                         (item '()))
+                                     (while (and (> count* 0) (not (null? expanded)))
+                                            (set! item (append item (car expanded)))
+                                            (set! expanded (cdr expanded))
+                                            (set! count* (- count* 1)))
+                                     (push! item expanded*)))
                             (reverse expanded*)))
                          (else
                           (list (list block))))))
                        (if (null? block-list)
                            '()
                            (debug "Expanded" (combine (expand* (car block-list))
-                                                           (expand (cdr block-list)))))))
+                                                      (expand (cdr block-list)))))))
              (merge (lambda (verse-list)
                       (cond
                        ((null? verse-list)
                         (let ((verse-1 (first verse-list))
                               (verse-2 (second verse-list)))
                           (merge (cons (make-verse #:text (string-append (verse-text verse-1)
-                                                                              (verse-text verse-2))
-                                                        #:notelist/rests (append (verse-notelist/rests verse-1)
-                                                                                 (verse-notelist/rests verse-2))
-                                                        #:unfinished (verse-unfinished verse-2))
+                                                                         (verse-text verse-2))
+                                                   #:notelist/rests (append (verse-notelist/rests verse-1)
+                                                                            (verse-notelist/rests verse-2))
+                                                   #:unfinished (verse-unfinished verse-2))
                                        (cddr verse-list)))))
                        (else
                         (cons (car verse-list) (merge (cdr verse-list))))))))
       (debug "Final verses" (merge (append-map (lambda (lst) (append-map verse-block-verse-list lst))
-                                                    (expand verse-block-list)))))))
+                                               (expand verse-block-list)))))))
 
 (define (handle-music music)
   ;; Returns list of verses.
 
 
 (define festival-note-mapping '((0 "C") (1 "C#") (2 "D") (3 "D#") (4 "E") (5 "F") (6 "F#")
-                                     (7 "G") (8 "G#") (9 "A") (10 "A#") (11 "B")))
+                                (7 "G") (8 "G#") (9 "A") (10 "A#") (11 "B")))
 (define (festival-pitch pitch)
   (let* ((semitones (ly:pitch-semitones pitch))
          (octave (inexact->exact (floor (/ semitones 12))))
                 (let ((text (verse-text verse))
                       (note/rest-list (verse-notelist/rests verse)))
                   (receive (rest-list note-listlist) (partition rest? note/rest-list)
-                    (debug "Rest list" rest-list)
-                    (debug "Note list" note-listlist)
-                    (if (not (null? rest-list))
-                        (set! rest-dur (+ rest-dur (apply + (map rest-duration rest-list)))))
-                    (if (not (null? note-listlist))
-                        (begin
-                          (if (> rest-dur 0)
-                              (begin
-                                (write-rest-element port rest-dur)
-                                (set! rest-dur 0)))
-                          (write-lyrics-element port text note-listlist))))))
+                           (debug "Rest list" rest-list)
+                           (debug "Note list" note-listlist)
+                           (if (not (null? rest-list))
+                               (set! rest-dur (+ rest-dur (apply + (map rest-duration rest-list)))))
+                           (if (not (null? note-listlist))
+                               (begin
+                                 (if (> rest-dur 0)
+                                     (begin
+                                       (write-rest-element port rest-dur)
+                                       (set! rest-dur 0)))
+                                 (write-lyrics-element port text note-listlist))))))
               (handle-music music))
     (if (> rest-dur 0)
         (write-rest-element port rest-dur))))
index bd3b7593acb96917875efadc1180a66b02d849fe..ee44d43878da2c23aa8a71312f3b4eb7e50bbac5 100644 (file)
 
 (define (gulp-file name)
   (let* ((file (open-input-file name))
-        (text (read-delimited "" file)))
+         (text (read-delimited "" file)))
     (close file)
     text))
 
 (define (scm-gulp-file name)
-  (set! %load-path 
-       (cons (string-append (getenv "LILYPOND_DATADIR") "/ly")
-             (cons (string-append (getenv "LILYPOND_DATADIR") "/ps")
-                   %load-path)))
+  (set! %load-path
+        (cons (string-append (getenv "LILYPOND_DATADIR") "/ly")
+              (cons (string-append (getenv "LILYPOND_DATADIR") "/ps")
+                    %load-path)))
   (let ((path (%search-load-path name)))
-       (if path
-          (gulp-file path)
-          (gulp-file name))))
+    (if path
+        (gulp-file path)
+        (gulp-file name))))
 
 (define (scm-number->string x)
   (let ((e (inexact->exact x)))
     (string-append (if (= e x)
-                      (number->string e)
-                      (number->string x))
-                  " ")))
+                       (number->string e)
+                       (number->string x))
+                   " ")))
 
 (define ly:gulp-file scm-gulp-file)
 (define ly:number->string scm-number->string)
index 0ecc9abe8ed4f4206f351b822d5973497b612013..a457087b15913aaced436bf96942c702853e7bd3 100644 (file)
                          ,(car (list-ref coords 6))
                          ,(cdr (list-ref coords 6))
                          closepath)))
-  (ly:make-stencil
-    `(path ,thick `(,@' ,command-list) 'round 'round #t)
-    xext
-    yext)))
+    (ly:make-stencil
+     `(path ,thick `(,@' ,command-list) 'round 'round #t)
+     xext
+     yext)))
 
 (define-public (stack-stencils axis dir padding stils)
   "Stack stencils @var{stils} in direction @var{axis}, @var{dir}, using
 @var{padding}."
-  (cond
-   ((null? stils) empty-stencil)
-   ((null? (cdr stils)) (car stils))
-   (else (ly:stencil-combine-at-edge
-         (car stils) axis dir (stack-stencils axis dir padding (cdr stils))
-         padding))))
-
-(define-public (stack-stencils-padding-list axis dir padding stils)
+  (reduce
+   (lambda (next front)
+     (ly:stencil-stack front axis dir next padding))
+   empty-stencil
+   stils))
+
+(define-public (stack-stencils-padding-list axis dir paddings stils)
   "Stack stencils @var{stils} in direction @var{axis}, @var{dir}, using
-a list of @var{padding}."
-  (cond
-   ((null? stils) empty-stencil)
-   ((null? (cdr stils)) (car stils))
-   (else (ly:stencil-combine-at-edge
-         (car stils)
-         axis dir
-         (stack-stencils-padding-list axis dir (cdr padding) (cdr stils))
-         (car padding)))))
+a list of @var{paddings}."
+  (if (null? stils)
+      empty-stencil
+      (fold
+       (lambda (next padding front)
+         (let ((offset (+ (- (interval-end (ly:stencil-extent front axis))
+                             (interval-start (ly:stencil-extent next axis)))
+                          padding)))
+           (ly:stencil-add
+             front
+             (ly:stencil-translate-axis next offset axis))))
+       (car stils)
+       (cdr stils)
+       paddings)))
 
 (define-public (centered-stencil stencil)
   "Center stencil @var{stencil} in both the X and Y directions."
@@ -67,48 +71,35 @@ a list of @var{padding}."
 
 (define-public (stack-lines dir padding baseline stils)
   "Stack vertically with a baseline skip."
-  (define result empty-stencil)
-  (define last-y #f)
-  (do
-      ((last-stencil #f (car p))
-       (p stils (cdr p)))
-
-      ((null? p))
-
-    (if (number? last-y)
-       (begin
-         (let* ((dy (max (+ (* dir (interval-bound (ly:stencil-extent last-stencil Y) dir))
-                            padding
-                            (* (- dir) (interval-bound (ly:stencil-extent (car p) Y) (- dir))))
-                         baseline))
-                (y (+ last-y  (* dir dy))))
-
-
-
-           (set! result
-                 (ly:stencil-add result (ly:stencil-translate-axis (car p) y Y)))
-           (set! last-y y)))
-       (begin
-         (set! last-y 0)
-         (set! result (car p)))))
-
-  result)
-
+  (reduce-right
+   (lambda (next back) (ly:stencil-stack next Y dir back padding baseline))
+   empty-stencil
+   (map
+    (lambda (s)
+      ;; X-empty stencils may add vertical space.  A stencil that is
+      ;; merely Y-empty counts as horizontal spacing.  Since we want
+      ;; those to register as lines of their own (is this a good
+      ;; idea?), we make them a separately visible line.
+      (if (and (ly:stencil-empty? s Y)
+               (not (ly:stencil-empty? s X)))
+          (ly:make-stencil (ly:stencil-expr s) (ly:stencil-extent s X) '(0 . 0))
+          s))
+    stils)))
 
 (define-public (bracketify-stencil stil axis thick protrusion padding)
   "Add brackets around @var{stil}, producing a new stencil."
 
   (let* ((ext (ly:stencil-extent stil axis))
-        (lb (ly:bracket axis ext thick protrusion))
-        (rb (ly:bracket axis ext thick (- protrusion))))
+         (lb (ly:bracket axis ext thick protrusion))
+         (rb (ly:bracket axis ext thick (- protrusion))))
     (set! stil
-         (ly:stencil-combine-at-edge stil (other-axis axis) 1 rb padding))
+          (ly:stencil-combine-at-edge stil (other-axis axis) 1 rb padding))
     (set! stil
-         (ly:stencil-combine-at-edge lb (other-axis axis) 1 stil padding))
+          (ly:stencil-combine-at-edge stil (other-axis axis) -1 lb padding))
     stil))
 
 (define (make-parenthesis-stencil
-        y-extent half-thickness width angularity)
+         y-extent half-thickness width angularity)
   "Create a parenthesis stencil.
 @var{y-extent} is the Y extent of the markup inside the parenthesis.
 @var{half-thickness} is the half thickness of the parenthesis.
@@ -116,71 +107,71 @@ a list of @var{padding}."
 The higher the value of number @var{angularity},
 the more angular the shape of the parenthesis."
   (let* ((line-width 0.1)
-        ;; Horizontal position of baseline that end points run through.
-        (base-x
-         (if (< width 0)
-             (- width)
-             0))
+         ;; Horizontal position of baseline that end points run through.
+         (base-x
+          (if (< width 0)
+              (- width)
+              0))
          ;; X value farthest from baseline on outside  of curve
          (outer-x (+ base-x width))
          ;; X extent of bezier sandwich centerline curves
          (x-extent (ordered-cons base-x outer-x))
-        (bottom-y (interval-start y-extent))
-        (top-y (interval-end y-extent))
-
-        (lower-end-point (cons base-x bottom-y))
-        (upper-end-point (cons base-x top-y))
-
-        (outer-control-x (+ base-x (* 4/3 width)))
-        (inner-control-x (+ outer-control-x
-                            (if (< width 0)
-                                half-thickness
-                                (- half-thickness))))
-
-        ;; Vertical distance between a control point
-        ;; and the end point it connects to.
-        (offset-index (- (* 0.6 angularity) 0.8))
-        (lower-control-y (interval-index y-extent offset-index))
-        (upper-control-y (interval-index y-extent (- offset-index)))
-
-        (lower-outer-control-point
-         (cons outer-control-x lower-control-y))
-        (upper-outer-control-point
-         (cons outer-control-x upper-control-y))
-        (upper-inner-control-point
-         (cons inner-control-x upper-control-y))
-        (lower-inner-control-point
-         (cons inner-control-x lower-control-y)))
+         (bottom-y (interval-start y-extent))
+         (top-y (interval-end y-extent))
+
+         (lower-end-point (cons base-x bottom-y))
+         (upper-end-point (cons base-x top-y))
+
+         (outer-control-x (+ base-x (* 4/3 width)))
+         (inner-control-x (+ outer-control-x
+                             (if (< width 0)
+                                 half-thickness
+                                 (- half-thickness))))
+
+         ;; Vertical distance between a control point
+         ;; and the end point it connects to.
+         (offset-index (- (* 0.6 angularity) 0.8))
+         (lower-control-y (interval-index y-extent offset-index))
+         (upper-control-y (interval-index y-extent (- offset-index)))
+
+         (lower-outer-control-point
+          (cons outer-control-x lower-control-y))
+         (upper-outer-control-point
+          (cons outer-control-x upper-control-y))
+         (upper-inner-control-point
+          (cons inner-control-x upper-control-y))
+         (lower-inner-control-point
+          (cons inner-control-x lower-control-y)))
 
     (make-bezier-sandwich-stencil
-      (list
-            ;; Step 4: curve through inner control points
-            ;; to lower end point.
-            upper-inner-control-point
-            lower-inner-control-point
-            lower-end-point
-            ;; Step 3: move to upper end point.
-            upper-end-point
-            ;; Step 2: curve through outer control points
-            ;; to upper end point.
-            lower-outer-control-point
-            upper-outer-control-point
-            upper-end-point
-            ;; Step 1: move to lower end point.
-            lower-end-point)
-      line-width
-      (interval-widen x-extent (/ line-width 2))
-      (interval-widen y-extent (/ line-width 2)))))
+     (list
+      ;; Step 4: curve through inner control points
+      ;; to lower end point.
+      upper-inner-control-point
+      lower-inner-control-point
+      lower-end-point
+      ;; Step 3: move to upper end point.
+      upper-end-point
+      ;; Step 2: curve through outer control points
+      ;; to upper end point.
+      lower-outer-control-point
+      upper-outer-control-point
+      upper-end-point
+      ;; Step 1: move to lower end point.
+      lower-end-point)
+     line-width
+     (interval-widen x-extent (/ line-width 2))
+     (interval-widen y-extent (/ line-width 2)))))
 
 (define-public (parenthesize-stencil
-               stencil half-thickness width angularity padding)
+                stencil half-thickness width angularity padding)
   "Add parentheses around @var{stencil}, returning a new stencil."
   (let* ((y-extent (ly:stencil-extent stencil Y))
-        (lp (make-parenthesis-stencil
-             y-extent half-thickness (- width) angularity))
-        (rp (make-parenthesis-stencil
-             y-extent half-thickness width angularity)))
-    (set! stencil (ly:stencil-combine-at-edge lp X RIGHT stencil padding))
+         (lp (make-parenthesis-stencil
+              y-extent half-thickness (- width) angularity))
+         (rp (make-parenthesis-stencil
+              y-extent half-thickness width angularity)))
+    (set! stencil (ly:stencil-combine-at-edge stencil X LEFT lp padding))
     (set! stencil (ly:stencil-combine-at-edge stencil X RIGHT rp padding))
     stencil))
 
@@ -189,30 +180,36 @@ the more angular the shape of the parenthesis."
   (let ((xext (cons (min startx endx) (max startx endx)))
         (yext (cons (min starty endy) (max starty endy))))
     (ly:make-stencil
-      (list 'draw-line width startx starty endx endy)
-      ; Since the line has rounded edges, we have to / can safely add half the
-      ; width to all coordinates!
-      (interval-widen xext (/ width 2))
-      (interval-widen yext (/ width 2)))))
-
+     (list 'draw-line width startx starty endx endy)
+     ;; Since the line has rounded edges, we have to / can safely add half the
+     ;; width to all coordinates!
+     (interval-widen xext (/ width 2))
+     (interval-widen yext (/ width 2)))))
+
+(define-public (make-transparent-box-stencil xext yext)
+  "Make a transparent box."
+  (ly:make-stencil
+   (list 'transparent-stencil
+         (ly:stencil-expr (make-filled-box-stencil xext yext)))
+   xext yext))
 
 (define-public (make-filled-box-stencil xext yext)
   "Make a filled box."
 
   (ly:make-stencil
-      (list 'round-filled-box (- (car xext)) (cdr xext)
-                       (- (car yext)) (cdr yext) 0.0)
-      xext yext))
+   (list 'round-filled-box (- (car xext)) (cdr xext)
+         (- (car yext)) (cdr yext) 0.0)
+   xext yext))
 
 (define-public (make-circle-stencil radius thickness fill)
   "Make a circle of radius @var{radius} and thickness @var{thickness}."
   (let*
       ((out-radius (+ radius (/ thickness 2.0))))
 
-  (ly:make-stencil
-   (list 'circle radius thickness fill)
-   (cons (- out-radius) out-radius)
-   (cons (- out-radius) out-radius))))
+    (ly:make-stencil
+     (list 'circle radius thickness fill)
+     (cons (- out-radius) out-radius)
+     (cons (- out-radius) out-radius))))
 
 (define-public (make-oval-stencil x-radius y-radius thickness fill)
   "Make an oval from two Bezier curves, of x@tie{}radius @var{x-radius},
@@ -230,48 +227,72 @@ defined by @code{fill}."
                    ,(list 'curveto x-min y-min x-max y-min x-max 0)
                    ,(list 'closepath)))
        (command-list (fold-right append '() commands)))
-  (ly:make-stencil
-    `(path ,thickness `(,@',command-list) 'round 'round ,fill)
-    (cons (- x-out-radius) x-out-radius)
-    (cons (- y-out-radius) y-out-radius))))
+    (ly:make-stencil
+     `(path ,thickness `(,@',command-list) 'round 'round ,fill)
+     (cons (- x-out-radius) x-out-radius)
+     (cons (- y-out-radius) y-out-radius))))
 
 (define-public
   (make-partial-ellipse-stencil
-    x-radius y-radius start-angle end-angle thick connect fill)
-
+   x-radius y-radius start-angle end-angle thick connect fill)
+  "Create an elliptical arc
+@var{x-radius} is the X radius of the arc.
+@var{y-radius} is the Y radius of the arc.
+@var{start-angle} is the starting angle of the arc in degrees.
+@var{end-angle} is the ending angle of the arc in degrees.
+@var{thick} is the thickness of the line.
+@var{connect} is a boolean flag indicating if the end should
+be connected to the start by a line.
+@var{fill} is a boolean flag indicating if the shape should be filled."
   (define (make-radius-list x-radius y-radius)
-    (apply append
-           (map (lambda (adder)
-                  (map (lambda (quadrant)
-                         (cons (+ adder (car quadrant))
-                               (cdr quadrant)))
-                       `((0.0 . (,x-radius . 0.0))
-                         (,PI-OVER-TWO . (0.0 . ,y-radius))
-                         (,PI . (,(- x-radius) . 0.0))
-                         (,THREE-PI-OVER-TWO . (0.0 . ,(- y-radius))))))
-                `(0.0 ,TWO-PI))))
+    "Makes a list of angle/radius pairs at intervals of PI/2 for
+the partial ellipse until 7*PI/2.  For example, in pseudo-code:
+> (make-radius-list 2 3)\
+\n((0.0 . 2) (PI/2 . 3) (PI . -2) (3*PI/2 . -3)\
+\n(2*PI . 2) (5*PI/2 . 3) (3*PI . -2) (7*PI/2 . -3))
+"
+    (append-map
+     (lambda (adder)
+       (map (lambda (quadrant)
+              (cons (+ adder (car quadrant))
+                    (cdr quadrant)))
+            `((0.0 . (,x-radius . 0.0))
+              (,PI-OVER-TWO . (0.0 . ,y-radius))
+              (,PI . (,(- x-radius) . 0.0))
+              (,THREE-PI-OVER-TWO . (0.0 . ,(- y-radius))))))
+     `(0.0 ,TWO-PI)))
 
   (define
     (insert-in-ordered-list ordering-function value inlist cutl? cutr?)
+    "Insert @var{value} in ordered list @var{inlist}. If @var{cutl?}, we
+cut away any parts of @var{inlist} before @var{value}. @var{cutr?} works
+the same way but for the right side. For example:
+> (insert-in-ordered-list < 4 '(1 2 3 6 7) #f #f)
+'(1 2 3 4 6 7)
+> (insert-in-ordered-list < 4 '(1 2 3 6 7) #t #f)
+'(4 6 7)
+> (insert-in-ordered-list < 4 '(1 2 3 6 7) #f #t)
+'(1 2 3 4)
+"
     (define
       (helper ordering-function value left-list right-list cutl? cutr?)
       (if (null? right-list)
           (append
-            (if cutl? '() left-list)
-            (list value)
-            (if cutr? '() right-list))
+           (if cutl? '() left-list)
+           (list value)
+           (if cutr? '() right-list))
           (if (ordering-function value (car right-list))
               (append
-                (if cutl? '() left-list)
-                (list value)
-                (if cutr? '() right-list))
+               (if cutl? '() left-list)
+               (list value)
+               (if cutr? '() right-list))
               (helper
-                ordering-function
-                value
-                (append left-list (list (car right-list)))
-                (cdr right-list)
-                cutl?
-                cutr?))))
+               ordering-function
+               value
+               (append left-list (list (car right-list)))
+               (cdr right-list)
+               cutl?
+               cutr?))))
     (helper ordering-function value '() inlist cutl? cutr?))
 
   (define (ordering-function-1 a b) (car< a b))
@@ -279,118 +300,142 @@ defined by @code{fill}."
   (define (ordering-function-2 a b) (car<= a b))
 
   (define (min-max-crawler min-max side l)
+    "Apply function @var{side} to each member of list and
+then reduce using @var{min-max}:
+> (min-max-crawler min car '((0 . 3) (-1 . 4) (1 . 2)))
+-1
+> (min-max-crawler min cdr '((0 . 3) (-1 . 4) (1 . 2)))
+2
+"
     (reduce min-max
             (if (eq? min-max min) 100000 -100000)
-            (map (lambda (x) (side x)) l)))
+            (map side l)))
 
   (let*
-      ((x-out-radius (+ x-radius (/ thick 2.0)))
+      (;; the outside limit of the x-radius
+       (x-out-radius (+ x-radius (/ thick 2.0)))
+       ;; the outside limit of the y-radius
        (y-out-radius (+ y-radius (/ thick 2.0)))
+       ;; end angle to radians
        (new-end-angle (angle-0-2pi (degrees->radians end-angle)))
+       ;; length of the radius at the end angle
        (end-radius (ellipse-radius x-out-radius y-out-radius new-end-angle))
+       ;; start angle to radians
        (new-start-angle (angle-0-2pi (degrees->radians start-angle)))
+       ;; length of the radius at the start angle
        (start-radius (ellipse-radius x-out-radius y-out-radius new-start-angle))
+       ;; points that the arc passes through at 90 degree intervals
        (radius-list (make-radius-list x-out-radius y-out-radius))
+       ;; rectangular coordinates of arc endpoint
        (rectangular-end-radius (polar->rectangular end-radius end-angle))
+       ;; rectangular coordinates of arc begin point
        (rectangular-start-radius (polar->rectangular start-radius start-angle))
+       ;; we want the end angle to always be bigger than the start angle
+       ;; so we redefine it here just in case it is less
        (new-end-angle
-         (if (<= new-end-angle new-start-angle)
-             (+ TWO-PI new-end-angle)
-             new-end-angle))
+        (if (<= new-end-angle new-start-angle)
+            (+ TWO-PI new-end-angle)
+            new-end-angle))
+       ;; all the points that may be extrema of the arc
+       ;; this is the 90 degree points plus the beginning and end points
+       ;; we use this to calculate extents
        (possible-extrema
+        (insert-in-ordered-list
+         ordering-function-2
+         (cons new-end-angle rectangular-end-radius)
          (insert-in-ordered-list
-           ordering-function-2
-           (cons new-end-angle rectangular-end-radius)
-           (insert-in-ordered-list
-             ordering-function-1
-             (cons new-start-angle rectangular-start-radius)
-             radius-list
-             #t
-             #f)
-           #f
-           #t)))
+          ordering-function-1
+          (cons new-start-angle rectangular-start-radius)
+          radius-list
+          #t
+          #f)
+         #f
+         #t)))
     (ly:make-stencil
-      (list
-        'partial-ellipse
-        x-radius
-        y-radius
-        start-angle
-        end-angle
-        thick
-        connect
-        fill)
-      (cons (min-max-crawler min cadr possible-extrema)
-            (min-max-crawler max cadr possible-extrema))
-      (cons (min-max-crawler min cddr possible-extrema)
-            (min-max-crawler max cddr possible-extrema)))))
+     (list
+      'partial-ellipse
+      x-radius
+      y-radius
+      start-angle
+      end-angle
+      thick
+      connect
+      fill)
+     ;; we know the extrema points by crawling through the
+     ;; list of possible extrema and finding the min and max
+     ;; for x and y
+     (cons (min-max-crawler min cadr possible-extrema)
+           (min-max-crawler max cadr possible-extrema))
+     (cons (min-max-crawler min cddr possible-extrema)
+           (min-max-crawler max cddr possible-extrema)))))
+
+(define (line-part-min-max x1 x2)
+  (list (min x1 x2) (max x1 x2)))
+
+(define (bezier-part-min-max x1 x2 x3 x4)
+  ((lambda (x) (list (reduce min 10000 x) (reduce max -10000 x)))
+   (map
+    (lambda (x)
+      (+ (* x1 (expt (- 1 x) 3))
+         (+ (* 3 (* x2 (* (expt (- 1 x) 2) x)))
+            (+ (* 3 (* x3 (* (- 1 x) (expt x 2))))
+               (* x4 (expt x 3))))))
+    (if (< (+ (expt x2 2) (+ (expt x3 2) (* x1 x4)))
+           (+ (* x1 x3) (+ (* x2 x4) (* x2 x3))))
+        (list 0.0 1.0)
+        (filter
+         (lambda (x) (and (>= x 0) (<= x 1)))
+         (append
+          (list 0.0 1.0)
+          (map (lambda (op)
+                 (if (not (eqv? 0.0
+                                (exact->inexact (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2))))))
+                     ;; Zeros of the bezier curve
+                     (/ (+ (- x1 (* 2 x2))
+                           (op x3
+                               (sqrt (- (+ (expt x2 2)
+                                           (+ (expt x3 2) (* x1 x4)))
+                                        (+ (* x1 x3)
+                                           (+ (* x2 x4) (* x2 x3)))))))
+                        (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2))))
+                     ;; Apply L'hopital's rule to get the zeros if 0/0
+                     (* (op 0 1)
+                        (/ (/ (- x4 x3) 2)
+                           (sqrt (- (+ (* x2 x2)
+                                       (+ (* x3 x3) (* x1 x4)))
+                                    (+ (* x1 x3)
+                                       (+ (* x2 x4) (* x2 x3)))))))))
+               (list + -))))))))
+
+(define (bezier-min-max x1 y1 x2 y2 x3 y3 x4 y4)
+  (map (lambda (x)
+         (apply bezier-part-min-max x))
+       `((,x1 ,x2 ,x3 ,x4) (,y1 ,y2 ,y3 ,y4))))
+
+(define (line-min-max x1 y1 x2 y2)
+  (map (lambda (x)
+         (apply line-part-min-max x))
+       `((,x1 ,x2) (,y1 ,y2))))
 
 (define (path-min-max origin pointlist)
 
-  (define (line-part-min-max x1 x2)
-    (list (min x1 x2) (max x1 x2)))
-
-  (define (bezier-part-min-max x1 x2 x3 x4)
-    ((lambda (x) (list (reduce min 10000 x) (reduce max -10000 x)))
-      (map
-       (lambda (x)
-         (+ (* x1 (expt (- 1 x) 3))
-            (+ (* 3 (* x2 (* (expt (- 1 x) 2) x)))
-               (+ (* 3 (* x3 (* (- 1 x) (expt x 2))))
-                  (* x4 (expt x 3))))))
-       (if (< (+ (expt x2 2) (+ (expt x3 2) (* x1 x4)))
-              (+ (* x1 x3) (+ (* x2 x4) (* x2 x3))))
-           (list 0.0 1.0)
-           (filter
-             (lambda (x) (and (>= x 0) (<= x 1)))
-             (append
-               (list 0.0 1.0)
-               (map (lambda (op)
-                      (if (not (eqv? 0.0
-                                     (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2)))))
-                          ;; Zeros of the bezier curve
-                          (/ (+ (- x1 (* 2 x2))
-                                (op x3
-                                    (sqrt (- (+ (expt x2 2)
-                                                (+ (expt x3 2) (* x1 x4)))
-                                             (+ (* x1 x3)
-                                                (+ (* x2 x4) (* x2 x3)))))))
-                             (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2))))
-                          ;; Apply L'hopital's rule to get the zeros if 0/0
-                          (* (op 0 1)
-                             (/ (/ (- x4 x3) 2)
-                                (sqrt (- (+ (* x2 x2)
-                                            (+ (* x3 x3) (* x1 x4)))
-                                         (+ (* x1 x3)
-                                            (+ (* x2 x4) (* x2 x3)))))))))
-                    (list + -))))))))
-
-  (define (bezier-min-max x1 y1 x2 y2 x3 y3 x4 y4)
-    (map (lambda (x)
-          (apply bezier-part-min-max x))
-        `((,x1 ,x2 ,x3 ,x4) (,y1 ,y2 ,y3 ,y4))))
-
-  (define (line-min-max x1 y1 x2 y2)
-    (map (lambda (x)
-          (apply line-part-min-max x))
-        `((,x1 ,x2) (,y1 ,y2))))
-
   ((lambda (x)
      (list
-       (reduce min +inf.0 (map caar x))
-       (reduce max -inf.0 (map cadar x))
-       (reduce min +inf.0 (map caadr x))
-       (reduce max -inf.0 (map cadadr x))))
-    (map (lambda (x)
-          (if (eq? (length x) 8)
-              (apply bezier-min-max x)
-              (apply line-min-max x)))
-        (map (lambda (x y)
-               (append (list (cadr (reverse x)) (car (reverse x))) y))
-             (append (list origin)
-                     (reverse (cdr (reverse pointlist)))) pointlist))))
+      (reduce min +inf.0 (map caar x))
+      (reduce max -inf.0 (map cadar x))
+      (reduce min +inf.0 (map caadr x))
+      (reduce max -inf.0 (map cadadr x))))
+   (map (lambda (x)
+          (if (= (length x) 8)
+              (apply bezier-min-max x)
+              (apply line-min-max x)))
+        (map (lambda (x y)
+               (append (list (cadr (reverse x)) (car (reverse x))) y))
+             (append (list origin)
+                     (reverse (cdr (reverse pointlist)))) pointlist))))
 
 (define-public (make-connected-path-stencil pointlist thickness
-                                           x-scale y-scale connect fill)
+                                            x-scale y-scale connect fill)
   "Make a connected path described by the list @var{pointlist}, with
 thickness @var{thickness}, and scaled by @var{x-scale} in the X direction
 and @var{y-scale} in the Y direction.  @var{connect} and @var{fill} are
@@ -399,48 +444,48 @@ respectively."
 
   ;; paths using this routine are designed to begin at point '(0 . 0)
   (let* ((origin (list 0 0))
-        (boundlist (path-min-max origin pointlist))
-        ;; modify pointlist to scale the coordinates
-        (path (map (lambda (x)
-                     (apply
-                       (if (eq? 6 (length x))
-                           (lambda (x1 x2 x3 x4 x5 x6)
-                             (list 'curveto
-                                   (* x1 x-scale)
-                                   (* x2 y-scale)
-                                   (* x3 x-scale)
-                                   (* x4 y-scale)
-                                   (* x5 x-scale)
-                                   (* x6 y-scale)))
-                           (lambda (x1 x2)
-                             (list 'lineto
-                                   (* x1 x-scale)
-                                   (* x2 y-scale))))
-                       x))
-                   pointlist))
-        ;; a path must begin with a `moveto'
-        (prepend-origin (apply list (cons 'moveto origin) path))
-        ;; if this path is connected, add closepath to the end
-        (final-path (if connect
-                        (append prepend-origin (list 'closepath))
-                        prepend-origin))
-        (command-list (fold-right append '() final-path)))
-  (ly:make-stencil
-    `(path ,thickness
-          `(,@',command-list)
-          'round
-          'round
-          ,(if fill #t #f))
-    (coord-translate
+         (boundlist (path-min-max origin pointlist))
+         ;; modify pointlist to scale the coordinates
+         (path (map (lambda (x)
+                      (apply
+                       (if (= 6 (length x))
+                           (lambda (x1 x2 x3 x4 x5 x6)
+                             (list 'curveto
+                                   (* x1 x-scale)
+                                   (* x2 y-scale)
+                                   (* x3 x-scale)
+                                   (* x4 y-scale)
+                                   (* x5 x-scale)
+                                   (* x6 y-scale)))
+                           (lambda (x1 x2)
+                             (list 'lineto
+                                   (* x1 x-scale)
+                                   (* x2 y-scale))))
+                       x))
+                    pointlist))
+         ;; a path must begin with a `moveto'
+         (prepend-origin (cons (cons 'moveto origin) path))
+         ;; if this path is connected, add closepath to the end
+         (final-path (if connect
+                         (append prepend-origin (list '(closepath)))
+                         prepend-origin))
+         (command-list (concatenate final-path)))
+    (ly:make-stencil
+     `(path ,thickness
+            `(,@',command-list)
+            'round
+            'round
+            ,(if fill #t #f))
+     (coord-translate
       ((if (< x-scale 0) reverse-interval identity)
-        (cons (* x-scale (list-ref boundlist 0))
-              (* x-scale (list-ref boundlist 1))))
-        `(,(/ thickness -2) . ,(/ thickness 2)))
-    (coord-translate
+       (cons (* x-scale (list-ref boundlist 0))
+             (* x-scale (list-ref boundlist 1))))
+      `(,(/ thickness -2) . ,(/ thickness 2)))
+     (coord-translate
       ((if (< y-scale 0) reverse-interval identity)
-        (cons (* y-scale (list-ref boundlist 2))
-              (* y-scale (list-ref boundlist 3))))
-        `(,(/ thickness -2) . ,(/ thickness 2))))))
+       (cons (* y-scale (list-ref boundlist 2))
+             (* y-scale (list-ref boundlist 3))))
+      `(,(/ thickness -2) . ,(/ thickness 2))))))
 
 (define-public (make-ellipse-stencil x-radius y-radius thickness fill)
   "Make an ellipse of x@tie{}radius @var{x-radius}, y@tie{}radius
@@ -450,17 +495,17 @@ respectively."
       ((x-out-radius (+ x-radius (/ thickness 2.0)))
        (y-out-radius (+ y-radius (/ thickness 2.0))) )
 
-  (ly:make-stencil
-   (list 'ellipse x-radius y-radius thickness fill)
-   (cons (- x-out-radius) x-out-radius)
-   (cons (- y-out-radius) y-out-radius))))
+    (ly:make-stencil
+     (list 'ellipse x-radius y-radius thickness fill)
+     (cons (- x-out-radius) x-out-radius)
+     (cons (- y-out-radius) y-out-radius))))
 
 (define-public (box-grob-stencil grob)
   "Make a box of exactly the extents of the grob.  The box precisely
 encloses the contents."
   (let* ((xext (ly:grob-extent grob grob 0))
-        (yext (ly:grob-extent grob grob 1))
-        (thick 0.01))
+         (yext (ly:grob-extent grob grob 1))
+         (thick 0.01))
 
     (ly:stencil-add
      (make-filled-box-stencil xext (cons (- (car yext) thick) (car yext)))
@@ -472,10 +517,10 @@ encloses the contents."
 (define-public (box-stencil stencil thickness padding)
   "Add a box around @var{stencil}, producing a new stencil."
   (let* ((x-ext (interval-widen (ly:stencil-extent stencil 0) padding))
-        (y-ext (interval-widen (ly:stencil-extent stencil 1) padding))
-        (y-rule (make-filled-box-stencil (cons 0 thickness) y-ext))
-        (x-rule (make-filled-box-stencil
-                 (interval-widen x-ext thickness) (cons 0 thickness))))
+         (y-ext (interval-widen (ly:stencil-extent stencil 1) padding))
+         (y-rule (make-filled-box-stencil (cons 0 thickness) y-ext))
+         (x-rule (make-filled-box-stencil
+                  (interval-widen x-ext thickness) (cons 0 thickness))))
     (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding))
     (set! stencil (ly:stencil-combine-at-edge stencil X -1 y-rule padding))
     (set! stencil (ly:stencil-combine-at-edge stencil Y 1 x-rule 0.0))
@@ -485,74 +530,74 @@ encloses the contents."
 (define-public (circle-stencil stencil thickness padding)
   "Add a circle around @var{stencil}, producing a new stencil."
   (let* ((x-ext (ly:stencil-extent stencil X))
-        (y-ext (ly:stencil-extent stencil Y))
-        (diameter (max (interval-length x-ext)
+         (y-ext (ly:stencil-extent stencil Y))
+         (diameter (max (interval-length x-ext)
                         (interval-length y-ext)))
-        (radius (+ (/ diameter 2) padding thickness))
-        (circle (make-circle-stencil radius thickness #f)))
+         (radius (+ (/ diameter 2) padding thickness))
+         (circle (make-circle-stencil radius thickness #f)))
 
     (ly:stencil-add
      stencil
      (ly:stencil-translate circle
-                          (cons
-                           (interval-center x-ext)
-                           (interval-center y-ext))))))
+                           (cons
+                            (interval-center x-ext)
+                            (interval-center y-ext))))))
 
 (define-public (oval-stencil stencil thickness x-padding y-padding)
   "Add an oval around @code{stencil}, padded by the padding pair,
 producing a new stencil."
   (let* ((x-ext (ly:stencil-extent stencil X))
-        (y-ext (ly:stencil-extent stencil Y))
+         (y-ext (ly:stencil-extent stencil Y))
          (x-length (+ (interval-length x-ext) x-padding thickness))
          (y-length (+ (interval-length y-ext) y-padding thickness))
          (x-radius (* 0.707 x-length) )
          (y-radius (* 0.707 y-length) )
-        (oval (make-oval-stencil x-radius y-radius thickness #f)))
+         (oval (make-oval-stencil x-radius y-radius thickness #f)))
 
     (ly:stencil-add
      stencil
      (ly:stencil-translate oval
-                          (cons
-                           (interval-center x-ext)
-                           (interval-center y-ext))))))
+                           (cons
+                            (interval-center x-ext)
+                            (interval-center y-ext))))))
 
 (define-public (ellipse-stencil stencil thickness x-padding y-padding)
   "Add an ellipse around @var{stencil}, padded by the padding pair,
 producing a new stencil."
   (let* ((x-ext (ly:stencil-extent stencil X))
-        (y-ext (ly:stencil-extent stencil Y))
+         (y-ext (ly:stencil-extent stencil Y))
          (x-length (+ (interval-length x-ext) x-padding thickness))
          (y-length (+ (interval-length y-ext) y-padding thickness))
-         ;(aspect-ratio (/ x-length y-length))
+         ;(aspect-ratio (/ x-length y-length))
          (x-radius (* 0.707 x-length) )
          (y-radius (* 0.707 y-length) )
-        ;(diameter (max (- (cdr x-ext) (car x-ext))
-                     (- (cdr y-ext) (car y-ext))))
-        ;(radius (+ (/ diameter 2) padding thickness))
-        (ellipse (make-ellipse-stencil x-radius y-radius thickness #f)))
+         ;; (diameter (max (- (cdr x-ext) (car x-ext))
+         ;;             (- (cdr y-ext) (car y-ext))))
+         ;; radius (+ (/ diameter 2) padding thickness))
+         (ellipse (make-ellipse-stencil x-radius y-radius thickness #f)))
 
     (ly:stencil-add
      stencil
      (ly:stencil-translate ellipse
-                          (cons
-                           (interval-center x-ext)
-                           (interval-center y-ext))))))
+                           (cons
+                            (interval-center x-ext)
+                            (interval-center y-ext))))))
 
 (define-public (rounded-box-stencil stencil thickness padding blot)
-   "Add a rounded box around @var{stencil}, producing a new stencil."
+  "Add a rounded box around @var{stencil}, producing a new stencil."
 
   (let* ((xext (interval-widen (ly:stencil-extent stencil 0) padding))
-        (yext (interval-widen (ly:stencil-extent stencil 1) padding))
-   (min-ext (min (-(cdr xext) (car xext)) (-(cdr yext) (car yext))))
-   (ideal-blot (min blot (/ min-ext 2)))
-   (ideal-thickness (min thickness (/ min-ext 2)))
-        (outer (ly:round-filled-box
-            (interval-widen xext ideal-thickness)
-            (interval-widen yext ideal-thickness)
-               ideal-blot))
-        (inner (ly:make-stencil (list 'color (x11-color 'white)
-            (ly:stencil-expr (ly:round-filled-box
-               xext yext (- ideal-blot ideal-thickness)))))))
+         (yext (interval-widen (ly:stencil-extent stencil 1) padding))
+         (min-ext (min (-(cdr xext) (car xext)) (-(cdr yext) (car yext))))
+         (ideal-blot (min blot (/ min-ext 2)))
+         (ideal-thickness (min thickness (/ min-ext 2)))
+         (outer (ly:round-filled-box
+                 (interval-widen xext ideal-thickness)
+                 (interval-widen yext ideal-thickness)
+                 ideal-blot))
+         (inner (ly:make-stencil (list 'color (x11-color 'white)
+                                       (ly:stencil-expr (ly:round-filled-box
+                                                         xext yext (- ideal-blot ideal-thickness)))))))
     (set! stencil (ly:stencil-add outer inner))
     stencil))
 
@@ -571,7 +616,7 @@ producing a new stencil."
 
     (ly:stencil-add
      (stencil-with-color (ly:round-filled-box x-ext y-ext 0.0)
-                        white)
+                         white)
      stencil)
     ))
 
@@ -580,63 +625,63 @@ producing a new stencil."
 with optional arrows of @code{max-size} on start and end controlled by
 @var{start?} and @var{end?}."
   (lambda (destination max-size)
-  (let*
-      ((e_x 1+0i)
-       (e_y 0+1i)
-       (distance (sqrt (+ (* (car destination) (car destination))
-                         (* (cdr destination) (cdr destination)))))
-       (size (min max-size (/ distance 3)))
-       (rotate (lambda (z ang)
-                (* (make-polar 1 ang)
-                   z)))
-       (complex-to-offset (lambda (z)
-                           (list (real-part z) (imag-part z))))
-
-       (z-dest (+ (* e_x (car destination)) (* e_y (cdr destination))))
-       (e_z (/ z-dest (magnitude z-dest)))
-       (triangle-points (list
-                        (* size -1+0.25i)
-                        0
-                        (* size -1-0.25i)))
-       (p1s (map (lambda (z)
-                  (+ z-dest (rotate z (angle z-dest))))
-                triangle-points))
-       (p2s (map (lambda (z)
-                  (rotate z (angle (- z-dest))))
-                  triangle-points))
-       (null (cons 0 0))
-       (arrow-1
-       (ly:make-stencil
-        `(polygon (quote ,(concatenate (map complex-to-offset p1s)))
-                  0.0
-                  #t) null null))
-       (arrow-2
-       (ly:make-stencil
-        `(polygon (quote ,(concatenate (map complex-to-offset p2s)))
-                  0.0
-                  #t) null null ) )
-       (thickness (min (/ distance 12) 0.1))
-       (shorten-line (min (/ distance 3) 0.5))
-       (start (complex-to-offset (/ (* e_z shorten-line) 2)))
-       (end (complex-to-offset (- z-dest (/ (* e_z shorten-line) 2))))
-
-       (line (ly:make-stencil
-             `(draw-line ,thickness
-                         ,(car start) ,(cadr start)
-                         ,(car end) ,(cadr end)
-                         )
-             (cons (min 0 (car destination))
-                   (min 0 (cdr destination)))
-             (cons (max 0 (car destination))
-                   (max 0 (cdr destination)))))
-
-       (result
-         (ly:stencil-add
+    (let*
+        ((e_x 1+0i)
+         (e_y 0+1i)
+         (distance (sqrt (+ (* (car destination) (car destination))
+                            (* (cdr destination) (cdr destination)))))
+         (size (min max-size (/ distance 3)))
+         (rotate (lambda (z ang)
+                   (* (make-polar 1 ang)
+                      z)))
+         (complex-to-offset (lambda (z)
+                              (list (real-part z) (imag-part z))))
+
+         (z-dest (+ (* e_x (car destination)) (* e_y (cdr destination))))
+         (e_z (/ z-dest (magnitude z-dest)))
+         (triangle-points (list
+                           (* size -1+0.25i)
+                           0
+                           (* size -1-0.25i)))
+         (p1s (map (lambda (z)
+                     (+ z-dest (rotate z (angle z-dest))))
+                   triangle-points))
+         (p2s (map (lambda (z)
+                     (rotate z (angle (- z-dest))))
+                   triangle-points))
+         (null (cons 0 0))
+         (arrow-1
+          (ly:make-stencil
+           `(polygon (quote ,(append-map complex-to-offset p1s))
+                     0.0
+                     #t) null null))
+         (arrow-2
+          (ly:make-stencil
+           `(polygon (quote ,(append-map complex-to-offset p2s))
+                     0.0
+                     #t) null null ) )
+         (thickness (min (/ distance 12) 0.1))
+         (shorten-line (min (/ distance 3) 0.5))
+         (start (complex-to-offset (/ (* e_z shorten-line) 2)))
+         (end (complex-to-offset (- z-dest (/ (* e_z shorten-line) 2))))
+
+         (line (ly:make-stencil
+                `(draw-line ,thickness
+                            ,(car start) ,(cadr start)
+                            ,(car end) ,(cadr end)
+                            )
+                (cons (min 0 (car destination))
+                      (min 0 (cdr destination)))
+                (cons (max 0 (car destination))
+                      (max 0 (cdr destination)))))
+
+         (result
+          (ly:stencil-add
            (if start? arrow-2 empty-stencil)
            (if end? arrow-1 empty-stencil)
            line)))
 
-    result)))
+      result)))
 
 (define-public dimension-arrows (arrow-stencil-maker #t #t))
 
@@ -650,20 +695,20 @@ with optional arrows of @code{max-size} on start and end controlled by
 (define*-public (annotate-y-interval layout name extent is-length
                                      #:key (color darkblue))
   (let ((text-props (cons '((font-size . -3)
-                           (font-family . typewriter))
-                         (layout-extract-page-properties layout)))
-       (annotation #f))
+                            (font-family . typewriter))
+                          (layout-extract-page-properties layout)))
+        (annotation #f))
     (define (center-stencil-on-extent stil)
       (ly:stencil-translate (ly:stencil-aligned-to stil Y CENTER)
                             (cons 0 (interval-center extent))))
     ;; do something sensible for 0,0 intervals.
     (set! extent (interval-widen extent 0.001))
     (if (not (interval-sane? extent))
-       (set! annotation (interpret-markup
-                         layout text-props
-                         (make-simple-markup (simple-format #f "~a: NaN/inf" name))))
-       (let ((text-stencil (interpret-markup
-                            layout text-props
+        (set! annotation (interpret-markup
+                          layout text-props
+                          (make-simple-markup (simple-format #f "~a: NaN/inf" name))))
+        (let ((text-stencil (interpret-markup
+                             layout text-props
                              (markup #:whiteout #:simple name)))
               (dim-stencil (interpret-markup
                             layout text-props
@@ -675,88 +720,88 @@ with optional arrows of @code{max-size} on start and end controlled by
                                                (ly:format "~$" (interval-length extent)))
                                               (else
                                                (ly:format "(~$,~$)"
-                                                       (car extent) (cdr extent)))))))
-             (arrows (ly:stencil-translate-axis
-                      (dimension-arrows (cons 0 (interval-length extent)) 1.0)
-                      (interval-start extent) Y)))
-         (set! annotation
+                                                          (car extent) (cdr extent)))))))
+              (arrows (ly:stencil-translate-axis
+                       (dimension-arrows (cons 0 (interval-length extent)) 1.0)
+                       (interval-start extent) Y)))
+          (set! annotation
                 (center-stencil-on-extent text-stencil))
-         (set! annotation
-               (ly:stencil-combine-at-edge arrows X RIGHT annotation 0.5))
-         (set! annotation
-               (ly:stencil-combine-at-edge annotation X LEFT
+          (set! annotation
+                (ly:stencil-combine-at-edge arrows X RIGHT annotation 0.5))
+          (set! annotation
+                (ly:stencil-combine-at-edge annotation X LEFT
                                             (center-stencil-on-extent dim-stencil)
                                             0.5))
-         (set! annotation
-               (stencil-with-color annotation color))))
+          (set! annotation
+                (stencil-with-color annotation color))))
     annotation))
 
 
 ;; 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 'basic-distance))
-        (padding (get-spacing-var 'padding))
-        (min-dist (get-spacing-var 'minimum-distance))
-        (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))))
+                                       #:key (base-color blue))
+  (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))))
+         (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
-                    basic-annotation
-                    (if min-dist-blocks
-                        min-annotation
-                        (ly:stencil-add min-annotation extra-annotation))))))
+                    (list
+                     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*
       ((contents (ly:gulp-file file-name))
        (bbox (get-postscript-bbox (car (string-split contents #\nul))))
        (bbox-size (if (= axis X)
-                     (- (list-ref bbox 2) (list-ref bbox 0))
-                     (- (list-ref bbox 3) (list-ref bbox 1))
-                     ))
+                      (- (list-ref bbox 2) (list-ref bbox 0))
+                      (- (list-ref bbox 3) (list-ref bbox 1))
+                      ))
        (factor (if (< 0 bbox-size)
-                  (exact->inexact (/ size bbox-size))
-                  0))
+                   (exact->inexact (/ size bbox-size))
+                   0))
        (scaled-bbox
-       (map (lambda (x) (* factor x)) bbox))
-       ; We need to shift the whole eps to (0,0), otherwise it will appear
-       ; displaced in lilypond (displacement will depend on the scaling!)
+        (map (lambda (x) (* factor x)) bbox))
+       ;; We need to shift the whole eps to (0,0), otherwise it will appear
+       ;; displaced in lilypond (displacement will depend on the scaling!)
        (translate-string (ly:format "~a ~a translate" (- (list-ref bbox 0)) (- (list-ref bbox 1))))
        (clip-rect-string (ly:format
-                         "~a ~a ~a ~a rectclip"
-                         (list-ref bbox 0)
-                         (list-ref bbox 1)
-                         (- (list-ref bbox 2) (list-ref bbox 0))
-                         (- (list-ref bbox 3) (list-ref bbox 1)))))
+                          "~a ~a ~a ~a rectclip"
+                          (list-ref bbox 0)
+                          (list-ref bbox 1)
+                          (- (list-ref bbox 2) (list-ref bbox 0))
+                          (- (list-ref bbox 3) (list-ref bbox 1)))))
 
 
     (if bbox
-       (ly:make-stencil
-        (list
-         'embedded-ps
-         (string-append
-          (ly:format
-          "
+        (ly:make-stencil
+         (list
+          'embedded-ps
+          (string-append
+           (ly:format
+            "
 gsave
 currentpoint translate
 BeginEPSF
@@ -766,19 +811,19 @@ BeginEPSF
 %%BeginDocument: ~a
 "         factor translate-string  clip-rect-string
 
-          file-name
-          )
-          contents
-          "%%EndDocument
+file-name
+)
+           contents
+           "%%EndDocument
 EndEPSF
 grestore
 "))
-        ; Stencil starts at (0,0), since we have shifted the eps, and its
-         ; size is exactly the size of the scaled bounding box
-        (cons 0 (- (list-ref scaled-bbox 2) (list-ref scaled-bbox 0)))
-        (cons 0 (- (list-ref scaled-bbox 3) (list-ref scaled-bbox 1))))
+         ;; Stencil starts at (0,0), since we have shifted the eps, and its
+         ;; size is exactly the size of the scaled bounding box
+         (cons 0 (- (list-ref scaled-bbox 2) (list-ref scaled-bbox 0)))
+         (cons 0 (- (list-ref scaled-bbox 3) (list-ref scaled-bbox 1))))
 
-       (ly:make-stencil "" '(0 . 0) '(0 . 0)))
+        (ly:make-stencil "" '(0 . 0) '(0 . 0)))
     ))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -787,12 +832,12 @@ grestore
 (define-public (write-system-signatures basename paper-systems count)
   (if (pair? paper-systems)
       (begin
-       (let*
-           ((outname (simple-format #f "~a-~a.signature" basename count)) )
+        (let*
+            ((outname (simple-format #f "~a-~a.signature" basename count)) )
 
-         (ly:message "Writing ~a" outname)
-         (write-system-signature outname (car paper-systems))
-         (write-system-signatures basename (cdr paper-systems) (1+ count))))))
+          (ly:message "Writing ~a" outname)
+          (write-system-signature outname (car paper-systems))
+          (write-system-signatures basename (cdr paper-systems) (1+ count))))))
 
 (use-modules (scm paper-system))
 (define-public (write-system-signature filename paper-system)
@@ -812,20 +857,20 @@ grestore
      ((float? expr) #f)
      ((ly:font-metric? expr) (ly:font-name expr))
      ((pair? expr) (cons (strip-floats (car expr))
-                        (strip-floats (cdr expr))))
+                         (strip-floats (cdr expr))))
      (else expr)))
 
   (define (fold-false-pairs expr)
     "Try to remove lists of #f as much as possible."
     (if (pair? expr)
-       (let*
-           ((first (car expr))
-            (rest (fold-false-pairs (cdr expr))))
+        (let*
+            ((first (car expr))
+             (rest (fold-false-pairs (cdr expr))))
 
-         (if first
-             (cons (fold-false-pairs first) rest)
-             rest))
-       expr))
+          (if first
+              (cons (fold-false-pairs first) rest)
+              rest))
+        expr))
 
   (define (raw-string expr)
     "escape quotes and slashes for python consumption"
@@ -833,66 +878,65 @@ grestore
 
   (define (raw-pair expr)
     (simple-format #f "~a ~a"
-           (car expr) (cdr expr)))
+                   (car expr) (cdr expr)))
 
   (define (found-grob expr)
     (let*
-       ((grob (car expr))
-        (rest (cdr expr))
-        (collected '())
-        (cause (event-cause grob))
-        (input (if (ly:stream-event? cause) (ly:event-property cause 'origin) #f))
-        (location (if (ly:input-location? input) (ly:input-file-line-char-column input) '()))
-
-        ;; todo: use stencil extent if available.
-        (x-ext (ly:grob-extent grob system-grob X))
-        (y-ext (ly:grob-extent grob system-grob Y))
-        (expression-skeleton
-         (if compare-expressions
-             (interpret-for-signature
-              #f (lambda (e)
-                   (set! collected (cons e collected)))
-              rest)
-            "")))
+        ((grob (car expr))
+         (rest (cdr expr))
+         (collected '())
+         (cause (event-cause grob))
+         (input (if (ly:stream-event? cause) (ly:event-property cause 'origin) #f))
+         (location (if (ly:input-location? input) (ly:input-file-line-char-column input) '()))
+
+         ;; todo: use stencil extent if available.
+         (x-ext (ly:grob-extent grob system-grob X))
+         (y-ext (ly:grob-extent grob system-grob Y))
+         (expression-skeleton
+          (if compare-expressions
+              (interpret-for-signature
+               #f (lambda (e)
+                    (set! collected (cons e collected)))
+               rest)
+              "")))
 
       (simple-format output
-             "~a@~a@~a@~a@~a\n"
-             (cdr (assq 'name (ly:grob-property grob 'meta) ))
-             (raw-string location)
-             (raw-pair (if (interval-empty? x-ext) '(1 . -1) x-ext))
-             (raw-pair (if (interval-empty? y-ext) '(1 . -1) y-ext))
-             (raw-string collected))
+                     "~a@~a@~a@~a@~a\n"
+                     (cdr (assq 'name (ly:grob-property grob 'meta) ))
+                     (raw-string location)
+                     (raw-pair (if (interval-empty? x-ext) '(1 . -1) x-ext))
+                     (raw-pair (if (interval-empty? y-ext) '(1 . -1) y-ext))
+                     (raw-string collected))
       ))
 
   (define (interpret-for-signature escape collect expr)
     (define (interpret expr)
       (let*
-         ((head (if (pair? expr)
-                    (car expr)
-                    #f)))
-
-       (cond
-        ((eq? head 'grob-cause) (escape (cdr expr)))
-        ((eq? head 'color) (interpret (caddr expr)))
-        ((eq? head 'rotate-stencil) (interpret (caddr expr)))
-        ((eq? head 'translate-stencil) (interpret (caddr expr)))
-        ((eq? head 'combine-stencil)
-         (for-each (lambda (e) (interpret e))  (cdr expr)))
-        (else
-         (collect (fold-false-pairs (strip-floats expr))))
-
-        )))
+          ((head (if (pair? expr)
+                     (car expr)
+                     #f)))
+
+        (cond
+         ((eq? head 'grob-cause) (escape (cdr expr)))
+         ((eq? head 'color) (interpret (caddr expr)))
+         ((eq? head 'rotate-stencil) (interpret (caddr expr)))
+         ((eq? head 'translate-stencil) (interpret (caddr expr)))
+         ((eq? head 'combine-stencil)
+          (for-each (lambda (e) (interpret e))  (cdr expr)))
+         (else
+          (collect (fold-false-pairs (strip-floats expr))))
+
+         )))
 
     (interpret expr))
 
   (if (ly:grob? system-grob)
       (begin
-       (display (simple-format #f "# Output signature\n# Generated by LilyPond ~a\n" (lilypond-version))
-                output)
-       (interpret-for-signature found-grob (lambda (x) #f)
-                                (ly:stencil-expr
-                                 (paper-system-stencil paper-system)))))
+        (display (simple-format #f "# Output signature\n# Generated by LilyPond ~a\n" (lilypond-version))
+                 output)
+        (interpret-for-signature found-grob (lambda (x) #f)
+                                 (ly:stencil-expr
+                                  (paper-system-stencil paper-system)))))
 
   ;; should be superfluous, but leaking "too many open files"?
   (close-port output))
-
index 3304e24af78a4f9a5b5f4168037a264240cdce4b..e32d712e19ae97986b84422a2e99b2fa8dd5fe22 100644 (file)
@@ -42,7 +42,7 @@
 
 ;; define sans serif-style tab-Clefs as a markup:
 (define-markup-command (customTabClef
-                                layout props num-strings staff-space)
+                        layout props num-strings staff-space)
   (integer? number?)
   #:category music
   "Draw a tab clef sans-serif style."
@@ -67,8 +67,8 @@
         ;; if it is "moderntab", we'll draw it
         (let* ((staff-symbol (ly:grob-object grob 'staff-symbol))
                (line-count (if (ly:grob? staff-symbol)
-                              (ly:grob-property staff-symbol 'line-count)
-                              0))
+                               (ly:grob-property staff-symbol 'line-count)
+                               0))
                (staff-space (ly:staff-symbol-staff-space grob)))
 
           (grob-interpret-markup grob (make-customTabClef-markup line-count
                   ;; tab note head is visible
                   (if tab-note-head-parenthesized
                       (begin
-                       (ly:grob-set-property! tied-tab-note-head 'display-cautionary #t)
+                        (ly:grob-set-property! tied-tab-note-head 'display-cautionary #t)
                         (ly:grob-set-property! tied-tab-note-head 'stencil tab-note-head::print)))
                   ;; tab note head is invisible
-                 (ly:grob-set-property! tied-tab-note-head 'transparent #t)))
+                  (ly:grob-set-property! tied-tab-note-head 'transparent #t)))
 
             ;; tie is not split
             (ly:grob-set-property! tied-tab-note-head 'transparent #t)))))
                (tab-note-head-visible (assoc-get 'note-head-visible repeat-tied-properties #t))
                (tab-note-head-parenthesized (assoc-get 'parenthesize repeat-tied-properties #t)))
 
-        (if tab-note-head-visible
-            ;; tab note head is visible
-            (if tab-note-head-parenthesized
-                (begin
-                  (ly:grob-set-property! tied-tab-note-head 'display-cautionary #t)
-                  (ly:grob-set-property! tied-tab-note-head 'stencil tab-note-head::print)))
-            ;; tab note head is invisible
-            (ly:grob-set-property! tied-tab-note-head 'transparent #t))))))
+          (if tab-note-head-visible
+              ;; tab note head is visible
+              (if tab-note-head-parenthesized
+                  (begin
+                    (ly:grob-set-property! tied-tab-note-head 'display-cautionary #t)
+                    (ly:grob-set-property! tied-tab-note-head 'stencil tab-note-head::print)))
+              ;; tab note head is invisible
+              (ly:grob-set-property! tied-tab-note-head 'transparent #t))))))
 
 ;; the slurs should not be too far apart from the corresponding fret number, so
 ;; we move the slur towards the TabNoteHeads; moreover, if the left fret number is
                                          (* staff-space
                                             (ly:grob-property grob 'direction)
                                             0.35))))
-                             control-points)))
+                              control-points)))
 
     (ly:grob-set-property! grob 'control-points new-control-points)
     (ly:slur::print grob)))
   (define (is-harmonic? grob)
     (let ((arts (ly:event-property (event-cause grob) 'articulations)))
       (or (pair? (filter (lambda (a)
-                          (ly:in-event-class? a 'harmonic-event))
-                         arts))
-         (eq? (ly:grob-property grob 'style) 'harmonic))))
+                           (ly:in-event-class? a 'harmonic-event))
+                         arts))
+          (eq? (ly:grob-property grob 'style) 'harmonic))))
 
   (let* ((cautionary (ly:grob-property grob 'display-cautionary #f))
-        (details (ly:grob-property grob 'details '()))
-        (harmonic-props (assoc-get 'harmonic-properties details '()))
-        (harmonic-angularity (assoc-get 'angularity harmonic-props 2))
-        (harmonic-half-thick (assoc-get 'half-thickness harmonic-props 0.075))
-        (harmonic-padding (assoc-get 'padding harmonic-props 0))
-        (harmonic-proc (assoc-get 'procedure harmonic-props parenthesize-stencil))
-        (harmonic-width (assoc-get 'width harmonic-props 0.25))
-        (cautionary-props (assoc-get 'cautionary-properties details '()))
-        (cautionary-angularity (assoc-get 'angularity cautionary-props 2))
-        (cautionary-half-thick (assoc-get 'half-thickness cautionary-props 0.075))
-        (cautionary-padding (assoc-get 'padding cautionary-props 0))
-        (cautionary-proc (assoc-get 'procedure cautionary-props parenthesize-stencil))
-        (cautionary-width (assoc-get 'width cautionary-props 0.25))
+         (details (ly:grob-property grob 'details '()))
+         (harmonic-props (assoc-get 'harmonic-properties details '()))
+         (harmonic-angularity (assoc-get 'angularity harmonic-props 2))
+         (harmonic-half-thick (assoc-get 'half-thickness harmonic-props 0.075))
+         (harmonic-padding (assoc-get 'padding harmonic-props 0))
+         (harmonic-proc (assoc-get 'procedure harmonic-props parenthesize-stencil))
+         (harmonic-width (assoc-get 'width harmonic-props 0.25))
+         (cautionary-props (assoc-get 'cautionary-properties details '()))
+         (cautionary-angularity (assoc-get 'angularity cautionary-props 2))
+         (cautionary-half-thick (assoc-get 'half-thickness cautionary-props 0.075))
+         (cautionary-padding (assoc-get 'padding cautionary-props 0))
+         (cautionary-proc (assoc-get 'procedure cautionary-props parenthesize-stencil))
+         (cautionary-width (assoc-get 'width cautionary-props 0.25))
          (output-grob (ly:text-interface::print grob))
-        (ref-grob (grob-interpret-markup grob "8"))
-        (offset-factor (assoc-get 'head-offset details 3/5))
-        (column-offset (* offset-factor
-                          (interval-length
-                            (ly:stencil-extent
-                              (grob-interpret-markup grob "8")
-                              X)))))
+         (ref-grob (grob-interpret-markup grob "8"))
+         (offset-factor (assoc-get 'head-offset details 3/5))
+         (column-offset (* offset-factor
+                           (interval-length
+                            (ly:stencil-extent
+                             (grob-interpret-markup grob "8")
+                             X)))))
 
     (if (is-harmonic? grob)
         (set! output-grob (harmonic-proc output-grob
-                                        harmonic-half-thick
-                                        harmonic-width
-                                        harmonic-angularity
-                                        harmonic-padding)))
+                                         harmonic-half-thick
+                                         harmonic-width
+                                         harmonic-angularity
+                                         harmonic-padding)))
     (if cautionary
         (set! output-grob (cautionary-proc output-grob
-                                          cautionary-half-thick
-                                          cautionary-width
-                                          cautionary-angularity
-                                          cautionary-padding)))
+                                           cautionary-half-thick
+                                           cautionary-width
+                                           cautionary-angularity
+                                           cautionary-padding)))
     (ly:stencil-translate-axis (centered-stencil output-grob)
-                              column-offset
-                              X)))
+                               column-offset
+                               X)))
 
 ;; Harmonic definitions
 
   ;; According to the arithmetic sum, the position of m/n is at 1/2*(n-2)(n-1)+(m-1)
   ;; if we start counting from zero
   (vector 12
-           7   19
-           5   12    24
-           4    9    16   28
-           3    7    12   19    31
-           2.7  5.8  9.7  14.7  21.7  33.7
-           2.3  5    8    12    17    24    36
-           2    4.4  7    10    14    19    26  38 ))
+          7   19
+          5   12    24
+          4    9    16   28
+          3    7    12   19    31
+          2.7  5.8  9.7  14.7  21.7  33.7
+          2.3  5    8    12    17    24    36
+          2    4.4  7    10    14    19    26  38 ))
 
 (define partial-pitch
   (vector '(0 0 0)
                       (- den 1)
                       1/2)
                    nom -1)))
-     (number->string (vector-ref node-positions index))))
+    (number->string (vector-ref node-positions index))))
 
 (define-public (ratio->pitch ratio)
   "Calculate a pitch given @var{ratio} for the harmonic."
   (let* ((partial (1- (denominator ratio)))
          (pitch (vector-ref partial-pitch partial)))
 
-  (ly:make-pitch (first pitch)
-                 (second pitch)
-                 (third pitch))))
+    (ly:make-pitch (first pitch)
+                   (second pitch)
+                   (third pitch))))
 
 (define-public (fret->pitch fret)
   "Calculate a pitch given @var{fret} for the harmonic."
   (let* ((partial (assoc-get fret fret-partials 0))
          (pitch (vector-ref partial-pitch partial)))
 
-  (ly:make-pitch (first pitch)
-                 (second pitch)
-                 (third pitch))))
+    (ly:make-pitch (first pitch)
+                   (second pitch)
+                   (third pitch))))
 
 (define-public (calc-harmonic-pitch pitch music)
   "Calculate the harmonic pitches in @var{music} given
         (e (ly:music-property music 'element))
         (p (ly:music-property music 'pitch)))
     (cond
-      ((pair? es)
-       (ly:music-set-property! music 'elements
-                               (map (lambda (x) (calc-harmonic-pitch pitch x)) es)))
-      ((ly:music? e)
-       (ly:music-set-property! music 'element (calc-harmonic-pitch pitch e)))
-      ((ly:pitch? p)
-       (begin
-         (set! p (ly:pitch-transpose p pitch))
-         (ly:music-set-property! music 'pitch p))))
+     ((pair? es)
+      (ly:music-set-property! music 'elements
+                              (map (lambda (x) (calc-harmonic-pitch pitch x)) es)))
+     ((ly:music? e)
+      (ly:music-set-property! music 'element (calc-harmonic-pitch pitch e)))
+     ((ly:pitch? p)
+      (begin
+        (set! p (ly:pitch-transpose p pitch))
+        (ly:music-set-property! music 'pitch p))))
     music))
 
 (define-public (make-harmonic mus)
   "Convert music variable @var{mus} to harmonics."
   (let ((elts (ly:music-property mus 'elements))
         (elt (ly:music-property mus 'element)))
-       (cond
-        ((pair? elts)
-         (map make-harmonic elts))
-        ((ly:music? elt)
-         (make-harmonic elt))
-        ((music-is-of-type? mus 'note-event)
-         (set! (ly:music-property mus 'articulations)
-               (append
-                 (ly:music-property mus 'articulations)
-                 (list (make-music 'HarmonicEvent))))))
-       mus))
+    (cond
+     ((pair? elts)
+      (for-each make-harmonic elts))
+     ((ly:music? elt)
+      (make-harmonic elt))
+     ((music-is-of-type? mus 'note-event)
+      (set! (ly:music-property mus 'articulations)
+            (append
+             (ly:music-property mus 'articulations)
+             (list (make-music 'HarmonicEvent))))))
+    mus))
index ee399f94ba6258a6bdcf66946a12b1ae78397082..14541059120cca6c3b574717e4cfab1eff135fb4 100644 (file)
@@ -25,5 +25,5 @@
 (define-public (internal-add-text-replacements props alist)
   (let* ((dummy-replacements (chain-assoc-get 'replacement-alist props '()))
          (new-replacements
-           (append dummy-replacements alist)))
+          (append dummy-replacements alist)))
     (prepend-alist-chain 'replacement-alist new-replacements props)))
index af852575dcedeb521c56b44be4672d29e1b21210..82e22fe59197e97ae601849beccbcafa7e495626 100644 (file)
@@ -48,7 +48,7 @@
 ;;;     ((1 . 8) . (3 3 2))
 ;;;     will cause all primary beams to be broken at 3/8, 6/8, and 8/8.
 ;;;
-;;;     ((1. 32) . (16 8 4 4))
+;;;     ((1 . 32) . (16 8 4 4))
 ;;;     will cause all 1/32, 1/64, and 1/128 beams to be broken at 1/2, 3/4,
 ;;;     7/8, and 8/8.
 ;;;
@@ -71,7 +71,7 @@
     ;; in 2/2 time:
     ;;   use defaults, but end beams with 32nd notes each 1 4 beat
     ((2 . 2) .
-             ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8))))))))
+     ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8))))))))
 
     ;; in 2/4, 2/8 and 2/16 time:
     ;;   use defaults, so no entries are necessary
@@ -80,7 +80,7 @@
     ;;   use defaults, but end beams with 32nd notes and higher each 1 4 beat
 
     ((3 . 2) .
-             ((beamExceptions . ((end .  (((1 . 32) . (8 8 8 8 8 8))))))))
+     ((beamExceptions . ((end .  (((1 . 32) . (8 8 8 8 8 8))))))))
 
     ;; in 3 4 time:
     ;;   use defaults, but combine all beats into a unit if possible
@@ -89,8 +89,8 @@
     ;;   in order to avoid beaming every beam type for the entire measure, we set
     ;;   triplets back to every beat.
     ((3 . 4) .
-             ((beamExceptions . ((end . (((1 . 8) . (6))            ;1/8 note whole measure
-                                         ((1 . 12) . (3 3 3)))))))) ;Anything shorter by beat
+     ((beamExceptions . ((end . (((1 . 8) . (6))            ;1/8 note whole measure
+                                 ((1 . 12) . (3 3 3)))))))) ;Anything shorter by beat
 
     ;; in 3 8  time:
     ;;   beam entire measure together
     ;; in 4 2 time:
     ;;   use defaults, but end beams with 16th notes or finer each 1 4 beat
     ((4 . 2) .
-             ((beamExceptions . ((end . (((1 . 16) . (4 4 4 4 4 4 4 4))))))))
+     ((beamExceptions . ((end . (((1 . 16) . (4 4 4 4 4 4 4 4))))))))
 
     ;; in 4 4 (common) time:
     ;;   use defaults, but combine beats 1,2 and 3,4 if only 8th notes
     ;;         ly/engraver-init.ly where the default time signature is set
     ;;         are set
     ((4 . 4) .
-             ((beamExceptions . ((end . (((1 . 8) . (4 4))  ; 1/8 notes half measure
-                                         ((1 . 12) . (3 3 3 3)))))))) ;Anything shorter by beat
+     ((beamExceptions . ((end . (((1 . 8) . (4 4))  ; 1/8 notes half measure
+                                 ((1 . 12) . (3 3 3 3)))))))) ;Anything shorter by beat
 
     ;; in 4/8 time:
     ;;   combine beats 1 and 2, so beam in 2
     ;; in 6 4 time:
     ;;   use defaults, but end beams with 32nd or finer each 1/4 beat
     ((6 . 4) .
-             ((beamExceptions . ((end .  (((1 . 16) . (4 4 4 4 4 4))))))))
+     ((beamExceptions . ((end .  (((1 . 16) . (4 4 4 4 4 4))))))))
 
     ;; in 6 8 time:
     ;;   use defaults, so no entries necessary
     ;; in 9 4 time:
     ;;   use defaults, but end beams with 32nd or finer each 1 4 beat
     ((9 . 4) .
-             ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8))))))))
+     ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8))))))))
 
     ;; in 9 8 time
     ;;   use defaults, so no entries necessary
     ;; in 12 4 time:
     ;;   use defaults, but end beams with 32nd or finer notes each 1 4 beat
     ((12 . 4) .
-              ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8 8 8 8 8))))))))
+     ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8 8 8 8 8))))))))
 
     ;; in 12 8 time:
     ;;   use defaults, so no entries necessary
     ;; in 5 8 time:
     ;;   default: group (3 2)
     ((5 . 8) .
-             ((beatStructure . (3 2))))
+     ((beatStructure . (3 2))))
 
     ;; in 8 8 time:
     ;;   default: group (3 3 2)
     ((8 . 8) .
-             ((beatStructure . (3 3 2))))
+     ((beatStructure . (3 3 2))))
 
     ))  ; end of alist definition
 
   "Get setting @code{my-symbol} for @code{time-signature} from
 @code{time-signature-settings}."
   (let ((my-time-signature-settings
-          (assoc-get time-signature time-signature-settings '())))
-   (assoc-get my-symbol my-time-signature-settings '())))
+         (assoc-get time-signature time-signature-settings '())))
+    (assoc-get my-symbol my-time-signature-settings '())))
 
 (define-public (make-setting base-fraction
                              beat-structure
                              beam-exceptions)
   (list
-    (cons 'baseMoment base-fraction)
-    (cons 'beatStructure beat-structure)
-    (cons 'beamExceptions beam-exceptions)))
-
-(define-public (base-fraction time-signature time-signature-settings)
-  "Get @code{baseMoment} fraction value for @var{time-signature} from
+   (cons 'baseMoment (if (pair? base-fraction)
+                         (/ (car base-fraction) (cdr base-fraction))
+                         base-fraction))
+   (cons 'beatStructure beat-structure)
+   (cons 'beamExceptions beam-exceptions)))
+
+(define-public (base-length time-signature time-signature-settings)
+  "Get @code{baseMoment} rational value for @var{time-signature} from
 @var{time-signature-settings}."
-   (let ((return-value (get-setting 'baseMoment
-                                    time-signature
-                                    time-signature-settings)))
-     (if (null? return-value)
-         (cons 1 (cdr time-signature))
-         return-value)))
-
-(define-public (beat-structure base-fraction time-signature time-signature-settings)
-  "Get @code{beatStructure} value in @var{base-fraction} units
+  (let ((return-value (get-setting 'baseMoment
+                                   time-signature
+                                   time-signature-settings)))
+    (if (null? return-value)
+        (/ (cdr time-signature))
+        return-value)))
+
+(define-public (beat-structure base-length time-signature time-signature-settings)
+  "Get @code{beatStructure} value in @var{base-length} units
 for @var{time-signature} from @var{time-signature-settings}."
-  (define (fraction-divide numerator denominator)
-    (/ (* (car numerator) (cdr denominator))
-       (* (cdr numerator) (car denominator))))
 
   (let ((return-value (get-setting 'beatStructure
                                    time-signature
@@ -211,9 +210,10 @@ for @var{time-signature} from @var{time-signature-settings}."
                                     (zero? (remainder numerator 3)))
                                3
                                1))
-               (beat-length (cons (* group-size (car base-fraction))
-                                  (cdr base-fraction)))
-               (beat-count (fraction-divide time-signature beat-length)))
+               (beat-count (/ (car time-signature)
+                              (cdr time-signature)
+                              base-length
+                              group-size)))
           (if (integer? beat-count)
               (make-list beat-count group-size)
               '()))
@@ -223,7 +223,7 @@ for @var{time-signature} from @var{time-signature-settings}."
 (define-public (beam-exceptions time-signature time-signature-settings)
   "Get @code{beamExceptions} value for @var{time-signature} from
 @var{time-signature-settings}."
-   (get-setting 'beamExceptions time-signature time-signature-settings))
+  (get-setting 'beamExceptions time-signature time-signature-settings))
 
 
 ;;; Functions for overriding time-signature settings
@@ -233,10 +233,10 @@ for @var{time-signature} from @var{time-signature-settings}."
   "Like the C++ code that executes \\override, but without type
 checking."
   (begin
-     (ly:context-set-property!
-       context
-       property
-       (cons (cons setting value) (ly:context-property context property)))))
+    (ly:context-set-property!
+     context
+     property
+     (cons (cons setting value) (ly:context-property context property)))))
 
 (define (revert-property-setting context property setting)
   "Like the C++ code that executes \revert, but without type
@@ -246,50 +246,50 @@ checking."
     "Count the number of entries in alist with a key of
 ENTRY-KEY."
     (cond
-      ((null? alist) 0)
-      ((equal? (caar alist) entry-key)
-         (+ 1 (entry-count (cdr alist) entry-key)))
-      (else (entry-count (cdr alist) entry-key))))
+     ((null? alist) 0)
+     ((equal? (caar alist) entry-key)
+      (+ 1 (entry-count (cdr alist) entry-key)))
+     (else (entry-count (cdr alist) entry-key))))
 
   (define (revert-member alist entry-key)
     "Return ALIST, with the first entry having a key of
 ENTRY-KEY removed.  ALIST is not modified, instead
 a fresh copy of the list-head is made."
     (cond
-      ((null? alist) '())
-      ((equal? (caar alist) entry-key) (cdr alist))
-      (else (cons (car alist)
-                  (revert-member (cdr alist) entry-key)))))
+     ((null? alist) '())
+     ((equal? (caar alist) entry-key) (cdr alist))
+     (else (cons (car alist)
+                 (revert-member (cdr alist) entry-key)))))
 
   ;; body of revert-property-setting
   (let ((current-value (ly:context-property context property)))
     (if (> (entry-count current-value setting) 0)
         (ly:context-set-property!
-          context
-          property
-          (revert-member current-value setting)))))
+         context
+         property
+         (revert-member current-value setting)))))
 
 (define-public (override-time-signature-setting time-signature setting)
   "Override the time signature settings for the context in
 @var{time-signature}, with the new setting alist @var{setting}."
-    (context-spec-music
-      (make-apply-context
-        (lambda (c) (override-property-setting
-                      c
-                      'timeSignatureSettings
-                      time-signature
-                      setting)))
-      'Timing))
+  (context-spec-music
+   (make-apply-context
+    (lambda (c) (override-property-setting
+                 c
+                 'timeSignatureSettings
+                 time-signature
+                 setting)))
+   'Timing))
 
 (define-public (revert-time-signature-setting time-signature)
   (context-spec-music
-    (make-apply-context
-      (lambda (c)
-        (revert-property-setting
-          c
-          'timeSignatureSettings
-          time-signature)))
-    'Timing))
+   (make-apply-context
+    (lambda (c)
+      (revert-property-setting
+       c
+       'timeSignatureSettings
+       time-signature)))
+   'Timing))
 
 
 
@@ -312,24 +312,24 @@ a fresh copy of the list-head is made."
          (den (car revargs))
          (nums (reverse (cdr revargs))))
     (make-override-markup '(baseline-skip . 0)
-      (make-number-markup
-        (make-left-column-markup (list
-          (make-center-column-markup (list
-            (make-line-markup (insert-markups nums "+"))
-            den))))))))
+                          (make-number-markup
+                           (make-left-column-markup
+                            (list (make-center-column-markup
+                                   (list (make-line-markup (insert-markups nums "+"))
+                                         den))))))))
 
 (define (format-complex-compound-time time-sig)
   (make-override-markup '(baseline-skip . 0)
-    (make-number-markup
-      (make-line-markup
-        (insert-markups (map format-time-fraction time-sig)
-                        (make-vcenter-markup "+"))))))
+                        (make-number-markup
+                         (make-line-markup
+                          (insert-markups (map format-time-fraction time-sig)
+                                          (make-vcenter-markup "+"))))))
 
 (define-public (format-compound-time time-sig)
   (cond
-    ((not (pair? time-sig)) (null-markup))
-    ((pair? (car time-sig)) (format-complex-compound-time time-sig))
-    (else (format-time-fraction time-sig))))
+   ((not (pair? time-sig)) (null-markup))
+   ((pair? (car time-sig)) (format-complex-compound-time time-sig))
+   (else (format-time-fraction time-sig))))
 
 
 ;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -350,9 +350,9 @@ a fresh copy of the list-head is made."
 
 (define-public (calculate-compound-measure-length time-sig)
   (cond
-    ((not (pair? time-sig)) (ly:make-moment 4 4))
-    ((pair? (car time-sig)) (calculate-complex-compound-time time-sig))
-    (else (calculate-time-fraction time-sig))))
+   ((not (pair? time-sig)) (ly:make-moment 4 4))
+   ((pair? (car time-sig)) (calculate-complex-compound-time time-sig))
+   (else (calculate-time-fraction time-sig))))
 
 
 ;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -363,10 +363,10 @@ a fresh copy of the list-head is made."
 
 (define-public (calculate-compound-base-beat time-sig)
   (ly:make-moment 1
-    (cond
-      ((not (pair? time-sig)) 4)
-      ((pair? (car time-sig)) (calculate-compound-base-beat-full time-sig))
-      (else (calculate-compound-base-beat-full (list time-sig))))))
+                  (cond
+                   ((not (pair? time-sig)) 4)
+                   ((pair? (car time-sig)) (calculate-compound-base-beat-full time-sig))
+                   (else (calculate-compound-base-beat-full (list time-sig))))))
 
 
 ;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -381,11 +381,11 @@ a fresh copy of the list-head is made."
   ;; Normalize to given beat, extract the beats and join them to one list
   (let* ((beat (calculate-compound-base-beat-full time-sig))
          (normalized (map (lambda (f) (normalize-fraction f beat)) time-sig))
-         (beats (map (lambda (f) (reverse (cdr (reverse f)))) normalized)))
-    (apply append beats)))
+         (beats (map (lambda (f) (drop-right f 1)) normalized)))
+    (concatenate beats)))
 
 (define-public (calculate-compound-beat-grouping time-sig)
   (cond
-    ((not (pair? time-sig)) '(2 . 2))
-    ((pair? (car time-sig)) (beat-grouping-internal time-sig))
-    (else (beat-grouping-internal (list time-sig)))))
+   ((not (pair? time-sig)) '(2 . 2))
+   ((pair? (car time-sig)) (beat-grouping-internal time-sig))
+   (else (beat-grouping-internal (list time-sig)))))
index b6c1e0583d1a3dd7fc39977df7e447a90faac538..b5f8b1bb8a64218a5d3e4dbbdb186a5a1100d986 100644 (file)
@@ -18,8 +18,8 @@
 
 (define-public (layout-extract-page-properties layout)
   (list (append `((line-width . ,(ly:paper-get-number
-                                layout 'line-width)))
-               (ly:output-def-lookup layout 'text-font-defaults))))
+                                  layout 'line-width)))
+                (ly:output-def-lookup layout 'text-font-defaults))))
 
 ;;;;;;;;;;;;;;;;;;
 
 and interpret them as markup.  The @var{props} argument will include
 variables set in @var{scopes} and @code{page:is-bookpart-last-page},
 @code{page:is-last-bookpart}, @code{page:page-number-string}, and
-@code{page:page-number}." 
+@code{page:page-number}."
 
   (define (get sym)
     (ly:output-def-lookup layout sym))
 
   (define (interpret-in-page-env potential-markup)
     (if (markup? potential-markup)
-       (let* ((alists (map ly:module->alist scopes))
-              (prefixed-alists
-               (map (lambda (alist)
-                      (map (lambda (entry)
-                             (cons
-                              (string->symbol
-                               (string-append
-                                "header:"
-                                (symbol->string (car entry))))
-                              (cdr entry)))
-                           alist))
-                    alists))
-              (pgnum-alist
-               (list
-                (cons 'header:tagline
-                      (ly:modules-lookup scopes 'tagline
-                                         (ly:output-def-lookup layout 'tagline)))
-                (cons 'page:is-last-bookpart is-last-bookpart)
-                (cons 'page:is-bookpart-last-page is-bookpart-last-page)
-                (cons 'page:page-number-string
-                      (number->string page-number))
-                (cons 'page:page-number page-number)))
-              (props (append
-                      (list pgnum-alist)
-                      prefixed-alists
-                      (layout-extract-page-properties layout))))
-         (interpret-markup layout props potential-markup))
+        (let* ((alists (map ly:module->alist scopes))
+               (prefixed-alists
+                (map (lambda (alist)
+                       (map (lambda (entry)
+                              (cons
+                               (string->symbol
+                                (string-append
+                                 "header:"
+                                 (symbol->string (car entry))))
+                               (cdr entry)))
+                            alist))
+                     alists))
+               (pgnum-alist
+                (list
+                 (cons 'header:tagline
+                       (ly:modules-lookup scopes 'tagline
+                                          (ly:output-def-lookup layout 'tagline)))
+                 (cons 'page:is-last-bookpart is-last-bookpart)
+                 (cons 'page:is-bookpart-last-page is-bookpart-last-page)
+                 (cons 'page:page-number-string
+                       (number->string page-number))
+                 (cons 'page:page-number page-number)))
+               (props (append
+                       (list pgnum-alist)
+                       prefixed-alists
+                       (layout-extract-page-properties layout))))
+          (interpret-markup layout props potential-markup))
 
-       empty-stencil))
+        empty-stencil))
 
   (interpret-in-page-env
    (if (and (even? page-number)
-           (markup? (get what-even)))
+            (markup? (get what-even)))
        (get what-even)
        (get what-odd))))
 
@@ -76,28 +76,28 @@ variables set in @var{scopes} and @code{page:is-bookpart-last-page},
   "Read variables @var{what} from @var{scopes}, and interpret it as markup.
 The @var{props} argument will include variables set in @var{scopes} (prefixed
 with `header:'."
-  
+
   (define (get sym)
     (let ((x (ly:modules-lookup scopes sym)))
       (if (markup? x) x #f)))
 
   (let* ((alists (map ly:module->alist scopes))
-        (prefixed-alist
-         (map (lambda (alist)
-                (map (lambda (entry)
-                       (cons
-                        (string->symbol
-                         (string-append
-                          "header:"
-                          (symbol->string (car entry))))
-                        (cdr entry)))
-                     alist))
-              alists))
-        (props (append prefixed-alist
-                       (layout-extract-page-properties layout)))
+         (prefixed-alist
+          (map (lambda (alist)
+                 (map (lambda (entry)
+                        (cons
+                         (string->symbol
+                          (string-append
+                           "header:"
+                           (symbol->string (car entry))))
+                         (cdr entry)))
+                      alist))
+               alists))
+         (props (append prefixed-alist
+                        (layout-extract-page-properties layout)))
 
-        (markup (ly:output-def-lookup layout what)))
+         (markup (ly:output-def-lookup layout what)))
 
     (if (markup? markup)
-       (interpret-markup layout props markup)
-       (ly:make-stencil '() '(1 . -1) '(1 . -1)))))
+        (interpret-markup layout props markup)
+        empty-stencil)))
index ea7ce7a0fcc33763c927980234ae9afdcf0c2ca0..2407fe3766239939a0c33d162eae75c7900a472e 100644 (file)
 (define-module (scm to-xml))
 
 (use-modules (ice-9 regex)
-            (srfi srfi-1)
-            (lily)
-            (oop goops))
+             (srfi srfi-1)
+             (lily)
+             (oop goops))
 
 "
 Todo: this is a quick hack; it makes more sense to define a GOOPS
 class of a documentnode (similar to how
-the documentation is generated.)
+the documentation is generated.)
 
 That is much cleaner: building the document, and dumping it to output
 is then separated.
@@ -47,11 +47,11 @@ is then separated.
   (name #:init-value "" #:accessor node-name #:init-keyword #:name)
   (value #:init-value "" #:accessor node-value #:init-keyword #:value)
   (attributes #:init-value '()
-             #:accessor node-attributes
-             #:init-keyword #:attributes)
+              #:accessor node-attributes
+              #:init-keyword #:attributes)
   (children #:init-value '()
-           #:accessor node-children
-           #:init-keyword #:children))
+            #:accessor node-children
+            #:init-keyword #:children))
 
 (define node-names
   '((NoteEvent . note)
@@ -68,10 +68,10 @@ is then separated.
     (string-append
      (if xml-name (open-tag xml-name '() '()) "")
      (if (equal? (node-value node) "")
-        (string-append
-         (if xml-name "\n" "")
-         (apply string-append (map musicxml-node->string (node-children node))))
-        (node-value node))
+         (string-append
+          (if xml-name "\n" "")
+          (string-concatenate (map musicxml-node->string (node-children node))))
+         (node-value node))
      (if xml-name (close-tag xml-name) "")
      (if xml-name "\n" ""))))
 
@@ -80,8 +80,7 @@ is then separated.
    "\n"
    (open-tag (node-name node) (node-attributes node) '())
    (if (equal? (node-value node) "")
-       (string-append
-       (apply string-append (map xml-node->string (node-children node))))
+       (string-concatenate (map xml-node->string (node-children node)))
        (node-value node))
    "\n"
    (close-tag (node-name node))))
@@ -96,26 +95,26 @@ is then separated.
     #:name 'duration
     ;; #:value (number->string (ash 1 (ly:duration-log d)))))
     #:attributes `((log . ,(ly:duration-log d))
-                  (dots . ,(ly:duration-dot-count d))
-                  (numer . ,(car (ly:duration-factor d)))
-                  (denom . ,(cdr (ly:duration-factor d))))))
+                   (dots . ,(ly:duration-dot-count d))
+                   (numer . ,(car (ly:duration-factor d)))
+                   (denom . ,(cdr (ly:duration-factor d))))))
 
 (define (pitch->xml-node p)
   (make <xml-node>
     #:name 'pitch
     #:attributes `((octave . ,(ly:pitch-octave p))
-                  (notename . ,(ly:pitch-notename p))
-                  (alteration . ,(ly:pitch-alteration p)))))
+                   (notename . ,(ly:pitch-notename p))
+                   (alteration . ,(ly:pitch-alteration p)))))
 
 (define (music->xml-node music)
   (let* ((name (ly:music-property music 'name))
-        (e (ly:music-property music 'element))
-        (es (ly:music-property music 'elements))
-        (mprops (ly:music-mutable-properties music))
-        (d (ly:music-property music 'duration))
-        (p (ly:music-property music 'pitch))
-        (ignore-props '(origin elements duration pitch element)))
-    
+         (e (ly:music-property music 'element))
+         (es (ly:music-property music 'elements))
+         (mprops (ly:music-mutable-properties music))
+         (d (ly:music-property music 'duration))
+         (p (ly:music-property music 'pitch))
+         (ignore-props '(origin elements duration pitch element)))
+
     (make <xml-node>
       #:name name
       #:children
@@ -197,7 +196,7 @@ is then separated.
   (if (null? alist)
       string
       (re-sub (caar alist) (cdar alist)
-             (re-sub-alist string (cdr alist)))))
+              (re-sub-alist string (cdr alist)))))
 
 (define xml-entities-alist
   '(("\"" . "&quot;")
@@ -209,22 +208,22 @@ is then separated.
 (define (open-tag tag attrs exceptions)
   (define (candidate? x)
     (not (memq (car x) exceptions)))
-  
+
   (define (dump-attr sym-val)
     (let* ((sym (car sym-val))
-          (val (cdr sym-val)))
-      
+           (val (cdr sym-val)))
+
       (string-append
        "\n   "
        (symbol->string sym)
        "=\""
        (let ((s (call-with-output-string (lambda (port) (display val port)))))
-        (re-sub-alist s xml-entities-alist))
+         (re-sub-alist s xml-entities-alist))
        "\"")))
 
   (string-append
    "<" (symbol->string tag)
-   (apply string-append (map dump-attr (filter candidate? attrs)))
+   (string-concatenate (map dump-attr (filter candidate? attrs)))
    ">"))
 
 (define (close-tag name)
@@ -236,7 +235,7 @@ is then separated.
   ;; dtd contains # -- This confuses tex during make doc.
   ;;
   ;;  (display (dtd-header) port)
-  
+
   (display (open-tag 'music '((type . score)) '()) port)
   (display (xml-node->string (music->xml-node music)) port)
   (display (close-tag 'music) port))
@@ -249,8 +248,7 @@ is then separated.
   ;;  (display (dtd-header) port)
 
   (define duration->xml-node musicxml-duration->xml-node)
-  
+
   (display (open-tag 'music '((type . score)) '()) port)
   (display (musicxml-node->string (music->xml-node music)) port)
   (display (close-tag 'music) port))
-
index 33acfbc7b42178a6f2c5ca585a989d73d6c27bdf..9bc12cc53c170745b4c5011cfb3b72b059a4d6e9 100644 (file)
@@ -1,7 +1,7 @@
 ;;;; This file is part of LilyPond, the GNU music typesetter.
 ;;;;
 ;;;; (c) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-;;;;                Jan Nieuwenhuizen <janneke@gnu.org>
+;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;;
 ;;;; LilyPond is free software: you can redistribute it and/or modify
 ;;;; it under the terms of the GNU General Public License as published by
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; clefs
+
+(define-public (clef-transposition-markup oct style)
+  "The transposition sign formatting function.  @var{oct} is supposed to be
+a string holding the transposition number, @var{style} determines the
+way the transposition number is displayed."
+  (let* ((delim (if (symbol? style)
+                    (case style
+                      ((parenthesized) (cons "(" ")"))
+                      ((bracketed) (cons "[" "]"))
+                      (else (cons "" "")))
+                    (cons "" "")))
+         (text (string-concatenate (list (car delim) oct (cdr delim)))))
+
+    (make-vcenter-markup text)))
+
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; metronome marks
 
 (define-public (format-metronome-markup event context)
   (let ((hide-note (ly:context-property context 'tempoHideNote #f))
-       (text (ly:event-property event 'text))
-       (dur (ly:event-property event 'tempo-unit))
-       (count (ly:event-property event 'metronome-count)))
+        (text (ly:event-property event 'text))
+        (dur (ly:event-property event 'tempo-unit))
+        (count (ly:event-property event 'metronome-count)))
 
     (metronome-markup text dur count hide-note)))
 
 (define-public (metronome-markup text dur count hide-note)
   (let* ((note-mark (if (and (not hide-note) (ly:duration? dur))
-                       (make-smaller-markup
-                        (make-note-by-number-markup (ly:duration-log dur)
-                                                    (ly:duration-dot-count dur)
-                                                    1))
-                       #f))
-        (count-markup (cond ((number? count)
-                             (if (> count 0)
-                                 (make-simple-markup (number->string count))
-                                 #f))
-                            ((pair? count)
-                             (make-concat-markup
-                              (list
-                               (make-simple-markup (number->string (car count)))
-                               (make-simple-markup " ")
-                               (make-simple-markup "–")
-                               (make-simple-markup " ")
-                               (make-simple-markup (number->string (cdr count))))))
-                            (else #f)))
+                        (make-smaller-markup
+                         (make-note-by-number-markup (ly:duration-log dur)
+                                                     (ly:duration-dot-count dur)
+                                                     1))
+                        #f))
+         (count-markup (cond ((number? count)
+                              (if (> count 0)
+                                  (make-simple-markup (number->string count))
+                                  #f))
+                             ((pair? count)
+                              (make-concat-markup
+                               (list
+                                (make-simple-markup (number->string (car count)))
+                                (make-simple-markup " ")
+                                (make-simple-markup "–")
+                                (make-simple-markup " ")
+                                (make-simple-markup (number->string (cdr count))))))
+                             (else #f)))
          (note-markup (if (and (not hide-note) count-markup)
-                         (make-concat-markup
-                          (list
-                           (make-general-align-markup Y DOWN note-mark)
-                           (make-simple-markup " ")
-                           (make-simple-markup "=")
-                           (make-simple-markup " ")
-                           count-markup))
-                         #f))
+                          (make-concat-markup
+                           (list
+                            (make-general-align-markup Y DOWN note-mark)
+                            (make-simple-markup " ")
+                            (make-simple-markup "=")
+                            (make-simple-markup " ")
+                            count-markup))
+                          #f))
          (text-markup (if (not (null? text))
-                         (make-bold-markup text)
-                         #f)))
+                          (make-bold-markup text)
+                          #f)))
     (if text-markup
-       (if (and note-markup (not hide-note))
-           (make-line-markup (list text-markup
-                                   (make-concat-markup
-                                    (list (make-simple-markup "(")
-                                          note-markup
-                                          (make-simple-markup ")")))))
-           (make-line-markup (list text-markup)))
-       (if note-markup
-           (make-line-markup (list note-markup))
-           (make-null-markup)))))
+        (if (and note-markup (not hide-note))
+            (make-line-markup (list text-markup
+                                    (make-concat-markup
+                                     (list (make-simple-markup "(")
+                                           note-markup
+                                           (make-simple-markup ")")))))
+            (make-line-markup (list text-markup)))
+        (if note-markup
+            (make-line-markup (list note-markup))
+            (make-null-markup)))))
 
 (define-public (format-mark-alphabet mark context)
   (make-bold-markup (make-markalphabet-markup (1- mark))))
 
 (define-public (format-mark-barnumbers mark context)
   (make-bold-markup (number->string (ly:context-property context
-                                                        'currentBarNumber))))
+                                                         'currentBarNumber))))
 
 (define-public (format-mark-box-letters mark context)
   (make-bold-markup (make-box-markup (make-markletter-markup (1- mark)))))
 
 (define-public (format-mark-box-barnumbers mark context)
   (make-bold-markup (make-box-markup
-                    (number->string (ly:context-property context
-                                                         'currentBarNumber)))))
+                     (number->string (ly:context-property context
+                                                          'currentBarNumber)))))
 
 (define-public (format-mark-circle-barnumbers mark context)
   (make-bold-markup (make-circle-markup
-                    (number->string (ly:context-property context
-                                                         'currentBarNumber)))))
+                     (number->string (ly:context-property context
+                                                          'currentBarNumber)))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (define-public (format-bass-figure figure event context)
   (let* ((fig (ly:event-property event 'figure))
-        (fig-markup (if (number? figure)
-
-                        ;; this is not very elegant, but center-aligning
-                        ;; all digits is problematic with other markups,
-                        ;; and shows problems in the (lack of) overshoot
-                        ;; of feta-alphabet glyphs.
-                        ((if (<= 10 figure)
-                             (lambda (y) (make-translate-scaled-markup
-                                          (cons -0.7 0) y))
-                             identity)
-
-                         (cond
-                          ((eq? #t (ly:event-property event 'diminished))
-                           (markup #:slashed-digit figure))
-                          ((eq? #t (ly:event-property event 'augmented-slash))
-                           (markup #:backslashed-digit figure))
-                          (else (markup #:number (number->string figure 10)))))
-                        #f))
-
-        (alt (ly:event-property event 'alteration))
-        (alt-markup
-         (if (number? alt)
-             (markup
-              #:general-align Y DOWN #:fontsize
-              (if (not (= alt DOUBLE-SHARP))
-                  -2 2)
-              (alteration->text-accidental-markup alt))
-             #f))
-
-        (plus-markup (if (eq? #t (ly:event-property event 'augmented))
-                         (markup #:number "+")
-                         #f))
-
-        (alt-dir (ly:context-property context 'figuredBassAlterationDirection))
-        (plus-dir (ly:context-property context 'figuredBassPlusDirection)))
+         (fig-markup (if (number? figure)
+
+                         ;; this is not very elegant, but center-aligning
+                         ;; all digits is problematic with other markups,
+                         ;; and shows problems in the (lack of) overshoot
+                         ;; of feta-alphabet glyphs.
+                         ((if (<= 10 figure)
+                              (lambda (y) (make-translate-scaled-markup
+                                           (cons -0.7 0) y))
+                              identity)
+
+                          (cond
+                           ((eq? #t (ly:event-property event 'diminished))
+                            (markup #:slashed-digit figure))
+                           ((eq? #t (ly:event-property event 'augmented-slash))
+                            (markup #:backslashed-digit figure))
+                           (else (markup #:number (number->string figure 10)))))
+                         #f))
+
+         (alt (ly:event-property event 'alteration))
+         (alt-markup
+          (if (number? alt)
+              (markup
+               #:general-align Y DOWN #:fontsize
+               (if (not (= alt DOUBLE-SHARP))
+                   -2 2)
+               (alteration->text-accidental-markup alt))
+              #f))
+
+         (plus-markup (if (eq? #t (ly:event-property event 'augmented))
+                          (markup #:number "+")
+                          #f))
+
+         (alt-dir (ly:context-property context 'figuredBassAlterationDirection))
+         (plus-dir (ly:context-property context 'figuredBassPlusDirection)))
 
     (if (and (not fig-markup) alt-markup)
-       (begin
-         (set! fig-markup (markup #:left-align #:pad-around 0.3 alt-markup))
-         (set! alt-markup #f)))
+        (begin
+          (set! fig-markup (markup #:left-align #:pad-around 0.3 alt-markup))
+          (set! alt-markup #f)))
 
 
     ;; hmm, how to get figures centered between note, and
     ;; lone accidentals too?
 
     ;;    (if (markup? fig-markup)
-    ;; (set!
-    ;;  fig-markup (markup #:translate (cons 1.0 0)
-    ;;                     #:center-align fig-markup)))
+    ;;  (set!
+    ;;   fig-markup (markup #:translate (cons 1.0 0)
+    ;;                      #:center-align fig-markup)))
 
     (if alt-markup
-       (set! fig-markup
-             (markup #:put-adjacent
-                     X (if (number? alt-dir)
-                           alt-dir
-                           LEFT)
-                     fig-markup
-                     #:pad-x 0.2 alt-markup)))
+        (set! fig-markup
+              (markup #:put-adjacent
+                      X (if (number? alt-dir)
+                            alt-dir
+                            LEFT)
+                      fig-markup
+                      #:pad-x 0.2 alt-markup)))
 
     (if plus-markup
-       (set! fig-markup
-             (if fig-markup
-                 (markup #:put-adjacent
-                         X (if (number? plus-dir)
-                               plus-dir
-                               LEFT)
-                         fig-markup
-                         #:pad-x 0.2 plus-markup)
-                 plus-markup)))
+        (set! fig-markup
+              (if fig-markup
+                  (markup #:put-adjacent
+                          X (if (number? plus-dir)
+                                plus-dir
+                                LEFT)
+                          fig-markup
+                          #:pad-x 0.2 plus-markup)
+                  plus-markup)))
 
     (if (markup? fig-markup)
-       (markup #:fontsize -2 fig-markup)
-       empty-markup)))
+        (markup #:fontsize -2 fig-markup)
+        empty-markup)))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   "Convert @var{placement-list} into a fretboard @var{grob}."
 
   (let* ((tunings (ly:context-property context 'stringTunings))
-        (my-string-count (length tunings))
-        (details (ly:grob-property grob 'fret-diagram-details)))
+         (my-string-count (length tunings))
+         (details (ly:grob-property grob 'fret-diagram-details)))
 
     ;; Add string-count from string-tunings to fret-diagram-details.
     (set! (ly:grob-property grob 'fret-diagram-details)
-            (acons 'string-count my-string-count details))
+          (acons 'string-count my-string-count details))
     ;; Create the dot-placement list for the grob
     (set! (ly:grob-property grob 'dot-placement-list) placement-list)))
 
@@ -233,21 +251,21 @@ be returned."
 dot placement entries."
     (let* ((placements (list->vector
                         (map (lambda (x) (list 'mute  x))
-                            (iota string-count 1)))))
+                             (iota string-count 1)))))
 
       (for-each (lambda (sf)
-                 (let* ((string (car sf))
-                        (fret (cadr sf))
-                        (finger (caddr sf)))
-                   (vector-set!
-                      placements
-                     (1- string)
-                     (if (= 0 fret)
-                          (list 'open string)
-                         (if finger
-                             (list 'place-fret string fret finger)
-                             (list 'place-fret string fret))))))
-               string-frets)
+                  (let* ((string (car sf))
+                         (fret (cadr sf))
+                         (finger (caddr sf)))
+                    (vector-set!
+                     placements
+                     (1- string)
+                     (if (= 0 fret)
+                         (list 'open string)
+                         (if finger
+                             (list 'place-fret string fret finger)
+                             (list 'place-fret string fret))))))
+                string-frets)
       (vector->list placements)))
 
   (define (placement-list->string-frets placement-list)
@@ -264,13 +282,19 @@ dot placement entries."
     (length (filter (lambda (x) (not (null? x)))
                     art-list)))
 
+  (define (string-number event)
+    "Get the string-number from @var{event}.  Return @var{#f}
+if no string-number is present."
+    (let ((num (ly:event-property event 'string-number)))
+      (and (integer? num) (positive? num) num)))
+
   (define (determine-frets-and-strings
-           notes
-           defined-strings
-           defined-fingers
-           minimum-fret
-           maximum-stretch
-           tuning)
+           notes
+           defined-strings
+           defined-fingers
+           minimum-fret
+           maximum-stretch
+           tuning)
     "Determine the frets and strings used to play the notes in
 @var{notes}, given @var{defined-strings} and @var{defined-fingers}
 along with @var{minimum-fret}, @var{maximum-stretch}, and
@@ -278,8 +302,8 @@ along with @var{minimum-fret}, @var{maximum-stretch}, and
 
 
     (define restrain-open-strings (ly:context-property context
-                                                      'restrainOpenStrings
-                                                      #f))
+                                                       'restrainOpenStrings
+                                                       #f))
     (define specified-frets '())
     (define free-strings (iota (length tuning) 1))
 
@@ -296,72 +320,57 @@ along with @var{minimum-fret}, @var{maximum-stretch}, and
       "Get the fingering from @var{ev}.  Return @var{#f}
 if no fingering is present."
       (let* ((articulations (ly:event-property ev 'articulations))
-            (finger-found #f))
-       (map (lambda (art)
-              (let* ((num (ly:event-property art 'digit)))
-
-                (if (and (ly:in-event-class? art 'fingering-event)
-                         (number? num)
-                         (> num 0))
-                  (set! finger-found num))))
-            articulations)
-       finger-found))
-
-    (define (string-number event)
-      "Get the string-number from @var{event}.  Return @var{#f}
-if no string-number is present."
-      (let ((num (ly:event-property event 'string-number)))
-       (if (number? num)
-         num
-         #f)))
+             (finger-found #f))
+        (for-each (lambda (art)
+                    (let* ((num (ly:event-property art 'digit)))
+
+                      (if (and (ly:in-event-class? art 'fingering-event)
+                               (number? num)
+                               (> num 0))
+                          (set! finger-found num))))
+                  articulations)
+        finger-found))
 
     (define (delete-free-string string)
       (if (number? string)
-       (set! free-strings
-         (delete string free-strings))))
+          (set! free-strings
+                (delete string free-strings))))
 
     (define (close-enough fret)
       "Decide if @var{fret} is acceptable, given the already used frets."
-      (if (null? specified-frets)
-       #t
-       (reduce
-         (lambda (x y)
-           (and x y))
-         #t
-         (map (lambda (specced-fret)
-                (or (eq? 0 specced-fret)
-                    (and (not restrain-open-strings)
-                    (eq? 0 fret))
-                    (>= maximum-stretch (abs (- fret specced-fret)))))
-              specified-frets))))
+      (every (lambda (specced-fret)
+               (or (zero? specced-fret)
+                   (zero? fret)
+                   (>= maximum-stretch (abs (- fret specced-fret)))))
+             specified-frets))
 
     (define (string-qualifies string pitch)
       "Can @var{pitch} be played on @var{string}, given already placed
 notes?"
       (let* ((fret (calc-fret pitch string tuning)))
-       (and (or (and (not restrain-open-strings)
-                     (eq? fret 0))
-                (>= fret minimum-fret))
-            (integer? fret)
-            (close-enough fret))))
+        (and (or (and (not restrain-open-strings)
+                      (zero? fret))
+                 (>= fret minimum-fret))
+             (integer? fret)
+             (close-enough fret))))
 
     (define (open-string string pitch)
       "Is @var{pitch} and open-string note on @var{string}, given
 the current tuning?"
       (let* ((fret (calc-fret pitch string tuning)))
-       (eq? fret 0)))
+        (zero? fret)))
 
     (define (set-fret! pitch-entry string finger)
       (let ((this-fret (calc-fret (car pitch-entry)
-                                 string
-                                 tuning)))
-       (if (< this-fret 0)
-         (ly:warning (_ "Negative fret for pitch ~a on string ~a")
-                     (car pitch-entry) string)
-         (if (not (integer? this-fret))
-             (ly:warning (_ "Missing fret for pitch ~a on string ~a")
-                         (car pitch-entry) string)))
-       (delete-free-string string)
+                                  string
+                                  tuning)))
+        (if (< this-fret 0)
+            (ly:warning (_ "Negative fret for pitch ~a on string ~a")
+                        (car pitch-entry) string)
+            (if (not (integer? this-fret))
+                (ly:warning (_ "Missing fret for pitch ~a on string ~a")
+                            (car pitch-entry) string)))
+        (delete-free-string string)
         (set! specified-frets (cons this-fret specified-frets))
         (list-set! string-fret-fingers
                    (cdr pitch-entry)
@@ -371,107 +380,101 @@ the current tuning?"
       (list-set! string-fret-fingers note-index (list #f #t)))
 
     (define string-fret-fingers
-             (map (lambda (string finger)
-                    (if (null? finger)
-                        (list string #f)
-                        (list string #f finger)))
-                  defined-strings defined-fingers))
+      (map (lambda (string finger)
+             (if (null? finger)
+                 (list string #f)
+                 (list string #f finger)))
+           defined-strings defined-fingers))
 
     ;;; body of determine-frets-and-strings
-    (let* ((pitch-alist (apply (lambda (mylist)
-                                 (let ((index -1))
-                                   (map (lambda (note)
-                                          (begin
-                                            (set! index (1+ index))
-                                            (cons (note-pitch note)
-                                                  index)))
-                                        mylist)))
-                               notes '()))
-           (pitches (map note-pitch notes)))
+    (let* ((pitches (map note-pitch notes))
+           (pitch-alist (map cons pitches (iota (length pitches)))))
 
       ;; handle notes with strings assigned and fingering of 0
       (for-each
-        (lambda (pitch-entry string-fret-finger)
-         (let* ((string (list-ref string-fret-finger 0))
-                 (finger (if (eq? (length string-fret-finger) 3)
-                             (list-ref string-fret-finger 2)
-                             '()))
-                 (pitch (car pitch-entry))
-                 (digit (if (null? finger)
-                           #f
-                           finger)))
-           (if (or (not (null? string))
-                   (eq? digit 0))
-               (if (eq? digit 0)
-                    ;; here we handle fingers of 0 -- open strings
-                   (let ((fit-string
-                           (find (lambda (string)
-                                   (open-string string pitch))
-                                 free-strings)))
-                     (if fit-string
-                          (set-fret! pitch-entry fit-string #f)
-                         (ly:warning (_ "No open string for pitch ~a")
-                                     pitch)))
-                    ;; here we handle assigned strings
-                   (let ((this-fret
-                            (calc-fret pitch string tuning))
-                         (handle-negative
-                           (ly:context-property context
-                                                'handleNegativeFrets
-                                                'recalculate)))
-                     (cond ((or (and (>= this-fret 0) (integer? this-fret))
-                                (eq? handle-negative 'include))
-                             (set-fret! pitch-entry string finger))
-                           ((eq? handle-negative 'recalculate)
-                            (begin
-                               (ly:warning
-                                 (_ "Requested string for pitch requires negative fret: string ~a pitch ~a")
-                                 string
-                                 pitch)
-                              (ly:warning (_ "Ignoring string request and recalculating."))
-                               (list-set! string-fret-fingers
-                                          (cdr pitch-entry)
-                                          (if (null? finger)
-                                              (list '() #f)
-                                              (list '() #f finger)))))
-                           ((eq? handle-negative 'ignore)
-                            (begin
-                               (ly:warning
-                                 (_ "Requested string for pitch requires negative fret: string ~a pitch ~a")
-                                 string
-                                 pitch)
-                              (ly:warning (_ "Ignoring note in tablature."))
-                               (kill-note! string-fret-fingers
-                                           (cdr pitch-entry))))))))))
-        pitch-alist string-fret-fingers)
-    ;; handle notes without strings assigned -- sorted by pitch, so
-    ;; we need to use the alist to have the note number available
-    (for-each
-      (lambda (pitch-entry)
-       (let* ((string-fret-finger (list-ref string-fret-fingers
-                                             (cdr pitch-entry)))
-               (string (list-ref string-fret-finger 0))
-               (finger (if (eq? (length string-fret-finger) 3)
-                           (list-ref string-fret-finger 2)
-                           '()))
-               (pitch (car pitch-entry))
-               (fit-string
-                (find (lambda (string)
-                        (string-qualifies string pitch))
-                      free-strings)))
-          (if (not (list-ref string-fret-finger 1))
-             (if fit-string
-                  (set-fret! pitch-entry fit-string finger)
-                 (begin
-                    (ly:warning (_ "No string for pitch ~a (given frets ~a)")
-                               pitch
-                                specified-frets)
-                    (kill-note! string-fret-fingers
-                                (cdr pitch-entry)))))))
-      (sort pitch-alist (lambda (pitch-entry-a pitch-entry-b)
-                          (ly:pitch<? (car pitch-entry-b)
-                                      (car pitch-entry-a)))))
-    string-fret-fingers)) ;; end of determine-frets-and-strings
+       (lambda (pitch-entry string-fret-finger)
+         (let* ((string (list-ref string-fret-finger 0))
+                (finger (if (= (length string-fret-finger) 3)
+                            (list-ref string-fret-finger 2)
+                            '()))
+                (pitch (car pitch-entry))
+                (digit (if (null? finger)
+                           #f
+                           finger)))
+           (if (or (not (null? string))
+                   (eqv? digit 0))
+               (if (eqv? digit 0)
+                   ;; here we handle fingers of 0 -- open strings
+                   (let ((fit-string
+                          (find (lambda (string)
+                                  (open-string string pitch))
+                                free-strings)))
+                     (if fit-string
+                         (set-fret! pitch-entry fit-string #f)
+                         (ly:warning (_ "No open string for pitch ~a")
+                                     pitch)))
+                   ;; here we handle assigned strings
+                   (let ((this-fret
+                          (calc-fret pitch string tuning))
+                         (handle-negative
+                          (ly:context-property context
+                                               'handleNegativeFrets
+                                               'recalculate)))
+                     (cond ((or (and (>= this-fret 0) (integer? this-fret))
+                                (eq? handle-negative 'include))
+                            (set-fret! pitch-entry string finger))
+                           ((eq? handle-negative 'recalculate)
+                            (begin
+                              (ly:warning
+                               (_ "Requested string for pitch requires negative fret: string ~a pitch ~a")
+                               string
+                               pitch)
+                              (ly:warning (_ "Ignoring string request and recalculating."))
+                              (list-set! string-fret-fingers
+                                         (cdr pitch-entry)
+                                         (if (null? finger)
+                                             (list '() #f)
+                                             (list '() #f finger)))))
+                           ((eq? handle-negative 'ignore)
+                            (begin
+                              (ly:warning
+                               (_ "Requested string for pitch requires negative fret: string ~a pitch ~a")
+                               string
+                               pitch)
+                              (ly:warning (_ "Ignoring note in tablature."))
+                              (kill-note! string-fret-fingers
+                                          (cdr pitch-entry))))))))))
+       pitch-alist string-fret-fingers)
+      ;; handle notes without strings assigned -- sorted by pitch, so
+      ;; we need to use the alist to have the note number available
+      (for-each
+       (lambda (pitch-entry)
+         (let* ((string-fret-finger (list-ref string-fret-fingers
+                                              (cdr pitch-entry)))
+                (string (list-ref string-fret-finger 0))
+                (finger (if (= (length string-fret-finger) 3)
+                            (list-ref string-fret-finger 2)
+                            '()))
+                (pitch (car pitch-entry))
+                (fit-string
+                 (find (lambda (string)
+                         (string-qualifies string pitch))
+                       free-strings)))
+           (if (not (list-ref string-fret-finger 1))
+               (if fit-string
+                   (set-fret! pitch-entry fit-string finger)
+                   (begin
+                     (ly:event-warning
+                      (list-ref notes (cdr pitch-entry))
+                      (_ "No string for pitch ~a (given frets ~a)")
+                      pitch
+                      specified-frets)
+                     (kill-note! string-fret-fingers
+                                 (cdr pitch-entry)))))))
+       (sort pitch-alist (lambda (pitch-entry-a pitch-entry-b)
+                           (ly:pitch<? (car pitch-entry-b)
+                                       (car pitch-entry-a)))))
+      string-fret-fingers)) ;; end of determine-frets-and-strings
 
   (define (get-predefined-fretboard predefined-fret-table tuning pitches)
     "Search through @var{predefined-fret-table} looking for a predefined
@@ -481,35 +484,35 @@ chords.  Returns a placement-list."
 
     (define (get-fretboard key)
       (let ((hash-handle
-            (hash-get-handle predefined-fret-table key)))
-       (if hash-handle
-           (cdr hash-handle)  ; return table entry
-           '())))
+             (hash-get-handle predefined-fret-table key)))
+        (if hash-handle
+            (cdr hash-handle)  ; return table entry
+            '())))
 
     ;; body of get-predefined-fretboard
     (let ((test-fretboard (get-fretboard (cons tuning pitches))))
       (if (not (null? test-fretboard))
-         test-fretboard
-         (let ((test-fretboard
-                (get-fretboard
-                 (cons tuning (map (lambda (x) (shift-octave x 1)) pitches)))))
-           (if (not (null? test-fretboard))
-               test-fretboard
-               (get-fretboard
-                (cons tuning (map (lambda (x) (shift-octave x -1))
-                                  pitches))))))))
+          test-fretboard
+          (let ((test-fretboard
+                 (get-fretboard
+                  (cons tuning (map (lambda (x) (shift-octave x 1)) pitches)))))
+            (if (not (null? test-fretboard))
+                test-fretboard
+                (get-fretboard
+                 (cons tuning (map (lambda (x) (shift-octave x -1))
+                                   pitches))))))))
 
   ;; body of determine-frets
   (let* ((predefined-fret-table
-         (ly:context-property context 'predefinedDiagramTable))
+          (ly:context-property context 'predefinedDiagramTable))
          (tunings (ly:context-property context 'stringTunings))
          (string-count (length tunings))
          (grob (if (null? rest) '() (car rest)))
-        (pitches (map (lambda (x) (ly:event-property x 'pitch)) notes))
+         (pitches (map (lambda (x) (ly:event-property x 'pitch)) notes))
          (defined-strings (map (lambda (x)
                                  (if (null? x)
                                      x
-                                     (ly:event-property x 'string-number)))
+                                     (or (string-number x) '())))
                                (car specified-info)))
          (defined-fingers (map (lambda (x)
                                  (if (null? x)
@@ -528,26 +531,26 @@ chords.  Returns a placement-list."
                tunings
                pitches)
               '())))
-     (if (null? predefined-fretboard)
-         (let ((string-frets
-                (determine-frets-and-strings
-                 notes
-                 strings-used
-                 defined-fingers
-                 (ly:context-property context 'minimumFret 0)
-                 (ly:context-property context 'maximumFretStretch 4)
-                 tunings)))
-            (if (null? grob)
-                string-frets
-                (create-fretboard
-                 context grob (string-frets->placement-list
-                                (filter (lambda (entry)
-                                          (car entry))
-                                        string-frets)
-                                string-count))))
-         (if (null? grob)
-             (placement-list->string-frets predefined-fretboard)
-             (create-fretboard context grob predefined-fretboard)))))
+    (if (null? predefined-fretboard)
+        (let ((string-frets
+               (determine-frets-and-strings
+                notes
+                strings-used
+                defined-fingers
+                (ly:context-property context 'minimumFret 0)
+                (ly:context-property context 'maximumFretStretch 4)
+                tunings)))
+          (if (null? grob)
+              string-frets
+              (create-fretboard
+               context grob (string-frets->placement-list
+                             (filter (lambda (entry)
+                                       (car entry))
+                                     string-frets)
+                             string-count))))
+        (if (null? grob)
+            (placement-list->string-frets predefined-fretboard)
+            (create-fretboard context grob predefined-fretboard)))))
 
 
 
@@ -560,26 +563,26 @@ chords.  Returns a placement-list."
 ;; The fret letter is taken from 'fretLabels if present
 (define-public (fret-letter-tablature-format
                 context string-number fret-number)
- (let ((labels (ly:context-property context 'fretLabels)))
-  (make-vcenter-markup
-   (cond
-    ((= 0 (length labels))
-     (string (integer->char (+ fret-number (char->integer #\a)))))
-    ((and (<= 0 fret-number) (< fret-number (length labels)))
-     (list-ref labels fret-number))
-    (else
-     (ly:warning (_ "No label for fret ~a (on string ~a);
 (let ((labels (ly:context-property context 'fretLabels)))
+    (make-vcenter-markup
+     (cond
+      ((= 0 (length labels))
+       (string (integer->char (+ fret-number (char->integer #\a)))))
+      ((and (<= 0 fret-number) (< fret-number (length labels)))
+       (list-ref labels fret-number))
+      (else
+       (ly:warning (_ "No label for fret ~a (on string ~a);
 only ~a fret labels provided")
-                fret-number string-number (length labels))
-     ".")))))
+                   fret-number string-number (length labels))
+       ".")))))
 
 ;; Display the fret number as a number
 (define-public (fret-number-tablature-format
                 context string-number fret-number)
   (make-vcenter-markup
-    (format #f "~a" fret-number)))
+   (format #f "~a" fret-number)))
 
-;; The 5-string banjo has got a extra string, the fifth (duh), which
+;; The 5-string banjo has got an extra string, the fifth (duh), which
 ;; starts at the fifth fret on the neck.  Frets on the fifth string
 ;; are referred to relative to the other frets:
 ;;   the "first fret" on the fifth string is really the sixth fret
@@ -587,11 +590,11 @@ only ~a fret labels provided")
 ;; We solve this by defining a new fret-number-tablature function:
 (define-public (fret-number-tablature-format-banjo
                 context string-number fret-number)
- (make-vcenter-markup
-  (number->string (cond
-                   ((and (> fret-number 0) (= string-number 5))
-                    (+ fret-number 5))
-                   (else fret-number)))))
 (make-vcenter-markup
+   (number->string (cond
+                    ((and (> fret-number 0) (= string-number 5))
+                     (+ fret-number 5))
+                    (else fret-number)))))
 
 ;;  Tab note head staff position functions
 ;;
@@ -600,13 +603,13 @@ only ~a fret labels provided")
 ;;  lines
 
 (define-public (tablature-position-on-lines context string-number)
- (let* ((string-tunings (ly:context-property context 'stringTunings))
-        (string-count (length string-tunings))
-        (string-one-topmost (ly:context-property context 'stringOneTopmost))
-        (staff-line (- (* 2 string-number) string-count 1)))
-  (if string-one-topmost
-      (- staff-line)
-      staff-line)))
 (let* ((string-tunings (ly:context-property context 'stringTunings))
+         (string-count (length string-tunings))
+         (string-one-topmost (ly:context-property context 'stringOneTopmost))
+         (staff-line (- (* 2 string-number) string-count 1)))
+    (if string-one-topmost
+        (- staff-line)
+        staff-line)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; bar numbers
@@ -620,7 +623,7 @@ only ~a fret labels provided")
 (define-public ((set-bar-number-visibility n) tr)
   (let ((bn (ly:context-property tr 'currentBarNumber)))
     (ly:context-set-property! tr 'barNumberVisibility
-                             (modulo-bar-number-visible n (modulo bn n)))))
+                              (modulo-bar-number-visible n (modulo bn n)))))
 
 (define-public (first-bar-number-invisible barnum mp)
   (> barnum 1))
@@ -640,14 +643,14 @@ only ~a fret labels provided")
         (cons (+ alt-number (- (expt 26 pow) an)) (1- pow))))
   (define (make-letter so-far an pow)
     (if (< pow 0)
-      so-far
-      (let ((pos (modulo (quotient an (expt 26 pow)) 26)))
-        (make-letter (string-append so-far
-                                    (substring "abcdefghijklmnopqrstuvwxyz"
-                                               pos
-                                               (1+ pos)))
-                   an
-                   (1- pow)))))
+        so-far
+        (let ((pos (modulo (quotient an (expt 26 pow)) 26)))
+          (make-letter (string-append so-far
+                                      (substring "abcdefghijklmnopqrstuvwxyz"
+                                                 pos
+                                                 (1+ pos)))
+                       an
+                       (1- pow)))))
   (let* ((number-and-power (get-number-and-power 0 0))
          (begin-measure (= 0 (ly:moment-main-numerator measure-pos)))
          (maybe-open-parenthesis (if begin-measure "" "("))
@@ -698,10 +701,10 @@ event classes, and @code{acknowledgers} and @code{end-acknowledgers}
 with the subordinate symbols being interfaces."
   (let loop ((forms forms))
     (if (cheap-list? forms)
-       `(list
-         ,@(map (lambda (form)
-                  (if (pair? (car form))
-                      `(cons ',(caar form) (lambda ,(cdar form) ,@(cdr form)))
-                      `(cons ',(car form) ,(loop (cdr form)))))
-                forms))
-       forms)))
+        `(list
+          ,@(map (lambda (form)
+                   (if (pair? (car form))
+                       `(cons ',(caar form) (lambda ,(cdar form) ,@(cdr form)))
+                       `(cons ',(car form) ,(loop (cdr form)))))
+                 forms))
+        forms)))
index 5be76572923f4dd14b2632f80b2b1f057bd0d18f..f3d65b90c2747ca6b7f1c09525ab64546b1bca2f 100644 (file)
@@ -15,7 +15,7 @@
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-(define x11-color-list             
+(define x11-color-list
   '((snow 1 0.98039215686274506 0.98039215686274506)
     (GhostWhite 0.97254901960784312 0.97254901960784312 1)
     (WhiteSmoke 0.96078431372549022 0.96078431372549022 0.96078431372549022)
 (define (make-x11-color-handler)
   (let
       ((x11-color-table (make-hash-table 31)))
-    
+
     (lambda (arg)
-      (let* 
-         ((arg-sym (if (string? arg)
-                       (if (string-index arg #\ )
-                           (let
-                               ((arg-list (string-split (string-capitalize arg) #\ )))
+      (let*
+          ((arg-sym (if (string? arg)
+                        (if (string-index arg #\ )
+                            (let
+                                ((arg-list (string-split (string-capitalize arg) #\ )))
+
+                              (string->symbol
+                               (let append-all ((x arg-list))
+                                 (if (null? x)
+                                     ""
+                                     (string-append (car x) (append-all (cdr x)))))))
+
+                            (string->symbol arg))
+                        arg))
+
+           (temp (hashq-ref x11-color-table arg-sym)))
+
+        (if temp
+            temp
+            (let*
+                ((temp-1 (assq-ref x11-color-list arg-sym))
+                 (temp (if temp-1 temp-1 '(0 0 0))))
 
-                             (string->symbol 
-                              (let append-all ((x arg-list))
-                                (if (null? x)
-                                    ""
-                                    (string-append (car x) (append-all (cdr x)))))))
-                           
-                           (string->symbol arg))
-                       arg))
-          
-          (temp (hashq-ref x11-color-table arg-sym)))
-       
-       (if temp
-           temp
-           (let*
-               ((temp-1 (assq-ref x11-color-list arg-sym))
-                (temp (if temp-1 temp-1 '(0 0 0))))
-             
-             (hashq-create-handle! x11-color-table arg-sym temp)
-             temp))))))
+              (hashq-create-handle! x11-color-table arg-sym temp)
+              temp))))))
 
 (define-public x11-color (make-x11-color-handler))
index b3170cdbf95ad51766b98e4f88d8a6d5da8238de..f270c000e37ae8b5a47c970a351d3d89fbc344b5 100644 (file)
@@ -1,6 +1,6 @@
 depth = ..
 
-SUBDIRS=auxiliar build
+SUBDIRS=build
 
 SEXECUTABLES=convert-ly lilypond-book abc2ly etf2ly midi2ly lilypond-invoke-editor musicxml2ly lilysong lilymidi
 
index 15161032f2b251155b69cfc3b1ef4c58fb5775c0..77d47d7dcdbd453f41d3fa47d9f784e752ff13d7 100644 (file)
@@ -233,7 +233,7 @@ def dump_default_bar (outf):
     Nowadays abc2ly outputs explicits barlines (?)
     """
     ## < 2.2
-    outf.write ("\n\\set Score.defaultBarType = \"empty\"\n")
+    outf.write ("\n\\set Score.defaultBarType = \"\"\n")
 
 
 def dump_slyrics (outf):
@@ -1124,12 +1124,12 @@ old_bar_dict = {
 '|]' : '|.',
 '||' : '||',
 '[|' : '||',
-':|' : ':|',
+':|' : ':|.',
 '|:' : '|:',
-'::' : ':|:',
+'::' : ':|.|:',
 '|1' : '|',
 '|2' : '|',
-':|2' : ':|',
+':|2' : ':|.',
 '|' :  '|'
 }
 bar_dict = {
diff --git a/scripts/auxiliar/GNUmakefile b/scripts/auxiliar/GNUmakefile
deleted file mode 100644 (file)
index d70ff71..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-depth=../..
-
-EXTRA_DIST_FILES = $(call src-wildcard,*.sh) $(call src-wildcard,*.py)
-EXTRA_DIST_FILES += pfx2ttf.fontforge
-EXTRA_DIST_FILES += lily-git.tcl
-EXTRA_DIST_FILES += ref_check.tely
-
-include $(depth)/make/stepmake.make
-
-default:
diff --git a/scripts/auxiliar/NoTagline.ly b/scripts/auxiliar/NoTagline.ly
new file mode 100644 (file)
index 0000000..d806a89
--- /dev/null
@@ -0,0 +1,6 @@
+\version "2.16.0"
+
+\paper {
+  #(set-paper-size "a4")
+}
+\header { tagline = ##f }
index d774bee3fdee601350f379418db61543fc69e19b..4c15937c7c4555f1a79322682da33308e14415b9 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-if test "$1" == "--fresh"; then
+if test "$1" = "--fresh"; then
   fresh=yes
 fi
 
index da110c79160add693c614bb6dd12ae8871e5e9b1..b6c2bc77f614cb9f4e305b4e7ce8d8c44b929a50 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-if test "$1" == "--fresh"; then
+if test "$1" = "--fresh"; then
   fresh=yes
 fi
 
index 77d0bdee96ae9e662c8ad6f3693bffd357defba9..aaee5812689cd4f9abdc614867db1f122b541789 100755 (executable)
@@ -31,7 +31,7 @@ EOF
     exit "$1"
 }
 
-if [ "$1" == '-h' ] || [ "$1" == '--help' ]; then
+if [ "$1" = '-h' ] || [ "$1" = '--help' ]; then
     usage 0
 fi
 
diff --git a/scripts/auxiliar/fixscm.sh b/scripts/auxiliar/fixscm.sh
new file mode 100755 (executable)
index 0000000..9c8f2f3
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# Indent and untabify source files (given by their
+# filenames in the command line), according to
+# LilyPond source style standards.
+
+elisp_expression='(progn
+  (delete-trailing-whitespace)
+  (indent-region (point-min) (point-max) nil)
+  (untabify (point-min) (point-max))
+  (save-buffer))'
+for f in "$@"; do
+  emacs -batch "$f" --eval "${elisp_expression}"
+done
diff --git a/scripts/auxiliar/make-regtest-pngs.sh b/scripts/auxiliar/make-regtest-pngs.sh
new file mode 100755 (executable)
index 0000000..01610e8
--- /dev/null
@@ -0,0 +1,160 @@
+#!/bin/sh
+
+#  Make PNG files from regtests
+#
+#  Usage:  ./make-regtest-pngs.sh -j CPUs -o/-n
+#
+#    where -j specifies the number of parallel processes to run
+#    (normally CPUs+1).  e.g.:
+#
+#    ./make-regtest-pngs.sh -j9
+#
+#   -p uses GNU parallel with the given job count in order to also
+#   parallelize the conversion of PDF files to bitmaps when using -g
+#   or -d.  No attempt is made to parallelize the bitmap comparisons
+#   since their memory requirements may be prohibitive.
+#
+#   -o means build an old regtest set - the PNGs go in the old-regtest-results
+#   directory
+#
+#   -n means build a new regtest set - the PNGs go in the new-regtest-results
+#   directory
+#
+#   -c uses PDF and the poppler library via pdftocairo for generating
+#   bitmaps, simulating the output for Evince and other previewers
+#   using poppler.  pdftocairo may be contained in the poppler-utils
+#   package.
+#
+#   -r can be used for specifying a rendering resolution.  This
+#   defaults to 101 for poppler and 300 for Ghostscript from PDF.
+#
+#   -g uses Ghostscript for rendering a bitmap version from the PDF,
+#   simulating the output from printing PDF files on a GNU system, so
+#   use a resolution appropriate for print.  Antialiasing is not enabled.
+#
+#   -d changes the Ghostscript device used for creating PNG files
+#   (usually png16m for direct PNG creation and pngmono for printer simulation)
+#
+#   if any filenames follow, those are the tests to run.  In absence
+#   of any filenames, the contents of input/regression are used.
+
+cpu_count=${CPU_COUNT:-1}
+backend_opt='--png ${resolution:+=-dresolution=$resolution} ${gsdevice:+=-dpixmap-format=$gsdevice}'
+resolution=
+gsdevice=
+use_parallel=n
+
+while getopts "j:oncr:gpd:" opts; do
+    case $opts in j)
+            cpu_count=$OPTARG;;
+       
+       o)
+            file_loc="old-regtest-results";;
+
+       c)
+           backend_opt="--pdf"
+           png_generate()
+           {
+               $1 pdftocairo -png -r ${resolution:-101} -q "$2"
+           };;
+
+       n)
+            file_loc="new-regtest-results"
+            do_compare="y";;
+
+       r)
+           resolution=$OPTARG;;
+       g)
+           backend_opt="--pdf"
+           png_generate()
+           {
+               $1 gs -sDEVICE=${gsdevice:-pngmono} -q -dNOPAUSE \
+                   -r${resolution:-300} -dNOPLATFONTS \
+                   -dTextAlphaBits=1 -dGraphicsAlphaBits=1 \
+                   -sOutputFile="${2%.pdf}-%d.png" "$2" -c quit
+           };;
+       p)
+           use_parallel=y;;
+       d)
+           gsdevice=$OPTARG;;
+    esac
+done
+
+shift $((OPTIND-1))
+
+if [ -z "$file_loc" ]; then
+    echo "Must specify old (-o) or new (-n) regtest PNG creation on command line"
+    exit 1
+fi
+
+rm -rf $LILYPOND_BUILD_DIR/out-png-check/$file_loc
+mkdir -p $LILYPOND_BUILD_DIR/out-png-check/$file_loc
+OLDPWD="$PWD"
+cd $LILYPOND_BUILD_DIR/out-png-check/$file_loc
+if [ "$*" = "" ]
+then
+    ls $LILYPOND_GIT/input/regression/*.ly > dir.txt
+else
+    : > dir.txt
+    for i
+    do
+       case "$i" in /*)
+               echo "$i" >> dir.txt;;
+           *)
+               echo "$OLDPWD/$i" >> dir.txt
+       esac
+    done
+fi
+
+$LILYPOND_BUILD_DIR/out/bin/lilypond $(eval echo $backend_opt) --relocate \
+    -dinclude-settings=$LILYPOND_GIT/scripts/auxiliar/NoTagline.ly \
+    -djob-count=$cpu_count -dread-file-list "dir.txt"
+if [ "$backend_opt" = "--pdf" ]
+then
+    if [ $use_parallel = y ]
+    then
+       for i in *.pdf
+       do
+           png_generate echo $i
+       done | parallel -j $cpu_count
+       rm *.pdf
+    else
+       for i in *.pdf
+       do
+           png_generate "" $i && rm "$i"
+       done
+    fi
+fi
+rm -rf dir.txt
+rm -rf *.log
+
+if [ -n "$do_compare" ]; then
+    cd ..
+    rm -rf regtest-diffs
+    mkdir -p regtest-diffs
+    diff_count=0
+    for filename in new-regtest-results/*.png; do
+        trimFile=$(basename $filename)
+        if [ -e "old-regtest-results/$trimFile" ]; then
+            convert new-regtest-results/$trimFile -level 50%  NewTest.png
+            convert old-regtest-results/$trimFile -level 50%  OldTest.png
+            difference=$(compare -metric AE NewTest.png OldTest.png null: 2>&1 )
+            if [ $? -gt 0 ];then
+                difference=9999
+            fi
+            if [ $difference -gt 1 ];then
+                echo $trimFile": "$difference" differences"
+                compare -dissimilarity-threshold 1 \
+                    new-regtest-results/$trimFile \
+                    old-regtest-results/$trimFile  regtest-diffs/$trimFile
+                convert regtest-diffs/$trimFile -trim regtest-diffs/$trimFile
+                diff_count=$(($diff_count+1))
+            fi
+        else
+            echo "old-regtest-results/"$trimFile" does not exist"
+        fi
+    done
+    rm -rf NewTest.png
+    rm -rf OldTest.png
+    echo $diff_count "differences found."
+fi
index 09c344959976b172fa9d502f43d59187199b8207..33a610d9c0bb5873f5faf0bdb4f9d759a5721889 100755 (executable)
@@ -46,6 +46,9 @@ class CrossRefs:
   def addNode(self, nodeName, manualName, fileName):
     global returnCode
 #    print "Node: ", nodeName, " in ", manualName, " found in ", fileName
+    if "\\" in nodeName:
+      returnCode = 1
+      print "nodeName: ", nodeName, " in ", fileName, " contains backslash"
     if manualName+"/"+nodeName in self.Nodes.keys():
       print "Error: Duplicate nodename ",nodeName, " in ", fileName, " and ", self.Nodes[manualName+"/"+nodeName][1]
       returnCode=1
@@ -53,6 +56,10 @@ class CrossRefs:
     self.nodeNames[nodeName] = fileName
 
   def addRef(self, toManualName, toHeading, inFileName):
+    global returnCode
+    if "\\" in toHeading:
+      returnCode = 1
+      print "ref to: ", toHeading, " in ", inFileName, " contains backslash"
 #    if inFileName == "notation/vocal.itely":
 #      print "Ref to ", toManualName, "/",toHeading, " found in ", inFileName
     self.Refs.append([toManualName + "/" + toHeading, inFileName])
index ed7363148ed5a64451be5f8260388a3d521e41ff..2c689cbefc5baea6063aa030bc9d04b1c8ae24d2 100644 (file)
@@ -48,6 +48,7 @@ Dummy nodes to satisfy refs to text markup
 @node Align
 @node Graphic
 @node Instrument Specific Markup
+@node Accordion Registers
 @node Music
 
 Application Usage
diff --git a/scripts/auxiliar/show_skyline_command.py b/scripts/auxiliar/show_skyline_command.py
new file mode 100644 (file)
index 0000000..6fc6314
--- /dev/null
@@ -0,0 +1,156 @@
+# This file is part of LilyPond, the GNU music typesetter.
+#
+# Copyright (C) 2012 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/>.
+
+# A gdb plugin debugging skylines.  To use the plugin, make sure that
+# skyline_viewer.py is in your PATH, then add
+# source /path/to/show_skyline_command.py
+# to your .gdbinit file.  The 'vsky' and 'hsky' commands for
+# drawing skylines will then be available in gdb.
+
+import gdb
+from subprocess import Popen, PIPE
+from math import isinf
+
+SKYLINE_VIEWER = 'skyline_viewer.py'
+
+# Function taken from GCC
+def find_type(orig, name):
+    typ = orig.strip_typedefs()
+    while True:
+        search = str(typ) + '::' + name
+        try:
+            return gdb.lookup_type(search)
+        except RuntimeError:
+            pass
+        # The type was not found, so try the superclass.    We only need
+        # to check the first superclass, so we don't bother with
+        # anything fancier here.
+        field = typ.fields()[0]
+        if not field.is_base_class:
+            raise ValueError, "Cannot find type %s::%s" % (str(orig), name)
+        typ = field.type
+
+# Class adapted from GCC
+class ListIterator:
+    def __init__ (self, val):
+        self.val = val
+        self.nodetype = find_type (val.type, '_Node')
+        self.nodetype = self.nodetype.strip_typedefs ().pointer ()
+
+        head = val['_M_impl']['_M_node']
+        self.base = head['_M_next']
+        self.head = head.address
+
+    def __iter__ (self):
+        return self
+
+    def next (self):
+        if self.base == self.head:
+                raise StopIteration
+        elt = self.base.cast (self.nodetype).dereference ()
+        self.base = elt['_M_next']
+        return elt['_M_data']
+
+def to_list (list_val):
+    return list (ListIterator (list_val))
+
+def skyline_to_lines (sky_value):
+    """Turns a gdb.Value into a list of line segments."""
+    sky_d = int (sky_value['sky_'])
+    buildings = to_list (sky_value['buildings_'])
+
+    def bld_to_line (bld):
+        y_intercept = float (bld['y_intercept_']) * sky_d
+        slope = float (bld['slope_']) * sky_d
+        x1 = float (bld['start_'])
+        x2 = float (bld['end_'])
+
+        if isinf (y_intercept) or isinf (x1) or isinf (x2):
+            return None
+        return (x1, y_intercept + slope * x1, x2, y_intercept + slope * x2)
+
+    ret = map (bld_to_line, buildings)
+    return [r for r in ret if r is not None]
+
+viewer = Popen(SKYLINE_VIEWER, stdin=PIPE)
+def add_skyline(lines):
+    global viewer
+    try:
+        for line in lines:
+            x1, y1, x2, y2 = line
+            viewer.stdin.write('(%f,%f) (%f,%f)\n' % (x1, y1, x2, y2))
+        viewer.stdin.write('\n')
+    except IOError:
+        # If the pipe is broken, it probably means that someone closed
+        # the viewer window. Open another one.
+        viewer = Popen(SKYLINE_VIEWER, stdin=PIPE)
+        add_skyline(lines)
+
+class ShowSkylineCommand (gdb.Command):
+    "Show a skyline graphically."
+
+    def __init__ (self, command_name):
+        super (ShowSkylineCommand, self).__init__ (command_name,
+                                                 gdb.COMMAND_DATA,
+                                                 gdb.COMPLETE_SYMBOL, False)
+
+    def to_lines (self, skyline):
+        pass
+
+    def invoke (self, arg, from_tty):
+        global plot
+
+        val = gdb.parse_and_eval (arg)
+        typ = val.type
+
+        # If they passed in a reference or pointer to a skyline,
+        # dereference it.
+        if typ.code == gdb.TYPE_CODE_PTR or typ.code == gdb.TYPE_CODE_REF:
+            val = val.referenced_value ()
+            typ = val.type
+
+        if typ.tag == 'Skyline_pair':
+            sky = val['skylines_']
+            arr = sky['array_']
+            add_skyline (self.to_lines (arr[0]))
+            add_skyline (self.to_lines (arr[1]))
+
+        elif typ.tag == 'Skyline':
+            add_skyline (self.to_lines (val))
+
+class ShowVSkylineCommand (ShowSkylineCommand):
+    "Show a vertical skyline."
+
+    def __init__ (self):
+        super (ShowVSkylineCommand, self).__init__ ("vsky")
+
+    def to_lines (self, skyline):
+        return skyline_to_lines (skyline)
+
+class ShowHSkylineCommand (ShowSkylineCommand):
+    "Show a horizontal skyline."
+
+    def __init__ (self):
+        super (ShowHSkylineCommand, self).__init__ ("hsky")
+
+    def to_lines (self, skyline):
+        lines = skyline_to_lines (skyline)
+        # Because it is a horizontal skyline, reflect around the line y=x.
+        return [(y1, x1, y2, x2) for (x1, y1, x2, y2) in lines]
+
+ShowHSkylineCommand()
+ShowVSkylineCommand()
diff --git a/scripts/auxiliar/skyline_viewer.py b/scripts/auxiliar/skyline_viewer.py
new file mode 100755 (executable)
index 0000000..83e45f8
--- /dev/null
@@ -0,0 +1,159 @@
+#!/usr/bin/env python
+
+# This file is part of LilyPond, the GNU music typesetter.
+#
+# Copyright (C) 2012 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/>.
+
+# A GTK+ program for debugging skylines. The program reads a sequence
+# of line segments from stdin (one line segment per line of stdin, in the format
+# '(x1, y1) (x2, y2)'). A skyline is terminated by an empty line, which
+# causes the skyline to be displayed on the screen.
+
+from threading import Thread
+from math import isinf
+import gtk
+import gobject
+import goocanvas
+import sys
+import re
+
+class GtkSkylineCanvas (goocanvas.Canvas):
+    """A Canvas for displaying skylines."""
+    def __init__ (self):
+        super (GtkSkylineCanvas, self).__init__ ()
+        self.connect ('size-allocate', GtkSkylineCanvas.rescale)
+        self.x_min = float ('inf')
+        self.x_max = float ('-inf')
+        self.y_min = float ('inf')
+        self.y_max = float ('-inf')
+
+        self.colors = ('black', 'red', 'green', 'blue', 'maroon', 'olive', 'teal')
+        self.cur_color_index = 0
+
+    def rescale (self, allocation):
+        width = (self.x_max - self.x_min + 1) * 1.1
+        height = (self.y_max - self.y_min + 1) * 1.1
+        if width <= 0 or height <= 0:
+            return
+
+        scale_x = allocation.width / width
+        scale_y = allocation.height / height
+        scale = min (scale_x, scale_y)
+        self.set_scale (scale)
+
+        center_x = (self.x_max + self.x_min) / 2
+        center_y = (self.y_max + self.y_min) / 2
+        actual_width = allocation.width / scale
+        actual_height = allocation.height / scale
+        actual_min_x = center_x - actual_width / 2
+        actual_max_x = center_x + actual_width / 2
+        actual_min_y = center_y - actual_height / 2
+        actual_max_y = center_y + actual_height / 2
+
+        self.set_bounds (actual_min_x, actual_min_y, actual_max_x, actual_max_y)
+        self.scroll_to (actual_min_x, actual_min_y)
+
+    def add_skyline (self, lines):
+        """Adds a skyline to the current canvas, in a new color.
+
+        The canvas will be rescaled, if necessary, to make room for the
+        new skyline."""
+        # Flip vertically, because goocanvas thinks higher numbers are
+        # further down, while lilypond thinks they're further up.
+        lines = [(x1, -y1, x2, -y2) for (x1, y1, x2, y2) in lines]
+
+        color = self.colors[self.cur_color_index]
+        self.cur_color_index = (self.cur_color_index + 1) % len (self.colors)
+
+        # Update the bounding box of the skylines.
+        x_vals = [s[0] for s in lines] + [s[2] for s in lines]
+        y_vals = [s[1] for s in lines] + [s[3] for s in lines]
+        self.x_min = min ([self.x_min] + x_vals)
+        self.x_max = max ([self.x_max] + x_vals)
+        self.y_min = min ([self.y_min] + y_vals)
+        self.y_max = max ([self.y_max] + y_vals)
+
+        # Add the lines to the canvas.
+        root = self.get_root_item ()
+        for (x1, y1, x2, y2) in lines:
+            goocanvas.polyline_new_line (root, x1, y1, x2, y2,
+                    stroke_color=color,
+                    line_width=0.05)
+        self.rescale (self.get_allocation ())
+
+# We want to run the gtk main loop in a separate thread so that
+# the main thread can be responsible for reading stdin.
+class SkylineWindowThread (Thread):
+    """A thread that runs a Gtk.Window displaying a skyline."""
+
+    def run (self):
+        gtk.gdk.threads_init ()
+        self.window = None
+        self.canvas = None
+        gtk.main ()
+
+    # This should only be called from the Gtk main loop.
+    def _destroy_window (self, window):
+        sys.exit (0)
+
+    # This should only be called from the Gtk main loop.
+    def _setup_window (self):
+        if self.window is None:
+            self.window = gtk.Window ()
+            self.canvas = GtkSkylineCanvas ()
+            self.window.add (self.canvas)
+            self.window.connect ("destroy", self._destroy_window)
+            self.window.show_all ()
+
+    # This should only be called from the Gtk main loop.
+    def _add_skyline (self, lines):
+        self._setup_window ()
+        self.canvas.add_skyline (lines)
+
+    def add_skyline (self, lines):
+        # Copy the lines, just in case someone modifies them.
+        gobject.idle_add (self._add_skyline, list (lines))
+
+thread = SkylineWindowThread ()
+thread.setDaemon (True)
+thread.start ()
+
+def lines(infile):
+    line = infile.readline()
+    while len(line) > 0:
+        yield line[:-1]
+        line = infile.readline()
+
+point_re_str = r'\(([a-z.0-9-]*) *,([a-z0-9.-]*)\)'
+line_re_str = point_re_str + r' +' + point_re_str
+line_re = re.compile (line_re_str)
+
+# The main loop just reads lines from stdin and feeds them to the
+# display.
+current_skyline = []
+for line in lines(sys.stdin):
+    if not line:
+        thread.add_skyline(current_skyline)
+        current_skyline = []
+        continue
+
+    m = re.search (line_re, line)
+    if m is None:
+        print('line did not match')
+    else:
+        pts = map(float, m.groups())
+        if not any(map(isinf, pts)):
+            current_skyline.append(pts)
index 10da1162c568cf6808baad254fe082c861d1ce5c..1d4a6e4ff378baa75e276c0276c4ec6d4969f5d4 100755 (executable)
@@ -1,16 +1,26 @@
 #!/usr/bin/env python
-import sys
 
-for fname in sys.argv[1:]:
-  fd = open(fname,mode='U') # open in universal newline mode
-  lines = []
-  for line in fd.readlines():
-      lines.append( line.rstrip() )
-  fd.close()
+# This script removes trailing whitespace from files.
+# It doesn't remove trailing newlines.
+# As a side-effect, it converts line endings to Unix-style (LF).
 
-  fd = open(fname,mode='w')
-  fd.seek(0)
-  for line in lines:
-      fd.write(line+'\n')
-  fd.close()
+import os, sys
 
+# Iterate through all arguments.  When the script is called
+# with a wildcard (for example 'remove-trailing-whitespace.py *'),
+# it's the *shell* that will expand the wildcard, and pass all
+# resulting paths as arguments to the script.
+
+for pathname in sys.argv[1:]:
+    if os.path.isfile(pathname):
+        fd = open(pathname,mode='U') # open in universal newline mode
+        lines = []
+        for line in fd.readlines():
+            lines.append( line.rstrip() )
+        fd.close()
+
+        fd = open(pathname,mode='w')
+        fd.seek(0)
+        for line in lines:
+            fd.write(line+'\n')
+        fd.close()
index 5407e1adfb6d489bfee26a42b5fa76bc98fc48bd..5a62a47a98f3814094adab057e805b5f75c6ad61 100644 (file)
@@ -2,8 +2,6 @@ depth = ../..
 
 STEPMAKE_TEMPLATES=script install po
 
-EXTRA_DIST_FILES = website-known-missing-files.txt
-
 include $(depth)/make/stepmake.make
 
 # Should we install these? This should be handled by sysadmin or
index 7d87e8b5d68e44dc937fb1a2467f9e28d14ce246..e7caa311610f8dc8f282b4099ce1459cf5e1f813 100644 (file)
@@ -38,6 +38,35 @@ done
 '''
 
 translations = {
+    'cs': {
+        'Source': 'Source',
+        'Learning': 'Učení',
+        'Music glossary': 'Slovníček',
+        'Essay': 'Článek',
+        'Notation': 'Notový zápis',
+        'Usage': 'Používání',
+        'Snippets': 'Úryvky',
+        'Web': 'Web',
+        'Changes': 'Změny',
+
+        'Extending': 'Rozšíření',
+        'Internals': 'Vnitřnosti',
+        'Contributor': 'Vývojářské',
+
+        ' (split HTML)': ' (rozdělené HTML)',
+        ' (big HTML)': ' (velké HTML)',
+
+        'Regression tests for ': 'Zkoušky regresí ',
+        'PDF of regtests for ': 'PDF zkoušky regresí ',
+        'abc2ly Regression tests for ': 'abc2ly zkoušky regresí ',
+        'PDF of abc2ly regtests for ': 'PDF abc2ly zkoušky regresí ',
+        'lilypond-book Regression tests for ': 'lilypond-book zkoušky regresí ',
+        'PDF of lilypond-book regtests for ': 'PDF lilypond-book zkoušky regresí ',
+        'MusicXML Regression tests for ': 'MusicXML zkoušky regresí ',
+        'PDF of MusicXML regtests for ': 'PDF MusicXML zkoušky regresí ',
+
+        'Doc tarball for ': 'Doc tarball for ',
+        },
     'de': {
         'Source': 'Quellen',
         'Learning': 'Einführung',
@@ -58,11 +87,14 @@ translations = {
 
         'Regression tests for ': 'Regressionstests für ',
         'PDF of regtests for ': 'PDF der Regressionstests für ',
+        'abc2ly Regression tests for ': 'abc2ly Regressionstests für ',
+        'PDF of abc2ly regtests for ': 'PDF der abc2ly Regressionstests für ',
+        'lilypond-book Regression tests for ': 'lilypond-book Regressionstests für ',
+        'PDF of lilypond-book regtests for ': 'PDF der lilypond-book Regressionstests für ',
         'MusicXML Regression tests for ': 'MusicXML Regressionstests für ',
         'PDF of MusicXML regtests for ': 'PDF der MusicXML Regressionstests für ',
 
         'Doc tarball for ': 'Dokumentation tar-gepackt für ',
-        ' (did not exist in 2.12)': ' (nicht existent in 2.12)',
         },
     'es': {
         'Source': 'Código fuente',
@@ -85,11 +117,14 @@ translations = {
 
         'Regression tests for ': 'Pruebas de regresión para ',
         'PDF of regtests for ': 'Pruebas en PDF para ',
+        'abc2ly Regression tests for ': 'Pruebas de regresión de abc2ly para ',
+        'PDF of abc2ly regtests for ': 'Pruebas de abc2ly en PDF para ',
+        'lilypond-book Regression tests for ': 'Pruebas de regresión de lilypond-book para ',
+        'PDF of lilypond-book regtests for ': 'Pruebas de lilypond-book en PDF para ',
         'MusicXML Regression tests for ': 'Pruebas de regresión de MusicXML para ',
         'PDF of MusicXML regtests for ': 'Pruebas de MusicXML en PDF para ',
 
         'Doc tarball for ': 'Tarball de la documentación para ',
-        ' (did not exist in 2.12)': ' (no existía en la versión 2.12)',
      },
     'fr': {
         'Source': 'Sources',
@@ -112,11 +147,14 @@ translations = {
 
         'Regression tests for ': 'Tests de régression pour ',
         'PDF of regtests for ': 'PDF des tests de régression pour ',
+        'abc2ly Regression tests for ': 'Tests de régression de abc2ly pour ',
+        'PDF of abc2ly regtests for ': 'PDF des tests de régression de abc2ly pour ',
+        'lilypond-book Regression tests for ': 'Tests de régression de lilypond-book pour ',
+        'PDF of lilypond-book regtests for ': 'PDF des tests de régression de lilypond-book pour ',
         'MusicXML Regression tests for ': 'Tests de régression de MusicXML pour ',
         'PDF of MusicXML regtests for ': 'PDF des tests de régression de MusicXML pour ',
 
         'Doc tarball for ': 'Archive de la documentation pour ',
-        ' (did not exist in 2.12)': ' (non disponible pour la version 2.12)',
         },
     'hu': {
         'Source': 'Forrás',
@@ -137,11 +175,43 @@ translations = {
 
         'Regression tests for ': 'Regressziós tesztek - verzió: ',
         'PDF of regtests for ': 'PDF formátumban - verzió: ',
+        'abc2ly Regression tests for ': 'abc2ly regressziós tesztek - verzió: ',
+        'PDF of abc2ly regtests for ': 'PDF formátumban - verzió: ',
+        'lilypond-book Regression tests for ': 'lilypond-book regressziós tesztek - verzió: ',
+        'PDF of lilypond-book regtests for ': 'PDF formátumban - verzió: ',
         'MusicXML Regression tests for ': 'MusicXML regressziós tesztek - verzió: ',
         'PDF of MusicXML regtests for ': 'PDF formátumban - verzió: ',
 
         'Doc tarball for ': 'Tömörített csomag - verzió: ',
-        ' (did not exist in 2.12)': ' (nem létezett a 2.12-es verzióban)',
+        },
+    'it': {
+        'Source': 'Sorgenti',
+        'Learning': 'Apprendimento',
+        'Music glossary': 'Glossario',
+        'Essay': 'Saggio',
+        'Notation': 'Notazione',
+        'Usage': 'Uso',
+        'Snippets': 'Frammenti',
+        'Web': 'Web',
+        'Changes': 'Cambiamenti',
+        'Extending': 'Estendere',
+        'Internals': 'Funzionamento interno',
+        'Contributor': 'Guida del collaboratore',
+
+# keep the spaces!
+        ' (split HTML)': ' (HTML multipagina)',
+        ' (big HTML)': ' (HTML pagina unica)',
+
+        'Regression tests for ': 'Test di collaudo per ',
+        'PDF of regtests for ': 'PDF dei test di collaudo per ',
+        'abc2ly Regression tests for ': 'Test di collaudo di abc2ly per ',
+        'PDF of abc2ly regtests for ': 'PDF dei test di collaudo di abc2ly per ',
+        'lilypond-book Regression tests for ': 'Test di collaudo di lilypond-book per ',
+        'PDF of lilypond-book regtests for ': 'PDF dei test di collaudo di lilypond-book per ',
+        'MusicXML Regression tests for ': 'Test di collaudo di MusicXML per ',
+        'PDF of MusicXML regtests for ': 'PDF dei test di collaudo di MusicXML per ',
+
+        'Doc tarball for ': 'Archivio della documentazione per ',
         },
     'ja': {
         'Source': 'ソース',
@@ -165,11 +235,14 @@ translations = {
 
         'Regression tests for ': '回帰テスト バージョン ',
         'PDF of regtests for ': '回帰テスト (PDF 版) バージョン ',
+        'abc2ly Regression tests for ': 'abc2ly 回帰テスト バージョン ',
+        'PDF of abc2ly regtests for ': 'abc2ly 回帰テスト (PDF 版) バージョン ',
+        'lilypond-book Regression tests for ': 'lilypond-book 回帰テスト バージョン ',
+        'PDF of lilypond-book regtests for ': 'lilypond-book 回帰テスト (PDF 版) バージョン ',
         'MusicXML Regression tests for ': 'MusicXML 回帰テスト バージョン ',
         'PDF of MusicXML regtests for ': 'MusicXML 回帰テスト (PDF 版) バージョン ',
 
         'Doc tarball for ': 'ドキュメント アーカイブ バージョン ',
-        ' (did not exist in 2.12)': ' (バージョン 2.12 には存在しません)',
 
         },
     'nl': {
@@ -193,11 +266,14 @@ translations = {
 
         'Regression tests for ': 'Regressietesten voor ',
         'PDF of regtests for ': 'PDF van regressietesten voor ',
+        'abc2ly Regression tests for ': 'abc2ly regressietesten voor ',
+        'PDF of abc2ly regtests for ': 'abc2ly regressietesten voor ',
+        'lilypond-book Regression tests for ': 'lilypond-book regressietesten voor ',
+        'PDF of lilypond-book regtests for ': 'lilypond-book regressietesten voor ',
         'MusicXML Regression tests for ': 'MusicXML regressietesten voor ',
         'PDF of MusicXML regtests for ': 'MusicXML regressietesten voor ',
 
         'Doc tarball for ': 'Tarball met documentation voor ',
-        ' (did not exist in 2.12)': ' (bestond nog niet in 2.12)',
      },
     'zh': {
         'Source': '源码',
@@ -220,11 +296,14 @@ translations = {
 
         'Regression tests for ': '回归测试 ',
         'PDF of regtests for ': '回归测试的 PDF ',
+        'abc2ly Regression tests for ': 'abc2ly 回归测试 ',
+        'PDF of abc2ly regtests for ': 'abc2ly 的 PDF 回归测试 ',
+        'lilypond-book Regression tests for ': 'lilypond-book 回归测试 ',
+        'PDF of lilypond-book regtests for ': 'lilypond-book 的 PDF 回归测试 ',
         'MusicXML Regression tests for ': 'MusicXML 回归测试 ',
         'PDF of MusicXML regtests for ': 'MusicXML 的 PDF 回归测试 ',
 
         'Doc tarball for ': '为文档压缩包',
-        ' (did not exist in 2.12)': ' (在 2.12 中不存在)',
         },
     }
 
@@ -275,11 +354,13 @@ for line in version_contents:
 VERSION = str(major)+'.'+str(minor)+'.'+str(patch)
 
 def _ (string, lang):
-    return translations.get (lang.split ('_')[0], {}).get (string, string)
+    return translations.get (lang.split ('_')[0], {}).get (string, None)
 
 getTrans = _
 # let's not barf, but print a warning when something's missing
 def getTrans(text, lang):
+    if not lang:
+        return text
     trans = _ (text, lang)
     if not trans:
         trans = text
@@ -287,7 +368,7 @@ def getTrans(text, lang):
     return trans
 
 def macroLang(name, lang):
-    if (lang != ''):
+    if lang:
         return name + '-' + lang
     return name
 
@@ -356,29 +437,7 @@ def translateNameToUrl(manual, version):
     ver_minor = ver_split[0] + '.' + ver_split[1]
     url = depth + "doc/v" + ver_minor + "/Documentation/"
 
-    if (ver_minor == '2.12'):
-        if (manual=='learning'):
-            return url+'user/lilypond-learning'
-        elif (manual=='internals'):
-            return url+'user/lilypond-internals'
-        elif (manual=='notation'):
-            return url+'user/lilypond'
-        elif (manual=='usage'):
-            return url+'user/lilypond-program'
-        elif (manual=='snippets'):
-            return url+'../input/lsr/lilypond-snippets'
-        elif (manual=='changes'):
-            return url+'topdocs/NEWS.html'
-        elif (manual=='music-glossary'):
-            return url+'user/music-glossary'
-        elif (manual=='essay'):
-            return url+'user/lilypond-learning/Background.html'
-        elif (manual=='extending'):
-            return url+'user/lilypond/Interfaces-for-programmers.html'
-        else:
-            return ''
-    else:
-        return url+manual
+    return url+manual
 
 def addLang(url, lang):
     if lang:
@@ -404,25 +463,6 @@ def make_manual_links(name, version, lang):
             manual = 'Music glossary'
         url = translateNameToUrl(m, version)
 
-        if (url == ''):
-            # can't have a comma here due to texinfo
-            make_ver_link(macroLang("manual"+name+mshort+'Pdf',lang),
-                "http://lilypond.org",
-                mshort+getTrans(" (did not exist in 2.12)",lang))
-            make_ver_link(macroLang("manual"+name+mshort+'Split',lang),
-                "http://lilypond.org",
-                mshort+getTrans(" (did not exist in 2.12)",lang))
-            make_ver_link(macroLang("manual"+name+mshort+'Big',lang),
-                "http://lilypond.org",
-                mshort+getTrans(" (did not exist in 2.12)",lang))
-            make_ver_link(macroLang("manual"+name+mshort+'SplitNoName',lang),
-                "http://lilypond.org",
-                mshort+getTrans(" (did not exist in 2.12)",lang))
-            continue
-        # this is stupid and I shouldn't have bothered trying
-        # to support the 2.12 docs and it will be deleted once
-        # 2.14 is out and the website won't be visible to users
-        # until 2.14 is out.  -gp
         if (url.endswith('.html')):
             make_ver_link(macroLang("manual"+name+mshort+'Pdf',lang),
                       addLang(url, lang),
@@ -493,7 +533,7 @@ def make_doctarball_links(name, version, lang):
         url, getTrans("Doc tarball for ", lang)+version)
 
 print "@c This file was autogenerated"
-print "@c     from: VERSION"
+print "@c     from: %s" % VERSION
 print "@c     by:   %s" % sys.argv[0]
 print ""
 print "@c ************************ Download binaries ************"
index dafb50c0ef4392a7fa13f1aae527ce72acd17be2..9f645b59295b8d797fc790af527d050a5f86da72 100644 (file)
@@ -85,8 +85,11 @@ Generate("%(filename)s-%(design_size)d.woff");
     open (path, 'w').write (script)
 
     subfonts = ['feta%(design_size)d',
-          'parmesan%(design_size)d',
-          'feta-alphabet%(design_size)d']
+                'feta-noteheads%(design_size)d',
+                'feta-flags%(design_size)d',
+                'parmesan%(design_size)d',
+                'parmesan-noteheads%(design_size)d',
+                'feta-alphabet%(design_size)d']
 
     ns = []
     for s in subfonts:
@@ -98,10 +101,10 @@ Generate("%(filename)s-%(design_size)d.woff");
 
     path = os.path.join (outdir, '%s-%d.dep' % (filename, design_size))
 
-    deps = r'''%(filename)s-%(design_size)d.otf: $(outdir)/feta%(design_size)d.pfa \
- $(outdir)/parmesan%(design_size)d.pfa  \
- $(outdir)/feta-alphabet%(design_size)d.pfa feta%(design_size)d.otf-table \
$(outdir)/feta-alphabet%(design_size)d.pfa feta%(design_size)d.otf-gtable
+    deps = r'''%(filename)s-%(design_size)d.otf: $(outdir)/feta%(design_size)d.pfb \
+ $(outdir)/parmesan%(design_size)d.pfb  \
+ $(outdir)/feta-alphabet%(design_size)d.pfb feta%(design_size)d.otf-table \
+ feta%(design_size)d.otf-gtable
 ''' % vars()
     open (path, 'w').write (deps)
 
diff --git a/scripts/build/install.py b/scripts/build/install.py
new file mode 100644 (file)
index 0000000..9818543
--- /dev/null
@@ -0,0 +1,95 @@
+#!@PYTHON@
+import string
+import getopt
+import sys
+import os
+import shutil
+(opts, args) = getopt.getopt (sys.argv[1:], 'b:cdg:m:o:st:', [])
+transform_base = None
+group = None
+owner = None
+transform = None
+mode = None 
+copy = False
+create_dir = False
+
+for (o,a) in opts:
+    if o == '-b':
+        transform_base = a
+    elif o == '-c':
+        copy = True
+    elif o == '-d':
+        create_dir = True
+    elif o == '-g':
+        group = a
+    elif o == '-m':
+        mode = string.atoi (a, 8)
+    elif o == '-o':
+        owner = a
+    elif o == '-s':
+        strip = True
+    elif o == '-t':
+        transform = a
+    elif o == '-h':
+        print ''' Usage: $0 [OPTION]... SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 -d DIRECTORIES...
+
+In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
+In the second, create the directory path DIR.
+
+Options:
+-b=TRANSFORMBASENAME
+-c         copy source (using $cpprog) instead of moving (using $mvprog).
+-d         create directories instead of installing files.
+-g GROUP   $chgrp installed files to GROUP.
+-m MODE    $chmod installed files to MODE.
+-o USER    $chown installed files to USER.
+-s         strip installed files (using $stripprog).
+-t=TRANSFORM
+--help     display this help and exit.
+--version  display version info and exit.'''
+        sys.exit (0)
+
+if not mode:
+    if create_dir:
+        mode = 0755
+    else:
+        mode = 0644
+        
+
+chown_me = []
+
+dest = None
+if not create_dir:
+    dest = args.pop()
+
+for f in args:
+    if create_dir:
+        if os.path.isdir (f):
+            continue
+        
+        os.makedirs (f, mode=mode)
+        chown_me.append (f)
+    else:
+        if copy:
+            if os.path.exists (dest) and not os.path.isdir (dest):
+                os.remove (dest)
+            shutil.copy2 (f, dest)
+        else:
+            shutil.move (f, dest)
+
+        if os.path.isdir (dest):
+            chown_me.append (os.path.join (dest, os.path.basename (f)))
+        else:
+            chown_me.append (dest)
+
+for f in chown_me:
+    os.chmod (f, mode)
+    if group <> None or owner <> None:
+        os.chown (f, group, owner)
+    
+    
+
+        
+
diff --git a/scripts/build/make-version.py b/scripts/build/make-version.py
new file mode 100644 (file)
index 0000000..4b6a0aa
--- /dev/null
@@ -0,0 +1,45 @@
+#!@PYTHON@
+import re
+import sys
+
+PROGRAM = sys.argv[0]
+VERSION = sys.argv[1]
+defs = []
+for i in open (VERSION).readlines ():
+    i = re.sub ('#.*','', i)
+    m  = re.search ('([^ =]*)[\t ]*=[ \t]*([^ \t]*)[ \t]*\n', i)
+    if m:
+        defs.append ((m.group (1), m.group (2)))
+
+sys.stdout.write (r'''
+/*
+ Automatically generated from %(VERSION)s
+ by %(PROGRAM)s.
+*/
+#ifndef VERSION_HH
+#define VERSION_HH
+''' % vars ())
+
+for name, expansion in defs:
+    # GUILE leaks autoconf data into userspace. 
+    sys.stdout.write (r'''
+#ifdef %(name)s
+#undef %(name)s
+#endif /* %(name)s */
+#define %(name)s "%(expansion)s"
+''' % vars ())
+    
+if ('MY_PATCH_LEVEL', '') in defs:
+    sys.stdout.write (r'''
+#define NO_MY_PATCHLEVEL
+#define TOPLEVEL_VERSION MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL
+''')
+else:
+    sys.stdout.write (r'''
+#define TOPLEVEL_VERSION MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL "." MY_PATCH_LEVEL
+''')
+
+sys.stdout.write(r'''
+#endif /* VERSION_HH */
+''')
+    
index 33b8dac467a7af4179361954868800caa912c488..7851353fe261eac8c827babb9cc0b02d007a15f2 100644 (file)
@@ -5,13 +5,26 @@
 #
 # create hard or symbolic links to SOURCEDIR/FILES in DESTDIR
 #
-# If --prepend-suffix is specified, link to foo.bar will be called fooSUFFIX.bar.
-# Shell wildcards expansion is performed on FILES.
+# If symbolic or hard links are not provided by the operating system,
+# copies will be made instead.  However, if the operating system
+# support symbolic or hard links, then this program expects to
+# operate on a filesystem which supports them too.
+#
+# If --prepend-suffix is specified, link to foo.bar will be called
+# fooSUFFIX.bar.  Shell wildcards expansion is performed on FILES.
+#
+# No check is performed on FILES type; in particular, if FILES
+# expansions contain a directory and hard links are requested,
+# this program may fail non-gracefully.
+#
+# Attempts to make hard links across different filesystems are
+# caught and replaced by copies.
 
 import sys
 import os
 import glob
 import getopt
+import shutil
 
 optlist, args = getopt.getopt (sys.argv[1:], '', ['prepend-suffix='])
 link_type, source_dir, dest_dir = args[0:3]
@@ -36,9 +49,15 @@ else:
     insert_suffix = lambda p: p
 
 if link_type == 'symbolic':
-    link = os.symlink
+    if hasattr (os, 'symlink'):
+        link = os.symlink
+    else:
+        link = shutil.copy
 elif link_type == 'hard':
-    link = os.link
+    if hasattr (os, 'link'):
+        link = os.link
+    else:
+        link = shutil.copy
 else:
     sys.stderr.write(sys.argv[0] + ': ' + link_type + ": wrong argument, expected 'symbolic' or 'hard'\n")
     sys.exit (1)
@@ -59,8 +78,14 @@ destdirs = set ([os.path.dirname (dest) for dest in destfiles])
 
 def force_link (src,dest):
     if os.path.exists (dest):
-        os.system ('rm -f ' + dest)
-    link (src, dest)
+        os.remove (dest)
+    try:
+        link (src, dest)
+    except OSError, e: # can't use "as" because GUB has python 2.4.5.
+        if e.errno == 18:
+            shutil.copy (src, dest)
+        else:
+            raise
     os.utime (dest, None)
 
 map (force_link, sourcefiles, destfiles)
index f191d0aa8fcc3a0941e01f8c4f829d5cd90a8e8f..7c193987ec51788b47fd22be28d101a57ccfe984 100644 (file)
@@ -264,6 +264,6 @@ for filenm in files:
     open (global_lisp_nm, 'w').write (global_lisp_table (g))
     if depfile_nm:
         open (depfile_nm, 'wb').write (get_deps (deps,
-                                                 [base + '.log', base + '.dvi', base + '.pfa',
+                                                 [base + '.log', base + '.dvi',
                                                   depfile_nm,
                                                   base + '.pfb']))
diff --git a/scripts/build/text2html.py b/scripts/build/text2html.py
new file mode 100644 (file)
index 0000000..2456202
--- /dev/null
@@ -0,0 +1,46 @@
+#!@PYTHON@
+import os
+import re
+import string
+import sys
+
+
+entities = {
+    "&" : 'amp',
+    "`" : 'apos',
+    '>' : 'gt',
+    '<' : 'lt',
+    '"' : 'quot',
+    }
+
+def txt2html (s):
+    for i in entities.keys ():
+        s = re.sub (i, '\001' + entities[i] + ';', s);
+    s = re.sub ('\001', '&', s);
+    return s
+
+for a in sys.argv[1:]:
+    # hmm, we need: text2html out/foe.txt -> out/foe.html,
+    # -o is a bit overkill?
+    # outfile = os.path.basename (os.path.splitext(a)[0]) + '.html'
+    outfile = os.path.splitext(a)[0] + '.html'
+    
+    try:
+      os.unlink(outfile)
+    except:
+      pass
+
+    s = r"""
+
+<html>
+<head>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
+</head>
+
+<body><pre>
+%s
+</pre></body></html>
+""" % txt2html (open (a).read ())
+    open (outfile, 'w').write (s)
+
+
index d002dac6f09e9eaed722e58cc4e47d3670141fff..317cf5ac9cd26dd2b6ba38bbfe764bb5f857090f 100644 (file)
@@ -206,9 +206,9 @@ urchinTracker();
         if (line.find("href=\"http://download.linuxaudio.org") >= 0):
             # TODO: more ugly hardcoding to make releases hard. :(
             if (line.find('2.16') >= 0):
-                line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.14\');\" href=')
+                line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.16\');\" href=')
             elif (line.find('2.17') >= 0):
-                line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.15\');\" href=')
+                line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.17\');\" href=')
         ### add language selection footer
         if (line.find("<div id=\"verifier_texinfo\">") >= 0):
             outfile.write("<div id=\"footer\">\n")
index d46f648cd5fef2a9e94a7c587fe7b198b8c181f3..8b4b262aaa6fd3c4b96b2a891f69ccaac598ecdf 100755 (executable)
@@ -84,8 +84,6 @@ else:
     in_name = sys.argv[1]
     out_name = sys.argv[2]
 
-    print "input file name",in_name
-    print "output file name",out_name
     in_file = open(in_name,'r')
     out_file= open(out_name, 'w')
 
index 2772acc7382c144590cb73ca2da6c3db58603059..ede9d4a98b81ea7309288364603c2a767cdca00a 100644 (file)
@@ -24,6 +24,7 @@
 import os
 import sys
 import re
+import shutil
 
 """
 @relocate-preamble@
@@ -45,6 +46,9 @@ lilypond_version_strict_re = re.compile (lilypond_version_strict_re_str)
 help_summary = (
 _ ('''Update LilyPond input to newer version.  By default, update from the
 version taken from the \\version command, to the current LilyPond version.''')
++ "\n"
++ _ ("If FILE is `-', read from standard input.")
++ "\n\n"
 + _ ("Examples:")
 + '''
   $ convert-ly -e old.ly
@@ -126,18 +130,25 @@ def get_option_parser ():
               action='store_true',
               dest='diff_version_update',
               default=False)
-    
+
     p.add_option ("-s", '--show-rules',
               help=_ ("show rules [default: -f 0, -t %s]") % program_version,
               dest='show_rules',
               action='store_true', default=False)
-    
+
     p.add_option ('-t', '--to',
               help=_ ("convert to VERSION [default: %s]") % program_version,
               metavar=_ ('VERSION'),
               action='store',
               dest="to_version",
               default='')
+
+    p.add_option ('-b', '--backup-numbered',
+              help=_ ("make a numbered backup [default: filename.ext~]"),
+              action='store_true',
+              dest="backup_numbered",
+              default='')
+
     p.add_option ('-w', '--warranty', help=_ ("show warranty and copyright"),
            action='store_true',
            ),
@@ -149,8 +160,6 @@ def get_option_parser ():
     
     return p
 
-
-
 def str_to_tuple (s):
     return tuple ([int(n) for n in s.split ('.')])
 
@@ -179,33 +188,36 @@ def show_rules (file, from_version, to_version):
 
 def do_conversion (str, from_version, to_version):
     """Apply conversions from FROM_VERSION to TO_VERSION.  Return
-tuple (LAST,STR), with the last successful conversion and the resulting
-string."""
+tuple (LAST,LASTCHANGED,STR,ERRORS), with the last applied conversion,
+the last conversion resulting in a change, the resulting
+string and the number of errors."""
     conv_list = get_conversions (from_version, to_version)
 
     ly.progress (_ ("Applying conversion: "), newline = False)
 
-    last_conversion = ()
+    last_conversion = None
+    last_change = None
+    errors = 0
     try:
-        if not conv_list:
-            last_conversion = to_version
         for x in conv_list:
             if x != conv_list[-1]:
                 ly.progress (tup_to_str (x[0]), newline = False)
                 ly.progress (', ', newline = False)
             else:
                 ly.progress (tup_to_str (x[0]))
-            str = x[1] (str)
+            newstr = x[1] (str)
             last_conversion = x[0]
+            if (newstr != str):
+                last_change = last_conversion
+            str = newstr
 
     except convertrules.FatalConversionError:
         ly.error (_ ("Error while converting")
                   + '\n'
                   + _ ("Stopping at last successful rule"))
+        errors += 1
 
-    return (last_conversion, str)
-
-
+    return (last_conversion, last_change, str, errors)
 
 def guess_lilypond_version (input):
     m = lilypond_version_strict_re.search (input)
@@ -227,8 +239,21 @@ class InvalidVersion (Exception):
     def __init__ (self, version):
       self.version = version
 
+def back_up (file, numbered):
+    if numbered:
+      n = 0
+      while True:
+        n = n + 1
+        back_up = file + '.~' + str(n) + '~'
+        if not os.path.exists (back_up):
+            break
+    else:
+      back_up = file + '~'
+    shutil.copy2 (file, back_up)
+    return back_up
+
 def do_one_file (infile_name):
-    ly.progress (_ ("Processing `%s\'... ") % infile_name, True)
+    ly.progress (_ (u"Processing `%s\'... ") % infile_name, True)
 
     if infile_name:
         infile = open (infile_name, 'r')
@@ -256,23 +281,29 @@ def do_one_file (infile_name):
         raise InvalidVersion (".".join ([str(n) for n in from_version]))
 
 
-    (last, result) = do_conversion (input, from_version, to_version)
+    (last, last_change, result, errors) = \
+        do_conversion (input, from_version, to_version)
 
+    if global_options.force_current_version and \
+            (last is None or last == to_version):
+        last = str_to_tuple (program_version)
     if last:
-        if global_options.force_current_version and last == to_version:
-            last = str_to_tuple (program_version)
-
         if global_options.diff_version_update:
+            # Note that last_change can be set even if the result is
+            # the same if two conversion rules cancelled out
             if result == input:
-                # check the y in x.y.z  (minor version number)
-                previous_stable = (last[0], 2*(last[1]/2), 0)
-                if ((last[0:2] != from_version[0:2]) and
-                    (previous_stable > from_version)):
-                    # previous stable version
-                    last = previous_stable
-                else:
-                    # make no (actual) change to the version number
-                    last = from_version
+                # make no (actual) change to the version number
+                last = from_version
+            else:
+                last = last_change
+                # If the last update was to an unstable version
+                # number, and the final update target is no longer in
+                # the same unstable series, we update to the stable
+                # series following the unstable version.
+                if last[1]%2: # unstable
+                    next_stable = (last[0], last[1]+1, 0)
+                    if next_stable <= to_version:
+                        last = next_stable
 
         newversion = r'\version "%s"' % tup_to_str (last)
         if lilypond_version_re.search (result):
@@ -281,23 +312,20 @@ def do_one_file (infile_name):
         elif not global_options.skip_version_add:
             result = newversion + '\n' + result
 
-        ly.progress ('\n')
-    
-        if global_options.edit:
-            try:
-                os.remove(infile_name + '~')
-            except:
-                pass
-            os.rename (infile_name, infile_name + '~')
-            outfile = open (infile_name, 'w')
-        else:
-            outfile = sys.stdout
-
+    ly.progress ('\n')
 
-        outfile.write (result)
+    if global_options.edit:
+        backup = back_up (infile_name, global_options.backup_numbered)
+        outfile = open (infile_name, 'w')
+    else:
+        outfile = sys.stdout
 
+    outfile.write (result)
+    
     sys.stderr.flush ()
 
+    return errors
+
 def do_options ():
     opt_parser = get_option_parser()
     (options, args) = opt_parser.parse_args ()
@@ -331,25 +359,32 @@ def main ():
 
     identify ()
 
+    errors = 0
     for f in files:
+        f = f.decode (sys.stdin.encoding or "utf-8")
         if f == '-':
             f = ''
         elif not os.path.isfile (f):
-            ly.error (_ ("%s: Unable to open file") % f)
-            if len (files) == 1:
-                sys.exit (1)
+            ly.error (_ (u"%s: Unable to open file") % f)
+            errors += 1
             continue
         try:
-            do_one_file (f)
+            errors += do_one_file (f)
         except UnknownVersion:
-            ly.error (_ ("%s: Unable to determine version.  Skipping") % f)
+            ly.error (_ (u"%s: Unable to determine version.  Skipping") % f)
+            errors += 1
         except InvalidVersion:
             # Compat code for 2.x and 3.0 syntax ("except .. as v" doesn't 
             # work in python 2.4!):
             t, v, b = sys.exc_info ()
-            ly.error (_ ("%s: Invalid version string `%s' \n"
+            ly.error (_ (u"%s: Invalid version string `%s' \n"
                          "Valid version strings consist of three numbers, "
                          "separated by dots, e.g. `2.8.12'") % (f, v.version) )
+            errors += 1
 
+    if errors:
+        ly.warning (ly.ungettext ("There was %d error.",
+            "There were %d errors.", errors) % errors)
+        sys.exit (1)
 
 main ()
index 0e7fb9c83e6fd9c7af8c33a83077680901646c05..bb61108383b95b7e1fe57104ccc550af9d175114 100644 (file)
@@ -576,7 +576,7 @@ class Staff:
                     last_time = g.timesig
 
                 if 'start' in g.repeats:
-                    e = e + ' \\bar "|:" ' 
+                    e = e + ' \\bar ".|:" '
 
 
                 # we don't attempt voltas since they fail easily.
@@ -608,7 +608,7 @@ class Staff:
             if g:
                 gap = rat_add (gap, g.length ())
                 if 'stop' in g.repeats:
-                    k = k + ' \\bar ":|" '
+                    k = k + ' \\bar ":|." '
                 
         k = '%sglobal = { %s }\n\n ' % (self.staffid (), k)
         return k
index 40047207ad311c2a26827d7628bc439a331eb25e..498682ef26bad2902abc22f1e4e4090e200567cd 100644 (file)
@@ -80,14 +80,27 @@ class meta_formatter (formatter):
      return str (val2);
 class tempo_formatter (formatter):
    def format_vals (self, val1, val2):
-     return str (val2) + " msec/quarter"
+    return str (ord (val2[0])*65536 + ord (val2[1])*256 + ord (val2[2])) \
+        + " msec/quarter"
 
 class time_signature_formatter (formatter):
    def format_vals (self, val1, val2 = ""):
-     return str (val2)   # TODO
+       from fractions import Fraction
+       # if there are more notated 32nd notes per midi quarter than 8,
+       # we display a fraction smaller than 1 as scale factor.
+       r = Fraction(8, ord (val2[3]))
+       if r == 1:
+           ratio =""
+       else:
+           ratio = " *" + str (r)
+       return str (ord (val2[0])) + "/" + str(1 << ord (val2[1])) + ratio \
+           + ", metronome "  + str (Fraction (ord (val2[2]), 96))
 class key_signature_formatter (formatter):
    def format_vals (self, val1, val2):
-     return str (val2)   # TODO
+       key_names = ['F', 'C', 'G', 'D', 'A', 'E', 'B']
+       key = (((ord(val2[0])+128)%256)-128) + ord(val2[1])*3 + 1;
+       return (key_names[key%7] + (key/7) * "is" + (-(key/7)) * "es"
+               + " " + ['major','minor'][ord(val2[1])])
 class channel_formatter (formatter):
    def __init__ (self, txt, ch):
      formatter.__init__ (self, txt)
index 1e0f7abf661d9ede9773e81d1277fdd91f6c57d7..8dea1fc1a795623d446582a690a4c625f9918f18 100644 (file)
@@ -277,6 +277,11 @@ if 'bindir' in globals () and bindir:
 if '@bindir@' == ('@' + 'bindir@') or not os.path.exists (lilypond_binary):
     lilypond_binary = 'lilypond'
 
+# Need to shell-quote, issue 3468
+
+import pipes
+lilypond_binary = pipes.quote (lilypond_binary)
+
 global_options = None
 
 
@@ -438,7 +443,10 @@ def split_output_files(directory):
     Return value is a set of strings.
     """
     files = []
-    for subdir in glob.glob (os.path.join (directory, '[a-f0-9][a-f0-9]')):
+    def globquote(x):
+        return re.sub ("[][*?]", r"[\g<0>]", x)
+    for subdir in glob.glob (os.path.join (globquote (directory),
+                                           '[a-f0-9][a-f0-9]')):
         base_subdir = os.path.split (subdir)[1]
         sub_files = [os.path.join (base_subdir, name)
                      for name in os.listdir (subdir)]
@@ -544,10 +552,12 @@ def do_file (input_filename, included=False):
         in_handle = file (input_fullname)
 
     if input_filename == '-':
+        global_options.input_dir = os.getcwd ()
         input_base = 'stdin'
     elif included:
         input_base = os.path.splitext (input_filename)[0]
     else:
+        global_options.input_dir = os.path.split (input_absname)[0]
         input_base = os.path.basename (
             os.path.splitext (input_filename)[0])
 
@@ -651,7 +661,7 @@ def do_options ():
     nr = 0
     for i in global_options.custom_packages:
         nr += 1
-        print imp.load_source ("book_custom_package%s" % nr, i)
+        progress (str(imp.load_source ("book_custom_package%s" % nr, i)))
 
 
     if global_options.warranty:
index fe1227cc1ba47ba22231d71f7e0564c6d259553e..49800c067fb3f01f9b17117b547b118603fb646e 100644 (file)
@@ -89,7 +89,7 @@ Options:
          uri))
 
 (define (is-textedit-uri? uri)
-  (string-match "^textedit://" uri))
+  (string-match "^textedit:" uri))
   
   
 (define (dissect-uri uri)
index 8738b2a073bc591281882f3a82cbe861636be311..ec827b5d3992ebabe4648ea973aff6d1ac8e1fac 100644 (file)
@@ -1167,7 +1167,7 @@ articulations_dict = {
     #"shake": "?",
     "snap-pizzicato": "snappizzicato",
     #"spiccato": "?",
-    "staccatissimo": (musicexp.ShortArticulationEvent, "|"), # or "staccatissimo"
+    "staccatissimo": (musicexp.ShortArticulationEvent, "!"), # or "staccatissimo"
     "staccato": (musicexp.ShortArticulationEvent, "."), # or "staccato"
     "stopped": (musicexp.ShortArticulationEvent, "+"), # or "stopped"
     #"stress": "?",
index 6dcb3ab37c4dec284fd812458a0a89d63dc94f06..6f4525dac19da80fea2617d4872e640ee2c9953b 100755 (executable)
@@ -3,7 +3,7 @@
 srcdir=${srcdir:-.}
 set -ux
 
-AUTOGEN_INPUT_CHECKSUM=`cat $srcdir/configure.in $srcdir/stepmake/aclocal.m4 | md5sum | cut -b 1-32`
+AUTOGEN_INPUT_CHECKSUM=`cat $srcdir/configure.ac $srcdir/aclocal.m4 | md5sum | cut -b 1-32`
 
 CHECKSUM_FILE=autogen.checksum
 
@@ -14,4 +14,3 @@ fi
 set -e
 ${srcdir}/autogen.sh "$@"
 printf "%s" $AUTOGEN_INPUT_CHECKSUM > $CHECKSUM_FILE
-
diff --git a/stepmake/GNUmakefile b/stepmake/GNUmakefile
deleted file mode 100644 (file)
index 8a3eb01..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*-Makefile-*-
-# title         specific top level makefile for StepMake
-
-# subdir level:
-#
-depth = ..
-
-# descent order into subdirectories:
-#
-SUBDIRS = bin stepmake
-
-# list of distribution files:
-#
-SCRIPTS =  aclocal.m4 autogen.sh
-README_FILES = README
-README_TXT_FILES =
-EXTRA_DIST_FILES = $(README_FILES)  $(SCRIPTS)
-NON_ESSENTIAL_DIST_FILES = $(README_TXT_FILES)
-#
-
-# bootstrap stepmake:
-#
-STEPMAKE_TEMPLATES= texinfo
-include $(depth)/make/stepmake.make
-
-# don't install stepmake
-install: local-install
-       @echo Not installing stepmake
-
-localclean:
-       rm -f bin/*.pyc
diff --git a/stepmake/INSTALL.texi b/stepmake/INSTALL.texi
deleted file mode 100644 (file)
index bfc62cf..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@setfilename INSTALL.info
-@settitle INSTALL
-
-@node Top, , , (dir)
-@top
-
-
-@unnumberedsec Name
-    
-
-INSTALL - installing StepMake
-
-@unnumberedsec Description
-    
-
-This page documents installation and usage of StepMake
-
-@unnumberedsec Abstract
-    
-
-StepMake is a drop-in package that takes care of generic Makefile and
-packaging/distribution issues.  It enables you to write only the simplest of
-Makefile snippets, while providing a series powerful make targets.  Features
-include speed, wildcarding, out/ dir build, stateless Makefiles and package
-clustering.  It includes some handy scripts for making (package-)diffs and
-patches, making binary distributions etc.
-
-To use StepMake with your package, you do something remotely like:
-@example 
-
-    tar xzf releases/stepmake-0.1.23
-    cd package-x.x.x/                 # package to be StepMake-ised
-    ./../stepmake-0.1.23/bin/stepmakeise.sh
-@end example 
-
-You'll have to customize at least the files:
-@example 
-
-    ./VERSION .
-    ./configure.in 
-@end example 
-
-to your package's needs.  You might want to take a look at:
-@example 
-
-    ./make/Toplevel.make.in
-    ./config.hh.in
-    ./config.make.in
-@end example 
-
-Also, you should put a Makefile in every subdirectory of your
-package.  These makefiles generally are quite simple, e.g. this 
-is a the makefile for an include directory of LilyPond:
-@example 
-
-    # lily/include/Makefile
-
-    depth = ../..
-    include $(depth)/make/Stepmake.make
-@end example 
-
-it will identify all @code{.h, .hh, ...} files and take care of distributing 
-them.
-
-There's a @file{make/Template.make} that you can use as an example.
-See also the Makefiles in the LilyPond or Yodl package.
-
-Once included in your package, StepMake (or in fact, any 
-StepMake-ised package) behaves as a normal subdirectory;
-make commands such as 'make dist' recurse into the stepmake tree
-(For a list of available targets, type @code{make help} after
-configuring).
-Stepmake (and any changes made) will be distributed with the main
-pacakage.  However, StepMake doesn't lose its independency, change
-to the stepmake directory, and it'll behave as a main package.
-You shouldn't version directory names of subpackages, otherwise
-you'll see that package twice in each patch when you upgrade.
-
-@unnumberedsec Prerequisites
-    
-
-To use StepMake with a package you need:
-
-@itemize @bullet
-@item A GNU system: StepMake is known to work on these GNU systems: Linux
-    (PPC, intel), FreeBSD, AIX, NeXTStep, IRIX, Digital Unix and Solaris.
-    If you have the Cygnus WINDOWS32 port of the GNU utils, it will even
-    work in Windows NT/95, but we don't promise to support it.
-@item GNU make 
-@item GNU autoconf
-@end itemize
-
-@unnumberedsec Recommended
-    
-
-Although not strictly necessary, these are recommended to have.
-
-@itemize @bullet
-@item Python
-@item Yodl.  All documentation will be in Yodl. (1.22.jcn3)
-@item GNU find
-@end itemize
-
-@unnumberedsec Internals
-    
-
-Over time, we put a lot of effort in the configure, make, distribute
-system (CMDS) for LilyPond.  Some months ago, we realised it was not
-standard GNU --- we require GNU make for building, and Python for extra
-scripting.  In an effort to be more GNU, we tried automake, but after two
-weeks we realised the costs were too high for us and we reverted to our
-own system (see @file{automake.urgh}).  Not long after that i was confronted
-with two other packages that lacked a decent CMDS.  I realised that Lily's
-would be perfect, it's modular and easy.  The only problem was to make a
-clean cut between generic and Lily specific stuff.  The result was
-StepMake: a bunch of generic makefiles, found in:
-@example 
-
-    stepmake/stepmake/*.make
-@end example 
-
-eneric helper scripts:
-@example 
-
-    stepmake/bin/*.sh
-    stepmake/bin/*.py
-@end example 
-
-and modular configure functions:
-@example 
-
-    stepmake/configure.in
-    stepmake/aclocal.m4
-    stepmake/config.hh.in
-    stepmake/config.make.in
-@end example 
-
-Of course, every package has its own configure- and make peculiarities.
-The best way to create the configure scripts is to copy them from
-stepmake@footnote{Actually, stepmake/bin/stepmakeise.sh will do
-that for you.} into you package's toplevel directory.  For most
-packages, you'll only have to comment in/out some functions in
-@file{configure.in}.
-
-Package specific makefiles go in:
-@example 
-
-    make/Targets.make
-    make/Rulese.make
-    make/Substitute.make
-@end example 
-
-and are included by the generic StepMake makefiles.
-
-@unnumberedsec Maintaining
-    
-
-If you want to make and manage (binary) distributions, create and apply
-patches, you'll need some framework that's outside of the package's
-sourcetree.
-For a number of simple  maintenance tasks, StepMake will therefore assume
-the following directory structure:
-
-Check and update the layout with the command:
-@example 
-
-    ./stepmake/bin/stepdirs.sh
-@end example 
-
-@unnumberedsec See also
-    
-
-@code{../PATCHES.txt}
-
-@unnumberedsec Configuring
-    
-
-Stepmake comes with a number of precooked configure functions for
-general needs, such as AC_STEPMAKE_COMPILE for simple C development
-and AC_STEPMAKE_CXX for C++.
-
-See configure.in and comment in/out the functions that your package
-needs.  For specific needs, you can write your own autoconf code,
-see @code{info autoconf}.
-
-@example 
-
-    doos/                        # gnu/windows32 build and binary releases
-    harmonia -> harmonia-x.y.z 
-    harmonia-x.y.z/
-    lilypond -> lilypond-x.y.z   # symlink to development directory
-    lilypond-x.y.z/              # current development
-    patches/                    # patches between different releases
-    RedHat/BUILD                 # RedHat build and binary releases
-    RedHat/RPMS
-    RedHat/SPECS
-    releases/                    # .tar.gz releases
-    test/                        # tarballs and diffs from current version
-    yodl -> yodl-1.30.17
-    yodl-1.30.17
-@end example 
-
-with prefix @file{$HOME/usr/src}
-and (for building rpms only) in @file{$HOME/.rpmrc}:
-@example 
-
-    topdir: /home/fred/usr/src/RedHat
-@end example 
-
-
-@unnumberedsec Authors
-
-@itemize @bullet
-@item @email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}, 
-    @uref{http://www.cs.uu.nl/people/hanwen}
-    @* 
-    Main author.
-
-@item @email{janneke@@gnu.org, Jan Nieuwenhuizen},
-    @uref{http://www.xs4all.nl/~jantien}
-    @* 
-    Main author.
-@item @email{daboys@@austin.rr.com, Jeffrey B. Reed},
-    Windows-nt fixes.
-@end itemize
-
-
-@bye
diff --git a/stepmake/README b/stepmake/README
deleted file mode 100644 (file)
index a29e0e5..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-StepMake
-
-This is a simple generic make package.
-It is being used by LilyPond and Harmonia
-(and StepMake itself, of course)
-
-You're looking at her embryonal state -- things are *supposed* 
-to be broken.
-
-Fixes/patches/suggestions appreciated.
-
-StepMake 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.
-
-Jan Nieuwenhuizen <janneke@gnu.org>
-ftp://pcnov095.win.tue.nl/pub/lilypond/development
-
diff --git a/stepmake/aclocal.m4 b/stepmake/aclocal.m4
deleted file mode 100644 (file)
index 682b6b1..0000000
+++ /dev/null
@@ -1,1292 +0,0 @@
-dnl aclocal.m4   -*-shell-script-*-
-dnl StepMake subroutines for configure.in
-
-
-### mostly interal macros
-
-# Get full path of executable ($1)
-AC_DEFUN(STEPMAKE_GET_EXECUTABLE, [
-    ## which doesn't work in ash, if /usr/bin/which isn't installed
-    ## type -p doesn't work in ash
-    ## command -v doesn't work in zsh
-    ## command -v "$1" 2>&1
-    ## this test should work in ash, bash, pdksh (ksh), zsh
-    type -p $1 2>/dev/null | tail -n 1 | awk '{print $NF}'
-])
-
-
-# Get version string from executable ($1)
-AC_DEFUN(STEPMAKE_GET_VERSION, [
-    ## "$1" --version 2>&1 | grep -v '^$' | head -n 1 | awk '{print $NF}'
-    ##
-    ## ARG.
-    ## Workaround for broken Debian gcc version string:
-    ##     gcc (GCC) 3.1.1 20020606 (Debian prerelease)
-    ##
-    ## -V: Workaround for python
-
-    changequote(<<, >>)#dnl
-
-    ## Assume and hunt for dotted version multiplet.
-    ## use eval trickery, because we cannot use multi-level $() instead of ``
-    ## for compatibility reasons.
-    
-    ## grab the first version number in  --version output.
-    eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 |
-               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
-               head -n 1 |
-               tr ' ' '\n' |
-               sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' |
-               grep -E '(^| )[0-9][0-9]*\.[0-9]' |
-               head -n 1\`\"
-
-    if test -z "$_ver"; then
-        ## If empty, try date [fontforge]
-        eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 | grep '[0-9]\{6,8\}' \
-           | head -n 1 \
-           | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\"
-    fi
-    echo "$_ver"
-    changequote([, ])#dnl
-])
-
-# Calculate simplistic numeric version from version string ($1)
-# As yet, we have no need for something more elaborate.
-AC_DEFUN(STEPMAKE_NUMERIC_VERSION, [
-    echo "$1" | awk -F. '
-    {
-      if ([$]3) {three = [$]3}
-      else {three = 0}
-    }
-    {printf "%.0f\n", [$]1*1000000 + [$]2*1000 + three}'
-])
-
-
-# Add item ($2) to list ($1, one of 'OPTIONAL', 'REQUIRED')
-AC_DEFUN(STEPMAKE_ADD_ENTRY, [
-    eval "$1"=\"`eval echo \"'$'$1\" \"$2\"`\"
-])
-
-# Check if tested program ($2) was found ($1).
-# If not, add entry to missing-list ($3, one of 'OPTIONAL', 'REQUIRED').
-# We could abort here if a 'REQUIRED' program is not found
-AC_DEFUN(STEPMAKE_OPTIONAL_REQUIRED, [
-    STEPMAKE_CHECK_SEARCH_RESULT($1)
-    if test $? -ne 0; then
-       STEPMAKE_ADD_ENTRY($3, $2)
-       if test "$3" = "REQUIRED"; then
-           command="echo ERROR: $2 not found"
-           # abort configure process here?
-       else
-           command="- echo $2 not found"
-       fi
-       eval "$1"='$command'
-       false
-    else
-       true
-    fi
-])
-
-
-# Return if tested proram ($1) was found (true) or not (false).
-AC_DEFUN(STEPMAKE_CHECK_SEARCH_RESULT, [
-    r="`eval echo '$'"$1"`"
-    if test -n "$r" -a "$r" != "error" -a "$r" != "no" && expr '`eval echo '$'"$1"`' : '.*\(echo\)' > /dev/null; then
-       true
-    else
-       ##STEPMAKE_WARN(cannot find $2. $3)
-       false
-    fi
-])
-
-
-# Check version of program ($1)
-# If version ($4: optional argument, supply if version cannot be
-# parsed using --version or -V ) is smaller than requested ($3), add
-# entry to missing-list ($2, one of 'OPTIONAL', 'REQUIRED').
-AC_DEFUN(STEPMAKE_CHECK_VERSION, [
-    r="`eval echo '$'"$1"`"
-    AC_MSG_CHECKING([$r version])
-    exe=`STEPMAKE_GET_EXECUTABLE($r)`
-    if test -n "$4"; then
-        ver="$4"
-    else
-        ver=`STEPMAKE_GET_VERSION($exe)`
-    fi
-    num=`STEPMAKE_NUMERIC_VERSION($ver)`
-    req=`STEPMAKE_NUMERIC_VERSION($3)`
-    AC_MSG_RESULT([$ver])
-    if test "$num" -lt "$req"; then
-       STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
-    fi
-    vervar="`echo $1 | tr '[a-z]' '[A-Z]'`_VERSION"
-    eval `echo $vervar=$num`
-##    AC_SUBST(`eval echo $vervar`)
-])
-
-# Check version of program ($1)
-# If version is greater than or equals unsupported ($3),
-# add entry to unsupported list ($2, 'UNSUPPORTED')
-AC_DEFUN(STEPMAKE_CHECK_VERSION_UNSUPPORTED, [
-    r="`eval echo '$'"$1"`"
-    AC_MSG_CHECKING([$r version])
-    exe=`STEPMAKE_GET_EXECUTABLE($r)`
-    ver=`STEPMAKE_GET_VERSION($exe)`
-    num=`STEPMAKE_NUMERIC_VERSION($ver)`
-    sup=`STEPMAKE_NUMERIC_VERSION($3)`
-    AC_MSG_RESULT([$ver])
-    if test "$num" -ge "$sup"; then
-       STEPMAKE_ADD_ENTRY($2, ["$r < $3 (installed: $ver)"])
-    fi
-])
-
-### Macros to build configure.in
-
-
-AC_DEFUN(STEPMAKE_BIBTEX2HTML, [
-    STEPMAKE_PROGS(BIBTEX2HTML, bibtex2html bib2html, $1)
-    if test "$BIBTEX2HTML" = "bib2html"; then
-       BIBTEX2HTML_FLAGS='$< $(@)'
-    else
-       BIBTEX2HTML_FLAGS='-o $(@D)/$(*F) $<'
-    fi
-    AC_SUBST(BIBTEX2HTML)
-    AC_SUBST(BIBTEX2HTML_FLAGS)
-])
-
-
-AC_DEFUN(STEPMAKE_BISON, [
-    # ugh, automake: we want (and check for) bison
-    AC_PROG_YACC
-    
-    STEPMAKE_PROGS(BISON, bison, $1)
-    
-    # urg.  should test functionality rather than version.
-    if test "$BISON" = "bison" -a -n "$2"; then
-       STEPMAKE_CHECK_VERSION(BISON, $1, $2)
-    fi
-])
-
-AC_DEFUN(STEPMAKE_COMPILE_BEFORE, [
-    # -O is necessary to get inlining
-    CFLAGS=${CFLAGS-""}
-    CXXFLAGS=${CXXFLAGS-$CFLAGS}
-    LDFLAGS=${LDFLAGS-""}
-    optimise_b=yes
-    profile_b=no
-    debug_b=yes
-    pipe_b=yes
-
-    AC_ARG_ENABLE(debugging,
-    [AS_HELP_STRING([--enable-debugging],
-                    [compile with debugging info.  Default: on])],
-    [debug_b=$enableval])
-
-    AC_ARG_ENABLE(optimising,
-    [AS_HELP_STRING([--enable-optimising],
-                    [compile with optimising.  Default: on])],
-    [optimise_b=$enableval])
-
-    AC_ARG_ENABLE(profiling, 
-    [AS_HELP_STRING([--enable-profiling],
-                    [compile with gprof support.  Default: off])],
-    [profile_b=$enableval])
-    
-    AC_ARG_ENABLE(pipe, 
-    [AS_HELP_STRING([--enable-pipe],
-                    [compile with -pipe.  Default: on])],
-    [pipe_b=$enableval])
-
-    if test "$optimise_b" = yes; then
-       AC_DEFINE(NDEBUG)
-       DEFINES="$DEFINES -DNDEBUG"
-       OPTIMIZE=" -O2 -finline-functions"
-    fi
-
-    if test $profile_b = yes; then
-       EXTRA_LIBS="-pg"
-       OPTIMIZE="$OPTIMIZE -pg"
-    fi
-
-    if test $debug_b = yes; then
-       OPTIMIZE="$OPTIMIZE -g"
-    fi
-])
-
-AC_DEFUN(STEPMAKE_COMPILE, [
-
-    AC_REQUIRE([STEPMAKE_COMPILE_BEFORE])
-    AC_REQUIRE([AC_PROG_CC])
-
-    STEPMAKE_OPTIONAL_REQUIRED(CC, cc, $1)
-    LD='$(CC)'
-    AC_SUBST(LD)
-
-    # If -pipe requested, test if it works and add to CFLAGS.
-    if test "$pipe_b" = yes; then
-       save_cflags="$CFLAGS"
-       CFLAGS=" -pipe $CFLAGS";
-       AC_CACHE_CHECK([whether compiler understands -pipe],
-           [stepmake_cv_cflags_pipe],
-           AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[/* -pipe test */]])],
-               [stepmake_cv_cflags_pipe=yes],
-               [stepmake_cv_cflags_pipe=no]))
-       CFLAGS=$save_cflags
-       if test $stepmake_cv_cflags_pipe = yes; then
-           OPTIMIZE="$OPTIMIZE -pipe"
-       fi
-    fi
-
-    CFLAGS="$CFLAGS $OPTIMIZE"
-    CPPFLAGS=${CPPFLAGS-""}
-
-    AC_MSG_CHECKING([for IEEE-conformance compiler flags])
-    save_cflags="$CFLAGS"
-    case "$host" in
-        alpha*-*-*)
-           dnl should do compile test?
-           AC_MSG_RESULT(-mieee)
-           CFLAGS=" -mieee $CFLAGS"
-           ;;
-       *)
-           AC_MSG_RESULT([none])
-           ;;
-    esac
-
-    AC_SUBST(cross_compiling)
-    AC_SUBST(CFLAGS)
-    AC_SUBST(CPPFLAGS)
-    AC_SUBST(LDFLAGS)
-    AC_SUBST(DEFINES)
-    AC_SUBST(EXTRA_LIBS)
-])
-
-AC_DEFUN(STEPMAKE_CXX, [
-    AC_PROG_CXX
-    STEPMAKE_OPTIONAL_REQUIRED(CXX, c++, $1)
-
-    CXXFLAGS="$CXXFLAGS $OPTIMIZE"
-    LD='$(CXX)'
-
-    AC_SUBST(CXX)
-    AC_SUBST(CXXFLAGS)
-    AC_SUBST(LD)
-])
-
-
-AC_DEFUN(STEPMAKE_CXXTEMPLATE, [
-    AC_CACHE_CHECK([whether explicit instantiation is needed],
-       stepmake_cv_need_explicit_instantiation,
-       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
-    template <class T> struct foo { static int baz; };
-    template <class T> int foo<T>::baz = 1;
-    ]], [[ return foo<int>::baz; ]])],[stepmake_cv_need_explicit_instantiation=no],[stepmake_cv_need_explicit_instantiation=yes]))
-    if test x"$stepmake_cv_need_explicit_instantiation"x = x"yes"x; then
-       AC_DEFINE(NEED_EXPLICIT_INSTANTIATION)
-    fi
-])
-
-AC_DEFUN(STEPMAKE_GXXCODEGENBUG, [
-    AC_MSG_CHECKING([options for known g++ bugs])
-    case "$GXX:$CXX_VERSION" in
-       yes:400600[[0-2]])
-           AC_MSG_RESULT([-fno-optimize-sibling-calls (tail call bug)])
-           CXXFLAGS="$CXXFLAGS -fno-optimize-sibling-calls"
-           ;;
-       yes:400700?)
-           AC_MSG_RESULT([-fno-tree-vrp (comparison bug)])
-           CXXFLAGS="$CXXFLAGS -fno-tree-vrp"
-           ;;
-       *) AC_MSG_RESULT([none])
-    esac
-    AC_SUBST(CXXFLAGS)
-])
-
-
-AC_DEFUN(STEPMAKE_DATADIR, [
-    if test "$datadir" = "\${prefix}/share"; then
-           datadir='${prefix}/share'
-    fi
-    presome=${prefix}
-    if test "$prefix" = "NONE"; then
-       presome=${ac_default_prefix}
-    fi
-    
-    build_package_datadir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/share/$package
-    
-    DATADIR=`echo ${datadir} | sed "s!\\\${datarootdir}!${prefix}/share!"`
-    DATADIR=`echo ${DATADIR} | sed "s!\\\${prefix}!$presome!"`
-    BUILD_PACKAGE_DATADIR=`echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!"`
-    
-    AC_SUBST(datadir)
-    AC_SUBST(datarootdir)
-    AC_SUBST(build_package_datadir)
-    AC_DEFINE_UNQUOTED(DATADIR, ["${DATADIR}"])
-    AC_DEFINE_UNQUOTED(BUILD_PACKAGE_DATADIR, ["${BUILD_PACKAGE_DATADIR}"])
-])
-
-## ugh: cut & paste programming from datadir. 
-AC_DEFUN(STEPMAKE_LIBDIR, [
-
-    if test "$libdir" = "\${exec_prefix}/lib"; then
-       libdir='${exec_prefix}/lib'
-    fi
-    presome=$exec_prefix
-    build_package_libdir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/lib/$package
-    
-    LIBDIR=`echo ${libdir} | sed "s!\\\${exec_prefix}!$presome!"`
-    BUILD_PACKAGE_LIBDIR=`echo ${build_package_libdir} | sed "s!\\\${exec_prefix}!$presome!"`
-    
-    AC_SUBST(libdir)
-    AC_SUBST(build_package_libdir)
-    AC_DEFINE_UNQUOTED(LIBDIR, ["${LIBDIR}"])
-    AC_DEFINE_UNQUOTED(BUILD_PACKAGE_LIBDIR, ["${BUILD_PACKAGE_LIBDIR}"])
-])
-
-
-AC_DEFUN(STEPMAKE_PREFIX_EXPAND_FIXUP, [
-    # undo expanding of explicit --infodir=/usr/share
-    # to ease install-time override with prefix=...
-    strip=`echo $includedir | eval sed s@^$prefix@@`
-    if test "$includedir" = "`eval echo $prefix$strip`"; then
-           includedir='${prefix}'$strip''
-    fi
-    strip=`echo $libdir | eval sed s@^$exec_prefix@@`
-    if test "$libdir" = "`eval echo $exec_prefix$strip`"; then
-           libdir='${exec_prefix}'$strip''
-    fi
-    strip=`echo $infodir | eval sed s@^$datarootdir@@`
-    if test "$infodir" = "`eval echo $datarootdir$strip`"; then
-           infodir='${datarootdir}'$strip''
-    fi
-    strip=`echo $mandir | eval sed s@^$datarootdir@@`
-    if test "$mandir" = "`eval echo $datarootdir$strip`"; then
-           mandir='${datarootdir}'$strip''
-    fi
-])
-
-
-AC_DEFUN(STEPMAKE_END, [
-    STEPMAKE_PREFIX_EXPAND_FIXUP
-
-    AC_SUBST(OPTIONAL)
-    AC_SUBST(REQUIRED)
-    
-    AC_CONFIG_FILES([$CONFIGFILE.make:config.make.in])
-    AC_OUTPUT
-    
-    if test -n "$OPTIONAL"; then
-       echo
-        echo "WARNING: Please consider installing optional programs: $OPTIONAL"
-    fi
-
-    if test -n "$REQUIRED"; then
-       echo
-        echo "ERROR: Please install required programs: $REQUIRED"
-    fi
-    
-    if test -n "$UNSUPPORTED"; then
-       echo
-        echo "ERROR: Please use older version of programs: $UNSUPPORTED"
-    fi
-    
-    if test -n "$OPTIONAL$REQUIRED$UNSUPPORTED"; then
-       echo
-       echo "See INSTALL.txt for more information on how to build $PACKAGE_NAME"
-       if test -f config.cache ; then
-           echo "Remove config.cache before rerunning ./configure"
-       fi 
-    fi
-    
-    if test -n "$REQUIRED$UNSUPPORTED"; then
-       rm -f $srcdir/GNUmakefile
-        exit 1
-    fi
-
-    # regular in-place build
-    # test for srcdir_build = yes ?
-    if test "$srcdir_build" = "yes"; then
-       rm -f $srcdir/GNUmakefile
-       cp $srcdir/GNUmakefile.in $srcdir/GNUmakefile
-       chmod 444 $srcdir/GNUmakefile
-    else
-       if test -f $srcdir/GNUmakefile; then
-           cat <<EOF
-Source directory already configured.  Please clean the source directory
-
-     make -C $srcdir distclean
-
-and rerun configure.
-EOF
-           exit 2
-       fi
-
-       abssrcdir="`cd $srcdir; pwd`"
-       absbuilddir="`pwd`"
-       for d in 2 3 4 5 ; do
-           for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name GNUmakefile`; do
-               case "$abssrcdir" in
-                   "$absbuilddir"/*)
-# source is below build directory, always copy
-                       ;;
-                   *)
-                       case "$abssrcdir/${mf#./}" in
-                           "$absbuilddir"/*)
-# find descended into build directory, don't copy
-                               continue
-                       esac
-               esac
-               mkdir -p ${mf%/*}
-               cat <<EOF | $PYTHON -  > $mf
-print 'depth=' + ('../' * ( $d-1 ) )
-print 'include \$(depth)/config\$(if \$(conf),-\$(conf),).make'
-print 'include \$(configure-srcdir)/$mf'
-print 'MODULE_INCLUDES += \$(src-dir)/\$(outbase)'
-EOF
-           done
-           for mf in `cd $srcdir ; find . -maxdepth $d -mindepth $d -name '*.make' | grep -v config.make `; do
-               case "$abssrcdir" in
-                   "$absbuilddir"/*)
-# source is below build directory, always copy
-                       ;;
-                   *)
-                       case "$abssrcdir/${mf#./}" in
-                           "$absbuilddir"/*)
-# find descended into build directory, don't copy
-                               continue
-                       esac
-               esac
-               mkdir -p ${mf%/*}
-               cat <<EOF | $PYTHON -  > $mf
-print 'include \$(depth)/config\$(if \$(conf),-\$(conf),).make'
-print 'include \$(configure-srcdir)/$mf'
-EOF
-           done
-       done
-
-       rm -f GNUmakefile
-       cat <<EOF > GNUmakefile
-depth = .
-include config\$(if \$(conf),-\$(conf),).make
-include \$(configure-srcdir)/GNUmakefile.in
-EOF
-       chmod 444 GNUmakefile
-       AC_SUBST(VPATH)
-    fi
-])
-
-
-AC_DEFUN(STEPMAKE_FLEX, [
-    # ugh, automake: we want (and check for) flex
-    # AC_PROG_LEX
-    # urg: automake 1.3: hope this doesn't break 1.2 ac_cv_pro_lex_root hack...
-
-    # AC_PROG_LEX()
-    # ugh, ugh
-    ac_cv_prog_lex_root=lex.yy
-    STEPMAKE_PROGS(FLEX, flex, $1)
-])
-
-
-AC_DEFUN(STEPMAKE_FLEXLEXER, [
-    AC_CHECK_HEADERS([FlexLexer.h],[true],[false])
-    if test $? -ne 0; then
-       warn='FlexLexer.h (flex package)'
-       STEPMAKE_ADD_ENTRY($1, $warn)
-    fi
-    # check for yyFlexLexer.yy_current_buffer,
-    # in 2.5.4 <= flex < 2.5.29
-    AC_CACHE_CHECK([for yyFlexLexer.yy_current_buffer],
-       [stepmake_cv_flexlexer_yy_current_buffer],
-       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-using namespace std;
-#include <FlexLexer.h>
-class yy_flex_lexer: public yyFlexLexer
-{
-  public:
-    yy_flex_lexer ()
-    {
-      yy_current_buffer = 0;
-    }
-};
-]])],
-           [stepmake_cv_flexlexer_yy_current_buffer=yes],
-           [stepmake_cv_flexlexer_yy_current_buffer=no]))
-    if test $stepmake_cv_flexlexer_yy_current_buffer = yes; then
-       AC_DEFINE(HAVE_FLEXLEXER_YY_CURRENT_BUFFER, 1, [Define to 1 if yyFlexLexer has yy_current_buffer.])
-    fi
-])
-  
-
-
-AC_DEFUN(STEPMAKE_FLEXLEXER_LOCATION, [
-       AC_MSG_CHECKING([FlexLexer.h location])
-
-       # ugh.
-       cat <<EOF > conftest.cc
-using namespace std;
-#include <FlexLexer.h>
-EOF
-       FLEXLEXER_FILE=`eval $ac_cpp conftest.cc | \
-         sed 's!# 1 "\(.*FlexLexer.h\)"!@FLEXLEXER@\1@@!g' | grep '@@' | \
-         sed 's!.*@FLEXLEXER@\(.*\)@@.*$!\1!g' ` 1> /dev/null 2> /dev/null
-       rm conftest.cc
-       AC_SUBST(FLEXLEXER_FILE)
-        AC_MSG_RESULT($FLEXLEXER_FILE)
-])
-
-AC_DEFUN(STEPMAKE_GCC_OR_CLANG, [
-    STEPMAKE_HAS_CLANG()
-    if test "$HAS_CLANG" = "no"; then
-        if test "$GCC" = "yes"; then
-            STEPMAKE_CHECK_VERSION(CC, $1, $2)
-        else
-           warn="$CC (Please install *GNU* cc)"
-           STEPMAKE_ADD_ENTRY($1, $warn)
-        fi
-    fi
-    # no else, we're fine with any clang
-])
-
-AC_DEFUN(STEPMAKE_GETTEXT, [
-    presome=${prefix}
-    if test "$prefix" = "NONE"; then
-           presome=${ac_default_prefix}
-    fi
-    LOCALEDIR=`echo ${localedir} | sed "s!\\\${prefix}!$presome!"`
-    
-    AC_SUBST(localedir)
-    AC_DEFINE_UNQUOTED(LOCALEDIR, ["${LOCALEDIR}"])
-    AC_CHECK_LIB(intl, gettext)
-    AC_CHECK_FUNCS(gettext)
-])
-
-
-AC_DEFUN(STEPMAKE_GUILE, [
-    STEPMAKE_PATH_PROG(GUILE, guile guile1, $1)
-])
-
-
-#   STEPMAKE_GUILE_FLAGS --- set flags for compiling and linking with Guile
-#
-#   This macro runs the guile-config script, installed with Guile,
-#   to find out where Guile's header files and libraries are
-#   installed.  It sets two variables, marked for substitution, as
-#   by AC_SUBST.
-#   
-#     GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
-#             code that uses Guile header files.  This is almost
-#             always just a -I flag.
-#   
-#     GUILE_LDFLAGS --- flags to pass to the linker to link a
-#             program against Guile.  This includes -lguile for
-#             the Guile library itself, any libraries that Guile
-#             itself requires (like -lqthreads), and so on.  It may
-#             also include a -L flag to tell the compiler where to
-#             find the libraries.
-
-AC_DEFUN([STEPMAKE_GUILE_FLAGS], [
-    exe=`STEPMAKE_GET_EXECUTABLE($guile_config)`
-    if test -x $exe; then
-       AC_MSG_CHECKING([guile compile flags])
-       GUILE_CFLAGS="`$guile_config compile`"
-       AC_MSG_RESULT($GUILE_CFLAGS)
-       AC_MSG_CHECKING([guile link flags])
-       GUILE_LDFLAGS="`$guile_config link`"
-       AC_MSG_RESULT($GUILE_LDFLAGS)
-    fi
-    AC_SUBST(GUILE_CFLAGS)
-    AC_SUBST(GUILE_LDFLAGS)
-])
-
-
-AC_DEFUN(STEPMAKE_GUILE_DEVEL, [
-    ## First, let's just see if we can find Guile at all.
-    test -n "$target_alias" && target_guile_config=$target_alias-guile-config
-    test -n "$host_alias" && host_guile_config=$host_alias-guile-config
-    AC_MSG_CHECKING([for guile-config])
-    for guile_config in $GUILE_CONFIG $target_guile_config $host_guile_config $build_guile_config guile-config guile1-config; do
-       AC_MSG_RESULT([$guile_config])
-       if ! $guile_config --version > /dev/null 2>&1 ; then
-           AC_MSG_WARN([cannot execute $guile_config])
-           AC_MSG_CHECKING([if we are cross compiling])
-           GUILE_CONFIG='echo no guile-config'
-       else
-           GUILE_CONFIG=$guile_config
-           break
-       fi
-    done
-    STEPMAKE_OPTIONAL_REQUIRED(GUILE_CONFIG, $guile_config, $1)
-    if test $? -ne 0; then
-        STEPMAKE_ADD_ENTRY($1, 'guile-config (guile-devel, guile-dev or libguile-dev package) or guile1-config (guile1-devel package)')
-    fi 
-
-    STEPMAKE_CHECK_SEARCH_RESULT(GUILE_CONFIG)
-    # urg.  should test functionality rather than version.
-    if test $? -eq 0 -a -n "$2"; then
-       STEPMAKE_CHECK_VERSION(GUILE_CONFIG, $1, $2)
-    fi
-
-    AC_SUBST(GUILE_CONFIG)
-    
-    guile_version="$ver"
-    changequote(<<, >>)#dnl
-    GUILE_MAJOR_VERSION=`expr $guile_version : '\([0-9]*\)'`
-    GUILE_MINOR_VERSION=`expr $guile_version : '[0-9]*\.\([0-9]*\)'`
-    GUILE_PATCH_LEVEL=`expr $guile_version : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
-    changequote([, ])#dnl
-    STEPMAKE_GUILE_FLAGS
-    save_CPPFLAGS="$CPPFLAGS"
-    save_LIBS="$LIBS"
-    CPPFLAGS="$GUILE_CFLAGS $CPPFLAGS"
-    LIBS="$GUILE_LDFLAGS $LIBS"
-    AC_CHECK_HEADERS([libguile.h])
-    AC_CHECK_LIB(guile, scm_boot_guile)
-    AC_CHECK_FUNCS(scm_boot_guile,,libguile_b=no)
-    if test "$libguile_b" = "no"; then
-           warn='libguile (libguile-dev, guile-devel or guile-dev
-   package).'
-           STEPMAKE_ADD_ENTRY(REQUIRED, $warn)
-    fi
-    CPPFLAGS="$save_CPPFLAGS"
-    LIBS="$save_LIBS"
-    AC_DEFINE_UNQUOTED(GUILE_MAJOR_VERSION, $GUILE_MAJOR_VERSION)
-    AC_DEFINE_UNQUOTED(GUILE_MINOR_VERSION, $GUILE_MINOR_VERSION)
-    AC_DEFINE_UNQUOTED(GUILE_PATCH_LEVEL, $GUILE_PATCH_LEVEL)
-])
-
-
-AC_DEFUN(STEPMAKE_DLOPEN, [
-    AC_CHECK_LIB(dl, dlopen)
-    AC_CHECK_FUNCS(dlopen)
-])
-
-AC_DEFUN(STEPMAKE_HAS_CLANG, [
-    AC_EGREP_CPP(yes,
-      [#ifdef __clang__
-       yes
-       #endif
-      ], HAS_CLANG=yes, HAS_CLANG=no)
-])
-
-AC_DEFUN(STEPMAKE_GXX_OR_CLANG, [
-    STEPMAKE_HAS_CLANG()
-    if test "$HAS_CLANG" = "no"; then
-        if test "$GXX" = "yes"; then
-            STEPMAKE_CHECK_VERSION(CXX, $1, $2)
-        else
-           warn="$CXX (Please install *GNU* c++)"
-           STEPMAKE_ADD_ENTRY($1, $warn)
-        fi
-    fi
-    # no else, we're fine with any clang
-])
-
-
-AC_DEFUN(STEPMAKE_INIT, [
-
-    . $srcdir/VERSION
-    FULL_VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL
-    MICRO_VERSION=$PATCH_LEVEL
-    TOPLEVEL_VERSION=$FULL_VERSION
-    if test x$MY_PATCH_LEVEL != x; then
-       FULL_VERSION=$FULL_VERSION.$MY_PATCH_LEVEL
-    fi
-    VERSION=$FULL_VERSION
-    export MAJOR_VERSION MINOR_VERSION PATCH_LEVEL
-    # urg: don't "fix" this: irix doesn't know about [:lower:] and [:upper:]
-    changequote(<<, >>)#dnl
-    PACKAGE=`echo $PACKAGE_NAME | tr '[a-z]' '[A-Z]'`
-    package=`echo $PACKAGE_NAME | tr '[A-Z]' '[a-z]'`
-    changequote([, ])#dnl
-
-    # No versioning on directory names of sub-packages 
-    # urg, urg
-    stepmake=${datadir}/stepmake
-    presome=${prefix}
-    if test "$prefix" = "NONE"; then
-           presome=${ac_default_prefix}
-    fi
-    stepmake=`echo ${stepmake} | sed "s!\\\${prefix}!$presome!"`
-
-    # urg, how is this supposed to work?
-    if test "$program_prefix" = "NONE"; then
-         program_prefix=
-    fi
-    if test "$program_suffix" = "NONE"; then
-         program_suffix=
-    fi
-
-    AC_MSG_CHECKING(Package)
-    if test "$PACKAGE" = "STEPMAKE"; then
-       AC_MSG_RESULT(Stepmake package!)
-
-       AC_MSG_CHECKING(builddir)
-
-       ugh_ugh_autoconf250_builddir="`pwd`"
-       
-       if test "$srcdir" = "."; then
-           srcdir_build=yes
-       else
-           srcdir_build=no
-           package_builddir="`dirname $ugh_ugh_autoconf250_builddir`"
-           package_srcdir="`dirname  $srcdir`"
-       fi
-       AC_MSG_RESULT($ugh_ugh_autoconf250_builddir)
-
-       (cd stepmake 2>/dev/null || mkdir stepmake)
-       (cd stepmake; rm -f bin; ln -s ../$srcdir/bin .)
-       stepmake=stepmake
-    else
-        AC_MSG_RESULT($PACKAGE)
-
-       AC_MSG_CHECKING(builddir)
-       ugh_ugh_autoconf250_builddir="`pwd`"
-
-       here_dir=$(cd . && pwd)
-       full_src_dir=$(cd $srcdir && pwd)
-
-       if test "$full_src_dir" = "$here_dir"; then
-           srcdir_build=yes
-       else
-           srcdir_build=no
-       fi
-       AC_MSG_RESULT($ugh_ugh_autoconf250_builddir)
-
-       AC_MSG_CHECKING(for stepmake)
-       # Check for installed stepmake
-       if test -d $stepmake; then
-           AC_MSG_RESULT($stepmake)
-       else
-           stepmake="`cd $srcdir/stepmake; pwd`"
-           AC_MSG_RESULT([$srcdir/stepmake  ($datadir/stepmake not found)])
-       fi
-    fi
-
-    AC_SUBST(ugh_ugh_autoconf250_builddir)
-
-    # Use absolute directory for non-srcdir builds, so that build
-    # dir can be moved.
-    if test "$srcdir_build" = "no" ;  then 
-       srcdir="`cd $srcdir; pwd`"
-    fi
-    
-    AC_SUBST(srcdir)
-    AC_SUBST(stepmake)
-    AC_SUBST(package)
-    AC_SUBST(PACKAGE)
-    AC_SUBST(PACKAGE_NAME)
-    AC_SUBST(VERSION)
-    AC_SUBST(MAJOR_VERSION)
-    AC_SUBST(MINOR_VERSION)
-    AC_SUBST(MICRO_VERSION)
-
-    # stepmake nonstandard names
-    AC_SUBST(PATCH_LEVEL)
-    AC_SUBST(TOPLEVEL_VERSION)
-    
-    # We don't need the upper case variant,
-    # so stick to macros are uppercase convention.
-    # AC_DEFINE_UNQUOTED(package, ["${package}"])
-    # AC_DEFINE_UNQUOTED(PACKAGE, ["${PACKAGE}"])
-    AC_DEFINE_UNQUOTED(PACKAGE, ["${package}"])
-    AC_DEFINE_UNQUOTED(PACKAGE_NAME, ["${PACKAGE_NAME}"])
-    AC_DEFINE_UNQUOTED(TOPLEVEL_VERSION, ["${FULL_VERSION}"])
-
-    if test -z "$package_depth"; then
-       package_depth="."
-    else
-       package_depth="../$package_depth"
-    fi
-    export package_depth
-    AC_SUBST(package_depth)
-
-    AUTOGENERATE="This file was automatically generated by configure"
-    AC_SUBST(AUTOGENERATE)
-
-    CONFIGSUFFIX=
-    AC_ARG_ENABLE(config,
-    [AS_HELP_STRING([--enable-config=CONF],
-                    [put settings in config-CONF.make and config-CONF.h;
-                   do `make conf=CONF' to get output in ./out-CONF])],
-    [CONFIGURATION=$enableval])
-
-    ##'`#
-
-    test -n "$CONFIGURATION" && CONFIGSUFFIX="-$CONFIGURATION"
-    CONFIGFILE=config$CONFIGSUFFIX
-    AC_SUBST(CONFIGSUFFIX)
-     
-    AC_CANONICAL_HOST
-    STEPMAKE_PROGS(MAKE, gmake make, REQUIRED)
-    STEPMAKE_PROGS(FIND, find, REQUIRED)
-
-    STEPMAKE_PROGS(TAR, tar, REQUIRED)
-
-    if test "$(echo 2)" != "2" ||
-       test "x`uname`" = "xHP-UX"; then
-       AC_PATH_PROG(KSH, ksh, /bin/ksh)
-       AC_PATH_PROG(BASH, bash, $KSH)
-       STEPMAKE_WARN(avoiding buggy /bin/sh)
-       AC_PATH_PROG(SHELL, bash, $KSH)
-    else
-       SHELL=/bin/sh
-       AC_PATH_PROG(BASH, bash, $SHELL)
-    fi
-    AC_SUBST(SHELL)
-
-    STEPMAKE_PYTHON(REQUIRED, 1.5)
-
-    if expr "$MAKE" : '.*\(echo\)' >/dev/null; then
-       $MAKE -v 2> /dev/null | grep GNU > /dev/null
-       if test "$?" = 1; then
-           warn='make (Please install *GNU* make)'
-           # STEPMAKE_WARN($warn)
-           STEPMAKE_ADD_ENTRY(REQUIRED, $warn)
-        fi
-    fi
-
-    ROOTSEP=':'
-    DIRSEP='/'
-    PATHSEP=':'
-    LN=ln
-    LN_S='ln -s'
-    ZIP="zip -r -9"
-
-    AC_SUBST(program_prefix)
-    AC_SUBST(program_suffix)
-    AC_SUBST(ZIP)
-    AC_SUBST(LN)
-    AC_SUBST(LN_S)
-    AC_DEFINE_UNQUOTED(DIRSEP, ['${DIRSEP}'])
-    AC_DEFINE_UNQUOTED(PATHSEP, ['${PATHSEP}'])
-    AC_SUBST(DIRSEP)
-    AC_SUBST(PATHSEP)
-    AC_SUBST(ROOTSEP)
-  
-    STEPMAKE_DATADIR
-    STEPMAKE_LIBDIR
-])
-
-    
-AC_DEFUN(STEPMAKE_LIB, [
-    STEPMAKE_PROGS(AR, ar, $1)
-    AC_PROG_RANLIB
-    STEPMAKE_OPTIONAL_REQUIRED(RANLIB, ranlib, $1)
-])
-
-
-AC_DEFUN(STEPMAKE_LIBTOOL, [
-    # libtool.info ...
-    # **Never** try to set library version numbers so that they correspond
-    # to the release number of your package.  This is an abuse that only
-    # fosters misunderstanding of the purpose of library versions.
-
-    REVISION=$PATCH_LEVEL
-    # CURRENT=$MINOR_VERSION
-    CURRENT=`expr $MINOR_VERSION + 1`
-    # AGE=`expr $MAJOR_VERSION + 1`
-    AGE=$MAJOR_VERSION
-    AC_SUBST(CURRENT)
-    AC_SUBST(REVISION)
-    AC_SUBST(AGE)
-])
-
-
-AC_DEFUN(STEPMAKE_LOCALE, [
-    lang=English
-    ALL_LINGUAS="en nl"
-
-    # with/enable ??
-    AC_ARG_WITH(localedir,
-    [AS_HELP_STRING([--with-localedir=DIR],
-                    [location of locales.  Default: PREFIX/share/locale])],
-    localedir=$with_localedir,
-    localedir='${prefix}/share/locale')
-
-    AC_ARG_WITH(lang,
-    [AS_HELP_STRING([--with-lang=LANG],
-                    [use LANG as language to emit messages])],
-    language=$with_lang,
-    language=English)
-
-    AC_MSG_CHECKING(language)    
-    case "$language" in
-      En* | en* | Am* | am* | US* | us*)
-           lang=English;;
-      NL | nl | Du* | du* | Ned* | ned*)
-           lang=Dutch;;
-      "")
-           lang=English;;
-      *)
-           lang=unknown;;
-    esac
-    AC_MSG_RESULT($lang)
-
-    if test "$lang" = "unknown" ; then
-       STEPMAKE_WARN($language not supported; available are: $ALL_LINGUAS)
-    fi
-
-])
-
-
-AC_DEFUN(STEPMAKE_MAKEINFO, [
-    STEPMAKE_PROGS(MAKEINFO, makeinfo, $1)
-])
-
-
-AC_DEFUN(STEPMAKE_MAN, [
-    STEPMAKE_PROGS(GROFF, groff ditroff, $1)
-    AC_SUBST(GROFF)
-    STEPMAKE_PROGS(TROFF, troff, $1)
-    AC_SUBST(TROFF)
-    STEPMAKE_PROGS(TBL, tbl, $1)
-    AC_SUBST(TBL)
-])
-
-
-AC_DEFUN(STEPMAKE_MSGFMT, [
-    STEPMAKE_PROGS(MSGFMT, msgfmt, $1)
-])
-
-
-# Check for program ($2), set full path result to ($1).
-# If missing, add entry to missing-list ($3, one of 'OPTIONAL', 'REQUIRED')
-AC_DEFUN(STEPMAKE_PATH_PROG, [
-    AC_CHECK_PROGS($1, $2, no)
-    STEPMAKE_OPTIONAL_REQUIRED($1, $2, $3)
-    if test $? -eq 0; then
-       AC_PATH_PROGS($1, $2)
-       if test -n "$4"; then
-           STEPMAKE_CHECK_VERSION($1, $3, $4)
-       fi
-    fi
-])
-
-
-# Check for program in set of names ($2), set result to ($1) .
-# If missing, add entry to missing-list ($3, one of 'OPTIONAL', 'REQUIRED')
-# If exists, and a minimal version ($4) is required
-AC_DEFUN(STEPMAKE_PROGS, [
-    AC_CHECK_PROGS($1, $2, no)
-    STEPMAKE_OPTIONAL_REQUIRED($1, $2, $3)
-    if test $? -eq 0 -a -n "$4"; then
-       STEPMAKE_CHECK_VERSION($1, $3, $4)
-    fi
-])
-
-
-AC_DEFUN(STEPMAKE_PERL, [
-    STEPMAKE_PATH_PROG(PERL, perl, $1)
-])
-
-
-AC_DEFUN(STEPMAKE_PYTHON, [
-    unset pv
-    AC_MSG_CHECKING([for python])
-    for python in $PYTHON python python2 python2.4 python2.3 python2.2 python2.1 python2.0; do
-       AC_MSG_RESULT([$python])
-       if ! $python -V > /dev/null 2>&1 ; then
-           #AC_MSG_WARN([cannot execute $python])
-           PYTHON='echo no python'
-       else
-           unset pv
-           STEPMAKE_CHECK_VERSION(python, pv, $2)
-           if test -z "$pv"; then
-               PYTHON=$python
-               break
-           fi
-       fi
-    done
-    if test -n "$pv"; then
-       STEPMAKE_ADD_ENTRY($1, $pv)
-    fi
-    # clear cached value since arg 2 might point us to a new binary
-    unset ac_cv_path_PYTHON
-
-    AC_PATH_PROG(PYTHON, $PYTHON)
-    AC_SUBST(PYTHON)
-])
-
-AC_DEFUN(STEPMAKE_PYTHON_DEVEL, [
-    AC_ARG_WITH(python-include,
-       [AS_HELP_STRING([--with-python-include=DIR],
-                       [location of the python include dir])],[
-       if test "$withval" = "yes" -o "$withval" = "no"; then
-           AC_MSG_WARN(Usage: --with-python-include=includedir)
-       else
-           PYTHON_CFLAGS="-I${withval}"
-       fi
-    ])
-    
-    AC_ARG_WITH(python-lib,
-       [AS_HELP_STRING([--with-python-lib=NAME],
-                       [name of the python lib])],[
-       if test "$withval" = "yes" -o "$withval" = "no"; then
-           AC_MSG_WARN(Usage: --with-python-lib=name)
-       else
-           LDFLAGS="$LDFLAGS -l${withval}"
-       fi
-    ])
-    
-    AC_CHECK_PROGS(PYTHON_CONFIG, python-config, no)
-
-    if test -z "$PYTHON_CFLAGS" -a "$PYTHON_CONFIG" != "no"; then
-        # Clean out junk: http://bugs.python.org/issue3290
-       # Python headers may need some -f* flags, leave them in.
-       # We want the sed commands to look like 's/-[WDOm][[:alnum:][:punct:]][[:alnum:][:punct:]]*//g' and 's/-arch [^[:space:]]*//g', but automake eats brackets.
-        #PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/-[[WDOm]][[[:alnum:][:punct:]]][[[:alnum:][:punct:]]]*//g' | sed -e 's/-arch @<:@^@<:@:space:@:>@@:>@*//g'`
-        # The above sed BRE matches parts of legal options, stipping down part of that option, resulting in invalid gcc arguments. Gentoo Bug #415793
-        # For instance, '-floop-stip-mime' becomes '-floop-strip', and '-fvect-cost-model' becomes '-fvect-cost'.
-        # Tentative fix to require a non alphanumeric character before the initial hyphen of the BRE or the hyphen being the first character in the string.
-        PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags | sed -e 's/\(^\|[[^[:alnum:]]]\)-[[WDOm]][[[:alnum:][:punct:]]][[[:alnum:][:punct:]]]*//g' | sed -e 's/-arch @<:@^@<:@:space:@:>@@:>@*//g'`
-       PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags`
-    fi
-    
-    if test -z "$PYTHON_CFLAGS" -a "$cross_compiling" = "no"; then
-       changequote(<<, >>)#dnl
-       # alternatively, for python >= 2.0
-       # 'import sys, distutils.sysconfig; sys.stdout.write (distutils.sysconfig.get_python_inc ())'
-       PYTHON_INCLUDE=`$PYTHON -c 'import sys; sys.stdout.write ("%s/include/python%s" % (sys.prefix, sys.version[:3]))'`
-       PYTHON_CFLAGS="-I$PYTHON_INCLUDE"
-       changequote([, ])#dnl
-    fi
-    
-    if test -z "$PYTHON_HEADER"; then
-       CPPFLAGS="$PYTHON_CFLAGS $CPPFLAGS"
-       AC_CHECK_HEADERS([Python.h],[PYTHON_HEADER=yes])
-    fi
-    
-    if test -z "$PYTHON_HEADER"; then
-       warn="Python.h (python-devel, python-dev or libpython-dev package)"
-       STEPMAKE_ADD_ENTRY($1, $warn)
-    fi
-])
-
-
-
-AC_DEFUN(STEPMAKE_STL_DATA_METHOD, [
-    AC_CACHE_CHECK([for stl.data () method],
-       [stepmake_cv_stl_data_method],
-       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#include <vector>
-using namespace std;
-vector <int> v;
-void *p = v.data ();
-]])],
-           [stepmake_cv_stl_data_method=yes],
-           [stepmake_cv_stl_data_method=no]))
-    if test $stepmake_cv_stl_data_method = yes; then
-       AC_DEFINE(HAVE_STL_DATA_METHOD, 1, [define if stl classes have data () method])
-    fi
-])
-
-
-AC_DEFUN(STEPMAKE_TEXMF_DIRS, [
-    # ugh
-    STEPMAKE_PROGS(KPSEWHICH, kpsewhich, OPTIONAL)
-])
-
-AC_DEFUN(STEPMAKE_TEXMF, [
-    STEPMAKE_PROGS(METAFONT, mf-nowin mf mfw mfont, $1)
-    STEPMAKE_PROGS(METAPOST, mpost, $1)
-
-    AC_MSG_CHECKING(for working metafont mode)
-    modelist='ljfour lj4 lj3 lj2 ljet laserjet'
-    for MFMODE in $modelist; do
-       $METAFONT -progname=mf "\mode:=$MFMODE; mode_setup; end." > /dev/null 2>&1
-       if test -f mfput.tfm; then
-           break;
-       fi
-    done
-    AC_MSG_RESULT($MFMODE)
-
-    rm -f mfput.*
-
-    AC_SUBST(MFMODE)
-])
-
-
-AC_DEFUN(STEPMAKE_WARN, [
-    AC_MSG_WARN($1)
-    warn_b=yes
-])
-
-
-dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
-dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
-dnl also defines GSTUFF_PKG_ERRORS on error
-AC_DEFUN(PKG_CHECK_MODULES, [
-  succeeded=no
-
-  if test -z "$PKG_CONFIG"; then
-    AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-  fi
-
-  if test "$PKG_CONFIG" = "no" ; then
-     echo "*** The pkg-config script could not be found. Make sure it is"
-     echo "*** in your path, or set the PKG_CONFIG environment variable"
-     echo "*** to the full path to pkg-config."
-     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-  else
-     PKG_CONFIG_MIN_VERSION=0.9.0
-     if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-        AC_MSG_CHECKING(for $2)
-
-        if $PKG_CONFIG --exists "$2" ; then
-            AC_MSG_RESULT(yes)
-            succeeded=yes
-
-            AC_MSG_CHECKING($1_CFLAGS)
-            $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
-            AC_MSG_RESULT($$1_CFLAGS)
-
-            AC_MSG_CHECKING($1_LIBS)
-            $1_LIBS=`$PKG_CONFIG --libs "$2"`
-            AC_MSG_RESULT($$1_LIBS)
-        else
-            $1_CFLAGS=""
-            $1_LIBS=""
-            ## If we have a custom action on failure, don't print errors, but 
-            ## do set a variable so people can do so.
-            $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
-            ifelse([$4], ,echo $$1_PKG_ERRORS,)
-        fi
-
-        AC_SUBST($1_CFLAGS)
-        AC_SUBST($1_LIBS)
-     fi
-  fi
-
-  if test $succeeded = yes; then
-     ifelse([$3], , :, [$3])
-  else
-     ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
-  fi
-])
-
-AC_DEFUN(STEPMAKE_FREETYPE2, [
-    PKG_CHECK_MODULES(FREETYPE2, $1 >= $3, have_freetype2=yes, true)
-    if test "$have_freetype2" = yes; then
-       AC_DEFINE(HAVE_FREETYPE2)
-        save_CPPFLAGS="$CPPFLAGS"
-        save_LIBS="$LIBS"
-       CPPFLAGS="$FREETYPE2_CFLAGS $CPPFLAGS"
-       LIBS="$FREETYPE2_LIBS $LIBS"
-       AC_SUBST(FREETYPE2_CFLAGS)
-       AC_SUBST(FREETYPE2_LIBS)
-       CPPFLAGS="$save_CPPFLAGS"
-       LIBS="$save_LIBS"
-    else
-       # UGR
-       #r="lib$1-dev or $1-devel"
-       r="libfreetype6-dev or freetype?-devel"
-       ver="`pkg-config --modversion $1`"
-       STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
-    fi
-])
-
-AC_DEFUN(STEPMAKE_PANGO, [
-    PKG_CHECK_MODULES(PANGO, $1 >= $3, have_pango16=yes, true)
-    if test "$have_pango16" = yes ; then
-       AC_DEFINE(HAVE_PANGO16)
-       # Do not pollute user-CPPFLAGS with configure-CPPFLAGS
-        save_CPPFLAGS="$CPPFLAGS"
-        save_LIBS="$LIBS"
-       CPPFLAGS="$PANGO_CFLAGS $CPPFLAGS"
-       LIBS="$PANGO_LIBS $LIBS"
-       AC_CHECK_HEADERS([pango/pangofc-fontmap.h])
-       AC_CHECK_FUNCS([pango_fc_font_map_add_decoder_find_func])
-       AC_SUBST(PANGO_CFLAGS)
-       AC_SUBST(PANGO_LIBS)
-       CPPFLAGS="$save_CPPFLAGS"
-       LIBS="$save_LIBS"
-    else
-       # UGR
-       #r="lib$1-dev or $1-devel"
-       r="libpango1.0-dev or pango1.0-devel"
-       ver="`pkg-config --modversion $1`"
-       STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
-    fi
-])
-
-AC_DEFUN(STEPMAKE_PANGO_FT2, [
-    PKG_CHECK_MODULES(PANGO_FT2, $1 >= $3, have_pangoft2=yes, true)
-    if test "$have_pangoft2" = yes ; then
-       AC_DEFINE(HAVE_PANGO16)
-       AC_DEFINE(HAVE_PANGO_FT2)
-       # Do not pollute user-CPPFLAGS with configure-CPPFLAGS
-        save_CPPFLAGS="$CPPFLAGS"
-        save_LIBS="$LIBS"
-       CPPFLAGS="$CPPFLAGS $PANGO_FT2_CFLAGS"
-       LIBS="$PANGO_FT2_LIBS $LIBS"
-       AC_CHECK_HEADERS([pango/pangoft2.h])
-       AC_CHECK_FUNCS([pango_ft2_font_map_create_context])
-       AC_SUBST(PANGO_FT2_CFLAGS)
-       AC_SUBST(PANGO_FT2_LIBS)
-       CPPFLAGS="$save_CPPFLAGS"
-       LIBS="$save_LIBS"
-    else
-       # UGR
-       #r="lib$1-dev or $1-devel"e
-       r="libpango1.0-dev or pango?-devel"
-       ver="`pkg-config --modversion $1`"
-       STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
-    fi
-])
-
-AC_DEFUN(STEPMAKE_FONTCONFIG, [
-    PKG_CHECK_MODULES(FONTCONFIG, $1 >= $3, have_fontconfig=yes, true)
-    if test "$have_fontconfig" = yes ; then
-       AC_DEFINE(HAVE_FONTCONFIG)
-       # Do not pollute user-CPPFLAGS with configure-CPPFLAGS
-        save_CPPFLAGS="$CPPFLAGS"
-        save_LIBS="$LIBS"
-       CPPFLAGS="$FONTCONFIG_CFLAGS $CPPFLAGS"
-       LIBS="$FONTCONFIG_LIBS $LIBS"
-       AC_SUBST(FONTCONFIG_CFLAGS)
-       AC_SUBST(FONTCONFIG_LIBS)
-       CPPFLAGS="$save_CPPFLAGS"
-       LIBS="$save_LIBS"
-    else
-       r="lib$1-dev or $1-devel"
-       ver="`pkg-config --modversion $1`"
-       STEPMAKE_ADD_ENTRY($2, ["$r >= $3 (installed: $ver)"])
-    fi
-])
-
-AC_DEFUN(STEPMAKE_WINDOWS, [
-    AC_CYGWIN
-    AC_MINGW32
-
-    if test "$CYGWIN" = "yes"; then
-       LN_S='cp -r' # Cygwin symbolic links do not work for native apps.
-       program_suffix=.exe
-       INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
-    elif test "$MINGW32" = "yes"; then
-       LN='cp -r'
-       LN_S='cp -r'
-       program_suffix=.exe
-       INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
-       PATHSEP=';'
-    fi
-
-    AC_SUBST(LN)
-    AC_SUBST(LN_S)
-    AC_DEFINE_UNQUOTED(DIRSEP, ['${DIRSEP}'])
-    AC_DEFINE_UNQUOTED(PATHSEP, ['${PATHSEP}'])
-    AC_SUBST(DIRSEP)
-    AC_SUBST(PATHSEP)
-    AC_SUBST(program_suffix)
-
-    AC_MSG_CHECKING([for some flavor of Windows])
-    if test "$CYGWIN$MINGW32" = "nono"; then
-        PLATFORM_WINDOWS=no
-    else
-        PLATFORM_WINDOWS=yes
-    fi
-    AC_MSG_RESULT([$PLATFORM_WINDOWS])
-    AC_SUBST(PLATFORM_WINDOWS)
-    STEPMAKE_PROGS(WINDRES, $target-windres windres, x)
-    AC_SUBST(WINDRES)
-])
diff --git a/stepmake/autogen.sh b/stepmake/autogen.sh
deleted file mode 100755 (executable)
index 34c022e..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/sh
-# Run this to generate configure and initial GNUmakefiles
-
-srcdir=`dirname $0`
-
-case $1 in
-    --noconf*) NOCONFIGURE=true;;
-esac
-
-if [ ! -f aclocal.m4 -o stepmake/aclocal.m4 -nt aclocal.m4 ]; then
-    echo "stepmake/aclocal.m4 is newer.  Copying file." 
-    cp -f stepmake/aclocal.m4 aclocal.m4
-fi
-
-if [ ! -f autogen.sh -o stepmake/autogen.sh -nt autogen.sh ]; then
-    echo "stepmake/autogen.sh is newer.  Copying file." 
-    cp -f stepmake/autogen.sh autogen.sh
-    exec ./autogen.sh "$@"
-fi
-
-for i in $srcdir/configure.in #`find $srcdir -name configure.in -print`
-do 
-  dir=`dirname $i`
-  echo processing $dir
-  (
-      cd $dir
-      echo "Running autoconf ..."
-      autoconf || exit 1
-  )
-  # Autoconf automatically checks its own minimum required
-  # version, and it aborts when the check fails.
-  test "$?" -eq 1 && exit 1
-done
-
-#conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
-if test -n "$NOCONFIGURE"; then
-    echo Skipping configure process.
-    exit 0
-fi
-
-if test -z "$*"; then
-    cat <<EOF
-    Warning: about to run \`configure' without arguments.
-    arguments on the \`$0' command line
-    will be passed to \`configure'.
-
-    Invoke with --noconfigure to skip configure step.
-EOF
-fi
-
-echo Running $srcdir/configure $conf_flags "$@" ...
-$srcdir/configure $conf_flags "$@"
diff --git a/stepmake/bin/GNUmakefile b/stepmake/bin/GNUmakefile
deleted file mode 100644 (file)
index 13b4d2a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# bin/Makefile
-
-depth = ../..
-EXTRA_DIST_FILES = install-sh config.sub config.guess
-STEPMAKE_TEMPLATES=script install
-
-include $(depth)/make/stepmake.make
-
-POST_INSTALL=chmod 755 $(datadir)/bin/*
-INSTALLATION_DIR=$(datadir)/bin
-INSTALLATION_FILES=$(DIST_FILES)
diff --git a/stepmake/bin/config.guess b/stepmake/bin/config.guess
deleted file mode 100755 (executable)
index 115f944..0000000
+++ /dev/null
@@ -1,1502 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-#   Free Software Foundation, Inc.
-
-timestamp='2010-04-03'
-
-# This file 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 2 of the License, or
-# (at your option) any later version.
-#
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner.  Please send patches (context
-# diff format) to <config-patches@gnu.org> and include a ChangeLog
-# entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )        # Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' HUP INT TERM
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-       for c in cc gcc c89 c99 ; do
-         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-            CC_FOR_BUILD="$c"; break ;
-         fi ;
-       done ;
-       if test x"$CC_FOR_BUILD" = x ; then
-         CC_FOR_BUILD=no_compiler_found ;
-       fi
-       ;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-       PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-       # NetBSD (nbsd) targets should (where applicable) match one or
-       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
-       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-       # switched to ELF, *-*-netbsd* would select the old
-       # object file format.  This provides both forward
-       # compatibility and a consistent mechanism for selecting the
-       # object file format.
-       #
-       # Note: NetBSD doesn't particularly care about the vendor
-       # portion of the name.  We always set it to "unknown".
-       sysctl="sysctl -n hw.machine_arch"
-       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-       case "${UNAME_MACHINE_ARCH}" in
-           armeb) machine=armeb-unknown ;;
-           arm*) machine=arm-unknown ;;
-           sh3el) machine=shl-unknown ;;
-           sh3eb) machine=sh-unknown ;;
-           sh5el) machine=sh5le-unknown ;;
-           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-       esac
-       # The Operating System including object format, if it has switched
-       # to ELF recently, or will in the future.
-       case "${UNAME_MACHINE_ARCH}" in
-           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-               eval $set_cc_for_build
-               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-                       | grep -q __ELF__
-               then
-                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-                   # Return netbsd for either.  FIX?
-                   os=netbsd
-               else
-                   os=netbsdelf
-               fi
-               ;;
-           *)
-               os=netbsd
-               ;;
-       esac
-       # The OS release
-       # Debian GNU/NetBSD machines have a different userland, and
-       # thus, need a distinct triplet. However, they do not need
-       # kernel version information, so it can be replaced with a
-       # suitable tag, in the style of linux-gnu.
-       case "${UNAME_VERSION}" in
-           Debian*)
-               release='-gnu'
-               ;;
-           *)
-               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-               ;;
-       esac
-       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-       # contains redundant information, the shorter form:
-       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-       echo "${machine}-${os}${release}"
-       exit ;;
-    *:OpenBSD:*:*)
-       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-       exit ;;
-    *:ekkoBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-       exit ;;
-    *:SolidBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-       exit ;;
-    macppc:MirBSD:*:*)
-       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
-       exit ;;
-    *:MirBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-       exit ;;
-    alpha:OSF1:*:*)
-       case $UNAME_RELEASE in
-       *4.0)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-               ;;
-       *5.*)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-               ;;
-       esac
-       # According to Compaq, /usr/sbin/psrinfo has been available on
-       # OSF/1 and Tru64 systems produced since 1995.  I hope that
-       # covers most systems running today.  This code pipes the CPU
-       # types through head -n 1, so we only detect the type of CPU 0.
-       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-       case "$ALPHA_CPU_TYPE" in
-           "EV4 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "EV4.5 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "LCA4 (21066/21068)")
-               UNAME_MACHINE="alpha" ;;
-           "EV5 (21164)")
-               UNAME_MACHINE="alphaev5" ;;
-           "EV5.6 (21164A)")
-               UNAME_MACHINE="alphaev56" ;;
-           "EV5.6 (21164PC)")
-               UNAME_MACHINE="alphapca56" ;;
-           "EV5.7 (21164PC)")
-               UNAME_MACHINE="alphapca57" ;;
-           "EV6 (21264)")
-               UNAME_MACHINE="alphaev6" ;;
-           "EV6.7 (21264A)")
-               UNAME_MACHINE="alphaev67" ;;
-           "EV6.8CB (21264C)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8AL (21264B)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8CX (21264D)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.9A (21264/EV69A)")
-               UNAME_MACHINE="alphaev69" ;;
-           "EV7 (21364)")
-               UNAME_MACHINE="alphaev7" ;;
-           "EV7.9 (21364A)")
-               UNAME_MACHINE="alphaev79" ;;
-       esac
-       # A Pn.n version is a patched version.
-       # A Vn.n version is a released version.
-       # A Tn.n version is a released field test version.
-       # A Xn.n version is an unreleased experimental baselevel.
-       # 1.2 uses "1.2" for uname -r.
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       exit ;;
-    Alpha\ *:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # Should we change UNAME_MACHINE based on the output of uname instead
-       # of the specific Alpha model?
-       echo alpha-pc-interix
-       exit ;;
-    21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
-       exit ;;
-    Amiga*:UNIX_System_V:4.0:*)
-       echo m68k-unknown-sysv4
-       exit ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-amigaos
-       exit ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-morphos
-       exit ;;
-    *:OS/390:*:*)
-       echo i370-ibm-openedition
-       exit ;;
-    *:z/VM:*:*)
-       echo s390-ibm-zvmoe
-       exit ;;
-    *:OS400:*:*)
-        echo powerpc-ibm-os400
-       exit ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-       echo arm-acorn-riscix${UNAME_RELEASE}
-       exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
-       echo arm-unknown-riscos
-       exit ;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-       echo hppa1.1-hitachi-hiuxmpp
-       exit ;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-       if test "`(/bin/universe) 2>/dev/null`" = att ; then
-               echo pyramid-pyramid-sysv3
-       else
-               echo pyramid-pyramid-bsd
-       fi
-       exit ;;
-    NILE*:*:*:dcosx)
-       echo pyramid-pyramid-svr4
-       exit ;;
-    DRS?6000:unix:4.0:6*)
-       echo sparc-icl-nx6
-       exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-       case `/usr/bin/uname -p` in
-           sparc) echo sparc-icl-nx7; exit ;;
-       esac ;;
-    s390x:SunOS:*:*)
-       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4H:SunOS:5.*:*)
-       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-       echo i386-pc-auroraux${UNAME_RELEASE}
-       exit ;;
-    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-       eval $set_cc_for_build
-       SUN_ARCH="i386"
-       # If there is a compiler, see if it is configured for 64-bit objects.
-       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-       # This test works for both compilers.
-       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-               grep IS_64BIT_ARCH >/dev/null
-           then
-               SUN_ARCH="x86_64"
-           fi
-       fi
-       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:6*:*)
-       # According to config.sub, this is the proper way to canonicalize
-       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-       # it's likely to be more like Solaris than SunOS4.
-       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:*:*)
-       case "`/usr/bin/arch -k`" in
-           Series*|S4*)
-               UNAME_RELEASE=`uname -v`
-               ;;
-       esac
-       # Japanese Language versions have a version number like `4.1.3-JL'.
-       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-       exit ;;
-    sun3*:SunOS:*:*)
-       echo m68k-sun-sunos${UNAME_RELEASE}
-       exit ;;
-    sun*:*:4.2BSD:*)
-       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-       case "`/bin/arch`" in
-           sun3)
-               echo m68k-sun-sunos${UNAME_RELEASE}
-               ;;
-           sun4)
-               echo sparc-sun-sunos${UNAME_RELEASE}
-               ;;
-       esac
-       exit ;;
-    aushp:SunOS:*:*)
-       echo sparc-auspex-sunos${UNAME_RELEASE}
-       exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-       exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-       exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
-    m68k:machten:*:*)
-       echo m68k-apple-machten${UNAME_RELEASE}
-       exit ;;
-    powerpc:machten:*:*)
-       echo powerpc-apple-machten${UNAME_RELEASE}
-       exit ;;
-    RISC*:Mach:*:*)
-       echo mips-dec-mach_bsd4.3
-       exit ;;
-    RISC*:ULTRIX:*:*)
-       echo mips-dec-ultrix${UNAME_RELEASE}
-       exit ;;
-    VAX*:ULTRIX*:*:*)
-       echo vax-dec-ultrix${UNAME_RELEASE}
-       exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-       echo clipper-intergraph-clix${UNAME_RELEASE}
-       exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-       int main (int argc, char *argv[]) {
-#else
-       int main (argc, argv) int argc; char *argv[]; {
-#endif
-       #if defined (host_mips) && defined (MIPSEB)
-       #if defined (SYSTYPE_SYSV)
-         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-       #endif
-       #if defined (SYSTYPE_SVR4)
-         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-       #endif
-       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-       #endif
-       #endif
-         exit (-1);
-       }
-EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c &&
-         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-         SYSTEM_NAME=`$dummy $dummyarg` &&
-           { echo "$SYSTEM_NAME"; exit; }
-       echo mips-mips-riscos${UNAME_RELEASE}
-       exit ;;
-    Motorola:PowerMAX_OS:*:*)
-       echo powerpc-motorola-powermax
-       exit ;;
-    Motorola:*:4.3:PL8-*)
-       echo powerpc-harris-powermax
-       exit ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-       echo powerpc-harris-powermax
-       exit ;;
-    Night_Hawk:Power_UNIX:*:*)
-       echo powerpc-harris-powerunix
-       exit ;;
-    m88k:CX/UX:7*:*)
-       echo m88k-harris-cxux7
-       exit ;;
-    m88k:*:4*:R4*)
-       echo m88k-motorola-sysv4
-       exit ;;
-    m88k:*:3*:R3*)
-       echo m88k-motorola-sysv3
-       exit ;;
-    AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
-       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-       then
-           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-              [ ${TARGET_BINARY_INTERFACE}x = x ]
-           then
-               echo m88k-dg-dgux${UNAME_RELEASE}
-           else
-               echo m88k-dg-dguxbcs${UNAME_RELEASE}
-           fi
-       else
-           echo i586-dg-dgux${UNAME_RELEASE}
-       fi
-       exit ;;
-    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
-       echo m88k-dolphin-sysv3
-       exit ;;
-    M88*:*:R3*:*)
-       # Delta 88k system running SVR3
-       echo m88k-motorola-sysv3
-       exit ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-       echo m88k-tektronix-sysv3
-       exit ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-       echo m68k-tektronix-bsd
-       exit ;;
-    *:IRIX*:*:*)
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-       exit ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-       echo i386-ibm-aix
-       exit ;;
-    ia64:AIX:*:*)
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
-       else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-       fi
-       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-       exit ;;
-    *:AIX:2:3)
-       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-               eval $set_cc_for_build
-               sed 's/^                //' << EOF >$dummy.c
-               #include <sys/systemcfg.h>
-
-               main()
-                       {
-                       if (!__power_pc())
-                               exit(1);
-                       puts("powerpc-ibm-aix3.2.5");
-                       exit(0);
-                       }
-EOF
-               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-               then
-                       echo "$SYSTEM_NAME"
-               else
-                       echo rs6000-ibm-aix3.2.5
-               fi
-       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-               echo rs6000-ibm-aix3.2.4
-       else
-               echo rs6000-ibm-aix3.2
-       fi
-       exit ;;
-    *:AIX:*:[456])
-       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-               IBM_ARCH=rs6000
-       else
-               IBM_ARCH=powerpc
-       fi
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
-       else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-       fi
-       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-       exit ;;
-    *:AIX:*:*)
-       echo rs6000-ibm-aix
-       exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-       echo romp-ibm-bsd4.4
-       exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-       exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-       echo rs6000-bull-bosx
-       exit ;;
-    DPX/2?00:B.O.S.:*:*)
-       echo m68k-bull-sysv3
-       exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-       echo m68k-hp-bsd
-       exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-       echo m68k-hp-bsd4.4
-       exit ;;
-    9000/[34678]??:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       case "${UNAME_MACHINE}" in
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
-           9000/[678][0-9][0-9])
-               if [ -x /usr/bin/getconf ]; then
-                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
-                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
-               fi
-               if [ "${HP_ARCH}" = "" ]; then
-                   eval $set_cc_for_build
-                   sed 's/^              //' << EOF >$dummy.c
-
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
-
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
-
-                  switch (cpu)
-               {
-               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-               case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-                   switch (bits)
-                       {
-                       case 64: puts ("hppa2.0w"); break;
-                       case 32: puts ("hppa2.0n"); break;
-                       default: puts ("hppa2.0"); break;
-                       } break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-                   puts ("hppa2.0"); break;
-              #endif
-               default: puts ("hppa1.0"); break;
-               }
-                  exit (0);
-              }
-EOF
-                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-                   test -z "$HP_ARCH" && HP_ARCH=hppa
-               fi ;;
-       esac
-       if [ ${HP_ARCH} = "hppa2.0w" ]
-       then
-           eval $set_cc_for_build
-
-           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-           # generating 64-bit code.  GNU and HP use different nomenclature:
-           #
-           # $ CC_FOR_BUILD=cc ./config.guess
-           # => hppa2.0w-hp-hpux11.23
-           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-           # => hppa64-hp-hpux11.23
-
-           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-               grep -q __LP64__
-           then
-               HP_ARCH="hppa2.0w"
-           else
-               HP_ARCH="hppa64"
-           fi
-       fi
-       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-       exit ;;
-    ia64:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       echo ia64-hp-hpux${HPUX_REV}
-       exit ;;
-    3050*:HI-UX:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #include <unistd.h>
-       int
-       main ()
-       {
-         long cpu = sysconf (_SC_CPU_VERSION);
-         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-            results, however.  */
-         if (CPU_IS_PA_RISC (cpu))
-           {
-             switch (cpu)
-               {
-                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-                 default: puts ("hppa-hitachi-hiuxwe2"); break;
-               }
-           }
-         else if (CPU_IS_HP_MC68K (cpu))
-           puts ("m68k-hitachi-hiuxwe2");
-         else puts ("unknown-hitachi-hiuxwe2");
-         exit (0);
-       }
-EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-               { echo "$SYSTEM_NAME"; exit; }
-       echo unknown-hitachi-hiuxwe2
-       exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-       echo hppa1.1-hp-bsd
-       exit ;;
-    9000/8??:4.3bsd:*:*)
-       echo hppa1.0-hp-bsd
-       exit ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-       echo hppa1.0-hp-mpeix
-       exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-       echo hppa1.1-hp-osf
-       exit ;;
-    hp8??:OSF1:*:*)
-       echo hppa1.0-hp-osf
-       exit ;;
-    i*86:OSF1:*:*)
-       if [ -x /usr/sbin/sysversion ] ; then
-           echo ${UNAME_MACHINE}-unknown-osf1mk
-       else
-           echo ${UNAME_MACHINE}-unknown-osf1
-       fi
-       exit ;;
-    parisc*:Lites*:*:*)
-       echo hppa1.1-hp-lites
-       exit ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-       echo c1-convex-bsd
-        exit ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-       if getsysinfo -f scalar_acc
-       then echo c32-convex-bsd
-       else echo c2-convex-bsd
-       fi
-        exit ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-       echo c34-convex-bsd
-        exit ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-       echo c38-convex-bsd
-        exit ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-       echo c4-convex-bsd
-        exit ;;
-    CRAY*Y-MP:*:*:*)
-       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*[A-Z]90:*:*:*)
-       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-             -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*TS:*:*:*)
-       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*T3E:*:*:*)
-       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*SV1:*:*:*)
-       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    *:UNICOS/mp:*:*)
-       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
-    5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-       exit ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-       exit ;;
-    sparc*:BSD/OS:*:*)
-       echo sparc-unknown-bsdi${UNAME_RELEASE}
-       exit ;;
-    *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-       exit ;;
-    *:FreeBSD:*:*)
-       case ${UNAME_MACHINE} in
-           pc98)
-               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-           amd64)
-               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-           *)
-               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-       esac
-       exit ;;
-    i*:CYGWIN*:*)
-       echo ${UNAME_MACHINE}-pc-cygwin
-       exit ;;
-    *:MINGW*:*)
-       echo ${UNAME_MACHINE}-pc-mingw32
-       exit ;;
-    i*:windows32*:*)
-       # uname -m includes "-pc" on this system.
-       echo ${UNAME_MACHINE}-mingw32
-       exit ;;
-    i*:PW*:*)
-       echo ${UNAME_MACHINE}-pc-pw32
-       exit ;;
-    *:Interix*:*)
-       case ${UNAME_MACHINE} in
-           x86)
-               echo i586-pc-interix${UNAME_RELEASE}
-               exit ;;
-           authenticamd | genuineintel | EM64T)
-               echo x86_64-unknown-interix${UNAME_RELEASE}
-               exit ;;
-           IA64)
-               echo ia64-unknown-interix${UNAME_RELEASE}
-               exit ;;
-       esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-       echo i${UNAME_MACHINE}-pc-mks
-       exit ;;
-    8664:Windows_NT:*)
-       echo x86_64-pc-mks
-       exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-       # UNAME_MACHINE based on the output of uname instead of i386?
-       echo i586-pc-interix
-       exit ;;
-    i*:UWIN*:*)
-       echo ${UNAME_MACHINE}-pc-uwin
-       exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-       echo x86_64-unknown-cygwin
-       exit ;;
-    p*:CYGWIN*:*)
-       echo powerpcle-unknown-cygwin
-       exit ;;
-    prep*:SunOS:5.*:*)
-       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    *:GNU:*:*)
-       # the GNU system
-       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-       exit ;;
-    *:GNU/*:*:*)
-       # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-       exit ;;
-    i*86:Minix:*:*)
-       echo ${UNAME_MACHINE}-pc-minix
-       exit ;;
-    alpha:Linux:*:*)
-       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-         EV5)   UNAME_MACHINE=alphaev5 ;;
-         EV56)  UNAME_MACHINE=alphaev56 ;;
-         PCA56) UNAME_MACHINE=alphapca56 ;;
-         PCA57) UNAME_MACHINE=alphapca56 ;;
-         EV6)   UNAME_MACHINE=alphaev6 ;;
-         EV67)  UNAME_MACHINE=alphaev67 ;;
-         EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-       objdump --private-headers /bin/sh | grep -q ld.so.1
-       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-       exit ;;
-    arm*:Linux:*:*)
-       eval $set_cc_for_build
-       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-           | grep -q __ARM_EABI__
-       then
-           echo ${UNAME_MACHINE}-unknown-linux-gnu
-       else
-           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
-       fi
-       exit ;;
-    avr32*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    cris:Linux:*:*)
-       echo cris-axis-linux-gnu
-       exit ;;
-    crisv32:Linux:*:*)
-       echo crisv32-axis-linux-gnu
-       exit ;;
-    frv:Linux:*:*)
-       echo frv-unknown-linux-gnu
-       exit ;;
-    i*86:Linux:*:*)
-       LIBC=gnu
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #ifdef __dietlibc__
-       LIBC=dietlibc
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
-       echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-       exit ;;
-    ia64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    m32r*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    m68*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    mips:Linux:*:* | mips64:Linux:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #undef CPU
-       #undef ${UNAME_MACHINE}
-       #undef ${UNAME_MACHINE}el
-       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=${UNAME_MACHINE}el
-       #else
-       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=${UNAME_MACHINE}
-       #else
-       CPU=
-       #endif
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-       ;;
-    or32:Linux:*:*)
-       echo or32-unknown-linux-gnu
-       exit ;;
-    padre:Linux:*:*)
-       echo sparc-unknown-linux-gnu
-       exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-gnu
-       exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-       # Look for CPU level
-       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-         PA7*) echo hppa1.1-unknown-linux-gnu ;;
-         PA8*) echo hppa2.0-unknown-linux-gnu ;;
-         *)    echo hppa-unknown-linux-gnu ;;
-       esac
-       exit ;;
-    ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-gnu
-       exit ;;
-    ppc:Linux:*:*)
-       echo powerpc-unknown-linux-gnu
-       exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-       echo ${UNAME_MACHINE}-ibm-linux
-       exit ;;
-    sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    sh*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    vax:Linux:*:*)
-       echo ${UNAME_MACHINE}-dec-linux-gnu
-       exit ;;
-    x86_64:Linux:*:*)
-       echo x86_64-unknown-linux-gnu
-       exit ;;
-    xtensa*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    i*86:DYNIX/ptx:4*:*)
-       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-       # earlier versions are messed up and put the nodename in both
-       # sysname and nodename.
-       echo i386-sequent-sysv4
-       exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
-       # I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
-       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-       exit ;;
-    i*86:OS/2:*:*)
-       # If we were able to find `uname', then EMX Unix compatibility
-       # is probably installed.
-       echo ${UNAME_MACHINE}-pc-os2-emx
-       exit ;;
-    i*86:XTS-300:*:STOP)
-       echo ${UNAME_MACHINE}-unknown-stop
-       exit ;;
-    i*86:atheos:*:*)
-       echo ${UNAME_MACHINE}-unknown-atheos
-       exit ;;
-    i*86:syllable:*:*)
-       echo ${UNAME_MACHINE}-pc-syllable
-       exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-       echo i386-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    i*86:*DOS:*:*)
-       echo ${UNAME_MACHINE}-pc-msdosdjgpp
-       exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-       else
-               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-       fi
-       exit ;;
-    i*86:*:5:[678]*)
-       # UnixWare 7.x, OpenUNIX and OpenServer 6.
-       case `/bin/uname -X | grep "^Machine"` in
-           *486*)           UNAME_MACHINE=i486 ;;
-           *Pentium)        UNAME_MACHINE=i586 ;;
-           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-       esac
-       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-       exit ;;
-    i*86:*:3.2:*)
-       if test -f /usr/options/cb.name; then
-               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-       elif /bin/uname -X 2>/dev/null >/dev/null ; then
-               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-                       && UNAME_MACHINE=i586
-               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-       else
-               echo ${UNAME_MACHINE}-pc-sysv32
-       fi
-       exit ;;
-    pc:*:*:*)
-       # Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i586.
-       # Note: whatever this is, it MUST be the same as what config.sub
-       # prints for the "djgpp" host, or else GDB configury will decide that
-       # this is a cross-build.
-       echo i586-pc-msdosdjgpp
-        exit ;;
-    Intel:Mach:3*:*)
-       echo i386-pc-mach3
-       exit ;;
-    paragon:*:*:*)
-       echo i860-intel-osf1
-       exit ;;
-    i860:*:4.*:*) # i860-SVR4
-       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-       else # Add other i860-SVR4 vendors below as they are discovered.
-         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-       fi
-       exit ;;
-    mini*:CTIX:SYS*5:*)
-       # "miniframe"
-       echo m68010-convergent-sysv
-       exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-       echo m68k-convergent-sysv
-       exit ;;
-    M680?0:D-NIX:5.3:*)
-       echo m68k-diab-dnix
-       exit ;;
-    M68*:*:R3V[5678]*:*)
-       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-       OS_REL=''
-       test -r /etc/.relid \
-       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
-    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-       OS_REL='.3'
-       test -r /etc/.relid \
-           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-       echo m68k-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-       echo m68k-atari-sysv4
-       exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-       echo sparc-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    rs6000:LynxOS:2.*:*)
-       echo rs6000-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-       echo powerpc-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-       echo mips-dde-sysv${UNAME_RELEASE}
-       exit ;;
-    RM*:ReliantUNIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
-    RM*:SINIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
-    *:SINIX-*:*:*)
-       if uname -p 2>/dev/null >/dev/null ; then
-               UNAME_MACHINE=`(uname -p) 2>/dev/null`
-               echo ${UNAME_MACHINE}-sni-sysv4
-       else
-               echo ns32k-sni-sysv
-       fi
-       exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
-    *:UNIX_System_V:4*:FTX*)
-       # From Gerald Hewes <hewes@openmarket.com>.
-       # How about differentiating between stratus architectures? -djm
-       echo hppa1.1-stratus-sysv4
-       exit ;;
-    *:*:*:FTX*)
-       # From seanf@swdc.stratus.com.
-       echo i860-stratus-sysv4
-       exit ;;
-    i*86:VOS:*:*)
-       # From Paul.Green@stratus.com.
-       echo ${UNAME_MACHINE}-stratus-vos
-       exit ;;
-    *:VOS:*:*)
-       # From Paul.Green@stratus.com.
-       echo hppa1.1-stratus-vos
-       exit ;;
-    mc68*:A/UX:*:*)
-       echo m68k-apple-aux${UNAME_RELEASE}
-       exit ;;
-    news*:NEWS-OS:6*:*)
-       echo mips-sony-newsos6
-       exit ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-       if [ -d /usr/nec ]; then
-               echo mips-nec-sysv${UNAME_RELEASE}
-       else
-               echo mips-unknown-sysv${UNAME_RELEASE}
-       fi
-        exit ;;
-    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
-       echo powerpc-be-beos
-       exit ;;
-    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
-       echo powerpc-apple-beos
-       exit ;;
-    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
-       echo i586-pc-beos
-       exit ;;
-    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
-       echo i586-pc-haiku
-       exit ;;
-    SX-4:SUPER-UX:*:*)
-       echo sx4-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-5:SUPER-UX:*:*)
-       echo sx5-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-6:SUPER-UX:*:*)
-       echo sx6-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-7:SUPER-UX:*:*)
-       echo sx7-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-8:SUPER-UX:*:*)
-       echo sx8-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-8R:SUPER-UX:*:*)
-       echo sx8r-nec-superux${UNAME_RELEASE}
-       exit ;;
-    Power*:Rhapsody:*:*)
-       echo powerpc-apple-rhapsody${UNAME_RELEASE}
-       exit ;;
-    *:Rhapsody:*:*)
-       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-       exit ;;
-    *:Darwin:*:*)
-       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-       case $UNAME_PROCESSOR in
-           i386)
-               eval $set_cc_for_build
-               if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-                 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                     (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-                     grep IS_64BIT_ARCH >/dev/null
-                 then
-                     UNAME_PROCESSOR="x86_64"
-                 fi
-               fi ;;
-           unknown) UNAME_PROCESSOR=powerpc ;;
-       esac
-       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-       exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-       UNAME_PROCESSOR=`uname -p`
-       if test "$UNAME_PROCESSOR" = "x86"; then
-               UNAME_PROCESSOR=i386
-               UNAME_MACHINE=pc
-       fi
-       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-       exit ;;
-    *:QNX:*:4*)
-       echo i386-pc-qnx
-       exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
-       echo nse-tandem-nsk${UNAME_RELEASE}
-       exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-       echo nsr-tandem-nsk${UNAME_RELEASE}
-       exit ;;
-    *:NonStop-UX:*:*)
-       echo mips-compaq-nonstopux
-       exit ;;
-    BS2000:POSIX*:*:*)
-       echo bs2000-siemens-sysv
-       exit ;;
-    DS/*:UNIX_System_V:*:*)
-       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-       exit ;;
-    *:Plan9:*:*)
-       # "uname -m" is not consistent, so use $cputype instead. 386
-       # is converted to i386 for consistency with other x86
-       # operating systems.
-       if test "$cputype" = "386"; then
-           UNAME_MACHINE=i386
-       else
-           UNAME_MACHINE="$cputype"
-       fi
-       echo ${UNAME_MACHINE}-unknown-plan9
-       exit ;;
-    *:TOPS-10:*:*)
-       echo pdp10-unknown-tops10
-       exit ;;
-    *:TENEX:*:*)
-       echo pdp10-unknown-tenex
-       exit ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-       echo pdp10-dec-tops20
-       exit ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-       echo pdp10-xkl-tops20
-       exit ;;
-    *:TOPS-20:*:*)
-       echo pdp10-unknown-tops20
-       exit ;;
-    *:ITS:*:*)
-       echo pdp10-unknown-its
-       exit ;;
-    SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
-       exit ;;
-    *:DragonFly:*:*)
-       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-       exit ;;
-    *:*VMS:*:*)
-       UNAME_MACHINE=`(uname -p) 2>/dev/null`
-       case "${UNAME_MACHINE}" in
-           A*) echo alpha-dec-vms ; exit ;;
-           I*) echo ia64-dec-vms ; exit ;;
-           V*) echo vax-dec-vms ; exit ;;
-       esac ;;
-    *:XENIX:*:SysV)
-       echo i386-pc-xenix
-       exit ;;
-    i*86:skyos:*:*)
-       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-       exit ;;
-    i*86:rdos:*:*)
-       echo ${UNAME_MACHINE}-pc-rdos
-       exit ;;
-    i*86:AROS:*:*)
-       echo ${UNAME_MACHINE}-pc-aros
-       exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-          "4"
-#else
-         ""
-#endif
-         ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-       printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-       printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-       { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-       echo c1-convex-bsd
-       exit ;;
-    c2*)
-       if getsysinfo -f scalar_acc
-       then echo c32-convex-bsd
-       else echo c2-convex-bsd
-       fi
-       exit ;;
-    c34*)
-       echo c34-convex-bsd
-       exit ;;
-    c38*)
-       echo c38-convex-bsd
-       exit ;;
-    c4*)
-       echo c4-convex-bsd
-       exit ;;
-    esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/stepmake/bin/config.sub b/stepmake/bin/config.sub
deleted file mode 100755 (executable)
index 204218c..0000000
+++ /dev/null
@@ -1,1731 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-#   Free Software Foundation, Inc.
-
-timestamp='2010-05-21'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file 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 2 of the License, or
-# (at your option) any later version.
-#
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted GNU ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )        # Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit ;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
-  kopensolaris*-gnu* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-       -sun*os*)
-               # Prevent following clause from handling this invalid input.
-               ;;
-       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis | -knuth | -cray | -microblaze)
-               os=
-               basic_machine=$1
-               ;;
-        -bluegene*)
-               os=-cnk
-               ;;
-       -sim | -cisco | -oki | -wec | -winbond)
-               os=
-               basic_machine=$1
-               ;;
-       -scout)
-               ;;
-       -wrs)
-               os=-vxworks
-               basic_machine=$1
-               ;;
-       -chorusos*)
-               os=-chorusos
-               basic_machine=$1
-               ;;
-       -chorusrdb)
-               os=-chorusrdb
-               basic_machine=$1
-               ;;
-       -hiux*)
-               os=-hiuxwe2
-               ;;
-       -sco6)
-               os=-sco5v6
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5)
-               os=-sco3.2v5
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco4)
-               os=-sco3.2v4
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2.[4-9]*)
-               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2v[4-9]*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5v6*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco*)
-               os=-sco3.2v2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -udk*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -isc)
-               os=-isc2.2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -clix*)
-               basic_machine=clipper-intergraph
-               ;;
-       -isc*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -lynx*)
-               os=-lynxos
-               ;;
-       -ptx*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-               ;;
-       -windowsnt*)
-               os=`echo $os | sed -e 's/windowsnt/winnt/'`
-               ;;
-       -psos*)
-               os=-psos
-               ;;
-       -mint | -mint[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-       # Recognize the basic CPU types without company name.
-       # Some are omitted here because they have special meanings below.
-       1750a | 580 \
-       | a29k \
-       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-       | am33_2.0 \
-       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
-       | bfin \
-       | c4x | clipper \
-       | d10v | d30v | dlx | dsp16xx \
-       | fido | fr30 | frv \
-       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-       | i370 | i860 | i960 | ia64 \
-       | ip2k | iq2000 \
-       | lm32 \
-       | m32c | m32r | m32rle | m68000 | m68k | m88k \
-       | maxq | mb | microblaze | mcore | mep | metag \
-       | mips | mipsbe | mipseb | mipsel | mipsle \
-       | mips16 \
-       | mips64 | mips64el \
-       | mips64octeon | mips64octeonel \
-       | mips64orion | mips64orionel \
-       | mips64r5900 | mips64r5900el \
-       | mips64vr | mips64vrel \
-       | mips64vr4100 | mips64vr4100el \
-       | mips64vr4300 | mips64vr4300el \
-       | mips64vr5000 | mips64vr5000el \
-       | mips64vr5900 | mips64vr5900el \
-       | mipsisa32 | mipsisa32el \
-       | mipsisa32r2 | mipsisa32r2el \
-       | mipsisa64 | mipsisa64el \
-       | mipsisa64r2 | mipsisa64r2el \
-       | mipsisa64sb1 | mipsisa64sb1el \
-       | mipsisa64sr71k | mipsisa64sr71kel \
-       | mipstx39 | mipstx39el \
-       | mn10200 | mn10300 \
-       | moxie \
-       | mt \
-       | msp430 \
-       | nios | nios2 \
-       | ns16k | ns32k \
-       | or32 \
-       | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-       | pyramid \
-       | rx \
-       | score \
-       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-       | sh64 | sh64le \
-       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-       | spu | strongarm \
-       | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-       | ubicom32 \
-       | v850 | v850e \
-       | we32k \
-       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
-       | z8k | z80)
-               basic_machine=$basic_machine-unknown
-               ;;
-       c54x)
-               basic_machine=tic54x-unknown
-               ;;
-       c55x)
-               basic_machine=tic55x-unknown
-               ;;
-       c6x)
-               basic_machine=tic6x-unknown
-               ;;
-       m6811 | m68hc11 | m6812 | m68hc12 | picochip)
-               # Motorola 68HC11/12.
-               basic_machine=$basic_machine-unknown
-               os=-none
-               ;;
-       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-               ;;
-       ms1)
-               basic_machine=mt-unknown
-               ;;
-
-       # We use `pc' rather than `unknown'
-       # because (1) that's what they normally are, and
-       # (2) the word "unknown" tends to confuse beginning users.
-       i*86 | x86_64)
-         basic_machine=$basic_machine-pc
-         ;;
-       # Object if more than one company name word.
-       *-*-*)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-       # Recognize the basic CPU types with company name.
-       580-* \
-       | a29k-* \
-       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-       | avr-* | avr32-* \
-       | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* \
-       | clipper-* | craynv-* | cydra-* \
-       | d10v-* | d30v-* | dlx-* \
-       | elxsi-* \
-       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-       | h8300-* | h8500-* \
-       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-       | i*86-* | i860-* | i960-* | ia64-* \
-       | ip2k-* | iq2000-* \
-       | lm32-* \
-       | m32c-* | m32r-* | m32rle-* \
-       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
-       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-       | mips16-* \
-       | mips64-* | mips64el-* \
-       | mips64octeon-* | mips64octeonel-* \
-       | mips64orion-* | mips64orionel-* \
-       | mips64r5900-* | mips64r5900el-* \
-       | mips64vr-* | mips64vrel-* \
-       | mips64vr4100-* | mips64vr4100el-* \
-       | mips64vr4300-* | mips64vr4300el-* \
-       | mips64vr5000-* | mips64vr5000el-* \
-       | mips64vr5900-* | mips64vr5900el-* \
-       | mipsisa32-* | mipsisa32el-* \
-       | mipsisa32r2-* | mipsisa32r2el-* \
-       | mipsisa64-* | mipsisa64el-* \
-       | mipsisa64r2-* | mipsisa64r2el-* \
-       | mipsisa64sb1-* | mipsisa64sb1el-* \
-       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-       | mipstx39-* | mipstx39el-* \
-       | mmix-* \
-       | mt-* \
-       | msp430-* \
-       | nios-* | nios2-* \
-       | none-* | np1-* | ns16k-* | ns32k-* \
-       | orion-* \
-       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-       | pyramid-* \
-       | romp-* | rs6000-* | rx-* \
-       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-       | sparclite-* \
-       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
-       | tahoe-* | thumb-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-       | tile-* | tilegx-* \
-       | tron-* \
-       | ubicom32-* \
-       | v850-* | v850e-* | vax-* \
-       | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
-       | xstormy16-* | xtensa*-* \
-       | ymp-* \
-       | z8k-* | z80-*)
-               ;;
-       # Recognize the basic CPU types without company name, with glob match.
-       xtensa*)
-               basic_machine=$basic_machine-unknown
-               ;;
-       # Recognize the various machine names and aliases which stand
-       # for a CPU type and a company and sometimes even an OS.
-       386bsd)
-               basic_machine=i386-unknown
-               os=-bsd
-               ;;
-       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-               basic_machine=m68000-att
-               ;;
-       3b*)
-               basic_machine=we32k-att
-               ;;
-       a29khif)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       abacus)
-               basic_machine=abacus-unknown
-               ;;
-       adobe68k)
-               basic_machine=m68010-adobe
-               os=-scout
-               ;;
-       alliant | fx80)
-               basic_machine=fx80-alliant
-               ;;
-       altos | altos3068)
-               basic_machine=m68k-altos
-               ;;
-       am29k)
-               basic_machine=a29k-none
-               os=-bsd
-               ;;
-       amd64)
-               basic_machine=x86_64-pc
-               ;;
-       amd64-*)
-               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       amdahl)
-               basic_machine=580-amdahl
-               os=-sysv
-               ;;
-       amiga | amiga-*)
-               basic_machine=m68k-unknown
-               ;;
-       amigaos | amigados)
-               basic_machine=m68k-unknown
-               os=-amigaos
-               ;;
-       amigaunix | amix)
-               basic_machine=m68k-unknown
-               os=-sysv4
-               ;;
-       apollo68)
-               basic_machine=m68k-apollo
-               os=-sysv
-               ;;
-       apollo68bsd)
-               basic_machine=m68k-apollo
-               os=-bsd
-               ;;
-       aros)
-               basic_machine=i386-pc
-               os=-aros
-               ;;
-       aux)
-               basic_machine=m68k-apple
-               os=-aux
-               ;;
-       balance)
-               basic_machine=ns32k-sequent
-               os=-dynix
-               ;;
-       blackfin)
-               basic_machine=bfin-unknown
-               os=-linux
-               ;;
-       blackfin-*)
-               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       bluegene*)
-               basic_machine=powerpc-ibm
-               os=-cnk
-               ;;
-       c54x-*)
-               basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c55x-*)
-               basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c6x-*)
-               basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c90)
-               basic_machine=c90-cray
-               os=-unicos
-               ;;
-        cegcc)
-               basic_machine=arm-unknown
-               os=-cegcc
-               ;;
-       convex-c1)
-               basic_machine=c1-convex
-               os=-bsd
-               ;;
-       convex-c2)
-               basic_machine=c2-convex
-               os=-bsd
-               ;;
-       convex-c32)
-               basic_machine=c32-convex
-               os=-bsd
-               ;;
-       convex-c34)
-               basic_machine=c34-convex
-               os=-bsd
-               ;;
-       convex-c38)
-               basic_machine=c38-convex
-               os=-bsd
-               ;;
-       cray | j90)
-               basic_machine=j90-cray
-               os=-unicos
-               ;;
-       craynv)
-               basic_machine=craynv-cray
-               os=-unicosmp
-               ;;
-       cr16)
-               basic_machine=cr16-unknown
-               os=-elf
-               ;;
-       crds | unos)
-               basic_machine=m68k-crds
-               ;;
-       crisv32 | crisv32-* | etraxfs*)
-               basic_machine=crisv32-axis
-               ;;
-       cris | cris-* | etrax*)
-               basic_machine=cris-axis
-               ;;
-       crx)
-               basic_machine=crx-unknown
-               os=-elf
-               ;;
-       da30 | da30-*)
-               basic_machine=m68k-da30
-               ;;
-       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-               basic_machine=mips-dec
-               ;;
-       decsystem10* | dec10*)
-               basic_machine=pdp10-dec
-               os=-tops10
-               ;;
-       decsystem20* | dec20*)
-               basic_machine=pdp10-dec
-               os=-tops20
-               ;;
-       delta | 3300 | motorola-3300 | motorola-delta \
-             | 3300-motorola | delta-motorola)
-               basic_machine=m68k-motorola
-               ;;
-       delta88)
-               basic_machine=m88k-motorola
-               os=-sysv3
-               ;;
-       dicos)
-               basic_machine=i686-pc
-               os=-dicos
-               ;;
-       djgpp)
-               basic_machine=i586-pc
-               os=-msdosdjgpp
-               ;;
-       dpx20 | dpx20-*)
-               basic_machine=rs6000-bull
-               os=-bosx
-               ;;
-       dpx2* | dpx2*-bull)
-               basic_machine=m68k-bull
-               os=-sysv3
-               ;;
-       ebmon29k)
-               basic_machine=a29k-amd
-               os=-ebmon
-               ;;
-       elxsi)
-               basic_machine=elxsi-elxsi
-               os=-bsd
-               ;;
-       encore | umax | mmax)
-               basic_machine=ns32k-encore
-               ;;
-       es1800 | OSE68k | ose68k | ose | OSE)
-               basic_machine=m68k-ericsson
-               os=-ose
-               ;;
-       fx2800)
-               basic_machine=i860-alliant
-               ;;
-       genix)
-               basic_machine=ns32k-ns
-               ;;
-       gmicro)
-               basic_machine=tron-gmicro
-               os=-sysv
-               ;;
-       go32)
-               basic_machine=i386-pc
-               os=-go32
-               ;;
-       h3050r* | hiux*)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       h8300hms)
-               basic_machine=h8300-hitachi
-               os=-hms
-               ;;
-       h8300xray)
-               basic_machine=h8300-hitachi
-               os=-xray
-               ;;
-       h8500hms)
-               basic_machine=h8500-hitachi
-               os=-hms
-               ;;
-       harris)
-               basic_machine=m88k-harris
-               os=-sysv3
-               ;;
-       hp300-*)
-               basic_machine=m68k-hp
-               ;;
-       hp300bsd)
-               basic_machine=m68k-hp
-               os=-bsd
-               ;;
-       hp300hpux)
-               basic_machine=m68k-hp
-               os=-hpux
-               ;;
-       hp3k9[0-9][0-9] | hp9[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hp9k2[0-9][0-9] | hp9k31[0-9])
-               basic_machine=m68000-hp
-               ;;
-       hp9k3[2-9][0-9])
-               basic_machine=m68k-hp
-               ;;
-       hp9k6[0-9][0-9] | hp6[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hp9k7[0-79][0-9] | hp7[0-79][0-9])
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k78[0-9] | hp78[0-9])
-               # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-               # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[0-9][13679] | hp8[0-9][13679])
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[0-9][0-9] | hp8[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hppa-next)
-               os=-nextstep3
-               ;;
-       hppaosf)
-               basic_machine=hppa1.1-hp
-               os=-osf
-               ;;
-       hppro)
-               basic_machine=hppa1.1-hp
-               os=-proelf
-               ;;
-       i370-ibm* | ibm*)
-               basic_machine=i370-ibm
-               ;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
-       i*86v32)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv32
-               ;;
-       i*86v4*)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv4
-               ;;
-       i*86v)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv
-               ;;
-       i*86sol2)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-solaris2
-               ;;
-       i386mach)
-               basic_machine=i386-mach
-               os=-mach
-               ;;
-       i386-vsta | vsta)
-               basic_machine=i386-unknown
-               os=-vsta
-               ;;
-       iris | iris4d)
-               basic_machine=mips-sgi
-               case $os in
-                   -irix*)
-                       ;;
-                   *)
-                       os=-irix4
-                       ;;
-               esac
-               ;;
-       isi68 | isi)
-               basic_machine=m68k-isi
-               os=-sysv
-               ;;
-       m68knommu)
-               basic_machine=m68k-unknown
-               os=-linux
-               ;;
-       m68knommu-*)
-               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       m88k-omron*)
-               basic_machine=m88k-omron
-               ;;
-       magnum | m3230)
-               basic_machine=mips-mips
-               os=-sysv
-               ;;
-       merlin)
-               basic_machine=ns32k-utek
-               os=-sysv
-               ;;
-        microblaze)
-               basic_machine=microblaze-xilinx
-               ;;
-       mingw32)
-               basic_machine=i386-pc
-               os=-mingw32
-               ;;
-       mingw32ce)
-               basic_machine=arm-unknown
-               os=-mingw32ce
-               ;;
-       miniframe)
-               basic_machine=m68000-convergent
-               ;;
-       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-       mips3*-*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-               ;;
-       mips3*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-               ;;
-       monitor)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       morphos)
-               basic_machine=powerpc-unknown
-               os=-morphos
-               ;;
-       msdos)
-               basic_machine=i386-pc
-               os=-msdos
-               ;;
-       ms1-*)
-               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-               ;;
-       mvs)
-               basic_machine=i370-ibm
-               os=-mvs
-               ;;
-       ncr3000)
-               basic_machine=i486-ncr
-               os=-sysv4
-               ;;
-       netbsd386)
-               basic_machine=i386-unknown
-               os=-netbsd
-               ;;
-       netwinder)
-               basic_machine=armv4l-rebel
-               os=-linux
-               ;;
-       news | news700 | news800 | news900)
-               basic_machine=m68k-sony
-               os=-newsos
-               ;;
-       news1000)
-               basic_machine=m68030-sony
-               os=-newsos
-               ;;
-       news-3600 | risc-news)
-               basic_machine=mips-sony
-               os=-newsos
-               ;;
-       necv70)
-               basic_machine=v70-nec
-               os=-sysv
-               ;;
-       next | m*-next )
-               basic_machine=m68k-next
-               case $os in
-                   -nextstep* )
-                       ;;
-                   -ns2*)
-                     os=-nextstep2
-                       ;;
-                   *)
-                     os=-nextstep3
-                       ;;
-               esac
-               ;;
-       nh3000)
-               basic_machine=m68k-harris
-               os=-cxux
-               ;;
-       nh[45]000)
-               basic_machine=m88k-harris
-               os=-cxux
-               ;;
-       nindy960)
-               basic_machine=i960-intel
-               os=-nindy
-               ;;
-       mon960)
-               basic_machine=i960-intel
-               os=-mon960
-               ;;
-       nonstopux)
-               basic_machine=mips-compaq
-               os=-nonstopux
-               ;;
-       np1)
-               basic_machine=np1-gould
-               ;;
-       nsr-tandem)
-               basic_machine=nsr-tandem
-               ;;
-       op50n-* | op60c-*)
-               basic_machine=hppa1.1-oki
-               os=-proelf
-               ;;
-       openrisc | openrisc-*)
-               basic_machine=or32-unknown
-               ;;
-       os400)
-               basic_machine=powerpc-ibm
-               os=-os400
-               ;;
-       OSE68000 | ose68000)
-               basic_machine=m68000-ericsson
-               os=-ose
-               ;;
-       os68k)
-               basic_machine=m68k-none
-               os=-os68k
-               ;;
-       pa-hitachi)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       paragon)
-               basic_machine=i860-intel
-               os=-osf
-               ;;
-       parisc)
-               basic_machine=hppa-unknown
-               os=-linux
-               ;;
-       parisc-*)
-               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       pbd)
-               basic_machine=sparc-tti
-               ;;
-       pbb)
-               basic_machine=m68k-tti
-               ;;
-       pc532 | pc532-*)
-               basic_machine=ns32k-pc532
-               ;;
-       pc98)
-               basic_machine=i386-pc
-               ;;
-       pc98-*)
-               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium | p5 | k5 | k6 | nexgen | viac3)
-               basic_machine=i586-pc
-               ;;
-       pentiumpro | p6 | 6x86 | athlon | athlon_*)
-               basic_machine=i686-pc
-               ;;
-       pentiumii | pentium2 | pentiumiii | pentium3)
-               basic_machine=i686-pc
-               ;;
-       pentium4)
-               basic_machine=i786-pc
-               ;;
-       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumpro-* | p6-* | 6x86-* | athlon-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium4-*)
-               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pn)
-               basic_machine=pn-gould
-               ;;
-       power)  basic_machine=power-ibm
-               ;;
-       ppc)    basic_machine=powerpc-unknown
-               ;;
-       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppcle | powerpclittle | ppc-le | powerpc-little)
-               basic_machine=powerpcle-unknown
-               ;;
-       ppcle-* | powerpclittle-*)
-               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64)  basic_machine=powerpc64-unknown
-               ;;
-       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-               basic_machine=powerpc64le-unknown
-               ;;
-       ppc64le-* | powerpc64little-*)
-               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ps2)
-               basic_machine=i386-ibm
-               ;;
-       pw32)
-               basic_machine=i586-unknown
-               os=-pw32
-               ;;
-       rdos)
-               basic_machine=i386-pc
-               os=-rdos
-               ;;
-       rom68k)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       rm[46]00)
-               basic_machine=mips-siemens
-               ;;
-       rtpc | rtpc-*)
-               basic_machine=romp-ibm
-               ;;
-       s390 | s390-*)
-               basic_machine=s390-ibm
-               ;;
-       s390x | s390x-*)
-               basic_machine=s390x-ibm
-               ;;
-       sa29200)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       sb1)
-               basic_machine=mipsisa64sb1-unknown
-               ;;
-       sb1el)
-               basic_machine=mipsisa64sb1el-unknown
-               ;;
-       sde)
-               basic_machine=mipsisa32-sde
-               os=-elf
-               ;;
-       sei)
-               basic_machine=mips-sei
-               os=-seiux
-               ;;
-       sequent)
-               basic_machine=i386-sequent
-               ;;
-       sh)
-               basic_machine=sh-hitachi
-               os=-hms
-               ;;
-       sh5el)
-               basic_machine=sh5le-unknown
-               ;;
-       sh64)
-               basic_machine=sh64-unknown
-               ;;
-       sparclite-wrs | simso-wrs)
-               basic_machine=sparclite-wrs
-               os=-vxworks
-               ;;
-       sps7)
-               basic_machine=m68k-bull
-               os=-sysv2
-               ;;
-       spur)
-               basic_machine=spur-unknown
-               ;;
-       st2000)
-               basic_machine=m68k-tandem
-               ;;
-       stratus)
-               basic_machine=i860-stratus
-               os=-sysv4
-               ;;
-       sun2)
-               basic_machine=m68000-sun
-               ;;
-       sun2os3)
-               basic_machine=m68000-sun
-               os=-sunos3
-               ;;
-       sun2os4)
-               basic_machine=m68000-sun
-               os=-sunos4
-               ;;
-       sun3os3)
-               basic_machine=m68k-sun
-               os=-sunos3
-               ;;
-       sun3os4)
-               basic_machine=m68k-sun
-               os=-sunos4
-               ;;
-       sun4os3)
-               basic_machine=sparc-sun
-               os=-sunos3
-               ;;
-       sun4os4)
-               basic_machine=sparc-sun
-               os=-sunos4
-               ;;
-       sun4sol2)
-               basic_machine=sparc-sun
-               os=-solaris2
-               ;;
-       sun3 | sun3-*)
-               basic_machine=m68k-sun
-               ;;
-       sun4)
-               basic_machine=sparc-sun
-               ;;
-       sun386 | sun386i | roadrunner)
-               basic_machine=i386-sun
-               ;;
-       sv1)
-               basic_machine=sv1-cray
-               os=-unicos
-               ;;
-       symmetry)
-               basic_machine=i386-sequent
-               os=-dynix
-               ;;
-       t3e)
-               basic_machine=alphaev5-cray
-               os=-unicos
-               ;;
-       t90)
-               basic_machine=t90-cray
-               os=-unicos
-               ;;
-        # This must be matched before tile*.
-        tilegx*)
-               basic_machine=tilegx-unknown
-               os=-linux-gnu
-               ;;
-       tile*)
-               basic_machine=tile-unknown
-               os=-linux-gnu
-               ;;
-       tx39)
-               basic_machine=mipstx39-unknown
-               ;;
-       tx39el)
-               basic_machine=mipstx39el-unknown
-               ;;
-       toad1)
-               basic_machine=pdp10-xkl
-               os=-tops20
-               ;;
-       tower | tower-32)
-               basic_machine=m68k-ncr
-               ;;
-       tpf)
-               basic_machine=s390x-ibm
-               os=-tpf
-               ;;
-       udi29k)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       ultra3)
-               basic_machine=a29k-nyu
-               os=-sym1
-               ;;
-       v810 | necv810)
-               basic_machine=v810-nec
-               os=-none
-               ;;
-       vaxv)
-               basic_machine=vax-dec
-               os=-sysv
-               ;;
-       vms)
-               basic_machine=vax-dec
-               os=-vms
-               ;;
-       vpp*|vx|vx-*)
-               basic_machine=f301-fujitsu
-               ;;
-       vxworks960)
-               basic_machine=i960-wrs
-               os=-vxworks
-               ;;
-       vxworks68)
-               basic_machine=m68k-wrs
-               os=-vxworks
-               ;;
-       vxworks29k)
-               basic_machine=a29k-wrs
-               os=-vxworks
-               ;;
-       w65*)
-               basic_machine=w65-wdc
-               os=-none
-               ;;
-       w89k-*)
-               basic_machine=hppa1.1-winbond
-               os=-proelf
-               ;;
-       xbox)
-               basic_machine=i686-pc
-               os=-mingw32
-               ;;
-       xps | xps100)
-               basic_machine=xps100-honeywell
-               ;;
-       ymp)
-               basic_machine=ymp-cray
-               os=-unicos
-               ;;
-       z8k-*-coff)
-               basic_machine=z8k-unknown
-               os=-sim
-               ;;
-       z80-*-coff)
-               basic_machine=z80-unknown
-               os=-sim
-               ;;
-       none)
-               basic_machine=none-none
-               os=-none
-               ;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-       w89k)
-               basic_machine=hppa1.1-winbond
-               ;;
-       op50n)
-               basic_machine=hppa1.1-oki
-               ;;
-       op60c)
-               basic_machine=hppa1.1-oki
-               ;;
-       romp)
-               basic_machine=romp-ibm
-               ;;
-       mmix)
-               basic_machine=mmix-knuth
-               ;;
-       rs6000)
-               basic_machine=rs6000-ibm
-               ;;
-       vax)
-               basic_machine=vax-dec
-               ;;
-       pdp10)
-               # there are many clones, so DEC is not a safe bet
-               basic_machine=pdp10-unknown
-               ;;
-       pdp11)
-               basic_machine=pdp11-dec
-               ;;
-       we32k)
-               basic_machine=we32k-att
-               ;;
-       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-               basic_machine=sh-unknown
-               ;;
-       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-               basic_machine=sparc-sun
-               ;;
-       cydra)
-               basic_machine=cydra-cydrome
-               ;;
-       orion)
-               basic_machine=orion-highlevel
-               ;;
-       orion105)
-               basic_machine=clipper-highlevel
-               ;;
-       mac | mpw | mac-mpw)
-               basic_machine=m68k-apple
-               ;;
-       pmac | pmac-mpw)
-               basic_machine=powerpc-apple
-               ;;
-       *-unknown)
-               # Make sure to match an already-canonicalized machine name.
-               ;;
-       *)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-       *-digital*)
-               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-               ;;
-       *-commodore*)
-               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-               ;;
-       *)
-               ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
-       # -solaris* is a basic system type, with this one exception.
-        -auroraux)
-               os=-auroraux
-               ;;
-       -solaris1 | -solaris1.*)
-               os=`echo $os | sed -e 's|solaris1|sunos4|'`
-               ;;
-       -solaris)
-               os=-solaris2
-               ;;
-       -svr4*)
-               os=-sysv4
-               ;;
-       -unixware*)
-               os=-sysv4.2uw
-               ;;
-       -gnu/linux*)
-               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-               ;;
-       # First accept the basic system types.
-       # The portable systems comes first.
-       # Each alternative MUST END IN A *, to match a version number.
-       # -sysv* is not here because it comes later, after sysvr4.
-       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-             | -sym* | -kopensolaris* \
-             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* | -aros* \
-             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -openbsd* | -solidbsd* \
-             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-             | -chorusos* | -chorusrdb* | -cegcc* \
-             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -linux-android* \
-             | -linux-newlib* | -linux-uclibc* \
-             | -uxpv* | -beos* | -mpeix* | -udk* \
-             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
-       # Remember, each alternative MUST END IN *, to match a version number.
-               ;;
-       -qnx*)
-               case $basic_machine in
-                   x86-* | i*86-*)
-                       ;;
-                   *)
-                       os=-nto$os
-                       ;;
-               esac
-               ;;
-       -nto-qnx*)
-               ;;
-       -nto*)
-               os=`echo $os | sed -e 's|nto|nto-qnx|'`
-               ;;
-       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-               ;;
-       -mac*)
-               os=`echo $os | sed -e 's|mac|macos|'`
-               ;;
-       -linux-dietlibc)
-               os=-linux-dietlibc
-               ;;
-       -linux*)
-               os=`echo $os | sed -e 's|linux|linux-gnu|'`
-               ;;
-       -sunos5*)
-               os=`echo $os | sed -e 's|sunos5|solaris2|'`
-               ;;
-       -sunos6*)
-               os=`echo $os | sed -e 's|sunos6|solaris3|'`
-               ;;
-       -opened*)
-               os=-openedition
-               ;;
-        -os400*)
-               os=-os400
-               ;;
-       -wince*)
-               os=-wince
-               ;;
-       -osfrose*)
-               os=-osfrose
-               ;;
-       -osf*)
-               os=-osf
-               ;;
-       -utek*)
-               os=-bsd
-               ;;
-       -dynix*)
-               os=-bsd
-               ;;
-       -acis*)
-               os=-aos
-               ;;
-       -atheos*)
-               os=-atheos
-               ;;
-       -syllable*)
-               os=-syllable
-               ;;
-       -386bsd)
-               os=-bsd
-               ;;
-       -ctix* | -uts*)
-               os=-sysv
-               ;;
-       -nova*)
-               os=-rtmk-nova
-               ;;
-       -ns2 )
-               os=-nextstep2
-               ;;
-       -nsk*)
-               os=-nsk
-               ;;
-       # Preserve the version number of sinix5.
-       -sinix5.*)
-               os=`echo $os | sed -e 's|sinix|sysv|'`
-               ;;
-       -sinix*)
-               os=-sysv4
-               ;;
-        -tpf*)
-               os=-tpf
-               ;;
-       -triton*)
-               os=-sysv3
-               ;;
-       -oss*)
-               os=-sysv3
-               ;;
-       -svr4)
-               os=-sysv4
-               ;;
-       -svr3)
-               os=-sysv3
-               ;;
-       -sysvr4)
-               os=-sysv4
-               ;;
-       # This must come after -sysvr4.
-       -sysv*)
-               ;;
-       -ose*)
-               os=-ose
-               ;;
-       -es1800*)
-               os=-ose
-               ;;
-       -xenix)
-               os=-xenix
-               ;;
-       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-               os=-mint
-               ;;
-       -aros*)
-               os=-aros
-               ;;
-       -kaos*)
-               os=-kaos
-               ;;
-       -zvmoe)
-               os=-zvmoe
-               ;;
-       -dicos*)
-               os=-dicos
-               ;;
-        -nacl*)
-               ;;
-       -none)
-               ;;
-       *)
-               # Get rid of the `-' at the beginning of $os.
-               os=`echo $os | sed 's/[^-]*-//'`
-               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-               exit 1
-               ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-        score-*)
-               os=-elf
-               ;;
-        spu-*)
-               os=-elf
-               ;;
-       *-acorn)
-               os=-riscix1.2
-               ;;
-       arm*-rebel)
-               os=-linux
-               ;;
-       arm*-semi)
-               os=-aout
-               ;;
-        c4x-* | tic4x-*)
-               os=-coff
-               ;;
-       tic54x-*)
-               os=-coff
-               ;;
-       tic55x-*)
-               os=-coff
-               ;;
-       tic6x-*)
-               os=-coff
-               ;;
-       # This must come before the *-dec entry.
-       pdp10-*)
-               os=-tops20
-               ;;
-       pdp11-*)
-               os=-none
-               ;;
-       *-dec | vax-*)
-               os=-ultrix4.2
-               ;;
-       m68*-apollo)
-               os=-domain
-               ;;
-       i386-sun)
-               os=-sunos4.0.2
-               ;;
-       m68000-sun)
-               os=-sunos3
-               # This also exists in the configure program, but was not the
-               # default.
-               # os=-sunos4
-               ;;
-       m68*-cisco)
-               os=-aout
-               ;;
-        mep-*)
-               os=-elf
-               ;;
-       mips*-cisco)
-               os=-elf
-               ;;
-       mips*-*)
-               os=-elf
-               ;;
-       or32-*)
-               os=-coff
-               ;;
-       *-tti)  # must be before sparc entry or we get the wrong os.
-               os=-sysv3
-               ;;
-       sparc-* | *-sun)
-               os=-sunos4.1.1
-               ;;
-       *-be)
-               os=-beos
-               ;;
-       *-haiku)
-               os=-haiku
-               ;;
-       *-ibm)
-               os=-aix
-               ;;
-       *-knuth)
-               os=-mmixware
-               ;;
-       *-wec)
-               os=-proelf
-               ;;
-       *-winbond)
-               os=-proelf
-               ;;
-       *-oki)
-               os=-proelf
-               ;;
-       *-hp)
-               os=-hpux
-               ;;
-       *-hitachi)
-               os=-hiux
-               ;;
-       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-               os=-sysv
-               ;;
-       *-cbm)
-               os=-amigaos
-               ;;
-       *-dg)
-               os=-dgux
-               ;;
-       *-dolphin)
-               os=-sysv3
-               ;;
-       m68k-ccur)
-               os=-rtu
-               ;;
-       m88k-omron*)
-               os=-luna
-               ;;
-       *-next )
-               os=-nextstep
-               ;;
-       *-sequent)
-               os=-ptx
-               ;;
-       *-crds)
-               os=-unos
-               ;;
-       *-ns)
-               os=-genix
-               ;;
-       i370-*)
-               os=-mvs
-               ;;
-       *-next)
-               os=-nextstep3
-               ;;
-       *-gould)
-               os=-sysv
-               ;;
-       *-highlevel)
-               os=-bsd
-               ;;
-       *-encore)
-               os=-bsd
-               ;;
-       *-sgi)
-               os=-irix
-               ;;
-       *-siemens)
-               os=-sysv4
-               ;;
-       *-masscomp)
-               os=-rtu
-               ;;
-       f30[01]-fujitsu | f700-fujitsu)
-               os=-uxpv
-               ;;
-       *-rom68k)
-               os=-coff
-               ;;
-       *-*bug)
-               os=-coff
-               ;;
-       *-apple)
-               os=-macos
-               ;;
-       *-atari*)
-               os=-mint
-               ;;
-       *)
-               os=-none
-               ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-       *-unknown)
-               case $os in
-                       -riscix*)
-                               vendor=acorn
-                               ;;
-                       -sunos*)
-                               vendor=sun
-                               ;;
-                       -cnk*|-aix*)
-                               vendor=ibm
-                               ;;
-                       -beos*)
-                               vendor=be
-                               ;;
-                       -hpux*)
-                               vendor=hp
-                               ;;
-                       -mpeix*)
-                               vendor=hp
-                               ;;
-                       -hiux*)
-                               vendor=hitachi
-                               ;;
-                       -unos*)
-                               vendor=crds
-                               ;;
-                       -dgux*)
-                               vendor=dg
-                               ;;
-                       -luna*)
-                               vendor=omron
-                               ;;
-                       -genix*)
-                               vendor=ns
-                               ;;
-                       -mvs* | -opened*)
-                               vendor=ibm
-                               ;;
-                       -os400*)
-                               vendor=ibm
-                               ;;
-                       -ptx*)
-                               vendor=sequent
-                               ;;
-                       -tpf*)
-                               vendor=ibm
-                               ;;
-                       -vxsim* | -vxworks* | -windiss*)
-                               vendor=wrs
-                               ;;
-                       -aux*)
-                               vendor=apple
-                               ;;
-                       -hms*)
-                               vendor=hitachi
-                               ;;
-                       -mpw* | -macos*)
-                               vendor=apple
-                               ;;
-                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-                               vendor=atari
-                               ;;
-                       -vos*)
-                               vendor=stratus
-                               ;;
-               esac
-               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-               ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/stepmake/bin/fake-msgfmt.sh b/stepmake/bin/fake-msgfmt.sh
deleted file mode 100644 (file)
index 1a97f8d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-
-IDENTIFICATION=fake-msgfmt.sh
-
-OUTPUT='/dev/null'
-
-while getopts ':d:o:' OPT;
-do
-case $OPT in
-o)
-    OUTPUT=$OPTARG
-    ;;
-*)
-    ;;
-    esac
-done
-
-
-
-shift `expr $OPTIND - 1`
-#
-# Input file name
-#
-if [ "$1" = "" ]
-then
-  echo "$IDENTIFICATION: No input file name given"
-  exit 1
-fi
-
-echo Faking msgfmt: copying $1 to $OUTPUT
-
-
-cp $1 $OUTPUT
diff --git a/stepmake/bin/install-sh b/stepmake/bin/install-sh
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/stepmake/bin/install.py b/stepmake/bin/install.py
deleted file mode 100644 (file)
index 9818543..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-#!@PYTHON@
-import string
-import getopt
-import sys
-import os
-import shutil
-(opts, args) = getopt.getopt (sys.argv[1:], 'b:cdg:m:o:st:', [])
-transform_base = None
-group = None
-owner = None
-transform = None
-mode = None 
-copy = False
-create_dir = False
-
-for (o,a) in opts:
-    if o == '-b':
-        transform_base = a
-    elif o == '-c':
-        copy = True
-    elif o == '-d':
-        create_dir = True
-    elif o == '-g':
-        group = a
-    elif o == '-m':
-        mode = string.atoi (a, 8)
-    elif o == '-o':
-        owner = a
-    elif o == '-s':
-        strip = True
-    elif o == '-t':
-        transform = a
-    elif o == '-h':
-        print ''' Usage: $0 [OPTION]... SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 -d DIRECTORIES...
-
-In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
-In the second, create the directory path DIR.
-
-Options:
--b=TRANSFORMBASENAME
--c         copy source (using $cpprog) instead of moving (using $mvprog).
--d         create directories instead of installing files.
--g GROUP   $chgrp installed files to GROUP.
--m MODE    $chmod installed files to MODE.
--o USER    $chown installed files to USER.
--s         strip installed files (using $stripprog).
--t=TRANSFORM
---help     display this help and exit.
---version  display version info and exit.'''
-        sys.exit (0)
-
-if not mode:
-    if create_dir:
-        mode = 0755
-    else:
-        mode = 0644
-        
-
-chown_me = []
-
-dest = None
-if not create_dir:
-    dest = args.pop()
-
-for f in args:
-    if create_dir:
-        if os.path.isdir (f):
-            continue
-        
-        os.makedirs (f, mode=mode)
-        chown_me.append (f)
-    else:
-        if copy:
-            if os.path.exists (dest) and not os.path.isdir (dest):
-                os.remove (dest)
-            shutil.copy2 (f, dest)
-        else:
-            shutil.move (f, dest)
-
-        if os.path.isdir (dest):
-            chown_me.append (os.path.join (dest, os.path.basename (f)))
-        else:
-            chown_me.append (dest)
-
-for f in chown_me:
-    os.chmod (f, mode)
-    if group <> None or owner <> None:
-        os.chown (f, group, owner)
-    
-    
-
-        
-
diff --git a/stepmake/bin/make-version.py b/stepmake/bin/make-version.py
deleted file mode 100644 (file)
index 61247fb..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-
-import re
-import sys
-
-PROGRAM = sys.argv[0]
-VERSION = sys.argv[1]
-defs = []
-for i in open (VERSION).readlines ():
-    i = re.sub ('#.*','', i)
-    m  = re.search ('([^ =]*)[\t ]*=[ \t]*([^ \t]*)[ \t]*\n', i)
-    if m:
-        defs.append ((m.group (1), m.group (2)))
-
-sys.stdout.write (r'''
-/*
- Automatically generated from %(VERSION)s
- by %(PROGRAM)s.
-*/
-#ifndef VERSION_HH
-#define VERSION_HH
-''' % vars ())
-
-for name, expansion in defs:
-    # GUILE leaks autoconf data into userspace. 
-    sys.stdout.write (r'''
-#ifdef %(name)s
-#undef %(name)s
-#endif /* %(name)s */
-#define %(name)s "%(expansion)s"
-''' % vars ())
-    
-if ('MY_PATCH_LEVEL', '') in defs:
-    sys.stdout.write (r'''
-#define NO_MY_PATCHLEVEL
-#define TOPLEVEL_VERSION MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL
-''')
-else:
-    sys.stdout.write (r'''
-#define TOPLEVEL_VERSION MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL "." MY_PATCH_LEVEL
-''')
-
-sys.stdout.write(r'''
-#endif /* VERSION_HH */
-''')
-    
diff --git a/stepmake/bin/ntpwd.py b/stepmake/bin/ntpwd.py
deleted file mode 100644 (file)
index a4838b3..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-"""Winnt access into /etc/passwd via account name"""
-
-import sys
-import string
-
-def getpwname( name, pwfile='/etc/passwd' ):
-  "Get password record that matches the specified name"
-  try:
-    _fd = open( pwfile, 'r' )
-  except:
-    sys.stderr.write("Error unable to locate" + pwfile + "\n")
-    sys.stderr.write("Consult gnu-win32 command mkpasswd\n")
-    sys.exit(1)
-
-  _data = _fd.read()
-  _fd.close()
-    
-  for _line in string.split(_data, '\n'):
-    _record=string.split( _line, ':' );
-    if _record[0] == name:
-      return _record
-  return ()
-
-def _test():
-  pw = getpwname( 'jeff' )
-  print pw[4]
-
-if __name__ == '__main__':
-    _test()
diff --git a/stepmake/bin/stepmakeise.sh b/stepmake/bin/stepmakeise.sh
deleted file mode 100755 (executable)
index e2ae7cf..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/bin/sh
-# stepmakeise.sh
-
-help () {
-       cat <<EOF
-Usage: ../stepmake-x.x.x/bin/stepmakeise.sh
-Include or update package's StepMake.
-EOF
-}
-
-name=`basename $0`
-reldir=../releases
-stepbin=`dirname $0`
-
-if [ $# -ne 0 ]; then
-       help
-       exit 2
-fi
-
-value ()
-{
-    expression=`echo $1 | sed 's/\./ \\\\\* 100 + /g'`
-    # urg?  $1=`expr $expression`
-    urg=/tmp/stepmakeise.$$
-    echo expr $expression > $urg
-    echo `. $urg`
-    rm -f $urg
-}
-
-if [ -r stepmake ]; then
-       . ./stepmake/VERSION
-       if [ "x$PACKAGE_NAME" != "xStepMake" ]; then
-               echo "$name: huh 1?"
-               exit 1
-       fi
-       echo "Stepmake found"
-       printf "Checking version..."
-       VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL
-       # urg
-       version=$VERSION
-       if [ "$MY_PATCH_LEVEL" != "" ]; then
-               VERSION=$VERSION.$MY_PATCH_LEVEL
-       fi
-       echo " $version"
-else
-       VERSION="0.0.0"
-       version=$VERSION
-fi
-
-if [ true ]; then
-       # urg
-       printf "Checking latest..."
-       if [ ! -r $reldir ]; then
-               echo "$name: huh 2?"
-               exit 1
-       fi
-       LATEST=`cd $reldir; ls -t1 stepmake-*.tar.gz | head -n 1 | sed 's!stepmake-!!' | sed 's!.tar.gz!!'`
-       # urg
-       latest=`echo $LATEST | sed 's/\.[a-zA-Z][a-zA-Z]*[0-9]*$//'`
-       latest_val=`value $latest`
-       echo " $latest"
-       version_val=`value $version`
-       if [ $latest_val -le $version_val ]; then
-           echo "relax, StepMake is up to date"
-           exit 0
-       fi
-       printf "Updating StepMake..."
-       (set +x; rm -rf stepmake; tar xzf $reldir/stepmake-$LATEST.tar.gz; mv stepmake-$LATEST stepmake)
-       echo "ok"
-fi
-
-if [ -r VERSION ]; then
-       echo "$name: warning: VERSION found: not stepmakeising"
-       echo "You should rerun configure"
-       rm -f Makefile
-       exit 0
-fi
-
-files="VERSION make aclocal.in configure.in config.hh.in config.make.in"
-for i in $files; do
-       if [ -r $i ]; then
-               echo "$name: can't stepmakise: $i already present"
-               exit 1
-       fi
-done
-
-printf "Stepmakeising..."
-for i in $files; do
-       cp -prv stepmake/$i .
-done
-
-cat <<EOF
-ok
-Please edit the folowing files to your package's needs:
-
-    VERSION
-    configure.in 
-
-and look at:
-
-    make/Toplevel.make.in
-    config.hh.in
-    config.make.in
-EOF
-
diff --git a/stepmake/bin/text2html.py b/stepmake/bin/text2html.py
deleted file mode 100644 (file)
index 51f3948..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#@PYTHON@
-import os
-import re
-import string
-import sys
-
-
-entities = {
-    "&" : 'amp',
-    "`" : 'apos',
-    '>' : 'gt',
-    '<' : 'lt',
-    '"' : 'quot',
-    }
-
-def txt2html (s):
-    for i in entities.keys ():
-        s = re.sub (i, '\001' + entities[i] + ';', s);
-    s = re.sub ('\001', '&', s);
-    return s
-
-for a in sys.argv[1:]:
-    # hmm, we need: text2html out/foe.txt -> out/foe.html,
-    # -o is a bit overkill?
-    # outfile = os.path.basename (os.path.splitext(a)[0]) + '.html'
-    outfile = os.path.splitext(a)[0] + '.html'
-    
-    try:
-      os.unlink(outfile)
-    except:
-      pass
-
-    s = r"""
-
-<html>
-<head>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
-</head>
-
-<body><pre>
-%s
-</pre></body></html>
-""" % txt2html (open (a).read ())
-    open (outfile, 'w').write (s)
-
-
diff --git a/stepmake/config.hh.in b/stepmake/config.hh.in
deleted file mode 100644 (file)
index 58f6d8b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/* @configure_input@ */
-
-/* Hmm */
-#define PACKAGE "@package@"
-
-/* Toplevel version */
-#define  TOPLEVEL_VERSION "@TOPLEVEL_VERSION@"
-
-/* default init and input dir */
-#define DATADIR "@DATADIR@"
-
-/* default locale dir */
-#define LOCALEDIR "@LOCALEDIR@"
-
diff --git a/stepmake/configure.in b/stepmake/configure.in
deleted file mode 100644 (file)
index 3900ffd..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-dnl configure.in   -*-shell-script-*-
-dnl Process this file with autoconf to produce a configure script. 
-
-# Bootstrap the init proces.
-AC_INIT
-
-# Bootstrap StepMake configure
-# For user package:
-# AC_CONFIG_AUX_DIR(stepmake/bin)
-# For stepmake package:
-AC_CONFIG_AUX_DIR(bin)
-STEPMAKE_INIT
-
-# List a file that identifies your package.
-AC_CONFIG_SRCDIR([make/stepmake.lsm.in])
-# Move to aclocal.m4?
-AC_CONFIG_HEADER([$CONFIGFILE.h:config.hh.in])
-
-# For all packages except the StepMake package itself
-# AC_CONFIG_SUBDIRS(stepmake)
-
-CC=echo
-AC_SUBST(CC)
-# Uncomment the configuration options your package needs.
-# STEPMAKE_COMPILE
-# AC_CHECK_HEADERS([limits.h malloc.h string.h unistd.h values.h])
-# STEPMAKE_CXX
-# STEPMAKE_GXX
-# STEPMAKE_CXXTEMPLATE
-# STEPMAKE_LEXYACC
-# STEPMAKE_LIB
-# STEPMAKE_LIBTOOL
-STEPMAKE_LOCALE
-# STEPMAKE_GETTEXT
-# STEPMAKE_MAN
-# STEPMAKE_MSGFMT
-# STEPMAKE_TEXMF
-# STEPMAKE_TEXMF_DIRS
-
-# AM_PATH_GTK(1.0.0,,AC_MSG_ERROR([please install proper version of gtk]))
-# AM_PATH_GTK__(0.9.4,,AC_MSG_ERROR([please install proper version of gtk--]))
-
-AC_CHECK_PROGS(MAKEINFO, makeinfo, error)
-
-STEPMAKE_END
diff --git a/stepmake/stepmake/GNUmakefile b/stepmake/stepmake/GNUmakefile
deleted file mode 100644 (file)
index f2c693b..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# title           makefile for stepmake
-
-# subdir level:
-#
-depth = ../..
-#
-
-# descent order into subdirectories:
-#
-SUBDIRS =
-#
-
-STEPMAKE_TEMPLATES=makedir install
-
-# bootstrap stepmake:
-#
--include $(depth)/make/stepmake.make
-
-ifeq ($(PACKAGE),STEPMAKE)
-INSTALLATION_DIR=$(datadir)/stepmake
-else
-INSTALLATION_DIR=$(dir $(patsubst %/, %, $(dir $(datadir))))$(package)/stepmake/stepmake
-endif
-INSTALLATION_FILES=GNUmakefile $(MAKE_FILES)
-
index a368f4f6669b6e2d223604bce7507c824c4e8f79..8de00bce07a8c80c06d4362b47a101f60d7db6e8 100644 (file)
@@ -12,13 +12,8 @@ $(outdir)/%.lo: %.cc
 $(outdir)/%.lo: $(outdir)/%.cc
        $(DO_LO_DEP) $(CXX) -c $(ALL_CXXFLAGS) $(PIC_FLAGS) -o $@ $<
 
-$(outdir)/%.cc: %.yy
-       $(BISON) -o $@  $<
-
-$(outdir)/%.hh: %.yy
-       $(BISON) -o $(subst .hh,-tmp.cc,$@) -d  $<
-       rm $(subst .hh,-tmp.cc,$@)
-       mv $(subst .hh,-tmp.hh,$@) $@
+$(outdir)/%.cc $(outdir)/%.hh: %.yy
+       $(BISON) -d -o $(outdir)/$*.cc $<
 
 $(outdir)/%.cc: %.ll
        $(FLEX) -Cfe -p -p -o$@ $<
index 620275baa177e67313535571393c21d85e90e205..954e7a33a0c306bea99fc77c041e2bd994895bb2 100644 (file)
@@ -12,14 +12,8 @@ $(outdir)/%.lo: %.c
 $(outdir)/%.lo: %.c
        $(DO_LO_DEP) $(CC) -c $(ALL_CFLAGS) $(PIC_FLAGS) -o $@ $<
 
-$(outdir)/%.c: %.y
-       $(BISON) $<
-       mv $(*F).tab.c $@
-
-$(outdir)/%.h: %.y
-       $(BISON) -d $<
-       mv $(*F).tab.h $@
-       rm -f $(*F).tab.c # if this happens in the wrong order it triggers recompile of the .cc file
+$(outdir)/%.c $(outdir)/%.h: %.y
+       $(BISON) -d -o $(outdir)/$*.c $<
 
 $(outdir)/%.c: %.l
        $(FLEX) -Cfe -p -p -o$@ $<
index b22da2e9f50706118954ef800ca1e2526d079f47..2ca0bb97bdb68ad73523d9c19100253fe5e05e20 100644 (file)
@@ -1,4 +1,2 @@
 at-dir = $(doc-dir)
 at-ext = .in
-
-EXTRA_DIST_FILES += $(call src-wildcard,*.ihtml)
index 0b04186db4b8bde4c9293a4ef0f2e2281e127390..3e527e2eb79bcb6abadc416ba70e52558b4b474b 100644 (file)
@@ -3,6 +3,3 @@ $(outdir)/%: %.m4
 
 %.gz: %
        gzip -c9 $< > $@
-
-$(outdir)/%.css: $(CSS_DIRECTORY)/%.css
-       ln -f $< $@
index 9a51aaa728f948fc43be85d01670529246f0a8e5..7e29760e42bfe15ef58c9b2ac62f58bf934ae820 100644 (file)
@@ -1,12 +1,11 @@
-.PHONY : all clean bin-clean config default dist exe help html lib TAGS\
+.PHONY : all clean bin-clean default dist exe help html lib man TAGS\
         po doc doc-stage-1 WWW-1 WWW-2 WWW-post local-WWW-1 local-WWW-2\
-        log-clean
+        local-all local-clean local-bin-clean local-doc log-clean
 
-all:    default
+all: default
        $(LOOP)
 
-bin:
-       $(MAKE) PACKAGE=$(PACKAGE) package=$(package) -C lily
+local-all: default
 
 man:
        $(LOOP)
@@ -33,26 +32,6 @@ dist:
        $(MAKE) -C $(depth) dist
 endif
 
-distclean: clean
-       $(MAKE) local-distclean
-
-cvs-clean:
-       $(MAKE) local-distclean
-       rm -rf out
-       rm -rf out-www
-       rm -f aclocal.m4 configure
-
-maintainerclean:
-       $(LOOP)
-       $(MAKE) local-maintainerclean
-       $(MAKE) local-distclean
-
-
-# This doesn't allow command-line options, is it really useful? -jm
-config:
-       ./$(src-depth)/configure
-
-
 generic-help:
        @echo "Makefile for $(PACKAGE_NAME) $(TOPLEVEL_VERSION)"
        @echo "Usage: make ["VARIABLE=value"]... [TARGET]"
@@ -60,8 +39,9 @@ generic-help:
        @echo "Targets specific to current directory:"
 
 help: generic-help local-help
-       @echo "Generic targets that recurse into subdirectories*:"
+       @echo "Generic targets that recurse into subdirectories:"
        @echo "  all          update everything except documentation with images"
+       @echo "               (same as the empty target)"
        @echo "  clean        remove all generated stuff in $(outdir)"
        @echo "  bin-clean    same as clean, except that mf/out is preserved"
        @echo "  doc          update documentation with images in directory \`out-www'"
@@ -69,32 +49,27 @@ help: generic-help local-help
        @echo "  doc-clean    clean \`out-www' directory"
        @echo "  install      install programs and data (prefix=$(prefix))"
        @echo "  uninstall    uninstall programs and data"
+       @echo "  test         build regression tests for the program and scripts"
        @echo
        @echo "  *Note: Prepend \`local-' (eg. \`local-clean') to restrict"
        @echo "         any of the above commands to the current directory."
        @echo
        @echo "Other generic targets:"
-       @echo "  default      same as the empty target"
-       @echo "  bin          check the lily directory and rebuild lilypond.exe if needed"
+       @echo "  default      same as \`make all', but restricted to the current directory"
        @echo "  exe          update all executables"
        @echo "  help         this help"
        @echo "  lib          update all libraries"
+       @echo "  log-clean    remove .log files"
        @echo "  TAGS         generate tagfiles"
        @echo
-       @echo "\`make' may be invoked from any subdirectory."
+       @echo "\`make' may be invoked from any subdirectory that contains a GNUmakefile."
 
 local-help:
 
-local-dist: $(DIST_FILES) $(OUT_DIST_FILES) $(NON_ESSENTIAL_DIST_FILES)
-       mkdir -p $(distdir)/$(localdir)
-       $(LN) $(DIST_FILES:%=$(src-dir)/%) $(distdir)/$(localdir)
-
-       case "$(NON_ESSENTIAL_DIST_FILES)x" in x) ;; *) \
-               $(LN) $(NON_ESSENTIAL_DIST_FILES:%=$(src-dir)/%) $(distdir)/$(localdir);; \
-       esac
-       case "$(OUT_DIST_FILES)x" in x) ;; *) \
-               mkdir -p $(distdir)/$(localdir)/$(outdir); \
-               $(LN) $(OUT_DIST_FILES) $(distdir)/$(localdir)/$(outdir);; \
+local-dist: $(OUT_DIST_FILES)
+       case "$(OUT_DIST_FILES)x" in x) ;; \
+            *) mkdir -p $(distdir)/$(localdir)/$(outdir) && \
+               $(LN) $(OUT_DIST_FILES) $(distdir)/$(localdir)/$(outdir);; \
        esac
        $(foreach i, $(SUBDIRS), $(MAKE) top-src-dir=$(top-src-dir) distdir=$(distdir) localdir=$(localdir)/$(notdir $(i)) -C $(i) local-dist &&) true
 
@@ -115,13 +90,15 @@ local-tags:
                        $(ERROR_LOG) ; \
        fi
 
-$(outdir)/version.hh: $(depth)/VERSION $(config_make) $(step-bindir)/make-version.py
-       $(PYTHON) $(step-bindir)/make-version.py $< > $@
+# Don't use $(buildscript-dir)/make-version, because it is not known whether
+# build process has visited scripts/build
+$(outdir)/version.hh: $(depth)/VERSION $(config_make) $(top-src-dir)/scripts/build/make-version.py
+       $(PYTHON) $(top-src-dir)/scripts/build/make-version.py $< > $@
 
 $(outdir)/config.hh: $(config_h)
        cp -p $< $@
 
-configure: configure.in aclocal.m4
+configure: configure.ac aclocal.m4
        NOCONFIGURE=yes $(src-depth)/autogen.sh
        chmod +x configure
 
@@ -129,8 +106,6 @@ local-clean:
 
 local-distclean:
 
-local-maintainerclean:
-
 install-strip:
        $(MAKE) INSTALLPY="$(INSTALLPY) -s" install
 
@@ -204,6 +179,7 @@ local-doc:
        $(MAKE) out=www WWW-post
 
 doc-stage-1:
+       $(MAKE) -C $(top-build-dir)/Documentation/po out=www messages
        $(MAKE) -C $(depth)/scripts/build out=
        $(MAKE) out=www WWW-1
 
index 5eba1cc214b034a2606ced700d4092819a83969b..b0fc521e931334a8f4c25867658fe183df7c4b7c 100644 (file)
@@ -39,12 +39,11 @@ distname = $(package)-$(TOPLEVEL_VERSION)
 doc-dir = $(src-depth)/Documentation
 po-srcdir = $(src-depth)/po
 po-outdir = $(depth)/po/$(outdir)
-step-bindir = $(stepmake)/bin
 
 # stepmake package support.
 DEPTH = $(depth)/$(package-depth)
 
-INSTALLPY=$(PYTHON) $(step-bindir)/install.py -c
+INSTALLPY=$(buildscript-dir)/install -c
 INSTALL=$(INSTALLPY)
 
 group-dir = $(shell cd $(DEPTH);pwd)/..
@@ -83,7 +82,6 @@ INCLUDES = $(src-dir)/include $(outdir) $($(PACKAGE)_INCLUDES) $(MODULE_INCLUDES
 
 M4 = m4
 
-DIST_FILES=$(EXTRA_DIST_FILES) GNUmakefile $(ALL_SOURCES) $(call src-wildcard,SConscript)
 DOCDIR=$(depth)/$(outdir)
 
 #?
index ac5d1b6e8735d2981af0b4ea4d6b9cc32561245c..7847928593ca41173720b7949184321263fc9bf7 100644 (file)
@@ -7,12 +7,8 @@ OUTLSM_FILES=$(addprefix $(outdir)/,$(basename $(LSM_FILES)))
 OUTSPEC_FILES=$(addprefix $(outdir)/,$(basename $(SPEC_FILES)))
 OUT_DIST_FILES= $(strip $(OUTLSM_FILES) $(OUTSPEC_FILES))
 
-EXTRA_DIST_FILES += $(MAKE_FILES)
-
 # these two outdir FILES are distributed, since they make sense to have
 # without running configure and make.
 
 at-dir = $(doc-dir)
 at-ext = .in
-
-
index 5b6ad17d91a0a204a1470509e61ea3cdac5e19e7..5be005a1985dc7e998a0d85df79b40c48f4784fe 100644 (file)
@@ -2,13 +2,13 @@
 
 # we want to see botched results as well.
 $(outdir)/%.dvi: %.mf
-       -MFINPUTS=$(src-dir) $(METAFONT) "\scrollmode; input $<;"
+       -$(DO_MF_DEP) MFINPUTS=$(src-dir) $(METAFONT) "\scrollmode; input $<;"
        gftodvi $(basename $<)
        mv $(basename $<).dvi $(outdir)
        rm $(basename $<).*gf
 
 $(outdir)/%.tfm $(outdir)/%.log: %.mf
-       MFINPUTS=$(src-dir) $(METAFONT) "\mode:=$(MFMODE); nonstopmode; input $<;" $(METAFONT_QUIET)
+       $(DO_MF_DEP) MFINPUTS=$(src-dir) $(METAFONT) "\mode:=$(MFMODE); nonstopmode; input $<;" $(METAFONT_QUIET)
 # Let's keep this log output, it saves another mf run.
        mv $(basename $(@F)).log $(basename $(@F)).tfm $(outdir)
        rm -f $(basename $(@F)).*gf  $(basename $(@F)).*pk
@@ -19,7 +19,7 @@ $(outdir)/%.tfm $(outdir)/%.log: %.mf
 # the soft link for mf2pt1.mp is for recent mpost versions
 # which no longer dump a .mem file
 $(outdir)/%.pfb: %.mf $(outdir)/mf2pt1.mem $(outdir)/%.log
-       TMP=`mktemp -d $(outdir)/pfbtemp.$*.XXXXXXXXX` \
+       $(DO_MF_DEP) TMP=`mktemp -d $(outdir)/pfbtemp.$*.XXXXXXXXX` \
        && ( cd $$TMP \
                && ln -s ../mf2pt1.mem . \
                && ln -s ../../mf2pt1.mp . \
index f4d5332a922e35fdb92db54f191ae6a619eb52eb..73f35a53ed68cd0490ccaa367b5f58fe83739492 100644 (file)
@@ -1,6 +1,4 @@
-
 MF_FILES := $(call src-wildcard,*.mf)
-EXTRA_DIST_FILES += $(MF_FILES)
 MF_TFM_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.tfm))
 MF_DVI_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.dvi))
 MF_LOG_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.log))
@@ -17,3 +15,24 @@ METAFONT_QUIET = >/dev/null
 else
 METAFONT_QUIET =
 endif
+
+# Find the metafont file $(1) within the source dirs and return its path.
+# If not found, return $(outdir)/$(1) assuming that it is a generated file.
+find-mf = \
+$(firstword \
+       $(wildcard $(src-dir)/$(1)) \
+       $(wildcard $(top-src-dir)/mf/$(1)) \
+       $(outdir)/$(1) \
+)
+
+# Recursively scan the metafont .mf file $(1) for "input X;"
+# and return all dependencies.
+scan-mf = \
+$(foreach f, $(shell test -f $(1) && sed -ne "/^[[:space:]]*input[[:space:]]/s/^[[:space:]]*input\([^.;]*\)\(.mf;\|;\)/\1.mf/p" $(1)), \
+       $(call find-mf,$(f)) \
+       $(call scan-mf,$(call find-mf,$(f))) \
+)
+
+# Find dependencies for the target $@, based on the metafont source file $<,
+# and write the dependencies to a .dep file.
+DO_MF_DEP = ( echo ./$@: $(call scan-mf,$<) > $(basename $@).dep ) &&
index c971e513c034b8dcc6e45ef4ae05db00ea33370c..8a0dd76053f51e8a7ef98f4e9b289a7e24c45218 100644 (file)
@@ -29,18 +29,18 @@ local-po:
 else
 po: local-po
        $(LOOP)
-ALL_PO_SOURCES = $(ALL_C_SOURCES) $(ALL_CC_SOURCES) $(PYTHON_SCRIPTS_IN) $(PY_MODULES_IN) $(SCM_FILES) $(wildcard $(outdir)/*.hh) $(wildcard $(outdir)/*.cc)
+ALL_PO_SOURCES = $(ALL_C_SOURCES) $(ALL_CC_SOURCES) $(PYTHON_SCRIPTS_IN) $(PY_MODULES_IN) $(SCM_FILES)
 local-po:
 ifneq ($(strip $(ALL_PO_SOURCES)),)
        @echo $(ALL_PO_SOURCES)
        xgettext $(XGETTEXT_OPTIONS) --output-dir=$(po-outdir) \
         --keyword=_ --keyword=_f --keyword=_i \
         $(XGETTEXT_FLAGS) $(ALL_PO_SOURCES)
-endif
 endif
        sed -i '1,2d' $(po-outdir)/$(package).po
        sed -i -e 's/^\# This file is distributed.*/$(sed-header)/' $(po-outdir)/$(package).po
        sed -i -e 's/^\"Content-Type: text\/plain.*/$(sed-content)/' $(po-outdir)/$(package).po
+endif
 
 
 po-update: po
index b8e53f4b2ce7280527ce95d903e9f553487592e1..cdb95a45e8942c3a3f590c12124827e877f9adc5 100644 (file)
@@ -6,6 +6,3 @@ MO_FILES = $(addprefix $(outdir)/, $(PO_FILES:.po=.mo))
 
 HELP_CATALOGS = $(PO_FILES:%.po=%)
 CATALOGS = $(HELP_CATALOGS:$(DOMAIN)=)
-
-DIST_FILES += $(POT_FILES) $(PO_FILES)
-
index 5d0e06c12759ec773148afcda62a800c96344d91..fc6ea3fb8a087de804f6fe5f3943edfbb06ec1d9 100644 (file)
@@ -17,5 +17,3 @@ ifneq ($(DARWIN_BUILD),)
 SHARED_FLAGS = -bundle -flat_namespace -undefined suppress
 endif
 OUT_SO_MODULES = $(addprefix $(outdir)/, $(C_FILES:.c=$(SHARED_MODULE_SUFFIX)))
-EXTRA_DIST_FILES += $(PY_MODULES_IN)
-
index 838219a673baaf5fc3c74874c35300f08296eea4..063a346091e4c7860fcf815dac54342382009f7a 100644 (file)
@@ -24,7 +24,7 @@ endif
        touch $@
 
 # Copy files while tracking their dependencies.
-$(outdir)/%.texi: %.texi
+$(outdir)/%.texi: %.texi $(outdir)/version.itexi
        mkdir -p $(dir $@)
        $(DO_TEXI_DEP) cp -f $< $@
 
@@ -82,8 +82,8 @@ $(outdir)/%.html.omf: %.texi
 $(outdir)/%.pdf.omf: %.texi
        $(call GENERATE_OMF,pdf)
 
-$(outdir)/version.%: $(top-src-dir)/VERSION
+$(outdir)/version.itexi: $(top-src-dir)/VERSION
        $(PYTHON) $(top-src-dir)/scripts/build/create-version-itexi.py > $@
 
-$(outdir)/weblinks.%: $(top-src-dir)/VERSION
+$(outdir)/weblinks.itexi: $(top-src-dir)/VERSION
        $(PYTHON) $(top-src-dir)/scripts/build/create-weblinks-itexi.py > $@
index d164356555ded29e50d405e3364a554d27f99f4c..20170d33b3e149451822e0af17d2a6fba0d2c887 100644 (file)
@@ -17,10 +17,10 @@ $(firstword \
        $(outdir)/$(1) \
 )
 
-# Recursively scan the file $(1) for @include, search for included files
-# within the texinfo include dirs, and return all dependencies.
+# Recursively scan the file $(1) for @include and @verbatiminclude, 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)), \
+$(foreach f, $(shell test -f $(1) && sed -ne "/^@\(verbatim\)\?include[[:space:]]/s/@\(verbatim\)\?include//p" $(1)), \
        $(call find-texi,$(f)) \
        $(call scan-texi,$(call find-texi,$(f))) \
 )
@@ -31,8 +31,6 @@ 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
-
 MAKEINFO_FLAGS += --enable-encoding --error-limit=0 $(DOCUMENTATION_INCLUDES)
 MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS)
 
index f2fc5610ed65d60dd327593b34a07bc2bce5da4b..ca9a782aa17e5212df8abe2d6ee718f8e997c595 100644 (file)
@@ -1,7 +1,3 @@
 TO_TOP_FILES=$(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
 
-DOCUMENTATION_INCLUDES +=\
- -I $(top-src-dir)/Documentation/usage\
- -I $(top-src-dir)/Documentation/contributor\
-
 #
index d2748a97a3280e2e16ea575485ba9b2c40b2fe11..f26070db8248cd946fc5090cf10c211bbde4a2b3 100644 (file)
@@ -1,31 +1,19 @@
-.PHONY: install-doc uninstall-doc
+.PHONY: install-doc uninstall-doc distclean top-doc
 install-doc:
 uninstall-doc:
 
-local-dist: configure
+distclean: clean doc-clean test-clean log-clean
+       $(MAKE) local-distclean
 
 local-distclean:
-       rm -f config.hh config.make Makefile GNUmakefile \
-               config.cache config.status config.log index.html \
-               stepmake/stepmake/stepmake stepmake/stepmake/bin
+       rm -f config.hh config.make GNUmakefile \
+               config.cache config.status config.log
        rm -rf autom4te.cache
        rm -rf $(outdir)
 
-local-maintainerclean:
-
 GNUmakefile: GNUmakefile.in
        $(MAKE) INFILE=$< OUTFILE=$@ -f $(stepdir)/automatically-generated.sub.make
 
-ifneq ($(PACKAGE),STEPMAKE)
-aclocal.m4: $(stepmake)/aclocal.m4
-       $(MAKE) INFILE=$< OUTFILE=$@ LINECOMMENT=dnl -f $(stepdir)/automatically-generated.sub.make
-
-autogen.sh: $(stepmake)/autogen.sh
-       $(MAKE) INFILE=$< OUTFILE=$@ LINECOMMENT=\# -f $(stepdir)/automatically-generated.sub.make
-       chmod +x autogen.sh
-endif
-
-
 $(package-icon):
        $(MAKE) -C Documentation/logo icon
 
@@ -44,22 +32,11 @@ ifeq ($(strip $(SRCMAKE)),)
        $(MAKE) final-install
 endif
 
-local-dist: top-doc
-
-dist:
-       rm -rf $(distdir)
-       $(MAKE) local-dist $(distdir)
-       chmod -R a+r $(distdir)
-       chmod  a+x `find $(distdir) -type d -print`
-       (cd ./$(depth)/$(outdir); $(TAR) -cf -  --owner=0 --group=0 $(DIST_NAME) | gzip -9 > $(DIST_NAME).tar.gz)
-       rm -rf $(distdir)
-
 local-help:
        @echo "  config          rerun configure"
        @echo "  dist            roll tarball: $(depth)/$(outdir)/$(distname).tar.gz"
-       @echo "  distclean       also remove configure output"
-       @echo "  cvs-clean       also remove out directories and generated files"
-       @echo "  maintainerclean also remove distributed generated files"
+       @echo "  distclean       make clean, doc-clean, test-clean, log-clean and"
+       @echo "                   also remove configure output"
        @echo "  po              make new translation Portable Object database"
        @echo "  po-replace      do po-update and replace catalogs with msgmerged versions"
        @echo "  po-update       update translation Portable Object database"
@@ -78,6 +55,6 @@ local-help:
        @echo "  test-clean"
        @echo
        @echo "  For more information on these targets, see"
-       @echo "    \`Testing LilyPond' in the Contributor's Guide."
+       @echo "    \`Verify regression tests' in the Contributor's Guide."
        @echo
 
index e260f4b97b1746713db91cf34fb051cd55833e51..c8c34a4e5e680b019b47c2d25b83011c3f889fb2 100644 (file)
@@ -1,7 +1,3 @@
-
-# override Generic_vars.make:
-DIST_FILES := $(EXTRA_DIST_FILES)
-
 # urg?
 include $(stepdir)/documentation-vars.make